/* * 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/). */ (self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([["app/login/page"],{ /***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22C%3A%5C%5CUsers%5C%5CUser%5C%5CDesktop%5C%5Ceternos%5C%5Cfrontend%5C%5Cstyle%5C%5Capp%5C%5Clogin%5C%5Cpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!": /*!*******************************************************************************************************************************************************************************************************************************************************************************!*\ !*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22C%3A%5C%5CUsers%5C%5CUser%5C%5CDesktop%5C%5Ceternos%5C%5Cfrontend%5C%5Cstyle%5C%5Capp%5C%5Clogin%5C%5Cpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false! ***! \*******************************************************************************************************************************************************************************************************************************************************************************/ /***/ (function(__unused_webpack_module, __unused_webpack_exports, __webpack_require__) { eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./app/login/page.tsx */ \"(app-pages-browser)/./app/login/page.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtZmxpZ2h0LWNsaWVudC1lbnRyeS1sb2FkZXIuanM/bW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyQyUzQSU1QyU1Q1VzZXJzJTVDJTVDVXNlciU1QyU1Q0Rlc2t0b3AlNUMlNUNldGVybm9zJTVDJTVDZnJvbnRlbmQlNUMlNUNzdHlsZSU1QyU1Q2FwcCU1QyU1Q2xvZ2luJTVDJTVDcGFnZS50c3glMjIlMkMlMjJpZHMlMjIlM0ElNUIlNUQlN0Qmc2VydmVyPWZhbHNlISIsIm1hcHBpbmdzIjoiQUFBQSxrS0FBNkciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLz8xYjQ3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiICovIFwiQzpcXFxcVXNlcnNcXFxcVXNlclxcXFxEZXNrdG9wXFxcXGV0ZXJub3NcXFxcZnJvbnRlbmRcXFxcc3R5bGVcXFxcYXBwXFxcXGxvZ2luXFxcXHBhZ2UudHN4XCIpO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22C%3A%5C%5CUsers%5C%5CUser%5C%5CDesktop%5C%5Ceternos%5C%5Cfrontend%5C%5Cstyle%5C%5Capp%5C%5Clogin%5C%5Cpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/api/navigation.js": /*!**************************************************!*\ !*** ./node_modules/next/dist/api/navigation.js ***! \**************************************************/ /***/ (function(__unused_webpack_module, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../client/components/navigation */ \"(app-pages-browser)/./node_modules/next/dist/client/components/navigation.js\");\n/* harmony import */ var _client_components_navigation__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_client_components_navigation__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(var __WEBPACK_IMPORT_KEY__ in _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = function(key) { return _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__[key]; }.bind(0, __WEBPACK_IMPORT_KEY__)\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\r\n\r\n//# sourceMappingURL=navigation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL25hdmlnYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdEO0FBQ2hEO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL25leHQvZGlzdC9hcGkvbmF2aWdhdGlvbi5qcz85Y2Y5Il0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuLi9jbGllbnQvY29tcG9uZW50cy9uYXZpZ2F0aW9uXCI7XHJcblxyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1uYXZpZ2F0aW9uLmpzLm1hcCJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/api/navigation.js\n")); /***/ }), /***/ "(app-pages-browser)/./app/login/page.tsx": /*!****************************!*\ !*** ./app/login/page.tsx ***! \****************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": function() { return /* binding */ LoginPage; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/button */ \"(app-pages-browser)/./components/ui/button.tsx\");\n/* harmony import */ var _components_ui_input__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/components/ui/input */ \"(app-pages-browser)/./components/ui/input.tsx\");\n/* harmony import */ var _components_ui_label__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/components/ui/label */ \"(app-pages-browser)/./components/ui/label.tsx\");\n/* harmony import */ var _contexts_auth_context__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/contexts/auth-context */ \"(app-pages-browser)/./contexts/auth-context.tsx\");\n/* __next_internal_client_entry_do_not_use__ default auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\n\nfunction LoginPage() {\n _s();\n const [email, setEmail] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const [password, setPassword] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(\"\");\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter)();\n const { login } = (0,_contexts_auth_context__WEBPACK_IMPORTED_MODULE_6__.useAuth)();\n const handleSubmit = (e)=>{\n e.preventDefault();\n // In a real application, you would validate credentials here\n login();\n router.push(\"/cart\");\n };\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"container mx-auto px-4 py-8\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"text-2xl font-bold mb-6\",\n children: \"Войти\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\User\\\\Desktop\\\\eternos\\\\frontend\\\\style\\\\app\\\\login\\\\page.tsx\",\n lineNumber: 25,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: handleSubmit,\n className: \"space-y-4 max-w-md mx-auto\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_label__WEBPACK_IMPORTED_MODULE_5__.Label, {\n htmlFor: \"email\",\n children: \"Email\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\User\\\\Desktop\\\\eternos\\\\frontend\\\\style\\\\app\\\\login\\\\page.tsx\",\n lineNumber: 28,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_4__.Input, {\n type: \"email\",\n id: \"email\",\n value: email,\n onChange: (e)=>setEmail(e.target.value),\n required: true\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\User\\\\Desktop\\\\eternos\\\\frontend\\\\style\\\\app\\\\login\\\\page.tsx\",\n lineNumber: 29,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\User\\\\Desktop\\\\eternos\\\\frontend\\\\style\\\\app\\\\login\\\\page.tsx\",\n lineNumber: 27,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_label__WEBPACK_IMPORTED_MODULE_5__.Label, {\n htmlFor: \"password\",\n children: \"Пароль\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\User\\\\Desktop\\\\eternos\\\\frontend\\\\style\\\\app\\\\login\\\\page.tsx\",\n lineNumber: 38,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_4__.Input, {\n type: \"password\",\n id: \"password\",\n value: password,\n onChange: (e)=>setPassword(e.target.value),\n required: true\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\User\\\\Desktop\\\\eternos\\\\frontend\\\\style\\\\app\\\\login\\\\page.tsx\",\n lineNumber: 39,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\User\\\\Desktop\\\\eternos\\\\frontend\\\\style\\\\app\\\\login\\\\page.tsx\",\n lineNumber: 37,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_3__.Button, {\n type: \"submit\",\n className: \"w-full\",\n children: \"Войти\"\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\User\\\\Desktop\\\\eternos\\\\frontend\\\\style\\\\app\\\\login\\\\page.tsx\",\n lineNumber: 47,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\User\\\\Desktop\\\\eternos\\\\frontend\\\\style\\\\app\\\\login\\\\page.tsx\",\n lineNumber: 26,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"C:\\\\Users\\\\User\\\\Desktop\\\\eternos\\\\frontend\\\\style\\\\app\\\\login\\\\page.tsx\",\n lineNumber: 24,\n columnNumber: 5\n }, this);\n}\n_s(LoginPage, \"f4feqzBaaycV4cML98Ouyh+xllc=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_2__.useRouter,\n _contexts_auth_context__WEBPACK_IMPORTED_MODULE_6__.useAuth\n ];\n});\n_c = LoginPage;\nvar _c;\n$RefreshReg$(_c, \"LoginPage\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports signature on update so we can compare the boundary\r\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\r\n module.hot.dispose(function (data) {\r\n data.prevSignature =\r\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevSignature !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevSignature !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2FwcC9sb2dpbi9wYWdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUVnQztBQUNXO0FBQ0k7QUFDRjtBQUNBO0FBQ0k7QUFFbEMsU0FBU007O0lBQ3RCLE1BQU0sQ0FBQ0MsT0FBT0MsU0FBUyxHQUFHUiwrQ0FBUUEsQ0FBQztJQUNuQyxNQUFNLENBQUNTLFVBQVVDLFlBQVksR0FBR1YsK0NBQVFBLENBQUM7SUFDekMsTUFBTVcsU0FBU1YsMERBQVNBO0lBQ3hCLE1BQU0sRUFBRVcsS0FBSyxFQUFFLEdBQUdQLCtEQUFPQTtJQUV6QixNQUFNUSxlQUFlLENBQUNDO1FBQ3BCQSxFQUFFQyxjQUFjO1FBQ2hCLDZEQUE2RDtRQUM3REg7UUFDQUQsT0FBT0ssSUFBSSxDQUFDO0lBQ2Q7SUFFQSxxQkFDRSw4REFBQ0M7UUFBSUMsV0FBVTs7MEJBQ2IsOERBQUNDO2dCQUFHRCxXQUFVOzBCQUEwQjs7Ozs7OzBCQUN4Qyw4REFBQ0U7Z0JBQUtDLFVBQVVSO2dCQUFjSyxXQUFVOztrQ0FDdEMsOERBQUNEOzswQ0FDQyw4REFBQ2IsdURBQUtBO2dDQUFDa0IsU0FBUTswQ0FBUTs7Ozs7OzBDQUN2Qiw4REFBQ25CLHVEQUFLQTtnQ0FDSm9CLE1BQUs7Z0NBQ0xDLElBQUc7Z0NBQ0hDLE9BQU9sQjtnQ0FDUG1CLFVBQVUsQ0FBQ1osSUFBTU4sU0FBU00sRUFBRWEsTUFBTSxDQUFDRixLQUFLO2dDQUN4Q0csUUFBUTs7Ozs7Ozs7Ozs7O2tDQUdaLDhEQUFDWDs7MENBQ0MsOERBQUNiLHVEQUFLQTtnQ0FBQ2tCLFNBQVE7MENBQVc7Ozs7OzswQ0FDMUIsOERBQUNuQix1REFBS0E7Z0NBQ0pvQixNQUFLO2dDQUNMQyxJQUFHO2dDQUNIQyxPQUFPaEI7Z0NBQ1BpQixVQUFVLENBQUNaLElBQU1KLFlBQVlJLEVBQUVhLE1BQU0sQ0FBQ0YsS0FBSztnQ0FDM0NHLFFBQVE7Ozs7Ozs7Ozs7OztrQ0FHWiw4REFBQzFCLHlEQUFNQTt3QkFBQ3FCLE1BQUs7d0JBQVNMLFdBQVU7a0NBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUlqRDtHQXpDd0JaOztRQUdQTCxzREFBU0E7UUFDTkksMkRBQU9BOzs7S0FKSEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vYXBwL2xvZ2luL3BhZ2UudHN4PzQ5MGEiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCJcclxuXHJcbmltcG9ydCB7IHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCJcclxuaW1wb3J0IHsgdXNlUm91dGVyIH0gZnJvbSBcIm5leHQvbmF2aWdhdGlvblwiXHJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCJAL2NvbXBvbmVudHMvdWkvYnV0dG9uXCJcclxuaW1wb3J0IHsgSW5wdXQgfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2lucHV0XCJcclxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2xhYmVsXCJcclxuaW1wb3J0IHsgdXNlQXV0aCB9IGZyb20gXCJAL2NvbnRleHRzL2F1dGgtY29udGV4dFwiXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMb2dpblBhZ2UoKSB7XHJcbiAgY29uc3QgW2VtYWlsLCBzZXRFbWFpbF0gPSB1c2VTdGF0ZShcIlwiKVxyXG4gIGNvbnN0IFtwYXNzd29yZCwgc2V0UGFzc3dvcmRdID0gdXNlU3RhdGUoXCJcIilcclxuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKVxyXG4gIGNvbnN0IHsgbG9naW4gfSA9IHVzZUF1dGgoKVxyXG5cclxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSAoZTogUmVhY3QuRm9ybUV2ZW50KSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KClcclxuICAgIC8vIEluIGEgcmVhbCBhcHBsaWNhdGlvbiwgeW91IHdvdWxkIHZhbGlkYXRlIGNyZWRlbnRpYWxzIGhlcmVcclxuICAgIGxvZ2luKClcclxuICAgIHJvdXRlci5wdXNoKFwiL2NhcnRcIilcclxuICB9XHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbnRhaW5lciBteC1hdXRvIHB4LTQgcHktOFwiPlxyXG4gICAgICA8aDEgY2xhc3NOYW1lPVwidGV4dC0yeGwgZm9udC1ib2xkIG1iLTZcIj7QktC+0LnRgtC4PC9oMT5cclxuICAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdH0gY2xhc3NOYW1lPVwic3BhY2UteS00IG1heC13LW1kIG14LWF1dG9cIj5cclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgPExhYmVsIGh0bWxGb3I9XCJlbWFpbFwiPkVtYWlsPC9MYWJlbD5cclxuICAgICAgICAgIDxJbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwiZW1haWxcIlxyXG4gICAgICAgICAgICBpZD1cImVtYWlsXCJcclxuICAgICAgICAgICAgdmFsdWU9e2VtYWlsfVxyXG4gICAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEVtYWlsKGUudGFyZ2V0LnZhbHVlKX1cclxuICAgICAgICAgICAgcmVxdWlyZWRcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgIDxMYWJlbCBodG1sRm9yPVwicGFzc3dvcmRcIj7Qn9Cw0YDQvtC70Yw8L0xhYmVsPlxyXG4gICAgICAgICAgPElucHV0XHJcbiAgICAgICAgICAgIHR5cGU9XCJwYXNzd29yZFwiXHJcbiAgICAgICAgICAgIGlkPVwicGFzc3dvcmRcIlxyXG4gICAgICAgICAgICB2YWx1ZT17cGFzc3dvcmR9XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXsoZSkgPT4gc2V0UGFzc3dvcmQoZS50YXJnZXQudmFsdWUpfVxyXG4gICAgICAgICAgICByZXF1aXJlZFxyXG4gICAgICAgICAgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8QnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzc05hbWU9XCJ3LWZ1bGxcIj7QktC+0LnRgtC4PC9CdXR0b24+XHJcbiAgICAgIDwvZm9ybT5cclxuICAgIDwvZGl2PlxyXG4gIClcclxufVxyXG5cclxuIl0sIm5hbWVzIjpbInVzZVN0YXRlIiwidXNlUm91dGVyIiwiQnV0dG9uIiwiSW5wdXQiLCJMYWJlbCIsInVzZUF1dGgiLCJMb2dpblBhZ2UiLCJlbWFpbCIsInNldEVtYWlsIiwicGFzc3dvcmQiLCJzZXRQYXNzd29yZCIsInJvdXRlciIsImxvZ2luIiwiaGFuZGxlU3VibWl0IiwiZSIsInByZXZlbnREZWZhdWx0IiwicHVzaCIsImRpdiIsImNsYXNzTmFtZSIsImgxIiwiZm9ybSIsIm9uU3VibWl0IiwiaHRtbEZvciIsInR5cGUiLCJpZCIsInZhbHVlIiwib25DaGFuZ2UiLCJ0YXJnZXQiLCJyZXF1aXJlZCJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./app/login/page.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ui/button.tsx": /*!**********************************!*\ !*** ./components/ui/button.tsx ***! \**********************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Button: function() { return /* binding */ Button; },\n/* harmony export */ buttonVariants: function() { return /* binding */ buttonVariants; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @radix-ui/react-slot */ \"(app-pages-browser)/./node_modules/@radix-ui/react-slot/dist/index.mjs\");\n/* harmony import */ var class_variance_authority__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! class-variance-authority */ \"(app-pages-browser)/./node_modules/class-variance-authority/dist/index.mjs\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./lib/utils.ts\");\n\n\n\n\n\nconst buttonVariants = (0,class_variance_authority__WEBPACK_IMPORTED_MODULE_2__.cva)(\"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\", {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground hover:bg-primary/90\",\n destructive: \"bg-destructive text-destructive-foreground hover:bg-destructive/90\",\n outline: \"border border-input bg-background hover:bg-accent hover:text-accent-foreground\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80\",\n ghost: \"hover:bg-accent hover:text-accent-foreground\",\n link: \"text-primary underline-offset-4 hover:underline\"\n },\n size: {\n default: \"h-10 px-4 py-2\",\n sm: \"h-9 rounded-md px-3\",\n lg: \"h-11 rounded-md px-8\",\n icon: \"h-10 w-10\"\n }\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\"\n }\n});\nconst Button = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(_c = (param, ref)=>{\n let { className, variant, size, asChild = false, ...props } = param;\n const Comp = asChild ? _radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_4__.Slot : \"button\";\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Comp, {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)(buttonVariants({\n variant,\n size,\n className\n })),\n ref: ref,\n ...props\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\User\\\\Desktop\\\\eternos\\\\frontend\\\\style\\\\components\\\\ui\\\\button.tsx\",\n lineNumber: 46,\n columnNumber: 7\n }, undefined);\n});\n_c1 = Button;\nButton.displayName = \"Button\";\n\nvar _c, _c1;\n$RefreshReg$(_c, \"Button$React.forwardRef\");\n$RefreshReg$(_c1, \"Button\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports signature on update so we can compare the boundary\r\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\r\n module.hot.dispose(function (data) {\r\n data.prevSignature =\r\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevSignature !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevSignature !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvdWkvYnV0dG9uLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBOEI7QUFDYTtBQUNzQjtBQUVqQztBQUVoQyxNQUFNSSxpQkFBaUJGLDZEQUFHQSxDQUN4Qiw0VkFDQTtJQUNFRyxVQUFVO1FBQ1JDLFNBQVM7WUFDUEMsU0FBUztZQUNUQyxhQUNFO1lBQ0ZDLFNBQ0U7WUFDRkMsV0FDRTtZQUNGQyxPQUFPO1lBQ1BDLE1BQU07UUFDUjtRQUNBQyxNQUFNO1lBQ0pOLFNBQVM7WUFDVE8sSUFBSTtZQUNKQyxJQUFJO1lBQ0pDLE1BQU07UUFDUjtJQUNGO0lBQ0FDLGlCQUFpQjtRQUNmWCxTQUFTO1FBQ1RPLE1BQU07SUFDUjtBQUNGO0FBU0YsTUFBTUssdUJBQVNsQiw2Q0FBZ0IsTUFDN0IsUUFBMERvQjtRQUF6RCxFQUFFQyxTQUFTLEVBQUVmLE9BQU8sRUFBRU8sSUFBSSxFQUFFUyxVQUFVLEtBQUssRUFBRSxHQUFHQyxPQUFPO0lBQ3RELE1BQU1DLE9BQU9GLFVBQVVyQixzREFBSUEsR0FBRztJQUM5QixxQkFDRSw4REFBQ3VCO1FBQ0NILFdBQVdsQiw4Q0FBRUEsQ0FBQ0MsZUFBZTtZQUFFRTtZQUFTTztZQUFNUTtRQUFVO1FBQ3hERCxLQUFLQTtRQUNKLEdBQUdHLEtBQUs7Ozs7OztBQUdmOztBQUVGTCxPQUFPTyxXQUFXLEdBQUc7QUFFWSIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL3VpL2J1dHRvbi50c3g/ODk0NCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIlxyXG5pbXBvcnQgeyBTbG90IH0gZnJvbSBcIkByYWRpeC11aS9yZWFjdC1zbG90XCJcclxuaW1wb3J0IHsgY3ZhLCB0eXBlIFZhcmlhbnRQcm9wcyB9IGZyb20gXCJjbGFzcy12YXJpYW5jZS1hdXRob3JpdHlcIlxyXG5cclxuaW1wb3J0IHsgY24gfSBmcm9tIFwiQC9saWIvdXRpbHNcIlxyXG5cclxuY29uc3QgYnV0dG9uVmFyaWFudHMgPSBjdmEoXHJcbiAgXCJpbmxpbmUtZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTIgd2hpdGVzcGFjZS1ub3dyYXAgcm91bmRlZC1tZCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgdHJhbnNpdGlvbi1jb2xvcnMgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmUgZm9jdXMtdmlzaWJsZTpyaW5nLTIgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLW9mZnNldC0yIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6b3BhY2l0eS01MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaXplLTQgWyZfc3ZnXTpzaHJpbmstMFwiLFxyXG4gIHtcclxuICAgIHZhcmlhbnRzOiB7XHJcbiAgICAgIHZhcmlhbnQ6IHtcclxuICAgICAgICBkZWZhdWx0OiBcImJnLXByaW1hcnkgdGV4dC1wcmltYXJ5LWZvcmVncm91bmQgaG92ZXI6YmctcHJpbWFyeS85MFwiLFxyXG4gICAgICAgIGRlc3RydWN0aXZlOlxyXG4gICAgICAgICAgXCJiZy1kZXN0cnVjdGl2ZSB0ZXh0LWRlc3RydWN0aXZlLWZvcmVncm91bmQgaG92ZXI6YmctZGVzdHJ1Y3RpdmUvOTBcIixcclxuICAgICAgICBvdXRsaW5lOlxyXG4gICAgICAgICAgXCJib3JkZXIgYm9yZGVyLWlucHV0IGJnLWJhY2tncm91bmQgaG92ZXI6YmctYWNjZW50IGhvdmVyOnRleHQtYWNjZW50LWZvcmVncm91bmRcIixcclxuICAgICAgICBzZWNvbmRhcnk6XHJcbiAgICAgICAgICBcImJnLXNlY29uZGFyeSB0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kIGhvdmVyOmJnLXNlY29uZGFyeS84MFwiLFxyXG4gICAgICAgIGdob3N0OiBcImhvdmVyOmJnLWFjY2VudCBob3Zlcjp0ZXh0LWFjY2VudC1mb3JlZ3JvdW5kXCIsXHJcbiAgICAgICAgbGluazogXCJ0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZVwiLFxyXG4gICAgICB9LFxyXG4gICAgICBzaXplOiB7XHJcbiAgICAgICAgZGVmYXVsdDogXCJoLTEwIHB4LTQgcHktMlwiLFxyXG4gICAgICAgIHNtOiBcImgtOSByb3VuZGVkLW1kIHB4LTNcIixcclxuICAgICAgICBsZzogXCJoLTExIHJvdW5kZWQtbWQgcHgtOFwiLFxyXG4gICAgICAgIGljb246IFwiaC0xMCB3LTEwXCIsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAgZGVmYXVsdFZhcmlhbnRzOiB7XHJcbiAgICAgIHZhcmlhbnQ6IFwiZGVmYXVsdFwiLFxyXG4gICAgICBzaXplOiBcImRlZmF1bHRcIixcclxuICAgIH0sXHJcbiAgfVxyXG4pXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJ1dHRvblByb3BzXHJcbiAgZXh0ZW5kcyBSZWFjdC5CdXR0b25IVE1MQXR0cmlidXRlczxIVE1MQnV0dG9uRWxlbWVudD4sXHJcbiAgICBWYXJpYW50UHJvcHM8dHlwZW9mIGJ1dHRvblZhcmlhbnRzPiB7XHJcbiAgYXNDaGlsZD86IGJvb2xlYW5cclxufVxyXG5cclxuY29uc3QgQnV0dG9uID0gUmVhY3QuZm9yd2FyZFJlZjxIVE1MQnV0dG9uRWxlbWVudCwgQnV0dG9uUHJvcHM+KFxyXG4gICh7IGNsYXNzTmFtZSwgdmFyaWFudCwgc2l6ZSwgYXNDaGlsZCA9IGZhbHNlLCAuLi5wcm9wcyB9LCByZWYpID0+IHtcclxuICAgIGNvbnN0IENvbXAgPSBhc0NoaWxkID8gU2xvdCA6IFwiYnV0dG9uXCJcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxDb21wXHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbihidXR0b25WYXJpYW50cyh7IHZhcmlhbnQsIHNpemUsIGNsYXNzTmFtZSB9KSl9XHJcbiAgICAgICAgcmVmPXtyZWZ9XHJcbiAgICAgICAgey4uLnByb3BzfVxyXG4gICAgICAvPlxyXG4gICAgKVxyXG4gIH1cclxuKVxyXG5CdXR0b24uZGlzcGxheU5hbWUgPSBcIkJ1dHRvblwiXHJcblxyXG5leHBvcnQgeyBCdXR0b24sIGJ1dHRvblZhcmlhbnRzIH1cclxuIl0sIm5hbWVzIjpbIlJlYWN0IiwiU2xvdCIsImN2YSIsImNuIiwiYnV0dG9uVmFyaWFudHMiLCJ2YXJpYW50cyIsInZhcmlhbnQiLCJkZWZhdWx0IiwiZGVzdHJ1Y3RpdmUiLCJvdXRsaW5lIiwic2Vjb25kYXJ5IiwiZ2hvc3QiLCJsaW5rIiwic2l6ZSIsInNtIiwibGciLCJpY29uIiwiZGVmYXVsdFZhcmlhbnRzIiwiQnV0dG9uIiwiZm9yd2FyZFJlZiIsInJlZiIsImNsYXNzTmFtZSIsImFzQ2hpbGQiLCJwcm9wcyIsIkNvbXAiLCJkaXNwbGF5TmFtZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ui/button.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ui/input.tsx": /*!*********************************!*\ !*** ./components/ui/input.tsx ***! \*********************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Input: function() { return /* binding */ Input; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./lib/utils.ts\");\n\n\n\nconst Input = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(_c = (param, ref)=>{\n let { className, type, ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"input\", {\n type: type,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\", className),\n ref: ref,\n ...props\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\User\\\\Desktop\\\\eternos\\\\frontend\\\\style\\\\components\\\\ui\\\\input.tsx\",\n lineNumber: 8,\n columnNumber: 7\n }, undefined);\n});\n_c1 = Input;\nInput.displayName = \"Input\";\n\nvar _c, _c1;\n$RefreshReg$(_c, \"Input$React.forwardRef\");\n$RefreshReg$(_c1, \"Input\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports signature on update so we can compare the boundary\r\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\r\n module.hot.dispose(function (data) {\r\n data.prevSignature =\r\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevSignature !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevSignature !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvdWkvaW5wdXQudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUE4QjtBQUVFO0FBRWhDLE1BQU1FLHNCQUFRRiw2Q0FBZ0IsTUFDNUIsUUFBZ0NJO1FBQS9CLEVBQUVDLFNBQVMsRUFBRUMsSUFBSSxFQUFFLEdBQUdDLE9BQU87SUFDNUIscUJBQ0UsOERBQUNDO1FBQ0NGLE1BQU1BO1FBQ05ELFdBQVdKLDhDQUFFQSxDQUNYLGtZQUNBSTtRQUVGRCxLQUFLQTtRQUNKLEdBQUdHLEtBQUs7Ozs7OztBQUdmOztBQUVGTCxNQUFNTyxXQUFXLEdBQUc7QUFFSiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL3VpL2lucHV0LnRzeD9kYTc5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiXHJcblxyXG5pbXBvcnQgeyBjbiB9IGZyb20gXCJAL2xpYi91dGlsc1wiXHJcblxyXG5jb25zdCBJbnB1dCA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTElucHV0RWxlbWVudCwgUmVhY3QuQ29tcG9uZW50UHJvcHM8XCJpbnB1dFwiPj4oXHJcbiAgKHsgY2xhc3NOYW1lLCB0eXBlLCAuLi5wcm9wcyB9LCByZWYpID0+IHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxpbnB1dFxyXG4gICAgICAgIHR5cGU9e3R5cGV9XHJcbiAgICAgICAgY2xhc3NOYW1lPXtjbihcclxuICAgICAgICAgIFwiZmxleCBoLTEwIHctZnVsbCByb3VuZGVkLW1kIGJvcmRlciBib3JkZXItaW5wdXQgYmctYmFja2dyb3VuZCBweC0zIHB5LTIgdGV4dC1iYXNlIHJpbmctb2Zmc2V0LWJhY2tncm91bmQgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZSBmb2N1cy12aXNpYmxlOnJpbmctMiBmb2N1cy12aXNpYmxlOnJpbmctcmluZyBmb2N1cy12aXNpYmxlOnJpbmctb2Zmc2V0LTIgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOm9wYWNpdHktNTAgbWQ6dGV4dC1zbVwiLFxyXG4gICAgICAgICAgY2xhc3NOYW1lXHJcbiAgICAgICAgKX1cclxuICAgICAgICByZWY9e3JlZn1cclxuICAgICAgICB7Li4ucHJvcHN9XHJcbiAgICAgIC8+XHJcbiAgICApXHJcbiAgfVxyXG4pXHJcbklucHV0LmRpc3BsYXlOYW1lID0gXCJJbnB1dFwiXHJcblxyXG5leHBvcnQgeyBJbnB1dCB9XHJcbiJdLCJuYW1lcyI6WyJSZWFjdCIsImNuIiwiSW5wdXQiLCJmb3J3YXJkUmVmIiwicmVmIiwiY2xhc3NOYW1lIiwidHlwZSIsInByb3BzIiwiaW5wdXQiLCJkaXNwbGF5TmFtZSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ui/input.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./components/ui/label.tsx": /*!*********************************!*\ !*** ./components/ui/label.tsx ***! \*********************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Label: function() { return /* binding */ Label; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _radix_ui_react_label__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @radix-ui/react-label */ \"(app-pages-browser)/./node_modules/@radix-ui/react-label/dist/index.mjs\");\n/* harmony import */ var class_variance_authority__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! class-variance-authority */ \"(app-pages-browser)/./node_modules/class-variance-authority/dist/index.mjs\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ Label auto */ \n\n\n\n\nconst labelVariants = (0,class_variance_authority__WEBPACK_IMPORTED_MODULE_2__.cva)(\"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70\");\nconst Label = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_1__.forwardRef(_c = (param, ref)=>{\n let { className, ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_radix_ui_react_label__WEBPACK_IMPORTED_MODULE_4__.Root, {\n ref: ref,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_3__.cn)(labelVariants(), className),\n ...props\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\User\\\\Desktop\\\\eternos\\\\frontend\\\\style\\\\components\\\\ui\\\\label.tsx\",\n lineNumber: 18,\n columnNumber: 3\n }, undefined);\n});\n_c1 = Label;\nLabel.displayName = _radix_ui_react_label__WEBPACK_IMPORTED_MODULE_4__.Root.displayName;\n\nvar _c, _c1;\n$RefreshReg$(_c, \"Label$React.forwardRef\");\n$RefreshReg$(_c1, \"Label\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports signature on update so we can compare the boundary\r\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\r\n module.hot.dispose(function (data) {\r\n data.prevSignature =\r\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevSignature !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevSignature !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbXBvbmVudHMvdWkvbGFiZWwudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRThCO0FBQ3lCO0FBQ1U7QUFFakM7QUFFaEMsTUFBTUksZ0JBQWdCRiw2REFBR0EsQ0FDdkI7QUFHRixNQUFNRyxzQkFBUUwsNkNBQWdCLE1BSTVCLFFBQTBCTztRQUF6QixFQUFFQyxTQUFTLEVBQUUsR0FBR0MsT0FBTzt5QkFDeEIsOERBQUNSLHVEQUFtQjtRQUNsQk0sS0FBS0E7UUFDTEMsV0FBV0wsOENBQUVBLENBQUNDLGlCQUFpQkk7UUFDOUIsR0FBR0MsS0FBSzs7Ozs7Ozs7QUFHYkosTUFBTU0sV0FBVyxHQUFHVix1REFBbUIsQ0FBQ1UsV0FBVztBQUVuQyIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9jb21wb25lbnRzL3VpL2xhYmVsLnRzeD84OGVkIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiXHJcblxyXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIlxyXG5pbXBvcnQgKiBhcyBMYWJlbFByaW1pdGl2ZSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWxhYmVsXCJcclxuaW1wb3J0IHsgY3ZhLCB0eXBlIFZhcmlhbnRQcm9wcyB9IGZyb20gXCJjbGFzcy12YXJpYW5jZS1hdXRob3JpdHlcIlxyXG5cclxuaW1wb3J0IHsgY24gfSBmcm9tIFwiQC9saWIvdXRpbHNcIlxyXG5cclxuY29uc3QgbGFiZWxWYXJpYW50cyA9IGN2YShcclxuICBcInRleHQtc20gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIHBlZXItZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIHBlZXItZGlzYWJsZWQ6b3BhY2l0eS03MFwiXHJcbilcclxuXHJcbmNvbnN0IExhYmVsID0gUmVhY3QuZm9yd2FyZFJlZjxcclxuICBSZWFjdC5FbGVtZW50UmVmPHR5cGVvZiBMYWJlbFByaW1pdGl2ZS5Sb290PixcclxuICBSZWFjdC5Db21wb25lbnRQcm9wc1dpdGhvdXRSZWY8dHlwZW9mIExhYmVsUHJpbWl0aXZlLlJvb3Q+ICZcclxuICAgIFZhcmlhbnRQcm9wczx0eXBlb2YgbGFiZWxWYXJpYW50cz5cclxuPigoeyBjbGFzc05hbWUsIC4uLnByb3BzIH0sIHJlZikgPT4gKFxyXG4gIDxMYWJlbFByaW1pdGl2ZS5Sb290XHJcbiAgICByZWY9e3JlZn1cclxuICAgIGNsYXNzTmFtZT17Y24obGFiZWxWYXJpYW50cygpLCBjbGFzc05hbWUpfVxyXG4gICAgey4uLnByb3BzfVxyXG4gIC8+XHJcbikpXHJcbkxhYmVsLmRpc3BsYXlOYW1lID0gTGFiZWxQcmltaXRpdmUuUm9vdC5kaXNwbGF5TmFtZVxyXG5cclxuZXhwb3J0IHsgTGFiZWwgfVxyXG4iXSwibmFtZXMiOlsiUmVhY3QiLCJMYWJlbFByaW1pdGl2ZSIsImN2YSIsImNuIiwibGFiZWxWYXJpYW50cyIsIkxhYmVsIiwiZm9yd2FyZFJlZiIsInJlZiIsImNsYXNzTmFtZSIsInByb3BzIiwiUm9vdCIsImRpc3BsYXlOYW1lIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./components/ui/label.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./contexts/auth-context.tsx": /*!***********************************!*\ !*** ./contexts/auth-context.tsx ***! \***********************************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ AuthProvider: function() { return /* binding */ AuthProvider; },\n/* harmony export */ useAuth: function() { return /* binding */ useAuth; }\n/* harmony export */ });\n/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react/jsx-dev-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__);\n/* __next_internal_client_entry_do_not_use__ useAuth,AuthProvider auto */ \nvar _s = $RefreshSig$(), _s1 = $RefreshSig$();\n\nconst AuthContext = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_1__.createContext)(undefined);\nconst useAuth = ()=>{\n _s();\n const context = (0,react__WEBPACK_IMPORTED_MODULE_1__.useContext)(AuthContext);\n if (!context) {\n throw new Error(\"useAuth must be used within an AuthProvider\");\n }\n return context;\n};\n_s(useAuth, \"b9L3QQ+jgeyIrH0NfHrJ8nn7VMU=\");\nconst AuthProvider = (param)=>{\n let { children } = param;\n _s1();\n const [isLoggedIn, setIsLoggedIn] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const login = ()=>setIsLoggedIn(true);\n const logout = ()=>setIsLoggedIn(false);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(AuthContext.Provider, {\n value: {\n isLoggedIn,\n login,\n logout\n },\n children: children\n }, void 0, false, {\n fileName: \"C:\\\\Users\\\\User\\\\Desktop\\\\eternos\\\\frontend\\\\style\\\\contexts\\\\auth-context.tsx\",\n lineNumber: 28,\n columnNumber: 5\n }, undefined);\n};\n_s1(AuthProvider, \"g0MSgNVZk+vKiEFnDJ9VPEfswFA=\");\n_c = AuthProvider;\nvar _c;\n$RefreshReg$(_c, \"AuthProvider\");\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports signature on update so we can compare the boundary\r\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\r\n module.hot.dispose(function (data) {\r\n data.prevSignature =\r\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevSignature !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevSignature !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2NvbnRleHRzL2F1dGgtY29udGV4dC50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUVrRTtBQVFsRSxNQUFNSSw0QkFBY0gsb0RBQWFBLENBQThCSTtBQUV4RCxNQUFNQyxVQUFVOztJQUNyQixNQUFNQyxVQUFVTCxpREFBVUEsQ0FBQ0U7SUFDM0IsSUFBSSxDQUFDRyxTQUFTO1FBQ1osTUFBTSxJQUFJQyxNQUFNO0lBQ2xCO0lBQ0EsT0FBT0Q7QUFDVCxFQUFDO0dBTllEO0FBUU4sTUFBTUcsZUFBd0Q7UUFBQyxFQUFFQyxRQUFRLEVBQUU7O0lBQ2hGLE1BQU0sQ0FBQ0MsWUFBWUMsY0FBYyxHQUFHVCwrQ0FBUUEsQ0FBQztJQUU3QyxNQUFNVSxRQUFRLElBQU1ELGNBQWM7SUFDbEMsTUFBTUUsU0FBUyxJQUFNRixjQUFjO0lBRW5DLHFCQUNFLDhEQUFDUixZQUFZVyxRQUFRO1FBQUNDLE9BQU87WUFBRUw7WUFBWUU7WUFBT0M7UUFBTztrQkFDdERKOzs7Ozs7QUFHUCxFQUFDO0lBWFlEO0tBQUFBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2NvbnRleHRzL2F1dGgtY29udGV4dC50c3g/YzM0MyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIlxyXG5cclxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXHJcblxyXG50eXBlIEF1dGhDb250ZXh0VHlwZSA9IHtcclxuICBpc0xvZ2dlZEluOiBib29sZWFuXHJcbiAgbG9naW46ICgpID0+IHZvaWRcclxuICBsb2dvdXQ6ICgpID0+IHZvaWRcclxufVxyXG5cclxuY29uc3QgQXV0aENvbnRleHQgPSBjcmVhdGVDb250ZXh0PEF1dGhDb250ZXh0VHlwZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxyXG5cclxuZXhwb3J0IGNvbnN0IHVzZUF1dGggPSAoKSA9PiB7XHJcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoQXV0aENvbnRleHQpXHJcbiAgaWYgKCFjb250ZXh0KSB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3VzZUF1dGggbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBBdXRoUHJvdmlkZXInKVxyXG4gIH1cclxuICByZXR1cm4gY29udGV4dFxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgQXV0aFByb3ZpZGVyOiBSZWFjdC5GQzx7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfT4gPSAoeyBjaGlsZHJlbiB9KSA9PiB7XHJcbiAgY29uc3QgW2lzTG9nZ2VkSW4sIHNldElzTG9nZ2VkSW5dID0gdXNlU3RhdGUoZmFsc2UpXHJcblxyXG4gIGNvbnN0IGxvZ2luID0gKCkgPT4gc2V0SXNMb2dnZWRJbih0cnVlKVxyXG4gIGNvbnN0IGxvZ291dCA9ICgpID0+IHNldElzTG9nZ2VkSW4oZmFsc2UpXHJcblxyXG4gIHJldHVybiAoXHJcbiAgICA8QXV0aENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3sgaXNMb2dnZWRJbiwgbG9naW4sIGxvZ291dCB9fT5cclxuICAgICAge2NoaWxkcmVufVxyXG4gICAgPC9BdXRoQ29udGV4dC5Qcm92aWRlcj5cclxuICApXHJcbn1cclxuXHJcbiJdLCJuYW1lcyI6WyJSZWFjdCIsImNyZWF0ZUNvbnRleHQiLCJ1c2VDb250ZXh0IiwidXNlU3RhdGUiLCJBdXRoQ29udGV4dCIsInVuZGVmaW5lZCIsInVzZUF1dGgiLCJjb250ZXh0IiwiRXJyb3IiLCJBdXRoUHJvdmlkZXIiLCJjaGlsZHJlbiIsImlzTG9nZ2VkSW4iLCJzZXRJc0xvZ2dlZEluIiwibG9naW4iLCJsb2dvdXQiLCJQcm92aWRlciIsInZhbHVlIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./contexts/auth-context.tsx\n")); /***/ }), /***/ "(app-pages-browser)/./lib/utils.ts": /*!**********************!*\ !*** ./lib/utils.ts ***! \**********************/ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ cn: function() { return /* binding */ cn; }\n/* harmony export */ });\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! clsx */ \"(app-pages-browser)/./node_modules/clsx/dist/clsx.mjs\");\n/* harmony import */ var tailwind_merge__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! tailwind-merge */ \"(app-pages-browser)/./node_modules/tailwind-merge/dist/bundle-mjs.mjs\");\n\n\nfunction cn() {\n for(var _len = arguments.length, inputs = new Array(_len), _key = 0; _key < _len; _key++){\n inputs[_key] = arguments[_key];\n }\n return (0,tailwind_merge__WEBPACK_IMPORTED_MODULE_1__.twMerge)((0,clsx__WEBPACK_IMPORTED_MODULE_0__.clsx)(inputs));\n}\n\n\n;\r\n // Wrapped in an IIFE to avoid polluting the global scope\r\n ;\r\n (function () {\r\n var _a, _b;\r\n // Legacy CSS implementations will `eval` browser code in a Node.js context\r\n // to extract CSS. For backwards compatibility, we need to check we're in a\r\n // browser context before continuing.\r\n if (typeof self !== 'undefined' &&\r\n // AMP / No-JS mode does not inject these helpers:\r\n '$RefreshHelpers$' in self) {\r\n // @ts-ignore __webpack_module__ is global\r\n var currentExports = module.exports;\r\n // @ts-ignore __webpack_module__ is global\r\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\r\n // This cannot happen in MainTemplate because the exports mismatch between\r\n // templating and execution.\r\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\r\n // A module can be accepted automatically based on its exports, e.g. when\r\n // it is a Refresh Boundary.\r\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\r\n // Save the previous exports signature on update so we can compare the boundary\r\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\r\n module.hot.dispose(function (data) {\r\n data.prevSignature =\r\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\r\n });\r\n // Unconditionally accept an update to this module, we'll check if it's\r\n // still a Refresh Boundary later.\r\n // @ts-ignore importMeta is replaced in the loader\r\n module.hot.accept();\r\n // This field is set when the previous version of this module was a\r\n // Refresh Boundary, letting us know we need to check for invalidation or\r\n // enqueue an update.\r\n if (prevSignature !== null) {\r\n // A boundary can become ineligible if its exports are incompatible\r\n // with the previous exports.\r\n //\r\n // For example, if you add/remove/change exports, we'll want to\r\n // re-execute the importing modules, and force those components to\r\n // re-render. Similarly, if you convert a class component to a\r\n // function, we want to invalidate the boundary.\r\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\r\n module.hot.invalidate();\r\n }\r\n else {\r\n self.$RefreshHelpers$.scheduleUpdate();\r\n }\r\n }\r\n }\r\n else {\r\n // Since we just executed the code for the module, it's possible that the\r\n // new exports made it ineligible for being a boundary.\r\n // We only care about the case when we were _previously_ a boundary,\r\n // because we already accepted this update (accidental side effect).\r\n var isNoLongerABoundary = prevSignature !== null;\r\n if (isNoLongerABoundary) {\r\n module.hot.invalidate();\r\n }\r\n }\r\n }\r\n })();\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL2xpYi91dGlscy50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBNEM7QUFDSjtBQUVqQyxTQUFTRTtJQUFHO1FBQUdDLE9BQUgsdUJBQXVCOztJQUN4QyxPQUFPRix1REFBT0EsQ0FBQ0QsMENBQUlBLENBQUNHO0FBQ3RCIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL2xpYi91dGlscy50cz9mNzQ1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ2xhc3NWYWx1ZSwgY2xzeCB9IGZyb20gXCJjbHN4XCJcclxuaW1wb3J0IHsgdHdNZXJnZSB9IGZyb20gXCJ0YWlsd2luZC1tZXJnZVwiXHJcbiBcclxuZXhwb3J0IGZ1bmN0aW9uIGNuKC4uLmlucHV0czogQ2xhc3NWYWx1ZVtdKSB7XHJcbiAgcmV0dXJuIHR3TWVyZ2UoY2xzeChpbnB1dHMpKVxyXG59XHJcblxyXG4iXSwibmFtZXMiOlsiY2xzeCIsInR3TWVyZ2UiLCJjbiIsImlucHV0cyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./lib/utils.ts\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js": /*!****************************************************************************************!*\ !*** ./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js ***! \****************************************************************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("/**\r\n * @license React\r\n * react-jsx-dev-runtime.development.js\r\n *\r\n * Copyright (c) Meta Platforms, Inc. and affiliates.\r\n *\r\n * This source code is licensed under the MIT license found in the\r\n * LICENSE file in the root directory of this source tree.\r\n */\r\n\r\n\r\n\r\nif (true) {\r\n (function() {\r\n'use strict';\r\n\r\nvar React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\r\n\r\n// ATTENTION\r\n// When adding new symbols to this file,\r\n// Please consider also adding to 'react-devtools-shared/src/backend/ReactSymbols'\r\n// The Symbol used to tag the ReactElement-like types.\r\nvar REACT_ELEMENT_TYPE = Symbol.for('react.element');\r\nvar REACT_PORTAL_TYPE = Symbol.for('react.portal');\r\nvar REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\r\nvar REACT_STRICT_MODE_TYPE = Symbol.for('react.strict_mode');\r\nvar REACT_PROFILER_TYPE = Symbol.for('react.profiler');\r\nvar REACT_PROVIDER_TYPE = Symbol.for('react.provider'); // TODO: Delete with enableRenderableContext\r\n\r\nvar REACT_CONSUMER_TYPE = Symbol.for('react.consumer');\r\nvar REACT_CONTEXT_TYPE = Symbol.for('react.context');\r\nvar REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\r\nvar REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\r\nvar REACT_SUSPENSE_LIST_TYPE = Symbol.for('react.suspense_list');\r\nvar REACT_MEMO_TYPE = Symbol.for('react.memo');\r\nvar REACT_LAZY_TYPE = Symbol.for('react.lazy');\r\nvar REACT_OFFSCREEN_TYPE = Symbol.for('react.offscreen');\r\nvar REACT_CACHE_TYPE = Symbol.for('react.cache');\r\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\r\nvar FAUX_ITERATOR_SYMBOL = '@@iterator';\r\nfunction getIteratorFn(maybeIterable) {\r\n if (maybeIterable === null || typeof maybeIterable !== 'object') {\r\n return null;\r\n }\r\n\r\n var maybeIterator = MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL];\r\n\r\n if (typeof maybeIterator === 'function') {\r\n return maybeIterator;\r\n }\r\n\r\n return null;\r\n}\r\n\r\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\r\n\r\nfunction error(format) {\r\n {\r\n {\r\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\r\n args[_key2 - 1] = arguments[_key2];\r\n }\r\n\r\n printWarning('error', format, args);\r\n }\r\n }\r\n}\r\n\r\nfunction printWarning(level, format, args) {\r\n // When changing this logic, you might want to also\r\n // update consoleWithStackDev.www.js as well.\r\n {\r\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\r\n var stack = ReactDebugCurrentFrame.getStackAddendum();\r\n\r\n if (stack !== '') {\r\n format += '%s';\r\n args = args.concat([stack]);\r\n } // eslint-disable-next-line react-internal/safe-string-coercion\r\n\r\n\r\n var argsWithFormat = args.map(function (item) {\r\n return String(item);\r\n }); // Careful: RN currently depends on this prefix\r\n\r\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\r\n // breaks IE9: https://github.com/facebook/react/issues/13610\r\n // eslint-disable-next-line react-internal/no-production-logging\r\n\r\n Function.prototype.apply.call(console[level], console, argsWithFormat);\r\n }\r\n}\r\n\r\n// -----------------------------------------------------------------------------\r\n\r\nvar enableScopeAPI = false; // Experimental Create Event Handle API.\r\nvar enableCacheElement = false;\r\nvar enableTransitionTracing = false; // No known bugs, but needs performance testing\r\n\r\nvar enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\r\nvar enableRenderableContext = false;\r\n// stuff. Intended to enable React core members to more easily debug scheduling\r\n// issues in DEV builds.\r\n\r\nvar enableDebugTracing = false;\r\n\r\nfunction getWrappedName(outerType, innerType, wrapperName) {\r\n var displayName = outerType.displayName;\r\n\r\n if (displayName) {\r\n return displayName;\r\n }\r\n\r\n var functionName = innerType.displayName || innerType.name || '';\r\n return functionName !== '' ? wrapperName + \"(\" + functionName + \")\" : wrapperName;\r\n} // Keep in sync with react-reconciler/getComponentNameFromFiber\r\n\r\n\r\nfunction getContextName(type) {\r\n return type.displayName || 'Context';\r\n}\r\n\r\nvar REACT_CLIENT_REFERENCE$2 = Symbol.for('react.client.reference'); // Note that the reconciler package should generally prefer to use getComponentNameFromFiber() instead.\r\n\r\nfunction getComponentNameFromType(type) {\r\n if (type == null) {\r\n // Host root, text node or just invalid type.\r\n return null;\r\n }\r\n\r\n if (typeof type === 'function') {\r\n if (type.$$typeof === REACT_CLIENT_REFERENCE$2) {\r\n // TODO: Create a convention for naming client references with debug info.\r\n return null;\r\n }\r\n\r\n return type.displayName || type.name || null;\r\n }\r\n\r\n if (typeof type === 'string') {\r\n return type;\r\n }\r\n\r\n switch (type) {\r\n case REACT_FRAGMENT_TYPE:\r\n return 'Fragment';\r\n\r\n case REACT_PORTAL_TYPE:\r\n return 'Portal';\r\n\r\n case REACT_PROFILER_TYPE:\r\n return 'Profiler';\r\n\r\n case REACT_STRICT_MODE_TYPE:\r\n return 'StrictMode';\r\n\r\n case REACT_SUSPENSE_TYPE:\r\n return 'Suspense';\r\n\r\n case REACT_SUSPENSE_LIST_TYPE:\r\n return 'SuspenseList';\r\n\r\n case REACT_CACHE_TYPE:\r\n {\r\n return 'Cache';\r\n }\r\n\r\n }\r\n\r\n if (typeof type === 'object') {\r\n {\r\n if (typeof type.tag === 'number') {\r\n error('Received an unexpected object in getComponentNameFromType(). ' + 'This is likely a bug in React. Please file an issue.');\r\n }\r\n }\r\n\r\n switch (type.$$typeof) {\r\n case REACT_PROVIDER_TYPE:\r\n {\r\n var provider = type;\r\n return getContextName(provider._context) + '.Provider';\r\n }\r\n\r\n case REACT_CONTEXT_TYPE:\r\n var context = type;\r\n\r\n {\r\n return getContextName(context) + '.Consumer';\r\n }\r\n\r\n case REACT_CONSUMER_TYPE:\r\n {\r\n return null;\r\n }\r\n\r\n case REACT_FORWARD_REF_TYPE:\r\n return getWrappedName(type, type.render, 'ForwardRef');\r\n\r\n case REACT_MEMO_TYPE:\r\n var outerName = type.displayName || null;\r\n\r\n if (outerName !== null) {\r\n return outerName;\r\n }\r\n\r\n return getComponentNameFromType(type.type) || 'Memo';\r\n\r\n case REACT_LAZY_TYPE:\r\n {\r\n var lazyComponent = type;\r\n var payload = lazyComponent._payload;\r\n var init = lazyComponent._init;\r\n\r\n try {\r\n return getComponentNameFromType(init(payload));\r\n } catch (x) {\r\n return null;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null;\r\n}\r\n\r\n// $FlowFixMe[method-unbinding]\r\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nvar assign = Object.assign;\r\n\r\n/*\r\n * The `'' + value` pattern (used in perf-sensitive code) throws for Symbol\r\n * and Temporal.* types. See https://github.com/facebook/react/pull/22064.\r\n *\r\n * The functions in this module will throw an easier-to-understand,\r\n * easier-to-debug exception with a clear errors message message explaining the\r\n * problem. (Instead of a confusing exception thrown inside the implementation\r\n * of the `value` object).\r\n */\r\n// $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\r\nfunction typeName(value) {\r\n {\r\n // toStringTag is needed for namespaced types like Temporal.Instant\r\n var hasToStringTag = typeof Symbol === 'function' && Symbol.toStringTag;\r\n var type = hasToStringTag && value[Symbol.toStringTag] || value.constructor.name || 'Object'; // $FlowFixMe[incompatible-return]\r\n\r\n return type;\r\n }\r\n} // $FlowFixMe[incompatible-return] only called in DEV, so void return is not possible.\r\n\r\n\r\nfunction willCoercionThrow(value) {\r\n {\r\n try {\r\n testStringCoercion(value);\r\n return false;\r\n } catch (e) {\r\n return true;\r\n }\r\n }\r\n}\r\n\r\nfunction testStringCoercion(value) {\r\n // If you ended up here by following an exception call stack, here's what's\r\n // happened: you supplied an object or symbol value to React (as a prop, key,\r\n // DOM attribute, CSS property, string ref, etc.) and when React tried to\r\n // coerce it to a string using `'' + value`, an exception was thrown.\r\n //\r\n // The most common types that will cause this exception are `Symbol` instances\r\n // and Temporal objects like `Temporal.Instant`. But any object that has a\r\n // `valueOf` or `[Symbol.toPrimitive]` method that throws will also cause this\r\n // exception. (Library authors do this to prevent users from using built-in\r\n // numeric operators like `+` or comparison operators like `>=` because custom\r\n // methods are needed to perform accurate arithmetic or comparison.)\r\n //\r\n // To fix the problem, coerce this object or symbol value to a string before\r\n // passing it to React. The most reliable way is usually `String(value)`.\r\n //\r\n // To find which value is throwing, check the browser or debugger console.\r\n // Before this exception was thrown, there should be `console.error` output\r\n // that shows the type (Symbol, Temporal.PlainDate, etc.) that caused the\r\n // problem and how that type was used: key, atrribute, input value prop, etc.\r\n // In most cases, this console output also shows the component and its\r\n // ancestor components where the exception happened.\r\n //\r\n // eslint-disable-next-line react-internal/safe-string-coercion\r\n return '' + value;\r\n}\r\nfunction checkKeyStringCoercion(value) {\r\n {\r\n if (willCoercionThrow(value)) {\r\n error('The provided key is an unsupported type %s.' + ' This value must be coerced to a string before using it here.', typeName(value));\r\n\r\n return testStringCoercion(value); // throw (to help callers find troubleshooting comments)\r\n }\r\n }\r\n}\r\n\r\nvar REACT_CLIENT_REFERENCE$1 = Symbol.for('react.client.reference');\r\nfunction isValidElementType(type) {\r\n if (typeof type === 'string' || typeof type === 'function') {\r\n return true;\r\n } // Note: typeof might be other than 'symbol' or 'number' (e.g. if it's a polyfill).\r\n\r\n\r\n if (type === REACT_FRAGMENT_TYPE || type === REACT_PROFILER_TYPE || enableDebugTracing || type === REACT_STRICT_MODE_TYPE || type === REACT_SUSPENSE_TYPE || type === REACT_SUSPENSE_LIST_TYPE || enableLegacyHidden || type === REACT_OFFSCREEN_TYPE || enableScopeAPI || enableCacheElement || enableTransitionTracing ) {\r\n return true;\r\n }\r\n\r\n if (typeof type === 'object' && type !== null) {\r\n if (type.$$typeof === REACT_LAZY_TYPE || type.$$typeof === REACT_MEMO_TYPE || type.$$typeof === REACT_CONTEXT_TYPE || type.$$typeof === REACT_PROVIDER_TYPE || enableRenderableContext || type.$$typeof === REACT_FORWARD_REF_TYPE || // This needs to include all possible module reference object\r\n // types supported by any Flight configuration anywhere since\r\n // we don't know which Flight build this will end up being used\r\n // with.\r\n type.$$typeof === REACT_CLIENT_REFERENCE$1 || type.getModuleId !== undefined) {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nvar isArrayImpl = Array.isArray; // eslint-disable-next-line no-redeclare\r\n\r\nfunction isArray(a) {\r\n return isArrayImpl(a);\r\n}\r\n\r\n// Helpers to patch console.logs to avoid logging during side-effect free\r\n// replaying on render function. This currently only patches the object\r\n// lazily which won't cover if the log function was extracted eagerly.\r\n// We could also eagerly patch the method.\r\nvar disabledDepth = 0;\r\nvar prevLog;\r\nvar prevInfo;\r\nvar prevWarn;\r\nvar prevError;\r\nvar prevGroup;\r\nvar prevGroupCollapsed;\r\nvar prevGroupEnd;\r\n\r\nfunction disabledLog() {}\r\n\r\ndisabledLog.__reactDisabledLog = true;\r\nfunction disableLogs() {\r\n {\r\n if (disabledDepth === 0) {\r\n /* eslint-disable react-internal/no-production-logging */\r\n prevLog = console.log;\r\n prevInfo = console.info;\r\n prevWarn = console.warn;\r\n prevError = console.error;\r\n prevGroup = console.group;\r\n prevGroupCollapsed = console.groupCollapsed;\r\n prevGroupEnd = console.groupEnd; // https://github.com/facebook/react/issues/19099\r\n\r\n var props = {\r\n configurable: true,\r\n enumerable: true,\r\n value: disabledLog,\r\n writable: true\r\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\r\n\r\n Object.defineProperties(console, {\r\n info: props,\r\n log: props,\r\n warn: props,\r\n error: props,\r\n group: props,\r\n groupCollapsed: props,\r\n groupEnd: props\r\n });\r\n /* eslint-enable react-internal/no-production-logging */\r\n }\r\n\r\n disabledDepth++;\r\n }\r\n}\r\nfunction reenableLogs() {\r\n {\r\n disabledDepth--;\r\n\r\n if (disabledDepth === 0) {\r\n /* eslint-disable react-internal/no-production-logging */\r\n var props = {\r\n configurable: true,\r\n enumerable: true,\r\n writable: true\r\n }; // $FlowFixMe[cannot-write] Flow thinks console is immutable.\r\n\r\n Object.defineProperties(console, {\r\n log: assign({}, props, {\r\n value: prevLog\r\n }),\r\n info: assign({}, props, {\r\n value: prevInfo\r\n }),\r\n warn: assign({}, props, {\r\n value: prevWarn\r\n }),\r\n error: assign({}, props, {\r\n value: prevError\r\n }),\r\n group: assign({}, props, {\r\n value: prevGroup\r\n }),\r\n groupCollapsed: assign({}, props, {\r\n value: prevGroupCollapsed\r\n }),\r\n groupEnd: assign({}, props, {\r\n value: prevGroupEnd\r\n })\r\n });\r\n /* eslint-enable react-internal/no-production-logging */\r\n }\r\n\r\n if (disabledDepth < 0) {\r\n error('disabledDepth fell below zero. ' + 'This is a bug in React. Please file an issue.');\r\n }\r\n }\r\n}\r\n\r\nvar ReactCurrentDispatcher = ReactSharedInternals.ReactCurrentDispatcher;\r\nvar prefix;\r\nfunction describeBuiltInComponentFrame(name, ownerFn) {\r\n {\r\n if (prefix === undefined) {\r\n // Extract the VM specific prefix used by each line.\r\n try {\r\n throw Error();\r\n } catch (x) {\r\n var match = x.stack.trim().match(/\\n( *(at )?)/);\r\n prefix = match && match[1] || '';\r\n }\r\n } // We use the prefix to ensure our stacks line up with native stack frames.\r\n\r\n\r\n return '\\n' + prefix + name;\r\n }\r\n}\r\nvar reentry = false;\r\nvar componentFrameCache;\r\n\r\n{\r\n var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map;\r\n componentFrameCache = new PossiblyWeakMap();\r\n}\r\n/**\r\n * Leverages native browser/VM stack frames to get proper details (e.g.\r\n * filename, line + col number) for a single component in a component stack. We\r\n * do this by:\r\n * (1) throwing and catching an error in the function - this will be our\r\n * control error.\r\n * (2) calling the component which will eventually throw an error that we'll\r\n * catch - this will be our sample error.\r\n * (3) diffing the control and sample error stacks to find the stack frame\r\n * which represents our component.\r\n */\r\n\r\n\r\nfunction describeNativeComponentFrame(fn, construct) {\r\n // If something asked for a stack inside a fake render, it should get ignored.\r\n if (!fn || reentry) {\r\n return '';\r\n }\r\n\r\n {\r\n var frame = componentFrameCache.get(fn);\r\n\r\n if (frame !== undefined) {\r\n return frame;\r\n }\r\n }\r\n\r\n reentry = true;\r\n var previousPrepareStackTrace = Error.prepareStackTrace; // $FlowFixMe[incompatible-type] It does accept undefined.\r\n\r\n Error.prepareStackTrace = undefined;\r\n var previousDispatcher;\r\n\r\n {\r\n previousDispatcher = ReactCurrentDispatcher.current; // Set the dispatcher in DEV because this might be call in the render function\r\n // for warnings.\r\n\r\n ReactCurrentDispatcher.current = null;\r\n disableLogs();\r\n }\r\n /**\r\n * Finding a common stack frame between sample and control errors can be\r\n * tricky given the different types and levels of stack trace truncation from\r\n * different JS VMs. So instead we'll attempt to control what that common\r\n * frame should be through this object method:\r\n * Having both the sample and control errors be in the function under the\r\n * `DescribeNativeComponentFrameRoot` property, + setting the `name` and\r\n * `displayName` properties of the function ensures that a stack\r\n * frame exists that has the method name `DescribeNativeComponentFrameRoot` in\r\n * it for both control and sample stacks.\r\n */\r\n\r\n\r\n var RunInRootFrame = {\r\n DetermineComponentFrameRoot: function () {\r\n var control;\r\n\r\n try {\r\n // This should throw.\r\n if (construct) {\r\n // Something should be setting the props in the constructor.\r\n var Fake = function () {\r\n throw Error();\r\n }; // $FlowFixMe[prop-missing]\r\n\r\n\r\n Object.defineProperty(Fake.prototype, 'props', {\r\n set: function () {\r\n // We use a throwing setter instead of frozen or non-writable props\r\n // because that won't throw in a non-strict mode function.\r\n throw Error();\r\n }\r\n });\r\n\r\n if (typeof Reflect === 'object' && Reflect.construct) {\r\n // We construct a different control for this case to include any extra\r\n // frames added by the construct call.\r\n try {\r\n Reflect.construct(Fake, []);\r\n } catch (x) {\r\n control = x;\r\n }\r\n\r\n Reflect.construct(fn, [], Fake);\r\n } else {\r\n try {\r\n Fake.call();\r\n } catch (x) {\r\n control = x;\r\n } // $FlowFixMe[prop-missing] found when upgrading Flow\r\n\r\n\r\n fn.call(Fake.prototype);\r\n }\r\n } else {\r\n try {\r\n throw Error();\r\n } catch (x) {\r\n control = x;\r\n } // TODO(luna): This will currently only throw if the function component\r\n // tries to access React/ReactDOM/props. We should probably make this throw\r\n // in simple components too\r\n\r\n\r\n var maybePromise = fn(); // If the function component returns a promise, it's likely an async\r\n // component, which we don't yet support. Attach a noop catch handler to\r\n // silence the error.\r\n // TODO: Implement component stacks for async client components?\r\n\r\n if (maybePromise && typeof maybePromise.catch === 'function') {\r\n maybePromise.catch(function () {});\r\n }\r\n }\r\n } catch (sample) {\r\n // This is inlined manually because closure doesn't do it for us.\r\n if (sample && control && typeof sample.stack === 'string') {\r\n return [sample.stack, control.stack];\r\n }\r\n }\r\n\r\n return [null, null];\r\n }\r\n }; // $FlowFixMe[prop-missing]\r\n\r\n RunInRootFrame.DetermineComponentFrameRoot.displayName = 'DetermineComponentFrameRoot';\r\n var namePropDescriptor = Object.getOwnPropertyDescriptor(RunInRootFrame.DetermineComponentFrameRoot, 'name'); // Before ES6, the `name` property was not configurable.\r\n\r\n if (namePropDescriptor && namePropDescriptor.configurable) {\r\n // V8 utilizes a function's `name` property when generating a stack trace.\r\n Object.defineProperty(RunInRootFrame.DetermineComponentFrameRoot, // Configurable properties can be updated even if its writable descriptor\r\n // is set to `false`.\r\n // $FlowFixMe[cannot-write]\r\n 'name', {\r\n value: 'DetermineComponentFrameRoot'\r\n });\r\n }\r\n\r\n try {\r\n var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\r\n sampleStack = _RunInRootFrame$Deter[0],\r\n controlStack = _RunInRootFrame$Deter[1];\r\n\r\n if (sampleStack && controlStack) {\r\n // This extracts the first frame from the sample that isn't also in the control.\r\n // Skipping one frame that we assume is the frame that calls the two.\r\n var sampleLines = sampleStack.split('\\n');\r\n var controlLines = controlStack.split('\\n');\r\n var s = 0;\r\n var c = 0;\r\n\r\n while (s < sampleLines.length && !sampleLines[s].includes('DetermineComponentFrameRoot')) {\r\n s++;\r\n }\r\n\r\n while (c < controlLines.length && !controlLines[c].includes('DetermineComponentFrameRoot')) {\r\n c++;\r\n } // We couldn't find our intentionally injected common root frame, attempt\r\n // to find another common root frame by search from the bottom of the\r\n // control stack...\r\n\r\n\r\n if (s === sampleLines.length || c === controlLines.length) {\r\n s = sampleLines.length - 1;\r\n c = controlLines.length - 1;\r\n\r\n while (s >= 1 && c >= 0 && sampleLines[s] !== controlLines[c]) {\r\n // We expect at least one stack frame to be shared.\r\n // Typically this will be the root most one. However, stack frames may be\r\n // cut off due to maximum stack limits. In this case, one maybe cut off\r\n // earlier than the other. We assume that the sample is longer or the same\r\n // and there for cut off earlier. So we should find the root most frame in\r\n // the sample somewhere in the control.\r\n c--;\r\n }\r\n }\r\n\r\n for (; s >= 1 && c >= 0; s--, c--) {\r\n // Next we find the first one that isn't the same which should be the\r\n // frame that called our sample function and the control.\r\n if (sampleLines[s] !== controlLines[c]) {\r\n // In V8, the first line is describing the message but other VMs don't.\r\n // If we're about to return the first line, and the control is also on the same\r\n // line, that's a pretty good indicator that our sample threw at same line as\r\n // the control. I.e. before we entered the sample frame. So we ignore this result.\r\n // This can happen if you passed a class to function component, or non-function.\r\n if (s !== 1 || c !== 1) {\r\n do {\r\n s--;\r\n c--; // We may still have similar intermediate frames from the construct call.\r\n // The next one that isn't the same should be our match though.\r\n\r\n if (c < 0 || sampleLines[s] !== controlLines[c]) {\r\n // V8 adds a \"new\" prefix for native classes. Let's remove it to make it prettier.\r\n var _frame = '\\n' + sampleLines[s].replace(' at new ', ' at '); // If our component frame is labeled \"\"\r\n // but we have a user-provided \"displayName\"\r\n // splice it in to make the stack more readable.\r\n\r\n\r\n if (fn.displayName && _frame.includes('')) {\r\n _frame = _frame.replace('', fn.displayName);\r\n }\r\n\r\n if (true) {\r\n if (typeof fn === 'function') {\r\n componentFrameCache.set(fn, _frame);\r\n }\r\n } // Return the line we found.\r\n\r\n\r\n return _frame;\r\n }\r\n } while (s >= 1 && c >= 0);\r\n }\r\n\r\n break;\r\n }\r\n }\r\n }\r\n } finally {\r\n reentry = false;\r\n\r\n {\r\n ReactCurrentDispatcher.current = previousDispatcher;\r\n reenableLogs();\r\n }\r\n\r\n Error.prepareStackTrace = previousPrepareStackTrace;\r\n } // Fallback to just using the name if we couldn't make it throw.\r\n\r\n\r\n var name = fn ? fn.displayName || fn.name : '';\r\n var syntheticFrame = name ? describeBuiltInComponentFrame(name) : '';\r\n\r\n {\r\n if (typeof fn === 'function') {\r\n componentFrameCache.set(fn, syntheticFrame);\r\n }\r\n }\r\n\r\n return syntheticFrame;\r\n}\r\nfunction describeFunctionComponentFrame(fn, ownerFn) {\r\n {\r\n return describeNativeComponentFrame(fn, false);\r\n }\r\n}\r\n\r\nfunction shouldConstruct(Component) {\r\n var prototype = Component.prototype;\r\n return !!(prototype && prototype.isReactComponent);\r\n}\r\n\r\nfunction describeUnknownElementTypeFrameInDEV(type, ownerFn) {\r\n\r\n if (type == null) {\r\n return '';\r\n }\r\n\r\n if (typeof type === 'function') {\r\n {\r\n return describeNativeComponentFrame(type, shouldConstruct(type));\r\n }\r\n }\r\n\r\n if (typeof type === 'string') {\r\n return describeBuiltInComponentFrame(type);\r\n }\r\n\r\n switch (type) {\r\n case REACT_SUSPENSE_TYPE:\r\n return describeBuiltInComponentFrame('Suspense');\r\n\r\n case REACT_SUSPENSE_LIST_TYPE:\r\n return describeBuiltInComponentFrame('SuspenseList');\r\n }\r\n\r\n if (typeof type === 'object') {\r\n switch (type.$$typeof) {\r\n case REACT_FORWARD_REF_TYPE:\r\n return describeFunctionComponentFrame(type.render);\r\n\r\n case REACT_MEMO_TYPE:\r\n // Memo may contain any component type so we recursively resolve it.\r\n return describeUnknownElementTypeFrameInDEV(type.type, ownerFn);\r\n\r\n case REACT_LAZY_TYPE:\r\n {\r\n var lazyComponent = type;\r\n var payload = lazyComponent._payload;\r\n var init = lazyComponent._init;\r\n\r\n try {\r\n // Lazy may contain any component type so we recursively resolve it.\r\n return describeUnknownElementTypeFrameInDEV(init(payload), ownerFn);\r\n } catch (x) {}\r\n }\r\n }\r\n }\r\n\r\n return '';\r\n}\r\n\r\nvar ReactCurrentOwner = ReactSharedInternals.ReactCurrentOwner;\r\nvar ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\r\nvar REACT_CLIENT_REFERENCE = Symbol.for('react.client.reference');\r\nvar specialPropKeyWarningShown;\r\nvar specialPropRefWarningShown;\r\nvar didWarnAboutStringRefs;\r\n\r\n{\r\n didWarnAboutStringRefs = {};\r\n}\r\n\r\nfunction hasValidRef(config) {\r\n {\r\n if (hasOwnProperty.call(config, 'ref')) {\r\n var getter = Object.getOwnPropertyDescriptor(config, 'ref').get;\r\n\r\n if (getter && getter.isReactWarning) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return config.ref !== undefined;\r\n}\r\n\r\nfunction hasValidKey(config) {\r\n {\r\n if (hasOwnProperty.call(config, 'key')) {\r\n var getter = Object.getOwnPropertyDescriptor(config, 'key').get;\r\n\r\n if (getter && getter.isReactWarning) {\r\n return false;\r\n }\r\n }\r\n }\r\n\r\n return config.key !== undefined;\r\n}\r\n\r\nfunction warnIfStringRefCannotBeAutoConverted(config, self) {\r\n {\r\n if (typeof config.ref === 'string' && ReactCurrentOwner.current && self && ReactCurrentOwner.current.stateNode !== self) {\r\n var componentName = getComponentNameFromType(ReactCurrentOwner.current.type);\r\n\r\n if (!didWarnAboutStringRefs[componentName]) {\r\n error('Component \"%s\" contains the string ref \"%s\". ' + 'Support for string refs will be removed in a future major release. ' + 'This case cannot be automatically converted to an arrow function. ' + 'We ask you to manually fix this case by using useRef() or createRef() instead. ' + 'Learn more about using refs safely here: ' + 'https://reactjs.org/link/strict-mode-string-ref', getComponentNameFromType(ReactCurrentOwner.current.type), config.ref);\r\n\r\n didWarnAboutStringRefs[componentName] = true;\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction defineKeyPropWarningGetter(props, displayName) {\r\n {\r\n var warnAboutAccessingKey = function () {\r\n if (!specialPropKeyWarningShown) {\r\n specialPropKeyWarningShown = true;\r\n\r\n error('%s: `key` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\r\n }\r\n };\r\n\r\n warnAboutAccessingKey.isReactWarning = true;\r\n Object.defineProperty(props, 'key', {\r\n get: warnAboutAccessingKey,\r\n configurable: true\r\n });\r\n }\r\n}\r\n\r\nfunction defineRefPropWarningGetter(props, displayName) {\r\n {\r\n {\r\n var warnAboutAccessingRef = function () {\r\n if (!specialPropRefWarningShown) {\r\n specialPropRefWarningShown = true;\r\n\r\n error('%s: `ref` is not a prop. Trying to access it will result ' + 'in `undefined` being returned. If you need to access the same ' + 'value within the child component, you should pass it as a different ' + 'prop. (https://reactjs.org/link/special-props)', displayName);\r\n }\r\n };\r\n\r\n warnAboutAccessingRef.isReactWarning = true;\r\n Object.defineProperty(props, 'ref', {\r\n get: warnAboutAccessingRef,\r\n configurable: true\r\n });\r\n }\r\n }\r\n}\r\n/**\r\n * Factory method to create a new React element. This no longer adheres to\r\n * the class pattern, so do not use new to call it. Also, instanceof check\r\n * will not work. Instead test $$typeof field against Symbol.for('react.element') to check\r\n * if something is a React Element.\r\n *\r\n * @param {*} type\r\n * @param {*} props\r\n * @param {*} key\r\n * @param {string|object} ref\r\n * @param {*} owner\r\n * @param {*} self A *temporary* helper to detect places where `this` is\r\n * different from the `owner` when React.createElement is called, so that we\r\n * can warn. We want to get rid of owner and replace string `ref`s with arrow\r\n * functions, and as long as `this` and owner are the same, there will be no\r\n * change in behavior.\r\n * @param {*} source An annotation object (added by a transpiler or otherwise)\r\n * indicating filename, line number, and/or other information.\r\n * @internal\r\n */\r\n\r\n\r\nfunction ReactElement(type, key, _ref, self, source, owner, props) {\r\n var ref;\r\n\r\n {\r\n ref = _ref;\r\n }\r\n\r\n var element;\r\n\r\n {\r\n // In prod, `ref` is a regular property. It will be removed in a\r\n // future release.\r\n element = {\r\n // This tag allows us to uniquely identify this as a React Element\r\n $$typeof: REACT_ELEMENT_TYPE,\r\n // Built-in properties that belong on the element\r\n type: type,\r\n key: key,\r\n ref: ref,\r\n props: props,\r\n // Record the component responsible for creating this element.\r\n _owner: owner\r\n };\r\n }\r\n\r\n {\r\n // The validation flag is currently mutative. We put it on\r\n // an external backing store so that we can freeze the whole object.\r\n // This can be replaced with a WeakMap once they are implemented in\r\n // commonly used development environments.\r\n element._store = {}; // To make comparing ReactElements easier for testing purposes, we make\r\n // the validation flag non-enumerable (where possible, which should\r\n // include every environment we run tests in), so the test framework\r\n // ignores it.\r\n\r\n Object.defineProperty(element._store, 'validated', {\r\n configurable: false,\r\n enumerable: false,\r\n writable: true,\r\n value: false\r\n }); // debugInfo contains Server Component debug information.\r\n\r\n Object.defineProperty(element, '_debugInfo', {\r\n configurable: false,\r\n enumerable: false,\r\n writable: true,\r\n value: null\r\n });\r\n\r\n if (Object.freeze) {\r\n Object.freeze(element.props);\r\n Object.freeze(element);\r\n }\r\n }\r\n\r\n return element;\r\n}\r\nvar didWarnAboutKeySpread = {};\r\n/**\r\n * https://github.com/reactjs/rfcs/pull/107\r\n * @param {*} type\r\n * @param {object} props\r\n * @param {string} key\r\n */\r\n\r\nfunction jsxDEV$1(type, config, maybeKey, isStaticChildren, source, self) {\r\n {\r\n if (!isValidElementType(type)) {\r\n // This is an invalid element type.\r\n //\r\n // We warn in this case but don't throw. We expect the element creation to\r\n // succeed and there will likely be errors in render.\r\n var info = '';\r\n\r\n if (type === undefined || typeof type === 'object' && type !== null && Object.keys(type).length === 0) {\r\n info += ' You likely forgot to export your component from the file ' + \"it's defined in, or you might have mixed up default and named imports.\";\r\n }\r\n\r\n var typeString;\r\n\r\n if (type === null) {\r\n typeString = 'null';\r\n } else if (isArray(type)) {\r\n typeString = 'array';\r\n } else if (type !== undefined && type.$$typeof === REACT_ELEMENT_TYPE) {\r\n typeString = \"<\" + (getComponentNameFromType(type.type) || 'Unknown') + \" />\";\r\n info = ' Did you accidentally export a JSX literal instead of a component?';\r\n } else {\r\n typeString = typeof type;\r\n }\r\n\r\n error('React.jsx: type is invalid -- expected a string (for ' + 'built-in components) or a class/function (for composite ' + 'components) but got: %s.%s', typeString, info);\r\n } else {\r\n // This is a valid element type.\r\n // Skip key warning if the type isn't valid since our key validation logic\r\n // doesn't expect a non-string/function type and can throw confusing\r\n // errors. We don't want exception behavior to differ between dev and\r\n // prod. (Rendering will throw with a helpful message and as soon as the\r\n // type is fixed, the key warnings will appear.)\r\n var children = config.children;\r\n\r\n if (children !== undefined) {\r\n if (isStaticChildren) {\r\n if (isArray(children)) {\r\n for (var i = 0; i < children.length; i++) {\r\n validateChildKeys(children[i], type);\r\n }\r\n\r\n if (Object.freeze) {\r\n Object.freeze(children);\r\n }\r\n } else {\r\n error('React.jsx: Static children should always be an array. ' + 'You are likely explicitly calling React.jsxs or React.jsxDEV. ' + 'Use the Babel transform instead.');\r\n }\r\n } else {\r\n validateChildKeys(children, type);\r\n }\r\n }\r\n } // Warn about key spread regardless of whether the type is valid.\r\n\r\n\r\n if (hasOwnProperty.call(config, 'key')) {\r\n var componentName = getComponentNameFromType(type);\r\n var keys = Object.keys(config).filter(function (k) {\r\n return k !== 'key';\r\n });\r\n var beforeExample = keys.length > 0 ? '{key: someKey, ' + keys.join(': ..., ') + ': ...}' : '{key: someKey}';\r\n\r\n if (!didWarnAboutKeySpread[componentName + beforeExample]) {\r\n var afterExample = keys.length > 0 ? '{' + keys.join(': ..., ') + ': ...}' : '{}';\r\n\r\n error('A props object containing a \"key\" prop is being spread into JSX:\\n' + ' let props = %s;\\n' + ' <%s {...props} />\\n' + 'React keys must be passed directly to JSX without using spread:\\n' + ' let props = %s;\\n' + ' <%s key={someKey} {...props} />', beforeExample, componentName, afterExample, componentName);\r\n\r\n didWarnAboutKeySpread[componentName + beforeExample] = true;\r\n }\r\n }\r\n\r\n var propName; // Reserved names are extracted\r\n\r\n var props = {};\r\n var key = null;\r\n var ref = null; // Currently, key can be spread in as a prop. This causes a potential\r\n // issue if key is also explicitly declared (ie.
\r\n // or
). We want to deprecate key spread,\r\n // but as an intermediary step, we will use jsxDEV for everything except\r\n //
, because we aren't currently able to tell if\r\n // key is explicitly declared to be undefined or not.\r\n\r\n if (maybeKey !== undefined) {\r\n {\r\n checkKeyStringCoercion(maybeKey);\r\n }\r\n\r\n key = '' + maybeKey;\r\n }\r\n\r\n if (hasValidKey(config)) {\r\n {\r\n checkKeyStringCoercion(config.key);\r\n }\r\n\r\n key = '' + config.key;\r\n }\r\n\r\n if (hasValidRef(config)) {\r\n {\r\n ref = config.ref;\r\n }\r\n\r\n warnIfStringRefCannotBeAutoConverted(config, self);\r\n } // Remaining properties are added to a new props object\r\n\r\n\r\n for (propName in config) {\r\n if (hasOwnProperty.call(config, propName) && // Skip over reserved prop names\r\n propName !== 'key' && (propName !== 'ref')) {\r\n props[propName] = config[propName];\r\n }\r\n } // Resolve default props\r\n\r\n\r\n if (type && type.defaultProps) {\r\n var defaultProps = type.defaultProps;\r\n\r\n for (propName in defaultProps) {\r\n if (props[propName] === undefined) {\r\n props[propName] = defaultProps[propName];\r\n }\r\n }\r\n }\r\n\r\n if (key || ref) {\r\n var displayName = typeof type === 'function' ? type.displayName || type.name || 'Unknown' : type;\r\n\r\n if (key) {\r\n defineKeyPropWarningGetter(props, displayName);\r\n }\r\n\r\n if (ref) {\r\n defineRefPropWarningGetter(props, displayName);\r\n }\r\n }\r\n\r\n var element = ReactElement(type, key, ref, self, source, ReactCurrentOwner.current, props);\r\n\r\n if (type === REACT_FRAGMENT_TYPE) {\r\n validateFragmentProps(element);\r\n }\r\n\r\n return element;\r\n }\r\n}\r\n\r\nfunction getDeclarationErrorAddendum() {\r\n {\r\n if (ReactCurrentOwner.current) {\r\n var name = getComponentNameFromType(ReactCurrentOwner.current.type);\r\n\r\n if (name) {\r\n return '\\n\\nCheck the render method of `' + name + '`.';\r\n }\r\n }\r\n\r\n return '';\r\n }\r\n}\r\n/**\r\n * Ensure that every element either is passed in a static location, in an\r\n * array with an explicit keys property defined, or in an object literal\r\n * with valid key property.\r\n *\r\n * @internal\r\n * @param {ReactNode} node Statically passed child of any type.\r\n * @param {*} parentType node's parent's type.\r\n */\r\n\r\n\r\nfunction validateChildKeys(node, parentType) {\r\n {\r\n if (typeof node !== 'object' || !node) {\r\n return;\r\n }\r\n\r\n if (node.$$typeof === REACT_CLIENT_REFERENCE) ; else if (isArray(node)) {\r\n for (var i = 0; i < node.length; i++) {\r\n var child = node[i];\r\n\r\n if (isValidElement(child)) {\r\n validateExplicitKey(child, parentType);\r\n }\r\n }\r\n } else if (isValidElement(node)) {\r\n // This element was passed in a valid location.\r\n if (node._store) {\r\n node._store.validated = true;\r\n }\r\n } else {\r\n var iteratorFn = getIteratorFn(node);\r\n\r\n if (typeof iteratorFn === 'function') {\r\n // Entry iterators used to provide implicit keys,\r\n // but now we print a separate warning for them later.\r\n if (iteratorFn !== node.entries) {\r\n var iterator = iteratorFn.call(node);\r\n var step;\r\n\r\n while (!(step = iterator.next()).done) {\r\n if (isValidElement(step.value)) {\r\n validateExplicitKey(step.value, parentType);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n}\r\n/**\r\n * Verifies the object is a ReactElement.\r\n * See https://reactjs.org/docs/react-api.html#isvalidelement\r\n * @param {?object} object\r\n * @return {boolean} True if `object` is a ReactElement.\r\n * @final\r\n */\r\n\r\n\r\nfunction isValidElement(object) {\r\n return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE;\r\n}\r\nvar ownerHasKeyUseWarning = {};\r\n/**\r\n * Warn if the element doesn't have an explicit key assigned to it.\r\n * This element is in an array. The array could grow and shrink or be\r\n * reordered. All children that haven't already been validated are required to\r\n * have a \"key\" property assigned to it. Error statuses are cached so a warning\r\n * will only be shown once.\r\n *\r\n * @internal\r\n * @param {ReactElement} element Element that requires a key.\r\n * @param {*} parentType element's parent's type.\r\n */\r\n\r\nfunction validateExplicitKey(element, parentType) {\r\n {\r\n if (!element._store || element._store.validated || element.key != null) {\r\n return;\r\n }\r\n\r\n element._store.validated = true;\r\n var currentComponentErrorInfo = getCurrentComponentErrorInfo(parentType);\r\n\r\n if (ownerHasKeyUseWarning[currentComponentErrorInfo]) {\r\n return;\r\n }\r\n\r\n ownerHasKeyUseWarning[currentComponentErrorInfo] = true; // Usually the current owner is the offender, but if it accepts children as a\r\n // property, it may be the creator of the child that's responsible for\r\n // assigning it a key.\r\n\r\n var childOwner = '';\r\n\r\n if (element && element._owner && element._owner !== ReactCurrentOwner.current) {\r\n // Give the component that originally created this child.\r\n childOwner = \" It was passed a child from \" + getComponentNameFromType(element._owner.type) + \".\";\r\n }\r\n\r\n setCurrentlyValidatingElement(element);\r\n\r\n error('Each child in a list should have a unique \"key\" prop.' + '%s%s See https://reactjs.org/link/warning-keys for more information.', currentComponentErrorInfo, childOwner);\r\n\r\n setCurrentlyValidatingElement(null);\r\n }\r\n}\r\n\r\nfunction setCurrentlyValidatingElement(element) {\r\n {\r\n if (element) {\r\n var owner = element._owner;\r\n var stack = describeUnknownElementTypeFrameInDEV(element.type, owner ? owner.type : null);\r\n ReactDebugCurrentFrame.setExtraStackFrame(stack);\r\n } else {\r\n ReactDebugCurrentFrame.setExtraStackFrame(null);\r\n }\r\n }\r\n}\r\n\r\nfunction getCurrentComponentErrorInfo(parentType) {\r\n {\r\n var info = getDeclarationErrorAddendum();\r\n\r\n if (!info) {\r\n var parentName = getComponentNameFromType(parentType);\r\n\r\n if (parentName) {\r\n info = \"\\n\\nCheck the top-level render call using <\" + parentName + \">.\";\r\n }\r\n }\r\n\r\n return info;\r\n }\r\n}\r\n/**\r\n * Given a fragment, validate that it can only be provided with fragment props\r\n * @param {ReactElement} fragment\r\n */\r\n\r\n\r\nfunction validateFragmentProps(fragment) {\r\n // TODO: Move this to render phase instead of at element creation.\r\n {\r\n var keys = Object.keys(fragment.props);\r\n\r\n for (var i = 0; i < keys.length; i++) {\r\n var key = keys[i];\r\n\r\n if (key !== 'children' && key !== 'key') {\r\n setCurrentlyValidatingElement(fragment);\r\n\r\n error('Invalid prop `%s` supplied to `React.Fragment`. ' + 'React.Fragment can only have `key` and `children` props.', key);\r\n\r\n setCurrentlyValidatingElement(null);\r\n break;\r\n }\r\n }\r\n\r\n if (fragment.ref !== null) {\r\n setCurrentlyValidatingElement(fragment);\r\n\r\n error('Invalid attribute `ref` supplied to `React.Fragment`.');\r\n\r\n setCurrentlyValidatingElement(null);\r\n }\r\n }\r\n}\r\n\r\nvar jsxDEV = jsxDEV$1 ;\r\n\r\nexports.Fragment = REACT_FRAGMENT_TYPE;\r\nexports.jsxDEV = jsxDEV;\r\n })();\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNhO0FBQ2I7QUFDQSxJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLFlBQVksbUJBQU8sQ0FBQyxzR0FBMEI7QUFDOUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3REFBd0Q7QUFDeEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpR0FBaUcsZUFBZTtBQUNoSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLEdBQUc7QUFDUjtBQUNBLGtEQUFrRDtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEI7QUFDNUI7QUFDQSxxQ0FBcUM7QUFDckM7QUFDQSxnQ0FBZ0M7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFFQUFxRTtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0dBQWtHO0FBQ2xHO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0M7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxzQkFBc0I7QUFDdEI7QUFDQSxTQUFTO0FBQ1QsdUJBQXVCO0FBQ3ZCO0FBQ0EsU0FBUztBQUNULHVCQUF1QjtBQUN2QjtBQUNBLFNBQVM7QUFDVCx3QkFBd0I7QUFDeEI7QUFDQSxTQUFTO0FBQ1Qsd0JBQXdCO0FBQ3hCO0FBQ0EsU0FBUztBQUNULGlDQUFpQztBQUNqQztBQUNBLFNBQVM7QUFDVCwyQkFBMkI7QUFDM0I7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJEO0FBQzNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5REFBeUQ7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkM7QUFDN0M7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxnSEFBZ0g7QUFDaEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGtCQUFrQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0ZBQWdGO0FBQ2hGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsSUFBSTtBQUN4QjtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkLFdBQVcsR0FBRztBQUNkLFdBQVcsZUFBZTtBQUMxQixXQUFXLEdBQUc7QUFDZCxXQUFXLEdBQUc7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxHQUFHO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsR0FBRztBQUNkLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLDhDQUE4QyxnREFBZ0QsTUFBTSxhQUFhO0FBQ2pIO0FBQ0E7QUFDQSwrQ0FBK0Msa0NBQWtDLE9BQU87QUFDeEY7QUFDQSx1R0FBdUcsY0FBYyxVQUFVLGdHQUFnRyxrQkFBa0IsVUFBVSxVQUFVO0FBQ3JRO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCLDJEQUEyRCxVQUFVO0FBQ3JFLHlCQUF5QixVQUFVO0FBQ25DO0FBQ0EsYUFBYSxVQUFVO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxXQUFXO0FBQ3RCLFdBQVcsR0FBRztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9EQUFvRDtBQUNwRCxzQkFBc0IsaUJBQWlCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixZQUFZLFNBQVM7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekIsV0FBVyxHQUFHO0FBQ2Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZEO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGlCQUFpQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsY0FBYztBQUNkLEdBQUc7QUFDSCIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0L2Nqcy9yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanM/Y2I5MiJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGxpY2Vuc2UgUmVhY3RcclxuICogcmVhY3QtanN4LWRldi1ydW50aW1lLmRldmVsb3BtZW50LmpzXHJcbiAqXHJcbiAqIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuXHJcbiAqXHJcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxyXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXHJcbiAqL1xyXG5cclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xyXG4gIChmdW5jdGlvbigpIHtcclxuJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIFJlYWN0ID0gcmVxdWlyZShcIm5leHQvZGlzdC9jb21waWxlZC9yZWFjdFwiKTtcclxuXHJcbi8vIEFUVEVOVElPTlxyXG4vLyBXaGVuIGFkZGluZyBuZXcgc3ltYm9scyB0byB0aGlzIGZpbGUsXHJcbi8vIFBsZWFzZSBjb25zaWRlciBhbHNvIGFkZGluZyB0byAncmVhY3QtZGV2dG9vbHMtc2hhcmVkL3NyYy9iYWNrZW5kL1JlYWN0U3ltYm9scydcclxuLy8gVGhlIFN5bWJvbCB1c2VkIHRvIHRhZyB0aGUgUmVhY3RFbGVtZW50LWxpa2UgdHlwZXMuXHJcbnZhciBSRUFDVF9FTEVNRU5UX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5lbGVtZW50Jyk7XHJcbnZhciBSRUFDVF9QT1JUQUxfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnBvcnRhbCcpO1xyXG52YXIgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmZyYWdtZW50Jyk7XHJcbnZhciBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3RyaWN0X21vZGUnKTtcclxudmFyIFJFQUNUX1BST0ZJTEVSX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5wcm9maWxlcicpO1xyXG52YXIgUkVBQ1RfUFJPVklERVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LnByb3ZpZGVyJyk7IC8vIFRPRE86IERlbGV0ZSB3aXRoIGVuYWJsZVJlbmRlcmFibGVDb250ZXh0XHJcblxyXG52YXIgUkVBQ1RfQ09OU1VNRVJfVFlQRSA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNvbnN1bWVyJyk7XHJcbnZhciBSRUFDVF9DT05URVhUX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jb250ZXh0Jyk7XHJcbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QuZm9yd2FyZF9yZWYnKTtcclxudmFyIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5zdXNwZW5zZScpO1xyXG52YXIgUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFID0gU3ltYm9sLmZvcigncmVhY3Quc3VzcGVuc2VfbGlzdCcpO1xyXG52YXIgUkVBQ1RfTUVNT19UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubWVtbycpO1xyXG52YXIgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcigncmVhY3QubGF6eScpO1xyXG52YXIgUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5vZmZzY3JlZW4nKTtcclxudmFyIFJFQUNUX0NBQ0hFX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5jYWNoZScpO1xyXG52YXIgTUFZQkVfSVRFUkFUT1JfU1lNQk9MID0gU3ltYm9sLml0ZXJhdG9yO1xyXG52YXIgRkFVWF9JVEVSQVRPUl9TWU1CT0wgPSAnQEBpdGVyYXRvcic7XHJcbmZ1bmN0aW9uIGdldEl0ZXJhdG9yRm4obWF5YmVJdGVyYWJsZSkge1xyXG4gIGlmIChtYXliZUl0ZXJhYmxlID09PSBudWxsIHx8IHR5cGVvZiBtYXliZUl0ZXJhYmxlICE9PSAnb2JqZWN0Jykge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICB2YXIgbWF5YmVJdGVyYXRvciA9IE1BWUJFX0lURVJBVE9SX1NZTUJPTCAmJiBtYXliZUl0ZXJhYmxlW01BWUJFX0lURVJBVE9SX1NZTUJPTF0gfHwgbWF5YmVJdGVyYWJsZVtGQVVYX0lURVJBVE9SX1NZTUJPTF07XHJcblxyXG4gIGlmICh0eXBlb2YgbWF5YmVJdGVyYXRvciA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgcmV0dXJuIG1heWJlSXRlcmF0b3I7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxudmFyIFJlYWN0U2hhcmVkSW50ZXJuYWxzID0gUmVhY3QuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ7XHJcblxyXG5mdW5jdGlvbiBlcnJvcihmb3JtYXQpIHtcclxuICB7XHJcbiAgICB7XHJcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7XHJcbiAgICAgICAgYXJnc1tfa2V5MiAtIDFdID0gYXJndW1lbnRzW19rZXkyXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcHJpbnRXYXJuaW5nKCdlcnJvcicsIGZvcm1hdCwgYXJncyk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBwcmludFdhcm5pbmcobGV2ZWwsIGZvcm1hdCwgYXJncykge1xyXG4gIC8vIFdoZW4gY2hhbmdpbmcgdGhpcyBsb2dpYywgeW91IG1pZ2h0IHdhbnQgdG8gYWxzb1xyXG4gIC8vIHVwZGF0ZSBjb25zb2xlV2l0aFN0YWNrRGV2Lnd3dy5qcyBhcyB3ZWxsLlxyXG4gIHtcclxuICAgIHZhciBSZWFjdERlYnVnQ3VycmVudEZyYW1lID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZTtcclxuICAgIHZhciBzdGFjayA9IFJlYWN0RGVidWdDdXJyZW50RnJhbWUuZ2V0U3RhY2tBZGRlbmR1bSgpO1xyXG5cclxuICAgIGlmIChzdGFjayAhPT0gJycpIHtcclxuICAgICAgZm9ybWF0ICs9ICclcyc7XHJcbiAgICAgIGFyZ3MgPSBhcmdzLmNvbmNhdChbc3RhY2tdKTtcclxuICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXHJcblxyXG5cclxuICAgIHZhciBhcmdzV2l0aEZvcm1hdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChpdGVtKSB7XHJcbiAgICAgIHJldHVybiBTdHJpbmcoaXRlbSk7XHJcbiAgICB9KTsgLy8gQ2FyZWZ1bDogUk4gY3VycmVudGx5IGRlcGVuZHMgb24gdGhpcyBwcmVmaXhcclxuXHJcbiAgICBhcmdzV2l0aEZvcm1hdC51bnNoaWZ0KCdXYXJuaW5nOiAnICsgZm9ybWF0KTsgLy8gV2UgaW50ZW50aW9uYWxseSBkb24ndCB1c2Ugc3ByZWFkIChvciAuYXBwbHkpIGRpcmVjdGx5IGJlY2F1c2UgaXRcclxuICAgIC8vIGJyZWFrcyBJRTk6IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTM2MTBcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmdcclxuXHJcbiAgICBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChjb25zb2xlW2xldmVsXSwgY29uc29sZSwgYXJnc1dpdGhGb3JtYXQpO1xyXG4gIH1cclxufVxyXG5cclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbnZhciBlbmFibGVTY29wZUFQSSA9IGZhbHNlOyAvLyBFeHBlcmltZW50YWwgQ3JlYXRlIEV2ZW50IEhhbmRsZSBBUEkuXHJcbnZhciBlbmFibGVDYWNoZUVsZW1lbnQgPSBmYWxzZTtcclxudmFyIGVuYWJsZVRyYW5zaXRpb25UcmFjaW5nID0gZmFsc2U7IC8vIE5vIGtub3duIGJ1Z3MsIGJ1dCBuZWVkcyBwZXJmb3JtYW5jZSB0ZXN0aW5nXHJcblxyXG52YXIgZW5hYmxlTGVnYWN5SGlkZGVuID0gZmFsc2U7IC8vIEVuYWJsZXMgdW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2sgZmVhdHVyZSBpbiBGaWJlclxyXG52YXIgZW5hYmxlUmVuZGVyYWJsZUNvbnRleHQgPSBmYWxzZTtcclxuLy8gc3R1ZmYuIEludGVuZGVkIHRvIGVuYWJsZSBSZWFjdCBjb3JlIG1lbWJlcnMgdG8gbW9yZSBlYXNpbHkgZGVidWcgc2NoZWR1bGluZ1xyXG4vLyBpc3N1ZXMgaW4gREVWIGJ1aWxkcy5cclxuXHJcbnZhciBlbmFibGVEZWJ1Z1RyYWNpbmcgPSBmYWxzZTtcclxuXHJcbmZ1bmN0aW9uIGdldFdyYXBwZWROYW1lKG91dGVyVHlwZSwgaW5uZXJUeXBlLCB3cmFwcGVyTmFtZSkge1xyXG4gIHZhciBkaXNwbGF5TmFtZSA9IG91dGVyVHlwZS5kaXNwbGF5TmFtZTtcclxuXHJcbiAgaWYgKGRpc3BsYXlOYW1lKSB7XHJcbiAgICByZXR1cm4gZGlzcGxheU5hbWU7XHJcbiAgfVxyXG5cclxuICB2YXIgZnVuY3Rpb25OYW1lID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8ICcnO1xyXG4gIHJldHVybiBmdW5jdGlvbk5hbWUgIT09ICcnID8gd3JhcHBlck5hbWUgKyBcIihcIiArIGZ1bmN0aW9uTmFtZSArIFwiKVwiIDogd3JhcHBlck5hbWU7XHJcbn0gLy8gS2VlcCBpbiBzeW5jIHdpdGggcmVhY3QtcmVjb25jaWxlci9nZXRDb21wb25lbnROYW1lRnJvbUZpYmVyXHJcblxyXG5cclxuZnVuY3Rpb24gZ2V0Q29udGV4dE5hbWUodHlwZSkge1xyXG4gIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8ICdDb250ZXh0JztcclxufVxyXG5cclxudmFyIFJFQUNUX0NMSUVOVF9SRUZFUkVOQ0UkMiA9IFN5bWJvbC5mb3IoJ3JlYWN0LmNsaWVudC5yZWZlcmVuY2UnKTsgLy8gTm90ZSB0aGF0IHRoZSByZWNvbmNpbGVyIHBhY2thZ2Ugc2hvdWxkIGdlbmVyYWxseSBwcmVmZXIgdG8gdXNlIGdldENvbXBvbmVudE5hbWVGcm9tRmliZXIoKSBpbnN0ZWFkLlxyXG5cclxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKHR5cGUpIHtcclxuICBpZiAodHlwZSA9PSBudWxsKSB7XHJcbiAgICAvLyBIb3N0IHJvb3QsIHRleHQgbm9kZSBvciBqdXN0IGludmFsaWQgdHlwZS5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICBpZiAodHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQyKSB7XHJcbiAgICAgIC8vIFRPRE86IENyZWF0ZSBhIGNvbnZlbnRpb24gZm9yIG5hbWluZyBjbGllbnQgcmVmZXJlbmNlcyB3aXRoIGRlYnVnIGluZm8uXHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBudWxsO1xyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgcmV0dXJuIHR5cGU7XHJcbiAgfVxyXG5cclxuICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgIGNhc2UgUkVBQ1RfRlJBR01FTlRfVFlQRTpcclxuICAgICAgcmV0dXJuICdGcmFnbWVudCc7XHJcblxyXG4gICAgY2FzZSBSRUFDVF9QT1JUQUxfVFlQRTpcclxuICAgICAgcmV0dXJuICdQb3J0YWwnO1xyXG5cclxuICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcclxuICAgICAgcmV0dXJuICdQcm9maWxlcic7XHJcblxyXG4gICAgY2FzZSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFOlxyXG4gICAgICByZXR1cm4gJ1N0cmljdE1vZGUnO1xyXG5cclxuICAgIGNhc2UgUkVBQ1RfU1VTUEVOU0VfVFlQRTpcclxuICAgICAgcmV0dXJuICdTdXNwZW5zZSc7XHJcblxyXG4gICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XHJcbiAgICAgIHJldHVybiAnU3VzcGVuc2VMaXN0JztcclxuXHJcbiAgICBjYXNlIFJFQUNUX0NBQ0hFX1RZUEU6XHJcbiAgICAgIHtcclxuICAgICAgICByZXR1cm4gJ0NhY2hlJztcclxuICAgICAgfVxyXG5cclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcclxuICAgIHtcclxuICAgICAgaWYgKHR5cGVvZiB0eXBlLnRhZyA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBlcnJvcignUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuICcgKyAnVGhpcyBpcyBsaWtlbHkgYSBidWcgaW4gUmVhY3QuIFBsZWFzZSBmaWxlIGFuIGlzc3VlLicpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoICh0eXBlLiQkdHlwZW9mKSB7XHJcbiAgICAgIGNhc2UgUkVBQ1RfUFJPVklERVJfVFlQRTpcclxuICAgICAgICB7XHJcbiAgICAgICAgICB2YXIgcHJvdmlkZXIgPSB0eXBlO1xyXG4gICAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKHByb3ZpZGVyLl9jb250ZXh0KSArICcuUHJvdmlkZXInO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgUkVBQ1RfQ09OVEVYVF9UWVBFOlxyXG4gICAgICAgIHZhciBjb250ZXh0ID0gdHlwZTtcclxuXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcmV0dXJuIGdldENvbnRleHROYW1lKGNvbnRleHQpICsgJy5Db25zdW1lcic7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgY2FzZSBSRUFDVF9DT05TVU1FUl9UWVBFOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcclxuICAgICAgICByZXR1cm4gZ2V0V3JhcHBlZE5hbWUodHlwZSwgdHlwZS5yZW5kZXIsICdGb3J3YXJkUmVmJyk7XHJcblxyXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcclxuICAgICAgICB2YXIgb3V0ZXJOYW1lID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsO1xyXG5cclxuICAgICAgICBpZiAob3V0ZXJOYW1lICE9PSBudWxsKSB7XHJcbiAgICAgICAgICByZXR1cm4gb3V0ZXJOYW1lO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdNZW1vJztcclxuXHJcbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcclxuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcclxuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcclxuXHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKGluaXQocGF5bG9hZCkpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuLy8gJEZsb3dGaXhNZVttZXRob2QtdW5iaW5kaW5nXVxyXG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xyXG5cclxudmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ247XHJcblxyXG4vKlxyXG4gKiBUaGUgYCcnICsgdmFsdWVgIHBhdHRlcm4gKHVzZWQgaW4gcGVyZi1zZW5zaXRpdmUgY29kZSkgdGhyb3dzIGZvciBTeW1ib2xcclxuICogYW5kIFRlbXBvcmFsLiogdHlwZXMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC8yMjA2NC5cclxuICpcclxuICogVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB3aWxsIHRocm93IGFuIGVhc2llci10by11bmRlcnN0YW5kLFxyXG4gKiBlYXNpZXItdG8tZGVidWcgZXhjZXB0aW9uIHdpdGggYSBjbGVhciBlcnJvcnMgbWVzc2FnZSBtZXNzYWdlIGV4cGxhaW5pbmcgdGhlXHJcbiAqIHByb2JsZW0uIChJbnN0ZWFkIG9mIGEgY29uZnVzaW5nIGV4Y2VwdGlvbiB0aHJvd24gaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlvblxyXG4gKiBvZiB0aGUgYHZhbHVlYCBvYmplY3QpLlxyXG4gKi9cclxuLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXSBvbmx5IGNhbGxlZCBpbiBERVYsIHNvIHZvaWQgcmV0dXJuIGlzIG5vdCBwb3NzaWJsZS5cclxuZnVuY3Rpb24gdHlwZU5hbWUodmFsdWUpIHtcclxuICB7XHJcbiAgICAvLyB0b1N0cmluZ1RhZyBpcyBuZWVkZWQgZm9yIG5hbWVzcGFjZWQgdHlwZXMgbGlrZSBUZW1wb3JhbC5JbnN0YW50XHJcbiAgICB2YXIgaGFzVG9TdHJpbmdUYWcgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC50b1N0cmluZ1RhZztcclxuICAgIHZhciB0eXBlID0gaGFzVG9TdHJpbmdUYWcgJiYgdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXSB8fCB2YWx1ZS5jb25zdHJ1Y3Rvci5uYW1lIHx8ICdPYmplY3QnOyAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXHJcblxyXG4gICAgcmV0dXJuIHR5cGU7XHJcbiAgfVxyXG59IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl0gb25seSBjYWxsZWQgaW4gREVWLCBzbyB2b2lkIHJldHVybiBpcyBub3QgcG9zc2libGUuXHJcblxyXG5cclxuZnVuY3Rpb24gd2lsbENvZXJjaW9uVGhyb3codmFsdWUpIHtcclxuICB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0ZXN0U3RyaW5nQ29lcmNpb24odmFsdWUpO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKSB7XHJcbiAgLy8gSWYgeW91IGVuZGVkIHVwIGhlcmUgYnkgZm9sbG93aW5nIGFuIGV4Y2VwdGlvbiBjYWxsIHN0YWNrLCBoZXJlJ3Mgd2hhdCdzXHJcbiAgLy8gaGFwcGVuZWQ6IHlvdSBzdXBwbGllZCBhbiBvYmplY3Qgb3Igc3ltYm9sIHZhbHVlIHRvIFJlYWN0IChhcyBhIHByb3AsIGtleSxcclxuICAvLyBET00gYXR0cmlidXRlLCBDU1MgcHJvcGVydHksIHN0cmluZyByZWYsIGV0Yy4pIGFuZCB3aGVuIFJlYWN0IHRyaWVkIHRvXHJcbiAgLy8gY29lcmNlIGl0IHRvIGEgc3RyaW5nIHVzaW5nIGAnJyArIHZhbHVlYCwgYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24uXHJcbiAgLy9cclxuICAvLyBUaGUgbW9zdCBjb21tb24gdHlwZXMgdGhhdCB3aWxsIGNhdXNlIHRoaXMgZXhjZXB0aW9uIGFyZSBgU3ltYm9sYCBpbnN0YW5jZXNcclxuICAvLyBhbmQgVGVtcG9yYWwgb2JqZWN0cyBsaWtlIGBUZW1wb3JhbC5JbnN0YW50YC4gQnV0IGFueSBvYmplY3QgdGhhdCBoYXMgYVxyXG4gIC8vIGB2YWx1ZU9mYCBvciBgW1N5bWJvbC50b1ByaW1pdGl2ZV1gIG1ldGhvZCB0aGF0IHRocm93cyB3aWxsIGFsc28gY2F1c2UgdGhpc1xyXG4gIC8vIGV4Y2VwdGlvbi4gKExpYnJhcnkgYXV0aG9ycyBkbyB0aGlzIHRvIHByZXZlbnQgdXNlcnMgZnJvbSB1c2luZyBidWlsdC1pblxyXG4gIC8vIG51bWVyaWMgb3BlcmF0b3JzIGxpa2UgYCtgIG9yIGNvbXBhcmlzb24gb3BlcmF0b3JzIGxpa2UgYD49YCBiZWNhdXNlIGN1c3RvbVxyXG4gIC8vIG1ldGhvZHMgYXJlIG5lZWRlZCB0byBwZXJmb3JtIGFjY3VyYXRlIGFyaXRobWV0aWMgb3IgY29tcGFyaXNvbi4pXHJcbiAgLy9cclxuICAvLyBUbyBmaXggdGhlIHByb2JsZW0sIGNvZXJjZSB0aGlzIG9iamVjdCBvciBzeW1ib2wgdmFsdWUgdG8gYSBzdHJpbmcgYmVmb3JlXHJcbiAgLy8gcGFzc2luZyBpdCB0byBSZWFjdC4gVGhlIG1vc3QgcmVsaWFibGUgd2F5IGlzIHVzdWFsbHkgYFN0cmluZyh2YWx1ZSlgLlxyXG4gIC8vXHJcbiAgLy8gVG8gZmluZCB3aGljaCB2YWx1ZSBpcyB0aHJvd2luZywgY2hlY2sgdGhlIGJyb3dzZXIgb3IgZGVidWdnZXIgY29uc29sZS5cclxuICAvLyBCZWZvcmUgdGhpcyBleGNlcHRpb24gd2FzIHRocm93biwgdGhlcmUgc2hvdWxkIGJlIGBjb25zb2xlLmVycm9yYCBvdXRwdXRcclxuICAvLyB0aGF0IHNob3dzIHRoZSB0eXBlIChTeW1ib2wsIFRlbXBvcmFsLlBsYWluRGF0ZSwgZXRjLikgdGhhdCBjYXVzZWQgdGhlXHJcbiAgLy8gcHJvYmxlbSBhbmQgaG93IHRoYXQgdHlwZSB3YXMgdXNlZDoga2V5LCBhdHJyaWJ1dGUsIGlucHV0IHZhbHVlIHByb3AsIGV0Yy5cclxuICAvLyBJbiBtb3N0IGNhc2VzLCB0aGlzIGNvbnNvbGUgb3V0cHV0IGFsc28gc2hvd3MgdGhlIGNvbXBvbmVudCBhbmQgaXRzXHJcbiAgLy8gYW5jZXN0b3IgY29tcG9uZW50cyB3aGVyZSB0aGUgZXhjZXB0aW9uIGhhcHBlbmVkLlxyXG4gIC8vXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWludGVybmFsL3NhZmUtc3RyaW5nLWNvZXJjaW9uXHJcbiAgcmV0dXJuICcnICsgdmFsdWU7XHJcbn1cclxuZnVuY3Rpb24gY2hlY2tLZXlTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xyXG4gIHtcclxuICAgIGlmICh3aWxsQ29lcmNpb25UaHJvdyh2YWx1ZSkpIHtcclxuICAgICAgZXJyb3IoJ1RoZSBwcm92aWRlZCBrZXkgaXMgYW4gdW5zdXBwb3J0ZWQgdHlwZSAlcy4nICsgJyBUaGlzIHZhbHVlIG11c3QgYmUgY29lcmNlZCB0byBhIHN0cmluZyBiZWZvcmUgdXNpbmcgaXQgaGVyZS4nLCB0eXBlTmFtZSh2YWx1ZSkpO1xyXG5cclxuICAgICAgcmV0dXJuIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSk7IC8vIHRocm93ICh0byBoZWxwIGNhbGxlcnMgZmluZCB0cm91Ymxlc2hvb3RpbmcgY29tbWVudHMpXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG52YXIgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xyXG5mdW5jdGlvbiBpc1ZhbGlkRWxlbWVudFR5cGUodHlwZSkge1xyXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUgPT09ICdmdW5jdGlvbicpIHtcclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH0gLy8gTm90ZTogdHlwZW9mIG1pZ2h0IGJlIG90aGVyIHRoYW4gJ3N5bWJvbCcgb3IgJ251bWJlcicgKGUuZy4gaWYgaXQncyBhIHBvbHlmaWxsKS5cclxuXHJcblxyXG4gIGlmICh0eXBlID09PSBSRUFDVF9GUkFHTUVOVF9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1BST0ZJTEVSX1RZUEUgfHwgZW5hYmxlRGVidWdUcmFjaW5nICB8fCB0eXBlID09PSBSRUFDVF9TVFJJQ1RfTU9ERV9UWVBFIHx8IHR5cGUgPT09IFJFQUNUX1NVU1BFTlNFX1RZUEUgfHwgdHlwZSA9PT0gUkVBQ1RfU1VTUEVOU0VfTElTVF9UWVBFIHx8IGVuYWJsZUxlZ2FjeUhpZGRlbiAgfHwgdHlwZSA9PT0gUkVBQ1RfT0ZGU0NSRUVOX1RZUEUgfHwgZW5hYmxlU2NvcGVBUEkgIHx8IGVuYWJsZUNhY2hlRWxlbWVudCAgfHwgZW5hYmxlVHJhbnNpdGlvblRyYWNpbmcgKSB7XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcgJiYgdHlwZSAhPT0gbnVsbCkge1xyXG4gICAgaWYgKHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0xBWllfVFlQRSB8fCB0eXBlLiQkdHlwZW9mID09PSBSRUFDVF9NRU1PX1RZUEUgfHwgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ09OVEVYVF9UWVBFIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX1BST1ZJREVSX1RZUEUgfHwgZW5hYmxlUmVuZGVyYWJsZUNvbnRleHQgIHx8IHR5cGUuJCR0eXBlb2YgPT09IFJFQUNUX0ZPUldBUkRfUkVGX1RZUEUgfHwgLy8gVGhpcyBuZWVkcyB0byBpbmNsdWRlIGFsbCBwb3NzaWJsZSBtb2R1bGUgcmVmZXJlbmNlIG9iamVjdFxyXG4gICAgLy8gdHlwZXMgc3VwcG9ydGVkIGJ5IGFueSBGbGlnaHQgY29uZmlndXJhdGlvbiBhbnl3aGVyZSBzaW5jZVxyXG4gICAgLy8gd2UgZG9uJ3Qga25vdyB3aGljaCBGbGlnaHQgYnVpbGQgdGhpcyB3aWxsIGVuZCB1cCBiZWluZyB1c2VkXHJcbiAgICAvLyB3aXRoLlxyXG4gICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSQxIHx8IHR5cGUuZ2V0TW9kdWxlSWQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxudmFyIGlzQXJyYXlJbXBsID0gQXJyYXkuaXNBcnJheTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlZGVjbGFyZVxyXG5cclxuZnVuY3Rpb24gaXNBcnJheShhKSB7XHJcbiAgcmV0dXJuIGlzQXJyYXlJbXBsKGEpO1xyXG59XHJcblxyXG4vLyBIZWxwZXJzIHRvIHBhdGNoIGNvbnNvbGUubG9ncyB0byBhdm9pZCBsb2dnaW5nIGR1cmluZyBzaWRlLWVmZmVjdCBmcmVlXHJcbi8vIHJlcGxheWluZyBvbiByZW5kZXIgZnVuY3Rpb24uIFRoaXMgY3VycmVudGx5IG9ubHkgcGF0Y2hlcyB0aGUgb2JqZWN0XHJcbi8vIGxhemlseSB3aGljaCB3b24ndCBjb3ZlciBpZiB0aGUgbG9nIGZ1bmN0aW9uIHdhcyBleHRyYWN0ZWQgZWFnZXJseS5cclxuLy8gV2UgY291bGQgYWxzbyBlYWdlcmx5IHBhdGNoIHRoZSBtZXRob2QuXHJcbnZhciBkaXNhYmxlZERlcHRoID0gMDtcclxudmFyIHByZXZMb2c7XHJcbnZhciBwcmV2SW5mbztcclxudmFyIHByZXZXYXJuO1xyXG52YXIgcHJldkVycm9yO1xyXG52YXIgcHJldkdyb3VwO1xyXG52YXIgcHJldkdyb3VwQ29sbGFwc2VkO1xyXG52YXIgcHJldkdyb3VwRW5kO1xyXG5cclxuZnVuY3Rpb24gZGlzYWJsZWRMb2coKSB7fVxyXG5cclxuZGlzYWJsZWRMb2cuX19yZWFjdERpc2FibGVkTG9nID0gdHJ1ZTtcclxuZnVuY3Rpb24gZGlzYWJsZUxvZ3MoKSB7XHJcbiAge1xyXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcclxuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXHJcbiAgICAgIHByZXZMb2cgPSBjb25zb2xlLmxvZztcclxuICAgICAgcHJldkluZm8gPSBjb25zb2xlLmluZm87XHJcbiAgICAgIHByZXZXYXJuID0gY29uc29sZS53YXJuO1xyXG4gICAgICBwcmV2RXJyb3IgPSBjb25zb2xlLmVycm9yO1xyXG4gICAgICBwcmV2R3JvdXAgPSBjb25zb2xlLmdyb3VwO1xyXG4gICAgICBwcmV2R3JvdXBDb2xsYXBzZWQgPSBjb25zb2xlLmdyb3VwQ29sbGFwc2VkO1xyXG4gICAgICBwcmV2R3JvdXBFbmQgPSBjb25zb2xlLmdyb3VwRW5kOyAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE5MDk5XHJcblxyXG4gICAgICB2YXIgcHJvcHMgPSB7XHJcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxyXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXHJcbiAgICAgICAgdmFsdWU6IGRpc2FibGVkTG9nLFxyXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXHJcbiAgICAgIH07IC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXSBGbG93IHRoaW5rcyBjb25zb2xlIGlzIGltbXV0YWJsZS5cclxuXHJcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGNvbnNvbGUsIHtcclxuICAgICAgICBpbmZvOiBwcm9wcyxcclxuICAgICAgICBsb2c6IHByb3BzLFxyXG4gICAgICAgIHdhcm46IHByb3BzLFxyXG4gICAgICAgIGVycm9yOiBwcm9wcyxcclxuICAgICAgICBncm91cDogcHJvcHMsXHJcbiAgICAgICAgZ3JvdXBDb2xsYXBzZWQ6IHByb3BzLFxyXG4gICAgICAgIGdyb3VwRW5kOiBwcm9wc1xyXG4gICAgICB9KTtcclxuICAgICAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1pbnRlcm5hbC9uby1wcm9kdWN0aW9uLWxvZ2dpbmcgKi9cclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZERlcHRoKys7XHJcbiAgfVxyXG59XHJcbmZ1bmN0aW9uIHJlZW5hYmxlTG9ncygpIHtcclxuICB7XHJcbiAgICBkaXNhYmxlZERlcHRoLS07XHJcblxyXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPT09IDApIHtcclxuICAgICAgLyogZXNsaW50LWRpc2FibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXHJcbiAgICAgIHZhciBwcm9wcyA9IHtcclxuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcclxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxyXG4gICAgICB9OyAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV0gRmxvdyB0aGlua3MgY29uc29sZSBpcyBpbW11dGFibGUuXHJcblxyXG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhjb25zb2xlLCB7XHJcbiAgICAgICAgbG9nOiBhc3NpZ24oe30sIHByb3BzLCB7XHJcbiAgICAgICAgICB2YWx1ZTogcHJldkxvZ1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGluZm86IGFzc2lnbih7fSwgcHJvcHMsIHtcclxuICAgICAgICAgIHZhbHVlOiBwcmV2SW5mb1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHdhcm46IGFzc2lnbih7fSwgcHJvcHMsIHtcclxuICAgICAgICAgIHZhbHVlOiBwcmV2V2FyblxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGVycm9yOiBhc3NpZ24oe30sIHByb3BzLCB7XHJcbiAgICAgICAgICB2YWx1ZTogcHJldkVycm9yXHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgZ3JvdXA6IGFzc2lnbih7fSwgcHJvcHMsIHtcclxuICAgICAgICAgIHZhbHVlOiBwcmV2R3JvdXBcclxuICAgICAgICB9KSxcclxuICAgICAgICBncm91cENvbGxhcHNlZDogYXNzaWduKHt9LCBwcm9wcywge1xyXG4gICAgICAgICAgdmFsdWU6IHByZXZHcm91cENvbGxhcHNlZFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGdyb3VwRW5kOiBhc3NpZ24oe30sIHByb3BzLCB7XHJcbiAgICAgICAgICB2YWx1ZTogcHJldkdyb3VwRW5kXHJcbiAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICAgIC8qIGVzbGludC1lbmFibGUgcmVhY3QtaW50ZXJuYWwvbm8tcHJvZHVjdGlvbi1sb2dnaW5nICovXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRpc2FibGVkRGVwdGggPCAwKSB7XHJcbiAgICAgIGVycm9yKCdkaXNhYmxlZERlcHRoIGZlbGwgYmVsb3cgemVyby4gJyArICdUaGlzIGlzIGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS4nKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbnZhciBSZWFjdEN1cnJlbnREaXNwYXRjaGVyID0gUmVhY3RTaGFyZWRJbnRlcm5hbHMuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcjtcclxudmFyIHByZWZpeDtcclxuZnVuY3Rpb24gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSwgb3duZXJGbikge1xyXG4gIHtcclxuICAgIGlmIChwcmVmaXggPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAvLyBFeHRyYWN0IHRoZSBWTSBzcGVjaWZpYyBwcmVmaXggdXNlZCBieSBlYWNoIGxpbmUuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoKTtcclxuICAgICAgfSBjYXRjaCAoeCkge1xyXG4gICAgICAgIHZhciBtYXRjaCA9IHguc3RhY2sudHJpbSgpLm1hdGNoKC9cXG4oICooYXQgKT8pLyk7XHJcbiAgICAgICAgcHJlZml4ID0gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XHJcbiAgICAgIH1cclxuICAgIH0gLy8gV2UgdXNlIHRoZSBwcmVmaXggdG8gZW5zdXJlIG91ciBzdGFja3MgbGluZSB1cCB3aXRoIG5hdGl2ZSBzdGFjayBmcmFtZXMuXHJcblxyXG5cclxuICAgIHJldHVybiAnXFxuJyArIHByZWZpeCArIG5hbWU7XHJcbiAgfVxyXG59XHJcbnZhciByZWVudHJ5ID0gZmFsc2U7XHJcbnZhciBjb21wb25lbnRGcmFtZUNhY2hlO1xyXG5cclxue1xyXG4gIHZhciBQb3NzaWJseVdlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IFdlYWtNYXAgOiBNYXA7XHJcbiAgY29tcG9uZW50RnJhbWVDYWNoZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcclxufVxyXG4vKipcclxuICogTGV2ZXJhZ2VzIG5hdGl2ZSBicm93c2VyL1ZNIHN0YWNrIGZyYW1lcyB0byBnZXQgcHJvcGVyIGRldGFpbHMgKGUuZy5cclxuICogZmlsZW5hbWUsIGxpbmUgKyBjb2wgbnVtYmVyKSBmb3IgYSBzaW5nbGUgY29tcG9uZW50IGluIGEgY29tcG9uZW50IHN0YWNrLiBXZVxyXG4gKiBkbyB0aGlzIGJ5OlxyXG4gKiAgICgxKSB0aHJvd2luZyBhbmQgY2F0Y2hpbmcgYW4gZXJyb3IgaW4gdGhlIGZ1bmN0aW9uIC0gdGhpcyB3aWxsIGJlIG91clxyXG4gKiAgICAgICBjb250cm9sIGVycm9yLlxyXG4gKiAgICgyKSBjYWxsaW5nIHRoZSBjb21wb25lbnQgd2hpY2ggd2lsbCBldmVudHVhbGx5IHRocm93IGFuIGVycm9yIHRoYXQgd2UnbGxcclxuICogICAgICAgY2F0Y2ggLSB0aGlzIHdpbGwgYmUgb3VyIHNhbXBsZSBlcnJvci5cclxuICogICAoMykgZGlmZmluZyB0aGUgY29udHJvbCBhbmQgc2FtcGxlIGVycm9yIHN0YWNrcyB0byBmaW5kIHRoZSBzdGFjayBmcmFtZVxyXG4gKiAgICAgICB3aGljaCByZXByZXNlbnRzIG91ciBjb21wb25lbnQuXHJcbiAqL1xyXG5cclxuXHJcbmZ1bmN0aW9uIGRlc2NyaWJlTmF0aXZlQ29tcG9uZW50RnJhbWUoZm4sIGNvbnN0cnVjdCkge1xyXG4gIC8vIElmIHNvbWV0aGluZyBhc2tlZCBmb3IgYSBzdGFjayBpbnNpZGUgYSBmYWtlIHJlbmRlciwgaXQgc2hvdWxkIGdldCBpZ25vcmVkLlxyXG4gIGlmICghZm4gfHwgcmVlbnRyeSkge1xyXG4gICAgcmV0dXJuICcnO1xyXG4gIH1cclxuXHJcbiAge1xyXG4gICAgdmFyIGZyYW1lID0gY29tcG9uZW50RnJhbWVDYWNoZS5nZXQoZm4pO1xyXG5cclxuICAgIGlmIChmcmFtZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybiBmcmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZW50cnkgPSB0cnVlO1xyXG4gIHZhciBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdIEl0IGRvZXMgYWNjZXB0IHVuZGVmaW5lZC5cclxuXHJcbiAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSB1bmRlZmluZWQ7XHJcbiAgdmFyIHByZXZpb3VzRGlzcGF0Y2hlcjtcclxuXHJcbiAge1xyXG4gICAgcHJldmlvdXNEaXNwYXRjaGVyID0gUmVhY3RDdXJyZW50RGlzcGF0Y2hlci5jdXJyZW50OyAvLyBTZXQgdGhlIGRpc3BhdGNoZXIgaW4gREVWIGJlY2F1c2UgdGhpcyBtaWdodCBiZSBjYWxsIGluIHRoZSByZW5kZXIgZnVuY3Rpb25cclxuICAgIC8vIGZvciB3YXJuaW5ncy5cclxuXHJcbiAgICBSZWFjdEN1cnJlbnREaXNwYXRjaGVyLmN1cnJlbnQgPSBudWxsO1xyXG4gICAgZGlzYWJsZUxvZ3MoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRmluZGluZyBhIGNvbW1vbiBzdGFjayBmcmFtZSBiZXR3ZWVuIHNhbXBsZSBhbmQgY29udHJvbCBlcnJvcnMgY2FuIGJlXHJcbiAgICogdHJpY2t5IGdpdmVuIHRoZSBkaWZmZXJlbnQgdHlwZXMgYW5kIGxldmVscyBvZiBzdGFjayB0cmFjZSB0cnVuY2F0aW9uIGZyb21cclxuICAgKiBkaWZmZXJlbnQgSlMgVk1zLiBTbyBpbnN0ZWFkIHdlJ2xsIGF0dGVtcHQgdG8gY29udHJvbCB3aGF0IHRoYXQgY29tbW9uXHJcbiAgICogZnJhbWUgc2hvdWxkIGJlIHRocm91Z2ggdGhpcyBvYmplY3QgbWV0aG9kOlxyXG4gICAqIEhhdmluZyBib3RoIHRoZSBzYW1wbGUgYW5kIGNvbnRyb2wgZXJyb3JzIGJlIGluIHRoZSBmdW5jdGlvbiB1bmRlciB0aGVcclxuICAgKiBgRGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZVJvb3RgIHByb3BlcnR5LCArIHNldHRpbmcgdGhlIGBuYW1lYCBhbmRcclxuICAgKiBgZGlzcGxheU5hbWVgIHByb3BlcnRpZXMgb2YgdGhlIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCBhIHN0YWNrXHJcbiAgICogZnJhbWUgZXhpc3RzIHRoYXQgaGFzIHRoZSBtZXRob2QgbmFtZSBgRGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZVJvb3RgIGluXHJcbiAgICogaXQgZm9yIGJvdGggY29udHJvbCBhbmQgc2FtcGxlIHN0YWNrcy5cclxuICAgKi9cclxuXHJcblxyXG4gIHZhciBSdW5JblJvb3RGcmFtZSA9IHtcclxuICAgIERldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICB2YXIgY29udHJvbDtcclxuXHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gVGhpcyBzaG91bGQgdGhyb3cuXHJcbiAgICAgICAgaWYgKGNvbnN0cnVjdCkge1xyXG4gICAgICAgICAgLy8gU29tZXRoaW5nIHNob3VsZCBiZSBzZXR0aW5nIHRoZSBwcm9wcyBpbiB0aGUgY29uc3RydWN0b3IuXHJcbiAgICAgICAgICB2YXIgRmFrZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoKTtcclxuICAgICAgICAgIH07IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxyXG5cclxuXHJcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoRmFrZS5wcm90b3R5cGUsICdwcm9wcycsIHtcclxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgLy8gV2UgdXNlIGEgdGhyb3dpbmcgc2V0dGVyIGluc3RlYWQgb2YgZnJvemVuIG9yIG5vbi13cml0YWJsZSBwcm9wc1xyXG4gICAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhhdCB3b24ndCB0aHJvdyBpbiBhIG5vbi1zdHJpY3QgbW9kZSBmdW5jdGlvbi5cclxuICAgICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICdvYmplY3QnICYmIFJlZmxlY3QuY29uc3RydWN0KSB7XHJcbiAgICAgICAgICAgIC8vIFdlIGNvbnN0cnVjdCBhIGRpZmZlcmVudCBjb250cm9sIGZvciB0aGlzIGNhc2UgdG8gaW5jbHVkZSBhbnkgZXh0cmFcclxuICAgICAgICAgICAgLy8gZnJhbWVzIGFkZGVkIGJ5IHRoZSBjb25zdHJ1Y3QgY2FsbC5cclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBSZWZsZWN0LmNvbnN0cnVjdChGYWtlLCBbXSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcclxuICAgICAgICAgICAgICBjb250cm9sID0geDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgUmVmbGVjdC5jb25zdHJ1Y3QoZm4sIFtdLCBGYWtlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgRmFrZS5jYWxsKCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKHgpIHtcclxuICAgICAgICAgICAgICBjb250cm9sID0geDtcclxuICAgICAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ10gZm91bmQgd2hlbiB1cGdyYWRpbmcgRmxvd1xyXG5cclxuXHJcbiAgICAgICAgICAgIGZuLmNhbGwoRmFrZS5wcm90b3R5cGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcigpO1xyXG4gICAgICAgICAgfSBjYXRjaCAoeCkge1xyXG4gICAgICAgICAgICBjb250cm9sID0geDtcclxuICAgICAgICAgIH0gLy8gVE9ETyhsdW5hKTogVGhpcyB3aWxsIGN1cnJlbnRseSBvbmx5IHRocm93IGlmIHRoZSBmdW5jdGlvbiBjb21wb25lbnRcclxuICAgICAgICAgIC8vIHRyaWVzIHRvIGFjY2VzcyBSZWFjdC9SZWFjdERPTS9wcm9wcy4gV2Ugc2hvdWxkIHByb2JhYmx5IG1ha2UgdGhpcyB0aHJvd1xyXG4gICAgICAgICAgLy8gaW4gc2ltcGxlIGNvbXBvbmVudHMgdG9vXHJcblxyXG5cclxuICAgICAgICAgIHZhciBtYXliZVByb21pc2UgPSBmbigpOyAvLyBJZiB0aGUgZnVuY3Rpb24gY29tcG9uZW50IHJldHVybnMgYSBwcm9taXNlLCBpdCdzIGxpa2VseSBhbiBhc3luY1xyXG4gICAgICAgICAgLy8gY29tcG9uZW50LCB3aGljaCB3ZSBkb24ndCB5ZXQgc3VwcG9ydC4gQXR0YWNoIGEgbm9vcCBjYXRjaCBoYW5kbGVyIHRvXHJcbiAgICAgICAgICAvLyBzaWxlbmNlIHRoZSBlcnJvci5cclxuICAgICAgICAgIC8vIFRPRE86IEltcGxlbWVudCBjb21wb25lbnQgc3RhY2tzIGZvciBhc3luYyBjbGllbnQgY29tcG9uZW50cz9cclxuXHJcbiAgICAgICAgICBpZiAobWF5YmVQcm9taXNlICYmIHR5cGVvZiBtYXliZVByb21pc2UuY2F0Y2ggPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgbWF5YmVQcm9taXNlLmNhdGNoKGZ1bmN0aW9uICgpIHt9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gY2F0Y2ggKHNhbXBsZSkge1xyXG4gICAgICAgIC8vIFRoaXMgaXMgaW5saW5lZCBtYW51YWxseSBiZWNhdXNlIGNsb3N1cmUgZG9lc24ndCBkbyBpdCBmb3IgdXMuXHJcbiAgICAgICAgaWYgKHNhbXBsZSAmJiBjb250cm9sICYmIHR5cGVvZiBzYW1wbGUuc3RhY2sgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICByZXR1cm4gW3NhbXBsZS5zdGFjaywgY29udHJvbC5zdGFja107XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gW251bGwsIG51bGxdO1xyXG4gICAgfVxyXG4gIH07IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxyXG5cclxuICBSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QuZGlzcGxheU5hbWUgPSAnRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290JztcclxuICB2YXIgbmFtZVByb3BEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QsICduYW1lJyk7IC8vIEJlZm9yZSBFUzYsIHRoZSBgbmFtZWAgcHJvcGVydHkgd2FzIG5vdCBjb25maWd1cmFibGUuXHJcblxyXG4gIGlmIChuYW1lUHJvcERlc2NyaXB0b3IgJiYgbmFtZVByb3BEZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSkge1xyXG4gICAgLy8gVjggdXRpbGl6ZXMgYSBmdW5jdGlvbidzIGBuYW1lYCBwcm9wZXJ0eSB3aGVuIGdlbmVyYXRpbmcgYSBzdGFjayB0cmFjZS5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSdW5JblJvb3RGcmFtZS5EZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QsIC8vIENvbmZpZ3VyYWJsZSBwcm9wZXJ0aWVzIGNhbiBiZSB1cGRhdGVkIGV2ZW4gaWYgaXRzIHdyaXRhYmxlIGRlc2NyaXB0b3JcclxuICAgIC8vIGlzIHNldCB0byBgZmFsc2VgLlxyXG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXHJcbiAgICAnbmFtZScsIHtcclxuICAgICAgdmFsdWU6ICdEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QnXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHRyeSB7XHJcbiAgICB2YXIgX1J1bkluUm9vdEZyYW1lJERldGVyID0gUnVuSW5Sb290RnJhbWUuRGV0ZXJtaW5lQ29tcG9uZW50RnJhbWVSb290KCksXHJcbiAgICAgICAgc2FtcGxlU3RhY2sgPSBfUnVuSW5Sb290RnJhbWUkRGV0ZXJbMF0sXHJcbiAgICAgICAgY29udHJvbFN0YWNrID0gX1J1bkluUm9vdEZyYW1lJERldGVyWzFdO1xyXG5cclxuICAgIGlmIChzYW1wbGVTdGFjayAmJiBjb250cm9sU3RhY2spIHtcclxuICAgICAgLy8gVGhpcyBleHRyYWN0cyB0aGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgc2FtcGxlIHRoYXQgaXNuJ3QgYWxzbyBpbiB0aGUgY29udHJvbC5cclxuICAgICAgLy8gU2tpcHBpbmcgb25lIGZyYW1lIHRoYXQgd2UgYXNzdW1lIGlzIHRoZSBmcmFtZSB0aGF0IGNhbGxzIHRoZSB0d28uXHJcbiAgICAgIHZhciBzYW1wbGVMaW5lcyA9IHNhbXBsZVN0YWNrLnNwbGl0KCdcXG4nKTtcclxuICAgICAgdmFyIGNvbnRyb2xMaW5lcyA9IGNvbnRyb2xTdGFjay5zcGxpdCgnXFxuJyk7XHJcbiAgICAgIHZhciBzID0gMDtcclxuICAgICAgdmFyIGMgPSAwO1xyXG5cclxuICAgICAgd2hpbGUgKHMgPCBzYW1wbGVMaW5lcy5sZW5ndGggJiYgIXNhbXBsZUxpbmVzW3NdLmluY2x1ZGVzKCdEZXRlcm1pbmVDb21wb25lbnRGcmFtZVJvb3QnKSkge1xyXG4gICAgICAgIHMrKztcclxuICAgICAgfVxyXG5cclxuICAgICAgd2hpbGUgKGMgPCBjb250cm9sTGluZXMubGVuZ3RoICYmICFjb250cm9sTGluZXNbY10uaW5jbHVkZXMoJ0RldGVybWluZUNvbXBvbmVudEZyYW1lUm9vdCcpKSB7XHJcbiAgICAgICAgYysrO1xyXG4gICAgICB9IC8vIFdlIGNvdWxkbid0IGZpbmQgb3VyIGludGVudGlvbmFsbHkgaW5qZWN0ZWQgY29tbW9uIHJvb3QgZnJhbWUsIGF0dGVtcHRcclxuICAgICAgLy8gdG8gZmluZCBhbm90aGVyIGNvbW1vbiByb290IGZyYW1lIGJ5IHNlYXJjaCBmcm9tIHRoZSBib3R0b20gb2YgdGhlXHJcbiAgICAgIC8vIGNvbnRyb2wgc3RhY2suLi5cclxuXHJcblxyXG4gICAgICBpZiAocyA9PT0gc2FtcGxlTGluZXMubGVuZ3RoIHx8IGMgPT09IGNvbnRyb2xMaW5lcy5sZW5ndGgpIHtcclxuICAgICAgICBzID0gc2FtcGxlTGluZXMubGVuZ3RoIC0gMTtcclxuICAgICAgICBjID0gY29udHJvbExpbmVzLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgICAgIHdoaWxlIChzID49IDEgJiYgYyA+PSAwICYmIHNhbXBsZUxpbmVzW3NdICE9PSBjb250cm9sTGluZXNbY10pIHtcclxuICAgICAgICAgIC8vIFdlIGV4cGVjdCBhdCBsZWFzdCBvbmUgc3RhY2sgZnJhbWUgdG8gYmUgc2hhcmVkLlxyXG4gICAgICAgICAgLy8gVHlwaWNhbGx5IHRoaXMgd2lsbCBiZSB0aGUgcm9vdCBtb3N0IG9uZS4gSG93ZXZlciwgc3RhY2sgZnJhbWVzIG1heSBiZVxyXG4gICAgICAgICAgLy8gY3V0IG9mZiBkdWUgdG8gbWF4aW11bSBzdGFjayBsaW1pdHMuIEluIHRoaXMgY2FzZSwgb25lIG1heWJlIGN1dCBvZmZcclxuICAgICAgICAgIC8vIGVhcmxpZXIgdGhhbiB0aGUgb3RoZXIuIFdlIGFzc3VtZSB0aGF0IHRoZSBzYW1wbGUgaXMgbG9uZ2VyIG9yIHRoZSBzYW1lXHJcbiAgICAgICAgICAvLyBhbmQgdGhlcmUgZm9yIGN1dCBvZmYgZWFybGllci4gU28gd2Ugc2hvdWxkIGZpbmQgdGhlIHJvb3QgbW9zdCBmcmFtZSBpblxyXG4gICAgICAgICAgLy8gdGhlIHNhbXBsZSBzb21ld2hlcmUgaW4gdGhlIGNvbnRyb2wuXHJcbiAgICAgICAgICBjLS07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKDsgcyA+PSAxICYmIGMgPj0gMDsgcy0tLCBjLS0pIHtcclxuICAgICAgICAvLyBOZXh0IHdlIGZpbmQgdGhlIGZpcnN0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHdoaWNoIHNob3VsZCBiZSB0aGVcclxuICAgICAgICAvLyBmcmFtZSB0aGF0IGNhbGxlZCBvdXIgc2FtcGxlIGZ1bmN0aW9uIGFuZCB0aGUgY29udHJvbC5cclxuICAgICAgICBpZiAoc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xyXG4gICAgICAgICAgLy8gSW4gVjgsIHRoZSBmaXJzdCBsaW5lIGlzIGRlc2NyaWJpbmcgdGhlIG1lc3NhZ2UgYnV0IG90aGVyIFZNcyBkb24ndC5cclxuICAgICAgICAgIC8vIElmIHdlJ3JlIGFib3V0IHRvIHJldHVybiB0aGUgZmlyc3QgbGluZSwgYW5kIHRoZSBjb250cm9sIGlzIGFsc28gb24gdGhlIHNhbWVcclxuICAgICAgICAgIC8vIGxpbmUsIHRoYXQncyBhIHByZXR0eSBnb29kIGluZGljYXRvciB0aGF0IG91ciBzYW1wbGUgdGhyZXcgYXQgc2FtZSBsaW5lIGFzXHJcbiAgICAgICAgICAvLyB0aGUgY29udHJvbC4gSS5lLiBiZWZvcmUgd2UgZW50ZXJlZCB0aGUgc2FtcGxlIGZyYW1lLiBTbyB3ZSBpZ25vcmUgdGhpcyByZXN1bHQuXHJcbiAgICAgICAgICAvLyBUaGlzIGNhbiBoYXBwZW4gaWYgeW91IHBhc3NlZCBhIGNsYXNzIHRvIGZ1bmN0aW9uIGNvbXBvbmVudCwgb3Igbm9uLWZ1bmN0aW9uLlxyXG4gICAgICAgICAgaWYgKHMgIT09IDEgfHwgYyAhPT0gMSkge1xyXG4gICAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgICAgcy0tO1xyXG4gICAgICAgICAgICAgIGMtLTsgLy8gV2UgbWF5IHN0aWxsIGhhdmUgc2ltaWxhciBpbnRlcm1lZGlhdGUgZnJhbWVzIGZyb20gdGhlIGNvbnN0cnVjdCBjYWxsLlxyXG4gICAgICAgICAgICAgIC8vIFRoZSBuZXh0IG9uZSB0aGF0IGlzbid0IHRoZSBzYW1lIHNob3VsZCBiZSBvdXIgbWF0Y2ggdGhvdWdoLlxyXG5cclxuICAgICAgICAgICAgICBpZiAoYyA8IDAgfHwgc2FtcGxlTGluZXNbc10gIT09IGNvbnRyb2xMaW5lc1tjXSkge1xyXG4gICAgICAgICAgICAgICAgLy8gVjggYWRkcyBhIFwibmV3XCIgcHJlZml4IGZvciBuYXRpdmUgY2xhc3Nlcy4gTGV0J3MgcmVtb3ZlIGl0IHRvIG1ha2UgaXQgcHJldHRpZXIuXHJcbiAgICAgICAgICAgICAgICB2YXIgX2ZyYW1lID0gJ1xcbicgKyBzYW1wbGVMaW5lc1tzXS5yZXBsYWNlKCcgYXQgbmV3ICcsICcgYXQgJyk7IC8vIElmIG91ciBjb21wb25lbnQgZnJhbWUgaXMgbGFiZWxlZCBcIjxhbm9ueW1vdXM+XCJcclxuICAgICAgICAgICAgICAgIC8vIGJ1dCB3ZSBoYXZlIGEgdXNlci1wcm92aWRlZCBcImRpc3BsYXlOYW1lXCJcclxuICAgICAgICAgICAgICAgIC8vIHNwbGljZSBpdCBpbiB0byBtYWtlIHRoZSBzdGFjayBtb3JlIHJlYWRhYmxlLlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoZm4uZGlzcGxheU5hbWUgJiYgX2ZyYW1lLmluY2x1ZGVzKCc8YW5vbnltb3VzPicpKSB7XHJcbiAgICAgICAgICAgICAgICAgIF9mcmFtZSA9IF9mcmFtZS5yZXBsYWNlKCc8YW5vbnltb3VzPicsIGZuLmRpc3BsYXlOYW1lKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50RnJhbWVDYWNoZS5zZXQoZm4sIF9mcmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gLy8gUmV0dXJuIHRoZSBsaW5lIHdlIGZvdW5kLlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gX2ZyYW1lO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSB3aGlsZSAocyA+PSAxICYmIGMgPj0gMCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfSBmaW5hbGx5IHtcclxuICAgIHJlZW50cnkgPSBmYWxzZTtcclxuXHJcbiAgICB7XHJcbiAgICAgIFJlYWN0Q3VycmVudERpc3BhdGNoZXIuY3VycmVudCA9IHByZXZpb3VzRGlzcGF0Y2hlcjtcclxuICAgICAgcmVlbmFibGVMb2dzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBwcmV2aW91c1ByZXBhcmVTdGFja1RyYWNlO1xyXG4gIH0gLy8gRmFsbGJhY2sgdG8ganVzdCB1c2luZyB0aGUgbmFtZSBpZiB3ZSBjb3VsZG4ndCBtYWtlIGl0IHRocm93LlxyXG5cclxuXHJcbiAgdmFyIG5hbWUgPSBmbiA/IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWUgOiAnJztcclxuICB2YXIgc3ludGhldGljRnJhbWUgPSBuYW1lID8gZGVzY3JpYmVCdWlsdEluQ29tcG9uZW50RnJhbWUobmFtZSkgOiAnJztcclxuXHJcbiAge1xyXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb21wb25lbnRGcmFtZUNhY2hlLnNldChmbiwgc3ludGhldGljRnJhbWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIHN5bnRoZXRpY0ZyYW1lO1xyXG59XHJcbmZ1bmN0aW9uIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZShmbiwgb3duZXJGbikge1xyXG4gIHtcclxuICAgIHJldHVybiBkZXNjcmliZU5hdGl2ZUNvbXBvbmVudEZyYW1lKGZuLCBmYWxzZSk7XHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBzaG91bGRDb25zdHJ1Y3QoQ29tcG9uZW50KSB7XHJcbiAgdmFyIHByb3RvdHlwZSA9IENvbXBvbmVudC5wcm90b3R5cGU7XHJcbiAgcmV0dXJuICEhKHByb3RvdHlwZSAmJiBwcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlc2NyaWJlVW5rbm93bkVsZW1lbnRUeXBlRnJhbWVJbkRFVih0eXBlLCBvd25lckZuKSB7XHJcblxyXG4gIGlmICh0eXBlID09IG51bGwpIHtcclxuICAgIHJldHVybiAnJztcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAge1xyXG4gICAgICByZXR1cm4gZGVzY3JpYmVOYXRpdmVDb21wb25lbnRGcmFtZSh0eXBlLCBzaG91bGRDb25zdHJ1Y3QodHlwZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaWYgKHR5cGVvZiB0eXBlID09PSAnc3RyaW5nJykge1xyXG4gICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKHR5cGUpO1xyXG4gIH1cclxuXHJcbiAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XHJcbiAgICAgIHJldHVybiBkZXNjcmliZUJ1aWx0SW5Db21wb25lbnRGcmFtZSgnU3VzcGVuc2UnKTtcclxuXHJcbiAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX0xJU1RfVFlQRTpcclxuICAgICAgcmV0dXJuIGRlc2NyaWJlQnVpbHRJbkNvbXBvbmVudEZyYW1lKCdTdXNwZW5zZUxpc3QnKTtcclxuICB9XHJcblxyXG4gIGlmICh0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpIHtcclxuICAgIHN3aXRjaCAodHlwZS4kJHR5cGVvZikge1xyXG4gICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XHJcbiAgICAgICAgcmV0dXJuIGRlc2NyaWJlRnVuY3Rpb25Db21wb25lbnRGcmFtZSh0eXBlLnJlbmRlcik7XHJcblxyXG4gICAgICBjYXNlIFJFQUNUX01FTU9fVFlQRTpcclxuICAgICAgICAvLyBNZW1vIG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxyXG4gICAgICAgIHJldHVybiBkZXNjcmliZVVua25vd25FbGVtZW50VHlwZUZyYW1lSW5ERVYodHlwZS50eXBlLCBvd25lckZuKTtcclxuXHJcbiAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHZhciBsYXp5Q29tcG9uZW50ID0gdHlwZTtcclxuICAgICAgICAgIHZhciBwYXlsb2FkID0gbGF6eUNvbXBvbmVudC5fcGF5bG9hZDtcclxuICAgICAgICAgIHZhciBpbml0ID0gbGF6eUNvbXBvbmVudC5faW5pdDtcclxuXHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBMYXp5IG1heSBjb250YWluIGFueSBjb21wb25lbnQgdHlwZSBzbyB3ZSByZWN1cnNpdmVseSByZXNvbHZlIGl0LlxyXG4gICAgICAgICAgICByZXR1cm4gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGluaXQocGF5bG9hZCksIG93bmVyRm4pO1xyXG4gICAgICAgICAgfSBjYXRjaCAoeCkge31cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gJyc7XHJcbn1cclxuXHJcbnZhciBSZWFjdEN1cnJlbnRPd25lciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0Q3VycmVudE93bmVyO1xyXG52YXIgUmVhY3REZWJ1Z0N1cnJlbnRGcmFtZSA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLlJlYWN0RGVidWdDdXJyZW50RnJhbWU7XHJcbnZhciBSRUFDVF9DTElFTlRfUkVGRVJFTkNFID0gU3ltYm9sLmZvcigncmVhY3QuY2xpZW50LnJlZmVyZW5jZScpO1xyXG52YXIgc3BlY2lhbFByb3BLZXlXYXJuaW5nU2hvd247XHJcbnZhciBzcGVjaWFsUHJvcFJlZldhcm5pbmdTaG93bjtcclxudmFyIGRpZFdhcm5BYm91dFN0cmluZ1JlZnM7XHJcblxyXG57XHJcbiAgZGlkV2FybkFib3V0U3RyaW5nUmVmcyA9IHt9O1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYXNWYWxpZFJlZihjb25maWcpIHtcclxuICB7XHJcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsICdyZWYnKSkge1xyXG4gICAgICB2YXIgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihjb25maWcsICdyZWYnKS5nZXQ7XHJcblxyXG4gICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV0dXJuIGNvbmZpZy5yZWYgIT09IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XHJcbiAge1xyXG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcclxuICAgICAgdmFyIGdldHRlciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY29uZmlnLCAna2V5JykuZ2V0O1xyXG5cclxuICAgICAgaWYgKGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmcpIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJldHVybiBjb25maWcua2V5ICE9PSB1bmRlZmluZWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdhcm5JZlN0cmluZ1JlZkNhbm5vdEJlQXV0b0NvbnZlcnRlZChjb25maWcsIHNlbGYpIHtcclxuICB7XHJcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWYgPT09ICdzdHJpbmcnICYmIFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQgJiYgc2VsZiAmJiBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnN0YXRlTm9kZSAhPT0gc2VsZikge1xyXG4gICAgICB2YXIgY29tcG9uZW50TmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZShSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LnR5cGUpO1xyXG5cclxuICAgICAgaWYgKCFkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdKSB7XHJcbiAgICAgICAgZXJyb3IoJ0NvbXBvbmVudCBcIiVzXCIgY29udGFpbnMgdGhlIHN0cmluZyByZWYgXCIlc1wiLiAnICsgJ1N1cHBvcnQgZm9yIHN0cmluZyByZWZzIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSBtYWpvciByZWxlYXNlLiAnICsgJ1RoaXMgY2FzZSBjYW5ub3QgYmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gYW4gYXJyb3cgZnVuY3Rpb24uICcgKyAnV2UgYXNrIHlvdSB0byBtYW51YWxseSBmaXggdGhpcyBjYXNlIGJ5IHVzaW5nIHVzZVJlZigpIG9yIGNyZWF0ZVJlZigpIGluc3RlYWQuICcgKyAnTGVhcm4gbW9yZSBhYm91dCB1c2luZyByZWZzIHNhZmVseSBoZXJlOiAnICsgJ2h0dHBzOi8vcmVhY3Rqcy5vcmcvbGluay9zdHJpY3QtbW9kZS1zdHJpbmctcmVmJywgZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSksIGNvbmZpZy5yZWYpO1xyXG5cclxuICAgICAgICBkaWRXYXJuQWJvdXRTdHJpbmdSZWZzW2NvbXBvbmVudE5hbWVdID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XHJcbiAge1xyXG4gICAgdmFyIHdhcm5BYm91dEFjY2Vzc2luZ0tleSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgaWYgKCFzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93bikge1xyXG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgZXJyb3IoJyVzOiBga2V5YCBpcyBub3QgYSBwcm9wLiBUcnlpbmcgdG8gYWNjZXNzIGl0IHdpbGwgcmVzdWx0ICcgKyAnaW4gYHVuZGVmaW5lZGAgYmVpbmcgcmV0dXJuZWQuIElmIHlvdSBuZWVkIHRvIGFjY2VzcyB0aGUgc2FtZSAnICsgJ3ZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgJyArICdwcm9wLiAoaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3NwZWNpYWwtcHJvcHMpJywgZGlzcGxheU5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHdhcm5BYm91dEFjY2Vzc2luZ0tleS5pc1JlYWN0V2FybmluZyA9IHRydWU7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJvcHMsICdrZXknLCB7XHJcbiAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nS2V5LFxyXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZGVmaW5lUmVmUHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XHJcbiAge1xyXG4gICAge1xyXG4gICAgICB2YXIgd2FybkFib3V0QWNjZXNzaW5nUmVmID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGlmICghc3BlY2lhbFByb3BSZWZXYXJuaW5nU2hvd24pIHtcclxuICAgICAgICAgIHNwZWNpYWxQcm9wUmVmV2FybmluZ1Nob3duID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICBlcnJvcignJXM6IGByZWZgIGlzIG5vdCBhIHByb3AuIFRyeWluZyB0byBhY2Nlc3MgaXQgd2lsbCByZXN1bHQgJyArICdpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lICcgKyAndmFsdWUgd2l0aGluIHRoZSBjaGlsZCBjb21wb25lbnQsIHlvdSBzaG91bGQgcGFzcyBpdCBhcyBhIGRpZmZlcmVudCAnICsgJ3Byb3AuIChodHRwczovL3JlYWN0anMub3JnL2xpbmsvc3BlY2lhbC1wcm9wcyknLCBkaXNwbGF5TmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9O1xyXG5cclxuICAgICAgd2FybkFib3V0QWNjZXNzaW5nUmVmLmlzUmVhY3RXYXJuaW5nID0gdHJ1ZTtcclxuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3BzLCAncmVmJywge1xyXG4gICAgICAgIGdldDogd2FybkFib3V0QWNjZXNzaW5nUmVmLFxyXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIEZhY3RvcnkgbWV0aG9kIHRvIGNyZWF0ZSBhIG5ldyBSZWFjdCBlbGVtZW50LiBUaGlzIG5vIGxvbmdlciBhZGhlcmVzIHRvXHJcbiAqIHRoZSBjbGFzcyBwYXR0ZXJuLCBzbyBkbyBub3QgdXNlIG5ldyB0byBjYWxsIGl0LiBBbHNvLCBpbnN0YW5jZW9mIGNoZWNrXHJcbiAqIHdpbGwgbm90IHdvcmsuIEluc3RlYWQgdGVzdCAkJHR5cGVvZiBmaWVsZCBhZ2FpbnN0IFN5bWJvbC5mb3IoJ3JlYWN0LmVsZW1lbnQnKSB0byBjaGVja1xyXG4gKiBpZiBzb21ldGhpbmcgaXMgYSBSZWFjdCBFbGVtZW50LlxyXG4gKlxyXG4gKiBAcGFyYW0geyp9IHR5cGVcclxuICogQHBhcmFtIHsqfSBwcm9wc1xyXG4gKiBAcGFyYW0geyp9IGtleVxyXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHJlZlxyXG4gKiBAcGFyYW0geyp9IG93bmVyXHJcbiAqIEBwYXJhbSB7Kn0gc2VsZiBBICp0ZW1wb3JhcnkqIGhlbHBlciB0byBkZXRlY3QgcGxhY2VzIHdoZXJlIGB0aGlzYCBpc1xyXG4gKiBkaWZmZXJlbnQgZnJvbSB0aGUgYG93bmVyYCB3aGVuIFJlYWN0LmNyZWF0ZUVsZW1lbnQgaXMgY2FsbGVkLCBzbyB0aGF0IHdlXHJcbiAqIGNhbiB3YXJuLiBXZSB3YW50IHRvIGdldCByaWQgb2Ygb3duZXIgYW5kIHJlcGxhY2Ugc3RyaW5nIGByZWZgcyB3aXRoIGFycm93XHJcbiAqIGZ1bmN0aW9ucywgYW5kIGFzIGxvbmcgYXMgYHRoaXNgIGFuZCBvd25lciBhcmUgdGhlIHNhbWUsIHRoZXJlIHdpbGwgYmUgbm9cclxuICogY2hhbmdlIGluIGJlaGF2aW9yLlxyXG4gKiBAcGFyYW0geyp9IHNvdXJjZSBBbiBhbm5vdGF0aW9uIG9iamVjdCAoYWRkZWQgYnkgYSB0cmFuc3BpbGVyIG9yIG90aGVyd2lzZSlcclxuICogaW5kaWNhdGluZyBmaWxlbmFtZSwgbGluZSBudW1iZXIsIGFuZC9vciBvdGhlciBpbmZvcm1hdGlvbi5cclxuICogQGludGVybmFsXHJcbiAqL1xyXG5cclxuXHJcbmZ1bmN0aW9uIFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIF9yZWYsIHNlbGYsIHNvdXJjZSwgb3duZXIsIHByb3BzKSB7XHJcbiAgdmFyIHJlZjtcclxuXHJcbiAge1xyXG4gICAgcmVmID0gX3JlZjtcclxuICB9XHJcblxyXG4gIHZhciBlbGVtZW50O1xyXG5cclxuICB7XHJcbiAgICAvLyBJbiBwcm9kLCBgcmVmYCBpcyBhIHJlZ3VsYXIgcHJvcGVydHkuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiBhXHJcbiAgICAvLyBmdXR1cmUgcmVsZWFzZS5cclxuICAgIGVsZW1lbnQgPSB7XHJcbiAgICAgIC8vIFRoaXMgdGFnIGFsbG93cyB1cyB0byB1bmlxdWVseSBpZGVudGlmeSB0aGlzIGFzIGEgUmVhY3QgRWxlbWVudFxyXG4gICAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxyXG4gICAgICAvLyBCdWlsdC1pbiBwcm9wZXJ0aWVzIHRoYXQgYmVsb25nIG9uIHRoZSBlbGVtZW50XHJcbiAgICAgIHR5cGU6IHR5cGUsXHJcbiAgICAgIGtleToga2V5LFxyXG4gICAgICByZWY6IHJlZixcclxuICAgICAgcHJvcHM6IHByb3BzLFxyXG4gICAgICAvLyBSZWNvcmQgdGhlIGNvbXBvbmVudCByZXNwb25zaWJsZSBmb3IgY3JlYXRpbmcgdGhpcyBlbGVtZW50LlxyXG4gICAgICBfb3duZXI6IG93bmVyXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAge1xyXG4gICAgLy8gVGhlIHZhbGlkYXRpb24gZmxhZyBpcyBjdXJyZW50bHkgbXV0YXRpdmUuIFdlIHB1dCBpdCBvblxyXG4gICAgLy8gYW4gZXh0ZXJuYWwgYmFja2luZyBzdG9yZSBzbyB0aGF0IHdlIGNhbiBmcmVlemUgdGhlIHdob2xlIG9iamVjdC5cclxuICAgIC8vIFRoaXMgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBXZWFrTWFwIG9uY2UgdGhleSBhcmUgaW1wbGVtZW50ZWQgaW5cclxuICAgIC8vIGNvbW1vbmx5IHVzZWQgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnRzLlxyXG4gICAgZWxlbWVudC5fc3RvcmUgPSB7fTsgLy8gVG8gbWFrZSBjb21wYXJpbmcgUmVhY3RFbGVtZW50cyBlYXNpZXIgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHdlIG1ha2VcclxuICAgIC8vIHRoZSB2YWxpZGF0aW9uIGZsYWcgbm9uLWVudW1lcmFibGUgKHdoZXJlIHBvc3NpYmxlLCB3aGljaCBzaG91bGRcclxuICAgIC8vIGluY2x1ZGUgZXZlcnkgZW52aXJvbm1lbnQgd2UgcnVuIHRlc3RzIGluKSwgc28gdGhlIHRlc3QgZnJhbWV3b3JrXHJcbiAgICAvLyBpZ25vcmVzIGl0LlxyXG5cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlbGVtZW50Ll9zdG9yZSwgJ3ZhbGlkYXRlZCcsIHtcclxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcclxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXHJcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxyXG4gICAgICB2YWx1ZTogZmFsc2VcclxuICAgIH0pOyAvLyBkZWJ1Z0luZm8gY29udGFpbnMgU2VydmVyIENvbXBvbmVudCBkZWJ1ZyBpbmZvcm1hdGlvbi5cclxuXHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZWxlbWVudCwgJ19kZWJ1Z0luZm8nLCB7XHJcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXHJcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxyXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcclxuICAgICAgdmFsdWU6IG51bGxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChPYmplY3QuZnJlZXplKSB7XHJcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudC5wcm9wcyk7XHJcbiAgICAgIE9iamVjdC5mcmVlemUoZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZWxlbWVudDtcclxufVxyXG52YXIgZGlkV2FybkFib3V0S2V5U3ByZWFkID0ge307XHJcbi8qKlxyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZmNzL3B1bGwvMTA3XHJcbiAqIEBwYXJhbSB7Kn0gdHlwZVxyXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcclxuICogQHBhcmFtIHtzdHJpbmd9IGtleVxyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIGpzeERFViQxKHR5cGUsIGNvbmZpZywgbWF5YmVLZXksIGlzU3RhdGljQ2hpbGRyZW4sIHNvdXJjZSwgc2VsZikge1xyXG4gIHtcclxuICAgIGlmICghaXNWYWxpZEVsZW1lbnRUeXBlKHR5cGUpKSB7XHJcbiAgICAgIC8vIFRoaXMgaXMgYW4gaW52YWxpZCBlbGVtZW50IHR5cGUuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFdlIHdhcm4gaW4gdGhpcyBjYXNlIGJ1dCBkb24ndCB0aHJvdy4gV2UgZXhwZWN0IHRoZSBlbGVtZW50IGNyZWF0aW9uIHRvXHJcbiAgICAgIC8vIHN1Y2NlZWQgYW5kIHRoZXJlIHdpbGwgbGlrZWx5IGJlIGVycm9ycyBpbiByZW5kZXIuXHJcbiAgICAgIHZhciBpbmZvID0gJyc7XHJcblxyXG4gICAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsICYmIE9iamVjdC5rZXlzKHR5cGUpLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIGluZm8gKz0gJyBZb3UgbGlrZWx5IGZvcmdvdCB0byBleHBvcnQgeW91ciBjb21wb25lbnQgZnJvbSB0aGUgZmlsZSAnICsgXCJpdCdzIGRlZmluZWQgaW4sIG9yIHlvdSBtaWdodCBoYXZlIG1peGVkIHVwIGRlZmF1bHQgYW5kIG5hbWVkIGltcG9ydHMuXCI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHZhciB0eXBlU3RyaW5nO1xyXG5cclxuICAgICAgaWYgKHR5cGUgPT09IG51bGwpIHtcclxuICAgICAgICB0eXBlU3RyaW5nID0gJ251bGwnO1xyXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkodHlwZSkpIHtcclxuICAgICAgICB0eXBlU3RyaW5nID0gJ2FycmF5JztcclxuICAgICAgfSBlbHNlIGlmICh0eXBlICE9PSB1bmRlZmluZWQgJiYgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfRUxFTUVOVF9UWVBFKSB7XHJcbiAgICAgICAgdHlwZVN0cmluZyA9IFwiPFwiICsgKGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8ICdVbmtub3duJykgKyBcIiAvPlwiO1xyXG4gICAgICAgIGluZm8gPSAnIERpZCB5b3UgYWNjaWRlbnRhbGx5IGV4cG9ydCBhIEpTWCBsaXRlcmFsIGluc3RlYWQgb2YgYSBjb21wb25lbnQ/JztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0eXBlU3RyaW5nID0gdHlwZW9mIHR5cGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGVycm9yKCdSZWFjdC5qc3g6IHR5cGUgaXMgaW52YWxpZCAtLSBleHBlY3RlZCBhIHN0cmluZyAoZm9yICcgKyAnYnVpbHQtaW4gY29tcG9uZW50cykgb3IgYSBjbGFzcy9mdW5jdGlvbiAoZm9yIGNvbXBvc2l0ZSAnICsgJ2NvbXBvbmVudHMpIGJ1dCBnb3Q6ICVzLiVzJywgdHlwZVN0cmluZywgaW5mbyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBUaGlzIGlzIGEgdmFsaWQgZWxlbWVudCB0eXBlLlxyXG4gICAgICAvLyBTa2lwIGtleSB3YXJuaW5nIGlmIHRoZSB0eXBlIGlzbid0IHZhbGlkIHNpbmNlIG91ciBrZXkgdmFsaWRhdGlvbiBsb2dpY1xyXG4gICAgICAvLyBkb2Vzbid0IGV4cGVjdCBhIG5vbi1zdHJpbmcvZnVuY3Rpb24gdHlwZSBhbmQgY2FuIHRocm93IGNvbmZ1c2luZ1xyXG4gICAgICAvLyBlcnJvcnMuIFdlIGRvbid0IHdhbnQgZXhjZXB0aW9uIGJlaGF2aW9yIHRvIGRpZmZlciBiZXR3ZWVuIGRldiBhbmRcclxuICAgICAgLy8gcHJvZC4gKFJlbmRlcmluZyB3aWxsIHRocm93IHdpdGggYSBoZWxwZnVsIG1lc3NhZ2UgYW5kIGFzIHNvb24gYXMgdGhlXHJcbiAgICAgIC8vIHR5cGUgaXMgZml4ZWQsIHRoZSBrZXkgd2FybmluZ3Mgd2lsbCBhcHBlYXIuKVxyXG4gICAgICB2YXIgY2hpbGRyZW4gPSBjb25maWcuY2hpbGRyZW47XHJcblxyXG4gICAgICBpZiAoY2hpbGRyZW4gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGlmIChpc1N0YXRpY0NoaWxkcmVuKSB7XHJcbiAgICAgICAgICBpZiAoaXNBcnJheShjaGlsZHJlbikpIHtcclxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuW2ldLCB0eXBlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKE9iamVjdC5mcmVlemUpIHtcclxuICAgICAgICAgICAgICBPYmplY3QuZnJlZXplKGNoaWxkcmVuKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXJyb3IoJ1JlYWN0LmpzeDogU3RhdGljIGNoaWxkcmVuIHNob3VsZCBhbHdheXMgYmUgYW4gYXJyYXkuICcgKyAnWW91IGFyZSBsaWtlbHkgZXhwbGljaXRseSBjYWxsaW5nIFJlYWN0LmpzeHMgb3IgUmVhY3QuanN4REVWLiAnICsgJ1VzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhbGlkYXRlQ2hpbGRLZXlzKGNoaWxkcmVuLCB0eXBlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0gLy8gV2FybiBhYm91dCBrZXkgc3ByZWFkIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgdHlwZSBpcyB2YWxpZC5cclxuXHJcblxyXG4gICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCAna2V5JykpIHtcclxuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodHlwZSk7XHJcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMoY29uZmlnKS5maWx0ZXIoZnVuY3Rpb24gKGspIHtcclxuICAgICAgICByZXR1cm4gayAhPT0gJ2tleSc7XHJcbiAgICAgIH0pO1xyXG4gICAgICB2YXIgYmVmb3JlRXhhbXBsZSA9IGtleXMubGVuZ3RoID4gMCA/ICd7a2V5OiBzb21lS2V5LCAnICsga2V5cy5qb2luKCc6IC4uLiwgJykgKyAnOiAuLi59JyA6ICd7a2V5OiBzb21lS2V5fSc7XHJcblxyXG4gICAgICBpZiAoIWRpZFdhcm5BYm91dEtleVNwcmVhZFtjb21wb25lbnROYW1lICsgYmVmb3JlRXhhbXBsZV0pIHtcclxuICAgICAgICB2YXIgYWZ0ZXJFeGFtcGxlID0ga2V5cy5sZW5ndGggPiAwID8gJ3snICsga2V5cy5qb2luKCc6IC4uLiwgJykgKyAnOiAuLi59JyA6ICd7fSc7XHJcblxyXG4gICAgICAgIGVycm9yKCdBIHByb3BzIG9iamVjdCBjb250YWluaW5nIGEgXCJrZXlcIiBwcm9wIGlzIGJlaW5nIHNwcmVhZCBpbnRvIEpTWDpcXG4nICsgJyAgbGV0IHByb3BzID0gJXM7XFxuJyArICcgIDwlcyB7Li4ucHJvcHN9IC8+XFxuJyArICdSZWFjdCBrZXlzIG11c3QgYmUgcGFzc2VkIGRpcmVjdGx5IHRvIEpTWCB3aXRob3V0IHVzaW5nIHNwcmVhZDpcXG4nICsgJyAgbGV0IHByb3BzID0gJXM7XFxuJyArICcgIDwlcyBrZXk9e3NvbWVLZXl9IHsuLi5wcm9wc30gLz4nLCBiZWZvcmVFeGFtcGxlLCBjb21wb25lbnROYW1lLCBhZnRlckV4YW1wbGUsIGNvbXBvbmVudE5hbWUpO1xyXG5cclxuICAgICAgICBkaWRXYXJuQWJvdXRLZXlTcHJlYWRbY29tcG9uZW50TmFtZSArIGJlZm9yZUV4YW1wbGVdID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHZhciBwcm9wTmFtZTsgLy8gUmVzZXJ2ZWQgbmFtZXMgYXJlIGV4dHJhY3RlZFxyXG5cclxuICAgIHZhciBwcm9wcyA9IHt9O1xyXG4gICAgdmFyIGtleSA9IG51bGw7XHJcbiAgICB2YXIgcmVmID0gbnVsbDsgLy8gQ3VycmVudGx5LCBrZXkgY2FuIGJlIHNwcmVhZCBpbiBhcyBhIHByb3AuIFRoaXMgY2F1c2VzIGEgcG90ZW50aWFsXHJcbiAgICAvLyBpc3N1ZSBpZiBrZXkgaXMgYWxzbyBleHBsaWNpdGx5IGRlY2xhcmVkIChpZS4gPGRpdiB7Li4ucHJvcHN9IGtleT1cIkhpXCIgLz5cclxuICAgIC8vIG9yIDxkaXYga2V5PVwiSGlcIiB7Li4ucHJvcHN9IC8+ICkuIFdlIHdhbnQgdG8gZGVwcmVjYXRlIGtleSBzcHJlYWQsXHJcbiAgICAvLyBidXQgYXMgYW4gaW50ZXJtZWRpYXJ5IHN0ZXAsIHdlIHdpbGwgdXNlIGpzeERFViBmb3IgZXZlcnl0aGluZyBleGNlcHRcclxuICAgIC8vIDxkaXYgey4uLnByb3BzfSBrZXk9XCJIaVwiIC8+LCBiZWNhdXNlIHdlIGFyZW4ndCBjdXJyZW50bHkgYWJsZSB0byB0ZWxsIGlmXHJcbiAgICAvLyBrZXkgaXMgZXhwbGljaXRseSBkZWNsYXJlZCB0byBiZSB1bmRlZmluZWQgb3Igbm90LlxyXG5cclxuICAgIGlmIChtYXliZUtleSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHtcclxuICAgICAgICBjaGVja0tleVN0cmluZ0NvZXJjaW9uKG1heWJlS2V5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAga2V5ID0gJycgKyBtYXliZUtleTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaGFzVmFsaWRLZXkoY29uZmlnKSkge1xyXG4gICAgICB7XHJcbiAgICAgICAgY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAga2V5ID0gJycgKyBjb25maWcua2V5O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChoYXNWYWxpZFJlZihjb25maWcpKSB7XHJcbiAgICAgIHtcclxuICAgICAgICByZWYgPSBjb25maWcucmVmO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB3YXJuSWZTdHJpbmdSZWZDYW5ub3RCZUF1dG9Db252ZXJ0ZWQoY29uZmlnLCBzZWxmKTtcclxuICAgIH0gLy8gUmVtYWluaW5nIHByb3BlcnRpZXMgYXJlIGFkZGVkIHRvIGEgbmV3IHByb3BzIG9iamVjdFxyXG5cclxuXHJcbiAgICBmb3IgKHByb3BOYW1lIGluIGNvbmZpZykge1xyXG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIHByb3BOYW1lKSAmJiAvLyBTa2lwIG92ZXIgcmVzZXJ2ZWQgcHJvcCBuYW1lc1xyXG4gICAgICBwcm9wTmFtZSAhPT0gJ2tleScgJiYgKHByb3BOYW1lICE9PSAncmVmJykpIHtcclxuICAgICAgICBwcm9wc1twcm9wTmFtZV0gPSBjb25maWdbcHJvcE5hbWVdO1xyXG4gICAgICB9XHJcbiAgICB9IC8vIFJlc29sdmUgZGVmYXVsdCBwcm9wc1xyXG5cclxuXHJcbiAgICBpZiAodHlwZSAmJiB0eXBlLmRlZmF1bHRQcm9wcykge1xyXG4gICAgICB2YXIgZGVmYXVsdFByb3BzID0gdHlwZS5kZWZhdWx0UHJvcHM7XHJcblxyXG4gICAgICBmb3IgKHByb3BOYW1lIGluIGRlZmF1bHRQcm9wcykge1xyXG4gICAgICAgIGlmIChwcm9wc1twcm9wTmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgcHJvcHNbcHJvcE5hbWVdID0gZGVmYXVsdFByb3BzW3Byb3BOYW1lXTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoa2V5IHx8IHJlZikge1xyXG4gICAgICB2YXIgZGlzcGxheU5hbWUgPSB0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyA/IHR5cGUuZGlzcGxheU5hbWUgfHwgdHlwZS5uYW1lIHx8ICdVbmtub3duJyA6IHR5cGU7XHJcblxyXG4gICAgICBpZiAoa2V5KSB7XHJcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJlZikge1xyXG4gICAgICAgIGRlZmluZVJlZlByb3BXYXJuaW5nR2V0dGVyKHByb3BzLCBkaXNwbGF5TmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB2YXIgZWxlbWVudCA9IFJlYWN0RWxlbWVudCh0eXBlLCBrZXksIHJlZiwgc2VsZiwgc291cmNlLCBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50LCBwcm9wcyk7XHJcblxyXG4gICAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHtcclxuICAgICAgdmFsaWRhdGVGcmFnbWVudFByb3BzKGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBlbGVtZW50O1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0RGVjbGFyYXRpb25FcnJvckFkZGVuZHVtKCkge1xyXG4gIHtcclxuICAgIGlmIChSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XHJcbiAgICAgIHZhciBuYW1lID0gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKFJlYWN0Q3VycmVudE93bmVyLmN1cnJlbnQudHlwZSk7XHJcblxyXG4gICAgICBpZiAobmFtZSkge1xyXG4gICAgICAgIHJldHVybiAnXFxuXFxuQ2hlY2sgdGhlIHJlbmRlciBtZXRob2Qgb2YgYCcgKyBuYW1lICsgJ2AuJztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAnJztcclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIEVuc3VyZSB0aGF0IGV2ZXJ5IGVsZW1lbnQgZWl0aGVyIGlzIHBhc3NlZCBpbiBhIHN0YXRpYyBsb2NhdGlvbiwgaW4gYW5cclxuICogYXJyYXkgd2l0aCBhbiBleHBsaWNpdCBrZXlzIHByb3BlcnR5IGRlZmluZWQsIG9yIGluIGFuIG9iamVjdCBsaXRlcmFsXHJcbiAqIHdpdGggdmFsaWQga2V5IHByb3BlcnR5LlxyXG4gKlxyXG4gKiBAaW50ZXJuYWxcclxuICogQHBhcmFtIHtSZWFjdE5vZGV9IG5vZGUgU3RhdGljYWxseSBwYXNzZWQgY2hpbGQgb2YgYW55IHR5cGUuXHJcbiAqIEBwYXJhbSB7Kn0gcGFyZW50VHlwZSBub2RlJ3MgcGFyZW50J3MgdHlwZS5cclxuICovXHJcblxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSwgcGFyZW50VHlwZSkge1xyXG4gIHtcclxuICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcgfHwgIW5vZGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChub2RlLiQkdHlwZW9mID09PSBSRUFDVF9DTElFTlRfUkVGRVJFTkNFKSA7IGVsc2UgaWYgKGlzQXJyYXkobm9kZSkpIHtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFyIGNoaWxkID0gbm9kZVtpXTtcclxuXHJcbiAgICAgICAgaWYgKGlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xyXG4gICAgICAgICAgdmFsaWRhdGVFeHBsaWNpdEtleShjaGlsZCwgcGFyZW50VHlwZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGlzVmFsaWRFbGVtZW50KG5vZGUpKSB7XHJcbiAgICAgIC8vIFRoaXMgZWxlbWVudCB3YXMgcGFzc2VkIGluIGEgdmFsaWQgbG9jYXRpb24uXHJcbiAgICAgIGlmIChub2RlLl9zdG9yZSkge1xyXG4gICAgICAgIG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHZhciBpdGVyYXRvckZuID0gZ2V0SXRlcmF0b3JGbihub2RlKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3JGbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIC8vIEVudHJ5IGl0ZXJhdG9ycyB1c2VkIHRvIHByb3ZpZGUgaW1wbGljaXQga2V5cyxcclxuICAgICAgICAvLyBidXQgbm93IHdlIHByaW50IGEgc2VwYXJhdGUgd2FybmluZyBmb3IgdGhlbSBsYXRlci5cclxuICAgICAgICBpZiAoaXRlcmF0b3JGbiAhPT0gbm9kZS5lbnRyaWVzKSB7XHJcbiAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvckZuLmNhbGwobm9kZSk7XHJcbiAgICAgICAgICB2YXIgc3RlcDtcclxuXHJcbiAgICAgICAgICB3aGlsZSAoIShzdGVwID0gaXRlcmF0b3IubmV4dCgpKS5kb25lKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChzdGVwLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgIHZhbGlkYXRlRXhwbGljaXRLZXkoc3RlcC52YWx1ZSwgcGFyZW50VHlwZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuLyoqXHJcbiAqIFZlcmlmaWVzIHRoZSBvYmplY3QgaXMgYSBSZWFjdEVsZW1lbnQuXHJcbiAqIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjaXN2YWxpZGVsZW1lbnRcclxuICogQHBhcmFtIHs/b2JqZWN0fSBvYmplY3RcclxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiBgb2JqZWN0YCBpcyBhIFJlYWN0RWxlbWVudC5cclxuICogQGZpbmFsXHJcbiAqL1xyXG5cclxuXHJcbmZ1bmN0aW9uIGlzVmFsaWRFbGVtZW50KG9iamVjdCkge1xyXG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0LiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEU7XHJcbn1cclxudmFyIG93bmVySGFzS2V5VXNlV2FybmluZyA9IHt9O1xyXG4vKipcclxuICogV2FybiBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQga2V5IGFzc2lnbmVkIHRvIGl0LlxyXG4gKiBUaGlzIGVsZW1lbnQgaXMgaW4gYW4gYXJyYXkuIFRoZSBhcnJheSBjb3VsZCBncm93IGFuZCBzaHJpbmsgb3IgYmVcclxuICogcmVvcmRlcmVkLiBBbGwgY2hpbGRyZW4gdGhhdCBoYXZlbid0IGFscmVhZHkgYmVlbiB2YWxpZGF0ZWQgYXJlIHJlcXVpcmVkIHRvXHJcbiAqIGhhdmUgYSBcImtleVwiIHByb3BlcnR5IGFzc2lnbmVkIHRvIGl0LiBFcnJvciBzdGF0dXNlcyBhcmUgY2FjaGVkIHNvIGEgd2FybmluZ1xyXG4gKiB3aWxsIG9ubHkgYmUgc2hvd24gb25jZS5cclxuICpcclxuICogQGludGVybmFsXHJcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdGhhdCByZXF1aXJlcyBhIGtleS5cclxuICogQHBhcmFtIHsqfSBwYXJlbnRUeXBlIGVsZW1lbnQncyBwYXJlbnQncyB0eXBlLlxyXG4gKi9cclxuXHJcbmZ1bmN0aW9uIHZhbGlkYXRlRXhwbGljaXRLZXkoZWxlbWVudCwgcGFyZW50VHlwZSkge1xyXG4gIHtcclxuICAgIGlmICghZWxlbWVudC5fc3RvcmUgfHwgZWxlbWVudC5fc3RvcmUudmFsaWRhdGVkIHx8IGVsZW1lbnQua2V5ICE9IG51bGwpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGVsZW1lbnQuX3N0b3JlLnZhbGlkYXRlZCA9IHRydWU7XHJcbiAgICB2YXIgY3VycmVudENvbXBvbmVudEVycm9ySW5mbyA9IGdldEN1cnJlbnRDb21wb25lbnRFcnJvckluZm8ocGFyZW50VHlwZSk7XHJcblxyXG4gICAgaWYgKG93bmVySGFzS2V5VXNlV2FybmluZ1tjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvXSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgb3duZXJIYXNLZXlVc2VXYXJuaW5nW2N1cnJlbnRDb21wb25lbnRFcnJvckluZm9dID0gdHJ1ZTsgLy8gVXN1YWxseSB0aGUgY3VycmVudCBvd25lciBpcyB0aGUgb2ZmZW5kZXIsIGJ1dCBpZiBpdCBhY2NlcHRzIGNoaWxkcmVuIGFzIGFcclxuICAgIC8vIHByb3BlcnR5LCBpdCBtYXkgYmUgdGhlIGNyZWF0b3Igb2YgdGhlIGNoaWxkIHRoYXQncyByZXNwb25zaWJsZSBmb3JcclxuICAgIC8vIGFzc2lnbmluZyBpdCBhIGtleS5cclxuXHJcbiAgICB2YXIgY2hpbGRPd25lciA9ICcnO1xyXG5cclxuICAgIGlmIChlbGVtZW50ICYmIGVsZW1lbnQuX293bmVyICYmIGVsZW1lbnQuX293bmVyICE9PSBSZWFjdEN1cnJlbnRPd25lci5jdXJyZW50KSB7XHJcbiAgICAgIC8vIEdpdmUgdGhlIGNvbXBvbmVudCB0aGF0IG9yaWdpbmFsbHkgY3JlYXRlZCB0aGlzIGNoaWxkLlxyXG4gICAgICBjaGlsZE93bmVyID0gXCIgSXQgd2FzIHBhc3NlZCBhIGNoaWxkIGZyb20gXCIgKyBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUoZWxlbWVudC5fb3duZXIudHlwZSkgKyBcIi5cIjtcclxuICAgIH1cclxuXHJcbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChlbGVtZW50KTtcclxuXHJcbiAgICBlcnJvcignRWFjaCBjaGlsZCBpbiBhIGxpc3Qgc2hvdWxkIGhhdmUgYSB1bmlxdWUgXCJrZXlcIiBwcm9wLicgKyAnJXMlcyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9saW5rL3dhcm5pbmcta2V5cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4nLCBjdXJyZW50Q29tcG9uZW50RXJyb3JJbmZvLCBjaGlsZE93bmVyKTtcclxuXHJcbiAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChudWxsKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGVsZW1lbnQpIHtcclxuICB7XHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICB2YXIgb3duZXIgPSBlbGVtZW50Ll9vd25lcjtcclxuICAgICAgdmFyIHN0YWNrID0gZGVzY3JpYmVVbmtub3duRWxlbWVudFR5cGVGcmFtZUluREVWKGVsZW1lbnQudHlwZSwgb3duZXIgPyBvd25lci50eXBlIDogbnVsbCk7XHJcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKHN0YWNrKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIFJlYWN0RGVidWdDdXJyZW50RnJhbWUuc2V0RXh0cmFTdGFja0ZyYW1lKG51bGwpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Q3VycmVudENvbXBvbmVudEVycm9ySW5mbyhwYXJlbnRUeXBlKSB7XHJcbiAge1xyXG4gICAgdmFyIGluZm8gPSBnZXREZWNsYXJhdGlvbkVycm9yQWRkZW5kdW0oKTtcclxuXHJcbiAgICBpZiAoIWluZm8pIHtcclxuICAgICAgdmFyIHBhcmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUocGFyZW50VHlwZSk7XHJcblxyXG4gICAgICBpZiAocGFyZW50TmFtZSkge1xyXG4gICAgICAgIGluZm8gPSBcIlxcblxcbkNoZWNrIHRoZSB0b3AtbGV2ZWwgcmVuZGVyIGNhbGwgdXNpbmcgPFwiICsgcGFyZW50TmFtZSArIFwiPi5cIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpbmZvO1xyXG4gIH1cclxufVxyXG4vKipcclxuICogR2l2ZW4gYSBmcmFnbWVudCwgdmFsaWRhdGUgdGhhdCBpdCBjYW4gb25seSBiZSBwcm92aWRlZCB3aXRoIGZyYWdtZW50IHByb3BzXHJcbiAqIEBwYXJhbSB7UmVhY3RFbGVtZW50fSBmcmFnbWVudFxyXG4gKi9cclxuXHJcblxyXG5mdW5jdGlvbiB2YWxpZGF0ZUZyYWdtZW50UHJvcHMoZnJhZ21lbnQpIHtcclxuICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gcmVuZGVyIHBoYXNlIGluc3RlYWQgb2YgYXQgZWxlbWVudCBjcmVhdGlvbi5cclxuICB7XHJcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZyYWdtZW50LnByb3BzKTtcclxuXHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdmFyIGtleSA9IGtleXNbaV07XHJcblxyXG4gICAgICBpZiAoa2V5ICE9PSAnY2hpbGRyZW4nICYmIGtleSAhPT0gJ2tleScpIHtcclxuICAgICAgICBzZXRDdXJyZW50bHlWYWxpZGF0aW5nRWxlbWVudChmcmFnbWVudCk7XHJcblxyXG4gICAgICAgIGVycm9yKCdJbnZhbGlkIHByb3AgYCVzYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLiAnICsgJ1JlYWN0LkZyYWdtZW50IGNhbiBvbmx5IGhhdmUgYGtleWAgYW5kIGBjaGlsZHJlbmAgcHJvcHMuJywga2V5KTtcclxuXHJcbiAgICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZnJhZ21lbnQucmVmICE9PSBudWxsKSB7XHJcbiAgICAgIHNldEN1cnJlbnRseVZhbGlkYXRpbmdFbGVtZW50KGZyYWdtZW50KTtcclxuXHJcbiAgICAgIGVycm9yKCdJbnZhbGlkIGF0dHJpYnV0ZSBgcmVmYCBzdXBwbGllZCB0byBgUmVhY3QuRnJhZ21lbnRgLicpO1xyXG5cclxuICAgICAgc2V0Q3VycmVudGx5VmFsaWRhdGluZ0VsZW1lbnQobnVsbCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG52YXIganN4REVWID0ganN4REVWJDEgO1xyXG5cclxuZXhwb3J0cy5GcmFnbWVudCA9IFJFQUNUX0ZSQUdNRU5UX1RZUEU7XHJcbmV4cG9ydHMuanN4REVWID0ganN4REVWO1xyXG4gIH0pKCk7XHJcbn1cclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js": /*!******************************************************************!*\ !*** ./node_modules/next/dist/compiled/react/jsx-dev-runtime.js ***! \******************************************************************/ /***/ (function(module, __unused_webpack_exports, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("\r\n\r\nif (false) {} else {\r\n module.exports = __webpack_require__(/*! ./cjs/react-jsx-dev-runtime.development.js */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/cjs/react-jsx-dev-runtime.development.js\");\r\n}\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhO0FBQ2I7QUFDQSxJQUFJLEtBQXFDLEVBQUUsRUFFMUMsQ0FBQztBQUNGLEVBQUUsOExBQXNFO0FBQ3hFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzPzdjNmQiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xyXG5cclxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcclxuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5wcm9kdWN0aW9uLm1pbi5qcycpO1xyXG59IGVsc2Uge1xyXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LWRldi1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XHJcbn1cclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@radix-ui/react-compose-refs/dist/index.mjs": /*!******************************************************************!*\ !*** ./node_modules/@radix-ui/react-compose-refs/dist/index.mjs ***! \******************************************************************/ /***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ composeRefs: function() { return /* binding */ composeRefs; },\n/* harmony export */ useComposedRefs: function() { return /* binding */ useComposedRefs; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n// packages/react/compose-refs/src/composeRefs.tsx\r\n\r\nfunction setRef(ref, value) {\r\n if (typeof ref === \"function\") {\r\n return ref(value);\r\n } else if (ref !== null && ref !== void 0) {\r\n ref.current = value;\r\n }\r\n}\r\nfunction composeRefs(...refs) {\r\n return (node) => {\r\n let hasCleanup = false;\r\n const cleanups = refs.map((ref) => {\r\n const cleanup = setRef(ref, node);\r\n if (!hasCleanup && typeof cleanup == \"function\") {\r\n hasCleanup = true;\r\n }\r\n return cleanup;\r\n });\r\n if (hasCleanup) {\r\n return () => {\r\n for (let i = 0; i < cleanups.length; i++) {\r\n const cleanup = cleanups[i];\r\n if (typeof cleanup == \"function\") {\r\n cleanup();\r\n } else {\r\n setRef(refs[i], null);\r\n }\r\n }\r\n };\r\n }\r\n };\r\n}\r\nfunction useComposedRefs(...refs) {\r\n return react__WEBPACK_IMPORTED_MODULE_0__.useCallback(composeRefs(...refs), refs);\r\n}\r\n\r\n//# sourceMappingURL=index.mjs.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtY29tcG9zZS1yZWZzL2Rpc3QvaW5kZXgubWpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQytCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLHdCQUF3QixxQkFBcUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLDhDQUFpQjtBQUMxQjtBQUlFO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL0ByYWRpeC11aS9yZWFjdC1jb21wb3NlLXJlZnMvZGlzdC9pbmRleC5tanM/MjY3YiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBwYWNrYWdlcy9yZWFjdC9jb21wb3NlLXJlZnMvc3JjL2NvbXBvc2VSZWZzLnRzeFxyXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuZnVuY3Rpb24gc2V0UmVmKHJlZiwgdmFsdWUpIHtcclxuICBpZiAodHlwZW9mIHJlZiA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICByZXR1cm4gcmVmKHZhbHVlKTtcclxuICB9IGVsc2UgaWYgKHJlZiAhPT0gbnVsbCAmJiByZWYgIT09IHZvaWQgMCkge1xyXG4gICAgcmVmLmN1cnJlbnQgPSB2YWx1ZTtcclxuICB9XHJcbn1cclxuZnVuY3Rpb24gY29tcG9zZVJlZnMoLi4ucmVmcykge1xyXG4gIHJldHVybiAobm9kZSkgPT4ge1xyXG4gICAgbGV0IGhhc0NsZWFudXAgPSBmYWxzZTtcclxuICAgIGNvbnN0IGNsZWFudXBzID0gcmVmcy5tYXAoKHJlZikgPT4ge1xyXG4gICAgICBjb25zdCBjbGVhbnVwID0gc2V0UmVmKHJlZiwgbm9kZSk7XHJcbiAgICAgIGlmICghaGFzQ2xlYW51cCAmJiB0eXBlb2YgY2xlYW51cCA9PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBoYXNDbGVhbnVwID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY2xlYW51cDtcclxuICAgIH0pO1xyXG4gICAgaWYgKGhhc0NsZWFudXApIHtcclxuICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsZWFudXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBjbGVhbnVwID0gY2xlYW51cHNbaV07XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgIGNsZWFudXAoKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHNldFJlZihyZWZzW2ldLCBudWxsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgfTtcclxufVxyXG5mdW5jdGlvbiB1c2VDb21wb3NlZFJlZnMoLi4ucmVmcykge1xyXG4gIHJldHVybiBSZWFjdC51c2VDYWxsYmFjayhjb21wb3NlUmVmcyguLi5yZWZzKSwgcmVmcyk7XHJcbn1cclxuZXhwb3J0IHtcclxuICBjb21wb3NlUmVmcyxcclxuICB1c2VDb21wb3NlZFJlZnNcclxufTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcFxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@radix-ui/react-compose-refs/dist/index.mjs\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@radix-ui/react-label/dist/index.mjs": /*!***********************************************************!*\ !*** ./node_modules/@radix-ui/react-label/dist/index.mjs ***! \***********************************************************/ /***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Label: function() { return /* binding */ Label; },\n/* harmony export */ Root: function() { return /* binding */ Root; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var _radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @radix-ui/react-primitive */ \"(app-pages-browser)/./node_modules/@radix-ui/react-primitive/dist/index.mjs\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\n/* __next_internal_client_entry_do_not_use__ Label,Root auto */ // packages/react/label/src/Label.tsx\n\n\n\nvar NAME = \"Label\";\nvar Label = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c = (props, forwardedRef)=>{\n return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_radix_ui_react_primitive__WEBPACK_IMPORTED_MODULE_2__.Primitive.label, {\n ...props,\n ref: forwardedRef,\n onMouseDown: (event)=>{\n var _props_onMouseDown;\n const target = event.target;\n if (target.closest(\"button, input, select, textarea\")) return;\n (_props_onMouseDown = props.onMouseDown) === null || _props_onMouseDown === void 0 ? void 0 : _props_onMouseDown.call(props, event);\n if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n }\n });\n});\n_c1 = Label;\nLabel.displayName = NAME;\nvar Root = Label;\n //# sourceMappingURL=index.mjs.map\nvar _c, _c1;\n$RefreshReg$(_c, \"Label$React.forwardRef\");\n$RefreshReg$(_c1, \"Label\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtbGFiZWwvZGlzdC9pbmRleC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXVCO0FBQ0c7QUFjdEI7QUFSSixJQUFNRyxPQUFPO0FBTWIsSUFBTUMsc0JBQWNKLDZDQUFBLE1BQXFDLENBQUNNLE9BQU9DO0lBQy9ELE9BQ0UsZ0JBQUFMLHNEQUFBQSxDQUFDRCxnRUFBU0EsQ0FBQ08sS0FBQSxFQUFWO1FBQ0UsR0FBR0YsS0FBQTtRQUNKRyxLQUFLRjtRQUNMRyxhQUFhLENBQUNDO2dCQUtaTDtZQUhBLE1BQU1NLFNBQVNELE1BQU1DLE1BQUE7WUFDckIsSUFBSUEsT0FBT0MsT0FBQSxDQUFRLG9DQUFvQzthQUV2RFAscUJBQUFBLE1BQU1JLFdBQUEsY0FBTkoseUNBQUFBLHdCQUFBQSxPQUFvQks7WUFFcEIsSUFBSSxDQUFDQSxNQUFNRyxnQkFBQSxJQUFvQkgsTUFBTUksTUFBQSxHQUFTLEdBQUdKLE1BQU1LLGNBQUE7UUFDekQ7SUFBQTtBQUdOOztBQUVBWixNQUFNYSxXQUFBLEdBQWNkO0FBSXBCLElBQU1lLE9BQU9kIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uLi9zcmMvTGFiZWwudHN4PzhiYWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUHJpbWl0aXZlIH0gZnJvbSAnQHJhZGl4LXVpL3JlYWN0LXByaW1pdGl2ZSc7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIExhYmVsXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbmNvbnN0IE5BTUUgPSAnTGFiZWwnO1xuXG50eXBlIExhYmVsRWxlbWVudCA9IFJlYWN0LkVsZW1lbnRSZWY8dHlwZW9mIFByaW1pdGl2ZS5sYWJlbD47XG50eXBlIFByaW1pdGl2ZUxhYmVsUHJvcHMgPSBSZWFjdC5Db21wb25lbnRQcm9wc1dpdGhvdXRSZWY8dHlwZW9mIFByaW1pdGl2ZS5sYWJlbD47XG5pbnRlcmZhY2UgTGFiZWxQcm9wcyBleHRlbmRzIFByaW1pdGl2ZUxhYmVsUHJvcHMge31cblxuY29uc3QgTGFiZWwgPSBSZWFjdC5mb3J3YXJkUmVmPExhYmVsRWxlbWVudCwgTGFiZWxQcm9wcz4oKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8UHJpbWl0aXZlLmxhYmVsXG4gICAgICB7Li4ucHJvcHN9XG4gICAgICByZWY9e2ZvcndhcmRlZFJlZn1cbiAgICAgIG9uTW91c2VEb3duPXsoZXZlbnQpID0+IHtcbiAgICAgICAgLy8gb25seSBwcmV2ZW50IHRleHQgc2VsZWN0aW9uIGlmIGNsaWNraW5nIGluc2lkZSB0aGUgbGFiZWwgaXRzZWxmXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KCdidXR0b24sIGlucHV0LCBzZWxlY3QsIHRleHRhcmVhJykpIHJldHVybjtcblxuICAgICAgICBwcm9wcy5vbk1vdXNlRG93bj8uKGV2ZW50KTtcbiAgICAgICAgLy8gcHJldmVudCB0ZXh0IHNlbGVjdGlvbiB3aGVuIGRvdWJsZSBjbGlja2luZyBsYWJlbFxuICAgICAgICBpZiAoIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgZXZlbnQuZGV0YWlsID4gMSkgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH19XG4gICAgLz5cbiAgKTtcbn0pO1xuXG5MYWJlbC5kaXNwbGF5TmFtZSA9IE5BTUU7XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuY29uc3QgUm9vdCA9IExhYmVsO1xuXG5leHBvcnQge1xuICBMYWJlbCxcbiAgLy9cbiAgUm9vdCxcbn07XG5leHBvcnQgdHlwZSB7IExhYmVsUHJvcHMgfTtcbiJdLCJuYW1lcyI6WyJSZWFjdCIsIlByaW1pdGl2ZSIsImpzeCIsIk5BTUUiLCJMYWJlbCIsImZvcndhcmRSZWYiLCJwcm9wcyIsImZvcndhcmRlZFJlZiIsImxhYmVsIiwicmVmIiwib25Nb3VzZURvd24iLCJldmVudCIsInRhcmdldCIsImNsb3Nlc3QiLCJkZWZhdWx0UHJldmVudGVkIiwiZGV0YWlsIiwicHJldmVudERlZmF1bHQiLCJkaXNwbGF5TmFtZSIsIlJvb3QiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@radix-ui/react-label/dist/index.mjs\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@radix-ui/react-primitive/dist/index.mjs": /*!***************************************************************!*\ !*** ./node_modules/@radix-ui/react-primitive/dist/index.mjs ***! \***************************************************************/ /***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Primitive: function() { return /* binding */ Primitive; },\n/* harmony export */ Root: function() { return /* binding */ Root; },\n/* harmony export */ dispatchDiscreteCustomEvent: function() { return /* binding */ dispatchDiscreteCustomEvent; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/index.js\");\n/* harmony import */ var _radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @radix-ui/react-slot */ \"(app-pages-browser)/./node_modules/@radix-ui/react-slot/dist/index.mjs\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\n// packages/react/primitive/src/Primitive.tsx\r\n\r\n\r\n\r\n\r\nvar NODES = [\r\n \"a\",\r\n \"button\",\r\n \"div\",\r\n \"form\",\r\n \"h2\",\r\n \"h3\",\r\n \"img\",\r\n \"input\",\r\n \"label\",\r\n \"li\",\r\n \"nav\",\r\n \"ol\",\r\n \"p\",\r\n \"span\",\r\n \"svg\",\r\n \"ul\"\r\n];\r\nvar Primitive = NODES.reduce((primitive, node) => {\r\n const Node = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => {\r\n const { asChild, ...primitiveProps } = props;\r\n const Comp = asChild ? _radix_ui_react_slot__WEBPACK_IMPORTED_MODULE_3__.Slot : node;\r\n if (typeof window !== \"undefined\") {\r\n window[Symbol.for(\"radix-ui\")] = true;\r\n }\r\n return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Comp, { ...primitiveProps, ref: forwardedRef });\r\n });\r\n Node.displayName = `Primitive.${node}`;\r\n return { ...primitive, [node]: Node };\r\n}, {});\r\nfunction dispatchDiscreteCustomEvent(target, event) {\r\n if (target) react_dom__WEBPACK_IMPORTED_MODULE_1__.flushSync(() => target.dispatchEvent(event));\r\n}\r\nvar Root = Primitive;\r\n\r\n//# sourceMappingURL=index.mjs.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtcHJpbWl0aXZlL2Rpc3QvaW5kZXgubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUMrQjtBQUNPO0FBQ007QUFDSjtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsNkNBQWdCO0FBQy9CLFlBQVksNkJBQTZCO0FBQ3pDLDJCQUEyQixzREFBSTtBQUMvQjtBQUNBO0FBQ0E7QUFDQSwyQkFBMkIsc0RBQUcsU0FBUyxzQ0FBc0M7QUFDN0UsR0FBRztBQUNILGtDQUFrQyxLQUFLO0FBQ3ZDLFdBQVc7QUFDWCxDQUFDLElBQUk7QUFDTDtBQUNBLGNBQWMsZ0RBQWtCO0FBQ2hDO0FBQ0E7QUFLRTtBQUNGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3QtcHJpbWl0aXZlL2Rpc3QvaW5kZXgubWpzPzlkYWIiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gcGFja2FnZXMvcmVhY3QvcHJpbWl0aXZlL3NyYy9QcmltaXRpdmUudHN4XHJcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XHJcbmltcG9ydCB7IFNsb3QgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LXNsb3RcIjtcclxuaW1wb3J0IHsganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XHJcbnZhciBOT0RFUyA9IFtcclxuICBcImFcIixcclxuICBcImJ1dHRvblwiLFxyXG4gIFwiZGl2XCIsXHJcbiAgXCJmb3JtXCIsXHJcbiAgXCJoMlwiLFxyXG4gIFwiaDNcIixcclxuICBcImltZ1wiLFxyXG4gIFwiaW5wdXRcIixcclxuICBcImxhYmVsXCIsXHJcbiAgXCJsaVwiLFxyXG4gIFwibmF2XCIsXHJcbiAgXCJvbFwiLFxyXG4gIFwicFwiLFxyXG4gIFwic3BhblwiLFxyXG4gIFwic3ZnXCIsXHJcbiAgXCJ1bFwiXHJcbl07XHJcbnZhciBQcmltaXRpdmUgPSBOT0RFUy5yZWR1Y2UoKHByaW1pdGl2ZSwgbm9kZSkgPT4ge1xyXG4gIGNvbnN0IE5vZGUgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgICBjb25zdCB7IGFzQ2hpbGQsIC4uLnByaW1pdGl2ZVByb3BzIH0gPSBwcm9wcztcclxuICAgIGNvbnN0IENvbXAgPSBhc0NoaWxkID8gU2xvdCA6IG5vZGU7XHJcbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICB3aW5kb3dbU3ltYm9sLmZvcihcInJhZGl4LXVpXCIpXSA9IHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChDb21wLCB7IC4uLnByaW1pdGl2ZVByb3BzLCByZWY6IGZvcndhcmRlZFJlZiB9KTtcclxuICB9KTtcclxuICBOb2RlLmRpc3BsYXlOYW1lID0gYFByaW1pdGl2ZS4ke25vZGV9YDtcclxuICByZXR1cm4geyAuLi5wcmltaXRpdmUsIFtub2RlXTogTm9kZSB9O1xyXG59LCB7fSk7XHJcbmZ1bmN0aW9uIGRpc3BhdGNoRGlzY3JldGVDdXN0b21FdmVudCh0YXJnZXQsIGV2ZW50KSB7XHJcbiAgaWYgKHRhcmdldCkgUmVhY3RET00uZmx1c2hTeW5jKCgpID0+IHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KSk7XHJcbn1cclxudmFyIFJvb3QgPSBQcmltaXRpdmU7XHJcbmV4cG9ydCB7XHJcbiAgUHJpbWl0aXZlLFxyXG4gIFJvb3QsXHJcbiAgZGlzcGF0Y2hEaXNjcmV0ZUN1c3RvbUV2ZW50XHJcbn07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@radix-ui/react-primitive/dist/index.mjs\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/@radix-ui/react-slot/dist/index.mjs": /*!**********************************************************!*\ !*** ./node_modules/@radix-ui/react-slot/dist/index.mjs ***! \**********************************************************/ /***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ Root: function() { return /* binding */ Root; },\n/* harmony export */ Slot: function() { return /* binding */ Slot; },\n/* harmony export */ Slottable: function() { return /* binding */ Slottable; }\n/* harmony export */ });\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var _radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @radix-ui/react-compose-refs */ \"(app-pages-browser)/./node_modules/@radix-ui/react-compose-refs/dist/index.mjs\");\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\n// packages/react/slot/src/Slot.tsx\r\n\r\n\r\n\r\nvar Slot = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => {\r\n const { children, ...slotProps } = props;\r\n const childrenArray = react__WEBPACK_IMPORTED_MODULE_0__.Children.toArray(children);\r\n const slottable = childrenArray.find(isSlottable);\r\n if (slottable) {\r\n const newElement = slottable.props.children;\r\n const newChildren = childrenArray.map((child) => {\r\n if (child === slottable) {\r\n if (react__WEBPACK_IMPORTED_MODULE_0__.Children.count(newElement) > 1) return react__WEBPACK_IMPORTED_MODULE_0__.Children.only(null);\r\n return react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(newElement) ? newElement.props.children : null;\r\n } else {\r\n return child;\r\n }\r\n });\r\n return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children: react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(newElement) ? react__WEBPACK_IMPORTED_MODULE_0__.cloneElement(newElement, void 0, newChildren) : null });\r\n }\r\n return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children });\r\n});\r\nSlot.displayName = \"Slot\";\r\nvar SlotClone = react__WEBPACK_IMPORTED_MODULE_0__.forwardRef((props, forwardedRef) => {\r\n const { children, ...slotProps } = props;\r\n if (react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(children)) {\r\n const childrenRef = getElementRef(children);\r\n return react__WEBPACK_IMPORTED_MODULE_0__.cloneElement(children, {\r\n ...mergeProps(slotProps, children.props),\r\n // @ts-ignore\r\n ref: forwardedRef ? (0,_radix_ui_react_compose_refs__WEBPACK_IMPORTED_MODULE_2__.composeRefs)(forwardedRef, childrenRef) : childrenRef\r\n });\r\n }\r\n return react__WEBPACK_IMPORTED_MODULE_0__.Children.count(children) > 1 ? react__WEBPACK_IMPORTED_MODULE_0__.Children.only(null) : null;\r\n});\r\nSlotClone.displayName = \"SlotClone\";\r\nvar Slottable = ({ children }) => {\r\n return /* @__PURE__ */ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment, { children });\r\n};\r\nfunction isSlottable(child) {\r\n return react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(child) && child.type === Slottable;\r\n}\r\nfunction mergeProps(slotProps, childProps) {\r\n const overrideProps = { ...childProps };\r\n for (const propName in childProps) {\r\n const slotPropValue = slotProps[propName];\r\n const childPropValue = childProps[propName];\r\n const isHandler = /^on[A-Z]/.test(propName);\r\n if (isHandler) {\r\n if (slotPropValue && childPropValue) {\r\n overrideProps[propName] = (...args) => {\r\n childPropValue(...args);\r\n slotPropValue(...args);\r\n };\r\n } else if (slotPropValue) {\r\n overrideProps[propName] = slotPropValue;\r\n }\r\n } else if (propName === \"style\") {\r\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\r\n } else if (propName === \"className\") {\r\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\r\n }\r\n }\r\n return { ...slotProps, ...overrideProps };\r\n}\r\nfunction getElementRef(element) {\r\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\r\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\r\n if (mayWarn) {\r\n return element.ref;\r\n }\r\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\r\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\r\n if (mayWarn) {\r\n return element.props.ref;\r\n }\r\n return element.props.ref || element.ref;\r\n}\r\nvar Root = Slot;\r\n\r\n//# sourceMappingURL=index.mjs.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AcmFkaXgtdWkvcmVhY3Qtc2xvdC9kaXN0L2luZGV4Lm1qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUMrQjtBQUM0QjtBQUNUO0FBQ2xELFdBQVcsNkNBQWdCO0FBQzNCLFVBQVUseUJBQXlCO0FBQ25DLHdCQUF3QiwyQ0FBYztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSwyQ0FBYywrQkFBK0IsMkNBQWM7QUFDdkUsZUFBZSxpREFBb0I7QUFDbkMsUUFBUTtBQUNSO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsMkJBQTJCLHNEQUFHLGNBQWMsMkNBQTJDLGlEQUFvQixlQUFlLCtDQUFrQiwwQ0FBMEM7QUFDdEw7QUFDQSx5QkFBeUIsc0RBQUcsY0FBYywyQ0FBMkM7QUFDckYsQ0FBQztBQUNEO0FBQ0EsZ0JBQWdCLDZDQUFnQjtBQUNoQyxVQUFVLHlCQUF5QjtBQUNuQyxNQUFNLGlEQUFvQjtBQUMxQjtBQUNBLFdBQVcsK0NBQWtCO0FBQzdCO0FBQ0E7QUFDQSwwQkFBMEIseUVBQVc7QUFDckMsS0FBSztBQUNMO0FBQ0EsU0FBUywyQ0FBYyx1QkFBdUIsMkNBQWM7QUFDNUQsQ0FBQztBQUNEO0FBQ0EsbUJBQW1CLFVBQVU7QUFDN0IseUJBQXlCLHNEQUFHLENBQUMsdURBQVEsSUFBSSxVQUFVO0FBQ25EO0FBQ0E7QUFDQSxTQUFTLGlEQUFvQjtBQUM3QjtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSxNQUFNO0FBQ04sa0NBQWtDO0FBQ2xDLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0U7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovL19OX0UvLi9ub2RlX21vZHVsZXMvQHJhZGl4LXVpL3JlYWN0LXNsb3QvZGlzdC9pbmRleC5tanM/MTUyOCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBwYWNrYWdlcy9yZWFjdC9zbG90L3NyYy9TbG90LnRzeFxyXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgY29tcG9zZVJlZnMgfSBmcm9tIFwiQHJhZGl4LXVpL3JlYWN0LWNvbXBvc2UtcmVmc1wiO1xyXG5pbXBvcnQgeyBGcmFnbWVudCwganN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XHJcbnZhciBTbG90ID0gUmVhY3QuZm9yd2FyZFJlZigocHJvcHMsIGZvcndhcmRlZFJlZikgPT4ge1xyXG4gIGNvbnN0IHsgY2hpbGRyZW4sIC4uLnNsb3RQcm9wcyB9ID0gcHJvcHM7XHJcbiAgY29uc3QgY2hpbGRyZW5BcnJheSA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pO1xyXG4gIGNvbnN0IHNsb3R0YWJsZSA9IGNoaWxkcmVuQXJyYXkuZmluZChpc1Nsb3R0YWJsZSk7XHJcbiAgaWYgKHNsb3R0YWJsZSkge1xyXG4gICAgY29uc3QgbmV3RWxlbWVudCA9IHNsb3R0YWJsZS5wcm9wcy5jaGlsZHJlbjtcclxuICAgIGNvbnN0IG5ld0NoaWxkcmVuID0gY2hpbGRyZW5BcnJheS5tYXAoKGNoaWxkKSA9PiB7XHJcbiAgICAgIGlmIChjaGlsZCA9PT0gc2xvdHRhYmxlKSB7XHJcbiAgICAgICAgaWYgKFJlYWN0LkNoaWxkcmVuLmNvdW50KG5ld0VsZW1lbnQpID4gMSkgcmV0dXJuIFJlYWN0LkNoaWxkcmVuLm9ubHkobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmlzVmFsaWRFbGVtZW50KG5ld0VsZW1lbnQpID8gbmV3RWxlbWVudC5wcm9wcy5jaGlsZHJlbiA6IG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFNsb3RDbG9uZSwgeyAuLi5zbG90UHJvcHMsIHJlZjogZm9yd2FyZGVkUmVmLCBjaGlsZHJlbjogUmVhY3QuaXNWYWxpZEVsZW1lbnQobmV3RWxlbWVudCkgPyBSZWFjdC5jbG9uZUVsZW1lbnQobmV3RWxlbWVudCwgdm9pZCAwLCBuZXdDaGlsZHJlbikgOiBudWxsIH0pO1xyXG4gIH1cclxuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChTbG90Q2xvbmUsIHsgLi4uc2xvdFByb3BzLCByZWY6IGZvcndhcmRlZFJlZiwgY2hpbGRyZW4gfSk7XHJcbn0pO1xyXG5TbG90LmRpc3BsYXlOYW1lID0gXCJTbG90XCI7XHJcbnZhciBTbG90Q2xvbmUgPSBSZWFjdC5mb3J3YXJkUmVmKChwcm9wcywgZm9yd2FyZGVkUmVmKSA9PiB7XHJcbiAgY29uc3QgeyBjaGlsZHJlbiwgLi4uc2xvdFByb3BzIH0gPSBwcm9wcztcclxuICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XHJcbiAgICBjb25zdCBjaGlsZHJlblJlZiA9IGdldEVsZW1lbnRSZWYoY2hpbGRyZW4pO1xyXG4gICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xyXG4gICAgICAuLi5tZXJnZVByb3BzKHNsb3RQcm9wcywgY2hpbGRyZW4ucHJvcHMpLFxyXG4gICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgIHJlZjogZm9yd2FyZGVkUmVmID8gY29tcG9zZVJlZnMoZm9yd2FyZGVkUmVmLCBjaGlsZHJlblJlZikgOiBjaGlsZHJlblJlZlxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJldHVybiBSZWFjdC5DaGlsZHJlbi5jb3VudChjaGlsZHJlbikgPiAxID8gUmVhY3QuQ2hpbGRyZW4ub25seShudWxsKSA6IG51bGw7XHJcbn0pO1xyXG5TbG90Q2xvbmUuZGlzcGxheU5hbWUgPSBcIlNsb3RDbG9uZVwiO1xyXG52YXIgU2xvdHRhYmxlID0gKHsgY2hpbGRyZW4gfSkgPT4ge1xyXG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuIH0pO1xyXG59O1xyXG5mdW5jdGlvbiBpc1Nsb3R0YWJsZShjaGlsZCkge1xyXG4gIHJldHVybiBSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkgJiYgY2hpbGQudHlwZSA9PT0gU2xvdHRhYmxlO1xyXG59XHJcbmZ1bmN0aW9uIG1lcmdlUHJvcHMoc2xvdFByb3BzLCBjaGlsZFByb3BzKSB7XHJcbiAgY29uc3Qgb3ZlcnJpZGVQcm9wcyA9IHsgLi4uY2hpbGRQcm9wcyB9O1xyXG4gIGZvciAoY29uc3QgcHJvcE5hbWUgaW4gY2hpbGRQcm9wcykge1xyXG4gICAgY29uc3Qgc2xvdFByb3BWYWx1ZSA9IHNsb3RQcm9wc1twcm9wTmFtZV07XHJcbiAgICBjb25zdCBjaGlsZFByb3BWYWx1ZSA9IGNoaWxkUHJvcHNbcHJvcE5hbWVdO1xyXG4gICAgY29uc3QgaXNIYW5kbGVyID0gL15vbltBLVpdLy50ZXN0KHByb3BOYW1lKTtcclxuICAgIGlmIChpc0hhbmRsZXIpIHtcclxuICAgICAgaWYgKHNsb3RQcm9wVmFsdWUgJiYgY2hpbGRQcm9wVmFsdWUpIHtcclxuICAgICAgICBvdmVycmlkZVByb3BzW3Byb3BOYW1lXSA9ICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgICBjaGlsZFByb3BWYWx1ZSguLi5hcmdzKTtcclxuICAgICAgICAgIHNsb3RQcm9wVmFsdWUoLi4uYXJncyk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfSBlbHNlIGlmIChzbG90UHJvcFZhbHVlKSB7XHJcbiAgICAgICAgb3ZlcnJpZGVQcm9wc1twcm9wTmFtZV0gPSBzbG90UHJvcFZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHByb3BOYW1lID09PSBcInN0eWxlXCIpIHtcclxuICAgICAgb3ZlcnJpZGVQcm9wc1twcm9wTmFtZV0gPSB7IC4uLnNsb3RQcm9wVmFsdWUsIC4uLmNoaWxkUHJvcFZhbHVlIH07XHJcbiAgICB9IGVsc2UgaWYgKHByb3BOYW1lID09PSBcImNsYXNzTmFtZVwiKSB7XHJcbiAgICAgIG92ZXJyaWRlUHJvcHNbcHJvcE5hbWVdID0gW3Nsb3RQcm9wVmFsdWUsIGNoaWxkUHJvcFZhbHVlXS5maWx0ZXIoQm9vbGVhbikuam9pbihcIiBcIik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiB7IC4uLnNsb3RQcm9wcywgLi4ub3ZlcnJpZGVQcm9wcyB9O1xyXG59XHJcbmZ1bmN0aW9uIGdldEVsZW1lbnRSZWYoZWxlbWVudCkge1xyXG4gIGxldCBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGVsZW1lbnQucHJvcHMsIFwicmVmXCIpPy5nZXQ7XHJcbiAgbGV0IG1heVdhcm4gPSBnZXR0ZXIgJiYgXCJpc1JlYWN0V2FybmluZ1wiIGluIGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmc7XHJcbiAgaWYgKG1heVdhcm4pIHtcclxuICAgIHJldHVybiBlbGVtZW50LnJlZjtcclxuICB9XHJcbiAgZ2V0dGVyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlbGVtZW50LCBcInJlZlwiKT8uZ2V0O1xyXG4gIG1heVdhcm4gPSBnZXR0ZXIgJiYgXCJpc1JlYWN0V2FybmluZ1wiIGluIGdldHRlciAmJiBnZXR0ZXIuaXNSZWFjdFdhcm5pbmc7XHJcbiAgaWYgKG1heVdhcm4pIHtcclxuICAgIHJldHVybiBlbGVtZW50LnByb3BzLnJlZjtcclxuICB9XHJcbiAgcmV0dXJuIGVsZW1lbnQucHJvcHMucmVmIHx8IGVsZW1lbnQucmVmO1xyXG59XHJcbnZhciBSb290ID0gU2xvdDtcclxuZXhwb3J0IHtcclxuICBSb290LFxyXG4gIFNsb3QsXHJcbiAgU2xvdHRhYmxlXHJcbn07XHJcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXBcclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@radix-ui/react-slot/dist/index.mjs\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/class-variance-authority/dist/index.mjs": /*!**************************************************************!*\ !*** ./node_modules/class-variance-authority/dist/index.mjs ***! \**************************************************************/ /***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ cva: function() { return /* binding */ cva; },\n/* harmony export */ cx: function() { return /* binding */ cx; }\n/* harmony export */ });\n/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! clsx */ \"(app-pages-browser)/./node_modules/clsx/dist/clsx.mjs\");\n/**\r\n * Copyright 2022 Joe Bell. All rights reserved.\r\n *\r\n * This file is licensed to you under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with the\r\n * License. You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\r\n * License for the specific language governing permissions and limitations under\r\n * the License.\r\n */ \r\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\r\nconst cx = clsx__WEBPACK_IMPORTED_MODULE_0__.clsx;\r\nconst cva = (base, config)=>(props)=>{\r\n var _config_compoundVariants;\r\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\r\n const { variants, defaultVariants } = config;\r\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\r\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\r\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\r\n if (variantProp === null) return null;\r\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\r\n return variants[variant][variantKey];\r\n });\r\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\r\n let [key, value] = param;\r\n if (value === undefined) {\r\n return acc;\r\n }\r\n acc[key] = value;\r\n return acc;\r\n }, {});\r\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\r\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\r\n return Object.entries(compoundVariantOptions).every((param)=>{\r\n let [key, value] = param;\r\n return Array.isArray(value) ? value.includes({\r\n ...defaultVariants,\r\n ...propsWithoutUndefined\r\n }[key]) : ({\r\n ...defaultVariants,\r\n ...propsWithoutUndefined\r\n })[key] === value;\r\n }) ? [\r\n ...acc,\r\n cvClass,\r\n cvClassName\r\n ] : acc;\r\n }, []);\r\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\r\n };\r\n\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9jbGFzcy12YXJpYW5jZS1hdXRob3JpdHkvZGlzdC9pbmRleC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBZ0M7QUFDaEMsK0RBQStELE1BQU07QUFDOUQsV0FBVyxzQ0FBSTtBQUNmO0FBQ1A7QUFDQTtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxJQUFJO0FBQ2I7QUFDQSxrQkFBa0Isb0VBQW9FO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vX05fRS8uL25vZGVfbW9kdWxlcy9jbGFzcy12YXJpYW5jZS1hdXRob3JpdHkvZGlzdC9pbmRleC5tanM/YzBlMyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQ29weXJpZ2h0IDIwMjIgSm9lIEJlbGwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXHJcbiAqXHJcbiAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB0byB5b3UgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMFxyXG4gKiAodGhlIFwiTGljZW5zZVwiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZVxyXG4gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcclxuICpcclxuICogICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcclxuICpcclxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxyXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsIFdJVEhPVVRcclxuICogV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGVcclxuICogTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQgbGltaXRhdGlvbnMgdW5kZXJcclxuICogdGhlIExpY2Vuc2UuXHJcbiAqLyBpbXBvcnQgeyBjbHN4IH0gZnJvbSBcImNsc3hcIjtcclxuY29uc3QgZmFsc3lUb1N0cmluZyA9ICh2YWx1ZSk9PnR5cGVvZiB2YWx1ZSA9PT0gXCJib29sZWFuXCIgPyBgJHt2YWx1ZX1gIDogdmFsdWUgPT09IDAgPyBcIjBcIiA6IHZhbHVlO1xyXG5leHBvcnQgY29uc3QgY3ggPSBjbHN4O1xyXG5leHBvcnQgY29uc3QgY3ZhID0gKGJhc2UsIGNvbmZpZyk9Pihwcm9wcyk9PntcclxuICAgICAgICB2YXIgX2NvbmZpZ19jb21wb3VuZFZhcmlhbnRzO1xyXG4gICAgICAgIGlmICgoY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLnZhcmlhbnRzKSA9PSBudWxsKSByZXR1cm4gY3goYmFzZSwgcHJvcHMgPT09IG51bGwgfHwgcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BzLmNsYXNzLCBwcm9wcyA9PT0gbnVsbCB8fCBwcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvcHMuY2xhc3NOYW1lKTtcclxuICAgICAgICBjb25zdCB7IHZhcmlhbnRzLCBkZWZhdWx0VmFyaWFudHMgfSA9IGNvbmZpZztcclxuICAgICAgICBjb25zdCBnZXRWYXJpYW50Q2xhc3NOYW1lcyA9IE9iamVjdC5rZXlzKHZhcmlhbnRzKS5tYXAoKHZhcmlhbnQpPT57XHJcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhbnRQcm9wID0gcHJvcHMgPT09IG51bGwgfHwgcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BzW3ZhcmlhbnRdO1xyXG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFyaWFudFByb3AgPSBkZWZhdWx0VmFyaWFudHMgPT09IG51bGwgfHwgZGVmYXVsdFZhcmlhbnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWZhdWx0VmFyaWFudHNbdmFyaWFudF07XHJcbiAgICAgICAgICAgIGlmICh2YXJpYW50UHJvcCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhbnRLZXkgPSBmYWxzeVRvU3RyaW5nKHZhcmlhbnRQcm9wKSB8fCBmYWxzeVRvU3RyaW5nKGRlZmF1bHRWYXJpYW50UHJvcCk7XHJcbiAgICAgICAgICAgIHJldHVybiB2YXJpYW50c1t2YXJpYW50XVt2YXJpYW50S2V5XTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjb25zdCBwcm9wc1dpdGhvdXRVbmRlZmluZWQgPSBwcm9wcyAmJiBPYmplY3QuZW50cmllcyhwcm9wcykucmVkdWNlKChhY2MsIHBhcmFtKT0+e1xyXG4gICAgICAgICAgICBsZXQgW2tleSwgdmFsdWVdID0gcGFyYW07XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFjY1trZXldID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgfSwge30pO1xyXG4gICAgICAgIGNvbnN0IGdldENvbXBvdW5kVmFyaWFudENsYXNzTmFtZXMgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2NvbmZpZ19jb21wb3VuZFZhcmlhbnRzID0gY29uZmlnLmNvbXBvdW5kVmFyaWFudHMpID09PSBudWxsIHx8IF9jb25maWdfY29tcG91bmRWYXJpYW50cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2NvbmZpZ19jb21wb3VuZFZhcmlhbnRzLnJlZHVjZSgoYWNjLCBwYXJhbSk9PntcclxuICAgICAgICAgICAgbGV0IHsgY2xhc3M6IGN2Q2xhc3MsIGNsYXNzTmFtZTogY3ZDbGFzc05hbWUsIC4uLmNvbXBvdW5kVmFyaWFudE9wdGlvbnMgfSA9IHBhcmFtO1xyXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoY29tcG91bmRWYXJpYW50T3B0aW9ucykuZXZlcnkoKHBhcmFtKT0+e1xyXG4gICAgICAgICAgICAgICAgbGV0IFtrZXksIHZhbHVlXSA9IHBhcmFtO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuaW5jbHVkZXMoe1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmRlZmF1bHRWYXJpYW50cyxcclxuICAgICAgICAgICAgICAgICAgICAuLi5wcm9wc1dpdGhvdXRVbmRlZmluZWRcclxuICAgICAgICAgICAgICAgIH1ba2V5XSkgOiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIC4uLmRlZmF1bHRWYXJpYW50cyxcclxuICAgICAgICAgICAgICAgICAgICAuLi5wcm9wc1dpdGhvdXRVbmRlZmluZWRcclxuICAgICAgICAgICAgICAgIH0pW2tleV0gPT09IHZhbHVlO1xyXG4gICAgICAgICAgICB9KSA/IFtcclxuICAgICAgICAgICAgICAgIC4uLmFjYyxcclxuICAgICAgICAgICAgICAgIGN2Q2xhc3MsXHJcbiAgICAgICAgICAgICAgICBjdkNsYXNzTmFtZVxyXG4gICAgICAgICAgICBdIDogYWNjO1xyXG4gICAgICAgIH0sIFtdKTtcclxuICAgICAgICByZXR1cm4gY3goYmFzZSwgZ2V0VmFyaWFudENsYXNzTmFtZXMsIGdldENvbXBvdW5kVmFyaWFudENsYXNzTmFtZXMsIHByb3BzID09PSBudWxsIHx8IHByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9wcy5jbGFzcywgcHJvcHMgPT09IG51bGwgfHwgcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BzLmNsYXNzTmFtZSk7XHJcbiAgICB9O1xyXG5cclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/class-variance-authority/dist/index.mjs\n")); /***/ }), /***/ "(app-pages-browser)/./node_modules/clsx/dist/clsx.mjs": /*!*****************************************!*\ !*** ./node_modules/clsx/dist/clsx.mjs ***! \*****************************************/ /***/ (function(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) { "use strict"; eval(__webpack_require__.ts("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ clsx: function() { return /* binding */ clsx; }\n/* harmony export */ });\nfunction r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t {\r\n const classMap = createClassMap(config);\r\n const {\r\n conflictingClassGroups,\r\n conflictingClassGroupModifiers\r\n } = config;\r\n const getClassGroupId = className => {\r\n const classParts = className.split(CLASS_PART_SEPARATOR);\r\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\r\n if (classParts[0] === '' && classParts.length !== 1) {\r\n classParts.shift();\r\n }\r\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\r\n };\r\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\r\n const conflicts = conflictingClassGroups[classGroupId] || [];\r\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\r\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]];\r\n }\r\n return conflicts;\r\n };\r\n return {\r\n getClassGroupId,\r\n getConflictingClassGroupIds\r\n };\r\n};\r\nconst getGroupRecursive = (classParts, classPartObject) => {\r\n if (classParts.length === 0) {\r\n return classPartObject.classGroupId;\r\n }\r\n const currentClassPart = classParts[0];\r\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\r\n const classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\r\n if (classGroupFromNextClassPart) {\r\n return classGroupFromNextClassPart;\r\n }\r\n if (classPartObject.validators.length === 0) {\r\n return undefined;\r\n }\r\n const classRest = classParts.join(CLASS_PART_SEPARATOR);\r\n return classPartObject.validators.find(({\r\n validator\r\n }) => validator(classRest))?.classGroupId;\r\n};\r\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/;\r\nconst getGroupIdForArbitraryProperty = className => {\r\n if (arbitraryPropertyRegex.test(className)) {\r\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\r\n const property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\r\n if (property) {\r\n // I use two dots here because one dot is used as prefix for class groups in plugins\r\n return 'arbitrary..' + property;\r\n }\r\n }\r\n};\r\n/**\r\n * Exported for testing only\r\n */\r\nconst createClassMap = config => {\r\n const {\r\n theme,\r\n prefix\r\n } = config;\r\n const classMap = {\r\n nextPart: new Map(),\r\n validators: []\r\n };\r\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\r\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\r\n processClassesRecursively(classGroup, classMap, classGroupId, theme);\r\n });\r\n return classMap;\r\n};\r\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\r\n classGroup.forEach(classDefinition => {\r\n if (typeof classDefinition === 'string') {\r\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\r\n classPartObjectToEdit.classGroupId = classGroupId;\r\n return;\r\n }\r\n if (typeof classDefinition === 'function') {\r\n if (isThemeGetter(classDefinition)) {\r\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\r\n return;\r\n }\r\n classPartObject.validators.push({\r\n validator: classDefinition,\r\n classGroupId\r\n });\r\n return;\r\n }\r\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\r\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\r\n });\r\n });\r\n};\r\nconst getPart = (classPartObject, path) => {\r\n let currentClassPartObject = classPartObject;\r\n path.split(CLASS_PART_SEPARATOR).forEach(pathPart => {\r\n if (!currentClassPartObject.nextPart.has(pathPart)) {\r\n currentClassPartObject.nextPart.set(pathPart, {\r\n nextPart: new Map(),\r\n validators: []\r\n });\r\n }\r\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\r\n });\r\n return currentClassPartObject;\r\n};\r\nconst isThemeGetter = func => func.isThemeGetter;\r\nconst getPrefixedClassGroupEntries = (classGroupEntries, prefix) => {\r\n if (!prefix) {\r\n return classGroupEntries;\r\n }\r\n return classGroupEntries.map(([classGroupId, classGroup]) => {\r\n const prefixedClassGroup = classGroup.map(classDefinition => {\r\n if (typeof classDefinition === 'string') {\r\n return prefix + classDefinition;\r\n }\r\n if (typeof classDefinition === 'object') {\r\n return Object.fromEntries(Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]));\r\n }\r\n return classDefinition;\r\n });\r\n return [classGroupId, prefixedClassGroup];\r\n });\r\n};\r\n\r\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\r\nconst createLruCache = maxCacheSize => {\r\n if (maxCacheSize < 1) {\r\n return {\r\n get: () => undefined,\r\n set: () => {}\r\n };\r\n }\r\n let cacheSize = 0;\r\n let cache = new Map();\r\n let previousCache = new Map();\r\n const update = (key, value) => {\r\n cache.set(key, value);\r\n cacheSize++;\r\n if (cacheSize > maxCacheSize) {\r\n cacheSize = 0;\r\n previousCache = cache;\r\n cache = new Map();\r\n }\r\n };\r\n return {\r\n get(key) {\r\n let value = cache.get(key);\r\n if (value !== undefined) {\r\n return value;\r\n }\r\n if ((value = previousCache.get(key)) !== undefined) {\r\n update(key, value);\r\n return value;\r\n }\r\n },\r\n set(key, value) {\r\n if (cache.has(key)) {\r\n cache.set(key, value);\r\n } else {\r\n update(key, value);\r\n }\r\n }\r\n };\r\n};\r\nconst IMPORTANT_MODIFIER = '!';\r\nconst createParseClassName = config => {\r\n const {\r\n separator,\r\n experimentalParseClassName\r\n } = config;\r\n const isSeparatorSingleCharacter = separator.length === 1;\r\n const firstSeparatorCharacter = separator[0];\r\n const separatorLength = separator.length;\r\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\r\n const parseClassName = className => {\r\n const modifiers = [];\r\n let bracketDepth = 0;\r\n let modifierStart = 0;\r\n let postfixModifierPosition;\r\n for (let index = 0; index < className.length; index++) {\r\n let currentCharacter = className[index];\r\n if (bracketDepth === 0) {\r\n if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\r\n modifiers.push(className.slice(modifierStart, index));\r\n modifierStart = index + separatorLength;\r\n continue;\r\n }\r\n if (currentCharacter === '/') {\r\n postfixModifierPosition = index;\r\n continue;\r\n }\r\n }\r\n if (currentCharacter === '[') {\r\n bracketDepth++;\r\n } else if (currentCharacter === ']') {\r\n bracketDepth--;\r\n }\r\n }\r\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\r\n const hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\r\n const baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\r\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\r\n return {\r\n modifiers,\r\n hasImportantModifier,\r\n baseClassName,\r\n maybePostfixModifierPosition\r\n };\r\n };\r\n if (experimentalParseClassName) {\r\n return className => experimentalParseClassName({\r\n className,\r\n parseClassName\r\n });\r\n }\r\n return parseClassName;\r\n};\r\n/**\r\n * Sorts modifiers according to following schema:\r\n * - Predefined modifiers are sorted alphabetically\r\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\r\n */\r\nconst sortModifiers = modifiers => {\r\n if (modifiers.length <= 1) {\r\n return modifiers;\r\n }\r\n const sortedModifiers = [];\r\n let unsortedModifiers = [];\r\n modifiers.forEach(modifier => {\r\n const isArbitraryVariant = modifier[0] === '[';\r\n if (isArbitraryVariant) {\r\n sortedModifiers.push(...unsortedModifiers.sort(), modifier);\r\n unsortedModifiers = [];\r\n } else {\r\n unsortedModifiers.push(modifier);\r\n }\r\n });\r\n sortedModifiers.push(...unsortedModifiers.sort());\r\n return sortedModifiers;\r\n};\r\nconst createConfigUtils = config => ({\r\n cache: createLruCache(config.cacheSize),\r\n parseClassName: createParseClassName(config),\r\n ...createClassGroupUtils(config)\r\n});\r\nconst SPLIT_CLASSES_REGEX = /\\s+/;\r\nconst mergeClassList = (classList, configUtils) => {\r\n const {\r\n parseClassName,\r\n getClassGroupId,\r\n getConflictingClassGroupIds\r\n } = configUtils;\r\n /**\r\n * Set of classGroupIds in following format:\r\n * `{importantModifier}{variantModifiers}{classGroupId}`\r\n * @example 'float'\r\n * @example 'hover:focus:bg-color'\r\n * @example 'md:!pr'\r\n */\r\n const classGroupsInConflict = [];\r\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\r\n let result = '';\r\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\r\n const originalClassName = classNames[index];\r\n const {\r\n modifiers,\r\n hasImportantModifier,\r\n baseClassName,\r\n maybePostfixModifierPosition\r\n } = parseClassName(originalClassName);\r\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition);\r\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\r\n if (!classGroupId) {\r\n if (!hasPostfixModifier) {\r\n // Not a Tailwind class\r\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\r\n continue;\r\n }\r\n classGroupId = getClassGroupId(baseClassName);\r\n if (!classGroupId) {\r\n // Not a Tailwind class\r\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\r\n continue;\r\n }\r\n hasPostfixModifier = false;\r\n }\r\n const variantModifier = sortModifiers(modifiers).join(':');\r\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\r\n const classId = modifierId + classGroupId;\r\n if (classGroupsInConflict.includes(classId)) {\r\n // Tailwind class omitted due to conflict\r\n continue;\r\n }\r\n classGroupsInConflict.push(classId);\r\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\r\n for (let i = 0; i < conflictGroups.length; ++i) {\r\n const group = conflictGroups[i];\r\n classGroupsInConflict.push(modifierId + group);\r\n }\r\n // Tailwind class not in conflict\r\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\r\n }\r\n return result;\r\n};\r\n\r\n/**\r\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\r\n *\r\n * Specifically:\r\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\r\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\r\n *\r\n * Original code has MIT license: Copyright (c) Luke Edwards (lukeed.com)\r\n */\r\nfunction twJoin() {\r\n let index = 0;\r\n let argument;\r\n let resolvedValue;\r\n let string = '';\r\n while (index < arguments.length) {\r\n if (argument = arguments[index++]) {\r\n if (resolvedValue = toValue(argument)) {\r\n string && (string += ' ');\r\n string += resolvedValue;\r\n }\r\n }\r\n }\r\n return string;\r\n}\r\nconst toValue = mix => {\r\n if (typeof mix === 'string') {\r\n return mix;\r\n }\r\n let resolvedValue;\r\n let string = '';\r\n for (let k = 0; k < mix.length; k++) {\r\n if (mix[k]) {\r\n if (resolvedValue = toValue(mix[k])) {\r\n string && (string += ' ');\r\n string += resolvedValue;\r\n }\r\n }\r\n }\r\n return string;\r\n};\r\nfunction createTailwindMerge(createConfigFirst, ...createConfigRest) {\r\n let configUtils;\r\n let cacheGet;\r\n let cacheSet;\r\n let functionToCall = initTailwindMerge;\r\n function initTailwindMerge(classList) {\r\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\r\n configUtils = createConfigUtils(config);\r\n cacheGet = configUtils.cache.get;\r\n cacheSet = configUtils.cache.set;\r\n functionToCall = tailwindMerge;\r\n return tailwindMerge(classList);\r\n }\r\n function tailwindMerge(classList) {\r\n const cachedResult = cacheGet(classList);\r\n if (cachedResult) {\r\n return cachedResult;\r\n }\r\n const result = mergeClassList(classList, configUtils);\r\n cacheSet(classList, result);\r\n return result;\r\n }\r\n return function callTailwindMerge() {\r\n return functionToCall(twJoin.apply(null, arguments));\r\n };\r\n}\r\nconst fromTheme = key => {\r\n const themeGetter = theme => theme[key] || [];\r\n themeGetter.isThemeGetter = true;\r\n return themeGetter;\r\n};\r\nconst arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\r\nconst fractionRegex = /^\\d+\\/\\d+$/;\r\nconst stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\r\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\r\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\r\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/;\r\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\r\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\r\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\r\nconst isLength = value => isNumber(value) || stringLengths.has(value) || fractionRegex.test(value);\r\nconst isArbitraryLength = value => getIsArbitraryValue(value, 'length', isLengthOnly);\r\nconst isNumber = value => Boolean(value) && !Number.isNaN(Number(value));\r\nconst isArbitraryNumber = value => getIsArbitraryValue(value, 'number', isNumber);\r\nconst isInteger = value => Boolean(value) && Number.isInteger(Number(value));\r\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\r\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\r\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\r\nconst sizeLabels = /*#__PURE__*/new Set(['length', 'size', 'percentage']);\r\nconst isArbitrarySize = value => getIsArbitraryValue(value, sizeLabels, isNever);\r\nconst isArbitraryPosition = value => getIsArbitraryValue(value, 'position', isNever);\r\nconst imageLabels = /*#__PURE__*/new Set(['image', 'url']);\r\nconst isArbitraryImage = value => getIsArbitraryValue(value, imageLabels, isImage);\r\nconst isArbitraryShadow = value => getIsArbitraryValue(value, '', isShadow);\r\nconst isAny = () => true;\r\nconst getIsArbitraryValue = (value, label, testValue) => {\r\n const result = arbitraryValueRegex.exec(value);\r\n if (result) {\r\n if (result[1]) {\r\n return typeof label === 'string' ? result[1] === label : label.has(result[1]);\r\n }\r\n return testValue(result[2]);\r\n }\r\n return false;\r\n};\r\nconst isLengthOnly = value =>\r\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\r\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\r\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\r\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\r\nconst isNever = () => false;\r\nconst isShadow = value => shadowRegex.test(value);\r\nconst isImage = value => imageRegex.test(value);\r\nconst validators = /*#__PURE__*/Object.defineProperty({\r\n __proto__: null,\r\n isAny,\r\n isArbitraryImage,\r\n isArbitraryLength,\r\n isArbitraryNumber,\r\n isArbitraryPosition,\r\n isArbitraryShadow,\r\n isArbitrarySize,\r\n isArbitraryValue,\r\n isInteger,\r\n isLength,\r\n isNumber,\r\n isPercent,\r\n isTshirtSize\r\n}, Symbol.toStringTag, {\r\n value: 'Module'\r\n});\r\nconst getDefaultConfig = () => {\r\n const colors = fromTheme('colors');\r\n const spacing = fromTheme('spacing');\r\n const blur = fromTheme('blur');\r\n const brightness = fromTheme('brightness');\r\n const borderColor = fromTheme('borderColor');\r\n const borderRadius = fromTheme('borderRadius');\r\n const borderSpacing = fromTheme('borderSpacing');\r\n const borderWidth = fromTheme('borderWidth');\r\n const contrast = fromTheme('contrast');\r\n const grayscale = fromTheme('grayscale');\r\n const hueRotate = fromTheme('hueRotate');\r\n const invert = fromTheme('invert');\r\n const gap = fromTheme('gap');\r\n const gradientColorStops = fromTheme('gradientColorStops');\r\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions');\r\n const inset = fromTheme('inset');\r\n const margin = fromTheme('margin');\r\n const opacity = fromTheme('opacity');\r\n const padding = fromTheme('padding');\r\n const saturate = fromTheme('saturate');\r\n const scale = fromTheme('scale');\r\n const sepia = fromTheme('sepia');\r\n const skew = fromTheme('skew');\r\n const space = fromTheme('space');\r\n const translate = fromTheme('translate');\r\n const getOverscroll = () => ['auto', 'contain', 'none'];\r\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\r\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing];\r\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing];\r\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength];\r\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue];\r\n const getPositions = () => ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\r\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'];\r\n const getBlendModes = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\r\n const getAlign = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\r\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue];\r\n const getBreaks = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\r\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue];\r\n return {\r\n cacheSize: 500,\r\n separator: ':',\r\n theme: {\r\n colors: [isAny],\r\n spacing: [isLength, isArbitraryLength],\r\n blur: ['none', '', isTshirtSize, isArbitraryValue],\r\n brightness: getNumberAndArbitrary(),\r\n borderColor: [colors],\r\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\r\n borderSpacing: getSpacingWithArbitrary(),\r\n borderWidth: getLengthWithEmptyAndArbitrary(),\r\n contrast: getNumberAndArbitrary(),\r\n grayscale: getZeroAndEmpty(),\r\n hueRotate: getNumberAndArbitrary(),\r\n invert: getZeroAndEmpty(),\r\n gap: getSpacingWithArbitrary(),\r\n gradientColorStops: [colors],\r\n gradientColorStopPositions: [isPercent, isArbitraryLength],\r\n inset: getSpacingWithAutoAndArbitrary(),\r\n margin: getSpacingWithAutoAndArbitrary(),\r\n opacity: getNumberAndArbitrary(),\r\n padding: getSpacingWithArbitrary(),\r\n saturate: getNumberAndArbitrary(),\r\n scale: getNumberAndArbitrary(),\r\n sepia: getZeroAndEmpty(),\r\n skew: getNumberAndArbitrary(),\r\n space: getSpacingWithArbitrary(),\r\n translate: getSpacingWithArbitrary()\r\n },\r\n classGroups: {\r\n // Layout\r\n /**\r\n * Aspect Ratio\r\n * @see https://tailwindcss.com/docs/aspect-ratio\r\n */\r\n aspect: [{\r\n aspect: ['auto', 'square', 'video', isArbitraryValue]\r\n }],\r\n /**\r\n * Container\r\n * @see https://tailwindcss.com/docs/container\r\n */\r\n container: ['container'],\r\n /**\r\n * Columns\r\n * @see https://tailwindcss.com/docs/columns\r\n */\r\n columns: [{\r\n columns: [isTshirtSize]\r\n }],\r\n /**\r\n * Break After\r\n * @see https://tailwindcss.com/docs/break-after\r\n */\r\n 'break-after': [{\r\n 'break-after': getBreaks()\r\n }],\r\n /**\r\n * Break Before\r\n * @see https://tailwindcss.com/docs/break-before\r\n */\r\n 'break-before': [{\r\n 'break-before': getBreaks()\r\n }],\r\n /**\r\n * Break Inside\r\n * @see https://tailwindcss.com/docs/break-inside\r\n */\r\n 'break-inside': [{\r\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\r\n }],\r\n /**\r\n * Box Decoration Break\r\n * @see https://tailwindcss.com/docs/box-decoration-break\r\n */\r\n 'box-decoration': [{\r\n 'box-decoration': ['slice', 'clone']\r\n }],\r\n /**\r\n * Box Sizing\r\n * @see https://tailwindcss.com/docs/box-sizing\r\n */\r\n box: [{\r\n box: ['border', 'content']\r\n }],\r\n /**\r\n * Display\r\n * @see https://tailwindcss.com/docs/display\r\n */\r\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\r\n /**\r\n * Floats\r\n * @see https://tailwindcss.com/docs/float\r\n */\r\n float: [{\r\n float: ['right', 'left', 'none', 'start', 'end']\r\n }],\r\n /**\r\n * Clear\r\n * @see https://tailwindcss.com/docs/clear\r\n */\r\n clear: [{\r\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\r\n }],\r\n /**\r\n * Isolation\r\n * @see https://tailwindcss.com/docs/isolation\r\n */\r\n isolation: ['isolate', 'isolation-auto'],\r\n /**\r\n * Object Fit\r\n * @see https://tailwindcss.com/docs/object-fit\r\n */\r\n 'object-fit': [{\r\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\r\n }],\r\n /**\r\n * Object Position\r\n * @see https://tailwindcss.com/docs/object-position\r\n */\r\n 'object-position': [{\r\n object: [...getPositions(), isArbitraryValue]\r\n }],\r\n /**\r\n * Overflow\r\n * @see https://tailwindcss.com/docs/overflow\r\n */\r\n overflow: [{\r\n overflow: getOverflow()\r\n }],\r\n /**\r\n * Overflow X\r\n * @see https://tailwindcss.com/docs/overflow\r\n */\r\n 'overflow-x': [{\r\n 'overflow-x': getOverflow()\r\n }],\r\n /**\r\n * Overflow Y\r\n * @see https://tailwindcss.com/docs/overflow\r\n */\r\n 'overflow-y': [{\r\n 'overflow-y': getOverflow()\r\n }],\r\n /**\r\n * Overscroll Behavior\r\n * @see https://tailwindcss.com/docs/overscroll-behavior\r\n */\r\n overscroll: [{\r\n overscroll: getOverscroll()\r\n }],\r\n /**\r\n * Overscroll Behavior X\r\n * @see https://tailwindcss.com/docs/overscroll-behavior\r\n */\r\n 'overscroll-x': [{\r\n 'overscroll-x': getOverscroll()\r\n }],\r\n /**\r\n * Overscroll Behavior Y\r\n * @see https://tailwindcss.com/docs/overscroll-behavior\r\n */\r\n 'overscroll-y': [{\r\n 'overscroll-y': getOverscroll()\r\n }],\r\n /**\r\n * Position\r\n * @see https://tailwindcss.com/docs/position\r\n */\r\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\r\n /**\r\n * Top / Right / Bottom / Left\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n inset: [{\r\n inset: [inset]\r\n }],\r\n /**\r\n * Right / Left\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n 'inset-x': [{\r\n 'inset-x': [inset]\r\n }],\r\n /**\r\n * Top / Bottom\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n 'inset-y': [{\r\n 'inset-y': [inset]\r\n }],\r\n /**\r\n * Start\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n start: [{\r\n start: [inset]\r\n }],\r\n /**\r\n * End\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n end: [{\r\n end: [inset]\r\n }],\r\n /**\r\n * Top\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n top: [{\r\n top: [inset]\r\n }],\r\n /**\r\n * Right\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n right: [{\r\n right: [inset]\r\n }],\r\n /**\r\n * Bottom\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n bottom: [{\r\n bottom: [inset]\r\n }],\r\n /**\r\n * Left\r\n * @see https://tailwindcss.com/docs/top-right-bottom-left\r\n */\r\n left: [{\r\n left: [inset]\r\n }],\r\n /**\r\n * Visibility\r\n * @see https://tailwindcss.com/docs/visibility\r\n */\r\n visibility: ['visible', 'invisible', 'collapse'],\r\n /**\r\n * Z-Index\r\n * @see https://tailwindcss.com/docs/z-index\r\n */\r\n z: [{\r\n z: ['auto', isInteger, isArbitraryValue]\r\n }],\r\n // Flexbox and Grid\r\n /**\r\n * Flex Basis\r\n * @see https://tailwindcss.com/docs/flex-basis\r\n */\r\n basis: [{\r\n basis: getSpacingWithAutoAndArbitrary()\r\n }],\r\n /**\r\n * Flex Direction\r\n * @see https://tailwindcss.com/docs/flex-direction\r\n */\r\n 'flex-direction': [{\r\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\r\n }],\r\n /**\r\n * Flex Wrap\r\n * @see https://tailwindcss.com/docs/flex-wrap\r\n */\r\n 'flex-wrap': [{\r\n flex: ['wrap', 'wrap-reverse', 'nowrap']\r\n }],\r\n /**\r\n * Flex\r\n * @see https://tailwindcss.com/docs/flex\r\n */\r\n flex: [{\r\n flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\r\n }],\r\n /**\r\n * Flex Grow\r\n * @see https://tailwindcss.com/docs/flex-grow\r\n */\r\n grow: [{\r\n grow: getZeroAndEmpty()\r\n }],\r\n /**\r\n * Flex Shrink\r\n * @see https://tailwindcss.com/docs/flex-shrink\r\n */\r\n shrink: [{\r\n shrink: getZeroAndEmpty()\r\n }],\r\n /**\r\n * Order\r\n * @see https://tailwindcss.com/docs/order\r\n */\r\n order: [{\r\n order: ['first', 'last', 'none', isInteger, isArbitraryValue]\r\n }],\r\n /**\r\n * Grid Template Columns\r\n * @see https://tailwindcss.com/docs/grid-template-columns\r\n */\r\n 'grid-cols': [{\r\n 'grid-cols': [isAny]\r\n }],\r\n /**\r\n * Grid Column Start / End\r\n * @see https://tailwindcss.com/docs/grid-column\r\n */\r\n 'col-start-end': [{\r\n col: ['auto', {\r\n span: ['full', isInteger, isArbitraryValue]\r\n }, isArbitraryValue]\r\n }],\r\n /**\r\n * Grid Column Start\r\n * @see https://tailwindcss.com/docs/grid-column\r\n */\r\n 'col-start': [{\r\n 'col-start': getNumberWithAutoAndArbitrary()\r\n }],\r\n /**\r\n * Grid Column End\r\n * @see https://tailwindcss.com/docs/grid-column\r\n */\r\n 'col-end': [{\r\n 'col-end': getNumberWithAutoAndArbitrary()\r\n }],\r\n /**\r\n * Grid Template Rows\r\n * @see https://tailwindcss.com/docs/grid-template-rows\r\n */\r\n 'grid-rows': [{\r\n 'grid-rows': [isAny]\r\n }],\r\n /**\r\n * Grid Row Start / End\r\n * @see https://tailwindcss.com/docs/grid-row\r\n */\r\n 'row-start-end': [{\r\n row: ['auto', {\r\n span: [isInteger, isArbitraryValue]\r\n }, isArbitraryValue]\r\n }],\r\n /**\r\n * Grid Row Start\r\n * @see https://tailwindcss.com/docs/grid-row\r\n */\r\n 'row-start': [{\r\n 'row-start': getNumberWithAutoAndArbitrary()\r\n }],\r\n /**\r\n * Grid Row End\r\n * @see https://tailwindcss.com/docs/grid-row\r\n */\r\n 'row-end': [{\r\n 'row-end': getNumberWithAutoAndArbitrary()\r\n }],\r\n /**\r\n * Grid Auto Flow\r\n * @see https://tailwindcss.com/docs/grid-auto-flow\r\n */\r\n 'grid-flow': [{\r\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\r\n }],\r\n /**\r\n * Grid Auto Columns\r\n * @see https://tailwindcss.com/docs/grid-auto-columns\r\n */\r\n 'auto-cols': [{\r\n 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\r\n }],\r\n /**\r\n * Grid Auto Rows\r\n * @see https://tailwindcss.com/docs/grid-auto-rows\r\n */\r\n 'auto-rows': [{\r\n 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\r\n }],\r\n /**\r\n * Gap\r\n * @see https://tailwindcss.com/docs/gap\r\n */\r\n gap: [{\r\n gap: [gap]\r\n }],\r\n /**\r\n * Gap X\r\n * @see https://tailwindcss.com/docs/gap\r\n */\r\n 'gap-x': [{\r\n 'gap-x': [gap]\r\n }],\r\n /**\r\n * Gap Y\r\n * @see https://tailwindcss.com/docs/gap\r\n */\r\n 'gap-y': [{\r\n 'gap-y': [gap]\r\n }],\r\n /**\r\n * Justify Content\r\n * @see https://tailwindcss.com/docs/justify-content\r\n */\r\n 'justify-content': [{\r\n justify: ['normal', ...getAlign()]\r\n }],\r\n /**\r\n * Justify Items\r\n * @see https://tailwindcss.com/docs/justify-items\r\n */\r\n 'justify-items': [{\r\n 'justify-items': ['start', 'end', 'center', 'stretch']\r\n }],\r\n /**\r\n * Justify Self\r\n * @see https://tailwindcss.com/docs/justify-self\r\n */\r\n 'justify-self': [{\r\n 'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\r\n }],\r\n /**\r\n * Align Content\r\n * @see https://tailwindcss.com/docs/align-content\r\n */\r\n 'align-content': [{\r\n content: ['normal', ...getAlign(), 'baseline']\r\n }],\r\n /**\r\n * Align Items\r\n * @see https://tailwindcss.com/docs/align-items\r\n */\r\n 'align-items': [{\r\n items: ['start', 'end', 'center', 'baseline', 'stretch']\r\n }],\r\n /**\r\n * Align Self\r\n * @see https://tailwindcss.com/docs/align-self\r\n */\r\n 'align-self': [{\r\n self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\r\n }],\r\n /**\r\n * Place Content\r\n * @see https://tailwindcss.com/docs/place-content\r\n */\r\n 'place-content': [{\r\n 'place-content': [...getAlign(), 'baseline']\r\n }],\r\n /**\r\n * Place Items\r\n * @see https://tailwindcss.com/docs/place-items\r\n */\r\n 'place-items': [{\r\n 'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\r\n }],\r\n /**\r\n * Place Self\r\n * @see https://tailwindcss.com/docs/place-self\r\n */\r\n 'place-self': [{\r\n 'place-self': ['auto', 'start', 'end', 'center', 'stretch']\r\n }],\r\n // Spacing\r\n /**\r\n * Padding\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n p: [{\r\n p: [padding]\r\n }],\r\n /**\r\n * Padding X\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n px: [{\r\n px: [padding]\r\n }],\r\n /**\r\n * Padding Y\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n py: [{\r\n py: [padding]\r\n }],\r\n /**\r\n * Padding Start\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n ps: [{\r\n ps: [padding]\r\n }],\r\n /**\r\n * Padding End\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n pe: [{\r\n pe: [padding]\r\n }],\r\n /**\r\n * Padding Top\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n pt: [{\r\n pt: [padding]\r\n }],\r\n /**\r\n * Padding Right\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n pr: [{\r\n pr: [padding]\r\n }],\r\n /**\r\n * Padding Bottom\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n pb: [{\r\n pb: [padding]\r\n }],\r\n /**\r\n * Padding Left\r\n * @see https://tailwindcss.com/docs/padding\r\n */\r\n pl: [{\r\n pl: [padding]\r\n }],\r\n /**\r\n * Margin\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n m: [{\r\n m: [margin]\r\n }],\r\n /**\r\n * Margin X\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n mx: [{\r\n mx: [margin]\r\n }],\r\n /**\r\n * Margin Y\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n my: [{\r\n my: [margin]\r\n }],\r\n /**\r\n * Margin Start\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n ms: [{\r\n ms: [margin]\r\n }],\r\n /**\r\n * Margin End\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n me: [{\r\n me: [margin]\r\n }],\r\n /**\r\n * Margin Top\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n mt: [{\r\n mt: [margin]\r\n }],\r\n /**\r\n * Margin Right\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n mr: [{\r\n mr: [margin]\r\n }],\r\n /**\r\n * Margin Bottom\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n mb: [{\r\n mb: [margin]\r\n }],\r\n /**\r\n * Margin Left\r\n * @see https://tailwindcss.com/docs/margin\r\n */\r\n ml: [{\r\n ml: [margin]\r\n }],\r\n /**\r\n * Space Between X\r\n * @see https://tailwindcss.com/docs/space\r\n */\r\n 'space-x': [{\r\n 'space-x': [space]\r\n }],\r\n /**\r\n * Space Between X Reverse\r\n * @see https://tailwindcss.com/docs/space\r\n */\r\n 'space-x-reverse': ['space-x-reverse'],\r\n /**\r\n * Space Between Y\r\n * @see https://tailwindcss.com/docs/space\r\n */\r\n 'space-y': [{\r\n 'space-y': [space]\r\n }],\r\n /**\r\n * Space Between Y Reverse\r\n * @see https://tailwindcss.com/docs/space\r\n */\r\n 'space-y-reverse': ['space-y-reverse'],\r\n // Sizing\r\n /**\r\n * Width\r\n * @see https://tailwindcss.com/docs/width\r\n */\r\n w: [{\r\n w: ['auto', 'min', 'max', 'fit', 'svw', 'lvw', 'dvw', isArbitraryValue, spacing]\r\n }],\r\n /**\r\n * Min-Width\r\n * @see https://tailwindcss.com/docs/min-width\r\n */\r\n 'min-w': [{\r\n 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit']\r\n }],\r\n /**\r\n * Max-Width\r\n * @see https://tailwindcss.com/docs/max-width\r\n */\r\n 'max-w': [{\r\n 'max-w': [isArbitraryValue, spacing, 'none', 'full', 'min', 'max', 'fit', 'prose', {\r\n screen: [isTshirtSize]\r\n }, isTshirtSize]\r\n }],\r\n /**\r\n * Height\r\n * @see https://tailwindcss.com/docs/height\r\n */\r\n h: [{\r\n h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\r\n }],\r\n /**\r\n * Min-Height\r\n * @see https://tailwindcss.com/docs/min-height\r\n */\r\n 'min-h': [{\r\n 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\r\n }],\r\n /**\r\n * Max-Height\r\n * @see https://tailwindcss.com/docs/max-height\r\n */\r\n 'max-h': [{\r\n 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh']\r\n }],\r\n /**\r\n * Size\r\n * @see https://tailwindcss.com/docs/size\r\n */\r\n size: [{\r\n size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\r\n }],\r\n // Typography\r\n /**\r\n * Font Size\r\n * @see https://tailwindcss.com/docs/font-size\r\n */\r\n 'font-size': [{\r\n text: ['base', isTshirtSize, isArbitraryLength]\r\n }],\r\n /**\r\n * Font Smoothing\r\n * @see https://tailwindcss.com/docs/font-smoothing\r\n */\r\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\r\n /**\r\n * Font Style\r\n * @see https://tailwindcss.com/docs/font-style\r\n */\r\n 'font-style': ['italic', 'not-italic'],\r\n /**\r\n * Font Weight\r\n * @see https://tailwindcss.com/docs/font-weight\r\n */\r\n 'font-weight': [{\r\n font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\r\n }],\r\n /**\r\n * Font Family\r\n * @see https://tailwindcss.com/docs/font-family\r\n */\r\n 'font-family': [{\r\n font: [isAny]\r\n }],\r\n /**\r\n * Font Variant Numeric\r\n * @see https://tailwindcss.com/docs/font-variant-numeric\r\n */\r\n 'fvn-normal': ['normal-nums'],\r\n /**\r\n * Font Variant Numeric\r\n * @see https://tailwindcss.com/docs/font-variant-numeric\r\n */\r\n 'fvn-ordinal': ['ordinal'],\r\n /**\r\n * Font Variant Numeric\r\n * @see https://tailwindcss.com/docs/font-variant-numeric\r\n */\r\n 'fvn-slashed-zero': ['slashed-zero'],\r\n /**\r\n * Font Variant Numeric\r\n * @see https://tailwindcss.com/docs/font-variant-numeric\r\n */\r\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\r\n /**\r\n * Font Variant Numeric\r\n * @see https://tailwindcss.com/docs/font-variant-numeric\r\n */\r\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\r\n /**\r\n * Font Variant Numeric\r\n * @see https://tailwindcss.com/docs/font-variant-numeric\r\n */\r\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\r\n /**\r\n * Letter Spacing\r\n * @see https://tailwindcss.com/docs/letter-spacing\r\n */\r\n tracking: [{\r\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\r\n }],\r\n /**\r\n * Line Clamp\r\n * @see https://tailwindcss.com/docs/line-clamp\r\n */\r\n 'line-clamp': [{\r\n 'line-clamp': ['none', isNumber, isArbitraryNumber]\r\n }],\r\n /**\r\n * Line Height\r\n * @see https://tailwindcss.com/docs/line-height\r\n */\r\n leading: [{\r\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isLength, isArbitraryValue]\r\n }],\r\n /**\r\n * List Style Image\r\n * @see https://tailwindcss.com/docs/list-style-image\r\n */\r\n 'list-image': [{\r\n 'list-image': ['none', isArbitraryValue]\r\n }],\r\n /**\r\n * List Style Type\r\n * @see https://tailwindcss.com/docs/list-style-type\r\n */\r\n 'list-style-type': [{\r\n list: ['none', 'disc', 'decimal', isArbitraryValue]\r\n }],\r\n /**\r\n * List Style Position\r\n * @see https://tailwindcss.com/docs/list-style-position\r\n */\r\n 'list-style-position': [{\r\n list: ['inside', 'outside']\r\n }],\r\n /**\r\n * Placeholder Color\r\n * @deprecated since Tailwind CSS v3.0.0\r\n * @see https://tailwindcss.com/docs/placeholder-color\r\n */\r\n 'placeholder-color': [{\r\n placeholder: [colors]\r\n }],\r\n /**\r\n * Placeholder Opacity\r\n * @see https://tailwindcss.com/docs/placeholder-opacity\r\n */\r\n 'placeholder-opacity': [{\r\n 'placeholder-opacity': [opacity]\r\n }],\r\n /**\r\n * Text Alignment\r\n * @see https://tailwindcss.com/docs/text-align\r\n */\r\n 'text-alignment': [{\r\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\r\n }],\r\n /**\r\n * Text Color\r\n * @see https://tailwindcss.com/docs/text-color\r\n */\r\n 'text-color': [{\r\n text: [colors]\r\n }],\r\n /**\r\n * Text Opacity\r\n * @see https://tailwindcss.com/docs/text-opacity\r\n */\r\n 'text-opacity': [{\r\n 'text-opacity': [opacity]\r\n }],\r\n /**\r\n * Text Decoration\r\n * @see https://tailwindcss.com/docs/text-decoration\r\n */\r\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\r\n /**\r\n * Text Decoration Style\r\n * @see https://tailwindcss.com/docs/text-decoration-style\r\n */\r\n 'text-decoration-style': [{\r\n decoration: [...getLineStyles(), 'wavy']\r\n }],\r\n /**\r\n * Text Decoration Thickness\r\n * @see https://tailwindcss.com/docs/text-decoration-thickness\r\n */\r\n 'text-decoration-thickness': [{\r\n decoration: ['auto', 'from-font', isLength, isArbitraryLength]\r\n }],\r\n /**\r\n * Text Underline Offset\r\n * @see https://tailwindcss.com/docs/text-underline-offset\r\n */\r\n 'underline-offset': [{\r\n 'underline-offset': ['auto', isLength, isArbitraryValue]\r\n }],\r\n /**\r\n * Text Decoration Color\r\n * @see https://tailwindcss.com/docs/text-decoration-color\r\n */\r\n 'text-decoration-color': [{\r\n decoration: [colors]\r\n }],\r\n /**\r\n * Text Transform\r\n * @see https://tailwindcss.com/docs/text-transform\r\n */\r\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\r\n /**\r\n * Text Overflow\r\n * @see https://tailwindcss.com/docs/text-overflow\r\n */\r\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\r\n /**\r\n * Text Wrap\r\n * @see https://tailwindcss.com/docs/text-wrap\r\n */\r\n 'text-wrap': [{\r\n text: ['wrap', 'nowrap', 'balance', 'pretty']\r\n }],\r\n /**\r\n * Text Indent\r\n * @see https://tailwindcss.com/docs/text-indent\r\n */\r\n indent: [{\r\n indent: getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Vertical Alignment\r\n * @see https://tailwindcss.com/docs/vertical-align\r\n */\r\n 'vertical-align': [{\r\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\r\n }],\r\n /**\r\n * Whitespace\r\n * @see https://tailwindcss.com/docs/whitespace\r\n */\r\n whitespace: [{\r\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\r\n }],\r\n /**\r\n * Word Break\r\n * @see https://tailwindcss.com/docs/word-break\r\n */\r\n break: [{\r\n break: ['normal', 'words', 'all', 'keep']\r\n }],\r\n /**\r\n * Hyphens\r\n * @see https://tailwindcss.com/docs/hyphens\r\n */\r\n hyphens: [{\r\n hyphens: ['none', 'manual', 'auto']\r\n }],\r\n /**\r\n * Content\r\n * @see https://tailwindcss.com/docs/content\r\n */\r\n content: [{\r\n content: ['none', isArbitraryValue]\r\n }],\r\n // Backgrounds\r\n /**\r\n * Background Attachment\r\n * @see https://tailwindcss.com/docs/background-attachment\r\n */\r\n 'bg-attachment': [{\r\n bg: ['fixed', 'local', 'scroll']\r\n }],\r\n /**\r\n * Background Clip\r\n * @see https://tailwindcss.com/docs/background-clip\r\n */\r\n 'bg-clip': [{\r\n 'bg-clip': ['border', 'padding', 'content', 'text']\r\n }],\r\n /**\r\n * Background Opacity\r\n * @deprecated since Tailwind CSS v3.0.0\r\n * @see https://tailwindcss.com/docs/background-opacity\r\n */\r\n 'bg-opacity': [{\r\n 'bg-opacity': [opacity]\r\n }],\r\n /**\r\n * Background Origin\r\n * @see https://tailwindcss.com/docs/background-origin\r\n */\r\n 'bg-origin': [{\r\n 'bg-origin': ['border', 'padding', 'content']\r\n }],\r\n /**\r\n * Background Position\r\n * @see https://tailwindcss.com/docs/background-position\r\n */\r\n 'bg-position': [{\r\n bg: [...getPositions(), isArbitraryPosition]\r\n }],\r\n /**\r\n * Background Repeat\r\n * @see https://tailwindcss.com/docs/background-repeat\r\n */\r\n 'bg-repeat': [{\r\n bg: ['no-repeat', {\r\n repeat: ['', 'x', 'y', 'round', 'space']\r\n }]\r\n }],\r\n /**\r\n * Background Size\r\n * @see https://tailwindcss.com/docs/background-size\r\n */\r\n 'bg-size': [{\r\n bg: ['auto', 'cover', 'contain', isArbitrarySize]\r\n }],\r\n /**\r\n * Background Image\r\n * @see https://tailwindcss.com/docs/background-image\r\n */\r\n 'bg-image': [{\r\n bg: ['none', {\r\n 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\r\n }, isArbitraryImage]\r\n }],\r\n /**\r\n * Background Color\r\n * @see https://tailwindcss.com/docs/background-color\r\n */\r\n 'bg-color': [{\r\n bg: [colors]\r\n }],\r\n /**\r\n * Gradient Color Stops From Position\r\n * @see https://tailwindcss.com/docs/gradient-color-stops\r\n */\r\n 'gradient-from-pos': [{\r\n from: [gradientColorStopPositions]\r\n }],\r\n /**\r\n * Gradient Color Stops Via Position\r\n * @see https://tailwindcss.com/docs/gradient-color-stops\r\n */\r\n 'gradient-via-pos': [{\r\n via: [gradientColorStopPositions]\r\n }],\r\n /**\r\n * Gradient Color Stops To Position\r\n * @see https://tailwindcss.com/docs/gradient-color-stops\r\n */\r\n 'gradient-to-pos': [{\r\n to: [gradientColorStopPositions]\r\n }],\r\n /**\r\n * Gradient Color Stops From\r\n * @see https://tailwindcss.com/docs/gradient-color-stops\r\n */\r\n 'gradient-from': [{\r\n from: [gradientColorStops]\r\n }],\r\n /**\r\n * Gradient Color Stops Via\r\n * @see https://tailwindcss.com/docs/gradient-color-stops\r\n */\r\n 'gradient-via': [{\r\n via: [gradientColorStops]\r\n }],\r\n /**\r\n * Gradient Color Stops To\r\n * @see https://tailwindcss.com/docs/gradient-color-stops\r\n */\r\n 'gradient-to': [{\r\n to: [gradientColorStops]\r\n }],\r\n // Borders\r\n /**\r\n * Border Radius\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n rounded: [{\r\n rounded: [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Start\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-s': [{\r\n 'rounded-s': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius End\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-e': [{\r\n 'rounded-e': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Top\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-t': [{\r\n 'rounded-t': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Right\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-r': [{\r\n 'rounded-r': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Bottom\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-b': [{\r\n 'rounded-b': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Left\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-l': [{\r\n 'rounded-l': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Start Start\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-ss': [{\r\n 'rounded-ss': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Start End\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-se': [{\r\n 'rounded-se': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius End End\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-ee': [{\r\n 'rounded-ee': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius End Start\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-es': [{\r\n 'rounded-es': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Top Left\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-tl': [{\r\n 'rounded-tl': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Top Right\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-tr': [{\r\n 'rounded-tr': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Bottom Right\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-br': [{\r\n 'rounded-br': [borderRadius]\r\n }],\r\n /**\r\n * Border Radius Bottom Left\r\n * @see https://tailwindcss.com/docs/border-radius\r\n */\r\n 'rounded-bl': [{\r\n 'rounded-bl': [borderRadius]\r\n }],\r\n /**\r\n * Border Width\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w': [{\r\n border: [borderWidth]\r\n }],\r\n /**\r\n * Border Width X\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-x': [{\r\n 'border-x': [borderWidth]\r\n }],\r\n /**\r\n * Border Width Y\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-y': [{\r\n 'border-y': [borderWidth]\r\n }],\r\n /**\r\n * Border Width Start\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-s': [{\r\n 'border-s': [borderWidth]\r\n }],\r\n /**\r\n * Border Width End\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-e': [{\r\n 'border-e': [borderWidth]\r\n }],\r\n /**\r\n * Border Width Top\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-t': [{\r\n 'border-t': [borderWidth]\r\n }],\r\n /**\r\n * Border Width Right\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-r': [{\r\n 'border-r': [borderWidth]\r\n }],\r\n /**\r\n * Border Width Bottom\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-b': [{\r\n 'border-b': [borderWidth]\r\n }],\r\n /**\r\n * Border Width Left\r\n * @see https://tailwindcss.com/docs/border-width\r\n */\r\n 'border-w-l': [{\r\n 'border-l': [borderWidth]\r\n }],\r\n /**\r\n * Border Opacity\r\n * @see https://tailwindcss.com/docs/border-opacity\r\n */\r\n 'border-opacity': [{\r\n 'border-opacity': [opacity]\r\n }],\r\n /**\r\n * Border Style\r\n * @see https://tailwindcss.com/docs/border-style\r\n */\r\n 'border-style': [{\r\n border: [...getLineStyles(), 'hidden']\r\n }],\r\n /**\r\n * Divide Width X\r\n * @see https://tailwindcss.com/docs/divide-width\r\n */\r\n 'divide-x': [{\r\n 'divide-x': [borderWidth]\r\n }],\r\n /**\r\n * Divide Width X Reverse\r\n * @see https://tailwindcss.com/docs/divide-width\r\n */\r\n 'divide-x-reverse': ['divide-x-reverse'],\r\n /**\r\n * Divide Width Y\r\n * @see https://tailwindcss.com/docs/divide-width\r\n */\r\n 'divide-y': [{\r\n 'divide-y': [borderWidth]\r\n }],\r\n /**\r\n * Divide Width Y Reverse\r\n * @see https://tailwindcss.com/docs/divide-width\r\n */\r\n 'divide-y-reverse': ['divide-y-reverse'],\r\n /**\r\n * Divide Opacity\r\n * @see https://tailwindcss.com/docs/divide-opacity\r\n */\r\n 'divide-opacity': [{\r\n 'divide-opacity': [opacity]\r\n }],\r\n /**\r\n * Divide Style\r\n * @see https://tailwindcss.com/docs/divide-style\r\n */\r\n 'divide-style': [{\r\n divide: getLineStyles()\r\n }],\r\n /**\r\n * Border Color\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color': [{\r\n border: [borderColor]\r\n }],\r\n /**\r\n * Border Color X\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-x': [{\r\n 'border-x': [borderColor]\r\n }],\r\n /**\r\n * Border Color Y\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-y': [{\r\n 'border-y': [borderColor]\r\n }],\r\n /**\r\n * Border Color S\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-s': [{\r\n 'border-s': [borderColor]\r\n }],\r\n /**\r\n * Border Color E\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-e': [{\r\n 'border-e': [borderColor]\r\n }],\r\n /**\r\n * Border Color Top\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-t': [{\r\n 'border-t': [borderColor]\r\n }],\r\n /**\r\n * Border Color Right\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-r': [{\r\n 'border-r': [borderColor]\r\n }],\r\n /**\r\n * Border Color Bottom\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-b': [{\r\n 'border-b': [borderColor]\r\n }],\r\n /**\r\n * Border Color Left\r\n * @see https://tailwindcss.com/docs/border-color\r\n */\r\n 'border-color-l': [{\r\n 'border-l': [borderColor]\r\n }],\r\n /**\r\n * Divide Color\r\n * @see https://tailwindcss.com/docs/divide-color\r\n */\r\n 'divide-color': [{\r\n divide: [borderColor]\r\n }],\r\n /**\r\n * Outline Style\r\n * @see https://tailwindcss.com/docs/outline-style\r\n */\r\n 'outline-style': [{\r\n outline: ['', ...getLineStyles()]\r\n }],\r\n /**\r\n * Outline Offset\r\n * @see https://tailwindcss.com/docs/outline-offset\r\n */\r\n 'outline-offset': [{\r\n 'outline-offset': [isLength, isArbitraryValue]\r\n }],\r\n /**\r\n * Outline Width\r\n * @see https://tailwindcss.com/docs/outline-width\r\n */\r\n 'outline-w': [{\r\n outline: [isLength, isArbitraryLength]\r\n }],\r\n /**\r\n * Outline Color\r\n * @see https://tailwindcss.com/docs/outline-color\r\n */\r\n 'outline-color': [{\r\n outline: [colors]\r\n }],\r\n /**\r\n * Ring Width\r\n * @see https://tailwindcss.com/docs/ring-width\r\n */\r\n 'ring-w': [{\r\n ring: getLengthWithEmptyAndArbitrary()\r\n }],\r\n /**\r\n * Ring Width Inset\r\n * @see https://tailwindcss.com/docs/ring-width\r\n */\r\n 'ring-w-inset': ['ring-inset'],\r\n /**\r\n * Ring Color\r\n * @see https://tailwindcss.com/docs/ring-color\r\n */\r\n 'ring-color': [{\r\n ring: [colors]\r\n }],\r\n /**\r\n * Ring Opacity\r\n * @see https://tailwindcss.com/docs/ring-opacity\r\n */\r\n 'ring-opacity': [{\r\n 'ring-opacity': [opacity]\r\n }],\r\n /**\r\n * Ring Offset Width\r\n * @see https://tailwindcss.com/docs/ring-offset-width\r\n */\r\n 'ring-offset-w': [{\r\n 'ring-offset': [isLength, isArbitraryLength]\r\n }],\r\n /**\r\n * Ring Offset Color\r\n * @see https://tailwindcss.com/docs/ring-offset-color\r\n */\r\n 'ring-offset-color': [{\r\n 'ring-offset': [colors]\r\n }],\r\n // Effects\r\n /**\r\n * Box Shadow\r\n * @see https://tailwindcss.com/docs/box-shadow\r\n */\r\n shadow: [{\r\n shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\r\n }],\r\n /**\r\n * Box Shadow Color\r\n * @see https://tailwindcss.com/docs/box-shadow-color\r\n */\r\n 'shadow-color': [{\r\n shadow: [isAny]\r\n }],\r\n /**\r\n * Opacity\r\n * @see https://tailwindcss.com/docs/opacity\r\n */\r\n opacity: [{\r\n opacity: [opacity]\r\n }],\r\n /**\r\n * Mix Blend Mode\r\n * @see https://tailwindcss.com/docs/mix-blend-mode\r\n */\r\n 'mix-blend': [{\r\n 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker']\r\n }],\r\n /**\r\n * Background Blend Mode\r\n * @see https://tailwindcss.com/docs/background-blend-mode\r\n */\r\n 'bg-blend': [{\r\n 'bg-blend': getBlendModes()\r\n }],\r\n // Filters\r\n /**\r\n * Filter\r\n * @deprecated since Tailwind CSS v3.0.0\r\n * @see https://tailwindcss.com/docs/filter\r\n */\r\n filter: [{\r\n filter: ['', 'none']\r\n }],\r\n /**\r\n * Blur\r\n * @see https://tailwindcss.com/docs/blur\r\n */\r\n blur: [{\r\n blur: [blur]\r\n }],\r\n /**\r\n * Brightness\r\n * @see https://tailwindcss.com/docs/brightness\r\n */\r\n brightness: [{\r\n brightness: [brightness]\r\n }],\r\n /**\r\n * Contrast\r\n * @see https://tailwindcss.com/docs/contrast\r\n */\r\n contrast: [{\r\n contrast: [contrast]\r\n }],\r\n /**\r\n * Drop Shadow\r\n * @see https://tailwindcss.com/docs/drop-shadow\r\n */\r\n 'drop-shadow': [{\r\n 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\r\n }],\r\n /**\r\n * Grayscale\r\n * @see https://tailwindcss.com/docs/grayscale\r\n */\r\n grayscale: [{\r\n grayscale: [grayscale]\r\n }],\r\n /**\r\n * Hue Rotate\r\n * @see https://tailwindcss.com/docs/hue-rotate\r\n */\r\n 'hue-rotate': [{\r\n 'hue-rotate': [hueRotate]\r\n }],\r\n /**\r\n * Invert\r\n * @see https://tailwindcss.com/docs/invert\r\n */\r\n invert: [{\r\n invert: [invert]\r\n }],\r\n /**\r\n * Saturate\r\n * @see https://tailwindcss.com/docs/saturate\r\n */\r\n saturate: [{\r\n saturate: [saturate]\r\n }],\r\n /**\r\n * Sepia\r\n * @see https://tailwindcss.com/docs/sepia\r\n */\r\n sepia: [{\r\n sepia: [sepia]\r\n }],\r\n /**\r\n * Backdrop Filter\r\n * @deprecated since Tailwind CSS v3.0.0\r\n * @see https://tailwindcss.com/docs/backdrop-filter\r\n */\r\n 'backdrop-filter': [{\r\n 'backdrop-filter': ['', 'none']\r\n }],\r\n /**\r\n * Backdrop Blur\r\n * @see https://tailwindcss.com/docs/backdrop-blur\r\n */\r\n 'backdrop-blur': [{\r\n 'backdrop-blur': [blur]\r\n }],\r\n /**\r\n * Backdrop Brightness\r\n * @see https://tailwindcss.com/docs/backdrop-brightness\r\n */\r\n 'backdrop-brightness': [{\r\n 'backdrop-brightness': [brightness]\r\n }],\r\n /**\r\n * Backdrop Contrast\r\n * @see https://tailwindcss.com/docs/backdrop-contrast\r\n */\r\n 'backdrop-contrast': [{\r\n 'backdrop-contrast': [contrast]\r\n }],\r\n /**\r\n * Backdrop Grayscale\r\n * @see https://tailwindcss.com/docs/backdrop-grayscale\r\n */\r\n 'backdrop-grayscale': [{\r\n 'backdrop-grayscale': [grayscale]\r\n }],\r\n /**\r\n * Backdrop Hue Rotate\r\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\r\n */\r\n 'backdrop-hue-rotate': [{\r\n 'backdrop-hue-rotate': [hueRotate]\r\n }],\r\n /**\r\n * Backdrop Invert\r\n * @see https://tailwindcss.com/docs/backdrop-invert\r\n */\r\n 'backdrop-invert': [{\r\n 'backdrop-invert': [invert]\r\n }],\r\n /**\r\n * Backdrop Opacity\r\n * @see https://tailwindcss.com/docs/backdrop-opacity\r\n */\r\n 'backdrop-opacity': [{\r\n 'backdrop-opacity': [opacity]\r\n }],\r\n /**\r\n * Backdrop Saturate\r\n * @see https://tailwindcss.com/docs/backdrop-saturate\r\n */\r\n 'backdrop-saturate': [{\r\n 'backdrop-saturate': [saturate]\r\n }],\r\n /**\r\n * Backdrop Sepia\r\n * @see https://tailwindcss.com/docs/backdrop-sepia\r\n */\r\n 'backdrop-sepia': [{\r\n 'backdrop-sepia': [sepia]\r\n }],\r\n // Tables\r\n /**\r\n * Border Collapse\r\n * @see https://tailwindcss.com/docs/border-collapse\r\n */\r\n 'border-collapse': [{\r\n border: ['collapse', 'separate']\r\n }],\r\n /**\r\n * Border Spacing\r\n * @see https://tailwindcss.com/docs/border-spacing\r\n */\r\n 'border-spacing': [{\r\n 'border-spacing': [borderSpacing]\r\n }],\r\n /**\r\n * Border Spacing X\r\n * @see https://tailwindcss.com/docs/border-spacing\r\n */\r\n 'border-spacing-x': [{\r\n 'border-spacing-x': [borderSpacing]\r\n }],\r\n /**\r\n * Border Spacing Y\r\n * @see https://tailwindcss.com/docs/border-spacing\r\n */\r\n 'border-spacing-y': [{\r\n 'border-spacing-y': [borderSpacing]\r\n }],\r\n /**\r\n * Table Layout\r\n * @see https://tailwindcss.com/docs/table-layout\r\n */\r\n 'table-layout': [{\r\n table: ['auto', 'fixed']\r\n }],\r\n /**\r\n * Caption Side\r\n * @see https://tailwindcss.com/docs/caption-side\r\n */\r\n caption: [{\r\n caption: ['top', 'bottom']\r\n }],\r\n // Transitions and Animation\r\n /**\r\n * Tranisition Property\r\n * @see https://tailwindcss.com/docs/transition-property\r\n */\r\n transition: [{\r\n transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\r\n }],\r\n /**\r\n * Transition Duration\r\n * @see https://tailwindcss.com/docs/transition-duration\r\n */\r\n duration: [{\r\n duration: getNumberAndArbitrary()\r\n }],\r\n /**\r\n * Transition Timing Function\r\n * @see https://tailwindcss.com/docs/transition-timing-function\r\n */\r\n ease: [{\r\n ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\r\n }],\r\n /**\r\n * Transition Delay\r\n * @see https://tailwindcss.com/docs/transition-delay\r\n */\r\n delay: [{\r\n delay: getNumberAndArbitrary()\r\n }],\r\n /**\r\n * Animation\r\n * @see https://tailwindcss.com/docs/animation\r\n */\r\n animate: [{\r\n animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\r\n }],\r\n // Transforms\r\n /**\r\n * Transform\r\n * @see https://tailwindcss.com/docs/transform\r\n */\r\n transform: [{\r\n transform: ['', 'gpu', 'none']\r\n }],\r\n /**\r\n * Scale\r\n * @see https://tailwindcss.com/docs/scale\r\n */\r\n scale: [{\r\n scale: [scale]\r\n }],\r\n /**\r\n * Scale X\r\n * @see https://tailwindcss.com/docs/scale\r\n */\r\n 'scale-x': [{\r\n 'scale-x': [scale]\r\n }],\r\n /**\r\n * Scale Y\r\n * @see https://tailwindcss.com/docs/scale\r\n */\r\n 'scale-y': [{\r\n 'scale-y': [scale]\r\n }],\r\n /**\r\n * Rotate\r\n * @see https://tailwindcss.com/docs/rotate\r\n */\r\n rotate: [{\r\n rotate: [isInteger, isArbitraryValue]\r\n }],\r\n /**\r\n * Translate X\r\n * @see https://tailwindcss.com/docs/translate\r\n */\r\n 'translate-x': [{\r\n 'translate-x': [translate]\r\n }],\r\n /**\r\n * Translate Y\r\n * @see https://tailwindcss.com/docs/translate\r\n */\r\n 'translate-y': [{\r\n 'translate-y': [translate]\r\n }],\r\n /**\r\n * Skew X\r\n * @see https://tailwindcss.com/docs/skew\r\n */\r\n 'skew-x': [{\r\n 'skew-x': [skew]\r\n }],\r\n /**\r\n * Skew Y\r\n * @see https://tailwindcss.com/docs/skew\r\n */\r\n 'skew-y': [{\r\n 'skew-y': [skew]\r\n }],\r\n /**\r\n * Transform Origin\r\n * @see https://tailwindcss.com/docs/transform-origin\r\n */\r\n 'transform-origin': [{\r\n origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\r\n }],\r\n // Interactivity\r\n /**\r\n * Accent Color\r\n * @see https://tailwindcss.com/docs/accent-color\r\n */\r\n accent: [{\r\n accent: ['auto', colors]\r\n }],\r\n /**\r\n * Appearance\r\n * @see https://tailwindcss.com/docs/appearance\r\n */\r\n appearance: [{\r\n appearance: ['none', 'auto']\r\n }],\r\n /**\r\n * Cursor\r\n * @see https://tailwindcss.com/docs/cursor\r\n */\r\n cursor: [{\r\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\r\n }],\r\n /**\r\n * Caret Color\r\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\r\n */\r\n 'caret-color': [{\r\n caret: [colors]\r\n }],\r\n /**\r\n * Pointer Events\r\n * @see https://tailwindcss.com/docs/pointer-events\r\n */\r\n 'pointer-events': [{\r\n 'pointer-events': ['none', 'auto']\r\n }],\r\n /**\r\n * Resize\r\n * @see https://tailwindcss.com/docs/resize\r\n */\r\n resize: [{\r\n resize: ['none', 'y', 'x', '']\r\n }],\r\n /**\r\n * Scroll Behavior\r\n * @see https://tailwindcss.com/docs/scroll-behavior\r\n */\r\n 'scroll-behavior': [{\r\n scroll: ['auto', 'smooth']\r\n }],\r\n /**\r\n * Scroll Margin\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-m': [{\r\n 'scroll-m': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin X\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-mx': [{\r\n 'scroll-mx': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin Y\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-my': [{\r\n 'scroll-my': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin Start\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-ms': [{\r\n 'scroll-ms': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin End\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-me': [{\r\n 'scroll-me': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin Top\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-mt': [{\r\n 'scroll-mt': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin Right\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-mr': [{\r\n 'scroll-mr': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin Bottom\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-mb': [{\r\n 'scroll-mb': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Margin Left\r\n * @see https://tailwindcss.com/docs/scroll-margin\r\n */\r\n 'scroll-ml': [{\r\n 'scroll-ml': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-p': [{\r\n 'scroll-p': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding X\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-px': [{\r\n 'scroll-px': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding Y\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-py': [{\r\n 'scroll-py': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding Start\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-ps': [{\r\n 'scroll-ps': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding End\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-pe': [{\r\n 'scroll-pe': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding Top\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-pt': [{\r\n 'scroll-pt': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding Right\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-pr': [{\r\n 'scroll-pr': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding Bottom\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-pb': [{\r\n 'scroll-pb': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Padding Left\r\n * @see https://tailwindcss.com/docs/scroll-padding\r\n */\r\n 'scroll-pl': [{\r\n 'scroll-pl': getSpacingWithArbitrary()\r\n }],\r\n /**\r\n * Scroll Snap Align\r\n * @see https://tailwindcss.com/docs/scroll-snap-align\r\n */\r\n 'snap-align': [{\r\n snap: ['start', 'end', 'center', 'align-none']\r\n }],\r\n /**\r\n * Scroll Snap Stop\r\n * @see https://tailwindcss.com/docs/scroll-snap-stop\r\n */\r\n 'snap-stop': [{\r\n snap: ['normal', 'always']\r\n }],\r\n /**\r\n * Scroll Snap Type\r\n * @see https://tailwindcss.com/docs/scroll-snap-type\r\n */\r\n 'snap-type': [{\r\n snap: ['none', 'x', 'y', 'both']\r\n }],\r\n /**\r\n * Scroll Snap Type Strictness\r\n * @see https://tailwindcss.com/docs/scroll-snap-type\r\n */\r\n 'snap-strictness': [{\r\n snap: ['mandatory', 'proximity']\r\n }],\r\n /**\r\n * Touch Action\r\n * @see https://tailwindcss.com/docs/touch-action\r\n */\r\n touch: [{\r\n touch: ['auto', 'none', 'manipulation']\r\n }],\r\n /**\r\n * Touch Action X\r\n * @see https://tailwindcss.com/docs/touch-action\r\n */\r\n 'touch-x': [{\r\n 'touch-pan': ['x', 'left', 'right']\r\n }],\r\n /**\r\n * Touch Action Y\r\n * @see https://tailwindcss.com/docs/touch-action\r\n */\r\n 'touch-y': [{\r\n 'touch-pan': ['y', 'up', 'down']\r\n }],\r\n /**\r\n * Touch Action Pinch Zoom\r\n * @see https://tailwindcss.com/docs/touch-action\r\n */\r\n 'touch-pz': ['touch-pinch-zoom'],\r\n /**\r\n * User Select\r\n * @see https://tailwindcss.com/docs/user-select\r\n */\r\n select: [{\r\n select: ['none', 'text', 'all', 'auto']\r\n }],\r\n /**\r\n * Will Change\r\n * @see https://tailwindcss.com/docs/will-change\r\n */\r\n 'will-change': [{\r\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\r\n }],\r\n // SVG\r\n /**\r\n * Fill\r\n * @see https://tailwindcss.com/docs/fill\r\n */\r\n fill: [{\r\n fill: [colors, 'none']\r\n }],\r\n /**\r\n * Stroke Width\r\n * @see https://tailwindcss.com/docs/stroke-width\r\n */\r\n 'stroke-w': [{\r\n stroke: [isLength, isArbitraryLength, isArbitraryNumber]\r\n }],\r\n /**\r\n * Stroke\r\n * @see https://tailwindcss.com/docs/stroke\r\n */\r\n stroke: [{\r\n stroke: [colors, 'none']\r\n }],\r\n // Accessibility\r\n /**\r\n * Screen Readers\r\n * @see https://tailwindcss.com/docs/screen-readers\r\n */\r\n sr: ['sr-only', 'not-sr-only'],\r\n /**\r\n * Forced Color Adjust\r\n * @see https://tailwindcss.com/docs/forced-color-adjust\r\n */\r\n 'forced-color-adjust': [{\r\n 'forced-color-adjust': ['auto', 'none']\r\n }]\r\n },\r\n conflictingClassGroups: {\r\n overflow: ['overflow-x', 'overflow-y'],\r\n overscroll: ['overscroll-x', 'overscroll-y'],\r\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\r\n 'inset-x': ['right', 'left'],\r\n 'inset-y': ['top', 'bottom'],\r\n flex: ['basis', 'grow', 'shrink'],\r\n gap: ['gap-x', 'gap-y'],\r\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\r\n px: ['pr', 'pl'],\r\n py: ['pt', 'pb'],\r\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\r\n mx: ['mr', 'ml'],\r\n my: ['mt', 'mb'],\r\n size: ['w', 'h'],\r\n 'font-size': ['leading'],\r\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\r\n 'fvn-ordinal': ['fvn-normal'],\r\n 'fvn-slashed-zero': ['fvn-normal'],\r\n 'fvn-figure': ['fvn-normal'],\r\n 'fvn-spacing': ['fvn-normal'],\r\n 'fvn-fraction': ['fvn-normal'],\r\n 'line-clamp': ['display', 'overflow'],\r\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\r\n 'rounded-s': ['rounded-ss', 'rounded-es'],\r\n 'rounded-e': ['rounded-se', 'rounded-ee'],\r\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\r\n 'rounded-r': ['rounded-tr', 'rounded-br'],\r\n 'rounded-b': ['rounded-br', 'rounded-bl'],\r\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\r\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\r\n 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\r\n 'border-w-x': ['border-w-r', 'border-w-l'],\r\n 'border-w-y': ['border-w-t', 'border-w-b'],\r\n 'border-color': ['border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\r\n 'border-color-x': ['border-color-r', 'border-color-l'],\r\n 'border-color-y': ['border-color-t', 'border-color-b'],\r\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\r\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\r\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\r\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\r\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\r\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\r\n touch: ['touch-x', 'touch-y', 'touch-pz'],\r\n 'touch-x': ['touch'],\r\n 'touch-y': ['touch'],\r\n 'touch-pz': ['touch']\r\n },\r\n conflictingClassGroupModifiers: {\r\n 'font-size': ['leading']\r\n }\r\n };\r\n};\r\n\r\n/**\r\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\r\n * @param configExtension Partial config to merge into the `baseConfig`.\r\n */\r\nconst mergeConfigs = (baseConfig, {\r\n cacheSize,\r\n prefix,\r\n separator,\r\n experimentalParseClassName,\r\n extend = {},\r\n override = {}\r\n}) => {\r\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\r\n overrideProperty(baseConfig, 'prefix', prefix);\r\n overrideProperty(baseConfig, 'separator', separator);\r\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\r\n for (const configKey in override) {\r\n overrideConfigProperties(baseConfig[configKey], override[configKey]);\r\n }\r\n for (const key in extend) {\r\n mergeConfigProperties(baseConfig[key], extend[key]);\r\n }\r\n return baseConfig;\r\n};\r\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\r\n if (overrideValue !== undefined) {\r\n baseObject[overrideKey] = overrideValue;\r\n }\r\n};\r\nconst overrideConfigProperties = (baseObject, overrideObject) => {\r\n if (overrideObject) {\r\n for (const key in overrideObject) {\r\n overrideProperty(baseObject, key, overrideObject[key]);\r\n }\r\n }\r\n};\r\nconst mergeConfigProperties = (baseObject, mergeObject) => {\r\n if (mergeObject) {\r\n for (const key in mergeObject) {\r\n const mergeValue = mergeObject[key];\r\n if (mergeValue !== undefined) {\r\n baseObject[key] = (baseObject[key] || []).concat(mergeValue);\r\n }\r\n }\r\n }\r\n};\r\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\r\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\r\n\r\n//# sourceMappingURL=bundle-mjs.mjs.map\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy90YWlsd2luZC1tZXJnZS9kaXN0L2J1bmRsZS1tanMubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDBCQUEwQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0EsT0FBTyxtQkFBbUIsa0JBQWtCLGFBQWE7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsWUFBWTtBQUN0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsMkJBQTJCO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnQkFBZ0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDNEg7QUFDNUgiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9fTl9FLy4vbm9kZV9tb2R1bGVzL3RhaWx3aW5kLW1lcmdlL2Rpc3QvYnVuZGxlLW1qcy5tanM/ZDA1MSJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBDTEFTU19QQVJUX1NFUEFSQVRPUiA9ICctJztcclxuY29uc3QgY3JlYXRlQ2xhc3NHcm91cFV0aWxzID0gY29uZmlnID0+IHtcclxuICBjb25zdCBjbGFzc01hcCA9IGNyZWF0ZUNsYXNzTWFwKGNvbmZpZyk7XHJcbiAgY29uc3Qge1xyXG4gICAgY29uZmxpY3RpbmdDbGFzc0dyb3VwcyxcclxuICAgIGNvbmZsaWN0aW5nQ2xhc3NHcm91cE1vZGlmaWVyc1xyXG4gIH0gPSBjb25maWc7XHJcbiAgY29uc3QgZ2V0Q2xhc3NHcm91cElkID0gY2xhc3NOYW1lID0+IHtcclxuICAgIGNvbnN0IGNsYXNzUGFydHMgPSBjbGFzc05hbWUuc3BsaXQoQ0xBU1NfUEFSVF9TRVBBUkFUT1IpO1xyXG4gICAgLy8gQ2xhc3NlcyBsaWtlIGAtaW5zZXQtMWAgcHJvZHVjZSBhbiBlbXB0eSBzdHJpbmcgYXMgZmlyc3QgY2xhc3NQYXJ0LiBXZSBhc3N1bWUgdGhhdCBjbGFzc2VzIGZvciBuZWdhdGl2ZSB2YWx1ZXMgYXJlIHVzZWQgY29ycmVjdGx5IGFuZCByZW1vdmUgaXQgZnJvbSBjbGFzc1BhcnRzLlxyXG4gICAgaWYgKGNsYXNzUGFydHNbMF0gPT09ICcnICYmIGNsYXNzUGFydHMubGVuZ3RoICE9PSAxKSB7XHJcbiAgICAgIGNsYXNzUGFydHMuc2hpZnQoKTtcclxuICAgIH1cclxuICAgIHJldHVybiBnZXRHcm91cFJlY3Vyc2l2ZShjbGFzc1BhcnRzLCBjbGFzc01hcCkgfHwgZ2V0R3JvdXBJZEZvckFyYml0cmFyeVByb3BlcnR5KGNsYXNzTmFtZSk7XHJcbiAgfTtcclxuICBjb25zdCBnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHMgPSAoY2xhc3NHcm91cElkLCBoYXNQb3N0Zml4TW9kaWZpZXIpID0+IHtcclxuICAgIGNvbnN0IGNvbmZsaWN0cyA9IGNvbmZsaWN0aW5nQ2xhc3NHcm91cHNbY2xhc3NHcm91cElkXSB8fCBbXTtcclxuICAgIGlmIChoYXNQb3N0Zml4TW9kaWZpZXIgJiYgY29uZmxpY3RpbmdDbGFzc0dyb3VwTW9kaWZpZXJzW2NsYXNzR3JvdXBJZF0pIHtcclxuICAgICAgcmV0dXJuIFsuLi5jb25mbGljdHMsIC4uLmNvbmZsaWN0aW5nQ2xhc3NHcm91cE1vZGlmaWVyc1tjbGFzc0dyb3VwSWRdXTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb25mbGljdHM7XHJcbiAgfTtcclxuICByZXR1cm4ge1xyXG4gICAgZ2V0Q2xhc3NHcm91cElkLFxyXG4gICAgZ2V0Q29uZmxpY3RpbmdDbGFzc0dyb3VwSWRzXHJcbiAgfTtcclxufTtcclxuY29uc3QgZ2V0R3JvdXBSZWN1cnNpdmUgPSAoY2xhc3NQYXJ0cywgY2xhc3NQYXJ0T2JqZWN0KSA9PiB7XHJcbiAgaWYgKGNsYXNzUGFydHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICByZXR1cm4gY2xhc3NQYXJ0T2JqZWN0LmNsYXNzR3JvdXBJZDtcclxuICB9XHJcbiAgY29uc3QgY3VycmVudENsYXNzUGFydCA9IGNsYXNzUGFydHNbMF07XHJcbiAgY29uc3QgbmV4dENsYXNzUGFydE9iamVjdCA9IGNsYXNzUGFydE9iamVjdC5uZXh0UGFydC5nZXQoY3VycmVudENsYXNzUGFydCk7XHJcbiAgY29uc3QgY2xhc3NHcm91cEZyb21OZXh0Q2xhc3NQYXJ0ID0gbmV4dENsYXNzUGFydE9iamVjdCA/IGdldEdyb3VwUmVjdXJzaXZlKGNsYXNzUGFydHMuc2xpY2UoMSksIG5leHRDbGFzc1BhcnRPYmplY3QpIDogdW5kZWZpbmVkO1xyXG4gIGlmIChjbGFzc0dyb3VwRnJvbU5leHRDbGFzc1BhcnQpIHtcclxuICAgIHJldHVybiBjbGFzc0dyb3VwRnJvbU5leHRDbGFzc1BhcnQ7XHJcbiAgfVxyXG4gIGlmIChjbGFzc1BhcnRPYmplY3QudmFsaWRhdG9ycy5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgfVxyXG4gIGNvbnN0IGNsYXNzUmVzdCA9IGNsYXNzUGFydHMuam9pbihDTEFTU19QQVJUX1NFUEFSQVRPUik7XHJcbiAgcmV0dXJuIGNsYXNzUGFydE9iamVjdC52YWxpZGF0b3JzLmZpbmQoKHtcclxuICAgIHZhbGlkYXRvclxyXG4gIH0pID0+IHZhbGlkYXRvcihjbGFzc1Jlc3QpKT8uY2xhc3NHcm91cElkO1xyXG59O1xyXG5jb25zdCBhcmJpdHJhcnlQcm9wZXJ0eVJlZ2V4ID0gL15cXFsoLispXFxdJC87XHJcbmNvbnN0IGdldEdyb3VwSWRGb3JBcmJpdHJhcnlQcm9wZXJ0eSA9IGNsYXNzTmFtZSA9PiB7XHJcbiAgaWYgKGFyYml0cmFyeVByb3BlcnR5UmVnZXgudGVzdChjbGFzc05hbWUpKSB7XHJcbiAgICBjb25zdCBhcmJpdHJhcnlQcm9wZXJ0eUNsYXNzTmFtZSA9IGFyYml0cmFyeVByb3BlcnR5UmVnZXguZXhlYyhjbGFzc05hbWUpWzFdO1xyXG4gICAgY29uc3QgcHJvcGVydHkgPSBhcmJpdHJhcnlQcm9wZXJ0eUNsYXNzTmFtZT8uc3Vic3RyaW5nKDAsIGFyYml0cmFyeVByb3BlcnR5Q2xhc3NOYW1lLmluZGV4T2YoJzonKSk7XHJcbiAgICBpZiAocHJvcGVydHkpIHtcclxuICAgICAgLy8gSSB1c2UgdHdvIGRvdHMgaGVyZSBiZWNhdXNlIG9uZSBkb3QgaXMgdXNlZCBhcyBwcmVmaXggZm9yIGNsYXNzIGdyb3VwcyBpbiBwbHVnaW5zXHJcbiAgICAgIHJldHVybiAnYXJiaXRyYXJ5Li4nICsgcHJvcGVydHk7XHJcbiAgICB9XHJcbiAgfVxyXG59O1xyXG4vKipcclxuICogRXhwb3J0ZWQgZm9yIHRlc3Rpbmcgb25seVxyXG4gKi9cclxuY29uc3QgY3JlYXRlQ2xhc3NNYXAgPSBjb25maWcgPT4ge1xyXG4gIGNvbnN0IHtcclxuICAgIHRoZW1lLFxyXG4gICAgcHJlZml4XHJcbiAgfSA9IGNvbmZpZztcclxuICBjb25zdCBjbGFzc01hcCA9IHtcclxuICAgIG5leHRQYXJ0OiBuZXcgTWFwKCksXHJcbiAgICB2YWxpZGF0b3JzOiBbXVxyXG4gIH07XHJcbiAgY29uc3QgcHJlZml4ZWRDbGFzc0dyb3VwRW50cmllcyA9IGdldFByZWZpeGVkQ2xhc3NHcm91cEVudHJpZXMoT2JqZWN0LmVudHJpZXMoY29uZmlnLmNsYXNzR3JvdXBzKSwgcHJlZml4KTtcclxuICBwcmVmaXhlZENsYXNzR3JvdXBFbnRyaWVzLmZvckVhY2goKFtjbGFzc0dyb3VwSWQsIGNsYXNzR3JvdXBdKSA9PiB7XHJcbiAgICBwcm9jZXNzQ2xhc3Nlc1JlY3Vyc2l2ZWx5KGNsYXNzR3JvdXAsIGNsYXNzTWFwLCBjbGFzc0dyb3VwSWQsIHRoZW1lKTtcclxuICB9KTtcclxuICByZXR1cm4gY2xhc3NNYXA7XHJcbn07XHJcbmNvbnN0IHByb2Nlc3NDbGFzc2VzUmVjdXJzaXZlbHkgPSAoY2xhc3NHcm91cCwgY2xhc3NQYXJ0T2JqZWN0LCBjbGFzc0dyb3VwSWQsIHRoZW1lKSA9PiB7XHJcbiAgY2xhc3NHcm91cC5mb3JFYWNoKGNsYXNzRGVmaW5pdGlvbiA9PiB7XHJcbiAgICBpZiAodHlwZW9mIGNsYXNzRGVmaW5pdGlvbiA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgY29uc3QgY2xhc3NQYXJ0T2JqZWN0VG9FZGl0ID0gY2xhc3NEZWZpbml0aW9uID09PSAnJyA/IGNsYXNzUGFydE9iamVjdCA6IGdldFBhcnQoY2xhc3NQYXJ0T2JqZWN0LCBjbGFzc0RlZmluaXRpb24pO1xyXG4gICAgICBjbGFzc1BhcnRPYmplY3RUb0VkaXQuY2xhc3NHcm91cElkID0gY2xhc3NHcm91cElkO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGNsYXNzRGVmaW5pdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBpZiAoaXNUaGVtZUdldHRlcihjbGFzc0RlZmluaXRpb24pKSB7XHJcbiAgICAgICAgcHJvY2Vzc0NsYXNzZXNSZWN1cnNpdmVseShjbGFzc0RlZmluaXRpb24odGhlbWUpLCBjbGFzc1BhcnRPYmplY3QsIGNsYXNzR3JvdXBJZCwgdGhlbWUpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjbGFzc1BhcnRPYmplY3QudmFsaWRhdG9ycy5wdXNoKHtcclxuICAgICAgICB2YWxpZGF0b3I6IGNsYXNzRGVmaW5pdGlvbixcclxuICAgICAgICBjbGFzc0dyb3VwSWRcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIE9iamVjdC5lbnRyaWVzKGNsYXNzRGVmaW5pdGlvbikuZm9yRWFjaCgoW2tleSwgY2xhc3NHcm91cF0pID0+IHtcclxuICAgICAgcHJvY2Vzc0NsYXNzZXNSZWN1cnNpdmVseShjbGFzc0dyb3VwLCBnZXRQYXJ0KGNsYXNzUGFydE9iamVjdCwga2V5KSwgY2xhc3NHcm91cElkLCB0aGVtZSk7XHJcbiAgICB9KTtcclxuICB9KTtcclxufTtcclxuY29uc3QgZ2V0UGFydCA9IChjbGFzc1BhcnRPYmplY3QsIHBhdGgpID0+IHtcclxuICBsZXQgY3VycmVudENsYXNzUGFydE9iamVjdCA9IGNsYXNzUGFydE9iamVjdDtcclxuICBwYXRoLnNwbGl0KENMQVNTX1BBUlRfU0VQQVJBVE9SKS5mb3JFYWNoKHBhdGhQYXJ0ID0+IHtcclxuICAgIGlmICghY3VycmVudENsYXNzUGFydE9iamVjdC5uZXh0UGFydC5oYXMocGF0aFBhcnQpKSB7XHJcbiAgICAgIGN1cnJlbnRDbGFzc1BhcnRPYmplY3QubmV4dFBhcnQuc2V0KHBhdGhQYXJ0LCB7XHJcbiAgICAgICAgbmV4dFBhcnQ6IG5ldyBNYXAoKSxcclxuICAgICAgICB2YWxpZGF0b3JzOiBbXVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGN1cnJlbnRDbGFzc1BhcnRPYmplY3QgPSBjdXJyZW50Q2xhc3NQYXJ0T2JqZWN0Lm5leHRQYXJ0LmdldChwYXRoUGFydCk7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIGN1cnJlbnRDbGFzc1BhcnRPYmplY3Q7XHJcbn07XHJcbmNvbnN0IGlzVGhlbWVHZXR0ZXIgPSBmdW5jID0+IGZ1bmMuaXNUaGVtZUdldHRlcjtcclxuY29uc3QgZ2V0UHJlZml4ZWRDbGFzc0dyb3VwRW50cmllcyA9IChjbGFzc0dyb3VwRW50cmllcywgcHJlZml4KSA9PiB7XHJcbiAgaWYgKCFwcmVmaXgpIHtcclxuICAgIHJldHVybiBjbGFzc0dyb3VwRW50cmllcztcclxuICB9XHJcbiAgcmV0dXJuIGNsYXNzR3JvdXBFbnRyaWVzLm1hcCgoW2NsYXNzR3JvdXBJZCwgY2xhc3NHcm91cF0pID0+IHtcclxuICAgIGNvbnN0IHByZWZpeGVkQ2xhc3NHcm91cCA9IGNsYXNzR3JvdXAubWFwKGNsYXNzRGVmaW5pdGlvbiA9PiB7XHJcbiAgICAgIGlmICh0eXBlb2YgY2xhc3NEZWZpbml0aW9uID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHJldHVybiBwcmVmaXggKyBjbGFzc0RlZmluaXRpb247XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHR5cGVvZiBjbGFzc0RlZmluaXRpb24gPT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhPYmplY3QuZW50cmllcyhjbGFzc0RlZmluaXRpb24pLm1hcCgoW2tleSwgdmFsdWVdKSA9PiBbcHJlZml4ICsga2V5LCB2YWx1ZV0pKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY2xhc3NEZWZpbml0aW9uO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gW2NsYXNzR3JvdXBJZCwgcHJlZml4ZWRDbGFzc0dyb3VwXTtcclxuICB9KTtcclxufTtcclxuXHJcbi8vIExSVSBjYWNoZSBpbnNwaXJlZCBmcm9tIGhhc2hscnUgKGh0dHBzOi8vZ2l0aHViLmNvbS9kb21pbmljdGFyci9oYXNobHJ1L2Jsb2IvdjEuMC40L2luZGV4LmpzKSBidXQgb2JqZWN0IHJlcGxhY2VkIHdpdGggTWFwIHRvIGltcHJvdmUgcGVyZm9ybWFuY2VcclxuY29uc3QgY3JlYXRlTHJ1Q2FjaGUgPSBtYXhDYWNoZVNpemUgPT4ge1xyXG4gIGlmIChtYXhDYWNoZVNpemUgPCAxKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBnZXQ6ICgpID0+IHVuZGVmaW5lZCxcclxuICAgICAgc2V0OiAoKSA9PiB7fVxyXG4gICAgfTtcclxuICB9XHJcbiAgbGV0IGNhY2hlU2l6ZSA9IDA7XHJcbiAgbGV0IGNhY2hlID0gbmV3IE1hcCgpO1xyXG4gIGxldCBwcmV2aW91c0NhY2hlID0gbmV3IE1hcCgpO1xyXG4gIGNvbnN0IHVwZGF0ZSA9IChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICBjYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICBjYWNoZVNpemUrKztcclxuICAgIGlmIChjYWNoZVNpemUgPiBtYXhDYWNoZVNpemUpIHtcclxuICAgICAgY2FjaGVTaXplID0gMDtcclxuICAgICAgcHJldmlvdXNDYWNoZSA9IGNhY2hlO1xyXG4gICAgICBjYWNoZSA9IG5ldyBNYXAoKTtcclxuICAgIH1cclxuICB9O1xyXG4gIHJldHVybiB7XHJcbiAgICBnZXQoa2V5KSB7XHJcbiAgICAgIGxldCB2YWx1ZSA9IGNhY2hlLmdldChrZXkpO1xyXG4gICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoKHZhbHVlID0gcHJldmlvdXNDYWNoZS5nZXQoa2V5KSkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIHVwZGF0ZShrZXksIHZhbHVlKTtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xyXG4gICAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcclxuICAgICAgICBjYWNoZS5zZXQoa2V5LCB2YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdXBkYXRlKGtleSwgdmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxufTtcclxuY29uc3QgSU1QT1JUQU5UX01PRElGSUVSID0gJyEnO1xyXG5jb25zdCBjcmVhdGVQYXJzZUNsYXNzTmFtZSA9IGNvbmZpZyA9PiB7XHJcbiAgY29uc3Qge1xyXG4gICAgc2VwYXJhdG9yLFxyXG4gICAgZXhwZXJpbWVudGFsUGFyc2VDbGFzc05hbWVcclxuICB9ID0gY29uZmlnO1xyXG4gIGNvbnN0IGlzU2VwYXJhdG9yU2luZ2xlQ2hhcmFjdGVyID0gc2VwYXJhdG9yLmxlbmd0aCA9PT0gMTtcclxuICBjb25zdCBmaXJzdFNlcGFyYXRvckNoYXJhY3RlciA9IHNlcGFyYXRvclswXTtcclxuICBjb25zdCBzZXBhcmF0b3JMZW5ndGggPSBzZXBhcmF0b3IubGVuZ3RoO1xyXG4gIC8vIHBhcnNlQ2xhc3NOYW1lIGluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS90YWlsd2luZGxhYnMvdGFpbHdpbmRjc3MvYmxvYi92My4yLjIvc3JjL3V0aWwvc3BsaXRBdFRvcExldmVsT25seS5qc1xyXG4gIGNvbnN0IHBhcnNlQ2xhc3NOYW1lID0gY2xhc3NOYW1lID0+IHtcclxuICAgIGNvbnN0IG1vZGlmaWVycyA9IFtdO1xyXG4gICAgbGV0IGJyYWNrZXREZXB0aCA9IDA7XHJcbiAgICBsZXQgbW9kaWZpZXJTdGFydCA9IDA7XHJcbiAgICBsZXQgcG9zdGZpeE1vZGlmaWVyUG9zaXRpb247XHJcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2xhc3NOYW1lLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICBsZXQgY3VycmVudENoYXJhY3RlciA9IGNsYXNzTmFtZVtpbmRleF07XHJcbiAgICAgIGlmIChicmFja2V0RGVwdGggPT09IDApIHtcclxuICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlciA9PT0gZmlyc3RTZXBhcmF0b3JDaGFyYWN0ZXIgJiYgKGlzU2VwYXJhdG9yU2luZ2xlQ2hhcmFjdGVyIHx8IGNsYXNzTmFtZS5zbGljZShpbmRleCwgaW5kZXggKyBzZXBhcmF0b3JMZW5ndGgpID09PSBzZXBhcmF0b3IpKSB7XHJcbiAgICAgICAgICBtb2RpZmllcnMucHVzaChjbGFzc05hbWUuc2xpY2UobW9kaWZpZXJTdGFydCwgaW5kZXgpKTtcclxuICAgICAgICAgIG1vZGlmaWVyU3RhcnQgPSBpbmRleCArIHNlcGFyYXRvckxlbmd0aDtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlciA9PT0gJy8nKSB7XHJcbiAgICAgICAgICBwb3N0Zml4TW9kaWZpZXJQb3NpdGlvbiA9IGluZGV4O1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyID09PSAnWycpIHtcclxuICAgICAgICBicmFja2V0RGVwdGgrKztcclxuICAgICAgfSBlbHNlIGlmIChjdXJyZW50Q2hhcmFjdGVyID09PSAnXScpIHtcclxuICAgICAgICBicmFja2V0RGVwdGgtLTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgYmFzZUNsYXNzTmFtZVdpdGhJbXBvcnRhbnRNb2RpZmllciA9IG1vZGlmaWVycy5sZW5ndGggPT09IDAgPyBjbGFzc05hbWUgOiBjbGFzc05hbWUuc3Vic3RyaW5nKG1vZGlmaWVyU3RhcnQpO1xyXG4gICAgY29uc3QgaGFzSW1wb3J0YW50TW9kaWZpZXIgPSBiYXNlQ2xhc3NOYW1lV2l0aEltcG9ydGFudE1vZGlmaWVyLnN0YXJ0c1dpdGgoSU1QT1JUQU5UX01PRElGSUVSKTtcclxuICAgIGNvbnN0IGJhc2VDbGFzc05hbWUgPSBoYXNJbXBvcnRhbnRNb2RpZmllciA/IGJhc2VDbGFzc05hbWVXaXRoSW1wb3J0YW50TW9kaWZpZXIuc3Vic3RyaW5nKDEpIDogYmFzZUNsYXNzTmFtZVdpdGhJbXBvcnRhbnRNb2RpZmllcjtcclxuICAgIGNvbnN0IG1heWJlUG9zdGZpeE1vZGlmaWVyUG9zaXRpb24gPSBwb3N0Zml4TW9kaWZpZXJQb3NpdGlvbiAmJiBwb3N0Zml4TW9kaWZpZXJQb3NpdGlvbiA+IG1vZGlmaWVyU3RhcnQgPyBwb3N0Zml4TW9kaWZpZXJQb3NpdGlvbiAtIG1vZGlmaWVyU3RhcnQgOiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBtb2RpZmllcnMsXHJcbiAgICAgIGhhc0ltcG9ydGFudE1vZGlmaWVyLFxyXG4gICAgICBiYXNlQ2xhc3NOYW1lLFxyXG4gICAgICBtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uXHJcbiAgICB9O1xyXG4gIH07XHJcbiAgaWYgKGV4cGVyaW1lbnRhbFBhcnNlQ2xhc3NOYW1lKSB7XHJcbiAgICByZXR1cm4gY2xhc3NOYW1lID0+IGV4cGVyaW1lbnRhbFBhcnNlQ2xhc3NOYW1lKHtcclxuICAgICAgY2xhc3NOYW1lLFxyXG4gICAgICBwYXJzZUNsYXNzTmFtZVxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJldHVybiBwYXJzZUNsYXNzTmFtZTtcclxufTtcclxuLyoqXHJcbiAqIFNvcnRzIG1vZGlmaWVycyBhY2NvcmRpbmcgdG8gZm9sbG93aW5nIHNjaGVtYTpcclxuICogLSBQcmVkZWZpbmVkIG1vZGlmaWVycyBhcmUgc29ydGVkIGFscGhhYmV0aWNhbGx5XHJcbiAqIC0gV2hlbiBhbiBhcmJpdHJhcnkgdmFyaWFudCBhcHBlYXJzLCBpdCBtdXN0IGJlIHByZXNlcnZlZCB3aGljaCBtb2RpZmllcnMgYXJlIGJlZm9yZSBhbmQgYWZ0ZXIgaXRcclxuICovXHJcbmNvbnN0IHNvcnRNb2RpZmllcnMgPSBtb2RpZmllcnMgPT4ge1xyXG4gIGlmIChtb2RpZmllcnMubGVuZ3RoIDw9IDEpIHtcclxuICAgIHJldHVybiBtb2RpZmllcnM7XHJcbiAgfVxyXG4gIGNvbnN0IHNvcnRlZE1vZGlmaWVycyA9IFtdO1xyXG4gIGxldCB1bnNvcnRlZE1vZGlmaWVycyA9IFtdO1xyXG4gIG1vZGlmaWVycy5mb3JFYWNoKG1vZGlmaWVyID0+IHtcclxuICAgIGNvbnN0IGlzQXJiaXRyYXJ5VmFyaWFudCA9IG1vZGlmaWVyWzBdID09PSAnWyc7XHJcbiAgICBpZiAoaXNBcmJpdHJhcnlWYXJpYW50KSB7XHJcbiAgICAgIHNvcnRlZE1vZGlmaWVycy5wdXNoKC4uLnVuc29ydGVkTW9kaWZpZXJzLnNvcnQoKSwgbW9kaWZpZXIpO1xyXG4gICAgICB1bnNvcnRlZE1vZGlmaWVycyA9IFtdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdW5zb3J0ZWRNb2RpZmllcnMucHVzaChtb2RpZmllcik7XHJcbiAgICB9XHJcbiAgfSk7XHJcbiAgc29ydGVkTW9kaWZpZXJzLnB1c2goLi4udW5zb3J0ZWRNb2RpZmllcnMuc29ydCgpKTtcclxuICByZXR1cm4gc29ydGVkTW9kaWZpZXJzO1xyXG59O1xyXG5jb25zdCBjcmVhdGVDb25maWdVdGlscyA9IGNvbmZpZyA9PiAoe1xyXG4gIGNhY2hlOiBjcmVhdGVMcnVDYWNoZShjb25maWcuY2FjaGVTaXplKSxcclxuICBwYXJzZUNsYXNzTmFtZTogY3JlYXRlUGFyc2VDbGFzc05hbWUoY29uZmlnKSxcclxuICAuLi5jcmVhdGVDbGFzc0dyb3VwVXRpbHMoY29uZmlnKVxyXG59KTtcclxuY29uc3QgU1BMSVRfQ0xBU1NFU19SRUdFWCA9IC9cXHMrLztcclxuY29uc3QgbWVyZ2VDbGFzc0xpc3QgPSAoY2xhc3NMaXN0LCBjb25maWdVdGlscykgPT4ge1xyXG4gIGNvbnN0IHtcclxuICAgIHBhcnNlQ2xhc3NOYW1lLFxyXG4gICAgZ2V0Q2xhc3NHcm91cElkLFxyXG4gICAgZ2V0Q29uZmxpY3RpbmdDbGFzc0dyb3VwSWRzXHJcbiAgfSA9IGNvbmZpZ1V0aWxzO1xyXG4gIC8qKlxyXG4gICAqIFNldCBvZiBjbGFzc0dyb3VwSWRzIGluIGZvbGxvd2luZyBmb3JtYXQ6XHJcbiAgICogYHtpbXBvcnRhbnRNb2RpZmllcn17dmFyaWFudE1vZGlmaWVyc317Y2xhc3NHcm91cElkfWBcclxuICAgKiBAZXhhbXBsZSAnZmxvYXQnXHJcbiAgICogQGV4YW1wbGUgJ2hvdmVyOmZvY3VzOmJnLWNvbG9yJ1xyXG4gICAqIEBleGFtcGxlICdtZDohcHInXHJcbiAgICovXHJcbiAgY29uc3QgY2xhc3NHcm91cHNJbkNvbmZsaWN0ID0gW107XHJcbiAgY29uc3QgY2xhc3NOYW1lcyA9IGNsYXNzTGlzdC50cmltKCkuc3BsaXQoU1BMSVRfQ0xBU1NFU19SRUdFWCk7XHJcbiAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gIGZvciAobGV0IGluZGV4ID0gY2xhc3NOYW1lcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleCAtPSAxKSB7XHJcbiAgICBjb25zdCBvcmlnaW5hbENsYXNzTmFtZSA9IGNsYXNzTmFtZXNbaW5kZXhdO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBtb2RpZmllcnMsXHJcbiAgICAgIGhhc0ltcG9ydGFudE1vZGlmaWVyLFxyXG4gICAgICBiYXNlQ2xhc3NOYW1lLFxyXG4gICAgICBtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uXHJcbiAgICB9ID0gcGFyc2VDbGFzc05hbWUob3JpZ2luYWxDbGFzc05hbWUpO1xyXG4gICAgbGV0IGhhc1Bvc3RmaXhNb2RpZmllciA9IEJvb2xlYW4obWF5YmVQb3N0Zml4TW9kaWZpZXJQb3NpdGlvbik7XHJcbiAgICBsZXQgY2xhc3NHcm91cElkID0gZ2V0Q2xhc3NHcm91cElkKGhhc1Bvc3RmaXhNb2RpZmllciA/IGJhc2VDbGFzc05hbWUuc3Vic3RyaW5nKDAsIG1heWJlUG9zdGZpeE1vZGlmaWVyUG9zaXRpb24pIDogYmFzZUNsYXNzTmFtZSk7XHJcbiAgICBpZiAoIWNsYXNzR3JvdXBJZCkge1xyXG4gICAgICBpZiAoIWhhc1Bvc3RmaXhNb2RpZmllcikge1xyXG4gICAgICAgIC8vIE5vdCBhIFRhaWx3aW5kIGNsYXNzXHJcbiAgICAgICAgcmVzdWx0ID0gb3JpZ2luYWxDbGFzc05hbWUgKyAocmVzdWx0Lmxlbmd0aCA+IDAgPyAnICcgKyByZXN1bHQgOiByZXN1bHQpO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNsYXNzR3JvdXBJZCA9IGdldENsYXNzR3JvdXBJZChiYXNlQ2xhc3NOYW1lKTtcclxuICAgICAgaWYgKCFjbGFzc0dyb3VwSWQpIHtcclxuICAgICAgICAvLyBOb3QgYSBUYWlsd2luZCBjbGFzc1xyXG4gICAgICAgIHJlc3VsdCA9IG9yaWdpbmFsQ2xhc3NOYW1lICsgKHJlc3VsdC5sZW5ndGggPiAwID8gJyAnICsgcmVzdWx0IDogcmVzdWx0KTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBoYXNQb3N0Zml4TW9kaWZpZXIgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhcmlhbnRNb2RpZmllciA9IHNvcnRNb2RpZmllcnMobW9kaWZpZXJzKS5qb2luKCc6Jyk7XHJcbiAgICBjb25zdCBtb2RpZmllcklkID0gaGFzSW1wb3J0YW50TW9kaWZpZXIgPyB2YXJpYW50TW9kaWZpZXIgKyBJTVBPUlRBTlRfTU9ESUZJRVIgOiB2YXJpYW50TW9kaWZpZXI7XHJcbiAgICBjb25zdCBjbGFzc0lkID0gbW9kaWZpZXJJZCArIGNsYXNzR3JvdXBJZDtcclxuICAgIGlmIChjbGFzc0dyb3Vwc0luQ29uZmxpY3QuaW5jbHVkZXMoY2xhc3NJZCkpIHtcclxuICAgICAgLy8gVGFpbHdpbmQgY2xhc3Mgb21pdHRlZCBkdWUgdG8gY29uZmxpY3RcclxuICAgICAgY29udGludWU7XHJcbiAgICB9XHJcbiAgICBjbGFzc0dyb3Vwc0luQ29uZmxpY3QucHVzaChjbGFzc0lkKTtcclxuICAgIGNvbnN0IGNvbmZsaWN0R3JvdXBzID0gZ2V0Q29uZmxpY3RpbmdDbGFzc0dyb3VwSWRzKGNsYXNzR3JvdXBJZCwgaGFzUG9zdGZpeE1vZGlmaWVyKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmxpY3RHcm91cHMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgY29uc3QgZ3JvdXAgPSBjb25mbGljdEdyb3Vwc1tpXTtcclxuICAgICAgY2xhc3NHcm91cHNJbkNvbmZsaWN0LnB1c2gobW9kaWZpZXJJZCArIGdyb3VwKTtcclxuICAgIH1cclxuICAgIC8vIFRhaWx3aW5kIGNsYXNzIG5vdCBpbiBjb25mbGljdFxyXG4gICAgcmVzdWx0ID0gb3JpZ2luYWxDbGFzc05hbWUgKyAocmVzdWx0Lmxlbmd0aCA+IDAgPyAnICcgKyByZXN1bHQgOiByZXN1bHQpO1xyXG4gIH1cclxuICByZXR1cm4gcmVzdWx0O1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRoZSBjb2RlIGluIHRoaXMgZmlsZSBpcyBjb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbHVrZWVkL2Nsc3ggYW5kIG1vZGlmaWVkIHRvIHN1aXQgdGhlIG5lZWRzIG9mIHRhaWx3aW5kLW1lcmdlIGJldHRlci5cclxuICpcclxuICogU3BlY2lmaWNhbGx5OlxyXG4gKiAtIFJ1bnRpbWUgY29kZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sdWtlZWQvY2xzeC9ibG9iL3YxLjIuMS9zcmMvaW5kZXguanNcclxuICogLSBUeXBlU2NyaXB0IHR5cGVzIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2x1a2VlZC9jbHN4L2Jsb2IvdjEuMi4xL2Nsc3guZC50c1xyXG4gKlxyXG4gKiBPcmlnaW5hbCBjb2RlIGhhcyBNSVQgbGljZW5zZTogQ29weXJpZ2h0IChjKSBMdWtlIEVkd2FyZHMgPGx1a2UuZWR3YXJkczA1QGdtYWlsLmNvbT4gKGx1a2VlZC5jb20pXHJcbiAqL1xyXG5mdW5jdGlvbiB0d0pvaW4oKSB7XHJcbiAgbGV0IGluZGV4ID0gMDtcclxuICBsZXQgYXJndW1lbnQ7XHJcbiAgbGV0IHJlc29sdmVkVmFsdWU7XHJcbiAgbGV0IHN0cmluZyA9ICcnO1xyXG4gIHdoaWxlIChpbmRleCA8IGFyZ3VtZW50cy5sZW5ndGgpIHtcclxuICAgIGlmIChhcmd1bWVudCA9IGFyZ3VtZW50c1tpbmRleCsrXSkge1xyXG4gICAgICBpZiAocmVzb2x2ZWRWYWx1ZSA9IHRvVmFsdWUoYXJndW1lbnQpKSB7XHJcbiAgICAgICAgc3RyaW5nICYmIChzdHJpbmcgKz0gJyAnKTtcclxuICAgICAgICBzdHJpbmcgKz0gcmVzb2x2ZWRWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gc3RyaW5nO1xyXG59XHJcbmNvbnN0IHRvVmFsdWUgPSBtaXggPT4ge1xyXG4gIGlmICh0eXBlb2YgbWl4ID09PSAnc3RyaW5nJykge1xyXG4gICAgcmV0dXJuIG1peDtcclxuICB9XHJcbiAgbGV0IHJlc29sdmVkVmFsdWU7XHJcbiAgbGV0IHN0cmluZyA9ICcnO1xyXG4gIGZvciAobGV0IGsgPSAwOyBrIDwgbWl4Lmxlbmd0aDsgaysrKSB7XHJcbiAgICBpZiAobWl4W2tdKSB7XHJcbiAgICAgIGlmIChyZXNvbHZlZFZhbHVlID0gdG9WYWx1ZShtaXhba10pKSB7XHJcbiAgICAgICAgc3RyaW5nICYmIChzdHJpbmcgKz0gJyAnKTtcclxuICAgICAgICBzdHJpbmcgKz0gcmVzb2x2ZWRWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gc3RyaW5nO1xyXG59O1xyXG5mdW5jdGlvbiBjcmVhdGVUYWlsd2luZE1lcmdlKGNyZWF0ZUNvbmZpZ0ZpcnN0LCAuLi5jcmVhdGVDb25maWdSZXN0KSB7XHJcbiAgbGV0IGNvbmZpZ1V0aWxzO1xyXG4gIGxldCBjYWNoZUdldDtcclxuICBsZXQgY2FjaGVTZXQ7XHJcbiAgbGV0IGZ1bmN0aW9uVG9DYWxsID0gaW5pdFRhaWx3aW5kTWVyZ2U7XHJcbiAgZnVuY3Rpb24gaW5pdFRhaWx3aW5kTWVyZ2UoY2xhc3NMaXN0KSB7XHJcbiAgICBjb25zdCBjb25maWcgPSBjcmVhdGVDb25maWdSZXN0LnJlZHVjZSgocHJldmlvdXNDb25maWcsIGNyZWF0ZUNvbmZpZ0N1cnJlbnQpID0+IGNyZWF0ZUNvbmZpZ0N1cnJlbnQocHJldmlvdXNDb25maWcpLCBjcmVhdGVDb25maWdGaXJzdCgpKTtcclxuICAgIGNvbmZpZ1V0aWxzID0gY3JlYXRlQ29uZmlnVXRpbHMoY29uZmlnKTtcclxuICAgIGNhY2hlR2V0ID0gY29uZmlnVXRpbHMuY2FjaGUuZ2V0O1xyXG4gICAgY2FjaGVTZXQgPSBjb25maWdVdGlscy5jYWNoZS5zZXQ7XHJcbiAgICBmdW5jdGlvblRvQ2FsbCA9IHRhaWx3aW5kTWVyZ2U7XHJcbiAgICByZXR1cm4gdGFpbHdpbmRNZXJnZShjbGFzc0xpc3QpO1xyXG4gIH1cclxuICBmdW5jdGlvbiB0YWlsd2luZE1lcmdlKGNsYXNzTGlzdCkge1xyXG4gICAgY29uc3QgY2FjaGVkUmVzdWx0ID0gY2FjaGVHZXQoY2xhc3NMaXN0KTtcclxuICAgIGlmIChjYWNoZWRSZXN1bHQpIHtcclxuICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdDtcclxuICAgIH1cclxuICAgIGNvbnN0IHJlc3VsdCA9IG1lcmdlQ2xhc3NMaXN0KGNsYXNzTGlzdCwgY29uZmlnVXRpbHMpO1xyXG4gICAgY2FjaGVTZXQoY2xhc3NMaXN0LCByZXN1bHQpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIGNhbGxUYWlsd2luZE1lcmdlKCkge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9DYWxsKHR3Sm9pbi5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcclxuICB9O1xyXG59XHJcbmNvbnN0IGZyb21UaGVtZSA9IGtleSA9PiB7XHJcbiAgY29uc3QgdGhlbWVHZXR0ZXIgPSB0aGVtZSA9PiB0aGVtZVtrZXldIHx8IFtdO1xyXG4gIHRoZW1lR2V0dGVyLmlzVGhlbWVHZXR0ZXIgPSB0cnVlO1xyXG4gIHJldHVybiB0aGVtZUdldHRlcjtcclxufTtcclxuY29uc3QgYXJiaXRyYXJ5VmFsdWVSZWdleCA9IC9eXFxbKD86KFthLXotXSspOik/KC4rKVxcXSQvaTtcclxuY29uc3QgZnJhY3Rpb25SZWdleCA9IC9eXFxkK1xcL1xcZCskLztcclxuY29uc3Qgc3RyaW5nTGVuZ3RocyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsncHgnLCAnZnVsbCcsICdzY3JlZW4nXSk7XHJcbmNvbnN0IHRzaGlydFVuaXRSZWdleCA9IC9eKFxcZCsoXFwuXFxkKyk/KT8oeHN8c218bWR8bGd8eGwpJC87XHJcbmNvbnN0IGxlbmd0aFVuaXRSZWdleCA9IC9cXGQrKCV8cHh8cj9lbXxbc2RsXT92KFtod2liXXxtaW58bWF4KXxwdHxwY3xpbnxjbXxtbXxjYXB8Y2h8ZXh8cj9saHxjcSh3fGh8aXxifG1pbnxtYXgpKXxcXGIoY2FsY3xtaW58bWF4fGNsYW1wKVxcKC4rXFwpfF4wJC87XHJcbmNvbnN0IGNvbG9yRnVuY3Rpb25SZWdleCA9IC9eKHJnYmE/fGhzbGE/fGh3Ynwob2spPyhsYWJ8bGNoKSlcXCguK1xcKSQvO1xyXG4vLyBTaGFkb3cgYWx3YXlzIGJlZ2lucyB3aXRoIHggYW5kIHkgb2Zmc2V0IHNlcGFyYXRlZCBieSB1bmRlcnNjb3JlIG9wdGlvbmFsbHkgcHJlcGVuZGVkIGJ5IGluc2V0XHJcbmNvbnN0IHNoYWRvd1JlZ2V4ID0gL14oaW5zZXRfKT8tPygoXFxkKyk/XFwuPyhcXGQrKVthLXpdK3wwKV8tPygoXFxkKyk/XFwuPyhcXGQrKVthLXpdK3wwKS87XHJcbmNvbnN0IGltYWdlUmVnZXggPSAvXih1cmx8aW1hZ2V8aW1hZ2Utc2V0fGNyb3NzLWZhZGV8ZWxlbWVudHwocmVwZWF0aW5nLSk/KGxpbmVhcnxyYWRpYWx8Y29uaWMpLWdyYWRpZW50KVxcKC4rXFwpJC87XHJcbmNvbnN0IGlzTGVuZ3RoID0gdmFsdWUgPT4gaXNOdW1iZXIodmFsdWUpIHx8IHN0cmluZ0xlbmd0aHMuaGFzKHZhbHVlKSB8fCBmcmFjdGlvblJlZ2V4LnRlc3QodmFsdWUpO1xyXG5jb25zdCBpc0FyYml0cmFyeUxlbmd0aCA9IHZhbHVlID0+IGdldElzQXJiaXRyYXJ5VmFsdWUodmFsdWUsICdsZW5ndGgnLCBpc0xlbmd0aE9ubHkpO1xyXG5jb25zdCBpc051bWJlciA9IHZhbHVlID0+IEJvb2xlYW4odmFsdWUpICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyKHZhbHVlKSk7XHJcbmNvbnN0IGlzQXJiaXRyYXJ5TnVtYmVyID0gdmFsdWUgPT4gZ2V0SXNBcmJpdHJhcnlWYWx1ZSh2YWx1ZSwgJ251bWJlcicsIGlzTnVtYmVyKTtcclxuY29uc3QgaXNJbnRlZ2VyID0gdmFsdWUgPT4gQm9vbGVhbih2YWx1ZSkgJiYgTnVtYmVyLmlzSW50ZWdlcihOdW1iZXIodmFsdWUpKTtcclxuY29uc3QgaXNQZXJjZW50ID0gdmFsdWUgPT4gdmFsdWUuZW5kc1dpdGgoJyUnKSAmJiBpc051bWJlcih2YWx1ZS5zbGljZSgwLCAtMSkpO1xyXG5jb25zdCBpc0FyYml0cmFyeVZhbHVlID0gdmFsdWUgPT4gYXJiaXRyYXJ5VmFsdWVSZWdleC50ZXN0KHZhbHVlKTtcclxuY29uc3QgaXNUc2hpcnRTaXplID0gdmFsdWUgPT4gdHNoaXJ0VW5pdFJlZ2V4LnRlc3QodmFsdWUpO1xyXG5jb25zdCBzaXplTGFiZWxzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydsZW5ndGgnLCAnc2l6ZScsICdwZXJjZW50YWdlJ10pO1xyXG5jb25zdCBpc0FyYml0cmFyeVNpemUgPSB2YWx1ZSA9PiBnZXRJc0FyYml0cmFyeVZhbHVlKHZhbHVlLCBzaXplTGFiZWxzLCBpc05ldmVyKTtcclxuY29uc3QgaXNBcmJpdHJhcnlQb3NpdGlvbiA9IHZhbHVlID0+IGdldElzQXJiaXRyYXJ5VmFsdWUodmFsdWUsICdwb3NpdGlvbicsIGlzTmV2ZXIpO1xyXG5jb25zdCBpbWFnZUxhYmVscyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsnaW1hZ2UnLCAndXJsJ10pO1xyXG5jb25zdCBpc0FyYml0cmFyeUltYWdlID0gdmFsdWUgPT4gZ2V0SXNBcmJpdHJhcnlWYWx1ZSh2YWx1ZSwgaW1hZ2VMYWJlbHMsIGlzSW1hZ2UpO1xyXG5jb25zdCBpc0FyYml0cmFyeVNoYWRvdyA9IHZhbHVlID0+IGdldElzQXJiaXRyYXJ5VmFsdWUodmFsdWUsICcnLCBpc1NoYWRvdyk7XHJcbmNvbnN0IGlzQW55ID0gKCkgPT4gdHJ1ZTtcclxuY29uc3QgZ2V0SXNBcmJpdHJhcnlWYWx1ZSA9ICh2YWx1ZSwgbGFiZWwsIHRlc3RWYWx1ZSkgPT4ge1xyXG4gIGNvbnN0IHJlc3VsdCA9IGFyYml0cmFyeVZhbHVlUmVnZXguZXhlYyh2YWx1ZSk7XHJcbiAgaWYgKHJlc3VsdCkge1xyXG4gICAgaWYgKHJlc3VsdFsxXSkge1xyXG4gICAgICByZXR1cm4gdHlwZW9mIGxhYmVsID09PSAnc3RyaW5nJyA/IHJlc3VsdFsxXSA9PT0gbGFiZWwgOiBsYWJlbC5oYXMocmVzdWx0WzFdKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0ZXN0VmFsdWUocmVzdWx0WzJdKTtcclxuICB9XHJcbiAgcmV0dXJuIGZhbHNlO1xyXG59O1xyXG5jb25zdCBpc0xlbmd0aE9ubHkgPSB2YWx1ZSA9PlxyXG4vLyBgY29sb3JGdW5jdGlvblJlZ2V4YCBjaGVjayBpcyBuZWNlc3NhcnkgYmVjYXVzZSBjb2xvciBmdW5jdGlvbnMgY2FuIGhhdmUgcGVyY2VudGFnZXMgaW4gdGhlbSB3aGljaCB3aGljaCB3b3VsZCBiZSBpbmNvcnJlY3RseSBjbGFzc2lmaWVkIGFzIGxlbmd0aHMuXHJcbi8vIEZvciBleGFtcGxlLCBgaHNsKDAgMCUgMCUpYCB3b3VsZCBiZSBjbGFzc2lmaWVkIGFzIGEgbGVuZ3RoIHdpdGhvdXQgdGhpcyBjaGVjay5cclxuLy8gSSBjb3VsZCBhbHNvIHVzZSBsb29rYmVoaW5kIGFzc2VydGlvbiBpbiBgbGVuZ3RoVW5pdFJlZ2V4YCBidXQgdGhhdCBpc24ndCBzdXBwb3J0ZWQgd2lkZWx5IGVub3VnaC5cclxubGVuZ3RoVW5pdFJlZ2V4LnRlc3QodmFsdWUpICYmICFjb2xvckZ1bmN0aW9uUmVnZXgudGVzdCh2YWx1ZSk7XHJcbmNvbnN0IGlzTmV2ZXIgPSAoKSA9PiBmYWxzZTtcclxuY29uc3QgaXNTaGFkb3cgPSB2YWx1ZSA9PiBzaGFkb3dSZWdleC50ZXN0KHZhbHVlKTtcclxuY29uc3QgaXNJbWFnZSA9IHZhbHVlID0+IGltYWdlUmVnZXgudGVzdCh2YWx1ZSk7XHJcbmNvbnN0IHZhbGlkYXRvcnMgPSAvKiNfX1BVUkVfXyovT2JqZWN0LmRlZmluZVByb3BlcnR5KHtcclxuICBfX3Byb3RvX186IG51bGwsXHJcbiAgaXNBbnksXHJcbiAgaXNBcmJpdHJhcnlJbWFnZSxcclxuICBpc0FyYml0cmFyeUxlbmd0aCxcclxuICBpc0FyYml0cmFyeU51bWJlcixcclxuICBpc0FyYml0cmFyeVBvc2l0aW9uLFxyXG4gIGlzQXJiaXRyYXJ5U2hhZG93LFxyXG4gIGlzQXJiaXRyYXJ5U2l6ZSxcclxuICBpc0FyYml0cmFyeVZhbHVlLFxyXG4gIGlzSW50ZWdlcixcclxuICBpc0xlbmd0aCxcclxuICBpc051bWJlcixcclxuICBpc1BlcmNlbnQsXHJcbiAgaXNUc2hpcnRTaXplXHJcbn0sIFN5bWJvbC50b1N0cmluZ1RhZywge1xyXG4gIHZhbHVlOiAnTW9kdWxlJ1xyXG59KTtcclxuY29uc3QgZ2V0RGVmYXVsdENvbmZpZyA9ICgpID0+IHtcclxuICBjb25zdCBjb2xvcnMgPSBmcm9tVGhlbWUoJ2NvbG9ycycpO1xyXG4gIGNvbnN0IHNwYWNpbmcgPSBmcm9tVGhlbWUoJ3NwYWNpbmcnKTtcclxuICBjb25zdCBibHVyID0gZnJvbVRoZW1lKCdibHVyJyk7XHJcbiAgY29uc3QgYnJpZ2h0bmVzcyA9IGZyb21UaGVtZSgnYnJpZ2h0bmVzcycpO1xyXG4gIGNvbnN0IGJvcmRlckNvbG9yID0gZnJvbVRoZW1lKCdib3JkZXJDb2xvcicpO1xyXG4gIGNvbnN0IGJvcmRlclJhZGl1cyA9IGZyb21UaGVtZSgnYm9yZGVyUmFkaXVzJyk7XHJcbiAgY29uc3QgYm9yZGVyU3BhY2luZyA9IGZyb21UaGVtZSgnYm9yZGVyU3BhY2luZycpO1xyXG4gIGNvbnN0IGJvcmRlcldpZHRoID0gZnJvbVRoZW1lKCdib3JkZXJXaWR0aCcpO1xyXG4gIGNvbnN0IGNvbnRyYXN0ID0gZnJvbVRoZW1lKCdjb250cmFzdCcpO1xyXG4gIGNvbnN0IGdyYXlzY2FsZSA9IGZyb21UaGVtZSgnZ3JheXNjYWxlJyk7XHJcbiAgY29uc3QgaHVlUm90YXRlID0gZnJvbVRoZW1lKCdodWVSb3RhdGUnKTtcclxuICBjb25zdCBpbnZlcnQgPSBmcm9tVGhlbWUoJ2ludmVydCcpO1xyXG4gIGNvbnN0IGdhcCA9IGZyb21UaGVtZSgnZ2FwJyk7XHJcbiAgY29uc3QgZ3JhZGllbnRDb2xvclN0b3BzID0gZnJvbVRoZW1lKCdncmFkaWVudENvbG9yU3RvcHMnKTtcclxuICBjb25zdCBncmFkaWVudENvbG9yU3RvcFBvc2l0aW9ucyA9IGZyb21UaGVtZSgnZ3JhZGllbnRDb2xvclN0b3BQb3NpdGlvbnMnKTtcclxuICBjb25zdCBpbnNldCA9IGZyb21UaGVtZSgnaW5zZXQnKTtcclxuICBjb25zdCBtYXJnaW4gPSBmcm9tVGhlbWUoJ21hcmdpbicpO1xyXG4gIGNvbnN0IG9wYWNpdHkgPSBmcm9tVGhlbWUoJ29wYWNpdHknKTtcclxuICBjb25zdCBwYWRkaW5nID0gZnJvbVRoZW1lKCdwYWRkaW5nJyk7XHJcbiAgY29uc3Qgc2F0dXJhdGUgPSBmcm9tVGhlbWUoJ3NhdHVyYXRlJyk7XHJcbiAgY29uc3Qgc2NhbGUgPSBmcm9tVGhlbWUoJ3NjYWxlJyk7XHJcbiAgY29uc3Qgc2VwaWEgPSBmcm9tVGhlbWUoJ3NlcGlhJyk7XHJcbiAgY29uc3Qgc2tldyA9IGZyb21UaGVtZSgnc2tldycpO1xyXG4gIGNvbnN0IHNwYWNlID0gZnJvbVRoZW1lKCdzcGFjZScpO1xyXG4gIGNvbnN0IHRyYW5zbGF0ZSA9IGZyb21UaGVtZSgndHJhbnNsYXRlJyk7XHJcbiAgY29uc3QgZ2V0T3ZlcnNjcm9sbCA9ICgpID0+IFsnYXV0bycsICdjb250YWluJywgJ25vbmUnXTtcclxuICBjb25zdCBnZXRPdmVyZmxvdyA9ICgpID0+IFsnYXV0bycsICdoaWRkZW4nLCAnY2xpcCcsICd2aXNpYmxlJywgJ3Njcm9sbCddO1xyXG4gIGNvbnN0IGdldFNwYWNpbmdXaXRoQXV0b0FuZEFyYml0cmFyeSA9ICgpID0+IFsnYXV0bycsIGlzQXJiaXRyYXJ5VmFsdWUsIHNwYWNpbmddO1xyXG4gIGNvbnN0IGdldFNwYWNpbmdXaXRoQXJiaXRyYXJ5ID0gKCkgPT4gW2lzQXJiaXRyYXJ5VmFsdWUsIHNwYWNpbmddO1xyXG4gIGNvbnN0IGdldExlbmd0aFdpdGhFbXB0eUFuZEFyYml0cmFyeSA9ICgpID0+IFsnJywgaXNMZW5ndGgsIGlzQXJiaXRyYXJ5TGVuZ3RoXTtcclxuICBjb25zdCBnZXROdW1iZXJXaXRoQXV0b0FuZEFyYml0cmFyeSA9ICgpID0+IFsnYXV0bycsIGlzTnVtYmVyLCBpc0FyYml0cmFyeVZhbHVlXTtcclxuICBjb25zdCBnZXRQb3NpdGlvbnMgPSAoKSA9PiBbJ2JvdHRvbScsICdjZW50ZXInLCAnbGVmdCcsICdsZWZ0LWJvdHRvbScsICdsZWZ0LXRvcCcsICdyaWdodCcsICdyaWdodC1ib3R0b20nLCAncmlnaHQtdG9wJywgJ3RvcCddO1xyXG4gIGNvbnN0IGdldExpbmVTdHlsZXMgPSAoKSA9PiBbJ3NvbGlkJywgJ2Rhc2hlZCcsICdkb3R0ZWQnLCAnZG91YmxlJywgJ25vbmUnXTtcclxuICBjb25zdCBnZXRCbGVuZE1vZGVzID0gKCkgPT4gWydub3JtYWwnLCAnbXVsdGlwbHknLCAnc2NyZWVuJywgJ292ZXJsYXknLCAnZGFya2VuJywgJ2xpZ2h0ZW4nLCAnY29sb3ItZG9kZ2UnLCAnY29sb3ItYnVybicsICdoYXJkLWxpZ2h0JywgJ3NvZnQtbGlnaHQnLCAnZGlmZmVyZW5jZScsICdleGNsdXNpb24nLCAnaHVlJywgJ3NhdHVyYXRpb24nLCAnY29sb3InLCAnbHVtaW5vc2l0eSddO1xyXG4gIGNvbnN0IGdldEFsaWduID0gKCkgPT4gWydzdGFydCcsICdlbmQnLCAnY2VudGVyJywgJ2JldHdlZW4nLCAnYXJvdW5kJywgJ2V2ZW5seScsICdzdHJldGNoJ107XHJcbiAgY29uc3QgZ2V0WmVyb0FuZEVtcHR5ID0gKCkgPT4gWycnLCAnMCcsIGlzQXJiaXRyYXJ5VmFsdWVdO1xyXG4gIGNvbnN0IGdldEJyZWFrcyA9ICgpID0+IFsnYXV0bycsICdhdm9pZCcsICdhbGwnLCAnYXZvaWQtcGFnZScsICdwYWdlJywgJ2xlZnQnLCAncmlnaHQnLCAnY29sdW1uJ107XHJcbiAgY29uc3QgZ2V0TnVtYmVyQW5kQXJiaXRyYXJ5ID0gKCkgPT4gW2lzTnVtYmVyLCBpc0FyYml0cmFyeVZhbHVlXTtcclxuICByZXR1cm4ge1xyXG4gICAgY2FjaGVTaXplOiA1MDAsXHJcbiAgICBzZXBhcmF0b3I6ICc6JyxcclxuICAgIHRoZW1lOiB7XHJcbiAgICAgIGNvbG9yczogW2lzQW55XSxcclxuICAgICAgc3BhY2luZzogW2lzTGVuZ3RoLCBpc0FyYml0cmFyeUxlbmd0aF0sXHJcbiAgICAgIGJsdXI6IFsnbm9uZScsICcnLCBpc1RzaGlydFNpemUsIGlzQXJiaXRyYXJ5VmFsdWVdLFxyXG4gICAgICBicmlnaHRuZXNzOiBnZXROdW1iZXJBbmRBcmJpdHJhcnkoKSxcclxuICAgICAgYm9yZGVyQ29sb3I6IFtjb2xvcnNdLFxyXG4gICAgICBib3JkZXJSYWRpdXM6IFsnbm9uZScsICcnLCAnZnVsbCcsIGlzVHNoaXJ0U2l6ZSwgaXNBcmJpdHJhcnlWYWx1ZV0sXHJcbiAgICAgIGJvcmRlclNwYWNpbmc6IGdldFNwYWNpbmdXaXRoQXJiaXRyYXJ5KCksXHJcbiAgICAgIGJvcmRlcldpZHRoOiBnZXRMZW5ndGhXaXRoRW1wdHlBbmRBcmJpdHJhcnkoKSxcclxuICAgICAgY29udHJhc3Q6IGdldE51bWJlckFuZEFyYml0cmFyeSgpLFxyXG4gICAgICBncmF5c2NhbGU6IGdldFplcm9BbmRFbXB0eSgpLFxyXG4gICAgICBodWVSb3RhdGU6IGdldE51bWJlckFuZEFyYml0cmFyeSgpLFxyXG4gICAgICBpbnZlcnQ6IGdldFplcm9BbmRFbXB0eSgpLFxyXG4gICAgICBnYXA6IGdldFNwYWNpbmdXaXRoQXJiaXRyYXJ5KCksXHJcbiAgICAgIGdyYWRpZW50Q29sb3JTdG9wczogW2NvbG9yc10sXHJcbiAgICAgIGdyYWRpZW50Q29sb3JTdG9wUG9zaXRpb25zOiBbaXNQZXJjZW50LCBpc0FyYml0cmFyeUxlbmd0aF0sXHJcbiAgICAgIGluc2V0OiBnZXRTcGFjaW5nV2l0aEF1dG9BbmRBcmJpdHJhcnkoKSxcclxuICAgICAgbWFyZ2luOiBnZXRTcGFjaW5nV2l0aEF1dG9BbmRBcmJpdHJhcnkoKSxcclxuICAgICAgb3BhY2l0eTogZ2V0TnVtYmVyQW5kQXJiaXRyYXJ5KCksXHJcbiAgICAgIHBhZGRpbmc6IGdldFNwYWNpbmdXaXRoQXJiaXRyYXJ5KCksXHJcbiAgICAgIHNhdHVyYXRlOiBnZXROdW1iZXJBbmRBcmJpdHJhcnkoKSxcclxuICAgICAgc2NhbGU6IGdldE51bWJlckFuZEFyYml0cmFyeSgpLFxyXG4gICAgICBzZXBpYTogZ2V0WmVyb0FuZEVtcHR5KCksXHJcbiAgICAgIHNrZXc6IGdldE51bWJlckFuZEFyYml0cmFyeSgpLFxyXG4gICAgICBzcGFjZTogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKSxcclxuICAgICAgdHJhbnNsYXRlOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpXHJcbiAgICB9LFxyXG4gICAgY2xhc3NHcm91cHM6IHtcclxuICAgICAgLy8gTGF5b3V0XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBBc3BlY3QgUmF0aW9cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2FzcGVjdC1yYXRpb1xyXG4gICAgICAgKi9cclxuICAgICAgYXNwZWN0OiBbe1xyXG4gICAgICAgIGFzcGVjdDogWydhdXRvJywgJ3NxdWFyZScsICd2aWRlbycsIGlzQXJiaXRyYXJ5VmFsdWVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQ29udGFpbmVyXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9jb250YWluZXJcclxuICAgICAgICovXHJcbiAgICAgIGNvbnRhaW5lcjogWydjb250YWluZXInXSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIENvbHVtbnNcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2NvbHVtbnNcclxuICAgICAgICovXHJcbiAgICAgIGNvbHVtbnM6IFt7XHJcbiAgICAgICAgY29sdW1uczogW2lzVHNoaXJ0U2l6ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCcmVhayBBZnRlclxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYnJlYWstYWZ0ZXJcclxuICAgICAgICovXHJcbiAgICAgICdicmVhay1hZnRlcic6IFt7XHJcbiAgICAgICAgJ2JyZWFrLWFmdGVyJzogZ2V0QnJlYWtzKClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCcmVhayBCZWZvcmVcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JyZWFrLWJlZm9yZVxyXG4gICAgICAgKi9cclxuICAgICAgJ2JyZWFrLWJlZm9yZSc6IFt7XHJcbiAgICAgICAgJ2JyZWFrLWJlZm9yZSc6IGdldEJyZWFrcygpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQnJlYWsgSW5zaWRlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9icmVhay1pbnNpZGVcclxuICAgICAgICovXHJcbiAgICAgICdicmVhay1pbnNpZGUnOiBbe1xyXG4gICAgICAgICdicmVhay1pbnNpZGUnOiBbJ2F1dG8nLCAnYXZvaWQnLCAnYXZvaWQtcGFnZScsICdhdm9pZC1jb2x1bW4nXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJveCBEZWNvcmF0aW9uIEJyZWFrXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3gtZGVjb3JhdGlvbi1icmVha1xyXG4gICAgICAgKi9cclxuICAgICAgJ2JveC1kZWNvcmF0aW9uJzogW3tcclxuICAgICAgICAnYm94LWRlY29yYXRpb24nOiBbJ3NsaWNlJywgJ2Nsb25lJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3ggU2l6aW5nXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3gtc2l6aW5nXHJcbiAgICAgICAqL1xyXG4gICAgICBib3g6IFt7XHJcbiAgICAgICAgYm94OiBbJ2JvcmRlcicsICdjb250ZW50J11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBEaXNwbGF5XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9kaXNwbGF5XHJcbiAgICAgICAqL1xyXG4gICAgICBkaXNwbGF5OiBbJ2Jsb2NrJywgJ2lubGluZS1ibG9jaycsICdpbmxpbmUnLCAnZmxleCcsICdpbmxpbmUtZmxleCcsICd0YWJsZScsICdpbmxpbmUtdGFibGUnLCAndGFibGUtY2FwdGlvbicsICd0YWJsZS1jZWxsJywgJ3RhYmxlLWNvbHVtbicsICd0YWJsZS1jb2x1bW4tZ3JvdXAnLCAndGFibGUtZm9vdGVyLWdyb3VwJywgJ3RhYmxlLWhlYWRlci1ncm91cCcsICd0YWJsZS1yb3ctZ3JvdXAnLCAndGFibGUtcm93JywgJ2Zsb3ctcm9vdCcsICdncmlkJywgJ2lubGluZS1ncmlkJywgJ2NvbnRlbnRzJywgJ2xpc3QtaXRlbScsICdoaWRkZW4nXSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEZsb2F0c1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZmxvYXRcclxuICAgICAgICovXHJcbiAgICAgIGZsb2F0OiBbe1xyXG4gICAgICAgIGZsb2F0OiBbJ3JpZ2h0JywgJ2xlZnQnLCAnbm9uZScsICdzdGFydCcsICdlbmQnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIENsZWFyXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9jbGVhclxyXG4gICAgICAgKi9cclxuICAgICAgY2xlYXI6IFt7XHJcbiAgICAgICAgY2xlYXI6IFsnbGVmdCcsICdyaWdodCcsICdib3RoJywgJ25vbmUnLCAnc3RhcnQnLCAnZW5kJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBJc29sYXRpb25cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2lzb2xhdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgaXNvbGF0aW9uOiBbJ2lzb2xhdGUnLCAnaXNvbGF0aW9uLWF1dG8nXSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE9iamVjdCBGaXRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL29iamVjdC1maXRcclxuICAgICAgICovXHJcbiAgICAgICdvYmplY3QtZml0JzogW3tcclxuICAgICAgICBvYmplY3Q6IFsnY29udGFpbicsICdjb3ZlcicsICdmaWxsJywgJ25vbmUnLCAnc2NhbGUtZG93biddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogT2JqZWN0IFBvc2l0aW9uXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9vYmplY3QtcG9zaXRpb25cclxuICAgICAgICovXHJcbiAgICAgICdvYmplY3QtcG9zaXRpb24nOiBbe1xyXG4gICAgICAgIG9iamVjdDogWy4uLmdldFBvc2l0aW9ucygpLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE92ZXJmbG93XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9vdmVyZmxvd1xyXG4gICAgICAgKi9cclxuICAgICAgb3ZlcmZsb3c6IFt7XHJcbiAgICAgICAgb3ZlcmZsb3c6IGdldE92ZXJmbG93KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBPdmVyZmxvdyBYXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9vdmVyZmxvd1xyXG4gICAgICAgKi9cclxuICAgICAgJ292ZXJmbG93LXgnOiBbe1xyXG4gICAgICAgICdvdmVyZmxvdy14JzogZ2V0T3ZlcmZsb3coKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE92ZXJmbG93IFlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL292ZXJmbG93XHJcbiAgICAgICAqL1xyXG4gICAgICAnb3ZlcmZsb3cteSc6IFt7XHJcbiAgICAgICAgJ292ZXJmbG93LXknOiBnZXRPdmVyZmxvdygpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogT3ZlcnNjcm9sbCBCZWhhdmlvclxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb3ZlcnNjcm9sbC1iZWhhdmlvclxyXG4gICAgICAgKi9cclxuICAgICAgb3ZlcnNjcm9sbDogW3tcclxuICAgICAgICBvdmVyc2Nyb2xsOiBnZXRPdmVyc2Nyb2xsKClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBPdmVyc2Nyb2xsIEJlaGF2aW9yIFhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL292ZXJzY3JvbGwtYmVoYXZpb3JcclxuICAgICAgICovXHJcbiAgICAgICdvdmVyc2Nyb2xsLXgnOiBbe1xyXG4gICAgICAgICdvdmVyc2Nyb2xsLXgnOiBnZXRPdmVyc2Nyb2xsKClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBPdmVyc2Nyb2xsIEJlaGF2aW9yIFlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL292ZXJzY3JvbGwtYmVoYXZpb3JcclxuICAgICAgICovXHJcbiAgICAgICdvdmVyc2Nyb2xsLXknOiBbe1xyXG4gICAgICAgICdvdmVyc2Nyb2xsLXknOiBnZXRPdmVyc2Nyb2xsKClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBQb3NpdGlvblxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcG9zaXRpb25cclxuICAgICAgICovXHJcbiAgICAgIHBvc2l0aW9uOiBbJ3N0YXRpYycsICdmaXhlZCcsICdhYnNvbHV0ZScsICdyZWxhdGl2ZScsICdzdGlja3knXSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRvcCAvIFJpZ2h0IC8gQm90dG9tIC8gTGVmdFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XHJcbiAgICAgICAqL1xyXG4gICAgICBpbnNldDogW3tcclxuICAgICAgICBpbnNldDogW2luc2V0XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFJpZ2h0IC8gTGVmdFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XHJcbiAgICAgICAqL1xyXG4gICAgICAnaW5zZXQteCc6IFt7XHJcbiAgICAgICAgJ2luc2V0LXgnOiBbaW5zZXRdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVG9wIC8gQm90dG9tXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90b3AtcmlnaHQtYm90dG9tLWxlZnRcclxuICAgICAgICovXHJcbiAgICAgICdpbnNldC15JzogW3tcclxuICAgICAgICAnaW5zZXQteSc6IFtpbnNldF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTdGFydFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XHJcbiAgICAgICAqL1xyXG4gICAgICBzdGFydDogW3tcclxuICAgICAgICBzdGFydDogW2luc2V0XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEVuZFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XHJcbiAgICAgICAqL1xyXG4gICAgICBlbmQ6IFt7XHJcbiAgICAgICAgZW5kOiBbaW5zZXRdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVG9wXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90b3AtcmlnaHQtYm90dG9tLWxlZnRcclxuICAgICAgICovXHJcbiAgICAgIHRvcDogW3tcclxuICAgICAgICB0b3A6IFtpbnNldF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBSaWdodFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XHJcbiAgICAgICAqL1xyXG4gICAgICByaWdodDogW3tcclxuICAgICAgICByaWdodDogW2luc2V0XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvdHRvbVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XHJcbiAgICAgICAqL1xyXG4gICAgICBib3R0b206IFt7XHJcbiAgICAgICAgYm90dG9tOiBbaW5zZXRdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogTGVmdFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XHJcbiAgICAgICAqL1xyXG4gICAgICBsZWZ0OiBbe1xyXG4gICAgICAgIGxlZnQ6IFtpbnNldF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBWaXNpYmlsaXR5XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy92aXNpYmlsaXR5XHJcbiAgICAgICAqL1xyXG4gICAgICB2aXNpYmlsaXR5OiBbJ3Zpc2libGUnLCAnaW52aXNpYmxlJywgJ2NvbGxhcHNlJ10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBaLUluZGV4XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy96LWluZGV4XHJcbiAgICAgICAqL1xyXG4gICAgICB6OiBbe1xyXG4gICAgICAgIHo6IFsnYXV0bycsIGlzSW50ZWdlciwgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8vIEZsZXhib3ggYW5kIEdyaWRcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEZsZXggQmFzaXNcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZsZXgtYmFzaXNcclxuICAgICAgICovXHJcbiAgICAgIGJhc2lzOiBbe1xyXG4gICAgICAgIGJhc2lzOiBnZXRTcGFjaW5nV2l0aEF1dG9BbmRBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEZsZXggRGlyZWN0aW9uXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9mbGV4LWRpcmVjdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgJ2ZsZXgtZGlyZWN0aW9uJzogW3tcclxuICAgICAgICBmbGV4OiBbJ3JvdycsICdyb3ctcmV2ZXJzZScsICdjb2wnLCAnY29sLXJldmVyc2UnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEZsZXggV3JhcFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZmxleC13cmFwXHJcbiAgICAgICAqL1xyXG4gICAgICAnZmxleC13cmFwJzogW3tcclxuICAgICAgICBmbGV4OiBbJ3dyYXAnLCAnd3JhcC1yZXZlcnNlJywgJ25vd3JhcCddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogRmxleFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZmxleFxyXG4gICAgICAgKi9cclxuICAgICAgZmxleDogW3tcclxuICAgICAgICBmbGV4OiBbJzEnLCAnYXV0bycsICdpbml0aWFsJywgJ25vbmUnLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEZsZXggR3Jvd1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZmxleC1ncm93XHJcbiAgICAgICAqL1xyXG4gICAgICBncm93OiBbe1xyXG4gICAgICAgIGdyb3c6IGdldFplcm9BbmRFbXB0eSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogRmxleCBTaHJpbmtcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZsZXgtc2hyaW5rXHJcbiAgICAgICAqL1xyXG4gICAgICBzaHJpbms6IFt7XHJcbiAgICAgICAgc2hyaW5rOiBnZXRaZXJvQW5kRW1wdHkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE9yZGVyXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9vcmRlclxyXG4gICAgICAgKi9cclxuICAgICAgb3JkZXI6IFt7XHJcbiAgICAgICAgb3JkZXI6IFsnZmlyc3QnLCAnbGFzdCcsICdub25lJywgaXNJbnRlZ2VyLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEdyaWQgVGVtcGxhdGUgQ29sdW1uc1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zXHJcbiAgICAgICAqL1xyXG4gICAgICAnZ3JpZC1jb2xzJzogW3tcclxuICAgICAgICAnZ3JpZC1jb2xzJzogW2lzQW55XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEdyaWQgQ29sdW1uIFN0YXJ0IC8gRW5kXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmlkLWNvbHVtblxyXG4gICAgICAgKi9cclxuICAgICAgJ2NvbC1zdGFydC1lbmQnOiBbe1xyXG4gICAgICAgIGNvbDogWydhdXRvJywge1xyXG4gICAgICAgICAgc3BhbjogWydmdWxsJywgaXNJbnRlZ2VyLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICAgIH0sIGlzQXJiaXRyYXJ5VmFsdWVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogR3JpZCBDb2x1bW4gU3RhcnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyaWQtY29sdW1uXHJcbiAgICAgICAqL1xyXG4gICAgICAnY29sLXN0YXJ0JzogW3tcclxuICAgICAgICAnY29sLXN0YXJ0JzogZ2V0TnVtYmVyV2l0aEF1dG9BbmRBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEdyaWQgQ29sdW1uIEVuZFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ3JpZC1jb2x1bW5cclxuICAgICAgICovXHJcbiAgICAgICdjb2wtZW5kJzogW3tcclxuICAgICAgICAnY29sLWVuZCc6IGdldE51bWJlcldpdGhBdXRvQW5kQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHcmlkIFRlbXBsYXRlIFJvd3NcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyaWQtdGVtcGxhdGUtcm93c1xyXG4gICAgICAgKi9cclxuICAgICAgJ2dyaWQtcm93cyc6IFt7XHJcbiAgICAgICAgJ2dyaWQtcm93cyc6IFtpc0FueV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHcmlkIFJvdyBTdGFydCAvIEVuZFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ3JpZC1yb3dcclxuICAgICAgICovXHJcbiAgICAgICdyb3ctc3RhcnQtZW5kJzogW3tcclxuICAgICAgICByb3c6IFsnYXV0bycsIHtcclxuICAgICAgICAgIHNwYW46IFtpc0ludGVnZXIsIGlzQXJiaXRyYXJ5VmFsdWVdXHJcbiAgICAgICAgfSwgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHcmlkIFJvdyBTdGFydFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ3JpZC1yb3dcclxuICAgICAgICovXHJcbiAgICAgICdyb3ctc3RhcnQnOiBbe1xyXG4gICAgICAgICdyb3ctc3RhcnQnOiBnZXROdW1iZXJXaXRoQXV0b0FuZEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogR3JpZCBSb3cgRW5kXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmlkLXJvd1xyXG4gICAgICAgKi9cclxuICAgICAgJ3Jvdy1lbmQnOiBbe1xyXG4gICAgICAgICdyb3ctZW5kJzogZ2V0TnVtYmVyV2l0aEF1dG9BbmRBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEdyaWQgQXV0byBGbG93XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmlkLWF1dG8tZmxvd1xyXG4gICAgICAgKi9cclxuICAgICAgJ2dyaWQtZmxvdyc6IFt7XHJcbiAgICAgICAgJ2dyaWQtZmxvdyc6IFsncm93JywgJ2NvbCcsICdkZW5zZScsICdyb3ctZGVuc2UnLCAnY29sLWRlbnNlJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHcmlkIEF1dG8gQ29sdW1uc1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ3JpZC1hdXRvLWNvbHVtbnNcclxuICAgICAgICovXHJcbiAgICAgICdhdXRvLWNvbHMnOiBbe1xyXG4gICAgICAgICdhdXRvLWNvbHMnOiBbJ2F1dG8nLCAnbWluJywgJ21heCcsICdmcicsIGlzQXJiaXRyYXJ5VmFsdWVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogR3JpZCBBdXRvIFJvd3NcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyaWQtYXV0by1yb3dzXHJcbiAgICAgICAqL1xyXG4gICAgICAnYXV0by1yb3dzJzogW3tcclxuICAgICAgICAnYXV0by1yb3dzJzogWydhdXRvJywgJ21pbicsICdtYXgnLCAnZnInLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEdhcFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ2FwXHJcbiAgICAgICAqL1xyXG4gICAgICBnYXA6IFt7XHJcbiAgICAgICAgZ2FwOiBbZ2FwXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEdhcCBYXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9nYXBcclxuICAgICAgICovXHJcbiAgICAgICdnYXAteCc6IFt7XHJcbiAgICAgICAgJ2dhcC14JzogW2dhcF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHYXAgWVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ2FwXHJcbiAgICAgICAqL1xyXG4gICAgICAnZ2FwLXknOiBbe1xyXG4gICAgICAgICdnYXAteSc6IFtnYXBdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogSnVzdGlmeSBDb250ZW50XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9qdXN0aWZ5LWNvbnRlbnRcclxuICAgICAgICovXHJcbiAgICAgICdqdXN0aWZ5LWNvbnRlbnQnOiBbe1xyXG4gICAgICAgIGp1c3RpZnk6IFsnbm9ybWFsJywgLi4uZ2V0QWxpZ24oKV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBKdXN0aWZ5IEl0ZW1zXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9qdXN0aWZ5LWl0ZW1zXHJcbiAgICAgICAqL1xyXG4gICAgICAnanVzdGlmeS1pdGVtcyc6IFt7XHJcbiAgICAgICAgJ2p1c3RpZnktaXRlbXMnOiBbJ3N0YXJ0JywgJ2VuZCcsICdjZW50ZXInLCAnc3RyZXRjaCddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogSnVzdGlmeSBTZWxmXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9qdXN0aWZ5LXNlbGZcclxuICAgICAgICovXHJcbiAgICAgICdqdXN0aWZ5LXNlbGYnOiBbe1xyXG4gICAgICAgICdqdXN0aWZ5LXNlbGYnOiBbJ2F1dG8nLCAnc3RhcnQnLCAnZW5kJywgJ2NlbnRlcicsICdzdHJldGNoJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBBbGlnbiBDb250ZW50XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9hbGlnbi1jb250ZW50XHJcbiAgICAgICAqL1xyXG4gICAgICAnYWxpZ24tY29udGVudCc6IFt7XHJcbiAgICAgICAgY29udGVudDogWydub3JtYWwnLCAuLi5nZXRBbGlnbigpLCAnYmFzZWxpbmUnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEFsaWduIEl0ZW1zXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9hbGlnbi1pdGVtc1xyXG4gICAgICAgKi9cclxuICAgICAgJ2FsaWduLWl0ZW1zJzogW3tcclxuICAgICAgICBpdGVtczogWydzdGFydCcsICdlbmQnLCAnY2VudGVyJywgJ2Jhc2VsaW5lJywgJ3N0cmV0Y2gnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEFsaWduIFNlbGZcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2FsaWduLXNlbGZcclxuICAgICAgICovXHJcbiAgICAgICdhbGlnbi1zZWxmJzogW3tcclxuICAgICAgICBzZWxmOiBbJ2F1dG8nLCAnc3RhcnQnLCAnZW5kJywgJ2NlbnRlcicsICdzdHJldGNoJywgJ2Jhc2VsaW5lJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBQbGFjZSBDb250ZW50XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wbGFjZS1jb250ZW50XHJcbiAgICAgICAqL1xyXG4gICAgICAncGxhY2UtY29udGVudCc6IFt7XHJcbiAgICAgICAgJ3BsYWNlLWNvbnRlbnQnOiBbLi4uZ2V0QWxpZ24oKSwgJ2Jhc2VsaW5lJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBQbGFjZSBJdGVtc1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcGxhY2UtaXRlbXNcclxuICAgICAgICovXHJcbiAgICAgICdwbGFjZS1pdGVtcyc6IFt7XHJcbiAgICAgICAgJ3BsYWNlLWl0ZW1zJzogWydzdGFydCcsICdlbmQnLCAnY2VudGVyJywgJ2Jhc2VsaW5lJywgJ3N0cmV0Y2gnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFBsYWNlIFNlbGZcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3BsYWNlLXNlbGZcclxuICAgICAgICovXHJcbiAgICAgICdwbGFjZS1zZWxmJzogW3tcclxuICAgICAgICAncGxhY2Utc2VsZic6IFsnYXV0bycsICdzdGFydCcsICdlbmQnLCAnY2VudGVyJywgJ3N0cmV0Y2gnXVxyXG4gICAgICB9XSxcclxuICAgICAgLy8gU3BhY2luZ1xyXG4gICAgICAvKipcclxuICAgICAgICogUGFkZGluZ1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcGFkZGluZ1xyXG4gICAgICAgKi9cclxuICAgICAgcDogW3tcclxuICAgICAgICBwOiBbcGFkZGluZ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBQYWRkaW5nIFhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3BhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgIHB4OiBbe1xyXG4gICAgICAgIHB4OiBbcGFkZGluZ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBQYWRkaW5nIFlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3BhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgIHB5OiBbe1xyXG4gICAgICAgIHB5OiBbcGFkZGluZ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBQYWRkaW5nIFN0YXJ0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wYWRkaW5nXHJcbiAgICAgICAqL1xyXG4gICAgICBwczogW3tcclxuICAgICAgICBwczogW3BhZGRpbmddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUGFkZGluZyBFbmRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3BhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgIHBlOiBbe1xyXG4gICAgICAgIHBlOiBbcGFkZGluZ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBQYWRkaW5nIFRvcFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcGFkZGluZ1xyXG4gICAgICAgKi9cclxuICAgICAgcHQ6IFt7XHJcbiAgICAgICAgcHQ6IFtwYWRkaW5nXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFBhZGRpbmcgUmlnaHRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3BhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgIHByOiBbe1xyXG4gICAgICAgIHByOiBbcGFkZGluZ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBQYWRkaW5nIEJvdHRvbVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcGFkZGluZ1xyXG4gICAgICAgKi9cclxuICAgICAgcGI6IFt7XHJcbiAgICAgICAgcGI6IFtwYWRkaW5nXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFBhZGRpbmcgTGVmdFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcGFkZGluZ1xyXG4gICAgICAgKi9cclxuICAgICAgcGw6IFt7XHJcbiAgICAgICAgcGw6IFtwYWRkaW5nXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE1hcmdpblxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWFyZ2luXHJcbiAgICAgICAqL1xyXG4gICAgICBtOiBbe1xyXG4gICAgICAgIG06IFttYXJnaW5dXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogTWFyZ2luIFhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpblxyXG4gICAgICAgKi9cclxuICAgICAgbXg6IFt7XHJcbiAgICAgICAgbXg6IFttYXJnaW5dXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogTWFyZ2luIFlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpblxyXG4gICAgICAgKi9cclxuICAgICAgbXk6IFt7XHJcbiAgICAgICAgbXk6IFttYXJnaW5dXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogTWFyZ2luIFN0YXJ0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9tYXJnaW5cclxuICAgICAgICovXHJcbiAgICAgIG1zOiBbe1xyXG4gICAgICAgIG1zOiBbbWFyZ2luXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE1hcmdpbiBFbmRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpblxyXG4gICAgICAgKi9cclxuICAgICAgbWU6IFt7XHJcbiAgICAgICAgbWU6IFttYXJnaW5dXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogTWFyZ2luIFRvcFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWFyZ2luXHJcbiAgICAgICAqL1xyXG4gICAgICBtdDogW3tcclxuICAgICAgICBtdDogW21hcmdpbl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBNYXJnaW4gUmlnaHRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpblxyXG4gICAgICAgKi9cclxuICAgICAgbXI6IFt7XHJcbiAgICAgICAgbXI6IFttYXJnaW5dXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogTWFyZ2luIEJvdHRvbVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWFyZ2luXHJcbiAgICAgICAqL1xyXG4gICAgICBtYjogW3tcclxuICAgICAgICBtYjogW21hcmdpbl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBNYXJnaW4gTGVmdFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWFyZ2luXHJcbiAgICAgICAqL1xyXG4gICAgICBtbDogW3tcclxuICAgICAgICBtbDogW21hcmdpbl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTcGFjZSBCZXR3ZWVuIFhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3NwYWNlXHJcbiAgICAgICAqL1xyXG4gICAgICAnc3BhY2UteCc6IFt7XHJcbiAgICAgICAgJ3NwYWNlLXgnOiBbc3BhY2VdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU3BhY2UgQmV0d2VlbiBYIFJldmVyc2VcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3NwYWNlXHJcbiAgICAgICAqL1xyXG4gICAgICAnc3BhY2UteC1yZXZlcnNlJzogWydzcGFjZS14LXJldmVyc2UnXSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNwYWNlIEJldHdlZW4gWVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc3BhY2VcclxuICAgICAgICovXHJcbiAgICAgICdzcGFjZS15JzogW3tcclxuICAgICAgICAnc3BhY2UteSc6IFtzcGFjZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTcGFjZSBCZXR3ZWVuIFkgUmV2ZXJzZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc3BhY2VcclxuICAgICAgICovXHJcbiAgICAgICdzcGFjZS15LXJldmVyc2UnOiBbJ3NwYWNlLXktcmV2ZXJzZSddLFxyXG4gICAgICAvLyBTaXppbmdcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFdpZHRoXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy93aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgdzogW3tcclxuICAgICAgICB3OiBbJ2F1dG8nLCAnbWluJywgJ21heCcsICdmaXQnLCAnc3Z3JywgJ2x2dycsICdkdncnLCBpc0FyYml0cmFyeVZhbHVlLCBzcGFjaW5nXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE1pbi1XaWR0aFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWluLXdpZHRoXHJcbiAgICAgICAqL1xyXG4gICAgICAnbWluLXcnOiBbe1xyXG4gICAgICAgICdtaW4tdyc6IFtpc0FyYml0cmFyeVZhbHVlLCBzcGFjaW5nLCAnbWluJywgJ21heCcsICdmaXQnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE1heC1XaWR0aFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWF4LXdpZHRoXHJcbiAgICAgICAqL1xyXG4gICAgICAnbWF4LXcnOiBbe1xyXG4gICAgICAgICdtYXgtdyc6IFtpc0FyYml0cmFyeVZhbHVlLCBzcGFjaW5nLCAnbm9uZScsICdmdWxsJywgJ21pbicsICdtYXgnLCAnZml0JywgJ3Byb3NlJywge1xyXG4gICAgICAgICAgc2NyZWVuOiBbaXNUc2hpcnRTaXplXVxyXG4gICAgICAgIH0sIGlzVHNoaXJ0U2l6ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBIZWlnaHRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2hlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgaDogW3tcclxuICAgICAgICBoOiBbaXNBcmJpdHJhcnlWYWx1ZSwgc3BhY2luZywgJ2F1dG8nLCAnbWluJywgJ21heCcsICdmaXQnLCAnc3ZoJywgJ2x2aCcsICdkdmgnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE1pbi1IZWlnaHRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21pbi1oZWlnaHRcclxuICAgICAgICovXHJcbiAgICAgICdtaW4taCc6IFt7XHJcbiAgICAgICAgJ21pbi1oJzogW2lzQXJiaXRyYXJ5VmFsdWUsIHNwYWNpbmcsICdtaW4nLCAnbWF4JywgJ2ZpdCcsICdzdmgnLCAnbHZoJywgJ2R2aCddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogTWF4LUhlaWdodFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWF4LWhlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgJ21heC1oJzogW3tcclxuICAgICAgICAnbWF4LWgnOiBbaXNBcmJpdHJhcnlWYWx1ZSwgc3BhY2luZywgJ21pbicsICdtYXgnLCAnZml0JywgJ3N2aCcsICdsdmgnLCAnZHZoJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTaXplXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zaXplXHJcbiAgICAgICAqL1xyXG4gICAgICBzaXplOiBbe1xyXG4gICAgICAgIHNpemU6IFtpc0FyYml0cmFyeVZhbHVlLCBzcGFjaW5nLCAnYXV0bycsICdtaW4nLCAnbWF4JywgJ2ZpdCddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvLyBUeXBvZ3JhcGh5XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGb250IFNpemVcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZvbnQtc2l6ZVxyXG4gICAgICAgKi9cclxuICAgICAgJ2ZvbnQtc2l6ZSc6IFt7XHJcbiAgICAgICAgdGV4dDogWydiYXNlJywgaXNUc2hpcnRTaXplLCBpc0FyYml0cmFyeUxlbmd0aF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGb250IFNtb290aGluZ1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZm9udC1zbW9vdGhpbmdcclxuICAgICAgICovXHJcbiAgICAgICdmb250LXNtb290aGluZyc6IFsnYW50aWFsaWFzZWQnLCAnc3VicGl4ZWwtYW50aWFsaWFzZWQnXSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEZvbnQgU3R5bGVcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZvbnQtc3R5bGVcclxuICAgICAgICovXHJcbiAgICAgICdmb250LXN0eWxlJzogWydpdGFsaWMnLCAnbm90LWl0YWxpYyddLFxyXG4gICAgICAvKipcclxuICAgICAgICogRm9udCBXZWlnaHRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZvbnQtd2VpZ2h0XHJcbiAgICAgICAqL1xyXG4gICAgICAnZm9udC13ZWlnaHQnOiBbe1xyXG4gICAgICAgIGZvbnQ6IFsndGhpbicsICdleHRyYWxpZ2h0JywgJ2xpZ2h0JywgJ25vcm1hbCcsICdtZWRpdW0nLCAnc2VtaWJvbGQnLCAnYm9sZCcsICdleHRyYWJvbGQnLCAnYmxhY2snLCBpc0FyYml0cmFyeU51bWJlcl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGb250IEZhbWlseVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZm9udC1mYW1pbHlcclxuICAgICAgICovXHJcbiAgICAgICdmb250LWZhbWlseSc6IFt7XHJcbiAgICAgICAgZm9udDogW2lzQW55XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEZvbnQgVmFyaWFudCBOdW1lcmljXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9mb250LXZhcmlhbnQtbnVtZXJpY1xyXG4gICAgICAgKi9cclxuICAgICAgJ2Z2bi1ub3JtYWwnOiBbJ25vcm1hbC1udW1zJ10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGb250IFZhcmlhbnQgTnVtZXJpY1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZm9udC12YXJpYW50LW51bWVyaWNcclxuICAgICAgICovXHJcbiAgICAgICdmdm4tb3JkaW5hbCc6IFsnb3JkaW5hbCddLFxyXG4gICAgICAvKipcclxuICAgICAgICogRm9udCBWYXJpYW50IE51bWVyaWNcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZvbnQtdmFyaWFudC1udW1lcmljXHJcbiAgICAgICAqL1xyXG4gICAgICAnZnZuLXNsYXNoZWQtemVybyc6IFsnc2xhc2hlZC16ZXJvJ10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGb250IFZhcmlhbnQgTnVtZXJpY1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZm9udC12YXJpYW50LW51bWVyaWNcclxuICAgICAgICovXHJcbiAgICAgICdmdm4tZmlndXJlJzogWydsaW5pbmctbnVtcycsICdvbGRzdHlsZS1udW1zJ10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGb250IFZhcmlhbnQgTnVtZXJpY1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZm9udC12YXJpYW50LW51bWVyaWNcclxuICAgICAgICovXHJcbiAgICAgICdmdm4tc3BhY2luZyc6IFsncHJvcG9ydGlvbmFsLW51bXMnLCAndGFidWxhci1udW1zJ10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGb250IFZhcmlhbnQgTnVtZXJpY1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZm9udC12YXJpYW50LW51bWVyaWNcclxuICAgICAgICovXHJcbiAgICAgICdmdm4tZnJhY3Rpb24nOiBbJ2RpYWdvbmFsLWZyYWN0aW9ucycsICdzdGFja2VkLWZyYWN0aW9ucyddLFxyXG4gICAgICAvKipcclxuICAgICAgICogTGV0dGVyIFNwYWNpbmdcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2xldHRlci1zcGFjaW5nXHJcbiAgICAgICAqL1xyXG4gICAgICB0cmFja2luZzogW3tcclxuICAgICAgICB0cmFja2luZzogWyd0aWdodGVyJywgJ3RpZ2h0JywgJ25vcm1hbCcsICd3aWRlJywgJ3dpZGVyJywgJ3dpZGVzdCcsIGlzQXJiaXRyYXJ5VmFsdWVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogTGluZSBDbGFtcFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbGluZS1jbGFtcFxyXG4gICAgICAgKi9cclxuICAgICAgJ2xpbmUtY2xhbXAnOiBbe1xyXG4gICAgICAgICdsaW5lLWNsYW1wJzogWydub25lJywgaXNOdW1iZXIsIGlzQXJiaXRyYXJ5TnVtYmVyXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIExpbmUgSGVpZ2h0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9saW5lLWhlaWdodFxyXG4gICAgICAgKi9cclxuICAgICAgbGVhZGluZzogW3tcclxuICAgICAgICBsZWFkaW5nOiBbJ25vbmUnLCAndGlnaHQnLCAnc251ZycsICdub3JtYWwnLCAncmVsYXhlZCcsICdsb29zZScsIGlzTGVuZ3RoLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIExpc3QgU3R5bGUgSW1hZ2VcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2xpc3Qtc3R5bGUtaW1hZ2VcclxuICAgICAgICovXHJcbiAgICAgICdsaXN0LWltYWdlJzogW3tcclxuICAgICAgICAnbGlzdC1pbWFnZSc6IFsnbm9uZScsIGlzQXJiaXRyYXJ5VmFsdWVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogTGlzdCBTdHlsZSBUeXBlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9saXN0LXN0eWxlLXR5cGVcclxuICAgICAgICovXHJcbiAgICAgICdsaXN0LXN0eWxlLXR5cGUnOiBbe1xyXG4gICAgICAgIGxpc3Q6IFsnbm9uZScsICdkaXNjJywgJ2RlY2ltYWwnLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIExpc3QgU3R5bGUgUG9zaXRpb25cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2xpc3Qtc3R5bGUtcG9zaXRpb25cclxuICAgICAgICovXHJcbiAgICAgICdsaXN0LXN0eWxlLXBvc2l0aW9uJzogW3tcclxuICAgICAgICBsaXN0OiBbJ2luc2lkZScsICdvdXRzaWRlJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBQbGFjZWhvbGRlciBDb2xvclxyXG4gICAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSBUYWlsd2luZCBDU1MgdjMuMC4wXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wbGFjZWhvbGRlci1jb2xvclxyXG4gICAgICAgKi9cclxuICAgICAgJ3BsYWNlaG9sZGVyLWNvbG9yJzogW3tcclxuICAgICAgICBwbGFjZWhvbGRlcjogW2NvbG9yc11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBQbGFjZWhvbGRlciBPcGFjaXR5XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wbGFjZWhvbGRlci1vcGFjaXR5XHJcbiAgICAgICAqL1xyXG4gICAgICAncGxhY2Vob2xkZXItb3BhY2l0eSc6IFt7XHJcbiAgICAgICAgJ3BsYWNlaG9sZGVyLW9wYWNpdHknOiBbb3BhY2l0eV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUZXh0IEFsaWdubWVudFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdGV4dC1hbGlnblxyXG4gICAgICAgKi9cclxuICAgICAgJ3RleHQtYWxpZ25tZW50JzogW3tcclxuICAgICAgICB0ZXh0OiBbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0JywgJ2p1c3RpZnknLCAnc3RhcnQnLCAnZW5kJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUZXh0IENvbG9yXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90ZXh0LWNvbG9yXHJcbiAgICAgICAqL1xyXG4gICAgICAndGV4dC1jb2xvcic6IFt7XHJcbiAgICAgICAgdGV4dDogW2NvbG9yc11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUZXh0IE9wYWNpdHlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RleHQtb3BhY2l0eVxyXG4gICAgICAgKi9cclxuICAgICAgJ3RleHQtb3BhY2l0eSc6IFt7XHJcbiAgICAgICAgJ3RleHQtb3BhY2l0eSc6IFtvcGFjaXR5XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRleHQgRGVjb3JhdGlvblxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdGV4dC1kZWNvcmF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICAndGV4dC1kZWNvcmF0aW9uJzogWyd1bmRlcmxpbmUnLCAnb3ZlcmxpbmUnLCAnbGluZS10aHJvdWdoJywgJ25vLXVuZGVybGluZSddLFxyXG4gICAgICAvKipcclxuICAgICAgICogVGV4dCBEZWNvcmF0aW9uIFN0eWxlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90ZXh0LWRlY29yYXRpb24tc3R5bGVcclxuICAgICAgICovXHJcbiAgICAgICd0ZXh0LWRlY29yYXRpb24tc3R5bGUnOiBbe1xyXG4gICAgICAgIGRlY29yYXRpb246IFsuLi5nZXRMaW5lU3R5bGVzKCksICd3YXZ5J11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUZXh0IERlY29yYXRpb24gVGhpY2tuZXNzXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90ZXh0LWRlY29yYXRpb24tdGhpY2tuZXNzXHJcbiAgICAgICAqL1xyXG4gICAgICAndGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzcyc6IFt7XHJcbiAgICAgICAgZGVjb3JhdGlvbjogWydhdXRvJywgJ2Zyb20tZm9udCcsIGlzTGVuZ3RoLCBpc0FyYml0cmFyeUxlbmd0aF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUZXh0IFVuZGVybGluZSBPZmZzZXRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RleHQtdW5kZXJsaW5lLW9mZnNldFxyXG4gICAgICAgKi9cclxuICAgICAgJ3VuZGVybGluZS1vZmZzZXQnOiBbe1xyXG4gICAgICAgICd1bmRlcmxpbmUtb2Zmc2V0JzogWydhdXRvJywgaXNMZW5ndGgsIGlzQXJiaXRyYXJ5VmFsdWVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVGV4dCBEZWNvcmF0aW9uIENvbG9yXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90ZXh0LWRlY29yYXRpb24tY29sb3JcclxuICAgICAgICovXHJcbiAgICAgICd0ZXh0LWRlY29yYXRpb24tY29sb3InOiBbe1xyXG4gICAgICAgIGRlY29yYXRpb246IFtjb2xvcnNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVGV4dCBUcmFuc2Zvcm1cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RleHQtdHJhbnNmb3JtXHJcbiAgICAgICAqL1xyXG4gICAgICAndGV4dC10cmFuc2Zvcm0nOiBbJ3VwcGVyY2FzZScsICdsb3dlcmNhc2UnLCAnY2FwaXRhbGl6ZScsICdub3JtYWwtY2FzZSddLFxyXG4gICAgICAvKipcclxuICAgICAgICogVGV4dCBPdmVyZmxvd1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdGV4dC1vdmVyZmxvd1xyXG4gICAgICAgKi9cclxuICAgICAgJ3RleHQtb3ZlcmZsb3cnOiBbJ3RydW5jYXRlJywgJ3RleHQtZWxsaXBzaXMnLCAndGV4dC1jbGlwJ10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUZXh0IFdyYXBcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RleHQtd3JhcFxyXG4gICAgICAgKi9cclxuICAgICAgJ3RleHQtd3JhcCc6IFt7XHJcbiAgICAgICAgdGV4dDogWyd3cmFwJywgJ25vd3JhcCcsICdiYWxhbmNlJywgJ3ByZXR0eSddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVGV4dCBJbmRlbnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RleHQtaW5kZW50XHJcbiAgICAgICAqL1xyXG4gICAgICBpbmRlbnQ6IFt7XHJcbiAgICAgICAgaW5kZW50OiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVmVydGljYWwgQWxpZ25tZW50XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy92ZXJ0aWNhbC1hbGlnblxyXG4gICAgICAgKi9cclxuICAgICAgJ3ZlcnRpY2FsLWFsaWduJzogW3tcclxuICAgICAgICBhbGlnbjogWydiYXNlbGluZScsICd0b3AnLCAnbWlkZGxlJywgJ2JvdHRvbScsICd0ZXh0LXRvcCcsICd0ZXh0LWJvdHRvbScsICdzdWInLCAnc3VwZXInLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFdoaXRlc3BhY2VcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3doaXRlc3BhY2VcclxuICAgICAgICovXHJcbiAgICAgIHdoaXRlc3BhY2U6IFt7XHJcbiAgICAgICAgd2hpdGVzcGFjZTogWydub3JtYWwnLCAnbm93cmFwJywgJ3ByZScsICdwcmUtbGluZScsICdwcmUtd3JhcCcsICdicmVhay1zcGFjZXMnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFdvcmQgQnJlYWtcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3dvcmQtYnJlYWtcclxuICAgICAgICovXHJcbiAgICAgIGJyZWFrOiBbe1xyXG4gICAgICAgIGJyZWFrOiBbJ25vcm1hbCcsICd3b3JkcycsICdhbGwnLCAna2VlcCddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogSHlwaGVuc1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvaHlwaGVuc1xyXG4gICAgICAgKi9cclxuICAgICAgaHlwaGVuczogW3tcclxuICAgICAgICBoeXBoZW5zOiBbJ25vbmUnLCAnbWFudWFsJywgJ2F1dG8nXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIENvbnRlbnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2NvbnRlbnRcclxuICAgICAgICovXHJcbiAgICAgIGNvbnRlbnQ6IFt7XHJcbiAgICAgICAgY29udGVudDogWydub25lJywgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8vIEJhY2tncm91bmRzXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCYWNrZ3JvdW5kIEF0dGFjaG1lbnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tncm91bmQtYXR0YWNobWVudFxyXG4gICAgICAgKi9cclxuICAgICAgJ2JnLWF0dGFjaG1lbnQnOiBbe1xyXG4gICAgICAgIGJnOiBbJ2ZpeGVkJywgJ2xvY2FsJywgJ3Njcm9sbCddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQmFja2dyb3VuZCBDbGlwXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZ3JvdW5kLWNsaXBcclxuICAgICAgICovXHJcbiAgICAgICdiZy1jbGlwJzogW3tcclxuICAgICAgICAnYmctY2xpcCc6IFsnYm9yZGVyJywgJ3BhZGRpbmcnLCAnY29udGVudCcsICd0ZXh0J11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCYWNrZ3JvdW5kIE9wYWNpdHlcclxuICAgICAgICogQGRlcHJlY2F0ZWQgc2luY2UgVGFpbHdpbmQgQ1NTIHYzLjAuMFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2dyb3VuZC1vcGFjaXR5XHJcbiAgICAgICAqL1xyXG4gICAgICAnYmctb3BhY2l0eSc6IFt7XHJcbiAgICAgICAgJ2JnLW9wYWNpdHknOiBbb3BhY2l0eV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCYWNrZ3JvdW5kIE9yaWdpblxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2dyb3VuZC1vcmlnaW5cclxuICAgICAgICovXHJcbiAgICAgICdiZy1vcmlnaW4nOiBbe1xyXG4gICAgICAgICdiZy1vcmlnaW4nOiBbJ2JvcmRlcicsICdwYWRkaW5nJywgJ2NvbnRlbnQnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJhY2tncm91bmQgUG9zaXRpb25cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tncm91bmQtcG9zaXRpb25cclxuICAgICAgICovXHJcbiAgICAgICdiZy1wb3NpdGlvbic6IFt7XHJcbiAgICAgICAgYmc6IFsuLi5nZXRQb3NpdGlvbnMoKSwgaXNBcmJpdHJhcnlQb3NpdGlvbl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCYWNrZ3JvdW5kIFJlcGVhdFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2dyb3VuZC1yZXBlYXRcclxuICAgICAgICovXHJcbiAgICAgICdiZy1yZXBlYXQnOiBbe1xyXG4gICAgICAgIGJnOiBbJ25vLXJlcGVhdCcsIHtcclxuICAgICAgICAgIHJlcGVhdDogWycnLCAneCcsICd5JywgJ3JvdW5kJywgJ3NwYWNlJ11cclxuICAgICAgICB9XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJhY2tncm91bmQgU2l6ZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2dyb3VuZC1zaXplXHJcbiAgICAgICAqL1xyXG4gICAgICAnYmctc2l6ZSc6IFt7XHJcbiAgICAgICAgYmc6IFsnYXV0bycsICdjb3ZlcicsICdjb250YWluJywgaXNBcmJpdHJhcnlTaXplXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJhY2tncm91bmQgSW1hZ2VcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tncm91bmQtaW1hZ2VcclxuICAgICAgICovXHJcbiAgICAgICdiZy1pbWFnZSc6IFt7XHJcbiAgICAgICAgYmc6IFsnbm9uZScsIHtcclxuICAgICAgICAgICdncmFkaWVudC10byc6IFsndCcsICd0cicsICdyJywgJ2JyJywgJ2InLCAnYmwnLCAnbCcsICd0bCddXHJcbiAgICAgICAgfSwgaXNBcmJpdHJhcnlJbWFnZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCYWNrZ3JvdW5kIENvbG9yXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZ3JvdW5kLWNvbG9yXHJcbiAgICAgICAqL1xyXG4gICAgICAnYmctY29sb3InOiBbe1xyXG4gICAgICAgIGJnOiBbY29sb3JzXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEdyYWRpZW50IENvbG9yIFN0b3BzIEZyb20gUG9zaXRpb25cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyYWRpZW50LWNvbG9yLXN0b3BzXHJcbiAgICAgICAqL1xyXG4gICAgICAnZ3JhZGllbnQtZnJvbS1wb3MnOiBbe1xyXG4gICAgICAgIGZyb206IFtncmFkaWVudENvbG9yU3RvcFBvc2l0aW9uc11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHcmFkaWVudCBDb2xvciBTdG9wcyBWaWEgUG9zaXRpb25cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyYWRpZW50LWNvbG9yLXN0b3BzXHJcbiAgICAgICAqL1xyXG4gICAgICAnZ3JhZGllbnQtdmlhLXBvcyc6IFt7XHJcbiAgICAgICAgdmlhOiBbZ3JhZGllbnRDb2xvclN0b3BQb3NpdGlvbnNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogR3JhZGllbnQgQ29sb3IgU3RvcHMgVG8gUG9zaXRpb25cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyYWRpZW50LWNvbG9yLXN0b3BzXHJcbiAgICAgICAqL1xyXG4gICAgICAnZ3JhZGllbnQtdG8tcG9zJzogW3tcclxuICAgICAgICB0bzogW2dyYWRpZW50Q29sb3JTdG9wUG9zaXRpb25zXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEdyYWRpZW50IENvbG9yIFN0b3BzIEZyb21cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyYWRpZW50LWNvbG9yLXN0b3BzXHJcbiAgICAgICAqL1xyXG4gICAgICAnZ3JhZGllbnQtZnJvbSc6IFt7XHJcbiAgICAgICAgZnJvbTogW2dyYWRpZW50Q29sb3JTdG9wc11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHcmFkaWVudCBDb2xvciBTdG9wcyBWaWFcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyYWRpZW50LWNvbG9yLXN0b3BzXHJcbiAgICAgICAqL1xyXG4gICAgICAnZ3JhZGllbnQtdmlhJzogW3tcclxuICAgICAgICB2aWE6IFtncmFkaWVudENvbG9yU3RvcHNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogR3JhZGllbnQgQ29sb3IgU3RvcHMgVG9cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyYWRpZW50LWNvbG9yLXN0b3BzXHJcbiAgICAgICAqL1xyXG4gICAgICAnZ3JhZGllbnQtdG8nOiBbe1xyXG4gICAgICAgIHRvOiBbZ3JhZGllbnRDb2xvclN0b3BzXVxyXG4gICAgICB9XSxcclxuICAgICAgLy8gQm9yZGVyc1xyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFJhZGl1c1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXJhZGl1c1xyXG4gICAgICAgKi9cclxuICAgICAgcm91bmRlZDogW3tcclxuICAgICAgICByb3VuZGVkOiBbYm9yZGVyUmFkaXVzXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBSYWRpdXMgU3RhcnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1yYWRpdXNcclxuICAgICAgICovXHJcbiAgICAgICdyb3VuZGVkLXMnOiBbe1xyXG4gICAgICAgICdyb3VuZGVkLXMnOiBbYm9yZGVyUmFkaXVzXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBSYWRpdXMgRW5kXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItcmFkaXVzXHJcbiAgICAgICAqL1xyXG4gICAgICAncm91bmRlZC1lJzogW3tcclxuICAgICAgICAncm91bmRlZC1lJzogW2JvcmRlclJhZGl1c11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgUmFkaXVzIFRvcFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXJhZGl1c1xyXG4gICAgICAgKi9cclxuICAgICAgJ3JvdW5kZWQtdCc6IFt7XHJcbiAgICAgICAgJ3JvdW5kZWQtdCc6IFtib3JkZXJSYWRpdXNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFJhZGl1cyBSaWdodFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXJhZGl1c1xyXG4gICAgICAgKi9cclxuICAgICAgJ3JvdW5kZWQtcic6IFt7XHJcbiAgICAgICAgJ3JvdW5kZWQtcic6IFtib3JkZXJSYWRpdXNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFJhZGl1cyBCb3R0b21cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1yYWRpdXNcclxuICAgICAgICovXHJcbiAgICAgICdyb3VuZGVkLWInOiBbe1xyXG4gICAgICAgICdyb3VuZGVkLWInOiBbYm9yZGVyUmFkaXVzXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBSYWRpdXMgTGVmdFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXJhZGl1c1xyXG4gICAgICAgKi9cclxuICAgICAgJ3JvdW5kZWQtbCc6IFt7XHJcbiAgICAgICAgJ3JvdW5kZWQtbCc6IFtib3JkZXJSYWRpdXNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFJhZGl1cyBTdGFydCBTdGFydFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXJhZGl1c1xyXG4gICAgICAgKi9cclxuICAgICAgJ3JvdW5kZWQtc3MnOiBbe1xyXG4gICAgICAgICdyb3VuZGVkLXNzJzogW2JvcmRlclJhZGl1c11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgUmFkaXVzIFN0YXJ0IEVuZFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXJhZGl1c1xyXG4gICAgICAgKi9cclxuICAgICAgJ3JvdW5kZWQtc2UnOiBbe1xyXG4gICAgICAgICdyb3VuZGVkLXNlJzogW2JvcmRlclJhZGl1c11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgUmFkaXVzIEVuZCBFbmRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1yYWRpdXNcclxuICAgICAgICovXHJcbiAgICAgICdyb3VuZGVkLWVlJzogW3tcclxuICAgICAgICAncm91bmRlZC1lZSc6IFtib3JkZXJSYWRpdXNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFJhZGl1cyBFbmQgU3RhcnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1yYWRpdXNcclxuICAgICAgICovXHJcbiAgICAgICdyb3VuZGVkLWVzJzogW3tcclxuICAgICAgICAncm91bmRlZC1lcyc6IFtib3JkZXJSYWRpdXNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFJhZGl1cyBUb3AgTGVmdFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXJhZGl1c1xyXG4gICAgICAgKi9cclxuICAgICAgJ3JvdW5kZWQtdGwnOiBbe1xyXG4gICAgICAgICdyb3VuZGVkLXRsJzogW2JvcmRlclJhZGl1c11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgUmFkaXVzIFRvcCBSaWdodFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXJhZGl1c1xyXG4gICAgICAgKi9cclxuICAgICAgJ3JvdW5kZWQtdHInOiBbe1xyXG4gICAgICAgICdyb3VuZGVkLXRyJzogW2JvcmRlclJhZGl1c11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgUmFkaXVzIEJvdHRvbSBSaWdodFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXJhZGl1c1xyXG4gICAgICAgKi9cclxuICAgICAgJ3JvdW5kZWQtYnInOiBbe1xyXG4gICAgICAgICdyb3VuZGVkLWJyJzogW2JvcmRlclJhZGl1c11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgUmFkaXVzIEJvdHRvbSBMZWZ0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItcmFkaXVzXHJcbiAgICAgICAqL1xyXG4gICAgICAncm91bmRlZC1ibCc6IFt7XHJcbiAgICAgICAgJ3JvdW5kZWQtYmwnOiBbYm9yZGVyUmFkaXVzXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBXaWR0aFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoXHJcbiAgICAgICAqL1xyXG4gICAgICAnYm9yZGVyLXcnOiBbe1xyXG4gICAgICAgIGJvcmRlcjogW2JvcmRlcldpZHRoXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBXaWR0aCBYXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItd2lkdGhcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItdy14JzogW3tcclxuICAgICAgICAnYm9yZGVyLXgnOiBbYm9yZGVyV2lkdGhdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFdpZHRoIFlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci13aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgJ2JvcmRlci13LXknOiBbe1xyXG4gICAgICAgICdib3JkZXIteSc6IFtib3JkZXJXaWR0aF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgV2lkdGggU3RhcnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci13aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgJ2JvcmRlci13LXMnOiBbe1xyXG4gICAgICAgICdib3JkZXItcyc6IFtib3JkZXJXaWR0aF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgV2lkdGggRW5kXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItd2lkdGhcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItdy1lJzogW3tcclxuICAgICAgICAnYm9yZGVyLWUnOiBbYm9yZGVyV2lkdGhdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFdpZHRoIFRvcFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoXHJcbiAgICAgICAqL1xyXG4gICAgICAnYm9yZGVyLXctdCc6IFt7XHJcbiAgICAgICAgJ2JvcmRlci10JzogW2JvcmRlcldpZHRoXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBXaWR0aCBSaWdodFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoXHJcbiAgICAgICAqL1xyXG4gICAgICAnYm9yZGVyLXctcic6IFt7XHJcbiAgICAgICAgJ2JvcmRlci1yJzogW2JvcmRlcldpZHRoXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBXaWR0aCBCb3R0b21cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci13aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgJ2JvcmRlci13LWInOiBbe1xyXG4gICAgICAgICdib3JkZXItYic6IFtib3JkZXJXaWR0aF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgV2lkdGggTGVmdFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoXHJcbiAgICAgICAqL1xyXG4gICAgICAnYm9yZGVyLXctbCc6IFt7XHJcbiAgICAgICAgJ2JvcmRlci1sJzogW2JvcmRlcldpZHRoXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBPcGFjaXR5XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItb3BhY2l0eVxyXG4gICAgICAgKi9cclxuICAgICAgJ2JvcmRlci1vcGFjaXR5JzogW3tcclxuICAgICAgICAnYm9yZGVyLW9wYWNpdHknOiBbb3BhY2l0eV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgU3R5bGVcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1zdHlsZVxyXG4gICAgICAgKi9cclxuICAgICAgJ2JvcmRlci1zdHlsZSc6IFt7XHJcbiAgICAgICAgYm9yZGVyOiBbLi4uZ2V0TGluZVN0eWxlcygpLCAnaGlkZGVuJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBEaXZpZGUgV2lkdGggWFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZGl2aWRlLXdpZHRoXHJcbiAgICAgICAqL1xyXG4gICAgICAnZGl2aWRlLXgnOiBbe1xyXG4gICAgICAgICdkaXZpZGUteCc6IFtib3JkZXJXaWR0aF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBEaXZpZGUgV2lkdGggWCBSZXZlcnNlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9kaXZpZGUtd2lkdGhcclxuICAgICAgICovXHJcbiAgICAgICdkaXZpZGUteC1yZXZlcnNlJzogWydkaXZpZGUteC1yZXZlcnNlJ10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBEaXZpZGUgV2lkdGggWVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZGl2aWRlLXdpZHRoXHJcbiAgICAgICAqL1xyXG4gICAgICAnZGl2aWRlLXknOiBbe1xyXG4gICAgICAgICdkaXZpZGUteSc6IFtib3JkZXJXaWR0aF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBEaXZpZGUgV2lkdGggWSBSZXZlcnNlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9kaXZpZGUtd2lkdGhcclxuICAgICAgICovXHJcbiAgICAgICdkaXZpZGUteS1yZXZlcnNlJzogWydkaXZpZGUteS1yZXZlcnNlJ10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBEaXZpZGUgT3BhY2l0eVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZGl2aWRlLW9wYWNpdHlcclxuICAgICAgICovXHJcbiAgICAgICdkaXZpZGUtb3BhY2l0eSc6IFt7XHJcbiAgICAgICAgJ2RpdmlkZS1vcGFjaXR5JzogW29wYWNpdHldXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogRGl2aWRlIFN0eWxlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9kaXZpZGUtc3R5bGVcclxuICAgICAgICovXHJcbiAgICAgICdkaXZpZGUtc3R5bGUnOiBbe1xyXG4gICAgICAgIGRpdmlkZTogZ2V0TGluZVN0eWxlcygpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIENvbG9yXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItY29sb3JcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItY29sb3InOiBbe1xyXG4gICAgICAgIGJvcmRlcjogW2JvcmRlckNvbG9yXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBDb2xvciBYXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItY29sb3JcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItY29sb3IteCc6IFt7XHJcbiAgICAgICAgJ2JvcmRlci14JzogW2JvcmRlckNvbG9yXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBDb2xvciBZXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItY29sb3JcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItY29sb3IteSc6IFt7XHJcbiAgICAgICAgJ2JvcmRlci15JzogW2JvcmRlckNvbG9yXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBDb2xvciBTXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItY29sb3JcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItY29sb3Itcyc6IFt7XHJcbiAgICAgICAgJ2JvcmRlci1zJzogW2JvcmRlckNvbG9yXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBDb2xvciBFXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItY29sb3JcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItY29sb3ItZSc6IFt7XHJcbiAgICAgICAgJ2JvcmRlci1lJzogW2JvcmRlckNvbG9yXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBDb2xvciBUb3BcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1jb2xvclxyXG4gICAgICAgKi9cclxuICAgICAgJ2JvcmRlci1jb2xvci10JzogW3tcclxuICAgICAgICAnYm9yZGVyLXQnOiBbYm9yZGVyQ29sb3JdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIENvbG9yIFJpZ2h0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItY29sb3JcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItY29sb3Itcic6IFt7XHJcbiAgICAgICAgJ2JvcmRlci1yJzogW2JvcmRlckNvbG9yXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBDb2xvciBCb3R0b21cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1jb2xvclxyXG4gICAgICAgKi9cclxuICAgICAgJ2JvcmRlci1jb2xvci1iJzogW3tcclxuICAgICAgICAnYm9yZGVyLWInOiBbYm9yZGVyQ29sb3JdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIENvbG9yIExlZnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1jb2xvclxyXG4gICAgICAgKi9cclxuICAgICAgJ2JvcmRlci1jb2xvci1sJzogW3tcclxuICAgICAgICAnYm9yZGVyLWwnOiBbYm9yZGVyQ29sb3JdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogRGl2aWRlIENvbG9yXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9kaXZpZGUtY29sb3JcclxuICAgICAgICovXHJcbiAgICAgICdkaXZpZGUtY29sb3InOiBbe1xyXG4gICAgICAgIGRpdmlkZTogW2JvcmRlckNvbG9yXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE91dGxpbmUgU3R5bGVcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL291dGxpbmUtc3R5bGVcclxuICAgICAgICovXHJcbiAgICAgICdvdXRsaW5lLXN0eWxlJzogW3tcclxuICAgICAgICBvdXRsaW5lOiBbJycsIC4uLmdldExpbmVTdHlsZXMoKV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBPdXRsaW5lIE9mZnNldFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb3V0bGluZS1vZmZzZXRcclxuICAgICAgICovXHJcbiAgICAgICdvdXRsaW5lLW9mZnNldCc6IFt7XHJcbiAgICAgICAgJ291dGxpbmUtb2Zmc2V0JzogW2lzTGVuZ3RoLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE91dGxpbmUgV2lkdGhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL291dGxpbmUtd2lkdGhcclxuICAgICAgICovXHJcbiAgICAgICdvdXRsaW5lLXcnOiBbe1xyXG4gICAgICAgIG91dGxpbmU6IFtpc0xlbmd0aCwgaXNBcmJpdHJhcnlMZW5ndGhdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogT3V0bGluZSBDb2xvclxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb3V0bGluZS1jb2xvclxyXG4gICAgICAgKi9cclxuICAgICAgJ291dGxpbmUtY29sb3InOiBbe1xyXG4gICAgICAgIG91dGxpbmU6IFtjb2xvcnNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUmluZyBXaWR0aFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcmluZy13aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgJ3Jpbmctdyc6IFt7XHJcbiAgICAgICAgcmluZzogZ2V0TGVuZ3RoV2l0aEVtcHR5QW5kQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBSaW5nIFdpZHRoIEluc2V0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9yaW5nLXdpZHRoXHJcbiAgICAgICAqL1xyXG4gICAgICAncmluZy13LWluc2V0JzogWydyaW5nLWluc2V0J10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBSaW5nIENvbG9yXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9yaW5nLWNvbG9yXHJcbiAgICAgICAqL1xyXG4gICAgICAncmluZy1jb2xvcic6IFt7XHJcbiAgICAgICAgcmluZzogW2NvbG9yc11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBSaW5nIE9wYWNpdHlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Jpbmctb3BhY2l0eVxyXG4gICAgICAgKi9cclxuICAgICAgJ3Jpbmctb3BhY2l0eSc6IFt7XHJcbiAgICAgICAgJ3Jpbmctb3BhY2l0eSc6IFtvcGFjaXR5XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFJpbmcgT2Zmc2V0IFdpZHRoXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9yaW5nLW9mZnNldC13aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgJ3Jpbmctb2Zmc2V0LXcnOiBbe1xyXG4gICAgICAgICdyaW5nLW9mZnNldCc6IFtpc0xlbmd0aCwgaXNBcmJpdHJhcnlMZW5ndGhdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogUmluZyBPZmZzZXQgQ29sb3JcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Jpbmctb2Zmc2V0LWNvbG9yXHJcbiAgICAgICAqL1xyXG4gICAgICAncmluZy1vZmZzZXQtY29sb3InOiBbe1xyXG4gICAgICAgICdyaW5nLW9mZnNldCc6IFtjb2xvcnNdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvLyBFZmZlY3RzXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3ggU2hhZG93XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3gtc2hhZG93XHJcbiAgICAgICAqL1xyXG4gICAgICBzaGFkb3c6IFt7XHJcbiAgICAgICAgc2hhZG93OiBbJycsICdpbm5lcicsICdub25lJywgaXNUc2hpcnRTaXplLCBpc0FyYml0cmFyeVNoYWRvd11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3ggU2hhZG93IENvbG9yXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3gtc2hhZG93LWNvbG9yXHJcbiAgICAgICAqL1xyXG4gICAgICAnc2hhZG93LWNvbG9yJzogW3tcclxuICAgICAgICBzaGFkb3c6IFtpc0FueV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBPcGFjaXR5XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9vcGFjaXR5XHJcbiAgICAgICAqL1xyXG4gICAgICBvcGFjaXR5OiBbe1xyXG4gICAgICAgIG9wYWNpdHk6IFtvcGFjaXR5XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIE1peCBCbGVuZCBNb2RlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9taXgtYmxlbmQtbW9kZVxyXG4gICAgICAgKi9cclxuICAgICAgJ21peC1ibGVuZCc6IFt7XHJcbiAgICAgICAgJ21peC1ibGVuZCc6IFsuLi5nZXRCbGVuZE1vZGVzKCksICdwbHVzLWxpZ2h0ZXInLCAncGx1cy1kYXJrZXInXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJhY2tncm91bmQgQmxlbmQgTW9kZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2dyb3VuZC1ibGVuZC1tb2RlXHJcbiAgICAgICAqL1xyXG4gICAgICAnYmctYmxlbmQnOiBbe1xyXG4gICAgICAgICdiZy1ibGVuZCc6IGdldEJsZW5kTW9kZXMoKVxyXG4gICAgICB9XSxcclxuICAgICAgLy8gRmlsdGVyc1xyXG4gICAgICAvKipcclxuICAgICAgICogRmlsdGVyXHJcbiAgICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIFRhaWx3aW5kIENTUyB2My4wLjBcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZpbHRlclxyXG4gICAgICAgKi9cclxuICAgICAgZmlsdGVyOiBbe1xyXG4gICAgICAgIGZpbHRlcjogWycnLCAnbm9uZSddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQmx1clxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmx1clxyXG4gICAgICAgKi9cclxuICAgICAgYmx1cjogW3tcclxuICAgICAgICBibHVyOiBbYmx1cl1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCcmlnaHRuZXNzXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9icmlnaHRuZXNzXHJcbiAgICAgICAqL1xyXG4gICAgICBicmlnaHRuZXNzOiBbe1xyXG4gICAgICAgIGJyaWdodG5lc3M6IFticmlnaHRuZXNzXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIENvbnRyYXN0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9jb250cmFzdFxyXG4gICAgICAgKi9cclxuICAgICAgY29udHJhc3Q6IFt7XHJcbiAgICAgICAgY29udHJhc3Q6IFtjb250cmFzdF1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBEcm9wIFNoYWRvd1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZHJvcC1zaGFkb3dcclxuICAgICAgICovXHJcbiAgICAgICdkcm9wLXNoYWRvdyc6IFt7XHJcbiAgICAgICAgJ2Ryb3Atc2hhZG93JzogWycnLCAnbm9uZScsIGlzVHNoaXJ0U2l6ZSwgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBHcmF5c2NhbGVcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyYXlzY2FsZVxyXG4gICAgICAgKi9cclxuICAgICAgZ3JheXNjYWxlOiBbe1xyXG4gICAgICAgIGdyYXlzY2FsZTogW2dyYXlzY2FsZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBIdWUgUm90YXRlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9odWUtcm90YXRlXHJcbiAgICAgICAqL1xyXG4gICAgICAnaHVlLXJvdGF0ZSc6IFt7XHJcbiAgICAgICAgJ2h1ZS1yb3RhdGUnOiBbaHVlUm90YXRlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEludmVydFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvaW52ZXJ0XHJcbiAgICAgICAqL1xyXG4gICAgICBpbnZlcnQ6IFt7XHJcbiAgICAgICAgaW52ZXJ0OiBbaW52ZXJ0XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNhdHVyYXRlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zYXR1cmF0ZVxyXG4gICAgICAgKi9cclxuICAgICAgc2F0dXJhdGU6IFt7XHJcbiAgICAgICAgc2F0dXJhdGU6IFtzYXR1cmF0ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTZXBpYVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2VwaWFcclxuICAgICAgICovXHJcbiAgICAgIHNlcGlhOiBbe1xyXG4gICAgICAgIHNlcGlhOiBbc2VwaWFdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQmFja2Ryb3AgRmlsdGVyXHJcbiAgICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIFRhaWx3aW5kIENTUyB2My4wLjBcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tkcm9wLWZpbHRlclxyXG4gICAgICAgKi9cclxuICAgICAgJ2JhY2tkcm9wLWZpbHRlcic6IFt7XHJcbiAgICAgICAgJ2JhY2tkcm9wLWZpbHRlcic6IFsnJywgJ25vbmUnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJhY2tkcm9wIEJsdXJcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tkcm9wLWJsdXJcclxuICAgICAgICovXHJcbiAgICAgICdiYWNrZHJvcC1ibHVyJzogW3tcclxuICAgICAgICAnYmFja2Ryb3AtYmx1cic6IFtibHVyXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJhY2tkcm9wIEJyaWdodG5lc3NcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tkcm9wLWJyaWdodG5lc3NcclxuICAgICAgICovXHJcbiAgICAgICdiYWNrZHJvcC1icmlnaHRuZXNzJzogW3tcclxuICAgICAgICAnYmFja2Ryb3AtYnJpZ2h0bmVzcyc6IFticmlnaHRuZXNzXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJhY2tkcm9wIENvbnRyYXN0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZHJvcC1jb250cmFzdFxyXG4gICAgICAgKi9cclxuICAgICAgJ2JhY2tkcm9wLWNvbnRyYXN0JzogW3tcclxuICAgICAgICAnYmFja2Ryb3AtY29udHJhc3QnOiBbY29udHJhc3RdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQmFja2Ryb3AgR3JheXNjYWxlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZHJvcC1ncmF5c2NhbGVcclxuICAgICAgICovXHJcbiAgICAgICdiYWNrZHJvcC1ncmF5c2NhbGUnOiBbe1xyXG4gICAgICAgICdiYWNrZHJvcC1ncmF5c2NhbGUnOiBbZ3JheXNjYWxlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJhY2tkcm9wIEh1ZSBSb3RhdGVcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tkcm9wLWh1ZS1yb3RhdGVcclxuICAgICAgICovXHJcbiAgICAgICdiYWNrZHJvcC1odWUtcm90YXRlJzogW3tcclxuICAgICAgICAnYmFja2Ryb3AtaHVlLXJvdGF0ZSc6IFtodWVSb3RhdGVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQmFja2Ryb3AgSW52ZXJ0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZHJvcC1pbnZlcnRcclxuICAgICAgICovXHJcbiAgICAgICdiYWNrZHJvcC1pbnZlcnQnOiBbe1xyXG4gICAgICAgICdiYWNrZHJvcC1pbnZlcnQnOiBbaW52ZXJ0XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJhY2tkcm9wIE9wYWNpdHlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tkcm9wLW9wYWNpdHlcclxuICAgICAgICovXHJcbiAgICAgICdiYWNrZHJvcC1vcGFjaXR5JzogW3tcclxuICAgICAgICAnYmFja2Ryb3Atb3BhY2l0eSc6IFtvcGFjaXR5XVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJhY2tkcm9wIFNhdHVyYXRlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZHJvcC1zYXR1cmF0ZVxyXG4gICAgICAgKi9cclxuICAgICAgJ2JhY2tkcm9wLXNhdHVyYXRlJzogW3tcclxuICAgICAgICAnYmFja2Ryb3Atc2F0dXJhdGUnOiBbc2F0dXJhdGVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQmFja2Ryb3AgU2VwaWFcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tkcm9wLXNlcGlhXHJcbiAgICAgICAqL1xyXG4gICAgICAnYmFja2Ryb3Atc2VwaWEnOiBbe1xyXG4gICAgICAgICdiYWNrZHJvcC1zZXBpYSc6IFtzZXBpYV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8vIFRhYmxlc1xyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIENvbGxhcHNlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItY29sbGFwc2VcclxuICAgICAgICovXHJcbiAgICAgICdib3JkZXItY29sbGFwc2UnOiBbe1xyXG4gICAgICAgIGJvcmRlcjogWydjb2xsYXBzZScsICdzZXBhcmF0ZSddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQm9yZGVyIFNwYWNpbmdcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1zcGFjaW5nXHJcbiAgICAgICAqL1xyXG4gICAgICAnYm9yZGVyLXNwYWNpbmcnOiBbe1xyXG4gICAgICAgICdib3JkZXItc3BhY2luZyc6IFtib3JkZXJTcGFjaW5nXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEJvcmRlciBTcGFjaW5nIFhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1zcGFjaW5nXHJcbiAgICAgICAqL1xyXG4gICAgICAnYm9yZGVyLXNwYWNpbmcteCc6IFt7XHJcbiAgICAgICAgJ2JvcmRlci1zcGFjaW5nLXgnOiBbYm9yZGVyU3BhY2luZ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBCb3JkZXIgU3BhY2luZyBZXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItc3BhY2luZ1xyXG4gICAgICAgKi9cclxuICAgICAgJ2JvcmRlci1zcGFjaW5nLXknOiBbe1xyXG4gICAgICAgICdib3JkZXItc3BhY2luZy15JzogW2JvcmRlclNwYWNpbmddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVGFibGUgTGF5b3V0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90YWJsZS1sYXlvdXRcclxuICAgICAgICovXHJcbiAgICAgICd0YWJsZS1sYXlvdXQnOiBbe1xyXG4gICAgICAgIHRhYmxlOiBbJ2F1dG8nLCAnZml4ZWQnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIENhcHRpb24gU2lkZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvY2FwdGlvbi1zaWRlXHJcbiAgICAgICAqL1xyXG4gICAgICBjYXB0aW9uOiBbe1xyXG4gICAgICAgIGNhcHRpb246IFsndG9wJywgJ2JvdHRvbSddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvLyBUcmFuc2l0aW9ucyBhbmQgQW5pbWF0aW9uXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUcmFuaXNpdGlvbiBQcm9wZXJ0eVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNpdGlvbi1wcm9wZXJ0eVxyXG4gICAgICAgKi9cclxuICAgICAgdHJhbnNpdGlvbjogW3tcclxuICAgICAgICB0cmFuc2l0aW9uOiBbJ25vbmUnLCAnYWxsJywgJycsICdjb2xvcnMnLCAnb3BhY2l0eScsICdzaGFkb3cnLCAndHJhbnNmb3JtJywgaXNBcmJpdHJhcnlWYWx1ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUcmFuc2l0aW9uIER1cmF0aW9uXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90cmFuc2l0aW9uLWR1cmF0aW9uXHJcbiAgICAgICAqL1xyXG4gICAgICBkdXJhdGlvbjogW3tcclxuICAgICAgICBkdXJhdGlvbjogZ2V0TnVtYmVyQW5kQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUcmFuc2l0aW9uIFRpbWluZyBGdW5jdGlvblxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb25cclxuICAgICAgICovXHJcbiAgICAgIGVhc2U6IFt7XHJcbiAgICAgICAgZWFzZTogWydsaW5lYXInLCAnaW4nLCAnb3V0JywgJ2luLW91dCcsIGlzQXJiaXRyYXJ5VmFsdWVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVHJhbnNpdGlvbiBEZWxheVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNpdGlvbi1kZWxheVxyXG4gICAgICAgKi9cclxuICAgICAgZGVsYXk6IFt7XHJcbiAgICAgICAgZGVsYXk6IGdldE51bWJlckFuZEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQW5pbWF0aW9uXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9hbmltYXRpb25cclxuICAgICAgICovXHJcbiAgICAgIGFuaW1hdGU6IFt7XHJcbiAgICAgICAgYW5pbWF0ZTogWydub25lJywgJ3NwaW4nLCAncGluZycsICdwdWxzZScsICdib3VuY2UnLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLy8gVHJhbnNmb3Jtc1xyXG4gICAgICAvKipcclxuICAgICAgICogVHJhbnNmb3JtXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90cmFuc2Zvcm1cclxuICAgICAgICovXHJcbiAgICAgIHRyYW5zZm9ybTogW3tcclxuICAgICAgICB0cmFuc2Zvcm06IFsnJywgJ2dwdScsICdub25lJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTY2FsZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2NhbGVcclxuICAgICAgICovXHJcbiAgICAgIHNjYWxlOiBbe1xyXG4gICAgICAgIHNjYWxlOiBbc2NhbGVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2NhbGUgWFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2NhbGVcclxuICAgICAgICovXHJcbiAgICAgICdzY2FsZS14JzogW3tcclxuICAgICAgICAnc2NhbGUteCc6IFtzY2FsZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTY2FsZSBZXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY2FsZVxyXG4gICAgICAgKi9cclxuICAgICAgJ3NjYWxlLXknOiBbe1xyXG4gICAgICAgICdzY2FsZS15JzogW3NjYWxlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFJvdGF0ZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvcm90YXRlXHJcbiAgICAgICAqL1xyXG4gICAgICByb3RhdGU6IFt7XHJcbiAgICAgICAgcm90YXRlOiBbaXNJbnRlZ2VyLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRyYW5zbGF0ZSBYXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90cmFuc2xhdGVcclxuICAgICAgICovXHJcbiAgICAgICd0cmFuc2xhdGUteCc6IFt7XHJcbiAgICAgICAgJ3RyYW5zbGF0ZS14JzogW3RyYW5zbGF0ZV1cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUcmFuc2xhdGUgWVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNsYXRlXHJcbiAgICAgICAqL1xyXG4gICAgICAndHJhbnNsYXRlLXknOiBbe1xyXG4gICAgICAgICd0cmFuc2xhdGUteSc6IFt0cmFuc2xhdGVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2tldyBYXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9za2V3XHJcbiAgICAgICAqL1xyXG4gICAgICAnc2tldy14JzogW3tcclxuICAgICAgICAnc2tldy14JzogW3NrZXddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2tldyBZXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9za2V3XHJcbiAgICAgICAqL1xyXG4gICAgICAnc2tldy15JzogW3tcclxuICAgICAgICAnc2tldy15JzogW3NrZXddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVHJhbnNmb3JtIE9yaWdpblxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNmb3JtLW9yaWdpblxyXG4gICAgICAgKi9cclxuICAgICAgJ3RyYW5zZm9ybS1vcmlnaW4nOiBbe1xyXG4gICAgICAgIG9yaWdpbjogWydjZW50ZXInLCAndG9wJywgJ3RvcC1yaWdodCcsICdyaWdodCcsICdib3R0b20tcmlnaHQnLCAnYm90dG9tJywgJ2JvdHRvbS1sZWZ0JywgJ2xlZnQnLCAndG9wLWxlZnQnLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLy8gSW50ZXJhY3Rpdml0eVxyXG4gICAgICAvKipcclxuICAgICAgICogQWNjZW50IENvbG9yXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9hY2NlbnQtY29sb3JcclxuICAgICAgICovXHJcbiAgICAgIGFjY2VudDogW3tcclxuICAgICAgICBhY2NlbnQ6IFsnYXV0bycsIGNvbG9yc11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBBcHBlYXJhbmNlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9hcHBlYXJhbmNlXHJcbiAgICAgICAqL1xyXG4gICAgICBhcHBlYXJhbmNlOiBbe1xyXG4gICAgICAgIGFwcGVhcmFuY2U6IFsnbm9uZScsICdhdXRvJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBDdXJzb3JcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2N1cnNvclxyXG4gICAgICAgKi9cclxuICAgICAgY3Vyc29yOiBbe1xyXG4gICAgICAgIGN1cnNvcjogWydhdXRvJywgJ2RlZmF1bHQnLCAncG9pbnRlcicsICd3YWl0JywgJ3RleHQnLCAnbW92ZScsICdoZWxwJywgJ25vdC1hbGxvd2VkJywgJ25vbmUnLCAnY29udGV4dC1tZW51JywgJ3Byb2dyZXNzJywgJ2NlbGwnLCAnY3Jvc3NoYWlyJywgJ3ZlcnRpY2FsLXRleHQnLCAnYWxpYXMnLCAnY29weScsICduby1kcm9wJywgJ2dyYWInLCAnZ3JhYmJpbmcnLCAnYWxsLXNjcm9sbCcsICdjb2wtcmVzaXplJywgJ3Jvdy1yZXNpemUnLCAnbi1yZXNpemUnLCAnZS1yZXNpemUnLCAncy1yZXNpemUnLCAndy1yZXNpemUnLCAnbmUtcmVzaXplJywgJ253LXJlc2l6ZScsICdzZS1yZXNpemUnLCAnc3ctcmVzaXplJywgJ2V3LXJlc2l6ZScsICducy1yZXNpemUnLCAnbmVzdy1yZXNpemUnLCAnbndzZS1yZXNpemUnLCAnem9vbS1pbicsICd6b29tLW91dCcsIGlzQXJiaXRyYXJ5VmFsdWVdXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogQ2FyZXQgQ29sb3JcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2p1c3QtaW4tdGltZS1tb2RlI2NhcmV0LWNvbG9yLXV0aWxpdGllc1xyXG4gICAgICAgKi9cclxuICAgICAgJ2NhcmV0LWNvbG9yJzogW3tcclxuICAgICAgICBjYXJldDogW2NvbG9yc11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBQb2ludGVyIEV2ZW50c1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcG9pbnRlci1ldmVudHNcclxuICAgICAgICovXHJcbiAgICAgICdwb2ludGVyLWV2ZW50cyc6IFt7XHJcbiAgICAgICAgJ3BvaW50ZXItZXZlbnRzJzogWydub25lJywgJ2F1dG8nXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFJlc2l6ZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcmVzaXplXHJcbiAgICAgICAqL1xyXG4gICAgICByZXNpemU6IFt7XHJcbiAgICAgICAgcmVzaXplOiBbJ25vbmUnLCAneScsICd4JywgJyddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIEJlaGF2aW9yXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtYmVoYXZpb3JcclxuICAgICAgICovXHJcbiAgICAgICdzY3JvbGwtYmVoYXZpb3InOiBbe1xyXG4gICAgICAgIHNjcm9sbDogWydhdXRvJywgJ3Ntb290aCddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIE1hcmdpblxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLW1hcmdpblxyXG4gICAgICAgKi9cclxuICAgICAgJ3Njcm9sbC1tJzogW3tcclxuICAgICAgICAnc2Nyb2xsLW0nOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIE1hcmdpbiBYXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtbWFyZ2luXHJcbiAgICAgICAqL1xyXG4gICAgICAnc2Nyb2xsLW14JzogW3tcclxuICAgICAgICAnc2Nyb2xsLW14JzogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBNYXJnaW4gWVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLW1hcmdpblxyXG4gICAgICAgKi9cclxuICAgICAgJ3Njcm9sbC1teSc6IFt7XHJcbiAgICAgICAgJ3Njcm9sbC1teSc6IGdldFNwYWNpbmdXaXRoQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTY3JvbGwgTWFyZ2luIFN0YXJ0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtbWFyZ2luXHJcbiAgICAgICAqL1xyXG4gICAgICAnc2Nyb2xsLW1zJzogW3tcclxuICAgICAgICAnc2Nyb2xsLW1zJzogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBNYXJnaW4gRW5kXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtbWFyZ2luXHJcbiAgICAgICAqL1xyXG4gICAgICAnc2Nyb2xsLW1lJzogW3tcclxuICAgICAgICAnc2Nyb2xsLW1lJzogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBNYXJnaW4gVG9wXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtbWFyZ2luXHJcbiAgICAgICAqL1xyXG4gICAgICAnc2Nyb2xsLW10JzogW3tcclxuICAgICAgICAnc2Nyb2xsLW10JzogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBNYXJnaW4gUmlnaHRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1tYXJnaW5cclxuICAgICAgICovXHJcbiAgICAgICdzY3JvbGwtbXInOiBbe1xyXG4gICAgICAgICdzY3JvbGwtbXInOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIE1hcmdpbiBCb3R0b21cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1tYXJnaW5cclxuICAgICAgICovXHJcbiAgICAgICdzY3JvbGwtbWInOiBbe1xyXG4gICAgICAgICdzY3JvbGwtbWInOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIE1hcmdpbiBMZWZ0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtbWFyZ2luXHJcbiAgICAgICAqL1xyXG4gICAgICAnc2Nyb2xsLW1sJzogW3tcclxuICAgICAgICAnc2Nyb2xsLW1sJzogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBQYWRkaW5nXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtcGFkZGluZ1xyXG4gICAgICAgKi9cclxuICAgICAgJ3Njcm9sbC1wJzogW3tcclxuICAgICAgICAnc2Nyb2xsLXAnOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIFBhZGRpbmcgWFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXBhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgICdzY3JvbGwtcHgnOiBbe1xyXG4gICAgICAgICdzY3JvbGwtcHgnOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIFBhZGRpbmcgWVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXBhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgICdzY3JvbGwtcHknOiBbe1xyXG4gICAgICAgICdzY3JvbGwtcHknOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIFBhZGRpbmcgU3RhcnRcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1wYWRkaW5nXHJcbiAgICAgICAqL1xyXG4gICAgICAnc2Nyb2xsLXBzJzogW3tcclxuICAgICAgICAnc2Nyb2xsLXBzJzogZ2V0U3BhY2luZ1dpdGhBcmJpdHJhcnkoKVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBQYWRkaW5nIEVuZFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXBhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgICdzY3JvbGwtcGUnOiBbe1xyXG4gICAgICAgICdzY3JvbGwtcGUnOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIFBhZGRpbmcgVG9wXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtcGFkZGluZ1xyXG4gICAgICAgKi9cclxuICAgICAgJ3Njcm9sbC1wdCc6IFt7XHJcbiAgICAgICAgJ3Njcm9sbC1wdCc6IGdldFNwYWNpbmdXaXRoQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTY3JvbGwgUGFkZGluZyBSaWdodFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXBhZGRpbmdcclxuICAgICAgICovXHJcbiAgICAgICdzY3JvbGwtcHInOiBbe1xyXG4gICAgICAgICdzY3JvbGwtcHInOiBnZXRTcGFjaW5nV2l0aEFyYml0cmFyeSgpXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIFBhZGRpbmcgQm90dG9tXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtcGFkZGluZ1xyXG4gICAgICAgKi9cclxuICAgICAgJ3Njcm9sbC1wYic6IFt7XHJcbiAgICAgICAgJ3Njcm9sbC1wYic6IGdldFNwYWNpbmdXaXRoQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTY3JvbGwgUGFkZGluZyBMZWZ0XHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtcGFkZGluZ1xyXG4gICAgICAgKi9cclxuICAgICAgJ3Njcm9sbC1wbCc6IFt7XHJcbiAgICAgICAgJ3Njcm9sbC1wbCc6IGdldFNwYWNpbmdXaXRoQXJiaXRyYXJ5KClcclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTY3JvbGwgU25hcCBBbGlnblxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXNuYXAtYWxpZ25cclxuICAgICAgICovXHJcbiAgICAgICdzbmFwLWFsaWduJzogW3tcclxuICAgICAgICBzbmFwOiBbJ3N0YXJ0JywgJ2VuZCcsICdjZW50ZXInLCAnYWxpZ24tbm9uZSddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogU2Nyb2xsIFNuYXAgU3RvcFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXNuYXAtc3RvcFxyXG4gICAgICAgKi9cclxuICAgICAgJ3NuYXAtc3RvcCc6IFt7XHJcbiAgICAgICAgc25hcDogWydub3JtYWwnLCAnYWx3YXlzJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTY3JvbGwgU25hcCBUeXBlXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtc25hcC10eXBlXHJcbiAgICAgICAqL1xyXG4gICAgICAnc25hcC10eXBlJzogW3tcclxuICAgICAgICBzbmFwOiBbJ25vbmUnLCAneCcsICd5JywgJ2JvdGgnXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFNjcm9sbCBTbmFwIFR5cGUgU3RyaWN0bmVzc1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXNuYXAtdHlwZVxyXG4gICAgICAgKi9cclxuICAgICAgJ3NuYXAtc3RyaWN0bmVzcyc6IFt7XHJcbiAgICAgICAgc25hcDogWydtYW5kYXRvcnknLCAncHJveGltaXR5J11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBUb3VjaCBBY3Rpb25cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RvdWNoLWFjdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgdG91Y2g6IFt7XHJcbiAgICAgICAgdG91Y2g6IFsnYXV0bycsICdub25lJywgJ21hbmlwdWxhdGlvbiddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVG91Y2ggQWN0aW9uIFhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RvdWNoLWFjdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgJ3RvdWNoLXgnOiBbe1xyXG4gICAgICAgICd0b3VjaC1wYW4nOiBbJ3gnLCAnbGVmdCcsICdyaWdodCddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVG91Y2ggQWN0aW9uIFlcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RvdWNoLWFjdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgJ3RvdWNoLXknOiBbe1xyXG4gICAgICAgICd0b3VjaC1wYW4nOiBbJ3knLCAndXAnLCAnZG93biddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvKipcclxuICAgICAgICogVG91Y2ggQWN0aW9uIFBpbmNoIFpvb21cclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RvdWNoLWFjdGlvblxyXG4gICAgICAgKi9cclxuICAgICAgJ3RvdWNoLXB6JzogWyd0b3VjaC1waW5jaC16b29tJ10sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBVc2VyIFNlbGVjdFxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdXNlci1zZWxlY3RcclxuICAgICAgICovXHJcbiAgICAgIHNlbGVjdDogW3tcclxuICAgICAgICBzZWxlY3Q6IFsnbm9uZScsICd0ZXh0JywgJ2FsbCcsICdhdXRvJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBXaWxsIENoYW5nZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvd2lsbC1jaGFuZ2VcclxuICAgICAgICovXHJcbiAgICAgICd3aWxsLWNoYW5nZSc6IFt7XHJcbiAgICAgICAgJ3dpbGwtY2hhbmdlJzogWydhdXRvJywgJ3Njcm9sbCcsICdjb250ZW50cycsICd0cmFuc2Zvcm0nLCBpc0FyYml0cmFyeVZhbHVlXVxyXG4gICAgICB9XSxcclxuICAgICAgLy8gU1ZHXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBGaWxsXHJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9maWxsXHJcbiAgICAgICAqL1xyXG4gICAgICBmaWxsOiBbe1xyXG4gICAgICAgIGZpbGw6IFtjb2xvcnMsICdub25lJ11cclxuICAgICAgfV0sXHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTdHJva2UgV2lkdGhcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3N0cm9rZS13aWR0aFxyXG4gICAgICAgKi9cclxuICAgICAgJ3N0cm9rZS13JzogW3tcclxuICAgICAgICBzdHJva2U6IFtpc0xlbmd0aCwgaXNBcmJpdHJhcnlMZW5ndGgsIGlzQXJiaXRyYXJ5TnVtYmVyXVxyXG4gICAgICB9XSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIFN0cm9rZVxyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc3Ryb2tlXHJcbiAgICAgICAqL1xyXG4gICAgICBzdHJva2U6IFt7XHJcbiAgICAgICAgc3Ryb2tlOiBbY29sb3JzLCAnbm9uZSddXHJcbiAgICAgIH1dLFxyXG4gICAgICAvLyBBY2Nlc3NpYmlsaXR5XHJcbiAgICAgIC8qKlxyXG4gICAgICAgKiBTY3JlZW4gUmVhZGVyc1xyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2NyZWVuLXJlYWRlcnNcclxuICAgICAgICovXHJcbiAgICAgIHNyOiBbJ3NyLW9ubHknLCAnbm90LXNyLW9ubHknXSxcclxuICAgICAgLyoqXHJcbiAgICAgICAqIEZvcmNlZCBDb2xvciBBZGp1c3RcclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZvcmNlZC1jb2xvci1hZGp1c3RcclxuICAgICAgICovXHJcbiAgICAgICdmb3JjZWQtY29sb3ItYWRqdXN0JzogW3tcclxuICAgICAgICAnZm9yY2VkLWNvbG9yLWFkanVzdCc6IFsnYXV0bycsICdub25lJ11cclxuICAgICAgfV1cclxuICAgIH0sXHJcbiAgICBjb25mbGljdGluZ0NsYXNzR3JvdXBzOiB7XHJcbiAgICAgIG92ZXJmbG93OiBbJ292ZXJmbG93LXgnLCAnb3ZlcmZsb3cteSddLFxyXG4gICAgICBvdmVyc2Nyb2xsOiBbJ292ZXJzY3JvbGwteCcsICdvdmVyc2Nyb2xsLXknXSxcclxuICAgICAgaW5zZXQ6IFsnaW5zZXQteCcsICdpbnNldC15JywgJ3N0YXJ0JywgJ2VuZCcsICd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXSxcclxuICAgICAgJ2luc2V0LXgnOiBbJ3JpZ2h0JywgJ2xlZnQnXSxcclxuICAgICAgJ2luc2V0LXknOiBbJ3RvcCcsICdib3R0b20nXSxcclxuICAgICAgZmxleDogWydiYXNpcycsICdncm93JywgJ3NocmluayddLFxyXG4gICAgICBnYXA6IFsnZ2FwLXgnLCAnZ2FwLXknXSxcclxuICAgICAgcDogWydweCcsICdweScsICdwcycsICdwZScsICdwdCcsICdwcicsICdwYicsICdwbCddLFxyXG4gICAgICBweDogWydwcicsICdwbCddLFxyXG4gICAgICBweTogWydwdCcsICdwYiddLFxyXG4gICAgICBtOiBbJ214JywgJ215JywgJ21zJywgJ21lJywgJ210JywgJ21yJywgJ21iJywgJ21sJ10sXHJcbiAgICAgIG14OiBbJ21yJywgJ21sJ10sXHJcbiAgICAgIG15OiBbJ210JywgJ21iJ10sXHJcbiAgICAgIHNpemU6IFsndycsICdoJ10sXHJcbiAgICAgICdmb250LXNpemUnOiBbJ2xlYWRpbmcnXSxcclxuICAgICAgJ2Z2bi1ub3JtYWwnOiBbJ2Z2bi1vcmRpbmFsJywgJ2Z2bi1zbGFzaGVkLXplcm8nLCAnZnZuLWZpZ3VyZScsICdmdm4tc3BhY2luZycsICdmdm4tZnJhY3Rpb24nXSxcclxuICAgICAgJ2Z2bi1vcmRpbmFsJzogWydmdm4tbm9ybWFsJ10sXHJcbiAgICAgICdmdm4tc2xhc2hlZC16ZXJvJzogWydmdm4tbm9ybWFsJ10sXHJcbiAgICAgICdmdm4tZmlndXJlJzogWydmdm4tbm9ybWFsJ10sXHJcbiAgICAgICdmdm4tc3BhY2luZyc6IFsnZnZuLW5vcm1hbCddLFxyXG4gICAgICAnZnZuLWZyYWN0aW9uJzogWydmdm4tbm9ybWFsJ10sXHJcbiAgICAgICdsaW5lLWNsYW1wJzogWydkaXNwbGF5JywgJ292ZXJmbG93J10sXHJcbiAgICAgIHJvdW5kZWQ6IFsncm91bmRlZC1zJywgJ3JvdW5kZWQtZScsICdyb3VuZGVkLXQnLCAncm91bmRlZC1yJywgJ3JvdW5kZWQtYicsICdyb3VuZGVkLWwnLCAncm91bmRlZC1zcycsICdyb3VuZGVkLXNlJywgJ3JvdW5kZWQtZWUnLCAncm91bmRlZC1lcycsICdyb3VuZGVkLXRsJywgJ3JvdW5kZWQtdHInLCAncm91bmRlZC1icicsICdyb3VuZGVkLWJsJ10sXHJcbiAgICAgICdyb3VuZGVkLXMnOiBbJ3JvdW5kZWQtc3MnLCAncm91bmRlZC1lcyddLFxyXG4gICAgICAncm91bmRlZC1lJzogWydyb3VuZGVkLXNlJywgJ3JvdW5kZWQtZWUnXSxcclxuICAgICAgJ3JvdW5kZWQtdCc6IFsncm91bmRlZC10bCcsICdyb3VuZGVkLXRyJ10sXHJcbiAgICAgICdyb3VuZGVkLXInOiBbJ3JvdW5kZWQtdHInLCAncm91bmRlZC1iciddLFxyXG4gICAgICAncm91bmRlZC1iJzogWydyb3VuZGVkLWJyJywgJ3JvdW5kZWQtYmwnXSxcclxuICAgICAgJ3JvdW5kZWQtbCc6IFsncm91bmRlZC10bCcsICdyb3VuZGVkLWJsJ10sXHJcbiAgICAgICdib3JkZXItc3BhY2luZyc6IFsnYm9yZGVyLXNwYWNpbmcteCcsICdib3JkZXItc3BhY2luZy15J10sXHJcbiAgICAgICdib3JkZXItdyc6IFsnYm9yZGVyLXctcycsICdib3JkZXItdy1lJywgJ2JvcmRlci13LXQnLCAnYm9yZGVyLXctcicsICdib3JkZXItdy1iJywgJ2JvcmRlci13LWwnXSxcclxuICAgICAgJ2JvcmRlci13LXgnOiBbJ2JvcmRlci13LXInLCAnYm9yZGVyLXctbCddLFxyXG4gICAgICAnYm9yZGVyLXcteSc6IFsnYm9yZGVyLXctdCcsICdib3JkZXItdy1iJ10sXHJcbiAgICAgICdib3JkZXItY29sb3InOiBbJ2JvcmRlci1jb2xvci1zJywgJ2JvcmRlci1jb2xvci1lJywgJ2JvcmRlci1jb2xvci10JywgJ2JvcmRlci1jb2xvci1yJywgJ2JvcmRlci1jb2xvci1iJywgJ2JvcmRlci1jb2xvci1sJ10sXHJcbiAgICAgICdib3JkZXItY29sb3IteCc6IFsnYm9yZGVyLWNvbG9yLXInLCAnYm9yZGVyLWNvbG9yLWwnXSxcclxuICAgICAgJ2JvcmRlci1jb2xvci15JzogWydib3JkZXItY29sb3ItdCcsICdib3JkZXItY29sb3ItYiddLFxyXG4gICAgICAnc2Nyb2xsLW0nOiBbJ3Njcm9sbC1teCcsICdzY3JvbGwtbXknLCAnc2Nyb2xsLW1zJywgJ3Njcm9sbC1tZScsICdzY3JvbGwtbXQnLCAnc2Nyb2xsLW1yJywgJ3Njcm9sbC1tYicsICdzY3JvbGwtbWwnXSxcclxuICAgICAgJ3Njcm9sbC1teCc6IFsnc2Nyb2xsLW1yJywgJ3Njcm9sbC1tbCddLFxyXG4gICAgICAnc2Nyb2xsLW15JzogWydzY3JvbGwtbXQnLCAnc2Nyb2xsLW1iJ10sXHJcbiAgICAgICdzY3JvbGwtcCc6IFsnc2Nyb2xsLXB4JywgJ3Njcm9sbC1weScsICdzY3JvbGwtcHMnLCAnc2Nyb2xsLXBlJywgJ3Njcm9sbC1wdCcsICdzY3JvbGwtcHInLCAnc2Nyb2xsLXBiJywgJ3Njcm9sbC1wbCddLFxyXG4gICAgICAnc2Nyb2xsLXB4JzogWydzY3JvbGwtcHInLCAnc2Nyb2xsLXBsJ10sXHJcbiAgICAgICdzY3JvbGwtcHknOiBbJ3Njcm9sbC1wdCcsICdzY3JvbGwtcGInXSxcclxuICAgICAgdG91Y2g6IFsndG91Y2gteCcsICd0b3VjaC15JywgJ3RvdWNoLXB6J10sXHJcbiAgICAgICd0b3VjaC14JzogWyd0b3VjaCddLFxyXG4gICAgICAndG91Y2gteSc6IFsndG91Y2gnXSxcclxuICAgICAgJ3RvdWNoLXB6JzogWyd0b3VjaCddXHJcbiAgICB9LFxyXG4gICAgY29uZmxpY3RpbmdDbGFzc0dyb3VwTW9kaWZpZXJzOiB7XHJcbiAgICAgICdmb250LXNpemUnOiBbJ2xlYWRpbmcnXVxyXG4gICAgfVxyXG4gIH07XHJcbn07XHJcblxyXG4vKipcclxuICogQHBhcmFtIGJhc2VDb25maWcgQ29uZmlnIHdoZXJlIG90aGVyIGNvbmZpZyB3aWxsIGJlIG1lcmdlZCBpbnRvLiBUaGlzIG9iamVjdCB3aWxsIGJlIG11dGF0ZWQuXHJcbiAqIEBwYXJhbSBjb25maWdFeHRlbnNpb24gUGFydGlhbCBjb25maWcgdG8gbWVyZ2UgaW50byB0aGUgYGJhc2VDb25maWdgLlxyXG4gKi9cclxuY29uc3QgbWVyZ2VDb25maWdzID0gKGJhc2VDb25maWcsIHtcclxuICBjYWNoZVNpemUsXHJcbiAgcHJlZml4LFxyXG4gIHNlcGFyYXRvcixcclxuICBleHBlcmltZW50YWxQYXJzZUNsYXNzTmFtZSxcclxuICBleHRlbmQgPSB7fSxcclxuICBvdmVycmlkZSA9IHt9XHJcbn0pID0+IHtcclxuICBvdmVycmlkZVByb3BlcnR5KGJhc2VDb25maWcsICdjYWNoZVNpemUnLCBjYWNoZVNpemUpO1xyXG4gIG92ZXJyaWRlUHJvcGVydHkoYmFzZUNvbmZpZywgJ3ByZWZpeCcsIHByZWZpeCk7XHJcbiAgb3ZlcnJpZGVQcm9wZXJ0eShiYXNlQ29uZmlnLCAnc2VwYXJhdG9yJywgc2VwYXJhdG9yKTtcclxuICBvdmVycmlkZVByb3BlcnR5KGJhc2VDb25maWcsICdleHBlcmltZW50YWxQYXJzZUNsYXNzTmFtZScsIGV4cGVyaW1lbnRhbFBhcnNlQ2xhc3NOYW1lKTtcclxuICBmb3IgKGNvbnN0IGNvbmZpZ0tleSBpbiBvdmVycmlkZSkge1xyXG4gICAgb3ZlcnJpZGVDb25maWdQcm9wZXJ0aWVzKGJhc2VDb25maWdbY29uZmlnS2V5XSwgb3ZlcnJpZGVbY29uZmlnS2V5XSk7XHJcbiAgfVxyXG4gIGZvciAoY29uc3Qga2V5IGluIGV4dGVuZCkge1xyXG4gICAgbWVyZ2VDb25maWdQcm9wZXJ0aWVzKGJhc2VDb25maWdba2V5XSwgZXh0ZW5kW2tleV0pO1xyXG4gIH1cclxuICByZXR1cm4gYmFzZUNvbmZpZztcclxufTtcclxuY29uc3Qgb3ZlcnJpZGVQcm9wZXJ0eSA9IChiYXNlT2JqZWN0LCBvdmVycmlkZUtleSwgb3ZlcnJpZGVWYWx1ZSkgPT4ge1xyXG4gIGlmIChvdmVycmlkZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcclxuICAgIGJhc2VPYmplY3Rbb3ZlcnJpZGVLZXldID0gb3ZlcnJpZGVWYWx1ZTtcclxuICB9XHJcbn07XHJcbmNvbnN0IG92ZXJyaWRlQ29uZmlnUHJvcGVydGllcyA9IChiYXNlT2JqZWN0LCBvdmVycmlkZU9iamVjdCkgPT4ge1xyXG4gIGlmIChvdmVycmlkZU9iamVjdCkge1xyXG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3ZlcnJpZGVPYmplY3QpIHtcclxuICAgICAgb3ZlcnJpZGVQcm9wZXJ0eShiYXNlT2JqZWN0LCBrZXksIG92ZXJyaWRlT2JqZWN0W2tleV0pO1xyXG4gICAgfVxyXG4gIH1cclxufTtcclxuY29uc3QgbWVyZ2VDb25maWdQcm9wZXJ0aWVzID0gKGJhc2VPYmplY3QsIG1lcmdlT2JqZWN0KSA9PiB7XHJcbiAgaWYgKG1lcmdlT2JqZWN0KSB7XHJcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBtZXJnZU9iamVjdCkge1xyXG4gICAgICBjb25zdCBtZXJnZVZhbHVlID0gbWVyZ2VPYmplY3Rba2V5XTtcclxuICAgICAgaWYgKG1lcmdlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgIGJhc2VPYmplY3Rba2V5XSA9IChiYXNlT2JqZWN0W2tleV0gfHwgW10pLmNvbmNhdChtZXJnZVZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxufTtcclxuY29uc3QgZXh0ZW5kVGFpbHdpbmRNZXJnZSA9IChjb25maWdFeHRlbnNpb24sIC4uLmNyZWF0ZUNvbmZpZykgPT4gdHlwZW9mIGNvbmZpZ0V4dGVuc2lvbiA9PT0gJ2Z1bmN0aW9uJyA/IGNyZWF0ZVRhaWx3aW5kTWVyZ2UoZ2V0RGVmYXVsdENvbmZpZywgY29uZmlnRXh0ZW5zaW9uLCAuLi5jcmVhdGVDb25maWcpIDogY3JlYXRlVGFpbHdpbmRNZXJnZSgoKSA9PiBtZXJnZUNvbmZpZ3MoZ2V0RGVmYXVsdENvbmZpZygpLCBjb25maWdFeHRlbnNpb24pLCAuLi5jcmVhdGVDb25maWcpO1xyXG5jb25zdCB0d01lcmdlID0gLyojX19QVVJFX18qL2NyZWF0ZVRhaWx3aW5kTWVyZ2UoZ2V0RGVmYXVsdENvbmZpZyk7XHJcbmV4cG9ydCB7IGNyZWF0ZVRhaWx3aW5kTWVyZ2UsIGV4dGVuZFRhaWx3aW5kTWVyZ2UsIGZyb21UaGVtZSwgZ2V0RGVmYXVsdENvbmZpZywgbWVyZ2VDb25maWdzLCB0d0pvaW4sIHR3TWVyZ2UsIHZhbGlkYXRvcnMgfTtcclxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVuZGxlLW1qcy5tanMubWFwXHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/tailwind-merge/dist/bundle-mjs.mjs\n")); /***/ }) }, /******/ function(__webpack_require__) { // webpackRuntimeModules /******/ var __webpack_exec__ = function(moduleId) { return __webpack_require__(__webpack_require__.s = moduleId); } /******/ __webpack_require__.O(0, ["main-app"], function() { return __webpack_exec__("(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22C%3A%5C%5CUsers%5C%5CUser%5C%5CDesktop%5C%5Ceternos%5C%5Cfrontend%5C%5Cstyle%5C%5Capp%5C%5Clogin%5C%5Cpage.tsx%22%2C%22ids%22%3A%5B%5D%7D&server=false!"); }); /******/ var __webpack_exports__ = __webpack_require__.O(); /******/ _N_E = __webpack_exports__; /******/ } ]);