2929 lines
6.1 MiB
Plaintext
2929 lines
6.1 MiB
Plaintext
/*
|
||
* 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/dashboard/layout"],{
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/button/Button.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/button/Button.js ***!
|
||
\**********************************************************/
|
||
/***/ ((__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 */ Button: () => (/* binding */ Button)\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 _internals_use_button_useButton_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../internals/use-button/useButton.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/use-button/useButton.js\");\n/* harmony import */ var _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../internals/useRenderElement.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useRenderElement.js\");\n/* __next_internal_client_entry_do_not_use__ Button auto */ var _s = $RefreshSig$();\n\n\n\n/**\n * A button component that can be used to trigger actions.\n * Renders a `<button>` element.\n *\n * Documentation: [Base UI Button](https://base-ui.com/react/components/button)\n */ const Button = /*#__PURE__*/ _s(react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c = _s(function Button(componentProps, forwardedRef) {\n _s();\n const { render, className, disabled = false, focusableWhenDisabled = false, nativeButton = true, style, ...elementProps } = componentProps;\n const { getButtonProps, buttonRef } = (0,_internals_use_button_useButton_js__WEBPACK_IMPORTED_MODULE_1__.useButton)({\n disabled,\n focusableWhenDisabled,\n native: nativeButton\n });\n const state = {\n disabled\n };\n return (0,_internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_2__.useRenderElement)('button', componentProps, {\n state,\n ref: [\n forwardedRef,\n buttonRef\n ],\n props: [\n elementProps,\n getButtonProps\n ]\n });\n}, \"RaSihm2Y/whmv/8pjBIdXfRqvC0=\", false, function() {\n return [\n _internals_use_button_useButton_js__WEBPACK_IMPORTED_MODULE_1__.useButton,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_2__.useRenderElement\n ];\n})), \"RaSihm2Y/whmv/8pjBIdXfRqvC0=\", false, function() {\n return [\n _internals_use_button_useButton_js__WEBPACK_IMPORTED_MODULE_1__.useButton,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_2__.useRenderElement\n ];\n});\n_c1 = Button;\nif (true) Button.displayName = \"Button\";\nvar _c, _c1;\n$RefreshReg$(_c, \"Button$React.forwardRef\");\n$RefreshReg$(_c1, \"Button\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vYnV0dG9uL0J1dHRvbi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUUrQjtBQUNrQztBQUNHO0FBQ3BFOzs7OztDQUtDLEdBQ00sTUFBTUcsU0FBUyxXQUFXLEdBQUVILEdBQUFBLDZDQUFnQixTQUFDLFNBQVNHLE9BQU9FLGNBQWMsRUFBRUMsWUFBWTs7SUFDOUYsTUFBTSxFQUNKQyxNQUFNLEVBQ05DLFNBQVMsRUFDVEMsV0FBVyxLQUFLLEVBQ2hCQyx3QkFBd0IsS0FBSyxFQUM3QkMsZUFBZSxJQUFJLEVBQ25CQyxLQUFLLEVBQ0wsR0FBR0MsY0FDSixHQUFHUjtJQUNKLE1BQU0sRUFDSlMsY0FBYyxFQUNkQyxTQUFTLEVBQ1YsR0FBR2QsNkVBQVNBLENBQUM7UUFDWlE7UUFDQUM7UUFDQU0sUUFBUUw7SUFDVjtJQUNBLE1BQU1NLFFBQVE7UUFDWlI7SUFDRjtJQUNBLE9BQU9QLGdGQUFnQkEsQ0FBQyxVQUFVRyxnQkFBZ0I7UUFDaERZO1FBQ0FDLEtBQUs7WUFBQ1o7WUFBY1M7U0FBVTtRQUM5QkksT0FBTztZQUFDTjtZQUFjQztTQUFlO0lBQ3ZDO0FBQ0Y7O1FBYk1iLHlFQUFTQTtRQVFOQyw0RUFBZ0JBOzs7O1FBUm5CRCx5RUFBU0E7UUFRTkMsNEVBQWdCQTs7R0FLdEI7O0FBQ0gsSUFBSWtCLElBQXFDLEVBQUVqQixPQUFPa0IsV0FBVyxHQUFHIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9idXR0b24vQnV0dG9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQnV0dG9uIH0gZnJvbSBcIi4uL2ludGVybmFscy91c2UtYnV0dG9uL3VzZUJ1dHRvbi5qc1wiO1xuaW1wb3J0IHsgdXNlUmVuZGVyRWxlbWVudCB9IGZyb20gXCIuLi9pbnRlcm5hbHMvdXNlUmVuZGVyRWxlbWVudC5qc1wiO1xuLyoqXG4gKiBBIGJ1dHRvbiBjb21wb25lbnQgdGhhdCBjYW4gYmUgdXNlZCB0byB0cmlnZ2VyIGFjdGlvbnMuXG4gKiBSZW5kZXJzIGEgYDxidXR0b24+YCBlbGVtZW50LlxuICpcbiAqIERvY3VtZW50YXRpb246IFtCYXNlIFVJIEJ1dHRvbl0oaHR0cHM6Ly9iYXNlLXVpLmNvbS9yZWFjdC9jb21wb25lbnRzL2J1dHRvbilcbiAqL1xuZXhwb3J0IGNvbnN0IEJ1dHRvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEJ1dHRvbihjb21wb25lbnRQcm9wcywgZm9yd2FyZGVkUmVmKSB7XG4gIGNvbnN0IHtcbiAgICByZW5kZXIsXG4gICAgY2xhc3NOYW1lLFxuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgZm9jdXNhYmxlV2hlbkRpc2FibGVkID0gZmFsc2UsXG4gICAgbmF0aXZlQnV0dG9uID0gdHJ1ZSxcbiAgICBzdHlsZSxcbiAgICAuLi5lbGVtZW50UHJvcHNcbiAgfSA9IGNvbXBvbmVudFByb3BzO1xuICBjb25zdCB7XG4gICAgZ2V0QnV0dG9uUHJvcHMsXG4gICAgYnV0dG9uUmVmXG4gIH0gPSB1c2VCdXR0b24oe1xuICAgIGRpc2FibGVkLFxuICAgIGZvY3VzYWJsZVdoZW5EaXNhYmxlZCxcbiAgICBuYXRpdmU6IG5hdGl2ZUJ1dHRvblxuICB9KTtcbiAgY29uc3Qgc3RhdGUgPSB7XG4gICAgZGlzYWJsZWRcbiAgfTtcbiAgcmV0dXJuIHVzZVJlbmRlckVsZW1lbnQoJ2J1dHRvbicsIGNvbXBvbmVudFByb3BzLCB7XG4gICAgc3RhdGUsXG4gICAgcmVmOiBbZm9yd2FyZGVkUmVmLCBidXR0b25SZWZdLFxuICAgIHByb3BzOiBbZWxlbWVudFByb3BzLCBnZXRCdXR0b25Qcm9wc11cbiAgfSk7XG59KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIEJ1dHRvbi5kaXNwbGF5TmFtZSA9IFwiQnV0dG9uXCI7Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlQnV0dG9uIiwidXNlUmVuZGVyRWxlbWVudCIsIkJ1dHRvbiIsImZvcndhcmRSZWYiLCJjb21wb25lbnRQcm9wcyIsImZvcndhcmRlZFJlZiIsInJlbmRlciIsImNsYXNzTmFtZSIsImRpc2FibGVkIiwiZm9jdXNhYmxlV2hlbkRpc2FibGVkIiwibmF0aXZlQnV0dG9uIiwic3R5bGUiLCJlbGVtZW50UHJvcHMiLCJnZXRCdXR0b25Qcm9wcyIsImJ1dHRvblJlZiIsIm5hdGl2ZSIsInN0YXRlIiwicmVmIiwicHJvcHMiLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/button/Button.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/backdrop/DialogBackdrop.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/dialog/backdrop/DialogBackdrop.js ***!
|
||
\***************************************************************************/
|
||
/***/ ((__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 */ DialogBackdrop: () => (/* binding */ DialogBackdrop)\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 _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../root/DialogRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/DialogRootContext.js\");\n/* harmony import */ var _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../internals/useRenderElement.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useRenderElement.js\");\n/* harmony import */ var _utils_popupStateMapping_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/popupStateMapping.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popupStateMapping.js\");\n/* harmony import */ var _internals_stateAttributesMapping_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../internals/stateAttributesMapping.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/stateAttributesMapping.js\");\n/* __next_internal_client_entry_do_not_use__ DialogBackdrop auto */ var _s = $RefreshSig$();\n\n\n\n\n\nconst stateAttributesMapping = {\n ..._utils_popupStateMapping_js__WEBPACK_IMPORTED_MODULE_1__.popupStateMapping,\n ..._internals_stateAttributesMapping_js__WEBPACK_IMPORTED_MODULE_2__.transitionStatusMapping\n};\n/**\n * An overlay displayed beneath the popup.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Dialog](https://base-ui.com/react/components/dialog)\n */ const DialogBackdrop = /*#__PURE__*/ _s(react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c = _s(function DialogBackdrop(componentProps, forwardedRef) {\n _s();\n const { render, className, style, forceRender = false, ...elementProps } = componentProps;\n const { store } = (0,_root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_3__.useDialogRootContext)();\n const open = store.useState('open');\n const nested = store.useState('nested');\n const mounted = store.useState('mounted');\n const transitionStatus = store.useState('transitionStatus');\n const state = {\n open,\n transitionStatus\n };\n return (0,_internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_4__.useRenderElement)('div', componentProps, {\n state,\n ref: [\n store.context.backdropRef,\n forwardedRef\n ],\n stateAttributesMapping,\n props: [\n {\n role: 'presentation',\n hidden: !mounted,\n style: {\n userSelect: 'none',\n WebkitUserSelect: 'none'\n }\n },\n elementProps\n ],\n enabled: forceRender || !nested\n });\n}, \"OX6bDG2Yo9lJfaP4fYCAAGwIwuc=\", false, function() {\n return [\n _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_3__.useDialogRootContext,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_4__.useRenderElement\n ];\n})), \"OX6bDG2Yo9lJfaP4fYCAAGwIwuc=\", false, function() {\n return [\n _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_3__.useDialogRootContext,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_4__.useRenderElement\n ];\n});\n_c1 = DialogBackdrop;\nif (true) DialogBackdrop.displayName = \"DialogBackdrop\";\nvar _c, _c1;\n$RefreshReg$(_c, \"DialogBackdrop$React.forwardRef\");\n$RefreshReg$(_c1, \"DialogBackdrop\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL2JhY2tkcm9wL0RpYWxvZ0JhY2tkcm9wLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFK0I7QUFDcUM7QUFDRztBQUNhO0FBQ0E7QUFDcEYsTUFBTU0seUJBQXlCO0lBQzdCLEdBQUdGLDBFQUFXO0lBQ2QsR0FBR0MseUZBQXVCO0FBQzVCO0FBRUE7Ozs7O0NBS0MsR0FDTSxNQUFNRSxpQkFBaUIsV0FBVyxHQUFFUCxHQUFBQSw2Q0FBZ0IsU0FBQyxTQUFTTyxlQUFlRSxjQUFjLEVBQUVDLFlBQVk7O0lBQzlHLE1BQU0sRUFDSkMsTUFBTSxFQUNOQyxTQUFTLEVBQ1RDLEtBQUssRUFDTEMsY0FBYyxLQUFLLEVBQ25CLEdBQUdDLGNBQ0osR0FBR047SUFDSixNQUFNLEVBQ0pPLEtBQUssRUFDTixHQUFHZixnRkFBb0JBO0lBQ3hCLE1BQU1nQixPQUFPRCxNQUFNRSxRQUFRLENBQUM7SUFDNUIsTUFBTUMsU0FBU0gsTUFBTUUsUUFBUSxDQUFDO0lBQzlCLE1BQU1FLFVBQVVKLE1BQU1FLFFBQVEsQ0FBQztJQUMvQixNQUFNRyxtQkFBbUJMLE1BQU1FLFFBQVEsQ0FBQztJQUN4QyxNQUFNSSxRQUFRO1FBQ1pMO1FBQ0FJO0lBQ0Y7SUFDQSxPQUFPbkIsZ0ZBQWdCQSxDQUFDLE9BQU9PLGdCQUFnQjtRQUM3Q2E7UUFDQUMsS0FBSztZQUFDUCxNQUFNUSxPQUFPLENBQUNDLFdBQVc7WUFBRWY7U0FBYTtRQUM5Q0o7UUFDQW9CLE9BQU87WUFBQztnQkFDTkMsTUFBTTtnQkFDTkMsUUFBUSxDQUFDUjtnQkFDVFAsT0FBTztvQkFDTGdCLFlBQVk7b0JBQ1pDLGtCQUFrQjtnQkFDcEI7WUFDRjtZQUFHZjtTQUFhO1FBQ2hCZ0IsU0FBU2pCLGVBQWUsQ0FBQ0s7SUFDM0I7QUFDRjs7UUF2Qk1sQiw0RUFBb0JBO1FBU2pCQyw0RUFBZ0JBOzs7O1FBVG5CRCw0RUFBb0JBO1FBU2pCQyw0RUFBZ0JBOztHQWN0Qjs7QUFDSCxJQUFJOEIsSUFBcUMsRUFBRXpCLGVBQWUwQixXQUFXLEdBQUciLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2RpYWxvZy9iYWNrZHJvcC9EaWFsb2dCYWNrZHJvcC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZURpYWxvZ1Jvb3RDb250ZXh0IH0gZnJvbSBcIi4uL3Jvb3QvRGlhbG9nUm9vdENvbnRleHQuanNcIjtcbmltcG9ydCB7IHVzZVJlbmRlckVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL3VzZVJlbmRlckVsZW1lbnQuanNcIjtcbmltcG9ydCB7IHBvcHVwU3RhdGVNYXBwaW5nIGFzIGJhc2VNYXBwaW5nIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BvcHVwU3RhdGVNYXBwaW5nLmpzXCI7XG5pbXBvcnQgeyB0cmFuc2l0aW9uU3RhdHVzTWFwcGluZyB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvc3RhdGVBdHRyaWJ1dGVzTWFwcGluZy5qc1wiO1xuY29uc3Qgc3RhdGVBdHRyaWJ1dGVzTWFwcGluZyA9IHtcbiAgLi4uYmFzZU1hcHBpbmcsXG4gIC4uLnRyYW5zaXRpb25TdGF0dXNNYXBwaW5nXG59O1xuXG4vKipcbiAqIEFuIG92ZXJsYXkgZGlzcGxheWVkIGJlbmVhdGggdGhlIHBvcHVwLlxuICogUmVuZGVycyBhIGA8ZGl2PmAgZWxlbWVudC5cbiAqXG4gKiBEb2N1bWVudGF0aW9uOiBbQmFzZSBVSSBEaWFsb2ddKGh0dHBzOi8vYmFzZS11aS5jb20vcmVhY3QvY29tcG9uZW50cy9kaWFsb2cpXG4gKi9cbmV4cG9ydCBjb25zdCBEaWFsb2dCYWNrZHJvcCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIERpYWxvZ0JhY2tkcm9wKGNvbXBvbmVudFByb3BzLCBmb3J3YXJkZWRSZWYpIHtcbiAgY29uc3Qge1xuICAgIHJlbmRlcixcbiAgICBjbGFzc05hbWUsXG4gICAgc3R5bGUsXG4gICAgZm9yY2VSZW5kZXIgPSBmYWxzZSxcbiAgICAuLi5lbGVtZW50UHJvcHNcbiAgfSA9IGNvbXBvbmVudFByb3BzO1xuICBjb25zdCB7XG4gICAgc3RvcmVcbiAgfSA9IHVzZURpYWxvZ1Jvb3RDb250ZXh0KCk7XG4gIGNvbnN0IG9wZW4gPSBzdG9yZS51c2VTdGF0ZSgnb3BlbicpO1xuICBjb25zdCBuZXN0ZWQgPSBzdG9yZS51c2VTdGF0ZSgnbmVzdGVkJyk7XG4gIGNvbnN0IG1vdW50ZWQgPSBzdG9yZS51c2VTdGF0ZSgnbW91bnRlZCcpO1xuICBjb25zdCB0cmFuc2l0aW9uU3RhdHVzID0gc3RvcmUudXNlU3RhdGUoJ3RyYW5zaXRpb25TdGF0dXMnKTtcbiAgY29uc3Qgc3RhdGUgPSB7XG4gICAgb3BlbixcbiAgICB0cmFuc2l0aW9uU3RhdHVzXG4gIH07XG4gIHJldHVybiB1c2VSZW5kZXJFbGVtZW50KCdkaXYnLCBjb21wb25lbnRQcm9wcywge1xuICAgIHN0YXRlLFxuICAgIHJlZjogW3N0b3JlLmNvbnRleHQuYmFja2Ryb3BSZWYsIGZvcndhcmRlZFJlZl0sXG4gICAgc3RhdGVBdHRyaWJ1dGVzTWFwcGluZyxcbiAgICBwcm9wczogW3tcbiAgICAgIHJvbGU6ICdwcmVzZW50YXRpb24nLFxuICAgICAgaGlkZGVuOiAhbW91bnRlZCxcbiAgICAgIHN0eWxlOiB7XG4gICAgICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICAgICAgV2Via2l0VXNlclNlbGVjdDogJ25vbmUnXG4gICAgICB9XG4gICAgfSwgZWxlbWVudFByb3BzXSxcbiAgICBlbmFibGVkOiBmb3JjZVJlbmRlciB8fCAhbmVzdGVkXG4gIH0pO1xufSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSBEaWFsb2dCYWNrZHJvcC5kaXNwbGF5TmFtZSA9IFwiRGlhbG9nQmFja2Ryb3BcIjsiXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VEaWFsb2dSb290Q29udGV4dCIsInVzZVJlbmRlckVsZW1lbnQiLCJwb3B1cFN0YXRlTWFwcGluZyIsImJhc2VNYXBwaW5nIiwidHJhbnNpdGlvblN0YXR1c01hcHBpbmciLCJzdGF0ZUF0dHJpYnV0ZXNNYXBwaW5nIiwiRGlhbG9nQmFja2Ryb3AiLCJmb3J3YXJkUmVmIiwiY29tcG9uZW50UHJvcHMiLCJmb3J3YXJkZWRSZWYiLCJyZW5kZXIiLCJjbGFzc05hbWUiLCJzdHlsZSIsImZvcmNlUmVuZGVyIiwiZWxlbWVudFByb3BzIiwic3RvcmUiLCJvcGVuIiwidXNlU3RhdGUiLCJuZXN0ZWQiLCJtb3VudGVkIiwidHJhbnNpdGlvblN0YXR1cyIsInN0YXRlIiwicmVmIiwiY29udGV4dCIsImJhY2tkcm9wUmVmIiwicHJvcHMiLCJyb2xlIiwiaGlkZGVuIiwidXNlclNlbGVjdCIsIldlYmtpdFVzZXJTZWxlY3QiLCJlbmFibGVkIiwicHJvY2VzcyIsImRpc3BsYXlOYW1lIl0sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/backdrop/DialogBackdrop.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/close/DialogClose.js":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/dialog/close/DialogClose.js ***!
|
||
\*********************************************************************/
|
||
/***/ ((__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 */ DialogClose: () => (/* binding */ DialogClose)\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 _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../root/DialogRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/DialogRootContext.js\");\n/* harmony import */ var _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../internals/useRenderElement.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useRenderElement.js\");\n/* harmony import */ var _internals_use_button_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../internals/use-button/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/use-button/useButton.js\");\n/* harmony import */ var _internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../internals/createBaseUIEventDetails.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.js\");\n/* harmony import */ var _internals_reasons_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../internals/reasons.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/reason-parts.js\");\n/* __next_internal_client_entry_do_not_use__ DialogClose auto */ var _s = $RefreshSig$();\n\n\n\n\n\n\n/**\n * A button that closes the dialog.\n * Renders a `<button>` element.\n *\n * Documentation: [Base UI Dialog](https://base-ui.com/react/components/dialog)\n */ const DialogClose = /*#__PURE__*/ _s(react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c = _s(function DialogClose(componentProps, forwardedRef) {\n _s();\n const { render, className, disabled = false, nativeButton = true, style, ...elementProps } = componentProps;\n const { store } = (0,_root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useDialogRootContext)();\n const open = store.useState('open');\n function handleClick(event) {\n if (open) {\n store.setOpen(false, (0,_internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_2__.createChangeEventDetails)(_internals_reasons_js__WEBPACK_IMPORTED_MODULE_3__.closePress, event.nativeEvent));\n }\n }\n const { getButtonProps, buttonRef } = (0,_internals_use_button_index_js__WEBPACK_IMPORTED_MODULE_4__.useButton)({\n disabled,\n native: nativeButton\n });\n const state = {\n disabled\n };\n return (0,_internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_5__.useRenderElement)('button', componentProps, {\n state,\n ref: [\n forwardedRef,\n buttonRef\n ],\n props: [\n {\n onClick: handleClick\n },\n elementProps,\n getButtonProps\n ]\n });\n}, \"BE0IZSUohwKUqjjbXRGgEuK4E8k=\", false, function() {\n return [\n _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useDialogRootContext,\n _internals_use_button_index_js__WEBPACK_IMPORTED_MODULE_4__.useButton,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_5__.useRenderElement\n ];\n})), \"BE0IZSUohwKUqjjbXRGgEuK4E8k=\", false, function() {\n return [\n _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useDialogRootContext,\n _internals_use_button_index_js__WEBPACK_IMPORTED_MODULE_4__.useButton,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_5__.useRenderElement\n ];\n});\n_c1 = DialogClose;\nif (true) DialogClose.displayName = \"DialogClose\";\nvar _c, _c1;\n$RefreshReg$(_c, \"DialogClose$React.forwardRef\");\n$RefreshReg$(_c1, \"DialogClose\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL2Nsb3NlL0RpYWxvZ0Nsb3NlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBRStCO0FBQ3FDO0FBQ0c7QUFDUDtBQUN1QjtBQUNsQztBQUVyRDs7Ozs7Q0FLQyxHQUNNLE1BQU1NLGNBQWMsV0FBVyxHQUFFTixHQUFBQSw2Q0FBZ0IsU0FBQyxTQUFTTSxZQUFZRSxjQUFjLEVBQUVDLFlBQVk7O0lBQ3hHLE1BQU0sRUFDSkMsTUFBTSxFQUNOQyxTQUFTLEVBQ1RDLFdBQVcsS0FBSyxFQUNoQkMsZUFBZSxJQUFJLEVBQ25CQyxLQUFLLEVBQ0wsR0FBR0MsY0FDSixHQUFHUDtJQUNKLE1BQU0sRUFDSlEsS0FBSyxFQUNOLEdBQUdmLGdGQUFvQkE7SUFDeEIsTUFBTWdCLE9BQU9ELE1BQU1FLFFBQVEsQ0FBQztJQUM1QixTQUFTQyxZQUFZQyxLQUFLO1FBQ3hCLElBQUlILE1BQU07WUFDUkQsTUFBTUssT0FBTyxDQUFDLE9BQU9qQixnR0FBd0JBLENBQUNDLDZEQUFrQixFQUFFZSxNQUFNRyxXQUFXO1FBQ3JGO0lBQ0Y7SUFDQSxNQUFNLEVBQ0pDLGNBQWMsRUFDZEMsU0FBUyxFQUNWLEdBQUd0Qix5RUFBU0EsQ0FBQztRQUNaUztRQUNBYyxRQUFRYjtJQUNWO0lBQ0EsTUFBTWMsUUFBUTtRQUNaZjtJQUNGO0lBQ0EsT0FBT1YsZ0ZBQWdCQSxDQUFDLFVBQVVNLGdCQUFnQjtRQUNoRG1CO1FBQ0FDLEtBQUs7WUFBQ25CO1lBQWNnQjtTQUFVO1FBQzlCSSxPQUFPO1lBQUM7Z0JBQ05DLFNBQVNYO1lBQ1g7WUFBR0o7WUFBY1M7U0FBZTtJQUNsQztBQUNGOztRQXhCTXZCLDRFQUFvQkE7UUFVcEJFLHFFQUFTQTtRQU9ORCw0RUFBZ0JBOzs7O1FBakJuQkQsNEVBQW9CQTtRQVVwQkUscUVBQVNBO1FBT05ELDRFQUFnQkE7O0dBT3RCOztBQUNILElBQUk2QixJQUFxQyxFQUFFekIsWUFBWTBCLFdBQVcsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL2Nsb3NlL0RpYWxvZ0Nsb3NlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRGlhbG9nUm9vdENvbnRleHQgfSBmcm9tIFwiLi4vcm9vdC9EaWFsb2dSb290Q29udGV4dC5qc1wiO1xuaW1wb3J0IHsgdXNlUmVuZGVyRWxlbWVudCB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvdXNlUmVuZGVyRWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgdXNlQnV0dG9uIH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy91c2UtYnV0dG9uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVDaGFuZ2VFdmVudERldGFpbHMgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL2NyZWF0ZUJhc2VVSUV2ZW50RGV0YWlscy5qc1wiO1xuaW1wb3J0IHsgUkVBU09OUyB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvcmVhc29ucy5qc1wiO1xuXG4vKipcbiAqIEEgYnV0dG9uIHRoYXQgY2xvc2VzIHRoZSBkaWFsb2cuXG4gKiBSZW5kZXJzIGEgYDxidXR0b24+YCBlbGVtZW50LlxuICpcbiAqIERvY3VtZW50YXRpb246IFtCYXNlIFVJIERpYWxvZ10oaHR0cHM6Ly9iYXNlLXVpLmNvbS9yZWFjdC9jb21wb25lbnRzL2RpYWxvZylcbiAqL1xuZXhwb3J0IGNvbnN0IERpYWxvZ0Nsb3NlID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRGlhbG9nQ2xvc2UoY29tcG9uZW50UHJvcHMsIGZvcndhcmRlZFJlZikge1xuICBjb25zdCB7XG4gICAgcmVuZGVyLFxuICAgIGNsYXNzTmFtZSxcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgIG5hdGl2ZUJ1dHRvbiA9IHRydWUsXG4gICAgc3R5bGUsXG4gICAgLi4uZWxlbWVudFByb3BzXG4gIH0gPSBjb21wb25lbnRQcm9wcztcbiAgY29uc3Qge1xuICAgIHN0b3JlXG4gIH0gPSB1c2VEaWFsb2dSb290Q29udGV4dCgpO1xuICBjb25zdCBvcGVuID0gc3RvcmUudXNlU3RhdGUoJ29wZW4nKTtcbiAgZnVuY3Rpb24gaGFuZGxlQ2xpY2soZXZlbnQpIHtcbiAgICBpZiAob3Blbikge1xuICAgICAgc3RvcmUuc2V0T3BlbihmYWxzZSwgY3JlYXRlQ2hhbmdlRXZlbnREZXRhaWxzKFJFQVNPTlMuY2xvc2VQcmVzcywgZXZlbnQubmF0aXZlRXZlbnQpKTtcbiAgICB9XG4gIH1cbiAgY29uc3Qge1xuICAgIGdldEJ1dHRvblByb3BzLFxuICAgIGJ1dHRvblJlZlxuICB9ID0gdXNlQnV0dG9uKHtcbiAgICBkaXNhYmxlZCxcbiAgICBuYXRpdmU6IG5hdGl2ZUJ1dHRvblxuICB9KTtcbiAgY29uc3Qgc3RhdGUgPSB7XG4gICAgZGlzYWJsZWRcbiAgfTtcbiAgcmV0dXJuIHVzZVJlbmRlckVsZW1lbnQoJ2J1dHRvbicsIGNvbXBvbmVudFByb3BzLCB7XG4gICAgc3RhdGUsXG4gICAgcmVmOiBbZm9yd2FyZGVkUmVmLCBidXR0b25SZWZdLFxuICAgIHByb3BzOiBbe1xuICAgICAgb25DbGljazogaGFuZGxlQ2xpY2tcbiAgICB9LCBlbGVtZW50UHJvcHMsIGdldEJ1dHRvblByb3BzXVxuICB9KTtcbn0pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgRGlhbG9nQ2xvc2UuZGlzcGxheU5hbWUgPSBcIkRpYWxvZ0Nsb3NlXCI7Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlRGlhbG9nUm9vdENvbnRleHQiLCJ1c2VSZW5kZXJFbGVtZW50IiwidXNlQnV0dG9uIiwiY3JlYXRlQ2hhbmdlRXZlbnREZXRhaWxzIiwiUkVBU09OUyIsIkRpYWxvZ0Nsb3NlIiwiZm9yd2FyZFJlZiIsImNvbXBvbmVudFByb3BzIiwiZm9yd2FyZGVkUmVmIiwicmVuZGVyIiwiY2xhc3NOYW1lIiwiZGlzYWJsZWQiLCJuYXRpdmVCdXR0b24iLCJzdHlsZSIsImVsZW1lbnRQcm9wcyIsInN0b3JlIiwib3BlbiIsInVzZVN0YXRlIiwiaGFuZGxlQ2xpY2siLCJldmVudCIsInNldE9wZW4iLCJjbG9zZVByZXNzIiwibmF0aXZlRXZlbnQiLCJnZXRCdXR0b25Qcm9wcyIsImJ1dHRvblJlZiIsIm5hdGl2ZSIsInN0YXRlIiwicmVmIiwicHJvcHMiLCJvbkNsaWNrIiwicHJvY2VzcyIsImRpc3BsYXlOYW1lIl0sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/close/DialogClose.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/description/DialogDescription.js":
|
||
/*!*********************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/dialog/description/DialogDescription.js ***!
|
||
\*********************************************************************************/
|
||
/***/ ((__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 */ DialogDescription: () => (/* binding */ DialogDescription)\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 _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../root/DialogRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/DialogRootContext.js\");\n/* harmony import */ var _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../internals/useRenderElement.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useRenderElement.js\");\n/* harmony import */ var _internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../internals/useBaseUiId.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useBaseUiId.js\");\n/* __next_internal_client_entry_do_not_use__ DialogDescription auto */ var _s = $RefreshSig$();\n\n\n\n\n/**\n * A paragraph with additional information about the dialog.\n * Renders a `<p>` element.\n *\n * Documentation: [Base UI Dialog](https://base-ui.com/react/components/dialog)\n */ const DialogDescription = /*#__PURE__*/ _s(react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c = _s(function DialogDescription(componentProps, forwardedRef) {\n _s();\n const { render, className, style, id: idProp, ...elementProps } = componentProps;\n const { store } = (0,_root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useDialogRootContext)();\n const id = (0,_internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_2__.useBaseUiId)(idProp);\n store.useSyncedValueWithCleanup('descriptionElementId', id);\n return (0,_internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_3__.useRenderElement)('p', componentProps, {\n ref: forwardedRef,\n props: [\n {\n id\n },\n elementProps\n ]\n });\n}, \"7KAjVrdXIp9VL12lL6CL6x7+Yvw=\", true, function() {\n return [\n _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useDialogRootContext,\n _internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_2__.useBaseUiId,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_3__.useRenderElement\n ];\n})), \"7KAjVrdXIp9VL12lL6CL6x7+Yvw=\", true, function() {\n return [\n _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useDialogRootContext,\n _internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_2__.useBaseUiId,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_3__.useRenderElement\n ];\n});\n_c1 = DialogDescription;\nif (true) DialogDescription.displayName = \"DialogDescription\";\nvar _c, _c1;\n$RefreshReg$(_c, \"DialogDescription$React.forwardRef\");\n$RefreshReg$(_c1, \"DialogDescription\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL2Rlc2NyaXB0aW9uL0RpYWxvZ0Rlc2NyaXB0aW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUUrQjtBQUNxQztBQUNHO0FBQ1Y7QUFDN0Q7Ozs7O0NBS0MsR0FDTSxNQUFNSSxvQkFBb0IsV0FBVyxHQUFFSixHQUFBQSw2Q0FBZ0IsU0FBQyxTQUFTSSxrQkFBa0JFLGNBQWMsRUFBRUMsWUFBWTs7SUFDcEgsTUFBTSxFQUNKQyxNQUFNLEVBQ05DLFNBQVMsRUFDVEMsS0FBSyxFQUNMQyxJQUFJQyxNQUFNLEVBQ1YsR0FBR0MsY0FDSixHQUFHUDtJQUNKLE1BQU0sRUFDSlEsS0FBSyxFQUNOLEdBQUdiLGdGQUFvQkE7SUFDeEIsTUFBTVUsS0FBS1Isc0VBQVdBLENBQUNTO0lBQ3ZCRSxNQUFNQyx5QkFBeUIsQ0FBQyx3QkFBd0JKO0lBQ3hELE9BQU9ULGdGQUFnQkEsQ0FBQyxLQUFLSSxnQkFBZ0I7UUFDM0NVLEtBQUtUO1FBQ0xVLE9BQU87WUFBQztnQkFDTk47WUFDRjtZQUFHRTtTQUFhO0lBQ2xCO0FBQ0Y7O1FBVE1aLDRFQUFvQkE7UUFDYkUsa0VBQVdBO1FBRWZELDRFQUFnQkE7Ozs7UUFIbkJELDRFQUFvQkE7UUFDYkUsa0VBQVdBO1FBRWZELDRFQUFnQkE7O0dBTXRCOztBQUNILElBQUlnQixJQUFxQyxFQUFFZCxrQkFBa0JlLFdBQVcsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL2Rlc2NyaXB0aW9uL0RpYWxvZ0Rlc2NyaXB0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRGlhbG9nUm9vdENvbnRleHQgfSBmcm9tIFwiLi4vcm9vdC9EaWFsb2dSb290Q29udGV4dC5qc1wiO1xuaW1wb3J0IHsgdXNlUmVuZGVyRWxlbWVudCB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvdXNlUmVuZGVyRWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgdXNlQmFzZVVpSWQgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL3VzZUJhc2VVaUlkLmpzXCI7XG4vKipcbiAqIEEgcGFyYWdyYXBoIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGlhbG9nLlxuICogUmVuZGVycyBhIGA8cD5gIGVsZW1lbnQuXG4gKlxuICogRG9jdW1lbnRhdGlvbjogW0Jhc2UgVUkgRGlhbG9nXShodHRwczovL2Jhc2UtdWkuY29tL3JlYWN0L2NvbXBvbmVudHMvZGlhbG9nKVxuICovXG5leHBvcnQgY29uc3QgRGlhbG9nRGVzY3JpcHRpb24gPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBEaWFsb2dEZXNjcmlwdGlvbihjb21wb25lbnRQcm9wcywgZm9yd2FyZGVkUmVmKSB7XG4gIGNvbnN0IHtcbiAgICByZW5kZXIsXG4gICAgY2xhc3NOYW1lLFxuICAgIHN0eWxlLFxuICAgIGlkOiBpZFByb3AsXG4gICAgLi4uZWxlbWVudFByb3BzXG4gIH0gPSBjb21wb25lbnRQcm9wcztcbiAgY29uc3Qge1xuICAgIHN0b3JlXG4gIH0gPSB1c2VEaWFsb2dSb290Q29udGV4dCgpO1xuICBjb25zdCBpZCA9IHVzZUJhc2VVaUlkKGlkUHJvcCk7XG4gIHN0b3JlLnVzZVN5bmNlZFZhbHVlV2l0aENsZWFudXAoJ2Rlc2NyaXB0aW9uRWxlbWVudElkJywgaWQpO1xuICByZXR1cm4gdXNlUmVuZGVyRWxlbWVudCgncCcsIGNvbXBvbmVudFByb3BzLCB7XG4gICAgcmVmOiBmb3J3YXJkZWRSZWYsXG4gICAgcHJvcHM6IFt7XG4gICAgICBpZFxuICAgIH0sIGVsZW1lbnRQcm9wc11cbiAgfSk7XG59KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIERpYWxvZ0Rlc2NyaXB0aW9uLmRpc3BsYXlOYW1lID0gXCJEaWFsb2dEZXNjcmlwdGlvblwiOyJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZURpYWxvZ1Jvb3RDb250ZXh0IiwidXNlUmVuZGVyRWxlbWVudCIsInVzZUJhc2VVaUlkIiwiRGlhbG9nRGVzY3JpcHRpb24iLCJmb3J3YXJkUmVmIiwiY29tcG9uZW50UHJvcHMiLCJmb3J3YXJkZWRSZWYiLCJyZW5kZXIiLCJjbGFzc05hbWUiLCJzdHlsZSIsImlkIiwiaWRQcm9wIiwiZWxlbWVudFByb3BzIiwic3RvcmUiLCJ1c2VTeW5jZWRWYWx1ZVdpdGhDbGVhbnVwIiwicmVmIiwicHJvcHMiLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/description/DialogDescription.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/popup/DialogPopup.js":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/dialog/popup/DialogPopup.js ***!
|
||
\*********************************************************************/
|
||
/***/ ((__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 */ DialogPopup: () => (/* binding */ DialogPopup)\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 _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../floating-ui-react/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingFocusManager.js\");\n/* harmony import */ var _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../root/DialogRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/DialogRootContext.js\");\n/* harmony import */ var _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../internals/useRenderElement.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useRenderElement.js\");\n/* harmony import */ var _utils_popupStateMapping_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/popupStateMapping.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popupStateMapping.js\");\n/* harmony import */ var _internals_stateAttributesMapping_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../internals/stateAttributesMapping.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/stateAttributesMapping.js\");\n/* harmony import */ var _DialogPopupCssVars_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./DialogPopupCssVars.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/popup/DialogPopupCssVars.js\");\n/* harmony import */ var _DialogPopupDataAttributes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./DialogPopupDataAttributes.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/popup/DialogPopupDataAttributes.js\");\n/* harmony import */ var _portal_DialogPortalContext_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../portal/DialogPortalContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/portal/DialogPortalContext.js\");\n/* harmony import */ var _internals_useOpenChangeComplete_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../internals/useOpenChangeComplete.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useOpenChangeComplete.js\");\n/* harmony import */ var _internals_composite_composite_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../internals/composite/composite.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/composite/composite.js\");\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__ DialogPopup auto */ var _s = $RefreshSig$();\n\n\n\n\n\n\n\n\n\n\n\n\nconst stateAttributesMapping = {\n ..._utils_popupStateMapping_js__WEBPACK_IMPORTED_MODULE_2__.popupStateMapping,\n ..._internals_stateAttributesMapping_js__WEBPACK_IMPORTED_MODULE_3__.transitionStatusMapping,\n nestedDialogOpen (value) {\n return value ? {\n [_DialogPopupDataAttributes_js__WEBPACK_IMPORTED_MODULE_4__.DialogPopupDataAttributes.nestedDialogOpen]: ''\n } : null;\n }\n};\n/**\n * A container for the dialog contents.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Dialog](https://base-ui.com/react/components/dialog)\n */ const DialogPopup = /*#__PURE__*/ _s(react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c = _s(function DialogPopup(componentProps, forwardedRef) {\n _s();\n const { className, finalFocus, initialFocus, render, style, ...elementProps } = componentProps;\n const { store } = (0,_root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_5__.useDialogRootContext)();\n const descriptionElementId = store.useState('descriptionElementId');\n const disablePointerDismissal = store.useState('disablePointerDismissal');\n const floatingRootContext = store.useState('floatingRootContext');\n const rootPopupProps = store.useState('popupProps');\n const modal = store.useState('modal');\n const mounted = store.useState('mounted');\n const nested = store.useState('nested');\n const nestedOpenDialogCount = store.useState('nestedOpenDialogCount');\n const open = store.useState('open');\n const openMethod = store.useState('openMethod');\n const titleElementId = store.useState('titleElementId');\n const transitionStatus = store.useState('transitionStatus');\n const role = store.useState('role');\n (0,_portal_DialogPortalContext_js__WEBPACK_IMPORTED_MODULE_6__.useDialogPortalContext)();\n (0,_internals_useOpenChangeComplete_js__WEBPACK_IMPORTED_MODULE_7__.useOpenChangeComplete)({\n open,\n ref: store.context.popupRef,\n onComplete () {\n if (open) {\n var _store_context_onOpenChangeComplete, _store_context;\n (_store_context_onOpenChangeComplete = (_store_context = store.context).onOpenChangeComplete) === null || _store_context_onOpenChangeComplete === void 0 ? void 0 : _store_context_onOpenChangeComplete.call(_store_context, true);\n }\n }\n });\n // Default initial focus logic:\n // If opened by touch, focus the popup element to prevent the virtual keyboard from opening\n // (this is required for Android specifically as iOS handles this automatically).\n function defaultInitialFocus(interactionType) {\n if (interactionType === 'touch') {\n return store.context.popupRef.current;\n }\n return true;\n }\n const resolvedInitialFocus = initialFocus === undefined ? defaultInitialFocus : initialFocus;\n const nestedDialogOpen = nestedOpenDialogCount > 0;\n const state = {\n open,\n nested,\n transitionStatus,\n nestedDialogOpen\n };\n const element = (0,_internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_8__.useRenderElement)('div', componentProps, {\n state,\n props: [\n rootPopupProps,\n {\n 'aria-labelledby': titleElementId !== null && titleElementId !== void 0 ? titleElementId : undefined,\n 'aria-describedby': descriptionElementId !== null && descriptionElementId !== void 0 ? descriptionElementId : undefined,\n role,\n tabIndex: -1,\n hidden: !mounted,\n onKeyDown (event) {\n if (_internals_composite_composite_js__WEBPACK_IMPORTED_MODULE_9__.COMPOSITE_KEYS.has(event.key)) {\n event.stopPropagation();\n }\n },\n style: {\n [_DialogPopupCssVars_js__WEBPACK_IMPORTED_MODULE_10__.DialogPopupCssVars.nestedDialogs]: nestedOpenDialogCount\n }\n },\n elementProps\n ],\n ref: [\n forwardedRef,\n store.context.popupRef,\n store.useStateSetter('popupElement')\n ],\n stateAttributesMapping\n });\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_11__.FloatingFocusManager, {\n context: floatingRootContext,\n openInteractionType: openMethod,\n disabled: !mounted,\n closeOnFocusOut: !disablePointerDismissal,\n initialFocus: resolvedInitialFocus,\n returnFocus: finalFocus,\n modal: modal !== false,\n restoreFocus: \"popup\",\n children: element\n });\n}, \"G9CB/Va2v8OGeC3EkMx3d4V1pPY=\", false, function() {\n return [\n _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_5__.useDialogRootContext,\n _portal_DialogPortalContext_js__WEBPACK_IMPORTED_MODULE_6__.useDialogPortalContext,\n _internals_useOpenChangeComplete_js__WEBPACK_IMPORTED_MODULE_7__.useOpenChangeComplete,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_8__.useRenderElement\n ];\n})), \"G9CB/Va2v8OGeC3EkMx3d4V1pPY=\", false, function() {\n return [\n _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_5__.useDialogRootContext,\n _portal_DialogPortalContext_js__WEBPACK_IMPORTED_MODULE_6__.useDialogPortalContext,\n _internals_useOpenChangeComplete_js__WEBPACK_IMPORTED_MODULE_7__.useOpenChangeComplete,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_8__.useRenderElement\n ];\n});\n_c1 = DialogPopup;\nif (true) DialogPopup.displayName = \"DialogPopup\";\nvar _c, _c1;\n$RefreshReg$(_c, \"DialogPopup$React.forwardRef\");\n$RefreshReg$(_c1, \"DialogPopup\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3BvcHVwL0RpYWxvZ1BvcHVwLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRStCO0FBQ3lDO0FBQ0o7QUFDRztBQUNhO0FBQ0E7QUFDdkI7QUFDYztBQUNEO0FBQ087QUFDVDtBQUN4QjtBQUNoRCxNQUFNYyx5QkFBeUI7SUFDN0IsR0FBR1QsMEVBQVc7SUFDZCxHQUFHQyx5RkFBdUI7SUFDMUJTLGtCQUFpQkMsS0FBSztRQUNwQixPQUFPQSxRQUFRO1lBQ2IsQ0FBQ1Isb0ZBQXlCQSxDQUFDTyxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ2hELElBQUk7SUFDTjtBQUNGO0FBRUE7Ozs7O0NBS0MsR0FDTSxNQUFNRSxjQUFjLFdBQVcsR0FBRWpCLEdBQUFBLDZDQUFnQixTQUFDLFNBQVNpQixZQUFZRSxjQUFjLEVBQUVDLFlBQVk7O0lBQ3hHLE1BQU0sRUFDSkMsU0FBUyxFQUNUQyxVQUFVLEVBQ1ZDLFlBQVksRUFDWkMsTUFBTSxFQUNOQyxLQUFLLEVBQ0wsR0FBR0MsY0FDSixHQUFHUDtJQUNKLE1BQU0sRUFDSlEsS0FBSyxFQUNOLEdBQUd6QixnRkFBb0JBO0lBQ3hCLE1BQU0wQix1QkFBdUJELE1BQU1FLFFBQVEsQ0FBQztJQUM1QyxNQUFNQywwQkFBMEJILE1BQU1FLFFBQVEsQ0FBQztJQUMvQyxNQUFNRSxzQkFBc0JKLE1BQU1FLFFBQVEsQ0FBQztJQUMzQyxNQUFNRyxpQkFBaUJMLE1BQU1FLFFBQVEsQ0FBQztJQUN0QyxNQUFNSSxRQUFRTixNQUFNRSxRQUFRLENBQUM7SUFDN0IsTUFBTUssVUFBVVAsTUFBTUUsUUFBUSxDQUFDO0lBQy9CLE1BQU1NLFNBQVNSLE1BQU1FLFFBQVEsQ0FBQztJQUM5QixNQUFNTyx3QkFBd0JULE1BQU1FLFFBQVEsQ0FBQztJQUM3QyxNQUFNUSxPQUFPVixNQUFNRSxRQUFRLENBQUM7SUFDNUIsTUFBTVMsYUFBYVgsTUFBTUUsUUFBUSxDQUFDO0lBQ2xDLE1BQU1VLGlCQUFpQlosTUFBTUUsUUFBUSxDQUFDO0lBQ3RDLE1BQU1XLG1CQUFtQmIsTUFBTUUsUUFBUSxDQUFDO0lBQ3hDLE1BQU1ZLE9BQU9kLE1BQU1FLFFBQVEsQ0FBQztJQUM1QnBCLHNGQUFzQkE7SUFDdEJDLDBGQUFxQkEsQ0FBQztRQUNwQjJCO1FBQ0FLLEtBQUtmLE1BQU1nQixPQUFPLENBQUNDLFFBQVE7UUFDM0JDO1lBQ0UsSUFBSVIsTUFBTTtvQkFDUlYscUNBQUFBO2lCQUFBQSxzQ0FBQUEsQ0FBQUEsaUJBQUFBLE1BQU1nQixPQUFPLEVBQUNHLG9CQUFvQixjQUFsQ25CLDBEQUFBQSx5Q0FBQUEsZ0JBQXFDO1lBQ3ZDO1FBQ0Y7SUFDRjtJQUVBLCtCQUErQjtJQUMvQiwyRkFBMkY7SUFDM0YsaUZBQWlGO0lBQ2pGLFNBQVNvQixvQkFBb0JDLGVBQWU7UUFDMUMsSUFBSUEsb0JBQW9CLFNBQVM7WUFDL0IsT0FBT3JCLE1BQU1nQixPQUFPLENBQUNDLFFBQVEsQ0FBQ0ssT0FBTztRQUN2QztRQUNBLE9BQU87SUFDVDtJQUNBLE1BQU1DLHVCQUF1QjNCLGlCQUFpQjRCLFlBQVlKLHNCQUFzQnhCO0lBQ2hGLE1BQU1SLG1CQUFtQnFCLHdCQUF3QjtJQUNqRCxNQUFNZ0IsUUFBUTtRQUNaZjtRQUNBRjtRQUNBSztRQUNBekI7SUFDRjtJQUNBLE1BQU1zQyxVQUFVbEQsZ0ZBQWdCQSxDQUFDLE9BQU9nQixnQkFBZ0I7UUFDdERpQztRQUNBRSxPQUFPO1lBQUN0QjtZQUFnQjtnQkFDdEIsbUJBQW1CTywyQkFBQUEsNEJBQUFBLGlCQUFrQlk7Z0JBQ3JDLG9CQUFvQnZCLGlDQUFBQSxrQ0FBQUEsdUJBQXdCdUI7Z0JBQzVDVjtnQkFDQWMsVUFBVSxDQUFDO2dCQUNYQyxRQUFRLENBQUN0QjtnQkFDVHVCLFdBQVVDLEtBQUs7b0JBQ2IsSUFBSS9DLDZFQUFjQSxDQUFDZ0QsR0FBRyxDQUFDRCxNQUFNRSxHQUFHLEdBQUc7d0JBQ2pDRixNQUFNRyxlQUFlO29CQUN2QjtnQkFDRjtnQkFDQXBDLE9BQU87b0JBQ0wsQ0FBQ2xCLHVFQUFrQkEsQ0FBQ3VELGFBQWEsQ0FBQyxFQUFFMUI7Z0JBQ3RDO1lBQ0Y7WUFBR1Y7U0FBYTtRQUNoQmdCLEtBQUs7WUFBQ3RCO1lBQWNPLE1BQU1nQixPQUFPLENBQUNDLFFBQVE7WUFBRWpCLE1BQU1vQyxjQUFjLENBQUM7U0FBZ0I7UUFDakZqRDtJQUNGO0lBQ0EsT0FBTyxXQUFXLEdBQUVELHNEQUFJQSxDQUFDWiw4RUFBb0JBLEVBQUU7UUFDN0MwQyxTQUFTWjtRQUNUaUMscUJBQXFCMUI7UUFDckIyQixVQUFVLENBQUMvQjtRQUNYZ0MsaUJBQWlCLENBQUNwQztRQUNsQlAsY0FBYzJCO1FBQ2RpQixhQUFhN0M7UUFDYlcsT0FBT0EsVUFBVTtRQUNqQm1DLGNBQWM7UUFDZEMsVUFBVWhCO0lBQ1o7QUFDRjs7UUF6RU1uRCw0RUFBb0JBO1FBY3hCTyxrRkFBc0JBO1FBQ3RCQyxzRkFBcUJBO1FBMkJMUCw0RUFBZ0JBOzs7O1FBMUM1QkQsNEVBQW9CQTtRQWN4Qk8sa0ZBQXNCQTtRQUN0QkMsc0ZBQXFCQTtRQTJCTFAsNEVBQWdCQTs7R0ErQi9COztBQUNILElBQUltRSxJQUFxQyxFQUFFckQsWUFBWXNELFdBQVcsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3BvcHVwL0RpYWxvZ1BvcHVwLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgRmxvYXRpbmdGb2N1c01hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZmxvYXRpbmctdWktcmVhY3QvaW5kZXguanNcIjtcbmltcG9ydCB7IHVzZURpYWxvZ1Jvb3RDb250ZXh0IH0gZnJvbSBcIi4uL3Jvb3QvRGlhbG9nUm9vdENvbnRleHQuanNcIjtcbmltcG9ydCB7IHVzZVJlbmRlckVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL3VzZVJlbmRlckVsZW1lbnQuanNcIjtcbmltcG9ydCB7IHBvcHVwU3RhdGVNYXBwaW5nIGFzIGJhc2VNYXBwaW5nIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BvcHVwU3RhdGVNYXBwaW5nLmpzXCI7XG5pbXBvcnQgeyB0cmFuc2l0aW9uU3RhdHVzTWFwcGluZyB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvc3RhdGVBdHRyaWJ1dGVzTWFwcGluZy5qc1wiO1xuaW1wb3J0IHsgRGlhbG9nUG9wdXBDc3NWYXJzIH0gZnJvbSBcIi4vRGlhbG9nUG9wdXBDc3NWYXJzLmpzXCI7XG5pbXBvcnQgeyBEaWFsb2dQb3B1cERhdGFBdHRyaWJ1dGVzIH0gZnJvbSBcIi4vRGlhbG9nUG9wdXBEYXRhQXR0cmlidXRlcy5qc1wiO1xuaW1wb3J0IHsgdXNlRGlhbG9nUG9ydGFsQ29udGV4dCB9IGZyb20gXCIuLi9wb3J0YWwvRGlhbG9nUG9ydGFsQ29udGV4dC5qc1wiO1xuaW1wb3J0IHsgdXNlT3BlbkNoYW5nZUNvbXBsZXRlIH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy91c2VPcGVuQ2hhbmdlQ29tcGxldGUuanNcIjtcbmltcG9ydCB7IENPTVBPU0lURV9LRVlTIH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy9jb21wb3NpdGUvY29tcG9zaXRlLmpzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3Qgc3RhdGVBdHRyaWJ1dGVzTWFwcGluZyA9IHtcbiAgLi4uYmFzZU1hcHBpbmcsXG4gIC4uLnRyYW5zaXRpb25TdGF0dXNNYXBwaW5nLFxuICBuZXN0ZWREaWFsb2dPcGVuKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlID8ge1xuICAgICAgW0RpYWxvZ1BvcHVwRGF0YUF0dHJpYnV0ZXMubmVzdGVkRGlhbG9nT3Blbl06ICcnXG4gICAgfSA6IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogQSBjb250YWluZXIgZm9yIHRoZSBkaWFsb2cgY29udGVudHMuXG4gKiBSZW5kZXJzIGEgYDxkaXY+YCBlbGVtZW50LlxuICpcbiAqIERvY3VtZW50YXRpb246IFtCYXNlIFVJIERpYWxvZ10oaHR0cHM6Ly9iYXNlLXVpLmNvbS9yZWFjdC9jb21wb25lbnRzL2RpYWxvZylcbiAqL1xuZXhwb3J0IGNvbnN0IERpYWxvZ1BvcHVwID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRGlhbG9nUG9wdXAoY29tcG9uZW50UHJvcHMsIGZvcndhcmRlZFJlZikge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGZpbmFsRm9jdXMsXG4gICAgaW5pdGlhbEZvY3VzLFxuICAgIHJlbmRlcixcbiAgICBzdHlsZSxcbiAgICAuLi5lbGVtZW50UHJvcHNcbiAgfSA9IGNvbXBvbmVudFByb3BzO1xuICBjb25zdCB7XG4gICAgc3RvcmVcbiAgfSA9IHVzZURpYWxvZ1Jvb3RDb250ZXh0KCk7XG4gIGNvbnN0IGRlc2NyaXB0aW9uRWxlbWVudElkID0gc3RvcmUudXNlU3RhdGUoJ2Rlc2NyaXB0aW9uRWxlbWVudElkJyk7XG4gIGNvbnN0IGRpc2FibGVQb2ludGVyRGlzbWlzc2FsID0gc3RvcmUudXNlU3RhdGUoJ2Rpc2FibGVQb2ludGVyRGlzbWlzc2FsJyk7XG4gIGNvbnN0IGZsb2F0aW5nUm9vdENvbnRleHQgPSBzdG9yZS51c2VTdGF0ZSgnZmxvYXRpbmdSb290Q29udGV4dCcpO1xuICBjb25zdCByb290UG9wdXBQcm9wcyA9IHN0b3JlLnVzZVN0YXRlKCdwb3B1cFByb3BzJyk7XG4gIGNvbnN0IG1vZGFsID0gc3RvcmUudXNlU3RhdGUoJ21vZGFsJyk7XG4gIGNvbnN0IG1vdW50ZWQgPSBzdG9yZS51c2VTdGF0ZSgnbW91bnRlZCcpO1xuICBjb25zdCBuZXN0ZWQgPSBzdG9yZS51c2VTdGF0ZSgnbmVzdGVkJyk7XG4gIGNvbnN0IG5lc3RlZE9wZW5EaWFsb2dDb3VudCA9IHN0b3JlLnVzZVN0YXRlKCduZXN0ZWRPcGVuRGlhbG9nQ291bnQnKTtcbiAgY29uc3Qgb3BlbiA9IHN0b3JlLnVzZVN0YXRlKCdvcGVuJyk7XG4gIGNvbnN0IG9wZW5NZXRob2QgPSBzdG9yZS51c2VTdGF0ZSgnb3Blbk1ldGhvZCcpO1xuICBjb25zdCB0aXRsZUVsZW1lbnRJZCA9IHN0b3JlLnVzZVN0YXRlKCd0aXRsZUVsZW1lbnRJZCcpO1xuICBjb25zdCB0cmFuc2l0aW9uU3RhdHVzID0gc3RvcmUudXNlU3RhdGUoJ3RyYW5zaXRpb25TdGF0dXMnKTtcbiAgY29uc3Qgcm9sZSA9IHN0b3JlLnVzZVN0YXRlKCdyb2xlJyk7XG4gIHVzZURpYWxvZ1BvcnRhbENvbnRleHQoKTtcbiAgdXNlT3BlbkNoYW5nZUNvbXBsZXRlKHtcbiAgICBvcGVuLFxuICAgIHJlZjogc3RvcmUuY29udGV4dC5wb3B1cFJlZixcbiAgICBvbkNvbXBsZXRlKCkge1xuICAgICAgaWYgKG9wZW4pIHtcbiAgICAgICAgc3RvcmUuY29udGV4dC5vbk9wZW5DaGFuZ2VDb21wbGV0ZT8uKHRydWUpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gRGVmYXVsdCBpbml0aWFsIGZvY3VzIGxvZ2ljOlxuICAvLyBJZiBvcGVuZWQgYnkgdG91Y2gsIGZvY3VzIHRoZSBwb3B1cCBlbGVtZW50IHRvIHByZXZlbnQgdGhlIHZpcnR1YWwga2V5Ym9hcmQgZnJvbSBvcGVuaW5nXG4gIC8vICh0aGlzIGlzIHJlcXVpcmVkIGZvciBBbmRyb2lkIHNwZWNpZmljYWxseSBhcyBpT1MgaGFuZGxlcyB0aGlzIGF1dG9tYXRpY2FsbHkpLlxuICBmdW5jdGlvbiBkZWZhdWx0SW5pdGlhbEZvY3VzKGludGVyYWN0aW9uVHlwZSkge1xuICAgIGlmIChpbnRlcmFjdGlvblR5cGUgPT09ICd0b3VjaCcpIHtcbiAgICAgIHJldHVybiBzdG9yZS5jb250ZXh0LnBvcHVwUmVmLmN1cnJlbnQ7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IHJlc29sdmVkSW5pdGlhbEZvY3VzID0gaW5pdGlhbEZvY3VzID09PSB1bmRlZmluZWQgPyBkZWZhdWx0SW5pdGlhbEZvY3VzIDogaW5pdGlhbEZvY3VzO1xuICBjb25zdCBuZXN0ZWREaWFsb2dPcGVuID0gbmVzdGVkT3BlbkRpYWxvZ0NvdW50ID4gMDtcbiAgY29uc3Qgc3RhdGUgPSB7XG4gICAgb3BlbixcbiAgICBuZXN0ZWQsXG4gICAgdHJhbnNpdGlvblN0YXR1cyxcbiAgICBuZXN0ZWREaWFsb2dPcGVuXG4gIH07XG4gIGNvbnN0IGVsZW1lbnQgPSB1c2VSZW5kZXJFbGVtZW50KCdkaXYnLCBjb21wb25lbnRQcm9wcywge1xuICAgIHN0YXRlLFxuICAgIHByb3BzOiBbcm9vdFBvcHVwUHJvcHMsIHtcbiAgICAgICdhcmlhLWxhYmVsbGVkYnknOiB0aXRsZUVsZW1lbnRJZCA/PyB1bmRlZmluZWQsXG4gICAgICAnYXJpYS1kZXNjcmliZWRieSc6IGRlc2NyaXB0aW9uRWxlbWVudElkID8/IHVuZGVmaW5lZCxcbiAgICAgIHJvbGUsXG4gICAgICB0YWJJbmRleDogLTEsXG4gICAgICBoaWRkZW46ICFtb3VudGVkLFxuICAgICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICAgIGlmIChDT01QT1NJVEVfS0VZUy5oYXMoZXZlbnQua2V5KSkge1xuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgc3R5bGU6IHtcbiAgICAgICAgW0RpYWxvZ1BvcHVwQ3NzVmFycy5uZXN0ZWREaWFsb2dzXTogbmVzdGVkT3BlbkRpYWxvZ0NvdW50XG4gICAgICB9XG4gICAgfSwgZWxlbWVudFByb3BzXSxcbiAgICByZWY6IFtmb3J3YXJkZWRSZWYsIHN0b3JlLmNvbnRleHQucG9wdXBSZWYsIHN0b3JlLnVzZVN0YXRlU2V0dGVyKCdwb3B1cEVsZW1lbnQnKV0sXG4gICAgc3RhdGVBdHRyaWJ1dGVzTWFwcGluZ1xuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZsb2F0aW5nRm9jdXNNYW5hZ2VyLCB7XG4gICAgY29udGV4dDogZmxvYXRpbmdSb290Q29udGV4dCxcbiAgICBvcGVuSW50ZXJhY3Rpb25UeXBlOiBvcGVuTWV0aG9kLFxuICAgIGRpc2FibGVkOiAhbW91bnRlZCxcbiAgICBjbG9zZU9uRm9jdXNPdXQ6ICFkaXNhYmxlUG9pbnRlckRpc21pc3NhbCxcbiAgICBpbml0aWFsRm9jdXM6IHJlc29sdmVkSW5pdGlhbEZvY3VzLFxuICAgIHJldHVybkZvY3VzOiBmaW5hbEZvY3VzLFxuICAgIG1vZGFsOiBtb2RhbCAhPT0gZmFsc2UsXG4gICAgcmVzdG9yZUZvY3VzOiBcInBvcHVwXCIsXG4gICAgY2hpbGRyZW46IGVsZW1lbnRcbiAgfSk7XG59KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIERpYWxvZ1BvcHVwLmRpc3BsYXlOYW1lID0gXCJEaWFsb2dQb3B1cFwiOyJdLCJuYW1lcyI6WyJSZWFjdCIsIkZsb2F0aW5nRm9jdXNNYW5hZ2VyIiwidXNlRGlhbG9nUm9vdENvbnRleHQiLCJ1c2VSZW5kZXJFbGVtZW50IiwicG9wdXBTdGF0ZU1hcHBpbmciLCJiYXNlTWFwcGluZyIsInRyYW5zaXRpb25TdGF0dXNNYXBwaW5nIiwiRGlhbG9nUG9wdXBDc3NWYXJzIiwiRGlhbG9nUG9wdXBEYXRhQXR0cmlidXRlcyIsInVzZURpYWxvZ1BvcnRhbENvbnRleHQiLCJ1c2VPcGVuQ2hhbmdlQ29tcGxldGUiLCJDT01QT1NJVEVfS0VZUyIsImpzeCIsIl9qc3giLCJzdGF0ZUF0dHJpYnV0ZXNNYXBwaW5nIiwibmVzdGVkRGlhbG9nT3BlbiIsInZhbHVlIiwiRGlhbG9nUG9wdXAiLCJmb3J3YXJkUmVmIiwiY29tcG9uZW50UHJvcHMiLCJmb3J3YXJkZWRSZWYiLCJjbGFzc05hbWUiLCJmaW5hbEZvY3VzIiwiaW5pdGlhbEZvY3VzIiwicmVuZGVyIiwic3R5bGUiLCJlbGVtZW50UHJvcHMiLCJzdG9yZSIsImRlc2NyaXB0aW9uRWxlbWVudElkIiwidXNlU3RhdGUiLCJkaXNhYmxlUG9pbnRlckRpc21pc3NhbCIsImZsb2F0aW5nUm9vdENvbnRleHQiLCJyb290UG9wdXBQcm9wcyIsIm1vZGFsIiwibW91bnRlZCIsIm5lc3RlZCIsIm5lc3RlZE9wZW5EaWFsb2dDb3VudCIsIm9wZW4iLCJvcGVuTWV0aG9kIiwidGl0bGVFbGVtZW50SWQiLCJ0cmFuc2l0aW9uU3RhdHVzIiwicm9sZSIsInJlZiIsImNvbnRleHQiLCJwb3B1cFJlZiIsIm9uQ29tcGxldGUiLCJvbk9wZW5DaGFuZ2VDb21wbGV0ZSIsImRlZmF1bHRJbml0aWFsRm9jdXMiLCJpbnRlcmFjdGlvblR5cGUiLCJjdXJyZW50IiwicmVzb2x2ZWRJbml0aWFsRm9jdXMiLCJ1bmRlZmluZWQiLCJzdGF0ZSIsImVsZW1lbnQiLCJwcm9wcyIsInRhYkluZGV4IiwiaGlkZGVuIiwib25LZXlEb3duIiwiZXZlbnQiLCJoYXMiLCJrZXkiLCJzdG9wUHJvcGFnYXRpb24iLCJuZXN0ZWREaWFsb2dzIiwidXNlU3RhdGVTZXR0ZXIiLCJvcGVuSW50ZXJhY3Rpb25UeXBlIiwiZGlzYWJsZWQiLCJjbG9zZU9uRm9jdXNPdXQiLCJyZXR1cm5Gb2N1cyIsInJlc3RvcmVGb2N1cyIsImNoaWxkcmVuIiwicHJvY2VzcyIsImRpc3BsYXlOYW1lIl0sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/popup/DialogPopup.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/popup/DialogPopupCssVars.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/dialog/popup/DialogPopupCssVars.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((__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 */ DialogPopupCssVars: () => (/* binding */ DialogPopupCssVars)\n/* harmony export */ });\nlet DialogPopupCssVars = /*#__PURE__*/function (DialogPopupCssVars) {\n /**\n * Indicates how many dialogs are nested within.\n * @type {number}\n */\n DialogPopupCssVars[\"nestedDialogs\"] = \"--nested-dialogs\";\n return DialogPopupCssVars;\n}({});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3BvcHVwL0RpYWxvZ1BvcHVwQ3NzVmFycy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU87QUFDUDtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBLENBQUMsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3BvcHVwL0RpYWxvZ1BvcHVwQ3NzVmFycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgbGV0IERpYWxvZ1BvcHVwQ3NzVmFycyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoRGlhbG9nUG9wdXBDc3NWYXJzKSB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgaG93IG1hbnkgZGlhbG9ncyBhcmUgbmVzdGVkIHdpdGhpbi5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG4gIERpYWxvZ1BvcHVwQ3NzVmFyc1tcIm5lc3RlZERpYWxvZ3NcIl0gPSBcIi0tbmVzdGVkLWRpYWxvZ3NcIjtcbiAgcmV0dXJuIERpYWxvZ1BvcHVwQ3NzVmFycztcbn0oe30pOyJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/popup/DialogPopupCssVars.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/popup/DialogPopupDataAttributes.js":
|
||
/*!***********************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/dialog/popup/DialogPopupDataAttributes.js ***!
|
||
\***********************************************************************************/
|
||
/***/ ((__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 */ DialogPopupDataAttributes: () => (/* binding */ DialogPopupDataAttributes)\n/* harmony export */ });\n/* harmony import */ var _utils_popupStateMapping_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../utils/popupStateMapping.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popupStateMapping.js\");\n\nlet DialogPopupDataAttributes = function (DialogPopupDataAttributes) {\n /**\n * Present when the dialog is open.\n */\n DialogPopupDataAttributes[DialogPopupDataAttributes[\"open\"] = _utils_popupStateMapping_js__WEBPACK_IMPORTED_MODULE_0__.CommonPopupDataAttributes.open] = \"open\";\n /**\n * Present when the dialog is closed.\n */\n DialogPopupDataAttributes[DialogPopupDataAttributes[\"closed\"] = _utils_popupStateMapping_js__WEBPACK_IMPORTED_MODULE_0__.CommonPopupDataAttributes.closed] = \"closed\";\n /**\n * Present when the dialog is animating in.\n */\n DialogPopupDataAttributes[DialogPopupDataAttributes[\"startingStyle\"] = _utils_popupStateMapping_js__WEBPACK_IMPORTED_MODULE_0__.CommonPopupDataAttributes.startingStyle] = \"startingStyle\";\n /**\n * Present when the dialog is animating out.\n */\n DialogPopupDataAttributes[DialogPopupDataAttributes[\"endingStyle\"] = _utils_popupStateMapping_js__WEBPACK_IMPORTED_MODULE_0__.CommonPopupDataAttributes.endingStyle] = \"endingStyle\";\n /**\n * Present when the dialog is nested within another dialog.\n */\n DialogPopupDataAttributes[\"nested\"] = \"data-nested\";\n /**\n * Present when the dialog has other open dialogs nested within it.\n */\n DialogPopupDataAttributes[\"nestedDialogOpen\"] = \"data-nested-dialog-open\";\n return DialogPopupDataAttributes;\n}({});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3BvcHVwL0RpYWxvZ1BvcHVwRGF0YUF0dHJpYnV0ZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBNkU7QUFDdEU7QUFDUDtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0Usa0ZBQXlCO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBLGtFQUFrRSxrRkFBeUI7QUFDM0Y7QUFDQTtBQUNBO0FBQ0EseUVBQXlFLGtGQUF5QjtBQUNsRztBQUNBO0FBQ0E7QUFDQSx1RUFBdUUsa0ZBQXlCO0FBQ2hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3BvcHVwL0RpYWxvZ1BvcHVwRGF0YUF0dHJpYnV0ZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uUG9wdXBEYXRhQXR0cmlidXRlcyB9IGZyb20gXCIuLi8uLi91dGlscy9wb3B1cFN0YXRlTWFwcGluZy5qc1wiO1xuZXhwb3J0IGxldCBEaWFsb2dQb3B1cERhdGFBdHRyaWJ1dGVzID0gZnVuY3Rpb24gKERpYWxvZ1BvcHVwRGF0YUF0dHJpYnV0ZXMpIHtcbiAgLyoqXG4gICAqIFByZXNlbnQgd2hlbiB0aGUgZGlhbG9nIGlzIG9wZW4uXG4gICAqL1xuICBEaWFsb2dQb3B1cERhdGFBdHRyaWJ1dGVzW0RpYWxvZ1BvcHVwRGF0YUF0dHJpYnV0ZXNbXCJvcGVuXCJdID0gQ29tbW9uUG9wdXBEYXRhQXR0cmlidXRlcy5vcGVuXSA9IFwib3BlblwiO1xuICAvKipcbiAgICogUHJlc2VudCB3aGVuIHRoZSBkaWFsb2cgaXMgY2xvc2VkLlxuICAgKi9cbiAgRGlhbG9nUG9wdXBEYXRhQXR0cmlidXRlc1tEaWFsb2dQb3B1cERhdGFBdHRyaWJ1dGVzW1wiY2xvc2VkXCJdID0gQ29tbW9uUG9wdXBEYXRhQXR0cmlidXRlcy5jbG9zZWRdID0gXCJjbG9zZWRcIjtcbiAgLyoqXG4gICAqIFByZXNlbnQgd2hlbiB0aGUgZGlhbG9nIGlzIGFuaW1hdGluZyBpbi5cbiAgICovXG4gIERpYWxvZ1BvcHVwRGF0YUF0dHJpYnV0ZXNbRGlhbG9nUG9wdXBEYXRhQXR0cmlidXRlc1tcInN0YXJ0aW5nU3R5bGVcIl0gPSBDb21tb25Qb3B1cERhdGFBdHRyaWJ1dGVzLnN0YXJ0aW5nU3R5bGVdID0gXCJzdGFydGluZ1N0eWxlXCI7XG4gIC8qKlxuICAgKiBQcmVzZW50IHdoZW4gdGhlIGRpYWxvZyBpcyBhbmltYXRpbmcgb3V0LlxuICAgKi9cbiAgRGlhbG9nUG9wdXBEYXRhQXR0cmlidXRlc1tEaWFsb2dQb3B1cERhdGFBdHRyaWJ1dGVzW1wiZW5kaW5nU3R5bGVcIl0gPSBDb21tb25Qb3B1cERhdGFBdHRyaWJ1dGVzLmVuZGluZ1N0eWxlXSA9IFwiZW5kaW5nU3R5bGVcIjtcbiAgLyoqXG4gICAqIFByZXNlbnQgd2hlbiB0aGUgZGlhbG9nIGlzIG5lc3RlZCB3aXRoaW4gYW5vdGhlciBkaWFsb2cuXG4gICAqL1xuICBEaWFsb2dQb3B1cERhdGFBdHRyaWJ1dGVzW1wibmVzdGVkXCJdID0gXCJkYXRhLW5lc3RlZFwiO1xuICAvKipcbiAgICogUHJlc2VudCB3aGVuIHRoZSBkaWFsb2cgaGFzIG90aGVyIG9wZW4gZGlhbG9ncyBuZXN0ZWQgd2l0aGluIGl0LlxuICAgKi9cbiAgRGlhbG9nUG9wdXBEYXRhQXR0cmlidXRlc1tcIm5lc3RlZERpYWxvZ09wZW5cIl0gPSBcImRhdGEtbmVzdGVkLWRpYWxvZy1vcGVuXCI7XG4gIHJldHVybiBEaWFsb2dQb3B1cERhdGFBdHRyaWJ1dGVzO1xufSh7fSk7Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/popup/DialogPopupDataAttributes.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/portal/DialogPortal.js":
|
||
/*!***********************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/dialog/portal/DialogPortal.js ***!
|
||
\***********************************************************************/
|
||
/***/ ((__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 */ DialogPortal: () => (/* binding */ DialogPortal)\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 _base_ui_utils_inertValue__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @base-ui/utils/inertValue */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/inertValue.js\");\n/* harmony import */ var _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../floating-ui-react/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingPortal.js\");\n/* harmony import */ var _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../root/DialogRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/DialogRootContext.js\");\n/* harmony import */ var _DialogPortalContext_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./DialogPortalContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/portal/DialogPortalContext.js\");\n/* harmony import */ var _utils_InternalBackdrop_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../utils/InternalBackdrop.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/InternalBackdrop.js\");\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__ DialogPortal auto */ var _s = $RefreshSig$();\n\n\n\n\n\n\n/**\n * A portal element that moves the popup to a different part of the DOM.\n * By default, the portal element is appended to `<body>`.\n * Renders a `<div>` element.\n *\n * Documentation: [Base UI Dialog](https://base-ui.com/react/components/dialog)\n */ \nconst DialogPortal = /*#__PURE__*/ _s(react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c = _s(function DialogPortal(props, forwardedRef) {\n _s();\n const { keepMounted = false, ...portalProps } = props;\n const { store } = (0,_root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_2__.useDialogRootContext)();\n const mounted = store.useState('mounted');\n const modal = store.useState('modal');\n const open = store.useState('open');\n const shouldRender = mounted || keepMounted;\n if (!shouldRender) {\n return null;\n }\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_DialogPortalContext_js__WEBPACK_IMPORTED_MODULE_3__.DialogPortalContext.Provider, {\n value: keepMounted,\n children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_4__.FloatingPortal, {\n ref: forwardedRef,\n ...portalProps,\n children: [\n mounted && modal === true && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_utils_InternalBackdrop_js__WEBPACK_IMPORTED_MODULE_5__.InternalBackdrop, {\n ref: store.context.internalBackdropRef,\n inert: (0,_base_ui_utils_inertValue__WEBPACK_IMPORTED_MODULE_6__.inertValue)(!open)\n }),\n props.children\n ]\n })\n });\n}, \"nUEjrQEDfNg6xU5gjGdbPVJMwJg=\", false, function() {\n return [\n _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_2__.useDialogRootContext\n ];\n})), \"nUEjrQEDfNg6xU5gjGdbPVJMwJg=\", false, function() {\n return [\n _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_2__.useDialogRootContext\n ];\n});\n_c1 = DialogPortal;\nif (true) DialogPortal.displayName = \"DialogPortal\";\nvar _c, _c1;\n$RefreshReg$(_c, \"DialogPortal$React.forwardRef\");\n$RefreshReg$(_c1, \"DialogPortal\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3BvcnRhbC9EaWFsb2dQb3J0YWwuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBRStCO0FBQ3dCO0FBQ1c7QUFDRTtBQUNMO0FBQ0k7QUFFbkU7Ozs7OztDQU1DLEdBQzhEO0FBQ3hELE1BQU1VLGVBQWUsV0FBVyxHQUFFVixHQUFBQSw2Q0FBZ0IsU0FBQyxTQUFTVSxhQUFhRSxLQUFLLEVBQUVDLFlBQVk7O0lBQ2pHLE1BQU0sRUFDSkMsY0FBYyxLQUFLLEVBQ25CLEdBQUdDLGFBQ0osR0FBR0g7SUFDSixNQUFNLEVBQ0pJLEtBQUssRUFDTixHQUFHYixnRkFBb0JBO0lBQ3hCLE1BQU1jLFVBQVVELE1BQU1FLFFBQVEsQ0FBQztJQUMvQixNQUFNQyxRQUFRSCxNQUFNRSxRQUFRLENBQUM7SUFDN0IsTUFBTUUsT0FBT0osTUFBTUUsUUFBUSxDQUFDO0lBQzVCLE1BQU1HLGVBQWVKLFdBQVdIO0lBQ2hDLElBQUksQ0FBQ08sY0FBYztRQUNqQixPQUFPO0lBQ1Q7SUFDQSxPQUFPLFdBQVcsR0FBRWQsc0RBQUlBLENBQUNILHdFQUFtQkEsQ0FBQ2tCLFFBQVEsRUFBRTtRQUNyREMsT0FBT1Q7UUFDUFUsVUFBVSxXQUFXLEdBQUVmLHVEQUFLQSxDQUFDUCx1RUFBY0EsRUFBRTtZQUMzQ3VCLEtBQUtaO1lBQ0wsR0FBR0UsV0FBVztZQUNkUyxVQUFVO2dCQUFDUCxXQUFXRSxVQUFVLFFBQVEsV0FBVyxHQUFFWixzREFBSUEsQ0FBQ0Ysd0VBQWdCQSxFQUFFO29CQUMxRW9CLEtBQUtULE1BQU1VLE9BQU8sQ0FBQ0MsbUJBQW1CO29CQUN0Q0MsT0FBTzNCLHFFQUFVQSxDQUFDLENBQUNtQjtnQkFDckI7Z0JBQUlSLE1BQU1ZLFFBQVE7YUFBQztRQUNyQjtJQUNGO0FBQ0Y7O1FBbkJNckIsNEVBQW9CQTs7OztRQUFwQkEsNEVBQW9CQTs7R0FtQnZCOztBQUNILElBQUkwQixJQUFxQyxFQUFFbkIsYUFBYW9CLFdBQVcsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3BvcnRhbC9EaWFsb2dQb3J0YWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpbmVydFZhbHVlIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvaW5lcnRWYWx1ZSc7XG5pbXBvcnQgeyBGbG9hdGluZ1BvcnRhbCB9IGZyb20gXCIuLi8uLi9mbG9hdGluZy11aS1yZWFjdC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgdXNlRGlhbG9nUm9vdENvbnRleHQgfSBmcm9tIFwiLi4vcm9vdC9EaWFsb2dSb290Q29udGV4dC5qc1wiO1xuaW1wb3J0IHsgRGlhbG9nUG9ydGFsQ29udGV4dCB9IGZyb20gXCIuL0RpYWxvZ1BvcnRhbENvbnRleHQuanNcIjtcbmltcG9ydCB7IEludGVybmFsQmFja2Ryb3AgfSBmcm9tIFwiLi4vLi4vdXRpbHMvSW50ZXJuYWxCYWNrZHJvcC5qc1wiO1xuXG4vKipcbiAqIEEgcG9ydGFsIGVsZW1lbnQgdGhhdCBtb3ZlcyB0aGUgcG9wdXAgdG8gYSBkaWZmZXJlbnQgcGFydCBvZiB0aGUgRE9NLlxuICogQnkgZGVmYXVsdCwgdGhlIHBvcnRhbCBlbGVtZW50IGlzIGFwcGVuZGVkIHRvIGA8Ym9keT5gLlxuICogUmVuZGVycyBhIGA8ZGl2PmAgZWxlbWVudC5cbiAqXG4gKiBEb2N1bWVudGF0aW9uOiBbQmFzZSBVSSBEaWFsb2ddKGh0dHBzOi8vYmFzZS11aS5jb20vcmVhY3QvY29tcG9uZW50cy9kaWFsb2cpXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3QgRGlhbG9nUG9ydGFsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRGlhbG9nUG9ydGFsKHByb3BzLCBmb3J3YXJkZWRSZWYpIHtcbiAgY29uc3Qge1xuICAgIGtlZXBNb3VudGVkID0gZmFsc2UsXG4gICAgLi4ucG9ydGFsUHJvcHNcbiAgfSA9IHByb3BzO1xuICBjb25zdCB7XG4gICAgc3RvcmVcbiAgfSA9IHVzZURpYWxvZ1Jvb3RDb250ZXh0KCk7XG4gIGNvbnN0IG1vdW50ZWQgPSBzdG9yZS51c2VTdGF0ZSgnbW91bnRlZCcpO1xuICBjb25zdCBtb2RhbCA9IHN0b3JlLnVzZVN0YXRlKCdtb2RhbCcpO1xuICBjb25zdCBvcGVuID0gc3RvcmUudXNlU3RhdGUoJ29wZW4nKTtcbiAgY29uc3Qgc2hvdWxkUmVuZGVyID0gbW91bnRlZCB8fCBrZWVwTW91bnRlZDtcbiAgaWYgKCFzaG91bGRSZW5kZXIpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRGlhbG9nUG9ydGFsQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBrZWVwTW91bnRlZCxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3hzKEZsb2F0aW5nUG9ydGFsLCB7XG4gICAgICByZWY6IGZvcndhcmRlZFJlZixcbiAgICAgIC4uLnBvcnRhbFByb3BzLFxuICAgICAgY2hpbGRyZW46IFttb3VudGVkICYmIG1vZGFsID09PSB0cnVlICYmIC8qI19fUFVSRV9fKi9fanN4KEludGVybmFsQmFja2Ryb3AsIHtcbiAgICAgICAgcmVmOiBzdG9yZS5jb250ZXh0LmludGVybmFsQmFja2Ryb3BSZWYsXG4gICAgICAgIGluZXJ0OiBpbmVydFZhbHVlKCFvcGVuKVxuICAgICAgfSksIHByb3BzLmNoaWxkcmVuXVxuICAgIH0pXG4gIH0pO1xufSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSBEaWFsb2dQb3J0YWwuZGlzcGxheU5hbWUgPSBcIkRpYWxvZ1BvcnRhbFwiOyJdLCJuYW1lcyI6WyJSZWFjdCIsImluZXJ0VmFsdWUiLCJGbG9hdGluZ1BvcnRhbCIsInVzZURpYWxvZ1Jvb3RDb250ZXh0IiwiRGlhbG9nUG9ydGFsQ29udGV4dCIsIkludGVybmFsQmFja2Ryb3AiLCJqc3giLCJfanN4IiwianN4cyIsIl9qc3hzIiwiRGlhbG9nUG9ydGFsIiwiZm9yd2FyZFJlZiIsInByb3BzIiwiZm9yd2FyZGVkUmVmIiwia2VlcE1vdW50ZWQiLCJwb3J0YWxQcm9wcyIsInN0b3JlIiwibW91bnRlZCIsInVzZVN0YXRlIiwibW9kYWwiLCJvcGVuIiwic2hvdWxkUmVuZGVyIiwiUHJvdmlkZXIiLCJ2YWx1ZSIsImNoaWxkcmVuIiwicmVmIiwiY29udGV4dCIsImludGVybmFsQmFja2Ryb3BSZWYiLCJpbmVydCIsInByb2Nlc3MiLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/portal/DialogPortal.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/portal/DialogPortalContext.js":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/dialog/portal/DialogPortalContext.js ***!
|
||
\******************************************************************************/
|
||
/***/ ((__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 */ DialogPortalContext: () => (/* binding */ DialogPortalContext),\n/* harmony export */ useDialogPortalContext: () => (/* binding */ useDialogPortalContext)\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/* __next_internal_client_entry_do_not_use__ DialogPortalContext,useDialogPortalContext auto */ var _s = $RefreshSig$();\n\n\nconst DialogPortalContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(undefined);\nif (true) DialogPortalContext.displayName = \"DialogPortalContext\";\nfunction useDialogPortalContext() {\n _s();\n const value = react__WEBPACK_IMPORTED_MODULE_0__.useContext(DialogPortalContext);\n if (value === undefined) {\n throw new Error( true ? 'Base UI: <Dialog.Portal> is missing.' : 0);\n }\n return value;\n}\n_s(useDialogPortalContext, \"ksutO2/Ix3UeCrGnhyM+QEP505Y=\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3BvcnRhbC9EaWFsb2dQb3J0YWxDb250ZXh0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFb0U7QUFDckM7QUFDeEIsTUFBTUUsc0JBQXNCLFdBQVcsR0FBRUQsZ0RBQW1CLENBQUNHLFdBQVc7QUFDL0UsSUFBSUMsSUFBcUMsRUFBRUgsb0JBQW9CSSxXQUFXLEdBQUc7QUFDdEUsU0FBU0M7O0lBQ2QsTUFBTUMsUUFBUVAsNkNBQWdCLENBQUNDO0lBQy9CLElBQUlNLFVBQVVKLFdBQVc7UUFDdkIsTUFBTSxJQUFJTSxNQUFNTCxLQUFxQyxHQUFHLHlDQUF5Q0wsQ0FBdUI7SUFDMUg7SUFDQSxPQUFPUTtBQUNUO0dBTmdCRCIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3BvcnRhbC9EaWFsb2dQb3J0YWxDb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9mb3JtYXRFcnJvck1lc3NhZ2UgZnJvbSBcIkBiYXNlLXVpL3V0aWxzL2Zvcm1hdEVycm9yTWVzc2FnZVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGNvbnN0IERpYWxvZ1BvcnRhbENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh1bmRlZmluZWQpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgRGlhbG9nUG9ydGFsQ29udGV4dC5kaXNwbGF5TmFtZSA9IFwiRGlhbG9nUG9ydGFsQ29udGV4dFwiO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURpYWxvZ1BvcnRhbENvbnRleHQoKSB7XG4gIGNvbnN0IHZhbHVlID0gUmVhY3QudXNlQ29udGV4dChEaWFsb2dQb3J0YWxDb250ZXh0KTtcbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ0Jhc2UgVUk6IDxEaWFsb2cuUG9ydGFsPiBpcyBtaXNzaW5nLicgOiBfZm9ybWF0RXJyb3JNZXNzYWdlKDI2KSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufSJdLCJuYW1lcyI6WyJfZm9ybWF0RXJyb3JNZXNzYWdlIiwiUmVhY3QiLCJEaWFsb2dQb3J0YWxDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsInVuZGVmaW5lZCIsInByb2Nlc3MiLCJkaXNwbGF5TmFtZSIsInVzZURpYWxvZ1BvcnRhbENvbnRleHQiLCJ2YWx1ZSIsInVzZUNvbnRleHQiLCJFcnJvciJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/portal/DialogPortalContext.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/DialogRoot.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/dialog/root/DialogRoot.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((__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 */ DialogRoot: () => (/* binding */ DialogRoot),\n/* harmony export */ IsDrawerContext: () => (/* binding */ IsDrawerContext)\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 _base_ui_utils_useOnFirstRender__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @base-ui/utils/useOnFirstRender */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useOnFirstRender.js\");\n/* harmony import */ var _useDialogRoot_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./useDialogRoot.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/useDialogRoot.js\");\n/* harmony import */ var _DialogRootContext_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./DialogRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/DialogRootContext.js\");\n/* harmony import */ var _store_DialogStore_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../store/DialogStore.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/store/DialogStore.js\");\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__ IsDrawerContext,DialogRoot auto */ var _s = $RefreshSig$();\n\n\n\n\n\n\nconst IsDrawerContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(false);\n/**\n * Groups all parts of the dialog.\n * Doesn't render its own HTML element.\n *\n * Documentation: [Base UI Dialog](https://base-ui.com/react/components/dialog)\n */ if (true) IsDrawerContext.displayName = \"IsDrawerContext\";\nfunction DialogRoot(props) {\n _s();\n const { children, open: openProp, defaultOpen = false, onOpenChange, onOpenChangeComplete, disablePointerDismissal = false, modal = true, actionsRef, handle, triggerId: triggerIdProp, defaultTriggerId: defaultTriggerIdProp = null } = props;\n const parentDialogRootContext = (0,_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_2__.useDialogRootContext)(true);\n const isDrawer = react__WEBPACK_IMPORTED_MODULE_0__.useContext(IsDrawerContext);\n const nested = Boolean(parentDialogRootContext);\n const store = _store_DialogStore_js__WEBPACK_IMPORTED_MODULE_3__.DialogStore.useStore(handle === null || handle === void 0 ? void 0 : handle.store, {\n open: defaultOpen,\n openProp,\n activeTriggerId: defaultTriggerIdProp,\n triggerIdProp,\n modal,\n disablePointerDismissal,\n nested\n });\n // Support initially open state when uncontrolled\n (0,_base_ui_utils_useOnFirstRender__WEBPACK_IMPORTED_MODULE_4__.useOnFirstRender)({\n \"DialogRoot.useOnFirstRender\": ()=>{\n if (openProp === undefined && store.state.open === false && defaultOpen === true) {\n store.update({\n open: true,\n activeTriggerId: defaultTriggerIdProp\n });\n }\n }\n }[\"DialogRoot.useOnFirstRender\"]);\n store.useControlledProp('openProp', openProp);\n store.useControlledProp('triggerIdProp', triggerIdProp);\n store.useSyncedValues({\n disablePointerDismissal,\n nested,\n modal\n });\n store.useContextCallback('onOpenChange', onOpenChange);\n store.useContextCallback('onOpenChangeComplete', onOpenChangeComplete);\n const payload = store.useState('payload');\n (0,_useDialogRoot_js__WEBPACK_IMPORTED_MODULE_5__.useDialogRoot)({\n store,\n actionsRef,\n parentContext: parentDialogRootContext === null || parentDialogRootContext === void 0 ? void 0 : parentDialogRootContext.store.context,\n isDrawer,\n onOpenChange,\n triggerIdProp\n });\n const contextValue = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"DialogRoot.useMemo[contextValue]\": ()=>({\n store\n })\n }[\"DialogRoot.useMemo[contextValue]\"], [\n store\n ]);\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(IsDrawerContext.Provider, {\n value: false,\n children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_2__.DialogRootContext.Provider, {\n value: contextValue,\n children: typeof children === 'function' ? children({\n payload\n }) : children\n })\n });\n}\n_s(DialogRoot, \"n/GtJxgnlazwbzxdGATWWn/r42w=\", true, function() {\n return [\n _DialogRootContext_js__WEBPACK_IMPORTED_MODULE_2__.useDialogRootContext,\n _store_DialogStore_js__WEBPACK_IMPORTED_MODULE_3__.DialogStore.useStore,\n _base_ui_utils_useOnFirstRender__WEBPACK_IMPORTED_MODULE_4__.useOnFirstRender,\n _useDialogRoot_js__WEBPACK_IMPORTED_MODULE_5__.useDialogRoot\n ];\n});\n_c = DialogRoot;\nvar _c;\n$RefreshReg$(_c, \"DialogRoot\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3Jvb3QvRGlhbG9nUm9vdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFFK0I7QUFDb0M7QUFDaEI7QUFDOEI7QUFDM0I7QUFDTjtBQUN6QyxNQUFNUSxrQkFBa0IsV0FBVyxHQUFFUixnREFBbUIsQ0FBQyxPQUFPO0FBRXZFOzs7OztDQUtDLEdBQ0QsSUFBSVUsSUFBcUMsRUFBRUYsZ0JBQWdCRyxXQUFXLEdBQUc7QUFDbEUsU0FBU0MsV0FBV0MsS0FBSzs7SUFDOUIsTUFBTSxFQUNKQyxRQUFRLEVBQ1JDLE1BQU1DLFFBQVEsRUFDZEMsY0FBYyxLQUFLLEVBQ25CQyxZQUFZLEVBQ1pDLG9CQUFvQixFQUNwQkMsMEJBQTBCLEtBQUssRUFDL0JDLFFBQVEsSUFBSSxFQUNaQyxVQUFVLEVBQ1ZDLE1BQU0sRUFDTkMsV0FBV0MsYUFBYSxFQUN4QkMsa0JBQWtCQyx1QkFBdUIsSUFBSSxFQUM5QyxHQUFHZDtJQUNKLE1BQU1lLDBCQUEwQnhCLDJFQUFvQkEsQ0FBQztJQUNyRCxNQUFNeUIsV0FBVzdCLDZDQUFnQixDQUFDUTtJQUNsQyxNQUFNdUIsU0FBU0MsUUFBUUo7SUFDdkIsTUFBTUssUUFBUTVCLDhEQUFXQSxDQUFDNkIsUUFBUSxDQUFDWCxtQkFBQUEsNkJBQUFBLE9BQVFVLEtBQUssRUFBRTtRQUNoRGxCLE1BQU1FO1FBQ05EO1FBQ0FtQixpQkFBaUJSO1FBQ2pCRjtRQUNBSjtRQUNBRDtRQUNBVztJQUNGO0lBRUEsaURBQWlEO0lBQ2pEOUIsaUZBQWdCQTt1Q0FBQztZQUNmLElBQUllLGFBQWFvQixhQUFhSCxNQUFNSSxLQUFLLENBQUN0QixJQUFJLEtBQUssU0FBU0UsZ0JBQWdCLE1BQU07Z0JBQ2hGZ0IsTUFBTUssTUFBTSxDQUFDO29CQUNYdkIsTUFBTTtvQkFDTm9CLGlCQUFpQlI7Z0JBQ25CO1lBQ0Y7UUFDRjs7SUFDQU0sTUFBTU0saUJBQWlCLENBQUMsWUFBWXZCO0lBQ3BDaUIsTUFBTU0saUJBQWlCLENBQUMsaUJBQWlCZDtJQUN6Q1EsTUFBTU8sZUFBZSxDQUFDO1FBQ3BCcEI7UUFDQVc7UUFDQVY7SUFDRjtJQUNBWSxNQUFNUSxrQkFBa0IsQ0FBQyxnQkFBZ0J2QjtJQUN6Q2UsTUFBTVEsa0JBQWtCLENBQUMsd0JBQXdCdEI7SUFDakQsTUFBTXVCLFVBQVVULE1BQU1VLFFBQVEsQ0FBQztJQUMvQnpDLGdFQUFhQSxDQUFDO1FBQ1orQjtRQUNBWDtRQUNBc0IsYUFBYSxFQUFFaEIsb0NBQUFBLDhDQUFBQSx3QkFBeUJLLEtBQUssQ0FBQ1ksT0FBTztRQUNyRGhCO1FBQ0FYO1FBQ0FPO0lBQ0Y7SUFDQSxNQUFNcUIsZUFBZTlDLDBDQUFhOzRDQUFDLElBQU87Z0JBQ3hDaUM7WUFDRjsyQ0FBSTtRQUFDQTtLQUFNO0lBQ1gsT0FBTyxXQUFXLEdBQUUxQixzREFBSUEsQ0FBQ0MsZ0JBQWdCd0MsUUFBUSxFQUFFO1FBQ2pEQyxPQUFPO1FBQ1BuQyxVQUFVLFdBQVcsR0FBRVAsc0RBQUlBLENBQUNKLG9FQUFpQkEsQ0FBQzZDLFFBQVEsRUFBRTtZQUN0REMsT0FBT0g7WUFDUGhDLFVBQVUsT0FBT0EsYUFBYSxhQUFhQSxTQUFTO2dCQUNsRDRCO1lBQ0YsS0FBSzVCO1FBQ1A7SUFDRjtBQUNGO0dBbEVnQkY7O1FBY2tCUix1RUFBb0JBO1FBR3RDQyw4REFBV0EsQ0FBQzZCO1FBVzFCakMsNkVBQWdCQTtRQWtCaEJDLDREQUFhQTs7O0tBOUNDVSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3Jvb3QvRGlhbG9nUm9vdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU9uRmlyc3RSZW5kZXIgfSBmcm9tICdAYmFzZS11aS91dGlscy91c2VPbkZpcnN0UmVuZGVyJztcbmltcG9ydCB7IHVzZURpYWxvZ1Jvb3QgfSBmcm9tIFwiLi91c2VEaWFsb2dSb290LmpzXCI7XG5pbXBvcnQgeyBEaWFsb2dSb290Q29udGV4dCwgdXNlRGlhbG9nUm9vdENvbnRleHQgfSBmcm9tIFwiLi9EaWFsb2dSb290Q29udGV4dC5qc1wiO1xuaW1wb3J0IHsgRGlhbG9nU3RvcmUgfSBmcm9tIFwiLi4vc3RvcmUvRGlhbG9nU3RvcmUuanNcIjtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3QgSXNEcmF3ZXJDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoZmFsc2UpO1xuXG4vKipcbiAqIEdyb3VwcyBhbGwgcGFydHMgb2YgdGhlIGRpYWxvZy5cbiAqIERvZXNuJ3QgcmVuZGVyIGl0cyBvd24gSFRNTCBlbGVtZW50LlxuICpcbiAqIERvY3VtZW50YXRpb246IFtCYXNlIFVJIERpYWxvZ10oaHR0cHM6Ly9iYXNlLXVpLmNvbS9yZWFjdC9jb21wb25lbnRzL2RpYWxvZylcbiAqL1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgSXNEcmF3ZXJDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJJc0RyYXdlckNvbnRleHRcIjtcbmV4cG9ydCBmdW5jdGlvbiBEaWFsb2dSb290KHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICBvcGVuOiBvcGVuUHJvcCxcbiAgICBkZWZhdWx0T3BlbiA9IGZhbHNlLFxuICAgIG9uT3BlbkNoYW5nZSxcbiAgICBvbk9wZW5DaGFuZ2VDb21wbGV0ZSxcbiAgICBkaXNhYmxlUG9pbnRlckRpc21pc3NhbCA9IGZhbHNlLFxuICAgIG1vZGFsID0gdHJ1ZSxcbiAgICBhY3Rpb25zUmVmLFxuICAgIGhhbmRsZSxcbiAgICB0cmlnZ2VySWQ6IHRyaWdnZXJJZFByb3AsXG4gICAgZGVmYXVsdFRyaWdnZXJJZDogZGVmYXVsdFRyaWdnZXJJZFByb3AgPSBudWxsXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgcGFyZW50RGlhbG9nUm9vdENvbnRleHQgPSB1c2VEaWFsb2dSb290Q29udGV4dCh0cnVlKTtcbiAgY29uc3QgaXNEcmF3ZXIgPSBSZWFjdC51c2VDb250ZXh0KElzRHJhd2VyQ29udGV4dCk7XG4gIGNvbnN0IG5lc3RlZCA9IEJvb2xlYW4ocGFyZW50RGlhbG9nUm9vdENvbnRleHQpO1xuICBjb25zdCBzdG9yZSA9IERpYWxvZ1N0b3JlLnVzZVN0b3JlKGhhbmRsZT8uc3RvcmUsIHtcbiAgICBvcGVuOiBkZWZhdWx0T3BlbixcbiAgICBvcGVuUHJvcCxcbiAgICBhY3RpdmVUcmlnZ2VySWQ6IGRlZmF1bHRUcmlnZ2VySWRQcm9wLFxuICAgIHRyaWdnZXJJZFByb3AsXG4gICAgbW9kYWwsXG4gICAgZGlzYWJsZVBvaW50ZXJEaXNtaXNzYWwsXG4gICAgbmVzdGVkXG4gIH0pO1xuXG4gIC8vIFN1cHBvcnQgaW5pdGlhbGx5IG9wZW4gc3RhdGUgd2hlbiB1bmNvbnRyb2xsZWRcbiAgdXNlT25GaXJzdFJlbmRlcigoKSA9PiB7XG4gICAgaWYgKG9wZW5Qcm9wID09PSB1bmRlZmluZWQgJiYgc3RvcmUuc3RhdGUub3BlbiA9PT0gZmFsc2UgJiYgZGVmYXVsdE9wZW4gPT09IHRydWUpIHtcbiAgICAgIHN0b3JlLnVwZGF0ZSh7XG4gICAgICAgIG9wZW46IHRydWUsXG4gICAgICAgIGFjdGl2ZVRyaWdnZXJJZDogZGVmYXVsdFRyaWdnZXJJZFByb3BcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHN0b3JlLnVzZUNvbnRyb2xsZWRQcm9wKCdvcGVuUHJvcCcsIG9wZW5Qcm9wKTtcbiAgc3RvcmUudXNlQ29udHJvbGxlZFByb3AoJ3RyaWdnZXJJZFByb3AnLCB0cmlnZ2VySWRQcm9wKTtcbiAgc3RvcmUudXNlU3luY2VkVmFsdWVzKHtcbiAgICBkaXNhYmxlUG9pbnRlckRpc21pc3NhbCxcbiAgICBuZXN0ZWQsXG4gICAgbW9kYWxcbiAgfSk7XG4gIHN0b3JlLnVzZUNvbnRleHRDYWxsYmFjaygnb25PcGVuQ2hhbmdlJywgb25PcGVuQ2hhbmdlKTtcbiAgc3RvcmUudXNlQ29udGV4dENhbGxiYWNrKCdvbk9wZW5DaGFuZ2VDb21wbGV0ZScsIG9uT3BlbkNoYW5nZUNvbXBsZXRlKTtcbiAgY29uc3QgcGF5bG9hZCA9IHN0b3JlLnVzZVN0YXRlKCdwYXlsb2FkJyk7XG4gIHVzZURpYWxvZ1Jvb3Qoe1xuICAgIHN0b3JlLFxuICAgIGFjdGlvbnNSZWYsXG4gICAgcGFyZW50Q29udGV4dDogcGFyZW50RGlhbG9nUm9vdENvbnRleHQ/LnN0b3JlLmNvbnRleHQsXG4gICAgaXNEcmF3ZXIsXG4gICAgb25PcGVuQ2hhbmdlLFxuICAgIHRyaWdnZXJJZFByb3BcbiAgfSk7XG4gIGNvbnN0IGNvbnRleHRWYWx1ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBzdG9yZVxuICB9KSwgW3N0b3JlXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJc0RyYXdlckNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogZmFsc2UsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KERpYWxvZ1Jvb3RDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogY29udGV4dFZhbHVlLFxuICAgICAgY2hpbGRyZW46IHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKHtcbiAgICAgICAgcGF5bG9hZFxuICAgICAgfSkgOiBjaGlsZHJlblxuICAgIH0pXG4gIH0pO1xufSJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZU9uRmlyc3RSZW5kZXIiLCJ1c2VEaWFsb2dSb290IiwiRGlhbG9nUm9vdENvbnRleHQiLCJ1c2VEaWFsb2dSb290Q29udGV4dCIsIkRpYWxvZ1N0b3JlIiwianN4IiwiX2pzeCIsIklzRHJhd2VyQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiLCJEaWFsb2dSb290IiwicHJvcHMiLCJjaGlsZHJlbiIsIm9wZW4iLCJvcGVuUHJvcCIsImRlZmF1bHRPcGVuIiwib25PcGVuQ2hhbmdlIiwib25PcGVuQ2hhbmdlQ29tcGxldGUiLCJkaXNhYmxlUG9pbnRlckRpc21pc3NhbCIsIm1vZGFsIiwiYWN0aW9uc1JlZiIsImhhbmRsZSIsInRyaWdnZXJJZCIsInRyaWdnZXJJZFByb3AiLCJkZWZhdWx0VHJpZ2dlcklkIiwiZGVmYXVsdFRyaWdnZXJJZFByb3AiLCJwYXJlbnREaWFsb2dSb290Q29udGV4dCIsImlzRHJhd2VyIiwidXNlQ29udGV4dCIsIm5lc3RlZCIsIkJvb2xlYW4iLCJzdG9yZSIsInVzZVN0b3JlIiwiYWN0aXZlVHJpZ2dlcklkIiwidW5kZWZpbmVkIiwic3RhdGUiLCJ1cGRhdGUiLCJ1c2VDb250cm9sbGVkUHJvcCIsInVzZVN5bmNlZFZhbHVlcyIsInVzZUNvbnRleHRDYWxsYmFjayIsInBheWxvYWQiLCJ1c2VTdGF0ZSIsInBhcmVudENvbnRleHQiLCJjb250ZXh0IiwiY29udGV4dFZhbHVlIiwidXNlTWVtbyIsIlByb3ZpZGVyIiwidmFsdWUiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/DialogRoot.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/DialogRootContext.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/dialog/root/DialogRootContext.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((__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 */ DialogRootContext: () => (/* binding */ DialogRootContext),\n/* harmony export */ useDialogRootContext: () => (/* binding */ useDialogRootContext)\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/* __next_internal_client_entry_do_not_use__ DialogRootContext,useDialogRootContext auto */ var _s = $RefreshSig$();\n\n\nconst DialogRootContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(undefined);\nif (true) DialogRootContext.displayName = \"DialogRootContext\";\nfunction useDialogRootContext(optional) {\n _s();\n const dialogRootContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(DialogRootContext);\n if (optional === false && dialogRootContext === undefined) {\n throw new Error( true ? 'Base UI: DialogRootContext is missing. Dialog parts must be placed within <Dialog.Root>.' : 0);\n }\n return dialogRootContext;\n}\n_s(useDialogRootContext, \"vAvOmIYTsR+5MGfZfPiTxqm7ob0=\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3Jvb3QvRGlhbG9nUm9vdENvbnRleHQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVvRTtBQUNyQztBQUN4QixNQUFNRSxvQkFBb0IsV0FBVyxHQUFFRCxnREFBbUIsQ0FBQ0csV0FBVztBQUM3RSxJQUFJQyxJQUFxQyxFQUFFSCxrQkFBa0JJLFdBQVcsR0FBRztBQUNwRSxTQUFTQyxxQkFBcUJDLFFBQVE7O0lBQzNDLE1BQU1DLG9CQUFvQlIsNkNBQWdCLENBQUNDO0lBQzNDLElBQUlNLGFBQWEsU0FBU0Msc0JBQXNCTCxXQUFXO1FBQ3pELE1BQU0sSUFBSU8sTUFBTU4sS0FBcUMsR0FBRyw2RkFBNkZMLENBQXVCO0lBQzlLO0lBQ0EsT0FBT1M7QUFDVDtHQU5nQkYiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2RpYWxvZy9yb290L0RpYWxvZ1Jvb3RDb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9mb3JtYXRFcnJvck1lc3NhZ2UgZnJvbSBcIkBiYXNlLXVpL3V0aWxzL2Zvcm1hdEVycm9yTWVzc2FnZVwiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGNvbnN0IERpYWxvZ1Jvb3RDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIERpYWxvZ1Jvb3RDb250ZXh0LmRpc3BsYXlOYW1lID0gXCJEaWFsb2dSb290Q29udGV4dFwiO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURpYWxvZ1Jvb3RDb250ZXh0KG9wdGlvbmFsKSB7XG4gIGNvbnN0IGRpYWxvZ1Jvb3RDb250ZXh0ID0gUmVhY3QudXNlQ29udGV4dChEaWFsb2dSb290Q29udGV4dCk7XG4gIGlmIChvcHRpb25hbCA9PT0gZmFsc2UgJiYgZGlhbG9nUm9vdENvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnQmFzZSBVSTogRGlhbG9nUm9vdENvbnRleHQgaXMgbWlzc2luZy4gRGlhbG9nIHBhcnRzIG11c3QgYmUgcGxhY2VkIHdpdGhpbiA8RGlhbG9nLlJvb3Q+LicgOiBfZm9ybWF0RXJyb3JNZXNzYWdlKDI3KSk7XG4gIH1cbiAgcmV0dXJuIGRpYWxvZ1Jvb3RDb250ZXh0O1xufSJdLCJuYW1lcyI6WyJfZm9ybWF0RXJyb3JNZXNzYWdlIiwiUmVhY3QiLCJEaWFsb2dSb290Q29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJ1bmRlZmluZWQiLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiLCJ1c2VEaWFsb2dSb290Q29udGV4dCIsIm9wdGlvbmFsIiwiZGlhbG9nUm9vdENvbnRleHQiLCJ1c2VDb250ZXh0IiwiRXJyb3IiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/DialogRootContext.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/useDialogRoot.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/dialog/root/useDialogRoot.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((__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 */ useDialogRoot: () => (/* binding */ useDialogRoot)\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 _base_ui_utils_useScrollLock__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @base-ui/utils/useScrollLock */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useScrollLock.js\");\n/* harmony import */ var _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../floating-ui-react/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js\");\n/* harmony import */ var _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../floating-ui-react/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useRole.js\");\n/* harmony import */ var _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../floating-ui-react/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useDismiss.js\");\n/* harmony import */ var _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../floating-ui-react/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useInteractions.js\");\n/* harmony import */ var _floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../floating-ui-react/utils.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/shadowDom.js\");\n/* harmony import */ var _utils_useOpenInteractionType_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/useOpenInteractionType.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/useOpenInteractionType.js\");\n/* harmony import */ var _internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../internals/createBaseUIEventDetails.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.js\");\n/* harmony import */ var _internals_reasons_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../internals/reasons.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/reason-parts.js\");\n/* harmony import */ var _utils_popups_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/popups/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popups/popupStoreUtils.js\");\n/* __next_internal_client_entry_do_not_use__ useDialogRoot auto */ var _s = $RefreshSig$();\n\n\n\n\n\n\n\n\nfunction useDialogRoot(params) {\n _s();\n const { store, parentContext, actionsRef, isDrawer } = params;\n const open = store.useState('open');\n const disablePointerDismissal = store.useState('disablePointerDismissal');\n const modal = store.useState('modal');\n const popupElement = store.useState('popupElement');\n const { openMethod, triggerProps } = (0,_utils_useOpenInteractionType_js__WEBPACK_IMPORTED_MODULE_1__.useOpenInteractionType)(open);\n (0,_utils_popups_index_js__WEBPACK_IMPORTED_MODULE_2__.useImplicitActiveTrigger)(store);\n const { forceUnmount } = (0,_utils_popups_index_js__WEBPACK_IMPORTED_MODULE_2__.useOpenStateTransitions)(open, store);\n const handleImperativeClose = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"useDialogRoot.useCallback[handleImperativeClose]\": ()=>{\n store.setOpen(false, (0,_internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_3__.createChangeEventDetails)(_internals_reasons_js__WEBPACK_IMPORTED_MODULE_4__.imperativeAction));\n }\n }[\"useDialogRoot.useCallback[handleImperativeClose]\"], [\n store\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useImperativeHandle(actionsRef, {\n \"useDialogRoot.useImperativeHandle\": ()=>({\n unmount: forceUnmount,\n close: handleImperativeClose\n })\n }[\"useDialogRoot.useImperativeHandle\"], [\n forceUnmount,\n handleImperativeClose\n ]);\n const floatingRootContext = (0,_floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_5__.useSyncedFloatingRootContext)({\n popupStore: store,\n onOpenChange: store.setOpen,\n treatPopupAsFloatingElement: true\n });\n const [ownNestedOpenDialogs, setOwnNestedOpenDialogs] = react__WEBPACK_IMPORTED_MODULE_0__.useState(0);\n const [ownNestedOpenDrawers, setOwnNestedOpenDrawers] = react__WEBPACK_IMPORTED_MODULE_0__.useState(0);\n const isTopmost = ownNestedOpenDialogs === 0;\n const role = (0,_floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_6__.useRole)(floatingRootContext);\n const dismiss = (0,_floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_7__.useDismiss)(floatingRootContext, {\n outsidePressEvent () {\n if (store.context.internalBackdropRef.current || store.context.backdropRef.current) {\n return 'intentional';\n }\n // Ensure `aria-hidden` on outside elements is removed immediately\n // on outside press when trapping focus.\n return {\n mouse: modal === 'trap-focus' ? 'sloppy' : 'intentional',\n touch: 'sloppy'\n };\n },\n outsidePress (event) {\n if (!store.context.outsidePressEnabledRef.current) {\n return false;\n }\n // For mouse events, only accept left button (button 0)\n // For touch events, a single touch is equivalent to left button\n if ('button' in event && event.button !== 0) {\n return false;\n }\n if ('touches' in event && event.touches.length !== 1) {\n return false;\n }\n const target = (0,_floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_8__.getTarget)(event);\n if (isTopmost && !disablePointerDismissal) {\n const eventTarget = target;\n // Only close if the click occurred on the dialog's owning backdrop.\n // This supports multiple modal dialogs that aren't nested in the React tree:\n // https://github.com/mui/base-ui/issues/1320\n if (modal) {\n return store.context.internalBackdropRef.current || store.context.backdropRef.current ? store.context.internalBackdropRef.current === eventTarget || store.context.backdropRef.current === eventTarget || (0,_floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_8__.contains)(eventTarget, popupElement) && !(eventTarget === null || eventTarget === void 0 ? void 0 : eventTarget.hasAttribute('data-base-ui-portal')) : true;\n }\n return true;\n }\n return false;\n },\n escapeKey: isTopmost\n });\n (0,_base_ui_utils_useScrollLock__WEBPACK_IMPORTED_MODULE_9__.useScrollLock)(open && modal === true, popupElement);\n const { getReferenceProps, getFloatingProps, getTriggerProps } = (0,_floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_10__.useInteractions)([\n role,\n dismiss\n ]);\n // Listen for nested open/close events on this store to maintain the counts.\n store.useContextCallback('onNestedDialogOpen', {\n \"useDialogRoot.useContextCallback\": (dialogCount, drawerCount)=>{\n setOwnNestedOpenDialogs(dialogCount);\n setOwnNestedOpenDrawers(drawerCount);\n }\n }[\"useDialogRoot.useContextCallback\"]);\n store.useContextCallback('onNestedDialogClose', {\n \"useDialogRoot.useContextCallback\": ()=>{\n setOwnNestedOpenDialogs(0);\n setOwnNestedOpenDrawers(0);\n }\n }[\"useDialogRoot.useContextCallback\"]);\n // Notify parent of our open/close state using parent callbacks, if any\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"useDialogRoot.useEffect\": ()=>{\n if ((parentContext === null || parentContext === void 0 ? void 0 : parentContext.onNestedDialogOpen) && open) {\n parentContext.onNestedDialogOpen(ownNestedOpenDialogs + 1, ownNestedOpenDrawers + (isDrawer ? 1 : 0));\n }\n if ((parentContext === null || parentContext === void 0 ? void 0 : parentContext.onNestedDialogClose) && !open) {\n parentContext.onNestedDialogClose();\n }\n return ({\n \"useDialogRoot.useEffect\": ()=>{\n if ((parentContext === null || parentContext === void 0 ? void 0 : parentContext.onNestedDialogClose) && open) {\n parentContext.onNestedDialogClose();\n }\n }\n })[\"useDialogRoot.useEffect\"];\n }\n }[\"useDialogRoot.useEffect\"], [\n isDrawer,\n open,\n ownNestedOpenDialogs,\n ownNestedOpenDrawers,\n parentContext\n ]);\n const activeTriggerProps = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"useDialogRoot.useMemo[activeTriggerProps]\": ()=>getReferenceProps(triggerProps)\n }[\"useDialogRoot.useMemo[activeTriggerProps]\"], [\n getReferenceProps,\n triggerProps\n ]);\n const inactiveTriggerProps = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"useDialogRoot.useMemo[inactiveTriggerProps]\": ()=>getTriggerProps(triggerProps)\n }[\"useDialogRoot.useMemo[inactiveTriggerProps]\"], [\n getTriggerProps,\n triggerProps\n ]);\n const popupProps = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"useDialogRoot.useMemo[popupProps]\": ()=>getFloatingProps()\n }[\"useDialogRoot.useMemo[popupProps]\"], [\n getFloatingProps\n ]);\n store.useSyncedValues({\n openMethod,\n activeTriggerProps,\n inactiveTriggerProps,\n popupProps,\n floatingRootContext,\n nestedOpenDialogCount: ownNestedOpenDialogs,\n nestedOpenDrawerCount: ownNestedOpenDrawers\n });\n}\n_s(useDialogRoot, \"iZyBNoQsF35MVDGzeumh4Af78rk=\", true, function() {\n return [\n _utils_useOpenInteractionType_js__WEBPACK_IMPORTED_MODULE_1__.useOpenInteractionType,\n _utils_popups_index_js__WEBPACK_IMPORTED_MODULE_2__.useImplicitActiveTrigger,\n _utils_popups_index_js__WEBPACK_IMPORTED_MODULE_2__.useOpenStateTransitions,\n _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_5__.useSyncedFloatingRootContext,\n _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_6__.useRole,\n _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_7__.useDismiss,\n _base_ui_utils_useScrollLock__WEBPACK_IMPORTED_MODULE_9__.useScrollLock,\n _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_10__.useInteractions\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3Jvb3QvdXNlRGlhbG9nUm9vdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBRStCO0FBQzhCO0FBQ3lEO0FBQy9DO0FBQ1E7QUFDUTtBQUNsQztBQUMyQztBQUN6RixTQUFTYSxjQUFjQyxNQUFNOztJQUNsQyxNQUFNLEVBQ0pDLEtBQUssRUFDTEMsYUFBYSxFQUNiQyxVQUFVLEVBQ1ZDLFFBQVEsRUFDVCxHQUFHSjtJQUNKLE1BQU1LLE9BQU9KLE1BQU1LLFFBQVEsQ0FBQztJQUM1QixNQUFNQywwQkFBMEJOLE1BQU1LLFFBQVEsQ0FBQztJQUMvQyxNQUFNRSxRQUFRUCxNQUFNSyxRQUFRLENBQUM7SUFDN0IsTUFBTUcsZUFBZVIsTUFBTUssUUFBUSxDQUFDO0lBQ3BDLE1BQU0sRUFDSkksVUFBVSxFQUNWQyxZQUFZLEVBQ2IsR0FBR2pCLHdGQUFzQkEsQ0FBQ1c7SUFDM0JSLGdGQUF3QkEsQ0FBQ0k7SUFDekIsTUFBTSxFQUNKVyxZQUFZLEVBQ2IsR0FBR2QsK0VBQXVCQSxDQUFDTyxNQUFNSjtJQUNsQyxNQUFNWSx3QkFBd0IzQiw4Q0FBaUI7NERBQUM7WUFDOUNlLE1BQU1jLE9BQU8sQ0FBQyxPQUFPcEIsZ0dBQXdCQSxDQUFDQyxtRUFBd0I7UUFDeEU7MkRBQUc7UUFBQ0s7S0FBTTtJQUNWZixzREFBeUIsQ0FBQ2lCOzZDQUFZLElBQU87Z0JBQzNDZSxTQUFTTjtnQkFDVE8sT0FBT047WUFDVDs0Q0FBSTtRQUFDRDtRQUFjQztLQUFzQjtJQUN6QyxNQUFNTyxzQkFBc0I3Qix5RkFBNEJBLENBQUM7UUFDdkQ4QixZQUFZcEI7UUFDWnFCLGNBQWNyQixNQUFNYyxPQUFPO1FBQzNCUSw2QkFBNkI7SUFDL0I7SUFDQSxNQUFNLENBQUNDLHNCQUFzQkMsd0JBQXdCLEdBQUd2QywyQ0FBYyxDQUFDO0lBQ3ZFLE1BQU0sQ0FBQ3dDLHNCQUFz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a0JBQWtCckM7b0RBQWU7UUFBQ3FDO1FBQW1CckM7S0FBYTtJQUNqSCxNQUFNZ0QsdUJBQXVCekUsMENBQWE7dURBQUMsSUFBTWdFLGdCQUFnQnZDO3NEQUFlO1FBQUN1QztRQUFpQnZDO0tBQWE7SUFDL0csTUFBTWlELGFBQWExRSwwQ0FBYTs2Q0FBQyxJQUFNK0Q7NENBQW9CO1FBQUNBO0tBQWlCO0lBQzdFaEQsTUFBTTRELGVBQWUsQ0FBQztRQUNwQm5EO1FBQ0ErQztRQUNBRTtRQUNBQztRQUNBeEM7UUFDQTBDLHVCQUF1QnRDO1FBQ3ZCdUMsdUJBQXVCckM7SUFDekI7QUFDRjtHQXRIZ0IzQjs7UUFjVkwsb0ZBQXNCQTtRQUMxQkcsNEVBQXdCQTtRQUdwQkMsMkVBQXVCQTtRQVFDUCxxRkFBNEJBO1FBUTNDRCxnRUFBT0E7UUFDSkYsbUVBQVVBO1FBd0MxQkQsdUVBQWFBO1FBS1RFLHlFQUFlQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3Jvb3QvdXNlRGlhbG9nUm9vdC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVNjcm9sbExvY2sgfSBmcm9tICdAYmFzZS11aS91dGlscy91c2VTY3JvbGxMb2NrJztcbmltcG9ydCB7IHVzZURpc21pc3MsIHVzZUludGVyYWN0aW9ucywgdXNlUm9sZSwgdXNlU3luY2VkRmxvYXRpbmdSb290Q29udGV4dCB9IGZyb20gXCIuLi8uLi9mbG9hdGluZy11aS1yZWFjdC9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY29udGFpbnMsIGdldFRhcmdldCB9IGZyb20gXCIuLi8uLi9mbG9hdGluZy11aS1yZWFjdC91dGlscy5qc1wiO1xuaW1wb3J0IHsgdXNlT3BlbkludGVyYWN0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi91dGlscy91c2VPcGVuSW50ZXJhY3Rpb25UeXBlLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVDaGFuZ2VFdmVudERldGFpbHMgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL2NyZWF0ZUJhc2VVSUV2ZW50RGV0YWlscy5qc1wiO1xuaW1wb3J0IHsgUkVBU09OUyB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvcmVhc29ucy5qc1wiO1xuaW1wb3J0IHsgdXNlSW1wbGljaXRBY3RpdmVUcmlnZ2VyLCB1c2VPcGVuU3RhdGVUcmFuc2l0aW9ucyB9IGZyb20gXCIuLi8uLi91dGlscy9wb3B1cHMvaW5kZXguanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB1c2VEaWFsb2dSb290KHBhcmFtcykge1xuICBjb25zdCB7XG4gICAgc3RvcmUsXG4gICAgcGFyZW50Q29udGV4dCxcbiAgICBhY3Rpb25zUmVmLFxuICAgIGlzRHJhd2VyXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IG9wZW4gPSBzdG9yZS51c2VTdGF0ZSgnb3BlbicpO1xuICBjb25zdCBkaXNhYmxlUG9pbnRlckRpc21pc3NhbCA9IHN0b3JlLnVzZVN0YXRlKCdkaXNhYmxlUG9pbnRlckRpc21pc3NhbCcpO1xuICBjb25zdCBtb2RhbCA9IHN0b3JlLnVzZVN0YXRlKCdtb2RhbCcpO1xuICBjb25zdCBwb3B1cEVsZW1lbnQgPSBzdG9yZS51c2VTdGF0ZSgncG9wdXBFbGVtZW50Jyk7XG4gIGNvbnN0IHtcbiAgICBvcGVuTWV0aG9kLFxuICAgIHRyaWdnZXJQcm9wc1xuICB9ID0gdXNlT3BlbkludGVyYWN0aW9uVHlwZShvcGVuKTtcbiAgdXNlSW1wbGljaXRBY3RpdmVUcmlnZ2VyKHN0b3JlKTtcbiAgY29uc3Qge1xuICAgIGZvcmNlVW5tb3VudFxuICB9ID0gdXNlT3BlblN0YXRlVHJhbnNpdGlvbnMob3Blbiwgc3RvcmUpO1xuICBjb25zdCBoYW5kbGVJbXBlcmF0aXZlQ2xvc2UgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc3RvcmUuc2V0T3BlbihmYWxzZSwgY3JlYXRlQ2hhbmdlRXZlbnREZXRhaWxzKFJFQVNPTlMuaW1wZXJhdGl2ZUFjdGlvbikpO1xuICB9LCBbc3RvcmVdKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb25zUmVmLCAoKSA9PiAoe1xuICAgIHVubW91bnQ6IGZvcmNlVW5tb3VudCxcbiAgICBjbG9zZTogaGFuZGxlSW1wZXJhdGl2ZUNsb3NlXG4gIH0pLCBbZm9yY2VVbm1vdW50LCBoYW5kbGVJbXBlcmF0aXZlQ2xvc2VdKTtcbiAgY29uc3QgZmxvYXRpbmdSb290Q29udGV4dCA9IHVzZVN5bmNlZEZsb2F0aW5nUm9vdENvbnRleHQoe1xuICAgIHBvcHVwU3RvcmU6IHN0b3JlLFxuICAgIG9uT3BlbkNoYW5nZTogc3RvcmUuc2V0T3BlbixcbiAgICB0cmVhdFBvcHVwQXNGbG9hdGluZ0VsZW1lbnQ6IHRydWVcbiAgfSk7XG4gIGNvbnN0IFtvd25OZXN0ZWRPcGVuRGlhbG9ncywgc2V0T3duTmVzdGVkT3BlbkRpYWxvZ3NdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gIGNvbnN0IFtvd25OZXN0ZWRPcGVuRHJhd2Vycywgc2V0T3duTmVzdGVkT3BlbkRyYXdlcnNdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gIGNvbnN0IGlzVG9wbW9zdCA9IG93bk5lc3RlZE9wZW5EaWFsb2dzID09PSAwO1xuICBjb25zdCByb2xlID0gdXNlUm9sZShmbG9hdGluZ1Jvb3RDb250ZXh0KTtcbiAgY29uc3QgZGlzbWlzcyA9IHVzZURpc21pc3MoZmxvYXRpbmdSb290Q29udGV4dCwge1xuICAgIG91dHNpZGVQcmVzc0V2ZW50KCkge1xuICAgICAgaWYgKHN0b3JlLmNvbnRleHQuaW50ZXJuYWxCYWNrZHJvcFJlZi5jdXJyZW50IHx8IHN0b3JlLmNvbnRleHQuYmFja2Ryb3BSZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm4gJ2ludGVudGlvbmFsJztcbiAgICAgIH1cbiAgICAgIC8vIEVuc3VyZSBgYXJpYS1oaWRkZW5gIG9uIG91dHNpZGUgZWxlbWVudHMgaXMgcmVtb3ZlZCBpbW1lZGlhdGVseVxuICAgICAgLy8gb24gb3V0c2lkZSBwcmVzcyB3aGVuIHRyYXBwaW5nIGZvY3VzLlxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW91c2U6IG1vZGFsID09PSAndHJhcC1mb2N1cycgPyAnc2xvcHB5JyA6ICdpbnRlbnRpb25hbCcsXG4gICAgICAgIHRvdWNoOiAnc2xvcHB5J1xuICAgICAgfTtcbiAgICB9LFxuICAgIG91dHNpZGVQcmVzcyhldmVudCkge1xuICAgICAgaWYgKCFzdG9yZS5jb250ZXh0Lm91dHNpZGVQcmVzc0VuYWJsZWRSZWYuY3VycmVudCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIEZvciBtb3VzZSBldmVudHMsIG9ubHkgYWNjZXB0IGxlZnQgYnV0dG9uIChidXR0b24gMClcbiAgICAgIC8vIEZvciB0b3VjaCBldmVudHMsIGEgc2luZ2xlIHRvdWNoIGlzIGVxdWl2YWxlbnQgdG8gbGVmdCBidXR0b25cbiAgICAgIGlmICgnYnV0dG9uJyBpbiBldmVudCAmJiBldmVudC5idXR0b24gIT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgaWYgKCd0b3VjaGVzJyBpbiBldmVudCAmJiBldmVudC50b3VjaGVzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBjb25zdCB0YXJnZXQgPSBnZXRUYXJnZXQoZXZlbnQpO1xuICAgICAgaWYgKGlzVG9wbW9zdCAmJiAhZGlzYWJsZVBvaW50ZXJEaXNtaXNzYWwpIHtcbiAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIC8vIE9ubHkgY2xvc2UgaWYgdGhlIGNsaWNrIG9jY3VycmVkIG9uIHRoZSBkaWFsb2cncyBvd25pbmcgYmFja2Ryb3AuXG4gICAgICAgIC8vIFRoaXMgc3VwcG9ydHMgbXVsdGlwbGUgbW9kYWwgZGlhbG9ncyB0aGF0IGFyZW4ndCBuZXN0ZWQgaW4gdGhlIFJlYWN0IHRyZWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvYmFzZS11aS9pc3N1ZXMvMTMyMFxuICAgICAgICBpZiAobW9kYWwpIHtcbiAgICAgICAgICByZXR1cm4gc3RvcmUuY29udGV4dC5pbnRlcm5hbEJhY2tkcm9wUmVmLmN1cnJlbnQgfHwgc3RvcmUuY29udGV4dC5iYWNrZHJvcFJlZi5jdXJyZW50ID8gc3RvcmUuY29udGV4dC5pbnRlcm5hbEJhY2tkcm9wUmVmLmN1cnJlbnQgPT09IGV2ZW50VGFyZ2V0IHx8IHN0b3JlLmNvbnRleHQuYmFja2Ryb3BSZWYuY3VycmVudCA9PT0gZXZlbnRUYXJnZXQgfHwgY29udGFpbnMoZXZlbnRUYXJnZXQsIHBvcHVwRWxlbWVudCkgJiYgIWV2ZW50VGFyZ2V0Py5oYXNBdHRyaWJ1dGUoJ2RhdGEtYmFzZS11aS1wb3J0YWwnKSA6IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBlc2NhcGVLZXk6IGlzVG9wbW9zdFxuICB9KTtcbiAgdXNlU2Nyb2xsTG9jayhvcGVuICYmIG1vZGFsID09PSB0cnVlLCBwb3B1cEVsZW1lbnQpO1xuICBjb25zdCB7XG4gICAgZ2V0UmVmZXJlbmNlUHJvcHMsXG4gICAgZ2V0RmxvYXRpbmdQcm9wcyxcbiAgICBnZXRUcmlnZ2VyUHJvcHNcbiAgfSA9IHVzZUludGVyYWN0aW9ucyhbcm9sZSwgZGlzbWlzc10pO1xuXG4gIC8vIExpc3RlbiBmb3IgbmVzdGVkIG9wZW4vY2xvc2UgZXZlbnRzIG9uIHRoaXMgc3RvcmUgdG8gbWFpbnRhaW4gdGhlIGNvdW50cy5cbiAgc3RvcmUudXNlQ29udGV4dENhbGxiYWNrKCdvbk5lc3RlZERpYWxvZ09wZW4nLCAoZGlhbG9nQ291bnQsIGRyYXdlckNvdW50KSA9PiB7XG4gICAgc2V0T3duTmVzdGVkT3BlbkRpYWxvZ3MoZGlhbG9nQ291bnQpO1xuICAgIHNldE93bk5lc3RlZE9wZW5EcmF3ZXJzKGRyYXdlckNvdW50KTtcbiAgfSk7XG4gIHN0b3JlLnVzZUNvbnRleHRDYWxsYmFjaygnb25OZXN0ZWREaWFsb2dDbG9zZScsICgpID0+IHtcbiAgICBzZXRPd25OZXN0ZWRPcGVuRGlhbG9ncygwKTtcbiAgICBzZXRPd25OZXN0ZWRPcGVuRHJhd2VycygwKTtcbiAgfSk7XG5cbiAgLy8gTm90aWZ5IHBhcmVudCBvZiBvdXIgb3Blbi9jbG9zZSBzdGF0ZSB1c2luZyBwYXJlbnQgY2FsbGJhY2tzLCBpZiBhbnlcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocGFyZW50Q29udGV4dD8ub25OZXN0ZWREaWFsb2dPcGVuICYmIG9wZW4pIHtcbiAgICAgIHBhcmVudENvbnRleHQub25OZXN0ZWREaWFsb2dPcGVuKG93bk5lc3RlZE9wZW5EaWFsb2dzICsgMSwgb3duTmVzdGVkT3BlbkRyYXdlcnMgKyAoaXNEcmF3ZXIgPyAxIDogMCkpO1xuICAgIH1cbiAgICBpZiAocGFyZW50Q29udGV4dD8ub25OZXN0ZWREaWFsb2dDbG9zZSAmJiAhb3Blbikge1xuICAgICAgcGFyZW50Q29udGV4dC5vbk5lc3RlZERpYWxvZ0Nsb3NlKCk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAocGFyZW50Q29udGV4dD8ub25OZXN0ZWREaWFsb2dDbG9zZSAmJiBvcGVuKSB7XG4gICAgICAgIHBhcmVudENvbnRleHQub25OZXN0ZWREaWFsb2dDbG9zZSgpO1xuICAgICAgfVxuICAgIH07XG4gIH0sIFtpc0RyYXdlciwgb3Blbiwgb3duTmVzdGVkT3BlbkRpYWxvZ3MsIG93bk5lc3RlZE9wZW5EcmF3ZXJzLCBwYXJlbnRDb250ZXh0XSk7XG4gIGNvbnN0IGFjdGl2ZVRyaWdnZXJQcm9wcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gZ2V0UmVmZXJlbmNlUHJvcHModHJpZ2dlclByb3BzKSwgW2dldFJlZmVyZW5jZVByb3BzLCB0cmlnZ2VyUHJvcHNdKTtcbiAgY29uc3QgaW5hY3RpdmVUcmlnZ2VyUHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IGdldFRyaWdnZXJQcm9wcyh0cmlnZ2VyUHJvcHMpLCBbZ2V0VHJpZ2dlclByb3BzLCB0cmlnZ2VyUHJvcHNdKTtcbiAgY29uc3QgcG9wdXBQcm9wcyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gZ2V0RmxvYXRpbmdQcm9wcygpLCBbZ2V0RmxvYXRpbmdQcm9wc10pO1xuICBzdG9yZS51c2VTeW5jZWRWYWx1ZXMoe1xuICAgIG9wZW5NZXRob2QsXG4gICAgYWN0aXZlVHJpZ2dlclByb3BzLFxuICAgIGluYWN0aXZlVHJpZ2dlclByb3BzLFxuICAgIHBvcHVwUHJvcHMsXG4gICAgZmxvYXRpbmdSb290Q29udGV4dCxcbiAgICBuZXN0ZWRPcGVuRGlhbG9nQ291bnQ6IG93bk5lc3RlZE9wZW5EaWFsb2dzLFxuICAgIG5lc3RlZE9wZW5EcmF3ZXJDb3VudDogb3duTmVzdGVkT3BlbkRyYXdlcnNcbiAgfSk7XG59Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlU2Nyb2xsTG9jayIsInVzZURpc21pc3MiLCJ1c2VJbnRlcmFjdGlvbnMiLCJ1c2VSb2xlIiwidXNlU3luY2VkRmxvYXRpbmdSb290Q29udGV4dCIsImNvbnRhaW5zIiwiZ2V0VGFyZ2V0IiwidXNlT3BlbkludGVyYWN0aW9uVHlwZSIsImNyZWF0ZUNoYW5nZUV2ZW50RGV0YWlscyIsIlJFQVNPTlMiLCJ1c2VJbXBsaWNpdEFjdGl2ZVRyaWdnZXIiLCJ1c2VPcGVuU3RhdGVUcmFuc2l0aW9ucyIsInVzZURpYWxvZ1Jvb3QiLCJwYXJhbXMiLCJzdG9yZSIsInBhcmVudENvbnRleHQiLCJhY3Rpb25zUmVmIiwiaXNEcmF3ZXIiLCJvcGVuIiwidXNlU3RhdGUiLCJkaXNhYmxlUG9pbnRlckRpc21pc3NhbCIsIm1vZGFsIiwicG9wdXBFbGVtZW50Iiwib3Blbk1ldGhvZCIsInRyaWdnZXJQcm9wcyIsImZvcmNlVW5tb3VudCIsImhhbmRsZUltcGVyYXRpdmVDbG9zZSIsInVzZUNhbGxiYWNrIiwic2V0T3BlbiIsImltcGVyYXRpdmVBY3Rpb24iLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidW5tb3VudCIsImNsb3NlIiwiZmxvYXRpbmdSb290Q29udGV4dCIsInBvcHVwU3RvcmUiLCJvbk9wZW5DaGFuZ2UiLCJ0cmVhdFBvcHVwQXNGbG9hdGluZ0VsZW1lbnQiLCJvd25OZXN0ZWRPcGVuRGlhbG9ncyIsInNldE93bk5lc3RlZE9wZW5EaWFsb2dzIiwib3duTmVzdGVkT3BlbkRyYXdlcnMiLCJzZXRPd25OZXN0ZWRPcGVuRHJhd2VycyIsImlzVG9wbW9zdCIsInJvbGUiLCJkaXNtaXNzIiwib3V0c2lkZVByZXNzRXZlbnQiLCJjb250ZXh0IiwiaW50ZXJuYWxCYWNrZHJvcFJlZiIsImN1cnJlbnQiLCJiYWNrZHJvcFJlZiIsIm1vdXNlIiwidG91Y2giLCJvdXRzaWRlUHJlc3MiLCJldmVudCIsIm91dHNpZGVQcmVzc0VuYWJsZWRSZWYiLCJidXR0b24iLCJ0b3VjaGVzIiwibGVuZ3RoIiwidGFyZ2V0IiwiZXZlbnRUYXJnZXQiLCJoYXNBdHRyaWJ1dGUiLCJlc2NhcGVLZXkiLCJnZXRSZWZlcmVuY2VQcm9wcyIsImdldEZsb2F0aW5nUHJvcHMiLCJnZXRUcmlnZ2VyUHJvcHMiLCJ1c2VDb250ZXh0Q2FsbGJhY2siLCJkaWFsb2dDb3VudCIsImRyYXdlckNvdW50IiwidXNlRWZmZWN0Iiwib25OZXN0ZWREaWFsb2dPcGVuIiwib25OZXN0ZWREaWFsb2dDbG9zZSIsImFjdGl2ZVRyaWdnZXJQcm9wcyIsInVzZU1lbW8iLCJpbmFjdGl2ZVRyaWdnZXJQcm9wcyIsInBvcHVwUHJvcHMiLCJ1c2VTeW5jZWRWYWx1ZXMiLCJuZXN0ZWRPcGVuRGlhbG9nQ291bnQiLCJuZXN0ZWRPcGVuRHJhd2VyQ291bnQiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/useDialogRoot.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/store/DialogStore.js":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/dialog/store/DialogStore.js ***!
|
||
\*********************************************************************/
|
||
/***/ ((__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 */ DialogStore: () => (/* binding */ DialogStore)\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 _base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/utils/store */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/createSelector.js\");\n/* harmony import */ var _base_ui_utils_store__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @base-ui/utils/store */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/ReactStore.js\");\n/* harmony import */ var _base_ui_utils_useRefWithInit__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @base-ui/utils/useRefWithInit */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useRefWithInit.js\");\n/* harmony import */ var _utils_popups_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/popups/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popups/store.js\");\n/* harmony import */ var _utils_popups_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../utils/popups/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popups/popupTriggerMap.js\");\n\n\n\n\nconst selectors = {\n ..._utils_popups_index_js__WEBPACK_IMPORTED_MODULE_1__.popupStoreSelectors,\n modal: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.modal),\n nested: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.nested),\n nestedOpenDialogCount: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.nestedOpenDialogCount),\n nestedOpenDrawerCount: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.nestedOpenDrawerCount),\n disablePointerDismissal: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.disablePointerDismissal),\n openMethod: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.openMethod),\n descriptionElementId: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.descriptionElementId),\n titleElementId: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.titleElementId),\n viewportElement: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.viewportElement),\n role: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.role)\n};\nclass DialogStore extends _base_ui_utils_store__WEBPACK_IMPORTED_MODULE_3__.ReactStore {\n constructor(initialState) {\n super(createInitialState(initialState), {\n popupRef: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createRef(),\n backdropRef: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createRef(),\n internalBackdropRef: /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createRef(),\n outsidePressEnabledRef: {\n current: true\n },\n triggerElements: new _utils_popups_index_js__WEBPACK_IMPORTED_MODULE_4__.PopupTriggerMap(),\n onOpenChange: undefined,\n onOpenChangeComplete: undefined\n }, selectors);\n }\n setOpen = (nextOpen, eventDetails) => {\n eventDetails.preventUnmountOnClose = () => {\n this.set('preventUnmountingOnClose', true);\n };\n if (!nextOpen && eventDetails.trigger == null && this.state.activeTriggerId != null) {\n // When closing the dialog, pass the old trigger to the onOpenChange event\n // so it's not reset too early (potentially causing focus issues in controlled scenarios).\n eventDetails.trigger = this.state.activeTriggerElement ?? undefined;\n }\n this.context.onOpenChange?.(nextOpen, eventDetails);\n if (eventDetails.isCanceled) {\n return;\n }\n this.state.floatingRootContext.dispatchOpenChange(nextOpen, eventDetails);\n const updatedState = {\n open: nextOpen\n };\n\n // If a popup is closing, the `trigger` may be null.\n // We want to keep the previous value so that exit animations are played and focus is returned correctly.\n const newTriggerId = eventDetails.trigger?.id ?? null;\n if (newTriggerId || nextOpen) {\n updatedState.activeTriggerId = newTriggerId;\n updatedState.activeTriggerElement = eventDetails.trigger ?? null;\n }\n this.update(updatedState);\n };\n static useStore(externalStore, initialState) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const internalStore = (0,_base_ui_utils_useRefWithInit__WEBPACK_IMPORTED_MODULE_5__.useRefWithInit)(() => {\n return new DialogStore(initialState);\n }).current;\n return externalStore ?? internalStore;\n }\n}\nfunction createInitialState(initialState = {}) {\n return {\n ...(0,_utils_popups_index_js__WEBPACK_IMPORTED_MODULE_1__.createInitialPopupStoreState)(),\n modal: true,\n disablePointerDismissal: false,\n popupElement: null,\n viewportElement: null,\n descriptionElementId: undefined,\n titleElementId: undefined,\n openMethod: null,\n nested: false,\n nestedOpenDialogCount: 0,\n nestedOpenDrawerCount: 0,\n role: 'dialog',\n ...initialState\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3N0b3JlL0RpYWxvZ1N0b3JlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBK0I7QUFDbUM7QUFDSDtBQUNrRDtBQUNqSDtBQUNBLEtBQUssdUVBQW1CO0FBQ3hCLFNBQVMsb0VBQWM7QUFDdkIsVUFBVSxvRUFBYztBQUN4Qix5QkFBeUIsb0VBQWM7QUFDdkMseUJBQXlCLG9FQUFjO0FBQ3ZDLDJCQUEyQixvRUFBYztBQUN6QyxjQUFjLG9FQUFjO0FBQzVCLHdCQUF3QixvRUFBYztBQUN0QyxrQkFBa0Isb0VBQWM7QUFDaEMsbUJBQW1CLG9FQUFjO0FBQ2pDLFFBQVEsb0VBQWM7QUFDdEI7QUFDTywwQkFBMEIsNERBQVU7QUFDM0M7QUFDQTtBQUNBLDZCQUE2Qiw0Q0FBZTtBQUM1QyxnQ0FBZ0MsNENBQWU7QUFDL0Msd0NBQXdDLDRDQUFlO0FBQ3ZEO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsMkJBQTJCLG1FQUFlO0FBQzFDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsNkVBQWM7QUFDeEM7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0EsT0FBTyxvRkFBNEI7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3N0b3JlL0RpYWxvZ1N0b3JlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNyZWF0ZVNlbGVjdG9yLCBSZWFjdFN0b3JlIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvc3RvcmUnO1xuaW1wb3J0IHsgdXNlUmVmV2l0aEluaXQgfSBmcm9tICdAYmFzZS11aS91dGlscy91c2VSZWZXaXRoSW5pdCc7XG5pbXBvcnQgeyBjcmVhdGVJbml0aWFsUG9wdXBTdG9yZVN0YXRlLCBwb3B1cFN0b3JlU2VsZWN0b3JzLCBQb3B1cFRyaWdnZXJNYXAgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcG9wdXBzL2luZGV4LmpzXCI7XG5jb25zdCBzZWxlY3RvcnMgPSB7XG4gIC4uLnBvcHVwU3RvcmVTZWxlY3RvcnMsXG4gIG1vZGFsOiBjcmVhdGVTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS5tb2RhbCksXG4gIG5lc3RlZDogY3JlYXRlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUubmVzdGVkKSxcbiAgbmVzdGVkT3BlbkRpYWxvZ0NvdW50OiBjcmVhdGVTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS5uZXN0ZWRPcGVuRGlhbG9nQ291bnQpLFxuICBuZXN0ZWRPcGVuRHJhd2VyQ291bnQ6IGNyZWF0ZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLm5lc3RlZE9wZW5EcmF3ZXJDb3VudCksXG4gIGRpc2FibGVQb2ludGVyRGlzbWlzc2FsOiBjcmVhdGVTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS5kaXNhYmxlUG9pbnRlckRpc21pc3NhbCksXG4gIG9wZW5NZXRob2Q6IGNyZWF0ZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLm9wZW5NZXRob2QpLFxuICBkZXNjcmlwdGlvbkVsZW1lbnRJZDogY3JlYXRlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUuZGVzY3JpcHRpb25FbGVtZW50SWQpLFxuICB0aXRsZUVsZW1lbnRJZDogY3JlYXRlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUudGl0bGVFbGVtZW50SWQpLFxuICB2aWV3cG9ydEVsZW1lbnQ6IGNyZWF0ZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLnZpZXdwb3J0RWxlbWVudCksXG4gIHJvbGU6IGNyZWF0ZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLnJvbGUpXG59O1xuZXhwb3J0IGNsYXNzIERpYWxvZ1N0b3JlIGV4dGVuZHMgUmVhY3RTdG9yZSB7XG4gIGNvbnN0cnVjdG9yKGluaXRpYWxTdGF0ZSkge1xuICAgIHN1cGVyKGNyZWF0ZUluaXRpYWxTdGF0ZShpbml0aWFsU3RhdGUpLCB7XG4gICAgICBwb3B1cFJlZjogLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZVJlZigpLFxuICAgICAgYmFja2Ryb3BSZWY6IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVSZWYoKSxcbiAgICAgIGludGVybmFsQmFja2Ryb3BSZWY6IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVSZWYoKSxcbiAgICAgIG91dHNpZGVQcmVzc0VuYWJsZWRSZWY6IHtcbiAgICAgICAgY3VycmVudDogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHRyaWdnZXJFbGVtZW50czogbmV3IFBvcHVwVHJpZ2dlck1hcCgpLFxuICAgICAgb25PcGVuQ2hhbmdlOiB1bmRlZmluZWQsXG4gICAgICBvbk9wZW5DaGFuZ2VDb21wbGV0ZTogdW5kZWZpbmVkXG4gICAgfSwgc2VsZWN0b3JzKTtcbiAgfVxuICBzZXRPcGVuID0gKG5leHRPcGVuLCBldmVudERldGFpbHMpID0+IHtcbiAgICBldmVudERldGFpbHMucHJldmVudFVubW91bnRPbkNsb3NlID0gKCkgPT4ge1xuICAgICAgdGhpcy5zZXQoJ3ByZXZlbnRVbm1vdW50aW5nT25DbG9zZScsIHRydWUpO1xuICAgIH07XG4gICAgaWYgKCFuZXh0T3BlbiAmJiBldmVudERldGFpbHMudHJpZ2dlciA9PSBudWxsICYmIHRoaXMuc3RhdGUuYWN0aXZlVHJpZ2dlcklkICE9IG51bGwpIHtcbiAgICAgIC8vIFdoZW4gY2xvc2luZyB0aGUgZGlhbG9nLCBwYXNzIHRoZSBvbGQgdHJpZ2dlciB0byB0aGUgb25PcGVuQ2hhbmdlIGV2ZW50XG4gICAgICAvLyBzbyBpdCdzIG5vdCByZXNldCB0b28gZWFybHkgKHBvdGVudGlhbGx5IGNhdXNpbmcgZm9jdXMgaXNzdWVzIGluIGNvbnRyb2xsZWQgc2NlbmFyaW9zKS5cbiAgICAgIGV2ZW50RGV0YWlscy50cmlnZ2VyID0gdGhpcy5zdGF0ZS5hY3RpdmVUcmlnZ2VyRWxlbWVudCA/PyB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuY29udGV4dC5vbk9wZW5DaGFuZ2U/LihuZXh0T3BlbiwgZXZlbnREZXRhaWxzKTtcbiAgICBpZiAoZXZlbnREZXRhaWxzLmlzQ2FuY2VsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZS5mbG9hdGluZ1Jvb3RDb250ZXh0LmRpc3BhdGNoT3BlbkNoYW5nZShuZXh0T3BlbiwgZXZlbnREZXRhaWxzKTtcbiAgICBjb25zdCB1cGRhdGVkU3RhdGUgPSB7XG4gICAgICBvcGVuOiBuZXh0T3BlblxuICAgIH07XG5cbiAgICAvLyBJZiBhIHBvcHVwIGlzIGNsb3NpbmcsIHRoZSBgdHJpZ2dlcmAgbWF5IGJlIG51bGwuXG4gICAgLy8gV2Ugd2FudCB0byBrZWVwIHRoZSBwcmV2aW91cyB2YWx1ZSBzbyB0aGF0IGV4aXQgYW5pbWF0aW9ucyBhcmUgcGxheWVkIGFuZCBmb2N1cyBpcyByZXR1cm5lZCBjb3JyZWN0bHkuXG4gICAgY29uc3QgbmV3VHJpZ2dlcklkID0gZXZlbnREZXRhaWxzLnRyaWdnZXI/LmlkID8/IG51bGw7XG4gICAgaWYgKG5ld1RyaWdnZXJJZCB8fCBuZXh0T3Blbikge1xuICAgICAgdXBkYXRlZFN0YXRlLmFjdGl2ZVRyaWdnZXJJZCA9IG5ld1RyaWdnZXJJZDtcbiAgICAgIHVwZGF0ZWRTdGF0ZS5hY3RpdmVUcmlnZ2VyRWxlbWVudCA9IGV2ZW50RGV0YWlscy50cmlnZ2VyID8/IG51bGw7XG4gICAgfVxuICAgIHRoaXMudXBkYXRlKHVwZGF0ZWRTdGF0ZSk7XG4gIH07XG4gIHN0YXRpYyB1c2VTdG9yZShleHRlcm5hbFN0b3JlLCBpbml0aWFsU3RhdGUpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBjb25zdCBpbnRlcm5hbFN0b3JlID0gdXNlUmVmV2l0aEluaXQoKCkgPT4ge1xuICAgICAgcmV0dXJuIG5ldyBEaWFsb2dTdG9yZShpbml0aWFsU3RhdGUpO1xuICAgIH0pLmN1cnJlbnQ7XG4gICAgcmV0dXJuIGV4dGVybmFsU3RvcmUgPz8gaW50ZXJuYWxTdG9yZTtcbiAgfVxufVxuZnVuY3Rpb24gY3JlYXRlSW5pdGlhbFN0YXRlKGluaXRpYWxTdGF0ZSA9IHt9KSB7XG4gIHJldHVybiB7XG4gICAgLi4uY3JlYXRlSW5pdGlhbFBvcHVwU3RvcmVTdGF0ZSgpLFxuICAgIG1vZGFsOiB0cnVlLFxuICAgIGRpc2FibGVQb2ludGVyRGlzbWlzc2FsOiBmYWxzZSxcbiAgICBwb3B1cEVsZW1lbnQ6IG51bGwsXG4gICAgdmlld3BvcnRFbGVtZW50OiBudWxsLFxuICAgIGRlc2NyaXB0aW9uRWxlbWVudElkOiB1bmRlZmluZWQsXG4gICAgdGl0bGVFbGVtZW50SWQ6IHVuZGVmaW5lZCxcbiAgICBvcGVuTWV0aG9kOiBudWxsLFxuICAgIG5lc3RlZDogZmFsc2UsXG4gICAgbmVzdGVkT3BlbkRpYWxvZ0NvdW50OiAwLFxuICAgIG5lc3RlZE9wZW5EcmF3ZXJDb3VudDogMCxcbiAgICByb2xlOiAnZGlhbG9nJyxcbiAgICAuLi5pbml0aWFsU3RhdGVcbiAgfTtcbn0iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/store/DialogStore.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/title/DialogTitle.js":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/dialog/title/DialogTitle.js ***!
|
||
\*********************************************************************/
|
||
/***/ ((__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 */ DialogTitle: () => (/* binding */ DialogTitle)\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 _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../root/DialogRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/DialogRootContext.js\");\n/* harmony import */ var _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../internals/useRenderElement.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useRenderElement.js\");\n/* harmony import */ var _internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../internals/useBaseUiId.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useBaseUiId.js\");\n/* __next_internal_client_entry_do_not_use__ DialogTitle auto */ var _s = $RefreshSig$();\n\n\n\n\n/**\n * A heading that labels the dialog.\n * Renders an `<h2>` element.\n *\n * Documentation: [Base UI Dialog](https://base-ui.com/react/components/dialog)\n */ const DialogTitle = /*#__PURE__*/ _s(react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c = _s(function DialogTitle(componentProps, forwardedRef) {\n _s();\n const { render, className, style, id: idProp, ...elementProps } = componentProps;\n const { store } = (0,_root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useDialogRootContext)();\n const id = (0,_internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_2__.useBaseUiId)(idProp);\n store.useSyncedValueWithCleanup('titleElementId', id);\n return (0,_internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_3__.useRenderElement)('h2', componentProps, {\n ref: forwardedRef,\n props: [\n {\n id\n },\n elementProps\n ]\n });\n}, \"7KAjVrdXIp9VL12lL6CL6x7+Yvw=\", true, function() {\n return [\n _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useDialogRootContext,\n _internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_2__.useBaseUiId,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_3__.useRenderElement\n ];\n})), \"7KAjVrdXIp9VL12lL6CL6x7+Yvw=\", true, function() {\n return [\n _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useDialogRootContext,\n _internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_2__.useBaseUiId,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_3__.useRenderElement\n ];\n});\n_c1 = DialogTitle;\nif (true) DialogTitle.displayName = \"DialogTitle\";\nvar _c, _c1;\n$RefreshReg$(_c, \"DialogTitle$React.forwardRef\");\n$RefreshReg$(_c1, \"DialogTitle\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3RpdGxlL0RpYWxvZ1RpdGxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUUrQjtBQUNxQztBQUNHO0FBQ1Y7QUFDN0Q7Ozs7O0NBS0MsR0FDTSxNQUFNSSxjQUFjLFdBQVcsR0FBRUosR0FBQUEsNkNBQWdCLFNBQUMsU0FBU0ksWUFBWUUsY0FBYyxFQUFFQyxZQUFZOztJQUN4RyxNQUFNLEVBQ0pDLE1BQU0sRUFDTkMsU0FBUyxFQUNUQyxLQUFLLEVBQ0xDLElBQUlDLE1BQU0sRUFDVixHQUFHQyxjQUNKLEdBQUdQO0lBQ0osTUFBTSxFQUNKUSxLQUFLLEVBQ04sR0FBR2IsZ0ZBQW9CQTtJQUN4QixNQUFNVSxLQUFLUixzRUFBV0EsQ0FBQ1M7SUFDdkJFLE1BQU1DLHlCQUF5QixDQUFDLGtCQUFrQko7SUFDbEQsT0FBT1QsZ0ZBQWdCQSxDQUFDLE1BQU1JLGdCQUFnQjtRQUM1Q1UsS0FBS1Q7UUFDTFUsT0FBTztZQUFDO2dCQUNOTjtZQUNGO1lBQUdFO1NBQWE7SUFDbEI7QUFDRjs7UUFUTVosNEVBQW9CQTtRQUNiRSxrRUFBV0E7UUFFZkQsNEVBQWdCQTs7OztRQUhuQkQsNEVBQW9CQTtRQUNiRSxrRUFBV0E7UUFFZkQsNEVBQWdCQTs7R0FNdEI7O0FBQ0gsSUFBSWdCLElBQXFDLEVBQUVkLFlBQVllLFdBQVcsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3RpdGxlL0RpYWxvZ1RpdGxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlRGlhbG9nUm9vdENvbnRleHQgfSBmcm9tIFwiLi4vcm9vdC9EaWFsb2dSb290Q29udGV4dC5qc1wiO1xuaW1wb3J0IHsgdXNlUmVuZGVyRWxlbWVudCB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvdXNlUmVuZGVyRWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgdXNlQmFzZVVpSWQgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL3VzZUJhc2VVaUlkLmpzXCI7XG4vKipcbiAqIEEgaGVhZGluZyB0aGF0IGxhYmVscyB0aGUgZGlhbG9nLlxuICogUmVuZGVycyBhbiBgPGgyPmAgZWxlbWVudC5cbiAqXG4gKiBEb2N1bWVudGF0aW9uOiBbQmFzZSBVSSBEaWFsb2ddKGh0dHBzOi8vYmFzZS11aS5jb20vcmVhY3QvY29tcG9uZW50cy9kaWFsb2cpXG4gKi9cbmV4cG9ydCBjb25zdCBEaWFsb2dUaXRsZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIERpYWxvZ1RpdGxlKGNvbXBvbmVudFByb3BzLCBmb3J3YXJkZWRSZWYpIHtcbiAgY29uc3Qge1xuICAgIHJlbmRlcixcbiAgICBjbGFzc05hbWUsXG4gICAgc3R5bGUsXG4gICAgaWQ6IGlkUHJvcCxcbiAgICAuLi5lbGVtZW50UHJvcHNcbiAgfSA9IGNvbXBvbmVudFByb3BzO1xuICBjb25zdCB7XG4gICAgc3RvcmVcbiAgfSA9IHVzZURpYWxvZ1Jvb3RDb250ZXh0KCk7XG4gIGNvbnN0IGlkID0gdXNlQmFzZVVpSWQoaWRQcm9wKTtcbiAgc3RvcmUudXNlU3luY2VkVmFsdWVXaXRoQ2xlYW51cCgndGl0bGVFbGVtZW50SWQnLCBpZCk7XG4gIHJldHVybiB1c2VSZW5kZXJFbGVtZW50KCdoMicsIGNvbXBvbmVudFByb3BzLCB7XG4gICAgcmVmOiBmb3J3YXJkZWRSZWYsXG4gICAgcHJvcHM6IFt7XG4gICAgICBpZFxuICAgIH0sIGVsZW1lbnRQcm9wc11cbiAgfSk7XG59KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIERpYWxvZ1RpdGxlLmRpc3BsYXlOYW1lID0gXCJEaWFsb2dUaXRsZVwiOyJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZURpYWxvZ1Jvb3RDb250ZXh0IiwidXNlUmVuZGVyRWxlbWVudCIsInVzZUJhc2VVaUlkIiwiRGlhbG9nVGl0bGUiLCJmb3J3YXJkUmVmIiwiY29tcG9uZW50UHJvcHMiLCJmb3J3YXJkZWRSZWYiLCJyZW5kZXIiLCJjbGFzc05hbWUiLCJzdHlsZSIsImlkIiwiaWRQcm9wIiwiZWxlbWVudFByb3BzIiwic3RvcmUiLCJ1c2VTeW5jZWRWYWx1ZVdpdGhDbGVhbnVwIiwicmVmIiwicHJvcHMiLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/title/DialogTitle.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/trigger/DialogTrigger.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/dialog/trigger/DialogTrigger.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((__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 */ DialogTrigger: () => (/* binding */ DialogTrigger)\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 _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../root/DialogRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/DialogRootContext.js\");\n/* harmony import */ var _internals_use_button_useButton_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../internals/use-button/useButton.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/use-button/useButton.js\");\n/* harmony import */ var _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../internals/useRenderElement.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useRenderElement.js\");\n/* harmony import */ var _utils_popupStateMapping_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../utils/popupStateMapping.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popupStateMapping.js\");\n/* harmony import */ var _internals_constants_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../internals/constants.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/constants.js\");\n/* harmony import */ var _utils_popups_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../utils/popups/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popups/popupStoreUtils.js\");\n/* harmony import */ var _internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../internals/useBaseUiId.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useBaseUiId.js\");\n/* harmony import */ var _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../floating-ui-react/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useClick.js\");\n/* harmony import */ var _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../floating-ui-react/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useInteractions.js\");\n/* __next_internal_client_entry_do_not_use__ DialogTrigger auto */ var _s = $RefreshSig$();\n\n\n\n\n\n\n\n\n\n\n/**\n * A button that opens the dialog.\n * Renders a `<button>` element.\n *\n * Documentation: [Base UI Dialog](https://base-ui.com/react/components/dialog)\n */ const DialogTrigger = /*#__PURE__*/ _s(react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c = _s(function DialogTrigger(componentProps, forwardedRef) {\n _s();\n const { render, className, disabled = false, nativeButton = true, id: idProp, payload, handle, style, ...elementProps } = componentProps;\n const dialogRootContext = (0,_root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useDialogRootContext)(true);\n var _handle_store;\n const store = (_handle_store = handle === null || handle === void 0 ? void 0 : handle.store) !== null && _handle_store !== void 0 ? _handle_store : dialogRootContext === null || dialogRootContext === void 0 ? void 0 : dialogRootContext.store;\n if (!store) {\n throw new Error( true ? 'Base UI: <Dialog.Trigger> must be used within <Dialog.Root> or provided with a handle.' : 0);\n }\n const thisTriggerId = (0,_internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_2__.useBaseUiId)(idProp);\n const floatingContext = store.useState('floatingRootContext');\n const isOpenedByThisTrigger = store.useState('isOpenedByTrigger', thisTriggerId);\n const triggerElementRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const { registerTrigger, isMountedByThisTrigger } = (0,_utils_popups_index_js__WEBPACK_IMPORTED_MODULE_3__.useTriggerDataForwarding)(thisTriggerId, triggerElementRef, store, {\n payload\n });\n const { getButtonProps, buttonRef } = (0,_internals_use_button_useButton_js__WEBPACK_IMPORTED_MODULE_4__.useButton)({\n disabled,\n native: nativeButton\n });\n const click = (0,_floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_5__.useClick)(floatingContext, {\n enabled: floatingContext != null\n });\n const localInteractionProps = (0,_floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_6__.useInteractions)([\n click\n ]);\n const state = {\n disabled,\n open: isOpenedByThisTrigger\n };\n const rootTriggerProps = store.useState('triggerProps', isMountedByThisTrigger);\n return (0,_internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_7__.useRenderElement)('button', componentProps, {\n state,\n ref: [\n buttonRef,\n forwardedRef,\n registerTrigger,\n triggerElementRef\n ],\n props: [\n localInteractionProps.getReferenceProps(),\n rootTriggerProps,\n {\n [_internals_constants_js__WEBPACK_IMPORTED_MODULE_8__.CLICK_TRIGGER_IDENTIFIER]: '',\n id: thisTriggerId\n },\n elementProps,\n getButtonProps\n ],\n stateAttributesMapping: _utils_popupStateMapping_js__WEBPACK_IMPORTED_MODULE_9__.triggerOpenStateMapping\n });\n}, \"0jNtyURx0xT4nMv8ybnsm51CCWk=\", false, function() {\n return [\n _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useDialogRootContext,\n _internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_2__.useBaseUiId,\n _utils_popups_index_js__WEBPACK_IMPORTED_MODULE_3__.useTriggerDataForwarding,\n _internals_use_button_useButton_js__WEBPACK_IMPORTED_MODULE_4__.useButton,\n _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_5__.useClick,\n _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_6__.useInteractions,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_7__.useRenderElement\n ];\n})), \"0jNtyURx0xT4nMv8ybnsm51CCWk=\", false, function() {\n return [\n _root_DialogRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useDialogRootContext,\n _internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_2__.useBaseUiId,\n _utils_popups_index_js__WEBPACK_IMPORTED_MODULE_3__.useTriggerDataForwarding,\n _internals_use_button_useButton_js__WEBPACK_IMPORTED_MODULE_4__.useButton,\n _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_5__.useClick,\n _floating_ui_react_index_js__WEBPACK_IMPORTED_MODULE_6__.useInteractions,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_7__.useRenderElement\n ];\n});\n_c1 = DialogTrigger;\nif (true) DialogTrigger.displayName = \"DialogTrigger\";\nvar _c, _c1;\n$RefreshReg$(_c, \"DialogTrigger$React.forwardRef\");\n$RefreshReg$(_c1, \"DialogTrigger\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZGlhbG9nL3RyaWdnZXIvRGlhbG9nVHJpZ2dlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFFb0U7QUFDckM7QUFDcUM7QUFDQTtBQUNHO0FBQ0k7QUFDSDtBQUNEO0FBQ1Y7QUFDZ0I7QUFFN0U7Ozs7O0NBS0MsR0FDTSxNQUFNVyxnQkFBZ0IsV0FBVyxHQUFFVixHQUFBQSw2Q0FBZ0IsU0FBQyxTQUFTVSxjQUFjRSxjQUFjLEVBQUVDLFlBQVk7O0lBQzVHLE1BQU0sRUFDSkMsTUFBTSxFQUNOQyxTQUFTLEVBQ1RDLFdBQVcsS0FBSyxFQUNoQkMsZUFBZSxJQUFJLEVBQ25CQyxJQUFJQyxNQUFNLEVBQ1ZDLE9BQU8sRUFDUEMsTUFBTSxFQUNOQyxLQUFLLEVBQ0wsR0FBR0MsY0FDSixHQUFHWDtJQUNKLE1BQU1ZLG9CQUFvQnZCLGdGQUFvQkEsQ0FBQztRQUNqQ29CO0lBQWQsTUFBTUksUUFBUUosQ0FBQUEsZ0JBQUFBLG1CQUFBQSw2QkFBQUEsT0FBUUksS0FBSyxjQUFiSiwyQkFBQUEsZ0JBQWlCRyw4QkFBQUEsd0NBQUFBLGtCQUFtQkMsS0FBSztJQUN2RCxJQUFJLENBQUNBLE9BQU87UUFDVixNQUFNLElBQUlDLE1BQU1DLEtBQXFDLEdBQUcsMkZBQTJGNUIsQ0FBdUI7SUFDNUs7SUFDQSxNQUFNNkIsZ0JBQWdCckIsc0VBQVdBLENBQUNZO0lBQ2xDLE1BQU1VLGtCQUFrQkosTUFBTUssUUFBUSxDQUFDO0lBQ3ZDLE1BQU1DLHdCQUF3Qk4sTUFBTUssUUFBUSxDQUFDLHFCQUFxQkY7SUFDbEUsTUFBTUksb0JBQW9CaEMseUNBQVksQ0FBQztJQUN2QyxNQUFNLEVBQ0prQyxlQUFlLEVBQ2ZDLHNCQUFzQixFQUN2QixHQUFHN0IsZ0ZBQXdCQSxDQUFDc0IsZUFBZUksbUJBQW1CUCxPQUFPO1FBQ3BFTDtJQUNGO0lBQ0EsTUFBTSxFQUNKZ0IsY0FBYyxFQUNkQyxTQUFTLEVBQ1YsR0FBR25DLDZFQUFTQSxDQUFDO1FBQ1pjO1FBQ0FzQixRQUFRckI7SUFDVjtJQUNBLE1BQU1zQixRQUFRL0IscUVBQVFBLENBQUNxQixpQkFBaUI7UUFDdENXLFNBQVNYLG1CQUFtQjtJQUM5QjtJQUNBLE1BQU1ZLHdCQUF3QmhDLDRFQUFlQSxDQUFDO1FBQUM4QjtLQUFNO0lBQ3JELE1BQU1HLFFBQVE7UUFDWjFCO1FBQ0EyQixNQUFNWjtJQUNSO0lBQ0EsTUFBTWEsbUJBQW1CbkIsTUFBTUssUUFBUSxDQUFDLGdCQUFnQks7SUFDeEQsT0FBT2hDLGdGQUFnQkEsQ0FBQyxVQUFVUyxnQkFBZ0I7UUFDaEQ4QjtRQUNBRyxLQUFLO1lBQUNSO1lBQVd4QjtZQUFjcUI7WUFBaUJGO1NBQWtCO1FBQ2xFYyxPQUFPO1lBQUNMLHNCQUFzQk0saUJBQWlCO1lBQUlIO1lBQWtCO2dCQUNuRSxDQUFDdkMsNkVBQXdCQSxDQUFDLEVBQUU7Z0JBQzVCYSxJQUFJVTtZQUNOO1lBQUdMO1lBQWNhO1NBQWU7UUFDaENZLHdCQUF3QjVDLGdGQUF1QkE7SUFDakQ7QUFDRjs7UUF4QzRCSCw0RUFBb0JBO1FBS3hCTSxrRUFBV0E7UUFPN0JELDRFQUF3QkE7UUFNeEJKLHlFQUFTQTtRQUlDTSxpRUFBUUE7UUFHUUMsd0VBQWVBO1FBTXRDTiw0RUFBZ0JBOzs7O1FBL0JHRiw0RUFBb0JBO1FBS3hCTSxrRUFBV0E7UUFPN0JELDRFQUF3QkE7UUFNeEJKLHlFQUFTQTtRQUlDTSxpRUFBUUE7UUFHUUMsd0VBQWVBO1FBTXRDTiw0RUFBZ0JBOztHQVN0Qjs7QUFDSCxJQUFJd0IsSUFBcUMsRUFBRWpCLGNBQWN1QyxXQUFXLEdBQUciLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2RpYWxvZy90cmlnZ2VyL0RpYWxvZ1RyaWdnZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2Zvcm1hdEVycm9yTWVzc2FnZSBmcm9tIFwiQGJhc2UtdWkvdXRpbHMvZm9ybWF0RXJyb3JNZXNzYWdlXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VEaWFsb2dSb290Q29udGV4dCB9IGZyb20gXCIuLi9yb290L0RpYWxvZ1Jvb3RDb250ZXh0LmpzXCI7XG5pbXBvcnQgeyB1c2VCdXR0b24gfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL3VzZS1idXR0b24vdXNlQnV0dG9uLmpzXCI7XG5pbXBvcnQgeyB1c2VSZW5kZXJFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy91c2VSZW5kZXJFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyB0cmlnZ2VyT3BlblN0YXRlTWFwcGluZyB9IGZyb20gXCIuLi8uLi91dGlscy9wb3B1cFN0YXRlTWFwcGluZy5qc1wiO1xuaW1wb3J0IHsgQ0xJQ0tfVFJJR0dFUl9JREVOVElGSUVSIH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHVzZVRyaWdnZXJEYXRhRm9yd2FyZGluZyB9IGZyb20gXCIuLi8uLi91dGlscy9wb3B1cHMvaW5kZXguanNcIjtcbmltcG9ydCB7IHVzZUJhc2VVaUlkIH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy91c2VCYXNlVWlJZC5qc1wiO1xuaW1wb3J0IHsgdXNlQ2xpY2ssIHVzZUludGVyYWN0aW9ucyB9IGZyb20gXCIuLi8uLi9mbG9hdGluZy11aS1yZWFjdC9pbmRleC5qc1wiO1xuXG4vKipcbiAqIEEgYnV0dG9uIHRoYXQgb3BlbnMgdGhlIGRpYWxvZy5cbiAqIFJlbmRlcnMgYSBgPGJ1dHRvbj5gIGVsZW1lbnQuXG4gKlxuICogRG9jdW1lbnRhdGlvbjogW0Jhc2UgVUkgRGlhbG9nXShodHRwczovL2Jhc2UtdWkuY29tL3JlYWN0L2NvbXBvbmVudHMvZGlhbG9nKVxuICovXG5leHBvcnQgY29uc3QgRGlhbG9nVHJpZ2dlciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIERpYWxvZ1RyaWdnZXIoY29tcG9uZW50UHJvcHMsIGZvcndhcmRlZFJlZikge1xuICBjb25zdCB7XG4gICAgcmVuZGVyLFxuICAgIGNsYXNzTmFtZSxcbiAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgIG5hdGl2ZUJ1dHRvbiA9IHRydWUsXG4gICAgaWQ6IGlkUHJvcCxcbiAgICBwYXlsb2FkLFxuICAgIGhhbmRsZSxcbiAgICBzdHlsZSxcbiAgICAuLi5lbGVtZW50UHJvcHNcbiAgfSA9IGNvbXBvbmVudFByb3BzO1xuICBjb25zdCBkaWFsb2dSb290Q29udGV4dCA9IHVzZURpYWxvZ1Jvb3RDb250ZXh0KHRydWUpO1xuICBjb25zdCBzdG9yZSA9IGhhbmRsZT8uc3RvcmUgPz8gZGlhbG9nUm9vdENvbnRleHQ/LnN0b3JlO1xuICBpZiAoIXN0b3JlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdCYXNlIFVJOiA8RGlhbG9nLlRyaWdnZXI+IG11c3QgYmUgdXNlZCB3aXRoaW4gPERpYWxvZy5Sb290PiBvciBwcm92aWRlZCB3aXRoIGEgaGFuZGxlLicgOiBfZm9ybWF0RXJyb3JNZXNzYWdlKDc5KSk7XG4gIH1cbiAgY29uc3QgdGhpc1RyaWdnZXJJZCA9IHVzZUJhc2VVaUlkKGlkUHJvcCk7XG4gIGNvbnN0IGZsb2F0aW5nQ29udGV4dCA9IHN0b3JlLnVzZVN0YXRlKCdmbG9hdGluZ1Jvb3RDb250ZXh0Jyk7XG4gIGNvbnN0IGlzT3BlbmVkQnlUaGlzVHJpZ2dlciA9IHN0b3JlLnVzZVN0YXRlKCdpc09wZW5lZEJ5VHJpZ2dlcicsIHRoaXNUcmlnZ2VySWQpO1xuICBjb25zdCB0cmlnZ2VyRWxlbWVudFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3Qge1xuICAgIHJlZ2lzdGVyVHJpZ2dlcixcbiAgICBpc01vdW50ZWRCeVRoaXNUcmlnZ2VyXG4gIH0gPSB1c2VUcmlnZ2VyRGF0YUZvcndhcmRpbmcodGhpc1RyaWdnZXJJZCwgdHJpZ2dlckVsZW1lbnRSZWYsIHN0b3JlLCB7XG4gICAgcGF5bG9hZFxuICB9KTtcbiAgY29uc3Qge1xuICAgIGdldEJ1dHRvblByb3BzLFxuICAgIGJ1dHRvblJlZlxuICB9ID0gdXNlQnV0dG9uKHtcbiAgICBkaXNhYmxlZCxcbiAgICBuYXRpdmU6IG5hdGl2ZUJ1dHRvblxuICB9KTtcbiAgY29uc3QgY2xpY2sgPSB1c2VDbGljayhmbG9hdGluZ0NvbnRleHQsIHtcbiAgICBlbmFibGVkOiBmbG9hdGluZ0NvbnRleHQgIT0gbnVsbFxuICB9KTtcbiAgY29uc3QgbG9jYWxJbnRlcmFjdGlvblByb3BzID0gdXNlSW50ZXJhY3Rpb25zKFtjbGlja10pO1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICBkaXNhYmxlZCxcbiAgICBvcGVuOiBpc09wZW5lZEJ5VGhpc1RyaWdnZXJcbiAgfTtcbiAgY29uc3Qgcm9vdFRyaWdnZXJQcm9wcyA9IHN0b3JlLnVzZVN0YXRlKCd0cmlnZ2VyUHJvcHMnLCBpc01vdW50ZWRCeVRoaXNUcmlnZ2VyKTtcbiAgcmV0dXJuIHVzZVJlbmRlckVsZW1lbnQoJ2J1dHRvbicsIGNvbXBvbmVudFByb3BzLCB7XG4gICAgc3RhdGUsXG4gICAgcmVmOiBbYnV0dG9uUmVmLCBmb3J3YXJkZWRSZWYsIHJlZ2lzdGVyVHJpZ2dlciwgdHJpZ2dlckVsZW1lbnRSZWZdLFxuICAgIHByb3BzOiBbbG9jYWxJbnRlcmFjdGlvblByb3BzLmdldFJlZmVyZW5jZVByb3BzKCksIHJvb3RUcmlnZ2VyUHJvcHMsIHtcbiAgICAgIFtDTElDS19UUklHR0VSX0lERU5USUZJRVJdOiAnJyxcbiAgICAgIGlkOiB0aGlzVHJpZ2dlcklkXG4gICAgfSwgZWxlbWVudFByb3BzLCBnZXRCdXR0b25Qcm9wc10sXG4gICAgc3RhdGVBdHRyaWJ1dGVzTWFwcGluZzogdHJpZ2dlck9wZW5TdGF0ZU1hcHBpbmdcbiAgfSk7XG59KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIERpYWxvZ1RyaWdnZXIuZGlzcGxheU5hbWUgPSBcIkRpYWxvZ1RyaWdnZXJcIjsiXSwibmFtZXMiOlsiX2Zvcm1hdEVycm9yTWVzc2FnZSIsIlJlYWN0IiwidXNlRGlhbG9nUm9vdENvbnRleHQiLCJ1c2VCdXR0b24iLCJ1c2VSZW5kZXJFbGVtZW50IiwidHJpZ2dlck9wZW5TdGF0ZU1hcHBpbmciLCJDTElDS19UUklHR0VSX0lERU5USUZJRVIiLCJ1c2VUcmlnZ2VyRGF0YUZvcndhcmRpbmciLCJ1c2VCYXNlVWlJZCIsInVzZUNsaWNrIiwidXNlSW50ZXJhY3Rpb25zIiwiRGlhbG9nVHJpZ2dlciIsImZvcndhcmRSZWYiLCJjb21wb25lbnRQcm9wcyIsImZvcndhcmRlZFJlZiIsInJlbmRlciIsImNsYXNzTmFtZSIsImRpc2FibGVkIiwibmF0aXZlQnV0dG9uIiwiaWQiLCJpZFByb3AiLCJwYXlsb2FkIiwiaGFuZGxlIiwic3R5bGUiLCJlbGVtZW50UHJvcHMiLCJkaWFsb2dSb290Q29udGV4dCIsInN0b3JlIiwiRXJyb3IiLCJwcm9jZXNzIiwidGhpc1RyaWdnZXJJZCIsImZsb2F0aW5nQ29udGV4dCIsInVzZVN0YXRlIiwiaXNPcGVuZWRCeVRoaXNUcmlnZ2VyIiwidHJpZ2dlckVsZW1lbnRSZWYiLCJ1c2VSZWYiLCJyZWdpc3RlclRyaWdnZXIiLCJpc01vdW50ZWRCeVRoaXNUcmlnZ2VyIiwiZ2V0QnV0dG9uUHJvcHMiLCJidXR0b25SZWYiLCJuYXRpdmUiLCJjbGljayIsImVuYWJsZWQiLCJsb2NhbEludGVyYWN0aW9uUHJvcHMiLCJzdGF0ZSIsIm9wZW4iLCJyb290VHJpZ2dlclByb3BzIiwicmVmIiwicHJvcHMiLCJnZXRSZWZlcmVuY2VQcm9wcyIsInN0YXRlQXR0cmlidXRlc01hcHBpbmciLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/trigger/DialogTrigger.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/field/control/FieldControl.js":
|
||
/*!***********************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/field/control/FieldControl.js ***!
|
||
\***********************************************************************/
|
||
/***/ ((__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 */ FieldControl: () => (/* binding */ FieldControl)\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 _base_ui_utils_useControlled__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @base-ui/utils/useControlled */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useControlled.js\");\n/* harmony import */ var _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @base-ui/utils/useIsoLayoutEffect */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @base-ui/utils/owner */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/owner.js\");\n/* harmony import */ var _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @base-ui/utils/useStableCallback */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useStableCallback.js\");\n/* harmony import */ var _internals_field_root_context_FieldRootContext_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../internals/field-root-context/FieldRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/field-root-context/FieldRootContext.js\");\n/* harmony import */ var _internals_field_register_control_useRegisterFieldControl_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../internals/field-register-control/useRegisterFieldControl.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/field-register-control/useRegisterFieldControl.js\");\n/* harmony import */ var _internals_labelable_provider_LabelableContext_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../internals/labelable-provider/LabelableContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/labelable-provider/LabelableContext.js\");\n/* harmony import */ var _internals_labelable_provider_useLabelableId_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../internals/labelable-provider/useLabelableId.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/labelable-provider/useLabelableId.js\");\n/* harmony import */ var _internals_field_constants_constants_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../internals/field-constants/constants.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/field-constants/constants.js\");\n/* harmony import */ var _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../internals/useRenderElement.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useRenderElement.js\");\n/* harmony import */ var _internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../internals/createBaseUIEventDetails.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.js\");\n/* harmony import */ var _internals_reasons_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../internals/reasons.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/reason-parts.js\");\n/* harmony import */ var _floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../floating-ui-react/utils.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/shadowDom.js\");\n/* __next_internal_client_entry_do_not_use__ FieldControl auto */ var _s = $RefreshSig$();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * The form control to label and validate.\n * Renders an `<input>` element.\n *\n * You can omit this part and use any Base UI input component instead. For example,\n * [Input](https://base-ui.com/react/components/input), [Checkbox](https://base-ui.com/react/components/checkbox),\n * or [Select](https://base-ui.com/react/components/select), among others, will work with Field out of the box.\n *\n * Documentation: [Base UI Field](https://base-ui.com/react/components/field)\n */ const FieldControl = /*#__PURE__*/ _s(react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c = _s(function FieldControl(componentProps, forwardedRef) {\n _s();\n const { render, className, id: idProp, name: nameProp, value: valueProp, disabled: disabledProp = false, onValueChange, defaultValue, autoFocus = false, style, ...elementProps } = componentProps;\n const { state: fieldState, name: fieldName, disabled: fieldDisabled, setTouched, setDirty, validityData, setFocused, setFilled, validationMode, validation } = (0,_internals_field_root_context_FieldRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useFieldRootContext)();\n const disabled = fieldDisabled || disabledProp;\n const name = fieldName !== null && fieldName !== void 0 ? fieldName : nameProp;\n const state = {\n ...fieldState,\n disabled\n };\n const { labelId } = (0,_internals_labelable_provider_LabelableContext_js__WEBPACK_IMPORTED_MODULE_2__.useLabelableContext)();\n const id = (0,_internals_labelable_provider_useLabelableId_js__WEBPACK_IMPORTED_MODULE_3__.useLabelableId)({\n id: idProp\n });\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_4__.useIsoLayoutEffect)({\n \"FieldControl.FieldControl.useIsoLayoutEffect\": ()=>{\n var _validation_inputRef_current;\n const hasExternalValue = valueProp != null;\n if (((_validation_inputRef_current = validation.inputRef.current) === null || _validation_inputRef_current === void 0 ? void 0 : _validation_inputRef_current.value) || hasExternalValue && valueProp !== '') {\n setFilled(true);\n } else if (hasExternalValue && valueProp === '') {\n setFilled(false);\n }\n }\n }[\"FieldControl.FieldControl.useIsoLayoutEffect\"], [\n validation.inputRef,\n setFilled,\n valueProp\n ]);\n const inputRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_4__.useIsoLayoutEffect)({\n \"FieldControl.FieldControl.useIsoLayoutEffect\": ()=>{\n if (autoFocus && inputRef.current === (0,_floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_5__.activeElement)((0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_6__.ownerDocument)(inputRef.current))) {\n setFocused(true);\n }\n }\n }[\"FieldControl.FieldControl.useIsoLayoutEffect\"], [\n autoFocus,\n setFocused\n ]);\n const [valueUnwrapped] = (0,_base_ui_utils_useControlled__WEBPACK_IMPORTED_MODULE_7__.useControlled)({\n controlled: valueProp,\n default: defaultValue,\n name: 'FieldControl',\n state: 'value'\n });\n const isControlled = valueProp !== undefined;\n const value = isControlled ? valueUnwrapped : undefined;\n const getFieldValue = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_8__.useStableCallback)({\n \"FieldControl.FieldControl.useStableCallback[getFieldValue]\": ()=>{\n var _validation_inputRef_current;\n return (_validation_inputRef_current = validation.inputRef.current) === null || _validation_inputRef_current === void 0 ? void 0 : _validation_inputRef_current.value;\n }\n }[\"FieldControl.FieldControl.useStableCallback[getFieldValue]\"]);\n (0,_internals_field_register_control_useRegisterFieldControl_js__WEBPACK_IMPORTED_MODULE_9__.useRegisterFieldControl)(validation.inputRef, {\n id,\n value,\n getValue: getFieldValue\n });\n const element = (0,_internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_10__.useRenderElement)('input', componentProps, {\n ref: [\n forwardedRef,\n inputRef\n ],\n state,\n props: [\n {\n id,\n disabled,\n name,\n ref: validation.inputRef,\n 'aria-labelledby': labelId,\n autoFocus,\n ...isControlled ? {\n value\n } : {\n defaultValue\n },\n onChange (event) {\n const inputValue = event.currentTarget.value;\n onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(inputValue, (0,_internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_11__.createChangeEventDetails)(_internals_reasons_js__WEBPACK_IMPORTED_MODULE_12__.none, event.nativeEvent));\n setDirty(inputValue !== validityData.initialValue);\n setFilled(inputValue !== '');\n },\n onFocus () {\n setFocused(true);\n },\n onBlur (event) {\n setTouched(true);\n setFocused(false);\n if (validationMode === 'onBlur') {\n validation.commit(event.currentTarget.value);\n }\n },\n onKeyDown (event) {\n if (event.currentTarget.tagName === 'INPUT' && event.key === 'Enter') {\n setTouched(true);\n validation.commit(event.currentTarget.value);\n }\n }\n },\n validation.getInputValidationProps(),\n elementProps\n ],\n stateAttributesMapping: _internals_field_constants_constants_js__WEBPACK_IMPORTED_MODULE_13__.fieldValidityMapping\n });\n return element;\n}, \"PcZzEJzGlmuaQTNWvaFRdWKt+YQ=\", false, function() {\n return [\n _internals_field_root_context_FieldRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useFieldRootContext,\n _internals_labelable_provider_LabelableContext_js__WEBPACK_IMPORTED_MODULE_2__.useLabelableContext,\n _internals_labelable_provider_useLabelableId_js__WEBPACK_IMPORTED_MODULE_3__.useLabelableId,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_4__.useIsoLayoutEffect,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_4__.useIsoLayoutEffect,\n _base_ui_utils_useControlled__WEBPACK_IMPORTED_MODULE_7__.useControlled,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_8__.useStableCallback,\n _internals_field_register_control_useRegisterFieldControl_js__WEBPACK_IMPORTED_MODULE_9__.useRegisterFieldControl,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_10__.useRenderElement\n ];\n})), \"PcZzEJzGlmuaQTNWvaFRdWKt+YQ=\", false, function() {\n return [\n _internals_field_root_context_FieldRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useFieldRootContext,\n _internals_labelable_provider_LabelableContext_js__WEBPACK_IMPORTED_MODULE_2__.useLabelableContext,\n _internals_labelable_provider_useLabelableId_js__WEBPACK_IMPORTED_MODULE_3__.useLabelableId,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_4__.useIsoLayoutEffect,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_4__.useIsoLayoutEffect,\n _base_ui_utils_useControlled__WEBPACK_IMPORTED_MODULE_7__.useControlled,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_8__.useStableCallback,\n _internals_field_register_control_useRegisterFieldControl_js__WEBPACK_IMPORTED_MODULE_9__.useRegisterFieldControl,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_10__.useRenderElement\n ];\n});\n_c1 = FieldControl;\nif (true) FieldControl.displayName = \"FieldControl\";\nvar _c, _c1;\n$RefreshReg$(_c, \"FieldControl$React.forwardRef\");\n$RefreshReg$(_c1, \"FieldControl\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmllbGQvY29udHJvbC9GaWVsZENvbnRyb2wuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUrQjtBQUM4QjtBQUNVO0FBQ2xCO0FBQ2dCO0FBQ3dCO0FBQ2U7QUFDZjtBQUNQO0FBQ0Y7QUFDYjtBQUNnQjtBQUNsQztBQUNZO0FBRWpFOzs7Ozs7Ozs7Q0FTQyxHQUNNLE1BQU1jLGVBQWUsV0FBVyxHQUFFZCxHQUFBQSw2Q0FBZ0IsU0FBQyxTQUFTYyxhQUFhRSxjQUFjLEVBQUVDLFlBQVk7O0lBQzFHLE1BQU0sRUFDSkMsTUFBTSxFQUNOQyxTQUFTLEVBQ1RDLElBQUlDLE1BQU0sRUFDVkMsTUFBTUMsUUFBUSxFQUNkQyxPQUFPQyxTQUFTLEVBQ2hCQyxVQUFVQyxlQUFlLEtBQUssRUFDOUJDLGFBQWEsRUFDYkMsWUFBWSxFQUNaQyxZQUFZLEtBQUssRUFDakJDLEtBQUssRUFDTCxHQUFHQyxjQUNKLEdBQUdoQjtJQUNKLE1BQU0sRUFDSmlCLE9BQU9DLFVBQVUsRUFDakJaLE1BQU1hLFNBQVMsRUFDZlQsVUFBVVUsYUFBYSxFQUN2QkMsVUFBVSxFQUNWQyxRQUFRLEVBQ1JDLFlBQVksRUFDWkMsVUFBVSxFQUNWQyxTQUFTLEVBQ1RDLGNBQWMsRUFDZEMsVUFBVSxFQUNYLEdBQUd0QyxzR0FBbUJBO0lBQ3ZCLE1BQU1xQixXQUFXVSxpQkFBaUJUO0lBQ2xDLE1BQU1MLE9BQU9hLHNCQUFBQSx1QkFBQUEsWUFBYVo7SUFDMUIsTUFBTVUsUUFBUTtRQUNaLEdBQUdDLFVBQVU7UUFDYlI7SUFDRjtJQUNBLE1BQU0sRUFDSmtCLE9BQU8sRUFDUixHQUFHckMsc0dBQW1CQTtJQUN2QixNQUFNYSxLQUFLWiwrRkFBY0EsQ0FBQztRQUN4QlksSUFBSUM7SUFDTjtJQUNBbkIscUZBQWtCQTt3REFBQztnQkFFYnlDO1lBREosTUFBTUUsbUJBQW1CcEIsYUFB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dkNFLGlIQUF1QkE7UUFLUEksNkVBQWdCQTs7R0F5Qy9COztBQUNILElBQUlnRSxJQUFxQyxFQUFFNUQsYUFBYTZELFdBQVcsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmllbGQvY29udHJvbC9GaWVsZENvbnRyb2wuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVkIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlQ29udHJvbGxlZCc7XG5pbXBvcnQgeyB1c2VJc29MYXlvdXRFZmZlY3QgfSBmcm9tICdAYmFzZS11aS91dGlscy91c2VJc29MYXlvdXRFZmZlY3QnO1xuaW1wb3J0IHsgb3duZXJEb2N1bWVudCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL293bmVyJztcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlU3RhYmxlQ2FsbGJhY2snO1xuaW1wb3J0IHsgdXNlRmllbGRSb290Q29udGV4dCB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvZmllbGQtcm9vdC1jb250ZXh0L0ZpZWxkUm9vdENvbnRleHQuanNcIjtcbmltcG9ydCB7IHVzZVJlZ2lzdGVyRmllbGRDb250cm9sIH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy9maWVsZC1yZWdpc3Rlci1jb250cm9sL3VzZVJlZ2lzdGVyRmllbGRDb250cm9sLmpzXCI7XG5pbXBvcnQgeyB1c2VMYWJlbGFibGVDb250ZXh0IH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy9sYWJlbGFibGUtcHJvdmlkZXIvTGFiZWxhYmxlQ29udGV4dC5qc1wiO1xuaW1wb3J0IHsgdXNlTGFiZWxhYmxlSWQgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL2xhYmVsYWJsZS1wcm92aWRlci91c2VMYWJlbGFibGVJZC5qc1wiO1xuaW1wb3J0IHsgZmllbGRWYWxpZGl0eU1hcHBpbmcgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL2ZpZWxkLWNvbnN0YW50cy9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHVzZVJlbmRlckVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL3VzZVJlbmRlckVsZW1lbnQuanNcIjtcbmltcG9ydCB7IGNyZWF0ZUNoYW5nZUV2ZW50RGV0YWlscyB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvY3JlYXRlQmFzZVVJRXZlbnREZXRhaWxzLmpzXCI7XG5pbXBvcnQgeyBSRUFTT05TIH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy9yZWFzb25zLmpzXCI7XG5pbXBvcnQgeyBhY3RpdmVFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2Zsb2F0aW5nLXVpLXJlYWN0L3V0aWxzLmpzXCI7XG5cbi8qKlxuICogVGhlIGZvcm0gY29udHJvbCB0byBsYWJlbCBhbmQgdmFsaWRhdGUuXG4gKiBSZW5kZXJzIGFuIGA8aW5wdXQ+YCBlbGVtZW50LlxuICpcbiAqIFlvdSBjYW4gb21pdCB0aGlzIHBhcnQgYW5kIHVzZSBhbnkgQmFzZSBVSSBpbnB1dCBjb21wb25lbnQgaW5zdGVhZC4gRm9yIGV4YW1wbGUsXG4gKiBbSW5wdXRdKGh0dHBzOi8vYmFzZS11aS5jb20vcmVhY3QvY29tcG9uZW50cy9pbnB1dCksIFtDaGVja2JveF0oaHR0cHM6Ly9iYXNlLXVpLmNvbS9yZWFjdC9jb21wb25lbnRzL2NoZWNrYm94KSxcbiAqIG9yIFtTZWxlY3RdKGh0dHBzOi8vYmFzZS11aS5jb20vcmVhY3QvY29tcG9uZW50cy9zZWxlY3QpLCBhbW9uZyBvdGhlcnMsIHdpbGwgd29yayB3aXRoIEZpZWxkIG91dCBvZiB0aGUgYm94LlxuICpcbiAqIERvY3VtZW50YXRpb246IFtCYXNlIFVJIEZpZWxkXShodHRwczovL2Jhc2UtdWkuY29tL3JlYWN0L2NvbXBvbmVudHMvZmllbGQpXG4gKi9cbmV4cG9ydCBjb25zdCBGaWVsZENvbnRyb2wgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGaWVsZENvbnRyb2woY29tcG9uZW50UHJvcHMsIGZvcndhcmRlZFJlZikge1xuICBjb25zdCB7XG4gICAgcmVuZGVyLFxuICAgIGNsYXNzTmFtZSxcbiAgICBpZDogaWRQcm9wLFxuICAgIG5hbWU6IG5hbWVQcm9wLFxuICAgIHZhbHVlOiB2YWx1ZVByb3AsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkUHJvcCA9IGZhbHNlLFxuICAgIG9uVmFsdWVDaGFuZ2UsXG4gICAgZGVmYXVsdFZhbHVlLFxuICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgIHN0eWxlLFxuICAgIC4uLmVsZW1lbnRQcm9wc1xuICB9ID0gY29tcG9uZW50UHJvcHM7XG4gIGNvbnN0IHtcbiAgICBzdGF0ZTogZmllbGRTdGF0ZSxcbiAgICBuYW1lOiBmaWVsZE5hbWUsXG4gICAgZGlzYWJsZWQ6IGZpZWxkRGlzYWJsZWQsXG4gICAgc2V0VG91Y2hlZCxcbiAgICBzZXREaXJ0eSxcbiAgICB2YWxpZGl0eURhdGEsXG4gICAgc2V0Rm9jdXNlZCxcbiAgICBzZXRGaWxsZWQsXG4gICAgdmFsaWRhdGlvbk1vZGUsXG4gICAgdmFsaWRhdGlvblxuICB9ID0gdXNlRmllbGRSb290Q29udGV4dCgpO1xuICBjb25zdCBkaXNhYmxlZCA9IGZpZWxkRGlzYWJsZWQgfHwgZGlzYWJsZWRQcm9wO1xuICBjb25zdCBuYW1lID0gZmllbGROYW1lID8/IG5hbWVQcm9wO1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICAuLi5maWVsZFN0YXRlLFxuICAgIGRpc2FibGVkXG4gIH07XG4gIGNvbnN0IHtcbiAgICBsYWJlbElkXG4gIH0gPSB1c2VMYWJlbGFibGVDb250ZXh0KCk7XG4gIGNvbnN0IGlkID0gdXNlTGFiZWxhYmxlSWQoe1xuICAgIGlkOiBpZFByb3BcbiAgfSk7XG4gIHVzZUlzb0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFzRXh0ZXJuYWxWYWx1ZSA9IHZhbHVlUHJvcCAhPSBudWxsO1xuICAgIGlmICh2YWxpZGF0aW9uLmlucHV0UmVmLmN1cnJlbnQ/LnZhbHVlIHx8IGhhc0V4dGVybmFsVmFsdWUgJiYgdmFsdWVQcm9wICE9PSAnJykge1xuICAgICAgc2V0RmlsbGVkKHRydWUpO1xuICAgIH0gZWxzZSBpZiAoaGFzRXh0ZXJuYWxWYWx1ZSAmJiB2YWx1ZVByb3AgPT09ICcnKSB7XG4gICAgICBzZXRGaWxsZWQoZmFsc2UpO1xuICAgIH1cbiAgfSwgW3ZhbGlkYXRpb24uaW5wdXRSZWYsIHNldEZpbGxlZCwgdmFsdWVQcm9wXSk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICB1c2VJc29MYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChhdXRvRm9jdXMgJiYgaW5wdXRSZWYuY3VycmVudCA9PT0gYWN0aXZlRWxlbWVudChvd25lckRvY3VtZW50KGlucHV0UmVmLmN1cnJlbnQpKSkge1xuICAgICAgc2V0Rm9jdXNlZCh0cnVlKTtcbiAgICB9XG4gIH0sIFthdXRvRm9jdXMsIHNldEZvY3VzZWRdKTtcbiAgY29uc3QgW3ZhbHVlVW53cmFwcGVkXSA9IHVzZUNvbnRyb2xsZWQoe1xuICAgIGNvbnRyb2xsZWQ6IHZhbHVlUHJvcCxcbiAgICBkZWZhdWx0OiBkZWZhdWx0VmFsdWUsXG4gICAgbmFtZTogJ0ZpZWxkQ29udHJvbCcsXG4gICAgc3RhdGU6ICd2YWx1ZSdcbiAgfSk7XG4gIGNvbnN0IGlzQ29udHJvbGxlZCA9IHZhbHVlUHJvcCAhPT0gdW5kZWZpbmVkO1xuICBjb25zdCB2YWx1ZSA9IGlzQ29udHJvbGxlZCA/IHZhbHVlVW53cmFwcGVkIDogdW5kZWZpbmVkO1xuICBjb25zdCBnZXRGaWVsZFZhbHVlID0gdXNlU3RhYmxlQ2FsbGJhY2soKCkgPT4gdmFsaWRhdGlvbi5pbnB1dFJlZi5jdXJyZW50Py52YWx1ZSk7XG4gIHVzZVJlZ2lzdGVyRmllbGRDb250cm9sKHZhbGlkYXRpb24uaW5wdXRSZWYsIHtcbiAgICBpZCxcbiAgICB2YWx1ZSxcbiAgICBnZXRWYWx1ZTogZ2V0RmllbGRWYWx1ZVxuICB9KTtcbiAgY29uc3QgZWxlbWVudCA9IHVzZVJlbmRlckVsZW1lbnQoJ2lucHV0JywgY29tcG9uZW50UHJvcHMsIHtcbiAgICByZWY6IFtmb3J3YXJkZWRSZWYsIGlucHV0UmVmXSxcbiAgICBzdGF0ZSxcbiAgICBwcm9wczogW3tcbiAgICAgIGlkLFxuICAgICAgZGlzYWJsZWQsXG4gICAgICBuYW1lLFxuICAgICAgcmVmOiB2YWxpZGF0aW9uLmlucHV0UmVmLFxuICAgICAgJ2FyaWEtbGFiZWxsZWRieSc6IGxhYmVsSWQsXG4gICAgICBhdXRvRm9jdXMsXG4gICAgICAuLi4oaXNDb250cm9sbGVkID8ge1xuICAgICAgICB2YWx1ZVxuICAgICAgfSA6IHtcbiAgICAgICAgZGVmYXVsdFZhbHVlXG4gICAgICB9KSxcbiAgICAgIG9uQ2hhbmdlKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSBldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlO1xuICAgICAgICBvblZhbHVlQ2hhbmdlPy4oaW5wdXRWYWx1ZSwgY3JlYXRlQ2hhbmdlRXZlbnREZXRhaWxzKFJFQVNPTlMubm9uZSwgZXZlbnQubmF0aXZlRXZlbnQpKTtcbiAgICAgICAgc2V0RGlydHkoaW5wdXRWYWx1ZSAhPT0gdmFsaWRpdHlEYXRhLmluaXRpYWxWYWx1ZSk7XG4gICAgICAgIHNldEZpbGxlZChpbnB1dFZhbHVlICE9PSAnJyk7XG4gICAgICB9LFxuICAgICAgb25Gb2N1cygpIHtcbiAgICAgICAgc2V0Rm9jdXNlZCh0cnVlKTtcbiAgICAgIH0sXG4gICAgICBvbkJsdXIoZXZlbnQpIHtcbiAgICAgICAgc2V0VG91Y2hlZCh0cnVlKTtcbiAgICAgICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uTW9kZSA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICB2YWxpZGF0aW9uLmNvbW1pdChldmVudC5jdXJyZW50VGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgICBpZiAoZXZlbnQuY3VycmVudFRhcmdldC50YWdOYW1lID09PSAnSU5QVVQnICYmIGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgIHNldFRvdWNoZWQodHJ1ZSk7XG4gICAgICAgICAgdmFsaWRhdGlvbi5jb21taXQoZXZlbnQuY3VycmVudFRhcmdldC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCB2YWxpZGF0aW9uLmdldElucHV0VmFsaWRhdGlvblByb3BzKCksIGVsZW1lbnRQcm9wc10sXG4gICAgc3RhdGVBdHRyaWJ1dGVzTWFwcGluZzogZmllbGRWYWxpZGl0eU1hcHBpbmdcbiAgfSk7XG4gIHJldHVybiBlbGVtZW50O1xufSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSBGaWVsZENvbnRyb2wuZGlzcGxheU5hbWUgPSBcIkZpZWxkQ29udHJvbFwiOyJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZUNvbnRyb2xsZWQiLCJ1c2VJc29MYXlvdXRFZmZlY3QiLCJvd25lckRvY3VtZW50IiwidXNlU3RhYmxlQ2FsbGJhY2siLCJ1c2VGaWVsZFJvb3RDb250ZXh0IiwidXNlUmVnaXN0ZXJGaWVsZENvbnRyb2wiLCJ1c2VMYWJlbGFibGVDb250ZXh0IiwidXNlTGFiZWxhYmxlSWQiLCJmaWVsZFZhbGlkaXR5TWFwcGluZyIsInVzZVJlbmRlckVsZW1lbnQiLCJjcmVhdGVDaGFuZ2VFdmVudERldGFpbHMiLCJSRUFTT05TIiwiYWN0aXZlRWxlbWVudCIsIkZpZWxkQ29udHJvbCIsImZvcndhcmRSZWYiLCJjb21wb25lbnRQcm9wcyIsImZvcndhcmRlZFJlZiIsInJlbmRlciIsImNsYXNzTmFtZSIsImlkIiwiaWRQcm9wIiwibmFtZSIsIm5hbWVQcm9wIiwidmFsdWUiLCJ2YWx1ZVByb3AiLCJkaXNhYmxlZCIsImRpc2FibGVkUHJvcCIsIm9uVmFsdWVDaGFuZ2UiLCJkZWZhdWx0VmFsdWUiLCJhdXRvRm9jdXMiLCJzdHlsZSIsImVsZW1lbnRQcm9wcyIsInN0YXRlIiwiZmllbGRTdGF0ZSIsImZpZWxkTmFtZSIsImZpZWxkRGlzYWJsZWQiLCJzZXRUb3VjaGVkIiwic2V0RGlydHkiLCJ2YWxpZGl0eURhdGEiLCJzZXRGb2N1c2VkIiwic2V0RmlsbGVkIiwidmFsaWRhdGlvbk1vZGUiLCJ2YWxpZGF0aW9uIiwibGFiZWxJZCIsImhhc0V4dGVybmFsVmFsdWUiLCJpbnB1dFJlZiIsImN1cnJlbnQiLCJ1c2VSZWYiLCJ2YWx1ZVVud3JhcHBlZCIsImNvbnRyb2xsZWQiLCJkZWZhdWx0IiwiaXNDb250cm9sbGVkIiwidW5kZWZpbmVkIiwiZ2V0RmllbGRWYWx1ZSIsImdldFZhbHVlIiwiZWxlbWVudCIsInJlZiIsInByb3BzIiwib25DaGFuZ2UiLCJldmVudCIsImlucHV0VmFsdWUiLCJjdXJyZW50VGFyZ2V0Iiwibm9uZSIsIm5hdGl2ZUV2ZW50IiwiaW5pdGlhbFZhbHVlIiwib25Gb2N1cyIsIm9uQmx1ciIsImNvbW1pdCIsIm9uS2V5RG93biIsInRhZ05hbWUiLCJrZXkiLCJnZXRJbnB1dFZhbGlkYXRpb25Qcm9wcyIsInN0YXRlQXR0cmlidXRlc01hcHBpbmciLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/field/control/FieldControl.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/field/control/FieldControlDataAttributes.js":
|
||
/*!*************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/field/control/FieldControlDataAttributes.js ***!
|
||
\*************************************************************************************/
|
||
/***/ ((__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 */ FieldControlDataAttributes: () => (/* binding */ FieldControlDataAttributes)\n/* harmony export */ });\nlet FieldControlDataAttributes = /*#__PURE__*/function (FieldControlDataAttributes) {\n /**\n * Present when the field is disabled.\n */\n FieldControlDataAttributes[\"disabled\"] = \"data-disabled\";\n /**\n * Present when the field is in a valid state.\n */\n FieldControlDataAttributes[\"valid\"] = \"data-valid\";\n /**\n * Present when the field is in an invalid state.\n */\n FieldControlDataAttributes[\"invalid\"] = \"data-invalid\";\n /**\n * Present when the field has been touched.\n */\n FieldControlDataAttributes[\"touched\"] = \"data-touched\";\n /**\n * Present when the field's value has changed.\n */\n FieldControlDataAttributes[\"dirty\"] = \"data-dirty\";\n /**\n * Present when the field is filled.\n */\n FieldControlDataAttributes[\"filled\"] = \"data-filled\";\n /**\n * Present when the field control is focused.\n */\n FieldControlDataAttributes[\"focused\"] = \"data-focused\";\n return FieldControlDataAttributes;\n}({});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmllbGQvY29udHJvbC9GaWVsZENvbnRyb2xEYXRhQXR0cmlidXRlcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9maWVsZC9jb250cm9sL0ZpZWxkQ29udHJvbERhdGFBdHRyaWJ1dGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBsZXQgRmllbGRDb250cm9sRGF0YUF0dHJpYnV0ZXMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKEZpZWxkQ29udHJvbERhdGFBdHRyaWJ1dGVzKSB7XG4gIC8qKlxuICAgKiBQcmVzZW50IHdoZW4gdGhlIGZpZWxkIGlzIGRpc2FibGVkLlxuICAgKi9cbiAgRmllbGRDb250cm9sRGF0YUF0dHJpYnV0ZXNbXCJkaXNhYmxlZFwiXSA9IFwiZGF0YS1kaXNhYmxlZFwiO1xuICAvKipcbiAgICogUHJlc2VudCB3aGVuIHRoZSBmaWVsZCBpcyBpbiBhIHZhbGlkIHN0YXRlLlxuICAgKi9cbiAgRmllbGRDb250cm9sRGF0YUF0dHJpYnV0ZXNbXCJ2YWxpZFwiXSA9IFwiZGF0YS12YWxpZFwiO1xuICAvKipcbiAgICogUHJlc2VudCB3aGVuIHRoZSBmaWVsZCBpcyBpbiBhbiBpbnZhbGlkIHN0YXRlLlxuICAgKi9cbiAgRmllbGRDb250cm9sRGF0YUF0dHJpYnV0ZXNbXCJpbnZhbGlkXCJdID0gXCJkYXRhLWludmFsaWRcIjtcbiAgLyoqXG4gICAqIFByZXNlbnQgd2hlbiB0aGUgZmllbGQgaGFzIGJlZW4gdG91Y2hlZC5cbiAgICovXG4gIEZpZWxkQ29udHJvbERhdGFBdHRyaWJ1dGVzW1widG91Y2hlZFwiXSA9IFwiZGF0YS10b3VjaGVkXCI7XG4gIC8qKlxuICAgKiBQcmVzZW50IHdoZW4gdGhlIGZpZWxkJ3MgdmFsdWUgaGFzIGNoYW5nZWQuXG4gICAqL1xuICBGaWVsZENvbnRyb2xEYXRhQXR0cmlidXRlc1tcImRpcnR5XCJdID0gXCJkYXRhLWRpcnR5XCI7XG4gIC8qKlxuICAgKiBQcmVzZW50IHdoZW4gdGhlIGZpZWxkIGlzIGZpbGxlZC5cbiAgICovXG4gIEZpZWxkQ29udHJvbERhdGFBdHRyaWJ1dGVzW1wiZmlsbGVkXCJdID0gXCJkYXRhLWZpbGxlZFwiO1xuICAvKipcbiAgICogUHJlc2VudCB3aGVuIHRoZSBmaWVsZCBjb250cm9sIGlzIGZvY3VzZWQuXG4gICAqL1xuICBGaWVsZENvbnRyb2xEYXRhQXR0cmlidXRlc1tcImZvY3VzZWRcIl0gPSBcImRhdGEtZm9jdXNlZFwiO1xuICByZXR1cm4gRmllbGRDb250cm9sRGF0YUF0dHJpYnV0ZXM7XG59KHt9KTsiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/field/control/FieldControlDataAttributes.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingFocusManager.js":
|
||
/*!**********************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingFocusManager.js ***!
|
||
\**********************************************************************************************/
|
||
/***/ ((__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 */ FloatingFocusManager: () => (/* binding */ FloatingFocusManager)\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 _base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/utils/owner */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\");\n/* harmony import */ var _base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @base-ui/utils/addEventListener */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/addEventListener.js\");\n/* harmony import */ var _base_ui_utils_mergeCleanups__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @base-ui/utils/mergeCleanups */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/mergeCleanups.js\");\n/* harmony import */ var _base_ui_utils_useMergedRefs__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @base-ui/utils/useMergedRefs */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useMergedRefs.js\");\n/* harmony import */ var _base_ui_utils_useValueAsRef__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @base-ui/utils/useValueAsRef */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useValueAsRef.js\");\n/* harmony import */ var _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @base-ui/utils/useStableCallback */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useStableCallback.js\");\n/* harmony import */ var _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! @base-ui/utils/useIsoLayoutEffect */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _base_ui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @base-ui/utils/useTimeout */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useTimeout.js\");\n/* harmony import */ var _base_ui_utils_detectBrowser__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! @base-ui/utils/detectBrowser */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/detectBrowser.js\");\n/* harmony import */ var _base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @base-ui/utils/useAnimationFrame */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useAnimationFrame.js\");\n/* harmony import */ var _base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @base-ui/utils/owner */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/owner.js\");\n/* harmony import */ var _utils_FocusGuard_js__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../../utils/FocusGuard.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/FocusGuard.js\");\n/* harmony import */ var _utils_element_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/element.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/shadowDom.js\");\n/* harmony import */ var _utils_element_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/element.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/element.js\");\n/* harmony import */ var _utils_event_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../utils/event.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/event.js\");\n/* harmony import */ var _utils_tabbable_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/tabbable.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/tabbable.js\");\n/* harmony import */ var _utils_nodes_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../utils/nodes.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/nodes.js\");\n/* harmony import */ var _utils_composite_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../utils/composite.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/composite.js\");\n/* harmony import */ var _internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../../internals/createBaseUIEventDetails.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.js\");\n/* harmony import */ var _internals_reasons_js__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../../internals/reasons.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/reason-parts.js\");\n/* harmony import */ var _utils_createAttribute_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../utils/createAttribute.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/createAttribute.js\");\n/* harmony import */ var _utils_enqueueFocus_js__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../utils/enqueueFocus.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/enqueueFocus.js\");\n/* harmony import */ var _utils_markOthers_js__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../utils/markOthers.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/markOthers.js\");\n/* harmony import */ var _FloatingPortal_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./FloatingPortal.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingPortal.js\");\n/* harmony import */ var _FloatingTree_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./FloatingTree.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTree.js\");\n/* harmony import */ var _internals_constants_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../internals/constants.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/constants.js\");\n/* harmony import */ var _utils_resolveRef_js__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../../utils/resolveRef.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/resolveRef.js\");\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__ FloatingFocusManager auto */ var _s = $RefreshSig$();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nfunction getEventType(event, lastInteractionType) {\n const win = (0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_2__.getWindow)((0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.getTarget)(event));\n if (event instanceof win.KeyboardEvent) {\n return 'keyboard';\n }\n if (event instanceof win.FocusEvent) {\n // Focus events can be caused by a preceding pointer interaction (e.g., focusout on outside press).\n // Prefer the last known pointer type if provided, else treat as keyboard.\n return lastInteractionType || 'keyboard';\n }\n if ('pointerType' in event) {\n return event.pointerType || 'keyboard';\n }\n if ('touches' in event) {\n return 'touch';\n }\n if (event instanceof win.MouseEvent) {\n // onClick events may not contain pointer events, and will fall through to here\n return lastInteractionType || (event.detail === 0 ? 'keyboard' : 'mouse');\n }\n return '';\n}\nconst LIST_LIMIT = 20;\nlet previouslyFocusedElements = [];\nfunction clearDisconnectedPreviouslyFocusedElements() {\n previouslyFocusedElements = previouslyFocusedElements.filter((entry)=>{\n var _entry_deref;\n return (_entry_deref = entry.deref()) === null || _entry_deref === void 0 ? void 0 : _entry_deref.isConnected;\n });\n}\nfunction addPreviouslyFocusedElement(element) {\n clearDisconnectedPreviouslyFocusedElements();\n if (element && (0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_2__.getNodeName)(element) !== 'body') {\n previouslyFocusedElements.push(new WeakRef(element));\n if (previouslyFocusedElements.length > LIST_LIMIT) {\n previouslyFocusedElements = previouslyFocusedElements.slice(-LIST_LIMIT);\n }\n }\n}\nfunction getPreviouslyFocusedElement() {\n var _previouslyFocusedElements_;\n clearDisconnectedPreviouslyFocusedElements();\n return (_previouslyFocusedElements_ = previouslyFocusedElements[previouslyFocusedElements.length - 1]) === null || _previouslyFocusedElements_ === void 0 ? void 0 : _previouslyFocusedElements_.deref();\n}\nfunction getFirstTabbableElement(container) {\n if (!container) {\n return null;\n }\n if ((0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_4__.isTabbable)(container)) {\n return container;\n }\n return (0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_4__.tabbable)(container)[0] || container;\n}\nfunction handleTabIndex(floatingFocusElement, orderRef) {\n var _floatingFocusElement_getAttribute;\n if (floatingFocusElement.hasAttribute('tabindex') && !floatingFocusElement.hasAttribute('data-tabindex')) {\n return;\n }\n if (!orderRef.current.includes('floating') && !((_floatingFocusElement_getAttribute = floatingFocusElement.getAttribute('role')) === null || _floatingFocusElement_getAttribute === void 0 ? void 0 : _floatingFocusElement_getAttribute.includes('dialog'))) {\n return;\n }\n const focusableElements = (0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_4__.focusable)(floatingFocusElement);\n const tabbableContent = focusableElements.filter((element)=>{\n const dataTabIndex = element.getAttribute('data-tabindex') || '';\n return (0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_4__.isTabbable)(element) || element.hasAttribute('data-tabindex') && !dataTabIndex.startsWith('-');\n });\n const tabIndex = floatingFocusElement.getAttribute('tabindex');\n if (orderRef.current.includes('floating') || tabbableContent.length === 0) {\n if (tabIndex !== '0') {\n floatingFocusElement.setAttribute('tabindex', '0');\n }\n } else if (tabIndex !== '-1' || floatingFocusElement.hasAttribute('data-tabindex') && floatingFocusElement.getAttribute('data-tabindex') !== '-1') {\n floatingFocusElement.setAttribute('tabindex', '-1');\n floatingFocusElement.setAttribute('data-tabindex', '-1');\n }\n}\n/**\n * Provides focus management for the floating element.\n * @see https://floating-ui.com/docs/FloatingFocusManager\n * @internal\n */ function FloatingFocusManager(props) {\n _s();\n const { context, children, disabled = false, initialFocus = true, returnFocus = true, restoreFocus = false, modal = true, closeOnFocusOut = true, openInteractionType = '', nextFocusableElement, previousFocusableElement, beforeContentFocusGuardRef, externalTree, getInsideElements } = props;\n const store = 'rootStore' in context ? context.rootStore : context;\n const open = store.useState('open');\n const domReference = store.useState('domReferenceElement');\n const floating = store.useState('floatingElement');\n const { events, dataRef } = store.context;\n const getNodeId = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_5__.useStableCallback)({\n \"FloatingFocusManager.useStableCallback[getNodeId]\": ()=>{\n var _dataRef_current_floatingContext;\n return (_dataRef_current_floatingContext = dataRef.current.floatingContext) === null || _dataRef_current_floatingContext === void 0 ? void 0 : _dataRef_current_floatingContext.nodeId;\n }\n }[\"FloatingFocusManager.useStableCallback[getNodeId]\"]);\n const ignoreInitialFocus = initialFocus === false;\n // If the reference is a combobox and is typeable (e.g. input/textarea),\n // there are different focus semantics. The guards should not be rendered, but\n // aria-hidden should be applied to all nodes still. Further, the visually\n // hidden dismiss button should only appear at the end of the list, not the\n // start.\n const isUntrappedTypeableCombobox = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_6__.isTypeableCombobox)(domReference) && ignoreInitialFocus;\n const orderRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef([\n 'content'\n ]);\n const initialFocusRef = (0,_base_ui_utils_useValueAsRef__WEBPACK_IMPORTED_MODULE_7__.useValueAsRef)(initialFocus);\n const returnFocusRef = (0,_base_ui_utils_useValueAsRef__WEBPACK_IMPORTED_MODULE_7__.useValueAsRef)(returnFocus);\n const openInteractionTypeRef = (0,_base_ui_utils_useValueAsRef__WEBPACK_IMPORTED_MODULE_7__.useValueAsRef)(openInteractionType);\n const tree = (0,_FloatingTree_js__WEBPACK_IMPORTED_MODULE_8__.useFloatingTree)(externalTree);\n const portalContext = (0,_FloatingPortal_js__WEBPACK_IMPORTED_MODULE_9__.usePortalContext)();\n const preventReturnFocusRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n const isPointerDownRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n const pointerDownOutsideRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n const lastFocusedTabbableRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const closeTypeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef('');\n const lastInteractionTypeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef('');\n const beforeGuardRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const afterGuardRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const mergedBeforeGuardRef = (0,_base_ui_utils_useMergedRefs__WEBPACK_IMPORTED_MODULE_10__.useMergedRefs)(beforeGuardRef, beforeContentFocusGuardRef, portalContext === null || portalContext === void 0 ? void 0 : portalContext.beforeInsideRef);\n const mergedAfterGuardRef = (0,_base_ui_utils_useMergedRefs__WEBPACK_IMPORTED_MODULE_10__.useMergedRefs)(afterGuardRef, portalContext === null || portalContext === void 0 ? void 0 : portalContext.afterInsideRef);\n const blurTimeout = (0,_base_ui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_11__.useTimeout)();\n const pointerDownTimeout = (0,_base_ui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_11__.useTimeout)();\n const restoreFocusFrame = (0,_base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_12__.useAnimationFrame)();\n const isInsidePortal = portalContext != null;\n const floatingFocusElement = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_6__.getFloatingFocusElement)(floating);\n const getTabbableContent = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_5__.useStableCallback)({\n \"FloatingFocusManager.useStableCallback[getTabbableContent]\": function() {\n let container = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : floatingFocusElement;\n return container ? (0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_4__.tabbable)(container) : [];\n }\n }[\"FloatingFocusManager.useStableCallback[getTabbableContent]\"]);\n const getResolvedInsideElements = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_5__.useStableCallback)({\n \"FloatingFocusManager.useStableCallback[getResolvedInsideElements]\": ()=>{\n var _getInsideElements_filter;\n return (_getInsideElements_filter = getInsideElements === null || getInsideElements === void 0 ? void 0 : getInsideElements().filter({\n \"FloatingFocusManager.useStableCallback[getResolvedInsideElements]\": (element)=>element != null\n }[\"FloatingFocusManager.useStableCallback[getResolvedInsideElements]\"])) !== null && _getInsideElements_filter !== void 0 ? _getInsideElements_filter : [];\n }\n }[\"FloatingFocusManager.useStableCallback[getResolvedInsideElements]\"]);\n // Prevent Tab from escaping the modal when there are no tabbable elements.\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"FloatingFocusManager.useEffect\": ()=>{\n if (disabled || !modal) {\n return undefined;\n }\n function onKeyDown(event) {\n if (event.key === 'Tab') {\n // The focus guards have nothing to focus, so we need to stop the event.\n if ((0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)(floatingFocusElement, (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.activeElement)((0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_13__.ownerDocument)(floatingFocusElement))) && getTabbableContent().length === 0 && !isUntrappedTypeableCombobox) {\n (0,_utils_event_js__WEBPACK_IMPORTED_MODULE_14__.stopEvent)(event);\n }\n }\n }\n const doc = (0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_13__.ownerDocument)(floatingFocusElement);\n return (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_15__.addEventListener)(doc, 'keydown', onKeyDown);\n }\n }[\"FloatingFocusManager.useEffect\"], [\n disabled,\n domReference,\n floatingFocusElement,\n modal,\n orderRef,\n isUntrappedTypeableCombobox,\n getTabbableContent\n ]);\n // Track pointer/keyboard interactions to disambiguate focus and outside presses.\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"FloatingFocusManager.useEffect\": ()=>{\n if (disabled || !open) {\n return undefined;\n }\n const doc = (0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_13__.ownerDocument)(floatingFocusElement);\n function clearPointerDownOutside() {\n pointerDownOutsideRef.current = false;\n }\n function onPointerDown(event) {\n const target = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.getTarget)(event);\n const insideElements = getResolvedInsideElements();\n const pointerTargetInside = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)(floating, target) || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)(domReference, target) || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)(portalContext === null || portalContext === void 0 ? void 0 : portalContext.portalNode, target) || insideElements.some({\n \"FloatingFocusManager.useEffect.onPointerDown\": (element)=>element === target || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)(element, target)\n }[\"FloatingFocusManager.useEffect.onPointerDown\"]);\n pointerDownOutsideRef.current = !pointerTargetInside;\n lastInteractionTypeRef.current = event.pointerType || 'keyboard';\n if (target === null || target === void 0 ? void 0 : target.closest(\"[\".concat(_internals_constants_js__WEBPACK_IMPORTED_MODULE_16__.CLICK_TRIGGER_IDENTIFIER, \"]\"))) {\n isPointerDownRef.current = true;\n }\n }\n function onKeyDown() {\n lastInteractionTypeRef.current = 'keyboard';\n }\n return (0,_base_ui_utils_mergeCleanups__WEBPACK_IMPORTED_MODULE_17__.mergeCleanups)((0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_15__.addEventListener)(doc, 'pointerdown', onPointerDown, true), (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_15__.addEventListener)(doc, 'pointerup', clearPointerDownOutside, true), (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_15__.addEventListener)(doc, 'pointercancel', clearPointerDownOutside, true), (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_15__.addEventListener)(doc, 'keydown', onKeyDown, true));\n }\n }[\"FloatingFocusManager.useEffect\"], [\n disabled,\n floating,\n domReference,\n floatingFocusElement,\n open,\n portalContext,\n getResolvedInsideElements\n ]);\n // Close on focus out and restore focus within the floating tree when needed.\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"FloatingFocusManager.useEffect\": ()=>{\n if (disabled || !closeOnFocusOut) {\n return undefined;\n }\n const doc = (0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_13__.ownerDocument)(floatingFocusElement);\n // In Safari, buttons lose focus when pressing them.\n function handlePointerDown() {\n isPointerDownRef.current = true;\n pointerDownTimeout.start(0, {\n \"FloatingFocusManager.useEffect.handlePointerDown\": ()=>{\n isPointerDownRef.current = false;\n }\n }[\"FloatingFocusManager.useEffect.handlePointerDown\"]);\n }\n function handleFocusIn(event) {\n const target = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.getTarget)(event);\n if ((0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_4__.isTabbable)(target)) {\n lastFocusedTabbableRef.current = target;\n }\n }\n function handleFocusOutside(event) {\n const relatedTarget = event.relatedTarget;\n const currentTarget = event.currentTarget;\n const target = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.getTarget)(event);\n queueMicrotask({\n \"FloatingFocusManager.useEffect.handleFocusOutside\": ()=>{\n const nodeId = getNodeId();\n const triggers = store.context.triggerElements;\n const insideElements = getResolvedInsideElements();\n const isRelatedFocusGuard = (relatedTarget === null || relatedTarget === void 0 ? void 0 : relatedTarget.hasAttribute((0,_utils_createAttribute_js__WEBPACK_IMPORTED_MODULE_18__.createAttribute)('focus-guard'))) && [\n beforeGuardRef.current,\n afterGuardRef.current,\n portalContext === null || portalContext === void 0 ? void 0 : portalContext.beforeInsideRef.current,\n portalContext === null || portalContext === void 0 ? void 0 : portalContext.afterInsideRef.current,\n portalContext === null || portalContext === void 0 ? void 0 : portalContext.beforeOutsideRef.current,\n portalContext === null || portalContext === void 0 ? void 0 : portalContext.afterOutsideRef.current,\n (0,_utils_resolveRef_js__WEBPACK_IMPORTED_MODULE_19__.resolveRef)(previousFocusableElement),\n (0,_utils_resolveRef_js__WEBPACK_IMPORTED_MODULE_19__.resolveRef)(nextFocusableElement)\n ].includes(relatedTarget);\n const movedToUnrelatedNode = !((0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)(domReference, relatedTarget) || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)(floating, relatedTarget) || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)(relatedTarget, floating) || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)(portalContext === null || portalContext === void 0 ? void 0 : portalContext.portalNode, relatedTarget) || insideElements.some({\n \"FloatingFocusManager.useEffect.handleFocusOutside\": (element)=>element === relatedTarget || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)(element, relatedTarget)\n }[\"FloatingFocusManager.useEffect.handleFocusOutside\"]) || relatedTarget != null && triggers.hasElement(relatedTarget) || triggers.hasMatchingElement({\n \"FloatingFocusManager.useEffect.handleFocusOutside\": (trigger)=>(0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)(trigger, relatedTarget)\n }[\"FloatingFocusManager.useEffect.handleFocusOutside\"]) || isRelatedFocusGuard || tree && ((0,_utils_nodes_js__WEBPACK_IMPORTED_MODULE_20__.getNodeChildren)(tree.nodesRef.current, nodeId).find({\n \"FloatingFocusManager.useEffect.handleFocusOutside\": (node)=>{\n var _node_context, _node_context1;\n return (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)((_node_context = node.context) === null || _node_context === void 0 ? void 0 : _node_context.elements.floating, relatedTarget) || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)((_node_context1 = node.context) === null || _node_context1 === void 0 ? void 0 : _node_context1.elements.domReference, relatedTarget);\n }\n }[\"FloatingFocusManager.useEffect.handleFocusOutside\"]) || (0,_utils_nodes_js__WEBPACK_IMPORTED_MODULE_20__.getNodeAncestors)(tree.nodesRef.current, nodeId).find({\n \"FloatingFocusManager.useEffect.handleFocusOutside\": (node)=>{\n var _node_context, _node_context1, _node_context2;\n return [\n (_node_context = node.context) === null || _node_context === void 0 ? void 0 : _node_context.elements.floating,\n (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_6__.getFloatingFocusElement)((_node_context1 = node.context) === null || _node_context1 === void 0 ? void 0 : _node_context1.elements.floating)\n ].includes(relatedTarget) || ((_node_context2 = node.context) === null || _node_context2 === void 0 ? void 0 : _node_context2.elements.domReference) === relatedTarget;\n }\n }[\"FloatingFocusManager.useEffect.handleFocusOutside\"])));\n if (currentTarget === domReference && floatingFocusElement) {\n handleTabIndex(floatingFocusElement, orderRef);\n }\n // Restore focus to the previous tabbable element index to prevent\n // focus from being lost outside the floating tree.\n if (restoreFocus && currentTarget !== domReference && !(0,_utils_composite_js__WEBPACK_IMPORTED_MODULE_21__.isElementVisible)(target) && (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.activeElement)(doc) === doc.body) {\n // Let `FloatingPortal` effect knows that focus is still inside the\n // floating tree.\n if ((0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(floatingFocusElement)) {\n floatingFocusElement.focus();\n // If explicitly requested to restore focus to the popup container, do not search\n // for the next/previous tabbable element.\n if (restoreFocus === 'popup') {\n // If the element is removed on pointerdown, focus tries to move it,\n // but since it's removed at the same time, focus gets lost as it\n // happens after the .focus() call above.\n // In this case, focus needs to be moved asynchronously.\n restoreFocusFrame.request({\n \"FloatingFocusManager.useEffect.handleFocusOutside\": ()=>{\n floatingFocusElement.focus();\n }\n }[\"FloatingFocusManager.useEffect.handleFocusOutside\"]);\n return;\n }\n }\n const tabbableContent = getTabbableContent();\n const prevTabbable = lastFocusedTabbableRef.current;\n const nodeToFocus = (prevTabbable && tabbableContent.includes(prevTabbable) ? prevTabbable : null) || tabbableContent[tabbableContent.length - 1] || floatingFocusElement;\n if ((0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(nodeToFocus)) {\n nodeToFocus.focus();\n }\n }\n // https://github.com/floating-ui/floating-ui/issues/3060\n if (dataRef.current.insideReactTree) {\n dataRef.current.insideReactTree = false;\n return;\n }\n // Focus did not move inside the floating tree, and there are no tabbable\n // portal guards to handle closing.\n if ((isUntrappedTypeableCombobox ? true : !modal) && relatedTarget && movedToUnrelatedNode && !isPointerDownRef.current && // Fix React 18 Strict Mode returnFocus due to double rendering.\n // For an \"untrapped\" typeable combobox (input role=combobox with\n // initialFocus=false), re-opening the popup and tabbing out should still close it even\n // when the previously focused element (e.g. the next tabbable outside the popup) is\n // focused again. Otherwise, the popup remains open on the second Tab sequence:\n // click input -> Tab (closes) -> click input -> Tab.\n // Allow closing when `isUntrappedTypeableCombobox` regardless of the previously focused element.\n (isUntrappedTypeableCombobox || relatedTarget !== getPreviouslyFocusedElement())) {\n preventReturnFocusRef.current = true;\n store.setOpen(false, (0,_internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_22__.createChangeEventDetails)(_internals_reasons_js__WEBPACK_IMPORTED_MODULE_23__.focusOut, event));\n }\n }\n }[\"FloatingFocusManager.useEffect.handleFocusOutside\"]);\n }\n function markInsideReactTree() {\n if (pointerDownOutsideRef.current) {\n return;\n }\n dataRef.current.insideReactTree = true;\n blurTimeout.start(0, {\n \"FloatingFocusManager.useEffect.markInsideReactTree\": ()=>{\n dataRef.current.insideReactTree = false;\n }\n }[\"FloatingFocusManager.useEffect.markInsideReactTree\"]);\n }\n const domReferenceElement = (0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(domReference) ? domReference : null;\n if (!floating && !domReferenceElement) {\n return undefined;\n }\n return (0,_base_ui_utils_mergeCleanups__WEBPACK_IMPORTED_MODULE_17__.mergeCleanups)(domReferenceElement && (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_15__.addEventListener)(domReferenceElement, 'focusout', handleFocusOutside), domReferenceElement && (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_15__.addEventListener)(domReferenceElement, 'pointerdown', handlePointerDown), floating && (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_15__.addEventListener)(floating, 'focusin', handleFocusIn), floating && (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_15__.addEventListener)(floating, 'focusout', handleFocusOutside), floating && portalContext && (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_15__.addEventListener)(floating, 'focusout', markInsideReactTree, true));\n }\n }[\"FloatingFocusManager.useEffect\"], [\n disabled,\n domReference,\n floating,\n floatingFocusElement,\n modal,\n tree,\n portalContext,\n store,\n closeOnFocusOut,\n restoreFocus,\n getTabbableContent,\n isUntrappedTypeableCombobox,\n getNodeId,\n orderRef,\n dataRef,\n blurTimeout,\n pointerDownTimeout,\n restoreFocusFrame,\n nextFocusableElement,\n previousFocusableElement,\n getResolvedInsideElements\n ]);\n // Hide everything outside the floating tree from assistive tech while open.\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"FloatingFocusManager.useEffect\": ()=>{\n var _portalContext_portalNode, _ancestors_find_context, _ancestors_find;\n if (disabled || !floating || !open) {\n return undefined;\n }\n // Don't hide portals nested within the parent portal.\n const portalNodes = Array.from((portalContext === null || portalContext === void 0 ? void 0 : (_portalContext_portalNode = portalContext.portalNode) === null || _portalContext_portalNode === void 0 ? void 0 : _portalContext_portalNode.querySelectorAll(\"[\".concat((0,_utils_createAttribute_js__WEBPACK_IMPORTED_MODULE_18__.createAttribute)('portal'), \"]\"))) || []);\n const ancestors = tree ? (0,_utils_nodes_js__WEBPACK_IMPORTED_MODULE_20__.getNodeAncestors)(tree.nodesRef.current, getNodeId()) : [];\n const rootAncestorComboboxDomReference = (_ancestors_find = ancestors.find({\n \"FloatingFocusManager.useEffect\": (node)=>{\n var _node_context;\n return (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_6__.isTypeableCombobox)(((_node_context = node.context) === null || _node_context === void 0 ? void 0 : _node_context.elements.domReference) || null);\n }\n }[\"FloatingFocusManager.useEffect\"])) === null || _ancestors_find === void 0 ? void 0 : (_ancestors_find_context = _ancestors_find.context) === null || _ancestors_find_context === void 0 ? void 0 : _ancestors_find_context.elements.domReference;\n const controlInsideElements = [\n floating,\n ...portalNodes,\n beforeGuardRef.current,\n afterGuardRef.current,\n portalContext === null || portalContext === void 0 ? void 0 : portalContext.beforeOutsideRef.current,\n portalContext === null || portalContext === void 0 ? void 0 : portalContext.afterOutsideRef.current,\n ...getResolvedInsideElements()\n ];\n const insideElements = [\n ...controlInsideElements,\n rootAncestorComboboxDomReference,\n (0,_utils_resolveRef_js__WEBPACK_IMPORTED_MODULE_19__.resolveRef)(previousFocusableElement),\n (0,_utils_resolveRef_js__WEBPACK_IMPORTED_MODULE_19__.resolveRef)(nextFocusableElement),\n isUntrappedTypeableCombobox ? domReference : null\n ].filter({\n \"FloatingFocusManager.useEffect.insideElements\": (x)=>x != null\n }[\"FloatingFocusManager.useEffect.insideElements\"]);\n const ariaHiddenCleanup = (0,_utils_markOthers_js__WEBPACK_IMPORTED_MODULE_24__.markOthers)(insideElements, {\n ariaHidden: modal || isUntrappedTypeableCombobox,\n mark: false\n });\n const markerInsideElements = [\n floating,\n ...portalNodes\n ].filter({\n \"FloatingFocusManager.useEffect.markerInsideElements\": (x)=>x != null\n }[\"FloatingFocusManager.useEffect.markerInsideElements\"]);\n const markerCleanup = (0,_utils_markOthers_js__WEBPACK_IMPORTED_MODULE_24__.markOthers)(markerInsideElements);\n return ({\n \"FloatingFocusManager.useEffect\": ()=>{\n markerCleanup();\n ariaHiddenCleanup();\n }\n })[\"FloatingFocusManager.useEffect\"];\n }\n }[\"FloatingFocusManager.useEffect\"], [\n open,\n disabled,\n domReference,\n floating,\n modal,\n orderRef,\n portalContext,\n isUntrappedTypeableCombobox,\n tree,\n getNodeId,\n nextFocusableElement,\n previousFocusableElement,\n getResolvedInsideElements\n ]);\n // Focus the initial element when the floating element opens.\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_25__.useIsoLayoutEffect)({\n \"FloatingFocusManager.useIsoLayoutEffect\": ()=>{\n if (!open || disabled || !(0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(floatingFocusElement)) {\n return;\n }\n const doc = (0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_13__.ownerDocument)(floatingFocusElement);\n const previouslyFocusedElement = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.activeElement)(doc);\n // Wait for any layout effect state setters to execute to set `tabIndex`.\n queueMicrotask({\n \"FloatingFocusManager.useIsoLayoutEffect\": ()=>{\n const initialFocusValueOrFn = initialFocusRef.current;\n const resolvedInitialFocus = typeof initialFocusValueOrFn === 'function' ? initialFocusValueOrFn(openInteractionTypeRef.current || '') : initialFocusValueOrFn;\n // `null` should fallback to default behavior in case of an empty ref.\n if (resolvedInitialFocus === undefined || resolvedInitialFocus === false) {\n return;\n }\n const focusAlreadyInsideFloatingEl = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)(floatingFocusElement, previouslyFocusedElement);\n if (focusAlreadyInsideFloatingEl) {\n return;\n }\n let focusableElements = null;\n const getDefaultFocusElement = {\n \"FloatingFocusManager.useIsoLayoutEffect.getDefaultFocusElement\": ()=>{\n if (focusableElements == null) {\n focusableElements = getTabbableContent(floatingFocusElement);\n }\n return focusableElements[0] || floatingFocusElement;\n }\n }[\"FloatingFocusManager.useIsoLayoutEffect.getDefaultFocusElement\"];\n let elToFocus;\n if (resolvedInitialFocus === true || resolvedInitialFocus === null) {\n elToFocus = getDefaultFocusElement();\n } else {\n elToFocus = (0,_utils_resolveRef_js__WEBPACK_IMPORTED_MODULE_19__.resolveRef)(resolvedInitialFocus);\n }\n elToFocus = elToFocus || getDefaultFocusElement();\n (0,_utils_enqueueFocus_js__WEBPACK_IMPORTED_MODULE_26__.enqueueFocus)(elToFocus, {\n preventScroll: elToFocus === floatingFocusElement\n });\n }\n }[\"FloatingFocusManager.useIsoLayoutEffect\"]);\n }\n }[\"FloatingFocusManager.useIsoLayoutEffect\"], [\n disabled,\n open,\n floatingFocusElement,\n ignoreInitialFocus,\n getTabbableContent,\n initialFocusRef,\n openInteractionTypeRef\n ]);\n // Track return focus targets and restore focus on unmount/close.\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_25__.useIsoLayoutEffect)({\n \"FloatingFocusManager.useIsoLayoutEffect\": ()=>{\n if (disabled || !floatingFocusElement) {\n return undefined;\n }\n const doc = (0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_13__.ownerDocument)(floatingFocusElement);\n const previouslyFocusedElement = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.activeElement)(doc);\n addPreviouslyFocusedElement(previouslyFocusedElement);\n // Dismissing via outside press should always ignore `returnFocus` to\n // prevent unwanted scrolling.\n function onOpenChangeLocal(details) {\n if (!details.open) {\n closeTypeRef.current = getEventType(details.nativeEvent, lastInteractionTypeRef.current);\n }\n if (details.reason === _internals_reasons_js__WEBPACK_IMPORTED_MODULE_23__.triggerHover && details.nativeEvent.type === 'mouseleave') {\n preventReturnFocusRef.current = true;\n }\n if (details.reason !== _internals_reasons_js__WEBPACK_IMPORTED_MODULE_23__.outsidePress) {\n return;\n }\n if (details.nested) {\n preventReturnFocusRef.current = false;\n } else if ((0,_utils_event_js__WEBPACK_IMPORTED_MODULE_14__.isVirtualClick)(details.nativeEvent) || (0,_utils_event_js__WEBPACK_IMPORTED_MODULE_14__.isVirtualPointerEvent)(details.nativeEvent)) {\n preventReturnFocusRef.current = false;\n } else {\n let isPreventScrollSupported = false;\n (0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_13__.ownerDocument)(floatingFocusElement).createElement('div').focus({\n get preventScroll () {\n isPreventScrollSupported = true;\n return false;\n }\n });\n if (isPreventScrollSupported) {\n preventReturnFocusRef.current = false;\n } else {\n preventReturnFocusRef.current = true;\n }\n }\n }\n events.on('openchange', onOpenChangeLocal);\n function getReturnElement() {\n const returnFocusValueOrFn = returnFocusRef.current;\n let resolvedReturnFocusValue = typeof returnFocusValueOrFn === 'function' ? returnFocusValueOrFn(closeTypeRef.current) : returnFocusValueOrFn;\n // `null` should fallback to default behavior in case of an empty ref.\n if (resolvedReturnFocusValue === undefined || resolvedReturnFocusValue === false) {\n return null;\n }\n if (resolvedReturnFocusValue === null) {\n resolvedReturnFocusValue = true;\n }\n if (typeof resolvedReturnFocusValue === 'boolean') {\n const el = domReference || getPreviouslyFocusedElement();\n return el && el.isConnected ? el : null;\n }\n const fallback = domReference || getPreviouslyFocusedElement();\n return (0,_utils_resolveRef_js__WEBPACK_IMPORTED_MODULE_19__.resolveRef)(resolvedReturnFocusValue) || fallback || null;\n }\n return ({\n \"FloatingFocusManager.useIsoLayoutEffect\": ()=>{\n events.off('openchange', onOpenChangeLocal);\n const activeEl = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.activeElement)(doc);\n const insideElements = getResolvedInsideElements();\n const isFocusInsideFloatingTree = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)(floating, activeEl) || insideElements.some({\n \"FloatingFocusManager.useIsoLayoutEffect\": (element)=>element === activeEl || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)(element, activeEl)\n }[\"FloatingFocusManager.useIsoLayoutEffect\"]) || tree && (0,_utils_nodes_js__WEBPACK_IMPORTED_MODULE_20__.getNodeChildren)(tree.nodesRef.current, getNodeId(), false).some({\n \"FloatingFocusManager.useIsoLayoutEffect\": (node)=>{\n var _node_context;\n return (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)((_node_context = node.context) === null || _node_context === void 0 ? void 0 : _node_context.elements.floating, activeEl);\n }\n }[\"FloatingFocusManager.useIsoLayoutEffect\"]);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const returnFocusValueOrFn = returnFocusRef.current;\n const returnElement = getReturnElement();\n queueMicrotask({\n \"FloatingFocusManager.useIsoLayoutEffect\": ()=>{\n // This is `returnElement`, if it's tabbable, or its first tabbable child.\n const tabbableReturnElement = getFirstTabbableElement(returnElement);\n const hasExplicitReturnFocus = typeof returnFocusValueOrFn !== 'boolean';\n if (returnFocusValueOrFn && !preventReturnFocusRef.current && (0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(tabbableReturnElement) && // If the focus moved somewhere else after mount, avoid returning focus\n // since it likely entered a different element which should be\n // respected: https://github.com/floating-ui/floating-ui/issues/2607\n (!hasExplicitReturnFocus && tabbableReturnElement !== activeEl && activeEl !== doc.body ? isFocusInsideFloatingTree : true)) {\n tabbableReturnElement.focus({\n preventScroll: true\n });\n }\n preventReturnFocusRef.current = false;\n }\n }[\"FloatingFocusManager.useIsoLayoutEffect\"]);\n }\n })[\"FloatingFocusManager.useIsoLayoutEffect\"];\n }\n }[\"FloatingFocusManager.useIsoLayoutEffect\"], [\n disabled,\n floating,\n floatingFocusElement,\n returnFocusRef,\n dataRef,\n events,\n tree,\n domReference,\n getNodeId,\n getResolvedInsideElements\n ]);\n // Safari may randomly scroll to the bottom of the page if an input inside a popup has focus\n // when the popup unmounts from the DOM.\n // By blurring it before the popup unmounts, we can prevent this behavior.\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_25__.useIsoLayoutEffect)({\n \"FloatingFocusManager.useIsoLayoutEffect\": ()=>{\n if (!_base_ui_utils_detectBrowser__WEBPACK_IMPORTED_MODULE_27__.isWebKit || open || !floating) {\n return;\n }\n const activeEl = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.activeElement)((0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_13__.ownerDocument)(floating));\n if (!(0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(activeEl) || !(0,_utils_element_js__WEBPACK_IMPORTED_MODULE_6__.isTypeableElement)(activeEl)) {\n return;\n }\n if ((0,_utils_element_js__WEBPACK_IMPORTED_MODULE_3__.contains)(floating, activeEl)) {\n activeEl.blur();\n }\n }\n }[\"FloatingFocusManager.useIsoLayoutEffect\"], [\n open,\n floating\n ]);\n // Synchronize the `context` & `modal` value to the FloatingPortal context.\n // It will decide whether or not it needs to render its own guards.\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_25__.useIsoLayoutEffect)({\n \"FloatingFocusManager.useIsoLayoutEffect\": ()=>{\n if (disabled || !portalContext) {\n return undefined;\n }\n portalContext.setFocusManagerState({\n modal,\n closeOnFocusOut,\n open,\n onOpenChange: store.setOpen,\n domReference\n });\n return ({\n \"FloatingFocusManager.useIsoLayoutEffect\": ()=>{\n portalContext.setFocusManagerState(null);\n }\n })[\"FloatingFocusManager.useIsoLayoutEffect\"];\n }\n }[\"FloatingFocusManager.useIsoLayoutEffect\"], [\n disabled,\n portalContext,\n modal,\n open,\n store,\n closeOnFocusOut,\n domReference\n ]);\n // Keep the floating element tabIndex in sync and clear stale focus records.\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_25__.useIsoLayoutEffect)({\n \"FloatingFocusManager.useIsoLayoutEffect\": ()=>{\n if (disabled || !floatingFocusElement) {\n return undefined;\n }\n handleTabIndex(floatingFocusElement, orderRef);\n return ({\n \"FloatingFocusManager.useIsoLayoutEffect\": ()=>{\n queueMicrotask(clearDisconnectedPreviouslyFocusedElements);\n }\n })[\"FloatingFocusManager.useIsoLayoutEffect\"];\n }\n }[\"FloatingFocusManager.useIsoLayoutEffect\"], [\n disabled,\n floatingFocusElement,\n orderRef\n ]);\n const shouldRenderGuards = !disabled && (modal ? !isUntrappedTypeableCombobox : true) && (isInsidePortal || modal);\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n shouldRenderGuards && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_utils_FocusGuard_js__WEBPACK_IMPORTED_MODULE_28__.FocusGuard, {\n \"data-type\": \"inside\",\n ref: mergedBeforeGuardRef,\n onFocus: (event)=>{\n if (modal) {\n const els = getTabbableContent();\n (0,_utils_enqueueFocus_js__WEBPACK_IMPORTED_MODULE_26__.enqueueFocus)(els[els.length - 1]);\n } else if (portalContext === null || portalContext === void 0 ? void 0 : portalContext.portalNode) {\n preventReturnFocusRef.current = false;\n if ((0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_4__.isOutsideEvent)(event, portalContext.portalNode)) {\n const nextTabbable = (0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_4__.getNextTabbable)(domReference);\n nextTabbable === null || nextTabbable === void 0 ? void 0 : nextTabbable.focus();\n } else {\n var _resolveRef;\n (_resolveRef = (0,_utils_resolveRef_js__WEBPACK_IMPORTED_MODULE_19__.resolveRef)(previousFocusableElement !== null && previousFocusableElement !== void 0 ? previousFocusableElement : portalContext.beforeOutsideRef)) === null || _resolveRef === void 0 ? void 0 : _resolveRef.focus();\n }\n }\n }\n }),\n children,\n shouldRenderGuards && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_utils_FocusGuard_js__WEBPACK_IMPORTED_MODULE_28__.FocusGuard, {\n \"data-type\": \"inside\",\n ref: mergedAfterGuardRef,\n onFocus: (event)=>{\n if (modal) {\n (0,_utils_enqueueFocus_js__WEBPACK_IMPORTED_MODULE_26__.enqueueFocus)(getTabbableContent()[0]);\n } else if (portalContext === null || portalContext === void 0 ? void 0 : portalContext.portalNode) {\n if (closeOnFocusOut) {\n preventReturnFocusRef.current = true;\n }\n if ((0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_4__.isOutsideEvent)(event, portalContext.portalNode)) {\n const prevTabbable = (0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_4__.getPreviousTabbable)(domReference);\n prevTabbable === null || prevTabbable === void 0 ? void 0 : prevTabbable.focus();\n } else {\n var _resolveRef;\n (_resolveRef = (0,_utils_resolveRef_js__WEBPACK_IMPORTED_MODULE_19__.resolveRef)(nextFocusableElement !== null && nextFocusableElement !== void 0 ? nextFocusableElement : portalContext.afterOutsideRef)) === null || _resolveRef === void 0 ? void 0 : _resolveRef.focus();\n }\n }\n }\n })\n ]\n });\n}\n_s(FloatingFocusManager, \"Bp5bRw05/VVzGpTuj4mFhdyJcP0=\", false, function() {\n return [\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_5__.useStableCallback,\n _base_ui_utils_useValueAsRef__WEBPACK_IMPORTED_MODULE_7__.useValueAsRef,\n _base_ui_utils_useValueAsRef__WEBPACK_IMPORTED_MODULE_7__.useValueAsRef,\n _base_ui_utils_useValueAsRef__WEBPACK_IMPORTED_MODULE_7__.useValueAsRef,\n _FloatingTree_js__WEBPACK_IMPORTED_MODULE_8__.useFloatingTree,\n _FloatingPortal_js__WEBPACK_IMPORTED_MODULE_9__.usePortalContext,\n _base_ui_utils_useMergedRefs__WEBPACK_IMPORTED_MODULE_10__.useMergedRefs,\n _base_ui_utils_useMergedRefs__WEBPACK_IMPORTED_MODULE_10__.useMergedRefs,\n _base_ui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_11__.useTimeout,\n _base_ui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_11__.useTimeout,\n _base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_12__.useAnimationFrame,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_5__.useStableCallback,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_5__.useStableCallback,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_25__.useIsoLayoutEffect,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_25__.useIsoLayoutEffect,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_25__.useIsoLayoutEffect,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_25__.useIsoLayoutEffect,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_25__.useIsoLayoutEffect\n ];\n});\n_c = FloatingFocusManager;\nvar _c;\n$RefreshReg$(_c, \"FloatingFocusManager\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvY29tcG9uZW50cy9GbG9hdGluZ0ZvY3VzTWFuYWdlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRStCO0FBQ3FDO0FBQ0Q7QUFDTjtBQUNBO0FBQ0E7QUFDUTtBQUNFO0FBQ2hCO0FBQ0M7QUFDYTtBQUNIO0FBQ1g7QUFDa0Y7QUFDcEQ7QUFDd0M7QUFDdkQ7QUFDYjtBQUM4QjtBQUNsQztBQUNTO0FBQ047QUFDSjtBQUNHO0FBQ0g7QUFDb0I7QUFDakI7QUFDUTtBQUMvRCxTQUFTOEMsYUFBYUMsS0FBSyxFQUFFQyxtQkFBbUI7SUFDOUMsTUFBTUMsTUFBTXBDLCtEQUFXQSxDQUFDSSw0REFBU0EsQ0FBQzhCO0lBQ2xDLElBQUlBLGlCQUFpQkUsSUFBSUMsYUFBYSxFQUFFO1FBQ3RDLE9BQU87SUFDVDtJQUNBLElBQUlILGlCQUFpQkUsSUFBSUUsVUFBVSxFQUFFO1FBQ25DLG1HQUFtRztRQUNuRywwRUFBMEU7UUFDMUUsT0FBT0gsdUJBQXVCO0lBQ2hDO0lBQ0EsSUFBSSxpQkFBaUJELE9BQU87UUFDMUIsT0FBT0EsTUFBTUssV0FBVyxJQUFJO0lBQzlCO0lBQ0EsSUFBSSxhQUFhTCxPQUFPO1FBQ3RCLE9BQU87SUFDVDtJQUNBLElBQUlBLGlCQUFpQkUsSUFBSUksVUFBVSxFQUFFO1FBQ25DLCtFQUErRTtRQUMvRSxPQUFPTCx1QkFBd0JELENBQUFBLE1BQU1PLE1BQU0sS0FBSyxJQUFJLGFBQWEsT0FBTTtJQUN6RTtJQUNBLE9BQU87QUFDVDtBQUNBLE1BQU1DLGFBQWE7QUFDbkIsSUFBSUMsNEJBQTRCLEVBQUU7QUFDbEMsU0FBU0M7SUFDUEQsNEJBQTRCQSwwQkFBMEJFLE1BQU0sQ0FBQ0MsQ0FBQUE7WUFDcERBO1FBQVAsUUFBT0EsZUFBQUEsTUFBTUMsS0FBSyxnQkFBWEQs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RCxrRUFBY0EsQ0FBQ3FCLE9BQU91RSxjQUFjNkIsVUFBVSxHQUFHOzRCQUNuRCxNQUFNMEIsZUFBZWhKLHVFQUFtQkEsQ0FBQzJFOzRCQUN6Q3FFLHlCQUFBQSxtQ0FBQUEsYUFBY0YsS0FBSzt3QkFDckIsT0FBTztnQ0FDTGxJOzZCQUFBQSxjQUFBQSxpRUFBVUEsQ0FBQ3NELGlDQUFBQSxrQ0FBQUEsdUJBQXdCdUIsY0FBYzJDLGVBQWUsZUFBaEV4SCxrQ0FBQUEsWUFBbUVrSSxLQUFLO3dCQUMxRTtvQkFDRjtnQkFDRjtZQUNGO1NBQUc7SUFDTDtBQUNGO0dBbGJnQnZGOztRQXlCSTdFLCtFQUFpQkE7UUFTWEQsdUVBQWFBO1FBQ2RBLHVFQUFhQTtRQUNMQSx1RUFBYUE7UUFDL0JpQyw2REFBZUE7UUFDTkQsZ0VBQWdCQTtRQVNUakMsd0VBQWFBO1FBQ2RBLHdFQUFhQTtRQUNyQkksa0VBQVVBO1FBQ0hBLGtFQUFVQTtRQUNYRSxnRkFBaUJBO1FBR2hCSiwrRUFBaUJBO1FBR1ZBLCtFQUFpQkE7UUF5S25EQyxrRkFBa0JBO1FBeUNsQkEsa0ZBQWtCQTtRQXdGbEJBLGtGQUFrQkE7UUFjbEJBLGtGQUFrQkE7UUFpQmxCQSxrRkFBa0JBOzs7S0FsWUo0RSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvY29tcG9uZW50cy9GbG9hdGluZ0ZvY3VzTWFuYWdlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGdldE5vZGVOYW1lLCBpc0hUTUxFbGVtZW50IH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5pbXBvcnQgeyBhZGRFdmVudExpc3RlbmVyIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvYWRkRXZlbnRMaXN0ZW5lcic7XG5pbXBvcnQgeyBtZXJnZUNsZWFudXBzIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvbWVyZ2VDbGVhbnVwcyc7XG5pbXBvcnQgeyB1c2VNZXJnZWRSZWZzIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlTWVyZ2VkUmVmcyc7XG5pbXBvcnQgeyB1c2VWYWx1ZUFzUmVmIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlVmFsdWVBc1JlZic7XG5pbXBvcnQgeyB1c2VTdGFibGVDYWxsYmFjayB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZVN0YWJsZUNhbGxiYWNrJztcbmltcG9ydCB7IHVzZUlzb0xheW91dEVmZmVjdCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZUlzb0xheW91dEVmZmVjdCc7XG5pbXBvcnQgeyB1c2VUaW1lb3V0IH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlVGltZW91dCc7XG5pbXBvcnQgeyBpc1dlYktpdCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL2RldGVjdEJyb3dzZXInO1xuaW1wb3J0IHsgdXNlQW5pbWF0aW9uRnJhbWUgfSBmcm9tICdAYmFzZS11aS91dGlscy91c2VBbmltYXRpb25GcmFtZSc7XG5pbXBvcnQgeyBvd25lckRvY3VtZW50LCBvd25lcldpbmRvdyB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL293bmVyJztcbmltcG9ydCB7IEZvY3VzR3VhcmQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvRm9jdXNHdWFyZC5qc1wiO1xuaW1wb3J0IHsgYWN0aXZlRWxlbWVudCwgY29udGFpbnMsIGdldFRhcmdldCwgaXNUeXBlYWJsZUNvbWJvYm94LCBnZXRGbG9hdGluZ0ZvY3VzRWxlbWVudCwgaXNUeXBlYWJsZUVsZW1lbnQgfSBmcm9tIFwiLi4vdXRpbHMvZWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgaXNWaXJ0dWFsQ2xpY2ssIGlzVmlydHVhbFBvaW50ZXJFdmVudCwgc3RvcEV2ZW50IH0gZnJvbSBcIi4uL3V0aWxzL2V2ZW50LmpzXCI7XG5pbXBvcnQgeyB0YWJiYWJsZSwgZm9jdXNhYmxlLCBpc091dHNpZGVFdmVudCwgaXNUYWJiYWJsZSwgZ2V0TmV4dFRhYmJhYmxlLCBnZXRQcmV2aW91c1RhYmJhYmxlIH0gZnJvbSBcIi4uL3V0aWxzL3RhYmJhYmxlLmpzXCI7XG5pbXBvcnQgeyBnZXROb2RlQW5jZXN0b3JzLCBnZXROb2RlQ2hpbGRyZW4gfSBmcm9tIFwiLi4vdXRpbHMvbm9kZXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudFZpc2libGUgfSBmcm9tIFwiLi4vdXRpbHMvY29tcG9zaXRlLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVDaGFuZ2VFdmVudERldGFpbHMgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL2NyZWF0ZUJhc2VVSUV2ZW50RGV0YWlscy5qc1wiO1xuaW1wb3J0IHsgUkVBU09OUyB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvcmVhc29ucy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlQXR0cmlidXRlIH0gZnJvbSBcIi4uL3V0aWxzL2NyZWF0ZUF0dHJpYnV0ZS5qc1wiO1xuaW1wb3J0IHsgZW5xdWV1ZUZvY3VzIH0gZnJvbSBcIi4uL3V0aWxzL2VucXVldWVGb2N1cy5qc1wiO1xuaW1wb3J0IHsgbWFya090aGVycyB9IGZyb20gXCIuLi91dGlscy9tYXJrT3RoZXJzLmpzXCI7XG5pbXBvcnQgeyB1c2VQb3J0YWxDb250ZXh0IH0gZnJvbSBcIi4vRmxvYXRpbmdQb3J0YWwuanNcIjtcbmltcG9ydCB7IHVzZUZsb2F0aW5nVHJlZSB9IGZyb20gXCIuL0Zsb2F0aW5nVHJlZS5qc1wiO1xuaW1wb3J0IHsgQ0xJQ0tfVFJJR0dFUl9JREVOVElGSUVSIH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy9jb25zdGFudHMuanNcIjtcbmltcG9ydCB7IHJlc29sdmVSZWYgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcmVzb2x2ZVJlZi5qc1wiO1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIGdldEV2ZW50VHlwZShldmVudCwgbGFzdEludGVyYWN0aW9uVHlwZSkge1xuICBjb25zdCB3aW4gPSBvd25lcldpbmRvdyhnZXRUYXJnZXQoZXZlbnQpKTtcbiAgaWYgKGV2ZW50IGluc3RhbmNlb2Ygd2luLktleWJvYXJkRXZlbnQpIHtcbiAgICByZXR1cm4gJ2tleWJvYXJkJztcbiAgfVxuICBpZiAoZXZlbnQgaW5zdGFuY2VvZiB3aW4uRm9jdXNFdmVudCkge1xuICAgIC8vIEZvY3VzIGV2ZW50cyBjYW4gYmUgY2F1c2VkIGJ5IGEgcHJlY2VkaW5nIHBvaW50ZXIgaW50ZXJhY3Rpb24gKGUuZy4sIGZvY3Vzb3V0IG9uIG91dHNpZGUgcHJlc3MpLlxuICAgIC8vIFByZWZlciB0aGUgbGFzdCBrbm93biBwb2ludGVyIHR5cGUgaWYgcHJvdmlkZWQsIGVsc2UgdHJlYXQgYXMga2V5Ym9hcmQuXG4gICAgcmV0dXJuIGxhc3RJbnRlcmFjdGlvblR5cGUgfHwgJ2tleWJvYXJkJztcbiAgfVxuICBpZiAoJ3BvaW50ZXJUeXBlJyBpbiBldmVudCkge1xuICAgIHJldHVybiBldmVudC5wb2ludGVyVHlwZSB8fCAna2V5Ym9hcmQnO1xuICB9XG4gIGlmICgndG91Y2hlcycgaW4gZXZlbnQpIHtcbiAgICByZXR1cm4gJ3RvdWNoJztcbiAgfVxuICBpZiAoZXZlbnQgaW5zdGFuY2VvZiB3aW4uTW91c2VFdmVudCkge1xuICAgIC8vIG9uQ2xpY2sgZXZlbnRzIG1heSBub3QgY29udGFpbiBwb2ludGVyIGV2ZW50cywgYW5kIHdpbGwgZmFsbCB0aHJvdWdoIHRvIGhlcmVcbiAgICByZXR1cm4gbGFzdEludGVyYWN0aW9uVHlwZSB8fCAoZXZlbnQuZGV0YWlsID09PSAwID8gJ2tleWJvYXJkJyA6ICdtb3VzZScpO1xuICB9XG4gIHJldHVybiAnJztcbn1cbmNvbnN0IExJU1RfTElNSVQgPSAyMDtcbmxldCBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnRzID0gW107XG5mdW5jdGlvbiBjbGVhckRpc2Nvbm5lY3RlZFByZXZpb3VzbHlGb2N1c2VkRWxlbWVudHMoKSB7XG4gIHByZXZpb3VzbHlGb2N1c2VkRWxlbWVudHMgPSBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnRzLmZpbHRlcihlbnRyeSA9PiB7XG4gICAgcmV0dXJuIGVudHJ5LmRlcmVmKCk/LmlzQ29ubmVjdGVkO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGFkZFByZXZpb3VzbHlGb2N1c2VkRWxlbWVudChlbGVtZW50KSB7XG4gIGNsZWFyRGlzY29ubmVjdGVkUHJldmlvdXNseUZvY3VzZWRFbGVtZW50cygpO1xuICBpZiAoZWxlbWVudCAmJiBnZXROb2RlTmFtZShlbGVtZW50KSAhPT0gJ2JvZHknKSB7XG4gICAgcHJldmlvdXNseUZvY3VzZWRFbGVtZW50cy5wdXNoKG5ldyBXZWFrUmVmKGVsZW1lbnQpKTtcbiAgICBpZiAocHJldmlvdXNseUZvY3VzZWRFbGVtZW50cy5sZW5ndGggPiBMSVNUX0xJTUlUKSB7XG4gICAgICBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnRzID0gcHJldmlvdXNseUZvY3VzZWRFbGVtZW50cy5zbGljZSgtTElTVF9MSU1JVCk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRQcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQoKSB7XG4gIGNsZWFyRGlzY29ubmVjdGVkUHJldmlvdXNseUZvY3VzZWRFbGVtZW50cygpO1xuICByZXR1cm4gcHJldmlvdXNseUZvY3VzZWRFbGVtZW50c1twcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnRzLmxlbmd0aCAtIDFdPy5kZXJlZigpO1xufVxuZnVuY3Rpb24gZ2V0Rmlyc3RUYWJiYWJsZUVsZW1lbnQoY29udGFpbmVyKSB7XG4gIGlmICghY29udGFpbmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGlzVGFiYmFibGUoY29udGFpbmVyKSkge1xuICAgIHJldHVybiBjb250YWluZXI7XG4gIH1cbiAgcmV0dXJuIHRhYmJhYmxlKGNvbnRhaW5lcilbMF0gfHwgY29udGFpbmVyO1xufVxuZnVuY3Rpb24gaGFuZGxlVGFiSW5kZXgoZmxvYXRpbmdGb2N1c0VsZW1lbnQsIG9yZGVyUmVmKSB7XG4gIGlmIChmbG9hdGluZ0ZvY3VzRWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgJiYgIWZsb2F0aW5nRm9jdXNFbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGF0YS10YWJpbmRleCcpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmICghb3JkZXJSZWYuY3VycmVudC5pbmNsdWRlcygnZmxvYXRpbmcnKSAmJiAhZmxvYXRpbmdGb2N1c0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJyk/LmluY2x1ZGVzKCdkaWFsb2cnKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBmb2N1c2FibGVFbGVtZW50cyA9IGZvY3VzYWJsZShmbG9hdGluZ0ZvY3VzRWxlbWVudCk7XG4gIGNvbnN0IHRhYmJhYmxlQ29udGVudCA9IGZvY3VzYWJsZUVsZW1lbnRzLmZpbHRlcihlbGVtZW50ID0+IHtcbiAgICBjb25zdCBkYXRhVGFiSW5kZXggPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS10YWJpbmRleCcpIHx8ICcnO1xuICAgIHJldHVybiBpc1RhYmJhYmxlKGVsZW1lbnQpIHx8IGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLXRhYmluZGV4JykgJiYgIWRhdGFUYWJJbmRleC5zdGFydHNXaXRoKCctJyk7XG4gIH0pO1xuICBjb25zdCB0YWJJbmRleCA9IGZsb2F0aW5nRm9jdXNFbGVtZW50LmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgaWYgKG9yZGVyUmVmLmN1cnJlbnQuaW5jbHVkZXMoJ2Zsb2F0aW5nJykgfHwgdGFiYmFibGVDb250ZW50Lmxlbmd0aCA9PT0gMCkge1xuICAgIGlmICh0YWJJbmRleCAhPT0gJzAnKSB7XG4gICAgICBmbG9hdGluZ0ZvY3VzRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAodGFiSW5kZXggIT09ICctMScgfHwgZmxvYXRpbmdGb2N1c0VsZW1lbnQuaGFzQXR0cmlidXRlKCdkYXRhLXRhYmluZGV4JykgJiYgZmxvYXRpbmdGb2N1c0VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXRhYmluZGV4JykgIT09ICctMScpIHtcbiAgICBmbG9hdGluZ0ZvY3VzRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgZmxvYXRpbmdGb2N1c0VsZW1lbnQuc2V0QXR0cmlidXRlKCdkYXRhLXRhYmluZGV4JywgJy0xJyk7XG4gIH1cbn1cbi8qKlxuICogUHJvdmlkZXMgZm9jdXMgbWFuYWdlbWVudCBmb3IgdGhlIGZsb2F0aW5nIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvRmxvYXRpbmdGb2N1c01hbmFnZXJcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gRmxvYXRpbmdGb2N1c01hbmFnZXIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNvbnRleHQsXG4gICAgY2hpbGRyZW4sXG4gICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICBpbml0aWFsRm9jdXMgPSB0cnVlLFxuICAgIHJldHVybkZvY3VzID0gdHJ1ZSxcbiAgICByZXN0b3JlRm9jdXMgPSBmYWxzZSxcbiAgICBtb2RhbCA9IHRydWUsXG4gICAgY2xvc2VPbkZvY3VzT3V0ID0gdHJ1ZSxcbiAgICBvcGVuSW50ZXJhY3Rpb25UeXBlID0gJycsXG4gICAgbmV4dEZvY3VzYWJsZUVsZW1lbnQsXG4gICAgcHJldmlvdXNGb2N1c2FibGVFbGVtZW50LFxuICAgIGJlZm9yZUNvbnRlbnRGb2N1c0d1YXJkUmVmLFxuICAgIGV4dGVybmFsVHJlZSxcbiAgICBnZXRJbnNpZGVFbGVtZW50c1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHN0b3JlID0gJ3Jvb3RTdG9yZScgaW4gY29udGV4dCA/IGNvbnRleHQucm9vdFN0b3JlIDogY29udGV4dDtcbiAgY29uc3Qgb3BlbiA9IHN0b3JlLnVzZVN0YXRlKCdvcGVuJyk7XG4gIGNvbnN0IGRvbVJlZmVyZW5jZSA9IHN0b3JlLnVzZVN0YXRlKCdkb21SZWZlcmVuY2VFbGVtZW50Jyk7XG4gIGNvbnN0IGZsb2F0aW5nID0gc3RvcmUudXNlU3RhdGUoJ2Zsb2F0aW5nRWxlbWVudCcpO1xuICBjb25zdCB7XG4gICAgZXZlbnRzLFxuICAgIGRhdGFSZWZcbiAgfSA9IHN0b3JlLmNvbnRleHQ7XG4gIGNvbnN0IGdldE5vZGVJZCA9IHVzZVN0YWJsZUNhbGxiYWNrKCgpID0+IGRhdGFSZWYuY3VycmVudC5mbG9hdGluZ0NvbnRleHQ/Lm5vZGVJZCk7XG4gIGNvbnN0IGlnbm9yZUluaXRpYWxGb2N1cyA9IGluaXRpYWxGb2N1cyA9PT0gZmFsc2U7XG4gIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgYSBjb21ib2JveCBhbmQgaXMgdHlwZWFibGUgKGUuZy4gaW5wdXQvdGV4dGFyZWEpLFxuICAvLyB0aGVyZSBhcmUgZGlmZmVyZW50IGZvY3VzIHNlbWFudGljcy4gVGhlIGd1YXJkcyBzaG91bGQgbm90IGJlIHJlbmRlcmVkLCBidXRcbiAgLy8gYXJpYS1oaWRkZW4gc2hvdWxkIGJlIGFwcGxpZWQgdG8gYWxsIG5vZGVzIHN0aWxsLiBGdXJ0aGVyLCB0aGUgdmlzdWFsbHlcbiAgLy8gaGlkZGVuIGRpc21pc3MgYnV0dG9uIHNob3VsZCBvbmx5IGFwcGVhciBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0LCBub3QgdGhlXG4gIC8vIHN0YXJ0LlxuICBjb25zdCBpc1VudHJhcHBlZFR5cGVhYmxlQ29tYm9ib3ggPSBpc1R5cGVhYmxlQ29tYm9ib3goZG9tUmVmZXJlbmNlKSAmJiBpZ25vcmVJbml0aWFsRm9jdXM7XG4gIGNvbnN0IG9yZGVyUmVmID0gUmVhY3QudXNlUmVmKFsnY29udGVudCddKTtcbiAgY29uc3QgaW5pdGlhbEZvY3VzUmVmID0gdXNlVmFsdWVBc1JlZihpbml0aWFsRm9jdXMpO1xuICBjb25zdCByZXR1cm5Gb2N1c1JlZiA9IHVzZVZhbHVlQXNSZWYocmV0dXJuRm9jdXMpO1xuICBjb25zdCBvcGVuSW50ZXJhY3Rpb25UeXBlUmVmID0gdXNlVmFsdWVBc1JlZihvcGVuSW50ZXJhY3Rpb25UeXBlKTtcbiAgY29uc3QgdHJlZSA9IHVzZUZsb2F0aW5nVHJlZShleHRlcm5hbFRyZWUpO1xuICBjb25zdCBwb3J0YWxDb250ZXh0ID0gdXNlUG9ydGFsQ29udGV4dCgpO1xuICBjb25zdCBwcmV2ZW50UmV0dXJuRm9jdXNSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBpc1BvaW50ZXJEb3duUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgcG9pbnRlckRvd25PdXRzaWRlUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgY29uc3QgbGFzdEZvY3VzZWRUYWJiYWJsZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgY2xvc2VUeXBlUmVmID0gUmVhY3QudXNlUmVmKCcnKTtcbiAgY29uc3QgbGFzdEludGVyYWN0aW9uVHlwZVJlZiA9IFJlYWN0LnVzZVJlZignJyk7XG4gIGNvbnN0IGJlZm9yZUd1YXJkUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBhZnRlckd1YXJkUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBtZXJnZWRCZWZvcmVHdWFyZFJlZiA9IHVzZU1lcmdlZFJlZnMoYmVmb3JlR3VhcmRSZWYsIGJlZm9yZUNvbnRlbnRGb2N1c0d1YXJkUmVmLCBwb3J0YWxDb250ZXh0Py5iZWZvcmVJbnNpZGVSZWYpO1xuICBjb25zdCBtZXJnZWRBZnRlckd1YXJkUmVmID0gdXNlTWVyZ2VkUmVmcyhhZnRlckd1YXJkUmVmLCBwb3J0YWxDb250ZXh0Py5hZnRlckluc2lkZVJlZik7XG4gIGNvbnN0IGJsdXJUaW1lb3V0ID0gdXNlVGltZW91dCgpO1xuICBjb25zdCBwb2ludGVyRG93blRpbWVvdXQgPSB1c2VUaW1lb3V0KCk7XG4gIGNvbnN0IHJlc3RvcmVGb2N1c0ZyYW1lID0gdXNlQW5pbWF0aW9uRnJhbWUoKTtcbiAgY29uc3QgaXNJbnNpZGVQb3J0YWwgPSBwb3J0YWxDb250ZXh0ICE9IG51bGw7XG4gIGNvbnN0IGZsb2F0aW5nRm9jdXNFbGVtZW50ID0gZ2V0RmxvYXRpbmdGb2N1c0VsZW1lbnQoZmxvYXRpbmcpO1xuICBjb25zdCBnZXRUYWJiYWJsZUNvbnRlbnQgPSB1c2VTdGFibGVDYWxsYmFjaygoY29udGFpbmVyID0gZmxvYXRpbmdGb2N1c0VsZW1lbnQpID0+IHtcbiAgICByZXR1cm4gY29udGFpbmVyID8gdGFiYmFibGUoY29udGFpbmVyKSA6IFtdO1xuICB9KTtcbiAgY29uc3QgZ2V0UmVzb2x2ZWRJbnNpZGVFbGVtZW50cyA9IHVzZVN0YWJsZUNhbGxiYWNrKCgpID0+IGdldEluc2lkZUVsZW1lbnRzPy4oKS5maWx0ZXIoZWxlbWVudCA9PiBlbGVtZW50ICE9IG51bGwpID8/IFtdKTtcblxuICAvLyBQcmV2ZW50IFRhYiBmcm9tIGVzY2FwaW5nIHRoZSBtb2RhbCB3aGVuIHRoZXJlIGFyZSBubyB0YWJiYWJsZSBlbGVtZW50cy5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQgfHwgIW1vZGFsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGlmIChldmVudC5rZXkgPT09ICdUYWInKSB7XG4gICAgICAgIC8vIFRoZSBmb2N1cyBndWFyZHMgaGF2ZSBub3RoaW5nIHRvIGZvY3VzLCBzbyB3ZSBuZWVkIHRvIHN0b3AgdGhlIGV2ZW50LlxuICAgICAgICBpZiAoY29udGFpbnMoZmxvYXRpbmdGb2N1c0VsZW1lbnQsIGFjdGl2ZUVsZW1lbnQob3duZXJEb2N1bWVudChmbG9hdGluZ0ZvY3VzRWxlbWVudCkpKSAmJiBnZXRUYWJiYWJsZUNvbnRlbnQoKS5sZW5ndGggPT09IDAgJiYgIWlzVW50cmFwcGVkVHlwZWFibGVDb21ib2JveCkge1xuICAgICAgICAgIHN0b3BFdmVudChldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChmbG9hdGluZ0ZvY3VzRWxlbWVudCk7XG4gICAgcmV0dXJuIGFkZEV2ZW50TGlzdGVuZXIoZG9jLCAna2V5ZG93bicsIG9uS2V5RG93bik7XG4gIH0sIFtkaXNhYmxlZCwgZG9tUmVmZXJlbmNlLCBmbG9hdGluZ0ZvY3VzRWxlbWVudCwgbW9kYWwsIG9yZGVyUmVmLCBpc1VudHJhcHBlZFR5cGVhYmxlQ29tYm9ib3gsIGdldFRhYmJhYmxlQ29udGVudF0pO1xuXG4gIC8vIFRyYWNrIHBvaW50ZXIva2V5Ym9hcmQgaW50ZXJhY3Rpb25zIHRvIGRpc2FtYmlndWF0ZSBmb2N1cyBhbmQgb3V0c2lkZSBwcmVzc2VzLlxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZCB8fCAhb3Blbikge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChmbG9hdGluZ0ZvY3VzRWxlbWVudCk7XG4gICAgZnVuY3Rpb24gY2xlYXJQb2ludGVyRG93bk91dHNpZGUoKSB7XG4gICAgICBwb2ludGVyRG93bk91dHNpZGVSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvblBvaW50ZXJEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBnZXRUYXJnZXQoZXZlbnQpO1xuICAgICAgY29uc3QgaW5zaWRlRWxlbWVudHMgPSBnZXRSZXNvbHZlZEluc2lkZUVsZW1lbnRzKCk7XG4gICAgICBjb25zdCBwb2ludGVyVGFyZ2V0SW5zaWRlID0gY29udGFpbnMoZmxvYXRpbmcsIHRhcmdldCkgfHwgY29udGFpbnMoZG9tUmVmZXJlbmNlLCB0YXJnZXQpIHx8IGNvbnRhaW5zKHBvcnRhbENvbnRleHQ/LnBvcnRhbE5vZGUsIHRhcmdldCkgfHwgaW5zaWRlRWxlbWVudHMuc29tZShlbGVtZW50ID0+IGVsZW1lbnQgPT09IHRhcmdldCB8fCBjb250YWlucyhlbGVtZW50LCB0YXJnZXQpKTtcbiAgICAgIHBvaW50ZXJEb3duT3V0c2lkZVJlZi5jdXJyZW50ID0gIXBvaW50ZXJUYXJnZXRJbnNpZGU7XG4gICAgICBsYXN0SW50ZXJhY3Rpb25UeXBlUmVmLmN1cnJlbnQgPSBldmVudC5wb2ludGVyVHlwZSB8fCAna2V5Ym9hcmQnO1xuICAgICAgaWYgKHRhcmdldD8uY2xvc2VzdChgWyR7Q0xJQ0tfVFJJR0dFUl9JREVOVElGSUVSfV1gKSkge1xuICAgICAgICBpc1BvaW50ZXJEb3duUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBvbktleURvd24oKSB7XG4gICAgICBsYXN0SW50ZXJhY3Rpb25UeXBlUmVmLmN1cnJlbnQgPSAna2V5Ym9hcmQnO1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VDbGVhbnVwcyhhZGRFdmVudExpc3RlbmVyKGRvYywgJ3BvaW50ZXJkb3duJywgb25Qb2ludGVyRG93biwgdHJ1ZSksIGFkZEV2ZW50TGlzdGVuZXIoZG9jLCAncG9pbnRlcnVwJywgY2xlYXJQb2ludGVyRG93bk91dHNpZGUsIHRydWUpLCBhZGRFdmVudExpc3RlbmVyKGRvYywgJ3BvaW50ZXJjYW5jZWwnLCBjbGVhclBvaW50ZXJEb3duT3V0c2lkZSwgdHJ1ZSksIGFkZEV2ZW50TGlzdGVuZXIoZG9jLCAna2V5ZG93bicsIG9uS2V5RG93biwgdHJ1ZSkpO1xuICB9LCBbZGlzYWJsZWQsIGZsb2F0aW5nLCBkb21SZWZlcmVuY2UsIGZsb2F0aW5nRm9jdXNFbGVtZW50LCBvcGVuLCBwb3J0YWxDb250ZXh0LCBnZXRSZXNvbHZlZEluc2lkZUVsZW1lbnRzXSk7XG5cbiAgLy8gQ2xvc2Ugb24gZm9jdXMgb3V0IGFuZCByZXN0b3JlIGZvY3VzIHdpdGhpbiB0aGUgZmxvYXRpbmcgdHJlZSB3aGVuIG5lZWRlZC5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQgfHwgIWNsb3NlT25Gb2N1c091dCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChmbG9hdGluZ0ZvY3VzRWxlbWVudCk7XG5cbiAgICAvLyBJbiBTYWZhcmksIGJ1dHRvbnMgbG9zZSBmb2N1cyB3aGVuIHByZXNzaW5nIHRoZW0uXG4gICAgZnVuY3Rpb24gaGFuZGxlUG9pbnRlckRvd24oKSB7XG4gICAgICBpc1BvaW50ZXJEb3duUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgcG9pbnRlckRvd25UaW1lb3V0LnN0YXJ0KDAsICgpID0+IHtcbiAgICAgICAgaXNQb2ludGVyRG93blJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlRm9jdXNJbihldmVudCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZ2V0VGFyZ2V0KGV2ZW50KTtcbiAgICAgIGlmIChpc1RhYmJhYmxlKHRhcmdldCkpIHtcbiAgICAgICAgbGFzdEZvY3VzZWRUYWJiYWJsZVJlZi5jdXJyZW50ID0gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVGb2N1c091dHNpZGUoZXZlbnQpIHtcbiAgICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgICAgY29uc3QgY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICBjb25zdCB0YXJnZXQgPSBnZXRUYXJnZXQoZXZlbnQpO1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICBjb25zdCBub2RlSWQgPSBnZXROb2RlSWQoKTtcbiAgICAgICAgY29uc3QgdHJpZ2dlcnMgPSBzdG9yZS5jb250ZXh0LnRyaWdnZXJFbGVtZW50cztcbiAgICAgICAgY29uc3QgaW5zaWRlRWxlbWVudHMgPSBnZXRSZXNvbHZlZEluc2lkZUVsZW1lbnRzKCk7XG4gICAgICAgIGNvbnN0IGlzUmVsYXRlZEZvY3VzR3VhcmQgPSByZWxhdGVkVGFyZ2V0Py5oYXNBdHRyaWJ1dGUoY3JlYXRlQXR0cmlidXRlKCdmb2N1cy1ndWFyZCcpKSAmJiBbYmVmb3JlR3VhcmRSZWYuY3VycmVudCwgYWZ0ZXJHdWFyZFJlZi5jdXJyZW50LCBwb3J0YWxDb250ZXh0Py5iZWZvcmVJbnNpZGVSZWYuY3VycmVudCwgcG9ydGFsQ29udGV4dD8uYWZ0ZXJJbnNpZGVSZWYuY3VycmVudCwgcG9ydGFsQ29udGV4dD8uYmVmb3JlT3V0c2lkZVJlZi5jdXJyZW50LCBwb3J0YWxDb250ZXh0Py5hZnRlck91dHNpZGVSZWYuY3VycmVudCwgcmVzb2x2ZVJlZihwcmV2aW91c0ZvY3VzYWJsZUVsZW1lbnQpLCByZXNvbHZlUmVmKG5leHRGb2N1c2FibGVFbGVtZW50KV0uaW5jbHVkZXMocmVsYXRlZFRhcmdldCk7XG4gICAgICAgIGNvbnN0IG1vdmVkVG9VbnJlbGF0ZWROb2RlID0gIShjb250YWlucyhkb21SZWZlcmVuY2UsIHJlbGF0ZWRUYXJnZXQpIHx8IGNvbnRhaW5zKGZsb2F0aW5nLCByZWxhdGVkVGFyZ2V0KSB8fCBjb250YWlucyhyZWxhdGVkVGFyZ2V0LCBmbG9hdGluZykgfHwgY29udGFpbnMocG9ydGFsQ29udGV4dD8ucG9ydGFsTm9kZSwgcmVsYXRlZFRhcmdldCkgfHwgaW5zaWRlRWxlbWVudHMuc29tZShlbGVtZW50ID0+IGVsZW1lbnQgPT09IHJlbGF0ZWRUYXJnZXQgfHwgY29udGFpbnMoZWxlbWVudCwgcmVsYXRlZFRhcmdldCkpIHx8IHJlbGF0ZWRUYXJnZXQgIT0gbnVsbCAmJiB0cmlnZ2Vycy5oYXNFbGVtZW50KHJlbGF0ZWRUYXJnZXQpIHx8IHRyaWdnZXJzLmhhc01hdGNoaW5nRWxlbWVudCh0cmlnZ2VyID0+IGNvbnRhaW5zKHRyaWdnZXIsIHJlbGF0ZWRUYXJnZXQpKSB8fCBpc1JlbGF0ZWRGb2N1c0d1YXJkIHx8IHRyZWUgJiYgKGdldE5vZGVDaGlsZHJlbih0cmVlLm5vZGVzUmVmLmN1cnJlbnQsIG5vZGVJZCkuZmluZChub2RlID0+IGNvbnRhaW5zKG5vZGUuY29udGV4dD8uZWxlbWVudHMuZmxvYXRpbmcsIHJlbGF0ZWRUYXJnZXQpIHx8IGNvbnRhaW5zKG5vZGUuY29udGV4dD8uZWxlbWVudHMuZG9tUmVmZXJlbmNlLCByZWxhdGVkVGFyZ2V0KSkgfHwgZ2V0Tm9kZUFuY2VzdG9ycyh0cmVlLm5vZGVzUmVmLmN1cnJlbnQsIG5vZGVJZCkuZmluZChub2RlID0+IFtub2RlLmNvbnRleHQ/LmVsZW1lbnRzLmZsb2F0aW5nLCBnZXRGbG9hdGluZ0ZvY3VzRWxlbWVudChub2RlLmNvbnRleHQ/LmVsZW1lbnRzLmZsb2F0aW5nKV0uaW5jbHVkZXMocmVsYXRlZFRhcmdldCkgfHwgbm9kZS5jb250ZXh0Py5lbGVtZW50cy5kb21SZWZlcmVuY2UgPT09IHJlbGF0ZWRUYXJnZXQpKSk7XG4gICAgICAgIGlmIChjdXJyZW50VGFyZ2V0ID09PSBkb21SZWZlcmVuY2UgJiYgZmxvYXRpbmdGb2N1c0VsZW1lbnQpIHtcbiAgICAgICAgICBoYW5kbGVUYWJJbmRleChmbG9hdGluZ0ZvY3VzRWxlbWVudCwgb3JkZXJSZWYpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzdG9yZSBmb2N1cyB0byB0aGUgcHJldmlvdXMgdGFiYmFibGUgZWxlbWVudCBpbmRleCB0byBwcmV2ZW50XG4gICAgICAgIC8vIGZvY3VzIGZyb20gYmVpbmcgbG9zdCBvdXRzaWRlIHRoZSBmbG9hdGluZyB0cmVlLlxuICAgICAgICBpZiAocmVzdG9yZUZvY3VzICYmIGN1cnJlbnRUYXJnZXQgIT09IGRvbVJlZmVyZW5jZSAmJiAhaXNFbGVtZW50VmlzaWJsZSh0YXJnZXQpICYmIGFjdGl2ZUVsZW1lbnQoZG9jKSA9PT0gZG9jLmJvZHkpIHtcbiAgICAgICAgICAvLyBMZXQgYEZsb2F0aW5nUG9ydGFsYCBlZmZlY3Qga25vd3MgdGhhdCBmb2N1cyBpcyBzdGlsbCBpbnNpZGUgdGhlXG4gICAgICAgICAgLy8gZmxvYXRpbmcgdHJlZS5cbiAgICAgICAgICBpZiAoaXNIVE1MRWxlbWVudChmbG9hdGluZ0ZvY3VzRWxlbWVudCkpIHtcbiAgICAgICAgICAgIGZsb2F0aW5nRm9jdXNFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAvLyBJZiBleHBsaWNpdGx5IHJlcXVlc3RlZCB0byByZXN0b3JlIGZvY3VzIHRvIHRoZSBwb3B1cCBjb250YWluZXIsIGRvIG5vdCBzZWFyY2hcbiAgICAgICAgICAgIC8vIGZvciB0aGUgbmV4dC9wcmV2aW91cyB0YWJiYWJsZSBlbGVtZW50LlxuICAgICAgICAgICAgaWYgKHJlc3RvcmVGb2N1cyA9PT0gJ3BvcHVwJykge1xuICAgICAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyByZW1vdmVkIG9uIHBvaW50ZXJkb3duLCBmb2N1cyB0cmllcyB0byBtb3ZlIGl0LFxuICAgICAgICAgICAgICAvLyBidXQgc2luY2UgaXQncyByZW1vdmVkIGF0IHRoZSBzYW1lIHRpbWUsIGZvY3VzIGdldHMgbG9zdCBhcyBpdFxuICAgICAgICAgICAgICAvLyBoYXBwZW5zIGFmdGVyIHRoZSAuZm9jdXMoKSBjYWxsIGFib3ZlLlxuICAgICAgICAgICAgICAvLyBJbiB0aGlzIGNhc2UsIGZvY3VzIG5lZWRzIHRvIGJlIG1vdmVkIGFzeW5jaHJvbm91c2x5LlxuICAgICAgICAgICAgICByZXN0b3JlRm9jdXNGcmFtZS5yZXF1ZXN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBmbG9hdGluZ0ZvY3VzRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCB0YWJiYWJsZUNvbnRlbnQgPSBnZXRUYWJiYWJsZUNvbnRlbnQoKTtcbiAgICAgICAgICBjb25zdCBwcmV2VGFiYmFibGUgPSBsYXN0Rm9jdXNlZFRhYmJhYmxlUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgY29uc3Qgbm9kZVRvRm9jdXMgPSAocHJldlRhYmJhYmxlICYmIHRhYmJhYmxlQ29udGVudC5pbmNsdWRlcyhwcmV2VGFiYmFibGUpID8gcHJldlRhYmJhYmxlIDogbnVsbCkgfHwgdGFiYmFibGVDb250ZW50W3RhYmJhYmxlQ29udGVudC5sZW5ndGggLSAxXSB8fCBmbG9hdGluZ0ZvY3VzRWxlbWVudDtcbiAgICAgICAgICBpZiAoaXNIVE1MRWxlbWVudChub2RlVG9Gb2N1cykpIHtcbiAgICAgICAgICAgIG5vZGVUb0ZvY3VzLmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8zMDYwXG4gICAgICAgIGlmIChkYXRhUmVmLmN1cnJlbnQuaW5zaWRlUmVhY3RUcmVlKSB7XG4gICAgICAgICAgZGF0YVJlZi5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZvY3VzIGRpZCBub3QgbW92ZSBpbnNpZGUgdGhlIGZsb2F0aW5nIHRyZWUsIGFuZCB0aGVyZSBhcmUgbm8gdGFiYmFibGVcbiAgICAgICAgLy8gcG9ydGFsIGd1YXJkcyB0byBoYW5kbGUgY2xvc2luZy5cbiAgICAgICAgaWYgKChpc1VudHJhcHBlZFR5cGVhYmxlQ29tYm9ib3ggPyB0cnVlIDogIW1vZGFsKSAmJiByZWxhdGVkVGFyZ2V0ICYmIG1vdmVkVG9VbnJlbGF0ZWROb2RlICYmICFpc1BvaW50ZXJEb3duUmVmLmN1cnJlbnQgJiYgKFxuICAgICAgICAvLyBGaXggUmVhY3QgMTggU3RyaWN0IE1vZGUgcmV0dXJuRm9jdXMgZHVlIHRvIGRvdWJsZSByZW5kZXJpbmcuXG4gICAgICAgIC8vIEZvciBhbiBcInVudHJhcHBlZFwiIHR5cGVhYmxlIGNvbWJvYm94IChpbnB1dCByb2xlPWNvbWJvYm94IHdpdGhcbiAgICAgICAgLy8gaW5pdGlhbEZvY3VzPWZhbHNlKSwgcmUtb3BlbmluZyB0aGUgcG9wdXAgYW5kIHRhYmJpbmcgb3V0IHNob3VsZCBzdGlsbCBjbG9zZSBpdCBldmVuXG4gICAgICAgIC8vIHdoZW4gdGhlIHByZXZpb3VzbHkgZm9jdXNlZCBlbGVtZW50IChlLmcuIHRoZSBuZXh0IHRhYmJhYmxlIG91dHNpZGUgdGhlIHBvcHVwKSBpc1xuICAgICAgICAvLyBmb2N1c2VkIGFnYWluLiBPdGhlcndpc2UsIHRoZSBwb3B1cCByZW1haW5zIG9wZW4gb24gdGhlIHNlY29uZCBUYWIgc2VxdWVuY2U6XG4gICAgICAgIC8vIGNsaWNrIGlucHV0IC0+IFRhYiAoY2xvc2VzKSAtPiBjbGljayBpbnB1dCAtPiBUYWIuXG4gICAgICAgIC8vIEFsbG93IGNsb3Npbmcgd2hlbiBgaXNVbnRyYXBwZWRUeXBlYWJsZUNvbWJvYm94YCByZWdhcmRsZXNzIG9mIHRoZSBwcmV2aW91c2x5IGZvY3VzZWQgZWxlbWVudC5cbiAgICAgICAgaXNVbnRyYXBwZWRUeXBlYWJsZUNvbWJvYm94IHx8IHJlbGF0ZWRUYXJnZXQgIT09IGdldFByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCgpKSkge1xuICAgICAgICAgIHByZXZlbnRSZXR1cm5Gb2N1c1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICBzdG9yZS5zZXRPcGVuKGZhbHNlLCBjcmVhdGVDaGFuZ2VFdmVudERldGFpbHMoUkVBU09OUy5mb2N1c091dCwgZXZlbnQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1hcmtJbnNpZGVSZWFjdFRyZWUoKSB7XG4gICAgICBpZiAocG9pbnRlckRvd25PdXRzaWRlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZGF0YVJlZi5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZSA9IHRydWU7XG4gICAgICBibHVyVGltZW91dC5zdGFydCgwLCAoKSA9PiB7XG4gICAgICAgIGRhdGFSZWYuY3VycmVudC5pbnNpZGVSZWFjdFRyZWUgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBkb21SZWZlcmVuY2VFbGVtZW50ID0gaXNIVE1MRWxlbWVudChkb21SZWZlcmVuY2UpID8gZG9tUmVmZXJlbmNlIDogbnVsbDtcbiAgICBpZiAoIWZsb2F0aW5nICYmICFkb21SZWZlcmVuY2VFbGVtZW50KSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VDbGVhbnVwcyhkb21SZWZlcmVuY2VFbGVtZW50ICYmIGFkZEV2ZW50TGlzdGVuZXIoZG9tUmVmZXJlbmNlRWxlbWVudCwgJ2ZvY3Vzb3V0JywgaGFuZGxlRm9jdXNPdXRzaWRlKSwgZG9tUmVmZXJlbmNlRWxlbWVudCAmJiBhZGRFdmVudExpc3RlbmVyKGRvbVJlZmVyZW5jZUVsZW1lbnQsICdwb2ludGVyZG93bicsIGhhbmRsZVBvaW50ZXJEb3duKSwgZmxvYXRpbmcgJiYgYWRkRXZlbnRMaXN0ZW5lcihmbG9hdGluZywgJ2ZvY3VzaW4nLCBoYW5kbGVGb2N1c0luKSwgZmxvYXRpbmcgJiYgYWRkRXZlbnRMaXN0ZW5lcihmbG9hdGluZywgJ2ZvY3Vzb3V0JywgaGFuZGxlRm9jdXNPdXRzaWRlKSwgZmxvYXRpbmcgJiYgcG9ydGFsQ29udGV4dCAmJiBhZGRFdmVudExpc3RlbmVyKGZsb2F0aW5nLCAnZm9jdXNvdXQnLCBtYXJrSW5zaWRlUmVhY3RUcmVlLCB0cnVlKSk7XG4gIH0sIFtkaXNhYmxlZCwgZG9tUmVmZXJlbmNlLCBmbG9hdGluZywgZmxvYXRpbmdGb2N1c0VsZW1lbnQsIG1vZGFsLCB0cmVlLCBwb3J0YWxDb250ZXh0LCBzdG9yZSwgY2xvc2VPbkZvY3VzT3V0LCByZXN0b3JlRm9jdXMsIGdldFRhYmJhYmxlQ29udGVudCwgaXNVbnRyYXBwZWRUeXBlYWJsZUNvbWJvYm94LCBnZXROb2RlSWQsIG9yZGVyUmVmLCBkYXRhUmVmLCBibHVyVGltZW91dCwgcG9pbnRlckRvd25UaW1lb3V0LCByZXN0b3JlRm9jdXNGcmFtZSwgbmV4dEZvY3VzYWJsZUVsZW1lbnQsIHByZXZpb3VzRm9jdXNhYmxlRWxlbWVudCwgZ2V0UmVzb2x2ZWRJbnNpZGVFbGVtZW50c10pO1xuXG4gIC8vIEhpZGUgZXZlcnl0aGluZyBvdXRzaWRlIHRoZSBmbG9hdGluZyB0cmVlIGZyb20gYXNzaXN0aXZlIHRlY2ggd2hpbGUgb3Blbi5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZWQgfHwgIWZsb2F0aW5nIHx8ICFvcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIERvbid0IGhpZGUgcG9ydGFscyBuZXN0ZWQgd2l0aGluIHRoZSBwYXJlbnQgcG9ydGFsLlxuICAgIGNvbnN0IHBvcnRhbE5vZGVzID0gQXJyYXkuZnJvbShwb3J0YWxDb250ZXh0Py5wb3J0YWxOb2RlPy5xdWVyeVNlbGVjdG9yQWxsKGBbJHtjcmVhdGVBdHRyaWJ1dGUoJ3BvcnRhbCcpfV1gKSB8fCBbXSk7XG4gICAgY29uc3QgYW5jZXN0b3JzID0gdHJlZSA/IGdldE5vZGVBbmNlc3RvcnModHJlZS5ub2Rlc1JlZi5jdXJyZW50LCBnZXROb2RlSWQoKSkgOiBbXTtcbiAgICBjb25zdCByb290QW5jZXN0b3JDb21ib2JveERvbVJlZmVyZW5jZSA9IGFuY2VzdG9ycy5maW5kKG5vZGUgPT4gaXNUeXBlYWJsZUNvbWJvYm94KG5vZGUuY29udGV4dD8uZWxlbWVudHMuZG9tUmVmZXJlbmNlIHx8IG51bGwpKT8uY29udGV4dD8uZWxlbWVudHMuZG9tUmVmZXJlbmNlO1xuICAgIGNvbnN0IGNvbnRyb2xJbnNpZGVFbGVtZW50cyA9IFtmbG9hdGluZywgLi4ucG9ydGFsTm9kZXMsIGJlZm9yZUd1YXJkUmVmLmN1cnJlbnQsIGFmdGVyR3VhcmRSZWYuY3VycmVudCwgcG9ydGFsQ29udGV4dD8uYmVmb3JlT3V0c2lkZVJlZi5jdXJyZW50LCBwb3J0YWxDb250ZXh0Py5hZnRlck91dHNpZGVSZWYuY3VycmVudCwgLi4uZ2V0UmVzb2x2ZWRJbnNpZGVFbGVtZW50cygpXTtcbiAgICBjb25zdCBpbnNpZGVFbGVtZW50cyA9IFsuLi5jb250cm9sSW5zaWRlRWxlbWVudHMsIHJvb3RBbmNlc3RvckNvbWJvYm94RG9tUmVmZXJlbmNlLCByZXNvbHZlUmVmKHByZXZpb3VzRm9jdXNhYmxlRWxlbWVudCksIHJlc29sdmVSZWYobmV4dEZvY3VzYWJsZUVsZW1lbnQpLCBpc1VudHJhcHBlZFR5cGVhYmxlQ29tYm9ib3ggPyBkb21SZWZlcmVuY2UgOiBudWxsXS5maWx0ZXIoeCA9PiB4ICE9IG51bGwpO1xuICAgIGNvbnN0IGFyaWFIaWRkZW5DbGVhbnVwID0gbWFya090aGVycyhpbnNpZGVFbGVtZW50cywge1xuICAgICAgYXJpYUhpZGRlbjogbW9kYWwgfHwgaXNVbnRyYXBwZWRUeXBlYWJsZUNvbWJvYm94LFxuICAgICAgbWFyazogZmFsc2VcbiAgICB9KTtcbiAgICBjb25zdCBtYXJrZXJJbnNpZGVFbGVtZW50cyA9IFtmbG9hdGluZywgLi4ucG9ydGFsTm9kZXNdLmZpbHRlcih4ID0+IHggIT0gbnVsbCk7XG4gICAgY29uc3QgbWFya2VyQ2xlYW51cCA9IG1hcmtPdGhlcnMobWFya2VySW5zaWRlRWxlbWVudHMpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBtYXJrZXJDbGVhbnVwKCk7XG4gICAgICBhcmlhSGlkZGVuQ2xlYW51cCgpO1xuICAgIH07XG4gIH0sIFtvcGVuLCBkaXNhYmxlZCwgZG9tUmVmZXJlbmNlLCBmbG9hdGluZywgbW9kYWwsIG9yZGVyUmVmLCBwb3J0YWxDb250ZXh0LCBpc1VudHJhcHBlZFR5cGVhYmxlQ29tYm9ib3gsIHRyZWUsIGdldE5vZGVJZCwgbmV4dEZvY3VzYWJsZUVsZW1lbnQsIHByZXZpb3VzRm9jdXNhYmxlRWxlbWVudCwgZ2V0UmVzb2x2ZWRJbnNpZGVFbGVtZW50c10pO1xuXG4gIC8vIEZvY3VzIHRoZSBpbml0aWFsIGVsZW1lbnQgd2hlbiB0aGUgZmxvYXRpbmcgZWxlbWVudCBvcGVucy5cbiAgdXNlSXNvTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW9wZW4gfHwgZGlzYWJsZWQgfHwgIWlzSFRNTEVsZW1lbnQoZmxvYXRpbmdGb2N1c0VsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRvYyA9IG93bmVyRG9jdW1lbnQoZmxvYXRpbmdGb2N1c0VsZW1lbnQpO1xuICAgIGNvbnN0IHByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCA9IGFjdGl2ZUVsZW1lbnQoZG9jKTtcblxuICAgIC8vIFdhaXQgZm9yIGFueSBsYXlvdXQgZWZmZWN0IHN0YXRlIHNldHRlcnMgdG8gZXhlY3V0ZSB0byBzZXQgYHRhYkluZGV4YC5cbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICBjb25zdCBpbml0aWFsRm9jdXNWYWx1ZU9yRm4gPSBpbml0aWFsRm9jdXNSZWYuY3VycmVudDtcbiAgICAgIGNvbnN0IHJlc29sdmVkSW5pdGlhbEZvY3VzID0gdHlwZW9mIGluaXRpYWxGb2N1c1ZhbHVlT3JGbiA9PT0gJ2Z1bmN0aW9uJyA/IGluaXRpYWxGb2N1c1ZhbHVlT3JGbihvcGVuSW50ZXJhY3Rpb25UeXBlUmVmLmN1cnJlbnQgfHwgJycpIDogaW5pdGlhbEZvY3VzVmFsdWVPckZuO1xuXG4gICAgICAvLyBgbnVsbGAgc2hvdWxkIGZhbGxiYWNrIHRvIGRlZmF1bHQgYmVoYXZpb3IgaW4gY2FzZSBvZiBhbiBlbXB0eSByZWYuXG4gICAgICBpZiAocmVzb2x2ZWRJbml0aWFsRm9jdXMgPT09IHVuZGVmaW5lZCB8fCByZXNvbHZlZEluaXRpYWxGb2N1cyA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9jdXNBbHJlYWR5SW5zaWRlRmxvYXRpbmdFbCA9IGNvbnRhaW5zKGZsb2F0aW5nRm9jdXNFbGVtZW50LCBwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQpO1xuICAgICAgaWYgKGZvY3VzQWxyZWFkeUluc2lkZUZsb2F0aW5nRWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGZvY3VzYWJsZUVsZW1lbnRzID0gbnVsbDtcbiAgICAgIGNvbnN0IGdldERlZmF1bHRGb2N1c0VsZW1lbnQgPSAoKSA9PiB7XG4gICAgICAgIGlmIChmb2N1c2FibGVFbGVtZW50cyA9PSBudWxsKSB7XG4gICAgICAgICAgZm9jdXNhYmxlRWxlbWVudHMgPSBnZXRUYWJiYWJsZUNvbnRlbnQoZmxvYXRpbmdGb2N1c0VsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb2N1c2FibGVFbGVtZW50c1swXSB8fCBmbG9hdGluZ0ZvY3VzRWxlbWVudDtcbiAgICAgIH07XG4gICAgICBsZXQgZWxUb0ZvY3VzO1xuICAgICAgaWYgKHJlc29sdmVkSW5pdGlhbEZvY3VzID09PSB0cnVlIHx8IHJlc29sdmVkSW5pdGlhbEZvY3VzID09PSBudWxsKSB7XG4gICAgICAgIGVsVG9Gb2N1cyA9IGdldERlZmF1bHRGb2N1c0VsZW1lbnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsVG9Gb2N1cyA9IHJlc29sdmVSZWYocmVzb2x2ZWRJbml0aWFsRm9jdXMpO1xuICAgICAgfVxuICAgICAgZWxUb0ZvY3VzID0gZWxUb0ZvY3VzIHx8IGdldERlZmF1bHRGb2N1c0VsZW1lbnQoKTtcbiAgICAgIGVucXVldWVGb2N1cyhlbFRvRm9jdXMsIHtcbiAgICAgICAgcHJldmVudFNjcm9sbDogZWxUb0ZvY3VzID09PSBmbG9hdGluZ0ZvY3VzRWxlbWVudFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIFtkaXNhYmxlZCwgb3BlbiwgZmxvYXRpbmdGb2N1c0VsZW1lbnQsIGlnbm9yZUluaXRpYWxGb2N1cywgZ2V0VGFiYmFibGVDb250ZW50LCBpbml0aWFsRm9jdXNSZWYsIG9wZW5JbnRlcmFjdGlvblR5cGVSZWZdKTtcblxuICAvLyBUcmFjayByZXR1cm4gZm9jdXMgdGFyZ2V0cyBhbmQgcmVzdG9yZSBmb2N1cyBvbiB1bm1vdW50L2Nsb3NlLlxuICB1c2VJc29MYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZCB8fCAhZmxvYXRpbmdGb2N1c0VsZW1lbnQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGRvYyA9IG93bmVyRG9jdW1lbnQoZmxvYXRpbmdGb2N1c0VsZW1lbnQpO1xuICAgIGNvbnN0IHByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCA9IGFjdGl2ZUVsZW1lbnQoZG9jKTtcbiAgICBhZGRQcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQocHJldmlvdXNseUZvY3VzZWRFbGVtZW50KTtcblxuICAgIC8vIERpc21pc3NpbmcgdmlhIG91dHNpZGUgcHJlc3Mgc2hvdWxkIGFsd2F5cyBpZ25vcmUgYHJldHVybkZvY3VzYCB0b1xuICAgIC8vIHByZXZlbnQgdW53YW50ZWQgc2Nyb2xsaW5nLlxuICAgIGZ1bmN0aW9uIG9uT3BlbkNoYW5nZUxvY2FsKGRldGFpbHMpIHtcbiAgICAgIGlmICghZGV0YWlscy5vcGVuKSB7XG4gICAgICAgIGNsb3NlVHlwZVJlZi5jdXJyZW50ID0gZ2V0RXZlbnRUeXBlKGRldGFpbHMubmF0aXZlRXZlbnQsIGxhc3RJbnRlcmFjdGlvblR5cGVSZWYuY3VycmVudCk7XG4gICAgICB9XG4gICAgICBpZiAoZGV0YWlscy5yZWFzb24gPT09IFJFQVNPTlMudHJpZ2dlckhvdmVyICYmIGRldGFpbHMubmF0aXZlRXZlbnQudHlwZSA9PT0gJ21vdXNlbGVhdmUnKSB7XG4gICAgICAgIHByZXZlbnRSZXR1cm5Gb2N1c1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChkZXRhaWxzLnJlYXNvbiAhPT0gUkVBU09OUy5vdXRzaWRlUHJlc3MpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRldGFpbHMubmVzdGVkKSB7XG4gICAgICAgIHByZXZlbnRSZXR1cm5Gb2N1c1JlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICB9IGVsc2UgaWYgKGlzVmlydHVhbENsaWNrKGRldGFpbHMubmF0aXZlRXZlbnQpIHx8IGlzVmlydHVhbFBvaW50ZXJFdmVudChkZXRhaWxzLm5hdGl2ZUV2ZW50KSkge1xuICAgICAgICBwcmV2ZW50UmV0dXJuRm9jdXNSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGlzUHJldmVudFNjcm9sbFN1cHBvcnRlZCA9IGZhbHNlO1xuICAgICAgICBvd25lckRvY3VtZW50KGZsb2F0aW5nRm9jdXNFbGVtZW50KS5jcmVhdGVFbGVtZW50KCdkaXYnKS5mb2N1cyh7XG4gICAgICAgICAgZ2V0IHByZXZlbnRTY3JvbGwoKSB7XG4gICAgICAgICAgICBpc1ByZXZlbnRTY3JvbGxTdXBwb3J0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChpc1ByZXZlbnRTY3JvbGxTdXBwb3J0ZWQpIHtcbiAgICAgICAgICBwcmV2ZW50UmV0dXJuRm9jdXNSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHByZXZlbnRSZXR1cm5Gb2N1c1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBldmVudHMub24oJ29wZW5jaGFuZ2UnLCBvbk9wZW5DaGFuZ2VMb2NhbCk7XG4gICAgZnVuY3Rpb24gZ2V0UmV0dXJuRWxlbWVudCgpIHtcbiAgICAgIGNvbnN0IHJldHVybkZvY3VzVmFsdWVPckZuID0gcmV0dXJuRm9jdXNSZWYuY3VycmVudDtcbiAgICAgIGxldCByZXNvbHZlZFJldHVybkZvY3VzVmFsdWUgPSB0eXBlb2YgcmV0dXJuRm9jdXNWYWx1ZU9yRm4gPT09ICdmdW5jdGlvbicgPyByZXR1cm5Gb2N1c1ZhbHVlT3JGbihjbG9zZVR5cGVSZWYuY3VycmVudCkgOiByZXR1cm5Gb2N1c1ZhbHVlT3JGbjtcblxuICAgICAgLy8gYG51bGxgIHNob3VsZCBmYWxsYmFjayB0byBkZWZhdWx0IGJlaGF2aW9yIGluIGNhc2Ugb2YgYW4gZW1wdHkgcmVmLlxuICAgICAgaWYgKHJlc29sdmVkUmV0dXJuRm9jdXNWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHJlc29sdmVkUmV0dXJuRm9jdXNWYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAocmVzb2x2ZWRSZXR1cm5Gb2N1c1ZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJlc29sdmVkUmV0dXJuRm9jdXNWYWx1ZSA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHJlc29sdmVkUmV0dXJuRm9jdXNWYWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGNvbnN0IGVsID0gZG9tUmVmZXJlbmNlIHx8IGdldFByZXZpb3VzbHlGb2N1c2VkRWxlbWVudCgpO1xuICAgICAgICByZXR1cm4gZWwgJiYgZWwuaXNDb25uZWN0ZWQgPyBlbCA6IG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBmYWxsYmFjayA9IGRvbVJlZmVyZW5jZSB8fCBnZXRQcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQoKTtcbiAgICAgIHJldHVybiByZXNvbHZlUmVmKHJlc29sdmVkUmV0dXJuRm9jdXNWYWx1ZSkgfHwgZmFsbGJhY2sgfHwgbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGV2ZW50cy5vZmYoJ29wZW5jaGFuZ2UnLCBvbk9wZW5DaGFuZ2VMb2NhbCk7XG4gICAgICBjb25zdCBhY3RpdmVFbCA9IGFjdGl2ZUVsZW1lbnQoZG9jKTtcbiAgICAgIGNvbnN0IGluc2lkZUVsZW1lbnRzID0gZ2V0UmVzb2x2ZWRJbnNpZGVFbGVtZW50cygpO1xuICAgICAgY29uc3QgaXNGb2N1c0luc2lkZUZsb2F0aW5nVHJlZSA9IGNvbnRhaW5zKGZsb2F0aW5nLCBhY3RpdmVFbCkgfHwgaW5zaWRlRWxlbWVudHMuc29tZShlbGVtZW50ID0+IGVsZW1lbnQgPT09IGFjdGl2ZUVsIHx8IGNvbnRhaW5zKGVsZW1lbnQsIGFjdGl2ZUVsKSkgfHwgdHJlZSAmJiBnZXROb2RlQ2hpbGRyZW4odHJlZS5ub2Rlc1JlZi5jdXJyZW50LCBnZXROb2RlSWQoKSwgZmFsc2UpLnNvbWUobm9kZSA9PiBjb250YWlucyhub2RlLmNvbnRleHQ/LmVsZW1lbnRzLmZsb2F0aW5nLCBhY3RpdmVFbCkpO1xuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgICBjb25zdCByZXR1cm5Gb2N1c1ZhbHVlT3JGbiA9IHJldHVybkZvY3VzUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCByZXR1cm5FbGVtZW50ID0gZ2V0UmV0dXJuRWxlbWVudCgpO1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAvLyBUaGlzIGlzIGByZXR1cm5FbGVtZW50YCwgaWYgaXQncyB0YWJiYWJsZSwgb3IgaXRzIGZpcnN0IHRhYmJhYmxlIGNoaWxkLlxuICAgICAgICBjb25zdCB0YWJiYWJsZVJldHVybkVsZW1lbnQgPSBnZXRGaXJzdFRhYmJhYmxlRWxlbWVudChyZXR1cm5FbGVtZW50KTtcbiAgICAgICAgY29uc3QgaGFzRXhwbGljaXRSZXR1cm5Gb2N1cyA9IHR5cGVvZiByZXR1cm5Gb2N1c1ZhbHVlT3JGbiAhPT0gJ2Jvb2xlYW4nO1xuICAgICAgICBpZiAocmV0dXJuRm9jdXNWYWx1ZU9yRm4gJiYgIXByZXZlbnRSZXR1cm5Gb2N1c1JlZi5jdXJyZW50ICYmIGlzSFRNTEVsZW1lbnQodGFiYmFibGVSZXR1cm5FbGVtZW50KSAmJiAoXG4gICAgICAgIC8vIElmIHRoZSBmb2N1cyBtb3ZlZCBzb21ld2hlcmUgZWxzZSBhZnRlciBtb3VudCwgYXZvaWQgcmV0dXJuaW5nIGZvY3VzXG4gICAgICAgIC8vIHNpbmNlIGl0IGxpa2VseSBlbnRlcmVkIGEgZGlmZmVyZW50IGVsZW1lbnQgd2hpY2ggc2hvdWxkIGJlXG4gICAgICAgIC8vIHJlc3BlY3RlZDogaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8yNjA3XG4gICAgICAgICFoYXNFeHBsaWNpdFJldHVybkZvY3VzICYmIHRhYmJhYmxlUmV0dXJuRWxlbWVudCAhPT0gYWN0aXZlRWwgJiYgYWN0aXZlRWwgIT09IGRvYy5ib2R5ID8gaXNGb2N1c0luc2lkZUZsb2F0aW5nVHJlZSA6IHRydWUpKSB7XG4gICAgICAgICAgdGFiYmFibGVSZXR1cm5FbGVtZW50LmZvY3VzKHtcbiAgICAgICAgICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBwcmV2ZW50UmV0dXJuRm9jdXNSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfSwgW2Rpc2FibGVkLCBmbG9hdGluZywgZmxvYXRpbmdGb2N1c0VsZW1lbnQsIHJldHVybkZvY3VzUmVmLCBkYXRhUmVmLCBldmVudHMsIHRyZWUsIGRvbVJlZmVyZW5jZSwgZ2V0Tm9kZUlkLCBnZXRSZXNvbHZlZEluc2lkZUVsZW1lbnRzXSk7XG5cbiAgLy8gU2FmYXJpIG1heSByYW5kb21seSBzY3JvbGwgdG8gdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSBpZiBhbiBpbnB1dCBpbnNpZGUgYSBwb3B1cCBoYXMgZm9jdXNcbiAgLy8gd2hlbiB0aGUgcG9wdXAgdW5tb3VudHMgZnJvbSB0aGUgRE9NLlxuICAvLyBCeSBibHVycmluZyBpdCBiZWZvcmUgdGhlIHBvcHVwIHVubW91bnRzLCB3ZSBjYW4gcHJldmVudCB0aGlzIGJlaGF2aW9yLlxuICB1c2VJc29MYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaXNXZWJLaXQgfHwgb3BlbiB8fCAhZmxvYXRpbmcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlRWwgPSBhY3RpdmVFbGVtZW50KG93bmVyRG9jdW1lbnQoZmxvYXRpbmcpKTtcbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoYWN0aXZlRWwpIHx8ICFpc1R5cGVhYmxlRWxlbWVudChhY3RpdmVFbCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGNvbnRhaW5zKGZsb2F0aW5nLCBhY3RpdmVFbCkpIHtcbiAgICAgIGFjdGl2ZUVsLmJsdXIoKTtcbiAgICB9XG4gIH0sIFtvcGVuLCBmbG9hdGluZ10pO1xuICAvLyBTeW5jaHJvbml6ZSB0aGUgYGNvbnRleHRgICYgYG1vZGFsYCB2YWx1ZSB0byB0aGUgRmxvYXRpbmdQb3J0YWwgY29udGV4dC5cbiAgLy8gSXQgd2lsbCBkZWNpZGUgd2hldGhlciBvciBub3QgaXQgbmVlZHMgdG8gcmVuZGVyIGl0cyBvd24gZ3VhcmRzLlxuICB1c2VJc29MYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlZCB8fCAhcG9ydGFsQ29udGV4dCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcG9ydGFsQ29udGV4dC5zZXRGb2N1c01hbmFnZXJTdGF0ZSh7XG4gICAgICBtb2RhbCxcbiAgICAgIGNsb3NlT25Gb2N1c091dCxcbiAgICAgIG9wZW4sXG4gICAgICBvbk9wZW5DaGFuZ2U6IHN0b3JlLnNldE9wZW4sXG4gICAgICBkb21SZWZlcmVuY2VcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcG9ydGFsQ29udGV4dC5zZXRGb2N1c01hbmFnZXJTdGF0ZShudWxsKTtcbiAgICB9O1xuICB9LCBbZGlzYWJsZWQsIHBvcnRhbENvbnRleHQsIG1vZGFsLCBvcGVuLCBzdG9yZSwgY2xvc2VPbkZvY3VzT3V0LCBkb21SZWZlcmVuY2VdKTtcblxuICAvLyBLZWVwIHRoZSBmbG9hdGluZyBlbGVtZW50IHRhYkluZGV4IGluIHN5bmMgYW5kIGNsZWFyIHN0YWxlIGZvY3VzIHJlY29yZHMuXG4gIHVzZUlzb0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVkIHx8ICFmbG9hdGluZ0ZvY3VzRWxlbWVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaGFuZGxlVGFiSW5kZXgoZmxvYXRpbmdGb2N1c0VsZW1lbnQsIG9yZGVyUmVmKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcXVldWVNaWNyb3Rhc2soY2xlYXJEaXNjb25uZWN0ZWRQcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnRzKTtcbiAgICB9O1xuICB9LCBbZGlzYWJsZWQsIGZsb2F0aW5nRm9jdXNFbGVtZW50LCBvcmRlclJlZl0pO1xuICBjb25zdCBzaG91bGRSZW5kZXJHdWFyZHMgPSAhZGlzYWJsZWQgJiYgKG1vZGFsID8gIWlzVW50cmFwcGVkVHlwZWFibGVDb21ib2JveCA6IHRydWUpICYmIChpc0luc2lkZVBvcnRhbCB8fCBtb2RhbCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogW3Nob3VsZFJlbmRlckd1YXJkcyAmJiAvKiNfX1BVUkVfXyovX2pzeChGb2N1c0d1YXJkLCB7XG4gICAgICBcImRhdGEtdHlwZVwiOiBcImluc2lkZVwiLFxuICAgICAgcmVmOiBtZXJnZWRCZWZvcmVHdWFyZFJlZixcbiAgICAgIG9uRm9jdXM6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKG1vZGFsKSB7XG4gICAgICAgICAgY29uc3QgZWxzID0gZ2V0VGFiYmFibGVDb250ZW50KCk7XG4gICAgICAgICAgZW5xdWV1ZUZvY3VzKGVsc1tlbHMubGVuZ3RoIC0gMV0pO1xuICAgICAgICB9IGVsc2UgaWYgKHBvcnRhbENvbnRleHQ/LnBvcnRhbE5vZGUpIHtcbiAgICAgICAgICBwcmV2ZW50UmV0dXJuRm9jdXNSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgIGlmIChpc091dHNpZGVFdmVudChldmVudCwgcG9ydGFsQ29udGV4dC5wb3J0YWxOb2RlKSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dFRhYmJhYmxlID0gZ2V0TmV4dFRhYmJhYmxlKGRvbVJlZmVyZW5jZSk7XG4gICAgICAgICAgICBuZXh0VGFiYmFibGU/LmZvY3VzKCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc29sdmVSZWYocHJldmlvdXNGb2N1c2FibGVFbGVtZW50ID8/IHBvcnRhbENvbnRleHQuYmVmb3JlT3V0c2lkZVJlZik/LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksIGNoaWxkcmVuLCBzaG91bGRSZW5kZXJHdWFyZHMgJiYgLyojX19QVVJFX18qL19qc3goRm9jdXNHdWFyZCwge1xuICAgICAgXCJkYXRhLXR5cGVcIjogXCJpbnNpZGVcIixcbiAgICAgIHJlZjogbWVyZ2VkQWZ0ZXJHdWFyZFJlZixcbiAgICAgIG9uRm9jdXM6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKG1vZGFsKSB7XG4gICAgICAgICAgZW5xdWV1ZUZvY3VzKGdldFRhYmJhYmxlQ29udGVudCgpWzBdKTtcbiAgICAgICAgfSBlbHNlIGlmIChwb3J0YWxDb250ZXh0Py5wb3J0YWxOb2RlKSB7XG4gICAgICAgICAgaWYgKGNsb3NlT25Gb2N1c091dCkge1xuICAgICAgICAgICAgcHJldmVudFJldHVybkZvY3VzUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNPdXRzaWRlRXZlbnQoZXZlbnQsIHBvcnRhbENvbnRleHQucG9ydGFsTm9kZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZUYWJiYWJsZSA9IGdldFByZXZpb3VzVGFiYmFibGUoZG9tUmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHByZXZUYWJiYWJsZT8uZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZVJlZihuZXh0Rm9jdXNhYmxlRWxlbWVudCA/PyBwb3J0YWxDb250ZXh0LmFmdGVyT3V0c2lkZVJlZik/LmZvY3VzKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSldXG4gIH0pO1xufSJdLCJuYW1lcyI6WyJSZWFjdCIsImdldE5vZGVOYW1lIiwiaXNIVE1MRWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJtZXJnZUNsZWFudXBzIiwidXNlTWVyZ2VkUmVmcyIsInVzZVZhbHVlQXNSZWYiLCJ1c2VTdGFibGVDYWxsYmFjayIsInVzZUlzb0xheW91dEVmZmVjdCIsInVzZVRpbWVvdXQiLCJpc1dlYktpdCIsInVzZUFuaW1hdGlvbkZyYW1lIiwib3duZXJEb2N1bWVudCIsIm93bmVyV2luZG93IiwiRm9jdXNHdWFyZCIsImFjdGl2ZUVsZW1lbnQiLCJjb250YWlucyIsImdldFRhcmdldCIsImlzVHlwZWFibGVDb21ib2JveCIsImdldEZsb2F0aW5nRm9jdXNFbGVtZW50IiwiaXNUeXBlYWJsZUVsZW1lbnQiLCJpc1ZpcnR1YWxDbGljayIsImlzVmlydHVhbFBvaW50ZXJFdmVudCIsInN0b3BFdmVudCIsInRhYmJhYmxlIiwiZm9jdXNhYmxlIiwiaXNPdXRzaWRlRXZlbnQiLCJpc1RhYmJhYmxlIiwiZ2V0TmV4dFRhYmJhYmxlIiwiZ2V0UHJldmlvdXNUYWJiYWJsZSIsImdldE5vZGVBbmNlc3RvcnMiLCJnZXROb2RlQ2hpbGRyZW4iLCJpc0VsZW1lbnRWaXNpYmxlIiwiY3JlYXRlQ2hhbmdlRXZlbnREZXRhaWxzIiwiUkVBU09OUyIsImNyZWF0ZUF0dHJpYnV0ZSIsImVucXVldWVGb2N1cyIsIm1hcmtPdGhlcnMiLCJ1c2VQb3J0YWxDb250ZXh0IiwidXNlRmxvYXRpbmdUcmVlIiwiQ0xJQ0tfVFJJR0dFUl9JREVOVElGSUVSIiwicmVzb2x2ZVJlZiIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJnZXRFdmVudFR5cGUiLCJldmVudCIsImxhc3RJbnRlcmFjdGlvblR5cGUiLCJ3aW4iLCJLZXlib2FyZEV2ZW50IiwiRm9jdXNFdmVudCIsInBvaW50ZXJUeXBlIiwiTW91c2VFdmVudCIsImRldGFpbCIsIkxJU1RfTElNSVQiLCJwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnRzIiwiY2xlYXJEaXNjb25uZWN0ZWRQcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnRzIiwiZmlsdGVyIiwiZW50cnkiLCJkZXJlZiIsImlzQ29ubmVjdGVkIiwiYWRkUHJldmlvdXNseUZvY3VzZWRFbGVtZW50IiwiZWxlbWVudCIsInB1c2giLCJXZWFrUmVmIiwibGVuZ3RoIiwic2xpY2UiLCJnZXRQcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQiLCJnZXRGaXJzdFRhYmJhYmxlRWxlbWVudCIsImNvbnRhaW5lciIsImhhbmRsZVRhYkluZGV4IiwiZmxvYXRpbmdGb2N1c0VsZW1lbnQiLCJvcmRlclJlZiIsImhhc0F0dHJpYnV0ZSIsImN1cnJlbnQiLCJpbmNsdWRlcyIsImdldEF0dHJpYnV0ZSIsImZvY3VzYWJsZUVsZW1lbnRzIiwidGFiYmFibGVDb250ZW50IiwiZGF0YVRhYkluZGV4Iiwic3RhcnRzV2l0aCIsInRhYkluZGV4Iiwic2V0QXR0cmlidXRlIiwiRmxvYXRpbmdGb2N1c01hbmFnZXIiLCJwcm9wcyIsImNvbnRleHQiLCJjaGlsZHJlbiIsImRpc2FibGVkIiwiaW5pdGlhbEZvY3VzIiwicmV0dXJuRm9jdXMiLCJyZXN0b3JlRm9jdXMiLCJtb2RhbCIsImNsb3NlT25Gb2N1c091dCIsIm9wZW5JbnRlcmFjdGlvblR5cGUiLCJuZXh0Rm9jdXNhYmxlRWxlbWVudCIsInByZXZpb3VzRm9jdXNhYmxlRWxlbWVudCIsImJlZm9yZUNvbnRlbnRGb2N1c0d1YXJkUmVmIiwiZXh0ZXJuYWxUcmVlIiwiZ2V0SW5zaWRlRWxlbWVudHMiLCJzdG9yZSIsInJvb3RTdG9yZSIsIm9wZW4iLCJ1c2VTdGF0ZSIsImRvbVJlZmVyZW5jZSIsImZsb2F0aW5nIiwiZXZlbnRzIiwiZGF0YVJlZiIsImdldE5vZGVJZCIsImZsb2F0aW5nQ29udGV4dCIsIm5vZGVJZCIsImlnbm9yZUluaXRpYWxGb2N1cyIsImlzVW50cmFwcGVkVHlwZWFibGVDb21ib2JveCIsInVzZVJlZiIsImluaXRpYWxGb2N1c1JlZiIsInJldHVybkZvY3VzUmVmIiwib3BlbkludGVyYWN0aW9uVHlwZVJlZiIsInRyZWUiLCJwb3J0YWxDb250ZXh0IiwicHJldmVudFJldHVybkZvY3VzUmVmIiwiaXNQb2ludGVyRG93blJlZiIsInBvaW50ZXJEb3duT3V0c2lkZVJlZiIsImxhc3RGb2N1c2VkVGFiYmFibGVSZWYiLCJjbG9zZVR5cGVSZWYiLCJsYXN0SW50ZXJhY3Rpb25UeXBlUmVmIiwiYmVmb3JlR3VhcmRSZWYiLCJhZnRlckd1YXJkUmVmIiwibWVyZ2VkQmVmb3JlR3VhcmRSZWYiLCJiZWZvcmVJbnNpZGVSZWYiLCJtZXJnZWRBZnRlckd1YXJkUmVmIiwiYWZ0ZXJJbnNpZGVSZWYiLCJibHVyVGltZW91dCIsInBvaW50ZXJEb3duVGltZW91dCIsInJlc3RvcmVGb2N1c0ZyYW1lIiwiaXNJbnNpZGVQb3J0YWwiLCJnZXRUYWJiYWJsZUNvbnRlbnQiLCJnZXRSZXNvbHZlZEluc2lkZUVsZW1lbnRzIiwidXNlRWZmZWN0IiwidW5kZWZpbmVkIiwib25LZXlEb3duIiwia2V5IiwiZG9jIiwiY2xlYXJQb2ludGVyRG93bk91dHNpZGUiLCJvblBvaW50ZXJEb3duIiwidGFyZ2V0IiwiaW5zaWRlRWxlbWVudHMiLCJwb2ludGVyVGFyZ2V0SW5zaWRlIiwicG9ydGFsTm9kZSIsInNvbWUiLCJjbG9zZXN0IiwiaGFuZGxlUG9pbnRlckRvd24iLCJzdGFydCIsImhhbmRsZUZvY3VzSW4iLCJoYW5kbGVGb2N1c091dHNpZGUiLCJyZWxhdGVkVGFyZ2V0IiwiY3VycmVudFRhcmdldCIsInF1ZXVlTWljcm90YXNrIiwidHJpZ2dlcnMiLCJ0cmlnZ2VyRWxlbWVudHMiLCJpc1JlbGF0ZWRGb2N1c0d1YXJkIiwiYmVmb3JlT3V0c2lkZVJlZiIsImFmdGVyT3V0c2lkZVJlZiIsIm1vdmVkVG9VbnJlbGF0ZWROb2RlIiwiaGFzRWxlbWVudCIsImhhc01hdGNoaW5nRWxlbWVudCIsInRyaWdnZXIiLCJub2Rlc1JlZiIsImZpbmQiLCJub2RlIiwiZWxlbWVudHMiLCJib2R5IiwiZm9jdXMiLCJyZXF1ZXN0IiwicHJldlRhYmJhYmxlIiwibm9kZVRvRm9jdXMiLCJpbnNpZGVSZWFjdFRyZWUiLCJzZXRPcGVuIiwiZm9jdXNPdXQiLCJtYXJrSW5zaWRlUmVhY3RUcmVlIiwiZG9tUmVmZXJlbmNlRWxlbWVudCIsImFuY2VzdG9ycyIsInBvcnRhbE5vZGVzIiwiQXJyYXkiLCJmcm9tIiwicXVlcnlTZWxlY3RvckFsbCIsInJvb3RBbmNlc3RvckNvbWJvYm94RG9tUmVmZXJlbmNlIiwiY29udHJvbEluc2lkZUVsZW1lbnRzIiwieCIsImFyaWFIaWRkZW5DbGVhbnVwIiwiYXJpYUhpZGRlbiIsIm1hcmsiLCJtYXJrZXJJbnNpZGVFbGVtZW50cyIsIm1hcmtlckNsZWFudXAiLCJwcmV2aW91c2x5Rm9jdXNlZEVsZW1lbnQiLCJpbml0aWFsRm9jdXNWYWx1ZU9yRm4iLCJyZXNvbHZlZEluaXRpYWxGb2N1cyIsImZvY3VzQWxyZWFkeUluc2lkZUZsb2F0aW5nRWwiLCJnZXREZWZhdWx0Rm9jdXNFbGVtZW50IiwiZWxUb0ZvY3VzIiwicHJldmVudFNjcm9sbCIsIm9uT3BlbkNoYW5nZUxvY2FsIiwiZGV0YWlscyIsIm5hdGl2ZUV2ZW50IiwicmVhc29uIiwidHJpZ2dlckhvdmVyIiwidHlwZSIsIm91dHNpZGVQcmVzcyIsIm5lc3RlZCIsImlzUHJldmVudFNjcm9sbFN1cHBvcnRlZCIsImNyZWF0ZUVsZW1lbnQiLCJvbiIsImdldFJldHVybkVsZW1lbnQiLCJyZXR1cm5Gb2N1c1ZhbHVlT3JGbiIsInJlc29sdmVkUmV0dXJuRm9jdXNWYWx1ZSIsImVsIiwiZmFsbGJhY2siLCJvZmYiLCJhY3RpdmVFbCIsImlzRm9jdXNJbnNpZGVGbG9hdGluZ1RyZWUiLCJyZXR1cm5FbGVtZW50IiwidGFiYmFibGVSZXR1cm5FbGVtZW50IiwiaGFzRXhwbGljaXRSZXR1cm5Gb2N1cyIsImJsdXIiLCJzZXRGb2N1c01hbmFnZXJTdGF0ZSIsIm9uT3BlbkNoYW5nZSIsInNob3VsZFJlbmRlckd1YXJkcyIsIkZyYWdtZW50IiwicmVmIiwib25Gb2N1cyIsImVscyIsIm5leHRUYWJiYWJsZSJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingFocusManager.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingPortal.js":
|
||
/*!****************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingPortal.js ***!
|
||
\****************************************************************************************/
|
||
/***/ ((__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 */ FloatingPortal: () => (/* binding */ FloatingPortal),\n/* harmony export */ useFloatingPortalNode: () => (/* binding */ useFloatingPortalNode),\n/* harmony export */ usePortalContext: () => (/* binding */ usePortalContext)\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 _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @floating-ui/utils/dom */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\");\n/* harmony import */ var _base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @base-ui/utils/addEventListener */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/addEventListener.js\");\n/* harmony import */ var _base_ui_utils_mergeCleanups__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @base-ui/utils/mergeCleanups */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/mergeCleanups.js\");\n/* harmony import */ var _base_ui_utils_useId__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @base-ui/utils/useId */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useId.js\");\n/* harmony import */ var _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @base-ui/utils/useIsoLayoutEffect */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @base-ui/utils/useStableCallback */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useStableCallback.js\");\n/* harmony import */ var _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @base-ui/utils/empty */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js\");\n/* harmony import */ var _utils_FocusGuard_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../utils/FocusGuard.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/FocusGuard.js\");\n/* harmony import */ var _utils_tabbable_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/tabbable.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/tabbable.js\");\n/* harmony import */ var _internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../internals/createBaseUIEventDetails.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.js\");\n/* harmony import */ var _internals_reasons_js__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../../internals/reasons.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/reason-parts.js\");\n/* harmony import */ var _utils_createAttribute_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/createAttribute.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/createAttribute.js\");\n/* harmony import */ var _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../internals/useRenderElement.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useRenderElement.js\");\n/* harmony import */ var _internals_constants_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../internals/constants.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/constants.js\");\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/* __next_internal_client_entry_do_not_use__ usePortalContext,useFloatingPortalNode,FloatingPortal auto */ var _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst PortalContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);\nif (true) PortalContext.displayName = \"PortalContext\";\nconst usePortalContext = ()=>{\n _s();\n return react__WEBPACK_IMPORTED_MODULE_0__.useContext(PortalContext);\n};\n_s(usePortalContext, \"gDsCjeeItUuvgOWf1v4qoK9RF6k=\");\nconst attr = (0,_utils_createAttribute_js__WEBPACK_IMPORTED_MODULE_3__.createAttribute)('portal');\nfunction useFloatingPortalNode() {\n let props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n _s1();\n const { ref, container: containerProp, componentProps = _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_4__.EMPTY_OBJECT, elementProps } = props;\n const uniqueId = (0,_base_ui_utils_useId__WEBPACK_IMPORTED_MODULE_5__.useId)();\n const portalContext = usePortalContext();\n const parentPortalNode = portalContext === null || portalContext === void 0 ? void 0 : portalContext.portalNode;\n const [containerElement, setContainerElement] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null);\n const [portalNode, setPortalNode] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null);\n const setPortalNodeRef = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_6__.useStableCallback)({\n \"useFloatingPortalNode.useStableCallback[setPortalNodeRef]\": (node)=>{\n if (node !== null) {\n // the useIsoLayoutEffect below watching containerProp / parentPortalNode\n // sets setPortalNode(null) when the container becomes null or changes.\n // So even though the ref callback now ignores null, the portal node still gets cleared.\n setPortalNode(node);\n }\n }\n }[\"useFloatingPortalNode.useStableCallback[setPortalNodeRef]\"]);\n const containerRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_7__.useIsoLayoutEffect)({\n \"useFloatingPortalNode.useIsoLayoutEffect\": ()=>{\n // Wait for the container to be resolved if explicitly `null`.\n if (containerProp === null) {\n if (containerRef.current) {\n containerRef.current = null;\n setPortalNode(null);\n setContainerElement(null);\n }\n return;\n }\n // React 17 does not use React.useId().\n if (uniqueId == null) {\n return;\n }\n var _ref, _ref1;\n const resolvedContainer = (_ref1 = (_ref = containerProp && ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__.isNode)(containerProp) ? containerProp : containerProp.current)) !== null && _ref !== void 0 ? _ref : parentPortalNode) !== null && _ref1 !== void 0 ? _ref1 : document.body;\n if (resolvedContainer == null) {\n if (containerRef.current) {\n containerRef.current = null;\n setPortalNode(null);\n setContainerElement(null);\n }\n return;\n }\n if (containerRef.current !== resolvedContainer) {\n containerRef.current = resolvedContainer;\n setPortalNode(null);\n setContainerElement(resolvedContainer);\n }\n }\n }[\"useFloatingPortalNode.useIsoLayoutEffect\"], [\n containerProp,\n parentPortalNode,\n uniqueId\n ]);\n const portalElement = (0,_internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_9__.useRenderElement)('div', componentProps, {\n ref: [\n ref,\n setPortalNodeRef\n ],\n props: [\n {\n id: uniqueId,\n [attr]: ''\n },\n elementProps\n ]\n });\n // This `createPortal` call injects `portalElement` into the `container`.\n // Another call inside `FloatingPortal`/`FloatingPortalLite` then injects the children into `portalElement`.\n const portalSubtree = containerElement && portalElement ? /*#__PURE__*/ react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal(portalElement, containerElement) : null;\n return {\n portalNode,\n portalSubtree\n };\n}\n_s1(useFloatingPortalNode, \"wrQWmT4RtgqUV35qIqT2yNIrv/A=\", false, function() {\n return [\n _base_ui_utils_useId__WEBPACK_IMPORTED_MODULE_5__.useId,\n usePortalContext,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_6__.useStableCallback,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_7__.useIsoLayoutEffect,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_9__.useRenderElement\n ];\n});\n/**\n * Portals the floating element into a given container element — by default,\n * outside of the app root and into the body.\n * This is necessary to ensure the floating element can appear outside any\n * potential parent containers that cause clipping (such as `overflow: hidden`),\n * while retaining its location in the React tree.\n * @see https://floating-ui.com/docs/FloatingPortal\n * @internal\n */ const FloatingPortal = /*#__PURE__*/ _s2(react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c = _s2(function FloatingPortal(componentProps, forwardedRef) {\n _s2();\n const { children, container, className, render, renderGuards, style, ...elementProps } = componentProps;\n const { portalNode, portalSubtree } = useFloatingPortalNode({\n container,\n ref: forwardedRef,\n componentProps,\n elementProps\n });\n const beforeOutsideRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const afterOutsideRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const beforeInsideRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const afterInsideRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const [focusManagerState, setFocusManagerState] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null);\n const focusInsideDisabledRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n const modal = focusManagerState === null || focusManagerState === void 0 ? void 0 : focusManagerState.modal;\n const open = focusManagerState === null || focusManagerState === void 0 ? void 0 : focusManagerState.open;\n const shouldRenderGuards = typeof renderGuards === 'boolean' ? renderGuards : !!focusManagerState && !focusManagerState.modal && focusManagerState.open && !!portalNode;\n // https://codesandbox.io/s/tabbable-portal-f4tng?file=/src/TabbablePortal.tsx\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"FloatingPortal.FloatingPortal.useEffect\": ()=>{\n if (!portalNode || modal) {\n return undefined;\n }\n // Make sure elements inside the portal element are tabbable only when the\n // portal has already been focused, either by tabbing into a focus trap\n // element outside or using the mouse.\n function onFocus(event) {\n if (portalNode && event.relatedTarget && (0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_10__.isOutsideEvent)(event)) {\n if (event.type === 'focusin') {\n if (focusInsideDisabledRef.current) {\n (0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_10__.enableFocusInside)(portalNode);\n focusInsideDisabledRef.current = false;\n }\n } else {\n (0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_10__.disableFocusInside)(portalNode);\n focusInsideDisabledRef.current = true;\n }\n }\n }\n // Listen to the event on the capture phase so they run before the focus\n // trap elements onFocus prop is called.\n return (0,_base_ui_utils_mergeCleanups__WEBPACK_IMPORTED_MODULE_11__.mergeCleanups)((0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_12__.addEventListener)(portalNode, 'focusin', onFocus, true), (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_12__.addEventListener)(portalNode, 'focusout', onFocus, true));\n }\n }[\"FloatingPortal.FloatingPortal.useEffect\"], [\n portalNode,\n modal\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"FloatingPortal.FloatingPortal.useEffect\": ()=>{\n if (!portalNode || open !== false) {\n return;\n }\n (0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_10__.enableFocusInside)(portalNode);\n focusInsideDisabledRef.current = false;\n }\n }[\"FloatingPortal.FloatingPortal.useEffect\"], [\n open,\n portalNode\n ]);\n const portalContextValue = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"FloatingPortal.FloatingPortal.useMemo[portalContextValue]\": ()=>({\n beforeOutsideRef,\n afterOutsideRef,\n beforeInsideRef,\n afterInsideRef,\n portalNode,\n setFocusManagerState\n })\n }[\"FloatingPortal.FloatingPortal.useMemo[portalContextValue]\"], [\n portalNode\n ]);\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n portalSubtree,\n /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(PortalContext.Provider, {\n value: portalContextValue,\n children: [\n shouldRenderGuards && portalNode && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_utils_FocusGuard_js__WEBPACK_IMPORTED_MODULE_13__.FocusGuard, {\n \"data-type\": \"outside\",\n ref: beforeOutsideRef,\n onFocus: (event)=>{\n if ((0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_10__.isOutsideEvent)(event, portalNode)) {\n var _beforeInsideRef_current;\n (_beforeInsideRef_current = beforeInsideRef.current) === null || _beforeInsideRef_current === void 0 ? void 0 : _beforeInsideRef_current.focus();\n } else {\n const domReference = focusManagerState ? focusManagerState.domReference : null;\n const prevTabbable = (0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_10__.getPreviousTabbable)(domReference);\n prevTabbable === null || prevTabbable === void 0 ? void 0 : prevTabbable.focus();\n }\n }\n }),\n shouldRenderGuards && portalNode && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(\"span\", {\n \"aria-owns\": portalNode.id,\n style: _internals_constants_js__WEBPACK_IMPORTED_MODULE_14__.ownerVisuallyHidden\n }),\n portalNode && /*#__PURE__*/ react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal(children, portalNode),\n shouldRenderGuards && portalNode && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(_utils_FocusGuard_js__WEBPACK_IMPORTED_MODULE_13__.FocusGuard, {\n \"data-type\": \"outside\",\n ref: afterOutsideRef,\n onFocus: (event)=>{\n if ((0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_10__.isOutsideEvent)(event, portalNode)) {\n var _afterInsideRef_current;\n (_afterInsideRef_current = afterInsideRef.current) === null || _afterInsideRef_current === void 0 ? void 0 : _afterInsideRef_current.focus();\n } else {\n const domReference = focusManagerState ? focusManagerState.domReference : null;\n const nextTabbable = (0,_utils_tabbable_js__WEBPACK_IMPORTED_MODULE_10__.getNextTabbable)(domReference);\n nextTabbable === null || nextTabbable === void 0 ? void 0 : nextTabbable.focus();\n if (focusManagerState === null || focusManagerState === void 0 ? void 0 : focusManagerState.closeOnFocusOut) {\n focusManagerState === null || focusManagerState === void 0 ? void 0 : focusManagerState.onOpenChange(false, (0,_internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_15__.createChangeEventDetails)(_internals_reasons_js__WEBPACK_IMPORTED_MODULE_16__.focusOut, event.nativeEvent));\n }\n }\n }\n })\n ]\n })\n ]\n });\n}, \"I6vbvDrac6Np60gy8c5D7r98dlo=\", false, function() {\n return [\n useFloatingPortalNode\n ];\n})), \"I6vbvDrac6Np60gy8c5D7r98dlo=\", false, function() {\n return [\n useFloatingPortalNode\n ];\n});\n_c1 = FloatingPortal;\nif (true) FloatingPortal.displayName = \"FloatingPortal\";\nvar _c, _c1;\n$RefreshReg$(_c, \"FloatingPortal$React.forwardRef\");\n$RefreshReg$(_c1, \"FloatingPortal\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvY29tcG9uZW50cy9GbG9hdGluZ1BvcnRhbC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFK0I7QUFDTztBQUNVO0FBQ21CO0FBQ047QUFDaEI7QUFDMEI7QUFDRjtBQUNqQjtBQUNHO0FBQzRFO0FBQzVDO0FBQ2xDO0FBQ1M7QUFDUztBQUNKO0FBQ0o7QUFDL0QsTUFBTXdCLGdCQUFnQixXQUFXLEdBQUV4QixnREFBbUIsQ0FBQztBQUN2RCxJQUFJMEIsSUFBcUMsRUFBRUYsY0FBY0csV0FBVyxHQUFHO0FBQ2hFLE1BQU1DLG1CQUFtQjs7SUFBTTVCLE9BQUFBLDZDQUFnQixDQUFDd0I7QUFBYSxFQUFFO0dBQXpESTtBQUNiLE1BQU1FLE9BQU9iLDBFQUFlQSxDQUFDO0FBQ3RCLFNBQVNjO1FBQXNCQyxRQUFBQSxpRUFBUSxDQUFDOztJQUM3QyxNQUFNLEVBQ0pDLEdBQUcsRUFDSEMsV0FBV0MsYUFBYSxFQUN4QkMsaUJBQWlCNUIsOERBQVksRUFDN0I2QixZQUFZLEVBQ2IsR0FBR0w7SUFDSixNQUFNTSxXQUFXakMsMkRBQUtBO0lBQ3RCLE1BQU1rQyxnQkFBZ0JYO0lBQ3RCLE1BQU1ZLG1CQUFtQkQsMEJBQUFBLG9DQUFBQSxjQUFlRSxVQUFVO0lBQ2xELE1BQU0sQ0FBQ0Msa0JBQWtCQyxvQkFBb0IsR0FBRzNDLDJDQUFjLENBQUM7SUFDL0QsTUFBTSxDQUFDeUMsWUFBWUksY0FBYyxHQUFHN0MsMkNBQWMsQ0FBQztJQUNuRCxNQUFNOEMsbUJBQW1CdkMsbUZBQWlCQTtxRUFBQ3dDLENBQUFBO1lBQ3pDLElBQUlBLFNBQVMsTUFBTTtnQkFDakIseUVBQXlFO2dCQUN6RSx1RUFBdUU7Z0JBQ3ZFLHdGQUF3RjtnQkFDeEZGLGNBQWNFO1lBQ2hCO1FBQ0Y7O0lBQ0EsTUFBTUMsZUFBZWhELHlDQUFZLENB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TUFBTWUsV0FBVztnQ0FDckc7NEJBQ0Y7d0JBQ0Y7b0JBQ0Y7aUJBQUc7WUFDTDtTQUFHO0lBQ0w7QUFDRjs7UUE5Rk0vRDs7OztRQUFBQTs7R0E4Rkg7O0FBQ0gsSUFBSUwsSUFBcUMsRUFBRWdDLGVBQWUvQixXQUFXLEdBQUciLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2Zsb2F0aW5nLXVpLXJlYWN0L2NvbXBvbmVudHMvRmxvYXRpbmdQb3J0YWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgaXNOb2RlIH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5pbXBvcnQgeyBhZGRFdmVudExpc3RlbmVyIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvYWRkRXZlbnRMaXN0ZW5lcic7XG5pbXBvcnQgeyBtZXJnZUNsZWFudXBzIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvbWVyZ2VDbGVhbnVwcyc7XG5pbXBvcnQgeyB1c2VJZCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZUlkJztcbmltcG9ydCB7IHVzZUlzb0xheW91dEVmZmVjdCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZUlzb0xheW91dEVmZmVjdCc7XG5pbXBvcnQgeyB1c2VTdGFibGVDYWxsYmFjayB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZVN0YWJsZUNhbGxiYWNrJztcbmltcG9ydCB7IEVNUFRZX09CSkVDVCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL2VtcHR5JztcbmltcG9ydCB7IEZvY3VzR3VhcmQgfSBmcm9tIFwiLi4vLi4vdXRpbHMvRm9jdXNHdWFyZC5qc1wiO1xuaW1wb3J0IHsgZW5hYmxlRm9jdXNJbnNpZGUsIGRpc2FibGVGb2N1c0luc2lkZSwgZ2V0UHJldmlvdXNUYWJiYWJsZSwgZ2V0TmV4dFRhYmJhYmxlLCBpc091dHNpZGVFdmVudCB9IGZyb20gXCIuLi91dGlscy90YWJiYWJsZS5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlQ2hhbmdlRXZlbnREZXRhaWxzIH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy9jcmVhdGVCYXNlVUlFdmVudERldGFpbHMuanNcIjtcbmltcG9ydCB7IFJFQVNPTlMgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL3JlYXNvbnMuanNcIjtcbmltcG9ydCB7IGNyZWF0ZUF0dHJpYnV0ZSB9IGZyb20gXCIuLi91dGlscy9jcmVhdGVBdHRyaWJ1dGUuanNcIjtcbmltcG9ydCB7IHVzZVJlbmRlckVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL3VzZVJlbmRlckVsZW1lbnQuanNcIjtcbmltcG9ydCB7IG93bmVyVmlzdWFsbHlIaWRkZW4gfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFBvcnRhbENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIFBvcnRhbENvbnRleHQuZGlzcGxheU5hbWUgPSBcIlBvcnRhbENvbnRleHRcIjtcbmV4cG9ydCBjb25zdCB1c2VQb3J0YWxDb250ZXh0ID0gKCkgPT4gUmVhY3QudXNlQ29udGV4dChQb3J0YWxDb250ZXh0KTtcbmNvbnN0IGF0dHIgPSBjcmVhdGVBdHRyaWJ1dGUoJ3BvcnRhbCcpO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUZsb2F0aW5nUG9ydGFsTm9kZShwcm9wcyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICByZWYsXG4gICAgY29udGFpbmVyOiBjb250YWluZXJQcm9wLFxuICAgIGNvbXBvbmVudFByb3BzID0gRU1QVFlfT0JKRUNULFxuICAgIGVsZW1lbnRQcm9wc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHVuaXF1ZUlkID0gdXNlSWQoKTtcbiAgY29uc3QgcG9ydGFsQ29udGV4dCA9IHVzZVBvcnRhbENvbnRleHQoKTtcbiAgY29uc3QgcGFyZW50UG9ydGFsTm9kZSA9IHBvcnRhbENvbnRleHQ/LnBvcnRhbE5vZGU7XG4gIGNvbnN0IFtjb250YWluZXJFbGVtZW50LCBzZXRDb250YWluZXJFbGVtZW50XSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbcG9ydGFsTm9kZSwgc2V0UG9ydGFsTm9kZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3Qgc2V0UG9ydGFsTm9kZVJlZiA9IHVzZVN0YWJsZUNhbGxiYWNrKG5vZGUgPT4ge1xuICAgIGlmIChub2RlICE9PSBudWxsKSB7XG4gICAgICAvLyB0aGUgdXNlSXNvTGF5b3V0RWZmZWN0IGJlbG93IHdhdGNoaW5nIGNvbnRhaW5lclByb3AgLyBwYXJlbnRQb3J0YWxOb2RlXG4gICAgICAvLyBzZXRzIHNldFBvcnRhbE5vZGUobnVsbCkgd2hlbiB0aGUgY29udGFpbmVyIGJlY29tZXMgbnVsbCBvciBjaGFuZ2VzLlxuICAgICAgLy8gU28gZXZlbiB0aG91Z2ggdGhlIHJlZiBjYWxsYmFjayBub3cgaWdub3JlcyBudWxsLCB0aGUgcG9ydGFsIG5vZGUgc3RpbGwgZ2V0cyBjbGVhcmVkLlxuICAgICAgc2V0UG9ydGFsTm9kZShub2RlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBjb250YWluZXJSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHVzZUlzb0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgLy8gV2FpdCBmb3IgdGhlIGNvbnRhaW5lciB0byBiZSByZXNvbHZlZCBpZiBleHBsaWNpdGx5IGBudWxsYC5cbiAgICBpZiAoY29udGFpbmVyUHJvcCA9PT0gbnVsbCkge1xuICAgICAgaWYgKGNvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnRhaW5lclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgc2V0UG9ydGFsTm9kZShudWxsKTtcbiAgICAgICAgc2V0Q29udGFpbmVyRWxlbWVudChudWxsKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBSZWFjdCAxNyBkb2VzIG5vdCB1c2UgUmVhY3QudXNlSWQoKS5cbiAgICBpZiAodW5pcXVlSWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXNvbHZlZENvbnRhaW5lciA9IChjb250YWluZXJQcm9wICYmIChpc05vZGUoY29udGFpbmVyUHJvcCkgPyBjb250YWluZXJQcm9wIDogY29udGFpbmVyUHJvcC5jdXJyZW50KSkgPz8gcGFyZW50UG9ydGFsTm9kZSA/PyBkb2N1bWVudC5ib2R5O1xuICAgIGlmIChyZXNvbHZlZENvbnRhaW5lciA9PSBudWxsKSB7XG4gICAgICBpZiAoY29udGFpbmVyUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY29udGFpbmVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICBzZXRQb3J0YWxOb2RlKG51bGwpO1xuICAgICAgICBzZXRDb250YWluZXJFbGVtZW50KG51bGwpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY29udGFpbmVyUmVmLmN1cnJlbnQgIT09IHJlc29sdmVkQ29udGFpbmVyKSB7XG4gICAgICBjb250YWluZXJSZWYuY3VycmVudCA9IHJlc29sdmVkQ29udGFpbmVyO1xuICAgICAgc2V0UG9ydGFsTm9kZShudWxsKTtcbiAgICAgIHNldENvbnRhaW5lckVsZW1lbnQocmVzb2x2ZWRDb250YWluZXIpO1xuICAgIH1cbiAgfSwgW2NvbnRhaW5lclByb3AsIHBhcmVudFBvcnRhbE5vZGUsIHVuaXF1ZUlkXSk7XG4gIGNvbnN0IHBvcnRhbEVsZW1lbnQgPSB1c2VSZW5kZXJFbGVtZW50KCdkaXYnLCBjb21wb25lbnRQcm9wcywge1xuICAgIHJlZjogW3JlZiwgc2V0UG9ydGFsTm9kZVJlZl0sXG4gICAgcHJvcHM6IFt7XG4gICAgICBpZDogdW5pcXVlSWQsXG4gICAgICBbYXR0cl06ICcnXG4gICAgfSwgZWxlbWVudFByb3BzXVxuICB9KTtcblxuICAvLyBUaGlzIGBjcmVhdGVQb3J0YWxgIGNhbGwgaW5qZWN0cyBgcG9ydGFsRWxlbWVudGAgaW50byB0aGUgYGNvbnRhaW5lcmAuXG4gIC8vIEFub3RoZXIgY2FsbCBpbnNpZGUgYEZsb2F0aW5nUG9ydGFsYC9gRmxvYXRpbmdQb3J0YWxMaXRlYCB0aGVuIGluamVjdHMgdGhlIGNoaWxkcmVuIGludG8gYHBvcnRhbEVsZW1lbnRgLlxuICBjb25zdCBwb3J0YWxTdWJ0cmVlID0gY29udGFpbmVyRWxlbWVudCAmJiBwb3J0YWxFbGVtZW50ID8gLyojX19QVVJFX18qL1JlYWN0RE9NLmNyZWF0ZVBvcnRhbChwb3J0YWxFbGVtZW50LCBjb250YWluZXJFbGVtZW50KSA6IG51bGw7XG4gIHJldHVybiB7XG4gICAgcG9ydGFsTm9kZSxcbiAgICBwb3J0YWxTdWJ0cmVlXG4gIH07XG59XG5cbi8qKlxuICogUG9ydGFscyB0aGUgZmxvYXRpbmcgZWxlbWVudCBpbnRvIGEgZ2l2ZW4gY29udGFpbmVyIGVsZW1lbnQg4oCUIGJ5IGRlZmF1bHQsXG4gKiBvdXRzaWRlIG9mIHRoZSBhcHAgcm9vdCBhbmQgaW50byB0aGUgYm9keS5cbiAqIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGVuc3VyZSB0aGUgZmxvYXRpbmcgZWxlbWVudCBjYW4gYXBwZWFyIG91dHNpZGUgYW55XG4gKiBwb3RlbnRpYWwgcGFyZW50IGNvbnRhaW5lcnMgdGhhdCBjYXVzZSBjbGlwcGluZyAoc3VjaCBhcyBgb3ZlcmZsb3c6IGhpZGRlbmApLFxuICogd2hpbGUgcmV0YWluaW5nIGl0cyBsb2NhdGlvbiBpbiB0aGUgUmVhY3QgdHJlZS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9GbG9hdGluZ1BvcnRhbFxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjb25zdCBGbG9hdGluZ1BvcnRhbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZsb2F0aW5nUG9ydGFsKGNvbXBvbmVudFByb3BzLCBmb3J3YXJkZWRSZWYpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGNvbnRhaW5lcixcbiAgICBjbGFzc05hbWUsXG4gICAgcmVuZGVyLFxuICAgIHJlbmRlckd1YXJkcyxcbiAgICBzdHlsZSxcbiAgICAuLi5lbGVtZW50UHJvcHNcbiAgfSA9IGNvbXBvbmVudFByb3BzO1xuICBjb25zdCB7XG4gICAgcG9ydGFsTm9kZSxcbiAgICBwb3J0YWxTdWJ0cmVlXG4gIH0gPSB1c2VGbG9hdGluZ1BvcnRhbE5vZGUoe1xuICAgIGNvbnRhaW5lcixcbiAgICByZWY6IGZvcndhcmRlZFJlZixcbiAgICBjb21wb25lbnRQcm9wcyxcbiAgICBlbGVtZW50UHJvcHNcbiAgfSk7XG4gIGNvbnN0IGJlZm9yZU91dHNpZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGFmdGVyT3V0c2lkZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgYmVmb3JlSW5zaWRlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBhZnRlckluc2lkZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgW2ZvY3VzTWFuYWdlclN0YXRlLCBzZXRGb2N1c01hbmFnZXJTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgZm9jdXNJbnNpZGVEaXNhYmxlZFJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IG1vZGFsID0gZm9jdXNNYW5hZ2VyU3RhdGU/Lm1vZGFsO1xuICBjb25zdCBvcGVuID0gZm9jdXNNYW5hZ2VyU3RhdGU/Lm9wZW47XG4gIGNvbnN0IHNob3VsZFJlbmRlckd1YXJkcyA9IHR5cGVvZiByZW5kZXJHdWFyZHMgPT09ICdib29sZWFuJyA/IHJlbmRlckd1YXJkcyA6ICEhZm9jdXNNYW5hZ2VyU3RhdGUgJiYgIWZvY3VzTWFuYWdlclN0YXRlLm1vZGFsICYmIGZvY3VzTWFuYWdlclN0YXRlLm9wZW4gJiYgISFwb3J0YWxOb2RlO1xuXG4gIC8vIGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy90YWJiYWJsZS1wb3J0YWwtZjR0bmc/ZmlsZT0vc3JjL1RhYmJhYmxlUG9ydGFsLnRzeFxuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghcG9ydGFsTm9kZSB8fCBtb2RhbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBNYWtlIHN1cmUgZWxlbWVudHMgaW5zaWRlIHRoZSBwb3J0YWwgZWxlbWVudCBhcmUgdGFiYmFibGUgb25seSB3aGVuIHRoZVxuICAgIC8vIHBvcnRhbCBoYXMgYWxyZWFkeSBiZWVuIGZvY3VzZWQsIGVpdGhlciBieSB0YWJiaW5nIGludG8gYSBmb2N1cyB0cmFwXG4gICAgLy8gZWxlbWVudCBvdXRzaWRlIG9yIHVzaW5nIHRoZSBtb3VzZS5cbiAgICBmdW5jdGlvbiBvbkZvY3VzKGV2ZW50KSB7XG4gICAgICBpZiAocG9ydGFsTm9kZSAmJiBldmVudC5yZWxhdGVkVGFyZ2V0ICYmIGlzT3V0c2lkZUV2ZW50KGV2ZW50KSkge1xuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2ZvY3VzaW4nKSB7XG4gICAgICAgICAgaWYgKGZvY3VzSW5zaWRlRGlzYWJsZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgZW5hYmxlRm9jdXNJbnNpZGUocG9ydGFsTm9kZSk7XG4gICAgICAgICAgICBmb2N1c0luc2lkZURpc2FibGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlzYWJsZUZvY3VzSW5zaWRlKHBvcnRhbE5vZGUpO1xuICAgICAgICAgIGZvY3VzSW5zaWRlRGlzYWJsZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBMaXN0ZW4gdG8gdGhlIGV2ZW50IG9uIHRoZSBjYXB0dXJlIHBoYXNlIHNvIHRoZXkgcnVuIGJlZm9yZSB0aGUgZm9jdXNcbiAgICAvLyB0cmFwIGVsZW1lbnRzIG9uRm9jdXMgcHJvcCBpcyBjYWxsZWQuXG4gICAgcmV0dXJuIG1lcmdlQ2xlYW51cHMoYWRkRXZlbnRMaXN0ZW5lcihwb3J0YWxOb2RlLCAnZm9jdXNpbicsIG9uRm9jdXMsIHRydWUpLCBhZGRFdmVudExpc3RlbmVyKHBvcnRhbE5vZGUsICdmb2N1c291dCcsIG9uRm9jdXMsIHRydWUpKTtcbiAgfSwgW3BvcnRhbE5vZGUsIG1vZGFsXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFwb3J0YWxOb2RlIHx8IG9wZW4gIT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVuYWJsZUZvY3VzSW5zaWRlKHBvcnRhbE5vZGUpO1xuICAgIGZvY3VzSW5zaWRlRGlzYWJsZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICB9LCBbb3BlbiwgcG9ydGFsTm9kZV0pO1xuICBjb25zdCBwb3J0YWxDb250ZXh0VmFsdWUgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgYmVmb3JlT3V0c2lkZVJlZixcbiAgICBhZnRlck91dHNpZGVSZWYsXG4gICAgYmVmb3JlSW5zaWRlUmVmLFxuICAgIGFmdGVySW5zaWRlUmVmLFxuICAgIHBvcnRhbE5vZGUsXG4gICAgc2V0Rm9jdXNNYW5hZ2VyU3RhdGVcbiAgfSksIFtwb3J0YWxOb2RlXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoUmVhY3QuRnJhZ21lbnQsIHtcbiAgICBjaGlsZHJlbjogW3BvcnRhbFN1YnRyZWUsIC8qI19fUFVSRV9fKi9fanN4cyhQb3J0YWxDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogcG9ydGFsQ29udGV4dFZhbHVlLFxuICAgICAgY2hpbGRyZW46IFtzaG91bGRSZW5kZXJHdWFyZHMgJiYgcG9ydGFsTm9kZSAmJiAvKiNfX1BVUkVfXyovX2pzeChGb2N1c0d1YXJkLCB7XG4gICAgICAgIFwiZGF0YS10eXBlXCI6IFwib3V0c2lkZVwiLFxuICAgICAgICByZWY6IGJlZm9yZU91dHNpZGVSZWYsXG4gICAgICAgIG9uRm9jdXM6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoaXNPdXRzaWRlRXZlbnQoZXZlbnQsIHBvcnRhbE5vZGUpKSB7XG4gICAgICAgICAgICBiZWZvcmVJbnNpZGVSZWYuY3VycmVudD8uZm9jdXMoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZG9tUmVmZXJlbmNlID0gZm9jdXNNYW5hZ2VyU3RhdGUgPyBmb2N1c01hbmFnZXJTdGF0ZS5kb21SZWZlcmVuY2UgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgcHJldlRhYmJhYmxlID0gZ2V0UHJldmlvdXNUYWJiYWJsZShkb21SZWZlcmVuY2UpO1xuICAgICAgICAgICAgcHJldlRhYmJhYmxlPy5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSksIHNob3VsZFJlbmRlckd1YXJkcyAmJiBwb3J0YWxOb2RlICYmIC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICAgIFwiYXJpYS1vd25zXCI6IHBvcnRhbE5vZGUuaWQsXG4gICAgICAgIHN0eWxlOiBvd25lclZpc3VhbGx5SGlkZGVuXG4gICAgICB9KSwgcG9ydGFsTm9kZSAmJiAvKiNfX1BVUkVfXyovUmVhY3RET00uY3JlYXRlUG9ydGFsKGNoaWxkcmVuLCBwb3J0YWxOb2RlKSwgc2hvdWxkUmVuZGVyR3VhcmRzICYmIHBvcnRhbE5vZGUgJiYgLyojX19QVVJFX18qL19qc3goRm9jdXNHdWFyZCwge1xuICAgICAgICBcImRhdGEtdHlwZVwiOiBcIm91dHNpZGVcIixcbiAgICAgICAgcmVmOiBhZnRlck91dHNpZGVSZWYsXG4gICAgICAgIG9uRm9jdXM6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoaXNPdXRzaWRlRXZlbnQoZXZlbnQsIHBvcnRhbE5vZGUpKSB7XG4gICAgICAgICAgICBhZnRlckluc2lkZVJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkb21SZWZlcmVuY2UgPSBmb2N1c01hbmFnZXJTdGF0ZSA/IGZvY3VzTWFuYWdlclN0YXRlLmRvbVJlZmVyZW5jZSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBuZXh0VGFiYmFibGUgPSBnZXROZXh0VGFiYmFibGUoZG9tUmVmZXJlbmNlKTtcbiAgICAgICAgICAgIG5leHRUYWJiYWJsZT8uZm9jdXMoKTtcbiAgICAgICAgICAgIGlmIChmb2N1c01hbmFnZXJTdGF0ZT8uY2xvc2VPbkZvY3VzT3V0KSB7XG4gICAgICAgICAgICAgIGZvY3VzTWFuYWdlclN0YXRlPy5vbk9wZW5DaGFuZ2UoZmFsc2UsIGNyZWF0ZUNoYW5nZUV2ZW50RGV0YWlscyhSRUFTT05TLmZvY3VzT3V0LCBldmVudC5uYXRpdmVFdmVudCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSldXG4gICAgfSldXG4gIH0pO1xufSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSBGbG9hdGluZ1BvcnRhbC5kaXNwbGF5TmFtZSA9IFwiRmxvYXRpbmdQb3J0YWxcIjsiXSwibmFtZXMiOlsiUmVhY3QiLCJSZWFjdERPTSIsImlzTm9kZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJtZXJnZUNsZWFudXBzIiwidXNlSWQiLCJ1c2VJc29MYXlvdXRFZmZlY3QiLCJ1c2VTdGFibGVDYWxsYmFjayIsIkVNUFRZX09CSkVDVCIsIkZvY3VzR3VhcmQiLCJlbmFibGVGb2N1c0luc2lkZSIsImRpc2FibGVGb2N1c0luc2lkZSIsImdldFByZXZpb3VzVGFiYmFibGUiLCJnZXROZXh0VGFiYmFibGUiLCJpc091dHNpZGVFdmVudCIsImNyZWF0ZUNoYW5nZUV2ZW50RGV0YWlscyIsIlJFQVNPTlMiLCJjcmVhdGVBdHRyaWJ1dGUiLCJ1c2VSZW5kZXJFbGVtZW50Iiwib3duZXJWaXN1YWxseUhpZGRlbiIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJQb3J0YWxDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJkaXNwbGF5TmFtZSIsInVzZVBvcnRhbENvbnRleHQiLCJ1c2VDb250ZXh0IiwiYXR0ciIsInVzZUZsb2F0aW5nUG9ydGFsTm9kZSIsInByb3BzIiwicmVmIiwiY29udGFpbmVyIiwiY29udGFpbmVyUHJvcCIsImNvbXBvbmVudFByb3BzIiwiZWxlbWVudFByb3BzIiwidW5pcXVlSWQiLCJwb3J0YWxDb250ZXh0IiwicGFyZW50UG9ydGFsTm9kZSIsInBvcnRhbE5vZGUiLCJjb250YWluZXJFbGVtZW50Iiwic2V0Q29udGFpbmVyRWxlbWVudCIsInVzZVN0YXRlIiwic2V0UG9ydGFsTm9kZSIsInNldFBvcnRhbE5vZGVSZWYiLCJub2RlIiwiY29udGFpbmVyUmVmIiwidXNlUmVmIiwiY3VycmVudCIsInJlc29sdmVkQ29udGFpbmVyIiwiZG9jdW1lbnQiLCJib2R5IiwicG9ydGFsRWxlbWVudCIsImlkIiwicG9ydGFsU3VidHJlZSIsImNyZWF0ZVBvcnRhbCIsIkZsb2F0aW5nUG9ydGFsIiwiZm9yd2FyZFJlZiIsImZvcndhcmRlZFJlZiIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwicmVuZGVyIiwicmVuZGVyR3VhcmRzIiwic3R5bGUiLCJiZWZvcmVPdXRzaWRlUmVmIiwiYWZ0ZXJPdXRzaWRlUmVmIiwiYmVmb3JlSW5zaWRlUmVmIiwiYWZ0ZXJJbnNpZGVSZWYiLCJmb2N1c01hbmFnZXJTdGF0ZSIsInNldEZvY3VzTWFuYWdlclN0YXRlIiwiZm9jdXNJbnNpZGVEaXNhYmxlZFJlZiIsIm1vZGFsIiwib3BlbiIsInNob3VsZFJlbmRlckd1YXJkcyIsInVzZUVmZmVjdCIsInVuZGVmaW5lZCIsIm9uRm9jdXMiLCJldmVudCIsInJlbGF0ZWRUYXJnZXQiLCJ0eXBlIiwicG9ydGFsQ29udGV4dFZhbHVlIiwidXNlTWVtbyIsIkZyYWdtZW50IiwiUHJvdmlkZXIiLCJ2YWx1ZSIsImZvY3VzIiwiZG9tUmVmZXJlbmNlIiwicHJldlRhYmJhYmxlIiwibmV4dFRhYmJhYmxlIiwiY2xvc2VPbkZvY3VzT3V0Iiwib25PcGVuQ2hhbmdlIiwiZm9jdXNPdXQiLCJuYXRpdmVFdmVudCJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingPortal.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingRootStore.js":
|
||
/*!*******************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingRootStore.js ***!
|
||
\*******************************************************************************************/
|
||
/***/ ((__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 */ FloatingRootStore: () => (/* binding */ FloatingRootStore)\n/* harmony export */ });\n/* harmony import */ var _base_ui_utils_store__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @base-ui/utils/store */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/createSelector.js\");\n/* harmony import */ var _base_ui_utils_store__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @base-ui/utils/store */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/ReactStore.js\");\n/* harmony import */ var _utils_createEventEmitter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/createEventEmitter.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/createEventEmitter.js\");\n/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/event.js\");\n\n\n\nconst selectors = {\n open: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_0__.createSelector)(state => state.open),\n transitionStatus: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_0__.createSelector)(state => state.transitionStatus),\n domReferenceElement: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_0__.createSelector)(state => state.domReferenceElement),\n referenceElement: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_0__.createSelector)(state => state.positionReference ?? state.referenceElement),\n floatingElement: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_0__.createSelector)(state => state.floatingElement),\n floatingId: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_0__.createSelector)(state => state.floatingId)\n};\nclass FloatingRootStore extends _base_ui_utils_store__WEBPACK_IMPORTED_MODULE_1__.ReactStore {\n constructor(options) {\n const {\n syncOnly,\n nested,\n onOpenChange,\n triggerElements,\n ...initialState\n } = options;\n super({\n ...initialState,\n positionReference: initialState.referenceElement,\n domReferenceElement: initialState.referenceElement\n }, {\n onOpenChange,\n dataRef: {\n current: {}\n },\n events: (0,_utils_createEventEmitter_js__WEBPACK_IMPORTED_MODULE_2__.createEventEmitter)(),\n nested,\n triggerElements\n }, selectors);\n this.syncOnly = syncOnly;\n }\n\n /**\n * Syncs the event used by hover logic to distinguish hover-open from click-like interaction.\n */\n syncOpenEvent = (newOpen, event) => {\n if (!newOpen || !this.state.open ||\n // Prevent a pending hover-open from overwriting a click-open event, while allowing\n // click events to upgrade a hover-open.\n event != null && (0,_utils_js__WEBPACK_IMPORTED_MODULE_3__.isClickLikeEvent)(event)) {\n this.context.dataRef.current.openEvent = newOpen ? event : undefined;\n }\n };\n\n /**\n * Runs the root-owned side effects for an open state change.\n */\n dispatchOpenChange = (newOpen, eventDetails) => {\n this.syncOpenEvent(newOpen, eventDetails.event);\n const details = {\n open: newOpen,\n reason: eventDetails.reason,\n nativeEvent: eventDetails.event,\n nested: this.context.nested,\n triggerElement: eventDetails.trigger\n };\n this.context.events.emit('openchange', details);\n };\n\n /**\n * Emits the `openchange` event through the internal event emitter and calls the `onOpenChange` handler with the provided arguments.\n *\n * @param newOpen The new open state.\n * @param eventDetails Details about the event that triggered the open state change.\n */\n setOpen = (newOpen, eventDetails) => {\n if (this.syncOnly) {\n this.context.onOpenChange?.(newOpen, eventDetails);\n return;\n }\n this.dispatchOpenChange(newOpen, eventDetails);\n this.context.onOpenChange?.(newOpen, eventDetails);\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvY29tcG9uZW50cy9GbG9hdGluZ1Jvb3RTdG9yZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFrRTtBQUNFO0FBQ3JCO0FBQy9DO0FBQ0EsUUFBUSxvRUFBYztBQUN0QixvQkFBb0Isb0VBQWM7QUFDbEMsdUJBQXVCLG9FQUFjO0FBQ3JDLG9CQUFvQixvRUFBYztBQUNsQyxtQkFBbUIsb0VBQWM7QUFDakMsY0FBYyxvRUFBYztBQUM1QjtBQUNPLGdDQUFnQyw0REFBVTtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1AsY0FBYyxnRkFBa0I7QUFDaEM7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLDJEQUFnQjtBQUNyQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2Zsb2F0aW5nLXVpLXJlYWN0L2NvbXBvbmVudHMvRmxvYXRpbmdSb290U3RvcmUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlU2VsZWN0b3IsIFJlYWN0U3RvcmUgfSBmcm9tICdAYmFzZS11aS91dGlscy9zdG9yZSc7XG5pbXBvcnQgeyBjcmVhdGVFdmVudEVtaXR0ZXIgfSBmcm9tIFwiLi4vdXRpbHMvY3JlYXRlRXZlbnRFbWl0dGVyLmpzXCI7XG5pbXBvcnQgeyBpc0NsaWNrTGlrZUV2ZW50IH0gZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5jb25zdCBzZWxlY3RvcnMgPSB7XG4gIG9wZW46IGNyZWF0ZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLm9wZW4pLFxuICB0cmFuc2l0aW9uU3RhdHVzOiBjcmVhdGVTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS50cmFuc2l0aW9uU3RhdHVzKSxcbiAgZG9tUmVmZXJlbmNlRWxlbWVudDogY3JlYXRlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUuZG9tUmVmZXJlbmNlRWxlbWVudCksXG4gIHJlZmVyZW5jZUVsZW1lbnQ6IGNyZWF0ZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLnBvc2l0aW9uUmVmZXJlbmNlID8/IHN0YXRlLnJlZmVyZW5jZUVsZW1lbnQpLFxuICBmbG9hdGluZ0VsZW1lbnQ6IGNyZWF0ZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLmZsb2F0aW5nRWxlbWVudCksXG4gIGZsb2F0aW5nSWQ6IGNyZWF0ZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLmZsb2F0aW5nSWQpXG59O1xuZXhwb3J0IGNsYXNzIEZsb2F0aW5nUm9vdFN0b3JlIGV4dGVuZHMgUmVhY3RTdG9yZSB7XG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBzeW5jT25seSxcbiAgICAgIG5lc3RlZCxcbiAgICAgIG9uT3BlbkNoYW5nZSxcbiAgICAgIHRyaWdnZXJFbGVtZW50cyxcbiAgICAgIC4uLmluaXRpYWxTdGF0ZVxuICAgIH0gPSBvcHRpb25zO1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLmluaXRpYWxTdGF0ZSxcbiAgICAgIHBvc2l0aW9uUmVmZXJlbmNlOiBpbml0aWFsU3RhdGUucmVmZXJlbmNlRWxlbWVudCxcbiAgICAgIGRvbVJlZmVyZW5jZUVsZW1lbnQ6IGluaXRpYWxTdGF0ZS5yZWZlcmVuY2VFbGVtZW50XG4gICAgfSwge1xuICAgICAgb25PcGVuQ2hhbmdlLFxuICAgICAgZGF0YVJlZjoge1xuICAgICAgICBjdXJyZW50OiB7fVxuICAgICAgfSxcbiAgICAgIGV2ZW50czogY3JlYXRlRXZlbnRFbWl0dGVyKCksXG4gICAgICBuZXN0ZWQsXG4gICAgICB0cmlnZ2VyRWxlbWVudHNcbiAgICB9LCBzZWxlY3RvcnMpO1xuICAgIHRoaXMuc3luY09ubHkgPSBzeW5jT25seTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jcyB0aGUgZXZlbnQgdXNlZCBieSBob3ZlciBsb2dpYyB0byBkaXN0aW5ndWlzaCBob3Zlci1vcGVuIGZyb20gY2xpY2stbGlrZSBpbnRlcmFjdGlvbi5cbiAgICovXG4gIHN5bmNPcGVuRXZlbnQgPSAobmV3T3BlbiwgZXZlbnQpID0+IHtcbiAgICBpZiAoIW5ld09wZW4gfHwgIXRoaXMuc3RhdGUub3BlbiB8fFxuICAgIC8vIFByZXZlbnQgYSBwZW5kaW5nIGhvdmVyLW9wZW4gZnJvbSBvdmVyd3JpdGluZyBhIGNsaWNrLW9wZW4gZXZlbnQsIHdoaWxlIGFsbG93aW5nXG4gICAgLy8gY2xpY2sgZXZlbnRzIHRvIHVwZ3JhZGUgYSBob3Zlci1vcGVuLlxuICAgIGV2ZW50ICE9IG51bGwgJiYgaXNDbGlja0xpa2VFdmVudChldmVudCkpIHtcbiAgICAgIHRoaXMuY29udGV4dC5kYXRhUmVmLmN1cnJlbnQub3BlbkV2ZW50ID0gbmV3T3BlbiA/IGV2ZW50IDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogUnVucyB0aGUgcm9vdC1vd25lZCBzaWRlIGVmZmVjdHMgZm9yIGFuIG9wZW4gc3RhdGUgY2hhbmdlLlxuICAgKi9cbiAgZGlzcGF0Y2hPcGVuQ2hhbmdlID0gKG5ld09wZW4sIGV2ZW50RGV0YWlscykgPT4ge1xuICAgIHRoaXMuc3luY09wZW5FdmVudChuZXdPcGVuLCBldmVudERldGFpbHMuZXZlbnQpO1xuICAgIGNvbnN0IGRldGFpbHMgPSB7XG4gICAgICBvcGVuOiBuZXdPcGVuLFxuICAgICAgcmVhc29uOiBldmVudERldGFpbHMucmVhc29uLFxuICAgICAgbmF0aXZlRXZlbnQ6IGV2ZW50RGV0YWlscy5ldmVudCxcbiAgICAgIG5lc3RlZDogdGhpcy5jb250ZXh0Lm5lc3RlZCxcbiAgICAgIHRyaWdnZXJFbGVtZW50OiBldmVudERldGFpbHMudHJpZ2dlclxuICAgIH07XG4gICAgdGhpcy5jb250ZXh0LmV2ZW50cy5lbWl0KCdvcGVuY2hhbmdlJywgZGV0YWlscyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIEVtaXRzIHRoZSBgb3BlbmNoYW5nZWAgZXZlbnQgdGhyb3VnaCB0aGUgaW50ZXJuYWwgZXZlbnQgZW1pdHRlciBhbmQgY2FsbHMgdGhlIGBvbk9wZW5DaGFuZ2VgIGhhbmRsZXIgd2l0aCB0aGUgcHJvdmlkZWQgYXJndW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0gbmV3T3BlbiBUaGUgbmV3IG9wZW4gc3RhdGUuXG4gICAqIEBwYXJhbSBldmVudERldGFpbHMgRGV0YWlscyBhYm91dCB0aGUgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIG9wZW4gc3RhdGUgY2hhbmdlLlxuICAgKi9cbiAgc2V0T3BlbiA9IChuZXdPcGVuLCBldmVudERldGFpbHMpID0+IHtcbiAgICBpZiAodGhpcy5zeW5jT25seSkge1xuICAgICAgdGhpcy5jb250ZXh0Lm9uT3BlbkNoYW5nZT8uKG5ld09wZW4sIGV2ZW50RGV0YWlscyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZGlzcGF0Y2hPcGVuQ2hhbmdlKG5ld09wZW4sIGV2ZW50RGV0YWlscyk7XG4gICAgdGhpcy5jb250ZXh0Lm9uT3BlbkNoYW5nZT8uKG5ld09wZW4sIGV2ZW50RGV0YWlscyk7XG4gIH07XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingRootStore.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTree.js":
|
||
/*!**************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTree.js ***!
|
||
\**************************************************************************************/
|
||
/***/ ((__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 */ FloatingNode: () => (/* binding */ FloatingNode),\n/* harmony export */ FloatingTree: () => (/* binding */ FloatingTree),\n/* harmony export */ useFloatingNodeId: () => (/* binding */ useFloatingNodeId),\n/* harmony export */ useFloatingParentNodeId: () => (/* binding */ useFloatingParentNodeId),\n/* harmony export */ useFloatingTree: () => (/* binding */ useFloatingTree)\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 _base_ui_utils_useId__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/utils/useId */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useId.js\");\n/* harmony import */ var _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @base-ui/utils/useIsoLayoutEffect */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _base_ui_utils_useRefWithInit__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @base-ui/utils/useRefWithInit */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useRefWithInit.js\");\n/* harmony import */ var _FloatingTreeStore_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./FloatingTreeStore.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTreeStore.js\");\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__ useFloatingParentNodeId,useFloatingTree,useFloatingNodeId,FloatingNode,FloatingTree auto */ var _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$(), _s3 = $RefreshSig$(), _s4 = $RefreshSig$();\n\n\n\n\n\n\nconst FloatingNodeContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);\nif (true) FloatingNodeContext.displayName = \"FloatingNodeContext\";\nconst FloatingTreeContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);\n/**\n * Returns the parent node id for nested floating elements, if available.\n * Returns `null` for top-level floating elements.\n */ if (true) FloatingTreeContext.displayName = \"FloatingTreeContext\";\nconst useFloatingParentNodeId = ()=>{\n var _React_useContext;\n _s();\n return ((_React_useContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext(FloatingNodeContext)) === null || _React_useContext === void 0 ? void 0 : _React_useContext.id) || null;\n};\n_s(useFloatingParentNodeId, \"gDsCjeeItUuvgOWf1v4qoK9RF6k=\");\n/**\n * Returns the nearest floating tree context, if available.\n */ const useFloatingTree = (externalTree)=>{\n _s1();\n const contextTree = react__WEBPACK_IMPORTED_MODULE_0__.useContext(FloatingTreeContext);\n return externalTree !== null && externalTree !== void 0 ? externalTree : contextTree;\n};\n_s1(useFloatingTree, \"gtFtqhiveH/KyXk3hyrC6URaMKk=\");\n/**\n * Registers a node into the `FloatingTree`, returning its id.\n * @see https://floating-ui.com/docs/FloatingTree\n */ function useFloatingNodeId(externalTree) {\n _s2();\n const id = (0,_base_ui_utils_useId__WEBPACK_IMPORTED_MODULE_2__.useId)();\n const tree = useFloatingTree(externalTree);\n const parentId = useFloatingParentNodeId();\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_3__.useIsoLayoutEffect)({\n \"useFloatingNodeId.useIsoLayoutEffect\": ()=>{\n if (!id) {\n return undefined;\n }\n const node = {\n id,\n parentId\n };\n tree === null || tree === void 0 ? void 0 : tree.addNode(node);\n return ({\n \"useFloatingNodeId.useIsoLayoutEffect\": ()=>{\n tree === null || tree === void 0 ? void 0 : tree.removeNode(node);\n }\n })[\"useFloatingNodeId.useIsoLayoutEffect\"];\n }\n }[\"useFloatingNodeId.useIsoLayoutEffect\"], [\n tree,\n id,\n parentId\n ]);\n return id;\n}\n_s2(useFloatingNodeId, \"0jEmHSm55GvmXdURy/XDphfCtsw=\", false, function() {\n return [\n _base_ui_utils_useId__WEBPACK_IMPORTED_MODULE_2__.useId,\n useFloatingTree,\n useFloatingParentNodeId,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_3__.useIsoLayoutEffect\n ];\n});\n/**\n * Provides parent node context for nested floating elements.\n * @see https://floating-ui.com/docs/FloatingTree\n * @internal\n */ function FloatingNode(props) {\n _s3();\n const { children, id } = props;\n const parentId = useFloatingParentNodeId();\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(FloatingNodeContext.Provider, {\n value: react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"FloatingNode.useMemo\": ()=>({\n id,\n parentId\n })\n }[\"FloatingNode.useMemo\"], [\n id,\n parentId\n ]),\n children: children\n });\n}\n_s3(FloatingNode, \"9Lx7CtjR76vFtELfeFJiwD5JJtg=\", false, function() {\n return [\n useFloatingParentNodeId\n ];\n});\n_c = FloatingNode;\n/**\n * Provides context for nested floating elements when they are not children of\n * each other on the DOM.\n * This is not necessary in all cases, except when there must be explicit communication between parent and child floating elements. It is necessary for:\n * - The `bubbles` option in the `useDismiss()` Hook\n * - Nested virtual list navigation\n * - Nested floating elements that each open on hover\n * - Custom communication between parent and child floating elements\n * @see https://floating-ui.com/docs/FloatingTree\n * @internal\n */ function FloatingTree(props) {\n _s4();\n const { children, externalTree } = props;\n const tree = (0,_base_ui_utils_useRefWithInit__WEBPACK_IMPORTED_MODULE_4__.useRefWithInit)({\n \"FloatingTree.useRefWithInit\": ()=>externalTree !== null && externalTree !== void 0 ? externalTree : new _FloatingTreeStore_js__WEBPACK_IMPORTED_MODULE_5__.FloatingTreeStore()\n }[\"FloatingTree.useRefWithInit\"]).current;\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(FloatingTreeContext.Provider, {\n value: tree,\n children: children\n });\n}\n_s4(FloatingTree, \"oQbPAXdueTtWFt9UXBECGeO6MaU=\", false, function() {\n return [\n _base_ui_utils_useRefWithInit__WEBPACK_IMPORTED_MODULE_4__.useRefWithInit\n ];\n});\n_c1 = FloatingTree;\nvar _c, _c1;\n$RefreshReg$(_c, \"FloatingNode\");\n$RefreshReg$(_c1, \"FloatingTree\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvY29tcG9uZW50cy9GbG9hdGluZ1RyZWUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBRStCO0FBQ2M7QUFDMEI7QUFDUjtBQUNKO0FBQ1g7QUFDaEQsTUFBTU8sc0JBQXNCLFdBQVcsR0FBRVAsZ0RBQW1CLENBQUM7QUFDN0QsSUFBSVMsSUFBcUMsRUFBRUYsb0JBQW9CRyxXQUFXLEdBQUc7QUFDN0UsTUFBTUMsc0JBQXNCLFdBQVcsR0FBRVgsZ0RBQW1CLENBQUM7QUFFN0Q7OztDQUdDLEdBQ0QsSUFBSVMsSUFBcUMsRUFBRUUsb0JBQW9CRCxXQUFXLEdBQUc7QUFDdEUsTUFBTUUsMEJBQTBCO1FBQU1aOztJQUFBQSxPQUFBQSxFQUFBQSxvQkFBQUEsNkNBQWdCLENBQUNPLGtDQUFqQlAsd0NBQUFBLGtCQUF1Q2MsRUFBRSxLQUFJO0FBQUcsRUFBRTtHQUFsRkY7QUFFYjs7Q0FFQyxHQUNNLE1BQU1HLGtCQUFrQkMsQ0FBQUE7O0lBQzdCLE1BQU1DLGNBQWNqQiw2Q0FBZ0IsQ0FBQ1c7SUFDckMsT0FBT0sseUJBQUFBLDBCQUFBQSxlQUFnQkM7QUFDekIsRUFBRTtJQUhXRjtBQUtiOzs7Q0FHQyxHQUNNLFNBQVNHLGtCQUFrQkYsWUFBWTs7SUFDNUMsTUFBTUYsS0FBS2IsMkRBQUtBO0lBQ2hCLE1BQU1rQixPQUFPSixnQkFBZ0JDO0lBQzdCLE1BQU1JLFdBQVdSO0lBQ2pCVixxRkFBa0JBO2dEQUFDO1lBQ2pCLElBQUksQ0FBQ1ksSUFBSTtnQkFDUCxPQUFPTztZQUNUO1lBQ0EsTUFBTUMsT0FBTztnQkFDWFI7Z0JBQ0FNO1lBQ0Y7WUFDQUQsaUJBQUFBLDJCQUFBQSxLQUFNSSxPQUFPLENBQUNEO1lBQ2Q7d0RBQU87b0JBQ0xILGlCQUFBQSwyQkFBQUEsS0FBTUssVUFBVSxDQUFDRjtnQkFDbkI7O1FBQ0Y7K0NBQUc7UUFBQ0g7UUFBTUw7UUFBSU07S0FBUztJQUN2QixPQUFPTjtBQUNUO0lBbEJnQkk7O1FBQ0hqQix1REFBS0E7UUFDSGM7UUFDSUg7UUFDakJWLGlGQUFrQkE7OztBQWVwQjs7OztDQUlDLEdBQ00sU0FBU3VCLGFBQWFDLEtBQUs7O0lBQ2hDLE1BQU0sRUFDSkMsUUFBUSxFQUNSYixFQUFFLEVBQ0gsR0FBR1k7SUFDSixNQUFNTixXQUFXUjtJQUNqQixPQUFPLFdBQVcsR0FBRU4sc0RBQUlBLENBQUNDLG9CQUFvQnFCLFFBQVEsRUFBRTtRQUNyREMsT0FBTzdCLDBDQUFhO29DQUFDLElBQU87b0JBQzFCYztvQkFDQU07Z0JBQ0Y7bUNBQUk7WUFBQ047WUFBSU07U0FBUztRQUNsQk8sVUFBVUE7SUFDWjtBQUNGO0lBYmdCRjs7UUFLR2I7OztLQUxIYTtBQWNoQjs7Ozs7Ozs7OztDQVVDLEdBQ00sU0FBU00sYUFBYUwsS0FBSzs7SUFDaEMsTUFBTSxFQUNKQyxRQUFRLEVBQ1JYLFlBQVksRUFDYixHQUFHVTtJQUNKLE1BQU1QLE9BQU9oQiw2RUFBY0E7dUNBQUMsSUFBTWEseUJBQUFBLDBCQUFBQSxlQUFnQixJQUFJWixvRUFBaUJBO3NDQUFJNEIsT0FBTztJQUNsRixPQUFPLFdBQVcsR0FBRTFCLHNEQUFJQSxDQUFDSyxvQkFBb0JpQixRQUFRLEVBQUU7UUFDckRDLE9BQU9WO1FBQ1BRLFVBQVVBO0lBQ1o7QUFDRjtJQVZnQkk7O1FBS0Q1Qix5RUFBY0E7OztNQUxiNEIiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2Zsb2F0aW5nLXVpLXJlYWN0L2NvbXBvbmVudHMvRmxvYXRpbmdUcmVlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tICdAYmFzZS11aS91dGlscy91c2VJZCc7XG5pbXBvcnQgeyB1c2VJc29MYXlvdXRFZmZlY3QgfSBmcm9tICdAYmFzZS11aS91dGlscy91c2VJc29MYXlvdXRFZmZlY3QnO1xuaW1wb3J0IHsgdXNlUmVmV2l0aEluaXQgfSBmcm9tICdAYmFzZS11aS91dGlscy91c2VSZWZXaXRoSW5pdCc7XG5pbXBvcnQgeyBGbG9hdGluZ1RyZWVTdG9yZSB9IGZyb20gXCIuL0Zsb2F0aW5nVHJlZVN0b3JlLmpzXCI7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgRmxvYXRpbmdOb2RlQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgRmxvYXRpbmdOb2RlQ29udGV4dC5kaXNwbGF5TmFtZSA9IFwiRmxvYXRpbmdOb2RlQ29udGV4dFwiO1xuY29uc3QgRmxvYXRpbmdUcmVlQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpO1xuXG4vKipcbiAqIFJldHVybnMgdGhlIHBhcmVudCBub2RlIGlkIGZvciBuZXN0ZWQgZmxvYXRpbmcgZWxlbWVudHMsIGlmIGF2YWlsYWJsZS5cbiAqIFJldHVybnMgYG51bGxgIGZvciB0b3AtbGV2ZWwgZmxvYXRpbmcgZWxlbWVudHMuXG4gKi9cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIEZsb2F0aW5nVHJlZUNvbnRleHQuZGlzcGxheU5hbWUgPSBcIkZsb2F0aW5nVHJlZUNvbnRleHRcIjtcbmV4cG9ydCBjb25zdCB1c2VGbG9hdGluZ1BhcmVudE5vZGVJZCA9ICgpID0+IFJlYWN0LnVzZUNvbnRleHQoRmxvYXRpbmdOb2RlQ29udGV4dCk/LmlkIHx8IG51bGw7XG5cbi8qKlxuICogUmV0dXJucyB0aGUgbmVhcmVzdCBmbG9hdGluZyB0cmVlIGNvbnRleHQsIGlmIGF2YWlsYWJsZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZUZsb2F0aW5nVHJlZSA9IGV4dGVybmFsVHJlZSA9PiB7XG4gIGNvbnN0IGNvbnRleHRUcmVlID0gUmVhY3QudXNlQ29udGV4dChGbG9hdGluZ1RyZWVDb250ZXh0KTtcbiAgcmV0dXJuIGV4dGVybmFsVHJlZSA/PyBjb250ZXh0VHJlZTtcbn07XG5cbi8qKlxuICogUmVnaXN0ZXJzIGEgbm9kZSBpbnRvIHRoZSBgRmxvYXRpbmdUcmVlYCwgcmV0dXJuaW5nIGl0cyBpZC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9GbG9hdGluZ1RyZWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUZsb2F0aW5nTm9kZUlkKGV4dGVybmFsVHJlZSkge1xuICBjb25zdCBpZCA9IHVzZUlkKCk7XG4gIGNvbnN0IHRyZWUgPSB1c2VGbG9hdGluZ1RyZWUoZXh0ZXJuYWxUcmVlKTtcbiAgY29uc3QgcGFyZW50SWQgPSB1c2VGbG9hdGluZ1BhcmVudE5vZGVJZCgpO1xuICB1c2VJc29MYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICBpZCxcbiAgICAgIHBhcmVudElkXG4gICAgfTtcbiAgICB0cmVlPy5hZGROb2RlKG5vZGUpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0cmVlPy5yZW1vdmVOb2RlKG5vZGUpO1xuICAgIH07XG4gIH0sIFt0cmVlLCBpZCwgcGFyZW50SWRdKTtcbiAgcmV0dXJuIGlkO1xufVxuLyoqXG4gKiBQcm92aWRlcyBwYXJlbnQgbm9kZSBjb250ZXh0IGZvciBuZXN0ZWQgZmxvYXRpbmcgZWxlbWVudHMuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvRmxvYXRpbmdUcmVlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIEZsb2F0aW5nTm9kZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2hpbGRyZW4sXG4gICAgaWRcbiAgfSA9IHByb3BzO1xuICBjb25zdCBwYXJlbnRJZCA9IHVzZUZsb2F0aW5nUGFyZW50Tm9kZUlkKCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChGbG9hdGluZ05vZGVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICAgIGlkLFxuICAgICAgcGFyZW50SWRcbiAgICB9KSwgW2lkLCBwYXJlbnRJZF0pLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KTtcbn1cbi8qKlxuICogUHJvdmlkZXMgY29udGV4dCBmb3IgbmVzdGVkIGZsb2F0aW5nIGVsZW1lbnRzIHdoZW4gdGhleSBhcmUgbm90IGNoaWxkcmVuIG9mXG4gKiBlYWNoIG90aGVyIG9uIHRoZSBET00uXG4gKiBUaGlzIGlzIG5vdCBuZWNlc3NhcnkgaW4gYWxsIGNhc2VzLCBleGNlcHQgd2hlbiB0aGVyZSBtdXN0IGJlIGV4cGxpY2l0IGNvbW11bmljYXRpb24gYmV0d2VlbiBwYXJlbnQgYW5kIGNoaWxkIGZsb2F0aW5nIGVsZW1lbnRzLiBJdCBpcyBuZWNlc3NhcnkgZm9yOlxuICogLSBUaGUgYGJ1YmJsZXNgIG9wdGlvbiBpbiB0aGUgYHVzZURpc21pc3MoKWAgSG9va1xuICogLSBOZXN0ZWQgdmlydHVhbCBsaXN0IG5hdmlnYXRpb25cbiAqIC0gTmVzdGVkIGZsb2F0aW5nIGVsZW1lbnRzIHRoYXQgZWFjaCBvcGVuIG9uIGhvdmVyXG4gKiAtIEN1c3RvbSBjb21tdW5pY2F0aW9uIGJldHdlZW4gcGFyZW50IGFuZCBjaGlsZCBmbG9hdGluZyBlbGVtZW50c1xuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL0Zsb2F0aW5nVHJlZVxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBGbG9hdGluZ1RyZWUocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGV4dGVybmFsVHJlZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHRyZWUgPSB1c2VSZWZXaXRoSW5pdCgoKSA9PiBleHRlcm5hbFRyZWUgPz8gbmV3IEZsb2F0aW5nVHJlZVN0b3JlKCkpLmN1cnJlbnQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChGbG9hdGluZ1RyZWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRyZWUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH0pO1xufSJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZUlkIiwidXNlSXNvTGF5b3V0RWZmZWN0IiwidXNlUmVmV2l0aEluaXQiLCJGbG9hdGluZ1RyZWVTdG9yZSIsImpzeCIsIl9qc3giLCJGbG9hdGluZ05vZGVDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJkaXNwbGF5TmFtZSIsIkZsb2F0aW5nVHJlZUNvbnRleHQiLCJ1c2VGbG9hdGluZ1BhcmVudE5vZGVJZCIsInVzZUNvbnRleHQiLCJpZCIsInVzZUZsb2F0aW5nVHJlZSIsImV4dGVybmFsVHJlZSIsImNvbnRleHRUcmVlIiwidXNlRmxvYXRpbmdOb2RlSWQiLCJ0cmVlIiwicGFyZW50SWQiLCJ1bmRlZmluZWQiLCJub2RlIiwiYWRkTm9kZSIsInJlbW92ZU5vZGUiLCJGbG9hdGluZ05vZGUiLCJwcm9wcyIsImNoaWxkcmVuIiwiUHJvdmlkZXIiLCJ2YWx1ZSIsInVzZU1lbW8iLCJGbG9hdGluZ1RyZWUiLCJjdXJyZW50Il0sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTree.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTreeStore.js":
|
||
/*!*******************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTreeStore.js ***!
|
||
\*******************************************************************************************/
|
||
/***/ ((__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 */ FloatingTreeStore: () => (/* binding */ FloatingTreeStore)\n/* harmony export */ });\n/* harmony import */ var _utils_createEventEmitter_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../utils/createEventEmitter.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/createEventEmitter.js\");\n\n\n/**\n * Stores and manages floating elements in a tree structure.\n * This is a backing store for the `FloatingTree` component.\n */\nclass FloatingTreeStore {\n nodesRef = {\n current: []\n };\n events = (0,_utils_createEventEmitter_js__WEBPACK_IMPORTED_MODULE_0__.createEventEmitter)();\n addNode(node) {\n this.nodesRef.current.push(node);\n }\n removeNode(node) {\n const index = this.nodesRef.current.findIndex(n => n === node);\n if (index !== -1) {\n this.nodesRef.current.splice(index, 1);\n }\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvY29tcG9uZW50cy9GbG9hdGluZ1RyZWVTdG9yZS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUFvRTs7QUFFcEU7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0ZBQWtCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9mbG9hdGluZy11aS1yZWFjdC9jb21wb25lbnRzL0Zsb2F0aW5nVHJlZVN0b3JlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUV2ZW50RW1pdHRlciB9IGZyb20gXCIuLi91dGlscy9jcmVhdGVFdmVudEVtaXR0ZXIuanNcIjtcblxuLyoqXG4gKiBTdG9yZXMgYW5kIG1hbmFnZXMgZmxvYXRpbmcgZWxlbWVudHMgaW4gYSB0cmVlIHN0cnVjdHVyZS5cbiAqIFRoaXMgaXMgYSBiYWNraW5nIHN0b3JlIGZvciB0aGUgYEZsb2F0aW5nVHJlZWAgY29tcG9uZW50LlxuICovXG5leHBvcnQgY2xhc3MgRmxvYXRpbmdUcmVlU3RvcmUge1xuICBub2Rlc1JlZiA9IHtcbiAgICBjdXJyZW50OiBbXVxuICB9O1xuICBldmVudHMgPSBjcmVhdGVFdmVudEVtaXR0ZXIoKTtcbiAgYWRkTm9kZShub2RlKSB7XG4gICAgdGhpcy5ub2Rlc1JlZi5jdXJyZW50LnB1c2gobm9kZSk7XG4gIH1cbiAgcmVtb3ZlTm9kZShub2RlKSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLm5vZGVzUmVmLmN1cnJlbnQuZmluZEluZGV4KG4gPT4gbiA9PT0gbm9kZSk7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5ub2Rlc1JlZi5jdXJyZW50LnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTreeStore.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useClick.js":
|
||
/*!*****************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useClick.js ***!
|
||
\*****************************************************************************/
|
||
/***/ ((__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 */ useClick: () => (/* binding */ useClick)\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 _base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/utils/useAnimationFrame */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useAnimationFrame.js\");\n/* harmony import */ var _base_ui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @base-ui/utils/useTimeout */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useTimeout.js\");\n/* harmony import */ var _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @base-ui/utils/empty */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js\");\n/* harmony import */ var _utils_element_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/element.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/shadowDom.js\");\n/* harmony import */ var _utils_element_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/element.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/element.js\");\n/* harmony import */ var _utils_event_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/event.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/event.js\");\n/* harmony import */ var _internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../internals/createBaseUIEventDetails.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.js\");\n/* harmony import */ var _internals_reasons_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../internals/reasons.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/reason-parts.js\");\n/* __next_internal_client_entry_do_not_use__ useClick auto */ var _s = $RefreshSig$();\n\n\n\n\n\n\n\n\n/**\n * Opens or closes the floating element when clicking the reference element.\n * @see https://floating-ui.com/docs/useClick\n */ function useClick(context) {\n let props = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n _s();\n const store = 'rootStore' in context ? context.rootStore : context;\n const dataRef = store.context.dataRef;\n const { enabled = true, event: eventOption = 'click', toggle = true, ignoreMouse = false, stickIfOpen = true, touchOpenDelay = 0, reason = _internals_reasons_js__WEBPACK_IMPORTED_MODULE_1__.triggerPress } = props;\n const pointerTypeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(undefined);\n const frame = (0,_base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_2__.useAnimationFrame)();\n const touchOpenTimeout = (0,_base_ui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_3__.useTimeout)();\n const reference = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"useClick.useMemo[reference]\": ()=>({\n onPointerDown (event) {\n pointerTypeRef.current = event.pointerType;\n },\n onMouseDown (event) {\n const pointerType = pointerTypeRef.current;\n const nativeEvent = event.nativeEvent;\n const open = store.select('open');\n // Ignore all buttons except for the \"main\" button.\n // https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/button\n if (event.button !== 0 || eventOption === 'click' || (0,_utils_event_js__WEBPACK_IMPORTED_MODULE_4__.isMouseLikePointerType)(pointerType, true) && ignoreMouse) {\n return;\n }\n const openEvent = dataRef.current.openEvent;\n const openEventType = openEvent === null || openEvent === void 0 ? void 0 : openEvent.type;\n const hasClickedOnInactiveTrigger = store.select('domReferenceElement') !== event.currentTarget;\n const nextOpen = open && hasClickedOnInactiveTrigger || !(open && toggle && (openEvent && stickIfOpen ? openEventType === 'click' || openEventType === 'mousedown' : true));\n // Animations sometimes won't run on a typeable element if using a rAF.\n // Focus is always set on these elements. For touch, we may delay opening.\n const target = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_5__.getTarget)(nativeEvent);\n if ((0,_utils_element_js__WEBPACK_IMPORTED_MODULE_6__.isTypeableElement)(target)) {\n const details = (0,_internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_7__.createChangeEventDetails)(reason, nativeEvent, target);\n if (nextOpen && pointerType === 'touch' && touchOpenDelay > 0) {\n touchOpenTimeout.start(touchOpenDelay, {\n \"useClick.useMemo[reference]\": ()=>{\n store.setOpen(true, details);\n }\n }[\"useClick.useMemo[reference]\"]);\n } else {\n store.setOpen(nextOpen, details);\n }\n return;\n }\n // Capture the currentTarget before the rAF.\n // as React sets it to null after the event handler completes.\n const eventCurrentTarget = event.currentTarget;\n // Wait until focus is set on the element. This is an alternative to\n // `event.preventDefault()` to avoid :focus-visible from appearing when using a pointer.\n frame.request({\n \"useClick.useMemo[reference]\": ()=>{\n const details = (0,_internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_7__.createChangeEventDetails)(reason, nativeEvent, eventCurrentTarget);\n if (nextOpen && pointerType === 'touch' && touchOpenDelay > 0) {\n touchOpenTimeout.start(touchOpenDelay, {\n \"useClick.useMemo[reference]\": ()=>{\n store.setOpen(true, details);\n }\n }[\"useClick.useMemo[reference]\"]);\n } else {\n store.setOpen(nextOpen, details);\n }\n }\n }[\"useClick.useMemo[reference]\"]);\n },\n onClick (event) {\n if (eventOption === 'mousedown-only') {\n return;\n }\n const pointerType = pointerTypeRef.current;\n if (eventOption === 'mousedown' && pointerType) {\n pointerTypeRef.current = undefined;\n return;\n }\n if ((0,_utils_event_js__WEBPACK_IMPORTED_MODULE_4__.isMouseLikePointerType)(pointerType, true) && ignoreMouse) {\n return;\n }\n const open = store.select('open');\n const openEvent = dataRef.current.openEvent;\n const hasClickedOnInactiveTrigger = store.select('domReferenceElement') !== event.currentTarget;\n const nextOpen = open && hasClickedOnInactiveTrigger || !(open && toggle && (openEvent && stickIfOpen ? (0,_utils_event_js__WEBPACK_IMPORTED_MODULE_4__.isClickLikeEvent)(openEvent) : true));\n const details = (0,_internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_7__.createChangeEventDetails)(reason, event.nativeEvent, event.currentTarget);\n if (nextOpen && pointerType === 'touch' && touchOpenDelay > 0) {\n touchOpenTimeout.start(touchOpenDelay, {\n \"useClick.useMemo[reference]\": ()=>{\n store.setOpen(true, details);\n }\n }[\"useClick.useMemo[reference]\"]);\n } else {\n store.setOpen(nextOpen, details);\n }\n },\n onKeyDown () {\n pointerTypeRef.current = undefined;\n }\n })\n }[\"useClick.useMemo[reference]\"], [\n dataRef,\n eventOption,\n ignoreMouse,\n store,\n stickIfOpen,\n toggle,\n frame,\n touchOpenTimeout,\n touchOpenDelay,\n reason\n ]);\n return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"useClick.useMemo\": ()=>enabled ? {\n reference\n } : _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_8__.EMPTY_OBJECT\n }[\"useClick.useMemo\"], [\n enabled,\n reference\n ]);\n}\n_s(useClick, \"jXL81JahPOFlTvbOny7NkgzOcJ4=\", false, function() {\n return [\n _base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_2__.useAnimationFrame,\n _base_ui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_3__.useTimeout\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvaG9va3MvdXNlQ2xpY2suanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFFK0I7QUFDc0M7QUFDZDtBQUNIO0FBQ2U7QUFDVTtBQUNVO0FBQ2xDO0FBQ3JEOzs7Q0FHQyxHQUNNLFNBQVNVLFNBQVNDLE9BQU87UUFBRUMsUUFBQUEsaUVBQVEsQ0FBQzs7SUFDekMsTUFBTUMsUUFBUSxlQUFlRixVQUFVQSxRQUFRRyxTQUFTLEdBQUdIO0lBQzNELE1BQU1JLFVBQVVGLE1BQU1GLE9BQU8sQ0FBQ0ksT0FBTztJQUNyQyxNQUFNLEVBQ0pDLFVBQVUsSUFBSSxFQUNkQyxPQUFPQyxjQUFjLE9BQU8sRUFDNUJDLFNBQVMsSUFBSSxFQUNiQyxjQUFjLEtBQUssRUFDbkJDLGNBQWMsSUFBSSxFQUNsQkMsaUJBQWlCLENBQUMsRUFDbEJDLFNBQVNkLCtEQUFvQixFQUM5QixHQUFHRztJQUNKLE1BQU1hLGlCQUFpQnpCLHlDQUFZLENBQUMyQjtJQUNwQyxNQUFNQyxRQUFRM0IsbUZBQWlCQTtJQUMvQixNQUFNNEIsbUJBQW1CM0IscUVBQVVBO0lBQ25DLE1BQU00QixZQUFZOUIsMENBQWE7dUNBQUMsSUFBTztnQkFDckNnQyxlQUFjZixLQUFLO29CQUNqQlEsZUFBZVEsT0FBTyxHQUFHaEIsTUFBTWlCLFdBQVc7Z0JBQzVDO2dCQUNBQyxhQUFZbEIsS0FBSztvQkFDZixNQUFNaUIsY0FBY1QsZUFBZVEsT0FBTztvQkFDMUMsTUFBTUcsY0FBY25CLE1BQU1tQixXQUFXO29CQUNyQyxNQUFNQyxPQUFPeEIsTUFBTXlCLE1BQU0sQ0FBQztvQkFFMUIsbURBQW1EO29CQUNuRCxxRUFBcUU7b0JBQ3JFLElBQUlyQixNQUFNc0IsTUFBTSxLQUFLLEtBQUtyQixnQkFBZ0IsV0FBV1gsdUVBQXNCQSxDQUFDMkIsYUFBYSxTQUFTZCxhQUFhO3dCQUM3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QUNuQ2M7WUFDRixJQUFJM0IsOERBQVlBOzJCQUFFO1FBQUNhO1FBQVNjO0tBQVU7QUFDeEM7R0FsR2dCcEI7O1FBYUFULCtFQUFpQkE7UUFDTkMsaUVBQVVBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9mbG9hdGluZy11aS1yZWFjdC9ob29rcy91c2VDbGljay5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUFuaW1hdGlvbkZyYW1lIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlQW5pbWF0aW9uRnJhbWUnO1xuaW1wb3J0IHsgdXNlVGltZW91dCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZVRpbWVvdXQnO1xuaW1wb3J0IHsgRU1QVFlfT0JKRUNUIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvZW1wdHknO1xuaW1wb3J0IHsgZ2V0VGFyZ2V0LCBpc1R5cGVhYmxlRWxlbWVudCB9IGZyb20gXCIuLi91dGlscy9lbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc0NsaWNrTGlrZUV2ZW50LCBpc01vdXNlTGlrZVBvaW50ZXJUeXBlIH0gZnJvbSBcIi4uL3V0aWxzL2V2ZW50LmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVDaGFuZ2VFdmVudERldGFpbHMgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL2NyZWF0ZUJhc2VVSUV2ZW50RGV0YWlscy5qc1wiO1xuaW1wb3J0IHsgUkVBU09OUyB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvcmVhc29ucy5qc1wiO1xuLyoqXG4gKiBPcGVucyBvciBjbG9zZXMgdGhlIGZsb2F0aW5nIGVsZW1lbnQgd2hlbiBjbGlja2luZyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvdXNlQ2xpY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUNsaWNrKGNvbnRleHQsIHByb3BzID0ge30pIHtcbiAgY29uc3Qgc3RvcmUgPSAncm9vdFN0b3JlJyBpbiBjb250ZXh0ID8gY29udGV4dC5yb290U3RvcmUgOiBjb250ZXh0O1xuICBjb25zdCBkYXRhUmVmID0gc3RvcmUuY29udGV4dC5kYXRhUmVmO1xuICBjb25zdCB7XG4gICAgZW5hYmxlZCA9IHRydWUsXG4gICAgZXZlbnQ6IGV2ZW50T3B0aW9uID0gJ2NsaWNrJyxcbiAgICB0b2dnbGUgPSB0cnVlLFxuICAgIGlnbm9yZU1vdXNlID0gZmFsc2UsXG4gICAgc3RpY2tJZk9wZW4gPSB0cnVlLFxuICAgIHRvdWNoT3BlbkRlbGF5ID0gMCxcbiAgICByZWFzb24gPSBSRUFTT05TLnRyaWdnZXJQcmVzc1xuICB9ID0gcHJvcHM7XG4gIGNvbnN0IHBvaW50ZXJUeXBlUmVmID0gUmVhY3QudXNlUmVmKHVuZGVmaW5lZCk7XG4gIGNvbnN0IGZyYW1lID0gdXNlQW5pbWF0aW9uRnJhbWUoKTtcbiAgY29uc3QgdG91Y2hPcGVuVGltZW91dCA9IHVzZVRpbWVvdXQoKTtcbiAgY29uc3QgcmVmZXJlbmNlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIG9uUG9pbnRlckRvd24oZXZlbnQpIHtcbiAgICAgIHBvaW50ZXJUeXBlUmVmLmN1cnJlbnQgPSBldmVudC5wb2ludGVyVHlwZTtcbiAgICB9LFxuICAgIG9uTW91c2VEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCBwb2ludGVyVHlwZSA9IHBvaW50ZXJUeXBlUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBuYXRpdmVFdmVudCA9IGV2ZW50Lm5hdGl2ZUV2ZW50O1xuICAgICAgY29uc3Qgb3BlbiA9IHN0b3JlLnNlbGVjdCgnb3BlbicpO1xuXG4gICAgICAvLyBJZ25vcmUgYWxsIGJ1dHRvbnMgZXhjZXB0IGZvciB0aGUgXCJtYWluXCIgYnV0dG9uLlxuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL01vdXNlRXZlbnQvYnV0dG9uXG4gICAgICBpZiAoZXZlbnQuYnV0dG9uICE9PSAwIHx8IGV2ZW50T3B0aW9uID09PSAnY2xpY2snIHx8IGlzTW91c2VMaWtlUG9pbnRlclR5cGUocG9pbnRlclR5cGUsIHRydWUpICYmIGlnbm9yZU1vdXNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG9wZW5FdmVudCA9IGRhdGFSZWYuY3VycmVudC5vcGVuRXZlbnQ7XG4gICAgICBjb25zdCBvcGVuRXZlbnRUeXBlID0gb3BlbkV2ZW50Py50eXBlO1xuICAgICAgY29uc3QgaGFzQ2xpY2tlZE9uSW5hY3RpdmVUcmlnZ2VyID0gc3RvcmUuc2VsZWN0KCdkb21SZWZlcmVuY2VFbGVtZW50JykgIT09IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICBjb25zdCBuZXh0T3BlbiA9IG9wZW4gJiYgaGFzQ2xpY2tlZE9uSW5hY3RpdmVUcmlnZ2VyIHx8ICEob3BlbiAmJiB0b2dnbGUgJiYgKG9wZW5FdmVudCAmJiBzdGlja0lmT3BlbiA/IG9wZW5FdmVudFR5cGUgPT09ICdjbGljaycgfHwgb3BlbkV2ZW50VHlwZSA9PT0gJ21vdXNlZG93bicgOiB0cnVlKSk7XG5cbiAgICAgIC8vIEFuaW1hdGlvbnMgc29tZXRpbWVzIHdvbid0IHJ1biBvbiBhIHR5cGVhYmxlIGVsZW1lbnQgaWYgdXNpbmcgYSByQUYuXG4gICAgICAvLyBGb2N1cyBpcyBhbHdheXMgc2V0IG9uIHRoZXNlIGVsZW1lbnRzLiBGb3IgdG91Y2gsIHdlIG1heSBkZWxheSBvcGVuaW5nLlxuICAgICAgY29uc3QgdGFyZ2V0ID0gZ2V0VGFyZ2V0KG5hdGl2ZUV2ZW50KTtcbiAgICAgIGlmIChpc1R5cGVhYmxlRWxlbWVudCh0YXJnZXQpKSB7XG4gICAgICAgIGNvbnN0IGRldGFpbHMgPSBjcmVhdGVDaGFuZ2VFdmVudERldGFpbHMocmVhc29uLCBuYXRpdmVFdmVudCwgdGFyZ2V0KTtcbiAgICAgICAgaWYgKG5leHRPcGVuICYmIHBvaW50ZXJUeXBlID09PSAndG91Y2gnICYmIHRvdWNoT3BlbkRlbGF5ID4gMCkge1xuICAgICAgICAgIHRvdWNoT3BlblRpbWVvdXQuc3RhcnQodG91Y2hPcGVuRGVsYXksICgpID0+IHtcbiAgICAgICAgICAgIHN0b3JlLnNldE9wZW4odHJ1ZSwgZGV0YWlscyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RvcmUuc2V0T3BlbihuZXh0T3BlbiwgZGV0YWlscyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBDYXB0dXJlIHRoZSBjdXJyZW50VGFyZ2V0IGJlZm9yZSB0aGUgckFGLlxuICAgICAgLy8gYXMgUmVhY3Qgc2V0cyBpdCB0byBudWxsIGFmdGVyIHRoZSBldmVudCBoYW5kbGVyIGNvbXBsZXRlcy5cbiAgICAgIGNvbnN0IGV2ZW50Q3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG5cbiAgICAgIC8vIFdhaXQgdW50aWwgZm9jdXMgaXMgc2V0IG9uIHRoZSBlbGVtZW50LiBUaGlzIGlzIGFuIGFsdGVybmF0aXZlIHRvXG4gICAgICAvLyBgZXZlbnQucHJldmVudERlZmF1bHQoKWAgdG8gYXZvaWQgOmZvY3VzLXZpc2libGUgZnJvbSBhcHBlYXJpbmcgd2hlbiB1c2luZyBhIHBvaW50ZXIuXG4gICAgICBmcmFtZS5yZXF1ZXN0KCgpID0+IHtcbiAgICAgICAgY29uc3QgZGV0YWlscyA9IGNyZWF0ZUNoYW5nZUV2ZW50RGV0YWlscyhyZWFzb24sIG5hdGl2ZUV2ZW50LCBldmVudEN1cnJlbnRUYXJnZXQpO1xuICAgICAgICBpZiAobmV4dE9wZW4gJiYgcG9pbnRlclR5cGUgPT09ICd0b3VjaCcgJiYgdG91Y2hPcGVuRGVsYXkgPiAwKSB7XG4gICAgICAgICAgdG91Y2hPcGVuVGltZW91dC5zdGFydCh0b3VjaE9wZW5EZWxheSwgKCkgPT4ge1xuICAgICAgICAgICAgc3RvcmUuc2V0T3Blbih0cnVlLCBkZXRhaWxzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdG9yZS5zZXRPcGVuKG5leHRPcGVuLCBkZXRhaWxzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcbiAgICBvbkNsaWNrKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnRPcHRpb24gPT09ICdtb3VzZWRvd24tb25seScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcG9pbnRlclR5cGUgPSBwb2ludGVyVHlwZVJlZi5jdXJyZW50O1xuICAgICAgaWYgKGV2ZW50T3B0aW9uID09PSAnbW91c2Vkb3duJyAmJiBwb2ludGVyVHlwZSkge1xuICAgICAgICBwb2ludGVyVHlwZVJlZi5jdXJyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoaXNNb3VzZUxpa2VQb2ludGVyVHlwZShwb2ludGVyVHlwZSwgdHJ1ZSkgJiYgaWdub3JlTW91c2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgb3BlbiA9IHN0b3JlLnNlbGVjdCgnb3BlbicpO1xuICAgICAgY29uc3Qgb3BlbkV2ZW50ID0gZGF0YVJlZi5jdXJyZW50Lm9wZW5FdmVudDtcbiAgICAgIGNvbnN0IGhhc0NsaWNrZWRPbkluYWN0aXZlVHJpZ2dlciA9IHN0b3JlLnNlbGVjdCgnZG9tUmVmZXJlbmNlRWxlbWVudCcpICE9PSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgY29uc3QgbmV4dE9wZW4gPSBvcGVuICYmIGhhc0NsaWNrZWRPbkluYWN0aXZlVHJpZ2dlciB8fCAhKG9wZW4gJiYgdG9nZ2xlICYmIChvcGVuRXZlbnQgJiYgc3RpY2tJZk9wZW4gPyBpc0NsaWNrTGlrZUV2ZW50KG9wZW5FdmVudCkgOiB0cnVlKSk7XG4gICAgICBjb25zdCBkZXRhaWxzID0gY3JlYXRlQ2hhbmdlRXZlbnREZXRhaWxzKHJlYXNvbiwgZXZlbnQubmF0aXZlRXZlbnQsIGV2ZW50LmN1cnJlbnRUYXJnZXQpO1xuICAgICAgaWYgKG5leHRPcGVuICYmIHBvaW50ZXJUeXBlID09PSAndG91Y2gnICYmIHRvdWNoT3BlbkRlbGF5ID4gMCkge1xuICAgICAgICB0b3VjaE9wZW5UaW1lb3V0LnN0YXJ0KHRvdWNoT3BlbkRlbGF5LCAoKSA9PiB7XG4gICAgICAgICAgc3RvcmUuc2V0T3Blbih0cnVlLCBkZXRhaWxzKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdG9yZS5zZXRPcGVuKG5leHRPcGVuLCBkZXRhaWxzKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIG9uS2V5RG93bigpIHtcbiAgICAgIHBvaW50ZXJUeXBlUmVmLmN1cnJlbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9KSwgW2RhdGFSZWYsIGV2ZW50T3B0aW9uLCBpZ25vcmVNb3VzZSwgc3RvcmUsIHN0aWNrSWZPcGVuLCB0b2dnbGUsIGZyYW1lLCB0b3VjaE9wZW5UaW1lb3V0LCB0b3VjaE9wZW5EZWxheSwgcmVhc29uXSk7XG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+IGVuYWJsZWQgPyB7XG4gICAgcmVmZXJlbmNlXG4gIH0gOiBFTVBUWV9PQkpFQ1QsIFtlbmFibGVkLCByZWZlcmVuY2VdKTtcbn0iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VBbmltYXRpb25GcmFtZSIsInVzZVRpbWVvdXQiLCJFTVBUWV9PQkpFQ1QiLCJnZXRUYXJnZXQiLCJpc1R5cGVhYmxlRWxlbWVudCIsImlzQ2xpY2tMaWtlRXZlbnQiLCJpc01vdXNlTGlrZVBvaW50ZXJUeXBlIiwiY3JlYXRlQ2hhbmdlRXZlbnREZXRhaWxzIiwiUkVBU09OUyIsInVzZUNsaWNrIiwiY29udGV4dCIsInByb3BzIiwic3RvcmUiLCJyb290U3RvcmUiLCJkYXRhUmVmIiwiZW5hYmxlZCIsImV2ZW50IiwiZXZlbnRPcHRpb24iLCJ0b2dnbGUiLCJpZ25vcmVNb3VzZSIsInN0aWNrSWZPcGVuIiwidG91Y2hPcGVuRGVsYXkiLCJyZWFzb24iLCJ0cmlnZ2VyUHJlc3MiLCJwb2ludGVyVHlwZVJlZiIsInVzZVJlZiIsInVuZGVmaW5lZCIsImZyYW1lIiwidG91Y2hPcGVuVGltZW91dCIsInJlZmVyZW5jZSIsInVzZU1lbW8iLCJvblBvaW50ZXJEb3duIiwiY3VycmVudCIsInBvaW50ZXJUeXBlIiwib25Nb3VzZURvd24iLCJuYXRpdmVFdmVudCIsIm9wZW4iLCJzZWxlY3QiLCJidXR0b24iLCJvcGVuRXZlbnQiLCJvcGVuRXZlbnRUeXBlIiwidHlwZSIsImhhc0NsaWNrZWRPbkluYWN0aXZlVHJpZ2dlciIsImN1cnJlbnRUYXJnZXQiLCJuZXh0T3BlbiIsInRhcmdldCIsImRldGFpbHMiLCJzdGFydCIsInNldE9wZW4iLCJldmVudEN1cnJlbnRUYXJnZXQiLCJyZXF1ZXN0Iiwib25DbGljayIsIm9uS2V5RG93biJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useClick.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useDismiss.js":
|
||
/*!*******************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useDismiss.js ***!
|
||
\*******************************************************************************/
|
||
/***/ ((__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 */ normalizeProp: () => (/* binding */ normalizeProp),\n/* harmony export */ useDismiss: () => (/* binding */ useDismiss)\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 _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @floating-ui/utils/dom */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\");\n/* harmony import */ var _base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @base-ui/utils/addEventListener */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/addEventListener.js\");\n/* harmony import */ var _base_ui_utils_mergeCleanups__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @base-ui/utils/mergeCleanups */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/mergeCleanups.js\");\n/* harmony import */ var _base_ui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @base-ui/utils/useTimeout */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useTimeout.js\");\n/* harmony import */ var _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/utils/useStableCallback */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useStableCallback.js\");\n/* harmony import */ var _base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @base-ui/utils/owner */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/owner.js\");\n/* harmony import */ var _utils_element_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/element.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/element.js\");\n/* harmony import */ var _utils_element_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../utils/element.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/shadowDom.js\");\n/* harmony import */ var _utils_event_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/event.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/event.js\");\n/* harmony import */ var _utils_nodes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/nodes.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/nodes.js\");\n/* harmony import */ var _components_FloatingTree_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/FloatingTree.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTree.js\");\n/* harmony import */ var _internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../internals/createBaseUIEventDetails.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.js\");\n/* harmony import */ var _internals_reasons_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../internals/reasons.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/reason-parts.js\");\n/* harmony import */ var _utils_createAttribute_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../utils/createAttribute.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/createAttribute.js\");\n/* __next_internal_client_entry_do_not_use__ normalizeProp,useDismiss auto */ var _s = $RefreshSig$();\n\n\n\n\n\n\n\n\n\n\n/* eslint-disable no-underscore-dangle */ \n\n\n\nconst bubbleHandlerKeys = {\n intentional: 'onClick',\n sloppy: 'onPointerDown'\n};\nfunction alwaysFalse() {\n return false;\n}\nfunction normalizeProp(normalizable) {\n var _normalizable_escapeKey, _normalizable_outsidePress;\n return {\n escapeKey: typeof normalizable === 'boolean' ? normalizable : (_normalizable_escapeKey = normalizable === null || normalizable === void 0 ? void 0 : normalizable.escapeKey) !== null && _normalizable_escapeKey !== void 0 ? _normalizable_escapeKey : false,\n outsidePress: typeof normalizable === 'boolean' ? normalizable : (_normalizable_outsidePress = normalizable === null || normalizable === void 0 ? void 0 : normalizable.outsidePress) !== null && _normalizable_outsidePress !== void 0 ? _normalizable_outsidePress : true\n };\n}\n/**\n * Closes the floating element when a dismissal is requested — by default, when\n * the user presses the `escape` key or outside of the floating element.\n * @see https://floating-ui.com/docs/useDismiss\n */ function useDismiss(context) {\n let props = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n _s();\n const store = 'rootStore' in context ? context.rootStore : context;\n const open = store.useState('open');\n const floatingElement = store.useState('floatingElement');\n const { dataRef } = store.context;\n const { enabled = true, escapeKey = true, outsidePress: outsidePressProp = true, outsidePressEvent = 'sloppy', referencePress = alwaysFalse, referencePressEvent = 'sloppy', bubbles, externalTree } = props;\n const tree = (0,_components_FloatingTree_js__WEBPACK_IMPORTED_MODULE_1__.useFloatingTree)(externalTree);\n const outsidePressFn = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback)(typeof outsidePressProp === 'function' ? outsidePressProp : ({\n \"useDismiss.useStableCallback[outsidePressFn]\": ()=>false\n })[\"useDismiss.useStableCallback[outsidePressFn]\"]);\n const outsidePress = typeof outsidePressProp === 'function' ? outsidePressFn : outsidePressProp;\n const outsidePressEnabled = outsidePress !== false;\n const getOutsidePressEventProp = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback)({\n \"useDismiss.useStableCallback[getOutsidePressEventProp]\": ()=>outsidePressEvent\n }[\"useDismiss.useStableCallback[getOutsidePressEventProp]\"]);\n const pressStartedInsideRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n const pressStartPreventedRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n // Ignore only the very next outside click after dragging from inside to outside.\n const suppressNextOutsideClickRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n const { escapeKey: escapeKeyBubbles, outsidePress: outsidePressBubbles } = normalizeProp(bubbles);\n const touchStateRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const cancelDismissOnEndTimeout = (0,_base_ui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_3__.useTimeout)();\n const clearInsideReactTreeTimeout = (0,_base_ui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_3__.useTimeout)();\n const clearInsideReactTree = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback)({\n \"useDismiss.useStableCallback[clearInsideReactTree]\": ()=>{\n clearInsideReactTreeTimeout.clear();\n dataRef.current.insideReactTree = false;\n }\n }[\"useDismiss.useStableCallback[clearInsideReactTree]\"]);\n const isComposingRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n const currentPointerTypeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef('');\n const isReferencePressEnabled = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback)(referencePress);\n const closeOnEscapeKeyDown = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback)({\n \"useDismiss.useStableCallback[closeOnEscapeKeyDown]\": (event)=>{\n var _dataRef_current_floatingContext;\n if (!open || !enabled || !escapeKey || event.key !== 'Escape') {\n return;\n }\n // Wait until IME is settled. Pressing `Escape` while composing should\n // close the compose menu, but not the floating element.\n if (isComposingRef.current) {\n return;\n }\n const nodeId = (_dataRef_current_floatingContext = dataRef.current.floatingContext) === null || _dataRef_current_floatingContext === void 0 ? void 0 : _dataRef_current_floatingContext.nodeId;\n const children = tree ? (0,_utils_nodes_js__WEBPACK_IMPORTED_MODULE_4__.getNodeChildren)(tree.nodesRef.current, nodeId) : [];\n if (!escapeKeyBubbles) {\n if (children.length > 0) {\n let shouldDismiss = true;\n children.forEach({\n \"useDismiss.useStableCallback[closeOnEscapeKeyDown]\": (child)=>{\n var _child_context;\n if (((_child_context = child.context) === null || _child_context === void 0 ? void 0 : _child_context.open) && !child.context.dataRef.current.__escapeKeyBubbles) {\n shouldDismiss = false;\n }\n }\n }[\"useDismiss.useStableCallback[closeOnEscapeKeyDown]\"]);\n if (!shouldDismiss) {\n return;\n }\n }\n }\n const native = (0,_utils_event_js__WEBPACK_IMPORTED_MODULE_5__.isReactEvent)(event) ? event.nativeEvent : event;\n const eventDetails = (0,_internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_6__.createChangeEventDetails)(_internals_reasons_js__WEBPACK_IMPORTED_MODULE_7__.escapeKey, native);\n store.setOpen(false, eventDetails);\n if (!escapeKeyBubbles && !eventDetails.isPropagationAllowed) {\n event.stopPropagation();\n }\n }\n }[\"useDismiss.useStableCallback[closeOnEscapeKeyDown]\"]);\n const markInsideReactTree = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback)({\n \"useDismiss.useStableCallback[markInsideReactTree]\": ()=>{\n dataRef.current.insideReactTree = true;\n clearInsideReactTreeTimeout.start(0, clearInsideReactTree);\n }\n }[\"useDismiss.useStableCallback[markInsideReactTree]\"]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"useDismiss.useEffect\": ()=>{\n if (!open || !enabled) {\n return undefined;\n }\n dataRef.current.__escapeKeyBubbles = escapeKeyBubbles;\n dataRef.current.__outsidePressBubbles = outsidePressBubbles;\n const compositionTimeout = new _base_ui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_3__.Timeout();\n const preventedPressSuppressionTimeout = new _base_ui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_3__.Timeout();\n function handleCompositionStart() {\n compositionTimeout.clear();\n isComposingRef.current = true;\n }\n function handleCompositionEnd() {\n // Safari fires `compositionend` before `keydown`, so we need to wait\n // until the next tick to set `isComposing` to `false`.\n // https://bugs.webkit.org/show_bug.cgi?id=165004\n compositionTimeout.start(// 0ms or 1ms don't work in Safari. 5ms appears to consistently work.\n // Only apply to WebKit for the test to remain 0ms.\n (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__.isWebKit)() ? 5 : 0, {\n \"useDismiss.useEffect.handleCompositionEnd\": ()=>{\n isComposingRef.current = false;\n }\n }[\"useDismiss.useEffect.handleCompositionEnd\"]);\n }\n function suppressImmediateOutsideClickAfterPreventedStart() {\n suppressNextOutsideClickRef.current = true;\n // Firefox can emit the synthetic outside click in a later task after\n // pointer lock exit, so microtask clearing is too early here.\n preventedPressSuppressionTimeout.start(0, {\n \"useDismiss.useEffect.suppressImmediateOutsideClickAfterPreventedStart\": ()=>{\n suppressNextOutsideClickRef.current = false;\n }\n }[\"useDismiss.useEffect.suppressImmediateOutsideClickAfterPreventedStart\"]);\n }\n function resetPressStartState() {\n pressStartedInsideRef.current = false;\n pressStartPreventedRef.current = false;\n }\n function getOutsidePressEvent() {\n const type = currentPointerTypeRef.current;\n const computedType = type === 'pen' || !type ? 'mouse' : type;\n const outsidePressEventValue = getOutsidePressEventProp();\n const resolved = typeof outsidePressEventValue === 'function' ? outsidePressEventValue() : outsidePressEventValue;\n if (typeof resolved === 'string') {\n return resolved;\n }\n return resolved[computedType];\n }\n function shouldIgnoreEvent(event) {\n const computedOutsidePressEvent = getOutsidePressEvent();\n return computedOutsidePressEvent === 'intentional' && event.type !== 'click' || computedOutsidePressEvent === 'sloppy' && event.type === 'click';\n }\n function isEventWithinFloatingTree(event) {\n var _dataRef_current_floatingContext;\n const nodeId = (_dataRef_current_floatingContext = dataRef.current.floatingContext) === null || _dataRef_current_floatingContext === void 0 ? void 0 : _dataRef_current_floatingContext.nodeId;\n const targetIsInsideChildren = tree && (0,_utils_nodes_js__WEBPACK_IMPORTED_MODULE_4__.getNodeChildren)(tree.nodesRef.current, nodeId).some({\n \"useDismiss.useEffect.isEventWithinFloatingTree\": (node)=>{\n var _node_context;\n return (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_9__.isEventTargetWithin)(event, (_node_context = node.context) === null || _node_context === void 0 ? void 0 : _node_context.elements.floating);\n }\n }[\"useDismiss.useEffect.isEventWithinFloatingTree\"]);\n return (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_9__.isEventTargetWithin)(event, store.select('floatingElement')) || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_9__.isEventTargetWithin)(event, store.select('domReferenceElement')) || targetIsInsideChildren;\n }\n function closeOnPressOutside(event) {\n var _dataRef_current_floatingContext;\n if (shouldIgnoreEvent(event)) {\n clearInsideReactTree();\n return;\n }\n if (dataRef.current.insideReactTree) {\n clearInsideReactTree();\n return;\n }\n const target = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_10__.getTarget)(event);\n const inertSelector = \"[\".concat((0,_utils_createAttribute_js__WEBPACK_IMPORTED_MODULE_11__.createAttribute)('inert'), \"]\");\n const targetRoot = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__.isElement)(target) ? target.getRootNode() : null;\n const markers = Array.from(((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__.isShadowRoot)(targetRoot) ? targetRoot : (0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_12__.ownerDocument)(store.select('floatingElement'))).querySelectorAll(inertSelector));\n const triggers = store.context.triggerElements;\n // If another trigger is clicked, don't close the floating element.\n if (target && (triggers.hasElement(target) || triggers.hasMatchingElement({\n \"useDismiss.useEffect.closeOnPressOutside\": (trigger)=>(0,_utils_element_js__WEBPACK_IMPORTED_MODULE_10__.contains)(trigger, target)\n }[\"useDismiss.useEffect.closeOnPressOutside\"]))) {\n return;\n }\n let targetRootAncestor = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__.isElement)(target) ? target : null;\n while(targetRootAncestor && !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__.isLastTraversableNode)(targetRootAncestor)){\n const nextParent = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__.getParentNode)(targetRootAncestor);\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__.isLastTraversableNode)(nextParent) || !(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__.isElement)(nextParent)) {\n break;\n }\n targetRootAncestor = nextParent;\n }\n // Check if the click occurred on a third-party element injected after the\n // floating element rendered.\n if (markers.length && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__.isElement)(target) && !(0,_utils_element_js__WEBPACK_IMPORTED_MODULE_9__.isRootElement)(target) && // Clicked on a direct ancestor (e.g. FloatingOverlay).\n !(0,_utils_element_js__WEBPACK_IMPORTED_MODULE_10__.contains)(target, store.select('floatingElement')) && // If the target root element contains none of the markers, then the\n // element was injected after the floating element rendered.\n markers.every({\n \"useDismiss.useEffect.closeOnPressOutside\": (marker)=>!(0,_utils_element_js__WEBPACK_IMPORTED_MODULE_10__.contains)(targetRootAncestor, marker)\n }[\"useDismiss.useEffect.closeOnPressOutside\"])) {\n return;\n }\n // Check if the click occurred on the scrollbar\n // Skip for touch events: scrollbars don't receive touch events on most platforms\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__.isHTMLElement)(target) && !('touches' in event)) {\n const lastTraversableNode = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__.isLastTraversableNode)(target);\n const style = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__.getComputedStyle)(target);\n const scrollRe = /auto|scroll/;\n const isScrollableX = lastTraversableNode || scrollRe.test(style.overflowX);\n const isScrollableY = lastTraversableNode || scrollRe.test(style.overflowY);\n const canScrollX = isScrollableX && target.clientWidth > 0 && target.scrollWidth > target.clientWidth;\n const canScrollY = isScrollableY && target.clientHeight > 0 && target.scrollHeight > target.clientHeight;\n const isRTL = style.direction === 'rtl';\n // Check click position relative to scrollbar.\n // In some browsers it is possible to change the <body> (or window)\n // scrollbar to the left side, but is very rare and is difficult to\n // check for. Plus, for modal dialogs with backdrops, it is more\n // important that the backdrop is checked but not so much the window.\n const pressedVerticalScrollbar = canScrollY && (isRTL ? event.offsetX <= target.offsetWidth - target.clientWidth : event.offsetX > target.clientWidth);\n const pressedHorizontalScrollbar = canScrollX && event.offsetY > target.clientHeight;\n if (pressedVerticalScrollbar || pressedHorizontalScrollbar) {\n return;\n }\n }\n if (isEventWithinFloatingTree(event)) {\n return;\n }\n // In intentional mode, a press that starts inside and ends outside gets\n // one suppressed outside click. Run this after inside-target checks so\n // inside clicks don't consume the one-shot suppression.\n if (getOutsidePressEvent() === 'intentional' && suppressNextOutsideClickRef.current) {\n preventedPressSuppressionTimeout.clear();\n suppressNextOutsideClickRef.current = false;\n return;\n }\n if (typeof outsidePress === 'function' && !outsidePress(event)) {\n return;\n }\n const nodeId = (_dataRef_current_floatingContext = dataRef.current.floatingContext) === null || _dataRef_current_floatingContext === void 0 ? void 0 : _dataRef_current_floatingContext.nodeId;\n const children = tree ? (0,_utils_nodes_js__WEBPACK_IMPORTED_MODULE_4__.getNodeChildren)(tree.nodesRef.current, nodeId) : [];\n if (children.length > 0) {\n let shouldDismiss = true;\n children.forEach({\n \"useDismiss.useEffect.closeOnPressOutside\": (child)=>{\n var _child_context;\n if (((_child_context = child.context) === null || _child_context === void 0 ? void 0 : _child_context.open) && !child.context.dataRef.current.__outsidePressBubbles) {\n shouldDismiss = false;\n }\n }\n }[\"useDismiss.useEffect.closeOnPressOutside\"]);\n if (!shouldDismiss) {\n return;\n }\n }\n store.setOpen(false, (0,_internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_6__.createChangeEventDetails)(_internals_reasons_js__WEBPACK_IMPORTED_MODULE_7__.outsidePress, event));\n clearInsideReactTree();\n }\n function handlePointerDown(event) {\n if (getOutsidePressEvent() !== 'sloppy' || event.pointerType === 'touch' || !store.select('open') || !enabled || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_9__.isEventTargetWithin)(event, store.select('floatingElement')) || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_9__.isEventTargetWithin)(event, store.select('domReferenceElement'))) {\n return;\n }\n closeOnPressOutside(event);\n }\n function handleTouchStart(event) {\n if (getOutsidePressEvent() !== 'sloppy' || !store.select('open') || !enabled || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_9__.isEventTargetWithin)(event, store.select('floatingElement')) || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_9__.isEventTargetWithin)(event, store.select('domReferenceElement'))) {\n return;\n }\n const touch = event.touches[0];\n if (touch) {\n touchStateRef.current = {\n startTime: Date.now(),\n startX: touch.clientX,\n startY: touch.clientY,\n dismissOnTouchEnd: false,\n dismissOnMouseDown: true\n };\n cancelDismissOnEndTimeout.start(1000, {\n \"useDismiss.useEffect.handleTouchStart\": ()=>{\n if (touchStateRef.current) {\n touchStateRef.current.dismissOnTouchEnd = false;\n touchStateRef.current.dismissOnMouseDown = false;\n }\n }\n }[\"useDismiss.useEffect.handleTouchStart\"]);\n }\n }\n function addTargetEventListenerOnce(event, listener) {\n const target = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_10__.getTarget)(event);\n if (!target) {\n return;\n }\n const unsubscribe = (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_13__.addEventListener)(target, event.type, {\n \"useDismiss.useEffect.addTargetEventListenerOnce.unsubscribe\": ()=>{\n listener(event);\n unsubscribe();\n }\n }[\"useDismiss.useEffect.addTargetEventListenerOnce.unsubscribe\"]);\n }\n function handleTouchStartCapture(event) {\n currentPointerTypeRef.current = 'touch';\n addTargetEventListenerOnce(event, handleTouchStart);\n }\n function closeOnPressOutsideCapture(event) {\n cancelDismissOnEndTimeout.clear();\n if (event.type === 'pointerdown') {\n currentPointerTypeRef.current = event.pointerType;\n }\n if (event.type === 'mousedown' && touchStateRef.current && !touchStateRef.current.dismissOnMouseDown) {\n return;\n }\n addTargetEventListenerOnce(event, {\n \"useDismiss.useEffect.closeOnPressOutsideCapture\": (targetEvent)=>{\n if (targetEvent.type === 'pointerdown') {\n handlePointerDown(targetEvent);\n } else {\n closeOnPressOutside(targetEvent);\n }\n }\n }[\"useDismiss.useEffect.closeOnPressOutsideCapture\"]);\n }\n function handlePressEndCapture(event) {\n if (!pressStartedInsideRef.current) {\n return;\n }\n const pressStartedInsideDefaultPrevented = pressStartPreventedRef.current;\n resetPressStartState();\n if (getOutsidePressEvent() !== 'intentional') {\n return;\n }\n if (event.type === 'pointercancel') {\n if (pressStartedInsideDefaultPrevented) {\n suppressImmediateOutsideClickAfterPreventedStart();\n }\n return;\n }\n if (isEventWithinFloatingTree(event)) {\n return;\n }\n // If pointerdown was prevented, no click may be generated for that\n // interaction. However, Firefox may still emit an immediate click after\n // pointerup (e.g. NumberField scrub with pointer lock), so suppress for\n // one tick to absorb that synthetic click only.\n if (pressStartedInsideDefaultPrevented) {\n suppressImmediateOutsideClickAfterPreventedStart();\n return;\n }\n // Avoid suppressing when outsidePress explicitly ignores this target.\n if (typeof outsidePress === 'function' && !outsidePress(event)) {\n return;\n }\n preventedPressSuppressionTimeout.clear();\n suppressNextOutsideClickRef.current = true;\n clearInsideReactTree();\n }\n function handleTouchMove(event) {\n if (getOutsidePressEvent() !== 'sloppy' || !touchStateRef.current || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_9__.isEventTargetWithin)(event, store.select('floatingElement')) || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_9__.isEventTargetWithin)(event, store.select('domReferenceElement'))) {\n return;\n }\n const touch = event.touches[0];\n if (!touch) {\n return;\n }\n const deltaX = Math.abs(touch.clientX - touchStateRef.current.startX);\n const deltaY = Math.abs(touch.clientY - touchStateRef.current.startY);\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n if (distance > 5) {\n touchStateRef.current.dismissOnTouchEnd = true;\n }\n if (distance > 10) {\n closeOnPressOutside(event);\n cancelDismissOnEndTimeout.clear();\n touchStateRef.current = null;\n }\n }\n function handleTouchMoveCapture(event) {\n addTargetEventListenerOnce(event, handleTouchMove);\n }\n function handleTouchEnd(event) {\n if (getOutsidePressEvent() !== 'sloppy' || !touchStateRef.current || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_9__.isEventTargetWithin)(event, store.select('floatingElement')) || (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_9__.isEventTargetWithin)(event, store.select('domReferenceElement'))) {\n return;\n }\n if (touchStateRef.current.dismissOnTouchEnd) {\n closeOnPressOutside(event);\n }\n cancelDismissOnEndTimeout.clear();\n touchStateRef.current = null;\n }\n function handleTouchEndCapture(event) {\n addTargetEventListenerOnce(event, handleTouchEnd);\n }\n const doc = (0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_12__.ownerDocument)(floatingElement);\n const unsubscribe = (0,_base_ui_utils_mergeCleanups__WEBPACK_IMPORTED_MODULE_14__.mergeCleanups)(escapeKey && (0,_base_ui_utils_mergeCleanups__WEBPACK_IMPORTED_MODULE_14__.mergeCleanups)((0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_13__.addEventListener)(doc, 'keydown', closeOnEscapeKeyDown), (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_13__.addEventListener)(doc, 'compositionstart', handleCompositionStart), (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_13__.addEventListener)(doc, 'compositionend', handleCompositionEnd)), outsidePressEnabled && (0,_base_ui_utils_mergeCleanups__WEBPACK_IMPORTED_MODULE_14__.mergeCleanups)((0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_13__.addEventListener)(doc, 'click', closeOnPressOutsideCapture, true), (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_13__.addEventListener)(doc, 'pointerdown', closeOnPressOutsideCapture, true), (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_13__.addEventListener)(doc, 'pointerup', handlePressEndCapture, true), (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_13__.addEventListener)(doc, 'pointercancel', handlePressEndCapture, true), (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_13__.addEventListener)(doc, 'mousedown', closeOnPressOutsideCapture, true), (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_13__.addEventListener)(doc, 'mouseup', handlePressEndCapture, true), (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_13__.addEventListener)(doc, 'touchstart', handleTouchStartCapture, true), (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_13__.addEventListener)(doc, 'touchmove', handleTouchMoveCapture, true), (0,_base_ui_utils_addEventListener__WEBPACK_IMPORTED_MODULE_13__.addEventListener)(doc, 'touchend', handleTouchEndCapture, true)));\n return ({\n \"useDismiss.useEffect\": ()=>{\n unsubscribe();\n compositionTimeout.clear();\n preventedPressSuppressionTimeout.clear();\n resetPressStartState();\n suppressNextOutsideClickRef.current = false;\n }\n })[\"useDismiss.useEffect\"];\n }\n }[\"useDismiss.useEffect\"], [\n dataRef,\n floatingElement,\n escapeKey,\n outsidePressEnabled,\n outsidePress,\n open,\n enabled,\n escapeKeyBubbles,\n outsidePressBubbles,\n closeOnEscapeKeyDown,\n clearInsideReactTree,\n getOutsidePressEventProp,\n tree,\n store,\n cancelDismissOnEndTimeout\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(clearInsideReactTree, [\n outsidePress,\n clearInsideReactTree\n ]);\n const reference = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"useDismiss.useMemo[reference]\": ()=>({\n onKeyDown: closeOnEscapeKeyDown,\n [bubbleHandlerKeys[referencePressEvent]]: ({\n \"useDismiss.useMemo[reference]\": (event)=>{\n if (!isReferencePressEnabled()) {\n return;\n }\n store.setOpen(false, (0,_internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_6__.createChangeEventDetails)(_internals_reasons_js__WEBPACK_IMPORTED_MODULE_7__.triggerPress, event.nativeEvent));\n }\n })[\"useDismiss.useMemo[reference]\"],\n ...referencePressEvent !== 'intentional' && {\n onClick (event) {\n if (!isReferencePressEnabled()) {\n return;\n }\n store.setOpen(false, (0,_internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_6__.createChangeEventDetails)(_internals_reasons_js__WEBPACK_IMPORTED_MODULE_7__.triggerPress, event.nativeEvent));\n }\n }\n })\n }[\"useDismiss.useMemo[reference]\"], [\n closeOnEscapeKeyDown,\n store,\n referencePressEvent,\n isReferencePressEnabled\n ]);\n const markPressStartedInsideReactTree = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback)({\n \"useDismiss.useStableCallback[markPressStartedInsideReactTree]\": (event)=>{\n if (!open || !enabled || event.button !== 0) {\n return;\n }\n const target = (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_10__.getTarget)(event.nativeEvent);\n // Only treat presses that start within the floating DOM subtree as inside.\n // This avoids suppressing parent dismissal when interacting with nested portals.\n if (!(0,_utils_element_js__WEBPACK_IMPORTED_MODULE_10__.contains)(store.select('floatingElement'), target)) {\n return;\n }\n if (!pressStartedInsideRef.current) {\n pressStartedInsideRef.current = true;\n pressStartPreventedRef.current = false;\n }\n }\n }[\"useDismiss.useStableCallback[markPressStartedInsideReactTree]\"]);\n const markInsidePressStartPrevented = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback)({\n \"useDismiss.useStableCallback[markInsidePressStartPrevented]\": (event)=>{\n if (!open || !enabled) {\n return;\n }\n if (!(event.defaultPrevented || event.nativeEvent.defaultPrevented)) {\n return;\n }\n if (pressStartedInsideRef.current) {\n pressStartPreventedRef.current = true;\n }\n }\n }[\"useDismiss.useStableCallback[markInsidePressStartPrevented]\"]);\n const floating = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"useDismiss.useMemo[floating]\": ()=>({\n onKeyDown: closeOnEscapeKeyDown,\n // `onMouseDown` may be blocked if `event.preventDefault()` is called in\n // `onPointerDown`, such as with <NumberField.ScrubArea>.\n // See https://github.com/mui/base-ui/pull/3379\n onPointerDown: markInsidePressStartPrevented,\n onMouseDown: markInsidePressStartPrevented,\n onClickCapture: markInsideReactTree,\n onMouseDownCapture (event) {\n markInsideReactTree();\n markPressStartedInsideReactTree(event);\n },\n onPointerDownCapture (event) {\n markInsideReactTree();\n markPressStartedInsideReactTree(event);\n },\n onMouseUpCapture: markInsideReactTree,\n onTouchEndCapture: markInsideReactTree,\n onTouchMoveCapture: markInsideReactTree\n })\n }[\"useDismiss.useMemo[floating]\"], [\n closeOnEscapeKeyDown,\n markInsideReactTree,\n markPressStartedInsideReactTree,\n markInsidePressStartPrevented\n ]);\n return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"useDismiss.useMemo\": ()=>enabled ? {\n reference,\n floating,\n trigger: reference\n } : {}\n }[\"useDismiss.useMemo\"], [\n enabled,\n reference,\n floating\n ]);\n}\n_s(useDismiss, \"HwT4D1tZiSaNwqzGRP2dy7AH4Dw=\", false, function() {\n return [\n _components_FloatingTree_js__WEBPACK_IMPORTED_MODULE_1__.useFloatingTree,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback,\n _base_ui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_3__.useTimeout,\n _base_ui_utils_useTimeout__WEBPACK_IMPORTED_MODULE_3__.useTimeout,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvaG9va3MvdXNlRGlzbWlzcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFK0I7QUFDbUg7QUFDL0U7QUFDTjtBQUNHO0FBQ0s7QUFDaEI7QUFDeUM7QUFDN0M7QUFDRztBQUVwRCx1Q0FBdUMsR0FFeUI7QUFDdUI7QUFDbEM7QUFDUztBQUM5RCxNQUFNd0Isb0JBQW9CO0lBQ3hCQyxhQUFhO0lBQ2JDLFFBQVE7QUFDVjtBQUNBLFNBQVNDO0lBQ1AsT0FBTztBQUNUO0FBQ08sU0FBU0MsY0FBY0MsWUFBWTtRQUV3QkEseUJBQ0dBO0lBRm5FLE9BQU87UUFDTEMsV0FBVyxPQUFPRCxpQkFBaUIsWUFBWUEsZUFBZUEsQ0FBQUEsMEJBQUFBLHlCQUFBQSxtQ0FBQUEsYUFBY0MsU0FBUyxjQUF2QkQscUNBQUFBLDBCQUEyQjtRQUN6RkUsY0FBYyxPQUFPRixpQkFBaUIsWUFBWUEsZUFBZUEsQ0FBQUEsNkJBQUFBLHlCQUFBQSxtQ0FBQUEsYUFBY0UsWUFBWSxjQUExQkYsd0NBQUFBLDZCQUE4QjtJQUNqRztBQUNGO0FBQ0E7Ozs7Q0FJQyxHQUNNLFNBQVNHLFdBQVdDLE9BQU87UUFBRUMsUUFBQUEsaUVBQVEsQ0FBQzs7SUFDM0MsTUFBTUMsUUFBUSxlQUFlRixVQUFVQSxRQUFRRyxTQUFTLEdBQUdIO0lBQzNELE1BQU1JLE9BQU9GLE1BQU1HLFFBQVEsQ0FBQztJQUM1QixNQUFNQyxrQkFBa0JKLE1BQU1HLFFBQVEsQ0FBQztJQUN2QyxNQUFNLEVBQ0pFLE9BQU8sRUFDUixHQUFHTCxNQUFNRixPQUFPO0lBQ2pCLE1BQU0sRUFDSlEsVUFBVSxJQUFJLEVBQ2RYLFlBQVksSUFBSSxFQUNoQkMsY0FBY1csbUJBQW1CLElBQUksRUFDckNDLG9CQUFvQixRQUFRLEVBQzVCQyxpQkFBaUJqQixXQUFXLEVBQzVCa0Isc0JB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O3dDQUFDLElBQU87Z0JBQ3BDeUwsV0FBV3JIO2dCQUNYLHdFQUF3RTtnQkFDeEUseURBQXlEO2dCQUN6RCwrQ0FBK0M7Z0JBQy9DNEgsZUFBZUY7Z0JBQ2ZHLGFBQWFIO2dCQUNiSSxnQkFBZ0I1RztnQkFDaEI2RyxvQkFBbUI5SCxLQUFLO29CQUN0QmlCO29CQUNBc0csZ0NBQWdDdkg7Z0JBQ2xDO2dCQUNBK0gsc0JBQXFCL0gsS0FBSztvQkFDeEJpQjtvQkFDQXNHLGdDQUFnQ3ZIO2dCQUNsQztnQkFDQWdJLGtCQUFrQi9HO2dCQUNsQmdILG1CQUFtQmhIO2dCQUNuQmlILG9CQUFvQmpIO1lBQ3RCO3VDQUFJO1FBQUNsQjtRQUFzQmtCO1FBQXFCc0c7UUFBaUNFO0tBQThCO0lBQy9HLE9BQU85TCwwQ0FBYTs4QkFBQyxJQUFNeUMsVUFBVTtnQkFDbkM4STtnQkFDQTFFO2dCQUNBZSxTQUFTMkQ7WUFDWCxJQUFJLENBQUM7NkJBQUc7UUFBQzlJO1FBQVM4STtRQUFXMUU7S0FBUztBQUN4QztHQS9hZ0I3RTs7UUFpQkRaLHdFQUFlQTtRQUNMUiwrRUFBaUJBO1FBR1BBLCtFQUFpQkE7UUFVaEJELGlFQUFVQTtRQUNSQSxpRUFBVUE7UUFDakJDLCtFQUFpQkE7UUFNZEEsK0VBQWlCQTtRQUNwQkEsK0VBQWlCQTtRQWdDbEJBLCtFQUFpQkE7UUFvVExBLCtFQUFpQkE7UUFlbkJBLCtFQUFpQkEiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2Zsb2F0aW5nLXVpLXJlYWN0L2hvb2tzL3VzZURpc21pc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBnZXRQYXJlbnROb2RlLCBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNTaGFkb3dSb290LCBpc1dlYktpdCB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuaW1wb3J0IHsgYWRkRXZlbnRMaXN0ZW5lciB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL2FkZEV2ZW50TGlzdGVuZXInO1xuaW1wb3J0IHsgbWVyZ2VDbGVhbnVwcyB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL21lcmdlQ2xlYW51cHMnO1xuaW1wb3J0IHsgVGltZW91dCwgdXNlVGltZW91dCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZVRpbWVvdXQnO1xuaW1wb3J0IHsgdXNlU3RhYmxlQ2FsbGJhY2sgfSBmcm9tICdAYmFzZS11aS91dGlscy91c2VTdGFibGVDYWxsYmFjayc7XG5pbXBvcnQgeyBvd25lckRvY3VtZW50IH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvb3duZXInO1xuaW1wb3J0IHsgY29udGFpbnMsIGdldFRhcmdldCwgaXNFdmVudFRhcmdldFdpdGhpbiwgaXNSb290RWxlbWVudCB9IGZyb20gXCIuLi91dGlscy9lbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1JlYWN0RXZlbnQgfSBmcm9tIFwiLi4vdXRpbHMvZXZlbnQuanNcIjtcbmltcG9ydCB7IGdldE5vZGVDaGlsZHJlbiB9IGZyb20gXCIuLi91dGlscy9ub2Rlcy5qc1wiO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuXG5pbXBvcnQgeyB1c2VGbG9hdGluZ1RyZWUgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9GbG9hdGluZ1RyZWUuanNcIjtcbmltcG9ydCB7IGNyZWF0ZUNoYW5nZUV2ZW50RGV0YWlscyB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvY3JlYXRlQmFzZVVJRXZlbnREZXRhaWxzLmpzXCI7XG5pbXBvcnQgeyBSRUFTT05TIH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy9yZWFzb25zLmpzXCI7XG5pbXBvcnQgeyBjcmVhdGVBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vdXRpbHMvY3JlYXRlQXR0cmlidXRlLmpzXCI7XG5jb25zdCBidWJibGVIYW5kbGVyS2V5cyA9IHtcbiAgaW50ZW50aW9uYWw6ICdvbkNsaWNrJyxcbiAgc2xvcHB5OiAnb25Qb2ludGVyRG93bidcbn07XG5mdW5jdGlvbiBhbHdheXNGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByb3Aobm9ybWFsaXphYmxlKSB7XG4gIHJldHVybiB7XG4gICAgZXNjYXBlS2V5OiB0eXBlb2Ygbm9ybWFsaXphYmxlID09PSAnYm9vbGVhbicgPyBub3JtYWxpemFibGUgOiBub3JtYWxpemFibGU/LmVzY2FwZUtleSA/PyBmYWxzZSxcbiAgICBvdXRzaWRlUHJlc3M6IHR5cGVvZiBub3JtYWxpemFibGUgPT09ICdib29sZWFuJyA/IG5vcm1hbGl6YWJsZSA6IG5vcm1hbGl6YWJsZT8ub3V0c2lkZVByZXNzID8/IHRydWVcbiAgfTtcbn1cbi8qKlxuICogQ2xvc2VzIHRoZSBmbG9hdGluZyBlbGVtZW50IHdoZW4gYSBkaXNtaXNzYWwgaXMgcmVxdWVzdGVkIOKAlCBieSBkZWZhdWx0LCB3aGVuXG4gKiB0aGUgdXNlciBwcmVzc2VzIHRoZSBgZXNjYXBlYCBrZXkgb3Igb3V0c2lkZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy91c2VEaXNtaXNzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VEaXNtaXNzKGNvbnRleHQsIHByb3BzID0ge30pIHtcbiAgY29uc3Qgc3RvcmUgPSAncm9vdFN0b3JlJyBpbiBjb250ZXh0ID8gY29udGV4dC5yb290U3RvcmUgOiBjb250ZXh0O1xuICBjb25zdCBvcGVuID0gc3RvcmUudXNlU3RhdGUoJ29wZW4nKTtcbiAgY29uc3QgZmxvYXRpbmdFbGVtZW50ID0gc3RvcmUudXNlU3RhdGUoJ2Zsb2F0aW5nRWxlbWVudCcpO1xuICBjb25zdCB7XG4gICAgZGF0YVJlZlxuICB9ID0gc3RvcmUuY29udGV4dDtcbiAgY29uc3Qge1xuICAgIGVuYWJsZWQgPSB0cnVlLFxuICAgIGVzY2FwZUtleSA9IHRydWUsXG4gICAgb3V0c2lkZVByZXNzOiBvdXRzaWRlUHJlc3NQcm9wID0gdHJ1ZSxcbiAgICBvdXRzaWRlUHJlc3NFdmVudCA9ICdzbG9wcHknLFxuICAgIHJlZmVyZW5jZVByZXNzID0gYWx3YXlzRmFsc2UsXG4gICAgcmVmZXJlbmNlUHJlc3NFdmVudCA9ICdzbG9wcHknLFxuICAgIGJ1YmJsZXMsXG4gICAgZXh0ZXJuYWxUcmVlXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgdHJlZSA9IHVzZUZsb2F0aW5nVHJlZShleHRlcm5hbFRyZWUpO1xuICBjb25zdCBvdXRzaWRlUHJlc3NGbiA9IHVzZVN0YWJsZUNhbGxiYWNrKHR5cGVvZiBvdXRzaWRlUHJlc3NQcm9wID09PSAnZnVuY3Rpb24nID8gb3V0c2lkZVByZXNzUHJvcCA6ICgpID0+IGZhbHNlKTtcbiAgY29uc3Qgb3V0c2lkZVByZXNzID0gdHlwZW9mIG91dHNpZGVQcmVzc1Byb3AgPT09ICdmdW5jdGlvbicgPyBvdXRzaWRlUHJlc3NGbiA6IG91dHNpZGVQcmVzc1Byb3A7XG4gIGNvbnN0IG91dHNpZGVQcmVzc0VuYWJsZWQgPSBvdXRzaWRlUHJlc3MgIT09IGZhbHNlO1xuICBjb25zdCBnZXRPdXRzaWRlUHJlc3NFdmVudFByb3AgPSB1c2VTdGFibGVDYWxsYmFjaygoKSA9PiBvdXRzaWRlUHJlc3NFdmVudCk7XG4gIGNvbnN0IHByZXNzU3RhcnRlZEluc2lkZVJlZiA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIGNvbnN0IHByZXNzU3RhcnRQcmV2ZW50ZWRSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAvLyBJZ25vcmUgb25seSB0aGUgdmVyeSBuZXh0IG91dHNpZGUgY2xpY2sgYWZ0ZXIgZHJhZ2dpbmcgZnJvbSBpbnNpZGUgdG8gb3V0c2lkZS5cbiAgY29uc3Qgc3VwcHJlc3NOZXh0T3V0c2lkZUNsaWNrUmVmID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgY29uc3Qge1xuICAgIGVzY2FwZUtleTogZXNjYXBlS2V5QnViYmxlcyxcbiAgICBvdXRzaWRlUHJlc3M6IG91dHNpZGVQcmVzc0J1YmJsZXNcbiAgfSA9IG5vcm1hbGl6ZVByb3AoYnViYmxlcyk7XG4gIGNvbnN0IHRvdWNoU3RhdGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGNhbmNlbERpc21pc3NPbkVuZFRpbWVvdXQgPSB1c2VUaW1lb3V0KCk7XG4gIGNvbnN0IGNsZWFySW5zaWRlUmVhY3RUcmVlVGltZW91dCA9IHVzZVRpbWVvdXQoKTtcbiAgY29uc3QgY2xlYXJJbnNpZGVSZWFjdFRyZWUgPSB1c2VTdGFibGVDYWxsYmFjaygoKSA9PiB7XG4gICAgY2xlYXJJbnNpZGVSZWFjdFRyZWVUaW1lb3V0LmNsZWFyKCk7XG4gICAgZGF0YVJlZi5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZSA9IGZhbHNlO1xuICB9KTtcbiAgY29uc3QgaXNDb21wb3NpbmdSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBjdXJyZW50UG9pbnRlclR5cGVSZWYgPSBSZWFjdC51c2VSZWYoJycpO1xuICBjb25zdCBpc1JlZmVyZW5jZVByZXNzRW5hYmxlZCA9IHVzZVN0YWJsZUNhbGxiYWNrKHJlZmVyZW5jZVByZXNzKTtcbiAgY29uc3QgY2xvc2VPbkVzY2FwZUtleURvd24gPSB1c2VTdGFibGVDYWxsYmFjayhldmVudCA9PiB7XG4gICAgaWYgKCFvcGVuIHx8ICFlbmFibGVkIHx8ICFlc2NhcGVLZXkgfHwgZXZlbnQua2V5ICE9PSAnRXNjYXBlJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdhaXQgdW50aWwgSU1FIGlzIHNldHRsZWQuIFByZXNzaW5nIGBFc2NhcGVgIHdoaWxlIGNvbXBvc2luZyBzaG91bGRcbiAgICAvLyBjbG9zZSB0aGUgY29tcG9zZSBtZW51LCBidXQgbm90IHRoZSBmbG9hdGluZyBlbGVtZW50LlxuICAgIGlmIChpc0NvbXBvc2luZ1JlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5vZGVJZCA9IGRhdGFSZWYuY3VycmVudC5mbG9hdGluZ0NvbnRleHQ/Lm5vZGVJZDtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRyZWUgPyBnZXROb2RlQ2hpbGRyZW4odHJlZS5ub2Rlc1JlZi5jdXJyZW50LCBub2RlSWQpIDogW107XG4gICAgaWYgKCFlc2NhcGVLZXlCdWJibGVzKSB7XG4gICAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICBsZXQgc2hvdWxkRGlzbWlzcyA9IHRydWU7XG4gICAgICAgIGNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZC5jb250ZXh0Py5vcGVuICYmICFjaGlsZC5jb250ZXh0LmRhdGFSZWYuY3VycmVudC5fX2VzY2FwZUtleUJ1YmJsZXMpIHtcbiAgICAgICAgICAgIHNob3VsZERpc21pc3MgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXNob3VsZERpc21pc3MpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbmF0aXZlID0gaXNSZWFjdEV2ZW50KGV2ZW50KSA/IGV2ZW50Lm5hdGl2ZUV2ZW50IDogZXZlbnQ7XG4gICAgY29uc3QgZXZlbnREZXRhaWxzID0gY3JlYXRlQ2hhbmdlRXZlbnREZXRhaWxzKFJFQVNPTlMuZXNjYXBlS2V5LCBuYXRpdmUpO1xuICAgIHN0b3JlLnNldE9wZW4oZmFsc2UsIGV2ZW50RGV0YWlscyk7XG4gICAgaWYgKCFlc2NhcGVLZXlCdWJibGVzICYmICFldmVudERldGFpbHMuaXNQcm9wYWdhdGlvbkFsbG93ZWQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IG1hcmtJbnNpZGVSZWFjdFRyZWUgPSB1c2VTdGFibGVDYWxsYmFjaygoKSA9PiB7XG4gICAgZGF0YVJlZi5jdXJyZW50Lmluc2lkZVJlYWN0VHJlZSA9IHRydWU7XG4gICAgY2xlYXJJbnNpZGVSZWFjdFRyZWVUaW1lb3V0LnN0YXJ0KDAsIGNsZWFySW5zaWRlUmVhY3RUcmVlKTtcbiAgfSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuIHx8ICFlbmFibGVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBkYXRhUmVmLmN1cnJlbnQuX19lc2NhcGVLZXlCdWJibGVzID0gZXNjYXBlS2V5QnViYmxlcztcbiAgICBkYXRhUmVmLmN1cnJlbnQuX19vdXRzaWRlUHJlc3NCdWJibGVzID0gb3V0c2lkZVByZXNzQnViYmxlcztcbiAgICBjb25zdCBjb21wb3NpdGlvblRpbWVvdXQgPSBuZXcgVGltZW91dCgpO1xuICAgIGNvbnN0IHByZXZlbnRlZFByZXNzU3VwcHJlc3Npb25UaW1lb3V0ID0gbmV3IFRpbWVvdXQoKTtcbiAgICBmdW5jdGlvbiBoYW5kbGVDb21wb3NpdGlvblN0YXJ0KCkge1xuICAgICAgY29tcG9zaXRpb25UaW1lb3V0LmNsZWFyKCk7XG4gICAgICBpc0NvbXBvc2luZ1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFuZGxlQ29tcG9zaXRpb25FbmQoKSB7XG4gICAgICAvLyBTYWZhcmkgZmlyZXMgYGNvbXBvc2l0aW9uZW5kYCBiZWZvcmUgYGtleWRvd25gLCBzbyB3ZSBuZWVkIHRvIHdhaXRcbiAgICAgIC8vIHVudGlsIHRoZSBuZXh0IHRpY2sgdG8gc2V0IGBpc0NvbXBvc2luZ2AgdG8gYGZhbHNlYC5cbiAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjUwMDRcbiAgICAgIGNvbXBvc2l0aW9uVGltZW91dC5zdGFydChcbiAgICAgIC8vIDBtcyBvciAxbXMgZG9uJ3Qgd29yayBpbiBTYWZhcmkuIDVtcyBhcHBlYXJzIHRvIGNvbnNpc3RlbnRseSB3b3JrLlxuICAgICAgLy8gT25seSBhcHBseSB0byBXZWJLaXQgZm9yIHRoZSB0ZXN0IHRvIHJlbWFpbiAwbXMuXG4gICAgICBpc1dlYktpdCgpID8gNSA6IDAsICgpID0+IHtcbiAgICAgICAgaXNDb21wb3NpbmdSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN1cHByZXNzSW1tZWRpYXRlT3V0c2lkZUNsaWNrQWZ0ZXJQcmV2ZW50ZWRTdGFydCgpIHtcbiAgICAgIHN1cHByZXNzTmV4dE91dHNpZGVDbGlja1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIC8vIEZpcmVmb3ggY2FuIGVtaXQgdGhlIHN5bnRoZXRpYyBvdXRzaWRlIGNsaWNrIGluIGEgbGF0ZXIgdGFzayBhZnRlclxuICAgICAgLy8gcG9pbnRlciBsb2NrIGV4aXQsIHNvIG1pY3JvdGFzayBjbGVhcmluZyBpcyB0b28gZWFybHkgaGVyZS5cbiAgICAgIHByZXZlbnRlZFByZXNzU3VwcHJlc3Npb25UaW1lb3V0LnN0YXJ0KDAsICgpID0+IHtcbiAgICAgICAgc3VwcHJlc3NOZXh0T3V0c2lkZUNsaWNrUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZXNldFByZXNzU3RhcnRTdGF0ZSgpIHtcbiAgICAgIHByZXNzU3RhcnRlZEluc2lkZVJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICBwcmVzc1N0YXJ0UHJldmVudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0T3V0c2lkZVByZXNzRXZlbnQoKSB7XG4gICAgICBjb25zdCB0eXBlID0gY3VycmVudFBvaW50ZXJUeXBlUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBjb21wdXRlZFR5cGUgPSB0eXBlID09PSAncGVuJyB8fCAhdHlwZSA/ICdtb3VzZScgOiB0eXBlO1xuICAgICAgY29uc3Qgb3V0c2lkZVByZXNzRXZlbnRWYWx1ZSA9IGdldE91dHNpZGVQcmVzc0V2ZW50UHJvcCgpO1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSB0eXBlb2Ygb3V0c2lkZVByZXNzRXZlbnRWYWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IG91dHNpZGVQcmVzc0V2ZW50VmFsdWUoKSA6IG91dHNpZGVQcmVzc0V2ZW50VmFsdWU7XG4gICAgICBpZiAodHlwZW9mIHJlc29sdmVkID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzb2x2ZWRbY29tcHV0ZWRUeXBlXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc2hvdWxkSWdub3JlRXZlbnQoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkT3V0c2lkZVByZXNzRXZlbnQgPSBnZXRPdXRzaWRlUHJlc3NFdmVudCgpO1xuICAgICAgcmV0dXJuIGNvbXB1dGVkT3V0c2lkZVByZXNzRXZlbnQgPT09ICdpbnRlbnRpb25hbCcgJiYgZXZlbnQudHlwZSAhPT0gJ2NsaWNrJyB8fCBjb21wdXRlZE91dHNpZGVQcmVzc0V2ZW50ID09PSAnc2xvcHB5JyAmJiBldmVudC50eXBlID09PSAnY2xpY2snO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0V2ZW50V2l0aGluRmxvYXRpbmdUcmVlKGV2ZW50KSB7XG4gICAgICBjb25zdCBub2RlSWQgPSBkYXRhUmVmLmN1cnJlbnQuZmxvYXRpbmdDb250ZXh0Py5ub2RlSWQ7XG4gICAgICBjb25zdCB0YXJnZXRJc0luc2lkZUNoaWxkcmVuID0gdHJlZSAmJiBnZXROb2RlQ2hpbGRyZW4odHJlZS5ub2Rlc1JlZi5jdXJyZW50LCBub2RlSWQpLnNvbWUobm9kZSA9PiBpc0V2ZW50VGFyZ2V0V2l0aGluKGV2ZW50LCBub2RlLmNvbnRleHQ/LmVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gICAgICByZXR1cm4gaXNFdmVudFRhcmdldFdpdGhpbihldmVudCwgc3RvcmUuc2VsZWN0KCdmbG9hdGluZ0VsZW1lbnQnKSkgfHwgaXNFdmVudFRhcmdldFdpdGhpbihldmVudCwgc3RvcmUuc2VsZWN0KCdkb21SZWZlcmVuY2VFbGVtZW50JykpIHx8IHRhcmdldElzSW5zaWRlQ2hpbGRyZW47XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsb3NlT25QcmVzc091dHNpZGUoZXZlbnQpIHtcbiAgICAgIGlmIChzaG91bGRJZ25vcmVFdmVudChldmVudCkpIHtcbiAgICAgICAgY2xlYXJJbnNpZGVSZWFjdFRyZWUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGFSZWYuY3VycmVudC5pbnNpZGVSZWFjdFRyZWUpIHtcbiAgICAgICAgY2xlYXJJbnNpZGVSZWFjdFRyZWUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgdGFyZ2V0ID0gZ2V0VGFyZ2V0KGV2ZW50KTtcbiAgICAgIGNvbnN0IGluZXJ0U2VsZWN0b3IgPSBgWyR7Y3JlYXRlQXR0cmlidXRlKCdpbmVydCcpfV1gO1xuICAgICAgY29uc3QgdGFyZ2V0Um9vdCA9IGlzRWxlbWVudCh0YXJnZXQpID8gdGFyZ2V0LmdldFJvb3ROb2RlKCkgOiBudWxsO1xuICAgICAgY29uc3QgbWFya2VycyA9IEFycmF5LmZyb20oKGlzU2hhZG93Um9vdCh0YXJnZXRSb290KSA/IHRhcmdldFJvb3QgOiBvd25lckRvY3VtZW50KHN0b3JlLnNlbGVjdCgnZmxvYXRpbmdFbGVtZW50JykpKS5xdWVyeVNlbGVjdG9yQWxsKGluZXJ0U2VsZWN0b3IpKTtcbiAgICAgIGNvbnN0IHRyaWdnZXJzID0gc3RvcmUuY29udGV4dC50cmlnZ2VyRWxlbWVudHM7XG5cbiAgICAgIC8vIElmIGFub3RoZXIgdHJpZ2dlciBpcyBjbGlja2VkLCBkb24ndCBjbG9zZSB0aGUgZmxvYXRpbmcgZWxlbWVudC5cbiAgICAgIGlmICh0YXJnZXQgJiYgKHRyaWdnZXJzLmhhc0VsZW1lbnQodGFyZ2V0KSB8fCB0cmlnZ2Vycy5oYXNNYXRjaGluZ0VsZW1lbnQodHJpZ2dlciA9PiBjb250YWlucyh0cmlnZ2VyLCB0YXJnZXQpKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IHRhcmdldFJvb3RBbmNlc3RvciA9IGlzRWxlbWVudCh0YXJnZXQpID8gdGFyZ2V0IDogbnVsbDtcbiAgICAgIHdoaWxlICh0YXJnZXRSb290QW5jZXN0b3IgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZSh0YXJnZXRSb290QW5jZXN0b3IpKSB7XG4gICAgICAgIGNvbnN0IG5leHRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKHRhcmdldFJvb3RBbmNlc3Rvcik7XG4gICAgICAgIGlmIChpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobmV4dFBhcmVudCkgfHwgIWlzRWxlbWVudChuZXh0UGFyZW50KSkge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHRhcmdldFJvb3RBbmNlc3RvciA9IG5leHRQYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBjbGljayBvY2N1cnJlZCBvbiBhIHRoaXJkLXBhcnR5IGVsZW1lbnQgaW5qZWN0ZWQgYWZ0ZXIgdGhlXG4gICAgICAvLyBmbG9hdGluZyBlbGVtZW50IHJlbmRlcmVkLlxuICAgICAgaWYgKG1hcmtlcnMubGVuZ3RoICYmIGlzRWxlbWVudCh0YXJnZXQpICYmICFpc1Jvb3RFbGVtZW50KHRhcmdldCkgJiZcbiAgICAgIC8vIENsaWNrZWQgb24gYSBkaXJlY3QgYW5jZXN0b3IgKGUuZy4gRmxvYXRpbmdPdmVybGF5KS5cbiAgICAgICFjb250YWlucyh0YXJnZXQsIHN0b3JlLnNlbGVjdCgnZmxvYXRpbmdFbGVtZW50JykpICYmXG4gICAgICAvLyBJZiB0aGUgdGFyZ2V0IHJvb3QgZWxlbWVudCBjb250YWlucyBub25lIG9mIHRoZSBtYXJrZXJzLCB0aGVuIHRoZVxuICAgICAgLy8gZWxlbWVudCB3YXMgaW5qZWN0ZWQgYWZ0ZXIgdGhlIGZsb2F0aW5nIGVsZW1lbnQgcmVuZGVyZWQuXG4gICAgICBtYXJrZXJzLmV2ZXJ5KG1hcmtlciA9PiAhY29udGFpbnModGFyZ2V0Um9vdEFuY2VzdG9yLCBtYXJrZXIpKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBjbGljayBvY2N1cnJlZCBvbiB0aGUgc2Nyb2xsYmFyXG4gICAgICAvLyBTa2lwIGZvciB0b3VjaCBldmVudHM6IHNjcm9sbGJhcnMgZG9uJ3QgcmVjZWl2ZSB0b3VjaCBldmVudHMgb24gbW9zdCBwbGF0Zm9ybXNcbiAgICAgIGlmIChpc0hUTUxFbGVtZW50KHRhcmdldCkgJiYgISgndG91Y2hlcycgaW4gZXZlbnQpKSB7XG4gICAgICAgIGNvbnN0IGxhc3RUcmF2ZXJzYWJsZU5vZGUgPSBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUodGFyZ2V0KTtcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHRhcmdldCk7XG4gICAgICAgIGNvbnN0IHNjcm9sbFJlID0gL2F1dG98c2Nyb2xsLztcbiAgICAgICAgY29uc3QgaXNTY3JvbGxhYmxlWCA9IGxhc3RUcmF2ZXJzYWJsZU5vZGUgfHwgc2Nyb2xsUmUudGVzdChzdHlsZS5vdmVyZmxvd1gpO1xuICAgICAgICBjb25zdCBpc1Njcm9sbGFibGVZID0gbGFzdFRyYXZlcnNhYmxlTm9kZSB8fCBzY3JvbGxSZS50ZXN0KHN0eWxlLm92ZXJmbG93WSk7XG4gICAgICAgIGNvbnN0IGNhblNjcm9sbFggPSBpc1Njcm9sbGFibGVYICYmIHRhcmdldC5jbGllbnRXaWR0aCA+IDAgJiYgdGFyZ2V0LnNjcm9sbFdpZHRoID4gdGFyZ2V0LmNsaWVudFdpZHRoO1xuICAgICAgICBjb25zdCBjYW5TY3JvbGxZID0gaXNTY3JvbGxhYmxlWSAmJiB0YXJnZXQuY2xpZW50SGVpZ2h0ID4gMCAmJiB0YXJnZXQuc2Nyb2xsSGVpZ2h0ID4gdGFyZ2V0LmNsaWVudEhlaWdodDtcbiAgICAgICAgY29uc3QgaXNSVEwgPSBzdHlsZS5kaXJlY3Rpb24gPT09ICdydGwnO1xuXG4gICAgICAgIC8vIENoZWNrIGNsaWNrIHBvc2l0aW9uIHJlbGF0aXZlIHRvIHNjcm9sbGJhci5cbiAgICAgICAgLy8gSW4gc29tZSBicm93c2VycyBpdCBpcyBwb3NzaWJsZSB0byBjaGFuZ2UgdGhlIDxib2R5PiAob3Igd2luZG93KVxuICAgICAgICAvLyBzY3JvbGxiYXIgdG8gdGhlIGxlZnQgc2lkZSwgYnV0IGlzIHZlcnkgcmFyZSBhbmQgaXMgZGlmZmljdWx0IHRvXG4gICAgICAgIC8vIGNoZWNrIGZvci4gUGx1cywgZm9yIG1vZGFsIGRpYWxvZ3Mgd2l0aCBiYWNrZHJvcHMsIGl0IGlzIG1vcmVcbiAgICAgICAgLy8gaW1wb3J0YW50IHRoYXQgdGhlIGJhY2tkcm9wIGlzIGNoZWNrZWQgYnV0IG5vdCBzbyBtdWNoIHRoZSB3aW5kb3cuXG4gICAgICAgIGNvbnN0IHByZXNzZWRWZXJ0aWNhbFNjcm9sbGJhciA9IGNhblNjcm9sbFkgJiYgKGlzUlRMID8gZXZlbnQub2Zmc2V0WCA8PSB0YXJnZXQub2Zmc2V0V2lkdGggLSB0YXJnZXQuY2xpZW50V2lkdGggOiBldmVudC5vZmZzZXRYID4gdGFyZ2V0LmNsaWVudFdpZHRoKTtcbiAgICAgICAgY29uc3QgcHJlc3NlZEhvcml6b250YWxTY3JvbGxiYXIgPSBjYW5TY3JvbGxYICYmIGV2ZW50Lm9mZnNldFkgPiB0YXJnZXQuY2xpZW50SGVpZ2h0O1xuICAgICAgICBpZiAocHJlc3NlZFZlcnRpY2FsU2Nyb2xsYmFyIHx8IHByZXNzZWRIb3Jpem9udGFsU2Nyb2xsYmFyKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaXNFdmVudFdpdGhpbkZsb2F0aW5nVHJlZShldmVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJbiBpbnRlbnRpb25hbCBtb2RlLCBhIHByZXNzIHRoYXQgc3RhcnRzIGluc2lkZSBhbmQgZW5kcyBvdXRzaWRlIGdldHNcbiAgICAgIC8vIG9uZSBzdXBwcmVzc2VkIG91dHNpZGUgY2xpY2suIFJ1biB0aGlzIGFmdGVyIGluc2lkZS10YXJnZXQgY2hlY2tzIHNvXG4gICAgICAvLyBpbnNpZGUgY2xpY2tzIGRvbid0IGNvbnN1bWUgdGhlIG9uZS1zaG90IHN1cHByZXNzaW9uLlxuICAgICAgaWYgKGdldE91dHNpZGVQcmVzc0V2ZW50KCkgPT09ICdpbnRlbnRpb25hbCcgJiYgc3VwcHJlc3NOZXh0T3V0c2lkZUNsaWNrUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcHJldmVudGVkUHJlc3NTdXBwcmVzc2lvblRpbWVvdXQuY2xlYXIoKTtcbiAgICAgICAgc3VwcHJlc3NOZXh0T3V0c2lkZUNsaWNrUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvdXRzaWRlUHJlc3MgPT09ICdmdW5jdGlvbicgJiYgIW91dHNpZGVQcmVzcyhldmVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgbm9kZUlkID0gZGF0YVJlZi5jdXJyZW50LmZsb2F0aW5nQ29udGV4dD8ubm9kZUlkO1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSB0cmVlID8gZ2V0Tm9kZUNoaWxkcmVuKHRyZWUubm9kZXNSZWYuY3VycmVudCwgbm9kZUlkKSA6IFtdO1xuICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IHNob3VsZERpc21pc3MgPSB0cnVlO1xuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQuY29udGV4dD8ub3BlbiAmJiAhY2hpbGQuY29udGV4dC5kYXRhUmVmLmN1cnJlbnQuX19vdXRzaWRlUHJlc3NCdWJibGVzKSB7XG4gICAgICAgICAgICBzaG91bGREaXNtaXNzID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFzaG91bGREaXNtaXNzKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBzdG9yZS5zZXRPcGVuKGZhbHNlLCBjcmVhdGVDaGFuZ2VFdmVudERldGFpbHMoUkVBU09OUy5vdXRzaWRlUHJlc3MsIGV2ZW50KSk7XG4gICAgICBjbGVhckluc2lkZVJlYWN0VHJlZSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVQb2ludGVyRG93bihldmVudCkge1xuICAgICAgaWYgKGdldE91dHNpZGVQcmVzc0V2ZW50KCkgIT09ICdzbG9wcHknIHx8IGV2ZW50LnBvaW50ZXJUeXBlID09PSAndG91Y2gnIHx8ICFzdG9yZS5zZWxlY3QoJ29wZW4nKSB8fCAhZW5hYmxlZCB8fCBpc0V2ZW50VGFyZ2V0V2l0aGluKGV2ZW50LCBzdG9yZS5zZWxlY3QoJ2Zsb2F0aW5nRWxlbWVudCcpKSB8fCBpc0V2ZW50VGFyZ2V0V2l0aGluKGV2ZW50LCBzdG9yZS5zZWxlY3QoJ2RvbVJlZmVyZW5jZUVsZW1lbnQnKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2xvc2VPblByZXNzT3V0c2lkZShldmVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZVRvdWNoU3RhcnQoZXZlbnQpIHtcbiAgICAgIGlmIChnZXRPdXRzaWRlUHJlc3NFdmVudCgpICE9PSAnc2xvcHB5JyB8fCAhc3RvcmUuc2VsZWN0KCdvcGVuJykgfHwgIWVuYWJsZWQgfHwgaXNFdmVudFRhcmdldFdpdGhpbihldmVudCwgc3RvcmUuc2VsZWN0KCdmbG9hdGluZ0VsZW1lbnQnKSkgfHwgaXNFdmVudFRhcmdldFdpdGhpbihldmVudCwgc3RvcmUuc2VsZWN0KCdkb21SZWZlcmVuY2VFbGVtZW50JykpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRvdWNoID0gZXZlbnQudG91Y2hlc1swXTtcbiAgICAgIGlmICh0b3VjaCkge1xuICAgICAgICB0b3VjaFN0YXRlUmVmLmN1cnJlbnQgPSB7XG4gICAgICAgICAgc3RhcnRUaW1lOiBEYXRlLm5vdygpLFxuICAgICAgICAgIHN0YXJ0WDogdG91Y2guY2xpZW50WCxcbiAgICAgICAgICBzdGFydFk6IHRvdWNoLmNsaWVudFksXG4gICAgICAgICAgZGlzbWlzc09uVG91Y2hFbmQ6IGZhbHNlLFxuICAgICAgICAgIGRpc21pc3NPbk1vdXNlRG93bjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICBjYW5jZWxEaXNtaXNzT25FbmRUaW1lb3V0LnN0YXJ0KDEwMDAsICgpID0+IHtcbiAgICAgICAgICBpZiAodG91Y2hTdGF0ZVJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICB0b3VjaFN0YXRlUmVmLmN1cnJlbnQuZGlzbWlzc09uVG91Y2hFbmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRvdWNoU3RhdGVSZWYuY3VycmVudC5kaXNtaXNzT25Nb3VzZURvd24gPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRUYXJnZXRFdmVudExpc3RlbmVyT25jZShldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IGdldFRhcmdldChldmVudCk7XG4gICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB1bnN1YnNjcmliZSA9IGFkZEV2ZW50TGlzdGVuZXIodGFyZ2V0LCBldmVudC50eXBlLCAoKSA9PiB7XG4gICAgICAgIGxpc3RlbmVyKGV2ZW50KTtcbiAgICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVUb3VjaFN0YXJ0Q2FwdHVyZShldmVudCkge1xuICAgICAgY3VycmVudFBvaW50ZXJUeXBlUmVmLmN1cnJlbnQgPSAndG91Y2gnO1xuICAgICAgYWRkVGFyZ2V0RXZlbnRMaXN0ZW5lck9uY2UoZXZlbnQsIGhhbmRsZVRvdWNoU3RhcnQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjbG9zZU9uUHJlc3NPdXRzaWRlQ2FwdHVyZShldmVudCkge1xuICAgICAgY2FuY2VsRGlzbWlzc09uRW5kVGltZW91dC5jbGVhcigpO1xuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwb2ludGVyZG93bicpIHtcbiAgICAgICAgY3VycmVudFBvaW50ZXJUeXBlUmVmLmN1cnJlbnQgPSBldmVudC5wb2ludGVyVHlwZTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudC50eXBlID09PSAnbW91c2Vkb3duJyAmJiB0b3VjaFN0YXRlUmVmLmN1cnJlbnQgJiYgIXRvdWNoU3RhdGVSZWYuY3VycmVudC5kaXNtaXNzT25Nb3VzZURvd24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYWRkVGFyZ2V0RXZlbnRMaXN0ZW5lck9uY2UoZXZlbnQsIHRhcmdldEV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHRhcmdldEV2ZW50LnR5cGUgPT09ICdwb2ludGVyZG93bicpIHtcbiAgICAgICAgICBoYW5kbGVQb2ludGVyRG93bih0YXJnZXRFdmVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2xvc2VPblByZXNzT3V0c2lkZSh0YXJnZXRFdmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVQcmVzc0VuZENhcHR1cmUoZXZlbnQpIHtcbiAgICAgIGlmICghcHJlc3NTdGFydGVkSW5zaWRlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgcHJlc3NTdGFydGVkSW5zaWRlRGVmYXVsdFByZXZlbnRlZCA9IHByZXNzU3RhcnRQcmV2ZW50ZWRSZWYuY3VycmVudDtcbiAgICAgIHJlc2V0UHJlc3NTdGFydFN0YXRlKCk7XG4gICAgICBpZiAoZ2V0T3V0c2lkZVByZXNzRXZlbnQoKSAhPT0gJ2ludGVudGlvbmFsJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3BvaW50ZXJjYW5jZWwnKSB7XG4gICAgICAgIGlmIChwcmVzc1N0YXJ0ZWRJbnNpZGVEZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgc3VwcHJlc3NJbW1lZGlhdGVPdXRzaWRlQ2xpY2tBZnRlclByZXZlbnRlZFN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzRXZlbnRXaXRoaW5GbG9hdGluZ1RyZWUoZXZlbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgcG9pbnRlcmRvd24gd2FzIHByZXZlbnRlZCwgbm8gY2xpY2sgbWF5IGJlIGdlbmVyYXRlZCBmb3IgdGhhdFxuICAgICAgLy8gaW50ZXJhY3Rpb24uIEhvd2V2ZXIsIEZpcmVmb3ggbWF5IHN0aWxsIGVtaXQgYW4gaW1tZWRpYXRlIGNsaWNrIGFmdGVyXG4gICAgICAvLyBwb2ludGVydXAgKGUuZy4gTnVtYmVyRmllbGQgc2NydWIgd2l0aCBwb2ludGVyIGxvY2spLCBzbyBzdXBwcmVzcyBmb3JcbiAgICAgIC8vIG9uZSB0aWNrIHRvIGFic29yYiB0aGF0IHN5bnRoZXRpYyBjbGljayBvbmx5LlxuICAgICAgaWYgKHByZXNzU3RhcnRlZEluc2lkZURlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgc3VwcHJlc3NJbW1lZGlhdGVPdXRzaWRlQ2xpY2tBZnRlclByZXZlbnRlZFN0YXJ0KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gQXZvaWQgc3VwcHJlc3Npbmcgd2hlbiBvdXRzaWRlUHJlc3MgZXhwbGljaXRseSBpZ25vcmVzIHRoaXMgdGFyZ2V0LlxuICAgICAgaWYgKHR5cGVvZiBvdXRzaWRlUHJlc3MgPT09ICdmdW5jdGlvbicgJiYgIW91dHNpZGVQcmVzcyhldmVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcHJldmVudGVkUHJlc3NTdXBwcmVzc2lvblRpbWVvdXQuY2xlYXIoKTtcbiAgICAgIHN1cHByZXNzTmV4dE91dHNpZGVDbGlja1JlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIGNsZWFySW5zaWRlUmVhY3RUcmVlKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZVRvdWNoTW92ZShldmVudCkge1xuICAgICAgaWYgKGdldE91dHNpZGVQcmVzc0V2ZW50KCkgIT09ICdzbG9wcHknIHx8ICF0b3VjaFN0YXRlUmVmLmN1cnJlbnQgfHwgaXNFdmVudFRhcmdldFdpdGhpbihldmVudCwgc3RvcmUuc2VsZWN0KCdmbG9hdGluZ0VsZW1lbnQnKSkgfHwgaXNFdmVudFRhcmdldFdpdGhpbihldmVudCwgc3RvcmUuc2VsZWN0KCdkb21SZWZlcmVuY2VFbGVtZW50JykpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHRvdWNoID0gZXZlbnQudG91Y2hlc1swXTtcbiAgICAgIGlmICghdG91Y2gpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVsdGFYID0gTWF0aC5hYnModG91Y2guY2xpZW50WCAtIHRvdWNoU3RhdGVSZWYuY3VycmVudC5zdGFydFgpO1xuICAgICAgY29uc3QgZGVsdGFZID0gTWF0aC5hYnModG91Y2guY2xpZW50WSAtIHRvdWNoU3RhdGVSZWYuY3VycmVudC5zdGFydFkpO1xuICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZGVsdGFYICogZGVsdGFYICsgZGVsdGFZICogZGVsdGFZKTtcbiAgICAgIGlmIChkaXN0YW5jZSA+IDUpIHtcbiAgICAgICAgdG91Y2hTdGF0ZVJlZi5jdXJyZW50LmRpc21pc3NPblRvdWNoRW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXN0YW5jZSA+IDEwKSB7XG4gICAgICAgIGNsb3NlT25QcmVzc091dHNpZGUoZXZlbnQpO1xuICAgICAgICBjYW5jZWxEaXNtaXNzT25FbmRUaW1lb3V0LmNsZWFyKCk7XG4gICAgICAgIHRvdWNoU3RhdGVSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGhhbmRsZVRvdWNoTW92ZUNhcHR1cmUoZXZlbnQpIHtcbiAgICAgIGFkZFRhcmdldEV2ZW50TGlzdGVuZXJPbmNlKGV2ZW50LCBoYW5kbGVUb3VjaE1vdmUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVUb3VjaEVuZChldmVudCkge1xuICAgICAgaWYgKGdldE91dHNpZGVQcmVzc0V2ZW50KCkgIT09ICdzbG9wcHknIHx8ICF0b3VjaFN0YXRlUmVmLmN1cnJlbnQgfHwgaXNFdmVudFRhcmdldFdpdGhpbihldmVudCwgc3RvcmUuc2VsZWN0KCdmbG9hdGluZ0VsZW1lbnQnKSkgfHwgaXNFdmVudFRhcmdldFdpdGhpbihldmVudCwgc3RvcmUuc2VsZWN0KCdkb21SZWZlcmVuY2VFbGVtZW50JykpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0b3VjaFN0YXRlUmVmLmN1cnJlbnQuZGlzbWlzc09uVG91Y2hFbmQpIHtcbiAgICAgICAgY2xvc2VPblByZXNzT3V0c2lkZShldmVudCk7XG4gICAgICB9XG4gICAgICBjYW5jZWxEaXNtaXNzT25FbmRUaW1lb3V0LmNsZWFyKCk7XG4gICAgICB0b3VjaFN0YXRlUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoYW5kbGVUb3VjaEVuZENhcHR1cmUoZXZlbnQpIHtcbiAgICAgIGFkZFRhcmdldEV2ZW50TGlzdGVuZXJPbmNlKGV2ZW50LCBoYW5kbGVUb3VjaEVuZCk7XG4gICAgfVxuICAgIGNvbnN0IGRvYyA9IG93bmVyRG9jdW1lbnQoZmxvYXRpbmdFbGVtZW50KTtcbiAgICBjb25zdCB1bnN1YnNjcmliZSA9IG1lcmdlQ2xlYW51cHMoZXNjYXBlS2V5ICYmIG1lcmdlQ2xlYW51cHMoYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdrZXlkb3duJywgY2xvc2VPbkVzY2FwZUtleURvd24pLCBhZGRFdmVudExpc3RlbmVyKGRvYywgJ2NvbXBvc2l0aW9uc3RhcnQnLCBoYW5kbGVDb21wb3NpdGlvblN0YXJ0KSwgYWRkRXZlbnRMaXN0ZW5lcihkb2MsICdjb21wb3NpdGlvbmVuZCcsIGhhbmRsZUNvbXBvc2l0aW9uRW5kKSksIG91dHNpZGVQcmVzc0VuYWJsZWQgJiYgbWVyZ2VDbGVhbnVwcyhhZGRFdmVudExpc3RlbmVyKGRvYywgJ2NsaWNrJywgY2xvc2VPblByZXNzT3V0c2lkZUNhcHR1cmUsIHRydWUpLCBhZGRFdmVudExpc3RlbmVyKGRvYywgJ3BvaW50ZXJkb3duJywgY2xvc2VPblByZXNzT3V0c2lkZUNhcHR1cmUsIHRydWUpLCBhZGRFdmVudExpc3RlbmVyKGRvYywgJ3BvaW50ZXJ1cCcsIGhhbmRsZVByZXNzRW5kQ2FwdHVyZSwgdHJ1ZSksIGFkZEV2ZW50TGlzdGVuZXIoZG9jLCAncG9pbnRlcmNhbmNlbCcsIGhhbmRsZVByZXNzRW5kQ2FwdHVyZSwgdHJ1ZSksIGFkZEV2ZW50TGlzdGVuZXIoZG9jLCAnbW91c2Vkb3duJywgY2xvc2VPblByZXNzT3V0c2lkZUNhcHR1cmUsIHRydWUpLCBhZGRFdmVudExpc3RlbmVyKGRvYywgJ21vdXNldXAnLCBoYW5kbGVQcmVzc0VuZENhcHR1cmUsIHRydWUpLCBhZGRFdmVudExpc3RlbmVyKGRvYywgJ3RvdWNoc3RhcnQnLCBoYW5kbGVUb3VjaFN0YXJ0Q2FwdHVyZSwgdHJ1ZSksIGFkZEV2ZW50TGlzdGVuZXIoZG9jLCAndG91Y2htb3ZlJywgaGFuZGxlVG91Y2hNb3ZlQ2FwdHVyZSwgdHJ1ZSksIGFkZEV2ZW50TGlzdGVuZXIoZG9jLCAndG91Y2hlbmQnLCBoYW5kbGVUb3VjaEVuZENhcHR1cmUsIHRydWUpKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICBjb21wb3NpdGlvblRpbWVvdXQuY2xlYXIoKTtcbiAgICAgIHByZXZlbnRlZFByZXNzU3VwcHJlc3Npb25UaW1lb3V0LmNsZWFyKCk7XG4gICAgICByZXNldFByZXNzU3RhcnRTdGF0ZSgpO1xuICAgICAgc3VwcHJlc3NOZXh0T3V0c2lkZUNsaWNrUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICB9O1xuICB9LCBbZGF0YVJlZiwgZmxvYXRpbmdFbGVtZW50LCBlc2NhcGVLZXksIG91dHNpZGVQcmVzc0VuYWJsZWQsIG91dHNpZGVQcmVzcywgb3BlbiwgZW5hYmxlZCwgZXNjYXBlS2V5QnViYmxlcywgb3V0c2lkZVByZXNzQnViYmxlcywgY2xvc2VPbkVzY2FwZUtleURvd24sIGNsZWFySW5zaWRlUmVhY3RUcmVlLCBnZXRPdXRzaWRlUHJlc3NFdmVudFByb3AsIHRyZWUsIHN0b3JlLCBjYW5jZWxEaXNtaXNzT25FbmRUaW1lb3V0XSk7XG4gIFJlYWN0LnVzZUVmZmVjdChjbGVhckluc2lkZVJlYWN0VHJlZSwgW291dHNpZGVQcmVzcywgY2xlYXJJbnNpZGVSZWFjdFRyZWVdKTtcbiAgY29uc3QgcmVmZXJlbmNlID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIG9uS2V5RG93bjogY2xvc2VPbkVzY2FwZUtleURvd24sXG4gICAgW2J1YmJsZUhhbmRsZXJLZXlzW3JlZmVyZW5jZVByZXNzRXZlbnRdXTogZXZlbnQgPT4ge1xuICAgICAgaWYgKCFpc1JlZmVyZW5jZVByZXNzRW5hYmxlZCgpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN0b3JlLnNldE9wZW4oZmFsc2UsIGNyZWF0ZUNoYW5nZUV2ZW50RGV0YWlscyhSRUFTT05TLnRyaWdnZXJQcmVzcywgZXZlbnQubmF0aXZlRXZlbnQpKTtcbiAgICB9LFxuICAgIC4uLihyZWZlcmVuY2VQcmVzc0V2ZW50ICE9PSAnaW50ZW50aW9uYWwnICYmIHtcbiAgICAgIG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgaWYgKCFpc1JlZmVyZW5jZVByZXNzRW5hYmxlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN0b3JlLnNldE9wZW4oZmFsc2UsIGNyZWF0ZUNoYW5nZUV2ZW50RGV0YWlscyhSRUFTT05TLnRyaWdnZXJQcmVzcywgZXZlbnQubmF0aXZlRXZlbnQpKTtcbiAgICAgIH1cbiAgICB9KVxuICB9KSwgW2Nsb3NlT25Fc2NhcGVLZXlEb3duLCBzdG9yZSwgcmVmZXJlbmNlUHJlc3NFdmVudCwgaXNSZWZlcmVuY2VQcmVzc0VuYWJsZWRdKTtcbiAgY29uc3QgbWFya1ByZXNzU3RhcnRlZEluc2lkZVJlYWN0VHJlZSA9IHVzZVN0YWJsZUNhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICBpZiAoIW9wZW4gfHwgIWVuYWJsZWQgfHwgZXZlbnQuYnV0dG9uICE9PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IGdldFRhcmdldChldmVudC5uYXRpdmVFdmVudCk7XG4gICAgLy8gT25seSB0cmVhdCBwcmVzc2VzIHRoYXQgc3RhcnQgd2l0aGluIHRoZSBmbG9hdGluZyBET00gc3VidHJlZSBhcyBpbnNpZGUuXG4gICAgLy8gVGhpcyBhdm9pZHMgc3VwcHJlc3NpbmcgcGFyZW50IGRpc21pc3NhbCB3aGVuIGludGVyYWN0aW5nIHdpdGggbmVzdGVkIHBvcnRhbHMuXG4gICAgaWYgKCFjb250YWlucyhzdG9yZS5zZWxlY3QoJ2Zsb2F0aW5nRWxlbWVudCcpLCB0YXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghcHJlc3NTdGFydGVkSW5zaWRlUmVmLmN1cnJlbnQpIHtcbiAgICAgIHByZXNzU3RhcnRlZEluc2lkZVJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIHByZXNzU3RhcnRQcmV2ZW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IG1hcmtJbnNpZGVQcmVzc1N0YXJ0UHJldmVudGVkID0gdXNlU3RhYmxlQ2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIGlmICghb3BlbiB8fCAhZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIShldmVudC5kZWZhdWx0UHJldmVudGVkIHx8IGV2ZW50Lm5hdGl2ZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwcmVzc1N0YXJ0ZWRJbnNpZGVSZWYuY3VycmVudCkge1xuICAgICAgcHJlc3NTdGFydFByZXZlbnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBmbG9hdGluZyA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICBvbktleURvd246IGNsb3NlT25Fc2NhcGVLZXlEb3duLFxuICAgIC8vIGBvbk1vdXNlRG93bmAgbWF5IGJlIGJsb2NrZWQgaWYgYGV2ZW50LnByZXZlbnREZWZhdWx0KClgIGlzIGNhbGxlZCBpblxuICAgIC8vIGBvblBvaW50ZXJEb3duYCwgc3VjaCBhcyB3aXRoIDxOdW1iZXJGaWVsZC5TY3J1YkFyZWE+LlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL2Jhc2UtdWkvcHVsbC8zMzc5XG4gICAgb25Qb2ludGVyRG93bjogbWFya0luc2lkZVByZXNzU3RhcnRQcmV2ZW50ZWQsXG4gICAgb25Nb3VzZURvd246IG1hcmtJbnNpZGVQcmVzc1N0YXJ0UHJldmVudGVkLFxuICAgIG9uQ2xpY2tDYXB0dXJlOiBtYXJrSW5zaWRlUmVhY3RUcmVlLFxuICAgIG9uTW91c2VEb3duQ2FwdHVyZShldmVudCkge1xuICAgICAgbWFya0luc2lkZVJlYWN0VHJlZSgpO1xuICAgICAgbWFya1ByZXNzU3RhcnRlZEluc2lkZVJlYWN0VHJlZShldmVudCk7XG4gICAgfSxcbiAgICBvblBvaW50ZXJEb3duQ2FwdHVyZShldmVudCkge1xuICAgICAgbWFya0luc2lkZVJlYWN0VHJlZSgpO1xuICAgICAgbWFya1ByZXNzU3RhcnRlZEluc2lkZVJlYWN0VHJlZShldmVudCk7XG4gICAgfSxcbiAgICBvbk1vdXNlVXBDYXB0dXJlOiBtYXJrSW5zaWRlUmVhY3RUcmVlLFxuICAgIG9uVG91Y2hFbmRDYXB0dXJlOiBtYXJrSW5zaWRlUmVhY3RUcmVlLFxuICAgIG9uVG91Y2hNb3ZlQ2FwdHVyZTogbWFya0luc2lkZVJlYWN0VHJlZVxuICB9KSwgW2Nsb3NlT25Fc2NhcGVLZXlEb3duLCBtYXJrSW5zaWRlUmVhY3RUcmVlLCBtYXJrUHJlc3NTdGFydGVkSW5zaWRlUmVhY3RUcmVlLCBtYXJrSW5zaWRlUHJlc3NTdGFydFByZXZlbnRlZF0pO1xuICByZXR1cm4gUmVhY3QudXNlTWVtbygoKSA9PiBlbmFibGVkID8ge1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZyxcbiAgICB0cmlnZ2VyOiByZWZlcmVuY2VcbiAgfSA6IHt9LCBbZW5hYmxlZCwgcmVmZXJlbmNlLCBmbG9hdGluZ10pO1xufSJdLCJuYW1lcyI6WyJSZWFjdCIsImdldENvbXB1dGVkU3R5bGUiLCJnZXRQYXJlbnROb2RlIiwiaXNFbGVtZW50IiwiaXNIVE1MRWxlbWVudCIsImlzTGFzdFRyYXZlcnNhYmxlTm9kZSIsImlzU2hhZG93Um9vdCIsImlzV2ViS2l0IiwiYWRkRXZlbnRMaXN0ZW5lciIsIm1lcmdlQ2xlYW51cHMiLCJUaW1lb3V0IiwidXNlVGltZW91dCIsInVzZVN0YWJsZUNhbGxiYWNrIiwib3duZXJEb2N1bWVudCIsImNvbnRhaW5zIiwiZ2V0VGFyZ2V0IiwiaXNFdmVudFRhcmdldFdpdGhpbiIsImlzUm9vdEVsZW1lbnQiLCJpc1JlYWN0RXZlbnQiLCJnZXROb2RlQ2hpbGRyZW4iLCJ1c2VGbG9hdGluZ1RyZWUiLCJjcmVhdGVDaGFuZ2VFdmVudERldGFpbHMiLCJSRUFTT05TIiwiY3JlYXRlQXR0cmlidXRlIiwiYnViYmxlSGFuZGxlcktleXMiLCJpbnRlbnRpb25hbCIsInNsb3BweSIsImFsd2F5c0ZhbHNlIiwibm9ybWFsaXplUHJvcCIsIm5vcm1hbGl6YWJsZSIsImVzY2FwZUtleSIsIm91dHNpZGVQcmVzcyIsInVzZURpc21pc3MiLCJjb250ZXh0IiwicHJvcHMiLCJzdG9yZSIsInJvb3RTdG9yZSIsIm9wZW4iLCJ1c2VTdGF0ZSIsImZsb2F0aW5nRWxlbWVudCIsImRhdGFSZWYiLCJlbmFibGVkIiwib3V0c2lkZVByZXNzUHJvcCIsIm91dHNpZGVQcmVzc0V2ZW50IiwicmVmZXJlbmNlUHJlc3MiLCJyZWZlcmVuY2VQcmVzc0V2ZW50IiwiYnViYmxlcyIsImV4dGVybmFsVHJlZSIsInRyZWUiLCJvdXRzaWRlUHJlc3NGbiIsIm91dHNpZGVQcmVzc0VuYWJsZWQiLCJnZXRPdXRzaWRlUHJlc3NFdmVudFByb3AiLCJwcmVzc1N0YXJ0ZWRJbnNpZGVSZWYiLCJ1c2VSZWYiLCJwcmVzc1N0YXJ0UHJldmVudGVkUmVmIiwic3VwcHJlc3NOZXh0T3V0c2lkZUNsaWNrUmVmIiwiZXNjYXBlS2V5QnViYmxlcyIsIm91dHNpZGVQcmVzc0J1YmJsZXMiLCJ0b3VjaFN0YXRlUmVmIiwiY2FuY2VsRGlzbWlzc09uRW5kVGltZW91dCIsImNsZWFySW5zaWRlUmVhY3RUcmVlVGltZW91dCIsImNsZWFySW5zaWRlUmVhY3RUcmVlIiwiY2xlYXIiLCJjdXJyZW50IiwiaW5zaWRlUmVhY3RUcmVlIiwiaXNDb21wb3NpbmdSZWYiLCJjdXJyZW50UG9pbnRlclR5cGVSZWYiLCJpc1JlZmVyZW5jZVByZXNzRW5hYmxlZCIsImNsb3NlT25Fc2NhcGVLZXlEb3duIiwiZXZlbnQiLCJrZXkiLCJub2RlSWQiLCJmbG9hdGluZ0NvbnRleHQiLCJjaGlsZHJlbiIsIm5vZGVzUmVmIiwibGVuZ3RoIiwic2hvdWxkRGlzbWlzcyIsImZvckVhY2giLCJjaGlsZCIsIl9fZXNjYXBlS2V5QnViYmxlcyIsIm5hdGl2ZSIsIm5hdGl2ZUV2ZW50IiwiZXZlbnREZXRhaWxzIiwic2V0T3BlbiIsImlzUHJvcGFnYXRpb25BbGxvd2VkIiwic3RvcFByb3BhZ2F0aW9uIiwibWFya0luc2lkZVJlYWN0VHJlZSIsInN0YXJ0IiwidXNlRWZmZWN0IiwidW5kZWZpbmVkIiwiX19vdXRzaWRlUHJlc3NCdWJibGVzIiwiY29tcG9zaXRpb25UaW1lb3V0IiwicHJldmVudGVkUHJlc3NTdXBwcmVzc2lvblRpbWVvdXQiLCJoYW5kbGVDb21wb3NpdGlvblN0YXJ0IiwiaGFuZGxlQ29tcG9zaXRpb25FbmQiLCJzdXBwcmVzc0ltbWVkaWF0ZU91dHNpZGVDbGlja0FmdGVyUHJldmVudGVkU3RhcnQiLCJyZXNldFByZXNzU3RhcnRTdGF0ZSIsImdldE91dHNpZGVQcmVzc0V2ZW50IiwidHlwZSIsImNvbXB1dGVkVHlwZSIsIm91dHNpZGVQcmVzc0V2ZW50VmFsdWUiLCJyZXNvbHZlZCIsInNob3VsZElnbm9yZUV2ZW50IiwiY29tcHV0ZWRPdXRzaWRlUHJlc3NFdmVudCIsImlzRXZlbnRXaXRoaW5GbG9hdGluZ1RyZWUiLCJ0YXJnZXRJc0luc2lkZUNoaWxkcmVuIiwic29tZSIsIm5vZGUiLCJlbGVtZW50cyIsImZsb2F0aW5nIiwic2VsZWN0IiwiY2xvc2VPblByZXNzT3V0c2lkZSIsInRhcmdldCIsImluZXJ0U2VsZWN0b3IiLCJ0YXJnZXRSb290IiwiZ2V0Um9vdE5vZGUiLCJtYXJrZXJzIiwiQXJyYXkiLCJmcm9tIiwicXVlcnlTZWxlY3RvckFsbCIsInRyaWdnZXJzIiwidHJpZ2dlckVsZW1lbnRzIiwiaGFzRWxlbWVudCIsImhhc01hdGNoaW5nRWxlbWVudCIsInRyaWdnZXIiLCJ0YXJnZXRSb290QW5jZXN0b3IiLCJuZXh0UGFyZW50IiwiZXZlcnkiLCJtYXJrZXIiLCJsYXN0VHJhdmVyc2FibGVOb2RlIiwic3R5bGUiLCJzY3JvbGxSZSIsImlzU2Nyb2xsYWJsZVgiLCJ0ZXN0Iiwib3ZlcmZsb3dYIiwiaXNTY3JvbGxhYmxlWSIsIm92ZXJmbG93WSIsImNhblNjcm9sbFgiLCJjbGllbnRXaWR0aCIsInNjcm9sbFdpZHRoIiwiY2FuU2Nyb2xsWSIsImNsaWVudEhlaWdodCIsInNjcm9sbEhlaWdodCIsImlzUlRMIiwiZGlyZWN0aW9uIiwicHJlc3NlZFZlcnRpY2FsU2Nyb2xsYmFyIiwib2Zmc2V0WCIsIm9mZnNldFdpZHRoIiwicHJlc3NlZEhvcml6b250YWxTY3JvbGxiYXIiLCJvZmZzZXRZIiwiaGFuZGxlUG9pbnRlckRvd24iLCJwb2ludGVyVHlwZSIsImhhbmRsZVRvdWNoU3RhcnQiLCJ0b3VjaCIsInRvdWNoZXMiLCJzdGFydFRpbWUiLCJEYXRlIiwibm93Iiwic3RhcnRYIiwiY2xpZW50WCIsInN0YXJ0WSIsImNsaWVudFkiLCJkaXNtaXNzT25Ub3VjaEVuZCIsImRpc21pc3NPbk1vdXNlRG93biIsImFkZFRhcmdldEV2ZW50TGlzdGVuZXJPbmNlIiwibGlzdGVuZXIiLCJ1bnN1YnNjcmliZSIsImhhbmRsZVRvdWNoU3RhcnRDYXB0dXJlIiwiY2xvc2VPblByZXNzT3V0c2lkZUNhcHR1cmUiLCJ0YXJnZXRFdmVudCIsImhhbmRsZVByZXNzRW5kQ2FwdHVyZSIsInByZXNzU3RhcnRlZEluc2lkZURlZmF1bHRQcmV2ZW50ZWQiLCJoYW5kbGVUb3VjaE1vdmUiLCJkZWx0YVgiLCJNYXRoIiwiYWJzIiwiZGVsdGFZIiwiZGlzdGFuY2UiLCJzcXJ0IiwiaGFuZGxlVG91Y2hNb3ZlQ2FwdHVyZSIsImhhbmRsZVRvdWNoRW5kIiwiaGFuZGxlVG91Y2hFbmRDYXB0dXJlIiwiZG9jIiwicmVmZXJlbmNlIiwidXNlTWVtbyIsIm9uS2V5RG93biIsInRyaWdnZXJQcmVzcyIsIm9uQ2xpY2siLCJtYXJrUHJlc3NTdGFydGVkSW5zaWRlUmVhY3RUcmVlIiwiYnV0dG9uIiwibWFya0luc2lkZVByZXNzU3RhcnRQcmV2ZW50ZWQiLCJkZWZhdWx0UHJldmVudGVkIiwib25Qb2ludGVyRG93biIsIm9uTW91c2VEb3duIiwib25DbGlja0NhcHR1cmUiLCJvbk1vdXNlRG93bkNhcHR1cmUiLCJvblBvaW50ZXJEb3duQ2FwdHVyZSIsIm9uTW91c2VVcENhcHR1cmUiLCJvblRvdWNoRW5kQ2FwdHVyZSIsIm9uVG91Y2hNb3ZlQ2FwdHVyZSJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useDismiss.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useInteractions.js":
|
||
/*!************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useInteractions.js ***!
|
||
\************************************************************************************/
|
||
/***/ ((__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 */ useInteractions: () => (/* binding */ useInteractions)\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 _utils_constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils/constants.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/constants.js\");\n\n\n/**\n * Merges an array of interaction hooks' props into prop getters, allowing\n * event handler functions to be composed together without overwriting one\n * another.\n * @see https://floating-ui.com/docs/useInteractions\n */\nfunction useInteractions(propsList = []) {\n const referenceDeps = propsList.map(key => key?.reference);\n const floatingDeps = propsList.map(key => key?.floating);\n const itemDeps = propsList.map(key => key?.item);\n const triggerDeps = propsList.map(key => key?.trigger);\n const getReferenceProps = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(userProps => mergeProps(userProps, propsList, 'reference'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n referenceDeps);\n const getFloatingProps = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(userProps => mergeProps(userProps, propsList, 'floating'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n floatingDeps);\n const getItemProps = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(userProps => mergeProps(userProps, propsList, 'item'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n itemDeps);\n const getTriggerProps = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(userProps => mergeProps(userProps, propsList, 'trigger'),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n triggerDeps);\n return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({\n getReferenceProps,\n getFloatingProps,\n getItemProps,\n getTriggerProps\n }), [getReferenceProps, getFloatingProps, getItemProps, getTriggerProps]);\n}\n\n/* eslint-disable guard-for-in */\n\nfunction mergeProps(userProps, propsList, elementKey) {\n const eventHandlers = new Map();\n const isItem = elementKey === 'item';\n const outputProps = {};\n if (elementKey === 'floating') {\n outputProps.tabIndex = -1;\n outputProps[_utils_constants_js__WEBPACK_IMPORTED_MODULE_1__.FOCUSABLE_ATTRIBUTE] = '';\n }\n for (const key in userProps) {\n if (isItem && userProps) {\n if (key === _utils_constants_js__WEBPACK_IMPORTED_MODULE_1__.ACTIVE_KEY || key === _utils_constants_js__WEBPACK_IMPORTED_MODULE_1__.SELECTED_KEY) {\n continue;\n }\n }\n outputProps[key] = userProps[key];\n }\n for (let i = 0; i < propsList.length; i += 1) {\n let props;\n const propsOrGetProps = propsList[i]?.[elementKey];\n if (typeof propsOrGetProps === 'function') {\n props = userProps ? propsOrGetProps(userProps) : null;\n } else {\n props = propsOrGetProps;\n }\n if (!props) {\n continue;\n }\n mutablyMergeProps(outputProps, props, isItem, eventHandlers);\n }\n mutablyMergeProps(outputProps, userProps, isItem, eventHandlers);\n return outputProps;\n}\nfunction mutablyMergeProps(outputProps, props, isItem, eventHandlers) {\n for (const key in props) {\n const value = props[key];\n if (isItem && (key === _utils_constants_js__WEBPACK_IMPORTED_MODULE_1__.ACTIVE_KEY || key === _utils_constants_js__WEBPACK_IMPORTED_MODULE_1__.SELECTED_KEY)) {\n continue;\n }\n if (!key.startsWith('on')) {\n outputProps[key] = value;\n } else {\n if (!eventHandlers.has(key)) {\n eventHandlers.set(key, []);\n }\n if (typeof value === 'function') {\n eventHandlers.get(key)?.push(value);\n outputProps[key] = (...args) => {\n return eventHandlers.get(key)?.map(fn => fn(...args)).find(val => val !== undefined);\n };\n }\n }\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvaG9va3MvdXNlSW50ZXJhY3Rpb25zLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUErQjtBQUN1RDtBQUN0RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLDhDQUFpQjtBQUM3QztBQUNBO0FBQ0EsMkJBQTJCLDhDQUFpQjtBQUM1QztBQUNBO0FBQ0EsdUJBQXVCLDhDQUFpQjtBQUN4QztBQUNBO0FBQ0EsMEJBQTBCLDhDQUFpQjtBQUMzQztBQUNBO0FBQ0EsU0FBUywwQ0FBYTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isb0VBQW1CO0FBQ25DO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiwyREFBVSxZQUFZLDZEQUFZO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0Isc0JBQXNCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCLDJEQUFVLFlBQVksNkRBQVk7QUFDN0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9mbG9hdGluZy11aS1yZWFjdC9ob29rcy91c2VJbnRlcmFjdGlvbnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgQUNUSVZFX0tFWSwgRk9DVVNBQkxFX0FUVFJJQlVURSwgU0VMRUNURURfS0VZIH0gZnJvbSBcIi4uL3V0aWxzL2NvbnN0YW50cy5qc1wiO1xuLyoqXG4gKiBNZXJnZXMgYW4gYXJyYXkgb2YgaW50ZXJhY3Rpb24gaG9va3MnIHByb3BzIGludG8gcHJvcCBnZXR0ZXJzLCBhbGxvd2luZ1xuICogZXZlbnQgaGFuZGxlciBmdW5jdGlvbnMgdG8gYmUgY29tcG9zZWQgdG9nZXRoZXIgd2l0aG91dCBvdmVyd3JpdGluZyBvbmVcbiAqIGFub3RoZXIuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvdXNlSW50ZXJhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VJbnRlcmFjdGlvbnMocHJvcHNMaXN0ID0gW10pIHtcbiAgY29uc3QgcmVmZXJlbmNlRGVwcyA9IHByb3BzTGlzdC5tYXAoa2V5ID0+IGtleT8ucmVmZXJlbmNlKTtcbiAgY29uc3QgZmxvYXRpbmdEZXBzID0gcHJvcHNMaXN0Lm1hcChrZXkgPT4ga2V5Py5mbG9hdGluZyk7XG4gIGNvbnN0IGl0ZW1EZXBzID0gcHJvcHNMaXN0Lm1hcChrZXkgPT4ga2V5Py5pdGVtKTtcbiAgY29uc3QgdHJpZ2dlckRlcHMgPSBwcm9wc0xpc3QubWFwKGtleSA9PiBrZXk/LnRyaWdnZXIpO1xuICBjb25zdCBnZXRSZWZlcmVuY2VQcm9wcyA9IFJlYWN0LnVzZUNhbGxiYWNrKHVzZXJQcm9wcyA9PiBtZXJnZVByb3BzKHVzZXJQcm9wcywgcHJvcHNMaXN0LCAncmVmZXJlbmNlJyksXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgcmVmZXJlbmNlRGVwcyk7XG4gIGNvbnN0IGdldEZsb2F0aW5nUHJvcHMgPSBSZWFjdC51c2VDYWxsYmFjayh1c2VyUHJvcHMgPT4gbWVyZ2VQcm9wcyh1c2VyUHJvcHMsIHByb3BzTGlzdCwgJ2Zsb2F0aW5nJyksXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgZmxvYXRpbmdEZXBzKTtcbiAgY29uc3QgZ2V0SXRlbVByb3BzID0gUmVhY3QudXNlQ2FsbGJhY2sodXNlclByb3BzID0+IG1lcmdlUHJvcHModXNlclByb3BzLCBwcm9wc0xpc3QsICdpdGVtJyksXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgaXRlbURlcHMpO1xuICBjb25zdCBnZXRUcmlnZ2VyUHJvcHMgPSBSZWFjdC51c2VDYWxsYmFjayh1c2VyUHJvcHMgPT4gbWVyZ2VQcm9wcyh1c2VyUHJvcHMsIHByb3BzTGlzdCwgJ3RyaWdnZXInKSxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB0cmlnZ2VyRGVwcyk7XG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZ2V0UmVmZXJlbmNlUHJvcHMsXG4gICAgZ2V0RmxvYXRpbmdQcm9wcyxcbiAgICBnZXRJdGVtUHJvcHMsXG4gICAgZ2V0VHJpZ2dlclByb3BzXG4gIH0pLCBbZ2V0UmVmZXJlbmNlUHJvcHMsIGdldEZsb2F0aW5nUHJvcHMsIGdldEl0ZW1Qcm9wcywgZ2V0VHJpZ2dlclByb3BzXSk7XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIGd1YXJkLWZvci1pbiAqL1xuXG5mdW5jdGlvbiBtZXJnZVByb3BzKHVzZXJQcm9wcywgcHJvcHNMaXN0LCBlbGVtZW50S2V5KSB7XG4gIGNvbnN0IGV2ZW50SGFuZGxlcnMgPSBuZXcgTWFwKCk7XG4gIGNvbnN0IGlzSXRlbSA9IGVsZW1lbnRLZXkgPT09ICdpdGVtJztcbiAgY29uc3Qgb3V0cHV0UHJvcHMgPSB7fTtcbiAgaWYgKGVsZW1lbnRLZXkgPT09ICdmbG9hdGluZycpIHtcbiAgICBvdXRwdXRQcm9wcy50YWJJbmRleCA9IC0xO1xuICAgIG91dHB1dFByb3BzW0ZPQ1VTQUJMRV9BVFRSSUJVVEVdID0gJyc7XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgaW4gdXNlclByb3BzKSB7XG4gICAgaWYgKGlzSXRlbSAmJiB1c2VyUHJvcHMpIHtcbiAgICAgIGlmIChrZXkgPT09IEFDVElWRV9LRVkgfHwga2V5ID09PSBTRUxFQ1RFRF9LRVkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICAgIG91dHB1dFByb3BzW2tleV0gPSB1c2VyUHJvcHNba2V5XTtcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BzTGlzdC5sZW5ndGg7IGkgKz0gMSkge1xuICAgIGxldCBwcm9wcztcbiAgICBjb25zdCBwcm9wc09yR2V0UHJvcHMgPSBwcm9wc0xpc3RbaV0/LltlbGVtZW50S2V5XTtcbiAgICBpZiAodHlwZW9mIHByb3BzT3JHZXRQcm9wcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcHJvcHMgPSB1c2VyUHJvcHMgPyBwcm9wc09yR2V0UHJvcHModXNlclByb3BzKSA6IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb3BzID0gcHJvcHNPckdldFByb3BzO1xuICAgIH1cbiAgICBpZiAoIXByb3BzKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgbXV0YWJseU1lcmdlUHJvcHMob3V0cHV0UHJvcHMsIHByb3BzLCBpc0l0ZW0sIGV2ZW50SGFuZGxlcnMpO1xuICB9XG4gIG11dGFibHlNZXJnZVByb3BzKG91dHB1dFByb3BzLCB1c2VyUHJvcHMsIGlzSXRlbSwgZXZlbnRIYW5kbGVycyk7XG4gIHJldHVybiBvdXRwdXRQcm9wcztcbn1cbmZ1bmN0aW9uIG11dGFibHlNZXJnZVByb3BzKG91dHB1dFByb3BzLCBwcm9wcywgaXNJdGVtLCBldmVudEhhbmRsZXJzKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIHByb3BzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBwcm9wc1trZXldO1xuICAgIGlmIChpc0l0ZW0gJiYgKGtleSA9PT0gQUNUSVZFX0tFWSB8fCBrZXkgPT09IFNFTEVDVEVEX0tFWSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoIWtleS5zdGFydHNXaXRoKCdvbicpKSB7XG4gICAgICBvdXRwdXRQcm9wc1trZXldID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghZXZlbnRIYW5kbGVycy5oYXMoa2V5KSkge1xuICAgICAgICBldmVudEhhbmRsZXJzLnNldChrZXksIFtdKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZXZlbnRIYW5kbGVycy5nZXQoa2V5KT8ucHVzaCh2YWx1ZSk7XG4gICAgICAgIG91dHB1dFByb3BzW2tleV0gPSAoLi4uYXJncykgPT4ge1xuICAgICAgICAgIHJldHVybiBldmVudEhhbmRsZXJzLmdldChrZXkpPy5tYXAoZm4gPT4gZm4oLi4uYXJncykpLmZpbmQodmFsID0+IHZhbCAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useInteractions.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useRole.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useRole.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((__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 */ useRole: () => (/* binding */ useRole)\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 _base_ui_utils_useId__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @base-ui/utils/useId */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useId.js\");\n/* harmony import */ var _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @base-ui/utils/empty */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js\");\n/* harmony import */ var _utils_element_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/element.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/element.js\");\n/* harmony import */ var _components_FloatingTree_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/FloatingTree.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTree.js\");\n\n\n\n\n\nconst componentRoleToAriaRoleMap = new Map([['select', 'listbox'], ['combobox', 'listbox'], ['label', false]]);\n\n/**\n * Adds base screen reader props to the reference and floating elements for a\n * given floating element `role`.\n * @see https://floating-ui.com/docs/useRole\n */\nfunction useRole(context, props = {}) {\n const store = 'rootStore' in context ? context.rootStore : context;\n const open = store.useState('open');\n const defaultFloatingId = store.useState('floatingId');\n const domReference = store.useState('domReferenceElement');\n const floatingElement = store.useState('floatingElement');\n const {\n role = 'dialog'\n } = props;\n const defaultReferenceId = (0,_base_ui_utils_useId__WEBPACK_IMPORTED_MODULE_1__.useId)();\n const referenceId = domReference?.id || defaultReferenceId;\n const floatingId = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => (0,_utils_element_js__WEBPACK_IMPORTED_MODULE_2__.getFloatingFocusElement)(floatingElement)?.id || defaultFloatingId, [floatingElement, defaultFloatingId]);\n const ariaRole = componentRoleToAriaRoleMap.get(role) ?? role;\n const parentId = (0,_components_FloatingTree_js__WEBPACK_IMPORTED_MODULE_3__.useFloatingParentNodeId)();\n const isNested = parentId != null;\n const trigger = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => {\n if (ariaRole === 'tooltip' || role === 'label') {\n return _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_4__.EMPTY_OBJECT;\n }\n return {\n 'aria-haspopup': ariaRole === 'alertdialog' ? 'dialog' : ariaRole,\n 'aria-expanded': 'false',\n ...(ariaRole === 'listbox' && {\n role: 'combobox'\n }),\n ...(ariaRole === 'menu' && isNested && {\n role: 'menuitem'\n }),\n ...(role === 'select' && {\n 'aria-autocomplete': 'none'\n }),\n ...(role === 'combobox' && {\n 'aria-autocomplete': 'list'\n })\n };\n }, [ariaRole, isNested, role]);\n const reference = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => {\n if (ariaRole === 'tooltip' || role === 'label') {\n return {\n [`aria-${role === 'label' ? 'labelledby' : 'describedby'}`]: open ? floatingId : undefined\n };\n }\n const triggerProps = trigger;\n return {\n ...triggerProps,\n 'aria-expanded': open ? 'true' : 'false',\n 'aria-controls': open ? floatingId : undefined,\n ...(ariaRole === 'menu' && {\n id: referenceId\n })\n };\n }, [ariaRole, floatingId, open, referenceId, role, trigger]);\n const floating = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => {\n const floatingProps = {\n id: floatingId,\n ...(ariaRole && {\n role: ariaRole\n })\n };\n if (ariaRole === 'tooltip' || role === 'label') {\n return floatingProps;\n }\n return {\n ...floatingProps,\n ...(ariaRole === 'menu' && {\n 'aria-labelledby': referenceId\n })\n };\n }, [ariaRole, floatingId, referenceId, role]);\n const item = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(({\n active,\n selected\n }) => {\n const commonProps = {\n role: 'option',\n ...(active && {\n id: `${floatingId}-fui-option`\n })\n };\n\n // For `menu`, we are unable to tell if the item is a `menuitemradio`\n // or `menuitemcheckbox`. For backwards-compatibility reasons, also\n // avoid defaulting to `menuitem` as it may overwrite custom role props.\n switch (role) {\n case 'select':\n case 'combobox':\n return {\n ...commonProps,\n 'aria-selected': selected\n };\n default:\n }\n return {};\n }, [floatingId, role]);\n return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({\n reference,\n floating,\n item,\n trigger\n }), [reference, floating, trigger, item]);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvaG9va3MvdXNlUm9sZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBK0I7QUFDYztBQUNPO0FBQ1U7QUFDVTtBQUN4RTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sb0NBQW9DO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLDZCQUE2QiwyREFBSztBQUNsQztBQUNBLHFCQUFxQiwwQ0FBYSxPQUFPLDBFQUF1QjtBQUNoRTtBQUNBLG1CQUFtQixvRkFBdUI7QUFDMUM7QUFDQSxrQkFBa0IsMENBQWE7QUFDL0I7QUFDQSxhQUFhLDhEQUFZO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSCxvQkFBb0IsMENBQWE7QUFDakM7QUFDQTtBQUNBLGlCQUFpQixnREFBZ0Q7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNILG1CQUFtQiwwQ0FBYTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0EsR0FBRztBQUNILGVBQWUsOENBQWlCO0FBQ2hDO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCLE9BQU87QUFDUDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSCxTQUFTLDBDQUFhO0FBQ3RCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9mbG9hdGluZy11aS1yZWFjdC9ob29rcy91c2VSb2xlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUlkIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlSWQnO1xuaW1wb3J0IHsgRU1QVFlfT0JKRUNUIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvZW1wdHknO1xuaW1wb3J0IHsgZ2V0RmxvYXRpbmdGb2N1c0VsZW1lbnQgfSBmcm9tIFwiLi4vdXRpbHMvZWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgdXNlRmxvYXRpbmdQYXJlbnROb2RlSWQgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9GbG9hdGluZ1RyZWUuanNcIjtcbmNvbnN0IGNvbXBvbmVudFJvbGVUb0FyaWFSb2xlTWFwID0gbmV3IE1hcChbWydzZWxlY3QnLCAnbGlzdGJveCddLCBbJ2NvbWJvYm94JywgJ2xpc3Rib3gnXSwgWydsYWJlbCcsIGZhbHNlXV0pO1xuXG4vKipcbiAqIEFkZHMgYmFzZSBzY3JlZW4gcmVhZGVyIHByb3BzIHRvIHRoZSByZWZlcmVuY2UgYW5kIGZsb2F0aW5nIGVsZW1lbnRzIGZvciBhXG4gKiBnaXZlbiBmbG9hdGluZyBlbGVtZW50IGByb2xlYC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy91c2VSb2xlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VSb2xlKGNvbnRleHQsIHByb3BzID0ge30pIHtcbiAgY29uc3Qgc3RvcmUgPSAncm9vdFN0b3JlJyBpbiBjb250ZXh0ID8gY29udGV4dC5yb290U3RvcmUgOiBjb250ZXh0O1xuICBjb25zdCBvcGVuID0gc3RvcmUudXNlU3RhdGUoJ29wZW4nKTtcbiAgY29uc3QgZGVmYXVsdEZsb2F0aW5nSWQgPSBzdG9yZS51c2VTdGF0ZSgnZmxvYXRpbmdJZCcpO1xuICBjb25zdCBkb21SZWZlcmVuY2UgPSBzdG9yZS51c2VTdGF0ZSgnZG9tUmVmZXJlbmNlRWxlbWVudCcpO1xuICBjb25zdCBmbG9hdGluZ0VsZW1lbnQgPSBzdG9yZS51c2VTdGF0ZSgnZmxvYXRpbmdFbGVtZW50Jyk7XG4gIGNvbnN0IHtcbiAgICByb2xlID0gJ2RpYWxvZydcbiAgfSA9IHByb3BzO1xuICBjb25zdCBkZWZhdWx0UmVmZXJlbmNlSWQgPSB1c2VJZCgpO1xuICBjb25zdCByZWZlcmVuY2VJZCA9IGRvbVJlZmVyZW5jZT8uaWQgfHwgZGVmYXVsdFJlZmVyZW5jZUlkO1xuICBjb25zdCBmbG9hdGluZ0lkID0gUmVhY3QudXNlTWVtbygoKSA9PiBnZXRGbG9hdGluZ0ZvY3VzRWxlbWVudChmbG9hdGluZ0VsZW1lbnQpPy5pZCB8fCBkZWZhdWx0RmxvYXRpbmdJZCwgW2Zsb2F0aW5nRWxlbWVudCwgZGVmYXVsdEZsb2F0aW5nSWRdKTtcbiAgY29uc3QgYXJpYVJvbGUgPSBjb21wb25lbnRSb2xlVG9BcmlhUm9sZU1hcC5nZXQocm9sZSkgPz8gcm9sZTtcbiAgY29uc3QgcGFyZW50SWQgPSB1c2VGbG9hdGluZ1BhcmVudE5vZGVJZCgpO1xuICBjb25zdCBpc05lc3RlZCA9IHBhcmVudElkICE9IG51bGw7XG4gIGNvbnN0IHRyaWdnZXIgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoYXJpYVJvbGUgPT09ICd0b29sdGlwJyB8fCByb2xlID09PSAnbGFiZWwnKSB7XG4gICAgICByZXR1cm4gRU1QVFlfT0JKRUNUO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgJ2FyaWEtaGFzcG9wdXAnOiBhcmlhUm9sZSA9PT0gJ2FsZXJ0ZGlhbG9nJyA/ICdkaWFsb2cnIDogYXJpYVJvbGUsXG4gICAgICAnYXJpYS1leHBhbmRlZCc6ICdmYWxzZScsXG4gICAgICAuLi4oYXJpYVJvbGUgPT09ICdsaXN0Ym94JyAmJiB7XG4gICAgICAgIHJvbGU6ICdjb21ib2JveCdcbiAgICAgIH0pLFxuICAgICAgLi4uKGFyaWFSb2xlID09PSAnbWVudScgJiYgaXNOZXN0ZWQgJiYge1xuICAgICAgICByb2xlOiAnbWVudWl0ZW0nXG4gICAgICB9KSxcbiAgICAgIC4uLihyb2xlID09PSAnc2VsZWN0JyAmJiB7XG4gICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdub25lJ1xuICAgICAgfSksXG4gICAgICAuLi4ocm9sZSA9PT0gJ2NvbWJvYm94JyAmJiB7XG4gICAgICAgICdhcmlhLWF1dG9jb21wbGV0ZSc6ICdsaXN0J1xuICAgICAgfSlcbiAgICB9O1xuICB9LCBbYXJpYVJvbGUsIGlzTmVzdGVkLCByb2xlXSk7XG4gIGNvbnN0IHJlZmVyZW5jZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGlmIChhcmlhUm9sZSA9PT0gJ3Rvb2x0aXAnIHx8IHJvbGUgPT09ICdsYWJlbCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtgYXJpYS0ke3JvbGUgPT09ICdsYWJlbCcgPyAnbGFiZWxsZWRieScgOiAnZGVzY3JpYmVkYnknfWBdOiBvcGVuID8gZmxvYXRpbmdJZCA6IHVuZGVmaW5lZFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgdHJpZ2dlclByb3BzID0gdHJpZ2dlcjtcbiAgICByZXR1cm4ge1xuICAgICAgLi4udHJpZ2dlclByb3BzLFxuICAgICAgJ2FyaWEtZXhwYW5kZWQnOiBvcGVuID8gJ3RydWUnIDogJ2ZhbHNlJyxcbiAgICAgICdhcmlhLWNvbnRyb2xzJzogb3BlbiA/IGZsb2F0aW5nSWQgOiB1bmRlZmluZWQsXG4gICAgICAuLi4oYXJpYVJvbGUgPT09ICdtZW51JyAmJiB7XG4gICAgICAgIGlkOiByZWZlcmVuY2VJZFxuICAgICAgfSlcbiAgICB9O1xuICB9LCBbYXJpYVJvbGUsIGZsb2F0aW5nSWQsIG9wZW4sIHJlZmVyZW5jZUlkLCByb2xlLCB0cmlnZ2VyXSk7XG4gIGNvbnN0IGZsb2F0aW5nID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgZmxvYXRpbmdQcm9wcyA9IHtcbiAgICAgIGlkOiBmbG9hdGluZ0lkLFxuICAgICAgLi4uKGFyaWFSb2xlICYmIHtcbiAgICAgICAgcm9sZTogYXJpYVJvbGVcbiAgICAgIH0pXG4gICAgfTtcbiAgICBpZiAoYXJpYVJvbGUgPT09ICd0b29sdGlwJyB8fCByb2xlID09PSAnbGFiZWwnKSB7XG4gICAgICByZXR1cm4gZmxvYXRpbmdQcm9wcztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmZsb2F0aW5nUHJvcHMsXG4gICAgICAuLi4oYXJpYVJvbGUgPT09ICdtZW51JyAmJiB7XG4gICAgICAgICdhcmlhLWxhYmVsbGVkYnknOiByZWZlcmVuY2VJZFxuICAgICAgfSlcbiAgICB9O1xuICB9LCBbYXJpYVJvbGUsIGZsb2F0aW5nSWQsIHJlZmVyZW5jZUlkLCByb2xlXSk7XG4gIGNvbnN0IGl0ZW0gPSBSZWFjdC51c2VDYWxsYmFjaygoe1xuICAgIGFjdGl2ZSxcbiAgICBzZWxlY3RlZFxuICB9KSA9PiB7XG4gICAgY29uc3QgY29tbW9uUHJvcHMgPSB7XG4gICAgICByb2xlOiAnb3B0aW9uJyxcbiAgICAgIC4uLihhY3RpdmUgJiYge1xuICAgICAgICBpZDogYCR7ZmxvYXRpbmdJZH0tZnVpLW9wdGlvbmBcbiAgICAgIH0pXG4gICAgfTtcblxuICAgIC8vIEZvciBgbWVudWAsIHdlIGFyZSB1bmFibGUgdG8gdGVsbCBpZiB0aGUgaXRlbSBpcyBhIGBtZW51aXRlbXJhZGlvYFxuICAgIC8vIG9yIGBtZW51aXRlbWNoZWNrYm94YC4gRm9yIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5IHJlYXNvbnMsIGFsc29cbiAgICAvLyBhdm9pZCBkZWZhdWx0aW5nIHRvIGBtZW51aXRlbWAgYXMgaXQgbWF5IG92ZXJ3cml0ZSBjdXN0b20gcm9sZSBwcm9wcy5cbiAgICBzd2l0Y2ggKHJvbGUpIHtcbiAgICAgIGNhc2UgJ3NlbGVjdCc6XG4gICAgICBjYXNlICdjb21ib2JveCc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29tbW9uUHJvcHMsXG4gICAgICAgICAgJ2FyaWEtc2VsZWN0ZWQnOiBzZWxlY3RlZFxuICAgICAgICB9O1xuICAgICAgZGVmYXVsdDpcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuICB9LCBbZmxvYXRpbmdJZCwgcm9sZV0pO1xuICByZXR1cm4gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIHJlZmVyZW5jZSxcbiAgICBmbG9hdGluZyxcbiAgICBpdGVtLFxuICAgIHRyaWdnZXJcbiAgfSksIFtyZWZlcmVuY2UsIGZsb2F0aW5nLCB0cmlnZ2VyLCBpdGVtXSk7XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useRole.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js":
|
||
/*!*************************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js ***!
|
||
\*************************************************************************************************/
|
||
/***/ ((__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 */ useSyncedFloatingRootContext: () => (/* binding */ useSyncedFloatingRootContext)\n/* harmony export */ });\n/* harmony import */ var _base_ui_utils_useId__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @base-ui/utils/useId */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useId.js\");\n/* harmony import */ var _base_ui_utils_useRefWithInit__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/utils/useRefWithInit */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useRefWithInit.js\");\n/* harmony import */ var _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @base-ui/utils/useIsoLayoutEffect */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @floating-ui/utils/dom */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\");\n/* harmony import */ var _components_FloatingTree_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/FloatingTree.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingTree.js\");\n/* harmony import */ var _components_FloatingRootStore_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../components/FloatingRootStore.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingRootStore.js\");\n/* __next_internal_client_entry_do_not_use__ useSyncedFloatingRootContext auto */ var _s = $RefreshSig$();\n\n\n\n\n\n\n/**\n * Initializes a FloatingRootStore that is kept in sync with the provided PopupStore.\n * The new instance is created only once and updated on every render.\n */ function useSyncedFloatingRootContext(options) {\n _s();\n const { popupStore, treatPopupAsFloatingElement = false, onOpenChange } = options;\n const floatingId = (0,_base_ui_utils_useId__WEBPACK_IMPORTED_MODULE_0__.useId)();\n const nested = (0,_components_FloatingTree_js__WEBPACK_IMPORTED_MODULE_1__.useFloatingParentNodeId)() != null;\n const open = popupStore.useState('open');\n const referenceElement = popupStore.useState('activeTriggerElement');\n const floatingElement = popupStore.useState(treatPopupAsFloatingElement ? 'popupElement' : 'positionerElement');\n const triggerElements = popupStore.context.triggerElements;\n const store = (0,_base_ui_utils_useRefWithInit__WEBPACK_IMPORTED_MODULE_2__.useRefWithInit)({\n \"useSyncedFloatingRootContext.useRefWithInit\": ()=>new _components_FloatingRootStore_js__WEBPACK_IMPORTED_MODULE_3__.FloatingRootStore({\n open,\n transitionStatus: undefined,\n referenceElement,\n floatingElement,\n triggerElements,\n onOpenChange,\n floatingId,\n syncOnly: true,\n nested\n })\n }[\"useSyncedFloatingRootContext.useRefWithInit\"]).current;\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_4__.useIsoLayoutEffect)({\n \"useSyncedFloatingRootContext.useIsoLayoutEffect\": ()=>{\n const valuesToSync = {\n open,\n floatingId,\n referenceElement,\n floatingElement\n };\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_5__.isElement)(referenceElement)) {\n valuesToSync.domReferenceElement = referenceElement;\n }\n if (store.state.positionReference === store.state.referenceElement) {\n valuesToSync.positionReference = referenceElement;\n }\n store.update(valuesToSync);\n }\n }[\"useSyncedFloatingRootContext.useIsoLayoutEffect\"], [\n open,\n floatingId,\n referenceElement,\n floatingElement,\n store\n ]);\n // TODO: When `setOpen` is a part of the PopupStore API, we don't need to sync it.\n store.context.onOpenChange = onOpenChange;\n store.context.nested = nested;\n return store;\n}\n_s(useSyncedFloatingRootContext, \"YqjCLGZf654bXv6rRPGmYq61Pi4=\", false, function() {\n return [\n _base_ui_utils_useId__WEBPACK_IMPORTED_MODULE_0__.useId,\n _components_FloatingTree_js__WEBPACK_IMPORTED_MODULE_1__.useFloatingParentNodeId,\n _base_ui_utils_useRefWithInit__WEBPACK_IMPORTED_MODULE_2__.useRefWithInit,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_4__.useIsoLayoutEffect\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvaG9va3MvdXNlU3luY2VkRmxvYXRpbmdSb290Q29udGV4dC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUU2QztBQUNrQjtBQUNRO0FBQ3BCO0FBQ3FCO0FBQ0Q7QUFDdkU7OztDQUdDLEdBQ00sU0FBU00sNkJBQTZCQyxPQUFPOztJQUNsRCxNQUFNLEVBQ0pDLFVBQVUsRUFDVkMsOEJBQThCLEtBQUssRUFDbkNDLFlBQVksRUFDYixHQUFHSDtJQUNKLE1BQU1JLGFBQWFYLDJEQUFLQTtJQUN4QixNQUFNWSxTQUFTUixvRkFBdUJBLE1BQU07SUFDNUMsTUFBTVMsT0FBT0wsV0FBV00sUUFBUSxDQUFDO0lBQ2pDLE1BQU1DLG1CQUFtQlAsV0FBV00sUUFBUSxDQUFDO0lBQzdDLE1BQU1FLGtCQUFrQlIsV0FBV00sUUFBUSxDQUFDTCw4QkFBOEIsaUJBQWlCO0lBQzNGLE1BQU1RLGtCQUFrQlQsV0FBV1UsT0FBTyxDQUFDRCxlQUFlO0lBQzFELE1BQU1FLFFBQVFsQiw2RUFBY0E7dURBQUMsSUFBTSxJQUFJSSwrRUFBaUJBLENBQUM7Z0JBQ3ZEUTtnQkFDQU8sa0JBQWtCQztnQkFDbEJOO2dCQUNBQztnQkFDQUM7Z0JBQ0FQO2dCQUNBQztnQkFDQVcsVUFBVTtnQkFDVlY7WUFDRjtzREFBSVcsT0FBTztJQUNYckIscUZBQWtCQTsyREFBQztZQUNqQixNQUFNc0IsZUFBZTtnQkFDbkJYO2dCQUNBRjtnQkFDQUk7Z0JBQ0FDO1lBQ0Y7WUFDQSxJQUFJYixpRUFBU0EsQ0FBQ1ksbUJBQW1CO2dCQUMvQlMsYUFBYUMsbUJBQW1CLEdBQUdWO1lBQ3JDO1lBQ0EsSUFBSUksTUFBTU8sS0FBSyxDQUFDQyxpQkFBaUIsS0FBS1IsTUFBTU8sS0FBSyxDQUFDWCxnQkFBZ0IsRUFBRTtnQkFDbEVTLGFBQWFHLGlCQUFpQixHQUFHWjtZQUNuQztZQUNBSSxNQUFNUyxNQUFNLENBQUNKO1FBQ2Y7MERBQUc7UUFBQ1g7UUFBTUY7UUFBWUk7UUFBa0JDO1FBQWlCRztLQUFNO0lBRS9ELGtGQUFrRjtJQUNsRkEsTUFBTUQsT0FBTyxDQUFDUixZQUFZLEdBQUdBO0lBQzdCUyxNQUFNRCxPQUFPLENBQUNOLE1BQU0sR0FBR0E7SUFDdkIsT0FBT087QUFDVDtHQTNDZ0JiOztRQU1LTix1REFBS0E7UUFDVEksZ0ZBQXVCQTtRQUt4QkgseUVBQWNBO1FBVzVCQyxpRkFBa0JBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9mbG9hdGluZy11aS1yZWFjdC9ob29rcy91c2VTeW5jZWRGbG9hdGluZ1Jvb3RDb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgdXNlSWQgfSBmcm9tICdAYmFzZS11aS91dGlscy91c2VJZCc7XG5pbXBvcnQgeyB1c2VSZWZXaXRoSW5pdCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZVJlZldpdGhJbml0JztcbmltcG9ydCB7IHVzZUlzb0xheW91dEVmZmVjdCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZUlzb0xheW91dEVmZmVjdCc7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcbmltcG9ydCB7IHVzZUZsb2F0aW5nUGFyZW50Tm9kZUlkIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvRmxvYXRpbmdUcmVlLmpzXCI7XG5pbXBvcnQgeyBGbG9hdGluZ1Jvb3RTdG9yZSB9IGZyb20gXCIuLi9jb21wb25lbnRzL0Zsb2F0aW5nUm9vdFN0b3JlLmpzXCI7XG4vKipcbiAqIEluaXRpYWxpemVzIGEgRmxvYXRpbmdSb290U3RvcmUgdGhhdCBpcyBrZXB0IGluIHN5bmMgd2l0aCB0aGUgcHJvdmlkZWQgUG9wdXBTdG9yZS5cbiAqIFRoZSBuZXcgaW5zdGFuY2UgaXMgY3JlYXRlZCBvbmx5IG9uY2UgYW5kIHVwZGF0ZWQgb24gZXZlcnkgcmVuZGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3luY2VkRmxvYXRpbmdSb290Q29udGV4dChvcHRpb25zKSB7XG4gIGNvbnN0IHtcbiAgICBwb3B1cFN0b3JlLFxuICAgIHRyZWF0UG9wdXBBc0Zsb2F0aW5nRWxlbWVudCA9IGZhbHNlLFxuICAgIG9uT3BlbkNoYW5nZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgZmxvYXRpbmdJZCA9IHVzZUlkKCk7XG4gIGNvbnN0IG5lc3RlZCA9IHVzZUZsb2F0aW5nUGFyZW50Tm9kZUlkKCkgIT0gbnVsbDtcbiAgY29uc3Qgb3BlbiA9IHBvcHVwU3RvcmUudXNlU3RhdGUoJ29wZW4nKTtcbiAgY29uc3QgcmVmZXJlbmNlRWxlbWVudCA9IHBvcHVwU3RvcmUudXNlU3RhdGUoJ2FjdGl2ZVRyaWdnZXJFbGVtZW50Jyk7XG4gIGNvbnN0IGZsb2F0aW5nRWxlbWVudCA9IHBvcHVwU3RvcmUudXNlU3RhdGUodHJlYXRQb3B1cEFzRmxvYXRpbmdFbGVtZW50ID8gJ3BvcHVwRWxlbWVudCcgOiAncG9zaXRpb25lckVsZW1lbnQnKTtcbiAgY29uc3QgdHJpZ2dlckVsZW1lbnRzID0gcG9wdXBTdG9yZS5jb250ZXh0LnRyaWdnZXJFbGVtZW50cztcbiAgY29uc3Qgc3RvcmUgPSB1c2VSZWZXaXRoSW5pdCgoKSA9PiBuZXcgRmxvYXRpbmdSb290U3RvcmUoe1xuICAgIG9wZW4sXG4gICAgdHJhbnNpdGlvblN0YXR1czogdW5kZWZpbmVkLFxuICAgIHJlZmVyZW5jZUVsZW1lbnQsXG4gICAgZmxvYXRpbmdFbGVtZW50LFxuICAgIHRyaWdnZXJFbGVtZW50cyxcbiAgICBvbk9wZW5DaGFuZ2UsXG4gICAgZmxvYXRpbmdJZCxcbiAgICBzeW5jT25seTogdHJ1ZSxcbiAgICBuZXN0ZWRcbiAgfSkpLmN1cnJlbnQ7XG4gIHVzZUlzb0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgdmFsdWVzVG9TeW5jID0ge1xuICAgICAgb3BlbixcbiAgICAgIGZsb2F0aW5nSWQsXG4gICAgICByZWZlcmVuY2VFbGVtZW50LFxuICAgICAgZmxvYXRpbmdFbGVtZW50XG4gICAgfTtcbiAgICBpZiAoaXNFbGVtZW50KHJlZmVyZW5jZUVsZW1lbnQpKSB7XG4gICAgICB2YWx1ZXNUb1N5bmMuZG9tUmVmZXJlbmNlRWxlbWVudCA9IHJlZmVyZW5jZUVsZW1lbnQ7XG4gICAgfVxuICAgIGlmIChzdG9yZS5zdGF0ZS5wb3NpdGlvblJlZmVyZW5jZSA9PT0gc3RvcmUuc3RhdGUucmVmZXJlbmNlRWxlbWVudCkge1xuICAgICAgdmFsdWVzVG9TeW5jLnBvc2l0aW9uUmVmZXJlbmNlID0gcmVmZXJlbmNlRWxlbWVudDtcbiAgICB9XG4gICAgc3RvcmUudXBkYXRlKHZhbHVlc1RvU3luYyk7XG4gIH0sIFtvcGVuLCBmbG9hdGluZ0lkLCByZWZlcmVuY2VFbGVtZW50LCBmbG9hdGluZ0VsZW1lbnQsIHN0b3JlXSk7XG5cbiAgLy8gVE9ETzogV2hlbiBgc2V0T3BlbmAgaXMgYSBwYXJ0IG9mIHRoZSBQb3B1cFN0b3JlIEFQSSwgd2UgZG9uJ3QgbmVlZCB0byBzeW5jIGl0LlxuICBzdG9yZS5jb250ZXh0Lm9uT3BlbkNoYW5nZSA9IG9uT3BlbkNoYW5nZTtcbiAgc3RvcmUuY29udGV4dC5uZXN0ZWQgPSBuZXN0ZWQ7XG4gIHJldHVybiBzdG9yZTtcbn0iXSwibmFtZXMiOlsidXNlSWQiLCJ1c2VSZWZXaXRoSW5pdCIsInVzZUlzb0xheW91dEVmZmVjdCIsImlzRWxlbWVudCIsInVzZUZsb2F0aW5nUGFyZW50Tm9kZUlkIiwiRmxvYXRpbmdSb290U3RvcmUiLCJ1c2VTeW5jZWRGbG9hdGluZ1Jvb3RDb250ZXh0Iiwib3B0aW9ucyIsInBvcHVwU3RvcmUiLCJ0cmVhdFBvcHVwQXNGbG9hdGluZ0VsZW1lbnQiLCJvbk9wZW5DaGFuZ2UiLCJmbG9hdGluZ0lkIiwibmVzdGVkIiwib3BlbiIsInVzZVN0YXRlIiwicmVmZXJlbmNlRWxlbWVudCIsImZsb2F0aW5nRWxlbWVudCIsInRyaWdnZXJFbGVtZW50cyIsImNvbnRleHQiLCJzdG9yZSIsInRyYW5zaXRpb25TdGF0dXMiLCJ1bmRlZmluZWQiLCJzeW5jT25seSIsImN1cnJlbnQiLCJ2YWx1ZXNUb1N5bmMiLCJkb21SZWZlcmVuY2VFbGVtZW50Iiwic3RhdGUiLCJwb3NpdGlvblJlZmVyZW5jZSIsInVwZGF0ZSJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useSyncedFloatingRootContext.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/composite.js":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/utils/composite.js ***!
|
||
\******************************************************************************/
|
||
/***/ ((__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 */ createGridCellMap: () => (/* binding */ createGridCellMap),\n/* harmony export */ findNonDisabledListIndex: () => (/* binding */ findNonDisabledListIndex),\n/* harmony export */ getGridCellIndexOfCorner: () => (/* binding */ getGridCellIndexOfCorner),\n/* harmony export */ getGridCellIndices: () => (/* binding */ getGridCellIndices),\n/* harmony export */ getGridNavigatedIndex: () => (/* binding */ getGridNavigatedIndex),\n/* harmony export */ getMaxListIndex: () => (/* binding */ getMaxListIndex),\n/* harmony export */ getMinListIndex: () => (/* binding */ getMinListIndex),\n/* harmony export */ isDifferentGridRow: () => (/* binding */ isDifferentGridRow),\n/* harmony export */ isElementVisible: () => (/* binding */ isElementVisible),\n/* harmony export */ isHiddenByStyles: () => (/* binding */ isHiddenByStyles),\n/* harmony export */ isIndexOutOfListBounds: () => (/* binding */ isIndexOutOfListBounds),\n/* harmony export */ isListIndexDisabled: () => (/* binding */ isListIndexDisabled)\n/* harmony export */ });\n/* harmony import */ var _floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @floating-ui/utils */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs\");\n/* harmony import */ var _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @floating-ui/utils/dom */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\");\n/* harmony import */ var _event_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./event.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/event.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/constants.js\");\n\n\n\n\nfunction isDifferentGridRow(index, cols, prevRow) {\n return Math.floor(index / cols) !== prevRow;\n}\nfunction isIndexOutOfListBounds(list, index) {\n return index < 0 || index >= list.length;\n}\nfunction getMinListIndex(listRef, disabledIndices) {\n return findNonDisabledListIndex(listRef.current, {\n disabledIndices\n });\n}\nfunction getMaxListIndex(listRef, disabledIndices) {\n return findNonDisabledListIndex(listRef.current, {\n decrement: true,\n startingIndex: listRef.current.length,\n disabledIndices\n });\n}\nfunction findNonDisabledListIndex(list, {\n startingIndex = -1,\n decrement = false,\n disabledIndices,\n amount = 1\n} = {}) {\n let index = startingIndex;\n do {\n index += decrement ? -amount : amount;\n } while (index >= 0 && index <= list.length - 1 && isListIndexDisabled(list, index, disabledIndices));\n return index;\n}\nfunction getGridNavigatedIndex(list, {\n event,\n orientation,\n loopFocus,\n onLoop,\n rtl,\n cols,\n disabledIndices,\n minIndex,\n maxIndex,\n prevIndex,\n stopEvent: stop = false\n}) {\n let nextIndex = prevIndex;\n let verticalDirection;\n if (event.key === _constants_js__WEBPACK_IMPORTED_MODULE_0__.ARROW_UP) {\n verticalDirection = 'up';\n } else if (event.key === _constants_js__WEBPACK_IMPORTED_MODULE_0__.ARROW_DOWN) {\n verticalDirection = 'down';\n }\n if (verticalDirection) {\n // -------------------------------------------------------------------------\n // Detect row structure only when handling vertical navigation. This keeps\n // the non-vertical key paths free from row inference work.\n // -------------------------------------------------------------------------\n const rows = [];\n const rowIndexMap = [];\n let hasRoleRow = false;\n let visibleItemCount = 0;\n {\n let currentRowEl = null;\n let currentRowIndex = -1;\n list.forEach((el, idx) => {\n if (el == null) {\n return;\n }\n visibleItemCount += 1;\n const rowEl = el.closest('[role=\"row\"]');\n if (rowEl) {\n hasRoleRow = true;\n }\n if (rowEl !== currentRowEl || currentRowIndex === -1) {\n currentRowEl = rowEl;\n currentRowIndex += 1;\n rows[currentRowIndex] = [];\n }\n rows[currentRowIndex].push(idx);\n rowIndexMap[idx] = currentRowIndex;\n });\n }\n let hasDomRows = false;\n let inferredDomCols = 0;\n if (hasRoleRow) {\n for (const row of rows) {\n const rowLength = row.length;\n if (rowLength > inferredDomCols) {\n inferredDomCols = rowLength;\n }\n if (rowLength !== cols) {\n hasDomRows = true;\n }\n }\n }\n const hasVirtualizedGaps = hasDomRows && visibleItemCount < list.length;\n const verticalCols = inferredDomCols || cols;\n const navigateVertically = direction => {\n if (!hasDomRows || prevIndex === -1) {\n return undefined;\n }\n const currentRow = rowIndexMap[prevIndex];\n if (currentRow == null) {\n return undefined;\n }\n const colInRow = rows[currentRow].indexOf(prevIndex);\n const step = direction === 'up' ? -1 : 1;\n for (let nextRow = currentRow + step, i = 0; i < rows.length; i += 1, nextRow += step) {\n if (nextRow < 0 || nextRow >= rows.length) {\n if (!loopFocus || hasVirtualizedGaps) {\n return undefined;\n }\n nextRow = nextRow < 0 ? rows.length - 1 : 0;\n if (onLoop) {\n const clampedCol = Math.min(colInRow, rows[nextRow].length - 1);\n const targetItemIndex = rows[nextRow][clampedCol] ?? rows[nextRow][0];\n const returnedItemIndex = onLoop(event, prevIndex, targetItemIndex);\n nextRow = rowIndexMap[returnedItemIndex] ?? nextRow;\n }\n }\n const targetRow = rows[nextRow];\n for (let col = Math.min(colInRow, targetRow.length - 1); col >= 0; col -= 1) {\n const candidate = targetRow[col];\n if (!isListIndexDisabled(list, candidate, disabledIndices)) {\n return candidate;\n }\n }\n }\n return undefined;\n };\n const navigateVerticallyWithInferredRows = direction => {\n if (!hasVirtualizedGaps || prevIndex === -1) {\n return undefined;\n }\n const colInRow = prevIndex % verticalCols;\n const rowStep = direction === 'up' ? -verticalCols : verticalCols;\n const lastRowStart = maxIndex - maxIndex % verticalCols;\n const rowCount = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.floor)(maxIndex / verticalCols) + 1;\n for (let rowStart = prevIndex - colInRow + rowStep, i = 0; i < rowCount; i += 1, rowStart += rowStep) {\n if (rowStart < 0 || rowStart > maxIndex) {\n if (!loopFocus) {\n return undefined;\n }\n rowStart = rowStart < 0 ? lastRowStart : 0;\n }\n const rowEnd = Math.min(rowStart + verticalCols - 1, maxIndex);\n for (let candidate = Math.min(rowStart + colInRow, rowEnd); candidate >= rowStart; candidate -= 1) {\n if (!isListIndexDisabled(list, candidate, disabledIndices)) {\n return candidate;\n }\n }\n }\n return undefined;\n };\n if (stop) {\n (0,_event_js__WEBPACK_IMPORTED_MODULE_2__.stopEvent)(event);\n }\n const verticalCandidate = navigateVertically(verticalDirection) ?? navigateVerticallyWithInferredRows(verticalDirection);\n if (verticalCandidate !== undefined) {\n nextIndex = verticalCandidate;\n } else if (prevIndex === -1) {\n nextIndex = verticalDirection === 'up' ? maxIndex : minIndex;\n } else {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex,\n amount: verticalCols,\n decrement: verticalDirection === 'up',\n disabledIndices\n });\n if (loopFocus) {\n if (verticalDirection === 'up' && (prevIndex - verticalCols < minIndex || nextIndex < 0)) {\n const col = prevIndex % verticalCols;\n const maxCol = maxIndex % verticalCols;\n const offset = maxIndex - (maxCol - col);\n if (maxCol === col) {\n nextIndex = maxIndex;\n } else {\n nextIndex = maxCol > col ? offset : offset - verticalCols;\n }\n if (onLoop) {\n nextIndex = onLoop(event, prevIndex, nextIndex);\n }\n }\n if (verticalDirection === 'down' && prevIndex + verticalCols > maxIndex) {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex % verticalCols - verticalCols,\n amount: verticalCols,\n disabledIndices\n });\n if (onLoop) {\n nextIndex = onLoop(event, prevIndex, nextIndex);\n }\n }\n }\n }\n if (isIndexOutOfListBounds(list, nextIndex)) {\n nextIndex = prevIndex;\n }\n }\n\n // Remains on the same row/column.\n if (orientation === 'both') {\n const prevRow = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.floor)(prevIndex / cols);\n if (event.key === (rtl ? _constants_js__WEBPACK_IMPORTED_MODULE_0__.ARROW_LEFT : _constants_js__WEBPACK_IMPORTED_MODULE_0__.ARROW_RIGHT)) {\n if (stop) {\n (0,_event_js__WEBPACK_IMPORTED_MODULE_2__.stopEvent)(event);\n }\n if (prevIndex % cols !== cols - 1) {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex,\n disabledIndices\n });\n if (loopFocus && isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex - prevIndex % cols - 1,\n disabledIndices\n });\n if (onLoop) {\n nextIndex = onLoop(event, prevIndex, nextIndex);\n }\n }\n } else if (loopFocus) {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex - prevIndex % cols - 1,\n disabledIndices\n });\n if (onLoop) {\n nextIndex = onLoop(event, prevIndex, nextIndex);\n }\n }\n if (isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = prevIndex;\n }\n }\n if (event.key === (rtl ? _constants_js__WEBPACK_IMPORTED_MODULE_0__.ARROW_RIGHT : _constants_js__WEBPACK_IMPORTED_MODULE_0__.ARROW_LEFT)) {\n if (stop) {\n (0,_event_js__WEBPACK_IMPORTED_MODULE_2__.stopEvent)(event);\n }\n if (prevIndex % cols !== 0) {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex,\n decrement: true,\n disabledIndices\n });\n if (loopFocus && isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex + (cols - prevIndex % cols),\n decrement: true,\n disabledIndices\n });\n if (onLoop) {\n nextIndex = onLoop(event, prevIndex, nextIndex);\n }\n }\n } else if (loopFocus) {\n nextIndex = findNonDisabledListIndex(list, {\n startingIndex: prevIndex + (cols - prevIndex % cols),\n decrement: true,\n disabledIndices\n });\n if (onLoop) {\n nextIndex = onLoop(event, prevIndex, nextIndex);\n }\n }\n if (isDifferentGridRow(nextIndex, cols, prevRow)) {\n nextIndex = prevIndex;\n }\n }\n const lastRow = (0,_floating_ui_utils__WEBPACK_IMPORTED_MODULE_1__.floor)(maxIndex / cols) === prevRow;\n if (isIndexOutOfListBounds(list, nextIndex)) {\n if (loopFocus && lastRow) {\n nextIndex = event.key === (rtl ? _constants_js__WEBPACK_IMPORTED_MODULE_0__.ARROW_RIGHT : _constants_js__WEBPACK_IMPORTED_MODULE_0__.ARROW_LEFT) ? maxIndex : findNonDisabledListIndex(list, {\n startingIndex: prevIndex - prevIndex % cols - 1,\n disabledIndices\n });\n if (onLoop) {\n nextIndex = onLoop(event, prevIndex, nextIndex);\n }\n } else {\n nextIndex = prevIndex;\n }\n }\n }\n return nextIndex;\n}\n\n/** For each cell index, gets the item index that occupies that cell */\nfunction createGridCellMap(sizes, cols, dense) {\n const cellMap = [];\n let startIndex = 0;\n sizes.forEach(({\n width,\n height\n }, index) => {\n if (width > cols) {\n if (true) {\n throw new Error(`[Floating UI]: Invalid grid - item width at index ${index} is greater than grid columns`);\n }\n }\n let itemPlaced = false;\n if (dense) {\n startIndex = 0;\n }\n while (!itemPlaced) {\n const targetCells = [];\n for (let i = 0; i < width; i += 1) {\n for (let j = 0; j < height; j += 1) {\n targetCells.push(startIndex + i + j * cols);\n }\n }\n if (startIndex % cols + width <= cols && targetCells.every(cell => cellMap[cell] == null)) {\n targetCells.forEach(cell => {\n cellMap[cell] = index;\n });\n itemPlaced = true;\n } else {\n startIndex += 1;\n }\n }\n });\n\n // convert into a non-sparse array\n return [...cellMap];\n}\n\n/** Gets cell index of an item's corner or -1 when index is -1. */\nfunction getGridCellIndexOfCorner(index, sizes, cellMap, cols, corner) {\n if (index === -1) {\n return -1;\n }\n const firstCellIndex = cellMap.indexOf(index);\n const sizeItem = sizes[index];\n switch (corner) {\n case 'tl':\n return firstCellIndex;\n case 'tr':\n if (!sizeItem) {\n return firstCellIndex;\n }\n return firstCellIndex + sizeItem.width - 1;\n case 'bl':\n if (!sizeItem) {\n return firstCellIndex;\n }\n return firstCellIndex + (sizeItem.height - 1) * cols;\n case 'br':\n return cellMap.lastIndexOf(index);\n default:\n return -1;\n }\n}\n\n/** Gets all cell indices that correspond to the specified indices */\nfunction getGridCellIndices(indices, cellMap) {\n return cellMap.flatMap((index, cellIndex) => indices.includes(index) ? [cellIndex] : []);\n}\nfunction isListIndexDisabled(list, index, disabledIndices) {\n const isExplicitlyDisabled = typeof disabledIndices === 'function' ? disabledIndices(index) : disabledIndices?.includes(index) ?? false;\n if (isExplicitlyDisabled) {\n return true;\n }\n const element = list[index];\n if (!element) {\n return false;\n }\n if (!isElementVisible(element)) {\n return true;\n }\n return !disabledIndices && (element.hasAttribute('disabled') || element.getAttribute('aria-disabled') === 'true');\n}\nfunction isHiddenByStyles(styles) {\n return styles.visibility === 'hidden' || styles.visibility === 'collapse';\n}\nfunction isElementVisible(element, styles = element ? (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_3__.getComputedStyle)(element) : null) {\n if (!element || !element.isConnected || !styles || isHiddenByStyles(styles)) {\n return false;\n }\n if (typeof element.checkVisibility === 'function') {\n return element.checkVisibility();\n }\n return styles.display !== 'none' && styles.display !== 'contents';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvdXRpbHMvY29tcG9zaXRlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMkM7QUFDZTtBQUNuQjtBQUN3QztBQUN4RTtBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUUsSUFBSTtBQUNOO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQSxvQkFBb0IsbURBQVE7QUFDNUI7QUFDQSxJQUFJLHVCQUF1QixxREFBVTtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxpQkFBaUI7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpRUFBaUUsVUFBVTtBQUMzRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1QkFBdUIseURBQUs7QUFDNUIsaUVBQWlFLGNBQWM7QUFDL0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvRUFBb0UsdUJBQXVCO0FBQzNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLG9EQUFTO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxvQkFBb0IseURBQUs7QUFDekIsNkJBQTZCLHFEQUFVLEdBQUcsc0RBQVc7QUFDckQ7QUFDQSxRQUFRLG9EQUFTO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsc0RBQVcsR0FBRyxxREFBVTtBQUNyRDtBQUNBLFFBQVEsb0RBQVM7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix5REFBSztBQUN6QjtBQUNBO0FBQ0EseUNBQXlDLHNEQUFXLEdBQUcscURBQVU7QUFDakU7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsVUFBVSxJQUFxQztBQUMvQyw2RUFBNkUsT0FBTztBQUNwRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLFdBQVc7QUFDakMsd0JBQXdCLFlBQVk7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBOztBQUVBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ08sc0RBQXNELHdFQUFnQjtBQUM3RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9mbG9hdGluZy11aS1yZWFjdC91dGlscy9jb21wb3NpdGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZmxvb3IgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMnO1xuaW1wb3J0IHsgZ2V0Q29tcHV0ZWRTdHlsZSB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuaW1wb3J0IHsgc3RvcEV2ZW50IH0gZnJvbSBcIi4vZXZlbnQuanNcIjtcbmltcG9ydCB7IEFSUk9XX0RPV04sIEFSUk9XX0xFRlQsIEFSUk9XX1JJR0hULCBBUlJPV19VUCB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGlmZmVyZW50R3JpZFJvdyhpbmRleCwgY29scywgcHJldlJvdykge1xuICByZXR1cm4gTWF0aC5mbG9vcihpbmRleCAvIGNvbHMpICE9PSBwcmV2Um93O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSW5kZXhPdXRPZkxpc3RCb3VuZHMobGlzdCwgaW5kZXgpIHtcbiAgcmV0dXJuIGluZGV4IDwgMCB8fCBpbmRleCA+PSBsaXN0Lmxlbmd0aDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaW5MaXN0SW5kZXgobGlzdFJlZiwgZGlzYWJsZWRJbmRpY2VzKSB7XG4gIHJldHVybiBmaW5kTm9uRGlzYWJsZWRMaXN0SW5kZXgobGlzdFJlZi5jdXJyZW50LCB7XG4gICAgZGlzYWJsZWRJbmRpY2VzXG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE1heExpc3RJbmRleChsaXN0UmVmLCBkaXNhYmxlZEluZGljZXMpIHtcbiAgcmV0dXJuIGZpbmROb25EaXNhYmxlZExpc3RJbmRleChsaXN0UmVmLmN1cnJlbnQsIHtcbiAgICBkZWNyZW1lbnQ6IHRydWUsXG4gICAgc3RhcnRpbmdJbmRleDogbGlzdFJlZi5jdXJyZW50Lmxlbmd0aCxcbiAgICBkaXNhYmxlZEluZGljZXNcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZmluZE5vbkRpc2FibGVkTGlzdEluZGV4KGxpc3QsIHtcbiAgc3RhcnRpbmdJbmRleCA9IC0xLFxuICBkZWNyZW1lbnQgPSBmYWxzZSxcbiAgZGlzYWJsZWRJbmRpY2VzLFxuICBhbW91bnQgPSAxXG59ID0ge30pIHtcbiAgbGV0IGluZGV4ID0gc3RhcnRpbmdJbmRleDtcbiAgZG8ge1xuICAgIGluZGV4ICs9IGRlY3JlbWVudCA/IC1hbW91bnQgOiBhbW91bnQ7XG4gIH0gd2hpbGUgKGluZGV4ID49IDAgJiYgaW5kZXggPD0gbGlzdC5sZW5ndGggLSAxICYmIGlzTGlzdEluZGV4RGlzYWJsZWQobGlzdCwgaW5kZXgsIGRpc2FibGVkSW5kaWNlcykpO1xuICByZXR1cm4gaW5kZXg7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0R3JpZE5hdmlnYXRlZEluZGV4KGxpc3QsIHtcbiAgZXZlbnQsXG4gIG9yaWVudGF0aW9uLFxuICBsb29wRm9jdXMsXG4gIG9uTG9vcCxcbiAgcnRsLFxuICBjb2xzLFxuICBkaXNhYmxlZEluZGljZXMsXG4gIG1pbkluZGV4LFxuICBtYXhJbmRleCxcbiAgcHJldkluZGV4LFxuICBzdG9wRXZlbnQ6IHN0b3AgPSBmYWxzZVxufSkge1xuICBsZXQgbmV4dEluZGV4ID0gcHJldkluZGV4O1xuICBsZXQgdmVydGljYWxEaXJlY3Rpb247XG4gIGlmIChldmVudC5rZXkgPT09IEFSUk9XX1VQKSB7XG4gICAgdmVydGljYWxEaXJlY3Rpb24gPSAndXAnO1xuICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gQVJST1dfRE9XTikge1xuICAgIHZlcnRpY2FsRGlyZWN0aW9uID0gJ2Rvd24nO1xuICB9XG4gIGlmICh2ZXJ0aWNhbERpcmVjdGlvbikge1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBEZXRlY3Qgcm93IHN0cnVjdHVyZSBvbmx5IHdoZW4gaGFuZGxpbmcgdmVydGljYWwgbmF2aWdhdGlvbi4gVGhpcyBrZWVwc1xuICAgIC8vIHRoZSBub24tdmVydGljYWwga2V5IHBhdGhzIGZyZWUgZnJvbSByb3cgaW5mZXJlbmNlIHdvcmsuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHJvd3MgPSBbXTtcbiAgICBjb25zdCByb3dJbmRleE1hcCA9IFtdO1xuICAgIGxldCBoYXNSb2xlUm93ID0gZmFsc2U7XG4gICAgbGV0IHZpc2libGVJdGVtQ291bnQgPSAwO1xuICAgIHtcbiAgICAgIGxldCBjdXJyZW50Um93RWwgPSBudWxsO1xuICAgICAgbGV0IGN1cnJlbnRSb3dJbmRleCA9IC0xO1xuICAgICAgbGlzdC5mb3JFYWNoKChlbCwgaWR4KSA9PiB7XG4gICAgICAgIGlmIChlbCA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZpc2libGVJdGVtQ291bnQgKz0gMTtcbiAgICAgICAgY29uc3Qgcm93RWwgPSBlbC5jbG9zZXN0KCdbcm9sZT1cInJvd1wiXScpO1xuICAgICAgICBpZiAocm93RWwpIHtcbiAgICAgICAgICBoYXNSb2xlUm93ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocm93RWwgIT09IGN1cnJlbnRSb3dFbCB8fCBjdXJyZW50Um93SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgY3VycmVudFJvd0VsID0gcm93RWw7XG4gICAgICAgICAgY3VycmVudFJvd0luZGV4ICs9IDE7XG4gICAgICAgICAgcm93c1tjdXJyZW50Um93SW5kZXhdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgcm93c1tjdXJyZW50Um93SW5kZXhdLnB1c2goaWR4KTtcbiAgICAgICAgcm93SW5kZXhNYXBbaWR4XSA9IGN1cnJlbnRSb3dJbmRleDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBsZXQgaGFzRG9tUm93cyA9IGZhbHNlO1xuICAgIGxldCBpbmZlcnJlZERvbUNvbHMgPSAwO1xuICAgIGlmIChoYXNSb2xlUm93KSB7XG4gICAgICBmb3IgKGNvbnN0IHJvdyBvZiByb3dzKSB7XG4gICAgICAgIGNvbnN0IHJvd0xlbmd0aCA9IHJvdy5sZW5ndGg7XG4gICAgICAgIGlmIChyb3dMZW5ndGggPiBpbmZlcnJlZERvbUNvbHMpIHtcbiAgICAgICAgICBpbmZlcnJlZERvbUNvbHMgPSByb3dMZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0xlbmd0aCAhPT0gY29scykge1xuICAgICAgICAgIGhhc0RvbVJvd3MgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGhhc1ZpcnR1YWxpemVkR2FwcyA9IGhhc0RvbVJvd3MgJiYgdmlzaWJsZUl0ZW1Db3VudCA8IGxpc3QubGVuZ3RoO1xuICAgIGNvbnN0IHZlcnRpY2FsQ29scyA9IGluZmVycmVkRG9tQ29scyB8fCBjb2xzO1xuICAgIGNvbnN0IG5hdmlnYXRlVmVydGljYWxseSA9IGRpcmVjdGlvbiA9PiB7XG4gICAgICBpZiAoIWhhc0RvbVJvd3MgfHwgcHJldkluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudFJvdyA9IHJvd0luZGV4TWFwW3ByZXZJbmRleF07XG4gICAgICBpZiAoY3VycmVudFJvdyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBjb25zdCBjb2xJblJvdyA9IHJvd3NbY3VycmVudFJvd10uaW5kZXhPZihwcmV2SW5kZXgpO1xuICAgICAgY29uc3Qgc3RlcCA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IC0xIDogMTtcbiAgICAgIGZvciAobGV0IG5leHRSb3cgPSBjdXJyZW50Um93ICsgc3RlcCwgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSArPSAxLCBuZXh0Um93ICs9IHN0ZXApIHtcbiAgICAgICAgaWYgKG5leHRSb3cgPCAwIHx8IG5leHRSb3cgPj0gcm93cy5sZW5ndGgpIHtcbiAgICAgICAgICBpZiAoIWxvb3BGb2N1cyB8fCBoYXNWaXJ0dWFsaXplZEdhcHMpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5leHRSb3cgPSBuZXh0Um93IDwgMCA/IHJvd3MubGVuZ3RoIC0gMSA6IDA7XG4gICAgICAgICAgaWYgKG9uTG9vcCkge1xuICAgICAgICAgICAgY29uc3QgY2xhbXBlZENvbCA9IE1hdGgubWluKGNvbEluUm93LCByb3dzW25leHRSb3ddLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0SXRlbUluZGV4ID0gcm93c1tuZXh0Um93XVtjbGFtcGVkQ29sXSA/PyByb3dzW25leHRSb3ddWzBdO1xuICAgICAgICAgICAgY29uc3QgcmV0dXJuZWRJdGVtSW5kZXggPSBvbkxvb3AoZXZlbnQsIHByZXZJbmRleCwgdGFyZ2V0SXRlbUluZGV4KTtcbiAgICAgICAgICAgIG5leHRSb3cgPSByb3dJbmRleE1hcFtyZXR1cm5lZEl0ZW1JbmRleF0gPz8gbmV4dFJvdztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0Um93ID0gcm93c1tuZXh0Um93XTtcbiAgICAgICAgZm9yIChsZXQgY29sID0gTWF0aC5taW4oY29sSW5Sb3csIHRhcmdldFJvdy5sZW5ndGggLSAxKTsgY29sID49IDA7IGNvbCAtPSAxKSB7XG4gICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdGFyZ2V0Um93W2NvbF07XG4gICAgICAgICAgaWYgKCFpc0xpc3RJbmRleERpc2FibGVkKGxpc3QsIGNhbmRpZGF0ZSwgZGlzYWJsZWRJbmRpY2VzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBjb25zdCBuYXZpZ2F0ZVZlcnRpY2FsbHlXaXRoSW5mZXJyZWRSb3dzID0gZGlyZWN0aW9uID0+IHtcbiAgICAgIGlmICghaGFzVmlydHVhbGl6ZWRHYXBzIHx8IHByZXZJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNvbEluUm93ID0gcHJldkluZGV4ICUgdmVydGljYWxDb2xzO1xuICAgICAgY29uc3Qgcm93U3RlcCA9IGRpcmVjdGlvbiA9PT0gJ3VwJyA/IC12ZXJ0aWNhbENvbHMgOiB2ZXJ0aWNhbENvbHM7XG4gICAgICBjb25zdCBsYXN0Um93U3RhcnQgPSBtYXhJbmRleCAtIG1heEluZGV4ICUgdmVydGljYWxDb2xzO1xuICAgICAgY29uc3Qgcm93Q291bnQgPSBmbG9vcihtYXhJbmRleCAvIHZlcnRpY2FsQ29scykgKyAxO1xuICAgICAgZm9yIChsZXQgcm93U3RhcnQgPSBwcmV2SW5kZXggLSBjb2xJblJvdyArIHJvd1N0ZXAsIGkgPSAwOyBpIDwgcm93Q291bnQ7IGkgKz0gMSwgcm93U3RhcnQgKz0gcm93U3RlcCkge1xuICAgICAgICBpZiAocm93U3RhcnQgPCAwIHx8IHJvd1N0YXJ0ID4gbWF4SW5kZXgpIHtcbiAgICAgICAgICBpZiAoIWxvb3BGb2N1cykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcm93U3RhcnQgPSByb3dTdGFydCA8IDAgPyBsYXN0Um93U3RhcnQgOiAwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJvd0VuZCA9IE1hdGgubWluKHJvd1N0YXJ0ICsgdmVydGljYWxDb2xzIC0gMSwgbWF4SW5kZXgpO1xuICAgICAgICBmb3IgKGxldCBjYW5kaWRhdGUgPSBNYXRoLm1pbihyb3dTdGFydCArIGNvbEluUm93LCByb3dFbmQpOyBjYW5kaWRhdGUgPj0gcm93U3RhcnQ7IGNhbmRpZGF0ZSAtPSAxKSB7XG4gICAgICAgICAgaWYgKCFpc0xpc3RJbmRleERpc2FibGVkKGxpc3QsIGNhbmRpZGF0ZSwgZGlzYWJsZWRJbmRpY2VzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBpZiAoc3RvcCkge1xuICAgICAgc3RvcEV2ZW50KGV2ZW50KTtcbiAgICB9XG4gICAgY29uc3QgdmVydGljYWxDYW5kaWRhdGUgPSBuYXZpZ2F0ZVZlcnRpY2FsbHkodmVydGljYWxEaXJlY3Rpb24pID8/IG5hdmlnYXRlVmVydGljYWxseVdpdGhJbmZlcnJlZFJvd3ModmVydGljYWxEaXJlY3Rpb24pO1xuICAgIGlmICh2ZXJ0aWNhbENhbmRpZGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuZXh0SW5kZXggPSB2ZXJ0aWNhbENhbmRpZGF0ZTtcbiAgICB9IGVsc2UgaWYgKHByZXZJbmRleCA9PT0gLTEpIHtcbiAgICAgIG5leHRJbmRleCA9IHZlcnRpY2FsRGlyZWN0aW9uID09PSAndXAnID8gbWF4SW5kZXggOiBtaW5JbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV4dEluZGV4ID0gZmluZE5vbkRpc2FibGVkTGlzdEluZGV4KGxpc3QsIHtcbiAgICAgICAgc3RhcnRpbmdJbmRleDogcHJldkluZGV4LFxuICAgICAgICBhbW91bnQ6IHZlcnRpY2FsQ29scyxcbiAgICAgICAgZGVjcmVtZW50OiB2ZXJ0aWNhbERpcmVjdGlvbiA9PT0gJ3VwJyxcbiAgICAgICAgZGlzYWJsZWRJbmRpY2VzXG4gICAgICB9KTtcbiAgICAgIGlmIChsb29wRm9jdXMpIHtcbiAgICAgICAgaWYgKHZlcnRpY2FsRGlyZWN0aW9uID09PSAndXAnICYmIChwcmV2SW5kZXggLSB2ZXJ0aWNhbENvbHMgPCBtaW5JbmRleCB8fCBuZXh0SW5kZXggPCAwKSkge1xuICAgICAgICAgIGNvbnN0IGNvbCA9IHByZXZJbmRleCAlIHZlcnRpY2FsQ29scztcbiAgICAgICAgICBjb25zdCBtYXhDb2wgPSBtYXhJbmRleCAlIHZlcnRpY2FsQ29scztcbiAgICAgICAgICBjb25zdCBvZmZzZXQgPSBtYXhJbmRleCAtIChtYXhDb2wgLSBjb2wpO1xuICAgICAgICAgIGlmIChtYXhDb2wgPT09IGNvbCkge1xuICAgICAgICAgICAgbmV4dEluZGV4ID0gbWF4SW5kZXg7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5leHRJbmRleCA9IG1heENvbCA+IGNvbCA/IG9mZnNldCA6IG9mZnNldCAtIHZlcnRpY2FsQ29scztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9uTG9vcCkge1xuICAgICAgICAgICAgbmV4dEluZGV4ID0gb25Mb29wKGV2ZW50LCBwcmV2SW5kZXgsIG5leHRJbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh2ZXJ0aWNhbERpcmVjdGlvbiA9PT0gJ2Rvd24nICYmIHByZXZJbmRleCArIHZlcnRpY2FsQ29scyA+IG1heEluZGV4KSB7XG4gICAgICAgICAgbmV4dEluZGV4ID0gZmluZE5vbkRpc2FibGVkTGlzdEluZGV4KGxpc3QsIHtcbiAgICAgICAgICAgIHN0YXJ0aW5nSW5kZXg6IHByZXZJbmRleCAlIHZlcnRpY2FsQ29scyAtIHZlcnRpY2FsQ29scyxcbiAgICAgICAgICAgIGFtb3VudDogdmVydGljYWxDb2xzLFxuICAgICAgICAgICAgZGlzYWJsZWRJbmRpY2VzXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKG9uTG9vcCkge1xuICAgICAgICAgICAgbmV4dEluZGV4ID0gb25Mb29wKGV2ZW50LCBwcmV2SW5kZXgsIG5leHRJbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc0luZGV4T3V0T2ZMaXN0Qm91bmRzKGxpc3QsIG5leHRJbmRleCkpIHtcbiAgICAgIG5leHRJbmRleCA9IHByZXZJbmRleDtcbiAgICB9XG4gIH1cblxuICAvLyBSZW1haW5zIG9uIHRoZSBzYW1lIHJvdy9jb2x1bW4uXG4gIGlmIChvcmllbnRhdGlvbiA9PT0gJ2JvdGgnKSB7XG4gICAgY29uc3QgcHJldlJvdyA9IGZsb29yKHByZXZJbmRleCAvIGNvbHMpO1xuICAgIGlmIChldmVudC5rZXkgPT09IChydGwgPyBBUlJPV19MRUZUIDogQVJST1dfUklHSFQpKSB7XG4gICAgICBpZiAoc3RvcCkge1xuICAgICAgICBzdG9wRXZlbnQoZXZlbnQpO1xuICAgICAgfVxuICAgICAgaWYgKHByZXZJbmRleCAlIGNvbHMgIT09IGNvbHMgLSAxKSB7XG4gICAgICAgIG5leHRJbmRleCA9IGZpbmROb25EaXNhYmxlZExpc3RJbmRleChsaXN0LCB7XG4gICAgICAgICAgc3RhcnRpbmdJbmRleDogcHJldkluZGV4LFxuICAgICAgICAgIGRpc2FibGVkSW5kaWNlc1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGxvb3BGb2N1cyAmJiBpc0RpZmZlcmVudEdyaWRSb3cobmV4dEluZGV4LCBjb2xzLCBwcmV2Um93KSkge1xuICAgICAgICAgIG5leHRJbmRleCA9IGZpbmROb25EaXNhYmxlZExpc3RJbmRleChsaXN0LCB7XG4gICAgICAgICAgICBzdGFydGluZ0luZGV4OiBwcmV2SW5kZXggLSBwcmV2SW5kZXggJSBjb2xzIC0gMSxcbiAgICAgICAgICAgIGRpc2FibGVkSW5kaWNlc1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChvbkxvb3ApIHtcbiAgICAgICAgICAgIG5leHRJbmRleCA9IG9uTG9vcChldmVudCwgcHJldkluZGV4LCBuZXh0SW5kZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChsb29wRm9jdXMpIHtcbiAgICAgICAgbmV4dEluZGV4ID0gZmluZE5vbkRpc2FibGVkTGlzdEluZGV4KGxpc3QsIHtcbiAgICAgICAgICBzdGFydGluZ0luZGV4OiBwcmV2SW5kZXggLSBwcmV2SW5kZXggJSBjb2xzIC0gMSxcbiAgICAgICAgICBkaXNhYmxlZEluZGljZXNcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvbkxvb3ApIHtcbiAgICAgICAgICBuZXh0SW5kZXggPSBvbkxvb3AoZXZlbnQsIHByZXZJbmRleCwgbmV4dEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGlzRGlmZmVyZW50R3JpZFJvdyhuZXh0SW5kZXgsIGNvbHMsIHByZXZSb3cpKSB7XG4gICAgICAgIG5leHRJbmRleCA9IHByZXZJbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gKHJ0bCA/IEFSUk9XX1JJR0hUIDogQVJST1dfTEVGVCkpIHtcbiAgICAgIGlmIChzdG9wKSB7XG4gICAgICAgIHN0b3BFdmVudChldmVudCk7XG4gICAgICB9XG4gICAgICBpZiAocHJldkluZGV4ICUgY29scyAhPT0gMCkge1xuICAgICAgICBuZXh0SW5kZXggPSBmaW5kTm9uRGlzYWJsZWRMaXN0SW5kZXgobGlzdCwge1xuICAgICAgICAgIHN0YXJ0aW5nSW5kZXg6IHByZXZJbmRleCxcbiAgICAgICAgICBkZWNyZW1lbnQ6IHRydWUsXG4gICAgICAgICAgZGlzYWJsZWRJbmRpY2VzXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobG9vcEZvY3VzICYmIGlzRGlmZmVyZW50R3JpZFJvdyhuZXh0SW5kZXgsIGNvbHMsIHByZXZSb3cpKSB7XG4gICAgICAgICAgbmV4dEluZGV4ID0gZmluZE5vbkRpc2FibGVkTGlzdEluZGV4KGxpc3QsIHtcbiAgICAgICAgICAgIHN0YXJ0aW5nSW5kZXg6IHByZXZJbmRleCArIChjb2xzIC0gcHJldkluZGV4ICUgY29scyksXG4gICAgICAgICAgICBkZWNyZW1lbnQ6IHRydWUsXG4gICAgICAgICAgICBkaXNhYmxlZEluZGljZXNcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAob25Mb29wKSB7XG4gICAgICAgICAgICBuZXh0SW5kZXggPSBvbkxvb3AoZXZlbnQsIHByZXZJbmRleCwgbmV4dEluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAobG9vcEZvY3VzKSB7XG4gICAgICAgIG5leHRJbmRleCA9IGZpbmROb25EaXNhYmxlZExpc3RJbmRleChsaXN0LCB7XG4gICAgICAgICAgc3RhcnRpbmdJbmRleDogcHJldkluZGV4ICsgKGNvbHMgLSBwcmV2SW5kZXggJSBjb2xzKSxcbiAgICAgICAgICBkZWNyZW1lbnQ6IHRydWUsXG4gICAgICAgICAgZGlzYWJsZWRJbmRpY2VzXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob25Mb29wKSB7XG4gICAgICAgICAgbmV4dEluZGV4ID0gb25Mb29wKGV2ZW50LCBwcmV2SW5kZXgsIG5leHRJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpc0RpZmZlcmVudEdyaWRSb3cobmV4dEluZGV4LCBjb2xzLCBwcmV2Um93KSkge1xuICAgICAgICBuZXh0SW5kZXggPSBwcmV2SW5kZXg7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGxhc3RSb3cgPSBmbG9vcihtYXhJbmRleCAvIGNvbHMpID09PSBwcmV2Um93O1xuICAgIGlmIChpc0luZGV4T3V0T2ZMaXN0Qm91bmRzKGxpc3QsIG5leHRJbmRleCkpIHtcbiAgICAgIGlmIChsb29wRm9jdXMgJiYgbGFzdFJvdykge1xuICAgICAgICBuZXh0SW5kZXggPSBldmVudC5rZXkgPT09IChydGwgPyBBUlJPV19SSUdIVCA6IEFSUk9XX0xFRlQpID8gbWF4SW5kZXggOiBmaW5kTm9uRGlzYWJsZWRMaXN0SW5kZXgobGlzdCwge1xuICAgICAgICAgIHN0YXJ0aW5nSW5kZXg6IHByZXZJbmRleCAtIHByZXZJbmRleCAlIGNvbHMgLSAxLFxuICAgICAgICAgIGRpc2FibGVkSW5kaWNlc1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKG9uTG9vcCkge1xuICAgICAgICAgIG5leHRJbmRleCA9IG9uTG9vcChldmVudCwgcHJldkluZGV4LCBuZXh0SW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0SW5kZXggPSBwcmV2SW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXh0SW5kZXg7XG59XG5cbi8qKiBGb3IgZWFjaCBjZWxsIGluZGV4LCBnZXRzIHRoZSBpdGVtIGluZGV4IHRoYXQgb2NjdXBpZXMgdGhhdCBjZWxsICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR3JpZENlbGxNYXAoc2l6ZXMsIGNvbHMsIGRlbnNlKSB7XG4gIGNvbnN0IGNlbGxNYXAgPSBbXTtcbiAgbGV0IHN0YXJ0SW5kZXggPSAwO1xuICBzaXplcy5mb3JFYWNoKCh7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH0sIGluZGV4KSA9PiB7XG4gICAgaWYgKHdpZHRoID4gY29scykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbRmxvYXRpbmcgVUldOiBJbnZhbGlkIGdyaWQgLSBpdGVtIHdpZHRoIGF0IGluZGV4ICR7aW5kZXh9IGlzIGdyZWF0ZXIgdGhhbiBncmlkIGNvbHVtbnNgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IGl0ZW1QbGFjZWQgPSBmYWxzZTtcbiAgICBpZiAoZGVuc2UpIHtcbiAgICAgIHN0YXJ0SW5kZXggPSAwO1xuICAgIH1cbiAgICB3aGlsZSAoIWl0ZW1QbGFjZWQpIHtcbiAgICAgIGNvbnN0IHRhcmdldENlbGxzID0gW107XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdpZHRoOyBpICs9IDEpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBoZWlnaHQ7IGogKz0gMSkge1xuICAgICAgICAgIHRhcmdldENlbGxzLnB1c2goc3RhcnRJbmRleCArIGkgKyBqICogY29scyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzdGFydEluZGV4ICUgY29scyArIHdpZHRoIDw9IGNvbHMgJiYgdGFyZ2V0Q2VsbHMuZXZlcnkoY2VsbCA9PiBjZWxsTWFwW2NlbGxdID09IG51bGwpKSB7XG4gICAgICAgIHRhcmdldENlbGxzLmZvckVhY2goY2VsbCA9PiB7XG4gICAgICAgICAgY2VsbE1hcFtjZWxsXSA9IGluZGV4O1xuICAgICAgICB9KTtcbiAgICAgICAgaXRlbVBsYWNlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydEluZGV4ICs9IDE7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICAvLyBjb252ZXJ0IGludG8gYSBub24tc3BhcnNlIGFycmF5XG4gIHJldHVybiBbLi4uY2VsbE1hcF07XG59XG5cbi8qKiBHZXRzIGNlbGwgaW5kZXggb2YgYW4gaXRlbSdzIGNvcm5lciBvciAtMSB3aGVuIGluZGV4IGlzIC0xLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdyaWRDZWxsSW5kZXhPZkNvcm5lcihpbmRleCwgc2l6ZXMsIGNlbGxNYXAsIGNvbHMsIGNvcm5lcikge1xuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG4gIGNvbnN0IGZpcnN0Q2VsbEluZGV4ID0gY2VsbE1hcC5pbmRleE9mKGluZGV4KTtcbiAgY29uc3Qgc2l6ZUl0ZW0gPSBzaXplc1tpbmRleF07XG4gIHN3aXRjaCAoY29ybmVyKSB7XG4gICAgY2FzZSAndGwnOlxuICAgICAgcmV0dXJuIGZpcnN0Q2VsbEluZGV4O1xuICAgIGNhc2UgJ3RyJzpcbiAgICAgIGlmICghc2l6ZUl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0Q2VsbEluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0Q2VsbEluZGV4ICsgc2l6ZUl0ZW0ud2lkdGggLSAxO1xuICAgIGNhc2UgJ2JsJzpcbiAgICAgIGlmICghc2l6ZUl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGZpcnN0Q2VsbEluZGV4O1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0Q2VsbEluZGV4ICsgKHNpemVJdGVtLmhlaWdodCAtIDEpICogY29scztcbiAgICBjYXNlICdicic6XG4gICAgICByZXR1cm4gY2VsbE1hcC5sYXN0SW5kZXhPZihpbmRleCk7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiAtMTtcbiAgfVxufVxuXG4vKiogR2V0cyBhbGwgY2VsbCBpbmRpY2VzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgc3BlY2lmaWVkIGluZGljZXMgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRHcmlkQ2VsbEluZGljZXMoaW5kaWNlcywgY2VsbE1hcCkge1xuICByZXR1cm4gY2VsbE1hcC5mbGF0TWFwKChpbmRleCwgY2VsbEluZGV4KSA9PiBpbmRpY2VzLmluY2x1ZGVzKGluZGV4KSA/IFtjZWxsSW5kZXhdIDogW10pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdEluZGV4RGlzYWJsZWQobGlzdCwgaW5kZXgsIGRpc2FibGVkSW5kaWNlcykge1xuICBjb25zdCBpc0V4cGxpY2l0bHlEaXNhYmxlZCA9IHR5cGVvZiBkaXNhYmxlZEluZGljZXMgPT09ICdmdW5jdGlvbicgPyBkaXNhYmxlZEluZGljZXMoaW5kZXgpIDogZGlzYWJsZWRJbmRpY2VzPy5pbmNsdWRlcyhpbmRleCkgPz8gZmFsc2U7XG4gIGlmIChpc0V4cGxpY2l0bHlEaXNhYmxlZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGVsZW1lbnQgPSBsaXN0W2luZGV4XTtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICghaXNFbGVtZW50VmlzaWJsZShlbGVtZW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiAhZGlzYWJsZWRJbmRpY2VzICYmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSB8fCBlbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1kaXNhYmxlZCcpID09PSAndHJ1ZScpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzSGlkZGVuQnlTdHlsZXMoc3R5bGVzKSB7XG4gIHJldHVybiBzdHlsZXMudmlzaWJpbGl0eSA9PT0gJ2hpZGRlbicgfHwgc3R5bGVzLnZpc2liaWxpdHkgPT09ICdjb2xsYXBzZSc7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNFbGVtZW50VmlzaWJsZShlbGVtZW50LCBzdHlsZXMgPSBlbGVtZW50ID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSA6IG51bGwpIHtcbiAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmlzQ29ubmVjdGVkIHx8ICFzdHlsZXMgfHwgaXNIaWRkZW5CeVN0eWxlcyhzdHlsZXMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgZWxlbWVudC5jaGVja1Zpc2liaWxpdHkgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZWxlbWVudC5jaGVja1Zpc2liaWxpdHkoKTtcbiAgfVxuICByZXR1cm4gc3R5bGVzLmRpc3BsYXkgIT09ICdub25lJyAmJiBzdHlsZXMuZGlzcGxheSAhPT0gJ2NvbnRlbnRzJztcbn0iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/composite.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/constants.js":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/utils/constants.js ***!
|
||
\******************************************************************************/
|
||
/***/ ((__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 */ ACTIVE_KEY: () => (/* binding */ ACTIVE_KEY),\n/* harmony export */ ARROW_DOWN: () => (/* binding */ ARROW_DOWN),\n/* harmony export */ ARROW_LEFT: () => (/* binding */ ARROW_LEFT),\n/* harmony export */ ARROW_RIGHT: () => (/* binding */ ARROW_RIGHT),\n/* harmony export */ ARROW_UP: () => (/* binding */ ARROW_UP),\n/* harmony export */ FOCUSABLE_ATTRIBUTE: () => (/* binding */ FOCUSABLE_ATTRIBUTE),\n/* harmony export */ SELECTED_KEY: () => (/* binding */ SELECTED_KEY),\n/* harmony export */ TYPEABLE_SELECTOR: () => (/* binding */ TYPEABLE_SELECTOR)\n/* harmony export */ });\nconst FOCUSABLE_ATTRIBUTE = 'data-base-ui-focusable';\nconst ACTIVE_KEY = 'active';\nconst SELECTED_KEY = 'selected';\nconst TYPEABLE_SELECTOR = \"input:not([type='hidden']):not([disabled]),\" + \"[contenteditable]:not([contenteditable='false']),textarea:not([disabled])\";\nconst ARROW_LEFT = 'ArrowLeft';\nconst ARROW_RIGHT = 'ArrowRight';\nconst ARROW_UP = 'ArrowUp';\nconst ARROW_DOWN = 'ArrowDown';//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvdXRpbHMvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQU87QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvdXRpbHMvY29uc3RhbnRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBGT0NVU0FCTEVfQVRUUklCVVRFID0gJ2RhdGEtYmFzZS11aS1mb2N1c2FibGUnO1xuZXhwb3J0IGNvbnN0IEFDVElWRV9LRVkgPSAnYWN0aXZlJztcbmV4cG9ydCBjb25zdCBTRUxFQ1RFRF9LRVkgPSAnc2VsZWN0ZWQnO1xuZXhwb3J0IGNvbnN0IFRZUEVBQkxFX1NFTEVDVE9SID0gXCJpbnB1dDpub3QoW3R5cGU9J2hpZGRlbiddKTpub3QoW2Rpc2FibGVkXSksXCIgKyBcIltjb250ZW50ZWRpdGFibGVdOm5vdChbY29udGVudGVkaXRhYmxlPSdmYWxzZSddKSx0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSlcIjtcbmV4cG9ydCBjb25zdCBBUlJPV19MRUZUID0gJ0Fycm93TGVmdCc7XG5leHBvcnQgY29uc3QgQVJST1dfUklHSFQgPSAnQXJyb3dSaWdodCc7XG5leHBvcnQgY29uc3QgQVJST1dfVVAgPSAnQXJyb3dVcCc7XG5leHBvcnQgY29uc3QgQVJST1dfRE9XTiA9ICdBcnJvd0Rvd24nOyJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/constants.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/createAttribute.js":
|
||
/*!************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/utils/createAttribute.js ***!
|
||
\************************************************************************************/
|
||
/***/ ((__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 */ createAttribute: () => (/* binding */ createAttribute)\n/* harmony export */ });\nfunction createAttribute(name) {\n return `data-base-ui-${name}`;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvdXRpbHMvY3JlYXRlQXR0cmlidXRlLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTztBQUNQLHlCQUF5QixLQUFLO0FBQzlCIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9mbG9hdGluZy11aS1yZWFjdC91dGlscy9jcmVhdGVBdHRyaWJ1dGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUF0dHJpYnV0ZShuYW1lKSB7XG4gIHJldHVybiBgZGF0YS1iYXNlLXVpLSR7bmFtZX1gO1xufSJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/createAttribute.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/createEventEmitter.js":
|
||
/*!***************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/utils/createEventEmitter.js ***!
|
||
\***************************************************************************************/
|
||
/***/ ((__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 */ createEventEmitter: () => (/* binding */ createEventEmitter)\n/* harmony export */ });\nfunction createEventEmitter() {\n const map = new Map();\n return {\n emit(event, data) {\n map.get(event)?.forEach(listener => listener(data));\n },\n on(event, listener) {\n if (!map.has(event)) {\n map.set(event, new Set());\n }\n map.get(event).add(listener);\n },\n off(event, listener) {\n map.get(event)?.delete(listener);\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvdXRpbHMvY3JlYXRlRXZlbnRFbWl0dGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvdXRpbHMvY3JlYXRlRXZlbnRFbWl0dGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFdmVudEVtaXR0ZXIoKSB7XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXAoKTtcbiAgcmV0dXJuIHtcbiAgICBlbWl0KGV2ZW50LCBkYXRhKSB7XG4gICAgICBtYXAuZ2V0KGV2ZW50KT8uZm9yRWFjaChsaXN0ZW5lciA9PiBsaXN0ZW5lcihkYXRhKSk7XG4gICAgfSxcbiAgICBvbihldmVudCwgbGlzdGVuZXIpIHtcbiAgICAgIGlmICghbWFwLmhhcyhldmVudCkpIHtcbiAgICAgICAgbWFwLnNldChldmVudCwgbmV3IFNldCgpKTtcbiAgICAgIH1cbiAgICAgIG1hcC5nZXQoZXZlbnQpLmFkZChsaXN0ZW5lcik7XG4gICAgfSxcbiAgICBvZmYoZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgICBtYXAuZ2V0KGV2ZW50KT8uZGVsZXRlKGxpc3RlbmVyKTtcbiAgICB9XG4gIH07XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/createEventEmitter.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/element.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/utils/element.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((__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 */ activeElement: () => (/* reexport safe */ _internals_shadowDom_js__WEBPACK_IMPORTED_MODULE_0__.activeElement),\n/* harmony export */ contains: () => (/* reexport safe */ _internals_shadowDom_js__WEBPACK_IMPORTED_MODULE_0__.contains),\n/* harmony export */ getFloatingFocusElement: () => (/* binding */ getFloatingFocusElement),\n/* harmony export */ getTarget: () => (/* reexport safe */ _internals_shadowDom_js__WEBPACK_IMPORTED_MODULE_0__.getTarget),\n/* harmony export */ isEventTargetWithin: () => (/* binding */ isEventTargetWithin),\n/* harmony export */ isInteractiveElement: () => (/* binding */ isInteractiveElement),\n/* harmony export */ isRootElement: () => (/* binding */ isRootElement),\n/* harmony export */ isTargetInsideEnabledTrigger: () => (/* binding */ isTargetInsideEnabledTrigger),\n/* harmony export */ isTypeableCombobox: () => (/* binding */ isTypeableCombobox),\n/* harmony export */ isTypeableElement: () => (/* binding */ isTypeableElement),\n/* harmony export */ matchesFocusVisible: () => (/* binding */ matchesFocusVisible)\n/* harmony export */ });\n/* harmony import */ var _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @floating-ui/utils/dom */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\");\n/* harmony import */ var _base_ui_utils_detectBrowser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @base-ui/utils/detectBrowser */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/detectBrowser.js\");\n/* harmony import */ var _constants_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./constants.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/constants.js\");\n/* harmony import */ var _internals_shadowDom_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../internals/shadowDom.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/shadowDom.js\");\n\n\n\n\n\nfunction isTargetInsideEnabledTrigger(target, triggerElements) {\n if (!(0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_1__.isElement)(target)) {\n return false;\n }\n const targetElement = target;\n if (triggerElements.hasElement(targetElement)) {\n return !targetElement.hasAttribute('data-trigger-disabled');\n }\n for (const [, trigger] of triggerElements.entries()) {\n if ((0,_internals_shadowDom_js__WEBPACK_IMPORTED_MODULE_0__.contains)(trigger, targetElement)) {\n return !trigger.hasAttribute('data-trigger-disabled');\n }\n }\n return false;\n}\nfunction isEventTargetWithin(event, node) {\n if (node == null) {\n return false;\n }\n if ('composedPath' in event) {\n return event.composedPath().includes(node);\n }\n\n // TS thinks `event` is of type never as it assumes all browsers support composedPath, but browsers without shadow dom don't\n const eventAgain = event;\n return eventAgain.target != null && node.contains(eventAgain.target);\n}\nfunction isRootElement(element) {\n return element.matches('html,body');\n}\nfunction isTypeableElement(element) {\n return (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_1__.isHTMLElement)(element) && element.matches(_constants_js__WEBPACK_IMPORTED_MODULE_2__.TYPEABLE_SELECTOR);\n}\nfunction isInteractiveElement(element) {\n return element?.closest(`button,a[href],[role=\"button\"],select,[tabindex]:not([tabindex=\"-1\"]),${_constants_js__WEBPACK_IMPORTED_MODULE_2__.TYPEABLE_SELECTOR}`) != null;\n}\nfunction isTypeableCombobox(element) {\n if (!element) {\n return false;\n }\n return element.getAttribute('role') === 'combobox' && isTypeableElement(element);\n}\nfunction matchesFocusVisible(element) {\n // We don't want to block focus from working with `visibleOnly`\n // (JSDOM doesn't match `:focus-visible` when the element has `:focus`)\n if (!element || _base_ui_utils_detectBrowser__WEBPACK_IMPORTED_MODULE_3__.isJSDOM) {\n return true;\n }\n try {\n return element.matches(':focus-visible');\n } catch (_e) {\n return true;\n }\n}\nfunction getFloatingFocusElement(floatingElement) {\n if (!floatingElement) {\n return null;\n }\n // Try to find the element that has `{...getFloatingProps()}` spread on it.\n // This indicates the floating element is acting as a positioning wrapper, and\n // so focus should be managed on the child element with the event handlers and\n // aria props.\n return floatingElement.hasAttribute(_constants_js__WEBPACK_IMPORTED_MODULE_2__.FOCUSABLE_ATTRIBUTE) ? floatingElement : floatingElement.querySelector(`[${_constants_js__WEBPACK_IMPORTED_MODULE_2__.FOCUSABLE_ATTRIBUTE}]`) || floatingElement;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvdXRpbHMvZWxlbWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBa0U7QUFDWDtBQUNpQjtBQUNVO0FBQ3BDO0FBQ3ZDO0FBQ1AsT0FBTyxpRUFBUztBQUNoQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVEsaUVBQVE7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ087QUFDUCxTQUFTLHFFQUFhLDZCQUE2Qiw0REFBaUI7QUFDcEU7QUFDTztBQUNQLG1HQUFtRyw0REFBaUIsQ0FBQztBQUNySDtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLGtCQUFrQixpRUFBTztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLHdDQUF3QyxzQkFBc0I7QUFDOUQ7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLDhEQUFtQix3REFBd0QsOERBQW1CLENBQUM7QUFDckkiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2Zsb2F0aW5nLXVpLXJlYWN0L3V0aWxzL2VsZW1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5pbXBvcnQgeyBpc0pTRE9NIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvZGV0ZWN0QnJvd3Nlcic7XG5pbXBvcnQgeyBGT0NVU0FCTEVfQVRUUklCVVRFLCBUWVBFQUJMRV9TRUxFQ1RPUiB9IGZyb20gXCIuL2NvbnN0YW50cy5qc1wiO1xuaW1wb3J0IHsgYWN0aXZlRWxlbWVudCwgY29udGFpbnMsIGdldFRhcmdldCB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvc2hhZG93RG9tLmpzXCI7XG5leHBvcnQgeyBhY3RpdmVFbGVtZW50LCBjb250YWlucywgZ2V0VGFyZ2V0IH07XG5leHBvcnQgZnVuY3Rpb24gaXNUYXJnZXRJbnNpZGVFbmFibGVkVHJpZ2dlcih0YXJnZXQsIHRyaWdnZXJFbGVtZW50cykge1xuICBpZiAoIWlzRWxlbWVudCh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHRhcmdldEVsZW1lbnQgPSB0YXJnZXQ7XG4gIGlmICh0cmlnZ2VyRWxlbWVudHMuaGFzRWxlbWVudCh0YXJnZXRFbGVtZW50KSkge1xuICAgIHJldHVybiAhdGFyZ2V0RWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2RhdGEtdHJpZ2dlci1kaXNhYmxlZCcpO1xuICB9XG4gIGZvciAoY29uc3QgWywgdHJpZ2dlcl0gb2YgdHJpZ2dlckVsZW1lbnRzLmVudHJpZXMoKSkge1xuICAgIGlmIChjb250YWlucyh0cmlnZ2VyLCB0YXJnZXRFbGVtZW50KSkge1xuICAgICAgcmV0dXJuICF0cmlnZ2VyLmhhc0F0dHJpYnV0ZSgnZGF0YS10cmlnZ2VyLWRpc2FibGVkJyk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0V2ZW50VGFyZ2V0V2l0aGluKGV2ZW50LCBub2RlKSB7XG4gIGlmIChub2RlID09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKCdjb21wb3NlZFBhdGgnIGluIGV2ZW50KSB7XG4gICAgcmV0dXJuIGV2ZW50LmNvbXBvc2VkUGF0aCgpLmluY2x1ZGVzKG5vZGUpO1xuICB9XG5cbiAgLy8gVFMgdGhpbmtzIGBldmVudGAgaXMgb2YgdHlwZSBuZXZlciBhcyBpdCBhc3N1bWVzIGFsbCBicm93c2VycyBzdXBwb3J0IGNvbXBvc2VkUGF0aCwgYnV0IGJyb3dzZXJzIHdpdGhvdXQgc2hhZG93IGRvbSBkb24ndFxuICBjb25zdCBldmVudEFnYWluID0gZXZlbnQ7XG4gIHJldHVybiBldmVudEFnYWluLnRhcmdldCAhPSBudWxsICYmIG5vZGUuY29udGFpbnMoZXZlbnRBZ2Fpbi50YXJnZXQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzUm9vdEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudC5tYXRjaGVzKCdodG1sLGJvZHknKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1R5cGVhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpICYmIGVsZW1lbnQubWF0Y2hlcyhUWVBFQUJMRV9TRUxFQ1RPUik7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlcmFjdGl2ZUVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudD8uY2xvc2VzdChgYnV0dG9uLGFbaHJlZl0sW3JvbGU9XCJidXR0b25cIl0sc2VsZWN0LFt0YWJpbmRleF06bm90KFt0YWJpbmRleD1cIi0xXCJdKSwke1RZUEVBQkxFX1NFTEVDVE9SfWApICE9IG51bGw7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlYWJsZUNvbWJvYm94KGVsZW1lbnQpIHtcbiAgaWYgKCFlbGVtZW50KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZSgncm9sZScpID09PSAnY29tYm9ib3gnICYmIGlzVHlwZWFibGVFbGVtZW50KGVsZW1lbnQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoZXNGb2N1c1Zpc2libGUoZWxlbWVudCkge1xuICAvLyBXZSBkb24ndCB3YW50IHRvIGJsb2NrIGZvY3VzIGZyb20gd29ya2luZyB3aXRoIGB2aXNpYmxlT25seWBcbiAgLy8gKEpTRE9NIGRvZXNuJ3QgbWF0Y2ggYDpmb2N1cy12aXNpYmxlYCB3aGVuIHRoZSBlbGVtZW50IGhhcyBgOmZvY3VzYClcbiAgaWYgKCFlbGVtZW50IHx8IGlzSlNET00pIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB0cnkge1xuICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoJzpmb2N1cy12aXNpYmxlJyk7XG4gIH0gY2F0Y2ggKF9lKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRGbG9hdGluZ0ZvY3VzRWxlbWVudChmbG9hdGluZ0VsZW1lbnQpIHtcbiAgaWYgKCFmbG9hdGluZ0VsZW1lbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBUcnkgdG8gZmluZCB0aGUgZWxlbWVudCB0aGF0IGhhcyBgey4uLmdldEZsb2F0aW5nUHJvcHMoKX1gIHNwcmVhZCBvbiBpdC5cbiAgLy8gVGhpcyBpbmRpY2F0ZXMgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXMgYWN0aW5nIGFzIGEgcG9zaXRpb25pbmcgd3JhcHBlciwgYW5kXG4gIC8vIHNvIGZvY3VzIHNob3VsZCBiZSBtYW5hZ2VkIG9uIHRoZSBjaGlsZCBlbGVtZW50IHdpdGggdGhlIGV2ZW50IGhhbmRsZXJzIGFuZFxuICAvLyBhcmlhIHByb3BzLlxuICByZXR1cm4gZmxvYXRpbmdFbGVtZW50Lmhhc0F0dHJpYnV0ZShGT0NVU0FCTEVfQVRUUklCVVRFKSA/IGZsb2F0aW5nRWxlbWVudCA6IGZsb2F0aW5nRWxlbWVudC5xdWVyeVNlbGVjdG9yKGBbJHtGT0NVU0FCTEVfQVRUUklCVVRFfV1gKSB8fCBmbG9hdGluZ0VsZW1lbnQ7XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/element.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/enqueueFocus.js":
|
||
/*!*********************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/utils/enqueueFocus.js ***!
|
||
\*********************************************************************************/
|
||
/***/ ((__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 */ enqueueFocus: () => (/* binding */ enqueueFocus)\n/* harmony export */ });\n/* harmony import */ var _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @base-ui/utils/empty */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js\");\n\nlet rafId = 0;\nfunction enqueueFocus(el, options = {}) {\n const {\n preventScroll = false,\n cancelPrevious = true,\n sync = false\n } = options;\n if (cancelPrevious) {\n cancelAnimationFrame(rafId);\n }\n const exec = () => el?.focus({\n preventScroll\n });\n if (sync) {\n exec();\n return _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_0__.NOOP;\n }\n const currentRafId = requestAnimationFrame(exec);\n rafId = currentRafId;\n return () => {\n if (rafId === currentRafId) {\n cancelAnimationFrame(currentRafId);\n rafId = 0;\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvdXRpbHMvZW5xdWV1ZUZvY3VzLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTRDO0FBQzVDO0FBQ08sc0NBQXNDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLFdBQVcsc0RBQUk7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvdXRpbHMvZW5xdWV1ZUZvY3VzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5PT1AgfSBmcm9tICdAYmFzZS11aS91dGlscy9lbXB0eSc7XG5sZXQgcmFmSWQgPSAwO1xuZXhwb3J0IGZ1bmN0aW9uIGVucXVldWVGb2N1cyhlbCwgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBwcmV2ZW50U2Nyb2xsID0gZmFsc2UsXG4gICAgY2FuY2VsUHJldmlvdXMgPSB0cnVlLFxuICAgIHN5bmMgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgaWYgKGNhbmNlbFByZXZpb3VzKSB7XG4gICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmFmSWQpO1xuICB9XG4gIGNvbnN0IGV4ZWMgPSAoKSA9PiBlbD8uZm9jdXMoe1xuICAgIHByZXZlbnRTY3JvbGxcbiAgfSk7XG4gIGlmIChzeW5jKSB7XG4gICAgZXhlYygpO1xuICAgIHJldHVybiBOT09QO1xuICB9XG4gIGNvbnN0IGN1cnJlbnRSYWZJZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShleGVjKTtcbiAgcmFmSWQgPSBjdXJyZW50UmFmSWQ7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgaWYgKHJhZklkID09PSBjdXJyZW50UmFmSWQpIHtcbiAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGN1cnJlbnRSYWZJZCk7XG4gICAgICByYWZJZCA9IDA7XG4gICAgfVxuICB9O1xufSJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/enqueueFocus.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/event.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/utils/event.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((__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 */ isClickLikeEvent: () => (/* binding */ isClickLikeEvent),\n/* harmony export */ isMouseLikePointerType: () => (/* binding */ isMouseLikePointerType),\n/* harmony export */ isReactEvent: () => (/* binding */ isReactEvent),\n/* harmony export */ isVirtualClick: () => (/* binding */ isVirtualClick),\n/* harmony export */ isVirtualPointerEvent: () => (/* binding */ isVirtualPointerEvent),\n/* harmony export */ stopEvent: () => (/* binding */ stopEvent)\n/* harmony export */ });\n/* harmony import */ var _base_ui_utils_detectBrowser__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @base-ui/utils/detectBrowser */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/detectBrowser.js\");\n\nfunction stopEvent(event) {\n event.preventDefault();\n event.stopPropagation();\n}\nfunction isReactEvent(event) {\n return 'nativeEvent' in event;\n}\n\n// License: https://github.com/adobe/react-spectrum/blob/main/packages/@react-aria/utils/src/isVirtualEvent.ts\nfunction isVirtualClick(event) {\n if (event.pointerType === '' && event.isTrusted) {\n return true;\n }\n if (_base_ui_utils_detectBrowser__WEBPACK_IMPORTED_MODULE_0__.isAndroid && event.pointerType) {\n return event.type === 'click' && event.buttons === 1;\n }\n return event.detail === 0 && !event.pointerType;\n}\nfunction isVirtualPointerEvent(event) {\n if (_base_ui_utils_detectBrowser__WEBPACK_IMPORTED_MODULE_0__.isJSDOM) {\n return false;\n }\n return !_base_ui_utils_detectBrowser__WEBPACK_IMPORTED_MODULE_0__.isAndroid && event.width === 0 && event.height === 0 || _base_ui_utils_detectBrowser__WEBPACK_IMPORTED_MODULE_0__.isAndroid && event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'mouse' ||\n // iOS VoiceOver returns 0.333• for width/height.\n event.width < 1 && event.height < 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'touch';\n}\nfunction isMouseLikePointerType(pointerType, strict) {\n // On some Linux machines with Chromium, mouse inputs return a `pointerType`\n // of \"pen\": https://github.com/floating-ui/floating-ui/issues/2015\n const values = ['mouse', 'pen'];\n if (!strict) {\n values.push('', undefined);\n }\n return values.includes(pointerType);\n}\nfunction isClickLikeEvent(event) {\n const type = event.type;\n return type === 'click' || type === 'mousedown' || type === 'keydown' || type === 'keyup';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvdXRpbHMvZXZlbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFrRTtBQUMzRDtBQUNQO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTs7QUFFQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtRUFBUztBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCxNQUFNLGlFQUFPO0FBQ2I7QUFDQTtBQUNBLFVBQVUsbUVBQVMsK0NBQStDLG1FQUFTO0FBQzNFO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9mbG9hdGluZy11aS1yZWFjdC91dGlscy9ldmVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc0FuZHJvaWQsIGlzSlNET00gfSBmcm9tICdAYmFzZS11aS91dGlscy9kZXRlY3RCcm93c2VyJztcbmV4cG9ydCBmdW5jdGlvbiBzdG9wRXZlbnQoZXZlbnQpIHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNSZWFjdEV2ZW50KGV2ZW50KSB7XG4gIHJldHVybiAnbmF0aXZlRXZlbnQnIGluIGV2ZW50O1xufVxuXG4vLyBMaWNlbnNlOiBodHRwczovL2dpdGh1Yi5jb20vYWRvYmUvcmVhY3Qtc3BlY3RydW0vYmxvYi9tYWluL3BhY2thZ2VzL0ByZWFjdC1hcmlhL3V0aWxzL3NyYy9pc1ZpcnR1YWxFdmVudC50c1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmlydHVhbENsaWNrKGV2ZW50KSB7XG4gIGlmIChldmVudC5wb2ludGVyVHlwZSA9PT0gJycgJiYgZXZlbnQuaXNUcnVzdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGlzQW5kcm9pZCAmJiBldmVudC5wb2ludGVyVHlwZSkge1xuICAgIHJldHVybiBldmVudC50eXBlID09PSAnY2xpY2snICYmIGV2ZW50LmJ1dHRvbnMgPT09IDE7XG4gIH1cbiAgcmV0dXJuIGV2ZW50LmRldGFpbCA9PT0gMCAmJiAhZXZlbnQucG9pbnRlclR5cGU7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWaXJ0dWFsUG9pbnRlckV2ZW50KGV2ZW50KSB7XG4gIGlmIChpc0pTRE9NKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiAhaXNBbmRyb2lkICYmIGV2ZW50LndpZHRoID09PSAwICYmIGV2ZW50LmhlaWdodCA9PT0gMCB8fCBpc0FuZHJvaWQgJiYgZXZlbnQud2lkdGggPT09IDEgJiYgZXZlbnQuaGVpZ2h0ID09PSAxICYmIGV2ZW50LnByZXNzdXJlID09PSAwICYmIGV2ZW50LmRldGFpbCA9PT0gMCAmJiBldmVudC5wb2ludGVyVHlwZSA9PT0gJ21vdXNlJyB8fFxuICAvLyBpT1MgVm9pY2VPdmVyIHJldHVybnMgMC4zMzPigKIgZm9yIHdpZHRoL2hlaWdodC5cbiAgZXZlbnQud2lkdGggPCAxICYmIGV2ZW50LmhlaWdodCA8IDEgJiYgZXZlbnQucHJlc3N1cmUgPT09IDAgJiYgZXZlbnQuZGV0YWlsID09PSAwICYmIGV2ZW50LnBvaW50ZXJUeXBlID09PSAndG91Y2gnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTW91c2VMaWtlUG9pbnRlclR5cGUocG9pbnRlclR5cGUsIHN0cmljdCkge1xuICAvLyBPbiBzb21lIExpbnV4IG1hY2hpbmVzIHdpdGggQ2hyb21pdW0sIG1vdXNlIGlucHV0cyByZXR1cm4gYSBgcG9pbnRlclR5cGVgXG4gIC8vIG9mIFwicGVuXCI6IGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjAxNVxuICBjb25zdCB2YWx1ZXMgPSBbJ21vdXNlJywgJ3BlbiddO1xuICBpZiAoIXN0cmljdCkge1xuICAgIHZhbHVlcy5wdXNoKCcnLCB1bmRlZmluZWQpO1xuICB9XG4gIHJldHVybiB2YWx1ZXMuaW5jbHVkZXMocG9pbnRlclR5cGUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2xpY2tMaWtlRXZlbnQoZXZlbnQpIHtcbiAgY29uc3QgdHlwZSA9IGV2ZW50LnR5cGU7XG4gIHJldHVybiB0eXBlID09PSAnY2xpY2snIHx8IHR5cGUgPT09ICdtb3VzZWRvd24nIHx8IHR5cGUgPT09ICdrZXlkb3duJyB8fCB0eXBlID09PSAna2V5dXAnO1xufSJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/event.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/getEmptyRootContext.js":
|
||
/*!****************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/utils/getEmptyRootContext.js ***!
|
||
\****************************************************************************************/
|
||
/***/ ((__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 */ getEmptyRootContext: () => (/* binding */ getEmptyRootContext)\n/* harmony export */ });\n/* harmony import */ var _utils_popups_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../utils/popups/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popups/popupTriggerMap.js\");\n/* harmony import */ var _components_FloatingRootStore_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../components/FloatingRootStore.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/components/FloatingRootStore.js\");\n\n\nfunction getEmptyRootContext() {\n return new _components_FloatingRootStore_js__WEBPACK_IMPORTED_MODULE_0__.FloatingRootStore({\n open: false,\n transitionStatus: undefined,\n floatingElement: null,\n referenceElement: null,\n triggerElements: new _utils_popups_index_js__WEBPACK_IMPORTED_MODULE_1__.PopupTriggerMap(),\n floatingId: '',\n syncOnly: false,\n nested: false,\n onOpenChange: undefined\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvdXRpbHMvZ2V0RW1wdHlSb290Q29udGV4dC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBOEQ7QUFDUztBQUNoRTtBQUNQLGFBQWEsK0VBQWlCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLG1FQUFlO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9mbG9hdGluZy11aS1yZWFjdC91dGlscy9nZXRFbXB0eVJvb3RDb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBvcHVwVHJpZ2dlck1hcCB9IGZyb20gXCIuLi8uLi91dGlscy9wb3B1cHMvaW5kZXguanNcIjtcbmltcG9ydCB7IEZsb2F0aW5nUm9vdFN0b3JlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvRmxvYXRpbmdSb290U3RvcmUuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiBnZXRFbXB0eVJvb3RDb250ZXh0KCkge1xuICByZXR1cm4gbmV3IEZsb2F0aW5nUm9vdFN0b3JlKHtcbiAgICBvcGVuOiBmYWxzZSxcbiAgICB0cmFuc2l0aW9uU3RhdHVzOiB1bmRlZmluZWQsXG4gICAgZmxvYXRpbmdFbGVtZW50OiBudWxsLFxuICAgIHJlZmVyZW5jZUVsZW1lbnQ6IG51bGwsXG4gICAgdHJpZ2dlckVsZW1lbnRzOiBuZXcgUG9wdXBUcmlnZ2VyTWFwKCksXG4gICAgZmxvYXRpbmdJZDogJycsXG4gICAgc3luY09ubHk6IGZhbHNlLFxuICAgIG5lc3RlZDogZmFsc2UsXG4gICAgb25PcGVuQ2hhbmdlOiB1bmRlZmluZWRcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/getEmptyRootContext.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/markOthers.js":
|
||
/*!*******************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/utils/markOthers.js ***!
|
||
\*******************************************************************************/
|
||
/***/ ((__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 */ markOthers: () => (/* binding */ markOthers),\n/* harmony export */ supportsInert: () => (/* binding */ supportsInert)\n/* harmony export */ });\n/* harmony import */ var _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @floating-ui/utils/dom */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\");\n/* harmony import */ var _base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @base-ui/utils/owner */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/owner.js\");\n// Modified to add conditional `aria-hidden` support:\n// https://github.com/theKashey/aria-hidden/blob/9220c8f4a4fd35f63bee5510a9f41a37264382d4/src/index.ts\n\n\nconst counters = {\n inert: new WeakMap(),\n 'aria-hidden': new WeakMap()\n};\nconst markerName = 'data-base-ui-inert';\nconst uncontrolledElementsSets = {\n inert: new WeakSet(),\n 'aria-hidden': new WeakSet()\n};\nlet markerCounterMap = new WeakMap();\nlet lockCount = 0;\nfunction getUncontrolledElementsSet(controlAttribute) {\n return uncontrolledElementsSets[controlAttribute];\n}\nconst supportsInert = () => typeof HTMLElement !== 'undefined' && 'inert' in HTMLElement.prototype;\nfunction unwrapHost(node) {\n if (!node) {\n return null;\n }\n return (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(node) ? node.host : unwrapHost(node.parentNode);\n}\nconst correctElements = (parent, targets) => targets.map(target => {\n if (parent.contains(target)) {\n return target;\n }\n const correctedTarget = unwrapHost(target);\n if (parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n return null;\n}).filter(x => x != null);\nconst buildKeepSet = targets => {\n const keep = new Set();\n targets.forEach(target => {\n let node = target;\n while (node && !keep.has(node)) {\n keep.add(node);\n node = node.parentNode;\n }\n });\n return keep;\n};\nconst collectOutsideElements = (root, keepElements, stopElements) => {\n const outside = [];\n const walk = parent => {\n if (!parent || stopElements.has(parent)) {\n return;\n }\n Array.from(parent.children).forEach(node => {\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeName)(node) === 'script') {\n return;\n }\n if (keepElements.has(node)) {\n walk(node);\n } else {\n outside.push(node);\n }\n });\n };\n walk(root);\n return outside;\n};\nfunction applyAttributeToOthers(uncorrectedAvoidElements, body, ariaHidden, inert, {\n mark = true,\n markerIgnoreElements = []\n}) {\n // eslint-disable-next-line no-nested-ternary\n const controlAttribute = inert ? 'inert' : ariaHidden ? 'aria-hidden' : null;\n let counterMap = null;\n let uncontrolledElementsSet = null;\n const avoidElements = correctElements(body, uncorrectedAvoidElements);\n const markerIgnoreTargets = mark ? correctElements(body, markerIgnoreElements) : [];\n const markerIgnoreSet = new Set(markerIgnoreTargets);\n const markerTargets = mark ? collectOutsideElements(body, buildKeepSet(avoidElements), new Set(avoidElements)).filter(target => !markerIgnoreSet.has(target)) : [];\n const hiddenElements = [];\n const markedElements = [];\n if (controlAttribute) {\n const map = counters[controlAttribute];\n const currentUncontrolledElementsSet = getUncontrolledElementsSet(controlAttribute);\n uncontrolledElementsSet = currentUncontrolledElementsSet;\n counterMap = map;\n const ariaLiveElements = correctElements(body, Array.from(body.querySelectorAll('[aria-live]')));\n const controlElements = avoidElements.concat(ariaLiveElements);\n const controlTargets = collectOutsideElements(body, buildKeepSet(controlElements), new Set(controlElements));\n controlTargets.forEach(node => {\n const attr = node.getAttribute(controlAttribute);\n const alreadyHidden = attr !== null && attr !== 'false';\n const counterValue = (map.get(node) || 0) + 1;\n map.set(node, counterValue);\n hiddenElements.push(node);\n if (counterValue === 1 && alreadyHidden) {\n currentUncontrolledElementsSet.add(node);\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, controlAttribute === 'inert' ? '' : 'true');\n }\n });\n }\n if (mark) {\n markerTargets.forEach(node => {\n const markerValue = (markerCounterMap.get(node) || 0) + 1;\n markerCounterMap.set(node, markerValue);\n markedElements.push(node);\n if (markerValue === 1) {\n node.setAttribute(markerName, '');\n }\n });\n }\n lockCount += 1;\n return () => {\n if (counterMap) {\n hiddenElements.forEach(element => {\n const currentCounterValue = counterMap.get(element) || 0;\n const counterValue = currentCounterValue - 1;\n counterMap.set(element, counterValue);\n if (!counterValue) {\n if (!uncontrolledElementsSet?.has(element) && controlAttribute) {\n element.removeAttribute(controlAttribute);\n }\n uncontrolledElementsSet?.delete(element);\n }\n });\n }\n if (mark) {\n markedElements.forEach(element => {\n const markerValue = (markerCounterMap.get(element) || 0) - 1;\n markerCounterMap.set(element, markerValue);\n if (!markerValue) {\n element.removeAttribute(markerName);\n }\n });\n }\n lockCount -= 1;\n if (!lockCount) {\n counters.inert = new WeakMap();\n counters['aria-hidden'] = new WeakMap();\n uncontrolledElementsSets.inert = new WeakSet();\n uncontrolledElementsSets['aria-hidden'] = new WeakSet();\n markerCounterMap = new WeakMap();\n }\n };\n}\nfunction markOthers(avoidElements, options = {}) {\n const {\n ariaHidden = false,\n inert = false,\n mark = true,\n markerIgnoreElements = []\n } = options;\n const body = (0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_1__.ownerDocument)(avoidElements[0]).body;\n return applyAttributeToOthers(avoidElements, body, ariaHidden, inert, {\n mark,\n markerIgnoreElements\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvdXRpbHMvbWFya090aGVycy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDQTtBQUNtRTtBQUNkO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxvRUFBWTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsbUVBQVc7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sK0NBQStDO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0osZUFBZSxtRUFBYTtBQUM1QjtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2Zsb2F0aW5nLXVpLXJlYWN0L3V0aWxzL21hcmtPdGhlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gTW9kaWZpZWQgdG8gYWRkIGNvbmRpdGlvbmFsIGBhcmlhLWhpZGRlbmAgc3VwcG9ydDpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS90aGVLYXNoZXkvYXJpYS1oaWRkZW4vYmxvYi85MjIwYzhmNGE0ZmQzNWY2M2JlZTU1MTBhOWY0MWEzNzI2NDM4MmQ0L3NyYy9pbmRleC50c1xuaW1wb3J0IHsgZ2V0Tm9kZU5hbWUsIGlzU2hhZG93Um9vdCB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuaW1wb3J0IHsgb3duZXJEb2N1bWVudCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL293bmVyJztcbmNvbnN0IGNvdW50ZXJzID0ge1xuICBpbmVydDogbmV3IFdlYWtNYXAoKSxcbiAgJ2FyaWEtaGlkZGVuJzogbmV3IFdlYWtNYXAoKVxufTtcbmNvbnN0IG1hcmtlck5hbWUgPSAnZGF0YS1iYXNlLXVpLWluZXJ0JztcbmNvbnN0IHVuY29udHJvbGxlZEVsZW1lbnRzU2V0cyA9IHtcbiAgaW5lcnQ6IG5ldyBXZWFrU2V0KCksXG4gICdhcmlhLWhpZGRlbic6IG5ldyBXZWFrU2V0KClcbn07XG5sZXQgbWFya2VyQ291bnRlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG5sZXQgbG9ja0NvdW50ID0gMDtcbmZ1bmN0aW9uIGdldFVuY29udHJvbGxlZEVsZW1lbnRzU2V0KGNvbnRyb2xBdHRyaWJ1dGUpIHtcbiAgcmV0dXJuIHVuY29udHJvbGxlZEVsZW1lbnRzU2V0c1tjb250cm9sQXR0cmlidXRlXTtcbn1cbmV4cG9ydCBjb25zdCBzdXBwb3J0c0luZXJ0ID0gKCkgPT4gdHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAnaW5lcnQnIGluIEhUTUxFbGVtZW50LnByb3RvdHlwZTtcbmZ1bmN0aW9uIHVud3JhcEhvc3Qobm9kZSkge1xuICBpZiAoIW5vZGUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gaXNTaGFkb3dSb290KG5vZGUpID8gbm9kZS5ob3N0IDogdW53cmFwSG9zdChub2RlLnBhcmVudE5vZGUpO1xufVxuY29uc3QgY29ycmVjdEVsZW1lbnRzID0gKHBhcmVudCwgdGFyZ2V0cykgPT4gdGFyZ2V0cy5tYXAodGFyZ2V0ID0+IHtcbiAgaWYgKHBhcmVudC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfVxuICBjb25zdCBjb3JyZWN0ZWRUYXJnZXQgPSB1bndyYXBIb3N0KHRhcmdldCk7XG4gIGlmIChwYXJlbnQuY29udGFpbnMoY29ycmVjdGVkVGFyZ2V0KSkge1xuICAgIHJldHVybiBjb3JyZWN0ZWRUYXJnZXQ7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59KS5maWx0ZXIoeCA9PiB4ICE9IG51bGwpO1xuY29uc3QgYnVpbGRLZWVwU2V0ID0gdGFyZ2V0cyA9PiB7XG4gIGNvbnN0IGtlZXAgPSBuZXcgU2V0KCk7XG4gIHRhcmdldHMuZm9yRWFjaCh0YXJnZXQgPT4ge1xuICAgIGxldCBub2RlID0gdGFyZ2V0O1xuICAgIHdoaWxlIChub2RlICYmICFrZWVwLmhhcyhub2RlKSkge1xuICAgICAga2VlcC5hZGQobm9kZSk7XG4gICAgICBub2RlID0gbm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBrZWVwO1xufTtcbmNvbnN0IGNvbGxlY3RPdXRzaWRlRWxlbWVudHMgPSAocm9vdCwga2VlcEVsZW1lbnRzLCBzdG9wRWxlbWVudHMpID0+IHtcbiAgY29uc3Qgb3V0c2lkZSA9IFtdO1xuICBjb25zdCB3YWxrID0gcGFyZW50ID0+IHtcbiAgICBpZiAoIXBhcmVudCB8fCBzdG9wRWxlbWVudHMuaGFzKHBhcmVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgQXJyYXkuZnJvbShwYXJlbnQuY2hpbGRyZW4pLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdzY3JpcHQnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChrZWVwRWxlbWVudHMuaGFzKG5vZGUpKSB7XG4gICAgICAgIHdhbGsobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRzaWRlLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIHdhbGsocm9vdCk7XG4gIHJldHVybiBvdXRzaWRlO1xufTtcbmZ1bmN0aW9uIGFwcGx5QXR0cmlidXRlVG9PdGhlcnModW5jb3JyZWN0ZWRBdm9pZEVsZW1lbnRzLCBib2R5LCBhcmlhSGlkZGVuLCBpbmVydCwge1xuICBtYXJrID0gdHJ1ZSxcbiAgbWFya2VySWdub3JlRWxlbWVudHMgPSBbXVxufSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgY29uc3QgY29udHJvbEF0dHJpYnV0ZSA9IGluZXJ0ID8gJ2luZXJ0JyA6IGFyaWFIaWRkZW4gPyAnYXJpYS1oaWRkZW4nIDogbnVsbDtcbiAgbGV0IGNvdW50ZXJNYXAgPSBudWxsO1xuICBsZXQgdW5jb250cm9sbGVkRWxlbWVudHNTZXQgPSBudWxsO1xuICBjb25zdCBhdm9pZEVsZW1lbnRzID0gY29ycmVjdEVsZW1lbnRzKGJvZHksIHVuY29ycmVjdGVkQXZvaWRFbGVtZW50cyk7XG4gIGNvbnN0IG1hcmtlcklnbm9yZVRhcmdldHMgPSBtYXJrID8gY29ycmVjdEVsZW1lbnRzKGJvZHksIG1hcmtlcklnbm9yZUVsZW1lbnRzKSA6IFtdO1xuICBjb25zdCBtYXJrZXJJZ25vcmVTZXQgPSBuZXcgU2V0KG1hcmtlcklnbm9yZVRhcmdldHMpO1xuICBjb25zdCBtYXJrZXJUYXJnZXRzID0gbWFyayA/IGNvbGxlY3RPdXRzaWRlRWxlbWVudHMoYm9keSwgYnVpbGRLZWVwU2V0KGF2b2lkRWxlbWVudHMpLCBuZXcgU2V0KGF2b2lkRWxlbWVudHMpKS5maWx0ZXIodGFyZ2V0ID0+ICFtYXJrZXJJZ25vcmVTZXQuaGFzKHRhcmdldCkpIDogW107XG4gIGNvbnN0IGhpZGRlbkVsZW1lbnRzID0gW107XG4gIGNvbnN0IG1hcmtlZEVsZW1lbnRzID0gW107XG4gIGlmIChjb250cm9sQXR0cmlidXRlKSB7XG4gICAgY29uc3QgbWFwID0gY291bnRlcnNbY29udHJvbEF0dHJpYnV0ZV07XG4gICAgY29uc3QgY3VycmVudFVuY29udHJvbGxlZEVsZW1lbnRzU2V0ID0gZ2V0VW5jb250cm9sbGVkRWxlbWVudHNTZXQoY29udHJvbEF0dHJpYnV0ZSk7XG4gICAgdW5jb250cm9sbGVkRWxlbWVudHNTZXQgPSBjdXJyZW50VW5jb250cm9sbGVkRWxlbWVudHNTZXQ7XG4gICAgY291bnRlck1hcCA9IG1hcDtcbiAgICBjb25zdCBhcmlhTGl2ZUVsZW1lbnRzID0gY29ycmVjdEVsZW1lbnRzKGJvZHksIEFycmF5LmZyb20oYm9keS5xdWVyeVNlbGVjdG9yQWxsKCdbYXJpYS1saXZlXScpKSk7XG4gICAgY29uc3QgY29udHJvbEVsZW1lbnRzID0gYXZvaWRFbGVtZW50cy5jb25jYXQoYXJpYUxpdmVFbGVtZW50cyk7XG4gICAgY29uc3QgY29udHJvbFRhcmdldHMgPSBjb2xsZWN0T3V0c2lkZUVsZW1lbnRzKGJvZHksIGJ1aWxkS2VlcFNldChjb250cm9sRWxlbWVudHMpLCBuZXcgU2V0KGNvbnRyb2xFbGVtZW50cykpO1xuICAgIGNvbnRyb2xUYXJnZXRzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBjb25zdCBhdHRyID0gbm9kZS5nZXRBdHRyaWJ1dGUoY29udHJvbEF0dHJpYnV0ZSk7XG4gICAgICBjb25zdCBhbHJlYWR5SGlkZGVuID0gYXR0ciAhPT0gbnVsbCAmJiBhdHRyICE9PSAnZmFsc2UnO1xuICAgICAgY29uc3QgY291bnRlclZhbHVlID0gKG1hcC5nZXQobm9kZSkgfHwgMCkgKyAxO1xuICAgICAgbWFwLnNldChub2RlLCBjb3VudGVyVmFsdWUpO1xuICAgICAgaGlkZGVuRWxlbWVudHMucHVzaChub2RlKTtcbiAgICAgIGlmIChjb3VudGVyVmFsdWUgPT09IDEgJiYgYWxyZWFkeUhpZGRlbikge1xuICAgICAgICBjdXJyZW50VW5jb250cm9sbGVkRWxlbWVudHNTZXQuYWRkKG5vZGUpO1xuICAgICAgfVxuICAgICAgaWYgKCFhbHJlYWR5SGlkZGVuKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKGNvbnRyb2xBdHRyaWJ1dGUsIGNvbnRyb2xBdHRyaWJ1dGUgPT09ICdpbmVydCcgPyAnJyA6ICd0cnVlJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgaWYgKG1hcmspIHtcbiAgICBtYXJrZXJUYXJnZXRzLmZvckVhY2gobm9kZSA9PiB7XG4gICAgICBjb25zdCBtYXJrZXJWYWx1ZSA9IChtYXJrZXJDb3VudGVyTWFwLmdldChub2RlKSB8fCAwKSArIDE7XG4gICAgICBtYXJrZXJDb3VudGVyTWFwLnNldChub2RlLCBtYXJrZXJWYWx1ZSk7XG4gICAgICBtYXJrZWRFbGVtZW50cy5wdXNoKG5vZGUpO1xuICAgICAgaWYgKG1hcmtlclZhbHVlID09PSAxKSB7XG4gICAgICAgIG5vZGUuc2V0QXR0cmlidXRlKG1hcmtlck5hbWUsICcnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBsb2NrQ291bnQgKz0gMTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBpZiAoY291bnRlck1hcCkge1xuICAgICAgaGlkZGVuRWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3QgY3VycmVudENvdW50ZXJWYWx1ZSA9IGNvdW50ZXJNYXAuZ2V0KGVsZW1lbnQpIHx8IDA7XG4gICAgICAgIGNvbnN0IGNvdW50ZXJWYWx1ZSA9IGN1cnJlbnRDb3VudGVyVmFsdWUgLSAxO1xuICAgICAgICBjb3VudGVyTWFwLnNldChlbGVtZW50LCBjb3VudGVyVmFsdWUpO1xuICAgICAgICBpZiAoIWNvdW50ZXJWYWx1ZSkge1xuICAgICAgICAgIGlmICghdW5jb250cm9sbGVkRWxlbWVudHNTZXQ/LmhhcyhlbGVtZW50KSAmJiBjb250cm9sQXR0cmlidXRlKSB7XG4gICAgICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShjb250cm9sQXR0cmlidXRlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdW5jb250cm9sbGVkRWxlbWVudHNTZXQ/LmRlbGV0ZShlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmIChtYXJrKSB7XG4gICAgICBtYXJrZWRFbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBjb25zdCBtYXJrZXJWYWx1ZSA9IChtYXJrZXJDb3VudGVyTWFwLmdldChlbGVtZW50KSB8fCAwKSAtIDE7XG4gICAgICAgIG1hcmtlckNvdW50ZXJNYXAuc2V0KGVsZW1lbnQsIG1hcmtlclZhbHVlKTtcbiAgICAgICAgaWYgKCFtYXJrZXJWYWx1ZSkge1xuICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG1hcmtlck5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgbG9ja0NvdW50IC09IDE7XG4gICAgaWYgKCFsb2NrQ291bnQpIHtcbiAgICAgIGNvdW50ZXJzLmluZXJ0ID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgIGNvdW50ZXJzWydhcmlhLWhpZGRlbiddID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgIHVuY29udHJvbGxlZEVsZW1lbnRzU2V0cy5pbmVydCA9IG5ldyBXZWFrU2V0KCk7XG4gICAgICB1bmNvbnRyb2xsZWRFbGVtZW50c1NldHNbJ2FyaWEtaGlkZGVuJ10gPSBuZXcgV2Vha1NldCgpO1xuICAgICAgbWFya2VyQ291bnRlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgfVxuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1hcmtPdGhlcnMoYXZvaWRFbGVtZW50cywgb3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBhcmlhSGlkZGVuID0gZmFsc2UsXG4gICAgaW5lcnQgPSBmYWxzZSxcbiAgICBtYXJrID0gdHJ1ZSxcbiAgICBtYXJrZXJJZ25vcmVFbGVtZW50cyA9IFtdXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBib2R5ID0gb3duZXJEb2N1bWVudChhdm9pZEVsZW1lbnRzWzBdKS5ib2R5O1xuICByZXR1cm4gYXBwbHlBdHRyaWJ1dGVUb090aGVycyhhdm9pZEVsZW1lbnRzLCBib2R5LCBhcmlhSGlkZGVuLCBpbmVydCwge1xuICAgIG1hcmssXG4gICAgbWFya2VySWdub3JlRWxlbWVudHNcbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/markOthers.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/nodes.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/utils/nodes.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((__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 */ getDeepestNode: () => (/* binding */ getDeepestNode),\n/* harmony export */ getNodeAncestors: () => (/* binding */ getNodeAncestors),\n/* harmony export */ getNodeChildren: () => (/* binding */ getNodeChildren)\n/* harmony export */ });\n/* eslint-disable @typescript-eslint/no-loop-func */\n\nfunction getNodeChildren(nodes, id, onlyOpenChildren = true) {\n const directChildren = nodes.filter(node => node.parentId === id);\n return directChildren.flatMap(child => [...(!onlyOpenChildren || child.context?.open ? [child] : []), ...getNodeChildren(nodes, child.id, onlyOpenChildren)]);\n}\nfunction getDeepestNode(nodes, id) {\n let deepestNodeId;\n let maxDepth = -1;\n function findDeepest(nodeId, depth) {\n if (depth > maxDepth) {\n deepestNodeId = nodeId;\n maxDepth = depth;\n }\n const children = getNodeChildren(nodes, nodeId);\n children.forEach(child => {\n findDeepest(child.id, depth + 1);\n });\n }\n findDeepest(id, 0);\n return nodes.find(node => node.id === deepestNodeId);\n}\nfunction getNodeAncestors(nodes, id) {\n let allAncestors = [];\n let currentParentId = nodes.find(node => node.id === id)?.parentId;\n while (currentParentId) {\n const currentNode = nodes.find(node => node.id === currentParentId);\n currentParentId = currentNode?.parentId;\n if (currentNode) {\n allAncestors = allAncestors.concat(currentNode);\n }\n }\n return allAncestors;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvdXRpbHMvbm9kZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9mbG9hdGluZy11aS1yZWFjdC91dGlscy9ub2Rlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbG9vcC1mdW5jICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXROb2RlQ2hpbGRyZW4obm9kZXMsIGlkLCBvbmx5T3BlbkNoaWxkcmVuID0gdHJ1ZSkge1xuICBjb25zdCBkaXJlY3RDaGlsZHJlbiA9IG5vZGVzLmZpbHRlcihub2RlID0+IG5vZGUucGFyZW50SWQgPT09IGlkKTtcbiAgcmV0dXJuIGRpcmVjdENoaWxkcmVuLmZsYXRNYXAoY2hpbGQgPT4gWy4uLighb25seU9wZW5DaGlsZHJlbiB8fCBjaGlsZC5jb250ZXh0Py5vcGVuID8gW2NoaWxkXSA6IFtdKSwgLi4uZ2V0Tm9kZUNoaWxkcmVuKG5vZGVzLCBjaGlsZC5pZCwgb25seU9wZW5DaGlsZHJlbildKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWVwZXN0Tm9kZShub2RlcywgaWQpIHtcbiAgbGV0IGRlZXBlc3ROb2RlSWQ7XG4gIGxldCBtYXhEZXB0aCA9IC0xO1xuICBmdW5jdGlvbiBmaW5kRGVlcGVzdChub2RlSWQsIGRlcHRoKSB7XG4gICAgaWYgKGRlcHRoID4gbWF4RGVwdGgpIHtcbiAgICAgIGRlZXBlc3ROb2RlSWQgPSBub2RlSWQ7XG4gICAgICBtYXhEZXB0aCA9IGRlcHRoO1xuICAgIH1cbiAgICBjb25zdCBjaGlsZHJlbiA9IGdldE5vZGVDaGlsZHJlbihub2Rlcywgbm9kZUlkKTtcbiAgICBjaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGZpbmREZWVwZXN0KGNoaWxkLmlkLCBkZXB0aCArIDEpO1xuICAgIH0pO1xuICB9XG4gIGZpbmREZWVwZXN0KGlkLCAwKTtcbiAgcmV0dXJuIG5vZGVzLmZpbmQobm9kZSA9PiBub2RlLmlkID09PSBkZWVwZXN0Tm9kZUlkKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROb2RlQW5jZXN0b3JzKG5vZGVzLCBpZCkge1xuICBsZXQgYWxsQW5jZXN0b3JzID0gW107XG4gIGxldCBjdXJyZW50UGFyZW50SWQgPSBub2Rlcy5maW5kKG5vZGUgPT4gbm9kZS5pZCA9PT0gaWQpPy5wYXJlbnRJZDtcbiAgd2hpbGUgKGN1cnJlbnRQYXJlbnRJZCkge1xuICAgIGNvbnN0IGN1cnJlbnROb2RlID0gbm9kZXMuZmluZChub2RlID0+IG5vZGUuaWQgPT09IGN1cnJlbnRQYXJlbnRJZCk7XG4gICAgY3VycmVudFBhcmVudElkID0gY3VycmVudE5vZGU/LnBhcmVudElkO1xuICAgIGlmIChjdXJyZW50Tm9kZSkge1xuICAgICAgYWxsQW5jZXN0b3JzID0gYWxsQW5jZXN0b3JzLmNvbmNhdChjdXJyZW50Tm9kZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBhbGxBbmNlc3RvcnM7XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/nodes.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/tabbable.js":
|
||
/*!*****************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/floating-ui-react/utils/tabbable.js ***!
|
||
\*****************************************************************************/
|
||
/***/ ((__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 */ disableFocusInside: () => (/* binding */ disableFocusInside),\n/* harmony export */ enableFocusInside: () => (/* binding */ enableFocusInside),\n/* harmony export */ focusable: () => (/* binding */ focusable),\n/* harmony export */ getNextTabbable: () => (/* binding */ getNextTabbable),\n/* harmony export */ getPreviousTabbable: () => (/* binding */ getPreviousTabbable),\n/* harmony export */ getTabbableAfterElement: () => (/* binding */ getTabbableAfterElement),\n/* harmony export */ getTabbableBeforeElement: () => (/* binding */ getTabbableBeforeElement),\n/* harmony export */ isOutsideEvent: () => (/* binding */ isOutsideEvent),\n/* harmony export */ isTabbable: () => (/* binding */ isTabbable),\n/* harmony export */ tabbable: () => (/* binding */ tabbable)\n/* harmony export */ });\n/* harmony import */ var _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @floating-ui/utils/dom */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\");\n/* harmony import */ var _base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @base-ui/utils/owner */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/owner.js\");\n/* harmony import */ var _element_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./element.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/shadowDom.js\");\n/* harmony import */ var _composite_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./composite.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/composite.js\");\n\n\n\n\nconst CANDIDATE_SELECTOR = 'a[href],button,input,select,textarea,summary,details,iframe,object,embed,[tabindex],[contenteditable]:not([contenteditable=\"false\"]),audio[controls],video[controls]';\nfunction getParentElement(element) {\n const assignedSlot = element.assignedSlot;\n if (assignedSlot) {\n return assignedSlot;\n }\n if (element.parentElement) {\n return element.parentElement;\n }\n const rootNode = element.getRootNode();\n return (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(rootNode) ? rootNode.host : null;\n}\nfunction getDetailsSummary(details) {\n for (const child of Array.from(details.children)) {\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeName)(child) === 'summary') {\n return child;\n }\n }\n return null;\n}\nfunction isWithinOpenDetailsSummary(element, details) {\n const summary = getDetailsSummary(details);\n return !!summary && (element === summary || (0,_element_js__WEBPACK_IMPORTED_MODULE_1__.contains)(summary, element));\n}\nfunction isFocusableCandidate(element) {\n const nodeName = element ? (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeName)(element) : '';\n return element != null && element.matches(CANDIDATE_SELECTOR) && (nodeName !== 'summary' || element.parentElement != null && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeName)(element.parentElement) === 'details' && getDetailsSummary(element.parentElement) === element) && (nodeName !== 'details' || getDetailsSummary(element) == null) && (nodeName !== 'input' || element.type !== 'hidden');\n}\nfunction isFocusableElement(element) {\n if (!isFocusableCandidate(element) || !element.isConnected || element.matches(':disabled')) {\n return false;\n }\n for (let current = element; current; current = getParentElement(current)) {\n const isAncestor = current !== element;\n const isSlot = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeName)(current) === 'slot';\n if (current.hasAttribute('inert')) {\n return false;\n }\n if (isAncestor && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeName)(current) === 'details' && !current.open && !isWithinOpenDetailsSummary(element, current) || current.hasAttribute('hidden') || !isSlot && !isVisibleInTabbableTree(current, isAncestor)) {\n return false;\n }\n }\n return true;\n}\nfunction isVisibleInTabbableTree(element, isAncestor) {\n const styles = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getComputedStyle)(element);\n if (!isAncestor) {\n return (0,_composite_js__WEBPACK_IMPORTED_MODULE_2__.isElementVisible)(element, styles);\n }\n return styles.display !== 'none';\n}\nfunction getTabIndex(element) {\n const tabIndex = element.tabIndex;\n if (tabIndex < 0) {\n const nodeName = (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeName)(element);\n if (nodeName === 'details' || nodeName === 'audio' || nodeName === 'video' || (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(element) && element.isContentEditable) {\n return 0;\n }\n }\n return tabIndex;\n}\nfunction getNamedRadioInput(element) {\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeName)(element) !== 'input') {\n return null;\n }\n const input = element;\n return input.type === 'radio' && input.name !== '' ? input : null;\n}\nfunction isTabbableRadio(element, candidates) {\n const input = getNamedRadioInput(element);\n if (!input) {\n return true;\n }\n const checkedRadio = candidates.find(candidate => {\n const radio = getNamedRadioInput(candidate);\n return radio?.name === input.name && radio.form === input.form && radio.checked;\n });\n if (checkedRadio) {\n return checkedRadio === input;\n }\n return candidates.find(candidate => {\n const radio = getNamedRadioInput(candidate);\n return radio?.name === input.name && radio.form === input.form;\n }) === input;\n}\nfunction getComposedChildren(container) {\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(container) && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getNodeName)(container) === 'slot') {\n const assignedElements = container.assignedElements({\n flatten: true\n });\n if (assignedElements.length > 0) {\n return assignedElements;\n }\n }\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(container) && container.shadowRoot) {\n return Array.from(container.shadowRoot.children);\n }\n return Array.from(container.children);\n}\nfunction appendCandidates(container, list) {\n getComposedChildren(container).forEach(child => {\n if (isFocusableCandidate(child)) {\n list.push(child);\n }\n appendCandidates(child, list);\n });\n}\nfunction appendMatchingElements(container, selector, list) {\n getComposedChildren(container).forEach(child => {\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isHTMLElement)(child) && child.matches(selector)) {\n list.push(child);\n }\n appendMatchingElements(child, selector, list);\n });\n}\nfunction isTabbable(element) {\n return isFocusableElement(element) && getTabIndex(element) >= 0;\n}\nfunction focusable(container) {\n const candidates = [];\n appendCandidates(container, candidates);\n return candidates.filter(isFocusableElement);\n}\nfunction tabbable(container) {\n const candidates = focusable(container);\n return candidates.filter(element => getTabIndex(element) >= 0 && isTabbableRadio(element, candidates));\n}\nfunction getTabbableIn(container, dir) {\n const list = tabbable(container);\n const len = list.length;\n if (len === 0) {\n return undefined;\n }\n const active = (0,_element_js__WEBPACK_IMPORTED_MODULE_1__.activeElement)((0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_3__.ownerDocument)(container));\n const index = list.indexOf(active);\n // eslint-disable-next-line no-nested-ternary\n const nextIndex = index === -1 ? dir === 1 ? 0 : len - 1 : index + dir;\n return list[nextIndex];\n}\nfunction getNextTabbable(referenceElement) {\n return getTabbableIn((0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_3__.ownerDocument)(referenceElement).body, 1) || referenceElement;\n}\nfunction getPreviousTabbable(referenceElement) {\n return getTabbableIn((0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_3__.ownerDocument)(referenceElement).body, -1) || referenceElement;\n}\nfunction getTabbableNearElement(referenceElement, dir) {\n if (!referenceElement) {\n return null;\n }\n const list = tabbable((0,_base_ui_utils_owner__WEBPACK_IMPORTED_MODULE_3__.ownerDocument)(referenceElement).body);\n const elementCount = list.length;\n if (elementCount === 0) {\n return null;\n }\n const index = list.indexOf(referenceElement);\n if (index === -1) {\n return null;\n }\n const nextIndex = (index + dir + elementCount) % elementCount;\n return list[nextIndex];\n}\nfunction getTabbableAfterElement(referenceElement) {\n return getTabbableNearElement(referenceElement, 1);\n}\nfunction getTabbableBeforeElement(referenceElement) {\n return getTabbableNearElement(referenceElement, -1);\n}\nfunction isOutsideEvent(event, container) {\n const containerElement = container || event.currentTarget;\n const relatedTarget = event.relatedTarget;\n return !relatedTarget || !(0,_element_js__WEBPACK_IMPORTED_MODULE_1__.contains)(containerElement, relatedTarget);\n}\nfunction disableFocusInside(container) {\n const tabbableElements = tabbable(container);\n tabbableElements.forEach(element => {\n element.dataset.tabindex = element.getAttribute('tabindex') || '';\n element.setAttribute('tabindex', '-1');\n });\n}\nfunction enableFocusInside(container) {\n const elements = [];\n appendMatchingElements(container, '[data-tabindex]', elements);\n elements.forEach(element => {\n const tabindex = element.dataset.tabindex;\n delete element.dataset.tabindex;\n if (tabindex) {\n element.setAttribute('tabindex', tabindex);\n } else {\n element.removeAttribute('tabindex');\n }\n });\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vZmxvYXRpbmctdWktcmVhY3QvdXRpbHMvdGFiYmFibGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBb0c7QUFDL0M7QUFDRTtBQUNMO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxvRUFBWTtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxRQUFRLG1FQUFXO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLHFEQUFRO0FBQ3REO0FBQ0E7QUFDQSw2QkFBNkIsbUVBQVc7QUFDeEMsK0hBQStILG1FQUFXO0FBQzFJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsU0FBUztBQUN2QztBQUNBLG1CQUFtQixtRUFBVztBQUM5QjtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsbUVBQVc7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHdFQUFnQjtBQUNqQztBQUNBLFdBQVcsK0RBQWdCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixtRUFBVztBQUNoQyxrRkFBa0YscUVBQWE7QUFDL0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxtRUFBVztBQUNqQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLE1BQU0scUVBQWEsZUFBZSxtRUFBVztBQUM3QztBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTSxxRUFBYTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQSxRQUFRLHFFQUFhO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQiwwREFBYSxDQUFDLG1FQUFhO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQLHVCQUF1QixtRUFBYTtBQUNwQztBQUNPO0FBQ1AsdUJBQXVCLG1FQUFhO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUVBQWE7QUFDckM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLDRCQUE0QixxREFBUTtBQUNwQztBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQSxHQUFHO0FBQ0giLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2Zsb2F0aW5nLXVpLXJlYWN0L3V0aWxzL3RhYmJhYmxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGdldE5vZGVOYW1lLCBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcbmltcG9ydCB7IG93bmVyRG9jdW1lbnQgfSBmcm9tICdAYmFzZS11aS91dGlscy9vd25lcic7XG5pbXBvcnQgeyBhY3RpdmVFbGVtZW50LCBjb250YWlucyB9IGZyb20gXCIuL2VsZW1lbnQuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudFZpc2libGUgfSBmcm9tIFwiLi9jb21wb3NpdGUuanNcIjtcbmNvbnN0IENBTkRJREFURV9TRUxFQ1RPUiA9ICdhW2hyZWZdLGJ1dHRvbixpbnB1dCxzZWxlY3QsdGV4dGFyZWEsc3VtbWFyeSxkZXRhaWxzLGlmcmFtZSxvYmplY3QsZW1iZWQsW3RhYmluZGV4XSxbY29udGVudGVkaXRhYmxlXTpub3QoW2NvbnRlbnRlZGl0YWJsZT1cImZhbHNlXCJdKSxhdWRpb1tjb250cm9sc10sdmlkZW9bY29udHJvbHNdJztcbmZ1bmN0aW9uIGdldFBhcmVudEVsZW1lbnQoZWxlbWVudCkge1xuICBjb25zdCBhc3NpZ25lZFNsb3QgPSBlbGVtZW50LmFzc2lnbmVkU2xvdDtcbiAgaWYgKGFzc2lnbmVkU2xvdCkge1xuICAgIHJldHVybiBhc3NpZ25lZFNsb3Q7XG4gIH1cbiAgaWYgKGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cbiAgY29uc3Qgcm9vdE5vZGUgPSBlbGVtZW50LmdldFJvb3ROb2RlKCk7XG4gIHJldHVybiBpc1NoYWRvd1Jvb3Qocm9vdE5vZGUpID8gcm9vdE5vZGUuaG9zdCA6IG51bGw7XG59XG5mdW5jdGlvbiBnZXREZXRhaWxzU3VtbWFyeShkZXRhaWxzKSB7XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgQXJyYXkuZnJvbShkZXRhaWxzLmNoaWxkcmVuKSkge1xuICAgIGlmIChnZXROb2RlTmFtZShjaGlsZCkgPT09ICdzdW1tYXJ5Jykge1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2l0aGluT3BlbkRldGFpbHNTdW1tYXJ5KGVsZW1lbnQsIGRldGFpbHMpIHtcbiAgY29uc3Qgc3VtbWFyeSA9IGdldERldGFpbHNTdW1tYXJ5KGRldGFpbHMpO1xuICByZXR1cm4gISFzdW1tYXJ5ICYmIChlbGVtZW50ID09PSBzdW1tYXJ5IHx8IGNvbnRhaW5zKHN1bW1hcnksIGVsZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGlzRm9jdXNhYmxlQ2FuZGlkYXRlKGVsZW1lbnQpIHtcbiAgY29uc3Qgbm9kZU5hbWUgPSBlbGVtZW50ID8gZ2V0Tm9kZU5hbWUoZWxlbWVudCkgOiAnJztcbiAgcmV0dXJuIGVsZW1lbnQgIT0gbnVsbCAmJiBlbGVtZW50Lm1hdGNoZXMoQ0FORElEQVRFX1NFTEVDVE9SKSAmJiAobm9kZU5hbWUgIT09ICdzdW1tYXJ5JyB8fCBlbGVtZW50LnBhcmVudEVsZW1lbnQgIT0gbnVsbCAmJiBnZXROb2RlTmFtZShlbGVtZW50LnBhcmVudEVsZW1lbnQpID09PSAnZGV0YWlscycgJiYgZ2V0RGV0YWlsc1N1bW1hcnkoZWxlbWVudC5wYXJlbnRFbGVtZW50KSA9PT0gZWxlbWVudCkgJiYgKG5vZGVOYW1lICE9PSAnZGV0YWlscycgfHwgZ2V0RGV0YWlsc1N1bW1hcnkoZWxlbWVudCkgPT0gbnVsbCkgJiYgKG5vZGVOYW1lICE9PSAnaW5wdXQnIHx8IGVsZW1lbnQudHlwZSAhPT0gJ2hpZGRlbicpO1xufVxuZnVuY3Rpb24gaXNGb2N1c2FibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFpc0ZvY3VzYWJsZUNhbmRpZGF0ZShlbGVtZW50KSB8fCAhZWxlbWVudC5pc0Nvbm5lY3RlZCB8fCBlbGVtZW50Lm1hdGNoZXMoJzpkaXNhYmxlZCcpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAobGV0IGN1cnJlbnQgPSBlbGVtZW50OyBjdXJyZW50OyBjdXJyZW50ID0gZ2V0UGFyZW50RWxlbWVudChjdXJyZW50KSkge1xuICAgIGNvbnN0IGlzQW5jZXN0b3IgPSBjdXJyZW50ICE9PSBlbGVtZW50O1xuICAgIGNvbnN0IGlzU2xvdCA9IGdldE5vZGVOYW1lKGN1cnJlbnQpID09PSAnc2xvdCc7XG4gICAgaWYgKGN1cnJlbnQuaGFzQXR0cmlidXRlKCdpbmVydCcpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChpc0FuY2VzdG9yICYmIGdldE5vZGVOYW1lKGN1cnJlbnQpID09PSAnZGV0YWlscycgJiYgIWN1cnJlbnQub3BlbiAmJiAhaXNXaXRoaW5PcGVuRGV0YWlsc1N1bW1hcnkoZWxlbWVudCwgY3VycmVudCkgfHwgY3VycmVudC5oYXNBdHRyaWJ1dGUoJ2hpZGRlbicpIHx8ICFpc1Nsb3QgJiYgIWlzVmlzaWJsZUluVGFiYmFibGVUcmVlKGN1cnJlbnQsIGlzQW5jZXN0b3IpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gaXNWaXNpYmxlSW5UYWJiYWJsZVRyZWUoZWxlbWVudCwgaXNBbmNlc3Rvcikge1xuICBjb25zdCBzdHlsZXMgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICBpZiAoIWlzQW5jZXN0b3IpIHtcbiAgICByZXR1cm4gaXNFbGVtZW50VmlzaWJsZShlbGVtZW50LCBzdHlsZXMpO1xuICB9XG4gIHJldHVybiBzdHlsZXMuZGlzcGxheSAhPT0gJ25vbmUnO1xufVxuZnVuY3Rpb24gZ2V0VGFiSW5kZXgoZWxlbWVudCkge1xuICBjb25zdCB0YWJJbmRleCA9IGVsZW1lbnQudGFiSW5kZXg7XG4gIGlmICh0YWJJbmRleCA8IDApIHtcbiAgICBjb25zdCBub2RlTmFtZSA9IGdldE5vZGVOYW1lKGVsZW1lbnQpO1xuICAgIGlmIChub2RlTmFtZSA9PT0gJ2RldGFpbHMnIHx8IG5vZGVOYW1lID09PSAnYXVkaW8nIHx8IG5vZGVOYW1lID09PSAndmlkZW8nIHx8IGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgJiYgZWxlbWVudC5pc0NvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICB9XG4gIHJldHVybiB0YWJJbmRleDtcbn1cbmZ1bmN0aW9uIGdldE5hbWVkUmFkaW9JbnB1dChlbGVtZW50KSB7XG4gIGlmIChnZXROb2RlTmFtZShlbGVtZW50KSAhPT0gJ2lucHV0Jykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGlucHV0ID0gZWxlbWVudDtcbiAgcmV0dXJuIGlucHV0LnR5cGUgPT09ICdyYWRpbycgJiYgaW5wdXQubmFtZSAhPT0gJycgPyBpbnB1dCA6IG51bGw7XG59XG5mdW5jdGlvbiBpc1RhYmJhYmxlUmFkaW8oZWxlbWVudCwgY2FuZGlkYXRlcykge1xuICBjb25zdCBpbnB1dCA9IGdldE5hbWVkUmFkaW9JbnB1dChlbGVtZW50KTtcbiAgaWYgKCFpbnB1dCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGNoZWNrZWRSYWRpbyA9IGNhbmRpZGF0ZXMuZmluZChjYW5kaWRhdGUgPT4ge1xuICAgIGNvbnN0IHJhZGlvID0gZ2V0TmFtZWRSYWRpb0lucHV0KGNhbmRpZGF0ZSk7XG4gICAgcmV0dXJuIHJhZGlvPy5uYW1lID09PSBpbnB1dC5uYW1lICYmIHJhZGlvLmZvcm0gPT09IGlucHV0LmZvcm0gJiYgcmFkaW8uY2hlY2tlZDtcbiAgfSk7XG4gIGlmIChjaGVja2VkUmFkaW8pIHtcbiAgICByZXR1cm4gY2hlY2tlZFJhZGlvID09PSBpbnB1dDtcbiAgfVxuICByZXR1cm4gY2FuZGlkYXRlcy5maW5kKGNhbmRpZGF0ZSA9PiB7XG4gICAgY29uc3QgcmFkaW8gPSBnZXROYW1lZFJhZGlvSW5wdXQoY2FuZGlkYXRlKTtcbiAgICByZXR1cm4gcmFkaW8/Lm5hbWUgPT09IGlucHV0Lm5hbWUgJiYgcmFkaW8uZm9ybSA9PT0gaW5wdXQuZm9ybTtcbiAgfSkgPT09IGlucHV0O1xufVxuZnVuY3Rpb24gZ2V0Q29tcG9zZWRDaGlsZHJlbihjb250YWluZXIpIHtcbiAgaWYgKGlzSFRNTEVsZW1lbnQoY29udGFpbmVyKSAmJiBnZXROb2RlTmFtZShjb250YWluZXIpID09PSAnc2xvdCcpIHtcbiAgICBjb25zdCBhc3NpZ25lZEVsZW1lbnRzID0gY29udGFpbmVyLmFzc2lnbmVkRWxlbWVudHMoe1xuICAgICAgZmxhdHRlbjogdHJ1ZVxuICAgIH0pO1xuICAgIGlmIChhc3NpZ25lZEVsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBhc3NpZ25lZEVsZW1lbnRzO1xuICAgIH1cbiAgfVxuICBpZiAoaXNIVE1MRWxlbWVudChjb250YWluZXIpICYmIGNvbnRhaW5lci5zaGFkb3dSb290KSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oY29udGFpbmVyLnNoYWRvd1Jvb3QuY2hpbGRyZW4pO1xuICB9XG4gIHJldHVybiBBcnJheS5mcm9tKGNvbnRhaW5lci5jaGlsZHJlbik7XG59XG5mdW5jdGlvbiBhcHBlbmRDYW5kaWRhdGVzKGNvbnRhaW5lciwgbGlzdCkge1xuICBnZXRDb21wb3NlZENoaWxkcmVuKGNvbnRhaW5lcikuZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgaWYgKGlzRm9jdXNhYmxlQ2FuZGlkYXRlKGNoaWxkKSkge1xuICAgICAgbGlzdC5wdXNoKGNoaWxkKTtcbiAgICB9XG4gICAgYXBwZW5kQ2FuZGlkYXRlcyhjaGlsZCwgbGlzdCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gYXBwZW5kTWF0Y2hpbmdFbGVtZW50cyhjb250YWluZXIsIHNlbGVjdG9yLCBsaXN0KSB7XG4gIGdldENvbXBvc2VkQ2hpbGRyZW4oY29udGFpbmVyKS5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICBpZiAoaXNIVE1MRWxlbWVudChjaGlsZCkgJiYgY2hpbGQubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgIGxpc3QucHVzaChjaGlsZCk7XG4gICAgfVxuICAgIGFwcGVuZE1hdGNoaW5nRWxlbWVudHMoY2hpbGQsIHNlbGVjdG9yLCBsaXN0KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNUYWJiYWJsZShlbGVtZW50KSB7XG4gIHJldHVybiBpc0ZvY3VzYWJsZUVsZW1lbnQoZWxlbWVudCkgJiYgZ2V0VGFiSW5kZXgoZWxlbWVudCkgPj0gMDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmb2N1c2FibGUoY29udGFpbmVyKSB7XG4gIGNvbnN0IGNhbmRpZGF0ZXMgPSBbXTtcbiAgYXBwZW5kQ2FuZGlkYXRlcyhjb250YWluZXIsIGNhbmRpZGF0ZXMpO1xuICByZXR1cm4gY2FuZGlkYXRlcy5maWx0ZXIoaXNGb2N1c2FibGVFbGVtZW50KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0YWJiYWJsZShjb250YWluZXIpIHtcbiAgY29uc3QgY2FuZGlkYXRlcyA9IGZvY3VzYWJsZShjb250YWluZXIpO1xuICByZXR1cm4gY2FuZGlkYXRlcy5maWx0ZXIoZWxlbWVudCA9PiBnZXRUYWJJbmRleChlbGVtZW50KSA+PSAwICYmIGlzVGFiYmFibGVSYWRpbyhlbGVtZW50LCBjYW5kaWRhdGVzKSk7XG59XG5mdW5jdGlvbiBnZXRUYWJiYWJsZUluKGNvbnRhaW5lciwgZGlyKSB7XG4gIGNvbnN0IGxpc3QgPSB0YWJiYWJsZShjb250YWluZXIpO1xuICBjb25zdCBsZW4gPSBsaXN0Lmxlbmd0aDtcbiAgaWYgKGxlbiA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgYWN0aXZlID0gYWN0aXZlRWxlbWVudChvd25lckRvY3VtZW50KGNvbnRhaW5lcikpO1xuICBjb25zdCBpbmRleCA9IGxpc3QuaW5kZXhPZihhY3RpdmUpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmVzdGVkLXRlcm5hcnlcbiAgY29uc3QgbmV4dEluZGV4ID0gaW5kZXggPT09IC0xID8gZGlyID09PSAxID8gMCA6IGxlbiAtIDEgOiBpbmRleCArIGRpcjtcbiAgcmV0dXJuIGxpc3RbbmV4dEluZGV4XTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0VGFiYmFibGUocmVmZXJlbmNlRWxlbWVudCkge1xuICByZXR1cm4gZ2V0VGFiYmFibGVJbihvd25lckRvY3VtZW50KHJlZmVyZW5jZUVsZW1lbnQpLmJvZHksIDEpIHx8IHJlZmVyZW5jZUVsZW1lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJldmlvdXNUYWJiYWJsZShyZWZlcmVuY2VFbGVtZW50KSB7XG4gIHJldHVybiBnZXRUYWJiYWJsZUluKG93bmVyRG9jdW1lbnQocmVmZXJlbmNlRWxlbWVudCkuYm9keSwgLTEpIHx8IHJlZmVyZW5jZUVsZW1lbnQ7XG59XG5mdW5jdGlvbiBnZXRUYWJiYWJsZU5lYXJFbGVtZW50KHJlZmVyZW5jZUVsZW1lbnQsIGRpcikge1xuICBpZiAoIXJlZmVyZW5jZUVsZW1lbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBsaXN0ID0gdGFiYmFibGUob3duZXJEb2N1bWVudChyZWZlcmVuY2VFbGVtZW50KS5ib2R5KTtcbiAgY29uc3QgZWxlbWVudENvdW50ID0gbGlzdC5sZW5ndGg7XG4gIGlmIChlbGVtZW50Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCBpbmRleCA9IGxpc3QuaW5kZXhPZihyZWZlcmVuY2VFbGVtZW50KTtcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IG5leHRJbmRleCA9IChpbmRleCArIGRpciArIGVsZW1lbnRDb3VudCkgJSBlbGVtZW50Q291bnQ7XG4gIHJldHVybiBsaXN0W25leHRJbmRleF07XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFiYmFibGVBZnRlckVsZW1lbnQocmVmZXJlbmNlRWxlbWVudCkge1xuICByZXR1cm4gZ2V0VGFiYmFibGVOZWFyRWxlbWVudChyZWZlcmVuY2VFbGVtZW50LCAxKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJiYWJsZUJlZm9yZUVsZW1lbnQocmVmZXJlbmNlRWxlbWVudCkge1xuICByZXR1cm4gZ2V0VGFiYmFibGVOZWFyRWxlbWVudChyZWZlcmVuY2VFbGVtZW50LCAtMSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNPdXRzaWRlRXZlbnQoZXZlbnQsIGNvbnRhaW5lcikge1xuICBjb25zdCBjb250YWluZXJFbGVtZW50ID0gY29udGFpbmVyIHx8IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICByZXR1cm4gIXJlbGF0ZWRUYXJnZXQgfHwgIWNvbnRhaW5zKGNvbnRhaW5lckVsZW1lbnQsIHJlbGF0ZWRUYXJnZXQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGRpc2FibGVGb2N1c0luc2lkZShjb250YWluZXIpIHtcbiAgY29uc3QgdGFiYmFibGVFbGVtZW50cyA9IHRhYmJhYmxlKGNvbnRhaW5lcik7XG4gIHRhYmJhYmxlRWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICBlbGVtZW50LmRhdGFzZXQudGFiaW5kZXggPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgndGFiaW5kZXgnKSB8fCAnJztcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlRm9jdXNJbnNpZGUoY29udGFpbmVyKSB7XG4gIGNvbnN0IGVsZW1lbnRzID0gW107XG4gIGFwcGVuZE1hdGNoaW5nRWxlbWVudHMoY29udGFpbmVyLCAnW2RhdGEtdGFiaW5kZXhdJywgZWxlbWVudHMpO1xuICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIGNvbnN0IHRhYmluZGV4ID0gZWxlbWVudC5kYXRhc2V0LnRhYmluZGV4O1xuICAgIGRlbGV0ZSBlbGVtZW50LmRhdGFzZXQudGFiaW5kZXg7XG4gICAgaWYgKHRhYmluZGV4KSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCB0YWJpbmRleCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgIH1cbiAgfSk7XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/tabbable.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/input/Input.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/input/Input.js ***!
|
||
\********************************************************/
|
||
/***/ ((__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 */ Input: () => (/* binding */ Input)\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 _field_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../field/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/field/control/FieldControl.js\");\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__ Input auto */ \n\n/**\n * A native input element that automatically works with [Field](https://base-ui.com/react/components/field).\n * Renders an `<input>` element.\n *\n * Documentation: [Base UI Input](https://base-ui.com/react/components/input)\n */ \nconst Input = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c = function Input(props, forwardedRef) {\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_field_index_js__WEBPACK_IMPORTED_MODULE_2__.FieldControl, {\n ref: forwardedRef,\n ...props\n });\n});\n_c1 = Input;\nif (true) Input.displayName = \"Input\";\nvar _c, _c1;\n$RefreshReg$(_c, \"Input$React.forwardRef\");\n$RefreshReg$(_c1, \"Input\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW5wdXQvSW5wdXQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OzsyREFFK0I7QUFDVztBQUUxQzs7Ozs7Q0FLQyxHQUMrQztBQUN6QyxNQUFNSSxRQUFRLFdBQVcsR0FBRUosNkNBQWdCLE1BQUMsU0FBU0ksTUFBTUUsS0FBSyxFQUFFQyxZQUFZO0lBQ25GLE9BQU8sV0FBVyxHQUFFSixzREFBSUEsQ0FBQ0YseURBQWEsRUFBRTtRQUN0Q1EsS0FBS0Y7UUFDTCxHQUFHRCxLQUFLO0lBQ1Y7QUFDRixHQUFHOztBQUNILElBQUlJLElBQXFDLEVBQUVOLE1BQU1PLFdBQVcsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW5wdXQvSW5wdXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBGaWVsZCB9IGZyb20gXCIuLi9maWVsZC9pbmRleC5qc1wiO1xuXG4vKipcbiAqIEEgbmF0aXZlIGlucHV0IGVsZW1lbnQgdGhhdCBhdXRvbWF0aWNhbGx5IHdvcmtzIHdpdGggW0ZpZWxkXShodHRwczovL2Jhc2UtdWkuY29tL3JlYWN0L2NvbXBvbmVudHMvZmllbGQpLlxuICogUmVuZGVycyBhbiBgPGlucHV0PmAgZWxlbWVudC5cbiAqXG4gKiBEb2N1bWVudGF0aW9uOiBbQmFzZSBVSSBJbnB1dF0oaHR0cHM6Ly9iYXNlLXVpLmNvbS9yZWFjdC9jb21wb25lbnRzL2lucHV0KVxuICovXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGNvbnN0IElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gSW5wdXQocHJvcHMsIGZvcndhcmRlZFJlZikge1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRmllbGQuQ29udHJvbCwge1xuICAgIHJlZjogZm9yd2FyZGVkUmVmLFxuICAgIC4uLnByb3BzXG4gIH0pO1xufSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSBJbnB1dC5kaXNwbGF5TmFtZSA9IFwiSW5wdXRcIjsiXSwibmFtZXMiOlsiUmVhY3QiLCJGaWVsZCIsImpzeCIsIl9qc3giLCJJbnB1dCIsImZvcndhcmRSZWYiLCJwcm9wcyIsImZvcndhcmRlZFJlZiIsIkNvbnRyb2wiLCJyZWYiLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/input/Input.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/composite/composite.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/composite/composite.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((__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 */ ALL_KEYS: () => (/* binding */ ALL_KEYS),\n/* harmony export */ ALT: () => (/* binding */ ALT),\n/* harmony export */ ARROW_DOWN: () => (/* binding */ ARROW_DOWN),\n/* harmony export */ ARROW_KEYS: () => (/* binding */ ARROW_KEYS),\n/* harmony export */ ARROW_LEFT: () => (/* binding */ ARROW_LEFT),\n/* harmony export */ ARROW_RIGHT: () => (/* binding */ ARROW_RIGHT),\n/* harmony export */ ARROW_UP: () => (/* binding */ ARROW_UP),\n/* harmony export */ COMPOSITE_KEYS: () => (/* binding */ COMPOSITE_KEYS),\n/* harmony export */ CONTROL: () => (/* binding */ CONTROL),\n/* harmony export */ END: () => (/* binding */ END),\n/* harmony export */ HOME: () => (/* binding */ HOME),\n/* harmony export */ HORIZONTAL_KEYS: () => (/* binding */ HORIZONTAL_KEYS),\n/* harmony export */ HORIZONTAL_KEYS_WITH_EXTRA_KEYS: () => (/* binding */ HORIZONTAL_KEYS_WITH_EXTRA_KEYS),\n/* harmony export */ META: () => (/* binding */ META),\n/* harmony export */ MODIFIER_KEYS: () => (/* binding */ MODIFIER_KEYS),\n/* harmony export */ PAGE_DOWN: () => (/* binding */ PAGE_DOWN),\n/* harmony export */ PAGE_UP: () => (/* binding */ PAGE_UP),\n/* harmony export */ SHIFT: () => (/* binding */ SHIFT),\n/* harmony export */ VERTICAL_KEYS: () => (/* binding */ VERTICAL_KEYS),\n/* harmony export */ VERTICAL_KEYS_WITH_EXTRA_KEYS: () => (/* binding */ VERTICAL_KEYS_WITH_EXTRA_KEYS),\n/* harmony export */ createGridCellMap: () => (/* reexport safe */ _floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_1__.createGridCellMap),\n/* harmony export */ findNonDisabledListIndex: () => (/* reexport safe */ _floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_1__.findNonDisabledListIndex),\n/* harmony export */ getGridCellIndexOfCorner: () => (/* reexport safe */ _floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_1__.getGridCellIndexOfCorner),\n/* harmony export */ getGridCellIndices: () => (/* reexport safe */ _floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_1__.getGridCellIndices),\n/* harmony export */ getGridNavigatedIndex: () => (/* reexport safe */ _floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_1__.getGridNavigatedIndex),\n/* harmony export */ getMaxListIndex: () => (/* reexport safe */ _floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_1__.getMaxListIndex),\n/* harmony export */ getMinListIndex: () => (/* reexport safe */ _floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_1__.getMinListIndex),\n/* harmony export */ isIndexOutOfListBounds: () => (/* reexport safe */ _floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_1__.isIndexOutOfListBounds),\n/* harmony export */ isListIndexDisabled: () => (/* reexport safe */ _floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_1__.isListIndexDisabled),\n/* harmony export */ isNativeInput: () => (/* binding */ isNativeInput),\n/* harmony export */ scrollIntoViewIfNeeded: () => (/* binding */ scrollIntoViewIfNeeded),\n/* harmony export */ stopEvent: () => (/* reexport safe */ _floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_0__.stopEvent)\n/* harmony export */ });\n/* harmony import */ var _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @floating-ui/utils/dom */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\");\n/* harmony import */ var _floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../floating-ui-react/utils.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/event.js\");\n/* harmony import */ var _floating_ui_react_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../floating-ui-react/utils.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/composite.js\");\n\n\nconst ARROW_UP = 'ArrowUp';\nconst ARROW_DOWN = 'ArrowDown';\nconst ARROW_LEFT = 'ArrowLeft';\nconst ARROW_RIGHT = 'ArrowRight';\nconst HOME = 'Home';\nconst END = 'End';\nconst PAGE_UP = 'PageUp';\nconst PAGE_DOWN = 'PageDown';\nconst HORIZONTAL_KEYS = new Set([ARROW_LEFT, ARROW_RIGHT]);\nconst HORIZONTAL_KEYS_WITH_EXTRA_KEYS = new Set([ARROW_LEFT, ARROW_RIGHT, HOME, END]);\nconst VERTICAL_KEYS = new Set([ARROW_UP, ARROW_DOWN]);\nconst VERTICAL_KEYS_WITH_EXTRA_KEYS = new Set([ARROW_UP, ARROW_DOWN, HOME, END]);\nconst ARROW_KEYS = new Set([...HORIZONTAL_KEYS, ...VERTICAL_KEYS]);\nconst ALL_KEYS = new Set([...ARROW_KEYS, HOME, END]);\nconst COMPOSITE_KEYS = new Set([ARROW_UP, ARROW_DOWN, ARROW_LEFT, ARROW_RIGHT, HOME, END]);\nconst SHIFT = 'Shift';\nconst CONTROL = 'Control';\nconst ALT = 'Alt';\nconst META = 'Meta';\nconst MODIFIER_KEYS = new Set([SHIFT, CONTROL, ALT, META]);\nfunction isInputElement(element) {\n return (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(element) && element.tagName === 'INPUT';\n}\nfunction isNativeInput(element) {\n if (isInputElement(element) && element.selectionStart != null) {\n return true;\n }\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_2__.isHTMLElement)(element) && element.tagName === 'TEXTAREA') {\n return true;\n }\n return false;\n}\nfunction scrollIntoViewIfNeeded(scrollContainer, element, direction, orientation) {\n if (!scrollContainer || !element || !element.scrollTo) {\n return;\n }\n let targetX = scrollContainer.scrollLeft;\n let targetY = scrollContainer.scrollTop;\n const isOverflowingX = scrollContainer.clientWidth < scrollContainer.scrollWidth;\n const isOverflowingY = scrollContainer.clientHeight < scrollContainer.scrollHeight;\n if (isOverflowingX && orientation !== 'vertical') {\n const elementOffsetLeft = getOffset(scrollContainer, element, 'left');\n const containerStyles = getStyles(scrollContainer);\n const elementStyles = getStyles(element);\n if (direction === 'ltr') {\n if (elementOffsetLeft + element.offsetWidth + elementStyles.scrollMarginRight > scrollContainer.scrollLeft + scrollContainer.clientWidth - containerStyles.scrollPaddingRight) {\n // overflow to the right, scroll to align right edges\n targetX = elementOffsetLeft + element.offsetWidth + elementStyles.scrollMarginRight - scrollContainer.clientWidth + containerStyles.scrollPaddingRight;\n } else if (elementOffsetLeft - elementStyles.scrollMarginLeft < scrollContainer.scrollLeft + containerStyles.scrollPaddingLeft) {\n // overflow to the left, scroll to align left edges\n targetX = elementOffsetLeft - elementStyles.scrollMarginLeft - containerStyles.scrollPaddingLeft;\n }\n }\n if (direction === 'rtl') {\n if (elementOffsetLeft - elementStyles.scrollMarginRight < scrollContainer.scrollLeft + containerStyles.scrollPaddingLeft) {\n // overflow to the left, scroll to align left edges\n targetX = elementOffsetLeft - elementStyles.scrollMarginLeft - containerStyles.scrollPaddingLeft;\n } else if (elementOffsetLeft + element.offsetWidth + elementStyles.scrollMarginRight > scrollContainer.scrollLeft + scrollContainer.clientWidth - containerStyles.scrollPaddingRight) {\n // overflow to the right, scroll to align right edges\n targetX = elementOffsetLeft + element.offsetWidth + elementStyles.scrollMarginRight - scrollContainer.clientWidth + containerStyles.scrollPaddingRight;\n }\n }\n }\n if (isOverflowingY && orientation !== 'horizontal') {\n const elementOffsetTop = getOffset(scrollContainer, element, 'top');\n const containerStyles = getStyles(scrollContainer);\n const elementStyles = getStyles(element);\n if (elementOffsetTop - elementStyles.scrollMarginTop < scrollContainer.scrollTop + containerStyles.scrollPaddingTop) {\n // overflow upwards, align top edges\n targetY = elementOffsetTop - elementStyles.scrollMarginTop - containerStyles.scrollPaddingTop;\n } else if (elementOffsetTop + element.offsetHeight + elementStyles.scrollMarginBottom > scrollContainer.scrollTop + scrollContainer.clientHeight - containerStyles.scrollPaddingBottom) {\n // overflow downwards, align bottom edges\n targetY = elementOffsetTop + element.offsetHeight + elementStyles.scrollMarginBottom - scrollContainer.clientHeight + containerStyles.scrollPaddingBottom;\n }\n }\n scrollContainer.scrollTo({\n left: targetX,\n top: targetY,\n behavior: 'auto'\n });\n}\nfunction getOffset(ancestor, element, side) {\n const propName = side === 'left' ? 'offsetLeft' : 'offsetTop';\n let result = 0;\n while (element.offsetParent) {\n result += element[propName];\n if (element.offsetParent === ancestor) {\n break;\n }\n element = element.offsetParent;\n }\n return result;\n}\nfunction getStyles(element) {\n const styles = getComputedStyle(element);\n return {\n scrollMarginTop: parseFloat(styles.scrollMarginTop) || 0,\n scrollMarginRight: parseFloat(styles.scrollMarginRight) || 0,\n scrollMarginBottom: parseFloat(styles.scrollMarginBottom) || 0,\n scrollMarginLeft: parseFloat(styles.scrollMarginLeft) || 0,\n scrollPaddingTop: parseFloat(styles.scrollPaddingTop) || 0,\n scrollPaddingRight: parseFloat(styles.scrollPaddingRight) || 0,\n scrollPaddingBottom: parseFloat(styles.scrollPaddingBottom) || 0,\n scrollPaddingLeft: parseFloat(styles.scrollPaddingLeft) || 0\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL2NvbXBvc2l0ZS9jb21wb3NpdGUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBdUQ7QUFDdU07QUFDdlA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNQO0FBQ0EsU0FBUyxxRUFBYTtBQUN0QjtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsTUFBTSxxRUFBYTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL2NvbXBvc2l0ZS9jb21wb3NpdGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuZXhwb3J0IHsgc3RvcEV2ZW50LCBpc0luZGV4T3V0T2ZMaXN0Qm91bmRzLCBpc0xpc3RJbmRleERpc2FibGVkLCBjcmVhdGVHcmlkQ2VsbE1hcCwgZmluZE5vbkRpc2FibGVkTGlzdEluZGV4LCBnZXRHcmlkQ2VsbEluZGV4T2ZDb3JuZXIsIGdldEdyaWRDZWxsSW5kaWNlcywgZ2V0R3JpZE5hdmlnYXRlZEluZGV4LCBnZXRNYXhMaXN0SW5kZXgsIGdldE1pbkxpc3RJbmRleCB9IGZyb20gXCIuLi8uLi9mbG9hdGluZy11aS1yZWFjdC91dGlscy5qc1wiO1xuZXhwb3J0IGNvbnN0IEFSUk9XX1VQID0gJ0Fycm93VXAnO1xuZXhwb3J0IGNvbnN0IEFSUk9XX0RPV04gPSAnQXJyb3dEb3duJztcbmV4cG9ydCBjb25zdCBBUlJPV19MRUZUID0gJ0Fycm93TGVmdCc7XG5leHBvcnQgY29uc3QgQVJST1dfUklHSFQgPSAnQXJyb3dSaWdodCc7XG5leHBvcnQgY29uc3QgSE9NRSA9ICdIb21lJztcbmV4cG9ydCBjb25zdCBFTkQgPSAnRW5kJztcbmV4cG9ydCBjb25zdCBQQUdFX1VQID0gJ1BhZ2VVcCc7XG5leHBvcnQgY29uc3QgUEFHRV9ET1dOID0gJ1BhZ2VEb3duJztcbmV4cG9ydCBjb25zdCBIT1JJWk9OVEFMX0tFWVMgPSBuZXcgU2V0KFtBUlJPV19MRUZULCBBUlJPV19SSUdIVF0pO1xuZXhwb3J0IGNvbnN0IEhPUklaT05UQUxfS0VZU19XSVRIX0VYVFJBX0tFWVMgPSBuZXcgU2V0KFtBUlJPV19MRUZULCBBUlJPV19SSUdIVCwgSE9NRSwgRU5EXSk7XG5leHBvcnQgY29uc3QgVkVSVElDQUxfS0VZUyA9IG5ldyBTZXQoW0FSUk9XX1VQLCBBUlJPV19ET1dOXSk7XG5leHBvcnQgY29uc3QgVkVSVElDQUxfS0VZU19XSVRIX0VYVFJBX0tFWVMgPSBuZXcgU2V0KFtBUlJPV19VUCwgQVJST1dfRE9XTiwgSE9NRSwgRU5EXSk7XG5leHBvcnQgY29uc3QgQVJST1dfS0VZUyA9IG5ldyBTZXQoWy4uLkhPUklaT05UQUxfS0VZUywgLi4uVkVSVElDQUxfS0VZU10pO1xuZXhwb3J0IGNvbnN0IEFMTF9LRVlTID0gbmV3IFNldChbLi4uQVJST1dfS0VZUywgSE9NRSwgRU5EXSk7XG5leHBvcnQgY29uc3QgQ09NUE9TSVRFX0tFWVMgPSBuZXcgU2V0KFtBUlJPV19VUCwgQVJST1dfRE9XTiwgQVJST1dfTEVGVCwgQVJST1dfUklHSFQsIEhPTUUsIEVORF0pO1xuZXhwb3J0IGNvbnN0IFNISUZUID0gJ1NoaWZ0JztcbmV4cG9ydCBjb25zdCBDT05UUk9MID0gJ0NvbnRyb2wnO1xuZXhwb3J0IGNvbnN0IEFMVCA9ICdBbHQnO1xuZXhwb3J0IGNvbnN0IE1FVEEgPSAnTWV0YSc7XG5leHBvcnQgY29uc3QgTU9ESUZJRVJfS0VZUyA9IG5ldyBTZXQoW1NISUZULCBDT05UUk9MLCBBTFQsIE1FVEFdKTtcbmZ1bmN0aW9uIGlzSW5wdXRFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgJiYgZWxlbWVudC50YWdOYW1lID09PSAnSU5QVVQnO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzTmF0aXZlSW5wdXQoZWxlbWVudCkge1xuICBpZiAoaXNJbnB1dEVsZW1lbnQoZWxlbWVudCkgJiYgZWxlbWVudC5zZWxlY3Rpb25TdGFydCAhPSBudWxsKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgJiYgZWxlbWVudC50YWdOYW1lID09PSAnVEVYVEFSRUEnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbEludG9WaWV3SWZOZWVkZWQoc2Nyb2xsQ29udGFpbmVyLCBlbGVtZW50LCBkaXJlY3Rpb24sIG9yaWVudGF0aW9uKSB7XG4gIGlmICghc2Nyb2xsQ29udGFpbmVyIHx8ICFlbGVtZW50IHx8ICFlbGVtZW50LnNjcm9sbFRvKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCB0YXJnZXRYID0gc2Nyb2xsQ29udGFpbmVyLnNjcm9sbExlZnQ7XG4gIGxldCB0YXJnZXRZID0gc2Nyb2xsQ29udGFpbmVyLnNjcm9sbFRvcDtcbiAgY29uc3QgaXNPdmVyZmxvd2luZ1ggPSBzY3JvbGxDb250YWluZXIuY2xpZW50V2lkdGggPCBzY3JvbGxDb250YWluZXIuc2Nyb2xsV2lkdGg7XG4gIGNvbnN0IGlzT3ZlcmZsb3dpbmdZID0gc2Nyb2xsQ29udGFpbmVyLmNsaWVudEhlaWdodCA8IHNjcm9sbENvbnRhaW5lci5zY3JvbGxIZWlnaHQ7XG4gIGlmIChpc092ZXJmbG93aW5nWCAmJiBvcmllbnRhdGlvbiAhPT0gJ3ZlcnRpY2FsJykge1xuICAgIGNvbnN0IGVsZW1lbnRPZmZzZXRMZWZ0ID0gZ2V0T2Zmc2V0KHNjcm9sbENvbnRhaW5lciwgZWxlbWVudCwgJ2xlZnQnKTtcbiAgICBjb25zdCBjb250YWluZXJTdHlsZXMgPSBnZXRTdHlsZXMoc2Nyb2xsQ29udGFpbmVyKTtcbiAgICBjb25zdCBlbGVtZW50U3R5bGVzID0gZ2V0U3R5bGVzKGVsZW1lbnQpO1xuICAgIGlmIChkaXJlY3Rpb24gPT09ICdsdHInKSB7XG4gICAgICBpZiAoZWxlbWVudE9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoICsgZWxlbWVudFN0eWxlcy5zY3JvbGxNYXJnaW5SaWdodCA+IHNjcm9sbENvbnRhaW5lci5zY3JvbGxMZWZ0ICsgc2Nyb2xsQ29udGFpbmVyLmNsaWVudFdpZHRoIC0gY29udGFpbmVyU3R5bGVzLnNjcm9sbFBhZGRpbmdSaWdodCkge1xuICAgICAgICAvLyBvdmVyZmxvdyB0byB0aGUgcmlnaHQsIHNjcm9sbCB0byBhbGlnbiByaWdodCBlZGdlc1xuICAgICAgICB0YXJnZXRYID0gZWxlbWVudE9mZnNldExlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoICsgZWxlbWVudFN0eWxlcy5zY3JvbGxNYXJnaW5SaWdodCAtIHNjcm9sbENvbnRhaW5lci5jbGllbnRXaWR0aCArIGNvbnRhaW5lclN0eWxlcy5zY3JvbGxQYWRkaW5nUmlnaHQ7XG4gICAgICB9IGVsc2UgaWYgKGVsZW1lbnRPZmZzZXRMZWZ0IC0gZWxlbWVudFN0eWxlcy5zY3JvbGxNYXJnaW5MZWZ0IDwgc2Nyb2xsQ29udGFpbmVyLnNjcm9sbExlZnQgKyBjb250YWluZXJTdHlsZXMuc2Nyb2xsUGFkZGluZ0xlZnQpIHtcbiAgICAgICAgLy8gb3ZlcmZsb3cgdG8gdGhlIGxlZnQsIHNjcm9sbCB0byBhbGlnbiBsZWZ0IGVkZ2VzXG4gICAgICAgIHRhcmdldFggPSBlbGVtZW50T2Zmc2V0TGVmdCAtIGVsZW1lbnRTdHlsZXMuc2Nyb2xsTWFyZ2luTGVmdCAtIGNvbnRhaW5lclN0eWxlcy5zY3JvbGxQYWRkaW5nTGVmdDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgIGlmIChlbGVtZW50T2Zmc2V0TGVmdCAtIGVsZW1lbnRTdHlsZXMuc2Nyb2xsTWFyZ2luUmlnaHQgPCBzY3JvbGxDb250YWluZXIuc2Nyb2xsTGVmdCArIGNvbnRhaW5lclN0eWxlcy5zY3JvbGxQYWRkaW5nTGVmdCkge1xuICAgICAgICAvLyBvdmVyZmxvdyB0byB0aGUgbGVmdCwgc2Nyb2xsIHRvIGFsaWduIGxlZnQgZWRnZXNcbiAgICAgICAgdGFyZ2V0WCA9IGVsZW1lbnRPZmZzZXRMZWZ0IC0gZWxlbWVudFN0eWxlcy5zY3JvbGxNYXJnaW5MZWZ0IC0gY29udGFpbmVyU3R5bGVzLnNjcm9sbFBhZGRpbmdMZWZ0O1xuICAgICAgfSBlbHNlIGlmIChlbGVtZW50T2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggKyBlbGVtZW50U3R5bGVzLnNjcm9sbE1hcmdpblJpZ2h0ID4gc2Nyb2xsQ29udGFpbmVyLnNjcm9sbExlZnQgKyBzY3JvbGxDb250YWluZXIuY2xpZW50V2lkdGggLSBjb250YWluZXJTdHlsZXMuc2Nyb2xsUGFkZGluZ1JpZ2h0KSB7XG4gICAgICAgIC8vIG92ZXJmbG93IHRvIHRoZSByaWdodCwgc2Nyb2xsIHRvIGFsaWduIHJpZ2h0IGVkZ2VzXG4gICAgICAgIHRhcmdldFggPSBlbGVtZW50T2Zmc2V0TGVmdCArIGVsZW1lbnQub2Zmc2V0V2lkdGggKyBlbGVtZW50U3R5bGVzLnNjcm9sbE1hcmdpblJpZ2h0IC0gc2Nyb2xsQ29udGFpbmVyLmNsaWVudFdpZHRoICsgY29udGFpbmVyU3R5bGVzLnNjcm9sbFBhZGRpbmdSaWdodDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGlzT3ZlcmZsb3dpbmdZICYmIG9yaWVudGF0aW9uICE9PSAnaG9yaXpvbnRhbCcpIHtcbiAgICBjb25zdCBlbGVtZW50T2Zmc2V0VG9wID0gZ2V0T2Zmc2V0KHNjcm9sbENvbnRhaW5lciwgZWxlbWVudCwgJ3RvcCcpO1xuICAgIGNvbnN0IGNvbnRhaW5lclN0eWxlcyA9IGdldFN0eWxlcyhzY3JvbGxDb250YWluZXIpO1xuICAgIGNvbnN0IGVsZW1lbnRTdHlsZXMgPSBnZXRTdHlsZXMoZWxlbWVudCk7XG4gICAgaWYgKGVsZW1lbnRPZmZzZXRUb3AgLSBlbGVtZW50U3R5bGVzLnNjcm9sbE1hcmdpblRvcCA8IHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgKyBjb250YWluZXJTdHlsZXMuc2Nyb2xsUGFkZGluZ1RvcCkge1xuICAgICAgLy8gb3ZlcmZsb3cgdXB3YXJkcywgYWxpZ24gdG9wIGVkZ2VzXG4gICAgICB0YXJnZXRZID0gZWxlbWVudE9mZnNldFRvcCAtIGVsZW1lbnRTdHlsZXMuc2Nyb2xsTWFyZ2luVG9wIC0gY29udGFpbmVyU3R5bGVzLnNjcm9sbFBhZGRpbmdUb3A7XG4gICAgfSBlbHNlIGlmIChlbGVtZW50T2Zmc2V0VG9wICsgZWxlbWVudC5vZmZzZXRIZWlnaHQgKyBlbGVtZW50U3R5bGVzLnNjcm9sbE1hcmdpbkJvdHRvbSA+IHNjcm9sbENvbnRhaW5lci5zY3JvbGxUb3AgKyBzY3JvbGxDb250YWluZXIuY2xpZW50SGVpZ2h0IC0gY29udGFpbmVyU3R5bGVzLnNjcm9sbFBhZGRpbmdCb3R0b20pIHtcbiAgICAgIC8vIG92ZXJmbG93IGRvd253YXJkcywgYWxpZ24gYm90dG9tIGVkZ2VzXG4gICAgICB0YXJnZXRZID0gZWxlbWVudE9mZnNldFRvcCArIGVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgZWxlbWVudFN0eWxlcy5zY3JvbGxNYXJnaW5Cb3R0b20gLSBzY3JvbGxDb250YWluZXIuY2xpZW50SGVpZ2h0ICsgY29udGFpbmVyU3R5bGVzLnNjcm9sbFBhZGRpbmdCb3R0b207XG4gICAgfVxuICB9XG4gIHNjcm9sbENvbnRhaW5lci5zY3JvbGxUbyh7XG4gICAgbGVmdDogdGFyZ2V0WCxcbiAgICB0b3A6IHRhcmdldFksXG4gICAgYmVoYXZpb3I6ICdhdXRvJ1xuICB9KTtcbn1cbmZ1bmN0aW9uIGdldE9mZnNldChhbmNlc3RvciwgZWxlbWVudCwgc2lkZSkge1xuICBjb25zdCBwcm9wTmFtZSA9IHNpZGUgPT09ICdsZWZ0JyA/ICdvZmZzZXRMZWZ0JyA6ICdvZmZzZXRUb3AnO1xuICBsZXQgcmVzdWx0ID0gMDtcbiAgd2hpbGUgKGVsZW1lbnQub2Zmc2V0UGFyZW50KSB7XG4gICAgcmVzdWx0ICs9IGVsZW1lbnRbcHJvcE5hbWVdO1xuICAgIGlmIChlbGVtZW50Lm9mZnNldFBhcmVudCA9PT0gYW5jZXN0b3IpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBlbGVtZW50ID0gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldFN0eWxlcyhlbGVtZW50KSB7XG4gIGNvbnN0IHN0eWxlcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTWFyZ2luVG9wOiBwYXJzZUZsb2F0KHN0eWxlcy5zY3JvbGxNYXJnaW5Ub3ApIHx8IDAsXG4gICAgc2Nyb2xsTWFyZ2luUmlnaHQ6IHBhcnNlRmxvYXQoc3R5bGVzLnNjcm9sbE1hcmdpblJpZ2h0KSB8fCAwLFxuICAgIHNjcm9sbE1hcmdpbkJvdHRvbTogcGFyc2VGbG9hdChzdHlsZXMuc2Nyb2xsTWFyZ2luQm90dG9tKSB8fCAwLFxuICAgIHNjcm9sbE1hcmdpbkxlZnQ6IHBhcnNlRmxvYXQoc3R5bGVzLnNjcm9sbE1hcmdpbkxlZnQpIHx8IDAsXG4gICAgc2Nyb2xsUGFkZGluZ1RvcDogcGFyc2VGbG9hdChzdHlsZXMuc2Nyb2xsUGFkZGluZ1RvcCkgfHwgMCxcbiAgICBzY3JvbGxQYWRkaW5nUmlnaHQ6IHBhcnNlRmxvYXQoc3R5bGVzLnNjcm9sbFBhZGRpbmdSaWdodCkgfHwgMCxcbiAgICBzY3JvbGxQYWRkaW5nQm90dG9tOiBwYXJzZUZsb2F0KHN0eWxlcy5zY3JvbGxQYWRkaW5nQm90dG9tKSB8fCAwLFxuICAgIHNjcm9sbFBhZGRpbmdMZWZ0OiBwYXJzZUZsb2F0KHN0eWxlcy5zY3JvbGxQYWRkaW5nTGVmdCkgfHwgMFxuICB9O1xufSJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/composite/composite.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/composite/root/CompositeRootContext.js":
|
||
/*!******************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/composite/root/CompositeRootContext.js ***!
|
||
\******************************************************************************************/
|
||
/***/ ((__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 */ CompositeRootContext: () => (/* binding */ CompositeRootContext),\n/* harmony export */ useCompositeRootContext: () => (/* binding */ useCompositeRootContext)\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/* __next_internal_client_entry_do_not_use__ CompositeRootContext,useCompositeRootContext auto */ var _s = $RefreshSig$();\n\n\nconst CompositeRootContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(undefined);\nif (true) CompositeRootContext.displayName = \"CompositeRootContext\";\nfunction useCompositeRootContext() {\n let optional = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;\n _s();\n const context = react__WEBPACK_IMPORTED_MODULE_0__.useContext(CompositeRootContext);\n if (context === undefined && !optional) {\n throw new Error( true ? 'Base UI: CompositeRootContext is missing. Composite parts must be placed within <Composite.Root>.' : 0);\n }\n return context;\n}\n_s(useCompositeRootContext, \"b9L3QQ+jgeyIrH0NfHrJ8nn7VMU=\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL2NvbXBvc2l0ZS9yb290L0NvbXBvc2l0ZVJvb3RDb250ZXh0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFFb0U7QUFDckM7QUFDeEIsTUFBTUUsdUJBQXVCLFdBQVcsR0FBRUQsZ0RBQW1CLENBQUNHLFdBQVc7QUFDaEYsSUFBSUMsSUFBcUMsRUFBRUgscUJBQXFCSSxXQUFXLEdBQUc7QUFDdkUsU0FBU0M7UUFBd0JDLFdBQUFBLGlFQUFXOztJQUNqRCxNQUFNQyxVQUFVUiw2Q0FBZ0IsQ0FBQ0M7SUFDakMsSUFBSU8sWUFBWUwsYUFBYSxDQUFDSSxVQUFVO1FBQ3RDLE1BQU0sSUFBSUcsTUFBTU4sS0FBcUMsR0FBRyxzR0FBc0dMLENBQXVCO0lBQ3ZMO0lBQ0EsT0FBT1M7QUFDVDtHQU5nQkYiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2ludGVybmFscy9jb21wb3NpdGUvcm9vdC9Db21wb3NpdGVSb290Q29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZm9ybWF0RXJyb3JNZXNzYWdlIGZyb20gXCJAYmFzZS11aS91dGlscy9mb3JtYXRFcnJvck1lc3NhZ2VcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBDb21wb3NpdGVSb290Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSBDb21wb3NpdGVSb290Q29udGV4dC5kaXNwbGF5TmFtZSA9IFwiQ29tcG9zaXRlUm9vdENvbnRleHRcIjtcbmV4cG9ydCBmdW5jdGlvbiB1c2VDb21wb3NpdGVSb290Q29udGV4dChvcHRpb25hbCA9IGZhbHNlKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KENvbXBvc2l0ZVJvb3RDb250ZXh0KTtcbiAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCAmJiAhb3B0aW9uYWwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ0Jhc2UgVUk6IENvbXBvc2l0ZVJvb3RDb250ZXh0IGlzIG1pc3NpbmcuIENvbXBvc2l0ZSBwYXJ0cyBtdXN0IGJlIHBsYWNlZCB3aXRoaW4gPENvbXBvc2l0ZS5Sb290Pi4nIDogX2Zvcm1hdEVycm9yTWVzc2FnZSgxNikpO1xuICB9XG4gIHJldHVybiBjb250ZXh0O1xufSJdLCJuYW1lcyI6WyJfZm9ybWF0RXJyb3JNZXNzYWdlIiwiUmVhY3QiLCJDb21wb3NpdGVSb290Q29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJ1bmRlZmluZWQiLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiLCJ1c2VDb21wb3NpdGVSb290Q29udGV4dCIsIm9wdGlvbmFsIiwiY29udGV4dCIsInVzZUNvbnRleHQiLCJFcnJvciJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/composite/root/CompositeRootContext.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/constants.js":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/constants.js ***!
|
||
\****************************************************************/
|
||
/***/ ((__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 */ BASE_UI_SWIPE_IGNORE_ATTRIBUTE: () => (/* binding */ BASE_UI_SWIPE_IGNORE_ATTRIBUTE),\n/* harmony export */ BASE_UI_SWIPE_IGNORE_SELECTOR: () => (/* binding */ BASE_UI_SWIPE_IGNORE_SELECTOR),\n/* harmony export */ CLICK_TRIGGER_IDENTIFIER: () => (/* binding */ CLICK_TRIGGER_IDENTIFIER),\n/* harmony export */ DISABLED_TRANSITIONS_STYLE: () => (/* binding */ DISABLED_TRANSITIONS_STYLE),\n/* harmony export */ DROPDOWN_COLLISION_AVOIDANCE: () => (/* binding */ DROPDOWN_COLLISION_AVOIDANCE),\n/* harmony export */ LEGACY_SWIPE_IGNORE_ATTRIBUTE: () => (/* binding */ LEGACY_SWIPE_IGNORE_ATTRIBUTE),\n/* harmony export */ LEGACY_SWIPE_IGNORE_SELECTOR: () => (/* binding */ LEGACY_SWIPE_IGNORE_SELECTOR),\n/* harmony export */ PATIENT_CLICK_THRESHOLD: () => (/* binding */ PATIENT_CLICK_THRESHOLD),\n/* harmony export */ POPUP_COLLISION_AVOIDANCE: () => (/* binding */ POPUP_COLLISION_AVOIDANCE),\n/* harmony export */ TYPEAHEAD_RESET_MS: () => (/* binding */ TYPEAHEAD_RESET_MS),\n/* harmony export */ ownerVisuallyHidden: () => (/* binding */ ownerVisuallyHidden)\n/* harmony export */ });\nconst TYPEAHEAD_RESET_MS = 500;\nconst PATIENT_CLICK_THRESHOLD = 500;\nconst DISABLED_TRANSITIONS_STYLE = {\n style: {\n transition: 'none'\n }\n};\nconst CLICK_TRIGGER_IDENTIFIER = 'data-base-ui-click-trigger';\nconst BASE_UI_SWIPE_IGNORE_ATTRIBUTE = 'data-base-ui-swipe-ignore';\nconst LEGACY_SWIPE_IGNORE_ATTRIBUTE = 'data-swipe-ignore';\nconst BASE_UI_SWIPE_IGNORE_SELECTOR = `[${BASE_UI_SWIPE_IGNORE_ATTRIBUTE}]`;\nconst LEGACY_SWIPE_IGNORE_SELECTOR = `[${LEGACY_SWIPE_IGNORE_ATTRIBUTE}]`;\n\n/**\n * Used for dropdowns that usually strictly prefer top/bottom placements and\n * use `var(--available-height)` to limit their height.\n */\nconst DROPDOWN_COLLISION_AVOIDANCE = {\n fallbackAxisSide: 'none'\n};\n\n/**\n * Used by regular popups that usually aren't scrollable and are allowed to\n * freely flip to any axis of placement.\n */\nconst POPUP_COLLISION_AVOIDANCE = {\n fallbackAxisSide: 'end'\n};\n\n/**\n * Special visually hidden styles for the aria-owns owner element to ensure owned element\n * accessibility in iOS/Safari/VoiceControl.\n * The owner element is an empty span, so most of the common visually hidden styles are not needed.\n * @see https://github.com/floating-ui/floating-ui/issues/3403\n */\nconst ownerVisuallyHidden = {\n clipPath: 'inset(50%)',\n position: 'fixed',\n top: 0,\n left: 0\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL2NvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFPO0FBQ0E7QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDQTtBQUNBO0FBQ0EsMENBQTBDLCtCQUErQjtBQUN6RSx5Q0FBeUMsOEJBQThCOztBQUU5RTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2ludGVybmFscy9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IFRZUEVBSEVBRF9SRVNFVF9NUyA9IDUwMDtcbmV4cG9ydCBjb25zdCBQQVRJRU5UX0NMSUNLX1RIUkVTSE9MRCA9IDUwMDtcbmV4cG9ydCBjb25zdCBESVNBQkxFRF9UUkFOU0lUSU9OU19TVFlMRSA9IHtcbiAgc3R5bGU6IHtcbiAgICB0cmFuc2l0aW9uOiAnbm9uZSdcbiAgfVxufTtcbmV4cG9ydCBjb25zdCBDTElDS19UUklHR0VSX0lERU5USUZJRVIgPSAnZGF0YS1iYXNlLXVpLWNsaWNrLXRyaWdnZXInO1xuZXhwb3J0IGNvbnN0IEJBU0VfVUlfU1dJUEVfSUdOT1JFX0FUVFJJQlVURSA9ICdkYXRhLWJhc2UtdWktc3dpcGUtaWdub3JlJztcbmV4cG9ydCBjb25zdCBMRUdBQ1lfU1dJUEVfSUdOT1JFX0FUVFJJQlVURSA9ICdkYXRhLXN3aXBlLWlnbm9yZSc7XG5leHBvcnQgY29uc3QgQkFTRV9VSV9TV0lQRV9JR05PUkVfU0VMRUNUT1IgPSBgWyR7QkFTRV9VSV9TV0lQRV9JR05PUkVfQVRUUklCVVRFfV1gO1xuZXhwb3J0IGNvbnN0IExFR0FDWV9TV0lQRV9JR05PUkVfU0VMRUNUT1IgPSBgWyR7TEVHQUNZX1NXSVBFX0lHTk9SRV9BVFRSSUJVVEV9XWA7XG5cbi8qKlxuICogVXNlZCBmb3IgZHJvcGRvd25zIHRoYXQgdXN1YWxseSBzdHJpY3RseSBwcmVmZXIgdG9wL2JvdHRvbSBwbGFjZW1lbnRzIGFuZFxuICogdXNlIGB2YXIoLS1hdmFpbGFibGUtaGVpZ2h0KWAgdG8gbGltaXQgdGhlaXIgaGVpZ2h0LlxuICovXG5leHBvcnQgY29uc3QgRFJPUERPV05fQ09MTElTSU9OX0FWT0lEQU5DRSA9IHtcbiAgZmFsbGJhY2tBeGlzU2lkZTogJ25vbmUnXG59O1xuXG4vKipcbiAqIFVzZWQgYnkgcmVndWxhciBwb3B1cHMgdGhhdCB1c3VhbGx5IGFyZW4ndCBzY3JvbGxhYmxlIGFuZCBhcmUgYWxsb3dlZCB0b1xuICogZnJlZWx5IGZsaXAgdG8gYW55IGF4aXMgb2YgcGxhY2VtZW50LlxuICovXG5leHBvcnQgY29uc3QgUE9QVVBfQ09MTElTSU9OX0FWT0lEQU5DRSA9IHtcbiAgZmFsbGJhY2tBeGlzU2lkZTogJ2VuZCdcbn07XG5cbi8qKlxuICogU3BlY2lhbCB2aXN1YWxseSBoaWRkZW4gc3R5bGVzIGZvciB0aGUgYXJpYS1vd25zIG93bmVyIGVsZW1lbnQgdG8gZW5zdXJlIG93bmVkIGVsZW1lbnRcbiAqIGFjY2Vzc2liaWxpdHkgaW4gaU9TL1NhZmFyaS9Wb2ljZUNvbnRyb2wuXG4gKiBUaGUgb3duZXIgZWxlbWVudCBpcyBhbiBlbXB0eSBzcGFuLCBzbyBtb3N0IG9mIHRoZSBjb21tb24gdmlzdWFsbHkgaGlkZGVuIHN0eWxlcyBhcmUgbm90IG5lZWRlZC5cbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Zsb2F0aW5nLXVpL2Zsb2F0aW5nLXVpL2lzc3Vlcy8zNDAzXG4gKi9cbmV4cG9ydCBjb25zdCBvd25lclZpc3VhbGx5SGlkZGVuID0ge1xuICBjbGlwUGF0aDogJ2luc2V0KDUwJSknLFxuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgdG9wOiAwLFxuICBsZWZ0OiAwXG59OyJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/constants.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.js":
|
||
/*!*******************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.js ***!
|
||
\*******************************************************************************/
|
||
/***/ ((__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 */ createChangeEventDetails: () => (/* binding */ createChangeEventDetails),\n/* harmony export */ createGenericEventDetails: () => (/* binding */ createGenericEventDetails)\n/* harmony export */ });\n/* harmony import */ var _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @base-ui/utils/empty */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js\");\n\n\n\n/**\n * Maps a change `reason` string to the corresponding native event type.\n */\n\n/**\n * Details of custom change events emitted by Base UI components.\n */\n\n/**\n * Details of custom generic events emitted by Base UI components.\n */\n\n/**\n * Creates a Base UI event details object with the given reason and utilities\n * for preventing Base UI's internal event handling.\n */\nfunction createChangeEventDetails(reason, event, trigger, customProperties) {\n let canceled = false;\n let allowPropagation = false;\n const custom = customProperties ?? _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_0__.EMPTY_OBJECT;\n const details = {\n reason,\n event: event ?? new Event('base-ui'),\n cancel() {\n canceled = true;\n },\n allowPropagation() {\n allowPropagation = true;\n },\n get isCanceled() {\n return canceled;\n },\n get isPropagationAllowed() {\n return allowPropagation;\n },\n trigger,\n ...custom\n };\n return details;\n}\nfunction createGenericEventDetails(reason, event, customProperties) {\n const custom = customProperties ?? _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_0__.EMPTY_OBJECT;\n const details = {\n reason,\n event: event ?? new Event('base-ui'),\n ...custom\n };\n return details;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL2NyZWF0ZUJhc2VVSUV2ZW50RGV0YWlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBb0Q7QUFDYjs7QUFFdkM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxxQ0FBcUMsOERBQVk7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCxxQ0FBcUMsOERBQVk7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2ludGVybmFscy9jcmVhdGVCYXNlVUlFdmVudERldGFpbHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRU1QVFlfT0JKRUNUIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvZW1wdHknO1xuaW1wb3J0IHsgUkVBU09OUyB9IGZyb20gXCIuL3JlYXNvbnMuanNcIjtcblxuLyoqXG4gKiBNYXBzIGEgY2hhbmdlIGByZWFzb25gIHN0cmluZyB0byB0aGUgY29ycmVzcG9uZGluZyBuYXRpdmUgZXZlbnQgdHlwZS5cbiAqL1xuXG4vKipcbiAqIERldGFpbHMgb2YgY3VzdG9tIGNoYW5nZSBldmVudHMgZW1pdHRlZCBieSBCYXNlIFVJIGNvbXBvbmVudHMuXG4gKi9cblxuLyoqXG4gKiBEZXRhaWxzIG9mIGN1c3RvbSBnZW5lcmljIGV2ZW50cyBlbWl0dGVkIGJ5IEJhc2UgVUkgY29tcG9uZW50cy5cbiAqL1xuXG4vKipcbiAqIENyZWF0ZXMgYSBCYXNlIFVJIGV2ZW50IGRldGFpbHMgb2JqZWN0IHdpdGggdGhlIGdpdmVuIHJlYXNvbiBhbmQgdXRpbGl0aWVzXG4gKiBmb3IgcHJldmVudGluZyBCYXNlIFVJJ3MgaW50ZXJuYWwgZXZlbnQgaGFuZGxpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDaGFuZ2VFdmVudERldGFpbHMocmVhc29uLCBldmVudCwgdHJpZ2dlciwgY3VzdG9tUHJvcGVydGllcykge1xuICBsZXQgY2FuY2VsZWQgPSBmYWxzZTtcbiAgbGV0IGFsbG93UHJvcGFnYXRpb24gPSBmYWxzZTtcbiAgY29uc3QgY3VzdG9tID0gY3VzdG9tUHJvcGVydGllcyA/PyBFTVBUWV9PQkpFQ1Q7XG4gIGNvbnN0IGRldGFpbHMgPSB7XG4gICAgcmVhc29uLFxuICAgIGV2ZW50OiBldmVudCA/PyBuZXcgRXZlbnQoJ2Jhc2UtdWknKSxcbiAgICBjYW5jZWwoKSB7XG4gICAgICBjYW5jZWxlZCA9IHRydWU7XG4gICAgfSxcbiAgICBhbGxvd1Byb3BhZ2F0aW9uKCkge1xuICAgICAgYWxsb3dQcm9wYWdhdGlvbiA9IHRydWU7XG4gICAgfSxcbiAgICBnZXQgaXNDYW5jZWxlZCgpIHtcbiAgICAgIHJldHVybiBjYW5jZWxlZDtcbiAgICB9LFxuICAgIGdldCBpc1Byb3BhZ2F0aW9uQWxsb3dlZCgpIHtcbiAgICAgIHJldHVybiBhbGxvd1Byb3BhZ2F0aW9uO1xuICAgIH0sXG4gICAgdHJpZ2dlcixcbiAgICAuLi5jdXN0b21cbiAgfTtcbiAgcmV0dXJuIGRldGFpbHM7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2VuZXJpY0V2ZW50RGV0YWlscyhyZWFzb24sIGV2ZW50LCBjdXN0b21Qcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IGN1c3RvbSA9IGN1c3RvbVByb3BlcnRpZXMgPz8gRU1QVFlfT0JKRUNUO1xuICBjb25zdCBkZXRhaWxzID0ge1xuICAgIHJlYXNvbixcbiAgICBldmVudDogZXZlbnQgPz8gbmV3IEV2ZW50KCdiYXNlLXVpJyksXG4gICAgLi4uY3VzdG9tXG4gIH07XG4gIHJldHVybiBkZXRhaWxzO1xufSJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/field-constants/constants.js":
|
||
/*!********************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/field-constants/constants.js ***!
|
||
\********************************************************************************/
|
||
/***/ ((__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 */ DEFAULT_FIELD_ROOT_STATE: () => (/* binding */ DEFAULT_FIELD_ROOT_STATE),\n/* harmony export */ DEFAULT_FIELD_STATE_ATTRIBUTES: () => (/* binding */ DEFAULT_FIELD_STATE_ATTRIBUTES),\n/* harmony export */ DEFAULT_VALIDITY_STATE: () => (/* binding */ DEFAULT_VALIDITY_STATE),\n/* harmony export */ fieldValidityMapping: () => (/* binding */ fieldValidityMapping)\n/* harmony export */ });\n/* harmony import */ var _field_control_FieldControlDataAttributes_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../field/control/FieldControlDataAttributes.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/field/control/FieldControlDataAttributes.js\");\n\nconst DEFAULT_VALIDITY_STATE = {\n badInput: false,\n customError: false,\n patternMismatch: false,\n rangeOverflow: false,\n rangeUnderflow: false,\n stepMismatch: false,\n tooLong: false,\n tooShort: false,\n typeMismatch: false,\n valid: null,\n valueMissing: false\n};\nconst DEFAULT_FIELD_STATE_ATTRIBUTES = {\n valid: null,\n touched: false,\n dirty: false,\n filled: false,\n focused: false\n};\nconst DEFAULT_FIELD_ROOT_STATE = {\n disabled: false,\n ...DEFAULT_FIELD_STATE_ATTRIBUTES\n};\nconst fieldValidityMapping = {\n valid(value) {\n if (value === null) {\n return null;\n }\n if (value) {\n return {\n [_field_control_FieldControlDataAttributes_js__WEBPACK_IMPORTED_MODULE_0__.FieldControlDataAttributes.valid]: ''\n };\n }\n return {\n [_field_control_FieldControlDataAttributes_js__WEBPACK_IMPORTED_MODULE_0__.FieldControlDataAttributes.invalid]: ''\n };\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL2ZpZWxkLWNvbnN0YW50cy9jb25zdGFudHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBK0Y7QUFDeEY7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLG9HQUEwQjtBQUNuQztBQUNBO0FBQ0E7QUFDQSxPQUFPLG9HQUEwQjtBQUNqQztBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2ludGVybmFscy9maWVsZC1jb25zdGFudHMvY29uc3RhbnRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpZWxkQ29udHJvbERhdGFBdHRyaWJ1dGVzIH0gZnJvbSBcIi4uLy4uL2ZpZWxkL2NvbnRyb2wvRmllbGRDb250cm9sRGF0YUF0dHJpYnV0ZXMuanNcIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1ZBTElESVRZX1NUQVRFID0ge1xuICBiYWRJbnB1dDogZmFsc2UsXG4gIGN1c3RvbUVycm9yOiBmYWxzZSxcbiAgcGF0dGVybk1pc21hdGNoOiBmYWxzZSxcbiAgcmFuZ2VPdmVyZmxvdzogZmFsc2UsXG4gIHJhbmdlVW5kZXJmbG93OiBmYWxzZSxcbiAgc3RlcE1pc21hdGNoOiBmYWxzZSxcbiAgdG9vTG9uZzogZmFsc2UsXG4gIHRvb1Nob3J0OiBmYWxzZSxcbiAgdHlwZU1pc21hdGNoOiBmYWxzZSxcbiAgdmFsaWQ6IG51bGwsXG4gIHZhbHVlTWlzc2luZzogZmFsc2Vcbn07XG5leHBvcnQgY29uc3QgREVGQVVMVF9GSUVMRF9TVEFURV9BVFRSSUJVVEVTID0ge1xuICB2YWxpZDogbnVsbCxcbiAgdG91Y2hlZDogZmFsc2UsXG4gIGRpcnR5OiBmYWxzZSxcbiAgZmlsbGVkOiBmYWxzZSxcbiAgZm9jdXNlZDogZmFsc2Vcbn07XG5leHBvcnQgY29uc3QgREVGQVVMVF9GSUVMRF9ST09UX1NUQVRFID0ge1xuICBkaXNhYmxlZDogZmFsc2UsXG4gIC4uLkRFRkFVTFRfRklFTERfU1RBVEVfQVRUUklCVVRFU1xufTtcbmV4cG9ydCBjb25zdCBmaWVsZFZhbGlkaXR5TWFwcGluZyA9IHtcbiAgdmFsaWQodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtGaWVsZENvbnRyb2xEYXRhQXR0cmlidXRlcy52YWxpZF06ICcnXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgW0ZpZWxkQ29udHJvbERhdGFBdHRyaWJ1dGVzLmludmFsaWRdOiAnJ1xuICAgIH07XG4gIH1cbn07Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/field-constants/constants.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/field-register-control/useRegisterFieldControl.js":
|
||
/*!*****************************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/field-register-control/useRegisterFieldControl.js ***!
|
||
\*****************************************************************************************************/
|
||
/***/ ((__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 */ useRegisterFieldControl: () => (/* binding */ useRegisterFieldControl)\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 _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/utils/useIsoLayoutEffect */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _field_root_context_FieldRootContext_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../field-root-context/FieldRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/field-root-context/FieldRootContext.js\");\n/* __next_internal_client_entry_do_not_use__ useRegisterFieldControl auto */ var _s = $RefreshSig$();\n\n\n\nfunction useRegisterFieldControl(controlRef, params) {\n _s();\n const { enabled = true, getValue, id, value } = params;\n const { registerFieldControl } = (0,_field_root_context_FieldRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useFieldRootContext)();\n const sourceRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n if (!sourceRef.current) {\n sourceRef.current = Symbol();\n }\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect)({\n \"useRegisterFieldControl.useIsoLayoutEffect\": ()=>{\n const source = sourceRef.current;\n if (!source || !enabled) {\n return undefined;\n }\n registerFieldControl(source, {\n controlRef,\n getValue,\n id,\n value\n });\n return ({\n \"useRegisterFieldControl.useIsoLayoutEffect\": ()=>{\n registerFieldControl(source, undefined);\n }\n })[\"useRegisterFieldControl.useIsoLayoutEffect\"];\n }\n }[\"useRegisterFieldControl.useIsoLayoutEffect\"], [\n controlRef,\n enabled,\n getValue,\n id,\n registerFieldControl,\n value\n ]);\n}\n_s(useRegisterFieldControl, \"IZPv4VR7A1sOFlddgmGZgyyrzds=\", false, function() {\n return [\n _field_root_context_FieldRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useFieldRootContext,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL2ZpZWxkLXJlZ2lzdGVyLWNvbnRyb2wvdXNlUmVnaXN0ZXJGaWVsZENvbnRyb2wuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFK0I7QUFDd0M7QUFDUztBQUN6RSxTQUFTRyx3QkFBd0JDLFVBQVUsRUFBRUMsTUFBTTs7SUFDeEQsTUFBTSxFQUNKQyxVQUFVLElBQUksRUFDZEMsUUFBUSxFQUNSQyxFQUFFLEVBQ0ZDLEtBQUssRUFDTixHQUFHSjtJQUNKLE1BQU0sRUFDSkssb0JBQW9CLEVBQ3JCLEdBQUdSLDRGQUFtQkE7SUFDdkIsTUFBTVMsWUFBWVgseUNBQVksQ0FBQztJQUMvQixJQUFJLENBQUNXLFVBQVVFLE9BQU8sRUFBRTtRQUN0QkYsVUFBVUUsT0FBTyxHQUFHQztJQUN0QjtJQUNBYixxRkFBa0JBO3NEQUFDO1lBQ2pCLE1BQU1jLFNBQVNKLFVBQVVFLE9BQU87WUFDaEMsSUFBSSxDQUFDRSxVQUFVLENBQUNULFNBQVM7Z0JBQ3ZCLE9BQU9VO1lBQ1Q7WUFDQU4scUJBQXFCSyxRQUFRO2dCQUMzQlg7Z0JBQ0FHO2dCQUNBQztnQkFDQUM7WUFDRjtZQUNBOzhEQUFPO29CQUNMQyxxQkFBcUJLLFFBQVFDO2dCQUMvQjs7UUFDRjtxREFBRztRQUFDWjtRQUFZRTtRQUFTQztRQUFVQztRQUFJRTtRQUFzQkQ7S0FBTTtBQUNyRTtHQTdCZ0JOOztRQVNWRCx3RkFBbUJBO1FBS3ZCRCxpRkFBa0JBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9pbnRlcm5hbHMvZmllbGQtcmVnaXN0ZXItY29udHJvbC91c2VSZWdpc3RlckZpZWxkQ29udHJvbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUlzb0xheW91dEVmZmVjdCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZUlzb0xheW91dEVmZmVjdCc7XG5pbXBvcnQgeyB1c2VGaWVsZFJvb3RDb250ZXh0IH0gZnJvbSBcIi4uL2ZpZWxkLXJvb3QtY29udGV4dC9GaWVsZFJvb3RDb250ZXh0LmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gdXNlUmVnaXN0ZXJGaWVsZENvbnRyb2woY29udHJvbFJlZiwgcGFyYW1zKSB7XG4gIGNvbnN0IHtcbiAgICBlbmFibGVkID0gdHJ1ZSxcbiAgICBnZXRWYWx1ZSxcbiAgICBpZCxcbiAgICB2YWx1ZVxuICB9ID0gcGFyYW1zO1xuICBjb25zdCB7XG4gICAgcmVnaXN0ZXJGaWVsZENvbnRyb2xcbiAgfSA9IHVzZUZpZWxkUm9vdENvbnRleHQoKTtcbiAgY29uc3Qgc291cmNlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBpZiAoIXNvdXJjZVJlZi5jdXJyZW50KSB7XG4gICAgc291cmNlUmVmLmN1cnJlbnQgPSBTeW1ib2woKTtcbiAgfVxuICB1c2VJc29MYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IHNvdXJjZSA9IHNvdXJjZVJlZi5jdXJyZW50O1xuICAgIGlmICghc291cmNlIHx8ICFlbmFibGVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZWdpc3RlckZpZWxkQ29udHJvbChzb3VyY2UsIHtcbiAgICAgIGNvbnRyb2xSZWYsXG4gICAgICBnZXRWYWx1ZSxcbiAgICAgIGlkLFxuICAgICAgdmFsdWVcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgcmVnaXN0ZXJGaWVsZENvbnRyb2woc291cmNlLCB1bmRlZmluZWQpO1xuICAgIH07XG4gIH0sIFtjb250cm9sUmVmLCBlbmFibGVkLCBnZXRWYWx1ZSwgaWQsIHJlZ2lzdGVyRmllbGRDb250cm9sLCB2YWx1ZV0pO1xufSJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZUlzb0xheW91dEVmZmVjdCIsInVzZUZpZWxkUm9vdENvbnRleHQiLCJ1c2VSZWdpc3RlckZpZWxkQ29udHJvbCIsImNvbnRyb2xSZWYiLCJwYXJhbXMiLCJlbmFibGVkIiwiZ2V0VmFsdWUiLCJpZCIsInZhbHVlIiwicmVnaXN0ZXJGaWVsZENvbnRyb2wiLCJzb3VyY2VSZWYiLCJ1c2VSZWYiLCJjdXJyZW50IiwiU3ltYm9sIiwic291cmNlIiwidW5kZWZpbmVkIl0sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/field-register-control/useRegisterFieldControl.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/field-root-context/FieldRootContext.js":
|
||
/*!******************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/field-root-context/FieldRootContext.js ***!
|
||
\******************************************************************************************/
|
||
/***/ ((__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 */ FieldRootContext: () => (/* binding */ FieldRootContext),\n/* harmony export */ useFieldRootContext: () => (/* binding */ useFieldRootContext)\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 _noop_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../noop.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js\");\n/* harmony import */ var _field_constants_constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../field-constants/constants.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/field-constants/constants.js\");\n/* __next_internal_client_entry_do_not_use__ FieldRootContext,useFieldRootContext auto */ var _s = $RefreshSig$();\n\n\n\n\n\nconst FieldRootContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({\n invalid: undefined,\n name: undefined,\n validityData: {\n state: _field_constants_constants_js__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_VALIDITY_STATE,\n errors: [],\n error: '',\n value: '',\n initialValue: null\n },\n setValidityData: _noop_js__WEBPACK_IMPORTED_MODULE_2__.NOOP,\n disabled: undefined,\n touched: _field_constants_constants_js__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_FIELD_STATE_ATTRIBUTES.touched,\n setTouched: _noop_js__WEBPACK_IMPORTED_MODULE_2__.NOOP,\n dirty: _field_constants_constants_js__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_FIELD_STATE_ATTRIBUTES.dirty,\n setDirty: _noop_js__WEBPACK_IMPORTED_MODULE_2__.NOOP,\n filled: _field_constants_constants_js__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_FIELD_STATE_ATTRIBUTES.filled,\n setFilled: _noop_js__WEBPACK_IMPORTED_MODULE_2__.NOOP,\n focused: _field_constants_constants_js__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_FIELD_STATE_ATTRIBUTES.focused,\n setFocused: _noop_js__WEBPACK_IMPORTED_MODULE_2__.NOOP,\n validate: ()=>null,\n validationMode: 'onSubmit',\n validationDebounceTime: 0,\n shouldValidateOnChange: ()=>false,\n state: _field_constants_constants_js__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_FIELD_ROOT_STATE,\n markedDirtyRef: {\n current: false\n },\n registerFieldControl: _noop_js__WEBPACK_IMPORTED_MODULE_2__.NOOP,\n validation: {\n getValidationProps: function() {\n let props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : _noop_js__WEBPACK_IMPORTED_MODULE_2__.EMPTY_OBJECT;\n return props;\n },\n getInputValidationProps: function() {\n let props = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : _noop_js__WEBPACK_IMPORTED_MODULE_2__.EMPTY_OBJECT;\n return props;\n },\n inputRef: {\n current: null\n },\n commit: async ()=>{}\n }\n});\nif (true) FieldRootContext.displayName = \"FieldRootContext\";\nfunction useFieldRootContext() {\n let optional = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;\n _s();\n const context = react__WEBPACK_IMPORTED_MODULE_0__.useContext(FieldRootContext);\n if (context.setValidityData === _noop_js__WEBPACK_IMPORTED_MODULE_2__.NOOP && !optional) {\n throw new Error( true ? 'Base UI: FieldRootContext is missing. Field parts must be placed within <Field.Root>.' : 0);\n }\n return context;\n}\n_s(useFieldRootContext, \"b9L3QQ+jgeyIrH0NfHrJ8nn7VMU=\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL2ZpZWxkLXJvb3QtY29udGV4dC9GaWVsZFJvb3RDb250ZXh0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUVvRTtBQUNyQztBQUNxQjtBQUNsQjtBQUNpRztBQUM1SCxNQUFNTyxtQkFBbUIsV0FBVyxHQUFFTixnREFBbUIsQ0FBQztJQUMvRFEsU0FBU0M7SUFDVEMsTUFBTUQ7SUFDTkUsY0FBYztRQUNaQyxPQUFPUCxpRkFBc0JBO1FBQzdCUSxRQUFRLEVBQUU7UUFDVkMsT0FBTztRQUNQQyxPQUFPO1FBQ1BDLGNBQWM7SUFDaEI7SUFDQUMsaUJBQWlCZiwwQ0FBSUE7SUFDckJnQixVQUFVVDtJQUNWVSxTQUFTZix5RkFBOEJBLENBQUNlLE9BQU87SUFDL0NDLFlBQVlsQiwwQ0FBSUE7SUFDaEJtQixPQUFPakIseUZBQThCQSxDQUFDaUIsS0FBSztJQUMzQ0MsVUFBVXBCLDBDQUFJQTtJQUNkcUIsUUFBUW5CLHlGQUE4QkEsQ0FBQ21CLE1BQU07SUFDN0NDLFdBQVd0QiwwQ0FBSUE7SUFDZnVCLFNBQVNyQix5RkFBOEJBLENBQUNxQixPQUFPO0lBQy9DQyxZQUFZeEIsMENBQUlBO0lBQ2hCeUIsVUFBVSxJQUFNO0lBQ2hCQyxnQkFBZ0I7SUFDaEJDLHdCQUF3QjtJQUN4QkMsd0JBQXdCLElBQU07SUFDOUJsQixPQUFPVCxtRkFBd0JBO0lBQy9CNEIsZ0JBQWdCO1FBQ2RDLFNBQVM7SUFDWDtJQUNBQyxzQkFBc0IvQiwwQ0FBSUE7SUFDMUJnQyxZQUFZO1FBQ1ZDLG9CQUFvQjtnQkFBQ0MseUVBQVFuQyxrREFBWUE7bUJBQUttQzs7UUFDOUNDLHlCQUF5QjtnQkFBQ0QseUVBQVFuQyxrREFBWUE7bUJBQUttQzs7UUFDbkRFLFVBQVU7WUFDUk4sU0FBUztRQUNYO1FBQ0FPLFFBQVEsV0FBYTtJQUN2QjtBQUNGLEdBQUc7QUFDSCxJQUFJQyxJQUFxQyxFQUFFbEMsaUJBQWlCbUMsV0FBVyxHQUFHO0FBQ25FLFNBQVNDO1FBQW9CQyxXQUFBQSxpRUFBVzs7SUFDN0MsTUFBTUMsVUFBVTVDLDZDQUFnQixDQUFDTTtJQUNqQyxJQUFJc0MsUUFBUTNCLGVBQWUsS0FBS2YsMENBQUlBLElBQUksQ0FBQ3lDLFVBQVU7UUFDakQsTUFBTSxJQUFJRyxNQUFNTixLQUFxQyxHQUFHLDBGQUEwRnpDLENBQXVCO0lBQzNLO0lBQ0EsT0FBTzZDO0FBQ1Q7R0FOZ0JGIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9pbnRlcm5hbHMvZmllbGQtcm9vdC1jb250ZXh0L0ZpZWxkUm9vdENvbnRleHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2Zvcm1hdEVycm9yTWVzc2FnZSBmcm9tIFwiQGJhc2UtdWkvdXRpbHMvZm9ybWF0RXJyb3JNZXNzYWdlXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBFTVBUWV9PQkpFQ1QgfSBmcm9tICdAYmFzZS11aS91dGlscy9lbXB0eSc7XG5pbXBvcnQgeyBOT09QIH0gZnJvbSBcIi4uL25vb3AuanNcIjtcbmltcG9ydCB7IERFRkFVTFRfRklFTERfUk9PVF9TVEFURSwgREVGQVVMVF9GSUVMRF9TVEFURV9BVFRSSUJVVEVTLCBERUZBVUxUX1ZBTElESVRZX1NUQVRFIH0gZnJvbSBcIi4uL2ZpZWxkLWNvbnN0YW50cy9jb25zdGFudHMuanNcIjtcbmV4cG9ydCBjb25zdCBGaWVsZFJvb3RDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoe1xuICBpbnZhbGlkOiB1bmRlZmluZWQsXG4gIG5hbWU6IHVuZGVmaW5lZCxcbiAgdmFsaWRpdHlEYXRhOiB7XG4gICAgc3RhdGU6IERFRkFVTFRfVkFMSURJVFlfU1RBVEUsXG4gICAgZXJyb3JzOiBbXSxcbiAgICBlcnJvcjogJycsXG4gICAgdmFsdWU6ICcnLFxuICAgIGluaXRpYWxWYWx1ZTogbnVsbFxuICB9LFxuICBzZXRWYWxpZGl0eURhdGE6IE5PT1AsXG4gIGRpc2FibGVkOiB1bmRlZmluZWQsXG4gIHRvdWNoZWQ6IERFRkFVTFRfRklFTERfU1RBVEVfQVRUUklCVVRFUy50b3VjaGVkLFxuICBzZXRUb3VjaGVkOiBOT09QLFxuICBkaXJ0eTogREVGQVVMVF9GSUVMRF9TVEFURV9BVFRSSUJVVEVTLmRpcnR5LFxuICBzZXREaXJ0eTogTk9PUCxcbiAgZmlsbGVkOiBERUZBVUxUX0ZJRUxEX1NUQVRFX0FUVFJJQlVURVMuZmlsbGVkLFxuICBzZXRGaWxsZWQ6IE5PT1AsXG4gIGZvY3VzZWQ6IERFRkFVTFRfRklFTERfU1RBVEVfQVRUUklCVVRFUy5mb2N1c2VkLFxuICBzZXRGb2N1c2VkOiBOT09QLFxuICB2YWxpZGF0ZTogKCkgPT4gbnVsbCxcbiAgdmFsaWRhdGlvbk1vZGU6ICdvblN1Ym1pdCcsXG4gIHZhbGlkYXRpb25EZWJvdW5jZVRpbWU6IDAsXG4gIHNob3VsZFZhbGlkYXRlT25DaGFuZ2U6ICgpID0+IGZhbHNlLFxuICBzdGF0ZTogREVGQVVMVF9GSUVMRF9ST09UX1NUQVRFLFxuICBtYXJrZWREaXJ0eVJlZjoge1xuICAgIGN1cnJlbnQ6IGZhbHNlXG4gIH0sXG4gIHJlZ2lzdGVyRmllbGRDb250cm9sOiBOT09QLFxuICB2YWxpZGF0aW9uOiB7XG4gICAgZ2V0VmFsaWRhdGlvblByb3BzOiAocHJvcHMgPSBFTVBUWV9PQkpFQ1QpID0+IHByb3BzLFxuICAgIGdldElucHV0VmFsaWRhdGlvblByb3BzOiAocHJvcHMgPSBFTVBUWV9PQkpFQ1QpID0+IHByb3BzLFxuICAgIGlucHV0UmVmOiB7XG4gICAgICBjdXJyZW50OiBudWxsXG4gICAgfSxcbiAgICBjb21taXQ6IGFzeW5jICgpID0+IHt9XG4gIH1cbn0pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgRmllbGRSb290Q29udGV4dC5kaXNwbGF5TmFtZSA9IFwiRmllbGRSb290Q29udGV4dFwiO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUZpZWxkUm9vdENvbnRleHQob3B0aW9uYWwgPSB0cnVlKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KEZpZWxkUm9vdENvbnRleHQpO1xuICBpZiAoY29udGV4dC5zZXRWYWxpZGl0eURhdGEgPT09IE5PT1AgJiYgIW9wdGlvbmFsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdCYXNlIFVJOiBGaWVsZFJvb3RDb250ZXh0IGlzIG1pc3NpbmcuIEZpZWxkIHBhcnRzIG11c3QgYmUgcGxhY2VkIHdpdGhpbiA8RmllbGQuUm9vdD4uJyA6IF9mb3JtYXRFcnJvck1lc3NhZ2UoMjgpKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn0iXSwibmFtZXMiOlsiX2Zvcm1hdEVycm9yTWVzc2FnZSIsIlJlYWN0IiwiRU1QVFlfT0JKRUNUIiwiTk9PUCIsIkRFRkFVTFRfRklFTERfUk9PVF9TVEFURSIsIkRFRkFVTFRfRklFTERfU1RBVEVfQVRUUklCVVRFUyIsIkRFRkFVTFRfVkFMSURJVFlfU1RBVEUiLCJGaWVsZFJvb3RDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsImludmFsaWQiLCJ1bmRlZmluZWQiLCJuYW1lIiwidmFsaWRpdHlEYXRhIiwic3RhdGUiLCJlcnJvcnMiLCJlcnJvciIsInZhbHVlIiwiaW5pdGlhbFZhbHVlIiwic2V0VmFsaWRpdHlEYXRhIiwiZGlzYWJsZWQiLCJ0b3VjaGVkIiwic2V0VG91Y2hlZCIsImRpcnR5Iiwic2V0RGlydHkiLCJmaWxsZWQiLCJzZXRGaWxsZWQiLCJmb2N1c2VkIiwic2V0Rm9jdXNlZCIsInZhbGlkYXRlIiwidmFsaWRhdGlvbk1vZGUiLCJ2YWxpZGF0aW9uRGVib3VuY2VUaW1lIiwic2hvdWxkVmFsaWRhdGVPbkNoYW5nZSIsIm1hcmtlZERpcnR5UmVmIiwiY3VycmVudCIsInJlZ2lzdGVyRmllbGRDb250cm9sIiwidmFsaWRhdGlvbiIsImdldFZhbGlkYXRpb25Qcm9wcyIsInByb3BzIiwiZ2V0SW5wdXRWYWxpZGF0aW9uUHJvcHMiLCJpbnB1dFJlZiIsImNvbW1pdCIsInByb2Nlc3MiLCJkaXNwbGF5TmFtZSIsInVzZUZpZWxkUm9vdENvbnRleHQiLCJvcHRpb25hbCIsImNvbnRleHQiLCJ1c2VDb250ZXh0IiwiRXJyb3IiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/field-root-context/FieldRootContext.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/form-context/FormContext.js":
|
||
/*!*******************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/form-context/FormContext.js ***!
|
||
\*******************************************************************************/
|
||
/***/ ((__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 */ FormContext: () => (/* binding */ FormContext),\n/* harmony export */ useFormContext: () => (/* binding */ useFormContext)\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 _noop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../noop.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js\");\n/* __next_internal_client_entry_do_not_use__ FormContext,useFormContext auto */ var _s = $RefreshSig$();\n\n\nconst FormContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({\n formRef: {\n current: {\n fields: new Map()\n }\n },\n errors: {},\n clearErrors: _noop_js__WEBPACK_IMPORTED_MODULE_1__.NOOP,\n validationMode: 'onSubmit',\n submitAttemptedRef: {\n current: false\n }\n});\nif (true) FormContext.displayName = \"FormContext\";\nfunction useFormContext() {\n _s();\n return react__WEBPACK_IMPORTED_MODULE_0__.useContext(FormContext);\n}\n_s(useFormContext, \"gDsCjeeItUuvgOWf1v4qoK9RF6k=\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL2Zvcm0tY29udGV4dC9Gb3JtQ29udGV4dC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUUrQjtBQUNHO0FBQzNCLE1BQU1FLGNBQWMsV0FBVyxHQUFFRixnREFBbUIsQ0FBQztJQUMxREksU0FBUztRQUNQQyxTQUFTO1lBQ1BDLFFBQVEsSUFBSUM7UUFDZDtJQUNGO0lBQ0FDLFFBQVEsQ0FBQztJQUNUQyxhQUFhUiwwQ0FBSUE7SUFDakJTLGdCQUFnQjtJQUNoQkMsb0JBQW9CO1FBQ2xCTixTQUFTO0lBQ1g7QUFDRixHQUFHO0FBQ0gsSUFBSU8sSUFBcUMsRUFBRVYsWUFBWVcsV0FBVyxHQUFHO0FBQzlELFNBQVNDOztJQUNkLE9BQU9kLDZDQUFnQixDQUFDRTtBQUMxQjtHQUZnQlkiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2ludGVybmFscy9mb3JtLWNvbnRleHQvRm9ybUNvbnRleHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBOT09QIH0gZnJvbSBcIi4uL25vb3AuanNcIjtcbmV4cG9ydCBjb25zdCBGb3JtQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHtcbiAgZm9ybVJlZjoge1xuICAgIGN1cnJlbnQ6IHtcbiAgICAgIGZpZWxkczogbmV3IE1hcCgpXG4gICAgfVxuICB9LFxuICBlcnJvcnM6IHt9LFxuICBjbGVhckVycm9yczogTk9PUCxcbiAgdmFsaWRhdGlvbk1vZGU6ICdvblN1Ym1pdCcsXG4gIHN1Ym1pdEF0dGVtcHRlZFJlZjoge1xuICAgIGN1cnJlbnQ6IGZhbHNlXG4gIH1cbn0pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgRm9ybUNvbnRleHQuZGlzcGxheU5hbWUgPSBcIkZvcm1Db250ZXh0XCI7XG5leHBvcnQgZnVuY3Rpb24gdXNlRm9ybUNvbnRleHQoKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KEZvcm1Db250ZXh0KTtcbn0iXSwibmFtZXMiOlsiUmVhY3QiLCJOT09QIiwiRm9ybUNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiZm9ybVJlZiIsImN1cnJlbnQiLCJmaWVsZHMiLCJNYXAiLCJlcnJvcnMiLCJjbGVhckVycm9ycyIsInZhbGlkYXRpb25Nb2RlIiwic3VibWl0QXR0ZW1wdGVkUmVmIiwicHJvY2VzcyIsImRpc3BsYXlOYW1lIiwidXNlRm9ybUNvbnRleHQiLCJ1c2VDb250ZXh0Il0sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/form-context/FormContext.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/getStateAttributesProps.js":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/getStateAttributesProps.js ***!
|
||
\******************************************************************************/
|
||
/***/ ((__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 */ getStateAttributesProps: () => (/* binding */ getStateAttributesProps)\n/* harmony export */ });\nfunction getStateAttributesProps(state, customMapping) {\n const props = {};\n\n /* eslint-disable-next-line guard-for-in */\n for (const key in state) {\n const value = state[key];\n if (customMapping?.hasOwnProperty(key)) {\n const customProps = customMapping[key](value);\n if (customProps != null) {\n Object.assign(props, customProps);\n }\n continue;\n }\n if (value === true) {\n props[`data-${key.toLowerCase()}`] = '';\n } else if (value) {\n props[`data-${key.toLowerCase()}`] = value.toString();\n }\n }\n return props;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL2dldFN0YXRlQXR0cmlidXRlc1Byb3BzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTztBQUNQOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isa0JBQWtCO0FBQ3RDLE1BQU07QUFDTixvQkFBb0Isa0JBQWtCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9pbnRlcm5hbHMvZ2V0U3RhdGVBdHRyaWJ1dGVzUHJvcHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIGdldFN0YXRlQXR0cmlidXRlc1Byb3BzKHN0YXRlLCBjdXN0b21NYXBwaW5nKSB7XG4gIGNvbnN0IHByb3BzID0ge307XG5cbiAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pbiAqL1xuICBmb3IgKGNvbnN0IGtleSBpbiBzdGF0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gc3RhdGVba2V5XTtcbiAgICBpZiAoY3VzdG9tTWFwcGluZz8uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgY29uc3QgY3VzdG9tUHJvcHMgPSBjdXN0b21NYXBwaW5nW2tleV0odmFsdWUpO1xuICAgICAgaWYgKGN1c3RvbVByb3BzICE9IG51bGwpIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwcm9wcywgY3VzdG9tUHJvcHMpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgcHJvcHNbYGRhdGEtJHtrZXkudG9Mb3dlckNhc2UoKX1gXSA9ICcnO1xuICAgIH0gZWxzZSBpZiAodmFsdWUpIHtcbiAgICAgIHByb3BzW2BkYXRhLSR7a2V5LnRvTG93ZXJDYXNlKCl9YF0gPSB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcHJvcHM7XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/getStateAttributesProps.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/labelable-provider/LabelableContext.js":
|
||
/*!******************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/labelable-provider/LabelableContext.js ***!
|
||
\******************************************************************************************/
|
||
/***/ ((__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 */ LabelableContext: () => (/* binding */ LabelableContext),\n/* harmony export */ useLabelableContext: () => (/* binding */ useLabelableContext)\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 _noop_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../noop.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js\");\n/* __next_internal_client_entry_do_not_use__ LabelableContext,useLabelableContext auto */ var _s = $RefreshSig$();\n\n\n/**\n * A context for providing [labelable elements](https://html.spec.whatwg.org/multipage/forms.html#category-label)\\\n * with an accessible name (label) and description.\n */ const LabelableContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext({\n controlId: undefined,\n registerControlId: _noop_js__WEBPACK_IMPORTED_MODULE_1__.NOOP,\n labelId: undefined,\n setLabelId: _noop_js__WEBPACK_IMPORTED_MODULE_1__.NOOP,\n messageIds: [],\n setMessageIds: _noop_js__WEBPACK_IMPORTED_MODULE_1__.NOOP,\n getDescriptionProps: (externalProps)=>externalProps\n});\nif (true) LabelableContext.displayName = \"LabelableContext\";\nfunction useLabelableContext() {\n _s();\n return react__WEBPACK_IMPORTED_MODULE_0__.useContext(LabelableContext);\n}\n_s(useLabelableContext, \"gDsCjeeItUuvgOWf1v4qoK9RF6k=\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL2xhYmVsYWJsZS1wcm92aWRlci9MYWJlbGFibGVDb250ZXh0LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBRStCO0FBQ0c7QUFDbEM7OztDQUdDLEdBQ00sTUFBTUUsbUJBQW1CLFdBQVcsR0FBRUYsZ0RBQW1CLENBQUM7SUFDL0RJLFdBQVdDO0lBQ1hDLG1CQUFtQkwsMENBQUlBO0lBQ3ZCTSxTQUFTRjtJQUNURyxZQUFZUCwwQ0FBSUE7SUFDaEJRLFlBQVksRUFBRTtJQUNkQyxlQUFlVCwwQ0FBSUE7SUFDbkJVLHFCQUFxQkMsQ0FBQUEsZ0JBQWlCQTtBQUN4QyxHQUFHO0FBQ0gsSUFBSUMsSUFBcUMsRUFBRVgsaUJBQWlCWSxXQUFXLEdBQUc7QUFDbkUsU0FBU0M7O0lBQ2QsT0FBT2YsNkNBQWdCLENBQUNFO0FBQzFCO0dBRmdCYSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL2xhYmVsYWJsZS1wcm92aWRlci9MYWJlbGFibGVDb250ZXh0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTk9PUCB9IGZyb20gXCIuLi9ub29wLmpzXCI7XG4vKipcbiAqIEEgY29udGV4dCBmb3IgcHJvdmlkaW5nIFtsYWJlbGFibGUgZWxlbWVudHNdKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGFiZWwpXFxcbiAqIHdpdGggYW4gYWNjZXNzaWJsZSBuYW1lIChsYWJlbCkgYW5kIGRlc2NyaXB0aW9uLlxuICovXG5leHBvcnQgY29uc3QgTGFiZWxhYmxlQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHtcbiAgY29udHJvbElkOiB1bmRlZmluZWQsXG4gIHJlZ2lzdGVyQ29udHJvbElkOiBOT09QLFxuICBsYWJlbElkOiB1bmRlZmluZWQsXG4gIHNldExhYmVsSWQ6IE5PT1AsXG4gIG1lc3NhZ2VJZHM6IFtdLFxuICBzZXRNZXNzYWdlSWRzOiBOT09QLFxuICBnZXREZXNjcmlwdGlvblByb3BzOiBleHRlcm5hbFByb3BzID0+IGV4dGVybmFsUHJvcHNcbn0pO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikgTGFiZWxhYmxlQ29udGV4dC5kaXNwbGF5TmFtZSA9IFwiTGFiZWxhYmxlQ29udGV4dFwiO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUxhYmVsYWJsZUNvbnRleHQoKSB7XG4gIHJldHVybiBSZWFjdC51c2VDb250ZXh0KExhYmVsYWJsZUNvbnRleHQpO1xufSJdLCJuYW1lcyI6WyJSZWFjdCIsIk5PT1AiLCJMYWJlbGFibGVDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsImNvbnRyb2xJZCIsInVuZGVmaW5lZCIsInJlZ2lzdGVyQ29udHJvbElkIiwibGFiZWxJZCIsInNldExhYmVsSWQiLCJtZXNzYWdlSWRzIiwic2V0TWVzc2FnZUlkcyIsImdldERlc2NyaXB0aW9uUHJvcHMiLCJleHRlcm5hbFByb3BzIiwicHJvY2VzcyIsImRpc3BsYXlOYW1lIiwidXNlTGFiZWxhYmxlQ29udGV4dCIsInVzZUNvbnRleHQiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/labelable-provider/LabelableContext.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/labelable-provider/useAriaLabelledBy.js":
|
||
/*!*******************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/labelable-provider/useAriaLabelledBy.js ***!
|
||
\*******************************************************************************************/
|
||
/***/ ((__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 */ useAriaLabelledBy: () => (/* binding */ useAriaLabelledBy)\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 _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/utils/useIsoLayoutEffect */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _useBaseUiId_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../useBaseUiId.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useBaseUiId.js\");\n/* __next_internal_client_entry_do_not_use__ useAriaLabelledBy auto */ var _s = $RefreshSig$();\n\n\n\n/**\n * @internal\n */ function useAriaLabelledBy(explicitAriaLabelledBy, labelId, labelSourceRef) {\n let enableFallback = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : true, labelSourceId = arguments.length > 4 ? arguments[4] : void 0;\n _s();\n const [fallbackAriaLabelledBy, setFallbackAriaLabelledBy] = react__WEBPACK_IMPORTED_MODULE_0__.useState();\n const generatedLabelId = (0,_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_1__.useBaseUiId)(labelSourceId ? \"\".concat(labelSourceId, \"-label\") : undefined);\n var _ref;\n const ariaLabelledBy = (_ref = explicitAriaLabelledBy !== null && explicitAriaLabelledBy !== void 0 ? explicitAriaLabelledBy : labelId) !== null && _ref !== void 0 ? _ref : fallbackAriaLabelledBy;\n // Fallback for <span> controls labelled by wrapping/sibling native <label>.\n // Run after every commit so DOM association changes (e.g. label mount/unmount)\n // are reflected even when props/state deps are unchanged.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect)({\n \"useAriaLabelledBy.useIsoLayoutEffect\": ()=>{\n const nextAriaLabelledBy = explicitAriaLabelledBy || labelId || !enableFallback ? undefined : getAriaLabelledBy(labelSourceRef.current, generatedLabelId);\n if (fallbackAriaLabelledBy !== nextAriaLabelledBy) {\n setFallbackAriaLabelledBy(nextAriaLabelledBy);\n }\n }\n }[\"useAriaLabelledBy.useIsoLayoutEffect\"]);\n return ariaLabelledBy;\n}\n_s(useAriaLabelledBy, \"Mg3H5AvB8LAuVg4kc4ZSQY+RT+A=\", false, function() {\n return [\n _useBaseUiId_js__WEBPACK_IMPORTED_MODULE_1__.useBaseUiId,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect\n ];\n});\nfunction getAriaLabelledBy(labelSource, generatedLabelId) {\n const label = findAssociatedLabel(labelSource);\n if (!label) {\n return undefined;\n }\n if (!label.id && generatedLabelId) {\n label.id = generatedLabelId;\n }\n return label.id || undefined;\n}\nfunction findAssociatedLabel(labelSource) {\n if (!labelSource) {\n return undefined;\n }\n // Fast path before the expensive `.labels` read.\n const parent = labelSource.parentElement;\n if (parent && parent.tagName === 'LABEL') {\n return parent;\n }\n const controlId = labelSource.id;\n if (controlId) {\n const nextSibling = labelSource.nextElementSibling;\n if (nextSibling && nextSibling.htmlFor === controlId) {\n return nextSibling;\n }\n }\n const labels = labelSource.labels;\n return labels && labels[0];\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL2xhYmVsYWJsZS1wcm92aWRlci91c2VBcmlhTGFiZWxsZWRCeS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUUrQjtBQUN3QztBQUN2QjtBQUVoRDs7Q0FFQyxHQUNNLFNBQVNHLGtCQUFrQkMsc0JBQXNCLEVBQUVDLE9BQU8sRUFBRUMsY0FBYztRQUFFQyxpQkFBQUEsaUVBQWlCLE1BQU1DOztJQUN4RyxNQUFNLENBQUNDLHdCQUF3QkMsMEJBQTBCLEdBQUdWLDJDQUFjO0lBQzFFLE1BQU1ZLG1CQUFtQlYsNERBQVdBLENBQUNNLGdCQUFnQixHQUFpQixPQUFkQSxlQUFjLFlBQVVLO1FBQ3pEVDtJQUF2QixNQUFNVSxpQkFBaUJWLENBQUFBLE9BQUFBLG1DQUFBQSxvQ0FBQUEseUJBQTBCQyxxQkFBMUJELGtCQUFBQSxPQUFxQ0s7SUFFNUQsNEVBQTRFO0lBQzVFLCtFQUErRTtJQUMvRSwwREFBMEQ7SUFDMUQsdURBQXVEO0lBQ3ZEUixxRkFBa0JBO2dEQUFDO1lBQ2pCLE1BQU1jLHFCQUFxQlgsMEJBQTBCQyxXQUFXLENBQUNFLGlCQUFpQk0sWUFBWUcsa0JBQWtCVixlQUFlVyxPQUFPLEVBQUVMO1lBQ3hJLElBQUlILDJCQUEyQk0sb0JBQW9CO2dCQUNqREwsMEJBQTBCSztZQUM1QjtRQUNGOztJQUNBLE9BQU9EO0FBQ1Q7R0FoQmdCWDs7UUFFV0Qsd0RBQVdBO1FBT3BDRCxpRkFBa0JBOzs7QUFRcEIsU0FBU2Usa0JBQWtCRSxXQUFXLEVBQUVOLGdCQUFnQjtJQUN0RCxNQUFNTyxRQUFRQyxvQkFBb0JGO0lBQ2xDLElBQUksQ0FBQ0MsT0FBTztRQUNWLE9BQU9OO0lBQ1Q7SUFDQSxJQUFJLENBQUNNLE1BQU1FLEVBQUUsSUFBSVQsa0JBQWtCO1FBQ2pDTyxNQUFNRSxFQUFFLEdBQUdUO0lBQ2I7SUFDQSxPQUFPTyxNQUFNRSxFQUFFLElBQUlSO0FBQ3JCO0FBQ0EsU0FBU08sb0JBQW9CRixXQUFXO0lBQ3RDLElBQUksQ0FBQ0EsYUFBYTtRQUNoQixPQUFPTDtJQUNUO0lBRUEsaURBQWlEO0lBQ2pELE1BQU1TLFNBQVNKLFlBQVlLLGFBQWE7SUFDeEMsSUFBSUQsVUFBVUEsT0FBT0UsT0FBTyxLQUFLLFNBQVM7UUFDeEMsT0FBT0Y7SUFDVDtJQUNBLE1BQU1HLFlBQVlQLFlBQVlHLEVBQUU7SUFDaEMsSUFBSUksV0FBVztRQUNiLE1BQU1DLGNBQWNSLFlBQVlTLGtCQUFrQjtRQUNsRCxJQUFJRCxlQUFlQSxZQUFZRSxPQUFPLEtBQUtILFdBQVc7WUFDcEQsT0FBT0M7UUFDVDtJQUNGO0lBQ0EsTUFBTUcsU0FBU1gsWUFBWVcsTUFBTTtJQUNqQyxPQUFPQSxVQUFVQSxNQUFNLENBQUMsRUFBRTtBQUM1QiIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL2xhYmVsYWJsZS1wcm92aWRlci91c2VBcmlhTGFiZWxsZWRCeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUlzb0xheW91dEVmZmVjdCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZUlzb0xheW91dEVmZmVjdCc7XG5pbXBvcnQgeyB1c2VCYXNlVWlJZCB9IGZyb20gXCIuLi91c2VCYXNlVWlJZC5qc1wiO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlQXJpYUxhYmVsbGVkQnkoZXhwbGljaXRBcmlhTGFiZWxsZWRCeSwgbGFiZWxJZCwgbGFiZWxTb3VyY2VSZWYsIGVuYWJsZUZhbGxiYWNrID0gdHJ1ZSwgbGFiZWxTb3VyY2VJZCkge1xuICBjb25zdCBbZmFsbGJhY2tBcmlhTGFiZWxsZWRCeSwgc2V0RmFsbGJhY2tBcmlhTGFiZWxsZWRCeV0gPSBSZWFjdC51c2VTdGF0ZSgpO1xuICBjb25zdCBnZW5lcmF0ZWRMYWJlbElkID0gdXNlQmFzZVVpSWQobGFiZWxTb3VyY2VJZCA/IGAke2xhYmVsU291cmNlSWR9LWxhYmVsYCA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IGFyaWFMYWJlbGxlZEJ5ID0gZXhwbGljaXRBcmlhTGFiZWxsZWRCeSA/PyBsYWJlbElkID8/IGZhbGxiYWNrQXJpYUxhYmVsbGVkQnk7XG5cbiAgLy8gRmFsbGJhY2sgZm9yIDxzcGFuPiBjb250cm9scyBsYWJlbGxlZCBieSB3cmFwcGluZy9zaWJsaW5nIG5hdGl2ZSA8bGFiZWw+LlxuICAvLyBSdW4gYWZ0ZXIgZXZlcnkgY29tbWl0IHNvIERPTSBhc3NvY2lhdGlvbiBjaGFuZ2VzIChlLmcuIGxhYmVsIG1vdW50L3VubW91bnQpXG4gIC8vIGFyZSByZWZsZWN0ZWQgZXZlbiB3aGVuIHByb3BzL3N0YXRlIGRlcHMgYXJlIHVuY2hhbmdlZC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICB1c2VJc29MYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IG5leHRBcmlhTGFiZWxsZWRCeSA9IGV4cGxpY2l0QXJpYUxhYmVsbGVkQnkgfHwgbGFiZWxJZCB8fCAhZW5hYmxlRmFsbGJhY2sgPyB1bmRlZmluZWQgOiBnZXRBcmlhTGFiZWxsZWRCeShsYWJlbFNvdXJjZVJlZi5jdXJyZW50LCBnZW5lcmF0ZWRMYWJlbElkKTtcbiAgICBpZiAoZmFsbGJhY2tBcmlhTGFiZWxsZWRCeSAhPT0gbmV4dEFyaWFMYWJlbGxlZEJ5KSB7XG4gICAgICBzZXRGYWxsYmFja0FyaWFMYWJlbGxlZEJ5KG5leHRBcmlhTGFiZWxsZWRCeSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFyaWFMYWJlbGxlZEJ5O1xufVxuZnVuY3Rpb24gZ2V0QXJpYUxhYmVsbGVkQnkobGFiZWxTb3VyY2UsIGdlbmVyYXRlZExhYmVsSWQpIHtcbiAgY29uc3QgbGFiZWwgPSBmaW5kQXNzb2NpYXRlZExhYmVsKGxhYmVsU291cmNlKTtcbiAgaWYgKCFsYWJlbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgaWYgKCFsYWJlbC5pZCAmJiBnZW5lcmF0ZWRMYWJlbElkKSB7XG4gICAgbGFiZWwuaWQgPSBnZW5lcmF0ZWRMYWJlbElkO1xuICB9XG4gIHJldHVybiBsYWJlbC5pZCB8fCB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBmaW5kQXNzb2NpYXRlZExhYmVsKGxhYmVsU291cmNlKSB7XG4gIGlmICghbGFiZWxTb3VyY2UpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gRmFzdCBwYXRoIGJlZm9yZSB0aGUgZXhwZW5zaXZlIGAubGFiZWxzYCByZWFkLlxuICBjb25zdCBwYXJlbnQgPSBsYWJlbFNvdXJjZS5wYXJlbnRFbGVtZW50O1xuICBpZiAocGFyZW50ICYmIHBhcmVudC50YWdOYW1lID09PSAnTEFCRUwnKSB7XG4gICAgcmV0dXJuIHBhcmVudDtcbiAgfVxuICBjb25zdCBjb250cm9sSWQgPSBsYWJlbFNvdXJjZS5pZDtcbiAgaWYgKGNvbnRyb2xJZCkge1xuICAgIGNvbnN0IG5leHRTaWJsaW5nID0gbGFiZWxTb3VyY2UubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgIGlmIChuZXh0U2libGluZyAmJiBuZXh0U2libGluZy5odG1sRm9yID09PSBjb250cm9sSWQpIHtcbiAgICAgIHJldHVybiBuZXh0U2libGluZztcbiAgICB9XG4gIH1cbiAgY29uc3QgbGFiZWxzID0gbGFiZWxTb3VyY2UubGFiZWxzO1xuICByZXR1cm4gbGFiZWxzICYmIGxhYmVsc1swXTtcbn0iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VJc29MYXlvdXRFZmZlY3QiLCJ1c2VCYXNlVWlJZCIsInVzZUFyaWFMYWJlbGxlZEJ5IiwiZXhwbGljaXRBcmlhTGFiZWxsZWRCeSIsImxhYmVsSWQiLCJsYWJlbFNvdXJjZVJlZiIsImVuYWJsZUZhbGxiYWNrIiwibGFiZWxTb3VyY2VJZCIsImZhbGxiYWNrQXJpYUxhYmVsbGVkQnkiLCJzZXRGYWxsYmFja0FyaWFMYWJlbGxlZEJ5IiwidXNlU3RhdGUiLCJnZW5lcmF0ZWRMYWJlbElkIiwidW5kZWZpbmVkIiwiYXJpYUxhYmVsbGVkQnkiLCJuZXh0QXJpYUxhYmVsbGVkQnkiLCJnZXRBcmlhTGFiZWxsZWRCeSIsImN1cnJlbnQiLCJsYWJlbFNvdXJjZSIsImxhYmVsIiwiZmluZEFzc29jaWF0ZWRMYWJlbCIsImlkIiwicGFyZW50IiwicGFyZW50RWxlbWVudCIsInRhZ05hbWUiLCJjb250cm9sSWQiLCJuZXh0U2libGluZyIsIm5leHRFbGVtZW50U2libGluZyIsImh0bWxGb3IiLCJsYWJlbHMiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/labelable-provider/useAriaLabelledBy.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/labelable-provider/useLabelableId.js":
|
||
/*!****************************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/labelable-provider/useLabelableId.js ***!
|
||
\****************************************************************************************/
|
||
/***/ ((__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 */ useLabelableId: () => (/* binding */ useLabelableId)\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 _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @base-ui/utils/useIsoLayoutEffect */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @base-ui/utils/useStableCallback */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useStableCallback.js\");\n/* harmony import */ var _base_ui_utils_useRefWithInit__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @base-ui/utils/useRefWithInit */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useRefWithInit.js\");\n/* harmony import */ var _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @floating-ui/utils/dom */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\");\n/* harmony import */ var _noop_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../noop.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js\");\n/* harmony import */ var _useBaseUiId_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../useBaseUiId.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useBaseUiId.js\");\n/* harmony import */ var _LabelableContext_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./LabelableContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/labelable-provider/LabelableContext.js\");\n/* __next_internal_client_entry_do_not_use__ useLabelableId auto */ var _s = $RefreshSig$();\n\n\n\n\n\n\n\n\nfunction useLabelableId() {\n let params = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n _s();\n const { id, implicit = false, controlRef } = params;\n const { controlId, registerControlId } = (0,_LabelableContext_js__WEBPACK_IMPORTED_MODULE_1__.useLabelableContext)();\n const defaultId = (0,_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_2__.useBaseUiId)(id);\n const controlIdForEffect = implicit ? controlId : undefined;\n const controlSourceRef = (0,_base_ui_utils_useRefWithInit__WEBPACK_IMPORTED_MODULE_3__.useRefWithInit)({\n \"useLabelableId.useRefWithInit[controlSourceRef]\": ()=>Symbol('labelable-control')\n }[\"useLabelableId.useRefWithInit[controlSourceRef]\"]);\n const hasRegisteredRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n const hadExplicitIdRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(id != null);\n const unregisterControlId = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_4__.useStableCallback)({\n \"useLabelableId.useStableCallback[unregisterControlId]\": ()=>{\n if (!hasRegisteredRef.current || registerControlId === _noop_js__WEBPACK_IMPORTED_MODULE_5__.NOOP) {\n return;\n }\n hasRegisteredRef.current = false;\n registerControlId(controlSourceRef.current, undefined);\n }\n }[\"useLabelableId.useStableCallback[unregisterControlId]\"]);\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_6__.useIsoLayoutEffect)({\n \"useLabelableId.useIsoLayoutEffect\": ()=>{\n if (registerControlId === _noop_js__WEBPACK_IMPORTED_MODULE_5__.NOOP) {\n return undefined;\n }\n let nextId;\n if (implicit) {\n const elem = controlRef === null || controlRef === void 0 ? void 0 : controlRef.current;\n if ((0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_7__.isElement)(elem) && elem.closest('label') != null) {\n nextId = id !== null && id !== void 0 ? id : null;\n } else {\n nextId = controlIdForEffect !== null && controlIdForEffect !== void 0 ? controlIdForEffect : defaultId;\n }\n } else if (id != null) {\n hadExplicitIdRef.current = true;\n nextId = id;\n } else if (hadExplicitIdRef.current) {\n nextId = defaultId;\n } else {\n unregisterControlId();\n return undefined;\n }\n if (nextId === undefined) {\n unregisterControlId();\n return undefined;\n }\n hasRegisteredRef.current = true;\n registerControlId(controlSourceRef.current, nextId);\n return undefined;\n }\n }[\"useLabelableId.useIsoLayoutEffect\"], [\n id,\n controlRef,\n controlIdForEffect,\n registerControlId,\n implicit,\n defaultId,\n controlSourceRef,\n unregisterControlId\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"useLabelableId.useEffect\": ()=>{\n return unregisterControlId;\n }\n }[\"useLabelableId.useEffect\"], [\n unregisterControlId\n ]);\n return controlId !== null && controlId !== void 0 ? controlId : defaultId;\n}\n_s(useLabelableId, \"sg1soqrDE89Z91PSjnrPAzVwFpo=\", false, function() {\n return [\n _LabelableContext_js__WEBPACK_IMPORTED_MODULE_1__.useLabelableContext,\n _useBaseUiId_js__WEBPACK_IMPORTED_MODULE_2__.useBaseUiId,\n _base_ui_utils_useRefWithInit__WEBPACK_IMPORTED_MODULE_3__.useRefWithInit,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_4__.useStableCallback,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_6__.useIsoLayoutEffect\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL2xhYmVsYWJsZS1wcm92aWRlci91c2VMYWJlbGFibGVJZC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRStCO0FBQ3dDO0FBQ0Y7QUFDTjtBQUNaO0FBQ2pCO0FBQ2M7QUFDWTtBQUNyRCxTQUFTUTtRQUFlQyxTQUFBQSxpRUFBUyxDQUFDOztJQUN2QyxNQUFNLEVBQ0pDLEVBQUUsRUFDRkMsV0FBVyxLQUFLLEVBQ2hCQyxVQUFVLEVBQ1gsR0FBR0g7SUFDSixNQUFNLEVBQ0pJLFNBQVMsRUFDVEMsaUJBQWlCLEVBQ2xCLEdBQUdQLHlFQUFtQkE7SUFDdkIsTUFBTVEsWUFBWVQsNERBQVdBLENBQUNJO0lBQzlCLE1BQU1NLHFCQUFxQkwsV0FBV0UsWUFBWUk7SUFDbEQsTUFBTUMsbUJBQW1CZiw2RUFBY0E7MkRBQUMsSUFBTWdCLE9BQU87O0lBQ3JELE1BQU1DLG1CQUFtQnBCLHlDQUFZLENBQUM7SUFDdEMsTUFBTXNCLG1CQUFtQnRCLHlDQUFZLENBQUNVLE1BQU07SUFDNUMsTUFBTWEsc0JBQXNCckIsbUZBQWlCQTtpRUFBQztZQUM1QyxJQUFJLENBQUNrQixpQkFBaUJJLE9BQU8sSUFBSVYsc0JBQXNCVCwwQ0FBSUEsRUFBRTtnQkFDM0Q7WUFDRjtZQUNBZSxpQkFBaUJJLE9BQU8sR0FBRztZQUMzQlYsa0JBQWtCSSxpQkFBaUJNLE9BQU8sRUFBRVA7UUFDOUM7O0lBQ0FoQixxRkFBa0JBOzZDQUFDO1lBQ2pCLElBQUlhLHNCQUFzQlQsMENBQUlBLEVBQUU7Z0JBQzlCLE9BQU9ZO1lBQ1Q7WUFDQSxJQUFJUTtZQUNKLElBQUlkLFVBQVU7Z0JBQ1osTUFBTWUsT0FBT2QsdUJBQUFBLGlDQUFBQSxXQUFZWSxPQUFPO2dCQUNoQyxJQUFJcEIsaUVBQVNBLENBQUNzQixTQUFTQSxLQUFLQyxPQUFPLENBQUMsWUFBWSxNQUFNO29CQUNwREYsU0FBU2YsZUFBQUEsZ0JBQUFBLEtBQU07Z0JBQ2pCLE9BQU87b0JBQ0xlLFNBQVNULCtCQUFBQSxnQ0FBQUEscUJBQXNCRDtnQkFDakM7WUFDRixPQUFPLElBQUlMLE1BQU0sTUFBTTtnQkFDckJZLGlCQUFpQkUsT0FBTyxHQUFHO2dCQUMzQkMsU0FBU2Y7WUFDWCxPQUFPLElBQUlZLGlCQUFpQkUsT0FBTyxFQUFFO2dCQUNuQ0MsU0FBU1Y7WUFDWCxPQUFPO2dCQUNMUTtnQkFDQSxPQUFPTjtZQUNUO1lBQ0EsSUFBSVEsV0FBV1IsV0FBVztnQkFDeEJNO2dCQUNBLE9BQU9OO1lBQ1Q7WUFDQUcsaUJBQWlCSSxPQUFPLEdBQUc7WUFDM0JWLGtCQUFrQkksaUJBQWlCTSxPQUFPLEVBQUVDO1lBQzVDLE9BQU9SO1FBQ1Q7NENBQUc7UUFBQ1A7UUFBSUU7UUFBWUk7UUFBb0JGO1FBQW1CSDtRQUFVSTtRQUFXRztRQUFrQks7S0FBb0I7SUFDdEh2Qiw0Q0FBZTtvQ0FBQztZQUNkLE9BQU91QjtRQUNUO21DQUFHO1FBQUNBO0tBQW9CO0lBQ3hCLE9BQU9WLHNCQUFBQSx1QkFBQUEsWUFBYUU7QUFDdEI7R0F2RGdCUDs7UUFTVkQscUVBQW1CQTtRQUNMRCx3REFBV0E7UUFFSkgseUVBQWNBO1FBR1hELCtFQUFpQkE7UUFPN0NELGlGQUFrQkEiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2ludGVybmFscy9sYWJlbGFibGUtcHJvdmlkZXIvdXNlTGFiZWxhYmxlSWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VJc29MYXlvdXRFZmZlY3QgfSBmcm9tICdAYmFzZS11aS91dGlscy91c2VJc29MYXlvdXRFZmZlY3QnO1xuaW1wb3J0IHsgdXNlU3RhYmxlQ2FsbGJhY2sgfSBmcm9tICdAYmFzZS11aS91dGlscy91c2VTdGFibGVDYWxsYmFjayc7XG5pbXBvcnQgeyB1c2VSZWZXaXRoSW5pdCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZVJlZldpdGhJbml0JztcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuaW1wb3J0IHsgTk9PUCB9IGZyb20gXCIuLi9ub29wLmpzXCI7XG5pbXBvcnQgeyB1c2VCYXNlVWlJZCB9IGZyb20gXCIuLi91c2VCYXNlVWlJZC5qc1wiO1xuaW1wb3J0IHsgdXNlTGFiZWxhYmxlQ29udGV4dCB9IGZyb20gXCIuL0xhYmVsYWJsZUNvbnRleHQuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB1c2VMYWJlbGFibGVJZChwYXJhbXMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgaWQsXG4gICAgaW1wbGljaXQgPSBmYWxzZSxcbiAgICBjb250cm9sUmVmXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHtcbiAgICBjb250cm9sSWQsXG4gICAgcmVnaXN0ZXJDb250cm9sSWRcbiAgfSA9IHVzZUxhYmVsYWJsZUNvbnRleHQoKTtcbiAgY29uc3QgZGVmYXVsdElkID0gdXNlQmFzZVVpSWQoaWQpO1xuICBjb25zdCBjb250cm9sSWRGb3JFZmZlY3QgPSBpbXBsaWNpdCA/IGNvbnRyb2xJZCA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY29udHJvbFNvdXJjZVJlZiA9IHVzZVJlZldpdGhJbml0KCgpID0+IFN5bWJvbCgnbGFiZWxhYmxlLWNvbnRyb2wnKSk7XG4gIGNvbnN0IGhhc1JlZ2lzdGVyZWRSZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBoYWRFeHBsaWNpdElkUmVmID0gUmVhY3QudXNlUmVmKGlkICE9IG51bGwpO1xuICBjb25zdCB1bnJlZ2lzdGVyQ29udHJvbElkID0gdXNlU3RhYmxlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghaGFzUmVnaXN0ZXJlZFJlZi5jdXJyZW50IHx8IHJlZ2lzdGVyQ29udHJvbElkID09PSBOT09QKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGhhc1JlZ2lzdGVyZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgIHJlZ2lzdGVyQ29udHJvbElkKGNvbnRyb2xTb3VyY2VSZWYuY3VycmVudCwgdW5kZWZpbmVkKTtcbiAgfSk7XG4gIHVzZUlzb0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHJlZ2lzdGVyQ29udHJvbElkID09PSBOT09QKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsZXQgbmV4dElkO1xuICAgIGlmIChpbXBsaWNpdCkge1xuICAgICAgY29uc3QgZWxlbSA9IGNvbnRyb2xSZWY/LmN1cnJlbnQ7XG4gICAgICBpZiAoaXNFbGVtZW50KGVsZW0pICYmIGVsZW0uY2xvc2VzdCgnbGFiZWwnKSAhPSBudWxsKSB7XG4gICAgICAgIG5leHRJZCA9IGlkID8/IG51bGw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0SWQgPSBjb250cm9sSWRGb3JFZmZlY3QgPz8gZGVmYXVsdElkO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgaGFkRXhwbGljaXRJZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgIG5leHRJZCA9IGlkO1xuICAgIH0gZWxzZSBpZiAoaGFkRXhwbGljaXRJZFJlZi5jdXJyZW50KSB7XG4gICAgICBuZXh0SWQgPSBkZWZhdWx0SWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVucmVnaXN0ZXJDb250cm9sSWQoKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChuZXh0SWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdW5yZWdpc3RlckNvbnRyb2xJZCgpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaGFzUmVnaXN0ZXJlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICByZWdpc3RlckNvbnRyb2xJZChjb250cm9sU291cmNlUmVmLmN1cnJlbnQsIG5leHRJZCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW2lkLCBjb250cm9sUmVmLCBjb250cm9sSWRGb3JFZmZlY3QsIHJlZ2lzdGVyQ29udHJvbElkLCBpbXBsaWNpdCwgZGVmYXVsdElkLCBjb250cm9sU291cmNlUmVmLCB1bnJlZ2lzdGVyQ29udHJvbElkXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuIHVucmVnaXN0ZXJDb250cm9sSWQ7XG4gIH0sIFt1bnJlZ2lzdGVyQ29udHJvbElkXSk7XG4gIHJldHVybiBjb250cm9sSWQgPz8gZGVmYXVsdElkO1xufSJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZUlzb0xheW91dEVmZmVjdCIsInVzZVN0YWJsZUNhbGxiYWNrIiwidXNlUmVmV2l0aEluaXQiLCJpc0VsZW1lbnQiLCJOT09QIiwidXNlQmFzZVVpSWQiLCJ1c2VMYWJlbGFibGVDb250ZXh0IiwidXNlTGFiZWxhYmxlSWQiLCJwYXJhbXMiLCJpZCIsImltcGxpY2l0IiwiY29udHJvbFJlZiIsImNvbnRyb2xJZCIsInJlZ2lzdGVyQ29udHJvbElkIiwiZGVmYXVsdElkIiwiY29udHJvbElkRm9yRWZmZWN0IiwidW5kZWZpbmVkIiwiY29udHJvbFNvdXJjZVJlZiIsIlN5bWJvbCIsImhhc1JlZ2lzdGVyZWRSZWYiLCJ1c2VSZWYiLCJoYWRFeHBsaWNpdElkUmVmIiwidW5yZWdpc3RlckNvbnRyb2xJZCIsImN1cnJlbnQiLCJuZXh0SWQiLCJlbGVtIiwiY2xvc2VzdCIsInVzZUVmZmVjdCJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/labelable-provider/useLabelableId.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/reason-parts.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/reason-parts.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((__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 */ cancelOpen: () => (/* binding */ cancelOpen),\n/* harmony export */ chipRemovePress: () => (/* binding */ chipRemovePress),\n/* harmony export */ clearPress: () => (/* binding */ clearPress),\n/* harmony export */ closePress: () => (/* binding */ closePress),\n/* harmony export */ closeWatcher: () => (/* binding */ closeWatcher),\n/* harmony export */ decrementPress: () => (/* binding */ decrementPress),\n/* harmony export */ disabled: () => (/* binding */ disabled),\n/* harmony export */ drag: () => (/* binding */ drag),\n/* harmony export */ escapeKey: () => (/* binding */ escapeKey),\n/* harmony export */ focusOut: () => (/* binding */ focusOut),\n/* harmony export */ imperativeAction: () => (/* binding */ imperativeAction),\n/* harmony export */ incrementPress: () => (/* binding */ incrementPress),\n/* harmony export */ inputBlur: () => (/* binding */ inputBlur),\n/* harmony export */ inputChange: () => (/* binding */ inputChange),\n/* harmony export */ inputClear: () => (/* binding */ inputClear),\n/* harmony export */ inputPaste: () => (/* binding */ inputPaste),\n/* harmony export */ inputPress: () => (/* binding */ inputPress),\n/* harmony export */ itemPress: () => (/* binding */ itemPress),\n/* harmony export */ keyboard: () => (/* binding */ keyboard),\n/* harmony export */ linkPress: () => (/* binding */ linkPress),\n/* harmony export */ listNavigation: () => (/* binding */ listNavigation),\n/* harmony export */ none: () => (/* binding */ none),\n/* harmony export */ outsidePress: () => (/* binding */ outsidePress),\n/* harmony export */ pointer: () => (/* binding */ pointer),\n/* harmony export */ scrub: () => (/* binding */ scrub),\n/* harmony export */ siblingOpen: () => (/* binding */ siblingOpen),\n/* harmony export */ swipe: () => (/* binding */ swipe),\n/* harmony export */ trackPress: () => (/* binding */ trackPress),\n/* harmony export */ triggerFocus: () => (/* binding */ triggerFocus),\n/* harmony export */ triggerHover: () => (/* binding */ triggerHover),\n/* harmony export */ triggerPress: () => (/* binding */ triggerPress),\n/* harmony export */ wheel: () => (/* binding */ wheel),\n/* harmony export */ windowResize: () => (/* binding */ windowResize)\n/* harmony export */ });\nconst none = 'none';\nconst triggerPress = 'trigger-press';\nconst triggerHover = 'trigger-hover';\nconst triggerFocus = 'trigger-focus';\nconst outsidePress = 'outside-press';\nconst itemPress = 'item-press';\nconst closePress = 'close-press';\nconst linkPress = 'link-press';\nconst clearPress = 'clear-press';\nconst chipRemovePress = 'chip-remove-press';\nconst trackPress = 'track-press';\nconst incrementPress = 'increment-press';\nconst decrementPress = 'decrement-press';\nconst inputChange = 'input-change';\nconst inputClear = 'input-clear';\nconst inputBlur = 'input-blur';\nconst inputPaste = 'input-paste';\nconst inputPress = 'input-press';\nconst focusOut = 'focus-out';\nconst escapeKey = 'escape-key';\nconst closeWatcher = 'close-watcher';\nconst listNavigation = 'list-navigation';\nconst keyboard = 'keyboard';\nconst pointer = 'pointer';\nconst drag = 'drag';\nconst wheel = 'wheel';\nconst scrub = 'scrub';\nconst cancelOpen = 'cancel-open';\nconst siblingOpen = 'sibling-open';\nconst disabled = 'disabled';\nconst imperativeAction = 'imperative-action';\nconst swipe = 'swipe';\nconst windowResize = 'window-resize';//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL3JlYXNvbi1wYXJ0cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBTztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2ludGVybmFscy9yZWFzb24tcGFydHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IG5vbmUgPSAnbm9uZSc7XG5leHBvcnQgY29uc3QgdHJpZ2dlclByZXNzID0gJ3RyaWdnZXItcHJlc3MnO1xuZXhwb3J0IGNvbnN0IHRyaWdnZXJIb3ZlciA9ICd0cmlnZ2VyLWhvdmVyJztcbmV4cG9ydCBjb25zdCB0cmlnZ2VyRm9jdXMgPSAndHJpZ2dlci1mb2N1cyc7XG5leHBvcnQgY29uc3Qgb3V0c2lkZVByZXNzID0gJ291dHNpZGUtcHJlc3MnO1xuZXhwb3J0IGNvbnN0IGl0ZW1QcmVzcyA9ICdpdGVtLXByZXNzJztcbmV4cG9ydCBjb25zdCBjbG9zZVByZXNzID0gJ2Nsb3NlLXByZXNzJztcbmV4cG9ydCBjb25zdCBsaW5rUHJlc3MgPSAnbGluay1wcmVzcyc7XG5leHBvcnQgY29uc3QgY2xlYXJQcmVzcyA9ICdjbGVhci1wcmVzcyc7XG5leHBvcnQgY29uc3QgY2hpcFJlbW92ZVByZXNzID0gJ2NoaXAtcmVtb3ZlLXByZXNzJztcbmV4cG9ydCBjb25zdCB0cmFja1ByZXNzID0gJ3RyYWNrLXByZXNzJztcbmV4cG9ydCBjb25zdCBpbmNyZW1lbnRQcmVzcyA9ICdpbmNyZW1lbnQtcHJlc3MnO1xuZXhwb3J0IGNvbnN0IGRlY3JlbWVudFByZXNzID0gJ2RlY3JlbWVudC1wcmVzcyc7XG5leHBvcnQgY29uc3QgaW5wdXRDaGFuZ2UgPSAnaW5wdXQtY2hhbmdlJztcbmV4cG9ydCBjb25zdCBpbnB1dENsZWFyID0gJ2lucHV0LWNsZWFyJztcbmV4cG9ydCBjb25zdCBpbnB1dEJsdXIgPSAnaW5wdXQtYmx1cic7XG5leHBvcnQgY29uc3QgaW5wdXRQYXN0ZSA9ICdpbnB1dC1wYXN0ZSc7XG5leHBvcnQgY29uc3QgaW5wdXRQcmVzcyA9ICdpbnB1dC1wcmVzcyc7XG5leHBvcnQgY29uc3QgZm9jdXNPdXQgPSAnZm9jdXMtb3V0JztcbmV4cG9ydCBjb25zdCBlc2NhcGVLZXkgPSAnZXNjYXBlLWtleSc7XG5leHBvcnQgY29uc3QgY2xvc2VXYXRjaGVyID0gJ2Nsb3NlLXdhdGNoZXInO1xuZXhwb3J0IGNvbnN0IGxpc3ROYXZpZ2F0aW9uID0gJ2xpc3QtbmF2aWdhdGlvbic7XG5leHBvcnQgY29uc3Qga2V5Ym9hcmQgPSAna2V5Ym9hcmQnO1xuZXhwb3J0IGNvbnN0IHBvaW50ZXIgPSAncG9pbnRlcic7XG5leHBvcnQgY29uc3QgZHJhZyA9ICdkcmFnJztcbmV4cG9ydCBjb25zdCB3aGVlbCA9ICd3aGVlbCc7XG5leHBvcnQgY29uc3Qgc2NydWIgPSAnc2NydWInO1xuZXhwb3J0IGNvbnN0IGNhbmNlbE9wZW4gPSAnY2FuY2VsLW9wZW4nO1xuZXhwb3J0IGNvbnN0IHNpYmxpbmdPcGVuID0gJ3NpYmxpbmctb3Blbic7XG5leHBvcnQgY29uc3QgZGlzYWJsZWQgPSAnZGlzYWJsZWQnO1xuZXhwb3J0IGNvbnN0IGltcGVyYXRpdmVBY3Rpb24gPSAnaW1wZXJhdGl2ZS1hY3Rpb24nO1xuZXhwb3J0IGNvbnN0IHN3aXBlID0gJ3N3aXBlJztcbmV4cG9ydCBjb25zdCB3aW5kb3dSZXNpemUgPSAnd2luZG93LXJlc2l6ZSc7Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/reason-parts.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/shadowDom.js":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/shadowDom.js ***!
|
||
\****************************************************************/
|
||
/***/ ((__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 */ activeElement: () => (/* binding */ activeElement),\n/* harmony export */ contains: () => (/* binding */ contains),\n/* harmony export */ getTarget: () => (/* binding */ getTarget)\n/* harmony export */ });\n/* harmony import */ var _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @floating-ui/utils/dom */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\");\n\nfunction activeElement(doc) {\n let element = doc.activeElement;\n while (element?.shadowRoot?.activeElement != null) {\n element = element.shadowRoot.activeElement;\n }\n return element;\n}\nfunction contains(parent, child) {\n if (!parent || !child) {\n return false;\n }\n const rootNode = child.getRootNode?.();\n\n // First, attempt with the faster native method.\n if (parent.contains(child)) {\n return true;\n }\n\n // Then fall back to traversing out of shadow roots when needed.\n if (rootNode && (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.isShadowRoot)(rootNode)) {\n let next = child;\n while (next) {\n if (parent === next) {\n return true;\n }\n next = next.parentNode || next.host;\n }\n }\n return false;\n}\nfunction getTarget(event) {\n if ('composedPath' in event) {\n return event.composedPath()[0];\n }\n\n // TS assumes `composedPath()` always exists, but older browsers without\n // shadow DOM support still fall back to `target`.\n return event.target;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL3NoYWRvd0RvbS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXNEO0FBQy9DO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGtCQUFrQixvRUFBWTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9pbnRlcm5hbHMvc2hhZG93RG9tLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuZXhwb3J0IGZ1bmN0aW9uIGFjdGl2ZUVsZW1lbnQoZG9jKSB7XG4gIGxldCBlbGVtZW50ID0gZG9jLmFjdGl2ZUVsZW1lbnQ7XG4gIHdoaWxlIChlbGVtZW50Py5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ICE9IG51bGwpIHtcbiAgICBlbGVtZW50ID0gZWxlbWVudC5zaGFkb3dSb290LmFjdGl2ZUVsZW1lbnQ7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnMocGFyZW50LCBjaGlsZCkge1xuICBpZiAoIXBhcmVudCB8fCAhY2hpbGQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3Qgcm9vdE5vZGUgPSBjaGlsZC5nZXRSb290Tm9kZT8uKCk7XG5cbiAgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCB0aGUgZmFzdGVyIG5hdGl2ZSBtZXRob2QuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBUaGVuIGZhbGwgYmFjayB0byB0cmF2ZXJzaW5nIG91dCBvZiBzaGFkb3cgcm9vdHMgd2hlbiBuZWVkZWQuXG4gIGlmIChyb290Tm9kZSAmJiBpc1NoYWRvd1Jvb3Qocm9vdE5vZGUpKSB7XG4gICAgbGV0IG5leHQgPSBjaGlsZDtcbiAgICB3aGlsZSAobmV4dCkge1xuICAgICAgaWYgKHBhcmVudCA9PT0gbmV4dCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0KGV2ZW50KSB7XG4gIGlmICgnY29tcG9zZWRQYXRoJyBpbiBldmVudCkge1xuICAgIHJldHVybiBldmVudC5jb21wb3NlZFBhdGgoKVswXTtcbiAgfVxuXG4gIC8vIFRTIGFzc3VtZXMgYGNvbXBvc2VkUGF0aCgpYCBhbHdheXMgZXhpc3RzLCBidXQgb2xkZXIgYnJvd3NlcnMgd2l0aG91dFxuICAvLyBzaGFkb3cgRE9NIHN1cHBvcnQgc3RpbGwgZmFsbCBiYWNrIHRvIGB0YXJnZXRgLlxuICByZXR1cm4gZXZlbnQudGFyZ2V0O1xufSJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/shadowDom.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/stateAttributesMapping.js":
|
||
/*!*****************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/stateAttributesMapping.js ***!
|
||
\*****************************************************************************/
|
||
/***/ ((__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 */ TransitionStatusDataAttributes: () => (/* binding */ TransitionStatusDataAttributes),\n/* harmony export */ transitionStatusMapping: () => (/* binding */ transitionStatusMapping)\n/* harmony export */ });\nlet TransitionStatusDataAttributes = /*#__PURE__*/function (TransitionStatusDataAttributes) {\n /**\n * Present when the component is animating in.\n */\n TransitionStatusDataAttributes[\"startingStyle\"] = \"data-starting-style\";\n /**\n * Present when the component is animating out.\n */\n TransitionStatusDataAttributes[\"endingStyle\"] = \"data-ending-style\";\n return TransitionStatusDataAttributes;\n}({});\nconst STARTING_HOOK = {\n [TransitionStatusDataAttributes.startingStyle]: ''\n};\nconst ENDING_HOOK = {\n [TransitionStatusDataAttributes.endingStyle]: ''\n};\nconst transitionStatusMapping = {\n transitionStatus(value) {\n if (value === 'starting') {\n return STARTING_HOOK;\n }\n if (value === 'ending') {\n return ENDING_HOOK;\n }\n return null;\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL3N0YXRlQXR0cmlidXRlc01hcHBpbmcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsR0FBRztBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2ludGVybmFscy9zdGF0ZUF0dHJpYnV0ZXNNYXBwaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBsZXQgVHJhbnNpdGlvblN0YXR1c0RhdGFBdHRyaWJ1dGVzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChUcmFuc2l0aW9uU3RhdHVzRGF0YUF0dHJpYnV0ZXMpIHtcbiAgLyoqXG4gICAqIFByZXNlbnQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGFuaW1hdGluZyBpbi5cbiAgICovXG4gIFRyYW5zaXRpb25TdGF0dXNEYXRhQXR0cmlidXRlc1tcInN0YXJ0aW5nU3R5bGVcIl0gPSBcImRhdGEtc3RhcnRpbmctc3R5bGVcIjtcbiAgLyoqXG4gICAqIFByZXNlbnQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGFuaW1hdGluZyBvdXQuXG4gICAqL1xuICBUcmFuc2l0aW9uU3RhdHVzRGF0YUF0dHJpYnV0ZXNbXCJlbmRpbmdTdHlsZVwiXSA9IFwiZGF0YS1lbmRpbmctc3R5bGVcIjtcbiAgcmV0dXJuIFRyYW5zaXRpb25TdGF0dXNEYXRhQXR0cmlidXRlcztcbn0oe30pO1xuY29uc3QgU1RBUlRJTkdfSE9PSyA9IHtcbiAgW1RyYW5zaXRpb25TdGF0dXNEYXRhQXR0cmlidXRlcy5zdGFydGluZ1N0eWxlXTogJydcbn07XG5jb25zdCBFTkRJTkdfSE9PSyA9IHtcbiAgW1RyYW5zaXRpb25TdGF0dXNEYXRhQXR0cmlidXRlcy5lbmRpbmdTdHlsZV06ICcnXG59O1xuZXhwb3J0IGNvbnN0IHRyYW5zaXRpb25TdGF0dXNNYXBwaW5nID0ge1xuICB0cmFuc2l0aW9uU3RhdHVzKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSAnc3RhcnRpbmcnKSB7XG4gICAgICByZXR1cm4gU1RBUlRJTkdfSE9PSztcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnZW5kaW5nJykge1xuICAgICAgcmV0dXJuIEVORElOR19IT09LO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTsiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/stateAttributesMapping.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/use-button/useButton.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/use-button/useButton.js ***!
|
||
\***************************************************************************/
|
||
/***/ ((__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 */ useButton: () => (/* binding */ useButton)\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 _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @floating-ui/utils/dom */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\");\n/* harmony import */ var _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @base-ui/utils/useStableCallback */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useStableCallback.js\");\n/* harmony import */ var _base_ui_utils_error__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @base-ui/utils/error */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/error.js\");\n/* harmony import */ var _base_ui_utils_safeReact__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @base-ui/utils/safeReact */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/safeReact.js\");\n/* harmony import */ var _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @base-ui/utils/useIsoLayoutEffect */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _merge_props_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../merge-props/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/merge-props/mergeProps.js\");\n/* harmony import */ var _composite_root_CompositeRootContext_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../composite/root/CompositeRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/composite/root/CompositeRootContext.js\");\n/* harmony import */ var _utils_useFocusableWhenDisabled_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../utils/useFocusableWhenDisabled.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/useFocusableWhenDisabled.js\");\n/* __next_internal_client_entry_do_not_use__ useButton auto */ var _s = $RefreshSig$();\n\n\n\n\n\n\n\n\n\nfunction useButton() {\n let parameters = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n _s();\n const { disabled = false, focusableWhenDisabled, tabIndex = 0, native: isNativeButton = true, composite: compositeProp } = parameters;\n const elementRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const compositeRootContext = (0,_composite_root_CompositeRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useCompositeRootContext)(true);\n const isCompositeItem = compositeProp !== null && compositeProp !== void 0 ? compositeProp : compositeRootContext !== undefined;\n const { props: focusableWhenDisabledProps } = (0,_utils_useFocusableWhenDisabled_js__WEBPACK_IMPORTED_MODULE_2__.useFocusableWhenDisabled)({\n focusableWhenDisabled,\n disabled,\n composite: isCompositeItem,\n tabIndex,\n isNativeButton\n });\n if (true) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"useButton.useEffect\": ()=>{\n if (!elementRef.current) {\n return;\n }\n const isButtonTag = isButtonElement(elementRef.current);\n if (isNativeButton) {\n if (!isButtonTag) {\n var _SafeReact_captureOwnerStack;\n const ownerStackMessage = ((_SafeReact_captureOwnerStack = _base_ui_utils_safeReact__WEBPACK_IMPORTED_MODULE_3__.SafeReact.captureOwnerStack) === null || _SafeReact_captureOwnerStack === void 0 ? void 0 : _SafeReact_captureOwnerStack.call(_base_ui_utils_safeReact__WEBPACK_IMPORTED_MODULE_3__.SafeReact)) || '';\n const message = 'A component that acts as a button expected a native <button> because the ' + '`nativeButton` prop is true. Rendering a non-<button> removes native button ' + 'semantics, which can impact forms and accessibility. Use a real <button> in the ' + '`render` prop, or set `nativeButton` to `false`.';\n (0,_base_ui_utils_error__WEBPACK_IMPORTED_MODULE_4__.error)(\"\".concat(message).concat(ownerStackMessage));\n }\n } else if (isButtonTag) {\n var _SafeReact_captureOwnerStack1;\n const ownerStackMessage = ((_SafeReact_captureOwnerStack1 = _base_ui_utils_safeReact__WEBPACK_IMPORTED_MODULE_3__.SafeReact.captureOwnerStack) === null || _SafeReact_captureOwnerStack1 === void 0 ? void 0 : _SafeReact_captureOwnerStack1.call(_base_ui_utils_safeReact__WEBPACK_IMPORTED_MODULE_3__.SafeReact)) || '';\n const message = 'A component that acts as a button expected a non-<button> because the `nativeButton` ' + 'prop is false. Rendering a <button> keeps native behavior while Base UI applies ' + 'non-native attributes and handlers, which can add unintended extra attributes (such ' + 'as `role` or `aria-disabled`). Use a non-<button> in the `render` prop, or set ' + '`nativeButton` to `true`.';\n (0,_base_ui_utils_error__WEBPACK_IMPORTED_MODULE_4__.error)(\"\".concat(message).concat(ownerStackMessage));\n }\n }\n }[\"useButton.useEffect\"], [\n isNativeButton\n ]);\n }\n // handles a disabled composite button rendering another button, e.g.\n // <Toolbar.Button disabled render={<Menu.Trigger />} />\n // the `disabled` prop needs to pass through 2 `useButton`s then finally\n // delete the `disabled` attribute from DOM\n const updateDisabled = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"useButton.useCallback[updateDisabled]\": ()=>{\n const element = elementRef.current;\n if (!isButtonElement(element)) {\n return;\n }\n if (isCompositeItem && disabled && focusableWhenDisabledProps.disabled === undefined && element.disabled) {\n element.disabled = false;\n }\n }\n }[\"useButton.useCallback[updateDisabled]\"], [\n disabled,\n focusableWhenDisabledProps.disabled,\n isCompositeItem\n ]);\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_5__.useIsoLayoutEffect)(updateDisabled, [\n updateDisabled\n ]);\n const getButtonProps = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"useButton.useCallback[getButtonProps]\": function() {\n let externalProps = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};\n const { onClick: externalOnClick, onMouseDown: externalOnMouseDown, onKeyUp: externalOnKeyUp, onKeyDown: externalOnKeyDown, onPointerDown: externalOnPointerDown, ...otherExternalProps } = externalProps;\n const type = isNativeButton ? 'button' : undefined;\n return (0,_merge_props_index_js__WEBPACK_IMPORTED_MODULE_6__.mergeProps)({\n type,\n onClick (event) {\n if (disabled) {\n event.preventDefault();\n return;\n }\n externalOnClick === null || externalOnClick === void 0 ? void 0 : externalOnClick(event);\n },\n onMouseDown (event) {\n if (!disabled) {\n externalOnMouseDown === null || externalOnMouseDown === void 0 ? void 0 : externalOnMouseDown(event);\n }\n },\n onKeyDown (event) {\n if (disabled) {\n return;\n }\n (0,_merge_props_index_js__WEBPACK_IMPORTED_MODULE_6__.makeEventPreventable)(event);\n externalOnKeyDown === null || externalOnKeyDown === void 0 ? void 0 : externalOnKeyDown(event);\n if (event.baseUIHandlerPrevented) {\n return;\n }\n const isCurrentTarget = event.target === event.currentTarget;\n const currentTarget = event.currentTarget;\n const isButton = isButtonElement(currentTarget);\n const isLink = !isNativeButton && isValidLinkElement(currentTarget);\n const shouldClick = isCurrentTarget && (isNativeButton ? isButton : !isLink);\n const isEnterKey = event.key === 'Enter';\n const isSpaceKey = event.key === ' ';\n const role = currentTarget.getAttribute('role');\n const isTextNavigationRole = (role === null || role === void 0 ? void 0 : role.startsWith('menuitem')) || role === 'option' || role === 'gridcell';\n if (isCurrentTarget && isCompositeItem && isSpaceKey) {\n if (event.defaultPrevented && isTextNavigationRole) {\n return;\n }\n event.preventDefault();\n if (isLink || isNativeButton && isButton) {\n currentTarget.click();\n event.preventBaseUIHandler();\n } else if (shouldClick) {\n externalOnClick === null || externalOnClick === void 0 ? void 0 : externalOnClick(event);\n event.preventBaseUIHandler();\n }\n return;\n }\n // Keyboard accessibility for native and non-native elements.\n if (shouldClick) {\n if (!isNativeButton && (isSpaceKey || isEnterKey)) {\n event.preventDefault();\n }\n if (!isNativeButton && isEnterKey) {\n externalOnClick === null || externalOnClick === void 0 ? void 0 : externalOnClick(event);\n }\n }\n },\n onKeyUp (event) {\n if (disabled) {\n return;\n }\n // calling preventDefault in keyUp on a <button> will not dispatch a click event if Space is pressed\n // https://codesandbox.io/p/sandbox/button-keyup-preventdefault-dn7f0\n (0,_merge_props_index_js__WEBPACK_IMPORTED_MODULE_6__.makeEventPreventable)(event);\n externalOnKeyUp === null || externalOnKeyUp === void 0 ? void 0 : externalOnKeyUp(event);\n if (event.target === event.currentTarget && isNativeButton && isCompositeItem && isButtonElement(event.currentTarget) && event.key === ' ') {\n event.preventDefault();\n return;\n }\n if (event.baseUIHandlerPrevented) {\n return;\n }\n // Keyboard accessibility for non interactive elements\n if (event.target === event.currentTarget && !isNativeButton && !isCompositeItem && event.key === ' ') {\n externalOnClick === null || externalOnClick === void 0 ? void 0 : externalOnClick(event);\n }\n },\n onPointerDown (event) {\n if (disabled) {\n event.preventDefault();\n return;\n }\n externalOnPointerDown === null || externalOnPointerDown === void 0 ? void 0 : externalOnPointerDown(event);\n }\n }, !isNativeButton ? {\n role: 'button'\n } : undefined, focusableWhenDisabledProps, otherExternalProps);\n }\n }[\"useButton.useCallback[getButtonProps]\"], [\n disabled,\n focusableWhenDisabledProps,\n isCompositeItem,\n isNativeButton\n ]);\n const buttonRef = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_7__.useStableCallback)({\n \"useButton.useStableCallback[buttonRef]\": (element)=>{\n elementRef.current = element;\n updateDisabled();\n }\n }[\"useButton.useStableCallback[buttonRef]\"]);\n return {\n getButtonProps,\n buttonRef\n };\n}\n_s(useButton, \"OIxZR4t5KI0pz6jNuCMjrUc3Myc=\", false, function() {\n return [\n _composite_root_CompositeRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useCompositeRootContext,\n _utils_useFocusableWhenDisabled_js__WEBPACK_IMPORTED_MODULE_2__.useFocusableWhenDisabled,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_5__.useIsoLayoutEffect,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_7__.useStableCallback\n ];\n});\nfunction isButtonElement(elem) {\n return (0,_floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_8__.isHTMLElement)(elem) && elem.tagName === 'BUTTON';\n}\nfunction isValidLinkElement(elem) {\n return Boolean((elem === null || elem === void 0 ? void 0 : elem.tagName) === 'A' && (elem === null || elem === void 0 ? void 0 : elem.href));\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL3VzZS1idXR0b24vdXNlQnV0dG9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBRStCO0FBQ3dCO0FBQ2M7QUFDeEI7QUFDUTtBQUNrQjtBQUNPO0FBQ007QUFDRDtBQUM1RSxTQUFTVTtRQUFVQyxhQUFBQSxpRUFBYSxDQUFDOztJQUN0QyxNQUFNLEVBQ0pDLFdBQVcsS0FBSyxFQUNoQkMscUJBQXFCLEVBQ3JCQyxXQUFXLENBQUMsRUFDWkMsUUFBUUMsaUJBQWlCLElBQUksRUFDN0JDLFdBQVdDLGFBQWEsRUFDekIsR0FBR1A7SUFDSixNQUFNUSxhQUFhbkIseUNBQVksQ0FBQztJQUNoQyxNQUFNcUIsdUJBQXVCYixnR0FBdUJBLENBQUM7SUFDckQsTUFBTWMsa0JBQWtCSiwwQkFBQUEsMkJBQUFBLGdCQUFpQkcseUJBQXlCRTtJQUNsRSxNQUFNLEVBQ0pDLE9BQU9DLDBCQUEwQixFQUNsQyxHQUFHaEIsNEZBQXdCQSxDQUFDO1FBQzNCSTtRQUNBRDtRQUNBSyxXQUFXSztRQUNYUjtRQUNBRTtJQUNGO0lBQ0EsSUFBSVUsSUFBcUMsRUFBRTtRQUN6QyxzREFBc0Q7UUFDdEQxQiw0Q0FBZTttQ0FBQztnQkFDZCxJQUFJLENBQUNtQixXQUFXUyxPQUFPLEVBQUU7b0JBQ3ZCO2dCQUNGO2dCQUNBLE1BQU1DLGNBQWNDLGdCQUFnQlgsV0FBV1MsT0FBTztnQkFDdEQsSUFBSVosZ0JBQWdCO29CQUNsQixJQUFJLENBQUNhLGFBQWE7NEJBQ1V6Qjt3QkFBMUIsTUFBTTJCLG9CQUFvQjNCLEVBQUFBLCtCQUFBQSwrREFBU0EsQ0FBQzRCLGlCQUFpQixjQUEzQjVCLG1EQUFBQSxrQ0FBQUEsK0RBQVNBLE1BQTBCO3dCQUM3RCxNQUFNNkIsVUFBVSw4RUFBOEUsaUZBQWlGLHFGQUFxRjt3QkFDcFE5QiwyREFBS0EsQ0FBQyxHQUFhNEIsT0FBVkUs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N0M7Z0RBQUc7UUFBQ3JDO1FBQVVhO1FBQTRCSDtRQUFpQk47S0FBZTtJQUMxRSxNQUFNdUQsWUFBWXJFLG1GQUFpQkE7a0RBQUNrQyxDQUFBQTtZQUNsQ2pCLFdBQVdTLE9BQU8sR0FBR1E7WUFDckJGO1FBQ0Y7O0lBQ0EsT0FBTztRQUNMRztRQUNBa0M7SUFDRjtBQUNGO0dBbktnQjdEOztRQVNlRiw0RkFBdUJBO1FBSWhEQyx3RkFBd0JBO1FBeUM1QkosaUZBQWtCQTtRQXFHQUgsK0VBQWlCQTs7O0FBU3JDLFNBQVM0QixnQkFBZ0IwQyxJQUFJO0lBQzNCLE9BQU92RSxxRUFBYUEsQ0FBQ3VFLFNBQVNBLEtBQUtDLE9BQU8sS0FBSztBQUNqRDtBQUNBLFNBQVNkLG1CQUFtQmEsSUFBSTtJQUM5QixPQUFPRSxRQUFRRixDQUFBQSxpQkFBQUEsMkJBQUFBLEtBQU1DLE9BQU8sTUFBSyxRQUFPRCxpQkFBQUEsMkJBQUFBLEtBQU1HLElBQUk7QUFDcEQiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2ludGVybmFscy91c2UtYnV0dG9uL3VzZUJ1dHRvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlU3RhYmxlQ2FsbGJhY2snO1xuaW1wb3J0IHsgZXJyb3IgfSBmcm9tICdAYmFzZS11aS91dGlscy9lcnJvcic7XG5pbXBvcnQgeyBTYWZlUmVhY3QgfSBmcm9tICdAYmFzZS11aS91dGlscy9zYWZlUmVhY3QnO1xuaW1wb3J0IHsgdXNlSXNvTGF5b3V0RWZmZWN0IH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlSXNvTGF5b3V0RWZmZWN0JztcbmltcG9ydCB7IG1ha2VFdmVudFByZXZlbnRhYmxlLCBtZXJnZVByb3BzIH0gZnJvbSBcIi4uLy4uL21lcmdlLXByb3BzL2luZGV4LmpzXCI7XG5pbXBvcnQgeyB1c2VDb21wb3NpdGVSb290Q29udGV4dCB9IGZyb20gXCIuLi9jb21wb3NpdGUvcm9vdC9Db21wb3NpdGVSb290Q29udGV4dC5qc1wiO1xuaW1wb3J0IHsgdXNlRm9jdXNhYmxlV2hlbkRpc2FibGVkIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3VzZUZvY3VzYWJsZVdoZW5EaXNhYmxlZC5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUJ1dHRvbihwYXJhbWV0ZXJzID0ge30pIHtcbiAgY29uc3Qge1xuICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgZm9jdXNhYmxlV2hlbkRpc2FibGVkLFxuICAgIHRhYkluZGV4ID0gMCxcbiAgICBuYXRpdmU6IGlzTmF0aXZlQnV0dG9uID0gdHJ1ZSxcbiAgICBjb21wb3NpdGU6IGNvbXBvc2l0ZVByb3BcbiAgfSA9IHBhcmFtZXRlcnM7XG4gIGNvbnN0IGVsZW1lbnRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGNvbXBvc2l0ZVJvb3RDb250ZXh0ID0gdXNlQ29tcG9zaXRlUm9vdENvbnRleHQodHJ1ZSk7XG4gIGNvbnN0IGlzQ29tcG9zaXRlSXRlbSA9IGNvbXBvc2l0ZVByb3AgPz8gY29tcG9zaXRlUm9vdENvbnRleHQgIT09IHVuZGVmaW5lZDtcbiAgY29uc3Qge1xuICAgIHByb3BzOiBmb2N1c2FibGVXaGVuRGlzYWJsZWRQcm9wc1xuICB9ID0gdXNlRm9jdXNhYmxlV2hlbkRpc2FibGVkKHtcbiAgICBmb2N1c2FibGVXaGVuRGlzYWJsZWQsXG4gICAgZGlzYWJsZWQsXG4gICAgY29tcG9zaXRlOiBpc0NvbXBvc2l0ZUl0ZW0sXG4gICAgdGFiSW5kZXgsXG4gICAgaXNOYXRpdmVCdXR0b25cbiAgfSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICghZWxlbWVudFJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGlzQnV0dG9uVGFnID0gaXNCdXR0b25FbGVtZW50KGVsZW1lbnRSZWYuY3VycmVudCk7XG4gICAgICBpZiAoaXNOYXRpdmVCdXR0b24pIHtcbiAgICAgICAgaWYgKCFpc0J1dHRvblRhZykge1xuICAgICAgICAgIGNvbnN0IG93bmVyU3RhY2tNZXNzYWdlID0gU2FmZVJlYWN0LmNhcHR1cmVPd25lclN0YWNrPy4oKSB8fCAnJztcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gJ0EgY29tcG9uZW50IHRoYXQgYWN0cyBhcyBhIGJ1dHRvbiBleHBlY3RlZCBhIG5hdGl2ZSA8YnV0dG9uPiBiZWNhdXNlIHRoZSAnICsgJ2BuYXRpdmVCdXR0b25gIHByb3AgaXMgdHJ1ZS4gUmVuZGVyaW5nIGEgbm9uLTxidXR0b24+IHJlbW92ZXMgbmF0aXZlIGJ1dHRvbiAnICsgJ3NlbWFudGljcywgd2hpY2ggY2FuIGltcGFjdCBmb3JtcyBhbmQgYWNjZXNzaWJpbGl0eS4gVXNlIGEgcmVhbCA8YnV0dG9uPiBpbiB0aGUgJyArICdgcmVuZGVyYCBwcm9wLCBvciBzZXQgYG5hdGl2ZUJ1dHRvbmAgdG8gYGZhbHNlYC4nO1xuICAgICAgICAgIGVycm9yKGAke21lc3NhZ2V9JHtvd25lclN0YWNrTWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc0J1dHRvblRhZykge1xuICAgICAgICBjb25zdCBvd25lclN0YWNrTWVzc2FnZSA9IFNhZmVSZWFjdC5jYXB0dXJlT3duZXJTdGFjaz8uKCkgfHwgJyc7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSAnQSBjb21wb25lbnQgdGhhdCBhY3RzIGFzIGEgYnV0dG9uIGV4cGVjdGVkIGEgbm9uLTxidXR0b24+IGJlY2F1c2UgdGhlIGBuYXRpdmVCdXR0b25gICcgKyAncHJvcCBpcyBmYWxzZS4gUmVuZGVyaW5nIGEgPGJ1dHRvbj4ga2VlcHMgbmF0aXZlIGJlaGF2aW9yIHdoaWxlIEJhc2UgVUkgYXBwbGllcyAnICsgJ25vbi1uYXRpdmUgYXR0cmlidXRlcyBhbmQgaGFuZGxlcnMsIHdoaWNoIGNhbiBhZGQgdW5pbnRlbmRlZCBleHRyYSBhdHRyaWJ1dGVzIChzdWNoICcgKyAnYXMgYHJvbGVgIG9yIGBhcmlhLWRpc2FibGVkYCkuIFVzZSBhIG5vbi08YnV0dG9uPiBpbiB0aGUgYHJlbmRlcmAgcHJvcCwgb3Igc2V0ICcgKyAnYG5hdGl2ZUJ1dHRvbmAgdG8gYHRydWVgLic7XG4gICAgICAgIGVycm9yKGAke21lc3NhZ2V9JHtvd25lclN0YWNrTWVzc2FnZX1gKTtcbiAgICAgIH1cbiAgICB9LCBbaXNOYXRpdmVCdXR0b25dKTtcbiAgfVxuXG4gIC8vIGhhbmRsZXMgYSBkaXNhYmxlZCBjb21wb3NpdGUgYnV0dG9uIHJlbmRlcmluZyBhbm90aGVyIGJ1dHRvbiwgZS5nLlxuICAvLyA8VG9vbGJhci5CdXR0b24gZGlzYWJsZWQgcmVuZGVyPXs8TWVudS5UcmlnZ2VyIC8+fSAvPlxuICAvLyB0aGUgYGRpc2FibGVkYCBwcm9wIG5lZWRzIHRvIHBhc3MgdGhyb3VnaCAyIGB1c2VCdXR0b25gcyB0aGVuIGZpbmFsbHlcbiAgLy8gZGVsZXRlIHRoZSBgZGlzYWJsZWRgIGF0dHJpYnV0ZSBmcm9tIERPTVxuICBjb25zdCB1cGRhdGVEaXNhYmxlZCA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCBlbGVtZW50ID0gZWxlbWVudFJlZi5jdXJyZW50O1xuICAgIGlmICghaXNCdXR0b25FbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0NvbXBvc2l0ZUl0ZW0gJiYgZGlzYWJsZWQgJiYgZm9jdXNhYmxlV2hlbkRpc2FibGVkUHJvcHMuZGlzYWJsZWQgPT09IHVuZGVmaW5lZCAmJiBlbGVtZW50LmRpc2FibGVkKSB7XG4gICAgICBlbGVtZW50LmRpc2FibGVkID0gZmFsc2U7XG4gICAgfVxuICB9LCBbZGlzYWJsZWQsIGZvY3VzYWJsZVdoZW5EaXNhYmxlZFByb3BzLmRpc2FibGVkLCBpc0NvbXBvc2l0ZUl0ZW1dKTtcbiAgdXNlSXNvTGF5b3V0RWZmZWN0KHVwZGF0ZURpc2FibGVkLCBbdXBkYXRlRGlzYWJsZWRdKTtcbiAgY29uc3QgZ2V0QnV0dG9uUHJvcHMgPSBSZWFjdC51c2VDYWxsYmFjaygoZXh0ZXJuYWxQcm9wcyA9IHt9KSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb25DbGljazogZXh0ZXJuYWxPbkNsaWNrLFxuICAgICAgb25Nb3VzZURvd246IGV4dGVybmFsT25Nb3VzZURvd24sXG4gICAgICBvbktleVVwOiBleHRlcm5hbE9uS2V5VXAsXG4gICAgICBvbktleURvd246IGV4dGVybmFsT25LZXlEb3duLFxuICAgICAgb25Qb2ludGVyRG93bjogZXh0ZXJuYWxPblBvaW50ZXJEb3duLFxuICAgICAgLi4ub3RoZXJFeHRlcm5hbFByb3BzXG4gICAgfSA9IGV4dGVybmFsUHJvcHM7XG4gICAgY29uc3QgdHlwZSA9IGlzTmF0aXZlQnV0dG9uID8gJ2J1dHRvbicgOiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG1lcmdlUHJvcHMoe1xuICAgICAgdHlwZSxcbiAgICAgIG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZXh0ZXJuYWxPbkNsaWNrPy4oZXZlbnQpO1xuICAgICAgfSxcbiAgICAgIG9uTW91c2VEb3duKGV2ZW50KSB7XG4gICAgICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgICAgICBleHRlcm5hbE9uTW91c2VEb3duPy4oZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBtYWtlRXZlbnRQcmV2ZW50YWJsZShldmVudCk7XG4gICAgICAgIGV4dGVybmFsT25LZXlEb3duPy4oZXZlbnQpO1xuICAgICAgICBpZiAoZXZlbnQuYmFzZVVJSGFuZGxlclByZXZlbnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0N1cnJlbnRUYXJnZXQgPSBldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0O1xuICAgICAgICBjb25zdCBpc0J1dHRvbiA9IGlzQnV0dG9uRWxlbWVudChjdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgY29uc3QgaXNMaW5rID0gIWlzTmF0aXZlQnV0dG9uICYmIGlzVmFsaWRMaW5rRWxlbWVudChjdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgY29uc3Qgc2hvdWxkQ2xpY2sgPSBpc0N1cnJlbnRUYXJnZXQgJiYgKGlzTmF0aXZlQnV0dG9uID8gaXNCdXR0b24gOiAhaXNMaW5rKTtcbiAgICAgICAgY29uc3QgaXNFbnRlcktleSA9IGV2ZW50LmtleSA9PT0gJ0VudGVyJztcbiAgICAgICAgY29uc3QgaXNTcGFjZUtleSA9IGV2ZW50LmtleSA9PT0gJyAnO1xuICAgICAgICBjb25zdCByb2xlID0gY3VycmVudFRhcmdldC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgICAgICAgY29uc3QgaXNUZXh0TmF2aWdhdGlvblJvbGUgPSByb2xlPy5zdGFydHNXaXRoKCdtZW51aXRlbScpIHx8IHJvbGUgPT09ICdvcHRpb24nIHx8IHJvbGUgPT09ICdncmlkY2VsbCc7XG4gICAgICAgIGlmIChpc0N1cnJlbnRUYXJnZXQgJiYgaXNDb21wb3NpdGVJdGVtICYmIGlzU3BhY2VLZXkpIHtcbiAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCAmJiBpc1RleHROYXZpZ2F0aW9uUm9sZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIGlmIChpc0xpbmsgfHwgaXNOYXRpdmVCdXR0b24gJiYgaXNCdXR0b24pIHtcbiAgICAgICAgICAgIGN1cnJlbnRUYXJnZXQuY2xpY2soKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnRCYXNlVUlIYW5kbGVyKCk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzaG91bGRDbGljaykge1xuICAgICAgICAgICAgZXh0ZXJuYWxPbkNsaWNrPy4oZXZlbnQpO1xuICAgICAgICAgICAgZXZlbnQucHJldmVudEJhc2VVSUhhbmRsZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gS2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSBmb3IgbmF0aXZlIGFuZCBub24tbmF0aXZlIGVsZW1lbnRzLlxuICAgICAgICBpZiAoc2hvdWxkQ2xpY2spIHtcbiAgICAgICAgICBpZiAoIWlzTmF0aXZlQnV0dG9uICYmIChpc1NwYWNlS2V5IHx8IGlzRW50ZXJLZXkpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWlzTmF0aXZlQnV0dG9uICYmIGlzRW50ZXJLZXkpIHtcbiAgICAgICAgICAgIGV4dGVybmFsT25DbGljaz8uKGV2ZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBvbktleVVwKGV2ZW50KSB7XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNhbGxpbmcgcHJldmVudERlZmF1bHQgaW4ga2V5VXAgb24gYSA8YnV0dG9uPiB3aWxsIG5vdCBkaXNwYXRjaCBhIGNsaWNrIGV2ZW50IGlmIFNwYWNlIGlzIHByZXNzZWRcbiAgICAgICAgLy8gaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9wL3NhbmRib3gvYnV0dG9uLWtleXVwLXByZXZlbnRkZWZhdWx0LWRuN2YwXG4gICAgICAgIG1ha2VFdmVudFByZXZlbnRhYmxlKGV2ZW50KTtcbiAgICAgICAgZXh0ZXJuYWxPbktleVVwPy4oZXZlbnQpO1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTmF0aXZlQnV0dG9uICYmIGlzQ29tcG9zaXRlSXRlbSAmJiBpc0J1dHRvbkVsZW1lbnQoZXZlbnQuY3VycmVudFRhcmdldCkgJiYgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQuYmFzZVVJSGFuZGxlclByZXZlbnRlZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5vbiBpbnRlcmFjdGl2ZSBlbGVtZW50c1xuICAgICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmICFpc05hdGl2ZUJ1dHRvbiAmJiAhaXNDb21wb3NpdGVJdGVtICYmIGV2ZW50LmtleSA9PT0gJyAnKSB7XG4gICAgICAgICAgZXh0ZXJuYWxPbkNsaWNrPy4oZXZlbnQpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgb25Qb2ludGVyRG93bihldmVudCkge1xuICAgICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBleHRlcm5hbE9uUG9pbnRlckRvd24/LihldmVudCk7XG4gICAgICB9XG4gICAgfSwgIWlzTmF0aXZlQnV0dG9uID8ge1xuICAgICAgcm9sZTogJ2J1dHRvbidcbiAgICB9IDogdW5kZWZpbmVkLCBmb2N1c2FibGVXaGVuRGlzYWJsZWRQcm9wcywgb3RoZXJFeHRlcm5hbFByb3BzKTtcbiAgfSwgW2Rpc2FibGVkLCBmb2N1c2FibGVXaGVuRGlzYWJsZWRQcm9wcywgaXNDb21wb3NpdGVJdGVtLCBpc05hdGl2ZUJ1dHRvbl0pO1xuICBjb25zdCBidXR0b25SZWYgPSB1c2VTdGFibGVDYWxsYmFjayhlbGVtZW50ID0+IHtcbiAgICBlbGVtZW50UmVmLmN1cnJlbnQgPSBlbGVtZW50O1xuICAgIHVwZGF0ZURpc2FibGVkKCk7XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGdldEJ1dHRvblByb3BzLFxuICAgIGJ1dHRvblJlZlxuICB9O1xufVxuZnVuY3Rpb24gaXNCdXR0b25FbGVtZW50KGVsZW0pIHtcbiAgcmV0dXJuIGlzSFRNTEVsZW1lbnQoZWxlbSkgJiYgZWxlbS50YWdOYW1lID09PSAnQlVUVE9OJztcbn1cbmZ1bmN0aW9uIGlzVmFsaWRMaW5rRWxlbWVudChlbGVtKSB7XG4gIHJldHVybiBCb29sZWFuKGVsZW0/LnRhZ05hbWUgPT09ICdBJyAmJiBlbGVtPy5ocmVmKTtcbn0iXSwibmFtZXMiOlsiUmVhY3QiLCJpc0hUTUxFbGVtZW50IiwidXNlU3RhYmxlQ2FsbGJhY2siLCJlcnJvciIsIlNhZmVSZWFjdCIsInVzZUlzb0xheW91dEVmZmVjdCIsIm1ha2VFdmVudFByZXZlbnRhYmxlIiwibWVyZ2VQcm9wcyIsInVzZUNvbXBvc2l0ZVJvb3RDb250ZXh0IiwidXNlRm9jdXNhYmxlV2hlbkRpc2FibGVkIiwidXNlQnV0dG9uIiwicGFyYW1ldGVycyIsImRpc2FibGVkIiwiZm9jdXNhYmxlV2hlbkRpc2FibGVkIiwidGFiSW5kZXgiLCJuYXRpdmUiLCJpc05hdGl2ZUJ1dHRvbiIsImNvbXBvc2l0ZSIsImNvbXBvc2l0ZVByb3AiLCJlbGVtZW50UmVmIiwidXNlUmVmIiwiY29tcG9zaXRlUm9vdENvbnRleHQiLCJpc0NvbXBvc2l0ZUl0ZW0iLCJ1bmRlZmluZWQiLCJwcm9wcyIsImZvY3VzYWJsZVdoZW5EaXNhYmxlZFByb3BzIiwicHJvY2VzcyIsInVzZUVmZmVjdCIsImN1cnJlbnQiLCJpc0J1dHRvblRhZyIsImlzQnV0dG9uRWxlbWVudCIsIm93bmVyU3RhY2tNZXNzYWdlIiwiY2FwdHVyZU93bmVyU3RhY2siLCJtZXNzYWdlIiwidXBkYXRlRGlzYWJsZWQiLCJ1c2VDYWxsYmFjayIsImVsZW1lbnQiLCJnZXRCdXR0b25Qcm9wcyIsImV4dGVybmFsUHJvcHMiLCJvbkNsaWNrIiwiZXh0ZXJuYWxPbkNsaWNrIiwib25Nb3VzZURvd24iLCJleHRlcm5hbE9uTW91c2VEb3duIiwib25LZXlVcCIsImV4dGVybmFsT25LZXlVcCIsIm9uS2V5RG93biIsImV4dGVybmFsT25LZXlEb3duIiwib25Qb2ludGVyRG93biIsImV4dGVybmFsT25Qb2ludGVyRG93biIsIm90aGVyRXh0ZXJuYWxQcm9wcyIsInR5cGUiLCJldmVudCIsInByZXZlbnREZWZhdWx0IiwiYmFzZVVJSGFuZGxlclByZXZlbnRlZCIsImlzQ3VycmVudFRhcmdldCIsInRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJpc0J1dHRvbiIsImlzTGluayIsImlzVmFsaWRMaW5rRWxlbWVudCIsInNob3VsZENsaWNrIiwiaXNFbnRlcktleSIsImtleSIsImlzU3BhY2VLZXkiLCJyb2xlIiwiZ2V0QXR0cmlidXRlIiwiaXNUZXh0TmF2aWdhdGlvblJvbGUiLCJzdGFydHNXaXRoIiwiZGVmYXVsdFByZXZlbnRlZCIsImNsaWNrIiwicHJldmVudEJhc2VVSUhhbmRsZXIiLCJidXR0b25SZWYiLCJlbGVtIiwidGFnTmFtZSIsIkJvb2xlYW4iLCJocmVmIl0sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/use-button/useButton.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useAnimationsFinished.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/useAnimationsFinished.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((__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 */ useAnimationsFinished: () => (/* binding */ useAnimationsFinished)\n/* harmony export */ });\n/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/index.js\");\n/* harmony import */ var _base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @base-ui/utils/useAnimationFrame */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useAnimationFrame.js\");\n/* harmony import */ var _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/utils/useStableCallback */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useStableCallback.js\");\n/* harmony import */ var _utils_resolveRef_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/resolveRef.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/resolveRef.js\");\n/* harmony import */ var _stateAttributesMapping_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./stateAttributesMapping.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/stateAttributesMapping.js\");\n/* __next_internal_client_entry_do_not_use__ useAnimationsFinished auto */ var _s = $RefreshSig$();\n\n\n\n\n\n/**\n * Executes a function once all animations have finished on the provided element.\n * @param elementOrRef - The element to watch for animations.\n * @param waitForStartingStyleRemoved - Whether to wait for [data-starting-style] to be removed before checking for animations.\n * @param treatAbortedAsFinished - Whether to treat aborted animations as finished. If `false`, and there are aborted animations,\n * the function will check again if any new animations have started and wait for them to finish.\n * @returns A function that takes a callback to execute once all animations have finished, and an optional AbortSignal to abort the callback\n */ function useAnimationsFinished(elementOrRef) {\n let waitForStartingStyleRemoved = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false, treatAbortedAsFinished = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true;\n _s();\n const frame = (0,_base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_1__.useAnimationFrame)();\n return (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback)({\n \"useAnimationsFinished.useStableCallback\": function(fnToExecute) {\n let /**\n * An optional [AbortSignal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) that\n * can be used to abort `fnToExecute` before all the animations have finished.\n * @default null\n */ signal = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;\n frame.cancel();\n const element = (0,_utils_resolveRef_js__WEBPACK_IMPORTED_MODULE_3__.resolveRef)(elementOrRef);\n if (element == null) {\n return;\n }\n const resolvedElement = element;\n const done = {\n \"useAnimationsFinished.useStableCallback.done\": ()=>{\n // Synchronously flush the unmounting of the component so that the browser doesn't\n // paint: https://github.com/mui/base-ui/issues/979\n react_dom__WEBPACK_IMPORTED_MODULE_0__.flushSync(fnToExecute);\n }\n }[\"useAnimationsFinished.useStableCallback.done\"];\n if (typeof resolvedElement.getAnimations !== 'function' || globalThis.BASE_UI_ANIMATIONS_DISABLED) {\n fnToExecute();\n return;\n }\n function exec() {\n Promise.all(resolvedElement.getAnimations().map({\n \"useAnimationsFinished.useStableCallback.exec\": (animation)=>animation.finished\n }[\"useAnimationsFinished.useStableCallback.exec\"])).then({\n \"useAnimationsFinished.useStableCallback.exec\": ()=>{\n if (!(signal === null || signal === void 0 ? void 0 : signal.aborted)) {\n done();\n }\n }\n }[\"useAnimationsFinished.useStableCallback.exec\"]).catch({\n \"useAnimationsFinished.useStableCallback.exec\": ()=>{\n if (treatAbortedAsFinished) {\n if (!(signal === null || signal === void 0 ? void 0 : signal.aborted)) {\n done();\n }\n return;\n }\n const currentAnimations = resolvedElement.getAnimations();\n if (!(signal === null || signal === void 0 ? void 0 : signal.aborted) && currentAnimations.length > 0 && currentAnimations.some({\n \"useAnimationsFinished.useStableCallback.exec\": (animation)=>animation.pending || animation.playState !== 'finished'\n }[\"useAnimationsFinished.useStableCallback.exec\"])) {\n // Sometimes animations can be aborted because a property they depend on changes while the animation plays.\n // In such cases, we need to re-check if any new animations have started.\n exec();\n }\n }\n }[\"useAnimationsFinished.useStableCallback.exec\"]);\n }\n if (waitForStartingStyleRemoved) {\n const startingStyleAttribute = _stateAttributesMapping_js__WEBPACK_IMPORTED_MODULE_4__.TransitionStatusDataAttributes.startingStyle;\n // If `[data-starting-style]` isn't present, fall back to waiting one more frame\n // to give \"open\" animations a chance to be registered.\n if (!resolvedElement.hasAttribute(startingStyleAttribute)) {\n frame.request(exec);\n return;\n }\n // Wait for `[data-starting-style]` to have been removed.\n const attributeObserver = new MutationObserver({\n \"useAnimationsFinished.useStableCallback\": ()=>{\n if (!resolvedElement.hasAttribute(startingStyleAttribute)) {\n attributeObserver.disconnect();\n exec();\n }\n }\n }[\"useAnimationsFinished.useStableCallback\"]);\n attributeObserver.observe(resolvedElement, {\n attributes: true,\n attributeFilter: [\n startingStyleAttribute\n ]\n });\n signal === null || signal === void 0 ? void 0 : signal.addEventListener('abort', {\n \"useAnimationsFinished.useStableCallback\": ()=>attributeObserver.disconnect()\n }[\"useAnimationsFinished.useStableCallback\"], {\n once: true\n });\n return;\n }\n frame.request(exec);\n }\n }[\"useAnimationsFinished.useStableCallback\"]);\n}\n_s(useAnimationsFinished, \"B4k8JMJbvq3SP+xls9kmMUwcAs0=\", false, function() {\n return [\n _base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_1__.useAnimationFrame,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_2__.useStableCallback\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL3VzZUFuaW1hdGlvbnNGaW5pc2hlZC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBRXNDO0FBQytCO0FBQ0E7QUFDakI7QUFDeUI7QUFFN0U7Ozs7Ozs7Q0FPQyxHQUNNLFNBQVNLLHNCQUFzQkMsWUFBWTtRQUFFQyw4QkFBQUEsaUVBQThCLE9BQU9DLHlCQUFBQSxpRUFBeUI7O0lBQ2hILE1BQU1DLFFBQVFSLG1GQUFpQkE7SUFDL0IsT0FBT0MsbUZBQWlCQTttREFBQyxTQUFDUTtnQkFDMUI7Ozs7R0FJQyxHQUNEQywwRUFBUztZQUNQRixNQUFNRyxNQUFNO1lBQ1osTUFBTUMsVUFBVVYsZ0VBQVVBLENBQUNHO1lBQzNCLElBQUlPLFdBQVcsTUFBTTtnQkFDbkI7WUFDRjtZQUNBLE1BQU1DLGtCQUFrQkQ7WUFDeEIsTUFBTUU7Z0VBQU87b0JBQ1gsa0ZBQWtGO29CQUNsRixtREFBbUQ7b0JBQ25EZixnREFBa0IsQ0FBQ1U7Z0JBQ3JCOztZQUNBLElBQUksT0FBT0ksZ0JBQWdCRyxhQUFhLEtBQUssY0FBY0MsV0FBV0MsMkJBQTJCLEVBQUU7Z0JBQ2pHVDtnQkFDQTtZQUNGO1lBQ0EsU0FBU1U7Z0JBQ1BDLFFBQVFDLEdBQUcsQ0FBQ1IsZ0JBQWdCRyxhQUFhLEdBQUdNLEdBQUc7b0VBQUNDLENBQUFBLFlBQWFBLFVBQVVDLFFBQVE7b0VBQUdDLElBQUk7b0VBQUM7d0JBQ3JGLElBQUksRUFBQ2YsbUJBQUFBLDZCQUFBQSxPQUFRZ0IsT0FBTyxHQUFFOzRCQUNwQlo7d0JBQ0Y7b0JBQ0Y7bUVBQUdhLEtBQUs7b0VBQUM7d0JBQ1AsSUFBSXBCLHdCQUF3Qjs0QkFDMUIsSUFBSSxFQUFDRyxtQkFBQUEsNkJBQUFBLE9BQVFnQixPQUFPLEdBQUU7Z0NBQ3BCWjs0QkFDRjs0QkFDQTt3QkFDRjt3QkFDQSxNQUFNYyxvQkFBb0JmLGdCQUFnQkcsYUFBYTt3QkFDdkQsSUFBSSxFQUFDTixtQkFBQUEsNkJBQUFBLE9BQVFnQixPQUFPLEtBQUlFLGtCQUFrQkMsTUFBTSxHQUFHLEtBQUtELGtCQUFrQkUsSUFBSTs0RUFBQ1AsQ0FBQUEsWUFBYUEsVUFBVVEsT0FBTyxJQUFJUixVQUFVUyxTQUFTLEtBQUs7NEVBQWE7NEJBQ3BKLDJHQUEyRzs0QkFDM0cseUVBQXlFOzRCQUN6RWI7d0JBQ0Y7b0JBQ0Y7O1lBQ0Y7WUFDQSxJQUFJYiw2QkFBNkI7Z0JBQy9CLE1BQU0yQix5QkFBeUI5QixzRkFBOEJBLENBQUMrQixhQUFhO2dCQUUzRSxnRkFBZ0Y7Z0JBQ2hGLHVEQUF1RDtnQkFDdkQsSUFBSSxDQUFDckIsZ0JBQWdCc0IsWUFBWSxDQUFDRix5QkFBeUI7b0JBQ3pEekIsTUFBTTRCLE9BQU8sQ0FBQ2pCO29CQUNkO2dCQUNGO2dCQUVBLHlEQUF5RDtnQkFDekQsTUFBTWtCLG9CQUFvQixJQUFJQzsrREFBaUI7d0JBQzdDLElBQUksQ0FBQ3pCLGdCQUFnQnNCLFlBQVksQ0FBQ0YseUJBQXlCOzRCQUN6REksa0JBQWtCRSxVQUFVOzRCQUM1QnBCO3dCQUNGO29CQUNGOztnQkFDQWtCLGtCQUFrQkcsT0FBTyxDQUFDM0IsaUJBQWlCO29CQUN6QzRCLFlBQVk7b0JBQ1pDLGlCQUFpQjt3QkFBQ1Q7cUJBQXVCO2dCQUMzQztnQkFDQXZCLG1CQUFBQSw2QkFBQUEsT0FBUWlDLGdCQUFnQixDQUFDOytEQUFTLElBQU1OLGtCQUFrQkUsVUFBVTs4REFBSTtvQkFDdEVLLE1BQU07Z0JBQ1I7Z0JBQ0E7WUFDRjtZQUNBcEMsTUFBTTRCLE9BQU8sQ0FBQ2pCO1FBQ2hCOztBQUNGO0dBeEVnQmY7O1FBQ0FKLCtFQUFpQkE7UUFDeEJDLCtFQUFpQkEiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2ludGVybmFscy91c2VBbmltYXRpb25zRmluaXNoZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IHsgdXNlQW5pbWF0aW9uRnJhbWUgfSBmcm9tICdAYmFzZS11aS91dGlscy91c2VBbmltYXRpb25GcmFtZSc7XG5pbXBvcnQgeyB1c2VTdGFibGVDYWxsYmFjayB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZVN0YWJsZUNhbGxiYWNrJztcbmltcG9ydCB7IHJlc29sdmVSZWYgfSBmcm9tIFwiLi4vdXRpbHMvcmVzb2x2ZVJlZi5qc1wiO1xuaW1wb3J0IHsgVHJhbnNpdGlvblN0YXR1c0RhdGFBdHRyaWJ1dGVzIH0gZnJvbSBcIi4vc3RhdGVBdHRyaWJ1dGVzTWFwcGluZy5qc1wiO1xuXG4vKipcbiAqIEV4ZWN1dGVzIGEgZnVuY3Rpb24gb25jZSBhbGwgYW5pbWF0aW9ucyBoYXZlIGZpbmlzaGVkIG9uIHRoZSBwcm92aWRlZCBlbGVtZW50LlxuICogQHBhcmFtIGVsZW1lbnRPclJlZiAtIFRoZSBlbGVtZW50IHRvIHdhdGNoIGZvciBhbmltYXRpb25zLlxuICogQHBhcmFtIHdhaXRGb3JTdGFydGluZ1N0eWxlUmVtb3ZlZCAtIFdoZXRoZXIgdG8gd2FpdCBmb3IgW2RhdGEtc3RhcnRpbmctc3R5bGVdIHRvIGJlIHJlbW92ZWQgYmVmb3JlIGNoZWNraW5nIGZvciBhbmltYXRpb25zLlxuICogQHBhcmFtIHRyZWF0QWJvcnRlZEFzRmluaXNoZWQgLSBXaGV0aGVyIHRvIHRyZWF0IGFib3J0ZWQgYW5pbWF0aW9ucyBhcyBmaW5pc2hlZC4gSWYgYGZhbHNlYCwgYW5kIHRoZXJlIGFyZSBhYm9ydGVkIGFuaW1hdGlvbnMsXG4gKiAgIHRoZSBmdW5jdGlvbiB3aWxsIGNoZWNrIGFnYWluIGlmIGFueSBuZXcgYW5pbWF0aW9ucyBoYXZlIHN0YXJ0ZWQgYW5kIHdhaXQgZm9yIHRoZW0gdG8gZmluaXNoLlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgY2FsbGJhY2sgdG8gZXhlY3V0ZSBvbmNlIGFsbCBhbmltYXRpb25zIGhhdmUgZmluaXNoZWQsIGFuZCBhbiBvcHRpb25hbCBBYm9ydFNpZ25hbCB0byBhYm9ydCB0aGUgY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFuaW1hdGlvbnNGaW5pc2hlZChlbGVtZW50T3JSZWYsIHdhaXRGb3JTdGFydGluZ1N0eWxlUmVtb3ZlZCA9IGZhbHNlLCB0cmVhdEFib3J0ZWRBc0ZpbmlzaGVkID0gdHJ1ZSkge1xuICBjb25zdCBmcmFtZSA9IHVzZUFuaW1hdGlvbkZyYW1lKCk7XG4gIHJldHVybiB1c2VTdGFibGVDYWxsYmFjaygoZm5Ub0V4ZWN1dGUsXG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBbQWJvcnRTaWduYWxdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9BYm9ydFNpZ25hbCkgdGhhdFxuICAgKiBjYW4gYmUgdXNlZCB0byBhYm9ydCBgZm5Ub0V4ZWN1dGVgIGJlZm9yZSBhbGwgdGhlIGFuaW1hdGlvbnMgaGF2ZSBmaW5pc2hlZC5cbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgc2lnbmFsID0gbnVsbCkgPT4ge1xuICAgIGZyYW1lLmNhbmNlbCgpO1xuICAgIGNvbnN0IGVsZW1lbnQgPSByZXNvbHZlUmVmKGVsZW1lbnRPclJlZik7XG4gICAgaWYgKGVsZW1lbnQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZXNvbHZlZEVsZW1lbnQgPSBlbGVtZW50O1xuICAgIGNvbnN0IGRvbmUgPSAoKSA9PiB7XG4gICAgICAvLyBTeW5jaHJvbm91c2x5IGZsdXNoIHRoZSB1bm1vdW50aW5nIG9mIHRoZSBjb21wb25lbnQgc28gdGhhdCB0aGUgYnJvd3NlciBkb2Vzbid0XG4gICAgICAvLyBwYWludDogaHR0cHM6Ly9naXRodWIuY29tL211aS9iYXNlLXVpL2lzc3Vlcy85NzlcbiAgICAgIFJlYWN0RE9NLmZsdXNoU3luYyhmblRvRXhlY3V0ZSk7XG4gICAgfTtcbiAgICBpZiAodHlwZW9mIHJlc29sdmVkRWxlbWVudC5nZXRBbmltYXRpb25zICE9PSAnZnVuY3Rpb24nIHx8IGdsb2JhbFRoaXMuQkFTRV9VSV9BTklNQVRJT05TX0RJU0FCTEVEKSB7XG4gICAgICBmblRvRXhlY3V0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmdW5jdGlvbiBleGVjKCkge1xuICAgICAgUHJvbWlzZS5hbGwocmVzb2x2ZWRFbGVtZW50LmdldEFuaW1hdGlvbnMoKS5tYXAoYW5pbWF0aW9uID0+IGFuaW1hdGlvbi5maW5pc2hlZCkpLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAoIXNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfVxuICAgICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgICBpZiAodHJlYXRBYm9ydGVkQXNGaW5pc2hlZCkge1xuICAgICAgICAgIGlmICghc2lnbmFsPy5hYm9ydGVkKSB7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50QW5pbWF0aW9ucyA9IHJlc29sdmVkRWxlbWVudC5nZXRBbmltYXRpb25zKCk7XG4gICAgICAgIGlmICghc2lnbmFsPy5hYm9ydGVkICYmIGN1cnJlbnRBbmltYXRpb25zLmxlbmd0aCA+IDAgJiYgY3VycmVudEFuaW1hdGlvbnMuc29tZShhbmltYXRpb24gPT4gYW5pbWF0aW9uLnBlbmRpbmcgfHwgYW5pbWF0aW9uLnBsYXlTdGF0ZSAhPT0gJ2ZpbmlzaGVkJykpIHtcbiAgICAgICAgICAvLyBTb21ldGltZXMgYW5pbWF0aW9ucyBjYW4gYmUgYWJvcnRlZCBiZWNhdXNlIGEgcHJvcGVydHkgdGhleSBkZXBlbmQgb24gY2hhbmdlcyB3aGlsZSB0aGUgYW5pbWF0aW9uIHBsYXlzLlxuICAgICAgICAgIC8vIEluIHN1Y2ggY2FzZXMsIHdlIG5lZWQgdG8gcmUtY2hlY2sgaWYgYW55IG5ldyBhbmltYXRpb25zIGhhdmUgc3RhcnRlZC5cbiAgICAgICAgICBleGVjKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAod2FpdEZvclN0YXJ0aW5nU3R5bGVSZW1vdmVkKSB7XG4gICAgICBjb25zdCBzdGFydGluZ1N0eWxlQXR0cmlidXRlID0gVHJhbnNpdGlvblN0YXR1c0RhdGFBdHRyaWJ1dGVzLnN0YXJ0aW5nU3R5bGU7XG5cbiAgICAgIC8vIElmIGBbZGF0YS1zdGFydGluZy1zdHlsZV1gIGlzbid0IHByZXNlbnQsIGZhbGwgYmFjayB0byB3YWl0aW5nIG9uZSBtb3JlIGZyYW1lXG4gICAgICAvLyB0byBnaXZlIFwib3BlblwiIGFuaW1hdGlvbnMgYSBjaGFuY2UgdG8gYmUgcmVnaXN0ZXJlZC5cbiAgICAgIGlmICghcmVzb2x2ZWRFbGVtZW50Lmhhc0F0dHJpYnV0ZShzdGFydGluZ1N0eWxlQXR0cmlidXRlKSkge1xuICAgICAgICBmcmFtZS5yZXF1ZXN0KGV4ZWMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIFdhaXQgZm9yIGBbZGF0YS1zdGFydGluZy1zdHlsZV1gIHRvIGhhdmUgYmVlbiByZW1vdmVkLlxuICAgICAgY29uc3QgYXR0cmlidXRlT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgICAgIGlmICghcmVzb2x2ZWRFbGVtZW50Lmhhc0F0dHJpYnV0ZShzdGFydGluZ1N0eWxlQXR0cmlidXRlKSkge1xuICAgICAgICAgIGF0dHJpYnV0ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICBleGVjKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgYXR0cmlidXRlT2JzZXJ2ZXIub2JzZXJ2ZShyZXNvbHZlZEVsZW1lbnQsIHtcbiAgICAgICAgYXR0cmlidXRlczogdHJ1ZSxcbiAgICAgICAgYXR0cmlidXRlRmlsdGVyOiBbc3RhcnRpbmdTdHlsZUF0dHJpYnV0ZV1cbiAgICAgIH0pO1xuICAgICAgc2lnbmFsPy5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsICgpID0+IGF0dHJpYnV0ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKSwge1xuICAgICAgICBvbmNlOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZnJhbWUucmVxdWVzdChleGVjKTtcbiAgfSk7XG59Il0sIm5hbWVzIjpbIlJlYWN0RE9NIiwidXNlQW5pbWF0aW9uRnJhbWUiLCJ1c2VTdGFibGVDYWxsYmFjayIsInJlc29sdmVSZWYiLCJUcmFuc2l0aW9uU3RhdHVzRGF0YUF0dHJpYnV0ZXMiLCJ1c2VBbmltYXRpb25zRmluaXNoZWQiLCJlbGVtZW50T3JSZWYiLCJ3YWl0Rm9yU3RhcnRpbmdTdHlsZVJlbW92ZWQiLCJ0cmVhdEFib3J0ZWRBc0ZpbmlzaGVkIiwiZnJhbWUiLCJmblRvRXhlY3V0ZSIsInNpZ25hbCIsImNhbmNlbCIsImVsZW1lbnQiLCJyZXNvbHZlZEVsZW1lbnQiLCJkb25lIiwiZmx1c2hTeW5jIiwiZ2V0QW5pbWF0aW9ucyIsImdsb2JhbFRoaXMiLCJCQVNFX1VJX0FOSU1BVElPTlNfRElTQUJMRUQiLCJleGVjIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsImFuaW1hdGlvbiIsImZpbmlzaGVkIiwidGhlbiIsImFib3J0ZWQiLCJjYXRjaCIsImN1cnJlbnRBbmltYXRpb25zIiwibGVuZ3RoIiwic29tZSIsInBlbmRpbmciLCJwbGF5U3RhdGUiLCJzdGFydGluZ1N0eWxlQXR0cmlidXRlIiwic3RhcnRpbmdTdHlsZSIsImhhc0F0dHJpYnV0ZSIsInJlcXVlc3QiLCJhdHRyaWJ1dGVPYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJkaXNjb25uZWN0Iiwib2JzZXJ2ZSIsImF0dHJpYnV0ZXMiLCJhdHRyaWJ1dGVGaWx0ZXIiLCJhZGRFdmVudExpc3RlbmVyIiwib25jZSJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useAnimationsFinished.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useBaseUiId.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/useBaseUiId.js ***!
|
||
\******************************************************************/
|
||
/***/ ((__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 */ useBaseUiId: () => (/* binding */ useBaseUiId)\n/* harmony export */ });\n/* harmony import */ var _base_ui_utils_useId__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @base-ui/utils/useId */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useId.js\");\n/* __next_internal_client_entry_do_not_use__ useBaseUiId auto */ var _s = $RefreshSig$();\n\n/**\n * Wraps `useId` and prefixes generated `id`s with `base-ui-`\n * @param {string | undefined} idOverride overrides the generated id when provided\n * @returns {string | undefined}\n */ function useBaseUiId(idOverride) {\n _s();\n return (0,_base_ui_utils_useId__WEBPACK_IMPORTED_MODULE_0__.useId)(idOverride, 'base-ui');\n}\n_s(useBaseUiId, \"xfMyHNFebGjSN1/YPqrD8z5EdLc=\", false, function() {\n return [\n _base_ui_utils_useId__WEBPACK_IMPORTED_MODULE_0__.useId\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL3VzZUJhc2VVaUlkLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUU2QztBQUU3Qzs7OztDQUlDLEdBQ00sU0FBU0MsWUFBWUMsVUFBVTs7SUFDcEMsT0FBT0YsMkRBQUtBLENBQUNFLFlBQVk7QUFDM0I7R0FGZ0JEOztRQUNQRCx1REFBS0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2ludGVybmFscy91c2VCYXNlVWlJZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVzZUlkIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlSWQnO1xuXG4vKipcbiAqIFdyYXBzIGB1c2VJZGAgYW5kIHByZWZpeGVzIGdlbmVyYXRlZCBgaWRgcyB3aXRoIGBiYXNlLXVpLWBcbiAqIEBwYXJhbSB7c3RyaW5nIHwgdW5kZWZpbmVkfSBpZE92ZXJyaWRlIG92ZXJyaWRlcyB0aGUgZ2VuZXJhdGVkIGlkIHdoZW4gcHJvdmlkZWRcbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VCYXNlVWlJZChpZE92ZXJyaWRlKSB7XG4gIHJldHVybiB1c2VJZChpZE92ZXJyaWRlLCAnYmFzZS11aScpO1xufSJdLCJuYW1lcyI6WyJ1c2VJZCIsInVzZUJhc2VVaUlkIiwiaWRPdmVycmlkZSJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useBaseUiId.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useOpenChangeComplete.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/useOpenChangeComplete.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((__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 */ useOpenChangeComplete: () => (/* binding */ useOpenChangeComplete)\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 _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @base-ui/utils/useStableCallback */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useStableCallback.js\");\n/* harmony import */ var _useAnimationsFinished_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./useAnimationsFinished.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useAnimationsFinished.js\");\n/* __next_internal_client_entry_do_not_use__ useOpenChangeComplete auto */ var _s = $RefreshSig$();\n\n\n\n/**\n * Calls the provided function when the CSS open/close animation or transition completes.\n */ function useOpenChangeComplete(parameters) {\n _s();\n const { enabled = true, open, ref, onComplete: onCompleteParam } = parameters;\n const onComplete = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_1__.useStableCallback)(onCompleteParam);\n const runOnceAnimationsFinish = (0,_useAnimationsFinished_js__WEBPACK_IMPORTED_MODULE_2__.useAnimationsFinished)(ref, open, false);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"useOpenChangeComplete.useEffect\": ()=>{\n if (!enabled) {\n return undefined;\n }\n const abortController = new AbortController();\n runOnceAnimationsFinish(onComplete, abortController.signal);\n return ({\n \"useOpenChangeComplete.useEffect\": ()=>{\n abortController.abort();\n }\n })[\"useOpenChangeComplete.useEffect\"];\n }\n }[\"useOpenChangeComplete.useEffect\"], [\n enabled,\n open,\n onComplete,\n runOnceAnimationsFinish\n ]);\n}\n_s(useOpenChangeComplete, \"bQYH6bt/1D6TX3RgDEP8Lx3vvTs=\", false, function() {\n return [\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_1__.useStableCallback,\n _useAnimationsFinished_js__WEBPACK_IMPORTED_MODULE_2__.useAnimationsFinished\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL3VzZU9wZW5DaGFuZ2VDb21wbGV0ZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUUrQjtBQUNzQztBQUNGO0FBRW5FOztDQUVDLEdBQ00sU0FBU0csc0JBQXNCQyxVQUFVOztJQUM5QyxNQUFNLEVBQ0pDLFVBQVUsSUFBSSxFQUNkQyxJQUFJLEVBQ0pDLEdBQUcsRUFDSEMsWUFBWUMsZUFBZSxFQUM1QixHQUFHTDtJQUNKLE1BQU1JLGFBQWFQLG1GQUFpQkEsQ0FBQ1E7SUFDckMsTUFBTUMsMEJBQTBCUixnRkFBcUJBLENBQUNLLEtBQUtELE1BQU07SUFDakVOLDRDQUFlOzJDQUFDO1lBQ2QsSUFBSSxDQUFDSyxTQUFTO2dCQUNaLE9BQU9PO1lBQ1Q7WUFDQSxNQUFNQyxrQkFBa0IsSUFBSUM7WUFDNUJKLHdCQUF3QkYsWUFBWUssZ0JBQWdCRSxNQUFNO1lBQzFEO21EQUFPO29CQUNMRixnQkFBZ0JHLEtBQUs7Z0JBQ3ZCOztRQUNGOzBDQUFHO1FBQUNYO1FBQVNDO1FBQU1FO1FBQVlFO0tBQXdCO0FBQ3pEO0dBbkJnQlA7O1FBT0tGLCtFQUFpQkE7UUFDSkMsNEVBQXFCQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL3VzZU9wZW5DaGFuZ2VDb21wbGV0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlU3RhYmxlQ2FsbGJhY2snO1xuaW1wb3J0IHsgdXNlQW5pbWF0aW9uc0ZpbmlzaGVkIH0gZnJvbSBcIi4vdXNlQW5pbWF0aW9uc0ZpbmlzaGVkLmpzXCI7XG5cbi8qKlxuICogQ2FsbHMgdGhlIHByb3ZpZGVkIGZ1bmN0aW9uIHdoZW4gdGhlIENTUyBvcGVuL2Nsb3NlIGFuaW1hdGlvbiBvciB0cmFuc2l0aW9uIGNvbXBsZXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9wZW5DaGFuZ2VDb21wbGV0ZShwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHtcbiAgICBlbmFibGVkID0gdHJ1ZSxcbiAgICBvcGVuLFxuICAgIHJlZixcbiAgICBvbkNvbXBsZXRlOiBvbkNvbXBsZXRlUGFyYW1cbiAgfSA9IHBhcmFtZXRlcnM7XG4gIGNvbnN0IG9uQ29tcGxldGUgPSB1c2VTdGFibGVDYWxsYmFjayhvbkNvbXBsZXRlUGFyYW0pO1xuICBjb25zdCBydW5PbmNlQW5pbWF0aW9uc0ZpbmlzaCA9IHVzZUFuaW1hdGlvbnNGaW5pc2hlZChyZWYsIG9wZW4sIGZhbHNlKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICBydW5PbmNlQW5pbWF0aW9uc0ZpbmlzaChvbkNvbXBsZXRlLCBhYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgfTtcbiAgfSwgW2VuYWJsZWQsIG9wZW4sIG9uQ29tcGxldGUsIHJ1bk9uY2VBbmltYXRpb25zRmluaXNoXSk7XG59Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlU3RhYmxlQ2FsbGJhY2siLCJ1c2VBbmltYXRpb25zRmluaXNoZWQiLCJ1c2VPcGVuQ2hhbmdlQ29tcGxldGUiLCJwYXJhbWV0ZXJzIiwiZW5hYmxlZCIsIm9wZW4iLCJyZWYiLCJvbkNvbXBsZXRlIiwib25Db21wbGV0ZVBhcmFtIiwicnVuT25jZUFuaW1hdGlvbnNGaW5pc2giLCJ1c2VFZmZlY3QiLCJ1bmRlZmluZWQiLCJhYm9ydENvbnRyb2xsZXIiLCJBYm9ydENvbnRyb2xsZXIiLCJzaWduYWwiLCJhYm9ydCJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useOpenChangeComplete.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useRenderElement.js":
|
||
/*!***********************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/useRenderElement.js ***!
|
||
\***********************************************************************/
|
||
/***/ ((__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 */ useRenderElement: () => (/* binding */ useRenderElement)\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 _base_ui_utils_useMergedRefs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @base-ui/utils/useMergedRefs */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useMergedRefs.js\");\n/* harmony import */ var _base_ui_utils_getReactElementRef__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @base-ui/utils/getReactElementRef */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/getReactElementRef.js\");\n/* harmony import */ var _base_ui_utils_mergeObjects__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @base-ui/utils/mergeObjects */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/mergeObjects.js\");\n/* harmony import */ var _base_ui_utils_warn__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @base-ui/utils/warn */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/warn.js\");\n/* harmony import */ var _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @base-ui/utils/empty */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js\");\n/* harmony import */ var _getStateAttributesProps_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./getStateAttributesProps.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/getStateAttributesProps.js\");\n/* harmony import */ var _utils_resolveClassName_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../utils/resolveClassName.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/resolveClassName.js\");\n/* harmony import */ var _utils_resolveStyle_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../utils/resolveStyle.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/resolveStyle.js\");\n/* harmony import */ var _merge_props_index_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../merge-props/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/merge-props/mergeProps.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Renders a Base UI element.\n *\n * @param element The default HTML element to render. Can be overridden by the `render` prop.\n * @param componentProps An object containing the `render` and `className` props to be used for element customization. Other props are ignored.\n * @param params Additional parameters for rendering the element.\n */\nfunction useRenderElement(element, componentProps, params = {}) {\n const renderProp = componentProps.render;\n const outProps = useRenderElementProps(componentProps, params);\n if (params.enabled === false) {\n return null;\n }\n const state = params.state ?? _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJECT;\n return evaluateRenderProp(element, renderProp, outProps, state);\n}\n\n/**\n * Computes render element final props.\n */\nfunction useRenderElementProps(componentProps, params = {}) {\n const {\n className: classNameProp,\n style: styleProp,\n render: renderProp\n } = componentProps;\n const {\n state = _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJECT,\n ref,\n props,\n stateAttributesMapping,\n enabled = true\n } = params;\n const className = enabled ? (0,_utils_resolveClassName_js__WEBPACK_IMPORTED_MODULE_2__.resolveClassName)(classNameProp, state) : undefined;\n const style = enabled ? (0,_utils_resolveStyle_js__WEBPACK_IMPORTED_MODULE_3__.resolveStyle)(styleProp, state) : undefined;\n const stateProps = enabled ? (0,_getStateAttributesProps_js__WEBPACK_IMPORTED_MODULE_4__.getStateAttributesProps)(state, stateAttributesMapping) : _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJECT;\n const resolvedProps = enabled && props ? resolveRenderFunctionProps(props) : undefined;\n\n // Ensure outProps is always a new mutable object when enabled, never EMPTY_OBJECT.\n // This prevents potential TypeError when setting ref, className, or style properties,\n // since EMPTY_OBJECT is frozen and mutations would fail in strict mode.\n const outProps = enabled ? (0,_base_ui_utils_mergeObjects__WEBPACK_IMPORTED_MODULE_5__.mergeObjects)(stateProps, resolvedProps) ?? {} : _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJECT;\n\n // SAFETY: The `useMergedRefs` functions use a single hook to store the same value,\n // switching between them at runtime is safe. If this assertion fails, React will\n // throw at runtime anyway.\n // This also skips the `useMergedRefs` call on the server, which is fine because\n // refs are not used on the server side.\n /* eslint-disable react-hooks/rules-of-hooks */\n if (typeof document !== 'undefined') {\n if (!enabled) {\n (0,_base_ui_utils_useMergedRefs__WEBPACK_IMPORTED_MODULE_6__.useMergedRefs)(null, null);\n } else if (Array.isArray(ref)) {\n outProps.ref = (0,_base_ui_utils_useMergedRefs__WEBPACK_IMPORTED_MODULE_6__.useMergedRefsN)([outProps.ref, (0,_base_ui_utils_getReactElementRef__WEBPACK_IMPORTED_MODULE_7__.getReactElementRef)(renderProp), ...ref]);\n } else {\n outProps.ref = (0,_base_ui_utils_useMergedRefs__WEBPACK_IMPORTED_MODULE_6__.useMergedRefs)(outProps.ref, (0,_base_ui_utils_getReactElementRef__WEBPACK_IMPORTED_MODULE_7__.getReactElementRef)(renderProp), ref);\n }\n }\n if (!enabled) {\n return _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJECT;\n }\n if (className !== undefined) {\n outProps.className = (0,_merge_props_index_js__WEBPACK_IMPORTED_MODULE_8__.mergeClassNames)(outProps.className, className);\n }\n if (style !== undefined) {\n outProps.style = (0,_base_ui_utils_mergeObjects__WEBPACK_IMPORTED_MODULE_5__.mergeObjects)(outProps.style, style);\n }\n return outProps;\n}\nfunction resolveRenderFunctionProps(props) {\n if (Array.isArray(props)) {\n return (0,_merge_props_index_js__WEBPACK_IMPORTED_MODULE_8__.mergePropsN)(props);\n }\n return (0,_merge_props_index_js__WEBPACK_IMPORTED_MODULE_8__.mergeProps)(undefined, props);\n}\n\n// The symbol React uses internally for lazy components\n// https://github.com/facebook/react/blob/a0566250b210499b4c5677f5ac2eedbd71d51a1b/packages/shared/ReactSymbols.js#L31\n//\n// TODO delete once https://github.com/facebook/react/issues/32392 is fixed\nconst REACT_LAZY_TYPE = Symbol.for('react.lazy');\nconst COMPONENT_IDENTIFIER_PATTERN = /^[A-Z][A-Za-z0-9$]*$/;\nconst LOWERCASE_CHARACTER_PATTERN = /[a-z]/;\nfunction evaluateRenderProp(element, render, props, state) {\n if (render) {\n if (typeof render === 'function') {\n if (true) {\n warnIfRenderPropLooksLikeComponent(render);\n }\n return render(props, state);\n }\n const mergedProps = (0,_merge_props_index_js__WEBPACK_IMPORTED_MODULE_8__.mergeProps)(props, render.props);\n mergedProps.ref = props.ref;\n let newElement = render;\n\n // Workaround for https://github.com/facebook/react/issues/32392\n // This works because the toArray() logic unwrap lazy element type in\n // https://github.com/facebook/react/blob/a0566250b210499b4c5677f5ac2eedbd71d51a1b/packages/react/src/ReactChildren.js#L186\n if (newElement?.$$typeof === REACT_LAZY_TYPE) {\n const children = react__WEBPACK_IMPORTED_MODULE_0__.Children.toArray(render);\n newElement = children[0];\n }\n\n // There is a high number of indirections, the error message thrown by React.cloneElement() is\n // hard to use for developers, this logic provides a better context.\n //\n // Our general guideline is to never change the control flow depending on the environment.\n // However, React.cloneElement() throws if React.isValidElement() is false,\n // so we can throw before with custom message.\n if (true) {\n if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(newElement)) {\n throw new Error(['Base UI: The `render` prop was provided an invalid React element as `React.isValidElement(render)` is `false`.', 'A valid React element must be provided to the `render` prop because it is cloned with props to replace the default element.', 'https://base-ui.com/r/invalid-render-prop'].join('\\n'));\n }\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.cloneElement(newElement, mergedProps);\n }\n if (element) {\n if (typeof element === 'string') {\n return renderTag(element, props);\n }\n }\n // Unreachable, but the typings on `useRenderElement` need to be reworked\n // to annotate it correctly.\n throw new Error( true ? 'Base UI: Render element or function are not defined.' : 0);\n}\nfunction warnIfRenderPropLooksLikeComponent(renderFn) {\n const functionName = renderFn.name;\n if (functionName.length === 0) {\n return;\n }\n if (!COMPONENT_IDENTIFIER_PATTERN.test(functionName)) {\n return;\n }\n if (!LOWERCASE_CHARACTER_PATTERN.test(functionName)) {\n return;\n }\n (0,_base_ui_utils_warn__WEBPACK_IMPORTED_MODULE_9__.warn)(`The \\`render\\` prop received a function named \\`${functionName}\\` that starts with an uppercase letter.`, 'This usually means a React component was passed directly as `render={Component}`.', 'Base UI calls `render` as a plain function, which can break the Rules of Hooks during reconciliation.', 'If this is an intentional render callback, rename it to start with a lowercase letter.', 'Use `render={<Component />}` or `render={(props) => <Component {...props} />}` instead.', 'https://base-ui.com/r/invalid-render-prop');\n}\nfunction renderTag(Tag, props) {\n if (Tag === 'button') {\n return /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(\"button\", {\n type: \"button\",\n ...props,\n key: props.key\n });\n }\n if (Tag === 'img') {\n return /*#__PURE__*/(0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(\"img\", {\n alt: \"\",\n ...props,\n key: props.key\n });\n }\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Tag, props);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL3VzZVJlbmRlckVsZW1lbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFBb0U7QUFDckM7QUFDOEM7QUFDTjtBQUNaO0FBQ2hCO0FBQ1M7QUFDbUI7QUFDUDtBQUNSO0FBQzJCO0FBQzNCO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ08sOERBQThEO0FBQ3JFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsOERBQVk7QUFDNUM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSwwREFBMEQ7QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQSxZQUFZLDhEQUFZO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKLDhCQUE4Qiw0RUFBZ0I7QUFDOUMsMEJBQTBCLG9FQUFZO0FBQ3RDLCtCQUErQixvRkFBdUIsa0NBQWtDLDhEQUFZO0FBQ3BHOztBQUVBO0FBQ0E7QUFDQTtBQUNBLDZCQUE2Qix5RUFBWSxrQ0FBa0MsRUFBRSw4REFBWTs7QUFFekY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sMkVBQWE7QUFDbkIsTUFBTTtBQUNOLHFCQUFxQiw0RUFBYyxnQkFBZ0IscUZBQWtCO0FBQ3JFLE1BQU07QUFDTixxQkFBcUIsMkVBQWEsZUFBZSxxRkFBa0I7QUFDbkU7QUFDQTtBQUNBO0FBQ0EsV0FBVyw4REFBWTtBQUN2QjtBQUNBO0FBQ0EseUJBQXlCLHNFQUFlO0FBQ3hDO0FBQ0E7QUFDQSxxQkFBcUIseUVBQVk7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsa0VBQVc7QUFDdEI7QUFDQSxTQUFTLGlFQUFVO0FBQ25COztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSxJQUFxQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixpRUFBVTtBQUNsQztBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDJDQUFjO0FBQ3JDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSxJQUFxQztBQUM3Qyx5QkFBeUIsaURBQW9CO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwrQ0FBa0I7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixLQUFxQyw0REFBNEQsQ0FBc0I7QUFDekk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSx5REFBSSxvREFBb0QsYUFBYSxpSEFBaUgsVUFBVSxzTkFBc04sY0FBYyxjQUFjLHVCQUF1QixVQUFVLEdBQUc7QUFDeGQ7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLG9EQUFjO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0Esd0JBQXdCLG9EQUFjO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLHNCQUFzQixnREFBbUI7QUFDekMiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2ludGVybmFscy91c2VSZW5kZXJFbGVtZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfZm9ybWF0RXJyb3JNZXNzYWdlIGZyb20gXCJAYmFzZS11aS91dGlscy9mb3JtYXRFcnJvck1lc3NhZ2VcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZU1lcmdlZFJlZnMsIHVzZU1lcmdlZFJlZnNOIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlTWVyZ2VkUmVmcyc7XG5pbXBvcnQgeyBnZXRSZWFjdEVsZW1lbnRSZWYgfSBmcm9tICdAYmFzZS11aS91dGlscy9nZXRSZWFjdEVsZW1lbnRSZWYnO1xuaW1wb3J0IHsgbWVyZ2VPYmplY3RzIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvbWVyZ2VPYmplY3RzJztcbmltcG9ydCB7IHdhcm4gfSBmcm9tICdAYmFzZS11aS91dGlscy93YXJuJztcbmltcG9ydCB7IEVNUFRZX09CSkVDVCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL2VtcHR5JztcbmltcG9ydCB7IGdldFN0YXRlQXR0cmlidXRlc1Byb3BzIH0gZnJvbSBcIi4vZ2V0U3RhdGVBdHRyaWJ1dGVzUHJvcHMuanNcIjtcbmltcG9ydCB7IHJlc29sdmVDbGFzc05hbWUgfSBmcm9tIFwiLi4vdXRpbHMvcmVzb2x2ZUNsYXNzTmFtZS5qc1wiO1xuaW1wb3J0IHsgcmVzb2x2ZVN0eWxlIH0gZnJvbSBcIi4uL3V0aWxzL3Jlc29sdmVTdHlsZS5qc1wiO1xuaW1wb3J0IHsgbWVyZ2VQcm9wcywgbWVyZ2VQcm9wc04sIG1lcmdlQ2xhc3NOYW1lcyB9IGZyb20gXCIuLi9tZXJnZS1wcm9wcy9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCBhcyBfY3JlYXRlRWxlbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuLyoqXG4gKiBSZW5kZXJzIGEgQmFzZSBVSSBlbGVtZW50LlxuICpcbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBkZWZhdWx0IEhUTUwgZWxlbWVudCB0byByZW5kZXIuIENhbiBiZSBvdmVycmlkZGVuIGJ5IHRoZSBgcmVuZGVyYCBwcm9wLlxuICogQHBhcmFtIGNvbXBvbmVudFByb3BzIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBgcmVuZGVyYCBhbmQgYGNsYXNzTmFtZWAgcHJvcHMgdG8gYmUgdXNlZCBmb3IgZWxlbWVudCBjdXN0b21pemF0aW9uLiBPdGhlciBwcm9wcyBhcmUgaWdub3JlZC5cbiAqIEBwYXJhbSBwYXJhbXMgQWRkaXRpb25hbCBwYXJhbWV0ZXJzIGZvciByZW5kZXJpbmcgdGhlIGVsZW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZW5kZXJFbGVtZW50KGVsZW1lbnQsIGNvbXBvbmVudFByb3BzLCBwYXJhbXMgPSB7fSkge1xuICBjb25zdCByZW5kZXJQcm9wID0gY29tcG9uZW50UHJvcHMucmVuZGVyO1xuICBjb25zdCBvdXRQcm9wcyA9IHVzZVJlbmRlckVsZW1lbnRQcm9wcyhjb21wb25lbnRQcm9wcywgcGFyYW1zKTtcbiAgaWYgKHBhcmFtcy5lbmFibGVkID09PSBmYWxzZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHN0YXRlID0gcGFyYW1zLnN0YXRlID8/IEVNUFRZX09CSkVDVDtcbiAgcmV0dXJuIGV2YWx1YXRlUmVuZGVyUHJvcChlbGVtZW50LCByZW5kZXJQcm9wLCBvdXRQcm9wcywgc3RhdGUpO1xufVxuXG4vKipcbiAqIENvbXB1dGVzIHJlbmRlciBlbGVtZW50IGZpbmFsIHByb3BzLlxuICovXG5mdW5jdGlvbiB1c2VSZW5kZXJFbGVtZW50UHJvcHMoY29tcG9uZW50UHJvcHMsIHBhcmFtcyA9IHt9KSB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVByb3AsXG4gICAgc3R5bGU6IHN0eWxlUHJvcCxcbiAgICByZW5kZXI6IHJlbmRlclByb3BcbiAgfSA9IGNvbXBvbmVudFByb3BzO1xuICBjb25zdCB7XG4gICAgc3RhdGUgPSBFTVBUWV9PQkpFQ1QsXG4gICAgcmVmLFxuICAgIHByb3BzLFxuICAgIHN0YXRlQXR0cmlidXRlc01hcHBpbmcsXG4gICAgZW5hYmxlZCA9IHRydWVcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgY2xhc3NOYW1lID0gZW5hYmxlZCA/IHJlc29sdmVDbGFzc05hbWUoY2xhc3NOYW1lUHJvcCwgc3RhdGUpIDogdW5kZWZpbmVkO1xuICBjb25zdCBzdHlsZSA9IGVuYWJsZWQgPyByZXNvbHZlU3R5bGUoc3R5bGVQcm9wLCBzdGF0ZSkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHN0YXRlUHJvcHMgPSBlbmFibGVkID8gZ2V0U3RhdGVBdHRyaWJ1dGVzUHJvcHMoc3RhdGUsIHN0YXRlQXR0cmlidXRlc01hcHBpbmcpIDogRU1QVFlfT0JKRUNUO1xuICBjb25zdCByZXNvbHZlZFByb3BzID0gZW5hYmxlZCAmJiBwcm9wcyA/IHJlc29sdmVSZW5kZXJGdW5jdGlvblByb3BzKHByb3BzKSA6IHVuZGVmaW5lZDtcblxuICAvLyBFbnN1cmUgb3V0UHJvcHMgaXMgYWx3YXlzIGEgbmV3IG11dGFibGUgb2JqZWN0IHdoZW4gZW5hYmxlZCwgbmV2ZXIgRU1QVFlfT0JKRUNULlxuICAvLyBUaGlzIHByZXZlbnRzIHBvdGVudGlhbCBUeXBlRXJyb3Igd2hlbiBzZXR0aW5nIHJlZiwgY2xhc3NOYW1lLCBvciBzdHlsZSBwcm9wZXJ0aWVzLFxuICAvLyBzaW5jZSBFTVBUWV9PQkpFQ1QgaXMgZnJvemVuIGFuZCBtdXRhdGlvbnMgd291bGQgZmFpbCBpbiBzdHJpY3QgbW9kZS5cbiAgY29uc3Qgb3V0UHJvcHMgPSBlbmFibGVkID8gbWVyZ2VPYmplY3RzKHN0YXRlUHJvcHMsIHJlc29sdmVkUHJvcHMpID8/IHt9IDogRU1QVFlfT0JKRUNUO1xuXG4gIC8vIFNBRkVUWTogVGhlIGB1c2VNZXJnZWRSZWZzYCBmdW5jdGlvbnMgdXNlIGEgc2luZ2xlIGhvb2sgdG8gc3RvcmUgdGhlIHNhbWUgdmFsdWUsXG4gIC8vIHN3aXRjaGluZyBiZXR3ZWVuIHRoZW0gYXQgcnVudGltZSBpcyBzYWZlLiBJZiB0aGlzIGFzc2VydGlvbiBmYWlscywgUmVhY3Qgd2lsbFxuICAvLyB0aHJvdyBhdCBydW50aW1lIGFueXdheS5cbiAgLy8gVGhpcyBhbHNvIHNraXBzIHRoZSBgdXNlTWVyZ2VkUmVmc2AgY2FsbCBvbiB0aGUgc2VydmVyLCB3aGljaCBpcyBmaW5lIGJlY2F1c2VcbiAgLy8gcmVmcyBhcmUgbm90IHVzZWQgb24gdGhlIHNlcnZlciBzaWRlLlxuICAvKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rcyAqL1xuICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgdXNlTWVyZ2VkUmVmcyhudWxsLCBudWxsKTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocmVmKSkge1xuICAgICAgb3V0UHJvcHMucmVmID0gdXNlTWVyZ2VkUmVmc04oW291dFByb3BzLnJlZiwgZ2V0UmVhY3RFbGVtZW50UmVmKHJlbmRlclByb3ApLCAuLi5yZWZdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0UHJvcHMucmVmID0gdXNlTWVyZ2VkUmVmcyhvdXRQcm9wcy5yZWYsIGdldFJlYWN0RWxlbWVudFJlZihyZW5kZXJQcm9wKSwgcmVmKTtcbiAgICB9XG4gIH1cbiAgaWYgKCFlbmFibGVkKSB7XG4gICAgcmV0dXJuIEVNUFRZX09CSkVDVDtcbiAgfVxuICBpZiAoY2xhc3NOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBvdXRQcm9wcy5jbGFzc05hbWUgPSBtZXJnZUNsYXNzTmFtZXMob3V0UHJvcHMuY2xhc3NOYW1lLCBjbGFzc05hbWUpO1xuICB9XG4gIGlmIChzdHlsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb3V0UHJvcHMuc3R5bGUgPSBtZXJnZU9iamVjdHMob3V0UHJvcHMuc3R5bGUsIHN0eWxlKTtcbiAgfVxuICByZXR1cm4gb3V0UHJvcHM7XG59XG5mdW5jdGlvbiByZXNvbHZlUmVuZGVyRnVuY3Rpb25Qcm9wcyhwcm9wcykge1xuICBpZiAoQXJyYXkuaXNBcnJheShwcm9wcykpIHtcbiAgICByZXR1cm4gbWVyZ2VQcm9wc04ocHJvcHMpO1xuICB9XG4gIHJldHVybiBtZXJnZVByb3BzKHVuZGVmaW5lZCwgcHJvcHMpO1xufVxuXG4vLyBUaGUgc3ltYm9sIFJlYWN0IHVzZXMgaW50ZXJuYWxseSBmb3IgbGF6eSBjb21wb25lbnRzXG4vLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvYmxvYi9hMDU2NjI1MGIyMTA0OTliNGM1Njc3ZjVhYzJlZWRiZDcxZDUxYTFiL3BhY2thZ2VzL3NoYXJlZC9SZWFjdFN5bWJvbHMuanMjTDMxXG4vL1xuLy8gVE9ETyBkZWxldGUgb25jZSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzMyMzkyIGlzIGZpeGVkXG5jb25zdCBSRUFDVF9MQVpZX1RZUEUgPSBTeW1ib2wuZm9yKCdyZWFjdC5sYXp5Jyk7XG5jb25zdCBDT01QT05FTlRfSURFTlRJRklFUl9QQVRURVJOID0gL15bQS1aXVtBLVphLXowLTkkXSokLztcbmNvbnN0IExPV0VSQ0FTRV9DSEFSQUNURVJfUEFUVEVSTiA9IC9bYS16XS87XG5mdW5jdGlvbiBldmFsdWF0ZVJlbmRlclByb3AoZWxlbWVudCwgcmVuZGVyLCBwcm9wcywgc3RhdGUpIHtcbiAgaWYgKHJlbmRlcikge1xuICAgIGlmICh0eXBlb2YgcmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICB3YXJuSWZSZW5kZXJQcm9wTG9va3NMaWtlQ29tcG9uZW50KHJlbmRlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVuZGVyKHByb3BzLCBzdGF0ZSk7XG4gICAgfVxuICAgIGNvbnN0IG1lcmdlZFByb3BzID0gbWVyZ2VQcm9wcyhwcm9wcywgcmVuZGVyLnByb3BzKTtcbiAgICBtZXJnZWRQcm9wcy5yZWYgPSBwcm9wcy5yZWY7XG4gICAgbGV0IG5ld0VsZW1lbnQgPSByZW5kZXI7XG5cbiAgICAvLyBXb3JrYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzMyMzkyXG4gICAgLy8gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSB0b0FycmF5KCkgbG9naWMgdW53cmFwIGxhenkgZWxlbWVudCB0eXBlIGluXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2Jsb2IvYTA1NjYyNTBiMjEwNDk5YjRjNTY3N2Y1YWMyZWVkYmQ3MWQ1MWExYi9wYWNrYWdlcy9yZWFjdC9zcmMvUmVhY3RDaGlsZHJlbi5qcyNMMTg2XG4gICAgaWYgKG5ld0VsZW1lbnQ/LiQkdHlwZW9mID09PSBSRUFDVF9MQVpZX1RZUEUpIHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShyZW5kZXIpO1xuICAgICAgbmV3RWxlbWVudCA9IGNoaWxkcmVuWzBdO1xuICAgIH1cblxuICAgIC8vIFRoZXJlIGlzIGEgaGlnaCBudW1iZXIgb2YgaW5kaXJlY3Rpb25zLCB0aGUgZXJyb3IgbWVzc2FnZSB0aHJvd24gYnkgUmVhY3QuY2xvbmVFbGVtZW50KCkgaXNcbiAgICAvLyBoYXJkIHRvIHVzZSBmb3IgZGV2ZWxvcGVycywgdGhpcyBsb2dpYyBwcm92aWRlcyBhIGJldHRlciBjb250ZXh0LlxuICAgIC8vXG4gICAgLy8gT3VyIGdlbmVyYWwgZ3VpZGVsaW5lIGlzIHRvIG5ldmVyIGNoYW5nZSB0aGUgY29udHJvbCBmbG93IGRlcGVuZGluZyBvbiB0aGUgZW52aXJvbm1lbnQuXG4gICAgLy8gSG93ZXZlciwgUmVhY3QuY2xvbmVFbGVtZW50KCkgdGhyb3dzIGlmIFJlYWN0LmlzVmFsaWRFbGVtZW50KCkgaXMgZmFsc2UsXG4gICAgLy8gc28gd2UgY2FuIHRocm93IGJlZm9yZSB3aXRoIGN1c3RvbSBtZXNzYWdlLlxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoISAvKiNfX1BVUkVfXyovUmVhY3QuaXNWYWxpZEVsZW1lbnQobmV3RWxlbWVudCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFsnQmFzZSBVSTogVGhlIGByZW5kZXJgIHByb3Agd2FzIHByb3ZpZGVkIGFuIGludmFsaWQgUmVhY3QgZWxlbWVudCBhcyBgUmVhY3QuaXNWYWxpZEVsZW1lbnQocmVuZGVyKWAgaXMgYGZhbHNlYC4nLCAnQSB2YWxpZCBSZWFjdCBlbGVtZW50IG11c3QgYmUgcHJvdmlkZWQgdG8gdGhlIGByZW5kZXJgIHByb3AgYmVjYXVzZSBpdCBpcyBjbG9uZWQgd2l0aCBwcm9wcyB0byByZXBsYWNlIHRoZSBkZWZhdWx0IGVsZW1lbnQuJywgJ2h0dHBzOi8vYmFzZS11aS5jb20vci9pbnZhbGlkLXJlbmRlci1wcm9wJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChuZXdFbGVtZW50LCBtZXJnZWRQcm9wcyk7XG4gIH1cbiAgaWYgKGVsZW1lbnQpIHtcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcmVuZGVyVGFnKGVsZW1lbnQsIHByb3BzKTtcbiAgICB9XG4gIH1cbiAgLy8gVW5yZWFjaGFibGUsIGJ1dCB0aGUgdHlwaW5ncyBvbiBgdXNlUmVuZGVyRWxlbWVudGAgbmVlZCB0byBiZSByZXdvcmtlZFxuICAvLyB0byBhbm5vdGF0ZSBpdCBjb3JyZWN0bHkuXG4gIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyAnQmFzZSBVSTogUmVuZGVyIGVsZW1lbnQgb3IgZnVuY3Rpb24gYXJlIG5vdCBkZWZpbmVkLicgOiBfZm9ybWF0RXJyb3JNZXNzYWdlKDgpKTtcbn1cbmZ1bmN0aW9uIHdhcm5JZlJlbmRlclByb3BMb29rc0xpa2VDb21wb25lbnQocmVuZGVyRm4pIHtcbiAgY29uc3QgZnVuY3Rpb25OYW1lID0gcmVuZGVyRm4ubmFtZTtcbiAgaWYgKGZ1bmN0aW9uTmFtZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKCFDT01QT05FTlRfSURFTlRJRklFUl9QQVRURVJOLnRlc3QoZnVuY3Rpb25OYW1lKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoIUxPV0VSQ0FTRV9DSEFSQUNURVJfUEFUVEVSTi50ZXN0KGZ1bmN0aW9uTmFtZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgd2FybihgVGhlIFxcYHJlbmRlclxcYCBwcm9wIHJlY2VpdmVkIGEgZnVuY3Rpb24gbmFtZWQgXFxgJHtmdW5jdGlvbk5hbWV9XFxgIHRoYXQgc3RhcnRzIHdpdGggYW4gdXBwZXJjYXNlIGxldHRlci5gLCAnVGhpcyB1c3VhbGx5IG1lYW5zIGEgUmVhY3QgY29tcG9uZW50IHdhcyBwYXNzZWQgZGlyZWN0bHkgYXMgYHJlbmRlcj17Q29tcG9uZW50fWAuJywgJ0Jhc2UgVUkgY2FsbHMgYHJlbmRlcmAgYXMgYSBwbGFpbiBmdW5jdGlvbiwgd2hpY2ggY2FuIGJyZWFrIHRoZSBSdWxlcyBvZiBIb29rcyBkdXJpbmcgcmVjb25jaWxpYXRpb24uJywgJ0lmIHRoaXMgaXMgYW4gaW50ZW50aW9uYWwgcmVuZGVyIGNhbGxiYWNrLCByZW5hbWUgaXQgdG8gc3RhcnQgd2l0aCBhIGxvd2VyY2FzZSBsZXR0ZXIuJywgJ1VzZSBgcmVuZGVyPXs8Q29tcG9uZW50IC8+fWAgb3IgYHJlbmRlcj17KHByb3BzKSA9PiA8Q29tcG9uZW50IHsuLi5wcm9wc30gLz59YCBpbnN0ZWFkLicsICdodHRwczovL2Jhc2UtdWkuY29tL3IvaW52YWxpZC1yZW5kZXItcHJvcCcpO1xufVxuZnVuY3Rpb24gcmVuZGVyVGFnKFRhZywgcHJvcHMpIHtcbiAgaWYgKFRhZyA9PT0gJ2J1dHRvbicpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXG4gICAgICAuLi5wcm9wcyxcbiAgICAgIGtleTogcHJvcHMua2V5XG4gICAgfSk7XG4gIH1cbiAgaWYgKFRhZyA9PT0gJ2ltZycpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19jcmVhdGVFbGVtZW50KFwiaW1nXCIsIHtcbiAgICAgIGFsdDogXCJcIixcbiAgICAgIC4uLnByb3BzLFxuICAgICAga2V5OiBwcm9wcy5rZXlcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGFnLCBwcm9wcyk7XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useRenderElement.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useTransitionStatus.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/useTransitionStatus.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((__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 */ useTransitionStatus: () => (/* binding */ useTransitionStatus)\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 _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @base-ui/utils/useIsoLayoutEffect */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/utils/useAnimationFrame */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useAnimationFrame.js\");\n/* __next_internal_client_entry_do_not_use__ useTransitionStatus auto */ var _s = $RefreshSig$();\n\n\n\n/**\n * Provides a status string for CSS animations.\n * @param open - a boolean that determines if the element is open.\n * @param enableIdleState - a boolean that enables the `'idle'` state between `'starting'` and `'ending'`\n */ function useTransitionStatus(open) {\n let enableIdleState = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false, deferEndingState = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;\n _s();\n const [transitionStatus, setTransitionStatus] = react__WEBPACK_IMPORTED_MODULE_0__.useState(open && enableIdleState ? 'idle' : undefined);\n const [mounted, setMounted] = react__WEBPACK_IMPORTED_MODULE_0__.useState(open);\n if (open && !mounted) {\n setMounted(true);\n setTransitionStatus('starting');\n }\n if (!open && mounted && transitionStatus !== 'ending' && !deferEndingState) {\n setTransitionStatus('ending');\n }\n if (!open && !mounted && transitionStatus === 'ending') {\n setTransitionStatus(undefined);\n }\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_1__.useIsoLayoutEffect)({\n \"useTransitionStatus.useIsoLayoutEffect\": ()=>{\n if (!open && mounted && transitionStatus !== 'ending' && deferEndingState) {\n const frame = _base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_2__.AnimationFrame.request({\n \"useTransitionStatus.useIsoLayoutEffect.frame\": ()=>{\n setTransitionStatus('ending');\n }\n }[\"useTransitionStatus.useIsoLayoutEffect.frame\"]);\n return ({\n \"useTransitionStatus.useIsoLayoutEffect\": ()=>{\n _base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_2__.AnimationFrame.cancel(frame);\n }\n })[\"useTransitionStatus.useIsoLayoutEffect\"];\n }\n return undefined;\n }\n }[\"useTransitionStatus.useIsoLayoutEffect\"], [\n open,\n mounted,\n transitionStatus,\n deferEndingState\n ]);\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_1__.useIsoLayoutEffect)({\n \"useTransitionStatus.useIsoLayoutEffect\": ()=>{\n if (!open || enableIdleState) {\n return undefined;\n }\n const frame = _base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_2__.AnimationFrame.request({\n \"useTransitionStatus.useIsoLayoutEffect.frame\": ()=>{\n // Avoid `flushSync` here due to Firefox.\n // See https://github.com/mui/base-ui/pull/3424\n setTransitionStatus(undefined);\n }\n }[\"useTransitionStatus.useIsoLayoutEffect.frame\"]);\n return ({\n \"useTransitionStatus.useIsoLayoutEffect\": ()=>{\n _base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_2__.AnimationFrame.cancel(frame);\n }\n })[\"useTransitionStatus.useIsoLayoutEffect\"];\n }\n }[\"useTransitionStatus.useIsoLayoutEffect\"], [\n enableIdleState,\n open\n ]);\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_1__.useIsoLayoutEffect)({\n \"useTransitionStatus.useIsoLayoutEffect\": ()=>{\n if (!open || !enableIdleState) {\n return undefined;\n }\n if (open && mounted && transitionStatus !== 'idle') {\n setTransitionStatus('starting');\n }\n const frame = _base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_2__.AnimationFrame.request({\n \"useTransitionStatus.useIsoLayoutEffect.frame\": ()=>{\n setTransitionStatus('idle');\n }\n }[\"useTransitionStatus.useIsoLayoutEffect.frame\"]);\n return ({\n \"useTransitionStatus.useIsoLayoutEffect\": ()=>{\n _base_ui_utils_useAnimationFrame__WEBPACK_IMPORTED_MODULE_2__.AnimationFrame.cancel(frame);\n }\n })[\"useTransitionStatus.useIsoLayoutEffect\"];\n }\n }[\"useTransitionStatus.useIsoLayoutEffect\"], [\n enableIdleState,\n open,\n mounted,\n transitionStatus\n ]);\n return {\n mounted,\n setMounted,\n transitionStatus\n };\n}\n_s(useTransitionStatus, \"lRGwauQ0xH8lU71LStDkVvxJfAw=\", false, function() {\n return [\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_1__.useIsoLayoutEffect,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_1__.useIsoLayoutEffect,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_1__.useIsoLayoutEffect\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL3VzZVRyYW5zaXRpb25TdGF0dXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFK0I7QUFDd0M7QUFDTDtBQUNsRTs7OztDQUlDLEdBQ00sU0FBU0csb0JBQW9CQyxJQUFJO1FBQUVDLGtCQUFBQSxpRUFBa0IsT0FBT0MsbUJBQUFBLGlFQUFtQjs7SUFDcEYsTUFBTSxDQUFDQyxrQkFBa0JDLG9CQUFvQixHQUFHUiwyQ0FBYyxDQUFDSSxRQUFRQyxrQkFBa0IsU0FBU0s7SUFDbEcsTUFBTSxDQUFDQyxTQUFTQyxXQUFXLEdBQUdaLDJDQUFjLENBQUNJO0lBQzdDLElBQUlBLFFBQVEsQ0FBQ08sU0FBUztRQUNwQkMsV0FBVztRQUNYSixvQkFBb0I7SUFDdEI7SUFDQSxJQUFJLENBQUNKLFFBQVFPLFdBQVdKLHFCQUFxQixZQUFZLENBQUNELGtCQUFrQjtRQUMxRUUsb0JBQW9CO0lBQ3RCO0lBQ0EsSUFBSSxDQUFDSixRQUFRLENBQUNPLFdBQVdKLHFCQUFxQixVQUFVO1FBQ3REQyxvQkFBb0JFO0lBQ3RCO0lBQ0FULHFGQUFrQkE7a0RBQUM7WUFDakIsSUFBSSxDQUFDRyxRQUFRTyxXQUFXSixxQkFBcUIsWUFBWUQsa0JBQWtCO2dCQUN6RSxNQUFNTyxRQUFRWCw0RUFBY0EsQ0FBQ1ksT0FBTztvRUFBQzt3QkFDbkNOLG9CQUFvQjtvQkFDdEI7O2dCQUNBOzhEQUFPO3dCQUNMTiw0RUFBY0EsQ0FBQ2EsTUFBTSxDQUFDRjtvQkFDeEI7O1lBQ0Y7WUFDQSxPQUFPSDtRQUNUO2lEQUFHO1FBQUNOO1FBQU1PO1FBQVNKO1FBQWtCRDtLQUFpQjtJQUN0REwscUZBQWtCQTtrREFBQztZQUNqQixJQUFJLENBQUNHLFFBQVFDLGlCQUFpQjtnQkFDNUIsT0FBT0s7WUFDVDtZQUNBLE1BQU1HLFFBQVFYLDRFQUFjQSxDQUFDWSxPQUFPO2dFQUFDO29CQUNuQyx5Q0FBeUM7b0JBQ3pDLCtDQUErQztvQkFDL0NOLG9CQUFvQkU7Z0JBQ3RCOztZQUNBOzBEQUFPO29CQUNMUiw0RUFBY0EsQ0FBQ2EsTUFBTSxDQUFDRjtnQkFDeEI7O1FBQ0Y7aURBQUc7UUFBQ1I7UUFBaUJEO0tBQUs7SUFDMUJILHFGQUFrQkE7a0RBQUM7WUFDakIsSUFBSSxDQUFDRyxRQUFRLENBQUNDLGlCQUFpQjtnQkFDN0IsT0FBT0s7WUFDVDtZQUNBLElBQUlOLFFBQVFPLFdBQVdKLHFCQUFxQixRQUFRO2dCQUNsREMsb0JBQW9CO1lBQ3RCO1lBQ0EsTUFBTUssUUFBUVgsNEVBQWNBLENBQUNZLE9BQU87Z0VBQUM7b0JBQ25DTixvQkFBb0I7Z0JBQ3RCOztZQUNBOzBEQUFPO29CQUNMTiw0RUFBY0EsQ0FBQ2EsTUFBTSxDQUFDRjtnQkFDeEI7O1FBQ0Y7aURBQUc7UUFBQ1I7UUFBaUJEO1FBQU1PO1FBQVNKO0tBQWlCO0lBQ3JELE9BQU87UUFDTEk7UUFDQUM7UUFDQUw7SUFDRjtBQUNGO0dBeERnQko7O1FBYWRGLGlGQUFrQkE7UUFXbEJBLGlGQUFrQkE7UUFhbEJBLGlGQUFrQkEiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL2ludGVybmFscy91c2VUcmFuc2l0aW9uU3RhdHVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlSXNvTGF5b3V0RWZmZWN0IH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlSXNvTGF5b3V0RWZmZWN0JztcbmltcG9ydCB7IEFuaW1hdGlvbkZyYW1lIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlQW5pbWF0aW9uRnJhbWUnO1xuLyoqXG4gKiBQcm92aWRlcyBhIHN0YXR1cyBzdHJpbmcgZm9yIENTUyBhbmltYXRpb25zLlxuICogQHBhcmFtIG9wZW4gLSBhIGJvb2xlYW4gdGhhdCBkZXRlcm1pbmVzIGlmIHRoZSBlbGVtZW50IGlzIG9wZW4uXG4gKiBAcGFyYW0gZW5hYmxlSWRsZVN0YXRlIC0gYSBib29sZWFuIHRoYXQgZW5hYmxlcyB0aGUgYCdpZGxlJ2Agc3RhdGUgYmV0d2VlbiBgJ3N0YXJ0aW5nJ2AgYW5kIGAnZW5kaW5nJ2BcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRyYW5zaXRpb25TdGF0dXMob3BlbiwgZW5hYmxlSWRsZVN0YXRlID0gZmFsc2UsIGRlZmVyRW5kaW5nU3RhdGUgPSBmYWxzZSkge1xuICBjb25zdCBbdHJhbnNpdGlvblN0YXR1cywgc2V0VHJhbnNpdGlvblN0YXR1c10gPSBSZWFjdC51c2VTdGF0ZShvcGVuICYmIGVuYWJsZUlkbGVTdGF0ZSA/ICdpZGxlJyA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IFttb3VudGVkLCBzZXRNb3VudGVkXSA9IFJlYWN0LnVzZVN0YXRlKG9wZW4pO1xuICBpZiAob3BlbiAmJiAhbW91bnRlZCkge1xuICAgIHNldE1vdW50ZWQodHJ1ZSk7XG4gICAgc2V0VHJhbnNpdGlvblN0YXR1cygnc3RhcnRpbmcnKTtcbiAgfVxuICBpZiAoIW9wZW4gJiYgbW91bnRlZCAmJiB0cmFuc2l0aW9uU3RhdHVzICE9PSAnZW5kaW5nJyAmJiAhZGVmZXJFbmRpbmdTdGF0ZSkge1xuICAgIHNldFRyYW5zaXRpb25TdGF0dXMoJ2VuZGluZycpO1xuICB9XG4gIGlmICghb3BlbiAmJiAhbW91bnRlZCAmJiB0cmFuc2l0aW9uU3RhdHVzID09PSAnZW5kaW5nJykge1xuICAgIHNldFRyYW5zaXRpb25TdGF0dXModW5kZWZpbmVkKTtcbiAgfVxuICB1c2VJc29MYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3BlbiAmJiBtb3VudGVkICYmIHRyYW5zaXRpb25TdGF0dXMgIT09ICdlbmRpbmcnICYmIGRlZmVyRW5kaW5nU3RhdGUpIHtcbiAgICAgIGNvbnN0IGZyYW1lID0gQW5pbWF0aW9uRnJhbWUucmVxdWVzdCgoKSA9PiB7XG4gICAgICAgIHNldFRyYW5zaXRpb25TdGF0dXMoJ2VuZGluZycpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBBbmltYXRpb25GcmFtZS5jYW5jZWwoZnJhbWUpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW29wZW4sIG1vdW50ZWQsIHRyYW5zaXRpb25TdGF0dXMsIGRlZmVyRW5kaW5nU3RhdGVdKTtcbiAgdXNlSXNvTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIW9wZW4gfHwgZW5hYmxlSWRsZVN0YXRlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBmcmFtZSA9IEFuaW1hdGlvbkZyYW1lLnJlcXVlc3QoKCkgPT4ge1xuICAgICAgLy8gQXZvaWQgYGZsdXNoU3luY2AgaGVyZSBkdWUgdG8gRmlyZWZveC5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbXVpL2Jhc2UtdWkvcHVsbC8zNDI0XG4gICAgICBzZXRUcmFuc2l0aW9uU3RhdHVzKHVuZGVmaW5lZCk7XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIEFuaW1hdGlvbkZyYW1lLmNhbmNlbChmcmFtZSk7XG4gICAgfTtcbiAgfSwgW2VuYWJsZUlkbGVTdGF0ZSwgb3Blbl0pO1xuICB1c2VJc29MYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghb3BlbiB8fCAhZW5hYmxlSWRsZVN0YXRlKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiBtb3VudGVkICYmIHRyYW5zaXRpb25TdGF0dXMgIT09ICdpZGxlJykge1xuICAgICAgc2V0VHJhbnNpdGlvblN0YXR1cygnc3RhcnRpbmcnKTtcbiAgICB9XG4gICAgY29uc3QgZnJhbWUgPSBBbmltYXRpb25GcmFtZS5yZXF1ZXN0KCgpID0+IHtcbiAgICAgIHNldFRyYW5zaXRpb25TdGF0dXMoJ2lkbGUnKTtcbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgQW5pbWF0aW9uRnJhbWUuY2FuY2VsKGZyYW1lKTtcbiAgICB9O1xuICB9LCBbZW5hYmxlSWRsZVN0YXRlLCBvcGVuLCBtb3VudGVkLCB0cmFuc2l0aW9uU3RhdHVzXSk7XG4gIHJldHVybiB7XG4gICAgbW91bnRlZCxcbiAgICBzZXRNb3VudGVkLFxuICAgIHRyYW5zaXRpb25TdGF0dXNcbiAgfTtcbn0iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VJc29MYXlvdXRFZmZlY3QiLCJBbmltYXRpb25GcmFtZSIsInVzZVRyYW5zaXRpb25TdGF0dXMiLCJvcGVuIiwiZW5hYmxlSWRsZVN0YXRlIiwiZGVmZXJFbmRpbmdTdGF0ZSIsInRyYW5zaXRpb25TdGF0dXMiLCJzZXRUcmFuc2l0aW9uU3RhdHVzIiwidXNlU3RhdGUiLCJ1bmRlZmluZWQiLCJtb3VudGVkIiwic2V0TW91bnRlZCIsImZyYW1lIiwicmVxdWVzdCIsImNhbmNlbCJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useTransitionStatus.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useValueChanged.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/internals/useValueChanged.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((__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 */ useValueChanged: () => (/* binding */ useValueChanged)\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 _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/utils/useIsoLayoutEffect */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @base-ui/utils/useStableCallback */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useStableCallback.js\");\n/* __next_internal_client_entry_do_not_use__ useValueChanged auto */ var _s = $RefreshSig$();\n\n\n\nfunction useValueChanged(value, onChange) {\n _s();\n const valueRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(value);\n const onChangeCallback = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_1__.useStableCallback)(onChange);\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect)({\n \"useValueChanged.useIsoLayoutEffect\": ()=>{\n if (valueRef.current === value) {\n return;\n }\n onChangeCallback(valueRef.current);\n }\n }[\"useValueChanged.useIsoLayoutEffect\"], [\n value,\n onChangeCallback\n ]);\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect)({\n \"useValueChanged.useIsoLayoutEffect\": ()=>{\n valueRef.current = value;\n }\n }[\"useValueChanged.useIsoLayoutEffect\"], [\n value\n ]);\n}\n_s(useValueChanged, \"3VJfxmH0uWAOAHAaES/elkmU0xI=\", false, function() {\n return [\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_1__.useStableCallback,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vaW50ZXJuYWxzL3VzZVZhbHVlQ2hhbmdlZC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUUrQjtBQUN3QztBQUNGO0FBQzlELFNBQVNHLGdCQUFnQkMsS0FBSyxFQUFFQyxRQUFROztJQUM3QyxNQUFNQyxXQUFXTix5Q0FBWSxDQUFDSTtJQUM5QixNQUFNSSxtQkFBbUJOLG1GQUFpQkEsQ0FBQ0c7SUFDM0NKLHFGQUFrQkE7OENBQUM7WUFDakIsSUFBSUssU0FBU0csT0FBTyxLQUFLTCxPQUFPO2dCQUM5QjtZQUNGO1lBQ0FJLGlCQUFpQkYsU0FBU0csT0FBTztRQUNuQzs2Q0FBRztRQUFDTDtRQUFPSTtLQUFpQjtJQUM1QlAscUZBQWtCQTs4Q0FBQztZQUNqQkssU0FBU0csT0FBTyxHQUFHTDtRQUNyQjs2Q0FBRztRQUFDQTtLQUFNO0FBQ1o7R0FaZ0JEOztRQUVXRCwrRUFBaUJBO1FBQzFDRCxpRkFBa0JBO1FBTWxCQSxpRkFBa0JBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9pbnRlcm5hbHMvdXNlVmFsdWVDaGFuZ2VkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlSXNvTGF5b3V0RWZmZWN0IH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlSXNvTGF5b3V0RWZmZWN0JztcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlU3RhYmxlQ2FsbGJhY2snO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVZhbHVlQ2hhbmdlZCh2YWx1ZSwgb25DaGFuZ2UpIHtcbiAgY29uc3QgdmFsdWVSZWYgPSBSZWFjdC51c2VSZWYodmFsdWUpO1xuICBjb25zdCBvbkNoYW5nZUNhbGxiYWNrID0gdXNlU3RhYmxlQ2FsbGJhY2sob25DaGFuZ2UpO1xuICB1c2VJc29MYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh2YWx1ZVJlZi5jdXJyZW50ID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBvbkNoYW5nZUNhbGxiYWNrKHZhbHVlUmVmLmN1cnJlbnQpO1xuICB9LCBbdmFsdWUsIG9uQ2hhbmdlQ2FsbGJhY2tdKTtcbiAgdXNlSXNvTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICB2YWx1ZVJlZi5jdXJyZW50ID0gdmFsdWU7XG4gIH0sIFt2YWx1ZV0pO1xufSJdLCJuYW1lcyI6WyJSZWFjdCIsInVzZUlzb0xheW91dEVmZmVjdCIsInVzZVN0YWJsZUNhbGxiYWNrIiwidXNlVmFsdWVDaGFuZ2VkIiwidmFsdWUiLCJvbkNoYW5nZSIsInZhbHVlUmVmIiwidXNlUmVmIiwib25DaGFuZ2VDYWxsYmFjayIsImN1cnJlbnQiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useValueChanged.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/merge-props/mergeProps.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/merge-props/mergeProps.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((__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 */ makeEventPreventable: () => (/* binding */ makeEventPreventable),\n/* harmony export */ mergeClassNames: () => (/* binding */ mergeClassNames),\n/* harmony export */ mergeProps: () => (/* binding */ mergeProps),\n/* harmony export */ mergePropsN: () => (/* binding */ mergePropsN)\n/* harmony export */ });\n/* harmony import */ var _base_ui_utils_mergeObjects__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @base-ui/utils/mergeObjects */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/mergeObjects.js\");\n\nconst EMPTY_PROPS = {};\n\n/* eslint-disable id-denylist */\n/**\n * Merges multiple sets of React props. It follows the Object.assign pattern where the rightmost object's fields overwrite\n * the conflicting ones from others. This doesn't apply to event handlers, `className` and `style` props.\n *\n * Event handlers are merged and called in right-to-left order (rightmost handler executes first, leftmost last).\n * For React synthetic events, the rightmost handler can prevent prior (left-positioned) handlers from executing\n * by calling `event.preventBaseUIHandler()`. For non-synthetic events (custom events with primitive/object values),\n * all handlers always execute without prevention capability.\n *\n * The `className` prop is merged by concatenating classes in right-to-left order (rightmost class appears first in the string).\n * The `style` prop is merged with rightmost styles overwriting the prior ones.\n *\n * Props can either be provided as objects or as functions that take the previous props as an argument.\n * The function will receive the merged props up to that point (going from left to right):\n * so in the case of `(obj1, obj2, fn, obj3)`, `fn` will receive the merged props of `obj1` and `obj2`.\n * The function is responsible for chaining event handlers if needed (that is, we don't run the merge logic).\n *\n * Event handlers returned by the functions are not automatically prevented when `preventBaseUIHandler` is called.\n * They must check `event.baseUIHandlerPrevented` themselves and bail out if it's true.\n *\n * @important **`ref` is not merged.**\n * @param a Props object to merge.\n * @param b Props object to merge. The function will overwrite conflicting props from `a`.\n * @param c Props object to merge. The function will overwrite conflicting props from previous parameters.\n * @param d Props object to merge. The function will overwrite conflicting props from previous parameters.\n * @param e Props object to merge. The function will overwrite conflicting props from previous parameters.\n * @returns The merged props.\n * @public\n */\n\nfunction mergeProps(a, b, c, d, e) {\n if (!c && !d && !e && !a) {\n return createInitialMergedProps(b);\n }\n\n // We need to mutably own `merged`.\n let merged = createInitialMergedProps(a);\n if (b) {\n merged = mergeInto(merged, b);\n }\n if (c) {\n merged = mergeInto(merged, c);\n }\n if (d) {\n merged = mergeInto(merged, d);\n }\n if (e) {\n merged = mergeInto(merged, e);\n }\n return merged;\n}\n/* eslint-enable id-denylist */\n\n/**\n * Merges an arbitrary number of React props using the same logic as {@link mergeProps}.\n * This function accepts an array of props instead of individual arguments.\n *\n * This has slightly lower performance than {@link mergeProps} due to accepting an array\n * instead of a fixed number of arguments. Prefer {@link mergeProps} when merging 5 or\n * fewer prop sets for better performance.\n *\n * @param props Array of props to merge.\n * @returns The merged props.\n * @see mergeProps\n * @public\n */\nfunction mergePropsN(props) {\n if (props.length === 0) {\n return EMPTY_PROPS;\n }\n if (props.length === 1) {\n return createInitialMergedProps(props[0]);\n }\n\n // We need to mutably own `merged`.\n let merged = createInitialMergedProps(props[0]);\n for (let i = 1; i < props.length; i += 1) {\n merged = mergeInto(merged, props[i]);\n }\n return merged;\n}\nfunction createInitialMergedProps(inputProps) {\n if (isPropsGetter(inputProps)) {\n // Getter-returned handlers intentionally keep their existing semantics.\n return {\n ...resolvePropsGetter(inputProps, EMPTY_PROPS)\n };\n }\n return copyInitialProps(inputProps);\n}\nfunction mergeInto(merged, inputProps) {\n if (isPropsGetter(inputProps)) {\n return resolvePropsGetter(inputProps, merged);\n }\n return mutablyMergeInto(merged, inputProps);\n}\nfunction copyInitialProps(inputProps) {\n const copiedProps = {\n ...inputProps\n };\n\n // `copiedProps` is our fresh own-object copy, so iterating with `for...in` is safe here.\n // eslint-disable-next-line guard-for-in\n for (const propName in copiedProps) {\n const propValue = copiedProps[propName];\n if (isEventHandler(propName, propValue)) {\n copiedProps[propName] = wrapEventHandler(propValue);\n }\n }\n return copiedProps;\n}\n\n/**\n * Merges two sets of props. In case of conflicts, the external props take precedence.\n */\nfunction mutablyMergeInto(mergedProps, externalProps) {\n if (!externalProps) {\n return mergedProps;\n }\n\n // eslint-disable-next-line guard-for-in\n for (const propName in externalProps) {\n const externalPropValue = externalProps[propName];\n switch (propName) {\n case 'style':\n {\n mergedProps[propName] = (0,_base_ui_utils_mergeObjects__WEBPACK_IMPORTED_MODULE_0__.mergeObjects)(mergedProps.style, externalPropValue);\n break;\n }\n case 'className':\n {\n mergedProps[propName] = mergeClassNames(mergedProps.className, externalPropValue);\n break;\n }\n default:\n {\n if (isEventHandler(propName, externalPropValue)) {\n mergedProps[propName] = mergeEventHandlers(mergedProps[propName], externalPropValue);\n } else {\n mergedProps[propName] = externalPropValue;\n }\n }\n }\n }\n return mergedProps;\n}\nfunction isEventHandler(key, value) {\n // This approach is more efficient than using a regex.\n const code0 = key.charCodeAt(0);\n const code1 = key.charCodeAt(1);\n const code2 = key.charCodeAt(2);\n return code0 === 111 /* o */ && code1 === 110 /* n */ && code2 >= 65 /* A */ && code2 <= 90 /* Z */ && (typeof value === 'function' || typeof value === 'undefined');\n}\nfunction isPropsGetter(inputProps) {\n return typeof inputProps === 'function';\n}\nfunction resolvePropsGetter(inputProps, previousProps) {\n if (isPropsGetter(inputProps)) {\n return inputProps(previousProps);\n }\n return inputProps ?? EMPTY_PROPS;\n}\nfunction mergeEventHandlers(ourHandler, theirHandler) {\n if (!theirHandler) {\n return ourHandler;\n }\n if (!ourHandler) {\n return wrapEventHandler(theirHandler);\n }\n return (...args) => {\n const event = args[0];\n if (isSyntheticEvent(event)) {\n const baseUIEvent = event;\n makeEventPreventable(baseUIEvent);\n const result = theirHandler(...args);\n if (!baseUIEvent.baseUIHandlerPrevented) {\n ourHandler?.(...args);\n }\n return result;\n }\n const result = theirHandler(...args);\n ourHandler?.(...args);\n return result;\n };\n}\nfunction wrapEventHandler(handler) {\n if (!handler) {\n return handler;\n }\n return (...args) => {\n const event = args[0];\n if (isSyntheticEvent(event)) {\n makeEventPreventable(event);\n }\n return handler(...args);\n };\n}\nfunction makeEventPreventable(event) {\n event.preventBaseUIHandler = () => {\n event.baseUIHandlerPrevented = true;\n };\n return event;\n}\nfunction mergeClassNames(ourClassName, theirClassName) {\n if (theirClassName) {\n if (ourClassName) {\n // eslint-disable-next-line prefer-template\n return theirClassName + ' ' + ourClassName;\n }\n return theirClassName;\n }\n return ourClassName;\n}\nfunction isSyntheticEvent(event) {\n return event != null && typeof event === 'object' && 'nativeEvent' in event;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vbWVyZ2UtcHJvcHMvbWVyZ2VQcm9wcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUEyRDtBQUMzRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLHNFQUFzRSxpQkFBaUI7QUFDdkY7QUFDQTtBQUNBLDZDQUE2QyxrQkFBa0I7QUFDL0QsbURBQW1ELGtCQUFrQjtBQUNyRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxrQkFBa0Isa0JBQWtCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLHlFQUFZO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vbWVyZ2UtcHJvcHMvbWVyZ2VQcm9wcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZXJnZU9iamVjdHMgfSBmcm9tICdAYmFzZS11aS91dGlscy9tZXJnZU9iamVjdHMnO1xuY29uc3QgRU1QVFlfUFJPUFMgPSB7fTtcblxuLyogZXNsaW50LWRpc2FibGUgaWQtZGVueWxpc3QgKi9cbi8qKlxuICogTWVyZ2VzIG11bHRpcGxlIHNldHMgb2YgUmVhY3QgcHJvcHMuIEl0IGZvbGxvd3MgdGhlIE9iamVjdC5hc3NpZ24gcGF0dGVybiB3aGVyZSB0aGUgcmlnaHRtb3N0IG9iamVjdCdzIGZpZWxkcyBvdmVyd3JpdGVcbiAqIHRoZSBjb25mbGljdGluZyBvbmVzIGZyb20gb3RoZXJzLiBUaGlzIGRvZXNuJ3QgYXBwbHkgdG8gZXZlbnQgaGFuZGxlcnMsIGBjbGFzc05hbWVgIGFuZCBgc3R5bGVgIHByb3BzLlxuICpcbiAqIEV2ZW50IGhhbmRsZXJzIGFyZSBtZXJnZWQgYW5kIGNhbGxlZCBpbiByaWdodC10by1sZWZ0IG9yZGVyIChyaWdodG1vc3QgaGFuZGxlciBleGVjdXRlcyBmaXJzdCwgbGVmdG1vc3QgbGFzdCkuXG4gKiBGb3IgUmVhY3Qgc3ludGhldGljIGV2ZW50cywgdGhlIHJpZ2h0bW9zdCBoYW5kbGVyIGNhbiBwcmV2ZW50IHByaW9yIChsZWZ0LXBvc2l0aW9uZWQpIGhhbmRsZXJzIGZyb20gZXhlY3V0aW5nXG4gKiBieSBjYWxsaW5nIGBldmVudC5wcmV2ZW50QmFzZVVJSGFuZGxlcigpYC4gRm9yIG5vbi1zeW50aGV0aWMgZXZlbnRzIChjdXN0b20gZXZlbnRzIHdpdGggcHJpbWl0aXZlL29iamVjdCB2YWx1ZXMpLFxuICogYWxsIGhhbmRsZXJzIGFsd2F5cyBleGVjdXRlIHdpdGhvdXQgcHJldmVudGlvbiBjYXBhYmlsaXR5LlxuICpcbiAqIFRoZSBgY2xhc3NOYW1lYCBwcm9wIGlzIG1lcmdlZCBieSBjb25jYXRlbmF0aW5nIGNsYXNzZXMgaW4gcmlnaHQtdG8tbGVmdCBvcmRlciAocmlnaHRtb3N0IGNsYXNzIGFwcGVhcnMgZmlyc3QgaW4gdGhlIHN0cmluZykuXG4gKiBUaGUgYHN0eWxlYCBwcm9wIGlzIG1lcmdlZCB3aXRoIHJpZ2h0bW9zdCBzdHlsZXMgb3ZlcndyaXRpbmcgdGhlIHByaW9yIG9uZXMuXG4gKlxuICogUHJvcHMgY2FuIGVpdGhlciBiZSBwcm92aWRlZCBhcyBvYmplY3RzIG9yIGFzIGZ1bmN0aW9ucyB0aGF0IHRha2UgdGhlIHByZXZpb3VzIHByb3BzIGFzIGFuIGFyZ3VtZW50LlxuICogVGhlIGZ1bmN0aW9uIHdpbGwgcmVjZWl2ZSB0aGUgbWVyZ2VkIHByb3BzIHVwIHRvIHRoYXQgcG9pbnQgKGdvaW5nIGZyb20gbGVmdCB0byByaWdodCk6XG4gKiBzbyBpbiB0aGUgY2FzZSBvZiBgKG9iajEsIG9iajIsIGZuLCBvYmozKWAsIGBmbmAgd2lsbCByZWNlaXZlIHRoZSBtZXJnZWQgcHJvcHMgb2YgYG9iajFgIGFuZCBgb2JqMmAuXG4gKiBUaGUgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIGNoYWluaW5nIGV2ZW50IGhhbmRsZXJzIGlmIG5lZWRlZCAodGhhdCBpcywgd2UgZG9uJ3QgcnVuIHRoZSBtZXJnZSBsb2dpYykuXG4gKlxuICogRXZlbnQgaGFuZGxlcnMgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9ucyBhcmUgbm90IGF1dG9tYXRpY2FsbHkgcHJldmVudGVkIHdoZW4gYHByZXZlbnRCYXNlVUlIYW5kbGVyYCBpcyBjYWxsZWQuXG4gKiBUaGV5IG11c3QgY2hlY2sgYGV2ZW50LmJhc2VVSUhhbmRsZXJQcmV2ZW50ZWRgIHRoZW1zZWx2ZXMgYW5kIGJhaWwgb3V0IGlmIGl0J3MgdHJ1ZS5cbiAqXG4gKiBAaW1wb3J0YW50ICoqYHJlZmAgaXMgbm90IG1lcmdlZC4qKlxuICogQHBhcmFtIGEgUHJvcHMgb2JqZWN0IHRvIG1lcmdlLlxuICogQHBhcmFtIGIgUHJvcHMgb2JqZWN0IHRvIG1lcmdlLiBUaGUgZnVuY3Rpb24gd2lsbCBvdmVyd3JpdGUgY29uZmxpY3RpbmcgcHJvcHMgZnJvbSBgYWAuXG4gKiBAcGFyYW0gYyBQcm9wcyBvYmplY3QgdG8gbWVyZ2UuIFRoZSBmdW5jdGlvbiB3aWxsIG92ZXJ3cml0ZSBjb25mbGljdGluZyBwcm9wcyBmcm9tIHByZXZpb3VzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0gZCBQcm9wcyBvYmplY3QgdG8gbWVyZ2UuIFRoZSBmdW5jdGlvbiB3aWxsIG92ZXJ3cml0ZSBjb25mbGljdGluZyBwcm9wcyBmcm9tIHByZXZpb3VzIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0gZSBQcm9wcyBvYmplY3QgdG8gbWVyZ2UuIFRoZSBmdW5jdGlvbiB3aWxsIG92ZXJ3cml0ZSBjb25mbGljdGluZyBwcm9wcyBmcm9tIHByZXZpb3VzIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgbWVyZ2VkIHByb3BzLlxuICogQHB1YmxpY1xuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVByb3BzKGEsIGIsIGMsIGQsIGUpIHtcbiAgaWYgKCFjICYmICFkICYmICFlICYmICFhKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxNZXJnZWRQcm9wcyhiKTtcbiAgfVxuXG4gIC8vIFdlIG5lZWQgdG8gbXV0YWJseSBvd24gYG1lcmdlZGAuXG4gIGxldCBtZXJnZWQgPSBjcmVhdGVJbml0aWFsTWVyZ2VkUHJvcHMoYSk7XG4gIGlmIChiKSB7XG4gICAgbWVyZ2VkID0gbWVyZ2VJbnRvKG1lcmdlZCwgYik7XG4gIH1cbiAgaWYgKGMpIHtcbiAgICBtZXJnZWQgPSBtZXJnZUludG8obWVyZ2VkLCBjKTtcbiAgfVxuICBpZiAoZCkge1xuICAgIG1lcmdlZCA9IG1lcmdlSW50byhtZXJnZWQsIGQpO1xuICB9XG4gIGlmIChlKSB7XG4gICAgbWVyZ2VkID0gbWVyZ2VJbnRvKG1lcmdlZCwgZSk7XG4gIH1cbiAgcmV0dXJuIG1lcmdlZDtcbn1cbi8qIGVzbGludC1lbmFibGUgaWQtZGVueWxpc3QgKi9cblxuLyoqXG4gKiBNZXJnZXMgYW4gYXJiaXRyYXJ5IG51bWJlciBvZiBSZWFjdCBwcm9wcyB1c2luZyB0aGUgc2FtZSBsb2dpYyBhcyB7QGxpbmsgbWVyZ2VQcm9wc30uXG4gKiBUaGlzIGZ1bmN0aW9uIGFjY2VwdHMgYW4gYXJyYXkgb2YgcHJvcHMgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIGFyZ3VtZW50cy5cbiAqXG4gKiBUaGlzIGhhcyBzbGlnaHRseSBsb3dlciBwZXJmb3JtYW5jZSB0aGFuIHtAbGluayBtZXJnZVByb3BzfSBkdWUgdG8gYWNjZXB0aW5nIGFuIGFycmF5XG4gKiBpbnN0ZWFkIG9mIGEgZml4ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cy4gUHJlZmVyIHtAbGluayBtZXJnZVByb3BzfSB3aGVuIG1lcmdpbmcgNSBvclxuICogZmV3ZXIgcHJvcCBzZXRzIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuXG4gKlxuICogQHBhcmFtIHByb3BzIEFycmF5IG9mIHByb3BzIHRvIG1lcmdlLlxuICogQHJldHVybnMgVGhlIG1lcmdlZCBwcm9wcy5cbiAqIEBzZWUgbWVyZ2VQcm9wc1xuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VQcm9wc04ocHJvcHMpIHtcbiAgaWYgKHByb3BzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBFTVBUWV9QUk9QUztcbiAgfVxuICBpZiAocHJvcHMubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUluaXRpYWxNZXJnZWRQcm9wcyhwcm9wc1swXSk7XG4gIH1cblxuICAvLyBXZSBuZWVkIHRvIG11dGFibHkgb3duIGBtZXJnZWRgLlxuICBsZXQgbWVyZ2VkID0gY3JlYXRlSW5pdGlhbE1lcmdlZFByb3BzKHByb3BzWzBdKTtcbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBwcm9wcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgIG1lcmdlZCA9IG1lcmdlSW50byhtZXJnZWQsIHByb3BzW2ldKTtcbiAgfVxuICByZXR1cm4gbWVyZ2VkO1xufVxuZnVuY3Rpb24gY3JlYXRlSW5pdGlhbE1lcmdlZFByb3BzKGlucHV0UHJvcHMpIHtcbiAgaWYgKGlzUHJvcHNHZXR0ZXIoaW5wdXRQcm9wcykpIHtcbiAgICAvLyBHZXR0ZXItcmV0dXJuZWQgaGFuZGxlcnMgaW50ZW50aW9uYWxseSBrZWVwIHRoZWlyIGV4aXN0aW5nIHNlbWFudGljcy5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ucmVzb2x2ZVByb3BzR2V0dGVyKGlucHV0UHJvcHMsIEVNUFRZX1BST1BTKVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIGNvcHlJbml0aWFsUHJvcHMoaW5wdXRQcm9wcyk7XG59XG5mdW5jdGlvbiBtZXJnZUludG8obWVyZ2VkLCBpbnB1dFByb3BzKSB7XG4gIGlmIChpc1Byb3BzR2V0dGVyKGlucHV0UHJvcHMpKSB7XG4gICAgcmV0dXJuIHJlc29sdmVQcm9wc0dldHRlcihpbnB1dFByb3BzLCBtZXJnZWQpO1xuICB9XG4gIHJldHVybiBtdXRhYmx5TWVyZ2VJbnRvKG1lcmdlZCwgaW5wdXRQcm9wcyk7XG59XG5mdW5jdGlvbiBjb3B5SW5pdGlhbFByb3BzKGlucHV0UHJvcHMpIHtcbiAgY29uc3QgY29waWVkUHJvcHMgPSB7XG4gICAgLi4uaW5wdXRQcm9wc1xuICB9O1xuXG4gIC8vIGBjb3BpZWRQcm9wc2AgaXMgb3VyIGZyZXNoIG93bi1vYmplY3QgY29weSwgc28gaXRlcmF0aW5nIHdpdGggYGZvci4uLmluYCBpcyBzYWZlIGhlcmUuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBndWFyZC1mb3ItaW5cbiAgZm9yIChjb25zdCBwcm9wTmFtZSBpbiBjb3BpZWRQcm9wcykge1xuICAgIGNvbnN0IHByb3BWYWx1ZSA9IGNvcGllZFByb3BzW3Byb3BOYW1lXTtcbiAgICBpZiAoaXNFdmVudEhhbmRsZXIocHJvcE5hbWUsIHByb3BWYWx1ZSkpIHtcbiAgICAgIGNvcGllZFByb3BzW3Byb3BOYW1lXSA9IHdyYXBFdmVudEhhbmRsZXIocHJvcFZhbHVlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvcGllZFByb3BzO1xufVxuXG4vKipcbiAqIE1lcmdlcyB0d28gc2V0cyBvZiBwcm9wcy4gSW4gY2FzZSBvZiBjb25mbGljdHMsIHRoZSBleHRlcm5hbCBwcm9wcyB0YWtlIHByZWNlZGVuY2UuXG4gKi9cbmZ1bmN0aW9uIG11dGFibHlNZXJnZUludG8obWVyZ2VkUHJvcHMsIGV4dGVybmFsUHJvcHMpIHtcbiAgaWYgKCFleHRlcm5hbFByb3BzKSB7XG4gICAgcmV0dXJuIG1lcmdlZFByb3BzO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pblxuICBmb3IgKGNvbnN0IHByb3BOYW1lIGluIGV4dGVybmFsUHJvcHMpIHtcbiAgICBjb25zdCBleHRlcm5hbFByb3BWYWx1ZSA9IGV4dGVybmFsUHJvcHNbcHJvcE5hbWVdO1xuICAgIHN3aXRjaCAocHJvcE5hbWUpIHtcbiAgICAgIGNhc2UgJ3N0eWxlJzpcbiAgICAgICAge1xuICAgICAgICAgIG1lcmdlZFByb3BzW3Byb3BOYW1lXSA9IG1lcmdlT2JqZWN0cyhtZXJnZWRQcm9wcy5zdHlsZSwgZXh0ZXJuYWxQcm9wVmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlICdjbGFzc05hbWUnOlxuICAgICAgICB7XG4gICAgICAgICAgbWVyZ2VkUHJvcHNbcHJvcE5hbWVdID0gbWVyZ2VDbGFzc05hbWVzKG1lcmdlZFByb3BzLmNsYXNzTmFtZSwgZXh0ZXJuYWxQcm9wVmFsdWUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKGlzRXZlbnRIYW5kbGVyKHByb3BOYW1lLCBleHRlcm5hbFByb3BWYWx1ZSkpIHtcbiAgICAgICAgICAgIG1lcmdlZFByb3BzW3Byb3BOYW1lXSA9IG1lcmdlRXZlbnRIYW5kbGVycyhtZXJnZWRQcm9wc1twcm9wTmFtZV0sIGV4dGVybmFsUHJvcFZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbWVyZ2VkUHJvcHNbcHJvcE5hbWVdID0gZXh0ZXJuYWxQcm9wVmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtZXJnZWRQcm9wcztcbn1cbmZ1bmN0aW9uIGlzRXZlbnRIYW5kbGVyKGtleSwgdmFsdWUpIHtcbiAgLy8gVGhpcyBhcHByb2FjaCBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHVzaW5nIGEgcmVnZXguXG4gIGNvbnN0IGNvZGUwID0ga2V5LmNoYXJDb2RlQXQoMCk7XG4gIGNvbnN0IGNvZGUxID0ga2V5LmNoYXJDb2RlQXQoMSk7XG4gIGNvbnN0IGNvZGUyID0ga2V5LmNoYXJDb2RlQXQoMik7XG4gIHJldHVybiBjb2RlMCA9PT0gMTExIC8qIG8gKi8gJiYgY29kZTEgPT09IDExMCAvKiBuICovICYmIGNvZGUyID49IDY1IC8qIEEgKi8gJiYgY29kZTIgPD0gOTAgLyogWiAqLyAmJiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gaXNQcm9wc0dldHRlcihpbnB1dFByb3BzKSB7XG4gIHJldHVybiB0eXBlb2YgaW5wdXRQcm9wcyA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIHJlc29sdmVQcm9wc0dldHRlcihpbnB1dFByb3BzLCBwcmV2aW91c1Byb3BzKSB7XG4gIGlmIChpc1Byb3BzR2V0dGVyKGlucHV0UHJvcHMpKSB7XG4gICAgcmV0dXJuIGlucHV0UHJvcHMocHJldmlvdXNQcm9wcyk7XG4gIH1cbiAgcmV0dXJuIGlucHV0UHJvcHMgPz8gRU1QVFlfUFJPUFM7XG59XG5mdW5jdGlvbiBtZXJnZUV2ZW50SGFuZGxlcnMob3VySGFuZGxlciwgdGhlaXJIYW5kbGVyKSB7XG4gIGlmICghdGhlaXJIYW5kbGVyKSB7XG4gICAgcmV0dXJuIG91ckhhbmRsZXI7XG4gIH1cbiAgaWYgKCFvdXJIYW5kbGVyKSB7XG4gICAgcmV0dXJuIHdyYXBFdmVudEhhbmRsZXIodGhlaXJIYW5kbGVyKTtcbiAgfVxuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBldmVudCA9IGFyZ3NbMF07XG4gICAgaWYgKGlzU3ludGhldGljRXZlbnQoZXZlbnQpKSB7XG4gICAgICBjb25zdCBiYXNlVUlFdmVudCA9IGV2ZW50O1xuICAgICAgbWFrZUV2ZW50UHJldmVudGFibGUoYmFzZVVJRXZlbnQpO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdGhlaXJIYW5kbGVyKC4uLmFyZ3MpO1xuICAgICAgaWYgKCFiYXNlVUlFdmVudC5iYXNlVUlIYW5kbGVyUHJldmVudGVkKSB7XG4gICAgICAgIG91ckhhbmRsZXI/LiguLi5hcmdzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IHRoZWlySGFuZGxlciguLi5hcmdzKTtcbiAgICBvdXJIYW5kbGVyPy4oLi4uYXJncyk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn1cbmZ1bmN0aW9uIHdyYXBFdmVudEhhbmRsZXIoaGFuZGxlcikge1xuICBpZiAoIWhhbmRsZXIpIHtcbiAgICByZXR1cm4gaGFuZGxlcjtcbiAgfVxuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICBjb25zdCBldmVudCA9IGFyZ3NbMF07XG4gICAgaWYgKGlzU3ludGhldGljRXZlbnQoZXZlbnQpKSB7XG4gICAgICBtYWtlRXZlbnRQcmV2ZW50YWJsZShldmVudCk7XG4gICAgfVxuICAgIHJldHVybiBoYW5kbGVyKC4uLmFyZ3MpO1xuICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VFdmVudFByZXZlbnRhYmxlKGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnRCYXNlVUlIYW5kbGVyID0gKCkgPT4ge1xuICAgIGV2ZW50LmJhc2VVSUhhbmRsZXJQcmV2ZW50ZWQgPSB0cnVlO1xuICB9O1xuICByZXR1cm4gZXZlbnQ7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDbGFzc05hbWVzKG91ckNsYXNzTmFtZSwgdGhlaXJDbGFzc05hbWUpIHtcbiAgaWYgKHRoZWlyQ2xhc3NOYW1lKSB7XG4gICAgaWYgKG91ckNsYXNzTmFtZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci10ZW1wbGF0ZVxuICAgICAgcmV0dXJuIHRoZWlyQ2xhc3NOYW1lICsgJyAnICsgb3VyQ2xhc3NOYW1lO1xuICAgIH1cbiAgICByZXR1cm4gdGhlaXJDbGFzc05hbWU7XG4gIH1cbiAgcmV0dXJuIG91ckNsYXNzTmFtZTtcbn1cbmZ1bmN0aW9uIGlzU3ludGhldGljRXZlbnQoZXZlbnQpIHtcbiAgcmV0dXJuIGV2ZW50ICE9IG51bGwgJiYgdHlwZW9mIGV2ZW50ID09PSAnb2JqZWN0JyAmJiAnbmF0aXZlRXZlbnQnIGluIGV2ZW50O1xufSJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/merge-props/mergeProps.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/root/SwitchRoot.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/switch/root/SwitchRoot.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((__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 */ SwitchRoot: () => (/* binding */ SwitchRoot)\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 _base_ui_utils_useControlled__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @base-ui/utils/useControlled */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useControlled.js\");\n/* harmony import */ var _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @base-ui/utils/useStableCallback */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useStableCallback.js\");\n/* harmony import */ var _base_ui_utils_useMergedRefs__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @base-ui/utils/useMergedRefs */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useMergedRefs.js\");\n/* harmony import */ var _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @base-ui/utils/useIsoLayoutEffect */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _base_ui_utils_visuallyHidden__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @base-ui/utils/visuallyHidden */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/visuallyHidden.js\");\n/* harmony import */ var _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @base-ui/utils/empty */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js\");\n/* harmony import */ var _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../../internals/useRenderElement.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useRenderElement.js\");\n/* harmony import */ var _merge_props_index_js__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../merge-props/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/merge-props/mergeProps.js\");\n/* harmony import */ var _internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../internals/useBaseUiId.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useBaseUiId.js\");\n/* harmony import */ var _internals_use_button_index_js__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../internals/use-button/index.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/use-button/useButton.js\");\n/* harmony import */ var _SwitchRootContext_js__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ./SwitchRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/root/SwitchRootContext.js\");\n/* harmony import */ var _stateAttributesMapping_js__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../stateAttributesMapping.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/stateAttributesMapping.js\");\n/* harmony import */ var _internals_field_root_context_FieldRootContext_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../internals/field-root-context/FieldRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/field-root-context/FieldRootContext.js\");\n/* harmony import */ var _internals_field_register_control_useRegisterFieldControl_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../../internals/field-register-control/useRegisterFieldControl.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/field-register-control/useRegisterFieldControl.js\");\n/* harmony import */ var _internals_form_context_FormContext_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../internals/form-context/FormContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/form-context/FormContext.js\");\n/* harmony import */ var _internals_labelable_provider_LabelableContext_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../internals/labelable-provider/LabelableContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/labelable-provider/LabelableContext.js\");\n/* harmony import */ var _internals_labelable_provider_useAriaLabelledBy_js__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../internals/labelable-provider/useAriaLabelledBy.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/labelable-provider/useAriaLabelledBy.js\");\n/* harmony import */ var _internals_labelable_provider_useLabelableId_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../internals/labelable-provider/useLabelableId.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/labelable-provider/useLabelableId.js\");\n/* harmony import */ var _internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../../internals/createBaseUIEventDetails.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/createBaseUIEventDetails.js\");\n/* harmony import */ var _internals_reasons_js__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../../internals/reasons.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/reason-parts.js\");\n/* harmony import */ var _internals_useValueChanged_js__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../internals/useValueChanged.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useValueChanged.js\");\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__ SwitchRoot auto */ var _s = $RefreshSig$();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Represents the switch itself.\n * Renders a `<span>` element and a hidden `<input>` beside.\n *\n * Documentation: [Base UI Switch](https://base-ui.com/react/components/switch)\n */ \nconst SwitchRoot = /*#__PURE__*/ _s(react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c = _s(function SwitchRoot(componentProps, forwardedRef) {\n _s();\n const { checked: checkedProp, className, defaultChecked, 'aria-labelledby': ariaLabelledByProp, form, id: idProp, inputRef: externalInputRef, name: nameProp, nativeButton = false, onCheckedChange: onCheckedChangeProp, readOnly = false, required = false, disabled: disabledProp = false, render, uncheckedValue, value, style, ...elementProps } = componentProps;\n const { clearErrors } = (0,_internals_form_context_FormContext_js__WEBPACK_IMPORTED_MODULE_2__.useFormContext)();\n const { state: fieldState, setTouched, setDirty, validityData, setFilled, setFocused, shouldValidateOnChange, validationMode, disabled: fieldDisabled, name: fieldName, validation } = (0,_internals_field_root_context_FieldRootContext_js__WEBPACK_IMPORTED_MODULE_3__.useFieldRootContext)();\n const { labelId } = (0,_internals_labelable_provider_LabelableContext_js__WEBPACK_IMPORTED_MODULE_4__.useLabelableContext)();\n const disabled = fieldDisabled || disabledProp;\n const name = fieldName !== null && fieldName !== void 0 ? fieldName : nameProp;\n const onCheckedChange = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_5__.useStableCallback)(onCheckedChangeProp);\n const inputRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const handleInputRef = (0,_base_ui_utils_useMergedRefs__WEBPACK_IMPORTED_MODULE_6__.useMergedRefs)(inputRef, externalInputRef, validation.inputRef);\n const switchRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const id = (0,_internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_7__.useBaseUiId)();\n const controlId = (0,_internals_labelable_provider_useLabelableId_js__WEBPACK_IMPORTED_MODULE_8__.useLabelableId)({\n id: idProp,\n implicit: false,\n controlRef: switchRef\n });\n const hiddenInputId = nativeButton ? undefined : controlId;\n const [checked, setCheckedState] = (0,_base_ui_utils_useControlled__WEBPACK_IMPORTED_MODULE_9__.useControlled)({\n controlled: checkedProp,\n default: Boolean(defaultChecked),\n name: 'Switch',\n state: 'checked'\n });\n (0,_internals_field_register_control_useRegisterFieldControl_js__WEBPACK_IMPORTED_MODULE_10__.useRegisterFieldControl)(switchRef, {\n id,\n value: checked\n });\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_11__.useIsoLayoutEffect)({\n \"SwitchRoot.SwitchRoot.useIsoLayoutEffect\": ()=>{\n if (inputRef.current) {\n setFilled(inputRef.current.checked);\n }\n }\n }[\"SwitchRoot.SwitchRoot.useIsoLayoutEffect\"], [\n inputRef,\n setFilled\n ]);\n (0,_internals_useValueChanged_js__WEBPACK_IMPORTED_MODULE_12__.useValueChanged)(checked, {\n \"SwitchRoot.SwitchRoot.useValueChanged\": ()=>{\n clearErrors(name);\n setDirty(checked !== validityData.initialValue);\n setFilled(checked);\n if (shouldValidateOnChange()) {\n validation.commit(checked);\n } else {\n validation.commit(checked, true);\n }\n }\n }[\"SwitchRoot.SwitchRoot.useValueChanged\"]);\n const { getButtonProps, buttonRef } = (0,_internals_use_button_index_js__WEBPACK_IMPORTED_MODULE_13__.useButton)({\n disabled,\n native: nativeButton\n });\n const ariaLabelledBy = (0,_internals_labelable_provider_useAriaLabelledBy_js__WEBPACK_IMPORTED_MODULE_14__.useAriaLabelledBy)(ariaLabelledByProp, labelId, inputRef, !nativeButton, hiddenInputId);\n const rootProps = {\n id: nativeButton ? controlId : id,\n role: 'switch',\n 'aria-checked': checked,\n 'aria-readonly': readOnly || undefined,\n 'aria-required': required || undefined,\n 'aria-labelledby': ariaLabelledBy,\n onFocus () {\n if (!disabled) {\n setFocused(true);\n }\n },\n onBlur () {\n const element = inputRef.current;\n if (!element || disabled) {\n return;\n }\n setTouched(true);\n setFocused(false);\n if (validationMode === 'onBlur') {\n validation.commit(element.checked);\n }\n },\n onClick (event) {\n var _inputRef_current;\n if (readOnly || disabled) {\n return;\n }\n event.preventDefault();\n (_inputRef_current = inputRef.current) === null || _inputRef_current === void 0 ? void 0 : _inputRef_current.dispatchEvent(new PointerEvent('click', {\n bubbles: true,\n shiftKey: event.shiftKey,\n ctrlKey: event.ctrlKey,\n altKey: event.altKey,\n metaKey: event.metaKey\n }));\n }\n };\n const inputProps = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"SwitchRoot.SwitchRoot.useMemo[inputProps]\": ()=>(0,_merge_props_index_js__WEBPACK_IMPORTED_MODULE_15__.mergeProps)({\n checked,\n disabled,\n form,\n id: hiddenInputId,\n name,\n required,\n style: name ? _base_ui_utils_visuallyHidden__WEBPACK_IMPORTED_MODULE_16__.visuallyHiddenInput : _base_ui_utils_visuallyHidden__WEBPACK_IMPORTED_MODULE_16__.visuallyHidden,\n tabIndex: -1,\n type: 'checkbox',\n 'aria-hidden': true,\n ref: handleInputRef,\n onChange (event) {\n // Workaround for https://github.com/facebook/react/issues/9023\n if (event.nativeEvent.defaultPrevented) {\n return;\n }\n if (readOnly) {\n event.preventDefault();\n return;\n }\n const nextChecked = event.currentTarget.checked;\n const eventDetails = (0,_internals_createBaseUIEventDetails_js__WEBPACK_IMPORTED_MODULE_17__.createChangeEventDetails)(_internals_reasons_js__WEBPACK_IMPORTED_MODULE_18__.none, event.nativeEvent);\n onCheckedChange === null || onCheckedChange === void 0 ? void 0 : onCheckedChange(nextChecked, eventDetails);\n if (eventDetails.isCanceled) {\n return;\n }\n setCheckedState(nextChecked);\n },\n onFocus () {\n var _switchRef_current;\n (_switchRef_current = switchRef.current) === null || _switchRef_current === void 0 ? void 0 : _switchRef_current.focus();\n }\n }, validation.getInputValidationProps, // React <19 sets an empty value if `undefined` is passed explicitly\n // To avoid this, we only set the value if it's defined\n value !== undefined ? {\n value\n } : _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_19__.EMPTY_OBJECT)\n }[\"SwitchRoot.SwitchRoot.useMemo[inputProps]\"], [\n checked,\n disabled,\n form,\n handleInputRef,\n hiddenInputId,\n name,\n onCheckedChange,\n readOnly,\n required,\n setCheckedState,\n validation,\n value\n ]);\n const state = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"SwitchRoot.SwitchRoot.useMemo[state]\": ()=>({\n ...fieldState,\n checked,\n disabled,\n readOnly,\n required\n })\n }[\"SwitchRoot.SwitchRoot.useMemo[state]\"], [\n fieldState,\n checked,\n disabled,\n readOnly,\n required\n ]);\n const element = (0,_internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_20__.useRenderElement)('span', componentProps, {\n state,\n ref: [\n forwardedRef,\n switchRef,\n buttonRef\n ],\n props: [\n rootProps,\n validation.getValidationProps,\n elementProps,\n getButtonProps\n ],\n stateAttributesMapping: _stateAttributesMapping_js__WEBPACK_IMPORTED_MODULE_21__.stateAttributesMapping\n });\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(_SwitchRootContext_js__WEBPACK_IMPORTED_MODULE_22__.SwitchRootContext.Provider, {\n value: state,\n children: [\n element,\n !checked && name && uncheckedValue !== undefined && /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(\"input\", {\n type: \"hidden\",\n form: form,\n name: name,\n value: uncheckedValue\n }),\n /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(\"input\", {\n ...inputProps,\n suppressHydrationWarning: true\n })\n ]\n });\n}, \"9IB7Zj+O3q1CNvrv8lieM6K2rhc=\", false, function() {\n return [\n _internals_form_context_FormContext_js__WEBPACK_IMPORTED_MODULE_2__.useFormContext,\n _internals_field_root_context_FieldRootContext_js__WEBPACK_IMPORTED_MODULE_3__.useFieldRootContext,\n _internals_labelable_provider_LabelableContext_js__WEBPACK_IMPORTED_MODULE_4__.useLabelableContext,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_5__.useStableCallback,\n _base_ui_utils_useMergedRefs__WEBPACK_IMPORTED_MODULE_6__.useMergedRefs,\n _internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_7__.useBaseUiId,\n _internals_labelable_provider_useLabelableId_js__WEBPACK_IMPORTED_MODULE_8__.useLabelableId,\n _base_ui_utils_useControlled__WEBPACK_IMPORTED_MODULE_9__.useControlled,\n _internals_field_register_control_useRegisterFieldControl_js__WEBPACK_IMPORTED_MODULE_10__.useRegisterFieldControl,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_11__.useIsoLayoutEffect,\n _internals_useValueChanged_js__WEBPACK_IMPORTED_MODULE_12__.useValueChanged,\n _internals_use_button_index_js__WEBPACK_IMPORTED_MODULE_13__.useButton,\n _internals_labelable_provider_useAriaLabelledBy_js__WEBPACK_IMPORTED_MODULE_14__.useAriaLabelledBy,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_20__.useRenderElement\n ];\n})), \"9IB7Zj+O3q1CNvrv8lieM6K2rhc=\", false, function() {\n return [\n _internals_form_context_FormContext_js__WEBPACK_IMPORTED_MODULE_2__.useFormContext,\n _internals_field_root_context_FieldRootContext_js__WEBPACK_IMPORTED_MODULE_3__.useFieldRootContext,\n _internals_labelable_provider_LabelableContext_js__WEBPACK_IMPORTED_MODULE_4__.useLabelableContext,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_5__.useStableCallback,\n _base_ui_utils_useMergedRefs__WEBPACK_IMPORTED_MODULE_6__.useMergedRefs,\n _internals_useBaseUiId_js__WEBPACK_IMPORTED_MODULE_7__.useBaseUiId,\n _internals_labelable_provider_useLabelableId_js__WEBPACK_IMPORTED_MODULE_8__.useLabelableId,\n _base_ui_utils_useControlled__WEBPACK_IMPORTED_MODULE_9__.useControlled,\n _internals_field_register_control_useRegisterFieldControl_js__WEBPACK_IMPORTED_MODULE_10__.useRegisterFieldControl,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_11__.useIsoLayoutEffect,\n _internals_useValueChanged_js__WEBPACK_IMPORTED_MODULE_12__.useValueChanged,\n _internals_use_button_index_js__WEBPACK_IMPORTED_MODULE_13__.useButton,\n _internals_labelable_provider_useAriaLabelledBy_js__WEBPACK_IMPORTED_MODULE_14__.useAriaLabelledBy,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_20__.useRenderElement\n ];\n});\n_c1 = SwitchRoot;\nif (true) SwitchRoot.displayName = \"SwitchRoot\";\nvar _c, _c1;\n$RefreshReg$(_c, \"SwitchRoot$React.forwardRef\");\n$RefreshReg$(_c1, \"SwitchRoot\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vc3dpdGNoL3Jvb3QvU3dpdGNoUm9vdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRStCO0FBQzhCO0FBQ1E7QUFDUjtBQUNVO0FBQ2E7QUFDaEM7QUFDbUI7QUFDZjtBQUNLO0FBQ0c7QUFDTDtBQUNXO0FBQ3VCO0FBQ2U7QUFDL0I7QUFDZ0I7QUFDRDtBQUNOO0FBQ0M7QUFDbEM7QUFDZ0I7QUFFckU7Ozs7O0NBS0MsR0FDOEQ7QUFDeEQsTUFBTTJCLGFBQWEsV0FBVyxHQUFFM0IsR0FBQUEsNkNBQWdCLFNBQUMsU0FBUzJCLFdBQVdFLGNBQWMsRUFBRUMsWUFBWTs7SUFDdEcsTUFBTSxFQUNKQyxTQUFTQyxXQUFXLEVBQ3BCQyxTQUFTLEVBQ1RDLGNBQWMsRUFDZCxtQkFBbUJDLGtCQUFrQixFQUNyQ0MsSUFBSSxFQUNKQyxJQUFJQyxNQUFNLEVBQ1ZDLFVBQVVDLGdCQUFnQixFQUMxQkMsTUFBTUMsUUFBUSxFQUNkQyxlQUFlLEtBQUssRUFDcEJDLGlCQUFpQkMsbUJBQW1CLEVBQ3BDQyxXQUFXLEtBQUssRUFDaEJDLFdBQVcsS0FBSyxFQUNoQkMsVUFBVUMsZUFBZSxLQUFLLEVBQzlCQyxNQUFNLEVBQ05DLGNBQWMsRUFDZEMsS0FBSyxFQUNMQyxLQUFLLEVBQ0wsR0FBR0MsY0FDSixHQUFHekI7SUFDSixNQUFNLEVBQ0owQixXQUFXLEVBQ1osR0FBR3ZDLHNGQUFjQTtJQUNsQixNQUFNLEVBQ0p3QyxPQUFPQyxVQUFVLEVBQ2pCQyxVQUFVLEVBQ1ZDLFFBQVEsRUFDUkMsWUFBWSxFQUNaQyxTQUFTLEVBQ1RDLFVBQVUsRUFDVkMsc0JBQXNCLEVBQ3RCQyxjQUFjLEVBQ2RoQixVQUFVaUIsYUFBYSxFQUN2QnhCLE1BQU15QixTQUFTLEVBQ2ZDLFVBQVUsRUFDWCxHQUFHckQsc0dBQW1CQTtJQUN2QixNQUFNLEVBQ0pzRCxP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ZXMvQGJhc2UtdWkvcmVhY3QvZXNtL3N3aXRjaC9yb290L1N3aXRjaFJvb3QuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250cm9sbGVkIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlQ29udHJvbGxlZCc7XG5pbXBvcnQgeyB1c2VTdGFibGVDYWxsYmFjayB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZVN0YWJsZUNhbGxiYWNrJztcbmltcG9ydCB7IHVzZU1lcmdlZFJlZnMgfSBmcm9tICdAYmFzZS11aS91dGlscy91c2VNZXJnZWRSZWZzJztcbmltcG9ydCB7IHVzZUlzb0xheW91dEVmZmVjdCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZUlzb0xheW91dEVmZmVjdCc7XG5pbXBvcnQgeyB2aXN1YWxseUhpZGRlbiwgdmlzdWFsbHlIaWRkZW5JbnB1dCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3Zpc3VhbGx5SGlkZGVuJztcbmltcG9ydCB7IEVNUFRZX09CSkVDVCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL2VtcHR5JztcbmltcG9ydCB7IHVzZVJlbmRlckVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL3VzZVJlbmRlckVsZW1lbnQuanNcIjtcbmltcG9ydCB7IG1lcmdlUHJvcHMgfSBmcm9tIFwiLi4vLi4vbWVyZ2UtcHJvcHMvaW5kZXguanNcIjtcbmltcG9ydCB7IHVzZUJhc2VVaUlkIH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy91c2VCYXNlVWlJZC5qc1wiO1xuaW1wb3J0IHsgdXNlQnV0dG9uIH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy91c2UtYnV0dG9uL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBTd2l0Y2hSb290Q29udGV4dCB9IGZyb20gXCIuL1N3aXRjaFJvb3RDb250ZXh0LmpzXCI7XG5pbXBvcnQgeyBzdGF0ZUF0dHJpYnV0ZXNNYXBwaW5nIH0gZnJvbSBcIi4uL3N0YXRlQXR0cmlidXRlc01hcHBpbmcuanNcIjtcbmltcG9ydCB7IHVzZUZpZWxkUm9vdENvbnRleHQgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL2ZpZWxkLXJvb3QtY29udGV4dC9GaWVsZFJvb3RDb250ZXh0LmpzXCI7XG5pbXBvcnQgeyB1c2VSZWdpc3RlckZpZWxkQ29udHJvbCB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvZmllbGQtcmVnaXN0ZXItY29udHJvbC91c2VSZWdpc3RlckZpZWxkQ29udHJvbC5qc1wiO1xuaW1wb3J0IHsgdXNlRm9ybUNvbnRleHQgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL2Zvcm0tY29udGV4dC9Gb3JtQ29udGV4dC5qc1wiO1xuaW1wb3J0IHsgdXNlTGFiZWxhYmxlQ29udGV4dCB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvbGFiZWxhYmxlLXByb3ZpZGVyL0xhYmVsYWJsZUNvbnRleHQuanNcIjtcbmltcG9ydCB7IHVzZUFyaWFMYWJlbGxlZEJ5IH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy9sYWJlbGFibGUtcHJvdmlkZXIvdXNlQXJpYUxhYmVsbGVkQnkuanNcIjtcbmltcG9ydCB7IHVzZUxhYmVsYWJsZUlkIH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy9sYWJlbGFibGUtcHJvdmlkZXIvdXNlTGFiZWxhYmxlSWQuanNcIjtcbmltcG9ydCB7IGNyZWF0ZUNoYW5nZUV2ZW50RGV0YWlscyB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvY3JlYXRlQmFzZVVJRXZlbnREZXRhaWxzLmpzXCI7XG5pbXBvcnQgeyBSRUFTT05TIH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy9yZWFzb25zLmpzXCI7XG5pbXBvcnQgeyB1c2VWYWx1ZUNoYW5nZWQgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL3VzZVZhbHVlQ2hhbmdlZC5qc1wiO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIHN3aXRjaCBpdHNlbGYuXG4gKiBSZW5kZXJzIGEgYDxzcGFuPmAgZWxlbWVudCBhbmQgYSBoaWRkZW4gYDxpbnB1dD5gIGJlc2lkZS5cbiAqXG4gKiBEb2N1bWVudGF0aW9uOiBbQmFzZSBVSSBTd2l0Y2hdKGh0dHBzOi8vYmFzZS11aS5jb20vcmVhY3QvY29tcG9uZW50cy9zd2l0Y2gpXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3QgU3dpdGNoUm9vdCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFN3aXRjaFJvb3QoY29tcG9uZW50UHJvcHMsIGZvcndhcmRlZFJlZikge1xuICBjb25zdCB7XG4gICAgY2hlY2tlZDogY2hlY2tlZFByb3AsXG4gICAgY2xhc3NOYW1lLFxuICAgIGRlZmF1bHRDaGVja2VkLFxuICAgICdhcmlhLWxhYmVsbGVkYnknOiBhcmlhTGFiZWxsZWRCeVByb3AsXG4gICAgZm9ybSxcbiAgICBpZDogaWRQcm9wLFxuICAgIGlucHV0UmVmOiBleHRlcm5hbElucHV0UmVmLFxuICAgIG5hbWU6IG5hbWVQcm9wLFxuICAgIG5hdGl2ZUJ1dHRvbiA9IGZhbHNlLFxuICAgIG9uQ2hlY2tlZENoYW5nZTogb25DaGVja2VkQ2hhbmdlUHJvcCxcbiAgICByZWFkT25seSA9IGZhbHNlLFxuICAgIHJlcXVpcmVkID0gZmFsc2UsXG4gICAgZGlzYWJsZWQ6IGRpc2FibGVkUHJvcCA9IGZhbHNlLFxuICAgIHJlbmRlcixcbiAgICB1bmNoZWNrZWRWYWx1ZSxcbiAgICB2YWx1ZSxcbiAgICBzdHlsZSxcbiAgICAuLi5lbGVtZW50UHJvcHNcbiAgfSA9IGNvbXBvbmVudFByb3BzO1xuICBjb25zdCB7XG4gICAgY2xlYXJFcnJvcnNcbiAgfSA9IHVzZUZvcm1Db250ZXh0KCk7XG4gIGNvbnN0IHtcbiAgICBzdGF0ZTogZmllbGRTdGF0ZSxcbiAgICBzZXRUb3VjaGVkLFxuICAgIHNldERpcnR5LFxuICAgIHZhbGlkaXR5RGF0YSxcbiAgICBzZXRGaWxsZWQsXG4gICAgc2V0Rm9jdXNlZCxcbiAgICBzaG91bGRWYWxpZGF0ZU9uQ2hhbmdlLFxuICAgIHZhbGlkYXRpb25Nb2RlLFxuICAgIGRpc2FibGVkOiBmaWVsZERpc2FibGVkLFxuICAgIG5hbWU6IGZpZWxkTmFtZSxcbiAgICB2YWxpZGF0aW9uXG4gIH0gPSB1c2VGaWVsZFJvb3RDb250ZXh0KCk7XG4gIGNvbnN0IHtcbiAgICBsYWJlbElkXG4gIH0gPSB1c2VMYWJlbGFibGVDb250ZXh0KCk7XG4gIGNvbnN0IGRpc2FibGVkID0gZmllbGREaXNhYmxlZCB8fCBkaXNhYmxlZFByb3A7XG4gIGNvbnN0IG5hbWUgPSBmaWVsZE5hbWUgPz8gbmFtZVByb3A7XG4gIGNvbnN0IG9uQ2hlY2tlZENoYW5nZSA9IHVzZVN0YWJsZUNhbGxiYWNrKG9uQ2hlY2tlZENoYW5nZVByb3ApO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlSW5wdXRSZWYgPSB1c2VNZXJnZWRSZWZzKGlucHV0UmVmLCBleHRlcm5hbElucHV0UmVmLCB2YWxpZGF0aW9uLmlucHV0UmVmKTtcbiAgY29uc3Qgc3dpdGNoUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBpZCA9IHVzZUJhc2VVaUlkKCk7XG4gIGNvbnN0IGNvbnRyb2xJZCA9IHVzZUxhYmVsYWJsZUlkKHtcbiAgICBpZDogaWRQcm9wLFxuICAgIGltcGxpY2l0OiBmYWxzZSxcbiAgICBjb250cm9sUmVmOiBzd2l0Y2hSZWZcbiAgfSk7XG4gIGNvbnN0IGhpZGRlbklucHV0SWQgPSBuYXRpdmVCdXR0b24gPyB1bmRlZmluZWQgOiBjb250cm9sSWQ7XG4gIGNvbnN0IFtjaGVja2VkLCBzZXRDaGVja2VkU3RhdGVdID0gdXNlQ29udHJvbGxlZCh7XG4gICAgY29udHJvbGxlZDogY2hlY2tlZFByb3AsXG4gICAgZGVmYXVsdDogQm9vbGVhbihkZWZhdWx0Q2hlY2tlZCksXG4gICAgbmFtZTogJ1N3aXRjaCcsXG4gICAgc3RhdGU6ICdjaGVja2VkJ1xuICB9KTtcbiAgdXNlUmVnaXN0ZXJGaWVsZENvbnRyb2woc3dpdGNoUmVmLCB7XG4gICAgaWQsXG4gICAgdmFsdWU6IGNoZWNrZWRcbiAgfSk7XG4gIHVzZUlzb0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlucHV0UmVmLmN1cnJlbnQpIHtcbiAgICAgIHNldEZpbGxlZChpbnB1dFJlZi5jdXJyZW50LmNoZWNrZWQpO1xuICAgIH1cbiAgfSwgW2lucHV0UmVmLCBzZXRGaWxsZWRdKTtcbiAgdXNlVmFsdWVDaGFuZ2VkKGNoZWNrZWQsICgpID0+IHtcbiAgICBjbGVhckVycm9ycyhuYW1lKTtcbiAgICBzZXREaXJ0eShjaGVja2VkICE9PSB2YWxpZGl0eURhdGEuaW5pdGlhbFZhbHVlKTtcbiAgICBzZXRGaWxsZWQoY2hlY2tlZCk7XG4gICAgaWYgKHNob3VsZFZhbGlkYXRlT25DaGFuZ2UoKSkge1xuICAgICAgdmFsaWRhdGlvbi5jb21taXQoY2hlY2tlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRpb24uY29tbWl0KGNoZWNrZWQsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHtcbiAgICBnZXRCdXR0b25Qcm9wcyxcbiAgICBidXR0b25SZWZcbiAgfSA9IHVzZUJ1dHRvbih7XG4gICAgZGlzYWJsZWQsXG4gICAgbmF0aXZlOiBuYXRpdmVCdXR0b25cbiAgfSk7XG4gIGNvbnN0IGFyaWFMYWJlbGxlZEJ5ID0gdXNlQXJpYUxhYmVsbGVkQnkoYXJpYUxhYmVsbGVkQnlQcm9wLCBsYWJlbElkLCBpbnB1dFJlZiwgIW5hdGl2ZUJ1dHRvbiwgaGlkZGVuSW5wdXRJZCk7XG4gIGNvbnN0IHJvb3RQcm9wcyA9IHtcbiAgICBpZDogbmF0aXZlQnV0dG9uID8gY29udHJvbElkIDogaWQsXG4gICAgcm9sZTogJ3N3aXRjaCcsXG4gICAgJ2FyaWEtY2hlY2tlZCc6IGNoZWNrZWQsXG4gICAgJ2FyaWEtcmVhZG9ubHknOiByZWFkT25seSB8fCB1bmRlZmluZWQsXG4gICAgJ2FyaWEtcmVxdWlyZWQnOiByZXF1aXJlZCB8fCB1bmRlZmluZWQsXG4gICAgJ2FyaWEtbGFiZWxsZWRieSc6IGFyaWFMYWJlbGxlZEJ5LFxuICAgIG9uRm9jdXMoKSB7XG4gICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgIHNldEZvY3VzZWQodHJ1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbkJsdXIoKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gaW5wdXRSZWYuY3VycmVudDtcbiAgICAgIGlmICghZWxlbWVudCB8fCBkaXNhYmxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXRUb3VjaGVkKHRydWUpO1xuICAgICAgc2V0Rm9jdXNlZChmYWxzZSk7XG4gICAgICBpZiAodmFsaWRhdGlvbk1vZGUgPT09ICdvbkJsdXInKSB7XG4gICAgICAgIHZhbGlkYXRpb24uY29tbWl0KGVsZW1lbnQuY2hlY2tlZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBvbkNsaWNrKGV2ZW50KSB7XG4gICAgICBpZiAocmVhZE9ubHkgfHwgZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQ/LmRpc3BhdGNoRXZlbnQobmV3IFBvaW50ZXJFdmVudCgnY2xpY2snLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIHNoaWZ0S2V5OiBldmVudC5zaGlmdEtleSxcbiAgICAgICAgY3RybEtleTogZXZlbnQuY3RybEtleSxcbiAgICAgICAgYWx0S2V5OiBldmVudC5hbHRLZXksXG4gICAgICAgIG1ldGFLZXk6IGV2ZW50Lm1ldGFLZXlcbiAgICAgIH0pKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGlucHV0UHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IG1lcmdlUHJvcHMoe1xuICAgIGNoZWNrZWQsXG4gICAgZGlzYWJsZWQsXG4gICAgZm9ybSxcbiAgICBpZDogaGlkZGVuSW5wdXRJZCxcbiAgICBuYW1lLFxuICAgIHJlcXVpcmVkLFxuICAgIHN0eWxlOiBuYW1lID8gdmlzdWFsbHlIaWRkZW5JbnB1dCA6IHZpc3VhbGx5SGlkZGVuLFxuICAgIHRhYkluZGV4OiAtMSxcbiAgICB0eXBlOiAnY2hlY2tib3gnLFxuICAgICdhcmlhLWhpZGRlbic6IHRydWUsXG4gICAgcmVmOiBoYW5kbGVJbnB1dFJlZixcbiAgICBvbkNoYW5nZShldmVudCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0L2lzc3Vlcy85MDIzXG4gICAgICBpZiAoZXZlbnQubmF0aXZlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocmVhZE9ubHkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV4dENoZWNrZWQgPSBldmVudC5jdXJyZW50VGFyZ2V0LmNoZWNrZWQ7XG4gICAgICBjb25zdCBldmVudERldGFpbHMgPSBjcmVhdGVDaGFuZ2VFdmVudERldGFpbHMoUkVBU09OUy5ub25lLCBldmVudC5uYXRpdmVFdmVudCk7XG4gICAgICBvbkNoZWNrZWRDaGFuZ2U/LihuZXh0Q2hlY2tlZCwgZXZlbnREZXRhaWxzKTtcbiAgICAgIGlmIChldmVudERldGFpbHMuaXNDYW5jZWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZXRDaGVja2VkU3RhdGUobmV4dENoZWNrZWQpO1xuICAgIH0sXG4gICAgb25Gb2N1cygpIHtcbiAgICAgIHN3aXRjaFJlZi5jdXJyZW50Py5mb2N1cygpO1xuICAgIH1cbiAgfSwgdmFsaWRhdGlvbi5nZXRJbnB1dFZhbGlkYXRpb25Qcm9wcyxcbiAgLy8gUmVhY3QgPDE5IHNldHMgYW4gZW1wdHkgdmFsdWUgaWYgYHVuZGVmaW5lZGAgaXMgcGFzc2VkIGV4cGxpY2l0bHlcbiAgLy8gVG8gYXZvaWQgdGhpcywgd2Ugb25seSBzZXQgdGhlIHZhbHVlIGlmIGl0J3MgZGVmaW5lZFxuICB2YWx1ZSAhPT0gdW5kZWZpbmVkID8ge1xuICAgIHZhbHVlXG4gIH0gOiBFTVBUWV9PQkpFQ1QpLCBbY2hlY2tlZCwgZGlzYWJsZWQsIGZvcm0sIGhhbmRsZUlucHV0UmVmLCBoaWRkZW5JbnB1dElkLCBuYW1lLCBvbkNoZWNrZWRDaGFuZ2UsIHJlYWRPbmx5LCByZXF1aXJlZCwgc2V0Q2hlY2tlZFN0YXRlLCB2YWxpZGF0aW9uLCB2YWx1ZV0pO1xuICBjb25zdCBzdGF0ZSA9IFJlYWN0LnVzZU1lbW8oKCkgPT4gKHtcbiAgICAuLi5maWVsZFN0YXRlLFxuICAgIGNoZWNrZWQsXG4gICAgZGlzYWJsZWQsXG4gICAgcmVhZE9ubHksXG4gICAgcmVxdWlyZWRcbiAgfSksIFtmaWVsZFN0YXRlLCBjaGVja2VkLCBkaXNhYmxlZCwgcmVhZE9ubHksIHJlcXVpcmVkXSk7XG4gIGNvbnN0IGVsZW1lbnQgPSB1c2VSZW5kZXJFbGVtZW50KCdzcGFuJywgY29tcG9uZW50UHJvcHMsIHtcbiAgICBzdGF0ZSxcbiAgICByZWY6IFtmb3J3YXJkZWRSZWYsIHN3aXRjaFJlZiwgYnV0dG9uUmVmXSxcbiAgICBwcm9wczogW3Jvb3RQcm9wcywgdmFsaWRhdGlvbi5nZXRWYWxpZGF0aW9uUHJvcHMsIGVsZW1lbnRQcm9wcywgZ2V0QnV0dG9uUHJvcHNdLFxuICAgIHN0YXRlQXR0cmlidXRlc01hcHBpbmdcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeHMoU3dpdGNoUm9vdENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogc3RhdGUsXG4gICAgY2hpbGRyZW46IFtlbGVtZW50LCAhY2hlY2tlZCAmJiBuYW1lICYmIHVuY2hlY2tlZFZhbHVlICE9PSB1bmRlZmluZWQgJiYgLyojX19QVVJFX18qL19qc3goXCJpbnB1dFwiLCB7XG4gICAgICB0eXBlOiBcImhpZGRlblwiLFxuICAgICAgZm9ybTogZm9ybSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICB2YWx1ZTogdW5jaGVja2VkVmFsdWVcbiAgICB9KSwgLyojX19QVVJFX18qL19qc3goXCJpbnB1dFwiLCB7XG4gICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nOiB0cnVlXG4gICAgfSldXG4gIH0pO1xufSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSBTd2l0Y2hSb290LmRpc3BsYXlOYW1lID0gXCJTd2l0Y2hSb290XCI7Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlQ29udHJvbGxlZCIsInVzZVN0YWJsZUNhbGxiYWNrIiwidXNlTWVyZ2VkUmVmcyIsInVzZUlzb0xheW91dEVmZmVjdCIsInZpc3VhbGx5SGlkZGVuIiwidmlzdWFsbHlIaWRkZW5JbnB1dCIsIkVNUFRZX09CSkVDVCIsInVzZVJlbmRlckVsZW1lbnQiLCJtZXJnZVByb3BzIiwidXNlQmFzZVVpSWQiLCJ1c2VCdXR0b24iLCJTd2l0Y2hSb290Q29udGV4dCIsInN0YXRlQXR0cmlidXRlc01hcHBpbmciLCJ1c2VGaWVsZFJvb3RDb250ZXh0IiwidXNlUmVnaXN0ZXJGaWVsZENvbnRyb2wiLCJ1c2VGb3JtQ29udGV4dCIsInVzZUxhYmVsYWJsZUNvbnRleHQiLCJ1c2VBcmlhTGFiZWxsZWRCeSIsInVzZUxhYmVsYWJsZUlkIiwiY3JlYXRlQ2hhbmdlRXZlbnREZXRhaWxzIiwiUkVBU09OUyIsInVzZVZhbHVlQ2hhbmdlZCIsImpzeCIsIl9qc3giLCJqc3hzIiwiX2pzeHMiLCJTd2l0Y2hSb290IiwiZm9yd2FyZFJlZiIsImNvbXBvbmVudFByb3BzIiwiZm9yd2FyZGVkUmVmIiwiY2hlY2tlZCIsImNoZWNrZWRQcm9wIiwiY2xhc3NOYW1lIiwiZGVmYXVsdENoZWNrZWQiLCJhcmlhTGFiZWxsZWRCeVByb3AiLCJmb3JtIiwiaWQiLCJpZFByb3AiLCJpbnB1dFJlZiIsImV4dGVybmFsSW5wdXRSZWYiLCJuYW1lIiwibmFtZVByb3AiLCJuYXRpdmVCdXR0b24iLCJvbkNoZWNrZWRDaGFuZ2UiLCJvbkNoZWNrZWRDaGFuZ2VQcm9wIiwicmVhZE9ubHkiLCJyZXF1aXJlZCIsImRpc2FibGVkIiwiZGlzYWJsZWRQcm9wIiwicmVuZGVyIiwidW5jaGVja2VkVmFsdWUiLCJ2YWx1ZSIsInN0eWxlIiwiZWxlbWVudFByb3BzIiwiY2xlYXJFcnJvcnMiLCJzdGF0ZSIsImZpZWxkU3RhdGUiLCJzZXRUb3VjaGVkIiwic2V0RGlydHkiLCJ2YWxpZGl0eURhdGEiLCJzZXRGaWxsZWQiLCJzZXRGb2N1c2VkIiwic2hvdWxkVmFsaWRhdGVPbkNoYW5nZSIsInZhbGlkYXRpb25Nb2RlIiwiZmllbGREaXNhYmxlZCIsImZpZWxkTmFtZSIsInZhbGlkYXRpb24iLCJsYWJlbElkIiwidXNlUmVmIiwiaGFuZGxlSW5wdXRSZWYiLCJzd2l0Y2hSZWYiLCJjb250cm9sSWQiLCJpbXBsaWNpdCIsImNvbnRyb2xSZWYiLCJoaWRkZW5JbnB1dElkIiwidW5kZWZpbmVkIiwic2V0Q2hlY2tlZFN0YXRlIiwiY29udHJvbGxlZCIsImRlZmF1bHQiLCJCb29sZWFuIiwiY3VycmVudCIsImluaXRpYWxWYWx1ZSIsImNvbW1pdCIsImdldEJ1dHRvblByb3BzIiwiYnV0dG9uUmVmIiwibmF0aXZlIiwiYXJpYUxhYmVsbGVkQnkiLCJyb290UHJvcHMiLCJyb2xlIiwib25Gb2N1cyIsIm9uQmx1ciIsImVsZW1lbnQiLCJvbkNsaWNrIiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsImRpc3BhdGNoRXZlbnQiLCJQb2ludGVyRXZlbnQiLCJidWJibGVzIiwic2hpZnRLZXkiLCJjdHJsS2V5IiwiYWx0S2V5IiwibWV0YUtleSIsImlucHV0UHJvcHMiLCJ1c2VNZW1vIiwidGFiSW5kZXgiLCJ0eXBlIiwicmVmIiwib25DaGFuZ2UiLCJuYXRpdmVFdmVudCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJuZXh0Q2hlY2tlZCIsImN1cnJlbnRUYXJnZXQiLCJldmVudERldGFpbHMiLCJub25lIiwiaXNDYW5jZWxlZCIsImZvY3VzIiwiZ2V0SW5wdXRWYWxpZGF0aW9uUHJvcHMiLCJwcm9wcyIsImdldFZhbGlkYXRpb25Qcm9wcyIsIlByb3ZpZGVyIiwiY2hpbGRyZW4iLCJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/root/SwitchRoot.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/root/SwitchRootContext.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/switch/root/SwitchRootContext.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((__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 */ SwitchRootContext: () => (/* binding */ SwitchRootContext),\n/* harmony export */ useSwitchRootContext: () => (/* binding */ useSwitchRootContext)\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/* __next_internal_client_entry_do_not_use__ SwitchRootContext,useSwitchRootContext auto */ var _s = $RefreshSig$();\n\n\nconst SwitchRootContext = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(undefined);\nif (true) SwitchRootContext.displayName = \"SwitchRootContext\";\nfunction useSwitchRootContext() {\n _s();\n const context = react__WEBPACK_IMPORTED_MODULE_0__.useContext(SwitchRootContext);\n if (context === undefined) {\n throw new Error( true ? 'Base UI: SwitchRootContext is missing. Switch parts must be placed within <Switch.Root>.' : 0);\n }\n return context;\n}\n_s(useSwitchRootContext, \"b9L3QQ+jgeyIrH0NfHrJ8nn7VMU=\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vc3dpdGNoL3Jvb3QvU3dpdGNoUm9vdENvbnRleHQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVvRTtBQUNyQztBQUN4QixNQUFNRSxvQkFBb0IsV0FBVyxHQUFFRCxnREFBbUIsQ0FBQ0csV0FBVztBQUM3RSxJQUFJQyxJQUFxQyxFQUFFSCxrQkFBa0JJLFdBQVcsR0FBRztBQUNwRSxTQUFTQzs7SUFDZCxNQUFNQyxVQUFVUCw2Q0FBZ0IsQ0FBQ0M7SUFDakMsSUFBSU0sWUFBWUosV0FBVztRQUN6QixNQUFNLElBQUlNLE1BQU1MLEtBQXFDLEdBQUcsNkZBQTZGTCxDQUF1QjtJQUM5SztJQUNBLE9BQU9RO0FBQ1Q7R0FOZ0JEIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9zd2l0Y2gvcm9vdC9Td2l0Y2hSb290Q29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZm9ybWF0RXJyb3JNZXNzYWdlIGZyb20gXCJAYmFzZS11aS91dGlscy9mb3JtYXRFcnJvck1lc3NhZ2VcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBjb25zdCBTd2l0Y2hSb290Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSBTd2l0Y2hSb290Q29udGV4dC5kaXNwbGF5TmFtZSA9IFwiU3dpdGNoUm9vdENvbnRleHRcIjtcbmV4cG9ydCBmdW5jdGlvbiB1c2VTd2l0Y2hSb290Q29udGV4dCgpIHtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoU3dpdGNoUm9vdENvbnRleHQpO1xuICBpZiAoY29udGV4dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/ICdCYXNlIFVJOiBTd2l0Y2hSb290Q29udGV4dCBpcyBtaXNzaW5nLiBTd2l0Y2ggcGFydHMgbXVzdCBiZSBwbGFjZWQgd2l0aGluIDxTd2l0Y2guUm9vdD4uJyA6IF9mb3JtYXRFcnJvck1lc3NhZ2UoNjMpKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn0iXSwibmFtZXMiOlsiX2Zvcm1hdEVycm9yTWVzc2FnZSIsIlJlYWN0IiwiU3dpdGNoUm9vdENvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwidW5kZWZpbmVkIiwicHJvY2VzcyIsImRpc3BsYXlOYW1lIiwidXNlU3dpdGNoUm9vdENvbnRleHQiLCJjb250ZXh0IiwidXNlQ29udGV4dCIsIkVycm9yIl0sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/root/SwitchRootContext.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/root/SwitchRootDataAttributes.js":
|
||
/*!*********************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/switch/root/SwitchRootDataAttributes.js ***!
|
||
\*********************************************************************************/
|
||
/***/ ((__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 */ SwitchRootDataAttributes: () => (/* binding */ SwitchRootDataAttributes)\n/* harmony export */ });\nlet SwitchRootDataAttributes = /*#__PURE__*/function (SwitchRootDataAttributes) {\n /**\n * Present when the switch is checked.\n */\n SwitchRootDataAttributes[\"checked\"] = \"data-checked\";\n /**\n * Present when the switch is not checked.\n */\n SwitchRootDataAttributes[\"unchecked\"] = \"data-unchecked\";\n /**\n * Present when the switch is disabled.\n */\n SwitchRootDataAttributes[\"disabled\"] = \"data-disabled\";\n /**\n * Present when the switch is readonly.\n */\n SwitchRootDataAttributes[\"readonly\"] = \"data-readonly\";\n /**\n * Present when the switch is required.\n */\n SwitchRootDataAttributes[\"required\"] = \"data-required\";\n /**\n * Present when the switch is in a valid state (when wrapped in Field.Root).\n */\n SwitchRootDataAttributes[\"valid\"] = \"data-valid\";\n /**\n * Present when the switch is in an invalid state (when wrapped in Field.Root).\n */\n SwitchRootDataAttributes[\"invalid\"] = \"data-invalid\";\n /**\n * Present when the switch has been touched (when wrapped in Field.Root).\n */\n SwitchRootDataAttributes[\"touched\"] = \"data-touched\";\n /**\n * Present when the switch's value has changed (when wrapped in Field.Root).\n */\n SwitchRootDataAttributes[\"dirty\"] = \"data-dirty\";\n /**\n * Present when the switch is active (when wrapped in Field.Root).\n */\n SwitchRootDataAttributes[\"filled\"] = \"data-filled\";\n /**\n * Present when the switch is focused (when wrapped in Field.Root).\n */\n SwitchRootDataAttributes[\"focused\"] = \"data-focused\";\n return SwitchRootDataAttributes;\n}({});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vc3dpdGNoL3Jvb3QvU3dpdGNoUm9vdERhdGFBdHRyaWJ1dGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vc3dpdGNoL3Jvb3QvU3dpdGNoUm9vdERhdGFBdHRyaWJ1dGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBsZXQgU3dpdGNoUm9vdERhdGFBdHRyaWJ1dGVzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChTd2l0Y2hSb290RGF0YUF0dHJpYnV0ZXMpIHtcbiAgLyoqXG4gICAqIFByZXNlbnQgd2hlbiB0aGUgc3dpdGNoIGlzIGNoZWNrZWQuXG4gICAqL1xuICBTd2l0Y2hSb290RGF0YUF0dHJpYnV0ZXNbXCJjaGVja2VkXCJdID0gXCJkYXRhLWNoZWNrZWRcIjtcbiAgLyoqXG4gICAqIFByZXNlbnQgd2hlbiB0aGUgc3dpdGNoIGlzIG5vdCBjaGVja2VkLlxuICAgKi9cbiAgU3dpdGNoUm9vdERhdGFBdHRyaWJ1dGVzW1widW5jaGVja2VkXCJdID0gXCJkYXRhLXVuY2hlY2tlZFwiO1xuICAvKipcbiAgICogUHJlc2VudCB3aGVuIHRoZSBzd2l0Y2ggaXMgZGlzYWJsZWQuXG4gICAqL1xuICBTd2l0Y2hSb290RGF0YUF0dHJpYnV0ZXNbXCJkaXNhYmxlZFwiXSA9IFwiZGF0YS1kaXNhYmxlZFwiO1xuICAvKipcbiAgICogUHJlc2VudCB3aGVuIHRoZSBzd2l0Y2ggaXMgcmVhZG9ubHkuXG4gICAqL1xuICBTd2l0Y2hSb290RGF0YUF0dHJpYnV0ZXNbXCJyZWFkb25seVwiXSA9IFwiZGF0YS1yZWFkb25seVwiO1xuICAvKipcbiAgICogUHJlc2VudCB3aGVuIHRoZSBzd2l0Y2ggaXMgcmVxdWlyZWQuXG4gICAqL1xuICBTd2l0Y2hSb290RGF0YUF0dHJpYnV0ZXNbXCJyZXF1aXJlZFwiXSA9IFwiZGF0YS1yZXF1aXJlZFwiO1xuICAvKipcbiAgICogUHJlc2VudCB3aGVuIHRoZSBzd2l0Y2ggaXMgaW4gYSB2YWxpZCBzdGF0ZSAod2hlbiB3cmFwcGVkIGluIEZpZWxkLlJvb3QpLlxuICAgKi9cbiAgU3dpdGNoUm9vdERhdGFBdHRyaWJ1dGVzW1widmFsaWRcIl0gPSBcImRhdGEtdmFsaWRcIjtcbiAgLyoqXG4gICAqIFByZXNlbnQgd2hlbiB0aGUgc3dpdGNoIGlzIGluIGFuIGludmFsaWQgc3RhdGUgKHdoZW4gd3JhcHBlZCBpbiBGaWVsZC5Sb290KS5cbiAgICovXG4gIFN3aXRjaFJvb3REYXRhQXR0cmlidXRlc1tcImludmFsaWRcIl0gPSBcImRhdGEtaW52YWxpZFwiO1xuICAvKipcbiAgICogUHJlc2VudCB3aGVuIHRoZSBzd2l0Y2ggaGFzIGJlZW4gdG91Y2hlZCAod2hlbiB3cmFwcGVkIGluIEZpZWxkLlJvb3QpLlxuICAgKi9cbiAgU3dpdGNoUm9vdERhdGFBdHRyaWJ1dGVzW1widG91Y2hlZFwiXSA9IFwiZGF0YS10b3VjaGVkXCI7XG4gIC8qKlxuICAgKiBQcmVzZW50IHdoZW4gdGhlIHN3aXRjaCdzIHZhbHVlIGhhcyBjaGFuZ2VkICh3aGVuIHdyYXBwZWQgaW4gRmllbGQuUm9vdCkuXG4gICAqL1xuICBTd2l0Y2hSb290RGF0YUF0dHJpYnV0ZXNbXCJkaXJ0eVwiXSA9IFwiZGF0YS1kaXJ0eVwiO1xuICAvKipcbiAgICogUHJlc2VudCB3aGVuIHRoZSBzd2l0Y2ggaXMgYWN0aXZlICh3aGVuIHdyYXBwZWQgaW4gRmllbGQuUm9vdCkuXG4gICAqL1xuICBTd2l0Y2hSb290RGF0YUF0dHJpYnV0ZXNbXCJmaWxsZWRcIl0gPSBcImRhdGEtZmlsbGVkXCI7XG4gIC8qKlxuICAgKiBQcmVzZW50IHdoZW4gdGhlIHN3aXRjaCBpcyBmb2N1c2VkICh3aGVuIHdyYXBwZWQgaW4gRmllbGQuUm9vdCkuXG4gICAqL1xuICBTd2l0Y2hSb290RGF0YUF0dHJpYnV0ZXNbXCJmb2N1c2VkXCJdID0gXCJkYXRhLWZvY3VzZWRcIjtcbiAgcmV0dXJuIFN3aXRjaFJvb3REYXRhQXR0cmlidXRlcztcbn0oe30pOyJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/root/SwitchRootDataAttributes.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/stateAttributesMapping.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/switch/stateAttributesMapping.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((__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 */ stateAttributesMapping: () => (/* binding */ stateAttributesMapping)\n/* harmony export */ });\n/* harmony import */ var _internals_field_constants_constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../internals/field-constants/constants.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/field-constants/constants.js\");\n/* harmony import */ var _root_SwitchRootDataAttributes_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./root/SwitchRootDataAttributes.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/root/SwitchRootDataAttributes.js\");\n\n\nconst stateAttributesMapping = {\n ..._internals_field_constants_constants_js__WEBPACK_IMPORTED_MODULE_0__.fieldValidityMapping,\n checked(value) {\n if (value) {\n return {\n [_root_SwitchRootDataAttributes_js__WEBPACK_IMPORTED_MODULE_1__.SwitchRootDataAttributes.checked]: ''\n };\n }\n return {\n [_root_SwitchRootDataAttributes_js__WEBPACK_IMPORTED_MODULE_1__.SwitchRootDataAttributes.unchecked]: ''\n };\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vc3dpdGNoL3N0YXRlQXR0cmlidXRlc01hcHBpbmcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWlGO0FBQ0g7QUFDdkU7QUFDUCxLQUFLLHlGQUFvQjtBQUN6QjtBQUNBO0FBQ0E7QUFDQSxTQUFTLHVGQUF3QjtBQUNqQztBQUNBO0FBQ0E7QUFDQSxPQUFPLHVGQUF3QjtBQUMvQjtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL3N3aXRjaC9zdGF0ZUF0dHJpYnV0ZXNNYXBwaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZpZWxkVmFsaWRpdHlNYXBwaW5nIH0gZnJvbSBcIi4uL2ludGVybmFscy9maWVsZC1jb25zdGFudHMvY29uc3RhbnRzLmpzXCI7XG5pbXBvcnQgeyBTd2l0Y2hSb290RGF0YUF0dHJpYnV0ZXMgfSBmcm9tIFwiLi9yb290L1N3aXRjaFJvb3REYXRhQXR0cmlidXRlcy5qc1wiO1xuZXhwb3J0IGNvbnN0IHN0YXRlQXR0cmlidXRlc01hcHBpbmcgPSB7XG4gIC4uLmZpZWxkVmFsaWRpdHlNYXBwaW5nLFxuICBjaGVja2VkKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbU3dpdGNoUm9vdERhdGFBdHRyaWJ1dGVzLmNoZWNrZWRdOiAnJ1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIFtTd2l0Y2hSb290RGF0YUF0dHJpYnV0ZXMudW5jaGVja2VkXTogJydcbiAgICB9O1xuICB9XG59OyJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/stateAttributesMapping.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/thumb/SwitchThumb.js":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/switch/thumb/SwitchThumb.js ***!
|
||
\*********************************************************************/
|
||
/***/ ((__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 */ SwitchThumb: () => (/* binding */ SwitchThumb)\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 _root_SwitchRootContext_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../root/SwitchRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/root/SwitchRootContext.js\");\n/* harmony import */ var _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../internals/useRenderElement.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useRenderElement.js\");\n/* harmony import */ var _internals_field_root_context_FieldRootContext_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../internals/field-root-context/FieldRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/field-root-context/FieldRootContext.js\");\n/* harmony import */ var _stateAttributesMapping_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../stateAttributesMapping.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/stateAttributesMapping.js\");\n/* __next_internal_client_entry_do_not_use__ SwitchThumb auto */ var _s = $RefreshSig$();\n\n\n\n\n\n/**\n * The movable part of the switch that indicates whether the switch is on or off.\n * Renders a `<span>`.\n *\n * Documentation: [Base UI Switch](https://base-ui.com/react/components/switch)\n */ const SwitchThumb = /*#__PURE__*/ _s(react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c = _s(function SwitchThumb(componentProps, forwardedRef) {\n _s();\n const { render, className, style, ...elementProps } = componentProps;\n const { state: fieldState } = (0,_internals_field_root_context_FieldRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useFieldRootContext)();\n const state = (0,_root_SwitchRootContext_js__WEBPACK_IMPORTED_MODULE_2__.useSwitchRootContext)();\n const extendedState = {\n ...fieldState,\n ...state\n };\n return (0,_internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_3__.useRenderElement)('span', componentProps, {\n state: extendedState,\n ref: forwardedRef,\n stateAttributesMapping: _stateAttributesMapping_js__WEBPACK_IMPORTED_MODULE_4__.stateAttributesMapping,\n props: elementProps\n });\n}, \"7AciFSGZgXnXFH83+7245xV1vmg=\", false, function() {\n return [\n _internals_field_root_context_FieldRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useFieldRootContext,\n _root_SwitchRootContext_js__WEBPACK_IMPORTED_MODULE_2__.useSwitchRootContext,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_3__.useRenderElement\n ];\n})), \"7AciFSGZgXnXFH83+7245xV1vmg=\", false, function() {\n return [\n _internals_field_root_context_FieldRootContext_js__WEBPACK_IMPORTED_MODULE_1__.useFieldRootContext,\n _root_SwitchRootContext_js__WEBPACK_IMPORTED_MODULE_2__.useSwitchRootContext,\n _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_3__.useRenderElement\n ];\n});\n_c1 = SwitchThumb;\nif (true) SwitchThumb.displayName = \"SwitchThumb\";\nvar _c, _c1;\n$RefreshReg$(_c, \"SwitchThumb$React.forwardRef\");\n$RefreshReg$(_c1, \"SwitchThumb\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vc3dpdGNoL3RodW1iL1N3aXRjaFRodW1iLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFFK0I7QUFDcUM7QUFDRztBQUNzQjtBQUN2QjtBQUV0RTs7Ozs7Q0FLQyxHQUNNLE1BQU1LLGNBQWMsV0FBVyxHQUFFTCxHQUFBQSw2Q0FBZ0IsU0FBQyxTQUFTSyxZQUFZRSxjQUFjLEVBQUVDLFlBQVk7O0lBQ3hHLE1BQU0sRUFDSkMsTUFBTSxFQUNOQyxTQUFTLEVBQ1RDLEtBQUssRUFDTCxHQUFHQyxjQUNKLEdBQUdMO0lBQ0osTUFBTSxFQUNKTSxPQUFPQyxVQUFVLEVBQ2xCLEdBQUdYLHNHQUFtQkE7SUFDdkIsTUFBTVUsUUFBUVosZ0ZBQW9CQTtJQUNsQyxNQUFNYyxnQkFBZ0I7UUFDcEIsR0FBR0QsVUFBVTtRQUNiLEdBQUdELEtBQUs7SUFDVjtJQUNBLE9BQU9YLGdGQUFnQkEsQ0FBQyxRQUFRSyxnQkFBZ0I7UUFDOUNNLE9BQU9FO1FBQ1BDLEtBQUtSO1FBQ0xKLHNCQUFzQkEsZ0ZBQUFBO1FBQ3RCYSxPQUFPTDtJQUNUO0FBQ0Y7O1FBWk1ULGtHQUFtQkE7UUFDVEYsNEVBQW9CQTtRQUszQkMsNEVBQWdCQTs7OztRQU5uQkMsa0dBQW1CQTtRQUNURiw0RUFBb0JBO1FBSzNCQyw0RUFBZ0JBOztHQU10Qjs7QUFDSCxJQUFJZ0IsSUFBcUMsRUFBRWIsWUFBWWMsV0FBVyxHQUFHIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS9zd2l0Y2gvdGh1bWIvU3dpdGNoVGh1bWIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTd2l0Y2hSb290Q29udGV4dCB9IGZyb20gXCIuLi9yb290L1N3aXRjaFJvb3RDb250ZXh0LmpzXCI7XG5pbXBvcnQgeyB1c2VSZW5kZXJFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy91c2VSZW5kZXJFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyB1c2VGaWVsZFJvb3RDb250ZXh0IH0gZnJvbSBcIi4uLy4uL2ludGVybmFscy9maWVsZC1yb290LWNvbnRleHQvRmllbGRSb290Q29udGV4dC5qc1wiO1xuaW1wb3J0IHsgc3RhdGVBdHRyaWJ1dGVzTWFwcGluZyB9IGZyb20gXCIuLi9zdGF0ZUF0dHJpYnV0ZXNNYXBwaW5nLmpzXCI7XG5cbi8qKlxuICogVGhlIG1vdmFibGUgcGFydCBvZiB0aGUgc3dpdGNoIHRoYXQgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHN3aXRjaCBpcyBvbiBvciBvZmYuXG4gKiBSZW5kZXJzIGEgYDxzcGFuPmAuXG4gKlxuICogRG9jdW1lbnRhdGlvbjogW0Jhc2UgVUkgU3dpdGNoXShodHRwczovL2Jhc2UtdWkuY29tL3JlYWN0L2NvbXBvbmVudHMvc3dpdGNoKVxuICovXG5leHBvcnQgY29uc3QgU3dpdGNoVGh1bWIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBTd2l0Y2hUaHVtYihjb21wb25lbnRQcm9wcywgZm9yd2FyZGVkUmVmKSB7XG4gIGNvbnN0IHtcbiAgICByZW5kZXIsXG4gICAgY2xhc3NOYW1lLFxuICAgIHN0eWxlLFxuICAgIC4uLmVsZW1lbnRQcm9wc1xuICB9ID0gY29tcG9uZW50UHJvcHM7XG4gIGNvbnN0IHtcbiAgICBzdGF0ZTogZmllbGRTdGF0ZVxuICB9ID0gdXNlRmllbGRSb290Q29udGV4dCgpO1xuICBjb25zdCBzdGF0ZSA9IHVzZVN3aXRjaFJvb3RDb250ZXh0KCk7XG4gIGNvbnN0IGV4dGVuZGVkU3RhdGUgPSB7XG4gICAgLi4uZmllbGRTdGF0ZSxcbiAgICAuLi5zdGF0ZVxuICB9O1xuICByZXR1cm4gdXNlUmVuZGVyRWxlbWVudCgnc3BhbicsIGNvbXBvbmVudFByb3BzLCB7XG4gICAgc3RhdGU6IGV4dGVuZGVkU3RhdGUsXG4gICAgcmVmOiBmb3J3YXJkZWRSZWYsXG4gICAgc3RhdGVBdHRyaWJ1dGVzTWFwcGluZyxcbiAgICBwcm9wczogZWxlbWVudFByb3BzXG4gIH0pO1xufSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSBTd2l0Y2hUaHVtYi5kaXNwbGF5TmFtZSA9IFwiU3dpdGNoVGh1bWJcIjsiXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VTd2l0Y2hSb290Q29udGV4dCIsInVzZVJlbmRlckVsZW1lbnQiLCJ1c2VGaWVsZFJvb3RDb250ZXh0Iiwic3RhdGVBdHRyaWJ1dGVzTWFwcGluZyIsIlN3aXRjaFRodW1iIiwiZm9yd2FyZFJlZiIsImNvbXBvbmVudFByb3BzIiwiZm9yd2FyZGVkUmVmIiwicmVuZGVyIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJlbGVtZW50UHJvcHMiLCJzdGF0ZSIsImZpZWxkU3RhdGUiLCJleHRlbmRlZFN0YXRlIiwicmVmIiwicHJvcHMiLCJwcm9jZXNzIiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/thumb/SwitchThumb.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/use-render/useRender.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/use-render/useRender.js ***!
|
||
\*****************************************************************/
|
||
/***/ ((__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 */ useRender: () => (/* binding */ useRender)\n/* harmony export */ });\n/* harmony import */ var _internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../internals/useRenderElement.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useRenderElement.js\");\n\n/**\n * Renders a Base UI element.\n *\n * @public\n */\nfunction useRender(params) {\n return (0,_internals_useRenderElement_js__WEBPACK_IMPORTED_MODULE_0__.useRenderElement)(params.defaultTagName ?? 'div', params, params);\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXNlLXJlbmRlci91c2VSZW5kZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBb0U7QUFDcEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsU0FBUyxnRkFBZ0I7QUFDekIiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL3VzZS1yZW5kZXIvdXNlUmVuZGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVJlbmRlckVsZW1lbnQgfSBmcm9tIFwiLi4vaW50ZXJuYWxzL3VzZVJlbmRlckVsZW1lbnQuanNcIjtcbi8qKlxuICogUmVuZGVycyBhIEJhc2UgVUkgZWxlbWVudC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VSZW5kZXIocGFyYW1zKSB7XG4gIHJldHVybiB1c2VSZW5kZXJFbGVtZW50KHBhcmFtcy5kZWZhdWx0VGFnTmFtZSA/PyAnZGl2JywgcGFyYW1zLCBwYXJhbXMpO1xufSJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/use-render/useRender.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/FocusGuard.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/utils/FocusGuard.js ***!
|
||
\*************************************************************/
|
||
/***/ ((__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 */ FocusGuard: () => (/* binding */ FocusGuard)\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 _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/utils/useIsoLayoutEffect */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _base_ui_utils_detectBrowser__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @base-ui/utils/detectBrowser */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/detectBrowser.js\");\n/* harmony import */ var _base_ui_utils_visuallyHidden__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @base-ui/utils/visuallyHidden */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/visuallyHidden.js\");\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__ FocusGuard auto */ var _s = $RefreshSig$();\n\n\n\n\n/**\n * @internal\n */ \nconst FocusGuard = /*#__PURE__*/ _s(react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c = _s(function FocusGuard(props, ref) {\n _s();\n const [role, setRole] = react__WEBPACK_IMPORTED_MODULE_0__.useState();\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect)({\n \"FocusGuard.FocusGuard.useIsoLayoutEffect\": ()=>{\n if (_base_ui_utils_detectBrowser__WEBPACK_IMPORTED_MODULE_3__.isSafari) {\n // Unlike other screen readers such as NVDA and JAWS, the virtual cursor\n // on VoiceOver does trigger the onFocus event, so we can use the focus\n // trap element. On Safari, only buttons trigger the onFocus event.\n setRole('button');\n }\n }\n }[\"FocusGuard.FocusGuard.useIsoLayoutEffect\"], []);\n const restProps = {\n tabIndex: 0,\n // Role is only for VoiceOver\n role\n };\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(\"span\", {\n ...props,\n ref: ref,\n style: _base_ui_utils_visuallyHidden__WEBPACK_IMPORTED_MODULE_4__.visuallyHidden,\n \"aria-hidden\": role ? undefined : true,\n ...restProps,\n \"data-base-ui-focus-guard\": \"\"\n });\n}, \"9X1hrQJS2YoYpsL+xRHksjraGD0=\", false, function() {\n return [\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect\n ];\n})), \"9X1hrQJS2YoYpsL+xRHksjraGD0=\", false, function() {\n return [\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect\n ];\n});\n_c1 = FocusGuard;\nif (true) FocusGuard.displayName = \"FocusGuard\";\nvar _c, _c1;\n$RefreshReg$(_c, \"FocusGuard$React.forwardRef\");\n$RefreshReg$(_c1, \"FocusGuard\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXRpbHMvRm9jdXNHdWFyZC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBRStCO0FBQ3dDO0FBQ2Y7QUFDTztBQUUvRDs7Q0FFQyxHQUMrQztBQUN6QyxNQUFNTSxhQUFhLFdBQVcsR0FBRU4sR0FBQUEsNkNBQWdCLFNBQUMsU0FBU00sV0FBV0UsS0FBSyxFQUFFQyxHQUFHOztJQUNwRixNQUFNLENBQUNDLE1BQU1DLFFBQVEsR0FBR1gsMkNBQWM7SUFDdENDLHFGQUFrQkE7b0RBQUM7WUFDakIsSUFBSUMsa0VBQVFBLEVBQUU7Z0JBQ1osd0VBQXdFO2dCQUN4RSx1RUFBdUU7Z0JBQ3ZFLG1FQUFtRTtnQkFDbkVTLFFBQVE7WUFDVjtRQUNGO21EQUFHLEVBQUU7SUFDTCxNQUFNRSxZQUFZO1FBQ2hCQyxVQUFVO1FBQ1YsNkJBQTZCO1FBQzdCSjtJQUNGO0lBQ0EsT0FBTyxXQUFXLEdBQUVMLHNEQUFJQSxDQUFDLFFBQVE7UUFDL0IsR0FBR0csS0FBSztRQUNSQyxLQUFLQTtRQUNMTSxPQUFPWix5RUFBY0E7UUFDckIsZUFBZU8sT0FBT00sWUFBWTtRQUNsQyxHQUFHSCxTQUFTO1FBQ1osNEJBQTRCO0lBQzlCO0FBQ0Y7O1FBckJFWixpRkFBa0JBOzs7O1FBQWxCQSxpRkFBa0JBOztHQXFCakI7O0FBQ0gsSUFBSWdCLElBQXFDLEVBQUVYLFdBQVdZLFdBQVcsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXRpbHMvRm9jdXNHdWFyZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUlzb0xheW91dEVmZmVjdCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3VzZUlzb0xheW91dEVmZmVjdCc7XG5pbXBvcnQgeyBpc1NhZmFyaSB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL2RldGVjdEJyb3dzZXInO1xuaW1wb3J0IHsgdmlzdWFsbHlIaWRkZW4gfSBmcm9tICdAYmFzZS11aS91dGlscy92aXN1YWxseUhpZGRlbic7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3QgRm9jdXNHdWFyZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvY3VzR3VhcmQocHJvcHMsIHJlZikge1xuICBjb25zdCBbcm9sZSwgc2V0Um9sZV0gPSBSZWFjdC51c2VTdGF0ZSgpO1xuICB1c2VJc29MYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc1NhZmFyaSkge1xuICAgICAgLy8gVW5saWtlIG90aGVyIHNjcmVlbiByZWFkZXJzIHN1Y2ggYXMgTlZEQSBhbmQgSkFXUywgdGhlIHZpcnR1YWwgY3Vyc29yXG4gICAgICAvLyBvbiBWb2ljZU92ZXIgZG9lcyB0cmlnZ2VyIHRoZSBvbkZvY3VzIGV2ZW50LCBzbyB3ZSBjYW4gdXNlIHRoZSBmb2N1c1xuICAgICAgLy8gdHJhcCBlbGVtZW50LiBPbiBTYWZhcmksIG9ubHkgYnV0dG9ucyB0cmlnZ2VyIHRoZSBvbkZvY3VzIGV2ZW50LlxuICAgICAgc2V0Um9sZSgnYnV0dG9uJyk7XG4gICAgfVxuICB9LCBbXSk7XG4gIGNvbnN0IHJlc3RQcm9wcyA9IHtcbiAgICB0YWJJbmRleDogMCxcbiAgICAvLyBSb2xlIGlzIG9ubHkgZm9yIFZvaWNlT3ZlclxuICAgIHJvbGVcbiAgfTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgLi4ucHJvcHMsXG4gICAgcmVmOiByZWYsXG4gICAgc3R5bGU6IHZpc3VhbGx5SGlkZGVuLFxuICAgIFwiYXJpYS1oaWRkZW5cIjogcm9sZSA/IHVuZGVmaW5lZCA6IHRydWUsXG4gICAgLi4ucmVzdFByb3BzLFxuICAgIFwiZGF0YS1iYXNlLXVpLWZvY3VzLWd1YXJkXCI6IFwiXCJcbiAgfSk7XG59KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIEZvY3VzR3VhcmQuZGlzcGxheU5hbWUgPSBcIkZvY3VzR3VhcmRcIjsiXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VJc29MYXlvdXRFZmZlY3QiLCJpc1NhZmFyaSIsInZpc3VhbGx5SGlkZGVuIiwianN4IiwiX2pzeCIsIkZvY3VzR3VhcmQiLCJmb3J3YXJkUmVmIiwicHJvcHMiLCJyZWYiLCJyb2xlIiwic2V0Um9sZSIsInVzZVN0YXRlIiwicmVzdFByb3BzIiwidGFiSW5kZXgiLCJzdHlsZSIsInVuZGVmaW5lZCIsInByb2Nlc3MiLCJkaXNwbGF5TmFtZSJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/FocusGuard.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/InternalBackdrop.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/utils/InternalBackdrop.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((__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 */ InternalBackdrop: () => (/* binding */ InternalBackdrop)\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_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\n\n\n/**\n * @internal\n */\n\nconst InternalBackdrop = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function InternalBackdrop(props, ref) {\n const {\n cutout,\n ...otherProps\n } = props;\n let clipPath;\n if (cutout) {\n const rect = cutout.getBoundingClientRect();\n clipPath = `polygon(0% 0%,100% 0%,100% 100%,0% 100%,0% 0%,${rect.left}px ${rect.top}px,${rect.left}px ${rect.bottom}px,${rect.right}px ${rect.bottom}px,${rect.right}px ${rect.top}px,${rect.left}px ${rect.top}px)`;\n }\n return /*#__PURE__*/(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(\"div\", {\n ref: ref,\n role: \"presentation\"\n // Ensures Floating UI's outside press detection runs, as it considers\n // it an element that existed when the popup rendered.\n ,\n \"data-base-ui-inert\": \"\",\n ...otherProps,\n style: {\n position: 'fixed',\n inset: 0,\n userSelect: 'none',\n WebkitUserSelect: 'none',\n clipPath\n }\n });\n});\nif (true) InternalBackdrop.displayName = \"InternalBackdrop\";//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXRpbHMvSW50ZXJuYWxCYWNrZHJvcC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBK0I7O0FBRS9CO0FBQ0E7QUFDQTtBQUNnRDtBQUN6QyxzQ0FBc0MsNkNBQWdCO0FBQzdEO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0UsVUFBVSxLQUFLLFNBQVMsS0FBSyxVQUFVLEtBQUssWUFBWSxLQUFLLFdBQVcsS0FBSyxZQUFZLEtBQUssV0FBVyxLQUFLLFNBQVMsS0FBSyxVQUFVLEtBQUssU0FBUztBQUNwTjtBQUNBLHNCQUFzQixzREFBSTtBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNILENBQUM7QUFDRCxJQUFJLElBQXFDIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS91dGlscy9JbnRlcm5hbEJhY2tkcm9wLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBjb25zdCBJbnRlcm5hbEJhY2tkcm9wID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gSW50ZXJuYWxCYWNrZHJvcChwcm9wcywgcmVmKSB7XG4gIGNvbnN0IHtcbiAgICBjdXRvdXQsXG4gICAgLi4ub3RoZXJQcm9wc1xuICB9ID0gcHJvcHM7XG4gIGxldCBjbGlwUGF0aDtcbiAgaWYgKGN1dG91dCkge1xuICAgIGNvbnN0IHJlY3QgPSBjdXRvdXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY2xpcFBhdGggPSBgcG9seWdvbigwJSAwJSwxMDAlIDAlLDEwMCUgMTAwJSwwJSAxMDAlLDAlIDAlLCR7cmVjdC5sZWZ0fXB4ICR7cmVjdC50b3B9cHgsJHtyZWN0LmxlZnR9cHggJHtyZWN0LmJvdHRvbX1weCwke3JlY3QucmlnaHR9cHggJHtyZWN0LmJvdHRvbX1weCwke3JlY3QucmlnaHR9cHggJHtyZWN0LnRvcH1weCwke3JlY3QubGVmdH1weCAke3JlY3QudG9wfXB4KWA7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFwiZGl2XCIsIHtcbiAgICByZWY6IHJlZixcbiAgICByb2xlOiBcInByZXNlbnRhdGlvblwiXG4gICAgLy8gRW5zdXJlcyBGbG9hdGluZyBVSSdzIG91dHNpZGUgcHJlc3MgZGV0ZWN0aW9uIHJ1bnMsIGFzIGl0IGNvbnNpZGVyc1xuICAgIC8vIGl0IGFuIGVsZW1lbnQgdGhhdCBleGlzdGVkIHdoZW4gdGhlIHBvcHVwIHJlbmRlcmVkLlxuICAgICxcbiAgICBcImRhdGEtYmFzZS11aS1pbmVydFwiOiBcIlwiLFxuICAgIC4uLm90aGVyUHJvcHMsXG4gICAgc3R5bGU6IHtcbiAgICAgIHBvc2l0aW9uOiAnZml4ZWQnLFxuICAgICAgaW5zZXQ6IDAsXG4gICAgICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gICAgICBXZWJraXRVc2VyU2VsZWN0OiAnbm9uZScsXG4gICAgICBjbGlwUGF0aFxuICAgIH1cbiAgfSk7XG59KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIEludGVybmFsQmFja2Ryb3AuZGlzcGxheU5hbWUgPSBcIkludGVybmFsQmFja2Ryb3BcIjsiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/InternalBackdrop.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popupStateMapping.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/utils/popupStateMapping.js ***!
|
||
\********************************************************************/
|
||
/***/ ((__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 */ CommonPopupDataAttributes: () => (/* binding */ CommonPopupDataAttributes),\n/* harmony export */ CommonTriggerDataAttributes: () => (/* binding */ CommonTriggerDataAttributes),\n/* harmony export */ popupStateMapping: () => (/* binding */ popupStateMapping),\n/* harmony export */ pressableTriggerOpenStateMapping: () => (/* binding */ pressableTriggerOpenStateMapping),\n/* harmony export */ triggerOpenStateMapping: () => (/* binding */ triggerOpenStateMapping)\n/* harmony export */ });\n/* harmony import */ var _internals_stateAttributesMapping_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../internals/stateAttributesMapping.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/stateAttributesMapping.js\");\n\nlet CommonPopupDataAttributes = function (CommonPopupDataAttributes) {\n /**\n * Present when the popup is open.\n */\n CommonPopupDataAttributes[\"open\"] = \"data-open\";\n /**\n * Present when the popup is closed.\n */\n CommonPopupDataAttributes[\"closed\"] = \"data-closed\";\n /**\n * Present when the popup is animating in.\n */\n CommonPopupDataAttributes[CommonPopupDataAttributes[\"startingStyle\"] = _internals_stateAttributesMapping_js__WEBPACK_IMPORTED_MODULE_0__.TransitionStatusDataAttributes.startingStyle] = \"startingStyle\";\n /**\n * Present when the popup is animating out.\n */\n CommonPopupDataAttributes[CommonPopupDataAttributes[\"endingStyle\"] = _internals_stateAttributesMapping_js__WEBPACK_IMPORTED_MODULE_0__.TransitionStatusDataAttributes.endingStyle] = \"endingStyle\";\n /**\n * Present when the anchor is hidden.\n */\n CommonPopupDataAttributes[\"anchorHidden\"] = \"data-anchor-hidden\";\n /**\n * Indicates which side the popup is positioned relative to the trigger.\n * @type { 'top' | 'bottom' | 'left' | 'right' | 'inline-end' | 'inline-start'}\n */\n CommonPopupDataAttributes[\"side\"] = \"data-side\";\n /**\n * Indicates how the popup is aligned relative to specified side.\n * @type {'start' | 'center' | 'end'}\n */\n CommonPopupDataAttributes[\"align\"] = \"data-align\";\n return CommonPopupDataAttributes;\n}({});\nlet CommonTriggerDataAttributes = /*#__PURE__*/function (CommonTriggerDataAttributes) {\n /**\n * Present when the popup is open.\n */\n CommonTriggerDataAttributes[\"popupOpen\"] = \"data-popup-open\";\n /**\n * Present when a pressable trigger is pressed.\n */\n CommonTriggerDataAttributes[\"pressed\"] = \"data-pressed\";\n return CommonTriggerDataAttributes;\n}({});\nconst TRIGGER_HOOK = {\n [CommonTriggerDataAttributes.popupOpen]: ''\n};\nconst PRESSABLE_TRIGGER_HOOK = {\n [CommonTriggerDataAttributes.popupOpen]: '',\n [CommonTriggerDataAttributes.pressed]: ''\n};\nconst POPUP_OPEN_HOOK = {\n [CommonPopupDataAttributes.open]: ''\n};\nconst POPUP_CLOSED_HOOK = {\n [CommonPopupDataAttributes.closed]: ''\n};\nconst ANCHOR_HIDDEN_HOOK = {\n [CommonPopupDataAttributes.anchorHidden]: ''\n};\nconst triggerOpenStateMapping = {\n open(value) {\n if (value) {\n return TRIGGER_HOOK;\n }\n return null;\n }\n};\nconst pressableTriggerOpenStateMapping = {\n open(value) {\n if (value) {\n return PRESSABLE_TRIGGER_HOOK;\n }\n return null;\n }\n};\nconst popupStateMapping = {\n open(value) {\n if (value) {\n return POPUP_OPEN_HOOK;\n }\n return POPUP_CLOSED_HOOK;\n },\n anchorHidden(value) {\n if (value) {\n return ANCHOR_HIDDEN_HOOK;\n }\n return null;\n }\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXRpbHMvcG9wdXBTdGF0ZU1hcHBpbmcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQXdGO0FBQ2pGO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RSxnR0FBOEI7QUFDdkc7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLGdHQUE4QjtBQUNyRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHO0FBQ0c7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEdBQUc7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3JlYWN0L2VzbS91dGlscy9wb3B1cFN0YXRlTWFwcGluZy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBUcmFuc2l0aW9uU3RhdHVzRGF0YUF0dHJpYnV0ZXMgfSBmcm9tIFwiLi4vaW50ZXJuYWxzL3N0YXRlQXR0cmlidXRlc01hcHBpbmcuanNcIjtcbmV4cG9ydCBsZXQgQ29tbW9uUG9wdXBEYXRhQXR0cmlidXRlcyA9IGZ1bmN0aW9uIChDb21tb25Qb3B1cERhdGFBdHRyaWJ1dGVzKSB7XG4gIC8qKlxuICAgKiBQcmVzZW50IHdoZW4gdGhlIHBvcHVwIGlzIG9wZW4uXG4gICAqL1xuICBDb21tb25Qb3B1cERhdGFBdHRyaWJ1dGVzW1wib3BlblwiXSA9IFwiZGF0YS1vcGVuXCI7XG4gIC8qKlxuICAgKiBQcmVzZW50IHdoZW4gdGhlIHBvcHVwIGlzIGNsb3NlZC5cbiAgICovXG4gIENvbW1vblBvcHVwRGF0YUF0dHJpYnV0ZXNbXCJjbG9zZWRcIl0gPSBcImRhdGEtY2xvc2VkXCI7XG4gIC8qKlxuICAgKiBQcmVzZW50IHdoZW4gdGhlIHBvcHVwIGlzIGFuaW1hdGluZyBpbi5cbiAgICovXG4gIENvbW1vblBvcHVwRGF0YUF0dHJpYnV0ZXNbQ29tbW9uUG9wdXBEYXRhQXR0cmlidXRlc1tcInN0YXJ0aW5nU3R5bGVcIl0gPSBUcmFuc2l0aW9uU3RhdHVzRGF0YUF0dHJpYnV0ZXMuc3RhcnRpbmdTdHlsZV0gPSBcInN0YXJ0aW5nU3R5bGVcIjtcbiAgLyoqXG4gICAqIFByZXNlbnQgd2hlbiB0aGUgcG9wdXAgaXMgYW5pbWF0aW5nIG91dC5cbiAgICovXG4gIENvbW1vblBvcHVwRGF0YUF0dHJpYnV0ZXNbQ29tbW9uUG9wdXBEYXRhQXR0cmlidXRlc1tcImVuZGluZ1N0eWxlXCJdID0gVHJhbnNpdGlvblN0YXR1c0RhdGFBdHRyaWJ1dGVzLmVuZGluZ1N0eWxlXSA9IFwiZW5kaW5nU3R5bGVcIjtcbiAgLyoqXG4gICAqIFByZXNlbnQgd2hlbiB0aGUgYW5jaG9yIGlzIGhpZGRlbi5cbiAgICovXG4gIENvbW1vblBvcHVwRGF0YUF0dHJpYnV0ZXNbXCJhbmNob3JIaWRkZW5cIl0gPSBcImRhdGEtYW5jaG9yLWhpZGRlblwiO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoaWNoIHNpZGUgdGhlIHBvcHVwIGlzIHBvc2l0aW9uZWQgcmVsYXRpdmUgdG8gdGhlIHRyaWdnZXIuXG4gICAqIEB0eXBlIHsgJ3RvcCcgfCAnYm90dG9tJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAnaW5saW5lLWVuZCcgfCAnaW5saW5lLXN0YXJ0J31cbiAgICovXG4gIENvbW1vblBvcHVwRGF0YUF0dHJpYnV0ZXNbXCJzaWRlXCJdID0gXCJkYXRhLXNpZGVcIjtcbiAgLyoqXG4gICAqIEluZGljYXRlcyBob3cgdGhlIHBvcHVwIGlzIGFsaWduZWQgcmVsYXRpdmUgdG8gc3BlY2lmaWVkIHNpZGUuXG4gICAqIEB0eXBlIHsnc3RhcnQnIHwgJ2NlbnRlcicgfCAnZW5kJ31cbiAgICovXG4gIENvbW1vblBvcHVwRGF0YUF0dHJpYnV0ZXNbXCJhbGlnblwiXSA9IFwiZGF0YS1hbGlnblwiO1xuICByZXR1cm4gQ29tbW9uUG9wdXBEYXRhQXR0cmlidXRlcztcbn0oe30pO1xuZXhwb3J0IGxldCBDb21tb25UcmlnZ2VyRGF0YUF0dHJpYnV0ZXMgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKENvbW1vblRyaWdnZXJEYXRhQXR0cmlidXRlcykge1xuICAvKipcbiAgICogUHJlc2VudCB3aGVuIHRoZSBwb3B1cCBpcyBvcGVuLlxuICAgKi9cbiAgQ29tbW9uVHJpZ2dlckRhdGFBdHRyaWJ1dGVzW1wicG9wdXBPcGVuXCJdID0gXCJkYXRhLXBvcHVwLW9wZW5cIjtcbiAgLyoqXG4gICAqIFByZXNlbnQgd2hlbiBhIHByZXNzYWJsZSB0cmlnZ2VyIGlzIHByZXNzZWQuXG4gICAqL1xuICBDb21tb25UcmlnZ2VyRGF0YUF0dHJpYnV0ZXNbXCJwcmVzc2VkXCJdID0gXCJkYXRhLXByZXNzZWRcIjtcbiAgcmV0dXJuIENvbW1vblRyaWdnZXJEYXRhQXR0cmlidXRlcztcbn0oe30pO1xuY29uc3QgVFJJR0dFUl9IT09LID0ge1xuICBbQ29tbW9uVHJpZ2dlckRhdGFBdHRyaWJ1dGVzLnBvcHVwT3Blbl06ICcnXG59O1xuY29uc3QgUFJFU1NBQkxFX1RSSUdHRVJfSE9PSyA9IHtcbiAgW0NvbW1vblRyaWdnZXJEYXRhQXR0cmlidXRlcy5wb3B1cE9wZW5dOiAnJyxcbiAgW0NvbW1vblRyaWdnZXJEYXRhQXR0cmlidXRlcy5wcmVzc2VkXTogJydcbn07XG5jb25zdCBQT1BVUF9PUEVOX0hPT0sgPSB7XG4gIFtDb21tb25Qb3B1cERhdGFBdHRyaWJ1dGVzLm9wZW5dOiAnJ1xufTtcbmNvbnN0IFBPUFVQX0NMT1NFRF9IT09LID0ge1xuICBbQ29tbW9uUG9wdXBEYXRhQXR0cmlidXRlcy5jbG9zZWRdOiAnJ1xufTtcbmNvbnN0IEFOQ0hPUl9ISURERU5fSE9PSyA9IHtcbiAgW0NvbW1vblBvcHVwRGF0YUF0dHJpYnV0ZXMuYW5jaG9ySGlkZGVuXTogJydcbn07XG5leHBvcnQgY29uc3QgdHJpZ2dlck9wZW5TdGF0ZU1hcHBpbmcgPSB7XG4gIG9wZW4odmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBUUklHR0VSX0hPT0s7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG59O1xuZXhwb3J0IGNvbnN0IHByZXNzYWJsZVRyaWdnZXJPcGVuU3RhdGVNYXBwaW5nID0ge1xuICBvcGVuKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gUFJFU1NBQkxFX1RSSUdHRVJfSE9PSztcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn07XG5leHBvcnQgY29uc3QgcG9wdXBTdGF0ZU1hcHBpbmcgPSB7XG4gIG9wZW4odmFsdWUpIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBQT1BVUF9PUEVOX0hPT0s7XG4gICAgfVxuICAgIHJldHVybiBQT1BVUF9DTE9TRURfSE9PSztcbiAgfSxcbiAgYW5jaG9ySGlkZGVuKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICByZXR1cm4gQU5DSE9SX0hJRERFTl9IT09LO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufTsiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popupStateMapping.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popups/popupStoreUtils.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/utils/popups/popupStoreUtils.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((__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 */ useImplicitActiveTrigger: () => (/* binding */ useImplicitActiveTrigger),\n/* harmony export */ useOpenStateTransitions: () => (/* binding */ useOpenStateTransitions),\n/* harmony export */ useTriggerDataForwarding: () => (/* binding */ useTriggerDataForwarding),\n/* harmony export */ useTriggerRegistration: () => (/* binding */ useTriggerRegistration)\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 _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @base-ui/utils/useStableCallback */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useStableCallback.js\");\n/* harmony import */ var _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/utils/useIsoLayoutEffect */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _internals_useTransitionStatus_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../internals/useTransitionStatus.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useTransitionStatus.js\");\n/* harmony import */ var _internals_useOpenChangeComplete_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../internals/useOpenChangeComplete.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useOpenChangeComplete.js\");\n/* __next_internal_client_entry_do_not_use__ useTriggerRegistration,useTriggerDataForwarding,useImplicitActiveTrigger,useOpenStateTransitions auto */ var _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$(), _s3 = $RefreshSig$();\n\n\n\n\n\n/**\n * Returns a callback ref that registers/unregisters the trigger element in the store.\n *\n * @param store The Store instance where the trigger should be registered.\n */ function useTriggerRegistration(id, store) {\n _s();\n // Keep track of the currently registered element to unregister it on unmount or id change.\n const registeredElementIdRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const registeredElementRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n return react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"useTriggerRegistration.useCallback\": (element)=>{\n if (id === undefined) {\n return;\n }\n if (registeredElementIdRef.current !== null) {\n const registeredId = registeredElementIdRef.current;\n const registeredElement = registeredElementRef.current;\n const currentElement = store.context.triggerElements.getById(registeredId);\n if (registeredElement && currentElement === registeredElement) {\n store.context.triggerElements.delete(registeredId);\n }\n registeredElementIdRef.current = null;\n registeredElementRef.current = null;\n }\n if (element !== null) {\n registeredElementIdRef.current = id;\n registeredElementRef.current = element;\n store.context.triggerElements.add(id, element);\n }\n }\n }[\"useTriggerRegistration.useCallback\"], [\n store,\n id\n ]);\n}\n_s(useTriggerRegistration, \"2KYnFEIvoVp+QXB6s1QLj29xb+w=\");\n/**\n * Sets up trigger data forwarding to the store.\n *\n * @param triggerId Id of the trigger.\n * @param triggerElement The trigger DOM element.\n * @param store The Store instance managing the popup state.\n * @param stateUpdates An object with state updates to apply when the trigger is active.\n */ function useTriggerDataForwarding(triggerId, triggerElementRef, store, stateUpdates) {\n _s1();\n const isMountedByThisTrigger = store.useState('isMountedByTrigger', triggerId);\n const baseRegisterTrigger = useTriggerRegistration(triggerId, store);\n const registerTrigger = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_1__.useStableCallback)({\n \"useTriggerDataForwarding.useStableCallback[registerTrigger]\": (element)=>{\n baseRegisterTrigger(element);\n if (!element || !store.select('open')) {\n return;\n }\n const activeTriggerId = store.select('activeTriggerId');\n if (activeTriggerId === triggerId) {\n store.update({\n activeTriggerElement: element,\n ...stateUpdates\n });\n return;\n }\n if (activeTriggerId == null) {\n // This runs when popup is open, but no active trigger is set.\n // It can happen when using controlled mode and the trigger is mounted after opening or if `triggerId` prop is not set explicitly.\n // In such cases the first trigger to run this code becomes the active trigger (store.select('activeTriggerId') should not return null after that).\n // This is mostly for compatibility with contained triggers where no explicit `triggerId` was required in controlled mode.\n store.update({\n activeTriggerId: triggerId,\n activeTriggerElement: element,\n ...stateUpdates\n });\n }\n }\n }[\"useTriggerDataForwarding.useStableCallback[registerTrigger]\"]);\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect)({\n \"useTriggerDataForwarding.useIsoLayoutEffect\": ()=>{\n if (isMountedByThisTrigger) {\n store.update({\n activeTriggerElement: triggerElementRef.current,\n ...stateUpdates\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }\n }[\"useTriggerDataForwarding.useIsoLayoutEffect\"], [\n isMountedByThisTrigger,\n store,\n triggerElementRef,\n ...Object.values(stateUpdates)\n ]);\n return {\n registerTrigger,\n isMountedByThisTrigger\n };\n}\n_s1(useTriggerDataForwarding, \"JDGHOGJxa84VdANDLtATSgg1P/4=\", false, function() {\n return [\n useTriggerRegistration,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_1__.useStableCallback,\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect\n ];\n});\n/**\n * Ensures that when there's only one trigger element registered, it is set as the active trigger.\n * This allows controlled popups to work correctly without an explicit triggerId, maintaining compatibility\n * with the contained triggers.\n *\n * This should be called on the Root part.\n *\n * @param open Whether the popup is open.\n * @param store The Store instance managing the popup state.\n */ function useImplicitActiveTrigger(store) {\n _s2();\n const open = store.useState('open');\n (0,_base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect)({\n \"useImplicitActiveTrigger.useIsoLayoutEffect\": ()=>{\n if (open && !store.select('activeTriggerId') && store.context.triggerElements.size === 1) {\n const iteratorResult = store.context.triggerElements.entries().next();\n if (!iteratorResult.done) {\n const [implicitTriggerId, implicitTriggerElement] = iteratorResult.value;\n store.update({\n activeTriggerId: implicitTriggerId,\n activeTriggerElement: implicitTriggerElement\n });\n }\n }\n }\n }[\"useImplicitActiveTrigger.useIsoLayoutEffect\"], [\n open,\n store\n ]);\n}\n_s2(useImplicitActiveTrigger, \"SSVRozHdByhwHwnegNuIo5XQlJc=\", false, function() {\n return [\n _base_ui_utils_useIsoLayoutEffect__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect\n ];\n});\n/**\n * Mangages the mounted state of the popup.\n * Sets up the transition status listeners and handles unmounting when needed.\n * Updates the `mounted` and `transitionStatus` states in the store.\n *\n * @param open Whether the popup is open.\n * @param store The Store instance managing the popup state.\n * @param onUnmount Optional callback to be called when the popup is unmounted.\n *\n * @returns A function to forcibly unmount the popup.\n */ function useOpenStateTransitions(open, store, onUnmount) {\n _s3();\n const { mounted, setMounted, transitionStatus } = (0,_internals_useTransitionStatus_js__WEBPACK_IMPORTED_MODULE_3__.useTransitionStatus)(open);\n store.useSyncedValues({\n mounted,\n transitionStatus\n });\n const forceUnmount = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_1__.useStableCallback)({\n \"useOpenStateTransitions.useStableCallback[forceUnmount]\": ()=>{\n var _store_context_onOpenChangeComplete, _store_context;\n setMounted(false);\n store.update({\n activeTriggerId: null,\n activeTriggerElement: null,\n mounted: false\n });\n onUnmount === null || onUnmount === void 0 ? void 0 : onUnmount();\n (_store_context_onOpenChangeComplete = (_store_context = store.context).onOpenChangeComplete) === null || _store_context_onOpenChangeComplete === void 0 ? void 0 : _store_context_onOpenChangeComplete.call(_store_context, false);\n }\n }[\"useOpenStateTransitions.useStableCallback[forceUnmount]\"]);\n const preventUnmountingOnClose = store.useState('preventUnmountingOnClose');\n (0,_internals_useOpenChangeComplete_js__WEBPACK_IMPORTED_MODULE_4__.useOpenChangeComplete)({\n enabled: !preventUnmountingOnClose,\n open,\n ref: store.context.popupRef,\n onComplete () {\n if (!open) {\n forceUnmount();\n }\n }\n });\n return {\n forceUnmount,\n transitionStatus\n };\n}\n_s3(useOpenStateTransitions, \"cCJpx9sTxEAooUNLUWBiPWUNRpI=\", true, function() {\n return [\n _internals_useTransitionStatus_js__WEBPACK_IMPORTED_MODULE_3__.useTransitionStatus,\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_1__.useStableCallback,\n _internals_useOpenChangeComplete_js__WEBPACK_IMPORTED_MODULE_4__.useOpenChangeComplete\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXRpbHMvcG9wdXBzL3BvcHVwU3RvcmVVdGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRStCO0FBQ3NDO0FBQ0U7QUFDTTtBQUNJO0FBQ2pGOzs7O0NBSUMsR0FDTSxTQUFTSyx1QkFBdUJDLEVBQUUsRUFBRUMsS0FBSzs7SUFDOUMsMkZBQTJGO0lBQzNGLE1BQU1DLHlCQUF5QlIseUNBQVksQ0FBQztJQUM1QyxNQUFNVSx1QkFBdUJWLHlDQUFZLENBQUM7SUFDMUMsT0FBT0EsOENBQWlCOzhDQUFDWSxDQUFBQTtZQUN2QixJQUFJTixPQUFPTyxXQUFXO2dCQUNwQjtZQUNGO1lBQ0EsSUFBSUwsdUJBQXVCTSxPQUFPLEtBQUssTUFBTTtnQkFDM0MsTUFBTUMsZUFBZVAsdUJBQXVCTSxPQUFPO2dCQUNuRCxNQUFNRSxvQkFBb0JOLHFCQUFxQkksT0FBTztnQkFDdEQsTUFBTUcsaUJBQWlCVixNQUFNVyxPQUFPLENBQUNDLGVBQWUsQ0FBQ0MsT0FBTyxDQUFDTDtnQkFDN0QsSUFBSUMscUJBQXFCQyxtQkFBbUJELG1CQUFtQjtvQkFDN0RULE1BQU1XLE9BQU8sQ0FBQ0MsZUFBZSxDQUFDRSxNQUFNLENBQUNOO2dCQUN2QztnQkFDQVAsdUJBQXVCTSxPQUFPLEdBQUc7Z0JBQ2pDSixxQkFBcUJJLE9BQU8sR0FBRztZQUNqQztZQUNBLElBQUlGLFlBQVksTUFBTTtnQkFDcEJKLHVCQUF1Qk0sT0FBTyxHQUFHUjtnQkFDakNJLHFCQUFxQkksT0FBTyxHQUFHRjtnQkFDL0JMLE1BQU1XLE9BQU8sQ0FBQ0MsZUFBZSxDQUFDRyxHQUFHLENBQUNoQixJQUFJTTtZQUN4QztRQUNGOzZDQUFHO1FBQUNMO1FBQU9EO0tBQUc7QUFDaEI7R0F4QmdCRDtBQTBCaEI7Ozs7Ozs7Q0FPQyxHQUNNLFNBQVNrQix5QkFBeUJDLFNBQVMsRUFBRUMsaUJBQWlCLEVBQUVsQixL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QUFDRDtRQUNWakI7UUFDQW1CLEtBQUtsRCxNQUFNVyxPQUFPLENBQUN3QyxRQUFRO1FBQzNCQztZQUNFLElBQUksQ0FBQ3JCLE1BQU07Z0JBQ1RlO1lBQ0Y7UUFDRjtJQUNGO0lBQ0EsT0FBTztRQUNMQTtRQUNBRjtJQUNGO0FBQ0Y7SUFuQ2dCSjs7UUFLVjVDLGtGQUFtQkE7UUFLRkYsK0VBQWlCQTtRQVd0Q0csc0ZBQXFCQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXRpbHMvcG9wdXBzL3BvcHVwU3RvcmVVdGlscy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlU3RhYmxlQ2FsbGJhY2snO1xuaW1wb3J0IHsgdXNlSXNvTGF5b3V0RWZmZWN0IH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlSXNvTGF5b3V0RWZmZWN0JztcbmltcG9ydCB7IHVzZVRyYW5zaXRpb25TdGF0dXMgfSBmcm9tIFwiLi4vLi4vaW50ZXJuYWxzL3VzZVRyYW5zaXRpb25TdGF0dXMuanNcIjtcbmltcG9ydCB7IHVzZU9wZW5DaGFuZ2VDb21wbGV0ZSB9IGZyb20gXCIuLi8uLi9pbnRlcm5hbHMvdXNlT3BlbkNoYW5nZUNvbXBsZXRlLmpzXCI7XG4vKipcbiAqIFJldHVybnMgYSBjYWxsYmFjayByZWYgdGhhdCByZWdpc3RlcnMvdW5yZWdpc3RlcnMgdGhlIHRyaWdnZXIgZWxlbWVudCBpbiB0aGUgc3RvcmUuXG4gKlxuICogQHBhcmFtIHN0b3JlIFRoZSBTdG9yZSBpbnN0YW5jZSB3aGVyZSB0aGUgdHJpZ2dlciBzaG91bGQgYmUgcmVnaXN0ZXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVRyaWdnZXJSZWdpc3RyYXRpb24oaWQsIHN0b3JlKSB7XG4gIC8vIEtlZXAgdHJhY2sgb2YgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIGVsZW1lbnQgdG8gdW5yZWdpc3RlciBpdCBvbiB1bm1vdW50IG9yIGlkIGNoYW5nZS5cbiAgY29uc3QgcmVnaXN0ZXJlZEVsZW1lbnRJZFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgcmVnaXN0ZXJlZEVsZW1lbnRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHJldHVybiBSZWFjdC51c2VDYWxsYmFjayhlbGVtZW50ID0+IHtcbiAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAocmVnaXN0ZXJlZEVsZW1lbnRJZFJlZi5jdXJyZW50ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCByZWdpc3RlcmVkSWQgPSByZWdpc3RlcmVkRWxlbWVudElkUmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCByZWdpc3RlcmVkRWxlbWVudCA9IHJlZ2lzdGVyZWRFbGVtZW50UmVmLmN1cnJlbnQ7XG4gICAgICBjb25zdCBjdXJyZW50RWxlbWVudCA9IHN0b3JlLmNvbnRleHQudHJpZ2dlckVsZW1lbnRzLmdldEJ5SWQocmVnaXN0ZXJlZElkKTtcbiAgICAgIGlmIChyZWdpc3RlcmVkRWxlbWVudCAmJiBjdXJyZW50RWxlbWVudCA9PT0gcmVnaXN0ZXJlZEVsZW1lbnQpIHtcbiAgICAgICAgc3RvcmUuY29udGV4dC50cmlnZ2VyRWxlbWVudHMuZGVsZXRlKHJlZ2lzdGVyZWRJZCk7XG4gICAgICB9XG4gICAgICByZWdpc3RlcmVkRWxlbWVudElkUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgcmVnaXN0ZXJlZEVsZW1lbnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfVxuICAgIGlmIChlbGVtZW50ICE9PSBudWxsKSB7XG4gICAgICByZWdpc3RlcmVkRWxlbWVudElkUmVmLmN1cnJlbnQgPSBpZDtcbiAgICAgIHJlZ2lzdGVyZWRFbGVtZW50UmVmLmN1cnJlbnQgPSBlbGVtZW50O1xuICAgICAgc3RvcmUuY29udGV4dC50cmlnZ2VyRWxlbWVudHMuYWRkKGlkLCBlbGVtZW50KTtcbiAgICB9XG4gIH0sIFtzdG9yZSwgaWRdKTtcbn1cblxuLyoqXG4gKiBTZXRzIHVwIHRyaWdnZXIgZGF0YSBmb3J3YXJkaW5nIHRvIHRoZSBzdG9yZS5cbiAqXG4gKiBAcGFyYW0gdHJpZ2dlcklkIElkIG9mIHRoZSB0cmlnZ2VyLlxuICogQHBhcmFtIHRyaWdnZXJFbGVtZW50IFRoZSB0cmlnZ2VyIERPTSBlbGVtZW50LlxuICogQHBhcmFtIHN0b3JlIFRoZSBTdG9yZSBpbnN0YW5jZSBtYW5hZ2luZyB0aGUgcG9wdXAgc3RhdGUuXG4gKiBAcGFyYW0gc3RhdGVVcGRhdGVzIEFuIG9iamVjdCB3aXRoIHN0YXRlIHVwZGF0ZXMgdG8gYXBwbHkgd2hlbiB0aGUgdHJpZ2dlciBpcyBhY3RpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VUcmlnZ2VyRGF0YUZvcndhcmRpbmcodHJpZ2dlcklkLCB0cmlnZ2VyRWxlbWVudFJlZiwgc3RvcmUsIHN0YXRlVXBkYXRlcykge1xuICBjb25zdCBpc01vdW50ZWRCeVRoaXNUcmlnZ2VyID0gc3RvcmUudXNlU3RhdGUoJ2lzTW91bnRlZEJ5VHJpZ2dlcicsIHRyaWdnZXJJZCk7XG4gIGNvbnN0IGJhc2VSZWdpc3RlclRyaWdnZXIgPSB1c2VUcmlnZ2VyUmVnaXN0cmF0aW9uKHRyaWdnZXJJZCwgc3RvcmUpO1xuICBjb25zdCByZWdpc3RlclRyaWdnZXIgPSB1c2VTdGFibGVDYWxsYmFjayhlbGVtZW50ID0+IHtcbiAgICBiYXNlUmVnaXN0ZXJUcmlnZ2VyKGVsZW1lbnQpO1xuICAgIGlmICghZWxlbWVudCB8fCAhc3RvcmUuc2VsZWN0KCdvcGVuJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlVHJpZ2dlcklkID0gc3RvcmUuc2VsZWN0KCdhY3RpdmVUcmlnZ2VySWQnKTtcbiAgICBpZiAoYWN0aXZlVHJpZ2dlcklkID09PSB0cmlnZ2VySWQpIHtcbiAgICAgIHN0b3JlLnVwZGF0ZSh7XG4gICAgICAgIGFjdGl2ZVRyaWdnZXJFbGVtZW50OiBlbGVtZW50LFxuICAgICAgICAuLi5zdGF0ZVVwZGF0ZXNcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoYWN0aXZlVHJpZ2dlcklkID09IG51bGwpIHtcbiAgICAgIC8vIFRoaXMgcnVucyB3aGVuIHBvcHVwIGlzIG9wZW4sIGJ1dCBubyBhY3RpdmUgdHJpZ2dlciBpcyBzZXQuXG4gICAgICAvLyBJdCBjYW4gaGFwcGVuIHdoZW4gdXNpbmcgY29udHJvbGxlZCBtb2RlIGFuZCB0aGUgdHJpZ2dlciBpcyBtb3VudGVkIGFmdGVyIG9wZW5pbmcgb3IgaWYgYHRyaWdnZXJJZGAgcHJvcCBpcyBub3Qgc2V0IGV4cGxpY2l0bHkuXG4gICAgICAvLyBJbiBzdWNoIGNhc2VzIHRoZSBmaXJzdCB0cmlnZ2VyIHRvIHJ1biB0aGlzIGNvZGUgYmVjb21lcyB0aGUgYWN0aXZlIHRyaWdnZXIgKHN0b3JlLnNlbGVjdCgnYWN0aXZlVHJpZ2dlcklkJykgc2hvdWxkIG5vdCByZXR1cm4gbnVsbCBhZnRlciB0aGF0KS5cbiAgICAgIC8vIFRoaXMgaXMgbW9zdGx5IGZvciBjb21wYXRpYmlsaXR5IHdpdGggY29udGFpbmVkIHRyaWdnZXJzIHdoZXJlIG5vIGV4cGxpY2l0IGB0cmlnZ2VySWRgIHdhcyByZXF1aXJlZCBpbiBjb250cm9sbGVkIG1vZGUuXG4gICAgICBzdG9yZS51cGRhdGUoe1xuICAgICAgICBhY3RpdmVUcmlnZ2VySWQ6IHRyaWdnZXJJZCxcbiAgICAgICAgYWN0aXZlVHJpZ2dlckVsZW1lbnQ6IGVsZW1lbnQsXG4gICAgICAgIC4uLnN0YXRlVXBkYXRlc1xuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgdXNlSXNvTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNNb3VudGVkQnlUaGlzVHJpZ2dlcikge1xuICAgICAgc3RvcmUudXBkYXRlKHtcbiAgICAgICAgYWN0aXZlVHJpZ2dlckVsZW1lbnQ6IHRyaWdnZXJFbGVtZW50UmVmLmN1cnJlbnQsXG4gICAgICAgIC4uLnN0YXRlVXBkYXRlc1xuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW2lzTW91bnRlZEJ5VGhpc1RyaWdnZXIsIHN0b3JlLCB0cmlnZ2VyRWxlbWVudFJlZiwgLi4uT2JqZWN0LnZhbHVlcyhzdGF0ZVVwZGF0ZXMpXSk7XG4gIHJldHVybiB7XG4gICAgcmVnaXN0ZXJUcmlnZ2VyLFxuICAgIGlzTW91bnRlZEJ5VGhpc1RyaWdnZXJcbiAgfTtcbn1cbi8qKlxuICogRW5zdXJlcyB0aGF0IHdoZW4gdGhlcmUncyBvbmx5IG9uZSB0cmlnZ2VyIGVsZW1lbnQgcmVnaXN0ZXJlZCwgaXQgaXMgc2V0IGFzIHRoZSBhY3RpdmUgdHJpZ2dlci5cbiAqIFRoaXMgYWxsb3dzIGNvbnRyb2xsZWQgcG9wdXBzIHRvIHdvcmsgY29ycmVjdGx5IHdpdGhvdXQgYW4gZXhwbGljaXQgdHJpZ2dlcklkLCBtYWludGFpbmluZyBjb21wYXRpYmlsaXR5XG4gKiB3aXRoIHRoZSBjb250YWluZWQgdHJpZ2dlcnMuXG4gKlxuICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIG9uIHRoZSBSb290IHBhcnQuXG4gKlxuICogQHBhcmFtIG9wZW4gV2hldGhlciB0aGUgcG9wdXAgaXMgb3Blbi5cbiAqIEBwYXJhbSBzdG9yZSBUaGUgU3RvcmUgaW5zdGFuY2UgbWFuYWdpbmcgdGhlIHBvcHVwIHN0YXRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSW1wbGljaXRBY3RpdmVUcmlnZ2VyKHN0b3JlKSB7XG4gIGNvbnN0IG9wZW4gPSBzdG9yZS51c2VTdGF0ZSgnb3BlbicpO1xuICB1c2VJc29MYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcGVuICYmICFzdG9yZS5zZWxlY3QoJ2FjdGl2ZVRyaWdnZXJJZCcpICYmIHN0b3JlLmNvbnRleHQudHJpZ2dlckVsZW1lbnRzLnNpemUgPT09IDEpIHtcbiAgICAgIGNvbnN0IGl0ZXJhdG9yUmVzdWx0ID0gc3RvcmUuY29udGV4dC50cmlnZ2VyRWxlbWVudHMuZW50cmllcygpLm5leHQoKTtcbiAgICAgIGlmICghaXRlcmF0b3JSZXN1bHQuZG9uZSkge1xuICAgICAgICBjb25zdCBbaW1wbGljaXRUcmlnZ2VySWQsIGltcGxpY2l0VHJpZ2dlckVsZW1lbnRdID0gaXRlcmF0b3JSZXN1bHQudmFsdWU7XG4gICAgICAgIHN0b3JlLnVwZGF0ZSh7XG4gICAgICAgICAgYWN0aXZlVHJpZ2dlcklkOiBpbXBsaWNpdFRyaWdnZXJJZCxcbiAgICAgICAgICBhY3RpdmVUcmlnZ2VyRWxlbWVudDogaW1wbGljaXRUcmlnZ2VyRWxlbWVudFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtvcGVuLCBzdG9yZV0pO1xufVxuXG4vKipcbiAqIE1hbmdhZ2VzIHRoZSBtb3VudGVkIHN0YXRlIG9mIHRoZSBwb3B1cC5cbiAqIFNldHMgdXAgdGhlIHRyYW5zaXRpb24gc3RhdHVzIGxpc3RlbmVycyBhbmQgaGFuZGxlcyB1bm1vdW50aW5nIHdoZW4gbmVlZGVkLlxuICogVXBkYXRlcyB0aGUgYG1vdW50ZWRgIGFuZCBgdHJhbnNpdGlvblN0YXR1c2Agc3RhdGVzIGluIHRoZSBzdG9yZS5cbiAqXG4gKiBAcGFyYW0gb3BlbiBXaGV0aGVyIHRoZSBwb3B1cCBpcyBvcGVuLlxuICogQHBhcmFtIHN0b3JlIFRoZSBTdG9yZSBpbnN0YW5jZSBtYW5hZ2luZyB0aGUgcG9wdXAgc3RhdGUuXG4gKiBAcGFyYW0gb25Vbm1vdW50IE9wdGlvbmFsIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBwb3B1cCBpcyB1bm1vdW50ZWQuXG4gKlxuICogQHJldHVybnMgQSBmdW5jdGlvbiB0byBmb3JjaWJseSB1bm1vdW50IHRoZSBwb3B1cC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZU9wZW5TdGF0ZVRyYW5zaXRpb25zKG9wZW4sIHN0b3JlLCBvblVubW91bnQpIHtcbiAgY29uc3Qge1xuICAgIG1vdW50ZWQsXG4gICAgc2V0TW91bnRlZCxcbiAgICB0cmFuc2l0aW9uU3RhdHVzXG4gIH0gPSB1c2VUcmFuc2l0aW9uU3RhdHVzKG9wZW4pO1xuICBzdG9yZS51c2VTeW5jZWRWYWx1ZXMoe1xuICAgIG1vdW50ZWQsXG4gICAgdHJhbnNpdGlvblN0YXR1c1xuICB9KTtcbiAgY29uc3QgZm9yY2VVbm1vdW50ID0gdXNlU3RhYmxlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldE1vdW50ZWQoZmFsc2UpO1xuICAgIHN0b3JlLnVwZGF0ZSh7XG4gICAgICBhY3RpdmVUcmlnZ2VySWQ6IG51bGwsXG4gICAgICBhY3RpdmVUcmlnZ2VyRWxlbWVudDogbnVsbCxcbiAgICAgIG1vdW50ZWQ6IGZhbHNlXG4gICAgfSk7XG4gICAgb25Vbm1vdW50Py4oKTtcbiAgICBzdG9yZS5jb250ZXh0Lm9uT3BlbkNoYW5nZUNvbXBsZXRlPy4oZmFsc2UpO1xuICB9KTtcbiAgY29uc3QgcHJldmVudFVubW91bnRpbmdPbkNsb3NlID0gc3RvcmUudXNlU3RhdGUoJ3ByZXZlbnRVbm1vdW50aW5nT25DbG9zZScpO1xuICB1c2VPcGVuQ2hhbmdlQ29tcGxldGUoe1xuICAgIGVuYWJsZWQ6ICFwcmV2ZW50VW5tb3VudGluZ09uQ2xvc2UsXG4gICAgb3BlbixcbiAgICByZWY6IHN0b3JlLmNvbnRleHQucG9wdXBSZWYsXG4gICAgb25Db21wbGV0ZSgpIHtcbiAgICAgIGlmICghb3Blbikge1xuICAgICAgICBmb3JjZVVubW91bnQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4ge1xuICAgIGZvcmNlVW5tb3VudCxcbiAgICB0cmFuc2l0aW9uU3RhdHVzXG4gIH07XG59Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlU3RhYmxlQ2FsbGJhY2siLCJ1c2VJc29MYXlvdXRFZmZlY3QiLCJ1c2VUcmFuc2l0aW9uU3RhdHVzIiwidXNlT3BlbkNoYW5nZUNvbXBsZXRlIiwidXNlVHJpZ2dlclJlZ2lzdHJhdGlvbiIsImlkIiwic3RvcmUiLCJyZWdpc3RlcmVkRWxlbWVudElkUmVmIiwidXNlUmVmIiwicmVnaXN0ZXJlZEVsZW1lbnRSZWYiLCJ1c2VDYWxsYmFjayIsImVsZW1lbnQiLCJ1bmRlZmluZWQiLCJjdXJyZW50IiwicmVnaXN0ZXJlZElkIiwicmVnaXN0ZXJlZEVsZW1lbnQiLCJjdXJyZW50RWxlbWVudCIsImNvbnRleHQiLCJ0cmlnZ2VyRWxlbWVudHMiLCJnZXRCeUlkIiwiZGVsZXRlIiwiYWRkIiwidXNlVHJpZ2dlckRhdGFGb3J3YXJkaW5nIiwidHJpZ2dlcklkIiwidHJpZ2dlckVsZW1lbnRSZWYiLCJzdGF0ZVVwZGF0ZXMiLCJpc01vdW50ZWRCeVRoaXNUcmlnZ2VyIiwidXNlU3RhdGUiLCJiYXNlUmVnaXN0ZXJUcmlnZ2VyIiwicmVnaXN0ZXJUcmlnZ2VyIiwic2VsZWN0IiwiYWN0aXZlVHJpZ2dlcklkIiwidXBkYXRlIiwiYWN0aXZlVHJpZ2dlckVsZW1lbnQiLCJPYmplY3QiLCJ2YWx1ZXMiLCJ1c2VJbXBsaWNpdEFjdGl2ZVRyaWdnZXIiLCJvcGVuIiwic2l6ZSIsIml0ZXJhdG9yUmVzdWx0IiwiZW50cmllcyIsIm5leHQiLCJkb25lIiwiaW1wbGljaXRUcmlnZ2VySWQiLCJpbXBsaWNpdFRyaWdnZXJFbGVtZW50IiwidmFsdWUiLCJ1c2VPcGVuU3RhdGVUcmFuc2l0aW9ucyIsIm9uVW5tb3VudCIsIm1vdW50ZWQiLCJzZXRNb3VudGVkIiwidHJhbnNpdGlvblN0YXR1cyIsInVzZVN5bmNlZFZhbHVlcyIsImZvcmNlVW5tb3VudCIsIm9uT3BlbkNoYW5nZUNvbXBsZXRlIiwicHJldmVudFVubW91bnRpbmdPbkNsb3NlIiwiZW5hYmxlZCIsInJlZiIsInBvcHVwUmVmIiwib25Db21wbGV0ZSJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popups/popupStoreUtils.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popups/popupTriggerMap.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/utils/popups/popupTriggerMap.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((__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 */ PopupTriggerMap: () => (/* binding */ PopupTriggerMap)\n/* harmony export */ });\n/**\n * Data structure to keep track of popup trigger elements by their IDs.\n * Uses both a set of Elements and a map of IDs to Elements for efficient lookups.\n */\nclass PopupTriggerMap {\n constructor() {\n this.elementsSet = new Set();\n this.idMap = new Map();\n }\n\n /**\n * Adds a trigger element with the given ID.\n *\n * Note: The provided element is assumed to not be registered under multiple IDs.\n */\n add(id, element) {\n const existingElement = this.idMap.get(id);\n if (existingElement === element) {\n return;\n }\n if (existingElement !== undefined) {\n // We assume that the same element won't be registered under multiple ids.\n // This is safe considering how useTriggerRegistration is implemented.\n this.elementsSet.delete(existingElement);\n }\n this.elementsSet.add(element);\n this.idMap.set(id, element);\n if (true) {\n if (this.elementsSet.size !== this.idMap.size) {\n throw new Error('Base UI: A trigger element cannot be registered under multiple IDs in PopupTriggerMap.');\n }\n }\n }\n\n /**\n * Removes the trigger element with the given ID.\n */\n delete(id) {\n const element = this.idMap.get(id);\n if (element) {\n this.elementsSet.delete(element);\n this.idMap.delete(id);\n }\n }\n\n /**\n * Whether the given element is registered as a trigger.\n */\n hasElement(element) {\n return this.elementsSet.has(element);\n }\n\n /**\n * Whether there is a registered trigger element matching the given predicate.\n */\n hasMatchingElement(predicate) {\n for (const element of this.elementsSet) {\n if (predicate(element)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Returns the trigger element associated with the given ID, or undefined if no such element exists.\n */\n getById(id) {\n return this.idMap.get(id);\n }\n\n /**\n * Returns an iterable of all registered trigger entries, where each entry is a tuple of [id, element].\n */\n entries() {\n return this.idMap.entries();\n }\n\n /**\n * Returns an iterable of all registered trigger elements.\n */\n elements() {\n return this.elementsSet.values();\n }\n\n /**\n * Returns the number of registered trigger elements.\n */\n get size() {\n return this.idMap.size;\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXRpbHMvcG9wdXBzL3BvcHVwVHJpZ2dlck1hcC5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLElBQXFDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL3V0aWxzL3BvcHVwcy9wb3B1cFRyaWdnZXJNYXAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEYXRhIHN0cnVjdHVyZSB0byBrZWVwIHRyYWNrIG9mIHBvcHVwIHRyaWdnZXIgZWxlbWVudHMgYnkgdGhlaXIgSURzLlxuICogVXNlcyBib3RoIGEgc2V0IG9mIEVsZW1lbnRzIGFuZCBhIG1hcCBvZiBJRHMgdG8gRWxlbWVudHMgZm9yIGVmZmljaWVudCBsb29rdXBzLlxuICovXG5leHBvcnQgY2xhc3MgUG9wdXBUcmlnZ2VyTWFwIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5lbGVtZW50c1NldCA9IG5ldyBTZXQoKTtcbiAgICB0aGlzLmlkTWFwID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB0cmlnZ2VyIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gSUQuXG4gICAqXG4gICAqIE5vdGU6IFRoZSBwcm92aWRlZCBlbGVtZW50IGlzIGFzc3VtZWQgdG8gbm90IGJlIHJlZ2lzdGVyZWQgdW5kZXIgbXVsdGlwbGUgSURzLlxuICAgKi9cbiAgYWRkKGlkLCBlbGVtZW50KSB7XG4gICAgY29uc3QgZXhpc3RpbmdFbGVtZW50ID0gdGhpcy5pZE1hcC5nZXQoaWQpO1xuICAgIGlmIChleGlzdGluZ0VsZW1lbnQgPT09IGVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGV4aXN0aW5nRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBXZSBhc3N1bWUgdGhhdCB0aGUgc2FtZSBlbGVtZW50IHdvbid0IGJlIHJlZ2lzdGVyZWQgdW5kZXIgbXVsdGlwbGUgaWRzLlxuICAgICAgLy8gVGhpcyBpcyBzYWZlIGNvbnNpZGVyaW5nIGhvdyB1c2VUcmlnZ2VyUmVnaXN0cmF0aW9uIGlzIGltcGxlbWVudGVkLlxuICAgICAgdGhpcy5lbGVtZW50c1NldC5kZWxldGUoZXhpc3RpbmdFbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5lbGVtZW50c1NldC5hZGQoZWxlbWVudCk7XG4gICAgdGhpcy5pZE1hcC5zZXQoaWQsIGVsZW1lbnQpO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodGhpcy5lbGVtZW50c1NldC5zaXplICE9PSB0aGlzLmlkTWFwLnNpemUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCYXNlIFVJOiBBIHRyaWdnZXIgZWxlbWVudCBjYW5ub3QgYmUgcmVnaXN0ZXJlZCB1bmRlciBtdWx0aXBsZSBJRHMgaW4gUG9wdXBUcmlnZ2VyTWFwLicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSB0cmlnZ2VyIGVsZW1lbnQgd2l0aCB0aGUgZ2l2ZW4gSUQuXG4gICAqL1xuICBkZWxldGUoaWQpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5pZE1hcC5nZXQoaWQpO1xuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICB0aGlzLmVsZW1lbnRzU2V0LmRlbGV0ZShlbGVtZW50KTtcbiAgICAgIHRoaXMuaWRNYXAuZGVsZXRlKGlkKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZ2l2ZW4gZWxlbWVudCBpcyByZWdpc3RlcmVkIGFzIGEgdHJpZ2dlci5cbiAgICovXG4gIGhhc0VsZW1lbnQoZWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRzU2V0LmhhcyhlbGVtZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZXJlIGlzIGEgcmVnaXN0ZXJlZCB0cmlnZ2VyIGVsZW1lbnQgbWF0Y2hpbmcgdGhlIGdpdmVuIHByZWRpY2F0ZS5cbiAgICovXG4gIGhhc01hdGNoaW5nRWxlbWVudChwcmVkaWNhdGUpIHtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5lbGVtZW50c1NldCkge1xuICAgICAgaWYgKHByZWRpY2F0ZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHRyaWdnZXIgZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIElELCBvciB1bmRlZmluZWQgaWYgbm8gc3VjaCBlbGVtZW50IGV4aXN0cy5cbiAgICovXG4gIGdldEJ5SWQoaWQpIHtcbiAgICByZXR1cm4gdGhpcy5pZE1hcC5nZXQoaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gaXRlcmFibGUgb2YgYWxsIHJlZ2lzdGVyZWQgdHJpZ2dlciBlbnRyaWVzLCB3aGVyZSBlYWNoIGVudHJ5IGlzIGEgdHVwbGUgb2YgW2lkLCBlbGVtZW50XS5cbiAgICovXG4gIGVudHJpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaWRNYXAuZW50cmllcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gaXRlcmFibGUgb2YgYWxsIHJlZ2lzdGVyZWQgdHJpZ2dlciBlbGVtZW50cy5cbiAgICovXG4gIGVsZW1lbnRzKCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRzU2V0LnZhbHVlcygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiByZWdpc3RlcmVkIHRyaWdnZXIgZWxlbWVudHMuXG4gICAqL1xuICBnZXQgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pZE1hcC5zaXplO1xuICB9XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popups/popupTriggerMap.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popups/store.js":
|
||
/*!***************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/utils/popups/store.js ***!
|
||
\***************************************************************/
|
||
/***/ ((__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 */ createInitialPopupStoreState: () => (/* binding */ createInitialPopupStoreState),\n/* harmony export */ popupStoreSelectors: () => (/* binding */ popupStoreSelectors)\n/* harmony export */ });\n/* harmony import */ var _base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/utils/store */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/createSelector.js\");\n/* harmony import */ var _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @base-ui/utils/empty */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js\");\n/* harmony import */ var _floating_ui_react_utils_getEmptyRootContext_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../floating-ui-react/utils/getEmptyRootContext.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/floating-ui-react/utils/getEmptyRootContext.js\");\n\n\n\n\n/**\n * State common to all popup stores.\n */\n\nfunction createInitialPopupStoreState() {\n return {\n open: false,\n openProp: undefined,\n mounted: false,\n transitionStatus: undefined,\n floatingRootContext: (0,_floating_ui_react_utils_getEmptyRootContext_js__WEBPACK_IMPORTED_MODULE_0__.getEmptyRootContext)(),\n preventUnmountingOnClose: false,\n payload: undefined,\n activeTriggerId: null,\n activeTriggerElement: null,\n triggerIdProp: undefined,\n popupElement: null,\n positionerElement: null,\n activeTriggerProps: _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJECT,\n inactiveTriggerProps: _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJECT,\n popupProps: _base_ui_utils_empty__WEBPACK_IMPORTED_MODULE_1__.EMPTY_OBJECT\n };\n}\nconst activeTriggerIdSelector = (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.triggerIdProp ?? state.activeTriggerId);\nconst popupStoreSelectors = {\n open: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.openProp ?? state.open),\n mounted: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.mounted),\n transitionStatus: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.transitionStatus),\n floatingRootContext: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.floatingRootContext),\n preventUnmountingOnClose: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.preventUnmountingOnClose),\n payload: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.payload),\n activeTriggerId: activeTriggerIdSelector,\n activeTriggerElement: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.mounted ? state.activeTriggerElement : null),\n /**\n * Whether the trigger with the given ID was used to open the popup.\n */\n isTriggerActive: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)((state, triggerId) => triggerId !== undefined && activeTriggerIdSelector(state) === triggerId),\n /**\n * Whether the popup is open and was activated by a trigger with the given ID.\n */\n isOpenedByTrigger: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)((state, triggerId) => triggerId !== undefined && activeTriggerIdSelector(state) === triggerId && state.open),\n /**\n * Whether the popup is mounted and was activated by a trigger with the given ID.\n */\n isMountedByTrigger: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)((state, triggerId) => triggerId !== undefined && activeTriggerIdSelector(state) === triggerId && state.mounted),\n triggerProps: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)((state, isActive) => isActive ? state.activeTriggerProps : state.inactiveTriggerProps),\n popupProps: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.popupProps),\n popupElement: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.popupElement),\n positionerElement: (0,_base_ui_utils_store__WEBPACK_IMPORTED_MODULE_2__.createSelector)(state => state.positionerElement)\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXRpbHMvcG9wdXBzL3N0b3JlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQXNEO0FBQ0Y7QUFDdUM7O0FBRTNGO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsb0dBQW1CO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLDhEQUFZO0FBQ3BDLDBCQUEwQiw4REFBWTtBQUN0QyxnQkFBZ0IsOERBQVk7QUFDNUI7QUFDQTtBQUNBLGdDQUFnQyxvRUFBYztBQUN2QztBQUNQLFFBQVEsb0VBQWM7QUFDdEIsV0FBVyxvRUFBYztBQUN6QixvQkFBb0Isb0VBQWM7QUFDbEMsdUJBQXVCLG9FQUFjO0FBQ3JDLDRCQUE0QixvRUFBYztBQUMxQyxXQUFXLG9FQUFjO0FBQ3pCO0FBQ0Esd0JBQXdCLG9FQUFjO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixvRUFBYztBQUNqQztBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsb0VBQWM7QUFDbkM7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLG9FQUFjO0FBQ3BDLGdCQUFnQixvRUFBYztBQUM5QixjQUFjLG9FQUFjO0FBQzVCLGdCQUFnQixvRUFBYztBQUM5QixxQkFBcUIsb0VBQWM7QUFDbkMiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL3V0aWxzL3BvcHVwcy9zdG9yZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVTZWxlY3RvciB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL3N0b3JlJztcbmltcG9ydCB7IEVNUFRZX09CSkVDVCB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL2VtcHR5JztcbmltcG9ydCB7IGdldEVtcHR5Um9vdENvbnRleHQgfSBmcm9tIFwiLi4vLi4vZmxvYXRpbmctdWktcmVhY3QvdXRpbHMvZ2V0RW1wdHlSb290Q29udGV4dC5qc1wiO1xuXG4vKipcbiAqIFN0YXRlIGNvbW1vbiB0byBhbGwgcG9wdXAgc3RvcmVzLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbml0aWFsUG9wdXBTdG9yZVN0YXRlKCkge1xuICByZXR1cm4ge1xuICAgIG9wZW46IGZhbHNlLFxuICAgIG9wZW5Qcm9wOiB1bmRlZmluZWQsXG4gICAgbW91bnRlZDogZmFsc2UsXG4gICAgdHJhbnNpdGlvblN0YXR1czogdW5kZWZpbmVkLFxuICAgIGZsb2F0aW5nUm9vdENvbnRleHQ6IGdldEVtcHR5Um9vdENvbnRleHQoKSxcbiAgICBwcmV2ZW50VW5tb3VudGluZ09uQ2xvc2U6IGZhbHNlLFxuICAgIHBheWxvYWQ6IHVuZGVmaW5lZCxcbiAgICBhY3RpdmVUcmlnZ2VySWQ6IG51bGwsXG4gICAgYWN0aXZlVHJpZ2dlckVsZW1lbnQ6IG51bGwsXG4gICAgdHJpZ2dlcklkUHJvcDogdW5kZWZpbmVkLFxuICAgIHBvcHVwRWxlbWVudDogbnVsbCxcbiAgICBwb3NpdGlvbmVyRWxlbWVudDogbnVsbCxcbiAgICBhY3RpdmVUcmlnZ2VyUHJvcHM6IEVNUFRZX09CSkVDVCxcbiAgICBpbmFjdGl2ZVRyaWdnZXJQcm9wczogRU1QVFlfT0JKRUNULFxuICAgIHBvcHVwUHJvcHM6IEVNUFRZX09CSkVDVFxuICB9O1xufVxuY29uc3QgYWN0aXZlVHJpZ2dlcklkU2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS50cmlnZ2VySWRQcm9wID8/IHN0YXRlLmFjdGl2ZVRyaWdnZXJJZCk7XG5leHBvcnQgY29uc3QgcG9wdXBTdG9yZVNlbGVjdG9ycyA9IHtcbiAgb3BlbjogY3JlYXRlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUub3BlblByb3AgPz8gc3RhdGUub3BlbiksXG4gIG1vdW50ZWQ6IGNyZWF0ZVNlbGVjdG9yKHN0YXRlID0+IHN0YXRlLm1vdW50ZWQpLFxuICB0cmFuc2l0aW9uU3RhdHVzOiBjcmVhdGVTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS50cmFuc2l0aW9uU3RhdHVzKSxcbiAgZmxvYXRpbmdSb290Q29udGV4dDogY3JlYXRlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUuZmxvYXRpbmdSb290Q29udGV4dCksXG4gIHByZXZlbnRVbm1vdW50aW5nT25DbG9zZTogY3JlYXRlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUucHJldmVudFVubW91bnRpbmdPbkNsb3NlKSxcbiAgcGF5bG9hZDogY3JlYXRlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUucGF5bG9hZCksXG4gIGFjdGl2ZVRyaWdnZXJJZDogYWN0aXZlVHJpZ2dlcklkU2VsZWN0b3IsXG4gIGFjdGl2ZVRyaWdnZXJFbGVtZW50OiBjcmVhdGVTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS5tb3VudGVkID8gc3RhdGUuYWN0aXZlVHJpZ2dlckVsZW1lbnQgOiBudWxsKSxcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHRyaWdnZXIgd2l0aCB0aGUgZ2l2ZW4gSUQgd2FzIHVzZWQgdG8gb3BlbiB0aGUgcG9wdXAuXG4gICAqL1xuICBpc1RyaWdnZXJBY3RpdmU6IGNyZWF0ZVNlbGVjdG9yKChzdGF0ZSwgdHJpZ2dlcklkKSA9PiB0cmlnZ2VySWQgIT09IHVuZGVmaW5lZCAmJiBhY3RpdmVUcmlnZ2VySWRTZWxlY3RvcihzdGF0ZSkgPT09IHRyaWdnZXJJZCksXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwb3B1cCBpcyBvcGVuIGFuZCB3YXMgYWN0aXZhdGVkIGJ5IGEgdHJpZ2dlciB3aXRoIHRoZSBnaXZlbiBJRC5cbiAgICovXG4gIGlzT3BlbmVkQnlUcmlnZ2VyOiBjcmVhdGVTZWxlY3Rvcigoc3RhdGUsIHRyaWdnZXJJZCkgPT4gdHJpZ2dlcklkICE9PSB1bmRlZmluZWQgJiYgYWN0aXZlVHJpZ2dlcklkU2VsZWN0b3Ioc3RhdGUpID09PSB0cmlnZ2VySWQgJiYgc3RhdGUub3BlbiksXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBwb3B1cCBpcyBtb3VudGVkIGFuZCB3YXMgYWN0aXZhdGVkIGJ5IGEgdHJpZ2dlciB3aXRoIHRoZSBnaXZlbiBJRC5cbiAgICovXG4gIGlzTW91bnRlZEJ5VHJpZ2dlcjogY3JlYXRlU2VsZWN0b3IoKHN0YXRlLCB0cmlnZ2VySWQpID0+IHRyaWdnZXJJZCAhPT0gdW5kZWZpbmVkICYmIGFjdGl2ZVRyaWdnZXJJZFNlbGVjdG9yKHN0YXRlKSA9PT0gdHJpZ2dlcklkICYmIHN0YXRlLm1vdW50ZWQpLFxuICB0cmlnZ2VyUHJvcHM6IGNyZWF0ZVNlbGVjdG9yKChzdGF0ZSwgaXNBY3RpdmUpID0+IGlzQWN0aXZlID8gc3RhdGUuYWN0aXZlVHJpZ2dlclByb3BzIDogc3RhdGUuaW5hY3RpdmVUcmlnZ2VyUHJvcHMpLFxuICBwb3B1cFByb3BzOiBjcmVhdGVTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS5wb3B1cFByb3BzKSxcbiAgcG9wdXBFbGVtZW50OiBjcmVhdGVTZWxlY3RvcihzdGF0ZSA9PiBzdGF0ZS5wb3B1cEVsZW1lbnQpLFxuICBwb3NpdGlvbmVyRWxlbWVudDogY3JlYXRlU2VsZWN0b3Ioc3RhdGUgPT4gc3RhdGUucG9zaXRpb25lckVsZW1lbnQpXG59OyJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/popups/store.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/resolveClassName.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/utils/resolveClassName.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((__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 */ resolveClassName: () => (/* binding */ resolveClassName)\n/* harmony export */ });\n/**\n * If the provided className is a string, it will be returned as is.\n * Otherwise, the function will call the className function with the state as the first argument.\n *\n * @param className\n * @param state\n */\nfunction resolveClassName(className, state) {\n return typeof className === 'function' ? className(state) : className;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXRpbHMvcmVzb2x2ZUNsYXNzTmFtZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL3V0aWxzL3Jlc29sdmVDbGFzc05hbWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJZiB0aGUgcHJvdmlkZWQgY2xhc3NOYW1lIGlzIGEgc3RyaW5nLCBpdCB3aWxsIGJlIHJldHVybmVkIGFzIGlzLlxuICogT3RoZXJ3aXNlLCB0aGUgZnVuY3Rpb24gd2lsbCBjYWxsIHRoZSBjbGFzc05hbWUgZnVuY3Rpb24gd2l0aCB0aGUgc3RhdGUgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuICpcbiAqIEBwYXJhbSBjbGFzc05hbWVcbiAqIEBwYXJhbSBzdGF0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUNsYXNzTmFtZShjbGFzc05hbWUsIHN0YXRlKSB7XG4gIHJldHVybiB0eXBlb2YgY2xhc3NOYW1lID09PSAnZnVuY3Rpb24nID8gY2xhc3NOYW1lKHN0YXRlKSA6IGNsYXNzTmFtZTtcbn0iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/resolveClassName.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/resolveRef.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/utils/resolveRef.js ***!
|
||
\*************************************************************/
|
||
/***/ ((__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 */ resolveRef: () => (/* binding */ resolveRef)\n/* harmony export */ });\n/**\n * If the provided argument is a ref object, returns its `current` value.\n * Otherwise, returns the argument itself.\n */\nfunction resolveRef(maybeRef) {\n if (maybeRef == null) {\n return maybeRef;\n }\n return 'current' in maybeRef ? maybeRef.current : maybeRef;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXRpbHMvcmVzb2x2ZVJlZi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL3V0aWxzL3Jlc29sdmVSZWYuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJZiB0aGUgcHJvdmlkZWQgYXJndW1lbnQgaXMgYSByZWYgb2JqZWN0LCByZXR1cm5zIGl0cyBgY3VycmVudGAgdmFsdWUuXG4gKiBPdGhlcndpc2UsIHJldHVybnMgdGhlIGFyZ3VtZW50IGl0c2VsZi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVSZWYobWF5YmVSZWYpIHtcbiAgaWYgKG1heWJlUmVmID09IG51bGwpIHtcbiAgICByZXR1cm4gbWF5YmVSZWY7XG4gIH1cbiAgcmV0dXJuICdjdXJyZW50JyBpbiBtYXliZVJlZiA/IG1heWJlUmVmLmN1cnJlbnQgOiBtYXliZVJlZjtcbn0iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/resolveRef.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/resolveStyle.js":
|
||
/*!***************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/utils/resolveStyle.js ***!
|
||
\***************************************************************/
|
||
/***/ ((__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 */ resolveStyle: () => (/* binding */ resolveStyle)\n/* harmony export */ });\n/**\n * If the provided style is an object, it will be returned as is.\n * Otherwise, the function will call the style function with the state as the first argument.\n *\n * @param style\n * @param state\n */\nfunction resolveStyle(style, state) {\n return typeof style === 'function' ? style(state) : style;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXRpbHMvcmVzb2x2ZVN0eWxlLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXRpbHMvcmVzb2x2ZVN0eWxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogSWYgdGhlIHByb3ZpZGVkIHN0eWxlIGlzIGFuIG9iamVjdCwgaXQgd2lsbCBiZSByZXR1cm5lZCBhcyBpcy5cbiAqIE90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIHdpbGwgY2FsbCB0aGUgc3R5bGUgZnVuY3Rpb24gd2l0aCB0aGUgc3RhdGUgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuICpcbiAqIEBwYXJhbSBzdHlsZVxuICogQHBhcmFtIHN0YXRlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlU3R5bGUoc3R5bGUsIHN0YXRlKSB7XG4gIHJldHVybiB0eXBlb2Ygc3R5bGUgPT09ICdmdW5jdGlvbicgPyBzdHlsZShzdGF0ZSkgOiBzdHlsZTtcbn0iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/resolveStyle.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/useFocusableWhenDisabled.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/utils/useFocusableWhenDisabled.js ***!
|
||
\***************************************************************************/
|
||
/***/ ((__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 */ useFocusableWhenDisabled: () => (/* binding */ useFocusableWhenDisabled)\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/* __next_internal_client_entry_do_not_use__ useFocusableWhenDisabled auto */ var _s = $RefreshSig$();\n\nfunction useFocusableWhenDisabled(parameters) {\n _s();\n const { focusableWhenDisabled, disabled, composite = false, tabIndex: tabIndexProp = 0, isNativeButton } = parameters;\n const isFocusableComposite = composite && focusableWhenDisabled !== false;\n const isNonFocusableComposite = composite && focusableWhenDisabled === false;\n // we can't explicitly assign `undefined` to any of these props because it\n // would otherwise prevent subsequently merged props from setting them\n const props = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"useFocusableWhenDisabled.useMemo[props]\": ()=>{\n const additionalProps = {\n // allow Tabbing away from focusableWhenDisabled elements\n onKeyDown (event) {\n if (disabled && focusableWhenDisabled && event.key !== 'Tab') {\n event.preventDefault();\n }\n }\n };\n if (!composite) {\n additionalProps.tabIndex = tabIndexProp;\n if (!isNativeButton && disabled) {\n additionalProps.tabIndex = focusableWhenDisabled ? tabIndexProp : -1;\n }\n }\n if (isNativeButton && (focusableWhenDisabled || isFocusableComposite) || !isNativeButton && disabled) {\n additionalProps['aria-disabled'] = disabled;\n }\n if (isNativeButton && (!focusableWhenDisabled || isNonFocusableComposite)) {\n additionalProps.disabled = disabled;\n }\n return additionalProps;\n }\n }[\"useFocusableWhenDisabled.useMemo[props]\"], [\n composite,\n disabled,\n focusableWhenDisabled,\n isFocusableComposite,\n isNonFocusableComposite,\n isNativeButton,\n tabIndexProp\n ]);\n return {\n props\n };\n}\n_s(useFocusableWhenDisabled, \"1qaLnnFzi7zAf/EHU2XFi+8b5wo=\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXRpbHMvdXNlRm9jdXNhYmxlV2hlbkRpc2FibGVkLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUUrQjtBQUN4QixTQUFTQyx5QkFBeUJDLFVBQVU7O0lBQ2pELE1BQU0sRUFDSkMscUJBQXFCLEVBQ3JCQyxRQUFRLEVBQ1JDLFlBQVksS0FBSyxFQUNqQkMsVUFBVUMsZUFBZSxDQUFDLEVBQzFCQyxjQUFjLEVBQ2YsR0FBR047SUFDSixNQUFNTyx1QkFBdUJKLGFBQWFGLDBCQUEwQjtJQUNwRSxNQUFNTywwQkFBMEJMLGFBQWFGLDBCQUEwQjtJQUV2RSwwRUFBMEU7SUFDMUUsc0VBQXNFO0lBQ3RFLE1BQU1RLFFBQVFYLDBDQUFhO21EQUFDO1lBQzFCLE1BQU1hLGtCQUFrQjtnQkFDdEIseURBQXlEO2dCQUN6REMsV0FBVUMsS0FBSztvQkFDYixJQUFJWCxZQUFZRCx5QkFBeUJZLE1BQU1DLEdBQUcsS0FBSyxPQUFPO3dCQUM1REQsTUFBTUUsY0FBYztvQkFDdEI7Z0JBQ0Y7WUFDRjtZQUNBLElBQUksQ0FBQ1osV0FBVztnQkFDZFEsZ0JBQWdCUCxRQUFRLEdBQUdDO2dCQUMzQixJQUFJLENBQUNDLGtCQUFrQkosVUFBVTtvQkFDL0JTLGdCQUFnQlAsUUFBUSxHQUFHSCx3QkFBd0JJLGVBQWUsQ0FBQztnQkFDckU7WUFDRjtZQUNBLElBQUlDLGtCQUFtQkwsQ0FBQUEseUJBQXlCTSxvQkFBbUIsS0FBTSxDQUFDRCxrQkFBa0JKLFVBQVU7Z0JBQ3BHUyxlQUFlLENBQUMsZ0JBQWdCLEdBQUdUO1lBQ3JDO1lBQ0EsSUFBSUksa0JBQW1CLEVBQUNMLHlCQUF5Qk8sdUJBQXNCLEdBQUk7Z0JBQ3pFRyxnQkFBZ0JULFFBQVEsR0FBR0E7WUFDN0I7WUFDQSxPQUFPUztRQUNUO2tEQUFHO1FBQUNSO1FBQVdEO1FBQVVEO1FBQXVCTTtRQUFzQkM7UUFBeUJGO1FBQWdCRDtLQUFhO0lBQzVILE9BQU87UUFDTEk7SUFDRjtBQUNGO0dBdkNnQlYiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvcmVhY3QvZXNtL3V0aWxzL3VzZUZvY3VzYWJsZVdoZW5EaXNhYmxlZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBmdW5jdGlvbiB1c2VGb2N1c2FibGVXaGVuRGlzYWJsZWQocGFyYW1ldGVycykge1xuICBjb25zdCB7XG4gICAgZm9jdXNhYmxlV2hlbkRpc2FibGVkLFxuICAgIGRpc2FibGVkLFxuICAgIGNvbXBvc2l0ZSA9IGZhbHNlLFxuICAgIHRhYkluZGV4OiB0YWJJbmRleFByb3AgPSAwLFxuICAgIGlzTmF0aXZlQnV0dG9uXG4gIH0gPSBwYXJhbWV0ZXJzO1xuICBjb25zdCBpc0ZvY3VzYWJsZUNvbXBvc2l0ZSA9IGNvbXBvc2l0ZSAmJiBmb2N1c2FibGVXaGVuRGlzYWJsZWQgIT09IGZhbHNlO1xuICBjb25zdCBpc05vbkZvY3VzYWJsZUNvbXBvc2l0ZSA9IGNvbXBvc2l0ZSAmJiBmb2N1c2FibGVXaGVuRGlzYWJsZWQgPT09IGZhbHNlO1xuXG4gIC8vIHdlIGNhbid0IGV4cGxpY2l0bHkgYXNzaWduIGB1bmRlZmluZWRgIHRvIGFueSBvZiB0aGVzZSBwcm9wcyBiZWNhdXNlIGl0XG4gIC8vIHdvdWxkIG90aGVyd2lzZSBwcmV2ZW50IHN1YnNlcXVlbnRseSBtZXJnZWQgcHJvcHMgZnJvbSBzZXR0aW5nIHRoZW1cbiAgY29uc3QgcHJvcHMgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBhZGRpdGlvbmFsUHJvcHMgPSB7XG4gICAgICAvLyBhbGxvdyBUYWJiaW5nIGF3YXkgZnJvbSBmb2N1c2FibGVXaGVuRGlzYWJsZWQgZWxlbWVudHNcbiAgICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgICBpZiAoZGlzYWJsZWQgJiYgZm9jdXNhYmxlV2hlbkRpc2FibGVkICYmIGV2ZW50LmtleSAhPT0gJ1RhYicpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBpZiAoIWNvbXBvc2l0ZSkge1xuICAgICAgYWRkaXRpb25hbFByb3BzLnRhYkluZGV4ID0gdGFiSW5kZXhQcm9wO1xuICAgICAgaWYgKCFpc05hdGl2ZUJ1dHRvbiAmJiBkaXNhYmxlZCkge1xuICAgICAgICBhZGRpdGlvbmFsUHJvcHMudGFiSW5kZXggPSBmb2N1c2FibGVXaGVuRGlzYWJsZWQgPyB0YWJJbmRleFByb3AgOiAtMTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzTmF0aXZlQnV0dG9uICYmIChmb2N1c2FibGVXaGVuRGlzYWJsZWQgfHwgaXNGb2N1c2FibGVDb21wb3NpdGUpIHx8ICFpc05hdGl2ZUJ1dHRvbiAmJiBkaXNhYmxlZCkge1xuICAgICAgYWRkaXRpb25hbFByb3BzWydhcmlhLWRpc2FibGVkJ10gPSBkaXNhYmxlZDtcbiAgICB9XG4gICAgaWYgKGlzTmF0aXZlQnV0dG9uICYmICghZm9jdXNhYmxlV2hlbkRpc2FibGVkIHx8IGlzTm9uRm9jdXNhYmxlQ29tcG9zaXRlKSkge1xuICAgICAgYWRkaXRpb25hbFByb3BzLmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgfVxuICAgIHJldHVybiBhZGRpdGlvbmFsUHJvcHM7XG4gIH0sIFtjb21wb3NpdGUsIGRpc2FibGVkLCBmb2N1c2FibGVXaGVuRGlzYWJsZWQsIGlzRm9jdXNhYmxlQ29tcG9zaXRlLCBpc05vbkZvY3VzYWJsZUNvbXBvc2l0ZSwgaXNOYXRpdmVCdXR0b24sIHRhYkluZGV4UHJvcF0pO1xuICByZXR1cm4ge1xuICAgIHByb3BzXG4gIH07XG59Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlRm9jdXNhYmxlV2hlbkRpc2FibGVkIiwicGFyYW1ldGVycyIsImZvY3VzYWJsZVdoZW5EaXNhYmxlZCIsImRpc2FibGVkIiwiY29tcG9zaXRlIiwidGFiSW5kZXgiLCJ0YWJJbmRleFByb3AiLCJpc05hdGl2ZUJ1dHRvbiIsImlzRm9jdXNhYmxlQ29tcG9zaXRlIiwiaXNOb25Gb2N1c2FibGVDb21wb3NpdGUiLCJwcm9wcyIsInVzZU1lbW8iLCJhZGRpdGlvbmFsUHJvcHMiLCJvbktleURvd24iLCJldmVudCIsImtleSIsInByZXZlbnREZWZhdWx0Il0sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/useFocusableWhenDisabled.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/useOpenInteractionType.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/@base-ui/react/esm/utils/useOpenInteractionType.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((__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 */ useOpenInteractionType: () => (/* binding */ useOpenInteractionType)\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 _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @base-ui/utils/useStableCallback */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useStableCallback.js\");\n/* harmony import */ var _base_ui_utils_useEnhancedClickHandler__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @base-ui/utils/useEnhancedClickHandler */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useEnhancedClickHandler.js\");\n/* harmony import */ var _base_ui_utils_detectBrowser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/utils/detectBrowser */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/detectBrowser.js\");\n/* harmony import */ var _internals_useValueChanged_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../internals/useValueChanged.js */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/internals/useValueChanged.js\");\n/* __next_internal_client_entry_do_not_use__ useOpenInteractionType auto */ var _s = $RefreshSig$();\n\n\n\n\n\n/**\n * Determines the interaction type (keyboard, mouse, touch, etc.) that opened the component.\n *\n * @param open The open state of the component.\n */ function useOpenInteractionType(open) {\n _s();\n const [openMethod, setOpenMethod] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null);\n const handleTriggerClick = (0,_base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_1__.useStableCallback)({\n \"useOpenInteractionType.useStableCallback[handleTriggerClick]\": (_, interactionType)=>{\n if (!open) {\n setOpenMethod(interactionType || // On iOS Safari, the hitslop around touch targets means tapping outside an element's\n // bounds does not fire `pointerdown` but does fire `mousedown`. The `interactionType`\n // will be \"\" in that case.\n (_base_ui_utils_detectBrowser__WEBPACK_IMPORTED_MODULE_2__.isIOS ? 'touch' : ''));\n }\n }\n }[\"useOpenInteractionType.useStableCallback[handleTriggerClick]\"]);\n (0,_internals_useValueChanged_js__WEBPACK_IMPORTED_MODULE_3__.useValueChanged)(open, {\n \"useOpenInteractionType.useValueChanged\": (previousOpen)=>{\n if (previousOpen && !open) {\n setOpenMethod(null);\n }\n }\n }[\"useOpenInteractionType.useValueChanged\"]);\n const { onClick, onPointerDown } = (0,_base_ui_utils_useEnhancedClickHandler__WEBPACK_IMPORTED_MODULE_4__.useEnhancedClickHandler)(handleTriggerClick);\n return react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"useOpenInteractionType.useMemo\": ()=>({\n openMethod,\n triggerProps: {\n onClick,\n onPointerDown\n }\n })\n }[\"useOpenInteractionType.useMemo\"], [\n openMethod,\n onClick,\n onPointerDown\n ]);\n}\n_s(useOpenInteractionType, \"TE1sv+herJ1XCW/0c9BymUCgXa4=\", false, function() {\n return [\n _base_ui_utils_useStableCallback__WEBPACK_IMPORTED_MODULE_1__.useStableCallback,\n _internals_useValueChanged_js__WEBPACK_IMPORTED_MODULE_3__.useValueChanged,\n _base_ui_utils_useEnhancedClickHandler__WEBPACK_IMPORTED_MODULE_4__.useEnhancedClickHandler\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXRpbHMvdXNlT3BlbkludGVyYWN0aW9uVHlwZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBRStCO0FBQ3NDO0FBQ1k7QUFDNUI7QUFDYTtBQUVsRTs7OztDQUlDLEdBQ00sU0FBU0ssdUJBQXVCQyxJQUFJOztJQUN6QyxNQUFNLENBQUNDLFlBQVlDLGNBQWMsR0FBR1IsMkNBQWMsQ0FBQztJQUNuRCxNQUFNVSxxQkFBcUJULG1GQUFpQkE7d0VBQUMsQ0FBQ1UsR0FBR0M7WUFDL0MsSUFBSSxDQUFDTixNQUFNO2dCQUNURSxjQUFjSSxtQkFDZCxxRkFBcUY7Z0JBQ3JGLHNGQUFzRjtnQkFDdEYsMkJBQTJCO2dCQUMzQlQsQ0FBQUEsK0RBQUtBLEdBQUcsVUFBVSxFQUFDO1lBQ3JCO1FBQ0Y7O0lBQ0FDLDhFQUFlQSxDQUFDRTtrREFBTU8sQ0FBQUE7WUFDcEIsSUFBSUEsZ0JBQWdCLENBQUNQLE1BQU07Z0JBQ3pCRSxjQUFjO1lBQ2hCO1FBQ0Y7O0lBQ0EsTUFBTSxFQUNKTSxPQUFPLEVBQ1BDLGFBQWEsRUFDZCxHQUFHYiwrRkFBdUJBLENBQUNRO0lBQzVCLE9BQU9WLDBDQUFhOzBDQUFDLElBQU87Z0JBQzFCTztnQkFDQVUsY0FBYztvQkFDWkg7b0JBQ0FDO2dCQUNGO1lBQ0Y7eUNBQUk7UUFBQ1I7UUFBWU87UUFBU0M7S0FBYztBQUMxQztHQTNCZ0JWOztRQUVhSiwrRUFBaUJBO1FBUzVDRywwRUFBZUE7UUFRWEYsMkZBQXVCQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS9yZWFjdC9lc20vdXRpbHMvdXNlT3BlbkludGVyYWN0aW9uVHlwZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVN0YWJsZUNhbGxiYWNrIH0gZnJvbSAnQGJhc2UtdWkvdXRpbHMvdXNlU3RhYmxlQ2FsbGJhY2snO1xuaW1wb3J0IHsgdXNlRW5oYW5jZWRDbGlja0hhbmRsZXIgfSBmcm9tICdAYmFzZS11aS91dGlscy91c2VFbmhhbmNlZENsaWNrSGFuZGxlcic7XG5pbXBvcnQgeyBpc0lPUyB9IGZyb20gJ0BiYXNlLXVpL3V0aWxzL2RldGVjdEJyb3dzZXInO1xuaW1wb3J0IHsgdXNlVmFsdWVDaGFuZ2VkIH0gZnJvbSBcIi4uL2ludGVybmFscy91c2VWYWx1ZUNoYW5nZWQuanNcIjtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHRoZSBpbnRlcmFjdGlvbiB0eXBlIChrZXlib2FyZCwgbW91c2UsIHRvdWNoLCBldGMuKSB0aGF0IG9wZW5lZCB0aGUgY29tcG9uZW50LlxuICpcbiAqIEBwYXJhbSBvcGVuIFRoZSBvcGVuIHN0YXRlIG9mIHRoZSBjb21wb25lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VPcGVuSW50ZXJhY3Rpb25UeXBlKG9wZW4pIHtcbiAgY29uc3QgW29wZW5NZXRob2QsIHNldE9wZW5NZXRob2RdID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVRyaWdnZXJDbGljayA9IHVzZVN0YWJsZUNhbGxiYWNrKChfLCBpbnRlcmFjdGlvblR5cGUpID0+IHtcbiAgICBpZiAoIW9wZW4pIHtcbiAgICAgIHNldE9wZW5NZXRob2QoaW50ZXJhY3Rpb25UeXBlIHx8IChcbiAgICAgIC8vIE9uIGlPUyBTYWZhcmksIHRoZSBoaXRzbG9wIGFyb3VuZCB0b3VjaCB0YXJnZXRzIG1lYW5zIHRhcHBpbmcgb3V0c2lkZSBhbiBlbGVtZW50J3NcbiAgICAgIC8vIGJvdW5kcyBkb2VzIG5vdCBmaXJlIGBwb2ludGVyZG93bmAgYnV0IGRvZXMgZmlyZSBgbW91c2Vkb3duYC4gVGhlIGBpbnRlcmFjdGlvblR5cGVgXG4gICAgICAvLyB3aWxsIGJlIFwiXCIgaW4gdGhhdCBjYXNlLlxuICAgICAgaXNJT1MgPyAndG91Y2gnIDogJycpKTtcbiAgICB9XG4gIH0pO1xuICB1c2VWYWx1ZUNoYW5nZWQob3BlbiwgcHJldmlvdXNPcGVuID0+IHtcbiAgICBpZiAocHJldmlvdXNPcGVuICYmICFvcGVuKSB7XG4gICAgICBzZXRPcGVuTWV0aG9kKG51bGwpO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHtcbiAgICBvbkNsaWNrLFxuICAgIG9uUG9pbnRlckRvd25cbiAgfSA9IHVzZUVuaGFuY2VkQ2xpY2tIYW5kbGVyKGhhbmRsZVRyaWdnZXJDbGljayk7XG4gIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgb3Blbk1ldGhvZCxcbiAgICB0cmlnZ2VyUHJvcHM6IHtcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvblBvaW50ZXJEb3duXG4gICAgfVxuICB9KSwgW29wZW5NZXRob2QsIG9uQ2xpY2ssIG9uUG9pbnRlckRvd25dKTtcbn0iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VTdGFibGVDYWxsYmFjayIsInVzZUVuaGFuY2VkQ2xpY2tIYW5kbGVyIiwiaXNJT1MiLCJ1c2VWYWx1ZUNoYW5nZWQiLCJ1c2VPcGVuSW50ZXJhY3Rpb25UeXBlIiwib3BlbiIsIm9wZW5NZXRob2QiLCJzZXRPcGVuTWV0aG9kIiwidXNlU3RhdGUiLCJoYW5kbGVUcmlnZ2VyQ2xpY2siLCJfIiwiaW50ZXJhY3Rpb25UeXBlIiwicHJldmlvdXNPcGVuIiwib25DbGljayIsIm9uUG9pbnRlckRvd24iLCJ1c2VNZW1vIiwidHJpZ2dlclByb3BzIl0sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/react/esm/utils/useOpenInteractionType.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/addEventListener.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/addEventListener.js ***!
|
||
\*************************************************************/
|
||
/***/ ((__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 */ addEventListener: () => (/* binding */ addEventListener)\n/* harmony export */ });\n/**\n * Adds an event listener and returns a cleanup function to remove it.\n */\n\nfunction addEventListener(target, type, listener, options) {\n target.addEventListener(type, listener, options);\n return () => {\n target.removeEventListener(type, listener, options);\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vYWRkRXZlbnRMaXN0ZW5lci5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBOztBQUVPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vYWRkRXZlbnRMaXN0ZW5lci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFkZHMgYW4gZXZlbnQgbGlzdGVuZXIgYW5kIHJldHVybnMgYSBjbGVhbnVwIGZ1bmN0aW9uIHRvIHJlbW92ZSBpdC5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRMaXN0ZW5lcih0YXJnZXQsIHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKSB7XG4gIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH07XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/addEventListener.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/detectBrowser.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/detectBrowser.js ***!
|
||
\**********************************************************/
|
||
/***/ ((__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 */ isAndroid: () => (/* binding */ isAndroid),\n/* harmony export */ isEdge: () => (/* binding */ isEdge),\n/* harmony export */ isFirefox: () => (/* binding */ isFirefox),\n/* harmony export */ isIOS: () => (/* binding */ isIOS),\n/* harmony export */ isJSDOM: () => (/* binding */ isJSDOM),\n/* harmony export */ isMac: () => (/* binding */ isMac),\n/* harmony export */ isSafari: () => (/* binding */ isSafari),\n/* harmony export */ isWebKit: () => (/* binding */ isWebKit)\n/* harmony export */ });\nconst hasNavigator = typeof navigator !== 'undefined';\nconst nav = getNavigatorData();\nconst platform = getPlatform();\nconst userAgent = getUserAgent();\nconst isWebKit = typeof CSS === 'undefined' || !CSS.supports ? false : CSS.supports('-webkit-backdrop-filter:none');\nconst isIOS =\n// iPads can claim to be MacIntel\nnav.platform === 'MacIntel' && nav.maxTouchPoints > 1 ? true : /iP(hone|ad|od)|iOS/.test(nav.platform);\nconst isFirefox = hasNavigator && /firefox/i.test(userAgent);\nconst isSafari = hasNavigator && /apple/i.test(navigator.vendor);\nconst isEdge = hasNavigator && /Edg/i.test(userAgent);\nconst isAndroid = hasNavigator && /android/i.test(platform) || /android/i.test(userAgent);\nconst isMac = hasNavigator && platform.toLowerCase().startsWith('mac') && !navigator.maxTouchPoints;\nconst isJSDOM = userAgent.includes('jsdom/');\n\n// Avoid Chrome DevTools blue warning.\nfunction getNavigatorData() {\n if (!hasNavigator) {\n return {\n platform: '',\n maxTouchPoints: -1\n };\n }\n const uaData = navigator.userAgentData;\n if (uaData?.platform) {\n return {\n platform: uaData.platform,\n maxTouchPoints: navigator.maxTouchPoints\n };\n }\n return {\n platform: navigator.platform ?? '',\n maxTouchPoints: navigator.maxTouchPoints ?? -1\n };\n}\nfunction getUserAgent() {\n if (!hasNavigator) {\n return '';\n }\n const uaData = navigator.userAgentData;\n if (uaData && Array.isArray(uaData.brands)) {\n return uaData.brands.map(({\n brand,\n version\n }) => `${brand}/${version}`).join(' ');\n }\n return navigator.userAgent;\n}\nfunction getPlatform() {\n if (!hasNavigator) {\n return '';\n }\n const uaData = navigator.userAgentData;\n if (uaData?.platform) {\n return uaData.platform;\n }\n return navigator.platform ?? '';\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vZGV0ZWN0QnJvd3Nlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDQTtBQUNQO0FBQ0E7QUFDTztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRVA7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUssUUFBUSxNQUFNLEdBQUcsUUFBUTtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vZGV0ZWN0QnJvd3Nlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBoYXNOYXZpZ2F0b3IgPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJztcbmNvbnN0IG5hdiA9IGdldE5hdmlnYXRvckRhdGEoKTtcbmNvbnN0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0oKTtcbmNvbnN0IHVzZXJBZ2VudCA9IGdldFVzZXJBZ2VudCgpO1xuZXhwb3J0IGNvbnN0IGlzV2ViS2l0ID0gdHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cyA/IGZhbHNlIDogQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcjpub25lJyk7XG5leHBvcnQgY29uc3QgaXNJT1MgPVxuLy8gaVBhZHMgY2FuIGNsYWltIHRvIGJlIE1hY0ludGVsXG5uYXYucGxhdGZvcm0gPT09ICdNYWNJbnRlbCcgJiYgbmF2Lm1heFRvdWNoUG9pbnRzID4gMSA/IHRydWUgOiAvaVAoaG9uZXxhZHxvZCl8aU9TLy50ZXN0KG5hdi5wbGF0Zm9ybSk7XG5leHBvcnQgY29uc3QgaXNGaXJlZm94ID0gaGFzTmF2aWdhdG9yICYmIC9maXJlZm94L2kudGVzdCh1c2VyQWdlbnQpO1xuZXhwb3J0IGNvbnN0IGlzU2FmYXJpID0gaGFzTmF2aWdhdG9yICYmIC9hcHBsZS9pLnRlc3QobmF2aWdhdG9yLnZlbmRvcik7XG5leHBvcnQgY29uc3QgaXNFZGdlID0gaGFzTmF2aWdhdG9yICYmIC9FZGcvaS50ZXN0KHVzZXJBZ2VudCk7XG5leHBvcnQgY29uc3QgaXNBbmRyb2lkID0gaGFzTmF2aWdhdG9yICYmIC9hbmRyb2lkL2kudGVzdChwbGF0Zm9ybSkgfHwgL2FuZHJvaWQvaS50ZXN0KHVzZXJBZ2VudCk7XG5leHBvcnQgY29uc3QgaXNNYWMgPSBoYXNOYXZpZ2F0b3IgJiYgcGxhdGZvcm0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCdtYWMnKSAmJiAhbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzO1xuZXhwb3J0IGNvbnN0IGlzSlNET00gPSB1c2VyQWdlbnQuaW5jbHVkZXMoJ2pzZG9tLycpO1xuXG4vLyBBdm9pZCBDaHJvbWUgRGV2VG9vbHMgYmx1ZSB3YXJuaW5nLlxuZnVuY3Rpb24gZ2V0TmF2aWdhdG9yRGF0YSgpIHtcbiAgaWYgKCFoYXNOYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGxhdGZvcm06ICcnLFxuICAgICAgbWF4VG91Y2hQb2ludHM6IC0xXG4gICAgfTtcbiAgfVxuICBjb25zdCB1YURhdGEgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YTtcbiAgaWYgKHVhRGF0YT8ucGxhdGZvcm0pIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGxhdGZvcm06IHVhRGF0YS5wbGF0Zm9ybSxcbiAgICAgIG1heFRvdWNoUG9pbnRzOiBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHNcbiAgICB9O1xuICB9XG4gIHJldHVybiB7XG4gICAgcGxhdGZvcm06IG5hdmlnYXRvci5wbGF0Zm9ybSA/PyAnJyxcbiAgICBtYXhUb3VjaFBvaW50czogbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID8/IC0xXG4gIH07XG59XG5mdW5jdGlvbiBnZXRVc2VyQWdlbnQoKSB7XG4gIGlmICghaGFzTmF2aWdhdG9yKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuICBpZiAodWFEYXRhICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoKHtcbiAgICAgIGJyYW5kLFxuICAgICAgdmVyc2lvblxuICAgIH0pID0+IGAke2JyYW5kfS8ke3ZlcnNpb259YCkuam9pbignICcpO1xuICB9XG4gIHJldHVybiBuYXZpZ2F0b3IudXNlckFnZW50O1xufVxuZnVuY3Rpb24gZ2V0UGxhdGZvcm0oKSB7XG4gIGlmICghaGFzTmF2aWdhdG9yKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuICBpZiAodWFEYXRhPy5wbGF0Zm9ybSkge1xuICAgIHJldHVybiB1YURhdGEucGxhdGZvcm07XG4gIH1cbiAgcmV0dXJuIG5hdmlnYXRvci5wbGF0Zm9ybSA/PyAnJztcbn0iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/detectBrowser.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js":
|
||
/*!**************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/empty.js ***!
|
||
\**************************************************/
|
||
/***/ ((__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 */ EMPTY_ARRAY: () => (/* binding */ EMPTY_ARRAY),\n/* harmony export */ EMPTY_OBJECT: () => (/* binding */ EMPTY_OBJECT),\n/* harmony export */ NOOP: () => (/* binding */ NOOP)\n/* harmony export */ });\nfunction NOOP() {}\nconst EMPTY_ARRAY = Object.freeze([]);\nconst EMPTY_OBJECT = Object.freeze({});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vZW1wdHkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQU87QUFDQTtBQUNBLHFDQUFxQyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vZW1wdHkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGZ1bmN0aW9uIE5PT1AoKSB7fVxuZXhwb3J0IGNvbnN0IEVNUFRZX0FSUkFZID0gT2JqZWN0LmZyZWV6ZShbXSk7XG5leHBvcnQgY29uc3QgRU1QVFlfT0JKRUNUID0gT2JqZWN0LmZyZWV6ZSh7fSk7Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/error.js":
|
||
/*!**************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/error.js ***!
|
||
\**************************************************/
|
||
/***/ ((__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 */ error: () => (/* binding */ error),\n/* harmony export */ reset: () => (/* binding */ reset)\n/* harmony export */ });\nlet set;\nif (true) {\n set = new Set();\n}\nfunction error(...messages) {\n if (true) {\n const messageKey = messages.join(' ');\n if (!set.has(messageKey)) {\n set.add(messageKey);\n console.error(`Base UI: ${messageKey}`);\n }\n }\n}\nfunction reset() {\n set?.clear();\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vZXJyb3IuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBLElBQUksSUFBcUM7QUFDekM7QUFDQTtBQUNPO0FBQ1AsTUFBTSxJQUFxQztBQUMzQztBQUNBO0FBQ0E7QUFDQSxnQ0FBZ0MsV0FBVztBQUMzQztBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvdXRpbHMvZXNtL2Vycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBzZXQ7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBzZXQgPSBuZXcgU2V0KCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZXJyb3IoLi4ubWVzc2FnZXMpIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zdCBtZXNzYWdlS2V5ID0gbWVzc2FnZXMuam9pbignICcpO1xuICAgIGlmICghc2V0LmhhcyhtZXNzYWdlS2V5KSkge1xuICAgICAgc2V0LmFkZChtZXNzYWdlS2V5KTtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEJhc2UgVUk6ICR7bWVzc2FnZUtleX1gKTtcbiAgICB9XG4gIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiByZXNldCgpIHtcbiAgc2V0Py5jbGVhcigpO1xufSJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/error.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/fastHooks.js":
|
||
/*!******************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/fastHooks.js ***!
|
||
\******************************************************/
|
||
/***/ ((__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 */ fastComponent: () => (/* binding */ fastComponent),\n/* harmony export */ fastComponentRef: () => (/* binding */ fastComponentRef),\n/* harmony export */ getInstance: () => (/* binding */ getInstance),\n/* harmony export */ register: () => (/* binding */ register),\n/* harmony export */ setInstance: () => (/* binding */ setInstance)\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 _useRefWithInit_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./useRefWithInit.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useRefWithInit.js\");\n\n\nconst hooks = [];\nlet currentInstance = undefined;\nfunction getInstance() {\n return currentInstance;\n}\nfunction setInstance(instance) {\n currentInstance = instance;\n}\nfunction register(hook) {\n hooks.push(hook);\n}\nfunction fastComponent(fn) {\n const FastComponent = (props, forwardedRef) => {\n const instance = (0,_useRefWithInit_js__WEBPACK_IMPORTED_MODULE_1__.useRefWithInit)(createInstance).current;\n let result;\n try {\n currentInstance = instance;\n for (const hook of hooks) {\n hook.before(instance);\n }\n result = fn(props, forwardedRef);\n for (const hook of hooks) {\n hook.after(instance);\n }\n instance.didInitialize = true;\n } finally {\n currentInstance = undefined;\n }\n return result;\n };\n FastComponent.displayName = fn.displayName || fn.name;\n return FastComponent;\n}\nfunction fastComponentRef(fn) {\n return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(fastComponent(fn));\n}\nfunction createInstance() {\n return {\n didInitialize: false\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vZmFzdEhvb2tzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBK0I7QUFDc0I7QUFDckQ7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQSxxQkFBcUIsa0VBQWM7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1Asc0JBQXNCLDZDQUFnQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvdXRpbHMvZXNtL2Zhc3RIb29rcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VSZWZXaXRoSW5pdCB9IGZyb20gXCIuL3VzZVJlZldpdGhJbml0LmpzXCI7XG5jb25zdCBob29rcyA9IFtdO1xubGV0IGN1cnJlbnRJbnN0YW5jZSA9IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnN0YW5jZSgpIHtcbiAgcmV0dXJuIGN1cnJlbnRJbnN0YW5jZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXRJbnN0YW5jZShpbnN0YW5jZSkge1xuICBjdXJyZW50SW5zdGFuY2UgPSBpbnN0YW5jZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3Rlcihob29rKSB7XG4gIGhvb2tzLnB1c2goaG9vayk7XG59XG5leHBvcnQgZnVuY3Rpb24gZmFzdENvbXBvbmVudChmbikge1xuICBjb25zdCBGYXN0Q29tcG9uZW50ID0gKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHVzZVJlZldpdGhJbml0KGNyZWF0ZUluc3RhbmNlKS5jdXJyZW50O1xuICAgIGxldCByZXN1bHQ7XG4gICAgdHJ5IHtcbiAgICAgIGN1cnJlbnRJbnN0YW5jZSA9IGluc3RhbmNlO1xuICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgIGhvb2suYmVmb3JlKGluc3RhbmNlKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IGZuKHByb3BzLCBmb3J3YXJkZWRSZWYpO1xuICAgICAgZm9yIChjb25zdCBob29rIG9mIGhvb2tzKSB7XG4gICAgICAgIGhvb2suYWZ0ZXIoaW5zdGFuY2UpO1xuICAgICAgfVxuICAgICAgaW5zdGFuY2UuZGlkSW5pdGlhbGl6ZSA9IHRydWU7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGN1cnJlbnRJbnN0YW5jZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbiAgRmFzdENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGZuLmRpc3BsYXlOYW1lIHx8IGZuLm5hbWU7XG4gIHJldHVybiBGYXN0Q29tcG9uZW50O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZhc3RDb21wb25lbnRSZWYoZm4pIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZhc3RDb21wb25lbnQoZm4pKTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKCkge1xuICByZXR1cm4ge1xuICAgIGRpZEluaXRpYWxpemU6IGZhbHNlXG4gIH07XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/fastHooks.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/getReactElementRef.js":
|
||
/*!***************************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/getReactElementRef.js ***!
|
||
\***************************************************************/
|
||
/***/ ((__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 */ getReactElementRef: () => (/* binding */ getReactElementRef)\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 _reactVersion_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./reactVersion.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/reactVersion.js\");\n\n\n\n/**\n * Extracts the `ref` from a React element, handling different React versions.\n */\nfunction getReactElementRef(element) {\n if (! /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(element)) {\n return null;\n }\n const reactElement = element;\n const propsWithRef = reactElement.props;\n return ((0,_reactVersion_js__WEBPACK_IMPORTED_MODULE_1__.isReactVersionAtLeast)(19) ? propsWithRef?.ref : reactElement.ref) ?? null;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vZ2V0UmVhY3RFbGVtZW50UmVmLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUErQjtBQUMyQjs7QUFFMUQ7QUFDQTtBQUNBO0FBQ087QUFDUCxxQkFBcUIsaURBQW9CO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVSx1RUFBcUI7QUFDL0IiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvdXRpbHMvZXNtL2dldFJlYWN0RWxlbWVudFJlZi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc1JlYWN0VmVyc2lvbkF0TGVhc3QgfSBmcm9tIFwiLi9yZWFjdFZlcnNpb24uanNcIjtcblxuLyoqXG4gKiBFeHRyYWN0cyB0aGUgYHJlZmAgZnJvbSBhIFJlYWN0IGVsZW1lbnQsIGhhbmRsaW5nIGRpZmZlcmVudCBSZWFjdCB2ZXJzaW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFJlYWN0RWxlbWVudFJlZihlbGVtZW50KSB7XG4gIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChlbGVtZW50KSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlYWN0RWxlbWVudCA9IGVsZW1lbnQ7XG4gIGNvbnN0IHByb3BzV2l0aFJlZiA9IHJlYWN0RWxlbWVudC5wcm9wcztcbiAgcmV0dXJuIChpc1JlYWN0VmVyc2lvbkF0TGVhc3QoMTkpID8gcHJvcHNXaXRoUmVmPy5yZWYgOiByZWFjdEVsZW1lbnQucmVmKSA/PyBudWxsO1xufSJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/getReactElementRef.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/inertValue.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/inertValue.js ***!
|
||
\*******************************************************/
|
||
/***/ ((__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 */ inertValue: () => (/* binding */ inertValue)\n/* harmony export */ });\n/* harmony import */ var _reactVersion_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./reactVersion.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/reactVersion.js\");\n\nfunction inertValue(value) {\n if ((0,_reactVersion_js__WEBPACK_IMPORTED_MODULE_0__.isReactVersionAtLeast)(19)) {\n return value;\n }\n // compatibility with React < 19\n return value ? 'true' : undefined;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vaW5lcnRWYWx1ZS5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUEwRDtBQUNuRDtBQUNQLE1BQU0sdUVBQXFCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvdXRpbHMvZXNtL2luZXJ0VmFsdWUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaXNSZWFjdFZlcnNpb25BdExlYXN0IH0gZnJvbSBcIi4vcmVhY3RWZXJzaW9uLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gaW5lcnRWYWx1ZSh2YWx1ZSkge1xuICBpZiAoaXNSZWFjdFZlcnNpb25BdExlYXN0KDE5KSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICAvLyBjb21wYXRpYmlsaXR5IHdpdGggUmVhY3QgPCAxOVxuICByZXR1cm4gdmFsdWUgPyAndHJ1ZScgOiB1bmRlZmluZWQ7XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/inertValue.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/mergeCleanups.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/mergeCleanups.js ***!
|
||
\**********************************************************/
|
||
/***/ ((__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 */ mergeCleanups: () => (/* binding */ mergeCleanups)\n/* harmony export */ });\n/**\n * Combines multiple cleanup functions into a single cleanup function.\n */\nfunction mergeCleanups(...cleanups) {\n return () => {\n for (let i = 0; i < cleanups.length; i += 1) {\n const cleanup = cleanups[i];\n if (cleanup) {\n cleanup();\n }\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vbWVyZ2VDbGVhbnVwcy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBLG9CQUFvQixxQkFBcUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvdXRpbHMvZXNtL21lcmdlQ2xlYW51cHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb21iaW5lcyBtdWx0aXBsZSBjbGVhbnVwIGZ1bmN0aW9ucyBpbnRvIGEgc2luZ2xlIGNsZWFudXAgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNsZWFudXBzKC4uLmNsZWFudXBzKSB7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGVhbnVwcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgY29uc3QgY2xlYW51cCA9IGNsZWFudXBzW2ldO1xuICAgICAgaWYgKGNsZWFudXApIHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn0iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/mergeCleanups.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/mergeObjects.js":
|
||
/*!*********************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/mergeObjects.js ***!
|
||
\*********************************************************/
|
||
/***/ ((__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 */ mergeObjects: () => (/* binding */ mergeObjects)\n/* harmony export */ });\nfunction mergeObjects(a, b) {\n if (a && !b) {\n return a;\n }\n if (!a && b) {\n return b;\n }\n if (a || b) {\n return {\n ...a,\n ...b\n };\n }\n return undefined;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vbWVyZ2VPYmplY3RzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvdXRpbHMvZXNtL21lcmdlT2JqZWN0cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gbWVyZ2VPYmplY3RzKGEsIGIpIHtcbiAgaWYgKGEgJiYgIWIpIHtcbiAgICByZXR1cm4gYTtcbiAgfVxuICBpZiAoIWEgJiYgYikge1xuICAgIHJldHVybiBiO1xuICB9XG4gIGlmIChhIHx8IGIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uYSxcbiAgICAgIC4uLmJcbiAgICB9O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/mergeObjects.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/owner.js":
|
||
/*!**************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/owner.js ***!
|
||
\**************************************************/
|
||
/***/ ((__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 */ ownerDocument: () => (/* binding */ ownerDocument),\n/* harmony export */ ownerWindow: () => (/* reexport safe */ _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__.getWindow)\n/* harmony export */ });\n/* harmony import */ var _floating_ui_utils_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @floating-ui/utils/dom */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\");\n\nfunction ownerDocument(node) {\n return node?.ownerDocument || document;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vb3duZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWtFO0FBQzNEO0FBQ1A7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vb3duZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZ2V0V2luZG93IGFzIG93bmVyV2luZG93IH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzL2RvbSc7XG5leHBvcnQgZnVuY3Rpb24gb3duZXJEb2N1bWVudChub2RlKSB7XG4gIHJldHVybiBub2RlPy5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50O1xufSJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/owner.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/reactVersion.js":
|
||
/*!*********************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/reactVersion.js ***!
|
||
\*********************************************************/
|
||
/***/ ((__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 */ isReactVersionAtLeast: () => (/* binding */ isReactVersionAtLeast)\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\nconst majorVersion = parseInt(react__WEBPACK_IMPORTED_MODULE_0__.version, 10);\nfunction isReactVersionAtLeast(reactVersionToCheck) {\n return majorVersion >= reactVersionToCheck;\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vcmVhY3RWZXJzaW9uLmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQStCO0FBQy9CLDhCQUE4QiwwQ0FBYTtBQUNwQztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvdXRpbHMvZXNtL3JlYWN0VmVyc2lvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCBtYWpvclZlcnNpb24gPSBwYXJzZUludChSZWFjdC52ZXJzaW9uLCAxMCk7XG5leHBvcnQgZnVuY3Rpb24gaXNSZWFjdFZlcnNpb25BdExlYXN0KHJlYWN0VmVyc2lvblRvQ2hlY2spIHtcbiAgcmV0dXJuIG1ham9yVmVyc2lvbiA+PSByZWFjdFZlcnNpb25Ub0NoZWNrO1xufSJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/reactVersion.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/safeReact.js":
|
||
/*!******************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/safeReact.js ***!
|
||
\******************************************************/
|
||
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("var react__WEBPACK_IMPORTED_MODULE_0___namespace_cache;\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ SafeReact: () => (/* binding */ SafeReact)\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\n\n// https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379\nconst SafeReact = {\n .../*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2)))\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vc2FmZVJlYWN0LmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUErQjs7QUFFL0I7QUFDTztBQUNQLEtBQUsseUxBQUs7QUFDViIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vc2FmZVJlYWN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvNDExOTAjaXNzdWVjb21tZW50LTIwNDA4NzMzNzlcbmV4cG9ydCBjb25zdCBTYWZlUmVhY3QgPSB7XG4gIC4uLlJlYWN0XG59OyJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/safeReact.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/ReactStore.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/store/ReactStore.js ***!
|
||
\*************************************************************/
|
||
/***/ ((__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 */ ReactStore: () => (/* binding */ ReactStore)\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 _Store_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Store.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/Store.js\");\n/* harmony import */ var _useStore_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./useStore.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/useStore.js\");\n/* harmony import */ var _useStableCallback_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../useStableCallback.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useStableCallback.js\");\n/* harmony import */ var _useIsoLayoutEffect_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../useIsoLayoutEffect.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _empty_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../empty.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js\");\n/* False positives - ESLint thinks we're calling a hook from a class component. */ /* eslint-disable react-hooks/rules-of-hooks */ /* __next_internal_client_entry_do_not_use__ ReactStore auto */ \n\n\n\n\n\n/**\n * A Store that supports controlled state keys, non-reactive values and provides utility methods for React.\n */ class ReactStore extends _Store_js__WEBPACK_IMPORTED_MODULE_1__.Store {\n /**\n * Non-reactive values such as refs, callbacks, etc.\n */ /**\n * Synchronizes a single external value into the store.\n *\n * Note that the while the value in `state` is updated immediately, the value returned\n * by `useState` is updated before the next render (similarly to React's `useState`).\n */ useSyncedValue(key, value) {\n react__WEBPACK_IMPORTED_MODULE_0__.useDebugValue(key);\n (0,_useIsoLayoutEffect_js__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect)(()=>{\n if (this.state[key] !== value) {\n this.set(key, value);\n }\n }, [\n key,\n value\n ]);\n }\n /**\n * Synchronizes a single external value into the store and\n * cleans it up (sets to `undefined`) on unmount.\n *\n * Note that the while the value in `state` is updated immediately, the value returned\n * by `useState` is updated before the next render (similarly to React's `useState`).\n */ useSyncedValueWithCleanup(key, value) {\n // eslint-disable-next-line consistent-this\n const store = this;\n (0,_useIsoLayoutEffect_js__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect)(()=>{\n if (store.state[key] !== value) {\n store.set(key, value);\n }\n return ()=>{\n store.set(key, undefined);\n };\n }, [\n store,\n key,\n value\n ]);\n }\n /**\n * Synchronizes multiple external values into the store.\n *\n * Note that the while the values in `state` are updated immediately, the values returned\n * by `useState` are updated before the next render (similarly to React's `useState`).\n */ useSyncedValues(statePart) {\n // eslint-disable-next-line consistent-this\n const store = this;\n if (true) {\n // Check that an object with the same shape is passed on every render\n react__WEBPACK_IMPORTED_MODULE_0__.useDebugValue(statePart, (p)=>Object.keys(p));\n const keys = react__WEBPACK_IMPORTED_MODULE_0__.useRef(Object.keys(statePart)).current;\n const nextKeys = Object.keys(statePart);\n if (keys.length !== nextKeys.length || keys.some((key, index)=>key !== nextKeys[index])) {\n console.error('ReactStore.useSyncedValues expects the same prop keys on every render. Keys should be stable.');\n }\n }\n const dependencies = Object.values(statePart);\n (0,_useIsoLayoutEffect_js__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect)(()=>{\n store.update(statePart);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n store,\n ...dependencies\n ]);\n }\n /**\n * Registers a controllable prop pair (`controlled`, `defaultValue`) for a specific key. If `controlled`\n * is non-undefined, the store's state at `key` is updated to match `controlled`.\n */ useControlledProp(key, controlled) {\n react__WEBPACK_IMPORTED_MODULE_0__.useDebugValue(key);\n const isControlled = controlled !== undefined;\n (0,_useIsoLayoutEffect_js__WEBPACK_IMPORTED_MODULE_2__.useIsoLayoutEffect)(()=>{\n if (isControlled && !Object.is(this.state[key], controlled)) {\n // Set the internal state to match the controlled value.\n super.setState({\n ...this.state,\n [key]: controlled\n });\n }\n }, [\n key,\n controlled,\n isControlled\n ]);\n if (true) {\n var _this_controlledValues;\n // eslint-disable-next-line\n const cache = (_this_controlledValues = this.controlledValues) !== null && _this_controlledValues !== void 0 ? _this_controlledValues : this.controlledValues = new Map();\n if (!cache.has(key)) {\n cache.set(key, isControlled);\n }\n const previouslyControlled = cache.get(key);\n if (previouslyControlled !== undefined && previouslyControlled !== isControlled) {\n console.error(\"A component is changing the \".concat(isControlled ? '' : 'un', \"controlled state of \").concat(key.toString(), \" to be \").concat(isControlled ? 'un' : '', \"controlled. Elements should not switch from uncontrolled to controlled (or vice versa).\"));\n }\n }\n }\n /** Gets the current value from the store using a selector with the provided key.\n *\n * @param key Key of the selector to use.\n */ select(key, a1, a2, a3) {\n const selector = this.selectors[key];\n return selector(this.state, a1, a2, a3);\n }\n /**\n * Returns a value from the store's state using a selector function.\n * Used to subscribe to specific parts of the state.\n * This methods causes a rerender whenever the selected state changes.\n *\n * @param key Key of the selector to use.\n */ useState(key, a1, a2, a3) {\n react__WEBPACK_IMPORTED_MODULE_0__.useDebugValue(key);\n return (0,_useStore_js__WEBPACK_IMPORTED_MODULE_3__.useStore)(this, this.selectors[key], a1, a2, a3);\n }\n /**\n * Wraps a function with `useStableCallback` to ensure it has a stable reference\n * and assigns it to the context.\n *\n * @param key Key of the event callback. Must be a function in the context.\n * @param fn Function to assign.\n */ useContextCallback(key, fn) {\n react__WEBPACK_IMPORTED_MODULE_0__.useDebugValue(key);\n const stableFunction = (0,_useStableCallback_js__WEBPACK_IMPORTED_MODULE_4__.useStableCallback)(fn !== null && fn !== void 0 ? fn : _empty_js__WEBPACK_IMPORTED_MODULE_5__.NOOP);\n this.context[key] = stableFunction;\n }\n /**\n * Returns a stable setter function for a specific key in the store's state.\n * It's commonly used to pass as a ref callback to React elements.\n *\n * @param key Key of the state to set.\n */ useStateSetter(key) {\n const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(undefined);\n if (ref.current === undefined) {\n ref.current = (value)=>{\n this.set(key, value);\n };\n }\n return ref.current;\n }\n /**\n * Observes changes derived from the store's selectors and calls the listener when the selected value changes.\n *\n * @param key Key of the selector to observe.\n * @param listener Listener function called when the selector result changes.\n */ observe(selector, listener) {\n let selectFn;\n if (typeof selector === 'function') {\n selectFn = selector;\n } else {\n selectFn = this.selectors[selector];\n }\n let prevValue = selectFn(this.state);\n listener(prevValue, prevValue, this);\n return this.subscribe((nextState)=>{\n const nextValue = selectFn(nextState);\n if (!Object.is(prevValue, nextValue)) {\n const oldValue = prevValue;\n prevValue = nextValue;\n listener(nextValue, oldValue, this);\n }\n });\n }\n /**\n * Creates a new ReactStore instance.\n *\n * @param state Initial state of the store.\n * @param context Non-reactive context values.\n * @param selectors Optional selectors for use with `useState`.\n */ constructor(state, context = {}, selectors){\n super(state);\n this.context = context;\n this.selectors = selectors;\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vc3RvcmUvUmVhY3RTdG9yZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsZ0ZBQWdGLEdBQ2hGLDZDQUE2QyxtRUFHZDtBQUNJO0FBQ007QUFDbUI7QUFDRTtBQUMzQjtBQUVuQzs7Q0FFQyxHQUNNLE1BQU1NLG1CQUFtQkwsNENBQUtBO0lBY25DOztHQUVDLEdBRUQ7Ozs7O0dBS0MsR0FDRE0sZUFBZUMsR0FBRyxFQUFFQyxLQUFLLEVBQUU7UUFDekJULGdEQUFtQixDQUFDUTtRQUNwQkosMEVBQWtCQSxDQUFDO1lBQ2pCLElBQUksSUFBSSxDQUFDTyxLQUFLLENBQUNILElBQUksS0FBS0MsT0FBTztnQkFDN0IsSUFBSSxDQUFDRyxHQUFHLENBQUNKLEtBQUtDO1lBQ2hCO1FBQ0YsR0FBRztZQUFDRDtZQUFLQztTQUFNO0lBQ2pCO0lBRUE7Ozs7OztHQU1DLEdBQ0RJLDBCQUEwQkwsR0FBRyxFQUFFQyxLQUFLLEVBQUU7UUFDcEMsMkNBQTJDO1FBQzNDLE1BQU1LLFFBQVEsSUFBSTtRQUNsQlYsMEVBQWtCQSxDQUFDO1lBQ2pCLElBQUlVLE1BQU1ILEtBQUssQ0FBQ0gsSUFBSSxLQUFLQyxPQUFPO2dCQUM5QkssTUFBTUYsR0FBRyxDQUFDSixLQUFLQztZQUNqQjtZQUNBLE9BQU87Z0JBQ0xLLE1BQU1GLEdBQUcsQ0FBQ0osS0FBS087WUFDakI7UUFDRixHQUFHO1lBQUNEO1lBQU9OO1lBQUtDO1NBQU07SUFDeEI7SUFFQTs7Ozs7R0FLQyxHQUNETyxnQkFBZ0JDLFNBQVMsRUFBRTtRQUN6QiwyQ0FBMkM7UUFDM0MsTUFBTUgsUUFBUSxJQUFJO1FBQ2xCLElBQUlJLElBQXFDLEVBQUU7WUFDekMscUVBQXFFO1lBQ3JFbEIsZ0RBQW1CLENBQUNpQixXQUFXRSxDQUFBQSxJQUFLQyxPQUFPQyxJQUFJLENBQUNGO1lBQ2hELE1BQU1FLE9BQU9yQix5Q0FBWSxD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QUFJbEMsT0FBTztJQUNwQjtJQUVBOzs7OztHQUtDLEdBRURtQyxRQUFRVCxRQUFRLEVBQUVVLFFBQVEsRUFBRTtRQUMxQixJQUFJQztRQUNKLElBQUksT0FBT1gsYUFBYSxZQUFZO1lBQ2xDVyxXQUFXWDtRQUNiLE9BQU87WUFDTFcsV0FBVyxJQUFJLENBQUNWLFNBQVMsQ0FBQ0QsU0FBUztRQUNyQztRQUNBLElBQUlZLFlBQVlELFNBQVMsSUFBSSxDQUFDakQsS0FBSztRQUNuQ2dELFNBQVNFLFdBQVdBLFdBQVcsSUFBSTtRQUNuQyxPQUFPLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxDQUFBQTtZQUNwQixNQUFNQyxZQUFZSixTQUFTRztZQUMzQixJQUFJLENBQUMzQyxPQUFPZ0IsRUFBRSxDQUFDeUIsV0FBV0csWUFBWTtnQkFDcEMsTUFBTUMsV0FBV0o7Z0JBQ2pCQSxZQUFZRztnQkFDWkwsU0FBU0ssV0FBV0MsVUFBVSxJQUFJO1lBQ3BDO1FBQ0Y7SUFDRjtJQXRMQTs7Ozs7O0dBTUMsR0FDRCxZQUFZdEQsS0FBSyxFQUFFNEMsVUFBVSxDQUFDLENBQUMsRUFBRUwsU0FBUyxDQUFFO1FBQzFDLEtBQUssQ0FBQ3ZDO1FBQ04sSUFBSSxDQUFDNEMsT0FBTyxHQUFHQTtRQUNmLElBQUksQ0FBQ0wsU0FBUyxHQUFHQTtJQUNuQjtBQTRLRiIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vc3RvcmUvUmVhY3RTdG9yZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBGYWxzZSBwb3NpdGl2ZXMgLSBFU0xpbnQgdGhpbmtzIHdlJ3JlIGNhbGxpbmcgYSBob29rIGZyb20gYSBjbGFzcyBjb21wb25lbnQuICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rcyAqL1xuJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gXCIuL1N0b3JlLmpzXCI7XG5pbXBvcnQgeyB1c2VTdG9yZSB9IGZyb20gXCIuL3VzZVN0b3JlLmpzXCI7XG5pbXBvcnQgeyB1c2VTdGFibGVDYWxsYmFjayB9IGZyb20gXCIuLi91c2VTdGFibGVDYWxsYmFjay5qc1wiO1xuaW1wb3J0IHsgdXNlSXNvTGF5b3V0RWZmZWN0IH0gZnJvbSBcIi4uL3VzZUlzb0xheW91dEVmZmVjdC5qc1wiO1xuaW1wb3J0IHsgTk9PUCB9IGZyb20gXCIuLi9lbXB0eS5qc1wiO1xuXG4vKipcbiAqIEEgU3RvcmUgdGhhdCBzdXBwb3J0cyBjb250cm9sbGVkIHN0YXRlIGtleXMsIG5vbi1yZWFjdGl2ZSB2YWx1ZXMgYW5kIHByb3ZpZGVzIHV0aWxpdHkgbWV0aG9kcyBmb3IgUmVhY3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWFjdFN0b3JlIGV4dGVuZHMgU3RvcmUge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBSZWFjdFN0b3JlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gc3RhdGUgSW5pdGlhbCBzdGF0ZSBvZiB0aGUgc3RvcmUuXG4gICAqIEBwYXJhbSBjb250ZXh0IE5vbi1yZWFjdGl2ZSBjb250ZXh0IHZhbHVlcy5cbiAgICogQHBhcmFtIHNlbGVjdG9ycyBPcHRpb25hbCBzZWxlY3RvcnMgZm9yIHVzZSB3aXRoIGB1c2VTdGF0ZWAuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzdGF0ZSwgY29udGV4dCA9IHt9LCBzZWxlY3RvcnMpIHtcbiAgICBzdXBlcihzdGF0ZSk7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB0aGlzLnNlbGVjdG9ycyA9IHNlbGVjdG9ycztcbiAgfVxuXG4gIC8qKlxuICAgKiBOb24tcmVhY3RpdmUgdmFsdWVzIHN1Y2ggYXMgcmVmcywgY2FsbGJhY2tzLCBldGMuXG4gICAqL1xuXG4gIC8qKlxuICAgKiBTeW5jaHJvbml6ZXMgYSBzaW5nbGUgZXh0ZXJuYWwgdmFsdWUgaW50byB0aGUgc3RvcmUuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgd2hpbGUgdGhlIHZhbHVlIGluIGBzdGF0ZWAgaXMgdXBkYXRlZCBpbW1lZGlhdGVseSwgdGhlIHZhbHVlIHJldHVybmVkXG4gICAqIGJ5IGB1c2VTdGF0ZWAgaXMgdXBkYXRlZCBiZWZvcmUgdGhlIG5leHQgcmVuZGVyIChzaW1pbGFybHkgdG8gUmVhY3QncyBgdXNlU3RhdGVgKS5cbiAgICovXG4gIHVzZVN5bmNlZFZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICBSZWFjdC51c2VEZWJ1Z1ZhbHVlKGtleSk7XG4gICAgdXNlSXNvTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnN0YXRlW2tleV0gIT09IHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0sIFtrZXksIHZhbHVlXSk7XG4gIH1cblxuICAvKipcbiAgICogU3luY2hyb25pemVzIGEgc2luZ2xlIGV4dGVybmFsIHZhbHVlIGludG8gdGhlIHN0b3JlIGFuZFxuICAgKiBjbGVhbnMgaXQgdXAgKHNldHMgdG8gYHVuZGVmaW5lZGApIG9uIHVubW91bnQuXG4gICAqXG4gICAqIE5vdGUgdGhhdCB0aGUgd2hpbGUgdGhlIHZhbHVlIGluIGBzdGF0ZWAgaXMgdXBkYXRlZCBpbW1lZGlhdGVseSwgdGhlIHZhbHVlIHJldHVybmVkXG4gICAqIGJ5IGB1c2VTdGF0ZWAgaXMgdXBkYXRlZCBiZWZvcmUgdGhlIG5leHQgcmVuZGVyIChzaW1pbGFybHkgdG8gUmVhY3QncyBgdXNlU3RhdGVgKS5cbiAgICovXG4gIHVzZVN5bmNlZFZhbHVlV2l0aENsZWFudXAoa2V5LCB2YWx1ZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXRoaXNcbiAgICBjb25zdCBzdG9yZSA9IHRoaXM7XG4gICAgdXNlSXNvTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChzdG9yZS5zdGF0ZVtrZXldICE9PSB2YWx1ZSkge1xuICAgICAgICBzdG9yZS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBzdG9yZS5zZXQoa2V5LCB1bmRlZmluZWQpO1xuICAgICAgfTtcbiAgICB9LCBbc3RvcmUsIGtleSwgdmFsdWVdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTeW5jaHJvbml6ZXMgbXVsdGlwbGUgZXh0ZXJuYWwgdmFsdWVzIGludG8gdGhlIHN0b3JlLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgdGhlIHdoaWxlIHRoZSB2YWx1ZXMgaW4gYHN0YXRlYCBhcmUgdXBkYXRlZCBpbW1lZGlhdGVseSwgdGhlIHZhbHVlcyByZXR1cm5lZFxuICAgKiBieSBgdXNlU3RhdGVgIGFyZSB1cGRhdGVkIGJlZm9yZSB0aGUgbmV4dCByZW5kZXIgKHNpbWlsYXJseSB0byBSZWFjdCdzIGB1c2VTdGF0ZWApLlxuICAgKi9cbiAgdXNlU3luY2VkVmFsdWVzKHN0YXRlUGFydCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXRoaXNcbiAgICBjb25zdCBzdG9yZSA9IHRoaXM7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIC8vIENoZWNrIHRoYXQgYW4gb2JqZWN0IHdpdGggdGhlIHNhbWUgc2hhcGUgaXMgcGFzc2VkIG9uIGV2ZXJ5IHJlbmRlclxuICAgICAgUmVhY3QudXNlRGVidWdWYWx1ZShzdGF0ZVBhcnQsIHAgPT4gT2JqZWN0LmtleXMocCkpO1xuICAgICAgY29uc3Qga2V5cyA9IFJlYWN0LnVzZVJlZihPYmplY3Qua2V5cyhzdGF0ZVBhcnQpKS5jdXJyZW50O1xuICAgICAgY29uc3QgbmV4dEtleXMgPSBPYmplY3Qua2V5cyhzdGF0ZVBhcnQpO1xuICAgICAgaWYgKGtleXMubGVuZ3RoICE9PSBuZXh0S2V5cy5sZW5ndGggfHwga2V5cy5zb21lKChrZXksIGluZGV4KSA9PiBrZXkgIT09IG5leHRLZXlzW2luZGV4XSkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignUmVhY3RTdG9yZS51c2VTeW5jZWRWYWx1ZXMgZXhwZWN0cyB0aGUgc2FtZSBwcm9wIGtleXMgb24gZXZlcnkgcmVuZGVyLiBLZXlzIHNob3VsZCBiZSBzdGFibGUuJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IE9iamVjdC52YWx1ZXMoc3RhdGVQYXJ0KTtcbiAgICB1c2VJc29MYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgc3RvcmUudXBkYXRlKHN0YXRlUGFydCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW3N0b3JlLCAuLi5kZXBlbmRlbmNpZXNdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgYSBjb250cm9sbGFibGUgcHJvcCBwYWlyIChgY29udHJvbGxlZGAsIGBkZWZhdWx0VmFsdWVgKSBmb3IgYSBzcGVjaWZpYyBrZXkuIElmIGBjb250cm9sbGVkYFxuICAgKiBpcyBub24tdW5kZWZpbmVkLCB0aGUgc3RvcmUncyBzdGF0ZSBhdCBga2V5YCBpcyB1cGRhdGVkIHRvIG1hdGNoIGBjb250cm9sbGVkYC5cbiAgICovXG4gIHVzZUNvbnRyb2xsZWRQcm9wKGtleSwgY29udHJvbGxlZCkge1xuICAgIFJlYWN0LnVzZURlYnVnVmFsdWUoa2V5KTtcbiAgICBjb25zdCBpc0NvbnRyb2xsZWQgPSBjb250cm9sbGVkICE9PSB1bmRlZmluZWQ7XG4gICAgdXNlSXNvTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgIGlmIChpc0NvbnRyb2xsZWQgJiYgIU9iamVjdC5pcyh0aGlzLnN0YXRlW2tleV0sIGNvbnRyb2xsZWQpKSB7XG4gICAgICAgIC8vIFNldCB0aGUgaW50ZXJuYWwgc3RhdGUgdG8gbWF0Y2ggdGhlIGNvbnRyb2xsZWQgdmFsdWUuXG4gICAgICAgIHN1cGVyLnNldFN0YXRlKHtcbiAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgIFtrZXldOiBjb250cm9sbGVkXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sIFtrZXksIGNvbnRyb2xsZWQsIGlzQ29udHJvbGxlZF0pO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy5jb250cm9sbGVkVmFsdWVzID8/PSBuZXcgTWFwKCk7XG4gICAgICBpZiAoIWNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICAgIGNhY2hlLnNldChrZXksIGlzQ29udHJvbGxlZCk7XG4gICAgICB9XG4gICAgICBjb25zdCBwcmV2aW91c2x5Q29udHJvbGxlZCA9IGNhY2hlLmdldChrZXkpO1xuICAgICAgaWYgKHByZXZpb3VzbHlDb250cm9sbGVkICE9PSB1bmRlZmluZWQgJiYgcHJldmlvdXNseUNvbnRyb2xsZWQgIT09IGlzQ29udHJvbGxlZCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyB0aGUgJHtpc0NvbnRyb2xsZWQgPyAnJyA6ICd1bid9Y29udHJvbGxlZCBzdGF0ZSBvZiAke2tleS50b1N0cmluZygpfSB0byBiZSAke2lzQ29udHJvbGxlZCA/ICd1bicgOiAnJ31jb250cm9sbGVkLiBFbGVtZW50cyBzaG91bGQgbm90IHN3aXRjaCBmcm9tIHVuY29udHJvbGxlZCB0byBjb250cm9sbGVkIChvciB2aWNlIHZlcnNhKS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKiogR2V0cyB0aGUgY3VycmVudCB2YWx1ZSBmcm9tIHRoZSBzdG9yZSB1c2luZyBhIHNlbGVjdG9yIHdpdGggdGhlIHByb3ZpZGVkIGtleS5cbiAgICpcbiAgICogQHBhcmFtIGtleSBLZXkgb2YgdGhlIHNlbGVjdG9yIHRvIHVzZS5cbiAgICovXG5cbiAgc2VsZWN0KGtleSwgYTEsIGEyLCBhMykge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvcnNba2V5XTtcbiAgICByZXR1cm4gc2VsZWN0b3IodGhpcy5zdGF0ZSwgYTEsIGEyLCBhMyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHZhbHVlIGZyb20gdGhlIHN0b3JlJ3Mgc3RhdGUgdXNpbmcgYSBzZWxlY3RvciBmdW5jdGlvbi5cbiAgICogVXNlZCB0byBzdWJzY3JpYmUgdG8gc3BlY2lmaWMgcGFydHMgb2YgdGhlIHN0YXRlLlxuICAgKiBUaGlzIG1ldGhvZHMgY2F1c2VzIGEgcmVyZW5kZXIgd2hlbmV2ZXIgdGhlIHNlbGVjdGVkIHN0YXRlIGNoYW5nZXMuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgS2V5IG9mIHRoZSBzZWxlY3RvciB0byB1c2UuXG4gICAqL1xuXG4gIHVzZVN0YXRlKGtleSwgYTEsIGEyLCBhMykge1xuICAgIFJlYWN0LnVzZURlYnVnVmFsdWUoa2V5KTtcbiAgICByZXR1cm4gdXNlU3RvcmUodGhpcywgdGhpcy5zZWxlY3RvcnNba2V5XSwgYTEsIGEyLCBhMyk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcHMgYSBmdW5jdGlvbiB3aXRoIGB1c2VTdGFibGVDYWxsYmFja2AgdG8gZW5zdXJlIGl0IGhhcyBhIHN0YWJsZSByZWZlcmVuY2VcbiAgICogYW5kIGFzc2lnbnMgaXQgdG8gdGhlIGNvbnRleHQuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgS2V5IG9mIHRoZSBldmVudCBjYWxsYmFjay4gTXVzdCBiZSBhIGZ1bmN0aW9uIGluIHRoZSBjb250ZXh0LlxuICAgKiBAcGFyYW0gZm4gRnVuY3Rpb24gdG8gYXNzaWduLlxuICAgKi9cbiAgdXNlQ29udGV4dENhbGxiYWNrKGtleSwgZm4pIHtcbiAgICBSZWFjdC51c2VEZWJ1Z1ZhbHVlKGtleSk7XG4gICAgY29uc3Qgc3RhYmxlRnVuY3Rpb24gPSB1c2VTdGFibGVDYWxsYmFjayhmbiA/PyBOT09QKTtcbiAgICB0aGlzLmNvbnRleHRba2V5XSA9IHN0YWJsZUZ1bmN0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdGFibGUgc2V0dGVyIGZ1bmN0aW9uIGZvciBhIHNwZWNpZmljIGtleSBpbiB0aGUgc3RvcmUncyBzdGF0ZS5cbiAgICogSXQncyBjb21tb25seSB1c2VkIHRvIHBhc3MgYXMgYSByZWYgY2FsbGJhY2sgdG8gUmVhY3QgZWxlbWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgS2V5IG9mIHRoZSBzdGF0ZSB0byBzZXQuXG4gICAqL1xuICB1c2VTdGF0ZVNldHRlcihrZXkpIHtcbiAgICBjb25zdCByZWYgPSBSZWFjdC51c2VSZWYodW5kZWZpbmVkKTtcbiAgICBpZiAocmVmLmN1cnJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVmLmN1cnJlbnQgPSB2YWx1ZSA9PiB7XG4gICAgICAgIHRoaXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlZi5jdXJyZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIE9ic2VydmVzIGNoYW5nZXMgZGVyaXZlZCBmcm9tIHRoZSBzdG9yZSdzIHNlbGVjdG9ycyBhbmQgY2FsbHMgdGhlIGxpc3RlbmVyIHdoZW4gdGhlIHNlbGVjdGVkIHZhbHVlIGNoYW5nZXMuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgS2V5IG9mIHRoZSBzZWxlY3RvciB0byBvYnNlcnZlLlxuICAgKiBAcGFyYW0gbGlzdGVuZXIgTGlzdGVuZXIgZnVuY3Rpb24gY2FsbGVkIHdoZW4gdGhlIHNlbGVjdG9yIHJlc3VsdCBjaGFuZ2VzLlxuICAgKi9cblxuICBvYnNlcnZlKHNlbGVjdG9yLCBsaXN0ZW5lcikge1xuICAgIGxldCBzZWxlY3RGbjtcbiAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzZWxlY3RGbiA9IHNlbGVjdG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZWxlY3RGbiA9IHRoaXMuc2VsZWN0b3JzW3NlbGVjdG9yXTtcbiAgICB9XG4gICAgbGV0IHByZXZWYWx1ZSA9IHNlbGVjdEZuKHRoaXMuc3RhdGUpO1xuICAgIGxpc3RlbmVyKHByZXZWYWx1ZSwgcHJldlZhbHVlLCB0aGlzKTtcbiAgICByZXR1cm4gdGhpcy5zdWJzY3JpYmUobmV4dFN0YXRlID0+IHtcbiAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IHNlbGVjdEZuKG5leHRTdGF0ZSk7XG4gICAgICBpZiAoIU9iamVjdC5pcyhwcmV2VmFsdWUsIG5leHRWYWx1ZSkpIHtcbiAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSBwcmV2VmFsdWU7XG4gICAgICAgIHByZXZWYWx1ZSA9IG5leHRWYWx1ZTtcbiAgICAgICAgbGlzdGVuZXIobmV4dFZhbHVlLCBvbGRWYWx1ZSwgdGhpcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0iXSwibmFtZXMiOlsiUmVhY3QiLCJTdG9yZSIsInVzZVN0b3JlIiwidXNlU3RhYmxlQ2FsbGJhY2siLCJ1c2VJc29MYXlvdXRFZmZlY3QiLCJOT09QIiwiUmVhY3RTdG9yZSIsInVzZVN5bmNlZFZhbHVlIiwia2V5IiwidmFsdWUiLCJ1c2VEZWJ1Z1ZhbHVlIiwic3RhdGUiLCJzZXQiLCJ1c2VTeW5jZWRWYWx1ZVdpdGhDbGVhbnVwIiwic3RvcmUiLCJ1bmRlZmluZWQiLCJ1c2VTeW5jZWRWYWx1ZXMiLCJzdGF0ZVBhcnQiLCJwcm9jZXNzIiwicCIsIk9iamVjdCIsImtleXMiLCJ1c2VSZWYiLCJjdXJyZW50IiwibmV4dEtleXMiLCJsZW5ndGgiLCJzb21lIiwiaW5kZXgiLCJjb25zb2xlIiwiZXJyb3IiLCJkZXBlbmRlbmNpZXMiLCJ2YWx1ZXMiLCJ1cGRhdGUiLCJ1c2VDb250cm9sbGVkUHJvcCIsImNvbnRyb2xsZWQiLCJpc0NvbnRyb2xsZWQiLCJpcyIsInNldFN0YXRlIiwiY2FjaGUiLCJjb250cm9sbGVkVmFsdWVzIiwiTWFwIiwiaGFzIiwicHJldmlvdXNseUNvbnRyb2xsZWQiLCJnZXQiLCJ0b1N0cmluZyIsInNlbGVjdCIsImExIiwiYTIiLCJhMyIsInNlbGVjdG9yIiwic2VsZWN0b3JzIiwidXNlU3RhdGUiLCJ1c2VDb250ZXh0Q2FsbGJhY2siLCJmbiIsInN0YWJsZUZ1bmN0aW9uIiwiY29udGV4dCIsInVzZVN0YXRlU2V0dGVyIiwicmVmIiwib2JzZXJ2ZSIsImxpc3RlbmVyIiwic2VsZWN0Rm4iLCJwcmV2VmFsdWUiLCJzdWJzY3JpYmUiLCJuZXh0U3RhdGUiLCJuZXh0VmFsdWUiLCJvbGRWYWx1ZSJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/ReactStore.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/Store.js":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/store/Store.js ***!
|
||
\********************************************************/
|
||
/***/ ((__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 */ Store: () => (/* binding */ Store)\n/* harmony export */ });\n/* harmony import */ var _useStore_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./useStore.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/useStore.js\");\n\n/**\n * A data store implementation that allows subscribing to state changes and updating the state.\n * It uses an observer pattern to notify subscribers when the state changes.\n */\nclass Store {\n /**\n * The current state of the store.\n * This property is updated immediately when the state changes as a result of calling {@link setState}, {@link update}, or {@link set}.\n * To subscribe to state changes, use the {@link useState} method. The value returned by {@link useState} is updated after the component renders (similarly to React's useState).\n * The values can be used directly (to avoid subscribing to the store) in effects or event handlers.\n *\n * Do not modify properties in state directly. Instead, use the provided methods to ensure proper state management and listener notification.\n */\n\n // Internal state to handle recursive `setState()` calls\n\n constructor(state) {\n this.state = state;\n this.listeners = new Set();\n this.updateTick = 0;\n }\n\n /**\n * Registers a listener that will be called whenever the store's state changes.\n *\n * @param fn The listener function to be called on state changes.\n * @returns A function to unsubscribe the listener.\n */\n subscribe = fn => {\n this.listeners.add(fn);\n return () => {\n this.listeners.delete(fn);\n };\n };\n\n /**\n * Returns the current state of the store.\n */\n getSnapshot = () => {\n return this.state;\n };\n\n /**\n * Updates the entire store's state and notifies all registered listeners.\n *\n * @param newState The new state to set for the store.\n */\n setState(newState) {\n if (this.state === newState) {\n return;\n }\n this.state = newState;\n this.updateTick += 1;\n const currentTick = this.updateTick;\n for (const listener of this.listeners) {\n if (currentTick !== this.updateTick) {\n // If the tick has changed, a recursive `setState` call has been made,\n // and it has already notified all listeners.\n return;\n }\n listener(newState);\n }\n }\n\n /**\n * Merges the provided changes into the current state and notifies listeners if there are changes.\n *\n * @param changes An object containing the changes to apply to the current state.\n */\n update(changes) {\n for (const key in changes) {\n if (!Object.is(this.state[key], changes[key])) {\n this.setState({\n ...this.state,\n ...changes\n });\n return;\n }\n }\n }\n\n /**\n * Sets a specific key in the store's state to a new value and notifies listeners if the value has changed.\n *\n * @param key The key in the store's state to update.\n * @param value The new value to set for the specified key.\n */\n set(key, value) {\n if (!Object.is(this.state[key], value)) {\n this.setState({\n ...this.state,\n [key]: value\n });\n }\n }\n\n /**\n * Gives the state a new reference and updates all registered listeners.\n */\n notifyAll() {\n const newState = {\n ...this.state\n };\n this.setState(newState);\n }\n use(selector, a1, a2, a3) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return (0,_useStore_js__WEBPACK_IMPORTED_MODULE_0__.useStore)(this, selector, a1, a2, a3);\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vc3RvcmUvU3RvcmUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSx5RkFBeUYsZUFBZSxHQUFHLGFBQWEsTUFBTSxVQUFVO0FBQ3hJLDZDQUE2QyxnQkFBZ0IsK0JBQStCLGdCQUFnQjtBQUM1RztBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHNEQUFRO0FBQ25CO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvdXRpbHMvZXNtL3N0b3JlL1N0b3JlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZVN0b3JlIH0gZnJvbSBcIi4vdXNlU3RvcmUuanNcIjtcbi8qKlxuICogQSBkYXRhIHN0b3JlIGltcGxlbWVudGF0aW9uIHRoYXQgYWxsb3dzIHN1YnNjcmliaW5nIHRvIHN0YXRlIGNoYW5nZXMgYW5kIHVwZGF0aW5nIHRoZSBzdGF0ZS5cbiAqIEl0IHVzZXMgYW4gb2JzZXJ2ZXIgcGF0dGVybiB0byBub3RpZnkgc3Vic2NyaWJlcnMgd2hlbiB0aGUgc3RhdGUgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFN0b3JlIHtcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzdG9yZS5cbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1cGRhdGVkIGltbWVkaWF0ZWx5IHdoZW4gdGhlIHN0YXRlIGNoYW5nZXMgYXMgYSByZXN1bHQgb2YgY2FsbGluZyB7QGxpbmsgc2V0U3RhdGV9LCB7QGxpbmsgdXBkYXRlfSwgb3Ige0BsaW5rIHNldH0uXG4gICAqIFRvIHN1YnNjcmliZSB0byBzdGF0ZSBjaGFuZ2VzLCB1c2UgdGhlIHtAbGluayB1c2VTdGF0ZX0gbWV0aG9kLiBUaGUgdmFsdWUgcmV0dXJuZWQgYnkge0BsaW5rIHVzZVN0YXRlfSBpcyB1cGRhdGVkIGFmdGVyIHRoZSBjb21wb25lbnQgcmVuZGVycyAoc2ltaWxhcmx5IHRvIFJlYWN0J3MgdXNlU3RhdGUpLlxuICAgKiBUaGUgdmFsdWVzIGNhbiBiZSB1c2VkIGRpcmVjdGx5ICh0byBhdm9pZCBzdWJzY3JpYmluZyB0byB0aGUgc3RvcmUpIGluIGVmZmVjdHMgb3IgZXZlbnQgaGFuZGxlcnMuXG4gICAqXG4gICAqIERvIG5vdCBtb2RpZnkgcHJvcGVydGllcyBpbiBzdGF0ZSBkaXJlY3RseS4gSW5zdGVhZCwgdXNlIHRoZSBwcm92aWRlZCBtZXRob2RzIHRvIGVuc3VyZSBwcm9wZXIgc3RhdGUgbWFuYWdlbWVudCBhbmQgbGlzdGVuZXIgbm90aWZpY2F0aW9uLlxuICAgKi9cblxuICAvLyBJbnRlcm5hbCBzdGF0ZSB0byBoYW5kbGUgcmVjdXJzaXZlIGBzZXRTdGF0ZSgpYCBjYWxsc1xuXG4gIGNvbnN0cnVjdG9yKHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgIHRoaXMubGlzdGVuZXJzID0gbmV3IFNldCgpO1xuICAgIHRoaXMudXBkYXRlVGljayA9IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGEgbGlzdGVuZXIgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciB0aGUgc3RvcmUncyBzdGF0ZSBjaGFuZ2VzLlxuICAgKlxuICAgKiBAcGFyYW0gZm4gVGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCBvbiBzdGF0ZSBjaGFuZ2VzLlxuICAgKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRvIHVuc3Vic2NyaWJlIHRoZSBsaXN0ZW5lci5cbiAgICovXG4gIHN1YnNjcmliZSA9IGZuID0+IHtcbiAgICB0aGlzLmxpc3RlbmVycy5hZGQoZm4pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB0aGlzLmxpc3RlbmVycy5kZWxldGUoZm4pO1xuICAgIH07XG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHN0b3JlLlxuICAgKi9cbiAgZ2V0U25hcHNob3QgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGU7XG4gIH07XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgdGhlIGVudGlyZSBzdG9yZSdzIHN0YXRlIGFuZCBub3RpZmllcyBhbGwgcmVnaXN0ZXJlZCBsaXN0ZW5lcnMuXG4gICAqXG4gICAqIEBwYXJhbSBuZXdTdGF0ZSBUaGUgbmV3IHN0YXRlIHRvIHNldCBmb3IgdGhlIHN0b3JlLlxuICAgKi9cbiAgc2V0U3RhdGUobmV3U3RhdGUpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gbmV3U3RhdGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xuICAgIHRoaXMudXBkYXRlVGljayArPSAxO1xuICAgIGNvbnN0IGN1cnJlbnRUaWNrID0gdGhpcy51cGRhdGVUaWNrO1xuICAgIGZvciAoY29uc3QgbGlzdGVuZXIgb2YgdGhpcy5saXN0ZW5lcnMpIHtcbiAgICAgIGlmIChjdXJyZW50VGljayAhPT0gdGhpcy51cGRhdGVUaWNrKSB7XG4gICAgICAgIC8vIElmIHRoZSB0aWNrIGhhcyBjaGFuZ2VkLCBhIHJlY3Vyc2l2ZSBgc2V0U3RhdGVgIGNhbGwgaGFzIGJlZW4gbWFkZSxcbiAgICAgICAgLy8gYW5kIGl0IGhhcyBhbHJlYWR5IG5vdGlmaWVkIGFsbCBsaXN0ZW5lcnMuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGxpc3RlbmVyKG5ld1N0YXRlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTWVyZ2VzIHRoZSBwcm92aWRlZCBjaGFuZ2VzIGludG8gdGhlIGN1cnJlbnQgc3RhdGUgYW5kIG5vdGlmaWVzIGxpc3RlbmVycyBpZiB0aGVyZSBhcmUgY2hhbmdlcy5cbiAgICpcbiAgICogQHBhcmFtIGNoYW5nZXMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGNoYW5nZXMgdG8gYXBwbHkgdG8gdGhlIGN1cnJlbnQgc3RhdGUuXG4gICAqL1xuICB1cGRhdGUoY2hhbmdlcykge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGNoYW5nZXMpIHtcbiAgICAgIGlmICghT2JqZWN0LmlzKHRoaXMuc3RhdGVba2V5XSwgY2hhbmdlc1trZXldKSkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICAgIC4uLmNoYW5nZXNcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBhIHNwZWNpZmljIGtleSBpbiB0aGUgc3RvcmUncyBzdGF0ZSB0byBhIG5ldyB2YWx1ZSBhbmQgbm90aWZpZXMgbGlzdGVuZXJzIGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIGtleSBUaGUga2V5IGluIHRoZSBzdG9yZSdzIHN0YXRlIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgdG8gc2V0IGZvciB0aGUgc3BlY2lmaWVkIGtleS5cbiAgICovXG4gIHNldChrZXksIHZhbHVlKSB7XG4gICAgaWYgKCFPYmplY3QuaXModGhpcy5zdGF0ZVtrZXldLCB2YWx1ZSkpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICAuLi50aGlzLnN0YXRlLFxuICAgICAgICBba2V5XTogdmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHaXZlcyB0aGUgc3RhdGUgYSBuZXcgcmVmZXJlbmNlIGFuZCB1cGRhdGVzIGFsbCByZWdpc3RlcmVkIGxpc3RlbmVycy5cbiAgICovXG4gIG5vdGlmeUFsbCgpIHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIC4uLnRoaXMuc3RhdGVcbiAgICB9O1xuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpO1xuICB9XG4gIHVzZShzZWxlY3RvciwgYTEsIGEyLCBhMykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIHJldHVybiB1c2VTdG9yZSh0aGlzLCBzZWxlY3RvciwgYTEsIGEyLCBhMyk7XG4gIH1cbn0iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/Store.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/createSelector.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/store/createSelector.js ***!
|
||
\*****************************************************************/
|
||
/***/ ((__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 */ createSelector: () => (/* binding */ createSelector)\n/* harmony export */ });\n\n/**\n * The NoOptionalParams type is a utility type that checks if a function has optional or default parameters.\n * If the function has optional or default parameters, it returns a string literal type with an error message.\n * Otherwise, it returns the original function type.\n *\n * This is used to enforce that the combiner function passed to createSelector does not have optional or default parameters,\n * as memoization relies on the Function.length property, which does not account for optional or default parameters.\n */\n\n/**\n * Creates a selector function that can be used to derive values from the store's state.\n *\n * The combiner function can have up to three additional parameters, but it **cannot have optional or default parameters**.\n *\n * This function accepts up to six functions and combines them into a single selector function.\n * The resulting selector will take the state from the combined selectors and any additional parameters required by the combiner.\n *\n * The return type of the resulting selector is determined by the return type of the combiner function.\n *\n * @example\n * const selector = createSelector(\n * (state) => state.disabled\n * );\n *\n * @example\n * const selector = createSelector(\n * (state) => state.disabled,\n * (state) => state.open,\n * (disabled, open) => ({ disabled, open })\n * );\n */\n/* eslint-disable id-denylist */\nconst createSelector = (a, b, c, d, e, f, ...other) => {\n if (other.length > 0) {\n throw new Error( true ? 'Unsupported number of selectors' : 0);\n }\n let selector;\n if (a && b && c && d && e && f) {\n selector = (state, a1, a2, a3) => {\n const va = a(state, a1, a2, a3);\n const vb = b(state, a1, a2, a3);\n const vc = c(state, a1, a2, a3);\n const vd = d(state, a1, a2, a3);\n const ve = e(state, a1, a2, a3);\n return f(va, vb, vc, vd, ve, a1, a2, a3);\n };\n } else if (a && b && c && d && e) {\n selector = (state, a1, a2, a3) => {\n const va = a(state, a1, a2, a3);\n const vb = b(state, a1, a2, a3);\n const vc = c(state, a1, a2, a3);\n const vd = d(state, a1, a2, a3);\n return e(va, vb, vc, vd, a1, a2, a3);\n };\n } else if (a && b && c && d) {\n selector = (state, a1, a2, a3) => {\n const va = a(state, a1, a2, a3);\n const vb = b(state, a1, a2, a3);\n const vc = c(state, a1, a2, a3);\n return d(va, vb, vc, a1, a2, a3);\n };\n } else if (a && b && c) {\n selector = (state, a1, a2, a3) => {\n const va = a(state, a1, a2, a3);\n const vb = b(state, a1, a2, a3);\n return c(va, vb, a1, a2, a3);\n };\n } else if (a && b) {\n selector = (state, a1, a2, a3) => {\n const va = a(state, a1, a2, a3);\n return b(va, a1, a2, a3);\n };\n } else if (a) {\n selector = a;\n } else {\n throw /* minify-error-disabled */new Error('Missing arguments');\n }\n return selector;\n};\n/* eslint-enable id-denylist *///# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vc3RvcmUvY3JlYXRlU2VsZWN0b3IuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUEyRDtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLGdCQUFnQjtBQUM1QztBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0Esb0JBQW9CLEtBQXFDLHVDQUF1QyxDQUFzQjtBQUN0SDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvdXRpbHMvZXNtL3N0b3JlL2NyZWF0ZVNlbGVjdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfZm9ybWF0RXJyb3JNZXNzYWdlIGZyb20gXCIuLi9mb3JtYXRFcnJvck1lc3NhZ2UuanNcIjtcbi8qKlxuICogVGhlIE5vT3B0aW9uYWxQYXJhbXMgdHlwZSBpcyBhIHV0aWxpdHkgdHlwZSB0aGF0IGNoZWNrcyBpZiBhIGZ1bmN0aW9uIGhhcyBvcHRpb25hbCBvciBkZWZhdWx0IHBhcmFtZXRlcnMuXG4gKiBJZiB0aGUgZnVuY3Rpb24gaGFzIG9wdGlvbmFsIG9yIGRlZmF1bHQgcGFyYW1ldGVycywgaXQgcmV0dXJucyBhIHN0cmluZyBsaXRlcmFsIHR5cGUgd2l0aCBhbiBlcnJvciBtZXNzYWdlLlxuICogT3RoZXJ3aXNlLCBpdCByZXR1cm5zIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiB0eXBlLlxuICpcbiAqIFRoaXMgaXMgdXNlZCB0byBlbmZvcmNlIHRoYXQgdGhlIGNvbWJpbmVyIGZ1bmN0aW9uIHBhc3NlZCB0byBjcmVhdGVTZWxlY3RvciBkb2VzIG5vdCBoYXZlIG9wdGlvbmFsIG9yIGRlZmF1bHQgcGFyYW1ldGVycyxcbiAqIGFzIG1lbW9pemF0aW9uIHJlbGllcyBvbiB0aGUgRnVuY3Rpb24ubGVuZ3RoIHByb3BlcnR5LCB3aGljaCBkb2VzIG5vdCBhY2NvdW50IGZvciBvcHRpb25hbCBvciBkZWZhdWx0IHBhcmFtZXRlcnMuXG4gKi9cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2VsZWN0b3IgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBkZXJpdmUgdmFsdWVzIGZyb20gdGhlIHN0b3JlJ3Mgc3RhdGUuXG4gKlxuICogVGhlIGNvbWJpbmVyIGZ1bmN0aW9uIGNhbiBoYXZlIHVwIHRvIHRocmVlIGFkZGl0aW9uYWwgcGFyYW1ldGVycywgYnV0IGl0ICoqY2Fubm90IGhhdmUgb3B0aW9uYWwgb3IgZGVmYXVsdCBwYXJhbWV0ZXJzKiouXG4gKlxuICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIHVwIHRvIHNpeCBmdW5jdGlvbnMgYW5kIGNvbWJpbmVzIHRoZW0gaW50byBhIHNpbmdsZSBzZWxlY3RvciBmdW5jdGlvbi5cbiAqIFRoZSByZXN1bHRpbmcgc2VsZWN0b3Igd2lsbCB0YWtlIHRoZSBzdGF0ZSBmcm9tIHRoZSBjb21iaW5lZCBzZWxlY3RvcnMgYW5kIGFueSBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgcmVxdWlyZWQgYnkgdGhlIGNvbWJpbmVyLlxuICpcbiAqIFRoZSByZXR1cm4gdHlwZSBvZiB0aGUgcmVzdWx0aW5nIHNlbGVjdG9yIGlzIGRldGVybWluZWQgYnkgdGhlIHJldHVybiB0eXBlIG9mIHRoZSBjb21iaW5lciBmdW5jdGlvbi5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2VsZWN0b3IgPSBjcmVhdGVTZWxlY3RvcihcbiAqICAoc3RhdGUpID0+IHN0YXRlLmRpc2FibGVkXG4gKiApO1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICogICAoc3RhdGUpID0+IHN0YXRlLmRpc2FibGVkLFxuICogICAoc3RhdGUpID0+IHN0YXRlLm9wZW4sXG4gKiAgIChkaXNhYmxlZCwgb3BlbikgPT4gKHsgZGlzYWJsZWQsIG9wZW4gfSlcbiAqICk7XG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIGlkLWRlbnlsaXN0ICovXG5leHBvcnQgY29uc3QgY3JlYXRlU2VsZWN0b3IgPSAoYSwgYiwgYywgZCwgZSwgZiwgLi4ub3RoZXIpID0+IHtcbiAgaWYgKG90aGVyLmxlbmd0aCA+IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gJ1Vuc3VwcG9ydGVkIG51bWJlciBvZiBzZWxlY3RvcnMnIDogX2Zvcm1hdEVycm9yTWVzc2FnZSgxKSk7XG4gIH1cbiAgbGV0IHNlbGVjdG9yO1xuICBpZiAoYSAmJiBiICYmIGMgJiYgZCAmJiBlICYmIGYpIHtcbiAgICBzZWxlY3RvciA9IChzdGF0ZSwgYTEsIGEyLCBhMykgPT4ge1xuICAgICAgY29uc3QgdmEgPSBhKHN0YXRlLCBhMSwgYTIsIGEzKTtcbiAgICAgIGNvbnN0IHZiID0gYihzdGF0ZSwgYTEsIGEyLCBhMyk7XG4gICAgICBjb25zdCB2YyA9IGMoc3RhdGUsIGExLCBhMiwgYTMpO1xuICAgICAgY29uc3QgdmQgPSBkKHN0YXRlLCBhMSwgYTIsIGEzKTtcbiAgICAgIGNvbnN0IHZlID0gZShzdGF0ZSwgYTEsIGEyLCBhMyk7XG4gICAgICByZXR1cm4gZih2YSwgdmIsIHZjLCB2ZCwgdmUsIGExLCBhMiwgYTMpO1xuICAgIH07XG4gIH0gZWxzZSBpZiAoYSAmJiBiICYmIGMgJiYgZCAmJiBlKSB7XG4gICAgc2VsZWN0b3IgPSAoc3RhdGUsIGExLCBhMiwgYTMpID0+IHtcbiAgICAgIGNvbnN0IHZhID0gYShzdGF0ZSwgYTEsIGEyLCBhMyk7XG4gICAgICBjb25zdCB2YiA9IGIoc3RhdGUsIGExLCBhMiwgYTMpO1xuICAgICAgY29uc3QgdmMgPSBjKHN0YXRlLCBhMSwgYTIsIGEzKTtcbiAgICAgIGNvbnN0IHZkID0gZChzdGF0ZSwgYTEsIGEyLCBhMyk7XG4gICAgICByZXR1cm4gZSh2YSwgdmIsIHZjLCB2ZCwgYTEsIGEyLCBhMyk7XG4gICAgfTtcbiAgfSBlbHNlIGlmIChhICYmIGIgJiYgYyAmJiBkKSB7XG4gICAgc2VsZWN0b3IgPSAoc3RhdGUsIGExLCBhMiwgYTMpID0+IHtcbiAgICAgIGNvbnN0IHZhID0gYShzdGF0ZSwgYTEsIGEyLCBhMyk7XG4gICAgICBjb25zdCB2YiA9IGIoc3RhdGUsIGExLCBhMiwgYTMpO1xuICAgICAgY29uc3QgdmMgPSBjKHN0YXRlLCBhMSwgYTIsIGEzKTtcbiAgICAgIHJldHVybiBkKHZhLCB2YiwgdmMsIGExLCBhMiwgYTMpO1xuICAgIH07XG4gIH0gZWxzZSBpZiAoYSAmJiBiICYmIGMpIHtcbiAgICBzZWxlY3RvciA9IChzdGF0ZSwgYTEsIGEyLCBhMykgPT4ge1xuICAgICAgY29uc3QgdmEgPSBhKHN0YXRlLCBhMSwgYTIsIGEzKTtcbiAgICAgIGNvbnN0IHZiID0gYihzdGF0ZSwgYTEsIGEyLCBhMyk7XG4gICAgICByZXR1cm4gYyh2YSwgdmIsIGExLCBhMiwgYTMpO1xuICAgIH07XG4gIH0gZWxzZSBpZiAoYSAmJiBiKSB7XG4gICAgc2VsZWN0b3IgPSAoc3RhdGUsIGExLCBhMiwgYTMpID0+IHtcbiAgICAgIGNvbnN0IHZhID0gYShzdGF0ZSwgYTEsIGEyLCBhMyk7XG4gICAgICByZXR1cm4gYih2YSwgYTEsIGEyLCBhMyk7XG4gICAgfTtcbiAgfSBlbHNlIGlmIChhKSB7XG4gICAgc2VsZWN0b3IgPSBhO1xuICB9IGVsc2Uge1xuICAgIHRocm93IC8qIG1pbmlmeS1lcnJvci1kaXNhYmxlZCAqL25ldyBFcnJvcignTWlzc2luZyBhcmd1bWVudHMnKTtcbiAgfVxuICByZXR1cm4gc2VsZWN0b3I7XG59O1xuLyogZXNsaW50LWVuYWJsZSBpZC1kZW55bGlzdCAqLyJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/createSelector.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/useStore.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/store/useStore.js ***!
|
||
\***********************************************************/
|
||
/***/ ((__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 */ useStore: () => (/* binding */ useStore)\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 use_sync_external_store_shim__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! use-sync-external-store/shim */ \"(app-pages-browser)/./node_modules/use-sync-external-store/shim/index.js\");\n/* harmony import */ var use_sync_external_store_shim_with_selector__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! use-sync-external-store/shim/with-selector */ \"(app-pages-browser)/./node_modules/use-sync-external-store/shim/with-selector.js\");\n/* harmony import */ var _reactVersion_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../reactVersion.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/reactVersion.js\");\n/* harmony import */ var _fastHooks_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../fastHooks.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/fastHooks.js\");\n\n/* We need to import the shim because React 17 does not support the `useSyncExternalStore` API.\n * More info: https://github.com/mui/mui-x/issues/18303#issuecomment-2958392341 */\n\n\n\n\n/* Some tests fail in R18 with the raw useSyncExternalStore. It may be possible to make it work\n * but for now we only enable it for R19+. */\nconst canUseRawUseSyncExternalStore = (0,_reactVersion_js__WEBPACK_IMPORTED_MODULE_3__.isReactVersionAtLeast)(19);\nconst useStoreImplementation = canUseRawUseSyncExternalStore ? useStoreFast : useStoreLegacy;\nfunction useStore(store, selector, a1, a2, a3) {\n return useStoreImplementation(store, selector, a1, a2, a3);\n}\nfunction useStoreR19(store, selector, a1, a2, a3) {\n const getSelection = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => selector(store.getSnapshot(), a1, a2, a3), [store, selector, a1, a2, a3]);\n return (0,use_sync_external_store_shim__WEBPACK_IMPORTED_MODULE_1__.useSyncExternalStore)(store.subscribe, getSelection, getSelection);\n}\n(0,_fastHooks_js__WEBPACK_IMPORTED_MODULE_4__.register)({\n before(instance) {\n instance.syncIndex = 0;\n if (!instance.didInitialize) {\n instance.syncTick = 1;\n instance.syncHooks = [];\n instance.didChangeStore = true;\n instance.getSnapshot = () => {\n let didChange = false;\n for (let i = 0; i < instance.syncHooks.length; i += 1) {\n const hook = instance.syncHooks[i];\n const value = hook.selector(hook.store.state, hook.a1, hook.a2, hook.a3);\n if (hook.didChange || !Object.is(hook.value, value)) {\n didChange = true;\n hook.value = value;\n hook.didChange = false;\n }\n }\n if (didChange) {\n instance.syncTick += 1;\n }\n return instance.syncTick;\n };\n }\n },\n after(instance) {\n if (instance.syncHooks.length > 0) {\n if (instance.didChangeStore) {\n instance.didChangeStore = false;\n instance.subscribe = onStoreChange => {\n const stores = new Set();\n for (const hook of instance.syncHooks) {\n stores.add(hook.store);\n }\n const unsubscribes = [];\n for (const store of stores) {\n unsubscribes.push(store.subscribe(onStoreChange));\n }\n return () => {\n for (const unsubscribe of unsubscribes) {\n unsubscribe();\n }\n };\n };\n }\n // eslint-disable-next-line react-hooks/rules-of-hooks\n (0,use_sync_external_store_shim__WEBPACK_IMPORTED_MODULE_1__.useSyncExternalStore)(instance.subscribe, instance.getSnapshot, instance.getSnapshot);\n }\n }\n});\nfunction useStoreFast(store, selector, a1, a2, a3) {\n const instance = (0,_fastHooks_js__WEBPACK_IMPORTED_MODULE_4__.getInstance)();\n if (!instance) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useStoreR19(store, selector, a1, a2, a3);\n }\n const index = instance.syncIndex;\n instance.syncIndex += 1;\n let hook;\n if (!instance.didInitialize) {\n hook = {\n store,\n selector,\n a1,\n a2,\n a3,\n value: selector(store.getSnapshot(), a1, a2, a3),\n didChange: false\n };\n instance.syncHooks.push(hook);\n } else {\n hook = instance.syncHooks[index];\n if (hook.store !== store || hook.selector !== selector || !Object.is(hook.a1, a1) || !Object.is(hook.a2, a2) || !Object.is(hook.a3, a3)) {\n if (hook.store !== store) {\n instance.didChangeStore = true;\n }\n hook.store = store;\n hook.selector = selector;\n hook.a1 = a1;\n hook.a2 = a2;\n hook.a3 = a3;\n hook.didChange = true;\n }\n }\n return hook.value;\n}\nfunction useStoreLegacy(store, selector, a1, a2, a3) {\n return (0,use_sync_external_store_shim_with_selector__WEBPACK_IMPORTED_MODULE_2__.useSyncExternalStoreWithSelector)(store.subscribe, store.getSnapshot, store.getSnapshot, state => selector(state, a1, a2, a3));\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vc3RvcmUvdXNlU3RvcmUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQStCO0FBQy9CO0FBQ0E7QUFDb0U7QUFDMEI7QUFDbkM7QUFDSDtBQUN4RDtBQUNBO0FBQ0Esc0NBQXNDLHVFQUFxQjtBQUMzRDtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLDhDQUFpQjtBQUN4QyxTQUFTLGtGQUFvQjtBQUM3QjtBQUNBLHVEQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QiwrQkFBK0I7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNLGtGQUFvQjtBQUMxQjtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsbUJBQW1CLDBEQUFXO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVMsNEdBQWdDO0FBQ3pDIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3V0aWxzL2VzbS9zdG9yZS91c2VTdG9yZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG4vKiBXZSBuZWVkIHRvIGltcG9ydCB0aGUgc2hpbSBiZWNhdXNlIFJlYWN0IDE3IGRvZXMgbm90IHN1cHBvcnQgdGhlIGB1c2VTeW5jRXh0ZXJuYWxTdG9yZWAgQVBJLlxuICogTW9yZSBpbmZvOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL211aS14L2lzc3Vlcy8xODMwMyNpc3N1ZWNvbW1lbnQtMjk1ODM5MjM0MSAqL1xuaW1wb3J0IHsgdXNlU3luY0V4dGVybmFsU3RvcmUgfSBmcm9tICd1c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltJztcbmltcG9ydCB7IHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yIH0gZnJvbSAndXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS93aXRoLXNlbGVjdG9yJztcbmltcG9ydCB7IGlzUmVhY3RWZXJzaW9uQXRMZWFzdCB9IGZyb20gXCIuLi9yZWFjdFZlcnNpb24uanNcIjtcbmltcG9ydCB7IHJlZ2lzdGVyLCBnZXRJbnN0YW5jZSB9IGZyb20gXCIuLi9mYXN0SG9va3MuanNcIjtcbi8qIFNvbWUgdGVzdHMgZmFpbCBpbiBSMTggd2l0aCB0aGUgcmF3IHVzZVN5bmNFeHRlcm5hbFN0b3JlLiBJdCBtYXkgYmUgcG9zc2libGUgdG8gbWFrZSBpdCB3b3JrXG4gKiBidXQgZm9yIG5vdyB3ZSBvbmx5IGVuYWJsZSBpdCBmb3IgUjE5Ky4gKi9cbmNvbnN0IGNhblVzZVJhd1VzZVN5bmNFeHRlcm5hbFN0b3JlID0gaXNSZWFjdFZlcnNpb25BdExlYXN0KDE5KTtcbmNvbnN0IHVzZVN0b3JlSW1wbGVtZW50YXRpb24gPSBjYW5Vc2VSYXdVc2VTeW5jRXh0ZXJuYWxTdG9yZSA/IHVzZVN0b3JlRmFzdCA6IHVzZVN0b3JlTGVnYWN5O1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVN0b3JlKHN0b3JlLCBzZWxlY3RvciwgYTEsIGEyLCBhMykge1xuICByZXR1cm4gdXNlU3RvcmVJbXBsZW1lbnRhdGlvbihzdG9yZSwgc2VsZWN0b3IsIGExLCBhMiwgYTMpO1xufVxuZnVuY3Rpb24gdXNlU3RvcmVSMTkoc3RvcmUsIHNlbGVjdG9yLCBhMSwgYTIsIGEzKSB7XG4gIGNvbnN0IGdldFNlbGVjdGlvbiA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHNlbGVjdG9yKHN0b3JlLmdldFNuYXBzaG90KCksIGExLCBhMiwgYTMpLCBbc3RvcmUsIHNlbGVjdG9yLCBhMSwgYTIsIGEzXSk7XG4gIHJldHVybiB1c2VTeW5jRXh0ZXJuYWxTdG9yZShzdG9yZS5zdWJzY3JpYmUsIGdldFNlbGVjdGlvbiwgZ2V0U2VsZWN0aW9uKTtcbn1cbnJlZ2lzdGVyKHtcbiAgYmVmb3JlKGluc3RhbmNlKSB7XG4gICAgaW5zdGFuY2Uuc3luY0luZGV4ID0gMDtcbiAgICBpZiAoIWluc3RhbmNlLmRpZEluaXRpYWxpemUpIHtcbiAgICAgIGluc3RhbmNlLnN5bmNUaWNrID0gMTtcbiAgICAgIGluc3RhbmNlLnN5bmNIb29rcyA9IFtdO1xuICAgICAgaW5zdGFuY2UuZGlkQ2hhbmdlU3RvcmUgPSB0cnVlO1xuICAgICAgaW5zdGFuY2UuZ2V0U25hcHNob3QgPSAoKSA9PiB7XG4gICAgICAgIGxldCBkaWRDaGFuZ2UgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnN0YW5jZS5zeW5jSG9va3MubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICBjb25zdCBob29rID0gaW5zdGFuY2Uuc3luY0hvb2tzW2ldO1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gaG9vay5zZWxlY3Rvcihob29rLnN0b3JlLnN0YXRlLCBob29rLmExLCBob29rLmEyLCBob29rLmEzKTtcbiAgICAgICAgICBpZiAoaG9vay5kaWRDaGFuZ2UgfHwgIU9iamVjdC5pcyhob29rLnZhbHVlLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGRpZENoYW5nZSA9IHRydWU7XG4gICAgICAgICAgICBob29rLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICBob29rLmRpZENoYW5nZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlkQ2hhbmdlKSB7XG4gICAgICAgICAgaW5zdGFuY2Uuc3luY1RpY2sgKz0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5zdGFuY2Uuc3luY1RpY2s7XG4gICAgICB9O1xuICAgIH1cbiAgfSxcbiAgYWZ0ZXIoaW5zdGFuY2UpIHtcbiAgICBpZiAoaW5zdGFuY2Uuc3luY0hvb2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChpbnN0YW5jZS5kaWRDaGFuZ2VTdG9yZSkge1xuICAgICAgICBpbnN0YW5jZS5kaWRDaGFuZ2VTdG9yZSA9IGZhbHNlO1xuICAgICAgICBpbnN0YW5jZS5zdWJzY3JpYmUgPSBvblN0b3JlQ2hhbmdlID0+IHtcbiAgICAgICAgICBjb25zdCBzdG9yZXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgZm9yIChjb25zdCBob29rIG9mIGluc3RhbmNlLnN5bmNIb29rcykge1xuICAgICAgICAgICAgc3RvcmVzLmFkZChob29rLnN0b3JlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgdW5zdWJzY3JpYmVzID0gW107XG4gICAgICAgICAgZm9yIChjb25zdCBzdG9yZSBvZiBzdG9yZXMpIHtcbiAgICAgICAgICAgIHVuc3Vic2NyaWJlcy5wdXNoKHN0b3JlLnN1YnNjcmliZShvblN0b3JlQ2hhbmdlKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHVuc3Vic2NyaWJlIG9mIHVuc3Vic2NyaWJlcykge1xuICAgICAgICAgICAgICB1bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICAgIHVzZVN5bmNFeHRlcm5hbFN0b3JlKGluc3RhbmNlLnN1YnNjcmliZSwgaW5zdGFuY2UuZ2V0U25hcHNob3QsIGluc3RhbmNlLmdldFNuYXBzaG90KTtcbiAgICB9XG4gIH1cbn0pO1xuZnVuY3Rpb24gdXNlU3RvcmVGYXN0KHN0b3JlLCBzZWxlY3RvciwgYTEsIGEyLCBhMykge1xuICBjb25zdCBpbnN0YW5jZSA9IGdldEluc3RhbmNlKCk7XG4gIGlmICghaW5zdGFuY2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICByZXR1cm4gdXNlU3RvcmVSMTkoc3RvcmUsIHNlbGVjdG9yLCBhMSwgYTIsIGEzKTtcbiAgfVxuICBjb25zdCBpbmRleCA9IGluc3RhbmNlLnN5bmNJbmRleDtcbiAgaW5zdGFuY2Uuc3luY0luZGV4ICs9IDE7XG4gIGxldCBob29rO1xuICBpZiAoIWluc3RhbmNlLmRpZEluaXRpYWxpemUpIHtcbiAgICBob29rID0ge1xuICAgICAgc3RvcmUsXG4gICAgICBzZWxlY3RvcixcbiAgICAgIGExLFxuICAgICAgYTIsXG4gICAgICBhMyxcbiAgICAgIHZhbHVlOiBzZWxlY3RvcihzdG9yZS5nZXRTbmFwc2hvdCgpLCBhMSwgYTIsIGEzKSxcbiAgICAgIGRpZENoYW5nZTogZmFsc2VcbiAgICB9O1xuICAgIGluc3RhbmNlLnN5bmNIb29rcy5wdXNoKGhvb2spO1xuICB9IGVsc2Uge1xuICAgIGhvb2sgPSBpbnN0YW5jZS5zeW5jSG9va3NbaW5kZXhdO1xuICAgIGlmIChob29rLnN0b3JlICE9PSBzdG9yZSB8fCBob29rLnNlbGVjdG9yICE9PSBzZWxlY3RvciB8fCAhT2JqZWN0LmlzKGhvb2suYTEsIGExKSB8fCAhT2JqZWN0LmlzKGhvb2suYTIsIGEyKSB8fCAhT2JqZWN0LmlzKGhvb2suYTMsIGEzKSkge1xuICAgICAgaWYgKGhvb2suc3RvcmUgIT09IHN0b3JlKSB7XG4gICAgICAgIGluc3RhbmNlLmRpZENoYW5nZVN0b3JlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGhvb2suc3RvcmUgPSBzdG9yZTtcbiAgICAgIGhvb2suc2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICAgIGhvb2suYTEgPSBhMTtcbiAgICAgIGhvb2suYTIgPSBhMjtcbiAgICAgIGhvb2suYTMgPSBhMztcbiAgICAgIGhvb2suZGlkQ2hhbmdlID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGhvb2sudmFsdWU7XG59XG5mdW5jdGlvbiB1c2VTdG9yZUxlZ2FjeShzdG9yZSwgc2VsZWN0b3IsIGExLCBhMiwgYTMpIHtcbiAgcmV0dXJuIHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yKHN0b3JlLnN1YnNjcmliZSwgc3RvcmUuZ2V0U25hcHNob3QsIHN0b3JlLmdldFNuYXBzaG90LCBzdGF0ZSA9PiBzZWxlY3RvcihzdGF0ZSwgYTEsIGEyLCBhMykpO1xufSJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/store/useStore.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/useAnimationFrame.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/useAnimationFrame.js ***!
|
||
\**************************************************************/
|
||
/***/ ((__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 */ AnimationFrame: () => (/* binding */ AnimationFrame),\n/* harmony export */ useAnimationFrame: () => (/* binding */ useAnimationFrame)\n/* harmony export */ });\n/* harmony import */ var _useRefWithInit_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./useRefWithInit.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useRefWithInit.js\");\n/* harmony import */ var _useOnMount_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./useOnMount.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useOnMount.js\");\n/* __next_internal_client_entry_do_not_use__ AnimationFrame,useAnimationFrame auto */ var _s = $RefreshSig$();\n\n\n/** Unlike `setTimeout`, rAF doesn't guarantee a positive integer return value, so we can't have\n * a monomorphic `uint` type with `0` meaning empty.\n * See warning note at:\n * https://developer.mozilla.org/en-US/docs/Web/API/Window/requestAnimationFrame#return_value */ const EMPTY = null;\nlet LAST_RAF = globalThis.requestAnimationFrame;\nclass Scheduler {\n request(fn) {\n const id = this.nextId;\n this.nextId += 1;\n this.callbacks.push(fn);\n this.callbacksCount += 1;\n /* In a test environment with fake timers, a fake `requestAnimationFrame` can be called\n * but there's no guarantee that the animation frame will actually run before the fake\n * timers are teared, which leaves `isScheduled` set, but won't run our `tick()`. */ const didRAFChange = true && LAST_RAF !== requestAnimationFrame && (LAST_RAF = requestAnimationFrame, true);\n if (!this.isScheduled || didRAFChange) {\n requestAnimationFrame(this.tick);\n this.isScheduled = true;\n }\n return id;\n }\n cancel(id) {\n const index = id - this.startId;\n if (index < 0 || index >= this.callbacks.length) {\n return;\n }\n this.callbacks[index] = null;\n this.callbacksCount -= 1;\n }\n constructor(){\n /* This implementation uses an array as a backing data-structure for frame callbacks.\n * It allows `O(1)` callback cancelling by inserting a `null` in the array, though it\n * never calls the native `cancelAnimationFrame` if there are no frames left. This can\n * be much more efficient if there is a call pattern that alterns as\n * \"request-cancel-request-cancel-…\".\n * But in the case of \"request-request-…-cancel-cancel-…\", it leaves the final animation\n * frame to run anyway. We turn that frame into a `O(1)` no-op via `callbacksCount`. */ this.callbacks = [];\n this.callbacksCount = 0;\n this.nextId = 1;\n this.startId = 1;\n this.isScheduled = false;\n this.tick = (timestamp)=>{\n this.isScheduled = false;\n const currentCallbacks = this.callbacks;\n const currentCallbacksCount = this.callbacksCount;\n // Update these before iterating, callbacks could call `requestAnimationFrame` again.\n this.callbacks = [];\n this.callbacksCount = 0;\n this.startId = this.nextId;\n if (currentCallbacksCount > 0) {\n for(let i = 0; i < currentCallbacks.length; i += 1){\n var _currentCallbacks_i;\n (_currentCallbacks_i = currentCallbacks[i]) === null || _currentCallbacks_i === void 0 ? void 0 : _currentCallbacks_i.call(currentCallbacks, timestamp);\n }\n }\n };\n }\n}\nconst scheduler = new Scheduler();\nclass AnimationFrame {\n static create() {\n return new AnimationFrame();\n }\n static request(fn) {\n return scheduler.request(fn);\n }\n static cancel(id) {\n return scheduler.cancel(id);\n }\n /**\n * Executes `fn` after `delay`, clearing any previously scheduled call.\n */ request(fn) {\n this.cancel();\n this.currentId = scheduler.request(()=>{\n this.currentId = EMPTY;\n fn();\n });\n }\n constructor(){\n this.currentId = EMPTY;\n this.cancel = ()=>{\n if (this.currentId !== EMPTY) {\n scheduler.cancel(this.currentId);\n this.currentId = EMPTY;\n }\n };\n this.disposeEffect = ()=>{\n return this.cancel;\n };\n }\n}\n/**\n * A `requestAnimationFrame` with automatic cleanup and guard.\n */ function useAnimationFrame() {\n _s();\n const timeout = (0,_useRefWithInit_js__WEBPACK_IMPORTED_MODULE_0__.useRefWithInit)(AnimationFrame.create).current;\n (0,_useOnMount_js__WEBPACK_IMPORTED_MODULE_1__.useOnMount)(timeout.disposeEffect);\n return timeout;\n}\n_s(useAnimationFrame, \"H+28ggFpaS8PP6371mocPgtnGps=\", false, function() {\n return [\n _useRefWithInit_js__WEBPACK_IMPORTED_MODULE_0__.useRefWithInit,\n _useOnMount_js__WEBPACK_IMPORTED_MODULE_1__.useOnMount\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlQW5pbWF0aW9uRnJhbWUuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFcUQ7QUFDUjtBQUM3Qzs7OzhGQUc4RixHQUM5RixNQUFNRSxRQUFRO0FBQ2QsSUFBSUMsV0FBV0MsV0FBV0MscUJBQXFCO0FBQy9DLE1BQU1DO0lBNkJKQyxRQUFRQyxFQUFFLEVBQUU7UUFDVixNQUFNQyxLQUFLLElBQUksQ0FBQ0MsTUFBTTtRQUN0QixJQUFJLENBQUNBLE1BQU0sSUFBSTtRQUNmLElBQUksQ0FBQ0MsU0FBUyxDQUFDQyxJQUFJLENBQUNKO1FBQ3BCLElBQUksQ0FBQ0ssY0FBYyxJQUFJO1FBRXZCOztzRkFFa0YsR0FDbEYsTUFBTUMsZUFBZUMsS0FBcUMsSUFBSVosYUFBYUUseUJBQTBCRixDQUFBQSxXQUFXRSx1QkFBdUIsSUFBRztRQUMxSSxJQUFJLENBQUMsSUFBSSxDQUFDVyxXQUFXLElBQUlGLGNBQWM7WUFDckNULHNCQUFzQixJQUFJLENBQUNZLElBQUk7WUFDL0IsSUFBSSxDQUFDRCxXQUFXLEdBQUc7UUFDckI7UUFDQSxPQUFPUDtJQUNUO0lBQ0FTLE9BQU9ULEVBQUUsRUFBRTtRQUNULE1BQU1VLFFBQVFWLEtBQUssSUFBSSxDQUFDVyxPQUFPO1FBQy9CLElBQUlELFFBQVEsS0FBS0EsU0FBUyxJQUFJLENBQUNSLFNBQVMsQ0FBQ1UsTUFBTSxFQUFFO1lBQy9DO1FBQ0Y7UUFDQSxJQUFJLENBQUNWLFNBQVMsQ0FBQ1EsTUFBTSxHQUFHO1FBQ3hCLElBQUksQ0FBQ04sY0FBYyxJQUFJO0lBQ3pCOztRQW5EQTs7Ozs7O3VGQU1xRixRQUVyRkYsWUFBWSxFQUFFO2FBQ2RFLGlCQUFpQjthQUNqQkgsU0FBUzthQUNUVSxVQUFVO2FBQ1ZKLGNBQWM7YUFDZEMsT0FBT0ssQ0FBQUE7WUFDTCxJQUFJLENBQUNOLFdBQVcsR0FBRztZQUNuQixNQUFNTyxtQkFBbUIsSUFBSSxDQUFDWixTQUFTO1lBQ3ZDLE1BQU1hLHdCQUF3QixJQUFJLENBQUNYLGNBQWM7WUFFakQscUZBQXFGO1lBQ3JGLElBQUksQ0FBQ0YsU0FBUyxHQUFHLEVBQUU7WUFDbkIsSUFBSSxDQUFDRSxjQUFjLEdBQUc7WUFDdEIsSUFBSSxDQUFDTyxPQUFPLEdBQUcsSUFBSSxDQUFDVixNQUFNO1lBQzFCLElBQUljLHdCQUF3QixHQUFHO2dCQUM3QixJQUFLLElBQUlDLElBQUksR0FBR0EsSUFBSUYsaUJBQWlCRixNQUFNLEVBQUVJLEtBQUssRUFBRzt3QkFDbkRGO3FCQUFBQSxzQkFBQUEsZ0JBQWdCLENBQUNFLEVBQUUsY0FBbkJGLDBDQUFBQSx5QkFBQUEsa0JBQXNCRDtnQkFDeEI7WUFDRjtRQUNGOztBQXlCRjtBQUNBLE1BQU1JLFlBQVksSUFBSXBCO0FBQ2YsTUFBTXFCO0lBQ1gsT0FBT0MsU0FBUztRQUNkLE9BQU8sSUFBSUQ7SUFDYjtJQUNBLE9BQU9wQixRQUFRQyxFQUFFLEVBQUU7UUFDakIsT0FBT2tCLFVBQVVuQixPQUFPLENBQUNDO0lBQzNCO0lBQ0EsT0FBT1UsT0FBT1QsRUFBRSxFQUFFO1FBQ2hCLE9BQU9pQixVQUFVUixNQUFNLENBQUNUO0lBQzFCO0lBR0E7O0dBRUMsR0FDREYsUUFBUUMsRUFBRSxFQUFFO1FBQ1YsSUFBSSxDQUFDVSxNQUFNO1FBQ1gsSUFBSSxDQUFDVyxTQUFTLEdBQUdILFVBQVVuQixPQUFPLENBQUM7WUFDakMsSUFBSSxDQUFDc0IsU0FBUyxHQUFHM0I7WUFDakJNO1FBQ0Y7SUFDRjs7YUFYQXFCLFlBQVkzQjthQVlaZ0IsU0FBUztZQUNQLElBQUksSUFBSSxDQUFDVyxTQUFTLEtBQUszQixPQUFPO2dCQUM1QndCLFVBQVVSLE1BQU0sQ0FBQyxJQUFJLENBQUNXLFNBQVM7Z0JBQy9CLElBQUksQ0FBQ0EsU0FBUyxHQUFHM0I7WUFDbkI7UUFDRjthQUNBNEIsZ0JBQWdCO1lBQ2QsT0FBTyxJQUFJLENBQUNaLE1BQU07UUFDcEI7O0FBQ0Y7QUFFQTs7Q0FFQyxHQUNNLFNBQVNhOztJQUNkLE1BQU1DLFVBQVVoQyxrRUFBY0EsQ0FBQzJCLGVBQWVDLE1BQU0sRUFBRUssT0FBTztJQUM3RGhDLDBEQUFVQSxDQUFDK0IsUUFBUUYsYUFBYTtJQUNoQyxPQUFPRTtBQUNUO0dBSmdCRDs7UUFDRS9CLDhEQUFjQTtRQUM5QkMsc0RBQVVBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3V0aWxzL2VzbS91c2VBbmltYXRpb25GcmFtZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IHVzZVJlZldpdGhJbml0IH0gZnJvbSBcIi4vdXNlUmVmV2l0aEluaXQuanNcIjtcbmltcG9ydCB7IHVzZU9uTW91bnQgfSBmcm9tIFwiLi91c2VPbk1vdW50LmpzXCI7XG4vKiogVW5saWtlIGBzZXRUaW1lb3V0YCwgckFGIGRvZXNuJ3QgZ3VhcmFudGVlIGEgcG9zaXRpdmUgaW50ZWdlciByZXR1cm4gdmFsdWUsIHNvIHdlIGNhbid0IGhhdmVcbiAqIGEgbW9ub21vcnBoaWMgYHVpbnRgIHR5cGUgd2l0aCBgMGAgbWVhbmluZyBlbXB0eS5cbiAqIFNlZSB3YXJuaW5nIG5vdGUgYXQ6XG4gKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L3JlcXVlc3RBbmltYXRpb25GcmFtZSNyZXR1cm5fdmFsdWUgKi9cbmNvbnN0IEVNUFRZID0gbnVsbDtcbmxldCBMQVNUX1JBRiA9IGdsb2JhbFRoaXMucmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuY2xhc3MgU2NoZWR1bGVyIHtcbiAgLyogVGhpcyBpbXBsZW1lbnRhdGlvbiB1c2VzIGFuIGFycmF5IGFzIGEgYmFja2luZyBkYXRhLXN0cnVjdHVyZSBmb3IgZnJhbWUgY2FsbGJhY2tzLlxuICAgKiBJdCBhbGxvd3MgYE8oMSlgIGNhbGxiYWNrIGNhbmNlbGxpbmcgYnkgaW5zZXJ0aW5nIGEgYG51bGxgIGluIHRoZSBhcnJheSwgdGhvdWdoIGl0XG4gICAqIG5ldmVyIGNhbGxzIHRoZSBuYXRpdmUgYGNhbmNlbEFuaW1hdGlvbkZyYW1lYCBpZiB0aGVyZSBhcmUgbm8gZnJhbWVzIGxlZnQuIFRoaXMgY2FuXG4gICAqIGJlIG11Y2ggbW9yZSBlZmZpY2llbnQgaWYgdGhlcmUgaXMgYSBjYWxsIHBhdHRlcm4gdGhhdCBhbHRlcm5zIGFzXG4gICAqIFwicmVxdWVzdC1jYW5jZWwtcmVxdWVzdC1jYW5jZWwt4oCmXCIuXG4gICAqIEJ1dCBpbiB0aGUgY2FzZSBvZiBcInJlcXVlc3QtcmVxdWVzdC3igKYtY2FuY2VsLWNhbmNlbC3igKZcIiwgaXQgbGVhdmVzIHRoZSBmaW5hbCBhbmltYXRpb25cbiAgICogZnJhbWUgdG8gcnVuIGFueXdheS4gV2UgdHVybiB0aGF0IGZyYW1lIGludG8gYSBgTygxKWAgbm8tb3AgdmlhIGBjYWxsYmFja3NDb3VudGAuICovXG5cbiAgY2FsbGJhY2tzID0gW107XG4gIGNhbGxiYWNrc0NvdW50ID0gMDtcbiAgbmV4dElkID0gMTtcbiAgc3RhcnRJZCA9IDE7XG4gIGlzU2NoZWR1bGVkID0gZmFsc2U7XG4gIHRpY2sgPSB0aW1lc3RhbXAgPT4ge1xuICAgIHRoaXMuaXNTY2hlZHVsZWQgPSBmYWxzZTtcbiAgICBjb25zdCBjdXJyZW50Q2FsbGJhY2tzID0gdGhpcy5jYWxsYmFja3M7XG4gICAgY29uc3QgY3VycmVudENhbGxiYWNrc0NvdW50ID0gdGhpcy5jYWxsYmFja3NDb3VudDtcblxuICAgIC8vIFVwZGF0ZSB0aGVzZSBiZWZvcmUgaXRlcmF0aW5nLCBjYWxsYmFja3MgY291bGQgY2FsbCBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBhZ2Fpbi5cbiAgICB0aGlzLmNhbGxiYWNrcyA9IFtdO1xuICAgIHRoaXMuY2FsbGJhY2tzQ291bnQgPSAwO1xuICAgIHRoaXMuc3RhcnRJZCA9IHRoaXMubmV4dElkO1xuICAgIGlmIChjdXJyZW50Q2FsbGJhY2tzQ291bnQgPiAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGN1cnJlbnRDYWxsYmFja3MubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgY3VycmVudENhbGxiYWNrc1tpXT8uKHRpbWVzdGFtcCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICByZXF1ZXN0KGZuKSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLm5leHRJZDtcbiAgICB0aGlzLm5leHRJZCArPSAxO1xuICAgIHRoaXMuY2FsbGJhY2tzLnB1c2goZm4pO1xuICAgIHRoaXMuY2FsbGJhY2tzQ291bnQgKz0gMTtcblxuICAgIC8qIEluIGEgdGVzdCBlbnZpcm9ubWVudCB3aXRoIGZha2UgdGltZXJzLCBhIGZha2UgYHJlcXVlc3RBbmltYXRpb25GcmFtZWAgY2FuIGJlIGNhbGxlZFxuICAgICAqIGJ1dCB0aGVyZSdzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBhbmltYXRpb24gZnJhbWUgd2lsbCBhY3R1YWxseSBydW4gYmVmb3JlIHRoZSBmYWtlXG4gICAgICogdGltZXJzIGFyZSB0ZWFyZWQsIHdoaWNoIGxlYXZlcyBgaXNTY2hlZHVsZWRgIHNldCwgYnV0IHdvbid0IHJ1biBvdXIgYHRpY2soKWAuICovXG4gICAgY29uc3QgZGlkUkFGQ2hhbmdlID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyAmJiBMQVNUX1JBRiAhPT0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lICYmIChMQVNUX1JBRiA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSwgdHJ1ZSk7XG4gICAgaWYgKCF0aGlzLmlzU2NoZWR1bGVkIHx8IGRpZFJBRkNoYW5nZSkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMudGljayk7XG4gICAgICB0aGlzLmlzU2NoZWR1bGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGlkO1xuICB9XG4gIGNhbmNlbChpZCkge1xuICAgIGNvbnN0IGluZGV4ID0gaWQgLSB0aGlzLnN0YXJ0SWQ7XG4gICAgaWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSB0aGlzLmNhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jYWxsYmFja3NbaW5kZXhdID0gbnVsbDtcbiAgICB0aGlzLmNhbGxiYWNrc0NvdW50IC09IDE7XG4gIH1cbn1cbmNvbnN0IHNjaGVkdWxlciA9IG5ldyBTY2hlZHVsZXIoKTtcbmV4cG9ydCBjbGFzcyBBbmltYXRpb25GcmFtZSB7XG4gIHN0YXRpYyBjcmVhdGUoKSB7XG4gICAgcmV0dXJuIG5ldyBBbmltYXRpb25GcmFtZSgpO1xuICB9XG4gIHN0YXRpYyByZXF1ZXN0KGZuKSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlci5yZXF1ZXN0KGZuKTtcbiAgfVxuICBzdGF0aWMgY2FuY2VsKGlkKSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlci5jYW5jZWwoaWQpO1xuICB9XG4gIGN1cnJlbnRJZCA9IEVNUFRZO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBgZm5gIGFmdGVyIGBkZWxheWAsIGNsZWFyaW5nIGFueSBwcmV2aW91c2x5IHNjaGVkdWxlZCBjYWxsLlxuICAgKi9cbiAgcmVxdWVzdChmbikge1xuICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgdGhpcy5jdXJyZW50SWQgPSBzY2hlZHVsZXIucmVxdWVzdCgoKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRJZCA9IEVNUFRZO1xuICAgICAgZm4oKTtcbiAgICB9KTtcbiAgfVxuICBjYW5jZWwgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuY3VycmVudElkICE9PSBFTVBUWSkge1xuICAgICAgc2NoZWR1bGVyLmNhbmNlbCh0aGlzLmN1cnJlbnRJZCk7XG4gICAgICB0aGlzLmN1cnJlbnRJZCA9IEVNUFRZO1xuICAgIH1cbiAgfTtcbiAgZGlzcG9zZUVmZmVjdCA9ICgpID0+IHtcbiAgICByZXR1cm4gdGhpcy5jYW5jZWw7XG4gIH07XG59XG5cbi8qKlxuICogQSBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCB3aXRoIGF1dG9tYXRpYyBjbGVhbnVwIGFuZCBndWFyZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZUFuaW1hdGlvbkZyYW1lKCkge1xuICBjb25zdCB0aW1lb3V0ID0gdXNlUmVmV2l0aEluaXQoQW5pbWF0aW9uRnJhbWUuY3JlYXRlKS5jdXJyZW50O1xuICB1c2VPbk1vdW50KHRpbWVvdXQuZGlzcG9zZUVmZmVjdCk7XG4gIHJldHVybiB0aW1lb3V0O1xufSJdLCJuYW1lcyI6WyJ1c2VSZWZXaXRoSW5pdCIsInVzZU9uTW91bnQiLCJFTVBUWSIsIkxBU1RfUkFGIiwiZ2xvYmFsVGhpcyIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsIlNjaGVkdWxlciIsInJlcXVlc3QiLCJmbiIsImlkIiwibmV4dElkIiwiY2FsbGJhY2tzIiwicHVzaCIsImNhbGxiYWNrc0NvdW50IiwiZGlkUkFGQ2hhbmdlIiwicHJvY2VzcyIsImlzU2NoZWR1bGVkIiwidGljayIsImNhbmNlbCIsImluZGV4Iiwic3RhcnRJZCIsImxlbmd0aCIsInRpbWVzdGFtcCIsImN1cnJlbnRDYWxsYmFja3MiLCJjdXJyZW50Q2FsbGJhY2tzQ291bnQiLCJpIiwic2NoZWR1bGVyIiwiQW5pbWF0aW9uRnJhbWUiLCJjcmVhdGUiLCJjdXJyZW50SWQiLCJkaXNwb3NlRWZmZWN0IiwidXNlQW5pbWF0aW9uRnJhbWUiLCJ0aW1lb3V0IiwiY3VycmVudCJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/useAnimationFrame.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/useControlled.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/useControlled.js ***!
|
||
\**********************************************************/
|
||
/***/ ((__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 */ useControlled: () => (/* binding */ useControlled)\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 _error_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./error.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/error.js\");\n/* __next_internal_client_entry_do_not_use__ useControlled auto */ var _s = $RefreshSig$();\n// TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler -- process.env never changes, dependency arrays are intentionally ignored\n/* eslint-disable react-hooks/rules-of-hooks, react-hooks/exhaustive-deps */ \n\nfunction useControlled(param) {\n let { controlled, default: defaultProp, name, state = 'value' } = param;\n _s();\n // isControlled is ignored in the hook dependency lists as it should never change.\n const { current: isControlled } = react__WEBPACK_IMPORTED_MODULE_0__.useRef(controlled !== undefined);\n const [valueState, setValue] = react__WEBPACK_IMPORTED_MODULE_0__.useState(defaultProp);\n const value = isControlled ? controlled : valueState;\n if (true) {\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"useControlled.useEffect\": ()=>{\n if (isControlled !== (controlled !== undefined)) {\n (0,_error_js__WEBPACK_IMPORTED_MODULE_1__.error)([\n \"A component is changing the \".concat(isControlled ? '' : 'un', \"controlled \").concat(state, \" state of \").concat(name, \" to be \").concat(isControlled ? 'un' : '', \"controlled.\"),\n 'Elements should not switch from uncontrolled to controlled (or vice versa).',\n \"Decide between using a controlled or uncontrolled \".concat(name, \" \") + 'element for the lifetime of the component.',\n \"The nature of the state is determined during the first render. It's considered controlled if the value is not `undefined`.\",\n 'More info: https://fb.me/react-controlled-components'\n ].join('\\n'));\n }\n }\n }[\"useControlled.useEffect\"], [\n state,\n name,\n controlled\n ]);\n const { current: defaultValue } = react__WEBPACK_IMPORTED_MODULE_0__.useRef(defaultProp);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"useControlled.useEffect\": ()=>{\n if (!isControlled && serializeToDevModeString(defaultValue) !== serializeToDevModeString(defaultProp)) {\n (0,_error_js__WEBPACK_IMPORTED_MODULE_1__.error)([\n \"A component is changing the default \".concat(state, \" state of an uncontrolled \").concat(name, \" after being initialized. \") + \"To suppress this warning opt to use a controlled \".concat(name, \".\")\n ].join('\\n'));\n }\n }\n }[\"useControlled.useEffect\"], [\n defaultProp\n ]);\n }\n const setValueIfUncontrolled = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"useControlled.useCallback[setValueIfUncontrolled]\": (newValue)=>{\n if (!isControlled) {\n setValue(newValue);\n }\n }\n }[\"useControlled.useCallback[setValueIfUncontrolled]\"], []);\n return [\n value,\n setValueIfUncontrolled\n ];\n}\n_s(useControlled, \"NCvzqvEooZIyLjtnjkswuT0GFTI=\");\nfunction serializeToDevModeString(input) {\n let nextId = 0;\n const seen = new WeakMap();\n try {\n const result = JSON.stringify(input, function replacer(key, value) {\n if (key === '_owner' && this != null && typeof this === 'object' && '$$typeof' in this) {\n return undefined;\n }\n if (typeof value === 'bigint') {\n return \"__bigint__:\".concat(value);\n }\n if (value !== null && typeof value === 'object') {\n const id = seen.get(value);\n if (id !== undefined) {\n return \"__object__:\".concat(id);\n }\n seen.set(value, nextId);\n nextId += 1;\n }\n return value;\n });\n return result !== null && result !== void 0 ? result : \"__top__:\".concat(typeof input);\n } catch (e) {\n return '__unserializable__';\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlQ29udHJvbGxlZC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUEsa01BQWtNO0FBQ2xNLDBFQUEwRSxHQUMzQztBQUNJO0FBQzVCLFNBQVNFLGNBQWMsS0FLN0I7UUFMNkIsRUFDNUJDLFVBQVUsRUFDVkMsU0FBU0MsV0FBVyxFQUNwQkMsSUFBSSxFQUNKQyxRQUFRLE9BQU8sRUFDaEIsR0FMNkI7O0lBTTVCLGtGQUFrRjtJQUNsRixNQUFNLEVBQ0pDLFNBQVNDLFlBQVksRUFDdEIsR0FBR1QseUNBQVksQ0FBQ0csZUFBZVE7SUFDaEMsTUFBTSxDQUFDQyxZQUFZQyxTQUFTLEdBQUdiLDJDQUFjLENBQUNLO0lBQzlDLE1BQU1VLFFBQVFOLGVBQWVOLGFBQWFTO0lBQzFDLElBQUlJLElBQXFDLEVBQUU7UUFDekNoQiw0Q0FBZTt1Q0FBQztnQkFDZCxJQUFJUyxpQkFBa0JOLENBQUFBLGVBQWVRLFNBQVEsR0FBSTtvQkFDL0NWLGdEQUFLQSxDQUFDO3dCQUFFLCtCQUFvRU0sT0FBdENFLGVBQWUsS0FBSyxNQUFLLGVBQStCSCxPQUFsQkMsT0FBTSxjQUEwQkUsT0FBZEgsTUFBSyxXQUFrQyxPQUF6QkcsZUFBZSxPQUFPLElBQUc7d0JBQWM7d0JBQWdGLHFEQUF5RCxPQUFMSCxNQUFLLE9BQUs7d0JBQThDO3dCQUE4SDtxQkFBdUQsQ0FBQ1ksSUFBSSxDQUFDO2dCQUM1Z0I7WUFDRjtzQ0FBRztZQUFDWDtZQUFPRDtZQUFNSDtTQUFXO1FBQzVCLE1BQU0sRUFDSkssU0FBU1csWUFBWSxFQUN0QixHQUFHbkIseUNBQVksQ0FBQ0s7UUFDakJMLDRDQUFlO3VDQUFDO2dCQUNkLElBQUksQ0FBQ1MsZ0JBQWdCVyx5QkFBeUJELGtCQUFrQkMseUJBQXlCZixjQUFjO29CQUNyR0osZ0RBQUtBLENBQUM7d0JBQUUsdUNBQXdFSyxPQUFsQ0MsT0FBTSw4QkFBaUMsT0FBTEQsTUFBSyxnQ0FBOEIsb0RBQXlELE9BQUxBLE1BQUs7cUJBQUcsQ0FBQ1ksSUFBSSxDQUFDO2dCQUN2TDtZQUNGO3NDQUFHO1lBQUNiO1NBQVk7SUFDbEI7SUFDQSxNQUFNZ0IseUJBQXlCckIsOENBQWlCOzZEQUFDdUIsQ0FBQUE7WUFDL0MsSUFBSSxDQUFDZCxjQUFjO2dCQUNqQkksU0FBU1U7WUFDWDtRQUNGOzREQUFHLEVBQUU7SUFDTCxPQUFPO1FBQUNSO1FBQU9NO0tBQXVCO0FBQ3hDO0dBakNnQm5CO0FBa0NoQixTQUFTa0IseUJBQXlCSSxLQUFLO0lBQ3JDLElBQUlDLFNBQVM7SUFDYixNQUFNQyxPQUFPLElBQUlDO0lBQ2pCLElBQUk7UUFDRixNQUFNQyxTQUFTQyxLQUFLQyxTQUFTLENBQUNOLE9BQU8sU0FBU08sU0FBU0MsR0FBRyxFQUFFakIsS0FBSztZQUMvRCxJQUFJaUIsUUFBUSxZQUFZLElBQUksSUFBSSxRQUFRLE9BQU8sSUFBSSxLQUFLLFlBQVksY0FBYyxJQUFJLEVBQUU7Z0JBQ3RGLE9BQU9yQjtZQUNUO1lBQ0EsSUFBSSxPQUFPSSxVQUFVLFVBQVU7Z0JBQzdCLE9BQU8sY0FBb0IsT0FBTkE7WUFDdkI7WUFDQSxJQUFJQSxVQUFVLFFBQVEsT0FBT0EsVUFBVSxVQUFVO2dCQUMvQyxNQUFNa0IsS0FBS1AsS0FBS1EsR0FBRyxDQUFDbkI7Z0JBQ3BCLElBQUlrQixPQUFPdEIsV0FBVztvQkFDcEIsT0FBTyxjQUFpQixPQUFIc0I7Z0JBQ3ZCO2dCQUNBUCxLQUFLUyxHQUFHLENBQUNwQixPQUFPVTtnQkFDaEJBLFVBQVU7WUFDWjtZQUNBLE9BQU9WO1FBQ1Q7UUFDQSxPQUFPYSxtQkFBQUEsb0JBQUFBLFNBQVUsV0FBd0IsT0FBYixPQUFPSjtJQUNyQyxFQUFFLFVBQU07UUFDTixPQUFPO0lBQ1Q7QUFDRiIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlQ29udHJvbGxlZC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbi8vIFRPRE86IHVuY29tbWVudCBvbmNlIHdlIGVuYWJsZSBlc2xpbnQtcGx1Z2luLXJlYWN0LWNvbXBpbGVyIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1jb21waWxlci9yZWFjdC1jb21waWxlciAtLSBwcm9jZXNzLmVudiBuZXZlciBjaGFuZ2VzLCBkZXBlbmRlbmN5IGFycmF5cyBhcmUgaW50ZW50aW9uYWxseSBpZ25vcmVkXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rcywgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzICovXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBlcnJvciB9IGZyb20gXCIuL2Vycm9yLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gdXNlQ29udHJvbGxlZCh7XG4gIGNvbnRyb2xsZWQsXG4gIGRlZmF1bHQ6IGRlZmF1bHRQcm9wLFxuICBuYW1lLFxuICBzdGF0ZSA9ICd2YWx1ZSdcbn0pIHtcbiAgLy8gaXNDb250cm9sbGVkIGlzIGlnbm9yZWQgaW4gdGhlIGhvb2sgZGVwZW5kZW5jeSBsaXN0cyBhcyBpdCBzaG91bGQgbmV2ZXIgY2hhbmdlLlxuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNDb250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYoY29udHJvbGxlZCAhPT0gdW5kZWZpbmVkKTtcbiAgY29uc3QgW3ZhbHVlU3RhdGUsIHNldFZhbHVlXSA9IFJlYWN0LnVzZVN0YXRlKGRlZmF1bHRQcm9wKTtcbiAgY29uc3QgdmFsdWUgPSBpc0NvbnRyb2xsZWQgPyBjb250cm9sbGVkIDogdmFsdWVTdGF0ZTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKGlzQ29udHJvbGxlZCAhPT0gKGNvbnRyb2xsZWQgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgZXJyb3IoW2BBIGNvbXBvbmVudCBpcyBjaGFuZ2luZyB0aGUgJHtpc0NvbnRyb2xsZWQgPyAnJyA6ICd1bid9Y29udHJvbGxlZCAke3N0YXRlfSBzdGF0ZSBvZiAke25hbWV9IHRvIGJlICR7aXNDb250cm9sbGVkID8gJ3VuJyA6ICcnfWNvbnRyb2xsZWQuYCwgJ0VsZW1lbnRzIHNob3VsZCBub3Qgc3dpdGNoIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLicsIGBEZWNpZGUgYmV0d2VlbiB1c2luZyBhIGNvbnRyb2xsZWQgb3IgdW5jb250cm9sbGVkICR7bmFtZX0gYCArICdlbGVtZW50IGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIGNvbXBvbmVudC4nLCBcIlRoZSBuYXR1cmUgb2YgdGhlIHN0YXRlIGlzIGRldGVybWluZWQgZHVyaW5nIHRoZSBmaXJzdCByZW5kZXIuIEl0J3MgY29uc2lkZXJlZCBjb250cm9sbGVkIGlmIHRoZSB2YWx1ZSBpcyBub3QgYHVuZGVmaW5lZGAuXCIsICdNb3JlIGluZm86IGh0dHBzOi8vZmIubWUvcmVhY3QtY29udHJvbGxlZC1jb21wb25lbnRzJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtzdGF0ZSwgbmFtZSwgY29udHJvbGxlZF0pO1xuICAgIGNvbnN0IHtcbiAgICAgIGN1cnJlbnQ6IGRlZmF1bHRWYWx1ZVxuICAgIH0gPSBSZWFjdC51c2VSZWYoZGVmYXVsdFByb3ApO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoIWlzQ29udHJvbGxlZCAmJiBzZXJpYWxpemVUb0Rldk1vZGVTdHJpbmcoZGVmYXVsdFZhbHVlKSAhPT0gc2VyaWFsaXplVG9EZXZNb2RlU3RyaW5nKGRlZmF1bHRQcm9wKSkge1xuICAgICAgICBlcnJvcihbYEEgY29tcG9uZW50IGlzIGNoYW5naW5nIHRoZSBkZWZhdWx0ICR7c3RhdGV9IHN0YXRlIG9mIGFuIHVuY29udHJvbGxlZCAke25hbWV9IGFmdGVyIGJlaW5nIGluaXRpYWxpemVkLiBgICsgYFRvIHN1cHByZXNzIHRoaXMgd2FybmluZyBvcHQgdG8gdXNlIGEgY29udHJvbGxlZCAke25hbWV9LmBdLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9LCBbZGVmYXVsdFByb3BdKTtcbiAgfVxuICBjb25zdCBzZXRWYWx1ZUlmVW5jb250cm9sbGVkID0gUmVhY3QudXNlQ2FsbGJhY2sobmV3VmFsdWUgPT4ge1xuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgfVxuICB9LCBbXSk7XG4gIHJldHVybiBbdmFsdWUsIHNldFZhbHVlSWZVbmNvbnRyb2xsZWRdO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplVG9EZXZNb2RlU3RyaW5nKGlucHV0KSB7XG4gIGxldCBuZXh0SWQgPSAwO1xuICBjb25zdCBzZWVuID0gbmV3IFdlYWtNYXAoKTtcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBKU09OLnN0cmluZ2lmeShpbnB1dCwgZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGtleSA9PT0gJ19vd25lcicgJiYgdGhpcyAhPSBudWxsICYmIHR5cGVvZiB0aGlzID09PSAnb2JqZWN0JyAmJiAnJCR0eXBlb2YnIGluIHRoaXMpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdiaWdpbnQnKSB7XG4gICAgICAgIHJldHVybiBgX19iaWdpbnRfXzoke3ZhbHVlfWA7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCBpZCA9IHNlZW4uZ2V0KHZhbHVlKTtcbiAgICAgICAgaWYgKGlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gYF9fb2JqZWN0X186JHtpZH1gO1xuICAgICAgICB9XG4gICAgICAgIHNlZW4uc2V0KHZhbHVlLCBuZXh0SWQpO1xuICAgICAgICBuZXh0SWQgKz0gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0ID8/IGBfX3RvcF9fOiR7dHlwZW9mIGlucHV0fWA7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAnX191bnNlcmlhbGl6YWJsZV9fJztcbiAgfVxufSJdLCJuYW1lcyI6WyJSZWFjdCIsImVycm9yIiwidXNlQ29udHJvbGxlZCIsImNvbnRyb2xsZWQiLCJkZWZhdWx0IiwiZGVmYXVsdFByb3AiLCJuYW1lIiwic3RhdGUiLCJjdXJyZW50IiwiaXNDb250cm9sbGVkIiwidXNlUmVmIiwidW5kZWZpbmVkIiwidmFsdWVTdGF0ZSIsInNldFZhbHVlIiwidXNlU3RhdGUiLCJ2YWx1ZSIsInByb2Nlc3MiLCJ1c2VFZmZlY3QiLCJqb2luIiwiZGVmYXVsdFZhbHVlIiwic2VyaWFsaXplVG9EZXZNb2RlU3RyaW5nIiwic2V0VmFsdWVJZlVuY29udHJvbGxlZCIsInVzZUNhbGxiYWNrIiwibmV3VmFsdWUiLCJpbnB1dCIsIm5leHRJZCIsInNlZW4iLCJXZWFrTWFwIiwicmVzdWx0IiwiSlNPTiIsInN0cmluZ2lmeSIsInJlcGxhY2VyIiwia2V5IiwiaWQiLCJnZXQiLCJzZXQiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/useControlled.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/useEnhancedClickHandler.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/useEnhancedClickHandler.js ***!
|
||
\********************************************************************/
|
||
/***/ ((__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 */ useEnhancedClickHandler: () => (/* binding */ useEnhancedClickHandler)\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/* __next_internal_client_entry_do_not_use__ useEnhancedClickHandler auto */ var _s = $RefreshSig$();\n\n/**\n * Provides a cross-browser way to determine the type of the pointer used to click.\n * Safari and Firefox do not provide the PointerEvent to the click handler (they use MouseEvent) yet.\n * Additionally, this implementation detects if the click was triggered by the keyboard.\n *\n * @param handler The function to be called when the button is clicked. The first parameter is the original event and the second parameter is the pointer type.\n */ function useEnhancedClickHandler(handler) {\n _s();\n const lastClickInteractionTypeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef('');\n const handlePointerDown = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"useEnhancedClickHandler.useCallback[handlePointerDown]\": (event)=>{\n if (event.defaultPrevented) {\n return;\n }\n lastClickInteractionTypeRef.current = event.pointerType;\n handler(event, event.pointerType);\n }\n }[\"useEnhancedClickHandler.useCallback[handlePointerDown]\"], [\n handler\n ]);\n const handleClick = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"useEnhancedClickHandler.useCallback[handleClick]\": (event)=>{\n // event.detail has the number of clicks performed on the element. 0 means it was triggered by the keyboard.\n if (event.detail === 0) {\n handler(event, 'keyboard');\n return;\n }\n if ('pointerType' in event) {\n // Chrome and Edge correctly use PointerEvent\n handler(event, event.pointerType);\n } else {\n handler(event, lastClickInteractionTypeRef.current);\n }\n lastClickInteractionTypeRef.current = '';\n }\n }[\"useEnhancedClickHandler.useCallback[handleClick]\"], [\n handler\n ]);\n return {\n onClick: handleClick,\n onPointerDown: handlePointerDown\n };\n}\n_s(useEnhancedClickHandler, \"MWi0Lm8SfZUH49Q2QVdtjxK4fpM=\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlRW5oYW5jZWRDbGlja0hhbmRsZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRStCO0FBQy9COzs7Ozs7Q0FNQyxHQUNNLFNBQVNDLHdCQUF3QkMsT0FBTzs7SUFDN0MsTUFBTUMsOEJBQThCSCx5Q0FBWSxDQUFDO0lBQ2pELE1BQU1LLG9CQUFvQkwsOENBQWlCO2tFQUFDTyxDQUFBQTtZQUMxQyxJQUFJQSxNQUFNQyxnQkFBZ0IsRUFBRTtnQkFDMUI7WUFDRjtZQUNBTCw0QkFBNEJNLE9BQU8sR0FBR0YsTUFBTUcsV0FBVztZQUN2RFIsUUFBUUssT0FBT0EsTUFBTUcsV0FBVztRQUNsQztpRUFBRztRQUFDUjtLQUFRO0lBQ1osTUFBTVMsY0FBY1gsOENBQWlCOzREQUFDTyxDQUFBQTtZQUNwQyw0R0FBNEc7WUFDNUcsSUFBSUEsTUFBTUssTUFBTSxLQUFLLEdBQUc7Z0JBQ3RCVixRQUFRSyxPQUFPO2dCQUNmO1lBQ0Y7WUFDQSxJQUFJLGlCQUFpQkEsT0FBTztnQkFDMUIsNkNBQTZDO2dCQUM3Q0wsUUFBUUssT0FBT0EsTUFBTUcsV0FBVztZQUNsQyxPQUFPO2dCQUNMUixRQUFRSyxPQUFPSiw0QkFBNEJNLE9BQU87WUFDcEQ7WUFDQU4sNEJBQTRCTSxPQUFPLEdBQUc7UUFDeEM7MkRBQUc7UUFBQ1A7S0FBUTtJQUNaLE9BQU87UUFDTFcsU0FBU0Y7UUFDVEcsZUFBZVQ7SUFDakI7QUFDRjtHQTNCZ0JKIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3V0aWxzL2VzbS91c2VFbmhhbmNlZENsaWNrSGFuZGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogUHJvdmlkZXMgYSBjcm9zcy1icm93c2VyIHdheSB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgdGhlIHBvaW50ZXIgdXNlZCB0byBjbGljay5cbiAqIFNhZmFyaSBhbmQgRmlyZWZveCBkbyBub3QgcHJvdmlkZSB0aGUgUG9pbnRlckV2ZW50IHRvIHRoZSBjbGljayBoYW5kbGVyICh0aGV5IHVzZSBNb3VzZUV2ZW50KSB5ZXQuXG4gKiBBZGRpdGlvbmFsbHksIHRoaXMgaW1wbGVtZW50YXRpb24gZGV0ZWN0cyBpZiB0aGUgY2xpY2sgd2FzIHRyaWdnZXJlZCBieSB0aGUga2V5Ym9hcmQuXG4gKlxuICogQHBhcmFtIGhhbmRsZXIgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZC4gVGhlIGZpcnN0IHBhcmFtZXRlciBpcyB0aGUgb3JpZ2luYWwgZXZlbnQgYW5kIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBwb2ludGVyIHR5cGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VFbmhhbmNlZENsaWNrSGFuZGxlcihoYW5kbGVyKSB7XG4gIGNvbnN0IGxhc3RDbGlja0ludGVyYWN0aW9uVHlwZVJlZiA9IFJlYWN0LnVzZVJlZignJyk7XG4gIGNvbnN0IGhhbmRsZVBvaW50ZXJEb3duID0gUmVhY3QudXNlQ2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxhc3RDbGlja0ludGVyYWN0aW9uVHlwZVJlZi5jdXJyZW50ID0gZXZlbnQucG9pbnRlclR5cGU7XG4gICAgaGFuZGxlcihldmVudCwgZXZlbnQucG9pbnRlclR5cGUpO1xuICB9LCBbaGFuZGxlcl0pO1xuICBjb25zdCBoYW5kbGVDbGljayA9IFJlYWN0LnVzZUNhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAvLyBldmVudC5kZXRhaWwgaGFzIHRoZSBudW1iZXIgb2YgY2xpY2tzIHBlcmZvcm1lZCBvbiB0aGUgZWxlbWVudC4gMCBtZWFucyBpdCB3YXMgdHJpZ2dlcmVkIGJ5IHRoZSBrZXlib2FyZC5cbiAgICBpZiAoZXZlbnQuZGV0YWlsID09PSAwKSB7XG4gICAgICBoYW5kbGVyKGV2ZW50LCAna2V5Ym9hcmQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKCdwb2ludGVyVHlwZScgaW4gZXZlbnQpIHtcbiAgICAgIC8vIENocm9tZSBhbmQgRWRnZSBjb3JyZWN0bHkgdXNlIFBvaW50ZXJFdmVudFxuICAgICAgaGFuZGxlcihldmVudCwgZXZlbnQucG9pbnRlclR5cGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoYW5kbGVyKGV2ZW50LCBsYXN0Q2xpY2tJbnRlcmFjdGlvblR5cGVSZWYuY3VycmVudCk7XG4gICAgfVxuICAgIGxhc3RDbGlja0ludGVyYWN0aW9uVHlwZVJlZi5jdXJyZW50ID0gJyc7XG4gIH0sIFtoYW5kbGVyXSk7XG4gIHJldHVybiB7XG4gICAgb25DbGljazogaGFuZGxlQ2xpY2ssXG4gICAgb25Qb2ludGVyRG93bjogaGFuZGxlUG9pbnRlckRvd25cbiAgfTtcbn0iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VFbmhhbmNlZENsaWNrSGFuZGxlciIsImhhbmRsZXIiLCJsYXN0Q2xpY2tJbnRlcmFjdGlvblR5cGVSZWYiLCJ1c2VSZWYiLCJoYW5kbGVQb2ludGVyRG93biIsInVzZUNhbGxiYWNrIiwiZXZlbnQiLCJkZWZhdWx0UHJldmVudGVkIiwiY3VycmVudCIsInBvaW50ZXJUeXBlIiwiaGFuZGxlQ2xpY2siLCJkZXRhaWwiLCJvbkNsaWNrIiwib25Qb2ludGVyRG93biJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/useEnhancedClickHandler.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/useId.js":
|
||
/*!**************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/useId.js ***!
|
||
\**************************************************/
|
||
/***/ ((__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 */ useId: () => (/* binding */ useId)\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 _safeReact_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./safeReact.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/safeReact.js\");\n/* __next_internal_client_entry_do_not_use__ useId auto */ var _s = $RefreshSig$(), _s1 = $RefreshSig$();\n\n\nlet globalId = 0;\n// TODO React 17: Remove `useGlobalId` once React 17 support is removed\nfunction useGlobalId(idOverride) {\n let prefix = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 'mui';\n _s();\n const [defaultId, setDefaultId] = react__WEBPACK_IMPORTED_MODULE_0__.useState(idOverride);\n const id = idOverride || defaultId;\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"useGlobalId.useEffect\": ()=>{\n if (defaultId == null) {\n // Fallback to this default id when possible.\n // Use the incrementing value for client-side rendering only.\n // We can't use it server-side.\n // If you want to use random values please consider the Birthday Problem: https://en.wikipedia.org/wiki/Birthday_problem\n globalId += 1;\n setDefaultId(\"\".concat(prefix, \"-\").concat(globalId));\n }\n }\n }[\"useGlobalId.useEffect\"], [\n defaultId,\n prefix\n ]);\n return id;\n}\n_s(useGlobalId, \"x3Lc8abAdAPspKyjVNe81v4f1mI=\");\nconst maybeReactUseId = _safeReact_js__WEBPACK_IMPORTED_MODULE_1__.SafeReact.useId;\n/**\n *\n * @example <div id={useId()} />\n * @param idOverride\n * @returns {string}\n */ function useId(idOverride, prefix) {\n _s1();\n // React.useId() is only available from React 17.0.0.\n if (maybeReactUseId !== undefined) {\n const reactId = maybeReactUseId();\n return idOverride !== null && idOverride !== void 0 ? idOverride : prefix ? \"\".concat(prefix, \"-\").concat(reactId) : reactId;\n }\n // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler\n // eslint-disable-next-line react-hooks/rules-of-hooks -- `React.useId` is invariant at runtime.\n return useGlobalId(idOverride, prefix);\n}\n_s1(useId, \"+U3eiRfVMajxVelR4S+2RUcln6A=\", false, function() {\n return [\n useGlobalId\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlSWQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUUrQjtBQUNZO0FBQzNDLElBQUlFLFdBQVc7QUFFZix1RUFBdUU7QUFDdkUsU0FBU0MsWUFBWUMsVUFBVTtRQUFFQyxTQUFBQSxpRUFBUzs7SUFDeEMsTUFBTSxDQUFDQyxXQUFXQyxhQUFhLEdBQUdQLDJDQUFjLENBQUNJO0lBQ2pELE1BQU1LLEtBQUtMLGNBQWNFO0lBQ3pCTiw0Q0FBZTtpQ0FBQztZQUNkLElBQUlNLGFBQWEsTUFBTTtnQkFDckIsNkNBQTZDO2dCQUM3Qyw2REFBNkQ7Z0JBQzdELCtCQUErQjtnQkFDL0Isd0hBQXdIO2dCQUN4SEosWUFBWTtnQkFDWkssYUFBYSxHQUFhTCxPQUFWRyxRQUFPLEtBQVksT0FBVEg7WUFDNUI7UUFDRjtnQ0FBRztRQUFDSTtRQUFXRDtLQUFPO0lBQ3RCLE9BQU9JO0FBQ1Q7R0FkU047QUFlVCxNQUFNUSxrQkFBa0JWLG9EQUFTQSxDQUFDVyxLQUFLO0FBRXZDOzs7OztDQUtDLEdBQ00sU0FBU0EsTUFBTVIsVUFBVSxFQUFFQyxNQUFNOztJQUN0QyxxREFBcUQ7SUFDckQsSUFBSU0sb0JBQW9CRSxXQUFXO1FBQ2pDLE1BQU1DLFVBQVVIO1FBQ2hCLE9BQU9QLHVCQUFBQSx3QkFBQUEsYUFBZUMsU0FBUyxHQUFhUyxPQUFWVCxRQUFPLEtBQVcsT0FBUlMsV0FBWUE7SUFDMUQ7SUFFQSx3SEFBd0g7SUFDeEgsZ0dBQWdHO0lBQ2hHLE9BQU9YLFlBQVlDLFlBQVlDO0FBQ2pDO0lBVmdCTzs7UUFTUFQiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvdXRpbHMvZXNtL3VzZUlkLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgU2FmZVJlYWN0IH0gZnJvbSBcIi4vc2FmZVJlYWN0LmpzXCI7XG5sZXQgZ2xvYmFsSWQgPSAwO1xuXG4vLyBUT0RPIFJlYWN0IDE3OiBSZW1vdmUgYHVzZUdsb2JhbElkYCBvbmNlIFJlYWN0IDE3IHN1cHBvcnQgaXMgcmVtb3ZlZFxuZnVuY3Rpb24gdXNlR2xvYmFsSWQoaWRPdmVycmlkZSwgcHJlZml4ID0gJ211aScpIHtcbiAgY29uc3QgW2RlZmF1bHRJZCwgc2V0RGVmYXVsdElkXSA9IFJlYWN0LnVzZVN0YXRlKGlkT3ZlcnJpZGUpO1xuICBjb25zdCBpZCA9IGlkT3ZlcnJpZGUgfHwgZGVmYXVsdElkO1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0SWQgPT0gbnVsbCkge1xuICAgICAgLy8gRmFsbGJhY2sgdG8gdGhpcyBkZWZhdWx0IGlkIHdoZW4gcG9zc2libGUuXG4gICAgICAvLyBVc2UgdGhlIGluY3JlbWVudGluZyB2YWx1ZSBmb3IgY2xpZW50LXNpZGUgcmVuZGVyaW5nIG9ubHkuXG4gICAgICAvLyBXZSBjYW4ndCB1c2UgaXQgc2VydmVyLXNpZGUuXG4gICAgICAvLyBJZiB5b3Ugd2FudCB0byB1c2UgcmFuZG9tIHZhbHVlcyBwbGVhc2UgY29uc2lkZXIgdGhlIEJpcnRoZGF5IFByb2JsZW06IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0JpcnRoZGF5X3Byb2JsZW1cbiAgICAgIGdsb2JhbElkICs9IDE7XG4gICAgICBzZXREZWZhdWx0SWQoYCR7cHJlZml4fS0ke2dsb2JhbElkfWApO1xuICAgIH1cbiAgfSwgW2RlZmF1bHRJZCwgcHJlZml4XSk7XG4gIHJldHVybiBpZDtcbn1cbmNvbnN0IG1heWJlUmVhY3RVc2VJZCA9IFNhZmVSZWFjdC51c2VJZDtcblxuLyoqXG4gKlxuICogQGV4YW1wbGUgPGRpdiBpZD17dXNlSWQoKX0gLz5cbiAqIEBwYXJhbSBpZE92ZXJyaWRlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoaWRPdmVycmlkZSwgcHJlZml4KSB7XG4gIC8vIFJlYWN0LnVzZUlkKCkgaXMgb25seSBhdmFpbGFibGUgZnJvbSBSZWFjdCAxNy4wLjAuXG4gIGlmIChtYXliZVJlYWN0VXNlSWQgIT09IHVuZGVmaW5lZCkge1xuICAgIGNvbnN0IHJlYWN0SWQgPSBtYXliZVJlYWN0VXNlSWQoKTtcbiAgICByZXR1cm4gaWRPdmVycmlkZSA/PyAocHJlZml4ID8gYCR7cHJlZml4fS0ke3JlYWN0SWR9YCA6IHJlYWN0SWQpO1xuICB9XG5cbiAgLy8gVE9ETzogdW5jb21tZW50IG9uY2Ugd2UgZW5hYmxlIGVzbGludC1wbHVnaW4tcmVhY3QtY29tcGlsZXIgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWNvbXBpbGVyL3JlYWN0LWNvbXBpbGVyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rcyAtLSBgUmVhY3QudXNlSWRgIGlzIGludmFyaWFudCBhdCBydW50aW1lLlxuICByZXR1cm4gdXNlR2xvYmFsSWQoaWRPdmVycmlkZSwgcHJlZml4KTtcbn0iXSwibmFtZXMiOlsiUmVhY3QiLCJTYWZlUmVhY3QiLCJnbG9iYWxJZCIsInVzZUdsb2JhbElkIiwiaWRPdmVycmlkZSIsInByZWZpeCIsImRlZmF1bHRJZCIsInNldERlZmF1bHRJZCIsInVzZVN0YXRlIiwiaWQiLCJ1c2VFZmZlY3QiLCJtYXliZVJlYWN0VXNlSWQiLCJ1c2VJZCIsInVuZGVmaW5lZCIsInJlYWN0SWQiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/useId.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js":
|
||
/*!***************************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js ***!
|
||
\***************************************************************/
|
||
/***/ ((__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 */ useIsoLayoutEffect: () => (/* binding */ useIsoLayoutEffect)\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/* __next_internal_client_entry_do_not_use__ useIsoLayoutEffect auto */ \nconst noop = ()=>{};\nconst useIsoLayoutEffect = typeof document !== 'undefined' ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : noop;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlSXNvTGF5b3V0RWZmZWN0LmpzIiwibWFwcGluZ3MiOiI7Ozs7O3dFQUUrQjtBQUMvQixNQUFNQyxPQUFPLEtBQU87QUFDYixNQUFNQyxxQkFBcUIsT0FBT0MsYUFBYSxjQUFjSCxrREFBcUIsR0FBR0MsS0FBSyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlSXNvTGF5b3V0RWZmZWN0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuZXhwb3J0IGNvbnN0IHVzZUlzb0xheW91dEVmZmVjdCA9IHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgPyBSZWFjdC51c2VMYXlvdXRFZmZlY3QgOiBub29wOyJdLCJuYW1lcyI6WyJSZWFjdCIsIm5vb3AiLCJ1c2VJc29MYXlvdXRFZmZlY3QiLCJkb2N1bWVudCIsInVzZUxheW91dEVmZmVjdCJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/useMergedRefs.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/useMergedRefs.js ***!
|
||
\**********************************************************/
|
||
/***/ ((__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 */ useMergedRefs: () => (/* binding */ useMergedRefs),\n/* harmony export */ useMergedRefsN: () => (/* binding */ useMergedRefsN)\n/* harmony export */ });\n/* harmony import */ var _useRefWithInit_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./useRefWithInit.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useRefWithInit.js\");\n\n\n/**\n * Merges refs into a single memoized callback ref or `null`.\n * This makes sure multiple refs are updated together and have the same value.\n *\n * This function accepts up to four refs. If you need to merge more, or have an unspecified number of refs to merge,\n * use `useMergedRefsN` instead.\n */\n\nfunction useMergedRefs(a, b, c, d) {\n const forkRef = (0,_useRefWithInit_js__WEBPACK_IMPORTED_MODULE_0__.useRefWithInit)(createForkRef).current;\n if (didChange(forkRef, a, b, c, d)) {\n update(forkRef, [a, b, c, d]);\n }\n return forkRef.callback;\n}\n\n/**\n * Merges an array of refs into a single memoized callback ref or `null`.\n *\n * If you need to merge a fixed number (up to four) of refs, use `useMergedRefs` instead for better performance.\n */\nfunction useMergedRefsN(refs) {\n const forkRef = (0,_useRefWithInit_js__WEBPACK_IMPORTED_MODULE_0__.useRefWithInit)(createForkRef).current;\n if (didChangeN(forkRef, refs)) {\n update(forkRef, refs);\n }\n return forkRef.callback;\n}\nfunction createForkRef() {\n return {\n callback: null,\n cleanup: null,\n refs: []\n };\n}\nfunction didChange(forkRef, a, b, c, d) {\n // prettier-ignore\n return forkRef.refs[0] !== a || forkRef.refs[1] !== b || forkRef.refs[2] !== c || forkRef.refs[3] !== d;\n}\nfunction didChangeN(forkRef, newRefs) {\n return forkRef.refs.length !== newRefs.length || forkRef.refs.some((ref, index) => ref !== newRefs[index]);\n}\nfunction update(forkRef, refs) {\n forkRef.refs = refs;\n if (refs.every(ref => ref == null)) {\n forkRef.callback = null;\n return;\n }\n forkRef.callback = instance => {\n if (forkRef.cleanup) {\n forkRef.cleanup();\n forkRef.cleanup = null;\n }\n if (instance != null) {\n const cleanupCallbacks = Array(refs.length).fill(null);\n for (let i = 0; i < refs.length; i += 1) {\n const ref = refs[i];\n if (ref == null) {\n continue;\n }\n switch (typeof ref) {\n case 'function':\n {\n const refCleanup = ref(instance);\n if (typeof refCleanup === 'function') {\n cleanupCallbacks[i] = refCleanup;\n }\n break;\n }\n case 'object':\n {\n ref.current = instance;\n break;\n }\n default:\n }\n }\n forkRef.cleanup = () => {\n for (let i = 0; i < refs.length; i += 1) {\n const ref = refs[i];\n if (ref == null) {\n continue;\n }\n switch (typeof ref) {\n case 'function':\n {\n const cleanupCallback = cleanupCallbacks[i];\n if (typeof cleanupCallback === 'function') {\n cleanupCallback();\n } else {\n ref(null);\n }\n break;\n }\n case 'object':\n {\n ref.current = null;\n break;\n }\n default:\n }\n }\n };\n }\n };\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlTWVyZ2VkUmVmcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBcUQ7O0FBRXJEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVPO0FBQ1Asa0JBQWtCLGtFQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1Asa0JBQWtCLGtFQUFjO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsaUJBQWlCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlTWVyZ2VkUmVmcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1c2VSZWZXaXRoSW5pdCB9IGZyb20gXCIuL3VzZVJlZldpdGhJbml0LmpzXCI7XG5cbi8qKlxuICogTWVyZ2VzIHJlZnMgaW50byBhIHNpbmdsZSBtZW1vaXplZCBjYWxsYmFjayByZWYgb3IgYG51bGxgLlxuICogVGhpcyBtYWtlcyBzdXJlIG11bHRpcGxlIHJlZnMgYXJlIHVwZGF0ZWQgdG9nZXRoZXIgYW5kIGhhdmUgdGhlIHNhbWUgdmFsdWUuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIHVwIHRvIGZvdXIgcmVmcy4gSWYgeW91IG5lZWQgdG8gbWVyZ2UgbW9yZSwgb3IgaGF2ZSBhbiB1bnNwZWNpZmllZCBudW1iZXIgb2YgcmVmcyB0byBtZXJnZSxcbiAqIHVzZSBgdXNlTWVyZ2VkUmVmc05gIGluc3RlYWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZU1lcmdlZFJlZnMoYSwgYiwgYywgZCkge1xuICBjb25zdCBmb3JrUmVmID0gdXNlUmVmV2l0aEluaXQoY3JlYXRlRm9ya1JlZikuY3VycmVudDtcbiAgaWYgKGRpZENoYW5nZShmb3JrUmVmLCBhLCBiLCBjLCBkKSkge1xuICAgIHVwZGF0ZShmb3JrUmVmLCBbYSwgYiwgYywgZF0pO1xuICB9XG4gIHJldHVybiBmb3JrUmVmLmNhbGxiYWNrO1xufVxuXG4vKipcbiAqIE1lcmdlcyBhbiBhcnJheSBvZiByZWZzIGludG8gYSBzaW5nbGUgbWVtb2l6ZWQgY2FsbGJhY2sgcmVmIG9yIGBudWxsYC5cbiAqXG4gKiBJZiB5b3UgbmVlZCB0byBtZXJnZSBhIGZpeGVkIG51bWJlciAodXAgdG8gZm91cikgb2YgcmVmcywgdXNlIGB1c2VNZXJnZWRSZWZzYCBpbnN0ZWFkIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VNZXJnZWRSZWZzTihyZWZzKSB7XG4gIGNvbnN0IGZvcmtSZWYgPSB1c2VSZWZXaXRoSW5pdChjcmVhdGVGb3JrUmVmKS5jdXJyZW50O1xuICBpZiAoZGlkQ2hhbmdlTihmb3JrUmVmLCByZWZzKSkge1xuICAgIHVwZGF0ZShmb3JrUmVmLCByZWZzKTtcbiAgfVxuICByZXR1cm4gZm9ya1JlZi5jYWxsYmFjaztcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZvcmtSZWYoKSB7XG4gIHJldHVybiB7XG4gICAgY2FsbGJhY2s6IG51bGwsXG4gICAgY2xlYW51cDogbnVsbCxcbiAgICByZWZzOiBbXVxuICB9O1xufVxuZnVuY3Rpb24gZGlkQ2hhbmdlKGZvcmtSZWYsIGEsIGIsIGMsIGQpIHtcbiAgLy8gcHJldHRpZXItaWdub3JlXG4gIHJldHVybiBmb3JrUmVmLnJlZnNbMF0gIT09IGEgfHwgZm9ya1JlZi5yZWZzWzFdICE9PSBiIHx8IGZvcmtSZWYucmVmc1syXSAhPT0gYyB8fCBmb3JrUmVmLnJlZnNbM10gIT09IGQ7XG59XG5mdW5jdGlvbiBkaWRDaGFuZ2VOKGZvcmtSZWYsIG5ld1JlZnMpIHtcbiAgcmV0dXJuIGZvcmtSZWYucmVmcy5sZW5ndGggIT09IG5ld1JlZnMubGVuZ3RoIHx8IGZvcmtSZWYucmVmcy5zb21lKChyZWYsIGluZGV4KSA9PiByZWYgIT09IG5ld1JlZnNbaW5kZXhdKTtcbn1cbmZ1bmN0aW9uIHVwZGF0ZShmb3JrUmVmLCByZWZzKSB7XG4gIGZvcmtSZWYucmVmcyA9IHJlZnM7XG4gIGlmIChyZWZzLmV2ZXJ5KHJlZiA9PiByZWYgPT0gbnVsbCkpIHtcbiAgICBmb3JrUmVmLmNhbGxiYWNrID0gbnVsbDtcbiAgICByZXR1cm47XG4gIH1cbiAgZm9ya1JlZi5jYWxsYmFjayA9IGluc3RhbmNlID0+IHtcbiAgICBpZiAoZm9ya1JlZi5jbGVhbnVwKSB7XG4gICAgICBmb3JrUmVmLmNsZWFudXAoKTtcbiAgICAgIGZvcmtSZWYuY2xlYW51cCA9IG51bGw7XG4gICAgfVxuICAgIGlmIChpbnN0YW5jZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjbGVhbnVwQ2FsbGJhY2tzID0gQXJyYXkocmVmcy5sZW5ndGgpLmZpbGwobnVsbCk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlZnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgY29uc3QgcmVmID0gcmVmc1tpXTtcbiAgICAgICAgaWYgKHJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0eXBlb2YgcmVmKSB7XG4gICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBjb25zdCByZWZDbGVhbnVwID0gcmVmKGluc3RhbmNlKTtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiByZWZDbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgY2xlYW51cENhbGxiYWNrc1tpXSA9IHJlZkNsZWFudXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVmLmN1cnJlbnQgPSBpbnN0YW5jZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9ya1JlZi5jbGVhbnVwID0gKCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlZnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICBjb25zdCByZWYgPSByZWZzW2ldO1xuICAgICAgICAgIGlmIChyZWYgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHJlZikge1xuICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2xlYW51cENhbGxiYWNrID0gY2xlYW51cENhbGxiYWNrc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNsZWFudXBDYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgY2xlYW51cENhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJlZihudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn0iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/useMergedRefs.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/useOnFirstRender.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/useOnFirstRender.js ***!
|
||
\*************************************************************/
|
||
/***/ ((__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 */ useOnFirstRender: () => (/* binding */ useOnFirstRender)\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/* __next_internal_client_entry_do_not_use__ useOnFirstRender auto */ var _s = $RefreshSig$();\n\nfunction useOnFirstRender(fn) {\n _s();\n const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(true);\n if (ref.current) {\n ref.current = false;\n fn();\n }\n}\n_s(useOnFirstRender, \"QMBuJFIdzLIeqBcFwhMf246mjOM=\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlT25GaXJzdFJlbmRlci5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFFK0I7QUFDeEIsU0FBU0MsaUJBQWlCQyxFQUFFOztJQUNqQyxNQUFNQyxNQUFNSCx5Q0FBWSxDQUFDO0lBQ3pCLElBQUlHLElBQUlFLE9BQU8sRUFBRTtRQUNmRixJQUFJRSxPQUFPLEdBQUc7UUFDZEg7SUFDRjtBQUNGO0dBTmdCRCIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlT25GaXJzdFJlbmRlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBmdW5jdGlvbiB1c2VPbkZpcnN0UmVuZGVyKGZuKSB7XG4gIGNvbnN0IHJlZiA9IFJlYWN0LnVzZVJlZih0cnVlKTtcbiAgaWYgKHJlZi5jdXJyZW50KSB7XG4gICAgcmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICBmbigpO1xuICB9XG59Il0sIm5hbWVzIjpbIlJlYWN0IiwidXNlT25GaXJzdFJlbmRlciIsImZuIiwicmVmIiwidXNlUmVmIiwiY3VycmVudCJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/useOnFirstRender.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/useOnMount.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/useOnMount.js ***!
|
||
\*******************************************************/
|
||
/***/ ((__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 */ useOnMount: () => (/* binding */ useOnMount)\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/* __next_internal_client_entry_do_not_use__ useOnMount auto */ var _s = $RefreshSig$();\n\nconst EMPTY = [];\n/**\n * A React.useEffect equivalent that runs once, when the component is mounted.\n */ function useOnMount(fn) {\n _s();\n // TODO: uncomment once we enable eslint-plugin-react-compiler // eslint-disable-next-line react-compiler/react-compiler -- no need to put `fn` in the dependency array\n /* eslint-disable react-hooks/exhaustive-deps */ react__WEBPACK_IMPORTED_MODULE_0__.useEffect(fn, EMPTY);\n/* eslint-enable react-hooks/exhaustive-deps */ }\n_s(useOnMount, \"OD7bBpZva5O2jO+Puf00hKivP7c=\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlT25Nb3VudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFFK0I7QUFDL0IsTUFBTUMsUUFBUSxFQUFFO0FBRWhCOztDQUVDLEdBQ00sU0FBU0MsV0FBV0MsRUFBRTs7SUFDM0IsdUtBQXVLO0lBQ3ZLLDhDQUE4QyxHQUM5Q0gsNENBQWUsQ0FBQ0csSUFBSUY7QUFDcEIsNkNBQTZDLEdBQy9DO0dBTGdCQyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlT25Nb3VudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmNvbnN0IEVNUFRZID0gW107XG5cbi8qKlxuICogQSBSZWFjdC51c2VFZmZlY3QgZXF1aXZhbGVudCB0aGF0IHJ1bnMgb25jZSwgd2hlbiB0aGUgY29tcG9uZW50IGlzIG1vdW50ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VPbk1vdW50KGZuKSB7XG4gIC8vIFRPRE86IHVuY29tbWVudCBvbmNlIHdlIGVuYWJsZSBlc2xpbnQtcGx1Z2luLXJlYWN0LWNvbXBpbGVyIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1jb21waWxlci9yZWFjdC1jb21waWxlciAtLSBubyBuZWVkIHRvIHB1dCBgZm5gIGluIHRoZSBkZXBlbmRlbmN5IGFycmF5XG4gIC8qIGVzbGludC1kaXNhYmxlIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwcyAqL1xuICBSZWFjdC51c2VFZmZlY3QoZm4sIEVNUFRZKTtcbiAgLyogZXNsaW50LWVuYWJsZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHMgKi9cbn0iXSwibmFtZXMiOlsiUmVhY3QiLCJFTVBUWSIsInVzZU9uTW91bnQiLCJmbiIsInVzZUVmZmVjdCJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/useOnMount.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/useRefWithInit.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/useRefWithInit.js ***!
|
||
\***********************************************************/
|
||
/***/ ((__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 */ useRefWithInit: () => (/* binding */ useRefWithInit)\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/* __next_internal_client_entry_do_not_use__ useRefWithInit auto */ var _s = $RefreshSig$();\n\nconst UNINITIALIZED = {};\n/**\n * A React.useRef() that is initialized with a function. Note that it accepts an optional\n * initialization argument, so the initialization function doesn't need to be an inline closure.\n *\n * @usage\n * const ref = useRefWithInit(sortColumns, columns)\n */ function useRefWithInit(init, initArg) {\n _s();\n const ref = react__WEBPACK_IMPORTED_MODULE_0__.useRef(UNINITIALIZED);\n if (ref.current === UNINITIALIZED) {\n ref.current = init(initArg);\n }\n return ref;\n}\n_s(useRefWithInit, \"QMBuJFIdzLIeqBcFwhMf246mjOM=\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlUmVmV2l0aEluaXQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBRStCO0FBQy9CLE1BQU1DLGdCQUFnQixDQUFDO0FBRXZCOzs7Ozs7Q0FNQyxHQUVNLFNBQVNDLGVBQWVDLElBQUksRUFBRUMsT0FBTzs7SUFDMUMsTUFBTUMsTUFBTUwseUNBQVksQ0FBQ0M7SUFDekIsSUFBSUksSUFBSUUsT0FBTyxLQUFLTixlQUFlO1FBQ2pDSSxJQUFJRSxPQUFPLEdBQUdKLEtBQUtDO0lBQ3JCO0lBQ0EsT0FBT0M7QUFDVDtHQU5nQkgiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvdXRpbHMvZXNtL3VzZVJlZldpdGhJbml0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuY29uc3QgVU5JTklUSUFMSVpFRCA9IHt9O1xuXG4vKipcbiAqIEEgUmVhY3QudXNlUmVmKCkgdGhhdCBpcyBpbml0aWFsaXplZCB3aXRoIGEgZnVuY3Rpb24uIE5vdGUgdGhhdCBpdCBhY2NlcHRzIGFuIG9wdGlvbmFsXG4gKiBpbml0aWFsaXphdGlvbiBhcmd1bWVudCwgc28gdGhlIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byBiZSBhbiBpbmxpbmUgY2xvc3VyZS5cbiAqXG4gKiBAdXNhZ2VcbiAqICAgY29uc3QgcmVmID0gdXNlUmVmV2l0aEluaXQoc29ydENvbHVtbnMsIGNvbHVtbnMpXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVJlZldpdGhJbml0KGluaXQsIGluaXRBcmcpIHtcbiAgY29uc3QgcmVmID0gUmVhY3QudXNlUmVmKFVOSU5JVElBTElaRUQpO1xuICBpZiAocmVmLmN1cnJlbnQgPT09IFVOSU5JVElBTElaRUQpIHtcbiAgICByZWYuY3VycmVudCA9IGluaXQoaW5pdEFyZyk7XG4gIH1cbiAgcmV0dXJuIHJlZjtcbn0iXSwibmFtZXMiOlsiUmVhY3QiLCJVTklOSVRJQUxJWkVEIiwidXNlUmVmV2l0aEluaXQiLCJpbml0IiwiaW5pdEFyZyIsInJlZiIsInVzZVJlZiIsImN1cnJlbnQiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/useRefWithInit.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/useScrollLock.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/useScrollLock.js ***!
|
||
\**********************************************************/
|
||
/***/ ((__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 */ useScrollLock: () => (/* binding */ useScrollLock)\n/* harmony export */ });\n/* harmony import */ var _owner_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./owner.js */ \"(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\");\n/* harmony import */ var _addEventListener_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./addEventListener.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/addEventListener.js\");\n/* harmony import */ var _detectBrowser_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./detectBrowser.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/detectBrowser.js\");\n/* harmony import */ var _owner_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./owner.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/owner.js\");\n/* harmony import */ var _useIsoLayoutEffect_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./useIsoLayoutEffect.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _useTimeout_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./useTimeout.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useTimeout.js\");\n/* harmony import */ var _useAnimationFrame_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./useAnimationFrame.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useAnimationFrame.js\");\n/* harmony import */ var _empty_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./empty.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/empty.js\");\n/* __next_internal_client_entry_do_not_use__ useScrollLock auto */ var _s = $RefreshSig$();\n\n\n\n\n\n\n\n\nlet originalHtmlStyles = {};\nlet originalBodyStyles = {};\nlet originalHtmlScrollBehavior = '';\nfunction hasInsetScrollbars(referenceElement) {\n if (typeof document === 'undefined') {\n return false;\n }\n const doc = (0,_owner_js__WEBPACK_IMPORTED_MODULE_0__.ownerDocument)(referenceElement);\n const win = (0,_owner_js__WEBPACK_IMPORTED_MODULE_1__.getWindow)(doc);\n return win.innerWidth - doc.documentElement.clientWidth > 0;\n}\nfunction supportsStableScrollbarGutter(referenceElement) {\n const supported = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('scrollbar-gutter', 'stable');\n if (!supported || typeof document === 'undefined') {\n return false;\n }\n const doc = (0,_owner_js__WEBPACK_IMPORTED_MODULE_0__.ownerDocument)(referenceElement);\n const html = doc.documentElement;\n const body = doc.body;\n const scrollContainer = (0,_owner_js__WEBPACK_IMPORTED_MODULE_1__.isOverflowElement)(html) ? html : body;\n const originalScrollContainerOverflowY = scrollContainer.style.overflowY;\n const originalHtmlStyleGutter = html.style.scrollbarGutter;\n html.style.scrollbarGutter = 'stable';\n scrollContainer.style.overflowY = 'scroll';\n const before = scrollContainer.offsetWidth;\n scrollContainer.style.overflowY = 'hidden';\n const after = scrollContainer.offsetWidth;\n scrollContainer.style.overflowY = originalScrollContainerOverflowY;\n html.style.scrollbarGutter = originalHtmlStyleGutter;\n return before === after;\n}\nfunction preventScrollOverlayScrollbars(referenceElement) {\n const doc = (0,_owner_js__WEBPACK_IMPORTED_MODULE_0__.ownerDocument)(referenceElement);\n const html = doc.documentElement;\n const body = doc.body;\n // If an `overflow` style is present on <html>, we need to lock it, because a lock on <body>\n // won't have any effect.\n // But if <body> has an `overflow` style (like `overflow-x: hidden`), we need to lock it\n // instead, as sticky elements shift otherwise.\n const elementToLock = (0,_owner_js__WEBPACK_IMPORTED_MODULE_1__.isOverflowElement)(html) ? html : body;\n const originalElementToLockStyles = {\n overflowY: elementToLock.style.overflowY,\n overflowX: elementToLock.style.overflowX\n };\n Object.assign(elementToLock.style, {\n overflowY: 'hidden',\n overflowX: 'hidden'\n });\n return ()=>{\n Object.assign(elementToLock.style, originalElementToLockStyles);\n };\n}\nfunction preventScrollInsetScrollbars(referenceElement) {\n var _win_visualViewport;\n const doc = (0,_owner_js__WEBPACK_IMPORTED_MODULE_0__.ownerDocument)(referenceElement);\n const html = doc.documentElement;\n const body = doc.body;\n const win = (0,_owner_js__WEBPACK_IMPORTED_MODULE_1__.getWindow)(html);\n let scrollTop = 0;\n let scrollLeft = 0;\n let updateGutterOnly = false;\n const resizeFrame = _useAnimationFrame_js__WEBPACK_IMPORTED_MODULE_2__.AnimationFrame.create();\n var _win_visualViewport_scale;\n // Pinch-zoom in Safari causes a shift. Just don't lock scroll if there's any pinch-zoom.\n if (_detectBrowser_js__WEBPACK_IMPORTED_MODULE_3__.isWebKit && ((_win_visualViewport_scale = (_win_visualViewport = win.visualViewport) === null || _win_visualViewport === void 0 ? void 0 : _win_visualViewport.scale) !== null && _win_visualViewport_scale !== void 0 ? _win_visualViewport_scale : 1) !== 1) {\n return ()=>{};\n }\n function lockScroll() {\n /* DOM reads: */ const htmlStyles = win.getComputedStyle(html);\n const bodyStyles = win.getComputedStyle(body);\n const htmlScrollbarGutterValue = htmlStyles.scrollbarGutter || '';\n const hasBothEdges = htmlScrollbarGutterValue.includes('both-edges');\n const scrollbarGutterValue = hasBothEdges ? 'stable both-edges' : 'stable';\n scrollTop = html.scrollTop;\n scrollLeft = html.scrollLeft;\n originalHtmlStyles = {\n scrollbarGutter: html.style.scrollbarGutter,\n overflowY: html.style.overflowY,\n overflowX: html.style.overflowX\n };\n originalHtmlScrollBehavior = html.style.scrollBehavior;\n originalBodyStyles = {\n position: body.style.position,\n height: body.style.height,\n width: body.style.width,\n boxSizing: body.style.boxSizing,\n overflowY: body.style.overflowY,\n overflowX: body.style.overflowX,\n scrollBehavior: body.style.scrollBehavior\n };\n const isScrollableY = html.scrollHeight > html.clientHeight;\n const isScrollableX = html.scrollWidth > html.clientWidth;\n const hasConstantOverflowY = htmlStyles.overflowY === 'scroll' || bodyStyles.overflowY === 'scroll';\n const hasConstantOverflowX = htmlStyles.overflowX === 'scroll' || bodyStyles.overflowX === 'scroll';\n // Values can be negative in Firefox\n const scrollbarWidth = Math.max(0, win.innerWidth - body.clientWidth);\n const scrollbarHeight = Math.max(0, win.innerHeight - body.clientHeight);\n // Avoid shift due to the default <body> margin. This does cause elements to be clipped\n // with whitespace. Warn if <body> has margins?\n const marginY = parseFloat(bodyStyles.marginTop) + parseFloat(bodyStyles.marginBottom);\n const marginX = parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight);\n const elementToLock = (0,_owner_js__WEBPACK_IMPORTED_MODULE_1__.isOverflowElement)(html) ? html : body;\n updateGutterOnly = supportsStableScrollbarGutter(referenceElement);\n /*\n * DOM writes:\n * Do not read the DOM past this point!\n */ if (updateGutterOnly) {\n html.style.scrollbarGutter = scrollbarGutterValue;\n elementToLock.style.overflowY = 'hidden';\n elementToLock.style.overflowX = 'hidden';\n return;\n }\n Object.assign(html.style, {\n scrollbarGutter: scrollbarGutterValue,\n overflowY: 'hidden',\n overflowX: 'hidden'\n });\n if (isScrollableY || hasConstantOverflowY) {\n html.style.overflowY = 'scroll';\n }\n if (isScrollableX || hasConstantOverflowX) {\n html.style.overflowX = 'scroll';\n }\n Object.assign(body.style, {\n position: 'relative',\n height: marginY || scrollbarHeight ? \"calc(100dvh - \".concat(marginY + scrollbarHeight, \"px)\") : '100dvh',\n width: marginX || scrollbarWidth ? \"calc(100vw - \".concat(marginX + scrollbarWidth, \"px)\") : '100vw',\n boxSizing: 'border-box',\n overflow: 'hidden',\n scrollBehavior: 'unset'\n });\n body.scrollTop = scrollTop;\n body.scrollLeft = scrollLeft;\n html.setAttribute('data-base-ui-scroll-locked', '');\n html.style.scrollBehavior = 'unset';\n }\n function cleanup() {\n Object.assign(html.style, originalHtmlStyles);\n Object.assign(body.style, originalBodyStyles);\n if (!updateGutterOnly) {\n html.scrollTop = scrollTop;\n html.scrollLeft = scrollLeft;\n html.removeAttribute('data-base-ui-scroll-locked');\n html.style.scrollBehavior = originalHtmlScrollBehavior;\n }\n }\n function handleResize() {\n cleanup();\n resizeFrame.request(lockScroll);\n }\n lockScroll();\n const unsubscribeResize = (0,_addEventListener_js__WEBPACK_IMPORTED_MODULE_4__.addEventListener)(win, 'resize', handleResize);\n return ()=>{\n resizeFrame.cancel();\n cleanup();\n // Sometimes this cleanup can run after test teardown because it is called\n // in a `setTimeout(fn, 0)`. Guard the returned cleanup to avoid calling\n // `removeEventListener` when it is no longer available in tests.\n if (typeof win.removeEventListener === 'function') {\n unsubscribeResize();\n }\n };\n}\nclass ScrollLocker {\n acquire(referenceElement) {\n this.lockCount += 1;\n if (this.lockCount === 1 && this.restore === null) {\n this.timeoutLock.start(0, ()=>this.lock(referenceElement));\n }\n return this.release;\n }\n lock(referenceElement) {\n if (this.lockCount === 0 || this.restore !== null) {\n return;\n }\n const doc = (0,_owner_js__WEBPACK_IMPORTED_MODULE_0__.ownerDocument)(referenceElement);\n const html = doc.documentElement;\n const htmlOverflowY = (0,_owner_js__WEBPACK_IMPORTED_MODULE_1__.getWindow)(html).getComputedStyle(html).overflowY;\n // If the site author already hid overflow on <html>, respect it and bail out.\n if (htmlOverflowY === 'hidden' || htmlOverflowY === 'clip') {\n this.restore = _empty_js__WEBPACK_IMPORTED_MODULE_5__.NOOP;\n return;\n }\n const hasOverlayScrollbars = _detectBrowser_js__WEBPACK_IMPORTED_MODULE_3__.isIOS || !hasInsetScrollbars(referenceElement);\n // On iOS, scroll locking does not work if the navbar is collapsed. Due to numerous\n // side effects and bugs that arise on iOS, it must be researched extensively before\n // being enabled to ensure it doesn't cause the following issues:\n // - Textboxes must scroll into view when focused, nor cause a glitchy scroll animation.\n // - The navbar must not force itself into view and cause layout shift.\n // - Scroll containers must not flicker upon closing a popup when it has an exit animation.\n this.restore = hasOverlayScrollbars ? preventScrollOverlayScrollbars(referenceElement) : preventScrollInsetScrollbars(referenceElement);\n }\n constructor(){\n this.lockCount = 0;\n this.restore = null;\n this.timeoutLock = _useTimeout_js__WEBPACK_IMPORTED_MODULE_6__.Timeout.create();\n this.timeoutUnlock = _useTimeout_js__WEBPACK_IMPORTED_MODULE_6__.Timeout.create();\n this.release = ()=>{\n this.lockCount -= 1;\n if (this.lockCount === 0 && this.restore) {\n this.timeoutUnlock.start(0, this.unlock);\n }\n };\n this.unlock = ()=>{\n if (this.lockCount === 0 && this.restore) {\n var _this_restore, _this;\n (_this_restore = (_this = this).restore) === null || _this_restore === void 0 ? void 0 : _this_restore.call(_this);\n this.restore = null;\n }\n };\n }\n}\nconst SCROLL_LOCKER = new ScrollLocker();\n/**\n * Locks the scroll of the document when enabled.\n *\n * @param enabled - Whether to enable the scroll lock.\n * @param referenceElement - Element to use as a reference for lock calculations.\n */ function useScrollLock() {\n let enabled = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true, referenceElement = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;\n _s();\n (0,_useIsoLayoutEffect_js__WEBPACK_IMPORTED_MODULE_7__.useIsoLayoutEffect)({\n \"useScrollLock.useIsoLayoutEffect\": ()=>{\n if (!enabled) {\n return undefined;\n }\n return SCROLL_LOCKER.acquire(referenceElement);\n }\n }[\"useScrollLock.useIsoLayoutEffect\"], [\n enabled,\n referenceElement\n ]);\n}\n_s(useScrollLock, \"rT+Od18FJQl9I4WvSGvvYMbDkqU=\", false, function() {\n return [\n _useIsoLayoutEffect_js__WEBPACK_IMPORTED_MODULE_7__.useIsoLayoutEffect\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlU2Nyb2xsTG9jay5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBRTJEO0FBQ0Y7QUFDSjtBQUNHO0FBQ0s7QUFDbkI7QUFDYztBQUN0QjtBQUNsQyxJQUFJVSxxQkFBcUIsQ0FBQztBQUMxQixJQUFJQyxxQkFBcUIsQ0FBQztBQUMxQixJQUFJQyw2QkFBNkI7QUFDakMsU0FBU0MsbUJBQW1CQyxnQkFBZ0I7SUFDMUMsSUFBSSxPQUFPQyxhQUFhLGFBQWE7UUFDbkMsT0FBTztJQUNUO0lBQ0EsTUFBTUMsTUFBTVosd0RBQWFBLENBQUNVO0lBQzFCLE1BQU1HLE1BQU1aLG9EQUFXQSxDQUFDVztJQUN4QixPQUFPQyxJQUFJQyxVQUFVLEdBQUdGLElBQUlHLGVBQWUsQ0FBQ0MsV0FBVyxHQUFHO0FBQzVEO0FBQ0EsU0FBU0MsOEJBQThCUCxnQkFBZ0I7SUFDckQsTUFBTVEsWUFBWSxPQUFPQyxRQUFRLGVBQWVBLElBQUlDLFFBQVEsSUFBSUQsSUFBSUMsUUFBUSxDQUFDLG9CQUFvQjtJQUNqRyxJQUFJLENBQUNGLGFBQWEsT0FBT1AsYUFBYSxhQUFhO1FBQ2pELE9BQU87SUFDVDtJQUNBLE1BQU1DLE1BQU1aLHdEQUFhQSxDQUFDVTtJQUMxQixNQUFNVyxPQUFPVCxJQUFJRyxlQUFlO0lBQ2hDLE1BQU1PLE9BQU9WLElBQUlVLElBQUk7SUFDckIsTUFBTUMsa0JBQWtCM0IsNERBQWlCQSxDQUFDeUIsUUFBUUEsT0FBT0M7SUFDekQsTUFBTUUsbUNBQW1DRCxnQkFBZ0JFLEtBQUssQ0FBQ0MsU0FBUztJQUN4RSxNQUFNQywwQkFBMEJOLEtBQUtJLEtBQUssQ0FBQ0csZUFBZTtJQUMxRFAsS0FBS0ksS0FBSyxDQUFDRyxlQUFlLEdBQUc7SUFDN0JMLGdCQUFnQkUsS0FBSyxDQUFDQyxTQUFTLEdBQUc7SUFDbEMsTUFBTUcsU0FBU04sZ0JBQWdCTyxXQUFXO0lB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LENBQUNMLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQ00sTUFBTTtZQUN6QztRQUNGO2FBQ0FBLFNBQVM7WUFDUCxJQUFJLElBQUksQ0FBQ1QsU0FBUyxLQUFLLEtBQUssSUFBSSxDQUFDQyxPQUFPLEVBQUU7b0JBQ3hDO2lCQUFBLDZCQUFJLEVBQUNBLE9BQU8sY0FBWjtnQkFDQSxJQUFJLENBQUNBLE9BQU8sR0FBRztZQUNqQjtRQUNGOztBQXdCRjtBQUNBLE1BQU1TLGdCQUFnQixJQUFJWjtBQUUxQjs7Ozs7Q0FLQyxHQUNNLFNBQVNhO1FBQWNDLFVBQUFBLGlFQUFVLE1BQU0zRixtQkFBQUEsaUVBQW1COztJQUMvRFIsMEVBQWtCQTs0Q0FBQztZQUNqQixJQUFJLENBQUNtRyxTQUFTO2dCQUNaLE9BQU9DO1lBQ1Q7WUFDQSxPQUFPSCxjQUFjWCxPQUFPLENBQUM5RTtRQUMvQjsyQ0FBRztRQUFDMkY7UUFBUzNGO0tBQWlCO0FBQ2hDO0dBUGdCMEY7O1FBQ2RsRyxzRUFBa0JBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3V0aWxzL2VzbS91c2VTY3JvbGxMb2NrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgaXNPdmVyZmxvd0VsZW1lbnQgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcbmltcG9ydCB7IGFkZEV2ZW50TGlzdGVuZXIgfSBmcm9tIFwiLi9hZGRFdmVudExpc3RlbmVyLmpzXCI7XG5pbXBvcnQgeyBpc0lPUywgaXNXZWJLaXQgfSBmcm9tIFwiLi9kZXRlY3RCcm93c2VyLmpzXCI7XG5pbXBvcnQgeyBvd25lckRvY3VtZW50LCBvd25lcldpbmRvdyB9IGZyb20gXCIuL293bmVyLmpzXCI7XG5pbXBvcnQgeyB1c2VJc29MYXlvdXRFZmZlY3QgfSBmcm9tIFwiLi91c2VJc29MYXlvdXRFZmZlY3QuanNcIjtcbmltcG9ydCB7IFRpbWVvdXQgfSBmcm9tIFwiLi91c2VUaW1lb3V0LmpzXCI7XG5pbXBvcnQgeyBBbmltYXRpb25GcmFtZSB9IGZyb20gXCIuL3VzZUFuaW1hdGlvbkZyYW1lLmpzXCI7XG5pbXBvcnQgeyBOT09QIH0gZnJvbSBcIi4vZW1wdHkuanNcIjtcbmxldCBvcmlnaW5hbEh0bWxTdHlsZXMgPSB7fTtcbmxldCBvcmlnaW5hbEJvZHlTdHlsZXMgPSB7fTtcbmxldCBvcmlnaW5hbEh0bWxTY3JvbGxCZWhhdmlvciA9ICcnO1xuZnVuY3Rpb24gaGFzSW5zZXRTY3JvbGxiYXJzKHJlZmVyZW5jZUVsZW1lbnQpIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChyZWZlcmVuY2VFbGVtZW50KTtcbiAgY29uc3Qgd2luID0gb3duZXJXaW5kb3coZG9jKTtcbiAgcmV0dXJuIHdpbi5pbm5lcldpZHRoIC0gZG9jLmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCA+IDA7XG59XG5mdW5jdGlvbiBzdXBwb3J0c1N0YWJsZVNjcm9sbGJhckd1dHRlcihyZWZlcmVuY2VFbGVtZW50KSB7XG4gIGNvbnN0IHN1cHBvcnRlZCA9IHR5cGVvZiBDU1MgIT09ICd1bmRlZmluZWQnICYmIENTUy5zdXBwb3J0cyAmJiBDU1Muc3VwcG9ydHMoJ3Njcm9sbGJhci1ndXR0ZXInLCAnc3RhYmxlJyk7XG4gIGlmICghc3VwcG9ydGVkIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChyZWZlcmVuY2VFbGVtZW50KTtcbiAgY29uc3QgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gIGNvbnN0IGJvZHkgPSBkb2MuYm9keTtcbiAgY29uc3Qgc2Nyb2xsQ29udGFpbmVyID0gaXNPdmVyZmxvd0VsZW1lbnQoaHRtbCkgPyBodG1sIDogYm9keTtcbiAgY29uc3Qgb3JpZ2luYWxTY3JvbGxDb250YWluZXJPdmVyZmxvd1kgPSBzY3JvbGxDb250YWluZXIuc3R5bGUub3ZlcmZsb3dZO1xuICBjb25zdCBvcmlnaW5hbEh0bWxTdHlsZUd1dHRlciA9IGh0bWwuc3R5bGUuc2Nyb2xsYmFyR3V0dGVyO1xuICBodG1sLnN0eWxlLnNjcm9sbGJhckd1dHRlciA9ICdzdGFibGUnO1xuICBzY3JvbGxDb250YWluZXIuc3R5bGUub3ZlcmZsb3dZID0gJ3Njcm9sbCc7XG4gIGNvbnN0IGJlZm9yZSA9IHNjcm9sbENvbnRhaW5lci5vZmZzZXRXaWR0aDtcbiAgc2Nyb2xsQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93WSA9ICdoaWRkZW4nO1xuICBjb25zdCBhZnRlciA9IHNjcm9sbENvbnRhaW5lci5vZmZzZXRXaWR0aDtcbiAgc2Nyb2xsQ29udGFpbmVyLnN0eWxlLm92ZXJmbG93WSA9IG9yaWdpbmFsU2Nyb2xsQ29udGFpbmVyT3ZlcmZsb3dZO1xuICBodG1sLnN0eWxlLnNjcm9sbGJhckd1dHRlciA9IG9yaWdpbmFsSHRtbFN0eWxlR3V0dGVyO1xuICByZXR1cm4gYmVmb3JlID09PSBhZnRlcjtcbn1cbmZ1bmN0aW9uIHByZXZlbnRTY3JvbGxPdmVybGF5U2Nyb2xsYmFycyhyZWZlcmVuY2VFbGVtZW50KSB7XG4gIGNvbnN0IGRvYyA9IG93bmVyRG9jdW1lbnQocmVmZXJlbmNlRWxlbWVudCk7XG4gIGNvbnN0IGh0bWwgPSBkb2MuZG9jdW1lbnRFbGVtZW50O1xuICBjb25zdCBib2R5ID0gZG9jLmJvZHk7XG5cbiAgLy8gSWYgYW4gYG92ZXJmbG93YCBzdHlsZSBpcyBwcmVzZW50IG9uIDxodG1sPiwgd2UgbmVlZCB0byBsb2NrIGl0LCBiZWNhdXNlIGEgbG9jayBvbiA8Ym9keT5cbiAgLy8gd29uJ3QgaGF2ZSBhbnkgZWZmZWN0LlxuICAvLyBCdXQgaWYgPGJvZHk+IGhhcyBhbiBgb3ZlcmZsb3dgIHN0eWxlIChsaWtlIGBvdmVyZmxvdy14OiBoaWRkZW5gKSwgd2UgbmVlZCB0byBsb2NrIGl0XG4gIC8vIGluc3RlYWQsIGFzIHN0aWNreSBlbGVtZW50cyBzaGlmdCBvdGhlcndpc2UuXG4gIGNvbnN0IGVsZW1lbnRUb0xvY2sgPSBpc092ZXJmbG93RWxlbWVudChodG1sKSA/IGh0bWwgOiBib2R5O1xuICBjb25zdCBvcmlnaW5hbEVsZW1lbnRUb0xvY2tTdHlsZXMgPSB7XG4gICAgb3ZlcmZsb3dZOiBlbGVtZW50VG9Mb2NrLnN0eWxlLm92ZXJmbG93WSxcbiAgICBvdmVyZmxvd1g6IGVsZW1lbnRUb0xvY2suc3R5bGUub3ZlcmZsb3dYXG4gIH07XG4gIE9iamVjdC5hc3NpZ24oZWxlbWVudFRvTG9jay5zdHlsZSwge1xuICAgIG92ZXJmbG93WTogJ2hpZGRlbicsXG4gICAgb3ZlcmZsb3dYOiAnaGlkZGVuJ1xuICB9KTtcbiAgcmV0dXJuICgpID0+IHtcbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnRUb0xvY2suc3R5bGUsIG9yaWdpbmFsRWxlbWVudFRvTG9ja1N0eWxlcyk7XG4gIH07XG59XG5mdW5jdGlvbiBwcmV2ZW50U2Nyb2xsSW5zZXRTY3JvbGxiYXJzKHJlZmVyZW5jZUVsZW1lbnQpIHtcbiAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChyZWZlcmVuY2VFbGVtZW50KTtcbiAgY29uc3QgaHRtbCA9IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG4gIGNvbnN0IGJvZHkgPSBkb2MuYm9keTtcbiAgY29uc3Qgd2luID0gb3duZXJXaW5kb3coaHRtbCk7XG4gIGxldCBzY3JvbGxUb3AgPSAwO1xuICBsZXQgc2Nyb2xsTGVmdCA9IDA7XG4gIGxldCB1cGRhdGVHdXR0ZXJPbmx5ID0gZmFsc2U7XG4gIGNvbnN0IHJlc2l6ZUZyYW1lID0gQW5pbWF0aW9uRnJhbWUuY3JlYXRlKCk7XG5cbiAgLy8gUGluY2gtem9vbSBpbiBTYWZhcmkgY2F1c2VzIGEgc2hpZnQuIEp1c3QgZG9uJ3QgbG9jayBzY3JvbGwgaWYgdGhlcmUncyBhbnkgcGluY2gtem9vbS5cbiAgaWYgKGlzV2ViS2l0ICYmICh3aW4udmlzdWFsVmlld3BvcnQ/LnNjYWxlID8/IDEpICE9PSAxKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG4gIGZ1bmN0aW9uIGxvY2tTY3JvbGwoKSB7XG4gICAgLyogRE9NIHJlYWRzOiAqL1xuXG4gICAgY29uc3QgaHRtbFN0eWxlcyA9IHdpbi5nZXRDb21wdXRlZFN0eWxlKGh0bWwpO1xuICAgIGNvbnN0IGJvZHlTdHlsZXMgPSB3aW4uZ2V0Q29tcHV0ZWRTdHlsZShib2R5KTtcbiAgICBjb25zdCBodG1sU2Nyb2xsYmFyR3V0dGVyVmFsdWUgPSBodG1sU3R5bGVzLnNjcm9sbGJhckd1dHRlciB8fCAnJztcbiAgICBjb25zdCBoYXNCb3RoRWRnZXMgPSBodG1sU2Nyb2xsYmFyR3V0dGVyVmFsdWUuaW5jbHVkZXMoJ2JvdGgtZWRnZXMnKTtcbiAgICBjb25zdCBzY3JvbGxiYXJHdXR0ZXJWYWx1ZSA9IGhhc0JvdGhFZGdlcyA/ICdzdGFibGUgYm90aC1lZGdlcycgOiAnc3RhYmxlJztcbiAgICBzY3JvbGxUb3AgPSBodG1sLnNjcm9sbFRvcDtcbiAgICBzY3JvbGxMZWZ0ID0gaHRtbC5zY3JvbGxMZWZ0O1xuICAgIG9yaWdpbmFsSHRtbFN0eWxlcyA9IHtcbiAgICAgIHNjcm9sbGJhckd1dHRlcjogaHRtbC5zdHlsZS5zY3JvbGxiYXJHdXR0ZXIsXG4gICAgICBvdmVyZmxvd1k6IGh0bWwuc3R5bGUub3ZlcmZsb3dZLFxuICAgICAgb3ZlcmZsb3dYOiBodG1sLnN0eWxlLm92ZXJmbG93WFxuICAgIH07XG4gICAgb3JpZ2luYWxIdG1sU2Nyb2xsQmVoYXZpb3IgPSBodG1sLnN0eWxlLnNjcm9sbEJlaGF2aW9yO1xuICAgIG9yaWdpbmFsQm9keVN0eWxlcyA9IHtcbiAgICAgIHBvc2l0aW9uOiBib2R5LnN0eWxlLnBvc2l0aW9uLFxuICAgICAgaGVpZ2h0OiBib2R5LnN0eWxlLmhlaWdodCxcbiAgICAgIHdpZHRoOiBib2R5LnN0eWxlLndpZHRoLFxuICAgICAgYm94U2l6aW5nOiBib2R5LnN0eWxlLmJveFNpemluZyxcbiAgICAgIG92ZXJmbG93WTogYm9keS5zdHlsZS5vdmVyZmxvd1ksXG4gICAgICBvdmVyZmxvd1g6IGJvZHkuc3R5bGUub3ZlcmZsb3dYLFxuICAgICAgc2Nyb2xsQmVoYXZpb3I6IGJvZHkuc3R5bGUuc2Nyb2xsQmVoYXZpb3JcbiAgICB9O1xuICAgIGNvbnN0IGlzU2Nyb2xsYWJsZVkgPSBodG1sLnNjcm9sbEhlaWdodCA+IGh0bWwuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IGlzU2Nyb2xsYWJsZVggPSBodG1sLnNjcm9sbFdpZHRoID4gaHRtbC5jbGllbnRXaWR0aDtcbiAgICBjb25zdCBoYXNDb25zdGFudE92ZXJmbG93WSA9IGh0bWxTdHlsZXMub3ZlcmZsb3dZID09PSAnc2Nyb2xsJyB8fCBib2R5U3R5bGVzLm92ZXJmbG93WSA9PT0gJ3Njcm9sbCc7XG4gICAgY29uc3QgaGFzQ29uc3RhbnRPdmVyZmxvd1ggPSBodG1sU3R5bGVzLm92ZXJmbG93WCA9PT0gJ3Njcm9sbCcgfHwgYm9keVN0eWxlcy5vdmVyZmxvd1ggPT09ICdzY3JvbGwnO1xuXG4gICAgLy8gVmFsdWVzIGNhbiBiZSBuZWdhdGl2ZSBpbiBGaXJlZm94XG4gICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSBNYXRoLm1heCgwLCB3aW4uaW5uZXJXaWR0aCAtIGJvZHkuY2xpZW50V2lkdGgpO1xuICAgIGNvbnN0IHNjcm9sbGJhckhlaWdodCA9IE1hdGgubWF4KDAsIHdpbi5pbm5lckhlaWdodCAtIGJvZHkuY2xpZW50SGVpZ2h0KTtcblxuICAgIC8vIEF2b2lkIHNoaWZ0IGR1ZSB0byB0aGUgZGVmYXVsdCA8Ym9keT4gbWFyZ2luLiBUaGlzIGRvZXMgY2F1c2UgZWxlbWVudHMgdG8gYmUgY2xpcHBlZFxuICAgIC8vIHdpdGggd2hpdGVzcGFjZS4gV2FybiBpZiA8Ym9keT4gaGFzIG1hcmdpbnM/XG4gICAgY29uc3QgbWFyZ2luWSA9IHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5Ub3ApICsgcGFyc2VGbG9hdChib2R5U3R5bGVzLm1hcmdpbkJvdHRvbSk7XG4gICAgY29uc3QgbWFyZ2luWCA9IHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5MZWZ0KSArIHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5SaWdodCk7XG4gICAgY29uc3QgZWxlbWVudFRvTG9jayA9IGlzT3ZlcmZsb3dFbGVtZW50KGh0bWwpID8gaHRtbCA6IGJvZHk7XG4gICAgdXBkYXRlR3V0dGVyT25seSA9IHN1cHBvcnRzU3RhYmxlU2Nyb2xsYmFyR3V0dGVyKHJlZmVyZW5jZUVsZW1lbnQpO1xuXG4gICAgLypcbiAgICAgKiBET00gd3JpdGVzOlxuICAgICAqIERvIG5vdCByZWFkIHRoZSBET00gcGFzdCB0aGlzIHBvaW50IVxuICAgICAqL1xuXG4gICAgaWYgKHVwZGF0ZUd1dHRlck9ubHkpIHtcbiAgICAgIGh0bWwuc3R5bGUuc2Nyb2xsYmFyR3V0dGVyID0gc2Nyb2xsYmFyR3V0dGVyVmFsdWU7XG4gICAgICBlbGVtZW50VG9Mb2NrLnN0eWxlLm92ZXJmbG93WSA9ICdoaWRkZW4nO1xuICAgICAgZWxlbWVudFRvTG9jay5zdHlsZS5vdmVyZmxvd1ggPSAnaGlkZGVuJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgT2JqZWN0LmFzc2lnbihodG1sLnN0eWxlLCB7XG4gICAgICBzY3JvbGxiYXJHdXR0ZXI6IHNjcm9sbGJhckd1dHRlclZhbHVlLFxuICAgICAgb3ZlcmZsb3dZOiAnaGlkZGVuJyxcbiAgICAgIG92ZXJmbG93WDogJ2hpZGRlbidcbiAgICB9KTtcbiAgICBpZiAoaXNTY3JvbGxhYmxlWSB8fCBoYXNDb25zdGFudE92ZXJmbG93WSkge1xuICAgICAgaHRtbC5zdHlsZS5vdmVyZmxvd1kgPSAnc2Nyb2xsJztcbiAgICB9XG4gICAgaWYgKGlzU2Nyb2xsYWJsZVggfHwgaGFzQ29uc3RhbnRPdmVyZmxvd1gpIHtcbiAgICAgIGh0bWwuc3R5bGUub3ZlcmZsb3dYID0gJ3Njcm9sbCc7XG4gICAgfVxuICAgIE9iamVjdC5hc3NpZ24oYm9keS5zdHlsZSwge1xuICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICBoZWlnaHQ6IG1hcmdpblkgfHwgc2Nyb2xsYmFySGVpZ2h0ID8gYGNhbGMoMTAwZHZoIC0gJHttYXJnaW5ZICsgc2Nyb2xsYmFySGVpZ2h0fXB4KWAgOiAnMTAwZHZoJyxcbiAgICAgIHdpZHRoOiBtYXJnaW5YIHx8IHNjcm9sbGJhcldpZHRoID8gYGNhbGMoMTAwdncgLSAke21hcmdpblggKyBzY3JvbGxiYXJXaWR0aH1weClgIDogJzEwMHZ3JyxcbiAgICAgIGJveFNpemluZzogJ2JvcmRlci1ib3gnLFxuICAgICAgb3ZlcmZsb3c6ICdoaWRkZW4nLFxuICAgICAgc2Nyb2xsQmVoYXZpb3I6ICd1bnNldCdcbiAgICB9KTtcbiAgICBib2R5LnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgICBib2R5LnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgIGh0bWwuc2V0QXR0cmlidXRlKCdkYXRhLWJhc2UtdWktc2Nyb2xsLWxvY2tlZCcsICcnKTtcbiAgICBodG1sLnN0eWxlLnNjcm9sbEJlaGF2aW9yID0gJ3Vuc2V0JztcbiAgfVxuICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgIE9iamVjdC5hc3NpZ24oaHRtbC5zdHlsZSwgb3JpZ2luYWxIdG1sU3R5bGVzKTtcbiAgICBPYmplY3QuYXNzaWduKGJvZHkuc3R5bGUsIG9yaWdpbmFsQm9keVN0eWxlcyk7XG4gICAgaWYgKCF1cGRhdGVHdXR0ZXJPbmx5KSB7XG4gICAgICBodG1sLnNjcm9sbFRvcCA9IHNjcm9sbFRvcDtcbiAgICAgIGh0bWwuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgICBodG1sLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS1iYXNlLXVpLXNjcm9sbC1sb2NrZWQnKTtcbiAgICAgIGh0bWwuc3R5bGUuc2Nyb2xsQmVoYXZpb3IgPSBvcmlnaW5hbEh0bWxTY3JvbGxCZWhhdmlvcjtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gaGFuZGxlUmVzaXplKCkge1xuICAgIGNsZWFudXAoKTtcbiAgICByZXNpemVGcmFtZS5yZXF1ZXN0KGxvY2tTY3JvbGwpO1xuICB9XG4gIGxvY2tTY3JvbGwoKTtcbiAgY29uc3QgdW5zdWJzY3JpYmVSZXNpemUgPSBhZGRFdmVudExpc3RlbmVyKHdpbiwgJ3Jlc2l6ZScsIGhhbmRsZVJlc2l6ZSk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgcmVzaXplRnJhbWUuY2FuY2VsKCk7XG4gICAgY2xlYW51cCgpO1xuICAgIC8vIFNvbWV0aW1lcyB0aGlzIGNsZWFudXAgY2FuIHJ1biBhZnRlciB0ZXN0IHRlYXJkb3duIGJlY2F1c2UgaXQgaXMgY2FsbGVkXG4gICAgLy8gaW4gYSBgc2V0VGltZW91dChmbiwgMClgLiBHdWFyZCB0aGUgcmV0dXJuZWQgY2xlYW51cCB0byBhdm9pZCBjYWxsaW5nXG4gICAgLy8gYHJlbW92ZUV2ZW50TGlzdGVuZXJgIHdoZW4gaXQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSBpbiB0ZXN0cy5cbiAgICBpZiAodHlwZW9mIHdpbi5yZW1vdmVFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB1bnN1YnNjcmliZVJlc2l6ZSgpO1xuICAgIH1cbiAgfTtcbn1cbmNsYXNzIFNjcm9sbExvY2tlciB7XG4gIGxvY2tDb3VudCA9IDA7XG4gIHJlc3RvcmUgPSBudWxsO1xuICB0aW1lb3V0TG9jayA9IFRpbWVvdXQuY3JlYXRlKCk7XG4gIHRpbWVvdXRVbmxvY2sgPSBUaW1lb3V0LmNyZWF0ZSgpO1xuICBhY3F1aXJlKHJlZmVyZW5jZUVsZW1lbnQpIHtcbiAgICB0aGlzLmxvY2tDb3VudCArPSAxO1xuICAgIGlmICh0aGlzLmxvY2tDb3VudCA9PT0gMSAmJiB0aGlzLnJlc3RvcmUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMudGltZW91dExvY2suc3RhcnQoMCwgKCkgPT4gdGhpcy5sb2NrKHJlZmVyZW5jZUVsZW1lbnQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVsZWFzZTtcbiAgfVxuICByZWxlYXNlID0gKCkgPT4ge1xuICAgIHRoaXMubG9ja0NvdW50IC09IDE7XG4gICAgaWYgKHRoaXMubG9ja0NvdW50ID09PSAwICYmIHRoaXMucmVzdG9yZSkge1xuICAgICAgdGhpcy50aW1lb3V0VW5sb2NrLnN0YXJ0KDAsIHRoaXMudW5sb2NrKTtcbiAgICB9XG4gIH07XG4gIHVubG9jayA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5sb2NrQ291bnQgPT09IDAgJiYgdGhpcy5yZXN0b3JlKSB7XG4gICAgICB0aGlzLnJlc3RvcmU/LigpO1xuICAgICAgdGhpcy5yZXN0b3JlID0gbnVsbDtcbiAgICB9XG4gIH07XG4gIGxvY2socmVmZXJlbmNlRWxlbWVudCkge1xuICAgIGlmICh0aGlzLmxvY2tDb3VudCA9PT0gMCB8fCB0aGlzLnJlc3RvcmUgIT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZG9jID0gb3duZXJEb2N1bWVudChyZWZlcmVuY2VFbGVtZW50KTtcbiAgICBjb25zdCBodG1sID0gZG9jLmRvY3VtZW50RWxlbWVudDtcbiAgICBjb25zdCBodG1sT3ZlcmZsb3dZID0gb3duZXJXaW5kb3coaHRtbCkuZ2V0Q29tcHV0ZWRTdHlsZShodG1sKS5vdmVyZmxvd1k7XG5cbiAgICAvLyBJZiB0aGUgc2l0ZSBhdXRob3IgYWxyZWFkeSBoaWQgb3ZlcmZsb3cgb24gPGh0bWw+LCByZXNwZWN0IGl0IGFuZCBiYWlsIG91dC5cbiAgICBpZiAoaHRtbE92ZXJmbG93WSA9PT0gJ2hpZGRlbicgfHwgaHRtbE92ZXJmbG93WSA9PT0gJ2NsaXAnKSB7XG4gICAgICB0aGlzLnJlc3RvcmUgPSBOT09QO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoYXNPdmVybGF5U2Nyb2xsYmFycyA9IGlzSU9TIHx8ICFoYXNJbnNldFNjcm9sbGJhcnMocmVmZXJlbmNlRWxlbWVudCk7XG5cbiAgICAvLyBPbiBpT1MsIHNjcm9sbCBsb2NraW5nIGRvZXMgbm90IHdvcmsgaWYgdGhlIG5hdmJhciBpcyBjb2xsYXBzZWQuIER1ZSB0byBudW1lcm91c1xuICAgIC8vIHNpZGUgZWZmZWN0cyBhbmQgYnVncyB0aGF0IGFyaXNlIG9uIGlPUywgaXQgbXVzdCBiZSByZXNlYXJjaGVkIGV4dGVuc2l2ZWx5IGJlZm9yZVxuICAgIC8vIGJlaW5nIGVuYWJsZWQgdG8gZW5zdXJlIGl0IGRvZXNuJ3QgY2F1c2UgdGhlIGZvbGxvd2luZyBpc3N1ZXM6XG4gICAgLy8gLSBUZXh0Ym94ZXMgbXVzdCBzY3JvbGwgaW50byB2aWV3IHdoZW4gZm9jdXNlZCwgbm9yIGNhdXNlIGEgZ2xpdGNoeSBzY3JvbGwgYW5pbWF0aW9uLlxuICAgIC8vIC0gVGhlIG5hdmJhciBtdXN0IG5vdCBmb3JjZSBpdHNlbGYgaW50byB2aWV3IGFuZCBjYXVzZSBsYXlvdXQgc2hpZnQuXG4gICAgLy8gLSBTY3JvbGwgY29udGFpbmVycyBtdXN0IG5vdCBmbGlja2VyIHVwb24gY2xvc2luZyBhIHBvcHVwIHdoZW4gaXQgaGFzIGFuIGV4aXQgYW5pbWF0aW9uLlxuICAgIHRoaXMucmVzdG9yZSA9IGhhc092ZXJsYXlTY3JvbGxiYXJzID8gcHJldmVudFNjcm9sbE92ZXJsYXlTY3JvbGxiYXJzKHJlZmVyZW5jZUVsZW1lbnQpIDogcHJldmVudFNjcm9sbEluc2V0U2Nyb2xsYmFycyhyZWZlcmVuY2VFbGVtZW50KTtcbiAgfVxufVxuY29uc3QgU0NST0xMX0xPQ0tFUiA9IG5ldyBTY3JvbGxMb2NrZXIoKTtcblxuLyoqXG4gKiBMb2NrcyB0aGUgc2Nyb2xsIG9mIHRoZSBkb2N1bWVudCB3aGVuIGVuYWJsZWQuXG4gKlxuICogQHBhcmFtIGVuYWJsZWQgLSBXaGV0aGVyIHRvIGVuYWJsZSB0aGUgc2Nyb2xsIGxvY2suXG4gKiBAcGFyYW0gcmVmZXJlbmNlRWxlbWVudCAtIEVsZW1lbnQgdG8gdXNlIGFzIGEgcmVmZXJlbmNlIGZvciBsb2NrIGNhbGN1bGF0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVNjcm9sbExvY2soZW5hYmxlZCA9IHRydWUsIHJlZmVyZW5jZUVsZW1lbnQgPSBudWxsKSB7XG4gIHVzZUlzb0xheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gU0NST0xMX0xPQ0tFUi5hY3F1aXJlKHJlZmVyZW5jZUVsZW1lbnQpO1xuICB9LCBbZW5hYmxlZCwgcmVmZXJlbmNlRWxlbWVudF0pO1xufSJdLCJuYW1lcyI6WyJpc092ZXJmbG93RWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJpc0lPUyIsImlzV2ViS2l0Iiwib3duZXJEb2N1bWVudCIsIm93bmVyV2luZG93IiwidXNlSXNvTGF5b3V0RWZmZWN0IiwiVGltZW91dCIsIkFuaW1hdGlvbkZyYW1lIiwiTk9PUCIsIm9yaWdpbmFsSHRtbFN0eWxlcyIsIm9yaWdpbmFsQm9keVN0eWxlcyIsIm9yaWdpbmFsSHRtbFNjcm9sbEJlaGF2aW9yIiwiaGFzSW5zZXRTY3JvbGxiYXJzIiwicmVmZXJlbmNlRWxlbWVudCIsImRvY3VtZW50IiwiZG9jIiwid2luIiwiaW5uZXJXaWR0aCIsImRvY3VtZW50RWxlbWVudCIsImNsaWVudFdpZHRoIiwic3VwcG9ydHNTdGFibGVTY3JvbGxiYXJHdXR0ZXIiLCJzdXBwb3J0ZWQiLCJDU1MiLCJzdXBwb3J0cyIsImh0bWwiLCJib2R5Iiwic2Nyb2xsQ29udGFpbmVyIiwib3JpZ2luYWxTY3JvbGxDb250YWluZXJPdmVyZmxvd1kiLCJzdHlsZSIsIm92ZXJmbG93WSIsIm9yaWdpbmFsSHRtbFN0eWxlR3V0dGVyIiwic2Nyb2xsYmFyR3V0dGVyIiwiYmVmb3JlIiwib2Zmc2V0V2lkdGgiLCJhZnRlciIsInByZXZlbnRTY3JvbGxPdmVybGF5U2Nyb2xsYmFycyIsImVsZW1lbnRUb0xvY2siLCJvcmlnaW5hbEVsZW1lbnRUb0xvY2tTdHlsZXMiLCJvdmVyZmxvd1giLCJPYmplY3QiLCJhc3NpZ24iLCJwcmV2ZW50U2Nyb2xsSW5zZXRTY3JvbGxiYXJzIiwic2Nyb2xsVG9wIiwic2Nyb2xsTGVmdCIsInVwZGF0ZUd1dHRlck9ubHkiLCJyZXNpemVGcmFtZSIsImNyZWF0ZSIsInZpc3VhbFZpZXdwb3J0Iiwic2NhbGUiLCJsb2NrU2Nyb2xsIiwiaHRtbFN0eWxlcyIsImdldENvbXB1dGVkU3R5bGUiLCJib2R5U3R5bGVzIiwiaHRtbFNjcm9sbGJhckd1dHRlclZhbHVlIiwiaGFzQm90aEVkZ2VzIiwiaW5jbHVkZXMiLCJzY3JvbGxiYXJHdXR0ZXJWYWx1ZSIsInNjcm9sbEJlaGF2aW9yIiwicG9zaXRpb24iLCJoZWlnaHQiLCJ3aWR0aCIsImJveFNpemluZyIsImlzU2Nyb2xsYWJsZVkiLCJzY3JvbGxIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJpc1Njcm9sbGFibGVYIiwic2Nyb2xsV2lkdGgiLCJoYXNDb25zdGFudE92ZXJmbG93WSIsImhhc0NvbnN0YW50T3ZlcmZsb3dYIiwic2Nyb2xsYmFyV2lkdGgiLCJNYXRoIiwibWF4Iiwic2Nyb2xsYmFySGVpZ2h0IiwiaW5uZXJIZWlnaHQiLCJtYXJnaW5ZIiwicGFyc2VGbG9hdCIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpblgiLCJtYXJnaW5MZWZ0IiwibWFyZ2luUmlnaHQiLCJvdmVyZmxvdyIsInNldEF0dHJpYnV0ZSIsImNsZWFudXAiLCJyZW1vdmVBdHRyaWJ1dGUiLCJoYW5kbGVSZXNpemUiLCJyZXF1ZXN0IiwidW5zdWJzY3JpYmVSZXNpemUiLCJjYW5jZWwiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiU2Nyb2xsTG9ja2VyIiwiYWNxdWlyZSIsImxvY2tDb3VudCIsInJlc3RvcmUiLCJ0aW1lb3V0TG9jayIsInN0YXJ0IiwibG9jayIsInJlbGVhc2UiLCJodG1sT3ZlcmZsb3dZIiwiaGFzT3ZlcmxheVNjcm9sbGJhcnMiLCJ0aW1lb3V0VW5sb2NrIiwidW5sb2NrIiwiU0NST0xMX0xPQ0tFUiIsInVzZVNjcm9sbExvY2siLCJlbmFibGVkIiwidW5kZWZpbmVkIl0sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/useScrollLock.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/useStableCallback.js":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/useStableCallback.js ***!
|
||
\**************************************************************/
|
||
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("var react__WEBPACK_IMPORTED_MODULE_0___namespace_cache;\n__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ useStableCallback: () => (/* binding */ useStableCallback)\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 _useRefWithInit_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./useRefWithInit.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useRefWithInit.js\");\n/* __next_internal_client_entry_do_not_use__ useStableCallback auto */ var _s = $RefreshSig$();\n\n\n// https://github.com/mui/material-ui/issues/41190#issuecomment-2040873379\nconst useInsertionEffect = /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2)))[\"useInsertionEffect\".concat(Math.random().toFixed(1)).slice(0, -3)];\nconst useSafeInsertionEffect = // React 17 doesn't have useInsertionEffect.\nuseInsertionEffect && // Preact replaces useInsertionEffect with useLayoutEffect and fires too late.\nuseInsertionEffect !== react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect ? useInsertionEffect : (fn)=>fn();\n/**\n * Stabilizes the function passed so it's always the same between renders.\n *\n * The function becomes non-reactive to any values it captures.\n * It can safely be passed as a dependency of `React.useMemo` and `React.useEffect` without re-triggering them if its captured values change.\n *\n * The function must only be called inside effects and event handlers, never during render (which throws an error).\n *\n * This hook is a more permissive version of React 19.2's `React.useEffectEvent` in that it can be passed through contexts and called in event handler props, not just effects.\n */ function useStableCallback(callback) {\n _s();\n const stable = (0,_useRefWithInit_js__WEBPACK_IMPORTED_MODULE_1__.useRefWithInit)(createStableCallback).current;\n stable.next = callback;\n useSafeInsertionEffect(stable.effect);\n return stable.trampoline;\n}\n_s(useStableCallback, \"sbaAJLKD9lEqRoohEPEDLP2dTzc=\", false, function() {\n return [\n _useRefWithInit_js__WEBPACK_IMPORTED_MODULE_1__.useRefWithInit,\n useSafeInsertionEffect\n ];\n});\nfunction createStableCallback() {\n const stable = {\n next: undefined,\n callback: assertNotCalled,\n trampoline: function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n var _stable_callback;\n return (_stable_callback = stable.callback) === null || _stable_callback === void 0 ? void 0 : _stable_callback.call(stable, ...args);\n },\n effect: ()=>{\n stable.callback = stable.next;\n }\n };\n return stable;\n}\nfunction assertNotCalled() {\n if (true) {\n throw /* minify-error-disabled */ new Error('Base UI: Cannot call an event handler while rendering.');\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlU3RhYmxlQ2FsbGJhY2suanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFFK0I7QUFDc0I7QUFFckQsMEVBQTBFO0FBQzFFLE1BQU1FLHFCQUFxQkYseUxBQUssQ0FBQyxxQkFBOEMsT0FBekJHLEtBQUtDLE1BQU0sR0FBR0MsT0FBTyxDQUFDLElBQUtDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRztBQUM5RixNQUFNQyx5QkFDTiw0Q0FBNEM7QUFDNUNMLHNCQUNBLDhFQUE4RTtBQUM5RUEsdUJBQXVCRixrREFBcUIsR0FBR0UscUJBQXFCTyxDQUFBQSxLQUFNQTtBQUMxRTs7Ozs7Ozs7O0NBU0MsR0FDTSxTQUFTQyxrQkFBa0JDLFFBQVE7O0lBQ3hDLE1BQU1DLFNBQVNYLGtFQUFjQSxDQUFDWSxzQkFBc0JDLE9BQU87SUFDM0RGLE9BQU9HLElBQUksR0FBR0o7SUFDZEosdUJBQXVCSyxPQUFPSSxNQUFNO0lBQ3BDLE9BQU9KLE9BQU9LLFVBQVU7QUFDMUI7R0FMZ0JQOztRQUNDVCw4REFBY0E7UUFFN0JNOzs7QUFHRixTQUFTTTtJQUNQLE1BQU1ELFNBQVM7UUFDYkcsTUFBTUc7UUFDTlAsVUFBVVE7UUFDVkYsWUFBWTs2Q0FBSUc7Z0JBQUFBOztnQkFBU1I7b0JBQUFBLG1CQUFBQSxPQUFPRCxRQUFRLGNBQWZDLHVDQUFBQSxzQkFBQUEsV0FBcUJROztRQUM5Q0osUUFBUTtZQUNOSixPQUFPRCxRQUFRLEdBQUdDLE9BQU9HLElBQUk7UUFDL0I7SUFDRjtJQUNBLE9BQU9IO0FBQ1Q7QUFDQSxTQUFTTztJQUNQLElBQUlFLElBQXFDLEVBQUU7UUFDekMsTUFBTSx5QkFBeUIsR0FBRSxJQUFJQyxNQUFNO0lBQzdDO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvdXRpbHMvZXNtL3VzZVN0YWJsZUNhbGxiYWNrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUmVmV2l0aEluaXQgfSBmcm9tIFwiLi91c2VSZWZXaXRoSW5pdC5qc1wiO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL2lzc3Vlcy80MTE5MCNpc3N1ZWNvbW1lbnQtMjA0MDg3MzM3OVxuY29uc3QgdXNlSW5zZXJ0aW9uRWZmZWN0ID0gUmVhY3RbYHVzZUluc2VydGlvbkVmZmVjdCR7TWF0aC5yYW5kb20oKS50b0ZpeGVkKDEpfWAuc2xpY2UoMCwgLTMpXTtcbmNvbnN0IHVzZVNhZmVJbnNlcnRpb25FZmZlY3QgPVxuLy8gUmVhY3QgMTcgZG9lc24ndCBoYXZlIHVzZUluc2VydGlvbkVmZmVjdC5cbnVzZUluc2VydGlvbkVmZmVjdCAmJlxuLy8gUHJlYWN0IHJlcGxhY2VzIHVzZUluc2VydGlvbkVmZmVjdCB3aXRoIHVzZUxheW91dEVmZmVjdCBhbmQgZmlyZXMgdG9vIGxhdGUuXG51c2VJbnNlcnRpb25FZmZlY3QgIT09IFJlYWN0LnVzZUxheW91dEVmZmVjdCA/IHVzZUluc2VydGlvbkVmZmVjdCA6IGZuID0+IGZuKCk7XG4vKipcbiAqIFN0YWJpbGl6ZXMgdGhlIGZ1bmN0aW9uIHBhc3NlZCBzbyBpdCdzIGFsd2F5cyB0aGUgc2FtZSBiZXR3ZWVuIHJlbmRlcnMuXG4gKlxuICogVGhlIGZ1bmN0aW9uIGJlY29tZXMgbm9uLXJlYWN0aXZlIHRvIGFueSB2YWx1ZXMgaXQgY2FwdHVyZXMuXG4gKiBJdCBjYW4gc2FmZWx5IGJlIHBhc3NlZCBhcyBhIGRlcGVuZGVuY3kgb2YgYFJlYWN0LnVzZU1lbW9gIGFuZCBgUmVhY3QudXNlRWZmZWN0YCB3aXRob3V0IHJlLXRyaWdnZXJpbmcgdGhlbSBpZiBpdHMgY2FwdHVyZWQgdmFsdWVzIGNoYW5nZS5cbiAqXG4gKiBUaGUgZnVuY3Rpb24gbXVzdCBvbmx5IGJlIGNhbGxlZCBpbnNpZGUgZWZmZWN0cyBhbmQgZXZlbnQgaGFuZGxlcnMsIG5ldmVyIGR1cmluZyByZW5kZXIgKHdoaWNoIHRocm93cyBhbiBlcnJvcikuXG4gKlxuICogVGhpcyBob29rIGlzIGEgbW9yZSBwZXJtaXNzaXZlIHZlcnNpb24gb2YgUmVhY3QgMTkuMidzIGBSZWFjdC51c2VFZmZlY3RFdmVudGAgaW4gdGhhdCBpdCBjYW4gYmUgcGFzc2VkIHRocm91Z2ggY29udGV4dHMgYW5kIGNhbGxlZCBpbiBldmVudCBoYW5kbGVyIHByb3BzLCBub3QganVzdCBlZmZlY3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdXNlU3RhYmxlQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgY29uc3Qgc3RhYmxlID0gdXNlUmVmV2l0aEluaXQoY3JlYXRlU3RhYmxlQ2FsbGJhY2spLmN1cnJlbnQ7XG4gIHN0YWJsZS5uZXh0ID0gY2FsbGJhY2s7XG4gIHVzZVNhZmVJbnNlcnRpb25FZmZlY3Qoc3RhYmxlLmVmZmVjdCk7XG4gIHJldHVybiBzdGFibGUudHJhbXBvbGluZTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZVN0YWJsZUNhbGxiYWNrKCkge1xuICBjb25zdCBzdGFibGUgPSB7XG4gICAgbmV4dDogdW5kZWZpbmVkLFxuICAgIGNhbGxiYWNrOiBhc3NlcnROb3RDYWxsZWQsXG4gICAgdHJhbXBvbGluZTogKC4uLmFyZ3MpID0+IHN0YWJsZS5jYWxsYmFjaz8uKC4uLmFyZ3MpLFxuICAgIGVmZmVjdDogKCkgPT4ge1xuICAgICAgc3RhYmxlLmNhbGxiYWNrID0gc3RhYmxlLm5leHQ7XG4gICAgfVxuICB9O1xuICByZXR1cm4gc3RhYmxlO1xufVxuZnVuY3Rpb24gYXNzZXJ0Tm90Q2FsbGVkKCkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHRocm93IC8qIG1pbmlmeS1lcnJvci1kaXNhYmxlZCAqL25ldyBFcnJvcignQmFzZSBVSTogQ2Fubm90IGNhbGwgYW4gZXZlbnQgaGFuZGxlciB3aGlsZSByZW5kZXJpbmcuJyk7XG4gIH1cbn0iXSwibmFtZXMiOlsiUmVhY3QiLCJ1c2VSZWZXaXRoSW5pdCIsInVzZUluc2VydGlvbkVmZmVjdCIsIk1hdGgiLCJyYW5kb20iLCJ0b0ZpeGVkIiwic2xpY2UiLCJ1c2VTYWZlSW5zZXJ0aW9uRWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwiZm4iLCJ1c2VTdGFibGVDYWxsYmFjayIsImNhbGxiYWNrIiwic3RhYmxlIiwiY3JlYXRlU3RhYmxlQ2FsbGJhY2siLCJjdXJyZW50IiwibmV4dCIsImVmZmVjdCIsInRyYW1wb2xpbmUiLCJ1bmRlZmluZWQiLCJhc3NlcnROb3RDYWxsZWQiLCJhcmdzIiwicHJvY2VzcyIsIkVycm9yIl0sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/useStableCallback.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/useTimeout.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/useTimeout.js ***!
|
||
\*******************************************************/
|
||
/***/ ((__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 */ Timeout: () => (/* binding */ Timeout),\n/* harmony export */ useTimeout: () => (/* binding */ useTimeout)\n/* harmony export */ });\n/* harmony import */ var _useRefWithInit_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./useRefWithInit.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useRefWithInit.js\");\n/* harmony import */ var _useOnMount_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./useOnMount.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useOnMount.js\");\n/* __next_internal_client_entry_do_not_use__ Timeout,useTimeout auto */ var _s = $RefreshSig$();\n\n\nconst EMPTY = 0;\nclass Timeout {\n static create() {\n return new Timeout();\n }\n /**\n * Executes `fn` after `delay`, clearing any previously scheduled call.\n */ start(delay, fn) {\n this.clear();\n this.currentId = setTimeout(()=>{\n this.currentId = EMPTY;\n fn();\n }, delay); /* Node.js types are enabled in development */ \n }\n isStarted() {\n return this.currentId !== EMPTY;\n }\n constructor(){\n this.currentId = EMPTY;\n this.clear = ()=>{\n if (this.currentId !== EMPTY) {\n clearTimeout(this.currentId);\n this.currentId = EMPTY;\n }\n };\n this.disposeEffect = ()=>{\n return this.clear;\n };\n }\n}\n/**\n * A `setTimeout` with automatic cleanup and guard.\n */ function useTimeout() {\n _s();\n const timeout = (0,_useRefWithInit_js__WEBPACK_IMPORTED_MODULE_0__.useRefWithInit)(Timeout.create).current;\n (0,_useOnMount_js__WEBPACK_IMPORTED_MODULE_1__.useOnMount)(timeout.disposeEffect);\n return timeout;\n}\n_s(useTimeout, \"H+28ggFpaS8PP6371mocPgtnGps=\", false, function() {\n return [\n _useRefWithInit_js__WEBPACK_IMPORTED_MODULE_0__.useRefWithInit,\n _useOnMount_js__WEBPACK_IMPORTED_MODULE_1__.useOnMount\n ];\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlVGltZW91dC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUVxRDtBQUNSO0FBQzdDLE1BQU1FLFFBQVE7QUFDUCxNQUFNQztJQUNYLE9BQU9DLFNBQVM7UUFDZCxPQUFPLElBQUlEO0lBQ2I7SUFHQTs7R0FFQyxHQUNERSxNQUFNQyxLQUFLLEVBQUVDLEVBQUUsRUFBRTtRQUNmLElBQUksQ0FBQ0MsS0FBSztRQUNWLElBQUksQ0FBQ0MsU0FBUyxHQUFHQyxXQUFXO1lBQzFCLElBQUksQ0FBQ0QsU0FBUyxHQUFHUDtZQUNqQks7UUFDRixHQUFHRCxRQUFRLDRDQUE0QztJQUN6RDtJQUNBSyxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUNGLFNBQVMsS0FBS1A7SUFDNUI7O2FBZEFPLFlBQVlQO2FBZVpNLFFBQVE7WUFDTixJQUFJLElBQUksQ0FBQ0MsU0FBUyxLQUFLUCxPQUFPO2dCQUM1QlUsYUFBYSxJQUFJLENBQUNILFNBQVM7Z0JBQzNCLElBQUksQ0FBQ0EsU0FBUyxHQUFHUDtZQUNuQjtRQUNGO2FBQ0FXLGdCQUFnQjtZQUNkLE9BQU8sSUFBSSxDQUFDTCxLQUFLO1FBQ25COztBQUNGO0FBRUE7O0NBRUMsR0FDTSxTQUFTTTs7SUFDZCxNQUFNQyxVQUFVZixrRUFBY0EsQ0FBQ0csUUFBUUMsTUFBTSxFQUFFWSxPQUFPO0lBQ3REZiwwREFBVUEsQ0FBQ2MsUUFBUUYsYUFBYTtJQUNoQyxPQUFPRTtBQUNUO0dBSmdCRDs7UUFDRWQsOERBQWNBO1FBQzlCQyxzREFBVUEiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvdXRpbHMvZXNtL3VzZVRpbWVvdXQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1c2VSZWZXaXRoSW5pdCB9IGZyb20gXCIuL3VzZVJlZldpdGhJbml0LmpzXCI7XG5pbXBvcnQgeyB1c2VPbk1vdW50IH0gZnJvbSBcIi4vdXNlT25Nb3VudC5qc1wiO1xuY29uc3QgRU1QVFkgPSAwO1xuZXhwb3J0IGNsYXNzIFRpbWVvdXQge1xuICBzdGF0aWMgY3JlYXRlKCkge1xuICAgIHJldHVybiBuZXcgVGltZW91dCgpO1xuICB9XG4gIGN1cnJlbnRJZCA9IEVNUFRZO1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyBgZm5gIGFmdGVyIGBkZWxheWAsIGNsZWFyaW5nIGFueSBwcmV2aW91c2x5IHNjaGVkdWxlZCBjYWxsLlxuICAgKi9cbiAgc3RhcnQoZGVsYXksIGZuKSB7XG4gICAgdGhpcy5jbGVhcigpO1xuICAgIHRoaXMuY3VycmVudElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmN1cnJlbnRJZCA9IEVNUFRZO1xuICAgICAgZm4oKTtcbiAgICB9LCBkZWxheSk7IC8qIE5vZGUuanMgdHlwZXMgYXJlIGVuYWJsZWQgaW4gZGV2ZWxvcG1lbnQgKi9cbiAgfVxuICBpc1N0YXJ0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudElkICE9PSBFTVBUWTtcbiAgfVxuICBjbGVhciA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5jdXJyZW50SWQgIT09IEVNUFRZKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5jdXJyZW50SWQpO1xuICAgICAgdGhpcy5jdXJyZW50SWQgPSBFTVBUWTtcbiAgICB9XG4gIH07XG4gIGRpc3Bvc2VFZmZlY3QgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY2xlYXI7XG4gIH07XG59XG5cbi8qKlxuICogQSBgc2V0VGltZW91dGAgd2l0aCBhdXRvbWF0aWMgY2xlYW51cCBhbmQgZ3VhcmQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VUaW1lb3V0KCkge1xuICBjb25zdCB0aW1lb3V0ID0gdXNlUmVmV2l0aEluaXQoVGltZW91dC5jcmVhdGUpLmN1cnJlbnQ7XG4gIHVzZU9uTW91bnQodGltZW91dC5kaXNwb3NlRWZmZWN0KTtcbiAgcmV0dXJuIHRpbWVvdXQ7XG59Il0sIm5hbWVzIjpbInVzZVJlZldpdGhJbml0IiwidXNlT25Nb3VudCIsIkVNUFRZIiwiVGltZW91dCIsImNyZWF0ZSIsInN0YXJ0IiwiZGVsYXkiLCJmbiIsImNsZWFyIiwiY3VycmVudElkIiwic2V0VGltZW91dCIsImlzU3RhcnRlZCIsImNsZWFyVGltZW91dCIsImRpc3Bvc2VFZmZlY3QiLCJ1c2VUaW1lb3V0IiwidGltZW91dCIsImN1cnJlbnQiXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/useTimeout.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/useValueAsRef.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/useValueAsRef.js ***!
|
||
\**********************************************************/
|
||
/***/ ((__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 */ useValueAsRef: () => (/* binding */ useValueAsRef)\n/* harmony export */ });\n/* harmony import */ var _useIsoLayoutEffect_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./useIsoLayoutEffect.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useIsoLayoutEffect.js\");\n/* harmony import */ var _useRefWithInit_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./useRefWithInit.js */ \"(app-pages-browser)/./node_modules/@base-ui/utils/esm/useRefWithInit.js\");\n/* __next_internal_client_entry_do_not_use__ useValueAsRef auto */ var _s = $RefreshSig$();\n\n\n/**\n * Untracks the provided value by turning it into a ref to remove its reactivity.\n *\n * Used to access the passed value inside `React.useEffect` without causing the effect to re-run when the value changes.\n */ function useValueAsRef(value) {\n _s();\n const latest = (0,_useRefWithInit_js__WEBPACK_IMPORTED_MODULE_0__.useRefWithInit)(createLatestRef, value).current;\n latest.next = value;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n (0,_useIsoLayoutEffect_js__WEBPACK_IMPORTED_MODULE_1__.useIsoLayoutEffect)(latest.effect);\n return latest;\n}\n_s(useValueAsRef, \"1QfxnXFElF4qL+Pihu87uUEKKwU=\", false, function() {\n return [\n _useRefWithInit_js__WEBPACK_IMPORTED_MODULE_0__.useRefWithInit,\n _useIsoLayoutEffect_js__WEBPACK_IMPORTED_MODULE_1__.useIsoLayoutEffect\n ];\n});\nfunction createLatestRef(value) {\n const latest = {\n current: value,\n next: value,\n effect: ()=>{\n latest.current = latest.next;\n }\n };\n return latest;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdXNlVmFsdWVBc1JlZi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRTZEO0FBQ1I7QUFFckQ7Ozs7Q0FJQyxHQUNNLFNBQVNFLGNBQWNDLEtBQUs7O0lBQ2pDLE1BQU1DLFNBQVNILGtFQUFjQSxDQUFDSSxpQkFBaUJGLE9BQU9HLE9BQU87SUFDN0RGLE9BQU9HLElBQUksR0FBR0o7SUFFZCx1REFBdUQ7SUFDdkRILDBFQUFrQkEsQ0FBQ0ksT0FBT0ksTUFBTTtJQUNoQyxPQUFPSjtBQUNUO0dBUGdCRjs7UUFDQ0QsOERBQWNBO1FBSTdCRCxzRUFBa0JBOzs7QUFHcEIsU0FBU0ssZ0JBQWdCRixLQUFLO0lBQzVCLE1BQU1DLFNBQVM7UUFDYkUsU0FBU0g7UUFDVEksTUFBTUo7UUFDTkssUUFBUTtZQUNOSixPQUFPRSxPQUFPLEdBQUdGLE9BQU9HLElBQUk7UUFDOUI7SUFDRjtJQUNBLE9BQU9IO0FBQ1QiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGJhc2UtdWkvdXRpbHMvZXNtL3VzZVZhbHVlQXNSZWYuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyB1c2VJc29MYXlvdXRFZmZlY3QgfSBmcm9tIFwiLi91c2VJc29MYXlvdXRFZmZlY3QuanNcIjtcbmltcG9ydCB7IHVzZVJlZldpdGhJbml0IH0gZnJvbSBcIi4vdXNlUmVmV2l0aEluaXQuanNcIjtcblxuLyoqXG4gKiBVbnRyYWNrcyB0aGUgcHJvdmlkZWQgdmFsdWUgYnkgdHVybmluZyBpdCBpbnRvIGEgcmVmIHRvIHJlbW92ZSBpdHMgcmVhY3Rpdml0eS5cbiAqXG4gKiBVc2VkIHRvIGFjY2VzcyB0aGUgcGFzc2VkIHZhbHVlIGluc2lkZSBgUmVhY3QudXNlRWZmZWN0YCB3aXRob3V0IGNhdXNpbmcgdGhlIGVmZmVjdCB0byByZS1ydW4gd2hlbiB0aGUgdmFsdWUgY2hhbmdlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZVZhbHVlQXNSZWYodmFsdWUpIHtcbiAgY29uc3QgbGF0ZXN0ID0gdXNlUmVmV2l0aEluaXQoY3JlYXRlTGF0ZXN0UmVmLCB2YWx1ZSkuY3VycmVudDtcbiAgbGF0ZXN0Lm5leHQgPSB2YWx1ZTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIHVzZUlzb0xheW91dEVmZmVjdChsYXRlc3QuZWZmZWN0KTtcbiAgcmV0dXJuIGxhdGVzdDtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUxhdGVzdFJlZih2YWx1ZSkge1xuICBjb25zdCBsYXRlc3QgPSB7XG4gICAgY3VycmVudDogdmFsdWUsXG4gICAgbmV4dDogdmFsdWUsXG4gICAgZWZmZWN0OiAoKSA9PiB7XG4gICAgICBsYXRlc3QuY3VycmVudCA9IGxhdGVzdC5uZXh0O1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxhdGVzdDtcbn0iXSwibmFtZXMiOlsidXNlSXNvTGF5b3V0RWZmZWN0IiwidXNlUmVmV2l0aEluaXQiLCJ1c2VWYWx1ZUFzUmVmIiwidmFsdWUiLCJsYXRlc3QiLCJjcmVhdGVMYXRlc3RSZWYiLCJjdXJyZW50IiwibmV4dCIsImVmZmVjdCJdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/useValueAsRef.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/visuallyHidden.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/visuallyHidden.js ***!
|
||
\***********************************************************/
|
||
/***/ ((__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 */ visuallyHidden: () => (/* binding */ visuallyHidden),\n/* harmony export */ visuallyHiddenInput: () => (/* binding */ visuallyHiddenInput)\n/* harmony export */ });\nconst visuallyHiddenBase = {\n clipPath: 'inset(50%)',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n border: 0,\n padding: 0,\n width: 1,\n height: 1,\n margin: -1\n};\nconst visuallyHidden = {\n ...visuallyHiddenBase,\n position: 'fixed',\n top: 0,\n left: 0\n};\nconst visuallyHiddenInput = {\n ...visuallyHiddenBase,\n position: 'absolute'\n};//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vdmlzdWFsbHlIaWRkZW4uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3V0aWxzL2VzbS92aXN1YWxseUhpZGRlbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCB2aXN1YWxseUhpZGRlbkJhc2UgPSB7XG4gIGNsaXBQYXRoOiAnaW5zZXQoNTAlKScsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gIGJvcmRlcjogMCxcbiAgcGFkZGluZzogMCxcbiAgd2lkdGg6IDEsXG4gIGhlaWdodDogMSxcbiAgbWFyZ2luOiAtMVxufTtcbmV4cG9ydCBjb25zdCB2aXN1YWxseUhpZGRlbiA9IHtcbiAgLi4udmlzdWFsbHlIaWRkZW5CYXNlLFxuICBwb3NpdGlvbjogJ2ZpeGVkJyxcbiAgdG9wOiAwLFxuICBsZWZ0OiAwXG59O1xuZXhwb3J0IGNvbnN0IHZpc3VhbGx5SGlkZGVuSW5wdXQgPSB7XG4gIC4uLnZpc3VhbGx5SGlkZGVuQmFzZSxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbn07Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/visuallyHidden.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@base-ui/utils/esm/warn.js":
|
||
/*!*************************************************!*\
|
||
!*** ./node_modules/@base-ui/utils/esm/warn.js ***!
|
||
\*************************************************/
|
||
/***/ ((__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 */ warn: () => (/* binding */ warn)\n/* harmony export */ });\nlet set;\nif (true) {\n set = new Set();\n}\nfunction warn(...messages) {\n if (true) {\n const messageKey = messages.join(' ');\n if (!set.has(messageKey)) {\n set.add(messageKey);\n console.warn(`Base UI: ${messageKey}`);\n }\n }\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AYmFzZS11aS91dGlscy9lc20vd2Fybi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQSxJQUFJLElBQXFDO0FBQ3pDO0FBQ0E7QUFDTztBQUNQLE1BQU0sSUFBcUM7QUFDM0M7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLFdBQVc7QUFDMUM7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BiYXNlLXVpL3V0aWxzL2VzbS93YXJuLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBzZXQ7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBzZXQgPSBuZXcgU2V0KCk7XG59XG5leHBvcnQgZnVuY3Rpb24gd2FybiguLi5tZXNzYWdlcykge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbnN0IG1lc3NhZ2VLZXkgPSBtZXNzYWdlcy5qb2luKCcgJyk7XG4gICAgaWYgKCFzZXQuaGFzKG1lc3NhZ2VLZXkpKSB7XG4gICAgICBzZXQuYWRkKG1lc3NhZ2VLZXkpO1xuICAgICAgY29uc29sZS53YXJuKGBCYXNlIFVJOiAke21lc3NhZ2VLZXl9YCk7XG4gICAgfVxuICB9XG59Il0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@base-ui/utils/esm/warn.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs":
|
||
/*!************************************************************************!*\
|
||
!*** ./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs ***!
|
||
\************************************************************************/
|
||
/***/ ((__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 */ getComputedStyle: () => (/* binding */ getComputedStyle),\n/* harmony export */ getContainingBlock: () => (/* binding */ getContainingBlock),\n/* harmony export */ getDocumentElement: () => (/* binding */ getDocumentElement),\n/* harmony export */ getFrameElement: () => (/* binding */ getFrameElement),\n/* harmony export */ getNearestOverflowAncestor: () => (/* binding */ getNearestOverflowAncestor),\n/* harmony export */ getNodeName: () => (/* binding */ getNodeName),\n/* harmony export */ getNodeScroll: () => (/* binding */ getNodeScroll),\n/* harmony export */ getOverflowAncestors: () => (/* binding */ getOverflowAncestors),\n/* harmony export */ getParentNode: () => (/* binding */ getParentNode),\n/* harmony export */ getWindow: () => (/* binding */ getWindow),\n/* harmony export */ isContainingBlock: () => (/* binding */ isContainingBlock),\n/* harmony export */ isElement: () => (/* binding */ isElement),\n/* harmony export */ isHTMLElement: () => (/* binding */ isHTMLElement),\n/* harmony export */ isLastTraversableNode: () => (/* binding */ isLastTraversableNode),\n/* harmony export */ isNode: () => (/* binding */ isNode),\n/* harmony export */ isOverflowElement: () => (/* binding */ isOverflowElement),\n/* harmony export */ isShadowRoot: () => (/* binding */ isShadowRoot),\n/* harmony export */ isTableElement: () => (/* binding */ isTableElement),\n/* harmony export */ isTopLayer: () => (/* binding */ isTopLayer),\n/* harmony export */ isWebKit: () => (/* binding */ isWebKit)\n/* harmony export */ });\nfunction hasWindow() {\n return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n if (isNode(node)) {\n return (node.nodeName || '').toLowerCase();\n }\n // Mocked nodes in testing environments may not be instances of Node. By\n // returning `#document` an infinite loop won't occur.\n // https://github.com/floating-ui/floating-ui/issues/2317\n return '#document';\n}\nfunction getWindow(node) {\n var _node$ownerDocument;\n return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n var _ref;\n return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n if (!hasWindow()) {\n return false;\n }\n return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n return false;\n }\n return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n const {\n overflow,\n overflowX,\n overflowY,\n display\n } = getComputedStyle(element);\n return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n try {\n if (element.matches(':popover-open')) {\n return true;\n }\n } catch (_e) {\n // no-op\n }\n try {\n return element.matches(':modal');\n } catch (_e) {\n return false;\n }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n let currentNode = getParentNode(element);\n while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n if (isContainingBlock(currentNode)) {\n return currentNode;\n } else if (isTopLayer(currentNode)) {\n return null;\n }\n currentNode = getParentNode(currentNode);\n }\n return null;\n}\nfunction isWebKit() {\n if (isWebKitValue == null) {\n isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n }\n return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n if (isElement(element)) {\n return {\n scrollLeft: element.scrollLeft,\n scrollTop: element.scrollTop\n };\n }\n return {\n scrollLeft: element.scrollX,\n scrollTop: element.scrollY\n };\n}\nfunction getParentNode(node) {\n if (getNodeName(node) === 'html') {\n return node;\n }\n const result =\n // Step into the shadow DOM of the parent of a slotted node.\n node.assignedSlot ||\n // DOM Element detected.\n node.parentNode ||\n // ShadowRoot detected.\n isShadowRoot(node) && node.host ||\n // Fallback.\n getDocumentElement(node);\n return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n const parentNode = getParentNode(node);\n if (isLastTraversableNode(parentNode)) {\n return node.ownerDocument ? node.ownerDocument.body : node.body;\n }\n if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n return parentNode;\n }\n return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n var _node$ownerDocument2;\n if (list === void 0) {\n list = [];\n }\n if (traverseIframes === void 0) {\n traverseIframes = true;\n }\n const scrollableAncestor = getNearestOverflowAncestor(node);\n const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n const win = getWindow(scrollableAncestor);\n if (isBody) {\n const frameElement = getFrameElement(win);\n return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n } else {\n return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n }\n}\nfunction getFrameElement(win) {\n return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWdWIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS91dGlscy9kaXN0L2Zsb2F0aW5nLXVpLnV0aWxzLmRvbS5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gaGFzV2luZG93KCkge1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCc7XG59XG5mdW5jdGlvbiBnZXROb2RlTmFtZShub2RlKSB7XG4gIGlmIChpc05vZGUobm9kZSkpIHtcbiAgICByZXR1cm4gKG5vZGUubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgLy8gTW9ja2VkIG5vZGVzIGluIHRlc3RpbmcgZW52aXJvbm1lbnRzIG1heSBub3QgYmUgaW5zdGFuY2VzIG9mIE5vZGUuIEJ5XG4gIC8vIHJldHVybmluZyBgI2RvY3VtZW50YCBhbiBpbmZpbml0ZSBsb29wIHdvbid0IG9jY3VyLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzIzMTdcbiAgcmV0dXJuICcjZG9jdW1lbnQnO1xufVxuZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgdmFyIF9ub2RlJG93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiAobm9kZSA9PSBudWxsIHx8IChfbm9kZSRvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX25vZGUkb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgfHwgd2luZG93O1xufVxuZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KG5vZGUpIHtcbiAgdmFyIF9yZWY7XG4gIHJldHVybiAoX3JlZiA9IChpc05vZGUobm9kZSkgPyBub2RlLm93bmVyRG9jdW1lbnQgOiBub2RlLmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfcmVmLmRvY3VtZW50RWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzTm9kZSh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIE5vZGUgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLk5vZGU7XG59XG5mdW5jdGlvbiBpc0VsZW1lbnQodmFsdWUpIHtcbiAgaWYgKCFoYXNXaW5kb3coKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBFbGVtZW50IHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5FbGVtZW50O1xufVxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5IVE1MRWxlbWVudDtcbn1cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpIHx8IHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBTaGFkb3dSb290IHx8IHZhbHVlIGluc3RhbmNlb2YgZ2V0V2luZG93KHZhbHVlKS5TaGFkb3dSb290O1xufVxuZnVuY3Rpb24gaXNPdmVyZmxvd0VsZW1lbnQoZWxlbWVudCkge1xuICBjb25zdCB7XG4gICAgb3ZlcmZsb3csXG4gICAgb3ZlcmZsb3dYLFxuICAgIG92ZXJmbG93WSxcbiAgICBkaXNwbGF5XG4gIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVufGNsaXAvLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpICYmIGRpc3BsYXkgIT09ICdpbmxpbmUnICYmIGRpc3BsYXkgIT09ICdjb250ZW50cyc7XG59XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiAvXih0YWJsZXx0ZHx0aCkkLy50ZXN0KGdldE5vZGVOYW1lKGVsZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGlzVG9wTGF5ZXIoZWxlbWVudCkge1xuICB0cnkge1xuICAgIGlmIChlbGVtZW50Lm1hdGNoZXMoJzpwb3BvdmVyLW9wZW4nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChfZSkge1xuICAgIC8vIG5vLW9wXG4gIH1cbiAgdHJ5IHtcbiAgICByZXR1cm4gZWxlbWVudC5tYXRjaGVzKCc6bW9kYWwnKTtcbiAgfSBjYXRjaCAoX2UpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbmNvbnN0IHdpbGxDaGFuZ2VSZSA9IC90cmFuc2Zvcm18dHJhbnNsYXRlfHNjYWxlfHJvdGF0ZXxwZXJzcGVjdGl2ZXxmaWx0ZXIvO1xuY29uc3QgY29udGFpblJlID0gL3BhaW50fGxheW91dHxzdHJpY3R8Y29udGVudC87XG5jb25zdCBpc05vdE5vbmUgPSB2YWx1ZSA9PiAhIXZhbHVlICYmIHZhbHVlICE9PSAnbm9uZSc7XG5sZXQgaXNXZWJLaXRWYWx1ZTtcbmZ1bmN0aW9uIGlzQ29udGFpbmluZ0Jsb2NrKGVsZW1lbnRPckNzcykge1xuICBjb25zdCBjc3MgPSBpc0VsZW1lbnQoZWxlbWVudE9yQ3NzKSA/IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudE9yQ3NzKSA6IGVsZW1lbnRPckNzcztcblxuICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuICAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXRyYW5zZm9ybXMtMi8jaW5kaXZpZHVhbC10cmFuc2Zvcm1zXG4gIHJldHVybiBpc05vdE5vbmUoY3NzLnRyYW5zZm9ybSkgfHwgaXNOb3ROb25lKGNzcy50cmFuc2xhdGUpIHx8IGlzTm90Tm9uZShjc3Muc2NhbGUpIHx8IGlzTm90Tm9uZShjc3Mucm90YXRlKSB8fCBpc05vdE5vbmUoY3NzLnBlcnNwZWN0aXZlKSB8fCAhaXNXZWJLaXQoKSAmJiAoaXNOb3ROb25lKGNzcy5iYWNrZHJvcEZpbHRlcikgfHwgaXNOb3ROb25lKGNzcy5maWx0ZXIpKSB8fCB3aWxsQ2hhbmdlUmUudGVzdChjc3Mud2lsbENoYW5nZSB8fCAnJykgfHwgY29udGFpblJlLnRlc3QoY3NzLmNvbnRhaW4gfHwgJycpO1xufVxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgbGV0IGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmICFpc0xhc3RUcmF2ZXJzYWJsZU5vZGUoY3VycmVudE5vZGUpKSB7XG4gICAgaWYgKGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKSkge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSBpZiAoaXNUb3BMYXllcihjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuZnVuY3Rpb24gaXNXZWJLaXQoKSB7XG4gIGlmIChpc1dlYktpdFZhbHVlID09IG51bGwpIHtcbiAgICBpc1dlYktpdFZhbHVlID0gdHlwZW9mIENTUyAhPT0gJ3VuZGVmaW5lZCcgJiYgQ1NTLnN1cHBvcnRzICYmIENTUy5zdXBwb3J0cygnLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXInLCAnbm9uZScpO1xuICB9XG4gIHJldHVybiBpc1dlYktpdFZhbHVlO1xufVxuZnVuY3Rpb24gaXNMYXN0VHJhdmVyc2FibGVOb2RlKG5vZGUpIHtcbiAgcmV0dXJuIC9eKGh0bWx8Ym9keXwjZG9jdW1lbnQpJC8udGVzdChnZXROb2RlTmFtZShub2RlKSk7XG59XG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KSB7XG4gIGlmIChpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbFgsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICBjb25zdCBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQod2luKTtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgZnJhbWVFbGVtZW50ICYmIHRyYXZlcnNlSWZyYW1lcyA/IGdldE92ZXJmbG93QW5jZXN0b3JzKGZyYW1lRWxlbWVudCkgOiBbXSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3QuY29uY2F0KHNjcm9sbGFibGVBbmNlc3RvciwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoc2Nyb2xsYWJsZUFuY2VzdG9yLCBbXSwgdHJhdmVyc2VJZnJhbWVzKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZyYW1lRWxlbWVudCh3aW4pIHtcbiAgcmV0dXJuIHdpbi5wYXJlbnQgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHdpbi5wYXJlbnQpID8gd2luLmZyYW1lRWxlbWVudCA6IG51bGw7XG59XG5cbmV4cG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGdldENvbnRhaW5pbmdCbG9jaywgZ2V0RG9jdW1lbnRFbGVtZW50LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yLCBnZXROb2RlTmFtZSwgZ2V0Tm9kZVNjcm9sbCwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMsIGdldFBhcmVudE5vZGUsIGdldFdpbmRvdywgaXNDb250YWluaW5nQmxvY2ssIGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc05vZGUsIGlzT3ZlcmZsb3dFbGVtZW50LCBpc1NoYWRvd1Jvb3QsIGlzVGFibGVFbGVtZW50LCBpc1RvcExheWVyLCBpc1dlYktpdCB9O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs ***!
|
||
\********************************************************************/
|
||
/***/ ((__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 */ alignments: () => (/* binding */ alignments),\n/* harmony export */ clamp: () => (/* binding */ clamp),\n/* harmony export */ createCoords: () => (/* binding */ createCoords),\n/* harmony export */ evaluate: () => (/* binding */ evaluate),\n/* harmony export */ expandPaddingObject: () => (/* binding */ expandPaddingObject),\n/* harmony export */ floor: () => (/* binding */ floor),\n/* harmony export */ getAlignment: () => (/* binding */ getAlignment),\n/* harmony export */ getAlignmentAxis: () => (/* binding */ getAlignmentAxis),\n/* harmony export */ getAlignmentSides: () => (/* binding */ getAlignmentSides),\n/* harmony export */ getAxisLength: () => (/* binding */ getAxisLength),\n/* harmony export */ getExpandedPlacements: () => (/* binding */ getExpandedPlacements),\n/* harmony export */ getOppositeAlignmentPlacement: () => (/* binding */ getOppositeAlignmentPlacement),\n/* harmony export */ getOppositeAxis: () => (/* binding */ getOppositeAxis),\n/* harmony export */ getOppositeAxisPlacements: () => (/* binding */ getOppositeAxisPlacements),\n/* harmony export */ getOppositePlacement: () => (/* binding */ getOppositePlacement),\n/* harmony export */ getPaddingObject: () => (/* binding */ getPaddingObject),\n/* harmony export */ getSide: () => (/* binding */ getSide),\n/* harmony export */ getSideAxis: () => (/* binding */ getSideAxis),\n/* harmony export */ max: () => (/* binding */ max),\n/* harmony export */ min: () => (/* binding */ min),\n/* harmony export */ placements: () => (/* binding */ placements),\n/* harmony export */ rectToClientRect: () => (/* binding */ rectToClientRect),\n/* harmony export */ round: () => (/* binding */ round),\n/* harmony export */ sides: () => (/* binding */ sides)\n/* harmony export */ });\n/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n x: v,\n y: v\n});\nconst oppositeSideMap = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n};\nfunction clamp(start, value, end) {\n return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n const firstChar = placement[0];\n return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n if (rtl === void 0) {\n rtl = false;\n }\n const alignment = getAlignment(placement);\n const alignmentAxis = getAlignmentAxis(placement);\n const length = getAxisLength(alignmentAxis);\n let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n if (rects.reference[length] > rects.floating[length]) {\n mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n }\n return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n const oppositePlacement = getOppositePlacement(placement);\n return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n switch (side) {\n case 'top':\n case 'bottom':\n if (rtl) return isStart ? rlPlacement : lrPlacement;\n return isStart ? lrPlacement : rlPlacement;\n case 'left':\n case 'right':\n return isStart ? tbPlacement : btPlacement;\n default:\n return [];\n }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n const alignment = getAlignment(placement);\n let list = getSideList(getSide(placement), direction === 'start', rtl);\n if (alignment) {\n list = list.map(side => side + \"-\" + alignment);\n if (flipAlignment) {\n list = list.concat(list.map(getOppositeAlignmentPlacement));\n }\n }\n return list;\n}\nfunction getOppositePlacement(placement) {\n const side = getSide(placement);\n return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n return {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0,\n ...padding\n };\n}\nfunction getPaddingObject(padding) {\n return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n top: padding,\n right: padding,\n bottom: padding,\n left: padding\n };\n}\nfunction rectToClientRect(rect) {\n const {\n x,\n y,\n width,\n height\n } = rect;\n return {\n width,\n height,\n top: y,\n left: x,\n right: x + width,\n bottom: y + height,\n x,\n y\n };\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFeVciLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL3V0aWxzL2Rpc3QvZmxvYXRpbmctdWkudXRpbHMubWpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ3VzdG9tIHBvc2l0aW9uaW5nIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3ZpcnR1YWwtZWxlbWVudHNcbiAqL1xuXG5jb25zdCBzaWRlcyA9IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J107XG5jb25zdCBhbGlnbm1lbnRzID0gWydzdGFydCcsICdlbmQnXTtcbmNvbnN0IHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovc2lkZXMucmVkdWNlKChhY2MsIHNpZGUpID0+IGFjYy5jb25jYXQoc2lkZSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1swXSwgc2lkZSArIFwiLVwiICsgYWxpZ25tZW50c1sxXSksIFtdKTtcbmNvbnN0IG1pbiA9IE1hdGgubWluO1xuY29uc3QgbWF4ID0gTWF0aC5tYXg7XG5jb25zdCByb3VuZCA9IE1hdGgucm91bmQ7XG5jb25zdCBmbG9vciA9IE1hdGguZmxvb3I7XG5jb25zdCBjcmVhdGVDb29yZHMgPSB2ID0+ICh7XG4gIHg6IHYsXG4gIHk6IHZcbn0pO1xuY29uc3Qgb3Bwb3NpdGVTaWRlTWFwID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZnVuY3Rpb24gY2xhbXAoc3RhcnQsIHZhbHVlLCBlbmQpIHtcbiAgcmV0dXJuIG1heChzdGFydCwgbWluKHZhbHVlLCBlbmQpKTtcbn1cbmZ1bmN0aW9uIGV2YWx1YXRlKHZhbHVlLCBwYXJhbSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nID8gdmFsdWUocGFyYW0pIDogdmFsdWU7XG59XG5mdW5jdGlvbiBnZXRTaWRlKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59XG5mdW5jdGlvbiBnZXRBeGlzTGVuZ3RoKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbn1cbmZ1bmN0aW9uIGdldFNpZGVBeGlzKHBsYWNlbWVudCkge1xuICBjb25zdCBmaXJzdENoYXIgPSBwbGFjZW1lbnRbMF07XG4gIHJldHVybiBmaXJzdENoYXIgPT09ICd0JyB8fCBmaXJzdENoYXIgPT09ICdiJyA/ICd5JyA6ICd4Jztcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiBnZXRPcHBvc2l0ZUF4aXMoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSk7XG59XG5mdW5jdGlvbiBnZXRBbGlnbm1lbnRTaWRlcyhwbGFjZW1lbnQsIHJlY3RzLCBydGwpIHtcbiAgaWYgKHJ0bCA9PT0gdm9pZCAwKSB7XG4gICAgcnRsID0gZmFsc2U7XG4gIH1cbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGNvbnN0IGFsaWdubWVudEF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gIGNvbnN0IGxlbmd0aCA9IGdldEF4aXNMZW5ndGgoYWxpZ25tZW50QXhpcyk7XG4gIGxldCBtYWluQWxpZ25tZW50U2lkZSA9IGFsaWdubWVudEF4aXMgPT09ICd4JyA/IGFsaWdubWVudCA9PT0gKHJ0bCA/ICdlbmQnIDogJ3N0YXJ0JykgPyAncmlnaHQnIDogJ2xlZnQnIDogYWxpZ25tZW50ID09PSAnc3RhcnQnID8gJ2JvdHRvbScgOiAndG9wJztcbiAgaWYgKHJlY3RzLnJlZmVyZW5jZVtsZW5ndGhdID4gcmVjdHMuZmxvYXRpbmdbbGVuZ3RoXSkge1xuICAgIG1haW5BbGlnbm1lbnRTaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpO1xuICB9XG4gIHJldHVybiBbbWFpbkFsaWdubWVudFNpZGUsIGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5BbGlnbm1lbnRTaWRlKV07XG59XG5mdW5jdGlvbiBnZXRFeHBhbmRlZFBsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGNvbnN0IG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LmluY2x1ZGVzKCdzdGFydCcpID8gcGxhY2VtZW50LnJlcGxhY2UoJ3N0YXJ0JywgJ2VuZCcpIDogcGxhY2VtZW50LnJlcGxhY2UoJ2VuZCcsICdzdGFydCcpO1xufVxuY29uc3QgbHJQbGFjZW1lbnQgPSBbJ2xlZnQnLCAncmlnaHQnXTtcbmNvbnN0IHJsUGxhY2VtZW50ID0gWydyaWdodCcsICdsZWZ0J107XG5jb25zdCB0YlBsYWNlbWVudCA9IFsndG9wJywgJ2JvdHRvbSddO1xuY29uc3QgYnRQbGFjZW1lbnQgPSBbJ2JvdHRvbScsICd0b3AnXTtcbmZ1bmN0aW9uIGdldFNpZGVMaXN0KHNpZGUsIGlzU3RhcnQsIHJ0bCkge1xuICBzd2l0Y2ggKHNpZGUpIHtcbiAgICBjYXNlICd0b3AnOlxuICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICBpZiAocnRsKSByZXR1cm4gaXNTdGFydCA/IHJsUGxhY2VtZW50IDogbHJQbGFjZW1lbnQ7XG4gICAgICByZXR1cm4gaXNTdGFydCA/IGxyUGxhY2VtZW50IDogcmxQbGFjZW1lbnQ7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuIGlzU3RhcnQgPyB0YlBsYWNlbWVudCA6IGJ0UGxhY2VtZW50O1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gW107XG4gIH1cbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMocGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBkaXJlY3Rpb24sIHJ0bCkge1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgbGV0IGxpc3QgPSBnZXRTaWRlTGlzdChnZXRTaWRlKHBsYWNlbWVudCksIGRpcmVjdGlvbiA9PT0gJ3N0YXJ0JywgcnRsKTtcbiAgaWYgKGFsaWdubWVudCkge1xuICAgIGxpc3QgPSBsaXN0Lm1hcChzaWRlID0+IHNpZGUgKyBcIi1cIiArIGFsaWdubWVudCk7XG4gICAgaWYgKGZsaXBBbGlnbm1lbnQpIHtcbiAgICAgIGxpc3QgPSBsaXN0LmNvbmNhdChsaXN0Lm1hcChnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbGlzdDtcbn1cbmZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICByZXR1cm4gb3Bwb3NpdGVTaWRlTWFwW3NpZGVdICsgcGxhY2VtZW50LnNsaWNlKHNpZGUubGVuZ3RoKTtcbn1cbmZ1bmN0aW9uIGV4cGFuZFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMCxcbiAgICAuLi5wYWRkaW5nXG4gIH07XG59XG5mdW5jdGlvbiBnZXRQYWRkaW5nT2JqZWN0KHBhZGRpbmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IGV4cGFuZFBhZGRpbmdPYmplY3QocGFkZGluZykgOiB7XG4gICAgdG9wOiBwYWRkaW5nLFxuICAgIHJpZ2h0OiBwYWRkaW5nLFxuICAgIGJvdHRvbTogcGFkZGluZyxcbiAgICBsZWZ0OiBwYWRkaW5nXG4gIH07XG59XG5mdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IHJlY3Q7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICBsZWZ0OiB4LFxuICAgIHJpZ2h0OiB4ICsgd2lkdGgsXG4gICAgYm90dG9tOiB5ICsgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5leHBvcnQgeyBhbGlnbm1lbnRzLCBjbGFtcCwgY3JlYXRlQ29vcmRzLCBldmFsdWF0ZSwgZXhwYW5kUGFkZGluZ09iamVjdCwgZmxvb3IsIGdldEFsaWdubWVudCwgZ2V0QWxpZ25tZW50QXhpcywgZ2V0QWxpZ25tZW50U2lkZXMsIGdldEF4aXNMZW5ndGgsIGdldEV4cGFuZGVkUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlQXhpcywgZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cywgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQsIGdldFBhZGRpbmdPYmplY3QsIGdldFNpZGUsIGdldFNpZGVBeGlzLCBtYXgsIG1pbiwgcGxhY2VtZW50cywgcmVjdFRvQ2xpZW50UmVjdCwgcm91bmQsIHNpZGVzIH07XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@hookform/resolvers/dist/resolvers.mjs":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/@hookform/resolvers/dist/resolvers.mjs ***!
|
||
\*************************************************************/
|
||
/***/ ((__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 */ toNestErrors: () => (/* binding */ s),\n/* harmony export */ validateFieldsNatively: () => (/* binding */ o)\n/* harmony export */ });\n/* harmony import */ var react_hook_form__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-hook-form */ \"(app-pages-browser)/./node_modules/react-hook-form/dist/index.esm.mjs\");\nconst r=(t,r,o)=>{if(t&&\"reportValidity\"in t){const s=(0,react_hook_form__WEBPACK_IMPORTED_MODULE_0__.get)(o,r);t.setCustomValidity(s&&s.message||\"\"),t.reportValidity()}},o=(e,t)=>{for(const o in t.fields){const s=t.fields[o];s&&s.ref&&\"reportValidity\"in s.ref?r(s.ref,o,e):s&&s.refs&&s.refs.forEach(t=>r(t,o,e))}},s=(r,s)=>{s.shouldUseNativeValidation&&o(r,s);const n={};for(const o in r){const f=(0,react_hook_form__WEBPACK_IMPORTED_MODULE_0__.get)(s.fields,o),c=Object.assign(r[o]||{},{ref:f&&f.ref});if(i(s.names||Object.keys(r),o)){const r=Object.assign({},(0,react_hook_form__WEBPACK_IMPORTED_MODULE_0__.get)(n,o));(0,react_hook_form__WEBPACK_IMPORTED_MODULE_0__.set)(r,\"root\",c),(0,react_hook_form__WEBPACK_IMPORTED_MODULE_0__.set)(n,o,r)}else (0,react_hook_form__WEBPACK_IMPORTED_MODULE_0__.set)(n,o,c)}return n},i=(e,t)=>{const r=n(t);return e.some(e=>n(e).match(`^${r}\\\\.\\\\d+`))};function n(e){return e.replace(/\\]|\\[/g,\"\")}\n//# sourceMappingURL=resolvers.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AaG9va2Zvcm0vcmVzb2x2ZXJzL2Rpc3QvcmVzb2x2ZXJzLm1qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBK0Msa0JBQWtCLDRCQUE0QixRQUFRLG9EQUFDLE1BQU0sMERBQTBELFdBQVcseUJBQXlCLG9CQUFvQix3RkFBd0YsV0FBVyxvQ0FBb0MsV0FBVyxrQkFBa0IsUUFBUSxvREFBQyxxQ0FBcUMsRUFBRSxhQUFhLEVBQUUsaUNBQWlDLHdCQUF3QixDQUFDLG9EQUFDLE9BQU8sb0RBQUMsYUFBYSxvREFBQyxRQUFRLEtBQUssb0RBQUMsUUFBUSxTQUFTLFdBQVcsYUFBYSxnQ0FBZ0MsRUFBRSxZQUFZLGNBQWMsOEJBQW9GO0FBQ3p0QiIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9AaG9va2Zvcm0vcmVzb2x2ZXJzL2Rpc3QvcmVzb2x2ZXJzLm1qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnR7Z2V0IGFzIGUsc2V0IGFzIHR9ZnJvbVwicmVhY3QtaG9vay1mb3JtXCI7Y29uc3Qgcj0odCxyLG8pPT57aWYodCYmXCJyZXBvcnRWYWxpZGl0eVwiaW4gdCl7Y29uc3Qgcz1lKG8scik7dC5zZXRDdXN0b21WYWxpZGl0eShzJiZzLm1lc3NhZ2V8fFwiXCIpLHQucmVwb3J0VmFsaWRpdHkoKX19LG89KGUsdCk9Pntmb3IoY29uc3QgbyBpbiB0LmZpZWxkcyl7Y29uc3Qgcz10LmZpZWxkc1tvXTtzJiZzLnJlZiYmXCJyZXBvcnRWYWxpZGl0eVwiaW4gcy5yZWY/cihzLnJlZixvLGUpOnMmJnMucmVmcyYmcy5yZWZzLmZvckVhY2godD0+cih0LG8sZSkpfX0scz0ocixzKT0+e3Muc2hvdWxkVXNlTmF0aXZlVmFsaWRhdGlvbiYmbyhyLHMpO2NvbnN0IG49e307Zm9yKGNvbnN0IG8gaW4gcil7Y29uc3QgZj1lKHMuZmllbGRzLG8pLGM9T2JqZWN0LmFzc2lnbihyW29dfHx7fSx7cmVmOmYmJmYucmVmfSk7aWYoaShzLm5hbWVzfHxPYmplY3Qua2V5cyhyKSxvKSl7Y29uc3Qgcj1PYmplY3QuYXNzaWduKHt9LGUobixvKSk7dChyLFwicm9vdFwiLGMpLHQobixvLHIpfWVsc2UgdChuLG8sYyl9cmV0dXJuIG59LGk9KGUsdCk9Pntjb25zdCByPW4odCk7cmV0dXJuIGUuc29tZShlPT5uKGUpLm1hdGNoKGBeJHtyfVxcXFwuXFxcXGQrYCkpfTtmdW5jdGlvbiBuKGUpe3JldHVybiBlLnJlcGxhY2UoL1xcXXxcXFsvZyxcIlwiKX1leHBvcnR7cyBhcyB0b05lc3RFcnJvcnMsbyBhcyB2YWxpZGF0ZUZpZWxkc05hdGl2ZWx5fTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlc29sdmVycy5tanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@hookform/resolvers/dist/resolvers.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@hookform/resolvers/zod/dist/zod.mjs":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/@hookform/resolvers/zod/dist/zod.mjs ***!
|
||
\***********************************************************/
|
||
/***/ ((__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 */ zodResolver: () => (/* binding */ a)\n/* harmony export */ });\n/* harmony import */ var _hookform_resolvers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @hookform/resolvers */ \"(app-pages-browser)/./node_modules/@hookform/resolvers/dist/resolvers.mjs\");\n/* harmony import */ var react_hook_form__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-hook-form */ \"(app-pages-browser)/./node_modules/react-hook-form/dist/index.esm.mjs\");\n/* harmony import */ var zod_v4_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! zod/v4/core */ \"(app-pages-browser)/./node_modules/zod/v4/core/parse.js\");\n/* harmony import */ var zod_v4_core__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! zod/v4/core */ \"(app-pages-browser)/./node_modules/zod/v4/core/errors.js\");\nfunction t(r,e){try{var o=r()}catch(r){return e(r)}return o&&o.then?o.then(void 0,e):o}function s(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"unionErrors\"in t){var u=t.unionErrors[0].errors[0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"unionErrors\"in t&&t.unionErrors.forEach(function(e){return e.errors.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=(0,react_hook_form__WEBPACK_IMPORTED_MODULE_1__.appendErrors)(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n}function i(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"invalid_union\"===t.code&&t.errors.length>0){var u=t.errors[0][0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"invalid_union\"===t.code&&t.errors.forEach(function(e){return e.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=(0,react_hook_form__WEBPACK_IMPORTED_MODULE_1__.appendErrors)(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n}function a(o,a,u){if(void 0===u&&(u={}),function(r){return\"_def\"in r&&\"object\"==typeof r._def&&\"typeName\"in r._def}(o))return function(n,i,c){try{return Promise.resolve(t(function(){return Promise.resolve(o[\"sync\"===u.mode?\"parse\":\"parseAsync\"](n,a)).then(function(e){return c.shouldUseNativeValidation&&(0,_hookform_resolvers__WEBPACK_IMPORTED_MODULE_0__.validateFieldsNatively)({},c),{errors:{},values:u.raw?Object.assign({},n):e}})},function(r){if(function(r){return Array.isArray(null==r?void 0:r.issues)}(r))return{values:{},errors:(0,_hookform_resolvers__WEBPACK_IMPORTED_MODULE_0__.toNestErrors)(s(r.errors,!c.shouldUseNativeValidation&&\"all\"===c.criteriaMode),c)};throw r}))}catch(r){return Promise.reject(r)}};if(function(r){return\"_zod\"in r&&\"object\"==typeof r._zod}(o))return function(s,c,f){try{return Promise.resolve(t(function(){return Promise.resolve((\"sync\"===u.mode?zod_v4_core__WEBPACK_IMPORTED_MODULE_2__.parse:zod_v4_core__WEBPACK_IMPORTED_MODULE_2__.parseAsync)(o,s,a)).then(function(e){return f.shouldUseNativeValidation&&(0,_hookform_resolvers__WEBPACK_IMPORTED_MODULE_0__.validateFieldsNatively)({},f),{errors:{},values:u.raw?Object.assign({},s):e}})},function(r){if(function(r){return r instanceof zod_v4_core__WEBPACK_IMPORTED_MODULE_3__.$ZodError}(r))return{values:{},errors:(0,_hookform_resolvers__WEBPACK_IMPORTED_MODULE_0__.toNestErrors)(i(r.issues,!f.shouldUseNativeValidation&&\"all\"===f.criteriaMode),f)};throw r}))}catch(r){return Promise.reject(r)}};throw new Error(\"Invalid input: not a Zod schema\")}\n//# sourceMappingURL=zod.module.js.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9AaG9va2Zvcm0vcmVzb2x2ZXJzL3pvZC9kaXN0L3pvZC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBNEosZ0JBQWdCLElBQUksVUFBVSxTQUFTLFlBQVksb0NBQW9DLGdCQUFnQixhQUFhLFNBQVMsRUFBRSxtREFBbUQsK0JBQStCLGlDQUFpQyxNQUFNLCtCQUErQixXQUFXLGtCQUFrQix3REFBd0Qsb0NBQW9DLGlCQUFpQixFQUFFLEtBQUssZ0NBQWdDLEtBQUssNkRBQUMsNkNBQTZDLFVBQVUsU0FBUyxnQkFBZ0IsYUFBYSxTQUFTLEVBQUUsbURBQW1ELHlEQUF5RCxxQkFBcUIsTUFBTSwrQkFBK0IsV0FBVyxrQkFBa0IsMERBQTBELDZCQUE2QixpQkFBaUIsRUFBRSxLQUFLLGdDQUFnQyxLQUFLLDZEQUFDLDZDQUE2QyxVQUFVLFNBQVMsa0JBQWtCLG9CQUFvQixjQUFjLCtEQUErRCwyQkFBMkIsSUFBSSxvQ0FBb0Msc0ZBQXNGLG9DQUFvQywyRUFBQyxHQUFHLEtBQUssU0FBUyw4QkFBOEIsT0FBTyxFQUFFLGFBQWEsZUFBZSw4Q0FBOEMsV0FBVyxTQUFTLFFBQVEsaUVBQUMsc0VBQXNFLFFBQVEsR0FBRyxTQUFTLDJCQUEyQixlQUFlLDBDQUEwQywyQkFBMkIsSUFBSSxvQ0FBb0Msd0NBQXdDLDhDQUFPLENBQUMsbURBQVksMkJBQTJCLG9DQUFvQywyRUFBQyxHQUFHLEtBQUssU0FBUyw4QkFBOEIsT0FBTyxFQUFFLGFBQWEsZUFBZSxvQkFBb0Isa0RBQVcsQ0FBQyxXQUFXLFNBQVMsUUFBUSxpRUFBQyxzRUFBc0UsUUFBUSxHQUFHLFNBQVMsMkJBQTJCLG1EQUE0RTtBQUN6dkUiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQGhvb2tmb3JtL3Jlc29sdmVycy96b2QvZGlzdC96b2QubWpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydHt2YWxpZGF0ZUZpZWxkc05hdGl2ZWx5IGFzIHIsdG9OZXN0RXJyb3JzIGFzIGV9ZnJvbVwiQGhvb2tmb3JtL3Jlc29sdmVyc1wiO2ltcG9ydHthcHBlbmRFcnJvcnMgYXMgb31mcm9tXCJyZWFjdC1ob29rLWZvcm1cIjtpbXBvcnQqYXMgbiBmcm9tXCJ6b2QvdjQvY29yZVwiO2Z1bmN0aW9uIHQocixlKXt0cnl7dmFyIG89cigpfWNhdGNoKHIpe3JldHVybiBlKHIpfXJldHVybiBvJiZvLnRoZW4/by50aGVuKHZvaWQgMCxlKTpvfWZ1bmN0aW9uIHMocixlKXtmb3IodmFyIG49e307ci5sZW5ndGg7KXt2YXIgdD1yWzBdLHM9dC5jb2RlLGk9dC5tZXNzYWdlLGE9dC5wYXRoLmpvaW4oXCIuXCIpO2lmKCFuW2FdKWlmKFwidW5pb25FcnJvcnNcImluIHQpe3ZhciB1PXQudW5pb25FcnJvcnNbMF0uZXJyb3JzWzBdO25bYV09e21lc3NhZ2U6dS5tZXNzYWdlLHR5cGU6dS5jb2RlfX1lbHNlIG5bYV09e21lc3NhZ2U6aSx0eXBlOnN9O2lmKFwidW5pb25FcnJvcnNcImluIHQmJnQudW5pb25FcnJvcnMuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcnMuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gci5wdXNoKGUpfSl9KSxlKXt2YXIgYz1uW2FdLnR5cGVzLGY9YyYmY1t0LmNvZGVdO25bYV09byhhLGUsbixzLGY/W10uY29uY2F0KGYsdC5tZXNzYWdlKTp0Lm1lc3NhZ2UpfXIuc2hpZnQoKX1yZXR1cm4gbn1mdW5jdGlvbiBpKHIsZSl7Zm9yKHZhciBuPXt9O3IubGVuZ3RoOyl7dmFyIHQ9clswXSxzPXQuY29kZSxpPXQubWVzc2FnZSxhPXQucGF0aC5qb2luKFwiLlwiKTtpZighblthXSlpZihcImludmFsaWRfdW5pb25cIj09PXQuY29kZSYmdC5lcnJvcnMubGVuZ3RoPjApe3ZhciB1PXQuZXJyb3JzWzBdWzBdO25bYV09e21lc3NhZ2U6dS5tZXNzYWdlLHR5cGU6dS5jb2RlfX1lbHNlIG5bYV09e21lc3NhZ2U6aSx0eXBlOnN9O2lmKFwiaW52YWxpZF91bmlvblwiPT09dC5jb2RlJiZ0LmVycm9ycy5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHIucHVzaChlKX0pfSksZSl7dmFyIGM9blthXS50eXBlcyxmPWMmJmNbdC5jb2RlXTtuW2FdPW8oYSxlLG4scyxmP1tdLmNvbmNhdChmLHQubWVzc2FnZSk6dC5tZXNzYWdlKX1yLnNoaWZ0KCl9cmV0dXJuIG59ZnVuY3Rpb24gYShvLGEsdSl7aWYodm9pZCAwPT09dSYmKHU9e30pLGZ1bmN0aW9uKHIpe3JldHVyblwiX2RlZlwiaW4gciYmXCJvYmplY3RcIj09dHlwZW9mIHIuX2RlZiYmXCJ0eXBlTmFtZVwiaW4gci5fZGVmfShvKSlyZXR1cm4gZnVuY3Rpb24obixpLGMpe3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHQoZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG9bXCJzeW5jXCI9PT11Lm1vZGU/XCJwYXJzZVwiOlwicGFyc2VBc3luY1wiXShuLGEpKS50aGVuKGZ1bmN0aW9uKGUpe3JldHVybiBjLnNob3VsZFVzZU5hdGl2ZVZhbGlkYXRpb24mJnIoe30sYykse2Vycm9yczp7fSx2YWx1ZXM6dS5yYXc/T2JqZWN0LmFzc2lnbih7fSxuKTplfX0pfSxmdW5jdGlvbihyKXtpZihmdW5jdGlvbihyKXtyZXR1cm4gQXJyYXkuaXNBcnJheShudWxsPT1yP3ZvaWQgMDpyLmlzc3Vlcyl9KHIpKXJldHVybnt2YWx1ZXM6e30sZXJyb3JzOmUocyhyLmVycm9ycywhYy5zaG91bGRVc2VOYXRpdmVWYWxpZGF0aW9uJiZcImFsbFwiPT09Yy5jcml0ZXJpYU1vZGUpLGMpfTt0aHJvdyByfSkpfWNhdGNoKHIpe3JldHVybiBQcm9taXNlLnJlamVjdChyKX19O2lmKGZ1bmN0aW9uKHIpe3JldHVyblwiX3pvZFwiaW4gciYmXCJvYmplY3RcIj09dHlwZW9mIHIuX3pvZH0obykpcmV0dXJuIGZ1bmN0aW9uKHMsYyxmKXt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0KGZ1bmN0aW9uKCl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSgoXCJzeW5jXCI9PT11Lm1vZGU/bi5wYXJzZTpuLnBhcnNlQXN5bmMpKG8scyxhKSkudGhlbihmdW5jdGlvbihlKXtyZXR1cm4gZi5zaG91bGRVc2VOYXRpdmVWYWxpZGF0aW9uJiZyKHt9LGYpLHtlcnJvcnM6e30sdmFsdWVzOnUucmF3P09iamVjdC5hc3NpZ24oe30scyk6ZX19KX0sZnVuY3Rpb24ocil7aWYoZnVuY3Rpb24ocil7cmV0dXJuIHIgaW5zdGFuY2VvZiBuLiRab2RFcnJvcn0ocikpcmV0dXJue3ZhbHVlczp7fSxlcnJvcnM6ZShpKHIuaXNzdWVzLCFmLnNob3VsZFVzZU5hdGl2ZVZhbGlkYXRpb24mJlwiYWxsXCI9PT1mLmNyaXRlcmlhTW9kZSksZil9O3Rocm93IHJ9KSl9Y2F0Y2gocil7cmV0dXJuIFByb21pc2UucmVqZWN0KHIpfX07dGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpbnB1dDogbm90IGEgWm9kIHNjaGVtYVwiKX1leHBvcnR7YSBhcyB6b2RSZXNvbHZlcn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD16b2QubW9kdWxlLmpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@hookform/resolvers/zod/dist/zod.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/AuthAdminApi.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/AuthAdminApi.js ***!
|
||
\********************************************************************/
|
||
/***/ ((__unused_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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _GoTrueAdminApi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GoTrueAdminApi */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueAdminApi.js\");\n\nconst AuthAdminApi = _GoTrueAdminApi__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AuthAdminApi);\n//# sourceMappingURL=AuthAdminApi.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9BdXRoQWRtaW5BcGkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBOEM7QUFDOUMscUJBQXFCLHVEQUFjO0FBQ25DLGlFQUFlLFlBQVksRUFBQztBQUM1QiIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9BdXRoQWRtaW5BcGkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEdvVHJ1ZUFkbWluQXBpIGZyb20gJy4vR29UcnVlQWRtaW5BcGknO1xuY29uc3QgQXV0aEFkbWluQXBpID0gR29UcnVlQWRtaW5BcGk7XG5leHBvcnQgZGVmYXVsdCBBdXRoQWRtaW5BcGk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BdXRoQWRtaW5BcGkuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/AuthAdminApi.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/AuthClient.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/AuthClient.js ***!
|
||
\******************************************************************/
|
||
/***/ ((__unused_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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _GoTrueClient__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GoTrueClient */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueClient.js\");\n\nconst AuthClient = _GoTrueClient__WEBPACK_IMPORTED_MODULE_0__[\"default\"];\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (AuthClient);\n//# sourceMappingURL=AuthClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9BdXRoQ2xpZW50LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQTBDO0FBQzFDLG1CQUFtQixxREFBWTtBQUMvQixpRUFBZSxVQUFVLEVBQUM7QUFDMUIiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tb2R1bGUvQXV0aENsaWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgR29UcnVlQ2xpZW50IGZyb20gJy4vR29UcnVlQ2xpZW50JztcbmNvbnN0IEF1dGhDbGllbnQgPSBHb1RydWVDbGllbnQ7XG5leHBvcnQgZGVmYXVsdCBBdXRoQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXV0aENsaWVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/AuthClient.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueAdminApi.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/GoTrueAdminApi.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((__unused_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 */ \"default\": () => (/* binding */ GoTrueAdminApi)\n/* harmony export */ });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tslib */ \"(app-pages-browser)/./node_modules/tslib/tslib.es6.mjs\");\n/* harmony import */ var _lib_fetch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/fetch */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/fetch.js\");\n/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/helpers */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/helpers.js\");\n/* harmony import */ var _lib_types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/types */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/types.js\");\n/* harmony import */ var _lib_errors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/errors */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/errors.js\");\n\n\n\n\n\nclass GoTrueAdminApi {\n /**\n * Creates an admin API client that can be used to manage users and OAuth clients.\n *\n * @example Using supabase-js (recommended)\n * ```ts\n * import { createClient } from '@supabase/supabase-js'\n *\n * const supabase = createClient('https://xyzcompany.supabase.co', 'your-secret-key')\n * const { data, error } = await supabase.auth.admin.listUsers()\n * ```\n *\n * @example Standalone import for bundle-sensitive environments\n * ```ts\n * import { GoTrueAdminApi } from '@supabase/auth-js'\n *\n * const admin = new GoTrueAdminApi({\n * url: 'https://xyzcompany.supabase.co/auth/v1',\n * headers: { Authorization: `Bearer ${process.env.SUPABASE_SECRET_KEY}` },\n * })\n * ```\n */\n constructor({ url = '', headers = {}, fetch, experimental, }) {\n this.url = url;\n this.headers = headers;\n this.fetch = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.resolveFetch)(fetch);\n this.experimental = experimental !== null && experimental !== void 0 ? experimental : {};\n this.mfa = {\n listFactors: this._listFactors.bind(this),\n deleteFactor: this._deleteFactor.bind(this),\n };\n this.oauth = {\n listClients: this._listOAuthClients.bind(this),\n createClient: this._createOAuthClient.bind(this),\n getClient: this._getOAuthClient.bind(this),\n updateClient: this._updateOAuthClient.bind(this),\n deleteClient: this._deleteOAuthClient.bind(this),\n regenerateClientSecret: this._regenerateOAuthClientSecret.bind(this),\n };\n this.customProviders = {\n listProviders: this._listCustomProviders.bind(this),\n createProvider: this._createCustomProvider.bind(this),\n getProvider: this._getCustomProvider.bind(this),\n updateProvider: this._updateCustomProvider.bind(this),\n deleteProvider: this._deleteCustomProvider.bind(this),\n };\n this.passkey = {\n listPasskeys: this._adminListPasskeys.bind(this),\n deletePasskey: this._adminDeletePasskey.bind(this),\n };\n }\n /**\n * Removes a logged-in session.\n * @param jwt A valid, logged-in JWT.\n * @param scope The logout sope.\n *\n * @category Auth\n * @subcategory Auth Admin\n */\n async signOut(jwt, scope = _lib_types__WEBPACK_IMPORTED_MODULE_2__.SIGN_OUT_SCOPES[0]) {\n if (_lib_types__WEBPACK_IMPORTED_MODULE_2__.SIGN_OUT_SCOPES.indexOf(scope) < 0) {\n throw new Error(`@supabase/auth-js: Parameter scope must be one of ${_lib_types__WEBPACK_IMPORTED_MODULE_2__.SIGN_OUT_SCOPES.join(', ')}`);\n }\n try {\n await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'POST', `${this.url}/logout?scope=${scope}`, {\n headers: this.headers,\n jwt,\n noResolveJson: true,\n });\n return { data: null, error: null };\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Sends an invite link to an email address.\n * @param email The email address of the user.\n * @param options Additional options to be included when inviting.\n *\n * @category Auth\n * @subcategory Auth Admin\n *\n * @remarks\n * - Sends an invite link to the user's email address.\n * - The `inviteUserByEmail()` method is typically used by administrators to invite users to join the application.\n * - Note that PKCE is not supported when using `inviteUserByEmail`. This is because the browser initiating the invite is often different from the browser accepting the invite which makes it difficult to provide the security guarantees required of the PKCE flow.\n *\n * @example Invite a user\n * ```js\n * const { data, error } = await supabase.auth.admin.inviteUserByEmail('email@example.com')\n * ```\n *\n * @exampleResponse Invite a user\n * ```json\n * {\n * \"data\": {\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"example@email.com\",\n * \"invited_at\": \"2024-01-01T00:00:00Z\",\n * \"phone\": \"\",\n * \"confirmation_sent_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {},\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"is_anonymous\": false\n * }\n * },\n * \"error\": null\n * }\n * ```\n */\n async inviteUserByEmail(email, options = {}) {\n try {\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'POST', `${this.url}/invite`, {\n body: { email, data: options.data },\n headers: this.headers,\n redirectTo: options.redirectTo,\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_0__._userResponse,\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: { user: null }, error };\n }\n throw error;\n }\n }\n /**\n * Generates email links and OTPs to be sent via a custom email provider.\n * @param email The user's email.\n * @param options.password User password. For signup only.\n * @param options.data Optional user metadata. For signup only.\n * @param options.redirectTo The redirect url which should be appended to the generated link\n *\n * @category Auth\n * @subcategory Auth Admin\n *\n * @remarks\n * - The following types can be passed into `generateLink()`: `signup`, `magiclink`, `invite`, `recovery`, `email_change_current`, `email_change_new`, `phone_change`.\n * - `generateLink()` only generates the email link for `email_change_email` if the **Secure email change** is enabled in your project's [email auth provider settings](/dashboard/project/_/auth/providers).\n * - `generateLink()` handles the creation of the user for `signup`, `invite` and `magiclink`.\n *\n * @example Generate a signup link\n * ```js\n * const { data, error } = await supabase.auth.admin.generateLink({\n * type: 'signup',\n * email: 'email@example.com',\n * password: 'secret'\n * })\n * ```\n *\n * @exampleResponse Generate a signup link\n * ```json\n * {\n * \"data\": {\n * \"properties\": {\n * \"action_link\": \"<LINK_TO_SEND_TO_USER>\",\n * \"email_otp\": \"999999\",\n * \"hashed_token\": \"<HASHED_TOKEN\",\n * \"redirect_to\": \"<REDIRECT_URL>\",\n * \"verification_type\": \"signup\"\n * },\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"email@example.com\",\n * \"phone\": \"\",\n * \"confirmation_sent_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {},\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"email@example.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"email@example.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"is_anonymous\": false\n * }\n * },\n * \"error\": null\n * }\n * ```\n *\n * @example Generate an invite link\n * ```js\n * const { data, error } = await supabase.auth.admin.generateLink({\n * type: 'invite',\n * email: 'email@example.com'\n * })\n * ```\n *\n * @example Generate a magic link\n * ```js\n * const { data, error } = await supabase.auth.admin.generateLink({\n * type: 'magiclink',\n * email: 'email@example.com'\n * })\n * ```\n *\n * @example Generate a recovery link\n * ```js\n * const { data, error } = await supabase.auth.admin.generateLink({\n * type: 'recovery',\n * email: 'email@example.com'\n * })\n * ```\n *\n * @example Generate links to change current email address\n * ```js\n * // generate an email change link to be sent to the current email address\n * const { data, error } = await supabase.auth.admin.generateLink({\n * type: 'email_change_current',\n * email: 'current.email@example.com',\n * newEmail: 'new.email@example.com'\n * })\n *\n * // generate an email change link to be sent to the new email address\n * const { data, error } = await supabase.auth.admin.generateLink({\n * type: 'email_change_new',\n * email: 'current.email@example.com',\n * newEmail: 'new.email@example.com'\n * })\n * ```\n */\n async generateLink(params) {\n try {\n const { options } = params, rest = (0,tslib__WEBPACK_IMPORTED_MODULE_4__.__rest)(params, [\"options\"]);\n const body = Object.assign(Object.assign({}, rest), options);\n if ('newEmail' in rest) {\n // replace newEmail with new_email in request body\n body.new_email = rest === null || rest === void 0 ? void 0 : rest.newEmail;\n delete body['newEmail'];\n }\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'POST', `${this.url}/admin/generate_link`, {\n body: body,\n headers: this.headers,\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_0__._generateLinkResponse,\n redirectTo: options === null || options === void 0 ? void 0 : options.redirectTo,\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return {\n data: {\n properties: null,\n user: null,\n },\n error,\n };\n }\n throw error;\n }\n }\n // User Admin API\n /**\n * Creates a new user.\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n *\n * @category Auth\n * @subcategory Auth Admin\n *\n * @remarks\n * - To confirm the user's email address or phone number, set `email_confirm` or `phone_confirm` to true. Both arguments default to false.\n * - `createUser()` will not send a confirmation email to the user. You can use [`inviteUserByEmail()`](/docs/reference/javascript/auth-admin-inviteuserbyemail) if you want to send them an email invite instead.\n * - If you are sure that the created user's email or phone number is legitimate and verified, you can set the `email_confirm` or `phone_confirm` param to `true`.\n *\n * @example With custom user metadata\n * ```js\n * const { data, error } = await supabase.auth.admin.createUser({\n * email: 'user@email.com',\n * password: 'password',\n * user_metadata: { name: 'Yoda' }\n * })\n * ```\n *\n * @exampleResponse With custom user metadata\n * ```json\n * {\n * data: {\n * user: {\n * id: '1',\n * aud: 'authenticated',\n * role: 'authenticated',\n * email: 'example@email.com',\n * email_confirmed_at: '2024-01-01T00:00:00Z',\n * phone: '',\n * confirmation_sent_at: '2024-01-01T00:00:00Z',\n * confirmed_at: '2024-01-01T00:00:00Z',\n * last_sign_in_at: '2024-01-01T00:00:00Z',\n * app_metadata: {},\n * user_metadata: {},\n * identities: [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"1\",\n * \"user_id\": \"1\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": true,\n * \"phone_verified\": false,\n * \"sub\": \"1\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"email@example.com\"\n * },\n * ],\n * created_at: '2024-01-01T00:00:00Z',\n * updated_at: '2024-01-01T00:00:00Z',\n * is_anonymous: false,\n * }\n * }\n * error: null\n * }\n * ```\n *\n * @example Auto-confirm the user's email\n * ```js\n * const { data, error } = await supabase.auth.admin.createUser({\n * email: 'user@email.com',\n * email_confirm: true\n * })\n * ```\n *\n * @example Auto-confirm the user's phone number\n * ```js\n * const { data, error } = await supabase.auth.admin.createUser({\n * phone: '1234567890',\n * phone_confirm: true\n * })\n * ```\n */\n async createUser(attributes) {\n try {\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'POST', `${this.url}/admin/users`, {\n body: attributes,\n headers: this.headers,\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_0__._userResponse,\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: { user: null }, error };\n }\n throw error;\n }\n }\n /**\n * Get a list of users.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n * @param params An object which supports `page` and `perPage` as numbers, to alter the paginated results.\n *\n * @category Auth\n * @subcategory Auth Admin\n *\n * @remarks\n * - Defaults to return 50 users per page.\n *\n * @example Get a page of users\n * ```js\n * const { data: { users }, error } = await supabase.auth.admin.listUsers()\n * ```\n *\n * @example Paginated list of users\n * ```js\n * const { data: { users }, error } = await supabase.auth.admin.listUsers({\n * page: 1,\n * perPage: 1000\n * })\n * ```\n */\n async listUsers(params) {\n var _a, _b, _c, _d, _e, _f, _g;\n try {\n const pagination = { nextPage: null, lastPage: 0, total: 0 };\n const response = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'GET', `${this.url}/admin/users`, {\n headers: this.headers,\n noResolveJson: true,\n query: {\n page: (_b = (_a = params === null || params === void 0 ? void 0 : params.page) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '',\n per_page: (_d = (_c = params === null || params === void 0 ? void 0 : params.perPage) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : '',\n },\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_0__._noResolveJsonResponse,\n });\n if (response.error)\n throw response.error;\n const users = await response.json();\n const total = (_e = response.headers.get('x-total-count')) !== null && _e !== void 0 ? _e : 0;\n const links = (_g = (_f = response.headers.get('link')) === null || _f === void 0 ? void 0 : _f.split(',')) !== null && _g !== void 0 ? _g : [];\n if (links.length > 0) {\n links.forEach((link) => {\n const page = parseInt(link.split(';')[0].split('=')[1].substring(0, 1));\n const rel = JSON.parse(link.split(';')[1].split('=')[1]);\n pagination[`${rel}Page`] = page;\n });\n pagination.total = parseInt(total);\n }\n return { data: Object.assign(Object.assign({}, users), pagination), error: null };\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: { users: [] }, error };\n }\n throw error;\n }\n }\n /**\n * Get user by id.\n *\n * @param uid The user's unique identifier\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n *\n * @category Auth\n * @subcategory Auth Admin\n *\n * @remarks\n * - Fetches the user object from the database based on the user's id.\n * - The `getUserById()` method requires the user's id which maps to the `auth.users.id` column.\n *\n * @example Fetch the user object using the access_token jwt\n * ```js\n * const { data, error } = await supabase.auth.admin.getUserById(1)\n * ```\n *\n * @exampleResponse Fetch the user object using the access_token jwt\n * ```json\n * {\n * data: {\n * user: {\n * id: '1',\n * aud: 'authenticated',\n * role: 'authenticated',\n * email: 'example@email.com',\n * email_confirmed_at: '2024-01-01T00:00:00Z',\n * phone: '',\n * confirmation_sent_at: '2024-01-01T00:00:00Z',\n * confirmed_at: '2024-01-01T00:00:00Z',\n * last_sign_in_at: '2024-01-01T00:00:00Z',\n * app_metadata: {},\n * user_metadata: {},\n * identities: [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"1\",\n * \"user_id\": \"1\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": true,\n * \"phone_verified\": false,\n * \"sub\": \"1\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"email@example.com\"\n * },\n * ],\n * created_at: '2024-01-01T00:00:00Z',\n * updated_at: '2024-01-01T00:00:00Z',\n * is_anonymous: false,\n * }\n * }\n * error: null\n * }\n * ```\n */\n async getUserById(uid) {\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.validateUUID)(uid);\n try {\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'GET', `${this.url}/admin/users/${uid}`, {\n headers: this.headers,\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_0__._userResponse,\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: { user: null }, error };\n }\n throw error;\n }\n }\n /**\n * Updates the user data. Changes are applied directly without confirmation flows.\n *\n * @param uid The user's unique identifier\n * @param attributes The data you want to update.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n *\n * @remarks\n * **Important:** This is a server-side operation and does **not** trigger client-side\n * `onAuthStateChange` listeners. The admin API has no connection to client state.\n *\n * To sync changes to the client after calling this method:\n * 1. On the client, call `supabase.auth.refreshSession()` to fetch the updated user data\n * 2. This will trigger the `TOKEN_REFRESHED` event and notify all listeners\n *\n * @example\n * ```typescript\n * // Server-side (Edge Function)\n * const { data, error } = await supabase.auth.admin.updateUserById(\n * userId,\n * { user_metadata: { preferences: { theme: 'dark' } } }\n * )\n *\n * // Client-side (to sync the changes)\n * const { data, error } = await supabase.auth.refreshSession()\n * // onAuthStateChange listeners will now be notified with updated user\n * ```\n *\n * @see {@link GoTrueClient.refreshSession} for syncing admin changes to the client\n * @see {@link GoTrueClient.updateUser} for client-side user updates (triggers listeners automatically)\n *\n * @category Auth\n * @subcategory Auth Admin\n *\n * @example Updates a user's email\n * ```js\n * const { data: user, error } = await supabase.auth.admin.updateUserById(\n * '11111111-1111-1111-1111-111111111111',\n * { email: 'new@email.com' }\n * )\n * ```\n *\n * @exampleResponse Updates a user's email\n * ```json\n * {\n * \"data\": {\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"new@email.com\",\n * \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"phone\": \"\",\n * \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"recovery_sent_at\": \"2024-01-01T00:00:00Z\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"is_anonymous\": false\n * }\n * },\n * \"error\": null\n * }\n * ```\n *\n * @example Updates a user's password\n * ```js\n * const { data: user, error } = await supabase.auth.admin.updateUserById(\n * '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n * { password: 'new_password' }\n * )\n * ```\n *\n * @example Updates a user's metadata\n * ```js\n * const { data: user, error } = await supabase.auth.admin.updateUserById(\n * '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n * { user_metadata: { hello: 'world' } }\n * )\n * ```\n *\n * @example Updates a user's app_metadata\n * ```js\n * const { data: user, error } = await supabase.auth.admin.updateUserById(\n * '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n * { app_metadata: { plan: 'trial' } }\n * )\n * ```\n *\n * @example Confirms a user's email address\n * ```js\n * const { data: user, error } = await supabase.auth.admin.updateUserById(\n * '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n * { email_confirm: true }\n * )\n * ```\n *\n * @example Confirms a user's phone number\n * ```js\n * const { data: user, error } = await supabase.auth.admin.updateUserById(\n * '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n * { phone_confirm: true }\n * )\n * ```\n *\n * @example Ban a user for 100 years\n * ```js\n * const { data: user, error } = await supabase.auth.admin.updateUserById(\n * '6aa5d0d4-2a9f-4483-b6c8-0cf4c6c98ac4',\n * { ban_duration: '876000h' }\n * )\n * ```\n */\n async updateUserById(uid, attributes) {\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.validateUUID)(uid);\n try {\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'PUT', `${this.url}/admin/users/${uid}`, {\n body: attributes,\n headers: this.headers,\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_0__._userResponse,\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: { user: null }, error };\n }\n throw error;\n }\n }\n /**\n * Delete a user. Requires a `service_role` key.\n *\n * @param id The user id you want to remove.\n * @param shouldSoftDelete If true, then the user will be soft-deleted from the auth schema. Soft deletion allows user identification from the hashed user ID but is not reversible.\n * Defaults to false for backward compatibility.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n *\n * @category Auth\n * @subcategory Auth Admin\n *\n * @remarks\n * - The `deleteUser()` method requires the user's ID, which maps to the `auth.users.id` column.\n *\n * @example Removes a user\n * ```js\n * const { data, error } = await supabase.auth.admin.deleteUser(\n * '715ed5db-f090-4b8c-a067-640ecee36aa0'\n * )\n * ```\n *\n * @exampleResponse Removes a user\n * ```json\n * {\n * \"data\": {\n * \"user\": {}\n * },\n * \"error\": null\n * }\n * ```\n */\n async deleteUser(id, shouldSoftDelete = false) {\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.validateUUID)(id);\n try {\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'DELETE', `${this.url}/admin/users/${id}`, {\n headers: this.headers,\n body: {\n should_soft_delete: shouldSoftDelete,\n },\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_0__._userResponse,\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: { user: null }, error };\n }\n throw error;\n }\n }\n async _listFactors(params) {\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.validateUUID)(params.userId);\n try {\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'GET', `${this.url}/admin/users/${params.userId}/factors`, {\n headers: this.headers,\n xform: (factors) => {\n return { data: { factors }, error: null };\n },\n });\n return { data, error };\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n async _deleteFactor(params) {\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.validateUUID)(params.userId);\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.validateUUID)(params.id);\n try {\n const data = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'DELETE', `${this.url}/admin/users/${params.userId}/factors/${params.id}`, {\n headers: this.headers,\n });\n return { data, error: null };\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Lists all OAuth clients with optional pagination.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n */\n async _listOAuthClients(params) {\n var _a, _b, _c, _d, _e, _f, _g;\n try {\n const pagination = { nextPage: null, lastPage: 0, total: 0 };\n const response = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'GET', `${this.url}/admin/oauth/clients`, {\n headers: this.headers,\n noResolveJson: true,\n query: {\n page: (_b = (_a = params === null || params === void 0 ? void 0 : params.page) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '',\n per_page: (_d = (_c = params === null || params === void 0 ? void 0 : params.perPage) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : '',\n },\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_0__._noResolveJsonResponse,\n });\n if (response.error)\n throw response.error;\n const clients = await response.json();\n const total = (_e = response.headers.get('x-total-count')) !== null && _e !== void 0 ? _e : 0;\n const links = (_g = (_f = response.headers.get('link')) === null || _f === void 0 ? void 0 : _f.split(',')) !== null && _g !== void 0 ? _g : [];\n if (links.length > 0) {\n links.forEach((link) => {\n const page = parseInt(link.split(';')[0].split('=')[1].substring(0, 1));\n const rel = JSON.parse(link.split(';')[1].split('=')[1]);\n pagination[`${rel}Page`] = page;\n });\n pagination.total = parseInt(total);\n }\n return { data: Object.assign(Object.assign({}, clients), pagination), error: null };\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: { clients: [] }, error };\n }\n throw error;\n }\n }\n /**\n * Creates a new OAuth client.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n */\n async _createOAuthClient(params) {\n try {\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'POST', `${this.url}/admin/oauth/clients`, {\n body: params,\n headers: this.headers,\n xform: (client) => {\n return { data: client, error: null };\n },\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Gets details of a specific OAuth client.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n */\n async _getOAuthClient(clientId) {\n try {\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'GET', `${this.url}/admin/oauth/clients/${clientId}`, {\n headers: this.headers,\n xform: (client) => {\n return { data: client, error: null };\n },\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Updates an existing OAuth client.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n */\n async _updateOAuthClient(clientId, params) {\n try {\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'PUT', `${this.url}/admin/oauth/clients/${clientId}`, {\n body: params,\n headers: this.headers,\n xform: (client) => {\n return { data: client, error: null };\n },\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Deletes an OAuth client.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n */\n async _deleteOAuthClient(clientId) {\n try {\n await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'DELETE', `${this.url}/admin/oauth/clients/${clientId}`, {\n headers: this.headers,\n noResolveJson: true,\n });\n return { data: null, error: null };\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Regenerates the secret for an OAuth client.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n */\n async _regenerateOAuthClientSecret(clientId) {\n try {\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'POST', `${this.url}/admin/oauth/clients/${clientId}/regenerate_secret`, {\n headers: this.headers,\n xform: (client) => {\n return { data: client, error: null };\n },\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Lists all custom providers with optional type filter.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n */\n async _listCustomProviders(params) {\n try {\n const query = {};\n if (params === null || params === void 0 ? void 0 : params.type) {\n query.type = params.type;\n }\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'GET', `${this.url}/admin/custom-providers`, {\n headers: this.headers,\n query,\n xform: (data) => {\n var _a;\n return { data: { providers: (_a = data === null || data === void 0 ? void 0 : data.providers) !== null && _a !== void 0 ? _a : [] }, error: null };\n },\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: { providers: [] }, error };\n }\n throw error;\n }\n }\n /**\n * Creates a new custom OIDC/OAuth provider.\n *\n * For OIDC providers, the server fetches and validates the OpenID Connect discovery document\n * from the issuer's well-known endpoint (or the provided `discovery_url`) at creation time.\n * This may return a validation error (`error_code: \"validation_failed\"`) if the discovery\n * document is unreachable, not valid JSON, missing required fields, or if the issuer\n * in the document does not match the expected issuer.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n */\n async _createCustomProvider(params) {\n try {\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'POST', `${this.url}/admin/custom-providers`, {\n body: params,\n headers: this.headers,\n xform: (provider) => {\n return { data: provider, error: null };\n },\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Gets details of a specific custom provider by identifier.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n */\n async _getCustomProvider(identifier) {\n try {\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'GET', `${this.url}/admin/custom-providers/${identifier}`, {\n headers: this.headers,\n xform: (provider) => {\n return { data: provider, error: null };\n },\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Updates an existing custom provider.\n *\n * When `issuer` or `discovery_url` is changed on an OIDC provider, the server re-fetches and\n * validates the discovery document before persisting. This may return a validation error\n * (`error_code: \"validation_failed\"`) if the discovery document is unreachable, invalid, or\n * the issuer does not match.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n */\n async _updateCustomProvider(identifier, params) {\n try {\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'PUT', `${this.url}/admin/custom-providers/${identifier}`, {\n body: params,\n headers: this.headers,\n xform: (provider) => {\n return { data: provider, error: null };\n },\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Deletes a custom provider.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n */\n async _deleteCustomProvider(identifier) {\n try {\n await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'DELETE', `${this.url}/admin/custom-providers/${identifier}`, {\n headers: this.headers,\n noResolveJson: true,\n });\n return { data: null, error: null };\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Lists all passkeys for a user.\n *\n * This function should only be called on a server. Never expose your secret key in the browser.\n *\n * Requires `auth.experimental.passkey: true`.\n */\n async _adminListPasskeys(params) {\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.assertPasskeyExperimentalEnabled)(this.experimental);\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.validateUUID)(params.userId);\n try {\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'GET', `${this.url}/admin/users/${params.userId}/passkeys`, { headers: this.headers, xform: (data) => ({ data, error: null }) });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Deletes a user's passkey.\n *\n * This function should only be called on a server. Never expose your secret key in the browser.\n *\n * Requires `auth.experimental.passkey: true`.\n */\n async _adminDeletePasskey(params) {\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.assertPasskeyExperimentalEnabled)(this.experimental);\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.validateUUID)(params.userId);\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_1__.validateUUID)(params.passkeyId);\n try {\n await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_0__._request)(this.fetch, 'DELETE', `${this.url}/admin/users/${params.userId}/passkeys/${params.passkeyId}`, { headers: this.headers, noResolveJson: true });\n return { data: null, error: null };\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_3__.isAuthError)(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n}\n//# sourceMappingURL=GoTrueAdminApi.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9Hb1RydWVBZG1pbkFwaS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBK0I7QUFDdUU7QUFDVDtBQUM5QztBQUNKO0FBQzVCO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixlQUFlO0FBQy9CO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsaUJBQWlCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQix5QkFBeUIsZ0NBQWdDLEdBQUc7QUFDaEYsUUFBUTtBQUNSO0FBQ0E7QUFDQSxrQkFBa0Isc0JBQXNCLHdCQUF3QjtBQUNoRTtBQUNBO0FBQ0EscUJBQXFCLDBEQUFZO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix1REFBZTtBQUM5QyxZQUFZLHVEQUFlO0FBQzNCLGlGQUFpRix1REFBZSxZQUFZO0FBQzVHO0FBQ0E7QUFDQSxrQkFBa0Isb0RBQVEsd0JBQXdCLFNBQVMsZ0JBQWdCLE1BQU07QUFDakY7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EsZ0JBQWdCLHdEQUFXO0FBQzNCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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LHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhFQUFnQztBQUN4QyxRQUFRLDBEQUFZO0FBQ3BCO0FBQ0EseUJBQXlCLG9EQUFRLHVCQUF1QixTQUFTLGVBQWUsY0FBYyxjQUFjLDJDQUEyQyxtQkFBbUIsR0FBRztBQUM3SztBQUNBO0FBQ0EsZ0JBQWdCLHdEQUFXO0FBQzNCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLDhFQUFnQztBQUN4QyxRQUFRLDBEQUFZO0FBQ3BCLFFBQVEsMERBQVk7QUFDcEI7QUFDQSxrQkFBa0Isb0RBQVEsMEJBQTBCLFNBQVMsZUFBZSxjQUFjLFlBQVksaUJBQWlCLEtBQUssNENBQTRDO0FBQ3hLLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EsZ0JBQWdCLHdEQUFXO0FBQzNCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tb2R1bGUvR29UcnVlQWRtaW5BcGkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBfZ2VuZXJhdGVMaW5rUmVzcG9uc2UsIF9ub1Jlc29sdmVKc29uUmVzcG9uc2UsIF9yZXF1ZXN0LCBfdXNlclJlc3BvbnNlLCB9IGZyb20gJy4vbGliL2ZldGNoJztcbmltcG9ydCB7IGFzc2VydFBhc3NrZXlFeHBlcmltZW50YWxFbmFibGVkLCByZXNvbHZlRmV0Y2gsIHZhbGlkYXRlVVVJRCB9IGZyb20gJy4vbGliL2hlbHBlcnMnO1xuaW1wb3J0IHsgU0lHTl9PVVRfU0NPUEVTLCB9IGZyb20gJy4vbGliL3R5cGVzJztcbmltcG9ydCB7IGlzQXV0aEVycm9yIH0gZnJvbSAnLi9saWIvZXJyb3JzJztcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdvVHJ1ZUFkbWluQXBpIHtcbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGFuIGFkbWluIEFQSSBjbGllbnQgdGhhdCBjYW4gYmUgdXNlZCB0byBtYW5hZ2UgdXNlcnMgYW5kIE9BdXRoIGNsaWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBVc2luZyBzdXBhYmFzZS1qcyAocmVjb21tZW5kZWQpXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBjcmVhdGVDbGllbnQgfSBmcm9tICdAc3VwYWJhc2Uvc3VwYWJhc2UtanMnXG4gICAgICpcbiAgICAgKiBjb25zdCBzdXBhYmFzZSA9IGNyZWF0ZUNsaWVudCgnaHR0cHM6Ly94eXpjb21wYW55LnN1cGFiYXNlLmNvJywgJ3lvdXItc2VjcmV0LWtleScpXG4gICAgICogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5hZG1pbi5saXN0VXNlcnMoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGUgU3RhbmRhbG9uZSBpbXBvcnQgZm9yIGJ1bmRsZS1zZW5zaXRpdmUgZW52aXJvbm1lbnRzXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBHb1RydWVBZG1pbkFwaSB9IGZyb20gJ0BzdXBhYmFzZS9hdXRoLWpzJ1xuICAgICAqXG4gICAgICogY29uc3QgYWRtaW4gPSBuZXcgR29UcnVlQWRtaW5BcGkoe1xuICAgICAqICAgdXJsOiAnaHR0cHM6Ly94eXpjb21wYW55LnN1cGFiYXNlLmNvL2F1dGgvdjEnLFxuICAgICAqICAgaGVhZGVyczogeyBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7cHJvY2Vzcy5lbnYuU1VQQUJBU0VfU0VDUkVUX0tFWX1gIH0sXG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih7IHVybCA9ICcnLCBoZWFkZXJzID0ge30sIGZldGNoLCBleHBlcmltZW50YWwsIH0pIHtcbiAgICAgICAgdGhpcy51cmwgPSB1cmw7XG4gICAgICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgICAgIHRoaXMuZmV0Y2ggPSByZXNvbHZlRmV0Y2goZmV0Y2gpO1xuICAgICAgICB0aGlzLmV4cGVyaW1lbnRhbCA9IGV4cGVyaW1lbnRhbCAhPT0gbnVsbCAmJiBleHBlcmltZW50YWwgIT09IHZvaWQgMCA/IGV4cGVyaW1lbnRhbCA6IHt9O1xuICAgICAgICB0aGlzLm1mYSA9IHtcbiAgICAgICAgICAgIGxpc3RGYWN0b3JzOiB0aGlzLl9saXN0RmFjdG9ycy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZGVsZXRlRmFjdG9yOiB0aGlzLl9kZWxldGVGYWN0b3IuYmluZCh0aGlzKSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5vYXV0aCA9IHtcbiAgICAgICAgICAgIGxpc3RDbGllbnRzOiB0aGlzLl9saXN0T0F1dGhDbGllbnRzLmJpbmQodGhpcyksXG4gICAgICAgICAgICBjcmVhdGVDbGllbnQ6IHRoaXMuX2NyZWF0ZU9BdXRoQ2xpZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgICBnZXRDbGllbnQ6IHRoaXMuX2dldE9BdXRoQ2xpZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgICB1cGRhdGVDbGllbnQ6IHRoaXMuX3VwZGF0ZU9BdXRoQ2xpZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgICBkZWxldGVDbGllbnQ6IHRoaXMuX2RlbGV0ZU9BdXRoQ2xpZW50LmJpbmQodGhpcyksXG4gICAgICAgICAgICByZWdlbmVyYXRlQ2xpZW50U2VjcmV0OiB0aGlzLl9yZWdlbmVyYXRlT0F1dGhDbGllbnRTZWNyZXQuYmluZCh0aGlzKSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jdXN0b21Qcm92aWRlcnMgPSB7XG4gICAgICAgICAgICBsaXN0UHJvdmlkZXJzOiB0aGlzLl9saXN0Q3VzdG9tUHJvdmlkZXJzLmJpbmQodGhpcyksXG4gICAgICAgICAgICBjcmVhdGVQcm92aWRlcjogdGhpcy5fY3JlYXRlQ3VzdG9tUHJvdmlkZXIuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGdldFByb3ZpZGVyOiB0aGlzLl9nZXRDdXN0b21Qcm92aWRlci5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdXBkYXRlUHJvdmlkZXI6IHRoaXMuX3VwZGF0ZUN1c3RvbVByb3ZpZGVyLmJpbmQodGhpcyksXG4gICAgICAgICAgICBkZWxldGVQcm92aWRlcjogdGhpcy5fZGVsZXRlQ3VzdG9tUHJvdmlkZXIuYmluZCh0aGlzKSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5wYXNza2V5ID0ge1xuICAgICAgICAgICAgbGlzdFBhc3NrZXlzOiB0aGlzLl9hZG1pbkxpc3RQYXNza2V5cy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZGVsZXRlUGFzc2tleTogdGhpcy5fYWRtaW5EZWxldGVQYXNza2V5LmJpbmQodGhpcyksXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgYSBsb2dnZWQtaW4gc2Vzc2lvbi5cbiAgICAgKiBAcGFyYW0gand0IEEgdmFsaWQsIGxvZ2dlZC1pbiBKV1QuXG4gICAgICogQHBhcmFtIHNjb3BlIFRoZSBsb2dvdXQgc29wZS5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBBdXRoXG4gICAgICogQHN1YmNhdGVnb3J5IEF1dGggQWRtaW5cbiAgICAgKi9cbiAgICBhc3luYyBzaWduT3V0KGp3dCwgc2NvcGUgPSBTSUdOX09VVF9TQ09QRVNbMF0pIHtcbiAgICAgICAgaWYgKFNJR05fT1VUX1NDT1BFUy5pbmRleE9mKHNjb3BlKSA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL2F1dGgtanM6IFBhcmFtZXRlciBzY29wZSBtdXN0IGJlIG9uZSBvZiAke1NJR05fT1VUX1NDT1BFUy5qb2luKCcsICcpfWApO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9sb2dvdXQ/c2NvcGU9JHtzY29wZX1gLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIGp3dCxcbiAgICAgICAgICAgICAgICBub1Jlc29sdmVKc29uOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kcyBhbiBpbnZpdGUgbGluayB0byBhbiBlbWFpbCBhZGRyZXNzLlxuICAgICAqIEBwYXJhbSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBBZGRpdGlvbmFsIG9wdGlvbnMgdG8gYmUgaW5jbHVkZWQgd2hlbiBpbnZpdGluZy5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBBdXRoXG4gICAgICogQHN1YmNhdGVnb3J5IEF1dGggQWRtaW5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogLSBTZW5kcyBhbiBpbnZpdGUgbGluayB0byB0aGUgdXNlcidzIGVtYWlsIGFkZHJlc3MuXG4gICAgICogLSBUaGUgYGludml0ZVVzZXJCeUVtYWlsKClgIG1ldGhvZCBpcyB0eXBpY2FsbHkgdXNlZCBieSBhZG1pbmlzdHJhdG9ycyB0byBpbnZpdGUgdXNlcnMgdG8gam9pbiB0aGUgYXBwbGljYXRpb24uXG4gICAgICogLSBOb3RlIHRoYXQgUEtDRSBpcyBub3Qgc3VwcG9ydGVkIHdoZW4gdXNpbmcgYGludml0ZVVzZXJCeUVtYWlsYC4gVGhpcyBpcyBiZWNhdXNlIHRoZSBicm93c2VyIGluaXRpYXRpbmcgdGhlIGludml0ZSBpcyBvZnRlbiBkaWZmZXJlbnQgZnJvbSB0aGUgYnJvd3NlciBhY2NlcHRpbmcgdGhlIGludml0ZSB3aGljaCBtYWtlcyBpdCBkaWZmaWN1bHQgdG8gcHJvdmlkZSB0aGUgc2VjdXJpdHkgZ3VhcmFudGVlcyByZXF1aXJlZCBvZiB0aGUgUEtDRSBmbG93LlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgSW52aXRlIGEgdXNlclxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5hZG1pbi5pbnZpdGVVc2VyQnlFbWFpbCgnZW1haWxAZXhhbXBsZS5jb20nKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVSZXNwb25zZSBJbnZpdGUgYSB1c2VyXG4gICAgICogYGBganNvblxuICAgICAqIHtcbiAgICAgKiAgIFwiZGF0YVwiOiB7XG4gICAgICogICAgIFwidXNlclwiOiB7XG4gICAgICogICAgICAgXCJpZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgIFwiYXVkXCI6IFwiYXV0aGVudGljYXRlZFwiLFxuICAgICAqICAgICAgIFwicm9sZVwiOiBcImF1dGhlbnRpY2F0ZWRcIixcbiAgICAgKiAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICBcImludml0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwicGhvbmVcIjogXCJcIixcbiAgICAgKiAgICAgICBcImNvbmZpcm1hdGlvbl9zZW50X2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcImFwcF9tZXRhZGF0YVwiOiB7XG4gICAgICogICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgIFwicHJvdmlkZXJzXCI6IFtcbiAgICAgKiAgICAgICAgICAgXCJlbWFpbFwiXG4gICAgICogICAgICAgICBdXG4gICAgICogICAgICAgfSxcbiAgICAgKiAgICAgICBcInVzZXJfbWV0YWRhdGFcIjoge30sXG4gICAgICogICAgICAgXCJpZGVudGl0aWVzXCI6IFtcbiAgICAgKiAgICAgICAgIHtcbiAgICAgKiAgICAgICAgICAgXCJpZGVudGl0eV9pZFwiOiBcIjIyMjIyMjIyLTIyMjItMjIyMi0yMjIyLTIyMjIyMjIyMjIyMlwiLFxuICAgICAqICAgICAgICAgICBcImlkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgICAgIFwidXNlcl9pZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgICBcImlkZW50aXR5X2RhdGFcIjoge1xuICAgICAqICAgICAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiLFxuICAgICAqICAgICAgICAgICAgIFwiZW1haWxfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgICAgXCJwaG9uZV92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICAgICBcInN1YlwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiXG4gICAgICogICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgIFwicHJvdmlkZXJcIjogXCJlbWFpbFwiLFxuICAgICAqICAgICAgICAgICBcImxhc3Rfc2lnbl9pbl9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiXG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgXSxcbiAgICAgKiAgICAgICBcImNyZWF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgXCJpc19hbm9ueW1vdXNcIjogZmFsc2VcbiAgICAgKiAgICAgfVxuICAgICAqICAgfSxcbiAgICAgKiAgIFwiZXJyb3JcIjogbnVsbFxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBpbnZpdGVVc2VyQnlFbWFpbChlbWFpbCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vaW52aXRlYCwge1xuICAgICAgICAgICAgICAgIGJvZHk6IHsgZW1haWwsIGRhdGE6IG9wdGlvbnMuZGF0YSB9LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICByZWRpcmVjdFRvOiBvcHRpb25zLnJlZGlyZWN0VG8sXG4gICAgICAgICAgICAgICAgeGZvcm06IF91c2VyUmVzcG9uc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwgfSwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBlbWFpbCBsaW5rcyBhbmQgT1RQcyB0byBiZSBzZW50IHZpYSBhIGN1c3RvbSBlbWFpbCBwcm92aWRlci5cbiAgICAgKiBAcGFyYW0gZW1haWwgVGhlIHVzZXIncyBlbWFpbC5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5wYXNzd29yZCBVc2VyIHBhc3N3b3JkLiBGb3Igc2lnbnVwIG9ubHkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZGF0YSBPcHRpb25hbCB1c2VyIG1ldGFkYXRhLiBGb3Igc2lnbnVwIG9ubHkuXG4gICAgICogQHBhcmFtIG9wdGlvbnMucmVkaXJlY3RUbyBUaGUgcmVkaXJlY3QgdXJsIHdoaWNoIHNob3VsZCBiZSBhcHBlbmRlZCB0byB0aGUgZ2VuZXJhdGVkIGxpbmtcbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBBdXRoXG4gICAgICogQHN1YmNhdGVnb3J5IEF1dGggQWRtaW5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogLSBUaGUgZm9sbG93aW5nIHR5cGVzIGNhbiBiZSBwYXNzZWQgaW50byBgZ2VuZXJhdGVMaW5rKClgOiBgc2lnbnVwYCwgYG1hZ2ljbGlua2AsIGBpbnZpdGVgLCBgcmVjb3ZlcnlgLCBgZW1haWxfY2hhbmdlX2N1cnJlbnRgLCBgZW1haWxfY2hhbmdlX25ld2AsIGBwaG9uZV9jaGFuZ2VgLlxuICAgICAqIC0gYGdlbmVyYXRlTGluaygpYCBvbmx5IGdlbmVyYXRlcyB0aGUgZW1haWwgbGluayBmb3IgYGVtYWlsX2NoYW5nZV9lbWFpbGAgaWYgdGhlICoqU2VjdXJlIGVtYWlsIGNoYW5nZSoqIGlzIGVuYWJsZWQgaW4geW91ciBwcm9qZWN0J3MgW2VtYWlsIGF1dGggcHJvdmlkZXIgc2V0dGluZ3NdKC9kYXNoYm9hcmQvcHJvamVjdC9fL2F1dGgvcHJvdmlkZXJzKS5cbiAgICAgKiAtIGBnZW5lcmF0ZUxpbmsoKWAgaGFuZGxlcyB0aGUgY3JlYXRpb24gb2YgdGhlIHVzZXIgZm9yIGBzaWdudXBgLCBgaW52aXRlYCBhbmQgYG1hZ2ljbGlua2AuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBHZW5lcmF0ZSBhIHNpZ251cCBsaW5rXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLmFkbWluLmdlbmVyYXRlTGluayh7XG4gICAgICogICB0eXBlOiAnc2lnbnVwJyxcbiAgICAgKiAgIGVtYWlsOiAnZW1haWxAZXhhbXBsZS5jb20nLFxuICAgICAqICAgcGFzc3dvcmQ6ICdzZWNyZXQnXG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlUmVzcG9uc2UgR2VuZXJhdGUgYSBzaWdudXAgbGlua1xuICAgICAqIGBgYGpzb25cbiAgICAgKiB7XG4gICAgICogICBcImRhdGFcIjoge1xuICAgICAqICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAqICAgICAgIFwiYWN0aW9uX2xpbmtcIjogXCI8TElOS19UT19TRU5EX1RPX1VTRVI+XCIsXG4gICAgICogICAgICAgXCJlbWFpbF9vdHBcIjogXCI5OTk5OTlcIixcbiAgICAgKiAgICAgICBcImhhc2hlZF90b2tlblwiOiBcIjxIQVNIRURfVE9LRU5cIixcbiAgICAgKiAgICAgICBcInJlZGlyZWN0X3RvXCI6IFwiPFJFRElSRUNUX1VSTD5cIixcbiAgICAgKiAgICAgICBcInZlcmlmaWNhdGlvbl90eXBlXCI6IFwic2lnbnVwXCJcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgXCJ1c2VyXCI6IHtcbiAgICAgKiAgICAgICBcImlkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgXCJhdWRcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgXCJyb2xlXCI6IFwiYXV0aGVudGljYXRlZFwiLFxuICAgICAqICAgICAgIFwiZW1haWxcIjogXCJlbWFpbEBleGFtcGxlLmNvbVwiLFxuICAgICAqICAgICAgIFwicGhvbmVcIjogXCJcIixcbiAgICAgKiAgICAgICBcImNvbmZpcm1hdGlvbl9zZW50X2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcImFwcF9tZXRhZGF0YVwiOiB7XG4gICAgICogICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgIFwicHJvdmlkZXJzXCI6IFtcbiAgICAgKiAgICAgICAgICAgXCJlbWFpbFwiXG4gICAgICogICAgICAgICBdXG4gICAgICogICAgICAgfSxcbiAgICAgKiAgICAgICBcInVzZXJfbWV0YWRhdGFcIjoge30sXG4gICAgICogICAgICAgXCJpZGVudGl0aWVzXCI6IFtcbiAgICAgKiAgICAgICAgIHtcbiAgICAgKiAgICAgICAgICAgXCJpZGVudGl0eV9pZFwiOiBcIjIyMjIyMjIyLTIyMjItMjIyMi0yMjIyLTIyMjIyMjIyMjIyMlwiLFxuICAgICAqICAgICAgICAgICBcImlkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgICAgIFwidXNlcl9pZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgICBcImlkZW50aXR5X2RhdGFcIjoge1xuICAgICAqICAgICAgICAgICAgIFwiZW1haWxcIjogXCJlbWFpbEBleGFtcGxlLmNvbVwiLFxuICAgICAqICAgICAgICAgICAgIFwiZW1haWxfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgICAgXCJwaG9uZV92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICAgICBcInN1YlwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiXG4gICAgICogICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgIFwicHJvdmlkZXJcIjogXCJlbWFpbFwiLFxuICAgICAqICAgICAgICAgICBcImxhc3Rfc2lnbl9pbl9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwiZW1haWxcIjogXCJlbWFpbEBleGFtcGxlLmNvbVwiXG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgXSxcbiAgICAgKiAgICAgICBcImNyZWF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgXCJpc19hbm9ueW1vdXNcIjogZmFsc2VcbiAgICAgKiAgICAgfVxuICAgICAqICAgfSxcbiAgICAgKiAgIFwiZXJyb3JcIjogbnVsbFxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIEdlbmVyYXRlIGFuIGludml0ZSBsaW5rXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLmFkbWluLmdlbmVyYXRlTGluayh7XG4gICAgICogICB0eXBlOiAnaW52aXRlJyxcbiAgICAgKiAgIGVtYWlsOiAnZW1haWxAZXhhbXBsZS5jb20nXG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIEdlbmVyYXRlIGEgbWFnaWMgbGlua1xuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5hZG1pbi5nZW5lcmF0ZUxpbmsoe1xuICAgICAqICAgdHlwZTogJ21hZ2ljbGluaycsXG4gICAgICogICBlbWFpbDogJ2VtYWlsQGV4YW1wbGUuY29tJ1xuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBHZW5lcmF0ZSBhIHJlY292ZXJ5IGxpbmtcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguYWRtaW4uZ2VuZXJhdGVMaW5rKHtcbiAgICAgKiAgIHR5cGU6ICdyZWNvdmVyeScsXG4gICAgICogICBlbWFpbDogJ2VtYWlsQGV4YW1wbGUuY29tJ1xuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBHZW5lcmF0ZSBsaW5rcyB0byBjaGFuZ2UgY3VycmVudCBlbWFpbCBhZGRyZXNzXG4gICAgICogYGBganNcbiAgICAgKiAvLyBnZW5lcmF0ZSBhbiBlbWFpbCBjaGFuZ2UgbGluayB0byBiZSBzZW50IHRvIHRoZSBjdXJyZW50IGVtYWlsIGFkZHJlc3NcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLmFkbWluLmdlbmVyYXRlTGluayh7XG4gICAgICogICB0eXBlOiAnZW1haWxfY2hhbmdlX2N1cnJlbnQnLFxuICAgICAqICAgZW1haWw6ICdjdXJyZW50LmVtYWlsQGV4YW1wbGUuY29tJyxcbiAgICAgKiAgIG5ld0VtYWlsOiAnbmV3LmVtYWlsQGV4YW1wbGUuY29tJ1xuICAgICAqIH0pXG4gICAgICpcbiAgICAgKiAvLyBnZW5lcmF0ZSBhbiBlbWFpbCBjaGFuZ2UgbGluayB0byBiZSBzZW50IHRvIHRoZSBuZXcgZW1haWwgYWRkcmVzc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguYWRtaW4uZ2VuZXJhdGVMaW5rKHtcbiAgICAgKiAgIHR5cGU6ICdlbWFpbF9jaGFuZ2VfbmV3JyxcbiAgICAgKiAgIGVtYWlsOiAnY3VycmVudC5lbWFpbEBleGFtcGxlLmNvbScsXG4gICAgICogICBuZXdFbWFpbDogJ25ldy5lbWFpbEBleGFtcGxlLmNvbSdcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIGdlbmVyYXRlTGluayhwYXJhbXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3B0aW9ucyB9ID0gcGFyYW1zLCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wib3B0aW9uc1wiXSk7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXN0KSwgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAoJ25ld0VtYWlsJyBpbiByZXN0KSB7XG4gICAgICAgICAgICAgICAgLy8gcmVwbGFjZSBuZXdFbWFpbCB3aXRoIG5ld19lbWFpbCBpbiByZXF1ZXN0IGJvZHlcbiAgICAgICAgICAgICAgICBib2R5Lm5ld19lbWFpbCA9IHJlc3QgPT09IG51bGwgfHwgcmVzdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzdC5uZXdFbWFpbDtcbiAgICAgICAgICAgICAgICBkZWxldGUgYm9keVsnbmV3RW1haWwnXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9hZG1pbi9nZW5lcmF0ZV9saW5rYCwge1xuICAgICAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIHhmb3JtOiBfZ2VuZXJhdGVMaW5rUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgcmVkaXJlY3RUbzogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnJlZGlyZWN0VG8sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFVzZXIgQWRtaW4gQVBJXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyB1c2VyLlxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGEgc2VydmVyLiBOZXZlciBleHBvc2UgeW91ciBgc2VydmljZV9yb2xlYCBrZXkgaW4gdGhlIGJyb3dzZXIuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgQXV0aFxuICAgICAqIEBzdWJjYXRlZ29yeSBBdXRoIEFkbWluXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIC0gVG8gY29uZmlybSB0aGUgdXNlcidzIGVtYWlsIGFkZHJlc3Mgb3IgcGhvbmUgbnVtYmVyLCBzZXQgYGVtYWlsX2NvbmZpcm1gIG9yIGBwaG9uZV9jb25maXJtYCB0byB0cnVlLiBCb3RoIGFyZ3VtZW50cyBkZWZhdWx0IHRvIGZhbHNlLlxuICAgICAqIC0gYGNyZWF0ZVVzZXIoKWAgd2lsbCBub3Qgc2VuZCBhIGNvbmZpcm1hdGlvbiBlbWFpbCB0byB0aGUgdXNlci4gWW91IGNhbiB1c2UgW2BpbnZpdGVVc2VyQnlFbWFpbCgpYF0oL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1hZG1pbi1pbnZpdGV1c2VyYnllbWFpbCkgaWYgeW91IHdhbnQgdG8gc2VuZCB0aGVtIGFuIGVtYWlsIGludml0ZSBpbnN0ZWFkLlxuICAgICAqIC0gSWYgeW91IGFyZSBzdXJlIHRoYXQgdGhlIGNyZWF0ZWQgdXNlcidzIGVtYWlsIG9yIHBob25lIG51bWJlciBpcyBsZWdpdGltYXRlIGFuZCB2ZXJpZmllZCwgeW91IGNhbiBzZXQgdGhlIGBlbWFpbF9jb25maXJtYCBvciBgcGhvbmVfY29uZmlybWAgcGFyYW0gdG8gYHRydWVgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgV2l0aCBjdXN0b20gdXNlciBtZXRhZGF0YVxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5hZG1pbi5jcmVhdGVVc2VyKHtcbiAgICAgKiAgIGVtYWlsOiAndXNlckBlbWFpbC5jb20nLFxuICAgICAqICAgcGFzc3dvcmQ6ICdwYXNzd29yZCcsXG4gICAgICogICB1c2VyX21ldGFkYXRhOiB7IG5hbWU6ICdZb2RhJyB9XG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlUmVzcG9uc2UgV2l0aCBjdXN0b20gdXNlciBtZXRhZGF0YVxuICAgICAqIGBgYGpzb25cbiAgICAgKiB7XG4gICAgICogICBkYXRhOiB7XG4gICAgICogICAgIHVzZXI6IHtcbiAgICAgKiAgICAgICBpZDogJzEnLFxuICAgICAqICAgICAgIGF1ZDogJ2F1dGhlbnRpY2F0ZWQnLFxuICAgICAqICAgICAgIHJvbGU6ICdhdXRoZW50aWNhdGVkJyxcbiAgICAgKiAgICAgICBlbWFpbDogJ2V4YW1wbGVAZW1haWwuY29tJyxcbiAgICAgKiAgICAgICBlbWFpbF9jb25maXJtZWRfYXQ6ICcyMDI0LTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICogICAgICAgcGhvbmU6ICcnLFxuICAgICAqICAgICAgIGNvbmZpcm1hdGlvbl9zZW50X2F0OiAnMjAyNC0wMS0wMVQwMDowMDowMFonLFxuICAgICAqICAgICAgIGNvbmZpcm1lZF9hdDogJzIwMjQtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgKiAgICAgICBsYXN0X3NpZ25faW5fYXQ6ICcyMDI0LTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICogICAgICAgYXBwX21ldGFkYXRhOiB7fSxcbiAgICAgKiAgICAgICB1c2VyX21ldGFkYXRhOiB7fSxcbiAgICAgKiAgICAgICBpZGVudGl0aWVzOiBbXG4gICAgICogICAgICAgICB7XG4gICAgICogICAgICAgICAgIFwiaWRlbnRpdHlfaWRcIjogXCIyMjIyMjIyMi0yMjIyLTIyMjItMjIyMi0yMjIyMjIyMjIyMjJcIixcbiAgICAgKiAgICAgICAgICAgXCJpZFwiOiBcIjFcIixcbiAgICAgKiAgICAgICAgICAgXCJ1c2VyX2lkXCI6IFwiMVwiLFxuICAgICAqICAgICAgICAgICBcImlkZW50aXR5X2RhdGFcIjoge1xuICAgICAqICAgICAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiLFxuICAgICAqICAgICAgICAgICAgIFwiZW1haWxfdmVyaWZpZWRcIjogdHJ1ZSxcbiAgICAgKiAgICAgICAgICAgICBcInBob25lX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICAgIFwic3ViXCI6IFwiMVwiXG4gICAgICogICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgIFwicHJvdmlkZXJcIjogXCJlbWFpbFwiLFxuICAgICAqICAgICAgICAgICBcImxhc3Rfc2lnbl9pbl9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwiZW1haWxcIjogXCJlbWFpbEBleGFtcGxlLmNvbVwiXG4gICAgICogICAgICAgICB9LFxuICAgICAqICAgICAgIF0sXG4gICAgICogICAgICAgY3JlYXRlZF9hdDogJzIwMjQtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgKiAgICAgICB1cGRhdGVkX2F0OiAnMjAyNC0wMS0wMVQwMDowMDowMFonLFxuICAgICAqICAgICAgIGlzX2Fub255bW91czogZmFsc2UsXG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiAgIGVycm9yOiBudWxsXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGUgQXV0by1jb25maXJtIHRoZSB1c2VyJ3MgZW1haWxcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguYWRtaW4uY3JlYXRlVXNlcih7XG4gICAgICogICBlbWFpbDogJ3VzZXJAZW1haWwuY29tJyxcbiAgICAgKiAgIGVtYWlsX2NvbmZpcm06IHRydWVcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGUgQXV0by1jb25maXJtIHRoZSB1c2VyJ3MgcGhvbmUgbnVtYmVyXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLmFkbWluLmNyZWF0ZVVzZXIoe1xuICAgICAqICAgcGhvbmU6ICcxMjM0NTY3ODkwJyxcbiAgICAgKiAgIHBob25lX2NvbmZpcm06IHRydWVcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIGNyZWF0ZVVzZXIoYXR0cmlidXRlcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L2FkbWluL3VzZXJzYCwge1xuICAgICAgICAgICAgICAgIGJvZHk6IGF0dHJpYnV0ZXMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIHhmb3JtOiBfdXNlclJlc3BvbnNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsIH0sIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXQgYSBsaXN0IG9mIHVzZXJzLlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBzZXJ2ZXIuIE5ldmVyIGV4cG9zZSB5b3VyIGBzZXJ2aWNlX3JvbGVgIGtleSBpbiB0aGUgYnJvd3Nlci5cbiAgICAgKiBAcGFyYW0gcGFyYW1zIEFuIG9iamVjdCB3aGljaCBzdXBwb3J0cyBgcGFnZWAgYW5kIGBwZXJQYWdlYCBhcyBudW1iZXJzLCB0byBhbHRlciB0aGUgcGFnaW5hdGVkIHJlc3VsdHMuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgQXV0aFxuICAgICAqIEBzdWJjYXRlZ29yeSBBdXRoIEFkbWluXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIC0gRGVmYXVsdHMgdG8gcmV0dXJuIDUwIHVzZXJzIHBlciBwYWdlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgR2V0IGEgcGFnZSBvZiB1c2Vyc1xuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhOiB7IHVzZXJzIH0sIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLmFkbWluLmxpc3RVc2VycygpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBQYWdpbmF0ZWQgbGlzdCBvZiB1c2Vyc1xuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhOiB7IHVzZXJzIH0sIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLmFkbWluLmxpc3RVc2Vycyh7XG4gICAgICogICBwYWdlOiAxLFxuICAgICAqICAgcGVyUGFnZTogMTAwMFxuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgbGlzdFVzZXJzKHBhcmFtcykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2c7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYWdpbmF0aW9uID0geyBuZXh0UGFnZTogbnVsbCwgbGFzdFBhZ2U6IDAsIHRvdGFsOiAwIH07XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdHRVQnLCBgJHt0aGlzLnVybH0vYWRtaW4vdXNlcnNgLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIG5vUmVzb2x2ZUpzb246IHRydWUsXG4gICAgICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZTogKF9iID0gKF9hID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBhZ2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50b1N0cmluZygpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgcGVyX3BhZ2U6IChfZCA9IChfYyA9IHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5wZXJQYWdlKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MudG9TdHJpbmcoKSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogJycsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB4Zm9ybTogX25vUmVzb2x2ZUpzb25SZXNwb25zZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmVycm9yKVxuICAgICAgICAgICAgICAgIHRocm93IHJlc3BvbnNlLmVycm9yO1xuICAgICAgICAgICAgY29uc3QgdXNlcnMgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICBjb25zdCB0b3RhbCA9IChfZSA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCd4LXRvdGFsLWNvdW50JykpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IDA7XG4gICAgICAgICAgICBjb25zdCBsaW5rcyA9IChfZyA9IChfZiA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdsaW5rJykpID09PSBudWxsIHx8IF9mID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZi5zcGxpdCgnLCcpKSAhPT0gbnVsbCAmJiBfZyAhPT0gdm9pZCAwID8gX2cgOiBbXTtcbiAgICAgICAgICAgIGlmIChsaW5rcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGlua3MuZm9yRWFjaCgobGluaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWdlID0gcGFyc2VJbnQobGluay5zcGxpdCgnOycpWzBdLnNwbGl0KCc9JylbMV0uc3Vic3RyaW5nKDAsIDEpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsID0gSlNPTi5wYXJzZShsaW5rLnNwbGl0KCc7JylbMV0uc3BsaXQoJz0nKVsxXSk7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2luYXRpb25bYCR7cmVsfVBhZ2VgXSA9IHBhZ2U7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbi50b3RhbCA9IHBhcnNlSW50KHRvdGFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdXNlcnMpLCBwYWdpbmF0aW9uKSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXJzOiBbXSB9LCBlcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0IHVzZXIgYnkgaWQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdWlkIFRoZSB1c2VyJ3MgdW5pcXVlIGlkZW50aWZpZXJcbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGEgc2VydmVyLiBOZXZlciBleHBvc2UgeW91ciBgc2VydmljZV9yb2xlYCBrZXkgaW4gdGhlIGJyb3dzZXIuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgQXV0aFxuICAgICAqIEBzdWJjYXRlZ29yeSBBdXRoIEFkbWluXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIC0gRmV0Y2hlcyB0aGUgdXNlciBvYmplY3QgZnJvbSB0aGUgZGF0YWJhc2UgYmFzZWQgb24gdGhlIHVzZXIncyBpZC5cbiAgICAgKiAtIFRoZSBgZ2V0VXNlckJ5SWQoKWAgbWV0aG9kIHJlcXVpcmVzIHRoZSB1c2VyJ3MgaWQgd2hpY2ggbWFwcyB0byB0aGUgYGF1dGgudXNlcnMuaWRgIGNvbHVtbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIEZldGNoIHRoZSB1c2VyIG9iamVjdCB1c2luZyB0aGUgYWNjZXNzX3Rva2VuIGp3dFxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5hZG1pbi5nZXRVc2VyQnlJZCgxKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVSZXNwb25zZSBGZXRjaCB0aGUgdXNlciBvYmplY3QgdXNpbmcgdGhlIGFjY2Vzc190b2tlbiBqd3RcbiAgICAgKiBgYGBqc29uXG4gICAgICoge1xuICAgICAqICAgZGF0YToge1xuICAgICAqICAgICB1c2VyOiB7XG4gICAgICogICAgICAgaWQ6ICcxJyxcbiAgICAgKiAgICAgICBhdWQ6ICdhdXRoZW50aWNhdGVkJyxcbiAgICAgKiAgICAgICByb2xlOiAnYXV0aGVudGljYXRlZCcsXG4gICAgICogICAgICAgZW1haWw6ICdleGFtcGxlQGVtYWlsLmNvbScsXG4gICAgICogICAgICAgZW1haWxfY29uZmlybWVkX2F0OiAnMjAyNC0wMS0wMVQwMDowMDowMFonLFxuICAgICAqICAgICAgIHBob25lOiAnJyxcbiAgICAgKiAgICAgICBjb25maXJtYXRpb25fc2VudF9hdDogJzIwMjQtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgKiAgICAgICBjb25maXJtZWRfYXQ6ICcyMDI0LTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICogICAgICAgbGFzdF9zaWduX2luX2F0OiAnMjAyNC0wMS0wMVQwMDowMDowMFonLFxuICAgICAqICAgICAgIGFwcF9tZXRhZGF0YToge30sXG4gICAgICogICAgICAgdXNlcl9tZXRhZGF0YToge30sXG4gICAgICogICAgICAgaWRlbnRpdGllczogW1xuICAgICAqICAgICAgICAge1xuICAgICAqICAgICAgICAgICBcImlkZW50aXR5X2lkXCI6IFwiMjIyMjIyMjItMjIyMi0yMjIyLTIyMjItMjIyMjIyMjIyMjIyXCIsXG4gICAgICogICAgICAgICAgIFwiaWRcIjogXCIxXCIsXG4gICAgICogICAgICAgICAgIFwidXNlcl9pZFwiOiBcIjFcIixcbiAgICAgKiAgICAgICAgICAgXCJpZGVudGl0eV9kYXRhXCI6IHtcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsX3ZlcmlmaWVkXCI6IHRydWUsXG4gICAgICogICAgICAgICAgICAgXCJwaG9uZV92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICAgICBcInN1YlwiOiBcIjFcIlxuICAgICAqICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgICAgXCJsYXN0X3NpZ25faW5fYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICBcImNyZWF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICBcImVtYWlsXCI6IFwiZW1haWxAZXhhbXBsZS5jb21cIlxuICAgICAqICAgICAgICAgfSxcbiAgICAgKiAgICAgICBdLFxuICAgICAqICAgICAgIGNyZWF0ZWRfYXQ6ICcyMDI0LTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICogICAgICAgdXBkYXRlZF9hdDogJzIwMjQtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgKiAgICAgICBpc19hbm9ueW1vdXM6IGZhbHNlLFxuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogICBlcnJvcjogbnVsbFxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBnZXRVc2VyQnlJZCh1aWQpIHtcbiAgICAgICAgdmFsaWRhdGVVVUlEKHVpZCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ0dFVCcsIGAke3RoaXMudXJsfS9hZG1pbi91c2Vycy8ke3VpZH1gLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIHhmb3JtOiBfdXNlclJlc3BvbnNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsIH0sIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSB1c2VyIGRhdGEuIENoYW5nZXMgYXJlIGFwcGxpZWQgZGlyZWN0bHkgd2l0aG91dCBjb25maXJtYXRpb24gZmxvd3MuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdWlkIFRoZSB1c2VyJ3MgdW5pcXVlIGlkZW50aWZpZXJcbiAgICAgKiBAcGFyYW0gYXR0cmlidXRlcyBUaGUgZGF0YSB5b3Ugd2FudCB0byB1cGRhdGUuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBhIHNlcnZlci4gTmV2ZXIgZXhwb3NlIHlvdXIgYHNlcnZpY2Vfcm9sZWAga2V5IGluIHRoZSBicm93c2VyLlxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAqKkltcG9ydGFudDoqKiBUaGlzIGlzIGEgc2VydmVyLXNpZGUgb3BlcmF0aW9uIGFuZCBkb2VzICoqbm90KiogdHJpZ2dlciBjbGllbnQtc2lkZVxuICAgICAqIGBvbkF1dGhTdGF0ZUNoYW5nZWAgbGlzdGVuZXJzLiBUaGUgYWRtaW4gQVBJIGhhcyBubyBjb25uZWN0aW9uIHRvIGNsaWVudCBzdGF0ZS5cbiAgICAgKlxuICAgICAqIFRvIHN5bmMgY2hhbmdlcyB0byB0aGUgY2xpZW50IGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2Q6XG4gICAgICogMS4gT24gdGhlIGNsaWVudCwgY2FsbCBgc3VwYWJhc2UuYXV0aC5yZWZyZXNoU2Vzc2lvbigpYCB0byBmZXRjaCB0aGUgdXBkYXRlZCB1c2VyIGRhdGFcbiAgICAgKiAyLiBUaGlzIHdpbGwgdHJpZ2dlciB0aGUgYFRPS0VOX1JFRlJFU0hFRGAgZXZlbnQgYW5kIG5vdGlmeSBhbGwgbGlzdGVuZXJzXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAvLyBTZXJ2ZXItc2lkZSAoRWRnZSBGdW5jdGlvbilcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLmFkbWluLnVwZGF0ZVVzZXJCeUlkKFxuICAgICAqICAgdXNlcklkLFxuICAgICAqICAgeyB1c2VyX21ldGFkYXRhOiB7IHByZWZlcmVuY2VzOiB7IHRoZW1lOiAnZGFyaycgfSB9IH1cbiAgICAgKiApXG4gICAgICpcbiAgICAgKiAvLyBDbGllbnQtc2lkZSAodG8gc3luYyB0aGUgY2hhbmdlcylcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLnJlZnJlc2hTZXNzaW9uKClcbiAgICAgKiAvLyBvbkF1dGhTdGF0ZUNoYW5nZSBsaXN0ZW5lcnMgd2lsbCBub3cgYmUgbm90aWZpZWQgd2l0aCB1cGRhdGVkIHVzZXJcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBzZWUge0BsaW5rIEdvVHJ1ZUNsaWVudC5yZWZyZXNoU2Vzc2lvbn0gZm9yIHN5bmNpbmcgYWRtaW4gY2hhbmdlcyB0byB0aGUgY2xpZW50XG4gICAgICogQHNlZSB7QGxpbmsgR29UcnVlQ2xpZW50LnVwZGF0ZVVzZXJ9IGZvciBjbGllbnQtc2lkZSB1c2VyIHVwZGF0ZXMgKHRyaWdnZXJzIGxpc3RlbmVycyBhdXRvbWF0aWNhbGx5KVxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IEF1dGhcbiAgICAgKiBAc3ViY2F0ZWdvcnkgQXV0aCBBZG1pblxuICAgICAqXG4gICAgICogQGV4YW1wbGUgVXBkYXRlcyBhIHVzZXIncyBlbWFpbFxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhOiB1c2VyLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5hZG1pbi51cGRhdGVVc2VyQnlJZChcbiAgICAgKiAgICcxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTEnLFxuICAgICAqICAgeyBlbWFpbDogJ25ld0BlbWFpbC5jb20nIH1cbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVJlc3BvbnNlIFVwZGF0ZXMgYSB1c2VyJ3MgZW1haWxcbiAgICAgKiBgYGBqc29uXG4gICAgICoge1xuICAgICAqICAgXCJkYXRhXCI6IHtcbiAgICAgKiAgICAgXCJ1c2VyXCI6IHtcbiAgICAgKiAgICAgICBcImlkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgXCJhdWRcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgXCJyb2xlXCI6IFwiYXV0aGVudGljYXRlZFwiLFxuICAgICAqICAgICAgIFwiZW1haWxcIjogXCJuZXdAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgXCJlbWFpbF9jb25maXJtZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwicGhvbmVcIjogXCJcIixcbiAgICAgKiAgICAgICBcImNvbmZpcm1lZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgXCJyZWNvdmVyeV9zZW50X2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcImxhc3Rfc2lnbl9pbl9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgXCJhcHBfbWV0YWRhdGFcIjoge1xuICAgICAqICAgICAgICAgXCJwcm92aWRlclwiOiBcImVtYWlsXCIsXG4gICAgICogICAgICAgICBcInByb3ZpZGVyc1wiOiBbXG4gICAgICogICAgICAgICAgIFwiZW1haWxcIlxuICAgICAqICAgICAgICAgXVxuICAgICAqICAgICAgIH0sXG4gICAgICogICAgICAgXCJ1c2VyX21ldGFkYXRhXCI6IHtcbiAgICAgKiAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiLFxuICAgICAqICAgICAgICAgXCJlbWFpbF92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgIFwicGhvbmVfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICBcInN1YlwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiXG4gICAgICogICAgICAgfSxcbiAgICAgKiAgICAgICBcImlkZW50aXRpZXNcIjogW1xuICAgICAqICAgICAgICAge1xuICAgICAqICAgICAgICAgICBcImlkZW50aXR5X2lkXCI6IFwiMjIyMjIyMjItMjIyMi0yMjIyLTIyMjItMjIyMjIyMjIyMjIyXCIsXG4gICAgICogICAgICAgICAgIFwiaWRcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICAgICAgXCJ1c2VyX2lkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgICAgIFwiaWRlbnRpdHlfZGF0YVwiOiB7XG4gICAgICogICAgICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgICAgICAgXCJlbWFpbF92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICAgICBcInBob25lX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICAgIFwic3ViXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCJcbiAgICAgKiAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgXCJwcm92aWRlclwiOiBcImVtYWlsXCIsXG4gICAgICogICAgICAgICAgIFwibGFzdF9zaWduX2luX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgXCJ1cGRhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCJcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICBdLFxuICAgICAqICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgXCJ1cGRhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcImlzX2Fub255bW91c1wiOiBmYWxzZVxuICAgICAqICAgICB9XG4gICAgICogICB9LFxuICAgICAqICAgXCJlcnJvclwiOiBudWxsXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGUgVXBkYXRlcyBhIHVzZXIncyBwYXNzd29yZFxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhOiB1c2VyLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5hZG1pbi51cGRhdGVVc2VyQnlJZChcbiAgICAgKiAgICc2YWE1ZDBkNC0yYTlmLTQ0ODMtYjZjOC0wY2Y0YzZjOThhYzQnLFxuICAgICAqICAgeyBwYXNzd29yZDogJ25ld19wYXNzd29yZCcgfVxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFVwZGF0ZXMgYSB1c2VyJ3MgbWV0YWRhdGFcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YTogdXNlciwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguYWRtaW4udXBkYXRlVXNlckJ5SWQoXG4gICAgICogICAnNmFhNWQwZDQtMmE5Zi00NDgzLWI2YzgtMGNmNGM2Yzk4YWM0JyxcbiAgICAgKiAgIHsgdXNlcl9tZXRhZGF0YTogeyBoZWxsbzogJ3dvcmxkJyB9IH1cbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBVcGRhdGVzIGEgdXNlcidzIGFwcF9tZXRhZGF0YVxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhOiB1c2VyLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5hZG1pbi51cGRhdGVVc2VyQnlJZChcbiAgICAgKiAgICc2YWE1ZDBkNC0yYTlmLTQ0ODMtYjZjOC0wY2Y0YzZjOThhYzQnLFxuICAgICAqICAgeyBhcHBfbWV0YWRhdGE6IHsgcGxhbjogJ3RyaWFsJyB9IH1cbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBDb25maXJtcyBhIHVzZXIncyBlbWFpbCBhZGRyZXNzXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGE6IHVzZXIsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLmFkbWluLnVwZGF0ZVVzZXJCeUlkKFxuICAgICAqICAgJzZhYTVkMGQ0LTJhOWYtNDQ4My1iNmM4LTBjZjRjNmM5OGFjNCcsXG4gICAgICogICB7IGVtYWlsX2NvbmZpcm06IHRydWUgfVxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIENvbmZpcm1zIGEgdXNlcidzIHBob25lIG51bWJlclxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhOiB1c2VyLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5hZG1pbi51cGRhdGVVc2VyQnlJZChcbiAgICAgKiAgICc2YWE1ZDBkNC0yYTlmLTQ0ODMtYjZjOC0wY2Y0YzZjOThhYzQnLFxuICAgICAqICAgeyBwaG9uZV9jb25maXJtOiB0cnVlIH1cbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBCYW4gYSB1c2VyIGZvciAxMDAgeWVhcnNcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YTogdXNlciwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguYWRtaW4udXBkYXRlVXNlckJ5SWQoXG4gICAgICogICAnNmFhNWQwZDQtMmE5Zi00NDgzLWI2YzgtMGNmNGM2Yzk4YWM0JyxcbiAgICAgKiAgIHsgYmFuX2R1cmF0aW9uOiAnODc2MDAwaCcgfVxuICAgICAqIClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyB1cGRhdGVVc2VyQnlJZCh1aWQsIGF0dHJpYnV0ZXMpIHtcbiAgICAgICAgdmFsaWRhdGVVVUlEKHVpZCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BVVCcsIGAke3RoaXMudXJsfS9hZG1pbi91c2Vycy8ke3VpZH1gLCB7XG4gICAgICAgICAgICAgICAgYm9keTogYXR0cmlidXRlcyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgeGZvcm06IF91c2VyUmVzcG9uc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHVzZXI6IG51bGwgfSwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBhIHVzZXIuIFJlcXVpcmVzIGEgYHNlcnZpY2Vfcm9sZWAga2V5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkIFRoZSB1c2VyIGlkIHlvdSB3YW50IHRvIHJlbW92ZS5cbiAgICAgKiBAcGFyYW0gc2hvdWxkU29mdERlbGV0ZSBJZiB0cnVlLCB0aGVuIHRoZSB1c2VyIHdpbGwgYmUgc29mdC1kZWxldGVkIGZyb20gdGhlIGF1dGggc2NoZW1hLiBTb2Z0IGRlbGV0aW9uIGFsbG93cyB1c2VyIGlkZW50aWZpY2F0aW9uIGZyb20gdGhlIGhhc2hlZCB1c2VyIElEIGJ1dCBpcyBub3QgcmV2ZXJzaWJsZS5cbiAgICAgKiBEZWZhdWx0cyB0byBmYWxzZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGEgc2VydmVyLiBOZXZlciBleHBvc2UgeW91ciBgc2VydmljZV9yb2xlYCBrZXkgaW4gdGhlIGJyb3dzZXIuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgQXV0aFxuICAgICAqIEBzdWJjYXRlZ29yeSBBdXRoIEFkbWluXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIC0gVGhlIGBkZWxldGVVc2VyKClgIG1ldGhvZCByZXF1aXJlcyB0aGUgdXNlcidzIElELCB3aGljaCBtYXBzIHRvIHRoZSBgYXV0aC51c2Vycy5pZGAgY29sdW1uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgUmVtb3ZlcyBhIHVzZXJcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguYWRtaW4uZGVsZXRlVXNlcihcbiAgICAgKiAgICc3MTVlZDVkYi1mMDkwLTRiOGMtYTA2Ny02NDBlY2VlMzZhYTAnXG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVSZXNwb25zZSBSZW1vdmVzIGEgdXNlclxuICAgICAqIGBgYGpzb25cbiAgICAgKiB7XG4gICAgICogICBcImRhdGFcIjoge1xuICAgICAqICAgICBcInVzZXJcIjoge31cbiAgICAgKiAgIH0sXG4gICAgICogICBcImVycm9yXCI6IG51bGxcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgZGVsZXRlVXNlcihpZCwgc2hvdWxkU29mdERlbGV0ZSA9IGZhbHNlKSB7XG4gICAgICAgIHZhbGlkYXRlVVVJRChpZCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ0RFTEVURScsIGAke3RoaXMudXJsfS9hZG1pbi91c2Vycy8ke2lkfWAsIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRfc29mdF9kZWxldGU6IHNob3VsZFNvZnREZWxldGUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB4Zm9ybTogX3VzZXJSZXNwb25zZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCB9LCBlcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgX2xpc3RGYWN0b3JzKHBhcmFtcykge1xuICAgICAgICB2YWxpZGF0ZVVVSUQocGFyYW1zLnVzZXJJZCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnR0VUJywgYCR7dGhpcy51cmx9L2FkbWluL3VzZXJzLyR7cGFyYW1zLnVzZXJJZH0vZmFjdG9yc2AsIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgeGZvcm06IChmYWN0b3JzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgZmFjdG9ycyB9LCBlcnJvcjogbnVsbCB9O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IGRhdGEsIGVycm9yIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIF9kZWxldGVGYWN0b3IocGFyYW1zKSB7XG4gICAgICAgIHZhbGlkYXRlVVVJRChwYXJhbXMudXNlcklkKTtcbiAgICAgICAgdmFsaWRhdGVVVUlEKHBhcmFtcy5pZCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ0RFTEVURScsIGAke3RoaXMudXJsfS9hZG1pbi91c2Vycy8ke3BhcmFtcy51c2VySWR9L2ZhY3RvcnMvJHtwYXJhbXMuaWR9YCwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTGlzdHMgYWxsIE9BdXRoIGNsaWVudHMgd2l0aCBvcHRpb25hbCBwYWdpbmF0aW9uLlxuICAgICAqIE9ubHkgcmVsZXZhbnQgd2hlbiB0aGUgT0F1dGggMi4xIHNlcnZlciBpcyBlbmFibGVkIGluIFN1cGFiYXNlIEF1dGguXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBhIHNlcnZlci4gTmV2ZXIgZXhwb3NlIHlvdXIgYHNlcnZpY2Vfcm9sZWAga2V5IGluIHRoZSBicm93c2VyLlxuICAgICAqL1xuICAgIGFzeW5jIF9saXN0T0F1dGhDbGllbnRzKHBhcmFtcykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2c7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBwYWdpbmF0aW9uID0geyBuZXh0UGFnZTogbnVsbCwgbGFzdFBhZ2U6IDAsIHRvdGFsOiAwIH07XG4gICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdHRVQnLCBgJHt0aGlzLnVybH0vYWRtaW4vb2F1dGgvY2xpZW50c2AsIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgbm9SZXNvbHZlSnNvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICBxdWVyeToge1xuICAgICAgICAgICAgICAgICAgICBwYWdlOiAoX2IgPSAoX2EgPSBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMucGFnZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvU3RyaW5nKCkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBwZXJfcGFnZTogKF9kID0gKF9jID0gcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBlclBhZ2UpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy50b1N0cmluZygpKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAnJyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHhmb3JtOiBfbm9SZXNvbHZlSnNvblJlc3BvbnNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocmVzcG9uc2UuZXJyb3IpXG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzcG9uc2UuZXJyb3I7XG4gICAgICAgICAgICBjb25zdCBjbGllbnRzID0gYXdhaXQgcmVzcG9uc2UuanNvbigpO1xuICAgICAgICAgICAgY29uc3QgdG90YWwgPSAoX2UgPSByZXNwb25zZS5oZWFkZXJzLmdldCgneC10b3RhbC1jb3VudCcpKSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiAwO1xuICAgICAgICAgICAgY29uc3QgbGlua3MgPSAoX2cgPSAoX2YgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnbGluaycpKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Yuc3BsaXQoJywnKSkgIT09IG51bGwgJiYgX2cgIT09IHZvaWQgMCA/IF9nIDogW107XG4gICAgICAgICAgICBpZiAobGlua3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxpbmtzLmZvckVhY2goKGxpbmspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFnZSA9IHBhcnNlSW50KGxpbmsuc3BsaXQoJzsnKVswXS5zcGxpdCgnPScpWzFdLnN1YnN0cmluZygwLCAxKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbCA9IEpTT04ucGFyc2UobGluay5zcGxpdCgnOycpWzFdLnNwbGl0KCc9JylbMV0pO1xuICAgICAgICAgICAgICAgICAgICBwYWdpbmF0aW9uW2Ake3JlbH1QYWdlYF0gPSBwYWdlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHBhZ2luYXRpb24udG90YWwgPSBwYXJzZUludCh0b3RhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4geyBkYXRhOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNsaWVudHMpLCBwYWdpbmF0aW9uKSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IGNsaWVudHM6IFtdIH0sIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IE9BdXRoIGNsaWVudC5cbiAgICAgKiBPbmx5IHJlbGV2YW50IHdoZW4gdGhlIE9BdXRoIDIuMSBzZXJ2ZXIgaXMgZW5hYmxlZCBpbiBTdXBhYmFzZSBBdXRoLlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBzZXJ2ZXIuIE5ldmVyIGV4cG9zZSB5b3VyIGBzZXJ2aWNlX3JvbGVgIGtleSBpbiB0aGUgYnJvd3Nlci5cbiAgICAgKi9cbiAgICBhc3luYyBfY3JlYXRlT0F1dGhDbGllbnQocGFyYW1zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vYWRtaW4vb2F1dGgvY2xpZW50c2AsIHtcbiAgICAgICAgICAgICAgICBib2R5OiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIHhmb3JtOiAoY2xpZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IGNsaWVudCwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgZGV0YWlscyBvZiBhIHNwZWNpZmljIE9BdXRoIGNsaWVudC5cbiAgICAgKiBPbmx5IHJlbGV2YW50IHdoZW4gdGhlIE9BdXRoIDIuMSBzZXJ2ZXIgaXMgZW5hYmxlZCBpbiBTdXBhYmFzZSBBdXRoLlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBzZXJ2ZXIuIE5ldmVyIGV4cG9zZSB5b3VyIGBzZXJ2aWNlX3JvbGVgIGtleSBpbiB0aGUgYnJvd3Nlci5cbiAgICAgKi9cbiAgICBhc3luYyBfZ2V0T0F1dGhDbGllbnQoY2xpZW50SWQpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnR0VUJywgYCR7dGhpcy51cmx9L2FkbWluL29hdXRoL2NsaWVudHMvJHtjbGllbnRJZH1gLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIHhmb3JtOiAoY2xpZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IGNsaWVudCwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgT0F1dGggY2xpZW50LlxuICAgICAqIE9ubHkgcmVsZXZhbnQgd2hlbiB0aGUgT0F1dGggMi4xIHNlcnZlciBpcyBlbmFibGVkIGluIFN1cGFiYXNlIEF1dGguXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBhIHNlcnZlci4gTmV2ZXIgZXhwb3NlIHlvdXIgYHNlcnZpY2Vfcm9sZWAga2V5IGluIHRoZSBicm93c2VyLlxuICAgICAqL1xuICAgIGFzeW5jIF91cGRhdGVPQXV0aENsaWVudChjbGllbnRJZCwgcGFyYW1zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BVVCcsIGAke3RoaXMudXJsfS9hZG1pbi9vYXV0aC9jbGllbnRzLyR7Y2xpZW50SWR9YCwge1xuICAgICAgICAgICAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgeGZvcm06IChjbGllbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogY2xpZW50LCBlcnJvcjogbnVsbCB9O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBhbiBPQXV0aCBjbGllbnQuXG4gICAgICogT25seSByZWxldmFudCB3aGVuIHRoZSBPQXV0aCAyLjEgc2VydmVyIGlzIGVuYWJsZWQgaW4gU3VwYWJhc2UgQXV0aC5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGEgc2VydmVyLiBOZXZlciBleHBvc2UgeW91ciBgc2VydmljZV9yb2xlYCBrZXkgaW4gdGhlIGJyb3dzZXIuXG4gICAgICovXG4gICAgYXN5bmMgX2RlbGV0ZU9BdXRoQ2xpZW50KGNsaWVudElkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnREVMRVRFJywgYCR7dGhpcy51cmx9L2FkbWluL29hdXRoL2NsaWVudHMvJHtjbGllbnRJZH1gLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIG5vUmVzb2x2ZUpzb246IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2VuZXJhdGVzIHRoZSBzZWNyZXQgZm9yIGFuIE9BdXRoIGNsaWVudC5cbiAgICAgKiBPbmx5IHJlbGV2YW50IHdoZW4gdGhlIE9BdXRoIDIuMSBzZXJ2ZXIgaXMgZW5hYmxlZCBpbiBTdXBhYmFzZSBBdXRoLlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBzZXJ2ZXIuIE5ldmVyIGV4cG9zZSB5b3VyIGBzZXJ2aWNlX3JvbGVgIGtleSBpbiB0aGUgYnJvd3Nlci5cbiAgICAgKi9cbiAgICBhc3luYyBfcmVnZW5lcmF0ZU9BdXRoQ2xpZW50U2VjcmV0KGNsaWVudElkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vYWRtaW4vb2F1dGgvY2xpZW50cy8ke2NsaWVudElkfS9yZWdlbmVyYXRlX3NlY3JldGAsIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgeGZvcm06IChjbGllbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogY2xpZW50LCBlcnJvcjogbnVsbCB9O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTGlzdHMgYWxsIGN1c3RvbSBwcm92aWRlcnMgd2l0aCBvcHRpb25hbCB0eXBlIGZpbHRlci5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGEgc2VydmVyLiBOZXZlciBleHBvc2UgeW91ciBgc2VydmljZV9yb2xlYCBrZXkgaW4gdGhlIGJyb3dzZXIuXG4gICAgICovXG4gICAgYXN5bmMgX2xpc3RDdXN0b21Qcm92aWRlcnMocGFyYW1zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9IHt9O1xuICAgICAgICAgICAgaWYgKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy50eXBlKSB7XG4gICAgICAgICAgICAgICAgcXVlcnkudHlwZSA9IHBhcmFtcy50eXBlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdHRVQnLCBgJHt0aGlzLnVybH0vYWRtaW4vY3VzdG9tLXByb3ZpZGVyc2AsIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgeGZvcm06IChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyBwcm92aWRlcnM6IChfYSA9IGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGF0YS5wcm92aWRlcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdIH0sIGVycm9yOiBudWxsIH07XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgcHJvdmlkZXJzOiBbXSB9LCBlcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBjdXN0b20gT0lEQy9PQXV0aCBwcm92aWRlci5cbiAgICAgKlxuICAgICAqIEZvciBPSURDIHByb3ZpZGVycywgdGhlIHNlcnZlciBmZXRjaGVzIGFuZCB2YWxpZGF0ZXMgdGhlIE9wZW5JRCBDb25uZWN0IGRpc2NvdmVyeSBkb2N1bWVudFxuICAgICAqIGZyb20gdGhlIGlzc3VlcidzIHdlbGwta25vd24gZW5kcG9pbnQgKG9yIHRoZSBwcm92aWRlZCBgZGlzY292ZXJ5X3VybGApIGF0IGNyZWF0aW9uIHRpbWUuXG4gICAgICogVGhpcyBtYXkgcmV0dXJuIGEgdmFsaWRhdGlvbiBlcnJvciAoYGVycm9yX2NvZGU6IFwidmFsaWRhdGlvbl9mYWlsZWRcImApIGlmIHRoZSBkaXNjb3ZlcnlcbiAgICAgKiBkb2N1bWVudCBpcyB1bnJlYWNoYWJsZSwgbm90IHZhbGlkIEpTT04sIG1pc3NpbmcgcmVxdWlyZWQgZmllbGRzLCBvciBpZiB0aGUgaXNzdWVyXG4gICAgICogaW4gdGhlIGRvY3VtZW50IGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBpc3N1ZXIuXG4gICAgICpcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbiBhIHNlcnZlci4gTmV2ZXIgZXhwb3NlIHlvdXIgYHNlcnZpY2Vfcm9sZWAga2V5IGluIHRoZSBicm93c2VyLlxuICAgICAqL1xuICAgIGFzeW5jIF9jcmVhdGVDdXN0b21Qcm92aWRlcihwYXJhbXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9hZG1pbi9jdXN0b20tcHJvdmlkZXJzYCwge1xuICAgICAgICAgICAgICAgIGJvZHk6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgeGZvcm06IChwcm92aWRlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBwcm92aWRlciwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgZGV0YWlscyBvZiBhIHNwZWNpZmljIGN1c3RvbSBwcm92aWRlciBieSBpZGVudGlmaWVyLlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBzZXJ2ZXIuIE5ldmVyIGV4cG9zZSB5b3VyIGBzZXJ2aWNlX3JvbGVgIGtleSBpbiB0aGUgYnJvd3Nlci5cbiAgICAgKi9cbiAgICBhc3luYyBfZ2V0Q3VzdG9tUHJvdmlkZXIoaWRlbnRpZmllcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdHRVQnLCBgJHt0aGlzLnVybH0vYWRtaW4vY3VzdG9tLXByb3ZpZGVycy8ke2lkZW50aWZpZXJ9YCwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICB4Zm9ybTogKHByb3ZpZGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHByb3ZpZGVyLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBhbiBleGlzdGluZyBjdXN0b20gcHJvdmlkZXIuXG4gICAgICpcbiAgICAgKiBXaGVuIGBpc3N1ZXJgIG9yIGBkaXNjb3ZlcnlfdXJsYCBpcyBjaGFuZ2VkIG9uIGFuIE9JREMgcHJvdmlkZXIsIHRoZSBzZXJ2ZXIgcmUtZmV0Y2hlcyBhbmRcbiAgICAgKiB2YWxpZGF0ZXMgdGhlIGRpc2NvdmVyeSBkb2N1bWVudCBiZWZvcmUgcGVyc2lzdGluZy4gVGhpcyBtYXkgcmV0dXJuIGEgdmFsaWRhdGlvbiBlcnJvclxuICAgICAqIChgZXJyb3JfY29kZTogXCJ2YWxpZGF0aW9uX2ZhaWxlZFwiYCkgaWYgdGhlIGRpc2NvdmVyeSBkb2N1bWVudCBpcyB1bnJlYWNoYWJsZSwgaW52YWxpZCwgb3JcbiAgICAgKiB0aGUgaXNzdWVyIGRvZXMgbm90IG1hdGNoLlxuICAgICAqXG4gICAgICogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgb24gYSBzZXJ2ZXIuIE5ldmVyIGV4cG9zZSB5b3VyIGBzZXJ2aWNlX3JvbGVgIGtleSBpbiB0aGUgYnJvd3Nlci5cbiAgICAgKi9cbiAgICBhc3luYyBfdXBkYXRlQ3VzdG9tUHJvdmlkZXIoaWRlbnRpZmllciwgcGFyYW1zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BVVCcsIGAke3RoaXMudXJsfS9hZG1pbi9jdXN0b20tcHJvdmlkZXJzLyR7aWRlbnRpZmllcn1gLCB7XG4gICAgICAgICAgICAgICAgYm9keTogcGFyYW1zLFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICB4Zm9ybTogKHByb3ZpZGVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHByb3ZpZGVyLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRGVsZXRlcyBhIGN1c3RvbSBwcm92aWRlci5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGEgc2VydmVyLiBOZXZlciBleHBvc2UgeW91ciBgc2VydmljZV9yb2xlYCBrZXkgaW4gdGhlIGJyb3dzZXIuXG4gICAgICovXG4gICAgYXN5bmMgX2RlbGV0ZUN1c3RvbVByb3ZpZGVyKGlkZW50aWZpZXIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdERUxFVEUnLCBgJHt0aGlzLnVybH0vYWRtaW4vY3VzdG9tLXByb3ZpZGVycy8ke2lkZW50aWZpZXJ9YCwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICBub1Jlc29sdmVKc29uOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvcjogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBMaXN0cyBhbGwgcGFzc2tleXMgZm9yIGEgdXNlci5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGEgc2VydmVyLiBOZXZlciBleHBvc2UgeW91ciBzZWNyZXQga2V5IGluIHRoZSBicm93c2VyLlxuICAgICAqXG4gICAgICogUmVxdWlyZXMgYGF1dGguZXhwZXJpbWVudGFsLnBhc3NrZXk6IHRydWVgLlxuICAgICAqL1xuICAgIGFzeW5jIF9hZG1pbkxpc3RQYXNza2V5cyhwYXJhbXMpIHtcbiAgICAgICAgYXNzZXJ0UGFzc2tleUV4cGVyaW1lbnRhbEVuYWJsZWQodGhpcy5leHBlcmltZW50YWwpO1xuICAgICAgICB2YWxpZGF0ZVVVSUQocGFyYW1zLnVzZXJJZCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ0dFVCcsIGAke3RoaXMudXJsfS9hZG1pbi91c2Vycy8ke3BhcmFtcy51c2VySWR9L3Bhc3NrZXlzYCwgeyBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsIHhmb3JtOiAoZGF0YSkgPT4gKHsgZGF0YSwgZXJyb3I6IG51bGwgfSkgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGV0ZXMgYSB1c2VyJ3MgcGFzc2tleS5cbiAgICAgKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIG9uIGEgc2VydmVyLiBOZXZlciBleHBvc2UgeW91ciBzZWNyZXQga2V5IGluIHRoZSBicm93c2VyLlxuICAgICAqXG4gICAgICogUmVxdWlyZXMgYGF1dGguZXhwZXJpbWVudGFsLnBhc3NrZXk6IHRydWVgLlxuICAgICAqL1xuICAgIGFzeW5jIF9hZG1pbkRlbGV0ZVBhc3NrZXkocGFyYW1zKSB7XG4gICAgICAgIGFzc2VydFBhc3NrZXlFeHBlcmltZW50YWxFbmFibGVkKHRoaXMuZXhwZXJpbWVudGFsKTtcbiAgICAgICAgdmFsaWRhdGVVVUlEKHBhcmFtcy51c2VySWQpO1xuICAgICAgICB2YWxpZGF0ZVVVSUQocGFyYW1zLnBhc3NrZXlJZCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnREVMRVRFJywgYCR7dGhpcy51cmx9L2FkbWluL3VzZXJzLyR7cGFyYW1zLnVzZXJJZH0vcGFzc2tleXMvJHtwYXJhbXMucGFzc2tleUlkfWAsIHsgaGVhZGVyczogdGhpcy5oZWFkZXJzLCBub1Jlc29sdmVKc29uOiB0cnVlIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Hb1RydWVBZG1pbkFwaS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueAdminApi.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueClient.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/GoTrueClient.js ***!
|
||
\********************************************************************/
|
||
/***/ ((__unused_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 */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _GoTrueAdminApi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GoTrueAdminApi */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueAdminApi.js\");\n/* harmony import */ var _lib_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/constants */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/constants.js\");\n/* harmony import */ var _lib_errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/errors */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/errors.js\");\n/* harmony import */ var _lib_fetch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/fetch */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/fetch.js\");\n/* harmony import */ var _lib_helpers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/helpers */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/helpers.js\");\n/* harmony import */ var _lib_local_storage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/local-storage */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/local-storage.js\");\n/* harmony import */ var _lib_locks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/locks */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/locks.js\");\n/* harmony import */ var _lib_polyfills__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./lib/polyfills */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/polyfills.js\");\n/* harmony import */ var _lib_version__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./lib/version */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/version.js\");\n/* harmony import */ var _lib_base64url__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./lib/base64url */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/base64url.js\");\n/* harmony import */ var _lib_web3_ethereum__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./lib/web3/ethereum */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/web3/ethereum.js\");\n/* harmony import */ var _lib_webauthn__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./lib/webauthn */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/webauthn.js\");\n\n\n\n\n\n\n\n\n\n\n\n\n(0,_lib_polyfills__WEBPACK_IMPORTED_MODULE_7__.polyfillGlobalThis)(); // Make \"globalThis\" available\nconst DEFAULT_OPTIONS = {\n url: _lib_constants__WEBPACK_IMPORTED_MODULE_1__.GOTRUE_URL,\n storageKey: _lib_constants__WEBPACK_IMPORTED_MODULE_1__.STORAGE_KEY,\n autoRefreshToken: true,\n persistSession: true,\n detectSessionInUrl: true,\n headers: _lib_constants__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_HEADERS,\n flowType: 'implicit',\n debug: false,\n hasCustomAuthorizationHeader: false,\n throwOnError: false,\n lockAcquireTimeout: 5000, // 5 seconds\n skipAutoInitialize: false,\n experimental: {},\n};\nasync function lockNoOp(name, acquireTimeout, fn) {\n return await fn();\n}\n/**\n * Caches JWKS values for all clients created in the same environment. This is\n * especially useful for shared-memory execution environments such as Vercel's\n * Fluid Compute, AWS Lambda or Supabase's Edge Functions. Regardless of how\n * many clients are created, if they share the same storage key they will use\n * the same JWKS cache, significantly speeding up getClaims() with asymmetric\n * JWTs.\n */\nconst GLOBAL_JWKS = {};\nclass GoTrueClient {\n /**\n * The JWKS used for verifying asymmetric JWTs\n */\n get jwks() {\n var _a, _b;\n return (_b = (_a = GLOBAL_JWKS[this.storageKey]) === null || _a === void 0 ? void 0 : _a.jwks) !== null && _b !== void 0 ? _b : { keys: [] };\n }\n set jwks(value) {\n GLOBAL_JWKS[this.storageKey] = Object.assign(Object.assign({}, GLOBAL_JWKS[this.storageKey]), { jwks: value });\n }\n get jwks_cached_at() {\n var _a, _b;\n return (_b = (_a = GLOBAL_JWKS[this.storageKey]) === null || _a === void 0 ? void 0 : _a.cachedAt) !== null && _b !== void 0 ? _b : Number.MIN_SAFE_INTEGER;\n }\n set jwks_cached_at(value) {\n GLOBAL_JWKS[this.storageKey] = Object.assign(Object.assign({}, GLOBAL_JWKS[this.storageKey]), { cachedAt: value });\n }\n /**\n * Create a new client for use in the browser.\n *\n * @example Using supabase-js (recommended)\n * ```ts\n * import { createClient } from '@supabase/supabase-js'\n *\n * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n * const { data, error } = await supabase.auth.getUser()\n * ```\n *\n * @example Standalone import for bundle-sensitive environments\n * ```ts\n * import { GoTrueClient } from '@supabase/auth-js'\n *\n * const auth = new GoTrueClient({\n * url: 'https://xyzcompany.supabase.co/auth/v1',\n * headers: { apikey: 'your-publishable-key' },\n * storageKey: 'supabase-auth',\n * })\n * ```\n */\n constructor(options) {\n var _a, _b, _c, _d;\n /**\n * @experimental\n */\n this.userStorage = null;\n this.memoryStorage = null;\n this.stateChangeEmitters = new Map();\n this.autoRefreshTicker = null;\n this.autoRefreshTickTimeout = null;\n this.visibilityChangedCallback = null;\n this.refreshingDeferred = null;\n /**\n * Keeps track of the async client initialization.\n * When null or not yet resolved the auth state is `unknown`\n * Once resolved the auth state is known and it's safe to call any further client methods.\n * Keep extra care to never reject or throw uncaught errors\n */\n this.initializePromise = null;\n this.detectSessionInUrl = true;\n this.hasCustomAuthorizationHeader = false;\n this.suppressGetSessionWarning = false;\n this.lockAcquired = false;\n this.pendingInLock = [];\n /**\n * Used to broadcast state change events to other tabs listening.\n */\n this.broadcastChannel = null;\n this.logger = console.log;\n const settings = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);\n this.storageKey = settings.storageKey;\n this.instanceID = (_a = GoTrueClient.nextInstanceID[this.storageKey]) !== null && _a !== void 0 ? _a : 0;\n GoTrueClient.nextInstanceID[this.storageKey] = this.instanceID + 1;\n this.logDebugMessages = !!settings.debug;\n if (typeof settings.debug === 'function') {\n this.logger = settings.debug;\n }\n if (this.instanceID > 0 && (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)()) {\n const message = `${this._logPrefix()} Multiple GoTrueClient instances detected in the same browser context. It is not an error, but this should be avoided as it may produce undefined behavior when used concurrently under the same storage key.`;\n console.warn(message);\n if (this.logDebugMessages) {\n console.trace(message);\n }\n }\n this.persistSession = settings.persistSession;\n this.autoRefreshToken = settings.autoRefreshToken;\n this.experimental = (_b = settings.experimental) !== null && _b !== void 0 ? _b : {};\n this.admin = new _GoTrueAdminApi__WEBPACK_IMPORTED_MODULE_0__[\"default\"]({\n url: settings.url,\n headers: settings.headers,\n fetch: settings.fetch,\n experimental: this.experimental,\n });\n this.url = settings.url;\n this.headers = settings.headers;\n this.fetch = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.resolveFetch)(settings.fetch);\n this.lock = settings.lock || lockNoOp;\n this.detectSessionInUrl = settings.detectSessionInUrl;\n this.flowType = settings.flowType;\n this.hasCustomAuthorizationHeader = settings.hasCustomAuthorizationHeader;\n this.throwOnError = settings.throwOnError;\n this.lockAcquireTimeout = settings.lockAcquireTimeout;\n if (settings.lock) {\n this.lock = settings.lock;\n }\n else if (this.persistSession && (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() && ((_c = globalThis === null || globalThis === void 0 ? void 0 : globalThis.navigator) === null || _c === void 0 ? void 0 : _c.locks)) {\n this.lock = _lib_locks__WEBPACK_IMPORTED_MODULE_6__.navigatorLock;\n }\n else {\n this.lock = lockNoOp;\n }\n if (!this.jwks) {\n this.jwks = { keys: [] };\n this.jwks_cached_at = Number.MIN_SAFE_INTEGER;\n }\n this.mfa = {\n verify: this._verify.bind(this),\n enroll: this._enroll.bind(this),\n unenroll: this._unenroll.bind(this),\n challenge: this._challenge.bind(this),\n listFactors: this._listFactors.bind(this),\n challengeAndVerify: this._challengeAndVerify.bind(this),\n getAuthenticatorAssuranceLevel: this._getAuthenticatorAssuranceLevel.bind(this),\n webauthn: new _lib_webauthn__WEBPACK_IMPORTED_MODULE_11__.WebAuthnApi(this),\n };\n this.oauth = {\n getAuthorizationDetails: this._getAuthorizationDetails.bind(this),\n approveAuthorization: this._approveAuthorization.bind(this),\n denyAuthorization: this._denyAuthorization.bind(this),\n listGrants: this._listOAuthGrants.bind(this),\n revokeGrant: this._revokeOAuthGrant.bind(this),\n };\n this.passkey = {\n startRegistration: this._startPasskeyRegistration.bind(this),\n verifyRegistration: this._verifyPasskeyRegistration.bind(this),\n startAuthentication: this._startPasskeyAuthentication.bind(this),\n verifyAuthentication: this._verifyPasskeyAuthentication.bind(this),\n list: this._listPasskeys.bind(this),\n update: this._updatePasskey.bind(this),\n delete: this._deletePasskey.bind(this),\n };\n if (this.persistSession) {\n if (settings.storage) {\n this.storage = settings.storage;\n }\n else {\n if ((0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.supportsLocalStorage)()) {\n this.storage = globalThis.localStorage;\n }\n else {\n this.memoryStorage = {};\n this.storage = (0,_lib_local_storage__WEBPACK_IMPORTED_MODULE_5__.memoryLocalStorageAdapter)(this.memoryStorage);\n }\n }\n if (settings.userStorage) {\n this.userStorage = settings.userStorage;\n }\n }\n else {\n this.memoryStorage = {};\n this.storage = (0,_lib_local_storage__WEBPACK_IMPORTED_MODULE_5__.memoryLocalStorageAdapter)(this.memoryStorage);\n }\n if ((0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() && globalThis.BroadcastChannel && this.persistSession && this.storageKey) {\n try {\n this.broadcastChannel = new globalThis.BroadcastChannel(this.storageKey);\n }\n catch (e) {\n console.error('Failed to create a new BroadcastChannel, multi-tab state changes will not be available', e);\n }\n (_d = this.broadcastChannel) === null || _d === void 0 ? void 0 : _d.addEventListener('message', async (event) => {\n this._debug('received broadcast notification from other tab or client', event);\n try {\n await this._notifyAllSubscribers(event.data.event, event.data.session, false); // broadcast = false so we don't get an endless loop of messages\n }\n catch (error) {\n this._debug('#broadcastChannel', 'error', error);\n }\n });\n }\n // Only auto-initialize if not explicitly disabled. Skipped in SSR contexts\n // where initialization timing must be controlled. All public methods have\n // lazy initialization, so the client remains fully functional.\n if (!settings.skipAutoInitialize) {\n this.initialize().catch((error) => {\n this._debug('#initialize()', 'error', error);\n });\n }\n }\n /**\n * Returns whether error throwing mode is enabled for this client.\n */\n isThrowOnErrorEnabled() {\n return this.throwOnError;\n }\n /**\n * Centralizes return handling with optional error throwing. When `throwOnError` is enabled\n * and the provided result contains a non-nullish error, the error is thrown instead of\n * being returned. This ensures consistent behavior across all public API methods.\n */\n _returnResult(result) {\n if (this.throwOnError && result && result.error) {\n throw result.error;\n }\n return result;\n }\n _logPrefix() {\n return ('GoTrueClient@' +\n `${this.storageKey}:${this.instanceID} (${_lib_version__WEBPACK_IMPORTED_MODULE_8__.version}) ${new Date().toISOString()}`);\n }\n _debug(...args) {\n if (this.logDebugMessages) {\n this.logger(this._logPrefix(), ...args);\n }\n return this;\n }\n /**\n * Initializes the client session either from the url or from storage.\n * This method is automatically called when instantiating the client, but should also be called\n * manually when checking for an error from an auth redirect (oauth, magiclink, password recovery, etc).\n *\n * @category Auth\n */\n async initialize() {\n if (this.initializePromise) {\n return await this.initializePromise;\n }\n this.initializePromise = (async () => {\n return await this._acquireLock(this.lockAcquireTimeout, async () => {\n return await this._initialize();\n });\n })();\n return await this.initializePromise;\n }\n /**\n * IMPORTANT:\n * 1. Never throw in this method, as it is called from the constructor\n * 2. Never return a session from this method as it would be cached over\n * the whole lifetime of the client\n */\n async _initialize() {\n var _a;\n try {\n let params = {};\n let callbackUrlType = 'none';\n if ((0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)()) {\n params = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.parseParametersFromURL)(window.location.href);\n if (this._isImplicitGrantCallback(params)) {\n callbackUrlType = 'implicit';\n }\n else if (await this._isPKCECallback(params)) {\n callbackUrlType = 'pkce';\n }\n }\n /**\n * Attempt to get the session from the URL only if these conditions are fulfilled\n *\n * Note: If the URL isn't one of the callback url types (implicit or pkce),\n * then there could be an existing session so we don't want to prematurely remove it\n */\n if ((0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() && this.detectSessionInUrl && callbackUrlType !== 'none') {\n const { data, error } = await this._getSessionFromURL(params, callbackUrlType);\n if (error) {\n this._debug('#_initialize()', 'error detecting session from URL', error);\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthImplicitGrantRedirectError)(error)) {\n const errorCode = (_a = error.details) === null || _a === void 0 ? void 0 : _a.code;\n if (errorCode === 'identity_already_exists' ||\n errorCode === 'identity_not_found' ||\n errorCode === 'single_identity_not_deletable') {\n return { error };\n }\n }\n // Don't remove existing session on URL login failure.\n // A failed attempt (e.g. reused magic link) shouldn't invalidate a valid session.\n return { error };\n }\n const { session, redirectType } = data;\n this._debug('#_initialize()', 'detected session in URL', session, 'redirect type', redirectType);\n await this._saveSession(session);\n setTimeout(async () => {\n if (redirectType === 'recovery') {\n await this._notifyAllSubscribers('PASSWORD_RECOVERY', session);\n }\n else {\n await this._notifyAllSubscribers('SIGNED_IN', session);\n }\n }, 0);\n return { error: null };\n }\n // no login attempt via callback url try to recover session from storage\n await this._recoverAndRefresh();\n return { error: null };\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ error });\n }\n return this._returnResult({\n error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthUnknownError('Unexpected error during initialization', error),\n });\n }\n finally {\n await this._handleVisibilityChange();\n this._debug('#_initialize()', 'end');\n }\n }\n /**\n * Creates a new anonymous user.\n *\n * @returns A session where the is_anonymous claim in the access token JWT set to true\n *\n * @category Auth\n *\n * @remarks\n * - Returns an anonymous user\n * - It is recommended to set up captcha for anonymous sign-ins to prevent abuse. You can pass in the captcha token in the `options` param.\n *\n * @example Create an anonymous user\n * ```js\n * const { data, error } = await supabase.auth.signInAnonymously({\n * options: {\n * captchaToken\n * }\n * });\n * ```\n *\n * @exampleResponse Create an anonymous user\n * ```json\n * {\n * \"data\": {\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"\",\n * \"phone\": \"\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {},\n * \"user_metadata\": {},\n * \"identities\": [],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"is_anonymous\": true\n * },\n * \"session\": {\n * \"access_token\": \"<ACCESS_TOKEN>\",\n * \"token_type\": \"bearer\",\n * \"expires_in\": 3600,\n * \"expires_at\": 1700000000,\n * \"refresh_token\": \"<REFRESH_TOKEN>\",\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"\",\n * \"phone\": \"\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {},\n * \"user_metadata\": {},\n * \"identities\": [],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"is_anonymous\": true\n * }\n * }\n * },\n * \"error\": null\n * }\n * ```\n *\n * @example Create an anonymous user with custom user metadata\n * ```js\n * const { data, error } = await supabase.auth.signInAnonymously({\n * options: {\n * data\n * }\n * })\n * ```\n */\n async signInAnonymously(credentials) {\n var _a, _b, _c;\n try {\n const res = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/signup`, {\n headers: this.headers,\n body: {\n data: (_b = (_a = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _a === void 0 ? void 0 : _a.data) !== null && _b !== void 0 ? _b : {},\n gotrue_meta_security: { captcha_token: (_c = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _c === void 0 ? void 0 : _c.captchaToken },\n },\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\n });\n const { data, error } = res;\n if (error || !data) {\n return this._returnResult({ data: { user: null, session: null }, error: error });\n }\n const session = data.session;\n const user = data.user;\n if (data.session) {\n await this._saveSession(data.session);\n await this._notifyAllSubscribers('SIGNED_IN', session);\n }\n return this._returnResult({ data: { user, session }, error: null });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n throw error;\n }\n }\n /**\n * Creates a new user.\n *\n * Be aware that if a user account exists in the system you may get back an\n * error message that attempts to hide this information from the user.\n * This method has support for PKCE via email signups. The PKCE flow cannot be used when autoconfirm is enabled.\n *\n * @returns A logged-in session if the server has \"autoconfirm\" ON\n * @returns A user if the server has \"autoconfirm\" OFF\n *\n * @category Auth\n *\n * @remarks\n * - By default, the user needs to verify their email address before logging in. To turn this off, disable **Confirm email** in [your project](/dashboard/project/_/auth/providers).\n * - **Confirm email** determines if users need to confirm their email address after signing up.\n * - If **Confirm email** is enabled, a `user` is returned but `session` is null.\n * - If **Confirm email** is disabled, both a `user` and a `session` are returned.\n * - When the user confirms their email address, they are redirected to the [`SITE_URL`](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) by default. You can modify your `SITE_URL` or add additional redirect URLs in [your project](/dashboard/project/_/auth/url-configuration).\n * - If signUp() is called for an existing confirmed user:\n * - When both **Confirm email** and **Confirm phone** (even when phone provider is disabled) are enabled in [your project](/dashboard/project/_/auth/providers), an obfuscated/fake user object is returned.\n * - When either **Confirm email** or **Confirm phone** (even when phone provider is disabled) is disabled, the error message, `User already registered` is returned.\n * - To fetch the currently logged-in user, refer to [`getUser()`](/docs/reference/javascript/auth-getuser).\n *\n * @example Sign up with an email and password\n * ```js\n * const { data, error } = await supabase.auth.signUp({\n * email: 'example@email.com',\n * password: 'example-password',\n * })\n * ```\n *\n * @exampleResponse Sign up with an email and password\n * ```json\n * // Some fields may be null if \"confirm email\" is enabled.\n * {\n * \"data\": {\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"example@email.com\",\n * \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"phone\": \"\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {},\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\"\n * },\n * \"session\": {\n * \"access_token\": \"<ACCESS_TOKEN>\",\n * \"token_type\": \"bearer\",\n * \"expires_in\": 3600,\n * \"expires_at\": 1700000000,\n * \"refresh_token\": \"<REFRESH_TOKEN>\",\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"example@email.com\",\n * \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"phone\": \"\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {},\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\"\n * }\n * }\n * },\n * \"error\": null\n * }\n * ```\n *\n * @example Sign up with a phone number and password (SMS)\n * ```js\n * const { data, error } = await supabase.auth.signUp({\n * phone: '123456789',\n * password: 'example-password',\n * options: {\n * channel: 'sms'\n * }\n * })\n * ```\n *\n * @exampleDescription Sign up with a phone number and password (whatsapp)\n * The user will be sent a WhatsApp message which contains a OTP. By default, a given user can only request a OTP once every 60 seconds. Note that a user will need to have a valid WhatsApp account that is linked to Twilio in order to use this feature.\n *\n * @example Sign up with a phone number and password (whatsapp)\n * ```js\n * const { data, error } = await supabase.auth.signUp({\n * phone: '123456789',\n * password: 'example-password',\n * options: {\n * channel: 'whatsapp'\n * }\n * })\n * ```\n *\n * @example Sign up with additional user metadata\n * ```js\n * const { data, error } = await supabase.auth.signUp(\n * {\n * email: 'example@email.com',\n * password: 'example-password',\n * options: {\n * data: {\n * first_name: 'John',\n * age: 27,\n * }\n * }\n * }\n * )\n * ```\n *\n * @exampleDescription Sign up with a redirect URL\n * - See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project.\n *\n * @example Sign up with a redirect URL\n * ```js\n * const { data, error } = await supabase.auth.signUp(\n * {\n * email: 'example@email.com',\n * password: 'example-password',\n * options: {\n * emailRedirectTo: 'https://example.com/welcome'\n * }\n * }\n * )\n * ```\n */\n async signUp(credentials) {\n var _a, _b, _c;\n try {\n let res;\n if ('email' in credentials) {\n const { email, password, options } = credentials;\n let codeChallenge = null;\n let codeChallengeMethod = null;\n if (this.flowType === 'pkce') {\n ;\n [codeChallenge, codeChallengeMethod] = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getCodeChallengeAndMethod)(this.storage, this.storageKey);\n }\n res = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/signup`, {\n headers: this.headers,\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\n body: {\n email,\n password,\n data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : {},\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n code_challenge: codeChallenge,\n code_challenge_method: codeChallengeMethod,\n },\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\n });\n }\n else if ('phone' in credentials) {\n const { phone, password, options } = credentials;\n res = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/signup`, {\n headers: this.headers,\n body: {\n phone,\n password,\n data: (_b = options === null || options === void 0 ? void 0 : options.data) !== null && _b !== void 0 ? _b : {},\n channel: (_c = options === null || options === void 0 ? void 0 : options.channel) !== null && _c !== void 0 ? _c : 'sms',\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n },\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\n });\n }\n else {\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidCredentialsError('You must provide either an email or phone number and a password');\n }\n const { data, error } = res;\n if (error || !data) {\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\n return this._returnResult({ data: { user: null, session: null }, error: error });\n }\n const session = data.session;\n const user = data.user;\n if (data.session) {\n await this._saveSession(data.session);\n await this._notifyAllSubscribers('SIGNED_IN', session);\n }\n return this._returnResult({ data: { user, session }, error: null });\n }\n catch (error) {\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n throw error;\n }\n }\n /**\n * Log in an existing user with an email and password or phone and password.\n *\n * Be aware that you may get back an error message that will not distinguish\n * between the cases where the account does not exist or that the\n * email/phone and password combination is wrong or that the account can only\n * be accessed via social login.\n *\n * @category Auth\n *\n * @remarks\n * - Requires either an email and password or a phone number and password.\n *\n * @example Sign in with email and password\n * ```js\n * const { data, error } = await supabase.auth.signInWithPassword({\n * email: 'example@email.com',\n * password: 'example-password',\n * })\n * ```\n *\n * @exampleResponse Sign in with email and password\n * ```json\n * {\n * \"data\": {\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"example@email.com\",\n * \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"phone\": \"\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {},\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\"\n * },\n * \"session\": {\n * \"access_token\": \"<ACCESS_TOKEN>\",\n * \"token_type\": \"bearer\",\n * \"expires_in\": 3600,\n * \"expires_at\": 1700000000,\n * \"refresh_token\": \"<REFRESH_TOKEN>\",\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"example@email.com\",\n * \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"phone\": \"\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {},\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\"\n * }\n * }\n * },\n * \"error\": null\n * }\n * ```\n *\n * @example Sign in with phone and password\n * ```js\n * const { data, error } = await supabase.auth.signInWithPassword({\n * phone: '+13334445555',\n * password: 'some-password',\n * })\n * ```\n */\n async signInWithPassword(credentials) {\n try {\n let res;\n if ('email' in credentials) {\n const { email, password, options } = credentials;\n res = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/token?grant_type=password`, {\n headers: this.headers,\n body: {\n email,\n password,\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n },\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponsePassword,\n });\n }\n else if ('phone' in credentials) {\n const { phone, password, options } = credentials;\n res = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/token?grant_type=password`, {\n headers: this.headers,\n body: {\n phone,\n password,\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n },\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponsePassword,\n });\n }\n else {\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidCredentialsError('You must provide either an email or phone number and a password');\n }\n const { data, error } = res;\n if (error) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n else if (!data || !data.session || !data.user) {\n const invalidTokenError = new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidTokenResponseError();\n return this._returnResult({ data: { user: null, session: null }, error: invalidTokenError });\n }\n if (data.session) {\n await this._saveSession(data.session);\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\n }\n return this._returnResult({\n data: Object.assign({ user: data.user, session: data.session }, (data.weak_password ? { weakPassword: data.weak_password } : null)),\n error,\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n throw error;\n }\n }\n /**\n * Log in an existing user via a third-party provider.\n * This method supports the PKCE flow.\n *\n * @category Auth\n *\n * @remarks\n * - This method is used for signing in using [Social Login (OAuth) providers](/docs/guides/auth#configure-third-party-providers).\n * - It works by redirecting your application to the provider's authorization screen, before bringing back the user to your app.\n *\n * @example Sign in using a third-party provider\n * ```js\n * const { data, error } = await supabase.auth.signInWithOAuth({\n * provider: 'github'\n * })\n * ```\n *\n * @exampleResponse Sign in using a third-party provider\n * ```json\n * {\n * data: {\n * provider: 'github',\n * url: <PROVIDER_URL_TO_REDIRECT_TO>\n * },\n * error: null\n * }\n * ```\n *\n * @exampleDescription Sign in using a third-party provider with redirect\n * - When the OAuth provider successfully authenticates the user, they are redirected to the URL specified in the `redirectTo` parameter. This parameter defaults to the [`SITE_URL`](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls). It does not redirect the user immediately after invoking this method.\n * - See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project.\n *\n * @example Sign in using a third-party provider with redirect\n * ```js\n * const { data, error } = await supabase.auth.signInWithOAuth({\n * provider: 'github',\n * options: {\n * redirectTo: 'https://example.com/welcome'\n * }\n * })\n * ```\n *\n * @exampleDescription Sign in with scopes and access provider tokens\n * If you need additional access from an OAuth provider, in order to access provider specific APIs in the name of the user, you can do this by passing in the scopes the user should authorize for your application. Note that the `scopes` option takes in **a space-separated list** of scopes.\n *\n * Because OAuth sign-in often includes redirects, you should register an `onAuthStateChange` callback immediately after you create the Supabase client. This callback will listen for the presence of `provider_token` and `provider_refresh_token` properties on the `session` object and store them in local storage. The client library will emit these values **only once** immediately after the user signs in. You can then access them by looking them up in local storage, or send them to your backend servers for further processing.\n *\n * Finally, make sure you remove them from local storage on the `SIGNED_OUT` event. If the OAuth provider supports token revocation, make sure you call those APIs either from the frontend or schedule them to be called on the backend.\n *\n * @example Sign in with scopes and access provider tokens\n * ```js\n * // Register this immediately after calling createClient!\n * // Because signInWithOAuth causes a redirect, you need to fetch the\n * // provider tokens from the callback.\n * supabase.auth.onAuthStateChange((event, session) => {\n * if (session && session.provider_token) {\n * window.localStorage.setItem('oauth_provider_token', session.provider_token)\n * }\n *\n * if (session && session.provider_refresh_token) {\n * window.localStorage.setItem('oauth_provider_refresh_token', session.provider_refresh_token)\n * }\n *\n * if (event === 'SIGNED_OUT') {\n * window.localStorage.removeItem('oauth_provider_token')\n * window.localStorage.removeItem('oauth_provider_refresh_token')\n * }\n * })\n *\n * // Call this on your Sign in with GitHub button to initiate OAuth\n * // with GitHub with the requested elevated scopes.\n * await supabase.auth.signInWithOAuth({\n * provider: 'github',\n * options: {\n * scopes: 'repo gist notifications'\n * }\n * })\n * ```\n */\n async signInWithOAuth(credentials) {\n var _a, _b, _c, _d;\n return await this._handleProviderSignIn(credentials.provider, {\n redirectTo: (_a = credentials.options) === null || _a === void 0 ? void 0 : _a.redirectTo,\n scopes: (_b = credentials.options) === null || _b === void 0 ? void 0 : _b.scopes,\n queryParams: (_c = credentials.options) === null || _c === void 0 ? void 0 : _c.queryParams,\n skipBrowserRedirect: (_d = credentials.options) === null || _d === void 0 ? void 0 : _d.skipBrowserRedirect,\n });\n }\n /**\n * Log in an existing user by exchanging an Auth Code issued during the PKCE flow.\n *\n * @category Auth\n *\n * @remarks\n * - Used when `flowType` is set to `pkce` in client options.\n *\n * @example Exchange Auth Code\n * ```js\n * supabase.auth.exchangeCodeForSession('34e770dd-9ff9-416c-87fa-43b31d7ef225')\n * ```\n *\n * @exampleResponse Exchange Auth Code\n * ```json\n * {\n * \"data\": {\n * session: {\n * access_token: '<ACCESS_TOKEN>',\n * token_type: 'bearer',\n * expires_in: 3600,\n * expires_at: 1700000000,\n * refresh_token: '<REFRESH_TOKEN>',\n * user: {\n * id: '11111111-1111-1111-1111-111111111111',\n * aud: 'authenticated',\n * role: 'authenticated',\n * email: 'example@email.com'\n * email_confirmed_at: '2024-01-01T00:00:00Z',\n * phone: '',\n * confirmation_sent_at: '2024-01-01T00:00:00Z',\n * confirmed_at: '2024-01-01T00:00:00Z',\n * last_sign_in_at: '2024-01-01T00:00:00Z',\n * app_metadata: {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\",\n * \"<OTHER_PROVIDER>\"\n * ]\n * },\n * user_metadata: {\n * email: 'email@email.com',\n * email_verified: true,\n * full_name: 'User Name',\n * iss: '<ISS>',\n * name: 'User Name',\n * phone_verified: false,\n * provider_id: '<PROVIDER_ID>',\n * sub: '<SUB>'\n * },\n * identities: [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"email@example.com\"\n * },\n * {\n * \"identity_id\": \"33333333-3333-3333-3333-333333333333\",\n * \"id\": \"<ID>\",\n * \"user_id\": \"<USER_ID>\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": true,\n * \"full_name\": \"User Name\",\n * \"iss\": \"<ISS>\",\n * \"name\": \"User Name\",\n * \"phone_verified\": false,\n * \"provider_id\": \"<PROVIDER_ID>\",\n * \"sub\": \"<SUB>\"\n * },\n * \"provider\": \"<PROVIDER>\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * created_at: '2024-01-01T00:00:00Z',\n * updated_at: '2024-01-01T00:00:00Z',\n * is_anonymous: false\n * },\n * provider_token: '<PROVIDER_TOKEN>',\n * provider_refresh_token: '<PROVIDER_REFRESH_TOKEN>'\n * },\n * user: {\n * id: '11111111-1111-1111-1111-111111111111',\n * aud: 'authenticated',\n * role: 'authenticated',\n * email: 'example@email.com',\n * email_confirmed_at: '2024-01-01T00:00:00Z',\n * phone: '',\n * confirmation_sent_at: '2024-01-01T00:00:00Z',\n * confirmed_at: '2024-01-01T00:00:00Z',\n * last_sign_in_at: '2024-01-01T00:00:00Z',\n * app_metadata: {\n * provider: 'email',\n * providers: [\n * \"email\",\n * \"<OTHER_PROVIDER>\"\n * ]\n * },\n * user_metadata: {\n * email: 'email@email.com',\n * email_verified: true,\n * full_name: 'User Name',\n * iss: '<ISS>',\n * name: 'User Name',\n * phone_verified: false,\n * provider_id: '<PROVIDER_ID>',\n * sub: '<SUB>'\n * },\n * identities: [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"email@example.com\"\n * },\n * {\n * \"identity_id\": \"33333333-3333-3333-3333-333333333333\",\n * \"id\": \"<ID>\",\n * \"user_id\": \"<USER_ID>\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": true,\n * \"full_name\": \"User Name\",\n * \"iss\": \"<ISS>\",\n * \"name\": \"User Name\",\n * \"phone_verified\": false,\n * \"provider_id\": \"<PROVIDER_ID>\",\n * \"sub\": \"<SUB>\"\n * },\n * \"provider\": \"<PROVIDER>\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * created_at: '2024-01-01T00:00:00Z',\n * updated_at: '2024-01-01T00:00:00Z',\n * is_anonymous: false\n * },\n * redirectType: null\n * },\n * \"error\": null\n * }\n * ```\n */\n async exchangeCodeForSession(authCode) {\n await this.initializePromise;\n return this._acquireLock(this.lockAcquireTimeout, async () => {\n return this._exchangeCodeForSession(authCode);\n });\n }\n /**\n * Signs in a user by verifying a message signed by the user's private key.\n * Supports Ethereum (via Sign-In-With-Ethereum) & Solana (Sign-In-With-Solana) standards,\n * both of which derive from the EIP-4361 standard\n * With slight variation on Solana's side.\n * @reference https://eips.ethereum.org/EIPS/eip-4361\n *\n * @category Auth\n *\n * @remarks\n * - Uses a Web3 (Ethereum, Solana) wallet to sign a user in.\n * - Read up on the [potential for abuse](/docs/guides/auth/auth-web3#potential-for-abuse) before using it.\n *\n * @example Sign in with Solana or Ethereum (Window API)\n * ```js\n * // uses window.ethereum for the wallet\n * const { data, error } = await supabase.auth.signInWithWeb3({\n * chain: 'ethereum',\n * statement: 'I accept the Terms of Service at https://example.com/tos'\n * })\n *\n * // uses window.solana for the wallet\n * const { data, error } = await supabase.auth.signInWithWeb3({\n * chain: 'solana',\n * statement: 'I accept the Terms of Service at https://example.com/tos'\n * })\n * ```\n *\n * @example Sign in with Ethereum (Message and Signature)\n * ```js\n * const { data, error } = await supabase.auth.signInWithWeb3({\n * chain: 'ethereum',\n * message: '<sign in with ethereum message>',\n * signature: '<hex of the ethereum signature over the message>',\n * })\n * ```\n *\n * @example Sign in with Solana (Brave)\n * ```js\n * const { data, error } = await supabase.auth.signInWithWeb3({\n * chain: 'solana',\n * statement: 'I accept the Terms of Service at https://example.com/tos',\n * wallet: window.braveSolana\n * })\n * ```\n *\n * @example Sign in with Solana (Wallet Adapter)\n * ```jsx\n * function SignInButton() {\n * const wallet = useWallet()\n *\n * return (\n * <>\n * {wallet.connected ? (\n * <button\n * onClick={() => {\n * supabase.auth.signInWithWeb3({\n * chain: 'solana',\n * statement: 'I accept the Terms of Service at https://example.com/tos',\n * wallet,\n * })\n * }}\n * >\n * Sign in with Solana\n * </button>\n * ) : (\n * <WalletMultiButton />\n * )}\n * </>\n * )\n * }\n *\n * function App() {\n * const endpoint = clusterApiUrl('devnet')\n * const wallets = useMemo(() => [], [])\n *\n * return (\n * <ConnectionProvider endpoint={endpoint}>\n * <WalletProvider wallets={wallets}>\n * <WalletModalProvider>\n * <SignInButton />\n * </WalletModalProvider>\n * </WalletProvider>\n * </ConnectionProvider>\n * )\n * }\n * ```\n */\n async signInWithWeb3(credentials) {\n const { chain } = credentials;\n switch (chain) {\n case 'ethereum':\n return await this.signInWithEthereum(credentials);\n case 'solana':\n return await this.signInWithSolana(credentials);\n default:\n throw new Error(`@supabase/auth-js: Unsupported chain \"${chain}\"`);\n }\n }\n async signInWithEthereum(credentials) {\n var _a, _b, _c, _d, _f, _g, _h, _j, _k, _l, _m;\n // TODO: flatten type\n let message;\n let signature;\n if ('message' in credentials) {\n message = credentials.message;\n signature = credentials.signature;\n }\n else {\n const { chain, wallet, statement, options } = credentials;\n let resolvedWallet;\n if (!(0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)()) {\n if (typeof wallet !== 'object' || !(options === null || options === void 0 ? void 0 : options.url)) {\n throw new Error('@supabase/auth-js: Both wallet and url must be specified in non-browser environments.');\n }\n resolvedWallet = wallet;\n }\n else if (typeof wallet === 'object') {\n resolvedWallet = wallet;\n }\n else {\n const windowAny = window;\n if ('ethereum' in windowAny &&\n typeof windowAny.ethereum === 'object' &&\n 'request' in windowAny.ethereum &&\n typeof windowAny.ethereum.request === 'function') {\n resolvedWallet = windowAny.ethereum;\n }\n else {\n throw new Error(`@supabase/auth-js: No compatible Ethereum wallet interface on the window object (window.ethereum) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'ethereum', wallet: resolvedUserWallet }) instead.`);\n }\n }\n const url = new URL((_a = options === null || options === void 0 ? void 0 : options.url) !== null && _a !== void 0 ? _a : window.location.href);\n const accounts = await resolvedWallet\n .request({\n method: 'eth_requestAccounts',\n })\n .then((accs) => accs)\n .catch(() => {\n throw new Error(`@supabase/auth-js: Wallet method eth_requestAccounts is missing or invalid`);\n });\n if (!accounts || accounts.length === 0) {\n throw new Error(`@supabase/auth-js: No accounts available. Please ensure the wallet is connected.`);\n }\n const address = (0,_lib_web3_ethereum__WEBPACK_IMPORTED_MODULE_10__.getAddress)(accounts[0]);\n let chainId = (_b = options === null || options === void 0 ? void 0 : options.signInWithEthereum) === null || _b === void 0 ? void 0 : _b.chainId;\n if (!chainId) {\n const chainIdHex = await resolvedWallet.request({\n method: 'eth_chainId',\n });\n chainId = (0,_lib_web3_ethereum__WEBPACK_IMPORTED_MODULE_10__.fromHex)(chainIdHex);\n }\n const siweMessage = {\n domain: url.host,\n address: address,\n statement: statement,\n uri: url.href,\n version: '1',\n chainId: chainId,\n nonce: (_c = options === null || options === void 0 ? void 0 : options.signInWithEthereum) === null || _c === void 0 ? void 0 : _c.nonce,\n issuedAt: (_f = (_d = options === null || options === void 0 ? void 0 : options.signInWithEthereum) === null || _d === void 0 ? void 0 : _d.issuedAt) !== null && _f !== void 0 ? _f : new Date(),\n expirationTime: (_g = options === null || options === void 0 ? void 0 : options.signInWithEthereum) === null || _g === void 0 ? void 0 : _g.expirationTime,\n notBefore: (_h = options === null || options === void 0 ? void 0 : options.signInWithEthereum) === null || _h === void 0 ? void 0 : _h.notBefore,\n requestId: (_j = options === null || options === void 0 ? void 0 : options.signInWithEthereum) === null || _j === void 0 ? void 0 : _j.requestId,\n resources: (_k = options === null || options === void 0 ? void 0 : options.signInWithEthereum) === null || _k === void 0 ? void 0 : _k.resources,\n };\n message = (0,_lib_web3_ethereum__WEBPACK_IMPORTED_MODULE_10__.createSiweMessage)(siweMessage);\n // Sign message\n signature = (await resolvedWallet.request({\n method: 'personal_sign',\n params: [(0,_lib_web3_ethereum__WEBPACK_IMPORTED_MODULE_10__.toHex)(message), address],\n }));\n }\n try {\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/token?grant_type=web3`, {\n headers: this.headers,\n body: Object.assign({ chain: 'ethereum', message,\n signature }, (((_l = credentials.options) === null || _l === void 0 ? void 0 : _l.captchaToken)\n ? { gotrue_meta_security: { captcha_token: (_m = credentials.options) === null || _m === void 0 ? void 0 : _m.captchaToken } }\n : null)),\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\n });\n if (error) {\n throw error;\n }\n if (!data || !data.session || !data.user) {\n const invalidTokenError = new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidTokenResponseError();\n return this._returnResult({ data: { user: null, session: null }, error: invalidTokenError });\n }\n if (data.session) {\n await this._saveSession(data.session);\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\n }\n return this._returnResult({ data: Object.assign({}, data), error });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n throw error;\n }\n }\n async signInWithSolana(credentials) {\n var _a, _b, _c, _d, _f, _g, _h, _j, _k, _l, _m, _o;\n let message;\n let signature;\n if ('message' in credentials) {\n message = credentials.message;\n signature = credentials.signature;\n }\n else {\n const { chain, wallet, statement, options } = credentials;\n let resolvedWallet;\n if (!(0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)()) {\n if (typeof wallet !== 'object' || !(options === null || options === void 0 ? void 0 : options.url)) {\n throw new Error('@supabase/auth-js: Both wallet and url must be specified in non-browser environments.');\n }\n resolvedWallet = wallet;\n }\n else if (typeof wallet === 'object') {\n resolvedWallet = wallet;\n }\n else {\n const windowAny = window;\n if ('solana' in windowAny &&\n typeof windowAny.solana === 'object' &&\n (('signIn' in windowAny.solana && typeof windowAny.solana.signIn === 'function') ||\n ('signMessage' in windowAny.solana &&\n typeof windowAny.solana.signMessage === 'function'))) {\n resolvedWallet = windowAny.solana;\n }\n else {\n throw new Error(`@supabase/auth-js: No compatible Solana wallet interface on the window object (window.solana) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'solana', wallet: resolvedUserWallet }) instead.`);\n }\n }\n const url = new URL((_a = options === null || options === void 0 ? void 0 : options.url) !== null && _a !== void 0 ? _a : window.location.href);\n if ('signIn' in resolvedWallet && resolvedWallet.signIn) {\n const output = await resolvedWallet.signIn(Object.assign(Object.assign(Object.assign({ issuedAt: new Date().toISOString() }, options === null || options === void 0 ? void 0 : options.signInWithSolana), { \n // non-overridable properties\n version: '1', domain: url.host, uri: url.href }), (statement ? { statement } : null)));\n let outputToProcess;\n if (Array.isArray(output) && output[0] && typeof output[0] === 'object') {\n outputToProcess = output[0];\n }\n else if (output &&\n typeof output === 'object' &&\n 'signedMessage' in output &&\n 'signature' in output) {\n outputToProcess = output;\n }\n else {\n throw new Error('@supabase/auth-js: Wallet method signIn() returned unrecognized value');\n }\n if ('signedMessage' in outputToProcess &&\n 'signature' in outputToProcess &&\n (typeof outputToProcess.signedMessage === 'string' ||\n outputToProcess.signedMessage instanceof Uint8Array) &&\n outputToProcess.signature instanceof Uint8Array) {\n message =\n typeof outputToProcess.signedMessage === 'string'\n ? outputToProcess.signedMessage\n : new TextDecoder().decode(outputToProcess.signedMessage);\n signature = outputToProcess.signature;\n }\n else {\n throw new Error('@supabase/auth-js: Wallet method signIn() API returned object without signedMessage and signature fields');\n }\n }\n else {\n if (!('signMessage' in resolvedWallet) ||\n typeof resolvedWallet.signMessage !== 'function' ||\n !('publicKey' in resolvedWallet) ||\n typeof resolvedWallet !== 'object' ||\n !resolvedWallet.publicKey ||\n !('toBase58' in resolvedWallet.publicKey) ||\n typeof resolvedWallet.publicKey.toBase58 !== 'function') {\n throw new Error('@supabase/auth-js: Wallet does not have a compatible signMessage() and publicKey.toBase58() API');\n }\n message = [\n `${url.host} wants you to sign in with your Solana account:`,\n resolvedWallet.publicKey.toBase58(),\n ...(statement ? ['', statement, ''] : ['']),\n 'Version: 1',\n `URI: ${url.href}`,\n `Issued At: ${(_c = (_b = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _b === void 0 ? void 0 : _b.issuedAt) !== null && _c !== void 0 ? _c : new Date().toISOString()}`,\n ...(((_d = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _d === void 0 ? void 0 : _d.notBefore)\n ? [`Not Before: ${options.signInWithSolana.notBefore}`]\n : []),\n ...(((_f = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _f === void 0 ? void 0 : _f.expirationTime)\n ? [`Expiration Time: ${options.signInWithSolana.expirationTime}`]\n : []),\n ...(((_g = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _g === void 0 ? void 0 : _g.chainId)\n ? [`Chain ID: ${options.signInWithSolana.chainId}`]\n : []),\n ...(((_h = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _h === void 0 ? void 0 : _h.nonce) ? [`Nonce: ${options.signInWithSolana.nonce}`] : []),\n ...(((_j = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _j === void 0 ? void 0 : _j.requestId)\n ? [`Request ID: ${options.signInWithSolana.requestId}`]\n : []),\n ...(((_l = (_k = options === null || options === void 0 ? void 0 : options.signInWithSolana) === null || _k === void 0 ? void 0 : _k.resources) === null || _l === void 0 ? void 0 : _l.length)\n ? [\n 'Resources',\n ...options.signInWithSolana.resources.map((resource) => `- ${resource}`),\n ]\n : []),\n ].join('\\n');\n const maybeSignature = await resolvedWallet.signMessage(new TextEncoder().encode(message), 'utf8');\n if (!maybeSignature || !(maybeSignature instanceof Uint8Array)) {\n throw new Error('@supabase/auth-js: Wallet signMessage() API returned an recognized value');\n }\n signature = maybeSignature;\n }\n }\n try {\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/token?grant_type=web3`, {\n headers: this.headers,\n body: Object.assign({ chain: 'solana', message, signature: (0,_lib_base64url__WEBPACK_IMPORTED_MODULE_9__.bytesToBase64URL)(signature) }, (((_m = credentials.options) === null || _m === void 0 ? void 0 : _m.captchaToken)\n ? { gotrue_meta_security: { captcha_token: (_o = credentials.options) === null || _o === void 0 ? void 0 : _o.captchaToken } }\n : null)),\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\n });\n if (error) {\n throw error;\n }\n if (!data || !data.session || !data.user) {\n const invalidTokenError = new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidTokenResponseError();\n return this._returnResult({ data: { user: null, session: null }, error: invalidTokenError });\n }\n if (data.session) {\n await this._saveSession(data.session);\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\n }\n return this._returnResult({ data: Object.assign({}, data), error });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n throw error;\n }\n }\n async _exchangeCodeForSession(authCode) {\n const storageItem = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\n const [codeVerifier, redirectType] = (storageItem !== null && storageItem !== void 0 ? storageItem : '').split('/');\n try {\n if (!codeVerifier && this.flowType === 'pkce') {\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthPKCECodeVerifierMissingError();\n }\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/token?grant_type=pkce`, {\n headers: this.headers,\n body: {\n auth_code: authCode,\n code_verifier: codeVerifier,\n },\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\n });\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\n if (error) {\n throw error;\n }\n if (!data || !data.session || !data.user) {\n const invalidTokenError = new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidTokenResponseError();\n return this._returnResult({\n data: { user: null, session: null, redirectType: null },\n error: invalidTokenError,\n });\n }\n if (data.session) {\n await this._saveSession(data.session);\n await this._notifyAllSubscribers(redirectType === 'recovery' ? 'PASSWORD_RECOVERY' : 'SIGNED_IN', data.session);\n }\n return this._returnResult({ data: Object.assign(Object.assign({}, data), { redirectType: redirectType !== null && redirectType !== void 0 ? redirectType : null }), error });\n }\n catch (error) {\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({\n data: { user: null, session: null, redirectType: null },\n error,\n });\n }\n throw error;\n }\n }\n /**\n * Allows signing in with an OIDC ID token. The authentication provider used\n * should be enabled and configured.\n *\n * @category Auth\n *\n * @remarks\n * - Use an ID token to sign in.\n * - Especially useful when implementing sign in using native platform dialogs in mobile or desktop apps using Sign in with Apple or Sign in with Google on iOS and Android.\n * - You can also use Google's [One Tap](https://developers.google.com/identity/gsi/web/guides/display-google-one-tap) and [Automatic sign-in](https://developers.google.com/identity/gsi/web/guides/automatic-sign-in-sign-out) via this API.\n *\n * @example Sign In using ID Token\n * ```js\n * const { data, error } = await supabase.auth.signInWithIdToken({\n * provider: 'google',\n * token: 'your-id-token'\n * })\n * ```\n *\n * @exampleResponse Sign In using ID Token\n * ```json\n * {\n * \"data\": {\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * ...\n * },\n * \"user_metadata\": {\n * ...\n * },\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"provider\": \"google\",\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * },\n * \"session\": {\n * \"access_token\": \"<ACCESS_TOKEN>\",\n * \"token_type\": \"bearer\",\n * \"expires_in\": 3600,\n * \"expires_at\": 1700000000,\n * \"refresh_token\": \"<REFRESH_TOKEN>\",\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * ...\n * },\n * \"user_metadata\": {\n * ...\n * },\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"provider\": \"google\",\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * }\n * }\n * },\n * \"error\": null\n * }\n * ```\n */\n async signInWithIdToken(credentials) {\n try {\n const { options, provider, token, access_token, nonce } = credentials;\n const res = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/token?grant_type=id_token`, {\n headers: this.headers,\n body: {\n provider,\n id_token: token,\n access_token,\n nonce,\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n },\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\n });\n const { data, error } = res;\n if (error) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n else if (!data || !data.session || !data.user) {\n const invalidTokenError = new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidTokenResponseError();\n return this._returnResult({ data: { user: null, session: null }, error: invalidTokenError });\n }\n if (data.session) {\n await this._saveSession(data.session);\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\n }\n return this._returnResult({ data, error });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n throw error;\n }\n }\n /**\n * Log in a user using magiclink or a one-time password (OTP).\n *\n * If the `{{ .ConfirmationURL }}` variable is specified in the email template, a magiclink will be sent.\n * If the `{{ .Token }}` variable is specified in the email template, an OTP will be sent.\n * If you're using phone sign-ins, only an OTP will be sent. You won't be able to send a magiclink for phone sign-ins.\n *\n * Be aware that you may get back an error message that will not distinguish\n * between the cases where the account does not exist or, that the account\n * can only be accessed via social login.\n *\n * Do note that you will need to configure a Whatsapp sender on Twilio\n * if you are using phone sign in with the 'whatsapp' channel. The whatsapp\n * channel is not supported on other providers\n * at this time.\n * This method supports PKCE when an email is passed.\n *\n * @category Auth\n *\n * @remarks\n * - Requires either an email or phone number.\n * - This method is used for passwordless sign-ins where a OTP is sent to the user's email or phone number.\n * - If the user doesn't exist, `signInWithOtp()` will signup the user instead. To restrict this behavior, you can set `shouldCreateUser` in `SignInWithPasswordlessCredentials.options` to `false`.\n * - If you're using an email, you can configure whether you want the user to receive a magiclink or a OTP.\n * - If you're using phone, you can configure whether you want the user to receive a OTP.\n * - The magic link's destination URL is determined by the [`SITE_URL`](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls).\n * - See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project.\n * - Magic links and OTPs share the same implementation. To send users a one-time code instead of a magic link, [modify the magic link email template](/dashboard/project/_/auth/templates) to include `{{ .Token }}` instead of `{{ .ConfirmationURL }}`.\n * - See our [Twilio Phone Auth Guide](/docs/guides/auth/phone-login?showSMSProvider=Twilio) for details about configuring WhatsApp sign in.\n *\n * @exampleDescription Sign in with email\n * The user will be sent an email which contains either a magiclink or a OTP or both. By default, a given user can only request a OTP once every 60 seconds.\n *\n * @example Sign in with email\n * ```js\n * const { data, error } = await supabase.auth.signInWithOtp({\n * email: 'example@email.com',\n * options: {\n * emailRedirectTo: 'https://example.com/welcome'\n * }\n * })\n * ```\n *\n * @exampleResponse Sign in with email\n * ```json\n * {\n * \"data\": {\n * \"user\": null,\n * \"session\": null\n * },\n * \"error\": null\n * }\n * ```\n *\n * @exampleDescription Sign in with SMS OTP\n * The user will be sent a SMS which contains a OTP. By default, a given user can only request a OTP once every 60 seconds.\n *\n * @example Sign in with SMS OTP\n * ```js\n * const { data, error } = await supabase.auth.signInWithOtp({\n * phone: '+13334445555',\n * })\n * ```\n *\n * @exampleDescription Sign in with WhatsApp OTP\n * The user will be sent a WhatsApp message which contains a OTP. By default, a given user can only request a OTP once every 60 seconds. Note that a user will need to have a valid WhatsApp account that is linked to Twilio in order to use this feature.\n *\n * @example Sign in with WhatsApp OTP\n * ```js\n * const { data, error } = await supabase.auth.signInWithOtp({\n * phone: '+13334445555',\n * options: {\n * channel:'whatsapp',\n * }\n * })\n * ```\n */\n async signInWithOtp(credentials) {\n var _a, _b, _c, _d, _f;\n try {\n if ('email' in credentials) {\n const { email, options } = credentials;\n let codeChallenge = null;\n let codeChallengeMethod = null;\n if (this.flowType === 'pkce') {\n ;\n [codeChallenge, codeChallengeMethod] = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getCodeChallengeAndMethod)(this.storage, this.storageKey);\n }\n const { error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/otp`, {\n headers: this.headers,\n body: {\n email,\n data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : {},\n create_user: (_b = options === null || options === void 0 ? void 0 : options.shouldCreateUser) !== null && _b !== void 0 ? _b : true,\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n code_challenge: codeChallenge,\n code_challenge_method: codeChallengeMethod,\n },\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\n });\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n if ('phone' in credentials) {\n const { phone, options } = credentials;\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/otp`, {\n headers: this.headers,\n body: {\n phone,\n data: (_c = options === null || options === void 0 ? void 0 : options.data) !== null && _c !== void 0 ? _c : {},\n create_user: (_d = options === null || options === void 0 ? void 0 : options.shouldCreateUser) !== null && _d !== void 0 ? _d : true,\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n channel: (_f = options === null || options === void 0 ? void 0 : options.channel) !== null && _f !== void 0 ? _f : 'sms',\n },\n });\n return this._returnResult({\n data: { user: null, session: null, messageId: data === null || data === void 0 ? void 0 : data.message_id },\n error,\n });\n }\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidCredentialsError('You must provide either an email or phone number.');\n }\n catch (error) {\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n throw error;\n }\n }\n /**\n * Log in a user given a User supplied OTP or TokenHash received through mobile or email.\n *\n * @category Auth\n *\n * @remarks\n * - The `verifyOtp` method takes in different verification types.\n * - If a phone number is used, the type can either be:\n * 1. `sms` – Used when verifying a one-time password (OTP) sent via SMS during sign-up or sign-in.\n * 2. `phone_change` – Used when verifying an OTP sent to a new phone number during a phone number update process.\n * - If an email address is used, the type can be one of the following (note: `signup` and `magiclink` types are deprecated):\n * 1. `email` – Used when verifying an OTP sent to the user's email during sign-up or sign-in.\n * 2. `recovery` – Used when verifying an OTP sent for account recovery, typically after a password reset request.\n * 3. `invite` – Used when verifying an OTP sent as part of an invitation to join a project or organization.\n * 4. `email_change` – Used when verifying an OTP sent to a new email address during an email update process.\n * - The verification type used should be determined based on the corresponding auth method called before `verifyOtp` to sign up / sign-in a user.\n * - The `TokenHash` is contained in the [email templates](/docs/guides/auth/auth-email-templates) and can be used to sign in. You may wish to use the hash for the PKCE flow for Server Side Auth. Read [the Password-based Auth guide](/docs/guides/auth/passwords) for more details.\n *\n * @example Verify Signup One-Time Password (OTP)\n * ```js\n * const { data, error } = await supabase.auth.verifyOtp({ email, token, type: 'email'})\n * ```\n *\n * @exampleResponse Verify Signup One-Time Password (OTP)\n * ```json\n * {\n * \"data\": {\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"example@email.com\",\n * \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"phone\": \"\",\n * \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"recovery_sent_at\": \"2024-01-01T00:00:00Z\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"is_anonymous\": false\n * },\n * \"session\": {\n * \"access_token\": \"<ACCESS_TOKEN>\",\n * \"token_type\": \"bearer\",\n * \"expires_in\": 3600,\n * \"expires_at\": 1700000000,\n * \"refresh_token\": \"<REFRESH_TOKEN>\",\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"example@email.com\",\n * \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"phone\": \"\",\n * \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"recovery_sent_at\": \"2024-01-01T00:00:00Z\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"is_anonymous\": false\n * }\n * }\n * },\n * \"error\": null\n * }\n * ```\n *\n * @example Verify SMS One-Time Password (OTP)\n * ```js\n * const { data, error } = await supabase.auth.verifyOtp({ phone, token, type: 'sms'})\n * ```\n *\n * @example Verify Email Auth (Token Hash)\n * ```js\n * const { data, error } = await supabase.auth.verifyOtp({ token_hash: tokenHash, type: 'email'})\n * ```\n */\n async verifyOtp(params) {\n var _a, _b;\n try {\n let redirectTo = undefined;\n let captchaToken = undefined;\n if ('options' in params) {\n redirectTo = (_a = params.options) === null || _a === void 0 ? void 0 : _a.redirectTo;\n captchaToken = (_b = params.options) === null || _b === void 0 ? void 0 : _b.captchaToken;\n }\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/verify`, {\n headers: this.headers,\n body: Object.assign(Object.assign({}, params), { gotrue_meta_security: { captcha_token: captchaToken } }),\n redirectTo,\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\n });\n if (error) {\n throw error;\n }\n if (!data) {\n const tokenVerificationError = new Error('An error occurred on token verification.');\n throw tokenVerificationError;\n }\n const session = data.session;\n const user = data.user;\n if (session === null || session === void 0 ? void 0 : session.access_token) {\n await this._saveSession(session);\n await this._notifyAllSubscribers(params.type == 'recovery' ? 'PASSWORD_RECOVERY' : 'SIGNED_IN', session);\n }\n return this._returnResult({ data: { user, session }, error: null });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n throw error;\n }\n }\n /**\n * Attempts a single-sign on using an enterprise Identity Provider. A\n * successful SSO attempt will redirect the current page to the identity\n * provider authorization page. The redirect URL is implementation and SSO\n * protocol specific.\n *\n * You can use it by providing a SSO domain. Typically you can extract this\n * domain by asking users for their email address. If this domain is\n * registered on the Auth instance the redirect will use that organization's\n * currently active SSO Identity Provider for the login.\n *\n * If you have built an organization-specific login page, you can use the\n * organization's SSO Identity Provider UUID directly instead.\n *\n * @category Auth\n *\n * @remarks\n * - Before you can call this method you need to [establish a connection](/docs/guides/auth/sso/auth-sso-saml#managing-saml-20-connections) to an identity provider. Use the [CLI commands](/docs/reference/cli/supabase-sso) to do this.\n * - If you've associated an email domain to the identity provider, you can use the `domain` property to start a sign-in flow.\n * - In case you need to use a different way to start the authentication flow with an identity provider, you can use the `providerId` property. For example:\n * - Mapping specific user email addresses with an identity provider.\n * - Using different hints to identity the identity provider to be used by the user, like a company-specific page, IP address or other tracking information.\n *\n * @example Sign in with email domain\n * ```js\n * // You can extract the user's email domain and use it to trigger the\n * // authentication flow with the correct identity provider.\n *\n * const { data, error } = await supabase.auth.signInWithSSO({\n * domain: 'company.com'\n * })\n *\n * if (data?.url) {\n * // redirect the user to the identity provider's authentication flow\n * window.location.href = data.url\n * }\n * ```\n *\n * @example Sign in with provider UUID\n * ```js\n * // Useful when you need to map a user's sign in request according\n * // to different rules that can't use email domains.\n *\n * const { data, error } = await supabase.auth.signInWithSSO({\n * providerId: '21648a9d-8d5a-4555-a9d1-d6375dc14e92'\n * })\n *\n * if (data?.url) {\n * // redirect the user to the identity provider's authentication flow\n * window.location.href = data.url\n * }\n * ```\n */\n async signInWithSSO(params) {\n var _a, _b, _c, _d, _f;\n try {\n let codeChallenge = null;\n let codeChallengeMethod = null;\n if (this.flowType === 'pkce') {\n ;\n [codeChallenge, codeChallengeMethod] = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getCodeChallengeAndMethod)(this.storage, this.storageKey);\n }\n const result = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/sso`, {\n body: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, ('providerId' in params ? { provider_id: params.providerId } : null)), ('domain' in params ? { domain: params.domain } : null)), { redirect_to: (_b = (_a = params.options) === null || _a === void 0 ? void 0 : _a.redirectTo) !== null && _b !== void 0 ? _b : undefined }), (((_c = params === null || params === void 0 ? void 0 : params.options) === null || _c === void 0 ? void 0 : _c.captchaToken)\n ? { gotrue_meta_security: { captcha_token: params.options.captchaToken } }\n : null)), { skip_http_redirect: true, code_challenge: codeChallenge, code_challenge_method: codeChallengeMethod }),\n headers: this.headers,\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._ssoResponse,\n });\n // Automatically redirect in browser unless skipBrowserRedirect is true\n if (((_d = result.data) === null || _d === void 0 ? void 0 : _d.url) && (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() && !((_f = params.options) === null || _f === void 0 ? void 0 : _f.skipBrowserRedirect)) {\n window.location.assign(result.data.url);\n }\n return this._returnResult(result);\n }\n catch (error) {\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /**\n * Sends a reauthentication OTP to the user's email or phone number.\n * Requires the user to be signed-in.\n *\n * @category Auth\n *\n * @remarks\n * - This method is used together with `updateUser()` when a user's password needs to be updated.\n * - If you require your user to reauthenticate before updating their password, you need to enable the **Secure password change** option in your [project's email provider settings](/dashboard/project/_/auth/providers).\n * - A user is only require to reauthenticate before updating their password if **Secure password change** is enabled and the user **hasn't recently signed in**. A user is deemed recently signed in if the session was created in the last 24 hours.\n * - This method will send a nonce to the user's email. If the user doesn't have a confirmed email address, the method will send the nonce to the user's confirmed phone number instead.\n * - After receiving the OTP, include it as the `nonce` in your `updateUser()` call to finalize the password change.\n *\n * @exampleDescription Send reauthentication nonce\n * Sends a reauthentication nonce to the user's email or phone number.\n *\n * @example Send reauthentication nonce\n * ```js\n * const { error } = await supabase.auth.reauthenticate()\n * ```\n */\n async reauthenticate() {\n await this.initializePromise;\n return await this._acquireLock(this.lockAcquireTimeout, async () => {\n return await this._reauthenticate();\n });\n }\n async _reauthenticate() {\n try {\n return await this._useSession(async (result) => {\n const { data: { session }, error: sessionError, } = result;\n if (sessionError)\n throw sessionError;\n if (!session)\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError();\n const { error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'GET', `${this.url}/reauthenticate`, {\n headers: this.headers,\n jwt: session.access_token,\n });\n return this._returnResult({ data: { user: null, session: null }, error });\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n throw error;\n }\n }\n /**\n * Resends an existing signup confirmation email, email change email, SMS OTP or phone change OTP.\n *\n * @category Auth\n *\n * @remarks\n * - Resends a signup confirmation, email change or phone change email to the user.\n * - Passwordless sign-ins can be resent by calling the `signInWithOtp()` method again.\n * - Password recovery emails can be resent by calling the `resetPasswordForEmail()` method again.\n * - This method will only resend an email or phone OTP to the user if there was an initial signup, email change or phone change request being made(note: For existing users signing in with OTP, you should use `signInWithOtp()` again to resend the OTP).\n * - You can specify a redirect url when you resend an email link using the `emailRedirectTo` option.\n *\n * @exampleDescription Resend an email signup confirmation\n * Resends the email signup confirmation to the user\n *\n * @example Resend an email signup confirmation\n * ```js\n * const { error } = await supabase.auth.resend({\n * type: 'signup',\n * email: 'email@example.com',\n * options: {\n * emailRedirectTo: 'https://example.com/welcome'\n * }\n * })\n * ```\n *\n * @exampleDescription Resend a phone signup confirmation\n * Resends the phone signup confirmation email to the user\n *\n * @example Resend a phone signup confirmation\n * ```js\n * const { error } = await supabase.auth.resend({\n * type: 'sms',\n * phone: '1234567890'\n * })\n * ```\n *\n * @exampleDescription Resend email change email\n * Resends the email change email to the user\n *\n * @example Resend email change email\n * ```js\n * const { error } = await supabase.auth.resend({\n * type: 'email_change',\n * email: 'email@example.com'\n * })\n * ```\n *\n * @exampleDescription Resend phone change OTP\n * Resends the phone change OTP to the user\n *\n * @example Resend phone change OTP\n * ```js\n * const { error } = await supabase.auth.resend({\n * type: 'phone_change',\n * phone: '1234567890'\n * })\n * ```\n */\n async resend(credentials) {\n try {\n const endpoint = `${this.url}/resend`;\n if ('email' in credentials) {\n const { email, type, options } = credentials;\n const { error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', endpoint, {\n headers: this.headers,\n body: {\n email,\n type,\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n },\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\n });\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n else if ('phone' in credentials) {\n const { phone, type, options } = credentials;\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', endpoint, {\n headers: this.headers,\n body: {\n phone,\n type,\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n },\n });\n return this._returnResult({\n data: { user: null, session: null, messageId: data === null || data === void 0 ? void 0 : data.message_id },\n error,\n });\n }\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidCredentialsError('You must provide either an email or phone number and a type');\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n throw error;\n }\n }\n /**\n * Returns the session, refreshing it if necessary.\n *\n * The session returned can be null if the session is not detected which can happen in the event a user is not signed-in or has logged out.\n *\n * **IMPORTANT:** This method loads values directly from the storage attached\n * to the client. If that storage is based on request cookies for example,\n * the values in it may not be authentic and therefore it's strongly advised\n * against using this method and its results in such circumstances. A warning\n * will be emitted if this is detected. Use {@link #getUser()} instead.\n *\n * @category Auth\n *\n * @remarks\n * - Since the introduction of [asymmetric JWT signing keys](/docs/guides/auth/signing-keys), this method is considered low-level and we encourage you to use `getClaims()` or `getUser()` instead.\n * - Retrieves the current [user session](/docs/guides/auth/sessions) from the storage medium (local storage, cookies).\n * - The session contains an access token (signed JWT), a refresh token and the user object.\n * - If the session's access token is expired or is about to expire, this method will use the refresh token to refresh the session.\n * - When using in a browser, or you've called `startAutoRefresh()` in your environment (React Native, etc.) this function always returns a valid access token without refreshing the session itself, as this is done in the background. This function returns very fast.\n * - **IMPORTANT SECURITY NOTICE:** If using an insecure storage medium, such as cookies or request headers, the user object returned by this function **must not be trusted**. Always verify the JWT using `getClaims()` or your own JWT verification library to securely establish the user's identity and access. You can also use `getUser()` to fetch the user object directly from the Auth server for this purpose.\n * - When using in a browser, this function is synchronized across all tabs using the [LockManager](https://developer.mozilla.org/en-US/docs/Web/API/LockManager) API. In other environments make sure you've defined a proper `lock` property, if necessary, to make sure there are no race conditions while the session is being refreshed.\n *\n * @example Get the session data\n * ```js\n * const { data, error } = await supabase.auth.getSession()\n * ```\n *\n * @exampleResponse Get the session data\n * ```json\n * {\n * \"data\": {\n * \"session\": {\n * \"access_token\": \"<ACCESS_TOKEN>\",\n * \"token_type\": \"bearer\",\n * \"expires_in\": 3600,\n * \"expires_at\": 1700000000,\n * \"refresh_token\": \"<REFRESH_TOKEN>\",\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"example@email.com\",\n * \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"phone\": \"\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"is_anonymous\": false\n * }\n * }\n * },\n * \"error\": null\n * }\n * ```\n */\n async getSession() {\n await this.initializePromise;\n const result = await this._acquireLock(this.lockAcquireTimeout, async () => {\n return this._useSession(async (result) => {\n return result;\n });\n });\n return result;\n }\n /**\n * Acquires a global lock based on the storage key.\n */\n async _acquireLock(acquireTimeout, fn) {\n this._debug('#_acquireLock', 'begin', acquireTimeout);\n try {\n if (this.lockAcquired) {\n const last = this.pendingInLock.length\n ? this.pendingInLock[this.pendingInLock.length - 1]\n : Promise.resolve();\n const result = (async () => {\n await last;\n return await fn();\n })();\n this.pendingInLock.push((async () => {\n try {\n await result;\n }\n catch (_e) {\n // we just care if it finished\n }\n })());\n return result;\n }\n return await this.lock(`lock:${this.storageKey}`, acquireTimeout, async () => {\n this._debug('#_acquireLock', 'lock acquired for storage key', this.storageKey);\n try {\n this.lockAcquired = true;\n const result = fn();\n this.pendingInLock.push((async () => {\n try {\n await result;\n }\n catch (e) {\n // we just care if it finished\n }\n })());\n await result;\n // keep draining the queue until there's nothing to wait on\n while (this.pendingInLock.length) {\n const waitOn = [...this.pendingInLock];\n await Promise.all(waitOn);\n this.pendingInLock.splice(0, waitOn.length);\n }\n return await result;\n }\n finally {\n this._debug('#_acquireLock', 'lock released for storage key', this.storageKey);\n this.lockAcquired = false;\n }\n });\n }\n finally {\n this._debug('#_acquireLock', 'end');\n }\n }\n /**\n * Use instead of {@link #getSession} inside the library. It is\n * semantically usually what you want, as getting a session involves some\n * processing afterwards that requires only one client operating on the\n * session at once across multiple tabs or processes.\n */\n async _useSession(fn) {\n this._debug('#_useSession', 'begin');\n try {\n // the use of __loadSession here is the only correct use of the function!\n const result = await this.__loadSession();\n return await fn(result);\n }\n finally {\n this._debug('#_useSession', 'end');\n }\n }\n /**\n * NEVER USE DIRECTLY!\n *\n * Always use {@link #_useSession}.\n */\n async __loadSession() {\n this._debug('#__loadSession()', 'begin');\n if (!this.lockAcquired) {\n this._debug('#__loadSession()', 'used outside of an acquired lock!', new Error().stack);\n }\n try {\n let currentSession = null;\n const maybeSession = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getItemAsync)(this.storage, this.storageKey);\n this._debug('#getSession()', 'session from storage', maybeSession);\n if (maybeSession !== null) {\n if (this._isValidSession(maybeSession)) {\n currentSession = maybeSession;\n }\n else {\n this._debug('#getSession()', 'session from storage is not valid');\n await this._removeSession();\n }\n }\n if (!currentSession) {\n return { data: { session: null }, error: null };\n }\n // A session is considered expired before the access token _actually_\n // expires. When the autoRefreshToken option is off (or when the tab is\n // in the background), very eager users of getSession() -- like\n // realtime-js -- might send a valid JWT which will expire by the time it\n // reaches the server.\n const hasExpired = currentSession.expires_at\n ? currentSession.expires_at * 1000 - Date.now() < _lib_constants__WEBPACK_IMPORTED_MODULE_1__.EXPIRY_MARGIN_MS\n : false;\n this._debug('#__loadSession()', `session has${hasExpired ? '' : ' not'} expired`, 'expires_at', currentSession.expires_at);\n if (!hasExpired) {\n if (this.userStorage) {\n const maybeUser = (await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getItemAsync)(this.userStorage, this.storageKey + '-user'));\n if (maybeUser === null || maybeUser === void 0 ? void 0 : maybeUser.user) {\n currentSession.user = maybeUser.user;\n }\n else {\n currentSession.user = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.userNotAvailableProxy)();\n }\n }\n // Wrap the user object with a warning proxy on the server\n // This warns when properties of the user are accessed, not when session.user itself is accessed\n if (this.storage.isServer &&\n currentSession.user &&\n !currentSession.user.__isUserNotAvailableProxy) {\n const suppressWarningRef = { value: this.suppressGetSessionWarning };\n currentSession.user = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.insecureUserWarningProxy)(currentSession.user, suppressWarningRef);\n // Update the client-level suppression flag when the proxy suppresses the warning\n if (suppressWarningRef.value) {\n this.suppressGetSessionWarning = true;\n }\n }\n return { data: { session: currentSession }, error: null };\n }\n const { data: session, error } = await this._callRefreshToken(currentSession.refresh_token);\n if (error) {\n return this._returnResult({ data: { session: null }, error });\n }\n return this._returnResult({ data: { session }, error: null });\n }\n finally {\n this._debug('#__loadSession()', 'end');\n }\n }\n /**\n * Gets the current user details if there is an existing session. This method\n * performs a network request to the Supabase Auth server, so the returned\n * value is authentic and can be used to base authorization rules on.\n *\n * @param jwt Takes in an optional access token JWT. If no JWT is provided, the JWT from the current session is used.\n *\n * @category Auth\n *\n * @remarks\n * - This method fetches the user object from the database instead of local session.\n * - This method is useful for checking if the user is authorized because it validates the user's access token JWT on the server.\n * - Should always be used when checking for user authorization on the server. On the client, you can instead use `getSession().session.user` for faster results. `getSession` is insecure on the server.\n *\n * @example Get the logged in user with the current existing session\n * ```js\n * const { data: { user } } = await supabase.auth.getUser()\n * ```\n *\n * @exampleResponse Get the logged in user with the current existing session\n * ```json\n * {\n * \"data\": {\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"example@email.com\",\n * \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"phone\": \"\",\n * \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"is_anonymous\": false\n * }\n * },\n * \"error\": null\n * }\n * ```\n *\n * @example Get the logged in user with a custom access token jwt\n * ```js\n * const { data: { user } } = await supabase.auth.getUser(jwt)\n * ```\n */\n async getUser(jwt) {\n if (jwt) {\n return await this._getUser(jwt);\n }\n await this.initializePromise;\n const result = await this._acquireLock(this.lockAcquireTimeout, async () => {\n return await this._getUser();\n });\n if (result.data.user) {\n this.suppressGetSessionWarning = true;\n }\n return result;\n }\n async _getUser(jwt) {\n try {\n if (jwt) {\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'GET', `${this.url}/user`, {\n headers: this.headers,\n jwt: jwt,\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._userResponse,\n });\n }\n return await this._useSession(async (result) => {\n var _a, _b, _c;\n const { data, error } = result;\n if (error) {\n throw error;\n }\n // returns an error if there is no access_token or custom authorization header\n if (!((_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token) && !this.hasCustomAuthorizationHeader) {\n return { data: { user: null }, error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError() };\n }\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'GET', `${this.url}/user`, {\n headers: this.headers,\n jwt: (_c = (_b = data.session) === null || _b === void 0 ? void 0 : _b.access_token) !== null && _c !== void 0 ? _c : undefined,\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._userResponse,\n });\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthSessionMissingError)(error)) {\n // JWT contains a `session_id` which does not correspond to an active\n // session in the database, indicating the user is signed out.\n await this._removeSession();\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\n }\n return this._returnResult({ data: { user: null }, error });\n }\n throw error;\n }\n }\n /**\n * Updates user data for a logged in user.\n *\n * @category Auth\n *\n * @remarks\n * - In order to use the `updateUser()` method, the user needs to be signed in first.\n * - By default, email updates sends a confirmation link to both the user's current and new email.\n * To only send a confirmation link to the user's new email, disable **Secure email change** in your project's [email auth provider settings](/dashboard/project/_/auth/providers).\n *\n * @exampleDescription Update the email for an authenticated user\n * Sends a \"Confirm Email Change\" email to the new address. If **Secure Email Change** is enabled (default), confirmation is also required from the **old email** before the change is applied. To skip dual confirmation and apply the change after only the new email is verified, disable **Secure Email Change** in the [Email Auth Provider settings](/dashboard/project/_/auth/providers?provider=Email).\n *\n * @example Update the email for an authenticated user\n * ```js\n * const { data, error } = await supabase.auth.updateUser({\n * email: 'new@email.com'\n * })\n * ```\n *\n * @exampleResponse Update the email for an authenticated user\n * ```json\n * {\n * \"data\": {\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"example@email.com\",\n * \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"phone\": \"\",\n * \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"new_email\": \"new@email.com\",\n * \"email_change_sent_at\": \"2024-01-01T00:00:00Z\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"is_anonymous\": false\n * }\n * },\n * \"error\": null\n * }\n * ```\n *\n * @exampleDescription Update the phone number for an authenticated user\n * Sends a one-time password (OTP) to the new phone number.\n *\n * @example Update the phone number for an authenticated user\n * ```js\n * const { data, error } = await supabase.auth.updateUser({\n * phone: '123456789'\n * })\n * ```\n *\n * @example Update the password for an authenticated user\n * ```js\n * const { data, error } = await supabase.auth.updateUser({\n * password: 'new password'\n * })\n * ```\n *\n * @exampleDescription Update the user's metadata\n * Updates the user's custom metadata.\n *\n * **Note**: The `data` field maps to the `auth.users.raw_user_meta_data` column in your Supabase database. When calling `getUser()`, the data will be available as `user.user_metadata`.\n *\n * @example Update the user's metadata\n * ```js\n * const { data, error } = await supabase.auth.updateUser({\n * data: { hello: 'world' }\n * })\n * ```\n *\n * @exampleDescription Update the user's password with a nonce\n * If **Secure password change** is enabled in your [project's email provider settings](/dashboard/project/_/auth/providers), updating the user's password would require a nonce if the user **hasn't recently signed in**. The nonce is sent to the user's email or phone number. A user is deemed recently signed in if the session was created in the last 24 hours.\n *\n * @example Update the user's password with a nonce\n * ```js\n * const { data, error } = await supabase.auth.updateUser({\n * password: 'new password',\n * nonce: '123456'\n * })\n * ```\n */\n async updateUser(attributes, options = {}) {\n await this.initializePromise;\n return await this._acquireLock(this.lockAcquireTimeout, async () => {\n return await this._updateUser(attributes, options);\n });\n }\n async _updateUser(attributes, options = {}) {\n try {\n return await this._useSession(async (result) => {\n const { data: sessionData, error: sessionError } = result;\n if (sessionError) {\n throw sessionError;\n }\n if (!sessionData.session) {\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError();\n }\n const session = sessionData.session;\n let codeChallenge = null;\n let codeChallengeMethod = null;\n if (this.flowType === 'pkce' && attributes.email != null) {\n ;\n [codeChallenge, codeChallengeMethod] = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getCodeChallengeAndMethod)(this.storage, this.storageKey);\n }\n const { data, error: userError } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'PUT', `${this.url}/user`, {\n headers: this.headers,\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\n body: Object.assign(Object.assign({}, attributes), { code_challenge: codeChallenge, code_challenge_method: codeChallengeMethod }),\n jwt: session.access_token,\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._userResponse,\n });\n if (userError) {\n throw userError;\n }\n session.user = data.user;\n await this._saveSession(session);\n await this._notifyAllSubscribers('USER_UPDATED', session);\n return this._returnResult({ data: { user: session.user }, error: null });\n });\n }\n catch (error) {\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { user: null }, error });\n }\n throw error;\n }\n }\n /**\n * Sets the session data from the current session. If the current session is expired, setSession will take care of refreshing it to obtain a new session.\n * If the refresh token or access token in the current session is invalid, an error will be thrown.\n * @param currentSession The current session that minimally contains an access token and refresh token.\n *\n * @category Auth\n *\n * @remarks\n * - This method sets the session using an `access_token` and `refresh_token`.\n * - If successful, a `SIGNED_IN` event is emitted.\n *\n * @exampleDescription Set the session\n * Sets the session data from an access_token and refresh_token, then returns an auth response or error.\n *\n * @example Set the session\n * ```js\n * const { data, error } = await supabase.auth.setSession({\n * access_token,\n * refresh_token\n * })\n * ```\n *\n * @exampleResponse Set the session\n * ```json\n * {\n * \"data\": {\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"example@email.com\",\n * \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"phone\": \"\",\n * \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"is_anonymous\": false\n * },\n * \"session\": {\n * \"access_token\": \"<ACCESS_TOKEN>\",\n * \"refresh_token\": \"<REFRESH_TOKEN>\",\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"example@email.com\",\n * \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"phone\": \"\",\n * \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"last_sign_in_at\": \"11111111-1111-1111-1111-111111111111\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"identities\": [\n * {\n * \"identity_id\": \"2024-01-01T00:00:00Z\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"is_anonymous\": false\n * },\n * \"token_type\": \"bearer\",\n * \"expires_in\": 3500,\n * \"expires_at\": 1700000000\n * }\n * },\n * \"error\": null\n * }\n * ```\n */\n async setSession(currentSession) {\n await this.initializePromise;\n return await this._acquireLock(this.lockAcquireTimeout, async () => {\n return await this._setSession(currentSession);\n });\n }\n async _setSession(currentSession) {\n try {\n if (!currentSession.access_token || !currentSession.refresh_token) {\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError();\n }\n const timeNow = Date.now() / 1000;\n let expiresAt = timeNow;\n let hasExpired = true;\n let session = null;\n const { payload } = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.decodeJWT)(currentSession.access_token);\n if (payload.exp) {\n expiresAt = payload.exp;\n hasExpired = expiresAt <= timeNow;\n }\n if (hasExpired) {\n const { data: refreshedSession, error } = await this._callRefreshToken(currentSession.refresh_token);\n if (error) {\n return this._returnResult({ data: { user: null, session: null }, error: error });\n }\n if (!refreshedSession) {\n return { data: { user: null, session: null }, error: null };\n }\n session = refreshedSession;\n }\n else {\n const { data, error } = await this._getUser(currentSession.access_token);\n if (error) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n session = {\n access_token: currentSession.access_token,\n refresh_token: currentSession.refresh_token,\n user: data.user,\n token_type: 'bearer',\n expires_in: expiresAt - timeNow,\n expires_at: expiresAt,\n };\n await this._saveSession(session);\n await this._notifyAllSubscribers('SIGNED_IN', session);\n }\n return this._returnResult({ data: { user: session.user, session }, error: null });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { session: null, user: null }, error });\n }\n throw error;\n }\n }\n /**\n * Returns a new session, regardless of expiry status.\n * Takes in an optional current session. If not passed in, then refreshSession() will attempt to retrieve it from getSession().\n * If the current session's refresh token is invalid, an error will be thrown.\n * @param currentSession The current session. If passed in, it must contain a refresh token.\n *\n * @category Auth\n *\n * @remarks\n * - This method will refresh and return a new session whether the current one is expired or not.\n *\n * @example Refresh session using the current session\n * ```js\n * const { data, error } = await supabase.auth.refreshSession()\n * const { session, user } = data\n * ```\n *\n * @exampleResponse Refresh session using the current session\n * ```json\n * {\n * \"data\": {\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"example@email.com\",\n * \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"phone\": \"\",\n * \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"is_anonymous\": false\n * },\n * \"session\": {\n * \"access_token\": \"<ACCESS_TOKEN>\",\n * \"token_type\": \"bearer\",\n * \"expires_in\": 3600,\n * \"expires_at\": 1700000000,\n * \"refresh_token\": \"<REFRESH_TOKEN>\",\n * \"user\": {\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"aud\": \"authenticated\",\n * \"role\": \"authenticated\",\n * \"email\": \"example@email.com\",\n * \"email_confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"phone\": \"\",\n * \"confirmed_at\": \"2024-01-01T00:00:00Z\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"app_metadata\": {\n * \"provider\": \"email\",\n * \"providers\": [\n * \"email\"\n * ]\n * },\n * \"user_metadata\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ],\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"is_anonymous\": false\n * }\n * }\n * },\n * \"error\": null\n * }\n * ```\n *\n * @example Refresh session using a refresh token\n * ```js\n * const { data, error } = await supabase.auth.refreshSession({ refresh_token })\n * const { session, user } = data\n * ```\n */\n async refreshSession(currentSession) {\n await this.initializePromise;\n return await this._acquireLock(this.lockAcquireTimeout, async () => {\n return await this._refreshSession(currentSession);\n });\n }\n async _refreshSession(currentSession) {\n try {\n return await this._useSession(async (result) => {\n var _a;\n if (!currentSession) {\n const { data, error } = result;\n if (error) {\n throw error;\n }\n currentSession = (_a = data.session) !== null && _a !== void 0 ? _a : undefined;\n }\n if (!(currentSession === null || currentSession === void 0 ? void 0 : currentSession.refresh_token)) {\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError();\n }\n const { data: session, error } = await this._callRefreshToken(currentSession.refresh_token);\n if (error) {\n return this._returnResult({ data: { user: null, session: null }, error: error });\n }\n if (!session) {\n return this._returnResult({ data: { user: null, session: null }, error: null });\n }\n return this._returnResult({ data: { user: session.user, session }, error: null });\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n throw error;\n }\n }\n /**\n * Gets the session data from a URL string\n */\n async _getSessionFromURL(params, callbackUrlType) {\n var _a;\n try {\n if (!(0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)())\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthImplicitGrantRedirectError('No browser detected.');\n // If there's an error in the URL, it doesn't matter what flow it is, we just return the error.\n if (params.error || params.error_description || params.error_code) {\n // The error class returned implies that the redirect is from an implicit grant flow\n // but it could also be from a redirect error from a PKCE flow.\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthImplicitGrantRedirectError(params.error_description || 'Error in URL with unspecified error_description', {\n error: params.error || 'unspecified_error',\n code: params.error_code || 'unspecified_code',\n });\n }\n // Checks for mismatches between the flowType initialised in the client and the URL parameters\n switch (callbackUrlType) {\n case 'implicit':\n if (this.flowType === 'pkce') {\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthPKCEGrantCodeExchangeError('Not a valid PKCE flow url.');\n }\n break;\n case 'pkce':\n if (this.flowType === 'implicit') {\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthImplicitGrantRedirectError('Not a valid implicit grant flow url.');\n }\n break;\n default:\n // there's no mismatch so we continue\n }\n // Since this is a redirect for PKCE, we attempt to retrieve the code from the URL for the code exchange\n if (callbackUrlType === 'pkce') {\n this._debug('#_initialize()', 'begin', 'is PKCE flow', true);\n if (!params.code)\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthPKCEGrantCodeExchangeError('No code detected.');\n const { data, error } = await this._exchangeCodeForSession(params.code);\n if (error)\n throw error;\n const url = new URL(window.location.href);\n url.searchParams.delete('code');\n window.history.replaceState(window.history.state, '', url.toString());\n return {\n data: { session: data.session, redirectType: (_a = data.redirectType) !== null && _a !== void 0 ? _a : null },\n error: null,\n };\n }\n const { provider_token, provider_refresh_token, access_token, refresh_token, expires_in, expires_at, token_type, } = params;\n if (!access_token || !expires_in || !refresh_token || !token_type) {\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthImplicitGrantRedirectError('No session defined in URL');\n }\n const timeNow = Math.round(Date.now() / 1000);\n const expiresIn = parseInt(expires_in);\n let expiresAt = timeNow + expiresIn;\n if (expires_at) {\n expiresAt = parseInt(expires_at);\n }\n const actuallyExpiresIn = expiresAt - timeNow;\n if (actuallyExpiresIn * 1000 <= _lib_constants__WEBPACK_IMPORTED_MODULE_1__.AUTO_REFRESH_TICK_DURATION_MS) {\n console.warn(`@supabase/gotrue-js: Session as retrieved from URL expires in ${actuallyExpiresIn}s, should have been closer to ${expiresIn}s`);\n }\n const issuedAt = expiresAt - expiresIn;\n if (timeNow - issuedAt >= 120) {\n console.warn('@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale', issuedAt, expiresAt, timeNow);\n }\n else if (timeNow - issuedAt < 0) {\n console.warn('@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew', issuedAt, expiresAt, timeNow);\n }\n const { data, error } = await this._getUser(access_token);\n if (error)\n throw error;\n const session = {\n provider_token,\n provider_refresh_token,\n access_token,\n expires_in: expiresIn,\n expires_at: expiresAt,\n refresh_token,\n token_type: token_type,\n user: data.user,\n };\n // Remove tokens from URL\n window.location.hash = '';\n this._debug('#_getSessionFromURL()', 'clearing window.location.hash');\n return this._returnResult({ data: { session, redirectType: params.type }, error: null });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { session: null, redirectType: null }, error });\n }\n throw error;\n }\n }\n /**\n * Checks if the current URL contains parameters given by an implicit oauth grant flow (https://www.rfc-editor.org/rfc/rfc6749.html#section-4.2)\n *\n * If `detectSessionInUrl` is a function, it will be called with the URL and params to determine\n * if the URL should be processed as a Supabase auth callback. This allows users to exclude\n * URLs from other OAuth providers (e.g., Facebook Login) that also return access_token in the fragment.\n */\n _isImplicitGrantCallback(params) {\n if (typeof this.detectSessionInUrl === 'function') {\n return this.detectSessionInUrl(new URL(window.location.href), params);\n }\n return Boolean(params.access_token || params.error_description);\n }\n /**\n * Checks if the current URL and backing storage contain parameters given by a PKCE flow\n */\n async _isPKCECallback(params) {\n const currentStorageContent = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\n return !!(params.code && currentStorageContent);\n }\n /**\n * Inside a browser context, `signOut()` will remove the logged in user from the browser session and log them out - removing all items from localstorage and then trigger a `\"SIGNED_OUT\"` event.\n *\n * For server-side management, you can revoke all refresh tokens for a user by passing a user's JWT through to `auth.api.signOut(JWT: string)`.\n * There is no way to revoke a user's access token jwt until it expires. It is recommended to set a shorter expiry on the jwt for this reason.\n *\n * If using `others` scope, no `SIGNED_OUT` event is fired!\n *\n * **Warning:** the default `scope` is `'global'`. This signs the user out of\n * **every device they are currently signed in on**, not just the current\n * tab/session. If you only want to sign the user out of the current session\n * (the behavior most other auth libraries default to), pass\n * `{ scope: 'local' }` explicitly.\n *\n * @category Auth\n *\n * @remarks\n * - In order to use the `signOut()` method, the user needs to be signed in first.\n * - By default, `signOut()` uses the **global** scope, which signs out the user\n * on every device they are signed in on (not just the current one). Pass\n * `{ scope: 'local' }` to only sign out the current session. This is\n * usually what apps want on a \"Sign out\" button, especially when users\n * sign in from multiple devices and do not expect signing out of one to\n * terminate the others.\n * - Since Supabase Auth uses JWTs for authentication, the access token JWT will be valid until it's expired. When the user signs out, Supabase revokes the refresh token and deletes the JWT from the client-side. This does not revoke the JWT and it will still be valid until it expires.\n *\n * @example Sign out of every device (global – default)\n * ```js\n * const { error } = await supabase.auth.signOut()\n * ```\n *\n * @example Sign out only the current session (recommended for most apps)\n * ```js\n * const { error } = await supabase.auth.signOut({ scope: 'local' })\n * ```\n *\n * @example Sign out of all other sessions, keep the current one\n * ```js\n * const { error } = await supabase.auth.signOut({ scope: 'others' })\n * ```\n */\n async signOut(options = { scope: 'global' }) {\n await this.initializePromise;\n return await this._acquireLock(this.lockAcquireTimeout, async () => {\n return await this._signOut(options);\n });\n }\n async _signOut({ scope } = { scope: 'global' }) {\n return await this._useSession(async (result) => {\n var _a;\n const { data, error: sessionError } = result;\n if (sessionError && !(0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthSessionMissingError)(sessionError)) {\n return this._returnResult({ error: sessionError });\n }\n const accessToken = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token;\n if (accessToken) {\n const { error } = await this.admin.signOut(accessToken, scope);\n if (error) {\n // ignore 404s since user might not exist anymore\n // ignore 401s since an invalid or expired JWT should sign out the current session\n if (!(((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthApiError)(error) &&\n (error.status === 404 || error.status === 401 || error.status === 403)) ||\n (0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthSessionMissingError)(error))) {\n return this._returnResult({ error });\n }\n }\n }\n if (scope !== 'others') {\n await this._removeSession();\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\n }\n return this._returnResult({ error: null });\n });\n }\n /** *\n * @category Auth\n *\n * @remarks\n * - Subscribes to important events occurring on the user's session.\n * - Use on the frontend/client. It is less useful on the server.\n * - Events are emitted across tabs to keep your application's UI up-to-date. Some events can fire very frequently, based on the number of tabs open. Use a quick and efficient callback function, and defer or debounce as many operations as you can to be performed outside of the callback.\n * - **Important:** A callback can be an `async` function and it runs synchronously during the processing of the changes causing the event. You can easily create a dead-lock by using `await` on a call to another method of the Supabase library.\n * - Avoid using `async` functions as callbacks.\n * - Limit the number of `await` calls in `async` callbacks.\n * - Do not use other Supabase functions in the callback function. If you must, dispatch the functions once the callback has finished executing. Use this as a quick way to achieve this:\n * ```js\n * supabase.auth.onAuthStateChange((event, session) => {\n * setTimeout(async () => {\n * // await on other Supabase function here\n * // this runs right after the callback has finished\n * }, 0)\n * })\n * ```\n * - Emitted events:\n * - `INITIAL_SESSION`\n * - Emitted right after the Supabase client is constructed and the initial session from storage is loaded.\n * - `SIGNED_IN`\n * - Emitted each time a user session is confirmed or re-established, including on user sign in and when refocusing a tab.\n * - Avoid making assumptions as to when this event is fired, this may occur even when the user is already signed in. Instead, check the user object attached to the event to see if a new user has signed in and update your application's UI.\n * - This event can fire very frequently depending on the number of tabs open in your application.\n * - `SIGNED_OUT`\n * - Emitted when the user signs out. This can be after:\n * - A call to `supabase.auth.signOut()`.\n * - After the user's session has expired for any reason:\n * - User has signed out on another device.\n * - The session has reached its timebox limit or inactivity timeout.\n * - User has signed in on another device with single session per user enabled.\n * - Check the [User Sessions](/docs/guides/auth/sessions) docs for more information.\n * - Use this to clean up any local storage your application has associated with the user.\n * - `TOKEN_REFRESHED`\n * - Emitted each time a new access and refresh token are fetched for the signed in user.\n * - It's best practice and highly recommended to extract the access token (JWT) and store it in memory for further use in your application.\n * - Avoid frequent calls to `supabase.auth.getSession()` for the same purpose.\n * - There is a background process that keeps track of when the session should be refreshed so you will always receive valid tokens by listening to this event.\n * - The frequency of this event is related to the JWT expiry limit configured on your project.\n * - `USER_UPDATED`\n * - Emitted each time the `supabase.auth.updateUser()` method finishes successfully. Listen to it to update your application's UI based on new profile information.\n * - `PASSWORD_RECOVERY`\n * - Emitted instead of the `SIGNED_IN` event when the user lands on a page that includes a password recovery link in the URL.\n * - Use it to show a UI to the user where they can [reset their password](/docs/guides/auth/passwords#resetting-a-users-password-forgot-password).\n *\n * @example Listen to auth changes\n * ```js\n * const { data } = supabase.auth.onAuthStateChange((event, session) => {\n * console.log(event, session)\n *\n * if (event === 'INITIAL_SESSION') {\n * // handle initial session\n * } else if (event === 'SIGNED_IN') {\n * // handle sign in event\n * } else if (event === 'SIGNED_OUT') {\n * // handle sign out event\n * } else if (event === 'PASSWORD_RECOVERY') {\n * // handle password recovery event\n * } else if (event === 'TOKEN_REFRESHED') {\n * // handle token refreshed event\n * } else if (event === 'USER_UPDATED') {\n * // handle user updated event\n * }\n * })\n *\n * // call unsubscribe to remove the callback\n * data.subscription.unsubscribe()\n * ```\n *\n * @exampleDescription Listen to sign out\n * Make sure you clear out any local data, such as local and session storage, after the client library has detected the user's sign out.\n *\n * @example Listen to sign out\n * ```js\n * supabase.auth.onAuthStateChange((event, session) => {\n * if (event === 'SIGNED_OUT') {\n * console.log('SIGNED_OUT', session)\n *\n * // clear local and session storage\n * [\n * window.localStorage,\n * window.sessionStorage,\n * ].forEach((storage) => {\n * Object.entries(storage)\n * .forEach(([key]) => {\n * storage.removeItem(key)\n * })\n * })\n * }\n * })\n * ```\n *\n * @exampleDescription Store OAuth provider tokens on sign in\n * When using [OAuth (Social Login)](/docs/guides/auth/social-login) you sometimes wish to get access to the provider's access token and refresh token, in order to call provider APIs in the name of the user.\n *\n * For example, if you are using [Sign in with Google](/docs/guides/auth/social-login/auth-google) you may want to use the provider token to call Google APIs on behalf of the user. Supabase Auth does not keep track of the provider access and refresh token, but does return them for you once, immediately after sign in. You can use the `onAuthStateChange` method to listen for the presence of the provider tokens and store them in local storage. You can further send them to your server's APIs for use on the backend.\n *\n * Finally, make sure you remove them from local storage on the `SIGNED_OUT` event. If the OAuth provider supports token revocation, make sure you call those APIs either from the frontend or schedule them to be called on the backend.\n *\n * @example Store OAuth provider tokens on sign in\n * ```js\n * // Register this immediately after calling createClient!\n * // Because signInWithOAuth causes a redirect, you need to fetch the\n * // provider tokens from the callback.\n * supabase.auth.onAuthStateChange((event, session) => {\n * if (session && session.provider_token) {\n * window.localStorage.setItem('oauth_provider_token', session.provider_token)\n * }\n *\n * if (session && session.provider_refresh_token) {\n * window.localStorage.setItem('oauth_provider_refresh_token', session.provider_refresh_token)\n * }\n *\n * if (event === 'SIGNED_OUT') {\n * window.localStorage.removeItem('oauth_provider_token')\n * window.localStorage.removeItem('oauth_provider_refresh_token')\n * }\n * })\n * ```\n *\n * @exampleDescription Use React Context for the User's session\n * Instead of relying on `supabase.auth.getSession()` within your React components, you can use a [React Context](https://react.dev/reference/react/createContext) to store the latest session information from the `onAuthStateChange` callback and access it that way.\n *\n * @example Use React Context for the User's session\n * ```js\n * const SessionContext = React.createContext(null)\n *\n * function main() {\n * const [session, setSession] = React.useState(null)\n *\n * React.useEffect(() => {\n * const {data: { subscription }} = supabase.auth.onAuthStateChange(\n * (event, session) => {\n * if (event === 'SIGNED_OUT') {\n * setSession(null)\n * } else if (session) {\n * setSession(session)\n * }\n * })\n *\n * return () => {\n * subscription.unsubscribe()\n * }\n * }, [])\n *\n * return (\n * <SessionContext.Provider value={session}>\n * <App />\n * </SessionContext.Provider>\n * )\n * }\n * ```\n *\n * @example Listen to password recovery events\n * ```js\n * supabase.auth.onAuthStateChange((event, session) => {\n * if (event === 'PASSWORD_RECOVERY') {\n * console.log('PASSWORD_RECOVERY', session)\n * // show screen to update user's password\n * showPasswordResetScreen(true)\n * }\n * })\n * ```\n *\n * @example Listen to sign in\n * ```js\n * supabase.auth.onAuthStateChange((event, session) => {\n * if (event === 'SIGNED_IN') console.log('SIGNED_IN', session)\n * })\n * ```\n *\n * @example Listen to token refresh\n * ```js\n * supabase.auth.onAuthStateChange((event, session) => {\n * if (event === 'TOKEN_REFRESHED') console.log('TOKEN_REFRESHED', session)\n * })\n * ```\n *\n * @example Listen to user updates\n * ```js\n * supabase.auth.onAuthStateChange((event, session) => {\n * if (event === 'USER_UPDATED') console.log('USER_UPDATED', session)\n * })\n * ```\n */\n onAuthStateChange(callback) {\n const id = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.generateCallbackId)();\n const subscription = {\n id,\n callback,\n unsubscribe: () => {\n this._debug('#unsubscribe()', 'state change callback with id removed', id);\n this.stateChangeEmitters.delete(id);\n },\n };\n this._debug('#onAuthStateChange()', 'registered callback with id', id);\n this.stateChangeEmitters.set(id, subscription);\n (async () => {\n await this.initializePromise;\n await this._acquireLock(this.lockAcquireTimeout, async () => {\n this._emitInitialSession(id);\n });\n })();\n return { data: { subscription } };\n }\n async _emitInitialSession(id) {\n return await this._useSession(async (result) => {\n var _a, _b;\n try {\n const { data: { session }, error, } = result;\n if (error)\n throw error;\n await ((_a = this.stateChangeEmitters.get(id)) === null || _a === void 0 ? void 0 : _a.callback('INITIAL_SESSION', session));\n this._debug('INITIAL_SESSION', 'callback id', id, 'session', session);\n }\n catch (err) {\n await ((_b = this.stateChangeEmitters.get(id)) === null || _b === void 0 ? void 0 : _b.callback('INITIAL_SESSION', null));\n this._debug('INITIAL_SESSION', 'callback id', id, 'error', err);\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthSessionMissingError)(err)) {\n console.warn(err);\n }\n else {\n console.error(err);\n }\n }\n });\n }\n /**\n * Sends a password reset request to an email address. This method supports the PKCE flow.\n *\n * @param email The email address of the user.\n * @param options.redirectTo The URL to send the user to after they click the password reset link.\n * @param options.captchaToken Verification token received when the user completes the captcha on the site.\n *\n * @category Auth\n *\n * @remarks\n * - The password reset flow consist of 2 broad steps: (i) Allow the user to login via the password reset link; (ii) Update the user's password.\n * - The `resetPasswordForEmail()` only sends a password reset link to the user's email.\n * To update the user's password, see [`updateUser()`](/docs/reference/javascript/auth-updateuser).\n * - A `PASSWORD_RECOVERY` event will be emitted when the password recovery link is clicked.\n * You can use [`onAuthStateChange()`](/docs/reference/javascript/auth-onauthstatechange) to listen and invoke a callback function on these events.\n * - When the user clicks the reset link in the email they are redirected back to your application.\n * You can configure the URL that the user is redirected to with the `redirectTo` parameter.\n * See [redirect URLs and wildcards](/docs/guides/auth/redirect-urls#use-wildcards-in-redirect-urls) to add additional redirect URLs to your project.\n * - After the user has been redirected successfully, prompt them for a new password and call `updateUser()`:\n * ```js\n * const { data, error } = await supabase.auth.updateUser({\n * password: new_password\n * })\n * ```\n *\n * @example Reset password\n * ```js\n * const { data, error } = await supabase.auth.resetPasswordForEmail(email, {\n * redirectTo: 'https://example.com/update-password',\n * })\n * ```\n *\n * @exampleResponse Reset password\n * ```json\n * {\n * data: {}\n * error: null\n * }\n * ```\n *\n * @example Reset password (React)\n * ```js\n * /**\n * * Step 1: Send the user an email to get a password reset token.\n * * This email contains a link which sends the user back to your application.\n * *\\/\n * const { data, error } = await supabase.auth\n * .resetPasswordForEmail('user@email.com')\n *\n * /**\n * * Step 2: Once the user is redirected back to your application,\n * * ask the user to reset their password.\n * *\\/\n * useEffect(() => {\n * supabase.auth.onAuthStateChange(async (event, session) => {\n * if (event == \"PASSWORD_RECOVERY\") {\n * const newPassword = prompt(\"What would you like your new password to be?\");\n * const { data, error } = await supabase.auth\n * .updateUser({ password: newPassword })\n *\n * if (data) alert(\"Password updated successfully!\")\n * if (error) alert(\"There was an error updating your password.\")\n * }\n * })\n * }, [])\n * ```\n */\n async resetPasswordForEmail(email, options = {}) {\n let codeChallenge = null;\n let codeChallengeMethod = null;\n if (this.flowType === 'pkce') {\n ;\n [codeChallenge, codeChallengeMethod] = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getCodeChallengeAndMethod)(this.storage, this.storageKey, true // isPasswordRecovery\n );\n }\n try {\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/recover`, {\n body: {\n email,\n code_challenge: codeChallenge,\n code_challenge_method: codeChallengeMethod,\n gotrue_meta_security: { captcha_token: options.captchaToken },\n },\n headers: this.headers,\n redirectTo: options.redirectTo,\n });\n }\n catch (error) {\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /**\n * Gets all the identities linked to a user.\n *\n * @category Auth\n *\n * @remarks\n * - The user needs to be signed in to call `getUserIdentities()`.\n *\n * @example Returns a list of identities linked to the user\n * ```js\n * const { data, error } = await supabase.auth.getUserIdentities()\n * ```\n *\n * @exampleResponse Returns a list of identities linked to the user\n * ```json\n * {\n * \"data\": {\n * \"identities\": [\n * {\n * \"identity_id\": \"22222222-2222-2222-2222-222222222222\",\n * \"id\": \"2024-01-01T00:00:00Z\",\n * \"user_id\": \"2024-01-01T00:00:00Z\",\n * \"identity_data\": {\n * \"email\": \"example@email.com\",\n * \"email_verified\": false,\n * \"phone_verified\": false,\n * \"sub\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"provider\": \"email\",\n * \"last_sign_in_at\": \"2024-01-01T00:00:00Z\",\n * \"created_at\": \"2024-01-01T00:00:00Z\",\n * \"updated_at\": \"2024-01-01T00:00:00Z\",\n * \"email\": \"example@email.com\"\n * }\n * ]\n * },\n * \"error\": null\n * }\n * ```\n */\n async getUserIdentities() {\n var _a;\n try {\n const { data, error } = await this.getUser();\n if (error)\n throw error;\n return this._returnResult({ data: { identities: (_a = data.user.identities) !== null && _a !== void 0 ? _a : [] }, error: null });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /** *\n * @category Auth\n *\n * @remarks\n * - The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).\n * - The user needs to be signed in to call `linkIdentity()`.\n * - If the candidate identity is already linked to the existing user or another user, `linkIdentity()` will fail.\n * - If `linkIdentity` is run in the browser, the user is automatically redirected to the returned URL. On the server, you should handle the redirect.\n *\n * @example Link an identity to a user\n * ```js\n * const { data, error } = await supabase.auth.linkIdentity({\n * provider: 'github'\n * })\n * ```\n *\n * @exampleResponse Link an identity to a user\n * ```json\n * {\n * data: {\n * provider: 'github',\n * url: <PROVIDER_URL_TO_REDIRECT_TO>\n * },\n * error: null\n * }\n * ```\n */\n async linkIdentity(credentials) {\n if ('token' in credentials) {\n return this.linkIdentityIdToken(credentials);\n }\n return this.linkIdentityOAuth(credentials);\n }\n async linkIdentityOAuth(credentials) {\n var _a;\n try {\n const { data, error } = await this._useSession(async (result) => {\n var _a, _b, _c, _d, _f;\n const { data, error } = result;\n if (error)\n throw error;\n const url = await this._getUrlForProvider(`${this.url}/user/identities/authorize`, credentials.provider, {\n redirectTo: (_a = credentials.options) === null || _a === void 0 ? void 0 : _a.redirectTo,\n scopes: (_b = credentials.options) === null || _b === void 0 ? void 0 : _b.scopes,\n queryParams: (_c = credentials.options) === null || _c === void 0 ? void 0 : _c.queryParams,\n skipBrowserRedirect: true,\n });\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'GET', url, {\n headers: this.headers,\n jwt: (_f = (_d = data.session) === null || _d === void 0 ? void 0 : _d.access_token) !== null && _f !== void 0 ? _f : undefined,\n });\n });\n if (error)\n throw error;\n if ((0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() && !((_a = credentials.options) === null || _a === void 0 ? void 0 : _a.skipBrowserRedirect)) {\n window.location.assign(data === null || data === void 0 ? void 0 : data.url);\n }\n return this._returnResult({\n data: { provider: credentials.provider, url: data === null || data === void 0 ? void 0 : data.url },\n error: null,\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { provider: credentials.provider, url: null }, error });\n }\n throw error;\n }\n }\n async linkIdentityIdToken(credentials) {\n return await this._useSession(async (result) => {\n var _a;\n try {\n const { error: sessionError, data: { session }, } = result;\n if (sessionError)\n throw sessionError;\n const { options, provider, token, access_token, nonce } = credentials;\n const res = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/token?grant_type=id_token`, {\n headers: this.headers,\n jwt: (_a = session === null || session === void 0 ? void 0 : session.access_token) !== null && _a !== void 0 ? _a : undefined,\n body: {\n provider,\n id_token: token,\n access_token,\n nonce,\n link_identity: true,\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n },\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\n });\n const { data, error } = res;\n if (error) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n else if (!data || !data.session || !data.user) {\n return this._returnResult({\n data: { user: null, session: null },\n error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidTokenResponseError(),\n });\n }\n if (data.session) {\n await this._saveSession(data.session);\n await this._notifyAllSubscribers('USER_UPDATED', data.session);\n }\n return this._returnResult({ data, error });\n }\n catch (error) {\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { user: null, session: null }, error });\n }\n throw error;\n }\n });\n }\n /**\n * Unlinks an identity from a user by deleting it. The user will no longer be able to sign in with that identity once it's unlinked.\n *\n * @category Auth\n *\n * @remarks\n * - The **Enable Manual Linking** option must be enabled from your [project's authentication settings](/dashboard/project/_/auth/providers).\n * - The user needs to be signed in to call `unlinkIdentity()`.\n * - The user must have at least 2 identities in order to unlink an identity.\n * - The identity to be unlinked must belong to the user.\n *\n * @example Unlink an identity\n * ```js\n * // retrieve all identities linked to a user\n * const identities = await supabase.auth.getUserIdentities()\n *\n * // find the google identity\n * const googleIdentity = identities.find(\n * identity => identity.provider === 'google'\n * )\n *\n * // unlink the google identity\n * const { error } = await supabase.auth.unlinkIdentity(googleIdentity)\n * ```\n */\n async unlinkIdentity(identity) {\n try {\n return await this._useSession(async (result) => {\n var _a, _b;\n const { data, error } = result;\n if (error) {\n throw error;\n }\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'DELETE', `${this.url}/user/identities/${identity.identity_id}`, {\n headers: this.headers,\n jwt: (_b = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token) !== null && _b !== void 0 ? _b : undefined,\n });\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /**\n * Generates a new JWT.\n * @param refreshToken A valid refresh token that was returned on login.\n */\n async _refreshAccessToken(refreshToken) {\n const debugName = `#_refreshAccessToken(${refreshToken.substring(0, 5)}...)`;\n this._debug(debugName, 'begin');\n try {\n const startedAt = Date.now();\n // will attempt to refresh the token with exponential backoff\n return await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.retryable)(async (attempt) => {\n if (attempt > 0) {\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.sleep)(200 * Math.pow(2, attempt - 1)); // 200, 400, 800, ...\n }\n this._debug(debugName, 'refreshing attempt', attempt);\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/token?grant_type=refresh_token`, {\n body: { refresh_token: refreshToken },\n headers: this.headers,\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\n });\n }, (attempt, error) => {\n const nextBackOffInterval = 200 * Math.pow(2, attempt);\n return (error &&\n (0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthRetryableFetchError)(error) &&\n // retryable only if the request can be sent before the backoff overflows the tick duration\n Date.now() + nextBackOffInterval - startedAt < _lib_constants__WEBPACK_IMPORTED_MODULE_1__.AUTO_REFRESH_TICK_DURATION_MS);\n });\n }\n catch (error) {\n this._debug(debugName, 'error', error);\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: { session: null, user: null }, error });\n }\n throw error;\n }\n finally {\n this._debug(debugName, 'end');\n }\n }\n _isValidSession(maybeSession) {\n const isValidSession = typeof maybeSession === 'object' &&\n maybeSession !== null &&\n 'access_token' in maybeSession &&\n 'refresh_token' in maybeSession &&\n 'expires_at' in maybeSession;\n return isValidSession;\n }\n async _handleProviderSignIn(provider, options) {\n const url = await this._getUrlForProvider(`${this.url}/authorize`, provider, {\n redirectTo: options.redirectTo,\n scopes: options.scopes,\n queryParams: options.queryParams,\n });\n this._debug('#_handleProviderSignIn()', 'provider', provider, 'options', options, 'url', url);\n // try to open on the browser\n if ((0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() && !options.skipBrowserRedirect) {\n window.location.assign(url);\n }\n return { data: { provider, url }, error: null };\n }\n /**\n * Recovers the session from LocalStorage and refreshes the token\n * Note: this method is async to accommodate for AsyncStorage e.g. in React native.\n */\n async _recoverAndRefresh() {\n var _a, _b;\n const debugName = '#_recoverAndRefresh()';\n this._debug(debugName, 'begin');\n try {\n const currentSession = (await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getItemAsync)(this.storage, this.storageKey));\n if (currentSession && this.userStorage) {\n let maybeUser = (await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getItemAsync)(this.userStorage, this.storageKey + '-user'));\n if (!this.storage.isServer && Object.is(this.storage, this.userStorage) && !maybeUser) {\n // storage and userStorage are the same storage medium, for example\n // window.localStorage if userStorage does not have the user from\n // storage stored, store it first thereby migrating the user object\n // from storage -> userStorage\n maybeUser = { user: currentSession.user };\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.setItemAsync)(this.userStorage, this.storageKey + '-user', maybeUser);\n }\n currentSession.user = (_a = maybeUser === null || maybeUser === void 0 ? void 0 : maybeUser.user) !== null && _a !== void 0 ? _a : (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.userNotAvailableProxy)();\n }\n else if (currentSession && !currentSession.user) {\n // user storage is not set, let's check if it was previously enabled so\n // we bring back the storage as it should be\n if (!currentSession.user) {\n // test if userStorage was previously enabled and the storage medium was the same, to move the user back under the same key\n const separateUser = (await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getItemAsync)(this.storage, this.storageKey + '-user'));\n if (separateUser && (separateUser === null || separateUser === void 0 ? void 0 : separateUser.user)) {\n currentSession.user = separateUser.user;\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, this.storageKey + '-user');\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.setItemAsync)(this.storage, this.storageKey, currentSession);\n }\n else {\n currentSession.user = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.userNotAvailableProxy)();\n }\n }\n }\n this._debug(debugName, 'session from storage', currentSession);\n if (!this._isValidSession(currentSession)) {\n this._debug(debugName, 'session is not valid');\n if (currentSession !== null) {\n await this._removeSession();\n }\n return;\n }\n const expiresWithMargin = ((_b = currentSession.expires_at) !== null && _b !== void 0 ? _b : Infinity) * 1000 - Date.now() < _lib_constants__WEBPACK_IMPORTED_MODULE_1__.EXPIRY_MARGIN_MS;\n this._debug(debugName, `session has${expiresWithMargin ? '' : ' not'} expired with margin of ${_lib_constants__WEBPACK_IMPORTED_MODULE_1__.EXPIRY_MARGIN_MS}s`);\n if (expiresWithMargin) {\n if (this.autoRefreshToken && currentSession.refresh_token) {\n const { error } = await this._callRefreshToken(currentSession.refresh_token);\n if (error) {\n console.error(error);\n if (!(0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthRetryableFetchError)(error)) {\n this._debug(debugName, 'refresh failed with a non-retryable error, removing the session', error);\n await this._removeSession();\n }\n }\n }\n }\n else if (currentSession.user &&\n currentSession.user.__isUserNotAvailableProxy === true) {\n // If we have a proxy user, try to get the real user data\n try {\n const { data, error: userError } = await this._getUser(currentSession.access_token);\n if (!userError && (data === null || data === void 0 ? void 0 : data.user)) {\n currentSession.user = data.user;\n await this._saveSession(currentSession);\n await this._notifyAllSubscribers('SIGNED_IN', currentSession);\n }\n else {\n this._debug(debugName, 'could not get user data, skipping SIGNED_IN notification');\n }\n }\n catch (getUserError) {\n console.error('Error getting user data:', getUserError);\n this._debug(debugName, 'error getting user data, skipping SIGNED_IN notification', getUserError);\n }\n }\n else {\n // no need to persist currentSession again, as we just loaded it from\n // local storage; persisting it again may overwrite a value saved by\n // another client with access to the same local storage\n await this._notifyAllSubscribers('SIGNED_IN', currentSession);\n }\n }\n catch (err) {\n this._debug(debugName, 'error', err);\n console.error(err);\n return;\n }\n finally {\n this._debug(debugName, 'end');\n }\n }\n async _callRefreshToken(refreshToken) {\n var _a, _b;\n if (!refreshToken) {\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError();\n }\n // refreshing is already in progress\n if (this.refreshingDeferred) {\n return this.refreshingDeferred.promise;\n }\n const debugName = `#_callRefreshToken(${refreshToken.substring(0, 5)}...)`;\n this._debug(debugName, 'begin');\n try {\n this.refreshingDeferred = new _lib_helpers__WEBPACK_IMPORTED_MODULE_4__.Deferred();\n const { data, error } = await this._refreshAccessToken(refreshToken);\n if (error)\n throw error;\n if (!data.session)\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError();\n await this._saveSession(data.session);\n await this._notifyAllSubscribers('TOKEN_REFRESHED', data.session);\n const result = { data: data.session, error: null };\n this.refreshingDeferred.resolve(result);\n return result;\n }\n catch (error) {\n this._debug(debugName, 'error', error);\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n const result = { data: null, error };\n if (!(0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthRetryableFetchError)(error)) {\n await this._removeSession();\n }\n (_a = this.refreshingDeferred) === null || _a === void 0 ? void 0 : _a.resolve(result);\n return result;\n }\n (_b = this.refreshingDeferred) === null || _b === void 0 ? void 0 : _b.reject(error);\n throw error;\n }\n finally {\n this.refreshingDeferred = null;\n this._debug(debugName, 'end');\n }\n }\n async _notifyAllSubscribers(event, session, broadcast = true) {\n const debugName = `#_notifyAllSubscribers(${event})`;\n this._debug(debugName, 'begin', session, `broadcast = ${broadcast}`);\n try {\n if (this.broadcastChannel && broadcast) {\n this.broadcastChannel.postMessage({ event, session });\n }\n const errors = [];\n const promises = Array.from(this.stateChangeEmitters.values()).map(async (x) => {\n try {\n await x.callback(event, session);\n }\n catch (e) {\n errors.push(e);\n }\n });\n await Promise.all(promises);\n if (errors.length > 0) {\n for (let i = 0; i < errors.length; i += 1) {\n console.error(errors[i]);\n }\n throw errors[0];\n }\n }\n finally {\n this._debug(debugName, 'end');\n }\n }\n /**\n * set currentSession and currentUser\n * process to _startAutoRefreshToken if possible\n */\n async _saveSession(session) {\n this._debug('#_saveSession()', session);\n // _saveSession is always called whenever a new session has been acquired\n // so we can safely suppress the warning returned by future getSession calls\n this.suppressGetSessionWarning = true;\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, `${this.storageKey}-code-verifier`);\n // Create a shallow copy to work with, to avoid mutating the original session object if it's used elsewhere\n const sessionToProcess = Object.assign({}, session);\n const userIsProxy = sessionToProcess.user && sessionToProcess.user.__isUserNotAvailableProxy === true;\n if (this.userStorage) {\n if (!userIsProxy && sessionToProcess.user) {\n // If it's a real user object, save it to userStorage.\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.setItemAsync)(this.userStorage, this.storageKey + '-user', {\n user: sessionToProcess.user,\n });\n }\n else if (userIsProxy) {\n // If it's the proxy, it means user was not found in userStorage.\n // We should ensure no stale user data for this key exists in userStorage if we were to save null,\n // or simply not save the proxy. For now, we don't save the proxy here.\n // If there's a need to clear userStorage if user becomes proxy, that logic would go here.\n }\n // Prepare the main session data for primary storage: remove the user property before cloning\n // This is important because the original session.user might be the proxy\n const mainSessionData = Object.assign({}, sessionToProcess);\n delete mainSessionData.user; // Remove user (real or proxy) before cloning for main storage\n const clonedMainSessionData = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.deepClone)(mainSessionData);\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.setItemAsync)(this.storage, this.storageKey, clonedMainSessionData);\n }\n else {\n // No userStorage is configured.\n // In this case, session.user should ideally not be a proxy.\n // If it were, structuredClone would fail. This implies an issue elsewhere if user is a proxy here\n const clonedSession = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.deepClone)(sessionToProcess); // sessionToProcess still has its original user property\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.setItemAsync)(this.storage, this.storageKey, clonedSession);\n }\n }\n async _removeSession() {\n this._debug('#_removeSession()');\n this.suppressGetSessionWarning = false;\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, this.storageKey);\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, this.storageKey + '-code-verifier');\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.storage, this.storageKey + '-user');\n if (this.userStorage) {\n await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.removeItemAsync)(this.userStorage, this.storageKey + '-user');\n }\n await this._notifyAllSubscribers('SIGNED_OUT', null);\n }\n /**\n * Removes any registered visibilitychange callback.\n *\n * {@see #startAutoRefresh}\n * {@see #stopAutoRefresh}\n */\n _removeVisibilityChangedCallback() {\n this._debug('#_removeVisibilityChangedCallback()');\n const callback = this.visibilityChangedCallback;\n this.visibilityChangedCallback = null;\n try {\n if (callback && (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() && (window === null || window === void 0 ? void 0 : window.removeEventListener)) {\n window.removeEventListener('visibilitychange', callback);\n }\n }\n catch (e) {\n console.error('removing visibilitychange callback failed', e);\n }\n }\n /**\n * This is the private implementation of {@link #startAutoRefresh}. Use this\n * within the library.\n */\n async _startAutoRefresh() {\n await this._stopAutoRefresh();\n this._debug('#_startAutoRefresh()');\n const ticker = setInterval(() => this._autoRefreshTokenTick(), _lib_constants__WEBPACK_IMPORTED_MODULE_1__.AUTO_REFRESH_TICK_DURATION_MS);\n this.autoRefreshTicker = ticker;\n if (ticker && typeof ticker === 'object' && typeof ticker.unref === 'function') {\n // ticker is a NodeJS Timeout object that has an `unref` method\n // https://nodejs.org/api/timers.html#timeoutunref\n // When auto refresh is used in NodeJS (like for testing) the\n // `setInterval` is preventing the process from being marked as\n // finished and tests run endlessly. This can be prevented by calling\n // `unref()` on the returned object.\n ticker.unref();\n // @ts-expect-error TS has no context of Deno\n }\n else if (typeof Deno !== 'undefined' && typeof Deno.unrefTimer === 'function') {\n // similar like for NodeJS, but with the Deno API\n // https://deno.land/api@latest?unstable&s=Deno.unrefTimer\n // @ts-expect-error TS has no context of Deno\n Deno.unrefTimer(ticker);\n }\n // run the tick immediately, but in the next pass of the event loop so that\n // #_initialize can be allowed to complete without recursively waiting on\n // itself\n const timeout = setTimeout(async () => {\n await this.initializePromise;\n await this._autoRefreshTokenTick();\n }, 0);\n this.autoRefreshTickTimeout = timeout;\n if (timeout && typeof timeout === 'object' && typeof timeout.unref === 'function') {\n timeout.unref();\n // @ts-expect-error TS has no context of Deno\n }\n else if (typeof Deno !== 'undefined' && typeof Deno.unrefTimer === 'function') {\n // @ts-expect-error TS has no context of Deno\n Deno.unrefTimer(timeout);\n }\n }\n /**\n * This is the private implementation of {@link #stopAutoRefresh}. Use this\n * within the library.\n */\n async _stopAutoRefresh() {\n this._debug('#_stopAutoRefresh()');\n const ticker = this.autoRefreshTicker;\n this.autoRefreshTicker = null;\n if (ticker) {\n clearInterval(ticker);\n }\n const timeout = this.autoRefreshTickTimeout;\n this.autoRefreshTickTimeout = null;\n if (timeout) {\n clearTimeout(timeout);\n }\n }\n /**\n * Starts an auto-refresh process in the background. The session is checked\n * every few seconds. Close to the time of expiration a process is started to\n * refresh the session. If refreshing fails it will be retried for as long as\n * necessary.\n *\n * If you set the {@link GoTrueClientOptions#autoRefreshToken} you don't need\n * to call this function, it will be called for you.\n *\n * On browsers the refresh process works only when the tab/window is in the\n * foreground to conserve resources as well as prevent race conditions and\n * flooding auth with requests. If you call this method any managed\n * visibility change callback will be removed and you must manage visibility\n * changes on your own.\n *\n * On non-browser platforms the refresh process works *continuously* in the\n * background, which may not be desirable. You should hook into your\n * platform's foreground indication mechanism and call these methods\n * appropriately to conserve resources.\n *\n * {@see #stopAutoRefresh}\n *\n * @category Auth\n *\n * @remarks\n * - Only useful in non-browser environments such as React Native or Electron.\n * - The Supabase Auth library automatically starts and stops proactively refreshing the session when a tab is focused or not.\n * - On non-browser platforms, such as mobile or desktop apps built with web technologies, the library is not able to effectively determine whether the application is _focused_ or not.\n * - To give this hint to the application, you should be calling this method when the app is in focus and calling `supabase.auth.stopAutoRefresh()` when it's out of focus.\n *\n * @example Start and stop auto refresh in React Native\n * ```js\n * import { AppState } from 'react-native'\n *\n * // make sure you register this only once!\n * AppState.addEventListener('change', (state) => {\n * if (state === 'active') {\n * supabase.auth.startAutoRefresh()\n * } else {\n * supabase.auth.stopAutoRefresh()\n * }\n * })\n * ```\n */\n async startAutoRefresh() {\n this._removeVisibilityChangedCallback();\n await this._startAutoRefresh();\n }\n /**\n * Stops an active auto refresh process running in the background (if any).\n *\n * If you call this method any managed visibility change callback will be\n * removed and you must manage visibility changes on your own.\n *\n * See {@link #startAutoRefresh} for more details.\n *\n * @category Auth\n *\n * @remarks\n * - Only useful in non-browser environments such as React Native or Electron.\n * - The Supabase Auth library automatically starts and stops proactively refreshing the session when a tab is focused or not.\n * - On non-browser platforms, such as mobile or desktop apps built with web technologies, the library is not able to effectively determine whether the application is _focused_ or not.\n * - When your application goes in the background or out of focus, call this method to stop the proactive refreshing of the session.\n *\n * @example Start and stop auto refresh in React Native\n * ```js\n * import { AppState } from 'react-native'\n *\n * // make sure you register this only once!\n * AppState.addEventListener('change', (state) => {\n * if (state === 'active') {\n * supabase.auth.startAutoRefresh()\n * } else {\n * supabase.auth.stopAutoRefresh()\n * }\n * })\n * ```\n */\n async stopAutoRefresh() {\n this._removeVisibilityChangedCallback();\n await this._stopAutoRefresh();\n }\n /**\n * Runs the auto refresh token tick.\n */\n async _autoRefreshTokenTick() {\n this._debug('#_autoRefreshTokenTick()', 'begin');\n try {\n await this._acquireLock(0, async () => {\n try {\n const now = Date.now();\n try {\n return await this._useSession(async (result) => {\n const { data: { session }, } = result;\n if (!session || !session.refresh_token || !session.expires_at) {\n this._debug('#_autoRefreshTokenTick()', 'no session');\n return;\n }\n // session will expire in this many ticks (or has already expired if <= 0)\n const expiresInTicks = Math.floor((session.expires_at * 1000 - now) / _lib_constants__WEBPACK_IMPORTED_MODULE_1__.AUTO_REFRESH_TICK_DURATION_MS);\n this._debug('#_autoRefreshTokenTick()', `access token expires in ${expiresInTicks} ticks, a tick lasts ${_lib_constants__WEBPACK_IMPORTED_MODULE_1__.AUTO_REFRESH_TICK_DURATION_MS}ms, refresh threshold is ${_lib_constants__WEBPACK_IMPORTED_MODULE_1__.AUTO_REFRESH_TICK_THRESHOLD} ticks`);\n if (expiresInTicks <= _lib_constants__WEBPACK_IMPORTED_MODULE_1__.AUTO_REFRESH_TICK_THRESHOLD) {\n await this._callRefreshToken(session.refresh_token);\n }\n });\n }\n catch (e) {\n console.error('Auto refresh tick failed with error. This is likely a transient error.', e);\n }\n }\n finally {\n this._debug('#_autoRefreshTokenTick()', 'end');\n }\n });\n }\n catch (e) {\n if (e instanceof _lib_locks__WEBPACK_IMPORTED_MODULE_6__.LockAcquireTimeoutError) {\n this._debug('auto refresh token tick lock not available');\n }\n else {\n throw e;\n }\n }\n }\n /**\n * Registers callbacks on the browser / platform, which in-turn run\n * algorithms when the browser window/tab are in foreground. On non-browser\n * platforms it assumes always foreground.\n */\n async _handleVisibilityChange() {\n this._debug('#_handleVisibilityChange()');\n if (!(0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() || !(window === null || window === void 0 ? void 0 : window.addEventListener)) {\n if (this.autoRefreshToken) {\n // in non-browser environments the refresh token ticker runs always\n this.startAutoRefresh();\n }\n return false;\n }\n try {\n this.visibilityChangedCallback = async () => {\n try {\n await this._onVisibilityChanged(false);\n }\n catch (error) {\n this._debug('#visibilityChangedCallback', 'error', error);\n }\n };\n window === null || window === void 0 ? void 0 : window.addEventListener('visibilitychange', this.visibilityChangedCallback);\n // now immediately call the visbility changed callback to setup with the\n // current visbility state\n await this._onVisibilityChanged(true); // initial call\n }\n catch (error) {\n console.error('_handleVisibilityChange', error);\n }\n }\n /**\n * Callback registered with `window.addEventListener('visibilitychange')`.\n */\n async _onVisibilityChanged(calledFromInitialize) {\n const methodName = `#_onVisibilityChanged(${calledFromInitialize})`;\n this._debug(methodName, 'visibilityState', document.visibilityState);\n if (document.visibilityState === 'visible') {\n if (this.autoRefreshToken) {\n // in browser environments the refresh token ticker runs only on focused tabs\n // which prevents race conditions\n this._startAutoRefresh();\n }\n if (!calledFromInitialize) {\n // called when the visibility has changed, i.e. the browser\n // transitioned from hidden -> visible so we need to see if the session\n // should be recovered immediately... but to do that we need to acquire\n // the lock first asynchronously\n await this.initializePromise;\n await this._acquireLock(this.lockAcquireTimeout, async () => {\n if (document.visibilityState !== 'visible') {\n this._debug(methodName, 'acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting');\n // visibility has changed while waiting for the lock, abort\n return;\n }\n // recover the session\n await this._recoverAndRefresh();\n });\n }\n }\n else if (document.visibilityState === 'hidden') {\n if (this.autoRefreshToken) {\n this._stopAutoRefresh();\n }\n }\n }\n /**\n * Generates the relevant login URL for a third-party provider.\n * @param options.redirectTo A URL or mobile address to send the user to after they are confirmed.\n * @param options.scopes A space-separated list of scopes granted to the OAuth application.\n * @param options.queryParams An object of key-value pairs containing query parameters granted to the OAuth application.\n */\n async _getUrlForProvider(url, provider, options) {\n const urlParams = [`provider=${encodeURIComponent(provider)}`];\n if (options === null || options === void 0 ? void 0 : options.redirectTo) {\n urlParams.push(`redirect_to=${encodeURIComponent(options.redirectTo)}`);\n }\n if (options === null || options === void 0 ? void 0 : options.scopes) {\n urlParams.push(`scopes=${encodeURIComponent(options.scopes)}`);\n }\n if (this.flowType === 'pkce') {\n const [codeChallenge, codeChallengeMethod] = await (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getCodeChallengeAndMethod)(this.storage, this.storageKey);\n const flowParams = new URLSearchParams({\n code_challenge: `${encodeURIComponent(codeChallenge)}`,\n code_challenge_method: `${encodeURIComponent(codeChallengeMethod)}`,\n });\n urlParams.push(flowParams.toString());\n }\n if (options === null || options === void 0 ? void 0 : options.queryParams) {\n const query = new URLSearchParams(options.queryParams);\n urlParams.push(query.toString());\n }\n if (options === null || options === void 0 ? void 0 : options.skipBrowserRedirect) {\n urlParams.push(`skip_http_redirect=${options.skipBrowserRedirect}`);\n }\n return `${url}?${urlParams.join('&')}`;\n }\n async _unenroll(params) {\n try {\n return await this._useSession(async (result) => {\n var _a;\n const { data: sessionData, error: sessionError } = result;\n if (sessionError) {\n return this._returnResult({ data: null, error: sessionError });\n }\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'DELETE', `${this.url}/factors/${params.factorId}`, {\n headers: this.headers,\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\n });\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n async _enroll(params) {\n try {\n return await this._useSession(async (result) => {\n var _a, _b;\n const { data: sessionData, error: sessionError } = result;\n if (sessionError) {\n return this._returnResult({ data: null, error: sessionError });\n }\n const body = Object.assign({ friendly_name: params.friendlyName, factor_type: params.factorType }, (params.factorType === 'phone'\n ? { phone: params.phone }\n : params.factorType === 'totp'\n ? { issuer: params.issuer }\n : {}));\n const { data, error } = (await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/factors`, {\n body,\n headers: this.headers,\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\n }));\n if (error) {\n return this._returnResult({ data: null, error });\n }\n if (params.factorType === 'totp' && data.type === 'totp' && ((_b = data === null || data === void 0 ? void 0 : data.totp) === null || _b === void 0 ? void 0 : _b.qr_code)) {\n data.totp.qr_code = `data:image/svg+xml;utf-8,${data.totp.qr_code}`;\n }\n return this._returnResult({ data, error: null });\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n async _verify(params) {\n return this._acquireLock(this.lockAcquireTimeout, async () => {\n try {\n return await this._useSession(async (result) => {\n var _a;\n const { data: sessionData, error: sessionError } = result;\n if (sessionError) {\n return this._returnResult({ data: null, error: sessionError });\n }\n const body = Object.assign({ challenge_id: params.challengeId }, ('webauthn' in params\n ? {\n webauthn: Object.assign(Object.assign({}, params.webauthn), { credential_response: params.webauthn.type === 'create'\n ? (0,_lib_webauthn__WEBPACK_IMPORTED_MODULE_11__.serializeCredentialCreationResponse)(params.webauthn.credential_response)\n : (0,_lib_webauthn__WEBPACK_IMPORTED_MODULE_11__.serializeCredentialRequestResponse)(params.webauthn.credential_response) }),\n }\n : { code: params.code }));\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/factors/${params.factorId}/verify`, {\n body,\n headers: this.headers,\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\n });\n if (error) {\n return this._returnResult({ data: null, error });\n }\n await this._saveSession(Object.assign({ expires_at: Math.round(Date.now() / 1000) + data.expires_in }, data));\n await this._notifyAllSubscribers('MFA_CHALLENGE_VERIFIED', data);\n return this._returnResult({ data, error });\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n });\n }\n async _challenge(params) {\n return this._acquireLock(this.lockAcquireTimeout, async () => {\n try {\n return await this._useSession(async (result) => {\n var _a;\n const { data: sessionData, error: sessionError } = result;\n if (sessionError) {\n return this._returnResult({ data: null, error: sessionError });\n }\n const response = (await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/factors/${params.factorId}/challenge`, {\n body: params,\n headers: this.headers,\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\n }));\n if (response.error) {\n return response;\n }\n const { data } = response;\n if (data.type !== 'webauthn') {\n return { data, error: null };\n }\n switch (data.webauthn.type) {\n case 'create':\n return {\n data: Object.assign(Object.assign({}, data), { webauthn: Object.assign(Object.assign({}, data.webauthn), { credential_options: Object.assign(Object.assign({}, data.webauthn.credential_options), { publicKey: (0,_lib_webauthn__WEBPACK_IMPORTED_MODULE_11__.deserializeCredentialCreationOptions)(data.webauthn.credential_options.publicKey) }) }) }),\n error: null,\n };\n case 'request':\n return {\n data: Object.assign(Object.assign({}, data), { webauthn: Object.assign(Object.assign({}, data.webauthn), { credential_options: Object.assign(Object.assign({}, data.webauthn.credential_options), { publicKey: (0,_lib_webauthn__WEBPACK_IMPORTED_MODULE_11__.deserializeCredentialRequestOptions)(data.webauthn.credential_options.publicKey) }) }) }),\n error: null,\n };\n }\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n });\n }\n /**\n * {@see GoTrueMFAApi#challengeAndVerify}\n */\n async _challengeAndVerify(params) {\n // both _challenge and _verify independently acquire the lock, so no need\n // to acquire it here\n const { data: challengeData, error: challengeError } = await this._challenge({\n factorId: params.factorId,\n });\n if (challengeError) {\n return this._returnResult({ data: null, error: challengeError });\n }\n return await this._verify({\n factorId: params.factorId,\n challengeId: challengeData.id,\n code: params.code,\n });\n }\n /**\n * {@see GoTrueMFAApi#listFactors}\n */\n async _listFactors() {\n var _a;\n // use #getUser instead of #_getUser as the former acquires a lock\n const { data: { user }, error: userError, } = await this.getUser();\n if (userError) {\n return { data: null, error: userError };\n }\n const data = {\n all: [],\n phone: [],\n totp: [],\n webauthn: [],\n };\n // loop over the factors ONCE\n for (const factor of (_a = user === null || user === void 0 ? void 0 : user.factors) !== null && _a !== void 0 ? _a : []) {\n data.all.push(factor);\n if (factor.status === 'verified') {\n ;\n data[factor.factor_type].push(factor);\n }\n }\n return {\n data,\n error: null,\n };\n }\n /**\n * {@see GoTrueMFAApi#getAuthenticatorAssuranceLevel}\n */\n async _getAuthenticatorAssuranceLevel(jwt) {\n var _a, _b, _c, _d;\n if (jwt) {\n try {\n const { payload } = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.decodeJWT)(jwt);\n let currentLevel = null;\n if (payload.aal) {\n currentLevel = payload.aal;\n }\n let nextLevel = currentLevel;\n const { data: { user }, error: userError, } = await this.getUser(jwt);\n if (userError) {\n return this._returnResult({ data: null, error: userError });\n }\n const verifiedFactors = (_b = (_a = user === null || user === void 0 ? void 0 : user.factors) === null || _a === void 0 ? void 0 : _a.filter((factor) => factor.status === 'verified')) !== null && _b !== void 0 ? _b : [];\n if (verifiedFactors.length > 0) {\n nextLevel = 'aal2';\n }\n const currentAuthenticationMethods = payload.amr || [];\n return { data: { currentLevel, nextLevel, currentAuthenticationMethods }, error: null };\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n const { data: { session }, error: sessionError, } = await this.getSession();\n if (sessionError) {\n return this._returnResult({ data: null, error: sessionError });\n }\n if (!session) {\n return {\n data: { currentLevel: null, nextLevel: null, currentAuthenticationMethods: [] },\n error: null,\n };\n }\n const { payload } = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.decodeJWT)(session.access_token);\n let currentLevel = null;\n if (payload.aal) {\n currentLevel = payload.aal;\n }\n let nextLevel = currentLevel;\n const verifiedFactors = (_d = (_c = session.user.factors) === null || _c === void 0 ? void 0 : _c.filter((factor) => factor.status === 'verified')) !== null && _d !== void 0 ? _d : [];\n if (verifiedFactors.length > 0) {\n nextLevel = 'aal2';\n }\n const currentAuthenticationMethods = payload.amr || [];\n return { data: { currentLevel, nextLevel, currentAuthenticationMethods }, error: null };\n }\n /**\n * Retrieves details about an OAuth authorization request.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n *\n * Returns authorization details including client info, scopes, and user information.\n * If the response includes only a redirect_url field, it means consent was already given - the caller\n * should handle the redirect manually if needed.\n */\n async _getAuthorizationDetails(authorizationId) {\n try {\n return await this._useSession(async (result) => {\n const { data: { session }, error: sessionError, } = result;\n if (sessionError) {\n return this._returnResult({ data: null, error: sessionError });\n }\n if (!session) {\n return this._returnResult({ data: null, error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError() });\n }\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'GET', `${this.url}/oauth/authorizations/${authorizationId}`, {\n headers: this.headers,\n jwt: session.access_token,\n xform: (data) => ({ data, error: null }),\n });\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /**\n * Approves an OAuth authorization request.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\n async _approveAuthorization(authorizationId, options) {\n try {\n return await this._useSession(async (result) => {\n const { data: { session }, error: sessionError, } = result;\n if (sessionError) {\n return this._returnResult({ data: null, error: sessionError });\n }\n if (!session) {\n return this._returnResult({ data: null, error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError() });\n }\n const response = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/oauth/authorizations/${authorizationId}/consent`, {\n headers: this.headers,\n jwt: session.access_token,\n body: { action: 'approve' },\n xform: (data) => ({ data, error: null }),\n });\n if (response.data && response.data.redirect_url) {\n // Automatically redirect in browser unless skipBrowserRedirect is true\n if ((0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() && !(options === null || options === void 0 ? void 0 : options.skipBrowserRedirect)) {\n window.location.assign(response.data.redirect_url);\n }\n }\n return response;\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /**\n * Denies an OAuth authorization request.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\n async _denyAuthorization(authorizationId, options) {\n try {\n return await this._useSession(async (result) => {\n const { data: { session }, error: sessionError, } = result;\n if (sessionError) {\n return this._returnResult({ data: null, error: sessionError });\n }\n if (!session) {\n return this._returnResult({ data: null, error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError() });\n }\n const response = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/oauth/authorizations/${authorizationId}/consent`, {\n headers: this.headers,\n jwt: session.access_token,\n body: { action: 'deny' },\n xform: (data) => ({ data, error: null }),\n });\n if (response.data && response.data.redirect_url) {\n // Automatically redirect in browser unless skipBrowserRedirect is true\n if ((0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.isBrowser)() && !(options === null || options === void 0 ? void 0 : options.skipBrowserRedirect)) {\n window.location.assign(response.data.redirect_url);\n }\n }\n return response;\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /**\n * Lists all OAuth grants that the authenticated user has authorized.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\n async _listOAuthGrants() {\n try {\n return await this._useSession(async (result) => {\n const { data: { session }, error: sessionError, } = result;\n if (sessionError) {\n return this._returnResult({ data: null, error: sessionError });\n }\n if (!session) {\n return this._returnResult({ data: null, error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError() });\n }\n return await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'GET', `${this.url}/user/oauth/grants`, {\n headers: this.headers,\n jwt: session.access_token,\n xform: (data) => ({ data, error: null }),\n });\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /**\n * Revokes a user's OAuth grant for a specific client.\n * Only relevant when the OAuth 2.1 server is enabled in Supabase Auth.\n */\n async _revokeOAuthGrant(options) {\n try {\n return await this._useSession(async (result) => {\n const { data: { session }, error: sessionError, } = result;\n if (sessionError) {\n return this._returnResult({ data: null, error: sessionError });\n }\n if (!session) {\n return this._returnResult({ data: null, error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError() });\n }\n await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'DELETE', `${this.url}/user/oauth/grants`, {\n headers: this.headers,\n jwt: session.access_token,\n query: { client_id: options.clientId },\n noResolveJson: true,\n });\n return { data: {}, error: null };\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n async fetchJwk(kid, jwks = { keys: [] }) {\n // try fetching from the supplied jwks\n let jwk = jwks.keys.find((key) => key.kid === kid);\n if (jwk) {\n return jwk;\n }\n const now = Date.now();\n // try fetching from cache\n jwk = this.jwks.keys.find((key) => key.kid === kid);\n // jwk exists and jwks isn't stale\n if (jwk && this.jwks_cached_at + _lib_constants__WEBPACK_IMPORTED_MODULE_1__.JWKS_TTL > now) {\n return jwk;\n }\n // jwk isn't cached in memory so we need to fetch it from the well-known endpoint\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'GET', `${this.url}/.well-known/jwks.json`, {\n headers: this.headers,\n });\n if (error) {\n throw error;\n }\n if (!data.keys || data.keys.length === 0) {\n return null;\n }\n this.jwks = data;\n this.jwks_cached_at = now;\n // Find the signing key\n jwk = data.keys.find((key) => key.kid === kid);\n if (!jwk) {\n return null;\n }\n return jwk;\n }\n /**\n * Extracts the JWT claims present in the access token by first verifying the\n * JWT against the server's JSON Web Key Set endpoint\n * `/.well-known/jwks.json` which is often cached, resulting in significantly\n * faster responses. Prefer this method over {@link #getUser} which always\n * sends a request to the Auth server for each JWT.\n *\n * If the project is not using an asymmetric JWT signing key (like ECC or\n * RSA) it always sends a request to the Auth server (similar to {@link\n * #getUser}) to verify the JWT.\n *\n * @param jwt An optional specific JWT you wish to verify, not the one you\n * can obtain from {@link #getSession}.\n * @param options Various additional options that allow you to customize the\n * behavior of this method.\n *\n * @category Auth\n *\n * @remarks\n * - Parses the user's [access token](/docs/guides/auth/sessions#access-token-jwt-claims) as a [JSON Web Token (JWT)](/docs/guides/auth/jwts) and returns its components if valid and not expired.\n * - If your project is using asymmetric JWT signing keys, then the verification is done locally usually without a network request using the [WebCrypto API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API).\n * - A network request is sent to your project's JWT signing key discovery endpoint `https://project-id.supabase.co/auth/v1/.well-known/jwks.json`, which is cached locally. If your environment is ephemeral, such as a Lambda function that is destroyed after every request, a network request will be sent for each new invocation. Supabase provides a network-edge cache providing fast responses for these situations.\n * - If the user's access token is about to expire when calling this function, the user's session will first be refreshed before validating the JWT.\n * - If your project is using a symmetric secret to sign the JWT, it always sends a request similar to `getUser()` to validate the JWT at the server before returning the decoded token. This is also used if the WebCrypto API is not available in the environment. Make sure you polyfill it in such situations.\n * - The returned claims can be customized per project using the [Custom Access Token Hook](/docs/guides/auth/auth-hooks/custom-access-token-hook).\n *\n * @example Get JWT claims, header and signature\n * ```js\n * const { data, error } = await supabase.auth.getClaims()\n * ```\n *\n * @exampleResponse Get JWT claims, header and signature\n * ```json\n * {\n * \"data\": {\n * \"claims\": {\n * \"aal\": \"aal1\",\n * \"amr\": [{\n * \"method\": \"email\",\n * \"timestamp\": 1715766000\n * }],\n * \"app_metadata\": {},\n * \"aud\": \"authenticated\",\n * \"email\": \"example@email.com\",\n * \"exp\": 1715769600,\n * \"iat\": 1715766000,\n * \"is_anonymous\": false,\n * \"iss\": \"https://project-id.supabase.co/auth/v1\",\n * \"phone\": \"+13334445555\",\n * \"role\": \"authenticated\",\n * \"session_id\": \"11111111-1111-1111-1111-111111111111\",\n * \"sub\": \"11111111-1111-1111-1111-111111111111\",\n * \"user_metadata\": {}\n * },\n * \"header\": {\n * \"alg\": \"RS256\",\n * \"typ\": \"JWT\",\n * \"kid\": \"11111111-1111-1111-1111-111111111111\"\n * },\n * \"signature\": [/** Uint8Array *\\/],\n * },\n * \"error\": null\n * }\n * ```\n */\n async getClaims(jwt, options = {}) {\n try {\n let token = jwt;\n if (!token) {\n const { data, error } = await this.getSession();\n if (error || !data.session) {\n return this._returnResult({ data: null, error });\n }\n token = data.session.access_token;\n }\n const { header, payload, signature, raw: { header: rawHeader, payload: rawPayload }, } = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.decodeJWT)(token);\n if (!(options === null || options === void 0 ? void 0 : options.allowExpired)) {\n // Reject expired JWTs should only happen if jwt argument was passed\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.validateExp)(payload.exp);\n }\n const signingKey = !header.alg ||\n header.alg.startsWith('HS') ||\n !header.kid ||\n !('crypto' in globalThis && 'subtle' in globalThis.crypto)\n ? null\n : await this.fetchJwk(header.kid, (options === null || options === void 0 ? void 0 : options.keys) ? { keys: options.keys } : options === null || options === void 0 ? void 0 : options.jwks);\n // If symmetric algorithm or WebCrypto API is unavailable, fallback to getUser()\n if (!signingKey) {\n const { error } = await this.getUser(token);\n if (error) {\n throw error;\n }\n // getUser succeeds so the claims in the JWT can be trusted\n return {\n data: {\n claims: payload,\n header,\n signature,\n },\n error: null,\n };\n }\n const algorithm = (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.getAlgorithm)(header.alg);\n // Convert JWK to CryptoKey\n const publicKey = await crypto.subtle.importKey('jwk', signingKey, algorithm, true, [\n 'verify',\n ]);\n // Verify the signature\n const isValid = await crypto.subtle.verify(algorithm, publicKey, signature, (0,_lib_base64url__WEBPACK_IMPORTED_MODULE_9__.stringToUint8Array)(`${rawHeader}.${rawPayload}`));\n if (!isValid) {\n throw new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidJwtError('Invalid JWT signature');\n }\n // If verification succeeds, decode and return claims\n return {\n data: {\n claims: payload,\n header,\n signature,\n },\n error: null,\n };\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n // --- Passkey Methods ---\n /**\n * Sign in with a passkey. Handles the full WebAuthn ceremony:\n * 1. Fetches authentication challenge from server\n * 2. Prompts user via navigator.credentials.get()\n * 3. Verifies credential with server and creates session\n *\n * Requires `auth.experimental.passkey: true`.\n *\n * @category Auth\n */\n async signInWithPasskey(credentials) {\n var _a, _b, _c;\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.assertPasskeyExperimentalEnabled)(this.experimental);\n try {\n if (!(0,_lib_webauthn__WEBPACK_IMPORTED_MODULE_11__.browserSupportsWebAuthn)()) {\n return this._returnResult({\n data: null,\n error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthUnknownError('Browser does not support WebAuthn', null),\n });\n }\n // 1. Get challenge options from server\n const { data: options, error: optionsError } = await this._startPasskeyAuthentication({\n options: { captchaToken: (_a = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _a === void 0 ? void 0 : _a.captchaToken },\n });\n if (optionsError || !options) {\n return this._returnResult({ data: null, error: optionsError });\n }\n // 2. Deserialize and prompt user via browser WebAuthn API\n const publicKeyOptions = (0,_lib_webauthn__WEBPACK_IMPORTED_MODULE_11__.deserializeCredentialRequestOptions)(options.options);\n const signal = (_c = (_b = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _b === void 0 ? void 0 : _b.signal) !== null && _c !== void 0 ? _c : _lib_webauthn__WEBPACK_IMPORTED_MODULE_11__.webAuthnAbortService.createNewAbortSignal();\n const { data: credential, error: credentialError } = await (0,_lib_webauthn__WEBPACK_IMPORTED_MODULE_11__.getCredential)({\n publicKey: publicKeyOptions,\n signal,\n });\n if (credentialError || !credential) {\n return this._returnResult({\n data: null,\n error: credentialError !== null && credentialError !== void 0 ? credentialError : new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthUnknownError('WebAuthn ceremony failed', null),\n });\n }\n // 3. Serialize and verify with server\n const serialized = (0,_lib_webauthn__WEBPACK_IMPORTED_MODULE_11__.serializeCredentialRequestResponse)(credential);\n return this._verifyPasskeyAuthentication({\n challengeId: options.challenge_id,\n credential: serialized,\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /**\n * Register a passkey for the current authenticated user. Handles the full WebAuthn ceremony:\n * 1. Fetches registration challenge from server\n * 2. Prompts user via navigator.credentials.create()\n * 3. Verifies credential with server\n *\n * Requires an active session. Requires `auth.experimental.passkey: true`.\n *\n * @category Auth\n */\n async registerPasskey(credentials) {\n var _a, _b;\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.assertPasskeyExperimentalEnabled)(this.experimental);\n try {\n if (!(0,_lib_webauthn__WEBPACK_IMPORTED_MODULE_11__.browserSupportsWebAuthn)()) {\n return this._returnResult({\n data: null,\n error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthUnknownError('Browser does not support WebAuthn', null),\n });\n }\n // 1. Get challenge options from server\n const { data: options, error: optionsError } = await this._startPasskeyRegistration();\n if (optionsError || !options) {\n return this._returnResult({ data: null, error: optionsError });\n }\n // 2. Deserialize and prompt user via browser WebAuthn API\n const publicKeyOptions = (0,_lib_webauthn__WEBPACK_IMPORTED_MODULE_11__.deserializeCredentialCreationOptions)(options.options);\n const signal = (_b = (_a = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _a === void 0 ? void 0 : _a.signal) !== null && _b !== void 0 ? _b : _lib_webauthn__WEBPACK_IMPORTED_MODULE_11__.webAuthnAbortService.createNewAbortSignal();\n const { data: credential, error: credentialError } = await (0,_lib_webauthn__WEBPACK_IMPORTED_MODULE_11__.createCredential)({\n publicKey: publicKeyOptions,\n signal,\n });\n if (credentialError || !credential) {\n return this._returnResult({\n data: null,\n error: credentialError !== null && credentialError !== void 0 ? credentialError : new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthUnknownError('WebAuthn ceremony failed', null),\n });\n }\n // 3. Serialize and verify with server\n const serialized = (0,_lib_webauthn__WEBPACK_IMPORTED_MODULE_11__.serializeCredentialCreationResponse)(credential);\n return this._verifyPasskeyRegistration({\n challengeId: options.challenge_id,\n credential: serialized,\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /**\n * Start passkey registration for the current authenticated user.\n * Returns WebAuthn credential creation options to pass to navigator.credentials.create().\n */\n async _startPasskeyRegistration() {\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.assertPasskeyExperimentalEnabled)(this.experimental);\n try {\n return await this._useSession(async (result) => {\n const { data: { session }, error: sessionError, } = result;\n if (sessionError) {\n return this._returnResult({ data: null, error: sessionError });\n }\n if (!session) {\n return this._returnResult({ data: null, error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError() });\n }\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/passkeys/registration/options`, {\n headers: this.headers,\n jwt: session.access_token,\n body: {},\n });\n if (error) {\n return this._returnResult({ data: null, error });\n }\n return this._returnResult({ data, error: null });\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /**\n * Verify passkey registration with the credential response.\n * The credentialResponse should be the serialized output of navigator.credentials.create().\n */\n async _verifyPasskeyRegistration(params) {\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.assertPasskeyExperimentalEnabled)(this.experimental);\n try {\n return await this._useSession(async (result) => {\n const { data: { session }, error: sessionError, } = result;\n if (sessionError) {\n return this._returnResult({ data: null, error: sessionError });\n }\n if (!session) {\n return this._returnResult({ data: null, error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError() });\n }\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/passkeys/registration/verify`, {\n headers: this.headers,\n jwt: session.access_token,\n body: {\n challenge_id: params.challengeId,\n credential: params.credential,\n },\n });\n if (error) {\n return this._returnResult({ data: null, error });\n }\n return this._returnResult({ data, error: null });\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /**\n * Start passkey authentication.\n * Returns WebAuthn credential request options to pass to navigator.credentials.get().\n */\n async _startPasskeyAuthentication(params) {\n var _a;\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.assertPasskeyExperimentalEnabled)(this.experimental);\n try {\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/passkeys/authentication/options`, {\n headers: this.headers,\n body: {\n gotrue_meta_security: { captcha_token: (_a = params === null || params === void 0 ? void 0 : params.options) === null || _a === void 0 ? void 0 : _a.captchaToken },\n },\n });\n if (error) {\n return this._returnResult({ data: null, error });\n }\n return this._returnResult({ data, error: null });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /**\n * Verify passkey authentication and create a session.\n * The credential should be the serialized output of navigator.credentials.get().\n */\n async _verifyPasskeyAuthentication(params) {\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.assertPasskeyExperimentalEnabled)(this.experimental);\n try {\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'POST', `${this.url}/passkeys/authentication/verify`, {\n headers: this.headers,\n body: {\n challenge_id: params.challengeId,\n credential: params.credential,\n },\n xform: _lib_fetch__WEBPACK_IMPORTED_MODULE_3__._sessionResponse,\n });\n if (error) {\n return this._returnResult({ data: null, error });\n }\n if (data.session) {\n await this._saveSession(data.session);\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\n }\n return this._returnResult({ data, error: null });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /**\n * List all passkeys for the current user.\n */\n async _listPasskeys() {\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.assertPasskeyExperimentalEnabled)(this.experimental);\n try {\n return await this._useSession(async (result) => {\n const { data: { session }, error: sessionError, } = result;\n if (sessionError) {\n return this._returnResult({ data: null, error: sessionError });\n }\n if (!session) {\n return this._returnResult({ data: null, error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError() });\n }\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'GET', `${this.url}/passkeys`, {\n headers: this.headers,\n jwt: session.access_token,\n xform: (data) => ({ data, error: null }),\n });\n if (error) {\n return this._returnResult({ data: null, error });\n }\n return this._returnResult({ data, error: null });\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /**\n * Update a passkey.\n */\n async _updatePasskey(params) {\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.assertPasskeyExperimentalEnabled)(this.experimental);\n try {\n return await this._useSession(async (result) => {\n const { data: { session }, error: sessionError, } = result;\n if (sessionError) {\n return this._returnResult({ data: null, error: sessionError });\n }\n if (!session) {\n return this._returnResult({ data: null, error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError() });\n }\n const { data, error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'PATCH', `${this.url}/passkeys/${params.passkeyId}`, {\n headers: this.headers,\n jwt: session.access_token,\n body: { friendly_name: params.friendlyName },\n });\n if (error) {\n return this._returnResult({ data: null, error });\n }\n return this._returnResult({ data, error: null });\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n /**\n * Delete a passkey.\n */\n async _deletePasskey(params) {\n (0,_lib_helpers__WEBPACK_IMPORTED_MODULE_4__.assertPasskeyExperimentalEnabled)(this.experimental);\n try {\n return await this._useSession(async (result) => {\n const { data: { session }, error: sessionError, } = result;\n if (sessionError) {\n return this._returnResult({ data: null, error: sessionError });\n }\n if (!session) {\n return this._returnResult({ data: null, error: new _lib_errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError() });\n }\n const { error } = await (0,_lib_fetch__WEBPACK_IMPORTED_MODULE_3__._request)(this.fetch, 'DELETE', `${this.url}/passkeys/${params.passkeyId}`, {\n headers: this.headers,\n jwt: session.access_token,\n noResolveJson: true,\n });\n if (error) {\n return this._returnResult({ data: null, error });\n }\n return this._returnResult({ data: null, error: null });\n });\n }\n catch (error) {\n if ((0,_lib_errors__WEBPACK_IMPORTED_MODULE_2__.isAuthError)(error)) {\n return this._returnResult({ data: null, error });\n }\n throw error;\n }\n }\n}\nGoTrueClient.nextInstanceID = {};\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (GoTrueClient);\n//# sourceMappingURL=GoTrueClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9Hb1RydWVDbGllbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUE4QztBQUNzSDtBQUM4TTtBQUNqUTtBQUNrUDtBQUNuUztBQUNLO0FBQ2hCO0FBQ2I7QUFDK0I7QUFDYztBQUM2TDtBQUNsUixrRUFBa0IsSUFBSTtBQUN0QjtBQUNBLFNBQVMsc0RBQVU7QUFDbkIsZ0JBQWdCLHVEQUFXO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsMkRBQWU7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMElBQTBJO0FBQzFJO0FBQ0E7QUFDQSxxRUFBcUUsbUNBQW1DLGFBQWE7QUFDckg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUVBQXFFLG1DQUFtQyxpQkFBaUI7QUFDekg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGVBQWU7QUFDL0I7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixlQUFlO0FBQy9CO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixnQ0FBZ0M7QUFDcEQ7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQ7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7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QUFZLEVBQUM7QUFDNUIiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tb2R1bGUvR29UcnVlQ2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBHb1RydWVBZG1pbkFwaSBmcm9tICcuL0dvVHJ1ZUFkbWluQXBpJztcbmltcG9ydCB7IEFVVE9fUkVGUkVTSF9USUNLX0RVUkFUSU9OX01TLCBBVVRPX1JFRlJFU0hfVElDS19USFJFU0hPTEQsIERFRkFVTFRfSEVBREVSUywgRVhQSVJZX01BUkdJTl9NUywgR09UUlVFX1VSTCwgSldLU19UVEwsIFNUT1JBR0VfS0VZLCB9IGZyb20gJy4vbGliL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBBdXRoSW1wbGljaXRHcmFudFJlZGlyZWN0RXJyb3IsIEF1dGhJbnZhbGlkQ3JlZGVudGlhbHNFcnJvciwgQXV0aEludmFsaWRKd3RFcnJvciwgQXV0aEludmFsaWRUb2tlblJlc3BvbnNlRXJyb3IsIEF1dGhQS0NFQ29kZVZlcmlmaWVyTWlzc2luZ0Vycm9yLCBBdXRoUEtDRUdyYW50Q29kZUV4Y2hhbmdlRXJyb3IsIEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yLCBBdXRoVW5rbm93bkVycm9yLCBpc0F1dGhBcGlFcnJvciwgaXNBdXRoRXJyb3IsIGlzQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yLCBpc0F1dGhSZXRyeWFibGVGZXRjaEVycm9yLCBpc0F1dGhTZXNzaW9uTWlzc2luZ0Vycm9yLCB9IGZyb20gJy4vbGliL2Vycm9ycyc7XG5pbXBvcnQgeyBfcmVxdWVzdCwgX3Nlc3Npb25SZXNwb25zZSwgX3Nlc3Npb25SZXNwb25zZVBhc3N3b3JkLCBfc3NvUmVzcG9uc2UsIF91c2VyUmVzcG9uc2UsIH0gZnJvbSAnLi9saWIvZmV0Y2gnO1xuaW1wb3J0IHsgYXNzZXJ0UGFzc2tleUV4cGVyaW1lbnRhbEVuYWJsZWQsIGRlY29kZUpXVCwgZGVlcENsb25lLCBEZWZlcnJlZCwgZ2VuZXJhdGVDYWxsYmFja0lkLCBnZXRBbGdvcml0aG0sIGdldENvZGVDaGFsbGVuZ2VBbmRNZXRob2QsIGdldEl0ZW1Bc3luYywgaW5zZWN1cmVVc2VyV2FybmluZ1Byb3h5LCBpc0Jyb3dzZXIsIHBhcnNlUGFyYW1ldGVyc0Zyb21VUkwsIHJlbW92ZUl0ZW1Bc3luYywgcmVzb2x2ZUZldGNoLCByZXRyeWFibGUsIHNldEl0ZW1Bc3luYywgc2xlZXAsIHN1cHBvcnRzTG9jYWxTdG9yYWdlLCB1c2VyTm90QXZhaWxhYmxlUHJveHksIHZhbGlkYXRlRXhwLCB9IGZyb20gJy4vbGliL2hlbHBlcnMnO1xuaW1wb3J0IHsgbWVtb3J5TG9jYWxTdG9yYWdlQWRhcHRlciB9IGZyb20gJy4vbGliL2xvY2FsLXN0b3JhZ2UnO1xuaW1wb3J0IHsgTG9ja0FjcXVpcmVUaW1lb3V0RXJyb3IsIG5hdmlnYXRvckxvY2sgfSBmcm9tICcuL2xpYi9sb2Nrcyc7XG5pbXBvcnQgeyBwb2x5ZmlsbEdsb2JhbFRoaXMgfSBmcm9tICcuL2xpYi9wb2x5ZmlsbHMnO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4vbGliL3ZlcnNpb24nO1xuaW1wb3J0IHsgYnl0ZXNUb0Jhc2U2NFVSTCwgc3RyaW5nVG9VaW50OEFycmF5IH0gZnJvbSAnLi9saWIvYmFzZTY0dXJsJztcbmltcG9ydCB7IGNyZWF0ZVNpd2VNZXNzYWdlLCBmcm9tSGV4LCBnZXRBZGRyZXNzLCB0b0hleCwgfSBmcm9tICcuL2xpYi93ZWIzL2V0aGVyZXVtJztcbmltcG9ydCB7IGNyZWF0ZUNyZWRlbnRpYWwsIGRlc2VyaWFsaXplQ3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucywgZGVzZXJpYWxpemVDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMsIGdldENyZWRlbnRpYWwsIHNlcmlhbGl6ZUNyZWRlbnRpYWxDcmVhdGlvblJlc3BvbnNlLCBzZXJpYWxpemVDcmVkZW50aWFsUmVxdWVzdFJlc3BvbnNlLCBicm93c2VyU3VwcG9ydHNXZWJBdXRobiwgd2ViQXV0aG5BYm9ydFNlcnZpY2UsIFdlYkF1dGhuQXBpLCB9IGZyb20gJy4vbGliL3dlYmF1dGhuJztcbnBvbHlmaWxsR2xvYmFsVGhpcygpOyAvLyBNYWtlIFwiZ2xvYmFsVGhpc1wiIGF2YWlsYWJsZVxuY29uc3QgREVGQVVMVF9PUFRJT05TID0ge1xuICAgIHVybDogR09UUlVFX1VSTCxcbiAgICBzdG9yYWdlS2V5OiBTVE9SQUdFX0tFWSxcbiAgICBhdXRvUmVmcmVzaFRva2VuOiB0cnVlLFxuICAgIHBlcnNpc3RTZXNzaW9uOiB0cnVlLFxuICAgIGRldGVjdFNlc3Npb25JblVybDogdHJ1ZSxcbiAgICBoZWFkZXJzOiBERUZBVUxUX0hFQURFUlMsXG4gICAgZmxvd1R5cGU6ICdpbXBsaWNpdCcsXG4gICAgZGVidWc6IGZhbHNlLFxuICAgIGhhc0N1c3RvbUF1dGhvcml6YXRpb25IZWFkZXI6IGZhbHNlLFxuICAgIHRocm93T25FcnJvcjogZmFsc2UsXG4gICAgbG9ja0FjcXVpcmVUaW1lb3V0OiA1MDAwLCAvLyA1IHNlY29uZHNcbiAgICBza2lwQXV0b0luaXRpYWxpemU6IGZhbHNlLFxuICAgIGV4cGVyaW1lbnRhbDoge30sXG59O1xuYXN5bmMgZnVuY3Rpb24gbG9ja05vT3AobmFtZSwgYWNxdWlyZVRpbWVvdXQsIGZuKSB7XG4gICAgcmV0dXJuIGF3YWl0IGZuKCk7XG59XG4vKipcbiAqIENhY2hlcyBKV0tTIHZhbHVlcyBmb3IgYWxsIGNsaWVudHMgY3JlYXRlZCBpbiB0aGUgc2FtZSBlbnZpcm9ubWVudC4gVGhpcyBpc1xuICogZXNwZWNpYWxseSB1c2VmdWwgZm9yIHNoYXJlZC1tZW1vcnkgZXhlY3V0aW9uIGVudmlyb25tZW50cyBzdWNoIGFzIFZlcmNlbCdzXG4gKiBGbHVpZCBDb21wdXRlLCBBV1MgTGFtYmRhIG9yIFN1cGFiYXNlJ3MgRWRnZSBGdW5jdGlvbnMuIFJlZ2FyZGxlc3Mgb2YgaG93XG4gKiBtYW55IGNsaWVudHMgYXJlIGNyZWF0ZWQsIGlmIHRoZXkgc2hhcmUgdGhlIHNhbWUgc3RvcmFnZSBrZXkgdGhleSB3aWxsIHVzZVxuICogdGhlIHNhbWUgSldLUyBjYWNoZSwgc2lnbmlmaWNhbnRseSBzcGVlZGluZyB1cCBnZXRDbGFpbXMoKSB3aXRoIGFzeW1tZXRyaWNcbiAqIEpXVHMuXG4gKi9cbmNvbnN0IEdMT0JBTF9KV0tTID0ge307XG5jbGFzcyBHb1RydWVDbGllbnQge1xuICAgIC8qKlxuICAgICAqIFRoZSBKV0tTIHVzZWQgZm9yIHZlcmlmeWluZyBhc3ltbWV0cmljIEpXVHNcbiAgICAgKi9cbiAgICBnZXQgandrcygpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChfYiA9IChfYSA9IEdMT0JBTF9KV0tTW3RoaXMuc3RvcmFnZUtleV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5qd2tzKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiB7IGtleXM6IFtdIH07XG4gICAgfVxuICAgIHNldCBqd2tzKHZhbHVlKSB7XG4gICAgICAgIEdMT0JBTF9KV0tTW3RoaXMuc3RvcmFnZUtleV0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIEdMT0JBTF9KV0tTW3RoaXMuc3RvcmFnZUtleV0pLCB7IGp3a3M6IHZhbHVlIH0pO1xuICAgIH1cbiAgICBnZXQgandrc19jYWNoZWRfYXQoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSBHTE9CQUxfSldLU1t0aGlzLnN0b3JhZ2VLZXldKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FjaGVkQXQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSO1xuICAgIH1cbiAgICBzZXQgandrc19jYWNoZWRfYXQodmFsdWUpIHtcbiAgICAgICAgR0xPQkFMX0pXS1NbdGhpcy5zdG9yYWdlS2V5XSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgR0xPQkFMX0pXS1NbdGhpcy5zdG9yYWdlS2V5XSksIHsgY2FjaGVkQXQ6IHZhbHVlIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSBuZXcgY2xpZW50IGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBVc2luZyBzdXBhYmFzZS1qcyAocmVjb21tZW5kZWQpXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBjcmVhdGVDbGllbnQgfSBmcm9tICdAc3VwYWJhc2Uvc3VwYWJhc2UtanMnXG4gICAgICpcbiAgICAgKiBjb25zdCBzdXBhYmFzZSA9IGNyZWF0ZUNsaWVudCgnaHR0cHM6Ly94eXpjb21wYW55LnN1cGFiYXNlLmNvJywgJ3lvdXItcHVibGlzaGFibGUta2V5JylcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLmdldFVzZXIoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGUgU3RhbmRhbG9uZSBpbXBvcnQgZm9yIGJ1bmRsZS1zZW5zaXRpdmUgZW52aXJvbm1lbnRzXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBHb1RydWVDbGllbnQgfSBmcm9tICdAc3VwYWJhc2UvYXV0aC1qcydcbiAgICAgKlxuICAgICAqIGNvbnN0IGF1dGggPSBuZXcgR29UcnVlQ2xpZW50KHtcbiAgICAgKiAgIHVybDogJ2h0dHBzOi8veHl6Y29tcGFueS5zdXBhYmFzZS5jby9hdXRoL3YxJyxcbiAgICAgKiAgIGhlYWRlcnM6IHsgYXBpa2V5OiAneW91ci1wdWJsaXNoYWJsZS1rZXknIH0sXG4gICAgICogICBzdG9yYWdlS2V5OiAnc3VwYWJhc2UtYXV0aCcsXG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudXNlclN0b3JhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLm1lbW9yeVN0b3JhZ2UgPSBudWxsO1xuICAgICAgICB0aGlzLnN0YXRlQ2hhbmdlRW1pdHRlcnMgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuYXV0b1JlZnJlc2hUaWNrZXIgPSBudWxsO1xuICAgICAgICB0aGlzLmF1dG9SZWZyZXNoVGlja1RpbWVvdXQgPSBudWxsO1xuICAgICAgICB0aGlzLnZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2sgPSBudWxsO1xuICAgICAgICB0aGlzLnJlZnJlc2hpbmdEZWZlcnJlZCA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBLZWVwcyB0cmFjayBvZiB0aGUgYXN5bmMgY2xpZW50IGluaXRpYWxpemF0aW9uLlxuICAgICAgICAgKiBXaGVuIG51bGwgb3Igbm90IHlldCByZXNvbHZlZCB0aGUgYXV0aCBzdGF0ZSBpcyBgdW5rbm93bmBcbiAgICAgICAgICogT25jZSByZXNvbHZlZCB0aGUgYXV0aCBzdGF0ZSBpcyBrbm93biBhbmQgaXQncyBzYWZlIHRvIGNhbGwgYW55IGZ1cnRoZXIgY2xpZW50IG1ldGhvZHMuXG4gICAgICAgICAqIEtlZXAgZXh0cmEgY2FyZSB0byBuZXZlciByZWplY3Qgb3IgdGhyb3cgdW5jYXVnaHQgZXJyb3JzXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmluaXRpYWxpemVQcm9taXNlID0gbnVsbDtcbiAgICAgICAgdGhpcy5kZXRlY3RTZXNzaW9uSW5VcmwgPSB0cnVlO1xuICAgICAgICB0aGlzLmhhc0N1c3RvbUF1dGhvcml6YXRpb25IZWFkZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdXBwcmVzc0dldFNlc3Npb25XYXJuaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMubG9ja0FjcXVpcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucGVuZGluZ0luTG9jayA9IFtdO1xuICAgICAgICAvKipcbiAgICAgICAgICogVXNlZCB0byBicm9hZGNhc3Qgc3RhdGUgY2hhbmdlIGV2ZW50cyB0byBvdGhlciB0YWJzIGxpc3RlbmluZy5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCA9IG51bGw7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gY29uc29sZS5sb2c7XG4gICAgICAgIGNvbnN0IHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMpLCBvcHRpb25zKTtcbiAgICAgICAgdGhpcy5zdG9yYWdlS2V5ID0gc2V0dGluZ3Muc3RvcmFnZUtleTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZUlEID0gKF9hID0gR29UcnVlQ2xpZW50Lm5leHRJbnN0YW5jZUlEW3RoaXMuc3RvcmFnZUtleV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgIEdvVHJ1ZUNsaWVudC5uZXh0SW5zdGFuY2VJRFt0aGlzLnN0b3JhZ2VLZXldID0gdGhpcy5pbnN0YW5jZUlEICsgMTtcbiAgICAgICAgdGhpcy5sb2dEZWJ1Z01lc3NhZ2VzID0gISFzZXR0aW5ncy5kZWJ1ZztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXR0aW5ncy5kZWJ1ZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIgPSBzZXR0aW5ncy5kZWJ1ZztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5pbnN0YW5jZUlEID4gMCAmJiBpc0Jyb3dzZXIoKSkge1xuICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGAke3RoaXMuX2xvZ1ByZWZpeCgpfSBNdWx0aXBsZSBHb1RydWVDbGllbnQgaW5zdGFuY2VzIGRldGVjdGVkIGluIHRoZSBzYW1lIGJyb3dzZXIgY29udGV4dC4gSXQgaXMgbm90IGFuIGVycm9yLCBidXQgdGhpcyBzaG91bGQgYmUgYXZvaWRlZCBhcyBpdCBtYXkgcHJvZHVjZSB1bmRlZmluZWQgYmVoYXZpb3Igd2hlbiB1c2VkIGNvbmN1cnJlbnRseSB1bmRlciB0aGUgc2FtZSBzdG9yYWdlIGtleS5gO1xuICAgICAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xuICAgICAgICAgICAgaWYgKHRoaXMubG9nRGVidWdNZXNzYWdlcykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUudHJhY2UobWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZXJzaXN0U2Vzc2lvbiA9IHNldHRpbmdzLnBlcnNpc3RTZXNzaW9uO1xuICAgICAgICB0aGlzLmF1dG9SZWZyZXNoVG9rZW4gPSBzZXR0aW5ncy5hdXRvUmVmcmVzaFRva2VuO1xuICAgICAgICB0aGlzLmV4cGVyaW1lbnRhbCA9IChfYiA9IHNldHRpbmdzLmV4cGVyaW1lbnRhbCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDoge307XG4gICAgICAgIHRoaXMuYWRtaW4gPSBuZXcgR29UcnVlQWRtaW5BcGkoe1xuICAgICAgICAgICAgdXJsOiBzZXR0aW5ncy51cmwsXG4gICAgICAgICAgICBoZWFkZXJzOiBzZXR0aW5ncy5oZWFkZXJzLFxuICAgICAgICAgICAgZmV0Y2g6IHNldHRpbmdzLmZldGNoLFxuICAgICAgICAgICAgZXhwZXJpbWVudGFsOiB0aGlzLmV4cGVyaW1lbnRhbCxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXJsID0gc2V0dGluZ3MudXJsO1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBzZXR0aW5ncy5oZWFkZXJzO1xuICAgICAgICB0aGlzLmZldGNoID0gcmVzb2x2ZUZldGNoKHNldHRpbmdzLmZldGNoKTtcbiAgICAgICAgdGhpcy5sb2NrID0gc2V0dGluZ3MubG9jayB8fCBsb2NrTm9PcDtcbiAgICAgICAgdGhpcy5kZXRlY3RTZXNzaW9uSW5VcmwgPSBzZXR0aW5ncy5kZXRlY3RTZXNzaW9uSW5Vcmw7XG4gICAgICAgIHRoaXMuZmxvd1R5cGUgPSBzZXR0aW5ncy5mbG93VHlwZTtcbiAgICAgICAgdGhpcy5oYXNDdXN0b21BdXRob3JpemF0aW9uSGVhZGVyID0gc2V0dGluZ3MuaGFzQ3VzdG9tQXV0aG9yaXphdGlvbkhlYWRlcjtcbiAgICAgICAgdGhpcy50aHJvd09uRXJyb3IgPSBzZXR0aW5ncy50aHJvd09uRXJyb3I7XG4gICAgICAgIHRoaXMubG9ja0FjcXVpcmVUaW1lb3V0ID0gc2V0dGluZ3MubG9ja0FjcXVpcmVUaW1lb3V0O1xuICAgICAgICBpZiAoc2V0dGluZ3MubG9jaykge1xuICAgICAgICAgICAgdGhpcy5sb2NrID0gc2V0dGluZ3MubG9jaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnBlcnNpc3RTZXNzaW9uICYmIGlzQnJvd3NlcigpICYmICgoX2MgPSBnbG9iYWxUaGlzID09PSBudWxsIHx8IGdsb2JhbFRoaXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGdsb2JhbFRoaXMubmF2aWdhdG9yKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubG9ja3MpKSB7XG4gICAgICAgICAgICB0aGlzLmxvY2sgPSBuYXZpZ2F0b3JMb2NrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2NrID0gbG9ja05vT3A7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLmp3a3MpIHtcbiAgICAgICAgICAgIHRoaXMuandrcyA9IHsga2V5czogW10gfTtcbiAgICAgICAgICAgIHRoaXMuandrc19jYWNoZWRfYXQgPSBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1mYSA9IHtcbiAgICAgICAgICAgIHZlcmlmeTogdGhpcy5fdmVyaWZ5LmJpbmQodGhpcyksXG4gICAgICAgICAgICBlbnJvbGw6IHRoaXMuX2Vucm9sbC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdW5lbnJvbGw6IHRoaXMuX3VuZW5yb2xsLmJpbmQodGhpcyksXG4gICAgICAgICAgICBjaGFsbGVuZ2U6IHRoaXMuX2NoYWxsZW5nZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgbGlzdEZhY3RvcnM6IHRoaXMuX2xpc3RGYWN0b3JzLmJpbmQodGhpcyksXG4gICAgICAgICAgICBjaGFsbGVuZ2VBbmRWZXJpZnk6IHRoaXMuX2NoYWxsZW5nZUFuZFZlcmlmeS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZ2V0QXV0aGVudGljYXRvckFzc3VyYW5jZUxldmVsOiB0aGlzLl9nZXRBdXRoZW50aWNhdG9yQXNzdXJhbmNlTGV2ZWwuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHdlYmF1dGhuOiBuZXcgV2ViQXV0aG5BcGkodGhpcyksXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub2F1dGggPSB7XG4gICAgICAgICAgICBnZXRBdXRob3JpemF0aW9uRGV0YWlsczogdGhpcy5fZ2V0QXV0aG9yaXphdGlvbkRldGFpbHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGFwcHJvdmVBdXRob3JpemF0aW9uOiB0aGlzLl9hcHByb3ZlQXV0aG9yaXphdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZGVueUF1dGhvcml6YXRpb246IHRoaXMuX2RlbnlBdXRob3JpemF0aW9uLmJpbmQodGhpcyksXG4gICAgICAgICAgICBsaXN0R3JhbnRzOiB0aGlzLl9saXN0T0F1dGhHcmFudHMuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHJldm9rZUdyYW50OiB0aGlzLl9yZXZva2VPQXV0aEdyYW50LmJpbmQodGhpcyksXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucGFzc2tleSA9IHtcbiAgICAgICAgICAgIHN0YXJ0UmVnaXN0cmF0aW9uOiB0aGlzLl9zdGFydFBhc3NrZXlSZWdpc3RyYXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeVJlZ2lzdHJhdGlvbjogdGhpcy5fdmVyaWZ5UGFzc2tleVJlZ2lzdHJhdGlvbi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgc3RhcnRBdXRoZW50aWNhdGlvbjogdGhpcy5fc3RhcnRQYXNza2V5QXV0aGVudGljYXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeUF1dGhlbnRpY2F0aW9uOiB0aGlzLl92ZXJpZnlQYXNza2V5QXV0aGVudGljYXRpb24uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGxpc3Q6IHRoaXMuX2xpc3RQYXNza2V5cy5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdXBkYXRlOiB0aGlzLl91cGRhdGVQYXNza2V5LmJpbmQodGhpcyksXG4gICAgICAgICAgICBkZWxldGU6IHRoaXMuX2RlbGV0ZVBhc3NrZXkuYmluZCh0aGlzKSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHRoaXMucGVyc2lzdFNlc3Npb24pIHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5ncy5zdG9yYWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yYWdlID0gc2V0dGluZ3Muc3RvcmFnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChzdXBwb3J0c0xvY2FsU3RvcmFnZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZSA9IGdsb2JhbFRoaXMubG9jYWxTdG9yYWdlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZW1vcnlTdG9yYWdlID0ge307XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmFnZSA9IG1lbW9yeUxvY2FsU3RvcmFnZUFkYXB0ZXIodGhpcy5tZW1vcnlTdG9yYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3MudXNlclN0b3JhZ2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJTdG9yYWdlID0gc2V0dGluZ3MudXNlclN0b3JhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1lbW9yeVN0b3JhZ2UgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuc3RvcmFnZSA9IG1lbW9yeUxvY2FsU3RvcmFnZUFkYXB0ZXIodGhpcy5tZW1vcnlTdG9yYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNCcm93c2VyKCkgJiYgZ2xvYmFsVGhpcy5Ccm9hZGNhc3RDaGFubmVsICYmIHRoaXMucGVyc2lzdFNlc3Npb24gJiYgdGhpcy5zdG9yYWdlS2V5KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCA9IG5ldyBnbG9iYWxUaGlzLkJyb2FkY2FzdENoYW5uZWwodGhpcy5zdG9yYWdlS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBhIG5ldyBCcm9hZGNhc3RDaGFubmVsLCBtdWx0aS10YWIgc3RhdGUgY2hhbmdlcyB3aWxsIG5vdCBiZSBhdmFpbGFibGUnLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIChfZCA9IHRoaXMuYnJvYWRjYXN0Q2hhbm5lbCkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygncmVjZWl2ZWQgYnJvYWRjYXN0IG5vdGlmaWNhdGlvbiBmcm9tIG90aGVyIHRhYiBvciBjbGllbnQnLCBldmVudCk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoZXZlbnQuZGF0YS5ldmVudCwgZXZlbnQuZGF0YS5zZXNzaW9uLCBmYWxzZSk7IC8vIGJyb2FkY2FzdCA9IGZhbHNlIHNvIHdlIGRvbid0IGdldCBhbiBlbmRsZXNzIGxvb3Agb2YgbWVzc2FnZXNcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjYnJvYWRjYXN0Q2hhbm5lbCcsICdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBPbmx5IGF1dG8taW5pdGlhbGl6ZSBpZiBub3QgZXhwbGljaXRseSBkaXNhYmxlZC4gU2tpcHBlZCBpbiBTU1IgY29udGV4dHNcbiAgICAgICAgLy8gd2hlcmUgaW5pdGlhbGl6YXRpb24gdGltaW5nIG11c3QgYmUgY29udHJvbGxlZC4gQWxsIHB1YmxpYyBtZXRob2RzIGhhdmVcbiAgICAgICAgLy8gbGF6eSBpbml0aWFsaXphdGlvbiwgc28gdGhlIGNsaWVudCByZW1haW5zIGZ1bGx5IGZ1bmN0aW9uYWwuXG4gICAgICAgIGlmICghc2V0dGluZ3Muc2tpcEF1dG9Jbml0aWFsaXplKSB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemUoKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI2luaXRpYWxpemUoKScsICdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciBlcnJvciB0aHJvd2luZyBtb2RlIGlzIGVuYWJsZWQgZm9yIHRoaXMgY2xpZW50LlxuICAgICAqL1xuICAgIGlzVGhyb3dPbkVycm9yRW5hYmxlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGhyb3dPbkVycm9yO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDZW50cmFsaXplcyByZXR1cm4gaGFuZGxpbmcgd2l0aCBvcHRpb25hbCBlcnJvciB0aHJvd2luZy4gV2hlbiBgdGhyb3dPbkVycm9yYCBpcyBlbmFibGVkXG4gICAgICogYW5kIHRoZSBwcm92aWRlZCByZXN1bHQgY29udGFpbnMgYSBub24tbnVsbGlzaCBlcnJvciwgdGhlIGVycm9yIGlzIHRocm93biBpbnN0ZWFkIG9mXG4gICAgICogYmVpbmcgcmV0dXJuZWQuIFRoaXMgZW5zdXJlcyBjb25zaXN0ZW50IGJlaGF2aW9yIGFjcm9zcyBhbGwgcHVibGljIEFQSSBtZXRob2RzLlxuICAgICAqL1xuICAgIF9yZXR1cm5SZXN1bHQocmVzdWx0KSB7XG4gICAgICAgIGlmICh0aGlzLnRocm93T25FcnJvciAmJiByZXN1bHQgJiYgcmVzdWx0LmVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgX2xvZ1ByZWZpeCgpIHtcbiAgICAgICAgcmV0dXJuICgnR29UcnVlQ2xpZW50QCcgK1xuICAgICAgICAgICAgYCR7dGhpcy5zdG9yYWdlS2V5fToke3RoaXMuaW5zdGFuY2VJRH0gKCR7dmVyc2lvbn0pICR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfWApO1xuICAgIH1cbiAgICBfZGVidWcoLi4uYXJncykge1xuICAgICAgICBpZiAodGhpcy5sb2dEZWJ1Z01lc3NhZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlcih0aGlzLl9sb2dQcmVmaXgoKSwgLi4uYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBjbGllbnQgc2Vzc2lvbiBlaXRoZXIgZnJvbSB0aGUgdXJsIG9yIGZyb20gc3RvcmFnZS5cbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCB3aGVuIGluc3RhbnRpYXRpbmcgdGhlIGNsaWVudCwgYnV0IHNob3VsZCBhbHNvIGJlIGNhbGxlZFxuICAgICAqIG1hbnVhbGx5IHdoZW4gY2hlY2tpbmcgZm9yIGFuIGVycm9yIGZyb20gYW4gYXV0aCByZWRpcmVjdCAob2F1dGgsIG1hZ2ljbGluaywgcGFzc3dvcmQgcmVjb3ZlcnksIGV0YykuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgQXV0aFxuICAgICAqL1xuICAgIGFzeW5jIGluaXRpYWxpemUoKSB7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5pbml0aWFsaXplUHJvbWlzZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluaXRpYWxpemVQcm9taXNlID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9hY3F1aXJlTG9jayh0aGlzLmxvY2tBY3F1aXJlVGltZW91dCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9pbml0aWFsaXplKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElNUE9SVEFOVDpcbiAgICAgKiAxLiBOZXZlciB0aHJvdyBpbiB0aGlzIG1ldGhvZCwgYXMgaXQgaXMgY2FsbGVkIGZyb20gdGhlIGNvbnN0cnVjdG9yXG4gICAgICogMi4gTmV2ZXIgcmV0dXJuIGEgc2Vzc2lvbiBmcm9tIHRoaXMgbWV0aG9kIGFzIGl0IHdvdWxkIGJlIGNhY2hlZCBvdmVyXG4gICAgICogICAgdGhlIHdob2xlIGxpZmV0aW1lIG9mIHRoZSBjbGllbnRcbiAgICAgKi9cbiAgICBhc3luYyBfaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHBhcmFtcyA9IHt9O1xuICAgICAgICAgICAgbGV0IGNhbGxiYWNrVXJsVHlwZSA9ICdub25lJztcbiAgICAgICAgICAgIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHBhcnNlUGFyYW1ldGVyc0Zyb21VUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9pc0ltcGxpY2l0R3JhbnRDYWxsYmFjayhwYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrVXJsVHlwZSA9ICdpbXBsaWNpdCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGF3YWl0IHRoaXMuX2lzUEtDRUNhbGxiYWNrKHBhcmFtcykpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tVcmxUeXBlID0gJ3BrY2UnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQXR0ZW1wdCB0byBnZXQgdGhlIHNlc3Npb24gZnJvbSB0aGUgVVJMIG9ubHkgaWYgdGhlc2UgY29uZGl0aW9ucyBhcmUgZnVsZmlsbGVkXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogTm90ZTogSWYgdGhlIFVSTCBpc24ndCBvbmUgb2YgdGhlIGNhbGxiYWNrIHVybCB0eXBlcyAoaW1wbGljaXQgb3IgcGtjZSksXG4gICAgICAgICAgICAgKiB0aGVuIHRoZXJlIGNvdWxkIGJlIGFuIGV4aXN0aW5nIHNlc3Npb24gc28gd2UgZG9uJ3Qgd2FudCB0byBwcmVtYXR1cmVseSByZW1vdmUgaXRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKGlzQnJvd3NlcigpICYmIHRoaXMuZGV0ZWN0U2Vzc2lvbkluVXJsICYmIGNhbGxiYWNrVXJsVHlwZSAhPT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5fZ2V0U2Vzc2lvbkZyb21VUkwocGFyYW1zLCBjYWxsYmFja1VybFR5cGUpO1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI19pbml0aWFsaXplKCknLCAnZXJyb3IgZGV0ZWN0aW5nIHNlc3Npb24gZnJvbSBVUkwnLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0F1dGhJbXBsaWNpdEdyYW50UmVkaXJlY3RFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yQ29kZSA9IChfYSA9IGVycm9yLmRldGFpbHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb2RlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yQ29kZSA9PT0gJ2lkZW50aXR5X2FscmVhZHlfZXhpc3RzJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yQ29kZSA9PT0gJ2lkZW50aXR5X25vdF9mb3VuZCcgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvckNvZGUgPT09ICdzaW5nbGVfaWRlbnRpdHlfbm90X2RlbGV0YWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvciB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIERvbid0IHJlbW92ZSBleGlzdGluZyBzZXNzaW9uIG9uIFVSTCBsb2dpbiBmYWlsdXJlLlxuICAgICAgICAgICAgICAgICAgICAvLyBBIGZhaWxlZCBhdHRlbXB0IChlLmcuIHJldXNlZCBtYWdpYyBsaW5rKSBzaG91bGRuJ3QgaW52YWxpZGF0ZSBhIHZhbGlkIHNlc3Npb24uXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGVycm9yIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2Vzc2lvbiwgcmVkaXJlY3RUeXBlIH0gPSBkYXRhO1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2luaXRpYWxpemUoKScsICdkZXRlY3RlZCBzZXNzaW9uIGluIFVSTCcsIHNlc3Npb24sICdyZWRpcmVjdCB0eXBlJywgcmVkaXJlY3RUeXBlKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZGlyZWN0VHlwZSA9PT0gJ3JlY292ZXJ5Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1BBU1NXT1JEX1JFQ09WRVJZJywgc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9ub3RpZnlBbGxTdWJzY3JpYmVycygnU0lHTkVEX0lOJywgc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBlcnJvcjogbnVsbCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbm8gbG9naW4gYXR0ZW1wdCB2aWEgY2FsbGJhY2sgdXJsIHRyeSB0byByZWNvdmVyIHNlc3Npb24gZnJvbSBzdG9yYWdlXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9yZWNvdmVyQW5kUmVmcmVzaCgpO1xuICAgICAgICAgICAgcmV0dXJuIHsgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHtcbiAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEF1dGhVbmtub3duRXJyb3IoJ1VuZXhwZWN0ZWQgZXJyb3IgZHVyaW5nIGluaXRpYWxpemF0aW9uJywgZXJyb3IpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKCk7XG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI19pbml0aWFsaXplKCknLCAnZW5kJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBhbm9ueW1vdXMgdXNlci5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIEEgc2Vzc2lvbiB3aGVyZSB0aGUgaXNfYW5vbnltb3VzIGNsYWltIGluIHRoZSBhY2Nlc3MgdG9rZW4gSldUIHNldCB0byB0cnVlXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgQXV0aFxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAtIFJldHVybnMgYW4gYW5vbnltb3VzIHVzZXJcbiAgICAgKiAtIEl0IGlzIHJlY29tbWVuZGVkIHRvIHNldCB1cCBjYXB0Y2hhIGZvciBhbm9ueW1vdXMgc2lnbi1pbnMgdG8gcHJldmVudCBhYnVzZS4gWW91IGNhbiBwYXNzIGluIHRoZSBjYXB0Y2hhIHRva2VuIGluIHRoZSBgb3B0aW9uc2AgcGFyYW0uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBDcmVhdGUgYW4gYW5vbnltb3VzIHVzZXJcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguc2lnbkluQW5vbnltb3VzbHkoe1xuICAgICAqICAgb3B0aW9uczoge1xuICAgICAqICAgICBjYXB0Y2hhVG9rZW5cbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlUmVzcG9uc2UgQ3JlYXRlIGFuIGFub255bW91cyB1c2VyXG4gICAgICogYGBganNvblxuICAgICAqIHtcbiAgICAgKiAgIFwiZGF0YVwiOiB7XG4gICAgICogICAgIFwidXNlclwiOiB7XG4gICAgICogICAgICAgXCJpZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgIFwiYXVkXCI6IFwiYXV0aGVudGljYXRlZFwiLFxuICAgICAqICAgICAgIFwicm9sZVwiOiBcImF1dGhlbnRpY2F0ZWRcIixcbiAgICAgKiAgICAgICBcImVtYWlsXCI6IFwiXCIsXG4gICAgICogICAgICAgXCJwaG9uZVwiOiBcIlwiLFxuICAgICAqICAgICAgIFwibGFzdF9zaWduX2luX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcImFwcF9tZXRhZGF0YVwiOiB7fSxcbiAgICAgKiAgICAgICBcInVzZXJfbWV0YWRhdGFcIjoge30sXG4gICAgICogICAgICAgXCJpZGVudGl0aWVzXCI6IFtdLFxuICAgICAqICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgXCJ1cGRhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcImlzX2Fub255bW91c1wiOiB0cnVlXG4gICAgICogICAgIH0sXG4gICAgICogICAgIFwic2Vzc2lvblwiOiB7XG4gICAgICogICAgICAgXCJhY2Nlc3NfdG9rZW5cIjogXCI8QUNDRVNTX1RPS0VOPlwiLFxuICAgICAqICAgICAgIFwidG9rZW5fdHlwZVwiOiBcImJlYXJlclwiLFxuICAgICAqICAgICAgIFwiZXhwaXJlc19pblwiOiAzNjAwLFxuICAgICAqICAgICAgIFwiZXhwaXJlc19hdFwiOiAxNzAwMDAwMDAwLFxuICAgICAqICAgICAgIFwicmVmcmVzaF90b2tlblwiOiBcIjxSRUZSRVNIX1RPS0VOPlwiLFxuICAgICAqICAgICAgIFwidXNlclwiOiB7XG4gICAgICogICAgICAgICBcImlkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgICBcImF1ZFwiOiBcImF1dGhlbnRpY2F0ZWRcIixcbiAgICAgKiAgICAgICAgIFwicm9sZVwiOiBcImF1dGhlbnRpY2F0ZWRcIixcbiAgICAgKiAgICAgICAgIFwiZW1haWxcIjogXCJcIixcbiAgICAgKiAgICAgICAgIFwicGhvbmVcIjogXCJcIixcbiAgICAgKiAgICAgICAgIFwibGFzdF9zaWduX2luX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgIFwiYXBwX21ldGFkYXRhXCI6IHt9LFxuICAgICAqICAgICAgICAgXCJ1c2VyX21ldGFkYXRhXCI6IHt9LFxuICAgICAqICAgICAgICAgXCJpZGVudGl0aWVzXCI6IFtdLFxuICAgICAqICAgICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICBcImlzX2Fub255bW91c1wiOiB0cnVlXG4gICAgICogICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogICB9LFxuICAgICAqICAgXCJlcnJvclwiOiBudWxsXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGUgQ3JlYXRlIGFuIGFub255bW91cyB1c2VyIHdpdGggY3VzdG9tIHVzZXIgbWV0YWRhdGFcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguc2lnbkluQW5vbnltb3VzbHkoe1xuICAgICAqICAgb3B0aW9uczoge1xuICAgICAqICAgICBkYXRhXG4gICAgICogICB9XG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBzaWduSW5Bbm9ueW1vdXNseShjcmVkZW50aWFscykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L3NpZ251cGAsIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiAoX2IgPSAoX2EgPSBjcmVkZW50aWFscyA9PT0gbnVsbCB8fCBjcmVkZW50aWFscyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRhdGEpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHt9LFxuICAgICAgICAgICAgICAgICAgICBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiAoX2MgPSBjcmVkZW50aWFscyA9PT0gbnVsbCB8fCBjcmVkZW50aWFscyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhcHRjaGFUb2tlbiB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeGZvcm06IF9zZXNzaW9uUmVzcG9uc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHJlcztcbiAgICAgICAgICAgIGlmIChlcnJvciB8fCAhZGF0YSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3I6IGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGRhdGEuc2Vzc2lvbjtcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSBkYXRhLnVzZXI7XG4gICAgICAgICAgICBpZiAoZGF0YS5zZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2F2ZVNlc3Npb24oZGF0YS5zZXNzaW9uKTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9ub3RpZnlBbGxTdWJzY3JpYmVycygnU0lHTkVEX0lOJywgc2Vzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyB1c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgbmV3IHVzZXIuXG4gICAgICpcbiAgICAgKiBCZSBhd2FyZSB0aGF0IGlmIGEgdXNlciBhY2NvdW50IGV4aXN0cyBpbiB0aGUgc3lzdGVtIHlvdSBtYXkgZ2V0IGJhY2sgYW5cbiAgICAgKiBlcnJvciBtZXNzYWdlIHRoYXQgYXR0ZW1wdHMgdG8gaGlkZSB0aGlzIGluZm9ybWF0aW9uIGZyb20gdGhlIHVzZXIuXG4gICAgICogVGhpcyBtZXRob2QgaGFzIHN1cHBvcnQgZm9yIFBLQ0UgdmlhIGVtYWlsIHNpZ251cHMuIFRoZSBQS0NFIGZsb3cgY2Fubm90IGJlIHVzZWQgd2hlbiBhdXRvY29uZmlybSBpcyBlbmFibGVkLlxuICAgICAqXG4gICAgICogQHJldHVybnMgQSBsb2dnZWQtaW4gc2Vzc2lvbiBpZiB0aGUgc2VydmVyIGhhcyBcImF1dG9jb25maXJtXCIgT05cbiAgICAgKiBAcmV0dXJucyBBIHVzZXIgaWYgdGhlIHNlcnZlciBoYXMgXCJhdXRvY29uZmlybVwiIE9GRlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IEF1dGhcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogLSBCeSBkZWZhdWx0LCB0aGUgdXNlciBuZWVkcyB0byB2ZXJpZnkgdGhlaXIgZW1haWwgYWRkcmVzcyBiZWZvcmUgbG9nZ2luZyBpbi4gVG8gdHVybiB0aGlzIG9mZiwgZGlzYWJsZSAqKkNvbmZpcm0gZW1haWwqKiBpbiBbeW91ciBwcm9qZWN0XSgvZGFzaGJvYXJkL3Byb2plY3QvXy9hdXRoL3Byb3ZpZGVycykuXG4gICAgICogLSAqKkNvbmZpcm0gZW1haWwqKiBkZXRlcm1pbmVzIGlmIHVzZXJzIG5lZWQgdG8gY29uZmlybSB0aGVpciBlbWFpbCBhZGRyZXNzIGFmdGVyIHNpZ25pbmcgdXAuXG4gICAgICogICAtIElmICoqQ29uZmlybSBlbWFpbCoqIGlzIGVuYWJsZWQsIGEgYHVzZXJgIGlzIHJldHVybmVkIGJ1dCBgc2Vzc2lvbmAgaXMgbnVsbC5cbiAgICAgKiAgIC0gSWYgKipDb25maXJtIGVtYWlsKiogaXMgZGlzYWJsZWQsIGJvdGggYSBgdXNlcmAgYW5kIGEgYHNlc3Npb25gIGFyZSByZXR1cm5lZC5cbiAgICAgKiAtIFdoZW4gdGhlIHVzZXIgY29uZmlybXMgdGhlaXIgZW1haWwgYWRkcmVzcywgdGhleSBhcmUgcmVkaXJlY3RlZCB0byB0aGUgW2BTSVRFX1VSTGBdKC9kb2NzL2d1aWRlcy9hdXRoL3JlZGlyZWN0LXVybHMjdXNlLXdpbGRjYXJkcy1pbi1yZWRpcmVjdC11cmxzKSBieSBkZWZhdWx0LiBZb3UgY2FuIG1vZGlmeSB5b3VyIGBTSVRFX1VSTGAgb3IgYWRkIGFkZGl0aW9uYWwgcmVkaXJlY3QgVVJMcyBpbiBbeW91ciBwcm9qZWN0XSgvZGFzaGJvYXJkL3Byb2plY3QvXy9hdXRoL3VybC1jb25maWd1cmF0aW9uKS5cbiAgICAgKiAtIElmIHNpZ25VcCgpIGlzIGNhbGxlZCBmb3IgYW4gZXhpc3RpbmcgY29uZmlybWVkIHVzZXI6XG4gICAgICogICAtIFdoZW4gYm90aCAqKkNvbmZpcm0gZW1haWwqKiBhbmQgKipDb25maXJtIHBob25lKiogKGV2ZW4gd2hlbiBwaG9uZSBwcm92aWRlciBpcyBkaXNhYmxlZCkgYXJlIGVuYWJsZWQgaW4gW3lvdXIgcHJvamVjdF0oL2Rhc2hib2FyZC9wcm9qZWN0L18vYXV0aC9wcm92aWRlcnMpLCBhbiBvYmZ1c2NhdGVkL2Zha2UgdXNlciBvYmplY3QgaXMgcmV0dXJuZWQuXG4gICAgICogICAtIFdoZW4gZWl0aGVyICoqQ29uZmlybSBlbWFpbCoqIG9yICoqQ29uZmlybSBwaG9uZSoqIChldmVuIHdoZW4gcGhvbmUgcHJvdmlkZXIgaXMgZGlzYWJsZWQpIGlzIGRpc2FibGVkLCB0aGUgZXJyb3IgbWVzc2FnZSwgYFVzZXIgYWxyZWFkeSByZWdpc3RlcmVkYCBpcyByZXR1cm5lZC5cbiAgICAgKiAtIFRvIGZldGNoIHRoZSBjdXJyZW50bHkgbG9nZ2VkLWluIHVzZXIsIHJlZmVyIHRvIFtgZ2V0VXNlcigpYF0oL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvYXV0aC1nZXR1c2VyKS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFNpZ24gdXAgd2l0aCBhbiBlbWFpbCBhbmQgcGFzc3dvcmRcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguc2lnblVwKHtcbiAgICAgKiAgIGVtYWlsOiAnZXhhbXBsZUBlbWFpbC5jb20nLFxuICAgICAqICAgcGFzc3dvcmQ6ICdleGFtcGxlLXBhc3N3b3JkJyxcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVSZXNwb25zZSBTaWduIHVwIHdpdGggYW4gZW1haWwgYW5kIHBhc3N3b3JkXG4gICAgICogYGBganNvblxuICAgICAqIC8vIFNvbWUgZmllbGRzIG1heSBiZSBudWxsIGlmIFwiY29uZmlybSBlbWFpbFwiIGlzIGVuYWJsZWQuXG4gICAgICoge1xuICAgICAqICAgXCJkYXRhXCI6IHtcbiAgICAgKiAgICAgXCJ1c2VyXCI6IHtcbiAgICAgKiAgICAgICBcImlkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgXCJhdWRcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgXCJyb2xlXCI6IFwiYXV0aGVudGljYXRlZFwiLFxuICAgICAqICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiLFxuICAgICAqICAgICAgIFwiZW1haWxfY29uZmlybWVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcInBob25lXCI6IFwiXCIsXG4gICAgICogICAgICAgXCJsYXN0X3NpZ25faW5fYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwiYXBwX21ldGFkYXRhXCI6IHtcbiAgICAgKiAgICAgICAgIFwicHJvdmlkZXJcIjogXCJlbWFpbFwiLFxuICAgICAqICAgICAgICAgXCJwcm92aWRlcnNcIjogW1xuICAgICAqICAgICAgICAgICBcImVtYWlsXCJcbiAgICAgKiAgICAgICAgIF1cbiAgICAgKiAgICAgICB9LFxuICAgICAqICAgICAgIFwidXNlcl9tZXRhZGF0YVwiOiB7fSxcbiAgICAgKiAgICAgICBcImlkZW50aXRpZXNcIjogW1xuICAgICAqICAgICAgICAge1xuICAgICAqICAgICAgICAgICBcImlkZW50aXR5X2lkXCI6IFwiMjIyMjIyMjItMjIyMi0yMjIyLTIyMjItMjIyMjIyMjIyMjIyXCIsXG4gICAgICogICAgICAgICAgIFwiaWRcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICAgICAgXCJ1c2VyX2lkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgICAgIFwiaWRlbnRpdHlfZGF0YVwiOiB7XG4gICAgICogICAgICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgICAgICAgXCJlbWFpbF92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICAgICBcInBob25lX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICAgIFwic3ViXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCJcbiAgICAgKiAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgXCJwcm92aWRlclwiOiBcImVtYWlsXCIsXG4gICAgICogICAgICAgICAgIFwibGFzdF9zaWduX2luX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgXCJ1cGRhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCJcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICBdLFxuICAgICAqICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgXCJ1cGRhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIlxuICAgICAqICAgICB9LFxuICAgICAqICAgICBcInNlc3Npb25cIjoge1xuICAgICAqICAgICAgIFwiYWNjZXNzX3Rva2VuXCI6IFwiPEFDQ0VTU19UT0tFTj5cIixcbiAgICAgKiAgICAgICBcInRva2VuX3R5cGVcIjogXCJiZWFyZXJcIixcbiAgICAgKiAgICAgICBcImV4cGlyZXNfaW5cIjogMzYwMCxcbiAgICAgKiAgICAgICBcImV4cGlyZXNfYXRcIjogMTcwMDAwMDAwMCxcbiAgICAgKiAgICAgICBcInJlZnJlc2hfdG9rZW5cIjogXCI8UkVGUkVTSF9UT0tFTj5cIixcbiAgICAgKiAgICAgICBcInVzZXJcIjoge1xuICAgICAqICAgICAgICAgXCJpZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgXCJhdWRcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgICBcInJvbGVcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICAgIFwiZW1haWxfY29uZmlybWVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgIFwicGhvbmVcIjogXCJcIixcbiAgICAgKiAgICAgICAgIFwibGFzdF9zaWduX2luX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgIFwiYXBwX21ldGFkYXRhXCI6IHtcbiAgICAgKiAgICAgICAgICAgXCJwcm92aWRlclwiOiBcImVtYWlsXCIsXG4gICAgICogICAgICAgICAgIFwicHJvdmlkZXJzXCI6IFtcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsXCJcbiAgICAgKiAgICAgICAgICAgXVxuICAgICAqICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgIFwidXNlcl9tZXRhZGF0YVwiOiB7fSxcbiAgICAgKiAgICAgICAgIFwiaWRlbnRpdGllc1wiOiBbXG4gICAgICogICAgICAgICAgIHtcbiAgICAgKiAgICAgICAgICAgICBcImlkZW50aXR5X2lkXCI6IFwiMjIyMjIyMjItMjIyMi0yMjIyLTIyMjItMjIyMjIyMjIyMjIyXCIsXG4gICAgICogICAgICAgICAgICAgXCJpZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgICAgIFwidXNlcl9pZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgICAgIFwiaWRlbnRpdHlfZGF0YVwiOiB7XG4gICAgICogICAgICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICAgICAgICAgIFwiZW1haWxfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgICAgICBcInBob25lX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICAgICAgXCJzdWJcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIlxuICAgICAqICAgICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgICAgXCJwcm92aWRlclwiOiBcImVtYWlsXCIsXG4gICAgICogICAgICAgICAgICAgXCJsYXN0X3NpZ25faW5fYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgICAgXCJ1cGRhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIlxuICAgICAqICAgICAgICAgICB9XG4gICAgICogICAgICAgICBdLFxuICAgICAqICAgICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCJcbiAgICAgKiAgICAgICB9XG4gICAgICogICAgIH1cbiAgICAgKiAgIH0sXG4gICAgICogICBcImVycm9yXCI6IG51bGxcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBTaWduIHVwIHdpdGggYSBwaG9uZSBudW1iZXIgYW5kIHBhc3N3b3JkIChTTVMpXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLnNpZ25VcCh7XG4gICAgICogICBwaG9uZTogJzEyMzQ1Njc4OScsXG4gICAgICogICBwYXNzd29yZDogJ2V4YW1wbGUtcGFzc3dvcmQnLFxuICAgICAqICAgb3B0aW9uczoge1xuICAgICAqICAgICBjaGFubmVsOiAnc21zJ1xuICAgICAqICAgfVxuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZURlc2NyaXB0aW9uIFNpZ24gdXAgd2l0aCBhIHBob25lIG51bWJlciBhbmQgcGFzc3dvcmQgKHdoYXRzYXBwKVxuICAgICAqIFRoZSB1c2VyIHdpbGwgYmUgc2VudCBhIFdoYXRzQXBwIG1lc3NhZ2Ugd2hpY2ggY29udGFpbnMgYSBPVFAuIEJ5IGRlZmF1bHQsIGEgZ2l2ZW4gdXNlciBjYW4gb25seSByZXF1ZXN0IGEgT1RQIG9uY2UgZXZlcnkgNjAgc2Vjb25kcy4gTm90ZSB0aGF0IGEgdXNlciB3aWxsIG5lZWQgdG8gaGF2ZSBhIHZhbGlkIFdoYXRzQXBwIGFjY291bnQgdGhhdCBpcyBsaW5rZWQgdG8gVHdpbGlvIGluIG9yZGVyIHRvIHVzZSB0aGlzIGZlYXR1cmUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBTaWduIHVwIHdpdGggYSBwaG9uZSBudW1iZXIgYW5kIHBhc3N3b3JkICh3aGF0c2FwcClcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguc2lnblVwKHtcbiAgICAgKiAgIHBob25lOiAnMTIzNDU2Nzg5JyxcbiAgICAgKiAgIHBhc3N3b3JkOiAnZXhhbXBsZS1wYXNzd29yZCcsXG4gICAgICogICBvcHRpb25zOiB7XG4gICAgICogICAgIGNoYW5uZWw6ICd3aGF0c2FwcCdcbiAgICAgKiAgIH1cbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGUgU2lnbiB1cCB3aXRoIGFkZGl0aW9uYWwgdXNlciBtZXRhZGF0YVxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5zaWduVXAoXG4gICAgICogICB7XG4gICAgICogICAgIGVtYWlsOiAnZXhhbXBsZUBlbWFpbC5jb20nLFxuICAgICAqICAgICBwYXNzd29yZDogJ2V4YW1wbGUtcGFzc3dvcmQnLFxuICAgICAqICAgICBvcHRpb25zOiB7XG4gICAgICogICAgICAgZGF0YToge1xuICAgICAqICAgICAgICAgZmlyc3RfbmFtZTogJ0pvaG4nLFxuICAgICAqICAgICAgICAgYWdlOiAyNyxcbiAgICAgKiAgICAgICB9XG4gICAgICogICAgIH1cbiAgICAgKiAgIH1cbiAgICAgKiApXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZURlc2NyaXB0aW9uIFNpZ24gdXAgd2l0aCBhIHJlZGlyZWN0IFVSTFxuICAgICAqIC0gU2VlIFtyZWRpcmVjdCBVUkxzIGFuZCB3aWxkY2FyZHNdKC9kb2NzL2d1aWRlcy9hdXRoL3JlZGlyZWN0LXVybHMjdXNlLXdpbGRjYXJkcy1pbi1yZWRpcmVjdC11cmxzKSB0byBhZGQgYWRkaXRpb25hbCByZWRpcmVjdCBVUkxzIHRvIHlvdXIgcHJvamVjdC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFNpZ24gdXAgd2l0aCBhIHJlZGlyZWN0IFVSTFxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5zaWduVXAoXG4gICAgICogICB7XG4gICAgICogICAgIGVtYWlsOiAnZXhhbXBsZUBlbWFpbC5jb20nLFxuICAgICAqICAgICBwYXNzd29yZDogJ2V4YW1wbGUtcGFzc3dvcmQnLFxuICAgICAqICAgICBvcHRpb25zOiB7XG4gICAgICogICAgICAgZW1haWxSZWRpcmVjdFRvOiAnaHR0cHM6Ly9leGFtcGxlLmNvbS93ZWxjb21lJ1xuICAgICAqICAgICB9XG4gICAgICogICB9XG4gICAgICogKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIHNpZ25VcChjcmVkZW50aWFscykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCByZXM7XG4gICAgICAgICAgICBpZiAoJ2VtYWlsJyBpbiBjcmVkZW50aWFscykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZW1haWwsIHBhc3N3b3JkLCBvcHRpb25zIH0gPSBjcmVkZW50aWFscztcbiAgICAgICAgICAgICAgICBsZXQgY29kZUNoYWxsZW5nZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IGNvZGVDaGFsbGVuZ2VNZXRob2QgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmZsb3dUeXBlID09PSAncGtjZScpIHtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICAgICBbY29kZUNoYWxsZW5nZSwgY29kZUNoYWxsZW5nZU1ldGhvZF0gPSBhd2FpdCBnZXRDb2RlQ2hhbGxlbmdlQW5kTWV0aG9kKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vc2lnbnVwYCwge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VG86IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5lbWFpbFJlZGlyZWN0VG8sXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3dvcmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZGF0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FwdGNoYVRva2VuIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2NoYWxsZW5nZTogY29kZUNoYWxsZW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfY2hhbGxlbmdlX21ldGhvZDogY29kZUNoYWxsZW5nZU1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgeGZvcm06IF9zZXNzaW9uUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgncGhvbmUnIGluIGNyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBwaG9uZSwgcGFzc3dvcmQsIG9wdGlvbnMgfSA9IGNyZWRlbnRpYWxzO1xuICAgICAgICAgICAgICAgIHJlcyA9IGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L3NpZ251cGAsIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwaG9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmRhdGEpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHt9LFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbDogKF9jID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNoYW5uZWwpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6ICdzbXMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ290cnVlX21ldGFfc2VjdXJpdHk6IHsgY2FwdGNoYV90b2tlbjogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNhcHRjaGFUb2tlbiB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB4Zm9ybTogX3Nlc3Npb25SZXNwb25zZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoSW52YWxpZENyZWRlbnRpYWxzRXJyb3IoJ1lvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIGFuIGVtYWlsIG9yIHBob25lIG51bWJlciBhbmQgYSBwYXNzd29yZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gcmVzO1xuICAgICAgICAgICAgaWYgKGVycm9yIHx8ICFkYXRhKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgcmVtb3ZlSXRlbUFzeW5jKHRoaXMuc3RvcmFnZSwgYCR7dGhpcy5zdG9yYWdlS2V5fS1jb2RlLXZlcmlmaWVyYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvcjogZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gZGF0YS5zZXNzaW9uO1xuICAgICAgICAgICAgY29uc3QgdXNlciA9IGRhdGEudXNlcjtcbiAgICAgICAgICAgIGlmIChkYXRhLnNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihkYXRhLnNlc3Npb24pO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKCdTSUdORURfSU4nLCBzZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHVzZXIsIHNlc3Npb24gfSwgZXJyb3I6IG51bGwgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBhd2FpdCByZW1vdmVJdGVtQXN5bmModGhpcy5zdG9yYWdlLCBgJHt0aGlzLnN0b3JhZ2VLZXl9LWNvZGUtdmVyaWZpZXJgKTtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9nIGluIGFuIGV4aXN0aW5nIHVzZXIgd2l0aCBhbiBlbWFpbCBhbmQgcGFzc3dvcmQgb3IgcGhvbmUgYW5kIHBhc3N3b3JkLlxuICAgICAqXG4gICAgICogQmUgYXdhcmUgdGhhdCB5b3UgbWF5IGdldCBiYWNrIGFuIGVycm9yIG1lc3NhZ2UgdGhhdCB3aWxsIG5vdCBkaXN0aW5ndWlzaFxuICAgICAqIGJldHdlZW4gdGhlIGNhc2VzIHdoZXJlIHRoZSBhY2NvdW50IGRvZXMgbm90IGV4aXN0IG9yIHRoYXQgdGhlXG4gICAgICogZW1haWwvcGhvbmUgYW5kIHBhc3N3b3JkIGNvbWJpbmF0aW9uIGlzIHdyb25nIG9yIHRoYXQgdGhlIGFjY291bnQgY2FuIG9ubHlcbiAgICAgKiBiZSBhY2Nlc3NlZCB2aWEgc29jaWFsIGxvZ2luLlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IEF1dGhcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogLSBSZXF1aXJlcyBlaXRoZXIgYW4gZW1haWwgYW5kIHBhc3N3b3JkIG9yIGEgcGhvbmUgbnVtYmVyIGFuZCBwYXNzd29yZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFNpZ24gaW4gd2l0aCBlbWFpbCBhbmQgcGFzc3dvcmRcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguc2lnbkluV2l0aFBhc3N3b3JkKHtcbiAgICAgKiAgIGVtYWlsOiAnZXhhbXBsZUBlbWFpbC5jb20nLFxuICAgICAqICAgcGFzc3dvcmQ6ICdleGFtcGxlLXBhc3N3b3JkJyxcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVSZXNwb25zZSBTaWduIGluIHdpdGggZW1haWwgYW5kIHBhc3N3b3JkXG4gICAgICogYGBganNvblxuICAgICAqIHtcbiAgICAgKiAgIFwiZGF0YVwiOiB7XG4gICAgICogICAgIFwidXNlclwiOiB7XG4gICAgICogICAgICAgXCJpZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgIFwiYXVkXCI6IFwiYXV0aGVudGljYXRlZFwiLFxuICAgICAqICAgICAgIFwicm9sZVwiOiBcImF1dGhlbnRpY2F0ZWRcIixcbiAgICAgKiAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICBcImVtYWlsX2NvbmZpcm1lZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgXCJwaG9uZVwiOiBcIlwiLFxuICAgICAqICAgICAgIFwibGFzdF9zaWduX2luX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcImFwcF9tZXRhZGF0YVwiOiB7XG4gICAgICogICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgIFwicHJvdmlkZXJzXCI6IFtcbiAgICAgKiAgICAgICAgICAgXCJlbWFpbFwiXG4gICAgICogICAgICAgICBdXG4gICAgICogICAgICAgfSxcbiAgICAgKiAgICAgICBcInVzZXJfbWV0YWRhdGFcIjoge30sXG4gICAgICogICAgICAgXCJpZGVudGl0aWVzXCI6IFtcbiAgICAgKiAgICAgICAgIHtcbiAgICAgKiAgICAgICAgICAgXCJpZGVudGl0eV9pZFwiOiBcIjIyMjIyMjIyLTIyMjItMjIyMi0yMjIyLTIyMjIyMjIyMjIyMlwiLFxuICAgICAqICAgICAgICAgICBcImlkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgICAgIFwidXNlcl9pZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgICBcImlkZW50aXR5X2RhdGFcIjoge1xuICAgICAqICAgICAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiLFxuICAgICAqICAgICAgICAgICAgIFwiZW1haWxfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgICAgXCJwaG9uZV92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICAgICBcInN1YlwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiXG4gICAgICogICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgIFwicHJvdmlkZXJcIjogXCJlbWFpbFwiLFxuICAgICAqICAgICAgICAgICBcImxhc3Rfc2lnbl9pbl9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiXG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgXSxcbiAgICAgKiAgICAgICBcImNyZWF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCJcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgXCJzZXNzaW9uXCI6IHtcbiAgICAgKiAgICAgICBcImFjY2Vzc190b2tlblwiOiBcIjxBQ0NFU1NfVE9LRU4+XCIsXG4gICAgICogICAgICAgXCJ0b2tlbl90eXBlXCI6IFwiYmVhcmVyXCIsXG4gICAgICogICAgICAgXCJleHBpcmVzX2luXCI6IDM2MDAsXG4gICAgICogICAgICAgXCJleHBpcmVzX2F0XCI6IDE3MDAwMDAwMDAsXG4gICAgICogICAgICAgXCJyZWZyZXNoX3Rva2VuXCI6IFwiPFJFRlJFU0hfVE9LRU4+XCIsXG4gICAgICogICAgICAgXCJ1c2VyXCI6IHtcbiAgICAgKiAgICAgICAgIFwiaWRcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICAgIFwiYXVkXCI6IFwiYXV0aGVudGljYXRlZFwiLFxuICAgICAqICAgICAgICAgXCJyb2xlXCI6IFwiYXV0aGVudGljYXRlZFwiLFxuICAgICAqICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgICBcImVtYWlsX2NvbmZpcm1lZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICBcInBob25lXCI6IFwiXCIsXG4gICAgICogICAgICAgICBcImxhc3Rfc2lnbl9pbl9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICBcImFwcF9tZXRhZGF0YVwiOiB7XG4gICAgICogICAgICAgICAgIFwicHJvdmlkZXJcIjogXCJlbWFpbFwiLFxuICAgICAqICAgICAgICAgICBcInByb3ZpZGVyc1wiOiBbXG4gICAgICogICAgICAgICAgICAgXCJlbWFpbFwiXG4gICAgICogICAgICAgICAgIF1cbiAgICAgKiAgICAgICAgIH0sXG4gICAgICogICAgICAgICBcInVzZXJfbWV0YWRhdGFcIjoge30sXG4gICAgICogICAgICAgICBcImlkZW50aXRpZXNcIjogW1xuICAgICAqICAgICAgICAgICB7XG4gICAgICogICAgICAgICAgICAgXCJpZGVudGl0eV9pZFwiOiBcIjIyMjIyMjIyLTIyMjItMjIyMi0yMjIyLTIyMjIyMjIyMjIyMlwiLFxuICAgICAqICAgICAgICAgICAgIFwiaWRcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICAgICAgICBcInVzZXJfaWRcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICAgICAgICBcImlkZW50aXR5X2RhdGFcIjoge1xuICAgICAqICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgICAgICAgICBcImVtYWlsX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICAgICAgXCJwaG9uZV92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICAgICAgIFwic3ViXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCJcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgIFwicHJvdmlkZXJcIjogXCJlbWFpbFwiLFxuICAgICAqICAgICAgICAgICAgIFwibGFzdF9zaWduX2luX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgICBcImNyZWF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCJcbiAgICAgKiAgICAgICAgICAgfVxuICAgICAqICAgICAgICAgXSxcbiAgICAgKiAgICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiXG4gICAgICogICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogICB9LFxuICAgICAqICAgXCJlcnJvclwiOiBudWxsXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGUgU2lnbiBpbiB3aXRoIHBob25lIGFuZCBwYXNzd29yZFxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5zaWduSW5XaXRoUGFzc3dvcmQoe1xuICAgICAqICAgcGhvbmU6ICcrMTMzMzQ0NDU1NTUnLFxuICAgICAqICAgcGFzc3dvcmQ6ICdzb21lLXBhc3N3b3JkJyxcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIHNpZ25JbldpdGhQYXNzd29yZChjcmVkZW50aWFscykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IHJlcztcbiAgICAgICAgICAgIGlmICgnZW1haWwnIGluIGNyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBlbWFpbCwgcGFzc3dvcmQsIG9wdGlvbnMgfSA9IGNyZWRlbnRpYWxzO1xuICAgICAgICAgICAgICAgIHJlcyA9IGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L3Rva2VuP2dyYW50X3R5cGU9cGFzc3dvcmRgLCB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW1haWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXNzd29yZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvdHJ1ZV9tZXRhX3NlY3VyaXR5OiB7IGNhcHRjaGFfdG9rZW46IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXB0Y2hhVG9rZW4gfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgeGZvcm06IF9zZXNzaW9uUmVzcG9uc2VQYXNzd29yZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCdwaG9uZScgaW4gY3JlZGVudGlhbHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHBob25lLCBwYXNzd29yZCwgb3B0aW9ucyB9ID0gY3JlZGVudGlhbHM7XG4gICAgICAgICAgICAgICAgcmVzID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vdG9rZW4/Z3JhbnRfdHlwZT1wYXNzd29yZGAsIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwaG9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhc3N3b3JkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ290cnVlX21ldGFfc2VjdXJpdHk6IHsgY2FwdGNoYV90b2tlbjogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNhcHRjaGFUb2tlbiB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB4Zm9ybTogX3Nlc3Npb25SZXNwb25zZVBhc3N3b3JkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhJbnZhbGlkQ3JlZGVudGlhbHNFcnJvcignWW91IG11c3QgcHJvdmlkZSBlaXRoZXIgYW4gZW1haWwgb3IgcGhvbmUgbnVtYmVyIGFuZCBhIHBhc3N3b3JkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSByZXM7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWRhdGEgfHwgIWRhdGEuc2Vzc2lvbiB8fCAhZGF0YS51c2VyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZFRva2VuRXJyb3IgPSBuZXcgQXV0aEludmFsaWRUb2tlblJlc3BvbnNlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yOiBpbnZhbGlkVG9rZW5FcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLnNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihkYXRhLnNlc3Npb24pO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKCdTSUdORURfSU4nLCBkYXRhLnNlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7XG4gICAgICAgICAgICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbih7IHVzZXI6IGRhdGEudXNlciwgc2Vzc2lvbjogZGF0YS5zZXNzaW9uIH0sIChkYXRhLndlYWtfcGFzc3dvcmQgPyB7IHdlYWtQYXNzd29yZDogZGF0YS53ZWFrX3Bhc3N3b3JkIH0gOiBudWxsKSksXG4gICAgICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9nIGluIGFuIGV4aXN0aW5nIHVzZXIgdmlhIGEgdGhpcmQtcGFydHkgcHJvdmlkZXIuXG4gICAgICogVGhpcyBtZXRob2Qgc3VwcG9ydHMgdGhlIFBLQ0UgZmxvdy5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBBdXRoXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIC0gVGhpcyBtZXRob2QgaXMgdXNlZCBmb3Igc2lnbmluZyBpbiB1c2luZyBbU29jaWFsIExvZ2luIChPQXV0aCkgcHJvdmlkZXJzXSgvZG9jcy9ndWlkZXMvYXV0aCNjb25maWd1cmUtdGhpcmQtcGFydHktcHJvdmlkZXJzKS5cbiAgICAgKiAtIEl0IHdvcmtzIGJ5IHJlZGlyZWN0aW5nIHlvdXIgYXBwbGljYXRpb24gdG8gdGhlIHByb3ZpZGVyJ3MgYXV0aG9yaXphdGlvbiBzY3JlZW4sIGJlZm9yZSBicmluZ2luZyBiYWNrIHRoZSB1c2VyIHRvIHlvdXIgYXBwLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgU2lnbiBpbiB1c2luZyBhIHRoaXJkLXBhcnR5IHByb3ZpZGVyXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLnNpZ25JbldpdGhPQXV0aCh7XG4gICAgICogICBwcm92aWRlcjogJ2dpdGh1YidcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVSZXNwb25zZSBTaWduIGluIHVzaW5nIGEgdGhpcmQtcGFydHkgcHJvdmlkZXJcbiAgICAgKiBgYGBqc29uXG4gICAgICoge1xuICAgICAqICAgZGF0YToge1xuICAgICAqICAgICBwcm92aWRlcjogJ2dpdGh1YicsXG4gICAgICogICAgIHVybDogPFBST1ZJREVSX1VSTF9UT19SRURJUkVDVF9UTz5cbiAgICAgKiAgIH0sXG4gICAgICogICBlcnJvcjogbnVsbFxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlRGVzY3JpcHRpb24gU2lnbiBpbiB1c2luZyBhIHRoaXJkLXBhcnR5IHByb3ZpZGVyIHdpdGggcmVkaXJlY3RcbiAgICAgKiAtIFdoZW4gdGhlIE9BdXRoIHByb3ZpZGVyIHN1Y2Nlc3NmdWxseSBhdXRoZW50aWNhdGVzIHRoZSB1c2VyLCB0aGV5IGFyZSByZWRpcmVjdGVkIHRvIHRoZSBVUkwgc3BlY2lmaWVkIGluIHRoZSBgcmVkaXJlY3RUb2AgcGFyYW1ldGVyLiBUaGlzIHBhcmFtZXRlciBkZWZhdWx0cyB0byB0aGUgW2BTSVRFX1VSTGBdKC9kb2NzL2d1aWRlcy9hdXRoL3JlZGlyZWN0LXVybHMjdXNlLXdpbGRjYXJkcy1pbi1yZWRpcmVjdC11cmxzKS4gSXQgZG9lcyBub3QgcmVkaXJlY3QgdGhlIHVzZXIgaW1tZWRpYXRlbHkgYWZ0ZXIgaW52b2tpbmcgdGhpcyBtZXRob2QuXG4gICAgICogLSBTZWUgW3JlZGlyZWN0IFVSTHMgYW5kIHdpbGRjYXJkc10oL2RvY3MvZ3VpZGVzL2F1dGgvcmVkaXJlY3QtdXJscyN1c2Utd2lsZGNhcmRzLWluLXJlZGlyZWN0LXVybHMpIHRvIGFkZCBhZGRpdGlvbmFsIHJlZGlyZWN0IFVSTHMgdG8geW91ciBwcm9qZWN0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgU2lnbiBpbiB1c2luZyBhIHRoaXJkLXBhcnR5IHByb3ZpZGVyIHdpdGggcmVkaXJlY3RcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguc2lnbkluV2l0aE9BdXRoKHtcbiAgICAgKiAgIHByb3ZpZGVyOiAnZ2l0aHViJyxcbiAgICAgKiAgIG9wdGlvbnM6IHtcbiAgICAgKiAgICAgcmVkaXJlY3RUbzogJ2h0dHBzOi8vZXhhbXBsZS5jb20vd2VsY29tZSdcbiAgICAgKiAgIH1cbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVEZXNjcmlwdGlvbiBTaWduIGluIHdpdGggc2NvcGVzIGFuZCBhY2Nlc3MgcHJvdmlkZXIgdG9rZW5zXG4gICAgICogSWYgeW91IG5lZWQgYWRkaXRpb25hbCBhY2Nlc3MgZnJvbSBhbiBPQXV0aCBwcm92aWRlciwgaW4gb3JkZXIgdG8gYWNjZXNzIHByb3ZpZGVyIHNwZWNpZmljIEFQSXMgaW4gdGhlIG5hbWUgb2YgdGhlIHVzZXIsIHlvdSBjYW4gZG8gdGhpcyBieSBwYXNzaW5nIGluIHRoZSBzY29wZXMgdGhlIHVzZXIgc2hvdWxkIGF1dGhvcml6ZSBmb3IgeW91ciBhcHBsaWNhdGlvbi4gTm90ZSB0aGF0IHRoZSBgc2NvcGVzYCBvcHRpb24gdGFrZXMgaW4gKiphIHNwYWNlLXNlcGFyYXRlZCBsaXN0Kiogb2Ygc2NvcGVzLlxuICAgICAqXG4gICAgICogQmVjYXVzZSBPQXV0aCBzaWduLWluIG9mdGVuIGluY2x1ZGVzIHJlZGlyZWN0cywgeW91IHNob3VsZCByZWdpc3RlciBhbiBgb25BdXRoU3RhdGVDaGFuZ2VgIGNhbGxiYWNrIGltbWVkaWF0ZWx5IGFmdGVyIHlvdSBjcmVhdGUgdGhlIFN1cGFiYXNlIGNsaWVudC4gVGhpcyBjYWxsYmFjayB3aWxsIGxpc3RlbiBmb3IgdGhlIHByZXNlbmNlIG9mIGBwcm92aWRlcl90b2tlbmAgYW5kIGBwcm92aWRlcl9yZWZyZXNoX3Rva2VuYCBwcm9wZXJ0aWVzIG9uIHRoZSBgc2Vzc2lvbmAgb2JqZWN0IGFuZCBzdG9yZSB0aGVtIGluIGxvY2FsIHN0b3JhZ2UuIFRoZSBjbGllbnQgbGlicmFyeSB3aWxsIGVtaXQgdGhlc2UgdmFsdWVzICoqb25seSBvbmNlKiogaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHVzZXIgc2lnbnMgaW4uIFlvdSBjYW4gdGhlbiBhY2Nlc3MgdGhlbSBieSBsb29raW5nIHRoZW0gdXAgaW4gbG9jYWwgc3RvcmFnZSwgb3Igc2VuZCB0aGVtIHRvIHlvdXIgYmFja2VuZCBzZXJ2ZXJzIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcuXG4gICAgICpcbiAgICAgKiBGaW5hbGx5LCBtYWtlIHN1cmUgeW91IHJlbW92ZSB0aGVtIGZyb20gbG9jYWwgc3RvcmFnZSBvbiB0aGUgYFNJR05FRF9PVVRgIGV2ZW50LiBJZiB0aGUgT0F1dGggcHJvdmlkZXIgc3VwcG9ydHMgdG9rZW4gcmV2b2NhdGlvbiwgbWFrZSBzdXJlIHlvdSBjYWxsIHRob3NlIEFQSXMgZWl0aGVyIGZyb20gdGhlIGZyb250ZW5kIG9yIHNjaGVkdWxlIHRoZW0gdG8gYmUgY2FsbGVkIG9uIHRoZSBiYWNrZW5kLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgU2lnbiBpbiB3aXRoIHNjb3BlcyBhbmQgYWNjZXNzIHByb3ZpZGVyIHRva2Vuc1xuICAgICAqIGBgYGpzXG4gICAgICogLy8gUmVnaXN0ZXIgdGhpcyBpbW1lZGlhdGVseSBhZnRlciBjYWxsaW5nIGNyZWF0ZUNsaWVudCFcbiAgICAgKiAvLyBCZWNhdXNlIHNpZ25JbldpdGhPQXV0aCBjYXVzZXMgYSByZWRpcmVjdCwgeW91IG5lZWQgdG8gZmV0Y2ggdGhlXG4gICAgICogLy8gcHJvdmlkZXIgdG9rZW5zIGZyb20gdGhlIGNhbGxiYWNrLlxuICAgICAqIHN1cGFiYXNlLmF1dGgub25BdXRoU3RhdGVDaGFuZ2UoKGV2ZW50LCBzZXNzaW9uKSA9PiB7XG4gICAgICogICBpZiAoc2Vzc2lvbiAmJiBzZXNzaW9uLnByb3ZpZGVyX3Rva2VuKSB7XG4gICAgICogICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnb2F1dGhfcHJvdmlkZXJfdG9rZW4nLCBzZXNzaW9uLnByb3ZpZGVyX3Rva2VuKVxuICAgICAqICAgfVxuICAgICAqXG4gICAgICogICBpZiAoc2Vzc2lvbiAmJiBzZXNzaW9uLnByb3ZpZGVyX3JlZnJlc2hfdG9rZW4pIHtcbiAgICAgKiAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdvYXV0aF9wcm92aWRlcl9yZWZyZXNoX3Rva2VuJywgc2Vzc2lvbi5wcm92aWRlcl9yZWZyZXNoX3Rva2VuKVxuICAgICAqICAgfVxuICAgICAqXG4gICAgICogICBpZiAoZXZlbnQgPT09ICdTSUdORURfT1VUJykge1xuICAgICAqICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ29hdXRoX3Byb3ZpZGVyX3Rva2VuJylcbiAgICAgKiAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKCdvYXV0aF9wcm92aWRlcl9yZWZyZXNoX3Rva2VuJylcbiAgICAgKiAgIH1cbiAgICAgKiB9KVxuICAgICAqXG4gICAgICogLy8gQ2FsbCB0aGlzIG9uIHlvdXIgU2lnbiBpbiB3aXRoIEdpdEh1YiBidXR0b24gdG8gaW5pdGlhdGUgT0F1dGhcbiAgICAgKiAvLyB3aXRoIEdpdEh1YiB3aXRoIHRoZSByZXF1ZXN0ZWQgZWxldmF0ZWQgc2NvcGVzLlxuICAgICAqIGF3YWl0IHN1cGFiYXNlLmF1dGguc2lnbkluV2l0aE9BdXRoKHtcbiAgICAgKiAgIHByb3ZpZGVyOiAnZ2l0aHViJyxcbiAgICAgKiAgIG9wdGlvbnM6IHtcbiAgICAgKiAgICAgc2NvcGVzOiAncmVwbyBnaXN0IG5vdGlmaWNhdGlvbnMnXG4gICAgICogICB9XG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBzaWduSW5XaXRoT0F1dGgoY3JlZGVudGlhbHMpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5faGFuZGxlUHJvdmlkZXJTaWduSW4oY3JlZGVudGlhbHMucHJvdmlkZXIsIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VG86IChfYSA9IGNyZWRlbnRpYWxzLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZWRpcmVjdFRvLFxuICAgICAgICAgICAgc2NvcGVzOiAoX2IgPSBjcmVkZW50aWFscy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2NvcGVzLFxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IChfYyA9IGNyZWRlbnRpYWxzLm9wdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgIHNraXBCcm93c2VyUmVkaXJlY3Q6IChfZCA9IGNyZWRlbnRpYWxzLm9wdGlvbnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5za2lwQnJvd3NlclJlZGlyZWN0LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9nIGluIGFuIGV4aXN0aW5nIHVzZXIgYnkgZXhjaGFuZ2luZyBhbiBBdXRoIENvZGUgaXNzdWVkIGR1cmluZyB0aGUgUEtDRSBmbG93LlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IEF1dGhcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogLSBVc2VkIHdoZW4gYGZsb3dUeXBlYCBpcyBzZXQgdG8gYHBrY2VgIGluIGNsaWVudCBvcHRpb25zLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgRXhjaGFuZ2UgQXV0aCBDb2RlXG4gICAgICogYGBganNcbiAgICAgKiBzdXBhYmFzZS5hdXRoLmV4Y2hhbmdlQ29kZUZvclNlc3Npb24oJzM0ZTc3MGRkLTlmZjktNDE2Yy04N2ZhLTQzYjMxZDdlZjIyNScpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVJlc3BvbnNlIEV4Y2hhbmdlIEF1dGggQ29kZVxuICAgICAqIGBgYGpzb25cbiAgICAgKiB7XG4gICAgICogICBcImRhdGFcIjoge1xuICAgICAqICAgICBzZXNzaW9uOiB7XG4gICAgICogICAgICAgYWNjZXNzX3Rva2VuOiAnPEFDQ0VTU19UT0tFTj4nLFxuICAgICAqICAgICAgIHRva2VuX3R5cGU6ICdiZWFyZXInLFxuICAgICAqICAgICAgIGV4cGlyZXNfaW46IDM2MDAsXG4gICAgICogICAgICAgZXhwaXJlc19hdDogMTcwMDAwMDAwMCxcbiAgICAgKiAgICAgICByZWZyZXNoX3Rva2VuOiAnPFJFRlJFU0hfVE9LRU4+JyxcbiAgICAgKiAgICAgICB1c2VyOiB7XG4gICAgICogICAgICAgICBpZDogJzExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMScsXG4gICAgICogICAgICAgICBhdWQ6ICdhdXRoZW50aWNhdGVkJyxcbiAgICAgKiAgICAgICAgIHJvbGU6ICdhdXRoZW50aWNhdGVkJyxcbiAgICAgKiAgICAgICAgIGVtYWlsOiAnZXhhbXBsZUBlbWFpbC5jb20nXG4gICAgICogICAgICAgICBlbWFpbF9jb25maXJtZWRfYXQ6ICcyMDI0LTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICogICAgICAgICBwaG9uZTogJycsXG4gICAgICogICAgICAgICBjb25maXJtYXRpb25fc2VudF9hdDogJzIwMjQtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgKiAgICAgICAgIGNvbmZpcm1lZF9hdDogJzIwMjQtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgKiAgICAgICAgIGxhc3Rfc2lnbl9pbl9hdDogJzIwMjQtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgKiAgICAgICAgIGFwcF9tZXRhZGF0YToge1xuICAgICAqICAgICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgICAgXCJwcm92aWRlcnNcIjogW1xuICAgICAqICAgICAgICAgICAgIFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgICAgICBcIjxPVEhFUl9QUk9WSURFUj5cIlxuICAgICAqICAgICAgICAgICBdXG4gICAgICogICAgICAgICB9LFxuICAgICAqICAgICAgICAgdXNlcl9tZXRhZGF0YToge1xuICAgICAqICAgICAgICAgICBlbWFpbDogJ2VtYWlsQGVtYWlsLmNvbScsXG4gICAgICogICAgICAgICAgIGVtYWlsX3ZlcmlmaWVkOiB0cnVlLFxuICAgICAqICAgICAgICAgICBmdWxsX25hbWU6ICdVc2VyIE5hbWUnLFxuICAgICAqICAgICAgICAgICBpc3M6ICc8SVNTPicsXG4gICAgICogICAgICAgICAgIG5hbWU6ICdVc2VyIE5hbWUnLFxuICAgICAqICAgICAgICAgICBwaG9uZV92ZXJpZmllZDogZmFsc2UsXG4gICAgICogICAgICAgICAgIHByb3ZpZGVyX2lkOiAnPFBST1ZJREVSX0lEPicsXG4gICAgICogICAgICAgICAgIHN1YjogJzxTVUI+J1xuICAgICAqICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgIGlkZW50aXRpZXM6IFtcbiAgICAgKiAgICAgICAgICAge1xuICAgICAqICAgICAgICAgICAgIFwiaWRlbnRpdHlfaWRcIjogXCIyMjIyMjIyMi0yMjIyLTIyMjItMjIyMi0yMjIyMjIyMjIyMjJcIixcbiAgICAgKiAgICAgICAgICAgICBcImlkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgICAgICAgXCJ1c2VyX2lkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgICAgICAgXCJpZGVudGl0eV9kYXRhXCI6IHtcbiAgICAgKiAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiLFxuICAgICAqICAgICAgICAgICAgICAgXCJlbWFpbF92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICAgICAgIFwicGhvbmVfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgICAgICBcInN1YlwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiXG4gICAgICogICAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgICAgICBcImxhc3Rfc2lnbl9pbl9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICAgIFwiZW1haWxcIjogXCJlbWFpbEBleGFtcGxlLmNvbVwiXG4gICAgICogICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgIHtcbiAgICAgKiAgICAgICAgICAgICBcImlkZW50aXR5X2lkXCI6IFwiMzMzMzMzMzMtMzMzMy0zMzMzLTMzMzMtMzMzMzMzMzMzMzMzXCIsXG4gICAgICogICAgICAgICAgICAgXCJpZFwiOiBcIjxJRD5cIixcbiAgICAgKiAgICAgICAgICAgICBcInVzZXJfaWRcIjogXCI8VVNFUl9JRD5cIixcbiAgICAgKiAgICAgICAgICAgICBcImlkZW50aXR5X2RhdGFcIjoge1xuICAgICAqICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgICAgICAgICBcImVtYWlsX3ZlcmlmaWVkXCI6IHRydWUsXG4gICAgICogICAgICAgICAgICAgICBcImZ1bGxfbmFtZVwiOiBcIlVzZXIgTmFtZVwiLFxuICAgICAqICAgICAgICAgICAgICAgXCJpc3NcIjogXCI8SVNTPlwiLFxuICAgICAqICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiVXNlciBOYW1lXCIsXG4gICAgICogICAgICAgICAgICAgICBcInBob25lX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICAgICAgXCJwcm92aWRlcl9pZFwiOiBcIjxQUk9WSURFUl9JRD5cIixcbiAgICAgKiAgICAgICAgICAgICAgIFwic3ViXCI6IFwiPFNVQj5cIlxuICAgICAqICAgICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgICAgXCJwcm92aWRlclwiOiBcIjxQUk9WSURFUj5cIixcbiAgICAgKiAgICAgICAgICAgICBcImxhc3Rfc2lnbl9pbl9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiXG4gICAgICogICAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIF0sXG4gICAgICogICAgICAgICBjcmVhdGVkX2F0OiAnMjAyNC0wMS0wMVQwMDowMDowMFonLFxuICAgICAqICAgICAgICAgdXBkYXRlZF9hdDogJzIwMjQtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgKiAgICAgICAgIGlzX2Fub255bW91czogZmFsc2VcbiAgICAgKiAgICAgICB9LFxuICAgICAqICAgICAgIHByb3ZpZGVyX3Rva2VuOiAnPFBST1ZJREVSX1RPS0VOPicsXG4gICAgICogICAgICAgcHJvdmlkZXJfcmVmcmVzaF90b2tlbjogJzxQUk9WSURFUl9SRUZSRVNIX1RPS0VOPidcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgdXNlcjoge1xuICAgICAqICAgICAgIGlkOiAnMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExJyxcbiAgICAgKiAgICAgICBhdWQ6ICdhdXRoZW50aWNhdGVkJyxcbiAgICAgKiAgICAgICByb2xlOiAnYXV0aGVudGljYXRlZCcsXG4gICAgICogICAgICAgZW1haWw6ICdleGFtcGxlQGVtYWlsLmNvbScsXG4gICAgICogICAgICAgZW1haWxfY29uZmlybWVkX2F0OiAnMjAyNC0wMS0wMVQwMDowMDowMFonLFxuICAgICAqICAgICAgIHBob25lOiAnJyxcbiAgICAgKiAgICAgICBjb25maXJtYXRpb25fc2VudF9hdDogJzIwMjQtMDEtMDFUMDA6MDA6MDBaJyxcbiAgICAgKiAgICAgICBjb25maXJtZWRfYXQ6ICcyMDI0LTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICogICAgICAgbGFzdF9zaWduX2luX2F0OiAnMjAyNC0wMS0wMVQwMDowMDowMFonLFxuICAgICAqICAgICAgIGFwcF9tZXRhZGF0YToge1xuICAgICAqICAgICAgICAgcHJvdmlkZXI6ICdlbWFpbCcsXG4gICAgICogICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgKiAgICAgICAgICAgXCJlbWFpbFwiLFxuICAgICAqICAgICAgICAgICBcIjxPVEhFUl9QUk9WSURFUj5cIlxuICAgICAqICAgICAgICAgXVxuICAgICAqICAgICAgIH0sXG4gICAgICogICAgICAgdXNlcl9tZXRhZGF0YToge1xuICAgICAqICAgICAgICAgZW1haWw6ICdlbWFpbEBlbWFpbC5jb20nLFxuICAgICAqICAgICAgICAgZW1haWxfdmVyaWZpZWQ6IHRydWUsXG4gICAgICogICAgICAgICBmdWxsX25hbWU6ICdVc2VyIE5hbWUnLFxuICAgICAqICAgICAgICAgaXNzOiAnPElTUz4nLFxuICAgICAqICAgICAgICAgbmFtZTogJ1VzZXIgTmFtZScsXG4gICAgICogICAgICAgICBwaG9uZV92ZXJpZmllZDogZmFsc2UsXG4gICAgICogICAgICAgICBwcm92aWRlcl9pZDogJzxQUk9WSURFUl9JRD4nLFxuICAgICAqICAgICAgICAgc3ViOiAnPFNVQj4nXG4gICAgICogICAgICAgfSxcbiAgICAgKiAgICAgICBpZGVudGl0aWVzOiBbXG4gICAgICogICAgICAgICB7XG4gICAgICogICAgICAgICAgIFwiaWRlbnRpdHlfaWRcIjogXCIyMjIyMjIyMi0yMjIyLTIyMjItMjIyMi0yMjIyMjIyMjIyMjJcIixcbiAgICAgKiAgICAgICAgICAgXCJpZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgICBcInVzZXJfaWRcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICAgICAgXCJpZGVudGl0eV9kYXRhXCI6IHtcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICAgIFwicGhvbmVfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgICAgXCJzdWJcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIlxuICAgICAqICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgICAgXCJsYXN0X3NpZ25faW5fYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICBcImNyZWF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICBcImVtYWlsXCI6IFwiZW1haWxAZXhhbXBsZS5jb21cIlxuICAgICAqICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgIHtcbiAgICAgKiAgICAgICAgICAgXCJpZGVudGl0eV9pZFwiOiBcIjMzMzMzMzMzLTMzMzMtMzMzMy0zMzMzLTMzMzMzMzMzMzMzM1wiLFxuICAgICAqICAgICAgICAgICBcImlkXCI6IFwiPElEPlwiLFxuICAgICAqICAgICAgICAgICBcInVzZXJfaWRcIjogXCI8VVNFUl9JRD5cIixcbiAgICAgKiAgICAgICAgICAgXCJpZGVudGl0eV9kYXRhXCI6IHtcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsX3ZlcmlmaWVkXCI6IHRydWUsXG4gICAgICogICAgICAgICAgICAgXCJmdWxsX25hbWVcIjogXCJVc2VyIE5hbWVcIixcbiAgICAgKiAgICAgICAgICAgICBcImlzc1wiOiBcIjxJU1M+XCIsXG4gICAgICogICAgICAgICAgICAgXCJuYW1lXCI6IFwiVXNlciBOYW1lXCIsXG4gICAgICogICAgICAgICAgICAgXCJwaG9uZV92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICAgICBcInByb3ZpZGVyX2lkXCI6IFwiPFBST1ZJREVSX0lEPlwiLFxuICAgICAqICAgICAgICAgICAgIFwic3ViXCI6IFwiPFNVQj5cIlxuICAgICAqICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICBcInByb3ZpZGVyXCI6IFwiPFBST1ZJREVSPlwiLFxuICAgICAqICAgICAgICAgICBcImxhc3Rfc2lnbl9pbl9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiXG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgXSxcbiAgICAgKiAgICAgICBjcmVhdGVkX2F0OiAnMjAyNC0wMS0wMVQwMDowMDowMFonLFxuICAgICAqICAgICAgIHVwZGF0ZWRfYXQ6ICcyMDI0LTAxLTAxVDAwOjAwOjAwWicsXG4gICAgICogICAgICAgaXNfYW5vbnltb3VzOiBmYWxzZVxuICAgICAqICAgICB9LFxuICAgICAqICAgICByZWRpcmVjdFR5cGU6IG51bGxcbiAgICAgKiAgIH0sXG4gICAgICogICBcImVycm9yXCI6IG51bGxcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgZXhjaGFuZ2VDb2RlRm9yU2Vzc2lvbihhdXRoQ29kZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlO1xuICAgICAgICByZXR1cm4gdGhpcy5fYWNxdWlyZUxvY2sodGhpcy5sb2NrQWNxdWlyZVRpbWVvdXQsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9leGNoYW5nZUNvZGVGb3JTZXNzaW9uKGF1dGhDb2RlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNpZ25zIGluIGEgdXNlciBieSB2ZXJpZnlpbmcgYSBtZXNzYWdlIHNpZ25lZCBieSB0aGUgdXNlcidzIHByaXZhdGUga2V5LlxuICAgICAqIFN1cHBvcnRzIEV0aGVyZXVtICh2aWEgU2lnbi1Jbi1XaXRoLUV0aGVyZXVtKSAmIFNvbGFuYSAoU2lnbi1Jbi1XaXRoLVNvbGFuYSkgc3RhbmRhcmRzLFxuICAgICAqIGJvdGggb2Ygd2hpY2ggZGVyaXZlIGZyb20gdGhlIEVJUC00MzYxIHN0YW5kYXJkXG4gICAgICogV2l0aCBzbGlnaHQgdmFyaWF0aW9uIG9uIFNvbGFuYSdzIHNpZGUuXG4gICAgICogQHJlZmVyZW5jZSBodHRwczovL2VpcHMuZXRoZXJldW0ub3JnL0VJUFMvZWlwLTQzNjFcbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBBdXRoXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIC0gVXNlcyBhIFdlYjMgKEV0aGVyZXVtLCBTb2xhbmEpIHdhbGxldCB0byBzaWduIGEgdXNlciBpbi5cbiAgICAgKiAtIFJlYWQgdXAgb24gdGhlIFtwb3RlbnRpYWwgZm9yIGFidXNlXSgvZG9jcy9ndWlkZXMvYXV0aC9hdXRoLXdlYjMjcG90ZW50aWFsLWZvci1hYnVzZSkgYmVmb3JlIHVzaW5nIGl0LlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgU2lnbiBpbiB3aXRoIFNvbGFuYSBvciBFdGhlcmV1bSAoV2luZG93IEFQSSlcbiAgICAgKiBgYGBqc1xuICAgICAqICAgLy8gdXNlcyB3aW5kb3cuZXRoZXJldW0gZm9yIHRoZSB3YWxsZXRcbiAgICAgKiAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguc2lnbkluV2l0aFdlYjMoe1xuICAgICAqICAgICBjaGFpbjogJ2V0aGVyZXVtJyxcbiAgICAgKiAgICAgc3RhdGVtZW50OiAnSSBhY2NlcHQgdGhlIFRlcm1zIG9mIFNlcnZpY2UgYXQgaHR0cHM6Ly9leGFtcGxlLmNvbS90b3MnXG4gICAgICogICB9KVxuICAgICAqXG4gICAgICogICAvLyB1c2VzIHdpbmRvdy5zb2xhbmEgZm9yIHRoZSB3YWxsZXRcbiAgICAgKiAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguc2lnbkluV2l0aFdlYjMoe1xuICAgICAqICAgICBjaGFpbjogJ3NvbGFuYScsXG4gICAgICogICAgIHN0YXRlbWVudDogJ0kgYWNjZXB0IHRoZSBUZXJtcyBvZiBTZXJ2aWNlIGF0IGh0dHBzOi8vZXhhbXBsZS5jb20vdG9zJ1xuICAgICAqICAgfSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFNpZ24gaW4gd2l0aCBFdGhlcmV1bSAoTWVzc2FnZSBhbmQgU2lnbmF0dXJlKVxuICAgICAqIGBgYGpzXG4gICAgICogICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLnNpZ25JbldpdGhXZWIzKHtcbiAgICAgKiAgICAgY2hhaW46ICdldGhlcmV1bScsXG4gICAgICogICAgIG1lc3NhZ2U6ICc8c2lnbiBpbiB3aXRoIGV0aGVyZXVtIG1lc3NhZ2U+JyxcbiAgICAgKiAgICAgc2lnbmF0dXJlOiAnPGhleCBvZiB0aGUgZXRoZXJldW0gc2lnbmF0dXJlIG92ZXIgdGhlIG1lc3NhZ2U+JyxcbiAgICAgKiAgIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBTaWduIGluIHdpdGggU29sYW5hIChCcmF2ZSlcbiAgICAgKiBgYGBqc1xuICAgICAqICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5zaWduSW5XaXRoV2ViMyh7XG4gICAgICogICAgIGNoYWluOiAnc29sYW5hJyxcbiAgICAgKiAgICAgc3RhdGVtZW50OiAnSSBhY2NlcHQgdGhlIFRlcm1zIG9mIFNlcnZpY2UgYXQgaHR0cHM6Ly9leGFtcGxlLmNvbS90b3MnLFxuICAgICAqICAgICB3YWxsZXQ6IHdpbmRvdy5icmF2ZVNvbGFuYVxuICAgICAqICAgfSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFNpZ24gaW4gd2l0aCBTb2xhbmEgKFdhbGxldCBBZGFwdGVyKVxuICAgICAqIGBgYGpzeFxuICAgICAqICAgZnVuY3Rpb24gU2lnbkluQnV0dG9uKCkge1xuICAgICAqICAgY29uc3Qgd2FsbGV0ID0gdXNlV2FsbGV0KClcbiAgICAgKlxuICAgICAqICAgcmV0dXJuIChcbiAgICAgKiAgICAgPD5cbiAgICAgKiAgICAgICB7d2FsbGV0LmNvbm5lY3RlZCA/IChcbiAgICAgKiAgICAgICAgIDxidXR0b25cbiAgICAgKiAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAqICAgICAgICAgICAgIHN1cGFiYXNlLmF1dGguc2lnbkluV2l0aFdlYjMoe1xuICAgICAqICAgICAgICAgICAgICAgY2hhaW46ICdzb2xhbmEnLFxuICAgICAqICAgICAgICAgICAgICAgc3RhdGVtZW50OiAnSSBhY2NlcHQgdGhlIFRlcm1zIG9mIFNlcnZpY2UgYXQgaHR0cHM6Ly9leGFtcGxlLmNvbS90b3MnLFxuICAgICAqICAgICAgICAgICAgICAgd2FsbGV0LFxuICAgICAqICAgICAgICAgICAgIH0pXG4gICAgICogICAgICAgICAgIH19XG4gICAgICogICAgICAgICA+XG4gICAgICogICAgICAgICAgIFNpZ24gaW4gd2l0aCBTb2xhbmFcbiAgICAgKiAgICAgICAgIDwvYnV0dG9uPlxuICAgICAqICAgICAgICkgOiAoXG4gICAgICogICAgICAgICA8V2FsbGV0TXVsdGlCdXR0b24gLz5cbiAgICAgKiAgICAgICApfVxuICAgICAqICAgICA8Lz5cbiAgICAgKiAgIClcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBmdW5jdGlvbiBBcHAoKSB7XG4gICAgICogICBjb25zdCBlbmRwb2ludCA9IGNsdXN0ZXJBcGlVcmwoJ2Rldm5ldCcpXG4gICAgICogICBjb25zdCB3YWxsZXRzID0gdXNlTWVtbygoKSA9PiBbXSwgW10pXG4gICAgICpcbiAgICAgKiAgIHJldHVybiAoXG4gICAgICogICAgIDxDb25uZWN0aW9uUHJvdmlkZXIgZW5kcG9pbnQ9e2VuZHBvaW50fT5cbiAgICAgKiAgICAgICA8V2FsbGV0UHJvdmlkZXIgd2FsbGV0cz17d2FsbGV0c30+XG4gICAgICogICAgICAgICA8V2FsbGV0TW9kYWxQcm92aWRlcj5cbiAgICAgKiAgICAgICAgICAgPFNpZ25JbkJ1dHRvbiAvPlxuICAgICAqICAgICAgICAgPC9XYWxsZXRNb2RhbFByb3ZpZGVyPlxuICAgICAqICAgICAgIDwvV2FsbGV0UHJvdmlkZXI+XG4gICAgICogICAgIDwvQ29ubmVjdGlvblByb3ZpZGVyPlxuICAgICAqICAgKVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBzaWduSW5XaXRoV2ViMyhjcmVkZW50aWFscykge1xuICAgICAgICBjb25zdCB7IGNoYWluIH0gPSBjcmVkZW50aWFscztcbiAgICAgICAgc3dpdGNoIChjaGFpbikge1xuICAgICAgICAgICAgY2FzZSAnZXRoZXJldW0nOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNpZ25JbldpdGhFdGhlcmV1bShjcmVkZW50aWFscyk7XG4gICAgICAgICAgICBjYXNlICdzb2xhbmEnOlxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNpZ25JbldpdGhTb2xhbmEoY3JlZGVudGlhbHMpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEBzdXBhYmFzZS9hdXRoLWpzOiBVbnN1cHBvcnRlZCBjaGFpbiBcIiR7Y2hhaW59XCJgKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBzaWduSW5XaXRoRXRoZXJldW0oY3JlZGVudGlhbHMpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbTtcbiAgICAgICAgLy8gVE9ETzogZmxhdHRlbiB0eXBlXG4gICAgICAgIGxldCBtZXNzYWdlO1xuICAgICAgICBsZXQgc2lnbmF0dXJlO1xuICAgICAgICBpZiAoJ21lc3NhZ2UnIGluIGNyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gY3JlZGVudGlhbHMubWVzc2FnZTtcbiAgICAgICAgICAgIHNpZ25hdHVyZSA9IGNyZWRlbnRpYWxzLnNpZ25hdHVyZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHsgY2hhaW4sIHdhbGxldCwgc3RhdGVtZW50LCBvcHRpb25zIH0gPSBjcmVkZW50aWFscztcbiAgICAgICAgICAgIGxldCByZXNvbHZlZFdhbGxldDtcbiAgICAgICAgICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHdhbGxldCAhPT0gJ29iamVjdCcgfHwgIShvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudXJsKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0BzdXBhYmFzZS9hdXRoLWpzOiBCb3RoIHdhbGxldCBhbmQgdXJsIG11c3QgYmUgc3BlY2lmaWVkIGluIG5vbi1icm93c2VyIGVudmlyb25tZW50cy4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzb2x2ZWRXYWxsZXQgPSB3YWxsZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygd2FsbGV0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHJlc29sdmVkV2FsbGV0ID0gd2FsbGV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgd2luZG93QW55ID0gd2luZG93O1xuICAgICAgICAgICAgICAgIGlmICgnZXRoZXJldW0nIGluIHdpbmRvd0FueSAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2Ygd2luZG93QW55LmV0aGVyZXVtID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgICAgICAncmVxdWVzdCcgaW4gd2luZG93QW55LmV0aGVyZXVtICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiB3aW5kb3dBbnkuZXRoZXJldW0ucmVxdWVzdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlZFdhbGxldCA9IHdpbmRvd0FueS5ldGhlcmV1bTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL2F1dGgtanM6IE5vIGNvbXBhdGlibGUgRXRoZXJldW0gd2FsbGV0IGludGVyZmFjZSBvbiB0aGUgd2luZG93IG9iamVjdCAod2luZG93LmV0aGVyZXVtKSBkZXRlY3RlZC4gTWFrZSBzdXJlIHRoZSB1c2VyIGFscmVhZHkgaGFzIGEgd2FsbGV0IGluc3RhbGxlZCBhbmQgY29ubmVjdGVkIGZvciB0aGlzIGFwcC4gUHJlZmVyIHBhc3NpbmcgdGhlIHdhbGxldCBpbnRlcmZhY2Ugb2JqZWN0IGRpcmVjdGx5IHRvIHNpZ25JbldpdGhXZWIzKHsgY2hhaW46ICdldGhlcmV1bScsIHdhbGxldDogcmVzb2x2ZWRVc2VyV2FsbGV0IH0pIGluc3RlYWQuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdXJsID0gbmV3IFVSTCgoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudXJsKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgICAgICAgICBjb25zdCBhY2NvdW50cyA9IGF3YWl0IHJlc29sdmVkV2FsbGV0XG4gICAgICAgICAgICAgICAgLnJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgIG1ldGhvZDogJ2V0aF9yZXF1ZXN0QWNjb3VudHMnLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoYWNjcykgPT4gYWNjcylcbiAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL2F1dGgtanM6IFdhbGxldCBtZXRob2QgZXRoX3JlcXVlc3RBY2NvdW50cyBpcyBtaXNzaW5nIG9yIGludmFsaWRgKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFhY2NvdW50cyB8fCBhY2NvdW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEBzdXBhYmFzZS9hdXRoLWpzOiBObyBhY2NvdW50cyBhdmFpbGFibGUuIFBsZWFzZSBlbnN1cmUgdGhlIHdhbGxldCBpcyBjb25uZWN0ZWQuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhZGRyZXNzID0gZ2V0QWRkcmVzcyhhY2NvdW50c1swXSk7XG4gICAgICAgICAgICBsZXQgY2hhaW5JZCA9IChfYiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zaWduSW5XaXRoRXRoZXJldW0pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jaGFpbklkO1xuICAgICAgICAgICAgaWYgKCFjaGFpbklkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2hhaW5JZEhleCA9IGF3YWl0IHJlc29sdmVkV2FsbGV0LnJlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdldGhfY2hhaW5JZCcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY2hhaW5JZCA9IGZyb21IZXgoY2hhaW5JZEhleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzaXdlTWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgICBkb21haW46IHVybC5ob3N0LFxuICAgICAgICAgICAgICAgIGFkZHJlc3M6IGFkZHJlc3MsXG4gICAgICAgICAgICAgICAgc3RhdGVtZW50OiBzdGF0ZW1lbnQsXG4gICAgICAgICAgICAgICAgdXJpOiB1cmwuaHJlZixcbiAgICAgICAgICAgICAgICB2ZXJzaW9uOiAnMScsXG4gICAgICAgICAgICAgICAgY2hhaW5JZDogY2hhaW5JZCxcbiAgICAgICAgICAgICAgICBub25jZTogKF9jID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNpZ25JbldpdGhFdGhlcmV1bSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLm5vbmNlLFxuICAgICAgICAgICAgICAgIGlzc3VlZEF0OiAoX2YgPSAoX2QgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2lnbkluV2l0aEV0aGVyZXVtKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuaXNzdWVkQXQpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgZXhwaXJhdGlvblRpbWU6IChfZyA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zaWduSW5XaXRoRXRoZXJldW0pID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZy5leHBpcmF0aW9uVGltZSxcbiAgICAgICAgICAgICAgICBub3RCZWZvcmU6IChfaCA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zaWduSW5XaXRoRXRoZXJldW0pID09PSBudWxsIHx8IF9oID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaC5ub3RCZWZvcmUsXG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiAoX2ogPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2lnbkluV2l0aEV0aGVyZXVtKSA9PT0gbnVsbCB8fCBfaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2oucmVxdWVzdElkLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogKF9rID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNpZ25JbldpdGhFdGhlcmV1bSkgPT09IG51bGwgfHwgX2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9rLnJlc291cmNlcyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBtZXNzYWdlID0gY3JlYXRlU2l3ZU1lc3NhZ2Uoc2l3ZU1lc3NhZ2UpO1xuICAgICAgICAgICAgLy8gU2lnbiBtZXNzYWdlXG4gICAgICAgICAgICBzaWduYXR1cmUgPSAoYXdhaXQgcmVzb2x2ZWRXYWxsZXQucmVxdWVzdCh7XG4gICAgICAgICAgICAgICAgbWV0aG9kOiAncGVyc29uYWxfc2lnbicsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBbdG9IZXgobWVzc2FnZSksIGFkZHJlc3NdLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS90b2tlbj9ncmFudF90eXBlPXdlYjNgLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIGJvZHk6IE9iamVjdC5hc3NpZ24oeyBjaGFpbjogJ2V0aGVyZXVtJywgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlIH0sICgoKF9sID0gY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2wgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9sLmNhcHRjaGFUb2tlbilcbiAgICAgICAgICAgICAgICAgICAgPyB7IGdvdHJ1ZV9tZXRhX3NlY3VyaXR5OiB7IGNhcHRjaGFfdG9rZW46IChfbSA9IGNyZWRlbnRpYWxzLm9wdGlvbnMpID09PSBudWxsIHx8IF9tID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbS5jYXB0Y2hhVG9rZW4gfSB9XG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCkpLFxuICAgICAgICAgICAgICAgIHhmb3JtOiBfc2Vzc2lvblJlc3BvbnNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5zZXNzaW9uIHx8ICFkYXRhLnVzZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnZhbGlkVG9rZW5FcnJvciA9IG5ldyBBdXRoSW52YWxpZFRva2VuUmVzcG9uc2VFcnJvcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3I6IGludmFsaWRUb2tlbkVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEuc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKGRhdGEuc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1NJR05FRF9JTicsIGRhdGEuc2Vzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZGF0YSksIGVycm9yIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBzaWduSW5XaXRoU29sYW5hKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2YsIF9nLCBfaCwgX2osIF9rLCBfbCwgX20sIF9vO1xuICAgICAgICBsZXQgbWVzc2FnZTtcbiAgICAgICAgbGV0IHNpZ25hdHVyZTtcbiAgICAgICAgaWYgKCdtZXNzYWdlJyBpbiBjcmVkZW50aWFscykge1xuICAgICAgICAgICAgbWVzc2FnZSA9IGNyZWRlbnRpYWxzLm1lc3NhZ2U7XG4gICAgICAgICAgICBzaWduYXR1cmUgPSBjcmVkZW50aWFscy5zaWduYXR1cmU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB7IGNoYWluLCB3YWxsZXQsIHN0YXRlbWVudCwgb3B0aW9ucyB9ID0gY3JlZGVudGlhbHM7XG4gICAgICAgICAgICBsZXQgcmVzb2x2ZWRXYWxsZXQ7XG4gICAgICAgICAgICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB3YWxsZXQgIT09ICdvYmplY3QnIHx8ICEob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnVybCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdAc3VwYWJhc2UvYXV0aC1qczogQm90aCB3YWxsZXQgYW5kIHVybCBtdXN0IGJlIHNwZWNpZmllZCBpbiBub24tYnJvd3NlciBlbnZpcm9ubWVudHMuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc29sdmVkV2FsbGV0ID0gd2FsbGV0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHdhbGxldCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlZFdhbGxldCA9IHdhbGxldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdpbmRvd0FueSA9IHdpbmRvdztcbiAgICAgICAgICAgICAgICBpZiAoJ3NvbGFuYScgaW4gd2luZG93QW55ICYmXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiB3aW5kb3dBbnkuc29sYW5hID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgICAgICAoKCdzaWduSW4nIGluIHdpbmRvd0FueS5zb2xhbmEgJiYgdHlwZW9mIHdpbmRvd0FueS5zb2xhbmEuc2lnbkluID09PSAnZnVuY3Rpb24nKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKCdzaWduTWVzc2FnZScgaW4gd2luZG93QW55LnNvbGFuYSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB3aW5kb3dBbnkuc29sYW5hLnNpZ25NZXNzYWdlID09PSAnZnVuY3Rpb24nKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZWRXYWxsZXQgPSB3aW5kb3dBbnkuc29sYW5hO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBAc3VwYWJhc2UvYXV0aC1qczogTm8gY29tcGF0aWJsZSBTb2xhbmEgd2FsbGV0IGludGVyZmFjZSBvbiB0aGUgd2luZG93IG9iamVjdCAod2luZG93LnNvbGFuYSkgZGV0ZWN0ZWQuIE1ha2Ugc3VyZSB0aGUgdXNlciBhbHJlYWR5IGhhcyBhIHdhbGxldCBpbnN0YWxsZWQgYW5kIGNvbm5lY3RlZCBmb3IgdGhpcyBhcHAuIFByZWZlciBwYXNzaW5nIHRoZSB3YWxsZXQgaW50ZXJmYWNlIG9iamVjdCBkaXJlY3RseSB0byBzaWduSW5XaXRoV2ViMyh7IGNoYWluOiAnc29sYW5hJywgd2FsbGV0OiByZXNvbHZlZFVzZXJXYWxsZXQgfSkgaW5zdGVhZC5gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKChfYSA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy51cmwpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICAgICAgICAgIGlmICgnc2lnbkluJyBpbiByZXNvbHZlZFdhbGxldCAmJiByZXNvbHZlZFdhbGxldC5zaWduSW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCByZXNvbHZlZFdhbGxldC5zaWduSW4oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oeyBpc3N1ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zaWduSW5XaXRoU29sYW5hKSwgeyBcbiAgICAgICAgICAgICAgICAgICAgLy8gbm9uLW92ZXJyaWRhYmxlIHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICAgICAgdmVyc2lvbjogJzEnLCBkb21haW46IHVybC5ob3N0LCB1cmk6IHVybC5ocmVmIH0pLCAoc3RhdGVtZW50ID8geyBzdGF0ZW1lbnQgfSA6IG51bGwpKSk7XG4gICAgICAgICAgICAgICAgbGV0IG91dHB1dFRvUHJvY2VzcztcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvdXRwdXQpICYmIG91dHB1dFswXSAmJiB0eXBlb2Ygb3V0cHV0WzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRUb1Byb2Nlc3MgPSBvdXRwdXRbMF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKG91dHB1dCAmJlxuICAgICAgICAgICAgICAgICAgICB0eXBlb2Ygb3V0cHV0ID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgICAgICAgICAnc2lnbmVkTWVzc2FnZScgaW4gb3V0cHV0ICYmXG4gICAgICAgICAgICAgICAgICAgICdzaWduYXR1cmUnIGluIG91dHB1dCkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRUb1Byb2Nlc3MgPSBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0BzdXBhYmFzZS9hdXRoLWpzOiBXYWxsZXQgbWV0aG9kIHNpZ25JbigpIHJldHVybmVkIHVucmVjb2duaXplZCB2YWx1ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoJ3NpZ25lZE1lc3NhZ2UnIGluIG91dHB1dFRvUHJvY2VzcyAmJlxuICAgICAgICAgICAgICAgICAgICAnc2lnbmF0dXJlJyBpbiBvdXRwdXRUb1Byb2Nlc3MgJiZcbiAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiBvdXRwdXRUb1Byb2Nlc3Muc2lnbmVkTWVzc2FnZSA9PT0gJ3N0cmluZycgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFRvUHJvY2Vzcy5zaWduZWRNZXNzYWdlIGluc3RhbmNlb2YgVWludDhBcnJheSkgJiZcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0VG9Qcm9jZXNzLnNpZ25hdHVyZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2Ygb3V0cHV0VG9Qcm9jZXNzLnNpZ25lZE1lc3NhZ2UgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBvdXRwdXRUb1Byb2Nlc3Muc2lnbmVkTWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG91dHB1dFRvUHJvY2Vzcy5zaWduZWRNZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gb3V0cHV0VG9Qcm9jZXNzLnNpZ25hdHVyZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQHN1cGFiYXNlL2F1dGgtanM6IFdhbGxldCBtZXRob2Qgc2lnbkluKCkgQVBJIHJldHVybmVkIG9iamVjdCB3aXRob3V0IHNpZ25lZE1lc3NhZ2UgYW5kIHNpZ25hdHVyZSBmaWVsZHMnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoISgnc2lnbk1lc3NhZ2UnIGluIHJlc29sdmVkV2FsbGV0KSB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVzb2x2ZWRXYWxsZXQuc2lnbk1lc3NhZ2UgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgICAgICAgICAgICAgISgncHVibGljS2V5JyBpbiByZXNvbHZlZFdhbGxldCkgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHJlc29sdmVkV2FsbGV0ICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICAgICAgICAgICAgICAhcmVzb2x2ZWRXYWxsZXQucHVibGljS2V5IHx8XG4gICAgICAgICAgICAgICAgICAgICEoJ3RvQmFzZTU4JyBpbiByZXNvbHZlZFdhbGxldC5wdWJsaWNLZXkpIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiByZXNvbHZlZFdhbGxldC5wdWJsaWNLZXkudG9CYXNlNTggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdAc3VwYWJhc2UvYXV0aC1qczogV2FsbGV0IGRvZXMgbm90IGhhdmUgYSBjb21wYXRpYmxlIHNpZ25NZXNzYWdlKCkgYW5kIHB1YmxpY0tleS50b0Jhc2U1OCgpIEFQSScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gW1xuICAgICAgICAgICAgICAgICAgICBgJHt1cmwuaG9zdH0gd2FudHMgeW91IHRvIHNpZ24gaW4gd2l0aCB5b3VyIFNvbGFuYSBhY2NvdW50OmAsXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmVkV2FsbGV0LnB1YmxpY0tleS50b0Jhc2U1OCgpLFxuICAgICAgICAgICAgICAgICAgICAuLi4oc3RhdGVtZW50ID8gWycnLCBzdGF0ZW1lbnQsICcnXSA6IFsnJ10pLFxuICAgICAgICAgICAgICAgICAgICAnVmVyc2lvbjogMScsXG4gICAgICAgICAgICAgICAgICAgIGBVUkk6ICR7dXJsLmhyZWZ9YCxcbiAgICAgICAgICAgICAgICAgICAgYElzc3VlZCBBdDogJHsoX2MgPSAoX2IgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2lnbkluV2l0aFNvbGFuYSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmlzc3VlZEF0KSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9YCxcbiAgICAgICAgICAgICAgICAgICAgLi4uKCgoX2QgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2lnbkluV2l0aFNvbGFuYSkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLm5vdEJlZm9yZSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gW2BOb3QgQmVmb3JlOiAke29wdGlvbnMuc2lnbkluV2l0aFNvbGFuYS5ub3RCZWZvcmV9YF1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgICAgICAgICAuLi4oKChfZiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zaWduSW5XaXRoU29sYW5hKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2YuZXhwaXJhdGlvblRpbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFtgRXhwaXJhdGlvbiBUaW1lOiAke29wdGlvbnMuc2lnbkluV2l0aFNvbGFuYS5leHBpcmF0aW9uVGltZX1gXVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgICAgICAgICAgIC4uLigoKF9nID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNpZ25JbldpdGhTb2xhbmEpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZy5jaGFpbklkKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBbYENoYWluIElEOiAke29wdGlvbnMuc2lnbkluV2l0aFNvbGFuYS5jaGFpbklkfWBdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKCgoX2ggPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2lnbkluV2l0aFNvbGFuYSkgPT09IG51bGwgfHwgX2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9oLm5vbmNlKSA/IFtgTm9uY2U6ICR7b3B0aW9ucy5zaWduSW5XaXRoU29sYW5hLm5vbmNlfWBdIDogW10pLFxuICAgICAgICAgICAgICAgICAgICAuLi4oKChfaiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zaWduSW5XaXRoU29sYW5hKSA9PT0gbnVsbCB8fCBfaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2oucmVxdWVzdElkKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBbYFJlcXVlc3QgSUQ6ICR7b3B0aW9ucy5zaWduSW5XaXRoU29sYW5hLnJlcXVlc3RJZH1gXVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgICAgICAgICAgIC4uLigoKF9sID0gKF9rID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNpZ25JbldpdGhTb2xhbmEpID09PSBudWxsIHx8IF9rID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfay5yZXNvdXJjZXMpID09PSBudWxsIHx8IF9sID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfbC5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnUmVzb3VyY2VzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5vcHRpb25zLnNpZ25JbldpdGhTb2xhbmEucmVzb3VyY2VzLm1hcCgocmVzb3VyY2UpID0+IGAtICR7cmVzb3VyY2V9YCksXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgICAgICBdLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1heWJlU2lnbmF0dXJlID0gYXdhaXQgcmVzb2x2ZWRXYWxsZXQuc2lnbk1lc3NhZ2UobmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKG1lc3NhZ2UpLCAndXRmOCcpO1xuICAgICAgICAgICAgICAgIGlmICghbWF5YmVTaWduYXR1cmUgfHwgIShtYXliZVNpZ25hdHVyZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQHN1cGFiYXNlL2F1dGgtanM6IFdhbGxldCBzaWduTWVzc2FnZSgpIEFQSSByZXR1cm5lZCBhbiByZWNvZ25pemVkIHZhbHVlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IG1heWJlU2lnbmF0dXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS90b2tlbj9ncmFudF90eXBlPXdlYjNgLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIGJvZHk6IE9iamVjdC5hc3NpZ24oeyBjaGFpbjogJ3NvbGFuYScsIG1lc3NhZ2UsIHNpZ25hdHVyZTogYnl0ZXNUb0Jhc2U2NFVSTChzaWduYXR1cmUpIH0sICgoKF9tID0gY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX20gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9tLmNhcHRjaGFUb2tlbilcbiAgICAgICAgICAgICAgICAgICAgPyB7IGdvdHJ1ZV9tZXRhX3NlY3VyaXR5OiB7IGNhcHRjaGFfdG9rZW46IChfbyA9IGNyZWRlbnRpYWxzLm9wdGlvbnMpID09PSBudWxsIHx8IF9vID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfby5jYXB0Y2hhVG9rZW4gfSB9XG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCkpLFxuICAgICAgICAgICAgICAgIHhmb3JtOiBfc2Vzc2lvblJlc3BvbnNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZGF0YSB8fCAhZGF0YS5zZXNzaW9uIHx8ICFkYXRhLnVzZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnZhbGlkVG9rZW5FcnJvciA9IG5ldyBBdXRoSW52YWxpZFRva2VuUmVzcG9uc2VFcnJvcigpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3I6IGludmFsaWRUb2tlbkVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEuc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKGRhdGEuc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1NJR05FRF9JTicsIGRhdGEuc2Vzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogT2JqZWN0LmFzc2lnbih7fSwgZGF0YSksIGVycm9yIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBfZXhjaGFuZ2VDb2RlRm9yU2Vzc2lvbihhdXRoQ29kZSkge1xuICAgICAgICBjb25zdCBzdG9yYWdlSXRlbSA9IGF3YWl0IGdldEl0ZW1Bc3luYyh0aGlzLnN0b3JhZ2UsIGAke3RoaXMuc3RvcmFnZUtleX0tY29kZS12ZXJpZmllcmApO1xuICAgICAgICBjb25zdCBbY29kZVZlcmlmaWVyLCByZWRpcmVjdFR5cGVdID0gKHN0b3JhZ2VJdGVtICE9PSBudWxsICYmIHN0b3JhZ2VJdGVtICE9PSB2b2lkIDAgPyBzdG9yYWdlSXRlbSA6ICcnKS5zcGxpdCgnLycpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCFjb2RlVmVyaWZpZXIgJiYgdGhpcy5mbG93VHlwZSA9PT0gJ3BrY2UnKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhQS0NFQ29kZVZlcmlmaWVyTWlzc2luZ0Vycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS90b2tlbj9ncmFudF90eXBlPXBrY2VgLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgYXV0aF9jb2RlOiBhdXRoQ29kZSxcbiAgICAgICAgICAgICAgICAgICAgY29kZV92ZXJpZmllcjogY29kZVZlcmlmaWVyLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeGZvcm06IF9zZXNzaW9uUmVzcG9uc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0IHJlbW92ZUl0ZW1Bc3luYyh0aGlzLnN0b3JhZ2UsIGAke3RoaXMuc3RvcmFnZUtleX0tY29kZS12ZXJpZmllcmApO1xuICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWRhdGEgfHwgIWRhdGEuc2Vzc2lvbiB8fCAhZGF0YS51c2VyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZFRva2VuRXJyb3IgPSBuZXcgQXV0aEludmFsaWRUb2tlblJlc3BvbnNlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsLCByZWRpcmVjdFR5cGU6IG51bGwgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGludmFsaWRUb2tlbkVycm9yLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEuc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKGRhdGEuc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMocmVkaXJlY3RUeXBlID09PSAncmVjb3ZlcnknID8gJ1BBU1NXT1JEX1JFQ09WRVJZJyA6ICdTSUdORURfSU4nLCBkYXRhLnNlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGF0YSksIHsgcmVkaXJlY3RUeXBlOiByZWRpcmVjdFR5cGUgIT09IG51bGwgJiYgcmVkaXJlY3RUeXBlICE9PSB2b2lkIDAgPyByZWRpcmVjdFR5cGUgOiBudWxsIH0pLCBlcnJvciB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGF3YWl0IHJlbW92ZUl0ZW1Bc3luYyh0aGlzLnN0b3JhZ2UsIGAke3RoaXMuc3RvcmFnZUtleX0tY29kZS12ZXJpZmllcmApO1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwsIHJlZGlyZWN0VHlwZTogbnVsbCB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFsbG93cyBzaWduaW5nIGluIHdpdGggYW4gT0lEQyBJRCB0b2tlbi4gVGhlIGF1dGhlbnRpY2F0aW9uIHByb3ZpZGVyIHVzZWRcbiAgICAgKiBzaG91bGQgYmUgZW5hYmxlZCBhbmQgY29uZmlndXJlZC5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBBdXRoXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIC0gVXNlIGFuIElEIHRva2VuIHRvIHNpZ24gaW4uXG4gICAgICogLSBFc3BlY2lhbGx5IHVzZWZ1bCB3aGVuIGltcGxlbWVudGluZyBzaWduIGluIHVzaW5nIG5hdGl2ZSBwbGF0Zm9ybSBkaWFsb2dzIGluIG1vYmlsZSBvciBkZXNrdG9wIGFwcHMgdXNpbmcgU2lnbiBpbiB3aXRoIEFwcGxlIG9yIFNpZ24gaW4gd2l0aCBHb29nbGUgb24gaU9TIGFuZCBBbmRyb2lkLlxuICAgICAqIC0gWW91IGNhbiBhbHNvIHVzZSBHb29nbGUncyBbT25lIFRhcF0oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vaWRlbnRpdHkvZ3NpL3dlYi9ndWlkZXMvZGlzcGxheS1nb29nbGUtb25lLXRhcCkgYW5kIFtBdXRvbWF0aWMgc2lnbi1pbl0oaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vaWRlbnRpdHkvZ3NpL3dlYi9ndWlkZXMvYXV0b21hdGljLXNpZ24taW4tc2lnbi1vdXQpIHZpYSB0aGlzIEFQSS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFNpZ24gSW4gdXNpbmcgSUQgVG9rZW5cbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguc2lnbkluV2l0aElkVG9rZW4oe1xuICAgICAqICAgcHJvdmlkZXI6ICdnb29nbGUnLFxuICAgICAqICAgdG9rZW46ICd5b3VyLWlkLXRva2VuJ1xuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVJlc3BvbnNlIFNpZ24gSW4gdXNpbmcgSUQgVG9rZW5cbiAgICAgKiBgYGBqc29uXG4gICAgICoge1xuICAgICAqICAgXCJkYXRhXCI6IHtcbiAgICAgKiAgICAgXCJ1c2VyXCI6IHtcbiAgICAgKiAgICAgICBcImlkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgXCJhdWRcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgXCJyb2xlXCI6IFwiYXV0aGVudGljYXRlZFwiLFxuICAgICAqICAgICAgIFwibGFzdF9zaWduX2luX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcImFwcF9tZXRhZGF0YVwiOiB7XG4gICAgICogICAgICAgICAuLi5cbiAgICAgKiAgICAgICB9LFxuICAgICAqICAgICAgIFwidXNlcl9tZXRhZGF0YVwiOiB7XG4gICAgICogICAgICAgICAuLi5cbiAgICAgKiAgICAgICB9LFxuICAgICAqICAgICAgIFwiaWRlbnRpdGllc1wiOiBbXG4gICAgICogICAgICAgICB7XG4gICAgICogICAgICAgICAgIFwiaWRlbnRpdHlfaWRcIjogXCIyMjIyMjIyMi0yMjIyLTIyMjItMjIyMi0yMjIyMjIyMjIyMjJcIixcbiAgICAgKiAgICAgICAgICAgXCJwcm92aWRlclwiOiBcImdvb2dsZVwiLFxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgIF0sXG4gICAgICogICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICB9LFxuICAgICAqICAgICBcInNlc3Npb25cIjoge1xuICAgICAqICAgICAgIFwiYWNjZXNzX3Rva2VuXCI6IFwiPEFDQ0VTU19UT0tFTj5cIixcbiAgICAgKiAgICAgICBcInRva2VuX3R5cGVcIjogXCJiZWFyZXJcIixcbiAgICAgKiAgICAgICBcImV4cGlyZXNfaW5cIjogMzYwMCxcbiAgICAgKiAgICAgICBcImV4cGlyZXNfYXRcIjogMTcwMDAwMDAwMCxcbiAgICAgKiAgICAgICBcInJlZnJlc2hfdG9rZW5cIjogXCI8UkVGUkVTSF9UT0tFTj5cIixcbiAgICAgKiAgICAgICBcInVzZXJcIjoge1xuICAgICAqICAgICAgICAgXCJpZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgXCJhdWRcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgICBcInJvbGVcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgICBcImxhc3Rfc2lnbl9pbl9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICBcImFwcF9tZXRhZGF0YVwiOiB7XG4gICAgICogICAgICAgICAgIC4uLlxuICAgICAqICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgIFwidXNlcl9tZXRhZGF0YVwiOiB7XG4gICAgICogICAgICAgICAgIC4uLlxuICAgICAqICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgIFwiaWRlbnRpdGllc1wiOiBbXG4gICAgICogICAgICAgICAgIHtcbiAgICAgKiAgICAgICAgICAgICBcImlkZW50aXR5X2lkXCI6IFwiMjIyMjIyMjItMjIyMi0yMjIyLTIyMjItMjIyMjIyMjIyMjIyXCIsXG4gICAgICogICAgICAgICAgICAgXCJwcm92aWRlclwiOiBcImdvb2dsZVwiLFxuICAgICAqICAgICAgICAgICB9XG4gICAgICogICAgICAgICBdLFxuICAgICAqICAgICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogICB9LFxuICAgICAqICAgXCJlcnJvclwiOiBudWxsXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIHNpZ25JbldpdGhJZFRva2VuKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IG9wdGlvbnMsIHByb3ZpZGVyLCB0b2tlbiwgYWNjZXNzX3Rva2VuLCBub25jZSB9ID0gY3JlZGVudGlhbHM7XG4gICAgICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS90b2tlbj9ncmFudF90eXBlPWlkX3Rva2VuYCwge1xuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgICAgICAgICBpZF90b2tlbjogdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICAgICAgbm9uY2UsXG4gICAgICAgICAgICAgICAgICAgIGdvdHJ1ZV9tZXRhX3NlY3VyaXR5OiB7IGNhcHRjaGFfdG9rZW46IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXB0Y2hhVG9rZW4gfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHhmb3JtOiBfc2Vzc2lvblJlc3BvbnNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSByZXM7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIWRhdGEgfHwgIWRhdGEuc2Vzc2lvbiB8fCAhZGF0YS51c2VyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZFRva2VuRXJyb3IgPSBuZXcgQXV0aEludmFsaWRUb2tlblJlc3BvbnNlRXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yOiBpbnZhbGlkVG9rZW5FcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLnNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihkYXRhLnNlc3Npb24pO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKCdTSUdORURfSU4nLCBkYXRhLnNlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGEsIGVycm9yIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBMb2cgaW4gYSB1c2VyIHVzaW5nIG1hZ2ljbGluayBvciBhIG9uZS10aW1lIHBhc3N3b3JkIChPVFApLlxuICAgICAqXG4gICAgICogSWYgdGhlIGB7eyAuQ29uZmlybWF0aW9uVVJMIH19YCB2YXJpYWJsZSBpcyBzcGVjaWZpZWQgaW4gdGhlIGVtYWlsIHRlbXBsYXRlLCBhIG1hZ2ljbGluayB3aWxsIGJlIHNlbnQuXG4gICAgICogSWYgdGhlIGB7eyAuVG9rZW4gfX1gIHZhcmlhYmxlIGlzIHNwZWNpZmllZCBpbiB0aGUgZW1haWwgdGVtcGxhdGUsIGFuIE9UUCB3aWxsIGJlIHNlbnQuXG4gICAgICogSWYgeW91J3JlIHVzaW5nIHBob25lIHNpZ24taW5zLCBvbmx5IGFuIE9UUCB3aWxsIGJlIHNlbnQuIFlvdSB3b24ndCBiZSBhYmxlIHRvIHNlbmQgYSBtYWdpY2xpbmsgZm9yIHBob25lIHNpZ24taW5zLlxuICAgICAqXG4gICAgICogQmUgYXdhcmUgdGhhdCB5b3UgbWF5IGdldCBiYWNrIGFuIGVycm9yIG1lc3NhZ2UgdGhhdCB3aWxsIG5vdCBkaXN0aW5ndWlzaFxuICAgICAqIGJldHdlZW4gdGhlIGNhc2VzIHdoZXJlIHRoZSBhY2NvdW50IGRvZXMgbm90IGV4aXN0IG9yLCB0aGF0IHRoZSBhY2NvdW50XG4gICAgICogY2FuIG9ubHkgYmUgYWNjZXNzZWQgdmlhIHNvY2lhbCBsb2dpbi5cbiAgICAgKlxuICAgICAqIERvIG5vdGUgdGhhdCB5b3Ugd2lsbCBuZWVkIHRvIGNvbmZpZ3VyZSBhIFdoYXRzYXBwIHNlbmRlciBvbiBUd2lsaW9cbiAgICAgKiBpZiB5b3UgYXJlIHVzaW5nIHBob25lIHNpZ24gaW4gd2l0aCB0aGUgJ3doYXRzYXBwJyBjaGFubmVsLiBUaGUgd2hhdHNhcHBcbiAgICAgKiBjaGFubmVsIGlzIG5vdCBzdXBwb3J0ZWQgb24gb3RoZXIgcHJvdmlkZXJzXG4gICAgICogYXQgdGhpcyB0aW1lLlxuICAgICAqIFRoaXMgbWV0aG9kIHN1cHBvcnRzIFBLQ0Ugd2hlbiBhbiBlbWFpbCBpcyBwYXNzZWQuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgQXV0aFxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAtIFJlcXVpcmVzIGVpdGhlciBhbiBlbWFpbCBvciBwaG9uZSBudW1iZXIuXG4gICAgICogLSBUaGlzIG1ldGhvZCBpcyB1c2VkIGZvciBwYXNzd29yZGxlc3Mgc2lnbi1pbnMgd2hlcmUgYSBPVFAgaXMgc2VudCB0byB0aGUgdXNlcidzIGVtYWlsIG9yIHBob25lIG51bWJlci5cbiAgICAgKiAtIElmIHRoZSB1c2VyIGRvZXNuJ3QgZXhpc3QsIGBzaWduSW5XaXRoT3RwKClgIHdpbGwgc2lnbnVwIHRoZSB1c2VyIGluc3RlYWQuIFRvIHJlc3RyaWN0IHRoaXMgYmVoYXZpb3IsIHlvdSBjYW4gc2V0IGBzaG91bGRDcmVhdGVVc2VyYCBpbiBgU2lnbkluV2l0aFBhc3N3b3JkbGVzc0NyZWRlbnRpYWxzLm9wdGlvbnNgIHRvIGBmYWxzZWAuXG4gICAgICogLSBJZiB5b3UncmUgdXNpbmcgYW4gZW1haWwsIHlvdSBjYW4gY29uZmlndXJlIHdoZXRoZXIgeW91IHdhbnQgdGhlIHVzZXIgdG8gcmVjZWl2ZSBhIG1hZ2ljbGluayBvciBhIE9UUC5cbiAgICAgKiAtIElmIHlvdSdyZSB1c2luZyBwaG9uZSwgeW91IGNhbiBjb25maWd1cmUgd2hldGhlciB5b3Ugd2FudCB0aGUgdXNlciB0byByZWNlaXZlIGEgT1RQLlxuICAgICAqIC0gVGhlIG1hZ2ljIGxpbmsncyBkZXN0aW5hdGlvbiBVUkwgaXMgZGV0ZXJtaW5lZCBieSB0aGUgW2BTSVRFX1VSTGBdKC9kb2NzL2d1aWRlcy9hdXRoL3JlZGlyZWN0LXVybHMjdXNlLXdpbGRjYXJkcy1pbi1yZWRpcmVjdC11cmxzKS5cbiAgICAgKiAtIFNlZSBbcmVkaXJlY3QgVVJMcyBhbmQgd2lsZGNhcmRzXSgvZG9jcy9ndWlkZXMvYXV0aC9yZWRpcmVjdC11cmxzI3VzZS13aWxkY2FyZHMtaW4tcmVkaXJlY3QtdXJscykgdG8gYWRkIGFkZGl0aW9uYWwgcmVkaXJlY3QgVVJMcyB0byB5b3VyIHByb2plY3QuXG4gICAgICogLSBNYWdpYyBsaW5rcyBhbmQgT1RQcyBzaGFyZSB0aGUgc2FtZSBpbXBsZW1lbnRhdGlvbi4gVG8gc2VuZCB1c2VycyBhIG9uZS10aW1lIGNvZGUgaW5zdGVhZCBvZiBhIG1hZ2ljIGxpbmssIFttb2RpZnkgdGhlIG1hZ2ljIGxpbmsgZW1haWwgdGVtcGxhdGVdKC9kYXNoYm9hcmQvcHJvamVjdC9fL2F1dGgvdGVtcGxhdGVzKSB0byBpbmNsdWRlIGB7eyAuVG9rZW4gfX1gIGluc3RlYWQgb2YgYHt7IC5Db25maXJtYXRpb25VUkwgfX1gLlxuICAgICAqIC0gU2VlIG91ciBbVHdpbGlvIFBob25lIEF1dGggR3VpZGVdKC9kb2NzL2d1aWRlcy9hdXRoL3Bob25lLWxvZ2luP3Nob3dTTVNQcm92aWRlcj1Ud2lsaW8pIGZvciBkZXRhaWxzIGFib3V0IGNvbmZpZ3VyaW5nIFdoYXRzQXBwIHNpZ24gaW4uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZURlc2NyaXB0aW9uIFNpZ24gaW4gd2l0aCBlbWFpbFxuICAgICAqIFRoZSB1c2VyIHdpbGwgYmUgc2VudCBhbiBlbWFpbCB3aGljaCBjb250YWlucyBlaXRoZXIgYSBtYWdpY2xpbmsgb3IgYSBPVFAgb3IgYm90aC4gQnkgZGVmYXVsdCwgYSBnaXZlbiB1c2VyIGNhbiBvbmx5IHJlcXVlc3QgYSBPVFAgb25jZSBldmVyeSA2MCBzZWNvbmRzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgU2lnbiBpbiB3aXRoIGVtYWlsXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLnNpZ25JbldpdGhPdHAoe1xuICAgICAqICAgZW1haWw6ICdleGFtcGxlQGVtYWlsLmNvbScsXG4gICAgICogICBvcHRpb25zOiB7XG4gICAgICogICAgIGVtYWlsUmVkaXJlY3RUbzogJ2h0dHBzOi8vZXhhbXBsZS5jb20vd2VsY29tZSdcbiAgICAgKiAgIH1cbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVSZXNwb25zZSBTaWduIGluIHdpdGggZW1haWxcbiAgICAgKiBgYGBqc29uXG4gICAgICoge1xuICAgICAqICAgXCJkYXRhXCI6IHtcbiAgICAgKiAgICAgXCJ1c2VyXCI6IG51bGwsXG4gICAgICogICAgIFwic2Vzc2lvblwiOiBudWxsXG4gICAgICogICB9LFxuICAgICAqICAgXCJlcnJvclwiOiBudWxsXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVEZXNjcmlwdGlvbiBTaWduIGluIHdpdGggU01TIE9UUFxuICAgICAqIFRoZSB1c2VyIHdpbGwgYmUgc2VudCBhIFNNUyB3aGljaCBjb250YWlucyBhIE9UUC4gQnkgZGVmYXVsdCwgYSBnaXZlbiB1c2VyIGNhbiBvbmx5IHJlcXVlc3QgYSBPVFAgb25jZSBldmVyeSA2MCBzZWNvbmRzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgU2lnbiBpbiB3aXRoIFNNUyBPVFBcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguc2lnbkluV2l0aE90cCh7XG4gICAgICogICBwaG9uZTogJysxMzMzNDQ0NTU1NScsXG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlRGVzY3JpcHRpb24gU2lnbiBpbiB3aXRoIFdoYXRzQXBwIE9UUFxuICAgICAqIFRoZSB1c2VyIHdpbGwgYmUgc2VudCBhIFdoYXRzQXBwIG1lc3NhZ2Ugd2hpY2ggY29udGFpbnMgYSBPVFAuIEJ5IGRlZmF1bHQsIGEgZ2l2ZW4gdXNlciBjYW4gb25seSByZXF1ZXN0IGEgT1RQIG9uY2UgZXZlcnkgNjAgc2Vjb25kcy4gTm90ZSB0aGF0IGEgdXNlciB3aWxsIG5lZWQgdG8gaGF2ZSBhIHZhbGlkIFdoYXRzQXBwIGFjY291bnQgdGhhdCBpcyBsaW5rZWQgdG8gVHdpbGlvIGluIG9yZGVyIHRvIHVzZSB0aGlzIGZlYXR1cmUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBTaWduIGluIHdpdGggV2hhdHNBcHAgT1RQXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLnNpZ25JbldpdGhPdHAoe1xuICAgICAqICAgcGhvbmU6ICcrMTMzMzQ0NDU1NTUnLFxuICAgICAqICAgb3B0aW9uczoge1xuICAgICAqICAgICBjaGFubmVsOid3aGF0c2FwcCcsXG4gICAgICogICB9XG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBzaWduSW5XaXRoT3RwKGNyZWRlbnRpYWxzKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2Y7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoJ2VtYWlsJyBpbiBjcmVkZW50aWFscykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZW1haWwsIG9wdGlvbnMgfSA9IGNyZWRlbnRpYWxzO1xuICAgICAgICAgICAgICAgIGxldCBjb2RlQ2hhbGxlbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgY29kZUNoYWxsZW5nZU1ldGhvZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmxvd1R5cGUgPT09ICdwa2NlJykge1xuICAgICAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgICAgIFtjb2RlQ2hhbGxlbmdlLCBjb2RlQ2hhbGxlbmdlTWV0aG9kXSA9IGF3YWl0IGdldENvZGVDaGFsbGVuZ2VBbmRNZXRob2QodGhpcy5zdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9vdHBgLCB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW1haWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZGF0YSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVfdXNlcjogKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNob3VsZENyZWF0ZVVzZXIpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FwdGNoYVRva2VuIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlX2NoYWxsZW5nZTogY29kZUNoYWxsZW5nZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGVfY2hhbGxlbmdlX21ldGhvZDogY29kZUNoYWxsZW5nZU1ldGhvZCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RUbzogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmVtYWlsUmVkaXJlY3RUbyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCdwaG9uZScgaW4gY3JlZGVudGlhbHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHBob25lLCBvcHRpb25zIH0gPSBjcmVkZW50aWFscztcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9vdHBgLCB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGhvbmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiAoX2MgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZGF0YSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDoge30sXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVfdXNlcjogKF9kID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNob3VsZENyZWF0ZVVzZXIpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FwdGNoYVRva2VuIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFubmVsOiAoX2YgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2hhbm5lbCkgIT09IG51bGwgJiYgX2YgIT09IHZvaWQgMCA/IF9mIDogJ3NtcycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCwgbWVzc2FnZUlkOiBkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRhdGEubWVzc2FnZV9pZCB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRoSW52YWxpZENyZWRlbnRpYWxzRXJyb3IoJ1lvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIGFuIGVtYWlsIG9yIHBob25lIG51bWJlci4nKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGF3YWl0IHJlbW92ZUl0ZW1Bc3luYyh0aGlzLnN0b3JhZ2UsIGAke3RoaXMuc3RvcmFnZUtleX0tY29kZS12ZXJpZmllcmApO1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBMb2cgaW4gYSB1c2VyIGdpdmVuIGEgVXNlciBzdXBwbGllZCBPVFAgb3IgVG9rZW5IYXNoIHJlY2VpdmVkIHRocm91Z2ggbW9iaWxlIG9yIGVtYWlsLlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IEF1dGhcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogLSBUaGUgYHZlcmlmeU90cGAgbWV0aG9kIHRha2VzIGluIGRpZmZlcmVudCB2ZXJpZmljYXRpb24gdHlwZXMuXG4gICAgICogLSBJZiBhIHBob25lIG51bWJlciBpcyB1c2VkLCB0aGUgdHlwZSBjYW4gZWl0aGVyIGJlOlxuICAgICAqICAgMS4gYHNtc2Ag4oCTIFVzZWQgd2hlbiB2ZXJpZnlpbmcgYSBvbmUtdGltZSBwYXNzd29yZCAoT1RQKSBzZW50IHZpYSBTTVMgZHVyaW5nIHNpZ24tdXAgb3Igc2lnbi1pbi5cbiAgICAgKiAgIDIuIGBwaG9uZV9jaGFuZ2VgIOKAkyBVc2VkIHdoZW4gdmVyaWZ5aW5nIGFuIE9UUCBzZW50IHRvIGEgbmV3IHBob25lIG51bWJlciBkdXJpbmcgYSBwaG9uZSBudW1iZXIgdXBkYXRlIHByb2Nlc3MuXG4gICAgICogLSBJZiBhbiBlbWFpbCBhZGRyZXNzIGlzIHVzZWQsIHRoZSB0eXBlIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyAobm90ZTogYHNpZ251cGAgYW5kIGBtYWdpY2xpbmtgIHR5cGVzIGFyZSBkZXByZWNhdGVkKTpcbiAgICAgKiAgIDEuIGBlbWFpbGAg4oCTIFVzZWQgd2hlbiB2ZXJpZnlpbmcgYW4gT1RQIHNlbnQgdG8gdGhlIHVzZXIncyBlbWFpbCBkdXJpbmcgc2lnbi11cCBvciBzaWduLWluLlxuICAgICAqICAgMi4gYHJlY292ZXJ5YCDigJMgVXNlZCB3aGVuIHZlcmlmeWluZyBhbiBPVFAgc2VudCBmb3IgYWNjb3VudCByZWNvdmVyeSwgdHlwaWNhbGx5IGFmdGVyIGEgcGFzc3dvcmQgcmVzZXQgcmVxdWVzdC5cbiAgICAgKiAgIDMuIGBpbnZpdGVgIOKAkyBVc2VkIHdoZW4gdmVyaWZ5aW5nIGFuIE9UUCBzZW50IGFzIHBhcnQgb2YgYW4gaW52aXRhdGlvbiB0byBqb2luIGEgcHJvamVjdCBvciBvcmdhbml6YXRpb24uXG4gICAgICogICA0LiBgZW1haWxfY2hhbmdlYCDigJMgVXNlZCB3aGVuIHZlcmlmeWluZyBhbiBPVFAgc2VudCB0byBhIG5ldyBlbWFpbCBhZGRyZXNzIGR1cmluZyBhbiBlbWFpbCB1cGRhdGUgcHJvY2Vzcy5cbiAgICAgKiAtIFRoZSB2ZXJpZmljYXRpb24gdHlwZSB1c2VkIHNob3VsZCBiZSBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBjb3JyZXNwb25kaW5nIGF1dGggbWV0aG9kIGNhbGxlZCBiZWZvcmUgYHZlcmlmeU90cGAgdG8gc2lnbiB1cCAvIHNpZ24taW4gYSB1c2VyLlxuICAgICAqIC0gVGhlIGBUb2tlbkhhc2hgIGlzIGNvbnRhaW5lZCBpbiB0aGUgW2VtYWlsIHRlbXBsYXRlc10oL2RvY3MvZ3VpZGVzL2F1dGgvYXV0aC1lbWFpbC10ZW1wbGF0ZXMpIGFuZCBjYW4gYmUgdXNlZCB0byBzaWduIGluLiAgWW91IG1heSB3aXNoIHRvIHVzZSB0aGUgaGFzaCBmb3IgdGhlIFBLQ0UgZmxvdyBmb3IgU2VydmVyIFNpZGUgQXV0aC4gUmVhZCBbdGhlIFBhc3N3b3JkLWJhc2VkIEF1dGggZ3VpZGVdKC9kb2NzL2d1aWRlcy9hdXRoL3Bhc3N3b3JkcykgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFZlcmlmeSBTaWdudXAgT25lLVRpbWUgUGFzc3dvcmQgKE9UUClcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGgudmVyaWZ5T3RwKHsgZW1haWwsIHRva2VuLCB0eXBlOiAnZW1haWwnfSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlUmVzcG9uc2UgVmVyaWZ5IFNpZ251cCBPbmUtVGltZSBQYXNzd29yZCAoT1RQKVxuICAgICAqIGBgYGpzb25cbiAgICAgKiB7XG4gICAgICogICBcImRhdGFcIjoge1xuICAgICAqICAgICBcInVzZXJcIjoge1xuICAgICAqICAgICAgIFwiaWRcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICBcImF1ZFwiOiBcImF1dGhlbnRpY2F0ZWRcIixcbiAgICAgKiAgICAgICBcInJvbGVcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgXCJlbWFpbF9jb25maXJtZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwicGhvbmVcIjogXCJcIixcbiAgICAgKiAgICAgICBcImNvbmZpcm1lZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgXCJyZWNvdmVyeV9zZW50X2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcImxhc3Rfc2lnbl9pbl9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgXCJhcHBfbWV0YWRhdGFcIjoge1xuICAgICAqICAgICAgICAgXCJwcm92aWRlclwiOiBcImVtYWlsXCIsXG4gICAgICogICAgICAgICBcInByb3ZpZGVyc1wiOiBbXG4gICAgICogICAgICAgICAgIFwiZW1haWxcIlxuICAgICAqICAgICAgICAgXVxuICAgICAqICAgICAgIH0sXG4gICAgICogICAgICAgXCJ1c2VyX21ldGFkYXRhXCI6IHtcbiAgICAgKiAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiLFxuICAgICAqICAgICAgICAgXCJlbWFpbF92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgIFwicGhvbmVfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICBcInN1YlwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiXG4gICAgICogICAgICAgfSxcbiAgICAgKiAgICAgICBcImlkZW50aXRpZXNcIjogW1xuICAgICAqICAgICAgICAge1xuICAgICAqICAgICAgICAgICBcImlkZW50aXR5X2lkXCI6IFwiMjIyMjIyMjItMjIyMi0yMjIyLTIyMjItMjIyMjIyMjIyMjIyXCIsXG4gICAgICogICAgICAgICAgIFwiaWRcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICAgICAgXCJ1c2VyX2lkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgICAgIFwiaWRlbnRpdHlfZGF0YVwiOiB7XG4gICAgICogICAgICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgICAgICAgXCJlbWFpbF92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICAgICBcInBob25lX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICAgIFwic3ViXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCJcbiAgICAgKiAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgXCJwcm92aWRlclwiOiBcImVtYWlsXCIsXG4gICAgICogICAgICAgICAgIFwibGFzdF9zaWduX2luX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgXCJ1cGRhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCJcbiAgICAgKiAgICAgICAgIH1cbiAgICAgKiAgICAgICBdLFxuICAgICAqICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgXCJ1cGRhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcImlzX2Fub255bW91c1wiOiBmYWxzZVxuICAgICAqICAgICB9LFxuICAgICAqICAgICBcInNlc3Npb25cIjoge1xuICAgICAqICAgICAgIFwiYWNjZXNzX3Rva2VuXCI6IFwiPEFDQ0VTU19UT0tFTj5cIixcbiAgICAgKiAgICAgICBcInRva2VuX3R5cGVcIjogXCJiZWFyZXJcIixcbiAgICAgKiAgICAgICBcImV4cGlyZXNfaW5cIjogMzYwMCxcbiAgICAgKiAgICAgICBcImV4cGlyZXNfYXRcIjogMTcwMDAwMDAwMCxcbiAgICAgKiAgICAgICBcInJlZnJlc2hfdG9rZW5cIjogXCI8UkVGUkVTSF9UT0tFTj5cIixcbiAgICAgKiAgICAgICBcInVzZXJcIjoge1xuICAgICAqICAgICAgICAgXCJpZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgXCJhdWRcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgICBcInJvbGVcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICAgIFwiZW1haWxfY29uZmlybWVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgIFwicGhvbmVcIjogXCJcIixcbiAgICAgKiAgICAgICAgIFwiY29uZmlybWVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgIFwicmVjb3Zlcnlfc2VudF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICBcImxhc3Rfc2lnbl9pbl9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICBcImFwcF9tZXRhZGF0YVwiOiB7XG4gICAgICogICAgICAgICAgIFwicHJvdmlkZXJcIjogXCJlbWFpbFwiLFxuICAgICAqICAgICAgICAgICBcInByb3ZpZGVyc1wiOiBbXG4gICAgICogICAgICAgICAgICAgXCJlbWFpbFwiXG4gICAgICogICAgICAgICAgIF1cbiAgICAgKiAgICAgICAgIH0sXG4gICAgICogICAgICAgICBcInVzZXJfbWV0YWRhdGFcIjoge1xuICAgICAqICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICAgICAgXCJlbWFpbF92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICAgXCJwaG9uZV92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICAgXCJzdWJcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIlxuICAgICAqICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgIFwiaWRlbnRpdGllc1wiOiBbXG4gICAgICogICAgICAgICAgIHtcbiAgICAgKiAgICAgICAgICAgICBcImlkZW50aXR5X2lkXCI6IFwiMjIyMjIyMjItMjIyMi0yMjIyLTIyMjItMjIyMjIyMjIyMjIyXCIsXG4gICAgICogICAgICAgICAgICAgXCJpZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgICAgIFwidXNlcl9pZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgICAgIFwiaWRlbnRpdHlfZGF0YVwiOiB7XG4gICAgICogICAgICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICAgICAgICAgIFwiZW1haWxfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgICAgICBcInBob25lX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICAgICAgXCJzdWJcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIlxuICAgICAqICAgICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgICAgXCJwcm92aWRlclwiOiBcImVtYWlsXCIsXG4gICAgICogICAgICAgICAgICAgXCJsYXN0X3NpZ25faW5fYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgICAgXCJ1cGRhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIlxuICAgICAqICAgICAgICAgICB9XG4gICAgICogICAgICAgICBdLFxuICAgICAqICAgICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICBcImlzX2Fub255bW91c1wiOiBmYWxzZVxuICAgICAqICAgICAgIH1cbiAgICAgKiAgICAgfVxuICAgICAqICAgfSxcbiAgICAgKiAgIFwiZXJyb3JcIjogbnVsbFxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFZlcmlmeSBTTVMgT25lLVRpbWUgUGFzc3dvcmQgKE9UUClcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGgudmVyaWZ5T3RwKHsgcGhvbmUsIHRva2VuLCB0eXBlOiAnc21zJ30pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBWZXJpZnkgRW1haWwgQXV0aCAoVG9rZW4gSGFzaClcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGgudmVyaWZ5T3RwKHsgdG9rZW5faGFzaDogdG9rZW5IYXNoLCB0eXBlOiAnZW1haWwnfSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyB2ZXJpZnlPdHAocGFyYW1zKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcmVkaXJlY3RUbyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCBjYXB0Y2hhVG9rZW4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoJ29wdGlvbnMnIGluIHBhcmFtcykge1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VG8gPSAoX2EgPSBwYXJhbXMub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJlZGlyZWN0VG87XG4gICAgICAgICAgICAgICAgY2FwdGNoYVRva2VuID0gKF9iID0gcGFyYW1zLm9wdGlvbnMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYXB0Y2hhVG9rZW47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS92ZXJpZnlgLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIGJvZHk6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgeyBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiBjYXB0Y2hhVG9rZW4gfSB9KSxcbiAgICAgICAgICAgICAgICByZWRpcmVjdFRvLFxuICAgICAgICAgICAgICAgIHhmb3JtOiBfc2Vzc2lvblJlc3BvbnNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuVmVyaWZpY2F0aW9uRXJyb3IgPSBuZXcgRXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIG9uIHRva2VuIHZlcmlmaWNhdGlvbi4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyB0b2tlblZlcmlmaWNhdGlvbkVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IGRhdGEuc2Vzc2lvbjtcbiAgICAgICAgICAgIGNvbnN0IHVzZXIgPSBkYXRhLnVzZXI7XG4gICAgICAgICAgICBpZiAoc2Vzc2lvbiA9PT0gbnVsbCB8fCBzZXNzaW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXNzaW9uLmFjY2Vzc190b2tlbikge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKHBhcmFtcy50eXBlID09ICdyZWNvdmVyeScgPyAnUEFTU1dPUkRfUkVDT1ZFUlknIDogJ1NJR05FRF9JTicsIHNlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IHsgdXNlciwgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogQXR0ZW1wdHMgYSBzaW5nbGUtc2lnbiBvbiB1c2luZyBhbiBlbnRlcnByaXNlIElkZW50aXR5IFByb3ZpZGVyLiBBXG4gICAgICogc3VjY2Vzc2Z1bCBTU08gYXR0ZW1wdCB3aWxsIHJlZGlyZWN0IHRoZSBjdXJyZW50IHBhZ2UgdG8gdGhlIGlkZW50aXR5XG4gICAgICogcHJvdmlkZXIgYXV0aG9yaXphdGlvbiBwYWdlLiBUaGUgcmVkaXJlY3QgVVJMIGlzIGltcGxlbWVudGF0aW9uIGFuZCBTU09cbiAgICAgKiBwcm90b2NvbCBzcGVjaWZpYy5cbiAgICAgKlxuICAgICAqIFlvdSBjYW4gdXNlIGl0IGJ5IHByb3ZpZGluZyBhIFNTTyBkb21haW4uIFR5cGljYWxseSB5b3UgY2FuIGV4dHJhY3QgdGhpc1xuICAgICAqIGRvbWFpbiBieSBhc2tpbmcgdXNlcnMgZm9yIHRoZWlyIGVtYWlsIGFkZHJlc3MuIElmIHRoaXMgZG9tYWluIGlzXG4gICAgICogcmVnaXN0ZXJlZCBvbiB0aGUgQXV0aCBpbnN0YW5jZSB0aGUgcmVkaXJlY3Qgd2lsbCB1c2UgdGhhdCBvcmdhbml6YXRpb24nc1xuICAgICAqIGN1cnJlbnRseSBhY3RpdmUgU1NPIElkZW50aXR5IFByb3ZpZGVyIGZvciB0aGUgbG9naW4uXG4gICAgICpcbiAgICAgKiBJZiB5b3UgaGF2ZSBidWlsdCBhbiBvcmdhbml6YXRpb24tc3BlY2lmaWMgbG9naW4gcGFnZSwgeW91IGNhbiB1c2UgdGhlXG4gICAgICogb3JnYW5pemF0aW9uJ3MgU1NPIElkZW50aXR5IFByb3ZpZGVyIFVVSUQgZGlyZWN0bHkgaW5zdGVhZC5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBBdXRoXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIC0gQmVmb3JlIHlvdSBjYW4gY2FsbCB0aGlzIG1ldGhvZCB5b3UgbmVlZCB0byBbZXN0YWJsaXNoIGEgY29ubmVjdGlvbl0oL2RvY3MvZ3VpZGVzL2F1dGgvc3NvL2F1dGgtc3NvLXNhbWwjbWFuYWdpbmctc2FtbC0yMC1jb25uZWN0aW9ucykgdG8gYW4gaWRlbnRpdHkgcHJvdmlkZXIuIFVzZSB0aGUgW0NMSSBjb21tYW5kc10oL2RvY3MvcmVmZXJlbmNlL2NsaS9zdXBhYmFzZS1zc28pIHRvIGRvIHRoaXMuXG4gICAgICogLSBJZiB5b3UndmUgYXNzb2NpYXRlZCBhbiBlbWFpbCBkb21haW4gdG8gdGhlIGlkZW50aXR5IHByb3ZpZGVyLCB5b3UgY2FuIHVzZSB0aGUgYGRvbWFpbmAgcHJvcGVydHkgdG8gc3RhcnQgYSBzaWduLWluIGZsb3cuXG4gICAgICogLSBJbiBjYXNlIHlvdSBuZWVkIHRvIHVzZSBhIGRpZmZlcmVudCB3YXkgdG8gc3RhcnQgdGhlIGF1dGhlbnRpY2F0aW9uIGZsb3cgd2l0aCBhbiBpZGVudGl0eSBwcm92aWRlciwgeW91IGNhbiB1c2UgdGhlIGBwcm92aWRlcklkYCBwcm9wZXJ0eS4gRm9yIGV4YW1wbGU6XG4gICAgICogICAgIC0gTWFwcGluZyBzcGVjaWZpYyB1c2VyIGVtYWlsIGFkZHJlc3NlcyB3aXRoIGFuIGlkZW50aXR5IHByb3ZpZGVyLlxuICAgICAqICAgICAtIFVzaW5nIGRpZmZlcmVudCBoaW50cyB0byBpZGVudGl0eSB0aGUgaWRlbnRpdHkgcHJvdmlkZXIgdG8gYmUgdXNlZCBieSB0aGUgdXNlciwgbGlrZSBhIGNvbXBhbnktc3BlY2lmaWMgcGFnZSwgSVAgYWRkcmVzcyBvciBvdGhlciB0cmFja2luZyBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFNpZ24gaW4gd2l0aCBlbWFpbCBkb21haW5cbiAgICAgKiBgYGBqc1xuICAgICAqICAgLy8gWW91IGNhbiBleHRyYWN0IHRoZSB1c2VyJ3MgZW1haWwgZG9tYWluIGFuZCB1c2UgaXQgdG8gdHJpZ2dlciB0aGVcbiAgICAgKiAgIC8vIGF1dGhlbnRpY2F0aW9uIGZsb3cgd2l0aCB0aGUgY29ycmVjdCBpZGVudGl0eSBwcm92aWRlci5cbiAgICAgKlxuICAgICAqICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5zaWduSW5XaXRoU1NPKHtcbiAgICAgKiAgICAgZG9tYWluOiAnY29tcGFueS5jb20nXG4gICAgICogICB9KVxuICAgICAqXG4gICAgICogICBpZiAoZGF0YT8udXJsKSB7XG4gICAgICogICAgIC8vIHJlZGlyZWN0IHRoZSB1c2VyIHRvIHRoZSBpZGVudGl0eSBwcm92aWRlcidzIGF1dGhlbnRpY2F0aW9uIGZsb3dcbiAgICAgKiAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBkYXRhLnVybFxuICAgICAqICAgfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGUgU2lnbiBpbiB3aXRoIHByb3ZpZGVyIFVVSURcbiAgICAgKiBgYGBqc1xuICAgICAqICAgLy8gVXNlZnVsIHdoZW4geW91IG5lZWQgdG8gbWFwIGEgdXNlcidzIHNpZ24gaW4gcmVxdWVzdCBhY2NvcmRpbmdcbiAgICAgKiAgIC8vIHRvIGRpZmZlcmVudCBydWxlcyB0aGF0IGNhbid0IHVzZSBlbWFpbCBkb21haW5zLlxuICAgICAqXG4gICAgICogICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLnNpZ25JbldpdGhTU08oe1xuICAgICAqICAgICBwcm92aWRlcklkOiAnMjE2NDhhOWQtOGQ1YS00NTU1LWE5ZDEtZDYzNzVkYzE0ZTkyJ1xuICAgICAqICAgfSlcbiAgICAgKlxuICAgICAqICAgaWYgKGRhdGE/LnVybCkge1xuICAgICAqICAgICAvLyByZWRpcmVjdCB0aGUgdXNlciB0byB0aGUgaWRlbnRpdHkgcHJvdmlkZXIncyBhdXRoZW50aWNhdGlvbiBmbG93XG4gICAgICogICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gZGF0YS51cmxcbiAgICAgKiAgIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBzaWduSW5XaXRoU1NPKHBhcmFtcykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9mO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGNvZGVDaGFsbGVuZ2UgPSBudWxsO1xuICAgICAgICAgICAgbGV0IGNvZGVDaGFsbGVuZ2VNZXRob2QgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuZmxvd1R5cGUgPT09ICdwa2NlJykge1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICBbY29kZUNoYWxsZW5nZSwgY29kZUNoYWxsZW5nZU1ldGhvZF0gPSBhd2FpdCBnZXRDb2RlQ2hhbGxlbmdlQW5kTWV0aG9kKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L3Nzb2AsIHtcbiAgICAgICAgICAgICAgICBib2R5OiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sICgncHJvdmlkZXJJZCcgaW4gcGFyYW1zID8geyBwcm92aWRlcl9pZDogcGFyYW1zLnByb3ZpZGVySWQgfSA6IG51bGwpKSwgKCdkb21haW4nIGluIHBhcmFtcyA/IHsgZG9tYWluOiBwYXJhbXMuZG9tYWluIH0gOiBudWxsKSksIHsgcmVkaXJlY3RfdG86IChfYiA9IChfYSA9IHBhcmFtcy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVkaXJlY3RUbykgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogdW5kZWZpbmVkIH0pLCAoKChfYyA9IHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuY2FwdGNoYVRva2VuKVxuICAgICAgICAgICAgICAgICAgICA/IHsgZ290cnVlX21ldGFfc2VjdXJpdHk6IHsgY2FwdGNoYV90b2tlbjogcGFyYW1zLm9wdGlvbnMuY2FwdGNoYVRva2VuIH0gfVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwpKSwgeyBza2lwX2h0dHBfcmVkaXJlY3Q6IHRydWUsIGNvZGVfY2hhbGxlbmdlOiBjb2RlQ2hhbGxlbmdlLCBjb2RlX2NoYWxsZW5nZV9tZXRob2Q6IGNvZGVDaGFsbGVuZ2VNZXRob2QgfSksXG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIHhmb3JtOiBfc3NvUmVzcG9uc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgcmVkaXJlY3QgaW4gYnJvd3NlciB1bmxlc3Mgc2tpcEJyb3dzZXJSZWRpcmVjdCBpcyB0cnVlXG4gICAgICAgICAgICBpZiAoKChfZCA9IHJlc3VsdC5kYXRhKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QudXJsKSAmJiBpc0Jyb3dzZXIoKSAmJiAhKChfZiA9IHBhcmFtcy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Yuc2tpcEJyb3dzZXJSZWRpcmVjdCkpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHJlc3VsdC5kYXRhLnVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBhd2FpdCByZW1vdmVJdGVtQXN5bmModGhpcy5zdG9yYWdlLCBgJHt0aGlzLnN0b3JhZ2VLZXl9LWNvZGUtdmVyaWZpZXJgKTtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kcyBhIHJlYXV0aGVudGljYXRpb24gT1RQIHRvIHRoZSB1c2VyJ3MgZW1haWwgb3IgcGhvbmUgbnVtYmVyLlxuICAgICAqIFJlcXVpcmVzIHRoZSB1c2VyIHRvIGJlIHNpZ25lZC1pbi5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBBdXRoXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIC0gVGhpcyBtZXRob2QgaXMgdXNlZCB0b2dldGhlciB3aXRoIGB1cGRhdGVVc2VyKClgIHdoZW4gYSB1c2VyJ3MgcGFzc3dvcmQgbmVlZHMgdG8gYmUgdXBkYXRlZC5cbiAgICAgKiAtIElmIHlvdSByZXF1aXJlIHlvdXIgdXNlciB0byByZWF1dGhlbnRpY2F0ZSBiZWZvcmUgdXBkYXRpbmcgdGhlaXIgcGFzc3dvcmQsIHlvdSBuZWVkIHRvIGVuYWJsZSB0aGUgKipTZWN1cmUgcGFzc3dvcmQgY2hhbmdlKiogb3B0aW9uIGluIHlvdXIgW3Byb2plY3QncyBlbWFpbCBwcm92aWRlciBzZXR0aW5nc10oL2Rhc2hib2FyZC9wcm9qZWN0L18vYXV0aC9wcm92aWRlcnMpLlxuICAgICAqIC0gQSB1c2VyIGlzIG9ubHkgcmVxdWlyZSB0byByZWF1dGhlbnRpY2F0ZSBiZWZvcmUgdXBkYXRpbmcgdGhlaXIgcGFzc3dvcmQgaWYgKipTZWN1cmUgcGFzc3dvcmQgY2hhbmdlKiogaXMgZW5hYmxlZCBhbmQgdGhlIHVzZXIgKipoYXNuJ3QgcmVjZW50bHkgc2lnbmVkIGluKiouIEEgdXNlciBpcyBkZWVtZWQgcmVjZW50bHkgc2lnbmVkIGluIGlmIHRoZSBzZXNzaW9uIHdhcyBjcmVhdGVkIGluIHRoZSBsYXN0IDI0IGhvdXJzLlxuICAgICAqIC0gVGhpcyBtZXRob2Qgd2lsbCBzZW5kIGEgbm9uY2UgdG8gdGhlIHVzZXIncyBlbWFpbC4gSWYgdGhlIHVzZXIgZG9lc24ndCBoYXZlIGEgY29uZmlybWVkIGVtYWlsIGFkZHJlc3MsIHRoZSBtZXRob2Qgd2lsbCBzZW5kIHRoZSBub25jZSB0byB0aGUgdXNlcidzIGNvbmZpcm1lZCBwaG9uZSBudW1iZXIgaW5zdGVhZC5cbiAgICAgKiAtIEFmdGVyIHJlY2VpdmluZyB0aGUgT1RQLCBpbmNsdWRlIGl0IGFzIHRoZSBgbm9uY2VgIGluIHlvdXIgYHVwZGF0ZVVzZXIoKWAgY2FsbCB0byBmaW5hbGl6ZSB0aGUgcGFzc3dvcmQgY2hhbmdlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVEZXNjcmlwdGlvbiBTZW5kIHJlYXV0aGVudGljYXRpb24gbm9uY2VcbiAgICAgKiBTZW5kcyBhIHJlYXV0aGVudGljYXRpb24gbm9uY2UgdG8gdGhlIHVzZXIncyBlbWFpbCBvciBwaG9uZSBudW1iZXIuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBTZW5kIHJlYXV0aGVudGljYXRpb24gbm9uY2VcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGgucmVhdXRoZW50aWNhdGUoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIHJlYXV0aGVudGljYXRlKCkge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fYWNxdWlyZUxvY2sodGhpcy5sb2NrQWNxdWlyZVRpbWVvdXQsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9yZWF1dGhlbnRpY2F0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgX3JlYXV0aGVudGljYXRlKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3VzZVNlc3Npb24oYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0sIGVycm9yOiBzZXNzaW9uRXJyb3IsIH0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb25FcnJvcilcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgc2Vzc2lvbkVycm9yO1xuICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbilcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ0dFVCcsIGAke3RoaXMudXJsfS9yZWF1dGhlbnRpY2F0ZWAsIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBqd3Q6IHNlc3Npb24uYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVzZW5kcyBhbiBleGlzdGluZyBzaWdudXAgY29uZmlybWF0aW9uIGVtYWlsLCBlbWFpbCBjaGFuZ2UgZW1haWwsIFNNUyBPVFAgb3IgcGhvbmUgY2hhbmdlIE9UUC5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBBdXRoXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIC0gUmVzZW5kcyBhIHNpZ251cCBjb25maXJtYXRpb24sIGVtYWlsIGNoYW5nZSBvciBwaG9uZSBjaGFuZ2UgZW1haWwgdG8gdGhlIHVzZXIuXG4gICAgICogLSBQYXNzd29yZGxlc3Mgc2lnbi1pbnMgY2FuIGJlIHJlc2VudCBieSBjYWxsaW5nIHRoZSBgc2lnbkluV2l0aE90cCgpYCBtZXRob2QgYWdhaW4uXG4gICAgICogLSBQYXNzd29yZCByZWNvdmVyeSBlbWFpbHMgY2FuIGJlIHJlc2VudCBieSBjYWxsaW5nIHRoZSBgcmVzZXRQYXNzd29yZEZvckVtYWlsKClgIG1ldGhvZCBhZ2Fpbi5cbiAgICAgKiAtIFRoaXMgbWV0aG9kIHdpbGwgb25seSByZXNlbmQgYW4gZW1haWwgb3IgcGhvbmUgT1RQIHRvIHRoZSB1c2VyIGlmIHRoZXJlIHdhcyBhbiBpbml0aWFsIHNpZ251cCwgZW1haWwgY2hhbmdlIG9yIHBob25lIGNoYW5nZSByZXF1ZXN0IGJlaW5nIG1hZGUobm90ZTogRm9yIGV4aXN0aW5nIHVzZXJzIHNpZ25pbmcgaW4gd2l0aCBPVFAsIHlvdSBzaG91bGQgdXNlIGBzaWduSW5XaXRoT3RwKClgIGFnYWluIHRvIHJlc2VuZCB0aGUgT1RQKS5cbiAgICAgKiAtIFlvdSBjYW4gc3BlY2lmeSBhIHJlZGlyZWN0IHVybCB3aGVuIHlvdSByZXNlbmQgYW4gZW1haWwgbGluayB1c2luZyB0aGUgYGVtYWlsUmVkaXJlY3RUb2Agb3B0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVEZXNjcmlwdGlvbiBSZXNlbmQgYW4gZW1haWwgc2lnbnVwIGNvbmZpcm1hdGlvblxuICAgICAqIFJlc2VuZHMgdGhlIGVtYWlsIHNpZ251cCBjb25maXJtYXRpb24gdG8gdGhlIHVzZXJcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFJlc2VuZCBhbiBlbWFpbCBzaWdudXAgY29uZmlybWF0aW9uXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLnJlc2VuZCh7XG4gICAgICogICB0eXBlOiAnc2lnbnVwJyxcbiAgICAgKiAgIGVtYWlsOiAnZW1haWxAZXhhbXBsZS5jb20nLFxuICAgICAqICAgb3B0aW9uczoge1xuICAgICAqICAgICBlbWFpbFJlZGlyZWN0VG86ICdodHRwczovL2V4YW1wbGUuY29tL3dlbGNvbWUnXG4gICAgICogICB9XG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlRGVzY3JpcHRpb24gUmVzZW5kIGEgcGhvbmUgc2lnbnVwIGNvbmZpcm1hdGlvblxuICAgICAqIFJlc2VuZHMgdGhlIHBob25lIHNpZ251cCBjb25maXJtYXRpb24gZW1haWwgdG8gdGhlIHVzZXJcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFJlc2VuZCBhIHBob25lIHNpZ251cCBjb25maXJtYXRpb25cbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGgucmVzZW5kKHtcbiAgICAgKiAgIHR5cGU6ICdzbXMnLFxuICAgICAqICAgcGhvbmU6ICcxMjM0NTY3ODkwJ1xuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZURlc2NyaXB0aW9uIFJlc2VuZCBlbWFpbCBjaGFuZ2UgZW1haWxcbiAgICAgKiBSZXNlbmRzIHRoZSBlbWFpbCBjaGFuZ2UgZW1haWwgdG8gdGhlIHVzZXJcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFJlc2VuZCBlbWFpbCBjaGFuZ2UgZW1haWxcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGgucmVzZW5kKHtcbiAgICAgKiAgIHR5cGU6ICdlbWFpbF9jaGFuZ2UnLFxuICAgICAqICAgZW1haWw6ICdlbWFpbEBleGFtcGxlLmNvbSdcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVEZXNjcmlwdGlvbiBSZXNlbmQgcGhvbmUgY2hhbmdlIE9UUFxuICAgICAqIFJlc2VuZHMgdGhlIHBob25lIGNoYW5nZSBPVFAgdG8gdGhlIHVzZXJcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFJlc2VuZCBwaG9uZSBjaGFuZ2UgT1RQXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLnJlc2VuZCh7XG4gICAgICogICB0eXBlOiAncGhvbmVfY2hhbmdlJyxcbiAgICAgKiAgIHBob25lOiAnMTIzNDU2Nzg5MCdcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIHJlc2VuZChjcmVkZW50aWFscykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZW5kcG9pbnQgPSBgJHt0aGlzLnVybH0vcmVzZW5kYDtcbiAgICAgICAgICAgIGlmICgnZW1haWwnIGluIGNyZWRlbnRpYWxzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBlbWFpbCwgdHlwZSwgb3B0aW9ucyB9ID0gY3JlZGVudGlhbHM7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBlbmRwb2ludCwge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtYWlsLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvdHJ1ZV9tZXRhX3NlY3VyaXR5OiB7IGNhcHRjaGFfdG9rZW46IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5jYXB0Y2hhVG9rZW4gfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RUbzogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmVtYWlsUmVkaXJlY3RUbyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoJ3Bob25lJyBpbiBjcmVkZW50aWFscykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcGhvbmUsIHR5cGUsIG9wdGlvbnMgfSA9IGNyZWRlbnRpYWxzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdQT1NUJywgZW5kcG9pbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwaG9uZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FwdGNoYVRva2VuIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCwgbWVzc2FnZUlkOiBkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRhdGEubWVzc2FnZV9pZCB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRoSW52YWxpZENyZWRlbnRpYWxzRXJyb3IoJ1lvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIGFuIGVtYWlsIG9yIHBob25lIG51bWJlciBhbmQgYSB0eXBlJyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHNlc3Npb24sIHJlZnJlc2hpbmcgaXQgaWYgbmVjZXNzYXJ5LlxuICAgICAqXG4gICAgICogVGhlIHNlc3Npb24gcmV0dXJuZWQgY2FuIGJlIG51bGwgaWYgdGhlIHNlc3Npb24gaXMgbm90IGRldGVjdGVkIHdoaWNoIGNhbiBoYXBwZW4gaW4gdGhlIGV2ZW50IGEgdXNlciBpcyBub3Qgc2lnbmVkLWluIG9yIGhhcyBsb2dnZWQgb3V0LlxuICAgICAqXG4gICAgICogKipJTVBPUlRBTlQ6KiogVGhpcyBtZXRob2QgbG9hZHMgdmFsdWVzIGRpcmVjdGx5IGZyb20gdGhlIHN0b3JhZ2UgYXR0YWNoZWRcbiAgICAgKiB0byB0aGUgY2xpZW50LiBJZiB0aGF0IHN0b3JhZ2UgaXMgYmFzZWQgb24gcmVxdWVzdCBjb29raWVzIGZvciBleGFtcGxlLFxuICAgICAqIHRoZSB2YWx1ZXMgaW4gaXQgbWF5IG5vdCBiZSBhdXRoZW50aWMgYW5kIHRoZXJlZm9yZSBpdCdzIHN0cm9uZ2x5IGFkdmlzZWRcbiAgICAgKiBhZ2FpbnN0IHVzaW5nIHRoaXMgbWV0aG9kIGFuZCBpdHMgcmVzdWx0cyBpbiBzdWNoIGNpcmN1bXN0YW5jZXMuIEEgd2FybmluZ1xuICAgICAqIHdpbGwgYmUgZW1pdHRlZCBpZiB0aGlzIGlzIGRldGVjdGVkLiBVc2Uge0BsaW5rICNnZXRVc2VyKCl9IGluc3RlYWQuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgQXV0aFxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAtIFNpbmNlIHRoZSBpbnRyb2R1Y3Rpb24gb2YgW2FzeW1tZXRyaWMgSldUIHNpZ25pbmcga2V5c10oL2RvY3MvZ3VpZGVzL2F1dGgvc2lnbmluZy1rZXlzKSwgdGhpcyBtZXRob2QgaXMgY29uc2lkZXJlZCBsb3ctbGV2ZWwgYW5kIHdlIGVuY291cmFnZSB5b3UgdG8gdXNlIGBnZXRDbGFpbXMoKWAgb3IgYGdldFVzZXIoKWAgaW5zdGVhZC5cbiAgICAgKiAtIFJldHJpZXZlcyB0aGUgY3VycmVudCBbdXNlciBzZXNzaW9uXSgvZG9jcy9ndWlkZXMvYXV0aC9zZXNzaW9ucykgZnJvbSB0aGUgc3RvcmFnZSBtZWRpdW0gKGxvY2FsIHN0b3JhZ2UsIGNvb2tpZXMpLlxuICAgICAqIC0gVGhlIHNlc3Npb24gY29udGFpbnMgYW4gYWNjZXNzIHRva2VuIChzaWduZWQgSldUKSwgYSByZWZyZXNoIHRva2VuIGFuZCB0aGUgdXNlciBvYmplY3QuXG4gICAgICogLSBJZiB0aGUgc2Vzc2lvbidzIGFjY2VzcyB0b2tlbiBpcyBleHBpcmVkIG9yIGlzIGFib3V0IHRvIGV4cGlyZSwgdGhpcyBtZXRob2Qgd2lsbCB1c2UgdGhlIHJlZnJlc2ggdG9rZW4gdG8gcmVmcmVzaCB0aGUgc2Vzc2lvbi5cbiAgICAgKiAtIFdoZW4gdXNpbmcgaW4gYSBicm93c2VyLCBvciB5b3UndmUgY2FsbGVkIGBzdGFydEF1dG9SZWZyZXNoKClgIGluIHlvdXIgZW52aXJvbm1lbnQgKFJlYWN0IE5hdGl2ZSwgZXRjLikgdGhpcyBmdW5jdGlvbiBhbHdheXMgcmV0dXJucyBhIHZhbGlkIGFjY2VzcyB0b2tlbiB3aXRob3V0IHJlZnJlc2hpbmcgdGhlIHNlc3Npb24gaXRzZWxmLCBhcyB0aGlzIGlzIGRvbmUgaW4gdGhlIGJhY2tncm91bmQuIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB2ZXJ5IGZhc3QuXG4gICAgICogLSAqKklNUE9SVEFOVCBTRUNVUklUWSBOT1RJQ0U6KiogSWYgdXNpbmcgYW4gaW5zZWN1cmUgc3RvcmFnZSBtZWRpdW0sIHN1Y2ggYXMgY29va2llcyBvciByZXF1ZXN0IGhlYWRlcnMsIHRoZSB1c2VyIG9iamVjdCByZXR1cm5lZCBieSB0aGlzIGZ1bmN0aW9uICoqbXVzdCBub3QgYmUgdHJ1c3RlZCoqLiBBbHdheXMgdmVyaWZ5IHRoZSBKV1QgdXNpbmcgYGdldENsYWltcygpYCBvciB5b3VyIG93biBKV1QgdmVyaWZpY2F0aW9uIGxpYnJhcnkgdG8gc2VjdXJlbHkgZXN0YWJsaXNoIHRoZSB1c2VyJ3MgaWRlbnRpdHkgYW5kIGFjY2Vzcy4gWW91IGNhbiBhbHNvIHVzZSBgZ2V0VXNlcigpYCB0byBmZXRjaCB0aGUgdXNlciBvYmplY3QgZGlyZWN0bHkgZnJvbSB0aGUgQXV0aCBzZXJ2ZXIgZm9yIHRoaXMgcHVycG9zZS5cbiAgICAgKiAtIFdoZW4gdXNpbmcgaW4gYSBicm93c2VyLCB0aGlzIGZ1bmN0aW9uIGlzIHN5bmNocm9uaXplZCBhY3Jvc3MgYWxsIHRhYnMgdXNpbmcgdGhlIFtMb2NrTWFuYWdlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0xvY2tNYW5hZ2VyKSBBUEkuIEluIG90aGVyIGVudmlyb25tZW50cyBtYWtlIHN1cmUgeW91J3ZlIGRlZmluZWQgYSBwcm9wZXIgYGxvY2tgIHByb3BlcnR5LCBpZiBuZWNlc3NhcnksIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcmFjZSBjb25kaXRpb25zIHdoaWxlIHRoZSBzZXNzaW9uIGlzIGJlaW5nIHJlZnJlc2hlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIEdldCB0aGUgc2Vzc2lvbiBkYXRhXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLmdldFNlc3Npb24oKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVSZXNwb25zZSBHZXQgdGhlIHNlc3Npb24gZGF0YVxuICAgICAqIGBgYGpzb25cbiAgICAgKiB7XG4gICAgICogICBcImRhdGFcIjoge1xuICAgICAqICAgICBcInNlc3Npb25cIjoge1xuICAgICAqICAgICAgIFwiYWNjZXNzX3Rva2VuXCI6IFwiPEFDQ0VTU19UT0tFTj5cIixcbiAgICAgKiAgICAgICBcInRva2VuX3R5cGVcIjogXCJiZWFyZXJcIixcbiAgICAgKiAgICAgICBcImV4cGlyZXNfaW5cIjogMzYwMCxcbiAgICAgKiAgICAgICBcImV4cGlyZXNfYXRcIjogMTcwMDAwMDAwMCxcbiAgICAgKiAgICAgICBcInJlZnJlc2hfdG9rZW5cIjogXCI8UkVGUkVTSF9UT0tFTj5cIixcbiAgICAgKiAgICAgICBcInVzZXJcIjoge1xuICAgICAqICAgICAgICAgXCJpZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgXCJhdWRcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgICBcInJvbGVcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICAgIFwiZW1haWxfY29uZmlybWVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgIFwicGhvbmVcIjogXCJcIixcbiAgICAgKiAgICAgICAgIFwibGFzdF9zaWduX2luX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgIFwiYXBwX21ldGFkYXRhXCI6IHtcbiAgICAgKiAgICAgICAgICAgXCJwcm92aWRlclwiOiBcImVtYWlsXCIsXG4gICAgICogICAgICAgICAgIFwicHJvdmlkZXJzXCI6IFtcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsXCJcbiAgICAgKiAgICAgICAgICAgXVxuICAgICAqICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgIFwidXNlcl9tZXRhZGF0YVwiOiB7XG4gICAgICogICAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiLFxuICAgICAqICAgICAgICAgICBcImVtYWlsX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICBcInBob25lX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICBcInN1YlwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiXG4gICAgICogICAgICAgICB9LFxuICAgICAqICAgICAgICAgXCJpZGVudGl0aWVzXCI6IFtcbiAgICAgKiAgICAgICAgICAge1xuICAgICAqICAgICAgICAgICAgIFwiaWRlbnRpdHlfaWRcIjogXCIyMjIyMjIyMi0yMjIyLTIyMjItMjIyMi0yMjIyMjIyMjIyMjJcIixcbiAgICAgKiAgICAgICAgICAgICBcImlkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgICAgICAgXCJ1c2VyX2lkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgICAgICAgXCJpZGVudGl0eV9kYXRhXCI6IHtcbiAgICAgKiAgICAgICAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiLFxuICAgICAqICAgICAgICAgICAgICAgXCJlbWFpbF92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICAgICAgIFwicGhvbmVfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgICAgICBcInN1YlwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiXG4gICAgICogICAgICAgICAgICAgfSxcbiAgICAgKiAgICAgICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgICAgICBcImxhc3Rfc2lnbl9pbl9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiXG4gICAgICogICAgICAgICAgIH1cbiAgICAgKiAgICAgICAgIF0sXG4gICAgICogICAgICAgICBcImNyZWF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgXCJ1cGRhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgIFwiaXNfYW5vbnltb3VzXCI6IGZhbHNlXG4gICAgICogICAgICAgfVxuICAgICAqICAgICB9XG4gICAgICogICB9LFxuICAgICAqICAgXCJlcnJvclwiOiBudWxsXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIGdldFNlc3Npb24oKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2FjcXVpcmVMb2NrKHRoaXMubG9ja0FjcXVpcmVUaW1lb3V0LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWNxdWlyZXMgYSBnbG9iYWwgbG9jayBiYXNlZCBvbiB0aGUgc3RvcmFnZSBrZXkuXG4gICAgICovXG4gICAgYXN5bmMgX2FjcXVpcmVMb2NrKGFjcXVpcmVUaW1lb3V0LCBmbikge1xuICAgICAgICB0aGlzLl9kZWJ1ZygnI19hY3F1aXJlTG9jaycsICdiZWdpbicsIGFjcXVpcmVUaW1lb3V0KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmxvY2tBY3F1aXJlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3QgPSB0aGlzLnBlbmRpbmdJbkxvY2subGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5wZW5kaW5nSW5Mb2NrW3RoaXMucGVuZGluZ0luTG9jay5sZW5ndGggLSAxXVxuICAgICAgICAgICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IGxhc3Q7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBmbigpO1xuICAgICAgICAgICAgICAgIH0pKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nSW5Mb2NrLnB1c2goKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoX2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGp1c3QgY2FyZSBpZiBpdCBmaW5pc2hlZFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmxvY2soYGxvY2s6JHt0aGlzLnN0b3JhZ2VLZXl9YCwgYWNxdWlyZVRpbWVvdXQsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI19hY3F1aXJlTG9jaycsICdsb2NrIGFjcXVpcmVkIGZvciBzdG9yYWdlIGtleScsIHRoaXMuc3RvcmFnZUtleSk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5sb2NrQWNxdWlyZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBmbigpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdJbkxvY2sucHVzaCgoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGp1c3QgY2FyZSBpZiBpdCBmaW5pc2hlZFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KSgpKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAvLyBrZWVwIGRyYWluaW5nIHRoZSBxdWV1ZSB1bnRpbCB0aGVyZSdzIG5vdGhpbmcgdG8gd2FpdCBvblxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAodGhpcy5wZW5kaW5nSW5Mb2NrLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FpdE9uID0gWy4uLnRoaXMucGVuZGluZ0luTG9ja107XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbCh3YWl0T24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nSW5Mb2NrLnNwbGljZSgwLCB3YWl0T24ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJyNfYWNxdWlyZUxvY2snLCAnbG9jayByZWxlYXNlZCBmb3Igc3RvcmFnZSBrZXknLCB0aGlzLnN0b3JhZ2VLZXkpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvY2tBY3F1aXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5fZGVidWcoJyNfYWNxdWlyZUxvY2snLCAnZW5kJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVXNlIGluc3RlYWQgb2Yge0BsaW5rICNnZXRTZXNzaW9ufSBpbnNpZGUgdGhlIGxpYnJhcnkuIEl0IGlzXG4gICAgICogc2VtYW50aWNhbGx5IHVzdWFsbHkgd2hhdCB5b3Ugd2FudCwgYXMgZ2V0dGluZyBhIHNlc3Npb24gaW52b2x2ZXMgc29tZVxuICAgICAqIHByb2Nlc3NpbmcgYWZ0ZXJ3YXJkcyB0aGF0IHJlcXVpcmVzIG9ubHkgb25lIGNsaWVudCBvcGVyYXRpbmcgb24gdGhlXG4gICAgICogc2Vzc2lvbiBhdCBvbmNlIGFjcm9zcyBtdWx0aXBsZSB0YWJzIG9yIHByb2Nlc3Nlcy5cbiAgICAgKi9cbiAgICBhc3luYyBfdXNlU2Vzc2lvbihmbikge1xuICAgICAgICB0aGlzLl9kZWJ1ZygnI191c2VTZXNzaW9uJywgJ2JlZ2luJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyB0aGUgdXNlIG9mIF9fbG9hZFNlc3Npb24gaGVyZSBpcyB0aGUgb25seSBjb3JyZWN0IHVzZSBvZiB0aGUgZnVuY3Rpb24hXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9fbG9hZFNlc3Npb24oKTtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBmbihyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5fZGVidWcoJyNfdXNlU2Vzc2lvbicsICdlbmQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBORVZFUiBVU0UgRElSRUNUTFkhXG4gICAgICpcbiAgICAgKiBBbHdheXMgdXNlIHtAbGluayAjX3VzZVNlc3Npb259LlxuICAgICAqL1xuICAgIGFzeW5jIF9fbG9hZFNlc3Npb24oKSB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCcjX19sb2FkU2Vzc2lvbigpJywgJ2JlZ2luJyk7XG4gICAgICAgIGlmICghdGhpcy5sb2NrQWNxdWlyZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX19sb2FkU2Vzc2lvbigpJywgJ3VzZWQgb3V0c2lkZSBvZiBhbiBhY3F1aXJlZCBsb2NrIScsIG5ldyBFcnJvcigpLnN0YWNrKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRTZXNzaW9uID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IG1heWJlU2Vzc2lvbiA9IGF3YWl0IGdldEl0ZW1Bc3luYyh0aGlzLnN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSk7XG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI2dldFNlc3Npb24oKScsICdzZXNzaW9uIGZyb20gc3RvcmFnZScsIG1heWJlU2Vzc2lvbik7XG4gICAgICAgICAgICBpZiAobWF5YmVTZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2lzVmFsaWRTZXNzaW9uKG1heWJlU2Vzc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlc3Npb24gPSBtYXliZVNlc3Npb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI2dldFNlc3Npb24oKScsICdzZXNzaW9uIGZyb20gc3RvcmFnZSBpcyBub3QgdmFsaWQnKTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVtb3ZlU2Vzc2lvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghY3VycmVudFNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiB7IHNlc3Npb246IG51bGwgfSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEEgc2Vzc2lvbiBpcyBjb25zaWRlcmVkIGV4cGlyZWQgYmVmb3JlIHRoZSBhY2Nlc3MgdG9rZW4gX2FjdHVhbGx5X1xuICAgICAgICAgICAgLy8gZXhwaXJlcy4gV2hlbiB0aGUgYXV0b1JlZnJlc2hUb2tlbiBvcHRpb24gaXMgb2ZmIChvciB3aGVuIHRoZSB0YWIgaXNcbiAgICAgICAgICAgIC8vIGluIHRoZSBiYWNrZ3JvdW5kKSwgdmVyeSBlYWdlciB1c2VycyBvZiBnZXRTZXNzaW9uKCkgLS0gbGlrZVxuICAgICAgICAgICAgLy8gcmVhbHRpbWUtanMgLS0gbWlnaHQgc2VuZCBhIHZhbGlkIEpXVCB3aGljaCB3aWxsIGV4cGlyZSBieSB0aGUgdGltZSBpdFxuICAgICAgICAgICAgLy8gcmVhY2hlcyB0aGUgc2VydmVyLlxuICAgICAgICAgICAgY29uc3QgaGFzRXhwaXJlZCA9IGN1cnJlbnRTZXNzaW9uLmV4cGlyZXNfYXRcbiAgICAgICAgICAgICAgICA/IGN1cnJlbnRTZXNzaW9uLmV4cGlyZXNfYXQgKiAxMDAwIC0gRGF0ZS5ub3coKSA8IEVYUElSWV9NQVJHSU5fTVNcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fZGVidWcoJyNfX2xvYWRTZXNzaW9uKCknLCBgc2Vzc2lvbiBoYXMke2hhc0V4cGlyZWQgPyAnJyA6ICcgbm90J30gZXhwaXJlZGAsICdleHBpcmVzX2F0JywgY3VycmVudFNlc3Npb24uZXhwaXJlc19hdCk7XG4gICAgICAgICAgICBpZiAoIWhhc0V4cGlyZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy51c2VyU3RvcmFnZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXliZVVzZXIgPSAoYXdhaXQgZ2V0SXRlbUFzeW5jKHRoaXMudXNlclN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSArICctdXNlcicpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1heWJlVXNlciA9PT0gbnVsbCB8fCBtYXliZVVzZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG1heWJlVXNlci51c2VyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Vzc2lvbi51c2VyID0gbWF5YmVVc2VyLnVzZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Vzc2lvbi51c2VyID0gdXNlck5vdEF2YWlsYWJsZVByb3h5KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gV3JhcCB0aGUgdXNlciBvYmplY3Qgd2l0aCBhIHdhcm5pbmcgcHJveHkgb24gdGhlIHNlcnZlclxuICAgICAgICAgICAgICAgIC8vIFRoaXMgd2FybnMgd2hlbiBwcm9wZXJ0aWVzIG9mIHRoZSB1c2VyIGFyZSBhY2Nlc3NlZCwgbm90IHdoZW4gc2Vzc2lvbi51c2VyIGl0c2VsZiBpcyBhY2Nlc3NlZFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0b3JhZ2UuaXNTZXJ2ZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlc3Npb24udXNlciAmJlxuICAgICAgICAgICAgICAgICAgICAhY3VycmVudFNlc3Npb24udXNlci5fX2lzVXNlck5vdEF2YWlsYWJsZVByb3h5KSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN1cHByZXNzV2FybmluZ1JlZiA9IHsgdmFsdWU6IHRoaXMuc3VwcHJlc3NHZXRTZXNzaW9uV2FybmluZyB9O1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Vzc2lvbi51c2VyID0gaW5zZWN1cmVVc2VyV2FybmluZ1Byb3h5KGN1cnJlbnRTZXNzaW9uLnVzZXIsIHN1cHByZXNzV2FybmluZ1JlZik7XG4gICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgY2xpZW50LWxldmVsIHN1cHByZXNzaW9uIGZsYWcgd2hlbiB0aGUgcHJveHkgc3VwcHJlc3NlcyB0aGUgd2FybmluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3VwcHJlc3NXYXJuaW5nUmVmLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN1cHByZXNzR2V0U2Vzc2lvbldhcm5pbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgc2Vzc2lvbjogY3VycmVudFNlc3Npb24gfSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogc2Vzc2lvbiwgZXJyb3IgfSA9IGF3YWl0IHRoaXMuX2NhbGxSZWZyZXNoVG9rZW4oY3VycmVudFNlc3Npb24ucmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IHsgc2Vzc2lvbiB9LCBlcnJvcjogbnVsbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX19sb2FkU2Vzc2lvbigpJywgJ2VuZCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGN1cnJlbnQgdXNlciBkZXRhaWxzIGlmIHRoZXJlIGlzIGFuIGV4aXN0aW5nIHNlc3Npb24uIFRoaXMgbWV0aG9kXG4gICAgICogcGVyZm9ybXMgYSBuZXR3b3JrIHJlcXVlc3QgdG8gdGhlIFN1cGFiYXNlIEF1dGggc2VydmVyLCBzbyB0aGUgcmV0dXJuZWRcbiAgICAgKiB2YWx1ZSBpcyBhdXRoZW50aWMgYW5kIGNhbiBiZSB1c2VkIHRvIGJhc2UgYXV0aG9yaXphdGlvbiBydWxlcyBvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBqd3QgVGFrZXMgaW4gYW4gb3B0aW9uYWwgYWNjZXNzIHRva2VuIEpXVC4gSWYgbm8gSldUIGlzIHByb3ZpZGVkLCB0aGUgSldUIGZyb20gdGhlIGN1cnJlbnQgc2Vzc2lvbiBpcyB1c2VkLlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IEF1dGhcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogLSBUaGlzIG1ldGhvZCBmZXRjaGVzIHRoZSB1c2VyIG9iamVjdCBmcm9tIHRoZSBkYXRhYmFzZSBpbnN0ZWFkIG9mIGxvY2FsIHNlc3Npb24uXG4gICAgICogLSBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgZm9yIGNoZWNraW5nIGlmIHRoZSB1c2VyIGlzIGF1dGhvcml6ZWQgYmVjYXVzZSBpdCB2YWxpZGF0ZXMgdGhlIHVzZXIncyBhY2Nlc3MgdG9rZW4gSldUIG9uIHRoZSBzZXJ2ZXIuXG4gICAgICogLSBTaG91bGQgYWx3YXlzIGJlIHVzZWQgd2hlbiBjaGVja2luZyBmb3IgdXNlciBhdXRob3JpemF0aW9uIG9uIHRoZSBzZXJ2ZXIuIE9uIHRoZSBjbGllbnQsIHlvdSBjYW4gaW5zdGVhZCB1c2UgYGdldFNlc3Npb24oKS5zZXNzaW9uLnVzZXJgIGZvciBmYXN0ZXIgcmVzdWx0cy4gYGdldFNlc3Npb25gIGlzIGluc2VjdXJlIG9uIHRoZSBzZXJ2ZXIuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBHZXQgdGhlIGxvZ2dlZCBpbiB1c2VyIHdpdGggdGhlIGN1cnJlbnQgZXhpc3Rpbmcgc2Vzc2lvblxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhOiB7IHVzZXIgfSB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5nZXRVc2VyKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlUmVzcG9uc2UgR2V0IHRoZSBsb2dnZWQgaW4gdXNlciB3aXRoIHRoZSBjdXJyZW50IGV4aXN0aW5nIHNlc3Npb25cbiAgICAgKiBgYGBqc29uXG4gICAgICoge1xuICAgICAqICAgXCJkYXRhXCI6IHtcbiAgICAgKiAgICAgXCJ1c2VyXCI6IHtcbiAgICAgKiAgICAgICBcImlkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgXCJhdWRcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgXCJyb2xlXCI6IFwiYXV0aGVudGljYXRlZFwiLFxuICAgICAqICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiLFxuICAgICAqICAgICAgIFwiZW1haWxfY29uZmlybWVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcInBob25lXCI6IFwiXCIsXG4gICAgICogICAgICAgXCJjb25maXJtZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwibGFzdF9zaWduX2luX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcImFwcF9tZXRhZGF0YVwiOiB7XG4gICAgICogICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgIFwicHJvdmlkZXJzXCI6IFtcbiAgICAgKiAgICAgICAgICAgXCJlbWFpbFwiXG4gICAgICogICAgICAgICBdXG4gICAgICogICAgICAgfSxcbiAgICAgKiAgICAgICBcInVzZXJfbWV0YWRhdGFcIjoge1xuICAgICAqICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgICBcImVtYWlsX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgXCJwaG9uZV92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgIFwic3ViXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCJcbiAgICAgKiAgICAgICB9LFxuICAgICAqICAgICAgIFwiaWRlbnRpdGllc1wiOiBbXG4gICAgICogICAgICAgICB7XG4gICAgICogICAgICAgICAgIFwiaWRlbnRpdHlfaWRcIjogXCIyMjIyMjIyMi0yMjIyLTIyMjItMjIyMi0yMjIyMjIyMjIyMjJcIixcbiAgICAgKiAgICAgICAgICAgXCJpZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgICBcInVzZXJfaWRcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICAgICAgXCJpZGVudGl0eV9kYXRhXCI6IHtcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICAgIFwicGhvbmVfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgICAgXCJzdWJcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIlxuICAgICAqICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgICAgXCJsYXN0X3NpZ25faW5fYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICBcImNyZWF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIlxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgIF0sXG4gICAgICogICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwiaXNfYW5vbnltb3VzXCI6IGZhbHNlXG4gICAgICogICAgIH1cbiAgICAgKiAgIH0sXG4gICAgICogICBcImVycm9yXCI6IG51bGxcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBHZXQgdGhlIGxvZ2dlZCBpbiB1c2VyIHdpdGggYSBjdXN0b20gYWNjZXNzIHRva2VuIGp3dFxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhOiB7IHVzZXIgfSB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5nZXRVc2VyKGp3dClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBnZXRVc2VyKGp3dCkge1xuICAgICAgICBpZiAoand0KSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZ2V0VXNlcihqd3QpO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2FjcXVpcmVMb2NrKHRoaXMubG9ja0FjcXVpcmVUaW1lb3V0LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZ2V0VXNlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHJlc3VsdC5kYXRhLnVzZXIpIHtcbiAgICAgICAgICAgIHRoaXMuc3VwcHJlc3NHZXRTZXNzaW9uV2FybmluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgYXN5bmMgX2dldFVzZXIoand0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoand0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdHRVQnLCBgJHt0aGlzLnVybH0vdXNlcmAsIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBqd3Q6IGp3dCxcbiAgICAgICAgICAgICAgICAgICAgeGZvcm06IF91c2VyUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJucyBhbiBlcnJvciBpZiB0aGVyZSBpcyBubyBhY2Nlc3NfdG9rZW4gb3IgY3VzdG9tIGF1dGhvcml6YXRpb24gaGVhZGVyXG4gICAgICAgICAgICAgICAgaWYgKCEoKF9hID0gZGF0YS5zZXNzaW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWNjZXNzX3Rva2VuKSAmJiAhdGhpcy5oYXNDdXN0b21BdXRob3JpemF0aW9uSGVhZGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgdXNlcjogbnVsbCB9LCBlcnJvcjogbmV3IEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKCkgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdHRVQnLCBgJHt0aGlzLnVybH0vdXNlcmAsIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBqd3Q6IChfYyA9IChfYiA9IGRhdGEuc2Vzc2lvbikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmFjY2Vzc190b2tlbikgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICB4Zm9ybTogX3VzZXJSZXNwb25zZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0F1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBKV1QgY29udGFpbnMgYSBgc2Vzc2lvbl9pZGAgd2hpY2ggZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbiBhY3RpdmVcbiAgICAgICAgICAgICAgICAgICAgLy8gc2Vzc2lvbiBpbiB0aGUgZGF0YWJhc2UsIGluZGljYXRpbmcgdGhlIHVzZXIgaXMgc2lnbmVkIG91dC5cbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVtb3ZlU2Vzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCByZW1vdmVJdGVtQXN5bmModGhpcy5zdG9yYWdlLCBgJHt0aGlzLnN0b3JhZ2VLZXl9LWNvZGUtdmVyaWZpZXJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IHsgdXNlcjogbnVsbCB9LCBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdXNlciBkYXRhIGZvciBhIGxvZ2dlZCBpbiB1c2VyLlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IEF1dGhcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogLSBJbiBvcmRlciB0byB1c2UgdGhlIGB1cGRhdGVVc2VyKClgIG1ldGhvZCwgdGhlIHVzZXIgbmVlZHMgdG8gYmUgc2lnbmVkIGluIGZpcnN0LlxuICAgICAqIC0gQnkgZGVmYXVsdCwgZW1haWwgdXBkYXRlcyBzZW5kcyBhIGNvbmZpcm1hdGlvbiBsaW5rIHRvIGJvdGggdGhlIHVzZXIncyBjdXJyZW50IGFuZCBuZXcgZW1haWwuXG4gICAgICogVG8gb25seSBzZW5kIGEgY29uZmlybWF0aW9uIGxpbmsgdG8gdGhlIHVzZXIncyBuZXcgZW1haWwsIGRpc2FibGUgKipTZWN1cmUgZW1haWwgY2hhbmdlKiogaW4geW91ciBwcm9qZWN0J3MgW2VtYWlsIGF1dGggcHJvdmlkZXIgc2V0dGluZ3NdKC9kYXNoYm9hcmQvcHJvamVjdC9fL2F1dGgvcHJvdmlkZXJzKS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlRGVzY3JpcHRpb24gVXBkYXRlIHRoZSBlbWFpbCBmb3IgYW4gYXV0aGVudGljYXRlZCB1c2VyXG4gICAgICogU2VuZHMgYSBcIkNvbmZpcm0gRW1haWwgQ2hhbmdlXCIgZW1haWwgdG8gdGhlIG5ldyBhZGRyZXNzLiBJZiAqKlNlY3VyZSBFbWFpbCBDaGFuZ2UqKiBpcyBlbmFibGVkIChkZWZhdWx0KSwgY29uZmlybWF0aW9uIGlzIGFsc28gcmVxdWlyZWQgZnJvbSB0aGUgKipvbGQgZW1haWwqKiBiZWZvcmUgdGhlIGNoYW5nZSBpcyBhcHBsaWVkLiBUbyBza2lwIGR1YWwgY29uZmlybWF0aW9uIGFuZCBhcHBseSB0aGUgY2hhbmdlIGFmdGVyIG9ubHkgdGhlIG5ldyBlbWFpbCBpcyB2ZXJpZmllZCwgZGlzYWJsZSAqKlNlY3VyZSBFbWFpbCBDaGFuZ2UqKiBpbiB0aGUgW0VtYWlsIEF1dGggUHJvdmlkZXIgc2V0dGluZ3NdKC9kYXNoYm9hcmQvcHJvamVjdC9fL2F1dGgvcHJvdmlkZXJzP3Byb3ZpZGVyPUVtYWlsKS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFVwZGF0ZSB0aGUgZW1haWwgZm9yIGFuIGF1dGhlbnRpY2F0ZWQgdXNlclxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC51cGRhdGVVc2VyKHtcbiAgICAgKiAgIGVtYWlsOiAnbmV3QGVtYWlsLmNvbSdcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVSZXNwb25zZSBVcGRhdGUgdGhlIGVtYWlsIGZvciBhbiBhdXRoZW50aWNhdGVkIHVzZXJcbiAgICAgKiBgYGBqc29uXG4gICAgICoge1xuICAgICAqICAgXCJkYXRhXCI6IHtcbiAgICAgKiAgICAgXCJ1c2VyXCI6IHtcbiAgICAgKiAgICAgICBcImlkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgXCJhdWRcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgXCJyb2xlXCI6IFwiYXV0aGVudGljYXRlZFwiLFxuICAgICAqICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiLFxuICAgICAqICAgICAgIFwiZW1haWxfY29uZmlybWVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcInBob25lXCI6IFwiXCIsXG4gICAgICogICAgICAgXCJjb25maXJtZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwibmV3X2VtYWlsXCI6IFwibmV3QGVtYWlsLmNvbVwiLFxuICAgICAqICAgICAgIFwiZW1haWxfY2hhbmdlX3NlbnRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwibGFzdF9zaWduX2luX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcImFwcF9tZXRhZGF0YVwiOiB7XG4gICAgICogICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgIFwicHJvdmlkZXJzXCI6IFtcbiAgICAgKiAgICAgICAgICAgXCJlbWFpbFwiXG4gICAgICogICAgICAgICBdXG4gICAgICogICAgICAgfSxcbiAgICAgKiAgICAgICBcInVzZXJfbWV0YWRhdGFcIjoge1xuICAgICAqICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgICBcImVtYWlsX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgXCJwaG9uZV92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgIFwic3ViXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCJcbiAgICAgKiAgICAgICB9LFxuICAgICAqICAgICAgIFwiaWRlbnRpdGllc1wiOiBbXG4gICAgICogICAgICAgICB7XG4gICAgICogICAgICAgICAgIFwiaWRlbnRpdHlfaWRcIjogXCIyMjIyMjIyMi0yMjIyLTIyMjItMjIyMi0yMjIyMjIyMjIyMjJcIixcbiAgICAgKiAgICAgICAgICAgXCJpZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgICBcInVzZXJfaWRcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICAgICAgXCJpZGVudGl0eV9kYXRhXCI6IHtcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICAgIFwicGhvbmVfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgICAgXCJzdWJcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIlxuICAgICAqICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgICAgXCJsYXN0X3NpZ25faW5fYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICBcImNyZWF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIlxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgIF0sXG4gICAgICogICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwiaXNfYW5vbnltb3VzXCI6IGZhbHNlXG4gICAgICogICAgIH1cbiAgICAgKiAgIH0sXG4gICAgICogICBcImVycm9yXCI6IG51bGxcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZURlc2NyaXB0aW9uIFVwZGF0ZSB0aGUgcGhvbmUgbnVtYmVyIGZvciBhbiBhdXRoZW50aWNhdGVkIHVzZXJcbiAgICAgKiBTZW5kcyBhIG9uZS10aW1lIHBhc3N3b3JkIChPVFApIHRvIHRoZSBuZXcgcGhvbmUgbnVtYmVyLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgVXBkYXRlIHRoZSBwaG9uZSBudW1iZXIgZm9yIGFuIGF1dGhlbnRpY2F0ZWQgdXNlclxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC51cGRhdGVVc2VyKHtcbiAgICAgKiAgIHBob25lOiAnMTIzNDU2Nzg5J1xuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBVcGRhdGUgdGhlIHBhc3N3b3JkIGZvciBhbiBhdXRoZW50aWNhdGVkIHVzZXJcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGgudXBkYXRlVXNlcih7XG4gICAgICogICBwYXNzd29yZDogJ25ldyBwYXNzd29yZCdcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVEZXNjcmlwdGlvbiBVcGRhdGUgdGhlIHVzZXIncyBtZXRhZGF0YVxuICAgICAqIFVwZGF0ZXMgdGhlIHVzZXIncyBjdXN0b20gbWV0YWRhdGEuXG4gICAgICpcbiAgICAgKiAqKk5vdGUqKjogVGhlIGBkYXRhYCBmaWVsZCBtYXBzIHRvIHRoZSBgYXV0aC51c2Vycy5yYXdfdXNlcl9tZXRhX2RhdGFgIGNvbHVtbiBpbiB5b3VyIFN1cGFiYXNlIGRhdGFiYXNlLiBXaGVuIGNhbGxpbmcgYGdldFVzZXIoKWAsIHRoZSBkYXRhIHdpbGwgYmUgYXZhaWxhYmxlIGFzIGB1c2VyLnVzZXJfbWV0YWRhdGFgLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgVXBkYXRlIHRoZSB1c2VyJ3MgbWV0YWRhdGFcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGgudXBkYXRlVXNlcih7XG4gICAgICogICBkYXRhOiB7IGhlbGxvOiAnd29ybGQnIH1cbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVEZXNjcmlwdGlvbiBVcGRhdGUgdGhlIHVzZXIncyBwYXNzd29yZCB3aXRoIGEgbm9uY2VcbiAgICAgKiBJZiAqKlNlY3VyZSBwYXNzd29yZCBjaGFuZ2UqKiBpcyBlbmFibGVkIGluIHlvdXIgW3Byb2plY3QncyBlbWFpbCBwcm92aWRlciBzZXR0aW5nc10oL2Rhc2hib2FyZC9wcm9qZWN0L18vYXV0aC9wcm92aWRlcnMpLCB1cGRhdGluZyB0aGUgdXNlcidzIHBhc3N3b3JkIHdvdWxkIHJlcXVpcmUgYSBub25jZSBpZiB0aGUgdXNlciAqKmhhc24ndCByZWNlbnRseSBzaWduZWQgaW4qKi4gVGhlIG5vbmNlIGlzIHNlbnQgdG8gdGhlIHVzZXIncyBlbWFpbCBvciBwaG9uZSBudW1iZXIuIEEgdXNlciBpcyBkZWVtZWQgcmVjZW50bHkgc2lnbmVkIGluIGlmIHRoZSBzZXNzaW9uIHdhcyBjcmVhdGVkIGluIHRoZSBsYXN0IDI0IGhvdXJzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgVXBkYXRlIHRoZSB1c2VyJ3MgcGFzc3dvcmQgd2l0aCBhIG5vbmNlXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLnVwZGF0ZVVzZXIoe1xuICAgICAqICAgcGFzc3dvcmQ6ICduZXcgcGFzc3dvcmQnLFxuICAgICAqICAgbm9uY2U6ICcxMjM0NTYnXG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyB1cGRhdGVVc2VyKGF0dHJpYnV0ZXMsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVQcm9taXNlO1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fYWNxdWlyZUxvY2sodGhpcy5sb2NrQWNxdWlyZVRpbWVvdXQsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91cGRhdGVVc2VyKGF0dHJpYnV0ZXMsIG9wdGlvbnMpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgX3VwZGF0ZVVzZXIoYXR0cmlidXRlcywgb3B0aW9ucyA9IHt9KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhOiBzZXNzaW9uRGF0YSwgZXJyb3I6IHNlc3Npb25FcnJvciB9ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgc2Vzc2lvbkVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb25EYXRhLnNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9uRGF0YS5zZXNzaW9uO1xuICAgICAgICAgICAgICAgIGxldCBjb2RlQ2hhbGxlbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgY29kZUNoYWxsZW5nZU1ldGhvZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZmxvd1R5cGUgPT09ICdwa2NlJyAmJiBhdHRyaWJ1dGVzLmVtYWlsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgICAgICBbY29kZUNoYWxsZW5nZSwgY29kZUNoYWxsZW5nZU1ldGhvZF0gPSBhd2FpdCBnZXRDb2RlQ2hhbGxlbmdlQW5kTWV0aG9kKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvcjogdXNlckVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUFVUJywgYCR7dGhpcy51cmx9L3VzZXJgLCB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RUbzogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmVtYWlsUmVkaXJlY3RUbyxcbiAgICAgICAgICAgICAgICAgICAgYm9keTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhdHRyaWJ1dGVzKSwgeyBjb2RlX2NoYWxsZW5nZTogY29kZUNoYWxsZW5nZSwgY29kZV9jaGFsbGVuZ2VfbWV0aG9kOiBjb2RlQ2hhbGxlbmdlTWV0aG9kIH0pLFxuICAgICAgICAgICAgICAgICAgICBqd3Q6IHNlc3Npb24uYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICB4Zm9ybTogX3VzZXJSZXNwb25zZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodXNlckVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IHVzZXJFcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2Vzc2lvbi51c2VyID0gZGF0YS51c2VyO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKHNlc3Npb24pO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKCdVU0VSX1VQREFURUQnLCBzZXNzaW9uKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyB1c2VyOiBzZXNzaW9uLnVzZXIgfSwgZXJyb3I6IG51bGwgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGF3YWl0IHJlbW92ZUl0ZW1Bc3luYyh0aGlzLnN0b3JhZ2UsIGAke3RoaXMuc3RvcmFnZUtleX0tY29kZS12ZXJpZmllcmApO1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHVzZXI6IG51bGwgfSwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzZXNzaW9uIGRhdGEgZnJvbSB0aGUgY3VycmVudCBzZXNzaW9uLiBJZiB0aGUgY3VycmVudCBzZXNzaW9uIGlzIGV4cGlyZWQsIHNldFNlc3Npb24gd2lsbCB0YWtlIGNhcmUgb2YgcmVmcmVzaGluZyBpdCB0byBvYnRhaW4gYSBuZXcgc2Vzc2lvbi5cbiAgICAgKiBJZiB0aGUgcmVmcmVzaCB0b2tlbiBvciBhY2Nlc3MgdG9rZW4gaW4gdGhlIGN1cnJlbnQgc2Vzc2lvbiBpcyBpbnZhbGlkLCBhbiBlcnJvciB3aWxsIGJlIHRocm93bi5cbiAgICAgKiBAcGFyYW0gY3VycmVudFNlc3Npb24gVGhlIGN1cnJlbnQgc2Vzc2lvbiB0aGF0IG1pbmltYWxseSBjb250YWlucyBhbiBhY2Nlc3MgdG9rZW4gYW5kIHJlZnJlc2ggdG9rZW4uXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgQXV0aFxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAtIFRoaXMgbWV0aG9kIHNldHMgdGhlIHNlc3Npb24gdXNpbmcgYW4gYGFjY2Vzc190b2tlbmAgYW5kIGByZWZyZXNoX3Rva2VuYC5cbiAgICAgKiAtIElmIHN1Y2Nlc3NmdWwsIGEgYFNJR05FRF9JTmAgZXZlbnQgaXMgZW1pdHRlZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlRGVzY3JpcHRpb24gU2V0IHRoZSBzZXNzaW9uXG4gICAgICogU2V0cyB0aGUgc2Vzc2lvbiBkYXRhIGZyb20gYW4gYWNjZXNzX3Rva2VuIGFuZCByZWZyZXNoX3Rva2VuLCB0aGVuIHJldHVybnMgYW4gYXV0aCByZXNwb25zZSBvciBlcnJvci5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFNldCB0aGUgc2Vzc2lvblxuICAgICAqIGBgYGpzXG4gICAgICogICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLnNldFNlc3Npb24oe1xuICAgICAqICAgICBhY2Nlc3NfdG9rZW4sXG4gICAgICogICAgIHJlZnJlc2hfdG9rZW5cbiAgICAgKiAgIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVJlc3BvbnNlIFNldCB0aGUgc2Vzc2lvblxuICAgICAqIGBgYGpzb25cbiAgICAgKiB7XG4gICAgICogICBcImRhdGFcIjoge1xuICAgICAqICAgICBcInVzZXJcIjoge1xuICAgICAqICAgICAgIFwiaWRcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICBcImF1ZFwiOiBcImF1dGhlbnRpY2F0ZWRcIixcbiAgICAgKiAgICAgICBcInJvbGVcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgXCJlbWFpbF9jb25maXJtZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwicGhvbmVcIjogXCJcIixcbiAgICAgKiAgICAgICBcImNvbmZpcm1lZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgXCJsYXN0X3NpZ25faW5fYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwiYXBwX21ldGFkYXRhXCI6IHtcbiAgICAgKiAgICAgICAgIFwicHJvdmlkZXJcIjogXCJlbWFpbFwiLFxuICAgICAqICAgICAgICAgXCJwcm92aWRlcnNcIjogW1xuICAgICAqICAgICAgICAgICBcImVtYWlsXCJcbiAgICAgKiAgICAgICAgIF1cbiAgICAgKiAgICAgICB9LFxuICAgICAqICAgICAgIFwidXNlcl9tZXRhZGF0YVwiOiB7XG4gICAgICogICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICAgIFwiZW1haWxfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICBcInBob25lX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgXCJzdWJcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIlxuICAgICAqICAgICAgIH0sXG4gICAgICogICAgICAgXCJpZGVudGl0aWVzXCI6IFtcbiAgICAgKiAgICAgICAgIHtcbiAgICAgKiAgICAgICAgICAgXCJpZGVudGl0eV9pZFwiOiBcIjIyMjIyMjIyLTIyMjItMjIyMi0yMjIyLTIyMjIyMjIyMjIyMlwiLFxuICAgICAqICAgICAgICAgICBcImlkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgICAgIFwidXNlcl9pZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgICBcImlkZW50aXR5X2RhdGFcIjoge1xuICAgICAqICAgICAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiLFxuICAgICAqICAgICAgICAgICAgIFwiZW1haWxfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgICAgXCJwaG9uZV92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICAgICBcInN1YlwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiXG4gICAgICogICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgIFwicHJvdmlkZXJcIjogXCJlbWFpbFwiLFxuICAgICAqICAgICAgICAgICBcImxhc3Rfc2lnbl9pbl9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiXG4gICAgICogICAgICAgICB9XG4gICAgICogICAgICAgXSxcbiAgICAgKiAgICAgICBcImNyZWF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgXCJpc19hbm9ueW1vdXNcIjogZmFsc2VcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgXCJzZXNzaW9uXCI6IHtcbiAgICAgKiAgICAgICBcImFjY2Vzc190b2tlblwiOiBcIjxBQ0NFU1NfVE9LRU4+XCIsXG4gICAgICogICAgICAgXCJyZWZyZXNoX3Rva2VuXCI6IFwiPFJFRlJFU0hfVE9LRU4+XCIsXG4gICAgICogICAgICAgXCJ1c2VyXCI6IHtcbiAgICAgKiAgICAgICAgIFwiaWRcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICAgIFwiYXVkXCI6IFwiYXV0aGVudGljYXRlZFwiLFxuICAgICAqICAgICAgICAgXCJyb2xlXCI6IFwiYXV0aGVudGljYXRlZFwiLFxuICAgICAqICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgICBcImVtYWlsX2NvbmZpcm1lZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICBcInBob25lXCI6IFwiXCIsXG4gICAgICogICAgICAgICBcImNvbmZpcm1lZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICBcImxhc3Rfc2lnbl9pbl9hdFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgXCJhcHBfbWV0YWRhdGFcIjoge1xuICAgICAqICAgICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgICAgXCJwcm92aWRlcnNcIjogW1xuICAgICAqICAgICAgICAgICAgIFwiZW1haWxcIlxuICAgICAqICAgICAgICAgICBdXG4gICAgICogICAgICAgICB9LFxuICAgICAqICAgICAgICAgXCJ1c2VyX21ldGFkYXRhXCI6IHtcbiAgICAgKiAgICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgICAgIFwiZW1haWxfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgIFwicGhvbmVfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgIFwic3ViXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCJcbiAgICAgKiAgICAgICAgIH0sXG4gICAgICogICAgICAgICBcImlkZW50aXRpZXNcIjogW1xuICAgICAqICAgICAgICAgICB7XG4gICAgICogICAgICAgICAgICAgXCJpZGVudGl0eV9pZFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgICAgXCJpZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgICAgIFwidXNlcl9pZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgICAgIFwiaWRlbnRpdHlfZGF0YVwiOiB7XG4gICAgICogICAgICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICAgICAgICAgIFwiZW1haWxfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgICAgICBcInBob25lX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICAgICAgXCJzdWJcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIlxuICAgICAqICAgICAgICAgICAgIH0sXG4gICAgICogICAgICAgICAgICAgXCJwcm92aWRlclwiOiBcImVtYWlsXCIsXG4gICAgICogICAgICAgICAgICAgXCJsYXN0X3NpZ25faW5fYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgICAgXCJ1cGRhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIlxuICAgICAqICAgICAgICAgICB9XG4gICAgICogICAgICAgICBdLFxuICAgICAqICAgICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICBcImlzX2Fub255bW91c1wiOiBmYWxzZVxuICAgICAqICAgICAgIH0sXG4gICAgICogICAgICAgXCJ0b2tlbl90eXBlXCI6IFwiYmVhcmVyXCIsXG4gICAgICogICAgICAgXCJleHBpcmVzX2luXCI6IDM1MDAsXG4gICAgICogICAgICAgXCJleHBpcmVzX2F0XCI6IDE3MDAwMDAwMDBcbiAgICAgKiAgICAgfVxuICAgICAqICAgfSxcbiAgICAgKiAgIFwiZXJyb3JcIjogbnVsbFxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBzZXRTZXNzaW9uKGN1cnJlbnRTZXNzaW9uKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9hY3F1aXJlTG9jayh0aGlzLmxvY2tBY3F1aXJlVGltZW91dCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3NldFNlc3Npb24oY3VycmVudFNlc3Npb24pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgYXN5bmMgX3NldFNlc3Npb24oY3VycmVudFNlc3Npb24pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghY3VycmVudFNlc3Npb24uYWNjZXNzX3Rva2VuIHx8ICFjdXJyZW50U2Vzc2lvbi5yZWZyZXNoX3Rva2VuKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0aW1lTm93ID0gRGF0ZS5ub3coKSAvIDEwMDA7XG4gICAgICAgICAgICBsZXQgZXhwaXJlc0F0ID0gdGltZU5vdztcbiAgICAgICAgICAgIGxldCBoYXNFeHBpcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBzZXNzaW9uID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHsgcGF5bG9hZCB9ID0gZGVjb2RlSldUKGN1cnJlbnRTZXNzaW9uLmFjY2Vzc190b2tlbik7XG4gICAgICAgICAgICBpZiAocGF5bG9hZC5leHApIHtcbiAgICAgICAgICAgICAgICBleHBpcmVzQXQgPSBwYXlsb2FkLmV4cDtcbiAgICAgICAgICAgICAgICBoYXNFeHBpcmVkID0gZXhwaXJlc0F0IDw9IHRpbWVOb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzRXhwaXJlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogcmVmcmVzaGVkU2Vzc2lvbiwgZXJyb3IgfSA9IGF3YWl0IHRoaXMuX2NhbGxSZWZyZXNoVG9rZW4oY3VycmVudFNlc3Npb24ucmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3I6IGVycm9yIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXJlZnJlc2hlZFNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yOiBudWxsIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlc3Npb24gPSByZWZyZXNoZWRTZXNzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgdGhpcy5fZ2V0VXNlcihjdXJyZW50U2Vzc2lvbi5hY2Nlc3NfdG9rZW4pO1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sIGVycm9yIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXNzaW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfdG9rZW46IGN1cnJlbnRTZXNzaW9uLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaF90b2tlbjogY3VycmVudFNlc3Npb24ucmVmcmVzaF90b2tlbixcbiAgICAgICAgICAgICAgICAgICAgdXNlcjogZGF0YS51c2VyLFxuICAgICAgICAgICAgICAgICAgICB0b2tlbl90eXBlOiAnYmVhcmVyJyxcbiAgICAgICAgICAgICAgICAgICAgZXhwaXJlc19pbjogZXhwaXJlc0F0IC0gdGltZU5vdyxcbiAgICAgICAgICAgICAgICAgICAgZXhwaXJlc19hdDogZXhwaXJlc0F0LFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2F2ZVNlc3Npb24oc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1NJR05FRF9JTicsIHNlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHNlc3Npb246IG51bGwsIHVzZXI6IG51bGwgfSwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbmV3IHNlc3Npb24sIHJlZ2FyZGxlc3Mgb2YgZXhwaXJ5IHN0YXR1cy5cbiAgICAgKiBUYWtlcyBpbiBhbiBvcHRpb25hbCBjdXJyZW50IHNlc3Npb24uIElmIG5vdCBwYXNzZWQgaW4sIHRoZW4gcmVmcmVzaFNlc3Npb24oKSB3aWxsIGF0dGVtcHQgdG8gcmV0cmlldmUgaXQgZnJvbSBnZXRTZXNzaW9uKCkuXG4gICAgICogSWYgdGhlIGN1cnJlbnQgc2Vzc2lvbidzIHJlZnJlc2ggdG9rZW4gaXMgaW52YWxpZCwgYW4gZXJyb3Igd2lsbCBiZSB0aHJvd24uXG4gICAgICogQHBhcmFtIGN1cnJlbnRTZXNzaW9uIFRoZSBjdXJyZW50IHNlc3Npb24uIElmIHBhc3NlZCBpbiwgaXQgbXVzdCBjb250YWluIGEgcmVmcmVzaCB0b2tlbi5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBBdXRoXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIC0gVGhpcyBtZXRob2Qgd2lsbCByZWZyZXNoIGFuZCByZXR1cm4gYSBuZXcgc2Vzc2lvbiB3aGV0aGVyIHRoZSBjdXJyZW50IG9uZSBpcyBleHBpcmVkIG9yIG5vdC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFJlZnJlc2ggc2Vzc2lvbiB1c2luZyB0aGUgY3VycmVudCBzZXNzaW9uXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLnJlZnJlc2hTZXNzaW9uKClcbiAgICAgKiBjb25zdCB7IHNlc3Npb24sIHVzZXIgfSA9IGRhdGFcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlUmVzcG9uc2UgUmVmcmVzaCBzZXNzaW9uIHVzaW5nIHRoZSBjdXJyZW50IHNlc3Npb25cbiAgICAgKiBgYGBqc29uXG4gICAgICoge1xuICAgICAqICAgXCJkYXRhXCI6IHtcbiAgICAgKiAgICAgXCJ1c2VyXCI6IHtcbiAgICAgKiAgICAgICBcImlkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgXCJhdWRcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgXCJyb2xlXCI6IFwiYXV0aGVudGljYXRlZFwiLFxuICAgICAqICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiLFxuICAgICAqICAgICAgIFwiZW1haWxfY29uZmlybWVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcInBob25lXCI6IFwiXCIsXG4gICAgICogICAgICAgXCJjb25maXJtZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwibGFzdF9zaWduX2luX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcImFwcF9tZXRhZGF0YVwiOiB7XG4gICAgICogICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgIFwicHJvdmlkZXJzXCI6IFtcbiAgICAgKiAgICAgICAgICAgXCJlbWFpbFwiXG4gICAgICogICAgICAgICBdXG4gICAgICogICAgICAgfSxcbiAgICAgKiAgICAgICBcInVzZXJfbWV0YWRhdGFcIjoge1xuICAgICAqICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgICBcImVtYWlsX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgXCJwaG9uZV92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgIFwic3ViXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCJcbiAgICAgKiAgICAgICB9LFxuICAgICAqICAgICAgIFwiaWRlbnRpdGllc1wiOiBbXG4gICAgICogICAgICAgICB7XG4gICAgICogICAgICAgICAgIFwiaWRlbnRpdHlfaWRcIjogXCIyMjIyMjIyMi0yMjIyLTIyMjItMjIyMi0yMjIyMjIyMjIyMjJcIixcbiAgICAgKiAgICAgICAgICAgXCJpZFwiOiBcIjExMTExMTExLTExMTEtMTExMS0xMTExLTExMTExMTExMTExMVwiLFxuICAgICAqICAgICAgICAgICBcInVzZXJfaWRcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICAgICAgXCJpZGVudGl0eV9kYXRhXCI6IHtcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICAgICAgICBcImVtYWlsX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICAgIFwicGhvbmVfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgICAgXCJzdWJcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIlxuICAgICAqICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgICAgXCJsYXN0X3NpZ25faW5fYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICBcImNyZWF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIlxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgIF0sXG4gICAgICogICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgIFwiaXNfYW5vbnltb3VzXCI6IGZhbHNlXG4gICAgICogICAgIH0sXG4gICAgICogICAgIFwic2Vzc2lvblwiOiB7XG4gICAgICogICAgICAgXCJhY2Nlc3NfdG9rZW5cIjogXCI8QUNDRVNTX1RPS0VOPlwiLFxuICAgICAqICAgICAgIFwidG9rZW5fdHlwZVwiOiBcImJlYXJlclwiLFxuICAgICAqICAgICAgIFwiZXhwaXJlc19pblwiOiAzNjAwLFxuICAgICAqICAgICAgIFwiZXhwaXJlc19hdFwiOiAxNzAwMDAwMDAwLFxuICAgICAqICAgICAgIFwicmVmcmVzaF90b2tlblwiOiBcIjxSRUZSRVNIX1RPS0VOPlwiLFxuICAgICAqICAgICAgIFwidXNlclwiOiB7XG4gICAgICogICAgICAgICBcImlkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgICBcImF1ZFwiOiBcImF1dGhlbnRpY2F0ZWRcIixcbiAgICAgKiAgICAgICAgIFwicm9sZVwiOiBcImF1dGhlbnRpY2F0ZWRcIixcbiAgICAgKiAgICAgICAgIFwiZW1haWxcIjogXCJleGFtcGxlQGVtYWlsLmNvbVwiLFxuICAgICAqICAgICAgICAgXCJlbWFpbF9jb25maXJtZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgXCJwaG9uZVwiOiBcIlwiLFxuICAgICAqICAgICAgICAgXCJjb25maXJtZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgXCJsYXN0X3NpZ25faW5fYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgXCJhcHBfbWV0YWRhdGFcIjoge1xuICAgICAqICAgICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgICAgXCJwcm92aWRlcnNcIjogW1xuICAgICAqICAgICAgICAgICAgIFwiZW1haWxcIlxuICAgICAqICAgICAgICAgICBdXG4gICAgICogICAgICAgICB9LFxuICAgICAqICAgICAgICAgXCJ1c2VyX21ldGFkYXRhXCI6IHtcbiAgICAgKiAgICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgICAgIFwiZW1haWxfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgIFwicGhvbmVfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgIFwic3ViXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCJcbiAgICAgKiAgICAgICAgIH0sXG4gICAgICogICAgICAgICBcImlkZW50aXRpZXNcIjogW1xuICAgICAqICAgICAgICAgICB7XG4gICAgICogICAgICAgICAgICAgXCJpZGVudGl0eV9pZFwiOiBcIjIyMjIyMjIyLTIyMjItMjIyMi0yMjIyLTIyMjIyMjIyMjIyMlwiLFxuICAgICAqICAgICAgICAgICAgIFwiaWRcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICAgICAgICBcInVzZXJfaWRcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICAgICAgICBcImlkZW50aXR5X2RhdGFcIjoge1xuICAgICAqICAgICAgICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgICAgICAgICBcImVtYWlsX3ZlcmlmaWVkXCI6IGZhbHNlLFxuICAgICAqICAgICAgICAgICAgICAgXCJwaG9uZV92ZXJpZmllZFwiOiBmYWxzZSxcbiAgICAgKiAgICAgICAgICAgICAgIFwic3ViXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCJcbiAgICAgKiAgICAgICAgICAgICB9LFxuICAgICAqICAgICAgICAgICAgIFwicHJvdmlkZXJcIjogXCJlbWFpbFwiLFxuICAgICAqICAgICAgICAgICAgIFwibGFzdF9zaWduX2luX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgICAgICBcImNyZWF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgICAgIFwidXBkYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCJcbiAgICAgKiAgICAgICAgICAgfVxuICAgICAqICAgICAgICAgXSxcbiAgICAgKiAgICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgXCJpc19hbm9ueW1vdXNcIjogZmFsc2VcbiAgICAgKiAgICAgICB9XG4gICAgICogICAgIH1cbiAgICAgKiAgIH0sXG4gICAgICogICBcImVycm9yXCI6IG51bGxcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBSZWZyZXNoIHNlc3Npb24gdXNpbmcgYSByZWZyZXNoIHRva2VuXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLnJlZnJlc2hTZXNzaW9uKHsgcmVmcmVzaF90b2tlbiB9KVxuICAgICAqIGNvbnN0IHsgc2Vzc2lvbiwgdXNlciB9ID0gZGF0YVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIHJlZnJlc2hTZXNzaW9uKGN1cnJlbnRTZXNzaW9uKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9hY3F1aXJlTG9jayh0aGlzLmxvY2tBY3F1aXJlVGltZW91dCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlZnJlc2hTZXNzaW9uKGN1cnJlbnRTZXNzaW9uKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIF9yZWZyZXNoU2Vzc2lvbihjdXJyZW50U2Vzc2lvbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3VzZVNlc3Npb24oYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRTZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Vzc2lvbiA9IChfYSA9IGRhdGEuc2Vzc2lvbikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIShjdXJyZW50U2Vzc2lvbiA9PT0gbnVsbCB8fCBjdXJyZW50U2Vzc2lvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VycmVudFNlc3Npb24ucmVmcmVzaF90b2tlbikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogc2Vzc2lvbiwgZXJyb3IgfSA9IGF3YWl0IHRoaXMuX2NhbGxSZWZyZXNoVG9rZW4oY3VycmVudFNlc3Npb24ucmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3I6IGVycm9yIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvcjogbnVsbCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IHsgdXNlcjogc2Vzc2lvbi51c2VyLCBzZXNzaW9uIH0sIGVycm9yOiBudWxsIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHNlc3Npb24gZGF0YSBmcm9tIGEgVVJMIHN0cmluZ1xuICAgICAqL1xuICAgIGFzeW5jIF9nZXRTZXNzaW9uRnJvbVVSTChwYXJhbXMsIGNhbGxiYWNrVXJsVHlwZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoIWlzQnJvd3NlcigpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoSW1wbGljaXRHcmFudFJlZGlyZWN0RXJyb3IoJ05vIGJyb3dzZXIgZGV0ZWN0ZWQuJyk7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFuIGVycm9yIGluIHRoZSBVUkwsIGl0IGRvZXNuJ3QgbWF0dGVyIHdoYXQgZmxvdyBpdCBpcywgd2UganVzdCByZXR1cm4gdGhlIGVycm9yLlxuICAgICAgICAgICAgaWYgKHBhcmFtcy5lcnJvciB8fCBwYXJhbXMuZXJyb3JfZGVzY3JpcHRpb24gfHwgcGFyYW1zLmVycm9yX2NvZGUpIHtcbiAgICAgICAgICAgICAgICAvLyBUaGUgZXJyb3IgY2xhc3MgcmV0dXJuZWQgaW1wbGllcyB0aGF0IHRoZSByZWRpcmVjdCBpcyBmcm9tIGFuIGltcGxpY2l0IGdyYW50IGZsb3dcbiAgICAgICAgICAgICAgICAvLyBidXQgaXQgY291bGQgYWxzbyBiZSBmcm9tIGEgcmVkaXJlY3QgZXJyb3IgZnJvbSBhIFBLQ0UgZmxvdy5cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yKHBhcmFtcy5lcnJvcl9kZXNjcmlwdGlvbiB8fCAnRXJyb3IgaW4gVVJMIHdpdGggdW5zcGVjaWZpZWQgZXJyb3JfZGVzY3JpcHRpb24nLCB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBwYXJhbXMuZXJyb3IgfHwgJ3Vuc3BlY2lmaWVkX2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgY29kZTogcGFyYW1zLmVycm9yX2NvZGUgfHwgJ3Vuc3BlY2lmaWVkX2NvZGUnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2hlY2tzIGZvciBtaXNtYXRjaGVzIGJldHdlZW4gdGhlIGZsb3dUeXBlIGluaXRpYWxpc2VkIGluIHRoZSBjbGllbnQgYW5kIHRoZSBVUkwgcGFyYW1ldGVyc1xuICAgICAgICAgICAgc3dpdGNoIChjYWxsYmFja1VybFR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdpbXBsaWNpdCc6XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZsb3dUeXBlID09PSAncGtjZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoUEtDRUdyYW50Q29kZUV4Y2hhbmdlRXJyb3IoJ05vdCBhIHZhbGlkIFBLQ0UgZmxvdyB1cmwuJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAncGtjZSc6XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZsb3dUeXBlID09PSAnaW1wbGljaXQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yKCdOb3QgYSB2YWxpZCBpbXBsaWNpdCBncmFudCBmbG93IHVybC4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIC8vIHRoZXJlJ3Mgbm8gbWlzbWF0Y2ggc28gd2UgY29udGludWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFNpbmNlIHRoaXMgaXMgYSByZWRpcmVjdCBmb3IgUEtDRSwgd2UgYXR0ZW1wdCB0byByZXRyaWV2ZSB0aGUgY29kZSBmcm9tIHRoZSBVUkwgZm9yIHRoZSBjb2RlIGV4Y2hhbmdlXG4gICAgICAgICAgICBpZiAoY2FsbGJhY2tVcmxUeXBlID09PSAncGtjZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI19pbml0aWFsaXplKCknLCAnYmVnaW4nLCAnaXMgUEtDRSBmbG93JywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJhbXMuY29kZSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhQS0NFR3JhbnRDb2RlRXhjaGFuZ2VFcnJvcignTm8gY29kZSBkZXRlY3RlZC4nKTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCB0aGlzLl9leGNoYW5nZUNvZGVGb3JTZXNzaW9uKHBhcmFtcy5jb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpO1xuICAgICAgICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuZGVsZXRlKCdjb2RlJyk7XG4gICAgICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHdpbmRvdy5oaXN0b3J5LnN0YXRlLCAnJywgdXJsLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHsgc2Vzc2lvbjogZGF0YS5zZXNzaW9uLCByZWRpcmVjdFR5cGU6IChfYSA9IGRhdGEucmVkaXJlY3RUeXBlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IHByb3ZpZGVyX3Rva2VuLCBwcm92aWRlcl9yZWZyZXNoX3Rva2VuLCBhY2Nlc3NfdG9rZW4sIHJlZnJlc2hfdG9rZW4sIGV4cGlyZXNfaW4sIGV4cGlyZXNfYXQsIHRva2VuX3R5cGUsIH0gPSBwYXJhbXM7XG4gICAgICAgICAgICBpZiAoIWFjY2Vzc190b2tlbiB8fCAhZXhwaXJlc19pbiB8fCAhcmVmcmVzaF90b2tlbiB8fCAhdG9rZW5fdHlwZSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoSW1wbGljaXRHcmFudFJlZGlyZWN0RXJyb3IoJ05vIHNlc3Npb24gZGVmaW5lZCBpbiBVUkwnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHRpbWVOb3cgPSBNYXRoLnJvdW5kKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGlyZXNJbiA9IHBhcnNlSW50KGV4cGlyZXNfaW4pO1xuICAgICAgICAgICAgbGV0IGV4cGlyZXNBdCA9IHRpbWVOb3cgKyBleHBpcmVzSW47XG4gICAgICAgICAgICBpZiAoZXhwaXJlc19hdCkge1xuICAgICAgICAgICAgICAgIGV4cGlyZXNBdCA9IHBhcnNlSW50KGV4cGlyZXNfYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWN0dWFsbHlFeHBpcmVzSW4gPSBleHBpcmVzQXQgLSB0aW1lTm93O1xuICAgICAgICAgICAgaWYgKGFjdHVhbGx5RXhwaXJlc0luICogMTAwMCA8PSBBVVRPX1JFRlJFU0hfVElDS19EVVJBVElPTl9NUykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgQHN1cGFiYXNlL2dvdHJ1ZS1qczogU2Vzc2lvbiBhcyByZXRyaWV2ZWQgZnJvbSBVUkwgZXhwaXJlcyBpbiAke2FjdHVhbGx5RXhwaXJlc0lufXMsIHNob3VsZCBoYXZlIGJlZW4gY2xvc2VyIHRvICR7ZXhwaXJlc0lufXNgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGlzc3VlZEF0ID0gZXhwaXJlc0F0IC0gZXhwaXJlc0luO1xuICAgICAgICAgICAgaWYgKHRpbWVOb3cgLSBpc3N1ZWRBdCA+PSAxMjApIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0BzdXBhYmFzZS9nb3RydWUtanM6IFNlc3Npb24gYXMgcmV0cmlldmVkIGZyb20gVVJMIHdhcyBpc3N1ZWQgb3ZlciAxMjBzIGFnbywgVVJMIGNvdWxkIGJlIHN0YWxlJywgaXNzdWVkQXQsIGV4cGlyZXNBdCwgdGltZU5vdyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aW1lTm93IC0gaXNzdWVkQXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBTZXNzaW9uIGFzIHJldHJpZXZlZCBmcm9tIFVSTCB3YXMgaXNzdWVkIGluIHRoZSBmdXR1cmU/IENoZWNrIHRoZSBkZXZpY2UgY2xvY2sgZm9yIHNrZXcnLCBpc3N1ZWRBdCwgZXhwaXJlc0F0LCB0aW1lTm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHRoaXMuX2dldFVzZXIoYWNjZXNzX3Rva2VuKTtcbiAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSB7XG4gICAgICAgICAgICAgICAgcHJvdmlkZXJfdG9rZW4sXG4gICAgICAgICAgICAgICAgcHJvdmlkZXJfcmVmcmVzaF90b2tlbixcbiAgICAgICAgICAgICAgICBhY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgZXhwaXJlc19pbjogZXhwaXJlc0luLFxuICAgICAgICAgICAgICAgIGV4cGlyZXNfYXQ6IGV4cGlyZXNBdCxcbiAgICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuLFxuICAgICAgICAgICAgICAgIHRva2VuX3R5cGU6IHRva2VuX3R5cGUsXG4gICAgICAgICAgICAgICAgdXNlcjogZGF0YS51c2VyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB0b2tlbnMgZnJvbSBVUkxcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gJyc7XG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI19nZXRTZXNzaW9uRnJvbVVSTCgpJywgJ2NsZWFyaW5nIHdpbmRvdy5sb2NhdGlvbi5oYXNoJyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyBzZXNzaW9uLCByZWRpcmVjdFR5cGU6IHBhcmFtcy50eXBlIH0sIGVycm9yOiBudWxsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHNlc3Npb246IG51bGwsIHJlZGlyZWN0VHlwZTogbnVsbCB9LCBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBVUkwgY29udGFpbnMgcGFyYW1ldGVycyBnaXZlbiBieSBhbiBpbXBsaWNpdCBvYXV0aCBncmFudCBmbG93IChodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjc0OS5odG1sI3NlY3Rpb24tNC4yKVxuICAgICAqXG4gICAgICogSWYgYGRldGVjdFNlc3Npb25JblVybGAgaXMgYSBmdW5jdGlvbiwgaXQgd2lsbCBiZSBjYWxsZWQgd2l0aCB0aGUgVVJMIGFuZCBwYXJhbXMgdG8gZGV0ZXJtaW5lXG4gICAgICogaWYgdGhlIFVSTCBzaG91bGQgYmUgcHJvY2Vzc2VkIGFzIGEgU3VwYWJhc2UgYXV0aCBjYWxsYmFjay4gVGhpcyBhbGxvd3MgdXNlcnMgdG8gZXhjbHVkZVxuICAgICAqIFVSTHMgZnJvbSBvdGhlciBPQXV0aCBwcm92aWRlcnMgKGUuZy4sIEZhY2Vib29rIExvZ2luKSB0aGF0IGFsc28gcmV0dXJuIGFjY2Vzc190b2tlbiBpbiB0aGUgZnJhZ21lbnQuXG4gICAgICovXG4gICAgX2lzSW1wbGljaXRHcmFudENhbGxiYWNrKHBhcmFtcykge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGV0ZWN0U2Vzc2lvbkluVXJsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXRlY3RTZXNzaW9uSW5VcmwobmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZiksIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJvb2xlYW4ocGFyYW1zLmFjY2Vzc190b2tlbiB8fCBwYXJhbXMuZXJyb3JfZGVzY3JpcHRpb24pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgVVJMIGFuZCBiYWNraW5nIHN0b3JhZ2UgY29udGFpbiBwYXJhbWV0ZXJzIGdpdmVuIGJ5IGEgUEtDRSBmbG93XG4gICAgICovXG4gICAgYXN5bmMgX2lzUEtDRUNhbGxiYWNrKHBhcmFtcykge1xuICAgICAgICBjb25zdCBjdXJyZW50U3RvcmFnZUNvbnRlbnQgPSBhd2FpdCBnZXRJdGVtQXN5bmModGhpcy5zdG9yYWdlLCBgJHt0aGlzLnN0b3JhZ2VLZXl9LWNvZGUtdmVyaWZpZXJgKTtcbiAgICAgICAgcmV0dXJuICEhKHBhcmFtcy5jb2RlICYmIGN1cnJlbnRTdG9yYWdlQ29udGVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluc2lkZSBhIGJyb3dzZXIgY29udGV4dCwgYHNpZ25PdXQoKWAgd2lsbCByZW1vdmUgdGhlIGxvZ2dlZCBpbiB1c2VyIGZyb20gdGhlIGJyb3dzZXIgc2Vzc2lvbiBhbmQgbG9nIHRoZW0gb3V0IC0gcmVtb3ZpbmcgYWxsIGl0ZW1zIGZyb20gbG9jYWxzdG9yYWdlIGFuZCB0aGVuIHRyaWdnZXIgYSBgXCJTSUdORURfT1VUXCJgIGV2ZW50LlxuICAgICAqXG4gICAgICogRm9yIHNlcnZlci1zaWRlIG1hbmFnZW1lbnQsIHlvdSBjYW4gcmV2b2tlIGFsbCByZWZyZXNoIHRva2VucyBmb3IgYSB1c2VyIGJ5IHBhc3NpbmcgYSB1c2VyJ3MgSldUIHRocm91Z2ggdG8gYGF1dGguYXBpLnNpZ25PdXQoSldUOiBzdHJpbmcpYC5cbiAgICAgKiBUaGVyZSBpcyBubyB3YXkgdG8gcmV2b2tlIGEgdXNlcidzIGFjY2VzcyB0b2tlbiBqd3QgdW50aWwgaXQgZXhwaXJlcy4gSXQgaXMgcmVjb21tZW5kZWQgdG8gc2V0IGEgc2hvcnRlciBleHBpcnkgb24gdGhlIGp3dCBmb3IgdGhpcyByZWFzb24uXG4gICAgICpcbiAgICAgKiBJZiB1c2luZyBgb3RoZXJzYCBzY29wZSwgbm8gYFNJR05FRF9PVVRgIGV2ZW50IGlzIGZpcmVkIVxuICAgICAqXG4gICAgICogKipXYXJuaW5nOioqIHRoZSBkZWZhdWx0IGBzY29wZWAgaXMgYCdnbG9iYWwnYC4gVGhpcyBzaWducyB0aGUgdXNlciBvdXQgb2ZcbiAgICAgKiAqKmV2ZXJ5IGRldmljZSB0aGV5IGFyZSBjdXJyZW50bHkgc2lnbmVkIGluIG9uKiosIG5vdCBqdXN0IHRoZSBjdXJyZW50XG4gICAgICogdGFiL3Nlc3Npb24uIElmIHlvdSBvbmx5IHdhbnQgdG8gc2lnbiB0aGUgdXNlciBvdXQgb2YgdGhlIGN1cnJlbnQgc2Vzc2lvblxuICAgICAqICh0aGUgYmVoYXZpb3IgbW9zdCBvdGhlciBhdXRoIGxpYnJhcmllcyBkZWZhdWx0IHRvKSwgcGFzc1xuICAgICAqIGB7IHNjb3BlOiAnbG9jYWwnIH1gIGV4cGxpY2l0bHkuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgQXV0aFxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAtIEluIG9yZGVyIHRvIHVzZSB0aGUgYHNpZ25PdXQoKWAgbWV0aG9kLCB0aGUgdXNlciBuZWVkcyB0byBiZSBzaWduZWQgaW4gZmlyc3QuXG4gICAgICogLSBCeSBkZWZhdWx0LCBgc2lnbk91dCgpYCB1c2VzIHRoZSAqKmdsb2JhbCoqIHNjb3BlLCB3aGljaCBzaWducyBvdXQgdGhlIHVzZXJcbiAgICAgKiAgIG9uIGV2ZXJ5IGRldmljZSB0aGV5IGFyZSBzaWduZWQgaW4gb24gKG5vdCBqdXN0IHRoZSBjdXJyZW50IG9uZSkuIFBhc3NcbiAgICAgKiAgIGB7IHNjb3BlOiAnbG9jYWwnIH1gIHRvIG9ubHkgc2lnbiBvdXQgdGhlIGN1cnJlbnQgc2Vzc2lvbi4gVGhpcyBpc1xuICAgICAqICAgdXN1YWxseSB3aGF0IGFwcHMgd2FudCBvbiBhIFwiU2lnbiBvdXRcIiBidXR0b24sIGVzcGVjaWFsbHkgd2hlbiB1c2Vyc1xuICAgICAqICAgc2lnbiBpbiBmcm9tIG11bHRpcGxlIGRldmljZXMgYW5kIGRvIG5vdCBleHBlY3Qgc2lnbmluZyBvdXQgb2Ygb25lIHRvXG4gICAgICogICB0ZXJtaW5hdGUgdGhlIG90aGVycy5cbiAgICAgKiAtIFNpbmNlIFN1cGFiYXNlIEF1dGggdXNlcyBKV1RzIGZvciBhdXRoZW50aWNhdGlvbiwgdGhlIGFjY2VzcyB0b2tlbiBKV1Qgd2lsbCBiZSB2YWxpZCB1bnRpbCBpdCdzIGV4cGlyZWQuIFdoZW4gdGhlIHVzZXIgc2lnbnMgb3V0LCBTdXBhYmFzZSByZXZva2VzIHRoZSByZWZyZXNoIHRva2VuIGFuZCBkZWxldGVzIHRoZSBKV1QgZnJvbSB0aGUgY2xpZW50LXNpZGUuIFRoaXMgZG9lcyBub3QgcmV2b2tlIHRoZSBKV1QgYW5kIGl0IHdpbGwgc3RpbGwgYmUgdmFsaWQgdW50aWwgaXQgZXhwaXJlcy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFNpZ24gb3V0IG9mIGV2ZXJ5IGRldmljZSAoZ2xvYmFsIOKAkyBkZWZhdWx0KVxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5zaWduT3V0KClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFNpZ24gb3V0IG9ubHkgdGhlIGN1cnJlbnQgc2Vzc2lvbiAocmVjb21tZW5kZWQgZm9yIG1vc3QgYXBwcylcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguc2lnbk91dCh7IHNjb3BlOiAnbG9jYWwnIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBTaWduIG91dCBvZiBhbGwgb3RoZXIgc2Vzc2lvbnMsIGtlZXAgdGhlIGN1cnJlbnQgb25lXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLnNpZ25PdXQoeyBzY29wZTogJ290aGVycycgfSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBzaWduT3V0KG9wdGlvbnMgPSB7IHNjb3BlOiAnZ2xvYmFsJyB9KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9hY3F1aXJlTG9jayh0aGlzLmxvY2tBY3F1aXJlVGltZW91dCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3NpZ25PdXQob3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBfc2lnbk91dCh7IHNjb3BlIH0gPSB7IHNjb3BlOiAnZ2xvYmFsJyB9KSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3I6IHNlc3Npb25FcnJvciB9ID0gcmVzdWx0O1xuICAgICAgICAgICAgaWYgKHNlc3Npb25FcnJvciAmJiAhaXNBdXRoU2Vzc2lvbk1pc3NpbmdFcnJvcihzZXNzaW9uRXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGVycm9yOiBzZXNzaW9uRXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlbiA9IChfYSA9IGRhdGEuc2Vzc2lvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFjY2Vzc190b2tlbjtcbiAgICAgICAgICAgIGlmIChhY2Nlc3NUb2tlbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3IgfSA9IGF3YWl0IHRoaXMuYWRtaW4uc2lnbk91dChhY2Nlc3NUb2tlbiwgc2NvcGUpO1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmUgNDA0cyBzaW5jZSB1c2VyIG1pZ2h0IG5vdCBleGlzdCBhbnltb3JlXG4gICAgICAgICAgICAgICAgICAgIC8vIGlnbm9yZSA0MDFzIHNpbmNlIGFuIGludmFsaWQgb3IgZXhwaXJlZCBKV1Qgc2hvdWxkIHNpZ24gb3V0IHRoZSBjdXJyZW50IHNlc3Npb25cbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoKGlzQXV0aEFwaUVycm9yKGVycm9yKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yLnN0YXR1cyA9PT0gNDA0IHx8IGVycm9yLnN0YXR1cyA9PT0gNDAxIHx8IGVycm9yLnN0YXR1cyA9PT0gNDAzKSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IoZXJyb3IpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGVycm9yIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNjb3BlICE9PSAnb3RoZXJzJykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlbW92ZVNlc3Npb24oKTtcbiAgICAgICAgICAgICAgICBhd2FpdCByZW1vdmVJdGVtQXN5bmModGhpcy5zdG9yYWdlLCBgJHt0aGlzLnN0b3JhZ2VLZXl9LWNvZGUtdmVyaWZpZXJgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBlcnJvcjogbnVsbCB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKiAgKlxuICAgICAqIEBjYXRlZ29yeSBBdXRoXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIC0gU3Vic2NyaWJlcyB0byBpbXBvcnRhbnQgZXZlbnRzIG9jY3VycmluZyBvbiB0aGUgdXNlcidzIHNlc3Npb24uXG4gICAgICogLSBVc2Ugb24gdGhlIGZyb250ZW5kL2NsaWVudC4gSXQgaXMgbGVzcyB1c2VmdWwgb24gdGhlIHNlcnZlci5cbiAgICAgKiAtIEV2ZW50cyBhcmUgZW1pdHRlZCBhY3Jvc3MgdGFicyB0byBrZWVwIHlvdXIgYXBwbGljYXRpb24ncyBVSSB1cC10by1kYXRlLiBTb21lIGV2ZW50cyBjYW4gZmlyZSB2ZXJ5IGZyZXF1ZW50bHksIGJhc2VkIG9uIHRoZSBudW1iZXIgb2YgdGFicyBvcGVuLiBVc2UgYSBxdWljayBhbmQgZWZmaWNpZW50IGNhbGxiYWNrIGZ1bmN0aW9uLCBhbmQgZGVmZXIgb3IgZGVib3VuY2UgYXMgbWFueSBvcGVyYXRpb25zIGFzIHlvdSBjYW4gdG8gYmUgcGVyZm9ybWVkIG91dHNpZGUgb2YgdGhlIGNhbGxiYWNrLlxuICAgICAqIC0gKipJbXBvcnRhbnQ6KiogQSBjYWxsYmFjayBjYW4gYmUgYW4gYGFzeW5jYCBmdW5jdGlvbiBhbmQgaXQgcnVucyBzeW5jaHJvbm91c2x5IGR1cmluZyB0aGUgcHJvY2Vzc2luZyBvZiB0aGUgY2hhbmdlcyBjYXVzaW5nIHRoZSBldmVudC4gWW91IGNhbiBlYXNpbHkgY3JlYXRlIGEgZGVhZC1sb2NrIGJ5IHVzaW5nIGBhd2FpdGAgb24gYSBjYWxsIHRvIGFub3RoZXIgbWV0aG9kIG9mIHRoZSBTdXBhYmFzZSBsaWJyYXJ5LlxuICAgICAqICAgLSBBdm9pZCB1c2luZyBgYXN5bmNgIGZ1bmN0aW9ucyBhcyBjYWxsYmFja3MuXG4gICAgICogICAtIExpbWl0IHRoZSBudW1iZXIgb2YgYGF3YWl0YCBjYWxscyBpbiBgYXN5bmNgIGNhbGxiYWNrcy5cbiAgICAgKiAgIC0gRG8gbm90IHVzZSBvdGhlciBTdXBhYmFzZSBmdW5jdGlvbnMgaW4gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLiBJZiB5b3UgbXVzdCwgZGlzcGF0Y2ggdGhlIGZ1bmN0aW9ucyBvbmNlIHRoZSBjYWxsYmFjayBoYXMgZmluaXNoZWQgZXhlY3V0aW5nLiBVc2UgdGhpcyBhcyBhIHF1aWNrIHdheSB0byBhY2hpZXZlIHRoaXM6XG4gICAgICogICAgIGBgYGpzXG4gICAgICogICAgIHN1cGFiYXNlLmF1dGgub25BdXRoU3RhdGVDaGFuZ2UoKGV2ZW50LCBzZXNzaW9uKSA9PiB7XG4gICAgICogICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XG4gICAgICogICAgICAgICAvLyBhd2FpdCBvbiBvdGhlciBTdXBhYmFzZSBmdW5jdGlvbiBoZXJlXG4gICAgICogICAgICAgICAvLyB0aGlzIHJ1bnMgcmlnaHQgYWZ0ZXIgdGhlIGNhbGxiYWNrIGhhcyBmaW5pc2hlZFxuICAgICAqICAgICAgIH0sIDApXG4gICAgICogICAgIH0pXG4gICAgICogICAgIGBgYFxuICAgICAqIC0gRW1pdHRlZCBldmVudHM6XG4gICAgICogICAtIGBJTklUSUFMX1NFU1NJT05gXG4gICAgICogICAgIC0gRW1pdHRlZCByaWdodCBhZnRlciB0aGUgU3VwYWJhc2UgY2xpZW50IGlzIGNvbnN0cnVjdGVkIGFuZCB0aGUgaW5pdGlhbCBzZXNzaW9uIGZyb20gc3RvcmFnZSBpcyBsb2FkZWQuXG4gICAgICogICAtIGBTSUdORURfSU5gXG4gICAgICogICAgIC0gRW1pdHRlZCBlYWNoIHRpbWUgYSB1c2VyIHNlc3Npb24gaXMgY29uZmlybWVkIG9yIHJlLWVzdGFibGlzaGVkLCBpbmNsdWRpbmcgb24gdXNlciBzaWduIGluIGFuZCB3aGVuIHJlZm9jdXNpbmcgYSB0YWIuXG4gICAgICogICAgIC0gQXZvaWQgbWFraW5nIGFzc3VtcHRpb25zIGFzIHRvIHdoZW4gdGhpcyBldmVudCBpcyBmaXJlZCwgdGhpcyBtYXkgb2NjdXIgZXZlbiB3aGVuIHRoZSB1c2VyIGlzIGFscmVhZHkgc2lnbmVkIGluLiBJbnN0ZWFkLCBjaGVjayB0aGUgdXNlciBvYmplY3QgYXR0YWNoZWQgdG8gdGhlIGV2ZW50IHRvIHNlZSBpZiBhIG5ldyB1c2VyIGhhcyBzaWduZWQgaW4gYW5kIHVwZGF0ZSB5b3VyIGFwcGxpY2F0aW9uJ3MgVUkuXG4gICAgICogICAgIC0gVGhpcyBldmVudCBjYW4gZmlyZSB2ZXJ5IGZyZXF1ZW50bHkgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgdGFicyBvcGVuIGluIHlvdXIgYXBwbGljYXRpb24uXG4gICAgICogICAtIGBTSUdORURfT1VUYFxuICAgICAqICAgICAtIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBzaWducyBvdXQuIFRoaXMgY2FuIGJlIGFmdGVyOlxuICAgICAqICAgICAgIC0gQSBjYWxsIHRvIGBzdXBhYmFzZS5hdXRoLnNpZ25PdXQoKWAuXG4gICAgICogICAgICAgLSBBZnRlciB0aGUgdXNlcidzIHNlc3Npb24gaGFzIGV4cGlyZWQgZm9yIGFueSByZWFzb246XG4gICAgICogICAgICAgICAtIFVzZXIgaGFzIHNpZ25lZCBvdXQgb24gYW5vdGhlciBkZXZpY2UuXG4gICAgICogICAgICAgICAtIFRoZSBzZXNzaW9uIGhhcyByZWFjaGVkIGl0cyB0aW1lYm94IGxpbWl0IG9yIGluYWN0aXZpdHkgdGltZW91dC5cbiAgICAgKiAgICAgICAgIC0gVXNlciBoYXMgc2lnbmVkIGluIG9uIGFub3RoZXIgZGV2aWNlIHdpdGggc2luZ2xlIHNlc3Npb24gcGVyIHVzZXIgZW5hYmxlZC5cbiAgICAgKiAgICAgICAgIC0gQ2hlY2sgdGhlIFtVc2VyIFNlc3Npb25zXSgvZG9jcy9ndWlkZXMvYXV0aC9zZXNzaW9ucykgZG9jcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKiAgICAgLSBVc2UgdGhpcyB0byBjbGVhbiB1cCBhbnkgbG9jYWwgc3RvcmFnZSB5b3VyIGFwcGxpY2F0aW9uIGhhcyBhc3NvY2lhdGVkIHdpdGggdGhlIHVzZXIuXG4gICAgICogICAtIGBUT0tFTl9SRUZSRVNIRURgXG4gICAgICogICAgIC0gRW1pdHRlZCBlYWNoIHRpbWUgYSBuZXcgYWNjZXNzIGFuZCByZWZyZXNoIHRva2VuIGFyZSBmZXRjaGVkIGZvciB0aGUgc2lnbmVkIGluIHVzZXIuXG4gICAgICogICAgIC0gSXQncyBiZXN0IHByYWN0aWNlIGFuZCBoaWdobHkgcmVjb21tZW5kZWQgdG8gZXh0cmFjdCB0aGUgYWNjZXNzIHRva2VuIChKV1QpIGFuZCBzdG9yZSBpdCBpbiBtZW1vcnkgZm9yIGZ1cnRoZXIgdXNlIGluIHlvdXIgYXBwbGljYXRpb24uXG4gICAgICogICAgICAgLSBBdm9pZCBmcmVxdWVudCBjYWxscyB0byBgc3VwYWJhc2UuYXV0aC5nZXRTZXNzaW9uKClgIGZvciB0aGUgc2FtZSBwdXJwb3NlLlxuICAgICAqICAgICAtIFRoZXJlIGlzIGEgYmFja2dyb3VuZCBwcm9jZXNzIHRoYXQga2VlcHMgdHJhY2sgb2Ygd2hlbiB0aGUgc2Vzc2lvbiBzaG91bGQgYmUgcmVmcmVzaGVkIHNvIHlvdSB3aWxsIGFsd2F5cyByZWNlaXZlIHZhbGlkIHRva2VucyBieSBsaXN0ZW5pbmcgdG8gdGhpcyBldmVudC5cbiAgICAgKiAgICAgLSBUaGUgZnJlcXVlbmN5IG9mIHRoaXMgZXZlbnQgaXMgcmVsYXRlZCB0byB0aGUgSldUIGV4cGlyeSBsaW1pdCBjb25maWd1cmVkIG9uIHlvdXIgcHJvamVjdC5cbiAgICAgKiAgIC0gYFVTRVJfVVBEQVRFRGBcbiAgICAgKiAgICAgLSBFbWl0dGVkIGVhY2ggdGltZSB0aGUgYHN1cGFiYXNlLmF1dGgudXBkYXRlVXNlcigpYCBtZXRob2QgZmluaXNoZXMgc3VjY2Vzc2Z1bGx5LiBMaXN0ZW4gdG8gaXQgdG8gdXBkYXRlIHlvdXIgYXBwbGljYXRpb24ncyBVSSBiYXNlZCBvbiBuZXcgcHJvZmlsZSBpbmZvcm1hdGlvbi5cbiAgICAgKiAgIC0gYFBBU1NXT1JEX1JFQ09WRVJZYFxuICAgICAqICAgICAtIEVtaXR0ZWQgaW5zdGVhZCBvZiB0aGUgYFNJR05FRF9JTmAgZXZlbnQgd2hlbiB0aGUgdXNlciBsYW5kcyBvbiBhIHBhZ2UgdGhhdCBpbmNsdWRlcyBhIHBhc3N3b3JkIHJlY292ZXJ5IGxpbmsgaW4gdGhlIFVSTC5cbiAgICAgKiAgICAgLSBVc2UgaXQgdG8gc2hvdyBhIFVJIHRvIHRoZSB1c2VyIHdoZXJlIHRoZXkgY2FuIFtyZXNldCB0aGVpciBwYXNzd29yZF0oL2RvY3MvZ3VpZGVzL2F1dGgvcGFzc3dvcmRzI3Jlc2V0dGluZy1hLXVzZXJzLXBhc3N3b3JkLWZvcmdvdC1wYXNzd29yZCkuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBMaXN0ZW4gdG8gYXV0aCBjaGFuZ2VzXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEgfSA9IHN1cGFiYXNlLmF1dGgub25BdXRoU3RhdGVDaGFuZ2UoKGV2ZW50LCBzZXNzaW9uKSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZyhldmVudCwgc2Vzc2lvbilcbiAgICAgKlxuICAgICAqICAgaWYgKGV2ZW50ID09PSAnSU5JVElBTF9TRVNTSU9OJykge1xuICAgICAqICAgICAvLyBoYW5kbGUgaW5pdGlhbCBzZXNzaW9uXG4gICAgICogICB9IGVsc2UgaWYgKGV2ZW50ID09PSAnU0lHTkVEX0lOJykge1xuICAgICAqICAgICAvLyBoYW5kbGUgc2lnbiBpbiBldmVudFxuICAgICAqICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ1NJR05FRF9PVVQnKSB7XG4gICAgICogICAgIC8vIGhhbmRsZSBzaWduIG91dCBldmVudFxuICAgICAqICAgfSBlbHNlIGlmIChldmVudCA9PT0gJ1BBU1NXT1JEX1JFQ09WRVJZJykge1xuICAgICAqICAgICAvLyBoYW5kbGUgcGFzc3dvcmQgcmVjb3ZlcnkgZXZlbnRcbiAgICAgKiAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdUT0tFTl9SRUZSRVNIRUQnKSB7XG4gICAgICogICAgIC8vIGhhbmRsZSB0b2tlbiByZWZyZXNoZWQgZXZlbnRcbiAgICAgKiAgIH0gZWxzZSBpZiAoZXZlbnQgPT09ICdVU0VSX1VQREFURUQnKSB7XG4gICAgICogICAgIC8vIGhhbmRsZSB1c2VyIHVwZGF0ZWQgZXZlbnRcbiAgICAgKiAgIH1cbiAgICAgKiB9KVxuICAgICAqXG4gICAgICogLy8gY2FsbCB1bnN1YnNjcmliZSB0byByZW1vdmUgdGhlIGNhbGxiYWNrXG4gICAgICogZGF0YS5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVEZXNjcmlwdGlvbiBMaXN0ZW4gdG8gc2lnbiBvdXRcbiAgICAgKiBNYWtlIHN1cmUgeW91IGNsZWFyIG91dCBhbnkgbG9jYWwgZGF0YSwgc3VjaCBhcyBsb2NhbCBhbmQgc2Vzc2lvbiBzdG9yYWdlLCBhZnRlciB0aGUgY2xpZW50IGxpYnJhcnkgaGFzIGRldGVjdGVkIHRoZSB1c2VyJ3Mgc2lnbiBvdXQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBMaXN0ZW4gdG8gc2lnbiBvdXRcbiAgICAgKiBgYGBqc1xuICAgICAqIHN1cGFiYXNlLmF1dGgub25BdXRoU3RhdGVDaGFuZ2UoKGV2ZW50LCBzZXNzaW9uKSA9PiB7XG4gICAgICogICBpZiAoZXZlbnQgPT09ICdTSUdORURfT1VUJykge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnU0lHTkVEX09VVCcsIHNlc3Npb24pXG4gICAgICpcbiAgICAgKiAgICAgLy8gY2xlYXIgbG9jYWwgYW5kIHNlc3Npb24gc3RvcmFnZVxuICAgICAqICAgICBbXG4gICAgICogICAgICAgd2luZG93LmxvY2FsU3RvcmFnZSxcbiAgICAgKiAgICAgICB3aW5kb3cuc2Vzc2lvblN0b3JhZ2UsXG4gICAgICogICAgIF0uZm9yRWFjaCgoc3RvcmFnZSkgPT4ge1xuICAgICAqICAgICAgIE9iamVjdC5lbnRyaWVzKHN0b3JhZ2UpXG4gICAgICogICAgICAgICAuZm9yRWFjaCgoW2tleV0pID0+IHtcbiAgICAgKiAgICAgICAgICAgc3RvcmFnZS5yZW1vdmVJdGVtKGtleSlcbiAgICAgKiAgICAgICAgIH0pXG4gICAgICogICAgIH0pXG4gICAgICogICB9XG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlRGVzY3JpcHRpb24gU3RvcmUgT0F1dGggcHJvdmlkZXIgdG9rZW5zIG9uIHNpZ24gaW5cbiAgICAgKiBXaGVuIHVzaW5nIFtPQXV0aCAoU29jaWFsIExvZ2luKV0oL2RvY3MvZ3VpZGVzL2F1dGgvc29jaWFsLWxvZ2luKSB5b3Ugc29tZXRpbWVzIHdpc2ggdG8gZ2V0IGFjY2VzcyB0byB0aGUgcHJvdmlkZXIncyBhY2Nlc3MgdG9rZW4gYW5kIHJlZnJlc2ggdG9rZW4sIGluIG9yZGVyIHRvIGNhbGwgcHJvdmlkZXIgQVBJcyBpbiB0aGUgbmFtZSBvZiB0aGUgdXNlci5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlLCBpZiB5b3UgYXJlIHVzaW5nIFtTaWduIGluIHdpdGggR29vZ2xlXSgvZG9jcy9ndWlkZXMvYXV0aC9zb2NpYWwtbG9naW4vYXV0aC1nb29nbGUpIHlvdSBtYXkgd2FudCB0byB1c2UgdGhlIHByb3ZpZGVyIHRva2VuIHRvIGNhbGwgR29vZ2xlIEFQSXMgb24gYmVoYWxmIG9mIHRoZSB1c2VyLiBTdXBhYmFzZSBBdXRoIGRvZXMgbm90IGtlZXAgdHJhY2sgb2YgdGhlIHByb3ZpZGVyIGFjY2VzcyBhbmQgcmVmcmVzaCB0b2tlbiwgYnV0IGRvZXMgcmV0dXJuIHRoZW0gZm9yIHlvdSBvbmNlLCBpbW1lZGlhdGVseSBhZnRlciBzaWduIGluLiBZb3UgY2FuIHVzZSB0aGUgYG9uQXV0aFN0YXRlQ2hhbmdlYCBtZXRob2QgdG8gbGlzdGVuIGZvciB0aGUgcHJlc2VuY2Ugb2YgdGhlIHByb3ZpZGVyIHRva2VucyBhbmQgc3RvcmUgdGhlbSBpbiBsb2NhbCBzdG9yYWdlLiBZb3UgY2FuIGZ1cnRoZXIgc2VuZCB0aGVtIHRvIHlvdXIgc2VydmVyJ3MgQVBJcyBmb3IgdXNlIG9uIHRoZSBiYWNrZW5kLlxuICAgICAqXG4gICAgICogRmluYWxseSwgbWFrZSBzdXJlIHlvdSByZW1vdmUgdGhlbSBmcm9tIGxvY2FsIHN0b3JhZ2Ugb24gdGhlIGBTSUdORURfT1VUYCBldmVudC4gSWYgdGhlIE9BdXRoIHByb3ZpZGVyIHN1cHBvcnRzIHRva2VuIHJldm9jYXRpb24sIG1ha2Ugc3VyZSB5b3UgY2FsbCB0aG9zZSBBUElzIGVpdGhlciBmcm9tIHRoZSBmcm9udGVuZCBvciBzY2hlZHVsZSB0aGVtIHRvIGJlIGNhbGxlZCBvbiB0aGUgYmFja2VuZC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFN0b3JlIE9BdXRoIHByb3ZpZGVyIHRva2VucyBvbiBzaWduIGluXG4gICAgICogYGBganNcbiAgICAgKiAvLyBSZWdpc3RlciB0aGlzIGltbWVkaWF0ZWx5IGFmdGVyIGNhbGxpbmcgY3JlYXRlQ2xpZW50IVxuICAgICAqIC8vIEJlY2F1c2Ugc2lnbkluV2l0aE9BdXRoIGNhdXNlcyBhIHJlZGlyZWN0LCB5b3UgbmVlZCB0byBmZXRjaCB0aGVcbiAgICAgKiAvLyBwcm92aWRlciB0b2tlbnMgZnJvbSB0aGUgY2FsbGJhY2suXG4gICAgICogc3VwYWJhc2UuYXV0aC5vbkF1dGhTdGF0ZUNoYW5nZSgoZXZlbnQsIHNlc3Npb24pID0+IHtcbiAgICAgKiAgIGlmIChzZXNzaW9uICYmIHNlc3Npb24ucHJvdmlkZXJfdG9rZW4pIHtcbiAgICAgKiAgICAgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCdvYXV0aF9wcm92aWRlcl90b2tlbicsIHNlc3Npb24ucHJvdmlkZXJfdG9rZW4pXG4gICAgICogICB9XG4gICAgICpcbiAgICAgKiAgIGlmIChzZXNzaW9uICYmIHNlc3Npb24ucHJvdmlkZXJfcmVmcmVzaF90b2tlbikge1xuICAgICAqICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnNldEl0ZW0oJ29hdXRoX3Byb3ZpZGVyX3JlZnJlc2hfdG9rZW4nLCBzZXNzaW9uLnByb3ZpZGVyX3JlZnJlc2hfdG9rZW4pXG4gICAgICogICB9XG4gICAgICpcbiAgICAgKiAgIGlmIChldmVudCA9PT0gJ1NJR05FRF9PVVQnKSB7XG4gICAgICogICAgIHdpbmRvdy5sb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnb2F1dGhfcHJvdmlkZXJfdG9rZW4nKVxuICAgICAqICAgICB3aW5kb3cubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oJ29hdXRoX3Byb3ZpZGVyX3JlZnJlc2hfdG9rZW4nKVxuICAgICAqICAgfVxuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZURlc2NyaXB0aW9uIFVzZSBSZWFjdCBDb250ZXh0IGZvciB0aGUgVXNlcidzIHNlc3Npb25cbiAgICAgKiBJbnN0ZWFkIG9mIHJlbHlpbmcgb24gYHN1cGFiYXNlLmF1dGguZ2V0U2Vzc2lvbigpYCB3aXRoaW4geW91ciBSZWFjdCBjb21wb25lbnRzLCB5b3UgY2FuIHVzZSBhIFtSZWFjdCBDb250ZXh0XShodHRwczovL3JlYWN0LmRldi9yZWZlcmVuY2UvcmVhY3QvY3JlYXRlQ29udGV4dCkgdG8gc3RvcmUgdGhlIGxhdGVzdCBzZXNzaW9uIGluZm9ybWF0aW9uIGZyb20gdGhlIGBvbkF1dGhTdGF0ZUNoYW5nZWAgY2FsbGJhY2sgYW5kIGFjY2VzcyBpdCB0aGF0IHdheS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFVzZSBSZWFjdCBDb250ZXh0IGZvciB0aGUgVXNlcidzIHNlc3Npb25cbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IFNlc3Npb25Db250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKVxuICAgICAqXG4gICAgICogZnVuY3Rpb24gbWFpbigpIHtcbiAgICAgKiAgIGNvbnN0IFtzZXNzaW9uLCBzZXRTZXNzaW9uXSA9IFJlYWN0LnVzZVN0YXRlKG51bGwpXG4gICAgICpcbiAgICAgKiAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICogICAgIGNvbnN0IHtkYXRhOiB7IHN1YnNjcmlwdGlvbiB9fSA9IHN1cGFiYXNlLmF1dGgub25BdXRoU3RhdGVDaGFuZ2UoXG4gICAgICogICAgICAgKGV2ZW50LCBzZXNzaW9uKSA9PiB7XG4gICAgICogICAgICAgICBpZiAoZXZlbnQgPT09ICdTSUdORURfT1VUJykge1xuICAgICAqICAgICAgICAgICBzZXRTZXNzaW9uKG51bGwpXG4gICAgICogICAgICAgICB9IGVsc2UgaWYgKHNlc3Npb24pIHtcbiAgICAgKiAgICAgICAgICAgc2V0U2Vzc2lvbihzZXNzaW9uKVxuICAgICAqICAgICAgICAgfVxuICAgICAqICAgICAgIH0pXG4gICAgICpcbiAgICAgKiAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgKiAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgICAqICAgICB9XG4gICAgICogICB9LCBbXSlcbiAgICAgKlxuICAgICAqICAgcmV0dXJuIChcbiAgICAgKiAgICAgPFNlc3Npb25Db250ZXh0LlByb3ZpZGVyIHZhbHVlPXtzZXNzaW9ufT5cbiAgICAgKiAgICAgICA8QXBwIC8+XG4gICAgICogICAgIDwvU2Vzc2lvbkNvbnRleHQuUHJvdmlkZXI+XG4gICAgICogICApXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGUgTGlzdGVuIHRvIHBhc3N3b3JkIHJlY292ZXJ5IGV2ZW50c1xuICAgICAqIGBgYGpzXG4gICAgICogc3VwYWJhc2UuYXV0aC5vbkF1dGhTdGF0ZUNoYW5nZSgoZXZlbnQsIHNlc3Npb24pID0+IHtcbiAgICAgKiAgIGlmIChldmVudCA9PT0gJ1BBU1NXT1JEX1JFQ09WRVJZJykge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnUEFTU1dPUkRfUkVDT1ZFUlknLCBzZXNzaW9uKVxuICAgICAqICAgICAvLyBzaG93IHNjcmVlbiB0byB1cGRhdGUgdXNlcidzIHBhc3N3b3JkXG4gICAgICogICAgIHNob3dQYXNzd29yZFJlc2V0U2NyZWVuKHRydWUpXG4gICAgICogICB9XG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIExpc3RlbiB0byBzaWduIGluXG4gICAgICogYGBganNcbiAgICAgKiBzdXBhYmFzZS5hdXRoLm9uQXV0aFN0YXRlQ2hhbmdlKChldmVudCwgc2Vzc2lvbikgPT4ge1xuICAgICAqICAgaWYgKGV2ZW50ID09PSAnU0lHTkVEX0lOJykgY29uc29sZS5sb2coJ1NJR05FRF9JTicsIHNlc3Npb24pXG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIExpc3RlbiB0byB0b2tlbiByZWZyZXNoXG4gICAgICogYGBganNcbiAgICAgKiBzdXBhYmFzZS5hdXRoLm9uQXV0aFN0YXRlQ2hhbmdlKChldmVudCwgc2Vzc2lvbikgPT4ge1xuICAgICAqICAgaWYgKGV2ZW50ID09PSAnVE9LRU5fUkVGUkVTSEVEJykgY29uc29sZS5sb2coJ1RPS0VOX1JFRlJFU0hFRCcsIHNlc3Npb24pXG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIExpc3RlbiB0byB1c2VyIHVwZGF0ZXNcbiAgICAgKiBgYGBqc1xuICAgICAqIHN1cGFiYXNlLmF1dGgub25BdXRoU3RhdGVDaGFuZ2UoKGV2ZW50LCBzZXNzaW9uKSA9PiB7XG4gICAgICogICBpZiAoZXZlbnQgPT09ICdVU0VSX1VQREFURUQnKSBjb25zb2xlLmxvZygnVVNFUl9VUERBVEVEJywgc2Vzc2lvbilcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIG9uQXV0aFN0YXRlQ2hhbmdlKGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IGlkID0gZ2VuZXJhdGVDYWxsYmFja0lkKCk7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgY2FsbGJhY2ssXG4gICAgICAgICAgICB1bnN1YnNjcmliZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjdW5zdWJzY3JpYmUoKScsICdzdGF0ZSBjaGFuZ2UgY2FsbGJhY2sgd2l0aCBpZCByZW1vdmVkJywgaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VFbWl0dGVycy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5fZGVidWcoJyNvbkF1dGhTdGF0ZUNoYW5nZSgpJywgJ3JlZ2lzdGVyZWQgY2FsbGJhY2sgd2l0aCBpZCcsIGlkKTtcbiAgICAgICAgdGhpcy5zdGF0ZUNoYW5nZUVtaXR0ZXJzLnNldChpZCwgc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9hY3F1aXJlTG9jayh0aGlzLmxvY2tBY3F1aXJlVGltZW91dCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRJbml0aWFsU2Vzc2lvbihpZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgcmV0dXJuIHsgZGF0YTogeyBzdWJzY3JpcHRpb24gfSB9O1xuICAgIH1cbiAgICBhc3luYyBfZW1pdEluaXRpYWxTZXNzaW9uKGlkKSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0sIGVycm9yLCB9ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgYXdhaXQgKChfYSA9IHRoaXMuc3RhdGVDaGFuZ2VFbWl0dGVycy5nZXQoaWQpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbGJhY2soJ0lOSVRJQUxfU0VTU0lPTicsIHNlc3Npb24pKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnSU5JVElBTF9TRVNTSU9OJywgJ2NhbGxiYWNrIGlkJywgaWQsICdzZXNzaW9uJywgc2Vzc2lvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgKChfYiA9IHRoaXMuc3RhdGVDaGFuZ2VFbWl0dGVycy5nZXQoaWQpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbGJhY2soJ0lOSVRJQUxfU0VTU0lPTicsIG51bGwpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnSU5JVElBTF9TRVNTSU9OJywgJ2NhbGxiYWNrIGlkJywgaWQsICdlcnJvcicsIGVycik7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kcyBhIHBhc3N3b3JkIHJlc2V0IHJlcXVlc3QgdG8gYW4gZW1haWwgYWRkcmVzcy4gVGhpcyBtZXRob2Qgc3VwcG9ydHMgdGhlIFBLQ0UgZmxvdy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbWFpbCBUaGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgdXNlci5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5yZWRpcmVjdFRvIFRoZSBVUkwgdG8gc2VuZCB0aGUgdXNlciB0byBhZnRlciB0aGV5IGNsaWNrIHRoZSBwYXNzd29yZCByZXNldCBsaW5rLlxuICAgICAqIEBwYXJhbSBvcHRpb25zLmNhcHRjaGFUb2tlbiBWZXJpZmljYXRpb24gdG9rZW4gcmVjZWl2ZWQgd2hlbiB0aGUgdXNlciBjb21wbGV0ZXMgdGhlIGNhcHRjaGEgb24gdGhlIHNpdGUuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgQXV0aFxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAtIFRoZSBwYXNzd29yZCByZXNldCBmbG93IGNvbnNpc3Qgb2YgMiBicm9hZCBzdGVwczogKGkpIEFsbG93IHRoZSB1c2VyIHRvIGxvZ2luIHZpYSB0aGUgcGFzc3dvcmQgcmVzZXQgbGluazsgKGlpKSBVcGRhdGUgdGhlIHVzZXIncyBwYXNzd29yZC5cbiAgICAgKiAtIFRoZSBgcmVzZXRQYXNzd29yZEZvckVtYWlsKClgIG9ubHkgc2VuZHMgYSBwYXNzd29yZCByZXNldCBsaW5rIHRvIHRoZSB1c2VyJ3MgZW1haWwuXG4gICAgICogVG8gdXBkYXRlIHRoZSB1c2VyJ3MgcGFzc3dvcmQsIHNlZSBbYHVwZGF0ZVVzZXIoKWBdKC9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L2F1dGgtdXBkYXRldXNlcikuXG4gICAgICogLSBBIGBQQVNTV09SRF9SRUNPVkVSWWAgZXZlbnQgd2lsbCBiZSBlbWl0dGVkIHdoZW4gdGhlIHBhc3N3b3JkIHJlY292ZXJ5IGxpbmsgaXMgY2xpY2tlZC5cbiAgICAgKiBZb3UgY2FuIHVzZSBbYG9uQXV0aFN0YXRlQ2hhbmdlKClgXSgvZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC9hdXRoLW9uYXV0aHN0YXRlY2hhbmdlKSB0byBsaXN0ZW4gYW5kIGludm9rZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIHRoZXNlIGV2ZW50cy5cbiAgICAgKiAtIFdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSByZXNldCBsaW5rIGluIHRoZSBlbWFpbCB0aGV5IGFyZSByZWRpcmVjdGVkIGJhY2sgdG8geW91ciBhcHBsaWNhdGlvbi5cbiAgICAgKiBZb3UgY2FuIGNvbmZpZ3VyZSB0aGUgVVJMIHRoYXQgdGhlIHVzZXIgaXMgcmVkaXJlY3RlZCB0byB3aXRoIHRoZSBgcmVkaXJlY3RUb2AgcGFyYW1ldGVyLlxuICAgICAqIFNlZSBbcmVkaXJlY3QgVVJMcyBhbmQgd2lsZGNhcmRzXSgvZG9jcy9ndWlkZXMvYXV0aC9yZWRpcmVjdC11cmxzI3VzZS13aWxkY2FyZHMtaW4tcmVkaXJlY3QtdXJscykgdG8gYWRkIGFkZGl0aW9uYWwgcmVkaXJlY3QgVVJMcyB0byB5b3VyIHByb2plY3QuXG4gICAgICogLSBBZnRlciB0aGUgdXNlciBoYXMgYmVlbiByZWRpcmVjdGVkIHN1Y2Nlc3NmdWxseSwgcHJvbXB0IHRoZW0gZm9yIGEgbmV3IHBhc3N3b3JkIGFuZCBjYWxsIGB1cGRhdGVVc2VyKClgOlxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC51cGRhdGVVc2VyKHtcbiAgICAgKiAgIHBhc3N3b3JkOiBuZXdfcGFzc3dvcmRcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGUgUmVzZXQgcGFzc3dvcmRcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGgucmVzZXRQYXNzd29yZEZvckVtYWlsKGVtYWlsLCB7XG4gICAgICogICByZWRpcmVjdFRvOiAnaHR0cHM6Ly9leGFtcGxlLmNvbS91cGRhdGUtcGFzc3dvcmQnLFxuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVJlc3BvbnNlIFJlc2V0IHBhc3N3b3JkXG4gICAgICogYGBganNvblxuICAgICAqIHtcbiAgICAgKiAgIGRhdGE6IHt9XG4gICAgICogICBlcnJvcjogbnVsbFxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFJlc2V0IHBhc3N3b3JkIChSZWFjdClcbiAgICAgKiBgYGBqc1xuICAgICAqIC8qKlxuICAgICAqICAqIFN0ZXAgMTogU2VuZCB0aGUgdXNlciBhbiBlbWFpbCB0byBnZXQgYSBwYXNzd29yZCByZXNldCB0b2tlbi5cbiAgICAgKiAgKiBUaGlzIGVtYWlsIGNvbnRhaW5zIGEgbGluayB3aGljaCBzZW5kcyB0aGUgdXNlciBiYWNrIHRvIHlvdXIgYXBwbGljYXRpb24uXG4gICAgICogICpcXC9cbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoXG4gICAgICogICAucmVzZXRQYXNzd29yZEZvckVtYWlsKCd1c2VyQGVtYWlsLmNvbScpXG4gICAgICpcbiAgICAgKiAvKipcbiAgICAgKiAgKiBTdGVwIDI6IE9uY2UgdGhlIHVzZXIgaXMgcmVkaXJlY3RlZCBiYWNrIHRvIHlvdXIgYXBwbGljYXRpb24sXG4gICAgICogICogYXNrIHRoZSB1c2VyIHRvIHJlc2V0IHRoZWlyIHBhc3N3b3JkLlxuICAgICAqICAqXFwvXG4gICAgICogIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICogICAgc3VwYWJhc2UuYXV0aC5vbkF1dGhTdGF0ZUNoYW5nZShhc3luYyAoZXZlbnQsIHNlc3Npb24pID0+IHtcbiAgICAgKiAgICAgIGlmIChldmVudCA9PSBcIlBBU1NXT1JEX1JFQ09WRVJZXCIpIHtcbiAgICAgKiAgICAgICAgY29uc3QgbmV3UGFzc3dvcmQgPSBwcm9tcHQoXCJXaGF0IHdvdWxkIHlvdSBsaWtlIHlvdXIgbmV3IHBhc3N3b3JkIHRvIGJlP1wiKTtcbiAgICAgKiAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aFxuICAgICAqICAgICAgICAgIC51cGRhdGVVc2VyKHsgcGFzc3dvcmQ6IG5ld1Bhc3N3b3JkIH0pXG4gICAgICpcbiAgICAgKiAgICAgICAgaWYgKGRhdGEpIGFsZXJ0KFwiUGFzc3dvcmQgdXBkYXRlZCBzdWNjZXNzZnVsbHkhXCIpXG4gICAgICogICAgICAgIGlmIChlcnJvcikgYWxlcnQoXCJUaGVyZSB3YXMgYW4gZXJyb3IgdXBkYXRpbmcgeW91ciBwYXNzd29yZC5cIilcbiAgICAgKiAgICAgIH1cbiAgICAgKiAgICB9KVxuICAgICAqICB9LCBbXSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyByZXNldFBhc3N3b3JkRm9yRW1haWwoZW1haWwsIG9wdGlvbnMgPSB7fSkge1xuICAgICAgICBsZXQgY29kZUNoYWxsZW5nZSA9IG51bGw7XG4gICAgICAgIGxldCBjb2RlQ2hhbGxlbmdlTWV0aG9kID0gbnVsbDtcbiAgICAgICAgaWYgKHRoaXMuZmxvd1R5cGUgPT09ICdwa2NlJykge1xuICAgICAgICAgICAgO1xuICAgICAgICAgICAgW2NvZGVDaGFsbGVuZ2UsIGNvZGVDaGFsbGVuZ2VNZXRob2RdID0gYXdhaXQgZ2V0Q29kZUNoYWxsZW5nZUFuZE1ldGhvZCh0aGlzLnN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSwgdHJ1ZSAvLyBpc1Bhc3N3b3JkUmVjb3ZlcnlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9yZWNvdmVyYCwge1xuICAgICAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgZW1haWwsXG4gICAgICAgICAgICAgICAgICAgIGNvZGVfY2hhbGxlbmdlOiBjb2RlQ2hhbGxlbmdlLFxuICAgICAgICAgICAgICAgICAgICBjb2RlX2NoYWxsZW5nZV9tZXRob2Q6IGNvZGVDaGFsbGVuZ2VNZXRob2QsXG4gICAgICAgICAgICAgICAgICAgIGdvdHJ1ZV9tZXRhX3NlY3VyaXR5OiB7IGNhcHRjaGFfdG9rZW46IG9wdGlvbnMuY2FwdGNoYVRva2VuIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgcmVkaXJlY3RUbzogb3B0aW9ucy5yZWRpcmVjdFRvLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBhd2FpdCByZW1vdmVJdGVtQXN5bmModGhpcy5zdG9yYWdlLCBgJHt0aGlzLnN0b3JhZ2VLZXl9LWNvZGUtdmVyaWZpZXJgKTtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBHZXRzIGFsbCB0aGUgaWRlbnRpdGllcyBsaW5rZWQgdG8gYSB1c2VyLlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IEF1dGhcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogLSBUaGUgdXNlciBuZWVkcyB0byBiZSBzaWduZWQgaW4gdG8gY2FsbCBgZ2V0VXNlcklkZW50aXRpZXMoKWAuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBSZXR1cm5zIGEgbGlzdCBvZiBpZGVudGl0aWVzIGxpbmtlZCB0byB0aGUgdXNlclxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5nZXRVc2VySWRlbnRpdGllcygpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVJlc3BvbnNlIFJldHVybnMgYSBsaXN0IG9mIGlkZW50aXRpZXMgbGlua2VkIHRvIHRoZSB1c2VyXG4gICAgICogYGBganNvblxuICAgICAqIHtcbiAgICAgKiAgIFwiZGF0YVwiOiB7XG4gICAgICogICAgIFwiaWRlbnRpdGllc1wiOiBbXG4gICAgICogICAgICAge1xuICAgICAqICAgICAgICAgXCJpZGVudGl0eV9pZFwiOiBcIjIyMjIyMjIyLTIyMjItMjIyMi0yMjIyLTIyMjIyMjIyMjIyMlwiLFxuICAgICAqICAgICAgICAgXCJpZFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICBcInVzZXJfaWRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgXCJpZGVudGl0eV9kYXRhXCI6IHtcbiAgICAgKiAgICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCIsXG4gICAgICogICAgICAgICAgIFwiZW1haWxfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgIFwicGhvbmVfdmVyaWZpZWRcIjogZmFsc2UsXG4gICAgICogICAgICAgICAgIFwic3ViXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCJcbiAgICAgKiAgICAgICAgIH0sXG4gICAgICogICAgICAgICBcInByb3ZpZGVyXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgIFwibGFzdF9zaWduX2luX2F0XCI6IFwiMjAyNC0wMS0wMVQwMDowMDowMFpcIixcbiAgICAgKiAgICAgICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDEtMDFUMDA6MDA6MDBaXCIsXG4gICAgICogICAgICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTAxLTAxVDAwOjAwOjAwWlwiLFxuICAgICAqICAgICAgICAgXCJlbWFpbFwiOiBcImV4YW1wbGVAZW1haWwuY29tXCJcbiAgICAgKiAgICAgICB9XG4gICAgICogICAgIF1cbiAgICAgKiAgIH0sXG4gICAgICogICBcImVycm9yXCI6IG51bGxcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgZ2V0VXNlcklkZW50aXRpZXMoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcigpO1xuICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IHsgaWRlbnRpdGllczogKF9hID0gZGF0YS51c2VyLmlkZW50aXRpZXMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdIH0sIGVycm9yOiBudWxsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiAgKlxuICAgICAqIEBjYXRlZ29yeSBBdXRoXG4gICAgICpcbiAgICAgKiBAcmVtYXJrc1xuICAgICAqIC0gVGhlICoqRW5hYmxlIE1hbnVhbCBMaW5raW5nKiogb3B0aW9uIG11c3QgYmUgZW5hYmxlZCBmcm9tIHlvdXIgW3Byb2plY3QncyBhdXRoZW50aWNhdGlvbiBzZXR0aW5nc10oL2Rhc2hib2FyZC9wcm9qZWN0L18vYXV0aC9wcm92aWRlcnMpLlxuICAgICAqIC0gVGhlIHVzZXIgbmVlZHMgdG8gYmUgc2lnbmVkIGluIHRvIGNhbGwgYGxpbmtJZGVudGl0eSgpYC5cbiAgICAgKiAtIElmIHRoZSBjYW5kaWRhdGUgaWRlbnRpdHkgaXMgYWxyZWFkeSBsaW5rZWQgdG8gdGhlIGV4aXN0aW5nIHVzZXIgb3IgYW5vdGhlciB1c2VyLCBgbGlua0lkZW50aXR5KClgIHdpbGwgZmFpbC5cbiAgICAgKiAtIElmIGBsaW5rSWRlbnRpdHlgIGlzIHJ1biBpbiB0aGUgYnJvd3NlciwgdGhlIHVzZXIgaXMgYXV0b21hdGljYWxseSByZWRpcmVjdGVkIHRvIHRoZSByZXR1cm5lZCBVUkwuIE9uIHRoZSBzZXJ2ZXIsIHlvdSBzaG91bGQgaGFuZGxlIHRoZSByZWRpcmVjdC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIExpbmsgYW4gaWRlbnRpdHkgdG8gYSB1c2VyXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLmxpbmtJZGVudGl0eSh7XG4gICAgICogICBwcm92aWRlcjogJ2dpdGh1YidcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVSZXNwb25zZSBMaW5rIGFuIGlkZW50aXR5IHRvIGEgdXNlclxuICAgICAqIGBgYGpzb25cbiAgICAgKiB7XG4gICAgICogICBkYXRhOiB7XG4gICAgICogICAgIHByb3ZpZGVyOiAnZ2l0aHViJyxcbiAgICAgKiAgICAgdXJsOiA8UFJPVklERVJfVVJMX1RPX1JFRElSRUNUX1RPPlxuICAgICAqICAgfSxcbiAgICAgKiAgIGVycm9yOiBudWxsXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIGxpbmtJZGVudGl0eShjcmVkZW50aWFscykge1xuICAgICAgICBpZiAoJ3Rva2VuJyBpbiBjcmVkZW50aWFscykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGlua0lkZW50aXR5SWRUb2tlbihjcmVkZW50aWFscyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubGlua0lkZW50aXR5T0F1dGgoY3JlZGVudGlhbHMpO1xuICAgIH1cbiAgICBhc3luYyBsaW5rSWRlbnRpdHlPQXV0aChjcmVkZW50aWFscykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9mO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IHRoaXMuX2dldFVybEZvclByb3ZpZGVyKGAke3RoaXMudXJsfS91c2VyL2lkZW50aXRpZXMvYXV0aG9yaXplYCwgY3JlZGVudGlhbHMucHJvdmlkZXIsIHtcbiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RUbzogKF9hID0gY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJlZGlyZWN0VG8sXG4gICAgICAgICAgICAgICAgICAgIHNjb3BlczogKF9iID0gY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNjb3BlcyxcbiAgICAgICAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IChfYyA9IGNyZWRlbnRpYWxzLm9wdGlvbnMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgc2tpcEJyb3dzZXJSZWRpcmVjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ0dFVCcsIHVybCwge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIGp3dDogKF9mID0gKF9kID0gZGF0YS5zZXNzaW9uKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuYWNjZXNzX3Rva2VuKSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIGlmIChpc0Jyb3dzZXIoKSAmJiAhKChfYSA9IGNyZWRlbnRpYWxzLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5za2lwQnJvd3NlclJlZGlyZWN0KSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkYXRhLnVybCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHByb3ZpZGVyOiBjcmVkZW50aWFscy5wcm92aWRlciwgdXJsOiBkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRhdGEudXJsIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyBwcm92aWRlcjogY3JlZGVudGlhbHMucHJvdmlkZXIsIHVybDogbnVsbCB9LCBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIGxpbmtJZGVudGl0eUlkVG9rZW4oY3JlZGVudGlhbHMpIHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3VzZVNlc3Npb24oYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9yOiBzZXNzaW9uRXJyb3IsIGRhdGE6IHsgc2Vzc2lvbiB9LCB9ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpXG4gICAgICAgICAgICAgICAgICAgIHRocm93IHNlc3Npb25FcnJvcjtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG9wdGlvbnMsIHByb3ZpZGVyLCB0b2tlbiwgYWNjZXNzX3Rva2VuLCBub25jZSB9ID0gY3JlZGVudGlhbHM7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vdG9rZW4/Z3JhbnRfdHlwZT1pZF90b2tlbmAsIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBqd3Q6IChfYSA9IHNlc3Npb24gPT09IG51bGwgfHwgc2Vzc2lvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2Vzc2lvbi5hY2Nlc3NfdG9rZW4pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpZF90b2tlbjogdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBub25jZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmtfaWRlbnRpdHk6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FwdGNoYVRva2VuIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHhmb3JtOiBfc2Vzc2lvblJlc3BvbnNlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHJlcztcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IHsgdXNlcjogbnVsbCwgc2Vzc2lvbjogbnVsbCB9LCBlcnJvciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWRhdGEgfHwgIWRhdGEuc2Vzc2lvbiB8fCAhZGF0YS51c2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogeyB1c2VyOiBudWxsLCBzZXNzaW9uOiBudWxsIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEF1dGhJbnZhbGlkVG9rZW5SZXNwb25zZUVycm9yKCksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5zZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKGRhdGEuc2Vzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKCdVU0VSX1VQREFURUQnLCBkYXRhLnNlc3Npb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YSwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCByZW1vdmVJdGVtQXN5bmModGhpcy5zdG9yYWdlLCBgJHt0aGlzLnN0b3JhZ2VLZXl9LWNvZGUtdmVyaWZpZXJgKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiB7IHVzZXI6IG51bGwsIHNlc3Npb246IG51bGwgfSwgZXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVW5saW5rcyBhbiBpZGVudGl0eSBmcm9tIGEgdXNlciBieSBkZWxldGluZyBpdC4gVGhlIHVzZXIgd2lsbCBubyBsb25nZXIgYmUgYWJsZSB0byBzaWduIGluIHdpdGggdGhhdCBpZGVudGl0eSBvbmNlIGl0J3MgdW5saW5rZWQuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgQXV0aFxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAtIFRoZSAqKkVuYWJsZSBNYW51YWwgTGlua2luZyoqIG9wdGlvbiBtdXN0IGJlIGVuYWJsZWQgZnJvbSB5b3VyIFtwcm9qZWN0J3MgYXV0aGVudGljYXRpb24gc2V0dGluZ3NdKC9kYXNoYm9hcmQvcHJvamVjdC9fL2F1dGgvcHJvdmlkZXJzKS5cbiAgICAgKiAtIFRoZSB1c2VyIG5lZWRzIHRvIGJlIHNpZ25lZCBpbiB0byBjYWxsIGB1bmxpbmtJZGVudGl0eSgpYC5cbiAgICAgKiAtIFRoZSB1c2VyIG11c3QgaGF2ZSBhdCBsZWFzdCAyIGlkZW50aXRpZXMgaW4gb3JkZXIgdG8gdW5saW5rIGFuIGlkZW50aXR5LlxuICAgICAqIC0gVGhlIGlkZW50aXR5IHRvIGJlIHVubGlua2VkIG11c3QgYmVsb25nIHRvIHRoZSB1c2VyLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgVW5saW5rIGFuIGlkZW50aXR5XG4gICAgICogYGBganNcbiAgICAgKiAvLyByZXRyaWV2ZSBhbGwgaWRlbnRpdGllcyBsaW5rZWQgdG8gYSB1c2VyXG4gICAgICogY29uc3QgaWRlbnRpdGllcyA9IGF3YWl0IHN1cGFiYXNlLmF1dGguZ2V0VXNlcklkZW50aXRpZXMoKVxuICAgICAqXG4gICAgICogLy8gZmluZCB0aGUgZ29vZ2xlIGlkZW50aXR5XG4gICAgICogY29uc3QgZ29vZ2xlSWRlbnRpdHkgPSBpZGVudGl0aWVzLmZpbmQoXG4gICAgICogICBpZGVudGl0eSA9PiBpZGVudGl0eS5wcm92aWRlciA9PT0gJ2dvb2dsZSdcbiAgICAgKiApXG4gICAgICpcbiAgICAgKiAvLyB1bmxpbmsgdGhlIGdvb2dsZSBpZGVudGl0eVxuICAgICAqIGNvbnN0IHsgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGgudW5saW5rSWRlbnRpdHkoZ29vZ2xlSWRlbnRpdHkpXG4gICAgICogYGBgXG4gICAgICovXG4gICAgYXN5bmMgdW5saW5rSWRlbnRpdHkoaWRlbnRpdHkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnREVMRVRFJywgYCR7dGhpcy51cmx9L3VzZXIvaWRlbnRpdGllcy8ke2lkZW50aXR5LmlkZW50aXR5X2lkfWAsIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBqd3Q6IChfYiA9IChfYSA9IGRhdGEuc2Vzc2lvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFjY2Vzc190b2tlbikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIGEgbmV3IEpXVC5cbiAgICAgKiBAcGFyYW0gcmVmcmVzaFRva2VuIEEgdmFsaWQgcmVmcmVzaCB0b2tlbiB0aGF0IHdhcyByZXR1cm5lZCBvbiBsb2dpbi5cbiAgICAgKi9cbiAgICBhc3luYyBfcmVmcmVzaEFjY2Vzc1Rva2VuKHJlZnJlc2hUb2tlbikge1xuICAgICAgICBjb25zdCBkZWJ1Z05hbWUgPSBgI19yZWZyZXNoQWNjZXNzVG9rZW4oJHtyZWZyZXNoVG9rZW4uc3Vic3RyaW5nKDAsIDUpfS4uLilgO1xuICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdiZWdpbicpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgIC8vIHdpbGwgYXR0ZW1wdCB0byByZWZyZXNoIHRoZSB0b2tlbiB3aXRoIGV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCByZXRyeWFibGUoYXN5bmMgKGF0dGVtcHQpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ZW1wdCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2xlZXAoMjAwICogTWF0aC5wb3coMiwgYXR0ZW1wdCAtIDEpKTsgLy8gMjAwLCA0MDAsIDgwMCwgLi4uXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ3JlZnJlc2hpbmcgYXR0ZW1wdCcsIGF0dGVtcHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS90b2tlbj9ncmFudF90eXBlPXJlZnJlc2hfdG9rZW5gLCB7XG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHsgcmVmcmVzaF90b2tlbjogcmVmcmVzaFRva2VuIH0sXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgeGZvcm06IF9zZXNzaW9uUmVzcG9uc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAoYXR0ZW1wdCwgZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0QmFja09mZkludGVydmFsID0gMjAwICogTWF0aC5wb3coMiwgYXR0ZW1wdCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChlcnJvciAmJlxuICAgICAgICAgICAgICAgICAgICBpc0F1dGhSZXRyeWFibGVGZXRjaEVycm9yKGVycm9yKSAmJlxuICAgICAgICAgICAgICAgICAgICAvLyByZXRyeWFibGUgb25seSBpZiB0aGUgcmVxdWVzdCBjYW4gYmUgc2VudCBiZWZvcmUgdGhlIGJhY2tvZmYgb3ZlcmZsb3dzIHRoZSB0aWNrIGR1cmF0aW9uXG4gICAgICAgICAgICAgICAgICAgIERhdGUubm93KCkgKyBuZXh0QmFja09mZkludGVydmFsIC0gc3RhcnRlZEF0IDwgQVVUT19SRUZSRVNIX1RJQ0tfRFVSQVRJT05fTVMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogeyBzZXNzaW9uOiBudWxsLCB1c2VyOiBudWxsIH0sIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdlbmQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfaXNWYWxpZFNlc3Npb24obWF5YmVTZXNzaW9uKSB7XG4gICAgICAgIGNvbnN0IGlzVmFsaWRTZXNzaW9uID0gdHlwZW9mIG1heWJlU2Vzc2lvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIG1heWJlU2Vzc2lvbiAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgJ2FjY2Vzc190b2tlbicgaW4gbWF5YmVTZXNzaW9uICYmXG4gICAgICAgICAgICAncmVmcmVzaF90b2tlbicgaW4gbWF5YmVTZXNzaW9uICYmXG4gICAgICAgICAgICAnZXhwaXJlc19hdCcgaW4gbWF5YmVTZXNzaW9uO1xuICAgICAgICByZXR1cm4gaXNWYWxpZFNlc3Npb247XG4gICAgfVxuICAgIGFzeW5jIF9oYW5kbGVQcm92aWRlclNpZ25Jbihwcm92aWRlciwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCB0aGlzLl9nZXRVcmxGb3JQcm92aWRlcihgJHt0aGlzLnVybH0vYXV0aG9yaXplYCwgcHJvdmlkZXIsIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VG86IG9wdGlvbnMucmVkaXJlY3RUbyxcbiAgICAgICAgICAgIHNjb3Blczogb3B0aW9ucy5zY29wZXMsXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogb3B0aW9ucy5xdWVyeVBhcmFtcyxcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2RlYnVnKCcjX2hhbmRsZVByb3ZpZGVyU2lnbkluKCknLCAncHJvdmlkZXInLCBwcm92aWRlciwgJ29wdGlvbnMnLCBvcHRpb25zLCAndXJsJywgdXJsKTtcbiAgICAgICAgLy8gdHJ5IHRvIG9wZW4gb24gdGhlIGJyb3dzZXJcbiAgICAgICAgaWYgKGlzQnJvd3NlcigpICYmICFvcHRpb25zLnNraXBCcm93c2VyUmVkaXJlY3QpIHtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkYXRhOiB7IHByb3ZpZGVyLCB1cmwgfSwgZXJyb3I6IG51bGwgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVjb3ZlcnMgdGhlIHNlc3Npb24gZnJvbSBMb2NhbFN0b3JhZ2UgYW5kIHJlZnJlc2hlcyB0aGUgdG9rZW5cbiAgICAgKiBOb3RlOiB0aGlzIG1ldGhvZCBpcyBhc3luYyB0byBhY2NvbW1vZGF0ZSBmb3IgQXN5bmNTdG9yYWdlIGUuZy4gaW4gUmVhY3QgbmF0aXZlLlxuICAgICAqL1xuICAgIGFzeW5jIF9yZWNvdmVyQW5kUmVmcmVzaCgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgY29uc3QgZGVidWdOYW1lID0gJyNfcmVjb3ZlckFuZFJlZnJlc2goKSc7XG4gICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ2JlZ2luJyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U2Vzc2lvbiA9IChhd2FpdCBnZXRJdGVtQXN5bmModGhpcy5zdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXkpKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50U2Vzc2lvbiAmJiB0aGlzLnVzZXJTdG9yYWdlKSB7XG4gICAgICAgICAgICAgICAgbGV0IG1heWJlVXNlciA9IChhd2FpdCBnZXRJdGVtQXN5bmModGhpcy51c2VyU3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5ICsgJy11c2VyJykpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdG9yYWdlLmlzU2VydmVyICYmIE9iamVjdC5pcyh0aGlzLnN0b3JhZ2UsIHRoaXMudXNlclN0b3JhZ2UpICYmICFtYXliZVVzZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmFnZSBhbmQgdXNlclN0b3JhZ2UgYXJlIHRoZSBzYW1lIHN0b3JhZ2UgbWVkaXVtLCBmb3IgZXhhbXBsZVxuICAgICAgICAgICAgICAgICAgICAvLyB3aW5kb3cubG9jYWxTdG9yYWdlIGlmIHVzZXJTdG9yYWdlIGRvZXMgbm90IGhhdmUgdGhlIHVzZXIgZnJvbVxuICAgICAgICAgICAgICAgICAgICAvLyBzdG9yYWdlIHN0b3JlZCwgc3RvcmUgaXQgZmlyc3QgdGhlcmVieSBtaWdyYXRpbmcgdGhlIHVzZXIgb2JqZWN0XG4gICAgICAgICAgICAgICAgICAgIC8vIGZyb20gc3RvcmFnZSAtPiB1c2VyU3RvcmFnZVxuICAgICAgICAgICAgICAgICAgICBtYXliZVVzZXIgPSB7IHVzZXI6IGN1cnJlbnRTZXNzaW9uLnVzZXIgfTtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2V0SXRlbUFzeW5jKHRoaXMudXNlclN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSArICctdXNlcicsIG1heWJlVXNlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uLnVzZXIgPSAoX2EgPSBtYXliZVVzZXIgPT09IG51bGwgfHwgbWF5YmVVc2VyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtYXliZVVzZXIudXNlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdXNlck5vdEF2YWlsYWJsZVByb3h5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50U2Vzc2lvbiAmJiAhY3VycmVudFNlc3Npb24udXNlcikge1xuICAgICAgICAgICAgICAgIC8vIHVzZXIgc3RvcmFnZSBpcyBub3Qgc2V0LCBsZXQncyBjaGVjayBpZiBpdCB3YXMgcHJldmlvdXNseSBlbmFibGVkIHNvXG4gICAgICAgICAgICAgICAgLy8gd2UgYnJpbmcgYmFjayB0aGUgc3RvcmFnZSBhcyBpdCBzaG91bGQgYmVcbiAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRTZXNzaW9uLnVzZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdGVzdCBpZiB1c2VyU3RvcmFnZSB3YXMgcHJldmlvdXNseSBlbmFibGVkIGFuZCB0aGUgc3RvcmFnZSBtZWRpdW0gd2FzIHRoZSBzYW1lLCB0byBtb3ZlIHRoZSB1c2VyIGJhY2sgdW5kZXIgdGhlIHNhbWUga2V5XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlcGFyYXRlVXNlciA9IChhd2FpdCBnZXRJdGVtQXN5bmModGhpcy5zdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXkgKyAnLXVzZXInKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXBhcmF0ZVVzZXIgJiYgKHNlcGFyYXRlVXNlciA9PT0gbnVsbCB8fCBzZXBhcmF0ZVVzZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlcGFyYXRlVXNlci51c2VyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNlc3Npb24udXNlciA9IHNlcGFyYXRlVXNlci51c2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgcmVtb3ZlSXRlbUFzeW5jKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5ICsgJy11c2VyJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBzZXRJdGVtQXN5bmModGhpcy5zdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXksIGN1cnJlbnRTZXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uLnVzZXIgPSB1c2VyTm90QXZhaWxhYmxlUHJveHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ3Nlc3Npb24gZnJvbSBzdG9yYWdlJywgY3VycmVudFNlc3Npb24pO1xuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1ZhbGlkU2Vzc2lvbihjdXJyZW50U2Vzc2lvbikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdzZXNzaW9uIGlzIG5vdCB2YWxpZCcpO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2Vzc2lvbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZW1vdmVTZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGV4cGlyZXNXaXRoTWFyZ2luID0gKChfYiA9IGN1cnJlbnRTZXNzaW9uLmV4cGlyZXNfYXQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IEluZmluaXR5KSAqIDEwMDAgLSBEYXRlLm5vdygpIDwgRVhQSVJZX01BUkdJTl9NUztcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgYHNlc3Npb24gaGFzJHtleHBpcmVzV2l0aE1hcmdpbiA/ICcnIDogJyBub3QnfSBleHBpcmVkIHdpdGggbWFyZ2luIG9mICR7RVhQSVJZX01BUkdJTl9NU31zYCk7XG4gICAgICAgICAgICBpZiAoZXhwaXJlc1dpdGhNYXJnaW4pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hdXRvUmVmcmVzaFRva2VuICYmIGN1cnJlbnRTZXNzaW9uLnJlZnJlc2hfdG9rZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gYXdhaXQgdGhpcy5fY2FsbFJlZnJlc2hUb2tlbihjdXJyZW50U2Vzc2lvbi5yZWZyZXNoX3Rva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNBdXRoUmV0cnlhYmxlRmV0Y2hFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdyZWZyZXNoIGZhaWxlZCB3aXRoIGEgbm9uLXJldHJ5YWJsZSBlcnJvciwgcmVtb3ZpbmcgdGhlIHNlc3Npb24nLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fcmVtb3ZlU2Vzc2lvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVudFNlc3Npb24udXNlciAmJlxuICAgICAgICAgICAgICAgIGN1cnJlbnRTZXNzaW9uLnVzZXIuX19pc1VzZXJOb3RBdmFpbGFibGVQcm94eSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgYSBwcm94eSB1c2VyLCB0cnkgdG8gZ2V0IHRoZSByZWFsIHVzZXIgZGF0YVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3I6IHVzZXJFcnJvciB9ID0gYXdhaXQgdGhpcy5fZ2V0VXNlcihjdXJyZW50U2Vzc2lvbi5hY2Nlc3NfdG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXVzZXJFcnJvciAmJiAoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkYXRhLnVzZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2Vzc2lvbi51c2VyID0gZGF0YS51c2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fc2F2ZVNlc3Npb24oY3VycmVudFNlc3Npb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1NJR05FRF9JTicsIGN1cnJlbnRTZXNzaW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ2NvdWxkIG5vdCBnZXQgdXNlciBkYXRhLCBza2lwcGluZyBTSUdORURfSU4gbm90aWZpY2F0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGdldFVzZXJFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBnZXR0aW5nIHVzZXIgZGF0YTonLCBnZXRVc2VyRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdlcnJvciBnZXR0aW5nIHVzZXIgZGF0YSwgc2tpcHBpbmcgU0lHTkVEX0lOIG5vdGlmaWNhdGlvbicsIGdldFVzZXJFcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gbmVlZCB0byBwZXJzaXN0IGN1cnJlbnRTZXNzaW9uIGFnYWluLCBhcyB3ZSBqdXN0IGxvYWRlZCBpdCBmcm9tXG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgc3RvcmFnZTsgcGVyc2lzdGluZyBpdCBhZ2FpbiBtYXkgb3ZlcndyaXRlIGEgdmFsdWUgc2F2ZWQgYnlcbiAgICAgICAgICAgICAgICAvLyBhbm90aGVyIGNsaWVudCB3aXRoIGFjY2VzcyB0byB0aGUgc2FtZSBsb2NhbCBzdG9yYWdlXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1NJR05FRF9JTicsIGN1cnJlbnRTZXNzaW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdlcnJvcicsIGVycik7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdlbmQnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBfY2FsbFJlZnJlc2hUb2tlbihyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKCFyZWZyZXNoVG9rZW4pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBdXRoU2Vzc2lvbk1pc3NpbmdFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlZnJlc2hpbmcgaXMgYWxyZWFkeSBpbiBwcm9ncmVzc1xuICAgICAgICBpZiAodGhpcy5yZWZyZXNoaW5nRGVmZXJyZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlZnJlc2hpbmdEZWZlcnJlZC5wcm9taXNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRlYnVnTmFtZSA9IGAjX2NhbGxSZWZyZXNoVG9rZW4oJHtyZWZyZXNoVG9rZW4uc3Vic3RyaW5nKDAsIDUpfS4uLilgO1xuICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdiZWdpbicpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoaW5nRGVmZXJyZWQgPSBuZXcgRGVmZXJyZWQoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHRoaXMuX3JlZnJlc2hBY2Nlc3NUb2tlbihyZWZyZXNoVG9rZW4pO1xuICAgICAgICAgICAgaWYgKGVycm9yKVxuICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgaWYgKCFkYXRhLnNlc3Npb24pXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKCk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihkYXRhLnNlc3Npb24pO1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fbm90aWZ5QWxsU3Vic2NyaWJlcnMoJ1RPS0VOX1JFRlJFU0hFRCcsIGRhdGEuc2Vzc2lvbik7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7IGRhdGE6IGRhdGEuc2Vzc2lvbiwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaGluZ0RlZmVycmVkLnJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdlcnJvcicsIGVycm9yKTtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB7IGRhdGE6IG51bGwsIGVycm9yIH07XG4gICAgICAgICAgICAgICAgaWYgKCFpc0F1dGhSZXRyeWFibGVGZXRjaEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9yZW1vdmVTZXNzaW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIChfYSA9IHRoaXMucmVmcmVzaGluZ0RlZmVycmVkKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoX2IgPSB0aGlzLnJlZnJlc2hpbmdEZWZlcnJlZCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaGluZ0RlZmVycmVkID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuX2RlYnVnKGRlYnVnTmFtZSwgJ2VuZCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIF9ub3RpZnlBbGxTdWJzY3JpYmVycyhldmVudCwgc2Vzc2lvbiwgYnJvYWRjYXN0ID0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBkZWJ1Z05hbWUgPSBgI19ub3RpZnlBbGxTdWJzY3JpYmVycygke2V2ZW50fSlgO1xuICAgICAgICB0aGlzLl9kZWJ1ZyhkZWJ1Z05hbWUsICdiZWdpbicsIHNlc3Npb24sIGBicm9hZGNhc3QgPSAke2Jyb2FkY2FzdH1gKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmJyb2FkY2FzdENoYW5uZWwgJiYgYnJvYWRjYXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsLnBvc3RNZXNzYWdlKHsgZXZlbnQsIHNlc3Npb24gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2VzID0gQXJyYXkuZnJvbSh0aGlzLnN0YXRlQ2hhbmdlRW1pdHRlcnMudmFsdWVzKCkpLm1hcChhc3luYyAoeCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHguY2FsbGJhY2soZXZlbnQsIHNlc3Npb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMucHVzaChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3JzWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5fZGVidWcoZGVidWdOYW1lLCAnZW5kJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogc2V0IGN1cnJlbnRTZXNzaW9uIGFuZCBjdXJyZW50VXNlclxuICAgICAqIHByb2Nlc3MgdG8gX3N0YXJ0QXV0b1JlZnJlc2hUb2tlbiBpZiBwb3NzaWJsZVxuICAgICAqL1xuICAgIGFzeW5jIF9zYXZlU2Vzc2lvbihzZXNzaW9uKSB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCcjX3NhdmVTZXNzaW9uKCknLCBzZXNzaW9uKTtcbiAgICAgICAgLy8gX3NhdmVTZXNzaW9uIGlzIGFsd2F5cyBjYWxsZWQgd2hlbmV2ZXIgYSBuZXcgc2Vzc2lvbiBoYXMgYmVlbiBhY3F1aXJlZFxuICAgICAgICAvLyBzbyB3ZSBjYW4gc2FmZWx5IHN1cHByZXNzIHRoZSB3YXJuaW5nIHJldHVybmVkIGJ5IGZ1dHVyZSBnZXRTZXNzaW9uIGNhbGxzXG4gICAgICAgIHRoaXMuc3VwcHJlc3NHZXRTZXNzaW9uV2FybmluZyA9IHRydWU7XG4gICAgICAgIGF3YWl0IHJlbW92ZUl0ZW1Bc3luYyh0aGlzLnN0b3JhZ2UsIGAke3RoaXMuc3RvcmFnZUtleX0tY29kZS12ZXJpZmllcmApO1xuICAgICAgICAvLyBDcmVhdGUgYSBzaGFsbG93IGNvcHkgdG8gd29yayB3aXRoLCB0byBhdm9pZCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgc2Vzc2lvbiBvYmplY3QgaWYgaXQncyB1c2VkIGVsc2V3aGVyZVxuICAgICAgICBjb25zdCBzZXNzaW9uVG9Qcm9jZXNzID0gT2JqZWN0LmFzc2lnbih7fSwgc2Vzc2lvbik7XG4gICAgICAgIGNvbnN0IHVzZXJJc1Byb3h5ID0gc2Vzc2lvblRvUHJvY2Vzcy51c2VyICYmIHNlc3Npb25Ub1Byb2Nlc3MudXNlci5fX2lzVXNlck5vdEF2YWlsYWJsZVByb3h5ID09PSB0cnVlO1xuICAgICAgICBpZiAodGhpcy51c2VyU3RvcmFnZSkge1xuICAgICAgICAgICAgaWYgKCF1c2VySXNQcm94eSAmJiBzZXNzaW9uVG9Qcm9jZXNzLnVzZXIpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGEgcmVhbCB1c2VyIG9iamVjdCwgc2F2ZSBpdCB0byB1c2VyU3RvcmFnZS5cbiAgICAgICAgICAgICAgICBhd2FpdCBzZXRJdGVtQXN5bmModGhpcy51c2VyU3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5ICsgJy11c2VyJywge1xuICAgICAgICAgICAgICAgICAgICB1c2VyOiBzZXNzaW9uVG9Qcm9jZXNzLnVzZXIsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1c2VySXNQcm94eSkge1xuICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgdGhlIHByb3h5LCBpdCBtZWFucyB1c2VyIHdhcyBub3QgZm91bmQgaW4gdXNlclN0b3JhZ2UuXG4gICAgICAgICAgICAgICAgLy8gV2Ugc2hvdWxkIGVuc3VyZSBubyBzdGFsZSB1c2VyIGRhdGEgZm9yIHRoaXMga2V5IGV4aXN0cyBpbiB1c2VyU3RvcmFnZSBpZiB3ZSB3ZXJlIHRvIHNhdmUgbnVsbCxcbiAgICAgICAgICAgICAgICAvLyBvciBzaW1wbHkgbm90IHNhdmUgdGhlIHByb3h5LiBGb3Igbm93LCB3ZSBkb24ndCBzYXZlIHRoZSBwcm94eSBoZXJlLlxuICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSBuZWVkIHRvIGNsZWFyIHVzZXJTdG9yYWdlIGlmIHVzZXIgYmVjb21lcyBwcm94eSwgdGhhdCBsb2dpYyB3b3VsZCBnbyBoZXJlLlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUHJlcGFyZSB0aGUgbWFpbiBzZXNzaW9uIGRhdGEgZm9yIHByaW1hcnkgc3RvcmFnZTogcmVtb3ZlIHRoZSB1c2VyIHByb3BlcnR5IGJlZm9yZSBjbG9uaW5nXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIHRoZSBvcmlnaW5hbCBzZXNzaW9uLnVzZXIgbWlnaHQgYmUgdGhlIHByb3h5XG4gICAgICAgICAgICBjb25zdCBtYWluU2Vzc2lvbkRhdGEgPSBPYmplY3QuYXNzaWduKHt9LCBzZXNzaW9uVG9Qcm9jZXNzKTtcbiAgICAgICAgICAgIGRlbGV0ZSBtYWluU2Vzc2lvbkRhdGEudXNlcjsgLy8gUmVtb3ZlIHVzZXIgKHJlYWwgb3IgcHJveHkpIGJlZm9yZSBjbG9uaW5nIGZvciBtYWluIHN0b3JhZ2VcbiAgICAgICAgICAgIGNvbnN0IGNsb25lZE1haW5TZXNzaW9uRGF0YSA9IGRlZXBDbG9uZShtYWluU2Vzc2lvbkRhdGEpO1xuICAgICAgICAgICAgYXdhaXQgc2V0SXRlbUFzeW5jKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5LCBjbG9uZWRNYWluU2Vzc2lvbkRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gTm8gdXNlclN0b3JhZ2UgaXMgY29uZmlndXJlZC5cbiAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSwgc2Vzc2lvbi51c2VyIHNob3VsZCBpZGVhbGx5IG5vdCBiZSBhIHByb3h5LlxuICAgICAgICAgICAgLy8gSWYgaXQgd2VyZSwgc3RydWN0dXJlZENsb25lIHdvdWxkIGZhaWwuIFRoaXMgaW1wbGllcyBhbiBpc3N1ZSBlbHNld2hlcmUgaWYgdXNlciBpcyBhIHByb3h5IGhlcmVcbiAgICAgICAgICAgIGNvbnN0IGNsb25lZFNlc3Npb24gPSBkZWVwQ2xvbmUoc2Vzc2lvblRvUHJvY2Vzcyk7IC8vIHNlc3Npb25Ub1Byb2Nlc3Mgc3RpbGwgaGFzIGl0cyBvcmlnaW5hbCB1c2VyIHByb3BlcnR5XG4gICAgICAgICAgICBhd2FpdCBzZXRJdGVtQXN5bmModGhpcy5zdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXksIGNsb25lZFNlc3Npb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFzeW5jIF9yZW1vdmVTZXNzaW9uKCkge1xuICAgICAgICB0aGlzLl9kZWJ1ZygnI19yZW1vdmVTZXNzaW9uKCknKTtcbiAgICAgICAgdGhpcy5zdXBwcmVzc0dldFNlc3Npb25XYXJuaW5nID0gZmFsc2U7XG4gICAgICAgIGF3YWl0IHJlbW92ZUl0ZW1Bc3luYyh0aGlzLnN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSk7XG4gICAgICAgIGF3YWl0IHJlbW92ZUl0ZW1Bc3luYyh0aGlzLnN0b3JhZ2UsIHRoaXMuc3RvcmFnZUtleSArICctY29kZS12ZXJpZmllcicpO1xuICAgICAgICBhd2FpdCByZW1vdmVJdGVtQXN5bmModGhpcy5zdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXkgKyAnLXVzZXInKTtcbiAgICAgICAgaWYgKHRoaXMudXNlclN0b3JhZ2UpIHtcbiAgICAgICAgICAgIGF3YWl0IHJlbW92ZUl0ZW1Bc3luYyh0aGlzLnVzZXJTdG9yYWdlLCB0aGlzLnN0b3JhZ2VLZXkgKyAnLXVzZXInKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCB0aGlzLl9ub3RpZnlBbGxTdWJzY3JpYmVycygnU0lHTkVEX09VVCcsIG51bGwpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFueSByZWdpc3RlcmVkIHZpc2liaWxpdHljaGFuZ2UgY2FsbGJhY2suXG4gICAgICpcbiAgICAgKiB7QHNlZSAjc3RhcnRBdXRvUmVmcmVzaH1cbiAgICAgKiB7QHNlZSAjc3RvcEF1dG9SZWZyZXNofVxuICAgICAqL1xuICAgIF9yZW1vdmVWaXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrKCkge1xuICAgICAgICB0aGlzLl9kZWJ1ZygnI19yZW1vdmVWaXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrKCknKTtcbiAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0aGlzLnZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2s7XG4gICAgICAgIHRoaXMudmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoY2FsbGJhY2sgJiYgaXNCcm93c2VyKCkgJiYgKHdpbmRvdyA9PT0gbnVsbCB8fCB3aW5kb3cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKSkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKCdyZW1vdmluZyB2aXNpYmlsaXR5Y2hhbmdlIGNhbGxiYWNrIGZhaWxlZCcsIGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgaXMgdGhlIHByaXZhdGUgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rICNzdGFydEF1dG9SZWZyZXNofS4gVXNlIHRoaXNcbiAgICAgKiB3aXRoaW4gdGhlIGxpYnJhcnkuXG4gICAgICovXG4gICAgYXN5bmMgX3N0YXJ0QXV0b1JlZnJlc2goKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuX3N0b3BBdXRvUmVmcmVzaCgpO1xuICAgICAgICB0aGlzLl9kZWJ1ZygnI19zdGFydEF1dG9SZWZyZXNoKCknKTtcbiAgICAgICAgY29uc3QgdGlja2VyID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5fYXV0b1JlZnJlc2hUb2tlblRpY2soKSwgQVVUT19SRUZSRVNIX1RJQ0tfRFVSQVRJT05fTVMpO1xuICAgICAgICB0aGlzLmF1dG9SZWZyZXNoVGlja2VyID0gdGlja2VyO1xuICAgICAgICBpZiAodGlja2VyICYmIHR5cGVvZiB0aWNrZXIgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0aWNrZXIudW5yZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vIHRpY2tlciBpcyBhIE5vZGVKUyBUaW1lb3V0IG9iamVjdCB0aGF0IGhhcyBhbiBgdW5yZWZgIG1ldGhvZFxuICAgICAgICAgICAgLy8gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS90aW1lcnMuaHRtbCN0aW1lb3V0dW5yZWZcbiAgICAgICAgICAgIC8vIFdoZW4gYXV0byByZWZyZXNoIGlzIHVzZWQgaW4gTm9kZUpTIChsaWtlIGZvciB0ZXN0aW5nKSB0aGVcbiAgICAgICAgICAgIC8vIGBzZXRJbnRlcnZhbGAgaXMgcHJldmVudGluZyB0aGUgcHJvY2VzcyBmcm9tIGJlaW5nIG1hcmtlZCBhc1xuICAgICAgICAgICAgLy8gZmluaXNoZWQgYW5kIHRlc3RzIHJ1biBlbmRsZXNzbHkuIFRoaXMgY2FuIGJlIHByZXZlbnRlZCBieSBjYWxsaW5nXG4gICAgICAgICAgICAvLyBgdW5yZWYoKWAgb24gdGhlIHJldHVybmVkIG9iamVjdC5cbiAgICAgICAgICAgIHRpY2tlci51bnJlZigpO1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUUyBoYXMgbm8gY29udGV4dCBvZiBEZW5vXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIERlbm8gIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBEZW5vLnVucmVmVGltZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIC8vIHNpbWlsYXIgbGlrZSBmb3IgTm9kZUpTLCBidXQgd2l0aCB0aGUgRGVubyBBUElcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vZGVuby5sYW5kL2FwaUBsYXRlc3Q/dW5zdGFibGUmcz1EZW5vLnVucmVmVGltZXJcbiAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVFMgaGFzIG5vIGNvbnRleHQgb2YgRGVub1xuICAgICAgICAgICAgRGVuby51bnJlZlRpbWVyKHRpY2tlcik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcnVuIHRoZSB0aWNrIGltbWVkaWF0ZWx5LCBidXQgaW4gdGhlIG5leHQgcGFzcyBvZiB0aGUgZXZlbnQgbG9vcCBzbyB0aGF0XG4gICAgICAgIC8vICNfaW5pdGlhbGl6ZSBjYW4gYmUgYWxsb3dlZCB0byBjb21wbGV0ZSB3aXRob3V0IHJlY3Vyc2l2ZWx5IHdhaXRpbmcgb25cbiAgICAgICAgLy8gaXRzZWxmXG4gICAgICAgIGNvbnN0IHRpbWVvdXQgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZVByb21pc2U7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9hdXRvUmVmcmVzaFRva2VuVGljaygpO1xuICAgICAgICB9LCAwKTtcbiAgICAgICAgdGhpcy5hdXRvUmVmcmVzaFRpY2tUaW1lb3V0ID0gdGltZW91dDtcbiAgICAgICAgaWYgKHRpbWVvdXQgJiYgdHlwZW9mIHRpbWVvdXQgPT09ICdvYmplY3QnICYmIHR5cGVvZiB0aW1lb3V0LnVucmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aW1lb3V0LnVucmVmKCk7XG4gICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRTIGhhcyBubyBjb250ZXh0IG9mIERlbm9cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgRGVubyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIERlbm8udW5yZWZUaW1lciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUUyBoYXMgbm8gY29udGV4dCBvZiBEZW5vXG4gICAgICAgICAgICBEZW5vLnVucmVmVGltZXIodGltZW91dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBpcyB0aGUgcHJpdmF0ZSBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgI3N0b3BBdXRvUmVmcmVzaH0uIFVzZSB0aGlzXG4gICAgICogd2l0aGluIHRoZSBsaWJyYXJ5LlxuICAgICAqL1xuICAgIGFzeW5jIF9zdG9wQXV0b1JlZnJlc2goKSB7XG4gICAgICAgIHRoaXMuX2RlYnVnKCcjX3N0b3BBdXRvUmVmcmVzaCgpJyk7XG4gICAgICAgIGNvbnN0IHRpY2tlciA9IHRoaXMuYXV0b1JlZnJlc2hUaWNrZXI7XG4gICAgICAgIHRoaXMuYXV0b1JlZnJlc2hUaWNrZXIgPSBudWxsO1xuICAgICAgICBpZiAodGlja2VyKSB7XG4gICAgICAgICAgICBjbGVhckludGVydmFsKHRpY2tlcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGltZW91dCA9IHRoaXMuYXV0b1JlZnJlc2hUaWNrVGltZW91dDtcbiAgICAgICAgdGhpcy5hdXRvUmVmcmVzaFRpY2tUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydHMgYW4gYXV0by1yZWZyZXNoIHByb2Nlc3MgaW4gdGhlIGJhY2tncm91bmQuIFRoZSBzZXNzaW9uIGlzIGNoZWNrZWRcbiAgICAgKiBldmVyeSBmZXcgc2Vjb25kcy4gQ2xvc2UgdG8gdGhlIHRpbWUgb2YgZXhwaXJhdGlvbiBhIHByb2Nlc3MgaXMgc3RhcnRlZCB0b1xuICAgICAqIHJlZnJlc2ggdGhlIHNlc3Npb24uIElmIHJlZnJlc2hpbmcgZmFpbHMgaXQgd2lsbCBiZSByZXRyaWVkIGZvciBhcyBsb25nIGFzXG4gICAgICogbmVjZXNzYXJ5LlxuICAgICAqXG4gICAgICogSWYgeW91IHNldCB0aGUge0BsaW5rIEdvVHJ1ZUNsaWVudE9wdGlvbnMjYXV0b1JlZnJlc2hUb2tlbn0geW91IGRvbid0IG5lZWRcbiAgICAgKiB0byBjYWxsIHRoaXMgZnVuY3Rpb24sIGl0IHdpbGwgYmUgY2FsbGVkIGZvciB5b3UuXG4gICAgICpcbiAgICAgKiBPbiBicm93c2VycyB0aGUgcmVmcmVzaCBwcm9jZXNzIHdvcmtzIG9ubHkgd2hlbiB0aGUgdGFiL3dpbmRvdyBpcyBpbiB0aGVcbiAgICAgKiBmb3JlZ3JvdW5kIHRvIGNvbnNlcnZlIHJlc291cmNlcyBhcyB3ZWxsIGFzIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGFuZFxuICAgICAqIGZsb29kaW5nIGF1dGggd2l0aCByZXF1ZXN0cy4gSWYgeW91IGNhbGwgdGhpcyBtZXRob2QgYW55IG1hbmFnZWRcbiAgICAgKiB2aXNpYmlsaXR5IGNoYW5nZSBjYWxsYmFjayB3aWxsIGJlIHJlbW92ZWQgYW5kIHlvdSBtdXN0IG1hbmFnZSB2aXNpYmlsaXR5XG4gICAgICogY2hhbmdlcyBvbiB5b3VyIG93bi5cbiAgICAgKlxuICAgICAqIE9uIG5vbi1icm93c2VyIHBsYXRmb3JtcyB0aGUgcmVmcmVzaCBwcm9jZXNzIHdvcmtzICpjb250aW51b3VzbHkqIGluIHRoZVxuICAgICAqIGJhY2tncm91bmQsIHdoaWNoIG1heSBub3QgYmUgZGVzaXJhYmxlLiBZb3Ugc2hvdWxkIGhvb2sgaW50byB5b3VyXG4gICAgICogcGxhdGZvcm0ncyBmb3JlZ3JvdW5kIGluZGljYXRpb24gbWVjaGFuaXNtIGFuZCBjYWxsIHRoZXNlIG1ldGhvZHNcbiAgICAgKiBhcHByb3ByaWF0ZWx5IHRvIGNvbnNlcnZlIHJlc291cmNlcy5cbiAgICAgKlxuICAgICAqIHtAc2VlICNzdG9wQXV0b1JlZnJlc2h9XG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgQXV0aFxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAtIE9ubHkgdXNlZnVsIGluIG5vbi1icm93c2VyIGVudmlyb25tZW50cyBzdWNoIGFzIFJlYWN0IE5hdGl2ZSBvciBFbGVjdHJvbi5cbiAgICAgKiAtIFRoZSBTdXBhYmFzZSBBdXRoIGxpYnJhcnkgYXV0b21hdGljYWxseSBzdGFydHMgYW5kIHN0b3BzIHByb2FjdGl2ZWx5IHJlZnJlc2hpbmcgdGhlIHNlc3Npb24gd2hlbiBhIHRhYiBpcyBmb2N1c2VkIG9yIG5vdC5cbiAgICAgKiAtIE9uIG5vbi1icm93c2VyIHBsYXRmb3Jtcywgc3VjaCBhcyBtb2JpbGUgb3IgZGVza3RvcCBhcHBzIGJ1aWx0IHdpdGggd2ViIHRlY2hub2xvZ2llcywgdGhlIGxpYnJhcnkgaXMgbm90IGFibGUgdG8gZWZmZWN0aXZlbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIGlzIF9mb2N1c2VkXyBvciBub3QuXG4gICAgICogLSBUbyBnaXZlIHRoaXMgaGludCB0byB0aGUgYXBwbGljYXRpb24sIHlvdSBzaG91bGQgYmUgY2FsbGluZyB0aGlzIG1ldGhvZCB3aGVuIHRoZSBhcHAgaXMgaW4gZm9jdXMgYW5kIGNhbGxpbmcgYHN1cGFiYXNlLmF1dGguc3RvcEF1dG9SZWZyZXNoKClgIHdoZW4gaXQncyBvdXQgb2YgZm9jdXMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBTdGFydCBhbmQgc3RvcCBhdXRvIHJlZnJlc2ggaW4gUmVhY3QgTmF0aXZlXG4gICAgICogYGBganNcbiAgICAgKiBpbXBvcnQgeyBBcHBTdGF0ZSB9IGZyb20gJ3JlYWN0LW5hdGl2ZSdcbiAgICAgKlxuICAgICAqIC8vIG1ha2Ugc3VyZSB5b3UgcmVnaXN0ZXIgdGhpcyBvbmx5IG9uY2UhXG4gICAgICogQXBwU3RhdGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKHN0YXRlKSA9PiB7XG4gICAgICogICBpZiAoc3RhdGUgPT09ICdhY3RpdmUnKSB7XG4gICAgICogICAgIHN1cGFiYXNlLmF1dGguc3RhcnRBdXRvUmVmcmVzaCgpXG4gICAgICogICB9IGVsc2Uge1xuICAgICAqICAgICBzdXBhYmFzZS5hdXRoLnN0b3BBdXRvUmVmcmVzaCgpXG4gICAgICogICB9XG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBzdGFydEF1dG9SZWZyZXNoKCkge1xuICAgICAgICB0aGlzLl9yZW1vdmVWaXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrKCk7XG4gICAgICAgIGF3YWl0IHRoaXMuX3N0YXJ0QXV0b1JlZnJlc2goKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU3RvcHMgYW4gYWN0aXZlIGF1dG8gcmVmcmVzaCBwcm9jZXNzIHJ1bm5pbmcgaW4gdGhlIGJhY2tncm91bmQgKGlmIGFueSkuXG4gICAgICpcbiAgICAgKiBJZiB5b3UgY2FsbCB0aGlzIG1ldGhvZCBhbnkgbWFuYWdlZCB2aXNpYmlsaXR5IGNoYW5nZSBjYWxsYmFjayB3aWxsIGJlXG4gICAgICogcmVtb3ZlZCBhbmQgeW91IG11c3QgbWFuYWdlIHZpc2liaWxpdHkgY2hhbmdlcyBvbiB5b3VyIG93bi5cbiAgICAgKlxuICAgICAqIFNlZSB7QGxpbmsgI3N0YXJ0QXV0b1JlZnJlc2h9IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgQXV0aFxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAtIE9ubHkgdXNlZnVsIGluIG5vbi1icm93c2VyIGVudmlyb25tZW50cyBzdWNoIGFzIFJlYWN0IE5hdGl2ZSBvciBFbGVjdHJvbi5cbiAgICAgKiAtIFRoZSBTdXBhYmFzZSBBdXRoIGxpYnJhcnkgYXV0b21hdGljYWxseSBzdGFydHMgYW5kIHN0b3BzIHByb2FjdGl2ZWx5IHJlZnJlc2hpbmcgdGhlIHNlc3Npb24gd2hlbiBhIHRhYiBpcyBmb2N1c2VkIG9yIG5vdC5cbiAgICAgKiAtIE9uIG5vbi1icm93c2VyIHBsYXRmb3Jtcywgc3VjaCBhcyBtb2JpbGUgb3IgZGVza3RvcCBhcHBzIGJ1aWx0IHdpdGggd2ViIHRlY2hub2xvZ2llcywgdGhlIGxpYnJhcnkgaXMgbm90IGFibGUgdG8gZWZmZWN0aXZlbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFwcGxpY2F0aW9uIGlzIF9mb2N1c2VkXyBvciBub3QuXG4gICAgICogLSBXaGVuIHlvdXIgYXBwbGljYXRpb24gZ29lcyBpbiB0aGUgYmFja2dyb3VuZCBvciBvdXQgb2YgZm9jdXMsIGNhbGwgdGhpcyBtZXRob2QgdG8gc3RvcCB0aGUgcHJvYWN0aXZlIHJlZnJlc2hpbmcgb2YgdGhlIHNlc3Npb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBTdGFydCBhbmQgc3RvcCBhdXRvIHJlZnJlc2ggaW4gUmVhY3QgTmF0aXZlXG4gICAgICogYGBganNcbiAgICAgKiBpbXBvcnQgeyBBcHBTdGF0ZSB9IGZyb20gJ3JlYWN0LW5hdGl2ZSdcbiAgICAgKlxuICAgICAqIC8vIG1ha2Ugc3VyZSB5b3UgcmVnaXN0ZXIgdGhpcyBvbmx5IG9uY2UhXG4gICAgICogQXBwU3RhdGUuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKHN0YXRlKSA9PiB7XG4gICAgICogICBpZiAoc3RhdGUgPT09ICdhY3RpdmUnKSB7XG4gICAgICogICAgIHN1cGFiYXNlLmF1dGguc3RhcnRBdXRvUmVmcmVzaCgpXG4gICAgICogICB9IGVsc2Uge1xuICAgICAqICAgICBzdXBhYmFzZS5hdXRoLnN0b3BBdXRvUmVmcmVzaCgpXG4gICAgICogICB9XG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBzdG9wQXV0b1JlZnJlc2goKSB7XG4gICAgICAgIHRoaXMuX3JlbW92ZVZpc2liaWxpdHlDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fc3RvcEF1dG9SZWZyZXNoKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJ1bnMgdGhlIGF1dG8gcmVmcmVzaCB0b2tlbiB0aWNrLlxuICAgICAqL1xuICAgIGFzeW5jIF9hdXRvUmVmcmVzaFRva2VuVGljaygpIHtcbiAgICAgICAgdGhpcy5fZGVidWcoJyNfYXV0b1JlZnJlc2hUb2tlblRpY2soKScsICdiZWdpbicpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fYWNxdWlyZUxvY2soMCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSwgfSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb24gfHwgIXNlc3Npb24ucmVmcmVzaF90b2tlbiB8fCAhc2Vzc2lvbi5leHBpcmVzX2F0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCcjX2F1dG9SZWZyZXNoVG9rZW5UaWNrKCknLCAnbm8gc2Vzc2lvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlc3Npb24gd2lsbCBleHBpcmUgaW4gdGhpcyBtYW55IHRpY2tzIChvciBoYXMgYWxyZWFkeSBleHBpcmVkIGlmIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwaXJlc0luVGlja3MgPSBNYXRoLmZsb29yKChzZXNzaW9uLmV4cGlyZXNfYXQgKiAxMDAwIC0gbm93KSAvIEFVVE9fUkVGUkVTSF9USUNLX0RVUkFUSU9OX01TKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9kZWJ1ZygnI19hdXRvUmVmcmVzaFRva2VuVGljaygpJywgYGFjY2VzcyB0b2tlbiBleHBpcmVzIGluICR7ZXhwaXJlc0luVGlja3N9IHRpY2tzLCBhIHRpY2sgbGFzdHMgJHtBVVRPX1JFRlJFU0hfVElDS19EVVJBVElPTl9NU31tcywgcmVmcmVzaCB0aHJlc2hvbGQgaXMgJHtBVVRPX1JFRlJFU0hfVElDS19USFJFU0hPTER9IHRpY2tzYCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGlyZXNJblRpY2tzIDw9IEFVVE9fUkVGUkVTSF9USUNLX1RIUkVTSE9MRCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jYWxsUmVmcmVzaFRva2VuKHNlc3Npb24ucmVmcmVzaF90b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0F1dG8gcmVmcmVzaCB0aWNrIGZhaWxlZCB3aXRoIGVycm9yLiBUaGlzIGlzIGxpa2VseSBhIHRyYW5zaWVudCBlcnJvci4nLCBlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJyNfYXV0b1JlZnJlc2hUb2tlblRpY2soKScsICdlbmQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBMb2NrQWNxdWlyZVRpbWVvdXRFcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKCdhdXRvIHJlZnJlc2ggdG9rZW4gdGljayBsb2NrIG5vdCBhdmFpbGFibGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmVnaXN0ZXJzIGNhbGxiYWNrcyBvbiB0aGUgYnJvd3NlciAvIHBsYXRmb3JtLCB3aGljaCBpbi10dXJuIHJ1blxuICAgICAqIGFsZ29yaXRobXMgd2hlbiB0aGUgYnJvd3NlciB3aW5kb3cvdGFiIGFyZSBpbiBmb3JlZ3JvdW5kLiBPbiBub24tYnJvd3NlclxuICAgICAqIHBsYXRmb3JtcyBpdCBhc3N1bWVzIGFsd2F5cyBmb3JlZ3JvdW5kLlxuICAgICAqL1xuICAgIGFzeW5jIF9oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKCkge1xuICAgICAgICB0aGlzLl9kZWJ1ZygnI19oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlKCknKTtcbiAgICAgICAgaWYgKCFpc0Jyb3dzZXIoKSB8fCAhKHdpbmRvdyA9PT0gbnVsbCB8fCB3aW5kb3cgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1JlZnJlc2hUb2tlbikge1xuICAgICAgICAgICAgICAgIC8vIGluIG5vbi1icm93c2VyIGVudmlyb25tZW50cyB0aGUgcmVmcmVzaCB0b2tlbiB0aWNrZXIgcnVucyBhbHdheXNcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0QXV0b1JlZnJlc2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrID0gYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX29uVmlzaWJpbGl0eUNoYW5nZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGVidWcoJyN2aXNpYmlsaXR5Q2hhbmdlZENhbGxiYWNrJywgJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB3aW5kb3cgPT09IG51bGwgfHwgd2luZG93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIHRoaXMudmlzaWJpbGl0eUNoYW5nZWRDYWxsYmFjayk7XG4gICAgICAgICAgICAvLyBub3cgaW1tZWRpYXRlbHkgY2FsbCB0aGUgdmlzYmlsaXR5IGNoYW5nZWQgY2FsbGJhY2sgdG8gc2V0dXAgd2l0aCB0aGVcbiAgICAgICAgICAgIC8vIGN1cnJlbnQgdmlzYmlsaXR5IHN0YXRlXG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9vblZpc2liaWxpdHlDaGFuZ2VkKHRydWUpOyAvLyBpbml0aWFsIGNhbGxcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ19oYW5kbGVWaXNpYmlsaXR5Q2hhbmdlJywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENhbGxiYWNrIHJlZ2lzdGVyZWQgd2l0aCBgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnKWAuXG4gICAgICovXG4gICAgYXN5bmMgX29uVmlzaWJpbGl0eUNoYW5nZWQoY2FsbGVkRnJvbUluaXRpYWxpemUpIHtcbiAgICAgICAgY29uc3QgbWV0aG9kTmFtZSA9IGAjX29uVmlzaWJpbGl0eUNoYW5nZWQoJHtjYWxsZWRGcm9tSW5pdGlhbGl6ZX0pYDtcbiAgICAgICAgdGhpcy5fZGVidWcobWV0aG9kTmFtZSwgJ3Zpc2liaWxpdHlTdGF0ZScsIGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSk7XG4gICAgICAgIGlmIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1JlZnJlc2hUb2tlbikge1xuICAgICAgICAgICAgICAgIC8vIGluIGJyb3dzZXIgZW52aXJvbm1lbnRzIHRoZSByZWZyZXNoIHRva2VuIHRpY2tlciBydW5zIG9ubHkgb24gZm9jdXNlZCB0YWJzXG4gICAgICAgICAgICAgICAgLy8gd2hpY2ggcHJldmVudHMgcmFjZSBjb25kaXRpb25zXG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRBdXRvUmVmcmVzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFjYWxsZWRGcm9tSW5pdGlhbGl6ZSkge1xuICAgICAgICAgICAgICAgIC8vIGNhbGxlZCB3aGVuIHRoZSB2aXNpYmlsaXR5IGhhcyBjaGFuZ2VkLCBpLmUuIHRoZSBicm93c2VyXG4gICAgICAgICAgICAgICAgLy8gdHJhbnNpdGlvbmVkIGZyb20gaGlkZGVuIC0+IHZpc2libGUgc28gd2UgbmVlZCB0byBzZWUgaWYgdGhlIHNlc3Npb25cbiAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgcmVjb3ZlcmVkIGltbWVkaWF0ZWx5Li4uIGJ1dCB0byBkbyB0aGF0IHdlIG5lZWQgdG8gYWNxdWlyZVxuICAgICAgICAgICAgICAgIC8vIHRoZSBsb2NrIGZpcnN0IGFzeW5jaHJvbm91c2x5XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplUHJvbWlzZTtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9hY3F1aXJlTG9jayh0aGlzLmxvY2tBY3F1aXJlVGltZW91dCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlICE9PSAndmlzaWJsZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RlYnVnKG1ldGhvZE5hbWUsICdhY3F1aXJlZCB0aGUgbG9jayB0byByZWNvdmVyIHRoZSBzZXNzaW9uLCBidXQgdGhlIGJyb3dzZXIgdmlzaWJpbGl0eVN0YXRlIGlzIG5vIGxvbmdlciB2aXNpYmxlLCBhYm9ydGluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmlzaWJpbGl0eSBoYXMgY2hhbmdlZCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbG9jaywgYWJvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyByZWNvdmVyIHRoZSBzZXNzaW9uXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3JlY292ZXJBbmRSZWZyZXNoKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAnaGlkZGVuJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuYXV0b1JlZnJlc2hUb2tlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0b3BBdXRvUmVmcmVzaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyB0aGUgcmVsZXZhbnQgbG9naW4gVVJMIGZvciBhIHRoaXJkLXBhcnR5IHByb3ZpZGVyLlxuICAgICAqIEBwYXJhbSBvcHRpb25zLnJlZGlyZWN0VG8gQSBVUkwgb3IgbW9iaWxlIGFkZHJlc3MgdG8gc2VuZCB0aGUgdXNlciB0byBhZnRlciB0aGV5IGFyZSBjb25maXJtZWQuXG4gICAgICogQHBhcmFtIG9wdGlvbnMuc2NvcGVzIEEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2Ygc2NvcGVzIGdyYW50ZWQgdG8gdGhlIE9BdXRoIGFwcGxpY2F0aW9uLlxuICAgICAqIEBwYXJhbSBvcHRpb25zLnF1ZXJ5UGFyYW1zIEFuIG9iamVjdCBvZiBrZXktdmFsdWUgcGFpcnMgY29udGFpbmluZyBxdWVyeSBwYXJhbWV0ZXJzIGdyYW50ZWQgdG8gdGhlIE9BdXRoIGFwcGxpY2F0aW9uLlxuICAgICAqL1xuICAgIGFzeW5jIF9nZXRVcmxGb3JQcm92aWRlcih1cmwsIHByb3ZpZGVyLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHVybFBhcmFtcyA9IFtgcHJvdmlkZXI9JHtlbmNvZGVVUklDb21wb25lbnQocHJvdmlkZXIpfWBdO1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnJlZGlyZWN0VG8pIHtcbiAgICAgICAgICAgIHVybFBhcmFtcy5wdXNoKGByZWRpcmVjdF90bz0ke2VuY29kZVVSSUNvbXBvbmVudChvcHRpb25zLnJlZGlyZWN0VG8pfWApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc2NvcGVzKSB7XG4gICAgICAgICAgICB1cmxQYXJhbXMucHVzaChgc2NvcGVzPSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9wdGlvbnMuc2NvcGVzKX1gKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5mbG93VHlwZSA9PT0gJ3BrY2UnKSB7XG4gICAgICAgICAgICBjb25zdCBbY29kZUNoYWxsZW5nZSwgY29kZUNoYWxsZW5nZU1ldGhvZF0gPSBhd2FpdCBnZXRDb2RlQ2hhbGxlbmdlQW5kTWV0aG9kKHRoaXMuc3RvcmFnZSwgdGhpcy5zdG9yYWdlS2V5KTtcbiAgICAgICAgICAgIGNvbnN0IGZsb3dQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHtcbiAgICAgICAgICAgICAgICBjb2RlX2NoYWxsZW5nZTogYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGNvZGVDaGFsbGVuZ2UpfWAsXG4gICAgICAgICAgICAgICAgY29kZV9jaGFsbGVuZ2VfbWV0aG9kOiBgJHtlbmNvZGVVUklDb21wb25lbnQoY29kZUNoYWxsZW5nZU1ldGhvZCl9YCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdXJsUGFyYW1zLnB1c2goZmxvd1BhcmFtcy50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBxdWVyeSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMob3B0aW9ucy5xdWVyeVBhcmFtcyk7XG4gICAgICAgICAgICB1cmxQYXJhbXMucHVzaChxdWVyeS50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNraXBCcm93c2VyUmVkaXJlY3QpIHtcbiAgICAgICAgICAgIHVybFBhcmFtcy5wdXNoKGBza2lwX2h0dHBfcmVkaXJlY3Q9JHtvcHRpb25zLnNraXBCcm93c2VyUmVkaXJlY3R9YCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGAke3VybH0/JHt1cmxQYXJhbXMuam9pbignJicpfWA7XG4gICAgfVxuICAgIGFzeW5jIF91bmVucm9sbChwYXJhbXMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhOiBzZXNzaW9uRGF0YSwgZXJyb3I6IHNlc3Npb25FcnJvciB9ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yOiBzZXNzaW9uRXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnREVMRVRFJywgYCR7dGhpcy51cmx9L2ZhY3RvcnMvJHtwYXJhbXMuZmFjdG9ySWR9YCwge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIGp3dDogKF9hID0gc2Vzc2lvbkRhdGEgPT09IG51bGwgfHwgc2Vzc2lvbkRhdGEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNlc3Npb25EYXRhLnNlc3Npb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhc3luYyBfZW5yb2xsKHBhcmFtcykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3VzZVNlc3Npb24oYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhOiBzZXNzaW9uRGF0YSwgZXJyb3I6IHNlc3Npb25FcnJvciB9ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yOiBzZXNzaW9uRXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBPYmplY3QuYXNzaWduKHsgZnJpZW5kbHlfbmFtZTogcGFyYW1zLmZyaWVuZGx5TmFtZSwgZmFjdG9yX3R5cGU6IHBhcmFtcy5mYWN0b3JUeXBlIH0sIChwYXJhbXMuZmFjdG9yVHlwZSA9PT0gJ3Bob25lJ1xuICAgICAgICAgICAgICAgICAgICA/IHsgcGhvbmU6IHBhcmFtcy5waG9uZSB9XG4gICAgICAgICAgICAgICAgICAgIDogcGFyYW1zLmZhY3RvclR5cGUgPT09ICd0b3RwJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB7IGlzc3VlcjogcGFyYW1zLmlzc3VlciB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHt9KSk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gKGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdQT1NUJywgYCR7dGhpcy51cmx9L2ZhY3RvcnNgLCB7XG4gICAgICAgICAgICAgICAgICAgIGJvZHksXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgand0OiAoX2EgPSBzZXNzaW9uRGF0YSA9PT0gbnVsbCB8fCBzZXNzaW9uRGF0YSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2Vzc2lvbkRhdGEuc2Vzc2lvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtcy5mYWN0b3JUeXBlID09PSAndG90cCcgJiYgZGF0YS50eXBlID09PSAndG90cCcgJiYgKChfYiA9IGRhdGEgPT09IG51bGwgfHwgZGF0YSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGF0YS50b3RwKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucXJfY29kZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS50b3RwLnFyX2NvZGUgPSBgZGF0YTppbWFnZS9zdmcreG1sO3V0Zi04LCR7ZGF0YS50b3RwLnFyX2NvZGV9YDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGEsIGVycm9yOiBudWxsIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgX3ZlcmlmeShwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjcXVpcmVMb2NrKHRoaXMubG9ja0FjcXVpcmVUaW1lb3V0LCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGE6IHNlc3Npb25EYXRhLCBlcnJvcjogc2Vzc2lvbkVycm9yIH0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvcjogc2Vzc2lvbkVycm9yIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBPYmplY3QuYXNzaWduKHsgY2hhbGxlbmdlX2lkOiBwYXJhbXMuY2hhbGxlbmdlSWQgfSwgKCd3ZWJhdXRobicgaW4gcGFyYW1zXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWJhdXRobjogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMud2ViYXV0aG4pLCB7IGNyZWRlbnRpYWxfcmVzcG9uc2U6IHBhcmFtcy53ZWJhdXRobi50eXBlID09PSAnY3JlYXRlJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZXJpYWxpemVDcmVkZW50aWFsQ3JlYXRpb25SZXNwb25zZShwYXJhbXMud2ViYXV0aG4uY3JlZGVudGlhbF9yZXNwb25zZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc2VyaWFsaXplQ3JlZGVudGlhbFJlcXVlc3RSZXNwb25zZShwYXJhbXMud2ViYXV0aG4uY3JlZGVudGlhbF9yZXNwb25zZSkgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA6IHsgY29kZTogcGFyYW1zLmNvZGUgfSkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9mYWN0b3JzLyR7cGFyYW1zLmZhY3RvcklkfS92ZXJpZnlgLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgand0OiAoX2EgPSBzZXNzaW9uRGF0YSA9PT0gbnVsbCB8fCBzZXNzaW9uRGF0YSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2Vzc2lvbkRhdGEuc2Vzc2lvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX3NhdmVTZXNzaW9uKE9iamVjdC5hc3NpZ24oeyBleHBpcmVzX2F0OiBNYXRoLnJvdW5kKERhdGUubm93KCkgLyAxMDAwKSArIGRhdGEuZXhwaXJlc19pbiB9LCBkYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKCdNRkFfQ0hBTExFTkdFX1ZFUklGSUVEJywgZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhLCBlcnJvciB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFzeW5jIF9jaGFsbGVuZ2UocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hY3F1aXJlTG9jayh0aGlzLmxvY2tBY3F1aXJlVGltZW91dCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhOiBzZXNzaW9uRGF0YSwgZXJyb3I6IHNlc3Npb25FcnJvciB9ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3I6IHNlc3Npb25FcnJvciB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IChhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9mYWN0b3JzLyR7cGFyYW1zLmZhY3RvcklkfS9jaGFsbGVuZ2VgLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5OiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBqd3Q6IChfYSA9IHNlc3Npb25EYXRhID09PSBudWxsIHx8IHNlc3Npb25EYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXNzaW9uRGF0YS5zZXNzaW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5lcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgIT09ICd3ZWJhdXRobicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGEsIGVycm9yOiBudWxsIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChkYXRhLndlYmF1dGhuLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NyZWF0ZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkYXRhKSwgeyB3ZWJhdXRobjogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkYXRhLndlYmF1dGhuKSwgeyBjcmVkZW50aWFsX29wdGlvbnM6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZGF0YS53ZWJhdXRobi5jcmVkZW50aWFsX29wdGlvbnMpLCB7IHB1YmxpY0tleTogZGVzZXJpYWxpemVDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zKGRhdGEud2ViYXV0aG4uY3JlZGVudGlhbF9vcHRpb25zLnB1YmxpY0tleSkgfSkgfSkgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXF1ZXN0JzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRhdGEpLCB7IHdlYmF1dGhuOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGRhdGEud2ViYXV0aG4pLCB7IGNyZWRlbnRpYWxfb3B0aW9uczogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkYXRhLndlYmF1dGhuLmNyZWRlbnRpYWxfb3B0aW9ucyksIHsgcHVibGljS2V5OiBkZXNlcmlhbGl6ZUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyhkYXRhLndlYmF1dGhuLmNyZWRlbnRpYWxfb3B0aW9ucy5wdWJsaWNLZXkpIH0pIH0pIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiB7QHNlZSBHb1RydWVNRkFBcGkjY2hhbGxlbmdlQW5kVmVyaWZ5fVxuICAgICAqL1xuICAgIGFzeW5jIF9jaGFsbGVuZ2VBbmRWZXJpZnkocGFyYW1zKSB7XG4gICAgICAgIC8vIGJvdGggX2NoYWxsZW5nZSBhbmQgX3ZlcmlmeSBpbmRlcGVuZGVudGx5IGFjcXVpcmUgdGhlIGxvY2ssIHNvIG5vIG5lZWRcbiAgICAgICAgLy8gdG8gYWNxdWlyZSBpdCBoZXJlXG4gICAgICAgIGNvbnN0IHsgZGF0YTogY2hhbGxlbmdlRGF0YSwgZXJyb3I6IGNoYWxsZW5nZUVycm9yIH0gPSBhd2FpdCB0aGlzLl9jaGFsbGVuZ2Uoe1xuICAgICAgICAgICAgZmFjdG9ySWQ6IHBhcmFtcy5mYWN0b3JJZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChjaGFsbGVuZ2VFcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yOiBjaGFsbGVuZ2VFcnJvciB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdmVyaWZ5KHtcbiAgICAgICAgICAgIGZhY3RvcklkOiBwYXJhbXMuZmFjdG9ySWQsXG4gICAgICAgICAgICBjaGFsbGVuZ2VJZDogY2hhbGxlbmdlRGF0YS5pZCxcbiAgICAgICAgICAgIGNvZGU6IHBhcmFtcy5jb2RlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICoge0BzZWUgR29UcnVlTUZBQXBpI2xpc3RGYWN0b3JzfVxuICAgICAqL1xuICAgIGFzeW5jIF9saXN0RmFjdG9ycygpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAvLyB1c2UgI2dldFVzZXIgaW5zdGVhZCBvZiAjX2dldFVzZXIgYXMgdGhlIGZvcm1lciBhY3F1aXJlcyBhIGxvY2tcbiAgICAgICAgY29uc3QgeyBkYXRhOiB7IHVzZXIgfSwgZXJyb3I6IHVzZXJFcnJvciwgfSA9IGF3YWl0IHRoaXMuZ2V0VXNlcigpO1xuICAgICAgICBpZiAodXNlckVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvcjogdXNlckVycm9yIH07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIGFsbDogW10sXG4gICAgICAgICAgICBwaG9uZTogW10sXG4gICAgICAgICAgICB0b3RwOiBbXSxcbiAgICAgICAgICAgIHdlYmF1dGhuOiBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgLy8gbG9vcCBvdmVyIHRoZSBmYWN0b3JzIE9OQ0VcbiAgICAgICAgZm9yIChjb25zdCBmYWN0b3Igb2YgKF9hID0gdXNlciA9PT0gbnVsbCB8fCB1c2VyID09PSB2b2lkIDAgPyB2b2lkIDAgOiB1c2VyLmZhY3RvcnMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdKSB7XG4gICAgICAgICAgICBkYXRhLmFsbC5wdXNoKGZhY3Rvcik7XG4gICAgICAgICAgICBpZiAoZmFjdG9yLnN0YXR1cyA9PT0gJ3ZlcmlmaWVkJykge1xuICAgICAgICAgICAgICAgIDtcbiAgICAgICAgICAgICAgICBkYXRhW2ZhY3Rvci5mYWN0b3JfdHlwZV0ucHVzaChmYWN0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZXJyb3I6IG51bGwsXG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIHtAc2VlIEdvVHJ1ZU1GQUFwaSNnZXRBdXRoZW50aWNhdG9yQXNzdXJhbmNlTGV2ZWx9XG4gICAgICovXG4gICAgYXN5bmMgX2dldEF1dGhlbnRpY2F0b3JBc3N1cmFuY2VMZXZlbChqd3QpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICBpZiAoand0KSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgcGF5bG9hZCB9ID0gZGVjb2RlSldUKGp3dCk7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnRMZXZlbCA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHBheWxvYWQuYWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRMZXZlbCA9IHBheWxvYWQuYWFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgbmV4dExldmVsID0gY3VycmVudExldmVsO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyB1c2VyIH0sIGVycm9yOiB1c2VyRXJyb3IsIH0gPSBhd2FpdCB0aGlzLmdldFVzZXIoand0KTtcbiAgICAgICAgICAgICAgICBpZiAodXNlckVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvcjogdXNlckVycm9yIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB2ZXJpZmllZEZhY3RvcnMgPSAoX2IgPSAoX2EgPSB1c2VyID09PSBudWxsIHx8IHVzZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHVzZXIuZmFjdG9ycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZpbHRlcigoZmFjdG9yKSA9PiBmYWN0b3Iuc3RhdHVzID09PSAndmVyaWZpZWQnKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogW107XG4gICAgICAgICAgICAgICAgaWYgKHZlcmlmaWVkRmFjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRMZXZlbCA9ICdhYWwyJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudEF1dGhlbnRpY2F0aW9uTWV0aG9kcyA9IHBheWxvYWQuYW1yIHx8IFtdO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHsgY3VycmVudExldmVsLCBuZXh0TGV2ZWwsIGN1cnJlbnRBdXRoZW50aWNhdGlvbk1ldGhvZHMgfSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9LCBlcnJvcjogc2Vzc2lvbkVycm9yLCB9ID0gYXdhaXQgdGhpcy5nZXRTZXNzaW9uKCk7XG4gICAgICAgIGlmIChzZXNzaW9uRXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvcjogc2Vzc2lvbkVycm9yIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7IGN1cnJlbnRMZXZlbDogbnVsbCwgbmV4dExldmVsOiBudWxsLCBjdXJyZW50QXV0aGVudGljYXRpb25NZXRob2RzOiBbXSB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHBheWxvYWQgfSA9IGRlY29kZUpXVChzZXNzaW9uLmFjY2Vzc190b2tlbik7XG4gICAgICAgIGxldCBjdXJyZW50TGV2ZWwgPSBudWxsO1xuICAgICAgICBpZiAocGF5bG9hZC5hYWwpIHtcbiAgICAgICAgICAgIGN1cnJlbnRMZXZlbCA9IHBheWxvYWQuYWFsO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuZXh0TGV2ZWwgPSBjdXJyZW50TGV2ZWw7XG4gICAgICAgIGNvbnN0IHZlcmlmaWVkRmFjdG9ycyA9IChfZCA9IChfYyA9IHNlc3Npb24udXNlci5mYWN0b3JzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuZmlsdGVyKChmYWN0b3IpID0+IGZhY3Rvci5zdGF0dXMgPT09ICd2ZXJpZmllZCcpKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiBbXTtcbiAgICAgICAgaWYgKHZlcmlmaWVkRmFjdG9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBuZXh0TGV2ZWwgPSAnYWFsMic7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VycmVudEF1dGhlbnRpY2F0aW9uTWV0aG9kcyA9IHBheWxvYWQuYW1yIHx8IFtdO1xuICAgICAgICByZXR1cm4geyBkYXRhOiB7IGN1cnJlbnRMZXZlbCwgbmV4dExldmVsLCBjdXJyZW50QXV0aGVudGljYXRpb25NZXRob2RzIH0sIGVycm9yOiBudWxsIH07XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBkZXRhaWxzIGFib3V0IGFuIE9BdXRoIGF1dGhvcml6YXRpb24gcmVxdWVzdC5cbiAgICAgKiBPbmx5IHJlbGV2YW50IHdoZW4gdGhlIE9BdXRoIDIuMSBzZXJ2ZXIgaXMgZW5hYmxlZCBpbiBTdXBhYmFzZSBBdXRoLlxuICAgICAqXG4gICAgICogUmV0dXJucyBhdXRob3JpemF0aW9uIGRldGFpbHMgaW5jbHVkaW5nIGNsaWVudCBpbmZvLCBzY29wZXMsIGFuZCB1c2VyIGluZm9ybWF0aW9uLlxuICAgICAqIElmIHRoZSByZXNwb25zZSBpbmNsdWRlcyBvbmx5IGEgcmVkaXJlY3RfdXJsIGZpZWxkLCBpdCBtZWFucyBjb25zZW50IHdhcyBhbHJlYWR5IGdpdmVuIC0gdGhlIGNhbGxlclxuICAgICAqIHNob3VsZCBoYW5kbGUgdGhlIHJlZGlyZWN0IG1hbnVhbGx5IGlmIG5lZWRlZC5cbiAgICAgKi9cbiAgICBhc3luYyBfZ2V0QXV0aG9yaXphdGlvbkRldGFpbHMoYXV0aG9yaXphdGlvbklkKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSwgZXJyb3I6IHNlc3Npb25FcnJvciwgfSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvcjogc2Vzc2lvbkVycm9yIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yOiBuZXcgQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IoKSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdHRVQnLCBgJHt0aGlzLnVybH0vb2F1dGgvYXV0aG9yaXphdGlvbnMvJHthdXRob3JpemF0aW9uSWR9YCwge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIGp3dDogc2Vzc2lvbi5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIHhmb3JtOiAoZGF0YSkgPT4gKHsgZGF0YSwgZXJyb3I6IG51bGwgfSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBBcHByb3ZlcyBhbiBPQXV0aCBhdXRob3JpemF0aW9uIHJlcXVlc3QuXG4gICAgICogT25seSByZWxldmFudCB3aGVuIHRoZSBPQXV0aCAyLjEgc2VydmVyIGlzIGVuYWJsZWQgaW4gU3VwYWJhc2UgQXV0aC5cbiAgICAgKi9cbiAgICBhc3luYyBfYXBwcm92ZUF1dGhvcml6YXRpb24oYXV0aG9yaXphdGlvbklkLCBvcHRpb25zKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSwgZXJyb3I6IHNlc3Npb25FcnJvciwgfSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvcjogc2Vzc2lvbkVycm9yIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yOiBuZXcgQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IoKSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9vYXV0aC9hdXRob3JpemF0aW9ucy8ke2F1dGhvcml6YXRpb25JZH0vY29uc2VudGAsIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBqd3Q6IHNlc3Npb24uYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiB7IGFjdGlvbjogJ2FwcHJvdmUnIH0sXG4gICAgICAgICAgICAgICAgICAgIHhmb3JtOiAoZGF0YSkgPT4gKHsgZGF0YSwgZXJyb3I6IG51bGwgfSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5yZWRpcmVjdF91cmwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQXV0b21hdGljYWxseSByZWRpcmVjdCBpbiBicm93c2VyIHVubGVzcyBza2lwQnJvd3NlclJlZGlyZWN0IGlzIHRydWVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQnJvd3NlcigpICYmICEob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNraXBCcm93c2VyUmVkaXJlY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHJlc3BvbnNlLmRhdGEucmVkaXJlY3RfdXJsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZW5pZXMgYW4gT0F1dGggYXV0aG9yaXphdGlvbiByZXF1ZXN0LlxuICAgICAqIE9ubHkgcmVsZXZhbnQgd2hlbiB0aGUgT0F1dGggMi4xIHNlcnZlciBpcyBlbmFibGVkIGluIFN1cGFiYXNlIEF1dGguXG4gICAgICovXG4gICAgYXN5bmMgX2RlbnlBdXRob3JpemF0aW9uKGF1dGhvcml6YXRpb25JZCwgb3B0aW9ucykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3VzZVNlc3Npb24oYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0sIGVycm9yOiBzZXNzaW9uRXJyb3IsIH0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3I6IHNlc3Npb25FcnJvciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvcjogbmV3IEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKCkgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vb2F1dGgvYXV0aG9yaXphdGlvbnMvJHthdXRob3JpemF0aW9uSWR9L2NvbnNlbnRgLCB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgand0OiBzZXNzaW9uLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICAgICAgYm9keTogeyBhY3Rpb246ICdkZW55JyB9LFxuICAgICAgICAgICAgICAgICAgICB4Zm9ybTogKGRhdGEpID0+ICh7IGRhdGEsIGVycm9yOiBudWxsIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEF1dG9tYXRpY2FsbHkgcmVkaXJlY3QgaW4gYnJvd3NlciB1bmxlc3Mgc2tpcEJyb3dzZXJSZWRpcmVjdCBpcyB0cnVlXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0Jyb3dzZXIoKSAmJiAhKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5za2lwQnJvd3NlclJlZGlyZWN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihyZXNwb25zZS5kYXRhLnJlZGlyZWN0X3VybCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTGlzdHMgYWxsIE9BdXRoIGdyYW50cyB0aGF0IHRoZSBhdXRoZW50aWNhdGVkIHVzZXIgaGFzIGF1dGhvcml6ZWQuXG4gICAgICogT25seSByZWxldmFudCB3aGVuIHRoZSBPQXV0aCAyLjEgc2VydmVyIGlzIGVuYWJsZWQgaW4gU3VwYWJhc2UgQXV0aC5cbiAgICAgKi9cbiAgICBhc3luYyBfbGlzdE9BdXRoR3JhbnRzKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3VzZVNlc3Npb24oYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0sIGVycm9yOiBzZXNzaW9uRXJyb3IsIH0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3I6IHNlc3Npb25FcnJvciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvcjogbmV3IEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKCkgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnR0VUJywgYCR7dGhpcy51cmx9L3VzZXIvb2F1dGgvZ3JhbnRzYCwge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIGp3dDogc2Vzc2lvbi5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIHhmb3JtOiAoZGF0YSkgPT4gKHsgZGF0YSwgZXJyb3I6IG51bGwgfSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXZva2VzIGEgdXNlcidzIE9BdXRoIGdyYW50IGZvciBhIHNwZWNpZmljIGNsaWVudC5cbiAgICAgKiBPbmx5IHJlbGV2YW50IHdoZW4gdGhlIE9BdXRoIDIuMSBzZXJ2ZXIgaXMgZW5hYmxlZCBpbiBTdXBhYmFzZSBBdXRoLlxuICAgICAqL1xuICAgIGFzeW5jIF9yZXZva2VPQXV0aEdyYW50KG9wdGlvbnMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9LCBlcnJvcjogc2Vzc2lvbkVycm9yLCB9ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yOiBzZXNzaW9uRXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3I6IG5ldyBBdXRoU2Vzc2lvbk1pc3NpbmdFcnJvcigpIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnREVMRVRFJywgYCR7dGhpcy51cmx9L3VzZXIvb2F1dGgvZ3JhbnRzYCwge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIGp3dDogc2Vzc2lvbi5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiB7IGNsaWVudF9pZDogb3B0aW9ucy5jbGllbnRJZCB9LFxuICAgICAgICAgICAgICAgICAgICBub1Jlc29sdmVKc29uOiB0cnVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IHt9LCBlcnJvcjogbnVsbCB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXN5bmMgZmV0Y2hKd2soa2lkLCBqd2tzID0geyBrZXlzOiBbXSB9KSB7XG4gICAgICAgIC8vIHRyeSBmZXRjaGluZyBmcm9tIHRoZSBzdXBwbGllZCBqd2tzXG4gICAgICAgIGxldCBqd2sgPSBqd2tzLmtleXMuZmluZCgoa2V5KSA9PiBrZXkua2lkID09PSBraWQpO1xuICAgICAgICBpZiAoandrKSB7XG4gICAgICAgICAgICByZXR1cm4gandrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgIC8vIHRyeSBmZXRjaGluZyBmcm9tIGNhY2hlXG4gICAgICAgIGp3ayA9IHRoaXMuandrcy5rZXlzLmZpbmQoKGtleSkgPT4ga2V5LmtpZCA9PT0ga2lkKTtcbiAgICAgICAgLy8gandrIGV4aXN0cyBhbmQgandrcyBpc24ndCBzdGFsZVxuICAgICAgICBpZiAoandrICYmIHRoaXMuandrc19jYWNoZWRfYXQgKyBKV0tTX1RUTCA+IG5vdykge1xuICAgICAgICAgICAgcmV0dXJuIGp3aztcbiAgICAgICAgfVxuICAgICAgICAvLyBqd2sgaXNuJ3QgY2FjaGVkIGluIG1lbW9yeSBzbyB3ZSBuZWVkIHRvIGZldGNoIGl0IGZyb20gdGhlIHdlbGwta25vd24gZW5kcG9pbnRcbiAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ0dFVCcsIGAke3RoaXMudXJsfS8ud2VsbC1rbm93bi9qd2tzLmpzb25gLCB7XG4gICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGF0YS5rZXlzIHx8IGRhdGEua2V5cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuandrcyA9IGRhdGE7XG4gICAgICAgIHRoaXMuandrc19jYWNoZWRfYXQgPSBub3c7XG4gICAgICAgIC8vIEZpbmQgdGhlIHNpZ25pbmcga2V5XG4gICAgICAgIGp3ayA9IGRhdGEua2V5cy5maW5kKChrZXkpID0+IGtleS5raWQgPT09IGtpZCk7XG4gICAgICAgIGlmICghandrKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gandrO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0cyB0aGUgSldUIGNsYWltcyBwcmVzZW50IGluIHRoZSBhY2Nlc3MgdG9rZW4gYnkgZmlyc3QgdmVyaWZ5aW5nIHRoZVxuICAgICAqIEpXVCBhZ2FpbnN0IHRoZSBzZXJ2ZXIncyBKU09OIFdlYiBLZXkgU2V0IGVuZHBvaW50XG4gICAgICogYC8ud2VsbC1rbm93bi9qd2tzLmpzb25gIHdoaWNoIGlzIG9mdGVuIGNhY2hlZCwgcmVzdWx0aW5nIGluIHNpZ25pZmljYW50bHlcbiAgICAgKiBmYXN0ZXIgcmVzcG9uc2VzLiBQcmVmZXIgdGhpcyBtZXRob2Qgb3ZlciB7QGxpbmsgI2dldFVzZXJ9IHdoaWNoIGFsd2F5c1xuICAgICAqIHNlbmRzIGEgcmVxdWVzdCB0byB0aGUgQXV0aCBzZXJ2ZXIgZm9yIGVhY2ggSldULlxuICAgICAqXG4gICAgICogSWYgdGhlIHByb2plY3QgaXMgbm90IHVzaW5nIGFuIGFzeW1tZXRyaWMgSldUIHNpZ25pbmcga2V5IChsaWtlIEVDQyBvclxuICAgICAqIFJTQSkgaXQgYWx3YXlzIHNlbmRzIGEgcmVxdWVzdCB0byB0aGUgQXV0aCBzZXJ2ZXIgKHNpbWlsYXIgdG8ge0BsaW5rXG4gICAgICogI2dldFVzZXJ9KSB0byB2ZXJpZnkgdGhlIEpXVC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBqd3QgQW4gb3B0aW9uYWwgc3BlY2lmaWMgSldUIHlvdSB3aXNoIHRvIHZlcmlmeSwgbm90IHRoZSBvbmUgeW91XG4gICAgICogICAgICAgICAgICBjYW4gb2J0YWluIGZyb20ge0BsaW5rICNnZXRTZXNzaW9ufS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBWYXJpb3VzIGFkZGl0aW9uYWwgb3B0aW9ucyB0aGF0IGFsbG93IHlvdSB0byBjdXN0b21pemUgdGhlXG4gICAgICogICAgICAgICAgICAgICAgYmVoYXZpb3Igb2YgdGhpcyBtZXRob2QuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgQXV0aFxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAtIFBhcnNlcyB0aGUgdXNlcidzIFthY2Nlc3MgdG9rZW5dKC9kb2NzL2d1aWRlcy9hdXRoL3Nlc3Npb25zI2FjY2Vzcy10b2tlbi1qd3QtY2xhaW1zKSBhcyBhIFtKU09OIFdlYiBUb2tlbiAoSldUKV0oL2RvY3MvZ3VpZGVzL2F1dGgvand0cykgYW5kIHJldHVybnMgaXRzIGNvbXBvbmVudHMgaWYgdmFsaWQgYW5kIG5vdCBleHBpcmVkLlxuICAgICAqIC0gSWYgeW91ciBwcm9qZWN0IGlzIHVzaW5nIGFzeW1tZXRyaWMgSldUIHNpZ25pbmcga2V5cywgdGhlbiB0aGUgdmVyaWZpY2F0aW9uIGlzIGRvbmUgbG9jYWxseSB1c3VhbGx5IHdpdGhvdXQgYSBuZXR3b3JrIHJlcXVlc3QgdXNpbmcgdGhlIFtXZWJDcnlwdG8gQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViX0NyeXB0b19BUEkpLlxuICAgICAqIC0gQSBuZXR3b3JrIHJlcXVlc3QgaXMgc2VudCB0byB5b3VyIHByb2plY3QncyBKV1Qgc2lnbmluZyBrZXkgZGlzY292ZXJ5IGVuZHBvaW50IGBodHRwczovL3Byb2plY3QtaWQuc3VwYWJhc2UuY28vYXV0aC92MS8ud2VsbC1rbm93bi9qd2tzLmpzb25gLCB3aGljaCBpcyBjYWNoZWQgbG9jYWxseS4gSWYgeW91ciBlbnZpcm9ubWVudCBpcyBlcGhlbWVyYWwsIHN1Y2ggYXMgYSBMYW1iZGEgZnVuY3Rpb24gdGhhdCBpcyBkZXN0cm95ZWQgYWZ0ZXIgZXZlcnkgcmVxdWVzdCwgYSBuZXR3b3JrIHJlcXVlc3Qgd2lsbCBiZSBzZW50IGZvciBlYWNoIG5ldyBpbnZvY2F0aW9uLiBTdXBhYmFzZSBwcm92aWRlcyBhIG5ldHdvcmstZWRnZSBjYWNoZSBwcm92aWRpbmcgZmFzdCByZXNwb25zZXMgZm9yIHRoZXNlIHNpdHVhdGlvbnMuXG4gICAgICogLSBJZiB0aGUgdXNlcidzIGFjY2VzcyB0b2tlbiBpcyBhYm91dCB0byBleHBpcmUgd2hlbiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSB1c2VyJ3Mgc2Vzc2lvbiB3aWxsIGZpcnN0IGJlIHJlZnJlc2hlZCBiZWZvcmUgdmFsaWRhdGluZyB0aGUgSldULlxuICAgICAqIC0gSWYgeW91ciBwcm9qZWN0IGlzIHVzaW5nIGEgc3ltbWV0cmljIHNlY3JldCB0byBzaWduIHRoZSBKV1QsIGl0IGFsd2F5cyBzZW5kcyBhIHJlcXVlc3Qgc2ltaWxhciB0byBgZ2V0VXNlcigpYCB0byB2YWxpZGF0ZSB0aGUgSldUIGF0IHRoZSBzZXJ2ZXIgYmVmb3JlIHJldHVybmluZyB0aGUgZGVjb2RlZCB0b2tlbi4gVGhpcyBpcyBhbHNvIHVzZWQgaWYgdGhlIFdlYkNyeXB0byBBUEkgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgZW52aXJvbm1lbnQuIE1ha2Ugc3VyZSB5b3UgcG9seWZpbGwgaXQgaW4gc3VjaCBzaXR1YXRpb25zLlxuICAgICAqIC0gVGhlIHJldHVybmVkIGNsYWltcyBjYW4gYmUgY3VzdG9taXplZCBwZXIgcHJvamVjdCB1c2luZyB0aGUgW0N1c3RvbSBBY2Nlc3MgVG9rZW4gSG9va10oL2RvY3MvZ3VpZGVzL2F1dGgvYXV0aC1ob29rcy9jdXN0b20tYWNjZXNzLXRva2VuLWhvb2spLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgR2V0IEpXVCBjbGFpbXMsIGhlYWRlciBhbmQgc2lnbmF0dXJlXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5hdXRoLmdldENsYWltcygpXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVJlc3BvbnNlIEdldCBKV1QgY2xhaW1zLCBoZWFkZXIgYW5kIHNpZ25hdHVyZVxuICAgICAqIGBgYGpzb25cbiAgICAgKiB7XG4gICAgICogICBcImRhdGFcIjoge1xuICAgICAqICAgICBcImNsYWltc1wiOiB7XG4gICAgICogICAgICAgXCJhYWxcIjogXCJhYWwxXCIsXG4gICAgICogICAgICAgXCJhbXJcIjogW3tcbiAgICAgKiAgICAgICAgIFwibWV0aG9kXCI6IFwiZW1haWxcIixcbiAgICAgKiAgICAgICAgIFwidGltZXN0YW1wXCI6IDE3MTU3NjYwMDBcbiAgICAgKiAgICAgICB9XSxcbiAgICAgKiAgICAgICBcImFwcF9tZXRhZGF0YVwiOiB7fSxcbiAgICAgKiAgICAgICBcImF1ZFwiOiBcImF1dGhlbnRpY2F0ZWRcIixcbiAgICAgKiAgICAgICBcImVtYWlsXCI6IFwiZXhhbXBsZUBlbWFpbC5jb21cIixcbiAgICAgKiAgICAgICBcImV4cFwiOiAxNzE1NzY5NjAwLFxuICAgICAqICAgICAgIFwiaWF0XCI6IDE3MTU3NjYwMDAsXG4gICAgICogICAgICAgXCJpc19hbm9ueW1vdXNcIjogZmFsc2UsXG4gICAgICogICAgICAgXCJpc3NcIjogXCJodHRwczovL3Byb2plY3QtaWQuc3VwYWJhc2UuY28vYXV0aC92MVwiLFxuICAgICAqICAgICAgIFwicGhvbmVcIjogXCIrMTMzMzQ0NDU1NTVcIixcbiAgICAgKiAgICAgICBcInJvbGVcIjogXCJhdXRoZW50aWNhdGVkXCIsXG4gICAgICogICAgICAgXCJzZXNzaW9uX2lkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCIsXG4gICAgICogICAgICAgXCJzdWJcIjogXCIxMTExMTExMS0xMTExLTExMTEtMTExMS0xMTExMTExMTExMTFcIixcbiAgICAgKiAgICAgICBcInVzZXJfbWV0YWRhdGFcIjoge31cbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgXCJoZWFkZXJcIjoge1xuICAgICAqICAgICAgIFwiYWxnXCI6IFwiUlMyNTZcIixcbiAgICAgKiAgICAgICBcInR5cFwiOiBcIkpXVFwiLFxuICAgICAqICAgICAgIFwia2lkXCI6IFwiMTExMTExMTEtMTExMS0xMTExLTExMTEtMTExMTExMTExMTExXCJcbiAgICAgKiAgICAgfSxcbiAgICAgKiAgICAgXCJzaWduYXR1cmVcIjogWy8qKiBVaW50OEFycmF5ICpcXC9dLFxuICAgICAqICAgfSxcbiAgICAgKiAgIFwiZXJyb3JcIjogbnVsbFxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBhc3luYyBnZXRDbGFpbXMoand0LCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCB0b2tlbiA9IGp3dDtcbiAgICAgICAgICAgIGlmICghdG9rZW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCB0aGlzLmdldFNlc3Npb24oKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgfHwgIWRhdGEuc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRva2VuID0gZGF0YS5zZXNzaW9uLmFjY2Vzc190b2tlbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgaGVhZGVyLCBwYXlsb2FkLCBzaWduYXR1cmUsIHJhdzogeyBoZWFkZXI6IHJhd0hlYWRlciwgcGF5bG9hZDogcmF3UGF5bG9hZCB9LCB9ID0gZGVjb2RlSldUKHRva2VuKTtcbiAgICAgICAgICAgIGlmICghKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hbGxvd0V4cGlyZWQpKSB7XG4gICAgICAgICAgICAgICAgLy8gUmVqZWN0IGV4cGlyZWQgSldUcyBzaG91bGQgb25seSBoYXBwZW4gaWYgand0IGFyZ3VtZW50IHdhcyBwYXNzZWRcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZUV4cChwYXlsb2FkLmV4cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzaWduaW5nS2V5ID0gIWhlYWRlci5hbGcgfHxcbiAgICAgICAgICAgICAgICBoZWFkZXIuYWxnLnN0YXJ0c1dpdGgoJ0hTJykgfHxcbiAgICAgICAgICAgICAgICAhaGVhZGVyLmtpZCB8fFxuICAgICAgICAgICAgICAgICEoJ2NyeXB0bycgaW4gZ2xvYmFsVGhpcyAmJiAnc3VidGxlJyBpbiBnbG9iYWxUaGlzLmNyeXB0bylcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IGF3YWl0IHRoaXMuZmV0Y2hKd2soaGVhZGVyLmtpZCwgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5rZXlzKSA/IHsga2V5czogb3B0aW9ucy5rZXlzIH0gOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuandrcyk7XG4gICAgICAgICAgICAvLyBJZiBzeW1tZXRyaWMgYWxnb3JpdGhtIG9yIFdlYkNyeXB0byBBUEkgaXMgdW5hdmFpbGFibGUsIGZhbGxiYWNrIHRvIGdldFVzZXIoKVxuICAgICAgICAgICAgaWYgKCFzaWduaW5nS2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBlcnJvciB9ID0gYXdhaXQgdGhpcy5nZXRVc2VyKHRva2VuKTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGdldFVzZXIgc3VjY2VlZHMgc28gdGhlIGNsYWltcyBpbiB0aGUgSldUIGNhbiBiZSB0cnVzdGVkXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2xhaW1zOiBwYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogbnVsbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWxnb3JpdGhtID0gZ2V0QWxnb3JpdGhtKGhlYWRlci5hbGcpO1xuICAgICAgICAgICAgLy8gQ29udmVydCBKV0sgdG8gQ3J5cHRvS2V5XG4gICAgICAgICAgICBjb25zdCBwdWJsaWNLZXkgPSBhd2FpdCBjcnlwdG8uc3VidGxlLmltcG9ydEtleSgnandrJywgc2lnbmluZ0tleSwgYWxnb3JpdGhtLCB0cnVlLCBbXG4gICAgICAgICAgICAgICAgJ3ZlcmlmeScsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIC8vIFZlcmlmeSB0aGUgc2lnbmF0dXJlXG4gICAgICAgICAgICBjb25zdCBpc1ZhbGlkID0gYXdhaXQgY3J5cHRvLnN1YnRsZS52ZXJpZnkoYWxnb3JpdGhtLCBwdWJsaWNLZXksIHNpZ25hdHVyZSwgc3RyaW5nVG9VaW50OEFycmF5KGAke3Jhd0hlYWRlcn0uJHtyYXdQYXlsb2FkfWApKTtcbiAgICAgICAgICAgIGlmICghaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBBdXRoSW52YWxpZEp3dEVycm9yKCdJbnZhbGlkIEpXVCBzaWduYXR1cmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHZlcmlmaWNhdGlvbiBzdWNjZWVkcywgZGVjb2RlIGFuZCByZXR1cm4gY2xhaW1zXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgY2xhaW1zOiBwYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXIsXG4gICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyAtLS0gUGFzc2tleSBNZXRob2RzIC0tLVxuICAgIC8qKlxuICAgICAqIFNpZ24gaW4gd2l0aCBhIHBhc3NrZXkuIEhhbmRsZXMgdGhlIGZ1bGwgV2ViQXV0aG4gY2VyZW1vbnk6XG4gICAgICogMS4gRmV0Y2hlcyBhdXRoZW50aWNhdGlvbiBjaGFsbGVuZ2UgZnJvbSBzZXJ2ZXJcbiAgICAgKiAyLiBQcm9tcHRzIHVzZXIgdmlhIG5hdmlnYXRvci5jcmVkZW50aWFscy5nZXQoKVxuICAgICAqIDMuIFZlcmlmaWVzIGNyZWRlbnRpYWwgd2l0aCBzZXJ2ZXIgYW5kIGNyZWF0ZXMgc2Vzc2lvblxuICAgICAqXG4gICAgICogUmVxdWlyZXMgYGF1dGguZXhwZXJpbWVudGFsLnBhc3NrZXk6IHRydWVgLlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IEF1dGhcbiAgICAgKi9cbiAgICBhc3luYyBzaWduSW5XaXRoUGFzc2tleShjcmVkZW50aWFscykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgYXNzZXJ0UGFzc2tleUV4cGVyaW1lbnRhbEVuYWJsZWQodGhpcy5leHBlcmltZW50YWwpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKCFicm93c2VyU3VwcG9ydHNXZWJBdXRobigpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgQXV0aFVua25vd25FcnJvcignQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFdlYkF1dGhuJywgbnVsbCksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAxLiBHZXQgY2hhbGxlbmdlIG9wdGlvbnMgZnJvbSBzZXJ2ZXJcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogb3B0aW9ucywgZXJyb3I6IG9wdGlvbnNFcnJvciB9ID0gYXdhaXQgdGhpcy5fc3RhcnRQYXNza2V5QXV0aGVudGljYXRpb24oe1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHsgY2FwdGNoYVRva2VuOiAoX2EgPSBjcmVkZW50aWFscyA9PT0gbnVsbCB8fCBjcmVkZW50aWFscyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3JlZGVudGlhbHMub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhcHRjaGFUb2tlbiB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAob3B0aW9uc0Vycm9yIHx8ICFvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yOiBvcHRpb25zRXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAyLiBEZXNlcmlhbGl6ZSBhbmQgcHJvbXB0IHVzZXIgdmlhIGJyb3dzZXIgV2ViQXV0aG4gQVBJXG4gICAgICAgICAgICBjb25zdCBwdWJsaWNLZXlPcHRpb25zID0gZGVzZXJpYWxpemVDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMob3B0aW9ucy5vcHRpb25zKTtcbiAgICAgICAgICAgIGNvbnN0IHNpZ25hbCA9IChfYyA9IChfYiA9IGNyZWRlbnRpYWxzID09PSBudWxsIHx8IGNyZWRlbnRpYWxzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjcmVkZW50aWFscy5vcHRpb25zKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc2lnbmFsKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiB3ZWJBdXRobkFib3J0U2VydmljZS5jcmVhdGVOZXdBYm9ydFNpZ25hbCgpO1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhOiBjcmVkZW50aWFsLCBlcnJvcjogY3JlZGVudGlhbEVycm9yIH0gPSBhd2FpdCBnZXRDcmVkZW50aWFsKHtcbiAgICAgICAgICAgICAgICBwdWJsaWNLZXk6IHB1YmxpY0tleU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2lnbmFsLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY3JlZGVudGlhbEVycm9yIHx8ICFjcmVkZW50aWFsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBjcmVkZW50aWFsRXJyb3IgIT09IG51bGwgJiYgY3JlZGVudGlhbEVycm9yICE9PSB2b2lkIDAgPyBjcmVkZW50aWFsRXJyb3IgOiBuZXcgQXV0aFVua25vd25FcnJvcignV2ViQXV0aG4gY2VyZW1vbnkgZmFpbGVkJywgbnVsbCksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyAzLiBTZXJpYWxpemUgYW5kIHZlcmlmeSB3aXRoIHNlcnZlclxuICAgICAgICAgICAgY29uc3Qgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZUNyZWRlbnRpYWxSZXF1ZXN0UmVzcG9uc2UoY3JlZGVudGlhbCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmVyaWZ5UGFzc2tleUF1dGhlbnRpY2F0aW9uKHtcbiAgICAgICAgICAgICAgICBjaGFsbGVuZ2VJZDogb3B0aW9ucy5jaGFsbGVuZ2VfaWQsXG4gICAgICAgICAgICAgICAgY3JlZGVudGlhbDogc2VyaWFsaXplZCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIGEgcGFzc2tleSBmb3IgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRlZCB1c2VyLiBIYW5kbGVzIHRoZSBmdWxsIFdlYkF1dGhuIGNlcmVtb255OlxuICAgICAqIDEuIEZldGNoZXMgcmVnaXN0cmF0aW9uIGNoYWxsZW5nZSBmcm9tIHNlcnZlclxuICAgICAqIDIuIFByb21wdHMgdXNlciB2aWEgbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmNyZWF0ZSgpXG4gICAgICogMy4gVmVyaWZpZXMgY3JlZGVudGlhbCB3aXRoIHNlcnZlclxuICAgICAqXG4gICAgICogUmVxdWlyZXMgYW4gYWN0aXZlIHNlc3Npb24uIFJlcXVpcmVzIGBhdXRoLmV4cGVyaW1lbnRhbC5wYXNza2V5OiB0cnVlYC5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBBdXRoXG4gICAgICovXG4gICAgYXN5bmMgcmVnaXN0ZXJQYXNza2V5KGNyZWRlbnRpYWxzKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGFzc2VydFBhc3NrZXlFeHBlcmltZW50YWxFbmFibGVkKHRoaXMuZXhwZXJpbWVudGFsKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghYnJvd3NlclN1cHBvcnRzV2ViQXV0aG4oKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEF1dGhVbmtub3duRXJyb3IoJ0Jyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCBXZWJBdXRobicsIG51bGwpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gMS4gR2V0IGNoYWxsZW5nZSBvcHRpb25zIGZyb20gc2VydmVyXG4gICAgICAgICAgICBjb25zdCB7IGRhdGE6IG9wdGlvbnMsIGVycm9yOiBvcHRpb25zRXJyb3IgfSA9IGF3YWl0IHRoaXMuX3N0YXJ0UGFzc2tleVJlZ2lzdHJhdGlvbigpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnNFcnJvciB8fCAhb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvcjogb3B0aW9uc0Vycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gMi4gRGVzZXJpYWxpemUgYW5kIHByb21wdCB1c2VyIHZpYSBicm93c2VyIFdlYkF1dGhuIEFQSVxuICAgICAgICAgICAgY29uc3QgcHVibGljS2V5T3B0aW9ucyA9IGRlc2VyaWFsaXplQ3JlZGVudGlhbENyZWF0aW9uT3B0aW9ucyhvcHRpb25zLm9wdGlvbnMpO1xuICAgICAgICAgICAgY29uc3Qgc2lnbmFsID0gKF9iID0gKF9hID0gY3JlZGVudGlhbHMgPT09IG51bGwgfHwgY3JlZGVudGlhbHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNyZWRlbnRpYWxzLm9wdGlvbnMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zaWduYWwpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHdlYkF1dGhuQWJvcnRTZXJ2aWNlLmNyZWF0ZU5ld0Fib3J0U2lnbmFsKCk7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGE6IGNyZWRlbnRpYWwsIGVycm9yOiBjcmVkZW50aWFsRXJyb3IgfSA9IGF3YWl0IGNyZWF0ZUNyZWRlbnRpYWwoe1xuICAgICAgICAgICAgICAgIHB1YmxpY0tleTogcHVibGljS2V5T3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChjcmVkZW50aWFsRXJyb3IgfHwgIWNyZWRlbnRpYWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGNyZWRlbnRpYWxFcnJvciAhPT0gbnVsbCAmJiBjcmVkZW50aWFsRXJyb3IgIT09IHZvaWQgMCA/IGNyZWRlbnRpYWxFcnJvciA6IG5ldyBBdXRoVW5rbm93bkVycm9yKCdXZWJBdXRobiBjZXJlbW9ueSBmYWlsZWQnLCBudWxsKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIDMuIFNlcmlhbGl6ZSBhbmQgdmVyaWZ5IHdpdGggc2VydmVyXG4gICAgICAgICAgICBjb25zdCBzZXJpYWxpemVkID0gc2VyaWFsaXplQ3JlZGVudGlhbENyZWF0aW9uUmVzcG9uc2UoY3JlZGVudGlhbCk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmVyaWZ5UGFzc2tleVJlZ2lzdHJhdGlvbih7XG4gICAgICAgICAgICAgICAgY2hhbGxlbmdlSWQ6IG9wdGlvbnMuY2hhbGxlbmdlX2lkLFxuICAgICAgICAgICAgICAgIGNyZWRlbnRpYWw6IHNlcmlhbGl6ZWQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTdGFydCBwYXNza2V5IHJlZ2lzdHJhdGlvbiBmb3IgdGhlIGN1cnJlbnQgYXV0aGVudGljYXRlZCB1c2VyLlxuICAgICAqIFJldHVybnMgV2ViQXV0aG4gY3JlZGVudGlhbCBjcmVhdGlvbiBvcHRpb25zIHRvIHBhc3MgdG8gbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmNyZWF0ZSgpLlxuICAgICAqL1xuICAgIGFzeW5jIF9zdGFydFBhc3NrZXlSZWdpc3RyYXRpb24oKSB7XG4gICAgICAgIGFzc2VydFBhc3NrZXlFeHBlcmltZW50YWxFbmFibGVkKHRoaXMuZXhwZXJpbWVudGFsKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9LCBlcnJvcjogc2Vzc2lvbkVycm9yLCB9ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yOiBzZXNzaW9uRXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3I6IG5ldyBBdXRoU2Vzc2lvbk1pc3NpbmdFcnJvcigpIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9wYXNza2V5cy9yZWdpc3RyYXRpb24vb3B0aW9uc2AsIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBqd3Q6IHNlc3Npb24uYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiB7fSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YSwgZXJyb3I6IG51bGwgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBWZXJpZnkgcGFzc2tleSByZWdpc3RyYXRpb24gd2l0aCB0aGUgY3JlZGVudGlhbCByZXNwb25zZS5cbiAgICAgKiBUaGUgY3JlZGVudGlhbFJlc3BvbnNlIHNob3VsZCBiZSB0aGUgc2VyaWFsaXplZCBvdXRwdXQgb2YgbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmNyZWF0ZSgpLlxuICAgICAqL1xuICAgIGFzeW5jIF92ZXJpZnlQYXNza2V5UmVnaXN0cmF0aW9uKHBhcmFtcykge1xuICAgICAgICBhc3NlcnRQYXNza2V5RXhwZXJpbWVudGFsRW5hYmxlZCh0aGlzLmV4cGVyaW1lbnRhbCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fdXNlU2Vzc2lvbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhOiB7IHNlc3Npb24gfSwgZXJyb3I6IHNlc3Npb25FcnJvciwgfSA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICBpZiAoc2Vzc2lvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvcjogc2Vzc2lvbkVycm9yIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yOiBuZXcgQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IoKSB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vcGFzc2tleXMvcmVnaXN0cmF0aW9uL3ZlcmlmeWAsIHtcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgICAgICBqd3Q6IHNlc3Npb24uYWNjZXNzX3Rva2VuLFxuICAgICAgICAgICAgICAgICAgICBib2R5OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFsbGVuZ2VfaWQ6IHBhcmFtcy5jaGFsbGVuZ2VJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWw6IHBhcmFtcy5jcmVkZW50aWFsLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhLCBlcnJvcjogbnVsbCB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN0YXJ0IHBhc3NrZXkgYXV0aGVudGljYXRpb24uXG4gICAgICogUmV0dXJucyBXZWJBdXRobiBjcmVkZW50aWFsIHJlcXVlc3Qgb3B0aW9ucyB0byBwYXNzIHRvIG5hdmlnYXRvci5jcmVkZW50aWFscy5nZXQoKS5cbiAgICAgKi9cbiAgICBhc3luYyBfc3RhcnRQYXNza2V5QXV0aGVudGljYXRpb24ocGFyYW1zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgYXNzZXJ0UGFzc2tleUV4cGVyaW1lbnRhbEVuYWJsZWQodGhpcy5leHBlcmltZW50YWwpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgX3JlcXVlc3QodGhpcy5mZXRjaCwgJ1BPU1QnLCBgJHt0aGlzLnVybH0vcGFzc2tleXMvYXV0aGVudGljYXRpb24vb3B0aW9uc2AsIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgYm9keToge1xuICAgICAgICAgICAgICAgICAgICBnb3RydWVfbWV0YV9zZWN1cml0eTogeyBjYXB0Y2hhX3Rva2VuOiAoX2EgPSBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMub3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhcHRjaGFUb2tlbiB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhLCBlcnJvcjogbnVsbCB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBWZXJpZnkgcGFzc2tleSBhdXRoZW50aWNhdGlvbiBhbmQgY3JlYXRlIGEgc2Vzc2lvbi5cbiAgICAgKiBUaGUgY3JlZGVudGlhbCBzaG91bGQgYmUgdGhlIHNlcmlhbGl6ZWQgb3V0cHV0IG9mIG5hdmlnYXRvci5jcmVkZW50aWFscy5nZXQoKS5cbiAgICAgKi9cbiAgICBhc3luYyBfdmVyaWZ5UGFzc2tleUF1dGhlbnRpY2F0aW9uKHBhcmFtcykge1xuICAgICAgICBhc3NlcnRQYXNza2V5RXhwZXJpbWVudGFsRW5hYmxlZCh0aGlzLmV4cGVyaW1lbnRhbCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnUE9TVCcsIGAke3RoaXMudXJsfS9wYXNza2V5cy9hdXRoZW50aWNhdGlvbi92ZXJpZnlgLCB7XG4gICAgICAgICAgICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIGJvZHk6IHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbGxlbmdlX2lkOiBwYXJhbXMuY2hhbGxlbmdlSWQsXG4gICAgICAgICAgICAgICAgICAgIGNyZWRlbnRpYWw6IHBhcmFtcy5jcmVkZW50aWFsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgeGZvcm06IF9zZXNzaW9uUmVzcG9uc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhLnNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9zYXZlU2Vzc2lvbihkYXRhLnNlc3Npb24pO1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX25vdGlmeUFsbFN1YnNjcmliZXJzKCdTSUdORURfSU4nLCBkYXRhLnNlc3Npb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGEsIGVycm9yOiBudWxsIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIExpc3QgYWxsIHBhc3NrZXlzIGZvciB0aGUgY3VycmVudCB1c2VyLlxuICAgICAqL1xuICAgIGFzeW5jIF9saXN0UGFzc2tleXMoKSB7XG4gICAgICAgIGFzc2VydFBhc3NrZXlFeHBlcmltZW50YWxFbmFibGVkKHRoaXMuZXhwZXJpbWVudGFsKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9LCBlcnJvcjogc2Vzc2lvbkVycm9yLCB9ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yOiBzZXNzaW9uRXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3I6IG5ldyBBdXRoU2Vzc2lvbk1pc3NpbmdFcnJvcigpIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnR0VUJywgYCR7dGhpcy51cmx9L3Bhc3NrZXlzYCwge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIGp3dDogc2Vzc2lvbi5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIHhmb3JtOiAoZGF0YSkgPT4gKHsgZGF0YSwgZXJyb3I6IG51bGwgfSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGEsIGVycm9yOiBudWxsIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlIGEgcGFzc2tleS5cbiAgICAgKi9cbiAgICBhc3luYyBfdXBkYXRlUGFzc2tleShwYXJhbXMpIHtcbiAgICAgICAgYXNzZXJ0UGFzc2tleUV4cGVyaW1lbnRhbEVuYWJsZWQodGhpcy5leHBlcmltZW50YWwpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3VzZVNlc3Npb24oYXN5bmMgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogeyBzZXNzaW9uIH0sIGVycm9yOiBzZXNzaW9uRXJyb3IsIH0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgaWYgKHNlc3Npb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3I6IHNlc3Npb25FcnJvciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFzZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvcjogbmV3IEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKCkgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IF9yZXF1ZXN0KHRoaXMuZmV0Y2gsICdQQVRDSCcsIGAke3RoaXMudXJsfS9wYXNza2V5cy8ke3BhcmFtcy5wYXNza2V5SWR9YCwge1xuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgICAgIGp3dDogc2Vzc2lvbi5hY2Nlc3NfdG9rZW4sXG4gICAgICAgICAgICAgICAgICAgIGJvZHk6IHsgZnJpZW5kbHlfbmFtZTogcGFyYW1zLmZyaWVuZGx5TmFtZSB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhLCBlcnJvcjogbnVsbCB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKGlzQXV0aEVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9yZXR1cm5SZXN1bHQoeyBkYXRhOiBudWxsLCBlcnJvciB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERlbGV0ZSBhIHBhc3NrZXkuXG4gICAgICovXG4gICAgYXN5bmMgX2RlbGV0ZVBhc3NrZXkocGFyYW1zKSB7XG4gICAgICAgIGFzc2VydFBhc3NrZXlFeHBlcmltZW50YWxFbmFibGVkKHRoaXMuZXhwZXJpbWVudGFsKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl91c2VTZXNzaW9uKGFzeW5jIChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGE6IHsgc2Vzc2lvbiB9LCBlcnJvcjogc2Vzc2lvbkVycm9yLCB9ID0gcmVzdWx0O1xuICAgICAgICAgICAgICAgIGlmIChzZXNzaW9uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yOiBzZXNzaW9uRXJyb3IgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3I6IG5ldyBBdXRoU2Vzc2lvbk1pc3NpbmdFcnJvcigpIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCBfcmVxdWVzdCh0aGlzLmZldGNoLCAnREVMRVRFJywgYCR7dGhpcy51cmx9L3Bhc3NrZXlzLyR7cGFyYW1zLnBhc3NrZXlJZH1gLCB7XG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgand0OiBzZXNzaW9uLmFjY2Vzc190b2tlbixcbiAgICAgICAgICAgICAgICAgICAgbm9SZXNvbHZlSnNvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3JldHVyblJlc3VsdCh7IGRhdGE6IG51bGwsIGVycm9yIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3I6IG51bGwgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fcmV0dXJuUmVzdWx0KHsgZGF0YTogbnVsbCwgZXJyb3IgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbn1cbkdvVHJ1ZUNsaWVudC5uZXh0SW5zdGFuY2VJRCA9IHt9O1xuZXhwb3J0IGRlZmF1bHQgR29UcnVlQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9R29UcnVlQ2xpZW50LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueClient.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/index.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/index.js ***!
|
||
\*************************************************************/
|
||
/***/ ((__unused_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 */ AuthAdminApi: () => (/* reexport safe */ _AuthAdminApi__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ AuthApiError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthApiError),\n/* harmony export */ AuthClient: () => (/* reexport safe */ _AuthClient__WEBPACK_IMPORTED_MODULE_3__[\"default\"]),\n/* harmony export */ AuthError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthError),\n/* harmony export */ AuthImplicitGrantRedirectError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthImplicitGrantRedirectError),\n/* harmony export */ AuthInvalidCredentialsError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthInvalidCredentialsError),\n/* harmony export */ AuthInvalidJwtError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthInvalidJwtError),\n/* harmony export */ AuthInvalidTokenResponseError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthInvalidTokenResponseError),\n/* harmony export */ AuthPKCECodeVerifierMissingError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthPKCECodeVerifierMissingError),\n/* harmony export */ AuthPKCEGrantCodeExchangeError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthPKCEGrantCodeExchangeError),\n/* harmony export */ AuthRetryableFetchError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthRetryableFetchError),\n/* harmony export */ AuthSessionMissingError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthSessionMissingError),\n/* harmony export */ AuthUnknownError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthUnknownError),\n/* harmony export */ AuthWeakPasswordError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.AuthWeakPasswordError),\n/* harmony export */ CustomAuthError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.CustomAuthError),\n/* harmony export */ GoTrueAdminApi: () => (/* reexport safe */ _GoTrueAdminApi__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ GoTrueClient: () => (/* reexport safe */ _GoTrueClient__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ NavigatorLockAcquireTimeoutError: () => (/* reexport safe */ _lib_locks__WEBPACK_IMPORTED_MODULE_6__.NavigatorLockAcquireTimeoutError),\n/* harmony export */ SIGN_OUT_SCOPES: () => (/* reexport safe */ _lib_types__WEBPACK_IMPORTED_MODULE_4__.SIGN_OUT_SCOPES),\n/* harmony export */ isAuthApiError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.isAuthApiError),\n/* harmony export */ isAuthError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.isAuthError),\n/* harmony export */ isAuthImplicitGrantRedirectError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.isAuthImplicitGrantRedirectError),\n/* harmony export */ isAuthPKCECodeVerifierMissingError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.isAuthPKCECodeVerifierMissingError),\n/* harmony export */ isAuthRetryableFetchError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.isAuthRetryableFetchError),\n/* harmony export */ isAuthSessionMissingError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.isAuthSessionMissingError),\n/* harmony export */ isAuthWeakPasswordError: () => (/* reexport safe */ _lib_errors__WEBPACK_IMPORTED_MODULE_5__.isAuthWeakPasswordError),\n/* harmony export */ lockInternals: () => (/* reexport safe */ _lib_locks__WEBPACK_IMPORTED_MODULE_6__.internals),\n/* harmony export */ navigatorLock: () => (/* reexport safe */ _lib_locks__WEBPACK_IMPORTED_MODULE_6__.navigatorLock),\n/* harmony export */ processLock: () => (/* reexport safe */ _lib_locks__WEBPACK_IMPORTED_MODULE_6__.processLock)\n/* harmony export */ });\n/* harmony import */ var _GoTrueAdminApi__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./GoTrueAdminApi */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueAdminApi.js\");\n/* harmony import */ var _GoTrueClient__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./GoTrueClient */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/GoTrueClient.js\");\n/* harmony import */ var _AuthAdminApi__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./AuthAdminApi */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/AuthAdminApi.js\");\n/* harmony import */ var _AuthClient__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./AuthClient */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/AuthClient.js\");\n/* harmony import */ var _lib_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/types */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/types.js\");\n/* harmony import */ var _lib_errors__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/errors */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/errors.js\");\n/* harmony import */ var _lib_locks__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/locks */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/locks.js\");\n\n\n\n\n\n\n\n\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9pbmRleC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBOEM7QUFDSjtBQUNBO0FBQ0o7QUFDNEI7QUFDdEM7QUFDQztBQUMyRjtBQUN4SCIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgR29UcnVlQWRtaW5BcGkgZnJvbSAnLi9Hb1RydWVBZG1pbkFwaSc7XG5pbXBvcnQgR29UcnVlQ2xpZW50IGZyb20gJy4vR29UcnVlQ2xpZW50JztcbmltcG9ydCBBdXRoQWRtaW5BcGkgZnJvbSAnLi9BdXRoQWRtaW5BcGknO1xuaW1wb3J0IEF1dGhDbGllbnQgZnJvbSAnLi9BdXRoQ2xpZW50JztcbmV4cG9ydCB7IEdvVHJ1ZUFkbWluQXBpLCBHb1RydWVDbGllbnQsIEF1dGhBZG1pbkFwaSwgQXV0aENsaWVudCB9O1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZXJyb3JzJztcbmV4cG9ydCB7IG5hdmlnYXRvckxvY2ssIE5hdmlnYXRvckxvY2tBY3F1aXJlVGltZW91dEVycm9yLCBpbnRlcm5hbHMgYXMgbG9ja0ludGVybmFscywgcHJvY2Vzc0xvY2ssIH0gZnJvbSAnLi9saWIvbG9ja3MnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/base64url.js":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/lib/base64url.js ***!
|
||
\*********************************************************************/
|
||
/***/ ((__unused_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 */ base64UrlToUint8Array: () => (/* binding */ base64UrlToUint8Array),\n/* harmony export */ byteFromBase64URL: () => (/* binding */ byteFromBase64URL),\n/* harmony export */ byteToBase64URL: () => (/* binding */ byteToBase64URL),\n/* harmony export */ bytesToBase64URL: () => (/* binding */ bytesToBase64URL),\n/* harmony export */ codepointToUTF8: () => (/* binding */ codepointToUTF8),\n/* harmony export */ stringFromBase64URL: () => (/* binding */ stringFromBase64URL),\n/* harmony export */ stringFromUTF8: () => (/* binding */ stringFromUTF8),\n/* harmony export */ stringToBase64URL: () => (/* binding */ stringToBase64URL),\n/* harmony export */ stringToUTF8: () => (/* binding */ stringToUTF8),\n/* harmony export */ stringToUint8Array: () => (/* binding */ stringToUint8Array)\n/* harmony export */ });\n/**\n * Avoid modifying this file. It's part of\n * https://github.com/supabase-community/base64url-js. Submit all fixes on\n * that repo!\n */\n/**\n * An array of characters that encode 6 bits into a Base64-URL alphabet\n * character.\n */\nconst TO_BASE64URL = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'.split('');\n/**\n * An array of characters that can appear in a Base64-URL encoded string but\n * should be ignored.\n */\nconst IGNORE_BASE64URL = ' \\t\\n\\r='.split('');\n/**\n * An array of 128 numbers that map a Base64-URL character to 6 bits, or if -2\n * used to skip the character, or if -1 used to error out.\n */\nconst FROM_BASE64URL = (() => {\n const charMap = new Array(128);\n for (let i = 0; i < charMap.length; i += 1) {\n charMap[i] = -1;\n }\n for (let i = 0; i < IGNORE_BASE64URL.length; i += 1) {\n charMap[IGNORE_BASE64URL[i].charCodeAt(0)] = -2;\n }\n for (let i = 0; i < TO_BASE64URL.length; i += 1) {\n charMap[TO_BASE64URL[i].charCodeAt(0)] = i;\n }\n return charMap;\n})();\n/**\n * Converts a byte to a Base64-URL string.\n *\n * @param byte The byte to convert, or null to flush at the end of the byte sequence.\n * @param state The Base64 conversion state. Pass an initial value of `{ queue: 0, queuedBits: 0 }`.\n * @param emit A function called with the next Base64 character when ready.\n */\nfunction byteToBase64URL(byte, state, emit) {\n if (byte !== null) {\n state.queue = (state.queue << 8) | byte;\n state.queuedBits += 8;\n while (state.queuedBits >= 6) {\n const pos = (state.queue >> (state.queuedBits - 6)) & 63;\n emit(TO_BASE64URL[pos]);\n state.queuedBits -= 6;\n }\n }\n else if (state.queuedBits > 0) {\n state.queue = state.queue << (6 - state.queuedBits);\n state.queuedBits = 6;\n while (state.queuedBits >= 6) {\n const pos = (state.queue >> (state.queuedBits - 6)) & 63;\n emit(TO_BASE64URL[pos]);\n state.queuedBits -= 6;\n }\n }\n}\n/**\n * Converts a String char code (extracted using `string.charCodeAt(position)`) to a sequence of Base64-URL characters.\n *\n * @param charCode The char code of the JavaScript string.\n * @param state The Base64 state. Pass an initial value of `{ queue: 0, queuedBits: 0 }`.\n * @param emit A function called with the next byte.\n */\nfunction byteFromBase64URL(charCode, state, emit) {\n const bits = FROM_BASE64URL[charCode];\n if (bits > -1) {\n // valid Base64-URL character\n state.queue = (state.queue << 6) | bits;\n state.queuedBits += 6;\n while (state.queuedBits >= 8) {\n emit((state.queue >> (state.queuedBits - 8)) & 0xff);\n state.queuedBits -= 8;\n }\n }\n else if (bits === -2) {\n // ignore spaces, tabs, newlines, =\n return;\n }\n else {\n throw new Error(`Invalid Base64-URL character \"${String.fromCharCode(charCode)}\"`);\n }\n}\n/**\n * Converts a JavaScript string (which may include any valid character) into a\n * Base64-URL encoded string. The string is first encoded in UTF-8 which is\n * then encoded as Base64-URL.\n *\n * @param str The string to convert.\n */\nfunction stringToBase64URL(str) {\n const base64 = [];\n const emitter = (char) => {\n base64.push(char);\n };\n const state = { queue: 0, queuedBits: 0 };\n stringToUTF8(str, (byte) => {\n byteToBase64URL(byte, state, emitter);\n });\n byteToBase64URL(null, state, emitter);\n return base64.join('');\n}\n/**\n * Converts a Base64-URL encoded string into a JavaScript string. It is assumed\n * that the underlying string has been encoded as UTF-8.\n *\n * @param str The Base64-URL encoded string.\n */\nfunction stringFromBase64URL(str) {\n const conv = [];\n const utf8Emit = (codepoint) => {\n conv.push(String.fromCodePoint(codepoint));\n };\n const utf8State = {\n utf8seq: 0,\n codepoint: 0,\n };\n const b64State = { queue: 0, queuedBits: 0 };\n const byteEmit = (byte) => {\n stringFromUTF8(byte, utf8State, utf8Emit);\n };\n for (let i = 0; i < str.length; i += 1) {\n byteFromBase64URL(str.charCodeAt(i), b64State, byteEmit);\n }\n return conv.join('');\n}\n/**\n * Converts a Unicode codepoint to a multi-byte UTF-8 sequence.\n *\n * @param codepoint The Unicode codepoint.\n * @param emit Function which will be called for each UTF-8 byte that represents the codepoint.\n */\nfunction codepointToUTF8(codepoint, emit) {\n if (codepoint <= 0x7f) {\n emit(codepoint);\n return;\n }\n else if (codepoint <= 0x7ff) {\n emit(0xc0 | (codepoint >> 6));\n emit(0x80 | (codepoint & 0x3f));\n return;\n }\n else if (codepoint <= 0xffff) {\n emit(0xe0 | (codepoint >> 12));\n emit(0x80 | ((codepoint >> 6) & 0x3f));\n emit(0x80 | (codepoint & 0x3f));\n return;\n }\n else if (codepoint <= 0x10ffff) {\n emit(0xf0 | (codepoint >> 18));\n emit(0x80 | ((codepoint >> 12) & 0x3f));\n emit(0x80 | ((codepoint >> 6) & 0x3f));\n emit(0x80 | (codepoint & 0x3f));\n return;\n }\n throw new Error(`Unrecognized Unicode codepoint: ${codepoint.toString(16)}`);\n}\n/**\n * Converts a JavaScript string to a sequence of UTF-8 bytes.\n *\n * @param str The string to convert to UTF-8.\n * @param emit Function which will be called for each UTF-8 byte of the string.\n */\nfunction stringToUTF8(str, emit) {\n for (let i = 0; i < str.length; i += 1) {\n let codepoint = str.charCodeAt(i);\n if (codepoint > 0xd7ff && codepoint <= 0xdbff) {\n // most UTF-16 codepoints are Unicode codepoints, except values in this\n // range where the next UTF-16 codepoint needs to be combined with the\n // current one to get the Unicode codepoint\n const highSurrogate = ((codepoint - 0xd800) * 0x400) & 0xffff;\n const lowSurrogate = (str.charCodeAt(i + 1) - 0xdc00) & 0xffff;\n codepoint = (lowSurrogate | highSurrogate) + 0x10000;\n i += 1;\n }\n codepointToUTF8(codepoint, emit);\n }\n}\n/**\n * Converts a UTF-8 byte to a Unicode codepoint.\n *\n * @param byte The UTF-8 byte next in the sequence.\n * @param state The shared state between consecutive UTF-8 bytes in the\n * sequence, an object with the shape `{ utf8seq: 0, codepoint: 0 }`.\n * @param emit Function which will be called for each codepoint.\n */\nfunction stringFromUTF8(byte, state, emit) {\n if (state.utf8seq === 0) {\n if (byte <= 0x7f) {\n emit(byte);\n return;\n }\n // count the number of 1 leading bits until you reach 0\n for (let leadingBit = 1; leadingBit < 6; leadingBit += 1) {\n if (((byte >> (7 - leadingBit)) & 1) === 0) {\n state.utf8seq = leadingBit;\n break;\n }\n }\n if (state.utf8seq === 2) {\n state.codepoint = byte & 31;\n }\n else if (state.utf8seq === 3) {\n state.codepoint = byte & 15;\n }\n else if (state.utf8seq === 4) {\n state.codepoint = byte & 7;\n }\n else {\n throw new Error('Invalid UTF-8 sequence');\n }\n state.utf8seq -= 1;\n }\n else if (state.utf8seq > 0) {\n if (byte <= 0x7f) {\n throw new Error('Invalid UTF-8 sequence');\n }\n state.codepoint = (state.codepoint << 6) | (byte & 63);\n state.utf8seq -= 1;\n if (state.utf8seq === 0) {\n emit(state.codepoint);\n }\n }\n}\n/**\n * Helper functions to convert different types of strings to Uint8Array\n */\nfunction base64UrlToUint8Array(str) {\n const result = [];\n const state = { queue: 0, queuedBits: 0 };\n const onByte = (byte) => {\n result.push(byte);\n };\n for (let i = 0; i < str.length; i += 1) {\n byteFromBase64URL(str.charCodeAt(i), state, onByte);\n }\n return new Uint8Array(result);\n}\nfunction stringToUint8Array(str) {\n const result = [];\n stringToUTF8(str, (byte) => result.push(byte));\n return new Uint8Array(result);\n}\nfunction bytesToBase64URL(bytes) {\n const result = [];\n const state = { queue: 0, queuedBits: 0 };\n const onChar = (char) => {\n result.push(char);\n };\n bytes.forEach((byte) => byteToBase64URL(byte, state, onChar));\n // always call with `null` after processing all bytes\n byteToBase64URL(null, state, onChar);\n return result.join('');\n}\n//# sourceMappingURL=base64url.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvYmFzZTY0dXJsLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isb0JBQW9CO0FBQ3hDO0FBQ0E7QUFDQSxvQkFBb0IsNkJBQTZCO0FBQ2pEO0FBQ0E7QUFDQSxvQkFBb0IseUJBQXlCO0FBQzdDO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlFQUF5RSx5QkFBeUI7QUFDbEc7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhEQUE4RCx5QkFBeUI7QUFDdkY7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseURBQXlELDhCQUE4QjtBQUN2RjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELHVCQUF1QjtBQUM5RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1Asb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzREFBc0QsMEJBQTBCO0FBQ2hGO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxnQkFBZ0I7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9hdXRoLWpzL2Rpc3QvbW9kdWxlL2xpYi9iYXNlNjR1cmwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBBdm9pZCBtb2RpZnlpbmcgdGhpcyBmaWxlLiBJdCdzIHBhcnQgb2ZcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBhYmFzZS1jb21tdW5pdHkvYmFzZTY0dXJsLWpzLiAgU3VibWl0IGFsbCBmaXhlcyBvblxuICogdGhhdCByZXBvIVxuICovXG4vKipcbiAqIEFuIGFycmF5IG9mIGNoYXJhY3RlcnMgdGhhdCBlbmNvZGUgNiBiaXRzIGludG8gYSBCYXNlNjQtVVJMIGFscGhhYmV0XG4gKiBjaGFyYWN0ZXIuXG4gKi9cbmNvbnN0IFRPX0JBU0U2NFVSTCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OS1fJy5zcGxpdCgnJyk7XG4vKipcbiAqIEFuIGFycmF5IG9mIGNoYXJhY3RlcnMgdGhhdCBjYW4gYXBwZWFyIGluIGEgQmFzZTY0LVVSTCBlbmNvZGVkIHN0cmluZyBidXRcbiAqIHNob3VsZCBiZSBpZ25vcmVkLlxuICovXG5jb25zdCBJR05PUkVfQkFTRTY0VVJMID0gJyBcXHRcXG5cXHI9Jy5zcGxpdCgnJyk7XG4vKipcbiAqIEFuIGFycmF5IG9mIDEyOCBudW1iZXJzIHRoYXQgbWFwIGEgQmFzZTY0LVVSTCBjaGFyYWN0ZXIgdG8gNiBiaXRzLCBvciBpZiAtMlxuICogdXNlZCB0byBza2lwIHRoZSBjaGFyYWN0ZXIsIG9yIGlmIC0xIHVzZWQgdG8gZXJyb3Igb3V0LlxuICovXG5jb25zdCBGUk9NX0JBU0U2NFVSTCA9ICgoKSA9PiB7XG4gICAgY29uc3QgY2hhck1hcCA9IG5ldyBBcnJheSgxMjgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhck1hcC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBjaGFyTWFwW2ldID0gLTE7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgSUdOT1JFX0JBU0U2NFVSTC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBjaGFyTWFwW0lHTk9SRV9CQVNFNjRVUkxbaV0uY2hhckNvZGVBdCgwKV0gPSAtMjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBUT19CQVNFNjRVUkwubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgY2hhck1hcFtUT19CQVNFNjRVUkxbaV0uY2hhckNvZGVBdCgwKV0gPSBpO1xuICAgIH1cbiAgICByZXR1cm4gY2hhck1hcDtcbn0pKCk7XG4vKipcbiAqIENvbnZlcnRzIGEgYnl0ZSB0byBhIEJhc2U2NC1VUkwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBieXRlIFRoZSBieXRlIHRvIGNvbnZlcnQsIG9yIG51bGwgdG8gZmx1c2ggYXQgdGhlIGVuZCBvZiB0aGUgYnl0ZSBzZXF1ZW5jZS5cbiAqIEBwYXJhbSBzdGF0ZSBUaGUgQmFzZTY0IGNvbnZlcnNpb24gc3RhdGUuIFBhc3MgYW4gaW5pdGlhbCB2YWx1ZSBvZiBgeyBxdWV1ZTogMCwgcXVldWVkQml0czogMCB9YC5cbiAqIEBwYXJhbSBlbWl0IEEgZnVuY3Rpb24gY2FsbGVkIHdpdGggdGhlIG5leHQgQmFzZTY0IGNoYXJhY3RlciB3aGVuIHJlYWR5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnl0ZVRvQmFzZTY0VVJMKGJ5dGUsIHN0YXRlLCBlbWl0KSB7XG4gICAgaWYgKGJ5dGUgIT09IG51bGwpIHtcbiAgICAgICAgc3RhdGUucXVldWUgPSAoc3RhdGUucXVldWUgPDwgOCkgfCBieXRlO1xuICAgICAgICBzdGF0ZS5xdWV1ZWRCaXRzICs9IDg7XG4gICAgICAgIHdoaWxlIChzdGF0ZS5xdWV1ZWRCaXRzID49IDYpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvcyA9IChzdGF0ZS5xdWV1ZSA+PiAoc3RhdGUucXVldWVkQml0cyAtIDYpKSAmIDYzO1xuICAgICAgICAgICAgZW1pdChUT19CQVNFNjRVUkxbcG9zXSk7XG4gICAgICAgICAgICBzdGF0ZS5xdWV1ZWRCaXRzIC09IDY7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoc3RhdGUucXVldWVkQml0cyA+IDApIHtcbiAgICAgICAgc3RhdGUucXVldWUgPSBzdGF0ZS5xdWV1ZSA8PCAoNiAtIHN0YXRlLnF1ZXVlZEJpdHMpO1xuICAgICAgICBzdGF0ZS5xdWV1ZWRCaXRzID0gNjtcbiAgICAgICAgd2hpbGUgKHN0YXRlLnF1ZXVlZEJpdHMgPj0gNikge1xuICAgICAgICAgICAgY29uc3QgcG9zID0gKHN0YXRlLnF1ZXVlID4+IChzdGF0ZS5xdWV1ZWRCaXRzIC0gNikpICYgNjM7XG4gICAgICAgICAgICBlbWl0KFRPX0JBU0U2NFVSTFtwb3NdKTtcbiAgICAgICAgICAgIHN0YXRlLnF1ZXVlZEJpdHMgLT0gNjtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8qKlxuICogQ29udmVydHMgYSBTdHJpbmcgY2hhciBjb2RlIChleHRyYWN0ZWQgdXNpbmcgYHN0cmluZy5jaGFyQ29kZUF0KHBvc2l0aW9uKWApIHRvIGEgc2VxdWVuY2Ugb2YgQmFzZTY0LVVSTCBjaGFyYWN0ZXJzLlxuICpcbiAqIEBwYXJhbSBjaGFyQ29kZSBUaGUgY2hhciBjb2RlIG9mIHRoZSBKYXZhU2NyaXB0IHN0cmluZy5cbiAqIEBwYXJhbSBzdGF0ZSBUaGUgQmFzZTY0IHN0YXRlLiBQYXNzIGFuIGluaXRpYWwgdmFsdWUgb2YgYHsgcXVldWU6IDAsIHF1ZXVlZEJpdHM6IDAgfWAuXG4gKiBAcGFyYW0gZW1pdCBBIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIHRoZSBuZXh0IGJ5dGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBieXRlRnJvbUJhc2U2NFVSTChjaGFyQ29kZSwgc3RhdGUsIGVtaXQpIHtcbiAgICBjb25zdCBiaXRzID0gRlJPTV9CQVNFNjRVUkxbY2hhckNvZGVdO1xuICAgIGlmIChiaXRzID4gLTEpIHtcbiAgICAgICAgLy8gdmFsaWQgQmFzZTY0LVVSTCBjaGFyYWN0ZXJcbiAgICAgICAgc3RhdGUucXVldWUgPSAoc3RhdGUucXVldWUgPDwgNikgfCBiaXRzO1xuICAgICAgICBzdGF0ZS5xdWV1ZWRCaXRzICs9IDY7XG4gICAgICAgIHdoaWxlIChzdGF0ZS5xdWV1ZWRCaXRzID49IDgpIHtcbiAgICAgICAgICAgIGVtaXQoKHN0YXRlLnF1ZXVlID4+IChzdGF0ZS5xdWV1ZWRCaXRzIC0gOCkpICYgMHhmZik7XG4gICAgICAgICAgICBzdGF0ZS5xdWV1ZWRCaXRzIC09IDg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoYml0cyA9PT0gLTIpIHtcbiAgICAgICAgLy8gaWdub3JlIHNwYWNlcywgdGFicywgbmV3bGluZXMsID1cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEJhc2U2NC1VUkwgY2hhcmFjdGVyIFwiJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJDb2RlKX1cImApO1xuICAgIH1cbn1cbi8qKlxuICogQ29udmVydHMgYSBKYXZhU2NyaXB0IHN0cmluZyAod2hpY2ggbWF5IGluY2x1ZGUgYW55IHZhbGlkIGNoYXJhY3RlcikgaW50byBhXG4gKiBCYXNlNjQtVVJMIGVuY29kZWQgc3RyaW5nLiBUaGUgc3RyaW5nIGlzIGZpcnN0IGVuY29kZWQgaW4gVVRGLTggd2hpY2ggaXNcbiAqIHRoZW4gZW5jb2RlZCBhcyBCYXNlNjQtVVJMLlxuICpcbiAqIEBwYXJhbSBzdHIgVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nVG9CYXNlNjRVUkwoc3RyKSB7XG4gICAgY29uc3QgYmFzZTY0ID0gW107XG4gICAgY29uc3QgZW1pdHRlciA9IChjaGFyKSA9PiB7XG4gICAgICAgIGJhc2U2NC5wdXNoKGNoYXIpO1xuICAgIH07XG4gICAgY29uc3Qgc3RhdGUgPSB7IHF1ZXVlOiAwLCBxdWV1ZWRCaXRzOiAwIH07XG4gICAgc3RyaW5nVG9VVEY4KHN0ciwgKGJ5dGUpID0+IHtcbiAgICAgICAgYnl0ZVRvQmFzZTY0VVJMKGJ5dGUsIHN0YXRlLCBlbWl0dGVyKTtcbiAgICB9KTtcbiAgICBieXRlVG9CYXNlNjRVUkwobnVsbCwgc3RhdGUsIGVtaXR0ZXIpO1xuICAgIHJldHVybiBiYXNlNjQuam9pbignJyk7XG59XG4vKipcbiAqIENvbnZlcnRzIGEgQmFzZTY0LVVSTCBlbmNvZGVkIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBzdHJpbmcuIEl0IGlzIGFzc3VtZWRcbiAqIHRoYXQgdGhlIHVuZGVybHlpbmcgc3RyaW5nIGhhcyBiZWVuIGVuY29kZWQgYXMgVVRGLTguXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgQmFzZTY0LVVSTCBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ0Zyb21CYXNlNjRVUkwoc3RyKSB7XG4gICAgY29uc3QgY29udiA9IFtdO1xuICAgIGNvbnN0IHV0ZjhFbWl0ID0gKGNvZGVwb2ludCkgPT4ge1xuICAgICAgICBjb252LnB1c2goU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZXBvaW50KSk7XG4gICAgfTtcbiAgICBjb25zdCB1dGY4U3RhdGUgPSB7XG4gICAgICAgIHV0ZjhzZXE6IDAsXG4gICAgICAgIGNvZGVwb2ludDogMCxcbiAgICB9O1xuICAgIGNvbnN0IGI2NFN0YXRlID0geyBxdWV1ZTogMCwgcXVldWVkQml0czogMCB9O1xuICAgIGNvbnN0IGJ5dGVFbWl0ID0gKGJ5dGUpID0+IHtcbiAgICAgICAgc3RyaW5nRnJvbVVURjgoYnl0ZSwgdXRmOFN0YXRlLCB1dGY4RW1pdCk7XG4gICAgfTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBieXRlRnJvbUJhc2U2NFVSTChzdHIuY2hhckNvZGVBdChpKSwgYjY0U3RhdGUsIGJ5dGVFbWl0KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnYuam9pbignJyk7XG59XG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBjb2RlcG9pbnQgdG8gYSBtdWx0aS1ieXRlIFVURi04IHNlcXVlbmNlLlxuICpcbiAqIEBwYXJhbSBjb2RlcG9pbnQgVGhlIFVuaWNvZGUgY29kZXBvaW50LlxuICogQHBhcmFtIGVtaXQgICAgICBGdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBVVEYtOCBieXRlIHRoYXQgcmVwcmVzZW50cyB0aGUgY29kZXBvaW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29kZXBvaW50VG9VVEY4KGNvZGVwb2ludCwgZW1pdCkge1xuICAgIGlmIChjb2RlcG9pbnQgPD0gMHg3Zikge1xuICAgICAgICBlbWl0KGNvZGVwb2ludCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29kZXBvaW50IDw9IDB4N2ZmKSB7XG4gICAgICAgIGVtaXQoMHhjMCB8IChjb2RlcG9pbnQgPj4gNikpO1xuICAgICAgICBlbWl0KDB4ODAgfCAoY29kZXBvaW50ICYgMHgzZikpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvZGVwb2ludCA8PSAweGZmZmYpIHtcbiAgICAgICAgZW1pdCgweGUwIHwgKGNvZGVwb2ludCA+PiAxMikpO1xuICAgICAgICBlbWl0KDB4ODAgfCAoKGNvZGVwb2ludCA+PiA2KSAmIDB4M2YpKTtcbiAgICAgICAgZW1pdCgweDgwIHwgKGNvZGVwb2ludCAmIDB4M2YpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb2RlcG9pbnQgPD0gMHgxMGZmZmYpIHtcbiAgICAgICAgZW1pdCgweGYwIHwgKGNvZGVwb2ludCA+PiAxOCkpO1xuICAgICAgICBlbWl0KDB4ODAgfCAoKGNvZGVwb2ludCA+PiAxMikgJiAweDNmKSk7XG4gICAgICAgIGVtaXQoMHg4MCB8ICgoY29kZXBvaW50ID4+IDYpICYgMHgzZikpO1xuICAgICAgICBlbWl0KDB4ODAgfCAoY29kZXBvaW50ICYgMHgzZikpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIFVuaWNvZGUgY29kZXBvaW50OiAke2NvZGVwb2ludC50b1N0cmluZygxNil9YCk7XG59XG4vKipcbiAqIENvbnZlcnRzIGEgSmF2YVNjcmlwdCBzdHJpbmcgdG8gYSBzZXF1ZW5jZSBvZiBVVEYtOCBieXRlcy5cbiAqXG4gKiBAcGFyYW0gc3RyICBUaGUgc3RyaW5nIHRvIGNvbnZlcnQgdG8gVVRGLTguXG4gKiBAcGFyYW0gZW1pdCBGdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBVVEYtOCBieXRlIG9mIHRoZSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb1VURjgoc3RyLCBlbWl0KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgbGV0IGNvZGVwb2ludCA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoY29kZXBvaW50ID4gMHhkN2ZmICYmIGNvZGVwb2ludCA8PSAweGRiZmYpIHtcbiAgICAgICAgICAgIC8vIG1vc3QgVVRGLTE2IGNvZGVwb2ludHMgYXJlIFVuaWNvZGUgY29kZXBvaW50cywgZXhjZXB0IHZhbHVlcyBpbiB0aGlzXG4gICAgICAgICAgICAvLyByYW5nZSB3aGVyZSB0aGUgbmV4dCBVVEYtMTYgY29kZXBvaW50IG5lZWRzIHRvIGJlIGNvbWJpbmVkIHdpdGggdGhlXG4gICAgICAgICAgICAvLyBjdXJyZW50IG9uZSB0byBnZXQgdGhlIFVuaWNvZGUgY29kZXBvaW50XG4gICAgICAgICAgICBjb25zdCBoaWdoU3Vycm9nYXRlID0gKChjb2RlcG9pbnQgLSAweGQ4MDApICogMHg0MDApICYgMHhmZmZmO1xuICAgICAgICAgICAgY29uc3QgbG93U3Vycm9nYXRlID0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAtIDB4ZGMwMCkgJiAweGZmZmY7XG4gICAgICAgICAgICBjb2RlcG9pbnQgPSAobG93U3Vycm9nYXRlIHwgaGlnaFN1cnJvZ2F0ZSkgKyAweDEwMDAwO1xuICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGNvZGVwb2ludFRvVVRGOChjb2RlcG9pbnQsIGVtaXQpO1xuICAgIH1cbn1cbi8qKlxuICogQ29udmVydHMgYSBVVEYtOCBieXRlIHRvIGEgVW5pY29kZSBjb2RlcG9pbnQuXG4gKlxuICogQHBhcmFtIGJ5dGUgIFRoZSBVVEYtOCBieXRlIG5leHQgaW4gdGhlIHNlcXVlbmNlLlxuICogQHBhcmFtIHN0YXRlIFRoZSBzaGFyZWQgc3RhdGUgYmV0d2VlbiBjb25zZWN1dGl2ZSBVVEYtOCBieXRlcyBpbiB0aGVcbiAqICAgICAgICAgICAgICBzZXF1ZW5jZSwgYW4gb2JqZWN0IHdpdGggdGhlIHNoYXBlIGB7IHV0ZjhzZXE6IDAsIGNvZGVwb2ludDogMCB9YC5cbiAqIEBwYXJhbSBlbWl0ICBGdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBjb2RlcG9pbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdGcm9tVVRGOChieXRlLCBzdGF0ZSwgZW1pdCkge1xuICAgIGlmIChzdGF0ZS51dGY4c2VxID09PSAwKSB7XG4gICAgICAgIGlmIChieXRlIDw9IDB4N2YpIHtcbiAgICAgICAgICAgIGVtaXQoYnl0ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gY291bnQgdGhlIG51bWJlciBvZiAxIGxlYWRpbmcgYml0cyB1bnRpbCB5b3UgcmVhY2ggMFxuICAgICAgICBmb3IgKGxldCBsZWFkaW5nQml0ID0gMTsgbGVhZGluZ0JpdCA8IDY7IGxlYWRpbmdCaXQgKz0gMSkge1xuICAgICAgICAgICAgaWYgKCgoYnl0ZSA+PiAoNyAtIGxlYWRpbmdCaXQpKSAmIDEpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUudXRmOHNlcSA9IGxlYWRpbmdCaXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLnV0ZjhzZXEgPT09IDIpIHtcbiAgICAgICAgICAgIHN0YXRlLmNvZGVwb2ludCA9IGJ5dGUgJiAzMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdGF0ZS51dGY4c2VxID09PSAzKSB7XG4gICAgICAgICAgICBzdGF0ZS5jb2RlcG9pbnQgPSBieXRlICYgMTU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdGUudXRmOHNlcSA9PT0gNCkge1xuICAgICAgICAgICAgc3RhdGUuY29kZXBvaW50ID0gYnl0ZSAmIDc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgVVRGLTggc2VxdWVuY2UnKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS51dGY4c2VxIC09IDE7XG4gICAgfVxuICAgIGVsc2UgaWYgKHN0YXRlLnV0ZjhzZXEgPiAwKSB7XG4gICAgICAgIGlmIChieXRlIDw9IDB4N2YpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBVVEYtOCBzZXF1ZW5jZScpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmNvZGVwb2ludCA9IChzdGF0ZS5jb2RlcG9pbnQgPDwgNikgfCAoYnl0ZSAmIDYzKTtcbiAgICAgICAgc3RhdGUudXRmOHNlcSAtPSAxO1xuICAgICAgICBpZiAoc3RhdGUudXRmOHNlcSA9PT0gMCkge1xuICAgICAgICAgICAgZW1pdChzdGF0ZS5jb2RlcG9pbnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb25zIHRvIGNvbnZlcnQgZGlmZmVyZW50IHR5cGVzIG9mIHN0cmluZ3MgdG8gVWludDhBcnJheVxuICovXG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0VXJsVG9VaW50OEFycmF5KHN0cikge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGNvbnN0IHN0YXRlID0geyBxdWV1ZTogMCwgcXVldWVkQml0czogMCB9O1xuICAgIGNvbnN0IG9uQnl0ZSA9IChieXRlKSA9PiB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGJ5dGUpO1xuICAgIH07XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgYnl0ZUZyb21CYXNlNjRVUkwoc3RyLmNoYXJDb2RlQXQoaSksIHN0YXRlLCBvbkJ5dGUpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocmVzdWx0KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb1VpbnQ4QXJyYXkoc3RyKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgc3RyaW5nVG9VVEY4KHN0ciwgKGJ5dGUpID0+IHJlc3VsdC5wdXNoKGJ5dGUpKTtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkocmVzdWx0KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBieXRlc1RvQmFzZTY0VVJMKGJ5dGVzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgY29uc3Qgc3RhdGUgPSB7IHF1ZXVlOiAwLCBxdWV1ZWRCaXRzOiAwIH07XG4gICAgY29uc3Qgb25DaGFyID0gKGNoYXIpID0+IHtcbiAgICAgICAgcmVzdWx0LnB1c2goY2hhcik7XG4gICAgfTtcbiAgICBieXRlcy5mb3JFYWNoKChieXRlKSA9PiBieXRlVG9CYXNlNjRVUkwoYnl0ZSwgc3RhdGUsIG9uQ2hhcikpO1xuICAgIC8vIGFsd2F5cyBjYWxsIHdpdGggYG51bGxgIGFmdGVyIHByb2Nlc3NpbmcgYWxsIGJ5dGVzXG4gICAgYnl0ZVRvQmFzZTY0VVJMKG51bGwsIHN0YXRlLCBvbkNoYXIpO1xuICAgIHJldHVybiByZXN1bHQuam9pbignJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iYXNlNjR1cmwuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/base64url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/constants.js":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/lib/constants.js ***!
|
||
\*********************************************************************/
|
||
/***/ ((__unused_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 */ API_VERSIONS: () => (/* binding */ API_VERSIONS),\n/* harmony export */ API_VERSION_HEADER_NAME: () => (/* binding */ API_VERSION_HEADER_NAME),\n/* harmony export */ AUDIENCE: () => (/* binding */ AUDIENCE),\n/* harmony export */ AUTO_REFRESH_TICK_DURATION_MS: () => (/* binding */ AUTO_REFRESH_TICK_DURATION_MS),\n/* harmony export */ AUTO_REFRESH_TICK_THRESHOLD: () => (/* binding */ AUTO_REFRESH_TICK_THRESHOLD),\n/* harmony export */ BASE64URL_REGEX: () => (/* binding */ BASE64URL_REGEX),\n/* harmony export */ DEFAULT_HEADERS: () => (/* binding */ DEFAULT_HEADERS),\n/* harmony export */ EXPIRY_MARGIN_MS: () => (/* binding */ EXPIRY_MARGIN_MS),\n/* harmony export */ GOTRUE_URL: () => (/* binding */ GOTRUE_URL),\n/* harmony export */ JWKS_TTL: () => (/* binding */ JWKS_TTL),\n/* harmony export */ NETWORK_FAILURE: () => (/* binding */ NETWORK_FAILURE),\n/* harmony export */ STORAGE_KEY: () => (/* binding */ STORAGE_KEY)\n/* harmony export */ });\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./version */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/version.js\");\n\n/** Current session will be checked for refresh at this interval. */\nconst AUTO_REFRESH_TICK_DURATION_MS = 30 * 1000;\n/**\n * A token refresh will be attempted this many ticks before the current session expires. */\nconst AUTO_REFRESH_TICK_THRESHOLD = 3;\n/*\n * Earliest time before an access token expires that the session should be refreshed.\n */\nconst EXPIRY_MARGIN_MS = AUTO_REFRESH_TICK_THRESHOLD * AUTO_REFRESH_TICK_DURATION_MS;\nconst GOTRUE_URL = 'http://localhost:9999';\nconst STORAGE_KEY = 'supabase.auth.token';\nconst AUDIENCE = '';\nconst DEFAULT_HEADERS = { 'X-Client-Info': `gotrue-js/${_version__WEBPACK_IMPORTED_MODULE_0__.version}` };\nconst NETWORK_FAILURE = {\n MAX_RETRIES: 10,\n RETRY_INTERVAL: 2, // in deciseconds\n};\nconst API_VERSION_HEADER_NAME = 'X-Supabase-Api-Version';\nconst API_VERSIONS = {\n '2024-01-01': {\n timestamp: Date.parse('2024-01-01T00:00:00.0Z'),\n name: '2024-01-01',\n },\n};\nconst BASE64URL_REGEX = /^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}$|[a-z0-9_-]{2}$)$/i;\nconst JWKS_TTL = 10 * 60 * 1000; // 10 minutes\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvY29uc3RhbnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBb0M7QUFDcEM7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNPO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLDhCQUE4Qiw2Q0FBTyxDQUFDO0FBQ2hFO0FBQ1A7QUFDQTtBQUNBO0FBQ087QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNPLHNDQUFzQyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRTtBQUN6RSxpQ0FBaUM7QUFDeEMiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tb2R1bGUvbGliL2NvbnN0YW50cy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uJztcbi8qKiBDdXJyZW50IHNlc3Npb24gd2lsbCBiZSBjaGVja2VkIGZvciByZWZyZXNoIGF0IHRoaXMgaW50ZXJ2YWwuICovXG5leHBvcnQgY29uc3QgQVVUT19SRUZSRVNIX1RJQ0tfRFVSQVRJT05fTVMgPSAzMCAqIDEwMDA7XG4vKipcbiAqIEEgdG9rZW4gcmVmcmVzaCB3aWxsIGJlIGF0dGVtcHRlZCB0aGlzIG1hbnkgdGlja3MgYmVmb3JlIHRoZSBjdXJyZW50IHNlc3Npb24gZXhwaXJlcy4gKi9cbmV4cG9ydCBjb25zdCBBVVRPX1JFRlJFU0hfVElDS19USFJFU0hPTEQgPSAzO1xuLypcbiAqIEVhcmxpZXN0IHRpbWUgYmVmb3JlIGFuIGFjY2VzcyB0b2tlbiBleHBpcmVzIHRoYXQgdGhlIHNlc3Npb24gc2hvdWxkIGJlIHJlZnJlc2hlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVYUElSWV9NQVJHSU5fTVMgPSBBVVRPX1JFRlJFU0hfVElDS19USFJFU0hPTEQgKiBBVVRPX1JFRlJFU0hfVElDS19EVVJBVElPTl9NUztcbmV4cG9ydCBjb25zdCBHT1RSVUVfVVJMID0gJ2h0dHA6Ly9sb2NhbGhvc3Q6OTk5OSc7XG5leHBvcnQgY29uc3QgU1RPUkFHRV9LRVkgPSAnc3VwYWJhc2UuYXV0aC50b2tlbic7XG5leHBvcnQgY29uc3QgQVVESUVOQ0UgPSAnJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX0hFQURFUlMgPSB7ICdYLUNsaWVudC1JbmZvJzogYGdvdHJ1ZS1qcy8ke3ZlcnNpb259YCB9O1xuZXhwb3J0IGNvbnN0IE5FVFdPUktfRkFJTFVSRSA9IHtcbiAgICBNQVhfUkVUUklFUzogMTAsXG4gICAgUkVUUllfSU5URVJWQUw6IDIsIC8vIGluIGRlY2lzZWNvbmRzXG59O1xuZXhwb3J0IGNvbnN0IEFQSV9WRVJTSU9OX0hFQURFUl9OQU1FID0gJ1gtU3VwYWJhc2UtQXBpLVZlcnNpb24nO1xuZXhwb3J0IGNvbnN0IEFQSV9WRVJTSU9OUyA9IHtcbiAgICAnMjAyNC0wMS0wMSc6IHtcbiAgICAgICAgdGltZXN0YW1wOiBEYXRlLnBhcnNlKCcyMDI0LTAxLTAxVDAwOjAwOjAwLjBaJyksXG4gICAgICAgIG5hbWU6ICcyMDI0LTAxLTAxJyxcbiAgICB9LFxufTtcbmV4cG9ydCBjb25zdCBCQVNFNjRVUkxfUkVHRVggPSAvXihbYS16MC05Xy1dezR9KSooJHxbYS16MC05Xy1dezN9JHxbYS16MC05Xy1dezJ9JCkkL2k7XG5leHBvcnQgY29uc3QgSldLU19UVEwgPSAxMCAqIDYwICogMTAwMDsgLy8gMTAgbWludXRlc1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/constants.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/errors.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/lib/errors.js ***!
|
||
\******************************************************************/
|
||
/***/ ((__unused_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 */ AuthApiError: () => (/* binding */ AuthApiError),\n/* harmony export */ AuthError: () => (/* binding */ AuthError),\n/* harmony export */ AuthImplicitGrantRedirectError: () => (/* binding */ AuthImplicitGrantRedirectError),\n/* harmony export */ AuthInvalidCredentialsError: () => (/* binding */ AuthInvalidCredentialsError),\n/* harmony export */ AuthInvalidJwtError: () => (/* binding */ AuthInvalidJwtError),\n/* harmony export */ AuthInvalidTokenResponseError: () => (/* binding */ AuthInvalidTokenResponseError),\n/* harmony export */ AuthPKCECodeVerifierMissingError: () => (/* binding */ AuthPKCECodeVerifierMissingError),\n/* harmony export */ AuthPKCEGrantCodeExchangeError: () => (/* binding */ AuthPKCEGrantCodeExchangeError),\n/* harmony export */ AuthRetryableFetchError: () => (/* binding */ AuthRetryableFetchError),\n/* harmony export */ AuthSessionMissingError: () => (/* binding */ AuthSessionMissingError),\n/* harmony export */ AuthUnknownError: () => (/* binding */ AuthUnknownError),\n/* harmony export */ AuthWeakPasswordError: () => (/* binding */ AuthWeakPasswordError),\n/* harmony export */ CustomAuthError: () => (/* binding */ CustomAuthError),\n/* harmony export */ isAuthApiError: () => (/* binding */ isAuthApiError),\n/* harmony export */ isAuthError: () => (/* binding */ isAuthError),\n/* harmony export */ isAuthImplicitGrantRedirectError: () => (/* binding */ isAuthImplicitGrantRedirectError),\n/* harmony export */ isAuthPKCECodeVerifierMissingError: () => (/* binding */ isAuthPKCECodeVerifierMissingError),\n/* harmony export */ isAuthRetryableFetchError: () => (/* binding */ isAuthRetryableFetchError),\n/* harmony export */ isAuthSessionMissingError: () => (/* binding */ isAuthSessionMissingError),\n/* harmony export */ isAuthWeakPasswordError: () => (/* binding */ isAuthWeakPasswordError)\n/* harmony export */ });\n/**\n * Base error thrown by Supabase Auth helpers.\n *\n * @example\n * ```ts\n * import { AuthError } from '@supabase/auth-js'\n *\n * throw new AuthError('Unexpected auth error', 500, 'unexpected')\n * ```\n */\nclass AuthError extends Error {\n constructor(message, status, code) {\n super(message);\n this.__isAuthError = true;\n this.name = 'AuthError';\n this.status = status;\n this.code = code;\n }\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n status: this.status,\n code: this.code,\n };\n }\n}\nfunction isAuthError(error) {\n return typeof error === 'object' && error !== null && '__isAuthError' in error;\n}\n/**\n * Error returned directly from the GoTrue REST API.\n *\n * @example\n * ```ts\n * import { AuthApiError } from '@supabase/auth-js'\n *\n * throw new AuthApiError('Invalid credentials', 400, 'invalid_credentials')\n * ```\n */\nclass AuthApiError extends AuthError {\n constructor(message, status, code) {\n super(message, status, code);\n this.name = 'AuthApiError';\n this.status = status;\n this.code = code;\n }\n}\nfunction isAuthApiError(error) {\n return isAuthError(error) && error.name === 'AuthApiError';\n}\n/**\n * Wraps non-standard errors so callers can inspect the root cause.\n *\n * @example\n * ```ts\n * import { AuthUnknownError } from '@supabase/auth-js'\n *\n * try {\n * await someAuthCall()\n * } catch (err) {\n * throw new AuthUnknownError('Auth failed', err)\n * }\n * ```\n */\nclass AuthUnknownError extends AuthError {\n constructor(message, originalError) {\n super(message);\n this.name = 'AuthUnknownError';\n this.originalError = originalError;\n }\n}\n/**\n * Flexible error class used to create named auth errors at runtime.\n *\n * @example\n * ```ts\n * import { CustomAuthError } from '@supabase/auth-js'\n *\n * throw new CustomAuthError('My custom auth error', 'MyAuthError', 400, 'custom_code')\n * ```\n */\nclass CustomAuthError extends AuthError {\n constructor(message, name, status, code) {\n super(message, status, code);\n this.name = name;\n this.status = status;\n }\n}\n/**\n * Error thrown when an operation requires a session but none is present.\n *\n * @example\n * ```ts\n * import { AuthSessionMissingError } from '@supabase/auth-js'\n *\n * throw new AuthSessionMissingError()\n * ```\n */\nclass AuthSessionMissingError extends CustomAuthError {\n constructor() {\n super('Auth session missing!', 'AuthSessionMissingError', 400, undefined);\n }\n}\nfunction isAuthSessionMissingError(error) {\n return isAuthError(error) && error.name === 'AuthSessionMissingError';\n}\n/**\n * Error thrown when the token response is malformed.\n *\n * @example\n * ```ts\n * import { AuthInvalidTokenResponseError } from '@supabase/auth-js'\n *\n * throw new AuthInvalidTokenResponseError()\n * ```\n */\nclass AuthInvalidTokenResponseError extends CustomAuthError {\n constructor() {\n super('Auth session or user missing', 'AuthInvalidTokenResponseError', 500, undefined);\n }\n}\n/**\n * Error thrown when email/password credentials are invalid.\n *\n * @example\n * ```ts\n * import { AuthInvalidCredentialsError } from '@supabase/auth-js'\n *\n * throw new AuthInvalidCredentialsError('Email or password is incorrect')\n * ```\n */\nclass AuthInvalidCredentialsError extends CustomAuthError {\n constructor(message) {\n super(message, 'AuthInvalidCredentialsError', 400, undefined);\n }\n}\n/**\n * Error thrown when implicit grant redirects contain an error.\n *\n * @example\n * ```ts\n * import { AuthImplicitGrantRedirectError } from '@supabase/auth-js'\n *\n * throw new AuthImplicitGrantRedirectError('OAuth redirect failed', {\n * error: 'access_denied',\n * code: 'oauth_error',\n * })\n * ```\n */\nclass AuthImplicitGrantRedirectError extends CustomAuthError {\n constructor(message, details = null) {\n super(message, 'AuthImplicitGrantRedirectError', 500, undefined);\n this.details = null;\n this.details = details;\n }\n toJSON() {\n return Object.assign(Object.assign({}, super.toJSON()), { details: this.details });\n }\n}\nfunction isAuthImplicitGrantRedirectError(error) {\n return isAuthError(error) && error.name === 'AuthImplicitGrantRedirectError';\n}\n/**\n * Error thrown during PKCE code exchanges.\n *\n * @example\n * ```ts\n * import { AuthPKCEGrantCodeExchangeError } from '@supabase/auth-js'\n *\n * throw new AuthPKCEGrantCodeExchangeError('PKCE exchange failed')\n * ```\n */\nclass AuthPKCEGrantCodeExchangeError extends CustomAuthError {\n constructor(message, details = null) {\n super(message, 'AuthPKCEGrantCodeExchangeError', 500, undefined);\n this.details = null;\n this.details = details;\n }\n toJSON() {\n return Object.assign(Object.assign({}, super.toJSON()), { details: this.details });\n }\n}\n/**\n * Error thrown when the PKCE code verifier is not found in storage.\n * This typically happens when the auth flow was initiated in a different\n * browser, device, or the storage was cleared.\n *\n * @example\n * ```ts\n * import { AuthPKCECodeVerifierMissingError } from '@supabase/auth-js'\n *\n * throw new AuthPKCECodeVerifierMissingError()\n * ```\n */\nclass AuthPKCECodeVerifierMissingError extends CustomAuthError {\n constructor() {\n super('PKCE code verifier not found in storage. ' +\n 'This can happen if the auth flow was initiated in a different browser or device, ' +\n 'or if the storage was cleared. For SSR frameworks (Next.js, SvelteKit, etc.), ' +\n 'use @supabase/ssr on both the server and client to store the code verifier in cookies.', 'AuthPKCECodeVerifierMissingError', 400, 'pkce_code_verifier_not_found');\n }\n}\nfunction isAuthPKCECodeVerifierMissingError(error) {\n return isAuthError(error) && error.name === 'AuthPKCECodeVerifierMissingError';\n}\n/**\n * Error thrown when a transient fetch issue occurs.\n *\n * @example\n * ```ts\n * import { AuthRetryableFetchError } from '@supabase/auth-js'\n *\n * throw new AuthRetryableFetchError('Service temporarily unavailable', 503)\n * ```\n */\nclass AuthRetryableFetchError extends CustomAuthError {\n constructor(message, status) {\n super(message, 'AuthRetryableFetchError', status, undefined);\n }\n}\nfunction isAuthRetryableFetchError(error) {\n return isAuthError(error) && error.name === 'AuthRetryableFetchError';\n}\n/**\n * This error is thrown on certain methods when the password used is deemed\n * weak. Inspect the reasons to identify what password strength rules are\n * inadequate.\n */\n/**\n * Error thrown when a supplied password is considered weak.\n *\n * @example\n * ```ts\n * import { AuthWeakPasswordError } from '@supabase/auth-js'\n *\n * throw new AuthWeakPasswordError('Password too short', 400, ['min_length'])\n * ```\n */\nclass AuthWeakPasswordError extends CustomAuthError {\n constructor(message, status, reasons) {\n super(message, 'AuthWeakPasswordError', status, 'weak_password');\n this.reasons = reasons;\n }\n toJSON() {\n return Object.assign(Object.assign({}, super.toJSON()), { reasons: this.reasons });\n }\n}\nfunction isAuthWeakPasswordError(error) {\n return isAuthError(error) && error.name === 'AuthWeakPasswordError';\n}\n/**\n * Error thrown when a JWT cannot be verified or parsed.\n *\n * @example\n * ```ts\n * import { AuthInvalidJwtError } from '@supabase/auth-js'\n *\n * throw new AuthInvalidJwtError('Token signature is invalid')\n * ```\n */\nclass AuthInvalidJwtError extends CustomAuthError {\n constructor(message) {\n super(message, 'AuthInvalidJwtError', 400, 'invalid_jwt');\n }\n}\n//# sourceMappingURL=errors.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvZXJyb3JzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksWUFBWTtBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxlQUFlO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG1CQUFtQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGtCQUFrQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksMEJBQTBCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGdDQUFnQztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSw4QkFBOEI7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksaUNBQWlDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxxQkFBcUIsdUJBQXVCO0FBQ3pGO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxpQ0FBaUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxxQkFBcUIsdUJBQXVCO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksbUNBQW1DO0FBQy9DO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLDBCQUEwQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksd0JBQXdCO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLHFCQUFxQix1QkFBdUI7QUFDekY7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvZXJyb3JzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQmFzZSBlcnJvciB0aHJvd24gYnkgU3VwYWJhc2UgQXV0aCBoZWxwZXJzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgQXV0aEVycm9yIH0gZnJvbSAnQHN1cGFiYXNlL2F1dGgtanMnXG4gKlxuICogdGhyb3cgbmV3IEF1dGhFcnJvcignVW5leHBlY3RlZCBhdXRoIGVycm9yJywgNTAwLCAndW5leHBlY3RlZCcpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEF1dGhFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGF0dXMsIGNvZGUpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuX19pc0F1dGhFcnJvciA9IHRydWU7XG4gICAgICAgIHRoaXMubmFtZSA9ICdBdXRoRXJyb3InO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICAgICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgICAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgICAgfTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaXNBdXRoRXJyb3IoZXJyb3IpIHtcbiAgICByZXR1cm4gdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiBlcnJvciAhPT0gbnVsbCAmJiAnX19pc0F1dGhFcnJvcicgaW4gZXJyb3I7XG59XG4vKipcbiAqIEVycm9yIHJldHVybmVkIGRpcmVjdGx5IGZyb20gdGhlIEdvVHJ1ZSBSRVNUIEFQSS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IEF1dGhBcGlFcnJvciB9IGZyb20gJ0BzdXBhYmFzZS9hdXRoLWpzJ1xuICpcbiAqIHRocm93IG5ldyBBdXRoQXBpRXJyb3IoJ0ludmFsaWQgY3JlZGVudGlhbHMnLCA0MDAsICdpbnZhbGlkX2NyZWRlbnRpYWxzJylcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQXV0aEFwaUVycm9yIGV4dGVuZHMgQXV0aEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGF0dXMsIGNvZGUpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgc3RhdHVzLCBjb2RlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0F1dGhBcGlFcnJvcic7XG4gICAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0F1dGhBcGlFcnJvcihlcnJvcikge1xuICAgIHJldHVybiBpc0F1dGhFcnJvcihlcnJvcikgJiYgZXJyb3IubmFtZSA9PT0gJ0F1dGhBcGlFcnJvcic7XG59XG4vKipcbiAqIFdyYXBzIG5vbi1zdGFuZGFyZCBlcnJvcnMgc28gY2FsbGVycyBjYW4gaW5zcGVjdCB0aGUgcm9vdCBjYXVzZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IEF1dGhVbmtub3duRXJyb3IgfSBmcm9tICdAc3VwYWJhc2UvYXV0aC1qcydcbiAqXG4gKiB0cnkge1xuICogICBhd2FpdCBzb21lQXV0aENhbGwoKVxuICogfSBjYXRjaCAoZXJyKSB7XG4gKiAgIHRocm93IG5ldyBBdXRoVW5rbm93bkVycm9yKCdBdXRoIGZhaWxlZCcsIGVycilcbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQXV0aFVua25vd25FcnJvciBleHRlbmRzIEF1dGhFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgb3JpZ2luYWxFcnJvcikge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0F1dGhVbmtub3duRXJyb3InO1xuICAgICAgICB0aGlzLm9yaWdpbmFsRXJyb3IgPSBvcmlnaW5hbEVycm9yO1xuICAgIH1cbn1cbi8qKlxuICogRmxleGlibGUgZXJyb3IgY2xhc3MgdXNlZCB0byBjcmVhdGUgbmFtZWQgYXV0aCBlcnJvcnMgYXQgcnVudGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IEN1c3RvbUF1dGhFcnJvciB9IGZyb20gJ0BzdXBhYmFzZS9hdXRoLWpzJ1xuICpcbiAqIHRocm93IG5ldyBDdXN0b21BdXRoRXJyb3IoJ015IGN1c3RvbSBhdXRoIGVycm9yJywgJ015QXV0aEVycm9yJywgNDAwLCAnY3VzdG9tX2NvZGUnKVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBDdXN0b21BdXRoRXJyb3IgZXh0ZW5kcyBBdXRoRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIG5hbWUsIHN0YXR1cywgY29kZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlLCBzdGF0dXMsIGNvZGUpO1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1cztcbiAgICB9XG59XG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIGFuIG9wZXJhdGlvbiByZXF1aXJlcyBhIHNlc3Npb24gYnV0IG5vbmUgaXMgcHJlc2VudC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yIH0gZnJvbSAnQHN1cGFiYXNlL2F1dGgtanMnXG4gKlxuICogdGhyb3cgbmV3IEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKClcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQXV0aFNlc3Npb25NaXNzaW5nRXJyb3IgZXh0ZW5kcyBDdXN0b21BdXRoRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcignQXV0aCBzZXNzaW9uIG1pc3NpbmchJywgJ0F1dGhTZXNzaW9uTWlzc2luZ0Vycm9yJywgNDAwLCB1bmRlZmluZWQpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0F1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKGVycm9yKSB7XG4gICAgcmV0dXJuIGlzQXV0aEVycm9yKGVycm9yKSAmJiBlcnJvci5uYW1lID09PSAnQXV0aFNlc3Npb25NaXNzaW5nRXJyb3InO1xufVxuLyoqXG4gKiBFcnJvciB0aHJvd24gd2hlbiB0aGUgdG9rZW4gcmVzcG9uc2UgaXMgbWFsZm9ybWVkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgQXV0aEludmFsaWRUb2tlblJlc3BvbnNlRXJyb3IgfSBmcm9tICdAc3VwYWJhc2UvYXV0aC1qcydcbiAqXG4gKiB0aHJvdyBuZXcgQXV0aEludmFsaWRUb2tlblJlc3BvbnNlRXJyb3IoKVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRoSW52YWxpZFRva2VuUmVzcG9uc2VFcnJvciBleHRlbmRzIEN1c3RvbUF1dGhFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdBdXRoIHNlc3Npb24gb3IgdXNlciBtaXNzaW5nJywgJ0F1dGhJbnZhbGlkVG9rZW5SZXNwb25zZUVycm9yJywgNTAwLCB1bmRlZmluZWQpO1xuICAgIH1cbn1cbi8qKlxuICogRXJyb3IgdGhyb3duIHdoZW4gZW1haWwvcGFzc3dvcmQgY3JlZGVudGlhbHMgYXJlIGludmFsaWQuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBBdXRoSW52YWxpZENyZWRlbnRpYWxzRXJyb3IgfSBmcm9tICdAc3VwYWJhc2UvYXV0aC1qcydcbiAqXG4gKiB0aHJvdyBuZXcgQXV0aEludmFsaWRDcmVkZW50aWFsc0Vycm9yKCdFbWFpbCBvciBwYXNzd29yZCBpcyBpbmNvcnJlY3QnKVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRoSW52YWxpZENyZWRlbnRpYWxzRXJyb3IgZXh0ZW5kcyBDdXN0b21BdXRoRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgJ0F1dGhJbnZhbGlkQ3JlZGVudGlhbHNFcnJvcicsIDQwMCwgdW5kZWZpbmVkKTtcbiAgICB9XG59XG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIGltcGxpY2l0IGdyYW50IHJlZGlyZWN0cyBjb250YWluIGFuIGVycm9yLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yIH0gZnJvbSAnQHN1cGFiYXNlL2F1dGgtanMnXG4gKlxuICogdGhyb3cgbmV3IEF1dGhJbXBsaWNpdEdyYW50UmVkaXJlY3RFcnJvcignT0F1dGggcmVkaXJlY3QgZmFpbGVkJywge1xuICogICBlcnJvcjogJ2FjY2Vzc19kZW5pZWQnLFxuICogICBjb2RlOiAnb2F1dGhfZXJyb3InLFxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yIGV4dGVuZHMgQ3VzdG9tQXV0aEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBkZXRhaWxzID0gbnVsbCkge1xuICAgICAgICBzdXBlcihtZXNzYWdlLCAnQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yJywgNTAwLCB1bmRlZmluZWQpO1xuICAgICAgICB0aGlzLmRldGFpbHMgPSBudWxsO1xuICAgICAgICB0aGlzLmRldGFpbHMgPSBkZXRhaWxzO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN1cGVyLnRvSlNPTigpKSwgeyBkZXRhaWxzOiB0aGlzLmRldGFpbHMgfSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yKGVycm9yKSB7XG4gICAgcmV0dXJuIGlzQXV0aEVycm9yKGVycm9yKSAmJiBlcnJvci5uYW1lID09PSAnQXV0aEltcGxpY2l0R3JhbnRSZWRpcmVjdEVycm9yJztcbn1cbi8qKlxuICogRXJyb3IgdGhyb3duIGR1cmluZyBQS0NFIGNvZGUgZXhjaGFuZ2VzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgQXV0aFBLQ0VHcmFudENvZGVFeGNoYW5nZUVycm9yIH0gZnJvbSAnQHN1cGFiYXNlL2F1dGgtanMnXG4gKlxuICogdGhyb3cgbmV3IEF1dGhQS0NFR3JhbnRDb2RlRXhjaGFuZ2VFcnJvcignUEtDRSBleGNoYW5nZSBmYWlsZWQnKVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRoUEtDRUdyYW50Q29kZUV4Y2hhbmdlRXJyb3IgZXh0ZW5kcyBDdXN0b21BdXRoRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIGRldGFpbHMgPSBudWxsKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsICdBdXRoUEtDRUdyYW50Q29kZUV4Y2hhbmdlRXJyb3InLCA1MDAsIHVuZGVmaW5lZCk7XG4gICAgICAgIHRoaXMuZGV0YWlscyA9IG51bGw7XG4gICAgICAgIHRoaXMuZGV0YWlscyA9IGRldGFpbHM7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIudG9KU09OKCkpLCB7IGRldGFpbHM6IHRoaXMuZGV0YWlscyB9KTtcbiAgICB9XG59XG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIHRoZSBQS0NFIGNvZGUgdmVyaWZpZXIgaXMgbm90IGZvdW5kIGluIHN0b3JhZ2UuXG4gKiBUaGlzIHR5cGljYWxseSBoYXBwZW5zIHdoZW4gdGhlIGF1dGggZmxvdyB3YXMgaW5pdGlhdGVkIGluIGEgZGlmZmVyZW50XG4gKiBicm93c2VyLCBkZXZpY2UsIG9yIHRoZSBzdG9yYWdlIHdhcyBjbGVhcmVkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgQXV0aFBLQ0VDb2RlVmVyaWZpZXJNaXNzaW5nRXJyb3IgfSBmcm9tICdAc3VwYWJhc2UvYXV0aC1qcydcbiAqXG4gKiB0aHJvdyBuZXcgQXV0aFBLQ0VDb2RlVmVyaWZpZXJNaXNzaW5nRXJyb3IoKVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBBdXRoUEtDRUNvZGVWZXJpZmllck1pc3NpbmdFcnJvciBleHRlbmRzIEN1c3RvbUF1dGhFcnJvciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCdQS0NFIGNvZGUgdmVyaWZpZXIgbm90IGZvdW5kIGluIHN0b3JhZ2UuICcgK1xuICAgICAgICAgICAgJ1RoaXMgY2FuIGhhcHBlbiBpZiB0aGUgYXV0aCBmbG93IHdhcyBpbml0aWF0ZWQgaW4gYSBkaWZmZXJlbnQgYnJvd3NlciBvciBkZXZpY2UsICcgK1xuICAgICAgICAgICAgJ29yIGlmIHRoZSBzdG9yYWdlIHdhcyBjbGVhcmVkLiBGb3IgU1NSIGZyYW1ld29ya3MgKE5leHQuanMsIFN2ZWx0ZUtpdCwgZXRjLiksICcgK1xuICAgICAgICAgICAgJ3VzZSBAc3VwYWJhc2Uvc3NyIG9uIGJvdGggdGhlIHNlcnZlciBhbmQgY2xpZW50IHRvIHN0b3JlIHRoZSBjb2RlIHZlcmlmaWVyIGluIGNvb2tpZXMuJywgJ0F1dGhQS0NFQ29kZVZlcmlmaWVyTWlzc2luZ0Vycm9yJywgNDAwLCAncGtjZV9jb2RlX3ZlcmlmaWVyX25vdF9mb3VuZCcpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0F1dGhQS0NFQ29kZVZlcmlmaWVyTWlzc2luZ0Vycm9yKGVycm9yKSB7XG4gICAgcmV0dXJuIGlzQXV0aEVycm9yKGVycm9yKSAmJiBlcnJvci5uYW1lID09PSAnQXV0aFBLQ0VDb2RlVmVyaWZpZXJNaXNzaW5nRXJyb3InO1xufVxuLyoqXG4gKiBFcnJvciB0aHJvd24gd2hlbiBhIHRyYW5zaWVudCBmZXRjaCBpc3N1ZSBvY2N1cnMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBBdXRoUmV0cnlhYmxlRmV0Y2hFcnJvciB9IGZyb20gJ0BzdXBhYmFzZS9hdXRoLWpzJ1xuICpcbiAqIHRocm93IG5ldyBBdXRoUmV0cnlhYmxlRmV0Y2hFcnJvcignU2VydmljZSB0ZW1wb3JhcmlseSB1bmF2YWlsYWJsZScsIDUwMylcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgQXV0aFJldHJ5YWJsZUZldGNoRXJyb3IgZXh0ZW5kcyBDdXN0b21BdXRoRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIHN0YXR1cykge1xuICAgICAgICBzdXBlcihtZXNzYWdlLCAnQXV0aFJldHJ5YWJsZUZldGNoRXJyb3InLCBzdGF0dXMsIHVuZGVmaW5lZCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzQXV0aFJldHJ5YWJsZUZldGNoRXJyb3IoZXJyb3IpIHtcbiAgICByZXR1cm4gaXNBdXRoRXJyb3IoZXJyb3IpICYmIGVycm9yLm5hbWUgPT09ICdBdXRoUmV0cnlhYmxlRmV0Y2hFcnJvcic7XG59XG4vKipcbiAqIFRoaXMgZXJyb3IgaXMgdGhyb3duIG9uIGNlcnRhaW4gbWV0aG9kcyB3aGVuIHRoZSBwYXNzd29yZCB1c2VkIGlzIGRlZW1lZFxuICogd2Vhay4gSW5zcGVjdCB0aGUgcmVhc29ucyB0byBpZGVudGlmeSB3aGF0IHBhc3N3b3JkIHN0cmVuZ3RoIHJ1bGVzIGFyZVxuICogaW5hZGVxdWF0ZS5cbiAqL1xuLyoqXG4gKiBFcnJvciB0aHJvd24gd2hlbiBhIHN1cHBsaWVkIHBhc3N3b3JkIGlzIGNvbnNpZGVyZWQgd2Vhay5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IEF1dGhXZWFrUGFzc3dvcmRFcnJvciB9IGZyb20gJ0BzdXBhYmFzZS9hdXRoLWpzJ1xuICpcbiAqIHRocm93IG5ldyBBdXRoV2Vha1Bhc3N3b3JkRXJyb3IoJ1Bhc3N3b3JkIHRvbyBzaG9ydCcsIDQwMCwgWydtaW5fbGVuZ3RoJ10pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEF1dGhXZWFrUGFzc3dvcmRFcnJvciBleHRlbmRzIEN1c3RvbUF1dGhFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzLCByZWFzb25zKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UsICdBdXRoV2Vha1Bhc3N3b3JkRXJyb3InLCBzdGF0dXMsICd3ZWFrX3Bhc3N3b3JkJyk7XG4gICAgICAgIHRoaXMucmVhc29ucyA9IHJlYXNvbnM7XG4gICAgfVxuICAgIHRvSlNPTigpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgc3VwZXIudG9KU09OKCkpLCB7IHJlYXNvbnM6IHRoaXMucmVhc29ucyB9KTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gaXNBdXRoV2Vha1Bhc3N3b3JkRXJyb3IoZXJyb3IpIHtcbiAgICByZXR1cm4gaXNBdXRoRXJyb3IoZXJyb3IpICYmIGVycm9yLm5hbWUgPT09ICdBdXRoV2Vha1Bhc3N3b3JkRXJyb3InO1xufVxuLyoqXG4gKiBFcnJvciB0aHJvd24gd2hlbiBhIEpXVCBjYW5ub3QgYmUgdmVyaWZpZWQgb3IgcGFyc2VkLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgQXV0aEludmFsaWRKd3RFcnJvciB9IGZyb20gJ0BzdXBhYmFzZS9hdXRoLWpzJ1xuICpcbiAqIHRocm93IG5ldyBBdXRoSW52YWxpZEp3dEVycm9yKCdUb2tlbiBzaWduYXR1cmUgaXMgaW52YWxpZCcpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEF1dGhJbnZhbGlkSnd0RXJyb3IgZXh0ZW5kcyBDdXN0b21BdXRoRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSwgJ0F1dGhJbnZhbGlkSnd0RXJyb3InLCA0MDAsICdpbnZhbGlkX2p3dCcpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVycm9ycy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/errors.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/fetch.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/lib/fetch.js ***!
|
||
\*****************************************************************/
|
||
/***/ ((__unused_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 */ _generateLinkResponse: () => (/* binding */ _generateLinkResponse),\n/* harmony export */ _noResolveJsonResponse: () => (/* binding */ _noResolveJsonResponse),\n/* harmony export */ _request: () => (/* binding */ _request),\n/* harmony export */ _sessionResponse: () => (/* binding */ _sessionResponse),\n/* harmony export */ _sessionResponsePassword: () => (/* binding */ _sessionResponsePassword),\n/* harmony export */ _ssoResponse: () => (/* binding */ _ssoResponse),\n/* harmony export */ _userResponse: () => (/* binding */ _userResponse),\n/* harmony export */ handleError: () => (/* binding */ handleError)\n/* harmony export */ });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ \"(app-pages-browser)/./node_modules/tslib/tslib.es6.mjs\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/constants.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helpers */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/helpers.js\");\n/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./errors */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/errors.js\");\n\n\n\n\nconst _getErrorMessage = (err) => {\n if (typeof err === 'object' && err !== null) {\n const e = err;\n if (typeof e.msg === 'string')\n return e.msg;\n if (typeof e.message === 'string')\n return e.message;\n if (typeof e.error_description === 'string')\n return e.error_description;\n if (typeof e.error === 'string')\n return e.error;\n }\n return JSON.stringify(err);\n};\n// 502, 503, 504: Standard server/gateway errors\n// 520-524, 530: Cloudflare-specific error codes (web server down, connection timed out, etc.)\n// These are infrastructure errors and should not cause session invalidation.\nconst NETWORK_ERROR_CODES = [502, 503, 504, 520, 521, 522, 523, 524, 530];\nasync function handleError(error) {\n var _a;\n if (!(0,_helpers__WEBPACK_IMPORTED_MODULE_1__.looksLikeFetchResponse)(error)) {\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthRetryableFetchError(_getErrorMessage(error), 0);\n }\n if (NETWORK_ERROR_CODES.includes(error.status)) {\n // status in 500...599 range - server had an error, request might be retryed.\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthRetryableFetchError(_getErrorMessage(error), error.status);\n }\n let data;\n try {\n data = await error.json();\n }\n catch (e) {\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthUnknownError(_getErrorMessage(e), e);\n }\n let errorCode = undefined;\n const responseAPIVersion = (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.parseResponseAPIVersion)(error);\n if (responseAPIVersion &&\n responseAPIVersion.getTime() >= _constants__WEBPACK_IMPORTED_MODULE_0__.API_VERSIONS['2024-01-01'].timestamp &&\n typeof data === 'object' &&\n data &&\n typeof data.code === 'string') {\n errorCode = data.code;\n }\n else if (typeof data === 'object' && data && typeof data.error_code === 'string') {\n errorCode = data.error_code;\n }\n if (!errorCode) {\n // Legacy support for weak password errors, when there were no error codes\n if (typeof data === 'object' &&\n data &&\n typeof data.weak_password === 'object' &&\n data.weak_password &&\n Array.isArray(data.weak_password.reasons) &&\n data.weak_password.reasons.length &&\n data.weak_password.reasons.reduce((a, i) => a && typeof i === 'string', true)) {\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthWeakPasswordError(_getErrorMessage(data), error.status, data.weak_password.reasons);\n }\n }\n else if (errorCode === 'weak_password') {\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthWeakPasswordError(_getErrorMessage(data), error.status, ((_a = data.weak_password) === null || _a === void 0 ? void 0 : _a.reasons) || []);\n }\n else if (errorCode === 'session_not_found') {\n // The `session_id` inside the JWT does not correspond to a row in the\n // `sessions` table. This usually means the user has signed out, has been\n // deleted, or their session has somehow been terminated.\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError();\n }\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthApiError(_getErrorMessage(data), error.status || 500, errorCode);\n}\nconst _getRequestParams = (method, options, parameters, body) => {\n const params = { method, headers: (options === null || options === void 0 ? void 0 : options.headers) || {} };\n if (method === 'GET') {\n return params;\n }\n params.headers = Object.assign({ 'Content-Type': 'application/json;charset=UTF-8' }, options === null || options === void 0 ? void 0 : options.headers);\n params.body = JSON.stringify(body);\n return Object.assign(Object.assign({}, params), parameters);\n};\nasync function _request(fetcher, method, url, options) {\n var _a;\n const headers = Object.assign({}, options === null || options === void 0 ? void 0 : options.headers);\n if (!headers[_constants__WEBPACK_IMPORTED_MODULE_0__.API_VERSION_HEADER_NAME]) {\n headers[_constants__WEBPACK_IMPORTED_MODULE_0__.API_VERSION_HEADER_NAME] = _constants__WEBPACK_IMPORTED_MODULE_0__.API_VERSIONS['2024-01-01'].name;\n }\n if (options === null || options === void 0 ? void 0 : options.jwt) {\n headers['Authorization'] = `Bearer ${options.jwt}`;\n }\n const qs = (_a = options === null || options === void 0 ? void 0 : options.query) !== null && _a !== void 0 ? _a : {};\n if (options === null || options === void 0 ? void 0 : options.redirectTo) {\n qs['redirect_to'] = options.redirectTo;\n }\n const queryString = Object.keys(qs).length ? '?' + new URLSearchParams(qs).toString() : '';\n const data = await _handleRequest(fetcher, method, url + queryString, {\n headers,\n noResolveJson: options === null || options === void 0 ? void 0 : options.noResolveJson,\n }, {}, options === null || options === void 0 ? void 0 : options.body);\n return (options === null || options === void 0 ? void 0 : options.xform) ? options === null || options === void 0 ? void 0 : options.xform(data) : { data: Object.assign({}, data), error: null };\n}\nasync function _handleRequest(fetcher, method, url, options, parameters, body) {\n const requestParams = _getRequestParams(method, options, parameters, body);\n let result;\n try {\n result = await fetcher(url, Object.assign({}, requestParams));\n }\n catch (e) {\n console.error(e);\n // fetch failed, likely due to a network or CORS error\n throw new _errors__WEBPACK_IMPORTED_MODULE_2__.AuthRetryableFetchError(_getErrorMessage(e), 0);\n }\n if (!result.ok) {\n await handleError(result);\n }\n if (options === null || options === void 0 ? void 0 : options.noResolveJson) {\n return result;\n }\n try {\n return await result.json();\n }\n catch (e) {\n await handleError(e);\n }\n}\nfunction _sessionResponse(data) {\n var _a;\n let session = null;\n if (hasSession(data)) {\n session = Object.assign({}, data);\n if (!data.expires_at) {\n session.expires_at = (0,_helpers__WEBPACK_IMPORTED_MODULE_1__.expiresAt)(data.expires_in);\n }\n }\n const user = (_a = data.user) !== null && _a !== void 0 ? _a : data;\n return { data: { session, user }, error: null };\n}\nfunction _sessionResponsePassword(data) {\n const response = _sessionResponse(data);\n if (!response.error &&\n data.weak_password &&\n typeof data.weak_password === 'object' &&\n Array.isArray(data.weak_password.reasons) &&\n data.weak_password.reasons.length &&\n data.weak_password.message &&\n typeof data.weak_password.message === 'string' &&\n data.weak_password.reasons.reduce((a, i) => a && typeof i === 'string', true)) {\n response.data.weak_password = data.weak_password;\n }\n return response;\n}\nfunction _userResponse(data) {\n var _a;\n const user = (_a = data.user) !== null && _a !== void 0 ? _a : data;\n return { data: { user }, error: null };\n}\nfunction _ssoResponse(data) {\n return { data, error: null };\n}\nfunction _generateLinkResponse(data) {\n const { action_link, email_otp, hashed_token, redirect_to, verification_type } = data, rest = (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__rest)(data, [\"action_link\", \"email_otp\", \"hashed_token\", \"redirect_to\", \"verification_type\"]);\n const properties = {\n action_link,\n email_otp,\n hashed_token,\n redirect_to,\n verification_type,\n };\n const user = Object.assign({}, rest);\n return {\n data: {\n properties,\n user,\n },\n error: null,\n };\n}\nfunction _noResolveJsonResponse(data) {\n return data;\n}\n/**\n * hasSession checks if the response object contains a valid session\n * @param data A response object\n * @returns true if a session is in the response\n */\nfunction hasSession(data) {\n return !!data.access_token && !!data.refresh_token && !!data.expires_in;\n}\n//# sourceMappingURL=fetch.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvZmV0Y2guanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQStCO0FBQ3FDO0FBQ21CO0FBQzZDO0FBQ3BJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQSxTQUFTLGdFQUFzQjtBQUMvQixrQkFBa0IsNERBQXVCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQiw0REFBdUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLHFEQUFnQjtBQUNsQztBQUNBO0FBQ0EsK0JBQStCLGlFQUF1QjtBQUN0RDtBQUNBLHdDQUF3QyxvREFBWTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCLDBEQUFxQjtBQUMzQztBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsMERBQXFCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsNERBQXVCO0FBQ3pDO0FBQ0EsY0FBYyxpREFBWTtBQUMxQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQyxrQ0FBa0MsZ0JBQWdCO0FBQ3ZGO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ087QUFDUDtBQUNBLG9DQUFvQztBQUNwQyxpQkFBaUIsK0RBQXVCO0FBQ3hDLGdCQUFnQiwrREFBdUIsSUFBSSxvREFBWTtBQUN2RDtBQUNBO0FBQ0EsNkNBQTZDLFlBQVk7QUFDekQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSyxJQUFJO0FBQ1QseUpBQXlKLHNCQUFzQjtBQUMvSztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0RBQW9EO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLDREQUF1QjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxrQ0FBa0M7QUFDbEM7QUFDQSxpQ0FBaUMsbURBQVM7QUFDMUM7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRLGVBQWU7QUFDcEM7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0EsYUFBYSxRQUFRLE1BQU07QUFDM0I7QUFDTztBQUNQLGFBQWE7QUFDYjtBQUNPO0FBQ1AsWUFBWSx1RUFBdUUsZUFBZSw2Q0FBTTtBQUN4RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tb2R1bGUvbGliL2ZldGNoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IF9fcmVzdCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgQVBJX1ZFUlNJT05TLCBBUElfVkVSU0lPTl9IRUFERVJfTkFNRSB9IGZyb20gJy4vY29uc3RhbnRzJztcbmltcG9ydCB7IGV4cGlyZXNBdCwgbG9va3NMaWtlRmV0Y2hSZXNwb25zZSwgcGFyc2VSZXNwb25zZUFQSVZlcnNpb24gfSBmcm9tICcuL2hlbHBlcnMnO1xuaW1wb3J0IHsgQXV0aEFwaUVycm9yLCBBdXRoUmV0cnlhYmxlRmV0Y2hFcnJvciwgQXV0aFdlYWtQYXNzd29yZEVycm9yLCBBdXRoVW5rbm93bkVycm9yLCBBdXRoU2Vzc2lvbk1pc3NpbmdFcnJvciwgfSBmcm9tICcuL2Vycm9ycyc7XG5jb25zdCBfZ2V0RXJyb3JNZXNzYWdlID0gKGVycikgPT4ge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnb2JqZWN0JyAmJiBlcnIgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgZSA9IGVycjtcbiAgICAgICAgaWYgKHR5cGVvZiBlLm1zZyA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICByZXR1cm4gZS5tc2c7XG4gICAgICAgIGlmICh0eXBlb2YgZS5tZXNzYWdlID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBlLm1lc3NhZ2U7XG4gICAgICAgIGlmICh0eXBlb2YgZS5lcnJvcl9kZXNjcmlwdGlvbiA9PT0gJ3N0cmluZycpXG4gICAgICAgICAgICByZXR1cm4gZS5lcnJvcl9kZXNjcmlwdGlvbjtcbiAgICAgICAgaWYgKHR5cGVvZiBlLmVycm9yID09PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBlLmVycm9yO1xuICAgIH1cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZXJyKTtcbn07XG4vLyA1MDIsIDUwMywgNTA0OiBTdGFuZGFyZCBzZXJ2ZXIvZ2F0ZXdheSBlcnJvcnNcbi8vIDUyMC01MjQsIDUzMDogQ2xvdWRmbGFyZS1zcGVjaWZpYyBlcnJvciBjb2RlcyAod2ViIHNlcnZlciBkb3duLCBjb25uZWN0aW9uIHRpbWVkIG91dCwgZXRjLilcbi8vIFRoZXNlIGFyZSBpbmZyYXN0cnVjdHVyZSBlcnJvcnMgYW5kIHNob3VsZCBub3QgY2F1c2Ugc2Vzc2lvbiBpbnZhbGlkYXRpb24uXG5jb25zdCBORVRXT1JLX0VSUk9SX0NPREVTID0gWzUwMiwgNTAzLCA1MDQsIDUyMCwgNTIxLCA1MjIsIDUyMywgNTI0LCA1MzBdO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhhbmRsZUVycm9yKGVycm9yKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmICghbG9va3NMaWtlRmV0Y2hSZXNwb25zZShlcnJvcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF1dGhSZXRyeWFibGVGZXRjaEVycm9yKF9nZXRFcnJvck1lc3NhZ2UoZXJyb3IpLCAwKTtcbiAgICB9XG4gICAgaWYgKE5FVFdPUktfRVJST1JfQ09ERVMuaW5jbHVkZXMoZXJyb3Iuc3RhdHVzKSkge1xuICAgICAgICAvLyBzdGF0dXMgaW4gNTAwLi4uNTk5IHJhbmdlIC0gc2VydmVyIGhhZCBhbiBlcnJvciwgcmVxdWVzdCBtaWdodCBiZSByZXRyeWVkLlxuICAgICAgICB0aHJvdyBuZXcgQXV0aFJldHJ5YWJsZUZldGNoRXJyb3IoX2dldEVycm9yTWVzc2FnZShlcnJvciksIGVycm9yLnN0YXR1cyk7XG4gICAgfVxuICAgIGxldCBkYXRhO1xuICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCBlcnJvci5qc29uKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHRocm93IG5ldyBBdXRoVW5rbm93bkVycm9yKF9nZXRFcnJvck1lc3NhZ2UoZSksIGUpO1xuICAgIH1cbiAgICBsZXQgZXJyb3JDb2RlID0gdW5kZWZpbmVkO1xuICAgIGNvbnN0IHJlc3BvbnNlQVBJVmVyc2lvbiA9IHBhcnNlUmVzcG9uc2VBUElWZXJzaW9uKGVycm9yKTtcbiAgICBpZiAocmVzcG9uc2VBUElWZXJzaW9uICYmXG4gICAgICAgIHJlc3BvbnNlQVBJVmVyc2lvbi5nZXRUaW1lKCkgPj0gQVBJX1ZFUlNJT05TWycyMDI0LTAxLTAxJ10udGltZXN0YW1wICYmXG4gICAgICAgIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBkYXRhICYmXG4gICAgICAgIHR5cGVvZiBkYXRhLmNvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGVycm9yQ29kZSA9IGRhdGEuY29kZTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmIGRhdGEgJiYgdHlwZW9mIGRhdGEuZXJyb3JfY29kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgZXJyb3JDb2RlID0gZGF0YS5lcnJvcl9jb2RlO1xuICAgIH1cbiAgICBpZiAoIWVycm9yQ29kZSkge1xuICAgICAgICAvLyBMZWdhY3kgc3VwcG9ydCBmb3Igd2VhayBwYXNzd29yZCBlcnJvcnMsIHdoZW4gdGhlcmUgd2VyZSBubyBlcnJvciBjb2Rlc1xuICAgICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBkYXRhICYmXG4gICAgICAgICAgICB0eXBlb2YgZGF0YS53ZWFrX3Bhc3N3b3JkID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgZGF0YS53ZWFrX3Bhc3N3b3JkICYmXG4gICAgICAgICAgICBBcnJheS5pc0FycmF5KGRhdGEud2Vha19wYXNzd29yZC5yZWFzb25zKSAmJlxuICAgICAgICAgICAgZGF0YS53ZWFrX3Bhc3N3b3JkLnJlYXNvbnMubGVuZ3RoICYmXG4gICAgICAgICAgICBkYXRhLndlYWtfcGFzc3dvcmQucmVhc29ucy5yZWR1Y2UoKGEsIGkpID0+IGEgJiYgdHlwZW9mIGkgPT09ICdzdHJpbmcnLCB0cnVlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhXZWFrUGFzc3dvcmRFcnJvcihfZ2V0RXJyb3JNZXNzYWdlKGRhdGEpLCBlcnJvci5zdGF0dXMsIGRhdGEud2Vha19wYXNzd29yZC5yZWFzb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChlcnJvckNvZGUgPT09ICd3ZWFrX3Bhc3N3b3JkJykge1xuICAgICAgICB0aHJvdyBuZXcgQXV0aFdlYWtQYXNzd29yZEVycm9yKF9nZXRFcnJvck1lc3NhZ2UoZGF0YSksIGVycm9yLnN0YXR1cywgKChfYSA9IGRhdGEud2Vha19wYXNzd29yZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnJlYXNvbnMpIHx8IFtdKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXJyb3JDb2RlID09PSAnc2Vzc2lvbl9ub3RfZm91bmQnKSB7XG4gICAgICAgIC8vIFRoZSBgc2Vzc2lvbl9pZGAgaW5zaWRlIHRoZSBKV1QgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhIHJvdyBpbiB0aGVcbiAgICAgICAgLy8gYHNlc3Npb25zYCB0YWJsZS4gVGhpcyB1c3VhbGx5IG1lYW5zIHRoZSB1c2VyIGhhcyBzaWduZWQgb3V0LCBoYXMgYmVlblxuICAgICAgICAvLyBkZWxldGVkLCBvciB0aGVpciBzZXNzaW9uIGhhcyBzb21laG93IGJlZW4gdGVybWluYXRlZC5cbiAgICAgICAgdGhyb3cgbmV3IEF1dGhTZXNzaW9uTWlzc2luZ0Vycm9yKCk7XG4gICAgfVxuICAgIHRocm93IG5ldyBBdXRoQXBpRXJyb3IoX2dldEVycm9yTWVzc2FnZShkYXRhKSwgZXJyb3Iuc3RhdHVzIHx8IDUwMCwgZXJyb3JDb2RlKTtcbn1cbmNvbnN0IF9nZXRSZXF1ZXN0UGFyYW1zID0gKG1ldGhvZCwgb3B0aW9ucywgcGFyYW1ldGVycywgYm9keSkgPT4ge1xuICAgIGNvbnN0IHBhcmFtcyA9IHsgbWV0aG9kLCBoZWFkZXJzOiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmhlYWRlcnMpIHx8IHt9IH07XG4gICAgaWYgKG1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG4gICAgcGFyYW1zLmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHsgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLTgnIH0sIG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5oZWFkZXJzKTtcbiAgICBwYXJhbXMuYm9keSA9IEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyksIHBhcmFtZXRlcnMpO1xufTtcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcmVxdWVzdChmZXRjaGVyLCBtZXRob2QsIHVybCwgb3B0aW9ucykge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBoZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmhlYWRlcnMpO1xuICAgIGlmICghaGVhZGVyc1tBUElfVkVSU0lPTl9IRUFERVJfTkFNRV0pIHtcbiAgICAgICAgaGVhZGVyc1tBUElfVkVSU0lPTl9IRUFERVJfTkFNRV0gPSBBUElfVkVSU0lPTlNbJzIwMjQtMDEtMDEnXS5uYW1lO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmp3dCkge1xuICAgICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7b3B0aW9ucy5qd3R9YDtcbiAgICB9XG4gICAgY29uc3QgcXMgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucXVlcnkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9O1xuICAgIGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucmVkaXJlY3RUbykge1xuICAgICAgICBxc1sncmVkaXJlY3RfdG8nXSA9IG9wdGlvbnMucmVkaXJlY3RUbztcbiAgICB9XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBPYmplY3Qua2V5cyhxcykubGVuZ3RoID8gJz8nICsgbmV3IFVSTFNlYXJjaFBhcmFtcyhxcykudG9TdHJpbmcoKSA6ICcnO1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBfaGFuZGxlUmVxdWVzdChmZXRjaGVyLCBtZXRob2QsIHVybCArIHF1ZXJ5U3RyaW5nLCB7XG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG5vUmVzb2x2ZUpzb246IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5ub1Jlc29sdmVKc29uLFxuICAgIH0sIHt9LCBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuYm9keSk7XG4gICAgcmV0dXJuIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMueGZvcm0pID8gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnhmb3JtKGRhdGEpIDogeyBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBkYXRhKSwgZXJyb3I6IG51bGwgfTtcbn1cbmFzeW5jIGZ1bmN0aW9uIF9oYW5kbGVSZXF1ZXN0KGZldGNoZXIsIG1ldGhvZCwgdXJsLCBvcHRpb25zLCBwYXJhbWV0ZXJzLCBib2R5KSB7XG4gICAgY29uc3QgcmVxdWVzdFBhcmFtcyA9IF9nZXRSZXF1ZXN0UGFyYW1zKG1ldGhvZCwgb3B0aW9ucywgcGFyYW1ldGVycywgYm9keSk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBhd2FpdCBmZXRjaGVyKHVybCwgT2JqZWN0LmFzc2lnbih7fSwgcmVxdWVzdFBhcmFtcykpO1xuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAvLyBmZXRjaCBmYWlsZWQsIGxpa2VseSBkdWUgdG8gYSBuZXR3b3JrIG9yIENPUlMgZXJyb3JcbiAgICAgICAgdGhyb3cgbmV3IEF1dGhSZXRyeWFibGVGZXRjaEVycm9yKF9nZXRFcnJvck1lc3NhZ2UoZSksIDApO1xuICAgIH1cbiAgICBpZiAoIXJlc3VsdC5vaykge1xuICAgICAgICBhd2FpdCBoYW5kbGVFcnJvcihyZXN1bHQpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm5vUmVzb2x2ZUpzb24pIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGF3YWl0IHJlc3VsdC5qc29uKCk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGF3YWl0IGhhbmRsZUVycm9yKGUpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBfc2Vzc2lvblJlc3BvbnNlKGRhdGEpIHtcbiAgICB2YXIgX2E7XG4gICAgbGV0IHNlc3Npb24gPSBudWxsO1xuICAgIGlmIChoYXNTZXNzaW9uKGRhdGEpKSB7XG4gICAgICAgIHNlc3Npb24gPSBPYmplY3QuYXNzaWduKHt9LCBkYXRhKTtcbiAgICAgICAgaWYgKCFkYXRhLmV4cGlyZXNfYXQpIHtcbiAgICAgICAgICAgIHNlc3Npb24uZXhwaXJlc19hdCA9IGV4cGlyZXNBdChkYXRhLmV4cGlyZXNfaW4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHVzZXIgPSAoX2EgPSBkYXRhLnVzZXIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRhdGE7XG4gICAgcmV0dXJuIHsgZGF0YTogeyBzZXNzaW9uLCB1c2VyIH0sIGVycm9yOiBudWxsIH07XG59XG5leHBvcnQgZnVuY3Rpb24gX3Nlc3Npb25SZXNwb25zZVBhc3N3b3JkKGRhdGEpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IF9zZXNzaW9uUmVzcG9uc2UoZGF0YSk7XG4gICAgaWYgKCFyZXNwb25zZS5lcnJvciAmJlxuICAgICAgICBkYXRhLndlYWtfcGFzc3dvcmQgJiZcbiAgICAgICAgdHlwZW9mIGRhdGEud2Vha19wYXNzd29yZCA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgQXJyYXkuaXNBcnJheShkYXRhLndlYWtfcGFzc3dvcmQucmVhc29ucykgJiZcbiAgICAgICAgZGF0YS53ZWFrX3Bhc3N3b3JkLnJlYXNvbnMubGVuZ3RoICYmXG4gICAgICAgIGRhdGEud2Vha19wYXNzd29yZC5tZXNzYWdlICYmXG4gICAgICAgIHR5cGVvZiBkYXRhLndlYWtfcGFzc3dvcmQubWVzc2FnZSA9PT0gJ3N0cmluZycgJiZcbiAgICAgICAgZGF0YS53ZWFrX3Bhc3N3b3JkLnJlYXNvbnMucmVkdWNlKChhLCBpKSA9PiBhICYmIHR5cGVvZiBpID09PSAnc3RyaW5nJywgdHJ1ZSkpIHtcbiAgICAgICAgcmVzcG9uc2UuZGF0YS53ZWFrX3Bhc3N3b3JkID0gZGF0YS53ZWFrX3Bhc3N3b3JkO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2U7XG59XG5leHBvcnQgZnVuY3Rpb24gX3VzZXJSZXNwb25zZShkYXRhKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHVzZXIgPSAoX2EgPSBkYXRhLnVzZXIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGRhdGE7XG4gICAgcmV0dXJuIHsgZGF0YTogeyB1c2VyIH0sIGVycm9yOiBudWxsIH07XG59XG5leHBvcnQgZnVuY3Rpb24gX3Nzb1Jlc3BvbnNlKGRhdGEpIHtcbiAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9nZW5lcmF0ZUxpbmtSZXNwb25zZShkYXRhKSB7XG4gICAgY29uc3QgeyBhY3Rpb25fbGluaywgZW1haWxfb3RwLCBoYXNoZWRfdG9rZW4sIHJlZGlyZWN0X3RvLCB2ZXJpZmljYXRpb25fdHlwZSB9ID0gZGF0YSwgcmVzdCA9IF9fcmVzdChkYXRhLCBbXCJhY3Rpb25fbGlua1wiLCBcImVtYWlsX290cFwiLCBcImhhc2hlZF90b2tlblwiLCBcInJlZGlyZWN0X3RvXCIsIFwidmVyaWZpY2F0aW9uX3R5cGVcIl0pO1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICAgIGFjdGlvbl9saW5rLFxuICAgICAgICBlbWFpbF9vdHAsXG4gICAgICAgIGhhc2hlZF90b2tlbixcbiAgICAgICAgcmVkaXJlY3RfdG8sXG4gICAgICAgIHZlcmlmaWNhdGlvbl90eXBlLFxuICAgIH07XG4gICAgY29uc3QgdXNlciA9IE9iamVjdC5hc3NpZ24oe30sIHJlc3QpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIHByb3BlcnRpZXMsXG4gICAgICAgICAgICB1c2VyLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogbnVsbCxcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIF9ub1Jlc29sdmVKc29uUmVzcG9uc2UoZGF0YSkge1xuICAgIHJldHVybiBkYXRhO1xufVxuLyoqXG4gKiBoYXNTZXNzaW9uIGNoZWNrcyBpZiB0aGUgcmVzcG9uc2Ugb2JqZWN0IGNvbnRhaW5zIGEgdmFsaWQgc2Vzc2lvblxuICogQHBhcmFtIGRhdGEgQSByZXNwb25zZSBvYmplY3RcbiAqIEByZXR1cm5zIHRydWUgaWYgYSBzZXNzaW9uIGlzIGluIHRoZSByZXNwb25zZVxuICovXG5mdW5jdGlvbiBoYXNTZXNzaW9uKGRhdGEpIHtcbiAgICByZXR1cm4gISFkYXRhLmFjY2Vzc190b2tlbiAmJiAhIWRhdGEucmVmcmVzaF90b2tlbiAmJiAhIWRhdGEuZXhwaXJlc19pbjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZldGNoLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/fetch.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/helpers.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/lib/helpers.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((__unused_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 */ Deferred: () => (/* binding */ Deferred),\n/* harmony export */ assertPasskeyExperimentalEnabled: () => (/* binding */ assertPasskeyExperimentalEnabled),\n/* harmony export */ decodeJWT: () => (/* binding */ decodeJWT),\n/* harmony export */ deepClone: () => (/* binding */ deepClone),\n/* harmony export */ expiresAt: () => (/* binding */ expiresAt),\n/* harmony export */ generateCallbackId: () => (/* binding */ generateCallbackId),\n/* harmony export */ generatePKCEChallenge: () => (/* binding */ generatePKCEChallenge),\n/* harmony export */ generatePKCEVerifier: () => (/* binding */ generatePKCEVerifier),\n/* harmony export */ getAlgorithm: () => (/* binding */ getAlgorithm),\n/* harmony export */ getCodeChallengeAndMethod: () => (/* binding */ getCodeChallengeAndMethod),\n/* harmony export */ getItemAsync: () => (/* binding */ getItemAsync),\n/* harmony export */ insecureUserWarningProxy: () => (/* binding */ insecureUserWarningProxy),\n/* harmony export */ isBrowser: () => (/* binding */ isBrowser),\n/* harmony export */ looksLikeFetchResponse: () => (/* binding */ looksLikeFetchResponse),\n/* harmony export */ parseParametersFromURL: () => (/* binding */ parseParametersFromURL),\n/* harmony export */ parseResponseAPIVersion: () => (/* binding */ parseResponseAPIVersion),\n/* harmony export */ removeItemAsync: () => (/* binding */ removeItemAsync),\n/* harmony export */ resolveFetch: () => (/* binding */ resolveFetch),\n/* harmony export */ retryable: () => (/* binding */ retryable),\n/* harmony export */ setItemAsync: () => (/* binding */ setItemAsync),\n/* harmony export */ sleep: () => (/* binding */ sleep),\n/* harmony export */ supportsLocalStorage: () => (/* binding */ supportsLocalStorage),\n/* harmony export */ userNotAvailableProxy: () => (/* binding */ userNotAvailableProxy),\n/* harmony export */ validateExp: () => (/* binding */ validateExp),\n/* harmony export */ validateUUID: () => (/* binding */ validateUUID)\n/* harmony export */ });\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constants */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/constants.js\");\n/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/errors.js\");\n/* harmony import */ var _base64url__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./base64url */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/base64url.js\");\n\n\n\nfunction expiresAt(expiresIn) {\n const timeNow = Math.round(Date.now() / 1000);\n return timeNow + expiresIn;\n}\n/**\n * Generates a unique identifier for internal callback subscriptions.\n *\n * This function uses JavaScript Symbols to create guaranteed-unique identifiers\n * for auth state change callbacks. Symbols are ideal for this use case because:\n * - They are guaranteed unique by the JavaScript runtime\n * - They work in all environments (browser, SSR, Node.js)\n * - They avoid issues with Next.js 16 deterministic rendering requirements\n * - They are perfect for internal, non-serializable identifiers\n *\n * Note: This function is only used for internal subscription management,\n * not for security-critical operations like session tokens.\n */\nfunction generateCallbackId() {\n return Symbol('auth-callback');\n}\nconst isBrowser = () => typeof window !== 'undefined' && typeof document !== 'undefined';\nconst localStorageWriteTests = {\n tested: false,\n writable: false,\n};\n/**\n * Checks whether localStorage is supported on this browser.\n */\nconst supportsLocalStorage = () => {\n if (!isBrowser()) {\n return false;\n }\n try {\n if (typeof globalThis.localStorage !== 'object') {\n return false;\n }\n }\n catch (e) {\n // DOM exception when accessing `localStorage`\n return false;\n }\n if (localStorageWriteTests.tested) {\n return localStorageWriteTests.writable;\n }\n const randomKey = `lswt-${Math.random()}${Math.random()}`;\n try {\n globalThis.localStorage.setItem(randomKey, randomKey);\n globalThis.localStorage.removeItem(randomKey);\n localStorageWriteTests.tested = true;\n localStorageWriteTests.writable = true;\n }\n catch (e) {\n // localStorage can't be written to\n // https://www.chromium.org/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document\n localStorageWriteTests.tested = true;\n localStorageWriteTests.writable = false;\n }\n return localStorageWriteTests.writable;\n};\n/**\n * Extracts parameters encoded in the URL both in the query and fragment.\n */\nfunction parseParametersFromURL(href) {\n const result = {};\n const url = new URL(href);\n if (url.hash && url.hash[0] === '#') {\n try {\n const hashSearchParams = new URLSearchParams(url.hash.substring(1));\n hashSearchParams.forEach((value, key) => {\n result[key] = value;\n });\n }\n catch (_e) {\n // hash is not a query string\n }\n }\n // search parameters take precedence over hash parameters\n url.searchParams.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\nconst resolveFetch = (customFetch) => {\n if (customFetch) {\n return (...args) => customFetch(...args);\n }\n return (...args) => fetch(...args);\n};\nconst looksLikeFetchResponse = (maybeResponse) => {\n return (typeof maybeResponse === 'object' &&\n maybeResponse !== null &&\n 'status' in maybeResponse &&\n 'ok' in maybeResponse &&\n 'json' in maybeResponse &&\n typeof maybeResponse.json === 'function');\n};\n// Storage helpers\nconst setItemAsync = async (storage, key, data) => {\n await storage.setItem(key, JSON.stringify(data));\n};\nconst getItemAsync = async (storage, key) => {\n const value = await storage.getItem(key);\n if (!value) {\n return null;\n }\n try {\n return JSON.parse(value);\n }\n catch (_a) {\n return value;\n }\n};\nconst removeItemAsync = async (storage, key) => {\n await storage.removeItem(key);\n};\n/**\n * A deferred represents some asynchronous work that is not yet finished, which\n * may or may not culminate in a value.\n * Taken from: https://github.com/mike-north/types/blob/master/src/async.ts\n */\nclass Deferred {\n constructor() {\n // eslint-disable-next-line @typescript-eslint/no-extra-semi\n ;\n this.promise = new Deferred.promiseConstructor((res, rej) => {\n // eslint-disable-next-line @typescript-eslint/no-extra-semi\n ;\n this.resolve = res;\n this.reject = rej;\n });\n }\n}\nDeferred.promiseConstructor = Promise;\nfunction decodeJWT(token) {\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw new _errors__WEBPACK_IMPORTED_MODULE_1__.AuthInvalidJwtError('Invalid JWT structure');\n }\n // Regex checks for base64url format\n for (let i = 0; i < parts.length; i++) {\n if (!_constants__WEBPACK_IMPORTED_MODULE_0__.BASE64URL_REGEX.test(parts[i])) {\n throw new _errors__WEBPACK_IMPORTED_MODULE_1__.AuthInvalidJwtError('JWT not in base64url format');\n }\n }\n const data = {\n // using base64url lib\n header: JSON.parse((0,_base64url__WEBPACK_IMPORTED_MODULE_2__.stringFromBase64URL)(parts[0])),\n payload: JSON.parse((0,_base64url__WEBPACK_IMPORTED_MODULE_2__.stringFromBase64URL)(parts[1])),\n signature: (0,_base64url__WEBPACK_IMPORTED_MODULE_2__.base64UrlToUint8Array)(parts[2]),\n raw: {\n header: parts[0],\n payload: parts[1],\n },\n };\n return data;\n}\n/**\n * Creates a promise that resolves to null after some time.\n */\nasync function sleep(time) {\n return await new Promise((accept) => {\n setTimeout(() => accept(null), time);\n });\n}\n/**\n * Converts the provided async function into a retryable function. Each result\n * or thrown error is sent to the isRetryable function which should return true\n * if the function should run again.\n */\nfunction retryable(fn, isRetryable) {\n const promise = new Promise((accept, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-extra-semi\n ;\n (async () => {\n for (let attempt = 0; attempt < Infinity; attempt++) {\n try {\n const result = await fn(attempt);\n if (!isRetryable(attempt, null, result)) {\n accept(result);\n return;\n }\n }\n catch (e) {\n if (!isRetryable(attempt, e)) {\n reject(e);\n return;\n }\n }\n }\n })();\n });\n return promise;\n}\nfunction dec2hex(dec) {\n return ('0' + dec.toString(16)).substr(-2);\n}\n// Functions below taken from: https://stackoverflow.com/questions/63309409/creating-a-code-verifier-and-challenge-for-pkce-auth-on-spotify-api-in-reactjs\nfunction generatePKCEVerifier() {\n const verifierLength = 56;\n const array = new Uint32Array(verifierLength);\n if (typeof crypto === 'undefined') {\n const charSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';\n const charSetLen = charSet.length;\n let verifier = '';\n for (let i = 0; i < verifierLength; i++) {\n verifier += charSet.charAt(Math.floor(Math.random() * charSetLen));\n }\n return verifier;\n }\n crypto.getRandomValues(array);\n return Array.from(array, dec2hex).join('');\n}\nasync function sha256(randomString) {\n const encoder = new TextEncoder();\n const encodedData = encoder.encode(randomString);\n const hash = await crypto.subtle.digest('SHA-256', encodedData);\n const bytes = new Uint8Array(hash);\n return Array.from(bytes)\n .map((c) => String.fromCharCode(c))\n .join('');\n}\nasync function generatePKCEChallenge(verifier) {\n const hasCryptoSupport = typeof crypto !== 'undefined' &&\n typeof crypto.subtle !== 'undefined' &&\n typeof TextEncoder !== 'undefined';\n if (!hasCryptoSupport) {\n console.warn('WebCrypto API is not supported. Code challenge method will default to use plain instead of sha256.');\n return verifier;\n }\n const hashed = await sha256(verifier);\n return btoa(hashed).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\nasync function getCodeChallengeAndMethod(storage, storageKey, isPasswordRecovery = false) {\n const codeVerifier = generatePKCEVerifier();\n let storedCodeVerifier = codeVerifier;\n if (isPasswordRecovery) {\n storedCodeVerifier += '/recovery';\n }\n await setItemAsync(storage, `${storageKey}-code-verifier`, storedCodeVerifier);\n const codeChallenge = await generatePKCEChallenge(codeVerifier);\n const codeChallengeMethod = codeVerifier === codeChallenge ? 'plain' : 's256';\n return [codeChallenge, codeChallengeMethod];\n}\n/** Parses the API version which is 2YYY-MM-DD. */\nconst API_VERSION_REGEX = /^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i;\nfunction parseResponseAPIVersion(response) {\n const apiVersion = response.headers.get(_constants__WEBPACK_IMPORTED_MODULE_0__.API_VERSION_HEADER_NAME);\n if (!apiVersion) {\n return null;\n }\n if (!apiVersion.match(API_VERSION_REGEX)) {\n return null;\n }\n try {\n const date = new Date(`${apiVersion}T00:00:00.0Z`);\n return date;\n }\n catch (_e) {\n return null;\n }\n}\nfunction validateExp(exp) {\n if (!exp) {\n throw new Error('Missing exp claim');\n }\n const timeNow = Math.floor(Date.now() / 1000);\n if (exp <= timeNow) {\n throw new Error('JWT has expired');\n }\n}\nfunction getAlgorithm(alg) {\n switch (alg) {\n case 'RS256':\n return {\n name: 'RSASSA-PKCS1-v1_5',\n hash: { name: 'SHA-256' },\n };\n case 'ES256':\n return {\n name: 'ECDSA',\n namedCurve: 'P-256',\n hash: { name: 'SHA-256' },\n };\n default:\n throw new Error('Invalid alg claim');\n }\n}\nconst UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;\nfunction validateUUID(str) {\n if (!UUID_REGEX.test(str)) {\n throw new Error('@supabase/auth-js: Expected parameter to be UUID but is not');\n }\n}\nfunction assertPasskeyExperimentalEnabled(experimental) {\n if (!experimental.passkey) {\n throw new Error('@supabase/auth-js: the passkey API is experimental and disabled by default. Enable it by passing `auth: { experimental: { passkey: true } }` to createClient (or to the GoTrueClient constructor).');\n }\n}\nfunction userNotAvailableProxy() {\n const proxyTarget = {};\n return new Proxy(proxyTarget, {\n get: (target, prop) => {\n if (prop === '__isUserNotAvailableProxy') {\n return true;\n }\n // Preventative check for common problematic symbols during cloning/inspection\n // These symbols might be accessed by structuredClone or other internal mechanisms.\n if (typeof prop === 'symbol') {\n const sProp = prop.toString();\n if (sProp === 'Symbol(Symbol.toPrimitive)' ||\n sProp === 'Symbol(Symbol.toStringTag)' ||\n sProp === 'Symbol(util.inspect.custom)') {\n // Node.js util.inspect\n return undefined;\n }\n }\n throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Accessing the \"${prop}\" property of the session object is not supported. Please use getUser() instead.`);\n },\n set: (_target, prop) => {\n throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Setting the \"${prop}\" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`);\n },\n deleteProperty: (_target, prop) => {\n throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Deleting the \"${prop}\" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`);\n },\n });\n}\n/**\n * Creates a proxy around a user object that warns when properties are accessed on the server.\n * This is used to alert developers that using user data from getSession() on the server is insecure.\n *\n * @param user The actual user object to wrap\n * @param suppressWarningRef An object with a 'value' property that controls warning suppression\n * @returns A proxied user object that warns on property access\n */\nfunction insecureUserWarningProxy(user, suppressWarningRef) {\n return new Proxy(user, {\n get: (target, prop, receiver) => {\n // Allow internal checks without warning\n if (prop === '__isInsecureUserWarningProxy') {\n return true;\n }\n // Preventative check for common problematic symbols during cloning/inspection\n // These symbols might be accessed by structuredClone or other internal mechanisms\n if (typeof prop === 'symbol') {\n const sProp = prop.toString();\n if (sProp === 'Symbol(Symbol.toPrimitive)' ||\n sProp === 'Symbol(Symbol.toStringTag)' ||\n sProp === 'Symbol(util.inspect.custom)' ||\n sProp === 'Symbol(nodejs.util.inspect.custom)') {\n // Return the actual value for these symbols to allow proper inspection\n return Reflect.get(target, prop, receiver);\n }\n }\n // Emit warning on first property access\n if (!suppressWarningRef.value && typeof prop === 'string') {\n console.warn('Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server.');\n suppressWarningRef.value = true;\n }\n return Reflect.get(target, prop, receiver);\n },\n });\n}\n/**\n * Deep clones a JSON-serializable object using JSON.parse(JSON.stringify(obj)).\n * Note: Only works for JSON-safe data.\n */\nfunction deepClone(obj) {\n return JSON.parse(JSON.stringify(obj));\n}\n//# sourceMappingURL=helpers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvaGVscGVycy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXVFO0FBQ3hCO0FBQzBCO0FBQ2xFO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsY0FBYyxFQUFFLGNBQWM7QUFDNUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxrQkFBa0Isd0RBQW1CO0FBQ3JDO0FBQ0E7QUFDQSxvQkFBb0Isa0JBQWtCO0FBQ3RDLGFBQWEsdURBQWU7QUFDNUIsc0JBQXNCLHdEQUFtQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiwrREFBbUI7QUFDOUMsNEJBQTRCLCtEQUFtQjtBQUMvQyxtQkFBbUIsaUVBQXFCO0FBQ3hDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxvQkFBb0I7QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0Isb0JBQW9CO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxXQUFXO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsRUFBRTtBQUM5QjtBQUNQLDRDQUE0QywrREFBdUI7QUFDbkU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsV0FBVztBQUM1QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxHQUFHO0FBQzFFO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0EsbUlBQW1JLGdCQUFnQixpQkFBaUI7QUFDcEs7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhKQUE4SixLQUFLO0FBQ25LLFNBQVM7QUFDVDtBQUNBLDRKQUE0SixLQUFLO0FBQ2pLLFNBQVM7QUFDVDtBQUNBLDZKQUE2SixLQUFLO0FBQ2xLLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvaGVscGVycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUElfVkVSU0lPTl9IRUFERVJfTkFNRSwgQkFTRTY0VVJMX1JFR0VYIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQXV0aEludmFsaWRKd3RFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcbmltcG9ydCB7IGJhc2U2NFVybFRvVWludDhBcnJheSwgc3RyaW5nRnJvbUJhc2U2NFVSTCB9IGZyb20gJy4vYmFzZTY0dXJsJztcbmV4cG9ydCBmdW5jdGlvbiBleHBpcmVzQXQoZXhwaXJlc0luKSB7XG4gICAgY29uc3QgdGltZU5vdyA9IE1hdGgucm91bmQoRGF0ZS5ub3coKSAvIDEwMDApO1xuICAgIHJldHVybiB0aW1lTm93ICsgZXhwaXJlc0luO1xufVxuLyoqXG4gKiBHZW5lcmF0ZXMgYSB1bmlxdWUgaWRlbnRpZmllciBmb3IgaW50ZXJuYWwgY2FsbGJhY2sgc3Vic2NyaXB0aW9ucy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHVzZXMgSmF2YVNjcmlwdCBTeW1ib2xzIHRvIGNyZWF0ZSBndWFyYW50ZWVkLXVuaXF1ZSBpZGVudGlmaWVyc1xuICogZm9yIGF1dGggc3RhdGUgY2hhbmdlIGNhbGxiYWNrcy4gU3ltYm9scyBhcmUgaWRlYWwgZm9yIHRoaXMgdXNlIGNhc2UgYmVjYXVzZTpcbiAqIC0gVGhleSBhcmUgZ3VhcmFudGVlZCB1bmlxdWUgYnkgdGhlIEphdmFTY3JpcHQgcnVudGltZVxuICogLSBUaGV5IHdvcmsgaW4gYWxsIGVudmlyb25tZW50cyAoYnJvd3NlciwgU1NSLCBOb2RlLmpzKVxuICogLSBUaGV5IGF2b2lkIGlzc3VlcyB3aXRoIE5leHQuanMgMTYgZGV0ZXJtaW5pc3RpYyByZW5kZXJpbmcgcmVxdWlyZW1lbnRzXG4gKiAtIFRoZXkgYXJlIHBlcmZlY3QgZm9yIGludGVybmFsLCBub24tc2VyaWFsaXphYmxlIGlkZW50aWZpZXJzXG4gKlxuICogTm90ZTogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgZm9yIGludGVybmFsIHN1YnNjcmlwdGlvbiBtYW5hZ2VtZW50LFxuICogbm90IGZvciBzZWN1cml0eS1jcml0aWNhbCBvcGVyYXRpb25zIGxpa2Ugc2Vzc2lvbiB0b2tlbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNhbGxiYWNrSWQoKSB7XG4gICAgcmV0dXJuIFN5bWJvbCgnYXV0aC1jYWxsYmFjaycpO1xufVxuZXhwb3J0IGNvbnN0IGlzQnJvd3NlciA9ICgpID0+IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5jb25zdCBsb2NhbFN0b3JhZ2VXcml0ZVRlc3RzID0ge1xuICAgIHRlc3RlZDogZmFsc2UsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxufTtcbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgbG9jYWxTdG9yYWdlIGlzIHN1cHBvcnRlZCBvbiB0aGlzIGJyb3dzZXIuXG4gKi9cbmV4cG9ydCBjb25zdCBzdXBwb3J0c0xvY2FsU3RvcmFnZSA9ICgpID0+IHtcbiAgICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzLmxvY2FsU3RvcmFnZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICAvLyBET00gZXhjZXB0aW9uIHdoZW4gYWNjZXNzaW5nIGBsb2NhbFN0b3JhZ2VgXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGxvY2FsU3RvcmFnZVdyaXRlVGVzdHMudGVzdGVkKSB7XG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2VXcml0ZVRlc3RzLndyaXRhYmxlO1xuICAgIH1cbiAgICBjb25zdCByYW5kb21LZXkgPSBgbHN3dC0ke01hdGgucmFuZG9tKCl9JHtNYXRoLnJhbmRvbSgpfWA7XG4gICAgdHJ5IHtcbiAgICAgICAgZ2xvYmFsVGhpcy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShyYW5kb21LZXksIHJhbmRvbUtleSk7XG4gICAgICAgIGdsb2JhbFRoaXMubG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0ocmFuZG9tS2V5KTtcbiAgICAgICAgbG9jYWxTdG9yYWdlV3JpdGVUZXN0cy50ZXN0ZWQgPSB0cnVlO1xuICAgICAgICBsb2NhbFN0b3JhZ2VXcml0ZVRlc3RzLndyaXRhYmxlID0gdHJ1ZTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gbG9jYWxTdG9yYWdlIGNhbid0IGJlIHdyaXR0ZW4gdG9cbiAgICAgICAgLy8gaHR0cHM6Ly93d3cuY2hyb21pdW0ub3JnL2Zvci10ZXN0ZXJzL2J1Zy1yZXBvcnRpbmctZ3VpZGVsaW5lcy91bmNhdWdodC1zZWN1cml0eWVycm9yLWZhaWxlZC10by1yZWFkLXRoZS1sb2NhbHN0b3JhZ2UtcHJvcGVydHktZnJvbS13aW5kb3ctYWNjZXNzLWlzLWRlbmllZC1mb3ItdGhpcy1kb2N1bWVudFxuICAgICAgICBsb2NhbFN0b3JhZ2VXcml0ZVRlc3RzLnRlc3RlZCA9IHRydWU7XG4gICAgICAgIGxvY2FsU3RvcmFnZVdyaXRlVGVzdHMud3JpdGFibGUgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZVdyaXRlVGVzdHMud3JpdGFibGU7XG59O1xuLyoqXG4gKiBFeHRyYWN0cyBwYXJhbWV0ZXJzIGVuY29kZWQgaW4gdGhlIFVSTCBib3RoIGluIHRoZSBxdWVyeSBhbmQgZnJhZ21lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmFtZXRlcnNGcm9tVVJMKGhyZWYpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGhyZWYpO1xuICAgIGlmICh1cmwuaGFzaCAmJiB1cmwuaGFzaFswXSA9PT0gJyMnKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBoYXNoU2VhcmNoUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh1cmwuaGFzaC5zdWJzdHJpbmcoMSkpO1xuICAgICAgICAgICAgaGFzaFNlYXJjaFBhcmFtcy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfZSkge1xuICAgICAgICAgICAgLy8gaGFzaCBpcyBub3QgYSBxdWVyeSBzdHJpbmdcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzZWFyY2ggcGFyYW1ldGVycyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBoYXNoIHBhcmFtZXRlcnNcbiAgICB1cmwuc2VhcmNoUGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGNvbnN0IHJlc29sdmVGZXRjaCA9IChjdXN0b21GZXRjaCkgPT4ge1xuICAgIGlmIChjdXN0b21GZXRjaCkge1xuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IGN1c3RvbUZldGNoKC4uLmFyZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gKC4uLmFyZ3MpID0+IGZldGNoKC4uLmFyZ3MpO1xufTtcbmV4cG9ydCBjb25zdCBsb29rc0xpa2VGZXRjaFJlc3BvbnNlID0gKG1heWJlUmVzcG9uc2UpID0+IHtcbiAgICByZXR1cm4gKHR5cGVvZiBtYXliZVJlc3BvbnNlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICBtYXliZVJlc3BvbnNlICE9PSBudWxsICYmXG4gICAgICAgICdzdGF0dXMnIGluIG1heWJlUmVzcG9uc2UgJiZcbiAgICAgICAgJ29rJyBpbiBtYXliZVJlc3BvbnNlICYmXG4gICAgICAgICdqc29uJyBpbiBtYXliZVJlc3BvbnNlICYmXG4gICAgICAgIHR5cGVvZiBtYXliZVJlc3BvbnNlLmpzb24gPT09ICdmdW5jdGlvbicpO1xufTtcbi8vIFN0b3JhZ2UgaGVscGVyc1xuZXhwb3J0IGNvbnN0IHNldEl0ZW1Bc3luYyA9IGFzeW5jIChzdG9yYWdlLCBrZXksIGRhdGEpID0+IHtcbiAgICBhd2FpdCBzdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59O1xuZXhwb3J0IGNvbnN0IGdldEl0ZW1Bc3luYyA9IGFzeW5jIChzdG9yYWdlLCBrZXkpID0+IHtcbiAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHJlbW92ZUl0ZW1Bc3luYyA9IGFzeW5jIChzdG9yYWdlLCBrZXkpID0+IHtcbiAgICBhd2FpdCBzdG9yYWdlLnJlbW92ZUl0ZW0oa2V5KTtcbn07XG4vKipcbiAqIEEgZGVmZXJyZWQgcmVwcmVzZW50cyBzb21lIGFzeW5jaHJvbm91cyB3b3JrIHRoYXQgaXMgbm90IHlldCBmaW5pc2hlZCwgd2hpY2hcbiAqIG1heSBvciBtYXkgbm90IGN1bG1pbmF0ZSBpbiBhIHZhbHVlLlxuICogVGFrZW4gZnJvbTogaHR0cHM6Ly9naXRodWIuY29tL21pa2Utbm9ydGgvdHlwZXMvYmxvYi9tYXN0ZXIvc3JjL2FzeW5jLnRzXG4gKi9cbmV4cG9ydCBjbGFzcyBEZWZlcnJlZCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXh0cmEtc2VtaVxuICAgICAgICA7XG4gICAgICAgIHRoaXMucHJvbWlzZSA9IG5ldyBEZWZlcnJlZC5wcm9taXNlQ29uc3RydWN0b3IoKHJlcywgcmVqKSA9PiB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4dHJhLXNlbWlcbiAgICAgICAgICAgIDtcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZSA9IHJlcztcbiAgICAgICAgICAgIHRoaXMucmVqZWN0ID0gcmVqO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5EZWZlcnJlZC5wcm9taXNlQ29uc3RydWN0b3IgPSBQcm9taXNlO1xuZXhwb3J0IGZ1bmN0aW9uIGRlY29kZUpXVCh0b2tlbikge1xuICAgIGNvbnN0IHBhcnRzID0gdG9rZW4uc3BsaXQoJy4nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICAgIHRocm93IG5ldyBBdXRoSW52YWxpZEp3dEVycm9yKCdJbnZhbGlkIEpXVCBzdHJ1Y3R1cmUnKTtcbiAgICB9XG4gICAgLy8gUmVnZXggY2hlY2tzIGZvciBiYXNlNjR1cmwgZm9ybWF0XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIUJBU0U2NFVSTF9SRUdFWC50ZXN0KHBhcnRzW2ldKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEF1dGhJbnZhbGlkSnd0RXJyb3IoJ0pXVCBub3QgaW4gYmFzZTY0dXJsIGZvcm1hdCcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgIC8vIHVzaW5nIGJhc2U2NHVybCBsaWJcbiAgICAgICAgaGVhZGVyOiBKU09OLnBhcnNlKHN0cmluZ0Zyb21CYXNlNjRVUkwocGFydHNbMF0pKSxcbiAgICAgICAgcGF5bG9hZDogSlNPTi5wYXJzZShzdHJpbmdGcm9tQmFzZTY0VVJMKHBhcnRzWzFdKSksXG4gICAgICAgIHNpZ25hdHVyZTogYmFzZTY0VXJsVG9VaW50OEFycmF5KHBhcnRzWzJdKSxcbiAgICAgICAgcmF3OiB7XG4gICAgICAgICAgICBoZWFkZXI6IHBhcnRzWzBdLFxuICAgICAgICAgICAgcGF5bG9hZDogcGFydHNbMV0sXG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gZGF0YTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBudWxsIGFmdGVyIHNvbWUgdGltZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwKHRpbWUpIHtcbiAgICByZXR1cm4gYXdhaXQgbmV3IFByb21pc2UoKGFjY2VwdCkgPT4ge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGFjY2VwdChudWxsKSwgdGltZSk7XG4gICAgfSk7XG59XG4vKipcbiAqIENvbnZlcnRzIHRoZSBwcm92aWRlZCBhc3luYyBmdW5jdGlvbiBpbnRvIGEgcmV0cnlhYmxlIGZ1bmN0aW9uLiBFYWNoIHJlc3VsdFxuICogb3IgdGhyb3duIGVycm9yIGlzIHNlbnQgdG8gdGhlIGlzUmV0cnlhYmxlIGZ1bmN0aW9uIHdoaWNoIHNob3VsZCByZXR1cm4gdHJ1ZVxuICogaWYgdGhlIGZ1bmN0aW9uIHNob3VsZCBydW4gYWdhaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXRyeWFibGUoZm4sIGlzUmV0cnlhYmxlKSB7XG4gICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChhY2NlcHQsIHJlamVjdCkgPT4ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4dHJhLXNlbWlcbiAgICAgICAgO1xuICAgICAgICAoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCBJbmZpbml0eTsgYXR0ZW1wdCsrKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZm4oYXR0ZW1wdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaXNSZXRyeWFibGUoYXR0ZW1wdCwgbnVsbCwgcmVzdWx0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0KHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1JldHJ5YWJsZShhdHRlbXB0LCBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgIH0pO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuZnVuY3Rpb24gZGVjMmhleChkZWMpIHtcbiAgICByZXR1cm4gKCcwJyArIGRlYy50b1N0cmluZygxNikpLnN1YnN0cigtMik7XG59XG4vLyBGdW5jdGlvbnMgYmVsb3cgdGFrZW4gZnJvbTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNjMzMDk0MDkvY3JlYXRpbmctYS1jb2RlLXZlcmlmaWVyLWFuZC1jaGFsbGVuZ2UtZm9yLXBrY2UtYXV0aC1vbi1zcG90aWZ5LWFwaS1pbi1yZWFjdGpzXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVQS0NFVmVyaWZpZXIoKSB7XG4gICAgY29uc3QgdmVyaWZpZXJMZW5ndGggPSA1NjtcbiAgICBjb25zdCBhcnJheSA9IG5ldyBVaW50MzJBcnJheSh2ZXJpZmllckxlbmd0aCk7XG4gICAgaWYgKHR5cGVvZiBjcnlwdG8gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbnN0IGNoYXJTZXQgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktLl9+JztcbiAgICAgICAgY29uc3QgY2hhclNldExlbiA9IGNoYXJTZXQubGVuZ3RoO1xuICAgICAgICBsZXQgdmVyaWZpZXIgPSAnJztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJpZmllckxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2ZXJpZmllciArPSBjaGFyU2V0LmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyU2V0TGVuKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZlcmlmaWVyO1xuICAgIH1cbiAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShhcnJheSwgZGVjMmhleCkuam9pbignJyk7XG59XG5hc3luYyBmdW5jdGlvbiBzaGEyNTYocmFuZG9tU3RyaW5nKSB7XG4gICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgIGNvbnN0IGVuY29kZWREYXRhID0gZW5jb2Rlci5lbmNvZGUocmFuZG9tU3RyaW5nKTtcbiAgICBjb25zdCBoYXNoID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoJ1NIQS0yNTYnLCBlbmNvZGVkRGF0YSk7XG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShoYXNoKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShieXRlcylcbiAgICAgICAgLm1hcCgoYykgPT4gU3RyaW5nLmZyb21DaGFyQ29kZShjKSlcbiAgICAgICAgLmpvaW4oJycpO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlUEtDRUNoYWxsZW5nZSh2ZXJpZmllcikge1xuICAgIGNvbnN0IGhhc0NyeXB0b1N1cHBvcnQgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB0eXBlb2YgY3J5cHRvLnN1YnRsZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgdHlwZW9mIFRleHRFbmNvZGVyICE9PSAndW5kZWZpbmVkJztcbiAgICBpZiAoIWhhc0NyeXB0b1N1cHBvcnQpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdXZWJDcnlwdG8gQVBJIGlzIG5vdCBzdXBwb3J0ZWQuIENvZGUgY2hhbGxlbmdlIG1ldGhvZCB3aWxsIGRlZmF1bHQgdG8gdXNlIHBsYWluIGluc3RlYWQgb2Ygc2hhMjU2LicpO1xuICAgICAgICByZXR1cm4gdmVyaWZpZXI7XG4gICAgfVxuICAgIGNvbnN0IGhhc2hlZCA9IGF3YWl0IHNoYTI1Nih2ZXJpZmllcik7XG4gICAgcmV0dXJuIGJ0b2EoaGFzaGVkKS5yZXBsYWNlKC9cXCsvZywgJy0nKS5yZXBsYWNlKC9cXC8vZywgJ18nKS5yZXBsYWNlKC89KyQvLCAnJyk7XG59XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29kZUNoYWxsZW5nZUFuZE1ldGhvZChzdG9yYWdlLCBzdG9yYWdlS2V5LCBpc1Bhc3N3b3JkUmVjb3ZlcnkgPSBmYWxzZSkge1xuICAgIGNvbnN0IGNvZGVWZXJpZmllciA9IGdlbmVyYXRlUEtDRVZlcmlmaWVyKCk7XG4gICAgbGV0IHN0b3JlZENvZGVWZXJpZmllciA9IGNvZGVWZXJpZmllcjtcbiAgICBpZiAoaXNQYXNzd29yZFJlY292ZXJ5KSB7XG4gICAgICAgIHN0b3JlZENvZGVWZXJpZmllciArPSAnL3JlY292ZXJ5JztcbiAgICB9XG4gICAgYXdhaXQgc2V0SXRlbUFzeW5jKHN0b3JhZ2UsIGAke3N0b3JhZ2VLZXl9LWNvZGUtdmVyaWZpZXJgLCBzdG9yZWRDb2RlVmVyaWZpZXIpO1xuICAgIGNvbnN0IGNvZGVDaGFsbGVuZ2UgPSBhd2FpdCBnZW5lcmF0ZVBLQ0VDaGFsbGVuZ2UoY29kZVZlcmlmaWVyKTtcbiAgICBjb25zdCBjb2RlQ2hhbGxlbmdlTWV0aG9kID0gY29kZVZlcmlmaWVyID09PSBjb2RlQ2hhbGxlbmdlID8gJ3BsYWluJyA6ICdzMjU2JztcbiAgICByZXR1cm4gW2NvZGVDaGFsbGVuZ2UsIGNvZGVDaGFsbGVuZ2VNZXRob2RdO1xufVxuLyoqIFBhcnNlcyB0aGUgQVBJIHZlcnNpb24gd2hpY2ggaXMgMllZWS1NTS1ERC4gKi9cbmNvbnN0IEFQSV9WRVJTSU9OX1JFR0VYID0gL14yWzAtOV17M30tKDBbMS05XXwxWzAtMl0pLSgwWzEtOV18MVswLTldfDJbMC05XXwzWzAtMV0pJC9pO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVzcG9uc2VBUElWZXJzaW9uKHJlc3BvbnNlKSB7XG4gICAgY29uc3QgYXBpVmVyc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnMuZ2V0KEFQSV9WRVJTSU9OX0hFQURFUl9OQU1FKTtcbiAgICBpZiAoIWFwaVZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICghYXBpVmVyc2lvbi5tYXRjaChBUElfVkVSU0lPTl9SRUdFWCkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShgJHthcGlWZXJzaW9ufVQwMDowMDowMC4wWmApO1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG4gICAgY2F0Y2ggKF9lKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUV4cChleHApIHtcbiAgICBpZiAoIWV4cCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgZXhwIGNsYWltJyk7XG4gICAgfVxuICAgIGNvbnN0IHRpbWVOb3cgPSBNYXRoLmZsb29yKERhdGUubm93KCkgLyAxMDAwKTtcbiAgICBpZiAoZXhwIDw9IHRpbWVOb3cpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdKV1QgaGFzIGV4cGlyZWQnKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxnb3JpdGhtKGFsZykge1xuICAgIHN3aXRjaCAoYWxnKSB7XG4gICAgICAgIGNhc2UgJ1JTMjU2JzpcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbmFtZTogJ1JTQVNTQS1QS0NTMS12MV81JyxcbiAgICAgICAgICAgICAgICBoYXNoOiB7IG5hbWU6ICdTSEEtMjU2JyB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgY2FzZSAnRVMyNTYnOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnRUNEU0EnLFxuICAgICAgICAgICAgICAgIG5hbWVkQ3VydmU6ICdQLTI1NicsXG4gICAgICAgICAgICAgICAgaGFzaDogeyBuYW1lOiAnU0hBLTI1NicgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgYWxnIGNsYWltJyk7XG4gICAgfVxufVxuY29uc3QgVVVJRF9SRUdFWCA9IC9eWzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17NH0tWzAtOWEtZl17MTJ9JC87XG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVVVUlEKHN0cikge1xuICAgIGlmICghVVVJRF9SRUdFWC50ZXN0KHN0cikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdAc3VwYWJhc2UvYXV0aC1qczogRXhwZWN0ZWQgcGFyYW1ldGVyIHRvIGJlIFVVSUQgYnV0IGlzIG5vdCcpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRQYXNza2V5RXhwZXJpbWVudGFsRW5hYmxlZChleHBlcmltZW50YWwpIHtcbiAgICBpZiAoIWV4cGVyaW1lbnRhbC5wYXNza2V5KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQHN1cGFiYXNlL2F1dGgtanM6IHRoZSBwYXNza2V5IEFQSSBpcyBleHBlcmltZW50YWwgYW5kIGRpc2FibGVkIGJ5IGRlZmF1bHQuIEVuYWJsZSBpdCBieSBwYXNzaW5nIGBhdXRoOiB7IGV4cGVyaW1lbnRhbDogeyBwYXNza2V5OiB0cnVlIH0gfWAgdG8gY3JlYXRlQ2xpZW50IChvciB0byB0aGUgR29UcnVlQ2xpZW50IGNvbnN0cnVjdG9yKS4nKTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gdXNlck5vdEF2YWlsYWJsZVByb3h5KCkge1xuICAgIGNvbnN0IHByb3h5VGFyZ2V0ID0ge307XG4gICAgcmV0dXJuIG5ldyBQcm94eShwcm94eVRhcmdldCwge1xuICAgICAgICBnZXQ6ICh0YXJnZXQsIHByb3ApID0+IHtcbiAgICAgICAgICAgIGlmIChwcm9wID09PSAnX19pc1VzZXJOb3RBdmFpbGFibGVQcm94eScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFByZXZlbnRhdGl2ZSBjaGVjayBmb3IgY29tbW9uIHByb2JsZW1hdGljIHN5bWJvbHMgZHVyaW5nIGNsb25pbmcvaW5zcGVjdGlvblxuICAgICAgICAgICAgLy8gVGhlc2Ugc3ltYm9scyBtaWdodCBiZSBhY2Nlc3NlZCBieSBzdHJ1Y3R1cmVkQ2xvbmUgb3Igb3RoZXIgaW50ZXJuYWwgbWVjaGFuaXNtcy5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzUHJvcCA9IHByb3AudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBpZiAoc1Byb3AgPT09ICdTeW1ib2woU3ltYm9sLnRvUHJpbWl0aXZlKScgfHxcbiAgICAgICAgICAgICAgICAgICAgc1Byb3AgPT09ICdTeW1ib2woU3ltYm9sLnRvU3RyaW5nVGFnKScgfHxcbiAgICAgICAgICAgICAgICAgICAgc1Byb3AgPT09ICdTeW1ib2wodXRpbC5pbnNwZWN0LmN1c3RvbSknKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIE5vZGUuanMgdXRpbC5pbnNwZWN0XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBAc3VwYWJhc2UvYXV0aC1qczogY2xpZW50IHdhcyBjcmVhdGVkIHdpdGggdXNlclN0b3JhZ2Ugb3B0aW9uIGFuZCB0aGVyZSB3YXMgbm8gdXNlciBzdG9yZWQgaW4gdGhlIHVzZXIgc3RvcmFnZS4gQWNjZXNzaW5nIHRoZSBcIiR7cHJvcH1cIiBwcm9wZXJ0eSBvZiB0aGUgc2Vzc2lvbiBvYmplY3QgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVzZSBnZXRVc2VyKCkgaW5zdGVhZC5gKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiAoX3RhcmdldCwgcHJvcCkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBAc3VwYWJhc2UvYXV0aC1qczogY2xpZW50IHdhcyBjcmVhdGVkIHdpdGggdXNlclN0b3JhZ2Ugb3B0aW9uIGFuZCB0aGVyZSB3YXMgbm8gdXNlciBzdG9yZWQgaW4gdGhlIHVzZXIgc3RvcmFnZS4gU2V0dGluZyB0aGUgXCIke3Byb3B9XCIgcHJvcGVydHkgb2YgdGhlIHNlc3Npb24gb2JqZWN0IGlzIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSB1c2UgZ2V0VXNlcigpIHRvIGZldGNoIGEgdXNlciBvYmplY3QgeW91IGNhbiBtYW5pcHVsYXRlLmApO1xuICAgICAgICB9LFxuICAgICAgICBkZWxldGVQcm9wZXJ0eTogKF90YXJnZXQsIHByb3ApID0+IHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL2F1dGgtanM6IGNsaWVudCB3YXMgY3JlYXRlZCB3aXRoIHVzZXJTdG9yYWdlIG9wdGlvbiBhbmQgdGhlcmUgd2FzIG5vIHVzZXIgc3RvcmVkIGluIHRoZSB1c2VyIHN0b3JhZ2UuIERlbGV0aW5nIHRoZSBcIiR7cHJvcH1cIiBwcm9wZXJ0eSBvZiB0aGUgc2Vzc2lvbiBvYmplY3QgaXMgbm90IHN1cHBvcnRlZC4gUGxlYXNlIHVzZSBnZXRVc2VyKCkgdG8gZmV0Y2ggYSB1c2VyIG9iamVjdCB5b3UgY2FuIG1hbmlwdWxhdGUuYCk7XG4gICAgICAgIH0sXG4gICAgfSk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBwcm94eSBhcm91bmQgYSB1c2VyIG9iamVjdCB0aGF0IHdhcm5zIHdoZW4gcHJvcGVydGllcyBhcmUgYWNjZXNzZWQgb24gdGhlIHNlcnZlci5cbiAqIFRoaXMgaXMgdXNlZCB0byBhbGVydCBkZXZlbG9wZXJzIHRoYXQgdXNpbmcgdXNlciBkYXRhIGZyb20gZ2V0U2Vzc2lvbigpIG9uIHRoZSBzZXJ2ZXIgaXMgaW5zZWN1cmUuXG4gKlxuICogQHBhcmFtIHVzZXIgVGhlIGFjdHVhbCB1c2VyIG9iamVjdCB0byB3cmFwXG4gKiBAcGFyYW0gc3VwcHJlc3NXYXJuaW5nUmVmIEFuIG9iamVjdCB3aXRoIGEgJ3ZhbHVlJyBwcm9wZXJ0eSB0aGF0IGNvbnRyb2xzIHdhcm5pbmcgc3VwcHJlc3Npb25cbiAqIEByZXR1cm5zIEEgcHJveGllZCB1c2VyIG9iamVjdCB0aGF0IHdhcm5zIG9uIHByb3BlcnR5IGFjY2Vzc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZWN1cmVVc2VyV2FybmluZ1Byb3h5KHVzZXIsIHN1cHByZXNzV2FybmluZ1JlZikge1xuICAgIHJldHVybiBuZXcgUHJveHkodXNlciwge1xuICAgICAgICBnZXQ6ICh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSA9PiB7XG4gICAgICAgICAgICAvLyBBbGxvdyBpbnRlcm5hbCBjaGVja3Mgd2l0aG91dCB3YXJuaW5nXG4gICAgICAgICAgICBpZiAocHJvcCA9PT0gJ19faXNJbnNlY3VyZVVzZXJXYXJuaW5nUHJveHknKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBQcmV2ZW50YXRpdmUgY2hlY2sgZm9yIGNvbW1vbiBwcm9ibGVtYXRpYyBzeW1ib2xzIGR1cmluZyBjbG9uaW5nL2luc3BlY3Rpb25cbiAgICAgICAgICAgIC8vIFRoZXNlIHN5bWJvbHMgbWlnaHQgYmUgYWNjZXNzZWQgYnkgc3RydWN0dXJlZENsb25lIG9yIG90aGVyIGludGVybmFsIG1lY2hhbmlzbXNcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzUHJvcCA9IHByb3AudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBpZiAoc1Byb3AgPT09ICdTeW1ib2woU3ltYm9sLnRvUHJpbWl0aXZlKScgfHxcbiAgICAgICAgICAgICAgICAgICAgc1Byb3AgPT09ICdTeW1ib2woU3ltYm9sLnRvU3RyaW5nVGFnKScgfHxcbiAgICAgICAgICAgICAgICAgICAgc1Byb3AgPT09ICdTeW1ib2wodXRpbC5pbnNwZWN0LmN1c3RvbSknIHx8XG4gICAgICAgICAgICAgICAgICAgIHNQcm9wID09PSAnU3ltYm9sKG5vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tKScpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIHRoZSBhY3R1YWwgdmFsdWUgZm9yIHRoZXNlIHN5bWJvbHMgdG8gYWxsb3cgcHJvcGVyIGluc3BlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEVtaXQgd2FybmluZyBvbiBmaXJzdCBwcm9wZXJ0eSBhY2Nlc3NcbiAgICAgICAgICAgIGlmICghc3VwcHJlc3NXYXJuaW5nUmVmLnZhbHVlICYmIHR5cGVvZiBwcm9wID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignVXNpbmcgdGhlIHVzZXIgb2JqZWN0IGFzIHJldHVybmVkIGZyb20gc3VwYWJhc2UuYXV0aC5nZXRTZXNzaW9uKCkgb3IgZnJvbSBzb21lIHN1cGFiYXNlLmF1dGgub25BdXRoU3RhdGVDaGFuZ2UoKSBldmVudHMgY291bGQgYmUgaW5zZWN1cmUhIFRoaXMgdmFsdWUgY29tZXMgZGlyZWN0bHkgZnJvbSB0aGUgc3RvcmFnZSBtZWRpdW0gKHVzdWFsbHkgY29va2llcyBvbiB0aGUgc2VydmVyKSBhbmQgbWF5IG5vdCBiZSBhdXRoZW50aWMuIFVzZSBzdXBhYmFzZS5hdXRoLmdldFVzZXIoKSBpbnN0ZWFkIHdoaWNoIGF1dGhlbnRpY2F0ZXMgdGhlIGRhdGEgYnkgY29udGFjdGluZyB0aGUgU3VwYWJhc2UgQXV0aCBzZXJ2ZXIuJyk7XG4gICAgICAgICAgICAgICAgc3VwcHJlc3NXYXJuaW5nUmVmLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8qKlxuICogRGVlcCBjbG9uZXMgYSBKU09OLXNlcmlhbGl6YWJsZSBvYmplY3QgdXNpbmcgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKS5cbiAqIE5vdGU6IE9ubHkgd29ya3MgZm9yIEpTT04tc2FmZSBkYXRhLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVlcENsb25lKG9iaikge1xuICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aGVscGVycy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/helpers.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/local-storage.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/lib/local-storage.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((__unused_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 */ memoryLocalStorageAdapter: () => (/* binding */ memoryLocalStorageAdapter)\n/* harmony export */ });\n/**\n * Returns a localStorage-like object that stores the key-value pairs in\n * memory.\n */\nfunction memoryLocalStorageAdapter(store = {}) {\n return {\n getItem: (key) => {\n return store[key] || null;\n },\n setItem: (key, value) => {\n store[key] = value;\n },\n removeItem: (key) => {\n delete store[key];\n },\n };\n}\n//# sourceMappingURL=local-storage.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvbG9jYWwtc3RvcmFnZS5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDTyw2Q0FBNkM7QUFDcEQ7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tb2R1bGUvbGliL2xvY2FsLXN0b3JhZ2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBSZXR1cm5zIGEgbG9jYWxTdG9yYWdlLWxpa2Ugb2JqZWN0IHRoYXQgc3RvcmVzIHRoZSBrZXktdmFsdWUgcGFpcnMgaW5cbiAqIG1lbW9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbW9yeUxvY2FsU3RvcmFnZUFkYXB0ZXIoc3RvcmUgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldEl0ZW06IChrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZVtrZXldIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEl0ZW06IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBzdG9yZVtrZXldID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZUl0ZW06IChrZXkpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSBzdG9yZVtrZXldO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sb2NhbC1zdG9yYWdlLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/local-storage.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/locks.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/lib/locks.js ***!
|
||
\*****************************************************************/
|
||
/***/ ((__unused_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 */ LockAcquireTimeoutError: () => (/* binding */ LockAcquireTimeoutError),\n/* harmony export */ NavigatorLockAcquireTimeoutError: () => (/* binding */ NavigatorLockAcquireTimeoutError),\n/* harmony export */ ProcessLockAcquireTimeoutError: () => (/* binding */ ProcessLockAcquireTimeoutError),\n/* harmony export */ internals: () => (/* binding */ internals),\n/* harmony export */ navigatorLock: () => (/* binding */ navigatorLock),\n/* harmony export */ processLock: () => (/* binding */ processLock)\n/* harmony export */ });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/helpers.js\");\n\n/**\n * @experimental\n */\nconst internals = {\n /**\n * @experimental\n */\n debug: !!(globalThis &&\n (0,_helpers__WEBPACK_IMPORTED_MODULE_0__.supportsLocalStorage)() &&\n globalThis.localStorage &&\n globalThis.localStorage.getItem('supabase.gotrue-js.locks.debug') === 'true'),\n};\n/**\n * An error thrown when a lock cannot be acquired after some amount of time.\n *\n * Use the {@link #isAcquireTimeout} property instead of checking with `instanceof`.\n *\n * @example\n * ```ts\n * import { LockAcquireTimeoutError } from '@supabase/auth-js'\n *\n * class CustomLockError extends LockAcquireTimeoutError {\n * constructor() {\n * super('Lock timed out')\n * }\n * }\n * ```\n */\nclass LockAcquireTimeoutError extends Error {\n constructor(message) {\n super(message);\n this.isAcquireTimeout = true;\n }\n}\n/**\n * Error thrown when the browser Navigator Lock API fails to acquire a lock.\n *\n * @example\n * ```ts\n * import { NavigatorLockAcquireTimeoutError } from '@supabase/auth-js'\n *\n * throw new NavigatorLockAcquireTimeoutError('Lock timed out')\n * ```\n */\nclass NavigatorLockAcquireTimeoutError extends LockAcquireTimeoutError {\n}\n/**\n * Error thrown when the process-level lock helper cannot acquire a lock.\n *\n * @example\n * ```ts\n * import { ProcessLockAcquireTimeoutError } from '@supabase/auth-js'\n *\n * throw new ProcessLockAcquireTimeoutError('Lock timed out')\n * ```\n */\nclass ProcessLockAcquireTimeoutError extends LockAcquireTimeoutError {\n}\n/**\n * Implements a global exclusive lock using the Navigator LockManager API. It\n * is available on all browsers released after 2022-03-15 with Safari being the\n * last one to release support. If the API is not available, this function will\n * throw. Make sure you check availablility before configuring {@link\n * GoTrueClient}.\n *\n * You can turn on debugging by setting the `supabase.gotrue-js.locks.debug`\n * local storage item to `true`.\n *\n * Internals:\n *\n * Since the LockManager API does not preserve stack traces for the async\n * function passed in the `request` method, a trick is used where acquiring the\n * lock releases a previously started promise to run the operation in the `fn`\n * function. The lock waits for that promise to finish (with or without error),\n * while the function will finally wait for the result anyway.\n *\n * @param name Name of the lock to be acquired.\n * @param acquireTimeout If negative, no timeout. If 0 an error is thrown if\n * the lock can't be acquired without waiting. If positive, the lock acquire\n * will time out after so many milliseconds. An error is\n * a timeout if it has `isAcquireTimeout` set to true.\n * @param fn The operation to run once the lock is acquired.\n * @example\n * ```ts\n * await navigatorLock('sync-user', 1000, async () => {\n * await refreshSession()\n * })\n * ```\n */\nasync function navigatorLock(name, acquireTimeout, fn) {\n if (internals.debug) {\n console.log('@supabase/gotrue-js: navigatorLock: acquire lock', name, acquireTimeout);\n }\n const abortController = new globalThis.AbortController();\n let acquireTimeoutTimer;\n if (acquireTimeout > 0) {\n acquireTimeoutTimer = setTimeout(() => {\n abortController.abort();\n if (internals.debug) {\n console.log('@supabase/gotrue-js: navigatorLock acquire timed out', name);\n }\n }, acquireTimeout);\n }\n // MDN article: https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request\n // Wrapping navigator.locks.request() with a plain Promise is done as some\n // libraries like zone.js patch the Promise object to track the execution\n // context. However, it appears that most browsers use an internal promise\n // implementation when using the navigator.locks.request() API causing them\n // to lose context and emit confusing log messages or break certain features.\n // This wrapping is believed to help zone.js track the execution context\n // better.\n await Promise.resolve();\n try {\n return await globalThis.navigator.locks.request(name, acquireTimeout === 0\n ? {\n mode: 'exclusive',\n ifAvailable: true,\n }\n : {\n mode: 'exclusive',\n signal: abortController.signal,\n }, async (lock) => {\n if (lock) {\n // Lock acquired — cancel the acquire-timeout timer so it cannot fire\n // while fn() is running. Without this, a delayed timeout abort would\n // set signal.aborted = true even though we already hold the lock,\n // causing a subsequent steal to be misclassified as \"our timeout\n // fired\" and triggering a spurious steal-back cascade.\n clearTimeout(acquireTimeoutTimer);\n if (internals.debug) {\n console.log('@supabase/gotrue-js: navigatorLock: acquired', name, lock.name);\n }\n try {\n return await fn();\n }\n finally {\n if (internals.debug) {\n console.log('@supabase/gotrue-js: navigatorLock: released', name, lock.name);\n }\n }\n }\n else {\n if (acquireTimeout === 0) {\n if (internals.debug) {\n console.log('@supabase/gotrue-js: navigatorLock: not immediately available', name);\n }\n throw new NavigatorLockAcquireTimeoutError(`Acquiring an exclusive Navigator LockManager lock \"${name}\" immediately failed`);\n }\n else {\n if (internals.debug) {\n try {\n const result = await globalThis.navigator.locks.query();\n console.log('@supabase/gotrue-js: Navigator LockManager state', JSON.stringify(result, null, ' '));\n }\n catch (e) {\n console.warn('@supabase/gotrue-js: Error when querying Navigator LockManager state', e);\n }\n }\n // Browser is not following the Navigator LockManager spec, it\n // returned a null lock when we didn't use ifAvailable. So we can\n // pretend the lock is acquired in the name of backward compatibility\n // and user experience and just run the function.\n console.warn('@supabase/gotrue-js: Navigator LockManager returned a null lock when using #request without ifAvailable set to true, it appears this browser is not following the LockManager spec https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request');\n clearTimeout(acquireTimeoutTimer);\n return await fn();\n }\n }\n });\n }\n catch (e) {\n // Always clear the acquire timeout once the request settles, so it cannot\n // fire later and incorrectly abort/log after a rejection.\n if (acquireTimeout > 0) {\n clearTimeout(acquireTimeoutTimer);\n }\n // DOMException does not extend Error in Node.js, so use structural check\n if (e !== null &&\n typeof e === 'object' &&\n 'name' in e &&\n e.name === 'AbortError' &&\n acquireTimeout > 0) {\n if (abortController.signal.aborted) {\n // OUR timeout fired — the lock is genuinely orphaned. Steal it.\n //\n // The lock acquisition was aborted because the timeout fired while the\n // request was still pending. This typically means another lock holder is\n // not releasing the lock, possibly due to React Strict Mode's\n // double-mount/unmount behavior or a component unmounting mid-operation,\n // leaving an orphaned lock.\n //\n // Recovery: use { steal: true } to forcefully acquire the lock. Per the\n // Web Locks API spec, this releases any currently held lock with the same\n // name and grants the request immediately, preempting any queued requests.\n // The previous holder's callback continues running to completion but no\n // longer holds the lock for exclusion purposes.\n //\n // See: https://github.com/supabase/supabase/issues/42505\n if (internals.debug) {\n console.log('@supabase/gotrue-js: navigatorLock: acquire timeout, recovering by stealing lock', name);\n }\n console.warn(`@supabase/gotrue-js: Lock \"${name}\" was not released within ${acquireTimeout}ms. ` +\n 'This may indicate an orphaned lock from a component unmount (e.g., React Strict Mode). ' +\n 'Forcefully acquiring the lock to recover.');\n return await Promise.resolve().then(() => globalThis.navigator.locks.request(name, {\n mode: 'exclusive',\n steal: true,\n }, async (lock) => {\n if (lock) {\n if (internals.debug) {\n console.log('@supabase/gotrue-js: navigatorLock: recovered (stolen)', name, lock.name);\n }\n try {\n return await fn();\n }\n finally {\n if (internals.debug) {\n console.log('@supabase/gotrue-js: navigatorLock: released (stolen)', name, lock.name);\n }\n }\n }\n else {\n // This should not happen with steal: true, but handle gracefully.\n console.warn('@supabase/gotrue-js: Navigator LockManager returned null lock even with steal: true');\n return await fn();\n }\n }));\n }\n else {\n // We HELD the lock but another request stole it from us.\n // Per the Web Locks spec, our fn() callback is still running as an\n // orphaned background task — do NOT steal back. Stealing back would\n // cause a cascade (A steals B, B steals A, ...) and run fn() a second\n // time concurrently, corrupting auth state.\n // Convert to a typed error so callers (e.g. _autoRefreshTokenTick)\n // can handle/filter it without it leaking to Sentry as a raw AbortError.\n if (internals.debug) {\n console.log('@supabase/gotrue-js: navigatorLock: lock was stolen by another request', name);\n }\n throw new NavigatorLockAcquireTimeoutError(`Lock \"${name}\" was released because another request stole it`);\n }\n }\n throw e;\n }\n}\nconst PROCESS_LOCKS = {};\n/**\n * Implements a global exclusive lock that works only in the current process.\n * Useful for environments like React Native or other non-browser\n * single-process (i.e. no concept of \"tabs\") environments.\n *\n * Use {@link #navigatorLock} in browser environments.\n *\n * @param name Name of the lock to be acquired.\n * @param acquireTimeout If negative, no timeout. If 0 an error is thrown if\n * the lock can't be acquired without waiting. If positive, the lock acquire\n * will time out after so many milliseconds. An error is\n * a timeout if it has `isAcquireTimeout` set to true.\n * @param fn The operation to run once the lock is acquired.\n * @example\n * ```ts\n * await processLock('migrate', 5000, async () => {\n * await runMigration()\n * })\n * ```\n */\nasync function processLock(name, acquireTimeout, fn) {\n var _a;\n const previousOperation = (_a = PROCESS_LOCKS[name]) !== null && _a !== void 0 ? _a : Promise.resolve();\n // Wrap previousOperation to handle errors without using .catch()\n // This avoids Firefox content script security errors\n const previousOperationHandled = (async () => {\n try {\n await previousOperation;\n return null;\n }\n catch (e) {\n // ignore error of previous operation that we're waiting to finish\n return null;\n }\n })();\n const currentOperation = (async () => {\n let timeoutId = null;\n try {\n // Wait for either previous operation or timeout\n const timeoutPromise = acquireTimeout >= 0\n ? new Promise((_, reject) => {\n timeoutId = setTimeout(() => {\n console.warn(`@supabase/gotrue-js: Lock \"${name}\" acquisition timed out after ${acquireTimeout}ms. ` +\n 'This may be caused by another operation holding the lock. ' +\n 'Consider increasing lockAcquireTimeout or checking for stuck operations.');\n reject(new ProcessLockAcquireTimeoutError(`Acquiring process lock with name \"${name}\" timed out`));\n }, acquireTimeout);\n })\n : null;\n await Promise.race([previousOperationHandled, timeoutPromise].filter((x) => x));\n // If we reach here, previousOperationHandled won the race\n // Clear the timeout to prevent false warnings\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n }\n catch (e) {\n // Clear the timeout on error path as well\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n // Re-throw timeout errors, ignore others\n if (e instanceof LockAcquireTimeoutError) {\n throw e;\n }\n // Fall through to run fn() - previous operation finished with error\n }\n // Previous operations finished and we didn't get a race on the acquire\n // timeout, so the current operation can finally start\n return await fn();\n })();\n PROCESS_LOCKS[name] = (async () => {\n try {\n return await currentOperation;\n }\n catch (e) {\n if (e instanceof LockAcquireTimeoutError) {\n // if the current operation timed out, it doesn't mean that the previous\n // operation finished, so we need continue waiting for it to finish\n try {\n await previousOperation;\n }\n catch (prevError) {\n // Ignore previous operation errors\n }\n return null;\n }\n throw e;\n }\n })();\n // finally wait for the current operation to finish successfully, with an\n // error or with an acquire timeout error\n return await currentOperation;\n}\n//# sourceMappingURL=locks.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvbG9ja3MuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFpRDtBQUNqRDtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSw4REFBb0I7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSx5QkFBeUI7QUFDckM7QUFDQTtBQUNBO0FBQ0EsWUFBWSwwQkFBMEI7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLG1DQUFtQztBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxpQ0FBaUM7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnRUFBZ0U7QUFDaEUsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUhBQXFILEtBQUs7QUFDMUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxjQUFjO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxLQUFLLDRCQUE0QixlQUFlO0FBQzNHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9FQUFvRSxLQUFLO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRLHNCQUFzQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUVBQW1FLEtBQUssZ0NBQWdDLGVBQWU7QUFDdkg7QUFDQTtBQUNBLHVHQUF1RyxLQUFLO0FBQzVHLHFCQUFxQjtBQUNyQixpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tb2R1bGUvbGliL2xvY2tzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN1cHBvcnRzTG9jYWxTdG9yYWdlIH0gZnJvbSAnLi9oZWxwZXJzJztcbi8qKlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5leHBvcnQgY29uc3QgaW50ZXJuYWxzID0ge1xuICAgIC8qKlxuICAgICAqIEBleHBlcmltZW50YWxcbiAgICAgKi9cbiAgICBkZWJ1ZzogISEoZ2xvYmFsVGhpcyAmJlxuICAgICAgICBzdXBwb3J0c0xvY2FsU3RvcmFnZSgpICYmXG4gICAgICAgIGdsb2JhbFRoaXMubG9jYWxTdG9yYWdlICYmXG4gICAgICAgIGdsb2JhbFRoaXMubG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N1cGFiYXNlLmdvdHJ1ZS1qcy5sb2Nrcy5kZWJ1ZycpID09PSAndHJ1ZScpLFxufTtcbi8qKlxuICogQW4gZXJyb3IgdGhyb3duIHdoZW4gYSBsb2NrIGNhbm5vdCBiZSBhY3F1aXJlZCBhZnRlciBzb21lIGFtb3VudCBvZiB0aW1lLlxuICpcbiAqIFVzZSB0aGUge0BsaW5rICNpc0FjcXVpcmVUaW1lb3V0fSBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGNoZWNraW5nIHdpdGggYGluc3RhbmNlb2ZgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgTG9ja0FjcXVpcmVUaW1lb3V0RXJyb3IgfSBmcm9tICdAc3VwYWJhc2UvYXV0aC1qcydcbiAqXG4gKiBjbGFzcyBDdXN0b21Mb2NrRXJyb3IgZXh0ZW5kcyBMb2NrQWNxdWlyZVRpbWVvdXRFcnJvciB7XG4gKiAgIGNvbnN0cnVjdG9yKCkge1xuICogICAgIHN1cGVyKCdMb2NrIHRpbWVkIG91dCcpXG4gKiAgIH1cbiAqIH1cbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgTG9ja0FjcXVpcmVUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5pc0FjcXVpcmVUaW1lb3V0ID0gdHJ1ZTtcbiAgICB9XG59XG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIHRoZSBicm93c2VyIE5hdmlnYXRvciBMb2NrIEFQSSBmYWlscyB0byBhY3F1aXJlIGEgbG9jay5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IE5hdmlnYXRvckxvY2tBY3F1aXJlVGltZW91dEVycm9yIH0gZnJvbSAnQHN1cGFiYXNlL2F1dGgtanMnXG4gKlxuICogdGhyb3cgbmV3IE5hdmlnYXRvckxvY2tBY3F1aXJlVGltZW91dEVycm9yKCdMb2NrIHRpbWVkIG91dCcpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIE5hdmlnYXRvckxvY2tBY3F1aXJlVGltZW91dEVycm9yIGV4dGVuZHMgTG9ja0FjcXVpcmVUaW1lb3V0RXJyb3Ige1xufVxuLyoqXG4gKiBFcnJvciB0aHJvd24gd2hlbiB0aGUgcHJvY2Vzcy1sZXZlbCBsb2NrIGhlbHBlciBjYW5ub3QgYWNxdWlyZSBhIGxvY2suXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBQcm9jZXNzTG9ja0FjcXVpcmVUaW1lb3V0RXJyb3IgfSBmcm9tICdAc3VwYWJhc2UvYXV0aC1qcydcbiAqXG4gKiB0aHJvdyBuZXcgUHJvY2Vzc0xvY2tBY3F1aXJlVGltZW91dEVycm9yKCdMb2NrIHRpbWVkIG91dCcpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIFByb2Nlc3NMb2NrQWNxdWlyZVRpbWVvdXRFcnJvciBleHRlbmRzIExvY2tBY3F1aXJlVGltZW91dEVycm9yIHtcbn1cbi8qKlxuICogSW1wbGVtZW50cyBhIGdsb2JhbCBleGNsdXNpdmUgbG9jayB1c2luZyB0aGUgTmF2aWdhdG9yIExvY2tNYW5hZ2VyIEFQSS4gSXRcbiAqIGlzIGF2YWlsYWJsZSBvbiBhbGwgYnJvd3NlcnMgcmVsZWFzZWQgYWZ0ZXIgMjAyMi0wMy0xNSB3aXRoIFNhZmFyaSBiZWluZyB0aGVcbiAqIGxhc3Qgb25lIHRvIHJlbGVhc2Ugc3VwcG9ydC4gSWYgdGhlIEFQSSBpcyBub3QgYXZhaWxhYmxlLCB0aGlzIGZ1bmN0aW9uIHdpbGxcbiAqIHRocm93LiBNYWtlIHN1cmUgeW91IGNoZWNrIGF2YWlsYWJsaWxpdHkgYmVmb3JlIGNvbmZpZ3VyaW5nIHtAbGlua1xuICogR29UcnVlQ2xpZW50fS5cbiAqXG4gKiBZb3UgY2FuIHR1cm4gb24gZGVidWdnaW5nIGJ5IHNldHRpbmcgdGhlIGBzdXBhYmFzZS5nb3RydWUtanMubG9ja3MuZGVidWdgXG4gKiBsb2NhbCBzdG9yYWdlIGl0ZW0gdG8gYHRydWVgLlxuICpcbiAqIEludGVybmFsczpcbiAqXG4gKiBTaW5jZSB0aGUgTG9ja01hbmFnZXIgQVBJIGRvZXMgbm90IHByZXNlcnZlIHN0YWNrIHRyYWNlcyBmb3IgdGhlIGFzeW5jXG4gKiBmdW5jdGlvbiBwYXNzZWQgaW4gdGhlIGByZXF1ZXN0YCBtZXRob2QsIGEgdHJpY2sgaXMgdXNlZCB3aGVyZSBhY3F1aXJpbmcgdGhlXG4gKiBsb2NrIHJlbGVhc2VzIGEgcHJldmlvdXNseSBzdGFydGVkIHByb21pc2UgdG8gcnVuIHRoZSBvcGVyYXRpb24gaW4gdGhlIGBmbmBcbiAqIGZ1bmN0aW9uLiBUaGUgbG9jayB3YWl0cyBmb3IgdGhhdCBwcm9taXNlIHRvIGZpbmlzaCAod2l0aCBvciB3aXRob3V0IGVycm9yKSxcbiAqIHdoaWxlIHRoZSBmdW5jdGlvbiB3aWxsIGZpbmFsbHkgd2FpdCBmb3IgdGhlIHJlc3VsdCBhbnl3YXkuXG4gKlxuICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgbG9jayB0byBiZSBhY3F1aXJlZC5cbiAqIEBwYXJhbSBhY3F1aXJlVGltZW91dCBJZiBuZWdhdGl2ZSwgbm8gdGltZW91dC4gSWYgMCBhbiBlcnJvciBpcyB0aHJvd24gaWZcbiAqICAgICAgICAgICAgICAgICAgICAgICB0aGUgbG9jayBjYW4ndCBiZSBhY3F1aXJlZCB3aXRob3V0IHdhaXRpbmcuIElmIHBvc2l0aXZlLCB0aGUgbG9jayBhY3F1aXJlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgd2lsbCB0aW1lIG91dCBhZnRlciBzbyBtYW55IG1pbGxpc2Vjb25kcy4gQW4gZXJyb3IgaXNcbiAqICAgICAgICAgICAgICAgICAgICAgICBhIHRpbWVvdXQgaWYgaXQgaGFzIGBpc0FjcXVpcmVUaW1lb3V0YCBzZXQgdG8gdHJ1ZS5cbiAqIEBwYXJhbSBmbiBUaGUgb3BlcmF0aW9uIHRvIHJ1biBvbmNlIHRoZSBsb2NrIGlzIGFjcXVpcmVkLlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBhd2FpdCBuYXZpZ2F0b3JMb2NrKCdzeW5jLXVzZXInLCAxMDAwLCBhc3luYyAoKSA9PiB7XG4gKiAgIGF3YWl0IHJlZnJlc2hTZXNzaW9uKClcbiAqIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG5hdmlnYXRvckxvY2sobmFtZSwgYWNxdWlyZVRpbWVvdXQsIGZuKSB7XG4gICAgaWYgKGludGVybmFscy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZygnQHN1cGFiYXNlL2dvdHJ1ZS1qczogbmF2aWdhdG9yTG9jazogYWNxdWlyZSBsb2NrJywgbmFtZSwgYWNxdWlyZVRpbWVvdXQpO1xuICAgIH1cbiAgICBjb25zdCBhYm9ydENvbnRyb2xsZXIgPSBuZXcgZ2xvYmFsVGhpcy5BYm9ydENvbnRyb2xsZXIoKTtcbiAgICBsZXQgYWNxdWlyZVRpbWVvdXRUaW1lcjtcbiAgICBpZiAoYWNxdWlyZVRpbWVvdXQgPiAwKSB7XG4gICAgICAgIGFjcXVpcmVUaW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGFib3J0Q29udHJvbGxlci5hYm9ydCgpO1xuICAgICAgICAgICAgaWYgKGludGVybmFscy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBuYXZpZ2F0b3JMb2NrIGFjcXVpcmUgdGltZWQgb3V0JywgbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGFjcXVpcmVUaW1lb3V0KTtcbiAgICB9XG4gICAgLy8gTUROIGFydGljbGU6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Mb2NrTWFuYWdlci9yZXF1ZXN0XG4gICAgLy8gV3JhcHBpbmcgbmF2aWdhdG9yLmxvY2tzLnJlcXVlc3QoKSB3aXRoIGEgcGxhaW4gUHJvbWlzZSBpcyBkb25lIGFzIHNvbWVcbiAgICAvLyBsaWJyYXJpZXMgbGlrZSB6b25lLmpzIHBhdGNoIHRoZSBQcm9taXNlIG9iamVjdCB0byB0cmFjayB0aGUgZXhlY3V0aW9uXG4gICAgLy8gY29udGV4dC4gSG93ZXZlciwgaXQgYXBwZWFycyB0aGF0IG1vc3QgYnJvd3NlcnMgdXNlIGFuIGludGVybmFsIHByb21pc2VcbiAgICAvLyBpbXBsZW1lbnRhdGlvbiB3aGVuIHVzaW5nIHRoZSBuYXZpZ2F0b3IubG9ja3MucmVxdWVzdCgpIEFQSSBjYXVzaW5nIHRoZW1cbiAgICAvLyB0byBsb3NlIGNvbnRleHQgYW5kIGVtaXQgY29uZnVzaW5nIGxvZyBtZXNzYWdlcyBvciBicmVhayBjZXJ0YWluIGZlYXR1cmVzLlxuICAgIC8vIFRoaXMgd3JhcHBpbmcgaXMgYmVsaWV2ZWQgdG8gaGVscCB6b25lLmpzIHRyYWNrIHRoZSBleGVjdXRpb24gY29udGV4dFxuICAgIC8vIGJldHRlci5cbiAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gYXdhaXQgZ2xvYmFsVGhpcy5uYXZpZ2F0b3IubG9ja3MucmVxdWVzdChuYW1lLCBhY3F1aXJlVGltZW91dCA9PT0gMFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgbW9kZTogJ2V4Y2x1c2l2ZScsXG4gICAgICAgICAgICAgICAgaWZBdmFpbGFibGU6IHRydWUsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBtb2RlOiAnZXhjbHVzaXZlJyxcbiAgICAgICAgICAgICAgICBzaWduYWw6IGFib3J0Q29udHJvbGxlci5zaWduYWwsXG4gICAgICAgICAgICB9LCBhc3luYyAobG9jaykgPT4ge1xuICAgICAgICAgICAgaWYgKGxvY2spIHtcbiAgICAgICAgICAgICAgICAvLyBMb2NrIGFjcXVpcmVkIOKAlCBjYW5jZWwgdGhlIGFjcXVpcmUtdGltZW91dCB0aW1lciBzbyBpdCBjYW5ub3QgZmlyZVxuICAgICAgICAgICAgICAgIC8vIHdoaWxlIGZuKCkgaXMgcnVubmluZy4gV2l0aG91dCB0aGlzLCBhIGRlbGF5ZWQgdGltZW91dCBhYm9ydCB3b3VsZFxuICAgICAgICAgICAgICAgIC8vIHNldCBzaWduYWwuYWJvcnRlZCA9IHRydWUgZXZlbiB0aG91Z2ggd2UgYWxyZWFkeSBob2xkIHRoZSBsb2NrLFxuICAgICAgICAgICAgICAgIC8vIGNhdXNpbmcgYSBzdWJzZXF1ZW50IHN0ZWFsIHRvIGJlIG1pc2NsYXNzaWZpZWQgYXMgXCJvdXIgdGltZW91dFxuICAgICAgICAgICAgICAgIC8vIGZpcmVkXCIgYW5kIHRyaWdnZXJpbmcgYSBzcHVyaW91cyBzdGVhbC1iYWNrIGNhc2NhZGUuXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGFjcXVpcmVUaW1lb3V0VGltZXIpO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0BzdXBhYmFzZS9nb3RydWUtanM6IG5hdmlnYXRvckxvY2s6IGFjcXVpcmVkJywgbmFtZSwgbG9jay5uYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IGZuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnQHN1cGFiYXNlL2dvdHJ1ZS1qczogbmF2aWdhdG9yTG9jazogcmVsZWFzZWQnLCBuYW1lLCBsb2NrLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGFjcXVpcmVUaW1lb3V0ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBuYXZpZ2F0b3JMb2NrOiBub3QgaW1tZWRpYXRlbHkgYXZhaWxhYmxlJywgbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5hdmlnYXRvckxvY2tBY3F1aXJlVGltZW91dEVycm9yKGBBY3F1aXJpbmcgYW4gZXhjbHVzaXZlIE5hdmlnYXRvciBMb2NrTWFuYWdlciBsb2NrIFwiJHtuYW1lfVwiIGltbWVkaWF0ZWx5IGZhaWxlZGApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGludGVybmFscy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnbG9iYWxUaGlzLm5hdmlnYXRvci5sb2Nrcy5xdWVyeSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBOYXZpZ2F0b3IgTG9ja01hbmFnZXIgc3RhdGUnLCBKU09OLnN0cmluZ2lmeShyZXN1bHQsIG51bGwsICcgICcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBFcnJvciB3aGVuIHF1ZXJ5aW5nIE5hdmlnYXRvciBMb2NrTWFuYWdlciBzdGF0ZScsIGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIEJyb3dzZXIgaXMgbm90IGZvbGxvd2luZyB0aGUgTmF2aWdhdG9yIExvY2tNYW5hZ2VyIHNwZWMsIGl0XG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybmVkIGEgbnVsbCBsb2NrIHdoZW4gd2UgZGlkbid0IHVzZSBpZkF2YWlsYWJsZS4gU28gd2UgY2FuXG4gICAgICAgICAgICAgICAgICAgIC8vIHByZXRlbmQgdGhlIGxvY2sgaXMgYWNxdWlyZWQgaW4gdGhlIG5hbWUgb2YgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgdXNlciBleHBlcmllbmNlIGFuZCBqdXN0IHJ1biB0aGUgZnVuY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignQHN1cGFiYXNlL2dvdHJ1ZS1qczogTmF2aWdhdG9yIExvY2tNYW5hZ2VyIHJldHVybmVkIGEgbnVsbCBsb2NrIHdoZW4gdXNpbmcgI3JlcXVlc3Qgd2l0aG91dCBpZkF2YWlsYWJsZSBzZXQgdG8gdHJ1ZSwgaXQgYXBwZWFycyB0aGlzIGJyb3dzZXIgaXMgbm90IGZvbGxvd2luZyB0aGUgTG9ja01hbmFnZXIgc3BlYyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTG9ja01hbmFnZXIvcmVxdWVzdCcpO1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoYWNxdWlyZVRpbWVvdXRUaW1lcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBmbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIC8vIEFsd2F5cyBjbGVhciB0aGUgYWNxdWlyZSB0aW1lb3V0IG9uY2UgdGhlIHJlcXVlc3Qgc2V0dGxlcywgc28gaXQgY2Fubm90XG4gICAgICAgIC8vIGZpcmUgbGF0ZXIgYW5kIGluY29ycmVjdGx5IGFib3J0L2xvZyBhZnRlciBhIHJlamVjdGlvbi5cbiAgICAgICAgaWYgKGFjcXVpcmVUaW1lb3V0ID4gMCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGFjcXVpcmVUaW1lb3V0VGltZXIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIERPTUV4Y2VwdGlvbiBkb2VzIG5vdCBleHRlbmQgRXJyb3IgaW4gTm9kZS5qcywgc28gdXNlIHN0cnVjdHVyYWwgY2hlY2tcbiAgICAgICAgaWYgKGUgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgJ25hbWUnIGluIGUgJiZcbiAgICAgICAgICAgIGUubmFtZSA9PT0gJ0Fib3J0RXJyb3InICYmXG4gICAgICAgICAgICBhY3F1aXJlVGltZW91dCA+IDApIHtcbiAgICAgICAgICAgIGlmIChhYm9ydENvbnRyb2xsZXIuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAvLyBPVVIgdGltZW91dCBmaXJlZCDigJQgdGhlIGxvY2sgaXMgZ2VudWluZWx5IG9ycGhhbmVkLiBTdGVhbCBpdC5cbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIFRoZSBsb2NrIGFjcXVpc2l0aW9uIHdhcyBhYm9ydGVkIGJlY2F1c2UgdGhlIHRpbWVvdXQgZmlyZWQgd2hpbGUgdGhlXG4gICAgICAgICAgICAgICAgLy8gcmVxdWVzdCB3YXMgc3RpbGwgcGVuZGluZy4gVGhpcyB0eXBpY2FsbHkgbWVhbnMgYW5vdGhlciBsb2NrIGhvbGRlciBpc1xuICAgICAgICAgICAgICAgIC8vIG5vdCByZWxlYXNpbmcgdGhlIGxvY2ssIHBvc3NpYmx5IGR1ZSB0byBSZWFjdCBTdHJpY3QgTW9kZSdzXG4gICAgICAgICAgICAgICAgLy8gZG91YmxlLW1vdW50L3VubW91bnQgYmVoYXZpb3Igb3IgYSBjb21wb25lbnQgdW5tb3VudGluZyBtaWQtb3BlcmF0aW9uLFxuICAgICAgICAgICAgICAgIC8vIGxlYXZpbmcgYW4gb3JwaGFuZWQgbG9jay5cbiAgICAgICAgICAgICAgICAvL1xuICAgICAgICAgICAgICAgIC8vIFJlY292ZXJ5OiB1c2UgeyBzdGVhbDogdHJ1ZSB9IHRvIGZvcmNlZnVsbHkgYWNxdWlyZSB0aGUgbG9jay4gUGVyIHRoZVxuICAgICAgICAgICAgICAgIC8vIFdlYiBMb2NrcyBBUEkgc3BlYywgdGhpcyByZWxlYXNlcyBhbnkgY3VycmVudGx5IGhlbGQgbG9jayB3aXRoIHRoZSBzYW1lXG4gICAgICAgICAgICAgICAgLy8gbmFtZSBhbmQgZ3JhbnRzIHRoZSByZXF1ZXN0IGltbWVkaWF0ZWx5LCBwcmVlbXB0aW5nIGFueSBxdWV1ZWQgcmVxdWVzdHMuXG4gICAgICAgICAgICAgICAgLy8gVGhlIHByZXZpb3VzIGhvbGRlcidzIGNhbGxiYWNrIGNvbnRpbnVlcyBydW5uaW5nIHRvIGNvbXBsZXRpb24gYnV0IG5vXG4gICAgICAgICAgICAgICAgLy8gbG9uZ2VyIGhvbGRzIHRoZSBsb2NrIGZvciBleGNsdXNpb24gcHVycG9zZXMuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9zdXBhYmFzZS9zdXBhYmFzZS9pc3N1ZXMvNDI1MDVcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJuYWxzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBuYXZpZ2F0b3JMb2NrOiBhY3F1aXJlIHRpbWVvdXQsIHJlY292ZXJpbmcgYnkgc3RlYWxpbmcgbG9jaycsIG5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEBzdXBhYmFzZS9nb3RydWUtanM6IExvY2sgXCIke25hbWV9XCIgd2FzIG5vdCByZWxlYXNlZCB3aXRoaW4gJHthY3F1aXJlVGltZW91dH1tcy4gYCArXG4gICAgICAgICAgICAgICAgICAgICdUaGlzIG1heSBpbmRpY2F0ZSBhbiBvcnBoYW5lZCBsb2NrIGZyb20gYSBjb21wb25lbnQgdW5tb3VudCAoZS5nLiwgUmVhY3QgU3RyaWN0IE1vZGUpLiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ0ZvcmNlZnVsbHkgYWNxdWlyaW5nIHRoZSBsb2NrIHRvIHJlY292ZXIuJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gZ2xvYmFsVGhpcy5uYXZpZ2F0b3IubG9ja3MucmVxdWVzdChuYW1lLCB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGU6ICdleGNsdXNpdmUnLFxuICAgICAgICAgICAgICAgICAgICBzdGVhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9LCBhc3luYyAobG9jaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9jaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGludGVybmFscy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdAc3VwYWJhc2UvZ290cnVlLWpzOiBuYXZpZ2F0b3JMb2NrOiByZWNvdmVyZWQgKHN0b2xlbiknLCBuYW1lLCBsb2NrLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgZm4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0BzdXBhYmFzZS9nb3RydWUtanM6IG5hdmlnYXRvckxvY2s6IHJlbGVhc2VkIChzdG9sZW4pJywgbmFtZSwgbG9jay5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIHNob3VsZCBub3QgaGFwcGVuIHdpdGggc3RlYWw6IHRydWUsIGJ1dCBoYW5kbGUgZ3JhY2VmdWxseS5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignQHN1cGFiYXNlL2dvdHJ1ZS1qczogTmF2aWdhdG9yIExvY2tNYW5hZ2VyIHJldHVybmVkIG51bGwgbG9jayBldmVuIHdpdGggc3RlYWw6IHRydWUnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhd2FpdCBmbigpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gV2UgSEVMRCB0aGUgbG9jayBidXQgYW5vdGhlciByZXF1ZXN0IHN0b2xlIGl0IGZyb20gdXMuXG4gICAgICAgICAgICAgICAgLy8gUGVyIHRoZSBXZWIgTG9ja3Mgc3BlYywgb3VyIGZuKCkgY2FsbGJhY2sgaXMgc3RpbGwgcnVubmluZyBhcyBhblxuICAgICAgICAgICAgICAgIC8vIG9ycGhhbmVkIGJhY2tncm91bmQgdGFzayDigJQgZG8gTk9UIHN0ZWFsIGJhY2suIFN0ZWFsaW5nIGJhY2sgd291bGRcbiAgICAgICAgICAgICAgICAvLyBjYXVzZSBhIGNhc2NhZGUgKEEgc3RlYWxzIEIsIEIgc3RlYWxzIEEsIC4uLikgYW5kIHJ1biBmbigpIGEgc2Vjb25kXG4gICAgICAgICAgICAgICAgLy8gdGltZSBjb25jdXJyZW50bHksIGNvcnJ1cHRpbmcgYXV0aCBzdGF0ZS5cbiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRvIGEgdHlwZWQgZXJyb3Igc28gY2FsbGVycyAoZS5nLiBfYXV0b1JlZnJlc2hUb2tlblRpY2spXG4gICAgICAgICAgICAgICAgLy8gY2FuIGhhbmRsZS9maWx0ZXIgaXQgd2l0aG91dCBpdCBsZWFraW5nIHRvIFNlbnRyeSBhcyBhIHJhdyBBYm9ydEVycm9yLlxuICAgICAgICAgICAgICAgIGlmIChpbnRlcm5hbHMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0BzdXBhYmFzZS9nb3RydWUtanM6IG5hdmlnYXRvckxvY2s6IGxvY2sgd2FzIHN0b2xlbiBieSBhbm90aGVyIHJlcXVlc3QnLCBuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IE5hdmlnYXRvckxvY2tBY3F1aXJlVGltZW91dEVycm9yKGBMb2NrIFwiJHtuYW1lfVwiIHdhcyByZWxlYXNlZCBiZWNhdXNlIGFub3RoZXIgcmVxdWVzdCBzdG9sZSBpdGApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IGU7XG4gICAgfVxufVxuY29uc3QgUFJPQ0VTU19MT0NLUyA9IHt9O1xuLyoqXG4gKiBJbXBsZW1lbnRzIGEgZ2xvYmFsIGV4Y2x1c2l2ZSBsb2NrIHRoYXQgd29ya3Mgb25seSBpbiB0aGUgY3VycmVudCBwcm9jZXNzLlxuICogVXNlZnVsIGZvciBlbnZpcm9ubWVudHMgbGlrZSBSZWFjdCBOYXRpdmUgb3Igb3RoZXIgbm9uLWJyb3dzZXJcbiAqIHNpbmdsZS1wcm9jZXNzIChpLmUuIG5vIGNvbmNlcHQgb2YgXCJ0YWJzXCIpIGVudmlyb25tZW50cy5cbiAqXG4gKiBVc2Uge0BsaW5rICNuYXZpZ2F0b3JMb2NrfSBpbiBicm93c2VyIGVudmlyb25tZW50cy5cbiAqXG4gKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSBsb2NrIHRvIGJlIGFjcXVpcmVkLlxuICogQHBhcmFtIGFjcXVpcmVUaW1lb3V0IElmIG5lZ2F0aXZlLCBubyB0aW1lb3V0LiBJZiAwIGFuIGVycm9yIGlzIHRocm93biBpZlxuICogICAgICAgICAgICAgICAgICAgICAgIHRoZSBsb2NrIGNhbid0IGJlIGFjcXVpcmVkIHdpdGhvdXQgd2FpdGluZy4gSWYgcG9zaXRpdmUsIHRoZSBsb2NrIGFjcXVpcmVcbiAqICAgICAgICAgICAgICAgICAgICAgICB3aWxsIHRpbWUgb3V0IGFmdGVyIHNvIG1hbnkgbWlsbGlzZWNvbmRzLiBBbiBlcnJvciBpc1xuICogICAgICAgICAgICAgICAgICAgICAgIGEgdGltZW91dCBpZiBpdCBoYXMgYGlzQWNxdWlyZVRpbWVvdXRgIHNldCB0byB0cnVlLlxuICogQHBhcmFtIGZuIFRoZSBvcGVyYXRpb24gdG8gcnVuIG9uY2UgdGhlIGxvY2sgaXMgYWNxdWlyZWQuXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGF3YWl0IHByb2Nlc3NMb2NrKCdtaWdyYXRlJywgNTAwMCwgYXN5bmMgKCkgPT4ge1xuICogICBhd2FpdCBydW5NaWdyYXRpb24oKVxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0xvY2sobmFtZSwgYWNxdWlyZVRpbWVvdXQsIGZuKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHByZXZpb3VzT3BlcmF0aW9uID0gKF9hID0gUFJPQ0VTU19MT0NLU1tuYW1lXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgLy8gV3JhcCBwcmV2aW91c09wZXJhdGlvbiB0byBoYW5kbGUgZXJyb3JzIHdpdGhvdXQgdXNpbmcgLmNhdGNoKClcbiAgICAvLyBUaGlzIGF2b2lkcyBGaXJlZm94IGNvbnRlbnQgc2NyaXB0IHNlY3VyaXR5IGVycm9yc1xuICAgIGNvbnN0IHByZXZpb3VzT3BlcmF0aW9uSGFuZGxlZCA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBwcmV2aW91c09wZXJhdGlvbjtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBpZ25vcmUgZXJyb3Igb2YgcHJldmlvdXMgb3BlcmF0aW9uIHRoYXQgd2UncmUgd2FpdGluZyB0byBmaW5pc2hcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfSkoKTtcbiAgICBjb25zdCBjdXJyZW50T3BlcmF0aW9uID0gKGFzeW5jICgpID0+IHtcbiAgICAgICAgbGV0IHRpbWVvdXRJZCA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXYWl0IGZvciBlaXRoZXIgcHJldmlvdXMgb3BlcmF0aW9uIG9yIHRpbWVvdXRcbiAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRQcm9taXNlID0gYWNxdWlyZVRpbWVvdXQgPj0gMFxuICAgICAgICAgICAgICAgID8gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgQHN1cGFiYXNlL2dvdHJ1ZS1qczogTG9jayBcIiR7bmFtZX1cIiBhY3F1aXNpdGlvbiB0aW1lZCBvdXQgYWZ0ZXIgJHthY3F1aXJlVGltZW91dH1tcy4gYCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1RoaXMgbWF5IGJlIGNhdXNlZCBieSBhbm90aGVyIG9wZXJhdGlvbiBob2xkaW5nIHRoZSBsb2NrLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ29uc2lkZXIgaW5jcmVhc2luZyBsb2NrQWNxdWlyZVRpbWVvdXQgb3IgY2hlY2tpbmcgZm9yIHN0dWNrIG9wZXJhdGlvbnMuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IFByb2Nlc3NMb2NrQWNxdWlyZVRpbWVvdXRFcnJvcihgQWNxdWlyaW5nIHByb2Nlc3MgbG9jayB3aXRoIG5hbWUgXCIke25hbWV9XCIgdGltZWQgb3V0YCkpO1xuICAgICAgICAgICAgICAgICAgICB9LCBhY3F1aXJlVGltZW91dCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLnJhY2UoW3ByZXZpb3VzT3BlcmF0aW9uSGFuZGxlZCwgdGltZW91dFByb21pc2VdLmZpbHRlcigoeCkgPT4geCkpO1xuICAgICAgICAgICAgLy8gSWYgd2UgcmVhY2ggaGVyZSwgcHJldmlvdXNPcGVyYXRpb25IYW5kbGVkIHdvbiB0aGUgcmFjZVxuICAgICAgICAgICAgLy8gQ2xlYXIgdGhlIHRpbWVvdXQgdG8gcHJldmVudCBmYWxzZSB3YXJuaW5nc1xuICAgICAgICAgICAgaWYgKHRpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBDbGVhciB0aGUgdGltZW91dCBvbiBlcnJvciBwYXRoIGFzIHdlbGxcbiAgICAgICAgICAgIGlmICh0aW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFJlLXRocm93IHRpbWVvdXQgZXJyb3JzLCBpZ25vcmUgb3RoZXJzXG4gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIExvY2tBY3F1aXJlVGltZW91dEVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZhbGwgdGhyb3VnaCB0byBydW4gZm4oKSAtIHByZXZpb3VzIG9wZXJhdGlvbiBmaW5pc2hlZCB3aXRoIGVycm9yXG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJldmlvdXMgb3BlcmF0aW9ucyBmaW5pc2hlZCBhbmQgd2UgZGlkbid0IGdldCBhIHJhY2Ugb24gdGhlIGFjcXVpcmVcbiAgICAgICAgLy8gdGltZW91dCwgc28gdGhlIGN1cnJlbnQgb3BlcmF0aW9uIGNhbiBmaW5hbGx5IHN0YXJ0XG4gICAgICAgIHJldHVybiBhd2FpdCBmbigpO1xuICAgIH0pKCk7XG4gICAgUFJPQ0VTU19MT0NLU1tuYW1lXSA9IChhc3luYyAoKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgY3VycmVudE9wZXJhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBMb2NrQWNxdWlyZVRpbWVvdXRFcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIGlmIHRoZSBjdXJyZW50IG9wZXJhdGlvbiB0aW1lZCBvdXQsIGl0IGRvZXNuJ3QgbWVhbiB0aGF0IHRoZSBwcmV2aW91c1xuICAgICAgICAgICAgICAgIC8vIG9wZXJhdGlvbiBmaW5pc2hlZCwgc28gd2UgbmVlZCBjb250aW51ZSB3YWl0aW5nIGZvciBpdCB0byBmaW5pc2hcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBhd2FpdCBwcmV2aW91c09wZXJhdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKHByZXZFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAvLyBJZ25vcmUgcHJldmlvdXMgb3BlcmF0aW9uIGVycm9yc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICB9KSgpO1xuICAgIC8vIGZpbmFsbHkgd2FpdCBmb3IgdGhlIGN1cnJlbnQgb3BlcmF0aW9uIHRvIGZpbmlzaCBzdWNjZXNzZnVsbHksIHdpdGggYW5cbiAgICAvLyBlcnJvciBvciB3aXRoIGFuIGFjcXVpcmUgdGltZW91dCBlcnJvclxuICAgIHJldHVybiBhd2FpdCBjdXJyZW50T3BlcmF0aW9uO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bG9ja3MuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/locks.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/polyfills.js":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/lib/polyfills.js ***!
|
||
\*********************************************************************/
|
||
/***/ ((__unused_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 */ polyfillGlobalThis: () => (/* binding */ polyfillGlobalThis)\n/* harmony export */ });\n/**\n * https://mathiasbynens.be/notes/globalthis\n */\nfunction polyfillGlobalThis() {\n if (typeof globalThis === 'object')\n return;\n try {\n Object.defineProperty(Object.prototype, '__magic__', {\n get: function () {\n return this;\n },\n configurable: true,\n });\n // @ts-expect-error 'Allow access to magic'\n __magic__.globalThis = __magic__;\n // @ts-expect-error 'Allow access to magic'\n delete Object.prototype.__magic__;\n }\n catch (e) {\n if (typeof self !== 'undefined') {\n // @ts-expect-error 'Allow access to globals'\n self.globalThis = self;\n }\n }\n}\n//# sourceMappingURL=polyfills.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvcG9seWZpbGxzLmpzIiwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvcG9seWZpbGxzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2dsb2JhbHRoaXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBvbHlmaWxsR2xvYmFsVGhpcygpIHtcbiAgICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKVxuICAgICAgICByZXR1cm47XG4gICAgdHJ5IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5wcm90b3R5cGUsICdfX21hZ2ljX18nLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yICdBbGxvdyBhY2Nlc3MgdG8gbWFnaWMnXG4gICAgICAgIF9fbWFnaWNfXy5nbG9iYWxUaGlzID0gX19tYWdpY19fO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yICdBbGxvdyBhY2Nlc3MgdG8gbWFnaWMnXG4gICAgICAgIGRlbGV0ZSBPYmplY3QucHJvdG90eXBlLl9fbWFnaWNfXztcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciAnQWxsb3cgYWNjZXNzIHRvIGdsb2JhbHMnXG4gICAgICAgICAgICBzZWxmLmdsb2JhbFRoaXMgPSBzZWxmO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cG9seWZpbGxzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/polyfills.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/types.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/lib/types.js ***!
|
||
\*****************************************************************/
|
||
/***/ ((__unused_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 */ SIGN_OUT_SCOPES: () => (/* binding */ SIGN_OUT_SCOPES)\n/* harmony export */ });\nconst WeakPasswordReasons = ['length', 'characters', 'pwned'];\nconst AMRMethods = [\n 'password',\n 'otp',\n 'oauth',\n 'totp',\n 'mfa/totp',\n 'mfa/phone',\n 'mfa/webauthn',\n 'anonymous',\n 'sso/saml',\n 'magiclink',\n 'web3',\n 'oauth_provider/authorization_code',\n];\nconst FactorTypes = ['totp', 'phone', 'webauthn'];\nconst FactorVerificationStatuses = ['verified', 'unverified'];\nconst MFATOTPChannels = ['sms', 'whatsapp'];\nconst SIGN_OUT_SCOPES = ['global', 'local', 'others'];\n//# sourceMappingURL=types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvdHlwZXMuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tb2R1bGUvbGliL3R5cGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFdlYWtQYXNzd29yZFJlYXNvbnMgPSBbJ2xlbmd0aCcsICdjaGFyYWN0ZXJzJywgJ3B3bmVkJ107XG5jb25zdCBBTVJNZXRob2RzID0gW1xuICAgICdwYXNzd29yZCcsXG4gICAgJ290cCcsXG4gICAgJ29hdXRoJyxcbiAgICAndG90cCcsXG4gICAgJ21mYS90b3RwJyxcbiAgICAnbWZhL3Bob25lJyxcbiAgICAnbWZhL3dlYmF1dGhuJyxcbiAgICAnYW5vbnltb3VzJyxcbiAgICAnc3NvL3NhbWwnLFxuICAgICdtYWdpY2xpbmsnLFxuICAgICd3ZWIzJyxcbiAgICAnb2F1dGhfcHJvdmlkZXIvYXV0aG9yaXphdGlvbl9jb2RlJyxcbl07XG5jb25zdCBGYWN0b3JUeXBlcyA9IFsndG90cCcsICdwaG9uZScsICd3ZWJhdXRobiddO1xuY29uc3QgRmFjdG9yVmVyaWZpY2F0aW9uU3RhdHVzZXMgPSBbJ3ZlcmlmaWVkJywgJ3VudmVyaWZpZWQnXTtcbmNvbnN0IE1GQVRPVFBDaGFubmVscyA9IFsnc21zJywgJ3doYXRzYXBwJ107XG5leHBvcnQgY29uc3QgU0lHTl9PVVRfU0NPUEVTID0gWydnbG9iYWwnLCAnbG9jYWwnLCAnb3RoZXJzJ107XG4vLyMgc291cmNlTWFwcGluZ1VSTD10eXBlcy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/types.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/version.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/lib/version.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((__unused_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 */ version: () => (/* binding */ version)\n/* harmony export */ });\n// Generated automatically during releases by scripts/update-version-files.ts\n// This file provides runtime access to the package version for:\n// - HTTP request headers (e.g., X-Client-Info header for API requests)\n// - Debugging and support (identifying which version is running)\n// - Telemetry and logging (version reporting in errors/analytics)\n// - Ensuring build artifacts match the published package version\nconst version = '2.105.3';\n//# sourceMappingURL=version.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvdmVyc2lvbi5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvdmVyc2lvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBkdXJpbmcgcmVsZWFzZXMgYnkgc2NyaXB0cy91cGRhdGUtdmVyc2lvbi1maWxlcy50c1xuLy8gVGhpcyBmaWxlIHByb3ZpZGVzIHJ1bnRpbWUgYWNjZXNzIHRvIHRoZSBwYWNrYWdlIHZlcnNpb24gZm9yOlxuLy8gLSBIVFRQIHJlcXVlc3QgaGVhZGVycyAoZS5nLiwgWC1DbGllbnQtSW5mbyBoZWFkZXIgZm9yIEFQSSByZXF1ZXN0cylcbi8vIC0gRGVidWdnaW5nIGFuZCBzdXBwb3J0IChpZGVudGlmeWluZyB3aGljaCB2ZXJzaW9uIGlzIHJ1bm5pbmcpXG4vLyAtIFRlbGVtZXRyeSBhbmQgbG9nZ2luZyAodmVyc2lvbiByZXBvcnRpbmcgaW4gZXJyb3JzL2FuYWx5dGljcylcbi8vIC0gRW5zdXJpbmcgYnVpbGQgYXJ0aWZhY3RzIG1hdGNoIHRoZSBwdWJsaXNoZWQgcGFja2FnZSB2ZXJzaW9uXG5leHBvcnQgY29uc3QgdmVyc2lvbiA9ICcyLjEwNS4zJztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXZlcnNpb24uanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/version.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/web3/ethereum.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/lib/web3/ethereum.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((__unused_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 */ createSiweMessage: () => (/* binding */ createSiweMessage),\n/* harmony export */ fromHex: () => (/* binding */ fromHex),\n/* harmony export */ getAddress: () => (/* binding */ getAddress),\n/* harmony export */ toHex: () => (/* binding */ toHex)\n/* harmony export */ });\n// types and functions copied over from viem so this library doesn't depend on it\nfunction getAddress(address) {\n if (!/^0x[a-fA-F0-9]{40}$/.test(address)) {\n throw new Error(`@supabase/auth-js: Address \"${address}\" is invalid.`);\n }\n return address.toLowerCase();\n}\nfunction fromHex(hex) {\n return parseInt(hex, 16);\n}\nfunction toHex(value) {\n const bytes = new TextEncoder().encode(value);\n const hex = Array.from(bytes, (byte) => byte.toString(16).padStart(2, '0')).join('');\n return ('0x' + hex);\n}\n/**\n * Creates EIP-4361 formatted message.\n */\nfunction createSiweMessage(parameters) {\n var _a;\n const { chainId, domain, expirationTime, issuedAt = new Date(), nonce, notBefore, requestId, resources, scheme, uri, version, } = parameters;\n // Validate fields\n {\n if (!Number.isInteger(chainId))\n throw new Error(`@supabase/auth-js: Invalid SIWE message field \"chainId\". Chain ID must be a EIP-155 chain ID. Provided value: ${chainId}`);\n if (!domain)\n throw new Error(`@supabase/auth-js: Invalid SIWE message field \"domain\". Domain must be provided.`);\n if (nonce && nonce.length < 8)\n throw new Error(`@supabase/auth-js: Invalid SIWE message field \"nonce\". Nonce must be at least 8 characters. Provided value: ${nonce}`);\n if (!uri)\n throw new Error(`@supabase/auth-js: Invalid SIWE message field \"uri\". URI must be provided.`);\n if (version !== '1')\n throw new Error(`@supabase/auth-js: Invalid SIWE message field \"version\". Version must be '1'. Provided value: ${version}`);\n if ((_a = parameters.statement) === null || _a === void 0 ? void 0 : _a.includes('\\n'))\n throw new Error(`@supabase/auth-js: Invalid SIWE message field \"statement\". Statement must not include '\\\\n'. Provided value: ${parameters.statement}`);\n }\n // Construct message\n const address = getAddress(parameters.address);\n const origin = scheme ? `${scheme}://${domain}` : domain;\n const statement = parameters.statement ? `${parameters.statement}\\n` : '';\n const prefix = `${origin} wants you to sign in with your Ethereum account:\\n${address}\\n\\n${statement}`;\n let suffix = `URI: ${uri}\\nVersion: ${version}\\nChain ID: ${chainId}${nonce ? `\\nNonce: ${nonce}` : ''}\\nIssued At: ${issuedAt.toISOString()}`;\n if (expirationTime)\n suffix += `\\nExpiration Time: ${expirationTime.toISOString()}`;\n if (notBefore)\n suffix += `\\nNot Before: ${notBefore.toISOString()}`;\n if (requestId)\n suffix += `\\nRequest ID: ${requestId}`;\n if (resources) {\n let content = '\\nResources:';\n for (const resource of resources) {\n if (!resource || typeof resource !== 'string')\n throw new Error(`@supabase/auth-js: Invalid SIWE message field \"resources\". Every resource must be a valid string. Provided value: ${resource}`);\n content += `\\n- ${resource}`;\n }\n suffix += content;\n }\n return `${prefix}\\n${suffix}`;\n}\n//# sourceMappingURL=ethereum.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvd2ViMy9ldGhlcmV1bS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7QUFDTztBQUNQLHlCQUF5QixHQUFHO0FBQzVCLHVEQUF1RCxRQUFRO0FBQy9EO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0EsWUFBWSx3SEFBd0g7QUFDcEk7QUFDQTtBQUNBO0FBQ0EsNklBQTZJLFFBQVE7QUFDcko7QUFDQTtBQUNBO0FBQ0EsMklBQTJJLE1BQU07QUFDako7QUFDQTtBQUNBO0FBQ0EsNkhBQTZILFFBQVE7QUFDckk7QUFDQSw0SUFBNEkscUJBQXFCO0FBQ2pLO0FBQ0E7QUFDQTtBQUNBLCtCQUErQixPQUFPLEtBQUssT0FBTztBQUNsRCxnREFBZ0QscUJBQXFCO0FBQ3JFLHNCQUFzQixRQUFRLG9EQUFvRCxRQUFRLE1BQU0sVUFBVTtBQUMxRyx5QkFBeUIsSUFBSSxhQUFhLFFBQVEsY0FBYyxRQUFRLEVBQUUsb0JBQW9CLE1BQU0sT0FBTyxlQUFlLHVCQUF1QjtBQUNqSjtBQUNBLHdDQUF3Qyw2QkFBNkI7QUFDckU7QUFDQSxtQ0FBbUMsd0JBQXdCO0FBQzNEO0FBQ0EsbUNBQW1DLFVBQVU7QUFDN0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxSkFBcUosU0FBUztBQUM5Siw4QkFBOEIsU0FBUztBQUN2QztBQUNBO0FBQ0E7QUFDQSxjQUFjLE9BQU8sSUFBSSxPQUFPO0FBQ2hDO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tb2R1bGUvbGliL3dlYjMvZXRoZXJldW0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gdHlwZXMgYW5kIGZ1bmN0aW9ucyBjb3BpZWQgb3ZlciBmcm9tIHZpZW0gc28gdGhpcyBsaWJyYXJ5IGRvZXNuJ3QgZGVwZW5kIG9uIGl0XG5leHBvcnQgZnVuY3Rpb24gZ2V0QWRkcmVzcyhhZGRyZXNzKSB7XG4gICAgaWYgKCEvXjB4W2EtZkEtRjAtOV17NDB9JC8udGVzdChhZGRyZXNzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEBzdXBhYmFzZS9hdXRoLWpzOiBBZGRyZXNzIFwiJHthZGRyZXNzfVwiIGlzIGludmFsaWQuYCk7XG4gICAgfVxuICAgIHJldHVybiBhZGRyZXNzLnRvTG93ZXJDYXNlKCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZnJvbUhleChoZXgpIHtcbiAgICByZXR1cm4gcGFyc2VJbnQoaGV4LCAxNik7XG59XG5leHBvcnQgZnVuY3Rpb24gdG9IZXgodmFsdWUpIHtcbiAgICBjb25zdCBieXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh2YWx1ZSk7XG4gICAgY29uc3QgaGV4ID0gQXJyYXkuZnJvbShieXRlcywgKGJ5dGUpID0+IGJ5dGUudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsICcwJykpLmpvaW4oJycpO1xuICAgIHJldHVybiAoJzB4JyArIGhleCk7XG59XG4vKipcbiAqIENyZWF0ZXMgRUlQLTQzNjEgZm9ybWF0dGVkIG1lc3NhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTaXdlTWVzc2FnZShwYXJhbWV0ZXJzKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgY2hhaW5JZCwgZG9tYWluLCBleHBpcmF0aW9uVGltZSwgaXNzdWVkQXQgPSBuZXcgRGF0ZSgpLCBub25jZSwgbm90QmVmb3JlLCByZXF1ZXN0SWQsIHJlc291cmNlcywgc2NoZW1lLCB1cmksIHZlcnNpb24sIH0gPSBwYXJhbWV0ZXJzO1xuICAgIC8vIFZhbGlkYXRlIGZpZWxkc1xuICAgIHtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKGNoYWluSWQpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBAc3VwYWJhc2UvYXV0aC1qczogSW52YWxpZCBTSVdFIG1lc3NhZ2UgZmllbGQgXCJjaGFpbklkXCIuIENoYWluIElEIG11c3QgYmUgYSBFSVAtMTU1IGNoYWluIElELiBQcm92aWRlZCB2YWx1ZTogJHtjaGFpbklkfWApO1xuICAgICAgICBpZiAoIWRvbWFpbilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL2F1dGgtanM6IEludmFsaWQgU0lXRSBtZXNzYWdlIGZpZWxkIFwiZG9tYWluXCIuIERvbWFpbiBtdXN0IGJlIHByb3ZpZGVkLmApO1xuICAgICAgICBpZiAobm9uY2UgJiYgbm9uY2UubGVuZ3RoIDwgOClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL2F1dGgtanM6IEludmFsaWQgU0lXRSBtZXNzYWdlIGZpZWxkIFwibm9uY2VcIi4gTm9uY2UgbXVzdCBiZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMuIFByb3ZpZGVkIHZhbHVlOiAke25vbmNlfWApO1xuICAgICAgICBpZiAoIXVyaSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL2F1dGgtanM6IEludmFsaWQgU0lXRSBtZXNzYWdlIGZpZWxkIFwidXJpXCIuIFVSSSBtdXN0IGJlIHByb3ZpZGVkLmApO1xuICAgICAgICBpZiAodmVyc2lvbiAhPT0gJzEnKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBAc3VwYWJhc2UvYXV0aC1qczogSW52YWxpZCBTSVdFIG1lc3NhZ2UgZmllbGQgXCJ2ZXJzaW9uXCIuIFZlcnNpb24gbXVzdCBiZSAnMScuIFByb3ZpZGVkIHZhbHVlOiAke3ZlcnNpb259YCk7XG4gICAgICAgIGlmICgoX2EgPSBwYXJhbWV0ZXJzLnN0YXRlbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmluY2x1ZGVzKCdcXG4nKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL2F1dGgtanM6IEludmFsaWQgU0lXRSBtZXNzYWdlIGZpZWxkIFwic3RhdGVtZW50XCIuIFN0YXRlbWVudCBtdXN0IG5vdCBpbmNsdWRlICdcXFxcbicuIFByb3ZpZGVkIHZhbHVlOiAke3BhcmFtZXRlcnMuc3RhdGVtZW50fWApO1xuICAgIH1cbiAgICAvLyBDb25zdHJ1Y3QgbWVzc2FnZVxuICAgIGNvbnN0IGFkZHJlc3MgPSBnZXRBZGRyZXNzKHBhcmFtZXRlcnMuYWRkcmVzcyk7XG4gICAgY29uc3Qgb3JpZ2luID0gc2NoZW1lID8gYCR7c2NoZW1lfTovLyR7ZG9tYWlufWAgOiBkb21haW47XG4gICAgY29uc3Qgc3RhdGVtZW50ID0gcGFyYW1ldGVycy5zdGF0ZW1lbnQgPyBgJHtwYXJhbWV0ZXJzLnN0YXRlbWVudH1cXG5gIDogJyc7XG4gICAgY29uc3QgcHJlZml4ID0gYCR7b3JpZ2lufSB3YW50cyB5b3UgdG8gc2lnbiBpbiB3aXRoIHlvdXIgRXRoZXJldW0gYWNjb3VudDpcXG4ke2FkZHJlc3N9XFxuXFxuJHtzdGF0ZW1lbnR9YDtcbiAgICBsZXQgc3VmZml4ID0gYFVSSTogJHt1cml9XFxuVmVyc2lvbjogJHt2ZXJzaW9ufVxcbkNoYWluIElEOiAke2NoYWluSWR9JHtub25jZSA/IGBcXG5Ob25jZTogJHtub25jZX1gIDogJyd9XFxuSXNzdWVkIEF0OiAke2lzc3VlZEF0LnRvSVNPU3RyaW5nKCl9YDtcbiAgICBpZiAoZXhwaXJhdGlvblRpbWUpXG4gICAgICAgIHN1ZmZpeCArPSBgXFxuRXhwaXJhdGlvbiBUaW1lOiAke2V4cGlyYXRpb25UaW1lLnRvSVNPU3RyaW5nKCl9YDtcbiAgICBpZiAobm90QmVmb3JlKVxuICAgICAgICBzdWZmaXggKz0gYFxcbk5vdCBCZWZvcmU6ICR7bm90QmVmb3JlLnRvSVNPU3RyaW5nKCl9YDtcbiAgICBpZiAocmVxdWVzdElkKVxuICAgICAgICBzdWZmaXggKz0gYFxcblJlcXVlc3QgSUQ6ICR7cmVxdWVzdElkfWA7XG4gICAgaWYgKHJlc291cmNlcykge1xuICAgICAgICBsZXQgY29udGVudCA9ICdcXG5SZXNvdXJjZXM6JztcbiAgICAgICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiByZXNvdXJjZXMpIHtcbiAgICAgICAgICAgIGlmICghcmVzb3VyY2UgfHwgdHlwZW9mIHJlc291cmNlICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEBzdXBhYmFzZS9hdXRoLWpzOiBJbnZhbGlkIFNJV0UgbWVzc2FnZSBmaWVsZCBcInJlc291cmNlc1wiLiBFdmVyeSByZXNvdXJjZSBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nLiBQcm92aWRlZCB2YWx1ZTogJHtyZXNvdXJjZX1gKTtcbiAgICAgICAgICAgIGNvbnRlbnQgKz0gYFxcbi0gJHtyZXNvdXJjZX1gO1xuICAgICAgICB9XG4gICAgICAgIHN1ZmZpeCArPSBjb250ZW50O1xuICAgIH1cbiAgICByZXR1cm4gYCR7cHJlZml4fVxcbiR7c3VmZml4fWA7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ldGhlcmV1bS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/web3/ethereum.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/webauthn.errors.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/lib/webauthn.errors.js ***!
|
||
\***************************************************************************/
|
||
/***/ ((__unused_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 */ WebAuthnError: () => (/* binding */ WebAuthnError),\n/* harmony export */ WebAuthnUnknownError: () => (/* binding */ WebAuthnUnknownError),\n/* harmony export */ identifyAuthenticationError: () => (/* binding */ identifyAuthenticationError),\n/* harmony export */ identifyRegistrationError: () => (/* binding */ identifyRegistrationError),\n/* harmony export */ isWebAuthnError: () => (/* binding */ isWebAuthnError)\n/* harmony export */ });\n/* harmony import */ var _webauthn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./webauthn */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/webauthn.js\");\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n\n/**\n * A custom Error used to return a more nuanced error detailing _why_ one of the eight documented\n * errors in the spec was raised after calling `navigator.credentials.create()` or\n * `navigator.credentials.get()`:\n *\n * - `AbortError`\n * - `ConstraintError`\n * - `InvalidStateError`\n * - `NotAllowedError`\n * - `NotSupportedError`\n * - `SecurityError`\n * - `TypeError`\n * - `UnknownError`\n *\n * Error messages were determined through investigation of the spec to determine under which\n * scenarios a given error would be raised.\n */\nclass WebAuthnError extends Error {\n constructor({ message, code, cause, name, }) {\n var _a;\n // @ts-ignore: help Rollup understand that `cause` is okay to set\n super(message, { cause });\n this.__isWebAuthnError = true;\n this.name = (_a = name !== null && name !== void 0 ? name : (cause instanceof Error ? cause.name : undefined)) !== null && _a !== void 0 ? _a : 'Unknown Error';\n this.code = code;\n }\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n };\n }\n}\n/**\n * Error class for unknown WebAuthn errors.\n * Wraps unexpected errors that don't match known WebAuthn error conditions.\n */\nclass WebAuthnUnknownError extends WebAuthnError {\n constructor(message, originalError) {\n super({\n code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n cause: originalError,\n message,\n });\n this.name = 'WebAuthnUnknownError';\n this.originalError = originalError;\n }\n}\n/**\n * Type guard to check if an error is a WebAuthnError.\n * @param {unknown} error - The error to check\n * @returns {boolean} True if the error is a WebAuthnError\n */\nfunction isWebAuthnError(error) {\n return typeof error === 'object' && error !== null && '__isWebAuthnError' in error;\n}\n/**\n * Attempt to intuit _why_ an error was raised after calling `navigator.credentials.create()`.\n * Maps browser errors to specific WebAuthn error codes for better debugging.\n * @param {Object} params - Error identification parameters\n * @param {Error} params.error - The error thrown by the browser\n * @param {CredentialCreationOptions} params.options - The options passed to credentials.create()\n * @returns {WebAuthnError} A WebAuthnError with a specific error code\n * @see {@link https://w3c.github.io/webauthn/#sctn-createCredential W3C WebAuthn Spec - Create Credential}\n */\nfunction identifyRegistrationError({ error, options, }) {\n var _a, _b, _c;\n const { publicKey } = options;\n if (!publicKey) {\n throw Error('options was missing required publicKey property');\n }\n if (error.name === 'AbortError') {\n if (options.signal instanceof AbortSignal) {\n // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 16)\n return new WebAuthnError({\n message: 'Registration ceremony was sent an abort signal',\n code: 'ERROR_CEREMONY_ABORTED',\n cause: error,\n });\n }\n }\n else if (error.name === 'ConstraintError') {\n if (((_a = publicKey.authenticatorSelection) === null || _a === void 0 ? void 0 : _a.requireResidentKey) === true) {\n // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 4)\n return new WebAuthnError({\n message: 'Discoverable credentials were required but no available authenticator supported it',\n code: 'ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT',\n cause: error,\n });\n }\n else if (\n // @ts-ignore: `mediation` doesn't yet exist on CredentialCreationOptions but it's possible as of Sept 2024\n options.mediation === 'conditional' &&\n ((_b = publicKey.authenticatorSelection) === null || _b === void 0 ? void 0 : _b.userVerification) === 'required') {\n // https://w3c.github.io/webauthn/#sctn-createCredential (Step 22.4)\n return new WebAuthnError({\n message: 'User verification was required during automatic registration but it could not be performed',\n code: 'ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE',\n cause: error,\n });\n }\n else if (((_c = publicKey.authenticatorSelection) === null || _c === void 0 ? void 0 : _c.userVerification) === 'required') {\n // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 5)\n return new WebAuthnError({\n message: 'User verification was required but no available authenticator supported it',\n code: 'ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT',\n cause: error,\n });\n }\n }\n else if (error.name === 'InvalidStateError') {\n // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 20)\n // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 3)\n return new WebAuthnError({\n message: 'The authenticator was previously registered',\n code: 'ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED',\n cause: error,\n });\n }\n else if (error.name === 'NotAllowedError') {\n /**\n * Pass the error directly through. Platforms are overloading this error beyond what the spec\n * defines and we don't want to overwrite potentially useful error messages.\n */\n return new WebAuthnError({\n message: error.message,\n code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n cause: error,\n });\n }\n else if (error.name === 'NotSupportedError') {\n const validPubKeyCredParams = publicKey.pubKeyCredParams.filter((param) => param.type === 'public-key');\n if (validPubKeyCredParams.length === 0) {\n // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 10)\n return new WebAuthnError({\n message: 'No entry in pubKeyCredParams was of type \"public-key\"',\n code: 'ERROR_MALFORMED_PUBKEYCREDPARAMS',\n cause: error,\n });\n }\n // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 2)\n return new WebAuthnError({\n message: 'No available authenticator supported any of the specified pubKeyCredParams algorithms',\n code: 'ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG',\n cause: error,\n });\n }\n else if (error.name === 'SecurityError') {\n const effectiveDomain = window.location.hostname;\n if (!(0,_webauthn__WEBPACK_IMPORTED_MODULE_0__.isValidDomain)(effectiveDomain)) {\n // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 7)\n return new WebAuthnError({\n message: `${window.location.hostname} is an invalid domain`,\n code: 'ERROR_INVALID_DOMAIN',\n cause: error,\n });\n }\n else if (publicKey.rp.id !== effectiveDomain) {\n // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 8)\n return new WebAuthnError({\n message: `The RP ID \"${publicKey.rp.id}\" is invalid for this domain`,\n code: 'ERROR_INVALID_RP_ID',\n cause: error,\n });\n }\n }\n else if (error.name === 'TypeError') {\n if (publicKey.user.id.byteLength < 1 || publicKey.user.id.byteLength > 64) {\n // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 5)\n return new WebAuthnError({\n message: 'User ID was not between 1 and 64 characters',\n code: 'ERROR_INVALID_USER_ID_LENGTH',\n cause: error,\n });\n }\n }\n else if (error.name === 'UnknownError') {\n // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 1)\n // https://www.w3.org/TR/webauthn-2/#sctn-op-make-cred (Step 8)\n return new WebAuthnError({\n message: 'The authenticator was unable to process the specified options, or could not create a new credential',\n code: 'ERROR_AUTHENTICATOR_GENERAL_ERROR',\n cause: error,\n });\n }\n return new WebAuthnError({\n message: 'a Non-Webauthn related error has occurred',\n code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n cause: error,\n });\n}\n/**\n * Attempt to intuit _why_ an error was raised after calling `navigator.credentials.get()`.\n * Maps browser errors to specific WebAuthn error codes for better debugging.\n * @param {Object} params - Error identification parameters\n * @param {Error} params.error - The error thrown by the browser\n * @param {CredentialRequestOptions} params.options - The options passed to credentials.get()\n * @returns {WebAuthnError} A WebAuthnError with a specific error code\n * @see {@link https://w3c.github.io/webauthn/#sctn-getAssertion W3C WebAuthn Spec - Get Assertion}\n */\nfunction identifyAuthenticationError({ error, options, }) {\n const { publicKey } = options;\n if (!publicKey) {\n throw Error('options was missing required publicKey property');\n }\n if (error.name === 'AbortError') {\n if (options.signal instanceof AbortSignal) {\n // https://www.w3.org/TR/webauthn-2/#sctn-createCredential (Step 16)\n return new WebAuthnError({\n message: 'Authentication ceremony was sent an abort signal',\n code: 'ERROR_CEREMONY_ABORTED',\n cause: error,\n });\n }\n }\n else if (error.name === 'NotAllowedError') {\n /**\n * Pass the error directly through. Platforms are overloading this error beyond what the spec\n * defines and we don't want to overwrite potentially useful error messages.\n */\n return new WebAuthnError({\n message: error.message,\n code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n cause: error,\n });\n }\n else if (error.name === 'SecurityError') {\n const effectiveDomain = window.location.hostname;\n if (!(0,_webauthn__WEBPACK_IMPORTED_MODULE_0__.isValidDomain)(effectiveDomain)) {\n // https://www.w3.org/TR/webauthn-2/#sctn-discover-from-external-source (Step 5)\n return new WebAuthnError({\n message: `${window.location.hostname} is an invalid domain`,\n code: 'ERROR_INVALID_DOMAIN',\n cause: error,\n });\n }\n else if (publicKey.rpId !== effectiveDomain) {\n // https://www.w3.org/TR/webauthn-2/#sctn-discover-from-external-source (Step 6)\n return new WebAuthnError({\n message: `The RP ID \"${publicKey.rpId}\" is invalid for this domain`,\n code: 'ERROR_INVALID_RP_ID',\n cause: error,\n });\n }\n }\n else if (error.name === 'UnknownError') {\n // https://www.w3.org/TR/webauthn-2/#sctn-op-get-assertion (Step 1)\n // https://www.w3.org/TR/webauthn-2/#sctn-op-get-assertion (Step 12)\n return new WebAuthnError({\n message: 'The authenticator was unable to process the specified options, or could not create a new assertion signature',\n code: 'ERROR_AUTHENTICATOR_GENERAL_ERROR',\n cause: error,\n });\n }\n return new WebAuthnError({\n message: 'a Non-Webauthn related error has occurred',\n code: 'ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY',\n cause: error,\n });\n}\n//# sourceMappingURL=webauthn.errors.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvd2ViYXV0aG4uZXJyb3JzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBO0FBQzJDO0FBQzNDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQLGtCQUFrQiw2QkFBNkI7QUFDL0M7QUFDQTtBQUNBLHlCQUF5QixPQUFPO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsU0FBUztBQUNwQixhQUFhLFNBQVM7QUFDdEI7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLFFBQVE7QUFDbkIsV0FBVyxPQUFPO0FBQ2xCLFdBQVcsMkJBQTJCO0FBQ3RDLGFBQWEsZUFBZTtBQUM1QixTQUFTO0FBQ1Q7QUFDTyxxQ0FBcUMsaUJBQWlCO0FBQzdEO0FBQ0EsWUFBWSxZQUFZO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhLHdEQUFhO0FBQzFCO0FBQ0E7QUFDQSw0QkFBNEIsMEJBQTBCO0FBQ3REO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsZ0JBQWdCO0FBQ3ZEO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CLFdBQVcsT0FBTztBQUNsQixXQUFXLDBCQUEwQjtBQUNyQyxhQUFhLGVBQWU7QUFDNUIsU0FBUztBQUNUO0FBQ08sdUNBQXVDLGlCQUFpQjtBQUMvRCxZQUFZLFlBQVk7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxhQUFhLHdEQUFhO0FBQzFCO0FBQ0E7QUFDQSw0QkFBNEIsMEJBQTBCO0FBQ3REO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsZUFBZTtBQUN0RDtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2F1dGgtanMvZGlzdC9tb2R1bGUvbGliL3dlYmF1dGhuLmVycm9ycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnQgKi9cbmltcG9ydCB7IGlzVmFsaWREb21haW4gfSBmcm9tICcuL3dlYmF1dGhuJztcbi8qKlxuICogQSBjdXN0b20gRXJyb3IgdXNlZCB0byByZXR1cm4gYSBtb3JlIG51YW5jZWQgZXJyb3IgZGV0YWlsaW5nIF93aHlfIG9uZSBvZiB0aGUgZWlnaHQgZG9jdW1lbnRlZFxuICogZXJyb3JzIGluIHRoZSBzcGVjIHdhcyByYWlzZWQgYWZ0ZXIgY2FsbGluZyBgbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmNyZWF0ZSgpYCBvclxuICogYG5hdmlnYXRvci5jcmVkZW50aWFscy5nZXQoKWA6XG4gKlxuICogLSBgQWJvcnRFcnJvcmBcbiAqIC0gYENvbnN0cmFpbnRFcnJvcmBcbiAqIC0gYEludmFsaWRTdGF0ZUVycm9yYFxuICogLSBgTm90QWxsb3dlZEVycm9yYFxuICogLSBgTm90U3VwcG9ydGVkRXJyb3JgXG4gKiAtIGBTZWN1cml0eUVycm9yYFxuICogLSBgVHlwZUVycm9yYFxuICogLSBgVW5rbm93bkVycm9yYFxuICpcbiAqIEVycm9yIG1lc3NhZ2VzIHdlcmUgZGV0ZXJtaW5lZCB0aHJvdWdoIGludmVzdGlnYXRpb24gb2YgdGhlIHNwZWMgdG8gZGV0ZXJtaW5lIHVuZGVyIHdoaWNoXG4gKiBzY2VuYXJpb3MgYSBnaXZlbiBlcnJvciB3b3VsZCBiZSByYWlzZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJBdXRobkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKHsgbWVzc2FnZSwgY29kZSwgY2F1c2UsIG5hbWUsIH0pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAvLyBAdHMtaWdub3JlOiBoZWxwIFJvbGx1cCB1bmRlcnN0YW5kIHRoYXQgYGNhdXNlYCBpcyBva2F5IHRvIHNldFxuICAgICAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlIH0pO1xuICAgICAgICB0aGlzLl9faXNXZWJBdXRobkVycm9yID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5uYW1lID0gKF9hID0gbmFtZSAhPT0gbnVsbCAmJiBuYW1lICE9PSB2b2lkIDAgPyBuYW1lIDogKGNhdXNlIGluc3RhbmNlb2YgRXJyb3IgPyBjYXVzZS5uYW1lIDogdW5kZWZpbmVkKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ1Vua25vd24gRXJyb3InO1xuICAgICAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIH1cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICAgICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICAgIH07XG4gICAgfVxufVxuLyoqXG4gKiBFcnJvciBjbGFzcyBmb3IgdW5rbm93biBXZWJBdXRobiBlcnJvcnMuXG4gKiBXcmFwcyB1bmV4cGVjdGVkIGVycm9ycyB0aGF0IGRvbid0IG1hdGNoIGtub3duIFdlYkF1dGhuIGVycm9yIGNvbmRpdGlvbnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJBdXRoblVua25vd25FcnJvciBleHRlbmRzIFdlYkF1dGhuRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UsIG9yaWdpbmFsRXJyb3IpIHtcbiAgICAgICAgc3VwZXIoe1xuICAgICAgICAgICAgY29kZTogJ0VSUk9SX1BBU1NUSFJPVUdIX1NFRV9DQVVTRV9QUk9QRVJUWScsXG4gICAgICAgICAgICBjYXVzZTogb3JpZ2luYWxFcnJvcixcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm5hbWUgPSAnV2ViQXV0aG5Vbmtub3duRXJyb3InO1xuICAgICAgICB0aGlzLm9yaWdpbmFsRXJyb3IgPSBvcmlnaW5hbEVycm9yO1xuICAgIH1cbn1cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBlcnJvciBpcyBhIFdlYkF1dGhuRXJyb3IuXG4gKiBAcGFyYW0ge3Vua25vd259IGVycm9yIC0gVGhlIGVycm9yIHRvIGNoZWNrXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZXJyb3IgaXMgYSBXZWJBdXRobkVycm9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1dlYkF1dGhuRXJyb3IoZXJyb3IpIHtcbiAgICByZXR1cm4gdHlwZW9mIGVycm9yID09PSAnb2JqZWN0JyAmJiBlcnJvciAhPT0gbnVsbCAmJiAnX19pc1dlYkF1dGhuRXJyb3InIGluIGVycm9yO1xufVxuLyoqXG4gKiBBdHRlbXB0IHRvIGludHVpdCBfd2h5XyBhbiBlcnJvciB3YXMgcmFpc2VkIGFmdGVyIGNhbGxpbmcgYG5hdmlnYXRvci5jcmVkZW50aWFscy5jcmVhdGUoKWAuXG4gKiBNYXBzIGJyb3dzZXIgZXJyb3JzIHRvIHNwZWNpZmljIFdlYkF1dGhuIGVycm9yIGNvZGVzIGZvciBiZXR0ZXIgZGVidWdnaW5nLlxuICogQHBhcmFtIHtPYmplY3R9IHBhcmFtcyAtIEVycm9yIGlkZW50aWZpY2F0aW9uIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSB7RXJyb3J9IHBhcmFtcy5lcnJvciAtIFRoZSBlcnJvciB0aHJvd24gYnkgdGhlIGJyb3dzZXJcbiAqIEBwYXJhbSB7Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc30gcGFyYW1zLm9wdGlvbnMgLSBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gY3JlZGVudGlhbHMuY3JlYXRlKClcbiAqIEByZXR1cm5zIHtXZWJBdXRobkVycm9yfSBBIFdlYkF1dGhuRXJyb3Igd2l0aCBhIHNwZWNpZmljIGVycm9yIGNvZGVcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhdXRobi8jc2N0bi1jcmVhdGVDcmVkZW50aWFsIFczQyBXZWJBdXRobiBTcGVjIC0gQ3JlYXRlIENyZWRlbnRpYWx9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmeVJlZ2lzdHJhdGlvbkVycm9yKHsgZXJyb3IsIG9wdGlvbnMsIH0pIHtcbiAgICB2YXIgX2EsIF9iLCBfYztcbiAgICBjb25zdCB7IHB1YmxpY0tleSB9ID0gb3B0aW9ucztcbiAgICBpZiAoIXB1YmxpY0tleSkge1xuICAgICAgICB0aHJvdyBFcnJvcignb3B0aW9ucyB3YXMgbWlzc2luZyByZXF1aXJlZCBwdWJsaWNLZXkgcHJvcGVydHknKTtcbiAgICB9XG4gICAgaWYgKGVycm9yLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICBpZiAob3B0aW9ucy5zaWduYWwgaW5zdGFuY2VvZiBBYm9ydFNpZ25hbCkge1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLTIvI3NjdG4tY3JlYXRlQ3JlZGVudGlhbCAoU3RlcCAxNilcbiAgICAgICAgICAgIHJldHVybiBuZXcgV2ViQXV0aG5FcnJvcih7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1JlZ2lzdHJhdGlvbiBjZXJlbW9ueSB3YXMgc2VudCBhbiBhYm9ydCBzaWduYWwnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdFUlJPUl9DRVJFTU9OWV9BQk9SVEVEJyxcbiAgICAgICAgICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChlcnJvci5uYW1lID09PSAnQ29uc3RyYWludEVycm9yJykge1xuICAgICAgICBpZiAoKChfYSA9IHB1YmxpY0tleS5hdXRoZW50aWNhdG9yU2VsZWN0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucmVxdWlyZVJlc2lkZW50S2V5KSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLTIvI3NjdG4tb3AtbWFrZS1jcmVkIChTdGVwIDQpXG4gICAgICAgICAgICByZXR1cm4gbmV3IFdlYkF1dGhuRXJyb3Ioe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdEaXNjb3ZlcmFibGUgY3JlZGVudGlhbHMgd2VyZSByZXF1aXJlZCBidXQgbm8gYXZhaWxhYmxlIGF1dGhlbnRpY2F0b3Igc3VwcG9ydGVkIGl0JyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnRVJST1JfQVVUSEVOVElDQVRPUl9NSVNTSU5HX0RJU0NPVkVSQUJMRV9DUkVERU5USUFMX1NVUFBPUlQnLFxuICAgICAgICAgICAgICAgIGNhdXNlOiBlcnJvcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKFxuICAgICAgICAvLyBAdHMtaWdub3JlOiBgbWVkaWF0aW9uYCBkb2Vzbid0IHlldCBleGlzdCBvbiBDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIGJ1dCBpdCdzIHBvc3NpYmxlIGFzIG9mIFNlcHQgMjAyNFxuICAgICAgICBvcHRpb25zLm1lZGlhdGlvbiA9PT0gJ2NvbmRpdGlvbmFsJyAmJlxuICAgICAgICAgICAgKChfYiA9IHB1YmxpY0tleS5hdXRoZW50aWNhdG9yU2VsZWN0aW9uKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IudXNlclZlcmlmaWNhdGlvbikgPT09ICdyZXF1aXJlZCcpIHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhdXRobi8jc2N0bi1jcmVhdGVDcmVkZW50aWFsIChTdGVwIDIyLjQpXG4gICAgICAgICAgICByZXR1cm4gbmV3IFdlYkF1dGhuRXJyb3Ioe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2VyIHZlcmlmaWNhdGlvbiB3YXMgcmVxdWlyZWQgZHVyaW5nIGF1dG9tYXRpYyByZWdpc3RyYXRpb24gYnV0IGl0IGNvdWxkIG5vdCBiZSBwZXJmb3JtZWQnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdFUlJPUl9BVVRPX1JFR0lTVEVSX1VTRVJfVkVSSUZJQ0FUSU9OX0ZBSUxVUkUnLFxuICAgICAgICAgICAgICAgIGNhdXNlOiBlcnJvcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCgoX2MgPSBwdWJsaWNLZXkuYXV0aGVudGljYXRvclNlbGVjdGlvbikgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLnVzZXJWZXJpZmljYXRpb24pID09PSAncmVxdWlyZWQnKSB7XG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4tMi8jc2N0bi1vcC1tYWtlLWNyZWQgKFN0ZXAgNSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgV2ViQXV0aG5FcnJvcih7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ1VzZXIgdmVyaWZpY2F0aW9uIHdhcyByZXF1aXJlZCBidXQgbm8gYXZhaWxhYmxlIGF1dGhlbnRpY2F0b3Igc3VwcG9ydGVkIGl0JyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnRVJST1JfQVVUSEVOVElDQVRPUl9NSVNTSU5HX1VTRVJfVkVSSUZJQ0FUSU9OX1NVUFBPUlQnLFxuICAgICAgICAgICAgICAgIGNhdXNlOiBlcnJvcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGVycm9yLm5hbWUgPT09ICdJbnZhbGlkU3RhdGVFcnJvcicpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLTIvI3NjdG4tY3JlYXRlQ3JlZGVudGlhbCAoU3RlcCAyMClcbiAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLTIvI3NjdG4tb3AtbWFrZS1jcmVkIChTdGVwIDMpXG4gICAgICAgIHJldHVybiBuZXcgV2ViQXV0aG5FcnJvcih7XG4gICAgICAgICAgICBtZXNzYWdlOiAnVGhlIGF1dGhlbnRpY2F0b3Igd2FzIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCcsXG4gICAgICAgICAgICBjb2RlOiAnRVJST1JfQVVUSEVOVElDQVRPUl9QUkVWSU9VU0xZX1JFR0lTVEVSRUQnLFxuICAgICAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXJyb3IubmFtZSA9PT0gJ05vdEFsbG93ZWRFcnJvcicpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFBhc3MgdGhlIGVycm9yIGRpcmVjdGx5IHRocm91Z2guIFBsYXRmb3JtcyBhcmUgb3ZlcmxvYWRpbmcgdGhpcyBlcnJvciBiZXlvbmQgd2hhdCB0aGUgc3BlY1xuICAgICAgICAgKiBkZWZpbmVzIGFuZCB3ZSBkb24ndCB3YW50IHRvIG92ZXJ3cml0ZSBwb3RlbnRpYWxseSB1c2VmdWwgZXJyb3IgbWVzc2FnZXMuXG4gICAgICAgICAqL1xuICAgICAgICByZXR1cm4gbmV3IFdlYkF1dGhuRXJyb3Ioe1xuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3IubWVzc2FnZSxcbiAgICAgICAgICAgIGNvZGU6ICdFUlJPUl9QQVNTVEhST1VHSF9TRUVfQ0FVU0VfUFJPUEVSVFknLFxuICAgICAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXJyb3IubmFtZSA9PT0gJ05vdFN1cHBvcnRlZEVycm9yJykge1xuICAgICAgICBjb25zdCB2YWxpZFB1YktleUNyZWRQYXJhbXMgPSBwdWJsaWNLZXkucHViS2V5Q3JlZFBhcmFtcy5maWx0ZXIoKHBhcmFtKSA9PiBwYXJhbS50eXBlID09PSAncHVibGljLWtleScpO1xuICAgICAgICBpZiAodmFsaWRQdWJLZXlDcmVkUGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLTIvI3NjdG4tY3JlYXRlQ3JlZGVudGlhbCAoU3RlcCAxMClcbiAgICAgICAgICAgIHJldHVybiBuZXcgV2ViQXV0aG5FcnJvcih7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ05vIGVudHJ5IGluIHB1YktleUNyZWRQYXJhbXMgd2FzIG9mIHR5cGUgXCJwdWJsaWMta2V5XCInLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdFUlJPUl9NQUxGT1JNRURfUFVCS0VZQ1JFRFBBUkFNUycsXG4gICAgICAgICAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLTIvI3NjdG4tb3AtbWFrZS1jcmVkIChTdGVwIDIpXG4gICAgICAgIHJldHVybiBuZXcgV2ViQXV0aG5FcnJvcih7XG4gICAgICAgICAgICBtZXNzYWdlOiAnTm8gYXZhaWxhYmxlIGF1dGhlbnRpY2F0b3Igc3VwcG9ydGVkIGFueSBvZiB0aGUgc3BlY2lmaWVkIHB1YktleUNyZWRQYXJhbXMgYWxnb3JpdGhtcycsXG4gICAgICAgICAgICBjb2RlOiAnRVJST1JfQVVUSEVOVElDQVRPUl9OT19TVVBQT1JURURfUFVCS0VZQ1JFRFBBUkFNU19BTEcnLFxuICAgICAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZXJyb3IubmFtZSA9PT0gJ1NlY3VyaXR5RXJyb3InKSB7XG4gICAgICAgIGNvbnN0IGVmZmVjdGl2ZURvbWFpbiA9IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZTtcbiAgICAgICAgaWYgKCFpc1ZhbGlkRG9tYWluKGVmZmVjdGl2ZURvbWFpbikpIHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi0yLyNzY3RuLWNyZWF0ZUNyZWRlbnRpYWwgKFN0ZXAgNylcbiAgICAgICAgICAgIHJldHVybiBuZXcgV2ViQXV0aG5FcnJvcih7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYCR7d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfSBpcyBhbiBpbnZhbGlkIGRvbWFpbmAsXG4gICAgICAgICAgICAgICAgY29kZTogJ0VSUk9SX0lOVkFMSURfRE9NQUlOJyxcbiAgICAgICAgICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwdWJsaWNLZXkucnAuaWQgIT09IGVmZmVjdGl2ZURvbWFpbikge1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLTIvI3NjdG4tY3JlYXRlQ3JlZGVudGlhbCAoU3RlcCA4KVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJBdXRobkVycm9yKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVGhlIFJQIElEIFwiJHtwdWJsaWNLZXkucnAuaWR9XCIgaXMgaW52YWxpZCBmb3IgdGhpcyBkb21haW5gLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdFUlJPUl9JTlZBTElEX1JQX0lEJyxcbiAgICAgICAgICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChlcnJvci5uYW1lID09PSAnVHlwZUVycm9yJykge1xuICAgICAgICBpZiAocHVibGljS2V5LnVzZXIuaWQuYnl0ZUxlbmd0aCA8IDEgfHwgcHVibGljS2V5LnVzZXIuaWQuYnl0ZUxlbmd0aCA+IDY0KSB7XG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4tMi8jc2N0bi1jcmVhdGVDcmVkZW50aWFsIChTdGVwIDUpXG4gICAgICAgICAgICByZXR1cm4gbmV3IFdlYkF1dGhuRXJyb3Ioe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdVc2VyIElEIHdhcyBub3QgYmV0d2VlbiAxIGFuZCA2NCBjaGFyYWN0ZXJzJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnRVJST1JfSU5WQUxJRF9VU0VSX0lEX0xFTkdUSCcsXG4gICAgICAgICAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoZXJyb3IubmFtZSA9PT0gJ1Vua25vd25FcnJvcicpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLTIvI3NjdG4tb3AtbWFrZS1jcmVkIChTdGVwIDEpXG4gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi0yLyNzY3RuLW9wLW1ha2UtY3JlZCAoU3RlcCA4KVxuICAgICAgICByZXR1cm4gbmV3IFdlYkF1dGhuRXJyb3Ioe1xuICAgICAgICAgICAgbWVzc2FnZTogJ1RoZSBhdXRoZW50aWNhdG9yIHdhcyB1bmFibGUgdG8gcHJvY2VzcyB0aGUgc3BlY2lmaWVkIG9wdGlvbnMsIG9yIGNvdWxkIG5vdCBjcmVhdGUgYSBuZXcgY3JlZGVudGlhbCcsXG4gICAgICAgICAgICBjb2RlOiAnRVJST1JfQVVUSEVOVElDQVRPUl9HRU5FUkFMX0VSUk9SJyxcbiAgICAgICAgICAgIGNhdXNlOiBlcnJvcixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgV2ViQXV0aG5FcnJvcih7XG4gICAgICAgIG1lc3NhZ2U6ICdhIE5vbi1XZWJhdXRobiByZWxhdGVkIGVycm9yIGhhcyBvY2N1cnJlZCcsXG4gICAgICAgIGNvZGU6ICdFUlJPUl9QQVNTVEhST1VHSF9TRUVfQ0FVU0VfUFJPUEVSVFknLFxuICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgfSk7XG59XG4vKipcbiAqIEF0dGVtcHQgdG8gaW50dWl0IF93aHlfIGFuIGVycm9yIHdhcyByYWlzZWQgYWZ0ZXIgY2FsbGluZyBgbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmdldCgpYC5cbiAqIE1hcHMgYnJvd3NlciBlcnJvcnMgdG8gc3BlY2lmaWMgV2ViQXV0aG4gZXJyb3IgY29kZXMgZm9yIGJldHRlciBkZWJ1Z2dpbmcuXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gRXJyb3IgaWRlbnRpZmljYXRpb24gcGFyYW1ldGVyc1xuICogQHBhcmFtIHtFcnJvcn0gcGFyYW1zLmVycm9yIC0gVGhlIGVycm9yIHRocm93biBieSB0aGUgYnJvd3NlclxuICogQHBhcmFtIHtDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnN9IHBhcmFtcy5vcHRpb25zIC0gVGhlIG9wdGlvbnMgcGFzc2VkIHRvIGNyZWRlbnRpYWxzLmdldCgpXG4gKiBAcmV0dXJucyB7V2ViQXV0aG5FcnJvcn0gQSBXZWJBdXRobkVycm9yIHdpdGggYSBzcGVjaWZpYyBlcnJvciBjb2RlXG4gKiBAc2VlIHtAbGluayBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXV0aG4vI3NjdG4tZ2V0QXNzZXJ0aW9uIFczQyBXZWJBdXRobiBTcGVjIC0gR2V0IEFzc2VydGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlkZW50aWZ5QXV0aGVudGljYXRpb25FcnJvcih7IGVycm9yLCBvcHRpb25zLCB9KSB7XG4gICAgY29uc3QgeyBwdWJsaWNLZXkgfSA9IG9wdGlvbnM7XG4gICAgaWYgKCFwdWJsaWNLZXkpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ29wdGlvbnMgd2FzIG1pc3NpbmcgcmVxdWlyZWQgcHVibGljS2V5IHByb3BlcnR5Jyk7XG4gICAgfVxuICAgIGlmIChlcnJvci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuc2lnbmFsIGluc3RhbmNlb2YgQWJvcnRTaWduYWwpIHtcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi0yLyNzY3RuLWNyZWF0ZUNyZWRlbnRpYWwgKFN0ZXAgMTYpXG4gICAgICAgICAgICByZXR1cm4gbmV3IFdlYkF1dGhuRXJyb3Ioe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2U6ICdBdXRoZW50aWNhdGlvbiBjZXJlbW9ueSB3YXMgc2VudCBhbiBhYm9ydCBzaWduYWwnLFxuICAgICAgICAgICAgICAgIGNvZGU6ICdFUlJPUl9DRVJFTU9OWV9BQk9SVEVEJyxcbiAgICAgICAgICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChlcnJvci5uYW1lID09PSAnTm90QWxsb3dlZEVycm9yJykge1xuICAgICAgICAvKipcbiAgICAgICAgICogUGFzcyB0aGUgZXJyb3IgZGlyZWN0bHkgdGhyb3VnaC4gUGxhdGZvcm1zIGFyZSBvdmVybG9hZGluZyB0aGlzIGVycm9yIGJleW9uZCB3aGF0IHRoZSBzcGVjXG4gICAgICAgICAqIGRlZmluZXMgYW5kIHdlIGRvbid0IHdhbnQgdG8gb3ZlcndyaXRlIHBvdGVudGlhbGx5IHVzZWZ1bCBlcnJvciBtZXNzYWdlcy5cbiAgICAgICAgICovXG4gICAgICAgIHJldHVybiBuZXcgV2ViQXV0aG5FcnJvcih7XG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgY29kZTogJ0VSUk9SX1BBU1NUSFJPVUdIX1NFRV9DQVVTRV9QUk9QRVJUWScsXG4gICAgICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIGlmIChlcnJvci5uYW1lID09PSAnU2VjdXJpdHlFcnJvcicpIHtcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlRG9tYWluID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuICAgICAgICBpZiAoIWlzVmFsaWREb21haW4oZWZmZWN0aXZlRG9tYWluKSkge1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLTIvI3NjdG4tZGlzY292ZXItZnJvbS1leHRlcm5hbC1zb3VyY2UgKFN0ZXAgNSlcbiAgICAgICAgICAgIHJldHVybiBuZXcgV2ViQXV0aG5FcnJvcih7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogYCR7d2luZG93LmxvY2F0aW9uLmhvc3RuYW1lfSBpcyBhbiBpbnZhbGlkIGRvbWFpbmAsXG4gICAgICAgICAgICAgICAgY29kZTogJ0VSUk9SX0lOVkFMSURfRE9NQUlOJyxcbiAgICAgICAgICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwdWJsaWNLZXkucnBJZCAhPT0gZWZmZWN0aXZlRG9tYWluKSB7XG4gICAgICAgICAgICAvLyBodHRwczovL3d3dy53My5vcmcvVFIvd2ViYXV0aG4tMi8jc2N0bi1kaXNjb3Zlci1mcm9tLWV4dGVybmFsLXNvdXJjZSAoU3RlcCA2KVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBXZWJBdXRobkVycm9yKHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiBgVGhlIFJQIElEIFwiJHtwdWJsaWNLZXkucnBJZH1cIiBpcyBpbnZhbGlkIGZvciB0aGlzIGRvbWFpbmAsXG4gICAgICAgICAgICAgICAgY29kZTogJ0VSUk9SX0lOVkFMSURfUlBfSUQnLFxuICAgICAgICAgICAgICAgIGNhdXNlOiBlcnJvcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGVycm9yLm5hbWUgPT09ICdVbmtub3duRXJyb3InKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi93ZWJhdXRobi0yLyNzY3RuLW9wLWdldC1hc3NlcnRpb24gKFN0ZXAgMSlcbiAgICAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3dlYmF1dGhuLTIvI3NjdG4tb3AtZ2V0LWFzc2VydGlvbiAoU3RlcCAxMilcbiAgICAgICAgcmV0dXJuIG5ldyBXZWJBdXRobkVycm9yKHtcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdUaGUgYXV0aGVudGljYXRvciB3YXMgdW5hYmxlIHRvIHByb2Nlc3MgdGhlIHNwZWNpZmllZCBvcHRpb25zLCBvciBjb3VsZCBub3QgY3JlYXRlIGEgbmV3IGFzc2VydGlvbiBzaWduYXR1cmUnLFxuICAgICAgICAgICAgY29kZTogJ0VSUk9SX0FVVEhFTlRJQ0FUT1JfR0VORVJBTF9FUlJPUicsXG4gICAgICAgICAgICBjYXVzZTogZXJyb3IsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFdlYkF1dGhuRXJyb3Ioe1xuICAgICAgICBtZXNzYWdlOiAnYSBOb24tV2ViYXV0aG4gcmVsYXRlZCBlcnJvciBoYXMgb2NjdXJyZWQnLFxuICAgICAgICBjb2RlOiAnRVJST1JfUEFTU1RIUk9VR0hfU0VFX0NBVVNFX1BST1BFUlRZJyxcbiAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2ViYXV0aG4uZXJyb3JzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/webauthn.errors.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/webauthn.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/@supabase/auth-js/dist/module/lib/webauthn.js ***!
|
||
\********************************************************************/
|
||
/***/ ((__unused_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 */ DEFAULT_CREATION_OPTIONS: () => (/* binding */ DEFAULT_CREATION_OPTIONS),\n/* harmony export */ DEFAULT_REQUEST_OPTIONS: () => (/* binding */ DEFAULT_REQUEST_OPTIONS),\n/* harmony export */ WebAuthnAbortService: () => (/* binding */ WebAuthnAbortService),\n/* harmony export */ WebAuthnApi: () => (/* binding */ WebAuthnApi),\n/* harmony export */ WebAuthnError: () => (/* reexport safe */ _webauthn_errors__WEBPACK_IMPORTED_MODULE_3__.WebAuthnError),\n/* harmony export */ browserSupportsWebAuthn: () => (/* binding */ browserSupportsWebAuthn),\n/* harmony export */ createCredential: () => (/* binding */ createCredential),\n/* harmony export */ deserializeCredentialCreationOptions: () => (/* binding */ deserializeCredentialCreationOptions),\n/* harmony export */ deserializeCredentialRequestOptions: () => (/* binding */ deserializeCredentialRequestOptions),\n/* harmony export */ getCredential: () => (/* binding */ getCredential),\n/* harmony export */ identifyAuthenticationError: () => (/* reexport safe */ _webauthn_errors__WEBPACK_IMPORTED_MODULE_3__.identifyAuthenticationError),\n/* harmony export */ identifyRegistrationError: () => (/* reexport safe */ _webauthn_errors__WEBPACK_IMPORTED_MODULE_3__.identifyRegistrationError),\n/* harmony export */ isValidDomain: () => (/* binding */ isValidDomain),\n/* harmony export */ isWebAuthnError: () => (/* reexport safe */ _webauthn_errors__WEBPACK_IMPORTED_MODULE_3__.isWebAuthnError),\n/* harmony export */ mergeCredentialCreationOptions: () => (/* binding */ mergeCredentialCreationOptions),\n/* harmony export */ mergeCredentialRequestOptions: () => (/* binding */ mergeCredentialRequestOptions),\n/* harmony export */ serializeCredentialCreationResponse: () => (/* binding */ serializeCredentialCreationResponse),\n/* harmony export */ serializeCredentialRequestResponse: () => (/* binding */ serializeCredentialRequestResponse),\n/* harmony export */ webAuthnAbortService: () => (/* binding */ webAuthnAbortService)\n/* harmony export */ });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! tslib */ \"(app-pages-browser)/./node_modules/tslib/tslib.es6.mjs\");\n/* harmony import */ var _base64url__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./base64url */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/base64url.js\");\n/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/errors.js\");\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/helpers.js\");\n/* harmony import */ var _webauthn_errors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./webauthn.errors */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/webauthn.errors.js\");\n\n\n\n\n\n\n/**\n * WebAuthn abort service to manage ceremony cancellation.\n * Ensures only one WebAuthn ceremony is active at a time to prevent \"operation already in progress\" errors.\n *\n * @experimental This class is experimental and may change in future releases\n * @see {@link https://w3c.github.io/webauthn/#sctn-automation-webdriver-capability W3C WebAuthn Spec - Aborting Ceremonies}\n */\nclass WebAuthnAbortService {\n /**\n * Create an abort signal for a new WebAuthn operation.\n * Automatically cancels any existing operation.\n *\n * @returns {AbortSignal} Signal to pass to navigator.credentials.create() or .get()\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal MDN - AbortSignal}\n */\n createNewAbortSignal() {\n // Abort any existing calls to navigator.credentials.create() or navigator.credentials.get()\n if (this.controller) {\n const abortError = new Error('Cancelling existing WebAuthn API call for new one');\n abortError.name = 'AbortError';\n this.controller.abort(abortError);\n }\n const newController = new AbortController();\n this.controller = newController;\n return newController.signal;\n }\n /**\n * Manually cancel the current WebAuthn operation.\n * Useful for cleaning up when user cancels or navigates away.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/AbortController/abort MDN - AbortController.abort}\n */\n cancelCeremony() {\n if (this.controller) {\n const abortError = new Error('Manually cancelling existing WebAuthn API call');\n abortError.name = 'AbortError';\n this.controller.abort(abortError);\n this.controller = undefined;\n }\n }\n}\n/**\n * Singleton instance to ensure only one WebAuthn ceremony is active at a time.\n * This prevents \"operation already in progress\" errors when retrying WebAuthn operations.\n *\n * @experimental This instance is experimental and may change in future releases\n */\nconst webAuthnAbortService = new WebAuthnAbortService();\n/**\n * Convert base64url encoded strings in WebAuthn credential creation options to ArrayBuffers\n * as required by the WebAuthn browser API.\n * Supports both native WebAuthn Level 3 parseCreationOptionsFromJSON and manual fallback.\n *\n * @param {ServerCredentialCreationOptions} options - JSON options from server with base64url encoded fields\n * @returns {PublicKeyCredentialCreationOptionsFuture} Options ready for navigator.credentials.create()\n * @see {@link https://w3c.github.io/webauthn/#sctn-parseCreationOptionsFromJSON W3C WebAuthn Spec - parseCreationOptionsFromJSON}\n */\nfunction deserializeCredentialCreationOptions(options) {\n if (!options) {\n throw new Error('Credential creation options are required');\n }\n // Check if the native parseCreationOptionsFromJSON method is available\n if (typeof PublicKeyCredential !== 'undefined' &&\n 'parseCreationOptionsFromJSON' in PublicKeyCredential &&\n typeof PublicKeyCredential\n .parseCreationOptionsFromJSON === 'function') {\n // Use the native WebAuthn Level 3 method\n return PublicKeyCredential.parseCreationOptionsFromJSON(\n /** we assert the options here as typescript still doesn't know about future webauthn types */\n options);\n }\n // Fallback to manual parsing for browsers that don't support the native method\n // Destructure to separate fields that need transformation\n const { challenge: challengeStr, user: userOpts, excludeCredentials } = options, restOptions = (0,tslib__WEBPACK_IMPORTED_MODULE_4__.__rest)(options\n // Convert challenge from base64url to ArrayBuffer\n , [\"challenge\", \"user\", \"excludeCredentials\"]);\n // Convert challenge from base64url to ArrayBuffer\n const challenge = (0,_base64url__WEBPACK_IMPORTED_MODULE_0__.base64UrlToUint8Array)(challengeStr).buffer;\n // Convert user.id from base64url to ArrayBuffer\n const user = Object.assign(Object.assign({}, userOpts), { id: (0,_base64url__WEBPACK_IMPORTED_MODULE_0__.base64UrlToUint8Array)(userOpts.id).buffer });\n // Build the result object\n const result = Object.assign(Object.assign({}, restOptions), { challenge,\n user });\n // Only add excludeCredentials if it exists\n if (excludeCredentials && excludeCredentials.length > 0) {\n result.excludeCredentials = new Array(excludeCredentials.length);\n for (let i = 0; i < excludeCredentials.length; i++) {\n const cred = excludeCredentials[i];\n result.excludeCredentials[i] = Object.assign(Object.assign({}, cred), { id: (0,_base64url__WEBPACK_IMPORTED_MODULE_0__.base64UrlToUint8Array)(cred.id).buffer, type: cred.type || 'public-key', \n // Cast transports to handle future transport types like \"cable\"\n transports: cred.transports });\n }\n }\n return result;\n}\n/**\n * Convert base64url encoded strings in WebAuthn credential request options to ArrayBuffers\n * as required by the WebAuthn browser API.\n * Supports both native WebAuthn Level 3 parseRequestOptionsFromJSON and manual fallback.\n *\n * @param {ServerCredentialRequestOptions} options - JSON options from server with base64url encoded fields\n * @returns {PublicKeyCredentialRequestOptionsFuture} Options ready for navigator.credentials.get()\n * @see {@link https://w3c.github.io/webauthn/#sctn-parseRequestOptionsFromJSON W3C WebAuthn Spec - parseRequestOptionsFromJSON}\n */\nfunction deserializeCredentialRequestOptions(options) {\n if (!options) {\n throw new Error('Credential request options are required');\n }\n // Check if the native parseRequestOptionsFromJSON method is available\n if (typeof PublicKeyCredential !== 'undefined' &&\n 'parseRequestOptionsFromJSON' in PublicKeyCredential &&\n typeof PublicKeyCredential\n .parseRequestOptionsFromJSON === 'function') {\n // Use the native WebAuthn Level 3 method\n return PublicKeyCredential.parseRequestOptionsFromJSON(options);\n }\n // Fallback to manual parsing for browsers that don't support the native method\n // Destructure to separate fields that need transformation\n const { challenge: challengeStr, allowCredentials } = options, restOptions = (0,tslib__WEBPACK_IMPORTED_MODULE_4__.__rest)(options\n // Convert challenge from base64url to ArrayBuffer\n , [\"challenge\", \"allowCredentials\"]);\n // Convert challenge from base64url to ArrayBuffer\n const challenge = (0,_base64url__WEBPACK_IMPORTED_MODULE_0__.base64UrlToUint8Array)(challengeStr).buffer;\n // Build the result object\n const result = Object.assign(Object.assign({}, restOptions), { challenge });\n // Only add allowCredentials if it exists\n if (allowCredentials && allowCredentials.length > 0) {\n result.allowCredentials = new Array(allowCredentials.length);\n for (let i = 0; i < allowCredentials.length; i++) {\n const cred = allowCredentials[i];\n result.allowCredentials[i] = Object.assign(Object.assign({}, cred), { id: (0,_base64url__WEBPACK_IMPORTED_MODULE_0__.base64UrlToUint8Array)(cred.id).buffer, type: cred.type || 'public-key', \n // Cast transports to handle future transport types like \"cable\"\n transports: cred.transports });\n }\n }\n return result;\n}\n/**\n * Convert a registration/enrollment credential response to server format.\n * Serializes binary fields to base64url for JSON transmission.\n * Supports both native WebAuthn Level 3 toJSON and manual fallback.\n *\n * @param {RegistrationCredential} credential - Credential from navigator.credentials.create()\n * @returns {RegistrationResponseJSON} JSON-serializable credential for server\n * @see {@link https://w3c.github.io/webauthn/#dom-publickeycredential-tojson W3C WebAuthn Spec - toJSON}\n */\nfunction serializeCredentialCreationResponse(credential) {\n var _a;\n // Check if the credential instance has the toJSON method\n if ('toJSON' in credential && typeof credential.toJSON === 'function') {\n // Use the native WebAuthn Level 3 method\n return credential.toJSON();\n }\n const credentialWithAttachment = credential;\n return {\n id: credential.id,\n rawId: credential.id,\n response: {\n attestationObject: (0,_base64url__WEBPACK_IMPORTED_MODULE_0__.bytesToBase64URL)(new Uint8Array(credential.response.attestationObject)),\n clientDataJSON: (0,_base64url__WEBPACK_IMPORTED_MODULE_0__.bytesToBase64URL)(new Uint8Array(credential.response.clientDataJSON)),\n },\n type: 'public-key',\n clientExtensionResults: credential.getClientExtensionResults(),\n // Convert null to undefined and cast to AuthenticatorAttachment type\n authenticatorAttachment: ((_a = credentialWithAttachment.authenticatorAttachment) !== null && _a !== void 0 ? _a : undefined),\n };\n}\n/**\n * Convert an authentication/verification credential response to server format.\n * Serializes binary fields to base64url for JSON transmission.\n * Supports both native WebAuthn Level 3 toJSON and manual fallback.\n *\n * @param {AuthenticationCredential} credential - Credential from navigator.credentials.get()\n * @returns {AuthenticationResponseJSON} JSON-serializable credential for server\n * @see {@link https://w3c.github.io/webauthn/#dom-publickeycredential-tojson W3C WebAuthn Spec - toJSON}\n */\nfunction serializeCredentialRequestResponse(credential) {\n var _a;\n // Check if the credential instance has the toJSON method\n if ('toJSON' in credential && typeof credential.toJSON === 'function') {\n // Use the native WebAuthn Level 3 method\n return credential.toJSON();\n }\n // Fallback to manual conversion for browsers that don't support toJSON\n // Access authenticatorAttachment via type assertion to handle TypeScript version differences\n // @simplewebauthn/types includes this property but base TypeScript 4.7.4 doesn't\n const credentialWithAttachment = credential;\n const clientExtensionResults = credential.getClientExtensionResults();\n const assertionResponse = credential.response;\n return {\n id: credential.id,\n rawId: credential.id, // W3C spec expects rawId to match id for JSON format\n response: {\n authenticatorData: (0,_base64url__WEBPACK_IMPORTED_MODULE_0__.bytesToBase64URL)(new Uint8Array(assertionResponse.authenticatorData)),\n clientDataJSON: (0,_base64url__WEBPACK_IMPORTED_MODULE_0__.bytesToBase64URL)(new Uint8Array(assertionResponse.clientDataJSON)),\n signature: (0,_base64url__WEBPACK_IMPORTED_MODULE_0__.bytesToBase64URL)(new Uint8Array(assertionResponse.signature)),\n userHandle: assertionResponse.userHandle\n ? (0,_base64url__WEBPACK_IMPORTED_MODULE_0__.bytesToBase64URL)(new Uint8Array(assertionResponse.userHandle))\n : undefined,\n },\n type: 'public-key',\n clientExtensionResults,\n // Convert null to undefined and cast to AuthenticatorAttachment type\n authenticatorAttachment: ((_a = credentialWithAttachment.authenticatorAttachment) !== null && _a !== void 0 ? _a : undefined),\n };\n}\n/**\n * A simple test to determine if a hostname is a properly-formatted domain name.\n * Considers localhost valid for development environments.\n *\n * A \"valid domain\" is defined here: https://url.spec.whatwg.org/#valid-domain\n *\n * Regex sourced from here:\n * https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch08s15.html\n *\n * @param {string} hostname - The hostname to validate\n * @returns {boolean} True if valid domain or localhost\n * @see {@link https://url.spec.whatwg.org/#valid-domain WHATWG URL Spec - Valid Domain}\n */\nfunction isValidDomain(hostname) {\n return (\n // Consider localhost valid as well since it's okay wrt Secure Contexts\n hostname === 'localhost' || /^([a-z0-9]+(-[a-z0-9]+)*\\.)+[a-z]{2,}$/i.test(hostname));\n}\n/**\n * Determine if the browser is capable of WebAuthn.\n * Checks for necessary Web APIs: PublicKeyCredential and Credential Management.\n *\n * @returns {boolean} True if browser supports WebAuthn\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredential#browser_compatibility MDN - PublicKeyCredential Browser Compatibility}\n */\nfunction browserSupportsWebAuthn() {\n var _a, _b;\n return !!((0,_helpers__WEBPACK_IMPORTED_MODULE_2__.isBrowser)() &&\n 'PublicKeyCredential' in window &&\n window.PublicKeyCredential &&\n 'credentials' in navigator &&\n typeof ((_a = navigator === null || navigator === void 0 ? void 0 : navigator.credentials) === null || _a === void 0 ? void 0 : _a.create) === 'function' &&\n typeof ((_b = navigator === null || navigator === void 0 ? void 0 : navigator.credentials) === null || _b === void 0 ? void 0 : _b.get) === 'function');\n}\n/**\n * Create a WebAuthn credential using the browser's credentials API.\n * Wraps navigator.credentials.create() with error handling.\n *\n * @param {CredentialCreationOptions} options - Options including publicKey parameters\n * @returns {Promise<RequestResult<RegistrationCredential, WebAuthnError>>} Created credential or error\n * @see {@link https://w3c.github.io/webauthn/#sctn-createCredential W3C WebAuthn Spec - Create Credential}\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/CredentialsContainer/create MDN - credentials.create}\n */\nasync function createCredential(options) {\n try {\n const response = await navigator.credentials.create(\n /** we assert the type here until typescript types are updated */\n options);\n if (!response) {\n return {\n data: null,\n error: new _webauthn_errors__WEBPACK_IMPORTED_MODULE_3__.WebAuthnUnknownError('Empty credential response', response),\n };\n }\n if (!(response instanceof PublicKeyCredential)) {\n return {\n data: null,\n error: new _webauthn_errors__WEBPACK_IMPORTED_MODULE_3__.WebAuthnUnknownError('Browser returned unexpected credential type', response),\n };\n }\n return { data: response, error: null };\n }\n catch (err) {\n return {\n data: null,\n error: (0,_webauthn_errors__WEBPACK_IMPORTED_MODULE_3__.identifyRegistrationError)({\n error: err,\n options,\n }),\n };\n }\n}\n/**\n * Get a WebAuthn credential using the browser's credentials API.\n * Wraps navigator.credentials.get() with error handling.\n *\n * @param {CredentialRequestOptions} options - Options including publicKey parameters\n * @returns {Promise<RequestResult<AuthenticationCredential, WebAuthnError>>} Retrieved credential or error\n * @see {@link https://w3c.github.io/webauthn/#sctn-getAssertion W3C WebAuthn Spec - Get Assertion}\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/CredentialsContainer/get MDN - credentials.get}\n */\nasync function getCredential(options) {\n try {\n const response = await navigator.credentials.get(\n /** we assert the type here until typescript types are updated */\n options);\n if (!response) {\n return {\n data: null,\n error: new _webauthn_errors__WEBPACK_IMPORTED_MODULE_3__.WebAuthnUnknownError('Empty credential response', response),\n };\n }\n if (!(response instanceof PublicKeyCredential)) {\n return {\n data: null,\n error: new _webauthn_errors__WEBPACK_IMPORTED_MODULE_3__.WebAuthnUnknownError('Browser returned unexpected credential type', response),\n };\n }\n return { data: response, error: null };\n }\n catch (err) {\n return {\n data: null,\n error: (0,_webauthn_errors__WEBPACK_IMPORTED_MODULE_3__.identifyAuthenticationError)({\n error: err,\n options,\n }),\n };\n }\n}\nconst DEFAULT_CREATION_OPTIONS = {\n hints: ['security-key'],\n authenticatorSelection: {\n authenticatorAttachment: 'cross-platform',\n requireResidentKey: false,\n /** set to preferred because older yubikeys don't have PIN/Biometric */\n userVerification: 'preferred',\n residentKey: 'discouraged',\n },\n attestation: 'direct',\n};\nconst DEFAULT_REQUEST_OPTIONS = {\n /** set to preferred because older yubikeys don't have PIN/Biometric */\n userVerification: 'preferred',\n hints: ['security-key'],\n attestation: 'direct',\n};\nfunction deepMerge(...sources) {\n const isObject = (val) => val !== null && typeof val === 'object' && !Array.isArray(val);\n const isArrayBufferLike = (val) => val instanceof ArrayBuffer || ArrayBuffer.isView(val);\n const result = {};\n for (const source of sources) {\n if (!source)\n continue;\n for (const key in source) {\n const value = source[key];\n if (value === undefined)\n continue;\n if (Array.isArray(value)) {\n // preserve array reference, including unions like AuthenticatorTransport[]\n result[key] = value;\n }\n else if (isArrayBufferLike(value)) {\n result[key] = value;\n }\n else if (isObject(value)) {\n const existing = result[key];\n if (isObject(existing)) {\n result[key] = deepMerge(existing, value);\n }\n else {\n result[key] = deepMerge(value);\n }\n }\n else {\n result[key] = value;\n }\n }\n }\n return result;\n}\n/**\n * Merges WebAuthn credential creation options with overrides.\n * Sets sensible defaults for authenticator selection and extensions.\n *\n * @param {PublicKeyCredentialCreationOptionsFuture} baseOptions - The base options from the server\n * @param {PublicKeyCredentialCreationOptionsFuture} overrides - Optional overrides to apply\n * @param {string} friendlyName - Optional friendly name for the credential\n * @returns {PublicKeyCredentialCreationOptionsFuture} Merged credential creation options\n * @see {@link https://w3c.github.io/webauthn/#dictdef-authenticatorselectioncriteria W3C WebAuthn Spec - AuthenticatorSelectionCriteria}\n */\nfunction mergeCredentialCreationOptions(baseOptions, overrides) {\n return deepMerge(DEFAULT_CREATION_OPTIONS, baseOptions, overrides || {});\n}\n/**\n * Merges WebAuthn credential request options with overrides.\n * Sets sensible defaults for user verification and hints.\n *\n * @param {PublicKeyCredentialRequestOptionsFuture} baseOptions - The base options from the server\n * @param {PublicKeyCredentialRequestOptionsFuture} overrides - Optional overrides to apply\n * @returns {PublicKeyCredentialRequestOptionsFuture} Merged credential request options\n * @see {@link https://w3c.github.io/webauthn/#dictdef-publickeycredentialrequestoptions W3C WebAuthn Spec - PublicKeyCredentialRequestOptions}\n */\nfunction mergeCredentialRequestOptions(baseOptions, overrides) {\n return deepMerge(DEFAULT_REQUEST_OPTIONS, baseOptions, overrides || {});\n}\n/**\n * WebAuthn API wrapper for Supabase Auth.\n * Provides methods for enrolling, challenging, verifying, authenticating, and registering WebAuthn credentials.\n *\n * @experimental This API is experimental and may change in future releases\n * @see {@link https://w3c.github.io/webauthn/ W3C WebAuthn Specification}\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Web_Authentication_API MDN - Web Authentication API}\n */\nclass WebAuthnApi {\n constructor(client) {\n this.client = client;\n // Bind all methods so they can be destructured\n this.enroll = this._enroll.bind(this);\n this.challenge = this._challenge.bind(this);\n this.verify = this._verify.bind(this);\n this.authenticate = this._authenticate.bind(this);\n this.register = this._register.bind(this);\n }\n /**\n * Enroll a new WebAuthn factor.\n * Creates an unverified WebAuthn factor that must be verified with a credential.\n *\n * @experimental This method is experimental and may change in future releases\n * @param {Omit<MFAEnrollWebauthnParams, 'factorType'>} params - Enrollment parameters (friendlyName required)\n * @returns {Promise<AuthMFAEnrollWebauthnResponse>} Enrolled factor details or error\n * @see {@link https://w3c.github.io/webauthn/#sctn-registering-a-new-credential W3C WebAuthn Spec - Registering a New Credential}\n */\n async _enroll(params) {\n return this.client.mfa.enroll(Object.assign(Object.assign({}, params), { factorType: 'webauthn' }));\n }\n /**\n * Challenge for WebAuthn credential creation or authentication.\n * Combines server challenge with browser credential operations.\n * Handles both registration (create) and authentication (request) flows.\n *\n * @experimental This method is experimental and may change in future releases\n * @param {MFAChallengeWebauthnParams & { friendlyName?: string; signal?: AbortSignal }} params - Challenge parameters including factorId\n * @param {Object} overrides - Allows you to override the parameters passed to navigator.credentials\n * @param {PublicKeyCredentialCreationOptionsFuture} overrides.create - Override options for credential creation\n * @param {PublicKeyCredentialRequestOptionsFuture} overrides.request - Override options for credential request\n * @returns {Promise<RequestResult>} Challenge response with credential or error\n * @see {@link https://w3c.github.io/webauthn/#sctn-credential-creation W3C WebAuthn Spec - Credential Creation}\n * @see {@link https://w3c.github.io/webauthn/#sctn-verifying-assertion W3C WebAuthn Spec - Verifying Assertion}\n */\n async _challenge({ factorId, webauthn, friendlyName, signal, }, overrides) {\n var _a;\n try {\n // Get challenge from server using the client's MFA methods\n const { data: challengeResponse, error: challengeError } = await this.client.mfa.challenge({\n factorId,\n webauthn,\n });\n if (!challengeResponse) {\n return { data: null, error: challengeError };\n }\n const abortSignal = signal !== null && signal !== void 0 ? signal : webAuthnAbortService.createNewAbortSignal();\n /** webauthn will fail if either of the name/displayname are blank */\n if (challengeResponse.webauthn.type === 'create') {\n const { user } = challengeResponse.webauthn.credential_options.publicKey;\n if (!user.name) {\n // Preserve original format: use friendlyName if provided, otherwise fetch fallback\n // This maintains backward compatibility with the ${user.id}:${name} format\n const nameToUse = friendlyName;\n if (!nameToUse) {\n // Only fetch user data if friendlyName is not provided (bug fix for null friendlyName)\n const currentUser = await this.client.getUser();\n const userData = currentUser.data.user;\n const fallbackName = ((_a = userData === null || userData === void 0 ? void 0 : userData.user_metadata) === null || _a === void 0 ? void 0 : _a.name) || (userData === null || userData === void 0 ? void 0 : userData.email) || (userData === null || userData === void 0 ? void 0 : userData.id) || 'User';\n user.name = `${user.id}:${fallbackName}`;\n }\n else {\n user.name = `${user.id}:${nameToUse}`;\n }\n }\n if (!user.displayName) {\n user.displayName = user.name;\n }\n }\n switch (challengeResponse.webauthn.type) {\n case 'create': {\n const options = mergeCredentialCreationOptions(challengeResponse.webauthn.credential_options.publicKey, overrides === null || overrides === void 0 ? void 0 : overrides.create);\n const { data, error } = await createCredential({\n publicKey: options,\n signal: abortSignal,\n });\n if (data) {\n return {\n data: {\n factorId,\n challengeId: challengeResponse.id,\n webauthn: {\n type: challengeResponse.webauthn.type,\n credential_response: data,\n },\n },\n error: null,\n };\n }\n return { data: null, error };\n }\n case 'request': {\n const options = mergeCredentialRequestOptions(challengeResponse.webauthn.credential_options.publicKey, overrides === null || overrides === void 0 ? void 0 : overrides.request);\n const { data, error } = await getCredential(Object.assign(Object.assign({}, challengeResponse.webauthn.credential_options), { publicKey: options, signal: abortSignal }));\n if (data) {\n return {\n data: {\n factorId,\n challengeId: challengeResponse.id,\n webauthn: {\n type: challengeResponse.webauthn.type,\n credential_response: data,\n },\n },\n error: null,\n };\n }\n return { data: null, error };\n }\n }\n }\n catch (error) {\n if ((0,_errors__WEBPACK_IMPORTED_MODULE_1__.isAuthError)(error)) {\n return { data: null, error };\n }\n return {\n data: null,\n error: new _errors__WEBPACK_IMPORTED_MODULE_1__.AuthUnknownError('Unexpected error in challenge', error),\n };\n }\n }\n /**\n * Verify a WebAuthn credential with the server.\n * Completes the WebAuthn ceremony by sending the credential to the server for verification.\n *\n * @experimental This method is experimental and may change in future releases\n * @param {Object} params - Verification parameters\n * @param {string} params.challengeId - ID of the challenge being verified\n * @param {string} params.factorId - ID of the WebAuthn factor\n * @param {MFAVerifyWebauthnParams<T>['webauthn']} params.webauthn - WebAuthn credential response\n * @returns {Promise<AuthMFAVerifyResponse>} Verification result with session or error\n * @see {@link https://w3c.github.io/webauthn/#sctn-verifying-assertion W3C WebAuthn Spec - Verifying an Authentication Assertion}\n * */\n async _verify({ challengeId, factorId, webauthn, }) {\n return this.client.mfa.verify({\n factorId,\n challengeId,\n webauthn: webauthn,\n });\n }\n /**\n * Complete WebAuthn authentication flow.\n * Performs challenge and verification in a single operation for existing credentials.\n *\n * @experimental This method is experimental and may change in future releases\n * @param {Object} params - Authentication parameters\n * @param {string} params.factorId - ID of the WebAuthn factor to authenticate with\n * @param {Object} params.webauthn - WebAuthn configuration\n * @param {string} params.webauthn.rpId - Relying Party ID (defaults to current hostname)\n * @param {string[]} params.webauthn.rpOrigins - Allowed origins (defaults to current origin)\n * @param {AbortSignal} params.webauthn.signal - Optional abort signal\n * @param {PublicKeyCredentialRequestOptionsFuture} overrides - Override options for navigator.credentials.get\n * @returns {Promise<RequestResult<AuthMFAVerifyResponseData, WebAuthnError | AuthError>>} Authentication result\n * @see {@link https://w3c.github.io/webauthn/#sctn-authentication W3C WebAuthn Spec - Authentication Ceremony}\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredentialRequestOptions MDN - PublicKeyCredentialRequestOptions}\n */\n async _authenticate({ factorId, webauthn: { rpId = typeof window !== 'undefined' ? window.location.hostname : undefined, rpOrigins = typeof window !== 'undefined' ? [window.location.origin] : undefined, signal, } = {}, }, overrides) {\n if (!rpId) {\n return {\n data: null,\n error: new _errors__WEBPACK_IMPORTED_MODULE_1__.AuthError('rpId is required for WebAuthn authentication'),\n };\n }\n try {\n if (!browserSupportsWebAuthn()) {\n return {\n data: null,\n error: new _errors__WEBPACK_IMPORTED_MODULE_1__.AuthUnknownError('Browser does not support WebAuthn', null),\n };\n }\n // Get challenge and credential\n const { data: challengeResponse, error: challengeError } = await this.challenge({\n factorId,\n webauthn: { rpId, rpOrigins },\n signal,\n }, { request: overrides });\n if (!challengeResponse) {\n return { data: null, error: challengeError };\n }\n const { webauthn } = challengeResponse;\n // Verify credential\n return this._verify({\n factorId,\n challengeId: challengeResponse.challengeId,\n webauthn: {\n type: webauthn.type,\n rpId,\n rpOrigins,\n credential_response: webauthn.credential_response,\n },\n });\n }\n catch (error) {\n if ((0,_errors__WEBPACK_IMPORTED_MODULE_1__.isAuthError)(error)) {\n return { data: null, error };\n }\n return {\n data: null,\n error: new _errors__WEBPACK_IMPORTED_MODULE_1__.AuthUnknownError('Unexpected error in authenticate', error),\n };\n }\n }\n /**\n * Complete WebAuthn registration flow.\n * Performs enrollment, challenge, and verification in a single operation for new credentials.\n *\n * @experimental This method is experimental and may change in future releases\n * @param {Object} params - Registration parameters\n * @param {string} params.friendlyName - User-friendly name for the credential\n * @param {string} params.rpId - Relying Party ID (defaults to current hostname)\n * @param {string[]} params.rpOrigins - Allowed origins (defaults to current origin)\n * @param {AbortSignal} params.signal - Optional abort signal\n * @param {PublicKeyCredentialCreationOptionsFuture} overrides - Override options for navigator.credentials.create\n * @returns {Promise<RequestResult<AuthMFAVerifyResponseData, WebAuthnError | AuthError>>} Registration result\n * @see {@link https://w3c.github.io/webauthn/#sctn-registering-a-new-credential W3C WebAuthn Spec - Registration Ceremony}\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/PublicKeyCredentialCreationOptions MDN - PublicKeyCredentialCreationOptions}\n */\n async _register({ friendlyName, webauthn: { rpId = typeof window !== 'undefined' ? window.location.hostname : undefined, rpOrigins = typeof window !== 'undefined' ? [window.location.origin] : undefined, signal, } = {}, }, overrides) {\n if (!rpId) {\n return {\n data: null,\n error: new _errors__WEBPACK_IMPORTED_MODULE_1__.AuthError('rpId is required for WebAuthn registration'),\n };\n }\n try {\n if (!browserSupportsWebAuthn()) {\n return {\n data: null,\n error: new _errors__WEBPACK_IMPORTED_MODULE_1__.AuthUnknownError('Browser does not support WebAuthn', null),\n };\n }\n // Enroll factor\n const { data: factor, error: enrollError } = await this._enroll({\n friendlyName,\n });\n if (!factor) {\n await this.client.mfa\n .listFactors()\n .then((factors) => {\n var _a;\n return (_a = factors.data) === null || _a === void 0 ? void 0 : _a.all.find((v) => v.factor_type === 'webauthn' &&\n v.friendly_name === friendlyName &&\n v.status !== 'unverified');\n })\n .then((factor) => (factor ? this.client.mfa.unenroll({ factorId: factor === null || factor === void 0 ? void 0 : factor.id }) : void 0));\n return { data: null, error: enrollError };\n }\n // Get challenge and create credential\n const { data: challengeResponse, error: challengeError } = await this._challenge({\n factorId: factor.id,\n friendlyName: factor.friendly_name,\n webauthn: { rpId, rpOrigins },\n signal,\n }, {\n create: overrides,\n });\n if (!challengeResponse) {\n return { data: null, error: challengeError };\n }\n return this._verify({\n factorId: factor.id,\n challengeId: challengeResponse.challengeId,\n webauthn: {\n rpId,\n rpOrigins,\n type: challengeResponse.webauthn.type,\n credential_response: challengeResponse.webauthn.credential_response,\n },\n });\n }\n catch (error) {\n if ((0,_errors__WEBPACK_IMPORTED_MODULE_1__.isAuthError)(error)) {\n return { data: null, error };\n }\n return {\n data: null,\n error: new _errors__WEBPACK_IMPORTED_MODULE_1__.AuthUnknownError('Unexpected error in register', error),\n };\n }\n }\n}\n//# sourceMappingURL=webauthn.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvd2ViYXV0aG4uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQStCO0FBQ3VDO0FBQ0Y7QUFDOUI7QUFDNEc7QUFDaEQ7QUFDbEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsYUFBYTtBQUM5QixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGlDQUFpQztBQUM1QyxhQUFhLDBDQUEwQztBQUN2RCxTQUFTO0FBQ1Q7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksOERBQThELHlCQUF5Qiw2Q0FBTTtBQUN6RztBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsaUVBQXFCO0FBQzNDO0FBQ0EsK0NBQStDLGVBQWUsSUFBSSxpRUFBcUIsc0JBQXNCO0FBQzdHO0FBQ0EsaURBQWlELGtCQUFrQjtBQUNuRSxjQUFjO0FBQ2Q7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLCtCQUErQjtBQUN2RDtBQUNBLHlFQUF5RSxXQUFXLElBQUksaUVBQXFCO0FBQzdHO0FBQ0EsNkNBQTZDO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsZ0NBQWdDO0FBQzND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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsYUFBYTtBQUNiO0FBQ0E7QUFDQSxnQkFBZ0Isb0RBQVc7QUFDM0IseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQixxREFBZ0I7QUFDM0M7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvYXV0aC1qcy9kaXN0L21vZHVsZS9saWIvd2ViYXV0aG4uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19yZXN0IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBiYXNlNjRVcmxUb1VpbnQ4QXJyYXksIGJ5dGVzVG9CYXNlNjRVUkwgfSBmcm9tICcuL2Jhc2U2NHVybCc7XG5pbXBvcnQgeyBBdXRoRXJyb3IsIEF1dGhVbmtub3duRXJyb3IsIGlzQXV0aEVycm9yIH0gZnJvbSAnLi9lcnJvcnMnO1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IGlkZW50aWZ5QXV0aGVudGljYXRpb25FcnJvciwgaWRlbnRpZnlSZWdpc3RyYXRpb25FcnJvciwgaXNXZWJBdXRobkVycm9yLCBXZWJBdXRobkVycm9yLCBXZWJBdXRoblVua25vd25FcnJvciwgfSBmcm9tICcuL3dlYmF1dGhuLmVycm9ycyc7XG5leHBvcnQgeyBXZWJBdXRobkVycm9yLCBpc1dlYkF1dGhuRXJyb3IsIGlkZW50aWZ5UmVnaXN0cmF0aW9uRXJyb3IsIGlkZW50aWZ5QXV0aGVudGljYXRpb25FcnJvciB9O1xuLyoqXG4gKiBXZWJBdXRobiBhYm9ydCBzZXJ2aWNlIHRvIG1hbmFnZSBjZXJlbW9ueSBjYW5jZWxsYXRpb24uXG4gKiBFbnN1cmVzIG9ubHkgb25lIFdlYkF1dGhuIGNlcmVtb255IGlzIGFjdGl2ZSBhdCBhIHRpbWUgdG8gcHJldmVudCBcIm9wZXJhdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzXCIgZXJyb3JzLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBjbGFzcyBpcyBleHBlcmltZW50YWwgYW5kIG1heSBjaGFuZ2UgaW4gZnV0dXJlIHJlbGVhc2VzXG4gKiBAc2VlIHtAbGluayBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXV0aG4vI3NjdG4tYXV0b21hdGlvbi13ZWJkcml2ZXItY2FwYWJpbGl0eSBXM0MgV2ViQXV0aG4gU3BlYyAtIEFib3J0aW5nIENlcmVtb25pZXN9XG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJBdXRobkFib3J0U2VydmljZSB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGFuIGFib3J0IHNpZ25hbCBmb3IgYSBuZXcgV2ViQXV0aG4gb3BlcmF0aW9uLlxuICAgICAqIEF1dG9tYXRpY2FsbHkgY2FuY2VscyBhbnkgZXhpc3Rpbmcgb3BlcmF0aW9uLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0Fib3J0U2lnbmFsfSBTaWduYWwgdG8gcGFzcyB0byBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuY3JlYXRlKCkgb3IgLmdldCgpXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Fib3J0U2lnbmFsIE1ETiAtIEFib3J0U2lnbmFsfVxuICAgICAqL1xuICAgIGNyZWF0ZU5ld0Fib3J0U2lnbmFsKCkge1xuICAgICAgICAvLyBBYm9ydCBhbnkgZXhpc3RpbmcgY2FsbHMgdG8gbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmNyZWF0ZSgpIG9yIG5hdmlnYXRvci5jcmVkZW50aWFscy5nZXQoKVxuICAgICAgICBpZiAodGhpcy5jb250cm9sbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBhYm9ydEVycm9yID0gbmV3IEVycm9yKCdDYW5jZWxsaW5nIGV4aXN0aW5nIFdlYkF1dGhuIEFQSSBjYWxsIGZvciBuZXcgb25lJyk7XG4gICAgICAgICAgICBhYm9ydEVycm9yLm5hbWUgPSAnQWJvcnRFcnJvcic7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIuYWJvcnQoYWJvcnRFcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gbmV3Q29udHJvbGxlcjtcbiAgICAgICAgcmV0dXJuIG5ld0NvbnRyb2xsZXIuc2lnbmFsO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBNYW51YWxseSBjYW5jZWwgdGhlIGN1cnJlbnQgV2ViQXV0aG4gb3BlcmF0aW9uLlxuICAgICAqIFVzZWZ1bCBmb3IgY2xlYW5pbmcgdXAgd2hlbiB1c2VyIGNhbmNlbHMgb3IgbmF2aWdhdGVzIGF3YXkuXG4gICAgICpcbiAgICAgKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQWJvcnRDb250cm9sbGVyL2Fib3J0IE1ETiAtIEFib3J0Q29udHJvbGxlci5hYm9ydH1cbiAgICAgKi9cbiAgICBjYW5jZWxDZXJlbW9ueSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29udHJvbGxlcikge1xuICAgICAgICAgICAgY29uc3QgYWJvcnRFcnJvciA9IG5ldyBFcnJvcignTWFudWFsbHkgY2FuY2VsbGluZyBleGlzdGluZyBXZWJBdXRobiBBUEkgY2FsbCcpO1xuICAgICAgICAgICAgYWJvcnRFcnJvci5uYW1lID0gJ0Fib3J0RXJyb3InO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLmFib3J0KGFib3J0RXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxufVxuLyoqXG4gKiBTaW5nbGV0b24gaW5zdGFuY2UgdG8gZW5zdXJlIG9ubHkgb25lIFdlYkF1dGhuIGNlcmVtb255IGlzIGFjdGl2ZSBhdCBhIHRpbWUuXG4gKiBUaGlzIHByZXZlbnRzIFwib3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3NcIiBlcnJvcnMgd2hlbiByZXRyeWluZyBXZWJBdXRobiBvcGVyYXRpb25zLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBpbnN0YW5jZSBpcyBleHBlcmltZW50YWwgYW5kIG1heSBjaGFuZ2UgaW4gZnV0dXJlIHJlbGVhc2VzXG4gKi9cbmV4cG9ydCBjb25zdCB3ZWJBdXRobkFib3J0U2VydmljZSA9IG5ldyBXZWJBdXRobkFib3J0U2VydmljZSgpO1xuLyoqXG4gKiBDb252ZXJ0IGJhc2U2NHVybCBlbmNvZGVkIHN0cmluZ3MgaW4gV2ViQXV0aG4gY3JlZGVudGlhbCBjcmVhdGlvbiBvcHRpb25zIHRvIEFycmF5QnVmZmVyc1xuICogYXMgcmVxdWlyZWQgYnkgdGhlIFdlYkF1dGhuIGJyb3dzZXIgQVBJLlxuICogU3VwcG9ydHMgYm90aCBuYXRpdmUgV2ViQXV0aG4gTGV2ZWwgMyBwYXJzZUNyZWF0aW9uT3B0aW9uc0Zyb21KU09OIGFuZCBtYW51YWwgZmFsbGJhY2suXG4gKlxuICogQHBhcmFtIHtTZXJ2ZXJDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zfSBvcHRpb25zIC0gSlNPTiBvcHRpb25zIGZyb20gc2VydmVyIHdpdGggYmFzZTY0dXJsIGVuY29kZWQgZmllbGRzXG4gKiBAcmV0dXJucyB7UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc0Z1dHVyZX0gT3B0aW9ucyByZWFkeSBmb3IgbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmNyZWF0ZSgpXG4gKiBAc2VlIHtAbGluayBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXV0aG4vI3NjdG4tcGFyc2VDcmVhdGlvbk9wdGlvbnNGcm9tSlNPTiBXM0MgV2ViQXV0aG4gU3BlYyAtIHBhcnNlQ3JlYXRpb25PcHRpb25zRnJvbUpTT059XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZXNlcmlhbGl6ZUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NyZWRlbnRpYWwgY3JlYXRpb24gb3B0aW9ucyBhcmUgcmVxdWlyZWQnKTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgaWYgdGhlIG5hdGl2ZSBwYXJzZUNyZWF0aW9uT3B0aW9uc0Zyb21KU09OIG1ldGhvZCBpcyBhdmFpbGFibGVcbiAgICBpZiAodHlwZW9mIFB1YmxpY0tleUNyZWRlbnRpYWwgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICdwYXJzZUNyZWF0aW9uT3B0aW9uc0Zyb21KU09OJyBpbiBQdWJsaWNLZXlDcmVkZW50aWFsICYmXG4gICAgICAgIHR5cGVvZiBQdWJsaWNLZXlDcmVkZW50aWFsXG4gICAgICAgICAgICAucGFyc2VDcmVhdGlvbk9wdGlvbnNGcm9tSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBVc2UgdGhlIG5hdGl2ZSBXZWJBdXRobiBMZXZlbCAzIG1ldGhvZFxuICAgICAgICByZXR1cm4gUHVibGljS2V5Q3JlZGVudGlhbC5wYXJzZUNyZWF0aW9uT3B0aW9uc0Zyb21KU09OKFxuICAgICAgICAvKiogd2UgYXNzZXJ0IHRoZSBvcHRpb25zIGhlcmUgYXMgdHlwZXNjcmlwdCBzdGlsbCBkb2Vzbid0IGtub3cgYWJvdXQgZnV0dXJlIHdlYmF1dGhuIHR5cGVzICovXG4gICAgICAgIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvLyBGYWxsYmFjayB0byBtYW51YWwgcGFyc2luZyBmb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZSBuYXRpdmUgbWV0aG9kXG4gICAgLy8gRGVzdHJ1Y3R1cmUgdG8gc2VwYXJhdGUgZmllbGRzIHRoYXQgbmVlZCB0cmFuc2Zvcm1hdGlvblxuICAgIGNvbnN0IHsgY2hhbGxlbmdlOiBjaGFsbGVuZ2VTdHIsIHVzZXI6IHVzZXJPcHRzLCBleGNsdWRlQ3JlZGVudGlhbHMgfSA9IG9wdGlvbnMsIHJlc3RPcHRpb25zID0gX19yZXN0KG9wdGlvbnNcbiAgICAvLyBDb252ZXJ0IGNoYWxsZW5nZSBmcm9tIGJhc2U2NHVybCB0byBBcnJheUJ1ZmZlclxuICAgICwgW1wiY2hhbGxlbmdlXCIsIFwidXNlclwiLCBcImV4Y2x1ZGVDcmVkZW50aWFsc1wiXSk7XG4gICAgLy8gQ29udmVydCBjaGFsbGVuZ2UgZnJvbSBiYXNlNjR1cmwgdG8gQXJyYXlCdWZmZXJcbiAgICBjb25zdCBjaGFsbGVuZ2UgPSBiYXNlNjRVcmxUb1VpbnQ4QXJyYXkoY2hhbGxlbmdlU3RyKS5idWZmZXI7XG4gICAgLy8gQ29udmVydCB1c2VyLmlkIGZyb20gYmFzZTY0dXJsIHRvIEFycmF5QnVmZmVyXG4gICAgY29uc3QgdXNlciA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdXNlck9wdHMpLCB7IGlkOiBiYXNlNjRVcmxUb1VpbnQ4QXJyYXkodXNlck9wdHMuaWQpLmJ1ZmZlciB9KTtcbiAgICAvLyBCdWlsZCB0aGUgcmVzdWx0IG9iamVjdFxuICAgIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzdE9wdGlvbnMpLCB7IGNoYWxsZW5nZSxcbiAgICAgICAgdXNlciB9KTtcbiAgICAvLyBPbmx5IGFkZCBleGNsdWRlQ3JlZGVudGlhbHMgaWYgaXQgZXhpc3RzXG4gICAgaWYgKGV4Y2x1ZGVDcmVkZW50aWFscyAmJiBleGNsdWRlQ3JlZGVudGlhbHMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXN1bHQuZXhjbHVkZUNyZWRlbnRpYWxzID0gbmV3IEFycmF5KGV4Y2x1ZGVDcmVkZW50aWFscy5sZW5ndGgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV4Y2x1ZGVDcmVkZW50aWFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY3JlZCA9IGV4Y2x1ZGVDcmVkZW50aWFsc1tpXTtcbiAgICAgICAgICAgIHJlc3VsdC5leGNsdWRlQ3JlZGVudGlhbHNbaV0gPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNyZWQpLCB7IGlkOiBiYXNlNjRVcmxUb1VpbnQ4QXJyYXkoY3JlZC5pZCkuYnVmZmVyLCB0eXBlOiBjcmVkLnR5cGUgfHwgJ3B1YmxpYy1rZXknLCBcbiAgICAgICAgICAgICAgICAvLyBDYXN0IHRyYW5zcG9ydHMgdG8gaGFuZGxlIGZ1dHVyZSB0cmFuc3BvcnQgdHlwZXMgbGlrZSBcImNhYmxlXCJcbiAgICAgICAgICAgICAgICB0cmFuc3BvcnRzOiBjcmVkLnRyYW5zcG9ydHMgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQ29udmVydCBiYXNlNjR1cmwgZW5jb2RlZCBzdHJpbmdzIGluIFdlYkF1dGhuIGNyZWRlbnRpYWwgcmVxdWVzdCBvcHRpb25zIHRvIEFycmF5QnVmZmVyc1xuICogYXMgcmVxdWlyZWQgYnkgdGhlIFdlYkF1dGhuIGJyb3dzZXIgQVBJLlxuICogU3VwcG9ydHMgYm90aCBuYXRpdmUgV2ViQXV0aG4gTGV2ZWwgMyBwYXJzZVJlcXVlc3RPcHRpb25zRnJvbUpTT04gYW5kIG1hbnVhbCBmYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0ge1NlcnZlckNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc30gb3B0aW9ucyAtIEpTT04gb3B0aW9ucyBmcm9tIHNlcnZlciB3aXRoIGJhc2U2NHVybCBlbmNvZGVkIGZpZWxkc1xuICogQHJldHVybnMge1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc0Z1dHVyZX0gT3B0aW9ucyByZWFkeSBmb3IgbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmdldCgpXG4gKiBAc2VlIHtAbGluayBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXV0aG4vI3NjdG4tcGFyc2VSZXF1ZXN0T3B0aW9uc0Zyb21KU09OIFczQyBXZWJBdXRobiBTcGVjIC0gcGFyc2VSZXF1ZXN0T3B0aW9uc0Zyb21KU09OfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVzZXJpYWxpemVDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NyZWRlbnRpYWwgcmVxdWVzdCBvcHRpb25zIGFyZSByZXF1aXJlZCcpO1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiB0aGUgbmF0aXZlIHBhcnNlUmVxdWVzdE9wdGlvbnNGcm9tSlNPTiBtZXRob2QgaXMgYXZhaWxhYmxlXG4gICAgaWYgKHR5cGVvZiBQdWJsaWNLZXlDcmVkZW50aWFsICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAncGFyc2VSZXF1ZXN0T3B0aW9uc0Zyb21KU09OJyBpbiBQdWJsaWNLZXlDcmVkZW50aWFsICYmXG4gICAgICAgIHR5cGVvZiBQdWJsaWNLZXlDcmVkZW50aWFsXG4gICAgICAgICAgICAucGFyc2VSZXF1ZXN0T3B0aW9uc0Zyb21KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFVzZSB0aGUgbmF0aXZlIFdlYkF1dGhuIExldmVsIDMgbWV0aG9kXG4gICAgICAgIHJldHVybiBQdWJsaWNLZXlDcmVkZW50aWFsLnBhcnNlUmVxdWVzdE9wdGlvbnNGcm9tSlNPTihvcHRpb25zKTtcbiAgICB9XG4gICAgLy8gRmFsbGJhY2sgdG8gbWFudWFsIHBhcnNpbmcgZm9yIGJyb3dzZXJzIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGUgbmF0aXZlIG1ldGhvZFxuICAgIC8vIERlc3RydWN0dXJlIHRvIHNlcGFyYXRlIGZpZWxkcyB0aGF0IG5lZWQgdHJhbnNmb3JtYXRpb25cbiAgICBjb25zdCB7IGNoYWxsZW5nZTogY2hhbGxlbmdlU3RyLCBhbGxvd0NyZWRlbnRpYWxzIH0gPSBvcHRpb25zLCByZXN0T3B0aW9ucyA9IF9fcmVzdChvcHRpb25zXG4gICAgLy8gQ29udmVydCBjaGFsbGVuZ2UgZnJvbSBiYXNlNjR1cmwgdG8gQXJyYXlCdWZmZXJcbiAgICAsIFtcImNoYWxsZW5nZVwiLCBcImFsbG93Q3JlZGVudGlhbHNcIl0pO1xuICAgIC8vIENvbnZlcnQgY2hhbGxlbmdlIGZyb20gYmFzZTY0dXJsIHRvIEFycmF5QnVmZmVyXG4gICAgY29uc3QgY2hhbGxlbmdlID0gYmFzZTY0VXJsVG9VaW50OEFycmF5KGNoYWxsZW5nZVN0cikuYnVmZmVyO1xuICAgIC8vIEJ1aWxkIHRoZSByZXN1bHQgb2JqZWN0XG4gICAgY29uc3QgcmVzdWx0ID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXN0T3B0aW9ucyksIHsgY2hhbGxlbmdlIH0pO1xuICAgIC8vIE9ubHkgYWRkIGFsbG93Q3JlZGVudGlhbHMgaWYgaXQgZXhpc3RzXG4gICAgaWYgKGFsbG93Q3JlZGVudGlhbHMgJiYgYWxsb3dDcmVkZW50aWFscy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzID0gbmV3IEFycmF5KGFsbG93Q3JlZGVudGlhbHMubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbGxvd0NyZWRlbnRpYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjcmVkID0gYWxsb3dDcmVkZW50aWFsc1tpXTtcbiAgICAgICAgICAgIHJlc3VsdC5hbGxvd0NyZWRlbnRpYWxzW2ldID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjcmVkKSwgeyBpZDogYmFzZTY0VXJsVG9VaW50OEFycmF5KGNyZWQuaWQpLmJ1ZmZlciwgdHlwZTogY3JlZC50eXBlIHx8ICdwdWJsaWMta2V5JywgXG4gICAgICAgICAgICAgICAgLy8gQ2FzdCB0cmFuc3BvcnRzIHRvIGhhbmRsZSBmdXR1cmUgdHJhbnNwb3J0IHR5cGVzIGxpa2UgXCJjYWJsZVwiXG4gICAgICAgICAgICAgICAgdHJhbnNwb3J0czogY3JlZC50cmFuc3BvcnRzIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIENvbnZlcnQgYSByZWdpc3RyYXRpb24vZW5yb2xsbWVudCBjcmVkZW50aWFsIHJlc3BvbnNlIHRvIHNlcnZlciBmb3JtYXQuXG4gKiBTZXJpYWxpemVzIGJpbmFyeSBmaWVsZHMgdG8gYmFzZTY0dXJsIGZvciBKU09OIHRyYW5zbWlzc2lvbi5cbiAqIFN1cHBvcnRzIGJvdGggbmF0aXZlIFdlYkF1dGhuIExldmVsIDMgdG9KU09OIGFuZCBtYW51YWwgZmFsbGJhY2suXG4gKlxuICogQHBhcmFtIHtSZWdpc3RyYXRpb25DcmVkZW50aWFsfSBjcmVkZW50aWFsIC0gQ3JlZGVudGlhbCBmcm9tIG5hdmlnYXRvci5jcmVkZW50aWFscy5jcmVhdGUoKVxuICogQHJldHVybnMge1JlZ2lzdHJhdGlvblJlc3BvbnNlSlNPTn0gSlNPTi1zZXJpYWxpemFibGUgY3JlZGVudGlhbCBmb3Igc2VydmVyXG4gKiBAc2VlIHtAbGluayBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXV0aG4vI2RvbS1wdWJsaWNrZXljcmVkZW50aWFsLXRvanNvbiBXM0MgV2ViQXV0aG4gU3BlYyAtIHRvSlNPTn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUNyZWRlbnRpYWxDcmVhdGlvblJlc3BvbnNlKGNyZWRlbnRpYWwpIHtcbiAgICB2YXIgX2E7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIGNyZWRlbnRpYWwgaW5zdGFuY2UgaGFzIHRoZSB0b0pTT04gbWV0aG9kXG4gICAgaWYgKCd0b0pTT04nIGluIGNyZWRlbnRpYWwgJiYgdHlwZW9mIGNyZWRlbnRpYWwudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFVzZSB0aGUgbmF0aXZlIFdlYkF1dGhuIExldmVsIDMgbWV0aG9kXG4gICAgICAgIHJldHVybiBjcmVkZW50aWFsLnRvSlNPTigpO1xuICAgIH1cbiAgICBjb25zdCBjcmVkZW50aWFsV2l0aEF0dGFjaG1lbnQgPSBjcmVkZW50aWFsO1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBjcmVkZW50aWFsLmlkLFxuICAgICAgICByYXdJZDogY3JlZGVudGlhbC5pZCxcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICAgIGF0dGVzdGF0aW9uT2JqZWN0OiBieXRlc1RvQmFzZTY0VVJMKG5ldyBVaW50OEFycmF5KGNyZWRlbnRpYWwucmVzcG9uc2UuYXR0ZXN0YXRpb25PYmplY3QpKSxcbiAgICAgICAgICAgIGNsaWVudERhdGFKU09OOiBieXRlc1RvQmFzZTY0VVJMKG5ldyBVaW50OEFycmF5KGNyZWRlbnRpYWwucmVzcG9uc2UuY2xpZW50RGF0YUpTT04pKSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogJ3B1YmxpYy1rZXknLFxuICAgICAgICBjbGllbnRFeHRlbnNpb25SZXN1bHRzOiBjcmVkZW50aWFsLmdldENsaWVudEV4dGVuc2lvblJlc3VsdHMoKSxcbiAgICAgICAgLy8gQ29udmVydCBudWxsIHRvIHVuZGVmaW5lZCBhbmQgY2FzdCB0byBBdXRoZW50aWNhdG9yQXR0YWNobWVudCB0eXBlXG4gICAgICAgIGF1dGhlbnRpY2F0b3JBdHRhY2htZW50OiAoKF9hID0gY3JlZGVudGlhbFdpdGhBdHRhY2htZW50LmF1dGhlbnRpY2F0b3JBdHRhY2htZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB1bmRlZmluZWQpLFxuICAgIH07XG59XG4vKipcbiAqIENvbnZlcnQgYW4gYXV0aGVudGljYXRpb24vdmVyaWZpY2F0aW9uIGNyZWRlbnRpYWwgcmVzcG9uc2UgdG8gc2VydmVyIGZvcm1hdC5cbiAqIFNlcmlhbGl6ZXMgYmluYXJ5IGZpZWxkcyB0byBiYXNlNjR1cmwgZm9yIEpTT04gdHJhbnNtaXNzaW9uLlxuICogU3VwcG9ydHMgYm90aCBuYXRpdmUgV2ViQXV0aG4gTGV2ZWwgMyB0b0pTT04gYW5kIG1hbnVhbCBmYWxsYmFjay5cbiAqXG4gKiBAcGFyYW0ge0F1dGhlbnRpY2F0aW9uQ3JlZGVudGlhbH0gY3JlZGVudGlhbCAtIENyZWRlbnRpYWwgZnJvbSBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuZ2V0KClcbiAqIEByZXR1cm5zIHtBdXRoZW50aWNhdGlvblJlc3BvbnNlSlNPTn0gSlNPTi1zZXJpYWxpemFibGUgY3JlZGVudGlhbCBmb3Igc2VydmVyXG4gKiBAc2VlIHtAbGluayBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXV0aG4vI2RvbS1wdWJsaWNrZXljcmVkZW50aWFsLXRvanNvbiBXM0MgV2ViQXV0aG4gU3BlYyAtIHRvSlNPTn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUNyZWRlbnRpYWxSZXF1ZXN0UmVzcG9uc2UoY3JlZGVudGlhbCkge1xuICAgIHZhciBfYTtcbiAgICAvLyBDaGVjayBpZiB0aGUgY3JlZGVudGlhbCBpbnN0YW5jZSBoYXMgdGhlIHRvSlNPTiBtZXRob2RcbiAgICBpZiAoJ3RvSlNPTicgaW4gY3JlZGVudGlhbCAmJiB0eXBlb2YgY3JlZGVudGlhbC50b0pTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVXNlIHRoZSBuYXRpdmUgV2ViQXV0aG4gTGV2ZWwgMyBtZXRob2RcbiAgICAgICAgcmV0dXJuIGNyZWRlbnRpYWwudG9KU09OKCk7XG4gICAgfVxuICAgIC8vIEZhbGxiYWNrIHRvIG1hbnVhbCBjb252ZXJzaW9uIGZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgdG9KU09OXG4gICAgLy8gQWNjZXNzIGF1dGhlbnRpY2F0b3JBdHRhY2htZW50IHZpYSB0eXBlIGFzc2VydGlvbiB0byBoYW5kbGUgVHlwZVNjcmlwdCB2ZXJzaW9uIGRpZmZlcmVuY2VzXG4gICAgLy8gQHNpbXBsZXdlYmF1dGhuL3R5cGVzIGluY2x1ZGVzIHRoaXMgcHJvcGVydHkgYnV0IGJhc2UgVHlwZVNjcmlwdCA0LjcuNCBkb2Vzbid0XG4gICAgY29uc3QgY3JlZGVudGlhbFdpdGhBdHRhY2htZW50ID0gY3JlZGVudGlhbDtcbiAgICBjb25zdCBjbGllbnRFeHRlbnNpb25SZXN1bHRzID0gY3JlZGVudGlhbC5nZXRDbGllbnRFeHRlbnNpb25SZXN1bHRzKCk7XG4gICAgY29uc3QgYXNzZXJ0aW9uUmVzcG9uc2UgPSBjcmVkZW50aWFsLnJlc3BvbnNlO1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBjcmVkZW50aWFsLmlkLFxuICAgICAgICByYXdJZDogY3JlZGVudGlhbC5pZCwgLy8gVzNDIHNwZWMgZXhwZWN0cyByYXdJZCB0byBtYXRjaCBpZCBmb3IgSlNPTiBmb3JtYXRcbiAgICAgICAgcmVzcG9uc2U6IHtcbiAgICAgICAgICAgIGF1dGhlbnRpY2F0b3JEYXRhOiBieXRlc1RvQmFzZTY0VVJMKG5ldyBVaW50OEFycmF5KGFzc2VydGlvblJlc3BvbnNlLmF1dGhlbnRpY2F0b3JEYXRhKSksXG4gICAgICAgICAgICBjbGllbnREYXRhSlNPTjogYnl0ZXNUb0Jhc2U2NFVSTChuZXcgVWludDhBcnJheShhc3NlcnRpb25SZXNwb25zZS5jbGllbnREYXRhSlNPTikpLFxuICAgICAgICAgICAgc2lnbmF0dXJlOiBieXRlc1RvQmFzZTY0VVJMKG5ldyBVaW50OEFycmF5KGFzc2VydGlvblJlc3BvbnNlLnNpZ25hdHVyZSkpLFxuICAgICAgICAgICAgdXNlckhhbmRsZTogYXNzZXJ0aW9uUmVzcG9uc2UudXNlckhhbmRsZVxuICAgICAgICAgICAgICAgID8gYnl0ZXNUb0Jhc2U2NFVSTChuZXcgVWludDhBcnJheShhc3NlcnRpb25SZXNwb25zZS51c2VySGFuZGxlKSlcbiAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogJ3B1YmxpYy1rZXknLFxuICAgICAgICBjbGllbnRFeHRlbnNpb25SZXN1bHRzLFxuICAgICAgICAvLyBDb252ZXJ0IG51bGwgdG8gdW5kZWZpbmVkIGFuZCBjYXN0IHRvIEF1dGhlbnRpY2F0b3JBdHRhY2htZW50IHR5cGVcbiAgICAgICAgYXV0aGVudGljYXRvckF0dGFjaG1lbnQ6ICgoX2EgPSBjcmVkZW50aWFsV2l0aEF0dGFjaG1lbnQuYXV0aGVudGljYXRvckF0dGFjaG1lbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHVuZGVmaW5lZCksXG4gICAgfTtcbn1cbi8qKlxuICogQSBzaW1wbGUgdGVzdCB0byBkZXRlcm1pbmUgaWYgYSBob3N0bmFtZSBpcyBhIHByb3Blcmx5LWZvcm1hdHRlZCBkb21haW4gbmFtZS5cbiAqIENvbnNpZGVycyBsb2NhbGhvc3QgdmFsaWQgZm9yIGRldmVsb3BtZW50IGVudmlyb25tZW50cy5cbiAqXG4gKiBBIFwidmFsaWQgZG9tYWluXCIgaXMgZGVmaW5lZCBoZXJlOiBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3ZhbGlkLWRvbWFpblxuICpcbiAqIFJlZ2V4IHNvdXJjZWQgZnJvbSBoZXJlOlxuICogaHR0cHM6Ly93d3cub3JlaWxseS5jb20vbGlicmFyeS92aWV3L3JlZ3VsYXItZXhwcmVzc2lvbnMtY29va2Jvb2svOTc4MTQ0OTMyNzQ1My9jaDA4czE1Lmh0bWxcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaG9zdG5hbWUgLSBUaGUgaG9zdG5hbWUgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbGlkIGRvbWFpbiBvciBsb2NhbGhvc3RcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jdmFsaWQtZG9tYWluIFdIQVRXRyBVUkwgU3BlYyAtIFZhbGlkIERvbWFpbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWREb21haW4oaG9zdG5hbWUpIHtcbiAgICByZXR1cm4gKFxuICAgIC8vIENvbnNpZGVyIGxvY2FsaG9zdCB2YWxpZCBhcyB3ZWxsIHNpbmNlIGl0J3Mgb2theSB3cnQgU2VjdXJlIENvbnRleHRzXG4gICAgaG9zdG5hbWUgPT09ICdsb2NhbGhvc3QnIHx8IC9eKFthLXowLTldKygtW2EtejAtOV0rKSpcXC4pK1thLXpdezIsfSQvaS50ZXN0KGhvc3RuYW1lKSk7XG59XG4vKipcbiAqIERldGVybWluZSBpZiB0aGUgYnJvd3NlciBpcyBjYXBhYmxlIG9mIFdlYkF1dGhuLlxuICogQ2hlY2tzIGZvciBuZWNlc3NhcnkgV2ViIEFQSXM6IFB1YmxpY0tleUNyZWRlbnRpYWwgYW5kIENyZWRlbnRpYWwgTWFuYWdlbWVudC5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBicm93c2VyIHN1cHBvcnRzIFdlYkF1dGhuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvUHVibGljS2V5Q3JlZGVudGlhbCNicm93c2VyX2NvbXBhdGliaWxpdHkgTUROIC0gUHVibGljS2V5Q3JlZGVudGlhbCBCcm93c2VyIENvbXBhdGliaWxpdHl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBicm93c2VyU3VwcG9ydHNXZWJBdXRobigpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHJldHVybiAhIShpc0Jyb3dzZXIoKSAmJlxuICAgICAgICAnUHVibGljS2V5Q3JlZGVudGlhbCcgaW4gd2luZG93ICYmXG4gICAgICAgIHdpbmRvdy5QdWJsaWNLZXlDcmVkZW50aWFsICYmXG4gICAgICAgICdjcmVkZW50aWFscycgaW4gbmF2aWdhdG9yICYmXG4gICAgICAgIHR5cGVvZiAoKF9hID0gbmF2aWdhdG9yID09PSBudWxsIHx8IG5hdmlnYXRvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmF2aWdhdG9yLmNyZWRlbnRpYWxzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY3JlYXRlKSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgICB0eXBlb2YgKChfYiA9IG5hdmlnYXRvciA9PT0gbnVsbCB8fCBuYXZpZ2F0b3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG5hdmlnYXRvci5jcmVkZW50aWFscykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmdldCkgPT09ICdmdW5jdGlvbicpO1xufVxuLyoqXG4gKiBDcmVhdGUgYSBXZWJBdXRobiBjcmVkZW50aWFsIHVzaW5nIHRoZSBicm93c2VyJ3MgY3JlZGVudGlhbHMgQVBJLlxuICogV3JhcHMgbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmNyZWF0ZSgpIHdpdGggZXJyb3IgaGFuZGxpbmcuXG4gKlxuICogQHBhcmFtIHtDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zfSBvcHRpb25zIC0gT3B0aW9ucyBpbmNsdWRpbmcgcHVibGljS2V5IHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIHtQcm9taXNlPFJlcXVlc3RSZXN1bHQ8UmVnaXN0cmF0aW9uQ3JlZGVudGlhbCwgV2ViQXV0aG5FcnJvcj4+fSBDcmVhdGVkIGNyZWRlbnRpYWwgb3IgZXJyb3JcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhdXRobi8jc2N0bi1jcmVhdGVDcmVkZW50aWFsIFczQyBXZWJBdXRobiBTcGVjIC0gQ3JlYXRlIENyZWRlbnRpYWx9XG4gKiBAc2VlIHtAbGluayBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ3JlZGVudGlhbHNDb250YWluZXIvY3JlYXRlIE1ETiAtIGNyZWRlbnRpYWxzLmNyZWF0ZX1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNyZWRlbnRpYWwob3B0aW9ucykge1xuICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmNyZWF0ZShcbiAgICAgICAgLyoqIHdlIGFzc2VydCB0aGUgdHlwZSBoZXJlIHVudGlsIHR5cGVzY3JpcHQgdHlwZXMgYXJlIHVwZGF0ZWQgKi9cbiAgICAgICAgb3B0aW9ucyk7XG4gICAgICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICAgICAgICBlcnJvcjogbmV3IFdlYkF1dGhuVW5rbm93bkVycm9yKCdFbXB0eSBjcmVkZW50aWFsIHJlc3BvbnNlJywgcmVzcG9uc2UpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIShyZXNwb25zZSBpbnN0YW5jZW9mIFB1YmxpY0tleUNyZWRlbnRpYWwpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBXZWJBdXRoblVua25vd25FcnJvcignQnJvd3NlciByZXR1cm5lZCB1bmV4cGVjdGVkIGNyZWRlbnRpYWwgdHlwZScsIHJlc3BvbnNlKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZGF0YTogcmVzcG9uc2UsIGVycm9yOiBudWxsIH07XG4gICAgfVxuICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICBlcnJvcjogaWRlbnRpZnlSZWdpc3RyYXRpb25FcnJvcih7XG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycixcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgfVxufVxuLyoqXG4gKiBHZXQgYSBXZWJBdXRobiBjcmVkZW50aWFsIHVzaW5nIHRoZSBicm93c2VyJ3MgY3JlZGVudGlhbHMgQVBJLlxuICogV3JhcHMgbmF2aWdhdG9yLmNyZWRlbnRpYWxzLmdldCgpIHdpdGggZXJyb3IgaGFuZGxpbmcuXG4gKlxuICogQHBhcmFtIHtDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnN9IG9wdGlvbnMgLSBPcHRpb25zIGluY2x1ZGluZyBwdWJsaWNLZXkgcGFyYW1ldGVyc1xuICogQHJldHVybnMge1Byb21pc2U8UmVxdWVzdFJlc3VsdDxBdXRoZW50aWNhdGlvbkNyZWRlbnRpYWwsIFdlYkF1dGhuRXJyb3I+Pn0gUmV0cmlldmVkIGNyZWRlbnRpYWwgb3IgZXJyb3JcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhdXRobi8jc2N0bi1nZXRBc3NlcnRpb24gVzNDIFdlYkF1dGhuIFNwZWMgLSBHZXQgQXNzZXJ0aW9ufVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0NyZWRlbnRpYWxzQ29udGFpbmVyL2dldCBNRE4gLSBjcmVkZW50aWFscy5nZXR9XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDcmVkZW50aWFsKG9wdGlvbnMpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5hdmlnYXRvci5jcmVkZW50aWFscy5nZXQoXG4gICAgICAgIC8qKiB3ZSBhc3NlcnQgdGhlIHR5cGUgaGVyZSB1bnRpbCB0eXBlc2NyaXB0IHR5cGVzIGFyZSB1cGRhdGVkICovXG4gICAgICAgIG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgZXJyb3I6IG5ldyBXZWJBdXRoblVua25vd25FcnJvcignRW1wdHkgY3JlZGVudGlhbCByZXNwb25zZScsIHJlc3BvbnNlKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCEocmVzcG9uc2UgaW5zdGFuY2VvZiBQdWJsaWNLZXlDcmVkZW50aWFsKSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgV2ViQXV0aG5Vbmtub3duRXJyb3IoJ0Jyb3dzZXIgcmV0dXJuZWQgdW5leHBlY3RlZCBjcmVkZW50aWFsIHR5cGUnLCByZXNwb25zZSksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRhdGE6IHJlc3BvbnNlLCBlcnJvcjogbnVsbCB9O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgZXJyb3I6IGlkZW50aWZ5QXV0aGVudGljYXRpb25FcnJvcih7XG4gICAgICAgICAgICAgICAgZXJyb3I6IGVycixcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgfVxufVxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQ1JFQVRJT05fT1BUSU9OUyA9IHtcbiAgICBoaW50czogWydzZWN1cml0eS1rZXknXSxcbiAgICBhdXRoZW50aWNhdG9yU2VsZWN0aW9uOiB7XG4gICAgICAgIGF1dGhlbnRpY2F0b3JBdHRhY2htZW50OiAnY3Jvc3MtcGxhdGZvcm0nLFxuICAgICAgICByZXF1aXJlUmVzaWRlbnRLZXk6IGZhbHNlLFxuICAgICAgICAvKiogc2V0IHRvIHByZWZlcnJlZCBiZWNhdXNlIG9sZGVyIHl1YmlrZXlzIGRvbid0IGhhdmUgUElOL0Jpb21ldHJpYyAqL1xuICAgICAgICB1c2VyVmVyaWZpY2F0aW9uOiAncHJlZmVycmVkJyxcbiAgICAgICAgcmVzaWRlbnRLZXk6ICdkaXNjb3VyYWdlZCcsXG4gICAgfSxcbiAgICBhdHRlc3RhdGlvbjogJ2RpcmVjdCcsXG59O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVRVUVTVF9PUFRJT05TID0ge1xuICAgIC8qKiBzZXQgdG8gcHJlZmVycmVkIGJlY2F1c2Ugb2xkZXIgeXViaWtleXMgZG9uJ3QgaGF2ZSBQSU4vQmlvbWV0cmljICovXG4gICAgdXNlclZlcmlmaWNhdGlvbjogJ3ByZWZlcnJlZCcsXG4gICAgaGludHM6IFsnc2VjdXJpdHkta2V5J10sXG4gICAgYXR0ZXN0YXRpb246ICdkaXJlY3QnLFxufTtcbmZ1bmN0aW9uIGRlZXBNZXJnZSguLi5zb3VyY2VzKSB7XG4gICAgY29uc3QgaXNPYmplY3QgPSAodmFsKSA9PiB2YWwgIT09IG51bGwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsKTtcbiAgICBjb25zdCBpc0FycmF5QnVmZmVyTGlrZSA9ICh2YWwpID0+IHZhbCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8IEFycmF5QnVmZmVyLmlzVmlldyh2YWwpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3Qgc291cmNlIG9mIHNvdXJjZXMpIHtcbiAgICAgICAgaWYgKCFzb3VyY2UpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNvdXJjZVtrZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAvLyBwcmVzZXJ2ZSBhcnJheSByZWZlcmVuY2UsIGluY2x1ZGluZyB1bmlvbnMgbGlrZSBBdXRoZW50aWNhdG9yVHJhbnNwb3J0W11cbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNBcnJheUJ1ZmZlckxpa2UodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcmVzdWx0W2tleV07XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KGV4aXN0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IGRlZXBNZXJnZShleGlzdGluZywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0W2tleV0gPSBkZWVwTWVyZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogTWVyZ2VzIFdlYkF1dGhuIGNyZWRlbnRpYWwgY3JlYXRpb24gb3B0aW9ucyB3aXRoIG92ZXJyaWRlcy5cbiAqIFNldHMgc2Vuc2libGUgZGVmYXVsdHMgZm9yIGF1dGhlbnRpY2F0b3Igc2VsZWN0aW9uIGFuZCBleHRlbnNpb25zLlxuICpcbiAqIEBwYXJhbSB7UHVibGljS2V5Q3JlZGVudGlhbENyZWF0aW9uT3B0aW9uc0Z1dHVyZX0gYmFzZU9wdGlvbnMgLSBUaGUgYmFzZSBvcHRpb25zIGZyb20gdGhlIHNlcnZlclxuICogQHBhcmFtIHtQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zRnV0dXJlfSBvdmVycmlkZXMgLSBPcHRpb25hbCBvdmVycmlkZXMgdG8gYXBwbHlcbiAqIEBwYXJhbSB7c3RyaW5nfSBmcmllbmRseU5hbWUgLSBPcHRpb25hbCBmcmllbmRseSBuYW1lIGZvciB0aGUgY3JlZGVudGlhbFxuICogQHJldHVybnMge1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNGdXR1cmV9IE1lcmdlZCBjcmVkZW50aWFsIGNyZWF0aW9uIG9wdGlvbnNcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhdXRobi8jZGljdGRlZi1hdXRoZW50aWNhdG9yc2VsZWN0aW9uY3JpdGVyaWEgVzNDIFdlYkF1dGhuIFNwZWMgLSBBdXRoZW50aWNhdG9yU2VsZWN0aW9uQ3JpdGVyaWF9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnMoYmFzZU9wdGlvbnMsIG92ZXJyaWRlcykge1xuICAgIHJldHVybiBkZWVwTWVyZ2UoREVGQVVMVF9DUkVBVElPTl9PUFRJT05TLCBiYXNlT3B0aW9ucywgb3ZlcnJpZGVzIHx8IHt9KTtcbn1cbi8qKlxuICogTWVyZ2VzIFdlYkF1dGhuIGNyZWRlbnRpYWwgcmVxdWVzdCBvcHRpb25zIHdpdGggb3ZlcnJpZGVzLlxuICogU2V0cyBzZW5zaWJsZSBkZWZhdWx0cyBmb3IgdXNlciB2ZXJpZmljYXRpb24gYW5kIGhpbnRzLlxuICpcbiAqIEBwYXJhbSB7UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zRnV0dXJlfSBiYXNlT3B0aW9ucyAtIFRoZSBiYXNlIG9wdGlvbnMgZnJvbSB0aGUgc2VydmVyXG4gKiBAcGFyYW0ge1B1YmxpY0tleUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9uc0Z1dHVyZX0gb3ZlcnJpZGVzIC0gT3B0aW9uYWwgb3ZlcnJpZGVzIHRvIGFwcGx5XG4gKiBAcmV0dXJucyB7UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zRnV0dXJlfSBNZXJnZWQgY3JlZGVudGlhbCByZXF1ZXN0IG9wdGlvbnNcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhdXRobi8jZGljdGRlZi1wdWJsaWNrZXljcmVkZW50aWFscmVxdWVzdG9wdGlvbnMgVzNDIFdlYkF1dGhuIFNwZWMgLSBQdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnN9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNyZWRlbnRpYWxSZXF1ZXN0T3B0aW9ucyhiYXNlT3B0aW9ucywgb3ZlcnJpZGVzKSB7XG4gICAgcmV0dXJuIGRlZXBNZXJnZShERUZBVUxUX1JFUVVFU1RfT1BUSU9OUywgYmFzZU9wdGlvbnMsIG92ZXJyaWRlcyB8fCB7fSk7XG59XG4vKipcbiAqIFdlYkF1dGhuIEFQSSB3cmFwcGVyIGZvciBTdXBhYmFzZSBBdXRoLlxuICogUHJvdmlkZXMgbWV0aG9kcyBmb3IgZW5yb2xsaW5nLCBjaGFsbGVuZ2luZywgdmVyaWZ5aW5nLCBhdXRoZW50aWNhdGluZywgYW5kIHJlZ2lzdGVyaW5nIFdlYkF1dGhuIGNyZWRlbnRpYWxzLlxuICpcbiAqIEBleHBlcmltZW50YWwgVGhpcyBBUEkgaXMgZXhwZXJpbWVudGFsIGFuZCBtYXkgY2hhbmdlIGluIGZ1dHVyZSByZWxlYXNlc1xuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmF1dGhuLyBXM0MgV2ViQXV0aG4gU3BlY2lmaWNhdGlvbn1cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XZWJfQXV0aGVudGljYXRpb25fQVBJIE1ETiAtIFdlYiBBdXRoZW50aWNhdGlvbiBBUEl9XG4gKi9cbmV4cG9ydCBjbGFzcyBXZWJBdXRobkFwaSB7XG4gICAgY29uc3RydWN0b3IoY2xpZW50KSB7XG4gICAgICAgIHRoaXMuY2xpZW50ID0gY2xpZW50O1xuICAgICAgICAvLyBCaW5kIGFsbCBtZXRob2RzIHNvIHRoZXkgY2FuIGJlIGRlc3RydWN0dXJlZFxuICAgICAgICB0aGlzLmVucm9sbCA9IHRoaXMuX2Vucm9sbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmNoYWxsZW5nZSA9IHRoaXMuX2NoYWxsZW5nZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnZlcmlmeSA9IHRoaXMuX3ZlcmlmeS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmF1dGhlbnRpY2F0ZSA9IHRoaXMuX2F1dGhlbnRpY2F0ZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyID0gdGhpcy5fcmVnaXN0ZXIuYmluZCh0aGlzKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRW5yb2xsIGEgbmV3IFdlYkF1dGhuIGZhY3Rvci5cbiAgICAgKiBDcmVhdGVzIGFuIHVudmVyaWZpZWQgV2ViQXV0aG4gZmFjdG9yIHRoYXQgbXVzdCBiZSB2ZXJpZmllZCB3aXRoIGEgY3JlZGVudGlhbC5cbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWwgVGhpcyBtZXRob2QgaXMgZXhwZXJpbWVudGFsIGFuZCBtYXkgY2hhbmdlIGluIGZ1dHVyZSByZWxlYXNlc1xuICAgICAqIEBwYXJhbSB7T21pdDxNRkFFbnJvbGxXZWJhdXRoblBhcmFtcywgJ2ZhY3RvclR5cGUnPn0gcGFyYW1zIC0gRW5yb2xsbWVudCBwYXJhbWV0ZXJzIChmcmllbmRseU5hbWUgcmVxdWlyZWQpXG4gICAgICogQHJldHVybnMge1Byb21pc2U8QXV0aE1GQUVucm9sbFdlYmF1dGhuUmVzcG9uc2U+fSBFbnJvbGxlZCBmYWN0b3IgZGV0YWlscyBvciBlcnJvclxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhdXRobi8jc2N0bi1yZWdpc3RlcmluZy1hLW5ldy1jcmVkZW50aWFsIFczQyBXZWJBdXRobiBTcGVjIC0gUmVnaXN0ZXJpbmcgYSBOZXcgQ3JlZGVudGlhbH1cbiAgICAgKi9cbiAgICBhc3luYyBfZW5yb2xsKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQubWZhLmVucm9sbChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyksIHsgZmFjdG9yVHlwZTogJ3dlYmF1dGhuJyB9KSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoYWxsZW5nZSBmb3IgV2ViQXV0aG4gY3JlZGVudGlhbCBjcmVhdGlvbiBvciBhdXRoZW50aWNhdGlvbi5cbiAgICAgKiBDb21iaW5lcyBzZXJ2ZXIgY2hhbGxlbmdlIHdpdGggYnJvd3NlciBjcmVkZW50aWFsIG9wZXJhdGlvbnMuXG4gICAgICogSGFuZGxlcyBib3RoIHJlZ2lzdHJhdGlvbiAoY3JlYXRlKSBhbmQgYXV0aGVudGljYXRpb24gKHJlcXVlc3QpIGZsb3dzLlxuICAgICAqXG4gICAgICogQGV4cGVyaW1lbnRhbCBUaGlzIG1ldGhvZCBpcyBleHBlcmltZW50YWwgYW5kIG1heSBjaGFuZ2UgaW4gZnV0dXJlIHJlbGVhc2VzXG4gICAgICogQHBhcmFtIHtNRkFDaGFsbGVuZ2VXZWJhdXRoblBhcmFtcyAmIHsgZnJpZW5kbHlOYW1lPzogc3RyaW5nOyBzaWduYWw/OiBBYm9ydFNpZ25hbCB9fSBwYXJhbXMgLSBDaGFsbGVuZ2UgcGFyYW1ldGVycyBpbmNsdWRpbmcgZmFjdG9ySWRcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gb3ZlcnJpZGVzIC0gQWxsb3dzIHlvdSB0byBvdmVycmlkZSB0aGUgcGFyYW1ldGVycyBwYXNzZWQgdG8gbmF2aWdhdG9yLmNyZWRlbnRpYWxzXG4gICAgICogQHBhcmFtIHtQdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zRnV0dXJlfSBvdmVycmlkZXMuY3JlYXRlIC0gT3ZlcnJpZGUgb3B0aW9ucyBmb3IgY3JlZGVudGlhbCBjcmVhdGlvblxuICAgICAqIEBwYXJhbSB7UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zRnV0dXJlfSBvdmVycmlkZXMucmVxdWVzdCAtIE92ZXJyaWRlIG9wdGlvbnMgZm9yIGNyZWRlbnRpYWwgcmVxdWVzdFxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFJlcXVlc3RSZXN1bHQ+fSBDaGFsbGVuZ2UgcmVzcG9uc2Ugd2l0aCBjcmVkZW50aWFsIG9yIGVycm9yXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmF1dGhuLyNzY3RuLWNyZWRlbnRpYWwtY3JlYXRpb24gVzNDIFdlYkF1dGhuIFNwZWMgLSBDcmVkZW50aWFsIENyZWF0aW9ufVxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhdXRobi8jc2N0bi12ZXJpZnlpbmctYXNzZXJ0aW9uIFczQyBXZWJBdXRobiBTcGVjIC0gVmVyaWZ5aW5nIEFzc2VydGlvbn1cbiAgICAgKi9cbiAgICBhc3luYyBfY2hhbGxlbmdlKHsgZmFjdG9ySWQsIHdlYmF1dGhuLCBmcmllbmRseU5hbWUsIHNpZ25hbCwgfSwgb3ZlcnJpZGVzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEdldCBjaGFsbGVuZ2UgZnJvbSBzZXJ2ZXIgdXNpbmcgdGhlIGNsaWVudCdzIE1GQSBtZXRob2RzXG4gICAgICAgICAgICBjb25zdCB7IGRhdGE6IGNoYWxsZW5nZVJlc3BvbnNlLCBlcnJvcjogY2hhbGxlbmdlRXJyb3IgfSA9IGF3YWl0IHRoaXMuY2xpZW50Lm1mYS5jaGFsbGVuZ2Uoe1xuICAgICAgICAgICAgICAgIGZhY3RvcklkLFxuICAgICAgICAgICAgICAgIHdlYmF1dGhuLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWNoYWxsZW5nZVJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3I6IGNoYWxsZW5nZUVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhYm9ydFNpZ25hbCA9IHNpZ25hbCAhPT0gbnVsbCAmJiBzaWduYWwgIT09IHZvaWQgMCA/IHNpZ25hbCA6IHdlYkF1dGhuQWJvcnRTZXJ2aWNlLmNyZWF0ZU5ld0Fib3J0U2lnbmFsKCk7XG4gICAgICAgICAgICAvKiogd2ViYXV0aG4gd2lsbCBmYWlsIGlmIGVpdGhlciBvZiB0aGUgbmFtZS9kaXNwbGF5bmFtZSBhcmUgYmxhbmsgKi9cbiAgICAgICAgICAgIGlmIChjaGFsbGVuZ2VSZXNwb25zZS53ZWJhdXRobi50eXBlID09PSAnY3JlYXRlJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgdXNlciB9ID0gY2hhbGxlbmdlUmVzcG9uc2Uud2ViYXV0aG4uY3JlZGVudGlhbF9vcHRpb25zLnB1YmxpY0tleTtcbiAgICAgICAgICAgICAgICBpZiAoIXVzZXIubmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSBvcmlnaW5hbCBmb3JtYXQ6IHVzZSBmcmllbmRseU5hbWUgaWYgcHJvdmlkZWQsIG90aGVyd2lzZSBmZXRjaCBmYWxsYmFja1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIG1haW50YWlucyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggdGhlICR7dXNlci5pZH06JHtuYW1lfSBmb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmFtZVRvVXNlID0gZnJpZW5kbHlOYW1lO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW5hbWVUb1VzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gT25seSBmZXRjaCB1c2VyIGRhdGEgaWYgZnJpZW5kbHlOYW1lIGlzIG5vdCBwcm92aWRlZCAoYnVnIGZpeCBmb3IgbnVsbCBmcmllbmRseU5hbWUpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VXNlciA9IGF3YWl0IHRoaXMuY2xpZW50LmdldFVzZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVzZXJEYXRhID0gY3VycmVudFVzZXIuZGF0YS51c2VyO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmFsbGJhY2tOYW1lID0gKChfYSA9IHVzZXJEYXRhID09PSBudWxsIHx8IHVzZXJEYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiB1c2VyRGF0YS51c2VyX21ldGFkYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmFtZSkgfHwgKHVzZXJEYXRhID09PSBudWxsIHx8IHVzZXJEYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiB1c2VyRGF0YS5lbWFpbCkgfHwgKHVzZXJEYXRhID09PSBudWxsIHx8IHVzZXJEYXRhID09PSB2b2lkIDAgPyB2b2lkIDAgOiB1c2VyRGF0YS5pZCkgfHwgJ1VzZXInO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lID0gYCR7dXNlci5pZH06JHtmYWxsYmFja05hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZSA9IGAke3VzZXIuaWR9OiR7bmFtZVRvVXNlfWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCF1c2VyLmRpc3BsYXlOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzZXIuZGlzcGxheU5hbWUgPSB1c2VyLm5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoIChjaGFsbGVuZ2VSZXNwb25zZS53ZWJhdXRobi50eXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY3JlYXRlJzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gbWVyZ2VDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zKGNoYWxsZW5nZVJlc3BvbnNlLndlYmF1dGhuLmNyZWRlbnRpYWxfb3B0aW9ucy5wdWJsaWNLZXksIG92ZXJyaWRlcyA9PT0gbnVsbCB8fCBvdmVycmlkZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG92ZXJyaWRlcy5jcmVhdGUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBjcmVhdGVDcmVkZW50aWFsKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1YmxpY0tleTogb3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hbDogYWJvcnRTaWduYWwsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFsbGVuZ2VJZDogY2hhbGxlbmdlUmVzcG9uc2UuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmF1dGhuOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjaGFsbGVuZ2VSZXNwb25zZS53ZWJhdXRobi50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbF9yZXNwb25zZTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICdyZXF1ZXN0Jzoge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0gbWVyZ2VDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMoY2hhbGxlbmdlUmVzcG9uc2Uud2ViYXV0aG4uY3JlZGVudGlhbF9vcHRpb25zLnB1YmxpY0tleSwgb3ZlcnJpZGVzID09PSBudWxsIHx8IG92ZXJyaWRlcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3ZlcnJpZGVzLnJlcXVlc3QpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBnZXRDcmVkZW50aWFsKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY2hhbGxlbmdlUmVzcG9uc2Uud2ViYXV0aG4uY3JlZGVudGlhbF9vcHRpb25zKSwgeyBwdWJsaWNLZXk6IG9wdGlvbnMsIHNpZ25hbDogYWJvcnRTaWduYWwgfSkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY3RvcklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFsbGVuZ2VJZDogY2hhbGxlbmdlUmVzcG9uc2UuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlYmF1dGhuOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBjaGFsbGVuZ2VSZXNwb25zZS53ZWJhdXRobi50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbF9yZXNwb25zZTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmIChpc0F1dGhFcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgQXV0aFVua25vd25FcnJvcignVW5leHBlY3RlZCBlcnJvciBpbiBjaGFsbGVuZ2UnLCBlcnJvciksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFZlcmlmeSBhIFdlYkF1dGhuIGNyZWRlbnRpYWwgd2l0aCB0aGUgc2VydmVyLlxuICAgICAqIENvbXBsZXRlcyB0aGUgV2ViQXV0aG4gY2VyZW1vbnkgYnkgc2VuZGluZyB0aGUgY3JlZGVudGlhbCB0byB0aGUgc2VydmVyIGZvciB2ZXJpZmljYXRpb24uXG4gICAgICpcbiAgICAgKiBAZXhwZXJpbWVudGFsIFRoaXMgbWV0aG9kIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGNoYW5nZSBpbiBmdXR1cmUgcmVsZWFzZXNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gVmVyaWZpY2F0aW9uIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmNoYWxsZW5nZUlkIC0gSUQgb2YgdGhlIGNoYWxsZW5nZSBiZWluZyB2ZXJpZmllZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMuZmFjdG9ySWQgLSBJRCBvZiB0aGUgV2ViQXV0aG4gZmFjdG9yXG4gICAgICogQHBhcmFtIHtNRkFWZXJpZnlXZWJhdXRoblBhcmFtczxUPlsnd2ViYXV0aG4nXX0gcGFyYW1zLndlYmF1dGhuIC0gV2ViQXV0aG4gY3JlZGVudGlhbCByZXNwb25zZVxuICAgICAqIEByZXR1cm5zIHtQcm9taXNlPEF1dGhNRkFWZXJpZnlSZXNwb25zZT59IFZlcmlmaWNhdGlvbiByZXN1bHQgd2l0aCBzZXNzaW9uIG9yIGVycm9yXG4gICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmF1dGhuLyNzY3RuLXZlcmlmeWluZy1hc3NlcnRpb24gVzNDIFdlYkF1dGhuIFNwZWMgLSBWZXJpZnlpbmcgYW4gQXV0aGVudGljYXRpb24gQXNzZXJ0aW9ufVxuICAgICAqICovXG4gICAgYXN5bmMgX3ZlcmlmeSh7IGNoYWxsZW5nZUlkLCBmYWN0b3JJZCwgd2ViYXV0aG4sIH0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50Lm1mYS52ZXJpZnkoe1xuICAgICAgICAgICAgZmFjdG9ySWQsXG4gICAgICAgICAgICBjaGFsbGVuZ2VJZCxcbiAgICAgICAgICAgIHdlYmF1dGhuOiB3ZWJhdXRobixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENvbXBsZXRlIFdlYkF1dGhuIGF1dGhlbnRpY2F0aW9uIGZsb3cuXG4gICAgICogUGVyZm9ybXMgY2hhbGxlbmdlIGFuZCB2ZXJpZmljYXRpb24gaW4gYSBzaW5nbGUgb3BlcmF0aW9uIGZvciBleGlzdGluZyBjcmVkZW50aWFscy5cbiAgICAgKlxuICAgICAqIEBleHBlcmltZW50YWwgVGhpcyBtZXRob2QgaXMgZXhwZXJpbWVudGFsIGFuZCBtYXkgY2hhbmdlIGluIGZ1dHVyZSByZWxlYXNlc1xuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBBdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtcy5mYWN0b3JJZCAtIElEIG9mIHRoZSBXZWJBdXRobiBmYWN0b3IgdG8gYXV0aGVudGljYXRlIHdpdGhcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zLndlYmF1dGhuIC0gV2ViQXV0aG4gY29uZmlndXJhdGlvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJhbXMud2ViYXV0aG4ucnBJZCAtIFJlbHlpbmcgUGFydHkgSUQgKGRlZmF1bHRzIHRvIGN1cnJlbnQgaG9zdG5hbWUpXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gcGFyYW1zLndlYmF1dGhuLnJwT3JpZ2lucyAtIEFsbG93ZWQgb3JpZ2lucyAoZGVmYXVsdHMgdG8gY3VycmVudCBvcmlnaW4pXG4gICAgICogQHBhcmFtIHtBYm9ydFNpZ25hbH0gcGFyYW1zLndlYmF1dGhuLnNpZ25hbCAtIE9wdGlvbmFsIGFib3J0IHNpZ25hbFxuICAgICAqIEBwYXJhbSB7UHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zRnV0dXJlfSBvdmVycmlkZXMgLSBPdmVycmlkZSBvcHRpb25zIGZvciBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuZ2V0XG4gICAgICogQHJldHVybnMge1Byb21pc2U8UmVxdWVzdFJlc3VsdDxBdXRoTUZBVmVyaWZ5UmVzcG9uc2VEYXRhLCBXZWJBdXRobkVycm9yIHwgQXV0aEVycm9yPj59IEF1dGhlbnRpY2F0aW9uIHJlc3VsdFxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhdXRobi8jc2N0bi1hdXRoZW50aWNhdGlvbiBXM0MgV2ViQXV0aG4gU3BlYyAtIEF1dGhlbnRpY2F0aW9uIENlcmVtb255fVxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9QdWJsaWNLZXlDcmVkZW50aWFsUmVxdWVzdE9wdGlvbnMgTUROIC0gUHVibGljS2V5Q3JlZGVudGlhbFJlcXVlc3RPcHRpb25zfVxuICAgICAqL1xuICAgIGFzeW5jIF9hdXRoZW50aWNhdGUoeyBmYWN0b3JJZCwgd2ViYXV0aG46IHsgcnBJZCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lIDogdW5kZWZpbmVkLCBycE9yaWdpbnMgPSB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IFt3aW5kb3cubG9jYXRpb24ub3JpZ2luXSA6IHVuZGVmaW5lZCwgc2lnbmFsLCB9ID0ge30sIH0sIG92ZXJyaWRlcykge1xuICAgICAgICBpZiAoIXJwSWQpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEF1dGhFcnJvcigncnBJZCBpcyByZXF1aXJlZCBmb3IgV2ViQXV0aG4gYXV0aGVudGljYXRpb24nKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghYnJvd3NlclN1cHBvcnRzV2ViQXV0aG4oKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgQXV0aFVua25vd25FcnJvcignQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFdlYkF1dGhuJywgbnVsbCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEdldCBjaGFsbGVuZ2UgYW5kIGNyZWRlbnRpYWxcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogY2hhbGxlbmdlUmVzcG9uc2UsIGVycm9yOiBjaGFsbGVuZ2VFcnJvciB9ID0gYXdhaXQgdGhpcy5jaGFsbGVuZ2Uoe1xuICAgICAgICAgICAgICAgIGZhY3RvcklkLFxuICAgICAgICAgICAgICAgIHdlYmF1dGhuOiB7IHJwSWQsIHJwT3JpZ2lucyB9LFxuICAgICAgICAgICAgICAgIHNpZ25hbCxcbiAgICAgICAgICAgIH0sIHsgcmVxdWVzdDogb3ZlcnJpZGVzIH0pO1xuICAgICAgICAgICAgaWYgKCFjaGFsbGVuZ2VSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IG51bGwsIGVycm9yOiBjaGFsbGVuZ2VFcnJvciB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeyB3ZWJhdXRobiB9ID0gY2hhbGxlbmdlUmVzcG9uc2U7XG4gICAgICAgICAgICAvLyBWZXJpZnkgY3JlZGVudGlhbFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZlcmlmeSh7XG4gICAgICAgICAgICAgICAgZmFjdG9ySWQsXG4gICAgICAgICAgICAgICAgY2hhbGxlbmdlSWQ6IGNoYWxsZW5nZVJlc3BvbnNlLmNoYWxsZW5nZUlkLFxuICAgICAgICAgICAgICAgIHdlYmF1dGhuOiB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHdlYmF1dGhuLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHJwSWQsXG4gICAgICAgICAgICAgICAgICAgIHJwT3JpZ2lucyxcbiAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbF9yZXNwb25zZTogd2ViYXV0aG4uY3JlZGVudGlhbF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEF1dGhVbmtub3duRXJyb3IoJ1VuZXhwZWN0ZWQgZXJyb3IgaW4gYXV0aGVudGljYXRlJywgZXJyb3IpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wbGV0ZSBXZWJBdXRobiByZWdpc3RyYXRpb24gZmxvdy5cbiAgICAgKiBQZXJmb3JtcyBlbnJvbGxtZW50LCBjaGFsbGVuZ2UsIGFuZCB2ZXJpZmljYXRpb24gaW4gYSBzaW5nbGUgb3BlcmF0aW9uIGZvciBuZXcgY3JlZGVudGlhbHMuXG4gICAgICpcbiAgICAgKiBAZXhwZXJpbWVudGFsIFRoaXMgbWV0aG9kIGlzIGV4cGVyaW1lbnRhbCBhbmQgbWF5IGNoYW5nZSBpbiBmdXR1cmUgcmVsZWFzZXNcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gUmVnaXN0cmF0aW9uIHBhcmFtZXRlcnNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLmZyaWVuZGx5TmFtZSAtIFVzZXItZnJpZW5kbHkgbmFtZSBmb3IgdGhlIGNyZWRlbnRpYWxcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1zLnJwSWQgLSBSZWx5aW5nIFBhcnR5IElEIChkZWZhdWx0cyB0byBjdXJyZW50IGhvc3RuYW1lKVxuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IHBhcmFtcy5ycE9yaWdpbnMgLSBBbGxvd2VkIG9yaWdpbnMgKGRlZmF1bHRzIHRvIGN1cnJlbnQgb3JpZ2luKVxuICAgICAqIEBwYXJhbSB7QWJvcnRTaWduYWx9IHBhcmFtcy5zaWduYWwgLSBPcHRpb25hbCBhYm9ydCBzaWduYWxcbiAgICAgKiBAcGFyYW0ge1B1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnNGdXR1cmV9IG92ZXJyaWRlcyAtIE92ZXJyaWRlIG9wdGlvbnMgZm9yIG5hdmlnYXRvci5jcmVkZW50aWFscy5jcmVhdGVcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTxSZXF1ZXN0UmVzdWx0PEF1dGhNRkFWZXJpZnlSZXNwb25zZURhdGEsIFdlYkF1dGhuRXJyb3IgfCBBdXRoRXJyb3I+Pn0gUmVnaXN0cmF0aW9uIHJlc3VsdFxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhdXRobi8jc2N0bi1yZWdpc3RlcmluZy1hLW5ldy1jcmVkZW50aWFsIFczQyBXZWJBdXRobiBTcGVjIC0gUmVnaXN0cmF0aW9uIENlcmVtb255fVxuICAgICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9QdWJsaWNLZXlDcmVkZW50aWFsQ3JlYXRpb25PcHRpb25zIE1ETiAtIFB1YmxpY0tleUNyZWRlbnRpYWxDcmVhdGlvbk9wdGlvbnN9XG4gICAgICovXG4gICAgYXN5bmMgX3JlZ2lzdGVyKHsgZnJpZW5kbHlOYW1lLCB3ZWJhdXRobjogeyBycElkID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgOiB1bmRlZmluZWQsIHJwT3JpZ2lucyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gW3dpbmRvdy5sb2NhdGlvbi5vcmlnaW5dIDogdW5kZWZpbmVkLCBzaWduYWwsIH0gPSB7fSwgfSwgb3ZlcnJpZGVzKSB7XG4gICAgICAgIGlmICghcnBJZCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgQXV0aEVycm9yKCdycElkIGlzIHJlcXVpcmVkIGZvciBXZWJBdXRobiByZWdpc3RyYXRpb24nKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmICghYnJvd3NlclN1cHBvcnRzV2ViQXV0aG4oKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBuZXcgQXV0aFVua25vd25FcnJvcignQnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IFdlYkF1dGhuJywgbnVsbCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEVucm9sbCBmYWN0b3JcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YTogZmFjdG9yLCBlcnJvcjogZW5yb2xsRXJyb3IgfSA9IGF3YWl0IHRoaXMuX2Vucm9sbCh7XG4gICAgICAgICAgICAgICAgZnJpZW5kbHlOYW1lLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWZhY3Rvcikge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY2xpZW50Lm1mYVxuICAgICAgICAgICAgICAgICAgICAubGlzdEZhY3RvcnMoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoZmFjdG9ycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoX2EgPSBmYWN0b3JzLmRhdGEpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hbGwuZmluZCgodikgPT4gdi5mYWN0b3JfdHlwZSA9PT0gJ3dlYmF1dGhuJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdi5mcmllbmRseV9uYW1lID09PSBmcmllbmRseU5hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHYuc3RhdHVzICE9PSAndW52ZXJpZmllZCcpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKChmYWN0b3IpID0+IChmYWN0b3IgPyB0aGlzLmNsaWVudC5tZmEudW5lbnJvbGwoeyBmYWN0b3JJZDogZmFjdG9yID09PSBudWxsIHx8IGZhY3RvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmFjdG9yLmlkIH0pIDogdm9pZCAwKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3I6IGVucm9sbEVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBHZXQgY2hhbGxlbmdlIGFuZCBjcmVhdGUgY3JlZGVudGlhbFxuICAgICAgICAgICAgY29uc3QgeyBkYXRhOiBjaGFsbGVuZ2VSZXNwb25zZSwgZXJyb3I6IGNoYWxsZW5nZUVycm9yIH0gPSBhd2FpdCB0aGlzLl9jaGFsbGVuZ2Uoe1xuICAgICAgICAgICAgICAgIGZhY3RvcklkOiBmYWN0b3IuaWQsXG4gICAgICAgICAgICAgICAgZnJpZW5kbHlOYW1lOiBmYWN0b3IuZnJpZW5kbHlfbmFtZSxcbiAgICAgICAgICAgICAgICB3ZWJhdXRobjogeyBycElkLCBycE9yaWdpbnMgfSxcbiAgICAgICAgICAgICAgICBzaWduYWwsXG4gICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgY3JlYXRlOiBvdmVycmlkZXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghY2hhbGxlbmdlUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhOiBudWxsLCBlcnJvcjogY2hhbGxlbmdlRXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl92ZXJpZnkoe1xuICAgICAgICAgICAgICAgIGZhY3RvcklkOiBmYWN0b3IuaWQsXG4gICAgICAgICAgICAgICAgY2hhbGxlbmdlSWQ6IGNoYWxsZW5nZVJlc3BvbnNlLmNoYWxsZW5nZUlkLFxuICAgICAgICAgICAgICAgIHdlYmF1dGhuOiB7XG4gICAgICAgICAgICAgICAgICAgIHJwSWQsXG4gICAgICAgICAgICAgICAgICAgIHJwT3JpZ2lucyxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogY2hhbGxlbmdlUmVzcG9uc2Uud2ViYXV0aG4udHlwZSxcbiAgICAgICAgICAgICAgICAgICAgY3JlZGVudGlhbF9yZXNwb25zZTogY2hhbGxlbmdlUmVzcG9uc2Uud2ViYXV0aG4uY3JlZGVudGlhbF9yZXNwb25zZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAoaXNBdXRoRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgZGF0YTogbnVsbCwgZXJyb3IgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICAgICAgICBlcnJvcjogbmV3IEF1dGhVbmtub3duRXJyb3IoJ1VuZXhwZWN0ZWQgZXJyb3IgaW4gcmVnaXN0ZXInLCBlcnJvciksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2ViYXV0aG4uanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/lib/webauthn.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/FunctionsClient.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/@supabase/functions-js/dist/module/FunctionsClient.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((__unused_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 */ FunctionsClient: () => (/* binding */ FunctionsClient)\n/* harmony export */ });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! tslib */ \"(app-pages-browser)/./node_modules/tslib/tslib.es6.mjs\");\n/* harmony import */ var _helper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./helper */ \"(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/helper.js\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types */ \"(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/types.js\");\n\n\n\n/**\n * Client for invoking Supabase Edge Functions.\n */\nclass FunctionsClient {\n /**\n * Creates a new Functions client bound to an Edge Functions URL.\n *\n * @example Using supabase-js (recommended)\n * ```ts\n * import { createClient } from '@supabase/supabase-js'\n *\n * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n * const { data, error } = await supabase.functions.invoke('hello-world')\n * ```\n *\n * @category Edge Functions\n *\n * @example Standalone import for bundle-sensitive environments\n * ```ts\n * import { FunctionsClient, FunctionRegion } from '@supabase/functions-js'\n *\n * const functions = new FunctionsClient('https://xyzcompany.supabase.co/functions/v1', {\n * headers: { apikey: 'your-publishable-key' },\n * region: FunctionRegion.UsEast1,\n * })\n * ```\n */\n constructor(url, { headers = {}, customFetch, region = _types__WEBPACK_IMPORTED_MODULE_0__.FunctionRegion.Any, } = {}) {\n this.url = url;\n this.headers = headers;\n this.region = region;\n this.fetch = (0,_helper__WEBPACK_IMPORTED_MODULE_1__.resolveFetch)(customFetch);\n }\n /**\n * Updates the authorization header\n * @param token - the new jwt token sent in the authorisation header\n *\n * @category Edge Functions\n *\n * @example Setting the authorization header\n * ```ts\n * functions.setAuth(session.access_token)\n * ```\n */\n setAuth(token) {\n this.headers.Authorization = `Bearer ${token}`;\n }\n /**\n * Invokes a function\n * @param functionName - The name of the Function to invoke.\n * @param options - Options for invoking the Function.\n * @example\n * ```ts\n * const { data, error } = await functions.invoke('hello-world', {\n * body: { name: 'Ada' },\n * })\n * ```\n *\n * @category Edge Functions\n *\n * @remarks\n * - Requires an Authorization header.\n * - Invoke params generally match the [Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) spec.\n * - When you pass in a body to your function, we automatically attach the Content-Type header for `Blob`, `ArrayBuffer`, `File`, `FormData` and `String`. If it doesn't match any of these types we assume the payload is `json`, serialize it and attach the `Content-Type` header as `application/json`. You can override this behavior by passing in a `Content-Type` header of your own.\n * - Responses are automatically parsed as `json`, `blob` and `form-data` depending on the `Content-Type` header sent by your function. Responses are parsed as `text` by default.\n *\n * @example Basic invocation\n * ```js\n * const { data, error } = await supabase.functions.invoke('hello', {\n * body: { foo: 'bar' }\n * })\n * ```\n *\n * @exampleDescription Error handling\n * A `FunctionsHttpError` error is returned if your function throws an error, `FunctionsRelayError` if the Supabase Relay has an error processing your function and `FunctionsFetchError` if there is a network error in calling your function.\n *\n * @example Error handling\n * ```js\n * import { FunctionsHttpError, FunctionsRelayError, FunctionsFetchError } from \"@supabase/supabase-js\";\n *\n * const { data, error } = await supabase.functions.invoke('hello', {\n * headers: {\n * \"my-custom-header\": 'my-custom-header-value'\n * },\n * body: { foo: 'bar' }\n * })\n *\n * if (error instanceof FunctionsHttpError) {\n * const errorMessage = await error.context.json()\n * console.log('Function returned an error', errorMessage)\n * } else if (error instanceof FunctionsRelayError) {\n * console.log('Relay error:', error.message)\n * } else if (error instanceof FunctionsFetchError) {\n * console.log('Fetch error:', error.message)\n * }\n * ```\n *\n * @exampleDescription Passing custom headers\n * You can pass custom headers to your function. Note: supabase-js automatically passes the `Authorization` header with the signed in user's JWT.\n *\n * @example Passing custom headers\n * ```js\n * const { data, error } = await supabase.functions.invoke('hello', {\n * headers: {\n * \"my-custom-header\": 'my-custom-header-value'\n * },\n * body: { foo: 'bar' }\n * })\n * ```\n *\n * @exampleDescription Calling with DELETE HTTP verb\n * You can also set the HTTP verb to `DELETE` when calling your Edge Function.\n *\n * @example Calling with DELETE HTTP verb\n * ```js\n * const { data, error } = await supabase.functions.invoke('hello', {\n * headers: {\n * \"my-custom-header\": 'my-custom-header-value'\n * },\n * body: { foo: 'bar' },\n * method: 'DELETE'\n * })\n * ```\n *\n * @exampleDescription Invoking a Function in the UsEast1 region\n * Here are the available regions:\n * - `FunctionRegion.Any`\n * - `FunctionRegion.ApNortheast1`\n * - `FunctionRegion.ApNortheast2`\n * - `FunctionRegion.ApSouth1`\n * - `FunctionRegion.ApSoutheast1`\n * - `FunctionRegion.ApSoutheast2`\n * - `FunctionRegion.CaCentral1`\n * - `FunctionRegion.EuCentral1`\n * - `FunctionRegion.EuWest1`\n * - `FunctionRegion.EuWest2`\n * - `FunctionRegion.EuWest3`\n * - `FunctionRegion.SaEast1`\n * - `FunctionRegion.UsEast1`\n * - `FunctionRegion.UsWest1`\n * - `FunctionRegion.UsWest2`\n *\n * @example Invoking a Function in the UsEast1 region\n * ```js\n * import { createClient, FunctionRegion } from '@supabase/supabase-js'\n *\n * const { data, error } = await supabase.functions.invoke('hello', {\n * body: { foo: 'bar' },\n * region: FunctionRegion.UsEast1\n * })\n * ```\n *\n * @exampleDescription Calling with GET HTTP verb\n * You can also set the HTTP verb to `GET` when calling your Edge Function.\n *\n * @example Calling with GET HTTP verb\n * ```js\n * const { data, error } = await supabase.functions.invoke('hello', {\n * headers: {\n * \"my-custom-header\": 'my-custom-header-value'\n * },\n * method: 'GET'\n * })\n * ```\n *\n * @example Standalone client invoke\n * ```ts\n * const { data, error } = await functions.invoke('hello-world', {\n * body: { name: 'Ada' },\n * })\n * ```\n */\n invoke(functionName_1) {\n return (0,tslib__WEBPACK_IMPORTED_MODULE_2__.__awaiter)(this, arguments, void 0, function* (functionName, options = {}) {\n var _a;\n let timeoutId;\n let timeoutController;\n try {\n const { headers, method, body: functionArgs, signal, timeout } = options;\n let _headers = {};\n let { region } = options;\n if (!region) {\n region = this.region;\n }\n // Add region as query parameter using URL API\n const url = new URL(`${this.url}/${functionName}`);\n if (region && region !== 'any') {\n _headers['x-region'] = region;\n url.searchParams.set('forceFunctionRegion', region);\n }\n let body;\n if (functionArgs &&\n ((headers && !Object.prototype.hasOwnProperty.call(headers, 'Content-Type')) || !headers)) {\n if ((typeof Blob !== 'undefined' && functionArgs instanceof Blob) ||\n functionArgs instanceof ArrayBuffer) {\n // will work for File as File inherits Blob\n // also works for ArrayBuffer as it is the same underlying structure as a Blob\n _headers['Content-Type'] = 'application/octet-stream';\n body = functionArgs;\n }\n else if (typeof functionArgs === 'string') {\n // plain string\n _headers['Content-Type'] = 'text/plain';\n body = functionArgs;\n }\n else if (typeof FormData !== 'undefined' && functionArgs instanceof FormData) {\n // don't set content-type headers\n // Request will automatically add the right boundary value\n body = functionArgs;\n }\n else {\n // default, assume this is JSON\n _headers['Content-Type'] = 'application/json';\n body = JSON.stringify(functionArgs);\n }\n }\n else {\n if (functionArgs &&\n typeof functionArgs !== 'string' &&\n !(typeof Blob !== 'undefined' && functionArgs instanceof Blob) &&\n !(functionArgs instanceof ArrayBuffer) &&\n !(typeof FormData !== 'undefined' && functionArgs instanceof FormData)) {\n body = JSON.stringify(functionArgs);\n }\n else {\n body = functionArgs;\n }\n }\n // Handle timeout by creating an AbortController\n let effectiveSignal = signal;\n if (timeout) {\n timeoutController = new AbortController();\n timeoutId = setTimeout(() => timeoutController.abort(), timeout);\n // If user provided their own signal, we need to respect both\n if (signal) {\n effectiveSignal = timeoutController.signal;\n // If the user's signal is aborted, abort our timeout controller too\n signal.addEventListener('abort', () => timeoutController.abort());\n }\n else {\n effectiveSignal = timeoutController.signal;\n }\n }\n const response = yield this.fetch(url.toString(), {\n method: method || 'POST',\n // headers priority is (high to low):\n // 1. invoke-level headers\n // 2. client-level headers\n // 3. default Content-Type header\n headers: Object.assign(Object.assign(Object.assign({}, _headers), this.headers), headers),\n body,\n signal: effectiveSignal,\n }).catch((fetchError) => {\n throw new _types__WEBPACK_IMPORTED_MODULE_0__.FunctionsFetchError(fetchError);\n });\n const isRelayError = response.headers.get('x-relay-error');\n if (isRelayError && isRelayError === 'true') {\n throw new _types__WEBPACK_IMPORTED_MODULE_0__.FunctionsRelayError(response);\n }\n if (!response.ok) {\n throw new _types__WEBPACK_IMPORTED_MODULE_0__.FunctionsHttpError(response);\n }\n let responseType = ((_a = response.headers.get('Content-Type')) !== null && _a !== void 0 ? _a : 'text/plain').split(';')[0].trim();\n let data;\n if (responseType === 'application/json') {\n data = yield response.json();\n }\n else if (responseType === 'application/octet-stream' ||\n responseType === 'application/pdf') {\n data = yield response.blob();\n }\n else if (responseType === 'text/event-stream') {\n data = response;\n }\n else if (responseType === 'multipart/form-data') {\n data = yield response.formData();\n }\n else {\n // default to text\n data = yield response.text();\n }\n return { data, error: null, response };\n }\n catch (error) {\n return {\n data: null,\n error,\n response: error instanceof _types__WEBPACK_IMPORTED_MODULE_0__.FunctionsHttpError || error instanceof _types__WEBPACK_IMPORTED_MODULE_0__.FunctionsRelayError\n ? error.context\n : undefined,\n };\n }\n finally {\n // Clear the timeout if it was set\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n }\n });\n }\n}\n//# sourceMappingURL=FunctionsClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvZnVuY3Rpb25zLWpzL2Rpc3QvbW9kdWxlL0Z1bmN0aW9uc0NsaWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQWtDO0FBQ007QUFDZ0U7QUFDeEc7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGVBQWU7QUFDL0I7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0Isa0NBQWtDO0FBQ2xEO0FBQ0E7QUFDQSxvQkFBb0IsZ0NBQWdDO0FBQ3BEO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQSx1QkFBdUIsWUFBWSx3QkFBd0Isa0RBQWMsUUFBUSxJQUFJO0FBQ3JGO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixxREFBWTtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxNQUFNO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxjQUFjO0FBQzdCLGlCQUFpQixhQUFhO0FBQzlCLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0IsaUJBQWlCO0FBQ2pCLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwrREFBK0Q7QUFDL0U7QUFDQSxlQUFlLGNBQWM7QUFDN0I7QUFDQTtBQUNBLFVBQVU7QUFDVixpQkFBaUI7QUFDakIsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QjtBQUNBO0FBQ0EsVUFBVTtBQUNWLGlCQUFpQjtBQUNqQixRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0I7QUFDQTtBQUNBLFVBQVU7QUFDVixpQkFBaUIsWUFBWTtBQUM3QjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQiwrQkFBK0I7QUFDL0M7QUFDQSxlQUFlLGNBQWM7QUFDN0IsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGNBQWM7QUFDN0I7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsY0FBYztBQUM3QixpQkFBaUIsYUFBYTtBQUM5QixRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0EsZUFBZSxnREFBUywrREFBK0Q7QUFDdkY7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdURBQXVEO0FBQy9FO0FBQ0Esc0JBQXNCLFNBQVM7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1Q0FBdUMsU0FBUyxHQUFHLGFBQWE7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUVBQXlFO0FBQ3pFO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakIsOEJBQThCLHVEQUFtQjtBQUNqRCxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLDhCQUE4Qix1REFBbUI7QUFDakQ7QUFDQTtBQUNBLDhCQUE4QixzREFBa0I7QUFDaEQ7QUFDQSx1SUFBdUk7QUFDdkk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrQ0FBK0Msc0RBQWtCLHFCQUFxQix1REFBbUI7QUFDekc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9mdW5jdGlvbnMtanMvZGlzdC9tb2R1bGUvRnVuY3Rpb25zQ2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IF9fYXdhaXRlciB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgcmVzb2x2ZUZldGNoIH0gZnJvbSAnLi9oZWxwZXInO1xuaW1wb3J0IHsgRnVuY3Rpb25SZWdpb24sIEZ1bmN0aW9uc0ZldGNoRXJyb3IsIEZ1bmN0aW9uc0h0dHBFcnJvciwgRnVuY3Rpb25zUmVsYXlFcnJvciwgfSBmcm9tICcuL3R5cGVzJztcbi8qKlxuICogQ2xpZW50IGZvciBpbnZva2luZyBTdXBhYmFzZSBFZGdlIEZ1bmN0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uc0NsaWVudCB7XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIG5ldyBGdW5jdGlvbnMgY2xpZW50IGJvdW5kIHRvIGFuIEVkZ2UgRnVuY3Rpb25zIFVSTC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFVzaW5nIHN1cGFiYXNlLWpzIChyZWNvbW1lbmRlZClcbiAgICAgKiBgYGB0c1xuICAgICAqIGltcG9ydCB7IGNyZWF0ZUNsaWVudCB9IGZyb20gJ0BzdXBhYmFzZS9zdXBhYmFzZS1qcydcbiAgICAgKlxuICAgICAqIGNvbnN0IHN1cGFiYXNlID0gY3JlYXRlQ2xpZW50KCdodHRwczovL3h5emNvbXBhbnkuc3VwYWJhc2UuY28nLCAneW91ci1wdWJsaXNoYWJsZS1rZXknKVxuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmZ1bmN0aW9ucy5pbnZva2UoJ2hlbGxvLXdvcmxkJylcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBFZGdlIEZ1bmN0aW9uc1xuICAgICAqXG4gICAgICogQGV4YW1wbGUgU3RhbmRhbG9uZSBpbXBvcnQgZm9yIGJ1bmRsZS1zZW5zaXRpdmUgZW52aXJvbm1lbnRzXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBGdW5jdGlvbnNDbGllbnQsIEZ1bmN0aW9uUmVnaW9uIH0gZnJvbSAnQHN1cGFiYXNlL2Z1bmN0aW9ucy1qcydcbiAgICAgKlxuICAgICAqIGNvbnN0IGZ1bmN0aW9ucyA9IG5ldyBGdW5jdGlvbnNDbGllbnQoJ2h0dHBzOi8veHl6Y29tcGFueS5zdXBhYmFzZS5jby9mdW5jdGlvbnMvdjEnLCB7XG4gICAgICogICBoZWFkZXJzOiB7IGFwaWtleTogJ3lvdXItcHVibGlzaGFibGUta2V5JyB9LFxuICAgICAqICAgcmVnaW9uOiBGdW5jdGlvblJlZ2lvbi5Vc0Vhc3QxLFxuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICovXG4gICAgY29uc3RydWN0b3IodXJsLCB7IGhlYWRlcnMgPSB7fSwgY3VzdG9tRmV0Y2gsIHJlZ2lvbiA9IEZ1bmN0aW9uUmVnaW9uLkFueSwgfSA9IHt9KSB7XG4gICAgICAgIHRoaXMudXJsID0gdXJsO1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgICAgICB0aGlzLnJlZ2lvbiA9IHJlZ2lvbjtcbiAgICAgICAgdGhpcy5mZXRjaCA9IHJlc29sdmVGZXRjaChjdXN0b21GZXRjaCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyXG4gICAgICogQHBhcmFtIHRva2VuIC0gdGhlIG5ldyBqd3QgdG9rZW4gc2VudCBpbiB0aGUgYXV0aG9yaXNhdGlvbiBoZWFkZXJcbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBFZGdlIEZ1bmN0aW9uc1xuICAgICAqXG4gICAgICogQGV4YW1wbGUgU2V0dGluZyB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXJcbiAgICAgKiBgYGB0c1xuICAgICAqIGZ1bmN0aW9ucy5zZXRBdXRoKHNlc3Npb24uYWNjZXNzX3Rva2VuKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHNldEF1dGgodG9rZW4pIHtcbiAgICAgICAgdGhpcy5oZWFkZXJzLkF1dGhvcml6YXRpb24gPSBgQmVhcmVyICR7dG9rZW59YDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW52b2tlcyBhIGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIGZ1bmN0aW9uTmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBGdW5jdGlvbiB0byBpbnZva2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciBpbnZva2luZyB0aGUgRnVuY3Rpb24uXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IGZ1bmN0aW9ucy5pbnZva2UoJ2hlbGxvLXdvcmxkJywge1xuICAgICAqICAgYm9keTogeyBuYW1lOiAnQWRhJyB9LFxuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgRWRnZSBGdW5jdGlvbnNcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogLSBSZXF1aXJlcyBhbiBBdXRob3JpemF0aW9uIGhlYWRlci5cbiAgICAgKiAtIEludm9rZSBwYXJhbXMgZ2VuZXJhbGx5IG1hdGNoIHRoZSBbRmV0Y2ggQVBJXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRmV0Y2hfQVBJKSBzcGVjLlxuICAgICAqIC0gV2hlbiB5b3UgcGFzcyBpbiBhIGJvZHkgdG8geW91ciBmdW5jdGlvbiwgd2UgYXV0b21hdGljYWxseSBhdHRhY2ggdGhlIENvbnRlbnQtVHlwZSBoZWFkZXIgZm9yIGBCbG9iYCwgYEFycmF5QnVmZmVyYCwgYEZpbGVgLCBgRm9ybURhdGFgIGFuZCBgU3RyaW5nYC4gSWYgaXQgZG9lc24ndCBtYXRjaCBhbnkgb2YgdGhlc2UgdHlwZXMgd2UgYXNzdW1lIHRoZSBwYXlsb2FkIGlzIGBqc29uYCwgc2VyaWFsaXplIGl0IGFuZCBhdHRhY2ggdGhlIGBDb250ZW50LVR5cGVgIGhlYWRlciBhcyBgYXBwbGljYXRpb24vanNvbmAuIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBiZWhhdmlvciBieSBwYXNzaW5nIGluIGEgYENvbnRlbnQtVHlwZWAgaGVhZGVyIG9mIHlvdXIgb3duLlxuICAgICAqIC0gUmVzcG9uc2VzIGFyZSBhdXRvbWF0aWNhbGx5IHBhcnNlZCBhcyBganNvbmAsIGBibG9iYCBhbmQgYGZvcm0tZGF0YWAgZGVwZW5kaW5nIG9uIHRoZSBgQ29udGVudC1UeXBlYCBoZWFkZXIgc2VudCBieSB5b3VyIGZ1bmN0aW9uLiBSZXNwb25zZXMgYXJlIHBhcnNlZCBhcyBgdGV4dGAgYnkgZGVmYXVsdC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIEJhc2ljIGludm9jYXRpb25cbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmZ1bmN0aW9ucy5pbnZva2UoJ2hlbGxvJywge1xuICAgICAqICAgYm9keTogeyBmb286ICdiYXInIH1cbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVEZXNjcmlwdGlvbiBFcnJvciBoYW5kbGluZ1xuICAgICAqIEEgYEZ1bmN0aW9uc0h0dHBFcnJvcmAgZXJyb3IgaXMgcmV0dXJuZWQgaWYgeW91ciBmdW5jdGlvbiB0aHJvd3MgYW4gZXJyb3IsIGBGdW5jdGlvbnNSZWxheUVycm9yYCBpZiB0aGUgU3VwYWJhc2UgUmVsYXkgaGFzIGFuIGVycm9yIHByb2Nlc3NpbmcgeW91ciBmdW5jdGlvbiBhbmQgYEZ1bmN0aW9uc0ZldGNoRXJyb3JgIGlmIHRoZXJlIGlzIGEgbmV0d29yayBlcnJvciBpbiBjYWxsaW5nIHlvdXIgZnVuY3Rpb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBFcnJvciBoYW5kbGluZ1xuICAgICAqIGBgYGpzXG4gICAgICogaW1wb3J0IHsgRnVuY3Rpb25zSHR0cEVycm9yLCBGdW5jdGlvbnNSZWxheUVycm9yLCBGdW5jdGlvbnNGZXRjaEVycm9yIH0gZnJvbSBcIkBzdXBhYmFzZS9zdXBhYmFzZS1qc1wiO1xuICAgICAqXG4gICAgICogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuZnVuY3Rpb25zLmludm9rZSgnaGVsbG8nLCB7XG4gICAgICogICBoZWFkZXJzOiB7XG4gICAgICogICAgIFwibXktY3VzdG9tLWhlYWRlclwiOiAnbXktY3VzdG9tLWhlYWRlci12YWx1ZSdcbiAgICAgKiAgIH0sXG4gICAgICogICBib2R5OiB7IGZvbzogJ2JhcicgfVxuICAgICAqIH0pXG4gICAgICpcbiAgICAgKiBpZiAoZXJyb3IgaW5zdGFuY2VvZiBGdW5jdGlvbnNIdHRwRXJyb3IpIHtcbiAgICAgKiAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGF3YWl0IGVycm9yLmNvbnRleHQuanNvbigpXG4gICAgICogICBjb25zb2xlLmxvZygnRnVuY3Rpb24gcmV0dXJuZWQgYW4gZXJyb3InLCBlcnJvck1lc3NhZ2UpXG4gICAgICogfSBlbHNlIGlmIChlcnJvciBpbnN0YW5jZW9mIEZ1bmN0aW9uc1JlbGF5RXJyb3IpIHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKCdSZWxheSBlcnJvcjonLCBlcnJvci5tZXNzYWdlKVxuICAgICAqIH0gZWxzZSBpZiAoZXJyb3IgaW5zdGFuY2VvZiBGdW5jdGlvbnNGZXRjaEVycm9yKSB7XG4gICAgICogICBjb25zb2xlLmxvZygnRmV0Y2ggZXJyb3I6JywgZXJyb3IubWVzc2FnZSlcbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZURlc2NyaXB0aW9uIFBhc3NpbmcgY3VzdG9tIGhlYWRlcnNcbiAgICAgKiBZb3UgY2FuIHBhc3MgY3VzdG9tIGhlYWRlcnMgdG8geW91ciBmdW5jdGlvbi4gTm90ZTogc3VwYWJhc2UtanMgYXV0b21hdGljYWxseSBwYXNzZXMgdGhlIGBBdXRob3JpemF0aW9uYCBoZWFkZXIgd2l0aCB0aGUgc2lnbmVkIGluIHVzZXIncyBKV1QuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBQYXNzaW5nIGN1c3RvbSBoZWFkZXJzXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5mdW5jdGlvbnMuaW52b2tlKCdoZWxsbycsIHtcbiAgICAgKiAgIGhlYWRlcnM6IHtcbiAgICAgKiAgICAgXCJteS1jdXN0b20taGVhZGVyXCI6ICdteS1jdXN0b20taGVhZGVyLXZhbHVlJ1xuICAgICAqICAgfSxcbiAgICAgKiAgIGJvZHk6IHsgZm9vOiAnYmFyJyB9XG4gICAgICogfSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlRGVzY3JpcHRpb24gQ2FsbGluZyB3aXRoIERFTEVURSBIVFRQIHZlcmJcbiAgICAgKiBZb3UgY2FuIGFsc28gc2V0IHRoZSBIVFRQIHZlcmIgdG8gYERFTEVURWAgd2hlbiBjYWxsaW5nIHlvdXIgRWRnZSBGdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIENhbGxpbmcgd2l0aCBERUxFVEUgSFRUUCB2ZXJiXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5mdW5jdGlvbnMuaW52b2tlKCdoZWxsbycsIHtcbiAgICAgKiAgIGhlYWRlcnM6IHtcbiAgICAgKiAgICAgXCJteS1jdXN0b20taGVhZGVyXCI6ICdteS1jdXN0b20taGVhZGVyLXZhbHVlJ1xuICAgICAqICAgfSxcbiAgICAgKiAgIGJvZHk6IHsgZm9vOiAnYmFyJyB9LFxuICAgICAqICAgbWV0aG9kOiAnREVMRVRFJ1xuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZURlc2NyaXB0aW9uIEludm9raW5nIGEgRnVuY3Rpb24gaW4gdGhlIFVzRWFzdDEgcmVnaW9uXG4gICAgICogSGVyZSBhcmUgdGhlIGF2YWlsYWJsZSByZWdpb25zOlxuICAgICAqIC0gYEZ1bmN0aW9uUmVnaW9uLkFueWBcbiAgICAgKiAtIGBGdW5jdGlvblJlZ2lvbi5BcE5vcnRoZWFzdDFgXG4gICAgICogLSBgRnVuY3Rpb25SZWdpb24uQXBOb3J0aGVhc3QyYFxuICAgICAqIC0gYEZ1bmN0aW9uUmVnaW9uLkFwU291dGgxYFxuICAgICAqIC0gYEZ1bmN0aW9uUmVnaW9uLkFwU291dGhlYXN0MWBcbiAgICAgKiAtIGBGdW5jdGlvblJlZ2lvbi5BcFNvdXRoZWFzdDJgXG4gICAgICogLSBgRnVuY3Rpb25SZWdpb24uQ2FDZW50cmFsMWBcbiAgICAgKiAtIGBGdW5jdGlvblJlZ2lvbi5FdUNlbnRyYWwxYFxuICAgICAqIC0gYEZ1bmN0aW9uUmVnaW9uLkV1V2VzdDFgXG4gICAgICogLSBgRnVuY3Rpb25SZWdpb24uRXVXZXN0MmBcbiAgICAgKiAtIGBGdW5jdGlvblJlZ2lvbi5FdVdlc3QzYFxuICAgICAqIC0gYEZ1bmN0aW9uUmVnaW9uLlNhRWFzdDFgXG4gICAgICogLSBgRnVuY3Rpb25SZWdpb24uVXNFYXN0MWBcbiAgICAgKiAtIGBGdW5jdGlvblJlZ2lvbi5Vc1dlc3QxYFxuICAgICAqIC0gYEZ1bmN0aW9uUmVnaW9uLlVzV2VzdDJgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBJbnZva2luZyBhIEZ1bmN0aW9uIGluIHRoZSBVc0Vhc3QxIHJlZ2lvblxuICAgICAqIGBgYGpzXG4gICAgICogaW1wb3J0IHsgY3JlYXRlQ2xpZW50LCBGdW5jdGlvblJlZ2lvbiB9IGZyb20gJ0BzdXBhYmFzZS9zdXBhYmFzZS1qcydcbiAgICAgKlxuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmZ1bmN0aW9ucy5pbnZva2UoJ2hlbGxvJywge1xuICAgICAqICAgYm9keTogeyBmb286ICdiYXInIH0sXG4gICAgICogICByZWdpb246IEZ1bmN0aW9uUmVnaW9uLlVzRWFzdDFcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVEZXNjcmlwdGlvbiBDYWxsaW5nIHdpdGggR0VUIEhUVFAgdmVyYlxuICAgICAqIFlvdSBjYW4gYWxzbyBzZXQgdGhlIEhUVFAgdmVyYiB0byBgR0VUYCB3aGVuIGNhbGxpbmcgeW91ciBFZGdlIEZ1bmN0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgQ2FsbGluZyB3aXRoIEdFVCBIVFRQIHZlcmJcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmZ1bmN0aW9ucy5pbnZva2UoJ2hlbGxvJywge1xuICAgICAqICAgaGVhZGVyczoge1xuICAgICAqICAgICBcIm15LWN1c3RvbS1oZWFkZXJcIjogJ215LWN1c3RvbS1oZWFkZXItdmFsdWUnXG4gICAgICogICB9LFxuICAgICAqICAgbWV0aG9kOiAnR0VUJ1xuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBTdGFuZGFsb25lIGNsaWVudCBpbnZva2VcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IGZ1bmN0aW9ucy5pbnZva2UoJ2hlbGxvLXdvcmxkJywge1xuICAgICAqICAgYm9keTogeyBuYW1lOiAnQWRhJyB9LFxuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICovXG4gICAgaW52b2tlKGZ1bmN0aW9uTmFtZV8xKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgYXJndW1lbnRzLCB2b2lkIDAsIGZ1bmN0aW9uKiAoZnVuY3Rpb25OYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGxldCB0aW1lb3V0SWQ7XG4gICAgICAgICAgICBsZXQgdGltZW91dENvbnRyb2xsZXI7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgaGVhZGVycywgbWV0aG9kLCBib2R5OiBmdW5jdGlvbkFyZ3MsIHNpZ25hbCwgdGltZW91dCB9ID0gb3B0aW9ucztcbiAgICAgICAgICAgICAgICBsZXQgX2hlYWRlcnMgPSB7fTtcbiAgICAgICAgICAgICAgICBsZXQgeyByZWdpb24gfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWdpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgcmVnaW9uID0gdGhpcy5yZWdpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEFkZCByZWdpb24gYXMgcXVlcnkgcGFyYW1ldGVyIHVzaW5nIFVSTCBBUElcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKGAke3RoaXMudXJsfS8ke2Z1bmN0aW9uTmFtZX1gKTtcbiAgICAgICAgICAgICAgICBpZiAocmVnaW9uICYmIHJlZ2lvbiAhPT0gJ2FueScpIHtcbiAgICAgICAgICAgICAgICAgICAgX2hlYWRlcnNbJ3gtcmVnaW9uJ10gPSByZWdpb247XG4gICAgICAgICAgICAgICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCdmb3JjZUZ1bmN0aW9uUmVnaW9uJywgcmVnaW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGJvZHk7XG4gICAgICAgICAgICAgICAgaWYgKGZ1bmN0aW9uQXJncyAmJlxuICAgICAgICAgICAgICAgICAgICAoKGhlYWRlcnMgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChoZWFkZXJzLCAnQ29udGVudC1UeXBlJykpIHx8ICFoZWFkZXJzKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBmdW5jdGlvbkFyZ3MgaW5zdGFuY2VvZiBCbG9iKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25BcmdzIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgd29yayBmb3IgRmlsZSBhcyBGaWxlIGluaGVyaXRzIEJsb2JcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsc28gd29ya3MgZm9yIEFycmF5QnVmZmVyIGFzIGl0IGlzIHRoZSBzYW1lIHVuZGVybHlpbmcgc3RydWN0dXJlIGFzIGEgQmxvYlxuICAgICAgICAgICAgICAgICAgICAgICAgX2hlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gZnVuY3Rpb25BcmdzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBmdW5jdGlvbkFyZ3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBwbGFpbiBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICAgICAgIF9oZWFkZXJzWydDb250ZW50LVR5cGUnXSA9ICd0ZXh0L3BsYWluJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBmdW5jdGlvbkFyZ3M7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyAmJiBmdW5jdGlvbkFyZ3MgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZG9uJ3Qgc2V0IGNvbnRlbnQtdHlwZSBoZWFkZXJzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBSZXF1ZXN0IHdpbGwgYXV0b21hdGljYWxseSBhZGQgdGhlIHJpZ2h0IGJvdW5kYXJ5IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICBib2R5ID0gZnVuY3Rpb25BcmdzO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGVmYXVsdCwgYXNzdW1lIHRoaXMgaXMgSlNPTlxuICAgICAgICAgICAgICAgICAgICAgICAgX2hlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IEpTT04uc3RyaW5naWZ5KGZ1bmN0aW9uQXJncyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkFyZ3MgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBmdW5jdGlvbkFyZ3MgIT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhKHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBmdW5jdGlvbkFyZ3MgaW5zdGFuY2VvZiBCbG9iKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIShmdW5jdGlvbkFyZ3MgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICEodHlwZW9mIEZvcm1EYXRhICE9PSAndW5kZWZpbmVkJyAmJiBmdW5jdGlvbkFyZ3MgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJvZHkgPSBKU09OLnN0cmluZ2lmeShmdW5jdGlvbkFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYm9keSA9IGZ1bmN0aW9uQXJncztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdGltZW91dCBieSBjcmVhdGluZyBhbiBBYm9ydENvbnRyb2xsZXJcbiAgICAgICAgICAgICAgICBsZXQgZWZmZWN0aXZlU2lnbmFsID0gc2lnbmFsO1xuICAgICAgICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHRpbWVvdXRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgICAgICAgICAgICAgICB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHRpbWVvdXRDb250cm9sbGVyLmFib3J0KCksIHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB1c2VyIHByb3ZpZGVkIHRoZWlyIG93biBzaWduYWwsIHdlIG5lZWQgdG8gcmVzcGVjdCBib3RoXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaWduYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVNpZ25hbCA9IHRpbWVvdXRDb250cm9sbGVyLnNpZ25hbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB1c2VyJ3Mgc2lnbmFsIGlzIGFib3J0ZWQsIGFib3J0IG91ciB0aW1lb3V0IGNvbnRyb2xsZXIgdG9vXG4gICAgICAgICAgICAgICAgICAgICAgICBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCAoKSA9PiB0aW1lb3V0Q29udHJvbGxlci5hYm9ydCgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZVNpZ25hbCA9IHRpbWVvdXRDb250cm9sbGVyLnNpZ25hbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IHlpZWxkIHRoaXMuZmV0Y2godXJsLnRvU3RyaW5nKCksIHtcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QgfHwgJ1BPU1QnLFxuICAgICAgICAgICAgICAgICAgICAvLyBoZWFkZXJzIHByaW9yaXR5IGlzIChoaWdoIHRvIGxvdyk6XG4gICAgICAgICAgICAgICAgICAgIC8vIDEuIGludm9rZS1sZXZlbCBoZWFkZXJzXG4gICAgICAgICAgICAgICAgICAgIC8vIDIuIGNsaWVudC1sZXZlbCBoZWFkZXJzXG4gICAgICAgICAgICAgICAgICAgIC8vIDMuIGRlZmF1bHQgQ29udGVudC1UeXBlIGhlYWRlclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgX2hlYWRlcnMpLCB0aGlzLmhlYWRlcnMpLCBoZWFkZXJzKSxcbiAgICAgICAgICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsOiBlZmZlY3RpdmVTaWduYWwsXG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goKGZldGNoRXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEZ1bmN0aW9uc0ZldGNoRXJyb3IoZmV0Y2hFcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSZWxheUVycm9yID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoJ3gtcmVsYXktZXJyb3InKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWxheUVycm9yICYmIGlzUmVsYXlFcnJvciA9PT0gJ3RydWUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBGdW5jdGlvbnNSZWxheUVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRnVuY3Rpb25zSHR0cEVycm9yKHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlVHlwZSA9ICgoX2EgPSByZXNwb25zZS5oZWFkZXJzLmdldCgnQ29udGVudC1UeXBlJykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICd0ZXh0L3BsYWluJykuc3BsaXQoJzsnKVswXS50cmltKCk7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL2pzb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSB5aWVsZCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfHxcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2VUeXBlID09PSAnYXBwbGljYXRpb24vcGRmJykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0geWllbGQgcmVzcG9uc2UuYmxvYigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZVR5cGUgPT09ICd0ZXh0L2V2ZW50LXN0cmVhbScpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlc3BvbnNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZVR5cGUgPT09ICdtdWx0aXBhcnQvZm9ybS1kYXRhJykge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0geWllbGQgcmVzcG9uc2UuZm9ybURhdGEoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gdGV4dFxuICAgICAgICAgICAgICAgICAgICBkYXRhID0geWllbGQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBkYXRhLCBlcnJvcjogbnVsbCwgcmVzcG9uc2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZTogZXJyb3IgaW5zdGFuY2VvZiBGdW5jdGlvbnNIdHRwRXJyb3IgfHwgZXJyb3IgaW5zdGFuY2VvZiBGdW5jdGlvbnNSZWxheUVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGVycm9yLmNvbnRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAvLyBDbGVhciB0aGUgdGltZW91dCBpZiBpdCB3YXMgc2V0XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVvdXRJZCkge1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUZ1bmN0aW9uc0NsaWVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/FunctionsClient.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/helper.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/@supabase/functions-js/dist/module/helper.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((__unused_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 */ resolveFetch: () => (/* binding */ resolveFetch)\n/* harmony export */ });\nconst resolveFetch = (customFetch) => {\n if (customFetch) {\n return (...args) => customFetch(...args);\n }\n return (...args) => fetch(...args);\n};\n//# sourceMappingURL=helper.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvZnVuY3Rpb25zLWpzL2Rpc3QvbW9kdWxlL2hlbHBlci5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL2Z1bmN0aW9ucy1qcy9kaXN0L21vZHVsZS9oZWxwZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IHJlc29sdmVGZXRjaCA9IChjdXN0b21GZXRjaCkgPT4ge1xuICAgIGlmIChjdXN0b21GZXRjaCkge1xuICAgICAgICByZXR1cm4gKC4uLmFyZ3MpID0+IGN1c3RvbUZldGNoKC4uLmFyZ3MpO1xuICAgIH1cbiAgICByZXR1cm4gKC4uLmFyZ3MpID0+IGZldGNoKC4uLmFyZ3MpO1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWhlbHBlci5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/helper.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/types.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/@supabase/functions-js/dist/module/types.js ***!
|
||
\******************************************************************/
|
||
/***/ ((__unused_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 */ FunctionRegion: () => (/* binding */ FunctionRegion),\n/* harmony export */ FunctionsError: () => (/* binding */ FunctionsError),\n/* harmony export */ FunctionsFetchError: () => (/* binding */ FunctionsFetchError),\n/* harmony export */ FunctionsHttpError: () => (/* binding */ FunctionsHttpError),\n/* harmony export */ FunctionsRelayError: () => (/* binding */ FunctionsRelayError)\n/* harmony export */ });\n/**\n * Base error for Supabase Edge Function invocations.\n *\n * @example\n * ```ts\n * import { FunctionsError } from '@supabase/functions-js'\n *\n * throw new FunctionsError('Unexpected error invoking function', 'FunctionsError', {\n * requestId: 'abc123',\n * })\n * ```\n */\nclass FunctionsError extends Error {\n constructor(message, name = 'FunctionsError', context) {\n super(message);\n this.name = name;\n this.context = context;\n }\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n context: this.context,\n };\n }\n}\n/**\n * Error thrown when the network request to an Edge Function fails.\n *\n * @example\n * ```ts\n * import { FunctionsFetchError } from '@supabase/functions-js'\n *\n * throw new FunctionsFetchError({ requestId: 'abc123' })\n * ```\n */\nclass FunctionsFetchError extends FunctionsError {\n constructor(context) {\n super('Failed to send a request to the Edge Function', 'FunctionsFetchError', context);\n }\n}\n/**\n * Error thrown when the Supabase relay cannot reach the Edge Function.\n *\n * @example\n * ```ts\n * import { FunctionsRelayError } from '@supabase/functions-js'\n *\n * throw new FunctionsRelayError({ region: 'us-east-1' })\n * ```\n */\nclass FunctionsRelayError extends FunctionsError {\n constructor(context) {\n super('Relay Error invoking the Edge Function', 'FunctionsRelayError', context);\n }\n}\n/**\n * Error thrown when the Edge Function returns a non-2xx status code.\n *\n * @example\n * ```ts\n * import { FunctionsHttpError } from '@supabase/functions-js'\n *\n * throw new FunctionsHttpError({ status: 500 })\n * ```\n */\nclass FunctionsHttpError extends FunctionsError {\n constructor(context) {\n super('Edge Function returned a non-2xx status code', 'FunctionsHttpError', context);\n }\n}\n// Define the enum for the 'region' property\nvar FunctionRegion;\n(function (FunctionRegion) {\n FunctionRegion[\"Any\"] = \"any\";\n FunctionRegion[\"ApNortheast1\"] = \"ap-northeast-1\";\n FunctionRegion[\"ApNortheast2\"] = \"ap-northeast-2\";\n FunctionRegion[\"ApSouth1\"] = \"ap-south-1\";\n FunctionRegion[\"ApSoutheast1\"] = \"ap-southeast-1\";\n FunctionRegion[\"ApSoutheast2\"] = \"ap-southeast-2\";\n FunctionRegion[\"CaCentral1\"] = \"ca-central-1\";\n FunctionRegion[\"EuCentral1\"] = \"eu-central-1\";\n FunctionRegion[\"EuWest1\"] = \"eu-west-1\";\n FunctionRegion[\"EuWest2\"] = \"eu-west-2\";\n FunctionRegion[\"EuWest3\"] = \"eu-west-3\";\n FunctionRegion[\"SaEast1\"] = \"sa-east-1\";\n FunctionRegion[\"UsEast1\"] = \"us-east-1\";\n FunctionRegion[\"UsWest1\"] = \"us-west-1\";\n FunctionRegion[\"UsWest2\"] = \"us-west-2\";\n})(FunctionRegion || (FunctionRegion = {}));\n//# sourceMappingURL=types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvZnVuY3Rpb25zLWpzL2Rpc3QvbW9kdWxlL3R5cGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksaUJBQWlCO0FBQzdCO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHNCQUFzQjtBQUNsQztBQUNBLG1DQUFtQyxxQkFBcUI7QUFDeEQ7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWSxzQkFBc0I7QUFDbEM7QUFDQSxtQ0FBbUMscUJBQXFCO0FBQ3hEO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVkscUJBQXFCO0FBQ2pDO0FBQ0Esa0NBQWtDLGFBQWE7QUFDL0M7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHdDQUF3QztBQUN6QyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvZnVuY3Rpb25zLWpzL2Rpc3QvbW9kdWxlL3R5cGVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQmFzZSBlcnJvciBmb3IgU3VwYWJhc2UgRWRnZSBGdW5jdGlvbiBpbnZvY2F0aW9ucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IEZ1bmN0aW9uc0Vycm9yIH0gZnJvbSAnQHN1cGFiYXNlL2Z1bmN0aW9ucy1qcydcbiAqXG4gKiB0aHJvdyBuZXcgRnVuY3Rpb25zRXJyb3IoJ1VuZXhwZWN0ZWQgZXJyb3IgaW52b2tpbmcgZnVuY3Rpb24nLCAnRnVuY3Rpb25zRXJyb3InLCB7XG4gKiAgIHJlcXVlc3RJZDogJ2FiYzEyMycsXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBGdW5jdGlvbnNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBuYW1lID0gJ0Z1bmN0aW9uc0Vycm9yJywgY29udGV4dCkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICB9XG4gICAgdG9KU09OKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgbWVzc2FnZTogdGhpcy5tZXNzYWdlLFxuICAgICAgICAgICAgY29udGV4dDogdGhpcy5jb250ZXh0LFxuICAgICAgICB9O1xuICAgIH1cbn1cbi8qKlxuICogRXJyb3IgdGhyb3duIHdoZW4gdGhlIG5ldHdvcmsgcmVxdWVzdCB0byBhbiBFZGdlIEZ1bmN0aW9uIGZhaWxzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaW1wb3J0IHsgRnVuY3Rpb25zRmV0Y2hFcnJvciB9IGZyb20gJ0BzdXBhYmFzZS9mdW5jdGlvbnMtanMnXG4gKlxuICogdGhyb3cgbmV3IEZ1bmN0aW9uc0ZldGNoRXJyb3IoeyByZXF1ZXN0SWQ6ICdhYmMxMjMnIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uc0ZldGNoRXJyb3IgZXh0ZW5kcyBGdW5jdGlvbnNFcnJvciB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dCkge1xuICAgICAgICBzdXBlcignRmFpbGVkIHRvIHNlbmQgYSByZXF1ZXN0IHRvIHRoZSBFZGdlIEZ1bmN0aW9uJywgJ0Z1bmN0aW9uc0ZldGNoRXJyb3InLCBjb250ZXh0KTtcbiAgICB9XG59XG4vKipcbiAqIEVycm9yIHRocm93biB3aGVuIHRoZSBTdXBhYmFzZSByZWxheSBjYW5ub3QgcmVhY2ggdGhlIEVkZ2UgRnVuY3Rpb24uXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBpbXBvcnQgeyBGdW5jdGlvbnNSZWxheUVycm9yIH0gZnJvbSAnQHN1cGFiYXNlL2Z1bmN0aW9ucy1qcydcbiAqXG4gKiB0aHJvdyBuZXcgRnVuY3Rpb25zUmVsYXlFcnJvcih7IHJlZ2lvbjogJ3VzLWVhc3QtMScgfSlcbiAqIGBgYFxuICovXG5leHBvcnQgY2xhc3MgRnVuY3Rpb25zUmVsYXlFcnJvciBleHRlbmRzIEZ1bmN0aW9uc0Vycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0KSB7XG4gICAgICAgIHN1cGVyKCdSZWxheSBFcnJvciBpbnZva2luZyB0aGUgRWRnZSBGdW5jdGlvbicsICdGdW5jdGlvbnNSZWxheUVycm9yJywgY29udGV4dCk7XG4gICAgfVxufVxuLyoqXG4gKiBFcnJvciB0aHJvd24gd2hlbiB0aGUgRWRnZSBGdW5jdGlvbiByZXR1cm5zIGEgbm9uLTJ4eCBzdGF0dXMgY29kZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IEZ1bmN0aW9uc0h0dHBFcnJvciB9IGZyb20gJ0BzdXBhYmFzZS9mdW5jdGlvbnMtanMnXG4gKlxuICogdGhyb3cgbmV3IEZ1bmN0aW9uc0h0dHBFcnJvcih7IHN0YXR1czogNTAwIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNsYXNzIEZ1bmN0aW9uc0h0dHBFcnJvciBleHRlbmRzIEZ1bmN0aW9uc0Vycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0KSB7XG4gICAgICAgIHN1cGVyKCdFZGdlIEZ1bmN0aW9uIHJldHVybmVkIGEgbm9uLTJ4eCBzdGF0dXMgY29kZScsICdGdW5jdGlvbnNIdHRwRXJyb3InLCBjb250ZXh0KTtcbiAgICB9XG59XG4vLyBEZWZpbmUgdGhlIGVudW0gZm9yIHRoZSAncmVnaW9uJyBwcm9wZXJ0eVxuZXhwb3J0IHZhciBGdW5jdGlvblJlZ2lvbjtcbihmdW5jdGlvbiAoRnVuY3Rpb25SZWdpb24pIHtcbiAgICBGdW5jdGlvblJlZ2lvbltcIkFueVwiXSA9IFwiYW55XCI7XG4gICAgRnVuY3Rpb25SZWdpb25bXCJBcE5vcnRoZWFzdDFcIl0gPSBcImFwLW5vcnRoZWFzdC0xXCI7XG4gICAgRnVuY3Rpb25SZWdpb25bXCJBcE5vcnRoZWFzdDJcIl0gPSBcImFwLW5vcnRoZWFzdC0yXCI7XG4gICAgRnVuY3Rpb25SZWdpb25bXCJBcFNvdXRoMVwiXSA9IFwiYXAtc291dGgtMVwiO1xuICAgIEZ1bmN0aW9uUmVnaW9uW1wiQXBTb3V0aGVhc3QxXCJdID0gXCJhcC1zb3V0aGVhc3QtMVwiO1xuICAgIEZ1bmN0aW9uUmVnaW9uW1wiQXBTb3V0aGVhc3QyXCJdID0gXCJhcC1zb3V0aGVhc3QtMlwiO1xuICAgIEZ1bmN0aW9uUmVnaW9uW1wiQ2FDZW50cmFsMVwiXSA9IFwiY2EtY2VudHJhbC0xXCI7XG4gICAgRnVuY3Rpb25SZWdpb25bXCJFdUNlbnRyYWwxXCJdID0gXCJldS1jZW50cmFsLTFcIjtcbiAgICBGdW5jdGlvblJlZ2lvbltcIkV1V2VzdDFcIl0gPSBcImV1LXdlc3QtMVwiO1xuICAgIEZ1bmN0aW9uUmVnaW9uW1wiRXVXZXN0MlwiXSA9IFwiZXUtd2VzdC0yXCI7XG4gICAgRnVuY3Rpb25SZWdpb25bXCJFdVdlc3QzXCJdID0gXCJldS13ZXN0LTNcIjtcbiAgICBGdW5jdGlvblJlZ2lvbltcIlNhRWFzdDFcIl0gPSBcInNhLWVhc3QtMVwiO1xuICAgIEZ1bmN0aW9uUmVnaW9uW1wiVXNFYXN0MVwiXSA9IFwidXMtZWFzdC0xXCI7XG4gICAgRnVuY3Rpb25SZWdpb25bXCJVc1dlc3QxXCJdID0gXCJ1cy13ZXN0LTFcIjtcbiAgICBGdW5jdGlvblJlZ2lvbltcIlVzV2VzdDJcIl0gPSBcInVzLXdlc3QtMlwiO1xufSkoRnVuY3Rpb25SZWdpb24gfHwgKEZ1bmN0aW9uUmVnaW9uID0ge30pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXR5cGVzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/types.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/phoenix/priv/static/phoenix.mjs":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/@supabase/phoenix/priv/static/phoenix.mjs ***!
|
||
\****************************************************************/
|
||
/***/ ((__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 */ Channel: () => (/* binding */ Channel),\n/* harmony export */ LongPoll: () => (/* binding */ LongPoll),\n/* harmony export */ Presence: () => (/* binding */ Presence),\n/* harmony export */ Push: () => (/* binding */ Push),\n/* harmony export */ Serializer: () => (/* binding */ serializer_default),\n/* harmony export */ Socket: () => (/* binding */ Socket),\n/* harmony export */ Timer: () => (/* binding */ Timer)\n/* harmony export */ });\n// js/phoenix/utils.js\nvar closure = (value) => {\n if (typeof value === \"function\") {\n return (\n /** @type {() => T} */\n value\n );\n } else {\n let closure2 = function() {\n return value;\n };\n return closure2;\n }\n};\n\n// js/phoenix/constants.js\nvar globalSelf = typeof self !== \"undefined\" ? self : null;\nvar phxWindow = typeof window !== \"undefined\" ? window : null;\nvar global = globalSelf || phxWindow || globalThis;\nvar DEFAULT_VSN = \"2.0.0\";\nvar DEFAULT_TIMEOUT = 1e4;\nvar WS_CLOSE_NORMAL = 1e3;\nvar SOCKET_STATES = (\n /** @type {const} */\n { connecting: 0, open: 1, closing: 2, closed: 3 }\n);\nvar CHANNEL_STATES = (\n /** @type {const} */\n {\n closed: \"closed\",\n errored: \"errored\",\n joined: \"joined\",\n joining: \"joining\",\n leaving: \"leaving\"\n }\n);\nvar CHANNEL_EVENTS = (\n /** @type {const} */\n {\n close: \"phx_close\",\n error: \"phx_error\",\n join: \"phx_join\",\n reply: \"phx_reply\",\n leave: \"phx_leave\"\n }\n);\nvar TRANSPORTS = (\n /** @type {const} */\n {\n longpoll: \"longpoll\",\n websocket: \"websocket\"\n }\n);\nvar XHR_STATES = (\n /** @type {const} */\n {\n complete: 4\n }\n);\nvar AUTH_TOKEN_PREFIX = \"base64url.bearer.phx.\";\n\n// js/phoenix/push.js\nvar Push = class {\n /**\n * Initializes the Push\n * @param {Channel} channel - The Channel\n * @param {ChannelEvent} event - The event, for example `\"phx_join\"`\n * @param {() => Record<string, unknown>} payload - The payload, for example `{user_id: 123}`\n * @param {number} timeout - The push timeout in milliseconds\n */\n constructor(channel, event, payload, timeout) {\n this.channel = channel;\n this.event = event;\n this.payload = payload || function() {\n return {};\n };\n this.receivedResp = null;\n this.timeout = timeout;\n this.timeoutTimer = null;\n this.recHooks = [];\n this.sent = false;\n this.ref = void 0;\n }\n /**\n *\n * @param {number} timeout\n */\n resend(timeout) {\n this.timeout = timeout;\n this.reset();\n this.send();\n }\n /**\n *\n */\n send() {\n if (this.hasReceived(\"timeout\")) {\n return;\n }\n this.startTimeout();\n this.sent = true;\n this.channel.socket.push({\n topic: this.channel.topic,\n event: this.event,\n payload: this.payload(),\n ref: this.ref,\n join_ref: this.channel.joinRef()\n });\n }\n /**\n *\n * @param {string} status\n * @param {(response: any) => void} callback\n */\n receive(status, callback) {\n if (this.hasReceived(status)) {\n callback(this.receivedResp.response);\n }\n this.recHooks.push({ status, callback });\n return this;\n }\n reset() {\n this.cancelRefEvent();\n this.ref = null;\n this.refEvent = null;\n this.receivedResp = null;\n this.sent = false;\n }\n destroy() {\n this.cancelRefEvent();\n this.cancelTimeout();\n }\n /**\n * @private\n */\n matchReceive({ status, response, _ref }) {\n this.recHooks.filter((h) => h.status === status).forEach((h) => h.callback(response));\n }\n /**\n * @private\n */\n cancelRefEvent() {\n if (!this.refEvent) {\n return;\n }\n this.channel.off(this.refEvent);\n }\n cancelTimeout() {\n clearTimeout(this.timeoutTimer);\n this.timeoutTimer = null;\n }\n startTimeout() {\n if (this.timeoutTimer) {\n this.cancelTimeout();\n }\n this.ref = this.channel.socket.makeRef();\n this.refEvent = this.channel.replyEventName(this.ref);\n this.channel.on(this.refEvent, (payload) => {\n this.cancelRefEvent();\n this.cancelTimeout();\n this.receivedResp = payload;\n this.matchReceive(payload);\n });\n this.timeoutTimer = setTimeout(() => {\n this.trigger(\"timeout\", {});\n }, this.timeout);\n }\n /**\n * @private\n */\n hasReceived(status) {\n return this.receivedResp && this.receivedResp.status === status;\n }\n trigger(status, response) {\n this.channel.trigger(this.refEvent, { status, response });\n }\n};\n\n// js/phoenix/timer.js\nvar Timer = class {\n /**\n * @param {() => void} callback\n * @param {(tries: number) => number} timerCalc\n */\n constructor(callback, timerCalc) {\n this.callback = callback;\n this.timerCalc = timerCalc;\n this.timer = void 0;\n this.tries = 0;\n }\n reset() {\n this.tries = 0;\n clearTimeout(this.timer);\n }\n /**\n * Cancels any previous scheduleTimeout and schedules callback\n */\n scheduleTimeout() {\n clearTimeout(this.timer);\n this.timer = setTimeout(() => {\n this.tries = this.tries + 1;\n this.callback();\n }, this.timerCalc(this.tries + 1));\n }\n};\n\n// js/phoenix/channel.js\nvar Channel = class {\n /**\n * @param {string} topic\n * @param {Params | (() => Params)} params\n * @param {Socket} socket\n */\n constructor(topic, params, socket) {\n this.state = CHANNEL_STATES.closed;\n this.topic = topic;\n this.params = closure(params || {});\n this.socket = socket;\n this.bindings = [];\n this.bindingRef = 0;\n this.timeout = this.socket.timeout;\n this.joinedOnce = false;\n this.joinPush = new Push(this, CHANNEL_EVENTS.join, this.params, this.timeout);\n this.pushBuffer = [];\n this.stateChangeRefs = [];\n this.rejoinTimer = new Timer(() => {\n if (this.socket.isConnected()) {\n this.rejoin();\n }\n }, this.socket.rejoinAfterMs);\n this.stateChangeRefs.push(this.socket.onError(() => this.rejoinTimer.reset()));\n this.stateChangeRefs.push(\n this.socket.onOpen(() => {\n this.rejoinTimer.reset();\n if (this.isErrored()) {\n this.rejoin();\n }\n })\n );\n this.joinPush.receive(\"ok\", () => {\n this.state = CHANNEL_STATES.joined;\n this.rejoinTimer.reset();\n this.pushBuffer.forEach((pushEvent) => pushEvent.send());\n this.pushBuffer = [];\n });\n this.joinPush.receive(\"error\", (reason) => {\n this.state = CHANNEL_STATES.errored;\n if (this.socket.hasLogger()) this.socket.log(\"channel\", `error ${this.topic}`, reason);\n if (this.socket.isConnected()) {\n this.rejoinTimer.scheduleTimeout();\n }\n });\n this.onClose(() => {\n this.rejoinTimer.reset();\n if (this.socket.hasLogger()) this.socket.log(\"channel\", `close ${this.topic}`);\n this.state = CHANNEL_STATES.closed;\n this.socket.remove(this);\n });\n this.onError((reason) => {\n if (this.socket.hasLogger()) this.socket.log(\"channel\", `error ${this.topic}`, reason);\n if (this.isJoining()) {\n this.joinPush.reset();\n }\n this.state = CHANNEL_STATES.errored;\n if (this.socket.isConnected()) {\n this.rejoinTimer.scheduleTimeout();\n }\n });\n this.joinPush.receive(\"timeout\", () => {\n if (this.socket.hasLogger()) this.socket.log(\"channel\", `timeout ${this.topic}`, this.joinPush.timeout);\n let leavePush = new Push(this, CHANNEL_EVENTS.leave, closure({}), this.timeout);\n leavePush.send();\n this.state = CHANNEL_STATES.errored;\n this.joinPush.reset();\n if (this.socket.isConnected()) {\n this.rejoinTimer.scheduleTimeout();\n }\n });\n this.on(CHANNEL_EVENTS.reply, (payload, ref) => {\n this.trigger(this.replyEventName(ref), payload);\n });\n }\n /**\n * Join the channel\n * @param {number} timeout\n * @returns {Push}\n */\n join(timeout = this.timeout) {\n if (this.joinedOnce) {\n throw new Error(\"tried to join multiple times. 'join' can only be called a single time per channel instance\");\n } else {\n this.timeout = timeout;\n this.joinedOnce = true;\n this.rejoin();\n return this.joinPush;\n }\n }\n /**\n * Teardown the channel.\n *\n * Destroys and stops related timers.\n */\n teardown() {\n this.pushBuffer.forEach((push) => push.destroy());\n this.pushBuffer = [];\n this.rejoinTimer.reset();\n this.joinPush.destroy();\n this.state = CHANNEL_STATES.closed;\n this.bindings = [];\n }\n /**\n * Hook into channel close\n * @param {ChannelBindingCallback} callback\n */\n onClose(callback) {\n this.on(CHANNEL_EVENTS.close, callback);\n }\n /**\n * Hook into channel errors\n * @param {ChannelOnErrorCallback} callback\n * @return {number}\n */\n onError(callback) {\n return this.on(CHANNEL_EVENTS.error, (reason) => callback(reason));\n }\n /**\n * Subscribes on channel events\n *\n * Subscription returns a ref counter, which can be used later to\n * unsubscribe the exact event listener\n *\n * @example\n * const ref1 = channel.on(\"event\", do_stuff)\n * const ref2 = channel.on(\"event\", do_other_stuff)\n * channel.off(\"event\", ref1)\n * // Since unsubscription, do_stuff won't fire,\n * // while do_other_stuff will keep firing on the \"event\"\n *\n * @param {string} event\n * @param {ChannelBindingCallback} callback\n * @returns {number} ref\n */\n on(event, callback) {\n let ref = this.bindingRef++;\n this.bindings.push({ event, ref, callback });\n return ref;\n }\n /**\n * Unsubscribes off of channel events\n *\n * Use the ref returned from a channel.on() to unsubscribe one\n * handler, or pass nothing for the ref to unsubscribe all\n * handlers for the given event.\n *\n * @example\n * // Unsubscribe the do_stuff handler\n * const ref1 = channel.on(\"event\", do_stuff)\n * channel.off(\"event\", ref1)\n *\n * // Unsubscribe all handlers from event\n * channel.off(\"event\")\n *\n * @param {string} event\n * @param {number} [ref]\n */\n off(event, ref) {\n this.bindings = this.bindings.filter((bind) => {\n return !(bind.event === event && (typeof ref === \"undefined\" || ref === bind.ref));\n });\n }\n /**\n * @private\n */\n canPush() {\n return this.socket.isConnected() && this.isJoined();\n }\n /**\n * Sends a message `event` to phoenix with the payload `payload`.\n * Phoenix receives this in the `handle_in(event, payload, socket)`\n * function. if phoenix replies or it times out (default 10000ms),\n * then optionally the reply can be received.\n *\n * @example\n * channel.push(\"event\")\n * .receive(\"ok\", payload => console.log(\"phoenix replied:\", payload))\n * .receive(\"error\", err => console.log(\"phoenix errored\", err))\n * .receive(\"timeout\", () => console.log(\"timed out pushing\"))\n * @param {string} event\n * @param {Object} payload\n * @param {number} [timeout]\n * @returns {Push}\n */\n push(event, payload, timeout = this.timeout) {\n payload = payload || {};\n if (!this.joinedOnce) {\n throw new Error(`tried to push '${event}' to '${this.topic}' before joining. Use channel.join() before pushing events`);\n }\n let pushEvent = new Push(this, event, function() {\n return payload;\n }, timeout);\n if (this.canPush()) {\n pushEvent.send();\n } else {\n pushEvent.startTimeout();\n this.pushBuffer.push(pushEvent);\n }\n return pushEvent;\n }\n /** Leaves the channel\n *\n * Unsubscribes from server events, and\n * instructs channel to terminate on server\n *\n * Triggers onClose() hooks\n *\n * To receive leave acknowledgements, use the `receive`\n * hook to bind to the server ack, ie:\n *\n * @example\n * channel.leave().receive(\"ok\", () => alert(\"left!\") )\n *\n * @param {number} timeout\n * @returns {Push}\n */\n leave(timeout = this.timeout) {\n this.rejoinTimer.reset();\n this.joinPush.cancelTimeout();\n this.state = CHANNEL_STATES.leaving;\n let onClose = () => {\n if (this.socket.hasLogger()) this.socket.log(\"channel\", `leave ${this.topic}`);\n this.trigger(CHANNEL_EVENTS.close, \"leave\");\n };\n let leavePush = new Push(this, CHANNEL_EVENTS.leave, closure({}), timeout);\n leavePush.receive(\"ok\", () => onClose()).receive(\"timeout\", () => onClose());\n leavePush.send();\n if (!this.canPush()) {\n leavePush.trigger(\"ok\", {});\n }\n return leavePush;\n }\n /**\n * Overridable message hook\n *\n * Receives all events for specialized message handling\n * before dispatching to the channel callbacks.\n *\n * Must return the payload, modified or unmodified\n * @type{ChannelOnMessage}\n */\n onMessage(_event, payload, _ref) {\n return payload;\n }\n /**\n * Overridable filter hook\n *\n * If this function returns `true`, `binding`'s callback will be called.\n *\n * @type{ChannelFilterBindings}\n */\n filterBindings(_binding, _payload, _ref) {\n return true;\n }\n isMember(topic, event, payload, joinRef) {\n if (this.topic !== topic) {\n return false;\n }\n if (joinRef && joinRef !== this.joinRef()) {\n if (this.socket.hasLogger()) this.socket.log(\"channel\", \"dropping outdated message\", { topic, event, payload, joinRef });\n return false;\n } else {\n return true;\n }\n }\n joinRef() {\n return this.joinPush.ref;\n }\n /**\n * @private\n */\n rejoin(timeout = this.timeout) {\n if (this.isLeaving()) {\n return;\n }\n this.socket.leaveOpenTopic(this.topic);\n this.state = CHANNEL_STATES.joining;\n this.joinPush.resend(timeout);\n }\n /**\n * @param {string} event\n * @param {unknown} [payload]\n * @param {?string} [ref]\n * @param {?string} [joinRef]\n */\n trigger(event, payload, ref, joinRef) {\n let handledPayload = this.onMessage(event, payload, ref, joinRef);\n if (payload && !handledPayload) {\n throw new Error(\"channel onMessage callbacks must return the payload, modified or unmodified\");\n }\n let eventBindings = this.bindings.filter((bind) => bind.event === event && this.filterBindings(bind, payload, ref));\n for (let i = 0; i < eventBindings.length; i++) {\n let bind = eventBindings[i];\n bind.callback(handledPayload, ref, joinRef || this.joinRef());\n }\n }\n /**\n * @param {string} ref\n */\n replyEventName(ref) {\n return `chan_reply_${ref}`;\n }\n isClosed() {\n return this.state === CHANNEL_STATES.closed;\n }\n isErrored() {\n return this.state === CHANNEL_STATES.errored;\n }\n isJoined() {\n return this.state === CHANNEL_STATES.joined;\n }\n isJoining() {\n return this.state === CHANNEL_STATES.joining;\n }\n isLeaving() {\n return this.state === CHANNEL_STATES.leaving;\n }\n};\n\n// js/phoenix/ajax.js\nvar Ajax = class {\n static request(method, endPoint, headers, body, timeout, ontimeout, callback) {\n if (global.XDomainRequest) {\n let req = new global.XDomainRequest();\n return this.xdomainRequest(req, method, endPoint, body, timeout, ontimeout, callback);\n } else if (global.XMLHttpRequest) {\n let req = new global.XMLHttpRequest();\n return this.xhrRequest(req, method, endPoint, headers, body, timeout, ontimeout, callback);\n } else if (global.fetch && global.AbortController) {\n return this.fetchRequest(method, endPoint, headers, body, timeout, ontimeout, callback);\n } else {\n throw new Error(\"No suitable XMLHttpRequest implementation found\");\n }\n }\n static fetchRequest(method, endPoint, headers, body, timeout, ontimeout, callback) {\n let options = {\n method,\n headers,\n body\n };\n let controller = null;\n if (timeout) {\n controller = new AbortController();\n const _timeoutId = setTimeout(() => controller.abort(), timeout);\n options.signal = controller.signal;\n }\n global.fetch(endPoint, options).then((response) => response.text()).then((data) => this.parseJSON(data)).then((data) => callback && callback(data)).catch((err) => {\n if (err.name === \"AbortError\" && ontimeout) {\n ontimeout();\n } else {\n callback && callback(null);\n }\n });\n return controller;\n }\n static xdomainRequest(req, method, endPoint, body, timeout, ontimeout, callback) {\n req.timeout = timeout;\n req.open(method, endPoint);\n req.onload = () => {\n let response = this.parseJSON(req.responseText);\n callback && callback(response);\n };\n if (ontimeout) {\n req.ontimeout = ontimeout;\n }\n req.onprogress = () => {\n };\n req.send(body);\n return req;\n }\n static xhrRequest(req, method, endPoint, headers, body, timeout, ontimeout, callback) {\n req.open(method, endPoint, true);\n req.timeout = timeout;\n for (let [key, value] of Object.entries(headers)) {\n req.setRequestHeader(key, value);\n }\n req.onerror = () => callback && callback(null);\n req.onreadystatechange = () => {\n if (req.readyState === XHR_STATES.complete && callback) {\n let response = this.parseJSON(req.responseText);\n callback(response);\n }\n };\n if (ontimeout) {\n req.ontimeout = ontimeout;\n }\n req.send(body);\n return req;\n }\n static parseJSON(resp) {\n if (!resp || resp === \"\") {\n return null;\n }\n try {\n return JSON.parse(resp);\n } catch {\n console && console.log(\"failed to parse JSON response\", resp);\n return null;\n }\n }\n static serialize(obj, parentKey) {\n let queryStr = [];\n for (var key in obj) {\n if (!Object.prototype.hasOwnProperty.call(obj, key)) {\n continue;\n }\n let paramKey = parentKey ? `${parentKey}[${key}]` : key;\n let paramVal = obj[key];\n if (typeof paramVal === \"object\") {\n queryStr.push(this.serialize(paramVal, paramKey));\n } else {\n queryStr.push(encodeURIComponent(paramKey) + \"=\" + encodeURIComponent(paramVal));\n }\n }\n return queryStr.join(\"&\");\n }\n static appendParams(url, params) {\n if (Object.keys(params).length === 0) {\n return url;\n }\n let prefix = url.match(/\\?/) ? \"&\" : \"?\";\n return `${url}${prefix}${this.serialize(params)}`;\n }\n};\n\n// js/phoenix/longpoll.js\nvar arrayBufferToBase64 = (buffer) => {\n let binary = \"\";\n let bytes = new Uint8Array(buffer);\n let len = bytes.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n};\nvar LongPoll = class {\n constructor(endPoint, protocols) {\n if (protocols && protocols.length === 2 && protocols[1].startsWith(AUTH_TOKEN_PREFIX)) {\n this.authToken = atob(protocols[1].slice(AUTH_TOKEN_PREFIX.length));\n }\n this.endPoint = null;\n this.token = null;\n this.skipHeartbeat = true;\n this.reqs = /* @__PURE__ */ new Set();\n this.awaitingBatchAck = false;\n this.currentBatch = null;\n this.currentBatchTimer = null;\n this.batchBuffer = [];\n this.onopen = function() {\n };\n this.onerror = function() {\n };\n this.onmessage = function() {\n };\n this.onclose = function() {\n };\n this.pollEndpoint = this.normalizeEndpoint(endPoint);\n this.readyState = SOCKET_STATES.connecting;\n setTimeout(() => this.poll(), 0);\n }\n normalizeEndpoint(endPoint) {\n return endPoint.replace(\"ws://\", \"http://\").replace(\"wss://\", \"https://\").replace(new RegExp(\"(.*)/\" + TRANSPORTS.websocket), \"$1/\" + TRANSPORTS.longpoll);\n }\n endpointURL() {\n return Ajax.appendParams(this.pollEndpoint, { token: this.token });\n }\n closeAndRetry(code, reason, wasClean) {\n this.close(code, reason, wasClean);\n this.readyState = SOCKET_STATES.connecting;\n }\n ontimeout() {\n this.onerror(\"timeout\");\n this.closeAndRetry(1005, \"timeout\", false);\n }\n isActive() {\n return this.readyState === SOCKET_STATES.open || this.readyState === SOCKET_STATES.connecting;\n }\n poll() {\n const headers = { \"Accept\": \"application/json\" };\n if (this.authToken) {\n headers[\"X-Phoenix-AuthToken\"] = this.authToken;\n }\n this.ajax(\"GET\", headers, null, () => this.ontimeout(), (resp) => {\n if (resp) {\n var { status, token, messages } = resp;\n if (status === 410 && this.token !== null) {\n this.onerror(410);\n this.closeAndRetry(3410, \"session_gone\", false);\n return;\n }\n this.token = token;\n } else {\n status = 0;\n }\n switch (status) {\n case 200:\n messages.forEach((msg) => {\n setTimeout(() => this.onmessage({ data: msg }), 0);\n });\n this.poll();\n break;\n case 204:\n this.poll();\n break;\n case 410:\n this.readyState = SOCKET_STATES.open;\n this.onopen({});\n this.poll();\n break;\n case 403:\n this.onerror(403);\n this.close(1008, \"forbidden\", false);\n break;\n case 0:\n case 500:\n this.onerror(500);\n this.closeAndRetry(1011, \"internal server error\", 500);\n break;\n default:\n throw new Error(`unhandled poll status ${status}`);\n }\n });\n }\n // we collect all pushes within the current event loop by\n // setTimeout 0, which optimizes back-to-back procedural\n // pushes against an empty buffer\n send(body) {\n if (typeof body !== \"string\") {\n body = arrayBufferToBase64(body);\n }\n if (this.currentBatch) {\n this.currentBatch.push(body);\n } else if (this.awaitingBatchAck) {\n this.batchBuffer.push(body);\n } else {\n this.currentBatch = [body];\n this.currentBatchTimer = setTimeout(() => {\n this.batchSend(this.currentBatch);\n this.currentBatch = null;\n }, 0);\n }\n }\n batchSend(messages) {\n this.awaitingBatchAck = true;\n this.ajax(\"POST\", { \"Content-Type\": \"application/x-ndjson\" }, messages.join(\"\\n\"), () => this.onerror(\"timeout\"), (resp) => {\n this.awaitingBatchAck = false;\n if (!resp || resp.status !== 200) {\n this.onerror(resp && resp.status);\n this.closeAndRetry(1011, \"internal server error\", false);\n } else if (this.batchBuffer.length > 0) {\n this.batchSend(this.batchBuffer);\n this.batchBuffer = [];\n }\n });\n }\n close(code, reason, wasClean) {\n for (let req of this.reqs) {\n req.abort();\n }\n this.readyState = SOCKET_STATES.closed;\n let opts = Object.assign({ code: 1e3, reason: void 0, wasClean: true }, { code, reason, wasClean });\n this.batchBuffer = [];\n clearTimeout(this.currentBatchTimer);\n this.currentBatchTimer = null;\n if (typeof CloseEvent !== \"undefined\") {\n this.onclose(new CloseEvent(\"close\", opts));\n } else {\n this.onclose(opts);\n }\n }\n ajax(method, headers, body, onCallerTimeout, callback) {\n let req;\n let ontimeout = () => {\n this.reqs.delete(req);\n onCallerTimeout();\n };\n req = Ajax.request(method, this.endpointURL(), headers, body, this.timeout, ontimeout, (resp) => {\n this.reqs.delete(req);\n if (this.isActive()) {\n callback(resp);\n }\n });\n this.reqs.add(req);\n }\n};\n\n// js/phoenix/presence.js\nvar Presence = class _Presence {\n /**\n * Initializes the Presence\n * @param {Channel} channel - The Channel\n * @param {PresenceOptions} [opts] - The options, for example `{events: {state: \"state\", diff: \"diff\"}}`\n */\n constructor(channel, opts = {}) {\n let events = opts.events || /** @type {PresenceEvents} */\n { state: \"presence_state\", diff: \"presence_diff\" };\n this.state = {};\n this.pendingDiffs = [];\n this.channel = channel;\n this.joinRef = null;\n this.caller = {\n onJoin: function() {\n },\n onLeave: function() {\n },\n onSync: function() {\n }\n };\n this.channel.on(events.state, (newState) => {\n let { onJoin, onLeave, onSync } = this.caller;\n this.joinRef = this.channel.joinRef();\n this.state = _Presence.syncState(this.state, newState, onJoin, onLeave);\n this.pendingDiffs.forEach((diff) => {\n this.state = _Presence.syncDiff(this.state, diff, onJoin, onLeave);\n });\n this.pendingDiffs = [];\n onSync();\n });\n this.channel.on(events.diff, (diff) => {\n let { onJoin, onLeave, onSync } = this.caller;\n if (this.inPendingSyncState()) {\n this.pendingDiffs.push(diff);\n } else {\n this.state = _Presence.syncDiff(this.state, diff, onJoin, onLeave);\n onSync();\n }\n });\n }\n /**\n * @param {PresenceOnJoin} callback\n */\n onJoin(callback) {\n this.caller.onJoin = callback;\n }\n /**\n * @param {PresenceOnLeave} callback\n */\n onLeave(callback) {\n this.caller.onLeave = callback;\n }\n /**\n * @param {PresenceOnSync} callback\n */\n onSync(callback) {\n this.caller.onSync = callback;\n }\n /**\n * Returns the array of presences, with selected metadata.\n *\n * @template [T=PresenceState]\n * @param {((key: string, obj: PresenceState) => T)} [by]\n *\n * @returns {T[]}\n */\n list(by) {\n return _Presence.list(this.state, by);\n }\n inPendingSyncState() {\n return !this.joinRef || this.joinRef !== this.channel.joinRef();\n }\n // lower-level public static API\n /**\n * Used to sync the list of presences on the server\n * with the client's state. An optional `onJoin` and `onLeave` callback can\n * be provided to react to changes in the client's local presences across\n * disconnects and reconnects with the server.\n *\n * @param {Record<string, PresenceState>} currentState\n * @param {Record<string, PresenceState>} newState\n * @param {PresenceOnJoin} onJoin\n * @param {PresenceOnLeave} onLeave\n *\n * @returns {Record<string, PresenceState>}\n */\n static syncState(currentState, newState, onJoin, onLeave) {\n let state = this.clone(currentState);\n let joins = {};\n let leaves = {};\n this.map(state, (key, presence) => {\n if (!newState[key]) {\n leaves[key] = presence;\n }\n });\n this.map(newState, (key, newPresence) => {\n let currentPresence = state[key];\n if (currentPresence) {\n let newRefs = newPresence.metas.map((m) => m.phx_ref);\n let curRefs = currentPresence.metas.map((m) => m.phx_ref);\n let joinedMetas = newPresence.metas.filter((m) => curRefs.indexOf(m.phx_ref) < 0);\n let leftMetas = currentPresence.metas.filter((m) => newRefs.indexOf(m.phx_ref) < 0);\n if (joinedMetas.length > 0) {\n joins[key] = newPresence;\n joins[key].metas = joinedMetas;\n }\n if (leftMetas.length > 0) {\n leaves[key] = this.clone(currentPresence);\n leaves[key].metas = leftMetas;\n }\n } else {\n joins[key] = newPresence;\n }\n });\n return this.syncDiff(state, { joins, leaves }, onJoin, onLeave);\n }\n /**\n *\n * Used to sync a diff of presence join and leave\n * events from the server, as they happen. Like `syncState`, `syncDiff`\n * accepts optional `onJoin` and `onLeave` callbacks to react to a user\n * joining or leaving from a device.\n *\n * @param {Record<string, PresenceState>} state\n * @param {PresenceDiff} diff\n * @param {PresenceOnJoin} onJoin\n * @param {PresenceOnLeave} onLeave\n *\n * @returns {Record<string, PresenceState>}\n */\n static syncDiff(state, diff, onJoin, onLeave) {\n let { joins, leaves } = this.clone(diff);\n if (!onJoin) {\n onJoin = function() {\n };\n }\n if (!onLeave) {\n onLeave = function() {\n };\n }\n this.map(joins, (key, newPresence) => {\n let currentPresence = state[key];\n state[key] = this.clone(newPresence);\n if (currentPresence) {\n let joinedRefs = state[key].metas.map((m) => m.phx_ref);\n let curMetas = currentPresence.metas.filter((m) => joinedRefs.indexOf(m.phx_ref) < 0);\n state[key].metas.unshift(...curMetas);\n }\n onJoin(key, currentPresence, newPresence);\n });\n this.map(leaves, (key, leftPresence) => {\n let currentPresence = state[key];\n if (!currentPresence) {\n return;\n }\n let refsToRemove = leftPresence.metas.map((m) => m.phx_ref);\n currentPresence.metas = currentPresence.metas.filter((p) => {\n return refsToRemove.indexOf(p.phx_ref) < 0;\n });\n onLeave(key, currentPresence, leftPresence);\n if (currentPresence.metas.length === 0) {\n delete state[key];\n }\n });\n return state;\n }\n /**\n * Returns the array of presences, with selected metadata.\n *\n * @template [T=PresenceState]\n * @param {Record<string, PresenceState>} presences\n * @param {((key: string, obj: PresenceState) => T)} [chooser]\n *\n * @returns {T[]}\n */\n static list(presences, chooser) {\n if (!chooser) {\n chooser = function(key, pres) {\n return pres;\n };\n }\n return this.map(presences, (key, presence) => {\n return chooser(key, presence);\n });\n }\n // private\n /**\n * @template T\n * @param {Record<string, PresenceState>} obj\n * @param {(key: string, obj: PresenceState) => T} func\n */\n static map(obj, func) {\n return Object.getOwnPropertyNames(obj).map((key) => func(key, obj[key]));\n }\n /**\n * @template T\n * @param {T} obj\n * @returns {T}\n */\n static clone(obj) {\n return JSON.parse(JSON.stringify(obj));\n }\n};\n\n// js/phoenix/serializer.js\nvar serializer_default = {\n HEADER_LENGTH: 1,\n META_LENGTH: 4,\n KINDS: { push: 0, reply: 1, broadcast: 2 },\n /**\n * @template T\n * @param {Message<Record<string, any>>} msg\n * @param {(msg: ArrayBuffer | string) => T} callback\n * @returns {T}\n */\n encode(msg, callback) {\n if (msg.payload.constructor === ArrayBuffer) {\n return callback(this.binaryEncode(msg));\n } else {\n let payload = [msg.join_ref, msg.ref, msg.topic, msg.event, msg.payload];\n return callback(JSON.stringify(payload));\n }\n },\n /**\n * @template T\n * @param {ArrayBuffer | string} rawPayload\n * @param {(msg: Message<unknown>) => T} callback\n * @returns {T}\n */\n decode(rawPayload, callback) {\n if (rawPayload.constructor === ArrayBuffer) {\n return callback(this.binaryDecode(rawPayload));\n } else {\n let [join_ref, ref, topic, event, payload] = JSON.parse(rawPayload);\n return callback({ join_ref, ref, topic, event, payload });\n }\n },\n /** @private */\n binaryEncode(message) {\n let { join_ref, ref, event, topic, payload } = message;\n let metaLength = this.META_LENGTH + join_ref.length + ref.length + topic.length + event.length;\n let header = new ArrayBuffer(this.HEADER_LENGTH + metaLength);\n let view = new DataView(header);\n let offset = 0;\n view.setUint8(offset++, this.KINDS.push);\n view.setUint8(offset++, join_ref.length);\n view.setUint8(offset++, ref.length);\n view.setUint8(offset++, topic.length);\n view.setUint8(offset++, event.length);\n Array.from(join_ref, (char) => view.setUint8(offset++, char.charCodeAt(0)));\n Array.from(ref, (char) => view.setUint8(offset++, char.charCodeAt(0)));\n Array.from(topic, (char) => view.setUint8(offset++, char.charCodeAt(0)));\n Array.from(event, (char) => view.setUint8(offset++, char.charCodeAt(0)));\n var combined = new Uint8Array(header.byteLength + payload.byteLength);\n combined.set(new Uint8Array(header), 0);\n combined.set(new Uint8Array(payload), header.byteLength);\n return combined.buffer;\n },\n /**\n * @private\n */\n binaryDecode(buffer) {\n let view = new DataView(buffer);\n let kind = view.getUint8(0);\n let decoder = new TextDecoder();\n switch (kind) {\n case this.KINDS.push:\n return this.decodePush(buffer, view, decoder);\n case this.KINDS.reply:\n return this.decodeReply(buffer, view, decoder);\n case this.KINDS.broadcast:\n return this.decodeBroadcast(buffer, view, decoder);\n }\n },\n /** @private */\n decodePush(buffer, view, decoder) {\n let joinRefSize = view.getUint8(1);\n let topicSize = view.getUint8(2);\n let eventSize = view.getUint8(3);\n let offset = this.HEADER_LENGTH + this.META_LENGTH - 1;\n let joinRef = decoder.decode(buffer.slice(offset, offset + joinRefSize));\n offset = offset + joinRefSize;\n let topic = decoder.decode(buffer.slice(offset, offset + topicSize));\n offset = offset + topicSize;\n let event = decoder.decode(buffer.slice(offset, offset + eventSize));\n offset = offset + eventSize;\n let data = buffer.slice(offset, buffer.byteLength);\n return { join_ref: joinRef, ref: null, topic, event, payload: data };\n },\n /** @private */\n decodeReply(buffer, view, decoder) {\n let joinRefSize = view.getUint8(1);\n let refSize = view.getUint8(2);\n let topicSize = view.getUint8(3);\n let eventSize = view.getUint8(4);\n let offset = this.HEADER_LENGTH + this.META_LENGTH;\n let joinRef = decoder.decode(buffer.slice(offset, offset + joinRefSize));\n offset = offset + joinRefSize;\n let ref = decoder.decode(buffer.slice(offset, offset + refSize));\n offset = offset + refSize;\n let topic = decoder.decode(buffer.slice(offset, offset + topicSize));\n offset = offset + topicSize;\n let event = decoder.decode(buffer.slice(offset, offset + eventSize));\n offset = offset + eventSize;\n let data = buffer.slice(offset, buffer.byteLength);\n let payload = { status: event, response: data };\n return { join_ref: joinRef, ref, topic, event: CHANNEL_EVENTS.reply, payload };\n },\n /** @private */\n decodeBroadcast(buffer, view, decoder) {\n let topicSize = view.getUint8(1);\n let eventSize = view.getUint8(2);\n let offset = this.HEADER_LENGTH + 2;\n let topic = decoder.decode(buffer.slice(offset, offset + topicSize));\n offset = offset + topicSize;\n let event = decoder.decode(buffer.slice(offset, offset + eventSize));\n offset = offset + eventSize;\n let data = buffer.slice(offset, buffer.byteLength);\n return { join_ref: null, ref: null, topic, event, payload: data };\n }\n};\n\n// js/phoenix/socket.js\nvar Socket = class {\n /** Initializes the Socket *\n *\n * For IE8 support use an ES5-shim (https://github.com/es-shims/es5-shim)\n *\n * @constructor\n * @param {string} endPoint - The string WebSocket endpoint, ie, `\"ws://example.com/socket\"`,\n * `\"wss://example.com\"`\n * `\"/socket\"` (inherited host & protocol)\n * @param {SocketOptions} [opts] - Optional configuration\n */\n constructor(endPoint, opts = {}) {\n this.stateChangeCallbacks = { open: [], close: [], error: [], message: [] };\n this.channels = [];\n this.sendBuffer = [];\n this.ref = 0;\n this.fallbackRef = null;\n this.timeout = opts.timeout || DEFAULT_TIMEOUT;\n this.transport = opts.transport || global.WebSocket || LongPoll;\n this.conn = void 0;\n this.primaryPassedHealthCheck = false;\n this.longPollFallbackMs = opts.longPollFallbackMs;\n this.fallbackTimer = null;\n this.sessionStore = opts.sessionStorage || global && global.sessionStorage;\n this.establishedConnections = 0;\n this.defaultEncoder = serializer_default.encode.bind(serializer_default);\n this.defaultDecoder = serializer_default.decode.bind(serializer_default);\n this.closeWasClean = true;\n this.disconnecting = false;\n this.binaryType = opts.binaryType || \"arraybuffer\";\n this.connectClock = 1;\n this.pageHidden = false;\n this.encode = void 0;\n this.decode = void 0;\n if (this.transport !== LongPoll) {\n this.encode = opts.encode || this.defaultEncoder;\n this.decode = opts.decode || this.defaultDecoder;\n } else {\n this.encode = this.defaultEncoder;\n this.decode = this.defaultDecoder;\n }\n let awaitingConnectionOnPageShow = null;\n if (phxWindow && phxWindow.addEventListener) {\n phxWindow.addEventListener(\"pagehide\", (_e) => {\n if (this.conn) {\n this.disconnect();\n awaitingConnectionOnPageShow = this.connectClock;\n }\n });\n phxWindow.addEventListener(\"pageshow\", (_e) => {\n if (awaitingConnectionOnPageShow === this.connectClock) {\n awaitingConnectionOnPageShow = null;\n this.connect();\n }\n });\n phxWindow.addEventListener(\"visibilitychange\", () => {\n if (document.visibilityState === \"hidden\") {\n this.pageHidden = true;\n } else {\n this.pageHidden = false;\n if (!this.isConnected() && !this.closeWasClean) {\n this.teardown(() => this.connect());\n }\n }\n });\n }\n this.heartbeatIntervalMs = opts.heartbeatIntervalMs || 3e4;\n this.autoSendHeartbeat = opts.autoSendHeartbeat ?? true;\n this.heartbeatCallback = opts.heartbeatCallback ?? (() => {\n });\n this.rejoinAfterMs = (tries) => {\n if (opts.rejoinAfterMs) {\n return opts.rejoinAfterMs(tries);\n } else {\n return [1e3, 2e3, 5e3][tries - 1] || 1e4;\n }\n };\n this.reconnectAfterMs = (tries) => {\n if (opts.reconnectAfterMs) {\n return opts.reconnectAfterMs(tries);\n } else {\n return [10, 50, 100, 150, 200, 250, 500, 1e3, 2e3][tries - 1] || 5e3;\n }\n };\n this.logger = opts.logger || null;\n if (!this.logger && opts.debug) {\n this.logger = (kind, msg, data) => {\n console.log(`${kind}: ${msg}`, data);\n };\n }\n this.longpollerTimeout = opts.longpollerTimeout || 2e4;\n this.params = closure(opts.params || {});\n this.endPoint = `${endPoint}/${TRANSPORTS.websocket}`;\n this.vsn = opts.vsn || DEFAULT_VSN;\n this.heartbeatTimeoutTimer = null;\n this.heartbeatTimer = null;\n this.heartbeatSentAt = null;\n this.pendingHeartbeatRef = null;\n this.reconnectTimer = new Timer(() => {\n if (this.pageHidden) {\n this.log(\"Not reconnecting as page is hidden!\");\n this.teardown();\n return;\n }\n this.teardown(async () => {\n if (opts.beforeReconnect) await opts.beforeReconnect();\n this.connect();\n });\n }, this.reconnectAfterMs);\n this.authToken = opts.authToken;\n }\n /**\n * Returns the LongPoll transport reference\n */\n getLongPollTransport() {\n return LongPoll;\n }\n /**\n * Disconnects and replaces the active transport\n *\n * @param {SocketTransport} newTransport - The new transport class to instantiate\n *\n */\n replaceTransport(newTransport) {\n this.connectClock++;\n this.closeWasClean = true;\n clearTimeout(this.fallbackTimer);\n this.reconnectTimer.reset();\n if (this.conn) {\n this.conn.close();\n this.conn = null;\n }\n this.transport = newTransport;\n }\n /**\n * Returns the socket protocol\n *\n * @returns {\"wss\" | \"ws\"}\n */\n protocol() {\n return location.protocol.match(/^https/) ? \"wss\" : \"ws\";\n }\n /**\n * The fully qualified socket url\n *\n * @returns {string}\n */\n endPointURL() {\n let uri = Ajax.appendParams(\n Ajax.appendParams(this.endPoint, this.params()),\n { vsn: this.vsn }\n );\n if (uri.charAt(0) !== \"/\") {\n return uri;\n }\n if (uri.charAt(1) === \"/\") {\n return `${this.protocol()}:${uri}`;\n }\n return `${this.protocol()}://${location.host}${uri}`;\n }\n /**\n * Disconnects the socket\n *\n * See https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent#Status_codes for valid status codes.\n *\n * @param {() => void} [callback] - Optional callback which is called after socket is disconnected.\n * @param {number} [code] - A status code for disconnection (Optional).\n * @param {string} [reason] - A textual description of the reason to disconnect. (Optional)\n */\n disconnect(callback, code, reason) {\n this.connectClock++;\n this.disconnecting = true;\n this.closeWasClean = true;\n clearTimeout(this.fallbackTimer);\n this.reconnectTimer.reset();\n this.teardown(() => {\n this.disconnecting = false;\n callback && callback();\n }, code, reason);\n }\n /**\n * @param {Params} [params] - [DEPRECATED] The params to send when connecting, for example `{user_id: userToken}`\n *\n * Passing params to connect is deprecated; pass them in the Socket constructor instead:\n * `new Socket(\"/socket\", {params: {user_id: userToken}})`.\n */\n connect(params) {\n if (params) {\n console && console.log(\"passing params to connect is deprecated. Instead pass :params to the Socket constructor\");\n this.params = closure(params);\n }\n if (this.conn && !this.disconnecting) {\n return;\n }\n if (this.longPollFallbackMs && this.transport !== LongPoll) {\n this.connectWithFallback(LongPoll, this.longPollFallbackMs);\n } else {\n this.transportConnect();\n }\n }\n /**\n * Logs the message. Override `this.logger` for specialized logging. noops by default\n * @param {string} kind\n * @param {string} msg\n * @param {Object} data\n */\n log(kind, msg, data) {\n this.logger && this.logger(kind, msg, data);\n }\n /**\n * Returns true if a logger has been set on this socket.\n */\n hasLogger() {\n return this.logger !== null;\n }\n /**\n * Registers callbacks for connection open events\n *\n * @example socket.onOpen(function(){ console.info(\"the socket was opened\") })\n *\n * @param {SocketOnOpen} callback\n */\n onOpen(callback) {\n let ref = this.makeRef();\n this.stateChangeCallbacks.open.push([ref, callback]);\n return ref;\n }\n /**\n * Registers callbacks for connection close events\n * @param {SocketOnClose} callback\n * @returns {string}\n */\n onClose(callback) {\n let ref = this.makeRef();\n this.stateChangeCallbacks.close.push([ref, callback]);\n return ref;\n }\n /**\n * Registers callbacks for connection error events\n *\n * @example socket.onError(function(error){ alert(\"An error occurred\") })\n *\n * @param {SocketOnError} callback\n * @returns {string}\n */\n onError(callback) {\n let ref = this.makeRef();\n this.stateChangeCallbacks.error.push([ref, callback]);\n return ref;\n }\n /**\n * Registers callbacks for connection message events\n * @param {SocketOnMessage} callback\n * @returns {string}\n */\n onMessage(callback) {\n let ref = this.makeRef();\n this.stateChangeCallbacks.message.push([ref, callback]);\n return ref;\n }\n /**\n * Sets a callback that receives lifecycle events for internal heartbeat messages.\n * Useful for instrumenting connection health (e.g. sent/ok/timeout/disconnected).\n * @param {HeartbeatCallback} callback\n */\n onHeartbeat(callback) {\n this.heartbeatCallback = callback;\n }\n /**\n * Pings the server and invokes the callback with the RTT in milliseconds\n * @param {(timeDelta: number) => void} callback\n *\n * Returns true if the ping was pushed or false if unable to be pushed.\n */\n ping(callback) {\n if (!this.isConnected()) {\n return false;\n }\n let ref = this.makeRef();\n let startTime = Date.now();\n this.push({ topic: \"phoenix\", event: \"heartbeat\", payload: {}, ref });\n let onMsgRef = this.onMessage((msg) => {\n if (msg.ref === ref) {\n this.off([onMsgRef]);\n callback(Date.now() - startTime);\n }\n });\n return true;\n }\n /**\n * @private\n *\n * @param {Function}\n */\n transportName(transport) {\n switch (transport) {\n case LongPoll:\n return \"LongPoll\";\n default:\n return transport.name;\n }\n }\n /**\n * @private\n */\n transportConnect() {\n this.connectClock++;\n this.closeWasClean = false;\n let protocols = void 0;\n if (this.authToken) {\n protocols = [\"phoenix\", `${AUTH_TOKEN_PREFIX}${btoa(this.authToken).replace(/=/g, \"\")}`];\n }\n this.conn = new this.transport(this.endPointURL(), protocols);\n this.conn.binaryType = this.binaryType;\n this.conn.timeout = this.longpollerTimeout;\n this.conn.onopen = () => this.onConnOpen();\n this.conn.onerror = (error) => this.onConnError(error);\n this.conn.onmessage = (event) => this.onConnMessage(event);\n this.conn.onclose = (event) => this.onConnClose(event);\n }\n getSession(key) {\n return this.sessionStore && this.sessionStore.getItem(key);\n }\n storeSession(key, val) {\n this.sessionStore && this.sessionStore.setItem(key, val);\n }\n connectWithFallback(fallbackTransport, fallbackThreshold = 2500) {\n clearTimeout(this.fallbackTimer);\n let established = false;\n let primaryTransport = true;\n let openRef, errorRef;\n let fallbackTransportName = this.transportName(fallbackTransport);\n let fallback = (reason) => {\n this.log(\"transport\", `falling back to ${fallbackTransportName}...`, reason);\n this.off([openRef, errorRef]);\n primaryTransport = false;\n this.replaceTransport(fallbackTransport);\n this.transportConnect();\n };\n if (this.getSession(`phx:fallback:${fallbackTransportName}`)) {\n return fallback(\"memorized\");\n }\n this.fallbackTimer = setTimeout(fallback, fallbackThreshold);\n errorRef = this.onError((reason) => {\n this.log(\"transport\", \"error\", reason);\n if (primaryTransport && !established) {\n clearTimeout(this.fallbackTimer);\n fallback(reason);\n }\n });\n if (this.fallbackRef) {\n this.off([this.fallbackRef]);\n }\n this.fallbackRef = this.onOpen(() => {\n established = true;\n if (!primaryTransport) {\n let fallbackTransportName2 = this.transportName(fallbackTransport);\n if (!this.primaryPassedHealthCheck) {\n this.storeSession(`phx:fallback:${fallbackTransportName2}`, \"true\");\n }\n return this.log(\"transport\", `established ${fallbackTransportName2} fallback`);\n }\n clearTimeout(this.fallbackTimer);\n this.fallbackTimer = setTimeout(fallback, fallbackThreshold);\n this.ping((rtt) => {\n this.log(\"transport\", \"connected to primary after\", rtt);\n this.primaryPassedHealthCheck = true;\n clearTimeout(this.fallbackTimer);\n });\n });\n this.transportConnect();\n }\n clearHeartbeats() {\n clearTimeout(this.heartbeatTimer);\n clearTimeout(this.heartbeatTimeoutTimer);\n }\n onConnOpen() {\n if (this.hasLogger()) this.log(\"transport\", `connected to ${this.endPointURL()}`);\n this.closeWasClean = false;\n this.disconnecting = false;\n this.establishedConnections++;\n this.flushSendBuffer();\n this.reconnectTimer.reset();\n if (this.autoSendHeartbeat) {\n this.resetHeartbeat();\n }\n this.triggerStateCallbacks(\"open\");\n }\n /**\n * @private\n */\n heartbeatTimeout() {\n if (this.pendingHeartbeatRef) {\n this.pendingHeartbeatRef = null;\n this.heartbeatSentAt = null;\n if (this.hasLogger()) {\n this.log(\"transport\", \"heartbeat timeout. Attempting to re-establish connection\");\n }\n try {\n this.heartbeatCallback(\"timeout\");\n } catch (e) {\n this.log(\"error\", \"error in heartbeat callback\", e);\n }\n this.triggerChanError(new Error(\"heartbeat timeout\"));\n this.closeWasClean = false;\n this.teardown(() => this.reconnectTimer.scheduleTimeout(), WS_CLOSE_NORMAL, \"heartbeat timeout\");\n }\n }\n resetHeartbeat() {\n if (this.conn && this.conn.skipHeartbeat) {\n return;\n }\n this.pendingHeartbeatRef = null;\n this.clearHeartbeats();\n this.heartbeatTimer = setTimeout(() => this.sendHeartbeat(), this.heartbeatIntervalMs);\n }\n teardown(callback, code, reason) {\n if (!this.conn) {\n return callback && callback();\n }\n const connToClose = this.conn;\n this.waitForBufferDone(connToClose, () => {\n if (code) {\n connToClose.close(code, reason || \"\");\n } else {\n connToClose.close();\n }\n this.waitForSocketClosed(connToClose, () => {\n if (this.conn === connToClose) {\n this.conn.onopen = function() {\n };\n this.conn.onerror = function() {\n };\n this.conn.onmessage = function() {\n };\n this.conn.onclose = function() {\n };\n this.conn = null;\n }\n callback && callback();\n });\n });\n }\n waitForBufferDone(conn, callback, tries = 1) {\n if (tries === 5 || !conn.bufferedAmount) {\n callback();\n return;\n }\n setTimeout(() => {\n this.waitForBufferDone(conn, callback, tries + 1);\n }, 150 * tries);\n }\n waitForSocketClosed(conn, callback, tries = 1) {\n if (tries === 5 || conn.readyState === SOCKET_STATES.closed) {\n callback();\n return;\n }\n setTimeout(() => {\n this.waitForSocketClosed(conn, callback, tries + 1);\n }, 150 * tries);\n }\n /**\n * @param {CloseEvent} event\n */\n onConnClose(event) {\n if (this.conn) this.conn.onclose = () => {\n };\n if (this.hasLogger()) this.log(\"transport\", \"close\", event);\n this.triggerChanError(event);\n this.clearHeartbeats();\n if (!this.closeWasClean) {\n this.reconnectTimer.scheduleTimeout();\n }\n this.triggerStateCallbacks(\"close\", event);\n }\n /**\n * @private\n * @param {Event} error\n */\n onConnError(error) {\n if (this.hasLogger()) this.log(\"transport\", \"error\", error);\n let transportBefore = this.transport;\n let establishedBefore = this.establishedConnections;\n this.triggerStateCallbacks(\"error\", error, transportBefore, establishedBefore);\n if (transportBefore === this.transport || establishedBefore > 0) {\n this.triggerChanError(error);\n }\n }\n /**\n * @private\n * @param {unknown} [reason] underlying close/error event forwarded to channel error listeners\n */\n triggerChanError(reason) {\n this.channels.forEach((channel) => {\n if (!(channel.isErrored() || channel.isLeaving() || channel.isClosed())) {\n channel.trigger(CHANNEL_EVENTS.error, reason);\n }\n });\n }\n /**\n * @returns {string}\n */\n connectionState() {\n switch (this.conn && this.conn.readyState) {\n case SOCKET_STATES.connecting:\n return \"connecting\";\n case SOCKET_STATES.open:\n return \"open\";\n case SOCKET_STATES.closing:\n return \"closing\";\n default:\n return \"closed\";\n }\n }\n /**\n * @returns {boolean}\n */\n isConnected() {\n return this.connectionState() === \"open\";\n }\n /**\n *\n * @param {Channel} channel\n */\n remove(channel) {\n this.off(channel.stateChangeRefs);\n this.channels = this.channels.filter((c) => c !== channel);\n }\n /**\n * Removes `onOpen`, `onClose`, `onError,` and `onMessage` registrations.\n *\n * @param {string[]} refs - list of refs returned by calls to\n * `onOpen`, `onClose`, `onError,` and `onMessage`\n */\n off(refs) {\n for (let key in this.stateChangeCallbacks) {\n this.stateChangeCallbacks[key] = this.stateChangeCallbacks[key].filter(([ref]) => {\n return refs.indexOf(ref) === -1;\n });\n }\n }\n /**\n * Initiates a new channel for the given topic\n *\n * @param {string} topic\n * @param {Params | (() => Params)} [chanParams]- Parameters for the channel\n * @returns {Channel}\n */\n channel(topic, chanParams = {}) {\n let chan = new Channel(topic, chanParams, this);\n this.channels.push(chan);\n return chan;\n }\n /**\n * @param {Message<Record<string, any>>} data\n */\n push(data) {\n if (this.hasLogger()) {\n let { topic, event, payload, ref, join_ref } = data;\n this.log(\"push\", `${topic} ${event} (${join_ref}, ${ref})`, payload);\n }\n if (this.isConnected()) {\n this.encode(data, (result) => this.conn.send(result));\n } else {\n this.sendBuffer.push(() => this.encode(data, (result) => this.conn.send(result)));\n }\n }\n /**\n * Return the next message ref, accounting for overflows\n * @returns {string}\n */\n makeRef() {\n let newRef = this.ref + 1;\n if (newRef === this.ref) {\n this.ref = 0;\n } else {\n this.ref = newRef;\n }\n return this.ref.toString();\n }\n sendHeartbeat() {\n if (!this.isConnected()) {\n try {\n this.heartbeatCallback(\"disconnected\");\n } catch (e) {\n this.log(\"error\", \"error in heartbeat callback\", e);\n }\n return;\n }\n if (this.pendingHeartbeatRef) {\n this.heartbeatTimeout();\n return;\n }\n this.pendingHeartbeatRef = this.makeRef();\n this.heartbeatSentAt = Date.now();\n this.push({ topic: \"phoenix\", event: \"heartbeat\", payload: {}, ref: this.pendingHeartbeatRef });\n try {\n this.heartbeatCallback(\"sent\");\n } catch (e) {\n this.log(\"error\", \"error in heartbeat callback\", e);\n }\n this.heartbeatTimeoutTimer = setTimeout(() => this.heartbeatTimeout(), this.heartbeatIntervalMs);\n }\n flushSendBuffer() {\n if (this.isConnected() && this.sendBuffer.length > 0) {\n this.sendBuffer.forEach((callback) => callback());\n this.sendBuffer = [];\n }\n }\n /**\n * @param {MessageEvent<any>} rawMessage\n */\n onConnMessage(rawMessage) {\n this.decode(rawMessage.data, (msg) => {\n let { topic, event, payload, ref, join_ref } = msg;\n if (ref && ref === this.pendingHeartbeatRef) {\n const latency = this.heartbeatSentAt ? Date.now() - this.heartbeatSentAt : void 0;\n this.clearHeartbeats();\n try {\n this.heartbeatCallback(payload.status === \"ok\" ? \"ok\" : \"error\", latency);\n } catch (e) {\n this.log(\"error\", \"error in heartbeat callback\", e);\n }\n this.pendingHeartbeatRef = null;\n this.heartbeatSentAt = null;\n if (this.autoSendHeartbeat) {\n this.heartbeatTimer = setTimeout(() => this.sendHeartbeat(), this.heartbeatIntervalMs);\n }\n }\n if (this.hasLogger()) this.log(\"receive\", `${payload.status || \"\"} ${topic} ${event} ${ref && \"(\" + ref + \")\" || \"\"}`.trim(), payload);\n for (let i = 0; i < this.channels.length; i++) {\n const channel = this.channels[i];\n if (!channel.isMember(topic, event, payload, join_ref)) {\n continue;\n }\n channel.trigger(event, payload, ref, join_ref);\n }\n this.triggerStateCallbacks(\"message\", msg);\n });\n }\n /**\n * @private\n * @template {keyof SocketStateChangeCallbacks} K\n * @param {K} event\n * @param {...Parameters<SocketStateChangeCallbacks[K][number][1]>} args\n * @returns {void}\n */\n triggerStateCallbacks(event, ...args) {\n try {\n this.stateChangeCallbacks[event].forEach(([_, callback]) => {\n try {\n callback(...args);\n } catch (e) {\n this.log(\"error\", `error in ${event} callback`, e);\n }\n });\n } catch (e) {\n this.log(\"error\", `error triggering ${event} callbacks`, e);\n }\n }\n leaveOpenTopic(topic) {\n let dupChannel = this.channels.find((c) => c.topic === topic && (c.isJoined() || c.isJoining()));\n if (dupChannel) {\n if (this.hasLogger()) this.log(\"transport\", `leaving duplicate topic \"${topic}\"`);\n dupChannel.leave();\n }\n }\n};\n\n//# sourceMappingURL=phoenix.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcGhvZW5peC9wcml2L3N0YXRpYy9waG9lbml4Lm1qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLElBQUk7QUFDSjtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFNBQVM7QUFDdEIsYUFBYSxjQUFjO0FBQzNCLGFBQWEsK0JBQStCLHFDQUFxQyxhQUFhO0FBQzlGLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEseUJBQXlCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsa0JBQWtCO0FB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LE1BQU07QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFTRTtBQUNGIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9waG9lbml4L3ByaXYvc3RhdGljL3Bob2VuaXgubWpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGpzL3Bob2VuaXgvdXRpbHMuanNcbnZhciBjbG9zdXJlID0gKHZhbHVlKSA9PiB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHJldHVybiAoXG4gICAgICAvKiogQHR5cGUgeygpID0+IFR9ICovXG4gICAgICB2YWx1ZVxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgbGV0IGNsb3N1cmUyID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICByZXR1cm4gY2xvc3VyZTI7XG4gIH1cbn07XG5cbi8vIGpzL3Bob2VuaXgvY29uc3RhbnRzLmpzXG52YXIgZ2xvYmFsU2VsZiA9IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGw7XG52YXIgcGh4V2luZG93ID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IG51bGw7XG52YXIgZ2xvYmFsID0gZ2xvYmFsU2VsZiB8fCBwaHhXaW5kb3cgfHwgZ2xvYmFsVGhpcztcbnZhciBERUZBVUxUX1ZTTiA9IFwiMi4wLjBcIjtcbnZhciBERUZBVUxUX1RJTUVPVVQgPSAxZTQ7XG52YXIgV1NfQ0xPU0VfTk9STUFMID0gMWUzO1xudmFyIFNPQ0tFVF9TVEFURVMgPSAoXG4gIC8qKiBAdHlwZSB7Y29uc3R9ICovXG4gIHsgY29ubmVjdGluZzogMCwgb3BlbjogMSwgY2xvc2luZzogMiwgY2xvc2VkOiAzIH1cbik7XG52YXIgQ0hBTk5FTF9TVEFURVMgPSAoXG4gIC8qKiBAdHlwZSB7Y29uc3R9ICovXG4gIHtcbiAgICBjbG9zZWQ6IFwiY2xvc2VkXCIsXG4gICAgZXJyb3JlZDogXCJlcnJvcmVkXCIsXG4gICAgam9pbmVkOiBcImpvaW5lZFwiLFxuICAgIGpvaW5pbmc6IFwiam9pbmluZ1wiLFxuICAgIGxlYXZpbmc6IFwibGVhdmluZ1wiXG4gIH1cbik7XG52YXIgQ0hBTk5FTF9FVkVOVFMgPSAoXG4gIC8qKiBAdHlwZSB7Y29uc3R9ICovXG4gIHtcbiAgICBjbG9zZTogXCJwaHhfY2xvc2VcIixcbiAgICBlcnJvcjogXCJwaHhfZXJyb3JcIixcbiAgICBqb2luOiBcInBoeF9qb2luXCIsXG4gICAgcmVwbHk6IFwicGh4X3JlcGx5XCIsXG4gICAgbGVhdmU6IFwicGh4X2xlYXZlXCJcbiAgfVxuKTtcbnZhciBUUkFOU1BPUlRTID0gKFxuICAvKiogQHR5cGUge2NvbnN0fSAqL1xuICB7XG4gICAgbG9uZ3BvbGw6IFwibG9uZ3BvbGxcIixcbiAgICB3ZWJzb2NrZXQ6IFwid2Vic29ja2V0XCJcbiAgfVxuKTtcbnZhciBYSFJfU1RBVEVTID0gKFxuICAvKiogQHR5cGUge2NvbnN0fSAqL1xuICB7XG4gICAgY29tcGxldGU6IDRcbiAgfVxuKTtcbnZhciBBVVRIX1RPS0VOX1BSRUZJWCA9IFwiYmFzZTY0dXJsLmJlYXJlci5waHguXCI7XG5cbi8vIGpzL3Bob2VuaXgvcHVzaC5qc1xudmFyIFB1c2ggPSBjbGFzcyB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgUHVzaFxuICAgKiBAcGFyYW0ge0NoYW5uZWx9IGNoYW5uZWwgLSBUaGUgQ2hhbm5lbFxuICAgKiBAcGFyYW0ge0NoYW5uZWxFdmVudH0gZXZlbnQgLSBUaGUgZXZlbnQsIGZvciBleGFtcGxlIGBcInBoeF9qb2luXCJgXG4gICAqIEBwYXJhbSB7KCkgPT4gUmVjb3JkPHN0cmluZywgdW5rbm93bj59IHBheWxvYWQgLSBUaGUgcGF5bG9hZCwgZm9yIGV4YW1wbGUgYHt1c2VyX2lkOiAxMjN9YFxuICAgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCAtIFRoZSBwdXNoIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXG4gICAqL1xuICBjb25zdHJ1Y3RvcihjaGFubmVsLCBldmVudCwgcGF5bG9hZCwgdGltZW91dCkge1xuICAgIHRoaXMuY2hhbm5lbCA9IGNoYW5uZWw7XG4gICAgdGhpcy5ldmVudCA9IGV2ZW50O1xuICAgIHRoaXMucGF5bG9hZCA9IHBheWxvYWQgfHwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfTtcbiAgICB0aGlzLnJlY2VpdmVkUmVzcCA9IG51bGw7XG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcbiAgICB0aGlzLnRpbWVvdXRUaW1lciA9IG51bGw7XG4gICAgdGhpcy5yZWNIb29rcyA9IFtdO1xuICAgIHRoaXMuc2VudCA9IGZhbHNlO1xuICAgIHRoaXMucmVmID0gdm9pZCAwO1xuICB9XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuICAgKi9cbiAgcmVzZW5kKHRpbWVvdXQpIHtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0O1xuICAgIHRoaXMucmVzZXQoKTtcbiAgICB0aGlzLnNlbmQoKTtcbiAgfVxuICAvKipcbiAgICpcbiAgICovXG4gIHNlbmQoKSB7XG4gICAgaWYgKHRoaXMuaGFzUmVjZWl2ZWQoXCJ0aW1lb3V0XCIpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUaW1lb3V0KCk7XG4gICAgdGhpcy5zZW50ID0gdHJ1ZTtcbiAgICB0aGlzLmNoYW5uZWwuc29ja2V0LnB1c2goe1xuICAgICAgdG9waWM6IHRoaXMuY2hhbm5lbC50b3BpYyxcbiAgICAgIGV2ZW50OiB0aGlzLmV2ZW50LFxuICAgICAgcGF5bG9hZDogdGhpcy5wYXlsb2FkKCksXG4gICAgICByZWY6IHRoaXMucmVmLFxuICAgICAgam9pbl9yZWY6IHRoaXMuY2hhbm5lbC5qb2luUmVmKClcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0YXR1c1xuICAgKiBAcGFyYW0geyhyZXNwb25zZTogYW55KSA9PiB2b2lkfSBjYWxsYmFja1xuICAgKi9cbiAgcmVjZWl2ZShzdGF0dXMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKHRoaXMuaGFzUmVjZWl2ZWQoc3RhdHVzKSkge1xuICAgICAgY2FsbGJhY2sodGhpcy5yZWNlaXZlZFJlc3AucmVzcG9uc2UpO1xuICAgIH1cbiAgICB0aGlzLnJlY0hvb2tzLnB1c2goeyBzdGF0dXMsIGNhbGxiYWNrIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHJlc2V0KCkge1xuICAgIHRoaXMuY2FuY2VsUmVmRXZlbnQoKTtcbiAgICB0aGlzLnJlZiA9IG51bGw7XG4gICAgdGhpcy5yZWZFdmVudCA9IG51bGw7XG4gICAgdGhpcy5yZWNlaXZlZFJlc3AgPSBudWxsO1xuICAgIHRoaXMuc2VudCA9IGZhbHNlO1xuICB9XG4gIGRlc3Ryb3koKSB7XG4gICAgdGhpcy5jYW5jZWxSZWZFdmVudCgpO1xuICAgIHRoaXMuY2FuY2VsVGltZW91dCgpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbWF0Y2hSZWNlaXZlKHsgc3RhdHVzLCByZXNwb25zZSwgX3JlZiB9KSB7XG4gICAgdGhpcy5yZWNIb29rcy5maWx0ZXIoKGgpID0+IGguc3RhdHVzID09PSBzdGF0dXMpLmZvckVhY2goKGgpID0+IGguY2FsbGJhY2socmVzcG9uc2UpKTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNhbmNlbFJlZkV2ZW50KCkge1xuICAgIGlmICghdGhpcy5yZWZFdmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmNoYW5uZWwub2ZmKHRoaXMucmVmRXZlbnQpO1xuICB9XG4gIGNhbmNlbFRpbWVvdXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFRpbWVyKTtcbiAgICB0aGlzLnRpbWVvdXRUaW1lciA9IG51bGw7XG4gIH1cbiAgc3RhcnRUaW1lb3V0KCkge1xuICAgIGlmICh0aGlzLnRpbWVvdXRUaW1lcikge1xuICAgICAgdGhpcy5jYW5jZWxUaW1lb3V0KCk7XG4gICAgfVxuICAgIHRoaXMucmVmID0gdGhpcy5jaGFubmVsLnNvY2tldC5tYWtlUmVmKCk7XG4gICAgdGhpcy5yZWZFdmVudCA9IHRoaXMuY2hhbm5lbC5yZXBseUV2ZW50TmFtZSh0aGlzLnJlZik7XG4gICAgdGhpcy5jaGFubmVsLm9uKHRoaXMucmVmRXZlbnQsIChwYXlsb2FkKSA9PiB7XG4gICAgICB0aGlzLmNhbmNlbFJlZkV2ZW50KCk7XG4gICAgICB0aGlzLmNhbmNlbFRpbWVvdXQoKTtcbiAgICAgIHRoaXMucmVjZWl2ZWRSZXNwID0gcGF5bG9hZDtcbiAgICAgIHRoaXMubWF0Y2hSZWNlaXZlKHBheWxvYWQpO1xuICAgIH0pO1xuICAgIHRoaXMudGltZW91dFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXIoXCJ0aW1lb3V0XCIsIHt9KTtcbiAgICB9LCB0aGlzLnRpbWVvdXQpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaGFzUmVjZWl2ZWQoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHRoaXMucmVjZWl2ZWRSZXNwICYmIHRoaXMucmVjZWl2ZWRSZXNwLnN0YXR1cyA9PT0gc3RhdHVzO1xuICB9XG4gIHRyaWdnZXIoc3RhdHVzLCByZXNwb25zZSkge1xuICAgIHRoaXMuY2hhbm5lbC50cmlnZ2VyKHRoaXMucmVmRXZlbnQsIHsgc3RhdHVzLCByZXNwb25zZSB9KTtcbiAgfVxufTtcblxuLy8ganMvcGhvZW5peC90aW1lci5qc1xudmFyIFRpbWVyID0gY2xhc3Mge1xuICAvKipcbiAgKiBAcGFyYW0geygpID0+IHZvaWR9IGNhbGxiYWNrXG4gICogQHBhcmFtIHsodHJpZXM6IG51bWJlcikgPT4gbnVtYmVyfSB0aW1lckNhbGNcbiAgKi9cbiAgY29uc3RydWN0b3IoY2FsbGJhY2ssIHRpbWVyQ2FsYykge1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB0aGlzLnRpbWVyQ2FsYyA9IHRpbWVyQ2FsYztcbiAgICB0aGlzLnRpbWVyID0gdm9pZCAwO1xuICAgIHRoaXMudHJpZXMgPSAwO1xuICB9XG4gIHJlc2V0KCkge1xuICAgIHRoaXMudHJpZXMgPSAwO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKTtcbiAgfVxuICAvKipcbiAgICogQ2FuY2VscyBhbnkgcHJldmlvdXMgc2NoZWR1bGVUaW1lb3V0IGFuZCBzY2hlZHVsZXMgY2FsbGJhY2tcbiAgICovXG4gIHNjaGVkdWxlVGltZW91dCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lcik7XG4gICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy50cmllcyA9IHRoaXMudHJpZXMgKyAxO1xuICAgICAgdGhpcy5jYWxsYmFjaygpO1xuICAgIH0sIHRoaXMudGltZXJDYWxjKHRoaXMudHJpZXMgKyAxKSk7XG4gIH1cbn07XG5cbi8vIGpzL3Bob2VuaXgvY2hhbm5lbC5qc1xudmFyIENoYW5uZWwgPSBjbGFzcyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9waWNcbiAgICogQHBhcmFtIHtQYXJhbXMgfCAoKCkgPT4gUGFyYW1zKX0gcGFyYW1zXG4gICAqIEBwYXJhbSB7U29ja2V0fSBzb2NrZXRcbiAgICovXG4gIGNvbnN0cnVjdG9yKHRvcGljLCBwYXJhbXMsIHNvY2tldCkge1xuICAgIHRoaXMuc3RhdGUgPSBDSEFOTkVMX1NUQVRFUy5jbG9zZWQ7XG4gICAgdGhpcy50b3BpYyA9IHRvcGljO1xuICAgIHRoaXMucGFyYW1zID0gY2xvc3VyZShwYXJhbXMgfHwge30pO1xuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0O1xuICAgIHRoaXMuYmluZGluZ3MgPSBbXTtcbiAgICB0aGlzLmJpbmRpbmdSZWYgPSAwO1xuICAgIHRoaXMudGltZW91dCA9IHRoaXMuc29ja2V0LnRpbWVvdXQ7XG4gICAgdGhpcy5qb2luZWRPbmNlID0gZmFsc2U7XG4gICAgdGhpcy5qb2luUHVzaCA9IG5ldyBQdXNoKHRoaXMsIENIQU5ORUxfRVZFTlRTLmpvaW4sIHRoaXMucGFyYW1zLCB0aGlzLnRpbWVvdXQpO1xuICAgIHRoaXMucHVzaEJ1ZmZlciA9IFtdO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VSZWZzID0gW107XG4gICAgdGhpcy5yZWpvaW5UaW1lciA9IG5ldyBUaW1lcigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zb2NrZXQuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgICB0aGlzLnJlam9pbigpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc29ja2V0LnJlam9pbkFmdGVyTXMpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VSZWZzLnB1c2godGhpcy5zb2NrZXQub25FcnJvcigoKSA9PiB0aGlzLnJlam9pblRpbWVyLnJlc2V0KCkpKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlUmVmcy5wdXNoKFxuICAgICAgdGhpcy5zb2NrZXQub25PcGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZWpvaW5UaW1lci5yZXNldCgpO1xuICAgICAgICBpZiAodGhpcy5pc0Vycm9yZWQoKSkge1xuICAgICAgICAgIHRoaXMucmVqb2luKCk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLmpvaW5QdXNoLnJlY2VpdmUoXCJva1wiLCAoKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlID0gQ0hBTk5FTF9TVEFURVMuam9pbmVkO1xuICAgICAgdGhpcy5yZWpvaW5UaW1lci5yZXNldCgpO1xuICAgICAgdGhpcy5wdXNoQnVmZmVyLmZvckVhY2goKHB1c2hFdmVudCkgPT4gcHVzaEV2ZW50LnNlbmQoKSk7XG4gICAgICB0aGlzLnB1c2hCdWZmZXIgPSBbXTtcbiAgICB9KTtcbiAgICB0aGlzLmpvaW5QdXNoLnJlY2VpdmUoXCJlcnJvclwiLCAocmVhc29uKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlID0gQ0hBTk5FTF9TVEFURVMuZXJyb3JlZDtcbiAgICAgIGlmICh0aGlzLnNvY2tldC5oYXNMb2dnZXIoKSkgdGhpcy5zb2NrZXQubG9nKFwiY2hhbm5lbFwiLCBgZXJyb3IgJHt0aGlzLnRvcGljfWAsIHJlYXNvbik7XG4gICAgICBpZiAodGhpcy5zb2NrZXQuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgICB0aGlzLnJlam9pblRpbWVyLnNjaGVkdWxlVGltZW91dCgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMub25DbG9zZSgoKSA9PiB7XG4gICAgICB0aGlzLnJlam9pblRpbWVyLnJlc2V0KCk7XG4gICAgICBpZiAodGhpcy5zb2NrZXQuaGFzTG9nZ2VyKCkpIHRoaXMuc29ja2V0LmxvZyhcImNoYW5uZWxcIiwgYGNsb3NlICR7dGhpcy50b3BpY31gKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBDSEFOTkVMX1NUQVRFUy5jbG9zZWQ7XG4gICAgICB0aGlzLnNvY2tldC5yZW1vdmUodGhpcyk7XG4gICAgfSk7XG4gICAgdGhpcy5vbkVycm9yKChyZWFzb24pID0+IHtcbiAgICAgIGlmICh0aGlzLnNvY2tldC5oYXNMb2dnZXIoKSkgdGhpcy5zb2NrZXQubG9nKFwiY2hhbm5lbFwiLCBgZXJyb3IgJHt0aGlzLnRvcGljfWAsIHJlYXNvbik7XG4gICAgICBpZiAodGhpcy5pc0pvaW5pbmcoKSkge1xuICAgICAgICB0aGlzLmpvaW5QdXNoLnJlc2V0KCk7XG4gICAgICB9XG4gICAgICB0aGlzLnN0YXRlID0gQ0hBTk5FTF9TVEFURVMuZXJyb3JlZDtcbiAgICAgIGlmICh0aGlzLnNvY2tldC5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgIHRoaXMucmVqb2luVGltZXIuc2NoZWR1bGVUaW1lb3V0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5qb2luUHVzaC5yZWNlaXZlKFwidGltZW91dFwiLCAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zb2NrZXQuaGFzTG9nZ2VyKCkpIHRoaXMuc29ja2V0LmxvZyhcImNoYW5uZWxcIiwgYHRpbWVvdXQgJHt0aGlzLnRvcGljfWAsIHRoaXMuam9pblB1c2gudGltZW91dCk7XG4gICAgICBsZXQgbGVhdmVQdXNoID0gbmV3IFB1c2godGhpcywgQ0hBTk5FTF9FVkVOVFMubGVhdmUsIGNsb3N1cmUoe30pLCB0aGlzLnRpbWVvdXQpO1xuICAgICAgbGVhdmVQdXNoLnNlbmQoKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBDSEFOTkVMX1NUQVRFUy5lcnJvcmVkO1xuICAgICAgdGhpcy5qb2luUHVzaC5yZXNldCgpO1xuICAgICAgaWYgKHRoaXMuc29ja2V0LmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgdGhpcy5yZWpvaW5UaW1lci5zY2hlZHVsZVRpbWVvdXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm9uKENIQU5ORUxfRVZFTlRTLnJlcGx5LCAocGF5bG9hZCwgcmVmKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXIodGhpcy5yZXBseUV2ZW50TmFtZShyZWYpLCBwYXlsb2FkKTtcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogSm9pbiB0aGUgY2hhbm5lbFxuICAgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuICAgKiBAcmV0dXJucyB7UHVzaH1cbiAgICovXG4gIGpvaW4odGltZW91dCA9IHRoaXMudGltZW91dCkge1xuICAgIGlmICh0aGlzLmpvaW5lZE9uY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInRyaWVkIHRvIGpvaW4gbXVsdGlwbGUgdGltZXMuICdqb2luJyBjYW4gb25seSBiZSBjYWxsZWQgYSBzaW5nbGUgdGltZSBwZXIgY2hhbm5lbCBpbnN0YW5jZVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50aW1lb3V0ID0gdGltZW91dDtcbiAgICAgIHRoaXMuam9pbmVkT25jZSA9IHRydWU7XG4gICAgICB0aGlzLnJlam9pbigpO1xuICAgICAgcmV0dXJuIHRoaXMuam9pblB1c2g7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBUZWFyZG93biB0aGUgY2hhbm5lbC5cbiAgICpcbiAgICogRGVzdHJveXMgYW5kIHN0b3BzIHJlbGF0ZWQgdGltZXJzLlxuICAgKi9cbiAgdGVhcmRvd24oKSB7XG4gICAgdGhpcy5wdXNoQnVmZmVyLmZvckVhY2goKHB1c2gpID0+IHB1c2guZGVzdHJveSgpKTtcbiAgICB0aGlzLnB1c2hCdWZmZXIgPSBbXTtcbiAgICB0aGlzLnJlam9pblRpbWVyLnJlc2V0KCk7XG4gICAgdGhpcy5qb2luUHVzaC5kZXN0cm95KCk7XG4gICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmNsb3NlZDtcbiAgICB0aGlzLmJpbmRpbmdzID0gW107XG4gIH1cbiAgLyoqXG4gICAqIEhvb2sgaW50byBjaGFubmVsIGNsb3NlXG4gICAqIEBwYXJhbSB7Q2hhbm5lbEJpbmRpbmdDYWxsYmFja30gY2FsbGJhY2tcbiAgICovXG4gIG9uQ2xvc2UoY2FsbGJhY2spIHtcbiAgICB0aGlzLm9uKENIQU5ORUxfRVZFTlRTLmNsb3NlLCBjYWxsYmFjayk7XG4gIH1cbiAgLyoqXG4gICAqIEhvb2sgaW50byBjaGFubmVsIGVycm9yc1xuICAgKiBAcGFyYW0ge0NoYW5uZWxPbkVycm9yQ2FsbGJhY2t9IGNhbGxiYWNrXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG4gIG9uRXJyb3IoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gdGhpcy5vbihDSEFOTkVMX0VWRU5UUy5lcnJvciwgKHJlYXNvbikgPT4gY2FsbGJhY2socmVhc29uKSk7XG4gIH1cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgb24gY2hhbm5lbCBldmVudHNcbiAgICpcbiAgICogU3Vic2NyaXB0aW9uIHJldHVybnMgYSByZWYgY291bnRlciwgd2hpY2ggY2FuIGJlIHVzZWQgbGF0ZXIgdG9cbiAgICogdW5zdWJzY3JpYmUgdGhlIGV4YWN0IGV2ZW50IGxpc3RlbmVyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJlZjEgPSBjaGFubmVsLm9uKFwiZXZlbnRcIiwgZG9fc3R1ZmYpXG4gICAqIGNvbnN0IHJlZjIgPSBjaGFubmVsLm9uKFwiZXZlbnRcIiwgZG9fb3RoZXJfc3R1ZmYpXG4gICAqIGNoYW5uZWwub2ZmKFwiZXZlbnRcIiwgcmVmMSlcbiAgICogLy8gU2luY2UgdW5zdWJzY3JpcHRpb24sIGRvX3N0dWZmIHdvbid0IGZpcmUsXG4gICAqIC8vIHdoaWxlIGRvX290aGVyX3N0dWZmIHdpbGwga2VlcCBmaXJpbmcgb24gdGhlIFwiZXZlbnRcIlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtDaGFubmVsQmluZGluZ0NhbGxiYWNrfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7bnVtYmVyfSByZWZcbiAgICovXG4gIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgIGxldCByZWYgPSB0aGlzLmJpbmRpbmdSZWYrKztcbiAgICB0aGlzLmJpbmRpbmdzLnB1c2goeyBldmVudCwgcmVmLCBjYWxsYmFjayB9KTtcbiAgICByZXR1cm4gcmVmO1xuICB9XG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZXMgb2ZmIG9mIGNoYW5uZWwgZXZlbnRzXG4gICAqXG4gICAqIFVzZSB0aGUgcmVmIHJldHVybmVkIGZyb20gYSBjaGFubmVsLm9uKCkgdG8gdW5zdWJzY3JpYmUgb25lXG4gICAqIGhhbmRsZXIsIG9yIHBhc3Mgbm90aGluZyBmb3IgdGhlIHJlZiB0byB1bnN1YnNjcmliZSBhbGxcbiAgICogaGFuZGxlcnMgZm9yIHRoZSBnaXZlbiBldmVudC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gVW5zdWJzY3JpYmUgdGhlIGRvX3N0dWZmIGhhbmRsZXJcbiAgICogY29uc3QgcmVmMSA9IGNoYW5uZWwub24oXCJldmVudFwiLCBkb19zdHVmZilcbiAgICogY2hhbm5lbC5vZmYoXCJldmVudFwiLCByZWYxKVxuICAgKlxuICAgKiAvLyBVbnN1YnNjcmliZSBhbGwgaGFuZGxlcnMgZnJvbSBldmVudFxuICAgKiBjaGFubmVsLm9mZihcImV2ZW50XCIpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge251bWJlcn0gW3JlZl1cbiAgICovXG4gIG9mZihldmVudCwgcmVmKSB7XG4gICAgdGhpcy5iaW5kaW5ncyA9IHRoaXMuYmluZGluZ3MuZmlsdGVyKChiaW5kKSA9PiB7XG4gICAgICByZXR1cm4gIShiaW5kLmV2ZW50ID09PSBldmVudCAmJiAodHlwZW9mIHJlZiA9PT0gXCJ1bmRlZmluZWRcIiB8fCByZWYgPT09IGJpbmQucmVmKSk7XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5QdXNoKCkge1xuICAgIHJldHVybiB0aGlzLnNvY2tldC5pc0Nvbm5lY3RlZCgpICYmIHRoaXMuaXNKb2luZWQoKTtcbiAgfVxuICAvKipcbiAgICogU2VuZHMgYSBtZXNzYWdlIGBldmVudGAgdG8gcGhvZW5peCB3aXRoIHRoZSBwYXlsb2FkIGBwYXlsb2FkYC5cbiAgICogUGhvZW5peCByZWNlaXZlcyB0aGlzIGluIHRoZSBgaGFuZGxlX2luKGV2ZW50LCBwYXlsb2FkLCBzb2NrZXQpYFxuICAgKiBmdW5jdGlvbi4gaWYgcGhvZW5peCByZXBsaWVzIG9yIGl0IHRpbWVzIG91dCAoZGVmYXVsdCAxMDAwMG1zKSxcbiAgICogdGhlbiBvcHRpb25hbGx5IHRoZSByZXBseSBjYW4gYmUgcmVjZWl2ZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNoYW5uZWwucHVzaChcImV2ZW50XCIpXG4gICAqICAgLnJlY2VpdmUoXCJva1wiLCBwYXlsb2FkID0+IGNvbnNvbGUubG9nKFwicGhvZW5peCByZXBsaWVkOlwiLCBwYXlsb2FkKSlcbiAgICogICAucmVjZWl2ZShcImVycm9yXCIsIGVyciA9PiBjb25zb2xlLmxvZyhcInBob2VuaXggZXJyb3JlZFwiLCBlcnIpKVxuICAgKiAgIC5yZWNlaXZlKFwidGltZW91dFwiLCAoKSA9PiBjb25zb2xlLmxvZyhcInRpbWVkIG91dCBwdXNoaW5nXCIpKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IHBheWxvYWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt0aW1lb3V0XVxuICAgKiBAcmV0dXJucyB7UHVzaH1cbiAgICovXG4gIHB1c2goZXZlbnQsIHBheWxvYWQsIHRpbWVvdXQgPSB0aGlzLnRpbWVvdXQpIHtcbiAgICBwYXlsb2FkID0gcGF5bG9hZCB8fCB7fTtcbiAgICBpZiAoIXRoaXMuam9pbmVkT25jZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGB0cmllZCB0byBwdXNoICcke2V2ZW50fScgdG8gJyR7dGhpcy50b3BpY30nIGJlZm9yZSBqb2luaW5nLiBVc2UgY2hhbm5lbC5qb2luKCkgYmVmb3JlIHB1c2hpbmcgZXZlbnRzYCk7XG4gICAgfVxuICAgIGxldCBwdXNoRXZlbnQgPSBuZXcgUHVzaCh0aGlzLCBldmVudCwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9LCB0aW1lb3V0KTtcbiAgICBpZiAodGhpcy5jYW5QdXNoKCkpIHtcbiAgICAgIHB1c2hFdmVudC5zZW5kKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHB1c2hFdmVudC5zdGFydFRpbWVvdXQoKTtcbiAgICAgIHRoaXMucHVzaEJ1ZmZlci5wdXNoKHB1c2hFdmVudCk7XG4gICAgfVxuICAgIHJldHVybiBwdXNoRXZlbnQ7XG4gIH1cbiAgLyoqIExlYXZlcyB0aGUgY2hhbm5lbFxuICAgKlxuICAgKiBVbnN1YnNjcmliZXMgZnJvbSBzZXJ2ZXIgZXZlbnRzLCBhbmRcbiAgICogaW5zdHJ1Y3RzIGNoYW5uZWwgdG8gdGVybWluYXRlIG9uIHNlcnZlclxuICAgKlxuICAgKiBUcmlnZ2VycyBvbkNsb3NlKCkgaG9va3NcbiAgICpcbiAgICogVG8gcmVjZWl2ZSBsZWF2ZSBhY2tub3dsZWRnZW1lbnRzLCB1c2UgdGhlIGByZWNlaXZlYFxuICAgKiBob29rIHRvIGJpbmQgdG8gdGhlIHNlcnZlciBhY2ssIGllOlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjaGFubmVsLmxlYXZlKCkucmVjZWl2ZShcIm9rXCIsICgpID0+IGFsZXJ0KFwibGVmdCFcIikgKVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdGltZW91dFxuICAgKiBAcmV0dXJucyB7UHVzaH1cbiAgICovXG4gIGxlYXZlKHRpbWVvdXQgPSB0aGlzLnRpbWVvdXQpIHtcbiAgICB0aGlzLnJlam9pblRpbWVyLnJlc2V0KCk7XG4gICAgdGhpcy5qb2luUHVzaC5jYW5jZWxUaW1lb3V0KCk7XG4gICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmxlYXZpbmc7XG4gICAgbGV0IG9uQ2xvc2UgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zb2NrZXQuaGFzTG9nZ2VyKCkpIHRoaXMuc29ja2V0LmxvZyhcImNoYW5uZWxcIiwgYGxlYXZlICR7dGhpcy50b3BpY31gKTtcbiAgICAgIHRoaXMudHJpZ2dlcihDSEFOTkVMX0VWRU5UUy5jbG9zZSwgXCJsZWF2ZVwiKTtcbiAgICB9O1xuICAgIGxldCBsZWF2ZVB1c2ggPSBuZXcgUHVzaCh0aGlzLCBDSEFOTkVMX0VWRU5UUy5sZWF2ZSwgY2xvc3VyZSh7fSksIHRpbWVvdXQpO1xuICAgIGxlYXZlUHVzaC5yZWNlaXZlKFwib2tcIiwgKCkgPT4gb25DbG9zZSgpKS5yZWNlaXZlKFwidGltZW91dFwiLCAoKSA9PiBvbkNsb3NlKCkpO1xuICAgIGxlYXZlUHVzaC5zZW5kKCk7XG4gICAgaWYgKCF0aGlzLmNhblB1c2goKSkge1xuICAgICAgbGVhdmVQdXNoLnRyaWdnZXIoXCJva1wiLCB7fSk7XG4gICAgfVxuICAgIHJldHVybiBsZWF2ZVB1c2g7XG4gIH1cbiAgLyoqXG4gICAqIE92ZXJyaWRhYmxlIG1lc3NhZ2UgaG9va1xuICAgKlxuICAgKiBSZWNlaXZlcyBhbGwgZXZlbnRzIGZvciBzcGVjaWFsaXplZCBtZXNzYWdlIGhhbmRsaW5nXG4gICAqIGJlZm9yZSBkaXNwYXRjaGluZyB0byB0aGUgY2hhbm5lbCBjYWxsYmFja3MuXG4gICAqXG4gICAqIE11c3QgcmV0dXJuIHRoZSBwYXlsb2FkLCBtb2RpZmllZCBvciB1bm1vZGlmaWVkXG4gICAqIEB0eXBle0NoYW5uZWxPbk1lc3NhZ2V9XG4gICAqL1xuICBvbk1lc3NhZ2UoX2V2ZW50LCBwYXlsb2FkLCBfcmVmKSB7XG4gICAgcmV0dXJuIHBheWxvYWQ7XG4gIH1cbiAgLyoqXG4gICAqIE92ZXJyaWRhYmxlIGZpbHRlciBob29rXG4gICAqXG4gICAqIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBgdHJ1ZWAsIGBiaW5kaW5nYCdzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkLlxuICAgKlxuICAgKiBAdHlwZXtDaGFubmVsRmlsdGVyQmluZGluZ3N9XG4gICAqL1xuICBmaWx0ZXJCaW5kaW5ncyhfYmluZGluZywgX3BheWxvYWQsIF9yZWYpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpc01lbWJlcih0b3BpYywgZXZlbnQsIHBheWxvYWQsIGpvaW5SZWYpIHtcbiAgICBpZiAodGhpcy50b3BpYyAhPT0gdG9waWMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGpvaW5SZWYgJiYgam9pblJlZiAhPT0gdGhpcy5qb2luUmVmKCkpIHtcbiAgICAgIGlmICh0aGlzLnNvY2tldC5oYXNMb2dnZXIoKSkgdGhpcy5zb2NrZXQubG9nKFwiY2hhbm5lbFwiLCBcImRyb3BwaW5nIG91dGRhdGVkIG1lc3NhZ2VcIiwgeyB0b3BpYywgZXZlbnQsIHBheWxvYWQsIGpvaW5SZWYgfSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICBqb2luUmVmKCkge1xuICAgIHJldHVybiB0aGlzLmpvaW5QdXNoLnJlZjtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlam9pbih0aW1lb3V0ID0gdGhpcy50aW1lb3V0KSB7XG4gICAgaWYgKHRoaXMuaXNMZWF2aW5nKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zb2NrZXQubGVhdmVPcGVuVG9waWModGhpcy50b3BpYyk7XG4gICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmpvaW5pbmc7XG4gICAgdGhpcy5qb2luUHVzaC5yZXNlbmQodGltZW91dCk7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge3Vua25vd259IFtwYXlsb2FkXVxuICAgKiBAcGFyYW0gez9zdHJpbmd9IFtyZWZdXG4gICAqIEBwYXJhbSB7P3N0cmluZ30gW2pvaW5SZWZdXG4gICAqL1xuICB0cmlnZ2VyKGV2ZW50LCBwYXlsb2FkLCByZWYsIGpvaW5SZWYpIHtcbiAgICBsZXQgaGFuZGxlZFBheWxvYWQgPSB0aGlzLm9uTWVzc2FnZShldmVudCwgcGF5bG9hZCwgcmVmLCBqb2luUmVmKTtcbiAgICBpZiAocGF5bG9hZCAmJiAhaGFuZGxlZFBheWxvYWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcImNoYW5uZWwgb25NZXNzYWdlIGNhbGxiYWNrcyBtdXN0IHJldHVybiB0aGUgcGF5bG9hZCwgbW9kaWZpZWQgb3IgdW5tb2RpZmllZFwiKTtcbiAgICB9XG4gICAgbGV0IGV2ZW50QmluZGluZ3MgPSB0aGlzLmJpbmRpbmdzLmZpbHRlcigoYmluZCkgPT4gYmluZC5ldmVudCA9PT0gZXZlbnQgJiYgdGhpcy5maWx0ZXJCaW5kaW5ncyhiaW5kLCBwYXlsb2FkLCByZWYpKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGV2ZW50QmluZGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBiaW5kID0gZXZlbnRCaW5kaW5nc1tpXTtcbiAgICAgIGJpbmQuY2FsbGJhY2soaGFuZGxlZFBheWxvYWQsIHJlZiwgam9pblJlZiB8fCB0aGlzLmpvaW5SZWYoKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAqIEBwYXJhbSB7c3RyaW5nfSByZWZcbiAgKi9cbiAgcmVwbHlFdmVudE5hbWUocmVmKSB7XG4gICAgcmV0dXJuIGBjaGFuX3JlcGx5XyR7cmVmfWA7XG4gIH1cbiAgaXNDbG9zZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmNsb3NlZDtcbiAgfVxuICBpc0Vycm9yZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmVycm9yZWQ7XG4gIH1cbiAgaXNKb2luZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmpvaW5lZDtcbiAgfVxuICBpc0pvaW5pbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmpvaW5pbmc7XG4gIH1cbiAgaXNMZWF2aW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBDSEFOTkVMX1NUQVRFUy5sZWF2aW5nO1xuICB9XG59O1xuXG4vLyBqcy9waG9lbml4L2FqYXguanNcbnZhciBBamF4ID0gY2xhc3Mge1xuICBzdGF0aWMgcmVxdWVzdChtZXRob2QsIGVuZFBvaW50LCBoZWFkZXJzLCBib2R5LCB0aW1lb3V0LCBvbnRpbWVvdXQsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGdsb2JhbC5YRG9tYWluUmVxdWVzdCkge1xuICAgICAgbGV0IHJlcSA9IG5ldyBnbG9iYWwuWERvbWFpblJlcXVlc3QoKTtcbiAgICAgIHJldHVybiB0aGlzLnhkb21haW5SZXF1ZXN0KHJlcSwgbWV0aG9kLCBlbmRQb2ludCwgYm9keSwgdGltZW91dCwgb250aW1lb3V0LCBjYWxsYmFjayk7XG4gICAgfSBlbHNlIGlmIChnbG9iYWwuWE1MSHR0cFJlcXVlc3QpIHtcbiAgICAgIGxldCByZXEgPSBuZXcgZ2xvYmFsLlhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICByZXR1cm4gdGhpcy54aHJSZXF1ZXN0KHJlcSwgbWV0aG9kLCBlbmRQb2ludCwgaGVhZGVycywgYm9keSwgdGltZW91dCwgb250aW1lb3V0LCBjYWxsYmFjayk7XG4gICAgfSBlbHNlIGlmIChnbG9iYWwuZmV0Y2ggJiYgZ2xvYmFsLkFib3J0Q29udHJvbGxlcikge1xuICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hSZXF1ZXN0KG1ldGhvZCwgZW5kUG9pbnQsIGhlYWRlcnMsIGJvZHksIHRpbWVvdXQsIG9udGltZW91dCwgY2FsbGJhY2spO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdWl0YWJsZSBYTUxIdHRwUmVxdWVzdCBpbXBsZW1lbnRhdGlvbiBmb3VuZFwiKTtcbiAgICB9XG4gIH1cbiAgc3RhdGljIGZldGNoUmVxdWVzdChtZXRob2QsIGVuZFBvaW50LCBoZWFkZXJzLCBib2R5LCB0aW1lb3V0LCBvbnRpbWVvdXQsIGNhbGxiYWNrKSB7XG4gICAgbGV0IG9wdGlvbnMgPSB7XG4gICAgICBtZXRob2QsXG4gICAgICBoZWFkZXJzLFxuICAgICAgYm9keVxuICAgIH07XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBudWxsO1xuICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgICAgY29uc3QgX3RpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aW1lb3V0KTtcbiAgICAgIG9wdGlvbnMuc2lnbmFsID0gY29udHJvbGxlci5zaWduYWw7XG4gICAgfVxuICAgIGdsb2JhbC5mZXRjaChlbmRQb2ludCwgb3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLnRleHQoKSkudGhlbigoZGF0YSkgPT4gdGhpcy5wYXJzZUpTT04oZGF0YSkpLnRoZW4oKGRhdGEpID0+IGNhbGxiYWNrICYmIGNhbGxiYWNrKGRhdGEpKS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyLm5hbWUgPT09IFwiQWJvcnRFcnJvclwiICYmIG9udGltZW91dCkge1xuICAgICAgICBvbnRpbWVvdXQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKG51bGwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb250cm9sbGVyO1xuICB9XG4gIHN0YXRpYyB4ZG9tYWluUmVxdWVzdChyZXEsIG1ldGhvZCwgZW5kUG9pbnQsIGJvZHksIHRpbWVvdXQsIG9udGltZW91dCwgY2FsbGJhY2spIHtcbiAgICByZXEudGltZW91dCA9IHRpbWVvdXQ7XG4gICAgcmVxLm9wZW4obWV0aG9kLCBlbmRQb2ludCk7XG4gICAgcmVxLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGxldCByZXNwb25zZSA9IHRoaXMucGFyc2VKU09OKHJlcS5yZXNwb25zZVRleHQpO1xuICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2socmVzcG9uc2UpO1xuICAgIH07XG4gICAgaWYgKG9udGltZW91dCkge1xuICAgICAgcmVxLm9udGltZW91dCA9IG9udGltZW91dDtcbiAgICB9XG4gICAgcmVxLm9ucHJvZ3Jlc3MgPSAoKSA9PiB7XG4gICAgfTtcbiAgICByZXEuc2VuZChib2R5KTtcbiAgICByZXR1cm4gcmVxO1xuICB9XG4gIHN0YXRpYyB4aHJSZXF1ZXN0KHJlcSwgbWV0aG9kLCBlbmRQb2ludCwgaGVhZGVycywgYm9keSwgdGltZW91dCwgb250aW1lb3V0LCBjYWxsYmFjaykge1xuICAgIHJlcS5vcGVuKG1ldGhvZCwgZW5kUG9pbnQsIHRydWUpO1xuICAgIHJlcS50aW1lb3V0ID0gdGltZW91dDtcbiAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaGVhZGVycykpIHtcbiAgICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICByZXEub25lcnJvciA9ICgpID0+IGNhbGxiYWNrICYmIGNhbGxiYWNrKG51bGwpO1xuICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT09IFhIUl9TVEFURVMuY29tcGxldGUgJiYgY2FsbGJhY2spIHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gdGhpcy5wYXJzZUpTT04ocmVxLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgIGNhbGxiYWNrKHJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChvbnRpbWVvdXQpIHtcbiAgICAgIHJlcS5vbnRpbWVvdXQgPSBvbnRpbWVvdXQ7XG4gICAgfVxuICAgIHJlcS5zZW5kKGJvZHkpO1xuICAgIHJldHVybiByZXE7XG4gIH1cbiAgc3RhdGljIHBhcnNlSlNPTihyZXNwKSB7XG4gICAgaWYgKCFyZXNwIHx8IHJlc3AgPT09IFwiXCIpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzcCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICBjb25zb2xlICYmIGNvbnNvbGUubG9nKFwiZmFpbGVkIHRvIHBhcnNlIEpTT04gcmVzcG9uc2VcIiwgcmVzcCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgc3RhdGljIHNlcmlhbGl6ZShvYmosIHBhcmVudEtleSkge1xuICAgIGxldCBxdWVyeVN0ciA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBwYXJhbUtleSA9IHBhcmVudEtleSA/IGAke3BhcmVudEtleX1bJHtrZXl9XWAgOiBrZXk7XG4gICAgICBsZXQgcGFyYW1WYWwgPSBvYmpba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgcGFyYW1WYWwgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgcXVlcnlTdHIucHVzaCh0aGlzLnNlcmlhbGl6ZShwYXJhbVZhbCwgcGFyYW1LZXkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXJ5U3RyLnB1c2goZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtS2V5KSArIFwiPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtVmFsKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBxdWVyeVN0ci5qb2luKFwiJlwiKTtcbiAgfVxuICBzdGF0aWMgYXBwZW5kUGFyYW1zKHVybCwgcGFyYW1zKSB7XG4gICAgaWYgKE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdXJsO1xuICAgIH1cbiAgICBsZXQgcHJlZml4ID0gdXJsLm1hdGNoKC9cXD8vKSA/IFwiJlwiIDogXCI/XCI7XG4gICAgcmV0dXJuIGAke3VybH0ke3ByZWZpeH0ke3RoaXMuc2VyaWFsaXplKHBhcmFtcyl9YDtcbiAgfVxufTtcblxuLy8ganMvcGhvZW5peC9sb25ncG9sbC5qc1xudmFyIGFycmF5QnVmZmVyVG9CYXNlNjQgPSAoYnVmZmVyKSA9PiB7XG4gIGxldCBiaW5hcnkgPSBcIlwiO1xuICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICBsZXQgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcbiAgfVxuICByZXR1cm4gYnRvYShiaW5hcnkpO1xufTtcbnZhciBMb25nUG9sbCA9IGNsYXNzIHtcbiAgY29uc3RydWN0b3IoZW5kUG9pbnQsIHByb3RvY29scykge1xuICAgIGlmIChwcm90b2NvbHMgJiYgcHJvdG9jb2xzLmxlbmd0aCA9PT0gMiAmJiBwcm90b2NvbHNbMV0uc3RhcnRzV2l0aChBVVRIX1RPS0VOX1BSRUZJWCkpIHtcbiAgICAgIHRoaXMuYXV0aFRva2VuID0gYXRvYihwcm90b2NvbHNbMV0uc2xpY2UoQVVUSF9UT0tFTl9QUkVGSVgubGVuZ3RoKSk7XG4gICAgfVxuICAgIHRoaXMuZW5kUG9pbnQgPSBudWxsO1xuICAgIHRoaXMudG9rZW4gPSBudWxsO1xuICAgIHRoaXMuc2tpcEhlYXJ0YmVhdCA9IHRydWU7XG4gICAgdGhpcy5yZXFzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgICB0aGlzLmF3YWl0aW5nQmF0Y2hBY2sgPSBmYWxzZTtcbiAgICB0aGlzLmN1cnJlbnRCYXRjaCA9IG51bGw7XG4gICAgdGhpcy5jdXJyZW50QmF0Y2hUaW1lciA9IG51bGw7XG4gICAgdGhpcy5iYXRjaEJ1ZmZlciA9IFtdO1xuICAgIHRoaXMub25vcGVuID0gZnVuY3Rpb24oKSB7XG4gICAgfTtcbiAgICB0aGlzLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICB9O1xuICAgIHRoaXMub25tZXNzYWdlID0gZnVuY3Rpb24oKSB7XG4gICAgfTtcbiAgICB0aGlzLm9uY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgICB9O1xuICAgIHRoaXMucG9sbEVuZHBvaW50ID0gdGhpcy5ub3JtYWxpemVFbmRwb2ludChlbmRQb2ludCk7XG4gICAgdGhpcy5yZWFkeVN0YXRlID0gU09DS0VUX1NUQVRFUy5jb25uZWN0aW5nO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5wb2xsKCksIDApO1xuICB9XG4gIG5vcm1hbGl6ZUVuZHBvaW50KGVuZFBvaW50KSB7XG4gICAgcmV0dXJuIGVuZFBvaW50LnJlcGxhY2UoXCJ3czovL1wiLCBcImh0dHA6Ly9cIikucmVwbGFjZShcIndzczovL1wiLCBcImh0dHBzOi8vXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChcIiguKikvXCIgKyBUUkFOU1BPUlRTLndlYnNvY2tldCksIFwiJDEvXCIgKyBUUkFOU1BPUlRTLmxvbmdwb2xsKTtcbiAgfVxuICBlbmRwb2ludFVSTCgpIHtcbiAgICByZXR1cm4gQWpheC5hcHBlbmRQYXJhbXModGhpcy5wb2xsRW5kcG9pbnQsIHsgdG9rZW46IHRoaXMudG9rZW4gfSk7XG4gIH1cbiAgY2xvc2VBbmRSZXRyeShjb2RlLCByZWFzb24sIHdhc0NsZWFuKSB7XG4gICAgdGhpcy5jbG9zZShjb2RlLCByZWFzb24sIHdhc0NsZWFuKTtcbiAgICB0aGlzLnJlYWR5U3RhdGUgPSBTT0NLRVRfU1RBVEVTLmNvbm5lY3Rpbmc7XG4gIH1cbiAgb250aW1lb3V0KCkge1xuICAgIHRoaXMub25lcnJvcihcInRpbWVvdXRcIik7XG4gICAgdGhpcy5jbG9zZUFuZFJldHJ5KDEwMDUsIFwidGltZW91dFwiLCBmYWxzZSk7XG4gIH1cbiAgaXNBY3RpdmUoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVhZHlTdGF0ZSA9PT0gU09DS0VUX1NUQVRFUy5vcGVuIHx8IHRoaXMucmVhZHlTdGF0ZSA9PT0gU09DS0VUX1NUQVRFUy5jb25uZWN0aW5nO1xuICB9XG4gIHBvbGwoKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHsgXCJBY2NlcHRcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfTtcbiAgICBpZiAodGhpcy5hdXRoVG9rZW4pIHtcbiAgICAgIGhlYWRlcnNbXCJYLVBob2VuaXgtQXV0aFRva2VuXCJdID0gdGhpcy5hdXRoVG9rZW47XG4gICAgfVxuICAgIHRoaXMuYWpheChcIkdFVFwiLCBoZWFkZXJzLCBudWxsLCAoKSA9PiB0aGlzLm9udGltZW91dCgpLCAocmVzcCkgPT4ge1xuICAgICAgaWYgKHJlc3ApIHtcbiAgICAgICAgdmFyIHsgc3RhdHVzLCB0b2tlbiwgbWVzc2FnZXMgfSA9IHJlc3A7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IDQxMCAmJiB0aGlzLnRva2VuICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy5vbmVycm9yKDQxMCk7XG4gICAgICAgICAgdGhpcy5jbG9zZUFuZFJldHJ5KDM0MTAsIFwic2Vzc2lvbl9nb25lXCIsIGZhbHNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50b2tlbiA9IHRva2VuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdHVzID0gMDtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICAgIGNhc2UgMjAwOlxuICAgICAgICAgIG1lc3NhZ2VzLmZvckVhY2goKG1zZykgPT4ge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm9ubWVzc2FnZSh7IGRhdGE6IG1zZyB9KSwgMCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdGhpcy5wb2xsKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgMjA0OlxuICAgICAgICAgIHRoaXMucG9sbCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQxMDpcbiAgICAgICAgICB0aGlzLnJlYWR5U3RhdGUgPSBTT0NLRVRfU1RBVEVTLm9wZW47XG4gICAgICAgICAgdGhpcy5vbm9wZW4oe30pO1xuICAgICAgICAgIHRoaXMucG9sbCgpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQwMzpcbiAgICAgICAgICB0aGlzLm9uZXJyb3IoNDAzKTtcbiAgICAgICAgICB0aGlzLmNsb3NlKDEwMDgsIFwiZm9yYmlkZGVuXCIsIGZhbHNlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDUwMDpcbiAgICAgICAgICB0aGlzLm9uZXJyb3IoNTAwKTtcbiAgICAgICAgICB0aGlzLmNsb3NlQW5kUmV0cnkoMTAxMSwgXCJpbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIiwgNTAwKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuaGFuZGxlZCBwb2xsIHN0YXR1cyAke3N0YXR1c31gKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvLyB3ZSBjb2xsZWN0IGFsbCBwdXNoZXMgd2l0aGluIHRoZSBjdXJyZW50IGV2ZW50IGxvb3AgYnlcbiAgLy8gc2V0VGltZW91dCAwLCB3aGljaCBvcHRpbWl6ZXMgYmFjay10by1iYWNrIHByb2NlZHVyYWxcbiAgLy8gcHVzaGVzIGFnYWluc3QgYW4gZW1wdHkgYnVmZmVyXG4gIHNlbmQoYm9keSkge1xuICAgIGlmICh0eXBlb2YgYm9keSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgYm9keSA9IGFycmF5QnVmZmVyVG9CYXNlNjQoYm9keSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmN1cnJlbnRCYXRjaCkge1xuICAgICAgdGhpcy5jdXJyZW50QmF0Y2gucHVzaChib2R5KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYXdhaXRpbmdCYXRjaEFjaykge1xuICAgICAgdGhpcy5iYXRjaEJ1ZmZlci5wdXNoKGJvZHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRCYXRjaCA9IFtib2R5XTtcbiAgICAgIHRoaXMuY3VycmVudEJhdGNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5iYXRjaFNlbmQodGhpcy5jdXJyZW50QmF0Y2gpO1xuICAgICAgICB0aGlzLmN1cnJlbnRCYXRjaCA9IG51bGw7XG4gICAgICB9LCAwKTtcbiAgICB9XG4gIH1cbiAgYmF0Y2hTZW5kKG1lc3NhZ2VzKSB7XG4gICAgdGhpcy5hd2FpdGluZ0JhdGNoQWNrID0gdHJ1ZTtcbiAgICB0aGlzLmFqYXgoXCJQT1NUXCIsIHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi94LW5kanNvblwiIH0sIG1lc3NhZ2VzLmpvaW4oXCJcXG5cIiksICgpID0+IHRoaXMub25lcnJvcihcInRpbWVvdXRcIiksIChyZXNwKSA9PiB7XG4gICAgICB0aGlzLmF3YWl0aW5nQmF0Y2hBY2sgPSBmYWxzZTtcbiAgICAgIGlmICghcmVzcCB8fCByZXNwLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgIHRoaXMub25lcnJvcihyZXNwICYmIHJlc3Auc3RhdHVzKTtcbiAgICAgICAgdGhpcy5jbG9zZUFuZFJldHJ5KDEwMTEsIFwiaW50ZXJuYWwgc2VydmVyIGVycm9yXCIsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5iYXRjaEJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuYmF0Y2hTZW5kKHRoaXMuYmF0Y2hCdWZmZXIpO1xuICAgICAgICB0aGlzLmJhdGNoQnVmZmVyID0gW107XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgY2xvc2UoY29kZSwgcmVhc29uLCB3YXNDbGVhbikge1xuICAgIGZvciAobGV0IHJlcSBvZiB0aGlzLnJlcXMpIHtcbiAgICAgIHJlcS5hYm9ydCgpO1xuICAgIH1cbiAgICB0aGlzLnJlYWR5U3RhdGUgPSBTT0NLRVRfU1RBVEVTLmNsb3NlZDtcbiAgICBsZXQgb3B0cyA9IE9iamVjdC5hc3NpZ24oeyBjb2RlOiAxZTMsIHJlYXNvbjogdm9pZCAwLCB3YXNDbGVhbjogdHJ1ZSB9LCB7IGNvZGUsIHJlYXNvbiwgd2FzQ2xlYW4gfSk7XG4gICAgdGhpcy5iYXRjaEJ1ZmZlciA9IFtdO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmN1cnJlbnRCYXRjaFRpbWVyKTtcbiAgICB0aGlzLmN1cnJlbnRCYXRjaFRpbWVyID0gbnVsbDtcbiAgICBpZiAodHlwZW9mIENsb3NlRXZlbnQgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHRoaXMub25jbG9zZShuZXcgQ2xvc2VFdmVudChcImNsb3NlXCIsIG9wdHMpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vbmNsb3NlKG9wdHMpO1xuICAgIH1cbiAgfVxuICBhamF4KG1ldGhvZCwgaGVhZGVycywgYm9keSwgb25DYWxsZXJUaW1lb3V0LCBjYWxsYmFjaykge1xuICAgIGxldCByZXE7XG4gICAgbGV0IG9udGltZW91dCA9ICgpID0+IHtcbiAgICAgIHRoaXMucmVxcy5kZWxldGUocmVxKTtcbiAgICAgIG9uQ2FsbGVyVGltZW91dCgpO1xuICAgIH07XG4gICAgcmVxID0gQWpheC5yZXF1ZXN0KG1ldGhvZCwgdGhpcy5lbmRwb2ludFVSTCgpLCBoZWFkZXJzLCBib2R5LCB0aGlzLnRpbWVvdXQsIG9udGltZW91dCwgKHJlc3ApID0+IHtcbiAgICAgIHRoaXMucmVxcy5kZWxldGUocmVxKTtcbiAgICAgIGlmICh0aGlzLmlzQWN0aXZlKCkpIHtcbiAgICAgICAgY2FsbGJhY2socmVzcCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5yZXFzLmFkZChyZXEpO1xuICB9XG59O1xuXG4vLyBqcy9waG9lbml4L3ByZXNlbmNlLmpzXG52YXIgUHJlc2VuY2UgPSBjbGFzcyBfUHJlc2VuY2Uge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIFByZXNlbmNlXG4gICAqIEBwYXJhbSB7Q2hhbm5lbH0gY2hhbm5lbCAtIFRoZSBDaGFubmVsXG4gICAqIEBwYXJhbSB7UHJlc2VuY2VPcHRpb25zfSBbb3B0c10gLSBUaGUgb3B0aW9ucywgZm9yIGV4YW1wbGUgYHtldmVudHM6IHtzdGF0ZTogXCJzdGF0ZVwiLCBkaWZmOiBcImRpZmZcIn19YFxuICAgKi9cbiAgY29uc3RydWN0b3IoY2hhbm5lbCwgb3B0cyA9IHt9KSB7XG4gICAgbGV0IGV2ZW50cyA9IG9wdHMuZXZlbnRzIHx8IC8qKiBAdHlwZSB7UHJlc2VuY2VFdmVudHN9ICovXG4gICAgeyBzdGF0ZTogXCJwcmVzZW5jZV9zdGF0ZVwiLCBkaWZmOiBcInByZXNlbmNlX2RpZmZcIiB9O1xuICAgIHRoaXMuc3RhdGUgPSB7fTtcbiAgICB0aGlzLnBlbmRpbmdEaWZmcyA9IFtdO1xuICAgIHRoaXMuY2hhbm5lbCA9IGNoYW5uZWw7XG4gICAgdGhpcy5qb2luUmVmID0gbnVsbDtcbiAgICB0aGlzLmNhbGxlciA9IHtcbiAgICAgIG9uSm9pbjogZnVuY3Rpb24oKSB7XG4gICAgICB9LFxuICAgICAgb25MZWF2ZTogZnVuY3Rpb24oKSB7XG4gICAgICB9LFxuICAgICAgb25TeW5jOiBmdW5jdGlvbigpIHtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuY2hhbm5lbC5vbihldmVudHMuc3RhdGUsIChuZXdTdGF0ZSkgPT4ge1xuICAgICAgbGV0IHsgb25Kb2luLCBvbkxlYXZlLCBvblN5bmMgfSA9IHRoaXMuY2FsbGVyO1xuICAgICAgdGhpcy5qb2luUmVmID0gdGhpcy5jaGFubmVsLmpvaW5SZWYoKTtcbiAgICAgIHRoaXMuc3RhdGUgPSBfUHJlc2VuY2Uuc3luY1N0YXRlKHRoaXMuc3RhdGUsIG5ld1N0YXRlLCBvbkpvaW4sIG9uTGVhdmUpO1xuICAgICAgdGhpcy5wZW5kaW5nRGlmZnMuZm9yRWFjaCgoZGlmZikgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlID0gX1ByZXNlbmNlLnN5bmNEaWZmKHRoaXMuc3RhdGUsIGRpZmYsIG9uSm9pbiwgb25MZWF2ZSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMucGVuZGluZ0RpZmZzID0gW107XG4gICAgICBvblN5bmMoKTtcbiAgICB9KTtcbiAgICB0aGlzLmNoYW5uZWwub24oZXZlbnRzLmRpZmYsIChkaWZmKSA9PiB7XG4gICAgICBsZXQgeyBvbkpvaW4sIG9uTGVhdmUsIG9uU3luYyB9ID0gdGhpcy5jYWxsZXI7XG4gICAgICBpZiAodGhpcy5pblBlbmRpbmdTeW5jU3RhdGUoKSkge1xuICAgICAgICB0aGlzLnBlbmRpbmdEaWZmcy5wdXNoKGRpZmYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IF9QcmVzZW5jZS5zeW5jRGlmZih0aGlzLnN0YXRlLCBkaWZmLCBvbkpvaW4sIG9uTGVhdmUpO1xuICAgICAgICBvblN5bmMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtQcmVzZW5jZU9uSm9pbn0gY2FsbGJhY2tcbiAgICovXG4gIG9uSm9pbihjYWxsYmFjaykge1xuICAgIHRoaXMuY2FsbGVyLm9uSm9pbiA9IGNhbGxiYWNrO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge1ByZXNlbmNlT25MZWF2ZX0gY2FsbGJhY2tcbiAgICovXG4gIG9uTGVhdmUoY2FsbGJhY2spIHtcbiAgICB0aGlzLmNhbGxlci5vbkxlYXZlID0gY2FsbGJhY2s7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7UHJlc2VuY2VPblN5bmN9IGNhbGxiYWNrXG4gICAqL1xuICBvblN5bmMoY2FsbGJhY2spIHtcbiAgICB0aGlzLmNhbGxlci5vblN5bmMgPSBjYWxsYmFjaztcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJlc2VuY2VzLCB3aXRoIHNlbGVjdGVkIG1ldGFkYXRhLlxuICAgKlxuICAgKiBAdGVtcGxhdGUgW1Q9UHJlc2VuY2VTdGF0ZV1cbiAgICogQHBhcmFtIHsoKGtleTogc3RyaW5nLCBvYmo6IFByZXNlbmNlU3RhdGUpID0+IFQpfSBbYnldXG4gICAqXG4gICAqIEByZXR1cm5zIHtUW119XG4gICAqL1xuICBsaXN0KGJ5KSB7XG4gICAgcmV0dXJuIF9QcmVzZW5jZS5saXN0KHRoaXMuc3RhdGUsIGJ5KTtcbiAgfVxuICBpblBlbmRpbmdTeW5jU3RhdGUoKSB7XG4gICAgcmV0dXJuICF0aGlzLmpvaW5SZWYgfHwgdGhpcy5qb2luUmVmICE9PSB0aGlzLmNoYW5uZWwuam9pblJlZigpO1xuICB9XG4gIC8vIGxvd2VyLWxldmVsIHB1YmxpYyBzdGF0aWMgQVBJXG4gIC8qKlxuICAgKiBVc2VkIHRvIHN5bmMgdGhlIGxpc3Qgb2YgcHJlc2VuY2VzIG9uIHRoZSBzZXJ2ZXJcbiAgICogd2l0aCB0aGUgY2xpZW50J3Mgc3RhdGUuIEFuIG9wdGlvbmFsIGBvbkpvaW5gIGFuZCBgb25MZWF2ZWAgY2FsbGJhY2sgY2FuXG4gICAqIGJlIHByb3ZpZGVkIHRvIHJlYWN0IHRvIGNoYW5nZXMgaW4gdGhlIGNsaWVudCdzIGxvY2FsIHByZXNlbmNlcyBhY3Jvc3NcbiAgICogZGlzY29ubmVjdHMgYW5kIHJlY29ubmVjdHMgd2l0aCB0aGUgc2VydmVyLlxuICAgKlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIFByZXNlbmNlU3RhdGU+fSBjdXJyZW50U3RhdGVcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBQcmVzZW5jZVN0YXRlPn0gbmV3U3RhdGVcbiAgICogQHBhcmFtIHtQcmVzZW5jZU9uSm9pbn0gb25Kb2luXG4gICAqIEBwYXJhbSB7UHJlc2VuY2VPbkxlYXZlfSBvbkxlYXZlXG4gICAqXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBQcmVzZW5jZVN0YXRlPn1cbiAgICovXG4gIHN0YXRpYyBzeW5jU3RhdGUoY3VycmVudFN0YXRlLCBuZXdTdGF0ZSwgb25Kb2luLCBvbkxlYXZlKSB7XG4gICAgbGV0IHN0YXRlID0gdGhpcy5jbG9uZShjdXJyZW50U3RhdGUpO1xuICAgIGxldCBqb2lucyA9IHt9O1xuICAgIGxldCBsZWF2ZXMgPSB7fTtcbiAgICB0aGlzLm1hcChzdGF0ZSwgKGtleSwgcHJlc2VuY2UpID0+IHtcbiAgICAgIGlmICghbmV3U3RhdGVba2V5XSkge1xuICAgICAgICBsZWF2ZXNba2V5XSA9IHByZXNlbmNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMubWFwKG5ld1N0YXRlLCAoa2V5LCBuZXdQcmVzZW5jZSkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnRQcmVzZW5jZSA9IHN0YXRlW2tleV07XG4gICAgICBpZiAoY3VycmVudFByZXNlbmNlKSB7XG4gICAgICAgIGxldCBuZXdSZWZzID0gbmV3UHJlc2VuY2UubWV0YXMubWFwKChtKSA9PiBtLnBoeF9yZWYpO1xuICAgICAgICBsZXQgY3VyUmVmcyA9IGN1cnJlbnRQcmVzZW5jZS5tZXRhcy5tYXAoKG0pID0+IG0ucGh4X3JlZik7XG4gICAgICAgIGxldCBqb2luZWRNZXRhcyA9IG5ld1ByZXNlbmNlLm1ldGFzLmZpbHRlcigobSkgPT4gY3VyUmVmcy5pbmRleE9mKG0ucGh4X3JlZikgPCAwKTtcbiAgICAgICAgbGV0IGxlZnRNZXRhcyA9IGN1cnJlbnRQcmVzZW5jZS5tZXRhcy5maWx0ZXIoKG0pID0+IG5ld1JlZnMuaW5kZXhPZihtLnBoeF9yZWYpIDwgMCk7XG4gICAgICAgIGlmIChqb2luZWRNZXRhcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgam9pbnNba2V5XSA9IG5ld1ByZXNlbmNlO1xuICAgICAgICAgIGpvaW5zW2tleV0ubWV0YXMgPSBqb2luZWRNZXRhcztcbiAgICAgICAgfVxuICAgICAgICBpZiAobGVmdE1ldGFzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBsZWF2ZXNba2V5XSA9IHRoaXMuY2xvbmUoY3VycmVudFByZXNlbmNlKTtcbiAgICAgICAgICBsZWF2ZXNba2V5XS5tZXRhcyA9IGxlZnRNZXRhcztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgam9pbnNba2V5XSA9IG5ld1ByZXNlbmNlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLnN5bmNEaWZmKHN0YXRlLCB7IGpvaW5zLCBsZWF2ZXMgfSwgb25Kb2luLCBvbkxlYXZlKTtcbiAgfVxuICAvKipcbiAgICpcbiAgICogVXNlZCB0byBzeW5jIGEgZGlmZiBvZiBwcmVzZW5jZSBqb2luIGFuZCBsZWF2ZVxuICAgKiBldmVudHMgZnJvbSB0aGUgc2VydmVyLCBhcyB0aGV5IGhhcHBlbi4gTGlrZSBgc3luY1N0YXRlYCwgYHN5bmNEaWZmYFxuICAgKiBhY2NlcHRzIG9wdGlvbmFsIGBvbkpvaW5gIGFuZCBgb25MZWF2ZWAgY2FsbGJhY2tzIHRvIHJlYWN0IHRvIGEgdXNlclxuICAgKiBqb2luaW5nIG9yIGxlYXZpbmcgZnJvbSBhIGRldmljZS5cbiAgICpcbiAgICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBQcmVzZW5jZVN0YXRlPn0gc3RhdGVcbiAgICogQHBhcmFtIHtQcmVzZW5jZURpZmZ9IGRpZmZcbiAgICogQHBhcmFtIHtQcmVzZW5jZU9uSm9pbn0gb25Kb2luXG4gICAqIEBwYXJhbSB7UHJlc2VuY2VPbkxlYXZlfSBvbkxlYXZlXG4gICAqXG4gICAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBQcmVzZW5jZVN0YXRlPn1cbiAgICovXG4gIHN0YXRpYyBzeW5jRGlmZihzdGF0ZSwgZGlmZiwgb25Kb2luLCBvbkxlYXZlKSB7XG4gICAgbGV0IHsgam9pbnMsIGxlYXZlcyB9ID0gdGhpcy5jbG9uZShkaWZmKTtcbiAgICBpZiAoIW9uSm9pbikge1xuICAgICAgb25Kb2luID0gZnVuY3Rpb24oKSB7XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoIW9uTGVhdmUpIHtcbiAgICAgIG9uTGVhdmUgPSBmdW5jdGlvbigpIHtcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMubWFwKGpvaW5zLCAoa2V5LCBuZXdQcmVzZW5jZSkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnRQcmVzZW5jZSA9IHN0YXRlW2tleV07XG4gICAgICBzdGF0ZVtrZXldID0gdGhpcy5jbG9uZShuZXdQcmVzZW5jZSk7XG4gICAgICBpZiAoY3VycmVudFByZXNlbmNlKSB7XG4gICAgICAgIGxldCBqb2luZWRSZWZzID0gc3RhdGVba2V5XS5tZXRhcy5tYXAoKG0pID0+IG0ucGh4X3JlZik7XG4gICAgICAgIGxldCBjdXJNZXRhcyA9IGN1cnJlbnRQcmVzZW5jZS5tZXRhcy5maWx0ZXIoKG0pID0+IGpvaW5lZFJlZnMuaW5kZXhPZihtLnBoeF9yZWYpIDwgMCk7XG4gICAgICAgIHN0YXRlW2tleV0ubWV0YXMudW5zaGlmdCguLi5jdXJNZXRhcyk7XG4gICAgICB9XG4gICAgICBvbkpvaW4oa2V5LCBjdXJyZW50UHJlc2VuY2UsIG5ld1ByZXNlbmNlKTtcbiAgICB9KTtcbiAgICB0aGlzLm1hcChsZWF2ZXMsIChrZXksIGxlZnRQcmVzZW5jZSkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnRQcmVzZW5jZSA9IHN0YXRlW2tleV07XG4gICAgICBpZiAoIWN1cnJlbnRQcmVzZW5jZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBsZXQgcmVmc1RvUmVtb3ZlID0gbGVmdFByZXNlbmNlLm1ldGFzLm1hcCgobSkgPT4gbS5waHhfcmVmKTtcbiAgICAgIGN1cnJlbnRQcmVzZW5jZS5tZXRhcyA9IGN1cnJlbnRQcmVzZW5jZS5tZXRhcy5maWx0ZXIoKHApID0+IHtcbiAgICAgICAgcmV0dXJuIHJlZnNUb1JlbW92ZS5pbmRleE9mKHAucGh4X3JlZikgPCAwO1xuICAgICAgfSk7XG4gICAgICBvbkxlYXZlKGtleSwgY3VycmVudFByZXNlbmNlLCBsZWZ0UHJlc2VuY2UpO1xuICAgICAgaWYgKGN1cnJlbnRQcmVzZW5jZS5tZXRhcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZGVsZXRlIHN0YXRlW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHN0YXRlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcmVzZW5jZXMsIHdpdGggc2VsZWN0ZWQgbWV0YWRhdGEuXG4gICAqXG4gICAqIEB0ZW1wbGF0ZSBbVD1QcmVzZW5jZVN0YXRlXVxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIFByZXNlbmNlU3RhdGU+fSBwcmVzZW5jZXNcbiAgICogQHBhcmFtIHsoKGtleTogc3RyaW5nLCBvYmo6IFByZXNlbmNlU3RhdGUpID0+IFQpfSBbY2hvb3Nlcl1cbiAgICpcbiAgICogQHJldHVybnMge1RbXX1cbiAgICovXG4gIHN0YXRpYyBsaXN0KHByZXNlbmNlcywgY2hvb3Nlcikge1xuICAgIGlmICghY2hvb3Nlcikge1xuICAgICAgY2hvb3NlciA9IGZ1bmN0aW9uKGtleSwgcHJlcykge1xuICAgICAgICByZXR1cm4gcHJlcztcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1hcChwcmVzZW5jZXMsIChrZXksIHByZXNlbmNlKSA9PiB7XG4gICAgICByZXR1cm4gY2hvb3NlcihrZXksIHByZXNlbmNlKTtcbiAgICB9KTtcbiAgfVxuICAvLyBwcml2YXRlXG4gIC8qKlxuICAqIEB0ZW1wbGF0ZSBUXG4gICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBQcmVzZW5jZVN0YXRlPn0gb2JqXG4gICogQHBhcmFtIHsoa2V5OiBzdHJpbmcsIG9iajogUHJlc2VuY2VTdGF0ZSkgPT4gVH0gZnVuY1xuICAqL1xuICBzdGF0aWMgbWFwKG9iaiwgZnVuYykge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLm1hcCgoa2V5KSA9PiBmdW5jKGtleSwgb2JqW2tleV0pKTtcbiAgfVxuICAvKipcbiAgKiBAdGVtcGxhdGUgVFxuICAqIEBwYXJhbSB7VH0gb2JqXG4gICogQHJldHVybnMge1R9XG4gICovXG4gIHN0YXRpYyBjbG9uZShvYmopIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKTtcbiAgfVxufTtcblxuLy8ganMvcGhvZW5peC9zZXJpYWxpemVyLmpzXG52YXIgc2VyaWFsaXplcl9kZWZhdWx0ID0ge1xuICBIRUFERVJfTEVOR1RIOiAxLFxuICBNRVRBX0xFTkdUSDogNCxcbiAgS0lORFM6IHsgcHVzaDogMCwgcmVwbHk6IDEsIGJyb2FkY2FzdDogMiB9LFxuICAvKipcbiAgKiBAdGVtcGxhdGUgVFxuICAqIEBwYXJhbSB7TWVzc2FnZTxSZWNvcmQ8c3RyaW5nLCBhbnk+Pn0gbXNnXG4gICogQHBhcmFtIHsobXNnOiBBcnJheUJ1ZmZlciB8IHN0cmluZykgPT4gVH0gY2FsbGJhY2tcbiAgKiBAcmV0dXJucyB7VH1cbiAgKi9cbiAgZW5jb2RlKG1zZywgY2FsbGJhY2spIHtcbiAgICBpZiAobXNnLnBheWxvYWQuY29uc3RydWN0b3IgPT09IEFycmF5QnVmZmVyKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sodGhpcy5iaW5hcnlFbmNvZGUobXNnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwYXlsb2FkID0gW21zZy5qb2luX3JlZiwgbXNnLnJlZiwgbXNnLnRvcGljLCBtc2cuZXZlbnQsIG1zZy5wYXlsb2FkXTtcbiAgICAgIHJldHVybiBjYWxsYmFjayhKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XG4gICAgfVxuICB9LFxuICAvKipcbiAgKiBAdGVtcGxhdGUgVFxuICAqIEBwYXJhbSB7QXJyYXlCdWZmZXIgfCBzdHJpbmd9IHJhd1BheWxvYWRcbiAgKiBAcGFyYW0geyhtc2c6IE1lc3NhZ2U8dW5rbm93bj4pID0+IFR9IGNhbGxiYWNrXG4gICogQHJldHVybnMge1R9XG4gICovXG4gIGRlY29kZShyYXdQYXlsb2FkLCBjYWxsYmFjaykge1xuICAgIGlmIChyYXdQYXlsb2FkLmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHRoaXMuYmluYXJ5RGVjb2RlKHJhd1BheWxvYWQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IFtqb2luX3JlZiwgcmVmLCB0b3BpYywgZXZlbnQsIHBheWxvYWRdID0gSlNPTi5wYXJzZShyYXdQYXlsb2FkKTtcbiAgICAgIHJldHVybiBjYWxsYmFjayh7IGpvaW5fcmVmLCByZWYsIHRvcGljLCBldmVudCwgcGF5bG9hZCB9KTtcbiAgICB9XG4gIH0sXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICBiaW5hcnlFbmNvZGUobWVzc2FnZSkge1xuICAgIGxldCB7IGpvaW5fcmVmLCByZWYsIGV2ZW50LCB0b3BpYywgcGF5bG9hZCB9ID0gbWVzc2FnZTtcbiAgICBsZXQgbWV0YUxlbmd0aCA9IHRoaXMuTUVUQV9MRU5HVEggKyBqb2luX3JlZi5sZW5ndGggKyByZWYubGVuZ3RoICsgdG9waWMubGVuZ3RoICsgZXZlbnQubGVuZ3RoO1xuICAgIGxldCBoZWFkZXIgPSBuZXcgQXJyYXlCdWZmZXIodGhpcy5IRUFERVJfTEVOR1RIICsgbWV0YUxlbmd0aCk7XG4gICAgbGV0IHZpZXcgPSBuZXcgRGF0YVZpZXcoaGVhZGVyKTtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCB0aGlzLktJTkRTLnB1c2gpO1xuICAgIHZpZXcuc2V0VWludDgob2Zmc2V0KyssIGpvaW5fcmVmLmxlbmd0aCk7XG4gICAgdmlldy5zZXRVaW50OChvZmZzZXQrKywgcmVmLmxlbmd0aCk7XG4gICAgdmlldy5zZXRVaW50OChvZmZzZXQrKywgdG9waWMubGVuZ3RoKTtcbiAgICB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCBldmVudC5sZW5ndGgpO1xuICAgIEFycmF5LmZyb20oam9pbl9yZWYsIChjaGFyKSA9PiB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCBjaGFyLmNoYXJDb2RlQXQoMCkpKTtcbiAgICBBcnJheS5mcm9tKHJlZiwgKGNoYXIpID0+IHZpZXcuc2V0VWludDgob2Zmc2V0KyssIGNoYXIuY2hhckNvZGVBdCgwKSkpO1xuICAgIEFycmF5LmZyb20odG9waWMsIChjaGFyKSA9PiB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCBjaGFyLmNoYXJDb2RlQXQoMCkpKTtcbiAgICBBcnJheS5mcm9tKGV2ZW50LCAoY2hhcikgPT4gdmlldy5zZXRVaW50OChvZmZzZXQrKywgY2hhci5jaGFyQ29kZUF0KDApKSk7XG4gICAgdmFyIGNvbWJpbmVkID0gbmV3IFVpbnQ4QXJyYXkoaGVhZGVyLmJ5dGVMZW5ndGggKyBwYXlsb2FkLmJ5dGVMZW5ndGgpO1xuICAgIGNvbWJpbmVkLnNldChuZXcgVWludDhBcnJheShoZWFkZXIpLCAwKTtcbiAgICBjb21iaW5lZC5zZXQobmV3IFVpbnQ4QXJyYXkocGF5bG9hZCksIGhlYWRlci5ieXRlTGVuZ3RoKTtcbiAgICByZXR1cm4gY29tYmluZWQuYnVmZmVyO1xuICB9LFxuICAvKipcbiAgKiBAcHJpdmF0ZVxuICAqL1xuICBiaW5hcnlEZWNvZGUoYnVmZmVyKSB7XG4gICAgbGV0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyKTtcbiAgICBsZXQga2luZCA9IHZpZXcuZ2V0VWludDgoMCk7XG4gICAgbGV0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgIGNhc2UgdGhpcy5LSU5EUy5wdXNoOlxuICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGVQdXNoKGJ1ZmZlciwgdmlldywgZGVjb2Rlcik7XG4gICAgICBjYXNlIHRoaXMuS0lORFMucmVwbHk6XG4gICAgICAgIHJldHVybiB0aGlzLmRlY29kZVJlcGx5KGJ1ZmZlciwgdmlldywgZGVjb2Rlcik7XG4gICAgICBjYXNlIHRoaXMuS0lORFMuYnJvYWRjYXN0OlxuICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGVCcm9hZGNhc3QoYnVmZmVyLCB2aWV3LCBkZWNvZGVyKTtcbiAgICB9XG4gIH0sXG4gIC8qKiBAcHJpdmF0ZSAqL1xuICBkZWNvZGVQdXNoKGJ1ZmZlciwgdmlldywgZGVjb2Rlcikge1xuICAgIGxldCBqb2luUmVmU2l6ZSA9IHZpZXcuZ2V0VWludDgoMSk7XG4gICAgbGV0IHRvcGljU2l6ZSA9IHZpZXcuZ2V0VWludDgoMik7XG4gICAgbGV0IGV2ZW50U2l6ZSA9IHZpZXcuZ2V0VWludDgoMyk7XG4gICAgbGV0IG9mZnNldCA9IHRoaXMuSEVBREVSX0xFTkdUSCArIHRoaXMuTUVUQV9MRU5HVEggLSAxO1xuICAgIGxldCBqb2luUmVmID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgam9pblJlZlNpemUpKTtcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyBqb2luUmVmU2l6ZTtcbiAgICBsZXQgdG9waWMgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyB0b3BpY1NpemUpKTtcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyB0b3BpY1NpemU7XG4gICAgbGV0IGV2ZW50ID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgZXZlbnRTaXplKSk7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgZXZlbnRTaXplO1xuICAgIGxldCBkYXRhID0gYnVmZmVyLnNsaWNlKG9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgIHJldHVybiB7IGpvaW5fcmVmOiBqb2luUmVmLCByZWY6IG51bGwsIHRvcGljLCBldmVudCwgcGF5bG9hZDogZGF0YSB9O1xuICB9LFxuICAvKiogQHByaXZhdGUgKi9cbiAgZGVjb2RlUmVwbHkoYnVmZmVyLCB2aWV3LCBkZWNvZGVyKSB7XG4gICAgbGV0IGpvaW5SZWZTaXplID0gdmlldy5nZXRVaW50OCgxKTtcbiAgICBsZXQgcmVmU2l6ZSA9IHZpZXcuZ2V0VWludDgoMik7XG4gICAgbGV0IHRvcGljU2l6ZSA9IHZpZXcuZ2V0VWludDgoMyk7XG4gICAgbGV0IGV2ZW50U2l6ZSA9IHZpZXcuZ2V0VWludDgoNCk7XG4gICAgbGV0IG9mZnNldCA9IHRoaXMuSEVBREVSX0xFTkdUSCArIHRoaXMuTUVUQV9MRU5HVEg7XG4gICAgbGV0IGpvaW5SZWYgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBqb2luUmVmU2l6ZSkpO1xuICAgIG9mZnNldCA9IG9mZnNldCArIGpvaW5SZWZTaXplO1xuICAgIGxldCByZWYgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyByZWZTaXplKSk7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgcmVmU2l6ZTtcbiAgICBsZXQgdG9waWMgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyB0b3BpY1NpemUpKTtcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyB0b3BpY1NpemU7XG4gICAgbGV0IGV2ZW50ID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgZXZlbnRTaXplKSk7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgZXZlbnRTaXplO1xuICAgIGxldCBkYXRhID0gYnVmZmVyLnNsaWNlKG9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgIGxldCBwYXlsb2FkID0geyBzdGF0dXM6IGV2ZW50LCByZXNwb25zZTogZGF0YSB9O1xuICAgIHJldHVybiB7IGpvaW5fcmVmOiBqb2luUmVmLCByZWYsIHRvcGljLCBldmVudDogQ0hBTk5FTF9FVkVOVFMucmVwbHksIHBheWxvYWQgfTtcbiAgfSxcbiAgLyoqIEBwcml2YXRlICovXG4gIGRlY29kZUJyb2FkY2FzdChidWZmZXIsIHZpZXcsIGRlY29kZXIpIHtcbiAgICBsZXQgdG9waWNTaXplID0gdmlldy5nZXRVaW50OCgxKTtcbiAgICBsZXQgZXZlbnRTaXplID0gdmlldy5nZXRVaW50OCgyKTtcbiAgICBsZXQgb2Zmc2V0ID0gdGhpcy5IRUFERVJfTEVOR1RIICsgMjtcbiAgICBsZXQgdG9waWMgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyB0b3BpY1NpemUpKTtcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyB0b3BpY1NpemU7XG4gICAgbGV0IGV2ZW50ID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgZXZlbnRTaXplKSk7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgZXZlbnRTaXplO1xuICAgIGxldCBkYXRhID0gYnVmZmVyLnNsaWNlKG9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpO1xuICAgIHJldHVybiB7IGpvaW5fcmVmOiBudWxsLCByZWY6IG51bGwsIHRvcGljLCBldmVudCwgcGF5bG9hZDogZGF0YSB9O1xuICB9XG59O1xuXG4vLyBqcy9waG9lbml4L3NvY2tldC5qc1xudmFyIFNvY2tldCA9IGNsYXNzIHtcbiAgLyoqIEluaXRpYWxpemVzIHRoZSBTb2NrZXQgKlxuICAgKlxuICAgKiBGb3IgSUU4IHN1cHBvcnQgdXNlIGFuIEVTNS1zaGltIChodHRwczovL2dpdGh1Yi5jb20vZXMtc2hpbXMvZXM1LXNoaW0pXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW5kUG9pbnQgLSBUaGUgc3RyaW5nIFdlYlNvY2tldCBlbmRwb2ludCwgaWUsIGBcIndzOi8vZXhhbXBsZS5jb20vc29ja2V0XCJgLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFwid3NzOi8vZXhhbXBsZS5jb21cImBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcIi9zb2NrZXRcImAgKGluaGVyaXRlZCBob3N0ICYgcHJvdG9jb2wpXG4gICAqIEBwYXJhbSB7U29ja2V0T3B0aW9uc30gW29wdHNdIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvblxuICAgKi9cbiAgY29uc3RydWN0b3IoZW5kUG9pbnQsIG9wdHMgPSB7fSkge1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MgPSB7IG9wZW46IFtdLCBjbG9zZTogW10sIGVycm9yOiBbXSwgbWVzc2FnZTogW10gfTtcbiAgICB0aGlzLmNoYW5uZWxzID0gW107XG4gICAgdGhpcy5zZW5kQnVmZmVyID0gW107XG4gICAgdGhpcy5yZWYgPSAwO1xuICAgIHRoaXMuZmFsbGJhY2tSZWYgPSBudWxsO1xuICAgIHRoaXMudGltZW91dCA9IG9wdHMudGltZW91dCB8fCBERUZBVUxUX1RJTUVPVVQ7XG4gICAgdGhpcy50cmFuc3BvcnQgPSBvcHRzLnRyYW5zcG9ydCB8fCBnbG9iYWwuV2ViU29ja2V0IHx8IExvbmdQb2xsO1xuICAgIHRoaXMuY29ubiA9IHZvaWQgMDtcbiAgICB0aGlzLnByaW1hcnlQYXNzZWRIZWFsdGhDaGVjayA9IGZhbHNlO1xuICAgIHRoaXMubG9uZ1BvbGxGYWxsYmFja01zID0gb3B0cy5sb25nUG9sbEZhbGxiYWNrTXM7XG4gICAgdGhpcy5mYWxsYmFja1RpbWVyID0gbnVsbDtcbiAgICB0aGlzLnNlc3Npb25TdG9yZSA9IG9wdHMuc2Vzc2lvblN0b3JhZ2UgfHwgZ2xvYmFsICYmIGdsb2JhbC5zZXNzaW9uU3RvcmFnZTtcbiAgICB0aGlzLmVzdGFibGlzaGVkQ29ubmVjdGlvbnMgPSAwO1xuICAgIHRoaXMuZGVmYXVsdEVuY29kZXIgPSBzZXJpYWxpemVyX2RlZmF1bHQuZW5jb2RlLmJpbmQoc2VyaWFsaXplcl9kZWZhdWx0KTtcbiAgICB0aGlzLmRlZmF1bHREZWNvZGVyID0gc2VyaWFsaXplcl9kZWZhdWx0LmRlY29kZS5iaW5kKHNlcmlhbGl6ZXJfZGVmYXVsdCk7XG4gICAgdGhpcy5jbG9zZVdhc0NsZWFuID0gdHJ1ZTtcbiAgICB0aGlzLmRpc2Nvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmJpbmFyeVR5cGUgPSBvcHRzLmJpbmFyeVR5cGUgfHwgXCJhcnJheWJ1ZmZlclwiO1xuICAgIHRoaXMuY29ubmVjdENsb2NrID0gMTtcbiAgICB0aGlzLnBhZ2VIaWRkZW4gPSBmYWxzZTtcbiAgICB0aGlzLmVuY29kZSA9IHZvaWQgMDtcbiAgICB0aGlzLmRlY29kZSA9IHZvaWQgMDtcbiAgICBpZiAodGhpcy50cmFuc3BvcnQgIT09IExvbmdQb2xsKSB7XG4gICAgICB0aGlzLmVuY29kZSA9IG9wdHMuZW5jb2RlIHx8IHRoaXMuZGVmYXVsdEVuY29kZXI7XG4gICAgICB0aGlzLmRlY29kZSA9IG9wdHMuZGVjb2RlIHx8IHRoaXMuZGVmYXVsdERlY29kZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZW5jb2RlID0gdGhpcy5kZWZhdWx0RW5jb2RlcjtcbiAgICAgIHRoaXMuZGVjb2RlID0gdGhpcy5kZWZhdWx0RGVjb2RlcjtcbiAgICB9XG4gICAgbGV0IGF3YWl0aW5nQ29ubmVjdGlvbk9uUGFnZVNob3cgPSBudWxsO1xuICAgIGlmIChwaHhXaW5kb3cgJiYgcGh4V2luZG93LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHBoeFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicGFnZWhpZGVcIiwgKF9lKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbm4pIHtcbiAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICBhd2FpdGluZ0Nvbm5lY3Rpb25PblBhZ2VTaG93ID0gdGhpcy5jb25uZWN0Q2xvY2s7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcGh4V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlc2hvd1wiLCAoX2UpID0+IHtcbiAgICAgICAgaWYgKGF3YWl0aW5nQ29ubmVjdGlvbk9uUGFnZVNob3cgPT09IHRoaXMuY29ubmVjdENsb2NrKSB7XG4gICAgICAgICAgYXdhaXRpbmdDb25uZWN0aW9uT25QYWdlU2hvdyA9IG51bGw7XG4gICAgICAgICAgdGhpcy5jb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcGh4V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsICgpID0+IHtcbiAgICAgICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gXCJoaWRkZW5cIikge1xuICAgICAgICAgIHRoaXMucGFnZUhpZGRlbiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wYWdlSGlkZGVuID0gZmFsc2U7XG4gICAgICAgICAgaWYgKCF0aGlzLmlzQ29ubmVjdGVkKCkgJiYgIXRoaXMuY2xvc2VXYXNDbGVhbikge1xuICAgICAgICAgICAgdGhpcy50ZWFyZG93bigoKSA9PiB0aGlzLmNvbm5lY3QoKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5oZWFydGJlYXRJbnRlcnZhbE1zID0gb3B0cy5oZWFydGJlYXRJbnRlcnZhbE1zIHx8IDNlNDtcbiAgICB0aGlzLmF1dG9TZW5kSGVhcnRiZWF0ID0gb3B0cy5hdXRvU2VuZEhlYXJ0YmVhdCA/PyB0cnVlO1xuICAgIHRoaXMuaGVhcnRiZWF0Q2FsbGJhY2sgPSBvcHRzLmhlYXJ0YmVhdENhbGxiYWNrID8/ICgoKSA9PiB7XG4gICAgfSk7XG4gICAgdGhpcy5yZWpvaW5BZnRlck1zID0gKHRyaWVzKSA9PiB7XG4gICAgICBpZiAob3B0cy5yZWpvaW5BZnRlck1zKSB7XG4gICAgICAgIHJldHVybiBvcHRzLnJlam9pbkFmdGVyTXModHJpZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFsxZTMsIDJlMywgNWUzXVt0cmllcyAtIDFdIHx8IDFlNDtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMucmVjb25uZWN0QWZ0ZXJNcyA9ICh0cmllcykgPT4ge1xuICAgICAgaWYgKG9wdHMucmVjb25uZWN0QWZ0ZXJNcykge1xuICAgICAgICByZXR1cm4gb3B0cy5yZWNvbm5lY3RBZnRlck1zKHRyaWVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbMTAsIDUwLCAxMDAsIDE1MCwgMjAwLCAyNTAsIDUwMCwgMWUzLCAyZTNdW3RyaWVzIC0gMV0gfHwgNWUzO1xuICAgICAgfVxuICAgIH07XG4gICAgdGhpcy5sb2dnZXIgPSBvcHRzLmxvZ2dlciB8fCBudWxsO1xuICAgIGlmICghdGhpcy5sb2dnZXIgJiYgb3B0cy5kZWJ1Zykge1xuICAgICAgdGhpcy5sb2dnZXIgPSAoa2luZCwgbXNnLCBkYXRhKSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAke2tpbmR9OiAke21zZ31gLCBkYXRhKTtcbiAgICAgIH07XG4gICAgfVxuICAgIHRoaXMubG9uZ3BvbGxlclRpbWVvdXQgPSBvcHRzLmxvbmdwb2xsZXJUaW1lb3V0IHx8IDJlNDtcbiAgICB0aGlzLnBhcmFtcyA9IGNsb3N1cmUob3B0cy5wYXJhbXMgfHwge30pO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBgJHtlbmRQb2ludH0vJHtUUkFOU1BPUlRTLndlYnNvY2tldH1gO1xuICAgIHRoaXMudnNuID0gb3B0cy52c24gfHwgREVGQVVMVF9WU047XG4gICAgdGhpcy5oZWFydGJlYXRUaW1lb3V0VGltZXIgPSBudWxsO1xuICAgIHRoaXMuaGVhcnRiZWF0VGltZXIgPSBudWxsO1xuICAgIHRoaXMuaGVhcnRiZWF0U2VudEF0ID0gbnVsbDtcbiAgICB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgPSBudWxsO1xuICAgIHRoaXMucmVjb25uZWN0VGltZXIgPSBuZXcgVGltZXIoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucGFnZUhpZGRlbikge1xuICAgICAgICB0aGlzLmxvZyhcIk5vdCByZWNvbm5lY3RpbmcgYXMgcGFnZSBpcyBoaWRkZW4hXCIpO1xuICAgICAgICB0aGlzLnRlYXJkb3duKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMudGVhcmRvd24oYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAob3B0cy5iZWZvcmVSZWNvbm5lY3QpIGF3YWl0IG9wdHMuYmVmb3JlUmVjb25uZWN0KCk7XG4gICAgICAgIHRoaXMuY29ubmVjdCgpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5yZWNvbm5lY3RBZnRlck1zKTtcbiAgICB0aGlzLmF1dGhUb2tlbiA9IG9wdHMuYXV0aFRva2VuO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBMb25nUG9sbCB0cmFuc3BvcnQgcmVmZXJlbmNlXG4gICAqL1xuICBnZXRMb25nUG9sbFRyYW5zcG9ydCgpIHtcbiAgICByZXR1cm4gTG9uZ1BvbGw7XG4gIH1cbiAgLyoqXG4gICAqIERpc2Nvbm5lY3RzIGFuZCByZXBsYWNlcyB0aGUgYWN0aXZlIHRyYW5zcG9ydFxuICAgKlxuICAgKiBAcGFyYW0ge1NvY2tldFRyYW5zcG9ydH0gbmV3VHJhbnNwb3J0IC0gVGhlIG5ldyB0cmFuc3BvcnQgY2xhc3MgdG8gaW5zdGFudGlhdGVcbiAgICpcbiAgICovXG4gIHJlcGxhY2VUcmFuc3BvcnQobmV3VHJhbnNwb3J0KSB7XG4gICAgdGhpcy5jb25uZWN0Q2xvY2srKztcbiAgICB0aGlzLmNsb3NlV2FzQ2xlYW4gPSB0cnVlO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmZhbGxiYWNrVGltZXIpO1xuICAgIHRoaXMucmVjb25uZWN0VGltZXIucmVzZXQoKTtcbiAgICBpZiAodGhpcy5jb25uKSB7XG4gICAgICB0aGlzLmNvbm4uY2xvc2UoKTtcbiAgICAgIHRoaXMuY29ubiA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMudHJhbnNwb3J0ID0gbmV3VHJhbnNwb3J0O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzb2NrZXQgcHJvdG9jb2xcbiAgICpcbiAgICogQHJldHVybnMge1wid3NzXCIgfCBcIndzXCJ9XG4gICAqL1xuICBwcm90b2NvbCgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24ucHJvdG9jb2wubWF0Y2goL15odHRwcy8pID8gXCJ3c3NcIiA6IFwid3NcIjtcbiAgfVxuICAvKipcbiAgICogVGhlIGZ1bGx5IHF1YWxpZmllZCBzb2NrZXQgdXJsXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBlbmRQb2ludFVSTCgpIHtcbiAgICBsZXQgdXJpID0gQWpheC5hcHBlbmRQYXJhbXMoXG4gICAgICBBamF4LmFwcGVuZFBhcmFtcyh0aGlzLmVuZFBvaW50LCB0aGlzLnBhcmFtcygpKSxcbiAgICAgIHsgdnNuOiB0aGlzLnZzbiB9XG4gICAgKTtcbiAgICBpZiAodXJpLmNoYXJBdCgwKSAhPT0gXCIvXCIpIHtcbiAgICAgIHJldHVybiB1cmk7XG4gICAgfVxuICAgIGlmICh1cmkuY2hhckF0KDEpID09PSBcIi9cIikge1xuICAgICAgcmV0dXJuIGAke3RoaXMucHJvdG9jb2woKX06JHt1cml9YDtcbiAgICB9XG4gICAgcmV0dXJuIGAke3RoaXMucHJvdG9jb2woKX06Ly8ke2xvY2F0aW9uLmhvc3R9JHt1cml9YDtcbiAgfVxuICAvKipcbiAgICogRGlzY29ubmVjdHMgdGhlIHNvY2tldFxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0Nsb3NlRXZlbnQjU3RhdHVzX2NvZGVzIGZvciB2YWxpZCBzdGF0dXMgY29kZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gW2NhbGxiYWNrXSAtIE9wdGlvbmFsIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBzb2NrZXQgaXMgZGlzY29ubmVjdGVkLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2NvZGVdIC0gQSBzdGF0dXMgY29kZSBmb3IgZGlzY29ubmVjdGlvbiAoT3B0aW9uYWwpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3JlYXNvbl0gLSBBIHRleHR1YWwgZGVzY3JpcHRpb24gb2YgdGhlIHJlYXNvbiB0byBkaXNjb25uZWN0LiAoT3B0aW9uYWwpXG4gICAqL1xuICBkaXNjb25uZWN0KGNhbGxiYWNrLCBjb2RlLCByZWFzb24pIHtcbiAgICB0aGlzLmNvbm5lY3RDbG9jaysrO1xuICAgIHRoaXMuZGlzY29ubmVjdGluZyA9IHRydWU7XG4gICAgdGhpcy5jbG9zZVdhc0NsZWFuID0gdHJ1ZTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5mYWxsYmFja1RpbWVyKTtcbiAgICB0aGlzLnJlY29ubmVjdFRpbWVyLnJlc2V0KCk7XG4gICAgdGhpcy50ZWFyZG93bigoKSA9PiB7XG4gICAgICB0aGlzLmRpc2Nvbm5lY3RpbmcgPSBmYWxzZTtcbiAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgfSwgY29kZSwgcmVhc29uKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtQYXJhbXN9IFtwYXJhbXNdIC0gW0RFUFJFQ0FURURdIFRoZSBwYXJhbXMgdG8gc2VuZCB3aGVuIGNvbm5lY3RpbmcsIGZvciBleGFtcGxlIGB7dXNlcl9pZDogdXNlclRva2VufWBcbiAgICpcbiAgICogUGFzc2luZyBwYXJhbXMgdG8gY29ubmVjdCBpcyBkZXByZWNhdGVkOyBwYXNzIHRoZW0gaW4gdGhlIFNvY2tldCBjb25zdHJ1Y3RvciBpbnN0ZWFkOlxuICAgKiBgbmV3IFNvY2tldChcIi9zb2NrZXRcIiwge3BhcmFtczoge3VzZXJfaWQ6IHVzZXJUb2tlbn19KWAuXG4gICAqL1xuICBjb25uZWN0KHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMpIHtcbiAgICAgIGNvbnNvbGUgJiYgY29uc29sZS5sb2coXCJwYXNzaW5nIHBhcmFtcyB0byBjb25uZWN0IGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQgcGFzcyA6cGFyYW1zIHRvIHRoZSBTb2NrZXQgY29uc3RydWN0b3JcIik7XG4gICAgICB0aGlzLnBhcmFtcyA9IGNsb3N1cmUocGFyYW1zKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29ubiAmJiAhdGhpcy5kaXNjb25uZWN0aW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmxvbmdQb2xsRmFsbGJhY2tNcyAmJiB0aGlzLnRyYW5zcG9ydCAhPT0gTG9uZ1BvbGwpIHtcbiAgICAgIHRoaXMuY29ubmVjdFdpdGhGYWxsYmFjayhMb25nUG9sbCwgdGhpcy5sb25nUG9sbEZhbGxiYWNrTXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRyYW5zcG9ydENvbm5lY3QoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIExvZ3MgdGhlIG1lc3NhZ2UuIE92ZXJyaWRlIGB0aGlzLmxvZ2dlcmAgZm9yIHNwZWNpYWxpemVkIGxvZ2dpbmcuIG5vb3BzIGJ5IGRlZmF1bHRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtpbmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1zZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gZGF0YVxuICAgKi9cbiAgbG9nKGtpbmQsIG1zZywgZGF0YSkge1xuICAgIHRoaXMubG9nZ2VyICYmIHRoaXMubG9nZ2VyKGtpbmQsIG1zZywgZGF0YSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhIGxvZ2dlciBoYXMgYmVlbiBzZXQgb24gdGhpcyBzb2NrZXQuXG4gICAqL1xuICBoYXNMb2dnZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMubG9nZ2VyICE9PSBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgY2FsbGJhY2tzIGZvciBjb25uZWN0aW9uIG9wZW4gZXZlbnRzXG4gICAqXG4gICAqIEBleGFtcGxlIHNvY2tldC5vbk9wZW4oZnVuY3Rpb24oKXsgY29uc29sZS5pbmZvKFwidGhlIHNvY2tldCB3YXMgb3BlbmVkXCIpIH0pXG4gICAqXG4gICAqIEBwYXJhbSB7U29ja2V0T25PcGVufSBjYWxsYmFja1xuICAgKi9cbiAgb25PcGVuKGNhbGxiYWNrKSB7XG4gICAgbGV0IHJlZiA9IHRoaXMubWFrZVJlZigpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3Mub3Blbi5wdXNoKFtyZWYsIGNhbGxiYWNrXSk7XG4gICAgcmV0dXJuIHJlZjtcbiAgfVxuICAvKipcbiAgICogUmVnaXN0ZXJzIGNhbGxiYWNrcyBmb3IgY29ubmVjdGlvbiBjbG9zZSBldmVudHNcbiAgICogQHBhcmFtIHtTb2NrZXRPbkNsb3NlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgb25DbG9zZShjYWxsYmFjaykge1xuICAgIGxldCByZWYgPSB0aGlzLm1ha2VSZWYoKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLmNsb3NlLnB1c2goW3JlZiwgY2FsbGJhY2tdKTtcbiAgICByZXR1cm4gcmVmO1xuICB9XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgY2FsbGJhY2tzIGZvciBjb25uZWN0aW9uIGVycm9yIGV2ZW50c1xuICAgKlxuICAgKiBAZXhhbXBsZSBzb2NrZXQub25FcnJvcihmdW5jdGlvbihlcnJvcil7IGFsZXJ0KFwiQW4gZXJyb3Igb2NjdXJyZWRcIikgfSlcbiAgICpcbiAgICogQHBhcmFtIHtTb2NrZXRPbkVycm9yfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgb25FcnJvcihjYWxsYmFjaykge1xuICAgIGxldCByZWYgPSB0aGlzLm1ha2VSZWYoKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLmVycm9yLnB1c2goW3JlZiwgY2FsbGJhY2tdKTtcbiAgICByZXR1cm4gcmVmO1xuICB9XG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgY2FsbGJhY2tzIGZvciBjb25uZWN0aW9uIG1lc3NhZ2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7U29ja2V0T25NZXNzYWdlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgb25NZXNzYWdlKGNhbGxiYWNrKSB7XG4gICAgbGV0IHJlZiA9IHRoaXMubWFrZVJlZigpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MubWVzc2FnZS5wdXNoKFtyZWYsIGNhbGxiYWNrXSk7XG4gICAgcmV0dXJuIHJlZjtcbiAgfVxuICAvKipcbiAgICogU2V0cyBhIGNhbGxiYWNrIHRoYXQgcmVjZWl2ZXMgbGlmZWN5Y2xlIGV2ZW50cyBmb3IgaW50ZXJuYWwgaGVhcnRiZWF0IG1lc3NhZ2VzLlxuICAgKiBVc2VmdWwgZm9yIGluc3RydW1lbnRpbmcgY29ubmVjdGlvbiBoZWFsdGggKGUuZy4gc2VudC9vay90aW1lb3V0L2Rpc2Nvbm5lY3RlZCkuXG4gICAqIEBwYXJhbSB7SGVhcnRiZWF0Q2FsbGJhY2t9IGNhbGxiYWNrXG4gICAqL1xuICBvbkhlYXJ0YmVhdChjYWxsYmFjaykge1xuICAgIHRoaXMuaGVhcnRiZWF0Q2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgfVxuICAvKipcbiAgICogUGluZ3MgdGhlIHNlcnZlciBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgd2l0aCB0aGUgUlRUIGluIG1pbGxpc2Vjb25kc1xuICAgKiBAcGFyYW0geyh0aW1lRGVsdGE6IG51bWJlcikgPT4gdm9pZH0gY2FsbGJhY2tcbiAgICpcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBwaW5nIHdhcyBwdXNoZWQgb3IgZmFsc2UgaWYgdW5hYmxlIHRvIGJlIHB1c2hlZC5cbiAgICovXG4gIHBpbmcoY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBsZXQgcmVmID0gdGhpcy5tYWtlUmVmKCk7XG4gICAgbGV0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5wdXNoKHsgdG9waWM6IFwicGhvZW5peFwiLCBldmVudDogXCJoZWFydGJlYXRcIiwgcGF5bG9hZDoge30sIHJlZiB9KTtcbiAgICBsZXQgb25Nc2dSZWYgPSB0aGlzLm9uTWVzc2FnZSgobXNnKSA9PiB7XG4gICAgICBpZiAobXNnLnJlZiA9PT0gcmVmKSB7XG4gICAgICAgIHRoaXMub2ZmKFtvbk1zZ1JlZl0pO1xuICAgICAgICBjYWxsYmFjayhEYXRlLm5vdygpIC0gc3RhcnRUaW1lKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn1cbiAgICovXG4gIHRyYW5zcG9ydE5hbWUodHJhbnNwb3J0KSB7XG4gICAgc3dpdGNoICh0cmFuc3BvcnQpIHtcbiAgICAgIGNhc2UgTG9uZ1BvbGw6XG4gICAgICAgIHJldHVybiBcIkxvbmdQb2xsXCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdHJhbnNwb3J0Lm5hbWU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdHJhbnNwb3J0Q29ubmVjdCgpIHtcbiAgICB0aGlzLmNvbm5lY3RDbG9jaysrO1xuICAgIHRoaXMuY2xvc2VXYXNDbGVhbiA9IGZhbHNlO1xuICAgIGxldCBwcm90b2NvbHMgPSB2b2lkIDA7XG4gICAgaWYgKHRoaXMuYXV0aFRva2VuKSB7XG4gICAgICBwcm90b2NvbHMgPSBbXCJwaG9lbml4XCIsIGAke0FVVEhfVE9LRU5fUFJFRklYfSR7YnRvYSh0aGlzLmF1dGhUb2tlbikucmVwbGFjZSgvPS9nLCBcIlwiKX1gXTtcbiAgICB9XG4gICAgdGhpcy5jb25uID0gbmV3IHRoaXMudHJhbnNwb3J0KHRoaXMuZW5kUG9pbnRVUkwoKSwgcHJvdG9jb2xzKTtcbiAgICB0aGlzLmNvbm4uYmluYXJ5VHlwZSA9IHRoaXMuYmluYXJ5VHlwZTtcbiAgICB0aGlzLmNvbm4udGltZW91dCA9IHRoaXMubG9uZ3BvbGxlclRpbWVvdXQ7XG4gICAgdGhpcy5jb25uLm9ub3BlbiA9ICgpID0+IHRoaXMub25Db25uT3BlbigpO1xuICAgIHRoaXMuY29ubi5vbmVycm9yID0gKGVycm9yKSA9PiB0aGlzLm9uQ29ubkVycm9yKGVycm9yKTtcbiAgICB0aGlzLmNvbm4ub25tZXNzYWdlID0gKGV2ZW50KSA9PiB0aGlzLm9uQ29ubk1lc3NhZ2UoZXZlbnQpO1xuICAgIHRoaXMuY29ubi5vbmNsb3NlID0gKGV2ZW50KSA9PiB0aGlzLm9uQ29ubkNsb3NlKGV2ZW50KTtcbiAgfVxuICBnZXRTZXNzaW9uKGtleSkge1xuICAgIHJldHVybiB0aGlzLnNlc3Npb25TdG9yZSAmJiB0aGlzLnNlc3Npb25TdG9yZS5nZXRJdGVtKGtleSk7XG4gIH1cbiAgc3RvcmVTZXNzaW9uKGtleSwgdmFsKSB7XG4gICAgdGhpcy5zZXNzaW9uU3RvcmUgJiYgdGhpcy5zZXNzaW9uU3RvcmUuc2V0SXRlbShrZXksIHZhbCk7XG4gIH1cbiAgY29ubmVjdFdpdGhGYWxsYmFjayhmYWxsYmFja1RyYW5zcG9ydCwgZmFsbGJhY2tUaHJlc2hvbGQgPSAyNTAwKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuZmFsbGJhY2tUaW1lcik7XG4gICAgbGV0IGVzdGFibGlzaGVkID0gZmFsc2U7XG4gICAgbGV0IHByaW1hcnlUcmFuc3BvcnQgPSB0cnVlO1xuICAgIGxldCBvcGVuUmVmLCBlcnJvclJlZjtcbiAgICBsZXQgZmFsbGJhY2tUcmFuc3BvcnROYW1lID0gdGhpcy50cmFuc3BvcnROYW1lKGZhbGxiYWNrVHJhbnNwb3J0KTtcbiAgICBsZXQgZmFsbGJhY2sgPSAocmVhc29uKSA9PiB7XG4gICAgICB0aGlzLmxvZyhcInRyYW5zcG9ydFwiLCBgZmFsbGluZyBiYWNrIHRvICR7ZmFsbGJhY2tUcmFuc3BvcnROYW1lfS4uLmAsIHJlYXNvbik7XG4gICAgICB0aGlzLm9mZihbb3BlblJlZiwgZXJyb3JSZWZdKTtcbiAgICAgIHByaW1hcnlUcmFuc3BvcnQgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVwbGFjZVRyYW5zcG9ydChmYWxsYmFja1RyYW5zcG9ydCk7XG4gICAgICB0aGlzLnRyYW5zcG9ydENvbm5lY3QoKTtcbiAgICB9O1xuICAgIGlmICh0aGlzLmdldFNlc3Npb24oYHBoeDpmYWxsYmFjazoke2ZhbGxiYWNrVHJhbnNwb3J0TmFtZX1gKSkge1xuICAgICAgcmV0dXJuIGZhbGxiYWNrKFwibWVtb3JpemVkXCIpO1xuICAgIH1cbiAgICB0aGlzLmZhbGxiYWNrVGltZXIgPSBzZXRUaW1lb3V0KGZhbGxiYWNrLCBmYWxsYmFja1RocmVzaG9sZCk7XG4gICAgZXJyb3JSZWYgPSB0aGlzLm9uRXJyb3IoKHJlYXNvbikgPT4ge1xuICAgICAgdGhpcy5sb2coXCJ0cmFuc3BvcnRcIiwgXCJlcnJvclwiLCByZWFzb24pO1xuICAgICAgaWYgKHByaW1hcnlUcmFuc3BvcnQgJiYgIWVzdGFibGlzaGVkKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZhbGxiYWNrVGltZXIpO1xuICAgICAgICBmYWxsYmFjayhyZWFzb24pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICh0aGlzLmZhbGxiYWNrUmVmKSB7XG4gICAgICB0aGlzLm9mZihbdGhpcy5mYWxsYmFja1JlZl0pO1xuICAgIH1cbiAgICB0aGlzLmZhbGxiYWNrUmVmID0gdGhpcy5vbk9wZW4oKCkgPT4ge1xuICAgICAgZXN0YWJsaXNoZWQgPSB0cnVlO1xuICAgICAgaWYgKCFwcmltYXJ5VHJhbnNwb3J0KSB7XG4gICAgICAgIGxldCBmYWxsYmFja1RyYW5zcG9ydE5hbWUyID0gdGhpcy50cmFuc3BvcnROYW1lKGZhbGxiYWNrVHJhbnNwb3J0KTtcbiAgICAgICAgaWYgKCF0aGlzLnByaW1hcnlQYXNzZWRIZWFsdGhDaGVjaykge1xuICAgICAgICAgIHRoaXMuc3RvcmVTZXNzaW9uKGBwaHg6ZmFsbGJhY2s6JHtmYWxsYmFja1RyYW5zcG9ydE5hbWUyfWAsIFwidHJ1ZVwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5sb2coXCJ0cmFuc3BvcnRcIiwgYGVzdGFibGlzaGVkICR7ZmFsbGJhY2tUcmFuc3BvcnROYW1lMn0gZmFsbGJhY2tgKTtcbiAgICAgIH1cbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZhbGxiYWNrVGltZXIpO1xuICAgICAgdGhpcy5mYWxsYmFja1RpbWVyID0gc2V0VGltZW91dChmYWxsYmFjaywgZmFsbGJhY2tUaHJlc2hvbGQpO1xuICAgICAgdGhpcy5waW5nKChydHQpID0+IHtcbiAgICAgICAgdGhpcy5sb2coXCJ0cmFuc3BvcnRcIiwgXCJjb25uZWN0ZWQgdG8gcHJpbWFyeSBhZnRlclwiLCBydHQpO1xuICAgICAgICB0aGlzLnByaW1hcnlQYXNzZWRIZWFsdGhDaGVjayA9IHRydWU7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmZhbGxiYWNrVGltZXIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy50cmFuc3BvcnRDb25uZWN0KCk7XG4gIH1cbiAgY2xlYXJIZWFydGJlYXRzKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmhlYXJ0YmVhdFRpbWVyKTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5oZWFydGJlYXRUaW1lb3V0VGltZXIpO1xuICB9XG4gIG9uQ29ubk9wZW4oKSB7XG4gICAgaWYgKHRoaXMuaGFzTG9nZ2VyKCkpIHRoaXMubG9nKFwidHJhbnNwb3J0XCIsIGBjb25uZWN0ZWQgdG8gJHt0aGlzLmVuZFBvaW50VVJMKCl9YCk7XG4gICAgdGhpcy5jbG9zZVdhc0NsZWFuID0gZmFsc2U7XG4gICAgdGhpcy5kaXNjb25uZWN0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5lc3RhYmxpc2hlZENvbm5lY3Rpb25zKys7XG4gICAgdGhpcy5mbHVzaFNlbmRCdWZmZXIoKTtcbiAgICB0aGlzLnJlY29ubmVjdFRpbWVyLnJlc2V0KCk7XG4gICAgaWYgKHRoaXMuYXV0b1NlbmRIZWFydGJlYXQpIHtcbiAgICAgIHRoaXMucmVzZXRIZWFydGJlYXQoKTtcbiAgICB9XG4gICAgdGhpcy50cmlnZ2VyU3RhdGVDYWxsYmFja3MoXCJvcGVuXCIpO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaGVhcnRiZWF0VGltZW91dCgpIHtcbiAgICBpZiAodGhpcy5wZW5kaW5nSGVhcnRiZWF0UmVmKSB7XG4gICAgICB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgPSBudWxsO1xuICAgICAgdGhpcy5oZWFydGJlYXRTZW50QXQgPSBudWxsO1xuICAgICAgaWYgKHRoaXMuaGFzTG9nZ2VyKCkpIHtcbiAgICAgICAgdGhpcy5sb2coXCJ0cmFuc3BvcnRcIiwgXCJoZWFydGJlYXQgdGltZW91dC4gQXR0ZW1wdGluZyB0byByZS1lc3RhYmxpc2ggY29ubmVjdGlvblwiKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuaGVhcnRiZWF0Q2FsbGJhY2soXCJ0aW1lb3V0XCIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICB0aGlzLmxvZyhcImVycm9yXCIsIFwiZXJyb3IgaW4gaGVhcnRiZWF0IGNhbGxiYWNrXCIsIGUpO1xuICAgICAgfVxuICAgICAgdGhpcy50cmlnZ2VyQ2hhbkVycm9yKG5ldyBFcnJvcihcImhlYXJ0YmVhdCB0aW1lb3V0XCIpKTtcbiAgICAgIHRoaXMuY2xvc2VXYXNDbGVhbiA9IGZhbHNlO1xuICAgICAgdGhpcy50ZWFyZG93bigoKSA9PiB0aGlzLnJlY29ubmVjdFRpbWVyLnNjaGVkdWxlVGltZW91dCgpLCBXU19DTE9TRV9OT1JNQUwsIFwiaGVhcnRiZWF0IHRpbWVvdXRcIik7XG4gICAgfVxuICB9XG4gIHJlc2V0SGVhcnRiZWF0KCkge1xuICAgIGlmICh0aGlzLmNvbm4gJiYgdGhpcy5jb25uLnNraXBIZWFydGJlYXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5wZW5kaW5nSGVhcnRiZWF0UmVmID0gbnVsbDtcbiAgICB0aGlzLmNsZWFySGVhcnRiZWF0cygpO1xuICAgIHRoaXMuaGVhcnRiZWF0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2VuZEhlYXJ0YmVhdCgpLCB0aGlzLmhlYXJ0YmVhdEludGVydmFsTXMpO1xuICB9XG4gIHRlYXJkb3duKGNhbGxiYWNrLCBjb2RlLCByZWFzb24pIHtcbiAgICBpZiAoIXRoaXMuY29ubikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XG4gICAgfVxuICAgIGNvbnN0IGNvbm5Ub0Nsb3NlID0gdGhpcy5jb25uO1xuICAgIHRoaXMud2FpdEZvckJ1ZmZlckRvbmUoY29ublRvQ2xvc2UsICgpID0+IHtcbiAgICAgIGlmIChjb2RlKSB7XG4gICAgICAgIGNvbm5Ub0Nsb3NlLmNsb3NlKGNvZGUsIHJlYXNvbiB8fCBcIlwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbm5Ub0Nsb3NlLmNsb3NlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLndhaXRGb3JTb2NrZXRDbG9zZWQoY29ublRvQ2xvc2UsICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuY29ubiA9PT0gY29ublRvQ2xvc2UpIHtcbiAgICAgICAgICB0aGlzLmNvbm4ub25vcGVuID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgfTtcbiAgICAgICAgICB0aGlzLmNvbm4ub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jb25uLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIH07XG4gICAgICAgICAgdGhpcy5jb25uLm9uY2xvc2UgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuY29ubiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIHdhaXRGb3JCdWZmZXJEb25lKGNvbm4sIGNhbGxiYWNrLCB0cmllcyA9IDEpIHtcbiAgICBpZiAodHJpZXMgPT09IDUgfHwgIWNvbm4uYnVmZmVyZWRBbW91bnQpIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy53YWl0Rm9yQnVmZmVyRG9uZShjb25uLCBjYWxsYmFjaywgdHJpZXMgKyAxKTtcbiAgICB9LCAxNTAgKiB0cmllcyk7XG4gIH1cbiAgd2FpdEZvclNvY2tldENsb3NlZChjb25uLCBjYWxsYmFjaywgdHJpZXMgPSAxKSB7XG4gICAgaWYgKHRyaWVzID09PSA1IHx8IGNvbm4ucmVhZHlTdGF0ZSA9PT0gU09DS0VUX1NUQVRFUy5jbG9zZWQpIHtcbiAgICAgIGNhbGxiYWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy53YWl0Rm9yU29ja2V0Q2xvc2VkKGNvbm4sIGNhbGxiYWNrLCB0cmllcyArIDEpO1xuICAgIH0sIDE1MCAqIHRyaWVzKTtcbiAgfVxuICAvKipcbiAgKiBAcGFyYW0ge0Nsb3NlRXZlbnR9IGV2ZW50XG4gICovXG4gIG9uQ29ubkNsb3NlKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuY29ubikgdGhpcy5jb25uLm9uY2xvc2UgPSAoKSA9PiB7XG4gICAgfTtcbiAgICBpZiAodGhpcy5oYXNMb2dnZXIoKSkgdGhpcy5sb2coXCJ0cmFuc3BvcnRcIiwgXCJjbG9zZVwiLCBldmVudCk7XG4gICAgdGhpcy50cmlnZ2VyQ2hhbkVycm9yKGV2ZW50KTtcbiAgICB0aGlzLmNsZWFySGVhcnRiZWF0cygpO1xuICAgIGlmICghdGhpcy5jbG9zZVdhc0NsZWFuKSB7XG4gICAgICB0aGlzLnJlY29ubmVjdFRpbWVyLnNjaGVkdWxlVGltZW91dCgpO1xuICAgIH1cbiAgICB0aGlzLnRyaWdnZXJTdGF0ZUNhbGxiYWNrcyhcImNsb3NlXCIsIGV2ZW50KTtcbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHtFdmVudH0gZXJyb3JcbiAgICovXG4gIG9uQ29ubkVycm9yKGVycm9yKSB7XG4gICAgaWYgKHRoaXMuaGFzTG9nZ2VyKCkpIHRoaXMubG9nKFwidHJhbnNwb3J0XCIsIFwiZXJyb3JcIiwgZXJyb3IpO1xuICAgIGxldCB0cmFuc3BvcnRCZWZvcmUgPSB0aGlzLnRyYW5zcG9ydDtcbiAgICBsZXQgZXN0YWJsaXNoZWRCZWZvcmUgPSB0aGlzLmVzdGFibGlzaGVkQ29ubmVjdGlvbnM7XG4gICAgdGhpcy50cmlnZ2VyU3RhdGVDYWxsYmFja3MoXCJlcnJvclwiLCBlcnJvciwgdHJhbnNwb3J0QmVmb3JlLCBlc3RhYmxpc2hlZEJlZm9yZSk7XG4gICAgaWYgKHRyYW5zcG9ydEJlZm9yZSA9PT0gdGhpcy50cmFuc3BvcnQgfHwgZXN0YWJsaXNoZWRCZWZvcmUgPiAwKSB7XG4gICAgICB0aGlzLnRyaWdnZXJDaGFuRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIHt1bmtub3dufSBbcmVhc29uXSB1bmRlcmx5aW5nIGNsb3NlL2Vycm9yIGV2ZW50IGZvcndhcmRlZCB0byBjaGFubmVsIGVycm9yIGxpc3RlbmVyc1xuICAgKi9cbiAgdHJpZ2dlckNoYW5FcnJvcihyZWFzb24pIHtcbiAgICB0aGlzLmNoYW5uZWxzLmZvckVhY2goKGNoYW5uZWwpID0+IHtcbiAgICAgIGlmICghKGNoYW5uZWwuaXNFcnJvcmVkKCkgfHwgY2hhbm5lbC5pc0xlYXZpbmcoKSB8fCBjaGFubmVsLmlzQ2xvc2VkKCkpKSB7XG4gICAgICAgIGNoYW5uZWwudHJpZ2dlcihDSEFOTkVMX0VWRU5UUy5lcnJvciwgcmVhc29uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGNvbm5lY3Rpb25TdGF0ZSgpIHtcbiAgICBzd2l0Y2ggKHRoaXMuY29ubiAmJiB0aGlzLmNvbm4ucmVhZHlTdGF0ZSkge1xuICAgICAgY2FzZSBTT0NLRVRfU1RBVEVTLmNvbm5lY3Rpbmc6XG4gICAgICAgIHJldHVybiBcImNvbm5lY3RpbmdcIjtcbiAgICAgIGNhc2UgU09DS0VUX1NUQVRFUy5vcGVuOlxuICAgICAgICByZXR1cm4gXCJvcGVuXCI7XG4gICAgICBjYXNlIFNPQ0tFVF9TVEFURVMuY2xvc2luZzpcbiAgICAgICAgcmV0dXJuIFwiY2xvc2luZ1wiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiY2xvc2VkXCI7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQ29ubmVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25TdGF0ZSgpID09PSBcIm9wZW5cIjtcbiAgfVxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtDaGFubmVsfSBjaGFubmVsXG4gICAqL1xuICByZW1vdmUoY2hhbm5lbCkge1xuICAgIHRoaXMub2ZmKGNoYW5uZWwuc3RhdGVDaGFuZ2VSZWZzKTtcbiAgICB0aGlzLmNoYW5uZWxzID0gdGhpcy5jaGFubmVscy5maWx0ZXIoKGMpID0+IGMgIT09IGNoYW5uZWwpO1xuICB9XG4gIC8qKlxuICAgKiBSZW1vdmVzIGBvbk9wZW5gLCBgb25DbG9zZWAsIGBvbkVycm9yLGAgYW5kIGBvbk1lc3NhZ2VgIHJlZ2lzdHJhdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHJlZnMgLSBsaXN0IG9mIHJlZnMgcmV0dXJuZWQgYnkgY2FsbHMgdG9cbiAgICogICAgICAgICAgICAgICAgIGBvbk9wZW5gLCBgb25DbG9zZWAsIGBvbkVycm9yLGAgYW5kIGBvbk1lc3NhZ2VgXG4gICAqL1xuICBvZmYocmVmcykge1xuICAgIGZvciAobGV0IGtleSBpbiB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzKSB7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzW2tleV0gPSB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzW2tleV0uZmlsdGVyKChbcmVmXSkgPT4ge1xuICAgICAgICByZXR1cm4gcmVmcy5pbmRleE9mKHJlZikgPT09IC0xO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBJbml0aWF0ZXMgYSBuZXcgY2hhbm5lbCBmb3IgdGhlIGdpdmVuIHRvcGljXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0b3BpY1xuICAgKiBAcGFyYW0ge1BhcmFtcyB8ICgoKSA9PiBQYXJhbXMpfSBbY2hhblBhcmFtc10tIFBhcmFtZXRlcnMgZm9yIHRoZSBjaGFubmVsXG4gICAqIEByZXR1cm5zIHtDaGFubmVsfVxuICAgKi9cbiAgY2hhbm5lbCh0b3BpYywgY2hhblBhcmFtcyA9IHt9KSB7XG4gICAgbGV0IGNoYW4gPSBuZXcgQ2hhbm5lbCh0b3BpYywgY2hhblBhcmFtcywgdGhpcyk7XG4gICAgdGhpcy5jaGFubmVscy5wdXNoKGNoYW4pO1xuICAgIHJldHVybiBjaGFuO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge01lc3NhZ2U8UmVjb3JkPHN0cmluZywgYW55Pj59IGRhdGFcbiAgICovXG4gIHB1c2goZGF0YSkge1xuICAgIGlmICh0aGlzLmhhc0xvZ2dlcigpKSB7XG4gICAgICBsZXQgeyB0b3BpYywgZXZlbnQsIHBheWxvYWQsIHJlZiwgam9pbl9yZWYgfSA9IGRhdGE7XG4gICAgICB0aGlzLmxvZyhcInB1c2hcIiwgYCR7dG9waWN9ICR7ZXZlbnR9ICgke2pvaW5fcmVmfSwgJHtyZWZ9KWAsIHBheWxvYWQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICB0aGlzLmVuY29kZShkYXRhLCAocmVzdWx0KSA9PiB0aGlzLmNvbm4uc2VuZChyZXN1bHQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZW5kQnVmZmVyLnB1c2goKCkgPT4gdGhpcy5lbmNvZGUoZGF0YSwgKHJlc3VsdCkgPT4gdGhpcy5jb25uLnNlbmQocmVzdWx0KSkpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBuZXh0IG1lc3NhZ2UgcmVmLCBhY2NvdW50aW5nIGZvciBvdmVyZmxvd3NcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIG1ha2VSZWYoKSB7XG4gICAgbGV0IG5ld1JlZiA9IHRoaXMucmVmICsgMTtcbiAgICBpZiAobmV3UmVmID09PSB0aGlzLnJlZikge1xuICAgICAgdGhpcy5yZWYgPSAwO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlZiA9IG5ld1JlZjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucmVmLnRvU3RyaW5nKCk7XG4gIH1cbiAgc2VuZEhlYXJ0YmVhdCgpIHtcbiAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5oZWFydGJlYXRDYWxsYmFjayhcImRpc2Nvbm5lY3RlZFwiKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgdGhpcy5sb2coXCJlcnJvclwiLCBcImVycm9yIGluIGhlYXJ0YmVhdCBjYWxsYmFja1wiLCBlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZikge1xuICAgICAgdGhpcy5oZWFydGJlYXRUaW1lb3V0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZiA9IHRoaXMubWFrZVJlZigpO1xuICAgIHRoaXMuaGVhcnRiZWF0U2VudEF0ID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLnB1c2goeyB0b3BpYzogXCJwaG9lbml4XCIsIGV2ZW50OiBcImhlYXJ0YmVhdFwiLCBwYXlsb2FkOiB7fSwgcmVmOiB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgfSk7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaGVhcnRiZWF0Q2FsbGJhY2soXCJzZW50XCIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nKFwiZXJyb3JcIiwgXCJlcnJvciBpbiBoZWFydGJlYXQgY2FsbGJhY2tcIiwgZSk7XG4gICAgfVxuICAgIHRoaXMuaGVhcnRiZWF0VGltZW91dFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmhlYXJ0YmVhdFRpbWVvdXQoKSwgdGhpcy5oZWFydGJlYXRJbnRlcnZhbE1zKTtcbiAgfVxuICBmbHVzaFNlbmRCdWZmZXIoKSB7XG4gICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQoKSAmJiB0aGlzLnNlbmRCdWZmZXIubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5zZW5kQnVmZmVyLmZvckVhY2goKGNhbGxiYWNrKSA9PiBjYWxsYmFjaygpKTtcbiAgICAgIHRoaXMuc2VuZEJ1ZmZlciA9IFtdO1xuICAgIH1cbiAgfVxuICAvKipcbiAgKiBAcGFyYW0ge01lc3NhZ2VFdmVudDxhbnk+fSByYXdNZXNzYWdlXG4gICovXG4gIG9uQ29ubk1lc3NhZ2UocmF3TWVzc2FnZSkge1xuICAgIHRoaXMuZGVjb2RlKHJhd01lc3NhZ2UuZGF0YSwgKG1zZykgPT4ge1xuICAgICAgbGV0IHsgdG9waWMsIGV2ZW50LCBwYXlsb2FkLCByZWYsIGpvaW5fcmVmIH0gPSBtc2c7XG4gICAgICBpZiAocmVmICYmIHJlZiA9PT0gdGhpcy5wZW5kaW5nSGVhcnRiZWF0UmVmKSB7XG4gICAgICAgIGNvbnN0IGxhdGVuY3kgPSB0aGlzLmhlYXJ0YmVhdFNlbnRBdCA/IERhdGUubm93KCkgLSB0aGlzLmhlYXJ0YmVhdFNlbnRBdCA6IHZvaWQgMDtcbiAgICAgICAgdGhpcy5jbGVhckhlYXJ0YmVhdHMoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICB0aGlzLmhlYXJ0YmVhdENhbGxiYWNrKHBheWxvYWQuc3RhdHVzID09PSBcIm9rXCIgPyBcIm9rXCIgOiBcImVycm9yXCIsIGxhdGVuY3kpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhpcy5sb2coXCJlcnJvclwiLCBcImVycm9yIGluIGhlYXJ0YmVhdCBjYWxsYmFja1wiLCBlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgPSBudWxsO1xuICAgICAgICB0aGlzLmhlYXJ0YmVhdFNlbnRBdCA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmF1dG9TZW5kSGVhcnRiZWF0KSB7XG4gICAgICAgICAgdGhpcy5oZWFydGJlYXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZW5kSGVhcnRiZWF0KCksIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWxNcyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmhhc0xvZ2dlcigpKSB0aGlzLmxvZyhcInJlY2VpdmVcIiwgYCR7cGF5bG9hZC5zdGF0dXMgfHwgXCJcIn0gJHt0b3BpY30gJHtldmVudH0gJHtyZWYgJiYgXCIoXCIgKyByZWYgKyBcIilcIiB8fCBcIlwifWAudHJpbSgpLCBwYXlsb2FkKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGFubmVscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBjaGFubmVsID0gdGhpcy5jaGFubmVsc1tpXTtcbiAgICAgICAgaWYgKCFjaGFubmVsLmlzTWVtYmVyKHRvcGljLCBldmVudCwgcGF5bG9hZCwgam9pbl9yZWYpKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hhbm5lbC50cmlnZ2VyKGV2ZW50LCBwYXlsb2FkLCByZWYsIGpvaW5fcmVmKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudHJpZ2dlclN0YXRlQ2FsbGJhY2tzKFwibWVzc2FnZVwiLCBtc2cpO1xuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAdGVtcGxhdGUge2tleW9mIFNvY2tldFN0YXRlQ2hhbmdlQ2FsbGJhY2tzfSBLXG4gICAqIEBwYXJhbSB7S30gZXZlbnRcbiAgICogQHBhcmFtIHsuLi5QYXJhbWV0ZXJzPFNvY2tldFN0YXRlQ2hhbmdlQ2FsbGJhY2tzW0tdW251bWJlcl1bMV0+fSBhcmdzXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgdHJpZ2dlclN0YXRlQ2FsbGJhY2tzKGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3NbZXZlbnRdLmZvckVhY2goKFtfLCBjYWxsYmFja10pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjYWxsYmFjayguLi5hcmdzKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHRoaXMubG9nKFwiZXJyb3JcIiwgYGVycm9yIGluICR7ZXZlbnR9IGNhbGxiYWNrYCwgZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMubG9nKFwiZXJyb3JcIiwgYGVycm9yIHRyaWdnZXJpbmcgJHtldmVudH0gY2FsbGJhY2tzYCwgZSk7XG4gICAgfVxuICB9XG4gIGxlYXZlT3BlblRvcGljKHRvcGljKSB7XG4gICAgbGV0IGR1cENoYW5uZWwgPSB0aGlzLmNoYW5uZWxzLmZpbmQoKGMpID0+IGMudG9waWMgPT09IHRvcGljICYmIChjLmlzSm9pbmVkKCkgfHwgYy5pc0pvaW5pbmcoKSkpO1xuICAgIGlmIChkdXBDaGFubmVsKSB7XG4gICAgICBpZiAodGhpcy5oYXNMb2dnZXIoKSkgdGhpcy5sb2coXCJ0cmFuc3BvcnRcIiwgYGxlYXZpbmcgZHVwbGljYXRlIHRvcGljIFwiJHt0b3BpY31cImApO1xuICAgICAgZHVwQ2hhbm5lbC5sZWF2ZSgpO1xuICAgIH1cbiAgfVxufTtcbmV4cG9ydCB7XG4gIENoYW5uZWwsXG4gIExvbmdQb2xsLFxuICBQcmVzZW5jZSxcbiAgUHVzaCxcbiAgc2VyaWFsaXplcl9kZWZhdWx0IGFzIFNlcmlhbGl6ZXIsXG4gIFNvY2tldCxcbiAgVGltZXJcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1waG9lbml4Lm1qcy5tYXBcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/phoenix/priv/static/phoenix.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/index.mjs":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/@supabase/postgrest-js/dist/index.mjs ***!
|
||
\************************************************************/
|
||
/***/ ((__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 */ PostgrestBuilder: () => (/* binding */ PostgrestBuilder),\n/* harmony export */ PostgrestClient: () => (/* binding */ PostgrestClient),\n/* harmony export */ PostgrestError: () => (/* binding */ PostgrestError),\n/* harmony export */ PostgrestFilterBuilder: () => (/* binding */ PostgrestFilterBuilder),\n/* harmony export */ PostgrestQueryBuilder: () => (/* binding */ PostgrestQueryBuilder),\n/* harmony export */ PostgrestTransformBuilder: () => (/* binding */ PostgrestTransformBuilder),\n/* harmony export */ \"default\": () => (/* binding */ src_default)\n/* harmony export */ });\n//#region src/types/common/common.ts\n/**\n* Default number of retry attempts.\n*/\nconst DEFAULT_MAX_RETRIES = 3;\n/**\n* Default exponential backoff delay function.\n* Delays: 1s, 2s, 4s, 8s, ... (max 30s)\n*\n* @param attemptIndex - Zero-based index of the retry attempt\n* @returns Delay in milliseconds before the next retry\n*/\nconst getRetryDelay = (attemptIndex) => Math.min(1e3 * 2 ** attemptIndex, 3e4);\n/**\n* Status codes that are safe to retry.\n* 520 = Cloudflare timeout/connection errors (transient)\n* 503 = PostgREST schema cache not yet loaded (transient, signals retry via Retry-After header)\n*/\nconst RETRYABLE_STATUS_CODES = [520, 503];\n/**\n* HTTP methods that are safe to retry (idempotent operations).\n*/\nconst RETRYABLE_METHODS = [\n\t\"GET\",\n\t\"HEAD\",\n\t\"OPTIONS\"\n];\n\n//#endregion\n//#region src/PostgrestError.ts\n/**\n* Error format\n*\n* {@link https://postgrest.org/en/stable/api.html?highlight=options#errors-and-http-status-codes}\n*/\nvar PostgrestError = class extends Error {\n\t/**\n\t* @example\n\t* ```ts\n\t* import PostgrestError from '@supabase/postgrest-js'\n\t*\n\t* throw new PostgrestError({\n\t* message: 'Row level security prevented the request',\n\t* details: 'RLS denied the insert',\n\t* hint: 'Check your policies',\n\t* code: 'PGRST301',\n\t* })\n\t* ```\n\t*/\n\tconstructor(context) {\n\t\tsuper(context.message);\n\t\tthis.name = \"PostgrestError\";\n\t\tthis.details = context.details;\n\t\tthis.hint = context.hint;\n\t\tthis.code = context.code;\n\t}\n\ttoJSON() {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tmessage: this.message,\n\t\t\tdetails: this.details,\n\t\t\thint: this.hint,\n\t\t\tcode: this.code\n\t\t};\n\t}\n};\n\n//#endregion\n//#region src/PostgrestBuilder.ts\n/**\n* Sleep for a given number of milliseconds.\n* If an AbortSignal is provided, the sleep resolves early when the signal is aborted.\n*/\nfunction sleep(ms, signal) {\n\treturn new Promise((resolve) => {\n\t\tif (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n\t\t\tresolve();\n\t\t\treturn;\n\t\t}\n\t\tconst id = setTimeout(() => {\n\t\t\tsignal === null || signal === void 0 || signal.removeEventListener(\"abort\", onAbort);\n\t\t\tresolve();\n\t\t}, ms);\n\t\tfunction onAbort() {\n\t\t\tclearTimeout(id);\n\t\t\tresolve();\n\t\t}\n\t\tsignal === null || signal === void 0 || signal.addEventListener(\"abort\", onAbort);\n\t});\n}\n/**\n* Check if a request should be retried based on method and status code.\n*/\nfunction shouldRetry(method, status, attemptCount, retryEnabled) {\n\tif (!retryEnabled || attemptCount >= DEFAULT_MAX_RETRIES) return false;\n\tif (!RETRYABLE_METHODS.includes(method)) return false;\n\tif (!RETRYABLE_STATUS_CODES.includes(status)) return false;\n\treturn true;\n}\nvar PostgrestBuilder = class {\n\t/**\n\t* Creates a builder configured for a specific PostgREST request.\n\t*\n\t* @example Using supabase-js (recommended)\n\t* ```ts\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t* const { data, error } = await supabase.from('users').select('*')\n\t* ```\n\t*\n\t* @category Database\n\t*\n\t* @example Standalone import for bundle-sensitive environments\n\t* ```ts\n\t* import { PostgrestQueryBuilder } from '@supabase/postgrest-js'\n\t*\n\t* const builder = new PostgrestQueryBuilder(\n\t* new URL('https://xyzcompany.supabase.co/rest/v1/users'),\n\t* { headers: new Headers({ apikey: 'your-publishable-key' }) }\n\t* )\n\t* ```\n\t*/\n\tconstructor(builder) {\n\t\tvar _builder$shouldThrowO, _builder$isMaybeSingl, _builder$shouldStripN, _builder$urlLengthLim, _builder$retry;\n\t\tthis.shouldThrowOnError = false;\n\t\tthis.retryEnabled = true;\n\t\tthis.method = builder.method;\n\t\tthis.url = builder.url;\n\t\tthis.headers = new Headers(builder.headers);\n\t\tthis.schema = builder.schema;\n\t\tthis.body = builder.body;\n\t\tthis.shouldThrowOnError = (_builder$shouldThrowO = builder.shouldThrowOnError) !== null && _builder$shouldThrowO !== void 0 ? _builder$shouldThrowO : false;\n\t\tthis.signal = builder.signal;\n\t\tthis.isMaybeSingle = (_builder$isMaybeSingl = builder.isMaybeSingle) !== null && _builder$isMaybeSingl !== void 0 ? _builder$isMaybeSingl : false;\n\t\tthis.shouldStripNulls = (_builder$shouldStripN = builder.shouldStripNulls) !== null && _builder$shouldStripN !== void 0 ? _builder$shouldStripN : false;\n\t\tthis.urlLengthLimit = (_builder$urlLengthLim = builder.urlLengthLimit) !== null && _builder$urlLengthLim !== void 0 ? _builder$urlLengthLim : 8e3;\n\t\tthis.retryEnabled = (_builder$retry = builder.retry) !== null && _builder$retry !== void 0 ? _builder$retry : true;\n\t\tif (builder.fetch) this.fetch = builder.fetch;\n\t\telse this.fetch = fetch;\n\t}\n\t/**\n\t* If there's an error with the query, throwOnError will reject the promise by\n\t* throwing the error instead of returning it as part of a successful response.\n\t*\n\t* {@link https://github.com/supabase/supabase-js/issues/92}\n\t*\n\t* @category Database\n\t*/\n\tthrowOnError() {\n\t\tthis.shouldThrowOnError = true;\n\t\treturn this;\n\t}\n\t/**\n\t* Strip null values from the response data. Properties with `null` values\n\t* will be omitted from the returned JSON objects.\n\t*\n\t* Requires PostgREST 11.2.0+.\n\t*\n\t* {@link https://docs.postgrest.org/en/stable/references/api/resource_representation.html#stripped-nulls}\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* .stripNulls()\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text, bio text);\n\t*\n\t* insert into\n\t* characters (id, name, bio)\n\t* values\n\t* (1, 'Luke', null),\n\t* (2, 'Leia', 'Princess of Alderaan');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"Luke\"\n\t* },\n\t* {\n\t* \"id\": 2,\n\t* \"name\": \"Leia\",\n\t* \"bio\": \"Princess of Alderaan\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tstripNulls() {\n\t\tif (this.headers.get(\"Accept\") === \"text/csv\") throw new Error(\"stripNulls() cannot be used with csv()\");\n\t\tthis.shouldStripNulls = true;\n\t\treturn this;\n\t}\n\t/**\n\t* Set an HTTP header for the request.\n\t*\n\t* @category Database\n\t*/\n\tsetHeader(name, value) {\n\t\tthis.headers = new Headers(this.headers);\n\t\tthis.headers.set(name, value);\n\t\treturn this;\n\t}\n\t/**\n\t* @category Database\n\t*\n\t* Configure retry behavior for this request.\n\t*\n\t* By default, retries are enabled for idempotent requests (GET, HEAD, OPTIONS)\n\t* that fail with network errors or specific HTTP status codes (503, 520).\n\t* Retries use exponential backoff (1s, 2s, 4s) with a maximum of 3 attempts.\n\t*\n\t* @param enabled - Whether to enable retries for this request\n\t*\n\t* @example\n\t* ```ts\n\t* // Disable retries for a specific query\n\t* const { data, error } = await supabase\n\t* .from('users')\n\t* .select()\n\t* .retry(false)\n\t* ```\n\t*/\n\tretry(enabled) {\n\t\tthis.retryEnabled = enabled;\n\t\treturn this;\n\t}\n\tthen(onfulfilled, onrejected) {\n\t\tvar _this = this;\n\t\tif (this.schema === void 0) {} else if ([\"GET\", \"HEAD\"].includes(this.method)) this.headers.set(\"Accept-Profile\", this.schema);\n\t\telse this.headers.set(\"Content-Profile\", this.schema);\n\t\tif (this.method !== \"GET\" && this.method !== \"HEAD\") this.headers.set(\"Content-Type\", \"application/json\");\n\t\tif (this.shouldStripNulls) {\n\t\t\tconst currentAccept = this.headers.get(\"Accept\");\n\t\t\tif (currentAccept === \"application/vnd.pgrst.object+json\") this.headers.set(\"Accept\", \"application/vnd.pgrst.object+json;nulls=stripped\");\n\t\t\telse if (!currentAccept || currentAccept === \"application/json\") this.headers.set(\"Accept\", \"application/vnd.pgrst.array+json;nulls=stripped\");\n\t\t}\n\t\tconst _fetch = this.fetch;\n\t\tconst executeWithRetry = async () => {\n\t\t\tlet attemptCount = 0;\n\t\t\twhile (true) {\n\t\t\t\tconst requestHeaders = new Headers(_this.headers);\n\t\t\t\tif (attemptCount > 0) requestHeaders.set(\"X-Retry-Count\", String(attemptCount));\n\t\t\t\tlet res$1;\n\t\t\t\ttry {\n\t\t\t\t\tres$1 = await _fetch(_this.url.toString(), {\n\t\t\t\t\t\tmethod: _this.method,\n\t\t\t\t\t\theaders: requestHeaders,\n\t\t\t\t\t\tbody: JSON.stringify(_this.body, (_, value) => typeof value === \"bigint\" ? value.toString() : value),\n\t\t\t\t\t\tsignal: _this.signal\n\t\t\t\t\t});\n\t\t\t\t} catch (fetchError) {\n\t\t\t\t\tif (fetchError instanceof Error && (fetchError.name === \"AbortError\" || \"code\" in fetchError && fetchError.code === \"ABORT_ERR\")) throw fetchError;\n\t\t\t\t\tif (!RETRYABLE_METHODS.includes(_this.method)) throw fetchError;\n\t\t\t\t\tif (_this.retryEnabled && attemptCount < DEFAULT_MAX_RETRIES) {\n\t\t\t\t\t\tconst delay = getRetryDelay(attemptCount);\n\t\t\t\t\t\tattemptCount++;\n\t\t\t\t\t\tawait sleep(delay, _this.signal);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tthrow fetchError;\n\t\t\t\t}\n\t\t\t\tif (shouldRetry(_this.method, res$1.status, attemptCount, _this.retryEnabled)) {\n\t\t\t\t\tvar _res$headers$get, _res$headers;\n\t\t\t\t\tconst retryAfterHeader = (_res$headers$get = (_res$headers = res$1.headers) === null || _res$headers === void 0 ? void 0 : _res$headers.get(\"Retry-After\")) !== null && _res$headers$get !== void 0 ? _res$headers$get : null;\n\t\t\t\t\tconst delay = retryAfterHeader !== null ? Math.max(0, parseInt(retryAfterHeader, 10) || 0) * 1e3 : getRetryDelay(attemptCount);\n\t\t\t\t\tawait res$1.text();\n\t\t\t\t\tattemptCount++;\n\t\t\t\t\tawait sleep(delay, _this.signal);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\treturn await _this.processResponse(res$1);\n\t\t\t}\n\t\t};\n\t\tlet res = executeWithRetry();\n\t\tif (!this.shouldThrowOnError) res = res.catch((fetchError) => {\n\t\t\tvar _fetchError$name2;\n\t\t\tlet errorDetails = \"\";\n\t\t\tlet hint = \"\";\n\t\t\tlet code = \"\";\n\t\t\tconst cause = fetchError === null || fetchError === void 0 ? void 0 : fetchError.cause;\n\t\t\tif (cause) {\n\t\t\t\tvar _cause$message, _cause$code, _fetchError$name, _cause$name;\n\t\t\t\tconst causeMessage = (_cause$message = cause === null || cause === void 0 ? void 0 : cause.message) !== null && _cause$message !== void 0 ? _cause$message : \"\";\n\t\t\t\tconst causeCode = (_cause$code = cause === null || cause === void 0 ? void 0 : cause.code) !== null && _cause$code !== void 0 ? _cause$code : \"\";\n\t\t\t\terrorDetails = `${(_fetchError$name = fetchError === null || fetchError === void 0 ? void 0 : fetchError.name) !== null && _fetchError$name !== void 0 ? _fetchError$name : \"FetchError\"}: ${fetchError === null || fetchError === void 0 ? void 0 : fetchError.message}`;\n\t\t\t\terrorDetails += `\\n\\nCaused by: ${(_cause$name = cause === null || cause === void 0 ? void 0 : cause.name) !== null && _cause$name !== void 0 ? _cause$name : \"Error\"}: ${causeMessage}`;\n\t\t\t\tif (causeCode) errorDetails += ` (${causeCode})`;\n\t\t\t\tif (cause === null || cause === void 0 ? void 0 : cause.stack) errorDetails += `\\n${cause.stack}`;\n\t\t\t} else {\n\t\t\t\tvar _fetchError$stack;\n\t\t\t\terrorDetails = (_fetchError$stack = fetchError === null || fetchError === void 0 ? void 0 : fetchError.stack) !== null && _fetchError$stack !== void 0 ? _fetchError$stack : \"\";\n\t\t\t}\n\t\t\tconst urlLength = this.url.toString().length;\n\t\t\tif ((fetchError === null || fetchError === void 0 ? void 0 : fetchError.name) === \"AbortError\" || (fetchError === null || fetchError === void 0 ? void 0 : fetchError.code) === \"ABORT_ERR\") {\n\t\t\t\tcode = \"\";\n\t\t\t\thint = \"Request was aborted (timeout or manual cancellation)\";\n\t\t\t\tif (urlLength > this.urlLengthLimit) hint += `. Note: Your request URL is ${urlLength} characters, which may exceed server limits. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [many IDs])), consider using an RPC function to pass values server-side.`;\n\t\t\t} else if ((cause === null || cause === void 0 ? void 0 : cause.name) === \"HeadersOverflowError\" || (cause === null || cause === void 0 ? void 0 : cause.code) === \"UND_ERR_HEADERS_OVERFLOW\") {\n\t\t\t\tcode = \"\";\n\t\t\t\thint = \"HTTP headers exceeded server limits (typically 16KB)\";\n\t\t\t\tif (urlLength > this.urlLengthLimit) hint += `. Your request URL is ${urlLength} characters. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [200+ IDs])), consider using an RPC function instead.`;\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: {\n\t\t\t\t\tmessage: `${(_fetchError$name2 = fetchError === null || fetchError === void 0 ? void 0 : fetchError.name) !== null && _fetchError$name2 !== void 0 ? _fetchError$name2 : \"FetchError\"}: ${fetchError === null || fetchError === void 0 ? void 0 : fetchError.message}`,\n\t\t\t\t\tdetails: errorDetails,\n\t\t\t\t\thint,\n\t\t\t\t\tcode\n\t\t\t\t},\n\t\t\t\tdata: null,\n\t\t\t\tcount: null,\n\t\t\t\tstatus: 0,\n\t\t\t\tstatusText: \"\"\n\t\t\t};\n\t\t});\n\t\treturn res.then(onfulfilled, onrejected);\n\t}\n\t/**\n\t* Process a fetch response and return the standardized postgrest response.\n\t*/\n\tasync processResponse(res) {\n\t\tvar _this2 = this;\n\t\tlet error = null;\n\t\tlet data = null;\n\t\tlet count = null;\n\t\tlet status = res.status;\n\t\tlet statusText = res.statusText;\n\t\tif (res.ok) {\n\t\t\tvar _this$headers$get2, _res$headers$get2;\n\t\t\tif (_this2.method !== \"HEAD\") {\n\t\t\t\tvar _this$headers$get;\n\t\t\t\tconst body = await res.text();\n\t\t\t\tif (body === \"\") {} else if (_this2.headers.get(\"Accept\") === \"text/csv\") data = body;\n\t\t\t\telse if (_this2.headers.get(\"Accept\") && ((_this$headers$get = _this2.headers.get(\"Accept\")) === null || _this$headers$get === void 0 ? void 0 : _this$headers$get.includes(\"application/vnd.pgrst.plan+text\"))) data = body;\n\t\t\t\telse data = JSON.parse(body);\n\t\t\t}\n\t\t\tconst countHeader = (_this$headers$get2 = _this2.headers.get(\"Prefer\")) === null || _this$headers$get2 === void 0 ? void 0 : _this$headers$get2.match(/count=(exact|planned|estimated)/);\n\t\t\tconst contentRange = (_res$headers$get2 = res.headers.get(\"content-range\")) === null || _res$headers$get2 === void 0 ? void 0 : _res$headers$get2.split(\"/\");\n\t\t\tif (countHeader && contentRange && contentRange.length > 1) count = parseInt(contentRange[1]);\n\t\t\tif (_this2.isMaybeSingle && Array.isArray(data)) if (data.length > 1) {\n\t\t\t\terror = {\n\t\t\t\t\tcode: \"PGRST116\",\n\t\t\t\t\tdetails: `Results contain ${data.length} rows, application/vnd.pgrst.object+json requires 1 row`,\n\t\t\t\t\thint: null,\n\t\t\t\t\tmessage: \"JSON object requested, multiple (or no) rows returned\"\n\t\t\t\t};\n\t\t\t\tdata = null;\n\t\t\t\tcount = null;\n\t\t\t\tstatus = 406;\n\t\t\t\tstatusText = \"Not Acceptable\";\n\t\t\t} else if (data.length === 1) data = data[0];\n\t\t\telse data = null;\n\t\t} else {\n\t\t\tconst body = await res.text();\n\t\t\ttry {\n\t\t\t\terror = JSON.parse(body);\n\t\t\t\tif (Array.isArray(error) && res.status === 404) {\n\t\t\t\t\tdata = [];\n\t\t\t\t\terror = null;\n\t\t\t\t\tstatus = 200;\n\t\t\t\t\tstatusText = \"OK\";\n\t\t\t\t}\n\t\t\t} catch (_unused) {\n\t\t\t\tif (res.status === 404 && body === \"\") {\n\t\t\t\t\tstatus = 204;\n\t\t\t\t\tstatusText = \"No Content\";\n\t\t\t\t} else error = { message: body };\n\t\t\t}\n\t\t\tif (error && _this2.shouldThrowOnError) throw new PostgrestError(error);\n\t\t}\n\t\treturn {\n\t\t\tsuccess: error === null,\n\t\t\terror,\n\t\t\tdata,\n\t\t\tcount,\n\t\t\tstatus,\n\t\t\tstatusText\n\t\t};\n\t}\n\t/**\n\t* Override the type of the returned `data`.\n\t*\n\t* @typeParam NewResult - The new result type to override with\n\t* @deprecated Use overrideTypes<yourType, { merge: false }>() method at the end of your call chain instead\n\t*\n\t* @category Database\n\t*/\n\treturns() {\n\t\t/* istanbul ignore next */\n\t\treturn this;\n\t}\n\t/**\n\t* Override the type of the returned `data` field in the response.\n\t*\n\t* @typeParam NewResult - The new type to cast the response data to\n\t* @typeParam Options - Optional type configuration (defaults to { merge: true })\n\t* @typeParam Options.merge - When true, merges the new type with existing return type. When false, replaces the existing types entirely (defaults to true)\n\t* @example\n\t* ```typescript\n\t* // Merge with existing types (default behavior)\n\t* const query = supabase\n\t* .from('users')\n\t* .select()\n\t* .overrideTypes<{ custom_field: string }>()\n\t*\n\t* // Replace existing types completely\n\t* const replaceQuery = supabase\n\t* .from('users')\n\t* .select()\n\t* .overrideTypes<{ id: number; name: string }, { merge: false }>()\n\t* ```\n\t* @returns A PostgrestBuilder instance with the new type\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example Complete Override type of successful response\n\t* ```ts\n\t* const { data } = await supabase\n\t* .from('countries')\n\t* .select()\n\t* .overrideTypes<Array<MyType>, { merge: false }>()\n\t* ```\n\t*\n\t* @exampleResponse Complete Override type of successful response\n\t* ```ts\n\t* let x: typeof data // MyType[]\n\t* ```\n\t*\n\t* @example Complete Override type of object response\n\t* ```ts\n\t* const { data } = await supabase\n\t* .from('countries')\n\t* .select()\n\t* .maybeSingle()\n\t* .overrideTypes<MyType, { merge: false }>()\n\t* ```\n\t*\n\t* @exampleResponse Complete Override type of object response\n\t* ```ts\n\t* let x: typeof data // MyType | null\n\t* ```\n\t*\n\t* @example Partial Override type of successful response\n\t* ```ts\n\t* const { data } = await supabase\n\t* .from('countries')\n\t* .select()\n\t* .overrideTypes<Array<{ status: \"A\" | \"B\" }>>()\n\t* ```\n\t*\n\t* @exampleResponse Partial Override type of successful response\n\t* ```ts\n\t* let x: typeof data // Array<CountryRowProperties & { status: \"A\" | \"B\" }>\n\t* ```\n\t*\n\t* @example Partial Override type of object response\n\t* ```ts\n\t* const { data } = await supabase\n\t* .from('countries')\n\t* .select()\n\t* .maybeSingle()\n\t* .overrideTypes<{ status: \"A\" | \"B\" }>()\n\t* ```\n\t*\n\t* @exampleResponse Partial Override type of object response\n\t* ```ts\n\t* let x: typeof data // CountryRowProperties & { status: \"A\" | \"B\" } | null\n\t* ```\n\t*\n\t* @example Merge vs replace existing types\n\t* ```typescript\n\t* // Merge with existing types (default behavior)\n\t* const query = supabase\n\t* .from('users')\n\t* .select()\n\t* .overrideTypes<{ custom_field: string }>()\n\t*\n\t* // Replace existing types completely\n\t* const replaceQuery = supabase\n\t* .from('users')\n\t* .select()\n\t* .overrideTypes<{ id: number; name: string }, { merge: false }>()\n\t* ```\n\t*/\n\toverrideTypes() {\n\t\treturn this;\n\t}\n};\n\n//#endregion\n//#region src/PostgrestTransformBuilder.ts\nvar PostgrestTransformBuilder = class extends PostgrestBuilder {\n\t/**\n\t* Perform a SELECT on the query result.\n\t*\n\t* By default, `.insert()`, `.update()`, `.upsert()`, and `.delete()` do not\n\t* return modified rows. By calling this method, modified rows are returned in\n\t* `data`.\n\t*\n\t* @param columns - The columns to retrieve, separated by commas\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example With `upsert()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .upsert({ id: 1, name: 'Han Solo' })\n\t* .select()\n\t* ```\n\t*\n\t* @exampleSql With `upsert()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `upsert()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"Han Solo\"\n\t* }\n\t* ],\n\t* \"status\": 201,\n\t* \"statusText\": \"Created\"\n\t* }\n\t* ```\n\t*/\n\tselect(columns) {\n\t\tlet quoted = false;\n\t\tconst cleanedColumns = (columns !== null && columns !== void 0 ? columns : \"*\").split(\"\").map((c) => {\n\t\t\tif (/\\s/.test(c) && !quoted) return \"\";\n\t\t\tif (c === \"\\\"\") quoted = !quoted;\n\t\t\treturn c;\n\t\t}).join(\"\");\n\t\tthis.url.searchParams.set(\"select\", cleanedColumns);\n\t\tthis.headers.append(\"Prefer\", \"return=representation\");\n\t\treturn this;\n\t}\n\t/**\n\t* Order the query result by `column`.\n\t*\n\t* You can call this method multiple times to order by multiple columns.\n\t*\n\t* You can order referenced tables, but it only affects the ordering of the\n\t* parent table if you use `!inner` in the query.\n\t*\n\t* @param column - The column to order by\n\t* @param options - Named parameters\n\t* @param options.ascending - If `true`, the result will be in ascending order\n\t* @param options.nullsFirst - If `true`, `null`s appear first. If `false`,\n\t* `null`s appear last.\n\t* @param options.referencedTable - Set this to order a referenced table by\n\t* its columns\n\t* @param options.foreignTable - Deprecated, use `options.referencedTable`\n\t* instead\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select('id, name')\n\t* .order('id', { ascending: false })\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 3,\n\t* \"name\": \"Han\"\n\t* },\n\t* {\n\t* \"id\": 2,\n\t* \"name\": \"Leia\"\n\t* },\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"Luke\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription On a referenced table\n\t* Ordering with `referencedTable` doesn't affect the ordering of the\n\t* parent table.\n\t*\n\t* @example On a referenced table\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('orchestral_sections')\n\t* .select(`\n\t* name,\n\t* instruments (\n\t* name\n\t* )\n\t* `)\n\t* .order('name', { referencedTable: 'instruments', ascending: false })\n\t*\n\t* ```\n\t*\n\t* @exampleSql On a referenced table\n\t* ```sql\n\t* create table\n\t* orchestral_sections (id int8 primary key, name text);\n\t* create table\n\t* instruments (\n\t* id int8 primary key,\n\t* section_id int8 not null references orchestral_sections,\n\t* name text\n\t* );\n\t*\n\t* insert into\n\t* orchestral_sections (id, name)\n\t* values\n\t* (1, 'strings'),\n\t* (2, 'woodwinds');\n\t* insert into\n\t* instruments (id, section_id, name)\n\t* values\n\t* (1, 1, 'harp'),\n\t* (2, 1, 'violin');\n\t* ```\n\t*\n\t* @exampleResponse On a referenced table\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"strings\",\n\t* \"instruments\": [\n\t* {\n\t* \"name\": \"violin\"\n\t* },\n\t* {\n\t* \"name\": \"harp\"\n\t* }\n\t* ]\n\t* },\n\t* {\n\t* \"name\": \"woodwinds\",\n\t* \"instruments\": []\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Order parent table by a referenced table\n\t* Ordering with `referenced_table(col)` affects the ordering of the\n\t* parent table.\n\t*\n\t* @example Order parent table by a referenced table\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('instruments')\n\t* .select(`\n\t* name,\n\t* section:orchestral_sections (\n\t* name\n\t* )\n\t* `)\n\t* .order('section(name)', { ascending: true })\n\t*\n\t* ```\n\t*\n\t* @exampleSql Order parent table by a referenced table\n\t* ```sql\n\t* create table\n\t* orchestral_sections (id int8 primary key, name text);\n\t* create table\n\t* instruments (\n\t* id int8 primary key,\n\t* section_id int8 not null references orchestral_sections,\n\t* name text\n\t* );\n\t*\n\t* insert into\n\t* orchestral_sections (id, name)\n\t* values\n\t* (1, 'strings'),\n\t* (2, 'woodwinds');\n\t* insert into\n\t* instruments (id, section_id, name)\n\t* values\n\t* (1, 2, 'flute'),\n\t* (2, 1, 'violin');\n\t* ```\n\t*\n\t* @exampleResponse Order parent table by a referenced table\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"violin\",\n\t* \"orchestral_sections\": {\"name\": \"strings\"}\n\t* },\n\t* {\n\t* \"name\": \"flute\",\n\t* \"orchestral_sections\": {\"name\": \"woodwinds\"}\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\torder(column, { ascending = true, nullsFirst, foreignTable, referencedTable = foreignTable } = {}) {\n\t\tconst key = referencedTable ? `${referencedTable}.order` : \"order\";\n\t\tconst existingOrder = this.url.searchParams.get(key);\n\t\tthis.url.searchParams.set(key, `${existingOrder ? `${existingOrder},` : \"\"}${column}.${ascending ? \"asc\" : \"desc\"}${nullsFirst === void 0 ? \"\" : nullsFirst ? \".nullsfirst\" : \".nullslast\"}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Limit the query result by `count`.\n\t*\n\t* @param count - The maximum number of rows to return\n\t* @param options - Named parameters\n\t* @param options.referencedTable - Set this to limit rows of referenced\n\t* tables instead of the parent table\n\t* @param options.foreignTable - Deprecated, use `options.referencedTable`\n\t* instead\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select('name')\n\t* .limit(1)\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"Luke\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example On a referenced table\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('orchestral_sections')\n\t* .select(`\n\t* name,\n\t* instruments (\n\t* name\n\t* )\n\t* `)\n\t* .limit(1, { referencedTable: 'instruments' })\n\t* ```\n\t*\n\t* @exampleSql On a referenced table\n\t* ```sql\n\t* create table\n\t* orchestral_sections (id int8 primary key, name text);\n\t* create table\n\t* instruments (\n\t* id int8 primary key,\n\t* section_id int8 not null references orchestral_sections,\n\t* name text\n\t* );\n\t*\n\t* insert into\n\t* orchestral_sections (id, name)\n\t* values\n\t* (1, 'strings');\n\t* insert into\n\t* instruments (id, section_id, name)\n\t* values\n\t* (1, 1, 'harp'),\n\t* (2, 1, 'violin');\n\t* ```\n\t*\n\t* @exampleResponse On a referenced table\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"strings\",\n\t* \"instruments\": [\n\t* {\n\t* \"name\": \"violin\"\n\t* }\n\t* ]\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tlimit(count, { foreignTable, referencedTable = foreignTable } = {}) {\n\t\tconst key = typeof referencedTable === \"undefined\" ? \"limit\" : `${referencedTable}.limit`;\n\t\tthis.url.searchParams.set(key, `${count}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Limit the query result by starting at an offset `from` and ending at the offset `to`.\n\t* Only records within this range are returned.\n\t* This respects the query order and if there is no order clause the range could behave unexpectedly.\n\t* The `from` and `to` values are 0-based and inclusive: `range(1, 3)` will include the second, third\n\t* and fourth rows of the query.\n\t*\n\t* @param from - The starting index from which to limit the result\n\t* @param to - The last index to which to limit the result\n\t* @param options - Named parameters\n\t* @param options.referencedTable - Set this to limit rows of referenced\n\t* tables instead of the parent table\n\t* @param options.foreignTable - Deprecated, use `options.referencedTable`\n\t* instead\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select('name')\n\t* .range(0, 1)\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"Luke\"\n\t* },\n\t* {\n\t* \"name\": \"Leia\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\trange(from, to, { foreignTable, referencedTable = foreignTable } = {}) {\n\t\tconst keyOffset = typeof referencedTable === \"undefined\" ? \"offset\" : `${referencedTable}.offset`;\n\t\tconst keyLimit = typeof referencedTable === \"undefined\" ? \"limit\" : `${referencedTable}.limit`;\n\t\tthis.url.searchParams.set(keyOffset, `${from}`);\n\t\tthis.url.searchParams.set(keyLimit, `${to - from + 1}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Set the AbortSignal for the fetch request.\n\t*\n\t* @param signal - The AbortSignal to use for the fetch request\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @remarks\n\t* You can use this to set a timeout for the request.\n\t*\n\t* @exampleDescription Aborting requests in-flight\n\t* You can use an [`AbortController`](https://developer.mozilla.org/en-US/docs/Web/API/AbortController) to abort requests.\n\t* Note that `status` and `statusText` don't mean anything for aborted requests as the request wasn't fulfilled.\n\t*\n\t* @example Aborting requests in-flight\n\t* ```ts\n\t* const ac = new AbortController()\n\t*\n\t* const { data, error } = await supabase\n\t* .from('very_big_table')\n\t* .select()\n\t* .abortSignal(ac.signal)\n\t*\n\t* // Abort the request after 100 ms\n\t* setTimeout(() => ac.abort(), 100)\n\t* ```\n\t*\n\t* @exampleResponse Aborting requests in-flight\n\t* ```json\n\t* {\n\t* \"error\": {\n\t* \"message\": \"AbortError: The user aborted a request.\",\n\t* \"details\": \"\",\n\t* \"hint\": \"The request was aborted locally via the provided AbortSignal.\",\n\t* \"code\": \"\"\n\t* },\n\t* \"status\": 0,\n\t* \"statusText\": \"\"\n\t* }\n\t*\n\t* ```\n\t*\n\t* @example Set a timeout\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('very_big_table')\n\t* .select()\n\t* .abortSignal(AbortSignal.timeout(1000 /* ms *\\/))\n\t* ```\n\t*\n\t* @exampleResponse Set a timeout\n\t* ```json\n\t* {\n\t* \"error\": {\n\t* \"message\": \"FetchError: The user aborted a request.\",\n\t* \"details\": \"\",\n\t* \"hint\": \"\",\n\t* \"code\": \"\"\n\t* },\n\t* \"status\": 400,\n\t* \"statusText\": \"Bad Request\"\n\t* }\n\t*\n\t* ```\n\t*/\n\tabortSignal(signal) {\n\t\tthis.signal = signal;\n\t\treturn this;\n\t}\n\t/**\n\t* Return `data` as a single object instead of an array of objects.\n\t*\n\t* Query result must be one row (e.g. using `.limit(1)`), otherwise this\n\t* returns an error.\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select('name')\n\t* .limit(1)\n\t* .single()\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"name\": \"Luke\"\n\t* },\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tsingle() {\n\t\tthis.headers.set(\"Accept\", \"application/vnd.pgrst.object+json\");\n\t\treturn this;\n\t}\n\t/**\n\t* Return `data` as a single object instead of an array of objects.\n\t*\n\t* Query result must be zero or one row (e.g. using `.limit(1)`), otherwise\n\t* this returns an error.\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* .eq('name', 'Katniss')\n\t* .maybeSingle()\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tmaybeSingle() {\n\t\tthis.isMaybeSingle = true;\n\t\treturn this;\n\t}\n\t/**\n\t* Return `data` as a string in CSV format.\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @exampleDescription Return data as CSV\n\t* By default, the data is returned in JSON format, but can also be returned as Comma Separated Values.\n\t*\n\t* @example Return data as CSV\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* .csv()\n\t* ```\n\t*\n\t* @exampleSql Return data as CSV\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse Return data as CSV\n\t* ```json\n\t* {\n\t* \"data\": \"id,name\\n1,Luke\\n2,Leia\\n3,Han\",\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tcsv() {\n\t\tthis.headers.set(\"Accept\", \"text/csv\");\n\t\treturn this;\n\t}\n\t/**\n\t* Return `data` as an object in [GeoJSON](https://geojson.org) format.\n\t*\n\t* @category Database\n\t*/\n\tgeojson() {\n\t\tthis.headers.set(\"Accept\", \"application/geo+json\");\n\t\treturn this;\n\t}\n\t/**\n\t* Return `data` as the EXPLAIN plan for the query.\n\t*\n\t* You need to enable the\n\t* [db_plan_enabled](https://supabase.com/docs/guides/database/debugging-performance#enabling-explain)\n\t* setting before using this method.\n\t*\n\t* @param options - Named parameters\n\t*\n\t* @param options.analyze - If `true`, the query will be executed and the\n\t* actual run time will be returned\n\t*\n\t* @param options.verbose - If `true`, the query identifier will be returned\n\t* and `data` will include the output columns of the query\n\t*\n\t* @param options.settings - If `true`, include information on configuration\n\t* parameters that affect query planning\n\t*\n\t* @param options.buffers - If `true`, include information on buffer usage\n\t*\n\t* @param options.wal - If `true`, include information on WAL record generation\n\t*\n\t* @param options.format - The format of the output, can be `\"text\"` (default)\n\t* or `\"json\"`\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @exampleDescription Get the execution plan\n\t* By default, the data is returned in TEXT format, but can also be returned as JSON by using the `format` parameter.\n\t*\n\t* @example Get the execution plan\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* .explain()\n\t* ```\n\t*\n\t* @exampleSql Get the execution plan\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse Get the execution plan\n\t* ```js\n\t* Aggregate (cost=33.34..33.36 rows=1 width=112)\n\t* -> Limit (cost=0.00..18.33 rows=1000 width=40)\n\t* -> Seq Scan on characters (cost=0.00..22.00 rows=1200 width=40)\n\t* ```\n\t*\n\t* @exampleDescription Get the execution plan with analyze and verbose\n\t* By default, the data is returned in TEXT format, but can also be returned as JSON by using the `format` parameter.\n\t*\n\t* @example Get the execution plan with analyze and verbose\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* .explain({analyze:true,verbose:true})\n\t* ```\n\t*\n\t* @exampleSql Get the execution plan with analyze and verbose\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse Get the execution plan with analyze and verbose\n\t* ```js\n\t* Aggregate (cost=33.34..33.36 rows=1 width=112) (actual time=0.041..0.041 rows=1 loops=1)\n\t* Output: NULL::bigint, count(ROW(characters.id, characters.name)), COALESCE(json_agg(ROW(characters.id, characters.name)), '[]'::json), NULLIF(current_setting('response.headers'::text, true), ''::text), NULLIF(current_setting('response.status'::text, true), ''::text)\n\t* -> Limit (cost=0.00..18.33 rows=1000 width=40) (actual time=0.005..0.006 rows=3 loops=1)\n\t* Output: characters.id, characters.name\n\t* -> Seq Scan on public.characters (cost=0.00..22.00 rows=1200 width=40) (actual time=0.004..0.005 rows=3 loops=1)\n\t* Output: characters.id, characters.name\n\t* Query Identifier: -4730654291623321173\n\t* Planning Time: 0.407 ms\n\t* Execution Time: 0.119 ms\n\t* ```\n\t*/\n\texplain({ analyze = false, verbose = false, settings = false, buffers = false, wal = false, format = \"text\" } = {}) {\n\t\tvar _this$headers$get;\n\t\tconst options = [\n\t\t\tanalyze ? \"analyze\" : null,\n\t\t\tverbose ? \"verbose\" : null,\n\t\t\tsettings ? \"settings\" : null,\n\t\t\tbuffers ? \"buffers\" : null,\n\t\t\twal ? \"wal\" : null\n\t\t].filter(Boolean).join(\"|\");\n\t\tconst forMediatype = (_this$headers$get = this.headers.get(\"Accept\")) !== null && _this$headers$get !== void 0 ? _this$headers$get : \"application/json\";\n\t\tthis.headers.set(\"Accept\", `application/vnd.pgrst.plan+${format}; for=\"${forMediatype}\"; options=${options};`);\n\t\tif (format === \"json\") return this;\n\t\telse return this;\n\t}\n\t/**\n\t* Rollback the query.\n\t*\n\t* `data` will still be returned, but the query is not committed.\n\t*\n\t* @category Database\n\t*/\n\trollback() {\n\t\tthis.headers.append(\"Prefer\", \"tx=rollback\");\n\t\treturn this;\n\t}\n\t/**\n\t* Override the type of the returned `data`.\n\t*\n\t* @typeParam NewResult - The new result type to override with\n\t* @deprecated Use overrideTypes<yourType, { merge: false }>() method at the end of your call chain instead\n\t*\n\t* @category Database\n\t* @subcategory Using modifiers\n\t*\n\t* @remarks\n\t* - Deprecated: use overrideTypes method instead\n\t*\n\t* @example Override type of successful response\n\t* ```ts\n\t* const { data } = await supabase\n\t* .from('countries')\n\t* .select()\n\t* .returns<Array<MyType>>()\n\t* ```\n\t*\n\t* @exampleResponse Override type of successful response\n\t* ```js\n\t* let x: typeof data // MyType[]\n\t* ```\n\t*\n\t* @example Override type of object response\n\t* ```ts\n\t* const { data } = await supabase\n\t* .from('countries')\n\t* .select()\n\t* .maybeSingle()\n\t* .returns<MyType>()\n\t* ```\n\t*\n\t* @exampleResponse Override type of object response\n\t* ```js\n\t* let x: typeof data // MyType | null\n\t* ```\n\t*/\n\treturns() {\n\t\treturn this;\n\t}\n\t/**\n\t* Set the maximum number of rows that can be affected by the query.\n\t* Only available in PostgREST v13+ and only works with PATCH and DELETE methods.\n\t*\n\t* @param value - The maximum number of rows that can be affected\n\t*\n\t* @category Database\n\t*/\n\tmaxAffected(value) {\n\t\tthis.headers.append(\"Prefer\", \"handling=strict\");\n\t\tthis.headers.append(\"Prefer\", `max-affected=${value}`);\n\t\treturn this;\n\t}\n};\n\n//#endregion\n//#region src/PostgrestFilterBuilder.ts\nconst PostgrestReservedCharsRegexp = /* @__PURE__ */ new RegExp(\"[,()]\");\nvar PostgrestFilterBuilder = class extends PostgrestTransformBuilder {\n\t/**\n\t* Match only rows where `column` is equal to `value`.\n\t*\n\t* To check if the value of `column` is NULL, you should use `.is()` instead.\n\t*\n\t* @param column - The column to filter on\n\t* @param value - The value to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* .eq('name', 'Leia')\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 2,\n\t* \"name\": \"Leia\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\teq(column, value) {\n\t\tthis.url.searchParams.append(column, `eq.${value}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` is not equal to `value`.\n\t*\n\t* @param column - The column to filter on\n\t* @param value - The value to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* .neq('name', 'Leia')\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"Luke\"\n\t* },\n\t* {\n\t* \"id\": 3,\n\t* \"name\": \"Han\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tneq(column, value) {\n\t\tthis.url.searchParams.append(column, `neq.${value}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` is greater than `value`.\n\t*\n\t* @param column - The column to filter on\n\t* @param value - The value to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @exampleDescription With `select()`\n\t* When using [reserved words](https://www.postgresql.org/docs/current/sql-keywords-appendix.html) for column names you need\n\t* to add double quotes e.g. `.gt('\"order\"', 2)`\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* .gt('id', 2)\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 3,\n\t* \"name\": \"Han\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tgt(column, value) {\n\t\tthis.url.searchParams.append(column, `gt.${value}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` is greater than or equal to `value`.\n\t*\n\t* @param column - The column to filter on\n\t* @param value - The value to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* .gte('id', 2)\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 2,\n\t* \"name\": \"Leia\"\n\t* },\n\t* {\n\t* \"id\": 3,\n\t* \"name\": \"Han\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tgte(column, value) {\n\t\tthis.url.searchParams.append(column, `gte.${value}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` is less than `value`.\n\t*\n\t* @param column - The column to filter on\n\t* @param value - The value to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* .lt('id', 2)\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"Luke\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tlt(column, value) {\n\t\tthis.url.searchParams.append(column, `lt.${value}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` is less than or equal to `value`.\n\t*\n\t* @param column - The column to filter on\n\t* @param value - The value to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* .lte('id', 2)\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"Luke\"\n\t* },\n\t* {\n\t* \"id\": 2,\n\t* \"name\": \"Leia\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tlte(column, value) {\n\t\tthis.url.searchParams.append(column, `lte.${value}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` matches `pattern` case-sensitively.\n\t*\n\t* @param column - The column to filter on\n\t* @param pattern - The pattern to match with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* .like('name', '%Lu%')\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"Luke\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tlike(column, pattern) {\n\t\tthis.url.searchParams.append(column, `like.${pattern}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` matches all of `patterns` case-sensitively.\n\t*\n\t* @param column - The column to filter on\n\t* @param patterns - The patterns to match with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*/\n\tlikeAllOf(column, patterns) {\n\t\tthis.url.searchParams.append(column, `like(all).{${patterns.join(\",\")}}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` matches any of `patterns` case-sensitively.\n\t*\n\t* @param column - The column to filter on\n\t* @param patterns - The patterns to match with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*/\n\tlikeAnyOf(column, patterns) {\n\t\tthis.url.searchParams.append(column, `like(any).{${patterns.join(\",\")}}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` matches `pattern` case-insensitively.\n\t*\n\t* @param column - The column to filter on\n\t* @param pattern - The pattern to match with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* .ilike('name', '%lu%')\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"Luke\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tilike(column, pattern) {\n\t\tthis.url.searchParams.append(column, `ilike.${pattern}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` matches all of `patterns` case-insensitively.\n\t*\n\t* @param column - The column to filter on\n\t* @param patterns - The patterns to match with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*/\n\tilikeAllOf(column, patterns) {\n\t\tthis.url.searchParams.append(column, `ilike(all).{${patterns.join(\",\")}}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` matches any of `patterns` case-insensitively.\n\t*\n\t* @param column - The column to filter on\n\t* @param patterns - The patterns to match with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*/\n\tilikeAnyOf(column, patterns) {\n\t\tthis.url.searchParams.append(column, `ilike(any).{${patterns.join(\",\")}}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` matches the PostgreSQL regex `pattern`\n\t* case-sensitively (using the `~` operator).\n\t*\n\t* @param column - The column to filter on\n\t* @param pattern - The PostgreSQL regular expression pattern to match with\n\t*/\n\tregexMatch(column, pattern) {\n\t\tthis.url.searchParams.append(column, `match.${pattern}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` matches the PostgreSQL regex `pattern`\n\t* case-insensitively (using the `~*` operator).\n\t*\n\t* @param column - The column to filter on\n\t* @param pattern - The PostgreSQL regular expression pattern to match with\n\t*/\n\tregexIMatch(column, pattern) {\n\t\tthis.url.searchParams.append(column, `imatch.${pattern}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` IS `value`.\n\t*\n\t* For non-boolean columns, this is only relevant for checking if the value of\n\t* `column` is NULL by setting `value` to `null`.\n\t*\n\t* For boolean columns, you can also set `value` to `true` or `false` and it\n\t* will behave the same way as `.eq()`.\n\t*\n\t* @param column - The column to filter on\n\t* @param value - The value to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @exampleDescription Checking for nullness, true or false\n\t* Using the `eq()` filter doesn't work when filtering for `null`.\n\t*\n\t* Instead, you need to use `is()`.\n\t*\n\t* @example Checking for nullness, true or false\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('countries')\n\t* .select()\n\t* .is('name', null)\n\t* ```\n\t*\n\t* @exampleSql Checking for nullness, true or false\n\t* ```sql\n\t* create table\n\t* countries (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* countries (id, name)\n\t* values\n\t* (1, 'null'),\n\t* (2, null);\n\t* ```\n\t*\n\t* @exampleResponse Checking for nullness, true or false\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 2,\n\t* \"name\": \"null\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tis(column, value) {\n\t\tthis.url.searchParams.append(column, `is.${value}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` IS DISTINCT FROM `value`.\n\t*\n\t* Unlike `.neq()`, this treats `NULL` as a comparable value. Two `NULL` values\n\t* are considered equal (not distinct), and comparing `NULL` with any non-NULL\n\t* value returns true (distinct).\n\t*\n\t* @param column - The column to filter on\n\t* @param value - The value to filter with\n\t*/\n\tisDistinct(column, value) {\n\t\tthis.url.searchParams.append(column, `isdistinct.${value}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` is included in the `values` array.\n\t*\n\t* @param column - The column to filter on\n\t* @param values - The values array to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* .in('name', ['Leia', 'Han'])\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 2,\n\t* \"name\": \"Leia\"\n\t* },\n\t* {\n\t* \"id\": 3,\n\t* \"name\": \"Han\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tin(column, values) {\n\t\tconst cleanedValues = Array.from(new Set(values)).map((s) => {\n\t\t\tif (typeof s === \"string\" && PostgrestReservedCharsRegexp.test(s)) return `\"${s}\"`;\n\t\t\telse return `${s}`;\n\t\t}).join(\",\");\n\t\tthis.url.searchParams.append(column, `in.(${cleanedValues})`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where `column` is NOT included in the `values` array.\n\t*\n\t* @param column - The column to filter on\n\t* @param values - The values array to filter with\n\t*/\n\tnotIn(column, values) {\n\t\tconst cleanedValues = Array.from(new Set(values)).map((s) => {\n\t\t\tif (typeof s === \"string\" && PostgrestReservedCharsRegexp.test(s)) return `\"${s}\"`;\n\t\t\telse return `${s}`;\n\t\t}).join(\",\");\n\t\tthis.url.searchParams.append(column, `not.in.(${cleanedValues})`);\n\t\treturn this;\n\t}\n\t/**\n\t* Only relevant for jsonb, array, and range columns. Match only rows where\n\t* `column` contains every element appearing in `value`.\n\t*\n\t* @param column - The jsonb, array, or range column to filter on\n\t* @param value - The jsonb, array, or range value to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @example On array columns\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('issues')\n\t* .select()\n\t* .contains('tags', ['is:open', 'priority:low'])\n\t* ```\n\t*\n\t* @exampleSql On array columns\n\t* ```sql\n\t* create table\n\t* issues (\n\t* id int8 primary key,\n\t* title text,\n\t* tags text[]\n\t* );\n\t*\n\t* insert into\n\t* issues (id, title, tags)\n\t* values\n\t* (1, 'Cache invalidation is not working', array['is:open', 'severity:high', 'priority:low']),\n\t* (2, 'Use better names', array['is:open', 'severity:low', 'priority:medium']);\n\t* ```\n\t*\n\t* @exampleResponse On array columns\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"title\": \"Cache invalidation is not working\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription On range columns\n\t* Postgres supports a number of [range\n\t* types](https://www.postgresql.org/docs/current/rangetypes.html). You\n\t* can filter on range columns using the string representation of range\n\t* values.\n\t*\n\t* @example On range columns\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('reservations')\n\t* .select()\n\t* .contains('during', '[2000-01-01 13:00, 2000-01-01 13:30)')\n\t* ```\n\t*\n\t* @exampleSql On range columns\n\t* ```sql\n\t* create table\n\t* reservations (\n\t* id int8 primary key,\n\t* room_name text,\n\t* during tsrange\n\t* );\n\t*\n\t* insert into\n\t* reservations (id, room_name, during)\n\t* values\n\t* (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n\t* (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n\t* ```\n\t*\n\t* @exampleResponse On range columns\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"room_name\": \"Emerald\",\n\t* \"during\": \"[\\\"2000-01-01 13:00:00\\\",\\\"2000-01-01 15:00:00\\\")\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example On `jsonb` columns\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('users')\n\t* .select('name')\n\t* .contains('address', { postcode: 90210 })\n\t* ```\n\t*\n\t* @exampleSql On `jsonb` columns\n\t* ```sql\n\t* create table\n\t* users (\n\t* id int8 primary key,\n\t* name text,\n\t* address jsonb\n\t* );\n\t*\n\t* insert into\n\t* users (id, name, address)\n\t* values\n\t* (1, 'Michael', '{ \"postcode\": 90210, \"street\": \"Melrose Place\" }'),\n\t* (2, 'Jane', '{}');\n\t* ```\n\t*\n\t* @exampleResponse On `jsonb` columns\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"Michael\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tcontains(column, value) {\n\t\tif (typeof value === \"string\") this.url.searchParams.append(column, `cs.${value}`);\n\t\telse if (Array.isArray(value)) this.url.searchParams.append(column, `cs.{${value.join(\",\")}}`);\n\t\telse this.url.searchParams.append(column, `cs.${JSON.stringify(value)}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Only relevant for jsonb, array, and range columns. Match only rows where\n\t* every element appearing in `column` is contained by `value`.\n\t*\n\t* @param column - The jsonb, array, or range column to filter on\n\t* @param value - The jsonb, array, or range value to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @example On array columns\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('classes')\n\t* .select('name')\n\t* .containedBy('days', ['monday', 'tuesday', 'wednesday', 'friday'])\n\t* ```\n\t*\n\t* @exampleSql On array columns\n\t* ```sql\n\t* create table\n\t* classes (\n\t* id int8 primary key,\n\t* name text,\n\t* days text[]\n\t* );\n\t*\n\t* insert into\n\t* classes (id, name, days)\n\t* values\n\t* (1, 'Chemistry', array['monday', 'friday']),\n\t* (2, 'History', array['monday', 'wednesday', 'thursday']);\n\t* ```\n\t*\n\t* @exampleResponse On array columns\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"Chemistry\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription On range columns\n\t* Postgres supports a number of [range\n\t* types](https://www.postgresql.org/docs/current/rangetypes.html). You\n\t* can filter on range columns using the string representation of range\n\t* values.\n\t*\n\t* @example On range columns\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('reservations')\n\t* .select()\n\t* .containedBy('during', '[2000-01-01 00:00, 2000-01-01 23:59)')\n\t* ```\n\t*\n\t* @exampleSql On range columns\n\t* ```sql\n\t* create table\n\t* reservations (\n\t* id int8 primary key,\n\t* room_name text,\n\t* during tsrange\n\t* );\n\t*\n\t* insert into\n\t* reservations (id, room_name, during)\n\t* values\n\t* (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n\t* (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n\t* ```\n\t*\n\t* @exampleResponse On range columns\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"room_name\": \"Emerald\",\n\t* \"during\": \"[\\\"2000-01-01 13:00:00\\\",\\\"2000-01-01 15:00:00\\\")\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example On `jsonb` columns\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('users')\n\t* .select('name')\n\t* .containedBy('address', {})\n\t* ```\n\t*\n\t* @exampleSql On `jsonb` columns\n\t* ```sql\n\t* create table\n\t* users (\n\t* id int8 primary key,\n\t* name text,\n\t* address jsonb\n\t* );\n\t*\n\t* insert into\n\t* users (id, name, address)\n\t* values\n\t* (1, 'Michael', '{ \"postcode\": 90210, \"street\": \"Melrose Place\" }'),\n\t* (2, 'Jane', '{}');\n\t* ```\n\t*\n\t* @exampleResponse On `jsonb` columns\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"Jane\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t*\n\t* ```\n\t*/\n\tcontainedBy(column, value) {\n\t\tif (typeof value === \"string\") this.url.searchParams.append(column, `cd.${value}`);\n\t\telse if (Array.isArray(value)) this.url.searchParams.append(column, `cd.{${value.join(\",\")}}`);\n\t\telse this.url.searchParams.append(column, `cd.${JSON.stringify(value)}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Only relevant for range columns. Match only rows where every element in\n\t* `column` is greater than any element in `range`.\n\t*\n\t* @param column - The range column to filter on\n\t* @param range - The range to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @exampleDescription With `select()`\n\t* Postgres supports a number of [range\n\t* types](https://www.postgresql.org/docs/current/rangetypes.html). You\n\t* can filter on range columns using the string representation of range\n\t* values.\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('reservations')\n\t* .select()\n\t* .rangeGt('during', '[2000-01-02 08:00, 2000-01-02 09:00)')\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* reservations (\n\t* id int8 primary key,\n\t* room_name text,\n\t* during tsrange\n\t* );\n\t*\n\t* insert into\n\t* reservations (id, room_name, during)\n\t* values\n\t* (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n\t* (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 2,\n\t* \"room_name\": \"Topaz\",\n\t* \"during\": \"[\\\"2000-01-02 09:00:00\\\",\\\"2000-01-02 10:00:00\\\")\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t*\n\t* ```\n\t*/\n\trangeGt(column, range) {\n\t\tthis.url.searchParams.append(column, `sr.${range}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Only relevant for range columns. Match only rows where every element in\n\t* `column` is either contained in `range` or greater than any element in\n\t* `range`.\n\t*\n\t* @param column - The range column to filter on\n\t* @param range - The range to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @exampleDescription With `select()`\n\t* Postgres supports a number of [range\n\t* types](https://www.postgresql.org/docs/current/rangetypes.html). You\n\t* can filter on range columns using the string representation of range\n\t* values.\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('reservations')\n\t* .select()\n\t* .rangeGte('during', '[2000-01-02 08:30, 2000-01-02 09:30)')\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* reservations (\n\t* id int8 primary key,\n\t* room_name text,\n\t* during tsrange\n\t* );\n\t*\n\t* insert into\n\t* reservations (id, room_name, during)\n\t* values\n\t* (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n\t* (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 2,\n\t* \"room_name\": \"Topaz\",\n\t* \"during\": \"[\\\"2000-01-02 09:00:00\\\",\\\"2000-01-02 10:00:00\\\")\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t*\n\t* ```\n\t*/\n\trangeGte(column, range) {\n\t\tthis.url.searchParams.append(column, `nxl.${range}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Only relevant for range columns. Match only rows where every element in\n\t* `column` is less than any element in `range`.\n\t*\n\t* @param column - The range column to filter on\n\t* @param range - The range to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @exampleDescription With `select()`\n\t* Postgres supports a number of [range\n\t* types](https://www.postgresql.org/docs/current/rangetypes.html). You\n\t* can filter on range columns using the string representation of range\n\t* values.\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('reservations')\n\t* .select()\n\t* .rangeLt('during', '[2000-01-01 15:00, 2000-01-01 16:00)')\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* reservations (\n\t* id int8 primary key,\n\t* room_name text,\n\t* during tsrange\n\t* );\n\t*\n\t* insert into\n\t* reservations (id, room_name, during)\n\t* values\n\t* (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n\t* (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"room_name\": \"Emerald\",\n\t* \"during\": \"[\\\"2000-01-01 13:00:00\\\",\\\"2000-01-01 15:00:00\\\")\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\trangeLt(column, range) {\n\t\tthis.url.searchParams.append(column, `sl.${range}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Only relevant for range columns. Match only rows where every element in\n\t* `column` is either contained in `range` or less than any element in\n\t* `range`.\n\t*\n\t* @param column - The range column to filter on\n\t* @param range - The range to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @exampleDescription With `select()`\n\t* Postgres supports a number of [range\n\t* types](https://www.postgresql.org/docs/current/rangetypes.html). You\n\t* can filter on range columns using the string representation of range\n\t* values.\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('reservations')\n\t* .select()\n\t* .rangeLte('during', '[2000-01-01 14:00, 2000-01-01 16:00)')\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* reservations (\n\t* id int8 primary key,\n\t* room_name text,\n\t* during tsrange\n\t* );\n\t*\n\t* insert into\n\t* reservations (id, room_name, during)\n\t* values\n\t* (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n\t* (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"room_name\": \"Emerald\",\n\t* \"during\": \"[\\\"2000-01-01 13:00:00\\\",\\\"2000-01-01 15:00:00\\\")\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t*\n\t* ```\n\t*/\n\trangeLte(column, range) {\n\t\tthis.url.searchParams.append(column, `nxr.${range}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Only relevant for range columns. Match only rows where `column` is\n\t* mutually exclusive to `range` and there can be no element between the two\n\t* ranges.\n\t*\n\t* @param column - The range column to filter on\n\t* @param range - The range to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @exampleDescription With `select()`\n\t* Postgres supports a number of [range\n\t* types](https://www.postgresql.org/docs/current/rangetypes.html). You\n\t* can filter on range columns using the string representation of range\n\t* values.\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('reservations')\n\t* .select()\n\t* .rangeAdjacent('during', '[2000-01-01 12:00, 2000-01-01 13:00)')\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* reservations (\n\t* id int8 primary key,\n\t* room_name text,\n\t* during tsrange\n\t* );\n\t*\n\t* insert into\n\t* reservations (id, room_name, during)\n\t* values\n\t* (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n\t* (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"room_name\": \"Emerald\",\n\t* \"during\": \"[\\\"2000-01-01 13:00:00\\\",\\\"2000-01-01 15:00:00\\\")\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\trangeAdjacent(column, range) {\n\t\tthis.url.searchParams.append(column, `adj.${range}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Only relevant for array and range columns. Match only rows where\n\t* `column` and `value` have an element in common.\n\t*\n\t* @param column - The array or range column to filter on\n\t* @param value - The array or range value to filter with\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @example On array columns\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('issues')\n\t* .select('title')\n\t* .overlaps('tags', ['is:closed', 'severity:high'])\n\t* ```\n\t*\n\t* @exampleSql On array columns\n\t* ```sql\n\t* create table\n\t* issues (\n\t* id int8 primary key,\n\t* title text,\n\t* tags text[]\n\t* );\n\t*\n\t* insert into\n\t* issues (id, title, tags)\n\t* values\n\t* (1, 'Cache invalidation is not working', array['is:open', 'severity:high', 'priority:low']),\n\t* (2, 'Use better names', array['is:open', 'severity:low', 'priority:medium']);\n\t* ```\n\t*\n\t* @exampleResponse On array columns\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"title\": \"Cache invalidation is not working\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription On range columns\n\t* Postgres supports a number of [range\n\t* types](https://www.postgresql.org/docs/current/rangetypes.html). You\n\t* can filter on range columns using the string representation of range\n\t* values.\n\t*\n\t* @example On range columns\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('reservations')\n\t* .select()\n\t* .overlaps('during', '[2000-01-01 12:45, 2000-01-01 13:15)')\n\t* ```\n\t*\n\t* @exampleSql On range columns\n\t* ```sql\n\t* create table\n\t* reservations (\n\t* id int8 primary key,\n\t* room_name text,\n\t* during tsrange\n\t* );\n\t*\n\t* insert into\n\t* reservations (id, room_name, during)\n\t* values\n\t* (1, 'Emerald', '[2000-01-01 13:00, 2000-01-01 15:00)'),\n\t* (2, 'Topaz', '[2000-01-02 09:00, 2000-01-02 10:00)');\n\t* ```\n\t*\n\t* @exampleResponse On range columns\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"room_name\": \"Emerald\",\n\t* \"during\": \"[\\\"2000-01-01 13:00:00\\\",\\\"2000-01-01 15:00:00\\\")\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\toverlaps(column, value) {\n\t\tif (typeof value === \"string\") this.url.searchParams.append(column, `ov.${value}`);\n\t\telse this.url.searchParams.append(column, `ov.{${value.join(\",\")}}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Only relevant for text and tsvector columns. Match only rows where\n\t* `column` matches the query string in `query`.\n\t*\n\t* @param column - The text or tsvector column to filter on\n\t* @param query - The query text to match with\n\t* @param options - Named parameters\n\t* @param options.config - The text search configuration to use\n\t* @param options.type - Change how the `query` text is interpreted\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @remarks\n\t* - For more information, see [Postgres full text search](/docs/guides/database/full-text-search).\n\t*\n\t* @example Text search\n\t* ```ts\n\t* const result = await supabase\n\t* .from(\"texts\")\n\t* .select(\"content\")\n\t* .textSearch(\"content\", `'eggs' & 'ham'`, {\n\t* config: \"english\",\n\t* });\n\t* ```\n\t*\n\t* @exampleSql Text search\n\t* ```sql\n\t* create table texts (\n\t* id bigint\n\t* primary key\n\t* generated always as identity,\n\t* content text\n\t* );\n\t*\n\t* insert into texts (content) values\n\t* ('Four score and seven years ago'),\n\t* ('The road goes ever on and on'),\n\t* ('Green eggs and ham')\n\t* ;\n\t* ```\n\t*\n\t* @exampleResponse Text search\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"content\": \"Green eggs and ham\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Basic normalization\n\t* Uses PostgreSQL's `plainto_tsquery` function.\n\t*\n\t* @example Basic normalization\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('quotes')\n\t* .select('catchphrase')\n\t* .textSearch('catchphrase', `'fat' & 'cat'`, {\n\t* type: 'plain',\n\t* config: 'english'\n\t* })\n\t* ```\n\t*\n\t* @exampleDescription Full normalization\n\t* Uses PostgreSQL's `phraseto_tsquery` function.\n\t*\n\t* @example Full normalization\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('quotes')\n\t* .select('catchphrase')\n\t* .textSearch('catchphrase', `'fat' & 'cat'`, {\n\t* type: 'phrase',\n\t* config: 'english'\n\t* })\n\t* ```\n\t*\n\t* @exampleDescription Websearch\n\t* Uses PostgreSQL's `websearch_to_tsquery` function.\n\t* This function will never raise syntax errors, which makes it possible to use raw user-supplied input for search, and can be used\n\t* with advanced operators.\n\t*\n\t* - `unquoted text`: text not inside quote marks will be converted to terms separated by & operators, as if processed by plainto_tsquery.\n\t* - `\"quoted text\"`: text inside quote marks will be converted to terms separated by `<->` operators, as if processed by phraseto_tsquery.\n\t* - `OR`: the word “or” will be converted to the | operator.\n\t* - `-`: a dash will be converted to the ! operator.\n\t*\n\t* @example Websearch\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('quotes')\n\t* .select('catchphrase')\n\t* .textSearch('catchphrase', `'fat or cat'`, {\n\t* type: 'websearch',\n\t* config: 'english'\n\t* })\n\t* ```\n\t*/\n\ttextSearch(column, query, { config, type } = {}) {\n\t\tlet typePart = \"\";\n\t\tif (type === \"plain\") typePart = \"pl\";\n\t\telse if (type === \"phrase\") typePart = \"ph\";\n\t\telse if (type === \"websearch\") typePart = \"w\";\n\t\tconst configPart = config === void 0 ? \"\" : `(${config})`;\n\t\tthis.url.searchParams.append(column, `${typePart}fts${configPart}.${query}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows where each column in `query` keys is equal to its\n\t* associated value. Shorthand for multiple `.eq()`s.\n\t*\n\t* @param query - The object to filter with, with column names as keys mapped\n\t* to their filter values\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select('name')\n\t* .match({ id: 2, name: 'Leia' })\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"Leia\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tmatch(query) {\n\t\tObject.entries(query).filter(([_, value]) => value !== void 0).forEach(([column, value]) => {\n\t\t\tthis.url.searchParams.append(column, `eq.${value}`);\n\t\t});\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows which doesn't satisfy the filter.\n\t*\n\t* Unlike most filters, `opearator` and `value` are used as-is and need to\n\t* follow [PostgREST\n\t* syntax](https://postgrest.org/en/stable/api.html#operators). You also need\n\t* to make sure they are properly sanitized.\n\t*\n\t* @param column - The column to filter on\n\t* @param operator - The operator to be negated to filter with, following\n\t* PostgREST syntax\n\t* @param value - The value to filter with, following PostgREST syntax\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @remarks\n\t* not() expects you to use the raw PostgREST syntax for the filter values.\n\t*\n\t* ```ts\n\t* .not('id', 'in', '(5,6,7)') // Use `()` for `in` filter\n\t* .not('arraycol', 'cs', '{\"a\",\"b\"}') // Use `cs` for `contains()`, `{}` for array values\n\t* ```\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('countries')\n\t* .select()\n\t* .not('name', 'is', null)\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* countries (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* countries (id, name)\n\t* values\n\t* (1, 'null'),\n\t* (2, null);\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"null\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t*\n\t* ```\n\t*/\n\tnot(column, operator, value) {\n\t\tthis.url.searchParams.append(column, `not.${operator}.${value}`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows which satisfy at least one of the filters.\n\t*\n\t* Unlike most filters, `filters` is used as-is and needs to follow [PostgREST\n\t* syntax](https://postgrest.org/en/stable/api.html#operators). You also need\n\t* to make sure it's properly sanitized.\n\t*\n\t* It's currently not possible to do an `.or()` filter across multiple tables.\n\t*\n\t* @param filters - The filters to use, following PostgREST syntax\n\t* @param options - Named parameters\n\t* @param options.referencedTable - Set this to filter on referenced tables\n\t* instead of the parent table\n\t* @param options.foreignTable - Deprecated, use `referencedTable` instead\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @remarks\n\t* or() expects you to use the raw PostgREST syntax for the filter names and values.\n\t*\n\t* ```ts\n\t* .or('id.in.(5,6,7), arraycol.cs.{\"a\",\"b\"}') // Use `()` for `in` filter, `{}` for array values and `cs` for `contains()`.\n\t* .or('id.in.(5,6,7), arraycol.cd.{\"a\",\"b\"}') // Use `cd` for `containedBy()`\n\t* ```\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select('name')\n\t* .or('id.eq.2,name.eq.Han')\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"Leia\"\n\t* },\n\t* {\n\t* \"name\": \"Han\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example Use `or` with `and`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select('name')\n\t* .or('id.gt.3,and(id.eq.1,name.eq.Luke)')\n\t* ```\n\t*\n\t* @exampleSql Use `or` with `and`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse Use `or` with `and`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"Luke\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example Use `or` on referenced tables\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('orchestral_sections')\n\t* .select(`\n\t* name,\n\t* instruments!inner (\n\t* name\n\t* )\n\t* `)\n\t* .or('section_id.eq.1,name.eq.guzheng', { referencedTable: 'instruments' })\n\t* ```\n\t*\n\t* @exampleSql Use `or` on referenced tables\n\t* ```sql\n\t* create table\n\t* orchestral_sections (id int8 primary key, name text);\n\t* create table\n\t* instruments (\n\t* id int8 primary key,\n\t* section_id int8 not null references orchestral_sections,\n\t* name text\n\t* );\n\t*\n\t* insert into\n\t* orchestral_sections (id, name)\n\t* values\n\t* (1, 'strings'),\n\t* (2, 'woodwinds');\n\t* insert into\n\t* instruments (id, section_id, name)\n\t* values\n\t* (1, 2, 'flute'),\n\t* (2, 1, 'violin');\n\t* ```\n\t*\n\t* @exampleResponse Use `or` on referenced tables\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"strings\",\n\t* \"instruments\": [\n\t* {\n\t* \"name\": \"violin\"\n\t* }\n\t* ]\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tor(filters, { foreignTable, referencedTable = foreignTable } = {}) {\n\t\tconst key = referencedTable ? `${referencedTable}.or` : \"or\";\n\t\tthis.url.searchParams.append(key, `(${filters})`);\n\t\treturn this;\n\t}\n\t/**\n\t* Match only rows which satisfy the filter. This is an escape hatch - you\n\t* should use the specific filter methods wherever possible.\n\t*\n\t* Unlike most filters, `opearator` and `value` are used as-is and need to\n\t* follow [PostgREST\n\t* syntax](https://postgrest.org/en/stable/api.html#operators). You also need\n\t* to make sure they are properly sanitized.\n\t*\n\t* @param column - The column to filter on\n\t* @param operator - The operator to filter with, following PostgREST syntax\n\t* @param value - The value to filter with, following PostgREST syntax\n\t*\n\t* @category Database\n\t* @subcategory Using filters\n\t*\n\t* @remarks\n\t* filter() expects you to use the raw PostgREST syntax for the filter values.\n\t*\n\t* ```ts\n\t* .filter('id', 'in', '(5,6,7)') // Use `()` for `in` filter\n\t* .filter('arraycol', 'cs', '{\"a\",\"b\"}') // Use `cs` for `contains()`, `{}` for array values\n\t* ```\n\t*\n\t* @example With `select()`\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* .filter('name', 'in', '(\"Han\",\"Yoda\")')\n\t* ```\n\t*\n\t* @exampleSql With `select()`\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse With `select()`\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 3,\n\t* \"name\": \"Han\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example On a referenced table\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('orchestral_sections')\n\t* .select(`\n\t* name,\n\t* instruments!inner (\n\t* name\n\t* )\n\t* `)\n\t* .filter('instruments.name', 'eq', 'flute')\n\t* ```\n\t*\n\t* @exampleSql On a referenced table\n\t* ```sql\n\t* create table\n\t* orchestral_sections (id int8 primary key, name text);\n\t* create table\n\t* instruments (\n\t* id int8 primary key,\n\t* section_id int8 not null references orchestral_sections,\n\t* name text\n\t* );\n\t*\n\t* insert into\n\t* orchestral_sections (id, name)\n\t* values\n\t* (1, 'strings'),\n\t* (2, 'woodwinds');\n\t* insert into\n\t* instruments (id, section_id, name)\n\t* values\n\t* (1, 2, 'flute'),\n\t* (2, 1, 'violin');\n\t* ```\n\t*\n\t* @exampleResponse On a referenced table\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"woodwinds\",\n\t* \"instruments\": [\n\t* {\n\t* \"name\": \"flute\"\n\t* }\n\t* ]\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tfilter(column, operator, value) {\n\t\tthis.url.searchParams.append(column, `${operator}.${value}`);\n\t\treturn this;\n\t}\n};\n\n//#endregion\n//#region src/PostgrestQueryBuilder.ts\nvar PostgrestQueryBuilder = class {\n\t/**\n\t* Creates a query builder scoped to a Postgres table or view.\n\t*\n\t* @category Database\n\t*\n\t* @param url - The URL for the query\n\t* @param options - Named parameters\n\t* @param options.headers - Custom headers\n\t* @param options.schema - Postgres schema to use\n\t* @param options.fetch - Custom fetch implementation\n\t* @param options.urlLengthLimit - Maximum URL length before warning\n\t* @param options.retry - Enable automatic retries for transient errors (default: true)\n\t*\n\t* @example Using supabase-js (recommended)\n\t* ```ts\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t* const { data, error } = await supabase.from('users').select('*')\n\t* ```\n\t*\n\t* @example Standalone import for bundle-sensitive environments\n\t* ```ts\n\t* import { PostgrestQueryBuilder } from '@supabase/postgrest-js'\n\t*\n\t* const query = new PostgrestQueryBuilder(\n\t* new URL('https://xyzcompany.supabase.co/rest/v1/users'),\n\t* { headers: { apikey: 'your-publishable-key' }, retry: true }\n\t* )\n\t* ```\n\t*/\n\tconstructor(url, { headers = {}, schema, fetch: fetch$1, urlLengthLimit = 8e3, retry }) {\n\t\tthis.url = url;\n\t\tthis.headers = new Headers(headers);\n\t\tthis.schema = schema;\n\t\tthis.fetch = fetch$1;\n\t\tthis.urlLengthLimit = urlLengthLimit;\n\t\tthis.retry = retry;\n\t}\n\t/**\n\t* Clone URL and headers to prevent shared state between operations.\n\t*/\n\tcloneRequestState() {\n\t\treturn {\n\t\t\turl: new URL(this.url.toString()),\n\t\t\theaders: new Headers(this.headers)\n\t\t};\n\t}\n\t/**\n\t* Perform a SELECT query on the table or view.\n\t*\n\t* @param columns - The columns to retrieve, separated by commas. Columns can be renamed when returned with `customName:columnName`\n\t*\n\t* @param options - Named parameters\n\t*\n\t* @param options.head - When set to `true`, `data` will not be returned.\n\t* Useful if you only need the count.\n\t*\n\t* @param options.count - Count algorithm to use to count rows in the table or view.\n\t*\n\t* `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n\t* hood.\n\t*\n\t* `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n\t* statistics under the hood.\n\t*\n\t* `\"estimated\"`: Uses exact count for low numbers and planned count for high\n\t* numbers.\n\t*\n\t* @remarks\n\t* When using `count` with `.range()` or `.limit()`, the returned `count` is the total number of rows\n\t* that match your filters, not the number of rows in the current page. Use this to build pagination UI.\n\t\n\t* - By default, Supabase projects return a maximum of 1,000 rows. This setting can be changed in your project's [API settings](/dashboard/project/_/settings/api). It's recommended that you keep it low to limit the payload size of accidental or malicious requests. You can use `range()` queries to paginate through your data.\n\t* - `select()` can be combined with [Filters](/docs/reference/javascript/using-filters)\n\t* - `select()` can be combined with [Modifiers](/docs/reference/javascript/using-modifiers)\n\t* - `apikey` is a reserved keyword if you're using the [Supabase Platform](/docs/guides/platform) and [should be avoided as a column name](https://github.com/supabase/supabase/issues/5465). *\n\t* @category Database\n\t*\n\t* @example Getting your data\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select()\n\t* ```\n\t*\n\t* @exampleSql Getting your data\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Harry'),\n\t* (2, 'Frodo'),\n\t* (3, 'Katniss');\n\t* ```\n\t*\n\t* @exampleResponse Getting your data\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"Harry\"\n\t* },\n\t* {\n\t* \"id\": 2,\n\t* \"name\": \"Frodo\"\n\t* },\n\t* {\n\t* \"id\": 3,\n\t* \"name\": \"Katniss\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example Selecting specific columns\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .from('characters')\n\t* .select('name')\n\t* ```\n\t*\n\t* @exampleSql Selecting specific columns\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Frodo'),\n\t* (2, 'Harry'),\n\t* (3, 'Katniss');\n\t* ```\n\t*\n\t* @exampleResponse Selecting specific columns\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"Frodo\"\n\t* },\n\t* {\n\t* \"name\": \"Harry\"\n\t* },\n\t* {\n\t* \"name\": \"Katniss\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Query referenced tables\n\t* If your database has foreign key relationships, you can query related tables too.\n\t*\n\t* @example Query referenced tables\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .from('orchestral_sections')\n\t* .select(`\n\t* name,\n\t* instruments (\n\t* name\n\t* )\n\t* `)\n\t* ```\n\t*\n\t* @exampleSql Query referenced tables\n\t* ```sql\n\t* create table\n\t* orchestral_sections (id int8 primary key, name text);\n\t* create table\n\t* instruments (\n\t* id int8 primary key,\n\t* section_id int8 not null references orchestral_sections,\n\t* name text\n\t* );\n\t*\n\t* insert into\n\t* orchestral_sections (id, name)\n\t* values\n\t* (1, 'strings'),\n\t* (2, 'woodwinds');\n\t* insert into\n\t* instruments (id, section_id, name)\n\t* values\n\t* (1, 2, 'flute'),\n\t* (2, 1, 'violin');\n\t* ```\n\t*\n\t* @exampleResponse Query referenced tables\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"strings\",\n\t* \"instruments\": [\n\t* {\n\t* \"name\": \"violin\"\n\t* }\n\t* ]\n\t* },\n\t* {\n\t* \"name\": \"woodwinds\",\n\t* \"instruments\": [\n\t* {\n\t* \"name\": \"flute\"\n\t* }\n\t* ]\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Query referenced tables with spaces in their names\n\t* If your table name contains spaces, you must use double quotes in the `select` statement to reference the table.\n\t*\n\t* @example Query referenced tables with spaces in their names\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .from('orchestral sections')\n\t* .select(`\n\t* name,\n\t* \"musical instruments\" (\n\t* name\n\t* )\n\t* `)\n\t* ```\n\t*\n\t* @exampleSql Query referenced tables with spaces in their names\n\t* ```sql\n\t* create table\n\t* \"orchestral sections\" (id int8 primary key, name text);\n\t* create table\n\t* \"musical instruments\" (\n\t* id int8 primary key,\n\t* section_id int8 not null references \"orchestral sections\",\n\t* name text\n\t* );\n\t*\n\t* insert into\n\t* \"orchestral sections\" (id, name)\n\t* values\n\t* (1, 'strings'),\n\t* (2, 'woodwinds');\n\t* insert into\n\t* \"musical instruments\" (id, section_id, name)\n\t* values\n\t* (1, 2, 'flute'),\n\t* (2, 1, 'violin');\n\t* ```\n\t*\n\t* @exampleResponse Query referenced tables with spaces in their names\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"strings\",\n\t* \"musical instruments\": [\n\t* {\n\t* \"name\": \"violin\"\n\t* }\n\t* ]\n\t* },\n\t* {\n\t* \"name\": \"woodwinds\",\n\t* \"musical instruments\": [\n\t* {\n\t* \"name\": \"flute\"\n\t* }\n\t* ]\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Query referenced tables through a join table\n\t* If you're in a situation where your tables are **NOT** directly\n\t* related, but instead are joined by a _join table_, you can still use\n\t* the `select()` method to query the related data. The join table needs\n\t* to have the foreign keys as part of its composite primary key.\n\t*\n\t* @example Query referenced tables through a join table\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('users')\n\t* .select(`\n\t* name,\n\t* teams (\n\t* name\n\t* )\n\t* `)\n\t* \n\t* ```\n\t*\n\t* @exampleSql Query referenced tables through a join table\n\t* ```sql\n\t* create table\n\t* users (\n\t* id int8 primary key,\n\t* name text\n\t* );\n\t* create table\n\t* teams (\n\t* id int8 primary key,\n\t* name text\n\t* );\n\t* -- join table\n\t* create table\n\t* users_teams (\n\t* user_id int8 not null references users,\n\t* team_id int8 not null references teams,\n\t* -- both foreign keys must be part of a composite primary key\n\t* primary key (user_id, team_id)\n\t* );\n\t*\n\t* insert into\n\t* users (id, name)\n\t* values\n\t* (1, 'Kiran'),\n\t* (2, 'Evan');\n\t* insert into\n\t* teams (id, name)\n\t* values\n\t* (1, 'Green'),\n\t* (2, 'Blue');\n\t* insert into\n\t* users_teams (user_id, team_id)\n\t* values\n\t* (1, 1),\n\t* (1, 2),\n\t* (2, 2);\n\t* ```\n\t*\n\t* @exampleResponse Query referenced tables through a join table\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"Kiran\",\n\t* \"teams\": [\n\t* {\n\t* \"name\": \"Green\"\n\t* },\n\t* {\n\t* \"name\": \"Blue\"\n\t* }\n\t* ]\n\t* },\n\t* {\n\t* \"name\": \"Evan\",\n\t* \"teams\": [\n\t* {\n\t* \"name\": \"Blue\"\n\t* }\n\t* ]\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* \n\t* ```\n\t*\n\t* @exampleDescription Query the same referenced table multiple times\n\t* If you need to query the same referenced table twice, use the name of the\n\t* joined column to identify which join to use. You can also give each\n\t* column an alias.\n\t*\n\t* @example Query the same referenced table multiple times\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('messages')\n\t* .select(`\n\t* content,\n\t* from:sender_id(name),\n\t* to:receiver_id(name)\n\t* `)\n\t*\n\t* // To infer types, use the name of the table (in this case `users`) and\n\t* // the name of the foreign key constraint.\n\t* const { data, error } = await supabase\n\t* .from('messages')\n\t* .select(`\n\t* content,\n\t* from:users!messages_sender_id_fkey(name),\n\t* to:users!messages_receiver_id_fkey(name)\n\t* `)\n\t* ```\n\t*\n\t* @exampleSql Query the same referenced table multiple times\n\t* ```sql\n\t* create table\n\t* users (id int8 primary key, name text);\n\t*\n\t* create table\n\t* messages (\n\t* sender_id int8 not null references users,\n\t* receiver_id int8 not null references users,\n\t* content text\n\t* );\n\t*\n\t* insert into\n\t* users (id, name)\n\t* values\n\t* (1, 'Kiran'),\n\t* (2, 'Evan');\n\t*\n\t* insert into\n\t* messages (sender_id, receiver_id, content)\n\t* values\n\t* (1, 2, '👋');\n\t* ```\n\t* ```\n\t*\n\t* @exampleResponse Query the same referenced table multiple times\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"content\": \"👋\",\n\t* \"from\": {\n\t* \"name\": \"Kiran\"\n\t* },\n\t* \"to\": {\n\t* \"name\": \"Evan\"\n\t* }\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Query nested foreign tables through a join table\n\t* You can use the result of a joined table to gather data in\n\t* another foreign table. With multiple references to the same foreign\n\t* table you must specify the column on which to conduct the join.\n\t*\n\t* @example Query nested foreign tables through a join table\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('games')\n\t* .select(`\n\t* game_id:id,\n\t* away_team:teams!games_away_team_fkey (\n\t* users (\n\t* id,\n\t* name\n\t* )\n\t* )\n\t* `)\n\t* \n\t* ```\n\t*\n\t* @exampleSql Query nested foreign tables through a join table\n\t* ```sql\n\t* ```sql\n\t* create table\n\t* users (\n\t* id int8 primary key,\n\t* name text\n\t* );\n\t* create table\n\t* teams (\n\t* id int8 primary key,\n\t* name text\n\t* );\n\t* -- join table\n\t* create table\n\t* users_teams (\n\t* user_id int8 not null references users,\n\t* team_id int8 not null references teams,\n\t*\n\t* primary key (user_id, team_id)\n\t* );\n\t* create table\n\t* games (\n\t* id int8 primary key,\n\t* home_team int8 not null references teams,\n\t* away_team int8 not null references teams,\n\t* name text\n\t* );\n\t*\n\t* insert into users (id, name)\n\t* values\n\t* (1, 'Kiran'),\n\t* (2, 'Evan');\n\t* insert into\n\t* teams (id, name)\n\t* values\n\t* (1, 'Green'),\n\t* (2, 'Blue');\n\t* insert into\n\t* users_teams (user_id, team_id)\n\t* values\n\t* (1, 1),\n\t* (1, 2),\n\t* (2, 2);\n\t* insert into\n\t* games (id, home_team, away_team, name)\n\t* values\n\t* (1, 1, 2, 'Green vs Blue'),\n\t* (2, 2, 1, 'Blue vs Green');\n\t* ```\n\t*\n\t* @exampleResponse Query nested foreign tables through a join table\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"game_id\": 1,\n\t* \"away_team\": {\n\t* \"users\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"Kiran\"\n\t* },\n\t* {\n\t* \"id\": 2,\n\t* \"name\": \"Evan\"\n\t* }\n\t* ]\n\t* }\n\t* },\n\t* {\n\t* \"game_id\": 2,\n\t* \"away_team\": {\n\t* \"users\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"Kiran\"\n\t* }\n\t* ]\n\t* }\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* \n\t* ```\n\t*\n\t* @exampleDescription Filtering through referenced tables\n\t* If the filter on a referenced table's column is not satisfied, the referenced\n\t* table returns `[]` or `null` but the parent table is not filtered out.\n\t* If you want to filter out the parent table rows, use the `!inner` hint\n\t*\n\t* @example Filtering through referenced tables\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('instruments')\n\t* .select('name, orchestral_sections(*)')\n\t* .eq('orchestral_sections.name', 'percussion')\n\t* ```\n\t*\n\t* @exampleSql Filtering through referenced tables\n\t* ```sql\n\t* create table\n\t* orchestral_sections (id int8 primary key, name text);\n\t* create table\n\t* instruments (\n\t* id int8 primary key,\n\t* section_id int8 not null references orchestral_sections,\n\t* name text\n\t* );\n\t*\n\t* insert into\n\t* orchestral_sections (id, name)\n\t* values\n\t* (1, 'strings'),\n\t* (2, 'woodwinds');\n\t* insert into\n\t* instruments (id, section_id, name)\n\t* values\n\t* (1, 2, 'flute'),\n\t* (2, 1, 'violin');\n\t* ```\n\t*\n\t* @exampleResponse Filtering through referenced tables\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"flute\",\n\t* \"orchestral_sections\": null\n\t* },\n\t* {\n\t* \"name\": \"violin\",\n\t* \"orchestral_sections\": null\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Querying referenced table with count\n\t* You can get the number of rows in a related table by using the\n\t* **count** property.\n\t*\n\t* @example Querying referenced table with count\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('orchestral_sections')\n\t* .select(`*, instruments(count)`)\n\t* ```\n\t*\n\t* @exampleSql Querying referenced table with count\n\t* ```sql\n\t* create table orchestral_sections (\n\t* \"id\" \"uuid\" primary key default \"extensions\".\"uuid_generate_v4\"() not null,\n\t* \"name\" text\n\t* );\n\t*\n\t* create table characters (\n\t* \"id\" \"uuid\" primary key default \"extensions\".\"uuid_generate_v4\"() not null,\n\t* \"name\" text,\n\t* \"section_id\" \"uuid\" references public.orchestral_sections on delete cascade\n\t* );\n\t*\n\t* with section as (\n\t* insert into orchestral_sections (name)\n\t* values ('strings') returning id\n\t* )\n\t* insert into instruments (name, section_id) values\n\t* ('violin', (select id from section)),\n\t* ('viola', (select id from section)),\n\t* ('cello', (select id from section)),\n\t* ('double bass', (select id from section));\n\t* ```\n\t*\n\t* @exampleResponse Querying referenced table with count\n\t* ```json\n\t* [\n\t* {\n\t* \"id\": \"693694e7-d993-4360-a6d7-6294e325d9b6\",\n\t* \"name\": \"strings\",\n\t* \"instruments\": [\n\t* {\n\t* \"count\": 4\n\t* }\n\t* ]\n\t* }\n\t* ]\n\t* ```\n\t*\n\t* @exampleDescription Querying with count option\n\t* You can get the number of rows by using the\n\t* [count](/docs/reference/javascript/select#parameters) option.\n\t*\n\t* @example Querying with count option\n\t* ```ts\n\t* const { count, error } = await supabase\n\t* .from('characters')\n\t* .select('*', { count: 'exact', head: true })\n\t* ```\n\t*\n\t* @exampleSql Querying with count option\n\t* ```sql\n\t* create table\n\t* characters (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* characters (id, name)\n\t* values\n\t* (1, 'Luke'),\n\t* (2, 'Leia'),\n\t* (3, 'Han');\n\t* ```\n\t*\n\t* @exampleResponse Querying with count option\n\t* ```json\n\t* {\n\t* \"count\": 3,\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Querying JSON data\n\t* You can select and filter data inside of\n\t* [JSON](/docs/guides/database/json) columns. Postgres offers some\n\t* [operators](/docs/guides/database/json#query-the-jsonb-data) for\n\t* querying JSON data.\n\t*\n\t* @example Querying JSON data\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('users')\n\t* .select(`\n\t* id, name,\n\t* address->city\n\t* `)\n\t* ```\n\t*\n\t* @exampleSql Querying JSON data\n\t* ```sql\n\t* create table\n\t* users (\n\t* id int8 primary key,\n\t* name text,\n\t* address jsonb\n\t* );\n\t*\n\t* insert into\n\t* users (id, name, address)\n\t* values\n\t* (1, 'Frodo', '{\"city\":\"Hobbiton\"}');\n\t* ```\n\t*\n\t* @exampleResponse Querying JSON data\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"Frodo\",\n\t* \"city\": \"Hobbiton\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Querying referenced table with inner join\n\t* If you don't want to return the referenced table contents, you can leave the parenthesis empty.\n\t* Like `.select('name, orchestral_sections!inner()')`.\n\t*\n\t* @example Querying referenced table with inner join\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('instruments')\n\t* .select('name, orchestral_sections!inner(name)')\n\t* .eq('orchestral_sections.name', 'woodwinds')\n\t* .limit(1)\n\t* ```\n\t*\n\t* @exampleSql Querying referenced table with inner join\n\t* ```sql\n\t* create table orchestral_sections (\n\t* \"id\" \"uuid\" primary key default \"extensions\".\"uuid_generate_v4\"() not null,\n\t* \"name\" text\n\t* );\n\t*\n\t* create table instruments (\n\t* \"id\" \"uuid\" primary key default \"extensions\".\"uuid_generate_v4\"() not null,\n\t* \"name\" text,\n\t* \"section_id\" \"uuid\" references public.orchestral_sections on delete cascade\n\t* );\n\t*\n\t* with section as (\n\t* insert into orchestral_sections (name)\n\t* values ('woodwinds') returning id\n\t* )\n\t* insert into instruments (name, section_id) values\n\t* ('flute', (select id from section)),\n\t* ('clarinet', (select id from section)),\n\t* ('bassoon', (select id from section)),\n\t* ('piccolo', (select id from section));\n\t* ```\n\t*\n\t* @exampleResponse Querying referenced table with inner join\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"flute\",\n\t* \"orchestral_sections\": {\"name\": \"woodwinds\"}\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Switching schemas per query\n\t* In addition to setting the schema during initialization, you can also switch schemas on a per-query basis.\n\t* Make sure you've set up your [database privileges and API settings](/docs/guides/api/using-custom-schemas).\n\t*\n\t* @example Switching schemas per query\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .schema('myschema')\n\t* .from('mytable')\n\t* .select()\n\t* ```\n\t*\n\t* @exampleSql Switching schemas per query\n\t* ```sql\n\t* create schema myschema;\n\t*\n\t* create table myschema.mytable (\n\t* id uuid primary key default gen_random_uuid(),\n\t* data text\n\t* );\n\t*\n\t* insert into myschema.mytable (data) values ('mydata');\n\t* ```\n\t*\n\t* @exampleResponse Switching schemas per query\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": \"4162e008-27b0-4c0f-82dc-ccaeee9a624d\",\n\t* \"data\": \"mydata\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tselect(columns, options) {\n\t\tconst { head = false, count } = options !== null && options !== void 0 ? options : {};\n\t\tconst method = head ? \"HEAD\" : \"GET\";\n\t\tlet quoted = false;\n\t\tconst cleanedColumns = (columns !== null && columns !== void 0 ? columns : \"*\").split(\"\").map((c) => {\n\t\t\tif (/\\s/.test(c) && !quoted) return \"\";\n\t\t\tif (c === \"\\\"\") quoted = !quoted;\n\t\t\treturn c;\n\t\t}).join(\"\");\n\t\tconst { url, headers } = this.cloneRequestState();\n\t\turl.searchParams.set(\"select\", cleanedColumns);\n\t\tif (count) headers.append(\"Prefer\", `count=${count}`);\n\t\treturn new PostgrestFilterBuilder({\n\t\t\tmethod,\n\t\t\turl,\n\t\t\theaders,\n\t\t\tschema: this.schema,\n\t\t\tfetch: this.fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n\t/**\n\t* Perform an INSERT into the table or view.\n\t*\n\t* By default, inserted rows are not returned. To return it, chain the call\n\t* with `.select()`.\n\t*\n\t* @param values - The values to insert. Pass an object to insert a single row\n\t* or an array to insert multiple rows.\n\t*\n\t* @param options - Named parameters\n\t*\n\t* @param options.count - Count algorithm to use to count inserted rows.\n\t*\n\t* `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n\t* hood.\n\t*\n\t* `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n\t* statistics under the hood.\n\t*\n\t* `\"estimated\"`: Uses exact count for low numbers and planned count for high\n\t* numbers.\n\t*\n\t* @param options.defaultToNull - Make missing fields default to `null`.\n\t* Otherwise, use the default value for the column. Only applies for bulk\n\t* inserts.\n\t*\n\t* @category Database\n\t*\n\t* @example Create a record\n\t* ```ts\n\t* const { error } = await supabase\n\t* .from('countries')\n\t* .insert({ id: 1, name: 'Mordor' })\n\t* ```\n\t*\n\t* @exampleSql Create a record\n\t* ```sql\n\t* create table\n\t* countries (id int8 primary key, name text);\n\t* ```\n\t*\n\t* @exampleResponse Create a record\n\t* ```json\n\t* {\n\t* \"status\": 201,\n\t* \"statusText\": \"Created\"\n\t* }\n\t* ```\n\t*\n\t* @example Create a record and return it\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('countries')\n\t* .insert({ id: 1, name: 'Mordor' })\n\t* .select()\n\t* ```\n\t*\n\t* @exampleSql Create a record and return it\n\t* ```sql\n\t* create table\n\t* countries (id int8 primary key, name text);\n\t* ```\n\t*\n\t* @exampleResponse Create a record and return it\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"Mordor\"\n\t* }\n\t* ],\n\t* \"status\": 201,\n\t* \"statusText\": \"Created\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Bulk create\n\t* A bulk create operation is handled in a single transaction.\n\t* If any of the inserts fail, none of the rows are inserted.\n\t*\n\t* @example Bulk create\n\t* ```ts\n\t* const { error } = await supabase\n\t* .from('countries')\n\t* .insert([\n\t* { id: 1, name: 'Mordor' },\n\t* { id: 1, name: 'The Shire' },\n\t* ])\n\t* ```\n\t*\n\t* @exampleSql Bulk create\n\t* ```sql\n\t* create table\n\t* countries (id int8 primary key, name text);\n\t* ```\n\t*\n\t* @exampleResponse Bulk create\n\t* ```json\n\t* {\n\t* \"error\": {\n\t* \"code\": \"23505\",\n\t* \"details\": \"Key (id)=(1) already exists.\",\n\t* \"hint\": null,\n\t* \"message\": \"duplicate key value violates unique constraint \\\"countries_pkey\\\"\"\n\t* },\n\t* \"status\": 409,\n\t* \"statusText\": \"Conflict\"\n\t* }\n\t* ```\n\t*/\n\tinsert(values, { count, defaultToNull = true } = {}) {\n\t\tvar _this$fetch;\n\t\tconst method = \"POST\";\n\t\tconst { url, headers } = this.cloneRequestState();\n\t\tif (count) headers.append(\"Prefer\", `count=${count}`);\n\t\tif (!defaultToNull) headers.append(\"Prefer\", `missing=default`);\n\t\tif (Array.isArray(values)) {\n\t\t\tconst columns = values.reduce((acc, x) => acc.concat(Object.keys(x)), []);\n\t\t\tif (columns.length > 0) {\n\t\t\t\tconst uniqueColumns = [...new Set(columns)].map((column) => `\"${column}\"`);\n\t\t\t\turl.searchParams.set(\"columns\", uniqueColumns.join(\",\"));\n\t\t\t}\n\t\t}\n\t\treturn new PostgrestFilterBuilder({\n\t\t\tmethod,\n\t\t\turl,\n\t\t\theaders,\n\t\t\tschema: this.schema,\n\t\t\tbody: values,\n\t\t\tfetch: (_this$fetch = this.fetch) !== null && _this$fetch !== void 0 ? _this$fetch : fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n\t/**\n\t* Perform an UPSERT on the table or view. Depending on the column(s) passed\n\t* to `onConflict`, `.upsert()` allows you to perform the equivalent of\n\t* `.insert()` if a row with the corresponding `onConflict` columns doesn't\n\t* exist, or if it does exist, perform an alternative action depending on\n\t* `ignoreDuplicates`.\n\t*\n\t* By default, upserted rows are not returned. To return it, chain the call\n\t* with `.select()`.\n\t*\n\t* @param values - The values to upsert with. Pass an object to upsert a\n\t* single row or an array to upsert multiple rows.\n\t*\n\t* @param options - Named parameters\n\t*\n\t* @param options.onConflict - Comma-separated UNIQUE column(s) to specify how\n\t* duplicate rows are determined. Two rows are duplicates if all the\n\t* `onConflict` columns are equal.\n\t*\n\t* @param options.ignoreDuplicates - If `true`, duplicate rows are ignored. If\n\t* `false`, duplicate rows are merged with existing rows.\n\t*\n\t* @param options.count - Count algorithm to use to count upserted rows.\n\t*\n\t* `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n\t* hood.\n\t*\n\t* `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n\t* statistics under the hood.\n\t*\n\t* `\"estimated\"`: Uses exact count for low numbers and planned count for high\n\t* numbers.\n\t*\n\t* @param options.defaultToNull - Make missing fields default to `null`.\n\t* Otherwise, use the default value for the column. This only applies when\n\t* inserting new rows, not when merging with existing rows under\n\t* `ignoreDuplicates: false`. This also only applies when doing bulk upserts.\n\t*\n\t* @example Upsert a single row using a unique key\n\t* ```ts\n\t* // Upserting a single row, overwriting based on the 'username' unique column\n\t* const { data, error } = await supabase\n\t* .from('users')\n\t* .upsert({ username: 'supabot' }, { onConflict: 'username' })\n\t*\n\t* // Example response:\n\t* // {\n\t* // data: [\n\t* // { id: 4, message: 'bar', username: 'supabot' }\n\t* // ],\n\t* // error: null\n\t* // }\n\t* ```\n\t*\n\t* @example Upsert with conflict resolution and exact row counting\n\t* ```ts\n\t* // Upserting and returning exact count\n\t* const { data, error, count } = await supabase\n\t* .from('users')\n\t* .upsert(\n\t* {\n\t* id: 3,\n\t* message: 'foo',\n\t* username: 'supabot'\n\t* },\n\t* {\n\t* onConflict: 'username',\n\t* count: 'exact'\n\t* }\n\t* )\n\t*\n\t* // Example response:\n\t* // {\n\t* // data: [\n\t* // {\n\t* // id: 42,\n\t* // handle: \"saoirse\",\n\t* // display_name: \"Saoirse\"\n\t* // }\n\t* // ],\n\t* // count: 1,\n\t* // error: null\n\t* // }\n\t* ```\n\t*\n\t* @category Database\n\t*\n\t* @remarks\n\t* - Primary keys must be included in `values` to use upsert.\n\t*\n\t* @example Upsert your data\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('instruments')\n\t* .upsert({ id: 1, name: 'piano' })\n\t* .select()\n\t* ```\n\t*\n\t* @exampleSql Upsert your data\n\t* ```sql\n\t* create table\n\t* instruments (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* instruments (id, name)\n\t* values\n\t* (1, 'harpsichord');\n\t* ```\n\t*\n\t* @exampleResponse Upsert your data\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"piano\"\n\t* }\n\t* ],\n\t* \"status\": 201,\n\t* \"statusText\": \"Created\"\n\t* }\n\t* ```\n\t*\n\t* @example Bulk Upsert your data\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('instruments')\n\t* .upsert([\n\t* { id: 1, name: 'piano' },\n\t* { id: 2, name: 'harp' },\n\t* ])\n\t* .select()\n\t* ```\n\t*\n\t* @exampleSql Bulk Upsert your data\n\t* ```sql\n\t* create table\n\t* instruments (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* instruments (id, name)\n\t* values\n\t* (1, 'harpsichord');\n\t* ```\n\t*\n\t* @exampleResponse Bulk Upsert your data\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"piano\"\n\t* },\n\t* {\n\t* \"id\": 2,\n\t* \"name\": \"harp\"\n\t* }\n\t* ],\n\t* \"status\": 201,\n\t* \"statusText\": \"Created\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Upserting into tables with constraints\n\t* In the following query, `upsert()` implicitly uses the `id`\n\t* (primary key) column to determine conflicts. If there is no existing\n\t* row with the same `id`, `upsert()` inserts a new row, which\n\t* will fail in this case as there is already a row with `handle` `\"saoirse\"`.\n\t* Using the `onConflict` option, you can instruct `upsert()` to use\n\t* another column with a unique constraint to determine conflicts.\n\t*\n\t* @example Upserting into tables with constraints\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('users')\n\t* .upsert({ id: 42, handle: 'saoirse', display_name: 'Saoirse' })\n\t* .select()\n\t* ```\n\t*\n\t* @exampleSql Upserting into tables with constraints\n\t* ```sql\n\t* create table\n\t* users (\n\t* id int8 generated by default as identity primary key,\n\t* handle text not null unique,\n\t* display_name text\n\t* );\n\t*\n\t* insert into\n\t* users (id, handle, display_name)\n\t* values\n\t* (1, 'saoirse', null);\n\t* ```\n\t*\n\t* @exampleResponse Upserting into tables with constraints\n\t* ```json\n\t* {\n\t* \"error\": {\n\t* \"code\": \"23505\",\n\t* \"details\": \"Key (handle)=(saoirse) already exists.\",\n\t* \"hint\": null,\n\t* \"message\": \"duplicate key value violates unique constraint \\\"users_handle_key\\\"\"\n\t* },\n\t* \"status\": 409,\n\t* \"statusText\": \"Conflict\"\n\t* }\n\t* ```\n\t*/\n\tupsert(values, { onConflict, ignoreDuplicates = false, count, defaultToNull = true } = {}) {\n\t\tvar _this$fetch2;\n\t\tconst method = \"POST\";\n\t\tconst { url, headers } = this.cloneRequestState();\n\t\theaders.append(\"Prefer\", `resolution=${ignoreDuplicates ? \"ignore\" : \"merge\"}-duplicates`);\n\t\tif (onConflict !== void 0) url.searchParams.set(\"on_conflict\", onConflict);\n\t\tif (count) headers.append(\"Prefer\", `count=${count}`);\n\t\tif (!defaultToNull) headers.append(\"Prefer\", \"missing=default\");\n\t\tif (Array.isArray(values)) {\n\t\t\tconst columns = values.reduce((acc, x) => acc.concat(Object.keys(x)), []);\n\t\t\tif (columns.length > 0) {\n\t\t\t\tconst uniqueColumns = [...new Set(columns)].map((column) => `\"${column}\"`);\n\t\t\t\turl.searchParams.set(\"columns\", uniqueColumns.join(\",\"));\n\t\t\t}\n\t\t}\n\t\treturn new PostgrestFilterBuilder({\n\t\t\tmethod,\n\t\t\turl,\n\t\t\theaders,\n\t\t\tschema: this.schema,\n\t\t\tbody: values,\n\t\t\tfetch: (_this$fetch2 = this.fetch) !== null && _this$fetch2 !== void 0 ? _this$fetch2 : fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n\t/**\n\t* Perform an UPDATE on the table or view.\n\t*\n\t* By default, updated rows are not returned. To return it, chain the call\n\t* with `.select()` after filters.\n\t*\n\t* @param values - The values to update with\n\t*\n\t* @param options - Named parameters\n\t*\n\t* @param options.count - Count algorithm to use to count updated rows.\n\t*\n\t* `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n\t* hood.\n\t*\n\t* `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n\t* statistics under the hood.\n\t*\n\t* `\"estimated\"`: Uses exact count for low numbers and planned count for high\n\t* numbers.\n\t*\n\t* @category Database\n\t*\n\t* @remarks\n\t* - `update()` should always be combined with [Filters](/docs/reference/javascript/using-filters) to target the item(s) you wish to update.\n\t*\n\t* @example Updating your data\n\t* ```ts\n\t* const { error } = await supabase\n\t* .from('instruments')\n\t* .update({ name: 'piano' })\n\t* .eq('id', 1)\n\t* ```\n\t*\n\t* @exampleSql Updating your data\n\t* ```sql\n\t* create table\n\t* instruments (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* instruments (id, name)\n\t* values\n\t* (1, 'harpsichord');\n\t* ```\n\t*\n\t* @exampleResponse Updating your data\n\t* ```json\n\t* {\n\t* \"status\": 204,\n\t* \"statusText\": \"No Content\"\n\t* }\n\t* ```\n\t*\n\t* @example Update a record and return it\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('instruments')\n\t* .update({ name: 'piano' })\n\t* .eq('id', 1)\n\t* .select()\n\t* ```\n\t*\n\t* @exampleSql Update a record and return it\n\t* ```sql\n\t* create table\n\t* instruments (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* instruments (id, name)\n\t* values\n\t* (1, 'harpsichord');\n\t* ```\n\t*\n\t* @exampleResponse Update a record and return it\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"piano\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Updating JSON data\n\t* Postgres offers some\n\t* [operators](/docs/guides/database/json#query-the-jsonb-data) for\n\t* working with JSON data. Currently, it is only possible to update the entire JSON document.\n\t*\n\t* @example Updating JSON data\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('users')\n\t* .update({\n\t* address: {\n\t* street: 'Melrose Place',\n\t* postcode: 90210\n\t* }\n\t* })\n\t* .eq('address->postcode', 90210)\n\t* .select()\n\t* ```\n\t*\n\t* @exampleSql Updating JSON data\n\t* ```sql\n\t* create table\n\t* users (\n\t* id int8 primary key,\n\t* name text,\n\t* address jsonb\n\t* );\n\t*\n\t* insert into\n\t* users (id, name, address)\n\t* values\n\t* (1, 'Michael', '{ \"postcode\": 90210 }');\n\t* ```\n\t*\n\t* @exampleResponse Updating JSON data\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"Michael\",\n\t* \"address\": {\n\t* \"street\": \"Melrose Place\",\n\t* \"postcode\": 90210\n\t* }\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\tupdate(values, { count } = {}) {\n\t\tvar _this$fetch3;\n\t\tconst method = \"PATCH\";\n\t\tconst { url, headers } = this.cloneRequestState();\n\t\tif (count) headers.append(\"Prefer\", `count=${count}`);\n\t\treturn new PostgrestFilterBuilder({\n\t\t\tmethod,\n\t\t\turl,\n\t\t\theaders,\n\t\t\tschema: this.schema,\n\t\t\tbody: values,\n\t\t\tfetch: (_this$fetch3 = this.fetch) !== null && _this$fetch3 !== void 0 ? _this$fetch3 : fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n\t/**\n\t* Perform a DELETE on the table or view.\n\t*\n\t* By default, deleted rows are not returned. To return it, chain the call\n\t* with `.select()` after filters.\n\t*\n\t* @param options - Named parameters\n\t*\n\t* @param options.count - Count algorithm to use to count deleted rows.\n\t*\n\t* `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n\t* hood.\n\t*\n\t* `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n\t* statistics under the hood.\n\t*\n\t* `\"estimated\"`: Uses exact count for low numbers and planned count for high\n\t* numbers.\n\t*\n\t* @category Database\n\t*\n\t* @remarks\n\t* - `delete()` should always be combined with [filters](/docs/reference/javascript/using-filters) to target the item(s) you wish to delete.\n\t* - If you use `delete()` with filters and you have\n\t* [RLS](/docs/learn/auth-deep-dive/auth-row-level-security) enabled, only\n\t* rows visible through `SELECT` policies are deleted. Note that by default\n\t* no rows are visible, so you need at least one `SELECT`/`ALL` policy that\n\t* makes the rows visible.\n\t* - When using `delete().in()`, specify an array of values to target multiple rows with a single query. This is particularly useful for batch deleting entries that share common criteria, such as deleting users by their IDs. Ensure that the array you provide accurately represents all records you intend to delete to avoid unintended data removal.\n\t*\n\t* @example Delete a single record\n\t* ```ts\n\t* const response = await supabase\n\t* .from('countries')\n\t* .delete()\n\t* .eq('id', 1)\n\t* ```\n\t*\n\t* @exampleSql Delete a single record\n\t* ```sql\n\t* create table\n\t* countries (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* countries (id, name)\n\t* values\n\t* (1, 'Mordor');\n\t* ```\n\t*\n\t* @exampleResponse Delete a single record\n\t* ```json\n\t* {\n\t* \"status\": 204,\n\t* \"statusText\": \"No Content\"\n\t* }\n\t* ```\n\t*\n\t* @example Delete a record and return it\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .from('countries')\n\t* .delete()\n\t* .eq('id', 1)\n\t* .select()\n\t* ```\n\t*\n\t* @exampleSql Delete a record and return it\n\t* ```sql\n\t* create table\n\t* countries (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* countries (id, name)\n\t* values\n\t* (1, 'Mordor');\n\t* ```\n\t*\n\t* @exampleResponse Delete a record and return it\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"id\": 1,\n\t* \"name\": \"Mordor\"\n\t* }\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example Delete multiple records\n\t* ```ts\n\t* const response = await supabase\n\t* .from('countries')\n\t* .delete()\n\t* .in('id', [1, 2, 3])\n\t* ```\n\t*\n\t* @exampleSql Delete multiple records\n\t* ```sql\n\t* create table\n\t* countries (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* countries (id, name)\n\t* values\n\t* (1, 'Rohan'), (2, 'The Shire'), (3, 'Mordor');\n\t* ```\n\t*\n\t* @exampleResponse Delete multiple records\n\t* ```json\n\t* {\n\t* \"status\": 204,\n\t* \"statusText\": \"No Content\"\n\t* }\n\t* ```\n\t*/\n\tdelete({ count } = {}) {\n\t\tvar _this$fetch4;\n\t\tconst method = \"DELETE\";\n\t\tconst { url, headers } = this.cloneRequestState();\n\t\tif (count) headers.append(\"Prefer\", `count=${count}`);\n\t\treturn new PostgrestFilterBuilder({\n\t\t\tmethod,\n\t\t\turl,\n\t\t\theaders,\n\t\t\tschema: this.schema,\n\t\t\tfetch: (_this$fetch4 = this.fetch) !== null && _this$fetch4 !== void 0 ? _this$fetch4 : fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n};\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.101.0/helpers/typeof.js\nfunction _typeof(o) {\n\t\"@babel/helpers - typeof\";\n\treturn _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(o$1) {\n\t\treturn typeof o$1;\n\t} : function(o$1) {\n\t\treturn o$1 && \"function\" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? \"symbol\" : typeof o$1;\n\t}, _typeof(o);\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.101.0/helpers/toPrimitive.js\nfunction toPrimitive(t, r) {\n\tif (\"object\" != _typeof(t) || !t) return t;\n\tvar e = t[Symbol.toPrimitive];\n\tif (void 0 !== e) {\n\t\tvar i = e.call(t, r || \"default\");\n\t\tif (\"object\" != _typeof(i)) return i;\n\t\tthrow new TypeError(\"@@toPrimitive must return a primitive value.\");\n\t}\n\treturn (\"string\" === r ? String : Number)(t);\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.101.0/helpers/toPropertyKey.js\nfunction toPropertyKey(t) {\n\tvar i = toPrimitive(t, \"string\");\n\treturn \"symbol\" == _typeof(i) ? i : i + \"\";\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.101.0/helpers/defineProperty.js\nfunction _defineProperty(e, r, t) {\n\treturn (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n\t\tvalue: t,\n\t\tenumerable: !0,\n\t\tconfigurable: !0,\n\t\twritable: !0\n\t}) : e[r] = t, e;\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.101.0/helpers/objectSpread2.js\nfunction ownKeys(e, r) {\n\tvar t = Object.keys(e);\n\tif (Object.getOwnPropertySymbols) {\n\t\tvar o = Object.getOwnPropertySymbols(e);\n\t\tr && (o = o.filter(function(r$1) {\n\t\t\treturn Object.getOwnPropertyDescriptor(e, r$1).enumerable;\n\t\t})), t.push.apply(t, o);\n\t}\n\treturn t;\n}\nfunction _objectSpread2(e) {\n\tfor (var r = 1; r < arguments.length; r++) {\n\t\tvar t = null != arguments[r] ? arguments[r] : {};\n\t\tr % 2 ? ownKeys(Object(t), !0).forEach(function(r$1) {\n\t\t\t_defineProperty(e, r$1, t[r$1]);\n\t\t}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r$1) {\n\t\t\tObject.defineProperty(e, r$1, Object.getOwnPropertyDescriptor(t, r$1));\n\t\t});\n\t}\n\treturn e;\n}\n\n//#endregion\n//#region src/PostgrestClient.ts\n/**\n* PostgREST client.\n*\n* @typeParam Database - Types for the schema from the [type\n* generator](https://supabase.com/docs/reference/javascript/next/typescript-support)\n*\n* @typeParam SchemaName - Postgres schema to switch to. Must be a string\n* literal, the same one passed to the constructor. If the schema is not\n* `\"public\"`, this must be supplied manually.\n*/\nvar PostgrestClient = class PostgrestClient {\n\t/**\n\t* Creates a PostgREST client.\n\t*\n\t* @param url - URL of the PostgREST endpoint\n\t* @param options - Named parameters\n\t* @param options.headers - Custom headers\n\t* @param options.schema - Postgres schema to switch to\n\t* @param options.fetch - Custom fetch\n\t* @param options.timeout - Optional timeout in milliseconds for all requests. When set, requests will automatically abort after this duration to prevent indefinite hangs.\n\t* @param options.urlLengthLimit - Maximum URL length in characters before warnings/errors are triggered. Defaults to 8000.\n\t* @param options.retry - Enable or disable automatic retries for transient errors.\n\t* When enabled, idempotent requests (GET, HEAD, OPTIONS) that fail with network\n\t* errors or HTTP 503/520 responses will be automatically retried up to 3 times\n\t* with exponential backoff (1s, 2s, 4s). Defaults to `true`.\n\t* @example Using supabase-js (recommended)\n\t* ```ts\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t* const { data, error } = await supabase.from('profiles').select('*')\n\t* ```\n\t*\n\t* @category Database\n\t*\n\t* @remarks\n\t* - A `timeout` option (in milliseconds) can be set to automatically abort requests that take too long.\n\t* - A `urlLengthLimit` option (default: 8000) can be set to control when URL length warnings are included in error messages for aborted requests.\n\t*\n\t* @example Standalone import for bundle-sensitive environments\n\t* ```ts\n\t* import { PostgrestClient } from '@supabase/postgrest-js'\n\t*\n\t* const postgrest = new PostgrestClient('https://xyzcompany.supabase.co/rest/v1', {\n\t* headers: { apikey: 'your-publishable-key' },\n\t* schema: 'public',\n\t* timeout: 30000, // 30 second timeout\n\t* })\n\t* ```\n\t*/\n\tconstructor(url, { headers = {}, schema, fetch: fetch$1, timeout, urlLengthLimit = 8e3, retry } = {}) {\n\t\tthis.url = url;\n\t\tthis.headers = new Headers(headers);\n\t\tthis.schemaName = schema;\n\t\tthis.urlLengthLimit = urlLengthLimit;\n\t\tconst originalFetch = fetch$1 !== null && fetch$1 !== void 0 ? fetch$1 : globalThis.fetch;\n\t\tif (timeout !== void 0 && timeout > 0) this.fetch = (input, init) => {\n\t\t\tconst controller = new AbortController();\n\t\t\tconst timeoutId = setTimeout(() => controller.abort(), timeout);\n\t\t\tconst existingSignal = init === null || init === void 0 ? void 0 : init.signal;\n\t\t\tif (existingSignal) {\n\t\t\t\tif (existingSignal.aborted) {\n\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\treturn originalFetch(input, init);\n\t\t\t\t}\n\t\t\t\tconst abortHandler = () => {\n\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\tcontroller.abort();\n\t\t\t\t};\n\t\t\t\texistingSignal.addEventListener(\"abort\", abortHandler, { once: true });\n\t\t\t\treturn originalFetch(input, _objectSpread2(_objectSpread2({}, init), {}, { signal: controller.signal })).finally(() => {\n\t\t\t\t\tclearTimeout(timeoutId);\n\t\t\t\t\texistingSignal.removeEventListener(\"abort\", abortHandler);\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn originalFetch(input, _objectSpread2(_objectSpread2({}, init), {}, { signal: controller.signal })).finally(() => clearTimeout(timeoutId));\n\t\t};\n\t\telse this.fetch = originalFetch;\n\t\tthis.retry = retry;\n\t}\n\t/**\n\t* Perform a query on a table or a view.\n\t*\n\t* @param relation - The table or view name to query\n\t*\n\t* @category Database\n\t*/\n\tfrom(relation) {\n\t\tif (!relation || typeof relation !== \"string\" || relation.trim() === \"\") throw new Error(\"Invalid relation name: relation must be a non-empty string.\");\n\t\treturn new PostgrestQueryBuilder(new URL(`${this.url}/${relation}`), {\n\t\t\theaders: new Headers(this.headers),\n\t\t\tschema: this.schemaName,\n\t\t\tfetch: this.fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n\t/**\n\t* Select a schema to query or perform an function (rpc) call.\n\t*\n\t* The schema needs to be on the list of exposed schemas inside Supabase.\n\t*\n\t* @param schema - The schema to query\n\t*\n\t* @category Database\n\t*/\n\tschema(schema) {\n\t\treturn new PostgrestClient(this.url, {\n\t\t\theaders: this.headers,\n\t\t\tschema,\n\t\t\tfetch: this.fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n\t/**\n\t* Perform a function call.\n\t*\n\t* @param fn - The function name to call\n\t* @param args - The arguments to pass to the function call\n\t* @param options - Named parameters\n\t* @param options.head - When set to `true`, `data` will not be returned.\n\t* Useful if you only need the count.\n\t* @param options.get - When set to `true`, the function will be called with\n\t* read-only access mode.\n\t* @param options.count - Count algorithm to use to count rows returned by the\n\t* function. Only applicable for [set-returning\n\t* functions](https://www.postgresql.org/docs/current/functions-srf.html).\n\t*\n\t* `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n\t* hood.\n\t*\n\t* `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n\t* statistics under the hood.\n\t*\n\t* `\"estimated\"`: Uses exact count for low numbers and planned count for high\n\t* numbers.\n\t*\n\t* @example\n\t* ```ts\n\t* // For cross-schema functions where type inference fails, use overrideTypes:\n\t* const { data } = await supabase\n\t* .schema('schema_b')\n\t* .rpc('function_a', {})\n\t* .overrideTypes<{ id: string; user_id: string }[]>()\n\t* ```\n\t*\n\t* @category Database\n\t*\n\t* @example Call a Postgres function without arguments\n\t* ```ts\n\t* const { data, error } = await supabase.rpc('hello_world')\n\t* ```\n\t*\n\t* @exampleSql Call a Postgres function without arguments\n\t* ```sql\n\t* create function hello_world() returns text as $$\n\t* select 'Hello world';\n\t* $$ language sql;\n\t* ```\n\t*\n\t* @exampleResponse Call a Postgres function without arguments\n\t* ```json\n\t* {\n\t* \"data\": \"Hello world\",\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example Call a Postgres function with arguments\n\t* ```ts\n\t* const { data, error } = await supabase.rpc('echo', { say: '👋' })\n\t* ```\n\t*\n\t* @exampleSql Call a Postgres function with arguments\n\t* ```sql\n\t* create function echo(say text) returns text as $$\n\t* select say;\n\t* $$ language sql;\n\t* ```\n\t*\n\t* @exampleResponse Call a Postgres function with arguments\n\t* ```json\n\t* {\n\t* \"data\": \"👋\",\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t*\n\t* ```\n\t*\n\t* @exampleDescription Bulk processing\n\t* You can process large payloads by passing in an array as an argument.\n\t*\n\t* @example Bulk processing\n\t* ```ts\n\t* const { data, error } = await supabase.rpc('add_one_each', { arr: [1, 2, 3] })\n\t* ```\n\t*\n\t* @exampleSql Bulk processing\n\t* ```sql\n\t* create function add_one_each(arr int[]) returns int[] as $$\n\t* select array_agg(n + 1) from unnest(arr) as n;\n\t* $$ language sql;\n\t* ```\n\t*\n\t* @exampleResponse Bulk processing\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* 2,\n\t* 3,\n\t* 4\n\t* ],\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @exampleDescription Call a Postgres function with filters\n\t* Postgres functions that return tables can also be combined with [Filters](/docs/reference/javascript/using-filters) and [Modifiers](/docs/reference/javascript/using-modifiers).\n\t*\n\t* @example Call a Postgres function with filters\n\t* ```ts\n\t* const { data, error } = await supabase\n\t* .rpc('list_stored_countries')\n\t* .eq('id', 1)\n\t* .single()\n\t* ```\n\t*\n\t* @exampleSql Call a Postgres function with filters\n\t* ```sql\n\t* create table\n\t* countries (id int8 primary key, name text);\n\t*\n\t* insert into\n\t* countries (id, name)\n\t* values\n\t* (1, 'Rohan'),\n\t* (2, 'The Shire');\n\t*\n\t* create function list_stored_countries() returns setof countries as $$\n\t* select * from countries;\n\t* $$ language sql;\n\t* ```\n\t*\n\t* @exampleResponse Call a Postgres function with filters\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"id\": 1,\n\t* \"name\": \"Rohan\"\n\t* },\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*\n\t* @example Call a read-only Postgres function\n\t* ```ts\n\t* const { data, error } = await supabase.rpc('hello_world', undefined, { get: true })\n\t* ```\n\t*\n\t* @exampleSql Call a read-only Postgres function\n\t* ```sql\n\t* create function hello_world() returns text as $$\n\t* select 'Hello world';\n\t* $$ language sql;\n\t* ```\n\t*\n\t* @exampleResponse Call a read-only Postgres function\n\t* ```json\n\t* {\n\t* \"data\": \"Hello world\",\n\t* \"status\": 200,\n\t* \"statusText\": \"OK\"\n\t* }\n\t* ```\n\t*/\n\trpc(fn, args = {}, { head = false, get = false, count } = {}) {\n\t\tvar _this$fetch;\n\t\tlet method;\n\t\tconst url = new URL(`${this.url}/rpc/${fn}`);\n\t\tlet body;\n\t\tconst _isObject = (v) => v !== null && typeof v === \"object\" && (!Array.isArray(v) || v.some(_isObject));\n\t\tconst _hasObjectArg = head && Object.values(args).some(_isObject);\n\t\tif (_hasObjectArg) {\n\t\t\tmethod = \"POST\";\n\t\t\tbody = args;\n\t\t} else if (head || get) {\n\t\t\tmethod = head ? \"HEAD\" : \"GET\";\n\t\t\tObject.entries(args).filter(([_, value]) => value !== void 0).map(([name, value]) => [name, Array.isArray(value) ? `{${value.join(\",\")}}` : `${value}`]).forEach(([name, value]) => {\n\t\t\t\turl.searchParams.append(name, value);\n\t\t\t});\n\t\t} else {\n\t\t\tmethod = \"POST\";\n\t\t\tbody = args;\n\t\t}\n\t\tconst headers = new Headers(this.headers);\n\t\tif (_hasObjectArg) headers.set(\"Prefer\", count ? `count=${count},return=minimal` : \"return=minimal\");\n\t\telse if (count) headers.set(\"Prefer\", `count=${count}`);\n\t\treturn new PostgrestFilterBuilder({\n\t\t\tmethod,\n\t\t\turl,\n\t\t\theaders,\n\t\t\tschema: this.schemaName,\n\t\t\tbody,\n\t\t\tfetch: (_this$fetch = this.fetch) !== null && _this$fetch !== void 0 ? _this$fetch : fetch,\n\t\t\turlLengthLimit: this.urlLengthLimit,\n\t\t\tretry: this.retry\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/index.ts\nvar src_default = {\n\tPostgrestClient,\n\tPostgrestQueryBuilder,\n\tPostgrestFilterBuilder,\n\tPostgrestTransformBuilder,\n\tPostgrestBuilder,\n\tPostgrestError\n};\n\n//#endregion\n\n//# sourceMappingURL=index.mjs.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcG9zdGdyZXN0LWpzL2Rpc3QvaW5kZXgubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFFO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLGVBQWU7QUFDM0I7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLHdCQUF3QjtBQUNwQztBQUNBO0FBQ0E7QUFDQSxPQUFPLHVCQUF1QixnQ0FBZ0M7QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekI7QUFDQTtBQUNBLGVBQWUsMEJBQTBCO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxvR0FBb0csSUFBSTtBQUNuSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwyREFBMkQsU0FBUyxPQUFPLGFBQWEsR0FBRyxVQUFVLFNBQVM7QUFDOUc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLGNBQWM7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxPQUFPO0FBQ2xCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsT0FBTztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsTUFBTTtBQUN0RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsTUFBTTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLE1BQU07QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2Q0FBNkMsTUFBTTtBQUNuRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLE1BQU07QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkNBQTZDLE1BQU07QUFDbkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLGNBQWM7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QyxNQUFNO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxRQUFRO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLE1BQU07QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QyxNQUFNO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLE1BQU07QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLGNBQWM7QUFDM0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCO0FBQ0Esb0JBQW9CLDRCQUE0QjtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGtCQUFrQjtBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsY0FBYztBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUFJO0FBQ0o7QUFDQSx3SEFBd0gsRUFBRSxpQkFBaUIsT0FBTyxNQUFNO0FBQ3hKO0FBQ0EsSUFBSTtBQUNKLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxNQUFNO0FBQ2xFLGlEQUFpRCxNQUFNO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQytKO0FBQy9KIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9wb3N0Z3Jlc3QtanMvZGlzdC9pbmRleC5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8jcmVnaW9uIHNyYy90eXBlcy9jb21tb24vY29tbW9uLnRzXG4vKipcbiogRGVmYXVsdCBudW1iZXIgb2YgcmV0cnkgYXR0ZW1wdHMuXG4qL1xuY29uc3QgREVGQVVMVF9NQVhfUkVUUklFUyA9IDM7XG4vKipcbiogRGVmYXVsdCBleHBvbmVudGlhbCBiYWNrb2ZmIGRlbGF5IGZ1bmN0aW9uLlxuKiBEZWxheXM6IDFzLCAycywgNHMsIDhzLCAuLi4gKG1heCAzMHMpXG4qXG4qIEBwYXJhbSBhdHRlbXB0SW5kZXggLSBaZXJvLWJhc2VkIGluZGV4IG9mIHRoZSByZXRyeSBhdHRlbXB0XG4qIEByZXR1cm5zIERlbGF5IGluIG1pbGxpc2Vjb25kcyBiZWZvcmUgdGhlIG5leHQgcmV0cnlcbiovXG5jb25zdCBnZXRSZXRyeURlbGF5ID0gKGF0dGVtcHRJbmRleCkgPT4gTWF0aC5taW4oMWUzICogMiAqKiBhdHRlbXB0SW5kZXgsIDNlNCk7XG4vKipcbiogU3RhdHVzIGNvZGVzIHRoYXQgYXJlIHNhZmUgdG8gcmV0cnkuXG4qIDUyMCA9IENsb3VkZmxhcmUgdGltZW91dC9jb25uZWN0aW9uIGVycm9ycyAodHJhbnNpZW50KVxuKiA1MDMgPSBQb3N0Z1JFU1Qgc2NoZW1hIGNhY2hlIG5vdCB5ZXQgbG9hZGVkICh0cmFuc2llbnQsIHNpZ25hbHMgcmV0cnkgdmlhIFJldHJ5LUFmdGVyIGhlYWRlcilcbiovXG5jb25zdCBSRVRSWUFCTEVfU1RBVFVTX0NPREVTID0gWzUyMCwgNTAzXTtcbi8qKlxuKiBIVFRQIG1ldGhvZHMgdGhhdCBhcmUgc2FmZSB0byByZXRyeSAoaWRlbXBvdGVudCBvcGVyYXRpb25zKS5cbiovXG5jb25zdCBSRVRSWUFCTEVfTUVUSE9EUyA9IFtcblx0XCJHRVRcIixcblx0XCJIRUFEXCIsXG5cdFwiT1BUSU9OU1wiXG5dO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvUG9zdGdyZXN0RXJyb3IudHNcbi8qKlxuKiBFcnJvciBmb3JtYXRcbipcbioge0BsaW5rIGh0dHBzOi8vcG9zdGdyZXN0Lm9yZy9lbi9zdGFibGUvYXBpLmh0bWw/aGlnaGxpZ2h0PW9wdGlvbnMjZXJyb3JzLWFuZC1odHRwLXN0YXR1cy1jb2Rlc31cbiovXG52YXIgUG9zdGdyZXN0RXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHtcblx0LyoqXG5cdCogQGV4YW1wbGVcblx0KiBgYGB0c1xuXHQqIGltcG9ydCBQb3N0Z3Jlc3RFcnJvciBmcm9tICdAc3VwYWJhc2UvcG9zdGdyZXN0LWpzJ1xuXHQqXG5cdCogdGhyb3cgbmV3IFBvc3RncmVzdEVycm9yKHtcblx0KiAgIG1lc3NhZ2U6ICdSb3cgbGV2ZWwgc2VjdXJpdHkgcHJldmVudGVkIHRoZSByZXF1ZXN0Jyxcblx0KiAgIGRldGFpbHM6ICdSTFMgZGVuaWVkIHRoZSBpbnNlcnQnLFxuXHQqICAgaGludDogJ0NoZWNrIHlvdXIgcG9saWNpZXMnLFxuXHQqICAgY29kZTogJ1BHUlNUMzAxJyxcblx0KiB9KVxuXHQqIGBgYFxuXHQqL1xuXHRjb25zdHJ1Y3Rvcihjb250ZXh0KSB7XG5cdFx0c3VwZXIoY29udGV4dC5tZXNzYWdlKTtcblx0XHR0aGlzLm5hbWUgPSBcIlBvc3RncmVzdEVycm9yXCI7XG5cdFx0dGhpcy5kZXRhaWxzID0gY29udGV4dC5kZXRhaWxzO1xuXHRcdHRoaXMuaGludCA9IGNvbnRleHQuaGludDtcblx0XHR0aGlzLmNvZGUgPSBjb250ZXh0LmNvZGU7XG5cdH1cblx0dG9KU09OKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRuYW1lOiB0aGlzLm5hbWUsXG5cdFx0XHRtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG5cdFx0XHRkZXRhaWxzOiB0aGlzLmRldGFpbHMsXG5cdFx0XHRoaW50OiB0aGlzLmhpbnQsXG5cdFx0XHRjb2RlOiB0aGlzLmNvZGVcblx0XHR9O1xuXHR9XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvUG9zdGdyZXN0QnVpbGRlci50c1xuLyoqXG4qIFNsZWVwIGZvciBhIGdpdmVuIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXG4qIElmIGFuIEFib3J0U2lnbmFsIGlzIHByb3ZpZGVkLCB0aGUgc2xlZXAgcmVzb2x2ZXMgZWFybHkgd2hlbiB0aGUgc2lnbmFsIGlzIGFib3J0ZWQuXG4qL1xuZnVuY3Rpb24gc2xlZXAobXMsIHNpZ25hbCkge1xuXHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRpZiAoc2lnbmFsID09PSBudWxsIHx8IHNpZ25hbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2lnbmFsLmFib3J0ZWQpIHtcblx0XHRcdHJlc29sdmUoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3QgaWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdHNpZ25hbCA9PT0gbnVsbCB8fCBzaWduYWwgPT09IHZvaWQgMCB8fCBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFib3J0XCIsIG9uQWJvcnQpO1xuXHRcdFx0cmVzb2x2ZSgpO1xuXHRcdH0sIG1zKTtcblx0XHRmdW5jdGlvbiBvbkFib3J0KCkge1xuXHRcdFx0Y2xlYXJUaW1lb3V0KGlkKTtcblx0XHRcdHJlc29sdmUoKTtcblx0XHR9XG5cdFx0c2lnbmFsID09PSBudWxsIHx8IHNpZ25hbCA9PT0gdm9pZCAwIHx8IHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgb25BYm9ydCk7XG5cdH0pO1xufVxuLyoqXG4qIENoZWNrIGlmIGEgcmVxdWVzdCBzaG91bGQgYmUgcmV0cmllZCBiYXNlZCBvbiBtZXRob2QgYW5kIHN0YXR1cyBjb2RlLlxuKi9cbmZ1bmN0aW9uIHNob3VsZFJldHJ5KG1ldGhvZCwgc3RhdHVzLCBhdHRlbXB0Q291bnQsIHJldHJ5RW5hYmxlZCkge1xuXHRpZiAoIXJldHJ5RW5hYmxlZCB8fCBhdHRlbXB0Q291bnQgPj0gREVGQVVMVF9NQVhfUkVUUklFUykgcmV0dXJuIGZhbHNlO1xuXHRpZiAoIVJFVFJZQUJMRV9NRVRIT0RTLmluY2x1ZGVzKG1ldGhvZCkpIHJldHVybiBmYWxzZTtcblx0aWYgKCFSRVRSWUFCTEVfU1RBVFVTX0NPREVTLmluY2x1ZGVzKHN0YXR1cykpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIHRydWU7XG59XG52YXIgUG9zdGdyZXN0QnVpbGRlciA9IGNsYXNzIHtcblx0LyoqXG5cdCogQ3JlYXRlcyBhIGJ1aWxkZXIgY29uZmlndXJlZCBmb3IgYSBzcGVjaWZpYyBQb3N0Z1JFU1QgcmVxdWVzdC5cblx0KlxuXHQqIEBleGFtcGxlIFVzaW5nIHN1cGFiYXNlLWpzIChyZWNvbW1lbmRlZClcblx0KiBgYGB0c1xuXHQqIGltcG9ydCB7IGNyZWF0ZUNsaWVudCB9IGZyb20gJ0BzdXBhYmFzZS9zdXBhYmFzZS1qcydcblx0KlxuXHQqIGNvbnN0IHN1cGFiYXNlID0gY3JlYXRlQ2xpZW50KCdodHRwczovL3h5emNvbXBhbnkuc3VwYWJhc2UuY28nLCAneW91ci1wdWJsaXNoYWJsZS1rZXknKVxuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmZyb20oJ3VzZXJzJykuc2VsZWN0KCcqJylcblx0KiBgYGBcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqXG5cdCogQGV4YW1wbGUgU3RhbmRhbG9uZSBpbXBvcnQgZm9yIGJ1bmRsZS1zZW5zaXRpdmUgZW52aXJvbm1lbnRzXG5cdCogYGBgdHNcblx0KiBpbXBvcnQgeyBQb3N0Z3Jlc3RRdWVyeUJ1aWxkZXIgfSBmcm9tICdAc3VwYWJhc2UvcG9zdGdyZXN0LWpzJ1xuXHQqXG5cdCogY29uc3QgYnVpbGRlciA9IG5ldyBQb3N0Z3Jlc3RRdWVyeUJ1aWxkZXIoXG5cdCogICBuZXcgVVJMKCdodHRwczovL3h5emNvbXBhbnkuc3VwYWJhc2UuY28vcmVzdC92MS91c2VycycpLFxuXHQqICAgeyBoZWFkZXJzOiBuZXcgSGVhZGVycyh7IGFwaWtleTogJ3lvdXItcHVibGlzaGFibGUta2V5JyB9KSB9XG5cdCogKVxuXHQqIGBgYFxuXHQqL1xuXHRjb25zdHJ1Y3RvcihidWlsZGVyKSB7XG5cdFx0dmFyIF9idWlsZGVyJHNob3VsZFRocm93TywgX2J1aWxkZXIkaXNNYXliZVNpbmdsLCBfYnVpbGRlciRzaG91bGRTdHJpcE4sIF9idWlsZGVyJHVybExlbmd0aExpbSwgX2J1aWxkZXIkcmV0cnk7XG5cdFx0dGhpcy5zaG91bGRUaHJvd09uRXJyb3IgPSBmYWxzZTtcblx0XHR0aGlzLnJldHJ5RW5hYmxlZCA9IHRydWU7XG5cdFx0dGhpcy5tZXRob2QgPSBidWlsZGVyLm1ldGhvZDtcblx0XHR0aGlzLnVybCA9IGJ1aWxkZXIudXJsO1xuXHRcdHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGJ1aWxkZXIuaGVhZGVycyk7XG5cdFx0dGhpcy5zY2hlbWEgPSBidWlsZGVyLnNjaGVtYTtcblx0XHR0aGlzLmJvZHkgPSBidWlsZGVyLmJvZHk7XG5cdFx0dGhpcy5zaG91bGRUaHJvd09uRXJyb3IgPSAoX2J1aWxkZXIkc2hvdWxkVGhyb3dPID0gYnVpbGRlci5zaG91bGRUaHJvd09uRXJyb3IpICE9PSBudWxsICYmIF9idWlsZGVyJHNob3VsZFRocm93TyAhPT0gdm9pZCAwID8gX2J1aWxkZXIkc2hvdWxkVGhyb3dPIDogZmFsc2U7XG5cdFx0dGhpcy5zaWduYWwgPSBidWlsZGVyLnNpZ25hbDtcblx0XHR0aGlzLmlzTWF5YmVTaW5nbGUgPSAoX2J1aWxkZXIkaXNNYXliZVNpbmdsID0gYnVpbGRlci5pc01heWJlU2luZ2xlKSAhPT0gbnVsbCAmJiBfYnVpbGRlciRpc01heWJlU2luZ2wgIT09IHZvaWQgMCA/IF9idWlsZGVyJGlzTWF5YmVTaW5nbCA6IGZhbHNlO1xuXHRcdHRoaXMuc2hvdWxkU3RyaXBOdWxscyA9IChfYnVpbGRlciRzaG91bGRTdHJpcE4gPSBidWlsZGVyLnNob3VsZFN0cmlwTnVsbHMpICE9PSBudWxsICYmIF9idWlsZGVyJHNob3VsZFN0cmlwTiAhPT0gdm9pZCAwID8gX2J1aWxkZXIkc2hvdWxkU3RyaXBOIDogZmFsc2U7XG5cdFx0dGhpcy51cmxMZW5ndGhMaW1pdCA9IChfYnVpbGRlciR1cmxMZW5ndGhMaW0gPSBidWlsZGVyLnVybExlbmd0aExpbWl0KSAhPT0gbnVsbCAmJiBfYnVpbGRlciR1cmxMZW5ndGhMaW0gIT09IHZvaWQgMCA/IF9idWlsZGVyJHVybExlbmd0aExpbSA6IDhlMztcblx0XHR0aGlzLnJldHJ5RW5hYmxlZCA9IChfYnVpbGRlciRyZXRyeSA9IGJ1aWxkZXIucmV0cnkpICE9PSBudWxsICYmIF9idWlsZGVyJHJldHJ5ICE9PSB2b2lkIDAgPyBfYnVpbGRlciRyZXRyeSA6IHRydWU7XG5cdFx0aWYgKGJ1aWxkZXIuZmV0Y2gpIHRoaXMuZmV0Y2ggPSBidWlsZGVyLmZldGNoO1xuXHRcdGVsc2UgdGhpcy5mZXRjaCA9IGZldGNoO1xuXHR9XG5cdC8qKlxuXHQqIElmIHRoZXJlJ3MgYW4gZXJyb3Igd2l0aCB0aGUgcXVlcnksIHRocm93T25FcnJvciB3aWxsIHJlamVjdCB0aGUgcHJvbWlzZSBieVxuXHQqIHRocm93aW5nIHRoZSBlcnJvciBpbnN0ZWFkIG9mIHJldHVybmluZyBpdCBhcyBwYXJ0IG9mIGEgc3VjY2Vzc2Z1bCByZXNwb25zZS5cblx0KlxuXHQqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vc3VwYWJhc2Uvc3VwYWJhc2UtanMvaXNzdWVzLzkyfVxuXHQqXG5cdCogQGNhdGVnb3J5IERhdGFiYXNlXG5cdCovXG5cdHRocm93T25FcnJvcigpIHtcblx0XHR0aGlzLnNob3VsZFRocm93T25FcnJvciA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogU3RyaXAgbnVsbCB2YWx1ZXMgZnJvbSB0aGUgcmVzcG9uc2UgZGF0YS4gUHJvcGVydGllcyB3aXRoIGBudWxsYCB2YWx1ZXNcblx0KiB3aWxsIGJlIG9taXR0ZWQgZnJvbSB0aGUgcmV0dXJuZWQgSlNPTiBvYmplY3RzLlxuXHQqXG5cdCogUmVxdWlyZXMgUG9zdGdSRVNUIDExLjIuMCsuXG5cdCpcblx0KiB7QGxpbmsgaHR0cHM6Ly9kb2NzLnBvc3RncmVzdC5vcmcvZW4vc3RhYmxlL3JlZmVyZW5jZXMvYXBpL3Jlc291cmNlX3JlcHJlc2VudGF0aW9uLmh0bWwjc3RyaXBwZWQtbnVsbHN9XG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgbW9kaWZpZXJzXG5cdCpcblx0KiBAZXhhbXBsZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY2hhcmFjdGVycycpXG5cdCogICAuc2VsZWN0KClcblx0KiAgIC5zdHJpcE51bGxzKClcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY2hhcmFjdGVycyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0LCBiaW8gdGV4dCk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgY2hhcmFjdGVycyAoaWQsIG5hbWUsIGJpbylcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnTHVrZScsIG51bGwpLFxuXHQqICAgKDIsICdMZWlhJywgJ1ByaW5jZXNzIG9mIEFsZGVyYWFuJyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJpZFwiOiAxLFxuXHQqICAgICAgIFwibmFtZVwiOiBcIkx1a2VcIlxuXHQqICAgICB9LFxuXHQqICAgICB7XG5cdCogICAgICAgXCJpZFwiOiAyLFxuXHQqICAgICAgIFwibmFtZVwiOiBcIkxlaWFcIixcblx0KiAgICAgICBcImJpb1wiOiBcIlByaW5jZXNzIG9mIEFsZGVyYWFuXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCovXG5cdHN0cmlwTnVsbHMoKSB7XG5cdFx0aWYgKHRoaXMuaGVhZGVycy5nZXQoXCJBY2NlcHRcIikgPT09IFwidGV4dC9jc3ZcIikgdGhyb3cgbmV3IEVycm9yKFwic3RyaXBOdWxscygpIGNhbm5vdCBiZSB1c2VkIHdpdGggY3N2KClcIik7XG5cdFx0dGhpcy5zaG91bGRTdHJpcE51bGxzID0gdHJ1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBTZXQgYW4gSFRUUCBoZWFkZXIgZm9yIHRoZSByZXF1ZXN0LlxuXHQqXG5cdCogQGNhdGVnb3J5IERhdGFiYXNlXG5cdCovXG5cdHNldEhlYWRlcihuYW1lLCB2YWx1ZSkge1xuXHRcdHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyk7XG5cdFx0dGhpcy5oZWFkZXJzLnNldChuYW1lLCB2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogQGNhdGVnb3J5IERhdGFiYXNlXG5cdCpcblx0KiBDb25maWd1cmUgcmV0cnkgYmVoYXZpb3IgZm9yIHRoaXMgcmVxdWVzdC5cblx0KlxuXHQqIEJ5IGRlZmF1bHQsIHJldHJpZXMgYXJlIGVuYWJsZWQgZm9yIGlkZW1wb3RlbnQgcmVxdWVzdHMgKEdFVCwgSEVBRCwgT1BUSU9OUylcblx0KiB0aGF0IGZhaWwgd2l0aCBuZXR3b3JrIGVycm9ycyBvciBzcGVjaWZpYyBIVFRQIHN0YXR1cyBjb2RlcyAoNTAzLCA1MjApLlxuXHQqIFJldHJpZXMgdXNlIGV4cG9uZW50aWFsIGJhY2tvZmYgKDFzLCAycywgNHMpIHdpdGggYSBtYXhpbXVtIG9mIDMgYXR0ZW1wdHMuXG5cdCpcblx0KiBAcGFyYW0gZW5hYmxlZCAtIFdoZXRoZXIgdG8gZW5hYmxlIHJldHJpZXMgZm9yIHRoaXMgcmVxdWVzdFxuXHQqXG5cdCogQGV4YW1wbGVcblx0KiBgYGB0c1xuXHQqIC8vIERpc2FibGUgcmV0cmllcyBmb3IgYSBzcGVjaWZpYyBxdWVyeVxuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgndXNlcnMnKVxuXHQqICAgLnNlbGVjdCgpXG5cdCogICAucmV0cnkoZmFsc2UpXG5cdCogYGBgXG5cdCovXG5cdHJldHJ5KGVuYWJsZWQpIHtcblx0XHR0aGlzLnJldHJ5RW5hYmxlZCA9IGVuYWJsZWQ7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0dGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCkge1xuXHRcdHZhciBfdGhpcyA9IHRoaXM7XG5cdFx0aWYgKHRoaXMuc2NoZW1hID09PSB2b2lkIDApIHt9IGVsc2UgaWYgKFtcIkdFVFwiLCBcIkhFQURcIl0uaW5jbHVkZXModGhpcy5tZXRob2QpKSB0aGlzLmhlYWRlcnMuc2V0KFwiQWNjZXB0LVByb2ZpbGVcIiwgdGhpcy5zY2hlbWEpO1xuXHRcdGVsc2UgdGhpcy5oZWFkZXJzLnNldChcIkNvbnRlbnQtUHJvZmlsZVwiLCB0aGlzLnNjaGVtYSk7XG5cdFx0aWYgKHRoaXMubWV0aG9kICE9PSBcIkdFVFwiICYmIHRoaXMubWV0aG9kICE9PSBcIkhFQURcIikgdGhpcy5oZWFkZXJzLnNldChcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG5cdFx0aWYgKHRoaXMuc2hvdWxkU3RyaXBOdWxscykge1xuXHRcdFx0Y29uc3QgY3VycmVudEFjY2VwdCA9IHRoaXMuaGVhZGVycy5nZXQoXCJBY2NlcHRcIik7XG5cdFx0XHRpZiAoY3VycmVudEFjY2VwdCA9PT0gXCJhcHBsaWNhdGlvbi92bmQucGdyc3Qub2JqZWN0K2pzb25cIikgdGhpcy5oZWFkZXJzLnNldChcIkFjY2VwdFwiLCBcImFwcGxpY2F0aW9uL3ZuZC5wZ3JzdC5vYmplY3QranNvbjtudWxscz1zdHJpcHBlZFwiKTtcblx0XHRcdGVsc2UgaWYgKCFjdXJyZW50QWNjZXB0IHx8IGN1cnJlbnRBY2NlcHQgPT09IFwiYXBwbGljYXRpb24vanNvblwiKSB0aGlzLmhlYWRlcnMuc2V0KFwiQWNjZXB0XCIsIFwiYXBwbGljYXRpb24vdm5kLnBncnN0LmFycmF5K2pzb247bnVsbHM9c3RyaXBwZWRcIik7XG5cdFx0fVxuXHRcdGNvbnN0IF9mZXRjaCA9IHRoaXMuZmV0Y2g7XG5cdFx0Y29uc3QgZXhlY3V0ZVdpdGhSZXRyeSA9IGFzeW5jICgpID0+IHtcblx0XHRcdGxldCBhdHRlbXB0Q291bnQgPSAwO1xuXHRcdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdFx0Y29uc3QgcmVxdWVzdEhlYWRlcnMgPSBuZXcgSGVhZGVycyhfdGhpcy5oZWFkZXJzKTtcblx0XHRcdFx0aWYgKGF0dGVtcHRDb3VudCA+IDApIHJlcXVlc3RIZWFkZXJzLnNldChcIlgtUmV0cnktQ291bnRcIiwgU3RyaW5nKGF0dGVtcHRDb3VudCkpO1xuXHRcdFx0XHRsZXQgcmVzJDE7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cmVzJDEgPSBhd2FpdCBfZmV0Y2goX3RoaXMudXJsLnRvU3RyaW5nKCksIHtcblx0XHRcdFx0XHRcdG1ldGhvZDogX3RoaXMubWV0aG9kLFxuXHRcdFx0XHRcdFx0aGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG5cdFx0XHRcdFx0XHRib2R5OiBKU09OLnN0cmluZ2lmeShfdGhpcy5ib2R5LCAoXywgdmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gXCJiaWdpbnRcIiA/IHZhbHVlLnRvU3RyaW5nKCkgOiB2YWx1ZSksXG5cdFx0XHRcdFx0XHRzaWduYWw6IF90aGlzLnNpZ25hbFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9IGNhdGNoIChmZXRjaEVycm9yKSB7XG5cdFx0XHRcdFx0aWYgKGZldGNoRXJyb3IgaW5zdGFuY2VvZiBFcnJvciAmJiAoZmV0Y2hFcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIiB8fCBcImNvZGVcIiBpbiBmZXRjaEVycm9yICYmIGZldGNoRXJyb3IuY29kZSA9PT0gXCJBQk9SVF9FUlJcIikpIHRocm93IGZldGNoRXJyb3I7XG5cdFx0XHRcdFx0aWYgKCFSRVRSWUFCTEVfTUVUSE9EUy5pbmNsdWRlcyhfdGhpcy5tZXRob2QpKSB0aHJvdyBmZXRjaEVycm9yO1xuXHRcdFx0XHRcdGlmIChfdGhpcy5yZXRyeUVuYWJsZWQgJiYgYXR0ZW1wdENvdW50IDwgREVGQVVMVF9NQVhfUkVUUklFUykge1xuXHRcdFx0XHRcdFx0Y29uc3QgZGVsYXkgPSBnZXRSZXRyeURlbGF5KGF0dGVtcHRDb3VudCk7XG5cdFx0XHRcdFx0XHRhdHRlbXB0Q291bnQrKztcblx0XHRcdFx0XHRcdGF3YWl0IHNsZWVwKGRlbGF5LCBfdGhpcy5zaWduYWwpO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRocm93IGZldGNoRXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHNob3VsZFJldHJ5KF90aGlzLm1ldGhvZCwgcmVzJDEuc3RhdHVzLCBhdHRlbXB0Q291bnQsIF90aGlzLnJldHJ5RW5hYmxlZCkpIHtcblx0XHRcdFx0XHR2YXIgX3JlcyRoZWFkZXJzJGdldCwgX3JlcyRoZWFkZXJzO1xuXHRcdFx0XHRcdGNvbnN0IHJldHJ5QWZ0ZXJIZWFkZXIgPSAoX3JlcyRoZWFkZXJzJGdldCA9IChfcmVzJGhlYWRlcnMgPSByZXMkMS5oZWFkZXJzKSA9PT0gbnVsbCB8fCBfcmVzJGhlYWRlcnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9yZXMkaGVhZGVycy5nZXQoXCJSZXRyeS1BZnRlclwiKSkgIT09IG51bGwgJiYgX3JlcyRoZWFkZXJzJGdldCAhPT0gdm9pZCAwID8gX3JlcyRoZWFkZXJzJGdldCA6IG51bGw7XG5cdFx0XHRcdFx0Y29uc3QgZGVsYXkgPSByZXRyeUFmdGVySGVhZGVyICE9PSBudWxsID8gTWF0aC5tYXgoMCwgcGFyc2VJbnQocmV0cnlBZnRlckhlYWRlciwgMTApIHx8IDApICogMWUzIDogZ2V0UmV0cnlEZWxheShhdHRlbXB0Q291bnQpO1xuXHRcdFx0XHRcdGF3YWl0IHJlcyQxLnRleHQoKTtcblx0XHRcdFx0XHRhdHRlbXB0Q291bnQrKztcblx0XHRcdFx0XHRhd2FpdCBzbGVlcChkZWxheSwgX3RoaXMuc2lnbmFsKTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gYXdhaXQgX3RoaXMucHJvY2Vzc1Jlc3BvbnNlKHJlcyQxKTtcblx0XHRcdH1cblx0XHR9O1xuXHRcdGxldCByZXMgPSBleGVjdXRlV2l0aFJldHJ5KCk7XG5cdFx0aWYgKCF0aGlzLnNob3VsZFRocm93T25FcnJvcikgcmVzID0gcmVzLmNhdGNoKChmZXRjaEVycm9yKSA9PiB7XG5cdFx0XHR2YXIgX2ZldGNoRXJyb3IkbmFtZTI7XG5cdFx0XHRsZXQgZXJyb3JEZXRhaWxzID0gXCJcIjtcblx0XHRcdGxldCBoaW50ID0gXCJcIjtcblx0XHRcdGxldCBjb2RlID0gXCJcIjtcblx0XHRcdGNvbnN0IGNhdXNlID0gZmV0Y2hFcnJvciA9PT0gbnVsbCB8fCBmZXRjaEVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmZXRjaEVycm9yLmNhdXNlO1xuXHRcdFx0aWYgKGNhdXNlKSB7XG5cdFx0XHRcdHZhciBfY2F1c2UkbWVzc2FnZSwgX2NhdXNlJGNvZGUsIF9mZXRjaEVycm9yJG5hbWUsIF9jYXVzZSRuYW1lO1xuXHRcdFx0XHRjb25zdCBjYXVzZU1lc3NhZ2UgPSAoX2NhdXNlJG1lc3NhZ2UgPSBjYXVzZSA9PT0gbnVsbCB8fCBjYXVzZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2F1c2UubWVzc2FnZSkgIT09IG51bGwgJiYgX2NhdXNlJG1lc3NhZ2UgIT09IHZvaWQgMCA/IF9jYXVzZSRtZXNzYWdlIDogXCJcIjtcblx0XHRcdFx0Y29uc3QgY2F1c2VDb2RlID0gKF9jYXVzZSRjb2RlID0gY2F1c2UgPT09IG51bGwgfHwgY2F1c2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhdXNlLmNvZGUpICE9PSBudWxsICYmIF9jYXVzZSRjb2RlICE9PSB2b2lkIDAgPyBfY2F1c2UkY29kZSA6IFwiXCI7XG5cdFx0XHRcdGVycm9yRGV0YWlscyA9IGAkeyhfZmV0Y2hFcnJvciRuYW1lID0gZmV0Y2hFcnJvciA9PT0gbnVsbCB8fCBmZXRjaEVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmZXRjaEVycm9yLm5hbWUpICE9PSBudWxsICYmIF9mZXRjaEVycm9yJG5hbWUgIT09IHZvaWQgMCA/IF9mZXRjaEVycm9yJG5hbWUgOiBcIkZldGNoRXJyb3JcIn06ICR7ZmV0Y2hFcnJvciA9PT0gbnVsbCB8fCBmZXRjaEVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmZXRjaEVycm9yLm1lc3NhZ2V9YDtcblx0XHRcdFx0ZXJyb3JEZXRhaWxzICs9IGBcXG5cXG5DYXVzZWQgYnk6ICR7KF9jYXVzZSRuYW1lID0gY2F1c2UgPT09IG51bGwgfHwgY2F1c2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhdXNlLm5hbWUpICE9PSBudWxsICYmIF9jYXVzZSRuYW1lICE9PSB2b2lkIDAgPyBfY2F1c2UkbmFtZSA6IFwiRXJyb3JcIn06ICR7Y2F1c2VNZXNzYWdlfWA7XG5cdFx0XHRcdGlmIChjYXVzZUNvZGUpIGVycm9yRGV0YWlscyArPSBgICgke2NhdXNlQ29kZX0pYDtcblx0XHRcdFx0aWYgKGNhdXNlID09PSBudWxsIHx8IGNhdXNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYXVzZS5zdGFjaykgZXJyb3JEZXRhaWxzICs9IGBcXG4ke2NhdXNlLnN0YWNrfWA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgX2ZldGNoRXJyb3Ikc3RhY2s7XG5cdFx0XHRcdGVycm9yRGV0YWlscyA9IChfZmV0Y2hFcnJvciRzdGFjayA9IGZldGNoRXJyb3IgPT09IG51bGwgfHwgZmV0Y2hFcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmV0Y2hFcnJvci5zdGFjaykgIT09IG51bGwgJiYgX2ZldGNoRXJyb3Ikc3RhY2sgIT09IHZvaWQgMCA/IF9mZXRjaEVycm9yJHN0YWNrIDogXCJcIjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHVybExlbmd0aCA9IHRoaXMudXJsLnRvU3RyaW5nKCkubGVuZ3RoO1xuXHRcdFx0aWYgKChmZXRjaEVycm9yID09PSBudWxsIHx8IGZldGNoRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZldGNoRXJyb3IubmFtZSkgPT09IFwiQWJvcnRFcnJvclwiIHx8IChmZXRjaEVycm9yID09PSBudWxsIHx8IGZldGNoRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZldGNoRXJyb3IuY29kZSkgPT09IFwiQUJPUlRfRVJSXCIpIHtcblx0XHRcdFx0Y29kZSA9IFwiXCI7XG5cdFx0XHRcdGhpbnQgPSBcIlJlcXVlc3Qgd2FzIGFib3J0ZWQgKHRpbWVvdXQgb3IgbWFudWFsIGNhbmNlbGxhdGlvbilcIjtcblx0XHRcdFx0aWYgKHVybExlbmd0aCA+IHRoaXMudXJsTGVuZ3RoTGltaXQpIGhpbnQgKz0gYC4gTm90ZTogWW91ciByZXF1ZXN0IFVSTCBpcyAke3VybExlbmd0aH0gY2hhcmFjdGVycywgd2hpY2ggbWF5IGV4Y2VlZCBzZXJ2ZXIgbGltaXRzLiBJZiBzZWxlY3RpbmcgbWFueSBmaWVsZHMsIGNvbnNpZGVyIHVzaW5nIHZpZXdzLiBJZiBmaWx0ZXJpbmcgd2l0aCBsYXJnZSBhcnJheXMgKGUuZy4sIC5pbignaWQnLCBbbWFueSBJRHNdKSksIGNvbnNpZGVyIHVzaW5nIGFuIFJQQyBmdW5jdGlvbiB0byBwYXNzIHZhbHVlcyBzZXJ2ZXItc2lkZS5gO1xuXHRcdFx0fSBlbHNlIGlmICgoY2F1c2UgPT09IG51bGwgfHwgY2F1c2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhdXNlLm5hbWUpID09PSBcIkhlYWRlcnNPdmVyZmxvd0Vycm9yXCIgfHwgKGNhdXNlID09PSBudWxsIHx8IGNhdXNlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYXVzZS5jb2RlKSA9PT0gXCJVTkRfRVJSX0hFQURFUlNfT1ZFUkZMT1dcIikge1xuXHRcdFx0XHRjb2RlID0gXCJcIjtcblx0XHRcdFx0aGludCA9IFwiSFRUUCBoZWFkZXJzIGV4Y2VlZGVkIHNlcnZlciBsaW1pdHMgKHR5cGljYWxseSAxNktCKVwiO1xuXHRcdFx0XHRpZiAodXJsTGVuZ3RoID4gdGhpcy51cmxMZW5ndGhMaW1pdCkgaGludCArPSBgLiBZb3VyIHJlcXVlc3QgVVJMIGlzICR7dXJsTGVuZ3RofSBjaGFyYWN0ZXJzLiBJZiBzZWxlY3RpbmcgbWFueSBmaWVsZHMsIGNvbnNpZGVyIHVzaW5nIHZpZXdzLiBJZiBmaWx0ZXJpbmcgd2l0aCBsYXJnZSBhcnJheXMgKGUuZy4sIC5pbignaWQnLCBbMjAwKyBJRHNdKSksIGNvbnNpZGVyIHVzaW5nIGFuIFJQQyBmdW5jdGlvbiBpbnN0ZWFkLmA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzdWNjZXNzOiBmYWxzZSxcblx0XHRcdFx0ZXJyb3I6IHtcblx0XHRcdFx0XHRtZXNzYWdlOiBgJHsoX2ZldGNoRXJyb3IkbmFtZTIgPSBmZXRjaEVycm9yID09PSBudWxsIHx8IGZldGNoRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZldGNoRXJyb3IubmFtZSkgIT09IG51bGwgJiYgX2ZldGNoRXJyb3IkbmFtZTIgIT09IHZvaWQgMCA/IF9mZXRjaEVycm9yJG5hbWUyIDogXCJGZXRjaEVycm9yXCJ9OiAke2ZldGNoRXJyb3IgPT09IG51bGwgfHwgZmV0Y2hFcnJvciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmV0Y2hFcnJvci5tZXNzYWdlfWAsXG5cdFx0XHRcdFx0ZGV0YWlsczogZXJyb3JEZXRhaWxzLFxuXHRcdFx0XHRcdGhpbnQsXG5cdFx0XHRcdFx0Y29kZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRkYXRhOiBudWxsLFxuXHRcdFx0XHRjb3VudDogbnVsbCxcblx0XHRcdFx0c3RhdHVzOiAwLFxuXHRcdFx0XHRzdGF0dXNUZXh0OiBcIlwiXG5cdFx0XHR9O1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXMudGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCk7XG5cdH1cblx0LyoqXG5cdCogUHJvY2VzcyBhIGZldGNoIHJlc3BvbnNlIGFuZCByZXR1cm4gdGhlIHN0YW5kYXJkaXplZCBwb3N0Z3Jlc3QgcmVzcG9uc2UuXG5cdCovXG5cdGFzeW5jIHByb2Nlc3NSZXNwb25zZShyZXMpIHtcblx0XHR2YXIgX3RoaXMyID0gdGhpcztcblx0XHRsZXQgZXJyb3IgPSBudWxsO1xuXHRcdGxldCBkYXRhID0gbnVsbDtcblx0XHRsZXQgY291bnQgPSBudWxsO1xuXHRcdGxldCBzdGF0dXMgPSByZXMuc3RhdHVzO1xuXHRcdGxldCBzdGF0dXNUZXh0ID0gcmVzLnN0YXR1c1RleHQ7XG5cdFx0aWYgKHJlcy5vaykge1xuXHRcdFx0dmFyIF90aGlzJGhlYWRlcnMkZ2V0MiwgX3JlcyRoZWFkZXJzJGdldDI7XG5cdFx0XHRpZiAoX3RoaXMyLm1ldGhvZCAhPT0gXCJIRUFEXCIpIHtcblx0XHRcdFx0dmFyIF90aGlzJGhlYWRlcnMkZ2V0O1xuXHRcdFx0XHRjb25zdCBib2R5ID0gYXdhaXQgcmVzLnRleHQoKTtcblx0XHRcdFx0aWYgKGJvZHkgPT09IFwiXCIpIHt9IGVsc2UgaWYgKF90aGlzMi5oZWFkZXJzLmdldChcIkFjY2VwdFwiKSA9PT0gXCJ0ZXh0L2NzdlwiKSBkYXRhID0gYm9keTtcblx0XHRcdFx0ZWxzZSBpZiAoX3RoaXMyLmhlYWRlcnMuZ2V0KFwiQWNjZXB0XCIpICYmICgoX3RoaXMkaGVhZGVycyRnZXQgPSBfdGhpczIuaGVhZGVycy5nZXQoXCJBY2NlcHRcIikpID09PSBudWxsIHx8IF90aGlzJGhlYWRlcnMkZ2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRoZWFkZXJzJGdldC5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL3ZuZC5wZ3JzdC5wbGFuK3RleHRcIikpKSBkYXRhID0gYm9keTtcblx0XHRcdFx0ZWxzZSBkYXRhID0gSlNPTi5wYXJzZShib2R5KTtcblx0XHRcdH1cblx0XHRcdGNvbnN0IGNvdW50SGVhZGVyID0gKF90aGlzJGhlYWRlcnMkZ2V0MiA9IF90aGlzMi5oZWFkZXJzLmdldChcIlByZWZlclwiKSkgPT09IG51bGwgfHwgX3RoaXMkaGVhZGVycyRnZXQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyRoZWFkZXJzJGdldDIubWF0Y2goL2NvdW50PShleGFjdHxwbGFubmVkfGVzdGltYXRlZCkvKTtcblx0XHRcdGNvbnN0IGNvbnRlbnRSYW5nZSA9IChfcmVzJGhlYWRlcnMkZ2V0MiA9IHJlcy5oZWFkZXJzLmdldChcImNvbnRlbnQtcmFuZ2VcIikpID09PSBudWxsIHx8IF9yZXMkaGVhZGVycyRnZXQyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfcmVzJGhlYWRlcnMkZ2V0Mi5zcGxpdChcIi9cIik7XG5cdFx0XHRpZiAoY291bnRIZWFkZXIgJiYgY29udGVudFJhbmdlICYmIGNvbnRlbnRSYW5nZS5sZW5ndGggPiAxKSBjb3VudCA9IHBhcnNlSW50KGNvbnRlbnRSYW5nZVsxXSk7XG5cdFx0XHRpZiAoX3RoaXMyLmlzTWF5YmVTaW5nbGUgJiYgQXJyYXkuaXNBcnJheShkYXRhKSkgaWYgKGRhdGEubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRlcnJvciA9IHtcblx0XHRcdFx0XHRjb2RlOiBcIlBHUlNUMTE2XCIsXG5cdFx0XHRcdFx0ZGV0YWlsczogYFJlc3VsdHMgY29udGFpbiAke2RhdGEubGVuZ3RofSByb3dzLCBhcHBsaWNhdGlvbi92bmQucGdyc3Qub2JqZWN0K2pzb24gcmVxdWlyZXMgMSByb3dgLFxuXHRcdFx0XHRcdGhpbnQ6IG51bGwsXG5cdFx0XHRcdFx0bWVzc2FnZTogXCJKU09OIG9iamVjdCByZXF1ZXN0ZWQsIG11bHRpcGxlIChvciBubykgcm93cyByZXR1cm5lZFwiXG5cdFx0XHRcdH07XG5cdFx0XHRcdGRhdGEgPSBudWxsO1xuXHRcdFx0XHRjb3VudCA9IG51bGw7XG5cdFx0XHRcdHN0YXR1cyA9IDQwNjtcblx0XHRcdFx0c3RhdHVzVGV4dCA9IFwiTm90IEFjY2VwdGFibGVcIjtcblx0XHRcdH0gZWxzZSBpZiAoZGF0YS5sZW5ndGggPT09IDEpIGRhdGEgPSBkYXRhWzBdO1xuXHRcdFx0ZWxzZSBkYXRhID0gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29uc3QgYm9keSA9IGF3YWl0IHJlcy50ZXh0KCk7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRlcnJvciA9IEpTT04ucGFyc2UoYm9keSk7XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGVycm9yKSAmJiByZXMuc3RhdHVzID09PSA0MDQpIHtcblx0XHRcdFx0XHRkYXRhID0gW107XG5cdFx0XHRcdFx0ZXJyb3IgPSBudWxsO1xuXHRcdFx0XHRcdHN0YXR1cyA9IDIwMDtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJPS1wiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChfdW51c2VkKSB7XG5cdFx0XHRcdGlmIChyZXMuc3RhdHVzID09PSA0MDQgJiYgYm9keSA9PT0gXCJcIikge1xuXHRcdFx0XHRcdHN0YXR1cyA9IDIwNDtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJObyBDb250ZW50XCI7XG5cdFx0XHRcdH0gZWxzZSBlcnJvciA9IHsgbWVzc2FnZTogYm9keSB9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGVycm9yICYmIF90aGlzMi5zaG91bGRUaHJvd09uRXJyb3IpIHRocm93IG5ldyBQb3N0Z3Jlc3RFcnJvcihlcnJvcik7XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRzdWNjZXNzOiBlcnJvciA9PT0gbnVsbCxcblx0XHRcdGVycm9yLFxuXHRcdFx0ZGF0YSxcblx0XHRcdGNvdW50LFxuXHRcdFx0c3RhdHVzLFxuXHRcdFx0c3RhdHVzVGV4dFxuXHRcdH07XG5cdH1cblx0LyoqXG5cdCogT3ZlcnJpZGUgdGhlIHR5cGUgb2YgdGhlIHJldHVybmVkIGBkYXRhYC5cblx0KlxuXHQqIEB0eXBlUGFyYW0gTmV3UmVzdWx0IC0gVGhlIG5ldyByZXN1bHQgdHlwZSB0byBvdmVycmlkZSB3aXRoXG5cdCogQGRlcHJlY2F0ZWQgVXNlIG92ZXJyaWRlVHlwZXM8eW91clR5cGUsIHsgbWVyZ2U6IGZhbHNlIH0+KCkgbWV0aG9kIGF0IHRoZSBlbmQgb2YgeW91ciBjYWxsIGNoYWluIGluc3RlYWRcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqL1xuXHRyZXR1cm5zKCkge1xuXHRcdC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogT3ZlcnJpZGUgdGhlIHR5cGUgb2YgdGhlIHJldHVybmVkIGBkYXRhYCBmaWVsZCBpbiB0aGUgcmVzcG9uc2UuXG5cdCpcblx0KiBAdHlwZVBhcmFtIE5ld1Jlc3VsdCAtIFRoZSBuZXcgdHlwZSB0byBjYXN0IHRoZSByZXNwb25zZSBkYXRhIHRvXG5cdCogQHR5cGVQYXJhbSBPcHRpb25zIC0gT3B0aW9uYWwgdHlwZSBjb25maWd1cmF0aW9uIChkZWZhdWx0cyB0byB7IG1lcmdlOiB0cnVlIH0pXG5cdCogQHR5cGVQYXJhbSBPcHRpb25zLm1lcmdlIC0gV2hlbiB0cnVlLCBtZXJnZXMgdGhlIG5ldyB0eXBlIHdpdGggZXhpc3RpbmcgcmV0dXJuIHR5cGUuIFdoZW4gZmFsc2UsIHJlcGxhY2VzIHRoZSBleGlzdGluZyB0eXBlcyBlbnRpcmVseSAoZGVmYXVsdHMgdG8gdHJ1ZSlcblx0KiBAZXhhbXBsZVxuXHQqIGBgYHR5cGVzY3JpcHRcblx0KiAvLyBNZXJnZSB3aXRoIGV4aXN0aW5nIHR5cGVzIChkZWZhdWx0IGJlaGF2aW9yKVxuXHQqIGNvbnN0IHF1ZXJ5ID0gc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCd1c2VycycpXG5cdCogICAuc2VsZWN0KClcblx0KiAgIC5vdmVycmlkZVR5cGVzPHsgY3VzdG9tX2ZpZWxkOiBzdHJpbmcgfT4oKVxuXHQqXG5cdCogLy8gUmVwbGFjZSBleGlzdGluZyB0eXBlcyBjb21wbGV0ZWx5XG5cdCogY29uc3QgcmVwbGFjZVF1ZXJ5ID0gc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCd1c2VycycpXG5cdCogICAuc2VsZWN0KClcblx0KiAgIC5vdmVycmlkZVR5cGVzPHsgaWQ6IG51bWJlcjsgbmFtZTogc3RyaW5nIH0sIHsgbWVyZ2U6IGZhbHNlIH0+KClcblx0KiBgYGBcblx0KiBAcmV0dXJucyBBIFBvc3RncmVzdEJ1aWxkZXIgaW5zdGFuY2Ugd2l0aCB0aGUgbmV3IHR5cGVcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBtb2RpZmllcnNcblx0KlxuXHQqIEBleGFtcGxlIENvbXBsZXRlIE92ZXJyaWRlIHR5cGUgb2Ygc3VjY2Vzc2Z1bCByZXNwb25zZVxuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2NvdW50cmllcycpXG5cdCogICAuc2VsZWN0KClcblx0KiAgIC5vdmVycmlkZVR5cGVzPEFycmF5PE15VHlwZT4sIHsgbWVyZ2U6IGZhbHNlIH0+KClcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgQ29tcGxldGUgT3ZlcnJpZGUgdHlwZSBvZiBzdWNjZXNzZnVsIHJlc3BvbnNlXG5cdCogYGBgdHNcblx0KiBsZXQgeDogdHlwZW9mIGRhdGEgLy8gTXlUeXBlW11cblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIENvbXBsZXRlIE92ZXJyaWRlIHR5cGUgb2Ygb2JqZWN0IHJlc3BvbnNlXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY291bnRyaWVzJylcblx0KiAgIC5zZWxlY3QoKVxuXHQqICAgLm1heWJlU2luZ2xlKClcblx0KiAgIC5vdmVycmlkZVR5cGVzPE15VHlwZSwgeyBtZXJnZTogZmFsc2UgfT4oKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBDb21wbGV0ZSBPdmVycmlkZSB0eXBlIG9mIG9iamVjdCByZXNwb25zZVxuXHQqIGBgYHRzXG5cdCogbGV0IHg6IHR5cGVvZiBkYXRhIC8vIE15VHlwZSB8IG51bGxcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIFBhcnRpYWwgT3ZlcnJpZGUgdHlwZSBvZiBzdWNjZXNzZnVsIHJlc3BvbnNlXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY291bnRyaWVzJylcblx0KiAgIC5zZWxlY3QoKVxuXHQqICAgLm92ZXJyaWRlVHlwZXM8QXJyYXk8eyBzdGF0dXM6IFwiQVwiIHwgXCJCXCIgfT4+KClcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgUGFydGlhbCBPdmVycmlkZSB0eXBlIG9mIHN1Y2Nlc3NmdWwgcmVzcG9uc2Vcblx0KiBgYGB0c1xuXHQqIGxldCB4OiB0eXBlb2YgZGF0YSAvLyBBcnJheTxDb3VudHJ5Um93UHJvcGVydGllcyAmIHsgc3RhdHVzOiBcIkFcIiB8IFwiQlwiIH0+XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZSBQYXJ0aWFsIE92ZXJyaWRlIHR5cGUgb2Ygb2JqZWN0IHJlc3BvbnNlXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY291bnRyaWVzJylcblx0KiAgIC5zZWxlY3QoKVxuXHQqICAgLm1heWJlU2luZ2xlKClcblx0KiAgIC5vdmVycmlkZVR5cGVzPHsgc3RhdHVzOiBcIkFcIiB8IFwiQlwiIH0+KClcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgUGFydGlhbCBPdmVycmlkZSB0eXBlIG9mIG9iamVjdCByZXNwb25zZVxuXHQqIGBgYHRzXG5cdCogbGV0IHg6IHR5cGVvZiBkYXRhIC8vIENvdW50cnlSb3dQcm9wZXJ0aWVzICYgeyBzdGF0dXM6IFwiQVwiIHwgXCJCXCIgfSB8IG51bGxcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIE1lcmdlIHZzIHJlcGxhY2UgZXhpc3RpbmcgdHlwZXNcblx0KiBgYGB0eXBlc2NyaXB0XG5cdCogLy8gTWVyZ2Ugd2l0aCBleGlzdGluZyB0eXBlcyAoZGVmYXVsdCBiZWhhdmlvcilcblx0KiBjb25zdCBxdWVyeSA9IHN1cGFiYXNlXG5cdCogICAuZnJvbSgndXNlcnMnKVxuXHQqICAgLnNlbGVjdCgpXG5cdCogICAub3ZlcnJpZGVUeXBlczx7IGN1c3RvbV9maWVsZDogc3RyaW5nIH0+KClcblx0KlxuXHQqIC8vIFJlcGxhY2UgZXhpc3RpbmcgdHlwZXMgY29tcGxldGVseVxuXHQqIGNvbnN0IHJlcGxhY2VRdWVyeSA9IHN1cGFiYXNlXG5cdCogICAuZnJvbSgndXNlcnMnKVxuXHQqICAgLnNlbGVjdCgpXG5cdCogICAub3ZlcnJpZGVUeXBlczx7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9LCB7IG1lcmdlOiBmYWxzZSB9PigpXG5cdCogYGBgXG5cdCovXG5cdG92ZXJyaWRlVHlwZXMoKSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9Qb3N0Z3Jlc3RUcmFuc2Zvcm1CdWlsZGVyLnRzXG52YXIgUG9zdGdyZXN0VHJhbnNmb3JtQnVpbGRlciA9IGNsYXNzIGV4dGVuZHMgUG9zdGdyZXN0QnVpbGRlciB7XG5cdC8qKlxuXHQqIFBlcmZvcm0gYSBTRUxFQ1Qgb24gdGhlIHF1ZXJ5IHJlc3VsdC5cblx0KlxuXHQqIEJ5IGRlZmF1bHQsIGAuaW5zZXJ0KClgLCBgLnVwZGF0ZSgpYCwgYC51cHNlcnQoKWAsIGFuZCBgLmRlbGV0ZSgpYCBkbyBub3Rcblx0KiByZXR1cm4gbW9kaWZpZWQgcm93cy4gQnkgY2FsbGluZyB0aGlzIG1ldGhvZCwgbW9kaWZpZWQgcm93cyBhcmUgcmV0dXJuZWQgaW5cblx0KiBgZGF0YWAuXG5cdCpcblx0KiBAcGFyYW0gY29sdW1ucyAtIFRoZSBjb2x1bW5zIHRvIHJldHJpZXZlLCBzZXBhcmF0ZWQgYnkgY29tbWFzXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgbW9kaWZpZXJzXG5cdCpcblx0KiBAZXhhbXBsZSBXaXRoIGB1cHNlcnQoKWBcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY2hhcmFjdGVycycpXG5cdCogICAudXBzZXJ0KHsgaWQ6IDEsIG5hbWU6ICdIYW4gU29sbycgfSlcblx0KiAgIC5zZWxlY3QoKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgV2l0aCBgdXBzZXJ0KClgXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBjaGFyYWN0ZXJzIChpZCBpbnQ4IHByaW1hcnkga2V5LCBuYW1lIHRleHQpO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIGNoYXJhY3RlcnMgKGlkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdIYW4nKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgV2l0aCBgdXBzZXJ0KClgXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcImlkXCI6IDEsXG5cdCogICAgICAgXCJuYW1lXCI6IFwiSGFuIFNvbG9cIlxuXHQqICAgICB9XG5cdCogICBdLFxuXHQqICAgXCJzdGF0dXNcIjogMjAxLFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiQ3JlYXRlZFwiXG5cdCogfVxuXHQqIGBgYFxuXHQqL1xuXHRzZWxlY3QoY29sdW1ucykge1xuXHRcdGxldCBxdW90ZWQgPSBmYWxzZTtcblx0XHRjb25zdCBjbGVhbmVkQ29sdW1ucyA9IChjb2x1bW5zICE9PSBudWxsICYmIGNvbHVtbnMgIT09IHZvaWQgMCA/IGNvbHVtbnMgOiBcIipcIikuc3BsaXQoXCJcIikubWFwKChjKSA9PiB7XG5cdFx0XHRpZiAoL1xccy8udGVzdChjKSAmJiAhcXVvdGVkKSByZXR1cm4gXCJcIjtcblx0XHRcdGlmIChjID09PSBcIlxcXCJcIikgcXVvdGVkID0gIXF1b3RlZDtcblx0XHRcdHJldHVybiBjO1xuXHRcdH0pLmpvaW4oXCJcIik7XG5cdFx0dGhpcy51cmwuc2VhcmNoUGFyYW1zLnNldChcInNlbGVjdFwiLCBjbGVhbmVkQ29sdW1ucyk7XG5cdFx0dGhpcy5oZWFkZXJzLmFwcGVuZChcIlByZWZlclwiLCBcInJldHVybj1yZXByZXNlbnRhdGlvblwiKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBPcmRlciB0aGUgcXVlcnkgcmVzdWx0IGJ5IGBjb2x1bW5gLlxuXHQqXG5cdCogWW91IGNhbiBjYWxsIHRoaXMgbWV0aG9kIG11bHRpcGxlIHRpbWVzIHRvIG9yZGVyIGJ5IG11bHRpcGxlIGNvbHVtbnMuXG5cdCpcblx0KiBZb3UgY2FuIG9yZGVyIHJlZmVyZW5jZWQgdGFibGVzLCBidXQgaXQgb25seSBhZmZlY3RzIHRoZSBvcmRlcmluZyBvZiB0aGVcblx0KiBwYXJlbnQgdGFibGUgaWYgeW91IHVzZSBgIWlubmVyYCBpbiB0aGUgcXVlcnkuXG5cdCpcblx0KiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBvcmRlciBieVxuXHQqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xuXHQqIEBwYXJhbSBvcHRpb25zLmFzY2VuZGluZyAtIElmIGB0cnVlYCwgdGhlIHJlc3VsdCB3aWxsIGJlIGluIGFzY2VuZGluZyBvcmRlclxuXHQqIEBwYXJhbSBvcHRpb25zLm51bGxzRmlyc3QgLSBJZiBgdHJ1ZWAsIGBudWxsYHMgYXBwZWFyIGZpcnN0LiBJZiBgZmFsc2VgLFxuXHQqIGBudWxsYHMgYXBwZWFyIGxhc3QuXG5cdCogQHBhcmFtIG9wdGlvbnMucmVmZXJlbmNlZFRhYmxlIC0gU2V0IHRoaXMgdG8gb3JkZXIgYSByZWZlcmVuY2VkIHRhYmxlIGJ5XG5cdCogaXRzIGNvbHVtbnNcblx0KiBAcGFyYW0gb3B0aW9ucy5mb3JlaWduVGFibGUgLSBEZXByZWNhdGVkLCB1c2UgYG9wdGlvbnMucmVmZXJlbmNlZFRhYmxlYFxuXHQqIGluc3RlYWRcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBtb2RpZmllcnNcblx0KlxuXHQqIEBleGFtcGxlIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdjaGFyYWN0ZXJzJylcblx0KiAgIC5zZWxlY3QoJ2lkLCBuYW1lJylcblx0KiAgIC5vcmRlcignaWQnLCB7IGFzY2VuZGluZzogZmFsc2UgfSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY2hhcmFjdGVycyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBjaGFyYWN0ZXJzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnTHVrZScpLFxuXHQqICAgKDIsICdMZWlhJyksXG5cdCogICAoMywgJ0hhbicpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFtcblx0KiAgICAge1xuXHQqICAgICAgIFwiaWRcIjogMyxcblx0KiAgICAgICBcIm5hbWVcIjogXCJIYW5cIlxuXHQqICAgICB9LFxuXHQqICAgICB7XG5cdCogICAgICAgXCJpZFwiOiAyLFxuXHQqICAgICAgIFwibmFtZVwiOiBcIkxlaWFcIlxuXHQqICAgICB9LFxuXHQqICAgICB7XG5cdCogICAgICAgXCJpZFwiOiAxLFxuXHQqICAgICAgIFwibmFtZVwiOiBcIkx1a2VcIlxuXHQqICAgICB9XG5cdCogICBdLFxuXHQqICAgXCJzdGF0dXNcIjogMjAwLFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlRGVzY3JpcHRpb24gT24gYSByZWZlcmVuY2VkIHRhYmxlXG5cdCogT3JkZXJpbmcgd2l0aCBgcmVmZXJlbmNlZFRhYmxlYCBkb2Vzbid0IGFmZmVjdCB0aGUgb3JkZXJpbmcgb2YgdGhlXG5cdCogcGFyZW50IHRhYmxlLlxuXHQqXG5cdCogQGV4YW1wbGUgT24gYSByZWZlcmVuY2VkIHRhYmxlXG5cdCogYGBgdHNcblx0KiAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAgIC5mcm9tKCdvcmNoZXN0cmFsX3NlY3Rpb25zJylcblx0KiAgICAgLnNlbGVjdChgXG5cdCogICAgICAgbmFtZSxcblx0KiAgICAgICBpbnN0cnVtZW50cyAoXG5cdCogICAgICAgICBuYW1lXG5cdCogICAgICAgKVxuXHQqICAgICBgKVxuXHQqICAgICAub3JkZXIoJ25hbWUnLCB7IHJlZmVyZW5jZWRUYWJsZTogJ2luc3RydW1lbnRzJywgYXNjZW5kaW5nOiBmYWxzZSB9KVxuXHQqXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBPbiBhIHJlZmVyZW5jZWQgdGFibGVcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIG9yY2hlc3RyYWxfc2VjdGlvbnMgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBpbnN0cnVtZW50cyAoXG5cdCogICAgIGlkIGludDggcHJpbWFyeSBrZXksXG5cdCogICAgIHNlY3Rpb25faWQgaW50OCBub3QgbnVsbCByZWZlcmVuY2VzIG9yY2hlc3RyYWxfc2VjdGlvbnMsXG5cdCogICAgIG5hbWUgdGV4dFxuXHQqICAgKTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBvcmNoZXN0cmFsX3NlY3Rpb25zIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnc3RyaW5ncycpLFxuXHQqICAgKDIsICd3b29kd2luZHMnKTtcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgaW5zdHJ1bWVudHMgKGlkLCBzZWN0aW9uX2lkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsIDEsICdoYXJwJyksXG5cdCogICAoMiwgMSwgJ3Zpb2xpbicpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBPbiBhIHJlZmVyZW5jZWQgdGFibGVcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFtcblx0KiAgICAge1xuXHQqICAgICAgIFwibmFtZVwiOiBcInN0cmluZ3NcIixcblx0KiAgICAgICBcImluc3RydW1lbnRzXCI6IFtcblx0KiAgICAgICAgIHtcblx0KiAgICAgICAgICAgXCJuYW1lXCI6IFwidmlvbGluXCJcblx0KiAgICAgICAgIH0sXG5cdCogICAgICAgICB7XG5cdCogICAgICAgICAgIFwibmFtZVwiOiBcImhhcnBcIlxuXHQqICAgICAgICAgfVxuXHQqICAgICAgIF1cblx0KiAgICAgfSxcblx0KiAgICAge1xuXHQqICAgICAgIFwibmFtZVwiOiBcIndvb2R3aW5kc1wiLFxuXHQqICAgICAgIFwiaW5zdHJ1bWVudHNcIjogW11cblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZURlc2NyaXB0aW9uIE9yZGVyIHBhcmVudCB0YWJsZSBieSBhIHJlZmVyZW5jZWQgdGFibGVcblx0KiBPcmRlcmluZyB3aXRoIGByZWZlcmVuY2VkX3RhYmxlKGNvbClgIGFmZmVjdHMgdGhlIG9yZGVyaW5nIG9mIHRoZVxuXHQqIHBhcmVudCB0YWJsZS5cblx0KlxuXHQqIEBleGFtcGxlIE9yZGVyIHBhcmVudCB0YWJsZSBieSBhIHJlZmVyZW5jZWQgdGFibGVcblx0KiBgYGB0c1xuXHQqICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgICAgLmZyb20oJ2luc3RydW1lbnRzJylcblx0KiAgICAgLnNlbGVjdChgXG5cdCogICAgICAgbmFtZSxcblx0KiAgICAgICBzZWN0aW9uOm9yY2hlc3RyYWxfc2VjdGlvbnMgKFxuXHQqICAgICAgICAgbmFtZVxuXHQqICAgICAgIClcblx0KiAgICAgYClcblx0KiAgICAgLm9yZGVyKCdzZWN0aW9uKG5hbWUpJywgeyBhc2NlbmRpbmc6IHRydWUgfSlcblx0KlxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgT3JkZXIgcGFyZW50IHRhYmxlIGJ5IGEgcmVmZXJlbmNlZCB0YWJsZVxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgb3JjaGVzdHJhbF9zZWN0aW9ucyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIGluc3RydW1lbnRzIChcblx0KiAgICAgaWQgaW50OCBwcmltYXJ5IGtleSxcblx0KiAgICAgc2VjdGlvbl9pZCBpbnQ4IG5vdCBudWxsIHJlZmVyZW5jZXMgb3JjaGVzdHJhbF9zZWN0aW9ucyxcblx0KiAgICAgbmFtZSB0ZXh0XG5cdCogICApO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIG9yY2hlc3RyYWxfc2VjdGlvbnMgKGlkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdzdHJpbmdzJyksXG5cdCogICAoMiwgJ3dvb2R3aW5kcycpO1xuXHQqIGluc2VydCBpbnRvXG5cdCogICBpbnN0cnVtZW50cyAoaWQsIHNlY3Rpb25faWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgMiwgJ2ZsdXRlJyksXG5cdCogICAoMiwgMSwgJ3Zpb2xpbicpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBPcmRlciBwYXJlbnQgdGFibGUgYnkgYSByZWZlcmVuY2VkIHRhYmxlXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcIm5hbWVcIjogXCJ2aW9saW5cIixcblx0KiAgICAgICBcIm9yY2hlc3RyYWxfc2VjdGlvbnNcIjoge1wibmFtZVwiOiBcInN0cmluZ3NcIn1cblx0KiAgICAgfSxcblx0KiAgICAge1xuXHQqICAgICAgIFwibmFtZVwiOiBcImZsdXRlXCIsXG5cdCogICAgICAgXCJvcmNoZXN0cmFsX3NlY3Rpb25zXCI6IHtcIm5hbWVcIjogXCJ3b29kd2luZHNcIn1cblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCovXG5cdG9yZGVyKGNvbHVtbiwgeyBhc2NlbmRpbmcgPSB0cnVlLCBudWxsc0ZpcnN0LCBmb3JlaWduVGFibGUsIHJlZmVyZW5jZWRUYWJsZSA9IGZvcmVpZ25UYWJsZSB9ID0ge30pIHtcblx0XHRjb25zdCBrZXkgPSByZWZlcmVuY2VkVGFibGUgPyBgJHtyZWZlcmVuY2VkVGFibGV9Lm9yZGVyYCA6IFwib3JkZXJcIjtcblx0XHRjb25zdCBleGlzdGluZ09yZGVyID0gdGhpcy51cmwuc2VhcmNoUGFyYW1zLmdldChrZXkpO1xuXHRcdHRoaXMudXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCBgJHtleGlzdGluZ09yZGVyID8gYCR7ZXhpc3RpbmdPcmRlcn0sYCA6IFwiXCJ9JHtjb2x1bW59LiR7YXNjZW5kaW5nID8gXCJhc2NcIiA6IFwiZGVzY1wifSR7bnVsbHNGaXJzdCA9PT0gdm9pZCAwID8gXCJcIiA6IG51bGxzRmlyc3QgPyBcIi5udWxsc2ZpcnN0XCIgOiBcIi5udWxsc2xhc3RcIn1gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBMaW1pdCB0aGUgcXVlcnkgcmVzdWx0IGJ5IGBjb3VudGAuXG5cdCpcblx0KiBAcGFyYW0gY291bnQgLSBUaGUgbWF4aW11bSBudW1iZXIgb2Ygcm93cyB0byByZXR1cm5cblx0KiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcblx0KiBAcGFyYW0gb3B0aW9ucy5yZWZlcmVuY2VkVGFibGUgLSBTZXQgdGhpcyB0byBsaW1pdCByb3dzIG9mIHJlZmVyZW5jZWRcblx0KiB0YWJsZXMgaW5zdGVhZCBvZiB0aGUgcGFyZW50IHRhYmxlXG5cdCogQHBhcmFtIG9wdGlvbnMuZm9yZWlnblRhYmxlIC0gRGVwcmVjYXRlZCwgdXNlIGBvcHRpb25zLnJlZmVyZW5jZWRUYWJsZWBcblx0KiBpbnN0ZWFkXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgbW9kaWZpZXJzXG5cdCpcblx0KiBAZXhhbXBsZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY2hhcmFjdGVycycpXG5cdCogICAuc2VsZWN0KCduYW1lJylcblx0KiAgIC5saW1pdCgxKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBjaGFyYWN0ZXJzIChpZCBpbnQ4IHByaW1hcnkga2V5LCBuYW1lIHRleHQpO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIGNoYXJhY3RlcnMgKGlkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdMdWtlJyksXG5cdCogICAoMiwgJ0xlaWEnKSxcblx0KiAgICgzLCAnSGFuJyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJuYW1lXCI6IFwiTHVrZVwiXG5cdCogICAgIH1cblx0KiAgIF0sXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgT24gYSByZWZlcmVuY2VkIHRhYmxlXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ29yY2hlc3RyYWxfc2VjdGlvbnMnKVxuXHQqICAgLnNlbGVjdChgXG5cdCogICAgIG5hbWUsXG5cdCogICAgIGluc3RydW1lbnRzIChcblx0KiAgICAgICBuYW1lXG5cdCogICAgIClcblx0KiAgIGApXG5cdCogICAubGltaXQoMSwgeyByZWZlcmVuY2VkVGFibGU6ICdpbnN0cnVtZW50cycgfSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIE9uIGEgcmVmZXJlbmNlZCB0YWJsZVxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgb3JjaGVzdHJhbF9zZWN0aW9ucyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIGluc3RydW1lbnRzIChcblx0KiAgICAgaWQgaW50OCBwcmltYXJ5IGtleSxcblx0KiAgICAgc2VjdGlvbl9pZCBpbnQ4IG5vdCBudWxsIHJlZmVyZW5jZXMgb3JjaGVzdHJhbF9zZWN0aW9ucyxcblx0KiAgICAgbmFtZSB0ZXh0XG5cdCogICApO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIG9yY2hlc3RyYWxfc2VjdGlvbnMgKGlkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdzdHJpbmdzJyk7XG5cdCogaW5zZXJ0IGludG9cblx0KiAgIGluc3RydW1lbnRzIChpZCwgc2VjdGlvbl9pZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAxLCAnaGFycCcpLFxuXHQqICAgKDIsIDEsICd2aW9saW4nKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgT24gYSByZWZlcmVuY2VkIHRhYmxlXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcIm5hbWVcIjogXCJzdHJpbmdzXCIsXG5cdCogICAgICAgXCJpbnN0cnVtZW50c1wiOiBbXG5cdCogICAgICAgICB7XG5cdCogICAgICAgICAgIFwibmFtZVwiOiBcInZpb2xpblwiXG5cdCogICAgICAgICB9XG5cdCogICAgICAgXVxuXHQqICAgICB9XG5cdCogICBdLFxuXHQqICAgXCJzdGF0dXNcIjogMjAwLFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqIH1cblx0KiBgYGBcblx0Ki9cblx0bGltaXQoY291bnQsIHsgZm9yZWlnblRhYmxlLCByZWZlcmVuY2VkVGFibGUgPSBmb3JlaWduVGFibGUgfSA9IHt9KSB7XG5cdFx0Y29uc3Qga2V5ID0gdHlwZW9mIHJlZmVyZW5jZWRUYWJsZSA9PT0gXCJ1bmRlZmluZWRcIiA/IFwibGltaXRcIiA6IGAke3JlZmVyZW5jZWRUYWJsZX0ubGltaXRgO1xuXHRcdHRoaXMudXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5LCBgJHtjb3VudH1gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBMaW1pdCB0aGUgcXVlcnkgcmVzdWx0IGJ5IHN0YXJ0aW5nIGF0IGFuIG9mZnNldCBgZnJvbWAgYW5kIGVuZGluZyBhdCB0aGUgb2Zmc2V0IGB0b2AuXG5cdCogT25seSByZWNvcmRzIHdpdGhpbiB0aGlzIHJhbmdlIGFyZSByZXR1cm5lZC5cblx0KiBUaGlzIHJlc3BlY3RzIHRoZSBxdWVyeSBvcmRlciBhbmQgaWYgdGhlcmUgaXMgbm8gb3JkZXIgY2xhdXNlIHRoZSByYW5nZSBjb3VsZCBiZWhhdmUgdW5leHBlY3RlZGx5LlxuXHQqIFRoZSBgZnJvbWAgYW5kIGB0b2AgdmFsdWVzIGFyZSAwLWJhc2VkIGFuZCBpbmNsdXNpdmU6IGByYW5nZSgxLCAzKWAgd2lsbCBpbmNsdWRlIHRoZSBzZWNvbmQsIHRoaXJkXG5cdCogYW5kIGZvdXJ0aCByb3dzIG9mIHRoZSBxdWVyeS5cblx0KlxuXHQqIEBwYXJhbSBmcm9tIC0gVGhlIHN0YXJ0aW5nIGluZGV4IGZyb20gd2hpY2ggdG8gbGltaXQgdGhlIHJlc3VsdFxuXHQqIEBwYXJhbSB0byAtIFRoZSBsYXN0IGluZGV4IHRvIHdoaWNoIHRvIGxpbWl0IHRoZSByZXN1bHRcblx0KiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcblx0KiBAcGFyYW0gb3B0aW9ucy5yZWZlcmVuY2VkVGFibGUgLSBTZXQgdGhpcyB0byBsaW1pdCByb3dzIG9mIHJlZmVyZW5jZWRcblx0KiB0YWJsZXMgaW5zdGVhZCBvZiB0aGUgcGFyZW50IHRhYmxlXG5cdCogQHBhcmFtIG9wdGlvbnMuZm9yZWlnblRhYmxlIC0gRGVwcmVjYXRlZCwgdXNlIGBvcHRpb25zLnJlZmVyZW5jZWRUYWJsZWBcblx0KiBpbnN0ZWFkXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgbW9kaWZpZXJzXG5cdCpcblx0KiBAZXhhbXBsZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY2hhcmFjdGVycycpXG5cdCogICAuc2VsZWN0KCduYW1lJylcblx0KiAgIC5yYW5nZSgwLCAxKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBjaGFyYWN0ZXJzIChpZCBpbnQ4IHByaW1hcnkga2V5LCBuYW1lIHRleHQpO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIGNoYXJhY3RlcnMgKGlkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdMdWtlJyksXG5cdCogICAoMiwgJ0xlaWEnKSxcblx0KiAgICgzLCAnSGFuJyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJuYW1lXCI6IFwiTHVrZVwiXG5cdCogICAgIH0sXG5cdCogICAgIHtcblx0KiAgICAgICBcIm5hbWVcIjogXCJMZWlhXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCovXG5cdHJhbmdlKGZyb20sIHRvLCB7IGZvcmVpZ25UYWJsZSwgcmVmZXJlbmNlZFRhYmxlID0gZm9yZWlnblRhYmxlIH0gPSB7fSkge1xuXHRcdGNvbnN0IGtleU9mZnNldCA9IHR5cGVvZiByZWZlcmVuY2VkVGFibGUgPT09IFwidW5kZWZpbmVkXCIgPyBcIm9mZnNldFwiIDogYCR7cmVmZXJlbmNlZFRhYmxlfS5vZmZzZXRgO1xuXHRcdGNvbnN0IGtleUxpbWl0ID0gdHlwZW9mIHJlZmVyZW5jZWRUYWJsZSA9PT0gXCJ1bmRlZmluZWRcIiA/IFwibGltaXRcIiA6IGAke3JlZmVyZW5jZWRUYWJsZX0ubGltaXRgO1xuXHRcdHRoaXMudXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5T2Zmc2V0LCBgJHtmcm9tfWApO1xuXHRcdHRoaXMudXJsLnNlYXJjaFBhcmFtcy5zZXQoa2V5TGltaXQsIGAke3RvIC0gZnJvbSArIDF9YCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogU2V0IHRoZSBBYm9ydFNpZ25hbCBmb3IgdGhlIGZldGNoIHJlcXVlc3QuXG5cdCpcblx0KiBAcGFyYW0gc2lnbmFsIC0gVGhlIEFib3J0U2lnbmFsIHRvIHVzZSBmb3IgdGhlIGZldGNoIHJlcXVlc3Rcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBtb2RpZmllcnNcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogWW91IGNhbiB1c2UgdGhpcyB0byBzZXQgYSB0aW1lb3V0IGZvciB0aGUgcmVxdWVzdC5cblx0KlxuXHQqIEBleGFtcGxlRGVzY3JpcHRpb24gQWJvcnRpbmcgcmVxdWVzdHMgaW4tZmxpZ2h0XG5cdCogWW91IGNhbiB1c2UgYW4gW2BBYm9ydENvbnRyb2xsZXJgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQWJvcnRDb250cm9sbGVyKSB0byBhYm9ydCByZXF1ZXN0cy5cblx0KiBOb3RlIHRoYXQgYHN0YXR1c2AgYW5kIGBzdGF0dXNUZXh0YCBkb24ndCBtZWFuIGFueXRoaW5nIGZvciBhYm9ydGVkIHJlcXVlc3RzIGFzIHRoZSByZXF1ZXN0IHdhc24ndCBmdWxmaWxsZWQuXG5cdCpcblx0KiBAZXhhbXBsZSBBYm9ydGluZyByZXF1ZXN0cyBpbi1mbGlnaHRcblx0KiBgYGB0c1xuXHQqIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG5cdCpcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ3ZlcnlfYmlnX3RhYmxlJylcblx0KiAgIC5zZWxlY3QoKVxuXHQqICAgLmFib3J0U2lnbmFsKGFjLnNpZ25hbClcblx0KlxuXHQqIC8vIEFib3J0IHRoZSByZXF1ZXN0IGFmdGVyIDEwMCBtc1xuXHQqIHNldFRpbWVvdXQoKCkgPT4gYWMuYWJvcnQoKSwgMTAwKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBBYm9ydGluZyByZXF1ZXN0cyBpbi1mbGlnaHRcblx0KiBgYGBqc29uXG5cdCogICB7XG5cdCogICAgIFwiZXJyb3JcIjoge1xuXHQqICAgICAgIFwibWVzc2FnZVwiOiBcIkFib3J0RXJyb3I6IFRoZSB1c2VyIGFib3J0ZWQgYSByZXF1ZXN0LlwiLFxuXHQqICAgICAgIFwiZGV0YWlsc1wiOiBcIlwiLFxuXHQqICAgICAgIFwiaGludFwiOiBcIlRoZSByZXF1ZXN0IHdhcyBhYm9ydGVkIGxvY2FsbHkgdmlhIHRoZSBwcm92aWRlZCBBYm9ydFNpZ25hbC5cIixcblx0KiAgICAgICBcImNvZGVcIjogXCJcIlxuXHQqICAgICB9LFxuXHQqICAgICBcInN0YXR1c1wiOiAwLFxuXHQqICAgICBcInN0YXR1c1RleHRcIjogXCJcIlxuXHQqICAgfVxuXHQqXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZSBTZXQgYSB0aW1lb3V0XG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ3ZlcnlfYmlnX3RhYmxlJylcblx0KiAgIC5zZWxlY3QoKVxuXHQqICAgLmFib3J0U2lnbmFsKEFib3J0U2lnbmFsLnRpbWVvdXQoMTAwMCAvKiBtcyAqXFwvKSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgU2V0IGEgdGltZW91dFxuXHQqIGBgYGpzb25cblx0KiAgIHtcblx0KiAgICAgXCJlcnJvclwiOiB7XG5cdCogICAgICAgXCJtZXNzYWdlXCI6IFwiRmV0Y2hFcnJvcjogVGhlIHVzZXIgYWJvcnRlZCBhIHJlcXVlc3QuXCIsXG5cdCogICAgICAgXCJkZXRhaWxzXCI6IFwiXCIsXG5cdCogICAgICAgXCJoaW50XCI6IFwiXCIsXG5cdCogICAgICAgXCJjb2RlXCI6IFwiXCJcblx0KiAgICAgfSxcblx0KiAgICAgXCJzdGF0dXNcIjogNDAwLFxuXHQqICAgICBcInN0YXR1c1RleHRcIjogXCJCYWQgUmVxdWVzdFwiXG5cdCogICB9XG5cdCpcblx0KiBgYGBcblx0Ki9cblx0YWJvcnRTaWduYWwoc2lnbmFsKSB7XG5cdFx0dGhpcy5zaWduYWwgPSBzaWduYWw7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogUmV0dXJuIGBkYXRhYCBhcyBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheSBvZiBvYmplY3RzLlxuXHQqXG5cdCogUXVlcnkgcmVzdWx0IG11c3QgYmUgb25lIHJvdyAoZS5nLiB1c2luZyBgLmxpbWl0KDEpYCksIG90aGVyd2lzZSB0aGlzXG5cdCogcmV0dXJucyBhbiBlcnJvci5cblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBtb2RpZmllcnNcblx0KlxuXHQqIEBleGFtcGxlIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdjaGFyYWN0ZXJzJylcblx0KiAgIC5zZWxlY3QoJ25hbWUnKVxuXHQqICAgLmxpbWl0KDEpXG5cdCogICAuc2luZ2xlKClcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY2hhcmFjdGVycyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBjaGFyYWN0ZXJzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnTHVrZScpLFxuXHQqICAgKDIsICdMZWlhJyksXG5cdCogICAoMywgJ0hhbicpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IHtcblx0KiAgICAgXCJuYW1lXCI6IFwiTHVrZVwiXG5cdCogICB9LFxuXHQqICAgXCJzdGF0dXNcIjogMjAwLFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqIH1cblx0KiBgYGBcblx0Ki9cblx0c2luZ2xlKCkge1xuXHRcdHRoaXMuaGVhZGVycy5zZXQoXCJBY2NlcHRcIiwgXCJhcHBsaWNhdGlvbi92bmQucGdyc3Qub2JqZWN0K2pzb25cIik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogUmV0dXJuIGBkYXRhYCBhcyBhIHNpbmdsZSBvYmplY3QgaW5zdGVhZCBvZiBhbiBhcnJheSBvZiBvYmplY3RzLlxuXHQqXG5cdCogUXVlcnkgcmVzdWx0IG11c3QgYmUgemVybyBvciBvbmUgcm93IChlLmcuIHVzaW5nIGAubGltaXQoMSlgKSwgb3RoZXJ3aXNlXG5cdCogdGhpcyByZXR1cm5zIGFuIGVycm9yLlxuXHQqXG5cdCogQGNhdGVnb3J5IERhdGFiYXNlXG5cdCogQHN1YmNhdGVnb3J5IFVzaW5nIG1vZGlmaWVyc1xuXHQqXG5cdCogQGV4YW1wbGUgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2NoYXJhY3RlcnMnKVxuXHQqICAgLnNlbGVjdCgpXG5cdCogICAuZXEoJ25hbWUnLCAnS2F0bmlzcycpXG5cdCogICAubWF5YmVTaW5nbGUoKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBjaGFyYWN0ZXJzIChpZCBpbnQ4IHByaW1hcnkga2V5LCBuYW1lIHRleHQpO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIGNoYXJhY3RlcnMgKGlkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdMdWtlJyksXG5cdCogICAoMiwgJ0xlaWEnKSxcblx0KiAgICgzLCAnSGFuJyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqL1xuXHRtYXliZVNpbmdsZSgpIHtcblx0XHR0aGlzLmlzTWF5YmVTaW5nbGUgPSB0cnVlO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdC8qKlxuXHQqIFJldHVybiBgZGF0YWAgYXMgYSBzdHJpbmcgaW4gQ1NWIGZvcm1hdC5cblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBtb2RpZmllcnNcblx0KlxuXHQqIEBleGFtcGxlRGVzY3JpcHRpb24gUmV0dXJuIGRhdGEgYXMgQ1NWXG5cdCogQnkgZGVmYXVsdCwgdGhlIGRhdGEgaXMgcmV0dXJuZWQgaW4gSlNPTiBmb3JtYXQsIGJ1dCBjYW4gYWxzbyBiZSByZXR1cm5lZCBhcyBDb21tYSBTZXBhcmF0ZWQgVmFsdWVzLlxuXHQqXG5cdCogQGV4YW1wbGUgUmV0dXJuIGRhdGEgYXMgQ1NWXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2NoYXJhY3RlcnMnKVxuXHQqICAgLnNlbGVjdCgpXG5cdCogICAuY3N2KClcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFJldHVybiBkYXRhIGFzIENTVlxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY2hhcmFjdGVycyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBjaGFyYWN0ZXJzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnTHVrZScpLFxuXHQqICAgKDIsICdMZWlhJyksXG5cdCogICAoMywgJ0hhbicpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBSZXR1cm4gZGF0YSBhcyBDU1Zcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFwiaWQsbmFtZVxcbjEsTHVrZVxcbjIsTGVpYVxcbjMsSGFuXCIsXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqL1xuXHRjc3YoKSB7XG5cdFx0dGhpcy5oZWFkZXJzLnNldChcIkFjY2VwdFwiLCBcInRleHQvY3N2XCIpO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdC8qKlxuXHQqIFJldHVybiBgZGF0YWAgYXMgYW4gb2JqZWN0IGluIFtHZW9KU09OXShodHRwczovL2dlb2pzb24ub3JnKSBmb3JtYXQuXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0Ki9cblx0Z2VvanNvbigpIHtcblx0XHR0aGlzLmhlYWRlcnMuc2V0KFwiQWNjZXB0XCIsIFwiYXBwbGljYXRpb24vZ2VvK2pzb25cIik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogUmV0dXJuIGBkYXRhYCBhcyB0aGUgRVhQTEFJTiBwbGFuIGZvciB0aGUgcXVlcnkuXG5cdCpcblx0KiBZb3UgbmVlZCB0byBlbmFibGUgdGhlXG5cdCogW2RiX3BsYW5fZW5hYmxlZF0oaHR0cHM6Ly9zdXBhYmFzZS5jb20vZG9jcy9ndWlkZXMvZGF0YWJhc2UvZGVidWdnaW5nLXBlcmZvcm1hbmNlI2VuYWJsaW5nLWV4cGxhaW4pXG5cdCogc2V0dGluZyBiZWZvcmUgdXNpbmcgdGhpcyBtZXRob2QuXG5cdCpcblx0KiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcblx0KlxuXHQqIEBwYXJhbSBvcHRpb25zLmFuYWx5emUgLSBJZiBgdHJ1ZWAsIHRoZSBxdWVyeSB3aWxsIGJlIGV4ZWN1dGVkIGFuZCB0aGVcblx0KiBhY3R1YWwgcnVuIHRpbWUgd2lsbCBiZSByZXR1cm5lZFxuXHQqXG5cdCogQHBhcmFtIG9wdGlvbnMudmVyYm9zZSAtIElmIGB0cnVlYCwgdGhlIHF1ZXJ5IGlkZW50aWZpZXIgd2lsbCBiZSByZXR1cm5lZFxuXHQqIGFuZCBgZGF0YWAgd2lsbCBpbmNsdWRlIHRoZSBvdXRwdXQgY29sdW1ucyBvZiB0aGUgcXVlcnlcblx0KlxuXHQqIEBwYXJhbSBvcHRpb25zLnNldHRpbmdzIC0gSWYgYHRydWVgLCBpbmNsdWRlIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyYXRpb25cblx0KiBwYXJhbWV0ZXJzIHRoYXQgYWZmZWN0IHF1ZXJ5IHBsYW5uaW5nXG5cdCpcblx0KiBAcGFyYW0gb3B0aW9ucy5idWZmZXJzIC0gSWYgYHRydWVgLCBpbmNsdWRlIGluZm9ybWF0aW9uIG9uIGJ1ZmZlciB1c2FnZVxuXHQqXG5cdCogQHBhcmFtIG9wdGlvbnMud2FsIC0gSWYgYHRydWVgLCBpbmNsdWRlIGluZm9ybWF0aW9uIG9uIFdBTCByZWNvcmQgZ2VuZXJhdGlvblxuXHQqXG5cdCogQHBhcmFtIG9wdGlvbnMuZm9ybWF0IC0gVGhlIGZvcm1hdCBvZiB0aGUgb3V0cHV0LCBjYW4gYmUgYFwidGV4dFwiYCAoZGVmYXVsdClcblx0KiBvciBgXCJqc29uXCJgXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgbW9kaWZpZXJzXG5cdCpcblx0KiBAZXhhbXBsZURlc2NyaXB0aW9uIEdldCB0aGUgZXhlY3V0aW9uIHBsYW5cblx0KiBCeSBkZWZhdWx0LCB0aGUgZGF0YSBpcyByZXR1cm5lZCBpbiBURVhUIGZvcm1hdCwgYnV0IGNhbiBhbHNvIGJlIHJldHVybmVkIGFzIEpTT04gYnkgdXNpbmcgdGhlIGBmb3JtYXRgIHBhcmFtZXRlci5cblx0KlxuXHQqIEBleGFtcGxlIEdldCB0aGUgZXhlY3V0aW9uIHBsYW5cblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY2hhcmFjdGVycycpXG5cdCogICAuc2VsZWN0KClcblx0KiAgIC5leHBsYWluKClcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIEdldCB0aGUgZXhlY3V0aW9uIHBsYW5cblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIGNoYXJhY3RlcnMgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgY2hhcmFjdGVycyAoaWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ0x1a2UnKSxcblx0KiAgICgyLCAnTGVpYScpLFxuXHQqICAgKDMsICdIYW4nKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgR2V0IHRoZSBleGVjdXRpb24gcGxhblxuXHQqIGBgYGpzXG5cdCogQWdncmVnYXRlICAoY29zdD0zMy4zNC4uMzMuMzYgcm93cz0xIHdpZHRoPTExMilcblx0KiAgIC0+ICBMaW1pdCAgKGNvc3Q9MC4wMC4uMTguMzMgcm93cz0xMDAwIHdpZHRoPTQwKVxuXHQqICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGNoYXJhY3RlcnMgIChjb3N0PTAuMDAuLjIyLjAwIHJvd3M9MTIwMCB3aWR0aD00MClcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlRGVzY3JpcHRpb24gR2V0IHRoZSBleGVjdXRpb24gcGxhbiB3aXRoIGFuYWx5emUgYW5kIHZlcmJvc2Vcblx0KiBCeSBkZWZhdWx0LCB0aGUgZGF0YSBpcyByZXR1cm5lZCBpbiBURVhUIGZvcm1hdCwgYnV0IGNhbiBhbHNvIGJlIHJldHVybmVkIGFzIEpTT04gYnkgdXNpbmcgdGhlIGBmb3JtYXRgIHBhcmFtZXRlci5cblx0KlxuXHQqIEBleGFtcGxlIEdldCB0aGUgZXhlY3V0aW9uIHBsYW4gd2l0aCBhbmFseXplIGFuZCB2ZXJib3NlXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2NoYXJhY3RlcnMnKVxuXHQqICAgLnNlbGVjdCgpXG5cdCogICAuZXhwbGFpbih7YW5hbHl6ZTp0cnVlLHZlcmJvc2U6dHJ1ZX0pXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBHZXQgdGhlIGV4ZWN1dGlvbiBwbGFuIHdpdGggYW5hbHl6ZSBhbmQgdmVyYm9zZVxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY2hhcmFjdGVycyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBjaGFyYWN0ZXJzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnTHVrZScpLFxuXHQqICAgKDIsICdMZWlhJyksXG5cdCogICAoMywgJ0hhbicpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBHZXQgdGhlIGV4ZWN1dGlvbiBwbGFuIHdpdGggYW5hbHl6ZSBhbmQgdmVyYm9zZVxuXHQqIGBgYGpzXG5cdCogQWdncmVnYXRlICAoY29zdD0zMy4zNC4uMzMuMzYgcm93cz0xIHdpZHRoPTExMikgKGFjdHVhbCB0aW1lPTAuMDQxLi4wLjA0MSByb3dzPTEgbG9vcHM9MSlcblx0KiAgIE91dHB1dDogTlVMTDo6YmlnaW50LCBjb3VudChST1coY2hhcmFjdGVycy5pZCwgY2hhcmFjdGVycy5uYW1lKSksIENPQUxFU0NFKGpzb25fYWdnKFJPVyhjaGFyYWN0ZXJzLmlkLCBjaGFyYWN0ZXJzLm5hbWUpKSwgJ1tdJzo6anNvbiksIE5VTExJRihjdXJyZW50X3NldHRpbmcoJ3Jlc3BvbnNlLmhlYWRlcnMnOjp0ZXh0LCB0cnVlKSwgJyc6OnRleHQpLCBOVUxMSUYoY3VycmVudF9zZXR0aW5nKCdyZXNwb25zZS5zdGF0dXMnOjp0ZXh0LCB0cnVlKSwgJyc6OnRleHQpXG5cdCogICAtPiAgTGltaXQgIChjb3N0PTAuMDAuLjE4LjMzIHJvd3M9MTAwMCB3aWR0aD00MCkgKGFjdHVhbCB0aW1lPTAuMDA1Li4wLjAwNiByb3dzPTMgbG9vcHM9MSlcblx0KiAgICAgICAgIE91dHB1dDogY2hhcmFjdGVycy5pZCwgY2hhcmFjdGVycy5uYW1lXG5cdCogICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmNoYXJhY3RlcnMgIChjb3N0PTAuMDAuLjIyLjAwIHJvd3M9MTIwMCB3aWR0aD00MCkgKGFjdHVhbCB0aW1lPTAuMDA0Li4wLjAwNSByb3dzPTMgbG9vcHM9MSlcblx0KiAgICAgICAgICAgICAgIE91dHB1dDogY2hhcmFjdGVycy5pZCwgY2hhcmFjdGVycy5uYW1lXG5cdCogUXVlcnkgSWRlbnRpZmllcjogLTQ3MzA2NTQyOTE2MjMzMjExNzNcblx0KiBQbGFubmluZyBUaW1lOiAwLjQwNyBtc1xuXHQqIEV4ZWN1dGlvbiBUaW1lOiAwLjExOSBtc1xuXHQqIGBgYFxuXHQqL1xuXHRleHBsYWluKHsgYW5hbHl6ZSA9IGZhbHNlLCB2ZXJib3NlID0gZmFsc2UsIHNldHRpbmdzID0gZmFsc2UsIGJ1ZmZlcnMgPSBmYWxzZSwgd2FsID0gZmFsc2UsIGZvcm1hdCA9IFwidGV4dFwiIH0gPSB7fSkge1xuXHRcdHZhciBfdGhpcyRoZWFkZXJzJGdldDtcblx0XHRjb25zdCBvcHRpb25zID0gW1xuXHRcdFx0YW5hbHl6ZSA/IFwiYW5hbHl6ZVwiIDogbnVsbCxcblx0XHRcdHZlcmJvc2UgPyBcInZlcmJvc2VcIiA6IG51bGwsXG5cdFx0XHRzZXR0aW5ncyA/IFwic2V0dGluZ3NcIiA6IG51bGwsXG5cdFx0XHRidWZmZXJzID8gXCJidWZmZXJzXCIgOiBudWxsLFxuXHRcdFx0d2FsID8gXCJ3YWxcIiA6IG51bGxcblx0XHRdLmZpbHRlcihCb29sZWFuKS5qb2luKFwifFwiKTtcblx0XHRjb25zdCBmb3JNZWRpYXR5cGUgPSAoX3RoaXMkaGVhZGVycyRnZXQgPSB0aGlzLmhlYWRlcnMuZ2V0KFwiQWNjZXB0XCIpKSAhPT0gbnVsbCAmJiBfdGhpcyRoZWFkZXJzJGdldCAhPT0gdm9pZCAwID8gX3RoaXMkaGVhZGVycyRnZXQgOiBcImFwcGxpY2F0aW9uL2pzb25cIjtcblx0XHR0aGlzLmhlYWRlcnMuc2V0KFwiQWNjZXB0XCIsIGBhcHBsaWNhdGlvbi92bmQucGdyc3QucGxhbiske2Zvcm1hdH07IGZvcj1cIiR7Zm9yTWVkaWF0eXBlfVwiOyBvcHRpb25zPSR7b3B0aW9uc307YCk7XG5cdFx0aWYgKGZvcm1hdCA9PT0gXCJqc29uXCIpIHJldHVybiB0aGlzO1xuXHRcdGVsc2UgcmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogUm9sbGJhY2sgdGhlIHF1ZXJ5LlxuXHQqXG5cdCogYGRhdGFgIHdpbGwgc3RpbGwgYmUgcmV0dXJuZWQsIGJ1dCB0aGUgcXVlcnkgaXMgbm90IGNvbW1pdHRlZC5cblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqL1xuXHRyb2xsYmFjaygpIHtcblx0XHR0aGlzLmhlYWRlcnMuYXBwZW5kKFwiUHJlZmVyXCIsIFwidHg9cm9sbGJhY2tcIik7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogT3ZlcnJpZGUgdGhlIHR5cGUgb2YgdGhlIHJldHVybmVkIGBkYXRhYC5cblx0KlxuXHQqIEB0eXBlUGFyYW0gTmV3UmVzdWx0IC0gVGhlIG5ldyByZXN1bHQgdHlwZSB0byBvdmVycmlkZSB3aXRoXG5cdCogQGRlcHJlY2F0ZWQgVXNlIG92ZXJyaWRlVHlwZXM8eW91clR5cGUsIHsgbWVyZ2U6IGZhbHNlIH0+KCkgbWV0aG9kIGF0IHRoZSBlbmQgb2YgeW91ciBjYWxsIGNoYWluIGluc3RlYWRcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBtb2RpZmllcnNcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBEZXByZWNhdGVkOiB1c2Ugb3ZlcnJpZGVUeXBlcyBtZXRob2QgaW5zdGVhZFxuXHQqXG5cdCogQGV4YW1wbGUgT3ZlcnJpZGUgdHlwZSBvZiBzdWNjZXNzZnVsIHJlc3BvbnNlXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY291bnRyaWVzJylcblx0KiAgIC5zZWxlY3QoKVxuXHQqICAgLnJldHVybnM8QXJyYXk8TXlUeXBlPj4oKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBPdmVycmlkZSB0eXBlIG9mIHN1Y2Nlc3NmdWwgcmVzcG9uc2Vcblx0KiBgYGBqc1xuXHQqIGxldCB4OiB0eXBlb2YgZGF0YSAvLyBNeVR5cGVbXVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgT3ZlcnJpZGUgdHlwZSBvZiBvYmplY3QgcmVzcG9uc2Vcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdjb3VudHJpZXMnKVxuXHQqICAgLnNlbGVjdCgpXG5cdCogICAubWF5YmVTaW5nbGUoKVxuXHQqICAgLnJldHVybnM8TXlUeXBlPigpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIE92ZXJyaWRlIHR5cGUgb2Ygb2JqZWN0IHJlc3BvbnNlXG5cdCogYGBganNcblx0KiBsZXQgeDogdHlwZW9mIGRhdGEgLy8gTXlUeXBlIHwgbnVsbFxuXHQqIGBgYFxuXHQqL1xuXHRyZXR1cm5zKCkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdC8qKlxuXHQqIFNldCB0aGUgbWF4aW11bSBudW1iZXIgb2Ygcm93cyB0aGF0IGNhbiBiZSBhZmZlY3RlZCBieSB0aGUgcXVlcnkuXG5cdCogT25seSBhdmFpbGFibGUgaW4gUG9zdGdSRVNUIHYxMysgYW5kIG9ubHkgd29ya3Mgd2l0aCBQQVRDSCBhbmQgREVMRVRFIG1ldGhvZHMuXG5cdCpcblx0KiBAcGFyYW0gdmFsdWUgLSBUaGUgbWF4aW11bSBudW1iZXIgb2Ygcm93cyB0aGF0IGNhbiBiZSBhZmZlY3RlZFxuXHQqXG5cdCogQGNhdGVnb3J5IERhdGFiYXNlXG5cdCovXG5cdG1heEFmZmVjdGVkKHZhbHVlKSB7XG5cdFx0dGhpcy5oZWFkZXJzLmFwcGVuZChcIlByZWZlclwiLCBcImhhbmRsaW5nPXN0cmljdFwiKTtcblx0XHR0aGlzLmhlYWRlcnMuYXBwZW5kKFwiUHJlZmVyXCIsIGBtYXgtYWZmZWN0ZWQ9JHt2YWx1ZX1gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL1Bvc3RncmVzdEZpbHRlckJ1aWxkZXIudHNcbmNvbnN0IFBvc3RncmVzdFJlc2VydmVkQ2hhcnNSZWdleHAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFJlZ0V4cChcIlssKCldXCIpO1xudmFyIFBvc3RncmVzdEZpbHRlckJ1aWxkZXIgPSBjbGFzcyBleHRlbmRzIFBvc3RncmVzdFRyYW5zZm9ybUJ1aWxkZXIge1xuXHQvKipcblx0KiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgYGNvbHVtbmAgaXMgZXF1YWwgdG8gYHZhbHVlYC5cblx0KlxuXHQqIFRvIGNoZWNrIGlmIHRoZSB2YWx1ZSBvZiBgY29sdW1uYCBpcyBOVUxMLCB5b3Ugc2hvdWxkIHVzZSBgLmlzKClgIGluc3RlYWQuXG5cdCpcblx0KiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cblx0KiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gZmlsdGVyIHdpdGhcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBmaWx0ZXJzXG5cdCpcblx0KiBAZXhhbXBsZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY2hhcmFjdGVycycpXG5cdCogICAuc2VsZWN0KClcblx0KiAgIC5lcSgnbmFtZScsICdMZWlhJylcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY2hhcmFjdGVycyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBjaGFyYWN0ZXJzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnTHVrZScpLFxuXHQqICAgKDIsICdMZWlhJyksXG5cdCogICAoMywgJ0hhbicpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFtcblx0KiAgICAge1xuXHQqICAgICAgIFwiaWRcIjogMixcblx0KiAgICAgICBcIm5hbWVcIjogXCJMZWlhXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCovXG5cdGVxKGNvbHVtbiwgdmFsdWUpIHtcblx0XHR0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGVxLiR7dmFsdWV9YCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIGlzIG5vdCBlcXVhbCB0byBgdmFsdWVgLlxuXHQqXG5cdCogQHBhcmFtIGNvbHVtbiAtIFRoZSBjb2x1bW4gdG8gZmlsdGVyIG9uXG5cdCogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbHRlciB3aXRoXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgZmlsdGVyc1xuXHQqXG5cdCogQGV4YW1wbGUgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2NoYXJhY3RlcnMnKVxuXHQqICAgLnNlbGVjdCgpXG5cdCogICAubmVxKCduYW1lJywgJ0xlaWEnKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBjaGFyYWN0ZXJzIChpZCBpbnQ4IHByaW1hcnkga2V5LCBuYW1lIHRleHQpO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIGNoYXJhY3RlcnMgKGlkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdMdWtlJyksXG5cdCogICAoMiwgJ0xlaWEnKSxcblx0KiAgICgzLCAnSGFuJyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJpZFwiOiAxLFxuXHQqICAgICAgIFwibmFtZVwiOiBcIkx1a2VcIlxuXHQqICAgICB9LFxuXHQqICAgICB7XG5cdCogICAgICAgXCJpZFwiOiAzLFxuXHQqICAgICAgIFwibmFtZVwiOiBcIkhhblwiXG5cdCogICAgIH1cblx0KiAgIF0sXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqL1xuXHRuZXEoY29sdW1uLCB2YWx1ZSkge1xuXHRcdHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgbmVxLiR7dmFsdWV9YCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIGlzIGdyZWF0ZXIgdGhhbiBgdmFsdWVgLlxuXHQqXG5cdCogQHBhcmFtIGNvbHVtbiAtIFRoZSBjb2x1bW4gdG8gZmlsdGVyIG9uXG5cdCogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbHRlciB3aXRoXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgZmlsdGVyc1xuXHQqXG5cdCogQGV4YW1wbGVEZXNjcmlwdGlvbiBXaXRoIGBzZWxlY3QoKWBcblx0KiBXaGVuIHVzaW5nIFtyZXNlcnZlZCB3b3Jkc10oaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3NxbC1rZXl3b3Jkcy1hcHBlbmRpeC5odG1sKSBmb3IgY29sdW1uIG5hbWVzIHlvdSBuZWVkXG5cdCogdG8gYWRkIGRvdWJsZSBxdW90ZXMgZS5nLiBgLmd0KCdcIm9yZGVyXCInLCAyKWBcblx0KlxuXHQqIEBleGFtcGxlIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdjaGFyYWN0ZXJzJylcblx0KiAgIC5zZWxlY3QoKVxuXHQqICAgLmd0KCdpZCcsIDIpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIGNoYXJhY3RlcnMgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgY2hhcmFjdGVycyAoaWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ0x1a2UnKSxcblx0KiAgICgyLCAnTGVpYScpLFxuXHQqICAgKDMsICdIYW4nKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcImlkXCI6IDMsXG5cdCogICAgICAgXCJuYW1lXCI6IFwiSGFuXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCovXG5cdGd0KGNvbHVtbiwgdmFsdWUpIHtcblx0XHR0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGd0LiR7dmFsdWV9YCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBgdmFsdWVgLlxuXHQqXG5cdCogQHBhcmFtIGNvbHVtbiAtIFRoZSBjb2x1bW4gdG8gZmlsdGVyIG9uXG5cdCogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbHRlciB3aXRoXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgZmlsdGVyc1xuXHQqXG5cdCogQGV4YW1wbGUgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2NoYXJhY3RlcnMnKVxuXHQqICAgLnNlbGVjdCgpXG5cdCogICAuZ3RlKCdpZCcsIDIpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIGNoYXJhY3RlcnMgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgY2hhcmFjdGVycyAoaWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ0x1a2UnKSxcblx0KiAgICgyLCAnTGVpYScpLFxuXHQqICAgKDMsICdIYW4nKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcImlkXCI6IDIsXG5cdCogICAgICAgXCJuYW1lXCI6IFwiTGVpYVwiXG5cdCogICAgIH0sXG5cdCogICAgIHtcblx0KiAgICAgICBcImlkXCI6IDMsXG5cdCogICAgICAgXCJuYW1lXCI6IFwiSGFuXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCovXG5cdGd0ZShjb2x1bW4sIHZhbHVlKSB7XG5cdFx0dGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBndGUuJHt2YWx1ZX1gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgYGNvbHVtbmAgaXMgbGVzcyB0aGFuIGB2YWx1ZWAuXG5cdCpcblx0KiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cblx0KiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gZmlsdGVyIHdpdGhcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBmaWx0ZXJzXG5cdCpcblx0KiBAZXhhbXBsZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY2hhcmFjdGVycycpXG5cdCogICAuc2VsZWN0KClcblx0KiAgIC5sdCgnaWQnLCAyKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBjaGFyYWN0ZXJzIChpZCBpbnQ4IHByaW1hcnkga2V5LCBuYW1lIHRleHQpO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIGNoYXJhY3RlcnMgKGlkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdMdWtlJyksXG5cdCogICAoMiwgJ0xlaWEnKSxcblx0KiAgICgzLCAnSGFuJyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJpZFwiOiAxLFxuXHQqICAgICAgIFwibmFtZVwiOiBcIkx1a2VcIlxuXHQqICAgICB9XG5cdCogICBdLFxuXHQqICAgXCJzdGF0dXNcIjogMjAwLFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqIH1cblx0KiBgYGBcblx0Ki9cblx0bHQoY29sdW1uLCB2YWx1ZSkge1xuXHRcdHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgbHQuJHt2YWx1ZX1gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgYGNvbHVtbmAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGB2YWx1ZWAuXG5cdCpcblx0KiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cblx0KiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gZmlsdGVyIHdpdGhcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBmaWx0ZXJzXG5cdCpcblx0KiBAZXhhbXBsZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY2hhcmFjdGVycycpXG5cdCogICAuc2VsZWN0KClcblx0KiAgIC5sdGUoJ2lkJywgMilcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY2hhcmFjdGVycyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBjaGFyYWN0ZXJzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnTHVrZScpLFxuXHQqICAgKDIsICdMZWlhJyksXG5cdCogICAoMywgJ0hhbicpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFtcblx0KiAgICAge1xuXHQqICAgICAgIFwiaWRcIjogMSxcblx0KiAgICAgICBcIm5hbWVcIjogXCJMdWtlXCJcblx0KiAgICAgfSxcblx0KiAgICAge1xuXHQqICAgICAgIFwiaWRcIjogMixcblx0KiAgICAgICBcIm5hbWVcIjogXCJMZWlhXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCovXG5cdGx0ZShjb2x1bW4sIHZhbHVlKSB7XG5cdFx0dGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBsdGUuJHt2YWx1ZX1gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgYGNvbHVtbmAgbWF0Y2hlcyBgcGF0dGVybmAgY2FzZS1zZW5zaXRpdmVseS5cblx0KlxuXHQqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxuXHQqIEBwYXJhbSBwYXR0ZXJuIC0gVGhlIHBhdHRlcm4gdG8gbWF0Y2ggd2l0aFxuXHQqXG5cdCogQGNhdGVnb3J5IERhdGFiYXNlXG5cdCogQHN1YmNhdGVnb3J5IFVzaW5nIGZpbHRlcnNcblx0KlxuXHQqIEBleGFtcGxlIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdjaGFyYWN0ZXJzJylcblx0KiAgIC5zZWxlY3QoKVxuXHQqICAgLmxpa2UoJ25hbWUnLCAnJUx1JScpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIGNoYXJhY3RlcnMgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgY2hhcmFjdGVycyAoaWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ0x1a2UnKSxcblx0KiAgICgyLCAnTGVpYScpLFxuXHQqICAgKDMsICdIYW4nKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcImlkXCI6IDEsXG5cdCogICAgICAgXCJuYW1lXCI6IFwiTHVrZVwiXG5cdCogICAgIH1cblx0KiAgIF0sXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqL1xuXHRsaWtlKGNvbHVtbiwgcGF0dGVybikge1xuXHRcdHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgbGlrZS4ke3BhdHRlcm59YCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIG1hdGNoZXMgYWxsIG9mIGBwYXR0ZXJuc2AgY2FzZS1zZW5zaXRpdmVseS5cblx0KlxuXHQqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxuXHQqIEBwYXJhbSBwYXR0ZXJucyAtIFRoZSBwYXR0ZXJucyB0byBtYXRjaCB3aXRoXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgZmlsdGVyc1xuXHQqL1xuXHRsaWtlQWxsT2YoY29sdW1uLCBwYXR0ZXJucykge1xuXHRcdHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgbGlrZShhbGwpLnske3BhdHRlcm5zLmpvaW4oXCIsXCIpfX1gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgYGNvbHVtbmAgbWF0Y2hlcyBhbnkgb2YgYHBhdHRlcm5zYCBjYXNlLXNlbnNpdGl2ZWx5LlxuXHQqXG5cdCogQHBhcmFtIGNvbHVtbiAtIFRoZSBjb2x1bW4gdG8gZmlsdGVyIG9uXG5cdCogQHBhcmFtIHBhdHRlcm5zIC0gVGhlIHBhdHRlcm5zIHRvIG1hdGNoIHdpdGhcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBmaWx0ZXJzXG5cdCovXG5cdGxpa2VBbnlPZihjb2x1bW4sIHBhdHRlcm5zKSB7XG5cdFx0dGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBsaWtlKGFueSkueyR7cGF0dGVybnMuam9pbihcIixcIil9fWApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdC8qKlxuXHQqIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBgY29sdW1uYCBtYXRjaGVzIGBwYXR0ZXJuYCBjYXNlLWluc2Vuc2l0aXZlbHkuXG5cdCpcblx0KiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cblx0KiBAcGFyYW0gcGF0dGVybiAtIFRoZSBwYXR0ZXJuIHRvIG1hdGNoIHdpdGhcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBmaWx0ZXJzXG5cdCpcblx0KiBAZXhhbXBsZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY2hhcmFjdGVycycpXG5cdCogICAuc2VsZWN0KClcblx0KiAgIC5pbGlrZSgnbmFtZScsICclbHUlJylcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY2hhcmFjdGVycyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBjaGFyYWN0ZXJzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnTHVrZScpLFxuXHQqICAgKDIsICdMZWlhJyksXG5cdCogICAoMywgJ0hhbicpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFtcblx0KiAgICAge1xuXHQqICAgICAgIFwiaWRcIjogMSxcblx0KiAgICAgICBcIm5hbWVcIjogXCJMdWtlXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCovXG5cdGlsaWtlKGNvbHVtbiwgcGF0dGVybikge1xuXHRcdHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgaWxpa2UuJHtwYXR0ZXJufWApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdC8qKlxuXHQqIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBgY29sdW1uYCBtYXRjaGVzIGFsbCBvZiBgcGF0dGVybnNgIGNhc2UtaW5zZW5zaXRpdmVseS5cblx0KlxuXHQqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxuXHQqIEBwYXJhbSBwYXR0ZXJucyAtIFRoZSBwYXR0ZXJucyB0byBtYXRjaCB3aXRoXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgZmlsdGVyc1xuXHQqL1xuXHRpbGlrZUFsbE9mKGNvbHVtbiwgcGF0dGVybnMpIHtcblx0XHR0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGlsaWtlKGFsbCkueyR7cGF0dGVybnMuam9pbihcIixcIil9fWApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdC8qKlxuXHQqIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBgY29sdW1uYCBtYXRjaGVzIGFueSBvZiBgcGF0dGVybnNgIGNhc2UtaW5zZW5zaXRpdmVseS5cblx0KlxuXHQqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxuXHQqIEBwYXJhbSBwYXR0ZXJucyAtIFRoZSBwYXR0ZXJucyB0byBtYXRjaCB3aXRoXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgZmlsdGVyc1xuXHQqL1xuXHRpbGlrZUFueU9mKGNvbHVtbiwgcGF0dGVybnMpIHtcblx0XHR0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGlsaWtlKGFueSkueyR7cGF0dGVybnMuam9pbihcIixcIil9fWApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdC8qKlxuXHQqIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBgY29sdW1uYCBtYXRjaGVzIHRoZSBQb3N0Z3JlU1FMIHJlZ2V4IGBwYXR0ZXJuYFxuXHQqIGNhc2Utc2Vuc2l0aXZlbHkgKHVzaW5nIHRoZSBgfmAgb3BlcmF0b3IpLlxuXHQqXG5cdCogQHBhcmFtIGNvbHVtbiAtIFRoZSBjb2x1bW4gdG8gZmlsdGVyIG9uXG5cdCogQHBhcmFtIHBhdHRlcm4gLSBUaGUgUG9zdGdyZVNRTCByZWd1bGFyIGV4cHJlc3Npb24gcGF0dGVybiB0byBtYXRjaCB3aXRoXG5cdCovXG5cdHJlZ2V4TWF0Y2goY29sdW1uLCBwYXR0ZXJuKSB7XG5cdFx0dGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBtYXRjaC4ke3BhdHRlcm59YCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIG1hdGNoZXMgdGhlIFBvc3RncmVTUUwgcmVnZXggYHBhdHRlcm5gXG5cdCogY2FzZS1pbnNlbnNpdGl2ZWx5ICh1c2luZyB0aGUgYH4qYCBvcGVyYXRvcikuXG5cdCpcblx0KiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cblx0KiBAcGFyYW0gcGF0dGVybiAtIFRoZSBQb3N0Z3JlU1FMIHJlZ3VsYXIgZXhwcmVzc2lvbiBwYXR0ZXJuIHRvIG1hdGNoIHdpdGhcblx0Ki9cblx0cmVnZXhJTWF0Y2goY29sdW1uLCBwYXR0ZXJuKSB7XG5cdFx0dGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBpbWF0Y2guJHtwYXR0ZXJufWApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdC8qKlxuXHQqIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBgY29sdW1uYCBJUyBgdmFsdWVgLlxuXHQqXG5cdCogRm9yIG5vbi1ib29sZWFuIGNvbHVtbnMsIHRoaXMgaXMgb25seSByZWxldmFudCBmb3IgY2hlY2tpbmcgaWYgdGhlIHZhbHVlIG9mXG5cdCogYGNvbHVtbmAgaXMgTlVMTCBieSBzZXR0aW5nIGB2YWx1ZWAgdG8gYG51bGxgLlxuXHQqXG5cdCogRm9yIGJvb2xlYW4gY29sdW1ucywgeW91IGNhbiBhbHNvIHNldCBgdmFsdWVgIHRvIGB0cnVlYCBvciBgZmFsc2VgIGFuZCBpdFxuXHQqIHdpbGwgYmVoYXZlIHRoZSBzYW1lIHdheSBhcyBgLmVxKClgLlxuXHQqXG5cdCogQHBhcmFtIGNvbHVtbiAtIFRoZSBjb2x1bW4gdG8gZmlsdGVyIG9uXG5cdCogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGZpbHRlciB3aXRoXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgZmlsdGVyc1xuXHQqXG5cdCogQGV4YW1wbGVEZXNjcmlwdGlvbiBDaGVja2luZyBmb3IgbnVsbG5lc3MsIHRydWUgb3IgZmFsc2Vcblx0KiBVc2luZyB0aGUgYGVxKClgIGZpbHRlciBkb2Vzbid0IHdvcmsgd2hlbiBmaWx0ZXJpbmcgZm9yIGBudWxsYC5cblx0KlxuXHQqIEluc3RlYWQsIHlvdSBuZWVkIHRvIHVzZSBgaXMoKWAuXG5cdCpcblx0KiBAZXhhbXBsZSBDaGVja2luZyBmb3IgbnVsbG5lc3MsIHRydWUgb3IgZmFsc2Vcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY291bnRyaWVzJylcblx0KiAgIC5zZWxlY3QoKVxuXHQqICAgLmlzKCduYW1lJywgbnVsbClcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIENoZWNraW5nIGZvciBudWxsbmVzcywgdHJ1ZSBvciBmYWxzZVxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY291bnRyaWVzIChpZCBpbnQ4IHByaW1hcnkga2V5LCBuYW1lIHRleHQpO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIGNvdW50cmllcyAoaWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ251bGwnKSxcblx0KiAgICgyLCBudWxsKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgQ2hlY2tpbmcgZm9yIG51bGxuZXNzLCB0cnVlIG9yIGZhbHNlXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcImlkXCI6IDIsXG5cdCogICAgICAgXCJuYW1lXCI6IFwibnVsbFwiXG5cdCogICAgIH1cblx0KiAgIF0sXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqL1xuXHRpcyhjb2x1bW4sIHZhbHVlKSB7XG5cdFx0dGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBpcy4ke3ZhbHVlfWApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdC8qKlxuXHQqIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBgY29sdW1uYCBJUyBESVNUSU5DVCBGUk9NIGB2YWx1ZWAuXG5cdCpcblx0KiBVbmxpa2UgYC5uZXEoKWAsIHRoaXMgdHJlYXRzIGBOVUxMYCBhcyBhIGNvbXBhcmFibGUgdmFsdWUuIFR3byBgTlVMTGAgdmFsdWVzXG5cdCogYXJlIGNvbnNpZGVyZWQgZXF1YWwgKG5vdCBkaXN0aW5jdCksIGFuZCBjb21wYXJpbmcgYE5VTExgIHdpdGggYW55IG5vbi1OVUxMXG5cdCogdmFsdWUgcmV0dXJucyB0cnVlIChkaXN0aW5jdCkuXG5cdCpcblx0KiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cblx0KiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gZmlsdGVyIHdpdGhcblx0Ki9cblx0aXNEaXN0aW5jdChjb2x1bW4sIHZhbHVlKSB7XG5cdFx0dGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBpc2Rpc3RpbmN0LiR7dmFsdWV9YCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIGlzIGluY2x1ZGVkIGluIHRoZSBgdmFsdWVzYCBhcnJheS5cblx0KlxuXHQqIEBwYXJhbSBjb2x1bW4gLSBUaGUgY29sdW1uIHRvIGZpbHRlciBvblxuXHQqIEBwYXJhbSB2YWx1ZXMgLSBUaGUgdmFsdWVzIGFycmF5IHRvIGZpbHRlciB3aXRoXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgZmlsdGVyc1xuXHQqXG5cdCogQGV4YW1wbGUgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2NoYXJhY3RlcnMnKVxuXHQqICAgLnNlbGVjdCgpXG5cdCogICAuaW4oJ25hbWUnLCBbJ0xlaWEnLCAnSGFuJ10pXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIGNoYXJhY3RlcnMgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgY2hhcmFjdGVycyAoaWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ0x1a2UnKSxcblx0KiAgICgyLCAnTGVpYScpLFxuXHQqICAgKDMsICdIYW4nKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcImlkXCI6IDIsXG5cdCogICAgICAgXCJuYW1lXCI6IFwiTGVpYVwiXG5cdCogICAgIH0sXG5cdCogICAgIHtcblx0KiAgICAgICBcImlkXCI6IDMsXG5cdCogICAgICAgXCJuYW1lXCI6IFwiSGFuXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCovXG5cdGluKGNvbHVtbiwgdmFsdWVzKSB7XG5cdFx0Y29uc3QgY2xlYW5lZFZhbHVlcyA9IEFycmF5LmZyb20obmV3IFNldCh2YWx1ZXMpKS5tYXAoKHMpID0+IHtcblx0XHRcdGlmICh0eXBlb2YgcyA9PT0gXCJzdHJpbmdcIiAmJiBQb3N0Z3Jlc3RSZXNlcnZlZENoYXJzUmVnZXhwLnRlc3QocykpIHJldHVybiBgXCIke3N9XCJgO1xuXHRcdFx0ZWxzZSByZXR1cm4gYCR7c31gO1xuXHRcdH0pLmpvaW4oXCIsXCIpO1xuXHRcdHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgaW4uKCR7Y2xlYW5lZFZhbHVlc30pYCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIGlzIE5PVCBpbmNsdWRlZCBpbiB0aGUgYHZhbHVlc2AgYXJyYXkuXG5cdCpcblx0KiBAcGFyYW0gY29sdW1uIC0gVGhlIGNvbHVtbiB0byBmaWx0ZXIgb25cblx0KiBAcGFyYW0gdmFsdWVzIC0gVGhlIHZhbHVlcyBhcnJheSB0byBmaWx0ZXIgd2l0aFxuXHQqL1xuXHRub3RJbihjb2x1bW4sIHZhbHVlcykge1xuXHRcdGNvbnN0IGNsZWFuZWRWYWx1ZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQodmFsdWVzKSkubWFwKChzKSA9PiB7XG5cdFx0XHRpZiAodHlwZW9mIHMgPT09IFwic3RyaW5nXCIgJiYgUG9zdGdyZXN0UmVzZXJ2ZWRDaGFyc1JlZ2V4cC50ZXN0KHMpKSByZXR1cm4gYFwiJHtzfVwiYDtcblx0XHRcdGVsc2UgcmV0dXJuIGAke3N9YDtcblx0XHR9KS5qb2luKFwiLFwiKTtcblx0XHR0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYG5vdC5pbi4oJHtjbGVhbmVkVmFsdWVzfSlgKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBPbmx5IHJlbGV2YW50IGZvciBqc29uYiwgYXJyYXksIGFuZCByYW5nZSBjb2x1bW5zLiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmVcblx0KiBgY29sdW1uYCBjb250YWlucyBldmVyeSBlbGVtZW50IGFwcGVhcmluZyBpbiBgdmFsdWVgLlxuXHQqXG5cdCogQHBhcmFtIGNvbHVtbiAtIFRoZSBqc29uYiwgYXJyYXksIG9yIHJhbmdlIGNvbHVtbiB0byBmaWx0ZXIgb25cblx0KiBAcGFyYW0gdmFsdWUgLSBUaGUganNvbmIsIGFycmF5LCBvciByYW5nZSB2YWx1ZSB0byBmaWx0ZXIgd2l0aFxuXHQqXG5cdCogQGNhdGVnb3J5IERhdGFiYXNlXG5cdCogQHN1YmNhdGVnb3J5IFVzaW5nIGZpbHRlcnNcblx0KlxuXHQqIEBleGFtcGxlIE9uIGFycmF5IGNvbHVtbnNcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnaXNzdWVzJylcblx0KiAgIC5zZWxlY3QoKVxuXHQqICAgLmNvbnRhaW5zKCd0YWdzJywgWydpczpvcGVuJywgJ3ByaW9yaXR5OmxvdyddKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgT24gYXJyYXkgY29sdW1uc1xuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgaXNzdWVzIChcblx0KiAgICAgaWQgaW50OCBwcmltYXJ5IGtleSxcblx0KiAgICAgdGl0bGUgdGV4dCxcblx0KiAgICAgdGFncyB0ZXh0W11cblx0KiAgICk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgaXNzdWVzIChpZCwgdGl0bGUsIHRhZ3MpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ0NhY2hlIGludmFsaWRhdGlvbiBpcyBub3Qgd29ya2luZycsIGFycmF5WydpczpvcGVuJywgJ3NldmVyaXR5OmhpZ2gnLCAncHJpb3JpdHk6bG93J10pLFxuXHQqICAgKDIsICdVc2UgYmV0dGVyIG5hbWVzJywgYXJyYXlbJ2lzOm9wZW4nLCAnc2V2ZXJpdHk6bG93JywgJ3ByaW9yaXR5Om1lZGl1bSddKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgT24gYXJyYXkgY29sdW1uc1xuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJ0aXRsZVwiOiBcIkNhY2hlIGludmFsaWRhdGlvbiBpcyBub3Qgd29ya2luZ1wiXG5cdCogICAgIH1cblx0KiAgIF0sXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVEZXNjcmlwdGlvbiBPbiByYW5nZSBjb2x1bW5zXG5cdCogUG9zdGdyZXMgc3VwcG9ydHMgYSBudW1iZXIgb2YgW3JhbmdlXG5cdCogdHlwZXNdKGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvY3VycmVudC9yYW5nZXR5cGVzLmh0bWwpLiBZb3Vcblx0KiBjYW4gZmlsdGVyIG9uIHJhbmdlIGNvbHVtbnMgdXNpbmcgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiByYW5nZVxuXHQqIHZhbHVlcy5cblx0KlxuXHQqIEBleGFtcGxlIE9uIHJhbmdlIGNvbHVtbnNcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgncmVzZXJ2YXRpb25zJylcblx0KiAgIC5zZWxlY3QoKVxuXHQqICAgLmNvbnRhaW5zKCdkdXJpbmcnLCAnWzIwMDAtMDEtMDEgMTM6MDAsIDIwMDAtMDEtMDEgMTM6MzApJylcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIE9uIHJhbmdlIGNvbHVtbnNcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIHJlc2VydmF0aW9ucyAoXG5cdCogICAgIGlkIGludDggcHJpbWFyeSBrZXksXG5cdCogICAgIHJvb21fbmFtZSB0ZXh0LFxuXHQqICAgICBkdXJpbmcgdHNyYW5nZVxuXHQqICAgKTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICByZXNlcnZhdGlvbnMgKGlkLCByb29tX25hbWUsIGR1cmluZylcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnRW1lcmFsZCcsICdbMjAwMC0wMS0wMSAxMzowMCwgMjAwMC0wMS0wMSAxNTowMCknKSxcblx0KiAgICgyLCAnVG9wYXonLCAnWzIwMDAtMDEtMDIgMDk6MDAsIDIwMDAtMDEtMDIgMTA6MDApJyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIE9uIHJhbmdlIGNvbHVtbnNcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFtcblx0KiAgICAge1xuXHQqICAgICAgIFwiaWRcIjogMSxcblx0KiAgICAgICBcInJvb21fbmFtZVwiOiBcIkVtZXJhbGRcIixcblx0KiAgICAgICBcImR1cmluZ1wiOiBcIltcXFwiMjAwMC0wMS0wMSAxMzowMDowMFxcXCIsXFxcIjIwMDAtMDEtMDEgMTU6MDA6MDBcXFwiKVwiXG5cdCogICAgIH1cblx0KiAgIF0sXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgT24gYGpzb25iYCBjb2x1bW5zXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ3VzZXJzJylcblx0KiAgIC5zZWxlY3QoJ25hbWUnKVxuXHQqICAgLmNvbnRhaW5zKCdhZGRyZXNzJywgeyBwb3N0Y29kZTogOTAyMTAgfSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIE9uIGBqc29uYmAgY29sdW1uc1xuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgdXNlcnMgKFxuXHQqICAgICBpZCBpbnQ4IHByaW1hcnkga2V5LFxuXHQqICAgICBuYW1lIHRleHQsXG5cdCogICAgIGFkZHJlc3MganNvbmJcblx0KiAgICk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgdXNlcnMgKGlkLCBuYW1lLCBhZGRyZXNzKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdNaWNoYWVsJywgJ3sgXCJwb3N0Y29kZVwiOiA5MDIxMCwgXCJzdHJlZXRcIjogXCJNZWxyb3NlIFBsYWNlXCIgfScpLFxuXHQqICAgKDIsICdKYW5lJywgJ3t9Jyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIE9uIGBqc29uYmAgY29sdW1uc1xuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJuYW1lXCI6IFwiTWljaGFlbFwiXG5cdCogICAgIH1cblx0KiAgIF0sXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqL1xuXHRjb250YWlucyhjb2x1bW4sIHZhbHVlKSB7XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBjcy4ke3ZhbHVlfWApO1xuXHRcdGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGNzLnske3ZhbHVlLmpvaW4oXCIsXCIpfX1gKTtcblx0XHRlbHNlIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgY3MuJHtKU09OLnN0cmluZ2lmeSh2YWx1ZSl9YCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogT25seSByZWxldmFudCBmb3IganNvbmIsIGFycmF5LCBhbmQgcmFuZ2UgY29sdW1ucy4gTWF0Y2ggb25seSByb3dzIHdoZXJlXG5cdCogZXZlcnkgZWxlbWVudCBhcHBlYXJpbmcgaW4gYGNvbHVtbmAgaXMgY29udGFpbmVkIGJ5IGB2YWx1ZWAuXG5cdCpcblx0KiBAcGFyYW0gY29sdW1uIC0gVGhlIGpzb25iLCBhcnJheSwgb3IgcmFuZ2UgY29sdW1uIHRvIGZpbHRlciBvblxuXHQqIEBwYXJhbSB2YWx1ZSAtIFRoZSBqc29uYiwgYXJyYXksIG9yIHJhbmdlIHZhbHVlIHRvIGZpbHRlciB3aXRoXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgZmlsdGVyc1xuXHQqXG5cdCogQGV4YW1wbGUgT24gYXJyYXkgY29sdW1uc1xuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdjbGFzc2VzJylcblx0KiAgIC5zZWxlY3QoJ25hbWUnKVxuXHQqICAgLmNvbnRhaW5lZEJ5KCdkYXlzJywgWydtb25kYXknLCAndHVlc2RheScsICd3ZWRuZXNkYXknLCAnZnJpZGF5J10pXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBPbiBhcnJheSBjb2x1bW5zXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBjbGFzc2VzIChcblx0KiAgICAgaWQgaW50OCBwcmltYXJ5IGtleSxcblx0KiAgICAgbmFtZSB0ZXh0LFxuXHQqICAgICBkYXlzIHRleHRbXVxuXHQqICAgKTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBjbGFzc2VzIChpZCwgbmFtZSwgZGF5cylcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnQ2hlbWlzdHJ5JywgYXJyYXlbJ21vbmRheScsICdmcmlkYXknXSksXG5cdCogICAoMiwgJ0hpc3RvcnknLCBhcnJheVsnbW9uZGF5JywgJ3dlZG5lc2RheScsICd0aHVyc2RheSddKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgT24gYXJyYXkgY29sdW1uc1xuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJuYW1lXCI6IFwiQ2hlbWlzdHJ5XCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZURlc2NyaXB0aW9uIE9uIHJhbmdlIGNvbHVtbnNcblx0KiBQb3N0Z3JlcyBzdXBwb3J0cyBhIG51bWJlciBvZiBbcmFuZ2Vcblx0KiB0eXBlc10oaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3JhbmdldHlwZXMuaHRtbCkuIFlvdVxuXHQqIGNhbiBmaWx0ZXIgb24gcmFuZ2UgY29sdW1ucyB1c2luZyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHJhbmdlXG5cdCogdmFsdWVzLlxuXHQqXG5cdCogQGV4YW1wbGUgT24gcmFuZ2UgY29sdW1uc1xuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdyZXNlcnZhdGlvbnMnKVxuXHQqICAgLnNlbGVjdCgpXG5cdCogICAuY29udGFpbmVkQnkoJ2R1cmluZycsICdbMjAwMC0wMS0wMSAwMDowMCwgMjAwMC0wMS0wMSAyMzo1OSknKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgT24gcmFuZ2UgY29sdW1uc1xuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgcmVzZXJ2YXRpb25zIChcblx0KiAgICAgaWQgaW50OCBwcmltYXJ5IGtleSxcblx0KiAgICAgcm9vbV9uYW1lIHRleHQsXG5cdCogICAgIGR1cmluZyB0c3JhbmdlXG5cdCogICApO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIHJlc2VydmF0aW9ucyAoaWQsIHJvb21fbmFtZSwgZHVyaW5nKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdFbWVyYWxkJywgJ1syMDAwLTAxLTAxIDEzOjAwLCAyMDAwLTAxLTAxIDE1OjAwKScpLFxuXHQqICAgKDIsICdUb3BheicsICdbMjAwMC0wMS0wMiAwOTowMCwgMjAwMC0wMS0wMiAxMDowMCknKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgT24gcmFuZ2UgY29sdW1uc1xuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJpZFwiOiAxLFxuXHQqICAgICAgIFwicm9vbV9uYW1lXCI6IFwiRW1lcmFsZFwiLFxuXHQqICAgICAgIFwiZHVyaW5nXCI6IFwiW1xcXCIyMDAwLTAxLTAxIDEzOjAwOjAwXFxcIixcXFwiMjAwMC0wMS0wMSAxNTowMDowMFxcXCIpXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZSBPbiBganNvbmJgIGNvbHVtbnNcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgndXNlcnMnKVxuXHQqICAgLnNlbGVjdCgnbmFtZScpXG5cdCogICAuY29udGFpbmVkQnkoJ2FkZHJlc3MnLCB7fSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIE9uIGBqc29uYmAgY29sdW1uc1xuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgdXNlcnMgKFxuXHQqICAgICBpZCBpbnQ4IHByaW1hcnkga2V5LFxuXHQqICAgICBuYW1lIHRleHQsXG5cdCogICAgIGFkZHJlc3MganNvbmJcblx0KiAgICk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgdXNlcnMgKGlkLCBuYW1lLCBhZGRyZXNzKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdNaWNoYWVsJywgJ3sgXCJwb3N0Y29kZVwiOiA5MDIxMCwgXCJzdHJlZXRcIjogXCJNZWxyb3NlIFBsYWNlXCIgfScpLFxuXHQqICAgKDIsICdKYW5lJywgJ3t9Jyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIE9uIGBqc29uYmAgY29sdW1uc1xuXHQqIGBgYGpzb25cblx0KiAgIHtcblx0KiAgICAgXCJkYXRhXCI6IFtcblx0KiAgICAgICB7XG5cdCogICAgICAgICBcIm5hbWVcIjogXCJKYW5lXCJcblx0KiAgICAgICB9XG5cdCogICAgIF0sXG5cdCogICAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqICAgfVxuXHQqXG5cdCogYGBgXG5cdCovXG5cdGNvbnRhaW5lZEJ5KGNvbHVtbiwgdmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYGNkLiR7dmFsdWV9YCk7XG5cdFx0ZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgY2QueyR7dmFsdWUuam9pbihcIixcIil9fWApO1xuXHRcdGVsc2UgdGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBjZC4ke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBPbmx5IHJlbGV2YW50IGZvciByYW5nZSBjb2x1bW5zLiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgZXZlcnkgZWxlbWVudCBpblxuXHQqIGBjb2x1bW5gIGlzIGdyZWF0ZXIgdGhhbiBhbnkgZWxlbWVudCBpbiBgcmFuZ2VgLlxuXHQqXG5cdCogQHBhcmFtIGNvbHVtbiAtIFRoZSByYW5nZSBjb2x1bW4gdG8gZmlsdGVyIG9uXG5cdCogQHBhcmFtIHJhbmdlIC0gVGhlIHJhbmdlIHRvIGZpbHRlciB3aXRoXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgZmlsdGVyc1xuXHQqXG5cdCogQGV4YW1wbGVEZXNjcmlwdGlvbiBXaXRoIGBzZWxlY3QoKWBcblx0KiBQb3N0Z3JlcyBzdXBwb3J0cyBhIG51bWJlciBvZiBbcmFuZ2Vcblx0KiB0eXBlc10oaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3JhbmdldHlwZXMuaHRtbCkuIFlvdVxuXHQqIGNhbiBmaWx0ZXIgb24gcmFuZ2UgY29sdW1ucyB1c2luZyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHJhbmdlXG5cdCogdmFsdWVzLlxuXHQqXG5cdCogQGV4YW1wbGUgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ3Jlc2VydmF0aW9ucycpXG5cdCogICAuc2VsZWN0KClcblx0KiAgIC5yYW5nZUd0KCdkdXJpbmcnLCAnWzIwMDAtMDEtMDIgMDg6MDAsIDIwMDAtMDEtMDIgMDk6MDApJylcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgcmVzZXJ2YXRpb25zIChcblx0KiAgICAgaWQgaW50OCBwcmltYXJ5IGtleSxcblx0KiAgICAgcm9vbV9uYW1lIHRleHQsXG5cdCogICAgIGR1cmluZyB0c3JhbmdlXG5cdCogICApO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIHJlc2VydmF0aW9ucyAoaWQsIHJvb21fbmFtZSwgZHVyaW5nKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdFbWVyYWxkJywgJ1syMDAwLTAxLTAxIDEzOjAwLCAyMDAwLTAxLTAxIDE1OjAwKScpLFxuXHQqICAgKDIsICdUb3BheicsICdbMjAwMC0wMS0wMiAwOTowMCwgMjAwMC0wMS0wMiAxMDowMCknKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBganNvblxuXHQqICAge1xuXHQqICAgICBcImRhdGFcIjogW1xuXHQqICAgICAgIHtcblx0KiAgICAgICAgIFwiaWRcIjogMixcblx0KiAgICAgICAgIFwicm9vbV9uYW1lXCI6IFwiVG9wYXpcIixcblx0KiAgICAgICAgIFwiZHVyaW5nXCI6IFwiW1xcXCIyMDAwLTAxLTAyIDA5OjAwOjAwXFxcIixcXFwiMjAwMC0wMS0wMiAxMDowMDowMFxcXCIpXCJcblx0KiAgICAgICB9XG5cdCogICAgIF0sXG5cdCogICAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqICAgfVxuXHQqXG5cdCogYGBgXG5cdCovXG5cdHJhbmdlR3QoY29sdW1uLCByYW5nZSkge1xuXHRcdHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgc3IuJHtyYW5nZX1gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBPbmx5IHJlbGV2YW50IGZvciByYW5nZSBjb2x1bW5zLiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgZXZlcnkgZWxlbWVudCBpblxuXHQqIGBjb2x1bW5gIGlzIGVpdGhlciBjb250YWluZWQgaW4gYHJhbmdlYCBvciBncmVhdGVyIHRoYW4gYW55IGVsZW1lbnQgaW5cblx0KiBgcmFuZ2VgLlxuXHQqXG5cdCogQHBhcmFtIGNvbHVtbiAtIFRoZSByYW5nZSBjb2x1bW4gdG8gZmlsdGVyIG9uXG5cdCogQHBhcmFtIHJhbmdlIC0gVGhlIHJhbmdlIHRvIGZpbHRlciB3aXRoXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgZmlsdGVyc1xuXHQqXG5cdCogQGV4YW1wbGVEZXNjcmlwdGlvbiBXaXRoIGBzZWxlY3QoKWBcblx0KiBQb3N0Z3JlcyBzdXBwb3J0cyBhIG51bWJlciBvZiBbcmFuZ2Vcblx0KiB0eXBlc10oaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3JhbmdldHlwZXMuaHRtbCkuIFlvdVxuXHQqIGNhbiBmaWx0ZXIgb24gcmFuZ2UgY29sdW1ucyB1c2luZyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHJhbmdlXG5cdCogdmFsdWVzLlxuXHQqXG5cdCogQGV4YW1wbGUgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ3Jlc2VydmF0aW9ucycpXG5cdCogICAuc2VsZWN0KClcblx0KiAgIC5yYW5nZUd0ZSgnZHVyaW5nJywgJ1syMDAwLTAxLTAyIDA4OjMwLCAyMDAwLTAxLTAyIDA5OjMwKScpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIHJlc2VydmF0aW9ucyAoXG5cdCogICAgIGlkIGludDggcHJpbWFyeSBrZXksXG5cdCogICAgIHJvb21fbmFtZSB0ZXh0LFxuXHQqICAgICBkdXJpbmcgdHNyYW5nZVxuXHQqICAgKTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICByZXNlcnZhdGlvbnMgKGlkLCByb29tX25hbWUsIGR1cmluZylcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnRW1lcmFsZCcsICdbMjAwMC0wMS0wMSAxMzowMCwgMjAwMC0wMS0wMSAxNTowMCknKSxcblx0KiAgICgyLCAnVG9wYXonLCAnWzIwMDAtMDEtMDIgMDk6MDAsIDIwMDAtMDEtMDIgMTA6MDApJyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYGpzb25cblx0KiAgIHtcblx0KiAgICAgXCJkYXRhXCI6IFtcblx0KiAgICAgICB7XG5cdCogICAgICAgICBcImlkXCI6IDIsXG5cdCogICAgICAgICBcInJvb21fbmFtZVwiOiBcIlRvcGF6XCIsXG5cdCogICAgICAgICBcImR1cmluZ1wiOiBcIltcXFwiMjAwMC0wMS0wMiAwOTowMDowMFxcXCIsXFxcIjIwMDAtMDEtMDIgMTA6MDA6MDBcXFwiKVwiXG5cdCogICAgICAgfVxuXHQqICAgICBdLFxuXHQqICAgICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiAgIH1cblx0KlxuXHQqIGBgYFxuXHQqL1xuXHRyYW5nZUd0ZShjb2x1bW4sIHJhbmdlKSB7XG5cdFx0dGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBueGwuJHtyYW5nZX1gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBPbmx5IHJlbGV2YW50IGZvciByYW5nZSBjb2x1bW5zLiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgZXZlcnkgZWxlbWVudCBpblxuXHQqIGBjb2x1bW5gIGlzIGxlc3MgdGhhbiBhbnkgZWxlbWVudCBpbiBgcmFuZ2VgLlxuXHQqXG5cdCogQHBhcmFtIGNvbHVtbiAtIFRoZSByYW5nZSBjb2x1bW4gdG8gZmlsdGVyIG9uXG5cdCogQHBhcmFtIHJhbmdlIC0gVGhlIHJhbmdlIHRvIGZpbHRlciB3aXRoXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgZmlsdGVyc1xuXHQqXG5cdCogQGV4YW1wbGVEZXNjcmlwdGlvbiBXaXRoIGBzZWxlY3QoKWBcblx0KiBQb3N0Z3JlcyBzdXBwb3J0cyBhIG51bWJlciBvZiBbcmFuZ2Vcblx0KiB0eXBlc10oaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3JhbmdldHlwZXMuaHRtbCkuIFlvdVxuXHQqIGNhbiBmaWx0ZXIgb24gcmFuZ2UgY29sdW1ucyB1c2luZyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHJhbmdlXG5cdCogdmFsdWVzLlxuXHQqXG5cdCogQGV4YW1wbGUgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ3Jlc2VydmF0aW9ucycpXG5cdCogICAuc2VsZWN0KClcblx0KiAgIC5yYW5nZUx0KCdkdXJpbmcnLCAnWzIwMDAtMDEtMDEgMTU6MDAsIDIwMDAtMDEtMDEgMTY6MDApJylcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgcmVzZXJ2YXRpb25zIChcblx0KiAgICAgaWQgaW50OCBwcmltYXJ5IGtleSxcblx0KiAgICAgcm9vbV9uYW1lIHRleHQsXG5cdCogICAgIGR1cmluZyB0c3JhbmdlXG5cdCogICApO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIHJlc2VydmF0aW9ucyAoaWQsIHJvb21fbmFtZSwgZHVyaW5nKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdFbWVyYWxkJywgJ1syMDAwLTAxLTAxIDEzOjAwLCAyMDAwLTAxLTAxIDE1OjAwKScpLFxuXHQqICAgKDIsICdUb3BheicsICdbMjAwMC0wMS0wMiAwOTowMCwgMjAwMC0wMS0wMiAxMDowMCknKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcImlkXCI6IDEsXG5cdCogICAgICAgXCJyb29tX25hbWVcIjogXCJFbWVyYWxkXCIsXG5cdCogICAgICAgXCJkdXJpbmdcIjogXCJbXFxcIjIwMDAtMDEtMDEgMTM6MDA6MDBcXFwiLFxcXCIyMDAwLTAxLTAxIDE1OjAwOjAwXFxcIilcIlxuXHQqICAgICB9XG5cdCogICBdLFxuXHQqICAgXCJzdGF0dXNcIjogMjAwLFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqIH1cblx0KiBgYGBcblx0Ki9cblx0cmFuZ2VMdChjb2x1bW4sIHJhbmdlKSB7XG5cdFx0dGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGBzbC4ke3JhbmdlfWApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdC8qKlxuXHQqIE9ubHkgcmVsZXZhbnQgZm9yIHJhbmdlIGNvbHVtbnMuIE1hdGNoIG9ubHkgcm93cyB3aGVyZSBldmVyeSBlbGVtZW50IGluXG5cdCogYGNvbHVtbmAgaXMgZWl0aGVyIGNvbnRhaW5lZCBpbiBgcmFuZ2VgIG9yIGxlc3MgdGhhbiBhbnkgZWxlbWVudCBpblxuXHQqIGByYW5nZWAuXG5cdCpcblx0KiBAcGFyYW0gY29sdW1uIC0gVGhlIHJhbmdlIGNvbHVtbiB0byBmaWx0ZXIgb25cblx0KiBAcGFyYW0gcmFuZ2UgLSBUaGUgcmFuZ2UgdG8gZmlsdGVyIHdpdGhcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBmaWx0ZXJzXG5cdCpcblx0KiBAZXhhbXBsZURlc2NyaXB0aW9uIFdpdGggYHNlbGVjdCgpYFxuXHQqIFBvc3RncmVzIHN1cHBvcnRzIGEgbnVtYmVyIG9mIFtyYW5nZVxuXHQqIHR5cGVzXShodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzL2N1cnJlbnQvcmFuZ2V0eXBlcy5odG1sKS4gWW91XG5cdCogY2FuIGZpbHRlciBvbiByYW5nZSBjb2x1bW5zIHVzaW5nIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgcmFuZ2Vcblx0KiB2YWx1ZXMuXG5cdCpcblx0KiBAZXhhbXBsZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgncmVzZXJ2YXRpb25zJylcblx0KiAgIC5zZWxlY3QoKVxuXHQqICAgLnJhbmdlTHRlKCdkdXJpbmcnLCAnWzIwMDAtMDEtMDEgMTQ6MDAsIDIwMDAtMDEtMDEgMTY6MDApJylcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgcmVzZXJ2YXRpb25zIChcblx0KiAgICAgaWQgaW50OCBwcmltYXJ5IGtleSxcblx0KiAgICAgcm9vbV9uYW1lIHRleHQsXG5cdCogICAgIGR1cmluZyB0c3JhbmdlXG5cdCogICApO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIHJlc2VydmF0aW9ucyAoaWQsIHJvb21fbmFtZSwgZHVyaW5nKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdFbWVyYWxkJywgJ1syMDAwLTAxLTAxIDEzOjAwLCAyMDAwLTAxLTAxIDE1OjAwKScpLFxuXHQqICAgKDIsICdUb3BheicsICdbMjAwMC0wMS0wMiAwOTowMCwgMjAwMC0wMS0wMiAxMDowMCknKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBganNvblxuXHQqICAge1xuXHQqICAgICBcImRhdGFcIjogW1xuXHQqICAgICAgIHtcblx0KiAgICAgICAgIFwiaWRcIjogMSxcblx0KiAgICAgICAgIFwicm9vbV9uYW1lXCI6IFwiRW1lcmFsZFwiLFxuXHQqICAgICAgICAgXCJkdXJpbmdcIjogXCJbXFxcIjIwMDAtMDEtMDEgMTM6MDA6MDBcXFwiLFxcXCIyMDAwLTAxLTAxIDE1OjAwOjAwXFxcIilcIlxuXHQqICAgICAgIH1cblx0KiAgICAgXSxcblx0KiAgICAgXCJzdGF0dXNcIjogMjAwLFxuXHQqICAgICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogICB9XG5cdCpcblx0KiBgYGBcblx0Ki9cblx0cmFuZ2VMdGUoY29sdW1uLCByYW5nZSkge1xuXHRcdHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgbnhyLiR7cmFuZ2V9YCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogT25seSByZWxldmFudCBmb3IgcmFuZ2UgY29sdW1ucy4gTWF0Y2ggb25seSByb3dzIHdoZXJlIGBjb2x1bW5gIGlzXG5cdCogbXV0dWFsbHkgZXhjbHVzaXZlIHRvIGByYW5nZWAgYW5kIHRoZXJlIGNhbiBiZSBubyBlbGVtZW50IGJldHdlZW4gdGhlIHR3b1xuXHQqIHJhbmdlcy5cblx0KlxuXHQqIEBwYXJhbSBjb2x1bW4gLSBUaGUgcmFuZ2UgY29sdW1uIHRvIGZpbHRlciBvblxuXHQqIEBwYXJhbSByYW5nZSAtIFRoZSByYW5nZSB0byBmaWx0ZXIgd2l0aFxuXHQqXG5cdCogQGNhdGVnb3J5IERhdGFiYXNlXG5cdCogQHN1YmNhdGVnb3J5IFVzaW5nIGZpbHRlcnNcblx0KlxuXHQqIEBleGFtcGxlRGVzY3JpcHRpb24gV2l0aCBgc2VsZWN0KClgXG5cdCogUG9zdGdyZXMgc3VwcG9ydHMgYSBudW1iZXIgb2YgW3JhbmdlXG5cdCogdHlwZXNdKGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvY3VycmVudC9yYW5nZXR5cGVzLmh0bWwpLiBZb3Vcblx0KiBjYW4gZmlsdGVyIG9uIHJhbmdlIGNvbHVtbnMgdXNpbmcgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiByYW5nZVxuXHQqIHZhbHVlcy5cblx0KlxuXHQqIEBleGFtcGxlIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdyZXNlcnZhdGlvbnMnKVxuXHQqICAgLnNlbGVjdCgpXG5cdCogICAucmFuZ2VBZGphY2VudCgnZHVyaW5nJywgJ1syMDAwLTAxLTAxIDEyOjAwLCAyMDAwLTAxLTAxIDEzOjAwKScpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIHJlc2VydmF0aW9ucyAoXG5cdCogICAgIGlkIGludDggcHJpbWFyeSBrZXksXG5cdCogICAgIHJvb21fbmFtZSB0ZXh0LFxuXHQqICAgICBkdXJpbmcgdHNyYW5nZVxuXHQqICAgKTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICByZXNlcnZhdGlvbnMgKGlkLCByb29tX25hbWUsIGR1cmluZylcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnRW1lcmFsZCcsICdbMjAwMC0wMS0wMSAxMzowMCwgMjAwMC0wMS0wMSAxNTowMCknKSxcblx0KiAgICgyLCAnVG9wYXonLCAnWzIwMDAtMDEtMDIgMDk6MDAsIDIwMDAtMDEtMDIgMTA6MDApJyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJpZFwiOiAxLFxuXHQqICAgICAgIFwicm9vbV9uYW1lXCI6IFwiRW1lcmFsZFwiLFxuXHQqICAgICAgIFwiZHVyaW5nXCI6IFwiW1xcXCIyMDAwLTAxLTAxIDEzOjAwOjAwXFxcIixcXFwiMjAwMC0wMS0wMSAxNTowMDowMFxcXCIpXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCovXG5cdHJhbmdlQWRqYWNlbnQoY29sdW1uLCByYW5nZSkge1xuXHRcdHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgYWRqLiR7cmFuZ2V9YCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogT25seSByZWxldmFudCBmb3IgYXJyYXkgYW5kIHJhbmdlIGNvbHVtbnMuIE1hdGNoIG9ubHkgcm93cyB3aGVyZVxuXHQqIGBjb2x1bW5gIGFuZCBgdmFsdWVgIGhhdmUgYW4gZWxlbWVudCBpbiBjb21tb24uXG5cdCpcblx0KiBAcGFyYW0gY29sdW1uIC0gVGhlIGFycmF5IG9yIHJhbmdlIGNvbHVtbiB0byBmaWx0ZXIgb25cblx0KiBAcGFyYW0gdmFsdWUgLSBUaGUgYXJyYXkgb3IgcmFuZ2UgdmFsdWUgdG8gZmlsdGVyIHdpdGhcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBmaWx0ZXJzXG5cdCpcblx0KiBAZXhhbXBsZSBPbiBhcnJheSBjb2x1bW5zXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2lzc3VlcycpXG5cdCogICAuc2VsZWN0KCd0aXRsZScpXG5cdCogICAub3ZlcmxhcHMoJ3RhZ3MnLCBbJ2lzOmNsb3NlZCcsICdzZXZlcml0eTpoaWdoJ10pXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBPbiBhcnJheSBjb2x1bW5zXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBpc3N1ZXMgKFxuXHQqICAgICBpZCBpbnQ4IHByaW1hcnkga2V5LFxuXHQqICAgICB0aXRsZSB0ZXh0LFxuXHQqICAgICB0YWdzIHRleHRbXVxuXHQqICAgKTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBpc3N1ZXMgKGlkLCB0aXRsZSwgdGFncylcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnQ2FjaGUgaW52YWxpZGF0aW9uIGlzIG5vdCB3b3JraW5nJywgYXJyYXlbJ2lzOm9wZW4nLCAnc2V2ZXJpdHk6aGlnaCcsICdwcmlvcml0eTpsb3cnXSksXG5cdCogICAoMiwgJ1VzZSBiZXR0ZXIgbmFtZXMnLCBhcnJheVsnaXM6b3BlbicsICdzZXZlcml0eTpsb3cnLCAncHJpb3JpdHk6bWVkaXVtJ10pO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBPbiBhcnJheSBjb2x1bW5zXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcInRpdGxlXCI6IFwiQ2FjaGUgaW52YWxpZGF0aW9uIGlzIG5vdCB3b3JraW5nXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZURlc2NyaXB0aW9uIE9uIHJhbmdlIGNvbHVtbnNcblx0KiBQb3N0Z3JlcyBzdXBwb3J0cyBhIG51bWJlciBvZiBbcmFuZ2Vcblx0KiB0eXBlc10oaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3JhbmdldHlwZXMuaHRtbCkuIFlvdVxuXHQqIGNhbiBmaWx0ZXIgb24gcmFuZ2UgY29sdW1ucyB1c2luZyB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHJhbmdlXG5cdCogdmFsdWVzLlxuXHQqXG5cdCogQGV4YW1wbGUgT24gcmFuZ2UgY29sdW1uc1xuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdyZXNlcnZhdGlvbnMnKVxuXHQqICAgLnNlbGVjdCgpXG5cdCogICAub3ZlcmxhcHMoJ2R1cmluZycsICdbMjAwMC0wMS0wMSAxMjo0NSwgMjAwMC0wMS0wMSAxMzoxNSknKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgT24gcmFuZ2UgY29sdW1uc1xuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgcmVzZXJ2YXRpb25zIChcblx0KiAgICAgaWQgaW50OCBwcmltYXJ5IGtleSxcblx0KiAgICAgcm9vbV9uYW1lIHRleHQsXG5cdCogICAgIGR1cmluZyB0c3JhbmdlXG5cdCogICApO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIHJlc2VydmF0aW9ucyAoaWQsIHJvb21fbmFtZSwgZHVyaW5nKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdFbWVyYWxkJywgJ1syMDAwLTAxLTAxIDEzOjAwLCAyMDAwLTAxLTAxIDE1OjAwKScpLFxuXHQqICAgKDIsICdUb3BheicsICdbMjAwMC0wMS0wMiAwOTowMCwgMjAwMC0wMS0wMiAxMDowMCknKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgT24gcmFuZ2UgY29sdW1uc1xuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJpZFwiOiAxLFxuXHQqICAgICAgIFwicm9vbV9uYW1lXCI6IFwiRW1lcmFsZFwiLFxuXHQqICAgICAgIFwiZHVyaW5nXCI6IFwiW1xcXCIyMDAwLTAxLTAxIDEzOjAwOjAwXFxcIixcXFwiMjAwMC0wMS0wMSAxNTowMDowMFxcXCIpXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCovXG5cdG92ZXJsYXBzKGNvbHVtbiwgdmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYG92LiR7dmFsdWV9YCk7XG5cdFx0ZWxzZSB0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYG92Lnske3ZhbHVlLmpvaW4oXCIsXCIpfX1gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBPbmx5IHJlbGV2YW50IGZvciB0ZXh0IGFuZCB0c3ZlY3RvciBjb2x1bW5zLiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmVcblx0KiBgY29sdW1uYCBtYXRjaGVzIHRoZSBxdWVyeSBzdHJpbmcgaW4gYHF1ZXJ5YC5cblx0KlxuXHQqIEBwYXJhbSBjb2x1bW4gLSBUaGUgdGV4dCBvciB0c3ZlY3RvciBjb2x1bW4gdG8gZmlsdGVyIG9uXG5cdCogQHBhcmFtIHF1ZXJ5IC0gVGhlIHF1ZXJ5IHRleHQgdG8gbWF0Y2ggd2l0aFxuXHQqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xuXHQqIEBwYXJhbSBvcHRpb25zLmNvbmZpZyAtIFRoZSB0ZXh0IHNlYXJjaCBjb25maWd1cmF0aW9uIHRvIHVzZVxuXHQqIEBwYXJhbSBvcHRpb25zLnR5cGUgLSBDaGFuZ2UgaG93IHRoZSBgcXVlcnlgIHRleHQgaXMgaW50ZXJwcmV0ZWRcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBmaWx0ZXJzXG5cdCpcblx0KiBAcmVtYXJrc1xuXHQqIC0gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUG9zdGdyZXMgZnVsbCB0ZXh0IHNlYXJjaF0oL2RvY3MvZ3VpZGVzL2RhdGFiYXNlL2Z1bGwtdGV4dC1zZWFyY2gpLlxuXHQqXG5cdCogQGV4YW1wbGUgVGV4dCBzZWFyY2hcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbShcInRleHRzXCIpXG5cdCogICAuc2VsZWN0KFwiY29udGVudFwiKVxuXHQqICAgLnRleHRTZWFyY2goXCJjb250ZW50XCIsIGAnZWdncycgJiAnaGFtJ2AsIHtcblx0KiAgICAgY29uZmlnOiBcImVuZ2xpc2hcIixcblx0KiAgIH0pO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgVGV4dCBzZWFyY2hcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGUgdGV4dHMgKFxuXHQqICAgaWQgICAgICBiaWdpbnRcblx0KiAgICAgICAgICAgcHJpbWFyeSBrZXlcblx0KiAgICAgICAgICAgZ2VuZXJhdGVkIGFsd2F5cyBhcyBpZGVudGl0eSxcblx0KiAgIGNvbnRlbnQgdGV4dFxuXHQqICk7XG5cdCpcblx0KiBpbnNlcnQgaW50byB0ZXh0cyAoY29udGVudCkgdmFsdWVzXG5cdCogICAgICgnRm91ciBzY29yZSBhbmQgc2V2ZW4geWVhcnMgYWdvJyksXG5cdCogICAgICgnVGhlIHJvYWQgZ29lcyBldmVyIG9uIGFuZCBvbicpLFxuXHQqICAgICAoJ0dyZWVuIGVnZ3MgYW5kIGhhbScpXG5cdCogO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBUZXh0IHNlYXJjaFxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJjb250ZW50XCI6IFwiR3JlZW4gZWdncyBhbmQgaGFtXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZURlc2NyaXB0aW9uIEJhc2ljIG5vcm1hbGl6YXRpb25cblx0KiBVc2VzIFBvc3RncmVTUUwncyBgcGxhaW50b190c3F1ZXJ5YCBmdW5jdGlvbi5cblx0KlxuXHQqIEBleGFtcGxlIEJhc2ljIG5vcm1hbGl6YXRpb25cblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgncXVvdGVzJylcblx0KiAgIC5zZWxlY3QoJ2NhdGNocGhyYXNlJylcblx0KiAgIC50ZXh0U2VhcmNoKCdjYXRjaHBocmFzZScsIGAnZmF0JyAmICdjYXQnYCwge1xuXHQqICAgICB0eXBlOiAncGxhaW4nLFxuXHQqICAgICBjb25maWc6ICdlbmdsaXNoJ1xuXHQqICAgfSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlRGVzY3JpcHRpb24gRnVsbCBub3JtYWxpemF0aW9uXG5cdCogVXNlcyBQb3N0Z3JlU1FMJ3MgYHBocmFzZXRvX3RzcXVlcnlgIGZ1bmN0aW9uLlxuXHQqXG5cdCogQGV4YW1wbGUgRnVsbCBub3JtYWxpemF0aW9uXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ3F1b3RlcycpXG5cdCogICAuc2VsZWN0KCdjYXRjaHBocmFzZScpXG5cdCogICAudGV4dFNlYXJjaCgnY2F0Y2hwaHJhc2UnLCBgJ2ZhdCcgJiAnY2F0J2AsIHtcblx0KiAgICAgdHlwZTogJ3BocmFzZScsXG5cdCogICAgIGNvbmZpZzogJ2VuZ2xpc2gnXG5cdCogICB9KVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVEZXNjcmlwdGlvbiBXZWJzZWFyY2hcblx0KiBVc2VzIFBvc3RncmVTUUwncyBgd2Vic2VhcmNoX3RvX3RzcXVlcnlgIGZ1bmN0aW9uLlxuXHQqIFRoaXMgZnVuY3Rpb24gd2lsbCBuZXZlciByYWlzZSBzeW50YXggZXJyb3JzLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0byB1c2UgcmF3IHVzZXItc3VwcGxpZWQgaW5wdXQgZm9yIHNlYXJjaCwgYW5kIGNhbiBiZSB1c2VkXG5cdCogd2l0aCBhZHZhbmNlZCBvcGVyYXRvcnMuXG5cdCpcblx0KiAtIGB1bnF1b3RlZCB0ZXh0YDogdGV4dCBub3QgaW5zaWRlIHF1b3RlIG1hcmtzIHdpbGwgYmUgY29udmVydGVkIHRvIHRlcm1zIHNlcGFyYXRlZCBieSAmIG9wZXJhdG9ycywgYXMgaWYgcHJvY2Vzc2VkIGJ5IHBsYWludG9fdHNxdWVyeS5cblx0KiAtIGBcInF1b3RlZCB0ZXh0XCJgOiB0ZXh0IGluc2lkZSBxdW90ZSBtYXJrcyB3aWxsIGJlIGNvbnZlcnRlZCB0byB0ZXJtcyBzZXBhcmF0ZWQgYnkgYDwtPmAgb3BlcmF0b3JzLCBhcyBpZiBwcm9jZXNzZWQgYnkgcGhyYXNldG9fdHNxdWVyeS5cblx0KiAtIGBPUmA6IHRoZSB3b3JkIOKAnG9y4oCdIHdpbGwgYmUgY29udmVydGVkIHRvIHRoZSB8IG9wZXJhdG9yLlxuXHQqIC0gYC1gOiBhIGRhc2ggd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlICEgb3BlcmF0b3IuXG5cdCpcblx0KiBAZXhhbXBsZSBXZWJzZWFyY2hcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgncXVvdGVzJylcblx0KiAgIC5zZWxlY3QoJ2NhdGNocGhyYXNlJylcblx0KiAgIC50ZXh0U2VhcmNoKCdjYXRjaHBocmFzZScsIGAnZmF0IG9yIGNhdCdgLCB7XG5cdCogICAgIHR5cGU6ICd3ZWJzZWFyY2gnLFxuXHQqICAgICBjb25maWc6ICdlbmdsaXNoJ1xuXHQqICAgfSlcblx0KiBgYGBcblx0Ki9cblx0dGV4dFNlYXJjaChjb2x1bW4sIHF1ZXJ5LCB7IGNvbmZpZywgdHlwZSB9ID0ge30pIHtcblx0XHRsZXQgdHlwZVBhcnQgPSBcIlwiO1xuXHRcdGlmICh0eXBlID09PSBcInBsYWluXCIpIHR5cGVQYXJ0ID0gXCJwbFwiO1xuXHRcdGVsc2UgaWYgKHR5cGUgPT09IFwicGhyYXNlXCIpIHR5cGVQYXJ0ID0gXCJwaFwiO1xuXHRcdGVsc2UgaWYgKHR5cGUgPT09IFwid2Vic2VhcmNoXCIpIHR5cGVQYXJ0ID0gXCJ3XCI7XG5cdFx0Y29uc3QgY29uZmlnUGFydCA9IGNvbmZpZyA9PT0gdm9pZCAwID8gXCJcIiA6IGAoJHtjb25maWd9KWA7XG5cdFx0dGhpcy51cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChjb2x1bW4sIGAke3R5cGVQYXJ0fWZ0cyR7Y29uZmlnUGFydH0uJHtxdWVyeX1gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBNYXRjaCBvbmx5IHJvd3Mgd2hlcmUgZWFjaCBjb2x1bW4gaW4gYHF1ZXJ5YCBrZXlzIGlzIGVxdWFsIHRvIGl0c1xuXHQqIGFzc29jaWF0ZWQgdmFsdWUuIFNob3J0aGFuZCBmb3IgbXVsdGlwbGUgYC5lcSgpYHMuXG5cdCpcblx0KiBAcGFyYW0gcXVlcnkgLSBUaGUgb2JqZWN0IHRvIGZpbHRlciB3aXRoLCB3aXRoIGNvbHVtbiBuYW1lcyBhcyBrZXlzIG1hcHBlZFxuXHQqIHRvIHRoZWlyIGZpbHRlciB2YWx1ZXNcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBmaWx0ZXJzXG5cdCpcblx0KiBAZXhhbXBsZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY2hhcmFjdGVycycpXG5cdCogICAuc2VsZWN0KCduYW1lJylcblx0KiAgIC5tYXRjaCh7IGlkOiAyLCBuYW1lOiAnTGVpYScgfSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY2hhcmFjdGVycyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBjaGFyYWN0ZXJzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnTHVrZScpLFxuXHQqICAgKDIsICdMZWlhJyksXG5cdCogICAoMywgJ0hhbicpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFtcblx0KiAgICAge1xuXHQqICAgICAgIFwibmFtZVwiOiBcIkxlaWFcIlxuXHQqICAgICB9XG5cdCogICBdLFxuXHQqICAgXCJzdGF0dXNcIjogMjAwLFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqIH1cblx0KiBgYGBcblx0Ki9cblx0bWF0Y2gocXVlcnkpIHtcblx0XHRPYmplY3QuZW50cmllcyhxdWVyeSkuZmlsdGVyKChbXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdm9pZCAwKS5mb3JFYWNoKChbY29sdW1uLCB2YWx1ZV0pID0+IHtcblx0XHRcdHRoaXMudXJsLnNlYXJjaFBhcmFtcy5hcHBlbmQoY29sdW1uLCBgZXEuJHt2YWx1ZX1gKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBNYXRjaCBvbmx5IHJvd3Mgd2hpY2ggZG9lc24ndCBzYXRpc2Z5IHRoZSBmaWx0ZXIuXG5cdCpcblx0KiBVbmxpa2UgbW9zdCBmaWx0ZXJzLCBgb3BlYXJhdG9yYCBhbmQgYHZhbHVlYCBhcmUgdXNlZCBhcy1pcyBhbmQgbmVlZCB0b1xuXHQqIGZvbGxvdyBbUG9zdGdSRVNUXG5cdCogc3ludGF4XShodHRwczovL3Bvc3RncmVzdC5vcmcvZW4vc3RhYmxlL2FwaS5odG1sI29wZXJhdG9ycykuIFlvdSBhbHNvIG5lZWRcblx0KiB0byBtYWtlIHN1cmUgdGhleSBhcmUgcHJvcGVybHkgc2FuaXRpemVkLlxuXHQqXG5cdCogQHBhcmFtIGNvbHVtbiAtIFRoZSBjb2x1bW4gdG8gZmlsdGVyIG9uXG5cdCogQHBhcmFtIG9wZXJhdG9yIC0gVGhlIG9wZXJhdG9yIHRvIGJlIG5lZ2F0ZWQgdG8gZmlsdGVyIHdpdGgsIGZvbGxvd2luZ1xuXHQqIFBvc3RnUkVTVCBzeW50YXhcblx0KiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gZmlsdGVyIHdpdGgsIGZvbGxvd2luZyBQb3N0Z1JFU1Qgc3ludGF4XG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KiBAc3ViY2F0ZWdvcnkgVXNpbmcgZmlsdGVyc1xuXHQqXG5cdCogQHJlbWFya3Ncblx0KiBub3QoKSBleHBlY3RzIHlvdSB0byB1c2UgdGhlIHJhdyBQb3N0Z1JFU1Qgc3ludGF4IGZvciB0aGUgZmlsdGVyIHZhbHVlcy5cblx0KlxuXHQqIGBgYHRzXG5cdCogLm5vdCgnaWQnLCAnaW4nLCAnKDUsNiw3KScpICAvLyBVc2UgYCgpYCBmb3IgYGluYCBmaWx0ZXJcblx0KiAubm90KCdhcnJheWNvbCcsICdjcycsICd7XCJhXCIsXCJiXCJ9JykgIC8vIFVzZSBgY3NgIGZvciBgY29udGFpbnMoKWAsIGB7fWAgZm9yIGFycmF5IHZhbHVlc1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2NvdW50cmllcycpXG5cdCogICAuc2VsZWN0KClcblx0KiAgIC5ub3QoJ25hbWUnLCAnaXMnLCBudWxsKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBjb3VudHJpZXMgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgY291bnRyaWVzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnbnVsbCcpLFxuXHQqICAgKDIsIG51bGwpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGBqc29uXG5cdCogICB7XG5cdCogICAgIFwiZGF0YVwiOiBbXG5cdCogICAgICAge1xuXHQqICAgICAgICAgXCJpZFwiOiAxLFxuXHQqICAgICAgICAgXCJuYW1lXCI6IFwibnVsbFwiXG5cdCogICAgICAgfVxuXHQqICAgICBdLFxuXHQqICAgICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiAgIH1cblx0KlxuXHQqIGBgYFxuXHQqL1xuXHRub3QoY29sdW1uLCBvcGVyYXRvciwgdmFsdWUpIHtcblx0XHR0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYG5vdC4ke29wZXJhdG9yfS4ke3ZhbHVlfWApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdC8qKlxuXHQqIE1hdGNoIG9ubHkgcm93cyB3aGljaCBzYXRpc2Z5IGF0IGxlYXN0IG9uZSBvZiB0aGUgZmlsdGVycy5cblx0KlxuXHQqIFVubGlrZSBtb3N0IGZpbHRlcnMsIGBmaWx0ZXJzYCBpcyB1c2VkIGFzLWlzIGFuZCBuZWVkcyB0byBmb2xsb3cgW1Bvc3RnUkVTVFxuXHQqIHN5bnRheF0oaHR0cHM6Ly9wb3N0Z3Jlc3Qub3JnL2VuL3N0YWJsZS9hcGkuaHRtbCNvcGVyYXRvcnMpLiBZb3UgYWxzbyBuZWVkXG5cdCogdG8gbWFrZSBzdXJlIGl0J3MgcHJvcGVybHkgc2FuaXRpemVkLlxuXHQqXG5cdCogSXQncyBjdXJyZW50bHkgbm90IHBvc3NpYmxlIHRvIGRvIGFuIGAub3IoKWAgZmlsdGVyIGFjcm9zcyBtdWx0aXBsZSB0YWJsZXMuXG5cdCpcblx0KiBAcGFyYW0gZmlsdGVycyAtIFRoZSBmaWx0ZXJzIHRvIHVzZSwgZm9sbG93aW5nIFBvc3RnUkVTVCBzeW50YXhcblx0KiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcblx0KiBAcGFyYW0gb3B0aW9ucy5yZWZlcmVuY2VkVGFibGUgLSBTZXQgdGhpcyB0byBmaWx0ZXIgb24gcmVmZXJlbmNlZCB0YWJsZXNcblx0KiBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQgdGFibGVcblx0KiBAcGFyYW0gb3B0aW9ucy5mb3JlaWduVGFibGUgLSBEZXByZWNhdGVkLCB1c2UgYHJlZmVyZW5jZWRUYWJsZWAgaW5zdGVhZFxuXHQqXG5cdCogQGNhdGVnb3J5IERhdGFiYXNlXG5cdCogQHN1YmNhdGVnb3J5IFVzaW5nIGZpbHRlcnNcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogb3IoKSBleHBlY3RzIHlvdSB0byB1c2UgdGhlIHJhdyBQb3N0Z1JFU1Qgc3ludGF4IGZvciB0aGUgZmlsdGVyIG5hbWVzIGFuZCB2YWx1ZXMuXG5cdCpcblx0KiBgYGB0c1xuXHQqIC5vcignaWQuaW4uKDUsNiw3KSwgYXJyYXljb2wuY3Mue1wiYVwiLFwiYlwifScpICAvLyBVc2UgYCgpYCBmb3IgYGluYCBmaWx0ZXIsIGB7fWAgZm9yIGFycmF5IHZhbHVlcyBhbmQgYGNzYCBmb3IgYGNvbnRhaW5zKClgLlxuXHQqIC5vcignaWQuaW4uKDUsNiw3KSwgYXJyYXljb2wuY2Que1wiYVwiLFwiYlwifScpICAvLyBVc2UgYGNkYCBmb3IgYGNvbnRhaW5lZEJ5KClgXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY2hhcmFjdGVycycpXG5cdCogICAuc2VsZWN0KCduYW1lJylcblx0KiAgIC5vcignaWQuZXEuMixuYW1lLmVxLkhhbicpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIGNoYXJhY3RlcnMgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgY2hhcmFjdGVycyAoaWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ0x1a2UnKSxcblx0KiAgICgyLCAnTGVpYScpLFxuXHQqICAgKDMsICdIYW4nKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgV2l0aCBgc2VsZWN0KClgXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcIm5hbWVcIjogXCJMZWlhXCJcblx0KiAgICAgfSxcblx0KiAgICAge1xuXHQqICAgICAgIFwibmFtZVwiOiBcIkhhblwiXG5cdCogICAgIH1cblx0KiAgIF0sXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgVXNlIGBvcmAgd2l0aCBgYW5kYFxuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdjaGFyYWN0ZXJzJylcblx0KiAgIC5zZWxlY3QoJ25hbWUnKVxuXHQqICAgLm9yKCdpZC5ndC4zLGFuZChpZC5lcS4xLG5hbWUuZXEuTHVrZSknKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgVXNlIGBvcmAgd2l0aCBgYW5kYFxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY2hhcmFjdGVycyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBjaGFyYWN0ZXJzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnTHVrZScpLFxuXHQqICAgKDIsICdMZWlhJyksXG5cdCogICAoMywgJ0hhbicpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBVc2UgYG9yYCB3aXRoIGBhbmRgXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcIm5hbWVcIjogXCJMdWtlXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZSBVc2UgYG9yYCBvbiByZWZlcmVuY2VkIHRhYmxlc1xuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdvcmNoZXN0cmFsX3NlY3Rpb25zJylcblx0KiAgIC5zZWxlY3QoYFxuXHQqICAgICBuYW1lLFxuXHQqICAgICBpbnN0cnVtZW50cyFpbm5lciAoXG5cdCogICAgICAgbmFtZVxuXHQqICAgICApXG5cdCogICBgKVxuXHQqICAgLm9yKCdzZWN0aW9uX2lkLmVxLjEsbmFtZS5lcS5ndXpoZW5nJywgeyByZWZlcmVuY2VkVGFibGU6ICdpbnN0cnVtZW50cycgfSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFVzZSBgb3JgIG9uIHJlZmVyZW5jZWQgdGFibGVzXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBvcmNoZXN0cmFsX3NlY3Rpb25zIChpZCBpbnQ4IHByaW1hcnkga2V5LCBuYW1lIHRleHQpO1xuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgaW5zdHJ1bWVudHMgKFxuXHQqICAgICBpZCBpbnQ4IHByaW1hcnkga2V5LFxuXHQqICAgICBzZWN0aW9uX2lkIGludDggbm90IG51bGwgcmVmZXJlbmNlcyBvcmNoZXN0cmFsX3NlY3Rpb25zLFxuXHQqICAgICBuYW1lIHRleHRcblx0KiAgICk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgb3JjaGVzdHJhbF9zZWN0aW9ucyAoaWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ3N0cmluZ3MnKSxcblx0KiAgICgyLCAnd29vZHdpbmRzJyk7XG5cdCogaW5zZXJ0IGludG9cblx0KiAgIGluc3RydW1lbnRzIChpZCwgc2VjdGlvbl9pZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAyLCAnZmx1dGUnKSxcblx0KiAgICgyLCAxLCAndmlvbGluJyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFVzZSBgb3JgIG9uIHJlZmVyZW5jZWQgdGFibGVzXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcIm5hbWVcIjogXCJzdHJpbmdzXCIsXG5cdCogICAgICAgXCJpbnN0cnVtZW50c1wiOiBbXG5cdCogICAgICAgICB7XG5cdCogICAgICAgICAgIFwibmFtZVwiOiBcInZpb2xpblwiXG5cdCogICAgICAgICB9XG5cdCogICAgICAgXVxuXHQqICAgICB9XG5cdCogICBdLFxuXHQqICAgXCJzdGF0dXNcIjogMjAwLFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqIH1cblx0KiBgYGBcblx0Ki9cblx0b3IoZmlsdGVycywgeyBmb3JlaWduVGFibGUsIHJlZmVyZW5jZWRUYWJsZSA9IGZvcmVpZ25UYWJsZSB9ID0ge30pIHtcblx0XHRjb25zdCBrZXkgPSByZWZlcmVuY2VkVGFibGUgPyBgJHtyZWZlcmVuY2VkVGFibGV9Lm9yYCA6IFwib3JcIjtcblx0XHR0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgYCgke2ZpbHRlcnN9KWApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdC8qKlxuXHQqIE1hdGNoIG9ubHkgcm93cyB3aGljaCBzYXRpc2Z5IHRoZSBmaWx0ZXIuIFRoaXMgaXMgYW4gZXNjYXBlIGhhdGNoIC0geW91XG5cdCogc2hvdWxkIHVzZSB0aGUgc3BlY2lmaWMgZmlsdGVyIG1ldGhvZHMgd2hlcmV2ZXIgcG9zc2libGUuXG5cdCpcblx0KiBVbmxpa2UgbW9zdCBmaWx0ZXJzLCBgb3BlYXJhdG9yYCBhbmQgYHZhbHVlYCBhcmUgdXNlZCBhcy1pcyBhbmQgbmVlZCB0b1xuXHQqIGZvbGxvdyBbUG9zdGdSRVNUXG5cdCogc3ludGF4XShodHRwczovL3Bvc3RncmVzdC5vcmcvZW4vc3RhYmxlL2FwaS5odG1sI29wZXJhdG9ycykuIFlvdSBhbHNvIG5lZWRcblx0KiB0byBtYWtlIHN1cmUgdGhleSBhcmUgcHJvcGVybHkgc2FuaXRpemVkLlxuXHQqXG5cdCogQHBhcmFtIGNvbHVtbiAtIFRoZSBjb2x1bW4gdG8gZmlsdGVyIG9uXG5cdCogQHBhcmFtIG9wZXJhdG9yIC0gVGhlIG9wZXJhdG9yIHRvIGZpbHRlciB3aXRoLCBmb2xsb3dpbmcgUG9zdGdSRVNUIHN5bnRheFxuXHQqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBmaWx0ZXIgd2l0aCwgZm9sbG93aW5nIFBvc3RnUkVTVCBzeW50YXhcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqIEBzdWJjYXRlZ29yeSBVc2luZyBmaWx0ZXJzXG5cdCpcblx0KiBAcmVtYXJrc1xuXHQqIGZpbHRlcigpIGV4cGVjdHMgeW91IHRvIHVzZSB0aGUgcmF3IFBvc3RnUkVTVCBzeW50YXggZm9yIHRoZSBmaWx0ZXIgdmFsdWVzLlxuXHQqXG5cdCogYGBgdHNcblx0KiAuZmlsdGVyKCdpZCcsICdpbicsICcoNSw2LDcpJykgIC8vIFVzZSBgKClgIGZvciBgaW5gIGZpbHRlclxuXHQqIC5maWx0ZXIoJ2FycmF5Y29sJywgJ2NzJywgJ3tcImFcIixcImJcIn0nKSAgLy8gVXNlIGBjc2AgZm9yIGBjb250YWlucygpYCwgYHt9YCBmb3IgYXJyYXkgdmFsdWVzXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY2hhcmFjdGVycycpXG5cdCogICAuc2VsZWN0KClcblx0KiAgIC5maWx0ZXIoJ25hbWUnLCAnaW4nLCAnKFwiSGFuXCIsXCJZb2RhXCIpJylcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFdpdGggYHNlbGVjdCgpYFxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY2hhcmFjdGVycyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBjaGFyYWN0ZXJzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnTHVrZScpLFxuXHQqICAgKDIsICdMZWlhJyksXG5cdCogICAoMywgJ0hhbicpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBXaXRoIGBzZWxlY3QoKWBcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFtcblx0KiAgICAge1xuXHQqICAgICAgIFwiaWRcIjogMyxcblx0KiAgICAgICBcIm5hbWVcIjogXCJIYW5cIlxuXHQqICAgICB9XG5cdCogICBdLFxuXHQqICAgXCJzdGF0dXNcIjogMjAwLFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIE9uIGEgcmVmZXJlbmNlZCB0YWJsZVxuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdvcmNoZXN0cmFsX3NlY3Rpb25zJylcblx0KiAgIC5zZWxlY3QoYFxuXHQqICAgICBuYW1lLFxuXHQqICAgICBpbnN0cnVtZW50cyFpbm5lciAoXG5cdCogICAgICAgbmFtZVxuXHQqICAgICApXG5cdCogICBgKVxuXHQqICAgLmZpbHRlcignaW5zdHJ1bWVudHMubmFtZScsICdlcScsICdmbHV0ZScpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBPbiBhIHJlZmVyZW5jZWQgdGFibGVcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIG9yY2hlc3RyYWxfc2VjdGlvbnMgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICAgaW5zdHJ1bWVudHMgKFxuXHQqICAgICBpZCBpbnQ4IHByaW1hcnkga2V5LFxuXHQqICAgICBzZWN0aW9uX2lkIGludDggbm90IG51bGwgcmVmZXJlbmNlcyBvcmNoZXN0cmFsX3NlY3Rpb25zLFxuXHQqICAgICBuYW1lIHRleHRcblx0KiAgICk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgb3JjaGVzdHJhbF9zZWN0aW9ucyAoaWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ3N0cmluZ3MnKSxcblx0KiAgICgyLCAnd29vZHdpbmRzJyk7XG5cdCogaW5zZXJ0IGludG9cblx0KiAgIGluc3RydW1lbnRzIChpZCwgc2VjdGlvbl9pZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAyLCAnZmx1dGUnKSxcblx0KiAgICgyLCAxLCAndmlvbGluJyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIE9uIGEgcmVmZXJlbmNlZCB0YWJsZVxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJuYW1lXCI6IFwid29vZHdpbmRzXCIsXG5cdCogICAgICAgXCJpbnN0cnVtZW50c1wiOiBbXG5cdCogICAgICAgICB7XG5cdCogICAgICAgICAgIFwibmFtZVwiOiBcImZsdXRlXCJcblx0KiAgICAgICAgIH1cblx0KiAgICAgICBdXG5cdCogICAgIH1cblx0KiAgIF0sXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqL1xuXHRmaWx0ZXIoY29sdW1uLCBvcGVyYXRvciwgdmFsdWUpIHtcblx0XHR0aGlzLnVybC5zZWFyY2hQYXJhbXMuYXBwZW5kKGNvbHVtbiwgYCR7b3BlcmF0b3J9LiR7dmFsdWV9YCk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9Qb3N0Z3Jlc3RRdWVyeUJ1aWxkZXIudHNcbnZhciBQb3N0Z3Jlc3RRdWVyeUJ1aWxkZXIgPSBjbGFzcyB7XG5cdC8qKlxuXHQqIENyZWF0ZXMgYSBxdWVyeSBidWlsZGVyIHNjb3BlZCB0byBhIFBvc3RncmVzIHRhYmxlIG9yIHZpZXcuXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KlxuXHQqIEBwYXJhbSB1cmwgLSBUaGUgVVJMIGZvciB0aGUgcXVlcnlcblx0KiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcblx0KiBAcGFyYW0gb3B0aW9ucy5oZWFkZXJzIC0gQ3VzdG9tIGhlYWRlcnNcblx0KiBAcGFyYW0gb3B0aW9ucy5zY2hlbWEgLSBQb3N0Z3JlcyBzY2hlbWEgdG8gdXNlXG5cdCogQHBhcmFtIG9wdGlvbnMuZmV0Y2ggLSBDdXN0b20gZmV0Y2ggaW1wbGVtZW50YXRpb25cblx0KiBAcGFyYW0gb3B0aW9ucy51cmxMZW5ndGhMaW1pdCAtIE1heGltdW0gVVJMIGxlbmd0aCBiZWZvcmUgd2FybmluZ1xuXHQqIEBwYXJhbSBvcHRpb25zLnJldHJ5IC0gRW5hYmxlIGF1dG9tYXRpYyByZXRyaWVzIGZvciB0cmFuc2llbnQgZXJyb3JzIChkZWZhdWx0OiB0cnVlKVxuXHQqXG5cdCogQGV4YW1wbGUgVXNpbmcgc3VwYWJhc2UtanMgKHJlY29tbWVuZGVkKVxuXHQqIGBgYHRzXG5cdCogaW1wb3J0IHsgY3JlYXRlQ2xpZW50IH0gZnJvbSAnQHN1cGFiYXNlL3N1cGFiYXNlLWpzJ1xuXHQqXG5cdCogY29uc3Qgc3VwYWJhc2UgPSBjcmVhdGVDbGllbnQoJ2h0dHBzOi8veHl6Y29tcGFueS5zdXBhYmFzZS5jbycsICd5b3VyLXB1Ymxpc2hhYmxlLWtleScpXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuZnJvbSgndXNlcnMnKS5zZWxlY3QoJyonKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgU3RhbmRhbG9uZSBpbXBvcnQgZm9yIGJ1bmRsZS1zZW5zaXRpdmUgZW52aXJvbm1lbnRzXG5cdCogYGBgdHNcblx0KiBpbXBvcnQgeyBQb3N0Z3Jlc3RRdWVyeUJ1aWxkZXIgfSBmcm9tICdAc3VwYWJhc2UvcG9zdGdyZXN0LWpzJ1xuXHQqXG5cdCogY29uc3QgcXVlcnkgPSBuZXcgUG9zdGdyZXN0UXVlcnlCdWlsZGVyKFxuXHQqICAgbmV3IFVSTCgnaHR0cHM6Ly94eXpjb21wYW55LnN1cGFiYXNlLmNvL3Jlc3QvdjEvdXNlcnMnKSxcblx0KiAgIHsgaGVhZGVyczogeyBhcGlrZXk6ICd5b3VyLXB1Ymxpc2hhYmxlLWtleScgfSwgcmV0cnk6IHRydWUgfVxuXHQqIClcblx0KiBgYGBcblx0Ki9cblx0Y29uc3RydWN0b3IodXJsLCB7IGhlYWRlcnMgPSB7fSwgc2NoZW1hLCBmZXRjaDogZmV0Y2gkMSwgdXJsTGVuZ3RoTGltaXQgPSA4ZTMsIHJldHJ5IH0pIHtcblx0XHR0aGlzLnVybCA9IHVybDtcblx0XHR0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhoZWFkZXJzKTtcblx0XHR0aGlzLnNjaGVtYSA9IHNjaGVtYTtcblx0XHR0aGlzLmZldGNoID0gZmV0Y2gkMTtcblx0XHR0aGlzLnVybExlbmd0aExpbWl0ID0gdXJsTGVuZ3RoTGltaXQ7XG5cdFx0dGhpcy5yZXRyeSA9IHJldHJ5O1xuXHR9XG5cdC8qKlxuXHQqIENsb25lIFVSTCBhbmQgaGVhZGVycyB0byBwcmV2ZW50IHNoYXJlZCBzdGF0ZSBiZXR3ZWVuIG9wZXJhdGlvbnMuXG5cdCovXG5cdGNsb25lUmVxdWVzdFN0YXRlKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR1cmw6IG5ldyBVUkwodGhpcy51cmwudG9TdHJpbmcoKSksXG5cdFx0XHRoZWFkZXJzOiBuZXcgSGVhZGVycyh0aGlzLmhlYWRlcnMpXG5cdFx0fTtcblx0fVxuXHQvKipcblx0KiBQZXJmb3JtIGEgU0VMRUNUIHF1ZXJ5IG9uIHRoZSB0YWJsZSBvciB2aWV3LlxuXHQqXG5cdCogQHBhcmFtIGNvbHVtbnMgLSBUaGUgY29sdW1ucyB0byByZXRyaWV2ZSwgc2VwYXJhdGVkIGJ5IGNvbW1hcy4gQ29sdW1ucyBjYW4gYmUgcmVuYW1lZCB3aGVuIHJldHVybmVkIHdpdGggYGN1c3RvbU5hbWU6Y29sdW1uTmFtZWBcblx0KlxuXHQqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xuXHQqXG5cdCogQHBhcmFtIG9wdGlvbnMuaGVhZCAtIFdoZW4gc2V0IHRvIGB0cnVlYCwgYGRhdGFgIHdpbGwgbm90IGJlIHJldHVybmVkLlxuXHQqIFVzZWZ1bCBpZiB5b3Ugb25seSBuZWVkIHRoZSBjb3VudC5cblx0KlxuXHQqIEBwYXJhbSBvcHRpb25zLmNvdW50IC0gQ291bnQgYWxnb3JpdGhtIHRvIHVzZSB0byBjb3VudCByb3dzIGluIHRoZSB0YWJsZSBvciB2aWV3LlxuXHQqXG5cdCogYFwiZXhhY3RcImA6IEV4YWN0IGJ1dCBzbG93IGNvdW50IGFsZ29yaXRobS4gUGVyZm9ybXMgYSBgQ09VTlQoKilgIHVuZGVyIHRoZVxuXHQqIGhvb2QuXG5cdCpcblx0KiBgXCJwbGFubmVkXCJgOiBBcHByb3hpbWF0ZWQgYnV0IGZhc3QgY291bnQgYWxnb3JpdGhtLiBVc2VzIHRoZSBQb3N0Z3Jlc1xuXHQqIHN0YXRpc3RpY3MgdW5kZXIgdGhlIGhvb2QuXG5cdCpcblx0KiBgXCJlc3RpbWF0ZWRcImA6IFVzZXMgZXhhY3QgY291bnQgZm9yIGxvdyBudW1iZXJzIGFuZCBwbGFubmVkIGNvdW50IGZvciBoaWdoXG5cdCogbnVtYmVycy5cblx0KlxuXHQqIEByZW1hcmtzXG5cdCogV2hlbiB1c2luZyBgY291bnRgIHdpdGggYC5yYW5nZSgpYCBvciBgLmxpbWl0KClgLCB0aGUgcmV0dXJuZWQgYGNvdW50YCBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3Ncblx0KiB0aGF0IG1hdGNoIHlvdXIgZmlsdGVycywgbm90IHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgY3VycmVudCBwYWdlLiBVc2UgdGhpcyB0byBidWlsZCBwYWdpbmF0aW9uIFVJLlxuXHRcblx0KiAtIEJ5IGRlZmF1bHQsIFN1cGFiYXNlIHByb2plY3RzIHJldHVybiBhIG1heGltdW0gb2YgMSwwMDAgcm93cy4gVGhpcyBzZXR0aW5nIGNhbiBiZSBjaGFuZ2VkIGluIHlvdXIgcHJvamVjdCdzIFtBUEkgc2V0dGluZ3NdKC9kYXNoYm9hcmQvcHJvamVjdC9fL3NldHRpbmdzL2FwaSkuIEl0J3MgcmVjb21tZW5kZWQgdGhhdCB5b3Uga2VlcCBpdCBsb3cgdG8gbGltaXQgdGhlIHBheWxvYWQgc2l6ZSBvZiBhY2NpZGVudGFsIG9yIG1hbGljaW91cyByZXF1ZXN0cy4gWW91IGNhbiB1c2UgYHJhbmdlKClgIHF1ZXJpZXMgdG8gcGFnaW5hdGUgdGhyb3VnaCB5b3VyIGRhdGEuXG5cdCogLSBgc2VsZWN0KClgIGNhbiBiZSBjb21iaW5lZCB3aXRoIFtGaWx0ZXJzXSgvZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC91c2luZy1maWx0ZXJzKVxuXHQqIC0gYHNlbGVjdCgpYCBjYW4gYmUgY29tYmluZWQgd2l0aCBbTW9kaWZpZXJzXSgvZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC91c2luZy1tb2RpZmllcnMpXG5cdCogLSBgYXBpa2V5YCBpcyBhIHJlc2VydmVkIGtleXdvcmQgaWYgeW91J3JlIHVzaW5nIHRoZSBbU3VwYWJhc2UgUGxhdGZvcm1dKC9kb2NzL2d1aWRlcy9wbGF0Zm9ybSkgYW5kIFtzaG91bGQgYmUgYXZvaWRlZCBhcyBhIGNvbHVtbiBuYW1lXShodHRwczovL2dpdGh1Yi5jb20vc3VwYWJhc2Uvc3VwYWJhc2UvaXNzdWVzLzU0NjUpLiAqXG5cdCogQGNhdGVnb3J5IERhdGFiYXNlXG5cdCpcblx0KiBAZXhhbXBsZSBHZXR0aW5nIHlvdXIgZGF0YVxuXHQqIGBgYGpzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdjaGFyYWN0ZXJzJylcblx0KiAgIC5zZWxlY3QoKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgR2V0dGluZyB5b3VyIGRhdGFcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIGNoYXJhY3RlcnMgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgY2hhcmFjdGVycyAoaWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ0hhcnJ5JyksXG5cdCogICAoMiwgJ0Zyb2RvJyksXG5cdCogICAoMywgJ0thdG5pc3MnKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgR2V0dGluZyB5b3VyIGRhdGFcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFtcblx0KiAgICAge1xuXHQqICAgICAgIFwiaWRcIjogMSxcblx0KiAgICAgICBcIm5hbWVcIjogXCJIYXJyeVwiXG5cdCogICAgIH0sXG5cdCogICAgIHtcblx0KiAgICAgICBcImlkXCI6IDIsXG5cdCogICAgICAgXCJuYW1lXCI6IFwiRnJvZG9cIlxuXHQqICAgICB9LFxuXHQqICAgICB7XG5cdCogICAgICAgXCJpZFwiOiAzLFxuXHQqICAgICAgIFwibmFtZVwiOiBcIkthdG5pc3NcIlxuXHQqICAgICB9XG5cdCogICBdLFxuXHQqICAgXCJzdGF0dXNcIjogMjAwLFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIFNlbGVjdGluZyBzcGVjaWZpYyBjb2x1bW5zXG5cdCogYGBganNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2NoYXJhY3RlcnMnKVxuXHQqICAgLnNlbGVjdCgnbmFtZScpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBTZWxlY3Rpbmcgc3BlY2lmaWMgY29sdW1uc1xuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY2hhcmFjdGVycyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBjaGFyYWN0ZXJzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnRnJvZG8nKSxcblx0KiAgICgyLCAnSGFycnknKSxcblx0KiAgICgzLCAnS2F0bmlzcycpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBTZWxlY3Rpbmcgc3BlY2lmaWMgY29sdW1uc1xuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJuYW1lXCI6IFwiRnJvZG9cIlxuXHQqICAgICB9LFxuXHQqICAgICB7XG5cdCogICAgICAgXCJuYW1lXCI6IFwiSGFycnlcIlxuXHQqICAgICB9LFxuXHQqICAgICB7XG5cdCogICAgICAgXCJuYW1lXCI6IFwiS2F0bmlzc1wiXG5cdCogICAgIH1cblx0KiAgIF0sXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVEZXNjcmlwdGlvbiBRdWVyeSByZWZlcmVuY2VkIHRhYmxlc1xuXHQqIElmIHlvdXIgZGF0YWJhc2UgaGFzIGZvcmVpZ24ga2V5IHJlbGF0aW9uc2hpcHMsIHlvdSBjYW4gcXVlcnkgcmVsYXRlZCB0YWJsZXMgdG9vLlxuXHQqXG5cdCogQGV4YW1wbGUgUXVlcnkgcmVmZXJlbmNlZCB0YWJsZXNcblx0KiBgYGBqc1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnb3JjaGVzdHJhbF9zZWN0aW9ucycpXG5cdCogICAuc2VsZWN0KGBcblx0KiAgICAgbmFtZSxcblx0KiAgICAgaW5zdHJ1bWVudHMgKFxuXHQqICAgICAgIG5hbWVcblx0KiAgICAgKVxuXHQqICAgYClcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFF1ZXJ5IHJlZmVyZW5jZWQgdGFibGVzXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBvcmNoZXN0cmFsX3NlY3Rpb25zIChpZCBpbnQ4IHByaW1hcnkga2V5LCBuYW1lIHRleHQpO1xuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgaW5zdHJ1bWVudHMgKFxuXHQqICAgICBpZCBpbnQ4IHByaW1hcnkga2V5LFxuXHQqICAgICBzZWN0aW9uX2lkIGludDggbm90IG51bGwgcmVmZXJlbmNlcyBvcmNoZXN0cmFsX3NlY3Rpb25zLFxuXHQqICAgICBuYW1lIHRleHRcblx0KiAgICk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgb3JjaGVzdHJhbF9zZWN0aW9ucyAoaWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ3N0cmluZ3MnKSxcblx0KiAgICgyLCAnd29vZHdpbmRzJyk7XG5cdCogaW5zZXJ0IGludG9cblx0KiAgIGluc3RydW1lbnRzIChpZCwgc2VjdGlvbl9pZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAyLCAnZmx1dGUnKSxcblx0KiAgICgyLCAxLCAndmlvbGluJyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFF1ZXJ5IHJlZmVyZW5jZWQgdGFibGVzXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcIm5hbWVcIjogXCJzdHJpbmdzXCIsXG5cdCogICAgICAgXCJpbnN0cnVtZW50c1wiOiBbXG5cdCogICAgICAgICB7XG5cdCogICAgICAgICAgIFwibmFtZVwiOiBcInZpb2xpblwiXG5cdCogICAgICAgICB9XG5cdCogICAgICAgXVxuXHQqICAgICB9LFxuXHQqICAgICB7XG5cdCogICAgICAgXCJuYW1lXCI6IFwid29vZHdpbmRzXCIsXG5cdCogICAgICAgXCJpbnN0cnVtZW50c1wiOiBbXG5cdCogICAgICAgICB7XG5cdCogICAgICAgICAgIFwibmFtZVwiOiBcImZsdXRlXCJcblx0KiAgICAgICAgIH1cblx0KiAgICAgICBdXG5cdCogICAgIH1cblx0KiAgIF0sXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVEZXNjcmlwdGlvbiBRdWVyeSByZWZlcmVuY2VkIHRhYmxlcyB3aXRoIHNwYWNlcyBpbiB0aGVpciBuYW1lc1xuXHQqIElmIHlvdXIgdGFibGUgbmFtZSBjb250YWlucyBzcGFjZXMsIHlvdSBtdXN0IHVzZSBkb3VibGUgcXVvdGVzIGluIHRoZSBgc2VsZWN0YCBzdGF0ZW1lbnQgdG8gcmVmZXJlbmNlIHRoZSB0YWJsZS5cblx0KlxuXHQqIEBleGFtcGxlIFF1ZXJ5IHJlZmVyZW5jZWQgdGFibGVzIHdpdGggc3BhY2VzIGluIHRoZWlyIG5hbWVzXG5cdCogYGBganNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ29yY2hlc3RyYWwgc2VjdGlvbnMnKVxuXHQqICAgLnNlbGVjdChgXG5cdCogICAgIG5hbWUsXG5cdCogICAgIFwibXVzaWNhbCBpbnN0cnVtZW50c1wiIChcblx0KiAgICAgICBuYW1lXG5cdCogICAgIClcblx0KiAgIGApXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBRdWVyeSByZWZlcmVuY2VkIHRhYmxlcyB3aXRoIHNwYWNlcyBpbiB0aGVpciBuYW1lc1xuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgXCJvcmNoZXN0cmFsIHNlY3Rpb25zXCIgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBcIm11c2ljYWwgaW5zdHJ1bWVudHNcIiAoXG5cdCogICAgIGlkIGludDggcHJpbWFyeSBrZXksXG5cdCogICAgIHNlY3Rpb25faWQgaW50OCBub3QgbnVsbCByZWZlcmVuY2VzIFwib3JjaGVzdHJhbCBzZWN0aW9uc1wiLFxuXHQqICAgICBuYW1lIHRleHRcblx0KiAgICk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgXCJvcmNoZXN0cmFsIHNlY3Rpb25zXCIgKGlkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdzdHJpbmdzJyksXG5cdCogICAoMiwgJ3dvb2R3aW5kcycpO1xuXHQqIGluc2VydCBpbnRvXG5cdCogICBcIm11c2ljYWwgaW5zdHJ1bWVudHNcIiAoaWQsIHNlY3Rpb25faWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgMiwgJ2ZsdXRlJyksXG5cdCogICAoMiwgMSwgJ3Zpb2xpbicpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBRdWVyeSByZWZlcmVuY2VkIHRhYmxlcyB3aXRoIHNwYWNlcyBpbiB0aGVpciBuYW1lc1xuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJuYW1lXCI6IFwic3RyaW5nc1wiLFxuXHQqICAgICAgIFwibXVzaWNhbCBpbnN0cnVtZW50c1wiOiBbXG5cdCogICAgICAgICB7XG5cdCogICAgICAgICAgIFwibmFtZVwiOiBcInZpb2xpblwiXG5cdCogICAgICAgICB9XG5cdCogICAgICAgXVxuXHQqICAgICB9LFxuXHQqICAgICB7XG5cdCogICAgICAgXCJuYW1lXCI6IFwid29vZHdpbmRzXCIsXG5cdCogICAgICAgXCJtdXNpY2FsIGluc3RydW1lbnRzXCI6IFtcblx0KiAgICAgICAgIHtcblx0KiAgICAgICAgICAgXCJuYW1lXCI6IFwiZmx1dGVcIlxuXHQqICAgICAgICAgfVxuXHQqICAgICAgIF1cblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZURlc2NyaXB0aW9uIFF1ZXJ5IHJlZmVyZW5jZWQgdGFibGVzIHRocm91Z2ggYSBqb2luIHRhYmxlXG5cdCogSWYgeW91J3JlIGluIGEgc2l0dWF0aW9uIHdoZXJlIHlvdXIgdGFibGVzIGFyZSAqKk5PVCoqIGRpcmVjdGx5XG5cdCogcmVsYXRlZCwgYnV0IGluc3RlYWQgYXJlIGpvaW5lZCBieSBhIF9qb2luIHRhYmxlXywgeW91IGNhbiBzdGlsbCB1c2Vcblx0KiB0aGUgYHNlbGVjdCgpYCBtZXRob2QgdG8gcXVlcnkgdGhlIHJlbGF0ZWQgZGF0YS4gVGhlIGpvaW4gdGFibGUgbmVlZHNcblx0KiB0byBoYXZlIHRoZSBmb3JlaWduIGtleXMgYXMgcGFydCBvZiBpdHMgY29tcG9zaXRlIHByaW1hcnkga2V5LlxuXHQqXG5cdCogQGV4YW1wbGUgUXVlcnkgcmVmZXJlbmNlZCB0YWJsZXMgdGhyb3VnaCBhIGpvaW4gdGFibGVcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgndXNlcnMnKVxuXHQqICAgLnNlbGVjdChgXG5cdCogICAgIG5hbWUsXG5cdCogICAgIHRlYW1zIChcblx0KiAgICAgICBuYW1lXG5cdCogICAgIClcblx0KiAgIGApXG5cdCogICBcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFF1ZXJ5IHJlZmVyZW5jZWQgdGFibGVzIHRocm91Z2ggYSBqb2luIHRhYmxlXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICB1c2VycyAoXG5cdCogICAgIGlkIGludDggcHJpbWFyeSBrZXksXG5cdCogICAgIG5hbWUgdGV4dFxuXHQqICAgKTtcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIHRlYW1zIChcblx0KiAgICAgaWQgaW50OCBwcmltYXJ5IGtleSxcblx0KiAgICAgbmFtZSB0ZXh0XG5cdCogICApO1xuXHQqIC0tIGpvaW4gdGFibGVcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIHVzZXJzX3RlYW1zIChcblx0KiAgICAgdXNlcl9pZCBpbnQ4IG5vdCBudWxsIHJlZmVyZW5jZXMgdXNlcnMsXG5cdCogICAgIHRlYW1faWQgaW50OCBub3QgbnVsbCByZWZlcmVuY2VzIHRlYW1zLFxuXHQqICAgICAtLSBib3RoIGZvcmVpZ24ga2V5cyBtdXN0IGJlIHBhcnQgb2YgYSBjb21wb3NpdGUgcHJpbWFyeSBrZXlcblx0KiAgICAgcHJpbWFyeSBrZXkgKHVzZXJfaWQsIHRlYW1faWQpXG5cdCogICApO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIHVzZXJzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnS2lyYW4nKSxcblx0KiAgICgyLCAnRXZhbicpO1xuXHQqIGluc2VydCBpbnRvXG5cdCogICB0ZWFtcyAoaWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ0dyZWVuJyksXG5cdCogICAoMiwgJ0JsdWUnKTtcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgdXNlcnNfdGVhbXMgKHVzZXJfaWQsIHRlYW1faWQpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgMSksXG5cdCogICAoMSwgMiksXG5cdCogICAoMiwgMik7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFF1ZXJ5IHJlZmVyZW5jZWQgdGFibGVzIHRocm91Z2ggYSBqb2luIHRhYmxlXG5cdCogYGBganNvblxuXHQqICAge1xuXHQqICAgICBcImRhdGFcIjogW1xuXHQqICAgICAgIHtcblx0KiAgICAgICAgIFwibmFtZVwiOiBcIktpcmFuXCIsXG5cdCogICAgICAgICBcInRlYW1zXCI6IFtcblx0KiAgICAgICAgICAge1xuXHQqICAgICAgICAgICAgIFwibmFtZVwiOiBcIkdyZWVuXCJcblx0KiAgICAgICAgICAgfSxcblx0KiAgICAgICAgICAge1xuXHQqICAgICAgICAgICAgIFwibmFtZVwiOiBcIkJsdWVcIlxuXHQqICAgICAgICAgICB9XG5cdCogICAgICAgICBdXG5cdCogICAgICAgfSxcblx0KiAgICAgICB7XG5cdCogICAgICAgICBcIm5hbWVcIjogXCJFdmFuXCIsXG5cdCogICAgICAgICBcInRlYW1zXCI6IFtcblx0KiAgICAgICAgICAge1xuXHQqICAgICAgICAgICAgIFwibmFtZVwiOiBcIkJsdWVcIlxuXHQqICAgICAgICAgICB9XG5cdCogICAgICAgICBdXG5cdCogICAgICAgfVxuXHQqICAgICBdLFxuXHQqICAgICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiAgIH1cblx0KiAgIFxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVEZXNjcmlwdGlvbiBRdWVyeSB0aGUgc2FtZSByZWZlcmVuY2VkIHRhYmxlIG11bHRpcGxlIHRpbWVzXG5cdCogSWYgeW91IG5lZWQgdG8gcXVlcnkgdGhlIHNhbWUgcmVmZXJlbmNlZCB0YWJsZSB0d2ljZSwgdXNlIHRoZSBuYW1lIG9mIHRoZVxuXHQqIGpvaW5lZCBjb2x1bW4gdG8gaWRlbnRpZnkgd2hpY2ggam9pbiB0byB1c2UuIFlvdSBjYW4gYWxzbyBnaXZlIGVhY2hcblx0KiBjb2x1bW4gYW4gYWxpYXMuXG5cdCpcblx0KiBAZXhhbXBsZSBRdWVyeSB0aGUgc2FtZSByZWZlcmVuY2VkIHRhYmxlIG11bHRpcGxlIHRpbWVzXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ21lc3NhZ2VzJylcblx0KiAgIC5zZWxlY3QoYFxuXHQqICAgICBjb250ZW50LFxuXHQqICAgICBmcm9tOnNlbmRlcl9pZChuYW1lKSxcblx0KiAgICAgdG86cmVjZWl2ZXJfaWQobmFtZSlcblx0KiAgIGApXG5cdCpcblx0KiAvLyBUbyBpbmZlciB0eXBlcywgdXNlIHRoZSBuYW1lIG9mIHRoZSB0YWJsZSAoaW4gdGhpcyBjYXNlIGB1c2Vyc2ApIGFuZFxuXHQqIC8vIHRoZSBuYW1lIG9mIHRoZSBmb3JlaWduIGtleSBjb25zdHJhaW50LlxuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnbWVzc2FnZXMnKVxuXHQqICAgLnNlbGVjdChgXG5cdCogICAgIGNvbnRlbnQsXG5cdCogICAgIGZyb206dXNlcnMhbWVzc2FnZXNfc2VuZGVyX2lkX2ZrZXkobmFtZSksXG5cdCogICAgIHRvOnVzZXJzIW1lc3NhZ2VzX3JlY2VpdmVyX2lkX2ZrZXkobmFtZSlcblx0KiAgIGApXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBRdWVyeSB0aGUgc2FtZSByZWZlcmVuY2VkIHRhYmxlIG11bHRpcGxlIHRpbWVzXG5cdCogYGBgc3FsXG5cdCogIGNyZWF0ZSB0YWJsZVxuXHQqICB1c2VycyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqICBjcmVhdGUgdGFibGVcblx0KiAgICBtZXNzYWdlcyAoXG5cdCogICAgICBzZW5kZXJfaWQgaW50OCBub3QgbnVsbCByZWZlcmVuY2VzIHVzZXJzLFxuXHQqICAgICAgcmVjZWl2ZXJfaWQgaW50OCBub3QgbnVsbCByZWZlcmVuY2VzIHVzZXJzLFxuXHQqICAgICAgY29udGVudCB0ZXh0XG5cdCogICAgKTtcblx0KlxuXHQqICBpbnNlcnQgaW50b1xuXHQqICAgIHVzZXJzIChpZCwgbmFtZSlcblx0KiAgdmFsdWVzXG5cdCogICAgKDEsICdLaXJhbicpLFxuXHQqICAgICgyLCAnRXZhbicpO1xuXHQqXG5cdCogIGluc2VydCBpbnRvXG5cdCogICAgbWVzc2FnZXMgKHNlbmRlcl9pZCwgcmVjZWl2ZXJfaWQsIGNvbnRlbnQpXG5cdCogIHZhbHVlc1xuXHQqICAgICgxLCAyLCAn8J+RiycpO1xuXHQqICBgYGBcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgUXVlcnkgdGhlIHNhbWUgcmVmZXJlbmNlZCB0YWJsZSBtdWx0aXBsZSB0aW1lc1xuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJjb250ZW50XCI6IFwi8J+Ri1wiLFxuXHQqICAgICAgIFwiZnJvbVwiOiB7XG5cdCogICAgICAgICBcIm5hbWVcIjogXCJLaXJhblwiXG5cdCogICAgICAgfSxcblx0KiAgICAgICBcInRvXCI6IHtcblx0KiAgICAgICAgIFwibmFtZVwiOiBcIkV2YW5cIlxuXHQqICAgICAgIH1cblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZURlc2NyaXB0aW9uIFF1ZXJ5IG5lc3RlZCBmb3JlaWduIHRhYmxlcyB0aHJvdWdoIGEgam9pbiB0YWJsZVxuXHQqIFlvdSBjYW4gdXNlIHRoZSByZXN1bHQgb2YgYSBqb2luZWQgdGFibGUgdG8gZ2F0aGVyIGRhdGEgaW5cblx0KiBhbm90aGVyIGZvcmVpZ24gdGFibGUuIFdpdGggbXVsdGlwbGUgcmVmZXJlbmNlcyB0byB0aGUgc2FtZSBmb3JlaWduXG5cdCogdGFibGUgeW91IG11c3Qgc3BlY2lmeSB0aGUgY29sdW1uIG9uIHdoaWNoIHRvIGNvbmR1Y3QgdGhlIGpvaW4uXG5cdCpcblx0KiBAZXhhbXBsZSBRdWVyeSBuZXN0ZWQgZm9yZWlnbiB0YWJsZXMgdGhyb3VnaCBhIGpvaW4gdGFibGVcblx0KiBgYGB0c1xuXHQqICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgICAgLmZyb20oJ2dhbWVzJylcblx0KiAgICAgLnNlbGVjdChgXG5cdCogICAgICAgZ2FtZV9pZDppZCxcblx0KiAgICAgICBhd2F5X3RlYW06dGVhbXMhZ2FtZXNfYXdheV90ZWFtX2ZrZXkgKFxuXHQqICAgICAgICAgdXNlcnMgKFxuXHQqICAgICAgICAgICBpZCxcblx0KiAgICAgICAgICAgbmFtZVxuXHQqICAgICAgICAgKVxuXHQqICAgICAgIClcblx0KiAgICAgYClcblx0KiAgIFxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgUXVlcnkgbmVzdGVkIGZvcmVpZ24gdGFibGVzIHRocm91Z2ggYSBqb2luIHRhYmxlXG5cdCogYGBgc3FsXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICB1c2VycyAoXG5cdCogICAgIGlkIGludDggcHJpbWFyeSBrZXksXG5cdCogICAgIG5hbWUgdGV4dFxuXHQqICAgKTtcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIHRlYW1zIChcblx0KiAgICAgaWQgaW50OCBwcmltYXJ5IGtleSxcblx0KiAgICAgbmFtZSB0ZXh0XG5cdCogICApO1xuXHQqIC0tIGpvaW4gdGFibGVcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIHVzZXJzX3RlYW1zIChcblx0KiAgICAgdXNlcl9pZCBpbnQ4IG5vdCBudWxsIHJlZmVyZW5jZXMgdXNlcnMsXG5cdCogICAgIHRlYW1faWQgaW50OCBub3QgbnVsbCByZWZlcmVuY2VzIHRlYW1zLFxuXHQqXG5cdCogICAgIHByaW1hcnkga2V5ICh1c2VyX2lkLCB0ZWFtX2lkKVxuXHQqICAgKTtcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIGdhbWVzIChcblx0KiAgICAgaWQgaW50OCBwcmltYXJ5IGtleSxcblx0KiAgICAgaG9tZV90ZWFtIGludDggbm90IG51bGwgcmVmZXJlbmNlcyB0ZWFtcyxcblx0KiAgICAgYXdheV90ZWFtIGludDggbm90IG51bGwgcmVmZXJlbmNlcyB0ZWFtcyxcblx0KiAgICAgbmFtZSB0ZXh0XG5cdCogICApO1xuXHQqXG5cdCogaW5zZXJ0IGludG8gdXNlcnMgKGlkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdLaXJhbicpLFxuXHQqICAgKDIsICdFdmFuJyk7XG5cdCogaW5zZXJ0IGludG9cblx0KiAgIHRlYW1zIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnR3JlZW4nKSxcblx0KiAgICgyLCAnQmx1ZScpO1xuXHQqIGluc2VydCBpbnRvXG5cdCogICB1c2Vyc190ZWFtcyAodXNlcl9pZCwgdGVhbV9pZClcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAxKSxcblx0KiAgICgxLCAyKSxcblx0KiAgICgyLCAyKTtcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgZ2FtZXMgKGlkLCBob21lX3RlYW0sIGF3YXlfdGVhbSwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAxLCAyLCAnR3JlZW4gdnMgQmx1ZScpLFxuXHQqICAgKDIsIDIsIDEsICdCbHVlIHZzIEdyZWVuJyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFF1ZXJ5IG5lc3RlZCBmb3JlaWduIHRhYmxlcyB0aHJvdWdoIGEgam9pbiB0YWJsZVxuXHQqIGBgYGpzb25cblx0KiAgIHtcblx0KiAgICAgXCJkYXRhXCI6IFtcblx0KiAgICAgICB7XG5cdCogICAgICAgICBcImdhbWVfaWRcIjogMSxcblx0KiAgICAgICAgIFwiYXdheV90ZWFtXCI6IHtcblx0KiAgICAgICAgICAgXCJ1c2Vyc1wiOiBbXG5cdCogICAgICAgICAgICAge1xuXHQqICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuXHQqICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiS2lyYW5cIlxuXHQqICAgICAgICAgICAgIH0sXG5cdCogICAgICAgICAgICAge1xuXHQqICAgICAgICAgICAgICAgXCJpZFwiOiAyLFxuXHQqICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiRXZhblwiXG5cdCogICAgICAgICAgICAgfVxuXHQqICAgICAgICAgICBdXG5cdCogICAgICAgICB9XG5cdCogICAgICAgfSxcblx0KiAgICAgICB7XG5cdCogICAgICAgICBcImdhbWVfaWRcIjogMixcblx0KiAgICAgICAgIFwiYXdheV90ZWFtXCI6IHtcblx0KiAgICAgICAgICAgXCJ1c2Vyc1wiOiBbXG5cdCogICAgICAgICAgICAge1xuXHQqICAgICAgICAgICAgICAgXCJpZFwiOiAxLFxuXHQqICAgICAgICAgICAgICAgXCJuYW1lXCI6IFwiS2lyYW5cIlxuXHQqICAgICAgICAgICAgIH1cblx0KiAgICAgICAgICAgXVxuXHQqICAgICAgICAgfVxuXHQqICAgICAgIH1cblx0KiAgICAgXSxcblx0KiAgICAgXCJzdGF0dXNcIjogMjAwLFxuXHQqICAgICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogICB9XG5cdCogICBcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlRGVzY3JpcHRpb24gRmlsdGVyaW5nIHRocm91Z2ggcmVmZXJlbmNlZCB0YWJsZXNcblx0KiBJZiB0aGUgZmlsdGVyIG9uIGEgcmVmZXJlbmNlZCB0YWJsZSdzIGNvbHVtbiBpcyBub3Qgc2F0aXNmaWVkLCB0aGUgcmVmZXJlbmNlZFxuXHQqIHRhYmxlIHJldHVybnMgYFtdYCBvciBgbnVsbGAgYnV0IHRoZSBwYXJlbnQgdGFibGUgaXMgbm90IGZpbHRlcmVkIG91dC5cblx0KiBJZiB5b3Ugd2FudCB0byBmaWx0ZXIgb3V0IHRoZSBwYXJlbnQgdGFibGUgcm93cywgdXNlIHRoZSBgIWlubmVyYCBoaW50XG5cdCpcblx0KiBAZXhhbXBsZSBGaWx0ZXJpbmcgdGhyb3VnaCByZWZlcmVuY2VkIHRhYmxlc1xuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdpbnN0cnVtZW50cycpXG5cdCogICAuc2VsZWN0KCduYW1lLCBvcmNoZXN0cmFsX3NlY3Rpb25zKCopJylcblx0KiAgIC5lcSgnb3JjaGVzdHJhbF9zZWN0aW9ucy5uYW1lJywgJ3BlcmN1c3Npb24nKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgRmlsdGVyaW5nIHRocm91Z2ggcmVmZXJlbmNlZCB0YWJsZXNcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIG9yY2hlc3RyYWxfc2VjdGlvbnMgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBpbnN0cnVtZW50cyAoXG5cdCogICAgIGlkIGludDggcHJpbWFyeSBrZXksXG5cdCogICAgIHNlY3Rpb25faWQgaW50OCBub3QgbnVsbCByZWZlcmVuY2VzIG9yY2hlc3RyYWxfc2VjdGlvbnMsXG5cdCogICAgIG5hbWUgdGV4dFxuXHQqICAgKTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBvcmNoZXN0cmFsX3NlY3Rpb25zIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnc3RyaW5ncycpLFxuXHQqICAgKDIsICd3b29kd2luZHMnKTtcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgaW5zdHJ1bWVudHMgKGlkLCBzZWN0aW9uX2lkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsIDIsICdmbHV0ZScpLFxuXHQqICAgKDIsIDEsICd2aW9saW4nKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgRmlsdGVyaW5nIHRocm91Z2ggcmVmZXJlbmNlZCB0YWJsZXNcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFtcblx0KiAgICAge1xuXHQqICAgICAgIFwibmFtZVwiOiBcImZsdXRlXCIsXG5cdCogICAgICAgXCJvcmNoZXN0cmFsX3NlY3Rpb25zXCI6IG51bGxcblx0KiAgICAgfSxcblx0KiAgICAge1xuXHQqICAgICAgIFwibmFtZVwiOiBcInZpb2xpblwiLFxuXHQqICAgICAgIFwib3JjaGVzdHJhbF9zZWN0aW9uc1wiOiBudWxsXG5cdCogICAgIH1cblx0KiAgIF0sXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVEZXNjcmlwdGlvbiBRdWVyeWluZyByZWZlcmVuY2VkIHRhYmxlIHdpdGggY291bnRcblx0KiBZb3UgY2FuIGdldCB0aGUgbnVtYmVyIG9mIHJvd3MgaW4gYSByZWxhdGVkIHRhYmxlIGJ5IHVzaW5nIHRoZVxuXHQqICoqY291bnQqKiBwcm9wZXJ0eS5cblx0KlxuXHQqIEBleGFtcGxlIFF1ZXJ5aW5nIHJlZmVyZW5jZWQgdGFibGUgd2l0aCBjb3VudFxuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdvcmNoZXN0cmFsX3NlY3Rpb25zJylcblx0KiAgIC5zZWxlY3QoYCosIGluc3RydW1lbnRzKGNvdW50KWApXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBRdWVyeWluZyByZWZlcmVuY2VkIHRhYmxlIHdpdGggY291bnRcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGUgb3JjaGVzdHJhbF9zZWN0aW9ucyAoXG5cdCogICBcImlkXCIgXCJ1dWlkXCIgcHJpbWFyeSBrZXkgZGVmYXVsdCBcImV4dGVuc2lvbnNcIi5cInV1aWRfZ2VuZXJhdGVfdjRcIigpIG5vdCBudWxsLFxuXHQqICAgXCJuYW1lXCIgdGV4dFxuXHQqICk7XG5cdCpcblx0KiBjcmVhdGUgdGFibGUgY2hhcmFjdGVycyAoXG5cdCogICBcImlkXCIgXCJ1dWlkXCIgcHJpbWFyeSBrZXkgZGVmYXVsdCBcImV4dGVuc2lvbnNcIi5cInV1aWRfZ2VuZXJhdGVfdjRcIigpIG5vdCBudWxsLFxuXHQqICAgXCJuYW1lXCIgdGV4dCxcblx0KiAgIFwic2VjdGlvbl9pZFwiIFwidXVpZFwiIHJlZmVyZW5jZXMgcHVibGljLm9yY2hlc3RyYWxfc2VjdGlvbnMgb24gZGVsZXRlIGNhc2NhZGVcblx0KiApO1xuXHQqXG5cdCogd2l0aCBzZWN0aW9uIGFzIChcblx0KiAgIGluc2VydCBpbnRvIG9yY2hlc3RyYWxfc2VjdGlvbnMgKG5hbWUpXG5cdCogICB2YWx1ZXMgKCdzdHJpbmdzJykgcmV0dXJuaW5nIGlkXG5cdCogKVxuXHQqIGluc2VydCBpbnRvIGluc3RydW1lbnRzIChuYW1lLCBzZWN0aW9uX2lkKSB2YWx1ZXNcblx0KiAoJ3Zpb2xpbicsIChzZWxlY3QgaWQgZnJvbSBzZWN0aW9uKSksXG5cdCogKCd2aW9sYScsIChzZWxlY3QgaWQgZnJvbSBzZWN0aW9uKSksXG5cdCogKCdjZWxsbycsIChzZWxlY3QgaWQgZnJvbSBzZWN0aW9uKSksXG5cdCogKCdkb3VibGUgYmFzcycsIChzZWxlY3QgaWQgZnJvbSBzZWN0aW9uKSk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFF1ZXJ5aW5nIHJlZmVyZW5jZWQgdGFibGUgd2l0aCBjb3VudFxuXHQqIGBgYGpzb25cblx0KiBbXG5cdCogICB7XG5cdCogICAgIFwiaWRcIjogXCI2OTM2OTRlNy1kOTkzLTQzNjAtYTZkNy02Mjk0ZTMyNWQ5YjZcIixcblx0KiAgICAgXCJuYW1lXCI6IFwic3RyaW5nc1wiLFxuXHQqICAgICBcImluc3RydW1lbnRzXCI6IFtcblx0KiAgICAgICB7XG5cdCogICAgICAgICBcImNvdW50XCI6IDRcblx0KiAgICAgICB9XG5cdCogICAgIF1cblx0KiAgIH1cblx0KiBdXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZURlc2NyaXB0aW9uIFF1ZXJ5aW5nIHdpdGggY291bnQgb3B0aW9uXG5cdCogWW91IGNhbiBnZXQgdGhlIG51bWJlciBvZiByb3dzIGJ5IHVzaW5nIHRoZVxuXHQqIFtjb3VudF0oL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvc2VsZWN0I3BhcmFtZXRlcnMpIG9wdGlvbi5cblx0KlxuXHQqIEBleGFtcGxlIFF1ZXJ5aW5nIHdpdGggY291bnQgb3B0aW9uXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGNvdW50LCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdjaGFyYWN0ZXJzJylcblx0KiAgIC5zZWxlY3QoJyonLCB7IGNvdW50OiAnZXhhY3QnLCBoZWFkOiB0cnVlIH0pXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBRdWVyeWluZyB3aXRoIGNvdW50IG9wdGlvblxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY2hhcmFjdGVycyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBjaGFyYWN0ZXJzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnTHVrZScpLFxuXHQqICAgKDIsICdMZWlhJyksXG5cdCogICAoMywgJ0hhbicpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBRdWVyeWluZyB3aXRoIGNvdW50IG9wdGlvblxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImNvdW50XCI6IDMsXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVEZXNjcmlwdGlvbiBRdWVyeWluZyBKU09OIGRhdGFcblx0KiBZb3UgY2FuIHNlbGVjdCBhbmQgZmlsdGVyIGRhdGEgaW5zaWRlIG9mXG5cdCogW0pTT05dKC9kb2NzL2d1aWRlcy9kYXRhYmFzZS9qc29uKSBjb2x1bW5zLiBQb3N0Z3JlcyBvZmZlcnMgc29tZVxuXHQqIFtvcGVyYXRvcnNdKC9kb2NzL2d1aWRlcy9kYXRhYmFzZS9qc29uI3F1ZXJ5LXRoZS1qc29uYi1kYXRhKSBmb3Jcblx0KiBxdWVyeWluZyBKU09OIGRhdGEuXG5cdCpcblx0KiBAZXhhbXBsZSBRdWVyeWluZyBKU09OIGRhdGFcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgndXNlcnMnKVxuXHQqICAgLnNlbGVjdChgXG5cdCogICAgIGlkLCBuYW1lLFxuXHQqICAgICBhZGRyZXNzLT5jaXR5XG5cdCogICBgKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgUXVlcnlpbmcgSlNPTiBkYXRhXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICB1c2VycyAoXG5cdCogICAgIGlkIGludDggcHJpbWFyeSBrZXksXG5cdCogICAgIG5hbWUgdGV4dCxcblx0KiAgICAgYWRkcmVzcyBqc29uYlxuXHQqICAgKTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICB1c2VycyAoaWQsIG5hbWUsIGFkZHJlc3MpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ0Zyb2RvJywgJ3tcImNpdHlcIjpcIkhvYmJpdG9uXCJ9Jyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFF1ZXJ5aW5nIEpTT04gZGF0YVxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJpZFwiOiAxLFxuXHQqICAgICAgIFwibmFtZVwiOiBcIkZyb2RvXCIsXG5cdCogICAgICAgXCJjaXR5XCI6IFwiSG9iYml0b25cIlxuXHQqICAgICB9XG5cdCogICBdLFxuXHQqICAgXCJzdGF0dXNcIjogMjAwLFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlRGVzY3JpcHRpb24gUXVlcnlpbmcgcmVmZXJlbmNlZCB0YWJsZSB3aXRoIGlubmVyIGpvaW5cblx0KiBJZiB5b3UgZG9uJ3Qgd2FudCB0byByZXR1cm4gdGhlIHJlZmVyZW5jZWQgdGFibGUgY29udGVudHMsIHlvdSBjYW4gbGVhdmUgdGhlIHBhcmVudGhlc2lzIGVtcHR5LlxuXHQqIExpa2UgYC5zZWxlY3QoJ25hbWUsIG9yY2hlc3RyYWxfc2VjdGlvbnMhaW5uZXIoKScpYC5cblx0KlxuXHQqIEBleGFtcGxlIFF1ZXJ5aW5nIHJlZmVyZW5jZWQgdGFibGUgd2l0aCBpbm5lciBqb2luXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2luc3RydW1lbnRzJylcblx0KiAgIC5zZWxlY3QoJ25hbWUsIG9yY2hlc3RyYWxfc2VjdGlvbnMhaW5uZXIobmFtZSknKVxuXHQqICAgLmVxKCdvcmNoZXN0cmFsX3NlY3Rpb25zLm5hbWUnLCAnd29vZHdpbmRzJylcblx0KiAgIC5saW1pdCgxKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgUXVlcnlpbmcgcmVmZXJlbmNlZCB0YWJsZSB3aXRoIGlubmVyIGpvaW5cblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGUgb3JjaGVzdHJhbF9zZWN0aW9ucyAoXG5cdCogICBcImlkXCIgXCJ1dWlkXCIgcHJpbWFyeSBrZXkgZGVmYXVsdCBcImV4dGVuc2lvbnNcIi5cInV1aWRfZ2VuZXJhdGVfdjRcIigpIG5vdCBudWxsLFxuXHQqICAgXCJuYW1lXCIgdGV4dFxuXHQqICk7XG5cdCpcblx0KiBjcmVhdGUgdGFibGUgaW5zdHJ1bWVudHMgKFxuXHQqICAgXCJpZFwiIFwidXVpZFwiIHByaW1hcnkga2V5IGRlZmF1bHQgXCJleHRlbnNpb25zXCIuXCJ1dWlkX2dlbmVyYXRlX3Y0XCIoKSBub3QgbnVsbCxcblx0KiAgIFwibmFtZVwiIHRleHQsXG5cdCogICBcInNlY3Rpb25faWRcIiBcInV1aWRcIiByZWZlcmVuY2VzIHB1YmxpYy5vcmNoZXN0cmFsX3NlY3Rpb25zIG9uIGRlbGV0ZSBjYXNjYWRlXG5cdCogKTtcblx0KlxuXHQqIHdpdGggc2VjdGlvbiBhcyAoXG5cdCogICBpbnNlcnQgaW50byBvcmNoZXN0cmFsX3NlY3Rpb25zIChuYW1lKVxuXHQqICAgdmFsdWVzICgnd29vZHdpbmRzJykgcmV0dXJuaW5nIGlkXG5cdCogKVxuXHQqIGluc2VydCBpbnRvIGluc3RydW1lbnRzIChuYW1lLCBzZWN0aW9uX2lkKSB2YWx1ZXNcblx0KiAoJ2ZsdXRlJywgKHNlbGVjdCBpZCBmcm9tIHNlY3Rpb24pKSxcblx0KiAoJ2NsYXJpbmV0JywgKHNlbGVjdCBpZCBmcm9tIHNlY3Rpb24pKSxcblx0KiAoJ2Jhc3Nvb24nLCAoc2VsZWN0IGlkIGZyb20gc2VjdGlvbikpLFxuXHQqICgncGljY29sbycsIChzZWxlY3QgaWQgZnJvbSBzZWN0aW9uKSk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFF1ZXJ5aW5nIHJlZmVyZW5jZWQgdGFibGUgd2l0aCBpbm5lciBqb2luXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcIm5hbWVcIjogXCJmbHV0ZVwiLFxuXHQqICAgICAgIFwib3JjaGVzdHJhbF9zZWN0aW9uc1wiOiB7XCJuYW1lXCI6IFwid29vZHdpbmRzXCJ9XG5cdCogICAgIH1cblx0KiAgIF0sXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVEZXNjcmlwdGlvbiBTd2l0Y2hpbmcgc2NoZW1hcyBwZXIgcXVlcnlcblx0KiBJbiBhZGRpdGlvbiB0byBzZXR0aW5nIHRoZSBzY2hlbWEgZHVyaW5nIGluaXRpYWxpemF0aW9uLCB5b3UgY2FuIGFsc28gc3dpdGNoIHNjaGVtYXMgb24gYSBwZXItcXVlcnkgYmFzaXMuXG5cdCogTWFrZSBzdXJlIHlvdSd2ZSBzZXQgdXAgeW91ciBbZGF0YWJhc2UgcHJpdmlsZWdlcyBhbmQgQVBJIHNldHRpbmdzXSgvZG9jcy9ndWlkZXMvYXBpL3VzaW5nLWN1c3RvbS1zY2hlbWFzKS5cblx0KlxuXHQqIEBleGFtcGxlIFN3aXRjaGluZyBzY2hlbWFzIHBlciBxdWVyeVxuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5zY2hlbWEoJ215c2NoZW1hJylcblx0KiAgIC5mcm9tKCdteXRhYmxlJylcblx0KiAgIC5zZWxlY3QoKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgU3dpdGNoaW5nIHNjaGVtYXMgcGVyIHF1ZXJ5XG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHNjaGVtYSBteXNjaGVtYTtcblx0KlxuXHQqIGNyZWF0ZSB0YWJsZSBteXNjaGVtYS5teXRhYmxlIChcblx0KiAgIGlkIHV1aWQgcHJpbWFyeSBrZXkgZGVmYXVsdCBnZW5fcmFuZG9tX3V1aWQoKSxcblx0KiAgIGRhdGEgdGV4dFxuXHQqICk7XG5cdCpcblx0KiBpbnNlcnQgaW50byBteXNjaGVtYS5teXRhYmxlIChkYXRhKSB2YWx1ZXMgKCdteWRhdGEnKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgU3dpdGNoaW5nIHNjaGVtYXMgcGVyIHF1ZXJ5XG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcImlkXCI6IFwiNDE2MmUwMDgtMjdiMC00YzBmLTgyZGMtY2NhZWVlOWE2MjRkXCIsXG5cdCogICAgICAgXCJkYXRhXCI6IFwibXlkYXRhXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCovXG5cdHNlbGVjdChjb2x1bW5zLCBvcHRpb25zKSB7XG5cdFx0Y29uc3QgeyBoZWFkID0gZmFsc2UsIGNvdW50IH0gPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7fTtcblx0XHRjb25zdCBtZXRob2QgPSBoZWFkID8gXCJIRUFEXCIgOiBcIkdFVFwiO1xuXHRcdGxldCBxdW90ZWQgPSBmYWxzZTtcblx0XHRjb25zdCBjbGVhbmVkQ29sdW1ucyA9IChjb2x1bW5zICE9PSBudWxsICYmIGNvbHVtbnMgIT09IHZvaWQgMCA/IGNvbHVtbnMgOiBcIipcIikuc3BsaXQoXCJcIikubWFwKChjKSA9PiB7XG5cdFx0XHRpZiAoL1xccy8udGVzdChjKSAmJiAhcXVvdGVkKSByZXR1cm4gXCJcIjtcblx0XHRcdGlmIChjID09PSBcIlxcXCJcIikgcXVvdGVkID0gIXF1b3RlZDtcblx0XHRcdHJldHVybiBjO1xuXHRcdH0pLmpvaW4oXCJcIik7XG5cdFx0Y29uc3QgeyB1cmwsIGhlYWRlcnMgfSA9IHRoaXMuY2xvbmVSZXF1ZXN0U3RhdGUoKTtcblx0XHR1cmwuc2VhcmNoUGFyYW1zLnNldChcInNlbGVjdFwiLCBjbGVhbmVkQ29sdW1ucyk7XG5cdFx0aWYgKGNvdW50KSBoZWFkZXJzLmFwcGVuZChcIlByZWZlclwiLCBgY291bnQ9JHtjb3VudH1gKTtcblx0XHRyZXR1cm4gbmV3IFBvc3RncmVzdEZpbHRlckJ1aWxkZXIoe1xuXHRcdFx0bWV0aG9kLFxuXHRcdFx0dXJsLFxuXHRcdFx0aGVhZGVycyxcblx0XHRcdHNjaGVtYTogdGhpcy5zY2hlbWEsXG5cdFx0XHRmZXRjaDogdGhpcy5mZXRjaCxcblx0XHRcdHVybExlbmd0aExpbWl0OiB0aGlzLnVybExlbmd0aExpbWl0LFxuXHRcdFx0cmV0cnk6IHRoaXMucmV0cnlcblx0XHR9KTtcblx0fVxuXHQvKipcblx0KiBQZXJmb3JtIGFuIElOU0VSVCBpbnRvIHRoZSB0YWJsZSBvciB2aWV3LlxuXHQqXG5cdCogQnkgZGVmYXVsdCwgaW5zZXJ0ZWQgcm93cyBhcmUgbm90IHJldHVybmVkLiBUbyByZXR1cm4gaXQsIGNoYWluIHRoZSBjYWxsXG5cdCogd2l0aCBgLnNlbGVjdCgpYC5cblx0KlxuXHQqIEBwYXJhbSB2YWx1ZXMgLSBUaGUgdmFsdWVzIHRvIGluc2VydC4gUGFzcyBhbiBvYmplY3QgdG8gaW5zZXJ0IGEgc2luZ2xlIHJvd1xuXHQqIG9yIGFuIGFycmF5IHRvIGluc2VydCBtdWx0aXBsZSByb3dzLlxuXHQqXG5cdCogQHBhcmFtIG9wdGlvbnMgLSBOYW1lZCBwYXJhbWV0ZXJzXG5cdCpcblx0KiBAcGFyYW0gb3B0aW9ucy5jb3VudCAtIENvdW50IGFsZ29yaXRobSB0byB1c2UgdG8gY291bnQgaW5zZXJ0ZWQgcm93cy5cblx0KlxuXHQqIGBcImV4YWN0XCJgOiBFeGFjdCBidXQgc2xvdyBjb3VudCBhbGdvcml0aG0uIFBlcmZvcm1zIGEgYENPVU5UKCopYCB1bmRlciB0aGVcblx0KiBob29kLlxuXHQqXG5cdCogYFwicGxhbm5lZFwiYDogQXBwcm94aW1hdGVkIGJ1dCBmYXN0IGNvdW50IGFsZ29yaXRobS4gVXNlcyB0aGUgUG9zdGdyZXNcblx0KiBzdGF0aXN0aWNzIHVuZGVyIHRoZSBob29kLlxuXHQqXG5cdCogYFwiZXN0aW1hdGVkXCJgOiBVc2VzIGV4YWN0IGNvdW50IGZvciBsb3cgbnVtYmVycyBhbmQgcGxhbm5lZCBjb3VudCBmb3IgaGlnaFxuXHQqIG51bWJlcnMuXG5cdCpcblx0KiBAcGFyYW0gb3B0aW9ucy5kZWZhdWx0VG9OdWxsIC0gTWFrZSBtaXNzaW5nIGZpZWxkcyBkZWZhdWx0IHRvIGBudWxsYC5cblx0KiBPdGhlcndpc2UsIHVzZSB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbHVtbi4gT25seSBhcHBsaWVzIGZvciBidWxrXG5cdCogaW5zZXJ0cy5cblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqXG5cdCogQGV4YW1wbGUgQ3JlYXRlIGEgcmVjb3JkXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2NvdW50cmllcycpXG5cdCogICAuaW5zZXJ0KHsgaWQ6IDEsIG5hbWU6ICdNb3Jkb3InIH0pXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBDcmVhdGUgYSByZWNvcmRcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIGNvdW50cmllcyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgQ3JlYXRlIGEgcmVjb3JkXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwic3RhdHVzXCI6IDIwMSxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIkNyZWF0ZWRcIlxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIENyZWF0ZSBhIHJlY29yZCBhbmQgcmV0dXJuIGl0XG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2NvdW50cmllcycpXG5cdCogICAuaW5zZXJ0KHsgaWQ6IDEsIG5hbWU6ICdNb3Jkb3InIH0pXG5cdCogICAuc2VsZWN0KClcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIENyZWF0ZSBhIHJlY29yZCBhbmQgcmV0dXJuIGl0XG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBjb3VudHJpZXMgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIENyZWF0ZSBhIHJlY29yZCBhbmQgcmV0dXJuIGl0XG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcImlkXCI6IDEsXG5cdCogICAgICAgXCJuYW1lXCI6IFwiTW9yZG9yXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMSxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIkNyZWF0ZWRcIlxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlRGVzY3JpcHRpb24gQnVsayBjcmVhdGVcblx0KiBBIGJ1bGsgY3JlYXRlIG9wZXJhdGlvbiBpcyBoYW5kbGVkIGluIGEgc2luZ2xlIHRyYW5zYWN0aW9uLlxuXHQqIElmIGFueSBvZiB0aGUgaW5zZXJ0cyBmYWlsLCBub25lIG9mIHRoZSByb3dzIGFyZSBpbnNlcnRlZC5cblx0KlxuXHQqIEBleGFtcGxlIEJ1bGsgY3JlYXRlXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2NvdW50cmllcycpXG5cdCogICAuaW5zZXJ0KFtcblx0KiAgICAgeyBpZDogMSwgbmFtZTogJ01vcmRvcicgfSxcblx0KiAgICAgeyBpZDogMSwgbmFtZTogJ1RoZSBTaGlyZScgfSxcblx0KiAgIF0pXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBCdWxrIGNyZWF0ZVxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY291bnRyaWVzIChpZCBpbnQ4IHByaW1hcnkga2V5LCBuYW1lIHRleHQpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBCdWxrIGNyZWF0ZVxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImVycm9yXCI6IHtcblx0KiAgICAgXCJjb2RlXCI6IFwiMjM1MDVcIixcblx0KiAgICAgXCJkZXRhaWxzXCI6IFwiS2V5IChpZCk9KDEpIGFscmVhZHkgZXhpc3RzLlwiLFxuXHQqICAgICBcImhpbnRcIjogbnVsbCxcblx0KiAgICAgXCJtZXNzYWdlXCI6IFwiZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCBcXFwiY291bnRyaWVzX3BrZXlcXFwiXCJcblx0KiAgIH0sXG5cdCogICBcInN0YXR1c1wiOiA0MDksXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJDb25mbGljdFwiXG5cdCogfVxuXHQqIGBgYFxuXHQqL1xuXHRpbnNlcnQodmFsdWVzLCB7IGNvdW50LCBkZWZhdWx0VG9OdWxsID0gdHJ1ZSB9ID0ge30pIHtcblx0XHR2YXIgX3RoaXMkZmV0Y2g7XG5cdFx0Y29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG5cdFx0Y29uc3QgeyB1cmwsIGhlYWRlcnMgfSA9IHRoaXMuY2xvbmVSZXF1ZXN0U3RhdGUoKTtcblx0XHRpZiAoY291bnQpIGhlYWRlcnMuYXBwZW5kKFwiUHJlZmVyXCIsIGBjb3VudD0ke2NvdW50fWApO1xuXHRcdGlmICghZGVmYXVsdFRvTnVsbCkgaGVhZGVycy5hcHBlbmQoXCJQcmVmZXJcIiwgYG1pc3Npbmc9ZGVmYXVsdGApO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcblx0XHRcdGNvbnN0IGNvbHVtbnMgPSB2YWx1ZXMucmVkdWNlKChhY2MsIHgpID0+IGFjYy5jb25jYXQoT2JqZWN0LmtleXMoeCkpLCBbXSk7XG5cdFx0XHRpZiAoY29sdW1ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IHVuaXF1ZUNvbHVtbnMgPSBbLi4ubmV3IFNldChjb2x1bW5zKV0ubWFwKChjb2x1bW4pID0+IGBcIiR7Y29sdW1ufVwiYCk7XG5cdFx0XHRcdHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiY29sdW1uc1wiLCB1bmlxdWVDb2x1bW5zLmpvaW4oXCIsXCIpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG5ldyBQb3N0Z3Jlc3RGaWx0ZXJCdWlsZGVyKHtcblx0XHRcdG1ldGhvZCxcblx0XHRcdHVybCxcblx0XHRcdGhlYWRlcnMsXG5cdFx0XHRzY2hlbWE6IHRoaXMuc2NoZW1hLFxuXHRcdFx0Ym9keTogdmFsdWVzLFxuXHRcdFx0ZmV0Y2g6IChfdGhpcyRmZXRjaCA9IHRoaXMuZmV0Y2gpICE9PSBudWxsICYmIF90aGlzJGZldGNoICE9PSB2b2lkIDAgPyBfdGhpcyRmZXRjaCA6IGZldGNoLFxuXHRcdFx0dXJsTGVuZ3RoTGltaXQ6IHRoaXMudXJsTGVuZ3RoTGltaXQsXG5cdFx0XHRyZXRyeTogdGhpcy5yZXRyeVxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQqIFBlcmZvcm0gYW4gVVBTRVJUIG9uIHRoZSB0YWJsZSBvciB2aWV3LiBEZXBlbmRpbmcgb24gdGhlIGNvbHVtbihzKSBwYXNzZWRcblx0KiB0byBgb25Db25mbGljdGAsIGAudXBzZXJ0KClgIGFsbG93cyB5b3UgdG8gcGVyZm9ybSB0aGUgZXF1aXZhbGVudCBvZlxuXHQqIGAuaW5zZXJ0KClgIGlmIGEgcm93IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgYG9uQ29uZmxpY3RgIGNvbHVtbnMgZG9lc24ndFxuXHQqIGV4aXN0LCBvciBpZiBpdCBkb2VzIGV4aXN0LCBwZXJmb3JtIGFuIGFsdGVybmF0aXZlIGFjdGlvbiBkZXBlbmRpbmcgb25cblx0KiBgaWdub3JlRHVwbGljYXRlc2AuXG5cdCpcblx0KiBCeSBkZWZhdWx0LCB1cHNlcnRlZCByb3dzIGFyZSBub3QgcmV0dXJuZWQuIFRvIHJldHVybiBpdCwgY2hhaW4gdGhlIGNhbGxcblx0KiB3aXRoIGAuc2VsZWN0KClgLlxuXHQqXG5cdCogQHBhcmFtIHZhbHVlcyAtIFRoZSB2YWx1ZXMgdG8gdXBzZXJ0IHdpdGguIFBhc3MgYW4gb2JqZWN0IHRvIHVwc2VydCBhXG5cdCogc2luZ2xlIHJvdyBvciBhbiBhcnJheSB0byB1cHNlcnQgbXVsdGlwbGUgcm93cy5cblx0KlxuXHQqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xuXHQqXG5cdCogQHBhcmFtIG9wdGlvbnMub25Db25mbGljdCAtIENvbW1hLXNlcGFyYXRlZCBVTklRVUUgY29sdW1uKHMpIHRvIHNwZWNpZnkgaG93XG5cdCogZHVwbGljYXRlIHJvd3MgYXJlIGRldGVybWluZWQuIFR3byByb3dzIGFyZSBkdXBsaWNhdGVzIGlmIGFsbCB0aGVcblx0KiBgb25Db25mbGljdGAgY29sdW1ucyBhcmUgZXF1YWwuXG5cdCpcblx0KiBAcGFyYW0gb3B0aW9ucy5pZ25vcmVEdXBsaWNhdGVzIC0gSWYgYHRydWVgLCBkdXBsaWNhdGUgcm93cyBhcmUgaWdub3JlZC4gSWZcblx0KiBgZmFsc2VgLCBkdXBsaWNhdGUgcm93cyBhcmUgbWVyZ2VkIHdpdGggZXhpc3Rpbmcgcm93cy5cblx0KlxuXHQqIEBwYXJhbSBvcHRpb25zLmNvdW50IC0gQ291bnQgYWxnb3JpdGhtIHRvIHVzZSB0byBjb3VudCB1cHNlcnRlZCByb3dzLlxuXHQqXG5cdCogYFwiZXhhY3RcImA6IEV4YWN0IGJ1dCBzbG93IGNvdW50IGFsZ29yaXRobS4gUGVyZm9ybXMgYSBgQ09VTlQoKilgIHVuZGVyIHRoZVxuXHQqIGhvb2QuXG5cdCpcblx0KiBgXCJwbGFubmVkXCJgOiBBcHByb3hpbWF0ZWQgYnV0IGZhc3QgY291bnQgYWxnb3JpdGhtLiBVc2VzIHRoZSBQb3N0Z3Jlc1xuXHQqIHN0YXRpc3RpY3MgdW5kZXIgdGhlIGhvb2QuXG5cdCpcblx0KiBgXCJlc3RpbWF0ZWRcImA6IFVzZXMgZXhhY3QgY291bnQgZm9yIGxvdyBudW1iZXJzIGFuZCBwbGFubmVkIGNvdW50IGZvciBoaWdoXG5cdCogbnVtYmVycy5cblx0KlxuXHQqIEBwYXJhbSBvcHRpb25zLmRlZmF1bHRUb051bGwgLSBNYWtlIG1pc3NpbmcgZmllbGRzIGRlZmF1bHQgdG8gYG51bGxgLlxuXHQqIE90aGVyd2lzZSwgdXNlIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgY29sdW1uLiBUaGlzIG9ubHkgYXBwbGllcyB3aGVuXG5cdCogaW5zZXJ0aW5nIG5ldyByb3dzLCBub3Qgd2hlbiBtZXJnaW5nIHdpdGggZXhpc3Rpbmcgcm93cyB1bmRlclxuXHQqIGBpZ25vcmVEdXBsaWNhdGVzOiBmYWxzZWAuIFRoaXMgYWxzbyBvbmx5IGFwcGxpZXMgd2hlbiBkb2luZyBidWxrIHVwc2VydHMuXG5cdCpcblx0KiBAZXhhbXBsZSBVcHNlcnQgYSBzaW5nbGUgcm93IHVzaW5nIGEgdW5pcXVlIGtleVxuXHQqIGBgYHRzXG5cdCogLy8gVXBzZXJ0aW5nIGEgc2luZ2xlIHJvdywgb3ZlcndyaXRpbmcgYmFzZWQgb24gdGhlICd1c2VybmFtZScgdW5pcXVlIGNvbHVtblxuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgndXNlcnMnKVxuXHQqICAgLnVwc2VydCh7IHVzZXJuYW1lOiAnc3VwYWJvdCcgfSwgeyBvbkNvbmZsaWN0OiAndXNlcm5hbWUnIH0pXG5cdCpcblx0KiAvLyBFeGFtcGxlIHJlc3BvbnNlOlxuXHQqIC8vIHtcblx0KiAvLyAgIGRhdGE6IFtcblx0KiAvLyAgICAgeyBpZDogNCwgbWVzc2FnZTogJ2JhcicsIHVzZXJuYW1lOiAnc3VwYWJvdCcgfVxuXHQqIC8vICAgXSxcblx0KiAvLyAgIGVycm9yOiBudWxsXG5cdCogLy8gfVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgVXBzZXJ0IHdpdGggY29uZmxpY3QgcmVzb2x1dGlvbiBhbmQgZXhhY3Qgcm93IGNvdW50aW5nXG5cdCogYGBgdHNcblx0KiAvLyBVcHNlcnRpbmcgYW5kIHJldHVybmluZyBleGFjdCBjb3VudFxuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IsIGNvdW50IH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ3VzZXJzJylcblx0KiAgIC51cHNlcnQoXG5cdCogICAgIHtcblx0KiAgICAgICBpZDogMyxcblx0KiAgICAgICBtZXNzYWdlOiAnZm9vJyxcblx0KiAgICAgICB1c2VybmFtZTogJ3N1cGFib3QnXG5cdCogICAgIH0sXG5cdCogICAgIHtcblx0KiAgICAgICBvbkNvbmZsaWN0OiAndXNlcm5hbWUnLFxuXHQqICAgICAgIGNvdW50OiAnZXhhY3QnXG5cdCogICAgIH1cblx0KiAgIClcblx0KlxuXHQqIC8vIEV4YW1wbGUgcmVzcG9uc2U6XG5cdCogLy8ge1xuXHQqIC8vICAgZGF0YTogW1xuXHQqIC8vICAgICB7XG5cdCogLy8gICAgICAgaWQ6IDQyLFxuXHQqIC8vICAgICAgIGhhbmRsZTogXCJzYW9pcnNlXCIsXG5cdCogLy8gICAgICAgZGlzcGxheV9uYW1lOiBcIlNhb2lyc2VcIlxuXHQqIC8vICAgICB9XG5cdCogLy8gICBdLFxuXHQqIC8vICAgY291bnQ6IDEsXG5cdCogLy8gICBlcnJvcjogbnVsbFxuXHQqIC8vIH1cblx0KiBgYGBcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqXG5cdCogQHJlbWFya3Ncblx0KiAtIFByaW1hcnkga2V5cyBtdXN0IGJlIGluY2x1ZGVkIGluIGB2YWx1ZXNgIHRvIHVzZSB1cHNlcnQuXG5cdCpcblx0KiBAZXhhbXBsZSBVcHNlcnQgeW91ciBkYXRhXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2luc3RydW1lbnRzJylcblx0KiAgIC51cHNlcnQoeyBpZDogMSwgbmFtZTogJ3BpYW5vJyB9KVxuXHQqICAgLnNlbGVjdCgpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBVcHNlcnQgeW91ciBkYXRhXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBpbnN0cnVtZW50cyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBpbnN0cnVtZW50cyAoaWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ2hhcnBzaWNob3JkJyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFVwc2VydCB5b3VyIGRhdGFcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFtcblx0KiAgICAge1xuXHQqICAgICAgIFwiaWRcIjogMSxcblx0KiAgICAgICBcIm5hbWVcIjogXCJwaWFub1wiXG5cdCogICAgIH1cblx0KiAgIF0sXG5cdCogICBcInN0YXR1c1wiOiAyMDEsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJDcmVhdGVkXCJcblx0KiB9XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZSBCdWxrIFVwc2VydCB5b3VyIGRhdGFcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnaW5zdHJ1bWVudHMnKVxuXHQqICAgLnVwc2VydChbXG5cdCogICAgIHsgaWQ6IDEsIG5hbWU6ICdwaWFubycgfSxcblx0KiAgICAgeyBpZDogMiwgbmFtZTogJ2hhcnAnIH0sXG5cdCogICBdKVxuXHQqICAgLnNlbGVjdCgpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBCdWxrIFVwc2VydCB5b3VyIGRhdGFcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIGluc3RydW1lbnRzIChpZCBpbnQ4IHByaW1hcnkga2V5LCBuYW1lIHRleHQpO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIGluc3RydW1lbnRzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnaGFycHNpY2hvcmQnKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgQnVsayBVcHNlcnQgeW91ciBkYXRhXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXG5cdCogICAgIHtcblx0KiAgICAgICBcImlkXCI6IDEsXG5cdCogICAgICAgXCJuYW1lXCI6IFwicGlhbm9cIlxuXHQqICAgICB9LFxuXHQqICAgICB7XG5cdCogICAgICAgXCJpZFwiOiAyLFxuXHQqICAgICAgIFwibmFtZVwiOiBcImhhcnBcIlxuXHQqICAgICB9XG5cdCogICBdLFxuXHQqICAgXCJzdGF0dXNcIjogMjAxLFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiQ3JlYXRlZFwiXG5cdCogfVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVEZXNjcmlwdGlvbiBVcHNlcnRpbmcgaW50byB0YWJsZXMgd2l0aCBjb25zdHJhaW50c1xuXHQqIEluIHRoZSBmb2xsb3dpbmcgcXVlcnksIGB1cHNlcnQoKWAgaW1wbGljaXRseSB1c2VzIHRoZSBgaWRgXG5cdCogKHByaW1hcnkga2V5KSBjb2x1bW4gdG8gZGV0ZXJtaW5lIGNvbmZsaWN0cy4gSWYgdGhlcmUgaXMgbm8gZXhpc3Rpbmdcblx0KiByb3cgd2l0aCB0aGUgc2FtZSBgaWRgLCBgdXBzZXJ0KClgIGluc2VydHMgYSBuZXcgcm93LCB3aGljaFxuXHQqIHdpbGwgZmFpbCBpbiB0aGlzIGNhc2UgYXMgdGhlcmUgaXMgYWxyZWFkeSBhIHJvdyB3aXRoIGBoYW5kbGVgIGBcInNhb2lyc2VcImAuXG5cdCogVXNpbmcgdGhlIGBvbkNvbmZsaWN0YCBvcHRpb24sIHlvdSBjYW4gaW5zdHJ1Y3QgYHVwc2VydCgpYCB0byB1c2Vcblx0KiBhbm90aGVyIGNvbHVtbiB3aXRoIGEgdW5pcXVlIGNvbnN0cmFpbnQgdG8gZGV0ZXJtaW5lIGNvbmZsaWN0cy5cblx0KlxuXHQqIEBleGFtcGxlIFVwc2VydGluZyBpbnRvIHRhYmxlcyB3aXRoIGNvbnN0cmFpbnRzXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ3VzZXJzJylcblx0KiAgIC51cHNlcnQoeyBpZDogNDIsIGhhbmRsZTogJ3Nhb2lyc2UnLCBkaXNwbGF5X25hbWU6ICdTYW9pcnNlJyB9KVxuXHQqICAgLnNlbGVjdCgpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBVcHNlcnRpbmcgaW50byB0YWJsZXMgd2l0aCBjb25zdHJhaW50c1xuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgdXNlcnMgKFxuXHQqICAgICBpZCBpbnQ4IGdlbmVyYXRlZCBieSBkZWZhdWx0IGFzIGlkZW50aXR5IHByaW1hcnkga2V5LFxuXHQqICAgICBoYW5kbGUgdGV4dCBub3QgbnVsbCB1bmlxdWUsXG5cdCogICAgIGRpc3BsYXlfbmFtZSB0ZXh0XG5cdCogICApO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIHVzZXJzIChpZCwgaGFuZGxlLCBkaXNwbGF5X25hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ3Nhb2lyc2UnLCBudWxsKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgVXBzZXJ0aW5nIGludG8gdGFibGVzIHdpdGggY29uc3RyYWludHNcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJlcnJvclwiOiB7XG5cdCogICAgIFwiY29kZVwiOiBcIjIzNTA1XCIsXG5cdCogICAgIFwiZGV0YWlsc1wiOiBcIktleSAoaGFuZGxlKT0oc2FvaXJzZSkgYWxyZWFkeSBleGlzdHMuXCIsXG5cdCogICAgIFwiaGludFwiOiBudWxsLFxuXHQqICAgICBcIm1lc3NhZ2VcIjogXCJkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50IFxcXCJ1c2Vyc19oYW5kbGVfa2V5XFxcIlwiXG5cdCogICB9LFxuXHQqICAgXCJzdGF0dXNcIjogNDA5LFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiQ29uZmxpY3RcIlxuXHQqIH1cblx0KiBgYGBcblx0Ki9cblx0dXBzZXJ0KHZhbHVlcywgeyBvbkNvbmZsaWN0LCBpZ25vcmVEdXBsaWNhdGVzID0gZmFsc2UsIGNvdW50LCBkZWZhdWx0VG9OdWxsID0gdHJ1ZSB9ID0ge30pIHtcblx0XHR2YXIgX3RoaXMkZmV0Y2gyO1xuXHRcdGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuXHRcdGNvbnN0IHsgdXJsLCBoZWFkZXJzIH0gPSB0aGlzLmNsb25lUmVxdWVzdFN0YXRlKCk7XG5cdFx0aGVhZGVycy5hcHBlbmQoXCJQcmVmZXJcIiwgYHJlc29sdXRpb249JHtpZ25vcmVEdXBsaWNhdGVzID8gXCJpZ25vcmVcIiA6IFwibWVyZ2VcIn0tZHVwbGljYXRlc2ApO1xuXHRcdGlmIChvbkNvbmZsaWN0ICE9PSB2b2lkIDApIHVybC5zZWFyY2hQYXJhbXMuc2V0KFwib25fY29uZmxpY3RcIiwgb25Db25mbGljdCk7XG5cdFx0aWYgKGNvdW50KSBoZWFkZXJzLmFwcGVuZChcIlByZWZlclwiLCBgY291bnQ9JHtjb3VudH1gKTtcblx0XHRpZiAoIWRlZmF1bHRUb051bGwpIGhlYWRlcnMuYXBwZW5kKFwiUHJlZmVyXCIsIFwibWlzc2luZz1kZWZhdWx0XCIpO1xuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbHVlcykpIHtcblx0XHRcdGNvbnN0IGNvbHVtbnMgPSB2YWx1ZXMucmVkdWNlKChhY2MsIHgpID0+IGFjYy5jb25jYXQoT2JqZWN0LmtleXMoeCkpLCBbXSk7XG5cdFx0XHRpZiAoY29sdW1ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IHVuaXF1ZUNvbHVtbnMgPSBbLi4ubmV3IFNldChjb2x1bW5zKV0ubWFwKChjb2x1bW4pID0+IGBcIiR7Y29sdW1ufVwiYCk7XG5cdFx0XHRcdHVybC5zZWFyY2hQYXJhbXMuc2V0KFwiY29sdW1uc1wiLCB1bmlxdWVDb2x1bW5zLmpvaW4oXCIsXCIpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG5ldyBQb3N0Z3Jlc3RGaWx0ZXJCdWlsZGVyKHtcblx0XHRcdG1ldGhvZCxcblx0XHRcdHVybCxcblx0XHRcdGhlYWRlcnMsXG5cdFx0XHRzY2hlbWE6IHRoaXMuc2NoZW1hLFxuXHRcdFx0Ym9keTogdmFsdWVzLFxuXHRcdFx0ZmV0Y2g6IChfdGhpcyRmZXRjaDIgPSB0aGlzLmZldGNoKSAhPT0gbnVsbCAmJiBfdGhpcyRmZXRjaDIgIT09IHZvaWQgMCA/IF90aGlzJGZldGNoMiA6IGZldGNoLFxuXHRcdFx0dXJsTGVuZ3RoTGltaXQ6IHRoaXMudXJsTGVuZ3RoTGltaXQsXG5cdFx0XHRyZXRyeTogdGhpcy5yZXRyeVxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQqIFBlcmZvcm0gYW4gVVBEQVRFIG9uIHRoZSB0YWJsZSBvciB2aWV3LlxuXHQqXG5cdCogQnkgZGVmYXVsdCwgdXBkYXRlZCByb3dzIGFyZSBub3QgcmV0dXJuZWQuIFRvIHJldHVybiBpdCwgY2hhaW4gdGhlIGNhbGxcblx0KiB3aXRoIGAuc2VsZWN0KClgIGFmdGVyIGZpbHRlcnMuXG5cdCpcblx0KiBAcGFyYW0gdmFsdWVzIC0gVGhlIHZhbHVlcyB0byB1cGRhdGUgd2l0aFxuXHQqXG5cdCogQHBhcmFtIG9wdGlvbnMgLSBOYW1lZCBwYXJhbWV0ZXJzXG5cdCpcblx0KiBAcGFyYW0gb3B0aW9ucy5jb3VudCAtIENvdW50IGFsZ29yaXRobSB0byB1c2UgdG8gY291bnQgdXBkYXRlZCByb3dzLlxuXHQqXG5cdCogYFwiZXhhY3RcImA6IEV4YWN0IGJ1dCBzbG93IGNvdW50IGFsZ29yaXRobS4gUGVyZm9ybXMgYSBgQ09VTlQoKilgIHVuZGVyIHRoZVxuXHQqIGhvb2QuXG5cdCpcblx0KiBgXCJwbGFubmVkXCJgOiBBcHByb3hpbWF0ZWQgYnV0IGZhc3QgY291bnQgYWxnb3JpdGhtLiBVc2VzIHRoZSBQb3N0Z3Jlc1xuXHQqIHN0YXRpc3RpY3MgdW5kZXIgdGhlIGhvb2QuXG5cdCpcblx0KiBgXCJlc3RpbWF0ZWRcImA6IFVzZXMgZXhhY3QgY291bnQgZm9yIGxvdyBudW1iZXJzIGFuZCBwbGFubmVkIGNvdW50IGZvciBoaWdoXG5cdCogbnVtYmVycy5cblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqXG5cdCogQHJlbWFya3Ncblx0KiAtIGB1cGRhdGUoKWAgc2hvdWxkIGFsd2F5cyBiZSBjb21iaW5lZCB3aXRoIFtGaWx0ZXJzXSgvZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC91c2luZy1maWx0ZXJzKSB0byB0YXJnZXQgdGhlIGl0ZW0ocykgeW91IHdpc2ggdG8gdXBkYXRlLlxuXHQqXG5cdCogQGV4YW1wbGUgVXBkYXRpbmcgeW91ciBkYXRhXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ2luc3RydW1lbnRzJylcblx0KiAgIC51cGRhdGUoeyBuYW1lOiAncGlhbm8nIH0pXG5cdCogICAuZXEoJ2lkJywgMSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFVwZGF0aW5nIHlvdXIgZGF0YVxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgaW5zdHJ1bWVudHMgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgaW5zdHJ1bWVudHMgKGlkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdoYXJwc2ljaG9yZCcpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBVcGRhdGluZyB5b3VyIGRhdGFcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJzdGF0dXNcIjogMjA0LFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiTm8gQ29udGVudFwiXG5cdCogfVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgVXBkYXRlIGEgcmVjb3JkIGFuZCByZXR1cm4gaXRcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnaW5zdHJ1bWVudHMnKVxuXHQqICAgLnVwZGF0ZSh7IG5hbWU6ICdwaWFubycgfSlcblx0KiAgIC5lcSgnaWQnLCAxKVxuXHQqICAgLnNlbGVjdCgpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBVcGRhdGUgYSByZWNvcmQgYW5kIHJldHVybiBpdFxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgaW5zdHJ1bWVudHMgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgaW5zdHJ1bWVudHMgKGlkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdoYXJwc2ljaG9yZCcpO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBVcGRhdGUgYSByZWNvcmQgYW5kIHJldHVybiBpdFxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJpZFwiOiAxLFxuXHQqICAgICAgIFwibmFtZVwiOiBcInBpYW5vXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZURlc2NyaXB0aW9uIFVwZGF0aW5nIEpTT04gZGF0YVxuXHQqIFBvc3RncmVzIG9mZmVycyBzb21lXG5cdCogW29wZXJhdG9yc10oL2RvY3MvZ3VpZGVzL2RhdGFiYXNlL2pzb24jcXVlcnktdGhlLWpzb25iLWRhdGEpIGZvclxuXHQqIHdvcmtpbmcgd2l0aCBKU09OIGRhdGEuIEN1cnJlbnRseSwgaXQgaXMgb25seSBwb3NzaWJsZSB0byB1cGRhdGUgdGhlIGVudGlyZSBKU09OIGRvY3VtZW50LlxuXHQqXG5cdCogQGV4YW1wbGUgVXBkYXRpbmcgSlNPTiBkYXRhXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLmZyb20oJ3VzZXJzJylcblx0KiAgIC51cGRhdGUoe1xuXHQqICAgICBhZGRyZXNzOiB7XG5cdCogICAgICAgc3RyZWV0OiAnTWVscm9zZSBQbGFjZScsXG5cdCogICAgICAgcG9zdGNvZGU6IDkwMjEwXG5cdCogICAgIH1cblx0KiAgIH0pXG5cdCogICAuZXEoJ2FkZHJlc3MtPnBvc3Rjb2RlJywgOTAyMTApXG5cdCogICAuc2VsZWN0KClcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIFVwZGF0aW5nIEpTT04gZGF0YVxuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgdXNlcnMgKFxuXHQqICAgICBpZCBpbnQ4IHByaW1hcnkga2V5LFxuXHQqICAgICBuYW1lIHRleHQsXG5cdCogICAgIGFkZHJlc3MganNvbmJcblx0KiAgICk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgdXNlcnMgKGlkLCBuYW1lLCBhZGRyZXNzKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdNaWNoYWVsJywgJ3sgXCJwb3N0Y29kZVwiOiA5MDIxMCB9Jyk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIFVwZGF0aW5nIEpTT04gZGF0YVxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJpZFwiOiAxLFxuXHQqICAgICAgIFwibmFtZVwiOiBcIk1pY2hhZWxcIixcblx0KiAgICAgICBcImFkZHJlc3NcIjoge1xuXHQqICAgICAgICAgXCJzdHJlZXRcIjogXCJNZWxyb3NlIFBsYWNlXCIsXG5cdCogICAgICAgICBcInBvc3Rjb2RlXCI6IDkwMjEwXG5cdCogICAgICAgfVxuXHQqICAgICB9XG5cdCogICBdLFxuXHQqICAgXCJzdGF0dXNcIjogMjAwLFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqIH1cblx0KiBgYGBcblx0Ki9cblx0dXBkYXRlKHZhbHVlcywgeyBjb3VudCB9ID0ge30pIHtcblx0XHR2YXIgX3RoaXMkZmV0Y2gzO1xuXHRcdGNvbnN0IG1ldGhvZCA9IFwiUEFUQ0hcIjtcblx0XHRjb25zdCB7IHVybCwgaGVhZGVycyB9ID0gdGhpcy5jbG9uZVJlcXVlc3RTdGF0ZSgpO1xuXHRcdGlmIChjb3VudCkgaGVhZGVycy5hcHBlbmQoXCJQcmVmZXJcIiwgYGNvdW50PSR7Y291bnR9YCk7XG5cdFx0cmV0dXJuIG5ldyBQb3N0Z3Jlc3RGaWx0ZXJCdWlsZGVyKHtcblx0XHRcdG1ldGhvZCxcblx0XHRcdHVybCxcblx0XHRcdGhlYWRlcnMsXG5cdFx0XHRzY2hlbWE6IHRoaXMuc2NoZW1hLFxuXHRcdFx0Ym9keTogdmFsdWVzLFxuXHRcdFx0ZmV0Y2g6IChfdGhpcyRmZXRjaDMgPSB0aGlzLmZldGNoKSAhPT0gbnVsbCAmJiBfdGhpcyRmZXRjaDMgIT09IHZvaWQgMCA/IF90aGlzJGZldGNoMyA6IGZldGNoLFxuXHRcdFx0dXJsTGVuZ3RoTGltaXQ6IHRoaXMudXJsTGVuZ3RoTGltaXQsXG5cdFx0XHRyZXRyeTogdGhpcy5yZXRyeVxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQqIFBlcmZvcm0gYSBERUxFVEUgb24gdGhlIHRhYmxlIG9yIHZpZXcuXG5cdCpcblx0KiBCeSBkZWZhdWx0LCBkZWxldGVkIHJvd3MgYXJlIG5vdCByZXR1cm5lZC4gVG8gcmV0dXJuIGl0LCBjaGFpbiB0aGUgY2FsbFxuXHQqIHdpdGggYC5zZWxlY3QoKWAgYWZ0ZXIgZmlsdGVycy5cblx0KlxuXHQqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xuXHQqXG5cdCogQHBhcmFtIG9wdGlvbnMuY291bnQgLSBDb3VudCBhbGdvcml0aG0gdG8gdXNlIHRvIGNvdW50IGRlbGV0ZWQgcm93cy5cblx0KlxuXHQqIGBcImV4YWN0XCJgOiBFeGFjdCBidXQgc2xvdyBjb3VudCBhbGdvcml0aG0uIFBlcmZvcm1zIGEgYENPVU5UKCopYCB1bmRlciB0aGVcblx0KiBob29kLlxuXHQqXG5cdCogYFwicGxhbm5lZFwiYDogQXBwcm94aW1hdGVkIGJ1dCBmYXN0IGNvdW50IGFsZ29yaXRobS4gVXNlcyB0aGUgUG9zdGdyZXNcblx0KiBzdGF0aXN0aWNzIHVuZGVyIHRoZSBob29kLlxuXHQqXG5cdCogYFwiZXN0aW1hdGVkXCJgOiBVc2VzIGV4YWN0IGNvdW50IGZvciBsb3cgbnVtYmVycyBhbmQgcGxhbm5lZCBjb3VudCBmb3IgaGlnaFxuXHQqIG51bWJlcnMuXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBgZGVsZXRlKClgIHNob3VsZCBhbHdheXMgYmUgY29tYmluZWQgd2l0aCBbZmlsdGVyc10oL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvdXNpbmctZmlsdGVycykgdG8gdGFyZ2V0IHRoZSBpdGVtKHMpIHlvdSB3aXNoIHRvIGRlbGV0ZS5cblx0KiAtIElmIHlvdSB1c2UgYGRlbGV0ZSgpYCB3aXRoIGZpbHRlcnMgYW5kIHlvdSBoYXZlXG5cdCogICBbUkxTXSgvZG9jcy9sZWFybi9hdXRoLWRlZXAtZGl2ZS9hdXRoLXJvdy1sZXZlbC1zZWN1cml0eSkgZW5hYmxlZCwgb25seVxuXHQqICAgcm93cyB2aXNpYmxlIHRocm91Z2ggYFNFTEVDVGAgcG9saWNpZXMgYXJlIGRlbGV0ZWQuIE5vdGUgdGhhdCBieSBkZWZhdWx0XG5cdCogICBubyByb3dzIGFyZSB2aXNpYmxlLCBzbyB5b3UgbmVlZCBhdCBsZWFzdCBvbmUgYFNFTEVDVGAvYEFMTGAgcG9saWN5IHRoYXRcblx0KiAgIG1ha2VzIHRoZSByb3dzIHZpc2libGUuXG5cdCogLSBXaGVuIHVzaW5nIGBkZWxldGUoKS5pbigpYCwgc3BlY2lmeSBhbiBhcnJheSBvZiB2YWx1ZXMgdG8gdGFyZ2V0IG11bHRpcGxlIHJvd3Mgd2l0aCBhIHNpbmdsZSBxdWVyeS4gVGhpcyBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBiYXRjaCBkZWxldGluZyBlbnRyaWVzIHRoYXQgc2hhcmUgY29tbW9uIGNyaXRlcmlhLCBzdWNoIGFzIGRlbGV0aW5nIHVzZXJzIGJ5IHRoZWlyIElEcy4gRW5zdXJlIHRoYXQgdGhlIGFycmF5IHlvdSBwcm92aWRlIGFjY3VyYXRlbHkgcmVwcmVzZW50cyBhbGwgcmVjb3JkcyB5b3UgaW50ZW5kIHRvIGRlbGV0ZSB0byBhdm9pZCB1bmludGVuZGVkIGRhdGEgcmVtb3ZhbC5cblx0KlxuXHQqIEBleGFtcGxlIERlbGV0ZSBhIHNpbmdsZSByZWNvcmRcblx0KiBgYGB0c1xuXHQqIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdjb3VudHJpZXMnKVxuXHQqICAgLmRlbGV0ZSgpXG5cdCogICAuZXEoJ2lkJywgMSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIERlbGV0ZSBhIHNpbmdsZSByZWNvcmRcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIGNvdW50cmllcyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBjb3VudHJpZXMgKGlkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdNb3Jkb3InKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgRGVsZXRlIGEgc2luZ2xlIHJlY29yZFxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcInN0YXR1c1wiOiAyMDQsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJObyBDb250ZW50XCJcblx0KiB9XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZSBEZWxldGUgYSByZWNvcmQgYW5kIHJldHVybiBpdFxuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5mcm9tKCdjb3VudHJpZXMnKVxuXHQqICAgLmRlbGV0ZSgpXG5cdCogICAuZXEoJ2lkJywgMSlcblx0KiAgIC5zZWxlY3QoKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgRGVsZXRlIGEgcmVjb3JkIGFuZCByZXR1cm4gaXRcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgdGFibGVcblx0KiAgIGNvdW50cmllcyAoaWQgaW50OCBwcmltYXJ5IGtleSwgbmFtZSB0ZXh0KTtcblx0KlxuXHQqIGluc2VydCBpbnRvXG5cdCogICBjb3VudHJpZXMgKGlkLCBuYW1lKVxuXHQqIHZhbHVlc1xuXHQqICAgKDEsICdNb3Jkb3InKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgRGVsZXRlIGEgcmVjb3JkIGFuZCByZXR1cm4gaXRcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFtcblx0KiAgICAge1xuXHQqICAgICAgIFwiaWRcIjogMSxcblx0KiAgICAgICBcIm5hbWVcIjogXCJNb3Jkb3JcIlxuXHQqICAgICB9XG5cdCogICBdLFxuXHQqICAgXCJzdGF0dXNcIjogMjAwLFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIERlbGV0ZSBtdWx0aXBsZSByZWNvcmRzXG5cdCogYGBgdHNcblx0KiBjb25zdCByZXNwb25zZSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuZnJvbSgnY291bnRyaWVzJylcblx0KiAgIC5kZWxldGUoKVxuXHQqICAgLmluKCdpZCcsIFsxLCAyLCAzXSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIERlbGV0ZSBtdWx0aXBsZSByZWNvcmRzXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIHRhYmxlXG5cdCogICBjb3VudHJpZXMgKGlkIGludDggcHJpbWFyeSBrZXksIG5hbWUgdGV4dCk7XG5cdCpcblx0KiBpbnNlcnQgaW50b1xuXHQqICAgY291bnRyaWVzIChpZCwgbmFtZSlcblx0KiB2YWx1ZXNcblx0KiAgICgxLCAnUm9oYW4nKSwgKDIsICdUaGUgU2hpcmUnKSwgKDMsICdNb3Jkb3InKTtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgRGVsZXRlIG11bHRpcGxlIHJlY29yZHNcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJzdGF0dXNcIjogMjA0LFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiTm8gQ29udGVudFwiXG5cdCogfVxuXHQqIGBgYFxuXHQqL1xuXHRkZWxldGUoeyBjb3VudCB9ID0ge30pIHtcblx0XHR2YXIgX3RoaXMkZmV0Y2g0O1xuXHRcdGNvbnN0IG1ldGhvZCA9IFwiREVMRVRFXCI7XG5cdFx0Y29uc3QgeyB1cmwsIGhlYWRlcnMgfSA9IHRoaXMuY2xvbmVSZXF1ZXN0U3RhdGUoKTtcblx0XHRpZiAoY291bnQpIGhlYWRlcnMuYXBwZW5kKFwiUHJlZmVyXCIsIGBjb3VudD0ke2NvdW50fWApO1xuXHRcdHJldHVybiBuZXcgUG9zdGdyZXN0RmlsdGVyQnVpbGRlcih7XG5cdFx0XHRtZXRob2QsXG5cdFx0XHR1cmwsXG5cdFx0XHRoZWFkZXJzLFxuXHRcdFx0c2NoZW1hOiB0aGlzLnNjaGVtYSxcblx0XHRcdGZldGNoOiAoX3RoaXMkZmV0Y2g0ID0gdGhpcy5mZXRjaCkgIT09IG51bGwgJiYgX3RoaXMkZmV0Y2g0ICE9PSB2b2lkIDAgPyBfdGhpcyRmZXRjaDQgOiBmZXRjaCxcblx0XHRcdHVybExlbmd0aExpbWl0OiB0aGlzLnVybExlbmd0aExpbWl0LFxuXHRcdFx0cmV0cnk6IHRoaXMucmV0cnlcblx0XHR9KTtcblx0fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gXFwwQG94Yy1wcm9qZWN0K3J1bnRpbWVAMC4xMDEuMC9oZWxwZXJzL3R5cGVvZi5qc1xuZnVuY3Rpb24gX3R5cGVvZihvKSB7XG5cdFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblx0cmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbihvJDEpIHtcblx0XHRyZXR1cm4gdHlwZW9mIG8kMTtcblx0fSA6IGZ1bmN0aW9uKG8kMSkge1xuXHRcdHJldHVybiBvJDEgJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgbyQxLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyQxICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvJDE7XG5cdH0sIF90eXBlb2Yobyk7XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIFxcMEBveGMtcHJvamVjdCtydW50aW1lQDAuMTAxLjAvaGVscGVycy90b1ByaW1pdGl2ZS5qc1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuXHRpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcblx0dmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG5cdGlmICh2b2lkIDAgIT09IGUpIHtcblx0XHR2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcblx0XHRpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG5cdH1cblx0cmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gXFwwQG94Yy1wcm9qZWN0K3J1bnRpbWVAMC4xMDEuMC9oZWxwZXJzL3RvUHJvcGVydHlLZXkuanNcbmZ1bmN0aW9uIHRvUHJvcGVydHlLZXkodCkge1xuXHR2YXIgaSA9IHRvUHJpbWl0aXZlKHQsIFwic3RyaW5nXCIpO1xuXHRyZXR1cm4gXCJzeW1ib2xcIiA9PSBfdHlwZW9mKGkpID8gaSA6IGkgKyBcIlwiO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBcXDBAb3hjLXByb2plY3QrcnVudGltZUAwLjEwMS4wL2hlbHBlcnMvZGVmaW5lUHJvcGVydHkuanNcbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShlLCByLCB0KSB7XG5cdHJldHVybiAociA9IHRvUHJvcGVydHlLZXkocikpIGluIGUgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgciwge1xuXHRcdHZhbHVlOiB0LFxuXHRcdGVudW1lcmFibGU6ICEwLFxuXHRcdGNvbmZpZ3VyYWJsZTogITAsXG5cdFx0d3JpdGFibGU6ICEwXG5cdH0pIDogZVtyXSA9IHQsIGU7XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIFxcMEBveGMtcHJvamVjdCtydW50aW1lQDAuMTAxLjAvaGVscGVycy9vYmplY3RTcHJlYWQyLmpzXG5mdW5jdGlvbiBvd25LZXlzKGUsIHIpIHtcblx0dmFyIHQgPSBPYmplY3Qua2V5cyhlKTtcblx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHR2YXIgbyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7XG5cdFx0ciAmJiAobyA9IG8uZmlsdGVyKGZ1bmN0aW9uKHIkMSkge1xuXHRcdFx0cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSwgciQxKS5lbnVtZXJhYmxlO1xuXHRcdH0pKSwgdC5wdXNoLmFwcGx5KHQsIG8pO1xuXHR9XG5cdHJldHVybiB0O1xufVxuZnVuY3Rpb24gX29iamVjdFNwcmVhZDIoZSkge1xuXHRmb3IgKHZhciByID0gMTsgciA8IGFyZ3VtZW50cy5sZW5ndGg7IHIrKykge1xuXHRcdHZhciB0ID0gbnVsbCAhPSBhcmd1bWVudHNbcl0gPyBhcmd1bWVudHNbcl0gOiB7fTtcblx0XHRyICUgMiA/IG93bktleXMoT2JqZWN0KHQpLCAhMCkuZm9yRWFjaChmdW5jdGlvbihyJDEpIHtcblx0XHRcdF9kZWZpbmVQcm9wZXJ0eShlLCByJDEsIHRbciQxXSk7XG5cdFx0fSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGUsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHQpKSA6IG93bktleXMoT2JqZWN0KHQpKS5mb3JFYWNoKGZ1bmN0aW9uKHIkMSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIkMSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LCByJDEpKTtcblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gZTtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL1Bvc3RncmVzdENsaWVudC50c1xuLyoqXG4qIFBvc3RnUkVTVCBjbGllbnQuXG4qXG4qIEB0eXBlUGFyYW0gRGF0YWJhc2UgLSBUeXBlcyBmb3IgdGhlIHNjaGVtYSBmcm9tIHRoZSBbdHlwZVxuKiBnZW5lcmF0b3JdKGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvbmV4dC90eXBlc2NyaXB0LXN1cHBvcnQpXG4qXG4qIEB0eXBlUGFyYW0gU2NoZW1hTmFtZSAtIFBvc3RncmVzIHNjaGVtYSB0byBzd2l0Y2ggdG8uIE11c3QgYmUgYSBzdHJpbmdcbiogbGl0ZXJhbCwgdGhlIHNhbWUgb25lIHBhc3NlZCB0byB0aGUgY29uc3RydWN0b3IuIElmIHRoZSBzY2hlbWEgaXMgbm90XG4qIGBcInB1YmxpY1wiYCwgdGhpcyBtdXN0IGJlIHN1cHBsaWVkIG1hbnVhbGx5LlxuKi9cbnZhciBQb3N0Z3Jlc3RDbGllbnQgPSBjbGFzcyBQb3N0Z3Jlc3RDbGllbnQge1xuXHQvKipcblx0KiBDcmVhdGVzIGEgUG9zdGdSRVNUIGNsaWVudC5cblx0KlxuXHQqIEBwYXJhbSB1cmwgLSBVUkwgb2YgdGhlIFBvc3RnUkVTVCBlbmRwb2ludFxuXHQqIEBwYXJhbSBvcHRpb25zIC0gTmFtZWQgcGFyYW1ldGVyc1xuXHQqIEBwYXJhbSBvcHRpb25zLmhlYWRlcnMgLSBDdXN0b20gaGVhZGVyc1xuXHQqIEBwYXJhbSBvcHRpb25zLnNjaGVtYSAtIFBvc3RncmVzIHNjaGVtYSB0byBzd2l0Y2ggdG9cblx0KiBAcGFyYW0gb3B0aW9ucy5mZXRjaCAtIEN1c3RvbSBmZXRjaFxuXHQqIEBwYXJhbSBvcHRpb25zLnRpbWVvdXQgLSBPcHRpb25hbCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgYWxsIHJlcXVlc3RzLiBXaGVuIHNldCwgcmVxdWVzdHMgd2lsbCBhdXRvbWF0aWNhbGx5IGFib3J0IGFmdGVyIHRoaXMgZHVyYXRpb24gdG8gcHJldmVudCBpbmRlZmluaXRlIGhhbmdzLlxuXHQqIEBwYXJhbSBvcHRpb25zLnVybExlbmd0aExpbWl0IC0gTWF4aW11bSBVUkwgbGVuZ3RoIGluIGNoYXJhY3RlcnMgYmVmb3JlIHdhcm5pbmdzL2Vycm9ycyBhcmUgdHJpZ2dlcmVkLiBEZWZhdWx0cyB0byA4MDAwLlxuXHQqIEBwYXJhbSBvcHRpb25zLnJldHJ5IC0gRW5hYmxlIG9yIGRpc2FibGUgYXV0b21hdGljIHJldHJpZXMgZm9yIHRyYW5zaWVudCBlcnJvcnMuXG5cdCogICBXaGVuIGVuYWJsZWQsIGlkZW1wb3RlbnQgcmVxdWVzdHMgKEdFVCwgSEVBRCwgT1BUSU9OUykgdGhhdCBmYWlsIHdpdGggbmV0d29ya1xuXHQqICAgZXJyb3JzIG9yIEhUVFAgNTAzLzUyMCByZXNwb25zZXMgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHJldHJpZWQgdXAgdG8gMyB0aW1lc1xuXHQqICAgd2l0aCBleHBvbmVudGlhbCBiYWNrb2ZmICgxcywgMnMsIDRzKS4gRGVmYXVsdHMgdG8gYHRydWVgLlxuXHQqIEBleGFtcGxlIFVzaW5nIHN1cGFiYXNlLWpzIChyZWNvbW1lbmRlZClcblx0KiBgYGB0c1xuXHQqIGltcG9ydCB7IGNyZWF0ZUNsaWVudCB9IGZyb20gJ0BzdXBhYmFzZS9zdXBhYmFzZS1qcydcblx0KlxuXHQqIGNvbnN0IHN1cGFiYXNlID0gY3JlYXRlQ2xpZW50KCdodHRwczovL3h5emNvbXBhbnkuc3VwYWJhc2UuY28nLCAneW91ci1wdWJsaXNoYWJsZS1rZXknKVxuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLmZyb20oJ3Byb2ZpbGVzJykuc2VsZWN0KCcqJylcblx0KiBgYGBcblx0KlxuXHQqIEBjYXRlZ29yeSBEYXRhYmFzZVxuXHQqXG5cdCogQHJlbWFya3Ncblx0KiAtIEEgYHRpbWVvdXRgIG9wdGlvbiAoaW4gbWlsbGlzZWNvbmRzKSBjYW4gYmUgc2V0IHRvIGF1dG9tYXRpY2FsbHkgYWJvcnQgcmVxdWVzdHMgdGhhdCB0YWtlIHRvbyBsb25nLlxuXHQqIC0gQSBgdXJsTGVuZ3RoTGltaXRgIG9wdGlvbiAoZGVmYXVsdDogODAwMCkgY2FuIGJlIHNldCB0byBjb250cm9sIHdoZW4gVVJMIGxlbmd0aCB3YXJuaW5ncyBhcmUgaW5jbHVkZWQgaW4gZXJyb3IgbWVzc2FnZXMgZm9yIGFib3J0ZWQgcmVxdWVzdHMuXG5cdCpcblx0KiBAZXhhbXBsZSBTdGFuZGFsb25lIGltcG9ydCBmb3IgYnVuZGxlLXNlbnNpdGl2ZSBlbnZpcm9ubWVudHNcblx0KiBgYGB0c1xuXHQqIGltcG9ydCB7IFBvc3RncmVzdENsaWVudCB9IGZyb20gJ0BzdXBhYmFzZS9wb3N0Z3Jlc3QtanMnXG5cdCpcblx0KiBjb25zdCBwb3N0Z3Jlc3QgPSBuZXcgUG9zdGdyZXN0Q2xpZW50KCdodHRwczovL3h5emNvbXBhbnkuc3VwYWJhc2UuY28vcmVzdC92MScsIHtcblx0KiAgIGhlYWRlcnM6IHsgYXBpa2V5OiAneW91ci1wdWJsaXNoYWJsZS1rZXknIH0sXG5cdCogICBzY2hlbWE6ICdwdWJsaWMnLFxuXHQqICAgdGltZW91dDogMzAwMDAsIC8vIDMwIHNlY29uZCB0aW1lb3V0XG5cdCogfSlcblx0KiBgYGBcblx0Ki9cblx0Y29uc3RydWN0b3IodXJsLCB7IGhlYWRlcnMgPSB7fSwgc2NoZW1hLCBmZXRjaDogZmV0Y2gkMSwgdGltZW91dCwgdXJsTGVuZ3RoTGltaXQgPSA4ZTMsIHJldHJ5IH0gPSB7fSkge1xuXHRcdHRoaXMudXJsID0gdXJsO1xuXHRcdHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGhlYWRlcnMpO1xuXHRcdHRoaXMuc2NoZW1hTmFtZSA9IHNjaGVtYTtcblx0XHR0aGlzLnVybExlbmd0aExpbWl0ID0gdXJsTGVuZ3RoTGltaXQ7XG5cdFx0Y29uc3Qgb3JpZ2luYWxGZXRjaCA9IGZldGNoJDEgIT09IG51bGwgJiYgZmV0Y2gkMSAhPT0gdm9pZCAwID8gZmV0Y2gkMSA6IGdsb2JhbFRoaXMuZmV0Y2g7XG5cdFx0aWYgKHRpbWVvdXQgIT09IHZvaWQgMCAmJiB0aW1lb3V0ID4gMCkgdGhpcy5mZXRjaCA9IChpbnB1dCwgaW5pdCkgPT4ge1xuXHRcdFx0Y29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblx0XHRcdGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4gY29udHJvbGxlci5hYm9ydCgpLCB0aW1lb3V0KTtcblx0XHRcdGNvbnN0IGV4aXN0aW5nU2lnbmFsID0gaW5pdCA9PT0gbnVsbCB8fCBpbml0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbml0LnNpZ25hbDtcblx0XHRcdGlmIChleGlzdGluZ1NpZ25hbCkge1xuXHRcdFx0XHRpZiAoZXhpc3RpbmdTaWduYWwuYWJvcnRlZCkge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuXHRcdFx0XHRcdHJldHVybiBvcmlnaW5hbEZldGNoKGlucHV0LCBpbml0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBhYm9ydEhhbmRsZXIgPSAoKSA9PiB7XG5cdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG5cdFx0XHRcdFx0Y29udHJvbGxlci5hYm9ydCgpO1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRleGlzdGluZ1NpZ25hbC5hZGRFdmVudExpc3RlbmVyKFwiYWJvcnRcIiwgYWJvcnRIYW5kbGVyLCB7IG9uY2U6IHRydWUgfSk7XG5cdFx0XHRcdHJldHVybiBvcmlnaW5hbEZldGNoKGlucHV0LCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgaW5pdCksIHt9LCB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSkpLmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHRcdGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuXHRcdFx0XHRcdGV4aXN0aW5nU2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJhYm9ydFwiLCBhYm9ydEhhbmRsZXIpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBvcmlnaW5hbEZldGNoKGlucHV0LCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgaW5pdCksIHt9LCB7IHNpZ25hbDogY29udHJvbGxlci5zaWduYWwgfSkpLmZpbmFsbHkoKCkgPT4gY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCkpO1xuXHRcdH07XG5cdFx0ZWxzZSB0aGlzLmZldGNoID0gb3JpZ2luYWxGZXRjaDtcblx0XHR0aGlzLnJldHJ5ID0gcmV0cnk7XG5cdH1cblx0LyoqXG5cdCogUGVyZm9ybSBhIHF1ZXJ5IG9uIGEgdGFibGUgb3IgYSB2aWV3LlxuXHQqXG5cdCogQHBhcmFtIHJlbGF0aW9uIC0gVGhlIHRhYmxlIG9yIHZpZXcgbmFtZSB0byBxdWVyeVxuXHQqXG5cdCogQGNhdGVnb3J5IERhdGFiYXNlXG5cdCovXG5cdGZyb20ocmVsYXRpb24pIHtcblx0XHRpZiAoIXJlbGF0aW9uIHx8IHR5cGVvZiByZWxhdGlvbiAhPT0gXCJzdHJpbmdcIiB8fCByZWxhdGlvbi50cmltKCkgPT09IFwiXCIpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmVsYXRpb24gbmFtZTogcmVsYXRpb24gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcuXCIpO1xuXHRcdHJldHVybiBuZXcgUG9zdGdyZXN0UXVlcnlCdWlsZGVyKG5ldyBVUkwoYCR7dGhpcy51cmx9LyR7cmVsYXRpb259YCksIHtcblx0XHRcdGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG5cdFx0XHRzY2hlbWE6IHRoaXMuc2NoZW1hTmFtZSxcblx0XHRcdGZldGNoOiB0aGlzLmZldGNoLFxuXHRcdFx0dXJsTGVuZ3RoTGltaXQ6IHRoaXMudXJsTGVuZ3RoTGltaXQsXG5cdFx0XHRyZXRyeTogdGhpcy5yZXRyeVxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQqIFNlbGVjdCBhIHNjaGVtYSB0byBxdWVyeSBvciBwZXJmb3JtIGFuIGZ1bmN0aW9uIChycGMpIGNhbGwuXG5cdCpcblx0KiBUaGUgc2NoZW1hIG5lZWRzIHRvIGJlIG9uIHRoZSBsaXN0IG9mIGV4cG9zZWQgc2NoZW1hcyBpbnNpZGUgU3VwYWJhc2UuXG5cdCpcblx0KiBAcGFyYW0gc2NoZW1hIC0gVGhlIHNjaGVtYSB0byBxdWVyeVxuXHQqXG5cdCogQGNhdGVnb3J5IERhdGFiYXNlXG5cdCovXG5cdHNjaGVtYShzY2hlbWEpIHtcblx0XHRyZXR1cm4gbmV3IFBvc3RncmVzdENsaWVudCh0aGlzLnVybCwge1xuXHRcdFx0aGVhZGVyczogdGhpcy5oZWFkZXJzLFxuXHRcdFx0c2NoZW1hLFxuXHRcdFx0ZmV0Y2g6IHRoaXMuZmV0Y2gsXG5cdFx0XHR1cmxMZW5ndGhMaW1pdDogdGhpcy51cmxMZW5ndGhMaW1pdCxcblx0XHRcdHJldHJ5OiB0aGlzLnJldHJ5XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCogUGVyZm9ybSBhIGZ1bmN0aW9uIGNhbGwuXG5cdCpcblx0KiBAcGFyYW0gZm4gLSBUaGUgZnVuY3Rpb24gbmFtZSB0byBjYWxsXG5cdCogQHBhcmFtIGFyZ3MgLSBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uIGNhbGxcblx0KiBAcGFyYW0gb3B0aW9ucyAtIE5hbWVkIHBhcmFtZXRlcnNcblx0KiBAcGFyYW0gb3B0aW9ucy5oZWFkIC0gV2hlbiBzZXQgdG8gYHRydWVgLCBgZGF0YWAgd2lsbCBub3QgYmUgcmV0dXJuZWQuXG5cdCogVXNlZnVsIGlmIHlvdSBvbmx5IG5lZWQgdGhlIGNvdW50LlxuXHQqIEBwYXJhbSBvcHRpb25zLmdldCAtIFdoZW4gc2V0IHRvIGB0cnVlYCwgdGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGhcblx0KiByZWFkLW9ubHkgYWNjZXNzIG1vZGUuXG5cdCogQHBhcmFtIG9wdGlvbnMuY291bnQgLSBDb3VudCBhbGdvcml0aG0gdG8gdXNlIHRvIGNvdW50IHJvd3MgcmV0dXJuZWQgYnkgdGhlXG5cdCogZnVuY3Rpb24uIE9ubHkgYXBwbGljYWJsZSBmb3IgW3NldC1yZXR1cm5pbmdcblx0KiBmdW5jdGlvbnNdKGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3JnL2RvY3MvY3VycmVudC9mdW5jdGlvbnMtc3JmLmh0bWwpLlxuXHQqXG5cdCogYFwiZXhhY3RcImA6IEV4YWN0IGJ1dCBzbG93IGNvdW50IGFsZ29yaXRobS4gUGVyZm9ybXMgYSBgQ09VTlQoKilgIHVuZGVyIHRoZVxuXHQqIGhvb2QuXG5cdCpcblx0KiBgXCJwbGFubmVkXCJgOiBBcHByb3hpbWF0ZWQgYnV0IGZhc3QgY291bnQgYWxnb3JpdGhtLiBVc2VzIHRoZSBQb3N0Z3Jlc1xuXHQqIHN0YXRpc3RpY3MgdW5kZXIgdGhlIGhvb2QuXG5cdCpcblx0KiBgXCJlc3RpbWF0ZWRcImA6IFVzZXMgZXhhY3QgY291bnQgZm9yIGxvdyBudW1iZXJzIGFuZCBwbGFubmVkIGNvdW50IGZvciBoaWdoXG5cdCogbnVtYmVycy5cblx0KlxuXHQqIEBleGFtcGxlXG5cdCogYGBgdHNcblx0KiAvLyBGb3IgY3Jvc3Mtc2NoZW1hIGZ1bmN0aW9ucyB3aGVyZSB0eXBlIGluZmVyZW5jZSBmYWlscywgdXNlIG92ZXJyaWRlVHlwZXM6XG5cdCogY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLnNjaGVtYSgnc2NoZW1hX2InKVxuXHQqICAgLnJwYygnZnVuY3Rpb25fYScsIHt9KVxuXHQqICAgLm92ZXJyaWRlVHlwZXM8eyBpZDogc3RyaW5nOyB1c2VyX2lkOiBzdHJpbmcgfVtdPigpXG5cdCogYGBgXG5cdCpcblx0KiBAY2F0ZWdvcnkgRGF0YWJhc2Vcblx0KlxuXHQqIEBleGFtcGxlIENhbGwgYSBQb3N0Z3JlcyBmdW5jdGlvbiB3aXRob3V0IGFyZ3VtZW50c1xuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UucnBjKCdoZWxsb193b3JsZCcpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBDYWxsIGEgUG9zdGdyZXMgZnVuY3Rpb24gd2l0aG91dCBhcmd1bWVudHNcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgZnVuY3Rpb24gaGVsbG9fd29ybGQoKSByZXR1cm5zIHRleHQgYXMgJCRcblx0KiAgIHNlbGVjdCAnSGVsbG8gd29ybGQnO1xuXHQqICQkIGxhbmd1YWdlIHNxbDtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgQ2FsbCBhIFBvc3RncmVzIGZ1bmN0aW9uIHdpdGhvdXQgYXJndW1lbnRzXG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBcIkhlbGxvIHdvcmxkXCIsXG5cdCogICBcInN0YXR1c1wiOiAyMDAsXG5cdCogICBcInN0YXR1c1RleHRcIjogXCJPS1wiXG5cdCogfVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgQ2FsbCBhIFBvc3RncmVzIGZ1bmN0aW9uIHdpdGggYXJndW1lbnRzXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5ycGMoJ2VjaG8nLCB7IHNheTogJ/CfkYsnIH0pXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBDYWxsIGEgUG9zdGdyZXMgZnVuY3Rpb24gd2l0aCBhcmd1bWVudHNcblx0KiBgYGBzcWxcblx0KiBjcmVhdGUgZnVuY3Rpb24gZWNobyhzYXkgdGV4dCkgcmV0dXJucyB0ZXh0IGFzICQkXG5cdCogICBzZWxlY3Qgc2F5O1xuXHQqICQkIGxhbmd1YWdlIHNxbDtcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlUmVzcG9uc2UgQ2FsbCBhIFBvc3RncmVzIGZ1bmN0aW9uIHdpdGggYXJndW1lbnRzXG5cdCogYGBganNvblxuXHQqICAge1xuXHQqICAgICBcImRhdGFcIjogXCLwn5GLXCIsXG5cdCogICAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqICAgfVxuXHQqXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZURlc2NyaXB0aW9uIEJ1bGsgcHJvY2Vzc2luZ1xuXHQqIFlvdSBjYW4gcHJvY2VzcyBsYXJnZSBwYXlsb2FkcyBieSBwYXNzaW5nIGluIGFuIGFycmF5IGFzIGFuIGFyZ3VtZW50LlxuXHQqXG5cdCogQGV4YW1wbGUgQnVsayBwcm9jZXNzaW5nXG5cdCogYGBgdHNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5ycGMoJ2FkZF9vbmVfZWFjaCcsIHsgYXJyOiBbMSwgMiwgM10gfSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlU3FsIEJ1bGsgcHJvY2Vzc2luZ1xuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSBmdW5jdGlvbiBhZGRfb25lX2VhY2goYXJyIGludFtdKSByZXR1cm5zIGludFtdIGFzICQkXG5cdCogICBzZWxlY3QgYXJyYXlfYWdnKG4gKyAxKSBmcm9tIHVubmVzdChhcnIpIGFzIG47XG5cdCogJCQgbGFuZ3VhZ2Ugc3FsO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVSZXNwb25zZSBCdWxrIHByb2Nlc3Npbmdcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFtcblx0KiAgICAgMixcblx0KiAgICAgMyxcblx0KiAgICAgNFxuXHQqICAgXSxcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZURlc2NyaXB0aW9uIENhbGwgYSBQb3N0Z3JlcyBmdW5jdGlvbiB3aXRoIGZpbHRlcnNcblx0KiBQb3N0Z3JlcyBmdW5jdGlvbnMgdGhhdCByZXR1cm4gdGFibGVzIGNhbiBhbHNvIGJlIGNvbWJpbmVkIHdpdGggW0ZpbHRlcnNdKC9kb2NzL3JlZmVyZW5jZS9qYXZhc2NyaXB0L3VzaW5nLWZpbHRlcnMpIGFuZCBbTW9kaWZpZXJzXSgvZG9jcy9yZWZlcmVuY2UvamF2YXNjcmlwdC91c2luZy1tb2RpZmllcnMpLlxuXHQqXG5cdCogQGV4YW1wbGUgQ2FsbCBhIFBvc3RncmVzIGZ1bmN0aW9uIHdpdGggZmlsdGVyc1xuXHQqIGBgYHRzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5ycGMoJ2xpc3Rfc3RvcmVkX2NvdW50cmllcycpXG5cdCogICAuZXEoJ2lkJywgMSlcblx0KiAgIC5zaW5nbGUoKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGVTcWwgQ2FsbCBhIFBvc3RncmVzIGZ1bmN0aW9uIHdpdGggZmlsdGVyc1xuXHQqIGBgYHNxbFxuXHQqIGNyZWF0ZSB0YWJsZVxuXHQqICAgY291bnRyaWVzIChpZCBpbnQ4IHByaW1hcnkga2V5LCBuYW1lIHRleHQpO1xuXHQqXG5cdCogaW5zZXJ0IGludG9cblx0KiAgIGNvdW50cmllcyAoaWQsIG5hbWUpXG5cdCogdmFsdWVzXG5cdCogICAoMSwgJ1JvaGFuJyksXG5cdCogICAoMiwgJ1RoZSBTaGlyZScpO1xuXHQqXG5cdCogY3JlYXRlIGZ1bmN0aW9uIGxpc3Rfc3RvcmVkX2NvdW50cmllcygpIHJldHVybnMgc2V0b2YgY291bnRyaWVzIGFzICQkXG5cdCogICBzZWxlY3QgKiBmcm9tIGNvdW50cmllcztcblx0KiAkJCBsYW5ndWFnZSBzcWw7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIENhbGwgYSBQb3N0Z3JlcyBmdW5jdGlvbiB3aXRoIGZpbHRlcnNcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IHtcblx0KiAgICAgXCJpZFwiOiAxLFxuXHQqICAgICBcIm5hbWVcIjogXCJSb2hhblwiXG5cdCogICB9LFxuXHQqICAgXCJzdGF0dXNcIjogMjAwLFxuXHQqICAgXCJzdGF0dXNUZXh0XCI6IFwiT0tcIlxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIENhbGwgYSByZWFkLW9ubHkgUG9zdGdyZXMgZnVuY3Rpb25cblx0KiBgYGB0c1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlLnJwYygnaGVsbG9fd29ybGQnLCB1bmRlZmluZWQsIHsgZ2V0OiB0cnVlIH0pXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVNxbCBDYWxsIGEgcmVhZC1vbmx5IFBvc3RncmVzIGZ1bmN0aW9uXG5cdCogYGBgc3FsXG5cdCogY3JlYXRlIGZ1bmN0aW9uIGhlbGxvX3dvcmxkKCkgcmV0dXJucyB0ZXh0IGFzICQkXG5cdCogICBzZWxlY3QgJ0hlbGxvIHdvcmxkJztcblx0KiAkJCBsYW5ndWFnZSBzcWw7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZVJlc3BvbnNlIENhbGwgYSByZWFkLW9ubHkgUG9zdGdyZXMgZnVuY3Rpb25cblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFwiSGVsbG8gd29ybGRcIixcblx0KiAgIFwic3RhdHVzXCI6IDIwMCxcblx0KiAgIFwic3RhdHVzVGV4dFwiOiBcIk9LXCJcblx0KiB9XG5cdCogYGBgXG5cdCovXG5cdHJwYyhmbiwgYXJncyA9IHt9LCB7IGhlYWQgPSBmYWxzZSwgZ2V0ID0gZmFsc2UsIGNvdW50IH0gPSB7fSkge1xuXHRcdHZhciBfdGhpcyRmZXRjaDtcblx0XHRsZXQgbWV0aG9kO1xuXHRcdGNvbnN0IHVybCA9IG5ldyBVUkwoYCR7dGhpcy51cmx9L3JwYy8ke2ZufWApO1xuXHRcdGxldCBib2R5O1xuXHRcdGNvbnN0IF9pc09iamVjdCA9ICh2KSA9PiB2ICE9PSBudWxsICYmIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmICghQXJyYXkuaXNBcnJheSh2KSB8fCB2LnNvbWUoX2lzT2JqZWN0KSk7XG5cdFx0Y29uc3QgX2hhc09iamVjdEFyZyA9IGhlYWQgJiYgT2JqZWN0LnZhbHVlcyhhcmdzKS5zb21lKF9pc09iamVjdCk7XG5cdFx0aWYgKF9oYXNPYmplY3RBcmcpIHtcblx0XHRcdG1ldGhvZCA9IFwiUE9TVFwiO1xuXHRcdFx0Ym9keSA9IGFyZ3M7XG5cdFx0fSBlbHNlIGlmIChoZWFkIHx8IGdldCkge1xuXHRcdFx0bWV0aG9kID0gaGVhZCA/IFwiSEVBRFwiIDogXCJHRVRcIjtcblx0XHRcdE9iamVjdC5lbnRyaWVzKGFyZ3MpLmZpbHRlcigoW18sIHZhbHVlXSkgPT4gdmFsdWUgIT09IHZvaWQgMCkubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBbbmFtZSwgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBgeyR7dmFsdWUuam9pbihcIixcIil9fWAgOiBgJHt2YWx1ZX1gXSkuZm9yRWFjaCgoW25hbWUsIHZhbHVlXSkgPT4ge1xuXHRcdFx0XHR1cmwuc2VhcmNoUGFyYW1zLmFwcGVuZChuYW1lLCB2YWx1ZSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWV0aG9kID0gXCJQT1NUXCI7XG5cdFx0XHRib2R5ID0gYXJncztcblx0XHR9XG5cdFx0Y29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyk7XG5cdFx0aWYgKF9oYXNPYmplY3RBcmcpIGhlYWRlcnMuc2V0KFwiUHJlZmVyXCIsIGNvdW50ID8gYGNvdW50PSR7Y291bnR9LHJldHVybj1taW5pbWFsYCA6IFwicmV0dXJuPW1pbmltYWxcIik7XG5cdFx0ZWxzZSBpZiAoY291bnQpIGhlYWRlcnMuc2V0KFwiUHJlZmVyXCIsIGBjb3VudD0ke2NvdW50fWApO1xuXHRcdHJldHVybiBuZXcgUG9zdGdyZXN0RmlsdGVyQnVpbGRlcih7XG5cdFx0XHRtZXRob2QsXG5cdFx0XHR1cmwsXG5cdFx0XHRoZWFkZXJzLFxuXHRcdFx0c2NoZW1hOiB0aGlzLnNjaGVtYU5hbWUsXG5cdFx0XHRib2R5LFxuXHRcdFx0ZmV0Y2g6IChfdGhpcyRmZXRjaCA9IHRoaXMuZmV0Y2gpICE9PSBudWxsICYmIF90aGlzJGZldGNoICE9PSB2b2lkIDAgPyBfdGhpcyRmZXRjaCA6IGZldGNoLFxuXHRcdFx0dXJsTGVuZ3RoTGltaXQ6IHRoaXMudXJsTGVuZ3RoTGltaXQsXG5cdFx0XHRyZXRyeTogdGhpcy5yZXRyeVxuXHRcdH0pO1xuXHR9XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvaW5kZXgudHNcbnZhciBzcmNfZGVmYXVsdCA9IHtcblx0UG9zdGdyZXN0Q2xpZW50LFxuXHRQb3N0Z3Jlc3RRdWVyeUJ1aWxkZXIsXG5cdFBvc3RncmVzdEZpbHRlckJ1aWxkZXIsXG5cdFBvc3RncmVzdFRyYW5zZm9ybUJ1aWxkZXIsXG5cdFBvc3RncmVzdEJ1aWxkZXIsXG5cdFBvc3RncmVzdEVycm9yXG59O1xuXG4vLyNlbmRyZWdpb25cbmV4cG9ydCB7IFBvc3RncmVzdEJ1aWxkZXIsIFBvc3RncmVzdENsaWVudCwgUG9zdGdyZXN0RXJyb3IsIFBvc3RncmVzdEZpbHRlckJ1aWxkZXIsIFBvc3RncmVzdFF1ZXJ5QnVpbGRlciwgUG9zdGdyZXN0VHJhbnNmb3JtQnVpbGRlciwgc3JjX2RlZmF1bHQgYXMgZGVmYXVsdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/index.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimeChannel.js":
|
||
/*!***************************************************************************!*\
|
||
!*** ./node_modules/@supabase/realtime-js/dist/module/RealtimeChannel.js ***!
|
||
\***************************************************************************/
|
||
/***/ ((__unused_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 */ REALTIME_CHANNEL_STATES: () => (/* binding */ REALTIME_CHANNEL_STATES),\n/* harmony export */ REALTIME_LISTEN_TYPES: () => (/* binding */ REALTIME_LISTEN_TYPES),\n/* harmony export */ REALTIME_POSTGRES_CHANGES_LISTEN_EVENT: () => (/* binding */ REALTIME_POSTGRES_CHANGES_LISTEN_EVENT),\n/* harmony export */ REALTIME_SUBSCRIBE_STATES: () => (/* binding */ REALTIME_SUBSCRIBE_STATES),\n/* harmony export */ \"default\": () => (/* binding */ RealtimeChannel)\n/* harmony export */ });\n/* harmony import */ var _lib_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/constants */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/constants.js\");\n/* harmony import */ var _RealtimePresence__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./RealtimePresence */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimePresence.js\");\n/* harmony import */ var _lib_transformers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/transformers */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/transformers.js\");\n/* harmony import */ var _lib_normalizeChannelError__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/normalizeChannelError */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/normalizeChannelError.js\");\n/* harmony import */ var _phoenix_channelAdapter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./phoenix/channelAdapter */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/phoenix/channelAdapter.js\");\n\n\n\n\n\n\nvar REALTIME_POSTGRES_CHANGES_LISTEN_EVENT;\n(function (REALTIME_POSTGRES_CHANGES_LISTEN_EVENT) {\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"ALL\"] = \"*\";\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"INSERT\"] = \"INSERT\";\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"UPDATE\"] = \"UPDATE\";\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"DELETE\"] = \"DELETE\";\n})(REALTIME_POSTGRES_CHANGES_LISTEN_EVENT || (REALTIME_POSTGRES_CHANGES_LISTEN_EVENT = {}));\nvar REALTIME_LISTEN_TYPES;\n(function (REALTIME_LISTEN_TYPES) {\n REALTIME_LISTEN_TYPES[\"BROADCAST\"] = \"broadcast\";\n REALTIME_LISTEN_TYPES[\"PRESENCE\"] = \"presence\";\n REALTIME_LISTEN_TYPES[\"POSTGRES_CHANGES\"] = \"postgres_changes\";\n REALTIME_LISTEN_TYPES[\"SYSTEM\"] = \"system\";\n})(REALTIME_LISTEN_TYPES || (REALTIME_LISTEN_TYPES = {}));\nvar REALTIME_SUBSCRIBE_STATES;\n(function (REALTIME_SUBSCRIBE_STATES) {\n REALTIME_SUBSCRIBE_STATES[\"SUBSCRIBED\"] = \"SUBSCRIBED\";\n REALTIME_SUBSCRIBE_STATES[\"TIMED_OUT\"] = \"TIMED_OUT\";\n REALTIME_SUBSCRIBE_STATES[\"CLOSED\"] = \"CLOSED\";\n REALTIME_SUBSCRIBE_STATES[\"CHANNEL_ERROR\"] = \"CHANNEL_ERROR\";\n})(REALTIME_SUBSCRIBE_STATES || (REALTIME_SUBSCRIBE_STATES = {}));\nconst REALTIME_CHANNEL_STATES = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES;\n/** A channel is the basic building block of Realtime\n * and narrows the scope of data flow to subscribed clients.\n * You can think of a channel as a chatroom where participants are able to see who's online\n * and send and receive messages.\n */\nclass RealtimeChannel {\n get state() {\n return this.channelAdapter.state;\n }\n set state(state) {\n this.channelAdapter.state = state;\n }\n get joinedOnce() {\n return this.channelAdapter.joinedOnce;\n }\n get timeout() {\n return this.socket.timeout;\n }\n get joinPush() {\n return this.channelAdapter.joinPush;\n }\n get rejoinTimer() {\n return this.channelAdapter.rejoinTimer;\n }\n /**\n * Creates a channel that can broadcast messages, sync presence, and listen to Postgres changes.\n *\n * The topic determines which realtime stream you are subscribing to. Config options let you\n * enable acknowledgement for broadcasts, presence tracking, or private channels.\n *\n * @category Realtime\n *\n * @example Using supabase-js (recommended)\n * ```ts\n * import { createClient } from '@supabase/supabase-js'\n *\n * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n * const channel = supabase.channel('room1')\n * channel\n * .on('broadcast', { event: 'cursor-pos' }, (payload) => console.log(payload))\n * .subscribe()\n * ```\n *\n * @example Standalone import for bundle-sensitive environments\n * ```ts\n * import RealtimeClient from '@supabase/realtime-js'\n *\n * const client = new RealtimeClient('https://xyzcompany.supabase.co/realtime/v1', {\n * params: { apikey: 'your-publishable-key' },\n * })\n * const channel = new RealtimeChannel('realtime:public:messages', { config: {} }, client)\n * ```\n */\n constructor(\n /** Topic name can be any string. */\n topic, params = { config: {} }, socket) {\n var _a, _b;\n this.topic = topic;\n this.params = params;\n this.socket = socket;\n this.bindings = {};\n this.subTopic = topic.replace(/^realtime:/i, '');\n this.params.config = Object.assign({\n broadcast: { ack: false, self: false },\n presence: { key: '', enabled: false },\n private: false,\n }, params.config);\n this.channelAdapter = new _phoenix_channelAdapter__WEBPACK_IMPORTED_MODULE_4__[\"default\"](this.socket.socketAdapter, topic, this.params);\n this.presence = new _RealtimePresence__WEBPACK_IMPORTED_MODULE_1__[\"default\"](this);\n this._onClose(() => {\n this.socket._remove(this);\n });\n this._updateFilterTransform();\n this.broadcastEndpointURL = (0,_lib_transformers__WEBPACK_IMPORTED_MODULE_2__.httpEndpointURL)(this.socket.socketAdapter.endPointURL());\n this.private = this.params.config.private || false;\n if (!this.private && ((_b = (_a = this.params.config) === null || _a === void 0 ? void 0 : _a.broadcast) === null || _b === void 0 ? void 0 : _b.replay)) {\n throw new Error(`tried to use replay on public channel '${this.topic}'. It must be a private channel.`);\n }\n }\n /**\n * Subscribe registers your client with the server\n * @category Realtime\n */\n subscribe(callback, timeout = this.timeout) {\n var _a, _b, _c;\n if (!this.socket.isConnected()) {\n this.socket.connect();\n }\n if (this.channelAdapter.isClosed()) {\n const { config: { broadcast, presence, private: isPrivate }, } = this.params;\n const postgres_changes = (_b = (_a = this.bindings.postgres_changes) === null || _a === void 0 ? void 0 : _a.map((r) => r.filter)) !== null && _b !== void 0 ? _b : [];\n const presence_enabled = (!!this.bindings[REALTIME_LISTEN_TYPES.PRESENCE] &&\n this.bindings[REALTIME_LISTEN_TYPES.PRESENCE].length > 0) ||\n ((_c = this.params.config.presence) === null || _c === void 0 ? void 0 : _c.enabled) === true;\n const accessTokenPayload = {};\n const config = {\n broadcast,\n presence: Object.assign(Object.assign({}, presence), { enabled: presence_enabled }),\n postgres_changes,\n private: isPrivate,\n };\n if (this.socket.accessTokenValue) {\n accessTokenPayload.access_token = this.socket.accessTokenValue;\n }\n this._onError((reason) => {\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, (0,_lib_normalizeChannelError__WEBPACK_IMPORTED_MODULE_3__.normalizeChannelError)(reason));\n });\n this._onClose(() => callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CLOSED));\n this.updateJoinPayload(Object.assign({ config }, accessTokenPayload));\n this._updateFilterMessage();\n this.channelAdapter\n .subscribe(timeout)\n .receive('ok', async ({ postgres_changes }) => {\n // Only refresh auth if using callback-based tokens\n if (!this.socket._isManualToken()) {\n this.socket.setAuth();\n }\n if (postgres_changes === undefined) {\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.SUBSCRIBED);\n return;\n }\n this._updatePostgresBindings(postgres_changes, callback);\n })\n .receive('error', (error) => {\n this.state = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.errored;\n const message = Object.values(error).join(', ') || 'error';\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, new Error(message, { cause: error }));\n })\n .receive('timeout', () => {\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.TIMED_OUT);\n });\n }\n return this;\n }\n _updatePostgresBindings(postgres_changes, callback) {\n var _a;\n const clientPostgresBindings = this.bindings.postgres_changes;\n const bindingsLen = (_a = clientPostgresBindings === null || clientPostgresBindings === void 0 ? void 0 : clientPostgresBindings.length) !== null && _a !== void 0 ? _a : 0;\n const newPostgresBindings = [];\n for (let i = 0; i < bindingsLen; i++) {\n const clientPostgresBinding = clientPostgresBindings[i];\n const { filter: { event, schema, table, filter }, } = clientPostgresBinding;\n const serverPostgresFilter = postgres_changes && postgres_changes[i];\n if (serverPostgresFilter &&\n serverPostgresFilter.event === event &&\n RealtimeChannel.isFilterValueEqual(serverPostgresFilter.schema, schema) &&\n RealtimeChannel.isFilterValueEqual(serverPostgresFilter.table, table) &&\n RealtimeChannel.isFilterValueEqual(serverPostgresFilter.filter, filter)) {\n newPostgresBindings.push(Object.assign(Object.assign({}, clientPostgresBinding), { id: serverPostgresFilter.id }));\n }\n else {\n this.unsubscribe();\n this.state = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.errored;\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, new Error('mismatch between server and client bindings for postgres changes'));\n return;\n }\n }\n this.bindings.postgres_changes = newPostgresBindings;\n if (this.state != _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.errored && callback) {\n callback(REALTIME_SUBSCRIBE_STATES.SUBSCRIBED);\n }\n }\n /**\n * Returns the current presence state for this channel.\n *\n * The shape is a map keyed by presence key (for example a user id) where each entry contains the\n * tracked metadata for that user.\n *\n * @category Realtime\n */\n presenceState() {\n return this.presence.state;\n }\n /**\n * Sends the supplied payload to the presence tracker so other subscribers can see that this\n * client is online. Use `untrack` to stop broadcasting presence for the same key.\n *\n * @category Realtime\n */\n async track(payload, opts = {}) {\n return await this.send({\n type: 'presence',\n event: 'track',\n payload,\n }, opts.timeout || this.timeout);\n }\n /**\n * Removes the current presence state for this client.\n *\n * @category Realtime\n */\n async untrack(opts = {}) {\n return await this.send({\n type: 'presence',\n event: 'untrack',\n }, opts);\n }\n /**\n * Listen to realtime events on this channel.\n * @category Realtime\n *\n * @remarks\n * - By default, Broadcast and Presence are enabled for all projects.\n * - By default, listening to database changes is disabled for new projects due to database performance and security concerns. You can turn it on by managing Realtime's [replication](/docs/guides/api#realtime-api-overview).\n * - You can receive the \"previous\" data for updates and deletes by setting the table's `REPLICA IDENTITY` to `FULL` (e.g., `ALTER TABLE your_table REPLICA IDENTITY FULL;`).\n * - Row level security is not applied to delete statements. When RLS is enabled and replica identity is set to full, only the primary key is sent to clients.\n *\n * @example Listen to broadcast messages\n * ```js\n * const channel = supabase.channel(\"room1\")\n *\n * channel.on(\"broadcast\", { event: \"cursor-pos\" }, (payload) => {\n * console.log(\"Cursor position received!\", payload);\n * }).subscribe((status) => {\n * if (status === \"SUBSCRIBED\") {\n * channel.send({\n * type: \"broadcast\",\n * event: \"cursor-pos\",\n * payload: { x: Math.random(), y: Math.random() },\n * });\n * }\n * });\n * ```\n *\n * @example Listen to presence sync\n * ```js\n * const channel = supabase.channel('room1')\n * channel\n * .on('presence', { event: 'sync' }, () => {\n * console.log('Synced presence state: ', channel.presenceState())\n * })\n * .subscribe(async (status) => {\n * if (status === 'SUBSCRIBED') {\n * await channel.track({ online_at: new Date().toISOString() })\n * }\n * })\n * ```\n *\n * @example Listen to presence join\n * ```js\n * const channel = supabase.channel('room1')\n * channel\n * .on('presence', { event: 'join' }, ({ newPresences }) => {\n * console.log('Newly joined presences: ', newPresences)\n * })\n * .subscribe(async (status) => {\n * if (status === 'SUBSCRIBED') {\n * await channel.track({ online_at: new Date().toISOString() })\n * }\n * })\n * ```\n *\n * @example Listen to presence leave\n * ```js\n * const channel = supabase.channel('room1')\n * channel\n * .on('presence', { event: 'leave' }, ({ leftPresences }) => {\n * console.log('Newly left presences: ', leftPresences)\n * })\n * .subscribe(async (status) => {\n * if (status === 'SUBSCRIBED') {\n * await channel.track({ online_at: new Date().toISOString() })\n * await channel.untrack()\n * }\n * })\n * ```\n *\n * @example Listen to all database changes\n * ```js\n * supabase\n * .channel('room1')\n * .on('postgres_changes', { event: '*', schema: '*' }, payload => {\n * console.log('Change received!', payload)\n * })\n * .subscribe()\n * ```\n *\n * @example Listen to a specific table\n * ```js\n * supabase\n * .channel('room1')\n * .on('postgres_changes', { event: '*', schema: 'public', table: 'countries' }, payload => {\n * console.log('Change received!', payload)\n * })\n * .subscribe()\n * ```\n *\n * @example Listen to inserts\n * ```js\n * supabase\n * .channel('room1')\n * .on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'countries' }, payload => {\n * console.log('Change received!', payload)\n * })\n * .subscribe()\n * ```\n *\n * @exampleDescription Listen to updates\n * By default, Supabase will send only the updated record. If you want to receive the previous values as well you can\n * enable full replication for the table you are listening to:\n *\n * ```sql\n * alter table \"your_table\" replica identity full;\n * ```\n *\n * @example Listen to updates\n * ```js\n * supabase\n * .channel('room1')\n * .on('postgres_changes', { event: 'UPDATE', schema: 'public', table: 'countries' }, payload => {\n * console.log('Change received!', payload)\n * })\n * .subscribe()\n * ```\n *\n * @exampleDescription Listen to deletes\n * By default, Supabase does not send deleted records. If you want to receive the deleted record you can\n * enable full replication for the table you are listening to:\n *\n * ```sql\n * alter table \"your_table\" replica identity full;\n * ```\n *\n * @example Listen to deletes\n * ```js\n * supabase\n * .channel('room1')\n * .on('postgres_changes', { event: 'DELETE', schema: 'public', table: 'countries' }, payload => {\n * console.log('Change received!', payload)\n * })\n * .subscribe()\n * ```\n *\n * @exampleDescription Listen to multiple events\n * You can chain listeners if you want to listen to multiple events for each table.\n *\n * @example Listen to multiple events\n * ```js\n * supabase\n * .channel('room1')\n * .on('postgres_changes', { event: 'INSERT', schema: 'public', table: 'countries' }, handleRecordInserted)\n * .on('postgres_changes', { event: 'DELETE', schema: 'public', table: 'countries' }, handleRecordDeleted)\n * .subscribe()\n * ```\n *\n * @exampleDescription Listen to row level changes\n * You can listen to individual rows using the format `{table}:{col}=eq.{val}` - where `{col}` is the column name, and `{val}` is the value which you want to match.\n *\n * @example Listen to row level changes\n * ```js\n * supabase\n * .channel('room1')\n * .on('postgres_changes', { event: 'UPDATE', schema: 'public', table: 'countries', filter: 'id=eq.200' }, handleRecordUpdated)\n * .subscribe()\n * ```\n */\n on(type, filter, callback) {\n const stateCheck = this.channelAdapter.isJoined() || this.channelAdapter.isJoining();\n const typeCheck = type === REALTIME_LISTEN_TYPES.PRESENCE || type === REALTIME_LISTEN_TYPES.POSTGRES_CHANGES;\n if (stateCheck && typeCheck) {\n this.socket.log('channel', `cannot add \\`${type}\\` callbacks for ${this.topic} after \\`subscribe()\\`.`);\n throw new Error(`cannot add \\`${type}\\` callbacks for ${this.topic} after \\`subscribe()\\`.`);\n }\n return this._on(type, filter, callback);\n }\n /**\n * Sends a broadcast message explicitly via REST API.\n *\n * This method always uses the REST API endpoint regardless of WebSocket connection state.\n * Useful when you want to guarantee REST delivery or when gradually migrating from implicit REST fallback.\n *\n * @param event The name of the broadcast event\n * @param payload Payload to be sent (required)\n * @param opts Options including timeout\n * @returns Promise resolving to object with success status, and error details if failed\n *\n * @category Realtime\n */\n async httpSend(event, payload, opts = {}) {\n var _a;\n if (payload === undefined || payload === null) {\n return Promise.reject(new Error('Payload is required for httpSend()'));\n }\n const headers = {\n apikey: this.socket.apiKey ? this.socket.apiKey : '',\n 'Content-Type': 'application/json',\n };\n if (this.socket.accessTokenValue) {\n headers['Authorization'] = `Bearer ${this.socket.accessTokenValue}`;\n }\n const options = {\n method: 'POST',\n headers,\n body: JSON.stringify({\n messages: [\n {\n topic: this.subTopic,\n event,\n payload: payload,\n private: this.private,\n },\n ],\n }),\n };\n const response = await this._fetchWithTimeout(this.broadcastEndpointURL, options, (_a = opts.timeout) !== null && _a !== void 0 ? _a : this.timeout);\n if (response.status === 202) {\n return { success: true };\n }\n let errorMessage = response.statusText;\n try {\n const errorBody = await response.json();\n errorMessage = errorBody.error || errorBody.message || errorMessage;\n }\n catch (_b) { }\n return Promise.reject(new Error(errorMessage));\n }\n /**\n * Sends a message into the channel.\n *\n * @param args Arguments to send to channel\n * @param args.type The type of event to send\n * @param args.event The name of the event being sent\n * @param args.payload Payload to be sent\n * @param opts Options to be used during the send process\n *\n * @category Realtime\n *\n * @remarks\n * - When using REST you don't need to subscribe to the channel\n * - REST calls are only available from 2.37.0 onwards\n *\n * @example Send a message via websocket\n * ```js\n * const channel = supabase.channel('room1')\n *\n * channel.subscribe((status) => {\n * if (status === 'SUBSCRIBED') {\n * channel.send({\n * type: 'broadcast',\n * event: 'cursor-pos',\n * payload: { x: Math.random(), y: Math.random() },\n * })\n * }\n * })\n * ```\n *\n * @exampleResponse Send a message via websocket\n * ```js\n * ok | timed out | error\n * ```\n *\n * @example Send a message via REST\n * ```js\n * supabase\n * .channel('room1')\n * .httpSend('cursor-pos', { x: Math.random(), y: Math.random() })\n * ```\n */\n async send(args, opts = {}) {\n var _a, _b;\n if (!this.channelAdapter.canPush() && args.type === 'broadcast') {\n console.warn('Realtime send() is automatically falling back to REST API. ' +\n 'This behavior will be deprecated in the future. ' +\n 'Please use httpSend() explicitly for REST delivery.');\n const { event, payload: endpoint_payload } = args;\n const headers = {\n apikey: this.socket.apiKey ? this.socket.apiKey : '',\n 'Content-Type': 'application/json',\n };\n if (this.socket.accessTokenValue) {\n headers['Authorization'] = `Bearer ${this.socket.accessTokenValue}`;\n }\n const options = {\n method: 'POST',\n headers,\n body: JSON.stringify({\n messages: [\n {\n topic: this.subTopic,\n event,\n payload: endpoint_payload,\n private: this.private,\n },\n ],\n }),\n };\n try {\n const response = await this._fetchWithTimeout(this.broadcastEndpointURL, options, (_a = opts.timeout) !== null && _a !== void 0 ? _a : this.timeout);\n await ((_b = response.body) === null || _b === void 0 ? void 0 : _b.cancel());\n return response.ok ? 'ok' : 'error';\n }\n catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n return 'timed out';\n }\n else {\n return 'error';\n }\n }\n }\n else {\n return new Promise((resolve) => {\n var _a, _b, _c;\n const push = this.channelAdapter.push(args.type, args, opts.timeout || this.timeout);\n if (args.type === 'broadcast' && !((_c = (_b = (_a = this.params) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.broadcast) === null || _c === void 0 ? void 0 : _c.ack)) {\n resolve('ok');\n }\n push.receive('ok', () => resolve('ok'));\n push.receive('error', () => resolve('error'));\n push.receive('timeout', () => resolve('timed out'));\n });\n }\n }\n /**\n * Updates the payload that will be sent the next time the channel joins (reconnects).\n * Useful for rotating access tokens or updating config without re-creating the channel.\n *\n * @category Realtime\n */\n updateJoinPayload(payload) {\n this.channelAdapter.updateJoinPayload(payload);\n }\n /**\n * Leaves the channel.\n *\n * Unsubscribes from server events, and instructs channel to terminate on server.\n * Triggers onClose() hooks.\n *\n * To receive leave acknowledgements, use the a `receive` hook to bind to the server ack, ie:\n * channel.unsubscribe().receive(\"ok\", () => alert(\"left!\") )\n *\n * @category Realtime\n */\n async unsubscribe(timeout = this.timeout) {\n return new Promise((resolve) => {\n this.channelAdapter\n .unsubscribe(timeout)\n .receive('ok', () => resolve('ok'))\n .receive('timeout', () => resolve('timed out'))\n .receive('error', () => resolve('error'));\n });\n }\n /**\n * Destroys and stops related timers.\n *\n * @category Realtime\n */\n teardown() {\n this.channelAdapter.teardown();\n }\n /** @internal */\n async _fetchWithTimeout(url, options, timeout) {\n const controller = new AbortController();\n const id = setTimeout(() => controller.abort(), timeout);\n const response = await this.socket.fetch(url, Object.assign(Object.assign({}, options), { signal: controller.signal }));\n clearTimeout(id);\n return response;\n }\n /** @internal */\n _on(type, filter, callback) {\n const typeLower = type.toLocaleLowerCase();\n const ref = this.channelAdapter.on(type, callback);\n const binding = {\n type: typeLower,\n filter: filter,\n callback: callback,\n ref: ref,\n };\n if (this.bindings[typeLower]) {\n this.bindings[typeLower].push(binding);\n }\n else {\n this.bindings[typeLower] = [binding];\n }\n this._updateFilterMessage();\n return this;\n }\n /**\n * Registers a callback that will be executed when the channel closes.\n *\n * @internal\n */\n _onClose(callback) {\n this.channelAdapter.onClose(callback);\n }\n /**\n * Registers a callback that will be executed when the channel encounteres an error.\n *\n * @internal\n */\n _onError(callback) {\n this.channelAdapter.onError(callback);\n }\n /** @internal */\n _updateFilterMessage() {\n this.channelAdapter.updateFilterBindings((binding, payload, ref) => {\n var _a, _b, _c, _d, _e, _f, _g;\n const typeLower = binding.event.toLocaleLowerCase();\n if (this._notThisChannelEvent(typeLower, ref)) {\n return false;\n }\n const bind = (_a = this.bindings[typeLower]) === null || _a === void 0 ? void 0 : _a.find((bind) => bind.ref === binding.ref);\n if (!bind) {\n return true;\n }\n if (['broadcast', 'presence', 'postgres_changes'].includes(typeLower)) {\n if ('id' in bind) {\n const bindId = bind.id;\n const bindEvent = (_b = bind.filter) === null || _b === void 0 ? void 0 : _b.event;\n return (bindId &&\n ((_c = payload.ids) === null || _c === void 0 ? void 0 : _c.includes(bindId)) &&\n (bindEvent === '*' ||\n (bindEvent === null || bindEvent === void 0 ? void 0 : bindEvent.toLocaleLowerCase()) === ((_d = payload.data) === null || _d === void 0 ? void 0 : _d.type.toLocaleLowerCase())));\n }\n else {\n const bindEvent = (_f = (_e = bind === null || bind === void 0 ? void 0 : bind.filter) === null || _e === void 0 ? void 0 : _e.event) === null || _f === void 0 ? void 0 : _f.toLocaleLowerCase();\n return bindEvent === '*' || bindEvent === ((_g = payload === null || payload === void 0 ? void 0 : payload.event) === null || _g === void 0 ? void 0 : _g.toLocaleLowerCase());\n }\n }\n else {\n return bind.type.toLocaleLowerCase() === typeLower;\n }\n });\n }\n /** @internal */\n _notThisChannelEvent(event, ref) {\n const { close, error, leave, join } = _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_EVENTS;\n const events = [close, error, leave, join];\n return ref && events.includes(event) && ref !== this.joinPush.ref;\n }\n /** @internal */\n _updateFilterTransform() {\n this.channelAdapter.updatePayloadTransform((event, payload, ref) => {\n if (typeof payload === 'object' && 'ids' in payload) {\n const postgresChanges = payload.data;\n const { schema, table, commit_timestamp, type, errors } = postgresChanges;\n const enrichedPayload = {\n schema: schema,\n table: table,\n commit_timestamp: commit_timestamp,\n eventType: type,\n new: {},\n old: {},\n errors: errors,\n };\n return Object.assign(Object.assign({}, enrichedPayload), this._getPayloadRecords(postgresChanges));\n }\n return payload;\n });\n }\n copyBindings(other) {\n if (this.joinedOnce) {\n throw new Error('cannot copy bindings into joined channel');\n }\n for (const kind in other.bindings) {\n for (const binding of other.bindings[kind]) {\n this._on(binding.type, binding.filter, binding.callback);\n }\n }\n }\n /**\n * Compares two optional filter values for equality.\n * Treats undefined, null, and empty string as equivalent empty values.\n * @internal\n */\n static isFilterValueEqual(serverValue, clientValue) {\n const normalizedServer = serverValue !== null && serverValue !== void 0 ? serverValue : undefined;\n const normalizedClient = clientValue !== null && clientValue !== void 0 ? clientValue : undefined;\n return normalizedServer === normalizedClient;\n }\n /** @internal */\n _getPayloadRecords(payload) {\n const records = {\n new: {},\n old: {},\n };\n if (payload.type === 'INSERT' || payload.type === 'UPDATE') {\n records.new = _lib_transformers__WEBPACK_IMPORTED_MODULE_2__.convertChangeData(payload.columns, payload.record);\n }\n if (payload.type === 'UPDATE' || payload.type === 'DELETE') {\n records.old = _lib_transformers__WEBPACK_IMPORTED_MODULE_2__.convertChangeData(payload.columns, payload.old_record);\n }\n return records;\n }\n}\n//# sourceMappingURL=RealtimeChannel.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvUmVhbHRpbWVDaGFubmVsLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBaUU7QUFDZjtBQUNDO0FBQ0U7QUFDZTtBQUNkO0FBQy9DO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsd0ZBQXdGO0FBQ2xGO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsc0RBQXNEO0FBQ2hEO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUMsOERBQThEO0FBQ3hELGdDQUFnQywwREFBYztBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ2U7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixlQUFlO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGdDQUFnQztBQUNuRCxRQUFRO0FBQ1IseUVBQXlFLFlBQVk7QUFDckY7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IsWUFBWTtBQUNsQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qix5QkFBeUI7QUFDbEQsd0JBQXdCLHlCQUF5QjtBQUNqRDtBQUNBLFNBQVM7QUFDVCxrQ0FBa0MsK0RBQWM7QUFDaEQsNEJBQTRCLHlEQUFnQjtBQUM1QztBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0Esb0NBQW9DLGtFQUFlO0FBQ25EO0FBQ0E7QUFDQSxzRUFBc0UsV0FBVztBQUNqRjtBQUNBO0FBQ0E7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QUFnQiw0QkFBNEIsRUFBRSwwREFBYztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGdEQUFnRDtBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkJBQTJCO0FBQzNCLDJCQUEyQjtBQUMzQjtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CLG1CQUFtQjtBQUNuQjtBQUNBO0FBQ0EsMEJBQTBCLGdFQUE4QjtBQUN4RDtBQUNBO0FBQ0EsMEJBQTBCLGdFQUE4QjtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21vZHVsZS9SZWFsdGltZUNoYW5uZWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ0hBTk5FTF9FVkVOVFMsIENIQU5ORUxfU1RBVEVTIH0gZnJvbSAnLi9saWIvY29uc3RhbnRzJztcbmltcG9ydCBSZWFsdGltZVByZXNlbmNlIGZyb20gJy4vUmVhbHRpbWVQcmVzZW5jZSc7XG5pbXBvcnQgKiBhcyBUcmFuc2Zvcm1lcnMgZnJvbSAnLi9saWIvdHJhbnNmb3JtZXJzJztcbmltcG9ydCB7IGh0dHBFbmRwb2ludFVSTCB9IGZyb20gJy4vbGliL3RyYW5zZm9ybWVycyc7XG5pbXBvcnQgeyBub3JtYWxpemVDaGFubmVsRXJyb3IgfSBmcm9tICcuL2xpYi9ub3JtYWxpemVDaGFubmVsRXJyb3InO1xuaW1wb3J0IENoYW5uZWxBZGFwdGVyIGZyb20gJy4vcGhvZW5peC9jaGFubmVsQWRhcHRlcic7XG5leHBvcnQgdmFyIFJFQUxUSU1FX1BPU1RHUkVTX0NIQU5HRVNfTElTVEVOX0VWRU5UO1xuKGZ1bmN0aW9uIChSRUFMVElNRV9QT1NUR1JFU19DSEFOR0VTX0xJU1RFTl9FVkVOVCkge1xuICAgIFJFQUxUSU1FX1BPU1RHUkVTX0NIQU5HRVNfTElTVEVOX0VWRU5UW1wiQUxMXCJdID0gXCIqXCI7XG4gICAgUkVBTFRJTUVfUE9TVEdSRVNfQ0hBTkdFU19MSVNURU5fRVZFTlRbXCJJTlNFUlRcIl0gPSBcIklOU0VSVFwiO1xuICAgIFJFQUxUSU1FX1BPU1RHUkVTX0NIQU5HRVNfTElTVEVOX0VWRU5UW1wiVVBEQVRFXCJdID0gXCJVUERBVEVcIjtcbiAgICBSRUFMVElNRV9QT1NUR1JFU19DSEFOR0VTX0xJU1RFTl9FVkVOVFtcIkRFTEVURVwiXSA9IFwiREVMRVRFXCI7XG59KShSRUFMVElNRV9QT1NUR1JFU19DSEFOR0VTX0xJU1RFTl9FVkVOVCB8fCAoUkVBTFRJTUVfUE9TVEdSRVNfQ0hBTkdFU19MSVNURU5fRVZFTlQgPSB7fSkpO1xuZXhwb3J0IHZhciBSRUFMVElNRV9MSVNURU5fVFlQRVM7XG4oZnVuY3Rpb24gKFJFQUxUSU1FX0xJU1RFTl9UWVBFUykge1xuICAgIFJFQUxUSU1FX0xJU1RFTl9UWVBFU1tcIkJST0FEQ0FTVFwiXSA9IFwiYnJvYWRjYXN0XCI7XG4gICAgUkVBTFRJTUVfTElTVEVOX1RZUEVTW1wiUFJFU0VOQ0VcIl0gPSBcInByZXNlbmNlXCI7XG4gICAgUkVBTFRJTUVfTElTVEVOX1RZUEVTW1wiUE9TVEdSRVNfQ0hBTkdFU1wiXSA9IFwicG9zdGdyZXNfY2hhbmdlc1wiO1xuICAgIFJFQUxUSU1FX0xJU1RFTl9UWVBFU1tcIlNZU1RFTVwiXSA9IFwic3lzdGVtXCI7XG59KShSRUFMVElNRV9MSVNURU5fVFlQRVMgfHwgKFJFQUxUSU1FX0xJU1RFTl9UWVBFUyA9IHt9KSk7XG5leHBvcnQgdmFyIFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVM7XG4oZnVuY3Rpb24gKFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVMpIHtcbiAgICBSRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTW1wiU1VCU0NSSUJFRFwiXSA9IFwiU1VCU0NSSUJFRFwiO1xuICAgIFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVNbXCJUSU1FRF9PVVRcIl0gPSBcIlRJTUVEX09VVFwiO1xuICAgIFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVNbXCJDTE9TRURcIl0gPSBcIkNMT1NFRFwiO1xuICAgIFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVNbXCJDSEFOTkVMX0VSUk9SXCJdID0gXCJDSEFOTkVMX0VSUk9SXCI7XG59KShSRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTIHx8IChSRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTID0ge30pKTtcbmV4cG9ydCBjb25zdCBSRUFMVElNRV9DSEFOTkVMX1NUQVRFUyA9IENIQU5ORUxfU1RBVEVTO1xuLyoqIEEgY2hhbm5lbCBpcyB0aGUgYmFzaWMgYnVpbGRpbmcgYmxvY2sgb2YgUmVhbHRpbWVcbiAqIGFuZCBuYXJyb3dzIHRoZSBzY29wZSBvZiBkYXRhIGZsb3cgdG8gc3Vic2NyaWJlZCBjbGllbnRzLlxuICogWW91IGNhbiB0aGluayBvZiBhIGNoYW5uZWwgYXMgYSBjaGF0cm9vbSB3aGVyZSBwYXJ0aWNpcGFudHMgYXJlIGFibGUgdG8gc2VlIHdobydzIG9ubGluZVxuICogYW5kIHNlbmQgYW5kIHJlY2VpdmUgbWVzc2FnZXMuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJlYWx0aW1lQ2hhbm5lbCB7XG4gICAgZ2V0IHN0YXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsQWRhcHRlci5zdGF0ZTtcbiAgICB9XG4gICAgc2V0IHN0YXRlKHN0YXRlKSB7XG4gICAgICAgIHRoaXMuY2hhbm5lbEFkYXB0ZXIuc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG4gICAgZ2V0IGpvaW5lZE9uY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWxBZGFwdGVyLmpvaW5lZE9uY2U7XG4gICAgfVxuICAgIGdldCB0aW1lb3V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXQudGltZW91dDtcbiAgICB9XG4gICAgZ2V0IGpvaW5QdXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsQWRhcHRlci5qb2luUHVzaDtcbiAgICB9XG4gICAgZ2V0IHJlam9pblRpbWVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsQWRhcHRlci5yZWpvaW5UaW1lcjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIGNoYW5uZWwgdGhhdCBjYW4gYnJvYWRjYXN0IG1lc3NhZ2VzLCBzeW5jIHByZXNlbmNlLCBhbmQgbGlzdGVuIHRvIFBvc3RncmVzIGNoYW5nZXMuXG4gICAgICpcbiAgICAgKiBUaGUgdG9waWMgZGV0ZXJtaW5lcyB3aGljaCByZWFsdGltZSBzdHJlYW0geW91IGFyZSBzdWJzY3JpYmluZyB0by4gQ29uZmlnIG9wdGlvbnMgbGV0IHlvdVxuICAgICAqIGVuYWJsZSBhY2tub3dsZWRnZW1lbnQgZm9yIGJyb2FkY2FzdHMsIHByZXNlbmNlIHRyYWNraW5nLCBvciBwcml2YXRlIGNoYW5uZWxzLlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IFJlYWx0aW1lXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBVc2luZyBzdXBhYmFzZS1qcyAocmVjb21tZW5kZWQpXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgeyBjcmVhdGVDbGllbnQgfSBmcm9tICdAc3VwYWJhc2Uvc3VwYWJhc2UtanMnXG4gICAgICpcbiAgICAgKiBjb25zdCBzdXBhYmFzZSA9IGNyZWF0ZUNsaWVudCgnaHR0cHM6Ly94eXpjb21wYW55LnN1cGFiYXNlLmNvJywgJ3lvdXItcHVibGlzaGFibGUta2V5JylcbiAgICAgKiBjb25zdCBjaGFubmVsID0gc3VwYWJhc2UuY2hhbm5lbCgncm9vbTEnKVxuICAgICAqIGNoYW5uZWxcbiAgICAgKiAgIC5vbignYnJvYWRjYXN0JywgeyBldmVudDogJ2N1cnNvci1wb3MnIH0sIChwYXlsb2FkKSA9PiBjb25zb2xlLmxvZyhwYXlsb2FkKSlcbiAgICAgKiAgIC5zdWJzY3JpYmUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGUgU3RhbmRhbG9uZSBpbXBvcnQgZm9yIGJ1bmRsZS1zZW5zaXRpdmUgZW52aXJvbm1lbnRzXG4gICAgICogYGBgdHNcbiAgICAgKiBpbXBvcnQgUmVhbHRpbWVDbGllbnQgZnJvbSAnQHN1cGFiYXNlL3JlYWx0aW1lLWpzJ1xuICAgICAqXG4gICAgICogY29uc3QgY2xpZW50ID0gbmV3IFJlYWx0aW1lQ2xpZW50KCdodHRwczovL3h5emNvbXBhbnkuc3VwYWJhc2UuY28vcmVhbHRpbWUvdjEnLCB7XG4gICAgICogICBwYXJhbXM6IHsgYXBpa2V5OiAneW91ci1wdWJsaXNoYWJsZS1rZXknIH0sXG4gICAgICogfSlcbiAgICAgKiBjb25zdCBjaGFubmVsID0gbmV3IFJlYWx0aW1lQ2hhbm5lbCgncmVhbHRpbWU6cHVibGljOm1lc3NhZ2VzJywgeyBjb25maWc6IHt9IH0sIGNsaWVudClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAvKiogVG9waWMgbmFtZSBjYW4gYmUgYW55IHN0cmluZy4gKi9cbiAgICB0b3BpYywgcGFyYW1zID0geyBjb25maWc6IHt9IH0sIHNvY2tldCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICB0aGlzLnRvcGljID0gdG9waWM7XG4gICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICAgICAgICB0aGlzLnNvY2tldCA9IHNvY2tldDtcbiAgICAgICAgdGhpcy5iaW5kaW5ncyA9IHt9O1xuICAgICAgICB0aGlzLnN1YlRvcGljID0gdG9waWMucmVwbGFjZSgvXnJlYWx0aW1lOi9pLCAnJyk7XG4gICAgICAgIHRoaXMucGFyYW1zLmNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgYnJvYWRjYXN0OiB7IGFjazogZmFsc2UsIHNlbGY6IGZhbHNlIH0sXG4gICAgICAgICAgICBwcmVzZW5jZTogeyBrZXk6ICcnLCBlbmFibGVkOiBmYWxzZSB9LFxuICAgICAgICAgICAgcHJpdmF0ZTogZmFsc2UsXG4gICAgICAgIH0sIHBhcmFtcy5jb25maWcpO1xuICAgICAgICB0aGlzLmNoYW5uZWxBZGFwdGVyID0gbmV3IENoYW5uZWxBZGFwdGVyKHRoaXMuc29ja2V0LnNvY2tldEFkYXB0ZXIsIHRvcGljLCB0aGlzLnBhcmFtcyk7XG4gICAgICAgIHRoaXMucHJlc2VuY2UgPSBuZXcgUmVhbHRpbWVQcmVzZW5jZSh0aGlzKTtcbiAgICAgICAgdGhpcy5fb25DbG9zZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5fcmVtb3ZlKHRoaXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fdXBkYXRlRmlsdGVyVHJhbnNmb3JtKCk7XG4gICAgICAgIHRoaXMuYnJvYWRjYXN0RW5kcG9pbnRVUkwgPSBodHRwRW5kcG9pbnRVUkwodGhpcy5zb2NrZXQuc29ja2V0QWRhcHRlci5lbmRQb2ludFVSTCgpKTtcbiAgICAgICAgdGhpcy5wcml2YXRlID0gdGhpcy5wYXJhbXMuY29uZmlnLnByaXZhdGUgfHwgZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5wcml2YXRlICYmICgoX2IgPSAoX2EgPSB0aGlzLnBhcmFtcy5jb25maWcpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5icm9hZGNhc3QpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5yZXBsYXkpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHRyaWVkIHRvIHVzZSByZXBsYXkgb24gcHVibGljIGNoYW5uZWwgJyR7dGhpcy50b3BpY30nLiBJdCBtdXN0IGJlIGEgcHJpdmF0ZSBjaGFubmVsLmApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN1YnNjcmliZSByZWdpc3RlcnMgeW91ciBjbGllbnQgd2l0aCB0aGUgc2VydmVyXG4gICAgICogQGNhdGVnb3J5IFJlYWx0aW1lXG4gICAgICovXG4gICAgc3Vic2NyaWJlKGNhbGxiYWNrLCB0aW1lb3V0ID0gdGhpcy50aW1lb3V0KSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICBpZiAoIXRoaXMuc29ja2V0LmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LmNvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jaGFubmVsQWRhcHRlci5pc0Nsb3NlZCgpKSB7XG4gICAgICAgICAgICBjb25zdCB7IGNvbmZpZzogeyBicm9hZGNhc3QsIHByZXNlbmNlLCBwcml2YXRlOiBpc1ByaXZhdGUgfSwgfSA9IHRoaXMucGFyYW1zO1xuICAgICAgICAgICAgY29uc3QgcG9zdGdyZXNfY2hhbmdlcyA9IChfYiA9IChfYSA9IHRoaXMuYmluZGluZ3MucG9zdGdyZXNfY2hhbmdlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm1hcCgocikgPT4gci5maWx0ZXIpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBbXTtcbiAgICAgICAgICAgIGNvbnN0IHByZXNlbmNlX2VuYWJsZWQgPSAoISF0aGlzLmJpbmRpbmdzW1JFQUxUSU1FX0xJU1RFTl9UWVBFUy5QUkVTRU5DRV0gJiZcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRpbmdzW1JFQUxUSU1FX0xJU1RFTl9UWVBFUy5QUkVTRU5DRV0ubGVuZ3RoID4gMCkgfHxcbiAgICAgICAgICAgICAgICAoKF9jID0gdGhpcy5wYXJhbXMuY29uZmlnLnByZXNlbmNlKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuZW5hYmxlZCkgPT09IHRydWU7XG4gICAgICAgICAgICBjb25zdCBhY2Nlc3NUb2tlblBheWxvYWQgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICBicm9hZGNhc3QsXG4gICAgICAgICAgICAgICAgcHJlc2VuY2U6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJlc2VuY2UpLCB7IGVuYWJsZWQ6IHByZXNlbmNlX2VuYWJsZWQgfSksXG4gICAgICAgICAgICAgICAgcG9zdGdyZXNfY2hhbmdlcyxcbiAgICAgICAgICAgICAgICBwcml2YXRlOiBpc1ByaXZhdGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuc29ja2V0LmFjY2Vzc1Rva2VuVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhY2Nlc3NUb2tlblBheWxvYWQuYWNjZXNzX3Rva2VuID0gdGhpcy5zb2NrZXQuYWNjZXNzVG9rZW5WYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29uRXJyb3IoKHJlYXNvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrID09PSBudWxsIHx8IGNhbGxiYWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYWxsYmFjayhSRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTLkNIQU5ORUxfRVJST1IsIG5vcm1hbGl6ZUNoYW5uZWxFcnJvcihyZWFzb24pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5fb25DbG9zZSgoKSA9PiBjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbGJhY2soUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFUy5DTE9TRUQpKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSm9pblBheWxvYWQoT2JqZWN0LmFzc2lnbih7IGNvbmZpZyB9LCBhY2Nlc3NUb2tlblBheWxvYWQpKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlck1lc3NhZ2UoKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbEFkYXB0ZXJcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHRpbWVvdXQpXG4gICAgICAgICAgICAgICAgLnJlY2VpdmUoJ29rJywgYXN5bmMgKHsgcG9zdGdyZXNfY2hhbmdlcyB9KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gT25seSByZWZyZXNoIGF1dGggaWYgdXNpbmcgY2FsbGJhY2stYmFzZWQgdG9rZW5zXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNvY2tldC5faXNNYW51YWxUb2tlbigpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc29ja2V0LnNldEF1dGgoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBvc3RncmVzX2NoYW5nZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbGJhY2soUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFUy5TVUJTQ1JJQkVEKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVQb3N0Z3Jlc0JpbmRpbmdzKHBvc3RncmVzX2NoYW5nZXMsIGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLnJlY2VpdmUoJ2Vycm9yJywgKGVycm9yKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmVycm9yZWQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVzc2FnZSA9IE9iamVjdC52YWx1ZXMoZXJyb3IpLmpvaW4oJywgJykgfHwgJ2Vycm9yJztcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbGJhY2soUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFUy5DSEFOTkVMX0VSUk9SLCBuZXcgRXJyb3IobWVzc2FnZSwgeyBjYXVzZTogZXJyb3IgfSkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAucmVjZWl2ZSgndGltZW91dCcsICgpID0+IHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbGJhY2soUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFUy5USU1FRF9PVVQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIF91cGRhdGVQb3N0Z3Jlc0JpbmRpbmdzKHBvc3RncmVzX2NoYW5nZXMsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgY2xpZW50UG9zdGdyZXNCaW5kaW5ncyA9IHRoaXMuYmluZGluZ3MucG9zdGdyZXNfY2hhbmdlcztcbiAgICAgICAgY29uc3QgYmluZGluZ3NMZW4gPSAoX2EgPSBjbGllbnRQb3N0Z3Jlc0JpbmRpbmdzID09PSBudWxsIHx8IGNsaWVudFBvc3RncmVzQmluZGluZ3MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsaWVudFBvc3RncmVzQmluZGluZ3MubGVuZ3RoKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwO1xuICAgICAgICBjb25zdCBuZXdQb3N0Z3Jlc0JpbmRpbmdzID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmluZGluZ3NMZW47IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2xpZW50UG9zdGdyZXNCaW5kaW5nID0gY2xpZW50UG9zdGdyZXNCaW5kaW5nc1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHsgZmlsdGVyOiB7IGV2ZW50LCBzY2hlbWEsIHRhYmxlLCBmaWx0ZXIgfSwgfSA9IGNsaWVudFBvc3RncmVzQmluZGluZztcbiAgICAgICAgICAgIGNvbnN0IHNlcnZlclBvc3RncmVzRmlsdGVyID0gcG9zdGdyZXNfY2hhbmdlcyAmJiBwb3N0Z3Jlc19jaGFuZ2VzW2ldO1xuICAgICAgICAgICAgaWYgKHNlcnZlclBvc3RncmVzRmlsdGVyICYmXG4gICAgICAgICAgICAgICAgc2VydmVyUG9zdGdyZXNGaWx0ZXIuZXZlbnQgPT09IGV2ZW50ICYmXG4gICAgICAgICAgICAgICAgUmVhbHRpbWVDaGFubmVsLmlzRmlsdGVyVmFsdWVFcXVhbChzZXJ2ZXJQb3N0Z3Jlc0ZpbHRlci5zY2hlbWEsIHNjaGVtYSkgJiZcbiAgICAgICAgICAgICAgICBSZWFsdGltZUNoYW5uZWwuaXNGaWx0ZXJWYWx1ZUVxdWFsKHNlcnZlclBvc3RncmVzRmlsdGVyLnRhYmxlLCB0YWJsZSkgJiZcbiAgICAgICAgICAgICAgICBSZWFsdGltZUNoYW5uZWwuaXNGaWx0ZXJWYWx1ZUVxdWFsKHNlcnZlclBvc3RncmVzRmlsdGVyLmZpbHRlciwgZmlsdGVyKSkge1xuICAgICAgICAgICAgICAgIG5ld1Bvc3RncmVzQmluZGluZ3MucHVzaChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNsaWVudFBvc3RncmVzQmluZGluZyksIHsgaWQ6IHNlcnZlclBvc3RncmVzRmlsdGVyLmlkIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gQ0hBTk5FTF9TVEFURVMuZXJyb3JlZDtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbGJhY2soUkVBTFRJTUVfU1VCU0NSSUJFX1NUQVRFUy5DSEFOTkVMX0VSUk9SLCBuZXcgRXJyb3IoJ21pc21hdGNoIGJldHdlZW4gc2VydmVyIGFuZCBjbGllbnQgYmluZGluZ3MgZm9yIHBvc3RncmVzIGNoYW5nZXMnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYmluZGluZ3MucG9zdGdyZXNfY2hhbmdlcyA9IG5ld1Bvc3RncmVzQmluZGluZ3M7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlICE9IENIQU5ORUxfU1RBVEVTLmVycm9yZWQgJiYgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKFJFQUxUSU1FX1NVQlNDUklCRV9TVEFURVMuU1VCU0NSSUJFRCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgY3VycmVudCBwcmVzZW5jZSBzdGF0ZSBmb3IgdGhpcyBjaGFubmVsLlxuICAgICAqXG4gICAgICogVGhlIHNoYXBlIGlzIGEgbWFwIGtleWVkIGJ5IHByZXNlbmNlIGtleSAoZm9yIGV4YW1wbGUgYSB1c2VyIGlkKSB3aGVyZSBlYWNoIGVudHJ5IGNvbnRhaW5zIHRoZVxuICAgICAqIHRyYWNrZWQgbWV0YWRhdGEgZm9yIHRoYXQgdXNlci5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBSZWFsdGltZVxuICAgICAqL1xuICAgIHByZXNlbmNlU3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXNlbmNlLnN0YXRlO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZW5kcyB0aGUgc3VwcGxpZWQgcGF5bG9hZCB0byB0aGUgcHJlc2VuY2UgdHJhY2tlciBzbyBvdGhlciBzdWJzY3JpYmVycyBjYW4gc2VlIHRoYXQgdGhpc1xuICAgICAqIGNsaWVudCBpcyBvbmxpbmUuIFVzZSBgdW50cmFja2AgdG8gc3RvcCBicm9hZGNhc3RpbmcgcHJlc2VuY2UgZm9yIHRoZSBzYW1lIGtleS5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBSZWFsdGltZVxuICAgICAqL1xuICAgIGFzeW5jIHRyYWNrKHBheWxvYWQsIG9wdHMgPSB7fSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5zZW5kKHtcbiAgICAgICAgICAgIHR5cGU6ICdwcmVzZW5jZScsXG4gICAgICAgICAgICBldmVudDogJ3RyYWNrJyxcbiAgICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgIH0sIG9wdHMudGltZW91dCB8fCB0aGlzLnRpbWVvdXQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIHRoZSBjdXJyZW50IHByZXNlbmNlIHN0YXRlIGZvciB0aGlzIGNsaWVudC5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBSZWFsdGltZVxuICAgICAqL1xuICAgIGFzeW5jIHVudHJhY2sob3B0cyA9IHt9KSB7XG4gICAgICAgIHJldHVybiBhd2FpdCB0aGlzLnNlbmQoe1xuICAgICAgICAgICAgdHlwZTogJ3ByZXNlbmNlJyxcbiAgICAgICAgICAgIGV2ZW50OiAndW50cmFjaycsXG4gICAgICAgIH0sIG9wdHMpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMaXN0ZW4gdG8gcmVhbHRpbWUgZXZlbnRzIG9uIHRoaXMgY2hhbm5lbC5cbiAgICAgKiBAY2F0ZWdvcnkgUmVhbHRpbWVcbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICogLSBCeSBkZWZhdWx0LCBCcm9hZGNhc3QgYW5kIFByZXNlbmNlIGFyZSBlbmFibGVkIGZvciBhbGwgcHJvamVjdHMuXG4gICAgICogLSBCeSBkZWZhdWx0LCBsaXN0ZW5pbmcgdG8gZGF0YWJhc2UgY2hhbmdlcyBpcyBkaXNhYmxlZCBmb3IgbmV3IHByb2plY3RzIGR1ZSB0byBkYXRhYmFzZSBwZXJmb3JtYW5jZSBhbmQgc2VjdXJpdHkgY29uY2VybnMuIFlvdSBjYW4gdHVybiBpdCBvbiBieSBtYW5hZ2luZyBSZWFsdGltZSdzIFtyZXBsaWNhdGlvbl0oL2RvY3MvZ3VpZGVzL2FwaSNyZWFsdGltZS1hcGktb3ZlcnZpZXcpLlxuICAgICAqIC0gWW91IGNhbiByZWNlaXZlIHRoZSBcInByZXZpb3VzXCIgZGF0YSBmb3IgdXBkYXRlcyBhbmQgZGVsZXRlcyBieSBzZXR0aW5nIHRoZSB0YWJsZSdzIGBSRVBMSUNBIElERU5USVRZYCB0byBgRlVMTGAgKGUuZy4sIGBBTFRFUiBUQUJMRSB5b3VyX3RhYmxlIFJFUExJQ0EgSURFTlRJVFkgRlVMTDtgKS5cbiAgICAgKiAtIFJvdyBsZXZlbCBzZWN1cml0eSBpcyBub3QgYXBwbGllZCB0byBkZWxldGUgc3RhdGVtZW50cy4gV2hlbiBSTFMgaXMgZW5hYmxlZCBhbmQgcmVwbGljYSBpZGVudGl0eSBpcyBzZXQgdG8gZnVsbCwgb25seSB0aGUgcHJpbWFyeSBrZXkgaXMgc2VudCB0byBjbGllbnRzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgTGlzdGVuIHRvIGJyb2FkY2FzdCBtZXNzYWdlc1xuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY2hhbm5lbCA9IHN1cGFiYXNlLmNoYW5uZWwoXCJyb29tMVwiKVxuICAgICAqXG4gICAgICogY2hhbm5lbC5vbihcImJyb2FkY2FzdFwiLCB7IGV2ZW50OiBcImN1cnNvci1wb3NcIiB9LCAocGF5bG9hZCkgPT4ge1xuICAgICAqICAgY29uc29sZS5sb2coXCJDdXJzb3IgcG9zaXRpb24gcmVjZWl2ZWQhXCIsIHBheWxvYWQpO1xuICAgICAqIH0pLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB7XG4gICAgICogICBpZiAoc3RhdHVzID09PSBcIlNVQlNDUklCRURcIikge1xuICAgICAqICAgICBjaGFubmVsLnNlbmQoe1xuICAgICAqICAgICAgIHR5cGU6IFwiYnJvYWRjYXN0XCIsXG4gICAgICogICAgICAgZXZlbnQ6IFwiY3Vyc29yLXBvc1wiLFxuICAgICAqICAgICAgIHBheWxvYWQ6IHsgeDogTWF0aC5yYW5kb20oKSwgeTogTWF0aC5yYW5kb20oKSB9LFxuICAgICAqICAgICB9KTtcbiAgICAgKiAgIH1cbiAgICAgKiB9KTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIExpc3RlbiB0byBwcmVzZW5jZSBzeW5jXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjaGFubmVsID0gc3VwYWJhc2UuY2hhbm5lbCgncm9vbTEnKVxuICAgICAqIGNoYW5uZWxcbiAgICAgKiAgIC5vbigncHJlc2VuY2UnLCB7IGV2ZW50OiAnc3luYycgfSwgKCkgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnU3luY2VkIHByZXNlbmNlIHN0YXRlOiAnLCBjaGFubmVsLnByZXNlbmNlU3RhdGUoKSlcbiAgICAgKiAgIH0pXG4gICAgICogICAuc3Vic2NyaWJlKGFzeW5jIChzdGF0dXMpID0+IHtcbiAgICAgKiAgICAgaWYgKHN0YXR1cyA9PT0gJ1NVQlNDUklCRUQnKSB7XG4gICAgICogICAgICAgYXdhaXQgY2hhbm5lbC50cmFjayh7IG9ubGluZV9hdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpIH0pXG4gICAgICogICAgIH1cbiAgICAgKiAgIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBMaXN0ZW4gdG8gcHJlc2VuY2Ugam9pblxuICAgICAqIGBgYGpzXG4gICAgICogY29uc3QgY2hhbm5lbCA9IHN1cGFiYXNlLmNoYW5uZWwoJ3Jvb20xJylcbiAgICAgKiBjaGFubmVsXG4gICAgICogICAub24oJ3ByZXNlbmNlJywgeyBldmVudDogJ2pvaW4nIH0sICh7IG5ld1ByZXNlbmNlcyB9KSA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdOZXdseSBqb2luZWQgcHJlc2VuY2VzOiAnLCBuZXdQcmVzZW5jZXMpXG4gICAgICogICB9KVxuICAgICAqICAgLnN1YnNjcmliZShhc3luYyAoc3RhdHVzKSA9PiB7XG4gICAgICogICAgIGlmIChzdGF0dXMgPT09ICdTVUJTQ1JJQkVEJykge1xuICAgICAqICAgICAgIGF3YWl0IGNoYW5uZWwudHJhY2soeyBvbmxpbmVfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9KVxuICAgICAqICAgICB9XG4gICAgICogICB9KVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGUgTGlzdGVuIHRvIHByZXNlbmNlIGxlYXZlXG4gICAgICogYGBganNcbiAgICAgKiBjb25zdCBjaGFubmVsID0gc3VwYWJhc2UuY2hhbm5lbCgncm9vbTEnKVxuICAgICAqIGNoYW5uZWxcbiAgICAgKiAgIC5vbigncHJlc2VuY2UnLCB7IGV2ZW50OiAnbGVhdmUnIH0sICh7IGxlZnRQcmVzZW5jZXMgfSkgPT4ge1xuICAgICAqICAgICBjb25zb2xlLmxvZygnTmV3bHkgbGVmdCBwcmVzZW5jZXM6ICcsIGxlZnRQcmVzZW5jZXMpXG4gICAgICogICB9KVxuICAgICAqICAgLnN1YnNjcmliZShhc3luYyAoc3RhdHVzKSA9PiB7XG4gICAgICogICAgIGlmIChzdGF0dXMgPT09ICdTVUJTQ1JJQkVEJykge1xuICAgICAqICAgICAgIGF3YWl0IGNoYW5uZWwudHJhY2soeyBvbmxpbmVfYXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSB9KVxuICAgICAqICAgICAgIGF3YWl0IGNoYW5uZWwudW50cmFjaygpXG4gICAgICogICAgIH1cbiAgICAgKiAgIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBMaXN0ZW4gdG8gYWxsIGRhdGFiYXNlIGNoYW5nZXNcbiAgICAgKiBgYGBqc1xuICAgICAqIHN1cGFiYXNlXG4gICAgICogICAuY2hhbm5lbCgncm9vbTEnKVxuICAgICAqICAgLm9uKCdwb3N0Z3Jlc19jaGFuZ2VzJywgeyBldmVudDogJyonLCBzY2hlbWE6ICcqJyB9LCBwYXlsb2FkID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ0NoYW5nZSByZWNlaXZlZCEnLCBwYXlsb2FkKVxuICAgICAqICAgfSlcbiAgICAgKiAgIC5zdWJzY3JpYmUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGUgTGlzdGVuIHRvIGEgc3BlY2lmaWMgdGFibGVcbiAgICAgKiBgYGBqc1xuICAgICAqIHN1cGFiYXNlXG4gICAgICogICAuY2hhbm5lbCgncm9vbTEnKVxuICAgICAqICAgLm9uKCdwb3N0Z3Jlc19jaGFuZ2VzJywgeyBldmVudDogJyonLCBzY2hlbWE6ICdwdWJsaWMnLCB0YWJsZTogJ2NvdW50cmllcycgfSwgcGF5bG9hZCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdDaGFuZ2UgcmVjZWl2ZWQhJywgcGF5bG9hZClcbiAgICAgKiAgIH0pXG4gICAgICogICAuc3Vic2NyaWJlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIExpc3RlbiB0byBpbnNlcnRzXG4gICAgICogYGBganNcbiAgICAgKiBzdXBhYmFzZVxuICAgICAqICAgLmNoYW5uZWwoJ3Jvb20xJylcbiAgICAgKiAgIC5vbigncG9zdGdyZXNfY2hhbmdlcycsIHsgZXZlbnQ6ICdJTlNFUlQnLCBzY2hlbWE6ICdwdWJsaWMnLCB0YWJsZTogJ2NvdW50cmllcycgfSwgcGF5bG9hZCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdDaGFuZ2UgcmVjZWl2ZWQhJywgcGF5bG9hZClcbiAgICAgKiAgIH0pXG4gICAgICogICAuc3Vic2NyaWJlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlRGVzY3JpcHRpb24gTGlzdGVuIHRvIHVwZGF0ZXNcbiAgICAgKiBCeSBkZWZhdWx0LCBTdXBhYmFzZSB3aWxsIHNlbmQgb25seSB0aGUgdXBkYXRlZCByZWNvcmQuIElmIHlvdSB3YW50IHRvIHJlY2VpdmUgdGhlIHByZXZpb3VzIHZhbHVlcyBhcyB3ZWxsIHlvdSBjYW5cbiAgICAgKiBlbmFibGUgZnVsbCByZXBsaWNhdGlvbiBmb3IgdGhlIHRhYmxlIHlvdSBhcmUgbGlzdGVuaW5nIHRvOlxuICAgICAqXG4gICAgICogYGBgc3FsXG4gICAgICogYWx0ZXIgdGFibGUgXCJ5b3VyX3RhYmxlXCIgcmVwbGljYSBpZGVudGl0eSBmdWxsO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGUgTGlzdGVuIHRvIHVwZGF0ZXNcbiAgICAgKiBgYGBqc1xuICAgICAqIHN1cGFiYXNlXG4gICAgICogICAuY2hhbm5lbCgncm9vbTEnKVxuICAgICAqICAgLm9uKCdwb3N0Z3Jlc19jaGFuZ2VzJywgeyBldmVudDogJ1VQREFURScsIHNjaGVtYTogJ3B1YmxpYycsIHRhYmxlOiAnY291bnRyaWVzJyB9LCBwYXlsb2FkID0+IHtcbiAgICAgKiAgICAgY29uc29sZS5sb2coJ0NoYW5nZSByZWNlaXZlZCEnLCBwYXlsb2FkKVxuICAgICAqICAgfSlcbiAgICAgKiAgIC5zdWJzY3JpYmUoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVEZXNjcmlwdGlvbiBMaXN0ZW4gdG8gZGVsZXRlc1xuICAgICAqIEJ5IGRlZmF1bHQsIFN1cGFiYXNlIGRvZXMgbm90IHNlbmQgZGVsZXRlZCByZWNvcmRzLiBJZiB5b3Ugd2FudCB0byByZWNlaXZlIHRoZSBkZWxldGVkIHJlY29yZCB5b3UgY2FuXG4gICAgICogZW5hYmxlIGZ1bGwgcmVwbGljYXRpb24gZm9yIHRoZSB0YWJsZSB5b3UgYXJlIGxpc3RlbmluZyB0bzpcbiAgICAgKlxuICAgICAqIGBgYHNxbFxuICAgICAqIGFsdGVyIHRhYmxlIFwieW91cl90YWJsZVwiIHJlcGxpY2EgaWRlbnRpdHkgZnVsbDtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIExpc3RlbiB0byBkZWxldGVzXG4gICAgICogYGBganNcbiAgICAgKiBzdXBhYmFzZVxuICAgICAqICAgLmNoYW5uZWwoJ3Jvb20xJylcbiAgICAgKiAgIC5vbigncG9zdGdyZXNfY2hhbmdlcycsIHsgZXZlbnQ6ICdERUxFVEUnLCBzY2hlbWE6ICdwdWJsaWMnLCB0YWJsZTogJ2NvdW50cmllcycgfSwgcGF5bG9hZCA9PiB7XG4gICAgICogICAgIGNvbnNvbGUubG9nKCdDaGFuZ2UgcmVjZWl2ZWQhJywgcGF5bG9hZClcbiAgICAgKiAgIH0pXG4gICAgICogICAuc3Vic2NyaWJlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlRGVzY3JpcHRpb24gTGlzdGVuIHRvIG11bHRpcGxlIGV2ZW50c1xuICAgICAqIFlvdSBjYW4gY2hhaW4gbGlzdGVuZXJzIGlmIHlvdSB3YW50IHRvIGxpc3RlbiB0byBtdWx0aXBsZSBldmVudHMgZm9yIGVhY2ggdGFibGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBMaXN0ZW4gdG8gbXVsdGlwbGUgZXZlbnRzXG4gICAgICogYGBganNcbiAgICAgKiBzdXBhYmFzZVxuICAgICAqICAgLmNoYW5uZWwoJ3Jvb20xJylcbiAgICAgKiAgIC5vbigncG9zdGdyZXNfY2hhbmdlcycsIHsgZXZlbnQ6ICdJTlNFUlQnLCBzY2hlbWE6ICdwdWJsaWMnLCB0YWJsZTogJ2NvdW50cmllcycgfSwgaGFuZGxlUmVjb3JkSW5zZXJ0ZWQpXG4gICAgICogICAub24oJ3Bvc3RncmVzX2NoYW5nZXMnLCB7IGV2ZW50OiAnREVMRVRFJywgc2NoZW1hOiAncHVibGljJywgdGFibGU6ICdjb3VudHJpZXMnIH0sIGhhbmRsZVJlY29yZERlbGV0ZWQpXG4gICAgICogICAuc3Vic2NyaWJlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlRGVzY3JpcHRpb24gTGlzdGVuIHRvIHJvdyBsZXZlbCBjaGFuZ2VzXG4gICAgICogWW91IGNhbiBsaXN0ZW4gdG8gaW5kaXZpZHVhbCByb3dzIHVzaW5nIHRoZSBmb3JtYXQgYHt0YWJsZX06e2NvbH09ZXEue3ZhbH1gIC0gd2hlcmUgYHtjb2x9YCBpcyB0aGUgY29sdW1uIG5hbWUsIGFuZCBge3ZhbH1gIGlzIHRoZSB2YWx1ZSB3aGljaCB5b3Ugd2FudCB0byBtYXRjaC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlIExpc3RlbiB0byByb3cgbGV2ZWwgY2hhbmdlc1xuICAgICAqIGBgYGpzXG4gICAgICogc3VwYWJhc2VcbiAgICAgKiAgIC5jaGFubmVsKCdyb29tMScpXG4gICAgICogICAub24oJ3Bvc3RncmVzX2NoYW5nZXMnLCB7IGV2ZW50OiAnVVBEQVRFJywgc2NoZW1hOiAncHVibGljJywgdGFibGU6ICdjb3VudHJpZXMnLCBmaWx0ZXI6ICdpZD1lcS4yMDAnIH0sIGhhbmRsZVJlY29yZFVwZGF0ZWQpXG4gICAgICogICAuc3Vic2NyaWJlKClcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBvbih0eXBlLCBmaWx0ZXIsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHN0YXRlQ2hlY2sgPSB0aGlzLmNoYW5uZWxBZGFwdGVyLmlzSm9pbmVkKCkgfHwgdGhpcy5jaGFubmVsQWRhcHRlci5pc0pvaW5pbmcoKTtcbiAgICAgICAgY29uc3QgdHlwZUNoZWNrID0gdHlwZSA9PT0gUkVBTFRJTUVfTElTVEVOX1RZUEVTLlBSRVNFTkNFIHx8IHR5cGUgPT09IFJFQUxUSU1FX0xJU1RFTl9UWVBFUy5QT1NUR1JFU19DSEFOR0VTO1xuICAgICAgICBpZiAoc3RhdGVDaGVjayAmJiB0eXBlQ2hlY2spIHtcbiAgICAgICAgICAgIHRoaXMuc29ja2V0LmxvZygnY2hhbm5lbCcsIGBjYW5ub3QgYWRkIFxcYCR7dHlwZX1cXGAgY2FsbGJhY2tzIGZvciAke3RoaXMudG9waWN9IGFmdGVyIFxcYHN1YnNjcmliZSgpXFxgLmApO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgYWRkIFxcYCR7dHlwZX1cXGAgY2FsbGJhY2tzIGZvciAke3RoaXMudG9waWN9IGFmdGVyIFxcYHN1YnNjcmliZSgpXFxgLmApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9vbih0eXBlLCBmaWx0ZXIsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZHMgYSBicm9hZGNhc3QgbWVzc2FnZSBleHBsaWNpdGx5IHZpYSBSRVNUIEFQSS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGFsd2F5cyB1c2VzIHRoZSBSRVNUIEFQSSBlbmRwb2ludCByZWdhcmRsZXNzIG9mIFdlYlNvY2tldCBjb25uZWN0aW9uIHN0YXRlLlxuICAgICAqIFVzZWZ1bCB3aGVuIHlvdSB3YW50IHRvIGd1YXJhbnRlZSBSRVNUIGRlbGl2ZXJ5IG9yIHdoZW4gZ3JhZHVhbGx5IG1pZ3JhdGluZyBmcm9tIGltcGxpY2l0IFJFU1QgZmFsbGJhY2suXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgVGhlIG5hbWUgb2YgdGhlIGJyb2FkY2FzdCBldmVudFxuICAgICAqIEBwYXJhbSBwYXlsb2FkIFBheWxvYWQgdG8gYmUgc2VudCAocmVxdWlyZWQpXG4gICAgICogQHBhcmFtIG9wdHMgT3B0aW9ucyBpbmNsdWRpbmcgdGltZW91dFxuICAgICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIG9iamVjdCB3aXRoIHN1Y2Nlc3Mgc3RhdHVzLCBhbmQgZXJyb3IgZGV0YWlscyBpZiBmYWlsZWRcbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBSZWFsdGltZVxuICAgICAqL1xuICAgIGFzeW5jIGh0dHBTZW5kKGV2ZW50LCBwYXlsb2FkLCBvcHRzID0ge30pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAocGF5bG9hZCA9PT0gdW5kZWZpbmVkIHx8IHBheWxvYWQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1BheWxvYWQgaXMgcmVxdWlyZWQgZm9yIGh0dHBTZW5kKCknKSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgIGFwaWtleTogdGhpcy5zb2NrZXQuYXBpS2V5ID8gdGhpcy5zb2NrZXQuYXBpS2V5IDogJycsXG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9O1xuICAgICAgICBpZiAodGhpcy5zb2NrZXQuYWNjZXNzVG9rZW5WYWx1ZSkge1xuICAgICAgICAgICAgaGVhZGVyc1snQXV0aG9yaXphdGlvbiddID0gYEJlYXJlciAke3RoaXMuc29ja2V0LmFjY2Vzc1Rva2VuVmFsdWV9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIG1lc3NhZ2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcGljOiB0aGlzLnN1YlRvcGljLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmF0ZTogdGhpcy5wcml2YXRlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLl9mZXRjaFdpdGhUaW1lb3V0KHRoaXMuYnJvYWRjYXN0RW5kcG9pbnRVUkwsIG9wdGlvbnMsIChfYSA9IG9wdHMudGltZW91dCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy50aW1lb3V0KTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA9PT0gMjAyKSB7XG4gICAgICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IHJlc3BvbnNlLnN0YXR1c1RleHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvckJvZHkgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBlcnJvckJvZHkuZXJyb3IgfHwgZXJyb3JCb2R5Lm1lc3NhZ2UgfHwgZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYikgeyB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNlbmRzIGEgbWVzc2FnZSBpbnRvIHRoZSBjaGFubmVsLlxuICAgICAqXG4gICAgICogQHBhcmFtIGFyZ3MgQXJndW1lbnRzIHRvIHNlbmQgdG8gY2hhbm5lbFxuICAgICAqIEBwYXJhbSBhcmdzLnR5cGUgVGhlIHR5cGUgb2YgZXZlbnQgdG8gc2VuZFxuICAgICAqIEBwYXJhbSBhcmdzLmV2ZW50IFRoZSBuYW1lIG9mIHRoZSBldmVudCBiZWluZyBzZW50XG4gICAgICogQHBhcmFtIGFyZ3MucGF5bG9hZCBQYXlsb2FkIHRvIGJlIHNlbnRcbiAgICAgKiBAcGFyYW0gb3B0cyBPcHRpb25zIHRvIGJlIHVzZWQgZHVyaW5nIHRoZSBzZW5kIHByb2Nlc3NcbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBSZWFsdGltZVxuICAgICAqXG4gICAgICogQHJlbWFya3NcbiAgICAgKiAtIFdoZW4gdXNpbmcgUkVTVCB5b3UgZG9uJ3QgbmVlZCB0byBzdWJzY3JpYmUgdG8gdGhlIGNoYW5uZWxcbiAgICAgKiAtIFJFU1QgY2FsbHMgYXJlIG9ubHkgYXZhaWxhYmxlIGZyb20gMi4zNy4wIG9ud2FyZHNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFNlbmQgYSBtZXNzYWdlIHZpYSB3ZWJzb2NrZXRcbiAgICAgKiBgYGBqc1xuICAgICAqIGNvbnN0IGNoYW5uZWwgPSBzdXBhYmFzZS5jaGFubmVsKCdyb29tMScpXG4gICAgICpcbiAgICAgKiBjaGFubmVsLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB7XG4gICAgICogICBpZiAoc3RhdHVzID09PSAnU1VCU0NSSUJFRCcpIHtcbiAgICAgKiAgICAgY2hhbm5lbC5zZW5kKHtcbiAgICAgKiAgICAgICB0eXBlOiAnYnJvYWRjYXN0JyxcbiAgICAgKiAgICAgICBldmVudDogJ2N1cnNvci1wb3MnLFxuICAgICAqICAgICAgIHBheWxvYWQ6IHsgeDogTWF0aC5yYW5kb20oKSwgeTogTWF0aC5yYW5kb20oKSB9LFxuICAgICAqICAgICB9KVxuICAgICAqICAgfVxuICAgICAqIH0pXG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVJlc3BvbnNlIFNlbmQgYSBtZXNzYWdlIHZpYSB3ZWJzb2NrZXRcbiAgICAgKiBgYGBqc1xuICAgICAqIG9rIHwgdGltZWQgb3V0IHwgZXJyb3JcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFNlbmQgYSBtZXNzYWdlIHZpYSBSRVNUXG4gICAgICogYGBganNcbiAgICAgKiBzdXBhYmFzZVxuICAgICAqICAgLmNoYW5uZWwoJ3Jvb20xJylcbiAgICAgKiAgIC5odHRwU2VuZCgnY3Vyc29yLXBvcycsIHsgeDogTWF0aC5yYW5kb20oKSwgeTogTWF0aC5yYW5kb20oKSB9KVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGFzeW5jIHNlbmQoYXJncywgb3B0cyA9IHt9KSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICghdGhpcy5jaGFubmVsQWRhcHRlci5jYW5QdXNoKCkgJiYgYXJncy50eXBlID09PSAnYnJvYWRjYXN0Jykge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZWFsdGltZSBzZW5kKCkgaXMgYXV0b21hdGljYWxseSBmYWxsaW5nIGJhY2sgdG8gUkVTVCBBUEkuICcgK1xuICAgICAgICAgICAgICAgICdUaGlzIGJlaGF2aW9yIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLiAnICtcbiAgICAgICAgICAgICAgICAnUGxlYXNlIHVzZSBodHRwU2VuZCgpIGV4cGxpY2l0bHkgZm9yIFJFU1QgZGVsaXZlcnkuJyk7XG4gICAgICAgICAgICBjb25zdCB7IGV2ZW50LCBwYXlsb2FkOiBlbmRwb2ludF9wYXlsb2FkIH0gPSBhcmdzO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgICBhcGlrZXk6IHRoaXMuc29ja2V0LmFwaUtleSA/IHRoaXMuc29ja2V0LmFwaUtleSA6ICcnLFxuICAgICAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRoaXMuc29ja2V0LmFjY2Vzc1Rva2VuVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBoZWFkZXJzWydBdXRob3JpemF0aW9uJ10gPSBgQmVhcmVyICR7dGhpcy5zb2NrZXQuYWNjZXNzVG9rZW5WYWx1ZX1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BpYzogdGhpcy5zdWJUb3BpYyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiBlbmRwb2ludF9wYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhdGU6IHRoaXMucHJpdmF0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuX2ZldGNoV2l0aFRpbWVvdXQodGhpcy5icm9hZGNhc3RFbmRwb2ludFVSTCwgb3B0aW9ucywgKF9hID0gb3B0cy50aW1lb3V0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLnRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIGF3YWl0ICgoX2IgPSByZXNwb25zZS5ib2R5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FuY2VsKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNwb25zZS5vayA/ICdvaycgOiAnZXJyb3InO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IgJiYgZXJyb3IubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndGltZWQgb3V0JztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZXJyb3InO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgICAgIGNvbnN0IHB1c2ggPSB0aGlzLmNoYW5uZWxBZGFwdGVyLnB1c2goYXJncy50eXBlLCBhcmdzLCBvcHRzLnRpbWVvdXQgfHwgdGhpcy50aW1lb3V0KTtcbiAgICAgICAgICAgICAgICBpZiAoYXJncy50eXBlID09PSAnYnJvYWRjYXN0JyAmJiAhKChfYyA9IChfYiA9IChfYSA9IHRoaXMucGFyYW1zKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29uZmlnKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuYnJvYWRjYXN0KSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCdvaycpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwdXNoLnJlY2VpdmUoJ29rJywgKCkgPT4gcmVzb2x2ZSgnb2snKSk7XG4gICAgICAgICAgICAgICAgcHVzaC5yZWNlaXZlKCdlcnJvcicsICgpID0+IHJlc29sdmUoJ2Vycm9yJykpO1xuICAgICAgICAgICAgICAgIHB1c2gucmVjZWl2ZSgndGltZW91dCcsICgpID0+IHJlc29sdmUoJ3RpbWVkIG91dCcpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHBheWxvYWQgdGhhdCB3aWxsIGJlIHNlbnQgdGhlIG5leHQgdGltZSB0aGUgY2hhbm5lbCBqb2lucyAocmVjb25uZWN0cykuXG4gICAgICogVXNlZnVsIGZvciByb3RhdGluZyBhY2Nlc3MgdG9rZW5zIG9yIHVwZGF0aW5nIGNvbmZpZyB3aXRob3V0IHJlLWNyZWF0aW5nIHRoZSBjaGFubmVsLlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IFJlYWx0aW1lXG4gICAgICovXG4gICAgdXBkYXRlSm9pblBheWxvYWQocGF5bG9hZCkge1xuICAgICAgICB0aGlzLmNoYW5uZWxBZGFwdGVyLnVwZGF0ZUpvaW5QYXlsb2FkKHBheWxvYWQpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBMZWF2ZXMgdGhlIGNoYW5uZWwuXG4gICAgICpcbiAgICAgKiBVbnN1YnNjcmliZXMgZnJvbSBzZXJ2ZXIgZXZlbnRzLCBhbmQgaW5zdHJ1Y3RzIGNoYW5uZWwgdG8gdGVybWluYXRlIG9uIHNlcnZlci5cbiAgICAgKiBUcmlnZ2VycyBvbkNsb3NlKCkgaG9va3MuXG4gICAgICpcbiAgICAgKiBUbyByZWNlaXZlIGxlYXZlIGFja25vd2xlZGdlbWVudHMsIHVzZSB0aGUgYSBgcmVjZWl2ZWAgaG9vayB0byBiaW5kIHRvIHRoZSBzZXJ2ZXIgYWNrLCBpZTpcbiAgICAgKiBjaGFubmVsLnVuc3Vic2NyaWJlKCkucmVjZWl2ZShcIm9rXCIsICgpID0+IGFsZXJ0KFwibGVmdCFcIikgKVxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IFJlYWx0aW1lXG4gICAgICovXG4gICAgYXN5bmMgdW5zdWJzY3JpYmUodGltZW91dCA9IHRoaXMudGltZW91dCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbEFkYXB0ZXJcbiAgICAgICAgICAgICAgICAudW5zdWJzY3JpYmUodGltZW91dClcbiAgICAgICAgICAgICAgICAucmVjZWl2ZSgnb2snLCAoKSA9PiByZXNvbHZlKCdvaycpKVxuICAgICAgICAgICAgICAgIC5yZWNlaXZlKCd0aW1lb3V0JywgKCkgPT4gcmVzb2x2ZSgndGltZWQgb3V0JykpXG4gICAgICAgICAgICAgICAgLnJlY2VpdmUoJ2Vycm9yJywgKCkgPT4gcmVzb2x2ZSgnZXJyb3InKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEZXN0cm95cyBhbmQgc3RvcHMgcmVsYXRlZCB0aW1lcnMuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgUmVhbHRpbWVcbiAgICAgKi9cbiAgICB0ZWFyZG93bigpIHtcbiAgICAgICAgdGhpcy5jaGFubmVsQWRhcHRlci50ZWFyZG93bigpO1xuICAgIH1cbiAgICAvKiogQGludGVybmFsICovXG4gICAgYXN5bmMgX2ZldGNoV2l0aFRpbWVvdXQodXJsLCBvcHRpb25zLCB0aW1lb3V0KSB7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgICAgIGNvbnN0IGlkID0gc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIHRpbWVvdXQpO1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc29ja2V0LmZldGNoKHVybCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKSwgeyBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsIH0pKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xuICAgIH1cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX29uKHR5cGUsIGZpbHRlciwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgdHlwZUxvd2VyID0gdHlwZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBjb25zdCByZWYgPSB0aGlzLmNoYW5uZWxBZGFwdGVyLm9uKHR5cGUsIGNhbGxiYWNrKTtcbiAgICAgICAgY29uc3QgYmluZGluZyA9IHtcbiAgICAgICAgICAgIHR5cGU6IHR5cGVMb3dlcixcbiAgICAgICAgICAgIGZpbHRlcjogZmlsdGVyLFxuICAgICAgICAgICAgY2FsbGJhY2s6IGNhbGxiYWNrLFxuICAgICAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLmJpbmRpbmdzW3R5cGVMb3dlcl0pIHtcbiAgICAgICAgICAgIHRoaXMuYmluZGluZ3NbdHlwZUxvd2VyXS5wdXNoKGJpbmRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5iaW5kaW5nc1t0eXBlTG93ZXJdID0gW2JpbmRpbmddO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VwZGF0ZUZpbHRlck1lc3NhZ2UoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjaGFubmVsIGNsb3Nlcy5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIF9vbkNsb3NlKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuY2hhbm5lbEFkYXB0ZXIub25DbG9zZShjYWxsYmFjayk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVycyBhIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB3aGVuIHRoZSBjaGFubmVsIGVuY291bnRlcmVzIGFuIGVycm9yLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgX29uRXJyb3IoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5jaGFubmVsQWRhcHRlci5vbkVycm9yKGNhbGxiYWNrKTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF91cGRhdGVGaWx0ZXJNZXNzYWdlKCkge1xuICAgICAgICB0aGlzLmNoYW5uZWxBZGFwdGVyLnVwZGF0ZUZpbHRlckJpbmRpbmdzKChiaW5kaW5nLCBwYXlsb2FkLCByZWYpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mLCBfZztcbiAgICAgICAgICAgIGNvbnN0IHR5cGVMb3dlciA9IGJpbmRpbmcuZXZlbnQudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9ub3RUaGlzQ2hhbm5lbEV2ZW50KHR5cGVMb3dlciwgcmVmKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJpbmQgPSAoX2EgPSB0aGlzLmJpbmRpbmdzW3R5cGVMb3dlcl0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5maW5kKChiaW5kKSA9PiBiaW5kLnJlZiA9PT0gYmluZGluZy5yZWYpO1xuICAgICAgICAgICAgaWYgKCFiaW5kKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoWydicm9hZGNhc3QnLCAncHJlc2VuY2UnLCAncG9zdGdyZXNfY2hhbmdlcyddLmluY2x1ZGVzKHR5cGVMb3dlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoJ2lkJyBpbiBiaW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJpbmRJZCA9IGJpbmQuaWQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJpbmRFdmVudCA9IChfYiA9IGJpbmQuZmlsdGVyKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoYmluZElkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoKF9jID0gcGF5bG9hZC5pZHMpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5pbmNsdWRlcyhiaW5kSWQpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKGJpbmRFdmVudCA9PT0gJyonIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJpbmRFdmVudCA9PT0gbnVsbCB8fCBiaW5kRXZlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJpbmRFdmVudC50b0xvY2FsZUxvd2VyQ2FzZSgpKSA9PT0gKChfZCA9IHBheWxvYWQuZGF0YSkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLnR5cGUudG9Mb2NhbGVMb3dlckNhc2UoKSkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJpbmRFdmVudCA9IChfZiA9IChfZSA9IGJpbmQgPT09IG51bGwgfHwgYmluZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYmluZC5maWx0ZXIpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5ldmVudCkgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiaW5kRXZlbnQgPT09ICcqJyB8fCBiaW5kRXZlbnQgPT09ICgoX2cgPSBwYXlsb2FkID09PSBudWxsIHx8IHBheWxvYWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBheWxvYWQuZXZlbnQpID09PSBudWxsIHx8IF9nID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZy50b0xvY2FsZUxvd2VyQ2FzZSgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmluZC50eXBlLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IHR5cGVMb3dlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfbm90VGhpc0NoYW5uZWxFdmVudChldmVudCwgcmVmKSB7XG4gICAgICAgIGNvbnN0IHsgY2xvc2UsIGVycm9yLCBsZWF2ZSwgam9pbiB9ID0gQ0hBTk5FTF9FVkVOVFM7XG4gICAgICAgIGNvbnN0IGV2ZW50cyA9IFtjbG9zZSwgZXJyb3IsIGxlYXZlLCBqb2luXTtcbiAgICAgICAgcmV0dXJuIHJlZiAmJiBldmVudHMuaW5jbHVkZXMoZXZlbnQpICYmIHJlZiAhPT0gdGhpcy5qb2luUHVzaC5yZWY7XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfdXBkYXRlRmlsdGVyVHJhbnNmb3JtKCkge1xuICAgICAgICB0aGlzLmNoYW5uZWxBZGFwdGVyLnVwZGF0ZVBheWxvYWRUcmFuc2Zvcm0oKGV2ZW50LCBwYXlsb2FkLCByZWYpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZCA9PT0gJ29iamVjdCcgJiYgJ2lkcycgaW4gcGF5bG9hZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvc3RncmVzQ2hhbmdlcyA9IHBheWxvYWQuZGF0YTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNjaGVtYSwgdGFibGUsIGNvbW1pdF90aW1lc3RhbXAsIHR5cGUsIGVycm9ycyB9ID0gcG9zdGdyZXNDaGFuZ2VzO1xuICAgICAgICAgICAgICAgIGNvbnN0IGVucmljaGVkUGF5bG9hZCA9IHtcbiAgICAgICAgICAgICAgICAgICAgc2NoZW1hOiBzY2hlbWEsXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlOiB0YWJsZSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWl0X3RpbWVzdGFtcDogY29tbWl0X3RpbWVzdGFtcCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICBuZXc6IHt9LFxuICAgICAgICAgICAgICAgICAgICBvbGQ6IHt9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IGVycm9ycyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGVucmljaGVkUGF5bG9hZCksIHRoaXMuX2dldFBheWxvYWRSZWNvcmRzKHBvc3RncmVzQ2hhbmdlcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb3B5QmluZGluZ3Mob3RoZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuam9pbmVkT25jZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgY29weSBiaW5kaW5ncyBpbnRvIGpvaW5lZCBjaGFubmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBraW5kIGluIG90aGVyLmJpbmRpbmdzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJpbmRpbmcgb2Ygb3RoZXIuYmluZGluZ3Nba2luZF0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9vbihiaW5kaW5nLnR5cGUsIGJpbmRpbmcuZmlsdGVyLCBiaW5kaW5nLmNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb21wYXJlcyB0d28gb3B0aW9uYWwgZmlsdGVyIHZhbHVlcyBmb3IgZXF1YWxpdHkuXG4gICAgICogVHJlYXRzIHVuZGVmaW5lZCwgbnVsbCwgYW5kIGVtcHR5IHN0cmluZyBhcyBlcXVpdmFsZW50IGVtcHR5IHZhbHVlcy5cbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBzdGF0aWMgaXNGaWx0ZXJWYWx1ZUVxdWFsKHNlcnZlclZhbHVlLCBjbGllbnRWYWx1ZSkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkU2VydmVyID0gc2VydmVyVmFsdWUgIT09IG51bGwgJiYgc2VydmVyVmFsdWUgIT09IHZvaWQgMCA/IHNlcnZlclZhbHVlIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkQ2xpZW50ID0gY2xpZW50VmFsdWUgIT09IG51bGwgJiYgY2xpZW50VmFsdWUgIT09IHZvaWQgMCA/IGNsaWVudFZhbHVlIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gbm9ybWFsaXplZFNlcnZlciA9PT0gbm9ybWFsaXplZENsaWVudDtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9nZXRQYXlsb2FkUmVjb3JkcyhwYXlsb2FkKSB7XG4gICAgICAgIGNvbnN0IHJlY29yZHMgPSB7XG4gICAgICAgICAgICBuZXc6IHt9LFxuICAgICAgICAgICAgb2xkOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHBheWxvYWQudHlwZSA9PT0gJ0lOU0VSVCcgfHwgcGF5bG9hZC50eXBlID09PSAnVVBEQVRFJykge1xuICAgICAgICAgICAgcmVjb3Jkcy5uZXcgPSBUcmFuc2Zvcm1lcnMuY29udmVydENoYW5nZURhdGEocGF5bG9hZC5jb2x1bW5zLCBwYXlsb2FkLnJlY29yZCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBheWxvYWQudHlwZSA9PT0gJ1VQREFURScgfHwgcGF5bG9hZC50eXBlID09PSAnREVMRVRFJykge1xuICAgICAgICAgICAgcmVjb3Jkcy5vbGQgPSBUcmFuc2Zvcm1lcnMuY29udmVydENoYW5nZURhdGEocGF5bG9hZC5jb2x1bW5zLCBwYXlsb2FkLm9sZF9yZWNvcmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWNvcmRzO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlYWx0aW1lQ2hhbm5lbC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimeChannel.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimeClient.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/@supabase/realtime-js/dist/module/RealtimeClient.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((__unused_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 */ \"default\": () => (/* binding */ RealtimeClient)\n/* harmony export */ });\n/* harmony import */ var _lib_websocket_factory__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/websocket-factory */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/websocket-factory.js\");\n/* harmony import */ var _lib_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/constants */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/constants.js\");\n/* harmony import */ var _lib_serializer__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/serializer */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/serializer.js\");\n/* harmony import */ var _lib_transformers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/transformers */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/transformers.js\");\n/* harmony import */ var _RealtimeChannel__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./RealtimeChannel */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimeChannel.js\");\n/* harmony import */ var _phoenix_socketAdapter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./phoenix/socketAdapter */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/phoenix/socketAdapter.js\");\n\n\n\n\n\n\n// Connection-related constants\nconst CONNECTION_TIMEOUTS = {\n HEARTBEAT_INTERVAL: 25000,\n RECONNECT_DELAY: 10,\n HEARTBEAT_TIMEOUT_FALLBACK: 100,\n};\nconst RECONNECT_INTERVALS = [1000, 2000, 5000, 10000];\nconst DEFAULT_RECONNECT_FALLBACK = 10000;\nconst WORKER_SCRIPT = `\n addEventListener(\"message\", (e) => {\n if (e.data.event === \"start\") {\n setInterval(() => postMessage({ event: \"keepAlive\" }), e.data.interval);\n }\n });`;\nclass RealtimeClient {\n get endPoint() {\n return this.socketAdapter.endPoint;\n }\n get timeout() {\n return this.socketAdapter.timeout;\n }\n get transport() {\n return this.socketAdapter.transport;\n }\n get heartbeatCallback() {\n return this.socketAdapter.heartbeatCallback;\n }\n get heartbeatIntervalMs() {\n return this.socketAdapter.heartbeatIntervalMs;\n }\n get heartbeatTimer() {\n if (this.worker) {\n return this._workerHeartbeatTimer;\n }\n return this.socketAdapter.heartbeatTimer;\n }\n get pendingHeartbeatRef() {\n if (this.worker) {\n return this._pendingWorkerHeartbeatRef;\n }\n return this.socketAdapter.pendingHeartbeatRef;\n }\n get reconnectTimer() {\n return this.socketAdapter.reconnectTimer;\n }\n get vsn() {\n return this.socketAdapter.vsn;\n }\n get encode() {\n return this.socketAdapter.encode;\n }\n get decode() {\n return this.socketAdapter.decode;\n }\n get reconnectAfterMs() {\n return this.socketAdapter.reconnectAfterMs;\n }\n get sendBuffer() {\n return this.socketAdapter.sendBuffer;\n }\n get stateChangeCallbacks() {\n return this.socketAdapter.stateChangeCallbacks;\n }\n /**\n * Initializes the Socket.\n *\n * @param endPoint The string WebSocket endpoint, ie, \"ws://example.com/socket\", \"wss://example.com\", \"/socket\" (inherited host & protocol)\n * @param httpEndpoint The string HTTP endpoint, ie, \"https://example.com\", \"/\" (inherited host & protocol)\n * @param options.transport The Websocket Transport, for example WebSocket. This can be a custom implementation\n * @param options.timeout The default timeout in milliseconds to trigger push timeouts.\n * @param options.params The optional params to pass when connecting.\n * @param options.headers Deprecated: headers cannot be set on websocket connections and this option will be removed in the future.\n * @param options.heartbeatIntervalMs The millisec interval to send a heartbeat message.\n * @param options.heartbeatCallback The optional function to handle heartbeat status and latency.\n * @param options.logger The optional function for specialized logging, ie: logger: (kind, msg, data) => { console.log(`${kind}: ${msg}`, data) }\n * @param options.logLevel Sets the log level for Realtime\n * @param options.encode The function to encode outgoing messages. Defaults to JSON: (payload, callback) => callback(JSON.stringify(payload))\n * @param options.decode The function to decode incoming messages. Defaults to Serializer's decode.\n * @param options.reconnectAfterMs he optional function that returns the millsec reconnect interval. Defaults to stepped backoff off.\n * @param options.worker Use Web Worker to set a side flow. Defaults to false.\n * @param options.workerUrl The URL of the worker script. Defaults to https://realtime.supabase.com/worker.js that includes a heartbeat event call to keep the connection alive.\n * @param options.vsn The protocol version to use when connecting. Supported versions are \"1.0.0\" and \"2.0.0\". Defaults to \"2.0.0\".\n *\n * @category Realtime\n *\n * @example Using supabase-js (recommended)\n * ```ts\n * import { createClient } from '@supabase/supabase-js'\n *\n * const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n * const channel = supabase.channel('room1')\n * channel\n * .on('broadcast', { event: 'cursor-pos' }, (payload) => console.log(payload))\n * .subscribe()\n * ```\n *\n * @example Standalone import for bundle-sensitive environments\n * ```ts\n * import RealtimeClient from '@supabase/realtime-js'\n *\n * const client = new RealtimeClient('https://xyzcompany.supabase.co/realtime/v1', {\n * params: { apikey: 'your-publishable-key' },\n * })\n * client.connect()\n * ```\n */\n constructor(endPoint, options) {\n var _a;\n this.channels = new Array();\n this.accessTokenValue = null;\n this.accessToken = null;\n this.apiKey = null;\n this.httpEndpoint = '';\n /** @deprecated headers cannot be set on websocket connections */\n this.headers = {};\n this.params = {};\n this.ref = 0;\n this.serializer = new _lib_serializer__WEBPACK_IMPORTED_MODULE_2__[\"default\"]();\n this._manuallySetToken = false;\n this._authPromise = null;\n this._workerHeartbeatTimer = undefined;\n this._pendingWorkerHeartbeatRef = null;\n this._pendingDisconnectTimer = null;\n this._disconnectOnEmptyChannelsAfterMs = 0;\n /**\n * Use either custom fetch, if provided, or default fetch to make HTTP requests\n *\n * @internal\n */\n this._resolveFetch = (customFetch) => {\n if (customFetch) {\n return (...args) => customFetch(...args);\n }\n return (...args) => fetch(...args);\n };\n // Validate required parameters\n if (!((_a = options === null || options === void 0 ? void 0 : options.params) === null || _a === void 0 ? void 0 : _a.apikey)) {\n throw new Error('API key is required to connect to Realtime');\n }\n this.apiKey = options.params.apikey;\n const socketAdapterOptions = this._initializeOptions(options);\n this.socketAdapter = new _phoenix_socketAdapter__WEBPACK_IMPORTED_MODULE_5__[\"default\"](endPoint, socketAdapterOptions);\n this.httpEndpoint = (0,_lib_transformers__WEBPACK_IMPORTED_MODULE_3__.httpEndpointURL)(endPoint);\n this.fetch = this._resolveFetch(options === null || options === void 0 ? void 0 : options.fetch);\n }\n /**\n * Connects the socket, unless already connected.\n *\n * @category Realtime\n */\n connect() {\n // Skip if already connecting, disconnecting, or connected\n if (this.isConnecting() || this.isDisconnecting() || this.isConnected()) {\n return;\n }\n // Trigger auth if needed and not already in progress\n // This ensures auth is called for standalone RealtimeClient usage\n // while avoiding race conditions with SupabaseClient's immediate setAuth call\n if (this.accessToken && !this._authPromise) {\n this._setAuthSafely('connect');\n }\n this._setupConnectionHandlers();\n try {\n this.socketAdapter.connect();\n }\n catch (error) {\n const errorMessage = error.message;\n // Provide helpful error message based on environment\n if (errorMessage.includes('Node.js')) {\n throw new Error(`${errorMessage}\\n\\n` +\n 'To use Realtime in Node.js, you need to provide a WebSocket implementation:\\n\\n' +\n 'Option 1: Use Node.js 22+ which has native WebSocket support\\n' +\n 'Option 2: Install and provide the \"ws\" package:\\n\\n' +\n ' npm install ws\\n\\n' +\n ' import ws from \"ws\"\\n' +\n ' const client = new RealtimeClient(url, {\\n' +\n ' ...options,\\n' +\n ' transport: ws\\n' +\n ' })');\n }\n throw new Error(`WebSocket not available: ${errorMessage}`);\n }\n this._handleNodeJsRaceCondition();\n }\n /**\n * Returns the URL of the websocket.\n * @returns string The URL of the websocket.\n *\n * @category Realtime\n */\n endpointURL() {\n return this.socketAdapter.endPointURL();\n }\n /**\n * Disconnects the socket.\n *\n * @param code A numeric status code to send on disconnect.\n * @param reason A custom reason for the disconnect.\n *\n * @category Realtime\n */\n async disconnect(code, reason) {\n this._cancelPendingDisconnect();\n if (this.isDisconnecting()) {\n return 'ok';\n }\n return await this.socketAdapter.disconnect(() => {\n clearInterval(this._workerHeartbeatTimer);\n this._terminateWorker();\n }, code, reason);\n }\n /**\n * Returns all created channels\n *\n * @category Realtime\n */\n getChannels() {\n return this.channels;\n }\n /**\n * Unsubscribes, removes and tears down a single channel\n * @param channel A RealtimeChannel instance\n *\n * @category Realtime\n */\n async removeChannel(channel) {\n const status = await channel.unsubscribe();\n if (status === 'ok') {\n channel.teardown();\n }\n return status;\n }\n /**\n * Unsubscribes, removes and tears down all channels\n *\n * @category Realtime\n */\n async removeAllChannels() {\n const promises = this.channels.map(async (channel) => {\n const result = await channel.unsubscribe();\n channel.teardown();\n return result;\n });\n const result = await Promise.all(promises);\n await this.disconnect();\n return result;\n }\n /**\n * Logs the message.\n *\n * For customized logging, `this.logger` can be overridden in Client constructor.\n *\n * @category Realtime\n */\n log(kind, msg, data) {\n this.socketAdapter.log(kind, msg, data);\n }\n /**\n * Returns the current state of the socket.\n *\n * @category Realtime\n */\n connectionState() {\n return this.socketAdapter.connectionState() || _lib_constants__WEBPACK_IMPORTED_MODULE_1__.CONNECTION_STATE.closed;\n }\n /**\n * Returns `true` is the connection is open.\n *\n * @category Realtime\n */\n isConnected() {\n return this.socketAdapter.isConnected();\n }\n /**\n * Returns `true` if the connection is currently connecting.\n *\n * @category Realtime\n */\n isConnecting() {\n return this.socketAdapter.isConnecting();\n }\n /**\n * Returns `true` if the connection is currently disconnecting.\n *\n * @category Realtime\n */\n isDisconnecting() {\n return this.socketAdapter.isDisconnecting();\n }\n /**\n * Creates (or reuses) a {@link RealtimeChannel} for the provided topic.\n *\n * Topics are automatically prefixed with `realtime:` to match the Realtime service.\n * If a channel with the same topic already exists it will be returned instead of creating\n * a duplicate connection.\n *\n * @category Realtime\n */\n channel(topic, params = { config: {} }) {\n const realtimeTopic = `realtime:${topic}`;\n const exists = this.getChannels().find((c) => c.topic === realtimeTopic);\n if (!exists) {\n const chan = new _RealtimeChannel__WEBPACK_IMPORTED_MODULE_4__[\"default\"](`realtime:${topic}`, params, this);\n this._cancelPendingDisconnect();\n this.channels.push(chan);\n return chan;\n }\n else {\n return exists;\n }\n }\n /**\n * Push out a message if the socket is connected.\n *\n * If the socket is not connected, the message gets enqueued within a local buffer, and sent out when a connection is next established.\n *\n * @category Realtime\n */\n push(data) {\n this.socketAdapter.push(data);\n }\n /**\n * Sets the JWT access token used for channel subscription authorization and Realtime RLS.\n *\n * If param is null it will use the `accessToken` callback function or the token set on the client.\n *\n * On callback used, it will set the value of the token internal to the client.\n *\n * When a token is explicitly provided, it will be preserved across channel operations\n * (including removeChannel and resubscribe). The `accessToken` callback will not be\n * invoked until `setAuth()` is called without arguments.\n *\n * @param token A JWT string to override the token set on the client.\n *\n * @example Setting the authorization header\n * // Use a manual token (preserved across resubscribes, ignores accessToken callback)\n * client.realtime.setAuth('my-custom-jwt')\n *\n * // Switch back to using the accessToken callback\n * client.realtime.setAuth()\n *\n * @category Realtime\n */\n async setAuth(token = null) {\n this._authPromise = this._performAuth(token);\n try {\n await this._authPromise;\n }\n finally {\n this._authPromise = null;\n }\n }\n /**\n * Returns true if the current access token was explicitly set via setAuth(token),\n * false if it was obtained via the accessToken callback.\n * @internal\n */\n _isManualToken() {\n return this._manuallySetToken;\n }\n /**\n * Sends a heartbeat message if the socket is connected.\n *\n * @category Realtime\n */\n async sendHeartbeat() {\n this.socketAdapter.sendHeartbeat();\n }\n /**\n * Sets a callback that receives lifecycle events for internal heartbeat messages.\n * Useful for instrumenting connection health (e.g. sent/ok/timeout/disconnected).\n *\n * @category Realtime\n */\n onHeartbeat(callback) {\n this.socketAdapter.heartbeatCallback = this._wrapHeartbeatCallback(callback);\n }\n /**\n * Return the next message ref, accounting for overflows\n *\n * @internal\n */\n _makeRef() {\n return this.socketAdapter.makeRef();\n }\n /**\n * Removes a channel from RealtimeClient\n *\n * @param channel An open subscription.\n *\n * @internal\n */\n _remove(channel) {\n this.channels = this.channels.filter((c) => c.topic !== channel.topic);\n if (this.channels.length === 0) {\n this.log('transport', 'no channels remaining, scheduling disconnect');\n this._schedulePendingDisconnect();\n }\n }\n /** @internal */\n _schedulePendingDisconnect() {\n this._cancelPendingDisconnect();\n if (this._disconnectOnEmptyChannelsAfterMs === 0) {\n this.log('transport', 'disconnecting immediately - no channels');\n this.disconnect();\n return;\n }\n this._pendingDisconnectTimer = setTimeout(() => {\n this._pendingDisconnectTimer = null;\n if (this.channels.length === 0) {\n this.log('transport', 'deferred disconnect fired - no channels, disconnecting');\n this.disconnect();\n }\n }, this._disconnectOnEmptyChannelsAfterMs);\n this.log('transport', `deferred disconnect scheduled in ${this._disconnectOnEmptyChannelsAfterMs}ms`);\n }\n /** @internal */\n _cancelPendingDisconnect() {\n if (this._pendingDisconnectTimer !== null) {\n this.log('transport', 'pending disconnect cancelled - channel activity detected');\n clearTimeout(this._pendingDisconnectTimer);\n this._pendingDisconnectTimer = null;\n }\n }\n /**\n * Perform the actual auth operation\n * @internal\n */\n async _performAuth(token = null) {\n let tokenToSend;\n let isManualToken = false;\n if (token) {\n tokenToSend = token;\n // Track if this is a manually-provided token\n isManualToken = true;\n }\n else if (this.accessToken) {\n // Call the accessToken callback to get fresh token\n try {\n tokenToSend = await this.accessToken();\n }\n catch (e) {\n this.log('error', 'Error fetching access token from callback', e);\n // Fall back to cached value if callback fails\n tokenToSend = this.accessTokenValue;\n }\n }\n else {\n tokenToSend = this.accessTokenValue;\n }\n // Track whether this token was manually set or fetched via callback\n if (isManualToken) {\n this._manuallySetToken = true;\n }\n else if (this.accessToken) {\n // If we used the callback, clear the manual flag\n this._manuallySetToken = false;\n }\n if (this.accessTokenValue != tokenToSend) {\n this.accessTokenValue = tokenToSend;\n this.channels.forEach((channel) => {\n const payload = {\n access_token: tokenToSend,\n version: _lib_constants__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_VERSION,\n };\n tokenToSend && channel.updateJoinPayload(payload);\n if (channel.joinedOnce && channel.channelAdapter.isJoined()) {\n channel.channelAdapter.push(_lib_constants__WEBPACK_IMPORTED_MODULE_1__.CHANNEL_EVENTS.access_token, {\n access_token: tokenToSend,\n });\n }\n });\n }\n }\n /**\n * Wait for any in-flight auth operations to complete\n * @internal\n */\n async _waitForAuthIfNeeded() {\n if (this._authPromise) {\n await this._authPromise;\n }\n }\n /**\n * Safely call setAuth with standardized error handling\n * @internal\n */\n _setAuthSafely(context = 'general') {\n // Only refresh auth if using callback-based tokens\n if (!this._isManualToken()) {\n this.setAuth().catch((e) => {\n this.log('error', `Error setting auth in ${context}`, e);\n });\n }\n }\n /** @internal */\n _setupConnectionHandlers() {\n this.socketAdapter.onOpen(() => {\n const authPromise = this._authPromise ||\n (this.accessToken && !this.accessTokenValue ? this.setAuth() : Promise.resolve());\n authPromise.catch((e) => {\n this.log('error', 'error waiting for auth on connect', e);\n });\n if (this.worker && !this.workerRef) {\n this._startWorkerHeartbeat();\n }\n });\n this.socketAdapter.onClose(() => {\n if (this.worker && this.workerRef) {\n this._terminateWorker();\n }\n });\n this.socketAdapter.onMessage((message) => {\n if (message.ref && message.ref === this._pendingWorkerHeartbeatRef) {\n this._pendingWorkerHeartbeatRef = null;\n }\n });\n }\n /** @internal */\n _handleNodeJsRaceCondition() {\n if (this.socketAdapter.isConnected()) {\n // hack: ensure onConnOpen is called\n this.socketAdapter.getSocket().onConnOpen();\n }\n }\n /** @internal */\n _wrapHeartbeatCallback(heartbeatCallback) {\n return (status, latency) => {\n if (status == 'sent')\n this._setAuthSafely();\n if (heartbeatCallback)\n heartbeatCallback(status, latency);\n };\n }\n /** @internal */\n _startWorkerHeartbeat() {\n if (this.workerUrl) {\n this.log('worker', `starting worker for from ${this.workerUrl}`);\n }\n else {\n this.log('worker', `starting default worker`);\n }\n const objectUrl = this._workerObjectUrl(this.workerUrl);\n this.workerRef = new Worker(objectUrl);\n this.workerRef.onerror = (error) => {\n this.log('worker', 'worker error', error.message);\n this._terminateWorker();\n this.disconnect();\n };\n this.workerRef.onmessage = (event) => {\n if (event.data.event === 'keepAlive') {\n this.sendHeartbeat();\n }\n };\n this.workerRef.postMessage({\n event: 'start',\n interval: this.heartbeatIntervalMs,\n });\n }\n /**\n * Terminate the Web Worker and clear the reference\n * @internal\n */\n _terminateWorker() {\n if (this.workerRef) {\n this.log('worker', 'terminating worker');\n this.workerRef.terminate();\n this.workerRef = undefined;\n }\n }\n /** @internal */\n _workerObjectUrl(url) {\n let result_url;\n if (url) {\n result_url = url;\n }\n else {\n const blob = new Blob([WORKER_SCRIPT], { type: 'application/javascript' });\n result_url = URL.createObjectURL(blob);\n }\n return result_url;\n }\n /**\n * Initialize socket options with defaults\n * @internal\n */\n _initializeOptions(options) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n this.worker = (_a = options === null || options === void 0 ? void 0 : options.worker) !== null && _a !== void 0 ? _a : false;\n this.accessToken = (_b = options === null || options === void 0 ? void 0 : options.accessToken) !== null && _b !== void 0 ? _b : null;\n const result = {};\n result.timeout = (_c = options === null || options === void 0 ? void 0 : options.timeout) !== null && _c !== void 0 ? _c : _lib_constants__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_TIMEOUT;\n result.heartbeatIntervalMs =\n (_d = options === null || options === void 0 ? void 0 : options.heartbeatIntervalMs) !== null && _d !== void 0 ? _d : CONNECTION_TIMEOUTS.HEARTBEAT_INTERVAL;\n this._disconnectOnEmptyChannelsAfterMs =\n (_e = options === null || options === void 0 ? void 0 : options.disconnectOnEmptyChannelsAfterMs) !== null && _e !== void 0 ? _e : 2 * ((_f = options === null || options === void 0 ? void 0 : options.heartbeatIntervalMs) !== null && _f !== void 0 ? _f : CONNECTION_TIMEOUTS.HEARTBEAT_INTERVAL);\n // @ts-ignore - mismatch between phoenix and supabase\n result.transport = (_g = options === null || options === void 0 ? void 0 : options.transport) !== null && _g !== void 0 ? _g : _lib_websocket_factory__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getWebSocketConstructor();\n result.params = options === null || options === void 0 ? void 0 : options.params;\n result.logger = options === null || options === void 0 ? void 0 : options.logger;\n result.heartbeatCallback = this._wrapHeartbeatCallback(options === null || options === void 0 ? void 0 : options.heartbeatCallback);\n result.reconnectAfterMs =\n (_h = options === null || options === void 0 ? void 0 : options.reconnectAfterMs) !== null && _h !== void 0 ? _h : ((tries) => {\n return RECONNECT_INTERVALS[tries - 1] || DEFAULT_RECONNECT_FALLBACK;\n });\n let defaultEncode;\n let defaultDecode;\n const vsn = (_j = options === null || options === void 0 ? void 0 : options.vsn) !== null && _j !== void 0 ? _j : _lib_constants__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_VSN;\n switch (vsn) {\n case _lib_constants__WEBPACK_IMPORTED_MODULE_1__.VSN_1_0_0:\n defaultEncode = (payload, callback) => {\n return callback(JSON.stringify(payload));\n };\n defaultDecode = (payload, callback) => {\n return callback(JSON.parse(payload));\n };\n break;\n case _lib_constants__WEBPACK_IMPORTED_MODULE_1__.VSN_2_0_0:\n defaultEncode = this.serializer.encode.bind(this.serializer);\n defaultDecode = this.serializer.decode.bind(this.serializer);\n break;\n default:\n throw new Error(`Unsupported serializer version: ${result.vsn}`);\n }\n result.vsn = vsn;\n result.encode = (_k = options === null || options === void 0 ? void 0 : options.encode) !== null && _k !== void 0 ? _k : defaultEncode;\n result.decode = (_l = options === null || options === void 0 ? void 0 : options.decode) !== null && _l !== void 0 ? _l : defaultDecode;\n result.beforeReconnect = this._reconnectAuth.bind(this);\n if ((options === null || options === void 0 ? void 0 : options.logLevel) || (options === null || options === void 0 ? void 0 : options.log_level)) {\n this.logLevel = options.logLevel || options.log_level;\n result.params = Object.assign(Object.assign({}, result.params), { log_level: this.logLevel });\n }\n // Handle worker setup\n if (this.worker) {\n if (typeof window !== 'undefined' && !window.Worker) {\n throw new Error('Web Worker is not supported');\n }\n this.workerUrl = options === null || options === void 0 ? void 0 : options.workerUrl;\n result.autoSendHeartbeat = !this.worker;\n }\n return result;\n }\n /** @internal */\n async _reconnectAuth() {\n await this._waitForAuthIfNeeded();\n if (!this.isConnected()) {\n this.connect();\n }\n }\n}\n//# sourceMappingURL=RealtimeClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvUmVhbHRpbWVDbGllbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUF1RDtBQUNrRjtBQUMvRjtBQUNXO0FBQ0w7QUFDSTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLG9CQUFvQjtBQUMxRDtBQUNBLEdBQUcsRUFBRTtBQUNVO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtHQUErRyxlQUFlLEtBQUssSUFBSSxJQUFJO0FBQzNJO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixlQUFlO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCLHFCQUFxQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLGdDQUFnQztBQUNuRCxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4Qix1REFBVTtBQUN4QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDLDhEQUFhO0FBQzlDLDRCQUE0QixrRUFBZTtBQUMzQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLGFBQWE7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRDtBQUMvRDtBQUNBO0FBQ0Esd0JBQXdCO0FBQ3hCO0FBQ0Esd0RBQXdELGFBQWE7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELDREQUFnQjtBQUN2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEJBQThCLHVCQUF1QjtBQUNyRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixZQUFZO0FBQzFDLDBDQUEwQyxNQUFNO0FBQ2hEO0FBQ0E7QUFDQSw2QkFBNkIsd0RBQWUsYUFBYSxNQUFNO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Qsa0VBQWtFLHVDQUF1QztBQUN6RztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2QkFBNkIsMkRBQWU7QUFDNUM7QUFDQTtBQUNBO0FBQ0EsZ0RBQWdELDBEQUFjO0FBQzlEO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJELFFBQVE7QUFDbkUsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxlQUFlO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFELGdDQUFnQztBQUNyRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1JQUFtSSwyREFBZTtBQUNsSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUlBQXVJLDhEQUFnQjtBQUN2SjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBLDBIQUEwSCx1REFBVztBQUNySTtBQUNBLGlCQUFpQixxREFBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixxREFBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRSxXQUFXO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMERBQTBELG9CQUFvQiwwQkFBMEI7QUFDeEc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvUmVhbHRpbWVDbGllbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFdlYlNvY2tldEZhY3RvcnkgZnJvbSAnLi9saWIvd2Vic29ja2V0LWZhY3RvcnknO1xuaW1wb3J0IHsgQ0hBTk5FTF9FVkVOVFMsIENPTk5FQ1RJT05fU1RBVEUsIERFRkFVTFRfVkVSU0lPTiwgREVGQVVMVF9USU1FT1VULCBERUZBVUxUX1ZTTiwgVlNOXzFfMF8wLCBWU05fMl8wXzAsIH0gZnJvbSAnLi9saWIvY29uc3RhbnRzJztcbmltcG9ydCBTZXJpYWxpemVyIGZyb20gJy4vbGliL3NlcmlhbGl6ZXInO1xuaW1wb3J0IHsgaHR0cEVuZHBvaW50VVJMIH0gZnJvbSAnLi9saWIvdHJhbnNmb3JtZXJzJztcbmltcG9ydCBSZWFsdGltZUNoYW5uZWwgZnJvbSAnLi9SZWFsdGltZUNoYW5uZWwnO1xuaW1wb3J0IFNvY2tldEFkYXB0ZXIgZnJvbSAnLi9waG9lbml4L3NvY2tldEFkYXB0ZXInO1xuLy8gQ29ubmVjdGlvbi1yZWxhdGVkIGNvbnN0YW50c1xuY29uc3QgQ09OTkVDVElPTl9USU1FT1VUUyA9IHtcbiAgICBIRUFSVEJFQVRfSU5URVJWQUw6IDI1MDAwLFxuICAgIFJFQ09OTkVDVF9ERUxBWTogMTAsXG4gICAgSEVBUlRCRUFUX1RJTUVPVVRfRkFMTEJBQ0s6IDEwMCxcbn07XG5jb25zdCBSRUNPTk5FQ1RfSU5URVJWQUxTID0gWzEwMDAsIDIwMDAsIDUwMDAsIDEwMDAwXTtcbmNvbnN0IERFRkFVTFRfUkVDT05ORUNUX0ZBTExCQUNLID0gMTAwMDA7XG5jb25zdCBXT1JLRVJfU0NSSVBUID0gYFxuICBhZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoZSkgPT4ge1xuICAgIGlmIChlLmRhdGEuZXZlbnQgPT09IFwic3RhcnRcIikge1xuICAgICAgc2V0SW50ZXJ2YWwoKCkgPT4gcG9zdE1lc3NhZ2UoeyBldmVudDogXCJrZWVwQWxpdmVcIiB9KSwgZS5kYXRhLmludGVydmFsKTtcbiAgICB9XG4gIH0pO2A7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsdGltZUNsaWVudCB7XG4gICAgZ2V0IGVuZFBvaW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXRBZGFwdGVyLmVuZFBvaW50O1xuICAgIH1cbiAgICBnZXQgdGltZW91dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0QWRhcHRlci50aW1lb3V0O1xuICAgIH1cbiAgICBnZXQgdHJhbnNwb3J0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXRBZGFwdGVyLnRyYW5zcG9ydDtcbiAgICB9XG4gICAgZ2V0IGhlYXJ0YmVhdENhbGxiYWNrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXRBZGFwdGVyLmhlYXJ0YmVhdENhbGxiYWNrO1xuICAgIH1cbiAgICBnZXQgaGVhcnRiZWF0SW50ZXJ2YWxNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0QWRhcHRlci5oZWFydGJlYXRJbnRlcnZhbE1zO1xuICAgIH1cbiAgICBnZXQgaGVhcnRiZWF0VGltZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLndvcmtlcikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dvcmtlckhlYXJ0YmVhdFRpbWVyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldEFkYXB0ZXIuaGVhcnRiZWF0VGltZXI7XG4gICAgfVxuICAgIGdldCBwZW5kaW5nSGVhcnRiZWF0UmVmKCkge1xuICAgICAgICBpZiAodGhpcy53b3JrZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9wZW5kaW5nV29ya2VySGVhcnRiZWF0UmVmO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldEFkYXB0ZXIucGVuZGluZ0hlYXJ0YmVhdFJlZjtcbiAgICB9XG4gICAgZ2V0IHJlY29ubmVjdFRpbWVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXRBZGFwdGVyLnJlY29ubmVjdFRpbWVyO1xuICAgIH1cbiAgICBnZXQgdnNuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXRBZGFwdGVyLnZzbjtcbiAgICB9XG4gICAgZ2V0IGVuY29kZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0QWRhcHRlci5lbmNvZGU7XG4gICAgfVxuICAgIGdldCBkZWNvZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldEFkYXB0ZXIuZGVjb2RlO1xuICAgIH1cbiAgICBnZXQgcmVjb25uZWN0QWZ0ZXJNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0QWRhcHRlci5yZWNvbm5lY3RBZnRlck1zO1xuICAgIH1cbiAgICBnZXQgc2VuZEJ1ZmZlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0QWRhcHRlci5zZW5kQnVmZmVyO1xuICAgIH1cbiAgICBnZXQgc3RhdGVDaGFuZ2VDYWxsYmFja3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldEFkYXB0ZXIuc3RhdGVDaGFuZ2VDYWxsYmFja3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSBTb2NrZXQuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZW5kUG9pbnQgVGhlIHN0cmluZyBXZWJTb2NrZXQgZW5kcG9pbnQsIGllLCBcIndzOi8vZXhhbXBsZS5jb20vc29ja2V0XCIsIFwid3NzOi8vZXhhbXBsZS5jb21cIiwgXCIvc29ja2V0XCIgKGluaGVyaXRlZCBob3N0ICYgcHJvdG9jb2wpXG4gICAgICogQHBhcmFtIGh0dHBFbmRwb2ludCBUaGUgc3RyaW5nIEhUVFAgZW5kcG9pbnQsIGllLCBcImh0dHBzOi8vZXhhbXBsZS5jb21cIiwgXCIvXCIgKGluaGVyaXRlZCBob3N0ICYgcHJvdG9jb2wpXG4gICAgICogQHBhcmFtIG9wdGlvbnMudHJhbnNwb3J0IFRoZSBXZWJzb2NrZXQgVHJhbnNwb3J0LCBmb3IgZXhhbXBsZSBXZWJTb2NrZXQuIFRoaXMgY2FuIGJlIGEgY3VzdG9tIGltcGxlbWVudGF0aW9uXG4gICAgICogQHBhcmFtIG9wdGlvbnMudGltZW91dCBUaGUgZGVmYXVsdCB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byB0cmlnZ2VyIHB1c2ggdGltZW91dHMuXG4gICAgICogQHBhcmFtIG9wdGlvbnMucGFyYW1zIFRoZSBvcHRpb25hbCBwYXJhbXMgdG8gcGFzcyB3aGVuIGNvbm5lY3RpbmcuXG4gICAgICogQHBhcmFtIG9wdGlvbnMuaGVhZGVycyBEZXByZWNhdGVkOiBoZWFkZXJzIGNhbm5vdCBiZSBzZXQgb24gd2Vic29ja2V0IGNvbm5lY3Rpb25zIGFuZCB0aGlzIG9wdGlvbiB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5oZWFydGJlYXRJbnRlcnZhbE1zIFRoZSBtaWxsaXNlYyBpbnRlcnZhbCB0byBzZW5kIGEgaGVhcnRiZWF0IG1lc3NhZ2UuXG4gICAgICogQHBhcmFtIG9wdGlvbnMuaGVhcnRiZWF0Q2FsbGJhY2sgVGhlIG9wdGlvbmFsIGZ1bmN0aW9uIHRvIGhhbmRsZSBoZWFydGJlYXQgc3RhdHVzIGFuZCBsYXRlbmN5LlxuICAgICAqIEBwYXJhbSBvcHRpb25zLmxvZ2dlciBUaGUgb3B0aW9uYWwgZnVuY3Rpb24gZm9yIHNwZWNpYWxpemVkIGxvZ2dpbmcsIGllOiBsb2dnZXI6IChraW5kLCBtc2csIGRhdGEpID0+IHsgY29uc29sZS5sb2coYCR7a2luZH06ICR7bXNnfWAsIGRhdGEpIH1cbiAgICAgKiBAcGFyYW0gb3B0aW9ucy5sb2dMZXZlbCBTZXRzIHRoZSBsb2cgbGV2ZWwgZm9yIFJlYWx0aW1lXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZW5jb2RlIFRoZSBmdW5jdGlvbiB0byBlbmNvZGUgb3V0Z29pbmcgbWVzc2FnZXMuIERlZmF1bHRzIHRvIEpTT046IChwYXlsb2FkLCBjYWxsYmFjaykgPT4gY2FsbGJhY2soSlNPTi5zdHJpbmdpZnkocGF5bG9hZCkpXG4gICAgICogQHBhcmFtIG9wdGlvbnMuZGVjb2RlIFRoZSBmdW5jdGlvbiB0byBkZWNvZGUgaW5jb21pbmcgbWVzc2FnZXMuIERlZmF1bHRzIHRvIFNlcmlhbGl6ZXIncyBkZWNvZGUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMucmVjb25uZWN0QWZ0ZXJNcyBoZSBvcHRpb25hbCBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIG1pbGxzZWMgcmVjb25uZWN0IGludGVydmFsLiBEZWZhdWx0cyB0byBzdGVwcGVkIGJhY2tvZmYgb2ZmLlxuICAgICAqIEBwYXJhbSBvcHRpb25zLndvcmtlciBVc2UgV2ViIFdvcmtlciB0byBzZXQgYSBzaWRlIGZsb3cuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgICAqIEBwYXJhbSBvcHRpb25zLndvcmtlclVybCBUaGUgVVJMIG9mIHRoZSB3b3JrZXIgc2NyaXB0LiBEZWZhdWx0cyB0byBodHRwczovL3JlYWx0aW1lLnN1cGFiYXNlLmNvbS93b3JrZXIuanMgdGhhdCBpbmNsdWRlcyBhIGhlYXJ0YmVhdCBldmVudCBjYWxsIHRvIGtlZXAgdGhlIGNvbm5lY3Rpb24gYWxpdmUuXG4gICAgICogQHBhcmFtIG9wdGlvbnMudnNuIFRoZSBwcm90b2NvbCB2ZXJzaW9uIHRvIHVzZSB3aGVuIGNvbm5lY3RpbmcuIFN1cHBvcnRlZCB2ZXJzaW9ucyBhcmUgXCIxLjAuMFwiIGFuZCBcIjIuMC4wXCIuIERlZmF1bHRzIHRvIFwiMi4wLjBcIi5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBSZWFsdGltZVxuICAgICAqXG4gICAgICogQGV4YW1wbGUgVXNpbmcgc3VwYWJhc2UtanMgKHJlY29tbWVuZGVkKVxuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IHsgY3JlYXRlQ2xpZW50IH0gZnJvbSAnQHN1cGFiYXNlL3N1cGFiYXNlLWpzJ1xuICAgICAqXG4gICAgICogY29uc3Qgc3VwYWJhc2UgPSBjcmVhdGVDbGllbnQoJ2h0dHBzOi8veHl6Y29tcGFueS5zdXBhYmFzZS5jbycsICd5b3VyLXB1Ymxpc2hhYmxlLWtleScpXG4gICAgICogY29uc3QgY2hhbm5lbCA9IHN1cGFiYXNlLmNoYW5uZWwoJ3Jvb20xJylcbiAgICAgKiBjaGFubmVsXG4gICAgICogICAub24oJ2Jyb2FkY2FzdCcsIHsgZXZlbnQ6ICdjdXJzb3ItcG9zJyB9LCAocGF5bG9hZCkgPT4gY29uc29sZS5sb2cocGF5bG9hZCkpXG4gICAgICogICAuc3Vic2NyaWJlKClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFN0YW5kYWxvbmUgaW1wb3J0IGZvciBidW5kbGUtc2Vuc2l0aXZlIGVudmlyb25tZW50c1xuICAgICAqIGBgYHRzXG4gICAgICogaW1wb3J0IFJlYWx0aW1lQ2xpZW50IGZyb20gJ0BzdXBhYmFzZS9yZWFsdGltZS1qcydcbiAgICAgKlxuICAgICAqIGNvbnN0IGNsaWVudCA9IG5ldyBSZWFsdGltZUNsaWVudCgnaHR0cHM6Ly94eXpjb21wYW55LnN1cGFiYXNlLmNvL3JlYWx0aW1lL3YxJywge1xuICAgICAqICAgcGFyYW1zOiB7IGFwaWtleTogJ3lvdXItcHVibGlzaGFibGUta2V5JyB9LFxuICAgICAqIH0pXG4gICAgICogY2xpZW50LmNvbm5lY3QoKVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGVuZFBvaW50LCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgdGhpcy5jaGFubmVscyA9IG5ldyBBcnJheSgpO1xuICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuVmFsdWUgPSBudWxsO1xuICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gbnVsbDtcbiAgICAgICAgdGhpcy5hcGlLZXkgPSBudWxsO1xuICAgICAgICB0aGlzLmh0dHBFbmRwb2ludCA9ICcnO1xuICAgICAgICAvKiogQGRlcHJlY2F0ZWQgaGVhZGVycyBjYW5ub3QgYmUgc2V0IG9uIHdlYnNvY2tldCBjb25uZWN0aW9ucyAqL1xuICAgICAgICB0aGlzLmhlYWRlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5wYXJhbXMgPSB7fTtcbiAgICAgICAgdGhpcy5yZWYgPSAwO1xuICAgICAgICB0aGlzLnNlcmlhbGl6ZXIgPSBuZXcgU2VyaWFsaXplcigpO1xuICAgICAgICB0aGlzLl9tYW51YWxseVNldFRva2VuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2F1dGhQcm9taXNlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fd29ya2VySGVhcnRiZWF0VGltZXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuX3BlbmRpbmdXb3JrZXJIZWFydGJlYXRSZWYgPSBudWxsO1xuICAgICAgICB0aGlzLl9wZW5kaW5nRGlzY29ubmVjdFRpbWVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZGlzY29ubmVjdE9uRW1wdHlDaGFubmVsc0FmdGVyTXMgPSAwO1xuICAgICAgICAvKipcbiAgICAgICAgICogVXNlIGVpdGhlciBjdXN0b20gZmV0Y2gsIGlmIHByb3ZpZGVkLCBvciBkZWZhdWx0IGZldGNoIHRvIG1ha2UgSFRUUCByZXF1ZXN0c1xuICAgICAgICAgKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuX3Jlc29sdmVGZXRjaCA9IChjdXN0b21GZXRjaCkgPT4ge1xuICAgICAgICAgICAgaWYgKGN1c3RvbUZldGNoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiBjdXN0b21GZXRjaCguLi5hcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4gZmV0Y2goLi4uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIFZhbGlkYXRlIHJlcXVpcmVkIHBhcmFtZXRlcnNcbiAgICAgICAgaWYgKCEoKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnBhcmFtcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFwaWtleSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQVBJIGtleSBpcyByZXF1aXJlZCB0byBjb25uZWN0IHRvIFJlYWx0aW1lJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hcGlLZXkgPSBvcHRpb25zLnBhcmFtcy5hcGlrZXk7XG4gICAgICAgIGNvbnN0IHNvY2tldEFkYXB0ZXJPcHRpb25zID0gdGhpcy5faW5pdGlhbGl6ZU9wdGlvbnMob3B0aW9ucyk7XG4gICAgICAgIHRoaXMuc29ja2V0QWRhcHRlciA9IG5ldyBTb2NrZXRBZGFwdGVyKGVuZFBvaW50LCBzb2NrZXRBZGFwdGVyT3B0aW9ucyk7XG4gICAgICAgIHRoaXMuaHR0cEVuZHBvaW50ID0gaHR0cEVuZHBvaW50VVJMKGVuZFBvaW50KTtcbiAgICAgICAgdGhpcy5mZXRjaCA9IHRoaXMuX3Jlc29sdmVGZXRjaChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZmV0Y2gpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBDb25uZWN0cyB0aGUgc29ja2V0LCB1bmxlc3MgYWxyZWFkeSBjb25uZWN0ZWQuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgUmVhbHRpbWVcbiAgICAgKi9cbiAgICBjb25uZWN0KCkge1xuICAgICAgICAvLyBTa2lwIGlmIGFscmVhZHkgY29ubmVjdGluZywgZGlzY29ubmVjdGluZywgb3IgY29ubmVjdGVkXG4gICAgICAgIGlmICh0aGlzLmlzQ29ubmVjdGluZygpIHx8IHRoaXMuaXNEaXNjb25uZWN0aW5nKCkgfHwgdGhpcy5pc0Nvbm5lY3RlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gVHJpZ2dlciBhdXRoIGlmIG5lZWRlZCBhbmQgbm90IGFscmVhZHkgaW4gcHJvZ3Jlc3NcbiAgICAgICAgLy8gVGhpcyBlbnN1cmVzIGF1dGggaXMgY2FsbGVkIGZvciBzdGFuZGFsb25lIFJlYWx0aW1lQ2xpZW50IHVzYWdlXG4gICAgICAgIC8vIHdoaWxlIGF2b2lkaW5nIHJhY2UgY29uZGl0aW9ucyB3aXRoIFN1cGFiYXNlQ2xpZW50J3MgaW1tZWRpYXRlIHNldEF1dGggY2FsbFxuICAgICAgICBpZiAodGhpcy5hY2Nlc3NUb2tlbiAmJiAhdGhpcy5fYXV0aFByb21pc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEF1dGhTYWZlbHkoJ2Nvbm5lY3QnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXR1cENvbm5lY3Rpb25IYW5kbGVycygpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5zb2NrZXRBZGFwdGVyLmNvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICAgICAgICAvLyBQcm92aWRlIGhlbHBmdWwgZXJyb3IgbWVzc2FnZSBiYXNlZCBvbiBlbnZpcm9ubWVudFxuICAgICAgICAgICAgaWYgKGVycm9yTWVzc2FnZS5pbmNsdWRlcygnTm9kZS5qcycpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Vycm9yTWVzc2FnZX1cXG5cXG5gICtcbiAgICAgICAgICAgICAgICAgICAgJ1RvIHVzZSBSZWFsdGltZSBpbiBOb2RlLmpzLCB5b3UgbmVlZCB0byBwcm92aWRlIGEgV2ViU29ja2V0IGltcGxlbWVudGF0aW9uOlxcblxcbicgK1xuICAgICAgICAgICAgICAgICAgICAnT3B0aW9uIDE6IFVzZSBOb2RlLmpzIDIyKyB3aGljaCBoYXMgbmF0aXZlIFdlYlNvY2tldCBzdXBwb3J0XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICdPcHRpb24gMjogSW5zdGFsbCBhbmQgcHJvdmlkZSB0aGUgXCJ3c1wiIHBhY2thZ2U6XFxuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICcgIG5wbSBpbnN0YWxsIHdzXFxuXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICcgIGltcG9ydCB3cyBmcm9tIFwid3NcIlxcbicgK1xuICAgICAgICAgICAgICAgICAgICAnICBjb25zdCBjbGllbnQgPSBuZXcgUmVhbHRpbWVDbGllbnQodXJsLCB7XFxuJyArXG4gICAgICAgICAgICAgICAgICAgICcgICAgLi4ub3B0aW9ucyxcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgJyAgICB0cmFuc3BvcnQ6IHdzXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICcgIH0pJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFdlYlNvY2tldCBub3QgYXZhaWxhYmxlOiAke2Vycm9yTWVzc2FnZX1gKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9oYW5kbGVOb2RlSnNSYWNlQ29uZGl0aW9uKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIFVSTCBvZiB0aGUgd2Vic29ja2V0LlxuICAgICAqIEByZXR1cm5zIHN0cmluZyBUaGUgVVJMIG9mIHRoZSB3ZWJzb2NrZXQuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgUmVhbHRpbWVcbiAgICAgKi9cbiAgICBlbmRwb2ludFVSTCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0QWRhcHRlci5lbmRQb2ludFVSTCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBEaXNjb25uZWN0cyB0aGUgc29ja2V0LlxuICAgICAqXG4gICAgICogQHBhcmFtIGNvZGUgQSBudW1lcmljIHN0YXR1cyBjb2RlIHRvIHNlbmQgb24gZGlzY29ubmVjdC5cbiAgICAgKiBAcGFyYW0gcmVhc29uIEEgY3VzdG9tIHJlYXNvbiBmb3IgdGhlIGRpc2Nvbm5lY3QuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgUmVhbHRpbWVcbiAgICAgKi9cbiAgICBhc3luYyBkaXNjb25uZWN0KGNvZGUsIHJlYXNvbikge1xuICAgICAgICB0aGlzLl9jYW5jZWxQZW5kaW5nRGlzY29ubmVjdCgpO1xuICAgICAgICBpZiAodGhpcy5pc0Rpc2Nvbm5lY3RpbmcoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuc29ja2V0QWRhcHRlci5kaXNjb25uZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5fd29ya2VySGVhcnRiZWF0VGltZXIpO1xuICAgICAgICAgICAgdGhpcy5fdGVybWluYXRlV29ya2VyKCk7XG4gICAgICAgIH0sIGNvZGUsIHJlYXNvbik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYWxsIGNyZWF0ZWQgY2hhbm5lbHNcbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBSZWFsdGltZVxuICAgICAqL1xuICAgIGdldENoYW5uZWxzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVscztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVW5zdWJzY3JpYmVzLCByZW1vdmVzIGFuZCB0ZWFycyBkb3duIGEgc2luZ2xlIGNoYW5uZWxcbiAgICAgKiBAcGFyYW0gY2hhbm5lbCBBIFJlYWx0aW1lQ2hhbm5lbCBpbnN0YW5jZVxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IFJlYWx0aW1lXG4gICAgICovXG4gICAgYXN5bmMgcmVtb3ZlQ2hhbm5lbChjaGFubmVsKSB7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGF3YWl0IGNoYW5uZWwudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ29rJykge1xuICAgICAgICAgICAgY2hhbm5lbC50ZWFyZG93bigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdGF0dXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFVuc3Vic2NyaWJlcywgcmVtb3ZlcyBhbmQgdGVhcnMgZG93biBhbGwgY2hhbm5lbHNcbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBSZWFsdGltZVxuICAgICAqL1xuICAgIGFzeW5jIHJlbW92ZUFsbENoYW5uZWxzKCkge1xuICAgICAgICBjb25zdCBwcm9taXNlcyA9IHRoaXMuY2hhbm5lbHMubWFwKGFzeW5jIChjaGFubmVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGFubmVsLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBjaGFubmVsLnRlYXJkb3duKCk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICBhd2FpdCB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogTG9ncyB0aGUgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIEZvciBjdXN0b21pemVkIGxvZ2dpbmcsIGB0aGlzLmxvZ2dlcmAgY2FuIGJlIG92ZXJyaWRkZW4gaW4gQ2xpZW50IGNvbnN0cnVjdG9yLlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IFJlYWx0aW1lXG4gICAgICovXG4gICAgbG9nKGtpbmQsIG1zZywgZGF0YSkge1xuICAgICAgICB0aGlzLnNvY2tldEFkYXB0ZXIubG9nKGtpbmQsIG1zZywgZGF0YSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNvY2tldC5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBSZWFsdGltZVxuICAgICAqL1xuICAgIGNvbm5lY3Rpb25TdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0QWRhcHRlci5jb25uZWN0aW9uU3RhdGUoKSB8fCBDT05ORUNUSU9OX1NUQVRFLmNsb3NlZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaXMgdGhlIGNvbm5lY3Rpb24gaXMgb3Blbi5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBSZWFsdGltZVxuICAgICAqL1xuICAgIGlzQ29ubmVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXRBZGFwdGVyLmlzQ29ubmVjdGVkKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBjb25uZWN0aW9uIGlzIGN1cnJlbnRseSBjb25uZWN0aW5nLlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IFJlYWx0aW1lXG4gICAgICovXG4gICAgaXNDb25uZWN0aW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXRBZGFwdGVyLmlzQ29ubmVjdGluZygpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgY29ubmVjdGlvbiBpcyBjdXJyZW50bHkgZGlzY29ubmVjdGluZy5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBSZWFsdGltZVxuICAgICAqL1xuICAgIGlzRGlzY29ubmVjdGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0QWRhcHRlci5pc0Rpc2Nvbm5lY3RpbmcoKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyAob3IgcmV1c2VzKSBhIHtAbGluayBSZWFsdGltZUNoYW5uZWx9IGZvciB0aGUgcHJvdmlkZWQgdG9waWMuXG4gICAgICpcbiAgICAgKiBUb3BpY3MgYXJlIGF1dG9tYXRpY2FsbHkgcHJlZml4ZWQgd2l0aCBgcmVhbHRpbWU6YCB0byBtYXRjaCB0aGUgUmVhbHRpbWUgc2VydmljZS5cbiAgICAgKiBJZiBhIGNoYW5uZWwgd2l0aCB0aGUgc2FtZSB0b3BpYyBhbHJlYWR5IGV4aXN0cyBpdCB3aWxsIGJlIHJldHVybmVkIGluc3RlYWQgb2YgY3JlYXRpbmdcbiAgICAgKiBhIGR1cGxpY2F0ZSBjb25uZWN0aW9uLlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IFJlYWx0aW1lXG4gICAgICovXG4gICAgY2hhbm5lbCh0b3BpYywgcGFyYW1zID0geyBjb25maWc6IHt9IH0pIHtcbiAgICAgICAgY29uc3QgcmVhbHRpbWVUb3BpYyA9IGByZWFsdGltZToke3RvcGljfWA7XG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuZ2V0Q2hhbm5lbHMoKS5maW5kKChjKSA9PiBjLnRvcGljID09PSByZWFsdGltZVRvcGljKTtcbiAgICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNoYW4gPSBuZXcgUmVhbHRpbWVDaGFubmVsKGByZWFsdGltZToke3RvcGljfWAsIHBhcmFtcywgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLl9jYW5jZWxQZW5kaW5nRGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5jaGFubmVscy5wdXNoKGNoYW4pO1xuICAgICAgICAgICAgcmV0dXJuIGNoYW47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZXhpc3RzO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFB1c2ggb3V0IGEgbWVzc2FnZSBpZiB0aGUgc29ja2V0IGlzIGNvbm5lY3RlZC5cbiAgICAgKlxuICAgICAqIElmIHRoZSBzb2NrZXQgaXMgbm90IGNvbm5lY3RlZCwgdGhlIG1lc3NhZ2UgZ2V0cyBlbnF1ZXVlZCB3aXRoaW4gYSBsb2NhbCBidWZmZXIsIGFuZCBzZW50IG91dCB3aGVuIGEgY29ubmVjdGlvbiBpcyBuZXh0IGVzdGFibGlzaGVkLlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IFJlYWx0aW1lXG4gICAgICovXG4gICAgcHVzaChkYXRhKSB7XG4gICAgICAgIHRoaXMuc29ja2V0QWRhcHRlci5wdXNoKGRhdGEpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBKV1QgYWNjZXNzIHRva2VuIHVzZWQgZm9yIGNoYW5uZWwgc3Vic2NyaXB0aW9uIGF1dGhvcml6YXRpb24gYW5kIFJlYWx0aW1lIFJMUy5cbiAgICAgKlxuICAgICAqIElmIHBhcmFtIGlzIG51bGwgaXQgd2lsbCB1c2UgdGhlIGBhY2Nlc3NUb2tlbmAgY2FsbGJhY2sgZnVuY3Rpb24gb3IgdGhlIHRva2VuIHNldCBvbiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogT24gY2FsbGJhY2sgdXNlZCwgaXQgd2lsbCBzZXQgdGhlIHZhbHVlIG9mIHRoZSB0b2tlbiBpbnRlcm5hbCB0byB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogV2hlbiBhIHRva2VuIGlzIGV4cGxpY2l0bHkgcHJvdmlkZWQsIGl0IHdpbGwgYmUgcHJlc2VydmVkIGFjcm9zcyBjaGFubmVsIG9wZXJhdGlvbnNcbiAgICAgKiAoaW5jbHVkaW5nIHJlbW92ZUNoYW5uZWwgYW5kIHJlc3Vic2NyaWJlKS4gVGhlIGBhY2Nlc3NUb2tlbmAgY2FsbGJhY2sgd2lsbCBub3QgYmVcbiAgICAgKiBpbnZva2VkIHVudGlsIGBzZXRBdXRoKClgIGlzIGNhbGxlZCB3aXRob3V0IGFyZ3VtZW50cy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB0b2tlbiBBIEpXVCBzdHJpbmcgdG8gb3ZlcnJpZGUgdGhlIHRva2VuIHNldCBvbiB0aGUgY2xpZW50LlxuICAgICAqXG4gICAgICogQGV4YW1wbGUgU2V0dGluZyB0aGUgYXV0aG9yaXphdGlvbiBoZWFkZXJcbiAgICAgKiAvLyBVc2UgYSBtYW51YWwgdG9rZW4gKHByZXNlcnZlZCBhY3Jvc3MgcmVzdWJzY3JpYmVzLCBpZ25vcmVzIGFjY2Vzc1Rva2VuIGNhbGxiYWNrKVxuICAgICAqIGNsaWVudC5yZWFsdGltZS5zZXRBdXRoKCdteS1jdXN0b20tand0JylcbiAgICAgKlxuICAgICAqIC8vIFN3aXRjaCBiYWNrIHRvIHVzaW5nIHRoZSBhY2Nlc3NUb2tlbiBjYWxsYmFja1xuICAgICAqIGNsaWVudC5yZWFsdGltZS5zZXRBdXRoKClcbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBSZWFsdGltZVxuICAgICAqL1xuICAgIGFzeW5jIHNldEF1dGgodG9rZW4gPSBudWxsKSB7XG4gICAgICAgIHRoaXMuX2F1dGhQcm9taXNlID0gdGhpcy5fcGVyZm9ybUF1dGgodG9rZW4pO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5fYXV0aFByb21pc2U7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLl9hdXRoUHJvbWlzZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IGFjY2VzcyB0b2tlbiB3YXMgZXhwbGljaXRseSBzZXQgdmlhIHNldEF1dGgodG9rZW4pLFxuICAgICAqIGZhbHNlIGlmIGl0IHdhcyBvYnRhaW5lZCB2aWEgdGhlIGFjY2Vzc1Rva2VuIGNhbGxiYWNrLlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIF9pc01hbnVhbFRva2VuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWFudWFsbHlTZXRUb2tlbjtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2VuZHMgYSBoZWFydGJlYXQgbWVzc2FnZSBpZiB0aGUgc29ja2V0IGlzIGNvbm5lY3RlZC5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBSZWFsdGltZVxuICAgICAqL1xuICAgIGFzeW5jIHNlbmRIZWFydGJlYXQoKSB7XG4gICAgICAgIHRoaXMuc29ja2V0QWRhcHRlci5zZW5kSGVhcnRiZWF0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNldHMgYSBjYWxsYmFjayB0aGF0IHJlY2VpdmVzIGxpZmVjeWNsZSBldmVudHMgZm9yIGludGVybmFsIGhlYXJ0YmVhdCBtZXNzYWdlcy5cbiAgICAgKiBVc2VmdWwgZm9yIGluc3RydW1lbnRpbmcgY29ubmVjdGlvbiBoZWFsdGggKGUuZy4gc2VudC9vay90aW1lb3V0L2Rpc2Nvbm5lY3RlZCkuXG4gICAgICpcbiAgICAgKiBAY2F0ZWdvcnkgUmVhbHRpbWVcbiAgICAgKi9cbiAgICBvbkhlYXJ0YmVhdChjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnNvY2tldEFkYXB0ZXIuaGVhcnRiZWF0Q2FsbGJhY2sgPSB0aGlzLl93cmFwSGVhcnRiZWF0Q2FsbGJhY2soY2FsbGJhY2spO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIG5leHQgbWVzc2FnZSByZWYsIGFjY291bnRpbmcgZm9yIG92ZXJmbG93c1xuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgX21ha2VSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldEFkYXB0ZXIubWFrZVJlZigpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGEgY2hhbm5lbCBmcm9tIFJlYWx0aW1lQ2xpZW50XG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hhbm5lbCBBbiBvcGVuIHN1YnNjcmlwdGlvbi5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIF9yZW1vdmUoY2hhbm5lbCkge1xuICAgICAgICB0aGlzLmNoYW5uZWxzID0gdGhpcy5jaGFubmVscy5maWx0ZXIoKGMpID0+IGMudG9waWMgIT09IGNoYW5uZWwudG9waWMpO1xuICAgICAgICBpZiAodGhpcy5jaGFubmVscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMubG9nKCd0cmFuc3BvcnQnLCAnbm8gY2hhbm5lbHMgcmVtYWluaW5nLCBzY2hlZHVsaW5nIGRpc2Nvbm5lY3QnKTtcbiAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlUGVuZGluZ0Rpc2Nvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX3NjaGVkdWxlUGVuZGluZ0Rpc2Nvbm5lY3QoKSB7XG4gICAgICAgIHRoaXMuX2NhbmNlbFBlbmRpbmdEaXNjb25uZWN0KCk7XG4gICAgICAgIGlmICh0aGlzLl9kaXNjb25uZWN0T25FbXB0eUNoYW5uZWxzQWZ0ZXJNcyA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5sb2coJ3RyYW5zcG9ydCcsICdkaXNjb25uZWN0aW5nIGltbWVkaWF0ZWx5IC0gbm8gY2hhbm5lbHMnKTtcbiAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3BlbmRpbmdEaXNjb25uZWN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdEaXNjb25uZWN0VGltZXIgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hhbm5lbHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2coJ3RyYW5zcG9ydCcsICdkZWZlcnJlZCBkaXNjb25uZWN0IGZpcmVkIC0gbm8gY2hhbm5lbHMsIGRpc2Nvbm5lY3RpbmcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgdGhpcy5fZGlzY29ubmVjdE9uRW1wdHlDaGFubmVsc0FmdGVyTXMpO1xuICAgICAgICB0aGlzLmxvZygndHJhbnNwb3J0JywgYGRlZmVycmVkIGRpc2Nvbm5lY3Qgc2NoZWR1bGVkIGluICR7dGhpcy5fZGlzY29ubmVjdE9uRW1wdHlDaGFubmVsc0FmdGVyTXN9bXNgKTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9jYW5jZWxQZW5kaW5nRGlzY29ubmVjdCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmdEaXNjb25uZWN0VGltZXIgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKCd0cmFuc3BvcnQnLCAncGVuZGluZyBkaXNjb25uZWN0IGNhbmNlbGxlZCAtIGNoYW5uZWwgYWN0aXZpdHkgZGV0ZWN0ZWQnKTtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9wZW5kaW5nRGlzY29ubmVjdFRpbWVyKTtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdEaXNjb25uZWN0VGltZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gdGhlIGFjdHVhbCBhdXRoIG9wZXJhdGlvblxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGFzeW5jIF9wZXJmb3JtQXV0aCh0b2tlbiA9IG51bGwpIHtcbiAgICAgICAgbGV0IHRva2VuVG9TZW5kO1xuICAgICAgICBsZXQgaXNNYW51YWxUb2tlbiA9IGZhbHNlO1xuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIHRva2VuVG9TZW5kID0gdG9rZW47XG4gICAgICAgICAgICAvLyBUcmFjayBpZiB0aGlzIGlzIGEgbWFudWFsbHktcHJvdmlkZWQgdG9rZW5cbiAgICAgICAgICAgIGlzTWFudWFsVG9rZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgIC8vIENhbGwgdGhlIGFjY2Vzc1Rva2VuIGNhbGxiYWNrIHRvIGdldCBmcmVzaCB0b2tlblxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0b2tlblRvU2VuZCA9IGF3YWl0IHRoaXMuYWNjZXNzVG9rZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2coJ2Vycm9yJywgJ0Vycm9yIGZldGNoaW5nIGFjY2VzcyB0b2tlbiBmcm9tIGNhbGxiYWNrJywgZSk7XG4gICAgICAgICAgICAgICAgLy8gRmFsbCBiYWNrIHRvIGNhY2hlZCB2YWx1ZSBpZiBjYWxsYmFjayBmYWlsc1xuICAgICAgICAgICAgICAgIHRva2VuVG9TZW5kID0gdGhpcy5hY2Nlc3NUb2tlblZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdG9rZW5Ub1NlbmQgPSB0aGlzLmFjY2Vzc1Rva2VuVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gVHJhY2sgd2hldGhlciB0aGlzIHRva2VuIHdhcyBtYW51YWxseSBzZXQgb3IgZmV0Y2hlZCB2aWEgY2FsbGJhY2tcbiAgICAgICAgaWYgKGlzTWFudWFsVG9rZW4pIHtcbiAgICAgICAgICAgIHRoaXMuX21hbnVhbGx5U2V0VG9rZW4gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuYWNjZXNzVG9rZW4pIHtcbiAgICAgICAgICAgIC8vIElmIHdlIHVzZWQgdGhlIGNhbGxiYWNrLCBjbGVhciB0aGUgbWFudWFsIGZsYWdcbiAgICAgICAgICAgIHRoaXMuX21hbnVhbGx5U2V0VG9rZW4gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hY2Nlc3NUb2tlblZhbHVlICE9IHRva2VuVG9TZW5kKSB7XG4gICAgICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuVmFsdWUgPSB0b2tlblRvU2VuZDtcbiAgICAgICAgICAgIHRoaXMuY2hhbm5lbHMuZm9yRWFjaCgoY2hhbm5lbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFjY2Vzc190b2tlbjogdG9rZW5Ub1NlbmQsXG4gICAgICAgICAgICAgICAgICAgIHZlcnNpb246IERFRkFVTFRfVkVSU0lPTixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRva2VuVG9TZW5kICYmIGNoYW5uZWwudXBkYXRlSm9pblBheWxvYWQocGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5uZWwuam9pbmVkT25jZSAmJiBjaGFubmVsLmNoYW5uZWxBZGFwdGVyLmlzSm9pbmVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhbm5lbC5jaGFubmVsQWRhcHRlci5wdXNoKENIQU5ORUxfRVZFTlRTLmFjY2Vzc190b2tlbiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzX3Rva2VuOiB0b2tlblRvU2VuZCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogV2FpdCBmb3IgYW55IGluLWZsaWdodCBhdXRoIG9wZXJhdGlvbnMgdG8gY29tcGxldGVcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBhc3luYyBfd2FpdEZvckF1dGhJZk5lZWRlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2F1dGhQcm9taXNlKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLl9hdXRoUHJvbWlzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKipcbiAgICAgKiBTYWZlbHkgY2FsbCBzZXRBdXRoIHdpdGggc3RhbmRhcmRpemVkIGVycm9yIGhhbmRsaW5nXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgX3NldEF1dGhTYWZlbHkoY29udGV4dCA9ICdnZW5lcmFsJykge1xuICAgICAgICAvLyBPbmx5IHJlZnJlc2ggYXV0aCBpZiB1c2luZyBjYWxsYmFjay1iYXNlZCB0b2tlbnNcbiAgICAgICAgaWYgKCF0aGlzLl9pc01hbnVhbFRva2VuKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXV0aCgpLmNhdGNoKChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2coJ2Vycm9yJywgYEVycm9yIHNldHRpbmcgYXV0aCBpbiAke2NvbnRleHR9YCwgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX3NldHVwQ29ubmVjdGlvbkhhbmRsZXJzKCkge1xuICAgICAgICB0aGlzLnNvY2tldEFkYXB0ZXIub25PcGVuKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF1dGhQcm9taXNlID0gdGhpcy5fYXV0aFByb21pc2UgfHxcbiAgICAgICAgICAgICAgICAodGhpcy5hY2Nlc3NUb2tlbiAmJiAhdGhpcy5hY2Nlc3NUb2tlblZhbHVlID8gdGhpcy5zZXRBdXRoKCkgOiBQcm9taXNlLnJlc29sdmUoKSk7XG4gICAgICAgICAgICBhdXRoUHJvbWlzZS5jYXRjaCgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubG9nKCdlcnJvcicsICdlcnJvciB3YWl0aW5nIGZvciBhdXRoIG9uIGNvbm5lY3QnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMud29ya2VyICYmICF0aGlzLndvcmtlclJlZikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0V29ya2VySGVhcnRiZWF0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNvY2tldEFkYXB0ZXIub25DbG9zZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy53b3JrZXIgJiYgdGhpcy53b3JrZXJSZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90ZXJtaW5hdGVXb3JrZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc29ja2V0QWRhcHRlci5vbk1lc3NhZ2UoKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIGlmIChtZXNzYWdlLnJlZiAmJiBtZXNzYWdlLnJlZiA9PT0gdGhpcy5fcGVuZGluZ1dvcmtlckhlYXJ0YmVhdFJlZikge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BlbmRpbmdXb3JrZXJIZWFydGJlYXRSZWYgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9oYW5kbGVOb2RlSnNSYWNlQ29uZGl0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5zb2NrZXRBZGFwdGVyLmlzQ29ubmVjdGVkKCkpIHtcbiAgICAgICAgICAgIC8vIGhhY2s6IGVuc3VyZSBvbkNvbm5PcGVuIGlzIGNhbGxlZFxuICAgICAgICAgICAgdGhpcy5zb2NrZXRBZGFwdGVyLmdldFNvY2tldCgpLm9uQ29ubk9wZW4oKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX3dyYXBIZWFydGJlYXRDYWxsYmFjayhoZWFydGJlYXRDYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gKHN0YXR1cywgbGF0ZW5jeSkgPT4ge1xuICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSAnc2VudCcpXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0QXV0aFNhZmVseSgpO1xuICAgICAgICAgICAgaWYgKGhlYXJ0YmVhdENhbGxiYWNrKVxuICAgICAgICAgICAgICAgIGhlYXJ0YmVhdENhbGxiYWNrKHN0YXR1cywgbGF0ZW5jeSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfc3RhcnRXb3JrZXJIZWFydGJlYXQoKSB7XG4gICAgICAgIGlmICh0aGlzLndvcmtlclVybCkge1xuICAgICAgICAgICAgdGhpcy5sb2coJ3dvcmtlcicsIGBzdGFydGluZyB3b3JrZXIgZm9yIGZyb20gJHt0aGlzLndvcmtlclVybH1gKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9nKCd3b3JrZXInLCBgc3RhcnRpbmcgZGVmYXVsdCB3b3JrZXJgKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvYmplY3RVcmwgPSB0aGlzLl93b3JrZXJPYmplY3RVcmwodGhpcy53b3JrZXJVcmwpO1xuICAgICAgICB0aGlzLndvcmtlclJlZiA9IG5ldyBXb3JrZXIob2JqZWN0VXJsKTtcbiAgICAgICAgdGhpcy53b3JrZXJSZWYub25lcnJvciA9IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgdGhpcy5sb2coJ3dvcmtlcicsICd3b3JrZXIgZXJyb3InLCBlcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMuX3Rlcm1pbmF0ZVdvcmtlcigpO1xuICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0KCk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMud29ya2VyUmVmLm9ubWVzc2FnZSA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKGV2ZW50LmRhdGEuZXZlbnQgPT09ICdrZWVwQWxpdmUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZW5kSGVhcnRiZWF0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMud29ya2VyUmVmLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIGV2ZW50OiAnc3RhcnQnLFxuICAgICAgICAgICAgaW50ZXJ2YWw6IHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWxNcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRlcm1pbmF0ZSB0aGUgV2ViIFdvcmtlciBhbmQgY2xlYXIgdGhlIHJlZmVyZW5jZVxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIF90ZXJtaW5hdGVXb3JrZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLndvcmtlclJlZikge1xuICAgICAgICAgICAgdGhpcy5sb2coJ3dvcmtlcicsICd0ZXJtaW5hdGluZyB3b3JrZXInKTtcbiAgICAgICAgICAgIHRoaXMud29ya2VyUmVmLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgdGhpcy53b3JrZXJSZWYgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF93b3JrZXJPYmplY3RVcmwodXJsKSB7XG4gICAgICAgIGxldCByZXN1bHRfdXJsO1xuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgICByZXN1bHRfdXJsID0gdXJsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtXT1JLRVJfU0NSSVBUXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vamF2YXNjcmlwdCcgfSk7XG4gICAgICAgICAgICByZXN1bHRfdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0X3VybDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogSW5pdGlhbGl6ZSBzb2NrZXQgb3B0aW9ucyB3aXRoIGRlZmF1bHRzXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgX2luaXRpYWxpemVPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZSwgX2YsIF9nLCBfaCwgX2osIF9rLCBfbDtcbiAgICAgICAgdGhpcy53b3JrZXIgPSAoX2EgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud29ya2VyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5hY2Nlc3NUb2tlbiA9IChfYiA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5hY2Nlc3NUb2tlbikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbnVsbDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIHJlc3VsdC50aW1lb3V0ID0gKF9jID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnRpbWVvdXQpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IERFRkFVTFRfVElNRU9VVDtcbiAgICAgICAgcmVzdWx0LmhlYXJ0YmVhdEludGVydmFsTXMgPVxuICAgICAgICAgICAgKF9kID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmhlYXJ0YmVhdEludGVydmFsTXMpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IENPTk5FQ1RJT05fVElNRU9VVFMuSEVBUlRCRUFUX0lOVEVSVkFMO1xuICAgICAgICB0aGlzLl9kaXNjb25uZWN0T25FbXB0eUNoYW5uZWxzQWZ0ZXJNcyA9XG4gICAgICAgICAgICAoX2UgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZGlzY29ubmVjdE9uRW1wdHlDaGFubmVsc0FmdGVyTXMpICE9PSBudWxsICYmIF9lICE9PSB2b2lkIDAgPyBfZSA6IDIgKiAoKF9mID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmhlYXJ0YmVhdEludGVydmFsTXMpICE9PSBudWxsICYmIF9mICE9PSB2b2lkIDAgPyBfZiA6IENPTk5FQ1RJT05fVElNRU9VVFMuSEVBUlRCRUFUX0lOVEVSVkFMKTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZSAtIG1pc21hdGNoIGJldHdlZW4gcGhvZW5peCBhbmQgc3VwYWJhc2VcbiAgICAgICAgcmVzdWx0LnRyYW5zcG9ydCA9IChfZyA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50cmFuc3BvcnQpICE9PSBudWxsICYmIF9nICE9PSB2b2lkIDAgPyBfZyA6IFdlYlNvY2tldEZhY3RvcnkuZ2V0V2ViU29ja2V0Q29uc3RydWN0b3IoKTtcbiAgICAgICAgcmVzdWx0LnBhcmFtcyA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5wYXJhbXM7XG4gICAgICAgIHJlc3VsdC5sb2dnZXIgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubG9nZ2VyO1xuICAgICAgICByZXN1bHQuaGVhcnRiZWF0Q2FsbGJhY2sgPSB0aGlzLl93cmFwSGVhcnRiZWF0Q2FsbGJhY2sob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmhlYXJ0YmVhdENhbGxiYWNrKTtcbiAgICAgICAgcmVzdWx0LnJlY29ubmVjdEFmdGVyTXMgPVxuICAgICAgICAgICAgKF9oID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnJlY29ubmVjdEFmdGVyTXMpICE9PSBudWxsICYmIF9oICE9PSB2b2lkIDAgPyBfaCA6ICgodHJpZXMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUkVDT05ORUNUX0lOVEVSVkFMU1t0cmllcyAtIDFdIHx8IERFRkFVTFRfUkVDT05ORUNUX0ZBTExCQUNLO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGxldCBkZWZhdWx0RW5jb2RlO1xuICAgICAgICBsZXQgZGVmYXVsdERlY29kZTtcbiAgICAgICAgY29uc3QgdnNuID0gKF9qID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnZzbikgIT09IG51bGwgJiYgX2ogIT09IHZvaWQgMCA/IF9qIDogREVGQVVMVF9WU047XG4gICAgICAgIHN3aXRjaCAodnNuKSB7XG4gICAgICAgICAgICBjYXNlIFZTTl8xXzBfMDpcbiAgICAgICAgICAgICAgICBkZWZhdWx0RW5jb2RlID0gKHBheWxvYWQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhKU09OLnN0cmluZ2lmeShwYXlsb2FkKSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0RGVjb2RlID0gKHBheWxvYWQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhKU09OLnBhcnNlKHBheWxvYWQpKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBWU05fMl8wXzA6XG4gICAgICAgICAgICAgICAgZGVmYXVsdEVuY29kZSA9IHRoaXMuc2VyaWFsaXplci5lbmNvZGUuYmluZCh0aGlzLnNlcmlhbGl6ZXIpO1xuICAgICAgICAgICAgICAgIGRlZmF1bHREZWNvZGUgPSB0aGlzLnNlcmlhbGl6ZXIuZGVjb2RlLmJpbmQodGhpcy5zZXJpYWxpemVyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnN1cHBvcnRlZCBzZXJpYWxpemVyIHZlcnNpb246ICR7cmVzdWx0LnZzbn1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQudnNuID0gdnNuO1xuICAgICAgICByZXN1bHQuZW5jb2RlID0gKF9rID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmVuY29kZSkgIT09IG51bGwgJiYgX2sgIT09IHZvaWQgMCA/IF9rIDogZGVmYXVsdEVuY29kZTtcbiAgICAgICAgcmVzdWx0LmRlY29kZSA9IChfbCA9IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5kZWNvZGUpICE9PSBudWxsICYmIF9sICE9PSB2b2lkIDAgPyBfbCA6IGRlZmF1bHREZWNvZGU7XG4gICAgICAgIHJlc3VsdC5iZWZvcmVSZWNvbm5lY3QgPSB0aGlzLl9yZWNvbm5lY3RBdXRoLmJpbmQodGhpcyk7XG4gICAgICAgIGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxvZ0xldmVsKSB8fCAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxvZ19sZXZlbCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9nTGV2ZWwgPSBvcHRpb25zLmxvZ0xldmVsIHx8IG9wdGlvbnMubG9nX2xldmVsO1xuICAgICAgICAgICAgcmVzdWx0LnBhcmFtcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzdWx0LnBhcmFtcyksIHsgbG9nX2xldmVsOiB0aGlzLmxvZ0xldmVsIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIEhhbmRsZSB3b3JrZXIgc2V0dXBcbiAgICAgICAgaWYgKHRoaXMud29ya2VyKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgIXdpbmRvdy5Xb3JrZXIpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlYiBXb3JrZXIgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy53b3JrZXJVcmwgPSBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMud29ya2VyVXJsO1xuICAgICAgICAgICAgcmVzdWx0LmF1dG9TZW5kSGVhcnRiZWF0ID0gIXRoaXMud29ya2VyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBhc3luYyBfcmVjb25uZWN0QXV0aCgpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5fd2FpdEZvckF1dGhJZk5lZWRlZCgpO1xuICAgICAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQoKSkge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZWFsdGltZUNsaWVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimeClient.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimePresence.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/@supabase/realtime-js/dist/module/RealtimePresence.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((__unused_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 */ REALTIME_PRESENCE_LISTEN_EVENTS: () => (/* binding */ REALTIME_PRESENCE_LISTEN_EVENTS),\n/* harmony export */ \"default\": () => (/* binding */ RealtimePresence)\n/* harmony export */ });\n/* harmony import */ var _phoenix_presenceAdapter__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./phoenix/presenceAdapter */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/phoenix/presenceAdapter.js\");\n/*\n This file draws heavily from https://github.com/phoenixframework/phoenix/blob/d344ec0a732ab4ee204215b31de69cf4be72e3bf/assets/js/phoenix/presence.js\n License: https://github.com/phoenixframework/phoenix/blob/d344ec0a732ab4ee204215b31de69cf4be72e3bf/LICENSE.md\n*/\n\nvar REALTIME_PRESENCE_LISTEN_EVENTS;\n(function (REALTIME_PRESENCE_LISTEN_EVENTS) {\n REALTIME_PRESENCE_LISTEN_EVENTS[\"SYNC\"] = \"sync\";\n REALTIME_PRESENCE_LISTEN_EVENTS[\"JOIN\"] = \"join\";\n REALTIME_PRESENCE_LISTEN_EVENTS[\"LEAVE\"] = \"leave\";\n})(REALTIME_PRESENCE_LISTEN_EVENTS || (REALTIME_PRESENCE_LISTEN_EVENTS = {}));\nclass RealtimePresence {\n get state() {\n return this.presenceAdapter.state;\n }\n /**\n * Creates a Presence helper that keeps the local presence state in sync with the server.\n *\n * @param channel - The realtime channel to bind to.\n * @param opts - Optional custom event names, e.g. `{ events: { state: 'state', diff: 'diff' } }`.\n *\n * @category Realtime\n *\n * @example Example for a presence channel\n * ```ts\n * const presence = new RealtimePresence(channel)\n *\n * channel.on('presence', ({ event, key }) => {\n * console.log(`Presence ${event} on ${key}`)\n * })\n * ```\n */\n constructor(channel, opts) {\n this.channel = channel;\n this.presenceAdapter = new _phoenix_presenceAdapter__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this.channel.channelAdapter, opts);\n }\n}\n//# sourceMappingURL=RealtimePresence.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvUmVhbHRpbWVQcmVzZW5jZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUN3RDtBQUNqRDtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQywwRUFBMEU7QUFDNUQ7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBEQUEwRCxVQUFVLGdDQUFnQztBQUNwRztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQyxZQUFZO0FBQzdDLGlDQUFpQyxPQUFPLEtBQUssSUFBSTtBQUNqRCxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBbUMsZ0VBQWU7QUFDbEQ7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21vZHVsZS9SZWFsdGltZVByZXNlbmNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qXG4gIFRoaXMgZmlsZSBkcmF3cyBoZWF2aWx5IGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Bob2VuaXhmcmFtZXdvcmsvcGhvZW5peC9ibG9iL2QzNDRlYzBhNzMyYWI0ZWUyMDQyMTViMzFkZTY5Y2Y0YmU3MmUzYmYvYXNzZXRzL2pzL3Bob2VuaXgvcHJlc2VuY2UuanNcbiAgTGljZW5zZTogaHR0cHM6Ly9naXRodWIuY29tL3Bob2VuaXhmcmFtZXdvcmsvcGhvZW5peC9ibG9iL2QzNDRlYzBhNzMyYWI0ZWUyMDQyMTViMzFkZTY5Y2Y0YmU3MmUzYmYvTElDRU5TRS5tZFxuKi9cbmltcG9ydCBQcmVzZW5jZUFkYXB0ZXIgZnJvbSAnLi9waG9lbml4L3ByZXNlbmNlQWRhcHRlcic7XG5leHBvcnQgdmFyIFJFQUxUSU1FX1BSRVNFTkNFX0xJU1RFTl9FVkVOVFM7XG4oZnVuY3Rpb24gKFJFQUxUSU1FX1BSRVNFTkNFX0xJU1RFTl9FVkVOVFMpIHtcbiAgICBSRUFMVElNRV9QUkVTRU5DRV9MSVNURU5fRVZFTlRTW1wiU1lOQ1wiXSA9IFwic3luY1wiO1xuICAgIFJFQUxUSU1FX1BSRVNFTkNFX0xJU1RFTl9FVkVOVFNbXCJKT0lOXCJdID0gXCJqb2luXCI7XG4gICAgUkVBTFRJTUVfUFJFU0VOQ0VfTElTVEVOX0VWRU5UU1tcIkxFQVZFXCJdID0gXCJsZWF2ZVwiO1xufSkoUkVBTFRJTUVfUFJFU0VOQ0VfTElTVEVOX0VWRU5UUyB8fCAoUkVBTFRJTUVfUFJFU0VOQ0VfTElTVEVOX0VWRU5UUyA9IHt9KSk7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsdGltZVByZXNlbmNlIHtcbiAgICBnZXQgc3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXNlbmNlQWRhcHRlci5zdGF0ZTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIFByZXNlbmNlIGhlbHBlciB0aGF0IGtlZXBzIHRoZSBsb2NhbCBwcmVzZW5jZSBzdGF0ZSBpbiBzeW5jIHdpdGggdGhlIHNlcnZlci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGFubmVsIC0gVGhlIHJlYWx0aW1lIGNoYW5uZWwgdG8gYmluZCB0by5cbiAgICAgKiBAcGFyYW0gb3B0cyAtIE9wdGlvbmFsIGN1c3RvbSBldmVudCBuYW1lcywgZS5nLiBgeyBldmVudHM6IHsgc3RhdGU6ICdzdGF0ZScsIGRpZmY6ICdkaWZmJyB9IH1gLlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IFJlYWx0aW1lXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBFeGFtcGxlIGZvciBhIHByZXNlbmNlIGNoYW5uZWxcbiAgICAgKiBgYGB0c1xuICAgICAqIGNvbnN0IHByZXNlbmNlID0gbmV3IFJlYWx0aW1lUHJlc2VuY2UoY2hhbm5lbClcbiAgICAgKlxuICAgICAqIGNoYW5uZWwub24oJ3ByZXNlbmNlJywgKHsgZXZlbnQsIGtleSB9KSA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZyhgUHJlc2VuY2UgJHtldmVudH0gb24gJHtrZXl9YClcbiAgICAgKiB9KVxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKGNoYW5uZWwsIG9wdHMpIHtcbiAgICAgICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbDtcbiAgICAgICAgdGhpcy5wcmVzZW5jZUFkYXB0ZXIgPSBuZXcgUHJlc2VuY2VBZGFwdGVyKHRoaXMuY2hhbm5lbC5jaGFubmVsQWRhcHRlciwgb3B0cyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVhbHRpbWVQcmVzZW5jZS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimePresence.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/index.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/@supabase/realtime-js/dist/module/index.js ***!
|
||
\*****************************************************************/
|
||
/***/ ((__unused_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 */ REALTIME_CHANNEL_STATES: () => (/* reexport safe */ _RealtimeChannel__WEBPACK_IMPORTED_MODULE_1__.REALTIME_CHANNEL_STATES),\n/* harmony export */ REALTIME_LISTEN_TYPES: () => (/* reexport safe */ _RealtimeChannel__WEBPACK_IMPORTED_MODULE_1__.REALTIME_LISTEN_TYPES),\n/* harmony export */ REALTIME_POSTGRES_CHANGES_LISTEN_EVENT: () => (/* reexport safe */ _RealtimeChannel__WEBPACK_IMPORTED_MODULE_1__.REALTIME_POSTGRES_CHANGES_LISTEN_EVENT),\n/* harmony export */ REALTIME_PRESENCE_LISTEN_EVENTS: () => (/* reexport safe */ _RealtimePresence__WEBPACK_IMPORTED_MODULE_2__.REALTIME_PRESENCE_LISTEN_EVENTS),\n/* harmony export */ REALTIME_SUBSCRIBE_STATES: () => (/* reexport safe */ _RealtimeChannel__WEBPACK_IMPORTED_MODULE_1__.REALTIME_SUBSCRIBE_STATES),\n/* harmony export */ RealtimeChannel: () => (/* reexport safe */ _RealtimeChannel__WEBPACK_IMPORTED_MODULE_1__[\"default\"]),\n/* harmony export */ RealtimeClient: () => (/* reexport safe */ _RealtimeClient__WEBPACK_IMPORTED_MODULE_0__[\"default\"]),\n/* harmony export */ RealtimePresence: () => (/* reexport safe */ _RealtimePresence__WEBPACK_IMPORTED_MODULE_2__[\"default\"]),\n/* harmony export */ WebSocketFactory: () => (/* reexport safe */ _lib_websocket_factory__WEBPACK_IMPORTED_MODULE_3__[\"default\"])\n/* harmony export */ });\n/* harmony import */ var _RealtimeClient__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./RealtimeClient */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimeClient.js\");\n/* harmony import */ var _RealtimeChannel__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./RealtimeChannel */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimeChannel.js\");\n/* harmony import */ var _RealtimePresence__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./RealtimePresence */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/RealtimePresence.js\");\n/* harmony import */ var _lib_websocket_factory__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/websocket-factory */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/websocket-factory.js\");\n\n\n\n\n\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvaW5kZXguanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUE4QztBQUMwSDtBQUNoRjtBQUNqQztBQUM2SztBQUNwTyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWx0aW1lQ2xpZW50IGZyb20gJy4vUmVhbHRpbWVDbGllbnQnO1xuaW1wb3J0IFJlYWx0aW1lQ2hhbm5lbCwgeyBSRUFMVElNRV9MSVNURU5fVFlQRVMsIFJFQUxUSU1FX1BPU1RHUkVTX0NIQU5HRVNfTElTVEVOX0VWRU5ULCBSRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTLCBSRUFMVElNRV9DSEFOTkVMX1NUQVRFUywgfSBmcm9tICcuL1JlYWx0aW1lQ2hhbm5lbCc7XG5pbXBvcnQgUmVhbHRpbWVQcmVzZW5jZSwgeyBSRUFMVElNRV9QUkVTRU5DRV9MSVNURU5fRVZFTlRTLCB9IGZyb20gJy4vUmVhbHRpbWVQcmVzZW5jZSc7XG5pbXBvcnQgV2ViU29ja2V0RmFjdG9yeSBmcm9tICcuL2xpYi93ZWJzb2NrZXQtZmFjdG9yeSc7XG5leHBvcnQgeyBSZWFsdGltZVByZXNlbmNlLCBSZWFsdGltZUNoYW5uZWwsIFJlYWx0aW1lQ2xpZW50LCBSRUFMVElNRV9MSVNURU5fVFlQRVMsIFJFQUxUSU1FX1BPU1RHUkVTX0NIQU5HRVNfTElTVEVOX0VWRU5ULCBSRUFMVElNRV9QUkVTRU5DRV9MSVNURU5fRVZFTlRTLCBSRUFMVElNRV9TVUJTQ1JJQkVfU1RBVEVTLCBSRUFMVElNRV9DSEFOTkVMX1NUQVRFUywgV2ViU29ja2V0RmFjdG9yeSwgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/constants.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/@supabase/realtime-js/dist/module/lib/constants.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((__unused_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 */ CHANNEL_EVENTS: () => (/* binding */ CHANNEL_EVENTS),\n/* harmony export */ CHANNEL_STATES: () => (/* binding */ CHANNEL_STATES),\n/* harmony export */ CONNECTION_STATE: () => (/* binding */ CONNECTION_STATE),\n/* harmony export */ DEFAULT_TIMEOUT: () => (/* binding */ DEFAULT_TIMEOUT),\n/* harmony export */ DEFAULT_VERSION: () => (/* binding */ DEFAULT_VERSION),\n/* harmony export */ DEFAULT_VSN: () => (/* binding */ DEFAULT_VSN),\n/* harmony export */ MAX_PUSH_BUFFER_SIZE: () => (/* binding */ MAX_PUSH_BUFFER_SIZE),\n/* harmony export */ SOCKET_STATES: () => (/* binding */ SOCKET_STATES),\n/* harmony export */ TRANSPORTS: () => (/* binding */ TRANSPORTS),\n/* harmony export */ VERSION: () => (/* binding */ VERSION),\n/* harmony export */ VSN_1_0_0: () => (/* binding */ VSN_1_0_0),\n/* harmony export */ VSN_2_0_0: () => (/* binding */ VSN_2_0_0),\n/* harmony export */ WS_CLOSE_NORMAL: () => (/* binding */ WS_CLOSE_NORMAL)\n/* harmony export */ });\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./version */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/version.js\");\n\nconst DEFAULT_VERSION = `realtime-js/${_version__WEBPACK_IMPORTED_MODULE_0__.version}`;\nconst VSN_1_0_0 = '1.0.0';\nconst VSN_2_0_0 = '2.0.0';\nconst DEFAULT_VSN = VSN_2_0_0;\nconst VERSION = _version__WEBPACK_IMPORTED_MODULE_0__.version;\nconst DEFAULT_TIMEOUT = 10000;\nconst WS_CLOSE_NORMAL = 1000;\nconst MAX_PUSH_BUFFER_SIZE = 100;\nconst SOCKET_STATES = {\n connecting: 0,\n open: 1,\n closing: 2,\n closed: 3,\n};\nconst CHANNEL_STATES = {\n closed: 'closed',\n errored: 'errored',\n joined: 'joined',\n joining: 'joining',\n leaving: 'leaving',\n};\nconst CHANNEL_EVENTS = {\n close: 'phx_close',\n error: 'phx_error',\n join: 'phx_join',\n reply: 'phx_reply',\n leave: 'phx_leave',\n access_token: 'access_token',\n};\nconst TRANSPORTS = {\n websocket: 'websocket',\n};\nconst CONNECTION_STATE = {\n connecting: 'connecting',\n open: 'open',\n closing: 'closing',\n closed: 'closed',\n};\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvbGliL2NvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUFvQztBQUM3Qix1Q0FBdUMsNkNBQU8sQ0FBQztBQUMvQztBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNkNBQU87QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbW9kdWxlL2xpYi9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gJy4vdmVyc2lvbic7XG5leHBvcnQgY29uc3QgREVGQVVMVF9WRVJTSU9OID0gYHJlYWx0aW1lLWpzLyR7dmVyc2lvbn1gO1xuZXhwb3J0IGNvbnN0IFZTTl8xXzBfMCA9ICcxLjAuMCc7XG5leHBvcnQgY29uc3QgVlNOXzJfMF8wID0gJzIuMC4wJztcbmV4cG9ydCBjb25zdCBERUZBVUxUX1ZTTiA9IFZTTl8yXzBfMDtcbmV4cG9ydCBjb25zdCBWRVJTSU9OID0gdmVyc2lvbjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1RJTUVPVVQgPSAxMDAwMDtcbmV4cG9ydCBjb25zdCBXU19DTE9TRV9OT1JNQUwgPSAxMDAwO1xuZXhwb3J0IGNvbnN0IE1BWF9QVVNIX0JVRkZFUl9TSVpFID0gMTAwO1xuZXhwb3J0IGNvbnN0IFNPQ0tFVF9TVEFURVMgPSB7XG4gICAgY29ubmVjdGluZzogMCxcbiAgICBvcGVuOiAxLFxuICAgIGNsb3Npbmc6IDIsXG4gICAgY2xvc2VkOiAzLFxufTtcbmV4cG9ydCBjb25zdCBDSEFOTkVMX1NUQVRFUyA9IHtcbiAgICBjbG9zZWQ6ICdjbG9zZWQnLFxuICAgIGVycm9yZWQ6ICdlcnJvcmVkJyxcbiAgICBqb2luZWQ6ICdqb2luZWQnLFxuICAgIGpvaW5pbmc6ICdqb2luaW5nJyxcbiAgICBsZWF2aW5nOiAnbGVhdmluZycsXG59O1xuZXhwb3J0IGNvbnN0IENIQU5ORUxfRVZFTlRTID0ge1xuICAgIGNsb3NlOiAncGh4X2Nsb3NlJyxcbiAgICBlcnJvcjogJ3BoeF9lcnJvcicsXG4gICAgam9pbjogJ3BoeF9qb2luJyxcbiAgICByZXBseTogJ3BoeF9yZXBseScsXG4gICAgbGVhdmU6ICdwaHhfbGVhdmUnLFxuICAgIGFjY2Vzc190b2tlbjogJ2FjY2Vzc190b2tlbicsXG59O1xuZXhwb3J0IGNvbnN0IFRSQU5TUE9SVFMgPSB7XG4gICAgd2Vic29ja2V0OiAnd2Vic29ja2V0Jyxcbn07XG5leHBvcnQgY29uc3QgQ09OTkVDVElPTl9TVEFURSA9IHtcbiAgICBjb25uZWN0aW5nOiAnY29ubmVjdGluZycsXG4gICAgb3BlbjogJ29wZW4nLFxuICAgIGNsb3Npbmc6ICdjbG9zaW5nJyxcbiAgICBjbG9zZWQ6ICdjbG9zZWQnLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbnN0YW50cy5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/constants.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/normalizeChannelError.js":
|
||
/*!*************************************************************************************!*\
|
||
!*** ./node_modules/@supabase/realtime-js/dist/module/lib/normalizeChannelError.js ***!
|
||
\*************************************************************************************/
|
||
/***/ ((__unused_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 */ normalizeChannelError: () => (/* binding */ normalizeChannelError)\n/* harmony export */ });\n/**\n * Normalize the various shapes a channel error reason can take into a real `Error`.\n *\n * Transport-level channel errors arrive as a `CloseEvent`, a transport `Event`, an `Error`,\n * a string, or `undefined` depending on which path in the underlying socket fired. Server-reply\n * errors arrive as a payload object. This helper produces a consistent `Error` for every case\n * and preserves the original via `cause` so callers can still inspect the raw event.\n */\nfunction normalizeChannelError(reason) {\n if (reason instanceof Error) {\n return reason;\n }\n if (typeof reason === 'string') {\n return new Error(reason);\n }\n if (reason && typeof reason === 'object') {\n const obj = reason;\n if (typeof obj.code === 'number') {\n const detail = typeof obj.reason === 'string' && obj.reason ? ` (${obj.reason})` : '';\n return new Error(`socket closed: ${obj.code}${detail}`, { cause: reason });\n }\n return new Error('channel error: transport failure', { cause: reason });\n }\n return new Error('channel error: connection lost');\n}\n//# sourceMappingURL=normalizeChannelError.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvbGliL25vcm1hbGl6ZUNoYW5uZWxFcnJvci5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0VBQStFLFdBQVc7QUFDMUYsK0NBQStDLFNBQVMsRUFBRSxPQUFPLEtBQUssZUFBZTtBQUNyRjtBQUNBLCtEQUErRCxlQUFlO0FBQzlFO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21vZHVsZS9saWIvbm9ybWFsaXplQ2hhbm5lbEVycm9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogTm9ybWFsaXplIHRoZSB2YXJpb3VzIHNoYXBlcyBhIGNoYW5uZWwgZXJyb3IgcmVhc29uIGNhbiB0YWtlIGludG8gYSByZWFsIGBFcnJvcmAuXG4gKlxuICogVHJhbnNwb3J0LWxldmVsIGNoYW5uZWwgZXJyb3JzIGFycml2ZSBhcyBhIGBDbG9zZUV2ZW50YCwgYSB0cmFuc3BvcnQgYEV2ZW50YCwgYW4gYEVycm9yYCxcbiAqIGEgc3RyaW5nLCBvciBgdW5kZWZpbmVkYCBkZXBlbmRpbmcgb24gd2hpY2ggcGF0aCBpbiB0aGUgdW5kZXJseWluZyBzb2NrZXQgZmlyZWQuIFNlcnZlci1yZXBseVxuICogZXJyb3JzIGFycml2ZSBhcyBhIHBheWxvYWQgb2JqZWN0LiBUaGlzIGhlbHBlciBwcm9kdWNlcyBhIGNvbnNpc3RlbnQgYEVycm9yYCBmb3IgZXZlcnkgY2FzZVxuICogYW5kIHByZXNlcnZlcyB0aGUgb3JpZ2luYWwgdmlhIGBjYXVzZWAgc28gY2FsbGVycyBjYW4gc3RpbGwgaW5zcGVjdCB0aGUgcmF3IGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplQ2hhbm5lbEVycm9yKHJlYXNvbikge1xuICAgIGlmIChyZWFzb24gaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICByZXR1cm4gcmVhc29uO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlYXNvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihyZWFzb24pO1xuICAgIH1cbiAgICBpZiAocmVhc29uICYmIHR5cGVvZiByZWFzb24gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHJlYXNvbjtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmouY29kZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGRldGFpbCA9IHR5cGVvZiBvYmoucmVhc29uID09PSAnc3RyaW5nJyAmJiBvYmoucmVhc29uID8gYCAoJHtvYmoucmVhc29ufSlgIDogJyc7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKGBzb2NrZXQgY2xvc2VkOiAke29iai5jb2RlfSR7ZGV0YWlsfWAsIHsgY2F1c2U6IHJlYXNvbiB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEVycm9yKCdjaGFubmVsIGVycm9yOiB0cmFuc3BvcnQgZmFpbHVyZScsIHsgY2F1c2U6IHJlYXNvbiB9KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBFcnJvcignY2hhbm5lbCBlcnJvcjogY29ubmVjdGlvbiBsb3N0Jyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub3JtYWxpemVDaGFubmVsRXJyb3IuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/normalizeChannelError.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/serializer.js":
|
||
/*!**************************************************************************!*\
|
||
!*** ./node_modules/@supabase/realtime-js/dist/module/lib/serializer.js ***!
|
||
\**************************************************************************/
|
||
/***/ ((__unused_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 */ \"default\": () => (/* binding */ Serializer)\n/* harmony export */ });\nclass Serializer {\n constructor(allowedMetadataKeys) {\n this.HEADER_LENGTH = 1;\n this.USER_BROADCAST_PUSH_META_LENGTH = 6;\n this.KINDS = { userBroadcastPush: 3, userBroadcast: 4 };\n this.BINARY_ENCODING = 0;\n this.JSON_ENCODING = 1;\n this.BROADCAST_EVENT = 'broadcast';\n this.allowedMetadataKeys = [];\n this.allowedMetadataKeys = allowedMetadataKeys !== null && allowedMetadataKeys !== void 0 ? allowedMetadataKeys : [];\n }\n encode(msg, callback) {\n if (msg.event === this.BROADCAST_EVENT &&\n !(msg.payload instanceof ArrayBuffer) &&\n typeof msg.payload.event === 'string') {\n return callback(this._binaryEncodeUserBroadcastPush(msg));\n }\n let payload = [msg.join_ref, msg.ref, msg.topic, msg.event, msg.payload];\n return callback(JSON.stringify(payload));\n }\n _binaryEncodeUserBroadcastPush(message) {\n var _a;\n if (this._isArrayBuffer((_a = message.payload) === null || _a === void 0 ? void 0 : _a.payload)) {\n return this._encodeBinaryUserBroadcastPush(message);\n }\n else {\n return this._encodeJsonUserBroadcastPush(message);\n }\n }\n _encodeBinaryUserBroadcastPush(message) {\n var _a, _b;\n const userPayload = (_b = (_a = message.payload) === null || _a === void 0 ? void 0 : _a.payload) !== null && _b !== void 0 ? _b : new ArrayBuffer(0);\n return this._encodeUserBroadcastPush(message, this.BINARY_ENCODING, userPayload);\n }\n _encodeJsonUserBroadcastPush(message) {\n var _a, _b;\n const userPayload = (_b = (_a = message.payload) === null || _a === void 0 ? void 0 : _a.payload) !== null && _b !== void 0 ? _b : {};\n const encoder = new TextEncoder();\n const encodedUserPayload = encoder.encode(JSON.stringify(userPayload)).buffer;\n return this._encodeUserBroadcastPush(message, this.JSON_ENCODING, encodedUserPayload);\n }\n _encodeUserBroadcastPush(message, encodingType, encodedPayload) {\n var _a, _b;\n const topic = message.topic;\n const ref = (_a = message.ref) !== null && _a !== void 0 ? _a : '';\n const joinRef = (_b = message.join_ref) !== null && _b !== void 0 ? _b : '';\n const userEvent = message.payload.event;\n // Filter metadata based on allowed keys\n const rest = this.allowedMetadataKeys\n ? this._pick(message.payload, this.allowedMetadataKeys)\n : {};\n const metadata = Object.keys(rest).length === 0 ? '' : JSON.stringify(rest);\n // Validate lengths don't exceed uint8 max value (255)\n if (joinRef.length > 255) {\n throw new Error(`joinRef length ${joinRef.length} exceeds maximum of 255`);\n }\n if (ref.length > 255) {\n throw new Error(`ref length ${ref.length} exceeds maximum of 255`);\n }\n if (topic.length > 255) {\n throw new Error(`topic length ${topic.length} exceeds maximum of 255`);\n }\n if (userEvent.length > 255) {\n throw new Error(`userEvent length ${userEvent.length} exceeds maximum of 255`);\n }\n if (metadata.length > 255) {\n throw new Error(`metadata length ${metadata.length} exceeds maximum of 255`);\n }\n const metaLength = this.USER_BROADCAST_PUSH_META_LENGTH +\n joinRef.length +\n ref.length +\n topic.length +\n userEvent.length +\n metadata.length;\n const header = new ArrayBuffer(this.HEADER_LENGTH + metaLength);\n let view = new DataView(header);\n let offset = 0;\n view.setUint8(offset++, this.KINDS.userBroadcastPush); // kind\n view.setUint8(offset++, joinRef.length);\n view.setUint8(offset++, ref.length);\n view.setUint8(offset++, topic.length);\n view.setUint8(offset++, userEvent.length);\n view.setUint8(offset++, metadata.length);\n view.setUint8(offset++, encodingType);\n Array.from(joinRef, (char) => view.setUint8(offset++, char.charCodeAt(0)));\n Array.from(ref, (char) => view.setUint8(offset++, char.charCodeAt(0)));\n Array.from(topic, (char) => view.setUint8(offset++, char.charCodeAt(0)));\n Array.from(userEvent, (char) => view.setUint8(offset++, char.charCodeAt(0)));\n Array.from(metadata, (char) => view.setUint8(offset++, char.charCodeAt(0)));\n var combined = new Uint8Array(header.byteLength + encodedPayload.byteLength);\n combined.set(new Uint8Array(header), 0);\n combined.set(new Uint8Array(encodedPayload), header.byteLength);\n return combined.buffer;\n }\n decode(rawPayload, callback) {\n if (this._isArrayBuffer(rawPayload)) {\n let result = this._binaryDecode(rawPayload);\n return callback(result);\n }\n if (typeof rawPayload === 'string') {\n const jsonPayload = JSON.parse(rawPayload);\n const [join_ref, ref, topic, event, payload] = jsonPayload;\n return callback({ join_ref, ref, topic, event, payload });\n }\n return callback({});\n }\n _binaryDecode(buffer) {\n const view = new DataView(buffer);\n const kind = view.getUint8(0);\n const decoder = new TextDecoder();\n switch (kind) {\n case this.KINDS.userBroadcast:\n return this._decodeUserBroadcast(buffer, view, decoder);\n }\n }\n _decodeUserBroadcast(buffer, view, decoder) {\n const topicSize = view.getUint8(1);\n const userEventSize = view.getUint8(2);\n const metadataSize = view.getUint8(3);\n const payloadEncoding = view.getUint8(4);\n let offset = this.HEADER_LENGTH + 4;\n const topic = decoder.decode(buffer.slice(offset, offset + topicSize));\n offset = offset + topicSize;\n const userEvent = decoder.decode(buffer.slice(offset, offset + userEventSize));\n offset = offset + userEventSize;\n const metadata = decoder.decode(buffer.slice(offset, offset + metadataSize));\n offset = offset + metadataSize;\n const payload = buffer.slice(offset, buffer.byteLength);\n const parsedPayload = payloadEncoding === this.JSON_ENCODING ? JSON.parse(decoder.decode(payload)) : payload;\n const data = {\n type: this.BROADCAST_EVENT,\n event: userEvent,\n payload: parsedPayload,\n };\n // Metadata is optional and always JSON encoded\n if (metadataSize > 0) {\n data['meta'] = JSON.parse(metadata);\n }\n return { join_ref: null, ref: null, topic: topic, event: this.BROADCAST_EVENT, payload: data };\n }\n _isArrayBuffer(buffer) {\n var _a;\n return buffer instanceof ArrayBuffer || ((_a = buffer === null || buffer === void 0 ? void 0 : buffer.constructor) === null || _a === void 0 ? void 0 : _a.name) === 'ArrayBuffer';\n }\n _pick(obj, keys) {\n if (!obj || typeof obj !== 'object') {\n return {};\n }\n return Object.fromEntries(Object.entries(obj).filter(([key]) => keys.includes(key)));\n }\n}\n//# sourceMappingURL=serializer.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvbGliL3NlcmlhbGl6ZXIuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDLGdCQUFnQjtBQUM5RDtBQUNBO0FBQ0EsMENBQTBDLFlBQVk7QUFDdEQ7QUFDQTtBQUNBLDRDQUE0QyxjQUFjO0FBQzFEO0FBQ0E7QUFDQSxnREFBZ0Qsa0JBQWtCO0FBQ2xFO0FBQ0E7QUFDQSwrQ0FBK0MsaUJBQWlCO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0RBQStEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QixzQ0FBc0M7QUFDcEU7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21vZHVsZS9saWIvc2VyaWFsaXplci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBjbGFzcyBTZXJpYWxpemVyIHtcbiAgICBjb25zdHJ1Y3RvcihhbGxvd2VkTWV0YWRhdGFLZXlzKSB7XG4gICAgICAgIHRoaXMuSEVBREVSX0xFTkdUSCA9IDE7XG4gICAgICAgIHRoaXMuVVNFUl9CUk9BRENBU1RfUFVTSF9NRVRBX0xFTkdUSCA9IDY7XG4gICAgICAgIHRoaXMuS0lORFMgPSB7IHVzZXJCcm9hZGNhc3RQdXNoOiAzLCB1c2VyQnJvYWRjYXN0OiA0IH07XG4gICAgICAgIHRoaXMuQklOQVJZX0VOQ09ESU5HID0gMDtcbiAgICAgICAgdGhpcy5KU09OX0VOQ09ESU5HID0gMTtcbiAgICAgICAgdGhpcy5CUk9BRENBU1RfRVZFTlQgPSAnYnJvYWRjYXN0JztcbiAgICAgICAgdGhpcy5hbGxvd2VkTWV0YWRhdGFLZXlzID0gW107XG4gICAgICAgIHRoaXMuYWxsb3dlZE1ldGFkYXRhS2V5cyA9IGFsbG93ZWRNZXRhZGF0YUtleXMgIT09IG51bGwgJiYgYWxsb3dlZE1ldGFkYXRhS2V5cyAhPT0gdm9pZCAwID8gYWxsb3dlZE1ldGFkYXRhS2V5cyA6IFtdO1xuICAgIH1cbiAgICBlbmNvZGUobXNnLCBjYWxsYmFjaykge1xuICAgICAgICBpZiAobXNnLmV2ZW50ID09PSB0aGlzLkJST0FEQ0FTVF9FVkVOVCAmJlxuICAgICAgICAgICAgIShtc2cucGF5bG9hZCBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSAmJlxuICAgICAgICAgICAgdHlwZW9mIG1zZy5wYXlsb2FkLmV2ZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHRoaXMuX2JpbmFyeUVuY29kZVVzZXJCcm9hZGNhc3RQdXNoKG1zZykpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwYXlsb2FkID0gW21zZy5qb2luX3JlZiwgbXNnLnJlZiwgbXNnLnRvcGljLCBtc2cuZXZlbnQsIG1zZy5wYXlsb2FkXTtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKTtcbiAgICB9XG4gICAgX2JpbmFyeUVuY29kZVVzZXJCcm9hZGNhc3RQdXNoKG1lc3NhZ2UpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGhpcy5faXNBcnJheUJ1ZmZlcigoX2EgPSBtZXNzYWdlLnBheWxvYWQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wYXlsb2FkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VuY29kZUJpbmFyeVVzZXJCcm9hZGNhc3RQdXNoKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2VuY29kZUpzb25Vc2VyQnJvYWRjYXN0UHVzaChtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBfZW5jb2RlQmluYXJ5VXNlckJyb2FkY2FzdFB1c2gobWVzc2FnZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCB1c2VyUGF5bG9hZCA9IChfYiA9IChfYSA9IG1lc3NhZ2UucGF5bG9hZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnBheWxvYWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG5ldyBBcnJheUJ1ZmZlcigwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuY29kZVVzZXJCcm9hZGNhc3RQdXNoKG1lc3NhZ2UsIHRoaXMuQklOQVJZX0VOQ09ESU5HLCB1c2VyUGF5bG9hZCk7XG4gICAgfVxuICAgIF9lbmNvZGVKc29uVXNlckJyb2FkY2FzdFB1c2gobWVzc2FnZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCB1c2VyUGF5bG9hZCA9IChfYiA9IChfYSA9IG1lc3NhZ2UucGF5bG9hZCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnBheWxvYWQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHt9O1xuICAgICAgICBjb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7XG4gICAgICAgIGNvbnN0IGVuY29kZWRVc2VyUGF5bG9hZCA9IGVuY29kZXIuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHVzZXJQYXlsb2FkKSkuYnVmZmVyO1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5jb2RlVXNlckJyb2FkY2FzdFB1c2gobWVzc2FnZSwgdGhpcy5KU09OX0VOQ09ESU5HLCBlbmNvZGVkVXNlclBheWxvYWQpO1xuICAgIH1cbiAgICBfZW5jb2RlVXNlckJyb2FkY2FzdFB1c2gobWVzc2FnZSwgZW5jb2RpbmdUeXBlLCBlbmNvZGVkUGF5bG9hZCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCB0b3BpYyA9IG1lc3NhZ2UudG9waWM7XG4gICAgICAgIGNvbnN0IHJlZiA9IChfYSA9IG1lc3NhZ2UucmVmKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgY29uc3Qgam9pblJlZiA9IChfYiA9IG1lc3NhZ2Uuam9pbl9yZWYpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xuICAgICAgICBjb25zdCB1c2VyRXZlbnQgPSBtZXNzYWdlLnBheWxvYWQuZXZlbnQ7XG4gICAgICAgIC8vIEZpbHRlciBtZXRhZGF0YSBiYXNlZCBvbiBhbGxvd2VkIGtleXNcbiAgICAgICAgY29uc3QgcmVzdCA9IHRoaXMuYWxsb3dlZE1ldGFkYXRhS2V5c1xuICAgICAgICAgICAgPyB0aGlzLl9waWNrKG1lc3NhZ2UucGF5bG9hZCwgdGhpcy5hbGxvd2VkTWV0YWRhdGFLZXlzKVxuICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgY29uc3QgbWV0YWRhdGEgPSBPYmplY3Qua2V5cyhyZXN0KS5sZW5ndGggPT09IDAgPyAnJyA6IEpTT04uc3RyaW5naWZ5KHJlc3QpO1xuICAgICAgICAvLyBWYWxpZGF0ZSBsZW5ndGhzIGRvbid0IGV4Y2VlZCB1aW50OCBtYXggdmFsdWUgKDI1NSlcbiAgICAgICAgaWYgKGpvaW5SZWYubGVuZ3RoID4gMjU1KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGpvaW5SZWYgbGVuZ3RoICR7am9pblJlZi5sZW5ndGh9IGV4Y2VlZHMgbWF4aW11bSBvZiAyNTVgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVmLmxlbmd0aCA+IDI1NSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGByZWYgbGVuZ3RoICR7cmVmLmxlbmd0aH0gZXhjZWVkcyBtYXhpbXVtIG9mIDI1NWApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b3BpYy5sZW5ndGggPiAyNTUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdG9waWMgbGVuZ3RoICR7dG9waWMubGVuZ3RofSBleGNlZWRzIG1heGltdW0gb2YgMjU1YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVzZXJFdmVudC5sZW5ndGggPiAyNTUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdXNlckV2ZW50IGxlbmd0aCAke3VzZXJFdmVudC5sZW5ndGh9IGV4Y2VlZHMgbWF4aW11bSBvZiAyNTVgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWV0YWRhdGEubGVuZ3RoID4gMjU1KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYG1ldGFkYXRhIGxlbmd0aCAke21ldGFkYXRhLmxlbmd0aH0gZXhjZWVkcyBtYXhpbXVtIG9mIDI1NWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1ldGFMZW5ndGggPSB0aGlzLlVTRVJfQlJPQURDQVNUX1BVU0hfTUVUQV9MRU5HVEggK1xuICAgICAgICAgICAgam9pblJlZi5sZW5ndGggK1xuICAgICAgICAgICAgcmVmLmxlbmd0aCArXG4gICAgICAgICAgICB0b3BpYy5sZW5ndGggK1xuICAgICAgICAgICAgdXNlckV2ZW50Lmxlbmd0aCArXG4gICAgICAgICAgICBtZXRhZGF0YS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IG5ldyBBcnJheUJ1ZmZlcih0aGlzLkhFQURFUl9MRU5HVEggKyBtZXRhTGVuZ3RoKTtcbiAgICAgICAgbGV0IHZpZXcgPSBuZXcgRGF0YVZpZXcoaGVhZGVyKTtcbiAgICAgICAgbGV0IG9mZnNldCA9IDA7XG4gICAgICAgIHZpZXcuc2V0VWludDgob2Zmc2V0KyssIHRoaXMuS0lORFMudXNlckJyb2FkY2FzdFB1c2gpOyAvLyBraW5kXG4gICAgICAgIHZpZXcuc2V0VWludDgob2Zmc2V0KyssIGpvaW5SZWYubGVuZ3RoKTtcbiAgICAgICAgdmlldy5zZXRVaW50OChvZmZzZXQrKywgcmVmLmxlbmd0aCk7XG4gICAgICAgIHZpZXcuc2V0VWludDgob2Zmc2V0KyssIHRvcGljLmxlbmd0aCk7XG4gICAgICAgIHZpZXcuc2V0VWludDgob2Zmc2V0KyssIHVzZXJFdmVudC5sZW5ndGgpO1xuICAgICAgICB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCBtZXRhZGF0YS5sZW5ndGgpO1xuICAgICAgICB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCBlbmNvZGluZ1R5cGUpO1xuICAgICAgICBBcnJheS5mcm9tKGpvaW5SZWYsIChjaGFyKSA9PiB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCBjaGFyLmNoYXJDb2RlQXQoMCkpKTtcbiAgICAgICAgQXJyYXkuZnJvbShyZWYsIChjaGFyKSA9PiB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCBjaGFyLmNoYXJDb2RlQXQoMCkpKTtcbiAgICAgICAgQXJyYXkuZnJvbSh0b3BpYywgKGNoYXIpID0+IHZpZXcuc2V0VWludDgob2Zmc2V0KyssIGNoYXIuY2hhckNvZGVBdCgwKSkpO1xuICAgICAgICBBcnJheS5mcm9tKHVzZXJFdmVudCwgKGNoYXIpID0+IHZpZXcuc2V0VWludDgob2Zmc2V0KyssIGNoYXIuY2hhckNvZGVBdCgwKSkpO1xuICAgICAgICBBcnJheS5mcm9tKG1ldGFkYXRhLCAoY2hhcikgPT4gdmlldy5zZXRVaW50OChvZmZzZXQrKywgY2hhci5jaGFyQ29kZUF0KDApKSk7XG4gICAgICAgIHZhciBjb21iaW5lZCA9IG5ldyBVaW50OEFycmF5KGhlYWRlci5ieXRlTGVuZ3RoICsgZW5jb2RlZFBheWxvYWQuYnl0ZUxlbmd0aCk7XG4gICAgICAgIGNvbWJpbmVkLnNldChuZXcgVWludDhBcnJheShoZWFkZXIpLCAwKTtcbiAgICAgICAgY29tYmluZWQuc2V0KG5ldyBVaW50OEFycmF5KGVuY29kZWRQYXlsb2FkKSwgaGVhZGVyLmJ5dGVMZW5ndGgpO1xuICAgICAgICByZXR1cm4gY29tYmluZWQuYnVmZmVyO1xuICAgIH1cbiAgICBkZWNvZGUocmF3UGF5bG9hZCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzQXJyYXlCdWZmZXIocmF3UGF5bG9hZCkpIHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLl9iaW5hcnlEZWNvZGUocmF3UGF5bG9hZCk7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2socmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJhd1BheWxvYWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBqc29uUGF5bG9hZCA9IEpTT04ucGFyc2UocmF3UGF5bG9hZCk7XG4gICAgICAgICAgICBjb25zdCBbam9pbl9yZWYsIHJlZiwgdG9waWMsIGV2ZW50LCBwYXlsb2FkXSA9IGpzb25QYXlsb2FkO1xuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHsgam9pbl9yZWYsIHJlZiwgdG9waWMsIGV2ZW50LCBwYXlsb2FkIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh7fSk7XG4gICAgfVxuICAgIF9iaW5hcnlEZWNvZGUoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyKTtcbiAgICAgICAgY29uc3Qga2luZCA9IHZpZXcuZ2V0VWludDgoMCk7XG4gICAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgICAgICAgc3dpdGNoIChraW5kKSB7XG4gICAgICAgICAgICBjYXNlIHRoaXMuS0lORFMudXNlckJyb2FkY2FzdDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVjb2RlVXNlckJyb2FkY2FzdChidWZmZXIsIHZpZXcsIGRlY29kZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9kZWNvZGVVc2VyQnJvYWRjYXN0KGJ1ZmZlciwgdmlldywgZGVjb2Rlcikge1xuICAgICAgICBjb25zdCB0b3BpY1NpemUgPSB2aWV3LmdldFVpbnQ4KDEpO1xuICAgICAgICBjb25zdCB1c2VyRXZlbnRTaXplID0gdmlldy5nZXRVaW50OCgyKTtcbiAgICAgICAgY29uc3QgbWV0YWRhdGFTaXplID0gdmlldy5nZXRVaW50OCgzKTtcbiAgICAgICAgY29uc3QgcGF5bG9hZEVuY29kaW5nID0gdmlldy5nZXRVaW50OCg0KTtcbiAgICAgICAgbGV0IG9mZnNldCA9IHRoaXMuSEVBREVSX0xFTkdUSCArIDQ7XG4gICAgICAgIGNvbnN0IHRvcGljID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdG9waWNTaXplKSk7XG4gICAgICAgIG9mZnNldCA9IG9mZnNldCArIHRvcGljU2l6ZTtcbiAgICAgICAgY29uc3QgdXNlckV2ZW50ID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdXNlckV2ZW50U2l6ZSkpO1xuICAgICAgICBvZmZzZXQgPSBvZmZzZXQgKyB1c2VyRXZlbnRTaXplO1xuICAgICAgICBjb25zdCBtZXRhZGF0YSA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIG1ldGFkYXRhU2l6ZSkpO1xuICAgICAgICBvZmZzZXQgPSBvZmZzZXQgKyBtZXRhZGF0YVNpemU7XG4gICAgICAgIGNvbnN0IHBheWxvYWQgPSBidWZmZXIuc2xpY2Uob2Zmc2V0LCBidWZmZXIuYnl0ZUxlbmd0aCk7XG4gICAgICAgIGNvbnN0IHBhcnNlZFBheWxvYWQgPSBwYXlsb2FkRW5jb2RpbmcgPT09IHRoaXMuSlNPTl9FTkNPRElORyA/IEpTT04ucGFyc2UoZGVjb2Rlci5kZWNvZGUocGF5bG9hZCkpIDogcGF5bG9hZDtcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcbiAgICAgICAgICAgIHR5cGU6IHRoaXMuQlJPQURDQVNUX0VWRU5ULFxuICAgICAgICAgICAgZXZlbnQ6IHVzZXJFdmVudCxcbiAgICAgICAgICAgIHBheWxvYWQ6IHBhcnNlZFBheWxvYWQsXG4gICAgICAgIH07XG4gICAgICAgIC8vIE1ldGFkYXRhIGlzIG9wdGlvbmFsIGFuZCBhbHdheXMgSlNPTiBlbmNvZGVkXG4gICAgICAgIGlmIChtZXRhZGF0YVNpemUgPiAwKSB7XG4gICAgICAgICAgICBkYXRhWydtZXRhJ10gPSBKU09OLnBhcnNlKG1ldGFkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBqb2luX3JlZjogbnVsbCwgcmVmOiBudWxsLCB0b3BpYzogdG9waWMsIGV2ZW50OiB0aGlzLkJST0FEQ0FTVF9FVkVOVCwgcGF5bG9hZDogZGF0YSB9O1xuICAgIH1cbiAgICBfaXNBcnJheUJ1ZmZlcihidWZmZXIpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIgfHwgKChfYSA9IGJ1ZmZlciA9PT0gbnVsbCB8fCBidWZmZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJ1ZmZlci5jb25zdHJ1Y3RvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5hbWUpID09PSAnQXJyYXlCdWZmZXInO1xuICAgIH1cbiAgICBfcGljayhvYmosIGtleXMpIHtcbiAgICAgICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKG9iaikuZmlsdGVyKChba2V5XSkgPT4ga2V5cy5pbmNsdWRlcyhrZXkpKSk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VyaWFsaXplci5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/serializer.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/transformers.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/@supabase/realtime-js/dist/module/lib/transformers.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((__unused_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 */ PostgresTypes: () => (/* binding */ PostgresTypes),\n/* harmony export */ convertCell: () => (/* binding */ convertCell),\n/* harmony export */ convertChangeData: () => (/* binding */ convertChangeData),\n/* harmony export */ convertColumn: () => (/* binding */ convertColumn),\n/* harmony export */ httpEndpointURL: () => (/* binding */ httpEndpointURL),\n/* harmony export */ toArray: () => (/* binding */ toArray),\n/* harmony export */ toBoolean: () => (/* binding */ toBoolean),\n/* harmony export */ toJson: () => (/* binding */ toJson),\n/* harmony export */ toNumber: () => (/* binding */ toNumber),\n/* harmony export */ toTimestampString: () => (/* binding */ toTimestampString)\n/* harmony export */ });\n/**\n * Helpers to convert the change Payload into native JS types.\n */\n// Adapted from epgsql (src/epgsql_binary.erl), this module licensed under\n// 3-clause BSD found here: https://raw.githubusercontent.com/epgsql/epgsql/devel/LICENSE\nvar PostgresTypes;\n(function (PostgresTypes) {\n PostgresTypes[\"abstime\"] = \"abstime\";\n PostgresTypes[\"bool\"] = \"bool\";\n PostgresTypes[\"date\"] = \"date\";\n PostgresTypes[\"daterange\"] = \"daterange\";\n PostgresTypes[\"float4\"] = \"float4\";\n PostgresTypes[\"float8\"] = \"float8\";\n PostgresTypes[\"int2\"] = \"int2\";\n PostgresTypes[\"int4\"] = \"int4\";\n PostgresTypes[\"int4range\"] = \"int4range\";\n PostgresTypes[\"int8\"] = \"int8\";\n PostgresTypes[\"int8range\"] = \"int8range\";\n PostgresTypes[\"json\"] = \"json\";\n PostgresTypes[\"jsonb\"] = \"jsonb\";\n PostgresTypes[\"money\"] = \"money\";\n PostgresTypes[\"numeric\"] = \"numeric\";\n PostgresTypes[\"oid\"] = \"oid\";\n PostgresTypes[\"reltime\"] = \"reltime\";\n PostgresTypes[\"text\"] = \"text\";\n PostgresTypes[\"time\"] = \"time\";\n PostgresTypes[\"timestamp\"] = \"timestamp\";\n PostgresTypes[\"timestamptz\"] = \"timestamptz\";\n PostgresTypes[\"timetz\"] = \"timetz\";\n PostgresTypes[\"tsrange\"] = \"tsrange\";\n PostgresTypes[\"tstzrange\"] = \"tstzrange\";\n})(PostgresTypes || (PostgresTypes = {}));\n/**\n * Takes an array of columns and an object of string values then converts each string value\n * to its mapped type.\n *\n * @param {{name: String, type: String}[]} columns\n * @param {Object} record\n * @param {Object} options The map of various options that can be applied to the mapper\n * @param {Array} options.skipTypes The array of types that should not be converted\n *\n * @example convertChangeData([{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age:'33'}, {})\n * //=>{ first_name: 'Paul', age: 33 }\n */\nconst convertChangeData = (columns, record, options = {}) => {\n var _a;\n const skipTypes = (_a = options.skipTypes) !== null && _a !== void 0 ? _a : [];\n if (!record) {\n return {};\n }\n return Object.keys(record).reduce((acc, rec_key) => {\n acc[rec_key] = convertColumn(rec_key, columns, record, skipTypes);\n return acc;\n }, {});\n};\n/**\n * Converts the value of an individual column.\n *\n * @param {String} columnName The column that you want to convert\n * @param {{name: String, type: String}[]} columns All of the columns\n * @param {Object} record The map of string values\n * @param {Array} skipTypes An array of types that should not be converted\n * @return {object} Useless information\n *\n * @example convertColumn('age', [{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age: '33'}, [])\n * //=> 33\n * @example convertColumn('age', [{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age: '33'}, ['int4'])\n * //=> \"33\"\n */\nconst convertColumn = (columnName, columns, record, skipTypes) => {\n const column = columns.find((x) => x.name === columnName);\n const colType = column === null || column === void 0 ? void 0 : column.type;\n const value = record[columnName];\n if (colType && !skipTypes.includes(colType)) {\n return convertCell(colType, value);\n }\n return noop(value);\n};\n/**\n * If the value of the cell is `null`, returns null.\n * Otherwise converts the string value to the correct type.\n * @param {String} type A postgres column type\n * @param {String} value The cell value\n *\n * @example convertCell('bool', 't')\n * //=> true\n * @example convertCell('int8', '10')\n * //=> 10\n * @example convertCell('_int4', '{1,2,3,4}')\n * //=> [1,2,3,4]\n */\nconst convertCell = (type, value) => {\n // if data type is an array\n if (type.charAt(0) === '_') {\n const dataType = type.slice(1, type.length);\n return toArray(value, dataType);\n }\n // If not null, convert to correct type.\n switch (type) {\n case PostgresTypes.bool:\n return toBoolean(value);\n case PostgresTypes.float4:\n case PostgresTypes.float8:\n case PostgresTypes.int2:\n case PostgresTypes.int4:\n case PostgresTypes.int8:\n case PostgresTypes.numeric:\n case PostgresTypes.oid:\n return toNumber(value);\n case PostgresTypes.json:\n case PostgresTypes.jsonb:\n return toJson(value);\n case PostgresTypes.timestamp:\n return toTimestampString(value); // Format to be consistent with PostgREST\n case PostgresTypes.abstime: // To allow users to cast it based on Timezone\n case PostgresTypes.date: // To allow users to cast it based on Timezone\n case PostgresTypes.daterange:\n case PostgresTypes.int4range:\n case PostgresTypes.int8range:\n case PostgresTypes.money:\n case PostgresTypes.reltime: // To allow users to cast it based on Timezone\n case PostgresTypes.text:\n case PostgresTypes.time: // To allow users to cast it based on Timezone\n case PostgresTypes.timestamptz: // To allow users to cast it based on Timezone\n case PostgresTypes.timetz: // To allow users to cast it based on Timezone\n case PostgresTypes.tsrange:\n case PostgresTypes.tstzrange:\n return noop(value);\n default:\n // Return the value for remaining types\n return noop(value);\n }\n};\nconst noop = (value) => {\n return value;\n};\nconst toBoolean = (value) => {\n switch (value) {\n case 't':\n return true;\n case 'f':\n return false;\n default:\n return value;\n }\n};\nconst toNumber = (value) => {\n if (typeof value === 'string') {\n const parsedValue = parseFloat(value);\n if (!Number.isNaN(parsedValue)) {\n return parsedValue;\n }\n }\n return value;\n};\nconst toJson = (value) => {\n if (typeof value === 'string') {\n try {\n return JSON.parse(value);\n }\n catch (_a) {\n return value;\n }\n }\n return value;\n};\n/**\n * Converts a Postgres Array into a native JS array\n *\n * @example toArray('{}', 'int4')\n * //=> []\n * @example toArray('{\"[2021-01-01,2021-12-31)\",\"(2021-01-01,2021-12-32]\"}', 'daterange')\n * //=> ['[2021-01-01,2021-12-31)', '(2021-01-01,2021-12-32]']\n * @example toArray([1,2,3,4], 'int4')\n * //=> [1,2,3,4]\n */\nconst toArray = (value, type) => {\n if (typeof value !== 'string') {\n return value;\n }\n const lastIdx = value.length - 1;\n const closeBrace = value[lastIdx];\n const openBrace = value[0];\n // Confirm value is a Postgres array by checking curly brackets\n if (openBrace === '{' && closeBrace === '}') {\n let arr;\n const valTrim = value.slice(1, lastIdx);\n // TODO: find a better solution to separate Postgres array data\n try {\n arr = JSON.parse('[' + valTrim + ']');\n }\n catch (_) {\n // WARNING: splitting on comma does not cover all edge cases\n arr = valTrim ? valTrim.split(',') : [];\n }\n return arr.map((val) => convertCell(type, val));\n }\n return value;\n};\n/**\n * Fixes timestamp to be ISO-8601. Swaps the space between the date and time for a 'T'\n * See https://github.com/supabase/supabase/issues/18\n *\n * @example toTimestampString('2019-09-10 00:00:00')\n * //=> '2019-09-10T00:00:00'\n */\nconst toTimestampString = (value) => {\n if (typeof value === 'string') {\n return value.replace(' ', 'T');\n }\n return value;\n};\nconst httpEndpointURL = (socketUrl) => {\n const wsUrl = new URL(socketUrl);\n wsUrl.protocol = wsUrl.protocol.replace(/^ws/i, 'http');\n wsUrl.pathname = wsUrl.pathname\n .replace(/\\/+$/, '') // remove all trailing slashes\n .replace(/\\/socket\\/websocket$/i, '') // remove the socket/websocket path\n .replace(/\\/socket$/i, '') // remove the socket path\n .replace(/\\/websocket$/i, ''); // remove the websocket path\n if (wsUrl.pathname === '' || wsUrl.pathname === '/') {\n wsUrl.pathname = '/api/broadcast';\n }\n else {\n wsUrl.pathname = wsUrl.pathname + '/api/broadcast';\n }\n return wsUrl.href;\n};\n//# sourceMappingURL=transformers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvbGliL3RyYW5zZm9ybWVycy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHNDQUFzQztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksMkJBQTJCLElBQUk7QUFDM0MsV0FBVyxRQUFRO0FBQ25CLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEI7QUFDQSxnQ0FBZ0MsaUNBQWlDLEdBQUcsMEJBQTBCLElBQUksNkJBQTZCLElBQUk7QUFDbkksU0FBUztBQUNUO0FBQ08sd0RBQXdEO0FBQy9EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLLElBQUk7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixZQUFZLDJCQUEyQixJQUFJO0FBQzNDLFdBQVcsUUFBUTtBQUNuQixXQUFXLE9BQU87QUFDbEIsWUFBWSxRQUFRO0FBQ3BCO0FBQ0EsbUNBQW1DLGlDQUFpQyxHQUFHLDBCQUEwQixJQUFJLDhCQUE4QjtBQUNuSTtBQUNBLG1DQUFtQyxpQ0FBaUMsR0FBRywwQkFBMEIsSUFBSSw4QkFBOEI7QUFDbkk7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsUUFBUTtBQUNuQixXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1DQUFtQyxRQUFRO0FBQzNDO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZDQUE2QztBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVCQUF1QjtBQUN2QjtBQUNBLHNCQUFzQixvREFBb0Q7QUFDMUU7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLHNCQUFzQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QztBQUN2QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbW9kdWxlL2xpYi90cmFuc2Zvcm1lcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBIZWxwZXJzIHRvIGNvbnZlcnQgdGhlIGNoYW5nZSBQYXlsb2FkIGludG8gbmF0aXZlIEpTIHR5cGVzLlxuICovXG4vLyBBZGFwdGVkIGZyb20gZXBnc3FsIChzcmMvZXBnc3FsX2JpbmFyeS5lcmwpLCB0aGlzIG1vZHVsZSBsaWNlbnNlZCB1bmRlclxuLy8gMy1jbGF1c2UgQlNEIGZvdW5kIGhlcmU6IGh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9lcGdzcWwvZXBnc3FsL2RldmVsL0xJQ0VOU0VcbmV4cG9ydCB2YXIgUG9zdGdyZXNUeXBlcztcbihmdW5jdGlvbiAoUG9zdGdyZXNUeXBlcykge1xuICAgIFBvc3RncmVzVHlwZXNbXCJhYnN0aW1lXCJdID0gXCJhYnN0aW1lXCI7XG4gICAgUG9zdGdyZXNUeXBlc1tcImJvb2xcIl0gPSBcImJvb2xcIjtcbiAgICBQb3N0Z3Jlc1R5cGVzW1wiZGF0ZVwiXSA9IFwiZGF0ZVwiO1xuICAgIFBvc3RncmVzVHlwZXNbXCJkYXRlcmFuZ2VcIl0gPSBcImRhdGVyYW5nZVwiO1xuICAgIFBvc3RncmVzVHlwZXNbXCJmbG9hdDRcIl0gPSBcImZsb2F0NFwiO1xuICAgIFBvc3RncmVzVHlwZXNbXCJmbG9hdDhcIl0gPSBcImZsb2F0OFwiO1xuICAgIFBvc3RncmVzVHlwZXNbXCJpbnQyXCJdID0gXCJpbnQyXCI7XG4gICAgUG9zdGdyZXNUeXBlc1tcImludDRcIl0gPSBcImludDRcIjtcbiAgICBQb3N0Z3Jlc1R5cGVzW1wiaW50NHJhbmdlXCJdID0gXCJpbnQ0cmFuZ2VcIjtcbiAgICBQb3N0Z3Jlc1R5cGVzW1wiaW50OFwiXSA9IFwiaW50OFwiO1xuICAgIFBvc3RncmVzVHlwZXNbXCJpbnQ4cmFuZ2VcIl0gPSBcImludDhyYW5nZVwiO1xuICAgIFBvc3RncmVzVHlwZXNbXCJqc29uXCJdID0gXCJqc29uXCI7XG4gICAgUG9zdGdyZXNUeXBlc1tcImpzb25iXCJdID0gXCJqc29uYlwiO1xuICAgIFBvc3RncmVzVHlwZXNbXCJtb25leVwiXSA9IFwibW9uZXlcIjtcbiAgICBQb3N0Z3Jlc1R5cGVzW1wibnVtZXJpY1wiXSA9IFwibnVtZXJpY1wiO1xuICAgIFBvc3RncmVzVHlwZXNbXCJvaWRcIl0gPSBcIm9pZFwiO1xuICAgIFBvc3RncmVzVHlwZXNbXCJyZWx0aW1lXCJdID0gXCJyZWx0aW1lXCI7XG4gICAgUG9zdGdyZXNUeXBlc1tcInRleHRcIl0gPSBcInRleHRcIjtcbiAgICBQb3N0Z3Jlc1R5cGVzW1widGltZVwiXSA9IFwidGltZVwiO1xuICAgIFBvc3RncmVzVHlwZXNbXCJ0aW1lc3RhbXBcIl0gPSBcInRpbWVzdGFtcFwiO1xuICAgIFBvc3RncmVzVHlwZXNbXCJ0aW1lc3RhbXB0elwiXSA9IFwidGltZXN0YW1wdHpcIjtcbiAgICBQb3N0Z3Jlc1R5cGVzW1widGltZXR6XCJdID0gXCJ0aW1ldHpcIjtcbiAgICBQb3N0Z3Jlc1R5cGVzW1widHNyYW5nZVwiXSA9IFwidHNyYW5nZVwiO1xuICAgIFBvc3RncmVzVHlwZXNbXCJ0c3R6cmFuZ2VcIl0gPSBcInRzdHpyYW5nZVwiO1xufSkoUG9zdGdyZXNUeXBlcyB8fCAoUG9zdGdyZXNUeXBlcyA9IHt9KSk7XG4vKipcbiAqIFRha2VzIGFuIGFycmF5IG9mIGNvbHVtbnMgYW5kIGFuIG9iamVjdCBvZiBzdHJpbmcgdmFsdWVzIHRoZW4gY29udmVydHMgZWFjaCBzdHJpbmcgdmFsdWVcbiAqIHRvIGl0cyBtYXBwZWQgdHlwZS5cbiAqXG4gKiBAcGFyYW0ge3tuYW1lOiBTdHJpbmcsIHR5cGU6IFN0cmluZ31bXX0gY29sdW1uc1xuICogQHBhcmFtIHtPYmplY3R9IHJlY29yZFxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgVGhlIG1hcCBvZiB2YXJpb3VzIG9wdGlvbnMgdGhhdCBjYW4gYmUgYXBwbGllZCB0byB0aGUgbWFwcGVyXG4gKiBAcGFyYW0ge0FycmF5fSBvcHRpb25zLnNraXBUeXBlcyBUaGUgYXJyYXkgb2YgdHlwZXMgdGhhdCBzaG91bGQgbm90IGJlIGNvbnZlcnRlZFxuICpcbiAqIEBleGFtcGxlIGNvbnZlcnRDaGFuZ2VEYXRhKFt7bmFtZTogJ2ZpcnN0X25hbWUnLCB0eXBlOiAndGV4dCd9LCB7bmFtZTogJ2FnZScsIHR5cGU6ICdpbnQ0J31dLCB7Zmlyc3RfbmFtZTogJ1BhdWwnLCBhZ2U6JzMzJ30sIHt9KVxuICogLy89PnsgZmlyc3RfbmFtZTogJ1BhdWwnLCBhZ2U6IDMzIH1cbiAqL1xuZXhwb3J0IGNvbnN0IGNvbnZlcnRDaGFuZ2VEYXRhID0gKGNvbHVtbnMsIHJlY29yZCwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHNraXBUeXBlcyA9IChfYSA9IG9wdGlvbnMuc2tpcFR5cGVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXTtcbiAgICBpZiAoIXJlY29yZCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHJldHVybiBPYmplY3Qua2V5cyhyZWNvcmQpLnJlZHVjZSgoYWNjLCByZWNfa2V5KSA9PiB7XG4gICAgICAgIGFjY1tyZWNfa2V5XSA9IGNvbnZlcnRDb2x1bW4ocmVjX2tleSwgY29sdW1ucywgcmVjb3JkLCBza2lwVHlwZXMpO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbn07XG4vKipcbiAqIENvbnZlcnRzIHRoZSB2YWx1ZSBvZiBhbiBpbmRpdmlkdWFsIGNvbHVtbi5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gY29sdW1uTmFtZSBUaGUgY29sdW1uIHRoYXQgeW91IHdhbnQgdG8gY29udmVydFxuICogQHBhcmFtIHt7bmFtZTogU3RyaW5nLCB0eXBlOiBTdHJpbmd9W119IGNvbHVtbnMgQWxsIG9mIHRoZSBjb2x1bW5zXG4gKiBAcGFyYW0ge09iamVjdH0gcmVjb3JkIFRoZSBtYXAgb2Ygc3RyaW5nIHZhbHVlc1xuICogQHBhcmFtIHtBcnJheX0gc2tpcFR5cGVzIEFuIGFycmF5IG9mIHR5cGVzIHRoYXQgc2hvdWxkIG5vdCBiZSBjb252ZXJ0ZWRcbiAqIEByZXR1cm4ge29iamVjdH0gVXNlbGVzcyBpbmZvcm1hdGlvblxuICpcbiAqIEBleGFtcGxlIGNvbnZlcnRDb2x1bW4oJ2FnZScsIFt7bmFtZTogJ2ZpcnN0X25hbWUnLCB0eXBlOiAndGV4dCd9LCB7bmFtZTogJ2FnZScsIHR5cGU6ICdpbnQ0J31dLCB7Zmlyc3RfbmFtZTogJ1BhdWwnLCBhZ2U6ICczMyd9LCBbXSlcbiAqIC8vPT4gMzNcbiAqIEBleGFtcGxlIGNvbnZlcnRDb2x1bW4oJ2FnZScsIFt7bmFtZTogJ2ZpcnN0X25hbWUnLCB0eXBlOiAndGV4dCd9LCB7bmFtZTogJ2FnZScsIHR5cGU6ICdpbnQ0J31dLCB7Zmlyc3RfbmFtZTogJ1BhdWwnLCBhZ2U6ICczMyd9LCBbJ2ludDQnXSlcbiAqIC8vPT4gXCIzM1wiXG4gKi9cbmV4cG9ydCBjb25zdCBjb252ZXJ0Q29sdW1uID0gKGNvbHVtbk5hbWUsIGNvbHVtbnMsIHJlY29yZCwgc2tpcFR5cGVzKSA9PiB7XG4gICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKCh4KSA9PiB4Lm5hbWUgPT09IGNvbHVtbk5hbWUpO1xuICAgIGNvbnN0IGNvbFR5cGUgPSBjb2x1bW4gPT09IG51bGwgfHwgY29sdW1uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb2x1bW4udHlwZTtcbiAgICBjb25zdCB2YWx1ZSA9IHJlY29yZFtjb2x1bW5OYW1lXTtcbiAgICBpZiAoY29sVHlwZSAmJiAhc2tpcFR5cGVzLmluY2x1ZGVzKGNvbFR5cGUpKSB7XG4gICAgICAgIHJldHVybiBjb252ZXJ0Q2VsbChjb2xUeXBlLCB2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBub29wKHZhbHVlKTtcbn07XG4vKipcbiAqIElmIHRoZSB2YWx1ZSBvZiB0aGUgY2VsbCBpcyBgbnVsbGAsIHJldHVybnMgbnVsbC5cbiAqIE90aGVyd2lzZSBjb252ZXJ0cyB0aGUgc3RyaW5nIHZhbHVlIHRvIHRoZSBjb3JyZWN0IHR5cGUuXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBBIHBvc3RncmVzIGNvbHVtbiB0eXBlXG4gKiBAcGFyYW0ge1N0cmluZ30gdmFsdWUgVGhlIGNlbGwgdmFsdWVcbiAqXG4gKiBAZXhhbXBsZSBjb252ZXJ0Q2VsbCgnYm9vbCcsICd0JylcbiAqIC8vPT4gdHJ1ZVxuICogQGV4YW1wbGUgY29udmVydENlbGwoJ2ludDgnLCAnMTAnKVxuICogLy89PiAxMFxuICogQGV4YW1wbGUgY29udmVydENlbGwoJ19pbnQ0JywgJ3sxLDIsMyw0fScpXG4gKiAvLz0+IFsxLDIsMyw0XVxuICovXG5leHBvcnQgY29uc3QgY29udmVydENlbGwgPSAodHlwZSwgdmFsdWUpID0+IHtcbiAgICAvLyBpZiBkYXRhIHR5cGUgaXMgYW4gYXJyYXlcbiAgICBpZiAodHlwZS5jaGFyQXQoMCkgPT09ICdfJykge1xuICAgICAgICBjb25zdCBkYXRhVHlwZSA9IHR5cGUuc2xpY2UoMSwgdHlwZS5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gdG9BcnJheSh2YWx1ZSwgZGF0YVR5cGUpO1xuICAgIH1cbiAgICAvLyBJZiBub3QgbnVsbCwgY29udmVydCB0byBjb3JyZWN0IHR5cGUuXG4gICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy5ib29sOlxuICAgICAgICAgICAgcmV0dXJuIHRvQm9vbGVhbih2YWx1ZSk7XG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy5mbG9hdDQ6XG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy5mbG9hdDg6XG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy5pbnQyOlxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMuaW50NDpcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLmludDg6XG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy5udW1lcmljOlxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMub2lkOlxuICAgICAgICAgICAgcmV0dXJuIHRvTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLmpzb246XG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy5qc29uYjpcbiAgICAgICAgICAgIHJldHVybiB0b0pzb24odmFsdWUpO1xuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMudGltZXN0YW1wOlxuICAgICAgICAgICAgcmV0dXJuIHRvVGltZXN0YW1wU3RyaW5nKHZhbHVlKTsgLy8gRm9ybWF0IHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBQb3N0Z1JFU1RcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLmFic3RpbWU6IC8vIFRvIGFsbG93IHVzZXJzIHRvIGNhc3QgaXQgYmFzZWQgb24gVGltZXpvbmVcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLmRhdGU6IC8vIFRvIGFsbG93IHVzZXJzIHRvIGNhc3QgaXQgYmFzZWQgb24gVGltZXpvbmVcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLmRhdGVyYW5nZTpcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLmludDRyYW5nZTpcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLmludDhyYW5nZTpcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLm1vbmV5OlxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMucmVsdGltZTogLy8gVG8gYWxsb3cgdXNlcnMgdG8gY2FzdCBpdCBiYXNlZCBvbiBUaW1lem9uZVxuICAgICAgICBjYXNlIFBvc3RncmVzVHlwZXMudGV4dDpcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLnRpbWU6IC8vIFRvIGFsbG93IHVzZXJzIHRvIGNhc3QgaXQgYmFzZWQgb24gVGltZXpvbmVcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLnRpbWVzdGFtcHR6OiAvLyBUbyBhbGxvdyB1c2VycyB0byBjYXN0IGl0IGJhc2VkIG9uIFRpbWV6b25lXG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy50aW1ldHo6IC8vIFRvIGFsbG93IHVzZXJzIHRvIGNhc3QgaXQgYmFzZWQgb24gVGltZXpvbmVcbiAgICAgICAgY2FzZSBQb3N0Z3Jlc1R5cGVzLnRzcmFuZ2U6XG4gICAgICAgIGNhc2UgUG9zdGdyZXNUeXBlcy50c3R6cmFuZ2U6XG4gICAgICAgICAgICByZXR1cm4gbm9vcCh2YWx1ZSk7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBSZXR1cm4gdGhlIHZhbHVlIGZvciByZW1haW5pbmcgdHlwZXNcbiAgICAgICAgICAgIHJldHVybiBub29wKHZhbHVlKTtcbiAgICB9XG59O1xuY29uc3Qgbm9vcCA9ICh2YWx1ZSkgPT4ge1xuICAgIHJldHVybiB2YWx1ZTtcbn07XG5leHBvcnQgY29uc3QgdG9Cb29sZWFuID0gKHZhbHVlKSA9PiB7XG4gICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlICd0JzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjYXNlICdmJzpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHRvTnVtYmVyID0gKHZhbHVlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOYU4ocGFyc2VkVmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VkVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcbmV4cG9ydCBjb25zdCB0b0pzb24gPSAodmFsdWUpID0+IHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn07XG4vKipcbiAqIENvbnZlcnRzIGEgUG9zdGdyZXMgQXJyYXkgaW50byBhIG5hdGl2ZSBKUyBhcnJheVxuICpcbiAqIEBleGFtcGxlIHRvQXJyYXkoJ3t9JywgJ2ludDQnKVxuICogLy89PiBbXVxuICogQGV4YW1wbGUgdG9BcnJheSgne1wiWzIwMjEtMDEtMDEsMjAyMS0xMi0zMSlcIixcIigyMDIxLTAxLTAxLDIwMjEtMTItMzJdXCJ9JywgJ2RhdGVyYW5nZScpXG4gKiAvLz0+IFsnWzIwMjEtMDEtMDEsMjAyMS0xMi0zMSknLCAnKDIwMjEtMDEtMDEsMjAyMS0xMi0zMl0nXVxuICogQGV4YW1wbGUgdG9BcnJheShbMSwyLDMsNF0sICdpbnQ0JylcbiAqIC8vPT4gWzEsMiwzLDRdXG4gKi9cbmV4cG9ydCBjb25zdCB0b0FycmF5ID0gKHZhbHVlLCB0eXBlKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBsYXN0SWR4ID0gdmFsdWUubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBjbG9zZUJyYWNlID0gdmFsdWVbbGFzdElkeF07XG4gICAgY29uc3Qgb3BlbkJyYWNlID0gdmFsdWVbMF07XG4gICAgLy8gQ29uZmlybSB2YWx1ZSBpcyBhIFBvc3RncmVzIGFycmF5IGJ5IGNoZWNraW5nIGN1cmx5IGJyYWNrZXRzXG4gICAgaWYgKG9wZW5CcmFjZSA9PT0gJ3snICYmIGNsb3NlQnJhY2UgPT09ICd9Jykge1xuICAgICAgICBsZXQgYXJyO1xuICAgICAgICBjb25zdCB2YWxUcmltID0gdmFsdWUuc2xpY2UoMSwgbGFzdElkeCk7XG4gICAgICAgIC8vIFRPRE86IGZpbmQgYSBiZXR0ZXIgc29sdXRpb24gdG8gc2VwYXJhdGUgUG9zdGdyZXMgYXJyYXkgZGF0YVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgYXJyID0gSlNPTi5wYXJzZSgnWycgKyB2YWxUcmltICsgJ10nKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoXykge1xuICAgICAgICAgICAgLy8gV0FSTklORzogc3BsaXR0aW5nIG9uIGNvbW1hIGRvZXMgbm90IGNvdmVyIGFsbCBlZGdlIGNhc2VzXG4gICAgICAgICAgICBhcnIgPSB2YWxUcmltID8gdmFsVHJpbS5zcGxpdCgnLCcpIDogW107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFyci5tYXAoKHZhbCkgPT4gY29udmVydENlbGwodHlwZSwgdmFsKSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZTtcbn07XG4vKipcbiAqIEZpeGVzIHRpbWVzdGFtcCB0byBiZSBJU08tODYwMS4gU3dhcHMgdGhlIHNwYWNlIGJldHdlZW4gdGhlIGRhdGUgYW5kIHRpbWUgZm9yIGEgJ1QnXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3N1cGFiYXNlL3N1cGFiYXNlL2lzc3Vlcy8xOFxuICpcbiAqIEBleGFtcGxlIHRvVGltZXN0YW1wU3RyaW5nKCcyMDE5LTA5LTEwIDAwOjAwOjAwJylcbiAqIC8vPT4gJzIwMTktMDktMTBUMDA6MDA6MDAnXG4gKi9cbmV4cG9ydCBjb25zdCB0b1RpbWVzdGFtcFN0cmluZyA9ICh2YWx1ZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKCcgJywgJ1QnKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xufTtcbmV4cG9ydCBjb25zdCBodHRwRW5kcG9pbnRVUkwgPSAoc29ja2V0VXJsKSA9PiB7XG4gICAgY29uc3Qgd3NVcmwgPSBuZXcgVVJMKHNvY2tldFVybCk7XG4gICAgd3NVcmwucHJvdG9jb2wgPSB3c1VybC5wcm90b2NvbC5yZXBsYWNlKC9ed3MvaSwgJ2h0dHAnKTtcbiAgICB3c1VybC5wYXRobmFtZSA9IHdzVXJsLnBhdGhuYW1lXG4gICAgICAgIC5yZXBsYWNlKC9cXC8rJC8sICcnKSAvLyByZW1vdmUgYWxsIHRyYWlsaW5nIHNsYXNoZXNcbiAgICAgICAgLnJlcGxhY2UoL1xcL3NvY2tldFxcL3dlYnNvY2tldCQvaSwgJycpIC8vIHJlbW92ZSB0aGUgc29ja2V0L3dlYnNvY2tldCBwYXRoXG4gICAgICAgIC5yZXBsYWNlKC9cXC9zb2NrZXQkL2ksICcnKSAvLyByZW1vdmUgdGhlIHNvY2tldCBwYXRoXG4gICAgICAgIC5yZXBsYWNlKC9cXC93ZWJzb2NrZXQkL2ksICcnKTsgLy8gcmVtb3ZlIHRoZSB3ZWJzb2NrZXQgcGF0aFxuICAgIGlmICh3c1VybC5wYXRobmFtZSA9PT0gJycgfHwgd3NVcmwucGF0aG5hbWUgPT09ICcvJykge1xuICAgICAgICB3c1VybC5wYXRobmFtZSA9ICcvYXBpL2Jyb2FkY2FzdCc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB3c1VybC5wYXRobmFtZSA9IHdzVXJsLnBhdGhuYW1lICsgJy9hcGkvYnJvYWRjYXN0JztcbiAgICB9XG4gICAgcmV0dXJuIHdzVXJsLmhyZWY7XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHJhbnNmb3JtZXJzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/transformers.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/version.js":
|
||
/*!***********************************************************************!*\
|
||
!*** ./node_modules/@supabase/realtime-js/dist/module/lib/version.js ***!
|
||
\***********************************************************************/
|
||
/***/ ((__unused_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 */ version: () => (/* binding */ version)\n/* harmony export */ });\n// Generated automatically during releases by scripts/update-version-files.ts\n// This file provides runtime access to the package version for:\n// - HTTP request headers (e.g., X-Client-Info header for API requests)\n// - Debugging and support (identifying which version is running)\n// - Telemetry and logging (version reporting in errors/analytics)\n// - Ensuring build artifacts match the published package version\nconst version = '2.105.3';\n//# sourceMappingURL=version.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvbGliL3ZlcnNpb24uanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbW9kdWxlL2xpYi92ZXJzaW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGR1cmluZyByZWxlYXNlcyBieSBzY3JpcHRzL3VwZGF0ZS12ZXJzaW9uLWZpbGVzLnRzXG4vLyBUaGlzIGZpbGUgcHJvdmlkZXMgcnVudGltZSBhY2Nlc3MgdG8gdGhlIHBhY2thZ2UgdmVyc2lvbiBmb3I6XG4vLyAtIEhUVFAgcmVxdWVzdCBoZWFkZXJzIChlLmcuLCBYLUNsaWVudC1JbmZvIGhlYWRlciBmb3IgQVBJIHJlcXVlc3RzKVxuLy8gLSBEZWJ1Z2dpbmcgYW5kIHN1cHBvcnQgKGlkZW50aWZ5aW5nIHdoaWNoIHZlcnNpb24gaXMgcnVubmluZylcbi8vIC0gVGVsZW1ldHJ5IGFuZCBsb2dnaW5nICh2ZXJzaW9uIHJlcG9ydGluZyBpbiBlcnJvcnMvYW5hbHl0aWNzKVxuLy8gLSBFbnN1cmluZyBidWlsZCBhcnRpZmFjdHMgbWF0Y2ggdGhlIHB1Ymxpc2hlZCBwYWNrYWdlIHZlcnNpb25cbmV4cG9ydCBjb25zdCB2ZXJzaW9uID0gJzIuMTA1LjMnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dmVyc2lvbi5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/version.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/websocket-factory.js":
|
||
/*!*********************************************************************************!*\
|
||
!*** ./node_modules/@supabase/realtime-js/dist/module/lib/websocket-factory.js ***!
|
||
\*********************************************************************************/
|
||
/***/ ((__unused_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 */ WebSocketFactory: () => (/* binding */ WebSocketFactory),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/**\n * Utilities for creating WebSocket instances across runtimes.\n */\nclass WebSocketFactory {\n /**\n * Static-only utility – prevent instantiation.\n */\n constructor() { }\n static detectEnvironment() {\n var _a;\n if (typeof WebSocket !== 'undefined') {\n return { type: 'native', wsConstructor: WebSocket };\n }\n const gt = globalThis;\n if (typeof globalThis !== 'undefined' && typeof gt.WebSocket !== 'undefined') {\n return { type: 'native', wsConstructor: gt.WebSocket };\n }\n const gl = typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g : undefined;\n if (gl && typeof gl.WebSocket !== 'undefined') {\n return { type: 'native', wsConstructor: gl.WebSocket };\n }\n if (typeof globalThis !== 'undefined' &&\n typeof gt.WebSocketPair !== 'undefined' &&\n typeof globalThis.WebSocket === 'undefined') {\n return {\n type: 'cloudflare',\n error: 'Cloudflare Workers detected. WebSocket clients are not supported in Cloudflare Workers.',\n workaround: 'Use Cloudflare Workers WebSocket API for server-side WebSocket handling, or deploy to a different runtime.',\n };\n }\n if ((typeof globalThis !== 'undefined' && gt.EdgeRuntime) ||\n (typeof navigator !== 'undefined' && ((_a = navigator.userAgent) === null || _a === void 0 ? void 0 : _a.includes('Vercel-Edge')))) {\n return {\n type: 'unsupported',\n error: 'Edge runtime detected (Vercel Edge/Netlify Edge). WebSockets are not supported in edge functions.',\n workaround: 'Use serverless functions or a different deployment target for WebSocket functionality.',\n };\n }\n // Use dynamic property access to avoid Next.js Edge Runtime static analysis warnings\n const _process = globalThis['process'];\n if (_process) {\n const processVersions = _process['versions'];\n if (processVersions && processVersions['node']) {\n // Remove 'v' prefix if present and parse the major version\n const versionString = processVersions['node'];\n const nodeVersion = parseInt(versionString.replace(/^v/, '').split('.')[0]);\n // Node.js 22+ should have native WebSocket\n if (nodeVersion >= 22) {\n // Check if native WebSocket is available (should be in Node.js 22+)\n if (typeof globalThis.WebSocket !== 'undefined') {\n return { type: 'native', wsConstructor: globalThis.WebSocket };\n }\n // If not available, user needs to provide it\n return {\n type: 'unsupported',\n error: `Node.js ${nodeVersion} detected but native WebSocket not found.`,\n workaround: 'Provide a WebSocket implementation via the transport option.',\n };\n }\n // Node.js < 22 doesn't have native WebSocket\n return {\n type: 'unsupported',\n error: `Node.js ${nodeVersion} detected without native WebSocket support.`,\n workaround: 'For Node.js < 22, install \"ws\" package and provide it via the transport option:\\n' +\n 'import ws from \"ws\"\\n' +\n 'new RealtimeClient(url, { transport: ws })',\n };\n }\n }\n return {\n type: 'unsupported',\n error: 'Unknown JavaScript runtime without WebSocket support.',\n workaround: \"Ensure you're running in a supported environment (browser, Node.js, Deno) or provide a custom WebSocket implementation.\",\n };\n }\n /**\n * Returns the best available WebSocket constructor for the current runtime.\n *\n * @category Realtime\n *\n * @example Example with error handling\n * ```ts\n * try {\n * const WS = WebSocketFactory.getWebSocketConstructor()\n * const socket = new WS('wss://example.com/socket')\n * } catch (error) {\n * console.error('WebSocket not available in this environment.', error)\n * }\n * ```\n */\n static getWebSocketConstructor() {\n const env = this.detectEnvironment();\n if (env.wsConstructor) {\n return env.wsConstructor;\n }\n let errorMessage = env.error || 'WebSocket not supported in this environment.';\n if (env.workaround) {\n errorMessage += `\\n\\nSuggested solution: ${env.workaround}`;\n }\n throw new Error(errorMessage);\n }\n /**\n * Detects whether the runtime can establish WebSocket connections.\n *\n * @category Realtime\n *\n * @example Example in a Node.js script\n * ```ts\n * if (!WebSocketFactory.isWebSocketSupported()) {\n * console.error('WebSockets are required for this script.')\n * process.exitCode = 1\n * }\n * ```\n */\n static isWebSocketSupported() {\n try {\n const env = this.detectEnvironment();\n return env.type === 'native' || env.type === 'ws';\n }\n catch (_a) {\n return false;\n }\n }\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (WebSocketFactory);\n//# sourceMappingURL=websocket-factory.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvbGliL3dlYnNvY2tldC1mYWN0b3J5LmpzIiwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSwwQkFBMEIscUJBQU0sbUJBQW1CLHFCQUFNO0FBQ3pEO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlDQUFpQztBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxhQUFhO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxhQUFhO0FBQ25EO0FBQ0E7QUFDQSxtREFBbUQsZUFBZTtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELGVBQWU7QUFDdEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlFQUFlLGdCQUFnQixFQUFDO0FBQ2hDIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21vZHVsZS9saWIvd2Vic29ja2V0LWZhY3RvcnkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVdGlsaXRpZXMgZm9yIGNyZWF0aW5nIFdlYlNvY2tldCBpbnN0YW5jZXMgYWNyb3NzIHJ1bnRpbWVzLlxuICovXG5leHBvcnQgY2xhc3MgV2ViU29ja2V0RmFjdG9yeSB7XG4gICAgLyoqXG4gICAgICogU3RhdGljLW9ubHkgdXRpbGl0eSDigJMgcHJldmVudCBpbnN0YW50aWF0aW9uLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG4gICAgc3RhdGljIGRldGVjdEVudmlyb25tZW50KCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0eXBlb2YgV2ViU29ja2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogJ25hdGl2ZScsIHdzQ29uc3RydWN0b3I6IFdlYlNvY2tldCB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGd0ID0gZ2xvYmFsVGhpcztcbiAgICAgICAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgZ3QuV2ViU29ja2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogJ25hdGl2ZScsIHdzQ29uc3RydWN0b3I6IGd0LldlYlNvY2tldCB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdsID0gdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWwgOiB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChnbCAmJiB0eXBlb2YgZ2wuV2ViU29ja2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogJ25hdGl2ZScsIHdzQ29uc3RydWN0b3I6IGdsLldlYlNvY2tldCB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIHR5cGVvZiBndC5XZWJTb2NrZXRQYWlyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgdHlwZW9mIGdsb2JhbFRoaXMuV2ViU29ja2V0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2xvdWRmbGFyZScsXG4gICAgICAgICAgICAgICAgZXJyb3I6ICdDbG91ZGZsYXJlIFdvcmtlcnMgZGV0ZWN0ZWQuIFdlYlNvY2tldCBjbGllbnRzIGFyZSBub3Qgc3VwcG9ydGVkIGluIENsb3VkZmxhcmUgV29ya2Vycy4nLFxuICAgICAgICAgICAgICAgIHdvcmthcm91bmQ6ICdVc2UgQ2xvdWRmbGFyZSBXb3JrZXJzIFdlYlNvY2tldCBBUEkgZm9yIHNlcnZlci1zaWRlIFdlYlNvY2tldCBoYW5kbGluZywgb3IgZGVwbG95IHRvIGEgZGlmZmVyZW50IHJ1bnRpbWUuJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgJiYgZ3QuRWRnZVJ1bnRpbWUpIHx8XG4gICAgICAgICAgICAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pbmNsdWRlcygnVmVyY2VsLUVkZ2UnKSkpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHR5cGU6ICd1bnN1cHBvcnRlZCcsXG4gICAgICAgICAgICAgICAgZXJyb3I6ICdFZGdlIHJ1bnRpbWUgZGV0ZWN0ZWQgKFZlcmNlbCBFZGdlL05ldGxpZnkgRWRnZSkuIFdlYlNvY2tldHMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gZWRnZSBmdW5jdGlvbnMuJyxcbiAgICAgICAgICAgICAgICB3b3JrYXJvdW5kOiAnVXNlIHNlcnZlcmxlc3MgZnVuY3Rpb25zIG9yIGEgZGlmZmVyZW50IGRlcGxveW1lbnQgdGFyZ2V0IGZvciBXZWJTb2NrZXQgZnVuY3Rpb25hbGl0eS4nLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICAvLyBVc2UgZHluYW1pYyBwcm9wZXJ0eSBhY2Nlc3MgdG8gYXZvaWQgTmV4dC5qcyBFZGdlIFJ1bnRpbWUgc3RhdGljIGFuYWx5c2lzIHdhcm5pbmdzXG4gICAgICAgIGNvbnN0IF9wcm9jZXNzID0gZ2xvYmFsVGhpc1sncHJvY2VzcyddO1xuICAgICAgICBpZiAoX3Byb2Nlc3MpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NWZXJzaW9ucyA9IF9wcm9jZXNzWyd2ZXJzaW9ucyddO1xuICAgICAgICAgICAgaWYgKHByb2Nlc3NWZXJzaW9ucyAmJiBwcm9jZXNzVmVyc2lvbnNbJ25vZGUnXSkge1xuICAgICAgICAgICAgICAgIC8vIFJlbW92ZSAndicgcHJlZml4IGlmIHByZXNlbnQgYW5kIHBhcnNlIHRoZSBtYWpvciB2ZXJzaW9uXG4gICAgICAgICAgICAgICAgY29uc3QgdmVyc2lvblN0cmluZyA9IHByb2Nlc3NWZXJzaW9uc1snbm9kZSddO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVWZXJzaW9uID0gcGFyc2VJbnQodmVyc2lvblN0cmluZy5yZXBsYWNlKC9edi8sICcnKS5zcGxpdCgnLicpWzBdKTtcbiAgICAgICAgICAgICAgICAvLyBOb2RlLmpzIDIyKyBzaG91bGQgaGF2ZSBuYXRpdmUgV2ViU29ja2V0XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVWZXJzaW9uID49IDIyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGlmIG5hdGl2ZSBXZWJTb2NrZXQgaXMgYXZhaWxhYmxlIChzaG91bGQgYmUgaW4gTm9kZS5qcyAyMispXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcy5XZWJTb2NrZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyB0eXBlOiAnbmF0aXZlJywgd3NDb25zdHJ1Y3RvcjogZ2xvYmFsVGhpcy5XZWJTb2NrZXQgfTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBJZiBub3QgYXZhaWxhYmxlLCB1c2VyIG5lZWRzIHRvIHByb3ZpZGUgaXRcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICd1bnN1cHBvcnRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogYE5vZGUuanMgJHtub2RlVmVyc2lvbn0gZGV0ZWN0ZWQgYnV0IG5hdGl2ZSBXZWJTb2NrZXQgbm90IGZvdW5kLmAsXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JrYXJvdW5kOiAnUHJvdmlkZSBhIFdlYlNvY2tldCBpbXBsZW1lbnRhdGlvbiB2aWEgdGhlIHRyYW5zcG9ydCBvcHRpb24uJyxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm9kZS5qcyA8IDIyIGRvZXNuJ3QgaGF2ZSBuYXRpdmUgV2ViU29ja2V0XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3Vuc3VwcG9ydGVkJyxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGBOb2RlLmpzICR7bm9kZVZlcnNpb259IGRldGVjdGVkIHdpdGhvdXQgbmF0aXZlIFdlYlNvY2tldCBzdXBwb3J0LmAsXG4gICAgICAgICAgICAgICAgICAgIHdvcmthcm91bmQ6ICdGb3IgTm9kZS5qcyA8IDIyLCBpbnN0YWxsIFwid3NcIiBwYWNrYWdlIGFuZCBwcm92aWRlIGl0IHZpYSB0aGUgdHJhbnNwb3J0IG9wdGlvbjpcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdpbXBvcnQgd3MgZnJvbSBcIndzXCJcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICduZXcgUmVhbHRpbWVDbGllbnQodXJsLCB7IHRyYW5zcG9ydDogd3MgfSknLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHR5cGU6ICd1bnN1cHBvcnRlZCcsXG4gICAgICAgICAgICBlcnJvcjogJ1Vua25vd24gSmF2YVNjcmlwdCBydW50aW1lIHdpdGhvdXQgV2ViU29ja2V0IHN1cHBvcnQuJyxcbiAgICAgICAgICAgIHdvcmthcm91bmQ6IFwiRW5zdXJlIHlvdSdyZSBydW5uaW5nIGluIGEgc3VwcG9ydGVkIGVudmlyb25tZW50IChicm93c2VyLCBOb2RlLmpzLCBEZW5vKSBvciBwcm92aWRlIGEgY3VzdG9tIFdlYlNvY2tldCBpbXBsZW1lbnRhdGlvbi5cIixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYmVzdCBhdmFpbGFibGUgV2ViU29ja2V0IGNvbnN0cnVjdG9yIGZvciB0aGUgY3VycmVudCBydW50aW1lLlxuICAgICAqXG4gICAgICogQGNhdGVnb3J5IFJlYWx0aW1lXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZSBFeGFtcGxlIHdpdGggZXJyb3IgaGFuZGxpbmdcbiAgICAgKiBgYGB0c1xuICAgICAqIHRyeSB7XG4gICAgICogICBjb25zdCBXUyA9IFdlYlNvY2tldEZhY3RvcnkuZ2V0V2ViU29ja2V0Q29uc3RydWN0b3IoKVxuICAgICAqICAgY29uc3Qgc29ja2V0ID0gbmV3IFdTKCd3c3M6Ly9leGFtcGxlLmNvbS9zb2NrZXQnKVxuICAgICAqIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICogICBjb25zb2xlLmVycm9yKCdXZWJTb2NrZXQgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50LicsIGVycm9yKVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzdGF0aWMgZ2V0V2ViU29ja2V0Q29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbnN0IGVudiA9IHRoaXMuZGV0ZWN0RW52aXJvbm1lbnQoKTtcbiAgICAgICAgaWYgKGVudi53c0NvbnN0cnVjdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gZW52LndzQ29uc3RydWN0b3I7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGVudi5lcnJvciB8fCAnV2ViU29ja2V0IG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBlbnZpcm9ubWVudC4nO1xuICAgICAgICBpZiAoZW52Lndvcmthcm91bmQpIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSArPSBgXFxuXFxuU3VnZ2VzdGVkIHNvbHV0aW9uOiAke2Vudi53b3JrYXJvdW5kfWA7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIERldGVjdHMgd2hldGhlciB0aGUgcnVudGltZSBjYW4gZXN0YWJsaXNoIFdlYlNvY2tldCBjb25uZWN0aW9ucy5cbiAgICAgKlxuICAgICAqIEBjYXRlZ29yeSBSZWFsdGltZVxuICAgICAqXG4gICAgICogQGV4YW1wbGUgRXhhbXBsZSBpbiBhIE5vZGUuanMgc2NyaXB0XG4gICAgICogYGBgdHNcbiAgICAgKiBpZiAoIVdlYlNvY2tldEZhY3RvcnkuaXNXZWJTb2NrZXRTdXBwb3J0ZWQoKSkge1xuICAgICAqICAgY29uc29sZS5lcnJvcignV2ViU29ja2V0cyBhcmUgcmVxdWlyZWQgZm9yIHRoaXMgc2NyaXB0LicpXG4gICAgICogICBwcm9jZXNzLmV4aXRDb2RlID0gMVxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBzdGF0aWMgaXNXZWJTb2NrZXRTdXBwb3J0ZWQoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbnYgPSB0aGlzLmRldGVjdEVudmlyb25tZW50KCk7XG4gICAgICAgICAgICByZXR1cm4gZW52LnR5cGUgPT09ICduYXRpdmUnIHx8IGVudi50eXBlID09PSAnd3MnO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGRlZmF1bHQgV2ViU29ja2V0RmFjdG9yeTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlYnNvY2tldC1mYWN0b3J5LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/websocket-factory.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/phoenix/channelAdapter.js":
|
||
/*!**********************************************************************************!*\
|
||
!*** ./node_modules/@supabase/realtime-js/dist/module/phoenix/channelAdapter.js ***!
|
||
\**********************************************************************************/
|
||
/***/ ((__unused_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 */ \"default\": () => (/* binding */ ChannelAdapter)\n/* harmony export */ });\n/* harmony import */ var _lib_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../lib/constants */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/constants.js\");\n\nclass ChannelAdapter {\n constructor(socket, topic, params) {\n const phoenixParams = phoenixChannelParams(params);\n this.channel = socket.getSocket().channel(topic, phoenixParams);\n this.socket = socket;\n }\n get state() {\n return this.channel.state;\n }\n set state(state) {\n this.channel.state = state;\n }\n get joinedOnce() {\n return this.channel.joinedOnce;\n }\n get joinPush() {\n return this.channel.joinPush;\n }\n get rejoinTimer() {\n return this.channel.rejoinTimer;\n }\n on(event, callback) {\n return this.channel.on(event, callback);\n }\n off(event, refNumber) {\n this.channel.off(event, refNumber);\n }\n subscribe(timeout) {\n return this.channel.join(timeout);\n }\n unsubscribe(timeout) {\n return this.channel.leave(timeout);\n }\n teardown() {\n this.channel.teardown();\n }\n onClose(callback) {\n this.channel.onClose(callback);\n }\n onError(callback) {\n return this.channel.onError(callback);\n }\n push(event, payload, timeout) {\n let push;\n try {\n push = this.channel.push(event, payload, timeout);\n }\n catch (error) {\n throw new Error(`tried to push '${event}' to '${this.channel.topic}' before joining. Use channel.subscribe() before pushing events`);\n }\n if (this.channel.pushBuffer.length > _lib_constants__WEBPACK_IMPORTED_MODULE_0__.MAX_PUSH_BUFFER_SIZE) {\n const removedPush = this.channel.pushBuffer.shift();\n removedPush.cancelTimeout();\n this.socket.log('channel', `discarded push due to buffer overflow: ${removedPush.event}`, removedPush.payload());\n }\n return push;\n }\n updateJoinPayload(payload) {\n const oldPayload = this.channel.joinPush.payload();\n this.channel.joinPush.payload = () => (Object.assign(Object.assign({}, oldPayload), payload));\n }\n canPush() {\n return this.socket.isConnected() && this.state === _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.joined;\n }\n isJoined() {\n return this.state === _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.joined;\n }\n isJoining() {\n return this.state === _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.joining;\n }\n isClosed() {\n return this.state === _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.closed;\n }\n isLeaving() {\n return this.state === _lib_constants__WEBPACK_IMPORTED_MODULE_0__.CHANNEL_STATES.leaving;\n }\n updateFilterBindings(filterBindings) {\n this.channel.filterBindings = filterBindings;\n }\n updatePayloadTransform(callback) {\n this.channel.onMessage = callback;\n }\n /**\n * @internal\n */\n getChannel() {\n return this.channel;\n }\n}\nfunction phoenixChannelParams(options) {\n return {\n config: Object.assign({\n broadcast: { ack: false, self: false },\n presence: { key: '', enabled: false },\n private: false,\n }, options.config),\n };\n}\n//# sourceMappingURL=channelAdapter.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvcGhvZW5peC9jaGFubmVsQWRhcHRlci5qcyIsIm1hcHBpbmdzIjoiOzs7OztBQUF3RTtBQUN6RDtBQUNmO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4Q0FBOEMsTUFBTSxRQUFRLG1CQUFtQjtBQUMvRTtBQUNBLDZDQUE2QyxnRUFBb0I7QUFDakU7QUFDQTtBQUNBLGlGQUFpRixrQkFBa0I7QUFDbkc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZFQUE2RTtBQUM3RTtBQUNBO0FBQ0EsMkRBQTJELDBEQUFjO0FBQ3pFO0FBQ0E7QUFDQSw4QkFBOEIsMERBQWM7QUFDNUM7QUFDQTtBQUNBLDhCQUE4QiwwREFBYztBQUM1QztBQUNBO0FBQ0EsOEJBQThCLDBEQUFjO0FBQzVDO0FBQ0E7QUFDQSw4QkFBOEIsMERBQWM7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5Qix5QkFBeUI7QUFDbEQsd0JBQXdCLHlCQUF5QjtBQUNqRDtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbW9kdWxlL3Bob2VuaXgvY2hhbm5lbEFkYXB0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ0hBTk5FTF9TVEFURVMsIE1BWF9QVVNIX0JVRkZFUl9TSVpFIH0gZnJvbSAnLi4vbGliL2NvbnN0YW50cyc7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsQWRhcHRlciB7XG4gICAgY29uc3RydWN0b3Ioc29ja2V0LCB0b3BpYywgcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHBob2VuaXhQYXJhbXMgPSBwaG9lbml4Q2hhbm5lbFBhcmFtcyhwYXJhbXMpO1xuICAgICAgICB0aGlzLmNoYW5uZWwgPSBzb2NrZXQuZ2V0U29ja2V0KCkuY2hhbm5lbCh0b3BpYywgcGhvZW5peFBhcmFtcyk7XG4gICAgICAgIHRoaXMuc29ja2V0ID0gc29ja2V0O1xuICAgIH1cbiAgICBnZXQgc3RhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWwuc3RhdGU7XG4gICAgfVxuICAgIHNldCBzdGF0ZShzdGF0ZSkge1xuICAgICAgICB0aGlzLmNoYW5uZWwuc3RhdGUgPSBzdGF0ZTtcbiAgICB9XG4gICAgZ2V0IGpvaW5lZE9uY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWwuam9pbmVkT25jZTtcbiAgICB9XG4gICAgZ2V0IGpvaW5QdXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsLmpvaW5QdXNoO1xuICAgIH1cbiAgICBnZXQgcmVqb2luVGltZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWwucmVqb2luVGltZXI7XG4gICAgfVxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsLm9uKGV2ZW50LCBjYWxsYmFjayk7XG4gICAgfVxuICAgIG9mZihldmVudCwgcmVmTnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY2hhbm5lbC5vZmYoZXZlbnQsIHJlZk51bWJlcik7XG4gICAgfVxuICAgIHN1YnNjcmliZSh0aW1lb3V0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWwuam9pbih0aW1lb3V0KTtcbiAgICB9XG4gICAgdW5zdWJzY3JpYmUodGltZW91dCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsLmxlYXZlKHRpbWVvdXQpO1xuICAgIH1cbiAgICB0ZWFyZG93bigpIHtcbiAgICAgICAgdGhpcy5jaGFubmVsLnRlYXJkb3duKCk7XG4gICAgfVxuICAgIG9uQ2xvc2UoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5jaGFubmVsLm9uQ2xvc2UoY2FsbGJhY2spO1xuICAgIH1cbiAgICBvbkVycm9yKGNhbGxiYWNrKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWwub25FcnJvcihjYWxsYmFjayk7XG4gICAgfVxuICAgIHB1c2goZXZlbnQsIHBheWxvYWQsIHRpbWVvdXQpIHtcbiAgICAgICAgbGV0IHB1c2g7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBwdXNoID0gdGhpcy5jaGFubmVsLnB1c2goZXZlbnQsIHBheWxvYWQsIHRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB0cmllZCB0byBwdXNoICcke2V2ZW50fScgdG8gJyR7dGhpcy5jaGFubmVsLnRvcGljfScgYmVmb3JlIGpvaW5pbmcuIFVzZSBjaGFubmVsLnN1YnNjcmliZSgpIGJlZm9yZSBwdXNoaW5nIGV2ZW50c2ApO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNoYW5uZWwucHVzaEJ1ZmZlci5sZW5ndGggPiBNQVhfUFVTSF9CVUZGRVJfU0laRSkge1xuICAgICAgICAgICAgY29uc3QgcmVtb3ZlZFB1c2ggPSB0aGlzLmNoYW5uZWwucHVzaEJ1ZmZlci5zaGlmdCgpO1xuICAgICAgICAgICAgcmVtb3ZlZFB1c2guY2FuY2VsVGltZW91dCgpO1xuICAgICAgICAgICAgdGhpcy5zb2NrZXQubG9nKCdjaGFubmVsJywgYGRpc2NhcmRlZCBwdXNoIGR1ZSB0byBidWZmZXIgb3ZlcmZsb3c6ICR7cmVtb3ZlZFB1c2guZXZlbnR9YCwgcmVtb3ZlZFB1c2gucGF5bG9hZCgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHVzaDtcbiAgICB9XG4gICAgdXBkYXRlSm9pblBheWxvYWQocGF5bG9hZCkge1xuICAgICAgICBjb25zdCBvbGRQYXlsb2FkID0gdGhpcy5jaGFubmVsLmpvaW5QdXNoLnBheWxvYWQoKTtcbiAgICAgICAgdGhpcy5jaGFubmVsLmpvaW5QdXNoLnBheWxvYWQgPSAoKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvbGRQYXlsb2FkKSwgcGF5bG9hZCkpO1xuICAgIH1cbiAgICBjYW5QdXNoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXQuaXNDb25uZWN0ZWQoKSAmJiB0aGlzLnN0YXRlID09PSBDSEFOTkVMX1NUQVRFUy5qb2luZWQ7XG4gICAgfVxuICAgIGlzSm9pbmVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gQ0hBTk5FTF9TVEFURVMuam9pbmVkO1xuICAgIH1cbiAgICBpc0pvaW5pbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlID09PSBDSEFOTkVMX1NUQVRFUy5qb2luaW5nO1xuICAgIH1cbiAgICBpc0Nsb3NlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmNsb3NlZDtcbiAgICB9XG4gICAgaXNMZWF2aW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZSA9PT0gQ0hBTk5FTF9TVEFURVMubGVhdmluZztcbiAgICB9XG4gICAgdXBkYXRlRmlsdGVyQmluZGluZ3MoZmlsdGVyQmluZGluZ3MpIHtcbiAgICAgICAgdGhpcy5jaGFubmVsLmZpbHRlckJpbmRpbmdzID0gZmlsdGVyQmluZGluZ3M7XG4gICAgfVxuICAgIHVwZGF0ZVBheWxvYWRUcmFuc2Zvcm0oY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5jaGFubmVsLm9uTWVzc2FnZSA9IGNhbGxiYWNrO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBnZXRDaGFubmVsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHBob2VuaXhDaGFubmVsUGFyYW1zKG9wdGlvbnMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBjb25maWc6IE9iamVjdC5hc3NpZ24oe1xuICAgICAgICAgICAgYnJvYWRjYXN0OiB7IGFjazogZmFsc2UsIHNlbGY6IGZhbHNlIH0sXG4gICAgICAgICAgICBwcmVzZW5jZTogeyBrZXk6ICcnLCBlbmFibGVkOiBmYWxzZSB9LFxuICAgICAgICAgICAgcHJpdmF0ZTogZmFsc2UsXG4gICAgICAgIH0sIG9wdGlvbnMuY29uZmlnKSxcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2hhbm5lbEFkYXB0ZXIuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/phoenix/channelAdapter.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/phoenix/presenceAdapter.js":
|
||
/*!***********************************************************************************!*\
|
||
!*** ./node_modules/@supabase/realtime-js/dist/module/phoenix/presenceAdapter.js ***!
|
||
\***********************************************************************************/
|
||
/***/ ((__unused_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 */ \"default\": () => (/* binding */ PresenceAdapter)\n/* harmony export */ });\n/* harmony import */ var _supabase_phoenix__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @supabase/phoenix */ \"(app-pages-browser)/./node_modules/@supabase/phoenix/priv/static/phoenix.mjs\");\n\nclass PresenceAdapter {\n constructor(channel, opts) {\n const phoenixOptions = phoenixPresenceOptions(opts);\n this.presence = new _supabase_phoenix__WEBPACK_IMPORTED_MODULE_0__.Presence(channel.getChannel(), phoenixOptions);\n this.presence.onJoin((key, currentPresence, newPresence) => {\n const onJoinPayload = PresenceAdapter.onJoinPayload(key, currentPresence, newPresence);\n channel.getChannel().trigger('presence', onJoinPayload);\n });\n this.presence.onLeave((key, currentPresence, leftPresence) => {\n const onLeavePayload = PresenceAdapter.onLeavePayload(key, currentPresence, leftPresence);\n channel.getChannel().trigger('presence', onLeavePayload);\n });\n this.presence.onSync(() => {\n channel.getChannel().trigger('presence', { event: 'sync' });\n });\n }\n get state() {\n return PresenceAdapter.transformState(this.presence.state);\n }\n /**\n * @private\n * Remove 'metas' key\n * Change 'phx_ref' to 'presence_ref'\n * Remove 'phx_ref' and 'phx_ref_prev'\n *\n * @example Transform state\n * // returns {\n * abc123: [\n * { presence_ref: '2', user_id: 1 },\n * { presence_ref: '3', user_id: 2 }\n * ]\n * }\n * RealtimePresence.transformState({\n * abc123: {\n * metas: [\n * { phx_ref: '2', phx_ref_prev: '1' user_id: 1 },\n * { phx_ref: '3', user_id: 2 }\n * ]\n * }\n * })\n *\n */\n static transformState(state) {\n state = cloneState(state);\n return Object.getOwnPropertyNames(state).reduce((newState, key) => {\n const presences = state[key];\n newState[key] = transformState(presences);\n return newState;\n }, {});\n }\n static onJoinPayload(key, currentPresence, newPresence) {\n const currentPresences = parseCurrentPresences(currentPresence);\n const newPresences = transformState(newPresence);\n return {\n event: 'join',\n key,\n currentPresences,\n newPresences,\n };\n }\n static onLeavePayload(key, currentPresence, leftPresence) {\n const currentPresences = parseCurrentPresences(currentPresence);\n const leftPresences = transformState(leftPresence);\n return {\n event: 'leave',\n key,\n currentPresences,\n leftPresences,\n };\n }\n}\nfunction transformState(presences) {\n return presences.metas.map((presence) => {\n presence['presence_ref'] = presence['phx_ref'];\n delete presence['phx_ref'];\n delete presence['phx_ref_prev'];\n return presence;\n });\n}\nfunction cloneState(state) {\n return JSON.parse(JSON.stringify(state));\n}\nfunction phoenixPresenceOptions(opts) {\n return (opts === null || opts === void 0 ? void 0 : opts.events) && { events: opts.events };\n}\nfunction parseCurrentPresences(currentPresences) {\n return (currentPresences === null || currentPresences === void 0 ? void 0 : currentPresences.metas) ? transformState(currentPresences) : [];\n}\n//# sourceMappingURL=presenceAdapter.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvcGhvZW5peC9wcmVzZW5jZUFkYXB0ZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBNkM7QUFDOUI7QUFDZjtBQUNBO0FBQ0EsNEJBQTRCLHVEQUFRO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSx1REFBdUQsZUFBZTtBQUN0RSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLCtCQUErQjtBQUMzQyxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWMsNENBQTRDO0FBQzFELGNBQWM7QUFDZDtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTLElBQUk7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEVBQTBFO0FBQzFFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3JlYWx0aW1lLWpzL2Rpc3QvbW9kdWxlL3Bob2VuaXgvcHJlc2VuY2VBZGFwdGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByZXNlbmNlIH0gZnJvbSAnQHN1cGFiYXNlL3Bob2VuaXgnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUHJlc2VuY2VBZGFwdGVyIHtcbiAgICBjb25zdHJ1Y3RvcihjaGFubmVsLCBvcHRzKSB7XG4gICAgICAgIGNvbnN0IHBob2VuaXhPcHRpb25zID0gcGhvZW5peFByZXNlbmNlT3B0aW9ucyhvcHRzKTtcbiAgICAgICAgdGhpcy5wcmVzZW5jZSA9IG5ldyBQcmVzZW5jZShjaGFubmVsLmdldENoYW5uZWwoKSwgcGhvZW5peE9wdGlvbnMpO1xuICAgICAgICB0aGlzLnByZXNlbmNlLm9uSm9pbigoa2V5LCBjdXJyZW50UHJlc2VuY2UsIG5ld1ByZXNlbmNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvbkpvaW5QYXlsb2FkID0gUHJlc2VuY2VBZGFwdGVyLm9uSm9pblBheWxvYWQoa2V5LCBjdXJyZW50UHJlc2VuY2UsIG5ld1ByZXNlbmNlKTtcbiAgICAgICAgICAgIGNoYW5uZWwuZ2V0Q2hhbm5lbCgpLnRyaWdnZXIoJ3ByZXNlbmNlJywgb25Kb2luUGF5bG9hZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByZXNlbmNlLm9uTGVhdmUoKGtleSwgY3VycmVudFByZXNlbmNlLCBsZWZ0UHJlc2VuY2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9uTGVhdmVQYXlsb2FkID0gUHJlc2VuY2VBZGFwdGVyLm9uTGVhdmVQYXlsb2FkKGtleSwgY3VycmVudFByZXNlbmNlLCBsZWZ0UHJlc2VuY2UpO1xuICAgICAgICAgICAgY2hhbm5lbC5nZXRDaGFubmVsKCkudHJpZ2dlcigncHJlc2VuY2UnLCBvbkxlYXZlUGF5bG9hZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByZXNlbmNlLm9uU3luYygoKSA9PiB7XG4gICAgICAgICAgICBjaGFubmVsLmdldENoYW5uZWwoKS50cmlnZ2VyKCdwcmVzZW5jZScsIHsgZXZlbnQ6ICdzeW5jJyB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBzdGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIFByZXNlbmNlQWRhcHRlci50cmFuc2Zvcm1TdGF0ZSh0aGlzLnByZXNlbmNlLnN0YXRlKTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBSZW1vdmUgJ21ldGFzJyBrZXlcbiAgICAgKiBDaGFuZ2UgJ3BoeF9yZWYnIHRvICdwcmVzZW5jZV9yZWYnXG4gICAgICogUmVtb3ZlICdwaHhfcmVmJyBhbmQgJ3BoeF9yZWZfcHJldidcbiAgICAgKlxuICAgICAqIEBleGFtcGxlIFRyYW5zZm9ybSBzdGF0ZVxuICAgICAqIC8vIHJldHVybnMge1xuICAgICAqICBhYmMxMjM6IFtcbiAgICAgKiAgICB7IHByZXNlbmNlX3JlZjogJzInLCB1c2VyX2lkOiAxIH0sXG4gICAgICogICAgeyBwcmVzZW5jZV9yZWY6ICczJywgdXNlcl9pZDogMiB9XG4gICAgICogIF1cbiAgICAgKiB9XG4gICAgICogUmVhbHRpbWVQcmVzZW5jZS50cmFuc2Zvcm1TdGF0ZSh7XG4gICAgICogIGFiYzEyMzoge1xuICAgICAqICAgIG1ldGFzOiBbXG4gICAgICogICAgICB7IHBoeF9yZWY6ICcyJywgcGh4X3JlZl9wcmV2OiAnMScgdXNlcl9pZDogMSB9LFxuICAgICAqICAgICAgeyBwaHhfcmVmOiAnMycsIHVzZXJfaWQ6IDIgfVxuICAgICAqICAgIF1cbiAgICAgKiAgfVxuICAgICAqIH0pXG4gICAgICpcbiAgICAgKi9cbiAgICBzdGF0aWMgdHJhbnNmb3JtU3RhdGUoc3RhdGUpIHtcbiAgICAgICAgc3RhdGUgPSBjbG9uZVN0YXRlKHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHN0YXRlKS5yZWR1Y2UoKG5ld1N0YXRlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZXNlbmNlcyA9IHN0YXRlW2tleV07XG4gICAgICAgICAgICBuZXdTdGF0ZVtrZXldID0gdHJhbnNmb3JtU3RhdGUocHJlc2VuY2VzKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdTdGF0ZTtcbiAgICAgICAgfSwge30pO1xuICAgIH1cbiAgICBzdGF0aWMgb25Kb2luUGF5bG9hZChrZXksIGN1cnJlbnRQcmVzZW5jZSwgbmV3UHJlc2VuY2UpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFByZXNlbmNlcyA9IHBhcnNlQ3VycmVudFByZXNlbmNlcyhjdXJyZW50UHJlc2VuY2UpO1xuICAgICAgICBjb25zdCBuZXdQcmVzZW5jZXMgPSB0cmFuc2Zvcm1TdGF0ZShuZXdQcmVzZW5jZSk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmVudDogJ2pvaW4nLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgY3VycmVudFByZXNlbmNlcyxcbiAgICAgICAgICAgIG5ld1ByZXNlbmNlcyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgc3RhdGljIG9uTGVhdmVQYXlsb2FkKGtleSwgY3VycmVudFByZXNlbmNlLCBsZWZ0UHJlc2VuY2UpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFByZXNlbmNlcyA9IHBhcnNlQ3VycmVudFByZXNlbmNlcyhjdXJyZW50UHJlc2VuY2UpO1xuICAgICAgICBjb25zdCBsZWZ0UHJlc2VuY2VzID0gdHJhbnNmb3JtU3RhdGUobGVmdFByZXNlbmNlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2ZW50OiAnbGVhdmUnLFxuICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgY3VycmVudFByZXNlbmNlcyxcbiAgICAgICAgICAgIGxlZnRQcmVzZW5jZXMsXG4gICAgICAgIH07XG4gICAgfVxufVxuZnVuY3Rpb24gdHJhbnNmb3JtU3RhdGUocHJlc2VuY2VzKSB7XG4gICAgcmV0dXJuIHByZXNlbmNlcy5tZXRhcy5tYXAoKHByZXNlbmNlKSA9PiB7XG4gICAgICAgIHByZXNlbmNlWydwcmVzZW5jZV9yZWYnXSA9IHByZXNlbmNlWydwaHhfcmVmJ107XG4gICAgICAgIGRlbGV0ZSBwcmVzZW5jZVsncGh4X3JlZiddO1xuICAgICAgICBkZWxldGUgcHJlc2VuY2VbJ3BoeF9yZWZfcHJldiddO1xuICAgICAgICByZXR1cm4gcHJlc2VuY2U7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBjbG9uZVN0YXRlKHN0YXRlKSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc3RhdGUpKTtcbn1cbmZ1bmN0aW9uIHBob2VuaXhQcmVzZW5jZU9wdGlvbnMob3B0cykge1xuICAgIHJldHVybiAob3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLmV2ZW50cykgJiYgeyBldmVudHM6IG9wdHMuZXZlbnRzIH07XG59XG5mdW5jdGlvbiBwYXJzZUN1cnJlbnRQcmVzZW5jZXMoY3VycmVudFByZXNlbmNlcykge1xuICAgIHJldHVybiAoY3VycmVudFByZXNlbmNlcyA9PT0gbnVsbCB8fCBjdXJyZW50UHJlc2VuY2VzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXJyZW50UHJlc2VuY2VzLm1ldGFzKSA/IHRyYW5zZm9ybVN0YXRlKGN1cnJlbnRQcmVzZW5jZXMpIDogW107XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wcmVzZW5jZUFkYXB0ZXIuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/phoenix/presenceAdapter.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/phoenix/socketAdapter.js":
|
||
/*!*********************************************************************************!*\
|
||
!*** ./node_modules/@supabase/realtime-js/dist/module/phoenix/socketAdapter.js ***!
|
||
\*********************************************************************************/
|
||
/***/ ((__unused_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 */ \"default\": () => (/* binding */ SocketAdapter)\n/* harmony export */ });\n/* harmony import */ var _supabase_phoenix__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @supabase/phoenix */ \"(app-pages-browser)/./node_modules/@supabase/phoenix/priv/static/phoenix.mjs\");\n/* harmony import */ var _lib_constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../lib/constants */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/lib/constants.js\");\n\n\nclass SocketAdapter {\n constructor(endPoint, options) {\n this.socket = new _supabase_phoenix__WEBPACK_IMPORTED_MODULE_0__.Socket(endPoint, options);\n }\n get timeout() {\n return this.socket.timeout;\n }\n get endPoint() {\n return this.socket.endPoint;\n }\n get transport() {\n return this.socket.transport;\n }\n get heartbeatIntervalMs() {\n return this.socket.heartbeatIntervalMs;\n }\n get heartbeatCallback() {\n return this.socket.heartbeatCallback;\n }\n set heartbeatCallback(callback) {\n this.socket.heartbeatCallback = callback;\n }\n get heartbeatTimer() {\n return this.socket.heartbeatTimer;\n }\n get pendingHeartbeatRef() {\n return this.socket.pendingHeartbeatRef;\n }\n get reconnectTimer() {\n return this.socket.reconnectTimer;\n }\n get vsn() {\n return this.socket.vsn;\n }\n get encode() {\n return this.socket.encode;\n }\n get decode() {\n return this.socket.decode;\n }\n get reconnectAfterMs() {\n return this.socket.reconnectAfterMs;\n }\n get sendBuffer() {\n return this.socket.sendBuffer;\n }\n get stateChangeCallbacks() {\n return this.socket.stateChangeCallbacks;\n }\n connect() {\n this.socket.connect();\n }\n disconnect(callback, code, reason, timeout = 10000) {\n return new Promise((resolve) => {\n setTimeout(() => resolve('timeout'), timeout);\n this.socket.disconnect(() => {\n callback();\n resolve('ok');\n }, code, reason);\n });\n }\n push(data) {\n this.socket.push(data);\n }\n log(kind, msg, data) {\n this.socket.log(kind, msg, data);\n }\n makeRef() {\n return this.socket.makeRef();\n }\n onOpen(callback) {\n this.socket.onOpen(callback);\n }\n onClose(callback) {\n this.socket.onClose(callback);\n }\n onError(callback) {\n this.socket.onError(callback);\n }\n onMessage(callback) {\n this.socket.onMessage(callback);\n }\n isConnected() {\n return this.socket.isConnected();\n }\n isConnecting() {\n return this.socket.connectionState() == _lib_constants__WEBPACK_IMPORTED_MODULE_1__.CONNECTION_STATE.connecting;\n }\n isDisconnecting() {\n return this.socket.connectionState() == _lib_constants__WEBPACK_IMPORTED_MODULE_1__.CONNECTION_STATE.closing;\n }\n connectionState() {\n // @ts-ignore - requires better typing and exposing type in phoenix\n return this.socket.connectionState();\n }\n endPointURL() {\n return this.socket.endPointURL();\n }\n sendHeartbeat() {\n this.socket.sendHeartbeat();\n }\n /**\n * @internal\n */\n getSocket() {\n return this.socket;\n }\n}\n//# sourceMappingURL=socketAdapter.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2UvcmVhbHRpbWUtanMvZGlzdC9tb2R1bGUvcGhvZW5peC9zb2NrZXRBZGFwdGVyLmpzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUEyQztBQUNTO0FBQ3JDO0FBQ2Y7QUFDQSwwQkFBMEIscURBQU07QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsNERBQWdCO0FBQ2hFO0FBQ0E7QUFDQSxnREFBZ0QsNERBQWdCO0FBQ2hFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9yZWFsdGltZS1qcy9kaXN0L21vZHVsZS9waG9lbml4L3NvY2tldEFkYXB0ZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU29ja2V0IH0gZnJvbSAnQHN1cGFiYXNlL3Bob2VuaXgnO1xuaW1wb3J0IHsgQ09OTkVDVElPTl9TVEFURSB9IGZyb20gJy4uL2xpYi9jb25zdGFudHMnO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU29ja2V0QWRhcHRlciB7XG4gICAgY29uc3RydWN0b3IoZW5kUG9pbnQsIG9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5zb2NrZXQgPSBuZXcgU29ja2V0KGVuZFBvaW50LCBvcHRpb25zKTtcbiAgICB9XG4gICAgZ2V0IHRpbWVvdXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldC50aW1lb3V0O1xuICAgIH1cbiAgICBnZXQgZW5kUG9pbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldC5lbmRQb2ludDtcbiAgICB9XG4gICAgZ2V0IHRyYW5zcG9ydCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0LnRyYW5zcG9ydDtcbiAgICB9XG4gICAgZ2V0IGhlYXJ0YmVhdEludGVydmFsTXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldC5oZWFydGJlYXRJbnRlcnZhbE1zO1xuICAgIH1cbiAgICBnZXQgaGVhcnRiZWF0Q2FsbGJhY2soKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldC5oZWFydGJlYXRDYWxsYmFjaztcbiAgICB9XG4gICAgc2V0IGhlYXJ0YmVhdENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuc29ja2V0LmhlYXJ0YmVhdENhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuICAgIGdldCBoZWFydGJlYXRUaW1lcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0LmhlYXJ0YmVhdFRpbWVyO1xuICAgIH1cbiAgICBnZXQgcGVuZGluZ0hlYXJ0YmVhdFJlZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0LnBlbmRpbmdIZWFydGJlYXRSZWY7XG4gICAgfVxuICAgIGdldCByZWNvbm5lY3RUaW1lcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0LnJlY29ubmVjdFRpbWVyO1xuICAgIH1cbiAgICBnZXQgdnNuKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXQudnNuO1xuICAgIH1cbiAgICBnZXQgZW5jb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXQuZW5jb2RlO1xuICAgIH1cbiAgICBnZXQgZGVjb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXQuZGVjb2RlO1xuICAgIH1cbiAgICBnZXQgcmVjb25uZWN0QWZ0ZXJNcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0LnJlY29ubmVjdEFmdGVyTXM7XG4gICAgfVxuICAgIGdldCBzZW5kQnVmZmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXQuc2VuZEJ1ZmZlcjtcbiAgICB9XG4gICAgZ2V0IHN0YXRlQ2hhbmdlQ2FsbGJhY2tzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zb2NrZXQuc3RhdGVDaGFuZ2VDYWxsYmFja3M7XG4gICAgfVxuICAgIGNvbm5lY3QoKSB7XG4gICAgICAgIHRoaXMuc29ja2V0LmNvbm5lY3QoKTtcbiAgICB9XG4gICAgZGlzY29ubmVjdChjYWxsYmFjaywgY29kZSwgcmVhc29uLCB0aW1lb3V0ID0gMTAwMDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoJ3RpbWVvdXQnKSwgdGltZW91dCk7XG4gICAgICAgICAgICB0aGlzLnNvY2tldC5kaXNjb25uZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoJ29rJyk7XG4gICAgICAgICAgICB9LCBjb2RlLCByZWFzb24pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHVzaChkYXRhKSB7XG4gICAgICAgIHRoaXMuc29ja2V0LnB1c2goZGF0YSk7XG4gICAgfVxuICAgIGxvZyhraW5kLCBtc2csIGRhdGEpIHtcbiAgICAgICAgdGhpcy5zb2NrZXQubG9nKGtpbmQsIG1zZywgZGF0YSk7XG4gICAgfVxuICAgIG1ha2VSZWYoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldC5tYWtlUmVmKCk7XG4gICAgfVxuICAgIG9uT3BlbihjYWxsYmFjaykge1xuICAgICAgICB0aGlzLnNvY2tldC5vbk9wZW4oY2FsbGJhY2spO1xuICAgIH1cbiAgICBvbkNsb3NlKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuc29ja2V0Lm9uQ2xvc2UoY2FsbGJhY2spO1xuICAgIH1cbiAgICBvbkVycm9yKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuc29ja2V0Lm9uRXJyb3IoY2FsbGJhY2spO1xuICAgIH1cbiAgICBvbk1lc3NhZ2UoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5zb2NrZXQub25NZXNzYWdlKGNhbGxiYWNrKTtcbiAgICB9XG4gICAgaXNDb25uZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldC5pc0Nvbm5lY3RlZCgpO1xuICAgIH1cbiAgICBpc0Nvbm5lY3RpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldC5jb25uZWN0aW9uU3RhdGUoKSA9PSBDT05ORUNUSU9OX1NUQVRFLmNvbm5lY3Rpbmc7XG4gICAgfVxuICAgIGlzRGlzY29ubmVjdGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0LmNvbm5lY3Rpb25TdGF0ZSgpID09IENPTk5FQ1RJT05fU1RBVEUuY2xvc2luZztcbiAgICB9XG4gICAgY29ubmVjdGlvblN0YXRlKCkge1xuICAgICAgICAvLyBAdHMtaWdub3JlIC0gcmVxdWlyZXMgYmV0dGVyIHR5cGluZyBhbmQgZXhwb3NpbmcgdHlwZSBpbiBwaG9lbml4XG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldC5jb25uZWN0aW9uU3RhdGUoKTtcbiAgICB9XG4gICAgZW5kUG9pbnRVUkwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNvY2tldC5lbmRQb2ludFVSTCgpO1xuICAgIH1cbiAgICBzZW5kSGVhcnRiZWF0KCkge1xuICAgICAgICB0aGlzLnNvY2tldC5zZW5kSGVhcnRiZWF0KCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldFNvY2tldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc29ja2V0O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNvY2tldEFkYXB0ZXIuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/phoenix/socketAdapter.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/cookies.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/@supabase/ssr/dist/module/cookies.js ***!
|
||
\***********************************************************/
|
||
/***/ ((__unused_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 */ applyServerStorage: () => (/* binding */ applyServerStorage),\n/* harmony export */ createStorageFromOptions: () => (/* binding */ createStorageFromOptions)\n/* harmony export */ });\n/* harmony import */ var cookie__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! cookie */ \"(app-pages-browser)/./node_modules/cookie/dist/index.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/index.js\");\n\n\nconst BASE64_PREFIX = \"base64-\";\n/**\n * Creates a storage client that handles cookies correctly for browser and\n * server clients with or without properly provided cookie methods.\n *\n * @param options The options passed to createBrowserClient or createServer client.\n *\n * @param isServerClient Whether it's called from createServerClient.\n */\nfunction createStorageFromOptions(options, isServerClient) {\n const cookies = options.cookies ?? null;\n const cookieEncoding = options.cookieEncoding;\n const setItems = {};\n const removedItems = {};\n let getAll;\n let setAll;\n if (cookies) {\n if (\"get\" in cookies) {\n // Just get is not enough, because the client needs to see what cookies\n // are already set and unset them if necessary. To attempt to fix this\n // behavior for most use cases, we pass \"hints\" which is the keys of the\n // storage items. They are then converted to their corresponding cookie\n // chunk names and are fetched with get. Only 5 chunks are fetched, which\n // should be enough for the majority of use cases, but does not solve\n // those with very large sessions.\n const getWithHints = async (keyHints) => {\n // optimistically find the first 5 potential chunks for the specified key\n const chunkNames = keyHints.flatMap((keyHint) => [\n keyHint,\n ...Array.from({ length: 5 }).map((_, i) => `${keyHint}.${i}`),\n ]);\n const chunks = [];\n for (let i = 0; i < chunkNames.length; i += 1) {\n const value = await cookies.get(chunkNames[i]);\n if (!value && typeof value !== \"string\") {\n continue;\n }\n chunks.push({ name: chunkNames[i], value });\n }\n // TODO: detect and log stale chunks error\n return chunks;\n };\n getAll = async (keyHints) => await getWithHints(keyHints);\n if (\"set\" in cookies && \"remove\" in cookies) {\n setAll = async (setCookies) => {\n for (let i = 0; i < setCookies.length; i += 1) {\n const { name, value, options } = setCookies[i];\n if (value) {\n await cookies.set(name, value, options);\n }\n else {\n await cookies.remove(name, options);\n }\n }\n };\n }\n else if (isServerClient) {\n setAll = async () => {\n console.warn(\"@supabase/ssr: createServerClient was configured without set and remove cookie methods, but the client needs to set cookies. This can lead to issues such as random logouts, early session termination or increased token refresh requests. If in NextJS, check your middleware.ts file, route handlers and server actions for correctness. Consider switching to the getAll and setAll cookie methods instead of get, set and remove which are deprecated and can be difficult to use correctly.\");\n };\n }\n else {\n throw new Error(\"@supabase/ssr: createBrowserClient requires configuring a getAll and setAll cookie method (deprecated: alternatively both get, set and remove can be used)\");\n }\n }\n else if (\"getAll\" in cookies) {\n getAll = async () => await cookies.getAll();\n if (\"setAll\" in cookies) {\n setAll = cookies.setAll;\n }\n else if (isServerClient) {\n setAll = async () => {\n console.warn(\"@supabase/ssr: createServerClient was configured without the setAll cookie method, but the client needs to set cookies. This can lead to issues such as random logouts, early session termination or increased token refresh requests. If in NextJS, check your middleware.ts file, route handlers and server actions for correctness.\");\n };\n }\n else {\n throw new Error(\"@supabase/ssr: createBrowserClient requires configuring both getAll and setAll cookie methods (deprecated: alternatively both get, set and remove can be used)\");\n }\n }\n else {\n // neither get nor getAll is present on cookies, only will occur if pure JavaScript is used, but cookies is an object\n throw new Error(`@supabase/ssr: ${isServerClient ? \"createServerClient\" : \"createBrowserClient\"} requires configuring getAll and setAll cookie methods (deprecated: alternatively use get, set and remove).${(0,_utils__WEBPACK_IMPORTED_MODULE_0__.isBrowser)() ? \" As this is called in a browser runtime, consider removing the cookies option object to use the document.cookie API automatically.\" : \"\"}`);\n }\n }\n else if (!isServerClient && (0,_utils__WEBPACK_IMPORTED_MODULE_0__.isBrowser)()) {\n // The environment is browser, so use the document.cookie API to implement getAll and setAll.\n const noHintGetAll = () => {\n const parsed = (0,cookie__WEBPACK_IMPORTED_MODULE_1__.parse)(document.cookie);\n return Object.keys(parsed).map((name) => ({\n name,\n value: parsed[name] ?? \"\",\n }));\n };\n getAll = () => noHintGetAll();\n setAll = (setCookies) => {\n setCookies.forEach(({ name, value, options }) => {\n document.cookie = (0,cookie__WEBPACK_IMPORTED_MODULE_1__.serialize)(name, value, options);\n });\n };\n }\n else if (isServerClient) {\n throw new Error(\"@supabase/ssr: createServerClient must be initialized with cookie options that specify getAll and setAll functions (deprecated, not recommended: alternatively use get, set and remove)\");\n }\n else {\n // getting cookies when there's no window but we're in browser mode can be OK, because the developer probably is not using auth functions\n getAll = () => {\n return [];\n };\n // this is NOT OK because the developer is using auth functions that require setting some state, so that must error out\n setAll = () => {\n throw new Error(\"@supabase/ssr: createBrowserClient in non-browser runtimes (including Next.js pre-rendering mode) was not initialized cookie options that specify getAll and setAll functions (deprecated: alternatively use get, set and remove), but they were needed\");\n };\n }\n if (!isServerClient) {\n // This is the storage client to be used in browsers. It only\n // works on the cookies abstraction, unlike the server client\n // which only uses cookies to read the initial state. When an\n // item is set, cookies are both cleared and set to values so\n // that stale chunks are not left remaining.\n return {\n getAll, // for type consistency\n setAll, // for type consistency\n setItems, // for type consistency\n removedItems, // for type consistency\n storage: {\n isServer: false,\n getItem: async (key) => {\n const allCookies = await getAll([key]);\n const chunkedCookie = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.combineChunks)(key, async (chunkName) => {\n const cookie = allCookies?.find(({ name }) => name === chunkName) || null;\n if (!cookie) {\n return null;\n }\n return cookie.value;\n });\n if (!chunkedCookie) {\n return null;\n }\n let decoded = chunkedCookie;\n if (chunkedCookie.startsWith(BASE64_PREFIX)) {\n decoded = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.stringFromBase64URL)(chunkedCookie.substring(BASE64_PREFIX.length));\n }\n return decoded;\n },\n setItem: async (key, value) => {\n const allCookies = await getAll([key]);\n const cookieNames = allCookies?.map(({ name }) => name) || [];\n const removeCookies = new Set(cookieNames.filter((name) => (0,_utils__WEBPACK_IMPORTED_MODULE_0__.isChunkLike)(name, key)));\n let encoded = value;\n if (cookieEncoding === \"base64url\") {\n encoded = BASE64_PREFIX + (0,_utils__WEBPACK_IMPORTED_MODULE_0__.stringToBase64URL)(value);\n }\n const setCookies = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createChunks)(key, encoded);\n setCookies.forEach(({ name }) => {\n removeCookies.delete(name);\n });\n const removeCookieOptions = {\n ..._utils__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_COOKIE_OPTIONS,\n ...options?.cookieOptions,\n maxAge: 0,\n };\n const setCookieOptions = {\n ..._utils__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_COOKIE_OPTIONS,\n ...options?.cookieOptions,\n maxAge: _utils__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_COOKIE_OPTIONS.maxAge,\n };\n // the NextJS cookieStore API can get confused if the `name` from\n // options.cookieOptions leaks\n delete removeCookieOptions.name;\n delete setCookieOptions.name;\n const allToSet = [\n ...[...removeCookies].map((name) => ({\n name,\n value: \"\",\n options: removeCookieOptions,\n })),\n ...setCookies.map(({ name, value }) => ({\n name,\n value,\n options: setCookieOptions,\n })),\n ];\n if (allToSet.length > 0) {\n await setAll(allToSet, {});\n }\n },\n removeItem: async (key) => {\n const allCookies = await getAll([key]);\n const cookieNames = allCookies?.map(({ name }) => name) || [];\n const removeCookies = cookieNames.filter((name) => (0,_utils__WEBPACK_IMPORTED_MODULE_0__.isChunkLike)(name, key));\n const removeCookieOptions = {\n ..._utils__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_COOKIE_OPTIONS,\n ...options?.cookieOptions,\n maxAge: 0,\n };\n // the NextJS cookieStore API can get confused if the `name` from\n // options.cookieOptions leaks\n delete removeCookieOptions.name;\n if (removeCookies.length > 0) {\n await setAll(removeCookies.map((name) => ({\n name,\n value: \"\",\n options: removeCookieOptions,\n })), {});\n }\n },\n },\n };\n }\n // This is the server client. It only uses getAll to read the initial\n // state. Any subsequent changes to the items is persisted in the\n // setItems and removedItems objects. createServerClient *must* use\n // getAll, setAll and the values in setItems and removedItems to\n // persist the changes *at once* when appropriate (usually only when\n // the TOKEN_REFRESHED, USER_UPDATED or SIGNED_OUT events are fired by\n // the Supabase Auth client).\n return {\n getAll,\n setAll,\n setItems,\n removedItems,\n storage: {\n // to signal to the libraries that these cookies are\n // coming from a server environment and their value\n // should not be trusted\n isServer: true,\n getItem: async (key) => {\n if (typeof setItems[key] === \"string\") {\n return setItems[key];\n }\n if (removedItems[key]) {\n return null;\n }\n const allCookies = await getAll([key]);\n const chunkedCookie = await (0,_utils__WEBPACK_IMPORTED_MODULE_0__.combineChunks)(key, async (chunkName) => {\n const cookie = allCookies?.find(({ name }) => name === chunkName) || null;\n if (!cookie) {\n return null;\n }\n return cookie.value;\n });\n if (!chunkedCookie) {\n return null;\n }\n let decoded = chunkedCookie;\n if (typeof chunkedCookie === \"string\" &&\n chunkedCookie.startsWith(BASE64_PREFIX)) {\n decoded = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.stringFromBase64URL)(chunkedCookie.substring(BASE64_PREFIX.length));\n }\n return decoded;\n },\n setItem: async (key, value) => {\n // We don't have an `onAuthStateChange` event that can let us know that\n // the PKCE code verifier is being set. Therefore, if we see it being\n // set, we need to apply the storage (call `setAll` so the cookie is\n // set properly).\n if (key.endsWith(\"-code-verifier\")) {\n await applyServerStorage({\n getAll,\n setAll,\n // pretend only that the code verifier was set\n setItems: { [key]: value },\n // pretend that nothing was removed\n removedItems: {},\n }, {\n cookieOptions: options?.cookieOptions ?? null,\n cookieEncoding,\n });\n }\n setItems[key] = value;\n delete removedItems[key];\n },\n removeItem: async (key) => {\n // Intentionally not applying the storage when the key is the PKCE code\n // verifier, as usually right after it's removed other items are set,\n // so application of the storage will be handled by the\n // `onAuthStateChange` callback that follows removal -- usually as part\n // of the `exchangeCodeForSession` call.\n delete setItems[key];\n removedItems[key] = true;\n },\n },\n };\n}\n/**\n * When createServerClient needs to apply the created storage to cookies, it\n * should call this function which handles correcly setting cookies for stored\n * and removed items in the storage.\n */\nasync function applyServerStorage({ getAll, setAll, setItems, removedItems, }, options) {\n const cookieEncoding = options.cookieEncoding;\n const cookieOptions = options.cookieOptions ?? null;\n const allCookies = await getAll([\n ...(setItems ? Object.keys(setItems) : []),\n ...(removedItems ? Object.keys(removedItems) : []),\n ]);\n const cookieNames = allCookies?.map(({ name }) => name) || [];\n const removeCookies = Object.keys(removedItems).flatMap((itemName) => {\n return cookieNames.filter((name) => (0,_utils__WEBPACK_IMPORTED_MODULE_0__.isChunkLike)(name, itemName));\n });\n const setCookies = Object.keys(setItems).flatMap((itemName) => {\n const removeExistingCookiesForItem = new Set(cookieNames.filter((name) => (0,_utils__WEBPACK_IMPORTED_MODULE_0__.isChunkLike)(name, itemName)));\n let encoded = setItems[itemName];\n if (cookieEncoding === \"base64url\") {\n encoded = BASE64_PREFIX + (0,_utils__WEBPACK_IMPORTED_MODULE_0__.stringToBase64URL)(encoded);\n }\n const chunks = (0,_utils__WEBPACK_IMPORTED_MODULE_0__.createChunks)(itemName, encoded);\n chunks.forEach((chunk) => {\n removeExistingCookiesForItem.delete(chunk.name);\n });\n removeCookies.push(...removeExistingCookiesForItem);\n return chunks;\n });\n const removeCookieOptions = {\n ..._utils__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_COOKIE_OPTIONS,\n ...cookieOptions,\n maxAge: 0,\n };\n const setCookieOptions = {\n ..._utils__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_COOKIE_OPTIONS,\n ...cookieOptions,\n maxAge: _utils__WEBPACK_IMPORTED_MODULE_0__.DEFAULT_COOKIE_OPTIONS.maxAge,\n };\n // the NextJS cookieStore API can get confused if the `name` from\n // options.cookieOptions leaks\n delete removeCookieOptions.name;\n delete setCookieOptions.name;\n await setAll([\n ...removeCookies.map((name) => ({\n name,\n value: \"\",\n options: removeCookieOptions,\n })),\n ...setCookies.map(({ name, value }) => ({\n name,\n value,\n options: setCookieOptions,\n })),\n ], {\n \"Cache-Control\": \"private, no-cache, no-store, must-revalidate, max-age=0\",\n Expires: \"0\",\n Pragma: \"no-cache\",\n });\n}\n//# sourceMappingURL=cookies.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3NyL2Rpc3QvbW9kdWxlL2Nvb2tpZXMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUEwQztBQUNxRztBQUMvSTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DLFdBQVcsbUJBQW1CLFFBQVEsR0FBRyxFQUFFO0FBQy9FO0FBQ0E7QUFDQSxnQ0FBZ0MsdUJBQXVCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0NBQWtDLDRCQUE0QjtBQUM5RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyx1QkFBdUI7QUFDM0QsZ0NBQWdDLHVCQUF1QjtBQUN2RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhDQUE4QywrREFBK0QsNEdBQTRHLGlEQUFTLCtJQUErSTtBQUNqWDtBQUNBO0FBQ0EsZ0NBQWdDLGlEQUFTO0FBQ3pDO0FBQ0E7QUFDQSwyQkFBMkIsNkNBQUs7QUFDaEM7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQyxzQkFBc0I7QUFDeEQsa0NBQWtDLGlEQUFTO0FBQzNDLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QscURBQWE7QUFDN0QsMkRBQTJELE1BQU07QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtDQUFrQywyREFBbUI7QUFDckQ7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsMkRBQTJELE1BQU07QUFDakUsK0VBQStFLG1EQUFXO0FBQzFGO0FBQ0E7QUFDQSxrREFBa0QseURBQWlCO0FBQ25FO0FBQ0EsdUNBQXVDLG9EQUFZO0FBQ25ELDBDQUEwQyxNQUFNO0FBQ2hEO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0EsMkJBQTJCLDBEQUFzQjtBQUNqRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJCQUEyQiwwREFBc0I7QUFDakQ7QUFDQSxnQ0FBZ0MsMERBQXNCO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCO0FBQ3pCLDZDQUE2QyxhQUFhO0FBQzFEO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0EsaURBQWlEO0FBQ2pEO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSwyREFBMkQsTUFBTTtBQUNqRSx1RUFBdUUsbURBQVc7QUFDbEY7QUFDQSwyQkFBMkIsMERBQXNCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIsTUFBTTtBQUMvQjtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLHFEQUFhO0FBQ3pELHVEQUF1RCxNQUFNO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDhCQUE4QiwyREFBbUI7QUFDakQ7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxjQUFjO0FBQ2xEO0FBQ0Esd0NBQXdDO0FBQ3hDLHFCQUFxQjtBQUNyQjtBQUNBO0FBQ0EscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLG9DQUFvQyx5Q0FBeUM7QUFDcEY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDLE1BQU07QUFDakQ7QUFDQSw0Q0FBNEMsbURBQVc7QUFDdkQsS0FBSztBQUNMO0FBQ0Esa0ZBQWtGLG1EQUFXO0FBQzdGO0FBQ0E7QUFDQSxzQ0FBc0MseURBQWlCO0FBQ3ZEO0FBQ0EsdUJBQXVCLG9EQUFZO0FBQ25DO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLFdBQVcsMERBQXNCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywwREFBc0I7QUFDakM7QUFDQSxnQkFBZ0IsMERBQXNCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULDZCQUE2QixhQUFhO0FBQzFDO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zc3IvZGlzdC9tb2R1bGUvY29va2llcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBwYXJzZSwgc2VyaWFsaXplIH0gZnJvbSBcImNvb2tpZVwiO1xuaW1wb3J0IHsgREVGQVVMVF9DT09LSUVfT1BUSU9OUywgY29tYmluZUNodW5rcywgY3JlYXRlQ2h1bmtzLCBpc0Jyb3dzZXIsIGlzQ2h1bmtMaWtlLCBzdHJpbmdGcm9tQmFzZTY0VVJMLCBzdHJpbmdUb0Jhc2U2NFVSTCwgfSBmcm9tIFwiLi91dGlsc1wiO1xuY29uc3QgQkFTRTY0X1BSRUZJWCA9IFwiYmFzZTY0LVwiO1xuLyoqXG4gKiBDcmVhdGVzIGEgc3RvcmFnZSBjbGllbnQgdGhhdCBoYW5kbGVzIGNvb2tpZXMgY29ycmVjdGx5IGZvciBicm93c2VyIGFuZFxuICogc2VydmVyIGNsaWVudHMgd2l0aCBvciB3aXRob3V0IHByb3Blcmx5IHByb3ZpZGVkIGNvb2tpZSBtZXRob2RzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIHBhc3NlZCB0byBjcmVhdGVCcm93c2VyQ2xpZW50IG9yIGNyZWF0ZVNlcnZlciBjbGllbnQuXG4gKlxuICogQHBhcmFtIGlzU2VydmVyQ2xpZW50IFdoZXRoZXIgaXQncyBjYWxsZWQgZnJvbSBjcmVhdGVTZXJ2ZXJDbGllbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTdG9yYWdlRnJvbU9wdGlvbnMob3B0aW9ucywgaXNTZXJ2ZXJDbGllbnQpIHtcbiAgICBjb25zdCBjb29raWVzID0gb3B0aW9ucy5jb29raWVzID8/IG51bGw7XG4gICAgY29uc3QgY29va2llRW5jb2RpbmcgPSBvcHRpb25zLmNvb2tpZUVuY29kaW5nO1xuICAgIGNvbnN0IHNldEl0ZW1zID0ge307XG4gICAgY29uc3QgcmVtb3ZlZEl0ZW1zID0ge307XG4gICAgbGV0IGdldEFsbDtcbiAgICBsZXQgc2V0QWxsO1xuICAgIGlmIChjb29raWVzKSB7XG4gICAgICAgIGlmIChcImdldFwiIGluIGNvb2tpZXMpIHtcbiAgICAgICAgICAgIC8vIEp1c3QgZ2V0IGlzIG5vdCBlbm91Z2gsIGJlY2F1c2UgdGhlIGNsaWVudCBuZWVkcyB0byBzZWUgd2hhdCBjb29raWVzXG4gICAgICAgICAgICAvLyBhcmUgYWxyZWFkeSBzZXQgYW5kIHVuc2V0IHRoZW0gaWYgbmVjZXNzYXJ5LiBUbyBhdHRlbXB0IHRvIGZpeCB0aGlzXG4gICAgICAgICAgICAvLyBiZWhhdmlvciBmb3IgbW9zdCB1c2UgY2FzZXMsIHdlIHBhc3MgXCJoaW50c1wiIHdoaWNoIGlzIHRoZSBrZXlzIG9mIHRoZVxuICAgICAgICAgICAgLy8gc3RvcmFnZSBpdGVtcy4gVGhleSBhcmUgdGhlbiBjb252ZXJ0ZWQgdG8gdGhlaXIgY29ycmVzcG9uZGluZyBjb29raWVcbiAgICAgICAgICAgIC8vIGNodW5rIG5hbWVzIGFuZCBhcmUgZmV0Y2hlZCB3aXRoIGdldC4gT25seSA1IGNodW5rcyBhcmUgZmV0Y2hlZCwgd2hpY2hcbiAgICAgICAgICAgIC8vIHNob3VsZCBiZSBlbm91Z2ggZm9yIHRoZSBtYWpvcml0eSBvZiB1c2UgY2FzZXMsIGJ1dCBkb2VzIG5vdCBzb2x2ZVxuICAgICAgICAgICAgLy8gdGhvc2Ugd2l0aCB2ZXJ5IGxhcmdlIHNlc3Npb25zLlxuICAgICAgICAgICAgY29uc3QgZ2V0V2l0aEhpbnRzID0gYXN5bmMgKGtleUhpbnRzKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gb3B0aW1pc3RpY2FsbHkgZmluZCB0aGUgZmlyc3QgNSBwb3RlbnRpYWwgY2h1bmtzIGZvciB0aGUgc3BlY2lmaWVkIGtleVxuICAgICAgICAgICAgICAgIGNvbnN0IGNodW5rTmFtZXMgPSBrZXlIaW50cy5mbGF0TWFwKChrZXlIaW50KSA9PiBbXG4gICAgICAgICAgICAgICAgICAgIGtleUhpbnQsXG4gICAgICAgICAgICAgICAgICAgIC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IDUgfSkubWFwKChfLCBpKSA9PiBgJHtrZXlIaW50fS4ke2l9YCksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaHVua05hbWVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgY29va2llcy5nZXQoY2h1bmtOYW1lc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUgJiYgdHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjaHVua3MucHVzaCh7IG5hbWU6IGNodW5rTmFtZXNbaV0sIHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBkZXRlY3QgYW5kIGxvZyBzdGFsZSBjaHVua3MgZXJyb3JcbiAgICAgICAgICAgICAgICByZXR1cm4gY2h1bmtzO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGdldEFsbCA9IGFzeW5jIChrZXlIaW50cykgPT4gYXdhaXQgZ2V0V2l0aEhpbnRzKGtleUhpbnRzKTtcbiAgICAgICAgICAgIGlmIChcInNldFwiIGluIGNvb2tpZXMgJiYgXCJyZW1vdmVcIiBpbiBjb29raWVzKSB7XG4gICAgICAgICAgICAgICAgc2V0QWxsID0gYXN5bmMgKHNldENvb2tpZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXRDb29raWVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IG5hbWUsIHZhbHVlLCBvcHRpb25zIH0gPSBzZXRDb29raWVzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29va2llcy5zZXQobmFtZSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgY29va2llcy5yZW1vdmUobmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNTZXJ2ZXJDbGllbnQpIHtcbiAgICAgICAgICAgICAgICBzZXRBbGwgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIkBzdXBhYmFzZS9zc3I6IGNyZWF0ZVNlcnZlckNsaWVudCB3YXMgY29uZmlndXJlZCB3aXRob3V0IHNldCBhbmQgcmVtb3ZlIGNvb2tpZSBtZXRob2RzLCBidXQgdGhlIGNsaWVudCBuZWVkcyB0byBzZXQgY29va2llcy4gVGhpcyBjYW4gbGVhZCB0byBpc3N1ZXMgc3VjaCBhcyByYW5kb20gbG9nb3V0cywgZWFybHkgc2Vzc2lvbiB0ZXJtaW5hdGlvbiBvciBpbmNyZWFzZWQgdG9rZW4gcmVmcmVzaCByZXF1ZXN0cy4gSWYgaW4gTmV4dEpTLCBjaGVjayB5b3VyIG1pZGRsZXdhcmUudHMgZmlsZSwgcm91dGUgaGFuZGxlcnMgYW5kIHNlcnZlciBhY3Rpb25zIGZvciBjb3JyZWN0bmVzcy4gQ29uc2lkZXIgc3dpdGNoaW5nIHRvIHRoZSBnZXRBbGwgYW5kIHNldEFsbCBjb29raWUgbWV0aG9kcyBpbnN0ZWFkIG9mIGdldCwgc2V0IGFuZCByZW1vdmUgd2hpY2ggYXJlIGRlcHJlY2F0ZWQgYW5kIGNhbiBiZSBkaWZmaWN1bHQgdG8gdXNlIGNvcnJlY3RseS5cIik7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkBzdXBhYmFzZS9zc3I6IGNyZWF0ZUJyb3dzZXJDbGllbnQgcmVxdWlyZXMgY29uZmlndXJpbmcgYSBnZXRBbGwgYW5kIHNldEFsbCBjb29raWUgbWV0aG9kIChkZXByZWNhdGVkOiBhbHRlcm5hdGl2ZWx5IGJvdGggZ2V0LCBzZXQgYW5kIHJlbW92ZSBjYW4gYmUgdXNlZClcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoXCJnZXRBbGxcIiBpbiBjb29raWVzKSB7XG4gICAgICAgICAgICBnZXRBbGwgPSBhc3luYyAoKSA9PiBhd2FpdCBjb29raWVzLmdldEFsbCgpO1xuICAgICAgICAgICAgaWYgKFwic2V0QWxsXCIgaW4gY29va2llcykge1xuICAgICAgICAgICAgICAgIHNldEFsbCA9IGNvb2tpZXMuc2V0QWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNTZXJ2ZXJDbGllbnQpIHtcbiAgICAgICAgICAgICAgICBzZXRBbGwgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcIkBzdXBhYmFzZS9zc3I6IGNyZWF0ZVNlcnZlckNsaWVudCB3YXMgY29uZmlndXJlZCB3aXRob3V0IHRoZSBzZXRBbGwgY29va2llIG1ldGhvZCwgYnV0IHRoZSBjbGllbnQgbmVlZHMgdG8gc2V0IGNvb2tpZXMuIFRoaXMgY2FuIGxlYWQgdG8gaXNzdWVzIHN1Y2ggYXMgcmFuZG9tIGxvZ291dHMsIGVhcmx5IHNlc3Npb24gdGVybWluYXRpb24gb3IgaW5jcmVhc2VkIHRva2VuIHJlZnJlc2ggcmVxdWVzdHMuIElmIGluIE5leHRKUywgY2hlY2sgeW91ciBtaWRkbGV3YXJlLnRzIGZpbGUsIHJvdXRlIGhhbmRsZXJzIGFuZCBzZXJ2ZXIgYWN0aW9ucyBmb3IgY29ycmVjdG5lc3MuXCIpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJAc3VwYWJhc2Uvc3NyOiBjcmVhdGVCcm93c2VyQ2xpZW50IHJlcXVpcmVzIGNvbmZpZ3VyaW5nIGJvdGggZ2V0QWxsIGFuZCBzZXRBbGwgY29va2llIG1ldGhvZHMgKGRlcHJlY2F0ZWQ6IGFsdGVybmF0aXZlbHkgYm90aCBnZXQsIHNldCBhbmQgcmVtb3ZlIGNhbiBiZSB1c2VkKVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5laXRoZXIgZ2V0IG5vciBnZXRBbGwgaXMgcHJlc2VudCBvbiBjb29raWVzLCBvbmx5IHdpbGwgb2NjdXIgaWYgcHVyZSBKYXZhU2NyaXB0IGlzIHVzZWQsIGJ1dCBjb29raWVzIGlzIGFuIG9iamVjdFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBAc3VwYWJhc2Uvc3NyOiAke2lzU2VydmVyQ2xpZW50ID8gXCJjcmVhdGVTZXJ2ZXJDbGllbnRcIiA6IFwiY3JlYXRlQnJvd3NlckNsaWVudFwifSByZXF1aXJlcyBjb25maWd1cmluZyBnZXRBbGwgYW5kIHNldEFsbCBjb29raWUgbWV0aG9kcyAoZGVwcmVjYXRlZDogYWx0ZXJuYXRpdmVseSB1c2UgZ2V0LCBzZXQgYW5kIHJlbW92ZSkuJHtpc0Jyb3dzZXIoKSA/IFwiIEFzIHRoaXMgaXMgY2FsbGVkIGluIGEgYnJvd3NlciBydW50aW1lLCBjb25zaWRlciByZW1vdmluZyB0aGUgY29va2llcyBvcHRpb24gb2JqZWN0IHRvIHVzZSB0aGUgZG9jdW1lbnQuY29va2llIEFQSSBhdXRvbWF0aWNhbGx5LlwiIDogXCJcIn1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICghaXNTZXJ2ZXJDbGllbnQgJiYgaXNCcm93c2VyKCkpIHtcbiAgICAgICAgLy8gVGhlIGVudmlyb25tZW50IGlzIGJyb3dzZXIsIHNvIHVzZSB0aGUgZG9jdW1lbnQuY29va2llIEFQSSB0byBpbXBsZW1lbnQgZ2V0QWxsIGFuZCBzZXRBbGwuXG4gICAgICAgIGNvbnN0IG5vSGludEdldEFsbCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlKGRvY3VtZW50LmNvb2tpZSk7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMocGFyc2VkKS5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcGFyc2VkW25hbWVdID8/IFwiXCIsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH07XG4gICAgICAgIGdldEFsbCA9ICgpID0+IG5vSGludEdldEFsbCgpO1xuICAgICAgICBzZXRBbGwgPSAoc2V0Q29va2llcykgPT4ge1xuICAgICAgICAgICAgc2V0Q29va2llcy5mb3JFYWNoKCh7IG5hbWUsIHZhbHVlLCBvcHRpb25zIH0pID0+IHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBzZXJpYWxpemUobmFtZSwgdmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzU2VydmVyQ2xpZW50KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkBzdXBhYmFzZS9zc3I6IGNyZWF0ZVNlcnZlckNsaWVudCBtdXN0IGJlIGluaXRpYWxpemVkIHdpdGggY29va2llIG9wdGlvbnMgdGhhdCBzcGVjaWZ5IGdldEFsbCBhbmQgc2V0QWxsIGZ1bmN0aW9ucyAoZGVwcmVjYXRlZCwgbm90IHJlY29tbWVuZGVkOiBhbHRlcm5hdGl2ZWx5IHVzZSBnZXQsIHNldCBhbmQgcmVtb3ZlKVwiKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIGdldHRpbmcgY29va2llcyB3aGVuIHRoZXJlJ3Mgbm8gd2luZG93IGJ1dCB3ZSdyZSBpbiBicm93c2VyIG1vZGUgY2FuIGJlIE9LLCBiZWNhdXNlIHRoZSBkZXZlbG9wZXIgcHJvYmFibHkgaXMgbm90IHVzaW5nIGF1dGggZnVuY3Rpb25zXG4gICAgICAgIGdldEFsbCA9ICgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gdGhpcyBpcyBOT1QgT0sgYmVjYXVzZSB0aGUgZGV2ZWxvcGVyIGlzIHVzaW5nIGF1dGggZnVuY3Rpb25zIHRoYXQgcmVxdWlyZSBzZXR0aW5nIHNvbWUgc3RhdGUsIHNvIHRoYXQgbXVzdCBlcnJvciBvdXRcbiAgICAgICAgc2V0QWxsID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQHN1cGFiYXNlL3NzcjogY3JlYXRlQnJvd3NlckNsaWVudCBpbiBub24tYnJvd3NlciBydW50aW1lcyAoaW5jbHVkaW5nIE5leHQuanMgcHJlLXJlbmRlcmluZyBtb2RlKSB3YXMgbm90IGluaXRpYWxpemVkIGNvb2tpZSBvcHRpb25zIHRoYXQgc3BlY2lmeSBnZXRBbGwgYW5kIHNldEFsbCBmdW5jdGlvbnMgKGRlcHJlY2F0ZWQ6IGFsdGVybmF0aXZlbHkgdXNlIGdldCwgc2V0IGFuZCByZW1vdmUpLCBidXQgdGhleSB3ZXJlIG5lZWRlZFwiKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgaWYgKCFpc1NlcnZlckNsaWVudCkge1xuICAgICAgICAvLyBUaGlzIGlzIHRoZSBzdG9yYWdlIGNsaWVudCB0byBiZSB1c2VkIGluIGJyb3dzZXJzLiBJdCBvbmx5XG4gICAgICAgIC8vIHdvcmtzIG9uIHRoZSBjb29raWVzIGFic3RyYWN0aW9uLCB1bmxpa2UgdGhlIHNlcnZlciBjbGllbnRcbiAgICAgICAgLy8gd2hpY2ggb25seSB1c2VzIGNvb2tpZXMgdG8gcmVhZCB0aGUgaW5pdGlhbCBzdGF0ZS4gV2hlbiBhblxuICAgICAgICAvLyBpdGVtIGlzIHNldCwgY29va2llcyBhcmUgYm90aCBjbGVhcmVkIGFuZCBzZXQgdG8gdmFsdWVzIHNvXG4gICAgICAgIC8vIHRoYXQgc3RhbGUgY2h1bmtzIGFyZSBub3QgbGVmdCByZW1haW5pbmcuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBnZXRBbGwsIC8vIGZvciB0eXBlIGNvbnNpc3RlbmN5XG4gICAgICAgICAgICBzZXRBbGwsIC8vIGZvciB0eXBlIGNvbnNpc3RlbmN5XG4gICAgICAgICAgICBzZXRJdGVtcywgLy8gZm9yIHR5cGUgY29uc2lzdGVuY3lcbiAgICAgICAgICAgIHJlbW92ZWRJdGVtcywgLy8gZm9yIHR5cGUgY29uc2lzdGVuY3lcbiAgICAgICAgICAgIHN0b3JhZ2U6IHtcbiAgICAgICAgICAgICAgICBpc1NlcnZlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZ2V0SXRlbTogYXN5bmMgKGtleSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhbGxDb29raWVzID0gYXdhaXQgZ2V0QWxsKFtrZXldKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2h1bmtlZENvb2tpZSA9IGF3YWl0IGNvbWJpbmVDaHVua3Moa2V5LCBhc3luYyAoY2h1bmtOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb29raWUgPSBhbGxDb29raWVzPy5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gY2h1bmtOYW1lKSB8fCBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb29raWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb29raWUudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWNodW5rZWRDb29raWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWNvZGVkID0gY2h1bmtlZENvb2tpZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNodW5rZWRDb29raWUuc3RhcnRzV2l0aChCQVNFNjRfUFJFRklYKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCA9IHN0cmluZ0Zyb21CYXNlNjRVUkwoY2h1bmtlZENvb2tpZS5zdWJzdHJpbmcoQkFTRTY0X1BSRUZJWC5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVjb2RlZDtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHNldEl0ZW06IGFzeW5jIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFsbENvb2tpZXMgPSBhd2FpdCBnZXRBbGwoW2tleV0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb29raWVOYW1lcyA9IGFsbENvb2tpZXM/Lm1hcCgoeyBuYW1lIH0pID0+IG5hbWUpIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVDb29raWVzID0gbmV3IFNldChjb29raWVOYW1lcy5maWx0ZXIoKG5hbWUpID0+IGlzQ2h1bmtMaWtlKG5hbWUsIGtleSkpKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGVuY29kZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvb2tpZUVuY29kaW5nID09PSBcImJhc2U2NHVybFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmNvZGVkID0gQkFTRTY0X1BSRUZJWCArIHN0cmluZ1RvQmFzZTY0VVJMKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXRDb29raWVzID0gY3JlYXRlQ2h1bmtzKGtleSwgZW5jb2RlZCk7XG4gICAgICAgICAgICAgICAgICAgIHNldENvb2tpZXMuZm9yRWFjaCgoeyBuYW1lIH0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUNvb2tpZXMuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlQ29va2llT3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLkRFRkFVTFRfQ09PS0lFX09QVElPTlMsXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5vcHRpb25zPy5jb29raWVPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4QWdlOiAwLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXRDb29raWVPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uREVGQVVMVF9DT09LSUVfT1BUSU9OUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnM/LmNvb2tpZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhBZ2U6IERFRkFVTFRfQ09PS0lFX09QVElPTlMubWF4QWdlLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgTmV4dEpTIGNvb2tpZVN0b3JlIEFQSSBjYW4gZ2V0IGNvbmZ1c2VkIGlmIHRoZSBgbmFtZWAgZnJvbVxuICAgICAgICAgICAgICAgICAgICAvLyBvcHRpb25zLmNvb2tpZU9wdGlvbnMgbGVha3NcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlbW92ZUNvb2tpZU9wdGlvbnMubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNldENvb2tpZU9wdGlvbnMubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsVG9TZXQgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5bLi4ucmVtb3ZlQ29va2llc10ubWFwKChuYW1lKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogcmVtb3ZlQ29va2llT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnNldENvb2tpZXMubWFwKCh7IG5hbWUsIHZhbHVlIH0pID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBzZXRDb29raWVPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWxsVG9TZXQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgc2V0QWxsKGFsbFRvU2V0LCB7fSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlbW92ZUl0ZW06IGFzeW5jIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsQ29va2llcyA9IGF3YWl0IGdldEFsbChba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvb2tpZU5hbWVzID0gYWxsQ29va2llcz8ubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSkgfHwgW107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZUNvb2tpZXMgPSBjb29raWVOYW1lcy5maWx0ZXIoKG5hbWUpID0+IGlzQ2h1bmtMaWtlKG5hbWUsIGtleSkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVDb29raWVPcHRpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uREVGQVVMVF9DT09LSUVfT1BUSU9OUyxcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnM/LmNvb2tpZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhBZ2U6IDAsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBOZXh0SlMgY29va2llU3RvcmUgQVBJIGNhbiBnZXQgY29uZnVzZWQgaWYgdGhlIGBuYW1lYCBmcm9tXG4gICAgICAgICAgICAgICAgICAgIC8vIG9wdGlvbnMuY29va2llT3B0aW9ucyBsZWFrc1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVtb3ZlQ29va2llT3B0aW9ucy5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlQ29va2llcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBzZXRBbGwocmVtb3ZlQ29va2llcy5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogXCJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiByZW1vdmVDb29raWVPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLCB7fSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy8gVGhpcyBpcyB0aGUgc2VydmVyIGNsaWVudC4gSXQgb25seSB1c2VzIGdldEFsbCB0byByZWFkIHRoZSBpbml0aWFsXG4gICAgLy8gc3RhdGUuIEFueSBzdWJzZXF1ZW50IGNoYW5nZXMgdG8gdGhlIGl0ZW1zIGlzIHBlcnNpc3RlZCBpbiB0aGVcbiAgICAvLyBzZXRJdGVtcyBhbmQgcmVtb3ZlZEl0ZW1zIG9iamVjdHMuIGNyZWF0ZVNlcnZlckNsaWVudCAqbXVzdCogdXNlXG4gICAgLy8gZ2V0QWxsLCBzZXRBbGwgYW5kIHRoZSB2YWx1ZXMgaW4gc2V0SXRlbXMgYW5kIHJlbW92ZWRJdGVtcyB0b1xuICAgIC8vIHBlcnNpc3QgdGhlIGNoYW5nZXMgKmF0IG9uY2UqIHdoZW4gYXBwcm9wcmlhdGUgKHVzdWFsbHkgb25seSB3aGVuXG4gICAgLy8gdGhlIFRPS0VOX1JFRlJFU0hFRCwgVVNFUl9VUERBVEVEIG9yIFNJR05FRF9PVVQgZXZlbnRzIGFyZSBmaXJlZCBieVxuICAgIC8vIHRoZSBTdXBhYmFzZSBBdXRoIGNsaWVudCkuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgZ2V0QWxsLFxuICAgICAgICBzZXRBbGwsXG4gICAgICAgIHNldEl0ZW1zLFxuICAgICAgICByZW1vdmVkSXRlbXMsXG4gICAgICAgIHN0b3JhZ2U6IHtcbiAgICAgICAgICAgIC8vIHRvIHNpZ25hbCB0byB0aGUgbGlicmFyaWVzIHRoYXQgdGhlc2UgY29va2llcyBhcmVcbiAgICAgICAgICAgIC8vIGNvbWluZyBmcm9tIGEgc2VydmVyIGVudmlyb25tZW50IGFuZCB0aGVpciB2YWx1ZVxuICAgICAgICAgICAgLy8gc2hvdWxkIG5vdCBiZSB0cnVzdGVkXG4gICAgICAgICAgICBpc1NlcnZlcjogdHJ1ZSxcbiAgICAgICAgICAgIGdldEl0ZW06IGFzeW5jIChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNldEl0ZW1zW2tleV0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldEl0ZW1zW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZW1vdmVkSXRlbXNba2V5XSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgYWxsQ29va2llcyA9IGF3YWl0IGdldEFsbChba2V5XSk7XG4gICAgICAgICAgICAgICAgY29uc3QgY2h1bmtlZENvb2tpZSA9IGF3YWl0IGNvbWJpbmVDaHVua3Moa2V5LCBhc3luYyAoY2h1bmtOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvb2tpZSA9IGFsbENvb2tpZXM/LmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBjaHVua05hbWUpIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY29va2llKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29va2llLnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghY2h1bmtlZENvb2tpZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGRlY29kZWQgPSBjaHVua2VkQ29va2llO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2h1bmtlZENvb2tpZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICAgICAgICAgICAgICBjaHVua2VkQ29va2llLnN0YXJ0c1dpdGgoQkFTRTY0X1BSRUZJWCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVjb2RlZCA9IHN0cmluZ0Zyb21CYXNlNjRVUkwoY2h1bmtlZENvb2tpZS5zdWJzdHJpbmcoQkFTRTY0X1BSRUZJWC5sZW5ndGgpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlY29kZWQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0SXRlbTogYXN5bmMgKGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGFuIGBvbkF1dGhTdGF0ZUNoYW5nZWAgZXZlbnQgdGhhdCBjYW4gbGV0IHVzIGtub3cgdGhhdFxuICAgICAgICAgICAgICAgIC8vIHRoZSBQS0NFIGNvZGUgdmVyaWZpZXIgaXMgYmVpbmcgc2V0LiBUaGVyZWZvcmUsIGlmIHdlIHNlZSBpdCBiZWluZ1xuICAgICAgICAgICAgICAgIC8vIHNldCwgd2UgbmVlZCB0byBhcHBseSB0aGUgc3RvcmFnZSAoY2FsbCBgc2V0QWxsYCBzbyB0aGUgY29va2llIGlzXG4gICAgICAgICAgICAgICAgLy8gc2V0IHByb3Blcmx5KS5cbiAgICAgICAgICAgICAgICBpZiAoa2V5LmVuZHNXaXRoKFwiLWNvZGUtdmVyaWZpZXJcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgYXBwbHlTZXJ2ZXJTdG9yYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldEFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHByZXRlbmQgb25seSB0aGF0IHRoZSBjb2RlIHZlcmlmaWVyIHdhcyBzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW1zOiB7IFtrZXldOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJldGVuZCB0aGF0IG5vdGhpbmcgd2FzIHJlbW92ZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWRJdGVtczoge30sXG4gICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZU9wdGlvbnM6IG9wdGlvbnM/LmNvb2tpZU9wdGlvbnMgPz8gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZUVuY29kaW5nLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0SXRlbXNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSByZW1vdmVkSXRlbXNba2V5XTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZW1vdmVJdGVtOiBhc3luYyAoa2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gSW50ZW50aW9uYWxseSBub3QgYXBwbHlpbmcgdGhlIHN0b3JhZ2Ugd2hlbiB0aGUga2V5IGlzIHRoZSBQS0NFIGNvZGVcbiAgICAgICAgICAgICAgICAvLyB2ZXJpZmllciwgYXMgdXN1YWxseSByaWdodCBhZnRlciBpdCdzIHJlbW92ZWQgb3RoZXIgaXRlbXMgYXJlIHNldCxcbiAgICAgICAgICAgICAgICAvLyBzbyBhcHBsaWNhdGlvbiBvZiB0aGUgc3RvcmFnZSB3aWxsIGJlIGhhbmRsZWQgYnkgdGhlXG4gICAgICAgICAgICAgICAgLy8gYG9uQXV0aFN0YXRlQ2hhbmdlYCBjYWxsYmFjayB0aGF0IGZvbGxvd3MgcmVtb3ZhbCAtLSB1c3VhbGx5IGFzIHBhcnRcbiAgICAgICAgICAgICAgICAvLyBvZiB0aGUgYGV4Y2hhbmdlQ29kZUZvclNlc3Npb25gIGNhbGwuXG4gICAgICAgICAgICAgICAgZGVsZXRlIHNldEl0ZW1zW2tleV07XG4gICAgICAgICAgICAgICAgcmVtb3ZlZEl0ZW1zW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9O1xufVxuLyoqXG4gKiBXaGVuIGNyZWF0ZVNlcnZlckNsaWVudCBuZWVkcyB0byBhcHBseSB0aGUgY3JlYXRlZCBzdG9yYWdlIHRvIGNvb2tpZXMsIGl0XG4gKiBzaG91bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIHdoaWNoIGhhbmRsZXMgY29ycmVjbHkgc2V0dGluZyBjb29raWVzIGZvciBzdG9yZWRcbiAqIGFuZCByZW1vdmVkIGl0ZW1zIGluIHRoZSBzdG9yYWdlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlTZXJ2ZXJTdG9yYWdlKHsgZ2V0QWxsLCBzZXRBbGwsIHNldEl0ZW1zLCByZW1vdmVkSXRlbXMsIH0sIG9wdGlvbnMpIHtcbiAgICBjb25zdCBjb29raWVFbmNvZGluZyA9IG9wdGlvbnMuY29va2llRW5jb2Rpbmc7XG4gICAgY29uc3QgY29va2llT3B0aW9ucyA9IG9wdGlvbnMuY29va2llT3B0aW9ucyA/PyBudWxsO1xuICAgIGNvbnN0IGFsbENvb2tpZXMgPSBhd2FpdCBnZXRBbGwoW1xuICAgICAgICAuLi4oc2V0SXRlbXMgPyBPYmplY3Qua2V5cyhzZXRJdGVtcykgOiBbXSksXG4gICAgICAgIC4uLihyZW1vdmVkSXRlbXMgPyBPYmplY3Qua2V5cyhyZW1vdmVkSXRlbXMpIDogW10pLFxuICAgIF0pO1xuICAgIGNvbnN0IGNvb2tpZU5hbWVzID0gYWxsQ29va2llcz8ubWFwKCh7IG5hbWUgfSkgPT4gbmFtZSkgfHwgW107XG4gICAgY29uc3QgcmVtb3ZlQ29va2llcyA9IE9iamVjdC5rZXlzKHJlbW92ZWRJdGVtcykuZmxhdE1hcCgoaXRlbU5hbWUpID0+IHtcbiAgICAgICAgcmV0dXJuIGNvb2tpZU5hbWVzLmZpbHRlcigobmFtZSkgPT4gaXNDaHVua0xpa2UobmFtZSwgaXRlbU5hbWUpKTtcbiAgICB9KTtcbiAgICBjb25zdCBzZXRDb29raWVzID0gT2JqZWN0LmtleXMoc2V0SXRlbXMpLmZsYXRNYXAoKGl0ZW1OYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbW92ZUV4aXN0aW5nQ29va2llc0Zvckl0ZW0gPSBuZXcgU2V0KGNvb2tpZU5hbWVzLmZpbHRlcigobmFtZSkgPT4gaXNDaHVua0xpa2UobmFtZSwgaXRlbU5hbWUpKSk7XG4gICAgICAgIGxldCBlbmNvZGVkID0gc2V0SXRlbXNbaXRlbU5hbWVdO1xuICAgICAgICBpZiAoY29va2llRW5jb2RpbmcgPT09IFwiYmFzZTY0dXJsXCIpIHtcbiAgICAgICAgICAgIGVuY29kZWQgPSBCQVNFNjRfUFJFRklYICsgc3RyaW5nVG9CYXNlNjRVUkwoZW5jb2RlZCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2h1bmtzID0gY3JlYXRlQ2h1bmtzKGl0ZW1OYW1lLCBlbmNvZGVkKTtcbiAgICAgICAgY2h1bmtzLmZvckVhY2goKGNodW5rKSA9PiB7XG4gICAgICAgICAgICByZW1vdmVFeGlzdGluZ0Nvb2tpZXNGb3JJdGVtLmRlbGV0ZShjaHVuay5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJlbW92ZUNvb2tpZXMucHVzaCguLi5yZW1vdmVFeGlzdGluZ0Nvb2tpZXNGb3JJdGVtKTtcbiAgICAgICAgcmV0dXJuIGNodW5rcztcbiAgICB9KTtcbiAgICBjb25zdCByZW1vdmVDb29raWVPcHRpb25zID0ge1xuICAgICAgICAuLi5ERUZBVUxUX0NPT0tJRV9PUFRJT05TLFxuICAgICAgICAuLi5jb29raWVPcHRpb25zLFxuICAgICAgICBtYXhBZ2U6IDAsXG4gICAgfTtcbiAgICBjb25zdCBzZXRDb29raWVPcHRpb25zID0ge1xuICAgICAgICAuLi5ERUZBVUxUX0NPT0tJRV9PUFRJT05TLFxuICAgICAgICAuLi5jb29raWVPcHRpb25zLFxuICAgICAgICBtYXhBZ2U6IERFRkFVTFRfQ09PS0lFX09QVElPTlMubWF4QWdlLFxuICAgIH07XG4gICAgLy8gdGhlIE5leHRKUyBjb29raWVTdG9yZSBBUEkgY2FuIGdldCBjb25mdXNlZCBpZiB0aGUgYG5hbWVgIGZyb21cbiAgICAvLyBvcHRpb25zLmNvb2tpZU9wdGlvbnMgbGVha3NcbiAgICBkZWxldGUgcmVtb3ZlQ29va2llT3B0aW9ucy5uYW1lO1xuICAgIGRlbGV0ZSBzZXRDb29raWVPcHRpb25zLm5hbWU7XG4gICAgYXdhaXQgc2V0QWxsKFtcbiAgICAgICAgLi4ucmVtb3ZlQ29va2llcy5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmFsdWU6IFwiXCIsXG4gICAgICAgICAgICBvcHRpb25zOiByZW1vdmVDb29raWVPcHRpb25zLFxuICAgICAgICB9KSksXG4gICAgICAgIC4uLnNldENvb2tpZXMubWFwKCh7IG5hbWUsIHZhbHVlIH0pID0+ICh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBvcHRpb25zOiBzZXRDb29raWVPcHRpb25zLFxuICAgICAgICB9KSksXG4gICAgXSwge1xuICAgICAgICBcIkNhY2hlLUNvbnRyb2xcIjogXCJwcml2YXRlLCBuby1jYWNoZSwgbm8tc3RvcmUsIG11c3QtcmV2YWxpZGF0ZSwgbWF4LWFnZT0wXCIsXG4gICAgICAgIEV4cGlyZXM6IFwiMFwiLFxuICAgICAgICBQcmFnbWE6IFwibm8tY2FjaGVcIixcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvb2tpZXMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/cookies.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/createBrowserClient.js":
|
||
/*!***********************************************************************!*\
|
||
!*** ./node_modules/@supabase/ssr/dist/module/createBrowserClient.js ***!
|
||
\***********************************************************************/
|
||
/***/ ((__unused_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 */ createBrowserClient: () => (/* binding */ createBrowserClient)\n/* harmony export */ });\n/* harmony import */ var _supabase_supabase_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @supabase/supabase-js */ \"(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/index.mjs\");\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./version */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/version.js\");\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/index.js\");\n/* harmony import */ var _cookies__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./cookies */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/cookies.js\");\n\n\n\n\nlet cachedBrowserClient;\nfunction createBrowserClient(supabaseUrl, supabaseKey, options) {\n // singleton client is created only if isSingleton is set to true, or if isSingleton is not defined and we detect a browser\n const shouldUseSingleton = options?.isSingleton === true ||\n ((!options || !(\"isSingleton\" in options)) && (0,_utils__WEBPACK_IMPORTED_MODULE_1__.isBrowser)());\n if (shouldUseSingleton && cachedBrowserClient) {\n return cachedBrowserClient;\n }\n if (!supabaseUrl || !supabaseKey) {\n throw new Error(`@supabase/ssr: Your project's URL and API key are required to create a Supabase client!\\n\\nCheck your Supabase project's API settings to find these values\\n\\nhttps://supabase.com/dashboard/project/_/settings/api`);\n }\n const { storage } = (0,_cookies__WEBPACK_IMPORTED_MODULE_2__.createStorageFromOptions)({\n ...options,\n cookieEncoding: options?.cookieEncoding ?? \"base64url\",\n }, false);\n const client = (0,_supabase_supabase_js__WEBPACK_IMPORTED_MODULE_3__.createClient)(supabaseUrl, supabaseKey, {\n // TODO: resolve type error\n ...options,\n global: {\n ...options?.global,\n headers: {\n ...options?.global?.headers,\n \"X-Client-Info\": `supabase-ssr/${_version__WEBPACK_IMPORTED_MODULE_0__.VERSION} createBrowserClient`,\n },\n },\n auth: {\n ...options?.auth,\n ...(options?.cookieOptions?.name\n ? { storageKey: options.cookieOptions.name }\n : null),\n flowType: \"pkce\",\n autoRefreshToken: options?.auth?.autoRefreshToken ?? (0,_utils__WEBPACK_IMPORTED_MODULE_1__.isBrowser)(),\n detectSessionInUrl: options?.auth?.detectSessionInUrl ?? (0,_utils__WEBPACK_IMPORTED_MODULE_1__.isBrowser)(),\n persistSession: options?.auth?.persistSession ?? true,\n storage,\n ...(options?.cookies &&\n \"encode\" in options.cookies &&\n options.cookies.encode === \"tokens-only\"\n ? {\n userStorage: options?.auth?.userStorage ?? window.localStorage,\n }\n : null),\n },\n });\n if (shouldUseSingleton) {\n cachedBrowserClient = client;\n }\n return client;\n}\n//# sourceMappingURL=createBrowserClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3NyL2Rpc3QvbW9kdWxlL2NyZWF0ZUJyb3dzZXJDbGllbnQuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBc0Q7QUFDbEI7QUFDQTtBQUNpQjtBQUNyRDtBQUNPO0FBQ1A7QUFDQTtBQUNBLHNEQUFzRCxpREFBUztBQUMvRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFVBQVUsRUFBRSxrRUFBd0I7QUFDaEQ7QUFDQTtBQUNBLEtBQUs7QUFDTCxtQkFBbUIsbUVBQVk7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELDZDQUFPLEVBQUU7QUFDMUQsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBLGlFQUFpRSxpREFBUztBQUMxRSxxRUFBcUUsaURBQVM7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNULEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Nzci9kaXN0L21vZHVsZS9jcmVhdGVCcm93c2VyQ2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNsaWVudCwgfSBmcm9tIFwiQHN1cGFiYXNlL3N1cGFiYXNlLWpzXCI7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvblwiO1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IGNyZWF0ZVN0b3JhZ2VGcm9tT3B0aW9ucyB9IGZyb20gXCIuL2Nvb2tpZXNcIjtcbmxldCBjYWNoZWRCcm93c2VyQ2xpZW50O1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJyb3dzZXJDbGllbnQoc3VwYWJhc2VVcmwsIHN1cGFiYXNlS2V5LCBvcHRpb25zKSB7XG4gICAgLy8gc2luZ2xldG9uIGNsaWVudCBpcyBjcmVhdGVkIG9ubHkgaWYgaXNTaW5nbGV0b24gaXMgc2V0IHRvIHRydWUsIG9yIGlmIGlzU2luZ2xldG9uIGlzIG5vdCBkZWZpbmVkIGFuZCB3ZSBkZXRlY3QgYSBicm93c2VyXG4gICAgY29uc3Qgc2hvdWxkVXNlU2luZ2xldG9uID0gb3B0aW9ucz8uaXNTaW5nbGV0b24gPT09IHRydWUgfHxcbiAgICAgICAgKCghb3B0aW9ucyB8fCAhKFwiaXNTaW5nbGV0b25cIiBpbiBvcHRpb25zKSkgJiYgaXNCcm93c2VyKCkpO1xuICAgIGlmIChzaG91bGRVc2VTaW5nbGV0b24gJiYgY2FjaGVkQnJvd3NlckNsaWVudCkge1xuICAgICAgICByZXR1cm4gY2FjaGVkQnJvd3NlckNsaWVudDtcbiAgICB9XG4gICAgaWYgKCFzdXBhYmFzZVVybCB8fCAhc3VwYWJhc2VLZXkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBAc3VwYWJhc2Uvc3NyOiBZb3VyIHByb2plY3QncyBVUkwgYW5kIEFQSSBrZXkgYXJlIHJlcXVpcmVkIHRvIGNyZWF0ZSBhIFN1cGFiYXNlIGNsaWVudCFcXG5cXG5DaGVjayB5b3VyIFN1cGFiYXNlIHByb2plY3QncyBBUEkgc2V0dGluZ3MgdG8gZmluZCB0aGVzZSB2YWx1ZXNcXG5cXG5odHRwczovL3N1cGFiYXNlLmNvbS9kYXNoYm9hcmQvcHJvamVjdC9fL3NldHRpbmdzL2FwaWApO1xuICAgIH1cbiAgICBjb25zdCB7IHN0b3JhZ2UgfSA9IGNyZWF0ZVN0b3JhZ2VGcm9tT3B0aW9ucyh7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGNvb2tpZUVuY29kaW5nOiBvcHRpb25zPy5jb29raWVFbmNvZGluZyA/PyBcImJhc2U2NHVybFwiLFxuICAgIH0sIGZhbHNlKTtcbiAgICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQoc3VwYWJhc2VVcmwsIHN1cGFiYXNlS2V5LCB7XG4gICAgICAgIC8vIFRPRE86IHJlc29sdmUgdHlwZSBlcnJvclxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBnbG9iYWw6IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnM/Lmdsb2JhbCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zPy5nbG9iYWw/LmhlYWRlcnMsXG4gICAgICAgICAgICAgICAgXCJYLUNsaWVudC1JbmZvXCI6IGBzdXBhYmFzZS1zc3IvJHtWRVJTSU9OfSBjcmVhdGVCcm93c2VyQ2xpZW50YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGF1dGg6IHtcbiAgICAgICAgICAgIC4uLm9wdGlvbnM/LmF1dGgsXG4gICAgICAgICAgICAuLi4ob3B0aW9ucz8uY29va2llT3B0aW9ucz8ubmFtZVxuICAgICAgICAgICAgICAgID8geyBzdG9yYWdlS2V5OiBvcHRpb25zLmNvb2tpZU9wdGlvbnMubmFtZSB9XG4gICAgICAgICAgICAgICAgOiBudWxsKSxcbiAgICAgICAgICAgIGZsb3dUeXBlOiBcInBrY2VcIixcbiAgICAgICAgICAgIGF1dG9SZWZyZXNoVG9rZW46IG9wdGlvbnM/LmF1dGg/LmF1dG9SZWZyZXNoVG9rZW4gPz8gaXNCcm93c2VyKCksXG4gICAgICAgICAgICBkZXRlY3RTZXNzaW9uSW5Vcmw6IG9wdGlvbnM/LmF1dGg/LmRldGVjdFNlc3Npb25JblVybCA/PyBpc0Jyb3dzZXIoKSxcbiAgICAgICAgICAgIHBlcnNpc3RTZXNzaW9uOiBvcHRpb25zPy5hdXRoPy5wZXJzaXN0U2Vzc2lvbiA/PyB0cnVlLFxuICAgICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zPy5jb29raWVzICYmXG4gICAgICAgICAgICAgICAgXCJlbmNvZGVcIiBpbiBvcHRpb25zLmNvb2tpZXMgJiZcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvb2tpZXMuZW5jb2RlID09PSBcInRva2Vucy1vbmx5XCJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgdXNlclN0b3JhZ2U6IG9wdGlvbnM/LmF1dGg/LnVzZXJTdG9yYWdlID8/IHdpbmRvdy5sb2NhbFN0b3JhZ2UsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbCksXG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgaWYgKHNob3VsZFVzZVNpbmdsZXRvbikge1xuICAgICAgICBjYWNoZWRCcm93c2VyQ2xpZW50ID0gY2xpZW50O1xuICAgIH1cbiAgICByZXR1cm4gY2xpZW50O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlQnJvd3NlckNsaWVudC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/createBrowserClient.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/createServerClient.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/@supabase/ssr/dist/module/createServerClient.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((__unused_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 */ createServerClient: () => (/* binding */ createServerClient)\n/* harmony export */ });\n/* harmony import */ var _supabase_supabase_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @supabase/supabase-js */ \"(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/index.mjs\");\n/* harmony import */ var _version__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./version */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/version.js\");\n/* harmony import */ var _cookies__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cookies */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/cookies.js\");\n/* harmony import */ var _utils_helpers__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/helpers */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/helpers.js\");\n\n\n\n\nfunction createServerClient(supabaseUrl, supabaseKey, options) {\n if (!supabaseUrl || !supabaseKey) {\n throw new Error(`Your project's URL and Key are required to create a Supabase client!\\n\\nCheck your Supabase project's API settings to find these values\\n\\nhttps://supabase.com/dashboard/project/_/settings/api`);\n }\n const { storage, getAll, setAll, setItems, removedItems } = (0,_cookies__WEBPACK_IMPORTED_MODULE_1__.createStorageFromOptions)({\n ...options,\n cookieEncoding: options?.cookieEncoding ?? \"base64url\",\n }, true);\n const client = (0,_supabase_supabase_js__WEBPACK_IMPORTED_MODULE_3__.createClient)(supabaseUrl, supabaseKey, {\n // TODO: resolve type error\n ...options,\n global: {\n ...options?.global,\n headers: {\n ...options?.global?.headers,\n \"X-Client-Info\": `supabase-ssr/${_version__WEBPACK_IMPORTED_MODULE_0__.VERSION} createServerClient`,\n },\n },\n auth: {\n ...(options?.cookieOptions?.name\n ? { storageKey: options.cookieOptions.name }\n : null),\n ...options?.auth,\n flowType: \"pkce\",\n autoRefreshToken: false,\n detectSessionInUrl: false,\n persistSession: true,\n skipAutoInitialize: true,\n storage,\n ...(options?.cookies &&\n \"encode\" in options.cookies &&\n options.cookies.encode === \"tokens-only\"\n ? {\n userStorage: options?.auth?.userStorage ?? (0,_utils_helpers__WEBPACK_IMPORTED_MODULE_2__.memoryLocalStorageAdapter)(),\n }\n : null),\n },\n });\n client.auth.onAuthStateChange(async (event) => {\n // The SIGNED_IN event is fired very often, but we don't need to\n // apply the storage each time it fires, only if there are changes\n // that need to be set -- which is if setItems / removeItems have\n // data.\n const hasStorageChanges = Object.keys(setItems).length > 0 || Object.keys(removedItems).length > 0;\n if (hasStorageChanges &&\n (event === \"SIGNED_IN\" ||\n event === \"TOKEN_REFRESHED\" ||\n event === \"USER_UPDATED\" ||\n event === \"PASSWORD_RECOVERY\" ||\n event === \"SIGNED_OUT\" ||\n event === \"MFA_CHALLENGE_VERIFIED\")) {\n await (0,_cookies__WEBPACK_IMPORTED_MODULE_1__.applyServerStorage)({ getAll, setAll, setItems, removedItems }, {\n cookieOptions: options?.cookieOptions ?? null,\n cookieEncoding: options?.cookieEncoding ?? \"base64url\",\n });\n }\n });\n return client;\n}\n//# sourceMappingURL=createServerClient.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3NyL2Rpc3QvbW9kdWxlL2NyZWF0ZVNlcnZlckNsaWVudC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFzRDtBQUNsQjtBQUNxQztBQUNiO0FBQ3JEO0FBQ1A7QUFDQTtBQUNBO0FBQ0EsWUFBWSxrREFBa0QsRUFBRSxrRUFBd0I7QUFDeEY7QUFDQTtBQUNBLEtBQUs7QUFDTCxtQkFBbUIsbUVBQVk7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaURBQWlELDZDQUFPLEVBQUU7QUFDMUQsYUFBYTtBQUNiLFNBQVM7QUFDVDtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEQUErRCx5RUFBeUI7QUFDeEY7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsNERBQWtCLEdBQUcsd0NBQXdDO0FBQy9FO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zc3IvZGlzdC9tb2R1bGUvY3JlYXRlU2VydmVyQ2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUNsaWVudCwgfSBmcm9tIFwiQHN1cGFiYXNlL3N1cGFiYXNlLWpzXCI7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvblwiO1xuaW1wb3J0IHsgY3JlYXRlU3RvcmFnZUZyb21PcHRpb25zLCBhcHBseVNlcnZlclN0b3JhZ2UgfSBmcm9tIFwiLi9jb29raWVzXCI7XG5pbXBvcnQgeyBtZW1vcnlMb2NhbFN0b3JhZ2VBZGFwdGVyIH0gZnJvbSBcIi4vdXRpbHMvaGVscGVyc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNlcnZlckNsaWVudChzdXBhYmFzZVVybCwgc3VwYWJhc2VLZXksIG9wdGlvbnMpIHtcbiAgICBpZiAoIXN1cGFiYXNlVXJsIHx8ICFzdXBhYmFzZUtleSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFlvdXIgcHJvamVjdCdzIFVSTCBhbmQgS2V5IGFyZSByZXF1aXJlZCB0byBjcmVhdGUgYSBTdXBhYmFzZSBjbGllbnQhXFxuXFxuQ2hlY2sgeW91ciBTdXBhYmFzZSBwcm9qZWN0J3MgQVBJIHNldHRpbmdzIHRvIGZpbmQgdGhlc2UgdmFsdWVzXFxuXFxuaHR0cHM6Ly9zdXBhYmFzZS5jb20vZGFzaGJvYXJkL3Byb2plY3QvXy9zZXR0aW5ncy9hcGlgKTtcbiAgICB9XG4gICAgY29uc3QgeyBzdG9yYWdlLCBnZXRBbGwsIHNldEFsbCwgc2V0SXRlbXMsIHJlbW92ZWRJdGVtcyB9ID0gY3JlYXRlU3RvcmFnZUZyb21PcHRpb25zKHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgY29va2llRW5jb2Rpbmc6IG9wdGlvbnM/LmNvb2tpZUVuY29kaW5nID8/IFwiYmFzZTY0dXJsXCIsXG4gICAgfSwgdHJ1ZSk7XG4gICAgY29uc3QgY2xpZW50ID0gY3JlYXRlQ2xpZW50KHN1cGFiYXNlVXJsLCBzdXBhYmFzZUtleSwge1xuICAgICAgICAvLyBUT0RPOiByZXNvbHZlIHR5cGUgZXJyb3JcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgZ2xvYmFsOiB7XG4gICAgICAgICAgICAuLi5vcHRpb25zPy5nbG9iYWwsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucz8uZ2xvYmFsPy5oZWFkZXJzLFxuICAgICAgICAgICAgICAgIFwiWC1DbGllbnQtSW5mb1wiOiBgc3VwYWJhc2Utc3NyLyR7VkVSU0lPTn0gY3JlYXRlU2VydmVyQ2xpZW50YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGF1dGg6IHtcbiAgICAgICAgICAgIC4uLihvcHRpb25zPy5jb29raWVPcHRpb25zPy5uYW1lXG4gICAgICAgICAgICAgICAgPyB7IHN0b3JhZ2VLZXk6IG9wdGlvbnMuY29va2llT3B0aW9ucy5uYW1lIH1cbiAgICAgICAgICAgICAgICA6IG51bGwpLFxuICAgICAgICAgICAgLi4ub3B0aW9ucz8uYXV0aCxcbiAgICAgICAgICAgIGZsb3dUeXBlOiBcInBrY2VcIixcbiAgICAgICAgICAgIGF1dG9SZWZyZXNoVG9rZW46IGZhbHNlLFxuICAgICAgICAgICAgZGV0ZWN0U2Vzc2lvbkluVXJsOiBmYWxzZSxcbiAgICAgICAgICAgIHBlcnNpc3RTZXNzaW9uOiB0cnVlLFxuICAgICAgICAgICAgc2tpcEF1dG9Jbml0aWFsaXplOiB0cnVlLFxuICAgICAgICAgICAgc3RvcmFnZSxcbiAgICAgICAgICAgIC4uLihvcHRpb25zPy5jb29raWVzICYmXG4gICAgICAgICAgICAgICAgXCJlbmNvZGVcIiBpbiBvcHRpb25zLmNvb2tpZXMgJiZcbiAgICAgICAgICAgICAgICBvcHRpb25zLmNvb2tpZXMuZW5jb2RlID09PSBcInRva2Vucy1vbmx5XCJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgdXNlclN0b3JhZ2U6IG9wdGlvbnM/LmF1dGg/LnVzZXJTdG9yYWdlID8/IG1lbW9yeUxvY2FsU3RvcmFnZUFkYXB0ZXIoKSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsKSxcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICBjbGllbnQuYXV0aC5vbkF1dGhTdGF0ZUNoYW5nZShhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgLy8gVGhlIFNJR05FRF9JTiBldmVudCBpcyBmaXJlZCB2ZXJ5IG9mdGVuLCBidXQgd2UgZG9uJ3QgbmVlZCB0b1xuICAgICAgICAvLyBhcHBseSB0aGUgc3RvcmFnZSBlYWNoIHRpbWUgaXQgZmlyZXMsIG9ubHkgaWYgdGhlcmUgYXJlIGNoYW5nZXNcbiAgICAgICAgLy8gdGhhdCBuZWVkIHRvIGJlIHNldCAtLSB3aGljaCBpcyBpZiBzZXRJdGVtcyAvIHJlbW92ZUl0ZW1zIGhhdmVcbiAgICAgICAgLy8gZGF0YS5cbiAgICAgICAgY29uc3QgaGFzU3RvcmFnZUNoYW5nZXMgPSBPYmplY3Qua2V5cyhzZXRJdGVtcykubGVuZ3RoID4gMCB8fCBPYmplY3Qua2V5cyhyZW1vdmVkSXRlbXMpLmxlbmd0aCA+IDA7XG4gICAgICAgIGlmIChoYXNTdG9yYWdlQ2hhbmdlcyAmJlxuICAgICAgICAgICAgKGV2ZW50ID09PSBcIlNJR05FRF9JTlwiIHx8XG4gICAgICAgICAgICAgICAgZXZlbnQgPT09IFwiVE9LRU5fUkVGUkVTSEVEXCIgfHxcbiAgICAgICAgICAgICAgICBldmVudCA9PT0gXCJVU0VSX1VQREFURURcIiB8fFxuICAgICAgICAgICAgICAgIGV2ZW50ID09PSBcIlBBU1NXT1JEX1JFQ09WRVJZXCIgfHxcbiAgICAgICAgICAgICAgICBldmVudCA9PT0gXCJTSUdORURfT1VUXCIgfHxcbiAgICAgICAgICAgICAgICBldmVudCA9PT0gXCJNRkFfQ0hBTExFTkdFX1ZFUklGSUVEXCIpKSB7XG4gICAgICAgICAgICBhd2FpdCBhcHBseVNlcnZlclN0b3JhZ2UoeyBnZXRBbGwsIHNldEFsbCwgc2V0SXRlbXMsIHJlbW92ZWRJdGVtcyB9LCB7XG4gICAgICAgICAgICAgICAgY29va2llT3B0aW9uczogb3B0aW9ucz8uY29va2llT3B0aW9ucyA/PyBudWxsLFxuICAgICAgICAgICAgICAgIGNvb2tpZUVuY29kaW5nOiBvcHRpb25zPy5jb29raWVFbmNvZGluZyA/PyBcImJhc2U2NHVybFwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gY2xpZW50O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y3JlYXRlU2VydmVyQ2xpZW50LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/createServerClient.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/index.js":
|
||
/*!*********************************************************!*\
|
||
!*** ./node_modules/@supabase/ssr/dist/module/index.js ***!
|
||
\*********************************************************/
|
||
/***/ ((__unused_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 */ DEFAULT_COOKIE_OPTIONS: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.DEFAULT_COOKIE_OPTIONS),\n/* harmony export */ MAX_CHUNK_SIZE: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.MAX_CHUNK_SIZE),\n/* harmony export */ codepointToUTF8: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.codepointToUTF8),\n/* harmony export */ combineChunks: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.combineChunks),\n/* harmony export */ createBrowserClient: () => (/* reexport safe */ _createBrowserClient__WEBPACK_IMPORTED_MODULE_0__.createBrowserClient),\n/* harmony export */ createChunks: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.createChunks),\n/* harmony export */ createServerClient: () => (/* reexport safe */ _createServerClient__WEBPACK_IMPORTED_MODULE_1__.createServerClient),\n/* harmony export */ deleteChunks: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.deleteChunks),\n/* harmony export */ isBrowser: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.isBrowser),\n/* harmony export */ isChunkLike: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.isChunkLike),\n/* harmony export */ memoryLocalStorageAdapter: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.memoryLocalStorageAdapter),\n/* harmony export */ parse: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.parse),\n/* harmony export */ parseCookieHeader: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.parseCookieHeader),\n/* harmony export */ serialize: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.serialize),\n/* harmony export */ serializeCookieHeader: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.serializeCookieHeader),\n/* harmony export */ stringFromBase64URL: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.stringFromBase64URL),\n/* harmony export */ stringFromUTF8: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.stringFromUTF8),\n/* harmony export */ stringToBase64URL: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.stringToBase64URL),\n/* harmony export */ stringToUTF8: () => (/* reexport safe */ _utils__WEBPACK_IMPORTED_MODULE_3__.stringToUTF8)\n/* harmony export */ });\n/* harmony import */ var _createBrowserClient__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./createBrowserClient */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/createBrowserClient.js\");\n/* harmony import */ var _createServerClient__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./createServerClient */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/createServerClient.js\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./types */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/types.js\");\n/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_types__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _types__WEBPACK_IMPORTED_MODULE_2__) if([\"default\",\"createBrowserClient\",\"createServerClient\"].indexOf(__WEBPACK_IMPORT_KEY__) < 0) __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _types__WEBPACK_IMPORTED_MODULE_2__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/index.js\");\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n// Check if this package is being used as one of the deprecated auth-helpers packages\nif (typeof process !== \"undefined\" && process.env?.npm_package_name) {\n const packageName = process.env.npm_package_name;\n const deprecatedPackages = [\n \"@supabase/auth-helpers-nextjs\",\n \"@supabase/auth-helpers-react\",\n \"@supabase/auth-helpers-remix\",\n \"@supabase/auth-helpers-sveltekit\",\n ];\n if (deprecatedPackages.includes(packageName)) {\n console.warn(`\n╔════════════════════════════════════════════════════════════════════════════╗\n║ ⚠️ IMPORTANT: Package Consolidation Notice ║\n║ ║\n║ The ${packageName.padEnd(35)} package name is deprecated. ║\n║ ║\n║ You are now using @supabase/ssr - a unified solution for all frameworks. ║\n║ ║\n║ The auth-helpers packages have been consolidated into @supabase/ssr ║\n║ to provide better maintenance and consistent APIs across frameworks. ║\n║ ║\n║ Please update your package.json to use @supabase/ssr directly: ║\n║ npm uninstall ${packageName.padEnd(42)} ║\n║ npm install @supabase/ssr ║\n║ ║\n║ For more information, visit: ║\n║ https://supabase.com/docs/guides/auth/server-side ║\n╚════════════════════════════════════════════════════════════════════════════╝\n `);\n }\n}\n\n\n\n\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3NyL2Rpc3QvbW9kdWxlL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBLFdBQVcsT0FBTyxvQkFBb0IsT0FBTztBQUM3Qyx3QkFBd0IsT0FBTztBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUSx3QkFBd0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isd0JBQXdCO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDc0M7QUFDRDtBQUNiO0FBQ0E7QUFDeEIiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Nzci9kaXN0L21vZHVsZS9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDaGVjayBpZiB0aGlzIHBhY2thZ2UgaXMgYmVpbmcgdXNlZCBhcyBvbmUgb2YgdGhlIGRlcHJlY2F0ZWQgYXV0aC1oZWxwZXJzIHBhY2thZ2VzXG5pZiAodHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy5lbnY/Lm5wbV9wYWNrYWdlX25hbWUpIHtcbiAgICBjb25zdCBwYWNrYWdlTmFtZSA9IHByb2Nlc3MuZW52Lm5wbV9wYWNrYWdlX25hbWU7XG4gICAgY29uc3QgZGVwcmVjYXRlZFBhY2thZ2VzID0gW1xuICAgICAgICBcIkBzdXBhYmFzZS9hdXRoLWhlbHBlcnMtbmV4dGpzXCIsXG4gICAgICAgIFwiQHN1cGFiYXNlL2F1dGgtaGVscGVycy1yZWFjdFwiLFxuICAgICAgICBcIkBzdXBhYmFzZS9hdXRoLWhlbHBlcnMtcmVtaXhcIixcbiAgICAgICAgXCJAc3VwYWJhc2UvYXV0aC1oZWxwZXJzLXN2ZWx0ZWtpdFwiLFxuICAgIF07XG4gICAgaWYgKGRlcHJlY2F0ZWRQYWNrYWdlcy5pbmNsdWRlcyhwYWNrYWdlTmFtZSkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKGBcbuKVlOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVl1xu4pWRIOKaoO+4jyAgSU1QT1JUQU5UOiBQYWNrYWdlIENvbnNvbGlkYXRpb24gTm90aWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZFcbuKVkSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZFcbuKVkSBUaGUgJHtwYWNrYWdlTmFtZS5wYWRFbmQoMzUpfSBwYWNrYWdlIG5hbWUgaXMgZGVwcmVjYXRlZC4gIOKVkVxu4pWRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkVxu4pWRIFlvdSBhcmUgbm93IHVzaW5nIEBzdXBhYmFzZS9zc3IgLSBhIHVuaWZpZWQgc29sdXRpb24gZm9yIGFsbCBmcmFtZXdvcmtzLiAg4pWRXG7ilZEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pWRXG7ilZEgVGhlIGF1dGgtaGVscGVycyBwYWNrYWdlcyBoYXZlIGJlZW4gY29uc29saWRhdGVkIGludG8gQHN1cGFiYXNlL3NzciAgICAgICDilZFcbuKVkSB0byBwcm92aWRlIGJldHRlciBtYWludGVuYW5jZSBhbmQgY29uc2lzdGVudCBBUElzIGFjcm9zcyBmcmFtZXdvcmtzLiAgICAgIOKVkVxu4pWRICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkVxu4pWRIFBsZWFzZSB1cGRhdGUgeW91ciBwYWNrYWdlLmpzb24gdG8gdXNlIEBzdXBhYmFzZS9zc3IgZGlyZWN0bHk6ICAgICAgICAgICAg4pWRXG7ilZEgICBucG0gdW5pbnN0YWxsICR7cGFja2FnZU5hbWUucGFkRW5kKDQyKX0g4pWRXG7ilZEgICBucG0gaW5zdGFsbCBAc3VwYWJhc2Uvc3NyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZFcbuKVkSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDilZFcbuKVkSBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgdmlzaXQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIOKVkVxu4pWRIGh0dHBzOi8vc3VwYWJhc2UuY29tL2RvY3MvZ3VpZGVzL2F1dGgvc2VydmVyLXNpZGUgICAgICAgICAgICAgICAgICAgICAgICAg4pWRXG7ilZrilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZ1cbiAgICBgKTtcbiAgICB9XG59XG5leHBvcnQgKiBmcm9tIFwiLi9jcmVhdGVCcm93c2VyQ2xpZW50XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jcmVhdGVTZXJ2ZXJDbGllbnRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3R5cGVzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi91dGlsc1wiO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/types.js":
|
||
/*!*********************************************************!*\
|
||
!*** ./node_modules/@supabase/ssr/dist/module/types.js ***!
|
||
\*********************************************************/
|
||
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
eval(__webpack_require__.ts("//# sourceMappingURL=types.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3NyL2Rpc3QvbW9kdWxlL3R5cGVzLmpzIiwibWFwcGluZ3MiOiJBQUFBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zc3IvZGlzdC9tb2R1bGUvdHlwZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/types.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/base64url.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/@supabase/ssr/dist/module/utils/base64url.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((__unused_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 */ codepointToUTF8: () => (/* binding */ codepointToUTF8),\n/* harmony export */ stringFromBase64URL: () => (/* binding */ stringFromBase64URL),\n/* harmony export */ stringFromUTF8: () => (/* binding */ stringFromUTF8),\n/* harmony export */ stringToBase64URL: () => (/* binding */ stringToBase64URL),\n/* harmony export */ stringToUTF8: () => (/* binding */ stringToUTF8)\n/* harmony export */ });\n/**\n * Avoid modifying this file. It's part of\n * https://github.com/supabase-community/base64url-js. Submit all fixes on\n * that repo!\n */\n/**\n * An array of characters that encode 6 bits into a Base64-URL alphabet\n * character.\n */\nconst TO_BASE64URL = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\".split(\"\");\n/**\n * An array of characters that can appear in a Base64-URL encoded string but\n * should be ignored.\n */\nconst IGNORE_BASE64URL = \" \\t\\n\\r=\".split(\"\");\n/**\n * An array of 128 numbers that map a Base64-URL character to 6 bits, or if -2\n * used to skip the character, or if -1 used to error out.\n */\nconst FROM_BASE64URL = (() => {\n const charMap = new Array(128);\n for (let i = 0; i < charMap.length; i += 1) {\n charMap[i] = -1;\n }\n for (let i = 0; i < IGNORE_BASE64URL.length; i += 1) {\n charMap[IGNORE_BASE64URL[i].charCodeAt(0)] = -2;\n }\n for (let i = 0; i < TO_BASE64URL.length; i += 1) {\n charMap[TO_BASE64URL[i].charCodeAt(0)] = i;\n }\n return charMap;\n})();\n/**\n * Converts a JavaScript string (which may include any valid character) into a\n * Base64-URL encoded string. The string is first encoded in UTF-8 which is\n * then encoded as Base64-URL.\n *\n * @param str The string to convert.\n */\nfunction stringToBase64URL(str) {\n const base64 = [];\n let queue = 0;\n let queuedBits = 0;\n const emitter = (byte) => {\n queue = (queue << 8) | byte;\n queuedBits += 8;\n while (queuedBits >= 6) {\n const pos = (queue >> (queuedBits - 6)) & 63;\n base64.push(TO_BASE64URL[pos]);\n queuedBits -= 6;\n }\n };\n stringToUTF8(str, emitter);\n if (queuedBits > 0) {\n queue = queue << (6 - queuedBits);\n queuedBits = 6;\n while (queuedBits >= 6) {\n const pos = (queue >> (queuedBits - 6)) & 63;\n base64.push(TO_BASE64URL[pos]);\n queuedBits -= 6;\n }\n }\n return base64.join(\"\");\n}\n/**\n * Converts a Base64-URL encoded string into a JavaScript string. It is assumed\n * that the underlying string has been encoded as UTF-8.\n *\n * @param str The Base64-URL encoded string.\n */\nfunction stringFromBase64URL(str) {\n const conv = [];\n const emit = (codepoint) => {\n conv.push(String.fromCodePoint(codepoint));\n };\n const state = {\n utf8seq: 0,\n codepoint: 0,\n };\n let queue = 0;\n let queuedBits = 0;\n for (let i = 0; i < str.length; i += 1) {\n const codepoint = str.charCodeAt(i);\n const bits = FROM_BASE64URL[codepoint];\n if (bits > -1) {\n // valid Base64-URL character\n queue = (queue << 6) | bits;\n queuedBits += 6;\n while (queuedBits >= 8) {\n stringFromUTF8((queue >> (queuedBits - 8)) & 0xff, state, emit);\n queuedBits -= 8;\n }\n }\n else if (bits === -2) {\n // ignore spaces, tabs, newlines, =\n continue;\n }\n else {\n throw new Error(`Invalid Base64-URL character \"${str.at(i)}\" at position ${i}`);\n }\n }\n return conv.join(\"\");\n}\n/**\n * Converts a Unicode codepoint to a multi-byte UTF-8 sequence.\n *\n * @param codepoint The Unicode codepoint.\n * @param emit Function which will be called for each UTF-8 byte that represents the codepoint.\n */\nfunction codepointToUTF8(codepoint, emit) {\n if (codepoint <= 0x7f) {\n emit(codepoint);\n return;\n }\n else if (codepoint <= 0x7ff) {\n emit(0xc0 | (codepoint >> 6));\n emit(0x80 | (codepoint & 0x3f));\n return;\n }\n else if (codepoint <= 0xffff) {\n emit(0xe0 | (codepoint >> 12));\n emit(0x80 | ((codepoint >> 6) & 0x3f));\n emit(0x80 | (codepoint & 0x3f));\n return;\n }\n else if (codepoint <= 0x10ffff) {\n emit(0xf0 | (codepoint >> 18));\n emit(0x80 | ((codepoint >> 12) & 0x3f));\n emit(0x80 | ((codepoint >> 6) & 0x3f));\n emit(0x80 | (codepoint & 0x3f));\n return;\n }\n throw new Error(`Unrecognized Unicode codepoint: ${codepoint.toString(16)}`);\n}\n/**\n * Converts a JavaScript string to a sequence of UTF-8 bytes.\n *\n * @param str The string to convert to UTF-8.\n * @param emit Function which will be called for each UTF-8 byte of the string.\n */\nfunction stringToUTF8(str, emit) {\n for (let i = 0; i < str.length; i += 1) {\n let codepoint = str.charCodeAt(i);\n if (codepoint > 0xd7ff && codepoint <= 0xdbff) {\n // most UTF-16 codepoints are Unicode codepoints, except values in this\n // range where the next UTF-16 codepoint needs to be combined with the\n // current one to get the Unicode codepoint\n const highSurrogate = ((codepoint - 0xd800) * 0x400) & 0xffff;\n const lowSurrogate = (str.charCodeAt(i + 1) - 0xdc00) & 0xffff;\n codepoint = (lowSurrogate | highSurrogate) + 0x10000;\n i += 1;\n }\n codepointToUTF8(codepoint, emit);\n }\n}\n/**\n * Converts a UTF-8 byte to a Unicode codepoint.\n *\n * @param byte The UTF-8 byte next in the sequence.\n * @param state The shared state between consecutive UTF-8 bytes in the\n * sequence, an object with the shape `{ utf8seq: 0, codepoint: 0 }`.\n * @param emit Function which will be called for each codepoint.\n */\nfunction stringFromUTF8(byte, state, emit) {\n if (state.utf8seq === 0) {\n if (byte <= 0x7f) {\n emit(byte);\n return;\n }\n // count the number of 1 leading bits until you reach 0\n for (let leadingBit = 1; leadingBit < 6; leadingBit += 1) {\n if (((byte >> (7 - leadingBit)) & 1) === 0) {\n state.utf8seq = leadingBit;\n break;\n }\n }\n if (state.utf8seq === 2) {\n state.codepoint = byte & 31;\n }\n else if (state.utf8seq === 3) {\n state.codepoint = byte & 15;\n }\n else if (state.utf8seq === 4) {\n state.codepoint = byte & 7;\n }\n else {\n throw new Error(\"Invalid UTF-8 sequence\");\n }\n state.utf8seq -= 1;\n }\n else if (state.utf8seq > 0) {\n if (byte <= 0x7f) {\n throw new Error(\"Invalid UTF-8 sequence\");\n }\n state.codepoint = (state.codepoint << 6) | (byte & 63);\n state.utf8seq -= 1;\n if (state.utf8seq === 0) {\n emit(state.codepoint);\n }\n }\n}\n//# sourceMappingURL=base64url.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3NyL2Rpc3QvbW9kdWxlL3V0aWxzL2Jhc2U2NHVybC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixvQkFBb0I7QUFDeEM7QUFDQTtBQUNBLG9CQUFvQiw2QkFBNkI7QUFDakQ7QUFDQTtBQUNBLG9CQUFvQix5QkFBeUI7QUFDN0M7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CLGdCQUFnQjtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDZEQUE2RCxVQUFVLGdCQUFnQixFQUFFO0FBQ3pGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVEQUF1RCx1QkFBdUI7QUFDOUU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQLG9CQUFvQixnQkFBZ0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0RBQXNELDBCQUEwQjtBQUNoRjtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQ0FBaUMsZ0JBQWdCO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zc3IvZGlzdC9tb2R1bGUvdXRpbHMvYmFzZTY0dXJsLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXZvaWQgbW9kaWZ5aW5nIHRoaXMgZmlsZS4gSXQncyBwYXJ0IG9mXG4gKiBodHRwczovL2dpdGh1Yi5jb20vc3VwYWJhc2UtY29tbXVuaXR5L2Jhc2U2NHVybC1qcy4gIFN1Ym1pdCBhbGwgZml4ZXMgb25cbiAqIHRoYXQgcmVwbyFcbiAqL1xuLyoqXG4gKiBBbiBhcnJheSBvZiBjaGFyYWN0ZXJzIHRoYXQgZW5jb2RlIDYgYml0cyBpbnRvIGEgQmFzZTY0LVVSTCBhbHBoYWJldFxuICogY2hhcmFjdGVyLlxuICovXG5jb25zdCBUT19CQVNFNjRVUkwgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5LV9cIi5zcGxpdChcIlwiKTtcbi8qKlxuICogQW4gYXJyYXkgb2YgY2hhcmFjdGVycyB0aGF0IGNhbiBhcHBlYXIgaW4gYSBCYXNlNjQtVVJMIGVuY29kZWQgc3RyaW5nIGJ1dFxuICogc2hvdWxkIGJlIGlnbm9yZWQuXG4gKi9cbmNvbnN0IElHTk9SRV9CQVNFNjRVUkwgPSBcIiBcXHRcXG5cXHI9XCIuc3BsaXQoXCJcIik7XG4vKipcbiAqIEFuIGFycmF5IG9mIDEyOCBudW1iZXJzIHRoYXQgbWFwIGEgQmFzZTY0LVVSTCBjaGFyYWN0ZXIgdG8gNiBiaXRzLCBvciBpZiAtMlxuICogdXNlZCB0byBza2lwIHRoZSBjaGFyYWN0ZXIsIG9yIGlmIC0xIHVzZWQgdG8gZXJyb3Igb3V0LlxuICovXG5jb25zdCBGUk9NX0JBU0U2NFVSTCA9ICgoKSA9PiB7XG4gICAgY29uc3QgY2hhck1hcCA9IG5ldyBBcnJheSgxMjgpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhck1hcC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBjaGFyTWFwW2ldID0gLTE7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgSUdOT1JFX0JBU0U2NFVSTC5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBjaGFyTWFwW0lHTk9SRV9CQVNFNjRVUkxbaV0uY2hhckNvZGVBdCgwKV0gPSAtMjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBUT19CQVNFNjRVUkwubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgY2hhck1hcFtUT19CQVNFNjRVUkxbaV0uY2hhckNvZGVBdCgwKV0gPSBpO1xuICAgIH1cbiAgICByZXR1cm4gY2hhck1hcDtcbn0pKCk7XG4vKipcbiAqIENvbnZlcnRzIGEgSmF2YVNjcmlwdCBzdHJpbmcgKHdoaWNoIG1heSBpbmNsdWRlIGFueSB2YWxpZCBjaGFyYWN0ZXIpIGludG8gYVxuICogQmFzZTY0LVVSTCBlbmNvZGVkIHN0cmluZy4gVGhlIHN0cmluZyBpcyBmaXJzdCBlbmNvZGVkIGluIFVURi04IHdoaWNoIGlzXG4gKiB0aGVuIGVuY29kZWQgYXMgQmFzZTY0LVVSTC5cbiAqXG4gKiBAcGFyYW0gc3RyIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1RvQmFzZTY0VVJMKHN0cikge1xuICAgIGNvbnN0IGJhc2U2NCA9IFtdO1xuICAgIGxldCBxdWV1ZSA9IDA7XG4gICAgbGV0IHF1ZXVlZEJpdHMgPSAwO1xuICAgIGNvbnN0IGVtaXR0ZXIgPSAoYnl0ZSkgPT4ge1xuICAgICAgICBxdWV1ZSA9IChxdWV1ZSA8PCA4KSB8IGJ5dGU7XG4gICAgICAgIHF1ZXVlZEJpdHMgKz0gODtcbiAgICAgICAgd2hpbGUgKHF1ZXVlZEJpdHMgPj0gNikge1xuICAgICAgICAgICAgY29uc3QgcG9zID0gKHF1ZXVlID4+IChxdWV1ZWRCaXRzIC0gNikpICYgNjM7XG4gICAgICAgICAgICBiYXNlNjQucHVzaChUT19CQVNFNjRVUkxbcG9zXSk7XG4gICAgICAgICAgICBxdWV1ZWRCaXRzIC09IDY7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHN0cmluZ1RvVVRGOChzdHIsIGVtaXR0ZXIpO1xuICAgIGlmIChxdWV1ZWRCaXRzID4gMCkge1xuICAgICAgICBxdWV1ZSA9IHF1ZXVlIDw8ICg2IC0gcXVldWVkQml0cyk7XG4gICAgICAgIHF1ZXVlZEJpdHMgPSA2O1xuICAgICAgICB3aGlsZSAocXVldWVkQml0cyA+PSA2KSB7XG4gICAgICAgICAgICBjb25zdCBwb3MgPSAocXVldWUgPj4gKHF1ZXVlZEJpdHMgLSA2KSkgJiA2MztcbiAgICAgICAgICAgIGJhc2U2NC5wdXNoKFRPX0JBU0U2NFVSTFtwb3NdKTtcbiAgICAgICAgICAgIHF1ZXVlZEJpdHMgLT0gNjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYmFzZTY0LmpvaW4oXCJcIik7XG59XG4vKipcbiAqIENvbnZlcnRzIGEgQmFzZTY0LVVSTCBlbmNvZGVkIHN0cmluZyBpbnRvIGEgSmF2YVNjcmlwdCBzdHJpbmcuIEl0IGlzIGFzc3VtZWRcbiAqIHRoYXQgdGhlIHVuZGVybHlpbmcgc3RyaW5nIGhhcyBiZWVuIGVuY29kZWQgYXMgVVRGLTguXG4gKlxuICogQHBhcmFtIHN0ciBUaGUgQmFzZTY0LVVSTCBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ0Zyb21CYXNlNjRVUkwoc3RyKSB7XG4gICAgY29uc3QgY29udiA9IFtdO1xuICAgIGNvbnN0IGVtaXQgPSAoY29kZXBvaW50KSA9PiB7XG4gICAgICAgIGNvbnYucHVzaChTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlcG9pbnQpKTtcbiAgICB9O1xuICAgIGNvbnN0IHN0YXRlID0ge1xuICAgICAgICB1dGY4c2VxOiAwLFxuICAgICAgICBjb2RlcG9pbnQ6IDAsXG4gICAgfTtcbiAgICBsZXQgcXVldWUgPSAwO1xuICAgIGxldCBxdWV1ZWRCaXRzID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBjb25zdCBjb2RlcG9pbnQgPSBzdHIuY2hhckNvZGVBdChpKTtcbiAgICAgICAgY29uc3QgYml0cyA9IEZST01fQkFTRTY0VVJMW2NvZGVwb2ludF07XG4gICAgICAgIGlmIChiaXRzID4gLTEpIHtcbiAgICAgICAgICAgIC8vIHZhbGlkIEJhc2U2NC1VUkwgY2hhcmFjdGVyXG4gICAgICAgICAgICBxdWV1ZSA9IChxdWV1ZSA8PCA2KSB8IGJpdHM7XG4gICAgICAgICAgICBxdWV1ZWRCaXRzICs9IDY7XG4gICAgICAgICAgICB3aGlsZSAocXVldWVkQml0cyA+PSA4KSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nRnJvbVVURjgoKHF1ZXVlID4+IChxdWV1ZWRCaXRzIC0gOCkpICYgMHhmZiwgc3RhdGUsIGVtaXQpO1xuICAgICAgICAgICAgICAgIHF1ZXVlZEJpdHMgLT0gODtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChiaXRzID09PSAtMikge1xuICAgICAgICAgICAgLy8gaWdub3JlIHNwYWNlcywgdGFicywgbmV3bGluZXMsID1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEJhc2U2NC1VUkwgY2hhcmFjdGVyIFwiJHtzdHIuYXQoaSl9XCIgYXQgcG9zaXRpb24gJHtpfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb252LmpvaW4oXCJcIik7XG59XG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBjb2RlcG9pbnQgdG8gYSBtdWx0aS1ieXRlIFVURi04IHNlcXVlbmNlLlxuICpcbiAqIEBwYXJhbSBjb2RlcG9pbnQgVGhlIFVuaWNvZGUgY29kZXBvaW50LlxuICogQHBhcmFtIGVtaXQgICAgICBGdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBVVEYtOCBieXRlIHRoYXQgcmVwcmVzZW50cyB0aGUgY29kZXBvaW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29kZXBvaW50VG9VVEY4KGNvZGVwb2ludCwgZW1pdCkge1xuICAgIGlmIChjb2RlcG9pbnQgPD0gMHg3Zikge1xuICAgICAgICBlbWl0KGNvZGVwb2ludCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxzZSBpZiAoY29kZXBvaW50IDw9IDB4N2ZmKSB7XG4gICAgICAgIGVtaXQoMHhjMCB8IChjb2RlcG9pbnQgPj4gNikpO1xuICAgICAgICBlbWl0KDB4ODAgfCAoY29kZXBvaW50ICYgMHgzZikpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvZGVwb2ludCA8PSAweGZmZmYpIHtcbiAgICAgICAgZW1pdCgweGUwIHwgKGNvZGVwb2ludCA+PiAxMikpO1xuICAgICAgICBlbWl0KDB4ODAgfCAoKGNvZGVwb2ludCA+PiA2KSAmIDB4M2YpKTtcbiAgICAgICAgZW1pdCgweDgwIHwgKGNvZGVwb2ludCAmIDB4M2YpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb2RlcG9pbnQgPD0gMHgxMGZmZmYpIHtcbiAgICAgICAgZW1pdCgweGYwIHwgKGNvZGVwb2ludCA+PiAxOCkpO1xuICAgICAgICBlbWl0KDB4ODAgfCAoKGNvZGVwb2ludCA+PiAxMikgJiAweDNmKSk7XG4gICAgICAgIGVtaXQoMHg4MCB8ICgoY29kZXBvaW50ID4+IDYpICYgMHgzZikpO1xuICAgICAgICBlbWl0KDB4ODAgfCAoY29kZXBvaW50ICYgMHgzZikpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIFVuaWNvZGUgY29kZXBvaW50OiAke2NvZGVwb2ludC50b1N0cmluZygxNil9YCk7XG59XG4vKipcbiAqIENvbnZlcnRzIGEgSmF2YVNjcmlwdCBzdHJpbmcgdG8gYSBzZXF1ZW5jZSBvZiBVVEYtOCBieXRlcy5cbiAqXG4gKiBAcGFyYW0gc3RyICBUaGUgc3RyaW5nIHRvIGNvbnZlcnQgdG8gVVRGLTguXG4gKiBAcGFyYW0gZW1pdCBGdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBVVEYtOCBieXRlIG9mIHRoZSBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdUb1VURjgoc3RyLCBlbWl0KSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgbGV0IGNvZGVwb2ludCA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoY29kZXBvaW50ID4gMHhkN2ZmICYmIGNvZGVwb2ludCA8PSAweGRiZmYpIHtcbiAgICAgICAgICAgIC8vIG1vc3QgVVRGLTE2IGNvZGVwb2ludHMgYXJlIFVuaWNvZGUgY29kZXBvaW50cywgZXhjZXB0IHZhbHVlcyBpbiB0aGlzXG4gICAgICAgICAgICAvLyByYW5nZSB3aGVyZSB0aGUgbmV4dCBVVEYtMTYgY29kZXBvaW50IG5lZWRzIHRvIGJlIGNvbWJpbmVkIHdpdGggdGhlXG4gICAgICAgICAgICAvLyBjdXJyZW50IG9uZSB0byBnZXQgdGhlIFVuaWNvZGUgY29kZXBvaW50XG4gICAgICAgICAgICBjb25zdCBoaWdoU3Vycm9nYXRlID0gKChjb2RlcG9pbnQgLSAweGQ4MDApICogMHg0MDApICYgMHhmZmZmO1xuICAgICAgICAgICAgY29uc3QgbG93U3Vycm9nYXRlID0gKHN0ci5jaGFyQ29kZUF0KGkgKyAxKSAtIDB4ZGMwMCkgJiAweGZmZmY7XG4gICAgICAgICAgICBjb2RlcG9pbnQgPSAobG93U3Vycm9nYXRlIHwgaGlnaFN1cnJvZ2F0ZSkgKyAweDEwMDAwO1xuICAgICAgICAgICAgaSArPSAxO1xuICAgICAgICB9XG4gICAgICAgIGNvZGVwb2ludFRvVVRGOChjb2RlcG9pbnQsIGVtaXQpO1xuICAgIH1cbn1cbi8qKlxuICogQ29udmVydHMgYSBVVEYtOCBieXRlIHRvIGEgVW5pY29kZSBjb2RlcG9pbnQuXG4gKlxuICogQHBhcmFtIGJ5dGUgIFRoZSBVVEYtOCBieXRlIG5leHQgaW4gdGhlIHNlcXVlbmNlLlxuICogQHBhcmFtIHN0YXRlIFRoZSBzaGFyZWQgc3RhdGUgYmV0d2VlbiBjb25zZWN1dGl2ZSBVVEYtOCBieXRlcyBpbiB0aGVcbiAqICAgICAgICAgICAgICBzZXF1ZW5jZSwgYW4gb2JqZWN0IHdpdGggdGhlIHNoYXBlIGB7IHV0ZjhzZXE6IDAsIGNvZGVwb2ludDogMCB9YC5cbiAqIEBwYXJhbSBlbWl0ICBGdW5jdGlvbiB3aGljaCB3aWxsIGJlIGNhbGxlZCBmb3IgZWFjaCBjb2RlcG9pbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdGcm9tVVRGOChieXRlLCBzdGF0ZSwgZW1pdCkge1xuICAgIGlmIChzdGF0ZS51dGY4c2VxID09PSAwKSB7XG4gICAgICAgIGlmIChieXRlIDw9IDB4N2YpIHtcbiAgICAgICAgICAgIGVtaXQoYnl0ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gY291bnQgdGhlIG51bWJlciBvZiAxIGxlYWRpbmcgYml0cyB1bnRpbCB5b3UgcmVhY2ggMFxuICAgICAgICBmb3IgKGxldCBsZWFkaW5nQml0ID0gMTsgbGVhZGluZ0JpdCA8IDY7IGxlYWRpbmdCaXQgKz0gMSkge1xuICAgICAgICAgICAgaWYgKCgoYnl0ZSA+PiAoNyAtIGxlYWRpbmdCaXQpKSAmIDEpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgc3RhdGUudXRmOHNlcSA9IGxlYWRpbmdCaXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlLnV0ZjhzZXEgPT09IDIpIHtcbiAgICAgICAgICAgIHN0YXRlLmNvZGVwb2ludCA9IGJ5dGUgJiAzMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzdGF0ZS51dGY4c2VxID09PSAzKSB7XG4gICAgICAgICAgICBzdGF0ZS5jb2RlcG9pbnQgPSBieXRlICYgMTU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdGUudXRmOHNlcSA9PT0gNCkge1xuICAgICAgICAgICAgc3RhdGUuY29kZXBvaW50ID0gYnl0ZSAmIDc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIFVURi04IHNlcXVlbmNlXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLnV0ZjhzZXEgLT0gMTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3RhdGUudXRmOHNlcSA+IDApIHtcbiAgICAgICAgaWYgKGJ5dGUgPD0gMHg3Zikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBVVEYtOCBzZXF1ZW5jZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZS5jb2RlcG9pbnQgPSAoc3RhdGUuY29kZXBvaW50IDw8IDYpIHwgKGJ5dGUgJiA2Myk7XG4gICAgICAgIHN0YXRlLnV0ZjhzZXEgLT0gMTtcbiAgICAgICAgaWYgKHN0YXRlLnV0ZjhzZXEgPT09IDApIHtcbiAgICAgICAgICAgIGVtaXQoc3RhdGUuY29kZXBvaW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhc2U2NHVybC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/base64url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/chunker.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/@supabase/ssr/dist/module/utils/chunker.js ***!
|
||
\*****************************************************************/
|
||
/***/ ((__unused_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 */ MAX_CHUNK_SIZE: () => (/* binding */ MAX_CHUNK_SIZE),\n/* harmony export */ combineChunks: () => (/* binding */ combineChunks),\n/* harmony export */ createChunks: () => (/* binding */ createChunks),\n/* harmony export */ deleteChunks: () => (/* binding */ deleteChunks),\n/* harmony export */ isChunkLike: () => (/* binding */ isChunkLike)\n/* harmony export */ });\nconst MAX_CHUNK_SIZE = 3180;\nconst CHUNK_LIKE_REGEX = /^(.*)[.](0|[1-9][0-9]*)$/;\nfunction isChunkLike(cookieName, key) {\n if (cookieName === key) {\n return true;\n }\n const chunkLike = cookieName.match(CHUNK_LIKE_REGEX);\n if (chunkLike && chunkLike[1] === key) {\n return true;\n }\n return false;\n}\n/**\n * create chunks from a string and return an array of object\n */\nfunction createChunks(key, value, chunkSize) {\n const resolvedChunkSize = chunkSize ?? MAX_CHUNK_SIZE;\n let encodedValue = encodeURIComponent(value);\n if (encodedValue.length <= resolvedChunkSize) {\n return [{ name: key, value }];\n }\n const chunks = [];\n while (encodedValue.length > 0) {\n let encodedChunkHead = encodedValue.slice(0, resolvedChunkSize);\n const lastEscapePos = encodedChunkHead.lastIndexOf(\"%\");\n // Check if the last escaped character is truncated.\n if (lastEscapePos > resolvedChunkSize - 3) {\n // If so, reslice the string to exclude the whole escape sequence.\n // We only reduce the size of the string as the chunk must\n // be smaller than the chunk size.\n encodedChunkHead = encodedChunkHead.slice(0, lastEscapePos);\n }\n let valueHead = \"\";\n // Check if the chunk was split along a valid unicode boundary.\n while (encodedChunkHead.length > 0) {\n try {\n // Try to decode the chunk back and see if it is valid.\n // Stop when the chunk is valid.\n valueHead = decodeURIComponent(encodedChunkHead);\n break;\n }\n catch (error) {\n if (error instanceof URIError &&\n encodedChunkHead.at(-3) === \"%\" &&\n encodedChunkHead.length > 3) {\n encodedChunkHead = encodedChunkHead.slice(0, encodedChunkHead.length - 3);\n }\n else {\n throw error;\n }\n }\n }\n chunks.push(valueHead);\n encodedValue = encodedValue.slice(encodedChunkHead.length);\n }\n return chunks.map((value, i) => ({ name: `${key}.${i}`, value }));\n}\n// Get fully constructed chunks\nasync function combineChunks(key, retrieveChunk) {\n const value = await retrieveChunk(key);\n if (value) {\n return value;\n }\n let values = [];\n for (let i = 0;; i++) {\n const chunkName = `${key}.${i}`;\n const chunk = await retrieveChunk(chunkName);\n if (!chunk) {\n break;\n }\n values.push(chunk);\n }\n if (values.length > 0) {\n return values.join(\"\");\n }\n return null;\n}\nasync function deleteChunks(key, retrieveChunk, removeChunk) {\n const value = await retrieveChunk(key);\n if (value) {\n await removeChunk(key);\n }\n for (let i = 0;; i++) {\n const chunkName = `${key}.${i}`;\n const chunk = await retrieveChunk(chunkName);\n if (!chunk) {\n break;\n }\n await removeChunk(chunkName);\n }\n}\n//# sourceMappingURL=chunker.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3NyL2Rpc3QvbW9kdWxlL3V0aWxzL2NodW5rZXIuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBTztBQUNQO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixrQkFBa0I7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVDQUF1QyxTQUFTLElBQUksR0FBRyxFQUFFLFVBQVU7QUFDbkU7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQiw2QkFBNkIsSUFBSSxHQUFHLEVBQUU7QUFDdEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckIsNkJBQTZCLElBQUksR0FBRyxFQUFFO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Nzci9kaXN0L21vZHVsZS91dGlscy9jaHVua2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBNQVhfQ0hVTktfU0laRSA9IDMxODA7XG5jb25zdCBDSFVOS19MSUtFX1JFR0VYID0gL14oLiopWy5dKDB8WzEtOV1bMC05XSopJC87XG5leHBvcnQgZnVuY3Rpb24gaXNDaHVua0xpa2UoY29va2llTmFtZSwga2V5KSB7XG4gICAgaWYgKGNvb2tpZU5hbWUgPT09IGtleSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgY2h1bmtMaWtlID0gY29va2llTmFtZS5tYXRjaChDSFVOS19MSUtFX1JFR0VYKTtcbiAgICBpZiAoY2h1bmtMaWtlICYmIGNodW5rTGlrZVsxXSA9PT0ga2V5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIGNyZWF0ZSBjaHVua3MgZnJvbSBhIHN0cmluZyBhbmQgcmV0dXJuIGFuIGFycmF5IG9mIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlQ2h1bmtzKGtleSwgdmFsdWUsIGNodW5rU2l6ZSkge1xuICAgIGNvbnN0IHJlc29sdmVkQ2h1bmtTaXplID0gY2h1bmtTaXplID8/IE1BWF9DSFVOS19TSVpFO1xuICAgIGxldCBlbmNvZGVkVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuICAgIGlmIChlbmNvZGVkVmFsdWUubGVuZ3RoIDw9IHJlc29sdmVkQ2h1bmtTaXplKSB7XG4gICAgICAgIHJldHVybiBbeyBuYW1lOiBrZXksIHZhbHVlIH1dO1xuICAgIH1cbiAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICB3aGlsZSAoZW5jb2RlZFZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbGV0IGVuY29kZWRDaHVua0hlYWQgPSBlbmNvZGVkVmFsdWUuc2xpY2UoMCwgcmVzb2x2ZWRDaHVua1NpemUpO1xuICAgICAgICBjb25zdCBsYXN0RXNjYXBlUG9zID0gZW5jb2RlZENodW5rSGVhZC5sYXN0SW5kZXhPZihcIiVcIik7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBsYXN0IGVzY2FwZWQgY2hhcmFjdGVyIGlzIHRydW5jYXRlZC5cbiAgICAgICAgaWYgKGxhc3RFc2NhcGVQb3MgPiByZXNvbHZlZENodW5rU2l6ZSAtIDMpIHtcbiAgICAgICAgICAgIC8vIElmIHNvLCByZXNsaWNlIHRoZSBzdHJpbmcgdG8gZXhjbHVkZSB0aGUgd2hvbGUgZXNjYXBlIHNlcXVlbmNlLlxuICAgICAgICAgICAgLy8gV2Ugb25seSByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIHN0cmluZyBhcyB0aGUgY2h1bmsgbXVzdFxuICAgICAgICAgICAgLy8gYmUgc21hbGxlciB0aGFuIHRoZSBjaHVuayBzaXplLlxuICAgICAgICAgICAgZW5jb2RlZENodW5rSGVhZCA9IGVuY29kZWRDaHVua0hlYWQuc2xpY2UoMCwgbGFzdEVzY2FwZVBvcyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHZhbHVlSGVhZCA9IFwiXCI7XG4gICAgICAgIC8vIENoZWNrIGlmIHRoZSBjaHVuayB3YXMgc3BsaXQgYWxvbmcgYSB2YWxpZCB1bmljb2RlIGJvdW5kYXJ5LlxuICAgICAgICB3aGlsZSAoZW5jb2RlZENodW5rSGVhZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIC8vIFRyeSB0byBkZWNvZGUgdGhlIGNodW5rIGJhY2sgYW5kIHNlZSBpZiBpdCBpcyB2YWxpZC5cbiAgICAgICAgICAgICAgICAvLyBTdG9wIHdoZW4gdGhlIGNodW5rIGlzIHZhbGlkLlxuICAgICAgICAgICAgICAgIHZhbHVlSGVhZCA9IGRlY29kZVVSSUNvbXBvbmVudChlbmNvZGVkQ2h1bmtIZWFkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFVSSUVycm9yICYmXG4gICAgICAgICAgICAgICAgICAgIGVuY29kZWRDaHVua0hlYWQuYXQoLTMpID09PSBcIiVcIiAmJlxuICAgICAgICAgICAgICAgICAgICBlbmNvZGVkQ2h1bmtIZWFkLmxlbmd0aCA+IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENodW5rSGVhZCA9IGVuY29kZWRDaHVua0hlYWQuc2xpY2UoMCwgZW5jb2RlZENodW5rSGVhZC5sZW5ndGggLSAzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjaHVua3MucHVzaCh2YWx1ZUhlYWQpO1xuICAgICAgICBlbmNvZGVkVmFsdWUgPSBlbmNvZGVkVmFsdWUuc2xpY2UoZW5jb2RlZENodW5rSGVhZC5sZW5ndGgpO1xuICAgIH1cbiAgICByZXR1cm4gY2h1bmtzLm1hcCgodmFsdWUsIGkpID0+ICh7IG5hbWU6IGAke2tleX0uJHtpfWAsIHZhbHVlIH0pKTtcbn1cbi8vIEdldCBmdWxseSBjb25zdHJ1Y3RlZCBjaHVua3NcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb21iaW5lQ2h1bmtzKGtleSwgcmV0cmlldmVDaHVuaykge1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcmV0cmlldmVDaHVuayhrZXkpO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICAgIGxldCB2YWx1ZXMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDs7IGkrKykge1xuICAgICAgICBjb25zdCBjaHVua05hbWUgPSBgJHtrZXl9LiR7aX1gO1xuICAgICAgICBjb25zdCBjaHVuayA9IGF3YWl0IHJldHJpZXZlQ2h1bmsoY2h1bmtOYW1lKTtcbiAgICAgICAgaWYgKCFjaHVuaykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzLnB1c2goY2h1bmspO1xuICAgIH1cbiAgICBpZiAodmFsdWVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVDaHVua3Moa2V5LCByZXRyaWV2ZUNodW5rLCByZW1vdmVDaHVuaykge1xuICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcmV0cmlldmVDaHVuayhrZXkpO1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBhd2FpdCByZW1vdmVDaHVuayhrZXkpO1xuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDs7IGkrKykge1xuICAgICAgICBjb25zdCBjaHVua05hbWUgPSBgJHtrZXl9LiR7aX1gO1xuICAgICAgICBjb25zdCBjaHVuayA9IGF3YWl0IHJldHJpZXZlQ2h1bmsoY2h1bmtOYW1lKTtcbiAgICAgICAgaWYgKCFjaHVuaykge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgcmVtb3ZlQ2h1bmsoY2h1bmtOYW1lKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jaHVua2VyLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/chunker.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/constants.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/@supabase/ssr/dist/module/utils/constants.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((__unused_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 */ DEFAULT_COOKIE_OPTIONS: () => (/* binding */ DEFAULT_COOKIE_OPTIONS)\n/* harmony export */ });\nconst DEFAULT_COOKIE_OPTIONS = {\n path: \"/\",\n sameSite: \"lax\",\n httpOnly: false,\n // https://developer.chrome.com/blog/cookie-max-age-expires\n // https://httpwg.org/http-extensions/draft-ietf-httpbis-rfc6265bis.html#name-cookie-lifetime-limits\n maxAge: 400 * 24 * 60 * 60,\n};\n//# sourceMappingURL=constants.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3NyL2Rpc3QvbW9kdWxlL3V0aWxzL2NvbnN0YW50cy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL0BzdXBhYmFzZS9zc3IvZGlzdC9tb2R1bGUvdXRpbHMvY29uc3RhbnRzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBERUZBVUxUX0NPT0tJRV9PUFRJT05TID0ge1xuICAgIHBhdGg6IFwiL1wiLFxuICAgIHNhbWVTaXRlOiBcImxheFwiLFxuICAgIGh0dHBPbmx5OiBmYWxzZSxcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2Jsb2cvY29va2llLW1heC1hZ2UtZXhwaXJlc1xuICAgIC8vIGh0dHBzOi8vaHR0cHdnLm9yZy9odHRwLWV4dGVuc2lvbnMvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMuaHRtbCNuYW1lLWNvb2tpZS1saWZldGltZS1saW1pdHNcbiAgICBtYXhBZ2U6IDQwMCAqIDI0ICogNjAgKiA2MCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25zdGFudHMuanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/constants.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/helpers.js":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/@supabase/ssr/dist/module/utils/helpers.js ***!
|
||
\*****************************************************************/
|
||
/***/ ((__unused_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 */ isBrowser: () => (/* binding */ isBrowser),\n/* harmony export */ memoryLocalStorageAdapter: () => (/* binding */ memoryLocalStorageAdapter),\n/* harmony export */ parse: () => (/* binding */ parse),\n/* harmony export */ parseCookieHeader: () => (/* binding */ parseCookieHeader),\n/* harmony export */ serialize: () => (/* binding */ serialize),\n/* harmony export */ serializeCookieHeader: () => (/* binding */ serializeCookieHeader)\n/* harmony export */ });\n/* harmony import */ var cookie__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! cookie */ \"(app-pages-browser)/./node_modules/cookie/dist/index.js\");\n\n/**\n * @deprecated Since v0.4.0: Please use {@link parseCookieHeader}. `parse` will\n * not be available for import starting v1.0.0 of `@supabase/ssr`.\n */\nconst parse = cookie__WEBPACK_IMPORTED_MODULE_0__.parse;\n/**\n * @deprecated Since v0.4.0: Please use {@link serializeCookieHeader}.\n * `serialize` will not be available for import starting v1.0.0 of\n * `@supabase/ssr`.\n */\nconst serialize = cookie__WEBPACK_IMPORTED_MODULE_0__.serialize;\n/**\n * Parses the `Cookie` HTTP header into an array of cookie name-value objects.\n *\n * @param header The `Cookie` HTTP header. Decodes cookie names and values from\n * URI encoding first.\n */\nfunction parseCookieHeader(header) {\n const parsed = cookie__WEBPACK_IMPORTED_MODULE_0__.parse(header);\n return Object.keys(parsed ?? {}).map((name) => ({\n name,\n value: parsed[name],\n }));\n}\n/**\n * Converts the arguments to a valid `Set-Cookie` header. Non US-ASCII chars\n * and other forbidden cookie chars will be URI encoded.\n *\n * @param name Name of cookie.\n * @param value Value of cookie.\n */\nfunction serializeCookieHeader(name, value, options) {\n return cookie__WEBPACK_IMPORTED_MODULE_0__.serialize(name, value, options);\n}\nfunction isBrowser() {\n return (typeof window !== \"undefined\" && typeof window.document !== \"undefined\");\n}\n/**\n * Returns a localStorage-like object that stores the key-value pairs in\n * memory.\n */\nfunction memoryLocalStorageAdapter(store = {}) {\n return {\n getItem: (key) => {\n return store[key] || null;\n },\n setItem: (key, value) => {\n store[key] = value;\n },\n removeItem: (key) => {\n delete store[key];\n },\n };\n}\n//# sourceMappingURL=helpers.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3NyL2Rpc3QvbW9kdWxlL3V0aWxzL2hlbHBlcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFpQztBQUNqQztBQUNBLHlDQUF5Qyx3QkFBd0I7QUFDakU7QUFDQTtBQUNPLGNBQWMseUNBQVk7QUFDakM7QUFDQSx5Q0FBeUMsNEJBQTRCO0FBQ3JFO0FBQ0E7QUFDQTtBQUNPLGtCQUFrQiw2Q0FBZ0I7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCxtQkFBbUIseUNBQVk7QUFDL0IsbUNBQW1DO0FBQ25DO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1AsV0FBVyw2Q0FBZ0I7QUFDM0I7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLDZDQUE2QztBQUNwRDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3NyL2Rpc3QvbW9kdWxlL3V0aWxzL2hlbHBlcnMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29va2llIGZyb20gXCJjb29raWVcIjtcbi8qKlxuICogQGRlcHJlY2F0ZWQgU2luY2UgdjAuNC4wOiBQbGVhc2UgdXNlIHtAbGluayBwYXJzZUNvb2tpZUhlYWRlcn0uIGBwYXJzZWAgd2lsbFxuICogbm90IGJlIGF2YWlsYWJsZSBmb3IgaW1wb3J0IHN0YXJ0aW5nIHYxLjAuMCBvZiBgQHN1cGFiYXNlL3NzcmAuXG4gKi9cbmV4cG9ydCBjb25zdCBwYXJzZSA9IGNvb2tpZS5wYXJzZTtcbi8qKlxuICogQGRlcHJlY2F0ZWQgU2luY2UgdjAuNC4wOiBQbGVhc2UgdXNlIHtAbGluayBzZXJpYWxpemVDb29raWVIZWFkZXJ9LlxuICogYHNlcmlhbGl6ZWAgd2lsbCBub3QgYmUgYXZhaWxhYmxlIGZvciBpbXBvcnQgc3RhcnRpbmcgdjEuMC4wIG9mXG4gKiBgQHN1cGFiYXNlL3NzcmAuXG4gKi9cbmV4cG9ydCBjb25zdCBzZXJpYWxpemUgPSBjb29raWUuc2VyaWFsaXplO1xuLyoqXG4gKiBQYXJzZXMgdGhlIGBDb29raWVgIEhUVFAgaGVhZGVyIGludG8gYW4gYXJyYXkgb2YgY29va2llIG5hbWUtdmFsdWUgb2JqZWN0cy5cbiAqXG4gKiBAcGFyYW0gaGVhZGVyIFRoZSBgQ29va2llYCBIVFRQIGhlYWRlci4gRGVjb2RlcyBjb29raWUgbmFtZXMgYW5kIHZhbHVlcyBmcm9tXG4gKiBVUkkgZW5jb2RpbmcgZmlyc3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNvb2tpZUhlYWRlcihoZWFkZXIpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBjb29raWUucGFyc2UoaGVhZGVyKTtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocGFyc2VkID8/IHt9KS5tYXAoKG5hbWUpID0+ICh7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHZhbHVlOiBwYXJzZWRbbmFtZV0sXG4gICAgfSkpO1xufVxuLyoqXG4gKiBDb252ZXJ0cyB0aGUgYXJndW1lbnRzIHRvIGEgdmFsaWQgYFNldC1Db29raWVgIGhlYWRlci4gTm9uIFVTLUFTQ0lJIGNoYXJzXG4gKiBhbmQgb3RoZXIgZm9yYmlkZGVuIGNvb2tpZSBjaGFycyB3aWxsIGJlIFVSSSBlbmNvZGVkLlxuICpcbiAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgY29va2llLlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIG9mIGNvb2tpZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZUNvb2tpZUhlYWRlcihuYW1lLCB2YWx1ZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBjb29raWUuc2VyaWFsaXplKG5hbWUsIHZhbHVlLCBvcHRpb25zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0Jyb3dzZXIoKSB7XG4gICAgcmV0dXJuICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIpO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgbG9jYWxTdG9yYWdlLWxpa2Ugb2JqZWN0IHRoYXQgc3RvcmVzIHRoZSBrZXktdmFsdWUgcGFpcnMgaW5cbiAqIG1lbW9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1lbW9yeUxvY2FsU3RvcmFnZUFkYXB0ZXIoc3RvcmUgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldEl0ZW06IChrZXkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZVtrZXldIHx8IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIHNldEl0ZW06IChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBzdG9yZVtrZXldID0gdmFsdWU7XG4gICAgICAgIH0sXG4gICAgICAgIHJlbW92ZUl0ZW06IChrZXkpID0+IHtcbiAgICAgICAgICAgIGRlbGV0ZSBzdG9yZVtrZXldO1xuICAgICAgICB9LFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1oZWxwZXJzLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/helpers.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/index.js":
|
||
/*!***************************************************************!*\
|
||
!*** ./node_modules/@supabase/ssr/dist/module/utils/index.js ***!
|
||
\***************************************************************/
|
||
/***/ ((__unused_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 */ DEFAULT_COOKIE_OPTIONS: () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_1__.DEFAULT_COOKIE_OPTIONS),\n/* harmony export */ MAX_CHUNK_SIZE: () => (/* reexport safe */ _chunker__WEBPACK_IMPORTED_MODULE_2__.MAX_CHUNK_SIZE),\n/* harmony export */ codepointToUTF8: () => (/* reexport safe */ _base64url__WEBPACK_IMPORTED_MODULE_3__.codepointToUTF8),\n/* harmony export */ combineChunks: () => (/* reexport safe */ _chunker__WEBPACK_IMPORTED_MODULE_2__.combineChunks),\n/* harmony export */ createChunks: () => (/* reexport safe */ _chunker__WEBPACK_IMPORTED_MODULE_2__.createChunks),\n/* harmony export */ deleteChunks: () => (/* reexport safe */ _chunker__WEBPACK_IMPORTED_MODULE_2__.deleteChunks),\n/* harmony export */ isBrowser: () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_0__.isBrowser),\n/* harmony export */ isChunkLike: () => (/* reexport safe */ _chunker__WEBPACK_IMPORTED_MODULE_2__.isChunkLike),\n/* harmony export */ memoryLocalStorageAdapter: () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_0__.memoryLocalStorageAdapter),\n/* harmony export */ parse: () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_0__.parse),\n/* harmony export */ parseCookieHeader: () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_0__.parseCookieHeader),\n/* harmony export */ serialize: () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_0__.serialize),\n/* harmony export */ serializeCookieHeader: () => (/* reexport safe */ _helpers__WEBPACK_IMPORTED_MODULE_0__.serializeCookieHeader),\n/* harmony export */ stringFromBase64URL: () => (/* reexport safe */ _base64url__WEBPACK_IMPORTED_MODULE_3__.stringFromBase64URL),\n/* harmony export */ stringFromUTF8: () => (/* reexport safe */ _base64url__WEBPACK_IMPORTED_MODULE_3__.stringFromUTF8),\n/* harmony export */ stringToBase64URL: () => (/* reexport safe */ _base64url__WEBPACK_IMPORTED_MODULE_3__.stringToBase64URL),\n/* harmony export */ stringToUTF8: () => (/* reexport safe */ _base64url__WEBPACK_IMPORTED_MODULE_3__.stringToUTF8)\n/* harmony export */ });\n/* harmony import */ var _helpers__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./helpers */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/helpers.js\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constants */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/constants.js\");\n/* harmony import */ var _chunker__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./chunker */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/chunker.js\");\n/* harmony import */ var _base64url__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./base64url */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/base64url.js\");\n\n\n\n\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3NyL2Rpc3QvbW9kdWxlL3V0aWxzL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUEwQjtBQUNFO0FBQ0Y7QUFDRTtBQUM1QiIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3NyL2Rpc3QvbW9kdWxlL3V0aWxzL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2hlbHBlcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbnN0YW50c1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY2h1bmtlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vYmFzZTY0dXJsXCI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/utils/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/version.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/@supabase/ssr/dist/module/version.js ***!
|
||
\***********************************************************/
|
||
/***/ ((__unused_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 */ VERSION: () => (/* binding */ VERSION)\n/* harmony export */ });\nconst VERSION = '0.10.2';\n//# sourceMappingURL=version.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3NyL2Rpc3QvbW9kdWxlL3ZlcnNpb24uanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPO0FBQ1AiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3Nzci9kaXN0L21vZHVsZS92ZXJzaW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBWRVJTSU9OID0gJzAuMTAuMic7XG4vLyMgc291cmNlTWFwcGluZ1VSTD12ZXJzaW9uLmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/version.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/storage-js/dist/index.mjs":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/@supabase/storage-js/dist/index.mjs ***!
|
||
\**********************************************************/
|
||
/***/ ((__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 */ StorageAnalyticsClient: () => (/* binding */ StorageAnalyticsClient),\n/* harmony export */ StorageApiError: () => (/* binding */ StorageApiError),\n/* harmony export */ StorageClient: () => (/* binding */ StorageClient),\n/* harmony export */ StorageError: () => (/* binding */ StorageError),\n/* harmony export */ StorageUnknownError: () => (/* binding */ StorageUnknownError),\n/* harmony export */ StorageVectorsApiError: () => (/* binding */ StorageVectorsApiError),\n/* harmony export */ StorageVectorsClient: () => (/* binding */ StorageVectorsClient),\n/* harmony export */ StorageVectorsError: () => (/* binding */ StorageVectorsError),\n/* harmony export */ StorageVectorsErrorCode: () => (/* binding */ StorageVectorsErrorCode),\n/* harmony export */ StorageVectorsUnknownError: () => (/* binding */ StorageVectorsUnknownError),\n/* harmony export */ VectorBucketApi: () => (/* binding */ VectorBucketApi),\n/* harmony export */ VectorBucketScope: () => (/* binding */ VectorBucketScope),\n/* harmony export */ VectorDataApi: () => (/* binding */ VectorDataApi),\n/* harmony export */ VectorIndexApi: () => (/* binding */ VectorIndexApi),\n/* harmony export */ VectorIndexScope: () => (/* binding */ VectorIndexScope),\n/* harmony export */ isStorageError: () => (/* binding */ isStorageError),\n/* harmony export */ isStorageVectorsError: () => (/* binding */ isStorageVectorsError)\n/* harmony export */ });\n/* harmony import */ var iceberg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! iceberg-js */ \"(app-pages-browser)/./node_modules/iceberg-js/dist/index.mjs\");\n/* provided dependency */ var Buffer = __webpack_require__(/*! buffer */ \"(app-pages-browser)/./node_modules/next/dist/compiled/buffer/index.js\")[\"Buffer\"];\n\n\n//#region \\0@oxc-project+runtime@0.101.0/helpers/typeof.js\nfunction _typeof(o) {\n\t\"@babel/helpers - typeof\";\n\treturn _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(o$1) {\n\t\treturn typeof o$1;\n\t} : function(o$1) {\n\t\treturn o$1 && \"function\" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? \"symbol\" : typeof o$1;\n\t}, _typeof(o);\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.101.0/helpers/toPrimitive.js\nfunction toPrimitive(t, r) {\n\tif (\"object\" != _typeof(t) || !t) return t;\n\tvar e = t[Symbol.toPrimitive];\n\tif (void 0 !== e) {\n\t\tvar i = e.call(t, r || \"default\");\n\t\tif (\"object\" != _typeof(i)) return i;\n\t\tthrow new TypeError(\"@@toPrimitive must return a primitive value.\");\n\t}\n\treturn (\"string\" === r ? String : Number)(t);\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.101.0/helpers/toPropertyKey.js\nfunction toPropertyKey(t) {\n\tvar i = toPrimitive(t, \"string\");\n\treturn \"symbol\" == _typeof(i) ? i : i + \"\";\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.101.0/helpers/defineProperty.js\nfunction _defineProperty(e, r, t) {\n\treturn (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n\t\tvalue: t,\n\t\tenumerable: !0,\n\t\tconfigurable: !0,\n\t\twritable: !0\n\t}) : e[r] = t, e;\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.101.0/helpers/objectSpread2.js\nfunction ownKeys(e, r) {\n\tvar t = Object.keys(e);\n\tif (Object.getOwnPropertySymbols) {\n\t\tvar o = Object.getOwnPropertySymbols(e);\n\t\tr && (o = o.filter(function(r$1) {\n\t\t\treturn Object.getOwnPropertyDescriptor(e, r$1).enumerable;\n\t\t})), t.push.apply(t, o);\n\t}\n\treturn t;\n}\nfunction _objectSpread2(e) {\n\tfor (var r = 1; r < arguments.length; r++) {\n\t\tvar t = null != arguments[r] ? arguments[r] : {};\n\t\tr % 2 ? ownKeys(Object(t), !0).forEach(function(r$1) {\n\t\t\t_defineProperty(e, r$1, t[r$1]);\n\t\t}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r$1) {\n\t\t\tObject.defineProperty(e, r$1, Object.getOwnPropertyDescriptor(t, r$1));\n\t\t});\n\t}\n\treturn e;\n}\n\n//#endregion\n//#region src/lib/common/errors.ts\n/**\n* Base error class for all Storage errors\n* Supports both 'storage' and 'vectors' namespaces\n*/\nvar StorageError = class extends Error {\n\tconstructor(message, namespace = \"storage\", status, statusCode) {\n\t\tsuper(message);\n\t\tthis.__isStorageError = true;\n\t\tthis.namespace = namespace;\n\t\tthis.name = namespace === \"vectors\" ? \"StorageVectorsError\" : \"StorageError\";\n\t\tthis.status = status;\n\t\tthis.statusCode = statusCode;\n\t}\n\ttoJSON() {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tmessage: this.message,\n\t\t\tstatus: this.status,\n\t\t\tstatusCode: this.statusCode\n\t\t};\n\t}\n};\n/**\n* Type guard to check if an error is a StorageError\n* @param error - The error to check\n* @returns True if the error is a StorageError\n*/\nfunction isStorageError(error) {\n\treturn typeof error === \"object\" && error !== null && \"__isStorageError\" in error;\n}\n/**\n* API error returned from Storage service\n* Includes HTTP status code and service-specific error code\n*/\nvar StorageApiError = class extends StorageError {\n\tconstructor(message, status, statusCode, namespace = \"storage\") {\n\t\tsuper(message, namespace, status, statusCode);\n\t\tthis.name = namespace === \"vectors\" ? \"StorageVectorsApiError\" : \"StorageApiError\";\n\t\tthis.status = status;\n\t\tthis.statusCode = statusCode;\n\t}\n\ttoJSON() {\n\t\treturn _objectSpread2({}, super.toJSON());\n\t}\n};\n/**\n* Unknown error that doesn't match expected error patterns\n* Wraps the original error for debugging\n*/\nvar StorageUnknownError = class extends StorageError {\n\tconstructor(message, originalError, namespace = \"storage\") {\n\t\tsuper(message, namespace);\n\t\tthis.name = namespace === \"vectors\" ? \"StorageVectorsUnknownError\" : \"StorageUnknownError\";\n\t\tthis.originalError = originalError;\n\t}\n};\n/**\n* @deprecated Use StorageError with namespace='vectors' instead\n* Alias for backward compatibility with existing vector storage code\n*/\nvar StorageVectorsError = class extends StorageError {\n\tconstructor(message) {\n\t\tsuper(message, \"vectors\");\n\t}\n};\n/**\n* Type guard to check if an error is a StorageVectorsError\n* @param error - The error to check\n* @returns True if the error is a StorageVectorsError\n*/\nfunction isStorageVectorsError(error) {\n\treturn isStorageError(error) && error[\"namespace\"] === \"vectors\";\n}\n/**\n* @deprecated Use StorageApiError with namespace='vectors' instead\n* Alias for backward compatibility with existing vector storage code\n*/\nvar StorageVectorsApiError = class extends StorageApiError {\n\tconstructor(message, status, statusCode) {\n\t\tsuper(message, status, statusCode, \"vectors\");\n\t}\n};\n/**\n* @deprecated Use StorageUnknownError with namespace='vectors' instead\n* Alias for backward compatibility with existing vector storage code\n*/\nvar StorageVectorsUnknownError = class extends StorageUnknownError {\n\tconstructor(message, originalError) {\n\t\tsuper(message, originalError, \"vectors\");\n\t}\n};\n/**\n* Error codes specific to S3 Vectors API\n* Maps AWS service errors to application-friendly error codes\n*/\nlet StorageVectorsErrorCode = /* @__PURE__ */ function(StorageVectorsErrorCode$1) {\n\t/** Internal server fault (HTTP 500) */\n\tStorageVectorsErrorCode$1[\"InternalError\"] = \"InternalError\";\n\t/** Resource already exists / conflict (HTTP 409) */\n\tStorageVectorsErrorCode$1[\"S3VectorConflictException\"] = \"S3VectorConflictException\";\n\t/** Resource not found (HTTP 404) */\n\tStorageVectorsErrorCode$1[\"S3VectorNotFoundException\"] = \"S3VectorNotFoundException\";\n\t/** Delete bucket while not empty (HTTP 400) */\n\tStorageVectorsErrorCode$1[\"S3VectorBucketNotEmpty\"] = \"S3VectorBucketNotEmpty\";\n\t/** Exceeds bucket quota/limit (HTTP 400) */\n\tStorageVectorsErrorCode$1[\"S3VectorMaxBucketsExceeded\"] = \"S3VectorMaxBucketsExceeded\";\n\t/** Exceeds index quota/limit (HTTP 400) */\n\tStorageVectorsErrorCode$1[\"S3VectorMaxIndexesExceeded\"] = \"S3VectorMaxIndexesExceeded\";\n\treturn StorageVectorsErrorCode$1;\n}({});\n\n//#endregion\n//#region src/lib/common/headers.ts\n/**\n* Sets a header with case-insensitive deduplication.\n* Removes any existing headers whose name matches (case-insensitive),\n* then sets the value under the lowercase key. Does not mutate the input object.\n*\n* @param headers - Existing headers object\n* @param name - Header name to set (stored as lowercase)\n* @param value - Header value\n* @returns New headers object with the header set\n*/\nfunction setHeader(headers, name, value) {\n\tconst result = _objectSpread2({}, headers);\n\tconst nameLower = name.toLowerCase();\n\tfor (const key of Object.keys(result)) if (key.toLowerCase() === nameLower) delete result[key];\n\tresult[nameLower] = value;\n\treturn result;\n}\n/**\n* Normalizes all header keys to lowercase with case-insensitive deduplication.\n* When duplicate keys exist (differing only in case), the last value wins.\n* Does not mutate the input object.\n*\n* @param headers - Headers object to normalize\n* @returns New headers object with all keys lowercased\n*/\nfunction normalizeHeaders(headers) {\n\tconst result = {};\n\tfor (const [key, value] of Object.entries(headers)) result[key.toLowerCase()] = value;\n\treturn result;\n}\n\n//#endregion\n//#region src/lib/common/helpers.ts\n/**\n* Resolves the fetch implementation to use\n* Uses custom fetch if provided, otherwise uses native fetch\n*\n* @param customFetch - Optional custom fetch implementation\n* @returns Resolved fetch function\n*/\nconst resolveFetch = (customFetch) => {\n\tif (customFetch) return (...args) => customFetch(...args);\n\treturn (...args) => fetch(...args);\n};\n/**\n* Determine if input is a plain object\n* An object is plain if it's created by either {}, new Object(), or Object.create(null)\n*\n* @param value - Value to check\n* @returns True if value is a plain object\n* @source https://github.com/sindresorhus/is-plain-obj\n*/\nconst isPlainObject = (value) => {\n\tif (typeof value !== \"object\" || value === null) return false;\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n};\n/**\n* Recursively converts object keys from snake_case to camelCase\n* Used for normalizing API responses\n*\n* @param item - Object to convert\n* @returns Converted object with camelCase keys\n*/\nconst recursiveToCamel = (item) => {\n\tif (Array.isArray(item)) return item.map((el) => recursiveToCamel(el));\n\telse if (typeof item === \"function\" || item !== Object(item)) return item;\n\tconst result = {};\n\tObject.entries(item).forEach(([key, value]) => {\n\t\tconst newKey = key.replace(/([-_][a-z])/gi, (c) => c.toUpperCase().replace(/[-_]/g, \"\"));\n\t\tresult[newKey] = recursiveToCamel(value);\n\t});\n\treturn result;\n};\n/**\n* Validates if a given bucket name is valid according to Supabase Storage API rules\n* Mirrors backend validation from: storage/src/storage/limits.ts:isValidBucketName()\n*\n* Rules:\n* - Length: 1-100 characters\n* - Allowed characters: alphanumeric (a-z, A-Z, 0-9), underscore (_), and safe special characters\n* - Safe special characters: ! - . * ' ( ) space & $ @ = ; : + , ?\n* - Forbidden: path separators (/, \\), path traversal (..), leading/trailing whitespace\n*\n* AWS S3 Reference: https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-keys.html\n*\n* @param bucketName - The bucket name to validate\n* @returns true if valid, false otherwise\n*/\nconst isValidBucketName = (bucketName) => {\n\tif (!bucketName || typeof bucketName !== \"string\") return false;\n\tif (bucketName.length === 0 || bucketName.length > 100) return false;\n\tif (bucketName.trim() !== bucketName) return false;\n\tif (bucketName.includes(\"/\") || bucketName.includes(\"\\\\\")) return false;\n\treturn /^[\\w!.\\*'() &$@=;:+,?-]+$/.test(bucketName);\n};\n\n//#endregion\n//#region src/lib/common/fetch.ts\n/**\n* Extracts error message from various error response formats\n* @param err - Error object from API\n* @returns Human-readable error message\n*/\nconst _getErrorMessage = (err) => {\n\tif (typeof err === \"object\" && err !== null) {\n\t\tconst e = err;\n\t\tif (typeof e.msg === \"string\") return e.msg;\n\t\tif (typeof e.message === \"string\") return e.message;\n\t\tif (typeof e.error_description === \"string\") return e.error_description;\n\t\tif (typeof e.error === \"string\") return e.error;\n\t\tif (typeof e.error === \"object\" && e.error !== null) {\n\t\t\tconst nested = e.error;\n\t\t\tif (typeof nested.message === \"string\") return nested.message;\n\t\t}\n\t}\n\treturn JSON.stringify(err);\n};\n/**\n* Handles fetch errors and converts them to Storage error types\n* @param error - The error caught from fetch\n* @param reject - Promise rejection function\n* @param options - Fetch options that may affect error handling\n* @param namespace - Error namespace ('storage' or 'vectors')\n*/\nconst handleError = async (error, reject, options, namespace) => {\n\tif (error !== null && typeof error === \"object\" && \"json\" in error && typeof error.json === \"function\") {\n\t\tconst responseError = error;\n\t\tlet status = parseInt(String(responseError.status), 10);\n\t\tif (!Number.isFinite(status)) status = 500;\n\t\tresponseError.json().then((err) => {\n\t\t\tconst statusCode = (err === null || err === void 0 ? void 0 : err.statusCode) || (err === null || err === void 0 ? void 0 : err.code) || status + \"\";\n\t\t\treject(new StorageApiError(_getErrorMessage(err), status, statusCode, namespace));\n\t\t}).catch(() => {\n\t\t\tconst statusCode = status + \"\";\n\t\t\treject(new StorageApiError(responseError.statusText || `HTTP ${status} error`, status, statusCode, namespace));\n\t\t});\n\t} else reject(new StorageUnknownError(_getErrorMessage(error), error, namespace));\n};\n/**\n* Builds request parameters for fetch calls\n* @param method - HTTP method\n* @param options - Custom fetch options\n* @param parameters - Additional fetch parameters like AbortSignal\n* @param body - Request body (will be JSON stringified if plain object)\n* @returns Complete fetch request parameters\n*/\nconst _getRequestParams = (method, options, parameters, body) => {\n\tconst params = {\n\t\tmethod,\n\t\theaders: (options === null || options === void 0 ? void 0 : options.headers) || {}\n\t};\n\tif (method === \"GET\" || method === \"HEAD\" || !body) return _objectSpread2(_objectSpread2({}, params), parameters);\n\tif (isPlainObject(body)) {\n\t\tvar _contentType;\n\t\tconst headers = (options === null || options === void 0 ? void 0 : options.headers) || {};\n\t\tlet contentType;\n\t\tfor (const [key, value] of Object.entries(headers)) if (key.toLowerCase() === \"content-type\") contentType = value;\n\t\tparams.headers = setHeader(headers, \"Content-Type\", (_contentType = contentType) !== null && _contentType !== void 0 ? _contentType : \"application/json\");\n\t\tparams.body = JSON.stringify(body);\n\t} else params.body = body;\n\tif (options === null || options === void 0 ? void 0 : options.duplex) params.duplex = options.duplex;\n\treturn _objectSpread2(_objectSpread2({}, params), parameters);\n};\n/**\n* Internal request handler that wraps fetch with error handling\n* @param fetcher - Fetch function to use\n* @param method - HTTP method\n* @param url - Request URL\n* @param options - Custom fetch options\n* @param parameters - Additional fetch parameters\n* @param body - Request body\n* @param namespace - Error namespace ('storage' or 'vectors')\n* @returns Promise with parsed response or error\n*/\nasync function _handleRequest(fetcher, method, url, options, parameters, body, namespace) {\n\treturn new Promise((resolve, reject) => {\n\t\tfetcher(url, _getRequestParams(method, options, parameters, body)).then((result) => {\n\t\t\tif (!result.ok) throw result;\n\t\t\tif (options === null || options === void 0 ? void 0 : options.noResolveJson) return result;\n\t\t\tif (namespace === \"vectors\") {\n\t\t\t\tconst contentType = result.headers.get(\"content-type\");\n\t\t\t\tif (result.headers.get(\"content-length\") === \"0\" || result.status === 204) return {};\n\t\t\t\tif (!contentType || !contentType.includes(\"application/json\")) return {};\n\t\t\t}\n\t\t\treturn result.json();\n\t\t}).then((data) => resolve(data)).catch((error) => handleError(error, reject, options, namespace));\n\t});\n}\n/**\n* Creates a fetch API with the specified namespace\n* @param namespace - Error namespace ('storage' or 'vectors')\n* @returns Object with HTTP method functions\n*/\nfunction createFetchApi(namespace = \"storage\") {\n\treturn {\n\t\tget: async (fetcher, url, options, parameters) => {\n\t\t\treturn _handleRequest(fetcher, \"GET\", url, options, parameters, void 0, namespace);\n\t\t},\n\t\tpost: async (fetcher, url, body, options, parameters) => {\n\t\t\treturn _handleRequest(fetcher, \"POST\", url, options, parameters, body, namespace);\n\t\t},\n\t\tput: async (fetcher, url, body, options, parameters) => {\n\t\t\treturn _handleRequest(fetcher, \"PUT\", url, options, parameters, body, namespace);\n\t\t},\n\t\thead: async (fetcher, url, options, parameters) => {\n\t\t\treturn _handleRequest(fetcher, \"HEAD\", url, _objectSpread2(_objectSpread2({}, options), {}, { noResolveJson: true }), parameters, void 0, namespace);\n\t\t},\n\t\tremove: async (fetcher, url, body, options, parameters) => {\n\t\t\treturn _handleRequest(fetcher, \"DELETE\", url, options, parameters, body, namespace);\n\t\t}\n\t};\n}\nconst defaultApi = createFetchApi(\"storage\");\nconst { get, post, put, head, remove } = defaultApi;\nconst vectorsApi = createFetchApi(\"vectors\");\n\n//#endregion\n//#region src/lib/common/BaseApiClient.ts\n/**\n* @ignore\n* Base API client class for all Storage API classes\n* Provides common infrastructure for error handling and configuration\n*\n* @typeParam TError - The error type (StorageError or subclass)\n*/\nvar BaseApiClient = class {\n\t/**\n\t* Creates a new BaseApiClient instance\n\t* @param url - Base URL for API requests\n\t* @param headers - Default headers for API requests\n\t* @param fetch - Optional custom fetch implementation\n\t* @param namespace - Error namespace ('storage' or 'vectors')\n\t*/\n\tconstructor(url, headers = {}, fetch$1, namespace = \"storage\") {\n\t\tthis.shouldThrowOnError = false;\n\t\tthis.url = url;\n\t\tthis.headers = normalizeHeaders(headers);\n\t\tthis.fetch = resolveFetch(fetch$1);\n\t\tthis.namespace = namespace;\n\t}\n\t/**\n\t* Enable throwing errors instead of returning them.\n\t* When enabled, errors are thrown instead of returned in { data, error } format.\n\t*\n\t* @returns this - For method chaining\n\t*/\n\tthrowOnError() {\n\t\tthis.shouldThrowOnError = true;\n\t\treturn this;\n\t}\n\t/**\n\t* Set an HTTP header for the request.\n\t* Creates a shallow copy of headers to avoid mutating shared state.\n\t*\n\t* @param name - Header name\n\t* @param value - Header value\n\t* @returns this - For method chaining\n\t*/\n\tsetHeader(name, value) {\n\t\tthis.headers = setHeader(this.headers, name, value);\n\t\treturn this;\n\t}\n\t/**\n\t* Handles API operation with standardized error handling\n\t* Eliminates repetitive try-catch blocks across all API methods\n\t*\n\t* This wrapper:\n\t* 1. Executes the operation\n\t* 2. Returns { data, error: null } on success\n\t* 3. Returns { data: null, error } on failure (if shouldThrowOnError is false)\n\t* 4. Throws error on failure (if shouldThrowOnError is true)\n\t*\n\t* @typeParam T - The expected data type from the operation\n\t* @param operation - Async function that performs the API call\n\t* @returns Promise with { data, error } tuple\n\t*\n\t* @example Handling an operation\n\t* ```typescript\n\t* async listBuckets() {\n\t* return this.handleOperation(async () => {\n\t* return await get(this.fetch, `${this.url}/bucket`, {\n\t* headers: this.headers,\n\t* })\n\t* })\n\t* }\n\t* ```\n\t*/\n\tasync handleOperation(operation) {\n\t\tvar _this = this;\n\t\ttry {\n\t\t\treturn {\n\t\t\t\tdata: await operation(),\n\t\t\t\terror: null\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tif (_this.shouldThrowOnError) throw error;\n\t\t\tif (isStorageError(error)) return {\n\t\t\t\tdata: null,\n\t\t\t\terror\n\t\t\t};\n\t\t\tthrow error;\n\t\t}\n\t}\n};\n\n//#endregion\n//#region src/packages/StreamDownloadBuilder.ts\nvar StreamDownloadBuilder = class {\n\tconstructor(downloadFn, shouldThrowOnError) {\n\t\tthis.downloadFn = downloadFn;\n\t\tthis.shouldThrowOnError = shouldThrowOnError;\n\t}\n\tthen(onfulfilled, onrejected) {\n\t\treturn this.execute().then(onfulfilled, onrejected);\n\t}\n\tasync execute() {\n\t\tvar _this = this;\n\t\ttry {\n\t\t\treturn {\n\t\t\t\tdata: (await _this.downloadFn()).body,\n\t\t\t\terror: null\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tif (_this.shouldThrowOnError) throw error;\n\t\t\tif (isStorageError(error)) return {\n\t\t\t\tdata: null,\n\t\t\t\terror\n\t\t\t};\n\t\t\tthrow error;\n\t\t}\n\t}\n};\n\n//#endregion\n//#region src/packages/BlobDownloadBuilder.ts\nlet _Symbol$toStringTag;\n_Symbol$toStringTag = Symbol.toStringTag;\nvar BlobDownloadBuilder = class {\n\tconstructor(downloadFn, shouldThrowOnError) {\n\t\tthis.downloadFn = downloadFn;\n\t\tthis.shouldThrowOnError = shouldThrowOnError;\n\t\tthis[_Symbol$toStringTag] = \"BlobDownloadBuilder\";\n\t\tthis.promise = null;\n\t}\n\tasStream() {\n\t\treturn new StreamDownloadBuilder(this.downloadFn, this.shouldThrowOnError);\n\t}\n\tthen(onfulfilled, onrejected) {\n\t\treturn this.getPromise().then(onfulfilled, onrejected);\n\t}\n\tcatch(onrejected) {\n\t\treturn this.getPromise().catch(onrejected);\n\t}\n\tfinally(onfinally) {\n\t\treturn this.getPromise().finally(onfinally);\n\t}\n\tgetPromise() {\n\t\tif (!this.promise) this.promise = this.execute();\n\t\treturn this.promise;\n\t}\n\tasync execute() {\n\t\tvar _this = this;\n\t\ttry {\n\t\t\treturn {\n\t\t\t\tdata: await (await _this.downloadFn()).blob(),\n\t\t\t\terror: null\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tif (_this.shouldThrowOnError) throw error;\n\t\t\tif (isStorageError(error)) return {\n\t\t\t\tdata: null,\n\t\t\t\terror\n\t\t\t};\n\t\t\tthrow error;\n\t\t}\n\t}\n};\n\n//#endregion\n//#region src/packages/StorageFileApi.ts\nconst DEFAULT_SEARCH_OPTIONS = {\n\tlimit: 100,\n\toffset: 0,\n\tsortBy: {\n\t\tcolumn: \"name\",\n\t\torder: \"asc\"\n\t}\n};\nconst DEFAULT_FILE_OPTIONS = {\n\tcacheControl: \"3600\",\n\tcontentType: \"text/plain;charset=UTF-8\",\n\tupsert: false\n};\nvar StorageFileApi = class extends BaseApiClient {\n\tconstructor(url, headers = {}, bucketId, fetch$1) {\n\t\tsuper(url, headers, fetch$1, \"storage\");\n\t\tthis.bucketId = bucketId;\n\t}\n\t/**\n\t* Uploads a file to an existing bucket or replaces an existing file at the specified path with a new one.\n\t*\n\t* @param method HTTP method.\n\t* @param path The relative file path. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\n\t* @param fileBody The body of the file to be stored in the bucket.\n\t*/\n\tasync uploadOrUpdate(method, path, fileBody, fileOptions) {\n\t\tvar _this = this;\n\t\treturn _this.handleOperation(async () => {\n\t\t\tlet body;\n\t\t\tconst options = _objectSpread2(_objectSpread2({}, DEFAULT_FILE_OPTIONS), fileOptions);\n\t\t\tlet headers = _objectSpread2(_objectSpread2({}, _this.headers), method === \"POST\" && { \"x-upsert\": String(options.upsert) });\n\t\t\tconst metadata = options.metadata;\n\t\t\tif (typeof Blob !== \"undefined\" && fileBody instanceof Blob) {\n\t\t\t\tbody = new FormData();\n\t\t\t\tbody.append(\"cacheControl\", options.cacheControl);\n\t\t\t\tif (metadata) body.append(\"metadata\", _this.encodeMetadata(metadata));\n\t\t\t\tbody.append(\"\", fileBody);\n\t\t\t} else if (typeof FormData !== \"undefined\" && fileBody instanceof FormData) {\n\t\t\t\tbody = fileBody;\n\t\t\t\tif (!body.has(\"cacheControl\")) body.append(\"cacheControl\", options.cacheControl);\n\t\t\t\tif (metadata && !body.has(\"metadata\")) body.append(\"metadata\", _this.encodeMetadata(metadata));\n\t\t\t} else {\n\t\t\t\tbody = fileBody;\n\t\t\t\theaders[\"cache-control\"] = `max-age=${options.cacheControl}`;\n\t\t\t\theaders[\"content-type\"] = options.contentType;\n\t\t\t\tif (metadata) headers[\"x-metadata\"] = _this.toBase64(_this.encodeMetadata(metadata));\n\t\t\t\tif ((typeof ReadableStream !== \"undefined\" && body instanceof ReadableStream || body && typeof body === \"object\" && \"pipe\" in body && typeof body.pipe === \"function\") && !options.duplex) options.duplex = \"half\";\n\t\t\t}\n\t\t\tif (fileOptions === null || fileOptions === void 0 ? void 0 : fileOptions.headers) for (const [key, value] of Object.entries(fileOptions.headers)) headers = setHeader(headers, key, value);\n\t\t\tconst cleanPath = _this._removeEmptyFolders(path);\n\t\t\tconst _path = _this._getFinalPath(cleanPath);\n\t\t\tconst data = await (method == \"PUT\" ? put : post)(_this.fetch, `${_this.url}/object/${_path}`, body, _objectSpread2({ headers }, (options === null || options === void 0 ? void 0 : options.duplex) ? { duplex: options.duplex } : {}));\n\t\t\treturn {\n\t\t\t\tpath: cleanPath,\n\t\t\t\tid: data.Id,\n\t\t\t\tfullPath: data.Key\n\t\t\t};\n\t\t});\n\t}\n\t/**\n\t* Uploads a file to an existing bucket.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The file path, including the file name. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\n\t* @param fileBody The body of the file to be stored in the bucket.\n\t* @param fileOptions Optional file upload options including cacheControl, contentType, upsert, and metadata.\n\t* @returns Promise with response containing file path, id, and fullPath or error\n\t*\n\t* @example Upload file\n\t* ```js\n\t* const avatarFile = event.target.files[0]\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .upload('public/avatar1.png', avatarFile, {\n\t* cacheControl: '3600',\n\t* upsert: false\n\t* })\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"path\": \"public/avatar1.png\",\n\t* \"fullPath\": \"avatars/public/avatar1.png\"\n\t* },\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @example Upload file using `ArrayBuffer` from base64 file data\n\t* ```js\n\t* import { decode } from 'base64-arraybuffer'\n\t*\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .upload('public/avatar1.png', decode('base64FileData'), {\n\t* contentType: 'image/png'\n\t* })\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: none\n\t* - `objects` table permissions: only `insert` when you are uploading new files and `select`, `insert` and `update` when you are upserting files\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t* - For React Native, using either `Blob`, `File` or `FormData` does not work as intended. Upload file using `ArrayBuffer` from base64 file data instead, see example below.\n\t*/\n\tasync upload(path, fileBody, fileOptions) {\n\t\treturn this.uploadOrUpdate(\"POST\", path, fileBody, fileOptions);\n\t}\n\t/**\n\t* Upload a file with a token generated from `createSignedUploadUrl`.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The file path, including the file name. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\n\t* @param token The token generated from `createSignedUploadUrl`\n\t* @param fileBody The body of the file to be stored in the bucket.\n\t* @param fileOptions HTTP headers (cacheControl, contentType, etc.).\n\t* **Note:** The `upsert` option has no effect here. To enable upsert behavior,\n\t* pass `{ upsert: true }` when calling `createSignedUploadUrl()` instead.\n\t* @returns Promise with response containing file path and fullPath or error\n\t*\n\t* @example Upload to a signed URL\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .uploadToSignedUrl('folder/cat.jpg', 'token-from-createSignedUploadUrl', file)\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"path\": \"folder/cat.jpg\",\n\t* \"fullPath\": \"avatars/folder/cat.jpg\"\n\t* },\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: none\n\t* - `objects` table permissions: none\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync uploadToSignedUrl(path, token, fileBody, fileOptions) {\n\t\tvar _this3 = this;\n\t\tconst cleanPath = _this3._removeEmptyFolders(path);\n\t\tconst _path = _this3._getFinalPath(cleanPath);\n\t\tconst url = new URL(_this3.url + `/object/upload/sign/${_path}`);\n\t\turl.searchParams.set(\"token\", token);\n\t\treturn _this3.handleOperation(async () => {\n\t\t\tlet body;\n\t\t\tconst options = _objectSpread2(_objectSpread2({}, DEFAULT_FILE_OPTIONS), fileOptions);\n\t\t\tlet headers = _objectSpread2(_objectSpread2({}, _this3.headers), { \"x-upsert\": String(options.upsert) });\n\t\t\tconst metadata = options.metadata;\n\t\t\tif (typeof Blob !== \"undefined\" && fileBody instanceof Blob) {\n\t\t\t\tbody = new FormData();\n\t\t\t\tbody.append(\"cacheControl\", options.cacheControl);\n\t\t\t\tif (metadata) body.append(\"metadata\", _this3.encodeMetadata(metadata));\n\t\t\t\tbody.append(\"\", fileBody);\n\t\t\t} else if (typeof FormData !== \"undefined\" && fileBody instanceof FormData) {\n\t\t\t\tbody = fileBody;\n\t\t\t\tif (!body.has(\"cacheControl\")) body.append(\"cacheControl\", options.cacheControl);\n\t\t\t\tif (metadata && !body.has(\"metadata\")) body.append(\"metadata\", _this3.encodeMetadata(metadata));\n\t\t\t} else {\n\t\t\t\tbody = fileBody;\n\t\t\t\theaders[\"cache-control\"] = `max-age=${options.cacheControl}`;\n\t\t\t\theaders[\"content-type\"] = options.contentType;\n\t\t\t\tif (metadata) headers[\"x-metadata\"] = _this3.toBase64(_this3.encodeMetadata(metadata));\n\t\t\t\tif ((typeof ReadableStream !== \"undefined\" && body instanceof ReadableStream || body && typeof body === \"object\" && \"pipe\" in body && typeof body.pipe === \"function\") && !options.duplex) options.duplex = \"half\";\n\t\t\t}\n\t\t\tif (fileOptions === null || fileOptions === void 0 ? void 0 : fileOptions.headers) for (const [key, value] of Object.entries(fileOptions.headers)) headers = setHeader(headers, key, value);\n\t\t\treturn {\n\t\t\t\tpath: cleanPath,\n\t\t\t\tfullPath: (await put(_this3.fetch, url.toString(), body, _objectSpread2({ headers }, (options === null || options === void 0 ? void 0 : options.duplex) ? { duplex: options.duplex } : {}))).Key\n\t\t\t};\n\t\t});\n\t}\n\t/**\n\t* Creates a signed upload URL.\n\t* Signed upload URLs can be used to upload files to the bucket without further authentication.\n\t* They are valid for 2 hours.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The file path, including the current file name. For example `folder/image.png`.\n\t* @param options.upsert If set to true, allows the file to be overwritten if it already exists.\n\t* @returns Promise with response containing signed upload URL, token, and path or error\n\t*\n\t* @example Create Signed Upload URL\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .createSignedUploadUrl('folder/cat.jpg')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"signedUrl\": \"https://example.supabase.co/storage/v1/object/upload/sign/avatars/folder/cat.jpg?token=<TOKEN>\",\n\t* \"path\": \"folder/cat.jpg\",\n\t* \"token\": \"<TOKEN>\"\n\t* },\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: none\n\t* - `objects` table permissions: `insert`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync createSignedUploadUrl(path, options) {\n\t\tvar _this4 = this;\n\t\treturn _this4.handleOperation(async () => {\n\t\t\tlet _path = _this4._getFinalPath(path);\n\t\t\tconst headers = _objectSpread2({}, _this4.headers);\n\t\t\tif (options === null || options === void 0 ? void 0 : options.upsert) headers[\"x-upsert\"] = \"true\";\n\t\t\tconst data = await post(_this4.fetch, `${_this4.url}/object/upload/sign/${_path}`, {}, { headers });\n\t\t\tconst url = new URL(_this4.url + data.url);\n\t\t\tconst token = url.searchParams.get(\"token\");\n\t\t\tif (!token) throw new StorageError(\"No token returned by API\");\n\t\t\treturn {\n\t\t\t\tsignedUrl: url.toString(),\n\t\t\t\tpath,\n\t\t\t\ttoken\n\t\t\t};\n\t\t});\n\t}\n\t/**\n\t* Replaces an existing file at the specified path with a new one.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The relative file path. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to update.\n\t* @param fileBody The body of the file to be stored in the bucket.\n\t* @param fileOptions Optional file upload options including cacheControl, contentType, and metadata.\n\t* **Note:** The `upsert` option has no effect here. `update()` always replaces the\n\t* file at the given path, so the `x-upsert` header is not sent. To control upsert\n\t* behavior, use `upload()` instead.\n\t* @returns Promise with response containing file path, id, and fullPath or error\n\t*\n\t* @example Update file\n\t* ```js\n\t* const avatarFile = event.target.files[0]\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .update('public/avatar1.png', avatarFile, {\n\t* cacheControl: '3600'\n\t* })\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"path\": \"public/avatar1.png\",\n\t* \"fullPath\": \"avatars/public/avatar1.png\"\n\t* },\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @example Update file using `ArrayBuffer` from base64 file data\n\t* ```js\n\t* import {decode} from 'base64-arraybuffer'\n\t*\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .update('public/avatar1.png', decode('base64FileData'), {\n\t* contentType: 'image/png'\n\t* })\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: none\n\t* - `objects` table permissions: `update` and `select`\n\t* - `update()` always replaces the file at the given path regardless of the `upsert` option.\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t* - For React Native, using either `Blob`, `File` or `FormData` does not work as intended. Update file using `ArrayBuffer` from base64 file data instead, see example below.\n\t*/\n\tasync update(path, fileBody, fileOptions) {\n\t\treturn this.uploadOrUpdate(\"PUT\", path, fileBody, fileOptions);\n\t}\n\t/**\n\t* Moves an existing file to a new path in the same bucket.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param fromPath The original file path, including the current file name. For example `folder/image.png`.\n\t* @param toPath The new file path, including the new file name. For example `folder/image-new.png`.\n\t* @param options The destination options.\n\t* @returns Promise with response containing success message or error\n\t*\n\t* @example Move file\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .move('public/avatar1.png', 'private/avatar2.png')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"message\": \"Successfully moved\"\n\t* },\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: none\n\t* - `objects` table permissions: `update` and `select`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync move(fromPath, toPath, options) {\n\t\tvar _this6 = this;\n\t\treturn _this6.handleOperation(async () => {\n\t\t\treturn await post(_this6.fetch, `${_this6.url}/object/move`, {\n\t\t\t\tbucketId: _this6.bucketId,\n\t\t\t\tsourceKey: fromPath,\n\t\t\t\tdestinationKey: toPath,\n\t\t\t\tdestinationBucket: options === null || options === void 0 ? void 0 : options.destinationBucket\n\t\t\t}, { headers: _this6.headers });\n\t\t});\n\t}\n\t/**\n\t* Copies an existing file to a new path in the same bucket.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param fromPath The original file path, including the current file name. For example `folder/image.png`.\n\t* @param toPath The new file path, including the new file name. For example `folder/image-copy.png`.\n\t* @param options The destination options.\n\t* @returns Promise with response containing copied file path or error\n\t*\n\t* @example Copy file\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .copy('public/avatar1.png', 'private/avatar2.png')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"path\": \"avatars/private/avatar2.png\"\n\t* },\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: none\n\t* - `objects` table permissions: `insert` and `select`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync copy(fromPath, toPath, options) {\n\t\tvar _this7 = this;\n\t\treturn _this7.handleOperation(async () => {\n\t\t\treturn { path: (await post(_this7.fetch, `${_this7.url}/object/copy`, {\n\t\t\t\tbucketId: _this7.bucketId,\n\t\t\t\tsourceKey: fromPath,\n\t\t\t\tdestinationKey: toPath,\n\t\t\t\tdestinationBucket: options === null || options === void 0 ? void 0 : options.destinationBucket\n\t\t\t}, { headers: _this7.headers })).Key };\n\t\t});\n\t}\n\t/**\n\t* Creates a signed URL. Use a signed URL to share a file for a fixed amount of time.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The file path, including the current file name. For example `folder/image.png`.\n\t* @param expiresIn The number of seconds until the signed URL expires. For example, `60` for a URL which is valid for one minute.\n\t* @param options.download triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\n\t* @param options.transform Transform the asset before serving it to the client.\n\t* @param options.cacheNonce Append a cache nonce parameter to the URL to invalidate the cache.\n\t* @returns Promise with response containing signed URL or error\n\t*\n\t* @example Create Signed URL\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .createSignedUrl('folder/avatar1.png', 60)\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"signedUrl\": \"https://example.supabase.co/storage/v1/object/sign/avatars/folder/avatar1.png?token=<TOKEN>\"\n\t* },\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @example Create a signed URL for an asset with transformations\n\t* ```js\n\t* const { data } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .createSignedUrl('folder/avatar1.png', 60, {\n\t* transform: {\n\t* width: 100,\n\t* height: 100,\n\t* }\n\t* })\n\t* ```\n\t*\n\t* @example Create a signed URL which triggers the download of the asset\n\t* ```js\n\t* const { data } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .createSignedUrl('folder/avatar1.png', 60, {\n\t* download: true,\n\t* })\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: none\n\t* - `objects` table permissions: `select`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync createSignedUrl(path, expiresIn, options) {\n\t\tvar _this8 = this;\n\t\treturn _this8.handleOperation(async () => {\n\t\t\tlet _path = _this8._getFinalPath(path);\n\t\t\tconst hasTransform = typeof (options === null || options === void 0 ? void 0 : options.transform) === \"object\" && options.transform !== null && Object.keys(options.transform).length > 0;\n\t\t\tlet data = await post(_this8.fetch, `${_this8.url}/object/sign/${_path}`, _objectSpread2({ expiresIn }, hasTransform ? { transform: options.transform } : {}), { headers: _this8.headers });\n\t\t\tconst query = new URLSearchParams();\n\t\t\tif (options === null || options === void 0 ? void 0 : options.download) query.set(\"download\", options.download === true ? \"\" : options.download);\n\t\t\tif ((options === null || options === void 0 ? void 0 : options.cacheNonce) != null) query.set(\"cacheNonce\", String(options.cacheNonce));\n\t\t\tconst queryString = query.toString();\n\t\t\treturn { signedUrl: encodeURI(`${_this8.url}${data.signedURL}${queryString ? `&${queryString}` : \"\"}`) };\n\t\t});\n\t}\n\t/**\n\t* Creates multiple signed URLs. Use a signed URL to share a file for a fixed amount of time.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param paths The file paths to be downloaded, including the current file names. For example `['folder/image.png', 'folder2/image2.png']`.\n\t* @param expiresIn The number of seconds until the signed URLs expire. For example, `60` for URLs which are valid for one minute.\n\t* @param options.download triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\n\t* @param options.cacheNonce Append a cache nonce parameter to the URL to invalidate the cache.\n\t* @returns Promise with response containing array of objects with signedUrl, path, and error or error\n\t*\n\t* @example Create Signed URLs\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .createSignedUrls(['folder/avatar1.png', 'folder/avatar2.png'], 60)\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"error\": null,\n\t* \"path\": \"folder/avatar1.png\",\n\t* \"signedURL\": \"/object/sign/avatars/folder/avatar1.png?token=<TOKEN>\",\n\t* \"signedUrl\": \"https://example.supabase.co/storage/v1/object/sign/avatars/folder/avatar1.png?token=<TOKEN>\"\n\t* },\n\t* {\n\t* \"error\": null,\n\t* \"path\": \"folder/avatar2.png\",\n\t* \"signedURL\": \"/object/sign/avatars/folder/avatar2.png?token=<TOKEN>\",\n\t* \"signedUrl\": \"https://example.supabase.co/storage/v1/object/sign/avatars/folder/avatar2.png?token=<TOKEN>\"\n\t* }\n\t* ],\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: none\n\t* - `objects` table permissions: `select`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync createSignedUrls(paths, expiresIn, options) {\n\t\tvar _this9 = this;\n\t\treturn _this9.handleOperation(async () => {\n\t\t\tconst data = await post(_this9.fetch, `${_this9.url}/object/sign/${_this9.bucketId}`, {\n\t\t\t\texpiresIn,\n\t\t\t\tpaths\n\t\t\t}, { headers: _this9.headers });\n\t\t\tconst query = new URLSearchParams();\n\t\t\tif (options === null || options === void 0 ? void 0 : options.download) query.set(\"download\", options.download === true ? \"\" : options.download);\n\t\t\tif ((options === null || options === void 0 ? void 0 : options.cacheNonce) != null) query.set(\"cacheNonce\", String(options.cacheNonce));\n\t\t\tconst queryString = query.toString();\n\t\t\treturn data.map((datum) => _objectSpread2(_objectSpread2({}, datum), {}, { signedUrl: datum.signedURL ? encodeURI(`${_this9.url}${datum.signedURL}${queryString ? `&${queryString}` : \"\"}`) : null }));\n\t\t});\n\t}\n\t/**\n\t* Downloads a file from a private bucket. For public buckets, make a request to the URL returned from `getPublicUrl` instead.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The full path and file name of the file to be downloaded. For example `folder/image.png`.\n\t* @param options.transform Transform the asset before serving it to the client.\n\t* @param options.cacheNonce Append a cache nonce parameter to the URL to invalidate the cache.\n\t* @param parameters Additional fetch parameters like signal for cancellation. Supports standard fetch options including cache control.\n\t* @returns BlobDownloadBuilder instance for downloading the file\n\t*\n\t* @example Download file\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .download('folder/avatar1.png')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": <BLOB>,\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @example Download file with transformations\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .download('folder/avatar1.png', {\n\t* transform: {\n\t* width: 100,\n\t* height: 100,\n\t* quality: 80\n\t* }\n\t* })\n\t* ```\n\t*\n\t* @example Download with cache control (useful in Edge Functions)\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .download('folder/avatar1.png', {}, { cache: 'no-store' })\n\t* ```\n\t*\n\t* @example Download with abort signal\n\t* ```js\n\t* const controller = new AbortController()\n\t* setTimeout(() => controller.abort(), 5000)\n\t*\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .download('folder/avatar1.png', {}, { signal: controller.signal })\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: none\n\t* - `objects` table permissions: `select`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tdownload(path, options, parameters) {\n\t\tconst renderPath = typeof (options === null || options === void 0 ? void 0 : options.transform) === \"object\" && options.transform !== null && Object.keys(options.transform).length > 0 ? \"render/image/authenticated\" : \"object\";\n\t\tconst query = new URLSearchParams();\n\t\tif (options === null || options === void 0 ? void 0 : options.transform) this.applyTransformOptsToQuery(query, options.transform);\n\t\tif ((options === null || options === void 0 ? void 0 : options.cacheNonce) != null) query.set(\"cacheNonce\", String(options.cacheNonce));\n\t\tconst queryString = query.toString();\n\t\tconst _path = this._getFinalPath(path);\n\t\tconst downloadFn = () => get(this.fetch, `${this.url}/${renderPath}/${_path}${queryString ? `?${queryString}` : \"\"}`, {\n\t\t\theaders: this.headers,\n\t\t\tnoResolveJson: true\n\t\t}, parameters);\n\t\treturn new BlobDownloadBuilder(downloadFn, this.shouldThrowOnError);\n\t}\n\t/**\n\t* Retrieves the details of an existing file.\n\t*\n\t* Returns detailed file metadata including size, content type, and timestamps.\n\t* Note: The API returns `last_modified` field, not `updated_at`.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The file path, including the file name. For example `folder/image.png`.\n\t* @returns Promise with response containing file metadata or error\n\t*\n\t* @example Get file info\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .info('folder/avatar1.png')\n\t*\n\t* if (data) {\n\t* console.log('Last modified:', data.lastModified)\n\t* console.log('Size:', data.size)\n\t* }\n\t* ```\n\t*/\n\tasync info(path) {\n\t\tvar _this10 = this;\n\t\tconst _path = _this10._getFinalPath(path);\n\t\treturn _this10.handleOperation(async () => {\n\t\t\treturn recursiveToCamel(await get(_this10.fetch, `${_this10.url}/object/info/${_path}`, { headers: _this10.headers }));\n\t\t});\n\t}\n\t/**\n\t* Checks the existence of a file.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The file path, including the file name. For example `folder/image.png`.\n\t* @returns Promise with response containing boolean indicating file existence or error\n\t*\n\t* @example Check file existence\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .exists('folder/avatar1.png')\n\t* ```\n\t*/\n\tasync exists(path) {\n\t\tvar _this11 = this;\n\t\tconst _path = _this11._getFinalPath(path);\n\t\ttry {\n\t\t\tawait head(_this11.fetch, `${_this11.url}/object/${_path}`, { headers: _this11.headers });\n\t\t\treturn {\n\t\t\t\tdata: true,\n\t\t\t\terror: null\n\t\t\t};\n\t\t} catch (error) {\n\t\t\tif (_this11.shouldThrowOnError) throw error;\n\t\t\tif (isStorageError(error)) {\n\t\t\t\tvar _error$originalError;\n\t\t\t\tconst status = error instanceof StorageApiError ? error.status : error instanceof StorageUnknownError ? (_error$originalError = error.originalError) === null || _error$originalError === void 0 ? void 0 : _error$originalError.status : void 0;\n\t\t\t\tif (status !== void 0 && [400, 404].includes(status)) return {\n\t\t\t\t\tdata: false,\n\t\t\t\t\terror\n\t\t\t\t};\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\t/**\n\t* A simple convenience function to get the URL for an asset in a public bucket. If you do not want to use this function, you can construct the public URL by concatenating the bucket URL with the path to the asset.\n\t* This function does not verify if the bucket is public. If a public URL is created for a bucket which is not public, you will not be able to download the asset.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The path and name of the file to generate the public URL for. For example `folder/image.png`.\n\t* @param options.download Triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\n\t* @param options.transform Transform the asset before serving it to the client.\n\t* @param options.cacheNonce Append a cache nonce parameter to the URL to invalidate the cache.\n\t* @returns Object with public URL\n\t*\n\t* @example Returns the URL for an asset in a public bucket\n\t* ```js\n\t* const { data } = supabase\n\t* .storage\n\t* .from('public-bucket')\n\t* .getPublicUrl('folder/avatar1.png')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"publicUrl\": \"https://example.supabase.co/storage/v1/object/public/public-bucket/folder/avatar1.png\"\n\t* }\n\t* }\n\t* ```\n\t*\n\t* @example Returns the URL for an asset in a public bucket with transformations\n\t* ```js\n\t* const { data } = supabase\n\t* .storage\n\t* .from('public-bucket')\n\t* .getPublicUrl('folder/avatar1.png', {\n\t* transform: {\n\t* width: 100,\n\t* height: 100,\n\t* }\n\t* })\n\t* ```\n\t*\n\t* @example Returns the URL which triggers the download of an asset in a public bucket\n\t* ```js\n\t* const { data } = supabase\n\t* .storage\n\t* .from('public-bucket')\n\t* .getPublicUrl('folder/avatar1.png', {\n\t* download: true,\n\t* })\n\t* ```\n\t*\n\t* @remarks\n\t* - The bucket needs to be set to public, either via [updateBucket()](/docs/reference/javascript/storage-updatebucket) or by going to Storage on [supabase.com/dashboard](https://supabase.com/dashboard), clicking the overflow menu on a bucket and choosing \"Make public\"\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: none\n\t* - `objects` table permissions: none\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tgetPublicUrl(path, options) {\n\t\tconst _path = this._getFinalPath(path);\n\t\tconst query = new URLSearchParams();\n\t\tif (options === null || options === void 0 ? void 0 : options.download) query.set(\"download\", options.download === true ? \"\" : options.download);\n\t\tif (options === null || options === void 0 ? void 0 : options.transform) this.applyTransformOptsToQuery(query, options.transform);\n\t\tif ((options === null || options === void 0 ? void 0 : options.cacheNonce) != null) query.set(\"cacheNonce\", String(options.cacheNonce));\n\t\tconst queryString = query.toString();\n\t\tconst renderPath = typeof (options === null || options === void 0 ? void 0 : options.transform) === \"object\" && options.transform !== null && Object.keys(options.transform).length > 0 ? \"render/image\" : \"object\";\n\t\treturn { data: { publicUrl: encodeURI(`${this.url}/${renderPath}/public/${_path}`) + (queryString ? `?${queryString}` : \"\") } };\n\t}\n\t/**\n\t* Deletes files within the same bucket\n\t*\n\t* Returns an array of FileObject entries for the deleted files. Note that deprecated\n\t* fields like `bucket_id` may or may not be present in the response - do not rely on them.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param paths An array of files to delete, including the path and file name. For example [`'folder/image.png'`].\n\t* @returns Promise with response containing array of deleted file objects or error\n\t*\n\t* @example Delete file\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .remove(['folder/avatar1.png'])\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": [],\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: none\n\t* - `objects` table permissions: `delete` and `select`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync remove(paths) {\n\t\tvar _this12 = this;\n\t\treturn _this12.handleOperation(async () => {\n\t\t\treturn await remove(_this12.fetch, `${_this12.url}/object/${_this12.bucketId}`, { prefixes: paths }, { headers: _this12.headers });\n\t\t});\n\t}\n\t/**\n\t* Get file metadata\n\t* @param id the file id to retrieve metadata\n\t*/\n\t/**\n\t* Update file metadata\n\t* @param id the file id to update metadata\n\t* @param meta the new file metadata\n\t*/\n\t/**\n\t* Lists all the files and folders within a path of the bucket.\n\t*\n\t* **Important:** For folder entries, fields like `id`, `updated_at`, `created_at`,\n\t* `last_accessed_at`, and `metadata` will be `null`. Only files have these fields populated.\n\t* Additionally, deprecated fields like `bucket_id`, `owner`, and `buckets` are NOT returned\n\t* by this method.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param path The folder path.\n\t* @param options Search options including limit (defaults to 100), offset, sortBy, and search\n\t* @param parameters Optional fetch parameters including signal for cancellation\n\t* @returns Promise with response containing array of files/folders or error\n\t*\n\t* @example List files in a bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .list('folder', {\n\t* limit: 100,\n\t* offset: 0,\n\t* sortBy: { column: 'name', order: 'asc' },\n\t* })\n\t*\n\t* // Handle files vs folders\n\t* data?.forEach(item => {\n\t* if (item.id !== null) {\n\t* // It's a file\n\t* console.log('File:', item.name, 'Size:', item.metadata?.size)\n\t* } else {\n\t* // It's a folder\n\t* console.log('Folder:', item.name)\n\t* }\n\t* })\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"avatar1.png\",\n\t* \"id\": \"e668cf7f-821b-4a2f-9dce-7dfa5dd1cfd2\",\n\t* \"updated_at\": \"2024-05-22T23:06:05.580Z\",\n\t* \"created_at\": \"2024-05-22T23:04:34.443Z\",\n\t* \"last_accessed_at\": \"2024-05-22T23:04:34.443Z\",\n\t* \"metadata\": {\n\t* \"eTag\": \"\\\"c5e8c553235d9af30ef4f6e280790b92\\\"\",\n\t* \"size\": 32175,\n\t* \"mimetype\": \"image/png\",\n\t* \"cacheControl\": \"max-age=3600\",\n\t* \"lastModified\": \"2024-05-22T23:06:05.574Z\",\n\t* \"contentLength\": 32175,\n\t* \"httpStatusCode\": 200\n\t* }\n\t* }\n\t* ],\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @example Search files in a bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .list('folder', {\n\t* limit: 100,\n\t* offset: 0,\n\t* sortBy: { column: 'name', order: 'asc' },\n\t* search: 'jon'\n\t* })\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: none\n\t* - `objects` table permissions: `select`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync list(path, options, parameters) {\n\t\tvar _this13 = this;\n\t\treturn _this13.handleOperation(async () => {\n\t\t\tconst body = _objectSpread2(_objectSpread2(_objectSpread2({}, DEFAULT_SEARCH_OPTIONS), options), {}, { prefix: path || \"\" });\n\t\t\treturn await post(_this13.fetch, `${_this13.url}/object/list/${_this13.bucketId}`, body, { headers: _this13.headers }, parameters);\n\t\t});\n\t}\n\t/**\n\t* Lists all the files and folders within a bucket using the V2 API with pagination support.\n\t*\n\t* **Important:** Folder entries in the `folders` array only contain `name` and optionally `key` —\n\t* they have no `id`, timestamps, or `metadata` fields. Full file metadata is only available\n\t* on entries in the `objects` array.\n\t*\n\t* @experimental this method signature might change in the future\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param options Search options including prefix, cursor for pagination, limit, with_delimiter\n\t* @param parameters Optional fetch parameters including signal for cancellation\n\t* @returns Promise with response containing folders/objects arrays with pagination info or error\n\t*\n\t* @example List files with pagination\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .listV2({\n\t* prefix: 'folder/',\n\t* limit: 100,\n\t* })\n\t*\n\t* // Handle pagination\n\t* if (data?.hasNext) {\n\t* const nextPage = await supabase\n\t* .storage\n\t* .from('avatars')\n\t* .listV2({\n\t* prefix: 'folder/',\n\t* cursor: data.nextCursor,\n\t* })\n\t* }\n\t*\n\t* // Handle files vs folders\n\t* data?.objects.forEach(file => {\n\t* if (file.id !== null) {\n\t* console.log('File:', file.name, 'Size:', file.metadata?.size)\n\t* }\n\t* })\n\t* data?.folders.forEach(folder => {\n\t* console.log('Folder:', folder.name)\n\t* })\n\t* ```\n\t*/\n\tasync listV2(options, parameters) {\n\t\tvar _this14 = this;\n\t\treturn _this14.handleOperation(async () => {\n\t\t\tconst body = _objectSpread2({}, options);\n\t\t\treturn await post(_this14.fetch, `${_this14.url}/object/list-v2/${_this14.bucketId}`, body, { headers: _this14.headers }, parameters);\n\t\t});\n\t}\n\tencodeMetadata(metadata) {\n\t\treturn JSON.stringify(metadata);\n\t}\n\ttoBase64(data) {\n\t\tif (typeof Buffer !== \"undefined\") return Buffer.from(data).toString(\"base64\");\n\t\treturn btoa(data);\n\t}\n\t_getFinalPath(path) {\n\t\treturn `${this.bucketId}/${path.replace(/^\\/+/, \"\")}`;\n\t}\n\t_removeEmptyFolders(path) {\n\t\treturn path.replace(/^\\/|\\/$/g, \"\").replace(/\\/+/g, \"/\");\n\t}\n\t/** Modifies the `query`, appending values the from `transform` */\n\tapplyTransformOptsToQuery(query, transform) {\n\t\tif (transform.width) query.set(\"width\", transform.width.toString());\n\t\tif (transform.height) query.set(\"height\", transform.height.toString());\n\t\tif (transform.resize) query.set(\"resize\", transform.resize);\n\t\tif (transform.format) query.set(\"format\", transform.format);\n\t\tif (transform.quality) query.set(\"quality\", transform.quality.toString());\n\t\treturn query;\n\t}\n};\n\n//#endregion\n//#region src/lib/version.ts\nconst version = \"2.105.3\";\n\n//#endregion\n//#region src/lib/constants.ts\nconst DEFAULT_HEADERS = { \"X-Client-Info\": `storage-js/${version}` };\n\n//#endregion\n//#region src/packages/StorageBucketApi.ts\nvar StorageBucketApi = class extends BaseApiClient {\n\tconstructor(url, headers = {}, fetch$1, opts) {\n\t\tconst baseUrl = new URL(url);\n\t\tif (opts === null || opts === void 0 ? void 0 : opts.useNewHostname) {\n\t\t\tif (/supabase\\.(co|in|red)$/.test(baseUrl.hostname) && !baseUrl.hostname.includes(\"storage.supabase.\")) baseUrl.hostname = baseUrl.hostname.replace(\"supabase.\", \"storage.supabase.\");\n\t\t}\n\t\tconst finalUrl = baseUrl.href.replace(/\\/$/, \"\");\n\t\tconst finalHeaders = _objectSpread2(_objectSpread2({}, DEFAULT_HEADERS), headers);\n\t\tsuper(finalUrl, finalHeaders, fetch$1, \"storage\");\n\t}\n\t/**\n\t* Retrieves the details of all Storage buckets within an existing project.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param options Query parameters for listing buckets\n\t* @param options.limit Maximum number of buckets to return\n\t* @param options.offset Number of buckets to skip\n\t* @param options.sortColumn Column to sort by ('id', 'name', 'created_at', 'updated_at')\n\t* @param options.sortOrder Sort order ('asc' or 'desc')\n\t* @param options.search Search term to filter bucket names\n\t* @returns Promise with response containing array of buckets or error\n\t*\n\t* @example List buckets\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .listBuckets()\n\t* ```\n\t*\n\t* @example List buckets with options\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .listBuckets({\n\t* limit: 10,\n\t* offset: 0,\n\t* sortColumn: 'created_at',\n\t* sortOrder: 'desc',\n\t* search: 'prod'\n\t* })\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: `select`\n\t* - `objects` table permissions: none\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync listBuckets(options) {\n\t\tvar _this = this;\n\t\treturn _this.handleOperation(async () => {\n\t\t\tconst queryString = _this.listBucketOptionsToQueryString(options);\n\t\t\treturn await get(_this.fetch, `${_this.url}/bucket${queryString}`, { headers: _this.headers });\n\t\t});\n\t}\n\t/**\n\t* Retrieves the details of an existing Storage bucket.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param id The unique identifier of the bucket you would like to retrieve.\n\t* @returns Promise with response containing bucket details or error\n\t*\n\t* @example Get bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .getBucket('avatars')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"id\": \"avatars\",\n\t* \"name\": \"avatars\",\n\t* \"owner\": \"\",\n\t* \"public\": false,\n\t* \"file_size_limit\": 1024,\n\t* \"allowed_mime_types\": [\n\t* \"image/png\"\n\t* ],\n\t* \"created_at\": \"2024-05-22T22:26:05.100Z\",\n\t* \"updated_at\": \"2024-05-22T22:26:05.100Z\"\n\t* },\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: `select`\n\t* - `objects` table permissions: none\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync getBucket(id) {\n\t\tvar _this2 = this;\n\t\treturn _this2.handleOperation(async () => {\n\t\t\treturn await get(_this2.fetch, `${_this2.url}/bucket/${id}`, { headers: _this2.headers });\n\t\t});\n\t}\n\t/**\n\t* Creates a new Storage bucket\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param id A unique identifier for the bucket you are creating.\n\t* @param options.public The visibility of the bucket. Public buckets don't require an authorization token to download objects, but still require a valid token for all other operations. By default, buckets are private.\n\t* @param options.fileSizeLimit specifies the max file size in bytes that can be uploaded to this bucket.\n\t* The global file size limit takes precedence over this value.\n\t* The default value is null, which doesn't set a per bucket file size limit.\n\t* @param options.allowedMimeTypes specifies the allowed mime types that this bucket can accept during upload.\n\t* The default value is null, which allows files with all mime types to be uploaded.\n\t* Each mime type specified can be a wildcard, e.g. image/*, or a specific mime type, e.g. image/png.\n\t* @param options.type (private-beta) specifies the bucket type. see `BucketType` for more details.\n\t* - default bucket type is `STANDARD`\n\t* @returns Promise with response containing newly created bucket name or error\n\t*\n\t* @example Create bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .createBucket('avatars', {\n\t* public: false,\n\t* allowedMimeTypes: ['image/png'],\n\t* fileSizeLimit: 1024\n\t* })\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"name\": \"avatars\"\n\t* },\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: `insert`\n\t* - `objects` table permissions: none\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync createBucket(id, options = { public: false }) {\n\t\tvar _this3 = this;\n\t\treturn _this3.handleOperation(async () => {\n\t\t\treturn await post(_this3.fetch, `${_this3.url}/bucket`, {\n\t\t\t\tid,\n\t\t\t\tname: id,\n\t\t\t\ttype: options.type,\n\t\t\t\tpublic: options.public,\n\t\t\t\tfile_size_limit: options.fileSizeLimit,\n\t\t\t\tallowed_mime_types: options.allowedMimeTypes\n\t\t\t}, { headers: _this3.headers });\n\t\t});\n\t}\n\t/**\n\t* Updates a Storage bucket\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param id A unique identifier for the bucket you are updating.\n\t* @param options.public The visibility of the bucket. Public buckets don't require an authorization token to download objects, but still require a valid token for all other operations.\n\t* @param options.fileSizeLimit specifies the max file size in bytes that can be uploaded to this bucket.\n\t* The global file size limit takes precedence over this value.\n\t* The default value is null, which doesn't set a per bucket file size limit.\n\t* @param options.allowedMimeTypes specifies the allowed mime types that this bucket can accept during upload.\n\t* The default value is null, which allows files with all mime types to be uploaded.\n\t* Each mime type specified can be a wildcard, e.g. image/*, or a specific mime type, e.g. image/png.\n\t* @returns Promise with response containing success message or error\n\t*\n\t* @example Update bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .updateBucket('avatars', {\n\t* public: false,\n\t* allowedMimeTypes: ['image/png'],\n\t* fileSizeLimit: 1024\n\t* })\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"message\": \"Successfully updated\"\n\t* },\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: `select` and `update`\n\t* - `objects` table permissions: none\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync updateBucket(id, options) {\n\t\tvar _this4 = this;\n\t\treturn _this4.handleOperation(async () => {\n\t\t\treturn await put(_this4.fetch, `${_this4.url}/bucket/${id}`, {\n\t\t\t\tid,\n\t\t\t\tname: id,\n\t\t\t\tpublic: options.public,\n\t\t\t\tfile_size_limit: options.fileSizeLimit,\n\t\t\t\tallowed_mime_types: options.allowedMimeTypes\n\t\t\t}, { headers: _this4.headers });\n\t\t});\n\t}\n\t/**\n\t* Removes all objects inside a single bucket.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param id The unique identifier of the bucket you would like to empty.\n\t* @returns Promise with success message or error\n\t*\n\t* @example Empty bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .emptyBucket('avatars')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"message\": \"Successfully emptied\"\n\t* },\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: `select`\n\t* - `objects` table permissions: `select` and `delete`\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync emptyBucket(id) {\n\t\tvar _this5 = this;\n\t\treturn _this5.handleOperation(async () => {\n\t\t\treturn await post(_this5.fetch, `${_this5.url}/bucket/${id}/empty`, {}, { headers: _this5.headers });\n\t\t});\n\t}\n\t/**\n\t* Deletes an existing bucket. A bucket can't be deleted with existing objects inside it.\n\t* You must first `empty()` the bucket.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t* @param id The unique identifier of the bucket you would like to delete.\n\t* @returns Promise with success message or error\n\t*\n\t* @example Delete bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .deleteBucket('avatars')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"message\": \"Successfully deleted\"\n\t* },\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - RLS policy permissions required:\n\t* - `buckets` table permissions: `select` and `delete`\n\t* - `objects` table permissions: none\n\t* - Refer to the [Storage guide](/docs/guides/storage/security/access-control) on how access control works\n\t*/\n\tasync deleteBucket(id) {\n\t\tvar _this6 = this;\n\t\treturn _this6.handleOperation(async () => {\n\t\t\treturn await remove(_this6.fetch, `${_this6.url}/bucket/${id}`, {}, { headers: _this6.headers });\n\t\t});\n\t}\n\tlistBucketOptionsToQueryString(options) {\n\t\tconst params = {};\n\t\tif (options) {\n\t\t\tif (\"limit\" in options) params.limit = String(options.limit);\n\t\t\tif (\"offset\" in options) params.offset = String(options.offset);\n\t\t\tif (options.search) params.search = options.search;\n\t\t\tif (options.sortColumn) params.sortColumn = options.sortColumn;\n\t\t\tif (options.sortOrder) params.sortOrder = options.sortOrder;\n\t\t}\n\t\treturn Object.keys(params).length > 0 ? \"?\" + new URLSearchParams(params).toString() : \"\";\n\t}\n};\n\n//#endregion\n//#region src/packages/StorageAnalyticsClient.ts\n/**\n* Client class for managing Analytics Buckets using Iceberg tables\n* Provides methods for creating, listing, and deleting analytics buckets\n*/\nvar StorageAnalyticsClient = class extends BaseApiClient {\n\t/**\n\t* @alpha\n\t*\n\t* Creates a new StorageAnalyticsClient instance\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Analytics Buckets\n\t* @param url - The base URL for the storage API\n\t* @param headers - HTTP headers to include in requests\n\t* @param fetch - Optional custom fetch implementation\n\t*\n\t* @example Using supabase-js (recommended)\n\t* ```typescript\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t* const { data, error } = await supabase.storage.analytics.listBuckets()\n\t* ```\n\t*\n\t* @example Standalone import for bundle-sensitive environments\n\t* ```typescript\n\t* import { StorageAnalyticsClient } from '@supabase/storage-js'\n\t*\n\t* const client = new StorageAnalyticsClient(url, headers)\n\t* ```\n\t*/\n\tconstructor(url, headers = {}, fetch$1) {\n\t\tconst finalUrl = url.replace(/\\/$/, \"\");\n\t\tconst finalHeaders = _objectSpread2(_objectSpread2({}, DEFAULT_HEADERS), headers);\n\t\tsuper(finalUrl, finalHeaders, fetch$1, \"storage\");\n\t}\n\t/**\n\t* @alpha\n\t*\n\t* Creates a new analytics bucket using Iceberg tables\n\t* Analytics buckets are optimized for analytical queries and data processing\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Analytics Buckets\n\t* @param name A unique name for the bucket you are creating\n\t* @returns Promise with response containing newly created analytics bucket or error\n\t*\n\t* @example Create analytics bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .analytics\n\t* .createBucket('analytics-data')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"name\": \"analytics-data\",\n\t* \"type\": \"ANALYTICS\",\n\t* \"format\": \"iceberg\",\n\t* \"created_at\": \"2024-05-22T22:26:05.100Z\",\n\t* \"updated_at\": \"2024-05-22T22:26:05.100Z\"\n\t* },\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - Creates a new analytics bucket using Iceberg tables\n\t* - Analytics buckets are optimized for analytical queries and data processing\n\t*/\n\tasync createBucket(name) {\n\t\tvar _this = this;\n\t\treturn _this.handleOperation(async () => {\n\t\t\treturn await post(_this.fetch, `${_this.url}/bucket`, { name }, { headers: _this.headers });\n\t\t});\n\t}\n\t/**\n\t* @alpha\n\t*\n\t* Retrieves the details of all Analytics Storage buckets within an existing project\n\t* Only returns buckets of type 'ANALYTICS'\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Analytics Buckets\n\t* @param options Query parameters for listing buckets\n\t* @param options.limit Maximum number of buckets to return\n\t* @param options.offset Number of buckets to skip\n\t* @param options.sortColumn Column to sort by ('name', 'created_at', 'updated_at')\n\t* @param options.sortOrder Sort order ('asc' or 'desc')\n\t* @param options.search Search term to filter bucket names\n\t* @returns Promise with response containing array of analytics buckets or error\n\t*\n\t* @example List analytics buckets\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .analytics\n\t* .listBuckets({\n\t* limit: 10,\n\t* offset: 0,\n\t* sortColumn: 'created_at',\n\t* sortOrder: 'desc'\n\t* })\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": [\n\t* {\n\t* \"name\": \"analytics-data\",\n\t* \"type\": \"ANALYTICS\",\n\t* \"format\": \"iceberg\",\n\t* \"created_at\": \"2024-05-22T22:26:05.100Z\",\n\t* \"updated_at\": \"2024-05-22T22:26:05.100Z\"\n\t* }\n\t* ],\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - Retrieves the details of all Analytics Storage buckets within an existing project\n\t* - Only returns buckets of type 'ANALYTICS'\n\t*/\n\tasync listBuckets(options) {\n\t\tvar _this2 = this;\n\t\treturn _this2.handleOperation(async () => {\n\t\t\tconst queryParams = new URLSearchParams();\n\t\t\tif ((options === null || options === void 0 ? void 0 : options.limit) !== void 0) queryParams.set(\"limit\", options.limit.toString());\n\t\t\tif ((options === null || options === void 0 ? void 0 : options.offset) !== void 0) queryParams.set(\"offset\", options.offset.toString());\n\t\t\tif (options === null || options === void 0 ? void 0 : options.sortColumn) queryParams.set(\"sortColumn\", options.sortColumn);\n\t\t\tif (options === null || options === void 0 ? void 0 : options.sortOrder) queryParams.set(\"sortOrder\", options.sortOrder);\n\t\t\tif (options === null || options === void 0 ? void 0 : options.search) queryParams.set(\"search\", options.search);\n\t\t\tconst queryString = queryParams.toString();\n\t\t\tconst url = queryString ? `${_this2.url}/bucket?${queryString}` : `${_this2.url}/bucket`;\n\t\t\treturn await get(_this2.fetch, url, { headers: _this2.headers });\n\t\t});\n\t}\n\t/**\n\t* @alpha\n\t*\n\t* Deletes an existing analytics bucket\n\t* A bucket can't be deleted with existing objects inside it\n\t* You must first empty the bucket before deletion\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Analytics Buckets\n\t* @param bucketName The unique identifier of the bucket you would like to delete\n\t* @returns Promise with response containing success message or error\n\t*\n\t* @example Delete analytics bucket\n\t* ```js\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .analytics\n\t* .deleteBucket('analytics-data')\n\t* ```\n\t*\n\t* Response:\n\t* ```json\n\t* {\n\t* \"data\": {\n\t* \"message\": \"Successfully deleted\"\n\t* },\n\t* \"error\": null\n\t* }\n\t* ```\n\t*\n\t* @remarks\n\t* - Deletes an analytics bucket\n\t*/\n\tasync deleteBucket(bucketName) {\n\t\tvar _this3 = this;\n\t\treturn _this3.handleOperation(async () => {\n\t\t\treturn await remove(_this3.fetch, `${_this3.url}/bucket/${bucketName}`, {}, { headers: _this3.headers });\n\t\t});\n\t}\n\t/**\n\t* @alpha\n\t*\n\t* Get an Iceberg REST Catalog client configured for a specific analytics bucket\n\t* Use this to perform advanced table and namespace operations within the bucket\n\t* The returned client provides full access to the Apache Iceberg REST Catalog API\n\t* with the Supabase `{ data, error }` pattern for consistent error handling on all operations.\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Analytics Buckets\n\t* @param bucketName - The name of the analytics bucket (warehouse) to connect to\n\t* @returns The wrapped Iceberg catalog client\n\t* @throws {StorageError} If the bucket name is invalid\n\t*\n\t* @example Get catalog and create table\n\t* ```js\n\t* // First, create an analytics bucket\n\t* const { data: bucket, error: bucketError } = await supabase\n\t* .storage\n\t* .analytics\n\t* .createBucket('analytics-data')\n\t*\n\t* // Get the Iceberg catalog for that bucket\n\t* const catalog = supabase.storage.analytics.from('analytics-data')\n\t*\n\t* // Create a namespace\n\t* const { error: nsError } = await catalog.createNamespace({ namespace: ['default'] })\n\t*\n\t* // Create a table with schema\n\t* const { data: tableMetadata, error: tableError } = await catalog.createTable(\n\t* { namespace: ['default'] },\n\t* {\n\t* name: 'events',\n\t* schema: {\n\t* type: 'struct',\n\t* fields: [\n\t* { id: 1, name: 'id', type: 'long', required: true },\n\t* { id: 2, name: 'timestamp', type: 'timestamp', required: true },\n\t* { id: 3, name: 'user_id', type: 'string', required: false }\n\t* ],\n\t* 'schema-id': 0,\n\t* 'identifier-field-ids': [1]\n\t* },\n\t* 'partition-spec': {\n\t* 'spec-id': 0,\n\t* fields: []\n\t* },\n\t* 'write-order': {\n\t* 'order-id': 0,\n\t* fields: []\n\t* },\n\t* properties: {\n\t* 'write.format.default': 'parquet'\n\t* }\n\t* }\n\t* )\n\t* ```\n\t*\n\t* @example List tables in namespace\n\t* ```js\n\t* const catalog = supabase.storage.analytics.from('analytics-data')\n\t*\n\t* // List all tables in the default namespace\n\t* const { data: tables, error: listError } = await catalog.listTables({ namespace: ['default'] })\n\t* if (listError) {\n\t* if (listError.isNotFound()) {\n\t* console.log('Namespace not found')\n\t* }\n\t* return\n\t* }\n\t* console.log(tables) // [{ namespace: ['default'], name: 'events' }]\n\t* ```\n\t*\n\t* @example Working with namespaces\n\t* ```js\n\t* const catalog = supabase.storage.analytics.from('analytics-data')\n\t*\n\t* // List all namespaces\n\t* const { data: namespaces } = await catalog.listNamespaces()\n\t*\n\t* // Create namespace with properties\n\t* await catalog.createNamespace(\n\t* { namespace: ['production'] },\n\t* { properties: { owner: 'data-team', env: 'prod' } }\n\t* )\n\t* ```\n\t*\n\t* @example Cleanup operations\n\t* ```js\n\t* const catalog = supabase.storage.analytics.from('analytics-data')\n\t*\n\t* // Drop table with purge option (removes all data)\n\t* const { error: dropError } = await catalog.dropTable(\n\t* { namespace: ['default'], name: 'events' },\n\t* { purge: true }\n\t* )\n\t*\n\t* if (dropError?.isNotFound()) {\n\t* console.log('Table does not exist')\n\t* }\n\t*\n\t* // Drop namespace (must be empty)\n\t* await catalog.dropNamespace({ namespace: ['default'] })\n\t* ```\n\t*\n\t* @remarks\n\t* This method provides a bridge between Supabase's bucket management and the standard\n\t* Apache Iceberg REST Catalog API. The bucket name maps to the Iceberg warehouse parameter.\n\t* All authentication and configuration is handled automatically using your Supabase credentials.\n\t*\n\t* **Error Handling**: Invalid bucket names throw immediately. All catalog\n\t* operations return `{ data, error }` where errors are `IcebergError` instances from iceberg-js.\n\t* Use helper methods like `error.isNotFound()` or check `error.status` for specific error handling.\n\t* Use `.throwOnError()` on the analytics client if you prefer exceptions for catalog operations.\n\t*\n\t* **Cleanup Operations**: When using `dropTable`, the `purge: true` option permanently\n\t* deletes all table data. Without it, the table is marked as deleted but data remains.\n\t*\n\t* **Library Dependency**: The returned catalog wraps `IcebergRestCatalog` from iceberg-js.\n\t* For complete API documentation and advanced usage, refer to the\n\t* [iceberg-js documentation](https://supabase.github.io/iceberg-js/).\n\t*/\n\tfrom(bucketName) {\n\t\tvar _this4 = this;\n\t\tif (!isValidBucketName(bucketName)) throw new StorageError(\"Invalid bucket name: File, folder, and bucket names must follow AWS object key naming guidelines and should avoid the use of any other characters.\");\n\t\tconst catalog = new iceberg_js__WEBPACK_IMPORTED_MODULE_0__.IcebergRestCatalog({\n\t\t\tbaseUrl: this.url,\n\t\t\tcatalogName: bucketName,\n\t\t\tauth: {\n\t\t\t\ttype: \"custom\",\n\t\t\t\tgetHeaders: async () => _this4.headers\n\t\t\t},\n\t\t\tfetch: this.fetch\n\t\t});\n\t\tconst shouldThrowOnError = this.shouldThrowOnError;\n\t\treturn new Proxy(catalog, { get(target, prop) {\n\t\t\tconst value = target[prop];\n\t\t\tif (typeof value !== \"function\") return value;\n\t\t\treturn async (...args) => {\n\t\t\t\ttry {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: await value.apply(target, args),\n\t\t\t\t\t\terror: null\n\t\t\t\t\t};\n\t\t\t\t} catch (error) {\n\t\t\t\t\tif (shouldThrowOnError) throw error;\n\t\t\t\t\treturn {\n\t\t\t\t\t\tdata: null,\n\t\t\t\t\t\terror\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t};\n\t\t} });\n\t}\n};\n\n//#endregion\n//#region src/packages/VectorIndexApi.ts\n/**\n* @hidden\n* Base implementation for vector index operations.\n* Use {@link VectorBucketScope} via `supabase.storage.vectors.from('bucket')` instead.\n*/\nvar VectorIndexApi = class extends BaseApiClient {\n\t/** Creates a new VectorIndexApi instance */\n\tconstructor(url, headers = {}, fetch$1) {\n\t\tconst finalUrl = url.replace(/\\/$/, \"\");\n\t\tconst finalHeaders = _objectSpread2(_objectSpread2({}, DEFAULT_HEADERS), {}, { \"Content-Type\": \"application/json\" }, headers);\n\t\tsuper(finalUrl, finalHeaders, fetch$1, \"vectors\");\n\t}\n\t/** Creates a new vector index within a bucket */\n\tasync createIndex(options) {\n\t\tvar _this = this;\n\t\treturn _this.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this.fetch, `${_this.url}/CreateIndex`, options, { headers: _this.headers }) || {};\n\t\t});\n\t}\n\t/** Retrieves metadata for a specific vector index */\n\tasync getIndex(vectorBucketName, indexName) {\n\t\tvar _this2 = this;\n\t\treturn _this2.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this2.fetch, `${_this2.url}/GetIndex`, {\n\t\t\t\tvectorBucketName,\n\t\t\t\tindexName\n\t\t\t}, { headers: _this2.headers });\n\t\t});\n\t}\n\t/** Lists vector indexes within a bucket with optional filtering and pagination */\n\tasync listIndexes(options) {\n\t\tvar _this3 = this;\n\t\treturn _this3.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this3.fetch, `${_this3.url}/ListIndexes`, options, { headers: _this3.headers });\n\t\t});\n\t}\n\t/** Deletes a vector index and all its data */\n\tasync deleteIndex(vectorBucketName, indexName) {\n\t\tvar _this4 = this;\n\t\treturn _this4.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this4.fetch, `${_this4.url}/DeleteIndex`, {\n\t\t\t\tvectorBucketName,\n\t\t\t\tindexName\n\t\t\t}, { headers: _this4.headers }) || {};\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/packages/VectorDataApi.ts\n/**\n* @hidden\n* Base implementation for vector data operations.\n* Use {@link VectorIndexScope} via `supabase.storage.vectors.from('bucket').index('idx')` instead.\n*/\nvar VectorDataApi = class extends BaseApiClient {\n\t/** Creates a new VectorDataApi instance */\n\tconstructor(url, headers = {}, fetch$1) {\n\t\tconst finalUrl = url.replace(/\\/$/, \"\");\n\t\tconst finalHeaders = _objectSpread2(_objectSpread2({}, DEFAULT_HEADERS), {}, { \"Content-Type\": \"application/json\" }, headers);\n\t\tsuper(finalUrl, finalHeaders, fetch$1, \"vectors\");\n\t}\n\t/** Inserts or updates vectors in batch (1-500 per request) */\n\tasync putVectors(options) {\n\t\tvar _this = this;\n\t\tif (options.vectors.length < 1 || options.vectors.length > 500) throw new Error(\"Vector batch size must be between 1 and 500 items\");\n\t\treturn _this.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this.fetch, `${_this.url}/PutVectors`, options, { headers: _this.headers }) || {};\n\t\t});\n\t}\n\t/** Retrieves vectors by their keys in batch */\n\tasync getVectors(options) {\n\t\tvar _this2 = this;\n\t\treturn _this2.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this2.fetch, `${_this2.url}/GetVectors`, options, { headers: _this2.headers });\n\t\t});\n\t}\n\t/** Lists vectors in an index with pagination */\n\tasync listVectors(options) {\n\t\tvar _this3 = this;\n\t\tif (options.segmentCount !== void 0) {\n\t\t\tif (options.segmentCount < 1 || options.segmentCount > 16) throw new Error(\"segmentCount must be between 1 and 16\");\n\t\t\tif (options.segmentIndex !== void 0) {\n\t\t\t\tif (options.segmentIndex < 0 || options.segmentIndex >= options.segmentCount) throw new Error(`segmentIndex must be between 0 and ${options.segmentCount - 1}`);\n\t\t\t}\n\t\t}\n\t\treturn _this3.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this3.fetch, `${_this3.url}/ListVectors`, options, { headers: _this3.headers });\n\t\t});\n\t}\n\t/** Queries for similar vectors using approximate nearest neighbor search */\n\tasync queryVectors(options) {\n\t\tvar _this4 = this;\n\t\treturn _this4.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this4.fetch, `${_this4.url}/QueryVectors`, options, { headers: _this4.headers });\n\t\t});\n\t}\n\t/** Deletes vectors by their keys in batch (1-500 per request) */\n\tasync deleteVectors(options) {\n\t\tvar _this5 = this;\n\t\tif (options.keys.length < 1 || options.keys.length > 500) throw new Error(\"Keys batch size must be between 1 and 500 items\");\n\t\treturn _this5.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this5.fetch, `${_this5.url}/DeleteVectors`, options, { headers: _this5.headers }) || {};\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/packages/VectorBucketApi.ts\n/**\n* @hidden\n* Base implementation for vector bucket operations.\n* Use {@link StorageVectorsClient} via `supabase.storage.vectors` instead.\n*/\nvar VectorBucketApi = class extends BaseApiClient {\n\t/** Creates a new VectorBucketApi instance */\n\tconstructor(url, headers = {}, fetch$1) {\n\t\tconst finalUrl = url.replace(/\\/$/, \"\");\n\t\tconst finalHeaders = _objectSpread2(_objectSpread2({}, DEFAULT_HEADERS), {}, { \"Content-Type\": \"application/json\" }, headers);\n\t\tsuper(finalUrl, finalHeaders, fetch$1, \"vectors\");\n\t}\n\t/** Creates a new vector bucket */\n\tasync createBucket(vectorBucketName) {\n\t\tvar _this = this;\n\t\treturn _this.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this.fetch, `${_this.url}/CreateVectorBucket`, { vectorBucketName }, { headers: _this.headers }) || {};\n\t\t});\n\t}\n\t/** Retrieves metadata for a specific vector bucket */\n\tasync getBucket(vectorBucketName) {\n\t\tvar _this2 = this;\n\t\treturn _this2.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this2.fetch, `${_this2.url}/GetVectorBucket`, { vectorBucketName }, { headers: _this2.headers });\n\t\t});\n\t}\n\t/** Lists vector buckets with optional filtering and pagination */\n\tasync listBuckets(options = {}) {\n\t\tvar _this3 = this;\n\t\treturn _this3.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this3.fetch, `${_this3.url}/ListVectorBuckets`, options, { headers: _this3.headers });\n\t\t});\n\t}\n\t/** Deletes a vector bucket (must be empty first) */\n\tasync deleteBucket(vectorBucketName) {\n\t\tvar _this4 = this;\n\t\treturn _this4.handleOperation(async () => {\n\t\t\treturn await vectorsApi.post(_this4.fetch, `${_this4.url}/DeleteVectorBucket`, { vectorBucketName }, { headers: _this4.headers }) || {};\n\t\t});\n\t}\n};\n\n//#endregion\n//#region src/packages/StorageVectorsClient.ts\n/**\n*\n* @alpha\n*\n* Main client for interacting with S3 Vectors API\n* Provides access to bucket, index, and vector data operations\n*\n* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n*\n* **Usage Patterns:**\n*\n* ```typescript\n* const { data, error } = await supabase\n* .storage\n* .vectors\n* .createBucket('embeddings-prod')\n*\n* // Access index operations via buckets\n* const bucket = supabase.storage.vectors.from('embeddings-prod')\n* await bucket.createIndex({\n* indexName: 'documents',\n* dataType: 'float32',\n* dimension: 1536,\n* distanceMetric: 'cosine'\n* })\n*\n* // Access vector operations via index\n* const index = bucket.index('documents')\n* await index.putVectors({\n* vectors: [\n* { key: 'doc-1', data: { float32: [...] }, metadata: { title: 'Intro' } }\n* ]\n* })\n*\n* // Query similar vectors\n* const { data } = await index.queryVectors({\n* queryVector: { float32: [...] },\n* topK: 5,\n* returnDistance: true\n* })\n* ```\n*/\nvar StorageVectorsClient = class extends VectorBucketApi {\n\t/**\n\t* @alpha\n\t*\n\t* Creates a StorageVectorsClient that can manage buckets, indexes, and vectors.\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param url - Base URL of the Storage Vectors REST API.\n\t* @param options.headers - Optional headers (for example `Authorization`) applied to every request.\n\t* @param options.fetch - Optional custom `fetch` implementation for non-browser runtimes.\n\t*\n\t* @example Using supabase-js (recommended)\n\t* ```typescript\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t* const bucket = supabase.storage.vectors.from('embeddings-prod')\n\t* ```\n\t*\n\t* @example Standalone import for bundle-sensitive environments\n\t* ```typescript\n\t* import { StorageVectorsClient } from '@supabase/storage-js'\n\t*\n\t* const client = new StorageVectorsClient(url, options)\n\t* ```\n\t*/\n\tconstructor(url, options = {}) {\n\t\tsuper(url, options.headers || {}, options.fetch);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Access operations for a specific vector bucket\n\t* Returns a scoped client for index and vector operations within the bucket\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param vectorBucketName - Name of the vector bucket\n\t* @returns Bucket-scoped client with index and vector operations\n\t*\n\t* @example Accessing a vector bucket\n\t* ```typescript\n\t* const bucket = supabase.storage.vectors.from('embeddings-prod')\n\t* ```\n\t*/\n\tfrom(vectorBucketName) {\n\t\treturn new VectorBucketScope(this.url, this.headers, vectorBucketName, this.fetch);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Creates a new vector bucket\n\t* Vector buckets are containers for vector indexes and their data\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param vectorBucketName - Unique name for the vector bucket\n\t* @returns Promise with empty response on success or error\n\t*\n\t* @example Creating a vector bucket\n\t* ```typescript\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .vectors\n\t* .createBucket('embeddings-prod')\n\t* ```\n\t*/\n\tasync createBucket(vectorBucketName) {\n\t\tvar _superprop_getCreateBucket = () => super.createBucket, _this = this;\n\t\treturn _superprop_getCreateBucket().call(_this, vectorBucketName);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Retrieves metadata for a specific vector bucket\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param vectorBucketName - Name of the vector bucket\n\t* @returns Promise with bucket metadata or error\n\t*\n\t* @example Get bucket metadata\n\t* ```typescript\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .vectors\n\t* .getBucket('embeddings-prod')\n\t*\n\t* console.log('Bucket created:', data?.vectorBucket.creationTime)\n\t* ```\n\t*/\n\tasync getBucket(vectorBucketName) {\n\t\tvar _superprop_getGetBucket = () => super.getBucket, _this2 = this;\n\t\treturn _superprop_getGetBucket().call(_this2, vectorBucketName);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Lists all vector buckets with optional filtering and pagination\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Optional filters (prefix, maxResults, nextToken)\n\t* @returns Promise with list of buckets or error\n\t*\n\t* @example List vector buckets\n\t* ```typescript\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .vectors\n\t* .listBuckets({ prefix: 'embeddings-' })\n\t*\n\t* data?.vectorBuckets.forEach(bucket => {\n\t* console.log(bucket.vectorBucketName)\n\t* })\n\t* ```\n\t*/\n\tasync listBuckets(options = {}) {\n\t\tvar _superprop_getListBuckets = () => super.listBuckets, _this3 = this;\n\t\treturn _superprop_getListBuckets().call(_this3, options);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Deletes a vector bucket (bucket must be empty)\n\t* All indexes must be deleted before deleting the bucket\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param vectorBucketName - Name of the vector bucket to delete\n\t* @returns Promise with empty response on success or error\n\t*\n\t* @example Delete a vector bucket\n\t* ```typescript\n\t* const { data, error } = await supabase\n\t* .storage\n\t* .vectors\n\t* .deleteBucket('embeddings-old')\n\t* ```\n\t*/\n\tasync deleteBucket(vectorBucketName) {\n\t\tvar _superprop_getDeleteBucket = () => super.deleteBucket, _this4 = this;\n\t\treturn _superprop_getDeleteBucket().call(_this4, vectorBucketName);\n\t}\n};\n/**\n*\n* @alpha\n*\n* Scoped client for operations within a specific vector bucket\n* Provides index management and access to vector operations\n*\n* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n*/\nvar VectorBucketScope = class extends VectorIndexApi {\n\t/**\n\t* @alpha\n\t*\n\t* Creates a helper that automatically scopes all index operations to the provided bucket.\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @example Creating a vector bucket scope\n\t* ```typescript\n\t* const bucket = supabase.storage.vectors.from('embeddings-prod')\n\t* ```\n\t*/\n\tconstructor(url, headers, vectorBucketName, fetch$1) {\n\t\tsuper(url, headers, fetch$1);\n\t\tthis.vectorBucketName = vectorBucketName;\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Creates a new vector index in this bucket\n\t* Convenience method that automatically includes the bucket name\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Index configuration (vectorBucketName is automatically set)\n\t* @returns Promise with empty response on success or error\n\t*\n\t* @example Creating a vector index\n\t* ```typescript\n\t* const bucket = supabase.storage.vectors.from('embeddings-prod')\n\t* await bucket.createIndex({\n\t* indexName: 'documents-openai',\n\t* dataType: 'float32',\n\t* dimension: 1536,\n\t* distanceMetric: 'cosine',\n\t* metadataConfiguration: {\n\t* nonFilterableMetadataKeys: ['raw_text']\n\t* }\n\t* })\n\t* ```\n\t*/\n\tasync createIndex(options) {\n\t\tvar _superprop_getCreateIndex = () => super.createIndex, _this5 = this;\n\t\treturn _superprop_getCreateIndex().call(_this5, _objectSpread2(_objectSpread2({}, options), {}, { vectorBucketName: _this5.vectorBucketName }));\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Lists indexes in this bucket\n\t* Convenience method that automatically includes the bucket name\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Listing options (vectorBucketName is automatically set)\n\t* @returns Promise with response containing indexes array and pagination token or error\n\t*\n\t* @example List indexes\n\t* ```typescript\n\t* const bucket = supabase.storage.vectors.from('embeddings-prod')\n\t* const { data } = await bucket.listIndexes({ prefix: 'documents-' })\n\t* ```\n\t*/\n\tasync listIndexes(options = {}) {\n\t\tvar _superprop_getListIndexes = () => super.listIndexes, _this6 = this;\n\t\treturn _superprop_getListIndexes().call(_this6, _objectSpread2(_objectSpread2({}, options), {}, { vectorBucketName: _this6.vectorBucketName }));\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Retrieves metadata for a specific index in this bucket\n\t* Convenience method that automatically includes the bucket name\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param indexName - Name of the index to retrieve\n\t* @returns Promise with index metadata or error\n\t*\n\t* @example Get index metadata\n\t* ```typescript\n\t* const bucket = supabase.storage.vectors.from('embeddings-prod')\n\t* const { data } = await bucket.getIndex('documents-openai')\n\t* console.log('Dimension:', data?.index.dimension)\n\t* ```\n\t*/\n\tasync getIndex(indexName) {\n\t\tvar _superprop_getGetIndex = () => super.getIndex, _this7 = this;\n\t\treturn _superprop_getGetIndex().call(_this7, _this7.vectorBucketName, indexName);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Deletes an index from this bucket\n\t* Convenience method that automatically includes the bucket name\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param indexName - Name of the index to delete\n\t* @returns Promise with empty response on success or error\n\t*\n\t* @example Delete an index\n\t* ```typescript\n\t* const bucket = supabase.storage.vectors.from('embeddings-prod')\n\t* await bucket.deleteIndex('old-index')\n\t* ```\n\t*/\n\tasync deleteIndex(indexName) {\n\t\tvar _superprop_getDeleteIndex = () => super.deleteIndex, _this8 = this;\n\t\treturn _superprop_getDeleteIndex().call(_this8, _this8.vectorBucketName, indexName);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Access operations for a specific index within this bucket\n\t* Returns a scoped client for vector data operations\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param indexName - Name of the index\n\t* @returns Index-scoped client with vector data operations\n\t*\n\t* @example Accessing an index\n\t* ```typescript\n\t* const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n\t*\n\t* // Insert vectors\n\t* await index.putVectors({\n\t* vectors: [\n\t* { key: 'doc-1', data: { float32: [...] }, metadata: { title: 'Intro' } }\n\t* ]\n\t* })\n\t*\n\t* // Query similar vectors\n\t* const { data } = await index.queryVectors({\n\t* queryVector: { float32: [...] },\n\t* topK: 5\n\t* })\n\t* ```\n\t*/\n\tindex(indexName) {\n\t\treturn new VectorIndexScope(this.url, this.headers, this.vectorBucketName, indexName, this.fetch);\n\t}\n};\n/**\n*\n* @alpha\n*\n* Scoped client for operations within a specific vector index\n* Provides vector data operations (put, get, list, query, delete)\n*\n* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n*/\nvar VectorIndexScope = class extends VectorDataApi {\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Creates a helper that automatically scopes all vector operations to the provided bucket/index names.\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @example Creating a vector index scope\n\t* ```typescript\n\t* const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n\t* ```\n\t*/\n\tconstructor(url, headers, vectorBucketName, indexName, fetch$1) {\n\t\tsuper(url, headers, fetch$1);\n\t\tthis.vectorBucketName = vectorBucketName;\n\t\tthis.indexName = indexName;\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Inserts or updates vectors in this index\n\t* Convenience method that automatically includes bucket and index names\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Vector insertion options (bucket and index names automatically set)\n\t* @returns Promise with empty response on success or error\n\t*\n\t* @example Insert vectors into an index\n\t* ```typescript\n\t* const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n\t* await index.putVectors({\n\t* vectors: [\n\t* {\n\t* key: 'doc-1',\n\t* data: { float32: [0.1, 0.2, ...] },\n\t* metadata: { title: 'Introduction', page: 1 }\n\t* }\n\t* ]\n\t* })\n\t* ```\n\t*/\n\tasync putVectors(options) {\n\t\tvar _superprop_getPutVectors = () => super.putVectors, _this9 = this;\n\t\treturn _superprop_getPutVectors().call(_this9, _objectSpread2(_objectSpread2({}, options), {}, {\n\t\t\tvectorBucketName: _this9.vectorBucketName,\n\t\t\tindexName: _this9.indexName\n\t\t}));\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Retrieves vectors by keys from this index\n\t* Convenience method that automatically includes bucket and index names\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Vector retrieval options (bucket and index names automatically set)\n\t* @returns Promise with response containing vectors array or error\n\t*\n\t* @example Get vectors by keys\n\t* ```typescript\n\t* const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n\t* const { data } = await index.getVectors({\n\t* keys: ['doc-1', 'doc-2'],\n\t* returnMetadata: true\n\t* })\n\t* ```\n\t*/\n\tasync getVectors(options) {\n\t\tvar _superprop_getGetVectors = () => super.getVectors, _this10 = this;\n\t\treturn _superprop_getGetVectors().call(_this10, _objectSpread2(_objectSpread2({}, options), {}, {\n\t\t\tvectorBucketName: _this10.vectorBucketName,\n\t\t\tindexName: _this10.indexName\n\t\t}));\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Lists vectors in this index with pagination\n\t* Convenience method that automatically includes bucket and index names\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Listing options (bucket and index names automatically set)\n\t* @returns Promise with response containing vectors array and pagination token or error\n\t*\n\t* @example List vectors with pagination\n\t* ```typescript\n\t* const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n\t* const { data } = await index.listVectors({\n\t* maxResults: 500,\n\t* returnMetadata: true\n\t* })\n\t* ```\n\t*/\n\tasync listVectors(options = {}) {\n\t\tvar _superprop_getListVectors = () => super.listVectors, _this11 = this;\n\t\treturn _superprop_getListVectors().call(_this11, _objectSpread2(_objectSpread2({}, options), {}, {\n\t\t\tvectorBucketName: _this11.vectorBucketName,\n\t\t\tindexName: _this11.indexName\n\t\t}));\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Queries for similar vectors in this index\n\t* Convenience method that automatically includes bucket and index names\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Query options (bucket and index names automatically set)\n\t* @returns Promise with response containing matches array of similar vectors ordered by distance or error\n\t*\n\t* @example Query similar vectors\n\t* ```typescript\n\t* const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n\t* const { data } = await index.queryVectors({\n\t* queryVector: { float32: [0.1, 0.2, ...] },\n\t* topK: 5,\n\t* filter: { category: 'technical' },\n\t* returnDistance: true,\n\t* returnMetadata: true\n\t* })\n\t* ```\n\t*/\n\tasync queryVectors(options) {\n\t\tvar _superprop_getQueryVectors = () => super.queryVectors, _this12 = this;\n\t\treturn _superprop_getQueryVectors().call(_this12, _objectSpread2(_objectSpread2({}, options), {}, {\n\t\t\tvectorBucketName: _this12.vectorBucketName,\n\t\t\tindexName: _this12.indexName\n\t\t}));\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Deletes vectors by keys from this index\n\t* Convenience method that automatically includes bucket and index names\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t* @param options - Deletion options (bucket and index names automatically set)\n\t* @returns Promise with empty response on success or error\n\t*\n\t* @example Delete vectors by keys\n\t* ```typescript\n\t* const index = supabase.storage.vectors.from('embeddings-prod').index('documents-openai')\n\t* await index.deleteVectors({\n\t* keys: ['doc-1', 'doc-2', 'doc-3']\n\t* })\n\t* ```\n\t*/\n\tasync deleteVectors(options) {\n\t\tvar _superprop_getDeleteVectors = () => super.deleteVectors, _this13 = this;\n\t\treturn _superprop_getDeleteVectors().call(_this13, _objectSpread2(_objectSpread2({}, options), {}, {\n\t\t\tvectorBucketName: _this13.vectorBucketName,\n\t\t\tindexName: _this13.indexName\n\t\t}));\n\t}\n};\n\n//#endregion\n//#region src/StorageClient.ts\nvar StorageClient = class extends StorageBucketApi {\n\t/**\n\t* Creates a client for Storage buckets, files, analytics, and vectors.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t*\n\t* @example Using supabase-js (recommended)\n\t* ```ts\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t* const avatars = supabase.storage.from('avatars')\n\t* ```\n\t*\n\t* @example Standalone import for bundle-sensitive environments\n\t* ```ts\n\t* import { StorageClient } from '@supabase/storage-js'\n\t*\n\t* const storage = new StorageClient('https://xyzcompany.supabase.co/storage/v1', {\n\t* apikey: 'your-publishable-key',\n\t* })\n\t* const avatars = storage.from('avatars')\n\t* ```\n\t*/\n\tconstructor(url, headers = {}, fetch$1, opts) {\n\t\tsuper(url, headers, fetch$1, opts);\n\t}\n\t/**\n\t* Perform file operation in a bucket.\n\t*\n\t* @category Storage\n\t* @subcategory File Buckets\n\t*\n\t* @param id The bucket id to operate on.\n\t*\n\t* @example Accessing a bucket\n\t* ```typescript\n\t* const avatars = supabase.storage.from('avatars')\n\t* ```\n\t*/\n\tfrom(id) {\n\t\treturn new StorageFileApi(this.url, this.headers, id, this.fetch);\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Access vector storage operations.\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Vector Buckets\n\t*\n\t* @returns A StorageVectorsClient instance configured with the current storage settings.\n\t*/\n\tget vectors() {\n\t\treturn new StorageVectorsClient(this.url + \"/vector\", {\n\t\t\theaders: this.headers,\n\t\t\tfetch: this.fetch\n\t\t});\n\t}\n\t/**\n\t*\n\t* @alpha\n\t*\n\t* Access analytics storage operations using Iceberg tables.\n\t*\n\t* **Public alpha:** This API is part of a public alpha release and may not be available to your account type.\n\t*\n\t* @category Storage\n\t* @subcategory Analytics Buckets\n\t*\n\t* @returns A StorageAnalyticsClient instance configured with the current storage settings.\n\t*/\n\tget analytics() {\n\t\treturn new StorageAnalyticsClient(this.url + \"/iceberg\", this.headers, this.fetch);\n\t}\n};\n\n//#endregion\n\n//# sourceMappingURL=index.mjs.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3RvcmFnZS1qcy9kaXN0L2luZGV4Lm1qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQWdEOztBQUVoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUU7QUFDRjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLHNCQUFzQjtBQUN2QztBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxHQUFHOztBQUVKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUNBQWlDO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQ7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0Esa0VBQWtFLFFBQVE7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O0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0NBQW9DO0FBQ3BDO0FBQ0EsNENBQTRDLFdBQVcsc0JBQXNCLE1BQU0sS0FBSyxJQUFJLFNBQVM7QUFDckc7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxjQUFjO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0NBQXNDLFdBQVc7QUFDakQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLElBQUkseUJBQXlCO0FBQ2pDLEdBQUc7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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDeVY7QUFDelYiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N0b3JhZ2UtanMvZGlzdC9pbmRleC5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSWNlYmVyZ1Jlc3RDYXRhbG9nIH0gZnJvbSBcImljZWJlcmctanNcIjtcblxuLy8jcmVnaW9uIFxcMEBveGMtcHJvamVjdCtydW50aW1lQDAuMTAxLjAvaGVscGVycy90eXBlb2YuanNcbmZ1bmN0aW9uIF90eXBlb2Yobykge1xuXHRcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cdHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24obyQxKSB7XG5cdFx0cmV0dXJuIHR5cGVvZiBvJDE7XG5cdH0gOiBmdW5jdGlvbihvJDEpIHtcblx0XHRyZXR1cm4gbyQxICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8kMS5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8kMSAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbyQxO1xuXHR9LCBfdHlwZW9mKG8pO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBcXDBAb3hjLXByb2plY3QrcnVudGltZUAwLjEwMS4wL2hlbHBlcnMvdG9QcmltaXRpdmUuanNcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcblx0aWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG5cdHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuXHRpZiAodm9pZCAwICE9PSBlKSB7XG5cdFx0dmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG5cdFx0aWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuXHR9XG5cdHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIFxcMEBveGMtcHJvamVjdCtydW50aW1lQDAuMTAxLjAvaGVscGVycy90b1Byb3BlcnR5S2V5LmpzXG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcblx0dmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcblx0cmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gXFwwQG94Yy1wcm9qZWN0K3J1bnRpbWVAMC4xMDEuMC9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuXHRyZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcblx0XHR2YWx1ZTogdCxcblx0XHRlbnVtZXJhYmxlOiAhMCxcblx0XHRjb25maWd1cmFibGU6ICEwLFxuXHRcdHdyaXRhYmxlOiAhMFxuXHR9KSA6IGVbcl0gPSB0LCBlO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBcXDBAb3hjLXByb2plY3QrcnVudGltZUAwLjEwMS4wL2hlbHBlcnMvb2JqZWN0U3ByZWFkMi5qc1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7XG5cdHZhciB0ID0gT2JqZWN0LmtleXMoZSk7XG5cdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0dmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuXHRcdHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbihyJDEpIHtcblx0XHRcdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIkMSkuZW51bWVyYWJsZTtcblx0XHR9KSksIHQucHVzaC5hcHBseSh0LCBvKTtcblx0fVxuXHRyZXR1cm4gdDtcbn1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKGUpIHtcblx0Zm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHtcblx0XHR2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307XG5cdFx0ciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24ociQxKSB7XG5cdFx0XHRfZGVmaW5lUHJvcGVydHkoZSwgciQxLCB0W3IkMV0pO1xuXHRcdH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihyJDEpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByJDEsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgciQxKSk7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGU7XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9saWIvY29tbW9uL2Vycm9ycy50c1xuLyoqXG4qIEJhc2UgZXJyb3IgY2xhc3MgZm9yIGFsbCBTdG9yYWdlIGVycm9yc1xuKiBTdXBwb3J0cyBib3RoICdzdG9yYWdlJyBhbmQgJ3ZlY3RvcnMnIG5hbWVzcGFjZXNcbiovXG52YXIgU3RvcmFnZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UsIG5hbWVzcGFjZSA9IFwic3RvcmFnZVwiLCBzdGF0dXMsIHN0YXR1c0NvZGUpIHtcblx0XHRzdXBlcihtZXNzYWdlKTtcblx0XHR0aGlzLl9faXNTdG9yYWdlRXJyb3IgPSB0cnVlO1xuXHRcdHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXHRcdHRoaXMubmFtZSA9IG5hbWVzcGFjZSA9PT0gXCJ2ZWN0b3JzXCIgPyBcIlN0b3JhZ2VWZWN0b3JzRXJyb3JcIiA6IFwiU3RvcmFnZUVycm9yXCI7XG5cdFx0dGhpcy5zdGF0dXMgPSBzdGF0dXM7XG5cdFx0dGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZTtcblx0fVxuXHR0b0pTT04oKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWU6IHRoaXMubmFtZSxcblx0XHRcdG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcblx0XHRcdHN0YXR1czogdGhpcy5zdGF0dXMsXG5cdFx0XHRzdGF0dXNDb2RlOiB0aGlzLnN0YXR1c0NvZGVcblx0XHR9O1xuXHR9XG59O1xuLyoqXG4qIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gZXJyb3IgaXMgYSBTdG9yYWdlRXJyb3JcbiogQHBhcmFtIGVycm9yIC0gVGhlIGVycm9yIHRvIGNoZWNrXG4qIEByZXR1cm5zIFRydWUgaWYgdGhlIGVycm9yIGlzIGEgU3RvcmFnZUVycm9yXG4qL1xuZnVuY3Rpb24gaXNTdG9yYWdlRXJyb3IoZXJyb3IpIHtcblx0cmV0dXJuIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBlcnJvciAhPT0gbnVsbCAmJiBcIl9faXNTdG9yYWdlRXJyb3JcIiBpbiBlcnJvcjtcbn1cbi8qKlxuKiBBUEkgZXJyb3IgcmV0dXJuZWQgZnJvbSBTdG9yYWdlIHNlcnZpY2VcbiogSW5jbHVkZXMgSFRUUCBzdGF0dXMgY29kZSBhbmQgc2VydmljZS1zcGVjaWZpYyBlcnJvciBjb2RlXG4qL1xudmFyIFN0b3JhZ2VBcGlFcnJvciA9IGNsYXNzIGV4dGVuZHMgU3RvcmFnZUVycm9yIHtcblx0Y29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzLCBzdGF0dXNDb2RlLCBuYW1lc3BhY2UgPSBcInN0b3JhZ2VcIikge1xuXHRcdHN1cGVyKG1lc3NhZ2UsIG5hbWVzcGFjZSwgc3RhdHVzLCBzdGF0dXNDb2RlKTtcblx0XHR0aGlzLm5hbWUgPSBuYW1lc3BhY2UgPT09IFwidmVjdG9yc1wiID8gXCJTdG9yYWdlVmVjdG9yc0FwaUVycm9yXCIgOiBcIlN0b3JhZ2VBcGlFcnJvclwiO1xuXHRcdHRoaXMuc3RhdHVzID0gc3RhdHVzO1xuXHRcdHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGU7XG5cdH1cblx0dG9KU09OKCkge1xuXHRcdHJldHVybiBfb2JqZWN0U3ByZWFkMih7fSwgc3VwZXIudG9KU09OKCkpO1xuXHR9XG59O1xuLyoqXG4qIFVua25vd24gZXJyb3IgdGhhdCBkb2Vzbid0IG1hdGNoIGV4cGVjdGVkIGVycm9yIHBhdHRlcm5zXG4qIFdyYXBzIHRoZSBvcmlnaW5hbCBlcnJvciBmb3IgZGVidWdnaW5nXG4qL1xudmFyIFN0b3JhZ2VVbmtub3duRXJyb3IgPSBjbGFzcyBleHRlbmRzIFN0b3JhZ2VFcnJvciB7XG5cdGNvbnN0cnVjdG9yKG1lc3NhZ2UsIG9yaWdpbmFsRXJyb3IsIG5hbWVzcGFjZSA9IFwic3RvcmFnZVwiKSB7XG5cdFx0c3VwZXIobWVzc2FnZSwgbmFtZXNwYWNlKTtcblx0XHR0aGlzLm5hbWUgPSBuYW1lc3BhY2UgPT09IFwidmVjdG9yc1wiID8gXCJTdG9yYWdlVmVjdG9yc1Vua25vd25FcnJvclwiIDogXCJTdG9yYWdlVW5rbm93bkVycm9yXCI7XG5cdFx0dGhpcy5vcmlnaW5hbEVycm9yID0gb3JpZ2luYWxFcnJvcjtcblx0fVxufTtcbi8qKlxuKiBAZGVwcmVjYXRlZCBVc2UgU3RvcmFnZUVycm9yIHdpdGggbmFtZXNwYWNlPSd2ZWN0b3JzJyBpbnN0ZWFkXG4qIEFsaWFzIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcgdmVjdG9yIHN0b3JhZ2UgY29kZVxuKi9cbnZhciBTdG9yYWdlVmVjdG9yc0Vycm9yID0gY2xhc3MgZXh0ZW5kcyBTdG9yYWdlRXJyb3Ige1xuXHRjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG5cdFx0c3VwZXIobWVzc2FnZSwgXCJ2ZWN0b3JzXCIpO1xuXHR9XG59O1xuLyoqXG4qIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYW4gZXJyb3IgaXMgYSBTdG9yYWdlVmVjdG9yc0Vycm9yXG4qIEBwYXJhbSBlcnJvciAtIFRoZSBlcnJvciB0byBjaGVja1xuKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBlcnJvciBpcyBhIFN0b3JhZ2VWZWN0b3JzRXJyb3JcbiovXG5mdW5jdGlvbiBpc1N0b3JhZ2VWZWN0b3JzRXJyb3IoZXJyb3IpIHtcblx0cmV0dXJuIGlzU3RvcmFnZUVycm9yKGVycm9yKSAmJiBlcnJvcltcIm5hbWVzcGFjZVwiXSA9PT0gXCJ2ZWN0b3JzXCI7XG59XG4vKipcbiogQGRlcHJlY2F0ZWQgVXNlIFN0b3JhZ2VBcGlFcnJvciB3aXRoIG5hbWVzcGFjZT0ndmVjdG9ycycgaW5zdGVhZFxuKiBBbGlhcyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIHZlY3RvciBzdG9yYWdlIGNvZGVcbiovXG52YXIgU3RvcmFnZVZlY3RvcnNBcGlFcnJvciA9IGNsYXNzIGV4dGVuZHMgU3RvcmFnZUFwaUVycm9yIHtcblx0Y29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzLCBzdGF0dXNDb2RlKSB7XG5cdFx0c3VwZXIobWVzc2FnZSwgc3RhdHVzLCBzdGF0dXNDb2RlLCBcInZlY3RvcnNcIik7XG5cdH1cbn07XG4vKipcbiogQGRlcHJlY2F0ZWQgVXNlIFN0b3JhZ2VVbmtub3duRXJyb3Igd2l0aCBuYW1lc3BhY2U9J3ZlY3RvcnMnIGluc3RlYWRcbiogQWxpYXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZyB2ZWN0b3Igc3RvcmFnZSBjb2RlXG4qL1xudmFyIFN0b3JhZ2VWZWN0b3JzVW5rbm93bkVycm9yID0gY2xhc3MgZXh0ZW5kcyBTdG9yYWdlVW5rbm93bkVycm9yIHtcblx0Y29uc3RydWN0b3IobWVzc2FnZSwgb3JpZ2luYWxFcnJvcikge1xuXHRcdHN1cGVyKG1lc3NhZ2UsIG9yaWdpbmFsRXJyb3IsIFwidmVjdG9yc1wiKTtcblx0fVxufTtcbi8qKlxuKiBFcnJvciBjb2RlcyBzcGVjaWZpYyB0byBTMyBWZWN0b3JzIEFQSVxuKiBNYXBzIEFXUyBzZXJ2aWNlIGVycm9ycyB0byBhcHBsaWNhdGlvbi1mcmllbmRseSBlcnJvciBjb2Rlc1xuKi9cbmxldCBTdG9yYWdlVmVjdG9yc0Vycm9yQ29kZSA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbihTdG9yYWdlVmVjdG9yc0Vycm9yQ29kZSQxKSB7XG5cdC8qKiBJbnRlcm5hbCBzZXJ2ZXIgZmF1bHQgKEhUVFAgNTAwKSAqL1xuXHRTdG9yYWdlVmVjdG9yc0Vycm9yQ29kZSQxW1wiSW50ZXJuYWxFcnJvclwiXSA9IFwiSW50ZXJuYWxFcnJvclwiO1xuXHQvKiogUmVzb3VyY2UgYWxyZWFkeSBleGlzdHMgLyBjb25mbGljdCAoSFRUUCA0MDkpICovXG5cdFN0b3JhZ2VWZWN0b3JzRXJyb3JDb2RlJDFbXCJTM1ZlY3RvckNvbmZsaWN0RXhjZXB0aW9uXCJdID0gXCJTM1ZlY3RvckNvbmZsaWN0RXhjZXB0aW9uXCI7XG5cdC8qKiBSZXNvdXJjZSBub3QgZm91bmQgKEhUVFAgNDA0KSAqL1xuXHRTdG9yYWdlVmVjdG9yc0Vycm9yQ29kZSQxW1wiUzNWZWN0b3JOb3RGb3VuZEV4Y2VwdGlvblwiXSA9IFwiUzNWZWN0b3JOb3RGb3VuZEV4Y2VwdGlvblwiO1xuXHQvKiogRGVsZXRlIGJ1Y2tldCB3aGlsZSBub3QgZW1wdHkgKEhUVFAgNDAwKSAqL1xuXHRTdG9yYWdlVmVjdG9yc0Vycm9yQ29kZSQxW1wiUzNWZWN0b3JCdWNrZXROb3RFbXB0eVwiXSA9IFwiUzNWZWN0b3JCdWNrZXROb3RFbXB0eVwiO1xuXHQvKiogRXhjZWVkcyBidWNrZXQgcXVvdGEvbGltaXQgKEhUVFAgNDAwKSAqL1xuXHRTdG9yYWdlVmVjdG9yc0Vycm9yQ29kZSQxW1wiUzNWZWN0b3JNYXhCdWNrZXRzRXhjZWVkZWRcIl0gPSBcIlMzVmVjdG9yTWF4QnVja2V0c0V4Y2VlZGVkXCI7XG5cdC8qKiBFeGNlZWRzIGluZGV4IHF1b3RhL2xpbWl0IChIVFRQIDQwMCkgKi9cblx0U3RvcmFnZVZlY3RvcnNFcnJvckNvZGUkMVtcIlMzVmVjdG9yTWF4SW5kZXhlc0V4Y2VlZGVkXCJdID0gXCJTM1ZlY3Rvck1heEluZGV4ZXNFeGNlZWRlZFwiO1xuXHRyZXR1cm4gU3RvcmFnZVZlY3RvcnNFcnJvckNvZGUkMTtcbn0oe30pO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbGliL2NvbW1vbi9oZWFkZXJzLnRzXG4vKipcbiogU2V0cyBhIGhlYWRlciB3aXRoIGNhc2UtaW5zZW5zaXRpdmUgZGVkdXBsaWNhdGlvbi5cbiogUmVtb3ZlcyBhbnkgZXhpc3RpbmcgaGVhZGVycyB3aG9zZSBuYW1lIG1hdGNoZXMgKGNhc2UtaW5zZW5zaXRpdmUpLFxuKiB0aGVuIHNldHMgdGhlIHZhbHVlIHVuZGVyIHRoZSBsb3dlcmNhc2Uga2V5LiBEb2VzIG5vdCBtdXRhdGUgdGhlIGlucHV0IG9iamVjdC5cbipcbiogQHBhcmFtIGhlYWRlcnMgLSBFeGlzdGluZyBoZWFkZXJzIG9iamVjdFxuKiBAcGFyYW0gbmFtZSAtIEhlYWRlciBuYW1lIHRvIHNldCAoc3RvcmVkIGFzIGxvd2VyY2FzZSlcbiogQHBhcmFtIHZhbHVlIC0gSGVhZGVyIHZhbHVlXG4qIEByZXR1cm5zIE5ldyBoZWFkZXJzIG9iamVjdCB3aXRoIHRoZSBoZWFkZXIgc2V0XG4qL1xuZnVuY3Rpb24gc2V0SGVhZGVyKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG5cdGNvbnN0IHJlc3VsdCA9IF9vYmplY3RTcHJlYWQyKHt9LCBoZWFkZXJzKTtcblx0Y29uc3QgbmFtZUxvd2VyID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXN1bHQpKSBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09IG5hbWVMb3dlcikgZGVsZXRlIHJlc3VsdFtrZXldO1xuXHRyZXN1bHRbbmFtZUxvd2VyXSA9IHZhbHVlO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4qIE5vcm1hbGl6ZXMgYWxsIGhlYWRlciBrZXlzIHRvIGxvd2VyY2FzZSB3aXRoIGNhc2UtaW5zZW5zaXRpdmUgZGVkdXBsaWNhdGlvbi5cbiogV2hlbiBkdXBsaWNhdGUga2V5cyBleGlzdCAoZGlmZmVyaW5nIG9ubHkgaW4gY2FzZSksIHRoZSBsYXN0IHZhbHVlIHdpbnMuXG4qIERvZXMgbm90IG11dGF0ZSB0aGUgaW5wdXQgb2JqZWN0LlxuKlxuKiBAcGFyYW0gaGVhZGVycyAtIEhlYWRlcnMgb2JqZWN0IHRvIG5vcm1hbGl6ZVxuKiBAcmV0dXJucyBOZXcgaGVhZGVycyBvYmplY3Qgd2l0aCBhbGwga2V5cyBsb3dlcmNhc2VkXG4qL1xuZnVuY3Rpb24gbm9ybWFsaXplSGVhZGVycyhoZWFkZXJzKSB7XG5cdGNvbnN0IHJlc3VsdCA9IHt9O1xuXHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhoZWFkZXJzKSkgcmVzdWx0W2tleS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlO1xuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbGliL2NvbW1vbi9oZWxwZXJzLnRzXG4vKipcbiogUmVzb2x2ZXMgdGhlIGZldGNoIGltcGxlbWVudGF0aW9uIHRvIHVzZVxuKiBVc2VzIGN1c3RvbSBmZXRjaCBpZiBwcm92aWRlZCwgb3RoZXJ3aXNlIHVzZXMgbmF0aXZlIGZldGNoXG4qXG4qIEBwYXJhbSBjdXN0b21GZXRjaCAtIE9wdGlvbmFsIGN1c3RvbSBmZXRjaCBpbXBsZW1lbnRhdGlvblxuKiBAcmV0dXJucyBSZXNvbHZlZCBmZXRjaCBmdW5jdGlvblxuKi9cbmNvbnN0IHJlc29sdmVGZXRjaCA9IChjdXN0b21GZXRjaCkgPT4ge1xuXHRpZiAoY3VzdG9tRmV0Y2gpIHJldHVybiAoLi4uYXJncykgPT4gY3VzdG9tRmV0Y2goLi4uYXJncyk7XG5cdHJldHVybiAoLi4uYXJncykgPT4gZmV0Y2goLi4uYXJncyk7XG59O1xuLyoqXG4qIERldGVybWluZSBpZiBpbnB1dCBpcyBhIHBsYWluIG9iamVjdFxuKiBBbiBvYmplY3QgaXMgcGxhaW4gaWYgaXQncyBjcmVhdGVkIGJ5IGVpdGhlciB7fSwgbmV3IE9iamVjdCgpLCBvciBPYmplY3QuY3JlYXRlKG51bGwpXG4qXG4qIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIGNoZWNrXG4qIEByZXR1cm5zIFRydWUgaWYgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3RcbiogQHNvdXJjZSBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL2lzLXBsYWluLW9ialxuKi9cbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsdWUpID0+IHtcblx0aWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHRjb25zdCBwcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuXHRyZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbHVlKSAmJiAhKFN5bWJvbC5pdGVyYXRvciBpbiB2YWx1ZSk7XG59O1xuLyoqXG4qIFJlY3Vyc2l2ZWx5IGNvbnZlcnRzIG9iamVjdCBrZXlzIGZyb20gc25ha2VfY2FzZSB0byBjYW1lbENhc2VcbiogVXNlZCBmb3Igbm9ybWFsaXppbmcgQVBJIHJlc3BvbnNlc1xuKlxuKiBAcGFyYW0gaXRlbSAtIE9iamVjdCB0byBjb252ZXJ0XG4qIEByZXR1cm5zIENvbnZlcnRlZCBvYmplY3Qgd2l0aCBjYW1lbENhc2Uga2V5c1xuKi9cbmNvbnN0IHJlY3Vyc2l2ZVRvQ2FtZWwgPSAoaXRlbSkgPT4ge1xuXHRpZiAoQXJyYXkuaXNBcnJheShpdGVtKSkgcmV0dXJuIGl0ZW0ubWFwKChlbCkgPT4gcmVjdXJzaXZlVG9DYW1lbChlbCkpO1xuXHRlbHNlIGlmICh0eXBlb2YgaXRlbSA9PT0gXCJmdW5jdGlvblwiIHx8IGl0ZW0gIT09IE9iamVjdChpdGVtKSkgcmV0dXJuIGl0ZW07XG5cdGNvbnN0IHJlc3VsdCA9IHt9O1xuXHRPYmplY3QuZW50cmllcyhpdGVtKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcblx0XHRjb25zdCBuZXdLZXkgPSBrZXkucmVwbGFjZSgvKFstX11bYS16XSkvZ2ksIChjKSA9PiBjLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvWy1fXS9nLCBcIlwiKSk7XG5cdFx0cmVzdWx0W25ld0tleV0gPSByZWN1cnNpdmVUb0NhbWVsKHZhbHVlKTtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuLyoqXG4qIFZhbGlkYXRlcyBpZiBhIGdpdmVuIGJ1Y2tldCBuYW1lIGlzIHZhbGlkIGFjY29yZGluZyB0byBTdXBhYmFzZSBTdG9yYWdlIEFQSSBydWxlc1xuKiBNaXJyb3JzIGJhY2tlbmQgdmFsaWRhdGlvbiBmcm9tOiBzdG9yYWdlL3NyYy9zdG9yYWdlL2xpbWl0cy50czppc1ZhbGlkQnVja2V0TmFtZSgpXG4qXG4qIFJ1bGVzOlxuKiAtIExlbmd0aDogMS0xMDAgY2hhcmFjdGVyc1xuKiAtIEFsbG93ZWQgY2hhcmFjdGVyczogYWxwaGFudW1lcmljIChhLXosIEEtWiwgMC05KSwgdW5kZXJzY29yZSAoXyksIGFuZCBzYWZlIHNwZWNpYWwgY2hhcmFjdGVyc1xuKiAtIFNhZmUgc3BlY2lhbCBjaGFyYWN0ZXJzOiAhIC0gLiAqICcgKCApIHNwYWNlICYgJCBAID0gOyA6ICsgLCA/XG4qIC0gRm9yYmlkZGVuOiBwYXRoIHNlcGFyYXRvcnMgKC8sIFxcKSwgcGF0aCB0cmF2ZXJzYWwgKC4uKSwgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlXG4qXG4qIEFXUyBTMyBSZWZlcmVuY2U6IGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvdXNlcmd1aWRlL29iamVjdC1rZXlzLmh0bWxcbipcbiogQHBhcmFtIGJ1Y2tldE5hbWUgLSBUaGUgYnVja2V0IG5hbWUgdG8gdmFsaWRhdGVcbiogQHJldHVybnMgdHJ1ZSBpZiB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlXG4qL1xuY29uc3QgaXNWYWxpZEJ1Y2tldE5hbWUgPSAoYnVja2V0TmFtZSkgPT4ge1xuXHRpZiAoIWJ1Y2tldE5hbWUgfHwgdHlwZW9mIGJ1Y2tldE5hbWUgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcblx0aWYgKGJ1Y2tldE5hbWUubGVuZ3RoID09PSAwIHx8IGJ1Y2tldE5hbWUubGVuZ3RoID4gMTAwKSByZXR1cm4gZmFsc2U7XG5cdGlmIChidWNrZXROYW1lLnRyaW0oKSAhPT0gYnVja2V0TmFtZSkgcmV0dXJuIGZhbHNlO1xuXHRpZiAoYnVja2V0TmFtZS5pbmNsdWRlcyhcIi9cIikgfHwgYnVja2V0TmFtZS5pbmNsdWRlcyhcIlxcXFxcIikpIHJldHVybiBmYWxzZTtcblx0cmV0dXJuIC9eW1xcdyEuXFwqJygpICYkQD07OissPy1dKyQvLnRlc3QoYnVja2V0TmFtZSk7XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbGliL2NvbW1vbi9mZXRjaC50c1xuLyoqXG4qIEV4dHJhY3RzIGVycm9yIG1lc3NhZ2UgZnJvbSB2YXJpb3VzIGVycm9yIHJlc3BvbnNlIGZvcm1hdHNcbiogQHBhcmFtIGVyciAtIEVycm9yIG9iamVjdCBmcm9tIEFQSVxuKiBAcmV0dXJucyBIdW1hbi1yZWFkYWJsZSBlcnJvciBtZXNzYWdlXG4qL1xuY29uc3QgX2dldEVycm9yTWVzc2FnZSA9IChlcnIpID0+IHtcblx0aWYgKHR5cGVvZiBlcnIgPT09IFwib2JqZWN0XCIgJiYgZXJyICE9PSBudWxsKSB7XG5cdFx0Y29uc3QgZSA9IGVycjtcblx0XHRpZiAodHlwZW9mIGUubXNnID09PSBcInN0cmluZ1wiKSByZXR1cm4gZS5tc2c7XG5cdFx0aWYgKHR5cGVvZiBlLm1lc3NhZ2UgPT09IFwic3RyaW5nXCIpIHJldHVybiBlLm1lc3NhZ2U7XG5cdFx0aWYgKHR5cGVvZiBlLmVycm9yX2Rlc2NyaXB0aW9uID09PSBcInN0cmluZ1wiKSByZXR1cm4gZS5lcnJvcl9kZXNjcmlwdGlvbjtcblx0XHRpZiAodHlwZW9mIGUuZXJyb3IgPT09IFwic3RyaW5nXCIpIHJldHVybiBlLmVycm9yO1xuXHRcdGlmICh0eXBlb2YgZS5lcnJvciA9PT0gXCJvYmplY3RcIiAmJiBlLmVycm9yICE9PSBudWxsKSB7XG5cdFx0XHRjb25zdCBuZXN0ZWQgPSBlLmVycm9yO1xuXHRcdFx0aWYgKHR5cGVvZiBuZXN0ZWQubWVzc2FnZSA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIG5lc3RlZC5tZXNzYWdlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkoZXJyKTtcbn07XG4vKipcbiogSGFuZGxlcyBmZXRjaCBlcnJvcnMgYW5kIGNvbnZlcnRzIHRoZW0gdG8gU3RvcmFnZSBlcnJvciB0eXBlc1xuKiBAcGFyYW0gZXJyb3IgLSBUaGUgZXJyb3IgY2F1Z2h0IGZyb20gZmV0Y2hcbiogQHBhcmFtIHJlamVjdCAtIFByb21pc2UgcmVqZWN0aW9uIGZ1bmN0aW9uXG4qIEBwYXJhbSBvcHRpb25zIC0gRmV0Y2ggb3B0aW9ucyB0aGF0IG1heSBhZmZlY3QgZXJyb3IgaGFuZGxpbmdcbiogQHBhcmFtIG5hbWVzcGFjZSAtIEVycm9yIG5hbWVzcGFjZSAoJ3N0b3JhZ2UnIG9yICd2ZWN0b3JzJylcbiovXG5jb25zdCBoYW5kbGVFcnJvciA9IGFzeW5jIChlcnJvciwgcmVqZWN0LCBvcHRpb25zLCBuYW1lc3BhY2UpID0+IHtcblx0aWYgKGVycm9yICE9PSBudWxsICYmIHR5cGVvZiBlcnJvciA9PT0gXCJvYmplY3RcIiAmJiBcImpzb25cIiBpbiBlcnJvciAmJiB0eXBlb2YgZXJyb3IuanNvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0Y29uc3QgcmVzcG9uc2VFcnJvciA9IGVycm9yO1xuXHRcdGxldCBzdGF0dXMgPSBwYXJzZUludChTdHJpbmcocmVzcG9uc2VFcnJvci5zdGF0dXMpLCAxMCk7XG5cdFx0aWYgKCFOdW1iZXIuaXNGaW5pdGUoc3RhdHVzKSkgc3RhdHVzID0gNTAwO1xuXHRcdHJlc3BvbnNlRXJyb3IuanNvbigpLnRoZW4oKGVycikgPT4ge1xuXHRcdFx0Y29uc3Qgc3RhdHVzQ29kZSA9IChlcnIgPT09IG51bGwgfHwgZXJyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnIuc3RhdHVzQ29kZSkgfHwgKGVyciA9PT0gbnVsbCB8fCBlcnIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVyci5jb2RlKSB8fCBzdGF0dXMgKyBcIlwiO1xuXHRcdFx0cmVqZWN0KG5ldyBTdG9yYWdlQXBpRXJyb3IoX2dldEVycm9yTWVzc2FnZShlcnIpLCBzdGF0dXMsIHN0YXR1c0NvZGUsIG5hbWVzcGFjZSkpO1xuXHRcdH0pLmNhdGNoKCgpID0+IHtcblx0XHRcdGNvbnN0IHN0YXR1c0NvZGUgPSBzdGF0dXMgKyBcIlwiO1xuXHRcdFx0cmVqZWN0KG5ldyBTdG9yYWdlQXBpRXJyb3IocmVzcG9uc2VFcnJvci5zdGF0dXNUZXh0IHx8IGBIVFRQICR7c3RhdHVzfSBlcnJvcmAsIHN0YXR1cywgc3RhdHVzQ29kZSwgbmFtZXNwYWNlKSk7XG5cdFx0fSk7XG5cdH0gZWxzZSByZWplY3QobmV3IFN0b3JhZ2VVbmtub3duRXJyb3IoX2dldEVycm9yTWVzc2FnZShlcnJvciksIGVycm9yLCBuYW1lc3BhY2UpKTtcbn07XG4vKipcbiogQnVpbGRzIHJlcXVlc3QgcGFyYW1ldGVycyBmb3IgZmV0Y2ggY2FsbHNcbiogQHBhcmFtIG1ldGhvZCAtIEhUVFAgbWV0aG9kXG4qIEBwYXJhbSBvcHRpb25zIC0gQ3VzdG9tIGZldGNoIG9wdGlvbnNcbiogQHBhcmFtIHBhcmFtZXRlcnMgLSBBZGRpdGlvbmFsIGZldGNoIHBhcmFtZXRlcnMgbGlrZSBBYm9ydFNpZ25hbFxuKiBAcGFyYW0gYm9keSAtIFJlcXVlc3QgYm9keSAod2lsbCBiZSBKU09OIHN0cmluZ2lmaWVkIGlmIHBsYWluIG9iamVjdClcbiogQHJldHVybnMgQ29tcGxldGUgZmV0Y2ggcmVxdWVzdCBwYXJhbWV0ZXJzXG4qL1xuY29uc3QgX2dldFJlcXVlc3RQYXJhbXMgPSAobWV0aG9kLCBvcHRpb25zLCBwYXJhbWV0ZXJzLCBib2R5KSA9PiB7XG5cdGNvbnN0IHBhcmFtcyA9IHtcblx0XHRtZXRob2QsXG5cdFx0aGVhZGVyczogKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5oZWFkZXJzKSB8fCB7fVxuXHR9O1xuXHRpZiAobWV0aG9kID09PSBcIkdFVFwiIHx8IG1ldGhvZCA9PT0gXCJIRUFEXCIgfHwgIWJvZHkpIHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcGFyYW1zKSwgcGFyYW1ldGVycyk7XG5cdGlmIChpc1BsYWluT2JqZWN0KGJvZHkpKSB7XG5cdFx0dmFyIF9jb250ZW50VHlwZTtcblx0XHRjb25zdCBoZWFkZXJzID0gKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5oZWFkZXJzKSB8fCB7fTtcblx0XHRsZXQgY29udGVudFR5cGU7XG5cdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoaGVhZGVycykpIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gXCJjb250ZW50LXR5cGVcIikgY29udGVudFR5cGUgPSB2YWx1ZTtcblx0XHRwYXJhbXMuaGVhZGVycyA9IHNldEhlYWRlcihoZWFkZXJzLCBcIkNvbnRlbnQtVHlwZVwiLCAoX2NvbnRlbnRUeXBlID0gY29udGVudFR5cGUpICE9PSBudWxsICYmIF9jb250ZW50VHlwZSAhPT0gdm9pZCAwID8gX2NvbnRlbnRUeXBlIDogXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuXHRcdHBhcmFtcy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG5cdH0gZWxzZSBwYXJhbXMuYm9keSA9IGJvZHk7XG5cdGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZHVwbGV4KSBwYXJhbXMuZHVwbGV4ID0gb3B0aW9ucy5kdXBsZXg7XG5cdHJldHVybiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcGFyYW1zKSwgcGFyYW1ldGVycyk7XG59O1xuLyoqXG4qIEludGVybmFsIHJlcXVlc3QgaGFuZGxlciB0aGF0IHdyYXBzIGZldGNoIHdpdGggZXJyb3IgaGFuZGxpbmdcbiogQHBhcmFtIGZldGNoZXIgLSBGZXRjaCBmdW5jdGlvbiB0byB1c2VcbiogQHBhcmFtIG1ldGhvZCAtIEhUVFAgbWV0aG9kXG4qIEBwYXJhbSB1cmwgLSBSZXF1ZXN0IFVSTFxuKiBAcGFyYW0gb3B0aW9ucyAtIEN1c3RvbSBmZXRjaCBvcHRpb25zXG4qIEBwYXJhbSBwYXJhbWV0ZXJzIC0gQWRkaXRpb25hbCBmZXRjaCBwYXJhbWV0ZXJzXG4qIEBwYXJhbSBib2R5IC0gUmVxdWVzdCBib2R5XG4qIEBwYXJhbSBuYW1lc3BhY2UgLSBFcnJvciBuYW1lc3BhY2UgKCdzdG9yYWdlJyBvciAndmVjdG9ycycpXG4qIEByZXR1cm5zIFByb21pc2Ugd2l0aCBwYXJzZWQgcmVzcG9uc2Ugb3IgZXJyb3JcbiovXG5hc3luYyBmdW5jdGlvbiBfaGFuZGxlUmVxdWVzdChmZXRjaGVyLCBtZXRob2QsIHVybCwgb3B0aW9ucywgcGFyYW1ldGVycywgYm9keSwgbmFtZXNwYWNlKSB7XG5cdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0ZmV0Y2hlcih1cmwsIF9nZXRSZXF1ZXN0UGFyYW1zKG1ldGhvZCwgb3B0aW9ucywgcGFyYW1ldGVycywgYm9keSkpLnRoZW4oKHJlc3VsdCkgPT4ge1xuXHRcdFx0aWYgKCFyZXN1bHQub2spIHRocm93IHJlc3VsdDtcblx0XHRcdGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubm9SZXNvbHZlSnNvbikgcmV0dXJuIHJlc3VsdDtcblx0XHRcdGlmIChuYW1lc3BhY2UgPT09IFwidmVjdG9yc1wiKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzdWx0LmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpO1xuXHRcdFx0XHRpZiAocmVzdWx0LmhlYWRlcnMuZ2V0KFwiY29udGVudC1sZW5ndGhcIikgPT09IFwiMFwiIHx8IHJlc3VsdC5zdGF0dXMgPT09IDIwNCkgcmV0dXJuIHt9O1xuXHRcdFx0XHRpZiAoIWNvbnRlbnRUeXBlIHx8ICFjb250ZW50VHlwZS5pbmNsdWRlcyhcImFwcGxpY2F0aW9uL2pzb25cIikpIHJldHVybiB7fTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQuanNvbigpO1xuXHRcdH0pLnRoZW4oKGRhdGEpID0+IHJlc29sdmUoZGF0YSkpLmNhdGNoKChlcnJvcikgPT4gaGFuZGxlRXJyb3IoZXJyb3IsIHJlamVjdCwgb3B0aW9ucywgbmFtZXNwYWNlKSk7XG5cdH0pO1xufVxuLyoqXG4qIENyZWF0ZXMgYSBmZXRjaCBBUEkgd2l0aCB0aGUgc3BlY2lmaWVkIG5hbWVzcGFjZVxuKiBAcGFyYW0gbmFtZXNwYWNlIC0gRXJyb3IgbmFtZXNwYWNlICgnc3RvcmFnZScgb3IgJ3ZlY3RvcnMnKVxuKiBAcmV0dXJucyBPYmplY3Qgd2l0aCBIVFRQIG1ldGhvZCBmdW5jdGlvbnNcbiovXG5mdW5jdGlvbiBjcmVhdGVGZXRjaEFwaShuYW1lc3BhY2UgPSBcInN0b3JhZ2VcIikge1xuXHRyZXR1cm4ge1xuXHRcdGdldDogYXN5bmMgKGZldGNoZXIsIHVybCwgb3B0aW9ucywgcGFyYW1ldGVycykgPT4ge1xuXHRcdFx0cmV0dXJuIF9oYW5kbGVSZXF1ZXN0KGZldGNoZXIsIFwiR0VUXCIsIHVybCwgb3B0aW9ucywgcGFyYW1ldGVycywgdm9pZCAwLCBuYW1lc3BhY2UpO1xuXHRcdH0sXG5cdFx0cG9zdDogYXN5bmMgKGZldGNoZXIsIHVybCwgYm9keSwgb3B0aW9ucywgcGFyYW1ldGVycykgPT4ge1xuXHRcdFx0cmV0dXJuIF9oYW5kbGVSZXF1ZXN0KGZldGNoZXIsIFwiUE9TVFwiLCB1cmwsIG9wdGlvbnMsIHBhcmFtZXRlcnMsIGJvZHksIG5hbWVzcGFjZSk7XG5cdFx0fSxcblx0XHRwdXQ6IGFzeW5jIChmZXRjaGVyLCB1cmwsIGJvZHksIG9wdGlvbnMsIHBhcmFtZXRlcnMpID0+IHtcblx0XHRcdHJldHVybiBfaGFuZGxlUmVxdWVzdChmZXRjaGVyLCBcIlBVVFwiLCB1cmwsIG9wdGlvbnMsIHBhcmFtZXRlcnMsIGJvZHksIG5hbWVzcGFjZSk7XG5cdFx0fSxcblx0XHRoZWFkOiBhc3luYyAoZmV0Y2hlciwgdXJsLCBvcHRpb25zLCBwYXJhbWV0ZXJzKSA9PiB7XG5cdFx0XHRyZXR1cm4gX2hhbmRsZVJlcXVlc3QoZmV0Y2hlciwgXCJIRUFEXCIsIHVybCwgX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG9wdGlvbnMpLCB7fSwgeyBub1Jlc29sdmVKc29uOiB0cnVlIH0pLCBwYXJhbWV0ZXJzLCB2b2lkIDAsIG5hbWVzcGFjZSk7XG5cdFx0fSxcblx0XHRyZW1vdmU6IGFzeW5jIChmZXRjaGVyLCB1cmwsIGJvZHksIG9wdGlvbnMsIHBhcmFtZXRlcnMpID0+IHtcblx0XHRcdHJldHVybiBfaGFuZGxlUmVxdWVzdChmZXRjaGVyLCBcIkRFTEVURVwiLCB1cmwsIG9wdGlvbnMsIHBhcmFtZXRlcnMsIGJvZHksIG5hbWVzcGFjZSk7XG5cdFx0fVxuXHR9O1xufVxuY29uc3QgZGVmYXVsdEFwaSA9IGNyZWF0ZUZldGNoQXBpKFwic3RvcmFnZVwiKTtcbmNvbnN0IHsgZ2V0LCBwb3N0LCBwdXQsIGhlYWQsIHJlbW92ZSB9ID0gZGVmYXVsdEFwaTtcbmNvbnN0IHZlY3RvcnNBcGkgPSBjcmVhdGVGZXRjaEFwaShcInZlY3RvcnNcIik7XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9saWIvY29tbW9uL0Jhc2VBcGlDbGllbnQudHNcbi8qKlxuKiBAaWdub3JlXG4qIEJhc2UgQVBJIGNsaWVudCBjbGFzcyBmb3IgYWxsIFN0b3JhZ2UgQVBJIGNsYXNzZXNcbiogUHJvdmlkZXMgY29tbW9uIGluZnJhc3RydWN0dXJlIGZvciBlcnJvciBoYW5kbGluZyBhbmQgY29uZmlndXJhdGlvblxuKlxuKiBAdHlwZVBhcmFtIFRFcnJvciAtIFRoZSBlcnJvciB0eXBlIChTdG9yYWdlRXJyb3Igb3Igc3ViY2xhc3MpXG4qL1xudmFyIEJhc2VBcGlDbGllbnQgPSBjbGFzcyB7XG5cdC8qKlxuXHQqIENyZWF0ZXMgYSBuZXcgQmFzZUFwaUNsaWVudCBpbnN0YW5jZVxuXHQqIEBwYXJhbSB1cmwgLSBCYXNlIFVSTCBmb3IgQVBJIHJlcXVlc3RzXG5cdCogQHBhcmFtIGhlYWRlcnMgLSBEZWZhdWx0IGhlYWRlcnMgZm9yIEFQSSByZXF1ZXN0c1xuXHQqIEBwYXJhbSBmZXRjaCAtIE9wdGlvbmFsIGN1c3RvbSBmZXRjaCBpbXBsZW1lbnRhdGlvblxuXHQqIEBwYXJhbSBuYW1lc3BhY2UgLSBFcnJvciBuYW1lc3BhY2UgKCdzdG9yYWdlJyBvciAndmVjdG9ycycpXG5cdCovXG5cdGNvbnN0cnVjdG9yKHVybCwgaGVhZGVycyA9IHt9LCBmZXRjaCQxLCBuYW1lc3BhY2UgPSBcInN0b3JhZ2VcIikge1xuXHRcdHRoaXMuc2hvdWxkVGhyb3dPbkVycm9yID0gZmFsc2U7XG5cdFx0dGhpcy51cmwgPSB1cmw7XG5cdFx0dGhpcy5oZWFkZXJzID0gbm9ybWFsaXplSGVhZGVycyhoZWFkZXJzKTtcblx0XHR0aGlzLmZldGNoID0gcmVzb2x2ZUZldGNoKGZldGNoJDEpO1xuXHRcdHRoaXMubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXHR9XG5cdC8qKlxuXHQqIEVuYWJsZSB0aHJvd2luZyBlcnJvcnMgaW5zdGVhZCBvZiByZXR1cm5pbmcgdGhlbS5cblx0KiBXaGVuIGVuYWJsZWQsIGVycm9ycyBhcmUgdGhyb3duIGluc3RlYWQgb2YgcmV0dXJuZWQgaW4geyBkYXRhLCBlcnJvciB9IGZvcm1hdC5cblx0KlxuXHQqIEByZXR1cm5zIHRoaXMgLSBGb3IgbWV0aG9kIGNoYWluaW5nXG5cdCovXG5cdHRocm93T25FcnJvcigpIHtcblx0XHR0aGlzLnNob3VsZFRocm93T25FcnJvciA9IHRydWU7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0LyoqXG5cdCogU2V0IGFuIEhUVFAgaGVhZGVyIGZvciB0aGUgcmVxdWVzdC5cblx0KiBDcmVhdGVzIGEgc2hhbGxvdyBjb3B5IG9mIGhlYWRlcnMgdG8gYXZvaWQgbXV0YXRpbmcgc2hhcmVkIHN0YXRlLlxuXHQqXG5cdCogQHBhcmFtIG5hbWUgLSBIZWFkZXIgbmFtZVxuXHQqIEBwYXJhbSB2YWx1ZSAtIEhlYWRlciB2YWx1ZVxuXHQqIEByZXR1cm5zIHRoaXMgLSBGb3IgbWV0aG9kIGNoYWluaW5nXG5cdCovXG5cdHNldEhlYWRlcihuYW1lLCB2YWx1ZSkge1xuXHRcdHRoaXMuaGVhZGVycyA9IHNldEhlYWRlcih0aGlzLmhlYWRlcnMsIG5hbWUsIHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvKipcblx0KiBIYW5kbGVzIEFQSSBvcGVyYXRpb24gd2l0aCBzdGFuZGFyZGl6ZWQgZXJyb3IgaGFuZGxpbmdcblx0KiBFbGltaW5hdGVzIHJlcGV0aXRpdmUgdHJ5LWNhdGNoIGJsb2NrcyBhY3Jvc3MgYWxsIEFQSSBtZXRob2RzXG5cdCpcblx0KiBUaGlzIHdyYXBwZXI6XG5cdCogMS4gRXhlY3V0ZXMgdGhlIG9wZXJhdGlvblxuXHQqIDIuIFJldHVybnMgeyBkYXRhLCBlcnJvcjogbnVsbCB9IG9uIHN1Y2Nlc3Ncblx0KiAzLiBSZXR1cm5zIHsgZGF0YTogbnVsbCwgZXJyb3IgfSBvbiBmYWlsdXJlIChpZiBzaG91bGRUaHJvd09uRXJyb3IgaXMgZmFsc2UpXG5cdCogNC4gVGhyb3dzIGVycm9yIG9uIGZhaWx1cmUgKGlmIHNob3VsZFRocm93T25FcnJvciBpcyB0cnVlKVxuXHQqXG5cdCogQHR5cGVQYXJhbSBUIC0gVGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBmcm9tIHRoZSBvcGVyYXRpb25cblx0KiBAcGFyYW0gb3BlcmF0aW9uIC0gQXN5bmMgZnVuY3Rpb24gdGhhdCBwZXJmb3JtcyB0aGUgQVBJIGNhbGxcblx0KiBAcmV0dXJucyBQcm9taXNlIHdpdGggeyBkYXRhLCBlcnJvciB9IHR1cGxlXG5cdCpcblx0KiBAZXhhbXBsZSBIYW5kbGluZyBhbiBvcGVyYXRpb25cblx0KiBgYGB0eXBlc2NyaXB0XG5cdCogYXN5bmMgbGlzdEJ1Y2tldHMoKSB7XG5cdCogICByZXR1cm4gdGhpcy5oYW5kbGVPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuXHQqICAgICByZXR1cm4gYXdhaXQgZ2V0KHRoaXMuZmV0Y2gsIGAke3RoaXMudXJsfS9idWNrZXRgLCB7XG5cdCogICAgICAgaGVhZGVyczogdGhpcy5oZWFkZXJzLFxuXHQqICAgICB9KVxuXHQqICAgfSlcblx0KiB9XG5cdCogYGBgXG5cdCovXG5cdGFzeW5jIGhhbmRsZU9wZXJhdGlvbihvcGVyYXRpb24pIHtcblx0XHR2YXIgX3RoaXMgPSB0aGlzO1xuXHRcdHRyeSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRkYXRhOiBhd2FpdCBvcGVyYXRpb24oKSxcblx0XHRcdFx0ZXJyb3I6IG51bGxcblx0XHRcdH07XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdGlmIChfdGhpcy5zaG91bGRUaHJvd09uRXJyb3IpIHRocm93IGVycm9yO1xuXHRcdFx0aWYgKGlzU3RvcmFnZUVycm9yKGVycm9yKSkgcmV0dXJuIHtcblx0XHRcdFx0ZGF0YTogbnVsbCxcblx0XHRcdFx0ZXJyb3Jcblx0XHRcdH07XG5cdFx0XHR0aHJvdyBlcnJvcjtcblx0XHR9XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9wYWNrYWdlcy9TdHJlYW1Eb3dubG9hZEJ1aWxkZXIudHNcbnZhciBTdHJlYW1Eb3dubG9hZEJ1aWxkZXIgPSBjbGFzcyB7XG5cdGNvbnN0cnVjdG9yKGRvd25sb2FkRm4sIHNob3VsZFRocm93T25FcnJvcikge1xuXHRcdHRoaXMuZG93bmxvYWRGbiA9IGRvd25sb2FkRm47XG5cdFx0dGhpcy5zaG91bGRUaHJvd09uRXJyb3IgPSBzaG91bGRUaHJvd09uRXJyb3I7XG5cdH1cblx0dGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCkge1xuXHRcdHJldHVybiB0aGlzLmV4ZWN1dGUoKS50aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKTtcblx0fVxuXHRhc3luYyBleGVjdXRlKCkge1xuXHRcdHZhciBfdGhpcyA9IHRoaXM7XG5cdFx0dHJ5IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGE6IChhd2FpdCBfdGhpcy5kb3dubG9hZEZuKCkpLmJvZHksXG5cdFx0XHRcdGVycm9yOiBudWxsXG5cdFx0XHR9O1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRpZiAoX3RoaXMuc2hvdWxkVGhyb3dPbkVycm9yKSB0aHJvdyBlcnJvcjtcblx0XHRcdGlmIChpc1N0b3JhZ2VFcnJvcihlcnJvcikpIHJldHVybiB7XG5cdFx0XHRcdGRhdGE6IG51bGwsXG5cdFx0XHRcdGVycm9yXG5cdFx0XHR9O1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fVxuXHR9XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvcGFja2FnZXMvQmxvYkRvd25sb2FkQnVpbGRlci50c1xubGV0IF9TeW1ib2wkdG9TdHJpbmdUYWc7XG5fU3ltYm9sJHRvU3RyaW5nVGFnID0gU3ltYm9sLnRvU3RyaW5nVGFnO1xudmFyIEJsb2JEb3dubG9hZEJ1aWxkZXIgPSBjbGFzcyB7XG5cdGNvbnN0cnVjdG9yKGRvd25sb2FkRm4sIHNob3VsZFRocm93T25FcnJvcikge1xuXHRcdHRoaXMuZG93bmxvYWRGbiA9IGRvd25sb2FkRm47XG5cdFx0dGhpcy5zaG91bGRUaHJvd09uRXJyb3IgPSBzaG91bGRUaHJvd09uRXJyb3I7XG5cdFx0dGhpc1tfU3ltYm9sJHRvU3RyaW5nVGFnXSA9IFwiQmxvYkRvd25sb2FkQnVpbGRlclwiO1xuXHRcdHRoaXMucHJvbWlzZSA9IG51bGw7XG5cdH1cblx0YXNTdHJlYW0oKSB7XG5cdFx0cmV0dXJuIG5ldyBTdHJlYW1Eb3dubG9hZEJ1aWxkZXIodGhpcy5kb3dubG9hZEZuLCB0aGlzLnNob3VsZFRocm93T25FcnJvcik7XG5cdH1cblx0dGhlbihvbmZ1bGZpbGxlZCwgb25yZWplY3RlZCkge1xuXHRcdHJldHVybiB0aGlzLmdldFByb21pc2UoKS50aGVuKG9uZnVsZmlsbGVkLCBvbnJlamVjdGVkKTtcblx0fVxuXHRjYXRjaChvbnJlamVjdGVkKSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UHJvbWlzZSgpLmNhdGNoKG9ucmVqZWN0ZWQpO1xuXHR9XG5cdGZpbmFsbHkob25maW5hbGx5KSB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UHJvbWlzZSgpLmZpbmFsbHkob25maW5hbGx5KTtcblx0fVxuXHRnZXRQcm9taXNlKCkge1xuXHRcdGlmICghdGhpcy5wcm9taXNlKSB0aGlzLnByb21pc2UgPSB0aGlzLmV4ZWN1dGUoKTtcblx0XHRyZXR1cm4gdGhpcy5wcm9taXNlO1xuXHR9XG5cdGFzeW5jIGV4ZWN1dGUoKSB7XG5cdFx0dmFyIF90aGlzID0gdGhpcztcblx0XHR0cnkge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0ZGF0YTogYXdhaXQgKGF3YWl0IF90aGlzLmRvd25sb2FkRm4oKSkuYmxvYigpLFxuXHRcdFx0XHRlcnJvcjogbnVsbFxuXHRcdFx0fTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0aWYgKF90aGlzLnNob3VsZFRocm93T25FcnJvcikgdGhyb3cgZXJyb3I7XG5cdFx0XHRpZiAoaXNTdG9yYWdlRXJyb3IoZXJyb3IpKSByZXR1cm4ge1xuXHRcdFx0XHRkYXRhOiBudWxsLFxuXHRcdFx0XHRlcnJvclxuXHRcdFx0fTtcblx0XHRcdHRocm93IGVycm9yO1xuXHRcdH1cblx0fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3BhY2thZ2VzL1N0b3JhZ2VGaWxlQXBpLnRzXG5jb25zdCBERUZBVUxUX1NFQVJDSF9PUFRJT05TID0ge1xuXHRsaW1pdDogMTAwLFxuXHRvZmZzZXQ6IDAsXG5cdHNvcnRCeToge1xuXHRcdGNvbHVtbjogXCJuYW1lXCIsXG5cdFx0b3JkZXI6IFwiYXNjXCJcblx0fVxufTtcbmNvbnN0IERFRkFVTFRfRklMRV9PUFRJT05TID0ge1xuXHRjYWNoZUNvbnRyb2w6IFwiMzYwMFwiLFxuXHRjb250ZW50VHlwZTogXCJ0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLThcIixcblx0dXBzZXJ0OiBmYWxzZVxufTtcbnZhciBTdG9yYWdlRmlsZUFwaSA9IGNsYXNzIGV4dGVuZHMgQmFzZUFwaUNsaWVudCB7XG5cdGNvbnN0cnVjdG9yKHVybCwgaGVhZGVycyA9IHt9LCBidWNrZXRJZCwgZmV0Y2gkMSkge1xuXHRcdHN1cGVyKHVybCwgaGVhZGVycywgZmV0Y2gkMSwgXCJzdG9yYWdlXCIpO1xuXHRcdHRoaXMuYnVja2V0SWQgPSBidWNrZXRJZDtcblx0fVxuXHQvKipcblx0KiBVcGxvYWRzIGEgZmlsZSB0byBhbiBleGlzdGluZyBidWNrZXQgb3IgcmVwbGFjZXMgYW4gZXhpc3RpbmcgZmlsZSBhdCB0aGUgc3BlY2lmaWVkIHBhdGggd2l0aCBhIG5ldyBvbmUuXG5cdCpcblx0KiBAcGFyYW0gbWV0aG9kIEhUVFAgbWV0aG9kLlxuXHQqIEBwYXJhbSBwYXRoIFRoZSByZWxhdGl2ZSBmaWxlIHBhdGguIFNob3VsZCBiZSBvZiB0aGUgZm9ybWF0IGBmb2xkZXIvc3ViZm9sZGVyL2ZpbGVuYW1lLnBuZ2AuIFRoZSBidWNrZXQgbXVzdCBhbHJlYWR5IGV4aXN0IGJlZm9yZSBhdHRlbXB0aW5nIHRvIHVwbG9hZC5cblx0KiBAcGFyYW0gZmlsZUJvZHkgVGhlIGJvZHkgb2YgdGhlIGZpbGUgdG8gYmUgc3RvcmVkIGluIHRoZSBidWNrZXQuXG5cdCovXG5cdGFzeW5jIHVwbG9hZE9yVXBkYXRlKG1ldGhvZCwgcGF0aCwgZmlsZUJvZHksIGZpbGVPcHRpb25zKSB7XG5cdFx0dmFyIF90aGlzID0gdGhpcztcblx0XHRyZXR1cm4gX3RoaXMuaGFuZGxlT3BlcmF0aW9uKGFzeW5jICgpID0+IHtcblx0XHRcdGxldCBib2R5O1xuXHRcdFx0Y29uc3Qgb3B0aW9ucyA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBERUZBVUxUX0ZJTEVfT1BUSU9OUyksIGZpbGVPcHRpb25zKTtcblx0XHRcdGxldCBoZWFkZXJzID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIF90aGlzLmhlYWRlcnMpLCBtZXRob2QgPT09IFwiUE9TVFwiICYmIHsgXCJ4LXVwc2VydFwiOiBTdHJpbmcob3B0aW9ucy51cHNlcnQpIH0pO1xuXHRcdFx0Y29uc3QgbWV0YWRhdGEgPSBvcHRpb25zLm1ldGFkYXRhO1xuXHRcdFx0aWYgKHR5cGVvZiBCbG9iICE9PSBcInVuZGVmaW5lZFwiICYmIGZpbGVCb2R5IGluc3RhbmNlb2YgQmxvYikge1xuXHRcdFx0XHRib2R5ID0gbmV3IEZvcm1EYXRhKCk7XG5cdFx0XHRcdGJvZHkuYXBwZW5kKFwiY2FjaGVDb250cm9sXCIsIG9wdGlvbnMuY2FjaGVDb250cm9sKTtcblx0XHRcdFx0aWYgKG1ldGFkYXRhKSBib2R5LmFwcGVuZChcIm1ldGFkYXRhXCIsIF90aGlzLmVuY29kZU1ldGFkYXRhKG1ldGFkYXRhKSk7XG5cdFx0XHRcdGJvZHkuYXBwZW5kKFwiXCIsIGZpbGVCb2R5KTtcblx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIEZvcm1EYXRhICE9PSBcInVuZGVmaW5lZFwiICYmIGZpbGVCb2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcblx0XHRcdFx0Ym9keSA9IGZpbGVCb2R5O1xuXHRcdFx0XHRpZiAoIWJvZHkuaGFzKFwiY2FjaGVDb250cm9sXCIpKSBib2R5LmFwcGVuZChcImNhY2hlQ29udHJvbFwiLCBvcHRpb25zLmNhY2hlQ29udHJvbCk7XG5cdFx0XHRcdGlmIChtZXRhZGF0YSAmJiAhYm9keS5oYXMoXCJtZXRhZGF0YVwiKSkgYm9keS5hcHBlbmQoXCJtZXRhZGF0YVwiLCBfdGhpcy5lbmNvZGVNZXRhZGF0YShtZXRhZGF0YSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ym9keSA9IGZpbGVCb2R5O1xuXHRcdFx0XHRoZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSA9IGBtYXgtYWdlPSR7b3B0aW9ucy5jYWNoZUNvbnRyb2x9YDtcblx0XHRcdFx0aGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA9IG9wdGlvbnMuY29udGVudFR5cGU7XG5cdFx0XHRcdGlmIChtZXRhZGF0YSkgaGVhZGVyc1tcIngtbWV0YWRhdGFcIl0gPSBfdGhpcy50b0Jhc2U2NChfdGhpcy5lbmNvZGVNZXRhZGF0YShtZXRhZGF0YSkpO1xuXHRcdFx0XHRpZiAoKHR5cGVvZiBSZWFkYWJsZVN0cmVhbSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBib2R5IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gfHwgYm9keSAmJiB0eXBlb2YgYm9keSA9PT0gXCJvYmplY3RcIiAmJiBcInBpcGVcIiBpbiBib2R5ICYmIHR5cGVvZiBib2R5LnBpcGUgPT09IFwiZnVuY3Rpb25cIikgJiYgIW9wdGlvbnMuZHVwbGV4KSBvcHRpb25zLmR1cGxleCA9IFwiaGFsZlwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGZpbGVPcHRpb25zID09PSBudWxsIHx8IGZpbGVPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmaWxlT3B0aW9ucy5oZWFkZXJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWxlT3B0aW9ucy5oZWFkZXJzKSkgaGVhZGVycyA9IHNldEhlYWRlcihoZWFkZXJzLCBrZXksIHZhbHVlKTtcblx0XHRcdGNvbnN0IGNsZWFuUGF0aCA9IF90aGlzLl9yZW1vdmVFbXB0eUZvbGRlcnMocGF0aCk7XG5cdFx0XHRjb25zdCBfcGF0aCA9IF90aGlzLl9nZXRGaW5hbFBhdGgoY2xlYW5QYXRoKTtcblx0XHRcdGNvbnN0IGRhdGEgPSBhd2FpdCAobWV0aG9kID09IFwiUFVUXCIgPyBwdXQgOiBwb3N0KShfdGhpcy5mZXRjaCwgYCR7X3RoaXMudXJsfS9vYmplY3QvJHtfcGF0aH1gLCBib2R5LCBfb2JqZWN0U3ByZWFkMih7IGhlYWRlcnMgfSwgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5kdXBsZXgpID8geyBkdXBsZXg6IG9wdGlvbnMuZHVwbGV4IH0gOiB7fSkpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cGF0aDogY2xlYW5QYXRoLFxuXHRcdFx0XHRpZDogZGF0YS5JZCxcblx0XHRcdFx0ZnVsbFBhdGg6IGRhdGEuS2V5XG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQqIFVwbG9hZHMgYSBmaWxlIHRvIGFuIGV4aXN0aW5nIGJ1Y2tldC5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IEZpbGUgQnVja2V0c1xuXHQqIEBwYXJhbSBwYXRoIFRoZSBmaWxlIHBhdGgsIGluY2x1ZGluZyB0aGUgZmlsZSBuYW1lLiBTaG91bGQgYmUgb2YgdGhlIGZvcm1hdCBgZm9sZGVyL3N1YmZvbGRlci9maWxlbmFtZS5wbmdgLiBUaGUgYnVja2V0IG11c3QgYWxyZWFkeSBleGlzdCBiZWZvcmUgYXR0ZW1wdGluZyB0byB1cGxvYWQuXG5cdCogQHBhcmFtIGZpbGVCb2R5IFRoZSBib2R5IG9mIHRoZSBmaWxlIHRvIGJlIHN0b3JlZCBpbiB0aGUgYnVja2V0LlxuXHQqIEBwYXJhbSBmaWxlT3B0aW9ucyBPcHRpb25hbCBmaWxlIHVwbG9hZCBvcHRpb25zIGluY2x1ZGluZyBjYWNoZUNvbnRyb2wsIGNvbnRlbnRUeXBlLCB1cHNlcnQsIGFuZCBtZXRhZGF0YS5cblx0KiBAcmV0dXJucyBQcm9taXNlIHdpdGggcmVzcG9uc2UgY29udGFpbmluZyBmaWxlIHBhdGgsIGlkLCBhbmQgZnVsbFBhdGggb3IgZXJyb3Jcblx0KlxuXHQqIEBleGFtcGxlIFVwbG9hZCBmaWxlXG5cdCogYGBganNcblx0KiBjb25zdCBhdmF0YXJGaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5zdG9yYWdlXG5cdCogICAuZnJvbSgnYXZhdGFycycpXG5cdCogICAudXBsb2FkKCdwdWJsaWMvYXZhdGFyMS5wbmcnLCBhdmF0YXJGaWxlLCB7XG5cdCogICAgIGNhY2hlQ29udHJvbDogJzM2MDAnLFxuXHQqICAgICB1cHNlcnQ6IGZhbHNlXG5cdCogICB9KVxuXHQqIGBgYFxuXHQqXG5cdCogUmVzcG9uc2U6XG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiB7XG5cdCogICAgIFwicGF0aFwiOiBcInB1YmxpYy9hdmF0YXIxLnBuZ1wiLFxuXHQqICAgICBcImZ1bGxQYXRoXCI6IFwiYXZhdGFycy9wdWJsaWMvYXZhdGFyMS5wbmdcIlxuXHQqICAgfSxcblx0KiAgIFwiZXJyb3JcIjogbnVsbFxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIFVwbG9hZCBmaWxlIHVzaW5nIGBBcnJheUJ1ZmZlcmAgZnJvbSBiYXNlNjQgZmlsZSBkYXRhXG5cdCogYGBganNcblx0KiBpbXBvcnQgeyBkZWNvZGUgfSBmcm9tICdiYXNlNjQtYXJyYXlidWZmZXInXG5cdCpcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC5mcm9tKCdhdmF0YXJzJylcblx0KiAgIC51cGxvYWQoJ3B1YmxpYy9hdmF0YXIxLnBuZycsIGRlY29kZSgnYmFzZTY0RmlsZURhdGEnKSwge1xuXHQqICAgICBjb250ZW50VHlwZTogJ2ltYWdlL3BuZydcblx0KiAgIH0pXG5cdCogYGBgXG5cdCpcblx0KiBAcmVtYXJrc1xuXHQqIC0gUkxTIHBvbGljeSBwZXJtaXNzaW9ucyByZXF1aXJlZDpcblx0KiAgIC0gYGJ1Y2tldHNgIHRhYmxlIHBlcm1pc3Npb25zOiBub25lXG5cdCogICAtIGBvYmplY3RzYCB0YWJsZSBwZXJtaXNzaW9uczogb25seSBgaW5zZXJ0YCB3aGVuIHlvdSBhcmUgdXBsb2FkaW5nIG5ldyBmaWxlcyBhbmQgYHNlbGVjdGAsIGBpbnNlcnRgIGFuZCBgdXBkYXRlYCB3aGVuIHlvdSBhcmUgdXBzZXJ0aW5nIGZpbGVzXG5cdCogLSBSZWZlciB0byB0aGUgW1N0b3JhZ2UgZ3VpZGVdKC9kb2NzL2d1aWRlcy9zdG9yYWdlL3NlY3VyaXR5L2FjY2Vzcy1jb250cm9sKSBvbiBob3cgYWNjZXNzIGNvbnRyb2wgd29ya3Ncblx0KiAtIEZvciBSZWFjdCBOYXRpdmUsIHVzaW5nIGVpdGhlciBgQmxvYmAsIGBGaWxlYCBvciBgRm9ybURhdGFgIGRvZXMgbm90IHdvcmsgYXMgaW50ZW5kZWQuIFVwbG9hZCBmaWxlIHVzaW5nIGBBcnJheUJ1ZmZlcmAgZnJvbSBiYXNlNjQgZmlsZSBkYXRhIGluc3RlYWQsIHNlZSBleGFtcGxlIGJlbG93LlxuXHQqL1xuXHRhc3luYyB1cGxvYWQocGF0aCwgZmlsZUJvZHksIGZpbGVPcHRpb25zKSB7XG5cdFx0cmV0dXJuIHRoaXMudXBsb2FkT3JVcGRhdGUoXCJQT1NUXCIsIHBhdGgsIGZpbGVCb2R5LCBmaWxlT3B0aW9ucyk7XG5cdH1cblx0LyoqXG5cdCogVXBsb2FkIGEgZmlsZSB3aXRoIGEgdG9rZW4gZ2VuZXJhdGVkIGZyb20gYGNyZWF0ZVNpZ25lZFVwbG9hZFVybGAuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBGaWxlIEJ1Y2tldHNcblx0KiBAcGFyYW0gcGF0aCBUaGUgZmlsZSBwYXRoLCBpbmNsdWRpbmcgdGhlIGZpbGUgbmFtZS4gU2hvdWxkIGJlIG9mIHRoZSBmb3JtYXQgYGZvbGRlci9zdWJmb2xkZXIvZmlsZW5hbWUucG5nYC4gVGhlIGJ1Y2tldCBtdXN0IGFscmVhZHkgZXhpc3QgYmVmb3JlIGF0dGVtcHRpbmcgdG8gdXBsb2FkLlxuXHQqIEBwYXJhbSB0b2tlbiBUaGUgdG9rZW4gZ2VuZXJhdGVkIGZyb20gYGNyZWF0ZVNpZ25lZFVwbG9hZFVybGBcblx0KiBAcGFyYW0gZmlsZUJvZHkgVGhlIGJvZHkgb2YgdGhlIGZpbGUgdG8gYmUgc3RvcmVkIGluIHRoZSBidWNrZXQuXG5cdCogQHBhcmFtIGZpbGVPcHRpb25zIEhUVFAgaGVhZGVycyAoY2FjaGVDb250cm9sLCBjb250ZW50VHlwZSwgZXRjLikuXG5cdCogKipOb3RlOioqIFRoZSBgdXBzZXJ0YCBvcHRpb24gaGFzIG5vIGVmZmVjdCBoZXJlLiBUbyBlbmFibGUgdXBzZXJ0IGJlaGF2aW9yLFxuXHQqIHBhc3MgYHsgdXBzZXJ0OiB0cnVlIH1gIHdoZW4gY2FsbGluZyBgY3JlYXRlU2lnbmVkVXBsb2FkVXJsKClgIGluc3RlYWQuXG5cdCogQHJldHVybnMgUHJvbWlzZSB3aXRoIHJlc3BvbnNlIGNvbnRhaW5pbmcgZmlsZSBwYXRoIGFuZCBmdWxsUGF0aCBvciBlcnJvclxuXHQqXG5cdCogQGV4YW1wbGUgVXBsb2FkIHRvIGEgc2lnbmVkIFVSTFxuXHQqIGBgYGpzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5zdG9yYWdlXG5cdCogICAuZnJvbSgnYXZhdGFycycpXG5cdCogICAudXBsb2FkVG9TaWduZWRVcmwoJ2ZvbGRlci9jYXQuanBnJywgJ3Rva2VuLWZyb20tY3JlYXRlU2lnbmVkVXBsb2FkVXJsJywgZmlsZSlcblx0KiBgYGBcblx0KlxuXHQqIFJlc3BvbnNlOlxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjoge1xuXHQqICAgICBcInBhdGhcIjogXCJmb2xkZXIvY2F0LmpwZ1wiLFxuXHQqICAgICBcImZ1bGxQYXRoXCI6IFwiYXZhdGFycy9mb2xkZXIvY2F0LmpwZ1wiXG5cdCogICB9LFxuXHQqICAgXCJlcnJvclwiOiBudWxsXG5cdCogfVxuXHQqIGBgYFxuXHQqXG5cdCogQHJlbWFya3Ncblx0KiAtIFJMUyBwb2xpY3kgcGVybWlzc2lvbnMgcmVxdWlyZWQ6XG5cdCogICAtIGBidWNrZXRzYCB0YWJsZSBwZXJtaXNzaW9uczogbm9uZVxuXHQqICAgLSBgb2JqZWN0c2AgdGFibGUgcGVybWlzc2lvbnM6IG5vbmVcblx0KiAtIFJlZmVyIHRvIHRoZSBbU3RvcmFnZSBndWlkZV0oL2RvY3MvZ3VpZGVzL3N0b3JhZ2Uvc2VjdXJpdHkvYWNjZXNzLWNvbnRyb2wpIG9uIGhvdyBhY2Nlc3MgY29udHJvbCB3b3Jrc1xuXHQqL1xuXHRhc3luYyB1cGxvYWRUb1NpZ25lZFVybChwYXRoLCB0b2tlbiwgZmlsZUJvZHksIGZpbGVPcHRpb25zKSB7XG5cdFx0dmFyIF90aGlzMyA9IHRoaXM7XG5cdFx0Y29uc3QgY2xlYW5QYXRoID0gX3RoaXMzLl9yZW1vdmVFbXB0eUZvbGRlcnMocGF0aCk7XG5cdFx0Y29uc3QgX3BhdGggPSBfdGhpczMuX2dldEZpbmFsUGF0aChjbGVhblBhdGgpO1xuXHRcdGNvbnN0IHVybCA9IG5ldyBVUkwoX3RoaXMzLnVybCArIGAvb2JqZWN0L3VwbG9hZC9zaWduLyR7X3BhdGh9YCk7XG5cdFx0dXJsLnNlYXJjaFBhcmFtcy5zZXQoXCJ0b2tlblwiLCB0b2tlbik7XG5cdFx0cmV0dXJuIF90aGlzMy5oYW5kbGVPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuXHRcdFx0bGV0IGJvZHk7XG5cdFx0XHRjb25zdCBvcHRpb25zID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIERFRkFVTFRfRklMRV9PUFRJT05TKSwgZmlsZU9wdGlvbnMpO1xuXHRcdFx0bGV0IGhlYWRlcnMgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgX3RoaXMzLmhlYWRlcnMpLCB7IFwieC11cHNlcnRcIjogU3RyaW5nKG9wdGlvbnMudXBzZXJ0KSB9KTtcblx0XHRcdGNvbnN0IG1ldGFkYXRhID0gb3B0aW9ucy5tZXRhZGF0YTtcblx0XHRcdGlmICh0eXBlb2YgQmxvYiAhPT0gXCJ1bmRlZmluZWRcIiAmJiBmaWxlQm9keSBpbnN0YW5jZW9mIEJsb2IpIHtcblx0XHRcdFx0Ym9keSA9IG5ldyBGb3JtRGF0YSgpO1xuXHRcdFx0XHRib2R5LmFwcGVuZChcImNhY2hlQ29udHJvbFwiLCBvcHRpb25zLmNhY2hlQ29udHJvbCk7XG5cdFx0XHRcdGlmIChtZXRhZGF0YSkgYm9keS5hcHBlbmQoXCJtZXRhZGF0YVwiLCBfdGhpczMuZW5jb2RlTWV0YWRhdGEobWV0YWRhdGEpKTtcblx0XHRcdFx0Ym9keS5hcHBlbmQoXCJcIiwgZmlsZUJvZHkpO1xuXHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgRm9ybURhdGEgIT09IFwidW5kZWZpbmVkXCIgJiYgZmlsZUJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuXHRcdFx0XHRib2R5ID0gZmlsZUJvZHk7XG5cdFx0XHRcdGlmICghYm9keS5oYXMoXCJjYWNoZUNvbnRyb2xcIikpIGJvZHkuYXBwZW5kKFwiY2FjaGVDb250cm9sXCIsIG9wdGlvbnMuY2FjaGVDb250cm9sKTtcblx0XHRcdFx0aWYgKG1ldGFkYXRhICYmICFib2R5LmhhcyhcIm1ldGFkYXRhXCIpKSBib2R5LmFwcGVuZChcIm1ldGFkYXRhXCIsIF90aGlzMy5lbmNvZGVNZXRhZGF0YShtZXRhZGF0YSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ym9keSA9IGZpbGVCb2R5O1xuXHRcdFx0XHRoZWFkZXJzW1wiY2FjaGUtY29udHJvbFwiXSA9IGBtYXgtYWdlPSR7b3B0aW9ucy5jYWNoZUNvbnRyb2x9YDtcblx0XHRcdFx0aGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSA9IG9wdGlvbnMuY29udGVudFR5cGU7XG5cdFx0XHRcdGlmIChtZXRhZGF0YSkgaGVhZGVyc1tcIngtbWV0YWRhdGFcIl0gPSBfdGhpczMudG9CYXNlNjQoX3RoaXMzLmVuY29kZU1ldGFkYXRhKG1ldGFkYXRhKSk7XG5cdFx0XHRcdGlmICgodHlwZW9mIFJlYWRhYmxlU3RyZWFtICE9PSBcInVuZGVmaW5lZFwiICYmIGJvZHkgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSB8fCBib2R5ICYmIHR5cGVvZiBib2R5ID09PSBcIm9iamVjdFwiICYmIFwicGlwZVwiIGluIGJvZHkgJiYgdHlwZW9mIGJvZHkucGlwZSA9PT0gXCJmdW5jdGlvblwiKSAmJiAhb3B0aW9ucy5kdXBsZXgpIG9wdGlvbnMuZHVwbGV4ID0gXCJoYWxmXCI7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZmlsZU9wdGlvbnMgPT09IG51bGwgfHwgZmlsZU9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpbGVPcHRpb25zLmhlYWRlcnMpIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGZpbGVPcHRpb25zLmhlYWRlcnMpKSBoZWFkZXJzID0gc2V0SGVhZGVyKGhlYWRlcnMsIGtleSwgdmFsdWUpO1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0cGF0aDogY2xlYW5QYXRoLFxuXHRcdFx0XHRmdWxsUGF0aDogKGF3YWl0IHB1dChfdGhpczMuZmV0Y2gsIHVybC50b1N0cmluZygpLCBib2R5LCBfb2JqZWN0U3ByZWFkMih7IGhlYWRlcnMgfSwgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5kdXBsZXgpID8geyBkdXBsZXg6IG9wdGlvbnMuZHVwbGV4IH0gOiB7fSkpKS5LZXlcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCogQ3JlYXRlcyBhIHNpZ25lZCB1cGxvYWQgVVJMLlxuXHQqIFNpZ25lZCB1cGxvYWQgVVJMcyBjYW4gYmUgdXNlZCB0byB1cGxvYWQgZmlsZXMgdG8gdGhlIGJ1Y2tldCB3aXRob3V0IGZ1cnRoZXIgYXV0aGVudGljYXRpb24uXG5cdCogVGhleSBhcmUgdmFsaWQgZm9yIDIgaG91cnMuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBGaWxlIEJ1Y2tldHNcblx0KiBAcGFyYW0gcGF0aCBUaGUgZmlsZSBwYXRoLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgZmlsZSBuYW1lLiBGb3IgZXhhbXBsZSBgZm9sZGVyL2ltYWdlLnBuZ2AuXG5cdCogQHBhcmFtIG9wdGlvbnMudXBzZXJ0IElmIHNldCB0byB0cnVlLCBhbGxvd3MgdGhlIGZpbGUgdG8gYmUgb3ZlcndyaXR0ZW4gaWYgaXQgYWxyZWFkeSBleGlzdHMuXG5cdCogQHJldHVybnMgUHJvbWlzZSB3aXRoIHJlc3BvbnNlIGNvbnRhaW5pbmcgc2lnbmVkIHVwbG9hZCBVUkwsIHRva2VuLCBhbmQgcGF0aCBvciBlcnJvclxuXHQqXG5cdCogQGV4YW1wbGUgQ3JlYXRlIFNpZ25lZCBVcGxvYWQgVVJMXG5cdCogYGBganNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC5mcm9tKCdhdmF0YXJzJylcblx0KiAgIC5jcmVhdGVTaWduZWRVcGxvYWRVcmwoJ2ZvbGRlci9jYXQuanBnJylcblx0KiBgYGBcblx0KlxuXHQqIFJlc3BvbnNlOlxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjoge1xuXHQqICAgICBcInNpZ25lZFVybFwiOiBcImh0dHBzOi8vZXhhbXBsZS5zdXBhYmFzZS5jby9zdG9yYWdlL3YxL29iamVjdC91cGxvYWQvc2lnbi9hdmF0YXJzL2ZvbGRlci9jYXQuanBnP3Rva2VuPTxUT0tFTj5cIixcblx0KiAgICAgXCJwYXRoXCI6IFwiZm9sZGVyL2NhdC5qcGdcIixcblx0KiAgICAgXCJ0b2tlblwiOiBcIjxUT0tFTj5cIlxuXHQqICAgfSxcblx0KiAgIFwiZXJyb3JcIjogbnVsbFxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBSTFMgcG9saWN5IHBlcm1pc3Npb25zIHJlcXVpcmVkOlxuXHQqICAgLSBgYnVja2V0c2AgdGFibGUgcGVybWlzc2lvbnM6IG5vbmVcblx0KiAgIC0gYG9iamVjdHNgIHRhYmxlIHBlcm1pc3Npb25zOiBgaW5zZXJ0YFxuXHQqIC0gUmVmZXIgdG8gdGhlIFtTdG9yYWdlIGd1aWRlXSgvZG9jcy9ndWlkZXMvc3RvcmFnZS9zZWN1cml0eS9hY2Nlc3MtY29udHJvbCkgb24gaG93IGFjY2VzcyBjb250cm9sIHdvcmtzXG5cdCovXG5cdGFzeW5jIGNyZWF0ZVNpZ25lZFVwbG9hZFVybChwYXRoLCBvcHRpb25zKSB7XG5cdFx0dmFyIF90aGlzNCA9IHRoaXM7XG5cdFx0cmV0dXJuIF90aGlzNC5oYW5kbGVPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuXHRcdFx0bGV0IF9wYXRoID0gX3RoaXM0Ll9nZXRGaW5hbFBhdGgocGF0aCk7XG5cdFx0XHRjb25zdCBoZWFkZXJzID0gX29iamVjdFNwcmVhZDIoe30sIF90aGlzNC5oZWFkZXJzKTtcblx0XHRcdGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudXBzZXJ0KSBoZWFkZXJzW1wieC11cHNlcnRcIl0gPSBcInRydWVcIjtcblx0XHRcdGNvbnN0IGRhdGEgPSBhd2FpdCBwb3N0KF90aGlzNC5mZXRjaCwgYCR7X3RoaXM0LnVybH0vb2JqZWN0L3VwbG9hZC9zaWduLyR7X3BhdGh9YCwge30sIHsgaGVhZGVycyB9KTtcblx0XHRcdGNvbnN0IHVybCA9IG5ldyBVUkwoX3RoaXM0LnVybCArIGRhdGEudXJsKTtcblx0XHRcdGNvbnN0IHRva2VuID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoXCJ0b2tlblwiKTtcblx0XHRcdGlmICghdG9rZW4pIHRocm93IG5ldyBTdG9yYWdlRXJyb3IoXCJObyB0b2tlbiByZXR1cm5lZCBieSBBUElcIik7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzaWduZWRVcmw6IHVybC50b1N0cmluZygpLFxuXHRcdFx0XHRwYXRoLFxuXHRcdFx0XHR0b2tlblxuXHRcdFx0fTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0KiBSZXBsYWNlcyBhbiBleGlzdGluZyBmaWxlIGF0IHRoZSBzcGVjaWZpZWQgcGF0aCB3aXRoIGEgbmV3IG9uZS5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IEZpbGUgQnVja2V0c1xuXHQqIEBwYXJhbSBwYXRoIFRoZSByZWxhdGl2ZSBmaWxlIHBhdGguIFNob3VsZCBiZSBvZiB0aGUgZm9ybWF0IGBmb2xkZXIvc3ViZm9sZGVyL2ZpbGVuYW1lLnBuZ2AuIFRoZSBidWNrZXQgbXVzdCBhbHJlYWR5IGV4aXN0IGJlZm9yZSBhdHRlbXB0aW5nIHRvIHVwZGF0ZS5cblx0KiBAcGFyYW0gZmlsZUJvZHkgVGhlIGJvZHkgb2YgdGhlIGZpbGUgdG8gYmUgc3RvcmVkIGluIHRoZSBidWNrZXQuXG5cdCogQHBhcmFtIGZpbGVPcHRpb25zIE9wdGlvbmFsIGZpbGUgdXBsb2FkIG9wdGlvbnMgaW5jbHVkaW5nIGNhY2hlQ29udHJvbCwgY29udGVudFR5cGUsIGFuZCBtZXRhZGF0YS5cblx0KiAqKk5vdGU6KiogVGhlIGB1cHNlcnRgIG9wdGlvbiBoYXMgbm8gZWZmZWN0IGhlcmUuIGB1cGRhdGUoKWAgYWx3YXlzIHJlcGxhY2VzIHRoZVxuXHQqIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGgsIHNvIHRoZSBgeC11cHNlcnRgIGhlYWRlciBpcyBub3Qgc2VudC4gVG8gY29udHJvbCB1cHNlcnRcblx0KiBiZWhhdmlvciwgdXNlIGB1cGxvYWQoKWAgaW5zdGVhZC5cblx0KiBAcmV0dXJucyBQcm9taXNlIHdpdGggcmVzcG9uc2UgY29udGFpbmluZyBmaWxlIHBhdGgsIGlkLCBhbmQgZnVsbFBhdGggb3IgZXJyb3Jcblx0KlxuXHQqIEBleGFtcGxlIFVwZGF0ZSBmaWxlXG5cdCogYGBganNcblx0KiBjb25zdCBhdmF0YXJGaWxlID0gZXZlbnQudGFyZ2V0LmZpbGVzWzBdXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5zdG9yYWdlXG5cdCogICAuZnJvbSgnYXZhdGFycycpXG5cdCogICAudXBkYXRlKCdwdWJsaWMvYXZhdGFyMS5wbmcnLCBhdmF0YXJGaWxlLCB7XG5cdCogICAgIGNhY2hlQ29udHJvbDogJzM2MDAnXG5cdCogICB9KVxuXHQqIGBgYFxuXHQqXG5cdCogUmVzcG9uc2U6XG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiB7XG5cdCogICAgIFwicGF0aFwiOiBcInB1YmxpYy9hdmF0YXIxLnBuZ1wiLFxuXHQqICAgICBcImZ1bGxQYXRoXCI6IFwiYXZhdGFycy9wdWJsaWMvYXZhdGFyMS5wbmdcIlxuXHQqICAgfSxcblx0KiAgIFwiZXJyb3JcIjogbnVsbFxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIFVwZGF0ZSBmaWxlIHVzaW5nIGBBcnJheUJ1ZmZlcmAgZnJvbSBiYXNlNjQgZmlsZSBkYXRhXG5cdCogYGBganNcblx0KiBpbXBvcnQge2RlY29kZX0gZnJvbSAnYmFzZTY0LWFycmF5YnVmZmVyJ1xuXHQqXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5zdG9yYWdlXG5cdCogICAuZnJvbSgnYXZhdGFycycpXG5cdCogICAudXBkYXRlKCdwdWJsaWMvYXZhdGFyMS5wbmcnLCBkZWNvZGUoJ2Jhc2U2NEZpbGVEYXRhJyksIHtcblx0KiAgICAgY29udGVudFR5cGU6ICdpbWFnZS9wbmcnXG5cdCogICB9KVxuXHQqIGBgYFxuXHQqXG5cdCogQHJlbWFya3Ncblx0KiAtIFJMUyBwb2xpY3kgcGVybWlzc2lvbnMgcmVxdWlyZWQ6XG5cdCogICAtIGBidWNrZXRzYCB0YWJsZSBwZXJtaXNzaW9uczogbm9uZVxuXHQqICAgLSBgb2JqZWN0c2AgdGFibGUgcGVybWlzc2lvbnM6IGB1cGRhdGVgIGFuZCBgc2VsZWN0YFxuXHQqIC0gYHVwZGF0ZSgpYCBhbHdheXMgcmVwbGFjZXMgdGhlIGZpbGUgYXQgdGhlIGdpdmVuIHBhdGggcmVnYXJkbGVzcyBvZiB0aGUgYHVwc2VydGAgb3B0aW9uLlxuXHQqIC0gUmVmZXIgdG8gdGhlIFtTdG9yYWdlIGd1aWRlXSgvZG9jcy9ndWlkZXMvc3RvcmFnZS9zZWN1cml0eS9hY2Nlc3MtY29udHJvbCkgb24gaG93IGFjY2VzcyBjb250cm9sIHdvcmtzXG5cdCogLSBGb3IgUmVhY3QgTmF0aXZlLCB1c2luZyBlaXRoZXIgYEJsb2JgLCBgRmlsZWAgb3IgYEZvcm1EYXRhYCBkb2VzIG5vdCB3b3JrIGFzIGludGVuZGVkLiBVcGRhdGUgZmlsZSB1c2luZyBgQXJyYXlCdWZmZXJgIGZyb20gYmFzZTY0IGZpbGUgZGF0YSBpbnN0ZWFkLCBzZWUgZXhhbXBsZSBiZWxvdy5cblx0Ki9cblx0YXN5bmMgdXBkYXRlKHBhdGgsIGZpbGVCb2R5LCBmaWxlT3B0aW9ucykge1xuXHRcdHJldHVybiB0aGlzLnVwbG9hZE9yVXBkYXRlKFwiUFVUXCIsIHBhdGgsIGZpbGVCb2R5LCBmaWxlT3B0aW9ucyk7XG5cdH1cblx0LyoqXG5cdCogTW92ZXMgYW4gZXhpc3RpbmcgZmlsZSB0byBhIG5ldyBwYXRoIGluIHRoZSBzYW1lIGJ1Y2tldC5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IEZpbGUgQnVja2V0c1xuXHQqIEBwYXJhbSBmcm9tUGF0aCBUaGUgb3JpZ2luYWwgZmlsZSBwYXRoLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgZmlsZSBuYW1lLiBGb3IgZXhhbXBsZSBgZm9sZGVyL2ltYWdlLnBuZ2AuXG5cdCogQHBhcmFtIHRvUGF0aCBUaGUgbmV3IGZpbGUgcGF0aCwgaW5jbHVkaW5nIHRoZSBuZXcgZmlsZSBuYW1lLiBGb3IgZXhhbXBsZSBgZm9sZGVyL2ltYWdlLW5ldy5wbmdgLlxuXHQqIEBwYXJhbSBvcHRpb25zIFRoZSBkZXN0aW5hdGlvbiBvcHRpb25zLlxuXHQqIEByZXR1cm5zIFByb21pc2Ugd2l0aCByZXNwb25zZSBjb250YWluaW5nIHN1Y2Nlc3MgbWVzc2FnZSBvciBlcnJvclxuXHQqXG5cdCogQGV4YW1wbGUgTW92ZSBmaWxlXG5cdCogYGBganNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC5mcm9tKCdhdmF0YXJzJylcblx0KiAgIC5tb3ZlKCdwdWJsaWMvYXZhdGFyMS5wbmcnLCAncHJpdmF0ZS9hdmF0YXIyLnBuZycpXG5cdCogYGBgXG5cdCpcblx0KiBSZXNwb25zZTpcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IHtcblx0KiAgICAgXCJtZXNzYWdlXCI6IFwiU3VjY2Vzc2Z1bGx5IG1vdmVkXCJcblx0KiAgIH0sXG5cdCogICBcImVycm9yXCI6IG51bGxcblx0KiB9XG5cdCogYGBgXG5cdCpcblx0KiBAcmVtYXJrc1xuXHQqIC0gUkxTIHBvbGljeSBwZXJtaXNzaW9ucyByZXF1aXJlZDpcblx0KiAgIC0gYGJ1Y2tldHNgIHRhYmxlIHBlcm1pc3Npb25zOiBub25lXG5cdCogICAtIGBvYmplY3RzYCB0YWJsZSBwZXJtaXNzaW9uczogYHVwZGF0ZWAgYW5kIGBzZWxlY3RgXG5cdCogLSBSZWZlciB0byB0aGUgW1N0b3JhZ2UgZ3VpZGVdKC9kb2NzL2d1aWRlcy9zdG9yYWdlL3NlY3VyaXR5L2FjY2Vzcy1jb250cm9sKSBvbiBob3cgYWNjZXNzIGNvbnRyb2wgd29ya3Ncblx0Ki9cblx0YXN5bmMgbW92ZShmcm9tUGF0aCwgdG9QYXRoLCBvcHRpb25zKSB7XG5cdFx0dmFyIF90aGlzNiA9IHRoaXM7XG5cdFx0cmV0dXJuIF90aGlzNi5oYW5kbGVPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHBvc3QoX3RoaXM2LmZldGNoLCBgJHtfdGhpczYudXJsfS9vYmplY3QvbW92ZWAsIHtcblx0XHRcdFx0YnVja2V0SWQ6IF90aGlzNi5idWNrZXRJZCxcblx0XHRcdFx0c291cmNlS2V5OiBmcm9tUGF0aCxcblx0XHRcdFx0ZGVzdGluYXRpb25LZXk6IHRvUGF0aCxcblx0XHRcdFx0ZGVzdGluYXRpb25CdWNrZXQ6IG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5kZXN0aW5hdGlvbkJ1Y2tldFxuXHRcdFx0fSwgeyBoZWFkZXJzOiBfdGhpczYuaGVhZGVycyB9KTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0KiBDb3BpZXMgYW4gZXhpc3RpbmcgZmlsZSB0byBhIG5ldyBwYXRoIGluIHRoZSBzYW1lIGJ1Y2tldC5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IEZpbGUgQnVja2V0c1xuXHQqIEBwYXJhbSBmcm9tUGF0aCBUaGUgb3JpZ2luYWwgZmlsZSBwYXRoLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgZmlsZSBuYW1lLiBGb3IgZXhhbXBsZSBgZm9sZGVyL2ltYWdlLnBuZ2AuXG5cdCogQHBhcmFtIHRvUGF0aCBUaGUgbmV3IGZpbGUgcGF0aCwgaW5jbHVkaW5nIHRoZSBuZXcgZmlsZSBuYW1lLiBGb3IgZXhhbXBsZSBgZm9sZGVyL2ltYWdlLWNvcHkucG5nYC5cblx0KiBAcGFyYW0gb3B0aW9ucyBUaGUgZGVzdGluYXRpb24gb3B0aW9ucy5cblx0KiBAcmV0dXJucyBQcm9taXNlIHdpdGggcmVzcG9uc2UgY29udGFpbmluZyBjb3BpZWQgZmlsZSBwYXRoIG9yIGVycm9yXG5cdCpcblx0KiBAZXhhbXBsZSBDb3B5IGZpbGVcblx0KiBgYGBqc1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuc3RvcmFnZVxuXHQqICAgLmZyb20oJ2F2YXRhcnMnKVxuXHQqICAgLmNvcHkoJ3B1YmxpYy9hdmF0YXIxLnBuZycsICdwcml2YXRlL2F2YXRhcjIucG5nJylcblx0KiBgYGBcblx0KlxuXHQqIFJlc3BvbnNlOlxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjoge1xuXHQqICAgICBcInBhdGhcIjogXCJhdmF0YXJzL3ByaXZhdGUvYXZhdGFyMi5wbmdcIlxuXHQqICAgfSxcblx0KiAgIFwiZXJyb3JcIjogbnVsbFxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBSTFMgcG9saWN5IHBlcm1pc3Npb25zIHJlcXVpcmVkOlxuXHQqICAgLSBgYnVja2V0c2AgdGFibGUgcGVybWlzc2lvbnM6IG5vbmVcblx0KiAgIC0gYG9iamVjdHNgIHRhYmxlIHBlcm1pc3Npb25zOiBgaW5zZXJ0YCBhbmQgYHNlbGVjdGBcblx0KiAtIFJlZmVyIHRvIHRoZSBbU3RvcmFnZSBndWlkZV0oL2RvY3MvZ3VpZGVzL3N0b3JhZ2Uvc2VjdXJpdHkvYWNjZXNzLWNvbnRyb2wpIG9uIGhvdyBhY2Nlc3MgY29udHJvbCB3b3Jrc1xuXHQqL1xuXHRhc3luYyBjb3B5KGZyb21QYXRoLCB0b1BhdGgsIG9wdGlvbnMpIHtcblx0XHR2YXIgX3RoaXM3ID0gdGhpcztcblx0XHRyZXR1cm4gX3RoaXM3LmhhbmRsZU9wZXJhdGlvbihhc3luYyAoKSA9PiB7XG5cdFx0XHRyZXR1cm4geyBwYXRoOiAoYXdhaXQgcG9zdChfdGhpczcuZmV0Y2gsIGAke190aGlzNy51cmx9L29iamVjdC9jb3B5YCwge1xuXHRcdFx0XHRidWNrZXRJZDogX3RoaXM3LmJ1Y2tldElkLFxuXHRcdFx0XHRzb3VyY2VLZXk6IGZyb21QYXRoLFxuXHRcdFx0XHRkZXN0aW5hdGlvbktleTogdG9QYXRoLFxuXHRcdFx0XHRkZXN0aW5hdGlvbkJ1Y2tldDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmRlc3RpbmF0aW9uQnVja2V0XG5cdFx0XHR9LCB7IGhlYWRlcnM6IF90aGlzNy5oZWFkZXJzIH0pKS5LZXkgfTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0KiBDcmVhdGVzIGEgc2lnbmVkIFVSTC4gVXNlIGEgc2lnbmVkIFVSTCB0byBzaGFyZSBhIGZpbGUgZm9yIGEgZml4ZWQgYW1vdW50IG9mIHRpbWUuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBGaWxlIEJ1Y2tldHNcblx0KiBAcGFyYW0gcGF0aCBUaGUgZmlsZSBwYXRoLCBpbmNsdWRpbmcgdGhlIGN1cnJlbnQgZmlsZSBuYW1lLiBGb3IgZXhhbXBsZSBgZm9sZGVyL2ltYWdlLnBuZ2AuXG5cdCogQHBhcmFtIGV4cGlyZXNJbiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgdW50aWwgdGhlIHNpZ25lZCBVUkwgZXhwaXJlcy4gRm9yIGV4YW1wbGUsIGA2MGAgZm9yIGEgVVJMIHdoaWNoIGlzIHZhbGlkIGZvciBvbmUgbWludXRlLlxuXHQqIEBwYXJhbSBvcHRpb25zLmRvd25sb2FkIHRyaWdnZXJzIHRoZSBmaWxlIGFzIGEgZG93bmxvYWQgaWYgc2V0IHRvIHRydWUuIFNldCB0aGlzIHBhcmFtZXRlciBhcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBpZiB5b3Ugd2FudCB0byB0cmlnZ2VyIHRoZSBkb3dubG9hZCB3aXRoIGEgZGlmZmVyZW50IGZpbGVuYW1lLlxuXHQqIEBwYXJhbSBvcHRpb25zLnRyYW5zZm9ybSBUcmFuc2Zvcm0gdGhlIGFzc2V0IGJlZm9yZSBzZXJ2aW5nIGl0IHRvIHRoZSBjbGllbnQuXG5cdCogQHBhcmFtIG9wdGlvbnMuY2FjaGVOb25jZSBBcHBlbmQgYSBjYWNoZSBub25jZSBwYXJhbWV0ZXIgdG8gdGhlIFVSTCB0byBpbnZhbGlkYXRlIHRoZSBjYWNoZS5cblx0KiBAcmV0dXJucyBQcm9taXNlIHdpdGggcmVzcG9uc2UgY29udGFpbmluZyBzaWduZWQgVVJMIG9yIGVycm9yXG5cdCpcblx0KiBAZXhhbXBsZSBDcmVhdGUgU2lnbmVkIFVSTFxuXHQqIGBgYGpzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5zdG9yYWdlXG5cdCogICAuZnJvbSgnYXZhdGFycycpXG5cdCogICAuY3JlYXRlU2lnbmVkVXJsKCdmb2xkZXIvYXZhdGFyMS5wbmcnLCA2MClcblx0KiBgYGBcblx0KlxuXHQqIFJlc3BvbnNlOlxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjoge1xuXHQqICAgICBcInNpZ25lZFVybFwiOiBcImh0dHBzOi8vZXhhbXBsZS5zdXBhYmFzZS5jby9zdG9yYWdlL3YxL29iamVjdC9zaWduL2F2YXRhcnMvZm9sZGVyL2F2YXRhcjEucG5nP3Rva2VuPTxUT0tFTj5cIlxuXHQqICAgfSxcblx0KiAgIFwiZXJyb3JcIjogbnVsbFxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIENyZWF0ZSBhIHNpZ25lZCBVUkwgZm9yIGFuIGFzc2V0IHdpdGggdHJhbnNmb3JtYXRpb25zXG5cdCogYGBganNcblx0KiBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuc3RvcmFnZVxuXHQqICAgLmZyb20oJ2F2YXRhcnMnKVxuXHQqICAgLmNyZWF0ZVNpZ25lZFVybCgnZm9sZGVyL2F2YXRhcjEucG5nJywgNjAsIHtcblx0KiAgICAgdHJhbnNmb3JtOiB7XG5cdCogICAgICAgd2lkdGg6IDEwMCxcblx0KiAgICAgICBoZWlnaHQ6IDEwMCxcblx0KiAgICAgfVxuXHQqICAgfSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIENyZWF0ZSBhIHNpZ25lZCBVUkwgd2hpY2ggdHJpZ2dlcnMgdGhlIGRvd25sb2FkIG9mIHRoZSBhc3NldFxuXHQqIGBgYGpzXG5cdCogY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC5mcm9tKCdhdmF0YXJzJylcblx0KiAgIC5jcmVhdGVTaWduZWRVcmwoJ2ZvbGRlci9hdmF0YXIxLnBuZycsIDYwLCB7XG5cdCogICAgIGRvd25sb2FkOiB0cnVlLFxuXHQqICAgfSlcblx0KiBgYGBcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBSTFMgcG9saWN5IHBlcm1pc3Npb25zIHJlcXVpcmVkOlxuXHQqICAgLSBgYnVja2V0c2AgdGFibGUgcGVybWlzc2lvbnM6IG5vbmVcblx0KiAgIC0gYG9iamVjdHNgIHRhYmxlIHBlcm1pc3Npb25zOiBgc2VsZWN0YFxuXHQqIC0gUmVmZXIgdG8gdGhlIFtTdG9yYWdlIGd1aWRlXSgvZG9jcy9ndWlkZXMvc3RvcmFnZS9zZWN1cml0eS9hY2Nlc3MtY29udHJvbCkgb24gaG93IGFjY2VzcyBjb250cm9sIHdvcmtzXG5cdCovXG5cdGFzeW5jIGNyZWF0ZVNpZ25lZFVybChwYXRoLCBleHBpcmVzSW4sIG9wdGlvbnMpIHtcblx0XHR2YXIgX3RoaXM4ID0gdGhpcztcblx0XHRyZXR1cm4gX3RoaXM4LmhhbmRsZU9wZXJhdGlvbihhc3luYyAoKSA9PiB7XG5cdFx0XHRsZXQgX3BhdGggPSBfdGhpczguX2dldEZpbmFsUGF0aChwYXRoKTtcblx0XHRcdGNvbnN0IGhhc1RyYW5zZm9ybSA9IHR5cGVvZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnRyYW5zZm9ybSkgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy50cmFuc2Zvcm0gIT09IG51bGwgJiYgT2JqZWN0LmtleXMob3B0aW9ucy50cmFuc2Zvcm0pLmxlbmd0aCA+IDA7XG5cdFx0XHRsZXQgZGF0YSA9IGF3YWl0IHBvc3QoX3RoaXM4LmZldGNoLCBgJHtfdGhpczgudXJsfS9vYmplY3Qvc2lnbi8ke19wYXRofWAsIF9vYmplY3RTcHJlYWQyKHsgZXhwaXJlc0luIH0sIGhhc1RyYW5zZm9ybSA/IHsgdHJhbnNmb3JtOiBvcHRpb25zLnRyYW5zZm9ybSB9IDoge30pLCB7IGhlYWRlcnM6IF90aGlzOC5oZWFkZXJzIH0pO1xuXHRcdFx0Y29uc3QgcXVlcnkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cdFx0XHRpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmRvd25sb2FkKSBxdWVyeS5zZXQoXCJkb3dubG9hZFwiLCBvcHRpb25zLmRvd25sb2FkID09PSB0cnVlID8gXCJcIiA6IG9wdGlvbnMuZG93bmxvYWQpO1xuXHRcdFx0aWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FjaGVOb25jZSkgIT0gbnVsbCkgcXVlcnkuc2V0KFwiY2FjaGVOb25jZVwiLCBTdHJpbmcob3B0aW9ucy5jYWNoZU5vbmNlKSk7XG5cdFx0XHRjb25zdCBxdWVyeVN0cmluZyA9IHF1ZXJ5LnRvU3RyaW5nKCk7XG5cdFx0XHRyZXR1cm4geyBzaWduZWRVcmw6IGVuY29kZVVSSShgJHtfdGhpczgudXJsfSR7ZGF0YS5zaWduZWRVUkx9JHtxdWVyeVN0cmluZyA/IGAmJHtxdWVyeVN0cmluZ31gIDogXCJcIn1gKSB9O1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQqIENyZWF0ZXMgbXVsdGlwbGUgc2lnbmVkIFVSTHMuIFVzZSBhIHNpZ25lZCBVUkwgdG8gc2hhcmUgYSBmaWxlIGZvciBhIGZpeGVkIGFtb3VudCBvZiB0aW1lLlxuXHQqXG5cdCogQGNhdGVnb3J5IFN0b3JhZ2Vcblx0KiBAc3ViY2F0ZWdvcnkgRmlsZSBCdWNrZXRzXG5cdCogQHBhcmFtIHBhdGhzIFRoZSBmaWxlIHBhdGhzIHRvIGJlIGRvd25sb2FkZWQsIGluY2x1ZGluZyB0aGUgY3VycmVudCBmaWxlIG5hbWVzLiBGb3IgZXhhbXBsZSBgWydmb2xkZXIvaW1hZ2UucG5nJywgJ2ZvbGRlcjIvaW1hZ2UyLnBuZyddYC5cblx0KiBAcGFyYW0gZXhwaXJlc0luIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyB1bnRpbCB0aGUgc2lnbmVkIFVSTHMgZXhwaXJlLiBGb3IgZXhhbXBsZSwgYDYwYCBmb3IgVVJMcyB3aGljaCBhcmUgdmFsaWQgZm9yIG9uZSBtaW51dGUuXG5cdCogQHBhcmFtIG9wdGlvbnMuZG93bmxvYWQgdHJpZ2dlcnMgdGhlIGZpbGUgYXMgYSBkb3dubG9hZCBpZiBzZXQgdG8gdHJ1ZS4gU2V0IHRoaXMgcGFyYW1ldGVyIGFzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGlmIHlvdSB3YW50IHRvIHRyaWdnZXIgdGhlIGRvd25sb2FkIHdpdGggYSBkaWZmZXJlbnQgZmlsZW5hbWUuXG5cdCogQHBhcmFtIG9wdGlvbnMuY2FjaGVOb25jZSBBcHBlbmQgYSBjYWNoZSBub25jZSBwYXJhbWV0ZXIgdG8gdGhlIFVSTCB0byBpbnZhbGlkYXRlIHRoZSBjYWNoZS5cblx0KiBAcmV0dXJucyBQcm9taXNlIHdpdGggcmVzcG9uc2UgY29udGFpbmluZyBhcnJheSBvZiBvYmplY3RzIHdpdGggc2lnbmVkVXJsLCBwYXRoLCBhbmQgZXJyb3Igb3IgZXJyb3Jcblx0KlxuXHQqIEBleGFtcGxlIENyZWF0ZSBTaWduZWQgVVJMc1xuXHQqIGBgYGpzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5zdG9yYWdlXG5cdCogICAuZnJvbSgnYXZhdGFycycpXG5cdCogICAuY3JlYXRlU2lnbmVkVXJscyhbJ2ZvbGRlci9hdmF0YXIxLnBuZycsICdmb2xkZXIvYXZhdGFyMi5wbmcnXSwgNjApXG5cdCogYGBgXG5cdCpcblx0KiBSZXNwb25zZTpcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFtcblx0KiAgICAge1xuXHQqICAgICAgIFwiZXJyb3JcIjogbnVsbCxcblx0KiAgICAgICBcInBhdGhcIjogXCJmb2xkZXIvYXZhdGFyMS5wbmdcIixcblx0KiAgICAgICBcInNpZ25lZFVSTFwiOiBcIi9vYmplY3Qvc2lnbi9hdmF0YXJzL2ZvbGRlci9hdmF0YXIxLnBuZz90b2tlbj08VE9LRU4+XCIsXG5cdCogICAgICAgXCJzaWduZWRVcmxcIjogXCJodHRwczovL2V4YW1wbGUuc3VwYWJhc2UuY28vc3RvcmFnZS92MS9vYmplY3Qvc2lnbi9hdmF0YXJzL2ZvbGRlci9hdmF0YXIxLnBuZz90b2tlbj08VE9LRU4+XCJcblx0KiAgICAgfSxcblx0KiAgICAge1xuXHQqICAgICAgIFwiZXJyb3JcIjogbnVsbCxcblx0KiAgICAgICBcInBhdGhcIjogXCJmb2xkZXIvYXZhdGFyMi5wbmdcIixcblx0KiAgICAgICBcInNpZ25lZFVSTFwiOiBcIi9vYmplY3Qvc2lnbi9hdmF0YXJzL2ZvbGRlci9hdmF0YXIyLnBuZz90b2tlbj08VE9LRU4+XCIsXG5cdCogICAgICAgXCJzaWduZWRVcmxcIjogXCJodHRwczovL2V4YW1wbGUuc3VwYWJhc2UuY28vc3RvcmFnZS92MS9vYmplY3Qvc2lnbi9hdmF0YXJzL2ZvbGRlci9hdmF0YXIyLnBuZz90b2tlbj08VE9LRU4+XCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwiZXJyb3JcIjogbnVsbFxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBSTFMgcG9saWN5IHBlcm1pc3Npb25zIHJlcXVpcmVkOlxuXHQqICAgLSBgYnVja2V0c2AgdGFibGUgcGVybWlzc2lvbnM6IG5vbmVcblx0KiAgIC0gYG9iamVjdHNgIHRhYmxlIHBlcm1pc3Npb25zOiBgc2VsZWN0YFxuXHQqIC0gUmVmZXIgdG8gdGhlIFtTdG9yYWdlIGd1aWRlXSgvZG9jcy9ndWlkZXMvc3RvcmFnZS9zZWN1cml0eS9hY2Nlc3MtY29udHJvbCkgb24gaG93IGFjY2VzcyBjb250cm9sIHdvcmtzXG5cdCovXG5cdGFzeW5jIGNyZWF0ZVNpZ25lZFVybHMocGF0aHMsIGV4cGlyZXNJbiwgb3B0aW9ucykge1xuXHRcdHZhciBfdGhpczkgPSB0aGlzO1xuXHRcdHJldHVybiBfdGhpczkuaGFuZGxlT3BlcmF0aW9uKGFzeW5jICgpID0+IHtcblx0XHRcdGNvbnN0IGRhdGEgPSBhd2FpdCBwb3N0KF90aGlzOS5mZXRjaCwgYCR7X3RoaXM5LnVybH0vb2JqZWN0L3NpZ24vJHtfdGhpczkuYnVja2V0SWR9YCwge1xuXHRcdFx0XHRleHBpcmVzSW4sXG5cdFx0XHRcdHBhdGhzXG5cdFx0XHR9LCB7IGhlYWRlcnM6IF90aGlzOS5oZWFkZXJzIH0pO1xuXHRcdFx0Y29uc3QgcXVlcnkgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG5cdFx0XHRpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmRvd25sb2FkKSBxdWVyeS5zZXQoXCJkb3dubG9hZFwiLCBvcHRpb25zLmRvd25sb2FkID09PSB0cnVlID8gXCJcIiA6IG9wdGlvbnMuZG93bmxvYWQpO1xuXHRcdFx0aWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FjaGVOb25jZSkgIT0gbnVsbCkgcXVlcnkuc2V0KFwiY2FjaGVOb25jZVwiLCBTdHJpbmcob3B0aW9ucy5jYWNoZU5vbmNlKSk7XG5cdFx0XHRjb25zdCBxdWVyeVN0cmluZyA9IHF1ZXJ5LnRvU3RyaW5nKCk7XG5cdFx0XHRyZXR1cm4gZGF0YS5tYXAoKGRhdHVtKSA9PiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgZGF0dW0pLCB7fSwgeyBzaWduZWRVcmw6IGRhdHVtLnNpZ25lZFVSTCA/IGVuY29kZVVSSShgJHtfdGhpczkudXJsfSR7ZGF0dW0uc2lnbmVkVVJMfSR7cXVlcnlTdHJpbmcgPyBgJiR7cXVlcnlTdHJpbmd9YCA6IFwiXCJ9YCkgOiBudWxsIH0pKTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0KiBEb3dubG9hZHMgYSBmaWxlIGZyb20gYSBwcml2YXRlIGJ1Y2tldC4gRm9yIHB1YmxpYyBidWNrZXRzLCBtYWtlIGEgcmVxdWVzdCB0byB0aGUgVVJMIHJldHVybmVkIGZyb20gYGdldFB1YmxpY1VybGAgaW5zdGVhZC5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IEZpbGUgQnVja2V0c1xuXHQqIEBwYXJhbSBwYXRoIFRoZSBmdWxsIHBhdGggYW5kIGZpbGUgbmFtZSBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkLiBGb3IgZXhhbXBsZSBgZm9sZGVyL2ltYWdlLnBuZ2AuXG5cdCogQHBhcmFtIG9wdGlvbnMudHJhbnNmb3JtIFRyYW5zZm9ybSB0aGUgYXNzZXQgYmVmb3JlIHNlcnZpbmcgaXQgdG8gdGhlIGNsaWVudC5cblx0KiBAcGFyYW0gb3B0aW9ucy5jYWNoZU5vbmNlIEFwcGVuZCBhIGNhY2hlIG5vbmNlIHBhcmFtZXRlciB0byB0aGUgVVJMIHRvIGludmFsaWRhdGUgdGhlIGNhY2hlLlxuXHQqIEBwYXJhbSBwYXJhbWV0ZXJzIEFkZGl0aW9uYWwgZmV0Y2ggcGFyYW1ldGVycyBsaWtlIHNpZ25hbCBmb3IgY2FuY2VsbGF0aW9uLiBTdXBwb3J0cyBzdGFuZGFyZCBmZXRjaCBvcHRpb25zIGluY2x1ZGluZyBjYWNoZSBjb250cm9sLlxuXHQqIEByZXR1cm5zIEJsb2JEb3dubG9hZEJ1aWxkZXIgaW5zdGFuY2UgZm9yIGRvd25sb2FkaW5nIHRoZSBmaWxlXG5cdCpcblx0KiBAZXhhbXBsZSBEb3dubG9hZCBmaWxlXG5cdCogYGBganNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC5mcm9tKCdhdmF0YXJzJylcblx0KiAgIC5kb3dubG9hZCgnZm9sZGVyL2F2YXRhcjEucG5nJylcblx0KiBgYGBcblx0KlxuXHQqIFJlc3BvbnNlOlxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogPEJMT0I+LFxuXHQqICAgXCJlcnJvclwiOiBudWxsXG5cdCogfVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgRG93bmxvYWQgZmlsZSB3aXRoIHRyYW5zZm9ybWF0aW9uc1xuXHQqIGBgYGpzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5zdG9yYWdlXG5cdCogICAuZnJvbSgnYXZhdGFycycpXG5cdCogICAuZG93bmxvYWQoJ2ZvbGRlci9hdmF0YXIxLnBuZycsIHtcblx0KiAgICAgdHJhbnNmb3JtOiB7XG5cdCogICAgICAgd2lkdGg6IDEwMCxcblx0KiAgICAgICBoZWlnaHQ6IDEwMCxcblx0KiAgICAgICBxdWFsaXR5OiA4MFxuXHQqICAgICB9XG5cdCogICB9KVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgRG93bmxvYWQgd2l0aCBjYWNoZSBjb250cm9sICh1c2VmdWwgaW4gRWRnZSBGdW5jdGlvbnMpXG5cdCogYGBganNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC5mcm9tKCdhdmF0YXJzJylcblx0KiAgIC5kb3dubG9hZCgnZm9sZGVyL2F2YXRhcjEucG5nJywge30sIHsgY2FjaGU6ICduby1zdG9yZScgfSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIERvd25sb2FkIHdpdGggYWJvcnQgc2lnbmFsXG5cdCogYGBganNcblx0KiBjb25zdCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG5cdCogc2V0VGltZW91dCgoKSA9PiBjb250cm9sbGVyLmFib3J0KCksIDUwMDApXG5cdCpcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC5mcm9tKCdhdmF0YXJzJylcblx0KiAgIC5kb3dubG9hZCgnZm9sZGVyL2F2YXRhcjEucG5nJywge30sIHsgc2lnbmFsOiBjb250cm9sbGVyLnNpZ25hbCB9KVxuXHQqIGBgYFxuXHQqXG5cdCogQHJlbWFya3Ncblx0KiAtIFJMUyBwb2xpY3kgcGVybWlzc2lvbnMgcmVxdWlyZWQ6XG5cdCogICAtIGBidWNrZXRzYCB0YWJsZSBwZXJtaXNzaW9uczogbm9uZVxuXHQqICAgLSBgb2JqZWN0c2AgdGFibGUgcGVybWlzc2lvbnM6IGBzZWxlY3RgXG5cdCogLSBSZWZlciB0byB0aGUgW1N0b3JhZ2UgZ3VpZGVdKC9kb2NzL2d1aWRlcy9zdG9yYWdlL3NlY3VyaXR5L2FjY2Vzcy1jb250cm9sKSBvbiBob3cgYWNjZXNzIGNvbnRyb2wgd29ya3Ncblx0Ki9cblx0ZG93bmxvYWQocGF0aCwgb3B0aW9ucywgcGFyYW1ldGVycykge1xuXHRcdGNvbnN0IHJlbmRlclBhdGggPSB0eXBlb2YgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50cmFuc2Zvcm0pID09PSBcIm9iamVjdFwiICYmIG9wdGlvbnMudHJhbnNmb3JtICE9PSBudWxsICYmIE9iamVjdC5rZXlzKG9wdGlvbnMudHJhbnNmb3JtKS5sZW5ndGggPiAwID8gXCJyZW5kZXIvaW1hZ2UvYXV0aGVudGljYXRlZFwiIDogXCJvYmplY3RcIjtcblx0XHRjb25zdCBxdWVyeSA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcblx0XHRpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnRyYW5zZm9ybSkgdGhpcy5hcHBseVRyYW5zZm9ybU9wdHNUb1F1ZXJ5KHF1ZXJ5LCBvcHRpb25zLnRyYW5zZm9ybSk7XG5cdFx0aWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuY2FjaGVOb25jZSkgIT0gbnVsbCkgcXVlcnkuc2V0KFwiY2FjaGVOb25jZVwiLCBTdHJpbmcob3B0aW9ucy5jYWNoZU5vbmNlKSk7XG5cdFx0Y29uc3QgcXVlcnlTdHJpbmcgPSBxdWVyeS50b1N0cmluZygpO1xuXHRcdGNvbnN0IF9wYXRoID0gdGhpcy5fZ2V0RmluYWxQYXRoKHBhdGgpO1xuXHRcdGNvbnN0IGRvd25sb2FkRm4gPSAoKSA9PiBnZXQodGhpcy5mZXRjaCwgYCR7dGhpcy51cmx9LyR7cmVuZGVyUGF0aH0vJHtfcGF0aH0ke3F1ZXJ5U3RyaW5nID8gYD8ke3F1ZXJ5U3RyaW5nfWAgOiBcIlwifWAsIHtcblx0XHRcdGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcblx0XHRcdG5vUmVzb2x2ZUpzb246IHRydWVcblx0XHR9LCBwYXJhbWV0ZXJzKTtcblx0XHRyZXR1cm4gbmV3IEJsb2JEb3dubG9hZEJ1aWxkZXIoZG93bmxvYWRGbiwgdGhpcy5zaG91bGRUaHJvd09uRXJyb3IpO1xuXHR9XG5cdC8qKlxuXHQqIFJldHJpZXZlcyB0aGUgZGV0YWlscyBvZiBhbiBleGlzdGluZyBmaWxlLlxuXHQqXG5cdCogUmV0dXJucyBkZXRhaWxlZCBmaWxlIG1ldGFkYXRhIGluY2x1ZGluZyBzaXplLCBjb250ZW50IHR5cGUsIGFuZCB0aW1lc3RhbXBzLlxuXHQqIE5vdGU6IFRoZSBBUEkgcmV0dXJucyBgbGFzdF9tb2RpZmllZGAgZmllbGQsIG5vdCBgdXBkYXRlZF9hdGAuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBGaWxlIEJ1Y2tldHNcblx0KiBAcGFyYW0gcGF0aCBUaGUgZmlsZSBwYXRoLCBpbmNsdWRpbmcgdGhlIGZpbGUgbmFtZS4gRm9yIGV4YW1wbGUgYGZvbGRlci9pbWFnZS5wbmdgLlxuXHQqIEByZXR1cm5zIFByb21pc2Ugd2l0aCByZXNwb25zZSBjb250YWluaW5nIGZpbGUgbWV0YWRhdGEgb3IgZXJyb3Jcblx0KlxuXHQqIEBleGFtcGxlIEdldCBmaWxlIGluZm9cblx0KiBgYGBqc1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuc3RvcmFnZVxuXHQqICAgLmZyb20oJ2F2YXRhcnMnKVxuXHQqICAgLmluZm8oJ2ZvbGRlci9hdmF0YXIxLnBuZycpXG5cdCpcblx0KiBpZiAoZGF0YSkge1xuXHQqICAgY29uc29sZS5sb2coJ0xhc3QgbW9kaWZpZWQ6JywgZGF0YS5sYXN0TW9kaWZpZWQpXG5cdCogICBjb25zb2xlLmxvZygnU2l6ZTonLCBkYXRhLnNpemUpXG5cdCogfVxuXHQqIGBgYFxuXHQqL1xuXHRhc3luYyBpbmZvKHBhdGgpIHtcblx0XHR2YXIgX3RoaXMxMCA9IHRoaXM7XG5cdFx0Y29uc3QgX3BhdGggPSBfdGhpczEwLl9nZXRGaW5hbFBhdGgocGF0aCk7XG5cdFx0cmV0dXJuIF90aGlzMTAuaGFuZGxlT3BlcmF0aW9uKGFzeW5jICgpID0+IHtcblx0XHRcdHJldHVybiByZWN1cnNpdmVUb0NhbWVsKGF3YWl0IGdldChfdGhpczEwLmZldGNoLCBgJHtfdGhpczEwLnVybH0vb2JqZWN0L2luZm8vJHtfcGF0aH1gLCB7IGhlYWRlcnM6IF90aGlzMTAuaGVhZGVycyB9KSk7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCogQ2hlY2tzIHRoZSBleGlzdGVuY2Ugb2YgYSBmaWxlLlxuXHQqXG5cdCogQGNhdGVnb3J5IFN0b3JhZ2Vcblx0KiBAc3ViY2F0ZWdvcnkgRmlsZSBCdWNrZXRzXG5cdCogQHBhcmFtIHBhdGggVGhlIGZpbGUgcGF0aCwgaW5jbHVkaW5nIHRoZSBmaWxlIG5hbWUuIEZvciBleGFtcGxlIGBmb2xkZXIvaW1hZ2UucG5nYC5cblx0KiBAcmV0dXJucyBQcm9taXNlIHdpdGggcmVzcG9uc2UgY29udGFpbmluZyBib29sZWFuIGluZGljYXRpbmcgZmlsZSBleGlzdGVuY2Ugb3IgZXJyb3Jcblx0KlxuXHQqIEBleGFtcGxlIENoZWNrIGZpbGUgZXhpc3RlbmNlXG5cdCogYGBganNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC5mcm9tKCdhdmF0YXJzJylcblx0KiAgIC5leGlzdHMoJ2ZvbGRlci9hdmF0YXIxLnBuZycpXG5cdCogYGBgXG5cdCovXG5cdGFzeW5jIGV4aXN0cyhwYXRoKSB7XG5cdFx0dmFyIF90aGlzMTEgPSB0aGlzO1xuXHRcdGNvbnN0IF9wYXRoID0gX3RoaXMxMS5fZ2V0RmluYWxQYXRoKHBhdGgpO1xuXHRcdHRyeSB7XG5cdFx0XHRhd2FpdCBoZWFkKF90aGlzMTEuZmV0Y2gsIGAke190aGlzMTEudXJsfS9vYmplY3QvJHtfcGF0aH1gLCB7IGhlYWRlcnM6IF90aGlzMTEuaGVhZGVycyB9KTtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGRhdGE6IHRydWUsXG5cdFx0XHRcdGVycm9yOiBudWxsXG5cdFx0XHR9O1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRpZiAoX3RoaXMxMS5zaG91bGRUaHJvd09uRXJyb3IpIHRocm93IGVycm9yO1xuXHRcdFx0aWYgKGlzU3RvcmFnZUVycm9yKGVycm9yKSkge1xuXHRcdFx0XHR2YXIgX2Vycm9yJG9yaWdpbmFsRXJyb3I7XG5cdFx0XHRcdGNvbnN0IHN0YXR1cyA9IGVycm9yIGluc3RhbmNlb2YgU3RvcmFnZUFwaUVycm9yID8gZXJyb3Iuc3RhdHVzIDogZXJyb3IgaW5zdGFuY2VvZiBTdG9yYWdlVW5rbm93bkVycm9yID8gKF9lcnJvciRvcmlnaW5hbEVycm9yID0gZXJyb3Iub3JpZ2luYWxFcnJvcikgPT09IG51bGwgfHwgX2Vycm9yJG9yaWdpbmFsRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lcnJvciRvcmlnaW5hbEVycm9yLnN0YXR1cyA6IHZvaWQgMDtcblx0XHRcdFx0aWYgKHN0YXR1cyAhPT0gdm9pZCAwICYmIFs0MDAsIDQwNF0uaW5jbHVkZXMoc3RhdHVzKSkgcmV0dXJuIHtcblx0XHRcdFx0XHRkYXRhOiBmYWxzZSxcblx0XHRcdFx0XHRlcnJvclxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fVxuXHR9XG5cdC8qKlxuXHQqIEEgc2ltcGxlIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGdldCB0aGUgVVJMIGZvciBhbiBhc3NldCBpbiBhIHB1YmxpYyBidWNrZXQuIElmIHlvdSBkbyBub3Qgd2FudCB0byB1c2UgdGhpcyBmdW5jdGlvbiwgeW91IGNhbiBjb25zdHJ1Y3QgdGhlIHB1YmxpYyBVUkwgYnkgY29uY2F0ZW5hdGluZyB0aGUgYnVja2V0IFVSTCB3aXRoIHRoZSBwYXRoIHRvIHRoZSBhc3NldC5cblx0KiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHZlcmlmeSBpZiB0aGUgYnVja2V0IGlzIHB1YmxpYy4gSWYgYSBwdWJsaWMgVVJMIGlzIGNyZWF0ZWQgZm9yIGEgYnVja2V0IHdoaWNoIGlzIG5vdCBwdWJsaWMsIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIGRvd25sb2FkIHRoZSBhc3NldC5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IEZpbGUgQnVja2V0c1xuXHQqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIGFuZCBuYW1lIG9mIHRoZSBmaWxlIHRvIGdlbmVyYXRlIHRoZSBwdWJsaWMgVVJMIGZvci4gRm9yIGV4YW1wbGUgYGZvbGRlci9pbWFnZS5wbmdgLlxuXHQqIEBwYXJhbSBvcHRpb25zLmRvd25sb2FkIFRyaWdnZXJzIHRoZSBmaWxlIGFzIGEgZG93bmxvYWQgaWYgc2V0IHRvIHRydWUuIFNldCB0aGlzIHBhcmFtZXRlciBhcyB0aGUgbmFtZSBvZiB0aGUgZmlsZSBpZiB5b3Ugd2FudCB0byB0cmlnZ2VyIHRoZSBkb3dubG9hZCB3aXRoIGEgZGlmZmVyZW50IGZpbGVuYW1lLlxuXHQqIEBwYXJhbSBvcHRpb25zLnRyYW5zZm9ybSBUcmFuc2Zvcm0gdGhlIGFzc2V0IGJlZm9yZSBzZXJ2aW5nIGl0IHRvIHRoZSBjbGllbnQuXG5cdCogQHBhcmFtIG9wdGlvbnMuY2FjaGVOb25jZSBBcHBlbmQgYSBjYWNoZSBub25jZSBwYXJhbWV0ZXIgdG8gdGhlIFVSTCB0byBpbnZhbGlkYXRlIHRoZSBjYWNoZS5cblx0KiBAcmV0dXJucyBPYmplY3Qgd2l0aCBwdWJsaWMgVVJMXG5cdCpcblx0KiBAZXhhbXBsZSBSZXR1cm5zIHRoZSBVUkwgZm9yIGFuIGFzc2V0IGluIGEgcHVibGljIGJ1Y2tldFxuXHQqIGBgYGpzXG5cdCogY29uc3QgeyBkYXRhIH0gPSBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC5mcm9tKCdwdWJsaWMtYnVja2V0Jylcblx0KiAgIC5nZXRQdWJsaWNVcmwoJ2ZvbGRlci9hdmF0YXIxLnBuZycpXG5cdCogYGBgXG5cdCpcblx0KiBSZXNwb25zZTpcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IHtcblx0KiAgICAgXCJwdWJsaWNVcmxcIjogXCJodHRwczovL2V4YW1wbGUuc3VwYWJhc2UuY28vc3RvcmFnZS92MS9vYmplY3QvcHVibGljL3B1YmxpYy1idWNrZXQvZm9sZGVyL2F2YXRhcjEucG5nXCJcblx0KiAgIH1cblx0KiB9XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZSBSZXR1cm5zIHRoZSBVUkwgZm9yIGFuIGFzc2V0IGluIGEgcHVibGljIGJ1Y2tldCB3aXRoIHRyYW5zZm9ybWF0aW9uc1xuXHQqIGBgYGpzXG5cdCogY29uc3QgeyBkYXRhIH0gPSBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC5mcm9tKCdwdWJsaWMtYnVja2V0Jylcblx0KiAgIC5nZXRQdWJsaWNVcmwoJ2ZvbGRlci9hdmF0YXIxLnBuZycsIHtcblx0KiAgICAgdHJhbnNmb3JtOiB7XG5cdCogICAgICAgd2lkdGg6IDEwMCxcblx0KiAgICAgICBoZWlnaHQ6IDEwMCxcblx0KiAgICAgfVxuXHQqICAgfSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIFJldHVybnMgdGhlIFVSTCB3aGljaCB0cmlnZ2VycyB0aGUgZG93bmxvYWQgb2YgYW4gYXNzZXQgaW4gYSBwdWJsaWMgYnVja2V0XG5cdCogYGBganNcblx0KiBjb25zdCB7IGRhdGEgfSA9IHN1cGFiYXNlXG5cdCogICAuc3RvcmFnZVxuXHQqICAgLmZyb20oJ3B1YmxpYy1idWNrZXQnKVxuXHQqICAgLmdldFB1YmxpY1VybCgnZm9sZGVyL2F2YXRhcjEucG5nJywge1xuXHQqICAgICBkb3dubG9hZDogdHJ1ZSxcblx0KiAgIH0pXG5cdCogYGBgXG5cdCpcblx0KiBAcmVtYXJrc1xuXHQqIC0gVGhlIGJ1Y2tldCBuZWVkcyB0byBiZSBzZXQgdG8gcHVibGljLCBlaXRoZXIgdmlhIFt1cGRhdGVCdWNrZXQoKV0oL2RvY3MvcmVmZXJlbmNlL2phdmFzY3JpcHQvc3RvcmFnZS11cGRhdGVidWNrZXQpIG9yIGJ5IGdvaW5nIHRvIFN0b3JhZ2Ugb24gW3N1cGFiYXNlLmNvbS9kYXNoYm9hcmRdKGh0dHBzOi8vc3VwYWJhc2UuY29tL2Rhc2hib2FyZCksIGNsaWNraW5nIHRoZSBvdmVyZmxvdyBtZW51IG9uIGEgYnVja2V0IGFuZCBjaG9vc2luZyBcIk1ha2UgcHVibGljXCJcblx0KiAtIFJMUyBwb2xpY3kgcGVybWlzc2lvbnMgcmVxdWlyZWQ6XG5cdCogICAtIGBidWNrZXRzYCB0YWJsZSBwZXJtaXNzaW9uczogbm9uZVxuXHQqICAgLSBgb2JqZWN0c2AgdGFibGUgcGVybWlzc2lvbnM6IG5vbmVcblx0KiAtIFJlZmVyIHRvIHRoZSBbU3RvcmFnZSBndWlkZV0oL2RvY3MvZ3VpZGVzL3N0b3JhZ2Uvc2VjdXJpdHkvYWNjZXNzLWNvbnRyb2wpIG9uIGhvdyBhY2Nlc3MgY29udHJvbCB3b3Jrc1xuXHQqL1xuXHRnZXRQdWJsaWNVcmwocGF0aCwgb3B0aW9ucykge1xuXHRcdGNvbnN0IF9wYXRoID0gdGhpcy5fZ2V0RmluYWxQYXRoKHBhdGgpO1xuXHRcdGNvbnN0IHF1ZXJ5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXHRcdGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuZG93bmxvYWQpIHF1ZXJ5LnNldChcImRvd25sb2FkXCIsIG9wdGlvbnMuZG93bmxvYWQgPT09IHRydWUgPyBcIlwiIDogb3B0aW9ucy5kb3dubG9hZCk7XG5cdFx0aWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy50cmFuc2Zvcm0pIHRoaXMuYXBwbHlUcmFuc2Zvcm1PcHRzVG9RdWVyeShxdWVyeSwgb3B0aW9ucy50cmFuc2Zvcm0pO1xuXHRcdGlmICgob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmNhY2hlTm9uY2UpICE9IG51bGwpIHF1ZXJ5LnNldChcImNhY2hlTm9uY2VcIiwgU3RyaW5nKG9wdGlvbnMuY2FjaGVOb25jZSkpO1xuXHRcdGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnkudG9TdHJpbmcoKTtcblx0XHRjb25zdCByZW5kZXJQYXRoID0gdHlwZW9mIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMudHJhbnNmb3JtKSA9PT0gXCJvYmplY3RcIiAmJiBvcHRpb25zLnRyYW5zZm9ybSAhPT0gbnVsbCAmJiBPYmplY3Qua2V5cyhvcHRpb25zLnRyYW5zZm9ybSkubGVuZ3RoID4gMCA/IFwicmVuZGVyL2ltYWdlXCIgOiBcIm9iamVjdFwiO1xuXHRcdHJldHVybiB7IGRhdGE6IHsgcHVibGljVXJsOiBlbmNvZGVVUkkoYCR7dGhpcy51cmx9LyR7cmVuZGVyUGF0aH0vcHVibGljLyR7X3BhdGh9YCkgKyAocXVlcnlTdHJpbmcgPyBgPyR7cXVlcnlTdHJpbmd9YCA6IFwiXCIpIH0gfTtcblx0fVxuXHQvKipcblx0KiBEZWxldGVzIGZpbGVzIHdpdGhpbiB0aGUgc2FtZSBidWNrZXRcblx0KlxuXHQqIFJldHVybnMgYW4gYXJyYXkgb2YgRmlsZU9iamVjdCBlbnRyaWVzIGZvciB0aGUgZGVsZXRlZCBmaWxlcy4gTm90ZSB0aGF0IGRlcHJlY2F0ZWRcblx0KiBmaWVsZHMgbGlrZSBgYnVja2V0X2lkYCBtYXkgb3IgbWF5IG5vdCBiZSBwcmVzZW50IGluIHRoZSByZXNwb25zZSAtIGRvIG5vdCByZWx5IG9uIHRoZW0uXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBGaWxlIEJ1Y2tldHNcblx0KiBAcGFyYW0gcGF0aHMgQW4gYXJyYXkgb2YgZmlsZXMgdG8gZGVsZXRlLCBpbmNsdWRpbmcgdGhlIHBhdGggYW5kIGZpbGUgbmFtZS4gRm9yIGV4YW1wbGUgW2AnZm9sZGVyL2ltYWdlLnBuZydgXS5cblx0KiBAcmV0dXJucyBQcm9taXNlIHdpdGggcmVzcG9uc2UgY29udGFpbmluZyBhcnJheSBvZiBkZWxldGVkIGZpbGUgb2JqZWN0cyBvciBlcnJvclxuXHQqXG5cdCogQGV4YW1wbGUgRGVsZXRlIGZpbGVcblx0KiBgYGBqc1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuc3RvcmFnZVxuXHQqICAgLmZyb20oJ2F2YXRhcnMnKVxuXHQqICAgLnJlbW92ZShbJ2ZvbGRlci9hdmF0YXIxLnBuZyddKVxuXHQqIGBgYFxuXHQqXG5cdCogUmVzcG9uc2U6XG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiBbXSxcblx0KiAgIFwiZXJyb3JcIjogbnVsbFxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBSTFMgcG9saWN5IHBlcm1pc3Npb25zIHJlcXVpcmVkOlxuXHQqICAgLSBgYnVja2V0c2AgdGFibGUgcGVybWlzc2lvbnM6IG5vbmVcblx0KiAgIC0gYG9iamVjdHNgIHRhYmxlIHBlcm1pc3Npb25zOiBgZGVsZXRlYCBhbmQgYHNlbGVjdGBcblx0KiAtIFJlZmVyIHRvIHRoZSBbU3RvcmFnZSBndWlkZV0oL2RvY3MvZ3VpZGVzL3N0b3JhZ2Uvc2VjdXJpdHkvYWNjZXNzLWNvbnRyb2wpIG9uIGhvdyBhY2Nlc3MgY29udHJvbCB3b3Jrc1xuXHQqL1xuXHRhc3luYyByZW1vdmUocGF0aHMpIHtcblx0XHR2YXIgX3RoaXMxMiA9IHRoaXM7XG5cdFx0cmV0dXJuIF90aGlzMTIuaGFuZGxlT3BlcmF0aW9uKGFzeW5jICgpID0+IHtcblx0XHRcdHJldHVybiBhd2FpdCByZW1vdmUoX3RoaXMxMi5mZXRjaCwgYCR7X3RoaXMxMi51cmx9L29iamVjdC8ke190aGlzMTIuYnVja2V0SWR9YCwgeyBwcmVmaXhlczogcGF0aHMgfSwgeyBoZWFkZXJzOiBfdGhpczEyLmhlYWRlcnMgfSk7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCogR2V0IGZpbGUgbWV0YWRhdGFcblx0KiBAcGFyYW0gaWQgdGhlIGZpbGUgaWQgdG8gcmV0cmlldmUgbWV0YWRhdGFcblx0Ki9cblx0LyoqXG5cdCogVXBkYXRlIGZpbGUgbWV0YWRhdGFcblx0KiBAcGFyYW0gaWQgdGhlIGZpbGUgaWQgdG8gdXBkYXRlIG1ldGFkYXRhXG5cdCogQHBhcmFtIG1ldGEgdGhlIG5ldyBmaWxlIG1ldGFkYXRhXG5cdCovXG5cdC8qKlxuXHQqIExpc3RzIGFsbCB0aGUgZmlsZXMgYW5kIGZvbGRlcnMgd2l0aGluIGEgcGF0aCBvZiB0aGUgYnVja2V0LlxuXHQqXG5cdCogKipJbXBvcnRhbnQ6KiogRm9yIGZvbGRlciBlbnRyaWVzLCBmaWVsZHMgbGlrZSBgaWRgLCBgdXBkYXRlZF9hdGAsIGBjcmVhdGVkX2F0YCxcblx0KiBgbGFzdF9hY2Nlc3NlZF9hdGAsIGFuZCBgbWV0YWRhdGFgIHdpbGwgYmUgYG51bGxgLiBPbmx5IGZpbGVzIGhhdmUgdGhlc2UgZmllbGRzIHBvcHVsYXRlZC5cblx0KiBBZGRpdGlvbmFsbHksIGRlcHJlY2F0ZWQgZmllbGRzIGxpa2UgYGJ1Y2tldF9pZGAsIGBvd25lcmAsIGFuZCBgYnVja2V0c2AgYXJlIE5PVCByZXR1cm5lZFxuXHQqIGJ5IHRoaXMgbWV0aG9kLlxuXHQqXG5cdCogQGNhdGVnb3J5IFN0b3JhZ2Vcblx0KiBAc3ViY2F0ZWdvcnkgRmlsZSBCdWNrZXRzXG5cdCogQHBhcmFtIHBhdGggVGhlIGZvbGRlciBwYXRoLlxuXHQqIEBwYXJhbSBvcHRpb25zIFNlYXJjaCBvcHRpb25zIGluY2x1ZGluZyBsaW1pdCAoZGVmYXVsdHMgdG8gMTAwKSwgb2Zmc2V0LCBzb3J0QnksIGFuZCBzZWFyY2hcblx0KiBAcGFyYW0gcGFyYW1ldGVycyBPcHRpb25hbCBmZXRjaCBwYXJhbWV0ZXJzIGluY2x1ZGluZyBzaWduYWwgZm9yIGNhbmNlbGxhdGlvblxuXHQqIEByZXR1cm5zIFByb21pc2Ugd2l0aCByZXNwb25zZSBjb250YWluaW5nIGFycmF5IG9mIGZpbGVzL2ZvbGRlcnMgb3IgZXJyb3Jcblx0KlxuXHQqIEBleGFtcGxlIExpc3QgZmlsZXMgaW4gYSBidWNrZXRcblx0KiBgYGBqc1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuc3RvcmFnZVxuXHQqICAgLmZyb20oJ2F2YXRhcnMnKVxuXHQqICAgLmxpc3QoJ2ZvbGRlcicsIHtcblx0KiAgICAgbGltaXQ6IDEwMCxcblx0KiAgICAgb2Zmc2V0OiAwLFxuXHQqICAgICBzb3J0Qnk6IHsgY29sdW1uOiAnbmFtZScsIG9yZGVyOiAnYXNjJyB9LFxuXHQqICAgfSlcblx0KlxuXHQqIC8vIEhhbmRsZSBmaWxlcyB2cyBmb2xkZXJzXG5cdCogZGF0YT8uZm9yRWFjaChpdGVtID0+IHtcblx0KiAgIGlmIChpdGVtLmlkICE9PSBudWxsKSB7XG5cdCogICAgIC8vIEl0J3MgYSBmaWxlXG5cdCogICAgIGNvbnNvbGUubG9nKCdGaWxlOicsIGl0ZW0ubmFtZSwgJ1NpemU6JywgaXRlbS5tZXRhZGF0YT8uc2l6ZSlcblx0KiAgIH0gZWxzZSB7XG5cdCogICAgIC8vIEl0J3MgYSBmb2xkZXJcblx0KiAgICAgY29uc29sZS5sb2coJ0ZvbGRlcjonLCBpdGVtLm5hbWUpXG5cdCogICB9XG5cdCogfSlcblx0KiBgYGBcblx0KlxuXHQqIFJlc3BvbnNlOlxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjogW1xuXHQqICAgICB7XG5cdCogICAgICAgXCJuYW1lXCI6IFwiYXZhdGFyMS5wbmdcIixcblx0KiAgICAgICBcImlkXCI6IFwiZTY2OGNmN2YtODIxYi00YTJmLTlkY2UtN2RmYTVkZDFjZmQyXCIsXG5cdCogICAgICAgXCJ1cGRhdGVkX2F0XCI6IFwiMjAyNC0wNS0yMlQyMzowNjowNS41ODBaXCIsXG5cdCogICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wNS0yMlQyMzowNDozNC40NDNaXCIsXG5cdCogICAgICAgXCJsYXN0X2FjY2Vzc2VkX2F0XCI6IFwiMjAyNC0wNS0yMlQyMzowNDozNC40NDNaXCIsXG5cdCogICAgICAgXCJtZXRhZGF0YVwiOiB7XG5cdCogICAgICAgICBcImVUYWdcIjogXCJcXFwiYzVlOGM1NTMyMzVkOWFmMzBlZjRmNmUyODA3OTBiOTJcXFwiXCIsXG5cdCogICAgICAgICBcInNpemVcIjogMzIxNzUsXG5cdCogICAgICAgICBcIm1pbWV0eXBlXCI6IFwiaW1hZ2UvcG5nXCIsXG5cdCogICAgICAgICBcImNhY2hlQ29udHJvbFwiOiBcIm1heC1hZ2U9MzYwMFwiLFxuXHQqICAgICAgICAgXCJsYXN0TW9kaWZpZWRcIjogXCIyMDI0LTA1LTIyVDIzOjA2OjA1LjU3NFpcIixcblx0KiAgICAgICAgIFwiY29udGVudExlbmd0aFwiOiAzMjE3NSxcblx0KiAgICAgICAgIFwiaHR0cFN0YXR1c0NvZGVcIjogMjAwXG5cdCogICAgICAgfVxuXHQqICAgICB9XG5cdCogICBdLFxuXHQqICAgXCJlcnJvclwiOiBudWxsXG5cdCogfVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgU2VhcmNoIGZpbGVzIGluIGEgYnVja2V0XG5cdCogYGBganNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC5mcm9tKCdhdmF0YXJzJylcblx0KiAgIC5saXN0KCdmb2xkZXInLCB7XG5cdCogICAgIGxpbWl0OiAxMDAsXG5cdCogICAgIG9mZnNldDogMCxcblx0KiAgICAgc29ydEJ5OiB7IGNvbHVtbjogJ25hbWUnLCBvcmRlcjogJ2FzYycgfSxcblx0KiAgICAgc2VhcmNoOiAnam9uJ1xuXHQqICAgfSlcblx0KiBgYGBcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBSTFMgcG9saWN5IHBlcm1pc3Npb25zIHJlcXVpcmVkOlxuXHQqICAgLSBgYnVja2V0c2AgdGFibGUgcGVybWlzc2lvbnM6IG5vbmVcblx0KiAgIC0gYG9iamVjdHNgIHRhYmxlIHBlcm1pc3Npb25zOiBgc2VsZWN0YFxuXHQqIC0gUmVmZXIgdG8gdGhlIFtTdG9yYWdlIGd1aWRlXSgvZG9jcy9ndWlkZXMvc3RvcmFnZS9zZWN1cml0eS9hY2Nlc3MtY29udHJvbCkgb24gaG93IGFjY2VzcyBjb250cm9sIHdvcmtzXG5cdCovXG5cdGFzeW5jIGxpc3QocGF0aCwgb3B0aW9ucywgcGFyYW1ldGVycykge1xuXHRcdHZhciBfdGhpczEzID0gdGhpcztcblx0XHRyZXR1cm4gX3RoaXMxMy5oYW5kbGVPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgYm9keSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBERUZBVUxUX1NFQVJDSF9PUFRJT05TKSwgb3B0aW9ucyksIHt9LCB7IHByZWZpeDogcGF0aCB8fCBcIlwiIH0pO1xuXHRcdFx0cmV0dXJuIGF3YWl0IHBvc3QoX3RoaXMxMy5mZXRjaCwgYCR7X3RoaXMxMy51cmx9L29iamVjdC9saXN0LyR7X3RoaXMxMy5idWNrZXRJZH1gLCBib2R5LCB7IGhlYWRlcnM6IF90aGlzMTMuaGVhZGVycyB9LCBwYXJhbWV0ZXJzKTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0KiBMaXN0cyBhbGwgdGhlIGZpbGVzIGFuZCBmb2xkZXJzIHdpdGhpbiBhIGJ1Y2tldCB1c2luZyB0aGUgVjIgQVBJIHdpdGggcGFnaW5hdGlvbiBzdXBwb3J0LlxuXHQqXG5cdCogKipJbXBvcnRhbnQ6KiogRm9sZGVyIGVudHJpZXMgaW4gdGhlIGBmb2xkZXJzYCBhcnJheSBvbmx5IGNvbnRhaW4gYG5hbWVgIGFuZCBvcHRpb25hbGx5IGBrZXlgIOKAlFxuXHQqIHRoZXkgaGF2ZSBubyBgaWRgLCB0aW1lc3RhbXBzLCBvciBgbWV0YWRhdGFgIGZpZWxkcy4gRnVsbCBmaWxlIG1ldGFkYXRhIGlzIG9ubHkgYXZhaWxhYmxlXG5cdCogb24gZW50cmllcyBpbiB0aGUgYG9iamVjdHNgIGFycmF5LlxuXHQqXG5cdCogQGV4cGVyaW1lbnRhbCB0aGlzIG1ldGhvZCBzaWduYXR1cmUgbWlnaHQgY2hhbmdlIGluIHRoZSBmdXR1cmVcblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IEZpbGUgQnVja2V0c1xuXHQqIEBwYXJhbSBvcHRpb25zIFNlYXJjaCBvcHRpb25zIGluY2x1ZGluZyBwcmVmaXgsIGN1cnNvciBmb3IgcGFnaW5hdGlvbiwgbGltaXQsIHdpdGhfZGVsaW1pdGVyXG5cdCogQHBhcmFtIHBhcmFtZXRlcnMgT3B0aW9uYWwgZmV0Y2ggcGFyYW1ldGVycyBpbmNsdWRpbmcgc2lnbmFsIGZvciBjYW5jZWxsYXRpb25cblx0KiBAcmV0dXJucyBQcm9taXNlIHdpdGggcmVzcG9uc2UgY29udGFpbmluZyBmb2xkZXJzL29iamVjdHMgYXJyYXlzIHdpdGggcGFnaW5hdGlvbiBpbmZvIG9yIGVycm9yXG5cdCpcblx0KiBAZXhhbXBsZSBMaXN0IGZpbGVzIHdpdGggcGFnaW5hdGlvblxuXHQqIGBgYGpzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5zdG9yYWdlXG5cdCogICAuZnJvbSgnYXZhdGFycycpXG5cdCogICAubGlzdFYyKHtcblx0KiAgICAgcHJlZml4OiAnZm9sZGVyLycsXG5cdCogICAgIGxpbWl0OiAxMDAsXG5cdCogICB9KVxuXHQqXG5cdCogLy8gSGFuZGxlIHBhZ2luYXRpb25cblx0KiBpZiAoZGF0YT8uaGFzTmV4dCkge1xuXHQqICAgY29uc3QgbmV4dFBhZ2UgPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgICAuc3RvcmFnZVxuXHQqICAgICAuZnJvbSgnYXZhdGFycycpXG5cdCogICAgIC5saXN0VjIoe1xuXHQqICAgICAgIHByZWZpeDogJ2ZvbGRlci8nLFxuXHQqICAgICAgIGN1cnNvcjogZGF0YS5uZXh0Q3Vyc29yLFxuXHQqICAgICB9KVxuXHQqIH1cblx0KlxuXHQqIC8vIEhhbmRsZSBmaWxlcyB2cyBmb2xkZXJzXG5cdCogZGF0YT8ub2JqZWN0cy5mb3JFYWNoKGZpbGUgPT4ge1xuXHQqICAgaWYgKGZpbGUuaWQgIT09IG51bGwpIHtcblx0KiAgICAgY29uc29sZS5sb2coJ0ZpbGU6JywgZmlsZS5uYW1lLCAnU2l6ZTonLCBmaWxlLm1ldGFkYXRhPy5zaXplKVxuXHQqICAgfVxuXHQqIH0pXG5cdCogZGF0YT8uZm9sZGVycy5mb3JFYWNoKGZvbGRlciA9PiB7XG5cdCogICBjb25zb2xlLmxvZygnRm9sZGVyOicsIGZvbGRlci5uYW1lKVxuXHQqIH0pXG5cdCogYGBgXG5cdCovXG5cdGFzeW5jIGxpc3RWMihvcHRpb25zLCBwYXJhbWV0ZXJzKSB7XG5cdFx0dmFyIF90aGlzMTQgPSB0aGlzO1xuXHRcdHJldHVybiBfdGhpczE0LmhhbmRsZU9wZXJhdGlvbihhc3luYyAoKSA9PiB7XG5cdFx0XHRjb25zdCBib2R5ID0gX29iamVjdFNwcmVhZDIoe30sIG9wdGlvbnMpO1xuXHRcdFx0cmV0dXJuIGF3YWl0IHBvc3QoX3RoaXMxNC5mZXRjaCwgYCR7X3RoaXMxNC51cmx9L29iamVjdC9saXN0LXYyLyR7X3RoaXMxNC5idWNrZXRJZH1gLCBib2R5LCB7IGhlYWRlcnM6IF90aGlzMTQuaGVhZGVycyB9LCBwYXJhbWV0ZXJzKTtcblx0XHR9KTtcblx0fVxuXHRlbmNvZGVNZXRhZGF0YShtZXRhZGF0YSkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShtZXRhZGF0YSk7XG5cdH1cblx0dG9CYXNlNjQoZGF0YSkge1xuXHRcdGlmICh0eXBlb2YgQnVmZmVyICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gQnVmZmVyLmZyb20oZGF0YSkudG9TdHJpbmcoXCJiYXNlNjRcIik7XG5cdFx0cmV0dXJuIGJ0b2EoZGF0YSk7XG5cdH1cblx0X2dldEZpbmFsUGF0aChwYXRoKSB7XG5cdFx0cmV0dXJuIGAke3RoaXMuYnVja2V0SWR9LyR7cGF0aC5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpfWA7XG5cdH1cblx0X3JlbW92ZUVtcHR5Rm9sZGVycyhwYXRoKSB7XG5cdFx0cmV0dXJuIHBhdGgucmVwbGFjZSgvXlxcL3xcXC8kL2csIFwiXCIpLnJlcGxhY2UoL1xcLysvZywgXCIvXCIpO1xuXHR9XG5cdC8qKiBNb2RpZmllcyB0aGUgYHF1ZXJ5YCwgYXBwZW5kaW5nIHZhbHVlcyB0aGUgZnJvbSBgdHJhbnNmb3JtYCAqL1xuXHRhcHBseVRyYW5zZm9ybU9wdHNUb1F1ZXJ5KHF1ZXJ5LCB0cmFuc2Zvcm0pIHtcblx0XHRpZiAodHJhbnNmb3JtLndpZHRoKSBxdWVyeS5zZXQoXCJ3aWR0aFwiLCB0cmFuc2Zvcm0ud2lkdGgudG9TdHJpbmcoKSk7XG5cdFx0aWYgKHRyYW5zZm9ybS5oZWlnaHQpIHF1ZXJ5LnNldChcImhlaWdodFwiLCB0cmFuc2Zvcm0uaGVpZ2h0LnRvU3RyaW5nKCkpO1xuXHRcdGlmICh0cmFuc2Zvcm0ucmVzaXplKSBxdWVyeS5zZXQoXCJyZXNpemVcIiwgdHJhbnNmb3JtLnJlc2l6ZSk7XG5cdFx0aWYgKHRyYW5zZm9ybS5mb3JtYXQpIHF1ZXJ5LnNldChcImZvcm1hdFwiLCB0cmFuc2Zvcm0uZm9ybWF0KTtcblx0XHRpZiAodHJhbnNmb3JtLnF1YWxpdHkpIHF1ZXJ5LnNldChcInF1YWxpdHlcIiwgdHJhbnNmb3JtLnF1YWxpdHkudG9TdHJpbmcoKSk7XG5cdFx0cmV0dXJuIHF1ZXJ5O1xuXHR9XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbGliL3ZlcnNpb24udHNcbmNvbnN0IHZlcnNpb24gPSBcIjIuMTA1LjNcIjtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL2xpYi9jb25zdGFudHMudHNcbmNvbnN0IERFRkFVTFRfSEVBREVSUyA9IHsgXCJYLUNsaWVudC1JbmZvXCI6IGBzdG9yYWdlLWpzLyR7dmVyc2lvbn1gIH07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9wYWNrYWdlcy9TdG9yYWdlQnVja2V0QXBpLnRzXG52YXIgU3RvcmFnZUJ1Y2tldEFwaSA9IGNsYXNzIGV4dGVuZHMgQmFzZUFwaUNsaWVudCB7XG5cdGNvbnN0cnVjdG9yKHVybCwgaGVhZGVycyA9IHt9LCBmZXRjaCQxLCBvcHRzKSB7XG5cdFx0Y29uc3QgYmFzZVVybCA9IG5ldyBVUkwodXJsKTtcblx0XHRpZiAob3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLnVzZU5ld0hvc3RuYW1lKSB7XG5cdFx0XHRpZiAoL3N1cGFiYXNlXFwuKGNvfGlufHJlZCkkLy50ZXN0KGJhc2VVcmwuaG9zdG5hbWUpICYmICFiYXNlVXJsLmhvc3RuYW1lLmluY2x1ZGVzKFwic3RvcmFnZS5zdXBhYmFzZS5cIikpIGJhc2VVcmwuaG9zdG5hbWUgPSBiYXNlVXJsLmhvc3RuYW1lLnJlcGxhY2UoXCJzdXBhYmFzZS5cIiwgXCJzdG9yYWdlLnN1cGFiYXNlLlwiKTtcblx0XHR9XG5cdFx0Y29uc3QgZmluYWxVcmwgPSBiYXNlVXJsLmhyZWYucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuXHRcdGNvbnN0IGZpbmFsSGVhZGVycyA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBERUZBVUxUX0hFQURFUlMpLCBoZWFkZXJzKTtcblx0XHRzdXBlcihmaW5hbFVybCwgZmluYWxIZWFkZXJzLCBmZXRjaCQxLCBcInN0b3JhZ2VcIik7XG5cdH1cblx0LyoqXG5cdCogUmV0cmlldmVzIHRoZSBkZXRhaWxzIG9mIGFsbCBTdG9yYWdlIGJ1Y2tldHMgd2l0aGluIGFuIGV4aXN0aW5nIHByb2plY3QuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBGaWxlIEJ1Y2tldHNcblx0KiBAcGFyYW0gb3B0aW9ucyBRdWVyeSBwYXJhbWV0ZXJzIGZvciBsaXN0aW5nIGJ1Y2tldHNcblx0KiBAcGFyYW0gb3B0aW9ucy5saW1pdCBNYXhpbXVtIG51bWJlciBvZiBidWNrZXRzIHRvIHJldHVyblxuXHQqIEBwYXJhbSBvcHRpb25zLm9mZnNldCBOdW1iZXIgb2YgYnVja2V0cyB0byBza2lwXG5cdCogQHBhcmFtIG9wdGlvbnMuc29ydENvbHVtbiBDb2x1bW4gdG8gc29ydCBieSAoJ2lkJywgJ25hbWUnLCAnY3JlYXRlZF9hdCcsICd1cGRhdGVkX2F0Jylcblx0KiBAcGFyYW0gb3B0aW9ucy5zb3J0T3JkZXIgU29ydCBvcmRlciAoJ2FzYycgb3IgJ2Rlc2MnKVxuXHQqIEBwYXJhbSBvcHRpb25zLnNlYXJjaCBTZWFyY2ggdGVybSB0byBmaWx0ZXIgYnVja2V0IG5hbWVzXG5cdCogQHJldHVybnMgUHJvbWlzZSB3aXRoIHJlc3BvbnNlIGNvbnRhaW5pbmcgYXJyYXkgb2YgYnVja2V0cyBvciBlcnJvclxuXHQqXG5cdCogQGV4YW1wbGUgTGlzdCBidWNrZXRzXG5cdCogYGBganNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC5saXN0QnVja2V0cygpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZSBMaXN0IGJ1Y2tldHMgd2l0aCBvcHRpb25zXG5cdCogYGBganNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC5saXN0QnVja2V0cyh7XG5cdCogICAgIGxpbWl0OiAxMCxcblx0KiAgICAgb2Zmc2V0OiAwLFxuXHQqICAgICBzb3J0Q29sdW1uOiAnY3JlYXRlZF9hdCcsXG5cdCogICAgIHNvcnRPcmRlcjogJ2Rlc2MnLFxuXHQqICAgICBzZWFyY2g6ICdwcm9kJ1xuXHQqICAgfSlcblx0KiBgYGBcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBSTFMgcG9saWN5IHBlcm1pc3Npb25zIHJlcXVpcmVkOlxuXHQqICAgLSBgYnVja2V0c2AgdGFibGUgcGVybWlzc2lvbnM6IGBzZWxlY3RgXG5cdCogICAtIGBvYmplY3RzYCB0YWJsZSBwZXJtaXNzaW9uczogbm9uZVxuXHQqIC0gUmVmZXIgdG8gdGhlIFtTdG9yYWdlIGd1aWRlXSgvZG9jcy9ndWlkZXMvc3RvcmFnZS9zZWN1cml0eS9hY2Nlc3MtY29udHJvbCkgb24gaG93IGFjY2VzcyBjb250cm9sIHdvcmtzXG5cdCovXG5cdGFzeW5jIGxpc3RCdWNrZXRzKG9wdGlvbnMpIHtcblx0XHR2YXIgX3RoaXMgPSB0aGlzO1xuXHRcdHJldHVybiBfdGhpcy5oYW5kbGVPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuXHRcdFx0Y29uc3QgcXVlcnlTdHJpbmcgPSBfdGhpcy5saXN0QnVja2V0T3B0aW9uc1RvUXVlcnlTdHJpbmcob3B0aW9ucyk7XG5cdFx0XHRyZXR1cm4gYXdhaXQgZ2V0KF90aGlzLmZldGNoLCBgJHtfdGhpcy51cmx9L2J1Y2tldCR7cXVlcnlTdHJpbmd9YCwgeyBoZWFkZXJzOiBfdGhpcy5oZWFkZXJzIH0pO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQqIFJldHJpZXZlcyB0aGUgZGV0YWlscyBvZiBhbiBleGlzdGluZyBTdG9yYWdlIGJ1Y2tldC5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IEZpbGUgQnVja2V0c1xuXHQqIEBwYXJhbSBpZCBUaGUgdW5pcXVlIGlkZW50aWZpZXIgb2YgdGhlIGJ1Y2tldCB5b3Ugd291bGQgbGlrZSB0byByZXRyaWV2ZS5cblx0KiBAcmV0dXJucyBQcm9taXNlIHdpdGggcmVzcG9uc2UgY29udGFpbmluZyBidWNrZXQgZGV0YWlscyBvciBlcnJvclxuXHQqXG5cdCogQGV4YW1wbGUgR2V0IGJ1Y2tldFxuXHQqIGBgYGpzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5zdG9yYWdlXG5cdCogICAuZ2V0QnVja2V0KCdhdmF0YXJzJylcblx0KiBgYGBcblx0KlxuXHQqIFJlc3BvbnNlOlxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjoge1xuXHQqICAgICBcImlkXCI6IFwiYXZhdGFyc1wiLFxuXHQqICAgICBcIm5hbWVcIjogXCJhdmF0YXJzXCIsXG5cdCogICAgIFwib3duZXJcIjogXCJcIixcblx0KiAgICAgXCJwdWJsaWNcIjogZmFsc2UsXG5cdCogICAgIFwiZmlsZV9zaXplX2xpbWl0XCI6IDEwMjQsXG5cdCogICAgIFwiYWxsb3dlZF9taW1lX3R5cGVzXCI6IFtcblx0KiAgICAgICBcImltYWdlL3BuZ1wiXG5cdCogICAgIF0sXG5cdCogICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDUtMjJUMjI6MjY6MDUuMTAwWlwiLFxuXHQqICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTA1LTIyVDIyOjI2OjA1LjEwMFpcIlxuXHQqICAgfSxcblx0KiAgIFwiZXJyb3JcIjogbnVsbFxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBSTFMgcG9saWN5IHBlcm1pc3Npb25zIHJlcXVpcmVkOlxuXHQqICAgLSBgYnVja2V0c2AgdGFibGUgcGVybWlzc2lvbnM6IGBzZWxlY3RgXG5cdCogICAtIGBvYmplY3RzYCB0YWJsZSBwZXJtaXNzaW9uczogbm9uZVxuXHQqIC0gUmVmZXIgdG8gdGhlIFtTdG9yYWdlIGd1aWRlXSgvZG9jcy9ndWlkZXMvc3RvcmFnZS9zZWN1cml0eS9hY2Nlc3MtY29udHJvbCkgb24gaG93IGFjY2VzcyBjb250cm9sIHdvcmtzXG5cdCovXG5cdGFzeW5jIGdldEJ1Y2tldChpZCkge1xuXHRcdHZhciBfdGhpczIgPSB0aGlzO1xuXHRcdHJldHVybiBfdGhpczIuaGFuZGxlT3BlcmF0aW9uKGFzeW5jICgpID0+IHtcblx0XHRcdHJldHVybiBhd2FpdCBnZXQoX3RoaXMyLmZldGNoLCBgJHtfdGhpczIudXJsfS9idWNrZXQvJHtpZH1gLCB7IGhlYWRlcnM6IF90aGlzMi5oZWFkZXJzIH0pO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQqIENyZWF0ZXMgYSBuZXcgU3RvcmFnZSBidWNrZXRcblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IEZpbGUgQnVja2V0c1xuXHQqIEBwYXJhbSBpZCBBIHVuaXF1ZSBpZGVudGlmaWVyIGZvciB0aGUgYnVja2V0IHlvdSBhcmUgY3JlYXRpbmcuXG5cdCogQHBhcmFtIG9wdGlvbnMucHVibGljIFRoZSB2aXNpYmlsaXR5IG9mIHRoZSBidWNrZXQuIFB1YmxpYyBidWNrZXRzIGRvbid0IHJlcXVpcmUgYW4gYXV0aG9yaXphdGlvbiB0b2tlbiB0byBkb3dubG9hZCBvYmplY3RzLCBidXQgc3RpbGwgcmVxdWlyZSBhIHZhbGlkIHRva2VuIGZvciBhbGwgb3RoZXIgb3BlcmF0aW9ucy4gQnkgZGVmYXVsdCwgYnVja2V0cyBhcmUgcHJpdmF0ZS5cblx0KiBAcGFyYW0gb3B0aW9ucy5maWxlU2l6ZUxpbWl0IHNwZWNpZmllcyB0aGUgbWF4IGZpbGUgc2l6ZSBpbiBieXRlcyB0aGF0IGNhbiBiZSB1cGxvYWRlZCB0byB0aGlzIGJ1Y2tldC5cblx0KiBUaGUgZ2xvYmFsIGZpbGUgc2l6ZSBsaW1pdCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgdGhpcyB2YWx1ZS5cblx0KiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBudWxsLCB3aGljaCBkb2Vzbid0IHNldCBhIHBlciBidWNrZXQgZmlsZSBzaXplIGxpbWl0LlxuXHQqIEBwYXJhbSBvcHRpb25zLmFsbG93ZWRNaW1lVHlwZXMgc3BlY2lmaWVzIHRoZSBhbGxvd2VkIG1pbWUgdHlwZXMgdGhhdCB0aGlzIGJ1Y2tldCBjYW4gYWNjZXB0IGR1cmluZyB1cGxvYWQuXG5cdCogVGhlIGRlZmF1bHQgdmFsdWUgaXMgbnVsbCwgd2hpY2ggYWxsb3dzIGZpbGVzIHdpdGggYWxsIG1pbWUgdHlwZXMgdG8gYmUgdXBsb2FkZWQuXG5cdCogRWFjaCBtaW1lIHR5cGUgc3BlY2lmaWVkIGNhbiBiZSBhIHdpbGRjYXJkLCBlLmcuIGltYWdlLyosIG9yIGEgc3BlY2lmaWMgbWltZSB0eXBlLCBlLmcuIGltYWdlL3BuZy5cblx0KiBAcGFyYW0gb3B0aW9ucy50eXBlIChwcml2YXRlLWJldGEpIHNwZWNpZmllcyB0aGUgYnVja2V0IHR5cGUuIHNlZSBgQnVja2V0VHlwZWAgZm9yIG1vcmUgZGV0YWlscy5cblx0KiAgIC0gZGVmYXVsdCBidWNrZXQgdHlwZSBpcyBgU1RBTkRBUkRgXG5cdCogQHJldHVybnMgUHJvbWlzZSB3aXRoIHJlc3BvbnNlIGNvbnRhaW5pbmcgbmV3bHkgY3JlYXRlZCBidWNrZXQgbmFtZSBvciBlcnJvclxuXHQqXG5cdCogQGV4YW1wbGUgQ3JlYXRlIGJ1Y2tldFxuXHQqIGBgYGpzXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5zdG9yYWdlXG5cdCogICAuY3JlYXRlQnVja2V0KCdhdmF0YXJzJywge1xuXHQqICAgICBwdWJsaWM6IGZhbHNlLFxuXHQqICAgICBhbGxvd2VkTWltZVR5cGVzOiBbJ2ltYWdlL3BuZyddLFxuXHQqICAgICBmaWxlU2l6ZUxpbWl0OiAxMDI0XG5cdCogICB9KVxuXHQqIGBgYFxuXHQqXG5cdCogUmVzcG9uc2U6XG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiB7XG5cdCogICAgIFwibmFtZVwiOiBcImF2YXRhcnNcIlxuXHQqICAgfSxcblx0KiAgIFwiZXJyb3JcIjogbnVsbFxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBSTFMgcG9saWN5IHBlcm1pc3Npb25zIHJlcXVpcmVkOlxuXHQqICAgLSBgYnVja2V0c2AgdGFibGUgcGVybWlzc2lvbnM6IGBpbnNlcnRgXG5cdCogICAtIGBvYmplY3RzYCB0YWJsZSBwZXJtaXNzaW9uczogbm9uZVxuXHQqIC0gUmVmZXIgdG8gdGhlIFtTdG9yYWdlIGd1aWRlXSgvZG9jcy9ndWlkZXMvc3RvcmFnZS9zZWN1cml0eS9hY2Nlc3MtY29udHJvbCkgb24gaG93IGFjY2VzcyBjb250cm9sIHdvcmtzXG5cdCovXG5cdGFzeW5jIGNyZWF0ZUJ1Y2tldChpZCwgb3B0aW9ucyA9IHsgcHVibGljOiBmYWxzZSB9KSB7XG5cdFx0dmFyIF90aGlzMyA9IHRoaXM7XG5cdFx0cmV0dXJuIF90aGlzMy5oYW5kbGVPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHBvc3QoX3RoaXMzLmZldGNoLCBgJHtfdGhpczMudXJsfS9idWNrZXRgLCB7XG5cdFx0XHRcdGlkLFxuXHRcdFx0XHRuYW1lOiBpZCxcblx0XHRcdFx0dHlwZTogb3B0aW9ucy50eXBlLFxuXHRcdFx0XHRwdWJsaWM6IG9wdGlvbnMucHVibGljLFxuXHRcdFx0XHRmaWxlX3NpemVfbGltaXQ6IG9wdGlvbnMuZmlsZVNpemVMaW1pdCxcblx0XHRcdFx0YWxsb3dlZF9taW1lX3R5cGVzOiBvcHRpb25zLmFsbG93ZWRNaW1lVHlwZXNcblx0XHRcdH0sIHsgaGVhZGVyczogX3RoaXMzLmhlYWRlcnMgfSk7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCogVXBkYXRlcyBhIFN0b3JhZ2UgYnVja2V0XG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBGaWxlIEJ1Y2tldHNcblx0KiBAcGFyYW0gaWQgQSB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhlIGJ1Y2tldCB5b3UgYXJlIHVwZGF0aW5nLlxuXHQqIEBwYXJhbSBvcHRpb25zLnB1YmxpYyBUaGUgdmlzaWJpbGl0eSBvZiB0aGUgYnVja2V0LiBQdWJsaWMgYnVja2V0cyBkb24ndCByZXF1aXJlIGFuIGF1dGhvcml6YXRpb24gdG9rZW4gdG8gZG93bmxvYWQgb2JqZWN0cywgYnV0IHN0aWxsIHJlcXVpcmUgYSB2YWxpZCB0b2tlbiBmb3IgYWxsIG90aGVyIG9wZXJhdGlvbnMuXG5cdCogQHBhcmFtIG9wdGlvbnMuZmlsZVNpemVMaW1pdCBzcGVjaWZpZXMgdGhlIG1heCBmaWxlIHNpemUgaW4gYnl0ZXMgdGhhdCBjYW4gYmUgdXBsb2FkZWQgdG8gdGhpcyBidWNrZXQuXG5cdCogVGhlIGdsb2JhbCBmaWxlIHNpemUgbGltaXQgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoaXMgdmFsdWUuXG5cdCogVGhlIGRlZmF1bHQgdmFsdWUgaXMgbnVsbCwgd2hpY2ggZG9lc24ndCBzZXQgYSBwZXIgYnVja2V0IGZpbGUgc2l6ZSBsaW1pdC5cblx0KiBAcGFyYW0gb3B0aW9ucy5hbGxvd2VkTWltZVR5cGVzIHNwZWNpZmllcyB0aGUgYWxsb3dlZCBtaW1lIHR5cGVzIHRoYXQgdGhpcyBidWNrZXQgY2FuIGFjY2VwdCBkdXJpbmcgdXBsb2FkLlxuXHQqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIG51bGwsIHdoaWNoIGFsbG93cyBmaWxlcyB3aXRoIGFsbCBtaW1lIHR5cGVzIHRvIGJlIHVwbG9hZGVkLlxuXHQqIEVhY2ggbWltZSB0eXBlIHNwZWNpZmllZCBjYW4gYmUgYSB3aWxkY2FyZCwgZS5nLiBpbWFnZS8qLCBvciBhIHNwZWNpZmljIG1pbWUgdHlwZSwgZS5nLiBpbWFnZS9wbmcuXG5cdCogQHJldHVybnMgUHJvbWlzZSB3aXRoIHJlc3BvbnNlIGNvbnRhaW5pbmcgc3VjY2VzcyBtZXNzYWdlIG9yIGVycm9yXG5cdCpcblx0KiBAZXhhbXBsZSBVcGRhdGUgYnVja2V0XG5cdCogYGBganNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC51cGRhdGVCdWNrZXQoJ2F2YXRhcnMnLCB7XG5cdCogICAgIHB1YmxpYzogZmFsc2UsXG5cdCogICAgIGFsbG93ZWRNaW1lVHlwZXM6IFsnaW1hZ2UvcG5nJ10sXG5cdCogICAgIGZpbGVTaXplTGltaXQ6IDEwMjRcblx0KiAgIH0pXG5cdCogYGBgXG5cdCpcblx0KiBSZXNwb25zZTpcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IHtcblx0KiAgICAgXCJtZXNzYWdlXCI6IFwiU3VjY2Vzc2Z1bGx5IHVwZGF0ZWRcIlxuXHQqICAgfSxcblx0KiAgIFwiZXJyb3JcIjogbnVsbFxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBSTFMgcG9saWN5IHBlcm1pc3Npb25zIHJlcXVpcmVkOlxuXHQqICAgLSBgYnVja2V0c2AgdGFibGUgcGVybWlzc2lvbnM6IGBzZWxlY3RgIGFuZCBgdXBkYXRlYFxuXHQqICAgLSBgb2JqZWN0c2AgdGFibGUgcGVybWlzc2lvbnM6IG5vbmVcblx0KiAtIFJlZmVyIHRvIHRoZSBbU3RvcmFnZSBndWlkZV0oL2RvY3MvZ3VpZGVzL3N0b3JhZ2Uvc2VjdXJpdHkvYWNjZXNzLWNvbnRyb2wpIG9uIGhvdyBhY2Nlc3MgY29udHJvbCB3b3Jrc1xuXHQqL1xuXHRhc3luYyB1cGRhdGVCdWNrZXQoaWQsIG9wdGlvbnMpIHtcblx0XHR2YXIgX3RoaXM0ID0gdGhpcztcblx0XHRyZXR1cm4gX3RoaXM0LmhhbmRsZU9wZXJhdGlvbihhc3luYyAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXdhaXQgcHV0KF90aGlzNC5mZXRjaCwgYCR7X3RoaXM0LnVybH0vYnVja2V0LyR7aWR9YCwge1xuXHRcdFx0XHRpZCxcblx0XHRcdFx0bmFtZTogaWQsXG5cdFx0XHRcdHB1YmxpYzogb3B0aW9ucy5wdWJsaWMsXG5cdFx0XHRcdGZpbGVfc2l6ZV9saW1pdDogb3B0aW9ucy5maWxlU2l6ZUxpbWl0LFxuXHRcdFx0XHRhbGxvd2VkX21pbWVfdHlwZXM6IG9wdGlvbnMuYWxsb3dlZE1pbWVUeXBlc1xuXHRcdFx0fSwgeyBoZWFkZXJzOiBfdGhpczQuaGVhZGVycyB9KTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0KiBSZW1vdmVzIGFsbCBvYmplY3RzIGluc2lkZSBhIHNpbmdsZSBidWNrZXQuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBGaWxlIEJ1Y2tldHNcblx0KiBAcGFyYW0gaWQgVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBidWNrZXQgeW91IHdvdWxkIGxpa2UgdG8gZW1wdHkuXG5cdCogQHJldHVybnMgUHJvbWlzZSB3aXRoIHN1Y2Nlc3MgbWVzc2FnZSBvciBlcnJvclxuXHQqXG5cdCogQGV4YW1wbGUgRW1wdHkgYnVja2V0XG5cdCogYGBganNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC5lbXB0eUJ1Y2tldCgnYXZhdGFycycpXG5cdCogYGBgXG5cdCpcblx0KiBSZXNwb25zZTpcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IHtcblx0KiAgICAgXCJtZXNzYWdlXCI6IFwiU3VjY2Vzc2Z1bGx5IGVtcHRpZWRcIlxuXHQqICAgfSxcblx0KiAgIFwiZXJyb3JcIjogbnVsbFxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBSTFMgcG9saWN5IHBlcm1pc3Npb25zIHJlcXVpcmVkOlxuXHQqICAgLSBgYnVja2V0c2AgdGFibGUgcGVybWlzc2lvbnM6IGBzZWxlY3RgXG5cdCogICAtIGBvYmplY3RzYCB0YWJsZSBwZXJtaXNzaW9uczogYHNlbGVjdGAgYW5kIGBkZWxldGVgXG5cdCogLSBSZWZlciB0byB0aGUgW1N0b3JhZ2UgZ3VpZGVdKC9kb2NzL2d1aWRlcy9zdG9yYWdlL3NlY3VyaXR5L2FjY2Vzcy1jb250cm9sKSBvbiBob3cgYWNjZXNzIGNvbnRyb2wgd29ya3Ncblx0Ki9cblx0YXN5bmMgZW1wdHlCdWNrZXQoaWQpIHtcblx0XHR2YXIgX3RoaXM1ID0gdGhpcztcblx0XHRyZXR1cm4gX3RoaXM1LmhhbmRsZU9wZXJhdGlvbihhc3luYyAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXdhaXQgcG9zdChfdGhpczUuZmV0Y2gsIGAke190aGlzNS51cmx9L2J1Y2tldC8ke2lkfS9lbXB0eWAsIHt9LCB7IGhlYWRlcnM6IF90aGlzNS5oZWFkZXJzIH0pO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQqIERlbGV0ZXMgYW4gZXhpc3RpbmcgYnVja2V0LiBBIGJ1Y2tldCBjYW4ndCBiZSBkZWxldGVkIHdpdGggZXhpc3Rpbmcgb2JqZWN0cyBpbnNpZGUgaXQuXG5cdCogWW91IG11c3QgZmlyc3QgYGVtcHR5KClgIHRoZSBidWNrZXQuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBGaWxlIEJ1Y2tldHNcblx0KiBAcGFyYW0gaWQgVGhlIHVuaXF1ZSBpZGVudGlmaWVyIG9mIHRoZSBidWNrZXQgeW91IHdvdWxkIGxpa2UgdG8gZGVsZXRlLlxuXHQqIEByZXR1cm5zIFByb21pc2Ugd2l0aCBzdWNjZXNzIG1lc3NhZ2Ugb3IgZXJyb3Jcblx0KlxuXHQqIEBleGFtcGxlIERlbGV0ZSBidWNrZXRcblx0KiBgYGBqc1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuc3RvcmFnZVxuXHQqICAgLmRlbGV0ZUJ1Y2tldCgnYXZhdGFycycpXG5cdCogYGBgXG5cdCpcblx0KiBSZXNwb25zZTpcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IHtcblx0KiAgICAgXCJtZXNzYWdlXCI6IFwiU3VjY2Vzc2Z1bGx5IGRlbGV0ZWRcIlxuXHQqICAgfSxcblx0KiAgIFwiZXJyb3JcIjogbnVsbFxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBSTFMgcG9saWN5IHBlcm1pc3Npb25zIHJlcXVpcmVkOlxuXHQqICAgLSBgYnVja2V0c2AgdGFibGUgcGVybWlzc2lvbnM6IGBzZWxlY3RgIGFuZCBgZGVsZXRlYFxuXHQqICAgLSBgb2JqZWN0c2AgdGFibGUgcGVybWlzc2lvbnM6IG5vbmVcblx0KiAtIFJlZmVyIHRvIHRoZSBbU3RvcmFnZSBndWlkZV0oL2RvY3MvZ3VpZGVzL3N0b3JhZ2Uvc2VjdXJpdHkvYWNjZXNzLWNvbnRyb2wpIG9uIGhvdyBhY2Nlc3MgY29udHJvbCB3b3Jrc1xuXHQqL1xuXHRhc3luYyBkZWxldGVCdWNrZXQoaWQpIHtcblx0XHR2YXIgX3RoaXM2ID0gdGhpcztcblx0XHRyZXR1cm4gX3RoaXM2LmhhbmRsZU9wZXJhdGlvbihhc3luYyAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXdhaXQgcmVtb3ZlKF90aGlzNi5mZXRjaCwgYCR7X3RoaXM2LnVybH0vYnVja2V0LyR7aWR9YCwge30sIHsgaGVhZGVyczogX3RoaXM2LmhlYWRlcnMgfSk7XG5cdFx0fSk7XG5cdH1cblx0bGlzdEJ1Y2tldE9wdGlvbnNUb1F1ZXJ5U3RyaW5nKG9wdGlvbnMpIHtcblx0XHRjb25zdCBwYXJhbXMgPSB7fTtcblx0XHRpZiAob3B0aW9ucykge1xuXHRcdFx0aWYgKFwibGltaXRcIiBpbiBvcHRpb25zKSBwYXJhbXMubGltaXQgPSBTdHJpbmcob3B0aW9ucy5saW1pdCk7XG5cdFx0XHRpZiAoXCJvZmZzZXRcIiBpbiBvcHRpb25zKSBwYXJhbXMub2Zmc2V0ID0gU3RyaW5nKG9wdGlvbnMub2Zmc2V0KTtcblx0XHRcdGlmIChvcHRpb25zLnNlYXJjaCkgcGFyYW1zLnNlYXJjaCA9IG9wdGlvbnMuc2VhcmNoO1xuXHRcdFx0aWYgKG9wdGlvbnMuc29ydENvbHVtbikgcGFyYW1zLnNvcnRDb2x1bW4gPSBvcHRpb25zLnNvcnRDb2x1bW47XG5cdFx0XHRpZiAob3B0aW9ucy5zb3J0T3JkZXIpIHBhcmFtcy5zb3J0T3JkZXIgPSBvcHRpb25zLnNvcnRPcmRlcjtcblx0XHR9XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID4gMCA/IFwiP1wiICsgbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXJhbXMpLnRvU3RyaW5nKCkgOiBcIlwiO1xuXHR9XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvcGFja2FnZXMvU3RvcmFnZUFuYWx5dGljc0NsaWVudC50c1xuLyoqXG4qIENsaWVudCBjbGFzcyBmb3IgbWFuYWdpbmcgQW5hbHl0aWNzIEJ1Y2tldHMgdXNpbmcgSWNlYmVyZyB0YWJsZXNcbiogUHJvdmlkZXMgbWV0aG9kcyBmb3IgY3JlYXRpbmcsIGxpc3RpbmcsIGFuZCBkZWxldGluZyBhbmFseXRpY3MgYnVja2V0c1xuKi9cbnZhciBTdG9yYWdlQW5hbHl0aWNzQ2xpZW50ID0gY2xhc3MgZXh0ZW5kcyBCYXNlQXBpQ2xpZW50IHtcblx0LyoqXG5cdCogQGFscGhhXG5cdCpcblx0KiBDcmVhdGVzIGEgbmV3IFN0b3JhZ2VBbmFseXRpY3NDbGllbnQgaW5zdGFuY2Vcblx0KlxuXHQqICoqUHVibGljIGFscGhhOioqIFRoaXMgQVBJIGlzIHBhcnQgb2YgYSBwdWJsaWMgYWxwaGEgcmVsZWFzZSBhbmQgbWF5IG5vdCBiZSBhdmFpbGFibGUgdG8geW91ciBhY2NvdW50IHR5cGUuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBBbmFseXRpY3MgQnVja2V0c1xuXHQqIEBwYXJhbSB1cmwgLSBUaGUgYmFzZSBVUkwgZm9yIHRoZSBzdG9yYWdlIEFQSVxuXHQqIEBwYXJhbSBoZWFkZXJzIC0gSFRUUCBoZWFkZXJzIHRvIGluY2x1ZGUgaW4gcmVxdWVzdHNcblx0KiBAcGFyYW0gZmV0Y2ggLSBPcHRpb25hbCBjdXN0b20gZmV0Y2ggaW1wbGVtZW50YXRpb25cblx0KlxuXHQqIEBleGFtcGxlIFVzaW5nIHN1cGFiYXNlLWpzIChyZWNvbW1lbmRlZClcblx0KiBgYGB0eXBlc2NyaXB0XG5cdCogaW1wb3J0IHsgY3JlYXRlQ2xpZW50IH0gZnJvbSAnQHN1cGFiYXNlL3N1cGFiYXNlLWpzJ1xuXHQqXG5cdCogY29uc3Qgc3VwYWJhc2UgPSBjcmVhdGVDbGllbnQoJ2h0dHBzOi8veHl6Y29tcGFueS5zdXBhYmFzZS5jbycsICd5b3VyLXB1Ymxpc2hhYmxlLWtleScpXG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Uuc3RvcmFnZS5hbmFseXRpY3MubGlzdEJ1Y2tldHMoKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgU3RhbmRhbG9uZSBpbXBvcnQgZm9yIGJ1bmRsZS1zZW5zaXRpdmUgZW52aXJvbm1lbnRzXG5cdCogYGBgdHlwZXNjcmlwdFxuXHQqIGltcG9ydCB7IFN0b3JhZ2VBbmFseXRpY3NDbGllbnQgfSBmcm9tICdAc3VwYWJhc2Uvc3RvcmFnZS1qcydcblx0KlxuXHQqIGNvbnN0IGNsaWVudCA9IG5ldyBTdG9yYWdlQW5hbHl0aWNzQ2xpZW50KHVybCwgaGVhZGVycylcblx0KiBgYGBcblx0Ki9cblx0Y29uc3RydWN0b3IodXJsLCBoZWFkZXJzID0ge30sIGZldGNoJDEpIHtcblx0XHRjb25zdCBmaW5hbFVybCA9IHVybC5yZXBsYWNlKC9cXC8kLywgXCJcIik7XG5cdFx0Y29uc3QgZmluYWxIZWFkZXJzID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIERFRkFVTFRfSEVBREVSUyksIGhlYWRlcnMpO1xuXHRcdHN1cGVyKGZpbmFsVXJsLCBmaW5hbEhlYWRlcnMsIGZldGNoJDEsIFwic3RvcmFnZVwiKTtcblx0fVxuXHQvKipcblx0KiBAYWxwaGFcblx0KlxuXHQqIENyZWF0ZXMgYSBuZXcgYW5hbHl0aWNzIGJ1Y2tldCB1c2luZyBJY2ViZXJnIHRhYmxlc1xuXHQqIEFuYWx5dGljcyBidWNrZXRzIGFyZSBvcHRpbWl6ZWQgZm9yIGFuYWx5dGljYWwgcXVlcmllcyBhbmQgZGF0YSBwcm9jZXNzaW5nXG5cdCpcblx0KiAqKlB1YmxpYyBhbHBoYToqKiBUaGlzIEFQSSBpcyBwYXJ0IG9mIGEgcHVibGljIGFscGhhIHJlbGVhc2UgYW5kIG1heSBub3QgYmUgYXZhaWxhYmxlIHRvIHlvdXIgYWNjb3VudCB0eXBlLlxuXHQqXG5cdCogQGNhdGVnb3J5IFN0b3JhZ2Vcblx0KiBAc3ViY2F0ZWdvcnkgQW5hbHl0aWNzIEJ1Y2tldHNcblx0KiBAcGFyYW0gbmFtZSBBIHVuaXF1ZSBuYW1lIGZvciB0aGUgYnVja2V0IHlvdSBhcmUgY3JlYXRpbmdcblx0KiBAcmV0dXJucyBQcm9taXNlIHdpdGggcmVzcG9uc2UgY29udGFpbmluZyBuZXdseSBjcmVhdGVkIGFuYWx5dGljcyBidWNrZXQgb3IgZXJyb3Jcblx0KlxuXHQqIEBleGFtcGxlIENyZWF0ZSBhbmFseXRpY3MgYnVja2V0XG5cdCogYGBganNcblx0KiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuXHQqICAgLnN0b3JhZ2Vcblx0KiAgIC5hbmFseXRpY3Ncblx0KiAgIC5jcmVhdGVCdWNrZXQoJ2FuYWx5dGljcy1kYXRhJylcblx0KiBgYGBcblx0KlxuXHQqIFJlc3BvbnNlOlxuXHQqIGBgYGpzb25cblx0KiB7XG5cdCogICBcImRhdGFcIjoge1xuXHQqICAgICBcIm5hbWVcIjogXCJhbmFseXRpY3MtZGF0YVwiLFxuXHQqICAgICBcInR5cGVcIjogXCJBTkFMWVRJQ1NcIixcblx0KiAgICAgXCJmb3JtYXRcIjogXCJpY2ViZXJnXCIsXG5cdCogICAgIFwiY3JlYXRlZF9hdFwiOiBcIjIwMjQtMDUtMjJUMjI6MjY6MDUuMTAwWlwiLFxuXHQqICAgICBcInVwZGF0ZWRfYXRcIjogXCIyMDI0LTA1LTIyVDIyOjI2OjA1LjEwMFpcIlxuXHQqICAgfSxcblx0KiAgIFwiZXJyb3JcIjogbnVsbFxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBDcmVhdGVzIGEgbmV3IGFuYWx5dGljcyBidWNrZXQgdXNpbmcgSWNlYmVyZyB0YWJsZXNcblx0KiAtIEFuYWx5dGljcyBidWNrZXRzIGFyZSBvcHRpbWl6ZWQgZm9yIGFuYWx5dGljYWwgcXVlcmllcyBhbmQgZGF0YSBwcm9jZXNzaW5nXG5cdCovXG5cdGFzeW5jIGNyZWF0ZUJ1Y2tldChuYW1lKSB7XG5cdFx0dmFyIF90aGlzID0gdGhpcztcblx0XHRyZXR1cm4gX3RoaXMuaGFuZGxlT3BlcmF0aW9uKGFzeW5jICgpID0+IHtcblx0XHRcdHJldHVybiBhd2FpdCBwb3N0KF90aGlzLmZldGNoLCBgJHtfdGhpcy51cmx9L2J1Y2tldGAsIHsgbmFtZSB9LCB7IGhlYWRlcnM6IF90aGlzLmhlYWRlcnMgfSk7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCogQGFscGhhXG5cdCpcblx0KiBSZXRyaWV2ZXMgdGhlIGRldGFpbHMgb2YgYWxsIEFuYWx5dGljcyBTdG9yYWdlIGJ1Y2tldHMgd2l0aGluIGFuIGV4aXN0aW5nIHByb2plY3Rcblx0KiBPbmx5IHJldHVybnMgYnVja2V0cyBvZiB0eXBlICdBTkFMWVRJQ1MnXG5cdCpcblx0KiAqKlB1YmxpYyBhbHBoYToqKiBUaGlzIEFQSSBpcyBwYXJ0IG9mIGEgcHVibGljIGFscGhhIHJlbGVhc2UgYW5kIG1heSBub3QgYmUgYXZhaWxhYmxlIHRvIHlvdXIgYWNjb3VudCB0eXBlLlxuXHQqXG5cdCogQGNhdGVnb3J5IFN0b3JhZ2Vcblx0KiBAc3ViY2F0ZWdvcnkgQW5hbHl0aWNzIEJ1Y2tldHNcblx0KiBAcGFyYW0gb3B0aW9ucyBRdWVyeSBwYXJhbWV0ZXJzIGZvciBsaXN0aW5nIGJ1Y2tldHNcblx0KiBAcGFyYW0gb3B0aW9ucy5saW1pdCBNYXhpbXVtIG51bWJlciBvZiBidWNrZXRzIHRvIHJldHVyblxuXHQqIEBwYXJhbSBvcHRpb25zLm9mZnNldCBOdW1iZXIgb2YgYnVja2V0cyB0byBza2lwXG5cdCogQHBhcmFtIG9wdGlvbnMuc29ydENvbHVtbiBDb2x1bW4gdG8gc29ydCBieSAoJ25hbWUnLCAnY3JlYXRlZF9hdCcsICd1cGRhdGVkX2F0Jylcblx0KiBAcGFyYW0gb3B0aW9ucy5zb3J0T3JkZXIgU29ydCBvcmRlciAoJ2FzYycgb3IgJ2Rlc2MnKVxuXHQqIEBwYXJhbSBvcHRpb25zLnNlYXJjaCBTZWFyY2ggdGVybSB0byBmaWx0ZXIgYnVja2V0IG5hbWVzXG5cdCogQHJldHVybnMgUHJvbWlzZSB3aXRoIHJlc3BvbnNlIGNvbnRhaW5pbmcgYXJyYXkgb2YgYW5hbHl0aWNzIGJ1Y2tldHMgb3IgZXJyb3Jcblx0KlxuXHQqIEBleGFtcGxlIExpc3QgYW5hbHl0aWNzIGJ1Y2tldHNcblx0KiBgYGBqc1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuc3RvcmFnZVxuXHQqICAgLmFuYWx5dGljc1xuXHQqICAgLmxpc3RCdWNrZXRzKHtcblx0KiAgICAgbGltaXQ6IDEwLFxuXHQqICAgICBvZmZzZXQ6IDAsXG5cdCogICAgIHNvcnRDb2x1bW46ICdjcmVhdGVkX2F0Jyxcblx0KiAgICAgc29ydE9yZGVyOiAnZGVzYydcblx0KiAgIH0pXG5cdCogYGBgXG5cdCpcblx0KiBSZXNwb25zZTpcblx0KiBgYGBqc29uXG5cdCoge1xuXHQqICAgXCJkYXRhXCI6IFtcblx0KiAgICAge1xuXHQqICAgICAgIFwibmFtZVwiOiBcImFuYWx5dGljcy1kYXRhXCIsXG5cdCogICAgICAgXCJ0eXBlXCI6IFwiQU5BTFlUSUNTXCIsXG5cdCogICAgICAgXCJmb3JtYXRcIjogXCJpY2ViZXJnXCIsXG5cdCogICAgICAgXCJjcmVhdGVkX2F0XCI6IFwiMjAyNC0wNS0yMlQyMjoyNjowNS4xMDBaXCIsXG5cdCogICAgICAgXCJ1cGRhdGVkX2F0XCI6IFwiMjAyNC0wNS0yMlQyMjoyNjowNS4xMDBaXCJcblx0KiAgICAgfVxuXHQqICAgXSxcblx0KiAgIFwiZXJyb3JcIjogbnVsbFxuXHQqIH1cblx0KiBgYGBcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBSZXRyaWV2ZXMgdGhlIGRldGFpbHMgb2YgYWxsIEFuYWx5dGljcyBTdG9yYWdlIGJ1Y2tldHMgd2l0aGluIGFuIGV4aXN0aW5nIHByb2plY3Rcblx0KiAtIE9ubHkgcmV0dXJucyBidWNrZXRzIG9mIHR5cGUgJ0FOQUxZVElDUydcblx0Ki9cblx0YXN5bmMgbGlzdEJ1Y2tldHMob3B0aW9ucykge1xuXHRcdHZhciBfdGhpczIgPSB0aGlzO1xuXHRcdHJldHVybiBfdGhpczIuaGFuZGxlT3BlcmF0aW9uKGFzeW5jICgpID0+IHtcblx0XHRcdGNvbnN0IHF1ZXJ5UGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuXHRcdFx0aWYgKChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubGltaXQpICE9PSB2b2lkIDApIHF1ZXJ5UGFyYW1zLnNldChcImxpbWl0XCIsIG9wdGlvbnMubGltaXQudG9TdHJpbmcoKSk7XG5cdFx0XHRpZiAoKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5vZmZzZXQpICE9PSB2b2lkIDApIHF1ZXJ5UGFyYW1zLnNldChcIm9mZnNldFwiLCBvcHRpb25zLm9mZnNldC50b1N0cmluZygpKTtcblx0XHRcdGlmIChvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMuc29ydENvbHVtbikgcXVlcnlQYXJhbXMuc2V0KFwic29ydENvbHVtblwiLCBvcHRpb25zLnNvcnRDb2x1bW4pO1xuXHRcdFx0aWYgKG9wdGlvbnMgPT09IG51bGwgfHwgb3B0aW9ucyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0aW9ucy5zb3J0T3JkZXIpIHF1ZXJ5UGFyYW1zLnNldChcInNvcnRPcmRlclwiLCBvcHRpb25zLnNvcnRPcmRlcik7XG5cdFx0XHRpZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnNlYXJjaCkgcXVlcnlQYXJhbXMuc2V0KFwic2VhcmNoXCIsIG9wdGlvbnMuc2VhcmNoKTtcblx0XHRcdGNvbnN0IHF1ZXJ5U3RyaW5nID0gcXVlcnlQYXJhbXMudG9TdHJpbmcoKTtcblx0XHRcdGNvbnN0IHVybCA9IHF1ZXJ5U3RyaW5nID8gYCR7X3RoaXMyLnVybH0vYnVja2V0PyR7cXVlcnlTdHJpbmd9YCA6IGAke190aGlzMi51cmx9L2J1Y2tldGA7XG5cdFx0XHRyZXR1cm4gYXdhaXQgZ2V0KF90aGlzMi5mZXRjaCwgdXJsLCB7IGhlYWRlcnM6IF90aGlzMi5oZWFkZXJzIH0pO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQqIEBhbHBoYVxuXHQqXG5cdCogRGVsZXRlcyBhbiBleGlzdGluZyBhbmFseXRpY3MgYnVja2V0XG5cdCogQSBidWNrZXQgY2FuJ3QgYmUgZGVsZXRlZCB3aXRoIGV4aXN0aW5nIG9iamVjdHMgaW5zaWRlIGl0XG5cdCogWW91IG11c3QgZmlyc3QgZW1wdHkgdGhlIGJ1Y2tldCBiZWZvcmUgZGVsZXRpb25cblx0KlxuXHQqICoqUHVibGljIGFscGhhOioqIFRoaXMgQVBJIGlzIHBhcnQgb2YgYSBwdWJsaWMgYWxwaGEgcmVsZWFzZSBhbmQgbWF5IG5vdCBiZSBhdmFpbGFibGUgdG8geW91ciBhY2NvdW50IHR5cGUuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBBbmFseXRpY3MgQnVja2V0c1xuXHQqIEBwYXJhbSBidWNrZXROYW1lIFRoZSB1bmlxdWUgaWRlbnRpZmllciBvZiB0aGUgYnVja2V0IHlvdSB3b3VsZCBsaWtlIHRvIGRlbGV0ZVxuXHQqIEByZXR1cm5zIFByb21pc2Ugd2l0aCByZXNwb25zZSBjb250YWluaW5nIHN1Y2Nlc3MgbWVzc2FnZSBvciBlcnJvclxuXHQqXG5cdCogQGV4YW1wbGUgRGVsZXRlIGFuYWx5dGljcyBidWNrZXRcblx0KiBgYGBqc1xuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuc3RvcmFnZVxuXHQqICAgLmFuYWx5dGljc1xuXHQqICAgLmRlbGV0ZUJ1Y2tldCgnYW5hbHl0aWNzLWRhdGEnKVxuXHQqIGBgYFxuXHQqXG5cdCogUmVzcG9uc2U6XG5cdCogYGBganNvblxuXHQqIHtcblx0KiAgIFwiZGF0YVwiOiB7XG5cdCogICAgIFwibWVzc2FnZVwiOiBcIlN1Y2Nlc3NmdWxseSBkZWxldGVkXCJcblx0KiAgIH0sXG5cdCogICBcImVycm9yXCI6IG51bGxcblx0KiB9XG5cdCogYGBgXG5cdCpcblx0KiBAcmVtYXJrc1xuXHQqIC0gRGVsZXRlcyBhbiBhbmFseXRpY3MgYnVja2V0XG5cdCovXG5cdGFzeW5jIGRlbGV0ZUJ1Y2tldChidWNrZXROYW1lKSB7XG5cdFx0dmFyIF90aGlzMyA9IHRoaXM7XG5cdFx0cmV0dXJuIF90aGlzMy5oYW5kbGVPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHJlbW92ZShfdGhpczMuZmV0Y2gsIGAke190aGlzMy51cmx9L2J1Y2tldC8ke2J1Y2tldE5hbWV9YCwge30sIHsgaGVhZGVyczogX3RoaXMzLmhlYWRlcnMgfSk7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCogQGFscGhhXG5cdCpcblx0KiBHZXQgYW4gSWNlYmVyZyBSRVNUIENhdGFsb2cgY2xpZW50IGNvbmZpZ3VyZWQgZm9yIGEgc3BlY2lmaWMgYW5hbHl0aWNzIGJ1Y2tldFxuXHQqIFVzZSB0aGlzIHRvIHBlcmZvcm0gYWR2YW5jZWQgdGFibGUgYW5kIG5hbWVzcGFjZSBvcGVyYXRpb25zIHdpdGhpbiB0aGUgYnVja2V0XG5cdCogVGhlIHJldHVybmVkIGNsaWVudCBwcm92aWRlcyBmdWxsIGFjY2VzcyB0byB0aGUgQXBhY2hlIEljZWJlcmcgUkVTVCBDYXRhbG9nIEFQSVxuXHQqIHdpdGggdGhlIFN1cGFiYXNlIGB7IGRhdGEsIGVycm9yIH1gIHBhdHRlcm4gZm9yIGNvbnNpc3RlbnQgZXJyb3IgaGFuZGxpbmcgb24gYWxsIG9wZXJhdGlvbnMuXG5cdCpcblx0KiAqKlB1YmxpYyBhbHBoYToqKiBUaGlzIEFQSSBpcyBwYXJ0IG9mIGEgcHVibGljIGFscGhhIHJlbGVhc2UgYW5kIG1heSBub3QgYmUgYXZhaWxhYmxlIHRvIHlvdXIgYWNjb3VudCB0eXBlLlxuXHQqXG5cdCogQGNhdGVnb3J5IFN0b3JhZ2Vcblx0KiBAc3ViY2F0ZWdvcnkgQW5hbHl0aWNzIEJ1Y2tldHNcblx0KiBAcGFyYW0gYnVja2V0TmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBhbmFseXRpY3MgYnVja2V0ICh3YXJlaG91c2UpIHRvIGNvbm5lY3QgdG9cblx0KiBAcmV0dXJucyBUaGUgd3JhcHBlZCBJY2ViZXJnIGNhdGFsb2cgY2xpZW50XG5cdCogQHRocm93cyB7U3RvcmFnZUVycm9yfSBJZiB0aGUgYnVja2V0IG5hbWUgaXMgaW52YWxpZFxuXHQqXG5cdCogQGV4YW1wbGUgR2V0IGNhdGFsb2cgYW5kIGNyZWF0ZSB0YWJsZVxuXHQqIGBgYGpzXG5cdCogLy8gRmlyc3QsIGNyZWF0ZSBhbiBhbmFseXRpY3MgYnVja2V0XG5cdCogY29uc3QgeyBkYXRhOiBidWNrZXQsIGVycm9yOiBidWNrZXRFcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5zdG9yYWdlXG5cdCogICAuYW5hbHl0aWNzXG5cdCogICAuY3JlYXRlQnVja2V0KCdhbmFseXRpY3MtZGF0YScpXG5cdCpcblx0KiAvLyBHZXQgdGhlIEljZWJlcmcgY2F0YWxvZyBmb3IgdGhhdCBidWNrZXRcblx0KiBjb25zdCBjYXRhbG9nID0gc3VwYWJhc2Uuc3RvcmFnZS5hbmFseXRpY3MuZnJvbSgnYW5hbHl0aWNzLWRhdGEnKVxuXHQqXG5cdCogLy8gQ3JlYXRlIGEgbmFtZXNwYWNlXG5cdCogY29uc3QgeyBlcnJvcjogbnNFcnJvciB9ID0gYXdhaXQgY2F0YWxvZy5jcmVhdGVOYW1lc3BhY2UoeyBuYW1lc3BhY2U6IFsnZGVmYXVsdCddIH0pXG5cdCpcblx0KiAvLyBDcmVhdGUgYSB0YWJsZSB3aXRoIHNjaGVtYVxuXHQqIGNvbnN0IHsgZGF0YTogdGFibGVNZXRhZGF0YSwgZXJyb3I6IHRhYmxlRXJyb3IgfSA9IGF3YWl0IGNhdGFsb2cuY3JlYXRlVGFibGUoXG5cdCogICB7IG5hbWVzcGFjZTogWydkZWZhdWx0J10gfSxcblx0KiAgIHtcblx0KiAgICAgbmFtZTogJ2V2ZW50cycsXG5cdCogICAgIHNjaGVtYToge1xuXHQqICAgICAgIHR5cGU6ICdzdHJ1Y3QnLFxuXHQqICAgICAgIGZpZWxkczogW1xuXHQqICAgICAgICAgeyBpZDogMSwgbmFtZTogJ2lkJywgdHlwZTogJ2xvbmcnLCByZXF1aXJlZDogdHJ1ZSB9LFxuXHQqICAgICAgICAgeyBpZDogMiwgbmFtZTogJ3RpbWVzdGFtcCcsIHR5cGU6ICd0aW1lc3RhbXAnLCByZXF1aXJlZDogdHJ1ZSB9LFxuXHQqICAgICAgICAgeyBpZDogMywgbmFtZTogJ3VzZXJfaWQnLCB0eXBlOiAnc3RyaW5nJywgcmVxdWlyZWQ6IGZhbHNlIH1cblx0KiAgICAgICBdLFxuXHQqICAgICAgICdzY2hlbWEtaWQnOiAwLFxuXHQqICAgICAgICdpZGVudGlmaWVyLWZpZWxkLWlkcyc6IFsxXVxuXHQqICAgICB9LFxuXHQqICAgICAncGFydGl0aW9uLXNwZWMnOiB7XG5cdCogICAgICAgJ3NwZWMtaWQnOiAwLFxuXHQqICAgICAgIGZpZWxkczogW11cblx0KiAgICAgfSxcblx0KiAgICAgJ3dyaXRlLW9yZGVyJzoge1xuXHQqICAgICAgICdvcmRlci1pZCc6IDAsXG5cdCogICAgICAgZmllbGRzOiBbXVxuXHQqICAgICB9LFxuXHQqICAgICBwcm9wZXJ0aWVzOiB7XG5cdCogICAgICAgJ3dyaXRlLmZvcm1hdC5kZWZhdWx0JzogJ3BhcnF1ZXQnXG5cdCogICAgIH1cblx0KiAgIH1cblx0KiApXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZSBMaXN0IHRhYmxlcyBpbiBuYW1lc3BhY2Vcblx0KiBgYGBqc1xuXHQqIGNvbnN0IGNhdGFsb2cgPSBzdXBhYmFzZS5zdG9yYWdlLmFuYWx5dGljcy5mcm9tKCdhbmFseXRpY3MtZGF0YScpXG5cdCpcblx0KiAvLyBMaXN0IGFsbCB0YWJsZXMgaW4gdGhlIGRlZmF1bHQgbmFtZXNwYWNlXG5cdCogY29uc3QgeyBkYXRhOiB0YWJsZXMsIGVycm9yOiBsaXN0RXJyb3IgfSA9IGF3YWl0IGNhdGFsb2cubGlzdFRhYmxlcyh7IG5hbWVzcGFjZTogWydkZWZhdWx0J10gfSlcblx0KiBpZiAobGlzdEVycm9yKSB7XG5cdCogICBpZiAobGlzdEVycm9yLmlzTm90Rm91bmQoKSkge1xuXHQqICAgICBjb25zb2xlLmxvZygnTmFtZXNwYWNlIG5vdCBmb3VuZCcpXG5cdCogICB9XG5cdCogICByZXR1cm5cblx0KiB9XG5cdCogY29uc29sZS5sb2codGFibGVzKSAvLyBbeyBuYW1lc3BhY2U6IFsnZGVmYXVsdCddLCBuYW1lOiAnZXZlbnRzJyB9XVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgV29ya2luZyB3aXRoIG5hbWVzcGFjZXNcblx0KiBgYGBqc1xuXHQqIGNvbnN0IGNhdGFsb2cgPSBzdXBhYmFzZS5zdG9yYWdlLmFuYWx5dGljcy5mcm9tKCdhbmFseXRpY3MtZGF0YScpXG5cdCpcblx0KiAvLyBMaXN0IGFsbCBuYW1lc3BhY2VzXG5cdCogY29uc3QgeyBkYXRhOiBuYW1lc3BhY2VzIH0gPSBhd2FpdCBjYXRhbG9nLmxpc3ROYW1lc3BhY2VzKClcblx0KlxuXHQqIC8vIENyZWF0ZSBuYW1lc3BhY2Ugd2l0aCBwcm9wZXJ0aWVzXG5cdCogYXdhaXQgY2F0YWxvZy5jcmVhdGVOYW1lc3BhY2UoXG5cdCogICB7IG5hbWVzcGFjZTogWydwcm9kdWN0aW9uJ10gfSxcblx0KiAgIHsgcHJvcGVydGllczogeyBvd25lcjogJ2RhdGEtdGVhbScsIGVudjogJ3Byb2QnIH0gfVxuXHQqIClcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIENsZWFudXAgb3BlcmF0aW9uc1xuXHQqIGBgYGpzXG5cdCogY29uc3QgY2F0YWxvZyA9IHN1cGFiYXNlLnN0b3JhZ2UuYW5hbHl0aWNzLmZyb20oJ2FuYWx5dGljcy1kYXRhJylcblx0KlxuXHQqIC8vIERyb3AgdGFibGUgd2l0aCBwdXJnZSBvcHRpb24gKHJlbW92ZXMgYWxsIGRhdGEpXG5cdCogY29uc3QgeyBlcnJvcjogZHJvcEVycm9yIH0gPSBhd2FpdCBjYXRhbG9nLmRyb3BUYWJsZShcblx0KiAgIHsgbmFtZXNwYWNlOiBbJ2RlZmF1bHQnXSwgbmFtZTogJ2V2ZW50cycgfSxcblx0KiAgIHsgcHVyZ2U6IHRydWUgfVxuXHQqIClcblx0KlxuXHQqIGlmIChkcm9wRXJyb3I/LmlzTm90Rm91bmQoKSkge1xuXHQqICAgY29uc29sZS5sb2coJ1RhYmxlIGRvZXMgbm90IGV4aXN0Jylcblx0KiB9XG5cdCpcblx0KiAvLyBEcm9wIG5hbWVzcGFjZSAobXVzdCBiZSBlbXB0eSlcblx0KiBhd2FpdCBjYXRhbG9nLmRyb3BOYW1lc3BhY2UoeyBuYW1lc3BhY2U6IFsnZGVmYXVsdCddIH0pXG5cdCogYGBgXG5cdCpcblx0KiBAcmVtYXJrc1xuXHQqIFRoaXMgbWV0aG9kIHByb3ZpZGVzIGEgYnJpZGdlIGJldHdlZW4gU3VwYWJhc2UncyBidWNrZXQgbWFuYWdlbWVudCBhbmQgdGhlIHN0YW5kYXJkXG5cdCogQXBhY2hlIEljZWJlcmcgUkVTVCBDYXRhbG9nIEFQSS4gVGhlIGJ1Y2tldCBuYW1lIG1hcHMgdG8gdGhlIEljZWJlcmcgd2FyZWhvdXNlIHBhcmFtZXRlci5cblx0KiBBbGwgYXV0aGVudGljYXRpb24gYW5kIGNvbmZpZ3VyYXRpb24gaXMgaGFuZGxlZCBhdXRvbWF0aWNhbGx5IHVzaW5nIHlvdXIgU3VwYWJhc2UgY3JlZGVudGlhbHMuXG5cdCpcblx0KiAqKkVycm9yIEhhbmRsaW5nKio6IEludmFsaWQgYnVja2V0IG5hbWVzIHRocm93IGltbWVkaWF0ZWx5LiBBbGwgY2F0YWxvZ1xuXHQqIG9wZXJhdGlvbnMgcmV0dXJuIGB7IGRhdGEsIGVycm9yIH1gIHdoZXJlIGVycm9ycyBhcmUgYEljZWJlcmdFcnJvcmAgaW5zdGFuY2VzIGZyb20gaWNlYmVyZy1qcy5cblx0KiBVc2UgaGVscGVyIG1ldGhvZHMgbGlrZSBgZXJyb3IuaXNOb3RGb3VuZCgpYCBvciBjaGVjayBgZXJyb3Iuc3RhdHVzYCBmb3Igc3BlY2lmaWMgZXJyb3IgaGFuZGxpbmcuXG5cdCogVXNlIGAudGhyb3dPbkVycm9yKClgIG9uIHRoZSBhbmFseXRpY3MgY2xpZW50IGlmIHlvdSBwcmVmZXIgZXhjZXB0aW9ucyBmb3IgY2F0YWxvZyBvcGVyYXRpb25zLlxuXHQqXG5cdCogKipDbGVhbnVwIE9wZXJhdGlvbnMqKjogV2hlbiB1c2luZyBgZHJvcFRhYmxlYCwgdGhlIGBwdXJnZTogdHJ1ZWAgb3B0aW9uIHBlcm1hbmVudGx5XG5cdCogZGVsZXRlcyBhbGwgdGFibGUgZGF0YS4gV2l0aG91dCBpdCwgdGhlIHRhYmxlIGlzIG1hcmtlZCBhcyBkZWxldGVkIGJ1dCBkYXRhIHJlbWFpbnMuXG5cdCpcblx0KiAqKkxpYnJhcnkgRGVwZW5kZW5jeSoqOiBUaGUgcmV0dXJuZWQgY2F0YWxvZyB3cmFwcyBgSWNlYmVyZ1Jlc3RDYXRhbG9nYCBmcm9tIGljZWJlcmctanMuXG5cdCogRm9yIGNvbXBsZXRlIEFQSSBkb2N1bWVudGF0aW9uIGFuZCBhZHZhbmNlZCB1c2FnZSwgcmVmZXIgdG8gdGhlXG5cdCogW2ljZWJlcmctanMgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9zdXBhYmFzZS5naXRodWIuaW8vaWNlYmVyZy1qcy8pLlxuXHQqL1xuXHRmcm9tKGJ1Y2tldE5hbWUpIHtcblx0XHR2YXIgX3RoaXM0ID0gdGhpcztcblx0XHRpZiAoIWlzVmFsaWRCdWNrZXROYW1lKGJ1Y2tldE5hbWUpKSB0aHJvdyBuZXcgU3RvcmFnZUVycm9yKFwiSW52YWxpZCBidWNrZXQgbmFtZTogRmlsZSwgZm9sZGVyLCBhbmQgYnVja2V0IG5hbWVzIG11c3QgZm9sbG93IEFXUyBvYmplY3Qga2V5IG5hbWluZyBndWlkZWxpbmVzIGFuZCBzaG91bGQgYXZvaWQgdGhlIHVzZSBvZiBhbnkgb3RoZXIgY2hhcmFjdGVycy5cIik7XG5cdFx0Y29uc3QgY2F0YWxvZyA9IG5ldyBJY2ViZXJnUmVzdENhdGFsb2coe1xuXHRcdFx0YmFzZVVybDogdGhpcy51cmwsXG5cdFx0XHRjYXRhbG9nTmFtZTogYnVja2V0TmFtZSxcblx0XHRcdGF1dGg6IHtcblx0XHRcdFx0dHlwZTogXCJjdXN0b21cIixcblx0XHRcdFx0Z2V0SGVhZGVyczogYXN5bmMgKCkgPT4gX3RoaXM0LmhlYWRlcnNcblx0XHRcdH0sXG5cdFx0XHRmZXRjaDogdGhpcy5mZXRjaFxuXHRcdH0pO1xuXHRcdGNvbnN0IHNob3VsZFRocm93T25FcnJvciA9IHRoaXMuc2hvdWxkVGhyb3dPbkVycm9yO1xuXHRcdHJldHVybiBuZXcgUHJveHkoY2F0YWxvZywgeyBnZXQodGFyZ2V0LCBwcm9wKSB7XG5cdFx0XHRjb25zdCB2YWx1ZSA9IHRhcmdldFtwcm9wXTtcblx0XHRcdGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIHZhbHVlO1xuXHRcdFx0cmV0dXJuIGFzeW5jICguLi5hcmdzKSA9PiB7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGRhdGE6IGF3YWl0IHZhbHVlLmFwcGx5KHRhcmdldCwgYXJncyksXG5cdFx0XHRcdFx0XHRlcnJvcjogbnVsbFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdFx0aWYgKHNob3VsZFRocm93T25FcnJvcikgdGhyb3cgZXJyb3I7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGRhdGE6IG51bGwsXG5cdFx0XHRcdFx0XHRlcnJvclxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fSB9KTtcblx0fVxufTtcblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gc3JjL3BhY2thZ2VzL1ZlY3RvckluZGV4QXBpLnRzXG4vKipcbiogQGhpZGRlblxuKiBCYXNlIGltcGxlbWVudGF0aW9uIGZvciB2ZWN0b3IgaW5kZXggb3BlcmF0aW9ucy5cbiogVXNlIHtAbGluayBWZWN0b3JCdWNrZXRTY29wZX0gdmlhIGBzdXBhYmFzZS5zdG9yYWdlLnZlY3RvcnMuZnJvbSgnYnVja2V0JylgIGluc3RlYWQuXG4qL1xudmFyIFZlY3RvckluZGV4QXBpID0gY2xhc3MgZXh0ZW5kcyBCYXNlQXBpQ2xpZW50IHtcblx0LyoqIENyZWF0ZXMgYSBuZXcgVmVjdG9ySW5kZXhBcGkgaW5zdGFuY2UgKi9cblx0Y29uc3RydWN0b3IodXJsLCBoZWFkZXJzID0ge30sIGZldGNoJDEpIHtcblx0XHRjb25zdCBmaW5hbFVybCA9IHVybC5yZXBsYWNlKC9cXC8kLywgXCJcIik7XG5cdFx0Y29uc3QgZmluYWxIZWFkZXJzID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIERFRkFVTFRfSEVBREVSUyksIHt9LCB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sIGhlYWRlcnMpO1xuXHRcdHN1cGVyKGZpbmFsVXJsLCBmaW5hbEhlYWRlcnMsIGZldGNoJDEsIFwidmVjdG9yc1wiKTtcblx0fVxuXHQvKiogQ3JlYXRlcyBhIG5ldyB2ZWN0b3IgaW5kZXggd2l0aGluIGEgYnVja2V0ICovXG5cdGFzeW5jIGNyZWF0ZUluZGV4KG9wdGlvbnMpIHtcblx0XHR2YXIgX3RoaXMgPSB0aGlzO1xuXHRcdHJldHVybiBfdGhpcy5oYW5kbGVPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHZlY3RvcnNBcGkucG9zdChfdGhpcy5mZXRjaCwgYCR7X3RoaXMudXJsfS9DcmVhdGVJbmRleGAsIG9wdGlvbnMsIHsgaGVhZGVyczogX3RoaXMuaGVhZGVycyB9KSB8fCB7fTtcblx0XHR9KTtcblx0fVxuXHQvKiogUmV0cmlldmVzIG1ldGFkYXRhIGZvciBhIHNwZWNpZmljIHZlY3RvciBpbmRleCAqL1xuXHRhc3luYyBnZXRJbmRleCh2ZWN0b3JCdWNrZXROYW1lLCBpbmRleE5hbWUpIHtcblx0XHR2YXIgX3RoaXMyID0gdGhpcztcblx0XHRyZXR1cm4gX3RoaXMyLmhhbmRsZU9wZXJhdGlvbihhc3luYyAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXdhaXQgdmVjdG9yc0FwaS5wb3N0KF90aGlzMi5mZXRjaCwgYCR7X3RoaXMyLnVybH0vR2V0SW5kZXhgLCB7XG5cdFx0XHRcdHZlY3RvckJ1Y2tldE5hbWUsXG5cdFx0XHRcdGluZGV4TmFtZVxuXHRcdFx0fSwgeyBoZWFkZXJzOiBfdGhpczIuaGVhZGVycyB9KTtcblx0XHR9KTtcblx0fVxuXHQvKiogTGlzdHMgdmVjdG9yIGluZGV4ZXMgd2l0aGluIGEgYnVja2V0IHdpdGggb3B0aW9uYWwgZmlsdGVyaW5nIGFuZCBwYWdpbmF0aW9uICovXG5cdGFzeW5jIGxpc3RJbmRleGVzKG9wdGlvbnMpIHtcblx0XHR2YXIgX3RoaXMzID0gdGhpcztcblx0XHRyZXR1cm4gX3RoaXMzLmhhbmRsZU9wZXJhdGlvbihhc3luYyAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXdhaXQgdmVjdG9yc0FwaS5wb3N0KF90aGlzMy5mZXRjaCwgYCR7X3RoaXMzLnVybH0vTGlzdEluZGV4ZXNgLCBvcHRpb25zLCB7IGhlYWRlcnM6IF90aGlzMy5oZWFkZXJzIH0pO1xuXHRcdH0pO1xuXHR9XG5cdC8qKiBEZWxldGVzIGEgdmVjdG9yIGluZGV4IGFuZCBhbGwgaXRzIGRhdGEgKi9cblx0YXN5bmMgZGVsZXRlSW5kZXgodmVjdG9yQnVja2V0TmFtZSwgaW5kZXhOYW1lKSB7XG5cdFx0dmFyIF90aGlzNCA9IHRoaXM7XG5cdFx0cmV0dXJuIF90aGlzNC5oYW5kbGVPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHZlY3RvcnNBcGkucG9zdChfdGhpczQuZmV0Y2gsIGAke190aGlzNC51cmx9L0RlbGV0ZUluZGV4YCwge1xuXHRcdFx0XHR2ZWN0b3JCdWNrZXROYW1lLFxuXHRcdFx0XHRpbmRleE5hbWVcblx0XHRcdH0sIHsgaGVhZGVyczogX3RoaXM0LmhlYWRlcnMgfSkgfHwge307XG5cdFx0fSk7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9wYWNrYWdlcy9WZWN0b3JEYXRhQXBpLnRzXG4vKipcbiogQGhpZGRlblxuKiBCYXNlIGltcGxlbWVudGF0aW9uIGZvciB2ZWN0b3IgZGF0YSBvcGVyYXRpb25zLlxuKiBVc2Uge0BsaW5rIFZlY3RvckluZGV4U2NvcGV9IHZpYSBgc3VwYWJhc2Uuc3RvcmFnZS52ZWN0b3JzLmZyb20oJ2J1Y2tldCcpLmluZGV4KCdpZHgnKWAgaW5zdGVhZC5cbiovXG52YXIgVmVjdG9yRGF0YUFwaSA9IGNsYXNzIGV4dGVuZHMgQmFzZUFwaUNsaWVudCB7XG5cdC8qKiBDcmVhdGVzIGEgbmV3IFZlY3RvckRhdGFBcGkgaW5zdGFuY2UgKi9cblx0Y29uc3RydWN0b3IodXJsLCBoZWFkZXJzID0ge30sIGZldGNoJDEpIHtcblx0XHRjb25zdCBmaW5hbFVybCA9IHVybC5yZXBsYWNlKC9cXC8kLywgXCJcIik7XG5cdFx0Y29uc3QgZmluYWxIZWFkZXJzID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIERFRkFVTFRfSEVBREVSUyksIHt9LCB7IFwiQ29udGVudC1UeXBlXCI6IFwiYXBwbGljYXRpb24vanNvblwiIH0sIGhlYWRlcnMpO1xuXHRcdHN1cGVyKGZpbmFsVXJsLCBmaW5hbEhlYWRlcnMsIGZldGNoJDEsIFwidmVjdG9yc1wiKTtcblx0fVxuXHQvKiogSW5zZXJ0cyBvciB1cGRhdGVzIHZlY3RvcnMgaW4gYmF0Y2ggKDEtNTAwIHBlciByZXF1ZXN0KSAqL1xuXHRhc3luYyBwdXRWZWN0b3JzKG9wdGlvbnMpIHtcblx0XHR2YXIgX3RoaXMgPSB0aGlzO1xuXHRcdGlmIChvcHRpb25zLnZlY3RvcnMubGVuZ3RoIDwgMSB8fCBvcHRpb25zLnZlY3RvcnMubGVuZ3RoID4gNTAwKSB0aHJvdyBuZXcgRXJyb3IoXCJWZWN0b3IgYmF0Y2ggc2l6ZSBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNTAwIGl0ZW1zXCIpO1xuXHRcdHJldHVybiBfdGhpcy5oYW5kbGVPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHZlY3RvcnNBcGkucG9zdChfdGhpcy5mZXRjaCwgYCR7X3RoaXMudXJsfS9QdXRWZWN0b3JzYCwgb3B0aW9ucywgeyBoZWFkZXJzOiBfdGhpcy5oZWFkZXJzIH0pIHx8IHt9O1xuXHRcdH0pO1xuXHR9XG5cdC8qKiBSZXRyaWV2ZXMgdmVjdG9ycyBieSB0aGVpciBrZXlzIGluIGJhdGNoICovXG5cdGFzeW5jIGdldFZlY3RvcnMob3B0aW9ucykge1xuXHRcdHZhciBfdGhpczIgPSB0aGlzO1xuXHRcdHJldHVybiBfdGhpczIuaGFuZGxlT3BlcmF0aW9uKGFzeW5jICgpID0+IHtcblx0XHRcdHJldHVybiBhd2FpdCB2ZWN0b3JzQXBpLnBvc3QoX3RoaXMyLmZldGNoLCBgJHtfdGhpczIudXJsfS9HZXRWZWN0b3JzYCwgb3B0aW9ucywgeyBoZWFkZXJzOiBfdGhpczIuaGVhZGVycyB9KTtcblx0XHR9KTtcblx0fVxuXHQvKiogTGlzdHMgdmVjdG9ycyBpbiBhbiBpbmRleCB3aXRoIHBhZ2luYXRpb24gKi9cblx0YXN5bmMgbGlzdFZlY3RvcnMob3B0aW9ucykge1xuXHRcdHZhciBfdGhpczMgPSB0aGlzO1xuXHRcdGlmIChvcHRpb25zLnNlZ21lbnRDb3VudCAhPT0gdm9pZCAwKSB7XG5cdFx0XHRpZiAob3B0aW9ucy5zZWdtZW50Q291bnQgPCAxIHx8IG9wdGlvbnMuc2VnbWVudENvdW50ID4gMTYpIHRocm93IG5ldyBFcnJvcihcInNlZ21lbnRDb3VudCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgMTZcIik7XG5cdFx0XHRpZiAob3B0aW9ucy5zZWdtZW50SW5kZXggIT09IHZvaWQgMCkge1xuXHRcdFx0XHRpZiAob3B0aW9ucy5zZWdtZW50SW5kZXggPCAwIHx8IG9wdGlvbnMuc2VnbWVudEluZGV4ID49IG9wdGlvbnMuc2VnbWVudENvdW50KSB0aHJvdyBuZXcgRXJyb3IoYHNlZ21lbnRJbmRleCBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJHtvcHRpb25zLnNlZ21lbnRDb3VudCAtIDF9YCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBfdGhpczMuaGFuZGxlT3BlcmF0aW9uKGFzeW5jICgpID0+IHtcblx0XHRcdHJldHVybiBhd2FpdCB2ZWN0b3JzQXBpLnBvc3QoX3RoaXMzLmZldGNoLCBgJHtfdGhpczMudXJsfS9MaXN0VmVjdG9yc2AsIG9wdGlvbnMsIHsgaGVhZGVyczogX3RoaXMzLmhlYWRlcnMgfSk7XG5cdFx0fSk7XG5cdH1cblx0LyoqIFF1ZXJpZXMgZm9yIHNpbWlsYXIgdmVjdG9ycyB1c2luZyBhcHByb3hpbWF0ZSBuZWFyZXN0IG5laWdoYm9yIHNlYXJjaCAqL1xuXHRhc3luYyBxdWVyeVZlY3RvcnMob3B0aW9ucykge1xuXHRcdHZhciBfdGhpczQgPSB0aGlzO1xuXHRcdHJldHVybiBfdGhpczQuaGFuZGxlT3BlcmF0aW9uKGFzeW5jICgpID0+IHtcblx0XHRcdHJldHVybiBhd2FpdCB2ZWN0b3JzQXBpLnBvc3QoX3RoaXM0LmZldGNoLCBgJHtfdGhpczQudXJsfS9RdWVyeVZlY3RvcnNgLCBvcHRpb25zLCB7IGhlYWRlcnM6IF90aGlzNC5oZWFkZXJzIH0pO1xuXHRcdH0pO1xuXHR9XG5cdC8qKiBEZWxldGVzIHZlY3RvcnMgYnkgdGhlaXIga2V5cyBpbiBiYXRjaCAoMS01MDAgcGVyIHJlcXVlc3QpICovXG5cdGFzeW5jIGRlbGV0ZVZlY3RvcnMob3B0aW9ucykge1xuXHRcdHZhciBfdGhpczUgPSB0aGlzO1xuXHRcdGlmIChvcHRpb25zLmtleXMubGVuZ3RoIDwgMSB8fCBvcHRpb25zLmtleXMubGVuZ3RoID4gNTAwKSB0aHJvdyBuZXcgRXJyb3IoXCJLZXlzIGJhdGNoIHNpemUgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDUwMCBpdGVtc1wiKTtcblx0XHRyZXR1cm4gX3RoaXM1LmhhbmRsZU9wZXJhdGlvbihhc3luYyAoKSA9PiB7XG5cdFx0XHRyZXR1cm4gYXdhaXQgdmVjdG9yc0FwaS5wb3N0KF90aGlzNS5mZXRjaCwgYCR7X3RoaXM1LnVybH0vRGVsZXRlVmVjdG9yc2AsIG9wdGlvbnMsIHsgaGVhZGVyczogX3RoaXM1LmhlYWRlcnMgfSkgfHwge307XG5cdFx0fSk7XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9wYWNrYWdlcy9WZWN0b3JCdWNrZXRBcGkudHNcbi8qKlxuKiBAaGlkZGVuXG4qIEJhc2UgaW1wbGVtZW50YXRpb24gZm9yIHZlY3RvciBidWNrZXQgb3BlcmF0aW9ucy5cbiogVXNlIHtAbGluayBTdG9yYWdlVmVjdG9yc0NsaWVudH0gdmlhIGBzdXBhYmFzZS5zdG9yYWdlLnZlY3RvcnNgIGluc3RlYWQuXG4qL1xudmFyIFZlY3RvckJ1Y2tldEFwaSA9IGNsYXNzIGV4dGVuZHMgQmFzZUFwaUNsaWVudCB7XG5cdC8qKiBDcmVhdGVzIGEgbmV3IFZlY3RvckJ1Y2tldEFwaSBpbnN0YW5jZSAqL1xuXHRjb25zdHJ1Y3Rvcih1cmwsIGhlYWRlcnMgPSB7fSwgZmV0Y2gkMSkge1xuXHRcdGNvbnN0IGZpbmFsVXJsID0gdXJsLnJlcGxhY2UoL1xcLyQvLCBcIlwiKTtcblx0XHRjb25zdCBmaW5hbEhlYWRlcnMgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgREVGQVVMVF9IRUFERVJTKSwge30sIHsgXCJDb250ZW50LVR5cGVcIjogXCJhcHBsaWNhdGlvbi9qc29uXCIgfSwgaGVhZGVycyk7XG5cdFx0c3VwZXIoZmluYWxVcmwsIGZpbmFsSGVhZGVycywgZmV0Y2gkMSwgXCJ2ZWN0b3JzXCIpO1xuXHR9XG5cdC8qKiBDcmVhdGVzIGEgbmV3IHZlY3RvciBidWNrZXQgKi9cblx0YXN5bmMgY3JlYXRlQnVja2V0KHZlY3RvckJ1Y2tldE5hbWUpIHtcblx0XHR2YXIgX3RoaXMgPSB0aGlzO1xuXHRcdHJldHVybiBfdGhpcy5oYW5kbGVPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHZlY3RvcnNBcGkucG9zdChfdGhpcy5mZXRjaCwgYCR7X3RoaXMudXJsfS9DcmVhdGVWZWN0b3JCdWNrZXRgLCB7IHZlY3RvckJ1Y2tldE5hbWUgfSwgeyBoZWFkZXJzOiBfdGhpcy5oZWFkZXJzIH0pIHx8IHt9O1xuXHRcdH0pO1xuXHR9XG5cdC8qKiBSZXRyaWV2ZXMgbWV0YWRhdGEgZm9yIGEgc3BlY2lmaWMgdmVjdG9yIGJ1Y2tldCAqL1xuXHRhc3luYyBnZXRCdWNrZXQodmVjdG9yQnVja2V0TmFtZSkge1xuXHRcdHZhciBfdGhpczIgPSB0aGlzO1xuXHRcdHJldHVybiBfdGhpczIuaGFuZGxlT3BlcmF0aW9uKGFzeW5jICgpID0+IHtcblx0XHRcdHJldHVybiBhd2FpdCB2ZWN0b3JzQXBpLnBvc3QoX3RoaXMyLmZldGNoLCBgJHtfdGhpczIudXJsfS9HZXRWZWN0b3JCdWNrZXRgLCB7IHZlY3RvckJ1Y2tldE5hbWUgfSwgeyBoZWFkZXJzOiBfdGhpczIuaGVhZGVycyB9KTtcblx0XHR9KTtcblx0fVxuXHQvKiogTGlzdHMgdmVjdG9yIGJ1Y2tldHMgd2l0aCBvcHRpb25hbCBmaWx0ZXJpbmcgYW5kIHBhZ2luYXRpb24gKi9cblx0YXN5bmMgbGlzdEJ1Y2tldHMob3B0aW9ucyA9IHt9KSB7XG5cdFx0dmFyIF90aGlzMyA9IHRoaXM7XG5cdFx0cmV0dXJuIF90aGlzMy5oYW5kbGVPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHZlY3RvcnNBcGkucG9zdChfdGhpczMuZmV0Y2gsIGAke190aGlzMy51cmx9L0xpc3RWZWN0b3JCdWNrZXRzYCwgb3B0aW9ucywgeyBoZWFkZXJzOiBfdGhpczMuaGVhZGVycyB9KTtcblx0XHR9KTtcblx0fVxuXHQvKiogRGVsZXRlcyBhIHZlY3RvciBidWNrZXQgKG11c3QgYmUgZW1wdHkgZmlyc3QpICovXG5cdGFzeW5jIGRlbGV0ZUJ1Y2tldCh2ZWN0b3JCdWNrZXROYW1lKSB7XG5cdFx0dmFyIF90aGlzNCA9IHRoaXM7XG5cdFx0cmV0dXJuIF90aGlzNC5oYW5kbGVPcGVyYXRpb24oYXN5bmMgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIGF3YWl0IHZlY3RvcnNBcGkucG9zdChfdGhpczQuZmV0Y2gsIGAke190aGlzNC51cmx9L0RlbGV0ZVZlY3RvckJ1Y2tldGAsIHsgdmVjdG9yQnVja2V0TmFtZSB9LCB7IGhlYWRlcnM6IF90aGlzNC5oZWFkZXJzIH0pIHx8IHt9O1xuXHRcdH0pO1xuXHR9XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvcGFja2FnZXMvU3RvcmFnZVZlY3RvcnNDbGllbnQudHNcbi8qKlxuKlxuKiBAYWxwaGFcbipcbiogTWFpbiBjbGllbnQgZm9yIGludGVyYWN0aW5nIHdpdGggUzMgVmVjdG9ycyBBUElcbiogUHJvdmlkZXMgYWNjZXNzIHRvIGJ1Y2tldCwgaW5kZXgsIGFuZCB2ZWN0b3IgZGF0YSBvcGVyYXRpb25zXG4qXG4qICoqUHVibGljIGFscGhhOioqIFRoaXMgQVBJIGlzIHBhcnQgb2YgYSBwdWJsaWMgYWxwaGEgcmVsZWFzZSBhbmQgbWF5IG5vdCBiZSBhdmFpbGFibGUgdG8geW91ciBhY2NvdW50IHR5cGUuXG4qXG4qICoqVXNhZ2UgUGF0dGVybnM6KipcbipcbiogYGBgdHlwZXNjcmlwdFxuKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuKiAgLnN0b3JhZ2VcbiogIC52ZWN0b3JzXG4qICAuY3JlYXRlQnVja2V0KCdlbWJlZGRpbmdzLXByb2QnKVxuKlxuKiAvLyBBY2Nlc3MgaW5kZXggb3BlcmF0aW9ucyB2aWEgYnVja2V0c1xuKiBjb25zdCBidWNrZXQgPSBzdXBhYmFzZS5zdG9yYWdlLnZlY3RvcnMuZnJvbSgnZW1iZWRkaW5ncy1wcm9kJylcbiogYXdhaXQgYnVja2V0LmNyZWF0ZUluZGV4KHtcbiogICBpbmRleE5hbWU6ICdkb2N1bWVudHMnLFxuKiAgIGRhdGFUeXBlOiAnZmxvYXQzMicsXG4qICAgZGltZW5zaW9uOiAxNTM2LFxuKiAgIGRpc3RhbmNlTWV0cmljOiAnY29zaW5lJ1xuKiB9KVxuKlxuKiAvLyBBY2Nlc3MgdmVjdG9yIG9wZXJhdGlvbnMgdmlhIGluZGV4XG4qIGNvbnN0IGluZGV4ID0gYnVja2V0LmluZGV4KCdkb2N1bWVudHMnKVxuKiBhd2FpdCBpbmRleC5wdXRWZWN0b3JzKHtcbiogICB2ZWN0b3JzOiBbXG4qICAgICB7IGtleTogJ2RvYy0xJywgZGF0YTogeyBmbG9hdDMyOiBbLi4uXSB9LCBtZXRhZGF0YTogeyB0aXRsZTogJ0ludHJvJyB9IH1cbiogICBdXG4qIH0pXG4qXG4qIC8vIFF1ZXJ5IHNpbWlsYXIgdmVjdG9yc1xuKiBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGluZGV4LnF1ZXJ5VmVjdG9ycyh7XG4qICAgcXVlcnlWZWN0b3I6IHsgZmxvYXQzMjogWy4uLl0gfSxcbiogICB0b3BLOiA1LFxuKiAgIHJldHVybkRpc3RhbmNlOiB0cnVlXG4qIH0pXG4qIGBgYFxuKi9cbnZhciBTdG9yYWdlVmVjdG9yc0NsaWVudCA9IGNsYXNzIGV4dGVuZHMgVmVjdG9yQnVja2V0QXBpIHtcblx0LyoqXG5cdCogQGFscGhhXG5cdCpcblx0KiBDcmVhdGVzIGEgU3RvcmFnZVZlY3RvcnNDbGllbnQgdGhhdCBjYW4gbWFuYWdlIGJ1Y2tldHMsIGluZGV4ZXMsIGFuZCB2ZWN0b3JzLlxuXHQqXG5cdCogKipQdWJsaWMgYWxwaGE6KiogVGhpcyBBUEkgaXMgcGFydCBvZiBhIHB1YmxpYyBhbHBoYSByZWxlYXNlIGFuZCBtYXkgbm90IGJlIGF2YWlsYWJsZSB0byB5b3VyIGFjY291bnQgdHlwZS5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IFZlY3RvciBCdWNrZXRzXG5cdCogQHBhcmFtIHVybCAtIEJhc2UgVVJMIG9mIHRoZSBTdG9yYWdlIFZlY3RvcnMgUkVTVCBBUEkuXG5cdCogQHBhcmFtIG9wdGlvbnMuaGVhZGVycyAtIE9wdGlvbmFsIGhlYWRlcnMgKGZvciBleGFtcGxlIGBBdXRob3JpemF0aW9uYCkgYXBwbGllZCB0byBldmVyeSByZXF1ZXN0LlxuXHQqIEBwYXJhbSBvcHRpb25zLmZldGNoIC0gT3B0aW9uYWwgY3VzdG9tIGBmZXRjaGAgaW1wbGVtZW50YXRpb24gZm9yIG5vbi1icm93c2VyIHJ1bnRpbWVzLlxuXHQqXG5cdCogQGV4YW1wbGUgVXNpbmcgc3VwYWJhc2UtanMgKHJlY29tbWVuZGVkKVxuXHQqIGBgYHR5cGVzY3JpcHRcblx0KiBpbXBvcnQgeyBjcmVhdGVDbGllbnQgfSBmcm9tICdAc3VwYWJhc2Uvc3VwYWJhc2UtanMnXG5cdCpcblx0KiBjb25zdCBzdXBhYmFzZSA9IGNyZWF0ZUNsaWVudCgnaHR0cHM6Ly94eXpjb21wYW55LnN1cGFiYXNlLmNvJywgJ3lvdXItcHVibGlzaGFibGUta2V5Jylcblx0KiBjb25zdCBidWNrZXQgPSBzdXBhYmFzZS5zdG9yYWdlLnZlY3RvcnMuZnJvbSgnZW1iZWRkaW5ncy1wcm9kJylcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIFN0YW5kYWxvbmUgaW1wb3J0IGZvciBidW5kbGUtc2Vuc2l0aXZlIGVudmlyb25tZW50c1xuXHQqIGBgYHR5cGVzY3JpcHRcblx0KiBpbXBvcnQgeyBTdG9yYWdlVmVjdG9yc0NsaWVudCB9IGZyb20gJ0BzdXBhYmFzZS9zdG9yYWdlLWpzJ1xuXHQqXG5cdCogY29uc3QgY2xpZW50ID0gbmV3IFN0b3JhZ2VWZWN0b3JzQ2xpZW50KHVybCwgb3B0aW9ucylcblx0KiBgYGBcblx0Ki9cblx0Y29uc3RydWN0b3IodXJsLCBvcHRpb25zID0ge30pIHtcblx0XHRzdXBlcih1cmwsIG9wdGlvbnMuaGVhZGVycyB8fCB7fSwgb3B0aW9ucy5mZXRjaCk7XG5cdH1cblx0LyoqXG5cdCpcblx0KiBAYWxwaGFcblx0KlxuXHQqIEFjY2VzcyBvcGVyYXRpb25zIGZvciBhIHNwZWNpZmljIHZlY3RvciBidWNrZXRcblx0KiBSZXR1cm5zIGEgc2NvcGVkIGNsaWVudCBmb3IgaW5kZXggYW5kIHZlY3RvciBvcGVyYXRpb25zIHdpdGhpbiB0aGUgYnVja2V0XG5cdCpcblx0KiAqKlB1YmxpYyBhbHBoYToqKiBUaGlzIEFQSSBpcyBwYXJ0IG9mIGEgcHVibGljIGFscGhhIHJlbGVhc2UgYW5kIG1heSBub3QgYmUgYXZhaWxhYmxlIHRvIHlvdXIgYWNjb3VudCB0eXBlLlxuXHQqXG5cdCogQGNhdGVnb3J5IFN0b3JhZ2Vcblx0KiBAc3ViY2F0ZWdvcnkgVmVjdG9yIEJ1Y2tldHNcblx0KiBAcGFyYW0gdmVjdG9yQnVja2V0TmFtZSAtIE5hbWUgb2YgdGhlIHZlY3RvciBidWNrZXRcblx0KiBAcmV0dXJucyBCdWNrZXQtc2NvcGVkIGNsaWVudCB3aXRoIGluZGV4IGFuZCB2ZWN0b3Igb3BlcmF0aW9uc1xuXHQqXG5cdCogQGV4YW1wbGUgQWNjZXNzaW5nIGEgdmVjdG9yIGJ1Y2tldFxuXHQqIGBgYHR5cGVzY3JpcHRcblx0KiBjb25zdCBidWNrZXQgPSBzdXBhYmFzZS5zdG9yYWdlLnZlY3RvcnMuZnJvbSgnZW1iZWRkaW5ncy1wcm9kJylcblx0KiBgYGBcblx0Ki9cblx0ZnJvbSh2ZWN0b3JCdWNrZXROYW1lKSB7XG5cdFx0cmV0dXJuIG5ldyBWZWN0b3JCdWNrZXRTY29wZSh0aGlzLnVybCwgdGhpcy5oZWFkZXJzLCB2ZWN0b3JCdWNrZXROYW1lLCB0aGlzLmZldGNoKTtcblx0fVxuXHQvKipcblx0KlxuXHQqIEBhbHBoYVxuXHQqXG5cdCogQ3JlYXRlcyBhIG5ldyB2ZWN0b3IgYnVja2V0XG5cdCogVmVjdG9yIGJ1Y2tldHMgYXJlIGNvbnRhaW5lcnMgZm9yIHZlY3RvciBpbmRleGVzIGFuZCB0aGVpciBkYXRhXG5cdCpcblx0KiAqKlB1YmxpYyBhbHBoYToqKiBUaGlzIEFQSSBpcyBwYXJ0IG9mIGEgcHVibGljIGFscGhhIHJlbGVhc2UgYW5kIG1heSBub3QgYmUgYXZhaWxhYmxlIHRvIHlvdXIgYWNjb3VudCB0eXBlLlxuXHQqXG5cdCogQGNhdGVnb3J5IFN0b3JhZ2Vcblx0KiBAc3ViY2F0ZWdvcnkgVmVjdG9yIEJ1Y2tldHNcblx0KiBAcGFyYW0gdmVjdG9yQnVja2V0TmFtZSAtIFVuaXF1ZSBuYW1lIGZvciB0aGUgdmVjdG9yIGJ1Y2tldFxuXHQqIEByZXR1cm5zIFByb21pc2Ugd2l0aCBlbXB0eSByZXNwb25zZSBvbiBzdWNjZXNzIG9yIGVycm9yXG5cdCpcblx0KiBAZXhhbXBsZSBDcmVhdGluZyBhIHZlY3RvciBidWNrZXRcblx0KiBgYGB0eXBlc2NyaXB0XG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5zdG9yYWdlXG5cdCogICAudmVjdG9yc1xuXHQqICAgLmNyZWF0ZUJ1Y2tldCgnZW1iZWRkaW5ncy1wcm9kJylcblx0KiBgYGBcblx0Ki9cblx0YXN5bmMgY3JlYXRlQnVja2V0KHZlY3RvckJ1Y2tldE5hbWUpIHtcblx0XHR2YXIgX3N1cGVycHJvcF9nZXRDcmVhdGVCdWNrZXQgPSAoKSA9PiBzdXBlci5jcmVhdGVCdWNrZXQsIF90aGlzID0gdGhpcztcblx0XHRyZXR1cm4gX3N1cGVycHJvcF9nZXRDcmVhdGVCdWNrZXQoKS5jYWxsKF90aGlzLCB2ZWN0b3JCdWNrZXROYW1lKTtcblx0fVxuXHQvKipcblx0KlxuXHQqIEBhbHBoYVxuXHQqXG5cdCogUmV0cmlldmVzIG1ldGFkYXRhIGZvciBhIHNwZWNpZmljIHZlY3RvciBidWNrZXRcblx0KlxuXHQqICoqUHVibGljIGFscGhhOioqIFRoaXMgQVBJIGlzIHBhcnQgb2YgYSBwdWJsaWMgYWxwaGEgcmVsZWFzZSBhbmQgbWF5IG5vdCBiZSBhdmFpbGFibGUgdG8geW91ciBhY2NvdW50IHR5cGUuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBWZWN0b3IgQnVja2V0c1xuXHQqIEBwYXJhbSB2ZWN0b3JCdWNrZXROYW1lIC0gTmFtZSBvZiB0aGUgdmVjdG9yIGJ1Y2tldFxuXHQqIEByZXR1cm5zIFByb21pc2Ugd2l0aCBidWNrZXQgbWV0YWRhdGEgb3IgZXJyb3Jcblx0KlxuXHQqIEBleGFtcGxlIEdldCBidWNrZXQgbWV0YWRhdGFcblx0KiBgYGB0eXBlc2NyaXB0XG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5zdG9yYWdlXG5cdCogICAudmVjdG9yc1xuXHQqICAgLmdldEJ1Y2tldCgnZW1iZWRkaW5ncy1wcm9kJylcblx0KlxuXHQqIGNvbnNvbGUubG9nKCdCdWNrZXQgY3JlYXRlZDonLCBkYXRhPy52ZWN0b3JCdWNrZXQuY3JlYXRpb25UaW1lKVxuXHQqIGBgYFxuXHQqL1xuXHRhc3luYyBnZXRCdWNrZXQodmVjdG9yQnVja2V0TmFtZSkge1xuXHRcdHZhciBfc3VwZXJwcm9wX2dldEdldEJ1Y2tldCA9ICgpID0+IHN1cGVyLmdldEJ1Y2tldCwgX3RoaXMyID0gdGhpcztcblx0XHRyZXR1cm4gX3N1cGVycHJvcF9nZXRHZXRCdWNrZXQoKS5jYWxsKF90aGlzMiwgdmVjdG9yQnVja2V0TmFtZSk7XG5cdH1cblx0LyoqXG5cdCpcblx0KiBAYWxwaGFcblx0KlxuXHQqIExpc3RzIGFsbCB2ZWN0b3IgYnVja2V0cyB3aXRoIG9wdGlvbmFsIGZpbHRlcmluZyBhbmQgcGFnaW5hdGlvblxuXHQqXG5cdCogKipQdWJsaWMgYWxwaGE6KiogVGhpcyBBUEkgaXMgcGFydCBvZiBhIHB1YmxpYyBhbHBoYSByZWxlYXNlIGFuZCBtYXkgbm90IGJlIGF2YWlsYWJsZSB0byB5b3VyIGFjY291bnQgdHlwZS5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IFZlY3RvciBCdWNrZXRzXG5cdCogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBmaWx0ZXJzIChwcmVmaXgsIG1heFJlc3VsdHMsIG5leHRUb2tlbilcblx0KiBAcmV0dXJucyBQcm9taXNlIHdpdGggbGlzdCBvZiBidWNrZXRzIG9yIGVycm9yXG5cdCpcblx0KiBAZXhhbXBsZSBMaXN0IHZlY3RvciBidWNrZXRzXG5cdCogYGBgdHlwZXNjcmlwdFxuXHQqIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IGF3YWl0IHN1cGFiYXNlXG5cdCogICAuc3RvcmFnZVxuXHQqICAgLnZlY3RvcnNcblx0KiAgIC5saXN0QnVja2V0cyh7IHByZWZpeDogJ2VtYmVkZGluZ3MtJyB9KVxuXHQqXG5cdCogZGF0YT8udmVjdG9yQnVja2V0cy5mb3JFYWNoKGJ1Y2tldCA9PiB7XG5cdCogICBjb25zb2xlLmxvZyhidWNrZXQudmVjdG9yQnVja2V0TmFtZSlcblx0KiB9KVxuXHQqIGBgYFxuXHQqL1xuXHRhc3luYyBsaXN0QnVja2V0cyhvcHRpb25zID0ge30pIHtcblx0XHR2YXIgX3N1cGVycHJvcF9nZXRMaXN0QnVja2V0cyA9ICgpID0+IHN1cGVyLmxpc3RCdWNrZXRzLCBfdGhpczMgPSB0aGlzO1xuXHRcdHJldHVybiBfc3VwZXJwcm9wX2dldExpc3RCdWNrZXRzKCkuY2FsbChfdGhpczMsIG9wdGlvbnMpO1xuXHR9XG5cdC8qKlxuXHQqXG5cdCogQGFscGhhXG5cdCpcblx0KiBEZWxldGVzIGEgdmVjdG9yIGJ1Y2tldCAoYnVja2V0IG11c3QgYmUgZW1wdHkpXG5cdCogQWxsIGluZGV4ZXMgbXVzdCBiZSBkZWxldGVkIGJlZm9yZSBkZWxldGluZyB0aGUgYnVja2V0XG5cdCpcblx0KiAqKlB1YmxpYyBhbHBoYToqKiBUaGlzIEFQSSBpcyBwYXJ0IG9mIGEgcHVibGljIGFscGhhIHJlbGVhc2UgYW5kIG1heSBub3QgYmUgYXZhaWxhYmxlIHRvIHlvdXIgYWNjb3VudCB0eXBlLlxuXHQqXG5cdCogQGNhdGVnb3J5IFN0b3JhZ2Vcblx0KiBAc3ViY2F0ZWdvcnkgVmVjdG9yIEJ1Y2tldHNcblx0KiBAcGFyYW0gdmVjdG9yQnVja2V0TmFtZSAtIE5hbWUgb2YgdGhlIHZlY3RvciBidWNrZXQgdG8gZGVsZXRlXG5cdCogQHJldHVybnMgUHJvbWlzZSB3aXRoIGVtcHR5IHJlc3BvbnNlIG9uIHN1Y2Nlc3Mgb3IgZXJyb3Jcblx0KlxuXHQqIEBleGFtcGxlIERlbGV0ZSBhIHZlY3RvciBidWNrZXRcblx0KiBgYGB0eXBlc2NyaXB0XG5cdCogY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2Vcblx0KiAgIC5zdG9yYWdlXG5cdCogICAudmVjdG9yc1xuXHQqICAgLmRlbGV0ZUJ1Y2tldCgnZW1iZWRkaW5ncy1vbGQnKVxuXHQqIGBgYFxuXHQqL1xuXHRhc3luYyBkZWxldGVCdWNrZXQodmVjdG9yQnVja2V0TmFtZSkge1xuXHRcdHZhciBfc3VwZXJwcm9wX2dldERlbGV0ZUJ1Y2tldCA9ICgpID0+IHN1cGVyLmRlbGV0ZUJ1Y2tldCwgX3RoaXM0ID0gdGhpcztcblx0XHRyZXR1cm4gX3N1cGVycHJvcF9nZXREZWxldGVCdWNrZXQoKS5jYWxsKF90aGlzNCwgdmVjdG9yQnVja2V0TmFtZSk7XG5cdH1cbn07XG4vKipcbipcbiogQGFscGhhXG4qXG4qIFNjb3BlZCBjbGllbnQgZm9yIG9wZXJhdGlvbnMgd2l0aGluIGEgc3BlY2lmaWMgdmVjdG9yIGJ1Y2tldFxuKiBQcm92aWRlcyBpbmRleCBtYW5hZ2VtZW50IGFuZCBhY2Nlc3MgdG8gdmVjdG9yIG9wZXJhdGlvbnNcbipcbiogKipQdWJsaWMgYWxwaGE6KiogVGhpcyBBUEkgaXMgcGFydCBvZiBhIHB1YmxpYyBhbHBoYSByZWxlYXNlIGFuZCBtYXkgbm90IGJlIGF2YWlsYWJsZSB0byB5b3VyIGFjY291bnQgdHlwZS5cbiovXG52YXIgVmVjdG9yQnVja2V0U2NvcGUgPSBjbGFzcyBleHRlbmRzIFZlY3RvckluZGV4QXBpIHtcblx0LyoqXG5cdCogQGFscGhhXG5cdCpcblx0KiBDcmVhdGVzIGEgaGVscGVyIHRoYXQgYXV0b21hdGljYWxseSBzY29wZXMgYWxsIGluZGV4IG9wZXJhdGlvbnMgdG8gdGhlIHByb3ZpZGVkIGJ1Y2tldC5cblx0KlxuXHQqICoqUHVibGljIGFscGhhOioqIFRoaXMgQVBJIGlzIHBhcnQgb2YgYSBwdWJsaWMgYWxwaGEgcmVsZWFzZSBhbmQgbWF5IG5vdCBiZSBhdmFpbGFibGUgdG8geW91ciBhY2NvdW50IHR5cGUuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBWZWN0b3IgQnVja2V0c1xuXHQqIEBleGFtcGxlIENyZWF0aW5nIGEgdmVjdG9yIGJ1Y2tldCBzY29wZVxuXHQqIGBgYHR5cGVzY3JpcHRcblx0KiBjb25zdCBidWNrZXQgPSBzdXBhYmFzZS5zdG9yYWdlLnZlY3RvcnMuZnJvbSgnZW1iZWRkaW5ncy1wcm9kJylcblx0KiBgYGBcblx0Ki9cblx0Y29uc3RydWN0b3IodXJsLCBoZWFkZXJzLCB2ZWN0b3JCdWNrZXROYW1lLCBmZXRjaCQxKSB7XG5cdFx0c3VwZXIodXJsLCBoZWFkZXJzLCBmZXRjaCQxKTtcblx0XHR0aGlzLnZlY3RvckJ1Y2tldE5hbWUgPSB2ZWN0b3JCdWNrZXROYW1lO1xuXHR9XG5cdC8qKlxuXHQqXG5cdCogQGFscGhhXG5cdCpcblx0KiBDcmVhdGVzIGEgbmV3IHZlY3RvciBpbmRleCBpbiB0aGlzIGJ1Y2tldFxuXHQqIENvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgdGhlIGJ1Y2tldCBuYW1lXG5cdCpcblx0KiAqKlB1YmxpYyBhbHBoYToqKiBUaGlzIEFQSSBpcyBwYXJ0IG9mIGEgcHVibGljIGFscGhhIHJlbGVhc2UgYW5kIG1heSBub3QgYmUgYXZhaWxhYmxlIHRvIHlvdXIgYWNjb3VudCB0eXBlLlxuXHQqXG5cdCogQGNhdGVnb3J5IFN0b3JhZ2Vcblx0KiBAc3ViY2F0ZWdvcnkgVmVjdG9yIEJ1Y2tldHNcblx0KiBAcGFyYW0gb3B0aW9ucyAtIEluZGV4IGNvbmZpZ3VyYXRpb24gKHZlY3RvckJ1Y2tldE5hbWUgaXMgYXV0b21hdGljYWxseSBzZXQpXG5cdCogQHJldHVybnMgUHJvbWlzZSB3aXRoIGVtcHR5IHJlc3BvbnNlIG9uIHN1Y2Nlc3Mgb3IgZXJyb3Jcblx0KlxuXHQqIEBleGFtcGxlIENyZWF0aW5nIGEgdmVjdG9yIGluZGV4XG5cdCogYGBgdHlwZXNjcmlwdFxuXHQqIGNvbnN0IGJ1Y2tldCA9IHN1cGFiYXNlLnN0b3JhZ2UudmVjdG9ycy5mcm9tKCdlbWJlZGRpbmdzLXByb2QnKVxuXHQqIGF3YWl0IGJ1Y2tldC5jcmVhdGVJbmRleCh7XG5cdCogICBpbmRleE5hbWU6ICdkb2N1bWVudHMtb3BlbmFpJyxcblx0KiAgIGRhdGFUeXBlOiAnZmxvYXQzMicsXG5cdCogICBkaW1lbnNpb246IDE1MzYsXG5cdCogICBkaXN0YW5jZU1ldHJpYzogJ2Nvc2luZScsXG5cdCogICBtZXRhZGF0YUNvbmZpZ3VyYXRpb246IHtcblx0KiAgICAgbm9uRmlsdGVyYWJsZU1ldGFkYXRhS2V5czogWydyYXdfdGV4dCddXG5cdCogICB9XG5cdCogfSlcblx0KiBgYGBcblx0Ki9cblx0YXN5bmMgY3JlYXRlSW5kZXgob3B0aW9ucykge1xuXHRcdHZhciBfc3VwZXJwcm9wX2dldENyZWF0ZUluZGV4ID0gKCkgPT4gc3VwZXIuY3JlYXRlSW5kZXgsIF90aGlzNSA9IHRoaXM7XG5cdFx0cmV0dXJuIF9zdXBlcnByb3BfZ2V0Q3JlYXRlSW5kZXgoKS5jYWxsKF90aGlzNSwgX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG9wdGlvbnMpLCB7fSwgeyB2ZWN0b3JCdWNrZXROYW1lOiBfdGhpczUudmVjdG9yQnVja2V0TmFtZSB9KSk7XG5cdH1cblx0LyoqXG5cdCpcblx0KiBAYWxwaGFcblx0KlxuXHQqIExpc3RzIGluZGV4ZXMgaW4gdGhpcyBidWNrZXRcblx0KiBDb252ZW5pZW5jZSBtZXRob2QgdGhhdCBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHRoZSBidWNrZXQgbmFtZVxuXHQqXG5cdCogKipQdWJsaWMgYWxwaGE6KiogVGhpcyBBUEkgaXMgcGFydCBvZiBhIHB1YmxpYyBhbHBoYSByZWxlYXNlIGFuZCBtYXkgbm90IGJlIGF2YWlsYWJsZSB0byB5b3VyIGFjY291bnQgdHlwZS5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IFZlY3RvciBCdWNrZXRzXG5cdCogQHBhcmFtIG9wdGlvbnMgLSBMaXN0aW5nIG9wdGlvbnMgKHZlY3RvckJ1Y2tldE5hbWUgaXMgYXV0b21hdGljYWxseSBzZXQpXG5cdCogQHJldHVybnMgUHJvbWlzZSB3aXRoIHJlc3BvbnNlIGNvbnRhaW5pbmcgaW5kZXhlcyBhcnJheSBhbmQgcGFnaW5hdGlvbiB0b2tlbiBvciBlcnJvclxuXHQqXG5cdCogQGV4YW1wbGUgTGlzdCBpbmRleGVzXG5cdCogYGBgdHlwZXNjcmlwdFxuXHQqIGNvbnN0IGJ1Y2tldCA9IHN1cGFiYXNlLnN0b3JhZ2UudmVjdG9ycy5mcm9tKCdlbWJlZGRpbmdzLXByb2QnKVxuXHQqIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYnVja2V0Lmxpc3RJbmRleGVzKHsgcHJlZml4OiAnZG9jdW1lbnRzLScgfSlcblx0KiBgYGBcblx0Ki9cblx0YXN5bmMgbGlzdEluZGV4ZXMob3B0aW9ucyA9IHt9KSB7XG5cdFx0dmFyIF9zdXBlcnByb3BfZ2V0TGlzdEluZGV4ZXMgPSAoKSA9PiBzdXBlci5saXN0SW5kZXhlcywgX3RoaXM2ID0gdGhpcztcblx0XHRyZXR1cm4gX3N1cGVycHJvcF9nZXRMaXN0SW5kZXhlcygpLmNhbGwoX3RoaXM2LCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgb3B0aW9ucyksIHt9LCB7IHZlY3RvckJ1Y2tldE5hbWU6IF90aGlzNi52ZWN0b3JCdWNrZXROYW1lIH0pKTtcblx0fVxuXHQvKipcblx0KlxuXHQqIEBhbHBoYVxuXHQqXG5cdCogUmV0cmlldmVzIG1ldGFkYXRhIGZvciBhIHNwZWNpZmljIGluZGV4IGluIHRoaXMgYnVja2V0XG5cdCogQ29udmVuaWVuY2UgbWV0aG9kIHRoYXQgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgYnVja2V0IG5hbWVcblx0KlxuXHQqICoqUHVibGljIGFscGhhOioqIFRoaXMgQVBJIGlzIHBhcnQgb2YgYSBwdWJsaWMgYWxwaGEgcmVsZWFzZSBhbmQgbWF5IG5vdCBiZSBhdmFpbGFibGUgdG8geW91ciBhY2NvdW50IHR5cGUuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBWZWN0b3IgQnVja2V0c1xuXHQqIEBwYXJhbSBpbmRleE5hbWUgLSBOYW1lIG9mIHRoZSBpbmRleCB0byByZXRyaWV2ZVxuXHQqIEByZXR1cm5zIFByb21pc2Ugd2l0aCBpbmRleCBtZXRhZGF0YSBvciBlcnJvclxuXHQqXG5cdCogQGV4YW1wbGUgR2V0IGluZGV4IG1ldGFkYXRhXG5cdCogYGBgdHlwZXNjcmlwdFxuXHQqIGNvbnN0IGJ1Y2tldCA9IHN1cGFiYXNlLnN0b3JhZ2UudmVjdG9ycy5mcm9tKCdlbWJlZGRpbmdzLXByb2QnKVxuXHQqIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgYnVja2V0LmdldEluZGV4KCdkb2N1bWVudHMtb3BlbmFpJylcblx0KiBjb25zb2xlLmxvZygnRGltZW5zaW9uOicsIGRhdGE/LmluZGV4LmRpbWVuc2lvbilcblx0KiBgYGBcblx0Ki9cblx0YXN5bmMgZ2V0SW5kZXgoaW5kZXhOYW1lKSB7XG5cdFx0dmFyIF9zdXBlcnByb3BfZ2V0R2V0SW5kZXggPSAoKSA9PiBzdXBlci5nZXRJbmRleCwgX3RoaXM3ID0gdGhpcztcblx0XHRyZXR1cm4gX3N1cGVycHJvcF9nZXRHZXRJbmRleCgpLmNhbGwoX3RoaXM3LCBfdGhpczcudmVjdG9yQnVja2V0TmFtZSwgaW5kZXhOYW1lKTtcblx0fVxuXHQvKipcblx0KlxuXHQqIEBhbHBoYVxuXHQqXG5cdCogRGVsZXRlcyBhbiBpbmRleCBmcm9tIHRoaXMgYnVja2V0XG5cdCogQ29udmVuaWVuY2UgbWV0aG9kIHRoYXQgYXV0b21hdGljYWxseSBpbmNsdWRlcyB0aGUgYnVja2V0IG5hbWVcblx0KlxuXHQqICoqUHVibGljIGFscGhhOioqIFRoaXMgQVBJIGlzIHBhcnQgb2YgYSBwdWJsaWMgYWxwaGEgcmVsZWFzZSBhbmQgbWF5IG5vdCBiZSBhdmFpbGFibGUgdG8geW91ciBhY2NvdW50IHR5cGUuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBWZWN0b3IgQnVja2V0c1xuXHQqIEBwYXJhbSBpbmRleE5hbWUgLSBOYW1lIG9mIHRoZSBpbmRleCB0byBkZWxldGVcblx0KiBAcmV0dXJucyBQcm9taXNlIHdpdGggZW1wdHkgcmVzcG9uc2Ugb24gc3VjY2VzcyBvciBlcnJvclxuXHQqXG5cdCogQGV4YW1wbGUgRGVsZXRlIGFuIGluZGV4XG5cdCogYGBgdHlwZXNjcmlwdFxuXHQqIGNvbnN0IGJ1Y2tldCA9IHN1cGFiYXNlLnN0b3JhZ2UudmVjdG9ycy5mcm9tKCdlbWJlZGRpbmdzLXByb2QnKVxuXHQqIGF3YWl0IGJ1Y2tldC5kZWxldGVJbmRleCgnb2xkLWluZGV4Jylcblx0KiBgYGBcblx0Ki9cblx0YXN5bmMgZGVsZXRlSW5kZXgoaW5kZXhOYW1lKSB7XG5cdFx0dmFyIF9zdXBlcnByb3BfZ2V0RGVsZXRlSW5kZXggPSAoKSA9PiBzdXBlci5kZWxldGVJbmRleCwgX3RoaXM4ID0gdGhpcztcblx0XHRyZXR1cm4gX3N1cGVycHJvcF9nZXREZWxldGVJbmRleCgpLmNhbGwoX3RoaXM4LCBfdGhpczgudmVjdG9yQnVja2V0TmFtZSwgaW5kZXhOYW1lKTtcblx0fVxuXHQvKipcblx0KlxuXHQqIEBhbHBoYVxuXHQqXG5cdCogQWNjZXNzIG9wZXJhdGlvbnMgZm9yIGEgc3BlY2lmaWMgaW5kZXggd2l0aGluIHRoaXMgYnVja2V0XG5cdCogUmV0dXJucyBhIHNjb3BlZCBjbGllbnQgZm9yIHZlY3RvciBkYXRhIG9wZXJhdGlvbnNcblx0KlxuXHQqICoqUHVibGljIGFscGhhOioqIFRoaXMgQVBJIGlzIHBhcnQgb2YgYSBwdWJsaWMgYWxwaGEgcmVsZWFzZSBhbmQgbWF5IG5vdCBiZSBhdmFpbGFibGUgdG8geW91ciBhY2NvdW50IHR5cGUuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBWZWN0b3IgQnVja2V0c1xuXHQqIEBwYXJhbSBpbmRleE5hbWUgLSBOYW1lIG9mIHRoZSBpbmRleFxuXHQqIEByZXR1cm5zIEluZGV4LXNjb3BlZCBjbGllbnQgd2l0aCB2ZWN0b3IgZGF0YSBvcGVyYXRpb25zXG5cdCpcblx0KiBAZXhhbXBsZSBBY2Nlc3NpbmcgYW4gaW5kZXhcblx0KiBgYGB0eXBlc2NyaXB0XG5cdCogY29uc3QgaW5kZXggPSBzdXBhYmFzZS5zdG9yYWdlLnZlY3RvcnMuZnJvbSgnZW1iZWRkaW5ncy1wcm9kJykuaW5kZXgoJ2RvY3VtZW50cy1vcGVuYWknKVxuXHQqXG5cdCogLy8gSW5zZXJ0IHZlY3RvcnNcblx0KiBhd2FpdCBpbmRleC5wdXRWZWN0b3JzKHtcblx0KiAgIHZlY3RvcnM6IFtcblx0KiAgICAgeyBrZXk6ICdkb2MtMScsIGRhdGE6IHsgZmxvYXQzMjogWy4uLl0gfSwgbWV0YWRhdGE6IHsgdGl0bGU6ICdJbnRybycgfSB9XG5cdCogICBdXG5cdCogfSlcblx0KlxuXHQqIC8vIFF1ZXJ5IHNpbWlsYXIgdmVjdG9yc1xuXHQqIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgaW5kZXgucXVlcnlWZWN0b3JzKHtcblx0KiAgIHF1ZXJ5VmVjdG9yOiB7IGZsb2F0MzI6IFsuLi5dIH0sXG5cdCogICB0b3BLOiA1XG5cdCogfSlcblx0KiBgYGBcblx0Ki9cblx0aW5kZXgoaW5kZXhOYW1lKSB7XG5cdFx0cmV0dXJuIG5ldyBWZWN0b3JJbmRleFNjb3BlKHRoaXMudXJsLCB0aGlzLmhlYWRlcnMsIHRoaXMudmVjdG9yQnVja2V0TmFtZSwgaW5kZXhOYW1lLCB0aGlzLmZldGNoKTtcblx0fVxufTtcbi8qKlxuKlxuKiBAYWxwaGFcbipcbiogU2NvcGVkIGNsaWVudCBmb3Igb3BlcmF0aW9ucyB3aXRoaW4gYSBzcGVjaWZpYyB2ZWN0b3IgaW5kZXhcbiogUHJvdmlkZXMgdmVjdG9yIGRhdGEgb3BlcmF0aW9ucyAocHV0LCBnZXQsIGxpc3QsIHF1ZXJ5LCBkZWxldGUpXG4qXG4qICoqUHVibGljIGFscGhhOioqIFRoaXMgQVBJIGlzIHBhcnQgb2YgYSBwdWJsaWMgYWxwaGEgcmVsZWFzZSBhbmQgbWF5IG5vdCBiZSBhdmFpbGFibGUgdG8geW91ciBhY2NvdW50IHR5cGUuXG4qL1xudmFyIFZlY3RvckluZGV4U2NvcGUgPSBjbGFzcyBleHRlbmRzIFZlY3RvckRhdGFBcGkge1xuXHQvKipcblx0KlxuXHQqIEBhbHBoYVxuXHQqXG5cdCogQ3JlYXRlcyBhIGhlbHBlciB0aGF0IGF1dG9tYXRpY2FsbHkgc2NvcGVzIGFsbCB2ZWN0b3Igb3BlcmF0aW9ucyB0byB0aGUgcHJvdmlkZWQgYnVja2V0L2luZGV4IG5hbWVzLlxuXHQqXG5cdCogKipQdWJsaWMgYWxwaGE6KiogVGhpcyBBUEkgaXMgcGFydCBvZiBhIHB1YmxpYyBhbHBoYSByZWxlYXNlIGFuZCBtYXkgbm90IGJlIGF2YWlsYWJsZSB0byB5b3VyIGFjY291bnQgdHlwZS5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IFZlY3RvciBCdWNrZXRzXG5cdCogQGV4YW1wbGUgQ3JlYXRpbmcgYSB2ZWN0b3IgaW5kZXggc2NvcGVcblx0KiBgYGB0eXBlc2NyaXB0XG5cdCogY29uc3QgaW5kZXggPSBzdXBhYmFzZS5zdG9yYWdlLnZlY3RvcnMuZnJvbSgnZW1iZWRkaW5ncy1wcm9kJykuaW5kZXgoJ2RvY3VtZW50cy1vcGVuYWknKVxuXHQqIGBgYFxuXHQqL1xuXHRjb25zdHJ1Y3Rvcih1cmwsIGhlYWRlcnMsIHZlY3RvckJ1Y2tldE5hbWUsIGluZGV4TmFtZSwgZmV0Y2gkMSkge1xuXHRcdHN1cGVyKHVybCwgaGVhZGVycywgZmV0Y2gkMSk7XG5cdFx0dGhpcy52ZWN0b3JCdWNrZXROYW1lID0gdmVjdG9yQnVja2V0TmFtZTtcblx0XHR0aGlzLmluZGV4TmFtZSA9IGluZGV4TmFtZTtcblx0fVxuXHQvKipcblx0KlxuXHQqIEBhbHBoYVxuXHQqXG5cdCogSW5zZXJ0cyBvciB1cGRhdGVzIHZlY3RvcnMgaW4gdGhpcyBpbmRleFxuXHQqIENvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgYnVja2V0IGFuZCBpbmRleCBuYW1lc1xuXHQqXG5cdCogKipQdWJsaWMgYWxwaGE6KiogVGhpcyBBUEkgaXMgcGFydCBvZiBhIHB1YmxpYyBhbHBoYSByZWxlYXNlIGFuZCBtYXkgbm90IGJlIGF2YWlsYWJsZSB0byB5b3VyIGFjY291bnQgdHlwZS5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IFZlY3RvciBCdWNrZXRzXG5cdCogQHBhcmFtIG9wdGlvbnMgLSBWZWN0b3IgaW5zZXJ0aW9uIG9wdGlvbnMgKGJ1Y2tldCBhbmQgaW5kZXggbmFtZXMgYXV0b21hdGljYWxseSBzZXQpXG5cdCogQHJldHVybnMgUHJvbWlzZSB3aXRoIGVtcHR5IHJlc3BvbnNlIG9uIHN1Y2Nlc3Mgb3IgZXJyb3Jcblx0KlxuXHQqIEBleGFtcGxlIEluc2VydCB2ZWN0b3JzIGludG8gYW4gaW5kZXhcblx0KiBgYGB0eXBlc2NyaXB0XG5cdCogY29uc3QgaW5kZXggPSBzdXBhYmFzZS5zdG9yYWdlLnZlY3RvcnMuZnJvbSgnZW1iZWRkaW5ncy1wcm9kJykuaW5kZXgoJ2RvY3VtZW50cy1vcGVuYWknKVxuXHQqIGF3YWl0IGluZGV4LnB1dFZlY3RvcnMoe1xuXHQqICAgdmVjdG9yczogW1xuXHQqICAgICB7XG5cdCogICAgICAga2V5OiAnZG9jLTEnLFxuXHQqICAgICAgIGRhdGE6IHsgZmxvYXQzMjogWzAuMSwgMC4yLCAuLi5dIH0sXG5cdCogICAgICAgbWV0YWRhdGE6IHsgdGl0bGU6ICdJbnRyb2R1Y3Rpb24nLCBwYWdlOiAxIH1cblx0KiAgICAgfVxuXHQqICAgXVxuXHQqIH0pXG5cdCogYGBgXG5cdCovXG5cdGFzeW5jIHB1dFZlY3RvcnMob3B0aW9ucykge1xuXHRcdHZhciBfc3VwZXJwcm9wX2dldFB1dFZlY3RvcnMgPSAoKSA9PiBzdXBlci5wdXRWZWN0b3JzLCBfdGhpczkgPSB0aGlzO1xuXHRcdHJldHVybiBfc3VwZXJwcm9wX2dldFB1dFZlY3RvcnMoKS5jYWxsKF90aGlzOSwgX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG9wdGlvbnMpLCB7fSwge1xuXHRcdFx0dmVjdG9yQnVja2V0TmFtZTogX3RoaXM5LnZlY3RvckJ1Y2tldE5hbWUsXG5cdFx0XHRpbmRleE5hbWU6IF90aGlzOS5pbmRleE5hbWVcblx0XHR9KSk7XG5cdH1cblx0LyoqXG5cdCpcblx0KiBAYWxwaGFcblx0KlxuXHQqIFJldHJpZXZlcyB2ZWN0b3JzIGJ5IGtleXMgZnJvbSB0aGlzIGluZGV4XG5cdCogQ29udmVuaWVuY2UgbWV0aG9kIHRoYXQgYXV0b21hdGljYWxseSBpbmNsdWRlcyBidWNrZXQgYW5kIGluZGV4IG5hbWVzXG5cdCpcblx0KiAqKlB1YmxpYyBhbHBoYToqKiBUaGlzIEFQSSBpcyBwYXJ0IG9mIGEgcHVibGljIGFscGhhIHJlbGVhc2UgYW5kIG1heSBub3QgYmUgYXZhaWxhYmxlIHRvIHlvdXIgYWNjb3VudCB0eXBlLlxuXHQqXG5cdCogQGNhdGVnb3J5IFN0b3JhZ2Vcblx0KiBAc3ViY2F0ZWdvcnkgVmVjdG9yIEJ1Y2tldHNcblx0KiBAcGFyYW0gb3B0aW9ucyAtIFZlY3RvciByZXRyaWV2YWwgb3B0aW9ucyAoYnVja2V0IGFuZCBpbmRleCBuYW1lcyBhdXRvbWF0aWNhbGx5IHNldClcblx0KiBAcmV0dXJucyBQcm9taXNlIHdpdGggcmVzcG9uc2UgY29udGFpbmluZyB2ZWN0b3JzIGFycmF5IG9yIGVycm9yXG5cdCpcblx0KiBAZXhhbXBsZSBHZXQgdmVjdG9ycyBieSBrZXlzXG5cdCogYGBgdHlwZXNjcmlwdFxuXHQqIGNvbnN0IGluZGV4ID0gc3VwYWJhc2Uuc3RvcmFnZS52ZWN0b3JzLmZyb20oJ2VtYmVkZGluZ3MtcHJvZCcpLmluZGV4KCdkb2N1bWVudHMtb3BlbmFpJylcblx0KiBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGluZGV4LmdldFZlY3RvcnMoe1xuXHQqICAga2V5czogWydkb2MtMScsICdkb2MtMiddLFxuXHQqICAgcmV0dXJuTWV0YWRhdGE6IHRydWVcblx0KiB9KVxuXHQqIGBgYFxuXHQqL1xuXHRhc3luYyBnZXRWZWN0b3JzKG9wdGlvbnMpIHtcblx0XHR2YXIgX3N1cGVycHJvcF9nZXRHZXRWZWN0b3JzID0gKCkgPT4gc3VwZXIuZ2V0VmVjdG9ycywgX3RoaXMxMCA9IHRoaXM7XG5cdFx0cmV0dXJuIF9zdXBlcnByb3BfZ2V0R2V0VmVjdG9ycygpLmNhbGwoX3RoaXMxMCwgX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG9wdGlvbnMpLCB7fSwge1xuXHRcdFx0dmVjdG9yQnVja2V0TmFtZTogX3RoaXMxMC52ZWN0b3JCdWNrZXROYW1lLFxuXHRcdFx0aW5kZXhOYW1lOiBfdGhpczEwLmluZGV4TmFtZVxuXHRcdH0pKTtcblx0fVxuXHQvKipcblx0KlxuXHQqIEBhbHBoYVxuXHQqXG5cdCogTGlzdHMgdmVjdG9ycyBpbiB0aGlzIGluZGV4IHdpdGggcGFnaW5hdGlvblxuXHQqIENvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgYnVja2V0IGFuZCBpbmRleCBuYW1lc1xuXHQqXG5cdCogKipQdWJsaWMgYWxwaGE6KiogVGhpcyBBUEkgaXMgcGFydCBvZiBhIHB1YmxpYyBhbHBoYSByZWxlYXNlIGFuZCBtYXkgbm90IGJlIGF2YWlsYWJsZSB0byB5b3VyIGFjY291bnQgdHlwZS5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IFZlY3RvciBCdWNrZXRzXG5cdCogQHBhcmFtIG9wdGlvbnMgLSBMaXN0aW5nIG9wdGlvbnMgKGJ1Y2tldCBhbmQgaW5kZXggbmFtZXMgYXV0b21hdGljYWxseSBzZXQpXG5cdCogQHJldHVybnMgUHJvbWlzZSB3aXRoIHJlc3BvbnNlIGNvbnRhaW5pbmcgdmVjdG9ycyBhcnJheSBhbmQgcGFnaW5hdGlvbiB0b2tlbiBvciBlcnJvclxuXHQqXG5cdCogQGV4YW1wbGUgTGlzdCB2ZWN0b3JzIHdpdGggcGFnaW5hdGlvblxuXHQqIGBgYHR5cGVzY3JpcHRcblx0KiBjb25zdCBpbmRleCA9IHN1cGFiYXNlLnN0b3JhZ2UudmVjdG9ycy5mcm9tKCdlbWJlZGRpbmdzLXByb2QnKS5pbmRleCgnZG9jdW1lbnRzLW9wZW5haScpXG5cdCogY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBpbmRleC5saXN0VmVjdG9ycyh7XG5cdCogICBtYXhSZXN1bHRzOiA1MDAsXG5cdCogICByZXR1cm5NZXRhZGF0YTogdHJ1ZVxuXHQqIH0pXG5cdCogYGBgXG5cdCovXG5cdGFzeW5jIGxpc3RWZWN0b3JzKG9wdGlvbnMgPSB7fSkge1xuXHRcdHZhciBfc3VwZXJwcm9wX2dldExpc3RWZWN0b3JzID0gKCkgPT4gc3VwZXIubGlzdFZlY3RvcnMsIF90aGlzMTEgPSB0aGlzO1xuXHRcdHJldHVybiBfc3VwZXJwcm9wX2dldExpc3RWZWN0b3JzKCkuY2FsbChfdGhpczExLCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgb3B0aW9ucyksIHt9LCB7XG5cdFx0XHR2ZWN0b3JCdWNrZXROYW1lOiBfdGhpczExLnZlY3RvckJ1Y2tldE5hbWUsXG5cdFx0XHRpbmRleE5hbWU6IF90aGlzMTEuaW5kZXhOYW1lXG5cdFx0fSkpO1xuXHR9XG5cdC8qKlxuXHQqXG5cdCogQGFscGhhXG5cdCpcblx0KiBRdWVyaWVzIGZvciBzaW1pbGFyIHZlY3RvcnMgaW4gdGhpcyBpbmRleFxuXHQqIENvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgYnVja2V0IGFuZCBpbmRleCBuYW1lc1xuXHQqXG5cdCogKipQdWJsaWMgYWxwaGE6KiogVGhpcyBBUEkgaXMgcGFydCBvZiBhIHB1YmxpYyBhbHBoYSByZWxlYXNlIGFuZCBtYXkgbm90IGJlIGF2YWlsYWJsZSB0byB5b3VyIGFjY291bnQgdHlwZS5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IFZlY3RvciBCdWNrZXRzXG5cdCogQHBhcmFtIG9wdGlvbnMgLSBRdWVyeSBvcHRpb25zIChidWNrZXQgYW5kIGluZGV4IG5hbWVzIGF1dG9tYXRpY2FsbHkgc2V0KVxuXHQqIEByZXR1cm5zIFByb21pc2Ugd2l0aCByZXNwb25zZSBjb250YWluaW5nIG1hdGNoZXMgYXJyYXkgb2Ygc2ltaWxhciB2ZWN0b3JzIG9yZGVyZWQgYnkgZGlzdGFuY2Ugb3IgZXJyb3Jcblx0KlxuXHQqIEBleGFtcGxlIFF1ZXJ5IHNpbWlsYXIgdmVjdG9yc1xuXHQqIGBgYHR5cGVzY3JpcHRcblx0KiBjb25zdCBpbmRleCA9IHN1cGFiYXNlLnN0b3JhZ2UudmVjdG9ycy5mcm9tKCdlbWJlZGRpbmdzLXByb2QnKS5pbmRleCgnZG9jdW1lbnRzLW9wZW5haScpXG5cdCogY29uc3QgeyBkYXRhIH0gPSBhd2FpdCBpbmRleC5xdWVyeVZlY3RvcnMoe1xuXHQqICAgcXVlcnlWZWN0b3I6IHsgZmxvYXQzMjogWzAuMSwgMC4yLCAuLi5dIH0sXG5cdCogICB0b3BLOiA1LFxuXHQqICAgZmlsdGVyOiB7IGNhdGVnb3J5OiAndGVjaG5pY2FsJyB9LFxuXHQqICAgcmV0dXJuRGlzdGFuY2U6IHRydWUsXG5cdCogICByZXR1cm5NZXRhZGF0YTogdHJ1ZVxuXHQqIH0pXG5cdCogYGBgXG5cdCovXG5cdGFzeW5jIHF1ZXJ5VmVjdG9ycyhvcHRpb25zKSB7XG5cdFx0dmFyIF9zdXBlcnByb3BfZ2V0UXVlcnlWZWN0b3JzID0gKCkgPT4gc3VwZXIucXVlcnlWZWN0b3JzLCBfdGhpczEyID0gdGhpcztcblx0XHRyZXR1cm4gX3N1cGVycHJvcF9nZXRRdWVyeVZlY3RvcnMoKS5jYWxsKF90aGlzMTIsIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBvcHRpb25zKSwge30sIHtcblx0XHRcdHZlY3RvckJ1Y2tldE5hbWU6IF90aGlzMTIudmVjdG9yQnVja2V0TmFtZSxcblx0XHRcdGluZGV4TmFtZTogX3RoaXMxMi5pbmRleE5hbWVcblx0XHR9KSk7XG5cdH1cblx0LyoqXG5cdCpcblx0KiBAYWxwaGFcblx0KlxuXHQqIERlbGV0ZXMgdmVjdG9ycyBieSBrZXlzIGZyb20gdGhpcyBpbmRleFxuXHQqIENvbnZlbmllbmNlIG1ldGhvZCB0aGF0IGF1dG9tYXRpY2FsbHkgaW5jbHVkZXMgYnVja2V0IGFuZCBpbmRleCBuYW1lc1xuXHQqXG5cdCogKipQdWJsaWMgYWxwaGE6KiogVGhpcyBBUEkgaXMgcGFydCBvZiBhIHB1YmxpYyBhbHBoYSByZWxlYXNlIGFuZCBtYXkgbm90IGJlIGF2YWlsYWJsZSB0byB5b3VyIGFjY291bnQgdHlwZS5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IFZlY3RvciBCdWNrZXRzXG5cdCogQHBhcmFtIG9wdGlvbnMgLSBEZWxldGlvbiBvcHRpb25zIChidWNrZXQgYW5kIGluZGV4IG5hbWVzIGF1dG9tYXRpY2FsbHkgc2V0KVxuXHQqIEByZXR1cm5zIFByb21pc2Ugd2l0aCBlbXB0eSByZXNwb25zZSBvbiBzdWNjZXNzIG9yIGVycm9yXG5cdCpcblx0KiBAZXhhbXBsZSBEZWxldGUgdmVjdG9ycyBieSBrZXlzXG5cdCogYGBgdHlwZXNjcmlwdFxuXHQqIGNvbnN0IGluZGV4ID0gc3VwYWJhc2Uuc3RvcmFnZS52ZWN0b3JzLmZyb20oJ2VtYmVkZGluZ3MtcHJvZCcpLmluZGV4KCdkb2N1bWVudHMtb3BlbmFpJylcblx0KiBhd2FpdCBpbmRleC5kZWxldGVWZWN0b3JzKHtcblx0KiAgIGtleXM6IFsnZG9jLTEnLCAnZG9jLTInLCAnZG9jLTMnXVxuXHQqIH0pXG5cdCogYGBgXG5cdCovXG5cdGFzeW5jIGRlbGV0ZVZlY3RvcnMob3B0aW9ucykge1xuXHRcdHZhciBfc3VwZXJwcm9wX2dldERlbGV0ZVZlY3RvcnMgPSAoKSA9PiBzdXBlci5kZWxldGVWZWN0b3JzLCBfdGhpczEzID0gdGhpcztcblx0XHRyZXR1cm4gX3N1cGVycHJvcF9nZXREZWxldGVWZWN0b3JzKCkuY2FsbChfdGhpczEzLCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgb3B0aW9ucyksIHt9LCB7XG5cdFx0XHR2ZWN0b3JCdWNrZXROYW1lOiBfdGhpczEzLnZlY3RvckJ1Y2tldE5hbWUsXG5cdFx0XHRpbmRleE5hbWU6IF90aGlzMTMuaW5kZXhOYW1lXG5cdFx0fSkpO1xuXHR9XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvU3RvcmFnZUNsaWVudC50c1xudmFyIFN0b3JhZ2VDbGllbnQgPSBjbGFzcyBleHRlbmRzIFN0b3JhZ2VCdWNrZXRBcGkge1xuXHQvKipcblx0KiBDcmVhdGVzIGEgY2xpZW50IGZvciBTdG9yYWdlIGJ1Y2tldHMsIGZpbGVzLCBhbmFseXRpY3MsIGFuZCB2ZWN0b3JzLlxuXHQqXG5cdCogQGNhdGVnb3J5IFN0b3JhZ2Vcblx0KiBAc3ViY2F0ZWdvcnkgRmlsZSBCdWNrZXRzXG5cdCpcblx0KiBAZXhhbXBsZSBVc2luZyBzdXBhYmFzZS1qcyAocmVjb21tZW5kZWQpXG5cdCogYGBgdHNcblx0KiBpbXBvcnQgeyBjcmVhdGVDbGllbnQgfSBmcm9tICdAc3VwYWJhc2Uvc3VwYWJhc2UtanMnXG5cdCpcblx0KiBjb25zdCBzdXBhYmFzZSA9IGNyZWF0ZUNsaWVudCgnaHR0cHM6Ly94eXpjb21wYW55LnN1cGFiYXNlLmNvJywgJ3lvdXItcHVibGlzaGFibGUta2V5Jylcblx0KiBjb25zdCBhdmF0YXJzID0gc3VwYWJhc2Uuc3RvcmFnZS5mcm9tKCdhdmF0YXJzJylcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlIFN0YW5kYWxvbmUgaW1wb3J0IGZvciBidW5kbGUtc2Vuc2l0aXZlIGVudmlyb25tZW50c1xuXHQqIGBgYHRzXG5cdCogaW1wb3J0IHsgU3RvcmFnZUNsaWVudCB9IGZyb20gJ0BzdXBhYmFzZS9zdG9yYWdlLWpzJ1xuXHQqXG5cdCogY29uc3Qgc3RvcmFnZSA9IG5ldyBTdG9yYWdlQ2xpZW50KCdodHRwczovL3h5emNvbXBhbnkuc3VwYWJhc2UuY28vc3RvcmFnZS92MScsIHtcblx0KiAgIGFwaWtleTogJ3lvdXItcHVibGlzaGFibGUta2V5Jyxcblx0KiB9KVxuXHQqIGNvbnN0IGF2YXRhcnMgPSBzdG9yYWdlLmZyb20oJ2F2YXRhcnMnKVxuXHQqIGBgYFxuXHQqL1xuXHRjb25zdHJ1Y3Rvcih1cmwsIGhlYWRlcnMgPSB7fSwgZmV0Y2gkMSwgb3B0cykge1xuXHRcdHN1cGVyKHVybCwgaGVhZGVycywgZmV0Y2gkMSwgb3B0cyk7XG5cdH1cblx0LyoqXG5cdCogUGVyZm9ybSBmaWxlIG9wZXJhdGlvbiBpbiBhIGJ1Y2tldC5cblx0KlxuXHQqIEBjYXRlZ29yeSBTdG9yYWdlXG5cdCogQHN1YmNhdGVnb3J5IEZpbGUgQnVja2V0c1xuXHQqXG5cdCogQHBhcmFtIGlkIFRoZSBidWNrZXQgaWQgdG8gb3BlcmF0ZSBvbi5cblx0KlxuXHQqIEBleGFtcGxlIEFjY2Vzc2luZyBhIGJ1Y2tldFxuXHQqIGBgYHR5cGVzY3JpcHRcblx0KiBjb25zdCBhdmF0YXJzID0gc3VwYWJhc2Uuc3RvcmFnZS5mcm9tKCdhdmF0YXJzJylcblx0KiBgYGBcblx0Ki9cblx0ZnJvbShpZCkge1xuXHRcdHJldHVybiBuZXcgU3RvcmFnZUZpbGVBcGkodGhpcy51cmwsIHRoaXMuaGVhZGVycywgaWQsIHRoaXMuZmV0Y2gpO1xuXHR9XG5cdC8qKlxuXHQqXG5cdCogQGFscGhhXG5cdCpcblx0KiBBY2Nlc3MgdmVjdG9yIHN0b3JhZ2Ugb3BlcmF0aW9ucy5cblx0KlxuXHQqICoqUHVibGljIGFscGhhOioqIFRoaXMgQVBJIGlzIHBhcnQgb2YgYSBwdWJsaWMgYWxwaGEgcmVsZWFzZSBhbmQgbWF5IG5vdCBiZSBhdmFpbGFibGUgdG8geW91ciBhY2NvdW50IHR5cGUuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBWZWN0b3IgQnVja2V0c1xuXHQqXG5cdCogQHJldHVybnMgQSBTdG9yYWdlVmVjdG9yc0NsaWVudCBpbnN0YW5jZSBjb25maWd1cmVkIHdpdGggdGhlIGN1cnJlbnQgc3RvcmFnZSBzZXR0aW5ncy5cblx0Ki9cblx0Z2V0IHZlY3RvcnMoKSB7XG5cdFx0cmV0dXJuIG5ldyBTdG9yYWdlVmVjdG9yc0NsaWVudCh0aGlzLnVybCArIFwiL3ZlY3RvclwiLCB7XG5cdFx0XHRoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG5cdFx0XHRmZXRjaDogdGhpcy5mZXRjaFxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQqXG5cdCogQGFscGhhXG5cdCpcblx0KiBBY2Nlc3MgYW5hbHl0aWNzIHN0b3JhZ2Ugb3BlcmF0aW9ucyB1c2luZyBJY2ViZXJnIHRhYmxlcy5cblx0KlxuXHQqICoqUHVibGljIGFscGhhOioqIFRoaXMgQVBJIGlzIHBhcnQgb2YgYSBwdWJsaWMgYWxwaGEgcmVsZWFzZSBhbmQgbWF5IG5vdCBiZSBhdmFpbGFibGUgdG8geW91ciBhY2NvdW50IHR5cGUuXG5cdCpcblx0KiBAY2F0ZWdvcnkgU3RvcmFnZVxuXHQqIEBzdWJjYXRlZ29yeSBBbmFseXRpY3MgQnVja2V0c1xuXHQqXG5cdCogQHJldHVybnMgQSBTdG9yYWdlQW5hbHl0aWNzQ2xpZW50IGluc3RhbmNlIGNvbmZpZ3VyZWQgd2l0aCB0aGUgY3VycmVudCBzdG9yYWdlIHNldHRpbmdzLlxuXHQqL1xuXHRnZXQgYW5hbHl0aWNzKCkge1xuXHRcdHJldHVybiBuZXcgU3RvcmFnZUFuYWx5dGljc0NsaWVudCh0aGlzLnVybCArIFwiL2ljZWJlcmdcIiwgdGhpcy5oZWFkZXJzLCB0aGlzLmZldGNoKTtcblx0fVxufTtcblxuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBTdG9yYWdlQW5hbHl0aWNzQ2xpZW50LCBTdG9yYWdlQXBpRXJyb3IsIFN0b3JhZ2VDbGllbnQsIFN0b3JhZ2VFcnJvciwgU3RvcmFnZVVua25vd25FcnJvciwgU3RvcmFnZVZlY3RvcnNBcGlFcnJvciwgU3RvcmFnZVZlY3RvcnNDbGllbnQsIFN0b3JhZ2VWZWN0b3JzRXJyb3IsIFN0b3JhZ2VWZWN0b3JzRXJyb3JDb2RlLCBTdG9yYWdlVmVjdG9yc1Vua25vd25FcnJvciwgVmVjdG9yQnVja2V0QXBpLCBWZWN0b3JCdWNrZXRTY29wZSwgVmVjdG9yRGF0YUFwaSwgVmVjdG9ySW5kZXhBcGksIFZlY3RvckluZGV4U2NvcGUsIGlzU3RvcmFnZUVycm9yLCBpc1N0b3JhZ2VWZWN0b3JzRXJyb3IgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4Lm1qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/storage-js/dist/index.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/index.mjs":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/@supabase/supabase-js/dist/index.mjs ***!
|
||
\***********************************************************/
|
||
/***/ ((__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 */ AuthAdminApi: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.AuthAdminApi),\n/* harmony export */ AuthApiError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.AuthApiError),\n/* harmony export */ AuthClient: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.AuthClient),\n/* harmony export */ AuthError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.AuthError),\n/* harmony export */ AuthImplicitGrantRedirectError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.AuthImplicitGrantRedirectError),\n/* harmony export */ AuthInvalidCredentialsError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidCredentialsError),\n/* harmony export */ AuthInvalidJwtError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidJwtError),\n/* harmony export */ AuthInvalidTokenResponseError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.AuthInvalidTokenResponseError),\n/* harmony export */ AuthPKCECodeVerifierMissingError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.AuthPKCECodeVerifierMissingError),\n/* harmony export */ AuthPKCEGrantCodeExchangeError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.AuthPKCEGrantCodeExchangeError),\n/* harmony export */ AuthRetryableFetchError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.AuthRetryableFetchError),\n/* harmony export */ AuthSessionMissingError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.AuthSessionMissingError),\n/* harmony export */ AuthUnknownError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.AuthUnknownError),\n/* harmony export */ AuthWeakPasswordError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.AuthWeakPasswordError),\n/* harmony export */ CustomAuthError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.CustomAuthError),\n/* harmony export */ FunctionRegion: () => (/* reexport safe */ _supabase_functions_js__WEBPACK_IMPORTED_MODULE_5__.FunctionRegion),\n/* harmony export */ FunctionsError: () => (/* reexport safe */ _supabase_functions_js__WEBPACK_IMPORTED_MODULE_5__.FunctionsError),\n/* harmony export */ FunctionsFetchError: () => (/* reexport safe */ _supabase_functions_js__WEBPACK_IMPORTED_MODULE_5__.FunctionsFetchError),\n/* harmony export */ FunctionsHttpError: () => (/* reexport safe */ _supabase_functions_js__WEBPACK_IMPORTED_MODULE_5__.FunctionsHttpError),\n/* harmony export */ FunctionsRelayError: () => (/* reexport safe */ _supabase_functions_js__WEBPACK_IMPORTED_MODULE_5__.FunctionsRelayError),\n/* harmony export */ GoTrueAdminApi: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.GoTrueAdminApi),\n/* harmony export */ GoTrueClient: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.GoTrueClient),\n/* harmony export */ NavigatorLockAcquireTimeoutError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.NavigatorLockAcquireTimeoutError),\n/* harmony export */ PostgrestError: () => (/* reexport safe */ _supabase_postgrest_js__WEBPACK_IMPORTED_MODULE_0__.PostgrestError),\n/* harmony export */ REALTIME_CHANNEL_STATES: () => (/* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_1__.REALTIME_CHANNEL_STATES),\n/* harmony export */ REALTIME_LISTEN_TYPES: () => (/* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_1__.REALTIME_LISTEN_TYPES),\n/* harmony export */ REALTIME_POSTGRES_CHANGES_LISTEN_EVENT: () => (/* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_1__.REALTIME_POSTGRES_CHANGES_LISTEN_EVENT),\n/* harmony export */ REALTIME_PRESENCE_LISTEN_EVENTS: () => (/* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_1__.REALTIME_PRESENCE_LISTEN_EVENTS),\n/* harmony export */ REALTIME_SUBSCRIBE_STATES: () => (/* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_1__.REALTIME_SUBSCRIBE_STATES),\n/* harmony export */ RealtimeChannel: () => (/* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_1__.RealtimeChannel),\n/* harmony export */ RealtimeClient: () => (/* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_1__.RealtimeClient),\n/* harmony export */ RealtimePresence: () => (/* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_1__.RealtimePresence),\n/* harmony export */ SIGN_OUT_SCOPES: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.SIGN_OUT_SCOPES),\n/* harmony export */ StorageApiError: () => (/* reexport safe */ _supabase_storage_js__WEBPACK_IMPORTED_MODULE_3__.StorageApiError),\n/* harmony export */ SupabaseClient: () => (/* binding */ SupabaseClient),\n/* harmony export */ WebSocketFactory: () => (/* reexport safe */ _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_1__.WebSocketFactory),\n/* harmony export */ createClient: () => (/* binding */ createClient),\n/* harmony export */ isAuthApiError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.isAuthApiError),\n/* harmony export */ isAuthError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.isAuthError),\n/* harmony export */ isAuthImplicitGrantRedirectError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.isAuthImplicitGrantRedirectError),\n/* harmony export */ isAuthPKCECodeVerifierMissingError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.isAuthPKCECodeVerifierMissingError),\n/* harmony export */ isAuthRetryableFetchError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.isAuthRetryableFetchError),\n/* harmony export */ isAuthSessionMissingError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.isAuthSessionMissingError),\n/* harmony export */ isAuthWeakPasswordError: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.isAuthWeakPasswordError),\n/* harmony export */ lockInternals: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.lockInternals),\n/* harmony export */ navigatorLock: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.navigatorLock),\n/* harmony export */ processLock: () => (/* reexport safe */ _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.processLock)\n/* harmony export */ });\n/* harmony import */ var _supabase_functions_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @supabase/functions-js */ \"(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/FunctionsClient.js\");\n/* harmony import */ var _supabase_functions_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @supabase/functions-js */ \"(app-pages-browser)/./node_modules/@supabase/functions-js/dist/module/types.js\");\n/* harmony import */ var _supabase_postgrest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @supabase/postgrest-js */ \"(app-pages-browser)/./node_modules/@supabase/postgrest-js/dist/index.mjs\");\n/* harmony import */ var _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @supabase/realtime-js */ \"(app-pages-browser)/./node_modules/@supabase/realtime-js/dist/module/index.js\");\n/* harmony import */ var _supabase_storage_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @supabase/storage-js */ \"(app-pages-browser)/./node_modules/@supabase/storage-js/dist/index.mjs\");\n/* harmony import */ var _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @supabase/auth-js */ \"(app-pages-browser)/./node_modules/@supabase/auth-js/dist/module/index.js\");\n\n\n\n\n\n\n\n\n\n\n//#region src/lib/version.ts\nconst version = \"2.105.3\";\n\n//#endregion\n//#region src/lib/constants.ts\nlet JS_ENV = \"\";\nif (typeof Deno !== \"undefined\") JS_ENV = \"deno\";\nelse if (typeof document !== \"undefined\") JS_ENV = \"web\";\nelse if (typeof navigator !== \"undefined\" && navigator.product === \"ReactNative\") JS_ENV = \"react-native\";\nelse JS_ENV = \"node\";\nconst DEFAULT_HEADERS = { \"X-Client-Info\": `supabase-js-${JS_ENV}/${version}` };\nconst DEFAULT_GLOBAL_OPTIONS = { headers: DEFAULT_HEADERS };\nconst DEFAULT_DB_OPTIONS = { schema: \"public\" };\nconst DEFAULT_AUTH_OPTIONS = {\n\tautoRefreshToken: true,\n\tpersistSession: true,\n\tdetectSessionInUrl: true,\n\tflowType: \"implicit\"\n};\nconst DEFAULT_REALTIME_OPTIONS = {};\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.101.0/helpers/typeof.js\nfunction _typeof(o) {\n\t\"@babel/helpers - typeof\";\n\treturn _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function(o$1) {\n\t\treturn typeof o$1;\n\t} : function(o$1) {\n\t\treturn o$1 && \"function\" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? \"symbol\" : typeof o$1;\n\t}, _typeof(o);\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.101.0/helpers/toPrimitive.js\nfunction toPrimitive(t, r) {\n\tif (\"object\" != _typeof(t) || !t) return t;\n\tvar e = t[Symbol.toPrimitive];\n\tif (void 0 !== e) {\n\t\tvar i = e.call(t, r || \"default\");\n\t\tif (\"object\" != _typeof(i)) return i;\n\t\tthrow new TypeError(\"@@toPrimitive must return a primitive value.\");\n\t}\n\treturn (\"string\" === r ? String : Number)(t);\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.101.0/helpers/toPropertyKey.js\nfunction toPropertyKey(t) {\n\tvar i = toPrimitive(t, \"string\");\n\treturn \"symbol\" == _typeof(i) ? i : i + \"\";\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.101.0/helpers/defineProperty.js\nfunction _defineProperty(e, r, t) {\n\treturn (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n\t\tvalue: t,\n\t\tenumerable: !0,\n\t\tconfigurable: !0,\n\t\twritable: !0\n\t}) : e[r] = t, e;\n}\n\n//#endregion\n//#region \\0@oxc-project+runtime@0.101.0/helpers/objectSpread2.js\nfunction ownKeys(e, r) {\n\tvar t = Object.keys(e);\n\tif (Object.getOwnPropertySymbols) {\n\t\tvar o = Object.getOwnPropertySymbols(e);\n\t\tr && (o = o.filter(function(r$1) {\n\t\t\treturn Object.getOwnPropertyDescriptor(e, r$1).enumerable;\n\t\t})), t.push.apply(t, o);\n\t}\n\treturn t;\n}\nfunction _objectSpread2(e) {\n\tfor (var r = 1; r < arguments.length; r++) {\n\t\tvar t = null != arguments[r] ? arguments[r] : {};\n\t\tr % 2 ? ownKeys(Object(t), !0).forEach(function(r$1) {\n\t\t\t_defineProperty(e, r$1, t[r$1]);\n\t\t}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r$1) {\n\t\t\tObject.defineProperty(e, r$1, Object.getOwnPropertyDescriptor(t, r$1));\n\t\t});\n\t}\n\treturn e;\n}\n\n//#endregion\n//#region src/lib/fetch.ts\nconst resolveFetch = (customFetch) => {\n\tif (customFetch) return (...args) => customFetch(...args);\n\treturn (...args) => fetch(...args);\n};\nconst resolveHeadersConstructor = () => {\n\treturn Headers;\n};\nconst fetchWithAuth = (supabaseKey, getAccessToken, customFetch) => {\n\tconst fetch$1 = resolveFetch(customFetch);\n\tconst HeadersConstructor = resolveHeadersConstructor();\n\treturn async (input, init) => {\n\t\tvar _await$getAccessToken;\n\t\tconst accessToken = (_await$getAccessToken = await getAccessToken()) !== null && _await$getAccessToken !== void 0 ? _await$getAccessToken : supabaseKey;\n\t\tlet headers = new HeadersConstructor(init === null || init === void 0 ? void 0 : init.headers);\n\t\tif (!headers.has(\"apikey\")) headers.set(\"apikey\", supabaseKey);\n\t\tif (!headers.has(\"Authorization\")) headers.set(\"Authorization\", `Bearer ${accessToken}`);\n\t\treturn fetch$1(input, _objectSpread2(_objectSpread2({}, init), {}, { headers }));\n\t};\n};\n\n//#endregion\n//#region src/lib/helpers.ts\nfunction ensureTrailingSlash(url) {\n\treturn url.endsWith(\"/\") ? url : url + \"/\";\n}\nfunction applySettingDefaults(options, defaults) {\n\tvar _DEFAULT_GLOBAL_OPTIO, _globalOptions$header;\n\tconst { db: dbOptions, auth: authOptions, realtime: realtimeOptions, global: globalOptions } = options;\n\tconst { db: DEFAULT_DB_OPTIONS$1, auth: DEFAULT_AUTH_OPTIONS$1, realtime: DEFAULT_REALTIME_OPTIONS$1, global: DEFAULT_GLOBAL_OPTIONS$1 } = defaults;\n\tconst result = {\n\t\tdb: _objectSpread2(_objectSpread2({}, DEFAULT_DB_OPTIONS$1), dbOptions),\n\t\tauth: _objectSpread2(_objectSpread2({}, DEFAULT_AUTH_OPTIONS$1), authOptions),\n\t\trealtime: _objectSpread2(_objectSpread2({}, DEFAULT_REALTIME_OPTIONS$1), realtimeOptions),\n\t\tstorage: {},\n\t\tglobal: _objectSpread2(_objectSpread2(_objectSpread2({}, DEFAULT_GLOBAL_OPTIONS$1), globalOptions), {}, { headers: _objectSpread2(_objectSpread2({}, (_DEFAULT_GLOBAL_OPTIO = DEFAULT_GLOBAL_OPTIONS$1 === null || DEFAULT_GLOBAL_OPTIONS$1 === void 0 ? void 0 : DEFAULT_GLOBAL_OPTIONS$1.headers) !== null && _DEFAULT_GLOBAL_OPTIO !== void 0 ? _DEFAULT_GLOBAL_OPTIO : {}), (_globalOptions$header = globalOptions === null || globalOptions === void 0 ? void 0 : globalOptions.headers) !== null && _globalOptions$header !== void 0 ? _globalOptions$header : {}) }),\n\t\taccessToken: async () => \"\"\n\t};\n\tif (options.accessToken) result.accessToken = options.accessToken;\n\telse delete result.accessToken;\n\treturn result;\n}\n/**\n* Validates a Supabase client URL\n*\n* @param {string} supabaseUrl - The Supabase client URL string.\n* @returns {URL} - The validated base URL.\n* @throws {Error}\n*/\nfunction validateSupabaseUrl(supabaseUrl) {\n\tconst trimmedUrl = supabaseUrl === null || supabaseUrl === void 0 ? void 0 : supabaseUrl.trim();\n\tif (!trimmedUrl) throw new Error(\"supabaseUrl is required.\");\n\tif (!trimmedUrl.match(/^https?:\\/\\//i)) throw new Error(\"Invalid supabaseUrl: Must be a valid HTTP or HTTPS URL.\");\n\ttry {\n\t\treturn new URL(ensureTrailingSlash(trimmedUrl));\n\t} catch (_unused) {\n\t\tthrow Error(\"Invalid supabaseUrl: Provided URL is malformed.\");\n\t}\n}\n\n//#endregion\n//#region src/lib/SupabaseAuthClient.ts\nvar SupabaseAuthClient = class extends _supabase_auth_js__WEBPACK_IMPORTED_MODULE_2__.AuthClient {\n\tconstructor(options) {\n\t\tsuper(options);\n\t}\n};\n\n//#endregion\n//#region src/SupabaseClient.ts\n/**\n* Supabase Client.\n*\n* An isomorphic Javascript client for interacting with Postgres.\n*/\nvar SupabaseClient = class {\n\t/**\n\t* Create a new client for use in the browser.\n\t*\n\t* @category Initializing\n\t*\n\t* @param supabaseUrl The unique Supabase URL which is supplied when you create a new project in your project dashboard.\n\t* @param supabaseKey The unique Supabase Key which is supplied when you create a new project in your project dashboard.\n\t* @param options.db.schema You can switch in between schemas. The schema needs to be on the list of exposed schemas inside Supabase.\n\t* @param options.auth.autoRefreshToken Set to \"true\" if you want to automatically refresh the token before expiring.\n\t* @param options.auth.persistSession Set to \"true\" if you want to automatically save the user session into local storage.\n\t* @param options.auth.detectSessionInUrl Set to \"true\" if you want to automatically detects OAuth grants in the URL and signs in the user.\n\t* @param options.realtime Options passed along to realtime-js constructor.\n\t* @param options.storage Options passed along to the storage-js constructor.\n\t* @param options.global.fetch A custom fetch implementation.\n\t* @param options.global.headers Any additional headers to send with each network request.\n\t*\n\t* @example Creating a client\n\t* ```js\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* // Create a single supabase client for interacting with your database\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t* ```\n\t*\n\t* @example With a custom domain\n\t* ```js\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* // Use a custom domain as the supabase URL\n\t* const supabase = createClient('https://my-custom-domain.com', 'your-publishable-key')\n\t* ```\n\t*\n\t* @example With additional parameters\n\t* ```js\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const options = {\n\t* db: {\n\t* schema: 'public',\n\t* },\n\t* auth: {\n\t* autoRefreshToken: true,\n\t* persistSession: true,\n\t* detectSessionInUrl: true\n\t* },\n\t* global: {\n\t* headers: { 'x-my-custom-header': 'my-app-name' },\n\t* },\n\t* }\n\t* const supabase = createClient(\"https://xyzcompany.supabase.co\", \"your-publishable-key\", options)\n\t* ```\n\t*\n\t* @exampleDescription With custom schemas\n\t* By default the API server points to the `public` schema. You can enable other database schemas within the Dashboard.\n\t* Go to [Settings > API > Exposed schemas](/dashboard/project/_/settings/api) and add the schema which you want to expose to the API.\n\t*\n\t* Note: each client connection can only access a single schema, so the code above can access the `other_schema` schema but cannot access the `public` schema.\n\t*\n\t* @example With custom schemas\n\t* ```js\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key', {\n\t* // Provide a custom schema. Defaults to \"public\".\n\t* db: { schema: 'other_schema' }\n\t* })\n\t* ```\n\t*\n\t* @exampleDescription Custom fetch implementation\n\t* `supabase-js` uses the [`cross-fetch`](https://www.npmjs.com/package/cross-fetch) library to make HTTP requests,\n\t* but an alternative `fetch` implementation can be provided as an option.\n\t* This is most useful in environments where `cross-fetch` is not compatible (for instance Cloudflare Workers).\n\t*\n\t* @example Custom fetch implementation\n\t* ```js\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key', {\n\t* global: { fetch: fetch.bind(globalThis) }\n\t* })\n\t* ```\n\t*\n\t* @exampleDescription React Native options with AsyncStorage\n\t* For React Native we recommend using `AsyncStorage` as the storage implementation for Supabase Auth.\n\t*\n\t* @example React Native options with AsyncStorage\n\t* ```js\n\t* import 'react-native-url-polyfill/auto'\n\t* import { createClient } from '@supabase/supabase-js'\n\t* import AsyncStorage from \"@react-native-async-storage/async-storage\";\n\t*\n\t* const supabase = createClient(\"https://xyzcompany.supabase.co\", \"your-publishable-key\", {\n\t* auth: {\n\t* storage: AsyncStorage,\n\t* autoRefreshToken: true,\n\t* persistSession: true,\n\t* detectSessionInUrl: false,\n\t* },\n\t* });\n\t* ```\n\t*\n\t* @exampleDescription React Native options with Expo SecureStore\n\t* If you wish to encrypt the user's session information, you can use `aes-js` and store the encryption key in Expo SecureStore.\n\t* The `aes-js` library, a reputable JavaScript-only implementation of the AES encryption algorithm in CTR mode.\n\t* A new 256-bit encryption key is generated using the `react-native-get-random-values` library.\n\t* This key is stored inside Expo's SecureStore, while the value is encrypted and placed inside AsyncStorage.\n\t*\n\t* Please make sure that:\n\t* - You keep the `expo-secure-store`, `aes-js` and `react-native-get-random-values` libraries up-to-date.\n\t* - Choose the correct [`SecureStoreOptions`](https://docs.expo.dev/versions/latest/sdk/securestore/#securestoreoptions) for your app's needs.\n\t* E.g. [`SecureStore.WHEN_UNLOCKED`](https://docs.expo.dev/versions/latest/sdk/securestore/#securestorewhen_unlocked) regulates when the data can be accessed.\n\t* - Carefully consider optimizations or other modifications to the above example, as those can lead to introducing subtle security vulnerabilities.\n\t*\n\t* @example React Native options with Expo SecureStore\n\t* ```ts\n\t* import 'react-native-url-polyfill/auto'\n\t* import { createClient } from '@supabase/supabase-js'\n\t* import AsyncStorage from '@react-native-async-storage/async-storage';\n\t* import * as SecureStore from 'expo-secure-store';\n\t* import * as aesjs from 'aes-js';\n\t* import 'react-native-get-random-values';\n\t*\n\t* // As Expo's SecureStore does not support values larger than 2048\n\t* // bytes, an AES-256 key is generated and stored in SecureStore, while\n\t* // it is used to encrypt/decrypt values stored in AsyncStorage.\n\t* class LargeSecureStore {\n\t* private async _encrypt(key: string, value: string) {\n\t* const encryptionKey = crypto.getRandomValues(new Uint8Array(256 / 8));\n\t*\n\t* const cipher = new aesjs.ModeOfOperation.ctr(encryptionKey, new aesjs.Counter(1));\n\t* const encryptedBytes = cipher.encrypt(aesjs.utils.utf8.toBytes(value));\n\t*\n\t* await SecureStore.setItemAsync(key, aesjs.utils.hex.fromBytes(encryptionKey));\n\t*\n\t* return aesjs.utils.hex.fromBytes(encryptedBytes);\n\t* }\n\t*\n\t* private async _decrypt(key: string, value: string) {\n\t* const encryptionKeyHex = await SecureStore.getItemAsync(key);\n\t* if (!encryptionKeyHex) {\n\t* return encryptionKeyHex;\n\t* }\n\t*\n\t* const cipher = new aesjs.ModeOfOperation.ctr(aesjs.utils.hex.toBytes(encryptionKeyHex), new aesjs.Counter(1));\n\t* const decryptedBytes = cipher.decrypt(aesjs.utils.hex.toBytes(value));\n\t*\n\t* return aesjs.utils.utf8.fromBytes(decryptedBytes);\n\t* }\n\t*\n\t* async getItem(key: string) {\n\t* const encrypted = await AsyncStorage.getItem(key);\n\t* if (!encrypted) { return encrypted; }\n\t*\n\t* return await this._decrypt(key, encrypted);\n\t* }\n\t*\n\t* async removeItem(key: string) {\n\t* await AsyncStorage.removeItem(key);\n\t* await SecureStore.deleteItemAsync(key);\n\t* }\n\t*\n\t* async setItem(key: string, value: string) {\n\t* const encrypted = await this._encrypt(key, value);\n\t*\n\t* await AsyncStorage.setItem(key, encrypted);\n\t* }\n\t* }\n\t*\n\t* const supabase = createClient(\"https://xyzcompany.supabase.co\", \"your-publishable-key\", {\n\t* auth: {\n\t* storage: new LargeSecureStore(),\n\t* autoRefreshToken: true,\n\t* persistSession: true,\n\t* detectSessionInUrl: false,\n\t* },\n\t* });\n\t* ```\n\t*\n\t* @example With a database query\n\t* ```ts\n\t* import { createClient } from '@supabase/supabase-js'\n\t*\n\t* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n\t*\n\t* const { data } = await supabase.from('profiles').select('*')\n\t* ```\n\t*/\n\tconstructor(supabaseUrl, supabaseKey, options) {\n\t\tvar _settings$auth$storag, _settings$global$head;\n\t\tthis.supabaseUrl = supabaseUrl;\n\t\tthis.supabaseKey = supabaseKey;\n\t\tconst baseUrl = validateSupabaseUrl(supabaseUrl);\n\t\tif (!supabaseKey) throw new Error(\"supabaseKey is required.\");\n\t\tthis.realtimeUrl = new URL(\"realtime/v1\", baseUrl);\n\t\tthis.realtimeUrl.protocol = this.realtimeUrl.protocol.replace(\"http\", \"ws\");\n\t\tthis.authUrl = new URL(\"auth/v1\", baseUrl);\n\t\tthis.storageUrl = new URL(\"storage/v1\", baseUrl);\n\t\tthis.functionsUrl = new URL(\"functions/v1\", baseUrl);\n\t\tconst defaultStorageKey = `sb-${baseUrl.hostname.split(\".\")[0]}-auth-token`;\n\t\tconst DEFAULTS = {\n\t\t\tdb: DEFAULT_DB_OPTIONS,\n\t\t\trealtime: DEFAULT_REALTIME_OPTIONS,\n\t\t\tauth: _objectSpread2(_objectSpread2({}, DEFAULT_AUTH_OPTIONS), {}, { storageKey: defaultStorageKey }),\n\t\t\tglobal: DEFAULT_GLOBAL_OPTIONS\n\t\t};\n\t\tconst settings = applySettingDefaults(options !== null && options !== void 0 ? options : {}, DEFAULTS);\n\t\tthis.storageKey = (_settings$auth$storag = settings.auth.storageKey) !== null && _settings$auth$storag !== void 0 ? _settings$auth$storag : \"\";\n\t\tthis.headers = (_settings$global$head = settings.global.headers) !== null && _settings$global$head !== void 0 ? _settings$global$head : {};\n\t\tif (!settings.accessToken) {\n\t\t\tvar _settings$auth;\n\t\t\tthis.auth = this._initSupabaseAuthClient((_settings$auth = settings.auth) !== null && _settings$auth !== void 0 ? _settings$auth : {}, this.headers, settings.global.fetch);\n\t\t} else {\n\t\t\tthis.accessToken = settings.accessToken;\n\t\t\tthis.auth = new Proxy({}, { get: (_, prop) => {\n\t\t\t\tthrow new Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(prop)} is not possible`);\n\t\t\t} });\n\t\t}\n\t\tthis.fetch = fetchWithAuth(supabaseKey, this._getAccessToken.bind(this), settings.global.fetch);\n\t\tthis.realtime = this._initRealtimeClient(_objectSpread2({\n\t\t\theaders: this.headers,\n\t\t\taccessToken: this._getAccessToken.bind(this),\n\t\t\tfetch: this.fetch\n\t\t}, settings.realtime));\n\t\tif (this.accessToken) Promise.resolve(this.accessToken()).then((token) => this.realtime.setAuth(token)).catch((e) => console.warn(\"Failed to set initial Realtime auth token:\", e));\n\t\tthis.rest = new _supabase_postgrest_js__WEBPACK_IMPORTED_MODULE_0__.PostgrestClient(new URL(\"rest/v1\", baseUrl).href, {\n\t\t\theaders: this.headers,\n\t\t\tschema: settings.db.schema,\n\t\t\tfetch: this.fetch,\n\t\t\ttimeout: settings.db.timeout,\n\t\t\turlLengthLimit: settings.db.urlLengthLimit\n\t\t});\n\t\tthis.storage = new _supabase_storage_js__WEBPACK_IMPORTED_MODULE_3__.StorageClient(this.storageUrl.href, this.headers, this.fetch, options === null || options === void 0 ? void 0 : options.storage);\n\t\tif (!settings.accessToken) this._listenForAuthEvents();\n\t}\n\t/**\n\t* Supabase Functions allows you to deploy and invoke edge functions.\n\t*/\n\tget functions() {\n\t\treturn new _supabase_functions_js__WEBPACK_IMPORTED_MODULE_4__.FunctionsClient(this.functionsUrl.href, {\n\t\t\theaders: this.headers,\n\t\t\tcustomFetch: this.fetch\n\t\t});\n\t}\n\t/**\n\t* Perform a query on a table or a view.\n\t*\n\t* @param relation - The table or view name to query\n\t*/\n\tfrom(relation) {\n\t\treturn this.rest.from(relation);\n\t}\n\t/**\n\t* Select a schema to query or perform an function (rpc) call.\n\t*\n\t* The schema needs to be on the list of exposed schemas inside Supabase.\n\t*\n\t* @param schema - The schema to query\n\t*/\n\tschema(schema) {\n\t\treturn this.rest.schema(schema);\n\t}\n\t/**\n\t* Perform a function call.\n\t*\n\t* @param fn - The function name to call\n\t* @param args - The arguments to pass to the function call\n\t* @param options - Named parameters\n\t* @param options.head - When set to `true`, `data` will not be returned.\n\t* Useful if you only need the count.\n\t* @param options.get - When set to `true`, the function will be called with\n\t* read-only access mode.\n\t* @param options.count - Count algorithm to use to count rows returned by the\n\t* function. Only applicable for [set-returning\n\t* functions](https://www.postgresql.org/docs/current/functions-srf.html).\n\t*\n\t* `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n\t* hood.\n\t*\n\t* `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n\t* statistics under the hood.\n\t*\n\t* `\"estimated\"`: Uses exact count for low numbers and planned count for high\n\t* numbers.\n\t*/\n\trpc(fn, args = {}, options = {\n\t\thead: false,\n\t\tget: false,\n\t\tcount: void 0\n\t}) {\n\t\treturn this.rest.rpc(fn, args, options);\n\t}\n\t/**\n\t* Creates a Realtime channel with Broadcast, Presence, and Postgres Changes.\n\t*\n\t* @param {string} name - The name of the Realtime channel.\n\t* @param {Object} opts - The options to pass to the Realtime channel.\n\t*\n\t* @category Realtime\n\t*/\n\tchannel(name, opts = { config: {} }) {\n\t\treturn this.realtime.channel(name, opts);\n\t}\n\t/**\n\t* Returns all Realtime channels.\n\t*\n\t* @category Realtime\n\t*\n\t* @example Get all channels\n\t* ```js\n\t* const channels = supabase.getChannels()\n\t* ```\n\t*/\n\tgetChannels() {\n\t\treturn this.realtime.getChannels();\n\t}\n\t/**\n\t* Unsubscribes and removes Realtime channel from Realtime client.\n\t*\n\t* @param {RealtimeChannel} channel - The name of the Realtime channel.\n\t*\n\t*\n\t* @category Realtime\n\t*\n\t* @remarks\n\t* - Removing a channel is a great way to maintain the performance of your project's Realtime service as well as your database if you're listening to Postgres changes. Supabase will automatically handle cleanup 30 seconds after a client is disconnected, but unused channels may cause degradation as more clients are simultaneously subscribed.\n\t*\n\t* @example Removes a channel\n\t* ```js\n\t* supabase.removeChannel(myChannel)\n\t* ```\n\t*/\n\tremoveChannel(channel) {\n\t\treturn this.realtime.removeChannel(channel);\n\t}\n\t/**\n\t* Unsubscribes and removes all Realtime channels from Realtime client.\n\t*\n\t* @category Realtime\n\t*\n\t* @remarks\n\t* - Removing channels is a great way to maintain the performance of your project's Realtime service as well as your database if you're listening to Postgres changes. Supabase will automatically handle cleanup 30 seconds after a client is disconnected, but unused channels may cause degradation as more clients are simultaneously subscribed.\n\t*\n\t* @example Remove all channels\n\t* ```js\n\t* supabase.removeAllChannels()\n\t* ```\n\t*/\n\tremoveAllChannels() {\n\t\treturn this.realtime.removeAllChannels();\n\t}\n\tasync _getAccessToken() {\n\t\tvar _this = this;\n\t\tvar _data$session$access_, _data$session;\n\t\tif (_this.accessToken) return await _this.accessToken();\n\t\tconst { data } = await _this.auth.getSession();\n\t\treturn (_data$session$access_ = (_data$session = data.session) === null || _data$session === void 0 ? void 0 : _data$session.access_token) !== null && _data$session$access_ !== void 0 ? _data$session$access_ : _this.supabaseKey;\n\t}\n\t_initSupabaseAuthClient({ autoRefreshToken, persistSession, detectSessionInUrl, storage, userStorage, storageKey, flowType, lock, debug, throwOnError, experimental, lockAcquireTimeout, skipAutoInitialize }, headers, fetch$1) {\n\t\tconst authHeaders = {\n\t\t\tAuthorization: `Bearer ${this.supabaseKey}`,\n\t\t\tapikey: `${this.supabaseKey}`\n\t\t};\n\t\treturn new SupabaseAuthClient({\n\t\t\turl: this.authUrl.href,\n\t\t\theaders: _objectSpread2(_objectSpread2({}, authHeaders), headers),\n\t\t\tstorageKey,\n\t\t\tautoRefreshToken,\n\t\t\tpersistSession,\n\t\t\tdetectSessionInUrl,\n\t\t\tstorage,\n\t\t\tuserStorage,\n\t\t\tflowType,\n\t\t\tlock,\n\t\t\tdebug,\n\t\t\tthrowOnError,\n\t\t\texperimental,\n\t\t\tfetch: fetch$1,\n\t\t\tlockAcquireTimeout,\n\t\t\tskipAutoInitialize,\n\t\t\thasCustomAuthorizationHeader: Object.keys(this.headers).some((key) => key.toLowerCase() === \"authorization\")\n\t\t});\n\t}\n\t_initRealtimeClient(options) {\n\t\treturn new _supabase_realtime_js__WEBPACK_IMPORTED_MODULE_1__.RealtimeClient(this.realtimeUrl.href, _objectSpread2(_objectSpread2({}, options), {}, { params: _objectSpread2(_objectSpread2({}, { apikey: this.supabaseKey }), options === null || options === void 0 ? void 0 : options.params) }));\n\t}\n\t_listenForAuthEvents() {\n\t\treturn this.auth.onAuthStateChange((event, session) => {\n\t\t\tthis._handleTokenChanged(event, \"CLIENT\", session === null || session === void 0 ? void 0 : session.access_token);\n\t\t});\n\t}\n\t_handleTokenChanged(event, source, token) {\n\t\tif ((event === \"TOKEN_REFRESHED\" || event === \"SIGNED_IN\") && this.changedAccessToken !== token) {\n\t\t\tthis.changedAccessToken = token;\n\t\t\tthis.realtime.setAuth(token);\n\t\t} else if (event === \"SIGNED_OUT\") {\n\t\t\tthis.realtime.setAuth();\n\t\t\tif (source == \"STORAGE\") this.auth.signOut();\n\t\t\tthis.changedAccessToken = void 0;\n\t\t}\n\t}\n};\n\n//#endregion\n//#region src/index.ts\n/**\n* Creates a new Supabase Client.\n*\n* @example Creating a Supabase client\n* ```ts\n* import { createClient } from '@supabase/supabase-js'\n*\n* const supabase = createClient('https://xyzcompany.supabase.co', 'your-publishable-key')\n* const { data, error } = await supabase.from('profiles').select('*')\n* ```\n*/\nconst createClient = (supabaseUrl, supabaseKey, options) => {\n\treturn new SupabaseClient(supabaseUrl, supabaseKey, options);\n};\nfunction shouldShowDeprecationWarning() {\n\tif (typeof window !== \"undefined\") return false;\n\tconst _process = globalThis[\"process\"];\n\tif (!_process) return false;\n\tconst processVersion = _process[\"version\"];\n\tif (processVersion === void 0 || processVersion === null) return false;\n\tconst versionMatch = processVersion.match(/^v(\\d+)\\./);\n\tif (!versionMatch) return false;\n\treturn parseInt(versionMatch[1], 10) <= 18;\n}\nif (shouldShowDeprecationWarning()) console.warn(\"⚠️ Node.js 18 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 20 or later. For more information, visit: https://github.com/orgs/supabase/discussions/37217\");\n\n//#endregion\n\n//# sourceMappingURL=index.mjs.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9Ac3VwYWJhc2Uvc3VwYWJhc2UtanMvZGlzdC9pbmRleC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBdUo7QUFDOUU7QUFDbEI7QUFDZTtBQUN2Qjs7QUFFVjs7QUFFSjs7QUFFakM7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixnQ0FBZ0MsT0FBTyxHQUFHLFFBQVE7QUFDNUUsaUNBQWlDO0FBQ2pDLDZCQUE2QjtBQUM3QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxFQUFFO0FBQ0Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRTtBQUNGOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsc0JBQXNCO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRFQUE0RSxZQUFZO0FBQ3hGLHdEQUF3RCxXQUFXLElBQUksU0FBUztBQUNoRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxxRkFBcUY7QUFD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QUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLGFBQWEsaUVBQWMsd0RBQXdELGNBQWMsSUFBSSx3Q0FBd0MsSUFBSSwwQkFBMEIsc0VBQXNFO0FBQ2pQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxlQUFlO0FBQzFCO0FBQ0E7QUFDQSxVQUFVLGNBQWM7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDdUs7QUFDdksiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvQHN1cGFiYXNlL3N1cGFiYXNlLWpzL2Rpc3QvaW5kZXgubWpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZ1bmN0aW9uUmVnaW9uLCBGdW5jdGlvbnNDbGllbnQsIEZ1bmN0aW9uc0Vycm9yLCBGdW5jdGlvbnNGZXRjaEVycm9yLCBGdW5jdGlvbnNIdHRwRXJyb3IsIEZ1bmN0aW9uc1JlbGF5RXJyb3IgfSBmcm9tIFwiQHN1cGFiYXNlL2Z1bmN0aW9ucy1qc1wiO1xuaW1wb3J0IHsgUG9zdGdyZXN0Q2xpZW50LCBQb3N0Z3Jlc3RFcnJvciB9IGZyb20gXCJAc3VwYWJhc2UvcG9zdGdyZXN0LWpzXCI7XG5pbXBvcnQgeyBSZWFsdGltZUNsaWVudCB9IGZyb20gXCJAc3VwYWJhc2UvcmVhbHRpbWUtanNcIjtcbmltcG9ydCB7IFN0b3JhZ2VBcGlFcnJvciwgU3RvcmFnZUNsaWVudCB9IGZyb20gXCJAc3VwYWJhc2Uvc3RvcmFnZS1qc1wiO1xuaW1wb3J0IHsgQXV0aENsaWVudCB9IGZyb20gXCJAc3VwYWJhc2UvYXV0aC1qc1wiO1xuXG5leHBvcnQgKiBmcm9tIFwiQHN1cGFiYXNlL3JlYWx0aW1lLWpzXCJcblxuZXhwb3J0ICogZnJvbSBcIkBzdXBhYmFzZS9hdXRoLWpzXCJcblxuLy8jcmVnaW9uIHNyYy9saWIvdmVyc2lvbi50c1xuY29uc3QgdmVyc2lvbiA9IFwiMi4xMDUuM1wiO1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbGliL2NvbnN0YW50cy50c1xubGV0IEpTX0VOViA9IFwiXCI7XG5pZiAodHlwZW9mIERlbm8gIT09IFwidW5kZWZpbmVkXCIpIEpTX0VOViA9IFwiZGVub1wiO1xuZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiKSBKU19FTlYgPSBcIndlYlwiO1xuZWxzZSBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBuYXZpZ2F0b3IucHJvZHVjdCA9PT0gXCJSZWFjdE5hdGl2ZVwiKSBKU19FTlYgPSBcInJlYWN0LW5hdGl2ZVwiO1xuZWxzZSBKU19FTlYgPSBcIm5vZGVcIjtcbmNvbnN0IERFRkFVTFRfSEVBREVSUyA9IHsgXCJYLUNsaWVudC1JbmZvXCI6IGBzdXBhYmFzZS1qcy0ke0pTX0VOVn0vJHt2ZXJzaW9ufWAgfTtcbmNvbnN0IERFRkFVTFRfR0xPQkFMX09QVElPTlMgPSB7IGhlYWRlcnM6IERFRkFVTFRfSEVBREVSUyB9O1xuY29uc3QgREVGQVVMVF9EQl9PUFRJT05TID0geyBzY2hlbWE6IFwicHVibGljXCIgfTtcbmNvbnN0IERFRkFVTFRfQVVUSF9PUFRJT05TID0ge1xuXHRhdXRvUmVmcmVzaFRva2VuOiB0cnVlLFxuXHRwZXJzaXN0U2Vzc2lvbjogdHJ1ZSxcblx0ZGV0ZWN0U2Vzc2lvbkluVXJsOiB0cnVlLFxuXHRmbG93VHlwZTogXCJpbXBsaWNpdFwiXG59O1xuY29uc3QgREVGQVVMVF9SRUFMVElNRV9PUFRJT05TID0ge307XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIFxcMEBveGMtcHJvamVjdCtydW50aW1lQDAuMTAxLjAvaGVscGVycy90eXBlb2YuanNcbmZ1bmN0aW9uIF90eXBlb2Yobykge1xuXHRcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cdHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24obyQxKSB7XG5cdFx0cmV0dXJuIHR5cGVvZiBvJDE7XG5cdH0gOiBmdW5jdGlvbihvJDEpIHtcblx0XHRyZXR1cm4gbyQxICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG8kMS5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8kMSAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbyQxO1xuXHR9LCBfdHlwZW9mKG8pO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBcXDBAb3hjLXByb2plY3QrcnVudGltZUAwLjEwMS4wL2hlbHBlcnMvdG9QcmltaXRpdmUuanNcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcblx0aWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG5cdHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuXHRpZiAodm9pZCAwICE9PSBlKSB7XG5cdFx0dmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG5cdFx0aWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuXHR9XG5cdHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIFxcMEBveGMtcHJvamVjdCtydW50aW1lQDAuMTAxLjAvaGVscGVycy90b1Byb3BlcnR5S2V5LmpzXG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcblx0dmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcblx0cmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cblxuLy8jZW5kcmVnaW9uXG4vLyNyZWdpb24gXFwwQG94Yy1wcm9qZWN0K3J1bnRpbWVAMC4xMDEuMC9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuXHRyZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcblx0XHR2YWx1ZTogdCxcblx0XHRlbnVtZXJhYmxlOiAhMCxcblx0XHRjb25maWd1cmFibGU6ICEwLFxuXHRcdHdyaXRhYmxlOiAhMFxuXHR9KSA6IGVbcl0gPSB0LCBlO1xufVxuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBcXDBAb3hjLXByb2plY3QrcnVudGltZUAwLjEwMS4wL2hlbHBlcnMvb2JqZWN0U3ByZWFkMi5qc1xuZnVuY3Rpb24gb3duS2V5cyhlLCByKSB7XG5cdHZhciB0ID0gT2JqZWN0LmtleXMoZSk7XG5cdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0dmFyIG8gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuXHRcdHIgJiYgKG8gPSBvLmZpbHRlcihmdW5jdGlvbihyJDEpIHtcblx0XHRcdHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHIkMSkuZW51bWVyYWJsZTtcblx0XHR9KSksIHQucHVzaC5hcHBseSh0LCBvKTtcblx0fVxuXHRyZXR1cm4gdDtcbn1cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQyKGUpIHtcblx0Zm9yICh2YXIgciA9IDE7IHIgPCBhcmd1bWVudHMubGVuZ3RoOyByKyspIHtcblx0XHR2YXIgdCA9IG51bGwgIT0gYXJndW1lbnRzW3JdID8gYXJndW1lbnRzW3JdIDoge307XG5cdFx0ciAlIDIgPyBvd25LZXlzKE9iamVjdCh0KSwgITApLmZvckVhY2goZnVuY3Rpb24ociQxKSB7XG5cdFx0XHRfZGVmaW5lUHJvcGVydHkoZSwgciQxLCB0W3IkMV0pO1xuXHRcdH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhlLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0KSkgOiBvd25LZXlzKE9iamVjdCh0KSkuZm9yRWFjaChmdW5jdGlvbihyJDEpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByJDEsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCwgciQxKSk7XG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIGU7XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9saWIvZmV0Y2gudHNcbmNvbnN0IHJlc29sdmVGZXRjaCA9IChjdXN0b21GZXRjaCkgPT4ge1xuXHRpZiAoY3VzdG9tRmV0Y2gpIHJldHVybiAoLi4uYXJncykgPT4gY3VzdG9tRmV0Y2goLi4uYXJncyk7XG5cdHJldHVybiAoLi4uYXJncykgPT4gZmV0Y2goLi4uYXJncyk7XG59O1xuY29uc3QgcmVzb2x2ZUhlYWRlcnNDb25zdHJ1Y3RvciA9ICgpID0+IHtcblx0cmV0dXJuIEhlYWRlcnM7XG59O1xuY29uc3QgZmV0Y2hXaXRoQXV0aCA9IChzdXBhYmFzZUtleSwgZ2V0QWNjZXNzVG9rZW4sIGN1c3RvbUZldGNoKSA9PiB7XG5cdGNvbnN0IGZldGNoJDEgPSByZXNvbHZlRmV0Y2goY3VzdG9tRmV0Y2gpO1xuXHRjb25zdCBIZWFkZXJzQ29uc3RydWN0b3IgPSByZXNvbHZlSGVhZGVyc0NvbnN0cnVjdG9yKCk7XG5cdHJldHVybiBhc3luYyAoaW5wdXQsIGluaXQpID0+IHtcblx0XHR2YXIgX2F3YWl0JGdldEFjY2Vzc1Rva2VuO1xuXHRcdGNvbnN0IGFjY2Vzc1Rva2VuID0gKF9hd2FpdCRnZXRBY2Nlc3NUb2tlbiA9IGF3YWl0IGdldEFjY2Vzc1Rva2VuKCkpICE9PSBudWxsICYmIF9hd2FpdCRnZXRBY2Nlc3NUb2tlbiAhPT0gdm9pZCAwID8gX2F3YWl0JGdldEFjY2Vzc1Rva2VuIDogc3VwYWJhc2VLZXk7XG5cdFx0bGV0IGhlYWRlcnMgPSBuZXcgSGVhZGVyc0NvbnN0cnVjdG9yKGluaXQgPT09IG51bGwgfHwgaW5pdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5pdC5oZWFkZXJzKTtcblx0XHRpZiAoIWhlYWRlcnMuaGFzKFwiYXBpa2V5XCIpKSBoZWFkZXJzLnNldChcImFwaWtleVwiLCBzdXBhYmFzZUtleSk7XG5cdFx0aWYgKCFoZWFkZXJzLmhhcyhcIkF1dGhvcml6YXRpb25cIikpIGhlYWRlcnMuc2V0KFwiQXV0aG9yaXphdGlvblwiLCBgQmVhcmVyICR7YWNjZXNzVG9rZW59YCk7XG5cdFx0cmV0dXJuIGZldGNoJDEoaW5wdXQsIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBpbml0KSwge30sIHsgaGVhZGVycyB9KSk7XG5cdH07XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvbGliL2hlbHBlcnMudHNcbmZ1bmN0aW9uIGVuc3VyZVRyYWlsaW5nU2xhc2godXJsKSB7XG5cdHJldHVybiB1cmwuZW5kc1dpdGgoXCIvXCIpID8gdXJsIDogdXJsICsgXCIvXCI7XG59XG5mdW5jdGlvbiBhcHBseVNldHRpbmdEZWZhdWx0cyhvcHRpb25zLCBkZWZhdWx0cykge1xuXHR2YXIgX0RFRkFVTFRfR0xPQkFMX09QVElPLCBfZ2xvYmFsT3B0aW9ucyRoZWFkZXI7XG5cdGNvbnN0IHsgZGI6IGRiT3B0aW9ucywgYXV0aDogYXV0aE9wdGlvbnMsIHJlYWx0aW1lOiByZWFsdGltZU9wdGlvbnMsIGdsb2JhbDogZ2xvYmFsT3B0aW9ucyB9ID0gb3B0aW9ucztcblx0Y29uc3QgeyBkYjogREVGQVVMVF9EQl9PUFRJT05TJDEsIGF1dGg6IERFRkFVTFRfQVVUSF9PUFRJT05TJDEsIHJlYWx0aW1lOiBERUZBVUxUX1JFQUxUSU1FX09QVElPTlMkMSwgZ2xvYmFsOiBERUZBVUxUX0dMT0JBTF9PUFRJT05TJDEgfSA9IGRlZmF1bHRzO1xuXHRjb25zdCByZXN1bHQgPSB7XG5cdFx0ZGI6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBERUZBVUxUX0RCX09QVElPTlMkMSksIGRiT3B0aW9ucyksXG5cdFx0YXV0aDogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIERFRkFVTFRfQVVUSF9PUFRJT05TJDEpLCBhdXRoT3B0aW9ucyksXG5cdFx0cmVhbHRpbWU6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBERUZBVUxUX1JFQUxUSU1FX09QVElPTlMkMSksIHJlYWx0aW1lT3B0aW9ucyksXG5cdFx0c3RvcmFnZToge30sXG5cdFx0Z2xvYmFsOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgREVGQVVMVF9HTE9CQUxfT1BUSU9OUyQxKSwgZ2xvYmFsT3B0aW9ucyksIHt9LCB7IGhlYWRlcnM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCAoX0RFRkFVTFRfR0xPQkFMX09QVElPID0gREVGQVVMVF9HTE9CQUxfT1BUSU9OUyQxID09PSBudWxsIHx8IERFRkFVTFRfR0xPQkFMX09QVElPTlMkMSA9PT0gdm9pZCAwID8gdm9pZCAwIDogREVGQVVMVF9HTE9CQUxfT1BUSU9OUyQxLmhlYWRlcnMpICE9PSBudWxsICYmIF9ERUZBVUxUX0dMT0JBTF9PUFRJTyAhPT0gdm9pZCAwID8gX0RFRkFVTFRfR0xPQkFMX09QVElPIDoge30pLCAoX2dsb2JhbE9wdGlvbnMkaGVhZGVyID0gZ2xvYmFsT3B0aW9ucyA9PT0gbnVsbCB8fCBnbG9iYWxPcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBnbG9iYWxPcHRpb25zLmhlYWRlcnMpICE9PSBudWxsICYmIF9nbG9iYWxPcHRpb25zJGhlYWRlciAhPT0gdm9pZCAwID8gX2dsb2JhbE9wdGlvbnMkaGVhZGVyIDoge30pIH0pLFxuXHRcdGFjY2Vzc1Rva2VuOiBhc3luYyAoKSA9PiBcIlwiXG5cdH07XG5cdGlmIChvcHRpb25zLmFjY2Vzc1Rva2VuKSByZXN1bHQuYWNjZXNzVG9rZW4gPSBvcHRpb25zLmFjY2Vzc1Rva2VuO1xuXHRlbHNlIGRlbGV0ZSByZXN1bHQuYWNjZXNzVG9rZW47XG5cdHJldHVybiByZXN1bHQ7XG59XG4vKipcbiogVmFsaWRhdGVzIGEgU3VwYWJhc2UgY2xpZW50IFVSTFxuKlxuKiBAcGFyYW0ge3N0cmluZ30gc3VwYWJhc2VVcmwgLSBUaGUgU3VwYWJhc2UgY2xpZW50IFVSTCBzdHJpbmcuXG4qIEByZXR1cm5zIHtVUkx9IC0gVGhlIHZhbGlkYXRlZCBiYXNlIFVSTC5cbiogQHRocm93cyB7RXJyb3J9XG4qL1xuZnVuY3Rpb24gdmFsaWRhdGVTdXBhYmFzZVVybChzdXBhYmFzZVVybCkge1xuXHRjb25zdCB0cmltbWVkVXJsID0gc3VwYWJhc2VVcmwgPT09IG51bGwgfHwgc3VwYWJhc2VVcmwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN1cGFiYXNlVXJsLnRyaW0oKTtcblx0aWYgKCF0cmltbWVkVXJsKSB0aHJvdyBuZXcgRXJyb3IoXCJzdXBhYmFzZVVybCBpcyByZXF1aXJlZC5cIik7XG5cdGlmICghdHJpbW1lZFVybC5tYXRjaCgvXmh0dHBzPzpcXC9cXC8vaSkpIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3VwYWJhc2VVcmw6IE11c3QgYmUgYSB2YWxpZCBIVFRQIG9yIEhUVFBTIFVSTC5cIik7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIG5ldyBVUkwoZW5zdXJlVHJhaWxpbmdTbGFzaCh0cmltbWVkVXJsKSk7XG5cdH0gY2F0Y2ggKF91bnVzZWQpIHtcblx0XHR0aHJvdyBFcnJvcihcIkludmFsaWQgc3VwYWJhc2VVcmw6IFByb3ZpZGVkIFVSTCBpcyBtYWxmb3JtZWQuXCIpO1xuXHR9XG59XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9saWIvU3VwYWJhc2VBdXRoQ2xpZW50LnRzXG52YXIgU3VwYWJhc2VBdXRoQ2xpZW50ID0gY2xhc3MgZXh0ZW5kcyBBdXRoQ2xpZW50IHtcblx0Y29uc3RydWN0b3Iob3B0aW9ucykge1xuXHRcdHN1cGVyKG9wdGlvbnMpO1xuXHR9XG59O1xuXG4vLyNlbmRyZWdpb25cbi8vI3JlZ2lvbiBzcmMvU3VwYWJhc2VDbGllbnQudHNcbi8qKlxuKiBTdXBhYmFzZSBDbGllbnQuXG4qXG4qIEFuIGlzb21vcnBoaWMgSmF2YXNjcmlwdCBjbGllbnQgZm9yIGludGVyYWN0aW5nIHdpdGggUG9zdGdyZXMuXG4qL1xudmFyIFN1cGFiYXNlQ2xpZW50ID0gY2xhc3Mge1xuXHQvKipcblx0KiBDcmVhdGUgYSBuZXcgY2xpZW50IGZvciB1c2UgaW4gdGhlIGJyb3dzZXIuXG5cdCpcblx0KiBAY2F0ZWdvcnkgSW5pdGlhbGl6aW5nXG5cdCpcblx0KiBAcGFyYW0gc3VwYWJhc2VVcmwgVGhlIHVuaXF1ZSBTdXBhYmFzZSBVUkwgd2hpY2ggaXMgc3VwcGxpZWQgd2hlbiB5b3UgY3JlYXRlIGEgbmV3IHByb2plY3QgaW4geW91ciBwcm9qZWN0IGRhc2hib2FyZC5cblx0KiBAcGFyYW0gc3VwYWJhc2VLZXkgVGhlIHVuaXF1ZSBTdXBhYmFzZSBLZXkgd2hpY2ggaXMgc3VwcGxpZWQgd2hlbiB5b3UgY3JlYXRlIGEgbmV3IHByb2plY3QgaW4geW91ciBwcm9qZWN0IGRhc2hib2FyZC5cblx0KiBAcGFyYW0gb3B0aW9ucy5kYi5zY2hlbWEgWW91IGNhbiBzd2l0Y2ggaW4gYmV0d2VlbiBzY2hlbWFzLiBUaGUgc2NoZW1hIG5lZWRzIHRvIGJlIG9uIHRoZSBsaXN0IG9mIGV4cG9zZWQgc2NoZW1hcyBpbnNpZGUgU3VwYWJhc2UuXG5cdCogQHBhcmFtIG9wdGlvbnMuYXV0aC5hdXRvUmVmcmVzaFRva2VuIFNldCB0byBcInRydWVcIiBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IHJlZnJlc2ggdGhlIHRva2VuIGJlZm9yZSBleHBpcmluZy5cblx0KiBAcGFyYW0gb3B0aW9ucy5hdXRoLnBlcnNpc3RTZXNzaW9uIFNldCB0byBcInRydWVcIiBpZiB5b3Ugd2FudCB0byBhdXRvbWF0aWNhbGx5IHNhdmUgdGhlIHVzZXIgc2Vzc2lvbiBpbnRvIGxvY2FsIHN0b3JhZ2UuXG5cdCogQHBhcmFtIG9wdGlvbnMuYXV0aC5kZXRlY3RTZXNzaW9uSW5VcmwgU2V0IHRvIFwidHJ1ZVwiIGlmIHlvdSB3YW50IHRvIGF1dG9tYXRpY2FsbHkgZGV0ZWN0cyBPQXV0aCBncmFudHMgaW4gdGhlIFVSTCBhbmQgc2lnbnMgaW4gdGhlIHVzZXIuXG5cdCogQHBhcmFtIG9wdGlvbnMucmVhbHRpbWUgT3B0aW9ucyBwYXNzZWQgYWxvbmcgdG8gcmVhbHRpbWUtanMgY29uc3RydWN0b3IuXG5cdCogQHBhcmFtIG9wdGlvbnMuc3RvcmFnZSBPcHRpb25zIHBhc3NlZCBhbG9uZyB0byB0aGUgc3RvcmFnZS1qcyBjb25zdHJ1Y3Rvci5cblx0KiBAcGFyYW0gb3B0aW9ucy5nbG9iYWwuZmV0Y2ggQSBjdXN0b20gZmV0Y2ggaW1wbGVtZW50YXRpb24uXG5cdCogQHBhcmFtIG9wdGlvbnMuZ2xvYmFsLmhlYWRlcnMgQW55IGFkZGl0aW9uYWwgaGVhZGVycyB0byBzZW5kIHdpdGggZWFjaCBuZXR3b3JrIHJlcXVlc3QuXG5cdCpcblx0KiBAZXhhbXBsZSBDcmVhdGluZyBhIGNsaWVudFxuXHQqIGBgYGpzXG5cdCogaW1wb3J0IHsgY3JlYXRlQ2xpZW50IH0gZnJvbSAnQHN1cGFiYXNlL3N1cGFiYXNlLWpzJ1xuXHQqXG5cdCogLy8gQ3JlYXRlIGEgc2luZ2xlIHN1cGFiYXNlIGNsaWVudCBmb3IgaW50ZXJhY3Rpbmcgd2l0aCB5b3VyIGRhdGFiYXNlXG5cdCogY29uc3Qgc3VwYWJhc2UgPSBjcmVhdGVDbGllbnQoJ2h0dHBzOi8veHl6Y29tcGFueS5zdXBhYmFzZS5jbycsICd5b3VyLXB1Ymxpc2hhYmxlLWtleScpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZSBXaXRoIGEgY3VzdG9tIGRvbWFpblxuXHQqIGBgYGpzXG5cdCogaW1wb3J0IHsgY3JlYXRlQ2xpZW50IH0gZnJvbSAnQHN1cGFiYXNlL3N1cGFiYXNlLWpzJ1xuXHQqXG5cdCogLy8gVXNlIGEgY3VzdG9tIGRvbWFpbiBhcyB0aGUgc3VwYWJhc2UgVVJMXG5cdCogY29uc3Qgc3VwYWJhc2UgPSBjcmVhdGVDbGllbnQoJ2h0dHBzOi8vbXktY3VzdG9tLWRvbWFpbi5jb20nLCAneW91ci1wdWJsaXNoYWJsZS1rZXknKVxuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgV2l0aCBhZGRpdGlvbmFsIHBhcmFtZXRlcnNcblx0KiBgYGBqc1xuXHQqIGltcG9ydCB7IGNyZWF0ZUNsaWVudCB9IGZyb20gJ0BzdXBhYmFzZS9zdXBhYmFzZS1qcydcblx0KlxuXHQqIGNvbnN0IG9wdGlvbnMgPSB7XG5cdCogICBkYjoge1xuXHQqICAgICBzY2hlbWE6ICdwdWJsaWMnLFxuXHQqICAgfSxcblx0KiAgIGF1dGg6IHtcblx0KiAgICAgYXV0b1JlZnJlc2hUb2tlbjogdHJ1ZSxcblx0KiAgICAgcGVyc2lzdFNlc3Npb246IHRydWUsXG5cdCogICAgIGRldGVjdFNlc3Npb25JblVybDogdHJ1ZVxuXHQqICAgfSxcblx0KiAgIGdsb2JhbDoge1xuXHQqICAgICBoZWFkZXJzOiB7ICd4LW15LWN1c3RvbS1oZWFkZXInOiAnbXktYXBwLW5hbWUnIH0sXG5cdCogICB9LFxuXHQqIH1cblx0KiBjb25zdCBzdXBhYmFzZSA9IGNyZWF0ZUNsaWVudChcImh0dHBzOi8veHl6Y29tcGFueS5zdXBhYmFzZS5jb1wiLCBcInlvdXItcHVibGlzaGFibGUta2V5XCIsIG9wdGlvbnMpXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZURlc2NyaXB0aW9uIFdpdGggY3VzdG9tIHNjaGVtYXNcblx0KiBCeSBkZWZhdWx0IHRoZSBBUEkgc2VydmVyIHBvaW50cyB0byB0aGUgYHB1YmxpY2Agc2NoZW1hLiBZb3UgY2FuIGVuYWJsZSBvdGhlciBkYXRhYmFzZSBzY2hlbWFzIHdpdGhpbiB0aGUgRGFzaGJvYXJkLlxuXHQqIEdvIHRvIFtTZXR0aW5ncyA+IEFQSSA+IEV4cG9zZWQgc2NoZW1hc10oL2Rhc2hib2FyZC9wcm9qZWN0L18vc2V0dGluZ3MvYXBpKSBhbmQgYWRkIHRoZSBzY2hlbWEgd2hpY2ggeW91IHdhbnQgdG8gZXhwb3NlIHRvIHRoZSBBUEkuXG5cdCpcblx0KiBOb3RlOiBlYWNoIGNsaWVudCBjb25uZWN0aW9uIGNhbiBvbmx5IGFjY2VzcyBhIHNpbmdsZSBzY2hlbWEsIHNvIHRoZSBjb2RlIGFib3ZlIGNhbiBhY2Nlc3MgdGhlIGBvdGhlcl9zY2hlbWFgIHNjaGVtYSBidXQgY2Fubm90IGFjY2VzcyB0aGUgYHB1YmxpY2Agc2NoZW1hLlxuXHQqXG5cdCogQGV4YW1wbGUgV2l0aCBjdXN0b20gc2NoZW1hc1xuXHQqIGBgYGpzXG5cdCogaW1wb3J0IHsgY3JlYXRlQ2xpZW50IH0gZnJvbSAnQHN1cGFiYXNlL3N1cGFiYXNlLWpzJ1xuXHQqXG5cdCogY29uc3Qgc3VwYWJhc2UgPSBjcmVhdGVDbGllbnQoJ2h0dHBzOi8veHl6Y29tcGFueS5zdXBhYmFzZS5jbycsICd5b3VyLXB1Ymxpc2hhYmxlLWtleScsIHtcblx0KiAgIC8vIFByb3ZpZGUgYSBjdXN0b20gc2NoZW1hLiBEZWZhdWx0cyB0byBcInB1YmxpY1wiLlxuXHQqICAgZGI6IHsgc2NoZW1hOiAnb3RoZXJfc2NoZW1hJyB9XG5cdCogfSlcblx0KiBgYGBcblx0KlxuXHQqIEBleGFtcGxlRGVzY3JpcHRpb24gQ3VzdG9tIGZldGNoIGltcGxlbWVudGF0aW9uXG5cdCogYHN1cGFiYXNlLWpzYCB1c2VzIHRoZSBbYGNyb3NzLWZldGNoYF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvY3Jvc3MtZmV0Y2gpIGxpYnJhcnkgdG8gbWFrZSBIVFRQIHJlcXVlc3RzLFxuXHQqIGJ1dCBhbiBhbHRlcm5hdGl2ZSBgZmV0Y2hgIGltcGxlbWVudGF0aW9uIGNhbiBiZSBwcm92aWRlZCBhcyBhbiBvcHRpb24uXG5cdCogVGhpcyBpcyBtb3N0IHVzZWZ1bCBpbiBlbnZpcm9ubWVudHMgd2hlcmUgYGNyb3NzLWZldGNoYCBpcyBub3QgY29tcGF0aWJsZSAoZm9yIGluc3RhbmNlIENsb3VkZmxhcmUgV29ya2VycykuXG5cdCpcblx0KiBAZXhhbXBsZSBDdXN0b20gZmV0Y2ggaW1wbGVtZW50YXRpb25cblx0KiBgYGBqc1xuXHQqIGltcG9ydCB7IGNyZWF0ZUNsaWVudCB9IGZyb20gJ0BzdXBhYmFzZS9zdXBhYmFzZS1qcydcblx0KlxuXHQqIGNvbnN0IHN1cGFiYXNlID0gY3JlYXRlQ2xpZW50KCdodHRwczovL3h5emNvbXBhbnkuc3VwYWJhc2UuY28nLCAneW91ci1wdWJsaXNoYWJsZS1rZXknLCB7XG5cdCogICBnbG9iYWw6IHsgZmV0Y2g6IGZldGNoLmJpbmQoZ2xvYmFsVGhpcykgfVxuXHQqIH0pXG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZURlc2NyaXB0aW9uIFJlYWN0IE5hdGl2ZSBvcHRpb25zIHdpdGggQXN5bmNTdG9yYWdlXG5cdCogRm9yIFJlYWN0IE5hdGl2ZSB3ZSByZWNvbW1lbmQgdXNpbmcgYEFzeW5jU3RvcmFnZWAgYXMgdGhlIHN0b3JhZ2UgaW1wbGVtZW50YXRpb24gZm9yIFN1cGFiYXNlIEF1dGguXG5cdCpcblx0KiBAZXhhbXBsZSBSZWFjdCBOYXRpdmUgb3B0aW9ucyB3aXRoIEFzeW5jU3RvcmFnZVxuXHQqIGBgYGpzXG5cdCogaW1wb3J0ICdyZWFjdC1uYXRpdmUtdXJsLXBvbHlmaWxsL2F1dG8nXG5cdCogaW1wb3J0IHsgY3JlYXRlQ2xpZW50IH0gZnJvbSAnQHN1cGFiYXNlL3N1cGFiYXNlLWpzJ1xuXHQqIGltcG9ydCBBc3luY1N0b3JhZ2UgZnJvbSBcIkByZWFjdC1uYXRpdmUtYXN5bmMtc3RvcmFnZS9hc3luYy1zdG9yYWdlXCI7XG5cdCpcblx0KiBjb25zdCBzdXBhYmFzZSA9IGNyZWF0ZUNsaWVudChcImh0dHBzOi8veHl6Y29tcGFueS5zdXBhYmFzZS5jb1wiLCBcInlvdXItcHVibGlzaGFibGUta2V5XCIsIHtcblx0KiAgIGF1dGg6IHtcblx0KiAgICAgc3RvcmFnZTogQXN5bmNTdG9yYWdlLFxuXHQqICAgICBhdXRvUmVmcmVzaFRva2VuOiB0cnVlLFxuXHQqICAgICBwZXJzaXN0U2Vzc2lvbjogdHJ1ZSxcblx0KiAgICAgZGV0ZWN0U2Vzc2lvbkluVXJsOiBmYWxzZSxcblx0KiAgIH0sXG5cdCogfSk7XG5cdCogYGBgXG5cdCpcblx0KiBAZXhhbXBsZURlc2NyaXB0aW9uIFJlYWN0IE5hdGl2ZSBvcHRpb25zIHdpdGggRXhwbyBTZWN1cmVTdG9yZVxuXHQqIElmIHlvdSB3aXNoIHRvIGVuY3J5cHQgdGhlIHVzZXIncyBzZXNzaW9uIGluZm9ybWF0aW9uLCB5b3UgY2FuIHVzZSBgYWVzLWpzYCBhbmQgc3RvcmUgdGhlIGVuY3J5cHRpb24ga2V5IGluIEV4cG8gU2VjdXJlU3RvcmUuXG5cdCogVGhlIGBhZXMtanNgIGxpYnJhcnksIGEgcmVwdXRhYmxlIEphdmFTY3JpcHQtb25seSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQUVTIGVuY3J5cHRpb24gYWxnb3JpdGhtIGluIENUUiBtb2RlLlxuXHQqIEEgbmV3IDI1Ni1iaXQgZW5jcnlwdGlvbiBrZXkgaXMgZ2VuZXJhdGVkIHVzaW5nIHRoZSBgcmVhY3QtbmF0aXZlLWdldC1yYW5kb20tdmFsdWVzYCBsaWJyYXJ5LlxuXHQqIFRoaXMga2V5IGlzIHN0b3JlZCBpbnNpZGUgRXhwbydzIFNlY3VyZVN0b3JlLCB3aGlsZSB0aGUgdmFsdWUgaXMgZW5jcnlwdGVkIGFuZCBwbGFjZWQgaW5zaWRlIEFzeW5jU3RvcmFnZS5cblx0KlxuXHQqIFBsZWFzZSBtYWtlIHN1cmUgdGhhdDpcblx0KiAtIFlvdSBrZWVwIHRoZSBgZXhwby1zZWN1cmUtc3RvcmVgLCBgYWVzLWpzYCBhbmQgYHJlYWN0LW5hdGl2ZS1nZXQtcmFuZG9tLXZhbHVlc2AgbGlicmFyaWVzIHVwLXRvLWRhdGUuXG5cdCogLSBDaG9vc2UgdGhlIGNvcnJlY3QgW2BTZWN1cmVTdG9yZU9wdGlvbnNgXShodHRwczovL2RvY3MuZXhwby5kZXYvdmVyc2lvbnMvbGF0ZXN0L3Nkay9zZWN1cmVzdG9yZS8jc2VjdXJlc3RvcmVvcHRpb25zKSBmb3IgeW91ciBhcHAncyBuZWVkcy5cblx0KiAgIEUuZy4gW2BTZWN1cmVTdG9yZS5XSEVOX1VOTE9DS0VEYF0oaHR0cHM6Ly9kb2NzLmV4cG8uZGV2L3ZlcnNpb25zL2xhdGVzdC9zZGsvc2VjdXJlc3RvcmUvI3NlY3VyZXN0b3Jld2hlbl91bmxvY2tlZCkgcmVndWxhdGVzIHdoZW4gdGhlIGRhdGEgY2FuIGJlIGFjY2Vzc2VkLlxuXHQqIC0gQ2FyZWZ1bGx5IGNvbnNpZGVyIG9wdGltaXphdGlvbnMgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucyB0byB0aGUgYWJvdmUgZXhhbXBsZSwgYXMgdGhvc2UgY2FuIGxlYWQgdG8gaW50cm9kdWNpbmcgc3VidGxlIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllcy5cblx0KlxuXHQqIEBleGFtcGxlIFJlYWN0IE5hdGl2ZSBvcHRpb25zIHdpdGggRXhwbyBTZWN1cmVTdG9yZVxuXHQqIGBgYHRzXG5cdCogaW1wb3J0ICdyZWFjdC1uYXRpdmUtdXJsLXBvbHlmaWxsL2F1dG8nXG5cdCogaW1wb3J0IHsgY3JlYXRlQ2xpZW50IH0gZnJvbSAnQHN1cGFiYXNlL3N1cGFiYXNlLWpzJ1xuXHQqIGltcG9ydCBBc3luY1N0b3JhZ2UgZnJvbSAnQHJlYWN0LW5hdGl2ZS1hc3luYy1zdG9yYWdlL2FzeW5jLXN0b3JhZ2UnO1xuXHQqIGltcG9ydCAqIGFzIFNlY3VyZVN0b3JlIGZyb20gJ2V4cG8tc2VjdXJlLXN0b3JlJztcblx0KiBpbXBvcnQgKiBhcyBhZXNqcyBmcm9tICdhZXMtanMnO1xuXHQqIGltcG9ydCAncmVhY3QtbmF0aXZlLWdldC1yYW5kb20tdmFsdWVzJztcblx0KlxuXHQqIC8vIEFzIEV4cG8ncyBTZWN1cmVTdG9yZSBkb2VzIG5vdCBzdXBwb3J0IHZhbHVlcyBsYXJnZXIgdGhhbiAyMDQ4XG5cdCogLy8gYnl0ZXMsIGFuIEFFUy0yNTYga2V5IGlzIGdlbmVyYXRlZCBhbmQgc3RvcmVkIGluIFNlY3VyZVN0b3JlLCB3aGlsZVxuXHQqIC8vIGl0IGlzIHVzZWQgdG8gZW5jcnlwdC9kZWNyeXB0IHZhbHVlcyBzdG9yZWQgaW4gQXN5bmNTdG9yYWdlLlxuXHQqIGNsYXNzIExhcmdlU2VjdXJlU3RvcmUge1xuXHQqICAgcHJpdmF0ZSBhc3luYyBfZW5jcnlwdChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuXHQqICAgICBjb25zdCBlbmNyeXB0aW9uS2V5ID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgyNTYgLyA4KSk7XG5cdCpcblx0KiAgICAgY29uc3QgY2lwaGVyID0gbmV3IGFlc2pzLk1vZGVPZk9wZXJhdGlvbi5jdHIoZW5jcnlwdGlvbktleSwgbmV3IGFlc2pzLkNvdW50ZXIoMSkpO1xuXHQqICAgICBjb25zdCBlbmNyeXB0ZWRCeXRlcyA9IGNpcGhlci5lbmNyeXB0KGFlc2pzLnV0aWxzLnV0ZjgudG9CeXRlcyh2YWx1ZSkpO1xuXHQqXG5cdCogICAgIGF3YWl0IFNlY3VyZVN0b3JlLnNldEl0ZW1Bc3luYyhrZXksIGFlc2pzLnV0aWxzLmhleC5mcm9tQnl0ZXMoZW5jcnlwdGlvbktleSkpO1xuXHQqXG5cdCogICAgIHJldHVybiBhZXNqcy51dGlscy5oZXguZnJvbUJ5dGVzKGVuY3J5cHRlZEJ5dGVzKTtcblx0KiAgIH1cblx0KlxuXHQqICAgcHJpdmF0ZSBhc3luYyBfZGVjcnlwdChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuXHQqICAgICBjb25zdCBlbmNyeXB0aW9uS2V5SGV4ID0gYXdhaXQgU2VjdXJlU3RvcmUuZ2V0SXRlbUFzeW5jKGtleSk7XG5cdCogICAgIGlmICghZW5jcnlwdGlvbktleUhleCkge1xuXHQqICAgICAgIHJldHVybiBlbmNyeXB0aW9uS2V5SGV4O1xuXHQqICAgICB9XG5cdCpcblx0KiAgICAgY29uc3QgY2lwaGVyID0gbmV3IGFlc2pzLk1vZGVPZk9wZXJhdGlvbi5jdHIoYWVzanMudXRpbHMuaGV4LnRvQnl0ZXMoZW5jcnlwdGlvbktleUhleCksIG5ldyBhZXNqcy5Db3VudGVyKDEpKTtcblx0KiAgICAgY29uc3QgZGVjcnlwdGVkQnl0ZXMgPSBjaXBoZXIuZGVjcnlwdChhZXNqcy51dGlscy5oZXgudG9CeXRlcyh2YWx1ZSkpO1xuXHQqXG5cdCogICAgIHJldHVybiBhZXNqcy51dGlscy51dGY4LmZyb21CeXRlcyhkZWNyeXB0ZWRCeXRlcyk7XG5cdCogICB9XG5cdCpcblx0KiAgIGFzeW5jIGdldEl0ZW0oa2V5OiBzdHJpbmcpIHtcblx0KiAgICAgY29uc3QgZW5jcnlwdGVkID0gYXdhaXQgQXN5bmNTdG9yYWdlLmdldEl0ZW0oa2V5KTtcblx0KiAgICAgaWYgKCFlbmNyeXB0ZWQpIHsgcmV0dXJuIGVuY3J5cHRlZDsgfVxuXHQqXG5cdCogICAgIHJldHVybiBhd2FpdCB0aGlzLl9kZWNyeXB0KGtleSwgZW5jcnlwdGVkKTtcblx0KiAgIH1cblx0KlxuXHQqICAgYXN5bmMgcmVtb3ZlSXRlbShrZXk6IHN0cmluZykge1xuXHQqICAgICBhd2FpdCBBc3luY1N0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuXHQqICAgICBhd2FpdCBTZWN1cmVTdG9yZS5kZWxldGVJdGVtQXN5bmMoa2V5KTtcblx0KiAgIH1cblx0KlxuXHQqICAgYXN5bmMgc2V0SXRlbShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZykge1xuXHQqICAgICBjb25zdCBlbmNyeXB0ZWQgPSBhd2FpdCB0aGlzLl9lbmNyeXB0KGtleSwgdmFsdWUpO1xuXHQqXG5cdCogICAgIGF3YWl0IEFzeW5jU3RvcmFnZS5zZXRJdGVtKGtleSwgZW5jcnlwdGVkKTtcblx0KiAgIH1cblx0KiB9XG5cdCpcblx0KiBjb25zdCBzdXBhYmFzZSA9IGNyZWF0ZUNsaWVudChcImh0dHBzOi8veHl6Y29tcGFueS5zdXBhYmFzZS5jb1wiLCBcInlvdXItcHVibGlzaGFibGUta2V5XCIsIHtcblx0KiAgIGF1dGg6IHtcblx0KiAgICAgc3RvcmFnZTogbmV3IExhcmdlU2VjdXJlU3RvcmUoKSxcblx0KiAgICAgYXV0b1JlZnJlc2hUb2tlbjogdHJ1ZSxcblx0KiAgICAgcGVyc2lzdFNlc3Npb246IHRydWUsXG5cdCogICAgIGRldGVjdFNlc3Npb25JblVybDogZmFsc2UsXG5cdCogICB9LFxuXHQqIH0pO1xuXHQqIGBgYFxuXHQqXG5cdCogQGV4YW1wbGUgV2l0aCBhIGRhdGFiYXNlIHF1ZXJ5XG5cdCogYGBgdHNcblx0KiBpbXBvcnQgeyBjcmVhdGVDbGllbnQgfSBmcm9tICdAc3VwYWJhc2Uvc3VwYWJhc2UtanMnXG5cdCpcblx0KiBjb25zdCBzdXBhYmFzZSA9IGNyZWF0ZUNsaWVudCgnaHR0cHM6Ly94eXpjb21wYW55LnN1cGFiYXNlLmNvJywgJ3lvdXItcHVibGlzaGFibGUta2V5Jylcblx0KlxuXHQqIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgc3VwYWJhc2UuZnJvbSgncHJvZmlsZXMnKS5zZWxlY3QoJyonKVxuXHQqIGBgYFxuXHQqL1xuXHRjb25zdHJ1Y3RvcihzdXBhYmFzZVVybCwgc3VwYWJhc2VLZXksIG9wdGlvbnMpIHtcblx0XHR2YXIgX3NldHRpbmdzJGF1dGgkc3RvcmFnLCBfc2V0dGluZ3MkZ2xvYmFsJGhlYWQ7XG5cdFx0dGhpcy5zdXBhYmFzZVVybCA9IHN1cGFiYXNlVXJsO1xuXHRcdHRoaXMuc3VwYWJhc2VLZXkgPSBzdXBhYmFzZUtleTtcblx0XHRjb25zdCBiYXNlVXJsID0gdmFsaWRhdGVTdXBhYmFzZVVybChzdXBhYmFzZVVybCk7XG5cdFx0aWYgKCFzdXBhYmFzZUtleSkgdGhyb3cgbmV3IEVycm9yKFwic3VwYWJhc2VLZXkgaXMgcmVxdWlyZWQuXCIpO1xuXHRcdHRoaXMucmVhbHRpbWVVcmwgPSBuZXcgVVJMKFwicmVhbHRpbWUvdjFcIiwgYmFzZVVybCk7XG5cdFx0dGhpcy5yZWFsdGltZVVybC5wcm90b2NvbCA9IHRoaXMucmVhbHRpbWVVcmwucHJvdG9jb2wucmVwbGFjZShcImh0dHBcIiwgXCJ3c1wiKTtcblx0XHR0aGlzLmF1dGhVcmwgPSBuZXcgVVJMKFwiYXV0aC92MVwiLCBiYXNlVXJsKTtcblx0XHR0aGlzLnN0b3JhZ2VVcmwgPSBuZXcgVVJMKFwic3RvcmFnZS92MVwiLCBiYXNlVXJsKTtcblx0XHR0aGlzLmZ1bmN0aW9uc1VybCA9IG5ldyBVUkwoXCJmdW5jdGlvbnMvdjFcIiwgYmFzZVVybCk7XG5cdFx0Y29uc3QgZGVmYXVsdFN0b3JhZ2VLZXkgPSBgc2ItJHtiYXNlVXJsLmhvc3RuYW1lLnNwbGl0KFwiLlwiKVswXX0tYXV0aC10b2tlbmA7XG5cdFx0Y29uc3QgREVGQVVMVFMgPSB7XG5cdFx0XHRkYjogREVGQVVMVF9EQl9PUFRJT05TLFxuXHRcdFx0cmVhbHRpbWU6IERFRkFVTFRfUkVBTFRJTUVfT1BUSU9OUyxcblx0XHRcdGF1dGg6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBERUZBVUxUX0FVVEhfT1BUSU9OUyksIHt9LCB7IHN0b3JhZ2VLZXk6IGRlZmF1bHRTdG9yYWdlS2V5IH0pLFxuXHRcdFx0Z2xvYmFsOiBERUZBVUxUX0dMT0JBTF9PUFRJT05TXG5cdFx0fTtcblx0XHRjb25zdCBzZXR0aW5ncyA9IGFwcGx5U2V0dGluZ0RlZmF1bHRzKG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHt9LCBERUZBVUxUUyk7XG5cdFx0dGhpcy5zdG9yYWdlS2V5ID0gKF9zZXR0aW5ncyRhdXRoJHN0b3JhZyA9IHNldHRpbmdzLmF1dGguc3RvcmFnZUtleSkgIT09IG51bGwgJiYgX3NldHRpbmdzJGF1dGgkc3RvcmFnICE9PSB2b2lkIDAgPyBfc2V0dGluZ3MkYXV0aCRzdG9yYWcgOiBcIlwiO1xuXHRcdHRoaXMuaGVhZGVycyA9IChfc2V0dGluZ3MkZ2xvYmFsJGhlYWQgPSBzZXR0aW5ncy5nbG9iYWwuaGVhZGVycykgIT09IG51bGwgJiYgX3NldHRpbmdzJGdsb2JhbCRoZWFkICE9PSB2b2lkIDAgPyBfc2V0dGluZ3MkZ2xvYmFsJGhlYWQgOiB7fTtcblx0XHRpZiAoIXNldHRpbmdzLmFjY2Vzc1Rva2VuKSB7XG5cdFx0XHR2YXIgX3NldHRpbmdzJGF1dGg7XG5cdFx0XHR0aGlzLmF1dGggPSB0aGlzLl9pbml0U3VwYWJhc2VBdXRoQ2xpZW50KChfc2V0dGluZ3MkYXV0aCA9IHNldHRpbmdzLmF1dGgpICE9PSBudWxsICYmIF9zZXR0aW5ncyRhdXRoICE9PSB2b2lkIDAgPyBfc2V0dGluZ3MkYXV0aCA6IHt9LCB0aGlzLmhlYWRlcnMsIHNldHRpbmdzLmdsb2JhbC5mZXRjaCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWNjZXNzVG9rZW4gPSBzZXR0aW5ncy5hY2Nlc3NUb2tlbjtcblx0XHRcdHRoaXMuYXV0aCA9IG5ldyBQcm94eSh7fSwgeyBnZXQ6IChfLCBwcm9wKSA9PiB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgQHN1cGFiYXNlL3N1cGFiYXNlLWpzOiBTdXBhYmFzZSBDbGllbnQgaXMgY29uZmlndXJlZCB3aXRoIHRoZSBhY2Nlc3NUb2tlbiBvcHRpb24sIGFjY2Vzc2luZyBzdXBhYmFzZS5hdXRoLiR7U3RyaW5nKHByb3ApfSBpcyBub3QgcG9zc2libGVgKTtcblx0XHRcdH0gfSk7XG5cdFx0fVxuXHRcdHRoaXMuZmV0Y2ggPSBmZXRjaFdpdGhBdXRoKHN1cGFiYXNlS2V5LCB0aGlzLl9nZXRBY2Nlc3NUb2tlbi5iaW5kKHRoaXMpLCBzZXR0aW5ncy5nbG9iYWwuZmV0Y2gpO1xuXHRcdHRoaXMucmVhbHRpbWUgPSB0aGlzLl9pbml0UmVhbHRpbWVDbGllbnQoX29iamVjdFNwcmVhZDIoe1xuXHRcdFx0aGVhZGVyczogdGhpcy5oZWFkZXJzLFxuXHRcdFx0YWNjZXNzVG9rZW46IHRoaXMuX2dldEFjY2Vzc1Rva2VuLmJpbmQodGhpcyksXG5cdFx0XHRmZXRjaDogdGhpcy5mZXRjaFxuXHRcdH0sIHNldHRpbmdzLnJlYWx0aW1lKSk7XG5cdFx0aWYgKHRoaXMuYWNjZXNzVG9rZW4pIFByb21pc2UucmVzb2x2ZSh0aGlzLmFjY2Vzc1Rva2VuKCkpLnRoZW4oKHRva2VuKSA9PiB0aGlzLnJlYWx0aW1lLnNldEF1dGgodG9rZW4pKS5jYXRjaCgoZSkgPT4gY29uc29sZS53YXJuKFwiRmFpbGVkIHRvIHNldCBpbml0aWFsIFJlYWx0aW1lIGF1dGggdG9rZW46XCIsIGUpKTtcblx0XHR0aGlzLnJlc3QgPSBuZXcgUG9zdGdyZXN0Q2xpZW50KG5ldyBVUkwoXCJyZXN0L3YxXCIsIGJhc2VVcmwpLmhyZWYsIHtcblx0XHRcdGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcblx0XHRcdHNjaGVtYTogc2V0dGluZ3MuZGIuc2NoZW1hLFxuXHRcdFx0ZmV0Y2g6IHRoaXMuZmV0Y2gsXG5cdFx0XHR0aW1lb3V0OiBzZXR0aW5ncy5kYi50aW1lb3V0LFxuXHRcdFx0dXJsTGVuZ3RoTGltaXQ6IHNldHRpbmdzLmRiLnVybExlbmd0aExpbWl0XG5cdFx0fSk7XG5cdFx0dGhpcy5zdG9yYWdlID0gbmV3IFN0b3JhZ2VDbGllbnQodGhpcy5zdG9yYWdlVXJsLmhyZWYsIHRoaXMuaGVhZGVycywgdGhpcy5mZXRjaCwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnN0b3JhZ2UpO1xuXHRcdGlmICghc2V0dGluZ3MuYWNjZXNzVG9rZW4pIHRoaXMuX2xpc3RlbkZvckF1dGhFdmVudHMoKTtcblx0fVxuXHQvKipcblx0KiBTdXBhYmFzZSBGdW5jdGlvbnMgYWxsb3dzIHlvdSB0byBkZXBsb3kgYW5kIGludm9rZSBlZGdlIGZ1bmN0aW9ucy5cblx0Ki9cblx0Z2V0IGZ1bmN0aW9ucygpIHtcblx0XHRyZXR1cm4gbmV3IEZ1bmN0aW9uc0NsaWVudCh0aGlzLmZ1bmN0aW9uc1VybC5ocmVmLCB7XG5cdFx0XHRoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG5cdFx0XHRjdXN0b21GZXRjaDogdGhpcy5mZXRjaFxuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQqIFBlcmZvcm0gYSBxdWVyeSBvbiBhIHRhYmxlIG9yIGEgdmlldy5cblx0KlxuXHQqIEBwYXJhbSByZWxhdGlvbiAtIFRoZSB0YWJsZSBvciB2aWV3IG5hbWUgdG8gcXVlcnlcblx0Ki9cblx0ZnJvbShyZWxhdGlvbikge1xuXHRcdHJldHVybiB0aGlzLnJlc3QuZnJvbShyZWxhdGlvbik7XG5cdH1cblx0LyoqXG5cdCogU2VsZWN0IGEgc2NoZW1hIHRvIHF1ZXJ5IG9yIHBlcmZvcm0gYW4gZnVuY3Rpb24gKHJwYykgY2FsbC5cblx0KlxuXHQqIFRoZSBzY2hlbWEgbmVlZHMgdG8gYmUgb24gdGhlIGxpc3Qgb2YgZXhwb3NlZCBzY2hlbWFzIGluc2lkZSBTdXBhYmFzZS5cblx0KlxuXHQqIEBwYXJhbSBzY2hlbWEgLSBUaGUgc2NoZW1hIHRvIHF1ZXJ5XG5cdCovXG5cdHNjaGVtYShzY2hlbWEpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXN0LnNjaGVtYShzY2hlbWEpO1xuXHR9XG5cdC8qKlxuXHQqIFBlcmZvcm0gYSBmdW5jdGlvbiBjYWxsLlxuXHQqXG5cdCogQHBhcmFtIGZuIC0gVGhlIGZ1bmN0aW9uIG5hbWUgdG8gY2FsbFxuXHQqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBmdW5jdGlvbiBjYWxsXG5cdCogQHBhcmFtIG9wdGlvbnMgLSBOYW1lZCBwYXJhbWV0ZXJzXG5cdCogQHBhcmFtIG9wdGlvbnMuaGVhZCAtIFdoZW4gc2V0IHRvIGB0cnVlYCwgYGRhdGFgIHdpbGwgbm90IGJlIHJldHVybmVkLlxuXHQqIFVzZWZ1bCBpZiB5b3Ugb25seSBuZWVkIHRoZSBjb3VudC5cblx0KiBAcGFyYW0gb3B0aW9ucy5nZXQgLSBXaGVuIHNldCB0byBgdHJ1ZWAsIHRoZSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aXRoXG5cdCogcmVhZC1vbmx5IGFjY2VzcyBtb2RlLlxuXHQqIEBwYXJhbSBvcHRpb25zLmNvdW50IC0gQ291bnQgYWxnb3JpdGhtIHRvIHVzZSB0byBjb3VudCByb3dzIHJldHVybmVkIGJ5IHRoZVxuXHQqIGZ1bmN0aW9uLiBPbmx5IGFwcGxpY2FibGUgZm9yIFtzZXQtcmV0dXJuaW5nXG5cdCogZnVuY3Rpb25zXShodHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzL2N1cnJlbnQvZnVuY3Rpb25zLXNyZi5odG1sKS5cblx0KlxuXHQqIGBcImV4YWN0XCJgOiBFeGFjdCBidXQgc2xvdyBjb3VudCBhbGdvcml0aG0uIFBlcmZvcm1zIGEgYENPVU5UKCopYCB1bmRlciB0aGVcblx0KiBob29kLlxuXHQqXG5cdCogYFwicGxhbm5lZFwiYDogQXBwcm94aW1hdGVkIGJ1dCBmYXN0IGNvdW50IGFsZ29yaXRobS4gVXNlcyB0aGUgUG9zdGdyZXNcblx0KiBzdGF0aXN0aWNzIHVuZGVyIHRoZSBob29kLlxuXHQqXG5cdCogYFwiZXN0aW1hdGVkXCJgOiBVc2VzIGV4YWN0IGNvdW50IGZvciBsb3cgbnVtYmVycyBhbmQgcGxhbm5lZCBjb3VudCBmb3IgaGlnaFxuXHQqIG51bWJlcnMuXG5cdCovXG5cdHJwYyhmbiwgYXJncyA9IHt9LCBvcHRpb25zID0ge1xuXHRcdGhlYWQ6IGZhbHNlLFxuXHRcdGdldDogZmFsc2UsXG5cdFx0Y291bnQ6IHZvaWQgMFxuXHR9KSB7XG5cdFx0cmV0dXJuIHRoaXMucmVzdC5ycGMoZm4sIGFyZ3MsIG9wdGlvbnMpO1xuXHR9XG5cdC8qKlxuXHQqIENyZWF0ZXMgYSBSZWFsdGltZSBjaGFubmVsIHdpdGggQnJvYWRjYXN0LCBQcmVzZW5jZSwgYW5kIFBvc3RncmVzIENoYW5nZXMuXG5cdCpcblx0KiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBuYW1lIG9mIHRoZSBSZWFsdGltZSBjaGFubmVsLlxuXHQqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIG9wdGlvbnMgdG8gcGFzcyB0byB0aGUgUmVhbHRpbWUgY2hhbm5lbC5cblx0KlxuXHQqIEBjYXRlZ29yeSBSZWFsdGltZVxuXHQqL1xuXHRjaGFubmVsKG5hbWUsIG9wdHMgPSB7IGNvbmZpZzoge30gfSkge1xuXHRcdHJldHVybiB0aGlzLnJlYWx0aW1lLmNoYW5uZWwobmFtZSwgb3B0cyk7XG5cdH1cblx0LyoqXG5cdCogUmV0dXJucyBhbGwgUmVhbHRpbWUgY2hhbm5lbHMuXG5cdCpcblx0KiBAY2F0ZWdvcnkgUmVhbHRpbWVcblx0KlxuXHQqIEBleGFtcGxlIEdldCBhbGwgY2hhbm5lbHNcblx0KiBgYGBqc1xuXHQqIGNvbnN0IGNoYW5uZWxzID0gc3VwYWJhc2UuZ2V0Q2hhbm5lbHMoKVxuXHQqIGBgYFxuXHQqL1xuXHRnZXRDaGFubmVscygpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFsdGltZS5nZXRDaGFubmVscygpO1xuXHR9XG5cdC8qKlxuXHQqIFVuc3Vic2NyaWJlcyBhbmQgcmVtb3ZlcyBSZWFsdGltZSBjaGFubmVsIGZyb20gUmVhbHRpbWUgY2xpZW50LlxuXHQqXG5cdCogQHBhcmFtIHtSZWFsdGltZUNoYW5uZWx9IGNoYW5uZWwgLSBUaGUgbmFtZSBvZiB0aGUgUmVhbHRpbWUgY2hhbm5lbC5cblx0KlxuXHQqXG5cdCogQGNhdGVnb3J5IFJlYWx0aW1lXG5cdCpcblx0KiBAcmVtYXJrc1xuXHQqIC0gUmVtb3ZpbmcgYSBjaGFubmVsIGlzIGEgZ3JlYXQgd2F5IHRvIG1haW50YWluIHRoZSBwZXJmb3JtYW5jZSBvZiB5b3VyIHByb2plY3QncyBSZWFsdGltZSBzZXJ2aWNlIGFzIHdlbGwgYXMgeW91ciBkYXRhYmFzZSBpZiB5b3UncmUgbGlzdGVuaW5nIHRvIFBvc3RncmVzIGNoYW5nZXMuIFN1cGFiYXNlIHdpbGwgYXV0b21hdGljYWxseSBoYW5kbGUgY2xlYW51cCAzMCBzZWNvbmRzIGFmdGVyIGEgY2xpZW50IGlzIGRpc2Nvbm5lY3RlZCwgYnV0IHVudXNlZCBjaGFubmVscyBtYXkgY2F1c2UgZGVncmFkYXRpb24gYXMgbW9yZSBjbGllbnRzIGFyZSBzaW11bHRhbmVvdXNseSBzdWJzY3JpYmVkLlxuXHQqXG5cdCogQGV4YW1wbGUgUmVtb3ZlcyBhIGNoYW5uZWxcblx0KiBgYGBqc1xuXHQqIHN1cGFiYXNlLnJlbW92ZUNoYW5uZWwobXlDaGFubmVsKVxuXHQqIGBgYFxuXHQqL1xuXHRyZW1vdmVDaGFubmVsKGNoYW5uZWwpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWFsdGltZS5yZW1vdmVDaGFubmVsKGNoYW5uZWwpO1xuXHR9XG5cdC8qKlxuXHQqIFVuc3Vic2NyaWJlcyBhbmQgcmVtb3ZlcyBhbGwgUmVhbHRpbWUgY2hhbm5lbHMgZnJvbSBSZWFsdGltZSBjbGllbnQuXG5cdCpcblx0KiBAY2F0ZWdvcnkgUmVhbHRpbWVcblx0KlxuXHQqIEByZW1hcmtzXG5cdCogLSBSZW1vdmluZyBjaGFubmVscyBpcyBhIGdyZWF0IHdheSB0byBtYWludGFpbiB0aGUgcGVyZm9ybWFuY2Ugb2YgeW91ciBwcm9qZWN0J3MgUmVhbHRpbWUgc2VydmljZSBhcyB3ZWxsIGFzIHlvdXIgZGF0YWJhc2UgaWYgeW91J3JlIGxpc3RlbmluZyB0byBQb3N0Z3JlcyBjaGFuZ2VzLiBTdXBhYmFzZSB3aWxsIGF1dG9tYXRpY2FsbHkgaGFuZGxlIGNsZWFudXAgMzAgc2Vjb25kcyBhZnRlciBhIGNsaWVudCBpcyBkaXNjb25uZWN0ZWQsIGJ1dCB1bnVzZWQgY2hhbm5lbHMgbWF5IGNhdXNlIGRlZ3JhZGF0aW9uIGFzIG1vcmUgY2xpZW50cyBhcmUgc2ltdWx0YW5lb3VzbHkgc3Vic2NyaWJlZC5cblx0KlxuXHQqIEBleGFtcGxlIFJlbW92ZSBhbGwgY2hhbm5lbHNcblx0KiBgYGBqc1xuXHQqIHN1cGFiYXNlLnJlbW92ZUFsbENoYW5uZWxzKClcblx0KiBgYGBcblx0Ki9cblx0cmVtb3ZlQWxsQ2hhbm5lbHMoKSB7XG5cdFx0cmV0dXJuIHRoaXMucmVhbHRpbWUucmVtb3ZlQWxsQ2hhbm5lbHMoKTtcblx0fVxuXHRhc3luYyBfZ2V0QWNjZXNzVG9rZW4oKSB7XG5cdFx0dmFyIF90aGlzID0gdGhpcztcblx0XHR2YXIgX2RhdGEkc2Vzc2lvbiRhY2Nlc3NfLCBfZGF0YSRzZXNzaW9uO1xuXHRcdGlmIChfdGhpcy5hY2Nlc3NUb2tlbikgcmV0dXJuIGF3YWl0IF90aGlzLmFjY2Vzc1Rva2VuKCk7XG5cdFx0Y29uc3QgeyBkYXRhIH0gPSBhd2FpdCBfdGhpcy5hdXRoLmdldFNlc3Npb24oKTtcblx0XHRyZXR1cm4gKF9kYXRhJHNlc3Npb24kYWNjZXNzXyA9IChfZGF0YSRzZXNzaW9uID0gZGF0YS5zZXNzaW9uKSA9PT0gbnVsbCB8fCBfZGF0YSRzZXNzaW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZGF0YSRzZXNzaW9uLmFjY2Vzc190b2tlbikgIT09IG51bGwgJiYgX2RhdGEkc2Vzc2lvbiRhY2Nlc3NfICE9PSB2b2lkIDAgPyBfZGF0YSRzZXNzaW9uJGFjY2Vzc18gOiBfdGhpcy5zdXBhYmFzZUtleTtcblx0fVxuXHRfaW5pdFN1cGFiYXNlQXV0aENsaWVudCh7IGF1dG9SZWZyZXNoVG9rZW4sIHBlcnNpc3RTZXNzaW9uLCBkZXRlY3RTZXNzaW9uSW5VcmwsIHN0b3JhZ2UsIHVzZXJTdG9yYWdlLCBzdG9yYWdlS2V5LCBmbG93VHlwZSwgbG9jaywgZGVidWcsIHRocm93T25FcnJvciwgZXhwZXJpbWVudGFsLCBsb2NrQWNxdWlyZVRpbWVvdXQsIHNraXBBdXRvSW5pdGlhbGl6ZSB9LCBoZWFkZXJzLCBmZXRjaCQxKSB7XG5cdFx0Y29uc3QgYXV0aEhlYWRlcnMgPSB7XG5cdFx0XHRBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dGhpcy5zdXBhYmFzZUtleX1gLFxuXHRcdFx0YXBpa2V5OiBgJHt0aGlzLnN1cGFiYXNlS2V5fWBcblx0XHR9O1xuXHRcdHJldHVybiBuZXcgU3VwYWJhc2VBdXRoQ2xpZW50KHtcblx0XHRcdHVybDogdGhpcy5hdXRoVXJsLmhyZWYsXG5cdFx0XHRoZWFkZXJzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgYXV0aEhlYWRlcnMpLCBoZWFkZXJzKSxcblx0XHRcdHN0b3JhZ2VLZXksXG5cdFx0XHRhdXRvUmVmcmVzaFRva2VuLFxuXHRcdFx0cGVyc2lzdFNlc3Npb24sXG5cdFx0XHRkZXRlY3RTZXNzaW9uSW5VcmwsXG5cdFx0XHRzdG9yYWdlLFxuXHRcdFx0dXNlclN0b3JhZ2UsXG5cdFx0XHRmbG93VHlwZSxcblx0XHRcdGxvY2ssXG5cdFx0XHRkZWJ1Zyxcblx0XHRcdHRocm93T25FcnJvcixcblx0XHRcdGV4cGVyaW1lbnRhbCxcblx0XHRcdGZldGNoOiBmZXRjaCQxLFxuXHRcdFx0bG9ja0FjcXVpcmVUaW1lb3V0LFxuXHRcdFx0c2tpcEF1dG9Jbml0aWFsaXplLFxuXHRcdFx0aGFzQ3VzdG9tQXV0aG9yaXphdGlvbkhlYWRlcjogT2JqZWN0LmtleXModGhpcy5oZWFkZXJzKS5zb21lKChrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSBcImF1dGhvcml6YXRpb25cIilcblx0XHR9KTtcblx0fVxuXHRfaW5pdFJlYWx0aW1lQ2xpZW50KG9wdGlvbnMpIHtcblx0XHRyZXR1cm4gbmV3IFJlYWx0aW1lQ2xpZW50KHRoaXMucmVhbHRpbWVVcmwuaHJlZiwgX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG9wdGlvbnMpLCB7fSwgeyBwYXJhbXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCB7IGFwaWtleTogdGhpcy5zdXBhYmFzZUtleSB9KSwgb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnBhcmFtcykgfSkpO1xuXHR9XG5cdF9saXN0ZW5Gb3JBdXRoRXZlbnRzKCkge1xuXHRcdHJldHVybiB0aGlzLmF1dGgub25BdXRoU3RhdGVDaGFuZ2UoKGV2ZW50LCBzZXNzaW9uKSA9PiB7XG5cdFx0XHR0aGlzLl9oYW5kbGVUb2tlbkNoYW5nZWQoZXZlbnQsIFwiQ0xJRU5UXCIsIHNlc3Npb24gPT09IG51bGwgfHwgc2Vzc2lvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2Vzc2lvbi5hY2Nlc3NfdG9rZW4pO1xuXHRcdH0pO1xuXHR9XG5cdF9oYW5kbGVUb2tlbkNoYW5nZWQoZXZlbnQsIHNvdXJjZSwgdG9rZW4pIHtcblx0XHRpZiAoKGV2ZW50ID09PSBcIlRPS0VOX1JFRlJFU0hFRFwiIHx8IGV2ZW50ID09PSBcIlNJR05FRF9JTlwiKSAmJiB0aGlzLmNoYW5nZWRBY2Nlc3NUb2tlbiAhPT0gdG9rZW4pIHtcblx0XHRcdHRoaXMuY2hhbmdlZEFjY2Vzc1Rva2VuID0gdG9rZW47XG5cdFx0XHR0aGlzLnJlYWx0aW1lLnNldEF1dGgodG9rZW4pO1xuXHRcdH0gZWxzZSBpZiAoZXZlbnQgPT09IFwiU0lHTkVEX09VVFwiKSB7XG5cdFx0XHR0aGlzLnJlYWx0aW1lLnNldEF1dGgoKTtcblx0XHRcdGlmIChzb3VyY2UgPT0gXCJTVE9SQUdFXCIpIHRoaXMuYXV0aC5zaWduT3V0KCk7XG5cdFx0XHR0aGlzLmNoYW5nZWRBY2Nlc3NUb2tlbiA9IHZvaWQgMDtcblx0XHR9XG5cdH1cbn07XG5cbi8vI2VuZHJlZ2lvblxuLy8jcmVnaW9uIHNyYy9pbmRleC50c1xuLyoqXG4qIENyZWF0ZXMgYSBuZXcgU3VwYWJhc2UgQ2xpZW50LlxuKlxuKiBAZXhhbXBsZSBDcmVhdGluZyBhIFN1cGFiYXNlIGNsaWVudFxuKiBgYGB0c1xuKiBpbXBvcnQgeyBjcmVhdGVDbGllbnQgfSBmcm9tICdAc3VwYWJhc2Uvc3VwYWJhc2UtanMnXG4qXG4qIGNvbnN0IHN1cGFiYXNlID0gY3JlYXRlQ2xpZW50KCdodHRwczovL3h5emNvbXBhbnkuc3VwYWJhc2UuY28nLCAneW91ci1wdWJsaXNoYWJsZS1rZXknKVxuKiBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZS5mcm9tKCdwcm9maWxlcycpLnNlbGVjdCgnKicpXG4qIGBgYFxuKi9cbmNvbnN0IGNyZWF0ZUNsaWVudCA9IChzdXBhYmFzZVVybCwgc3VwYWJhc2VLZXksIG9wdGlvbnMpID0+IHtcblx0cmV0dXJuIG5ldyBTdXBhYmFzZUNsaWVudChzdXBhYmFzZVVybCwgc3VwYWJhc2VLZXksIG9wdGlvbnMpO1xufTtcbmZ1bmN0aW9uIHNob3VsZFNob3dEZXByZWNhdGlvbldhcm5pbmcoKSB7XG5cdGlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZmFsc2U7XG5cdGNvbnN0IF9wcm9jZXNzID0gZ2xvYmFsVGhpc1tcInByb2Nlc3NcIl07XG5cdGlmICghX3Byb2Nlc3MpIHJldHVybiBmYWxzZTtcblx0Y29uc3QgcHJvY2Vzc1ZlcnNpb24gPSBfcHJvY2Vzc1tcInZlcnNpb25cIl07XG5cdGlmIChwcm9jZXNzVmVyc2lvbiA9PT0gdm9pZCAwIHx8IHByb2Nlc3NWZXJzaW9uID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdGNvbnN0IHZlcnNpb25NYXRjaCA9IHByb2Nlc3NWZXJzaW9uLm1hdGNoKC9edihcXGQrKVxcLi8pO1xuXHRpZiAoIXZlcnNpb25NYXRjaCkgcmV0dXJuIGZhbHNlO1xuXHRyZXR1cm4gcGFyc2VJbnQodmVyc2lvbk1hdGNoWzFdLCAxMCkgPD0gMTg7XG59XG5pZiAoc2hvdWxkU2hvd0RlcHJlY2F0aW9uV2FybmluZygpKSBjb25zb2xlLndhcm4oXCLimqDvuI8gIE5vZGUuanMgMTggYW5kIGJlbG93IGFyZSBkZXByZWNhdGVkIGFuZCB3aWxsIG5vIGxvbmdlciBiZSBzdXBwb3J0ZWQgaW4gZnV0dXJlIHZlcnNpb25zIG9mIEBzdXBhYmFzZS9zdXBhYmFzZS1qcy4gUGxlYXNlIHVwZ3JhZGUgdG8gTm9kZS5qcyAyMCBvciBsYXRlci4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHZpc2l0OiBodHRwczovL2dpdGh1Yi5jb20vb3Jncy9zdXBhYmFzZS9kaXNjdXNzaW9ucy8zNzIxN1wiKTtcblxuLy8jZW5kcmVnaW9uXG5leHBvcnQgeyBGdW5jdGlvblJlZ2lvbiwgRnVuY3Rpb25zRXJyb3IsIEZ1bmN0aW9uc0ZldGNoRXJyb3IsIEZ1bmN0aW9uc0h0dHBFcnJvciwgRnVuY3Rpb25zUmVsYXlFcnJvciwgUG9zdGdyZXN0RXJyb3IsIFN0b3JhZ2VBcGlFcnJvciwgU3VwYWJhc2VDbGllbnQsIGNyZWF0ZUNsaWVudCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubWpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/@supabase/supabase-js/dist/index.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/class-variance-authority/dist/index.mjs":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/class-variance-authority/dist/index.mjs ***!
|
||
\**************************************************************/
|
||
/***/ ((__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: () => (/* binding */ cva),\n/* harmony export */ cx: () => (/* 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/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ \nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nconst cx = clsx__WEBPACK_IMPORTED_MODULE_0__.clsx;\nconst cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\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);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\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)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9jbGFzcy12YXJpYW5jZS1hdXRob3JpdHkvZGlzdC9pbmRleC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBZ0M7QUFDaEMsK0RBQStELE1BQU07QUFDOUQsV0FBVyxzQ0FBSTtBQUNmO0FBQ1A7QUFDQTtBQUNBLGdCQUFnQiw0QkFBNEI7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxJQUFJO0FBQ2I7QUFDQSxrQkFBa0Isb0VBQW9FO0FBQ3RGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9jbGFzcy12YXJpYW5jZS1hdXRob3JpdHkvZGlzdC9pbmRleC5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgMjAyMiBKb2UgQmVsbC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdG8geW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjBcbiAqICh0aGUgXCJMaWNlbnNlXCIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlXG4gKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUywgV0lUSE9VVFxuICogV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGVcbiAqIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zIHVuZGVyXG4gKiB0aGUgTGljZW5zZS5cbiAqLyBpbXBvcnQgeyBjbHN4IH0gZnJvbSBcImNsc3hcIjtcbmNvbnN0IGZhbHN5VG9TdHJpbmcgPSAodmFsdWUpPT50eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiID8gYCR7dmFsdWV9YCA6IHZhbHVlID09PSAwID8gXCIwXCIgOiB2YWx1ZTtcbmV4cG9ydCBjb25zdCBjeCA9IGNsc3g7XG5leHBvcnQgY29uc3QgY3ZhID0gKGJhc2UsIGNvbmZpZyk9Pihwcm9wcyk9PntcbiAgICAgICAgdmFyIF9jb25maWdfY29tcG91bmRWYXJpYW50cztcbiAgICAgICAgaWYgKChjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcudmFyaWFudHMpID09IG51bGwpIHJldHVybiBjeChiYXNlLCBwcm9wcyA9PT0gbnVsbCB8fCBwcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvcHMuY2xhc3MsIHByb3BzID09PSBudWxsIHx8IHByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9wcy5jbGFzc05hbWUpO1xuICAgICAgICBjb25zdCB7IHZhcmlhbnRzLCBkZWZhdWx0VmFyaWFudHMgfSA9IGNvbmZpZztcbiAgICAgICAgY29uc3QgZ2V0VmFyaWFudENsYXNzTmFtZXMgPSBPYmplY3Qua2V5cyh2YXJpYW50cykubWFwKCh2YXJpYW50KT0+e1xuICAgICAgICAgICAgY29uc3QgdmFyaWFudFByb3AgPSBwcm9wcyA9PT0gbnVsbCB8fCBwcm9wcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvcHNbdmFyaWFudF07XG4gICAgICAgICAgICBjb25zdCBkZWZhdWx0VmFyaWFudFByb3AgPSBkZWZhdWx0VmFyaWFudHMgPT09IG51bGwgfHwgZGVmYXVsdFZhcmlhbnRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWZhdWx0VmFyaWFudHNbdmFyaWFudF07XG4gICAgICAgICAgICBpZiAodmFyaWFudFByb3AgPT09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICAgICAgY29uc3QgdmFyaWFudEtleSA9IGZhbHN5VG9TdHJpbmcodmFyaWFudFByb3ApIHx8IGZhbHN5VG9TdHJpbmcoZGVmYXVsdFZhcmlhbnRQcm9wKTtcbiAgICAgICAgICAgIHJldHVybiB2YXJpYW50c1t2YXJpYW50XVt2YXJpYW50S2V5XTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByb3BzV2l0aG91dFVuZGVmaW5lZCA9IHByb3BzICYmIE9iamVjdC5lbnRyaWVzKHByb3BzKS5yZWR1Y2UoKGFjYywgcGFyYW0pPT57XG4gICAgICAgICAgICBsZXQgW2tleSwgdmFsdWVdID0gcGFyYW07XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwge30pO1xuICAgICAgICBjb25zdCBnZXRDb21wb3VuZFZhcmlhbnRDbGFzc05hbWVzID0gY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogKF9jb25maWdfY29tcG91bmRWYXJpYW50cyA9IGNvbmZpZy5jb21wb3VuZFZhcmlhbnRzKSA9PT0gbnVsbCB8fCBfY29uZmlnX2NvbXBvdW5kVmFyaWFudHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb25maWdfY29tcG91bmRWYXJpYW50cy5yZWR1Y2UoKGFjYywgcGFyYW0pPT57XG4gICAgICAgICAgICBsZXQgeyBjbGFzczogY3ZDbGFzcywgY2xhc3NOYW1lOiBjdkNsYXNzTmFtZSwgLi4uY29tcG91bmRWYXJpYW50T3B0aW9ucyB9ID0gcGFyYW07XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMoY29tcG91bmRWYXJpYW50T3B0aW9ucykuZXZlcnkoKHBhcmFtKT0+e1xuICAgICAgICAgICAgICAgIGxldCBba2V5LCB2YWx1ZV0gPSBwYXJhbTtcbiAgICAgICAgICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5pbmNsdWRlcyh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmRlZmF1bHRWYXJpYW50cyxcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJvcHNXaXRob3V0VW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfVtrZXldKSA6ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmRlZmF1bHRWYXJpYW50cyxcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJvcHNXaXRob3V0VW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgfSlba2V5XSA9PT0gdmFsdWU7XG4gICAgICAgICAgICB9KSA/IFtcbiAgICAgICAgICAgICAgICAuLi5hY2MsXG4gICAgICAgICAgICAgICAgY3ZDbGFzcyxcbiAgICAgICAgICAgICAgICBjdkNsYXNzTmFtZVxuICAgICAgICAgICAgXSA6IGFjYztcbiAgICAgICAgfSwgW10pO1xuICAgICAgICByZXR1cm4gY3goYmFzZSwgZ2V0VmFyaWFudENsYXNzTmFtZXMsIGdldENvbXBvdW5kVmFyaWFudENsYXNzTmFtZXMsIHByb3BzID09PSBudWxsIHx8IHByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9wcy5jbGFzcywgcHJvcHMgPT09IG51bGwgfHwgcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BzLmNsYXNzTmFtZSk7XG4gICAgfTtcblxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\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 ***!
|
||
\*****************************************/
|
||
/***/ ((__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: () => (/* binding */ clsx),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\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<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clsx);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9jbHN4L2Rpc3QvY2xzeC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxjQUFjLGFBQWEsK0NBQStDLGdEQUFnRCxlQUFlLFFBQVEsSUFBSSwwQ0FBMEMseUNBQXlDLFNBQWdCLGdCQUFnQix3Q0FBd0MsSUFBSSxtREFBbUQsU0FBUyxpRUFBZSxJQUFJIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL2Nsc3gvZGlzdC9jbHN4Lm1qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJmdW5jdGlvbiByKGUpe3ZhciB0LGYsbj1cIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSluKz1lO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG89ZS5sZW5ndGg7Zm9yKHQ9MDt0PG87dCsrKWVbdF0mJihmPXIoZVt0XSkpJiYobiYmKG4rPVwiIFwiKSxuKz1mKX1lbHNlIGZvcihmIGluIGUpZVtmXSYmKG4mJihuKz1cIiBcIiksbis9Zik7cmV0dXJuIG59ZXhwb3J0IGZ1bmN0aW9uIGNsc3goKXtmb3IodmFyIGUsdCxmPTAsbj1cIlwiLG89YXJndW1lbnRzLmxlbmd0aDtmPG87ZisrKShlPWFyZ3VtZW50c1tmXSkmJih0PXIoZSkpJiYobiYmKG4rPVwiIFwiKSxuKz10KTtyZXR1cm4gbn1leHBvcnQgZGVmYXVsdCBjbHN4OyJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/clsx/dist/clsx.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/cookie/dist/index.js":
|
||
/*!*******************************************!*\
|
||
!*** ./node_modules/cookie/dist/index.js ***!
|
||
\*******************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.parseCookie = parseCookie;\nexports.parse = parseCookie;\nexports.stringifyCookie = stringifyCookie;\nexports.stringifySetCookie = stringifySetCookie;\nexports.serialize = stringifySetCookie;\nexports.parseSetCookie = parseSetCookie;\nexports.stringifySetCookie = stringifySetCookie;\nexports.serialize = stringifySetCookie;\n/**\n * RegExp to match cookie-name in RFC 6265 sec 4.1.1\n * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2\n * which has been replaced by the token definition in RFC 7230 appendix B.\n *\n * cookie-name = token\n * token = 1*tchar\n * tchar = \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" /\n * \"*\" / \"+\" / \"-\" / \".\" / \"^\" / \"_\" /\n * \"`\" / \"|\" / \"~\" / DIGIT / ALPHA\n *\n * Note: Allowing more characters - https://github.com/jshttp/cookie/issues/191\n * Allow same range as cookie value, except `=`, which delimits end of name.\n */\nconst cookieNameRegExp = /^[\\u0021-\\u003A\\u003C\\u003E-\\u007E]+$/;\n/**\n * RegExp to match cookie-value in RFC 6265 sec 4.1.1\n *\n * cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE )\n * cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E\n * ; US-ASCII characters excluding CTLs,\n * ; whitespace DQUOTE, comma, semicolon,\n * ; and backslash\n *\n * Allowing more characters: https://github.com/jshttp/cookie/issues/191\n * Comma, backslash, and DQUOTE are not part of the parsing algorithm.\n */\nconst cookieValueRegExp = /^[\\u0021-\\u003A\\u003C-\\u007E]*$/;\n/**\n * RegExp to match domain-value in RFC 6265 sec 4.1.1\n *\n * domain-value = <subdomain>\n * ; defined in [RFC1034], Section 3.5, as\n * ; enhanced by [RFC1123], Section 2.1\n * <subdomain> = <label> | <subdomain> \".\" <label>\n * <label> = <let-dig> [ [ <ldh-str> ] <let-dig> ]\n * Labels must be 63 characters or less.\n * 'let-dig' not 'letter' in the first char, per RFC1123\n * <ldh-str> = <let-dig-hyp> | <let-dig-hyp> <ldh-str>\n * <let-dig-hyp> = <let-dig> | \"-\"\n * <let-dig> = <letter> | <digit>\n * <letter> = any one of the 52 alphabetic characters A through Z in\n * upper case and a through z in lower case\n * <digit> = any one of the ten digits 0 through 9\n *\n * Keep support for leading dot: https://github.com/jshttp/cookie/issues/173\n *\n * > (Note that a leading %x2E (\".\"), if present, is ignored even though that\n * character is not permitted, but a trailing %x2E (\".\"), if present, will\n * cause the user agent to ignore the attribute.)\n */\nconst domainValueRegExp = /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;\n/**\n * RegExp to match path-value in RFC 6265 sec 4.1.1\n *\n * path-value = <any CHAR except CTLs or \";\">\n * CHAR = %x01-7F\n * ; defined in RFC 5234 appendix B.1\n */\nconst pathValueRegExp = /^[\\u0020-\\u003A\\u003D-\\u007E]*$/;\n/**\n * RegExp to match max-age-value in RFC 6265 sec 5.6.2\n */\nconst maxAgeRegExp = /^-?\\d+$/;\nconst __toString = Object.prototype.toString;\nconst NullObject = /* @__PURE__ */ (() => {\n const C = function () { };\n C.prototype = Object.create(null);\n return C;\n})();\n/**\n * Parse a `Cookie` header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n */\nfunction parseCookie(str, options) {\n const obj = new NullObject();\n const len = str.length;\n // RFC 6265 sec 4.1.1, RFC 2616 2.2 defines a cookie name consists of one char minimum, plus '='.\n if (len < 2)\n return obj;\n const dec = options?.decode || decode;\n let index = 0;\n do {\n const eqIdx = eqIndex(str, index, len);\n if (eqIdx === -1)\n break; // No more cookie pairs.\n const endIdx = endIndex(str, index, len);\n if (eqIdx > endIdx) {\n // backtrack on prior semicolon\n index = str.lastIndexOf(\";\", eqIdx - 1) + 1;\n continue;\n }\n const key = valueSlice(str, index, eqIdx);\n // only assign once\n if (obj[key] === undefined) {\n obj[key] = dec(valueSlice(str, eqIdx + 1, endIdx));\n }\n index = endIdx + 1;\n } while (index < len);\n return obj;\n}\n/**\n * Stringifies an object into an HTTP `Cookie` header.\n */\nfunction stringifyCookie(cookie, options) {\n const enc = options?.encode || encodeURIComponent;\n const cookieStrings = [];\n for (const name of Object.keys(cookie)) {\n const val = cookie[name];\n if (val === undefined)\n continue;\n if (!cookieNameRegExp.test(name)) {\n throw new TypeError(`cookie name is invalid: ${name}`);\n }\n const value = enc(val);\n if (!cookieValueRegExp.test(value)) {\n throw new TypeError(`cookie val is invalid: ${val}`);\n }\n cookieStrings.push(`${name}=${value}`);\n }\n return cookieStrings.join(\"; \");\n}\nfunction stringifySetCookie(_name, _val, _opts) {\n const cookie = typeof _name === \"object\"\n ? _name\n : { ..._opts, name: _name, value: String(_val) };\n const options = typeof _val === \"object\" ? _val : _opts;\n const enc = options?.encode || encodeURIComponent;\n if (!cookieNameRegExp.test(cookie.name)) {\n throw new TypeError(`argument name is invalid: ${cookie.name}`);\n }\n const value = cookie.value ? enc(cookie.value) : \"\";\n if (!cookieValueRegExp.test(value)) {\n throw new TypeError(`argument val is invalid: ${cookie.value}`);\n }\n let str = cookie.name + \"=\" + value;\n if (cookie.maxAge !== undefined) {\n if (!Number.isInteger(cookie.maxAge)) {\n throw new TypeError(`option maxAge is invalid: ${cookie.maxAge}`);\n }\n str += \"; Max-Age=\" + cookie.maxAge;\n }\n if (cookie.domain) {\n if (!domainValueRegExp.test(cookie.domain)) {\n throw new TypeError(`option domain is invalid: ${cookie.domain}`);\n }\n str += \"; Domain=\" + cookie.domain;\n }\n if (cookie.path) {\n if (!pathValueRegExp.test(cookie.path)) {\n throw new TypeError(`option path is invalid: ${cookie.path}`);\n }\n str += \"; Path=\" + cookie.path;\n }\n if (cookie.expires) {\n if (!isDate(cookie.expires) || !Number.isFinite(cookie.expires.valueOf())) {\n throw new TypeError(`option expires is invalid: ${cookie.expires}`);\n }\n str += \"; Expires=\" + cookie.expires.toUTCString();\n }\n if (cookie.httpOnly) {\n str += \"; HttpOnly\";\n }\n if (cookie.secure) {\n str += \"; Secure\";\n }\n if (cookie.partitioned) {\n str += \"; Partitioned\";\n }\n if (cookie.priority) {\n const priority = typeof cookie.priority === \"string\"\n ? cookie.priority.toLowerCase()\n : undefined;\n switch (priority) {\n case \"low\":\n str += \"; Priority=Low\";\n break;\n case \"medium\":\n str += \"; Priority=Medium\";\n break;\n case \"high\":\n str += \"; Priority=High\";\n break;\n default:\n throw new TypeError(`option priority is invalid: ${cookie.priority}`);\n }\n }\n if (cookie.sameSite) {\n const sameSite = typeof cookie.sameSite === \"string\"\n ? cookie.sameSite.toLowerCase()\n : cookie.sameSite;\n switch (sameSite) {\n case true:\n case \"strict\":\n str += \"; SameSite=Strict\";\n break;\n case \"lax\":\n str += \"; SameSite=Lax\";\n break;\n case \"none\":\n str += \"; SameSite=None\";\n break;\n default:\n throw new TypeError(`option sameSite is invalid: ${cookie.sameSite}`);\n }\n }\n return str;\n}\n/**\n * Deserialize a `Set-Cookie` header into an object.\n *\n * deserialize('foo=bar; httpOnly')\n * => { name: 'foo', value: 'bar', httpOnly: true }\n */\nfunction parseSetCookie(str, options) {\n const dec = options?.decode || decode;\n const len = str.length;\n const endIdx = endIndex(str, 0, len);\n const eqIdx = eqIndex(str, 0, endIdx);\n const setCookie = eqIdx === -1\n ? { name: \"\", value: dec(valueSlice(str, 0, endIdx)) }\n : {\n name: valueSlice(str, 0, eqIdx),\n value: dec(valueSlice(str, eqIdx + 1, endIdx)),\n };\n let index = endIdx + 1;\n while (index < len) {\n const endIdx = endIndex(str, index, len);\n const eqIdx = eqIndex(str, index, endIdx);\n const attr = eqIdx === -1\n ? valueSlice(str, index, endIdx)\n : valueSlice(str, index, eqIdx);\n const val = eqIdx === -1 ? undefined : valueSlice(str, eqIdx + 1, endIdx);\n switch (attr.toLowerCase()) {\n case \"httponly\":\n setCookie.httpOnly = true;\n break;\n case \"secure\":\n setCookie.secure = true;\n break;\n case \"partitioned\":\n setCookie.partitioned = true;\n break;\n case \"domain\":\n setCookie.domain = val;\n break;\n case \"path\":\n setCookie.path = val;\n break;\n case \"max-age\":\n if (val && maxAgeRegExp.test(val))\n setCookie.maxAge = Number(val);\n break;\n case \"expires\":\n if (!val)\n break;\n const date = new Date(val);\n if (Number.isFinite(date.valueOf()))\n setCookie.expires = date;\n break;\n case \"priority\":\n if (!val)\n break;\n const priority = val.toLowerCase();\n if (priority === \"low\" ||\n priority === \"medium\" ||\n priority === \"high\") {\n setCookie.priority = priority;\n }\n break;\n case \"samesite\":\n if (!val)\n break;\n const sameSite = val.toLowerCase();\n if (sameSite === \"lax\" ||\n sameSite === \"strict\" ||\n sameSite === \"none\") {\n setCookie.sameSite = sameSite;\n }\n break;\n }\n index = endIdx + 1;\n }\n return setCookie;\n}\n/**\n * Find the `;` character between `min` and `len` in str.\n */\nfunction endIndex(str, min, len) {\n const index = str.indexOf(\";\", min);\n return index === -1 ? len : index;\n}\n/**\n * Find the `=` character between `min` and `max` in str.\n */\nfunction eqIndex(str, min, max) {\n const index = str.indexOf(\"=\", min);\n return index < max ? index : -1;\n}\n/**\n * Slice out a value between startPod to max.\n */\nfunction valueSlice(str, min, max) {\n let start = min;\n let end = max;\n do {\n const code = str.charCodeAt(start);\n if (code !== 0x20 /* */ && code !== 0x09 /* \\t */)\n break;\n } while (++start < end);\n while (end > start) {\n const code = str.charCodeAt(end - 1);\n if (code !== 0x20 /* */ && code !== 0x09 /* \\t */)\n break;\n end--;\n }\n return str.slice(start, end);\n}\n/**\n * URL-decode string value. Optimized to skip native call when no %.\n */\nfunction decode(str) {\n if (str.indexOf(\"%\") === -1)\n return str;\n try {\n return decodeURIComponent(str);\n }\n catch (e) {\n return str;\n }\n}\n/**\n * Determine if value is a Date.\n */\nfunction isDate(val) {\n return __toString.call(val) === \"[object Date]\";\n}\n//# sourceMappingURL=index.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9jb29raWUvZGlzdC9pbmRleC5qcyIsIm1hcHBpbmdzIjoiQUFBYTtBQUNiLDhDQUE2QyxFQUFFLGFBQWEsRUFBQztBQUM3RCxtQkFBbUI7QUFDbkIsYUFBYTtBQUNiLHVCQUF1QjtBQUN2QiwwQkFBMEI7QUFDMUIsaUJBQWlCO0FBQ2pCLHNCQUFzQjtBQUN0QiwwQkFBMEI7QUFDMUIsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvREFBb0QsS0FBSyxrQ0FBa0MsS0FBSztBQUNoRztBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CO0FBQ25CO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQztBQUN0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkRBQTJELEtBQUs7QUFDaEU7QUFDQTtBQUNBO0FBQ0EsMERBQTBELElBQUk7QUFDOUQ7QUFDQSw4QkFBOEIsS0FBSyxHQUFHLE1BQU07QUFDNUM7QUFDQSxpQ0FBaUM7QUFDakM7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0EseURBQXlELFlBQVk7QUFDckU7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELGFBQWE7QUFDckU7QUFDQTtBQUNBO0FBQ0E7QUFDQSw2REFBNkQsY0FBYztBQUMzRTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSw2REFBNkQsY0FBYztBQUMzRTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSwyREFBMkQsWUFBWTtBQUN2RTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQSw4REFBOEQsZUFBZTtBQUM3RTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0Esa0JBQWtCO0FBQ2xCO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTtBQUNBLGtCQUFrQjtBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBLG1FQUFtRSxnQkFBZ0I7QUFDbkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0EsbUVBQW1FLGdCQUFnQjtBQUNuRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHlCQUF5QjtBQUN6QixVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZO0FBQ1o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL2Nvb2tpZS9kaXN0L2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5wYXJzZUNvb2tpZSA9IHBhcnNlQ29va2llO1xuZXhwb3J0cy5wYXJzZSA9IHBhcnNlQ29va2llO1xuZXhwb3J0cy5zdHJpbmdpZnlDb29raWUgPSBzdHJpbmdpZnlDb29raWU7XG5leHBvcnRzLnN0cmluZ2lmeVNldENvb2tpZSA9IHN0cmluZ2lmeVNldENvb2tpZTtcbmV4cG9ydHMuc2VyaWFsaXplID0gc3RyaW5naWZ5U2V0Q29va2llO1xuZXhwb3J0cy5wYXJzZVNldENvb2tpZSA9IHBhcnNlU2V0Q29va2llO1xuZXhwb3J0cy5zdHJpbmdpZnlTZXRDb29raWUgPSBzdHJpbmdpZnlTZXRDb29raWU7XG5leHBvcnRzLnNlcmlhbGl6ZSA9IHN0cmluZ2lmeVNldENvb2tpZTtcbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIGNvb2tpZS1uYW1lIGluIFJGQyA2MjY1IHNlYyA0LjEuMVxuICogVGhpcyByZWZlcnMgb3V0IHRvIHRoZSBvYnNvbGV0ZWQgZGVmaW5pdGlvbiBvZiB0b2tlbiBpbiBSRkMgMjYxNiBzZWMgMi4yXG4gKiB3aGljaCBoYXMgYmVlbiByZXBsYWNlZCBieSB0aGUgdG9rZW4gZGVmaW5pdGlvbiBpbiBSRkMgNzIzMCBhcHBlbmRpeCBCLlxuICpcbiAqIGNvb2tpZS1uYW1lICAgICAgID0gdG9rZW5cbiAqIHRva2VuICAgICAgICAgICAgID0gMSp0Y2hhclxuICogdGNoYXIgICAgICAgICAgICAgPSBcIiFcIiAvIFwiI1wiIC8gXCIkXCIgLyBcIiVcIiAvIFwiJlwiIC8gXCInXCIgL1xuICogICAgICAgICAgICAgICAgICAgICBcIipcIiAvIFwiK1wiIC8gXCItXCIgLyBcIi5cIiAvIFwiXlwiIC8gXCJfXCIgL1xuICogICAgICAgICAgICAgICAgICAgICBcImBcIiAvIFwifFwiIC8gXCJ+XCIgLyBESUdJVCAvIEFMUEhBXG4gKlxuICogTm90ZTogQWxsb3dpbmcgbW9yZSBjaGFyYWN0ZXJzIC0gaHR0cHM6Ly9naXRodWIuY29tL2pzaHR0cC9jb29raWUvaXNzdWVzLzE5MVxuICogQWxsb3cgc2FtZSByYW5nZSBhcyBjb29raWUgdmFsdWUsIGV4Y2VwdCBgPWAsIHdoaWNoIGRlbGltaXRzIGVuZCBvZiBuYW1lLlxuICovXG5jb25zdCBjb29raWVOYW1lUmVnRXhwID0gL15bXFx1MDAyMS1cXHUwMDNBXFx1MDAzQ1xcdTAwM0UtXFx1MDA3RV0rJC87XG4vKipcbiAqIFJlZ0V4cCB0byBtYXRjaCBjb29raWUtdmFsdWUgaW4gUkZDIDYyNjUgc2VjIDQuMS4xXG4gKlxuICogY29va2llLXZhbHVlICAgICAgPSAqY29va2llLW9jdGV0IC8gKCBEUVVPVEUgKmNvb2tpZS1vY3RldCBEUVVPVEUgKVxuICogY29va2llLW9jdGV0ICAgICAgPSAleDIxIC8gJXgyMy0yQiAvICV4MkQtM0EgLyAleDNDLTVCIC8gJXg1RC03RVxuICogICAgICAgICAgICAgICAgICAgICA7IFVTLUFTQ0lJIGNoYXJhY3RlcnMgZXhjbHVkaW5nIENUTHMsXG4gKiAgICAgICAgICAgICAgICAgICAgIDsgd2hpdGVzcGFjZSBEUVVPVEUsIGNvbW1hLCBzZW1pY29sb24sXG4gKiAgICAgICAgICAgICAgICAgICAgIDsgYW5kIGJhY2tzbGFzaFxuICpcbiAqIEFsbG93aW5nIG1vcmUgY2hhcmFjdGVyczogaHR0cHM6Ly9naXRodWIuY29tL2pzaHR0cC9jb29raWUvaXNzdWVzLzE5MVxuICogQ29tbWEsIGJhY2tzbGFzaCwgYW5kIERRVU9URSBhcmUgbm90IHBhcnQgb2YgdGhlIHBhcnNpbmcgYWxnb3JpdGhtLlxuICovXG5jb25zdCBjb29raWVWYWx1ZVJlZ0V4cCA9IC9eW1xcdTAwMjEtXFx1MDAzQVxcdTAwM0MtXFx1MDA3RV0qJC87XG4vKipcbiAqIFJlZ0V4cCB0byBtYXRjaCBkb21haW4tdmFsdWUgaW4gUkZDIDYyNjUgc2VjIDQuMS4xXG4gKlxuICogZG9tYWluLXZhbHVlICAgICAgPSA8c3ViZG9tYWluPlxuICogICAgICAgICAgICAgICAgICAgICA7IGRlZmluZWQgaW4gW1JGQzEwMzRdLCBTZWN0aW9uIDMuNSwgYXNcbiAqICAgICAgICAgICAgICAgICAgICAgOyBlbmhhbmNlZCBieSBbUkZDMTEyM10sIFNlY3Rpb24gMi4xXG4gKiA8c3ViZG9tYWluPiAgICAgICA9IDxsYWJlbD4gfCA8c3ViZG9tYWluPiBcIi5cIiA8bGFiZWw+XG4gKiA8bGFiZWw+ICAgICAgICAgICA9IDxsZXQtZGlnPiBbIFsgPGxkaC1zdHI+IF0gPGxldC1kaWc+IF1cbiAqICAgICAgICAgICAgICAgICAgICAgTGFiZWxzIG11c3QgYmUgNjMgY2hhcmFjdGVycyBvciBsZXNzLlxuICogICAgICAgICAgICAgICAgICAgICAnbGV0LWRpZycgbm90ICdsZXR0ZXInIGluIHRoZSBmaXJzdCBjaGFyLCBwZXIgUkZDMTEyM1xuICogPGxkaC1zdHI+ICAgICAgICAgPSA8bGV0LWRpZy1oeXA+IHwgPGxldC1kaWctaHlwPiA8bGRoLXN0cj5cbiAqIDxsZXQtZGlnLWh5cD4gICAgID0gPGxldC1kaWc+IHwgXCItXCJcbiAqIDxsZXQtZGlnPiAgICAgICAgID0gPGxldHRlcj4gfCA8ZGlnaXQ+XG4gKiA8bGV0dGVyPiAgICAgICAgICA9IGFueSBvbmUgb2YgdGhlIDUyIGFscGhhYmV0aWMgY2hhcmFjdGVycyBBIHRocm91Z2ggWiBpblxuICogICAgICAgICAgICAgICAgICAgICB1cHBlciBjYXNlIGFuZCBhIHRocm91Z2ggeiBpbiBsb3dlciBjYXNlXG4gKiA8ZGlnaXQ+ICAgICAgICAgICA9IGFueSBvbmUgb2YgdGhlIHRlbiBkaWdpdHMgMCB0aHJvdWdoIDlcbiAqXG4gKiBLZWVwIHN1cHBvcnQgZm9yIGxlYWRpbmcgZG90OiBodHRwczovL2dpdGh1Yi5jb20vanNodHRwL2Nvb2tpZS9pc3N1ZXMvMTczXG4gKlxuICogPiAoTm90ZSB0aGF0IGEgbGVhZGluZyAleDJFIChcIi5cIiksIGlmIHByZXNlbnQsIGlzIGlnbm9yZWQgZXZlbiB0aG91Z2ggdGhhdFxuICogY2hhcmFjdGVyIGlzIG5vdCBwZXJtaXR0ZWQsIGJ1dCBhIHRyYWlsaW5nICV4MkUgKFwiLlwiKSwgaWYgcHJlc2VudCwgd2lsbFxuICogY2F1c2UgdGhlIHVzZXIgYWdlbnQgdG8gaWdub3JlIHRoZSBhdHRyaWJ1dGUuKVxuICovXG5jb25zdCBkb21haW5WYWx1ZVJlZ0V4cCA9IC9eKFsuXT9bYS16MC05XShbYS16MC05LV17MCw2MX1bYS16MC05XSk/KShbLl1bYS16MC05XShbYS16MC05LV17MCw2MX1bYS16MC05XSk/KSokL2k7XG4vKipcbiAqIFJlZ0V4cCB0byBtYXRjaCBwYXRoLXZhbHVlIGluIFJGQyA2MjY1IHNlYyA0LjEuMVxuICpcbiAqIHBhdGgtdmFsdWUgICAgICAgID0gPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIFwiO1wiPlxuICogQ0hBUiAgICAgICAgICAgICAgPSAleDAxLTdGXG4gKiAgICAgICAgICAgICAgICAgICAgIDsgZGVmaW5lZCBpbiBSRkMgNTIzNCBhcHBlbmRpeCBCLjFcbiAqL1xuY29uc3QgcGF0aFZhbHVlUmVnRXhwID0gL15bXFx1MDAyMC1cXHUwMDNBXFx1MDAzRC1cXHUwMDdFXSokLztcbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoIG1heC1hZ2UtdmFsdWUgaW4gUkZDIDYyNjUgc2VjIDUuNi4yXG4gKi9cbmNvbnN0IG1heEFnZVJlZ0V4cCA9IC9eLT9cXGQrJC87XG5jb25zdCBfX3RvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcbmNvbnN0IE51bGxPYmplY3QgPSAvKiBAX19QVVJFX18gKi8gKCgpID0+IHtcbiAgICBjb25zdCBDID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIEMucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICByZXR1cm4gQztcbn0pKCk7XG4vKipcbiAqIFBhcnNlIGEgYENvb2tpZWAgaGVhZGVyLlxuICpcbiAqIFBhcnNlIHRoZSBnaXZlbiBjb29raWUgaGVhZGVyIHN0cmluZyBpbnRvIGFuIG9iamVjdFxuICogVGhlIG9iamVjdCBoYXMgdGhlIHZhcmlvdXMgY29va2llcyBhcyBrZXlzKG5hbWVzKSA9PiB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gcGFyc2VDb29raWUoc3RyLCBvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JqID0gbmV3IE51bGxPYmplY3QoKTtcbiAgICBjb25zdCBsZW4gPSBzdHIubGVuZ3RoO1xuICAgIC8vIFJGQyA2MjY1IHNlYyA0LjEuMSwgUkZDIDI2MTYgMi4yIGRlZmluZXMgYSBjb29raWUgbmFtZSBjb25zaXN0cyBvZiBvbmUgY2hhciBtaW5pbXVtLCBwbHVzICc9Jy5cbiAgICBpZiAobGVuIDwgMilcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICBjb25zdCBkZWMgPSBvcHRpb25zPy5kZWNvZGUgfHwgZGVjb2RlO1xuICAgIGxldCBpbmRleCA9IDA7XG4gICAgZG8ge1xuICAgICAgICBjb25zdCBlcUlkeCA9IGVxSW5kZXgoc3RyLCBpbmRleCwgbGVuKTtcbiAgICAgICAgaWYgKGVxSWR4ID09PSAtMSlcbiAgICAgICAgICAgIGJyZWFrOyAvLyBObyBtb3JlIGNvb2tpZSBwYWlycy5cbiAgICAgICAgY29uc3QgZW5kSWR4ID0gZW5kSW5kZXgoc3RyLCBpbmRleCwgbGVuKTtcbiAgICAgICAgaWYgKGVxSWR4ID4gZW5kSWR4KSB7XG4gICAgICAgICAgICAvLyBiYWNrdHJhY2sgb24gcHJpb3Igc2VtaWNvbG9uXG4gICAgICAgICAgICBpbmRleCA9IHN0ci5sYXN0SW5kZXhPZihcIjtcIiwgZXFJZHggLSAxKSArIDE7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXkgPSB2YWx1ZVNsaWNlKHN0ciwgaW5kZXgsIGVxSWR4KTtcbiAgICAgICAgLy8gb25seSBhc3NpZ24gb25jZVxuICAgICAgICBpZiAob2JqW2tleV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgb2JqW2tleV0gPSBkZWModmFsdWVTbGljZShzdHIsIGVxSWR4ICsgMSwgZW5kSWR4KSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggPSBlbmRJZHggKyAxO1xuICAgIH0gd2hpbGUgKGluZGV4IDwgbGVuKTtcbiAgICByZXR1cm4gb2JqO1xufVxuLyoqXG4gKiBTdHJpbmdpZmllcyBhbiBvYmplY3QgaW50byBhbiBIVFRQIGBDb29raWVgIGhlYWRlci5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5Q29va2llKGNvb2tpZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGVuYyA9IG9wdGlvbnM/LmVuY29kZSB8fCBlbmNvZGVVUklDb21wb25lbnQ7XG4gICAgY29uc3QgY29va2llU3RyaW5ncyA9IFtdO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhjb29raWUpKSB7XG4gICAgICAgIGNvbnN0IHZhbCA9IGNvb2tpZVtuYW1lXTtcbiAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICghY29va2llTmFtZVJlZ0V4cC50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBjb29raWUgbmFtZSBpcyBpbnZhbGlkOiAke25hbWV9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWUgPSBlbmModmFsKTtcbiAgICAgICAgaWYgKCFjb29raWVWYWx1ZVJlZ0V4cC50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgY29va2llIHZhbCBpcyBpbnZhbGlkOiAke3ZhbH1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb29raWVTdHJpbmdzLnB1c2goYCR7bmFtZX09JHt2YWx1ZX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvb2tpZVN0cmluZ3Muam9pbihcIjsgXCIpO1xufVxuZnVuY3Rpb24gc3RyaW5naWZ5U2V0Q29va2llKF9uYW1lLCBfdmFsLCBfb3B0cykge1xuICAgIGNvbnN0IGNvb2tpZSA9IHR5cGVvZiBfbmFtZSA9PT0gXCJvYmplY3RcIlxuICAgICAgICA/IF9uYW1lXG4gICAgICAgIDogeyAuLi5fb3B0cywgbmFtZTogX25hbWUsIHZhbHVlOiBTdHJpbmcoX3ZhbCkgfTtcbiAgICBjb25zdCBvcHRpb25zID0gdHlwZW9mIF92YWwgPT09IFwib2JqZWN0XCIgPyBfdmFsIDogX29wdHM7XG4gICAgY29uc3QgZW5jID0gb3B0aW9ucz8uZW5jb2RlIHx8IGVuY29kZVVSSUNvbXBvbmVudDtcbiAgICBpZiAoIWNvb2tpZU5hbWVSZWdFeHAudGVzdChjb29raWUubmFtZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgYXJndW1lbnQgbmFtZSBpcyBpbnZhbGlkOiAke2Nvb2tpZS5uYW1lfWApO1xuICAgIH1cbiAgICBjb25zdCB2YWx1ZSA9IGNvb2tpZS52YWx1ZSA/IGVuYyhjb29raWUudmFsdWUpIDogXCJcIjtcbiAgICBpZiAoIWNvb2tpZVZhbHVlUmVnRXhwLnRlc3QodmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGFyZ3VtZW50IHZhbCBpcyBpbnZhbGlkOiAke2Nvb2tpZS52YWx1ZX1gKTtcbiAgICB9XG4gICAgbGV0IHN0ciA9IGNvb2tpZS5uYW1lICsgXCI9XCIgKyB2YWx1ZTtcbiAgICBpZiAoY29va2llLm1heEFnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihjb29raWUubWF4QWdlKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgb3B0aW9uIG1heEFnZSBpcyBpbnZhbGlkOiAke2Nvb2tpZS5tYXhBZ2V9YCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RyICs9IFwiOyBNYXgtQWdlPVwiICsgY29va2llLm1heEFnZTtcbiAgICB9XG4gICAgaWYgKGNvb2tpZS5kb21haW4pIHtcbiAgICAgICAgaWYgKCFkb21haW5WYWx1ZVJlZ0V4cC50ZXN0KGNvb2tpZS5kb21haW4pKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBvcHRpb24gZG9tYWluIGlzIGludmFsaWQ6ICR7Y29va2llLmRvbWFpbn1gKTtcbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0gXCI7IERvbWFpbj1cIiArIGNvb2tpZS5kb21haW47XG4gICAgfVxuICAgIGlmIChjb29raWUucGF0aCkge1xuICAgICAgICBpZiAoIXBhdGhWYWx1ZVJlZ0V4cC50ZXN0KGNvb2tpZS5wYXRoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgb3B0aW9uIHBhdGggaXMgaW52YWxpZDogJHtjb29raWUucGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0gXCI7IFBhdGg9XCIgKyBjb29raWUucGF0aDtcbiAgICB9XG4gICAgaWYgKGNvb2tpZS5leHBpcmVzKSB7XG4gICAgICAgIGlmICghaXNEYXRlKGNvb2tpZS5leHBpcmVzKSB8fCAhTnVtYmVyLmlzRmluaXRlKGNvb2tpZS5leHBpcmVzLnZhbHVlT2YoKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYG9wdGlvbiBleHBpcmVzIGlzIGludmFsaWQ6ICR7Y29va2llLmV4cGlyZXN9YCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RyICs9IFwiOyBFeHBpcmVzPVwiICsgY29va2llLmV4cGlyZXMudG9VVENTdHJpbmcoKTtcbiAgICB9XG4gICAgaWYgKGNvb2tpZS5odHRwT25seSkge1xuICAgICAgICBzdHIgKz0gXCI7IEh0dHBPbmx5XCI7XG4gICAgfVxuICAgIGlmIChjb29raWUuc2VjdXJlKSB7XG4gICAgICAgIHN0ciArPSBcIjsgU2VjdXJlXCI7XG4gICAgfVxuICAgIGlmIChjb29raWUucGFydGl0aW9uZWQpIHtcbiAgICAgICAgc3RyICs9IFwiOyBQYXJ0aXRpb25lZFwiO1xuICAgIH1cbiAgICBpZiAoY29va2llLnByaW9yaXR5KSB7XG4gICAgICAgIGNvbnN0IHByaW9yaXR5ID0gdHlwZW9mIGNvb2tpZS5wcmlvcml0eSA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgPyBjb29raWUucHJpb3JpdHkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIHN3aXRjaCAocHJpb3JpdHkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJsb3dcIjpcbiAgICAgICAgICAgICAgICBzdHIgKz0gXCI7IFByaW9yaXR5PUxvd1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1lZGl1bVwiOlxuICAgICAgICAgICAgICAgIHN0ciArPSBcIjsgUHJpb3JpdHk9TWVkaXVtXCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiaGlnaFwiOlxuICAgICAgICAgICAgICAgIHN0ciArPSBcIjsgUHJpb3JpdHk9SGlnaFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBvcHRpb24gcHJpb3JpdHkgaXMgaW52YWxpZDogJHtjb29raWUucHJpb3JpdHl9YCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvb2tpZS5zYW1lU2l0ZSkge1xuICAgICAgICBjb25zdCBzYW1lU2l0ZSA9IHR5cGVvZiBjb29raWUuc2FtZVNpdGUgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgID8gY29va2llLnNhbWVTaXRlLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIDogY29va2llLnNhbWVTaXRlO1xuICAgICAgICBzd2l0Y2ggKHNhbWVTaXRlKSB7XG4gICAgICAgICAgICBjYXNlIHRydWU6XG4gICAgICAgICAgICBjYXNlIFwic3RyaWN0XCI6XG4gICAgICAgICAgICAgICAgc3RyICs9IFwiOyBTYW1lU2l0ZT1TdHJpY3RcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJsYXhcIjpcbiAgICAgICAgICAgICAgICBzdHIgKz0gXCI7IFNhbWVTaXRlPUxheFwiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm5vbmVcIjpcbiAgICAgICAgICAgICAgICBzdHIgKz0gXCI7IFNhbWVTaXRlPU5vbmVcIjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgb3B0aW9uIHNhbWVTaXRlIGlzIGludmFsaWQ6ICR7Y29va2llLnNhbWVTaXRlfWApO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG4vKipcbiAqIERlc2VyaWFsaXplIGEgYFNldC1Db29raWVgIGhlYWRlciBpbnRvIGFuIG9iamVjdC5cbiAqXG4gKiBkZXNlcmlhbGl6ZSgnZm9vPWJhcjsgaHR0cE9ubHknKVxuICogICA9PiB7IG5hbWU6ICdmb28nLCB2YWx1ZTogJ2JhcicsIGh0dHBPbmx5OiB0cnVlIH1cbiAqL1xuZnVuY3Rpb24gcGFyc2VTZXRDb29raWUoc3RyLCBvcHRpb25zKSB7XG4gICAgY29uc3QgZGVjID0gb3B0aW9ucz8uZGVjb2RlIHx8IGRlY29kZTtcbiAgICBjb25zdCBsZW4gPSBzdHIubGVuZ3RoO1xuICAgIGNvbnN0IGVuZElkeCA9IGVuZEluZGV4KHN0ciwgMCwgbGVuKTtcbiAgICBjb25zdCBlcUlkeCA9IGVxSW5kZXgoc3RyLCAwLCBlbmRJZHgpO1xuICAgIGNvbnN0IHNldENvb2tpZSA9IGVxSWR4ID09PSAtMVxuICAgICAgICA/IHsgbmFtZTogXCJcIiwgdmFsdWU6IGRlYyh2YWx1ZVNsaWNlKHN0ciwgMCwgZW5kSWR4KSkgfVxuICAgICAgICA6IHtcbiAgICAgICAgICAgIG5hbWU6IHZhbHVlU2xpY2Uoc3RyLCAwLCBlcUlkeCksXG4gICAgICAgICAgICB2YWx1ZTogZGVjKHZhbHVlU2xpY2Uoc3RyLCBlcUlkeCArIDEsIGVuZElkeCkpLFxuICAgICAgICB9O1xuICAgIGxldCBpbmRleCA9IGVuZElkeCArIDE7XG4gICAgd2hpbGUgKGluZGV4IDwgbGVuKSB7XG4gICAgICAgIGNvbnN0IGVuZElkeCA9IGVuZEluZGV4KHN0ciwgaW5kZXgsIGxlbik7XG4gICAgICAgIGNvbnN0IGVxSWR4ID0gZXFJbmRleChzdHIsIGluZGV4LCBlbmRJZHgpO1xuICAgICAgICBjb25zdCBhdHRyID0gZXFJZHggPT09IC0xXG4gICAgICAgICAgICA/IHZhbHVlU2xpY2Uoc3RyLCBpbmRleCwgZW5kSWR4KVxuICAgICAgICAgICAgOiB2YWx1ZVNsaWNlKHN0ciwgaW5kZXgsIGVxSWR4KTtcbiAgICAgICAgY29uc3QgdmFsID0gZXFJZHggPT09IC0xID8gdW5kZWZpbmVkIDogdmFsdWVTbGljZShzdHIsIGVxSWR4ICsgMSwgZW5kSWR4KTtcbiAgICAgICAgc3dpdGNoIChhdHRyLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJodHRwb25seVwiOlxuICAgICAgICAgICAgICAgIHNldENvb2tpZS5odHRwT25seSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwic2VjdXJlXCI6XG4gICAgICAgICAgICAgICAgc2V0Q29va2llLnNlY3VyZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicGFydGl0aW9uZWRcIjpcbiAgICAgICAgICAgICAgICBzZXRDb29raWUucGFydGl0aW9uZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImRvbWFpblwiOlxuICAgICAgICAgICAgICAgIHNldENvb2tpZS5kb21haW4gPSB2YWw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicGF0aFwiOlxuICAgICAgICAgICAgICAgIHNldENvb2tpZS5wYXRoID0gdmFsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIm1heC1hZ2VcIjpcbiAgICAgICAgICAgICAgICBpZiAodmFsICYmIG1heEFnZVJlZ0V4cC50ZXN0KHZhbCkpXG4gICAgICAgICAgICAgICAgICAgIHNldENvb2tpZS5tYXhBZ2UgPSBOdW1iZXIodmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJleHBpcmVzXCI6XG4gICAgICAgICAgICAgICAgaWYgKCF2YWwpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWwpO1xuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUoZGF0ZS52YWx1ZU9mKCkpKVxuICAgICAgICAgICAgICAgICAgICBzZXRDb29raWUuZXhwaXJlcyA9IGRhdGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwicHJpb3JpdHlcIjpcbiAgICAgICAgICAgICAgICBpZiAoIXZhbClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJpb3JpdHkgPSB2YWwudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAocHJpb3JpdHkgPT09IFwibG93XCIgfHxcbiAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHkgPT09IFwibWVkaXVtXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgcHJpb3JpdHkgPT09IFwiaGlnaFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldENvb2tpZS5wcmlvcml0eSA9IHByaW9yaXR5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJzYW1lc2l0ZVwiOlxuICAgICAgICAgICAgICAgIGlmICghdmFsKVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjb25zdCBzYW1lU2l0ZSA9IHZhbC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzYW1lU2l0ZSA9PT0gXCJsYXhcIiB8fFxuICAgICAgICAgICAgICAgICAgICBzYW1lU2l0ZSA9PT0gXCJzdHJpY3RcIiB8fFxuICAgICAgICAgICAgICAgICAgICBzYW1lU2l0ZSA9PT0gXCJub25lXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29va2llLnNhbWVTaXRlID0gc2FtZVNpdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGluZGV4ID0gZW5kSWR4ICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIHNldENvb2tpZTtcbn1cbi8qKlxuICogRmluZCB0aGUgYDtgIGNoYXJhY3RlciBiZXR3ZWVuIGBtaW5gIGFuZCBgbGVuYCBpbiBzdHIuXG4gKi9cbmZ1bmN0aW9uIGVuZEluZGV4KHN0ciwgbWluLCBsZW4pIHtcbiAgICBjb25zdCBpbmRleCA9IHN0ci5pbmRleE9mKFwiO1wiLCBtaW4pO1xuICAgIHJldHVybiBpbmRleCA9PT0gLTEgPyBsZW4gOiBpbmRleDtcbn1cbi8qKlxuICogRmluZCB0aGUgYD1gIGNoYXJhY3RlciBiZXR3ZWVuIGBtaW5gIGFuZCBgbWF4YCBpbiBzdHIuXG4gKi9cbmZ1bmN0aW9uIGVxSW5kZXgoc3RyLCBtaW4sIG1heCkge1xuICAgIGNvbnN0IGluZGV4ID0gc3RyLmluZGV4T2YoXCI9XCIsIG1pbik7XG4gICAgcmV0dXJuIGluZGV4IDwgbWF4ID8gaW5kZXggOiAtMTtcbn1cbi8qKlxuICogU2xpY2Ugb3V0IGEgdmFsdWUgYmV0d2VlbiBzdGFydFBvZCB0byBtYXguXG4gKi9cbmZ1bmN0aW9uIHZhbHVlU2xpY2Uoc3RyLCBtaW4sIG1heCkge1xuICAgIGxldCBzdGFydCA9IG1pbjtcbiAgICBsZXQgZW5kID0gbWF4O1xuICAgIGRvIHtcbiAgICAgICAgY29uc3QgY29kZSA9IHN0ci5jaGFyQ29kZUF0KHN0YXJ0KTtcbiAgICAgICAgaWYgKGNvZGUgIT09IDB4MjAgLyogICAqLyAmJiBjb2RlICE9PSAweDA5IC8qIFxcdCAqLylcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH0gd2hpbGUgKCsrc3RhcnQgPCBlbmQpO1xuICAgIHdoaWxlIChlbmQgPiBzdGFydCkge1xuICAgICAgICBjb25zdCBjb2RlID0gc3RyLmNoYXJDb2RlQXQoZW5kIC0gMSk7XG4gICAgICAgIGlmIChjb2RlICE9PSAweDIwIC8qICAgKi8gJiYgY29kZSAhPT0gMHgwOSAvKiBcXHQgKi8pXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZW5kLS07XG4gICAgfVxuICAgIHJldHVybiBzdHIuc2xpY2Uoc3RhcnQsIGVuZCk7XG59XG4vKipcbiAqIFVSTC1kZWNvZGUgc3RyaW5nIHZhbHVlLiBPcHRpbWl6ZWQgdG8gc2tpcCBuYXRpdmUgY2FsbCB3aGVuIG5vICUuXG4gKi9cbmZ1bmN0aW9uIGRlY29kZShzdHIpIHtcbiAgICBpZiAoc3RyLmluZGV4T2YoXCIlXCIpID09PSAtMSlcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHN0cik7XG4gICAgfVxuICAgIGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBzdHI7XG4gICAgfVxufVxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgdmFsdWUgaXMgYSBEYXRlLlxuICovXG5mdW5jdGlvbiBpc0RhdGUodmFsKSB7XG4gICAgcmV0dXJuIF9fdG9TdHJpbmcuY2FsbCh2YWwpID09PSBcIltvYmplY3QgRGF0ZV1cIjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/cookie/dist/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/iceberg-js/dist/index.mjs":
|
||
/*!************************************************!*\
|
||
!*** ./node_modules/iceberg-js/dist/index.mjs ***!
|
||
\************************************************/
|
||
/***/ ((__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 */ IcebergError: () => (/* binding */ IcebergError),\n/* harmony export */ IcebergRestCatalog: () => (/* binding */ IcebergRestCatalog),\n/* harmony export */ getCurrentSchema: () => (/* binding */ getCurrentSchema),\n/* harmony export */ isDecimalType: () => (/* binding */ isDecimalType),\n/* harmony export */ isFixedType: () => (/* binding */ isFixedType),\n/* harmony export */ parseDecimalType: () => (/* binding */ parseDecimalType),\n/* harmony export */ parseFixedType: () => (/* binding */ parseFixedType),\n/* harmony export */ typesEqual: () => (/* binding */ typesEqual)\n/* harmony export */ });\n// src/errors/IcebergError.ts\nvar IcebergError = class extends Error {\n constructor(message, opts) {\n super(message);\n this.name = \"IcebergError\";\n this.status = opts.status;\n this.icebergType = opts.icebergType;\n this.icebergCode = opts.icebergCode;\n this.details = opts.details;\n this.isCommitStateUnknown = opts.icebergType === \"CommitStateUnknownException\" || [500, 502, 504].includes(opts.status) && opts.icebergType?.includes(\"CommitState\") === true;\n }\n /**\n * Returns true if the error is a 404 Not Found error.\n */\n isNotFound() {\n return this.status === 404;\n }\n /**\n * Returns true if the error is a 409 Conflict error.\n */\n isConflict() {\n return this.status === 409;\n }\n /**\n * Returns true if the error is a 419 Authentication Timeout error.\n */\n isAuthenticationTimeout() {\n return this.status === 419;\n }\n};\n\n// src/utils/url.ts\nfunction buildUrl(baseUrl, path, query) {\n const url = new URL(path, baseUrl);\n if (query) {\n for (const [key, value] of Object.entries(query)) {\n if (value !== void 0) {\n url.searchParams.set(key, value);\n }\n }\n }\n return url.toString();\n}\n\n// src/http/createFetchClient.ts\nasync function buildAuthHeaders(auth) {\n if (!auth || auth.type === \"none\") {\n return {};\n }\n if (auth.type === \"bearer\") {\n return { Authorization: `Bearer ${auth.token}` };\n }\n if (auth.type === \"header\") {\n return { [auth.name]: auth.value };\n }\n if (auth.type === \"custom\") {\n return await auth.getHeaders();\n }\n return {};\n}\nfunction createFetchClient(options) {\n const fetchFn = options.fetchImpl ?? globalThis.fetch;\n return {\n async request({\n method,\n path,\n query,\n body,\n headers\n }) {\n const url = buildUrl(options.baseUrl, path, query);\n const authHeaders = await buildAuthHeaders(options.auth);\n const res = await fetchFn(url, {\n method,\n headers: {\n ...body ? { \"Content-Type\": \"application/json\" } : {},\n ...authHeaders,\n ...headers\n },\n body: body ? JSON.stringify(body) : void 0\n });\n const text = await res.text();\n const isJson = (res.headers.get(\"content-type\") || \"\").includes(\"application/json\");\n const data = isJson && text ? JSON.parse(text) : text;\n if (!res.ok) {\n const errBody = isJson ? data : void 0;\n const errorDetail = errBody?.error;\n throw new IcebergError(\n errorDetail?.message ?? `Request failed with status ${res.status}`,\n {\n status: res.status,\n icebergType: errorDetail?.type,\n icebergCode: errorDetail?.code,\n details: errBody\n }\n );\n }\n return { status: res.status, headers: res.headers, data };\n }\n };\n}\n\n// src/catalog/namespaces.ts\nfunction namespaceToPath(namespace) {\n return namespace.join(\"\u001f\");\n}\nvar NamespaceOperations = class {\n constructor(client, prefix = \"\") {\n this.client = client;\n this.prefix = prefix;\n }\n async listNamespaces(parent) {\n const query = parent ? { parent: namespaceToPath(parent.namespace) } : void 0;\n const response = await this.client.request({\n method: \"GET\",\n path: `${this.prefix}/namespaces`,\n query\n });\n return response.data.namespaces.map((ns) => ({ namespace: ns }));\n }\n async createNamespace(id, metadata) {\n const request = {\n namespace: id.namespace,\n properties: metadata?.properties\n };\n const response = await this.client.request({\n method: \"POST\",\n path: `${this.prefix}/namespaces`,\n body: request\n });\n return response.data;\n }\n async dropNamespace(id) {\n await this.client.request({\n method: \"DELETE\",\n path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}`\n });\n }\n async loadNamespaceMetadata(id) {\n const response = await this.client.request({\n method: \"GET\",\n path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}`\n });\n return {\n properties: response.data.properties\n };\n }\n async namespaceExists(id) {\n try {\n await this.client.request({\n method: \"HEAD\",\n path: `${this.prefix}/namespaces/${namespaceToPath(id.namespace)}`\n });\n return true;\n } catch (error) {\n if (error instanceof IcebergError && error.status === 404) {\n return false;\n }\n throw error;\n }\n }\n async createNamespaceIfNotExists(id, metadata) {\n try {\n return await this.createNamespace(id, metadata);\n } catch (error) {\n if (error instanceof IcebergError && error.status === 409) {\n return;\n }\n throw error;\n }\n }\n};\n\n// src/catalog/tables.ts\nfunction namespaceToPath2(namespace) {\n return namespace.join(\"\u001f\");\n}\nvar TableOperations = class {\n constructor(client, prefix = \"\", accessDelegation) {\n this.client = client;\n this.prefix = prefix;\n this.accessDelegation = accessDelegation;\n }\n async listTables(namespace) {\n const response = await this.client.request({\n method: \"GET\",\n path: `${this.prefix}/namespaces/${namespaceToPath2(namespace.namespace)}/tables`\n });\n return response.data.identifiers;\n }\n async createTable(namespace, request) {\n const headers = {};\n if (this.accessDelegation) {\n headers[\"X-Iceberg-Access-Delegation\"] = this.accessDelegation;\n }\n const response = await this.client.request({\n method: \"POST\",\n path: `${this.prefix}/namespaces/${namespaceToPath2(namespace.namespace)}/tables`,\n body: request,\n headers\n });\n return response.data.metadata;\n }\n async updateTable(id, request) {\n const response = await this.client.request({\n method: \"POST\",\n path: `${this.prefix}/namespaces/${namespaceToPath2(id.namespace)}/tables/${id.name}`,\n body: request\n });\n return {\n \"metadata-location\": response.data[\"metadata-location\"],\n metadata: response.data.metadata\n };\n }\n async dropTable(id, options) {\n await this.client.request({\n method: \"DELETE\",\n path: `${this.prefix}/namespaces/${namespaceToPath2(id.namespace)}/tables/${id.name}`,\n query: { purgeRequested: String(options?.purge ?? false) }\n });\n }\n async loadTable(id) {\n const headers = {};\n if (this.accessDelegation) {\n headers[\"X-Iceberg-Access-Delegation\"] = this.accessDelegation;\n }\n const response = await this.client.request({\n method: \"GET\",\n path: `${this.prefix}/namespaces/${namespaceToPath2(id.namespace)}/tables/${id.name}`,\n headers\n });\n return response.data.metadata;\n }\n async tableExists(id) {\n const headers = {};\n if (this.accessDelegation) {\n headers[\"X-Iceberg-Access-Delegation\"] = this.accessDelegation;\n }\n try {\n await this.client.request({\n method: \"HEAD\",\n path: `${this.prefix}/namespaces/${namespaceToPath2(id.namespace)}/tables/${id.name}`,\n headers\n });\n return true;\n } catch (error) {\n if (error instanceof IcebergError && error.status === 404) {\n return false;\n }\n throw error;\n }\n }\n async createTableIfNotExists(namespace, request) {\n try {\n return await this.createTable(namespace, request);\n } catch (error) {\n if (error instanceof IcebergError && error.status === 409) {\n return await this.loadTable({ namespace: namespace.namespace, name: request.name });\n }\n throw error;\n }\n }\n};\n\n// src/catalog/IcebergRestCatalog.ts\nvar IcebergRestCatalog = class {\n /**\n * Creates a new Iceberg REST Catalog client.\n *\n * @param options - Configuration options for the catalog client\n */\n constructor(options) {\n let prefix = \"v1\";\n if (options.catalogName) {\n prefix += `/${options.catalogName}`;\n }\n const baseUrl = options.baseUrl.endsWith(\"/\") ? options.baseUrl : `${options.baseUrl}/`;\n this.client = createFetchClient({\n baseUrl,\n auth: options.auth,\n fetchImpl: options.fetch\n });\n this.accessDelegation = options.accessDelegation?.join(\",\");\n this.namespaceOps = new NamespaceOperations(this.client, prefix);\n this.tableOps = new TableOperations(this.client, prefix, this.accessDelegation);\n }\n /**\n * Lists all namespaces in the catalog.\n *\n * @param parent - Optional parent namespace to list children under\n * @returns Array of namespace identifiers\n *\n * @example\n * ```typescript\n * // List all top-level namespaces\n * const namespaces = await catalog.listNamespaces();\n *\n * // List namespaces under a parent\n * const children = await catalog.listNamespaces({ namespace: ['analytics'] });\n * ```\n */\n async listNamespaces(parent) {\n return this.namespaceOps.listNamespaces(parent);\n }\n /**\n * Creates a new namespace in the catalog.\n *\n * @param id - Namespace identifier to create\n * @param metadata - Optional metadata properties for the namespace\n * @returns Response containing the created namespace and its properties\n *\n * @example\n * ```typescript\n * const response = await catalog.createNamespace(\n * { namespace: ['analytics'] },\n * { properties: { owner: 'data-team' } }\n * );\n * console.log(response.namespace); // ['analytics']\n * console.log(response.properties); // { owner: 'data-team', ... }\n * ```\n */\n async createNamespace(id, metadata) {\n return this.namespaceOps.createNamespace(id, metadata);\n }\n /**\n * Drops a namespace from the catalog.\n *\n * The namespace must be empty (contain no tables) before it can be dropped.\n *\n * @param id - Namespace identifier to drop\n *\n * @example\n * ```typescript\n * await catalog.dropNamespace({ namespace: ['analytics'] });\n * ```\n */\n async dropNamespace(id) {\n await this.namespaceOps.dropNamespace(id);\n }\n /**\n * Loads metadata for a namespace.\n *\n * @param id - Namespace identifier to load\n * @returns Namespace metadata including properties\n *\n * @example\n * ```typescript\n * const metadata = await catalog.loadNamespaceMetadata({ namespace: ['analytics'] });\n * console.log(metadata.properties);\n * ```\n */\n async loadNamespaceMetadata(id) {\n return this.namespaceOps.loadNamespaceMetadata(id);\n }\n /**\n * Lists all tables in a namespace.\n *\n * @param namespace - Namespace identifier to list tables from\n * @returns Array of table identifiers\n *\n * @example\n * ```typescript\n * const tables = await catalog.listTables({ namespace: ['analytics'] });\n * console.log(tables); // [{ namespace: ['analytics'], name: 'events' }, ...]\n * ```\n */\n async listTables(namespace) {\n return this.tableOps.listTables(namespace);\n }\n /**\n * Creates a new table in the catalog.\n *\n * @param namespace - Namespace to create the table in\n * @param request - Table creation request including name, schema, partition spec, etc.\n * @returns Table metadata for the created table\n *\n * @example\n * ```typescript\n * const metadata = await catalog.createTable(\n * { namespace: ['analytics'] },\n * {\n * name: 'events',\n * schema: {\n * type: 'struct',\n * fields: [\n * { id: 1, name: 'id', type: 'long', required: true },\n * { id: 2, name: 'timestamp', type: 'timestamp', required: true }\n * ],\n * 'schema-id': 0\n * },\n * 'partition-spec': {\n * 'spec-id': 0,\n * fields: [\n * { source_id: 2, field_id: 1000, name: 'ts_day', transform: 'day' }\n * ]\n * }\n * }\n * );\n * ```\n */\n async createTable(namespace, request) {\n return this.tableOps.createTable(namespace, request);\n }\n /**\n * Updates an existing table's metadata.\n *\n * Can update the schema, partition spec, or properties of a table.\n *\n * @param id - Table identifier to update\n * @param request - Update request with fields to modify\n * @returns Response containing the metadata location and updated table metadata\n *\n * @example\n * ```typescript\n * const response = await catalog.updateTable(\n * { namespace: ['analytics'], name: 'events' },\n * {\n * properties: { 'read.split.target-size': '134217728' }\n * }\n * );\n * console.log(response['metadata-location']); // s3://...\n * console.log(response.metadata); // TableMetadata object\n * ```\n */\n async updateTable(id, request) {\n return this.tableOps.updateTable(id, request);\n }\n /**\n * Drops a table from the catalog.\n *\n * @param id - Table identifier to drop\n *\n * @example\n * ```typescript\n * await catalog.dropTable({ namespace: ['analytics'], name: 'events' });\n * ```\n */\n async dropTable(id, options) {\n await this.tableOps.dropTable(id, options);\n }\n /**\n * Loads metadata for a table.\n *\n * @param id - Table identifier to load\n * @returns Table metadata including schema, partition spec, location, etc.\n *\n * @example\n * ```typescript\n * const metadata = await catalog.loadTable({ namespace: ['analytics'], name: 'events' });\n * console.log(metadata.schema);\n * console.log(metadata.location);\n * ```\n */\n async loadTable(id) {\n return this.tableOps.loadTable(id);\n }\n /**\n * Checks if a namespace exists in the catalog.\n *\n * @param id - Namespace identifier to check\n * @returns True if the namespace exists, false otherwise\n *\n * @example\n * ```typescript\n * const exists = await catalog.namespaceExists({ namespace: ['analytics'] });\n * console.log(exists); // true or false\n * ```\n */\n async namespaceExists(id) {\n return this.namespaceOps.namespaceExists(id);\n }\n /**\n * Checks if a table exists in the catalog.\n *\n * @param id - Table identifier to check\n * @returns True if the table exists, false otherwise\n *\n * @example\n * ```typescript\n * const exists = await catalog.tableExists({ namespace: ['analytics'], name: 'events' });\n * console.log(exists); // true or false\n * ```\n */\n async tableExists(id) {\n return this.tableOps.tableExists(id);\n }\n /**\n * Creates a namespace if it does not exist.\n *\n * If the namespace already exists, returns void. If created, returns the response.\n *\n * @param id - Namespace identifier to create\n * @param metadata - Optional metadata properties for the namespace\n * @returns Response containing the created namespace and its properties, or void if it already exists\n *\n * @example\n * ```typescript\n * const response = await catalog.createNamespaceIfNotExists(\n * { namespace: ['analytics'] },\n * { properties: { owner: 'data-team' } }\n * );\n * if (response) {\n * console.log('Created:', response.namespace);\n * } else {\n * console.log('Already exists');\n * }\n * ```\n */\n async createNamespaceIfNotExists(id, metadata) {\n return this.namespaceOps.createNamespaceIfNotExists(id, metadata);\n }\n /**\n * Creates a table if it does not exist.\n *\n * If the table already exists, returns its metadata instead.\n *\n * @param namespace - Namespace to create the table in\n * @param request - Table creation request including name, schema, partition spec, etc.\n * @returns Table metadata for the created or existing table\n *\n * @example\n * ```typescript\n * const metadata = await catalog.createTableIfNotExists(\n * { namespace: ['analytics'] },\n * {\n * name: 'events',\n * schema: {\n * type: 'struct',\n * fields: [\n * { id: 1, name: 'id', type: 'long', required: true },\n * { id: 2, name: 'timestamp', type: 'timestamp', required: true }\n * ],\n * 'schema-id': 0\n * }\n * }\n * );\n * ```\n */\n async createTableIfNotExists(namespace, request) {\n return this.tableOps.createTableIfNotExists(namespace, request);\n }\n};\n\n// src/catalog/types.ts\nvar DECIMAL_REGEX = /^decimal\\s*\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\)$/;\nvar FIXED_REGEX = /^fixed\\s*\\[\\s*(\\d+)\\s*\\]$/;\nfunction parseDecimalType(type) {\n const match = type.match(DECIMAL_REGEX);\n if (!match) return null;\n return {\n precision: parseInt(match[1], 10),\n scale: parseInt(match[2], 10)\n };\n}\nfunction parseFixedType(type) {\n const match = type.match(FIXED_REGEX);\n if (!match) return null;\n return {\n length: parseInt(match[1], 10)\n };\n}\nfunction isDecimalType(type) {\n return DECIMAL_REGEX.test(type);\n}\nfunction isFixedType(type) {\n return FIXED_REGEX.test(type);\n}\nfunction typesEqual(a, b) {\n const decimalA = parseDecimalType(a);\n const decimalB = parseDecimalType(b);\n if (decimalA && decimalB) {\n return decimalA.precision === decimalB.precision && decimalA.scale === decimalB.scale;\n }\n const fixedA = parseFixedType(a);\n const fixedB = parseFixedType(b);\n if (fixedA && fixedB) {\n return fixedA.length === fixedB.length;\n }\n return a === b;\n}\nfunction getCurrentSchema(metadata) {\n return metadata.schemas.find((s) => s[\"schema-id\"] === metadata[\"current-schema-id\"]);\n}\n\n\n//# sourceMappingURL=index.mjs.map\n//# sourceMappingURL=index.mjs.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9pY2ViZXJnLWpzL2Rpc3QvaW5kZXgubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLHlCQUF5QixXQUFXO0FBQ2pEO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxzQkFBc0IscUNBQXFDLElBQUk7QUFDL0Q7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdFQUFnRSxXQUFXO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkJBQTZCLDRDQUE0QztBQUN6RTtBQUNBO0FBQ0EsZUFBZSxZQUFZO0FBQzNCO0FBQ0EsS0FBSztBQUNMLG1EQUFtRCxlQUFlO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFlBQVk7QUFDM0I7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRXdJO0FBQ3hJO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvaWNlYmVyZy1qcy9kaXN0L2luZGV4Lm1qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBzcmMvZXJyb3JzL0ljZWJlcmdFcnJvci50c1xudmFyIEljZWJlcmdFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBvcHRzKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gXCJJY2ViZXJnRXJyb3JcIjtcbiAgICB0aGlzLnN0YXR1cyA9IG9wdHMuc3RhdHVzO1xuICAgIHRoaXMuaWNlYmVyZ1R5cGUgPSBvcHRzLmljZWJlcmdUeXBlO1xuICAgIHRoaXMuaWNlYmVyZ0NvZGUgPSBvcHRzLmljZWJlcmdDb2RlO1xuICAgIHRoaXMuZGV0YWlscyA9IG9wdHMuZGV0YWlscztcbiAgICB0aGlzLmlzQ29tbWl0U3RhdGVVbmtub3duID0gb3B0cy5pY2ViZXJnVHlwZSA9PT0gXCJDb21taXRTdGF0ZVVua25vd25FeGNlcHRpb25cIiB8fCBbNTAwLCA1MDIsIDUwNF0uaW5jbHVkZXMob3B0cy5zdGF0dXMpICYmIG9wdHMuaWNlYmVyZ1R5cGU/LmluY2x1ZGVzKFwiQ29tbWl0U3RhdGVcIikgPT09IHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXJyb3IgaXMgYSA0MDQgTm90IEZvdW5kIGVycm9yLlxuICAgKi9cbiAgaXNOb3RGb3VuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0dXMgPT09IDQwNDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBlcnJvciBpcyBhIDQwOSBDb25mbGljdCBlcnJvci5cbiAgICovXG4gIGlzQ29uZmxpY3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSA0MDk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZXJyb3IgaXMgYSA0MTkgQXV0aGVudGljYXRpb24gVGltZW91dCBlcnJvci5cbiAgICovXG4gIGlzQXV0aGVudGljYXRpb25UaW1lb3V0KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXR1cyA9PT0gNDE5O1xuICB9XG59O1xuXG4vLyBzcmMvdXRpbHMvdXJsLnRzXG5mdW5jdGlvbiBidWlsZFVybChiYXNlVXJsLCBwYXRoLCBxdWVyeSkge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKHBhdGgsIGJhc2VVcmwpO1xuICBpZiAocXVlcnkpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhxdWVyeSkpIHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG59XG5cbi8vIHNyYy9odHRwL2NyZWF0ZUZldGNoQ2xpZW50LnRzXG5hc3luYyBmdW5jdGlvbiBidWlsZEF1dGhIZWFkZXJzKGF1dGgpIHtcbiAgaWYgKCFhdXRoIHx8IGF1dGgudHlwZSA9PT0gXCJub25lXCIpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgaWYgKGF1dGgudHlwZSA9PT0gXCJiZWFyZXJcIikge1xuICAgIHJldHVybiB7IEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHthdXRoLnRva2VufWAgfTtcbiAgfVxuICBpZiAoYXV0aC50eXBlID09PSBcImhlYWRlclwiKSB7XG4gICAgcmV0dXJuIHsgW2F1dGgubmFtZV06IGF1dGgudmFsdWUgfTtcbiAgfVxuICBpZiAoYXV0aC50eXBlID09PSBcImN1c3RvbVwiKSB7XG4gICAgcmV0dXJuIGF3YWl0IGF1dGguZ2V0SGVhZGVycygpO1xuICB9XG4gIHJldHVybiB7fTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUZldGNoQ2xpZW50KG9wdGlvbnMpIHtcbiAgY29uc3QgZmV0Y2hGbiA9IG9wdGlvbnMuZmV0Y2hJbXBsID8/IGdsb2JhbFRoaXMuZmV0Y2g7XG4gIHJldHVybiB7XG4gICAgYXN5bmMgcmVxdWVzdCh7XG4gICAgICBtZXRob2QsXG4gICAgICBwYXRoLFxuICAgICAgcXVlcnksXG4gICAgICBib2R5LFxuICAgICAgaGVhZGVyc1xuICAgIH0pIHtcbiAgICAgIGNvbnN0IHVybCA9IGJ1aWxkVXJsKG9wdGlvbnMuYmFzZVVybCwgcGF0aCwgcXVlcnkpO1xuICAgICAgY29uc3QgYXV0aEhlYWRlcnMgPSBhd2FpdCBidWlsZEF1dGhIZWFkZXJzKG9wdGlvbnMuYXV0aCk7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaEZuKHVybCwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAuLi5ib2R5ID8geyBcIkNvbnRlbnQtVHlwZVwiOiBcImFwcGxpY2F0aW9uL2pzb25cIiB9IDoge30sXG4gICAgICAgICAgLi4uYXV0aEhlYWRlcnMsXG4gICAgICAgICAgLi4uaGVhZGVyc1xuICAgICAgICB9LFxuICAgICAgICBib2R5OiBib2R5ID8gSlNPTi5zdHJpbmdpZnkoYm9keSkgOiB2b2lkIDBcbiAgICAgIH0pO1xuICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlcy50ZXh0KCk7XG4gICAgICBjb25zdCBpc0pzb24gPSAocmVzLmhlYWRlcnMuZ2V0KFwiY29udGVudC10eXBlXCIpIHx8IFwiXCIpLmluY2x1ZGVzKFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBpc0pzb24gJiYgdGV4dCA/IEpTT04ucGFyc2UodGV4dCkgOiB0ZXh0O1xuICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgY29uc3QgZXJyQm9keSA9IGlzSnNvbiA/IGRhdGEgOiB2b2lkIDA7XG4gICAgICAgIGNvbnN0IGVycm9yRGV0YWlsID0gZXJyQm9keT8uZXJyb3I7XG4gICAgICAgIHRocm93IG5ldyBJY2ViZXJnRXJyb3IoXG4gICAgICAgICAgZXJyb3JEZXRhaWw/Lm1lc3NhZ2UgPz8gYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzICR7cmVzLnN0YXR1c31gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0YXR1czogcmVzLnN0YXR1cyxcbiAgICAgICAgICAgIGljZWJlcmdUeXBlOiBlcnJvckRldGFpbD8udHlwZSxcbiAgICAgICAgICAgIGljZWJlcmdDb2RlOiBlcnJvckRldGFpbD8uY29kZSxcbiAgICAgICAgICAgIGRldGFpbHM6IGVyckJvZHlcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4geyBzdGF0dXM6IHJlcy5zdGF0dXMsIGhlYWRlcnM6IHJlcy5oZWFkZXJzLCBkYXRhIH07XG4gICAgfVxuICB9O1xufVxuXG4vLyBzcmMvY2F0YWxvZy9uYW1lc3BhY2VzLnRzXG5mdW5jdGlvbiBuYW1lc3BhY2VUb1BhdGgobmFtZXNwYWNlKSB7XG4gIHJldHVybiBuYW1lc3BhY2Uuam9pbihcIlx1MDAxZlwiKTtcbn1cbnZhciBOYW1lc3BhY2VPcGVyYXRpb25zID0gY2xhc3Mge1xuICBjb25zdHJ1Y3RvcihjbGllbnQsIHByZWZpeCA9IFwiXCIpIHtcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB0aGlzLnByZWZpeCA9IHByZWZpeDtcbiAgfVxuICBhc3luYyBsaXN0TmFtZXNwYWNlcyhwYXJlbnQpIHtcbiAgICBjb25zdCBxdWVyeSA9IHBhcmVudCA/IHsgcGFyZW50OiBuYW1lc3BhY2VUb1BhdGgocGFyZW50Lm5hbWVzcGFjZSkgfSA6IHZvaWQgMDtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnJlcXVlc3Qoe1xuICAgICAgbWV0aG9kOiBcIkdFVFwiLFxuICAgICAgcGF0aDogYCR7dGhpcy5wcmVmaXh9L25hbWVzcGFjZXNgLFxuICAgICAgcXVlcnlcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5uYW1lc3BhY2VzLm1hcCgobnMpID0+ICh7IG5hbWVzcGFjZTogbnMgfSkpO1xuICB9XG4gIGFzeW5jIGNyZWF0ZU5hbWVzcGFjZShpZCwgbWV0YWRhdGEpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgbmFtZXNwYWNlOiBpZC5uYW1lc3BhY2UsXG4gICAgICBwcm9wZXJ0aWVzOiBtZXRhZGF0YT8ucHJvcGVydGllc1xuICAgIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXF1ZXN0KHtcbiAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICBwYXRoOiBgJHt0aGlzLnByZWZpeH0vbmFtZXNwYWNlc2AsXG4gICAgICBib2R5OiByZXF1ZXN0XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGE7XG4gIH1cbiAgYXN5bmMgZHJvcE5hbWVzcGFjZShpZCkge1xuICAgIGF3YWl0IHRoaXMuY2xpZW50LnJlcXVlc3Qoe1xuICAgICAgbWV0aG9kOiBcIkRFTEVURVwiLFxuICAgICAgcGF0aDogYCR7dGhpcy5wcmVmaXh9L25hbWVzcGFjZXMvJHtuYW1lc3BhY2VUb1BhdGgoaWQubmFtZXNwYWNlKX1gXG4gICAgfSk7XG4gIH1cbiAgYXN5bmMgbG9hZE5hbWVzcGFjZU1ldGFkYXRhKGlkKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXF1ZXN0KHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIHBhdGg6IGAke3RoaXMucHJlZml4fS9uYW1lc3BhY2VzLyR7bmFtZXNwYWNlVG9QYXRoKGlkLm5hbWVzcGFjZSl9YFxuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICBwcm9wZXJ0aWVzOiByZXNwb25zZS5kYXRhLnByb3BlcnRpZXNcbiAgICB9O1xuICB9XG4gIGFzeW5jIG5hbWVzcGFjZUV4aXN0cyhpZCkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmNsaWVudC5yZXF1ZXN0KHtcbiAgICAgICAgbWV0aG9kOiBcIkhFQURcIixcbiAgICAgICAgcGF0aDogYCR7dGhpcy5wcmVmaXh9L25hbWVzcGFjZXMvJHtuYW1lc3BhY2VUb1BhdGgoaWQubmFtZXNwYWNlKX1gXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBJY2ViZXJnRXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIGFzeW5jIGNyZWF0ZU5hbWVzcGFjZUlmTm90RXhpc3RzKGlkLCBtZXRhZGF0YSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcmVhdGVOYW1lc3BhY2UoaWQsIG1ldGFkYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSWNlYmVyZ0Vycm9yICYmIGVycm9yLnN0YXR1cyA9PT0gNDA5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufTtcblxuLy8gc3JjL2NhdGFsb2cvdGFibGVzLnRzXG5mdW5jdGlvbiBuYW1lc3BhY2VUb1BhdGgyKG5hbWVzcGFjZSkge1xuICByZXR1cm4gbmFtZXNwYWNlLmpvaW4oXCJcdTAwMWZcIik7XG59XG52YXIgVGFibGVPcGVyYXRpb25zID0gY2xhc3Mge1xuICBjb25zdHJ1Y3RvcihjbGllbnQsIHByZWZpeCA9IFwiXCIsIGFjY2Vzc0RlbGVnYXRpb24pIHtcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB0aGlzLnByZWZpeCA9IHByZWZpeDtcbiAgICB0aGlzLmFjY2Vzc0RlbGVnYXRpb24gPSBhY2Nlc3NEZWxlZ2F0aW9uO1xuICB9XG4gIGFzeW5jIGxpc3RUYWJsZXMobmFtZXNwYWNlKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXF1ZXN0KHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIHBhdGg6IGAke3RoaXMucHJlZml4fS9uYW1lc3BhY2VzLyR7bmFtZXNwYWNlVG9QYXRoMihuYW1lc3BhY2UubmFtZXNwYWNlKX0vdGFibGVzYFxuICAgIH0pO1xuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmlkZW50aWZpZXJzO1xuICB9XG4gIGFzeW5jIGNyZWF0ZVRhYmxlKG5hbWVzcGFjZSwgcmVxdWVzdCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICBpZiAodGhpcy5hY2Nlc3NEZWxlZ2F0aW9uKSB7XG4gICAgICBoZWFkZXJzW1wiWC1JY2ViZXJnLUFjY2Vzcy1EZWxlZ2F0aW9uXCJdID0gdGhpcy5hY2Nlc3NEZWxlZ2F0aW9uO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnJlcXVlc3Qoe1xuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIHBhdGg6IGAke3RoaXMucHJlZml4fS9uYW1lc3BhY2VzLyR7bmFtZXNwYWNlVG9QYXRoMihuYW1lc3BhY2UubmFtZXNwYWNlKX0vdGFibGVzYCxcbiAgICAgIGJvZHk6IHJlcXVlc3QsXG4gICAgICBoZWFkZXJzXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEubWV0YWRhdGE7XG4gIH1cbiAgYXN5bmMgdXBkYXRlVGFibGUoaWQsIHJlcXVlc3QpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY2xpZW50LnJlcXVlc3Qoe1xuICAgICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICAgIHBhdGg6IGAke3RoaXMucHJlZml4fS9uYW1lc3BhY2VzLyR7bmFtZXNwYWNlVG9QYXRoMihpZC5uYW1lc3BhY2UpfS90YWJsZXMvJHtpZC5uYW1lfWAsXG4gICAgICBib2R5OiByZXF1ZXN0XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIFwibWV0YWRhdGEtbG9jYXRpb25cIjogcmVzcG9uc2UuZGF0YVtcIm1ldGFkYXRhLWxvY2F0aW9uXCJdLFxuICAgICAgbWV0YWRhdGE6IHJlc3BvbnNlLmRhdGEubWV0YWRhdGFcbiAgICB9O1xuICB9XG4gIGFzeW5jIGRyb3BUYWJsZShpZCwgb3B0aW9ucykge1xuICAgIGF3YWl0IHRoaXMuY2xpZW50LnJlcXVlc3Qoe1xuICAgICAgbWV0aG9kOiBcIkRFTEVURVwiLFxuICAgICAgcGF0aDogYCR7dGhpcy5wcmVmaXh9L25hbWVzcGFjZXMvJHtuYW1lc3BhY2VUb1BhdGgyKGlkLm5hbWVzcGFjZSl9L3RhYmxlcy8ke2lkLm5hbWV9YCxcbiAgICAgIHF1ZXJ5OiB7IHB1cmdlUmVxdWVzdGVkOiBTdHJpbmcob3B0aW9ucz8ucHVyZ2UgPz8gZmFsc2UpIH1cbiAgICB9KTtcbiAgfVxuICBhc3luYyBsb2FkVGFibGUoaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgaWYgKHRoaXMuYWNjZXNzRGVsZWdhdGlvbikge1xuICAgICAgaGVhZGVyc1tcIlgtSWNlYmVyZy1BY2Nlc3MtRGVsZWdhdGlvblwiXSA9IHRoaXMuYWNjZXNzRGVsZWdhdGlvbjtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNsaWVudC5yZXF1ZXN0KHtcbiAgICAgIG1ldGhvZDogXCJHRVRcIixcbiAgICAgIHBhdGg6IGAke3RoaXMucHJlZml4fS9uYW1lc3BhY2VzLyR7bmFtZXNwYWNlVG9QYXRoMihpZC5uYW1lc3BhY2UpfS90YWJsZXMvJHtpZC5uYW1lfWAsXG4gICAgICBoZWFkZXJzXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLmRhdGEubWV0YWRhdGE7XG4gIH1cbiAgYXN5bmMgdGFibGVFeGlzdHMoaWQpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgaWYgKHRoaXMuYWNjZXNzRGVsZWdhdGlvbikge1xuICAgICAgaGVhZGVyc1tcIlgtSWNlYmVyZy1BY2Nlc3MtRGVsZWdhdGlvblwiXSA9IHRoaXMuYWNjZXNzRGVsZWdhdGlvbjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY2xpZW50LnJlcXVlc3Qoe1xuICAgICAgICBtZXRob2Q6IFwiSEVBRFwiLFxuICAgICAgICBwYXRoOiBgJHt0aGlzLnByZWZpeH0vbmFtZXNwYWNlcy8ke25hbWVzcGFjZVRvUGF0aDIoaWQubmFtZXNwYWNlKX0vdGFibGVzLyR7aWQubmFtZX1gLFxuICAgICAgICBoZWFkZXJzXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBJY2ViZXJnRXJyb3IgJiYgZXJyb3Iuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG4gIGFzeW5jIGNyZWF0ZVRhYmxlSWZOb3RFeGlzdHMobmFtZXNwYWNlLCByZXF1ZXN0KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNyZWF0ZVRhYmxlKG5hbWVzcGFjZSwgcmVxdWVzdCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEljZWJlcmdFcnJvciAmJiBlcnJvci5zdGF0dXMgPT09IDQwOSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5sb2FkVGFibGUoeyBuYW1lc3BhY2U6IG5hbWVzcGFjZS5uYW1lc3BhY2UsIG5hbWU6IHJlcXVlc3QubmFtZSB9KTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufTtcblxuLy8gc3JjL2NhdGFsb2cvSWNlYmVyZ1Jlc3RDYXRhbG9nLnRzXG52YXIgSWNlYmVyZ1Jlc3RDYXRhbG9nID0gY2xhc3Mge1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBJY2ViZXJnIFJFU1QgQ2F0YWxvZyBjbGllbnQuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgY2F0YWxvZyBjbGllbnRcbiAgICovXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICBsZXQgcHJlZml4ID0gXCJ2MVwiO1xuICAgIGlmIChvcHRpb25zLmNhdGFsb2dOYW1lKSB7XG4gICAgICBwcmVmaXggKz0gYC8ke29wdGlvbnMuY2F0YWxvZ05hbWV9YDtcbiAgICB9XG4gICAgY29uc3QgYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybC5lbmRzV2l0aChcIi9cIikgPyBvcHRpb25zLmJhc2VVcmwgOiBgJHtvcHRpb25zLmJhc2VVcmx9L2A7XG4gICAgdGhpcy5jbGllbnQgPSBjcmVhdGVGZXRjaENsaWVudCh7XG4gICAgICBiYXNlVXJsLFxuICAgICAgYXV0aDogb3B0aW9ucy5hdXRoLFxuICAgICAgZmV0Y2hJbXBsOiBvcHRpb25zLmZldGNoXG4gICAgfSk7XG4gICAgdGhpcy5hY2Nlc3NEZWxlZ2F0aW9uID0gb3B0aW9ucy5hY2Nlc3NEZWxlZ2F0aW9uPy5qb2luKFwiLFwiKTtcbiAgICB0aGlzLm5hbWVzcGFjZU9wcyA9IG5ldyBOYW1lc3BhY2VPcGVyYXRpb25zKHRoaXMuY2xpZW50LCBwcmVmaXgpO1xuICAgIHRoaXMudGFibGVPcHMgPSBuZXcgVGFibGVPcGVyYXRpb25zKHRoaXMuY2xpZW50LCBwcmVmaXgsIHRoaXMuYWNjZXNzRGVsZWdhdGlvbik7XG4gIH1cbiAgLyoqXG4gICAqIExpc3RzIGFsbCBuYW1lc3BhY2VzIGluIHRoZSBjYXRhbG9nLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyZW50IC0gT3B0aW9uYWwgcGFyZW50IG5hbWVzcGFjZSB0byBsaXN0IGNoaWxkcmVuIHVuZGVyXG4gICAqIEByZXR1cm5zIEFycmF5IG9mIG5hbWVzcGFjZSBpZGVudGlmaWVyc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIC8vIExpc3QgYWxsIHRvcC1sZXZlbCBuYW1lc3BhY2VzXG4gICAqIGNvbnN0IG5hbWVzcGFjZXMgPSBhd2FpdCBjYXRhbG9nLmxpc3ROYW1lc3BhY2VzKCk7XG4gICAqXG4gICAqIC8vIExpc3QgbmFtZXNwYWNlcyB1bmRlciBhIHBhcmVudFxuICAgKiBjb25zdCBjaGlsZHJlbiA9IGF3YWl0IGNhdGFsb2cubGlzdE5hbWVzcGFjZXMoeyBuYW1lc3BhY2U6IFsnYW5hbHl0aWNzJ10gfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgbGlzdE5hbWVzcGFjZXMocGFyZW50KSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZXNwYWNlT3BzLmxpc3ROYW1lc3BhY2VzKHBhcmVudCk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgbmFtZXNwYWNlIGluIHRoZSBjYXRhbG9nLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBOYW1lc3BhY2UgaWRlbnRpZmllciB0byBjcmVhdGVcbiAgICogQHBhcmFtIG1ldGFkYXRhIC0gT3B0aW9uYWwgbWV0YWRhdGEgcHJvcGVydGllcyBmb3IgdGhlIG5hbWVzcGFjZVxuICAgKiBAcmV0dXJucyBSZXNwb25zZSBjb250YWluaW5nIHRoZSBjcmVhdGVkIG5hbWVzcGFjZSBhbmQgaXRzIHByb3BlcnRpZXNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNhdGFsb2cuY3JlYXRlTmFtZXNwYWNlKFxuICAgKiAgIHsgbmFtZXNwYWNlOiBbJ2FuYWx5dGljcyddIH0sXG4gICAqICAgeyBwcm9wZXJ0aWVzOiB7IG93bmVyOiAnZGF0YS10ZWFtJyB9IH1cbiAgICogKTtcbiAgICogY29uc29sZS5sb2cocmVzcG9uc2UubmFtZXNwYWNlKTsgLy8gWydhbmFseXRpY3MnXVxuICAgKiBjb25zb2xlLmxvZyhyZXNwb25zZS5wcm9wZXJ0aWVzKTsgLy8geyBvd25lcjogJ2RhdGEtdGVhbScsIC4uLiB9XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgY3JlYXRlTmFtZXNwYWNlKGlkLCBtZXRhZGF0YSkge1xuICAgIHJldHVybiB0aGlzLm5hbWVzcGFjZU9wcy5jcmVhdGVOYW1lc3BhY2UoaWQsIG1ldGFkYXRhKTtcbiAgfVxuICAvKipcbiAgICogRHJvcHMgYSBuYW1lc3BhY2UgZnJvbSB0aGUgY2F0YWxvZy5cbiAgICpcbiAgICogVGhlIG5hbWVzcGFjZSBtdXN0IGJlIGVtcHR5IChjb250YWluIG5vIHRhYmxlcykgYmVmb3JlIGl0IGNhbiBiZSBkcm9wcGVkLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBOYW1lc3BhY2UgaWRlbnRpZmllciB0byBkcm9wXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogYXdhaXQgY2F0YWxvZy5kcm9wTmFtZXNwYWNlKHsgbmFtZXNwYWNlOiBbJ2FuYWx5dGljcyddIH0pO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGRyb3BOYW1lc3BhY2UoaWQpIHtcbiAgICBhd2FpdCB0aGlzLm5hbWVzcGFjZU9wcy5kcm9wTmFtZXNwYWNlKGlkKTtcbiAgfVxuICAvKipcbiAgICogTG9hZHMgbWV0YWRhdGEgZm9yIGEgbmFtZXNwYWNlLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBOYW1lc3BhY2UgaWRlbnRpZmllciB0byBsb2FkXG4gICAqIEByZXR1cm5zIE5hbWVzcGFjZSBtZXRhZGF0YSBpbmNsdWRpbmcgcHJvcGVydGllc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgY2F0YWxvZy5sb2FkTmFtZXNwYWNlTWV0YWRhdGEoeyBuYW1lc3BhY2U6IFsnYW5hbHl0aWNzJ10gfSk7XG4gICAqIGNvbnNvbGUubG9nKG1ldGFkYXRhLnByb3BlcnRpZXMpO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGxvYWROYW1lc3BhY2VNZXRhZGF0YShpZCkge1xuICAgIHJldHVybiB0aGlzLm5hbWVzcGFjZU9wcy5sb2FkTmFtZXNwYWNlTWV0YWRhdGEoaWQpO1xuICB9XG4gIC8qKlxuICAgKiBMaXN0cyBhbGwgdGFibGVzIGluIGEgbmFtZXNwYWNlLlxuICAgKlxuICAgKiBAcGFyYW0gbmFtZXNwYWNlIC0gTmFtZXNwYWNlIGlkZW50aWZpZXIgdG8gbGlzdCB0YWJsZXMgZnJvbVxuICAgKiBAcmV0dXJucyBBcnJheSBvZiB0YWJsZSBpZGVudGlmaWVyc1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IHRhYmxlcyA9IGF3YWl0IGNhdGFsb2cubGlzdFRhYmxlcyh7IG5hbWVzcGFjZTogWydhbmFseXRpY3MnXSB9KTtcbiAgICogY29uc29sZS5sb2codGFibGVzKTsgLy8gW3sgbmFtZXNwYWNlOiBbJ2FuYWx5dGljcyddLCBuYW1lOiAnZXZlbnRzJyB9LCAuLi5dXG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgbGlzdFRhYmxlcyhuYW1lc3BhY2UpIHtcbiAgICByZXR1cm4gdGhpcy50YWJsZU9wcy5saXN0VGFibGVzKG5hbWVzcGFjZSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgdGFibGUgaW4gdGhlIGNhdGFsb2cuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lc3BhY2UgLSBOYW1lc3BhY2UgdG8gY3JlYXRlIHRoZSB0YWJsZSBpblxuICAgKiBAcGFyYW0gcmVxdWVzdCAtIFRhYmxlIGNyZWF0aW9uIHJlcXVlc3QgaW5jbHVkaW5nIG5hbWUsIHNjaGVtYSwgcGFydGl0aW9uIHNwZWMsIGV0Yy5cbiAgICogQHJldHVybnMgVGFibGUgbWV0YWRhdGEgZm9yIHRoZSBjcmVhdGVkIHRhYmxlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgbWV0YWRhdGEgPSBhd2FpdCBjYXRhbG9nLmNyZWF0ZVRhYmxlKFxuICAgKiAgIHsgbmFtZXNwYWNlOiBbJ2FuYWx5dGljcyddIH0sXG4gICAqICAge1xuICAgKiAgICAgbmFtZTogJ2V2ZW50cycsXG4gICAqICAgICBzY2hlbWE6IHtcbiAgICogICAgICAgdHlwZTogJ3N0cnVjdCcsXG4gICAqICAgICAgIGZpZWxkczogW1xuICAgKiAgICAgICAgIHsgaWQ6IDEsIG5hbWU6ICdpZCcsIHR5cGU6ICdsb25nJywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICogICAgICAgICB7IGlkOiAyLCBuYW1lOiAndGltZXN0YW1wJywgdHlwZTogJ3RpbWVzdGFtcCcsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICogICAgICAgXSxcbiAgICogICAgICAgJ3NjaGVtYS1pZCc6IDBcbiAgICogICAgIH0sXG4gICAqICAgICAncGFydGl0aW9uLXNwZWMnOiB7XG4gICAqICAgICAgICdzcGVjLWlkJzogMCxcbiAgICogICAgICAgZmllbGRzOiBbXG4gICAqICAgICAgICAgeyBzb3VyY2VfaWQ6IDIsIGZpZWxkX2lkOiAxMDAwLCBuYW1lOiAndHNfZGF5JywgdHJhbnNmb3JtOiAnZGF5JyB9XG4gICAqICAgICAgIF1cbiAgICogICAgIH1cbiAgICogICB9XG4gICAqICk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgY3JlYXRlVGFibGUobmFtZXNwYWNlLCByZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVPcHMuY3JlYXRlVGFibGUobmFtZXNwYWNlLCByZXF1ZXN0KTtcbiAgfVxuICAvKipcbiAgICogVXBkYXRlcyBhbiBleGlzdGluZyB0YWJsZSdzIG1ldGFkYXRhLlxuICAgKlxuICAgKiBDYW4gdXBkYXRlIHRoZSBzY2hlbWEsIHBhcnRpdGlvbiBzcGVjLCBvciBwcm9wZXJ0aWVzIG9mIGEgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBpZCAtIFRhYmxlIGlkZW50aWZpZXIgdG8gdXBkYXRlXG4gICAqIEBwYXJhbSByZXF1ZXN0IC0gVXBkYXRlIHJlcXVlc3Qgd2l0aCBmaWVsZHMgdG8gbW9kaWZ5XG4gICAqIEByZXR1cm5zIFJlc3BvbnNlIGNvbnRhaW5pbmcgdGhlIG1ldGFkYXRhIGxvY2F0aW9uIGFuZCB1cGRhdGVkIHRhYmxlIG1ldGFkYXRhXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjYXRhbG9nLnVwZGF0ZVRhYmxlKFxuICAgKiAgIHsgbmFtZXNwYWNlOiBbJ2FuYWx5dGljcyddLCBuYW1lOiAnZXZlbnRzJyB9LFxuICAgKiAgIHtcbiAgICogICAgIHByb3BlcnRpZXM6IHsgJ3JlYWQuc3BsaXQudGFyZ2V0LXNpemUnOiAnMTM0MjE3NzI4JyB9XG4gICAqICAgfVxuICAgKiApO1xuICAgKiBjb25zb2xlLmxvZyhyZXNwb25zZVsnbWV0YWRhdGEtbG9jYXRpb24nXSk7IC8vIHMzOi8vLi4uXG4gICAqIGNvbnNvbGUubG9nKHJlc3BvbnNlLm1ldGFkYXRhKTsgLy8gVGFibGVNZXRhZGF0YSBvYmplY3RcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyB1cGRhdGVUYWJsZShpZCwgcmVxdWVzdCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlT3BzLnVwZGF0ZVRhYmxlKGlkLCByZXF1ZXN0KTtcbiAgfVxuICAvKipcbiAgICogRHJvcHMgYSB0YWJsZSBmcm9tIHRoZSBjYXRhbG9nLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUYWJsZSBpZGVudGlmaWVyIHRvIGRyb3BcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBhd2FpdCBjYXRhbG9nLmRyb3BUYWJsZSh7IG5hbWVzcGFjZTogWydhbmFseXRpY3MnXSwgbmFtZTogJ2V2ZW50cycgfSk7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgZHJvcFRhYmxlKGlkLCBvcHRpb25zKSB7XG4gICAgYXdhaXQgdGhpcy50YWJsZU9wcy5kcm9wVGFibGUoaWQsIG9wdGlvbnMpO1xuICB9XG4gIC8qKlxuICAgKiBMb2FkcyBtZXRhZGF0YSBmb3IgYSB0YWJsZS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gVGFibGUgaWRlbnRpZmllciB0byBsb2FkXG4gICAqIEByZXR1cm5zIFRhYmxlIG1ldGFkYXRhIGluY2x1ZGluZyBzY2hlbWEsIHBhcnRpdGlvbiBzcGVjLCBsb2NhdGlvbiwgZXRjLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgY2F0YWxvZy5sb2FkVGFibGUoeyBuYW1lc3BhY2U6IFsnYW5hbHl0aWNzJ10sIG5hbWU6ICdldmVudHMnIH0pO1xuICAgKiBjb25zb2xlLmxvZyhtZXRhZGF0YS5zY2hlbWEpO1xuICAgKiBjb25zb2xlLmxvZyhtZXRhZGF0YS5sb2NhdGlvbik7XG4gICAqIGBgYFxuICAgKi9cbiAgYXN5bmMgbG9hZFRhYmxlKGlkKSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVPcHMubG9hZFRhYmxlKGlkKTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgbmFtZXNwYWNlIGV4aXN0cyBpbiB0aGUgY2F0YWxvZy5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gTmFtZXNwYWNlIGlkZW50aWZpZXIgdG8gY2hlY2tcbiAgICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgbmFtZXNwYWNlIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZXhpc3RzID0gYXdhaXQgY2F0YWxvZy5uYW1lc3BhY2VFeGlzdHMoeyBuYW1lc3BhY2U6IFsnYW5hbHl0aWNzJ10gfSk7XG4gICAqIGNvbnNvbGUubG9nKGV4aXN0cyk7IC8vIHRydWUgb3IgZmFsc2VcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyBuYW1lc3BhY2VFeGlzdHMoaWQpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lc3BhY2VPcHMubmFtZXNwYWNlRXhpc3RzKGlkKTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgdGFibGUgZXhpc3RzIGluIHRoZSBjYXRhbG9nLlxuICAgKlxuICAgKiBAcGFyYW0gaWQgLSBUYWJsZSBpZGVudGlmaWVyIHRvIGNoZWNrXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHRhYmxlIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgZXhpc3RzID0gYXdhaXQgY2F0YWxvZy50YWJsZUV4aXN0cyh7IG5hbWVzcGFjZTogWydhbmFseXRpY3MnXSwgbmFtZTogJ2V2ZW50cycgfSk7XG4gICAqIGNvbnNvbGUubG9nKGV4aXN0cyk7IC8vIHRydWUgb3IgZmFsc2VcbiAgICogYGBgXG4gICAqL1xuICBhc3luYyB0YWJsZUV4aXN0cyhpZCkge1xuICAgIHJldHVybiB0aGlzLnRhYmxlT3BzLnRhYmxlRXhpc3RzKGlkKTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5hbWVzcGFjZSBpZiBpdCBkb2VzIG5vdCBleGlzdC5cbiAgICpcbiAgICogSWYgdGhlIG5hbWVzcGFjZSBhbHJlYWR5IGV4aXN0cywgcmV0dXJucyB2b2lkLiBJZiBjcmVhdGVkLCByZXR1cm5zIHRoZSByZXNwb25zZS5cbiAgICpcbiAgICogQHBhcmFtIGlkIC0gTmFtZXNwYWNlIGlkZW50aWZpZXIgdG8gY3JlYXRlXG4gICAqIEBwYXJhbSBtZXRhZGF0YSAtIE9wdGlvbmFsIG1ldGFkYXRhIHByb3BlcnRpZXMgZm9yIHRoZSBuYW1lc3BhY2VcbiAgICogQHJldHVybnMgUmVzcG9uc2UgY29udGFpbmluZyB0aGUgY3JlYXRlZCBuYW1lc3BhY2UgYW5kIGl0cyBwcm9wZXJ0aWVzLCBvciB2b2lkIGlmIGl0IGFscmVhZHkgZXhpc3RzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHR5cGVzY3JpcHRcbiAgICogY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjYXRhbG9nLmNyZWF0ZU5hbWVzcGFjZUlmTm90RXhpc3RzKFxuICAgKiAgIHsgbmFtZXNwYWNlOiBbJ2FuYWx5dGljcyddIH0sXG4gICAqICAgeyBwcm9wZXJ0aWVzOiB7IG93bmVyOiAnZGF0YS10ZWFtJyB9IH1cbiAgICogKTtcbiAgICogaWYgKHJlc3BvbnNlKSB7XG4gICAqICAgY29uc29sZS5sb2coJ0NyZWF0ZWQ6JywgcmVzcG9uc2UubmFtZXNwYWNlKTtcbiAgICogfSBlbHNlIHtcbiAgICogICBjb25zb2xlLmxvZygnQWxyZWFkeSBleGlzdHMnKTtcbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGNyZWF0ZU5hbWVzcGFjZUlmTm90RXhpc3RzKGlkLCBtZXRhZGF0YSkge1xuICAgIHJldHVybiB0aGlzLm5hbWVzcGFjZU9wcy5jcmVhdGVOYW1lc3BhY2VJZk5vdEV4aXN0cyhpZCwgbWV0YWRhdGEpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGFibGUgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gICAqXG4gICAqIElmIHRoZSB0YWJsZSBhbHJlYWR5IGV4aXN0cywgcmV0dXJucyBpdHMgbWV0YWRhdGEgaW5zdGVhZC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWVzcGFjZSAtIE5hbWVzcGFjZSB0byBjcmVhdGUgdGhlIHRhYmxlIGluXG4gICAqIEBwYXJhbSByZXF1ZXN0IC0gVGFibGUgY3JlYXRpb24gcmVxdWVzdCBpbmNsdWRpbmcgbmFtZSwgc2NoZW1hLCBwYXJ0aXRpb24gc3BlYywgZXRjLlxuICAgKiBAcmV0dXJucyBUYWJsZSBtZXRhZGF0YSBmb3IgdGhlIGNyZWF0ZWQgb3IgZXhpc3RpbmcgdGFibGVcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IGNhdGFsb2cuY3JlYXRlVGFibGVJZk5vdEV4aXN0cyhcbiAgICogICB7IG5hbWVzcGFjZTogWydhbmFseXRpY3MnXSB9LFxuICAgKiAgIHtcbiAgICogICAgIG5hbWU6ICdldmVudHMnLFxuICAgKiAgICAgc2NoZW1hOiB7XG4gICAqICAgICAgIHR5cGU6ICdzdHJ1Y3QnLFxuICAgKiAgICAgICBmaWVsZHM6IFtcbiAgICogICAgICAgICB7IGlkOiAxLCBuYW1lOiAnaWQnLCB0eXBlOiAnbG9uZycsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAqICAgICAgICAgeyBpZDogMiwgbmFtZTogJ3RpbWVzdGFtcCcsIHR5cGU6ICd0aW1lc3RhbXAnLCByZXF1aXJlZDogdHJ1ZSB9XG4gICAqICAgICAgIF0sXG4gICAqICAgICAgICdzY2hlbWEtaWQnOiAwXG4gICAqICAgICB9XG4gICAqICAgfVxuICAgKiApO1xuICAgKiBgYGBcbiAgICovXG4gIGFzeW5jIGNyZWF0ZVRhYmxlSWZOb3RFeGlzdHMobmFtZXNwYWNlLCByZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVPcHMuY3JlYXRlVGFibGVJZk5vdEV4aXN0cyhuYW1lc3BhY2UsIHJlcXVlc3QpO1xuICB9XG59O1xuXG4vLyBzcmMvY2F0YWxvZy90eXBlcy50c1xudmFyIERFQ0lNQUxfUkVHRVggPSAvXmRlY2ltYWxcXHMqXFwoXFxzKihcXGQrKVxccyosXFxzKihcXGQrKVxccypcXCkkLztcbnZhciBGSVhFRF9SRUdFWCA9IC9eZml4ZWRcXHMqXFxbXFxzKihcXGQrKVxccypcXF0kLztcbmZ1bmN0aW9uIHBhcnNlRGVjaW1hbFR5cGUodHlwZSkge1xuICBjb25zdCBtYXRjaCA9IHR5cGUubWF0Y2goREVDSU1BTF9SRUdFWCk7XG4gIGlmICghbWF0Y2gpIHJldHVybiBudWxsO1xuICByZXR1cm4ge1xuICAgIHByZWNpc2lvbjogcGFyc2VJbnQobWF0Y2hbMV0sIDEwKSxcbiAgICBzY2FsZTogcGFyc2VJbnQobWF0Y2hbMl0sIDEwKVxuICB9O1xufVxuZnVuY3Rpb24gcGFyc2VGaXhlZFR5cGUodHlwZSkge1xuICBjb25zdCBtYXRjaCA9IHR5cGUubWF0Y2goRklYRURfUkVHRVgpO1xuICBpZiAoIW1hdGNoKSByZXR1cm4gbnVsbDtcbiAgcmV0dXJuIHtcbiAgICBsZW5ndGg6IHBhcnNlSW50KG1hdGNoWzFdLCAxMClcbiAgfTtcbn1cbmZ1bmN0aW9uIGlzRGVjaW1hbFR5cGUodHlwZSkge1xuICByZXR1cm4gREVDSU1BTF9SRUdFWC50ZXN0KHR5cGUpO1xufVxuZnVuY3Rpb24gaXNGaXhlZFR5cGUodHlwZSkge1xuICByZXR1cm4gRklYRURfUkVHRVgudGVzdCh0eXBlKTtcbn1cbmZ1bmN0aW9uIHR5cGVzRXF1YWwoYSwgYikge1xuICBjb25zdCBkZWNpbWFsQSA9IHBhcnNlRGVjaW1hbFR5cGUoYSk7XG4gIGNvbnN0IGRlY2ltYWxCID0gcGFyc2VEZWNpbWFsVHlwZShiKTtcbiAgaWYgKGRlY2ltYWxBICYmIGRlY2ltYWxCKSB7XG4gICAgcmV0dXJuIGRlY2ltYWxBLnByZWNpc2lvbiA9PT0gZGVjaW1hbEIucHJlY2lzaW9uICYmIGRlY2ltYWxBLnNjYWxlID09PSBkZWNpbWFsQi5zY2FsZTtcbiAgfVxuICBjb25zdCBmaXhlZEEgPSBwYXJzZUZpeGVkVHlwZShhKTtcbiAgY29uc3QgZml4ZWRCID0gcGFyc2VGaXhlZFR5cGUoYik7XG4gIGlmIChmaXhlZEEgJiYgZml4ZWRCKSB7XG4gICAgcmV0dXJuIGZpeGVkQS5sZW5ndGggPT09IGZpeGVkQi5sZW5ndGg7XG4gIH1cbiAgcmV0dXJuIGEgPT09IGI7XG59XG5mdW5jdGlvbiBnZXRDdXJyZW50U2NoZW1hKG1ldGFkYXRhKSB7XG4gIHJldHVybiBtZXRhZGF0YS5zY2hlbWFzLmZpbmQoKHMpID0+IHNbXCJzY2hlbWEtaWRcIl0gPT09IG1ldGFkYXRhW1wiY3VycmVudC1zY2hlbWEtaWRcIl0pO1xufVxuXG5leHBvcnQgeyBJY2ViZXJnRXJyb3IsIEljZWJlcmdSZXN0Q2F0YWxvZywgZ2V0Q3VycmVudFNjaGVtYSwgaXNEZWNpbWFsVHlwZSwgaXNGaXhlZFR5cGUsIHBhcnNlRGVjaW1hbFR5cGUsIHBhcnNlRml4ZWRUeXBlLCB0eXBlc0VxdWFsIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5tanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/iceberg-js/dist/index.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/Icon.mjs":
|
||
/*!*****************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/Icon.mjs ***!
|
||
\*****************************************************/
|
||
/***/ ((__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 */ \"default\": () => (/* binding */ Icon)\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 _defaultAttributes_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./defaultAttributes.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/defaultAttributes.mjs\");\n/* harmony import */ var _shared_src_utils_hasA11yProp_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./shared/src/utils/hasA11yProp.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs\");\n/* harmony import */ var _shared_src_utils_mergeClasses_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shared/src/utils/mergeClasses.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs\");\n/* harmony import */ var _context_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./context.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/context.mjs\");\n/* __next_internal_client_entry_do_not_use__ default auto */ var _s = $RefreshSig$();\n\"use strict\";\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \n\n\n\n\nconst Icon = /*#__PURE__*/ _s((0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(_c = _s((param, ref)=>{\n let { color, size, strokeWidth, absoluteStrokeWidth, className = \"\", children, iconNode, ...rest } = param;\n _s();\n var _useLucideContext;\n const { size: contextSize = 24, strokeWidth: contextStrokeWidth = 2, absoluteStrokeWidth: contextAbsoluteStrokeWidth = false, color: contextColor = \"currentColor\", className: contextClass = \"\" } = (_useLucideContext = (0,_context_mjs__WEBPACK_IMPORTED_MODULE_1__.useLucideContext)()) !== null && _useLucideContext !== void 0 ? _useLucideContext : {};\n const calculatedStrokeWidth = (absoluteStrokeWidth !== null && absoluteStrokeWidth !== void 0 ? absoluteStrokeWidth : contextAbsoluteStrokeWidth) ? Number(strokeWidth !== null && strokeWidth !== void 0 ? strokeWidth : contextStrokeWidth) * 24 / Number(size !== null && size !== void 0 ? size : contextSize) : strokeWidth !== null && strokeWidth !== void 0 ? strokeWidth : contextStrokeWidth;\n var _ref, _ref1;\n return /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(\"svg\", {\n ref,\n ..._defaultAttributes_mjs__WEBPACK_IMPORTED_MODULE_2__[\"default\"],\n width: (_ref = size !== null && size !== void 0 ? size : contextSize) !== null && _ref !== void 0 ? _ref : _defaultAttributes_mjs__WEBPACK_IMPORTED_MODULE_2__[\"default\"].width,\n height: (_ref1 = size !== null && size !== void 0 ? size : contextSize) !== null && _ref1 !== void 0 ? _ref1 : _defaultAttributes_mjs__WEBPACK_IMPORTED_MODULE_2__[\"default\"].height,\n stroke: color !== null && color !== void 0 ? color : contextColor,\n strokeWidth: calculatedStrokeWidth,\n className: (0,_shared_src_utils_mergeClasses_mjs__WEBPACK_IMPORTED_MODULE_3__.mergeClasses)(\"lucide\", contextClass, className),\n ...!children && !(0,_shared_src_utils_hasA11yProp_mjs__WEBPACK_IMPORTED_MODULE_4__.hasA11yProp)(rest) && {\n \"aria-hidden\": \"true\"\n },\n ...rest\n }, [\n ...iconNode.map((param)=>{\n let [tag, attrs] = param;\n return /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(tag, attrs);\n }),\n ...Array.isArray(children) ? children : [\n children\n ]\n ]);\n}, \"GcLZ61pjyALY2vKIC3OM8EtsDSA=\", false, function() {\n return [\n _context_mjs__WEBPACK_IMPORTED_MODULE_1__.useLucideContext\n ];\n})), \"GcLZ61pjyALY2vKIC3OM8EtsDSA=\", false, function() {\n return [\n _context_mjs__WEBPACK_IMPORTED_MODULE_1__.useLucideContext\n ];\n});\n_c1 = Icon;\n //# sourceMappingURL=Icon.mjs.map\nvar _c, _c1;\n$RefreshReg$(_c, \"Icon$forwardRef\");\n$RefreshReg$(_c1, \"Icon\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vSWNvbi5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkJBLHdGQUFhO1FBQUE7O1FBVW1CO0lBTDVCLFFBQU0sd0JBQ2dCLHFDQUNjLHlEQUNnQixzQ0FDNUIsOEJBQ0k7SUFHNUI7UUFTTyxNQUM2QztJQUxwRCwwRUFBTyxPQUNMO1FBQ0E7UUFDRTtRQUNHLHlLQUFpQixDQUFqQjtRQUM2QztRQUNDO1FBQ2hDO1FBQ0o7UUFDNEM7WUFBQTtRQUFBO1FBQ007SUFDNUQsR0FDTDtXQUNBO2dCQUFBO2lDQUFBOztXQUM2RDtZQUFBO1NBQUE7S0FDVDtBQUV0RDs7UUF6QjRCOzs7O1FBQUEiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9zcmMvSWNvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCc7XG5cbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIGZvcndhcmRSZWYgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVmYXVsdEF0dHJpYnV0ZXMgZnJvbSAnLi9kZWZhdWx0QXR0cmlidXRlcyc7XG5pbXBvcnQgeyBJY29uTm9kZSwgTHVjaWRlUHJvcHMgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IG1lcmdlQ2xhc3NlcywgaGFzQTExeVByb3AgfSBmcm9tICdAbHVjaWRlL3NoYXJlZCc7XG5pbXBvcnQgeyB1c2VMdWNpZGVDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcblxuaW50ZXJmYWNlIEljb25Db21wb25lbnRQcm9wcyBleHRlbmRzIEx1Y2lkZVByb3BzIHtcbiAgaWNvbk5vZGU6IEljb25Ob2RlO1xufVxuXG4vKipcbiAqIEx1Y2lkZSBpY29uIGNvbXBvbmVudFxuICpcbiAqIEBjb21wb25lbnQgSWNvblxuICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcHMuY29sb3IgLSBUaGUgY29sb3Igb2YgdGhlIGljb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBwcm9wcy5zaXplIC0gVGhlIHNpemUgb2YgdGhlIGljb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBwcm9wcy5zdHJva2VXaWR0aCAtIFRoZSBzdHJva2Ugd2lkdGggb2YgdGhlIGljb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcHJvcHMuYWJzb2x1dGVTdHJva2VXaWR0aCAtIFdoZXRoZXIgdG8gdXNlIGFic29sdXRlIHN0cm9rZSB3aWR0aFxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BzLmNsYXNzTmFtZSAtIFRoZSBjbGFzcyBuYW1lIG9mIHRoZSBpY29uXG4gKiBAcGFyYW0ge0ljb25Ob2RlfSBwcm9wcy5jaGlsZHJlbiAtIFRoZSBjaGlsZHJlbiBvZiB0aGUgaWNvblxuICogQHBhcmFtIHtJY29uTm9kZX0gcHJvcHMuaWNvbk5vZGUgLSBUaGUgaWNvbiBub2RlIG9mIHRoZSBpY29uXG4gKlxuICogQHJldHVybnMge0ZvcndhcmRSZWZFeG90aWNDb21wb25lbnR9IEx1Y2lkZUljb25cbiAqL1xuY29uc3QgSWNvbiA9IGZvcndhcmRSZWY8U1ZHU1ZHRWxlbWVudCwgSWNvbkNvbXBvbmVudFByb3BzPihcbiAgKFxuICAgIHsgY29sb3IsIHNpemUsIHN0cm9rZVdpZHRoLCBhYnNvbHV0ZVN0cm9rZVdpZHRoLCBjbGFzc05hbWUgPSAnJywgY2hpbGRyZW4sIGljb25Ob2RlLCAuLi5yZXN0IH0sXG4gICAgcmVmLFxuICApID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBzaXplOiBjb250ZXh0U2l6ZSA9IDI0LFxuICAgICAgc3Ryb2tlV2lkdGg6IGNvbnRleHRTdHJva2VXaWR0aCA9IDIsXG4gICAgICBhYnNvbHV0ZVN0cm9rZVdpZHRoOiBjb250ZXh0QWJzb2x1dGVTdHJva2VXaWR0aCA9IGZhbHNlLFxuICAgICAgY29sb3I6IGNvbnRleHRDb2xvciA9ICdjdXJyZW50Q29sb3InLFxuICAgICAgY2xhc3NOYW1lOiBjb250ZXh0Q2xhc3MgPSAnJyxcbiAgICB9ID0gdXNlTHVjaWRlQ29udGV4dCgpID8/IHt9O1xuXG4gICAgY29uc3QgY2FsY3VsYXRlZFN0cm9rZVdpZHRoID1cbiAgICAgIGFic29sdXRlU3Ryb2tlV2lkdGggPz8gY29udGV4dEFic29sdXRlU3Ryb2tlV2lkdGhcbiAgICAgICAgPyAoTnVtYmVyKHN0cm9rZVdpZHRoID8/IGNvbnRleHRTdHJva2VXaWR0aCkgKiAyNCkgLyBOdW1iZXIoc2l6ZSA/PyBjb250ZXh0U2l6ZSlcbiAgICAgICAgOiBzdHJva2VXaWR0aCA/PyBjb250ZXh0U3Ryb2tlV2lkdGg7XG5cbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChcbiAgICAgICdzdmcnLFxuICAgICAge1xuICAgICAgICByZWYsXG4gICAgICAgIC4uLmRlZmF1bHRBdHRyaWJ1dGVzLFxuICAgICAgICB3aWR0aDogc2l6ZSA/PyBjb250ZXh0U2l6ZSA/PyBkZWZhdWx0QXR0cmlidXRlcy53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBzaXplID8/IGNvbnRleHRTaXplID8/IGRlZmF1bHRBdHRyaWJ1dGVzLmhlaWdodCxcbiAgICAgICAgc3Ryb2tlOiBjb2xvciA/PyBjb250ZXh0Q29sb3IsXG4gICAgICAgIHN0cm9rZVdpZHRoOiBjYWxjdWxhdGVkU3Ryb2tlV2lkdGgsXG4gICAgICAgIGNsYXNzTmFtZTogbWVyZ2VDbGFzc2VzKCdsdWNpZGUnLCBjb250ZXh0Q2xhc3MsIGNsYXNzTmFtZSksXG4gICAgICAgIC4uLighY2hpbGRyZW4gJiYgIWhhc0ExMXlQcm9wKHJlc3QpICYmIHsgJ2FyaWEtaGlkZGVuJzogJ3RydWUnIH0pLFxuICAgICAgICAuLi5yZXN0LFxuICAgICAgfSxcbiAgICAgIFtcbiAgICAgICAgLi4uaWNvbk5vZGUubWFwKChbdGFnLCBhdHRyc10pID0+IGNyZWF0ZUVsZW1lbnQodGFnLCBhdHRycykpLFxuICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShjaGlsZHJlbikgPyBjaGlsZHJlbiA6IFtjaGlsZHJlbl0pLFxuICAgICAgXSxcbiAgICApO1xuICB9LFxuKTtcblxuZXhwb3J0IGRlZmF1bHQgSWNvbjtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/Icon.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/context.mjs":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/context.mjs ***!
|
||
\********************************************************/
|
||
/***/ ((__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 */ LucideProvider: () => (/* binding */ LucideProvider),\n/* harmony export */ useLucideContext: () => (/* binding */ useLucideContext)\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/* __next_internal_client_entry_do_not_use__ LucideProvider,useLucideContext auto */ var _s = $RefreshSig$(), _s1 = $RefreshSig$();\n\"use strict\";\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst LucideContext = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createContext)({});\nfunction LucideProvider(param) {\n let { children, size, color, strokeWidth, absoluteStrokeWidth, className } = param;\n _s();\n const value = (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)({\n \"LucideProvider.useMemo[value]\": ()=>({\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n })\n }[\"LucideProvider.useMemo[value]\"], [\n size,\n color,\n strokeWidth,\n absoluteStrokeWidth,\n className\n ]);\n return /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(LucideContext.Provider, {\n value\n }, children);\n}\n_s(LucideProvider, \"tPauEVZ6EeuERV9ttvKTwQ7++Gw=\");\n_c = LucideProvider;\nconst useLucideContext = ()=>{\n _s1();\n return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(LucideContext);\n};\n_s1(useLucideContext, \"gDsCjeeItUuvgOWf1v4qoK9RF6k=\");\n //# sourceMappingURL=context.mjs.map\nvar _c;\n$RefreshReg$(_c, \"LucideProvider\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vY29udGV4dC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFhQTtBQU1PLDZCQU9QO1FBUE8sRUFBd0IsVUFDN0IsTUFDQSxPQUNBLGFBQ0EscUJBQ0EsV0FFRixHQVBPOztJQVFMO3lDQUFjO2dCQUNMO2dCQUNMO2dCQUNBO2dCQUNBO2dCQUNBO1lBQ0E7d0NBQ0Y7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO0tBQUE7SUFJRjtRQUFBO0lBQUE7QUFDRjtHQXBCTztLQUFBO0FBc0JBOztJQUFBO0FBQUE7SUFBQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL3NyYy9jb250ZXh0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgY3JlYXRlQ29udGV4dCwgY3JlYXRlRWxlbWVudCwgdHlwZSBSZWFjdE5vZGUsIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBMdWNpZGVQcm9wcyB9IGZyb20gJy4vdHlwZXMnO1xuXG50eXBlIEx1Y2lkZUNvbmZpZyA9IHtcbiAgc2l6ZTogbnVtYmVyO1xuICBjb2xvcjogc3RyaW5nO1xuICBzdHJva2VXaWR0aDogbnVtYmVyO1xuICBhYnNvbHV0ZVN0cm9rZVdpZHRoOiBib29sZWFuO1xuICBjbGFzc05hbWU6IHN0cmluZztcbn07XG5cbmNvbnN0IEx1Y2lkZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0PEx1Y2lkZVByb3BzPih7fSk7XG5cbnR5cGUgTHVjaWRlUHJvdmlkZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbn0gJiBQYXJ0aWFsPEx1Y2lkZUNvbmZpZz47XG5cbmV4cG9ydCBmdW5jdGlvbiBMdWNpZGVQcm92aWRlcih7XG4gIGNoaWxkcmVuLFxuICBzaXplLFxuICBjb2xvcixcbiAgc3Ryb2tlV2lkdGgsXG4gIGFic29sdXRlU3Ryb2tlV2lkdGgsXG4gIGNsYXNzTmFtZSxcbn06IEx1Y2lkZVByb3ZpZGVyUHJvcHMpIHtcbiAgY29uc3QgdmFsdWUgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBzaXplLFxuICAgICAgY29sb3IsXG4gICAgICBzdHJva2VXaWR0aCxcbiAgICAgIGFic29sdXRlU3Ryb2tlV2lkdGgsXG4gICAgICBjbGFzc05hbWUsXG4gICAgfSksXG4gICAgW3NpemUsIGNvbG9yLCBzdHJva2VXaWR0aCwgYWJzb2x1dGVTdHJva2VXaWR0aCwgY2xhc3NOYW1lXSxcbiAgKTtcblxuICByZXR1cm4gY3JlYXRlRWxlbWVudChMdWNpZGVDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlIH0sIGNoaWxkcmVuKTtcbn1cblxuZXhwb3J0IGNvbnN0IHVzZUx1Y2lkZUNvbnRleHQgPSAoKSA9PiB1c2VDb250ZXh0KEx1Y2lkZUNvbnRleHQpO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/context.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs":
|
||
/*!*****************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/createLucideIcon.mjs ***!
|
||
\*****************************************************************/
|
||
/***/ ((__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 */ \"default\": () => (/* binding */ createLucideIcon)\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 _shared_src_utils_mergeClasses_mjs__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shared/src/utils/mergeClasses.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs\");\n/* harmony import */ var _shared_src_utils_toKebabCase_mjs__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shared/src/utils/toKebabCase.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs\");\n/* harmony import */ var _shared_src_utils_toPascalCase_mjs__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./shared/src/utils/toPascalCase.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs\");\n/* harmony import */ var _Icon_mjs__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./Icon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/Icon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \n\n\n\n\nconst createLucideIcon = (iconName, iconNode)=>{\n const Component = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)((param, ref)=>{\n let { className, ...props } = param;\n return /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_0__.createElement)(_Icon_mjs__WEBPACK_IMPORTED_MODULE_1__[\"default\"], {\n ref,\n iconNode,\n className: (0,_shared_src_utils_mergeClasses_mjs__WEBPACK_IMPORTED_MODULE_2__.mergeClasses)(\"lucide-\".concat((0,_shared_src_utils_toKebabCase_mjs__WEBPACK_IMPORTED_MODULE_3__.toKebabCase)((0,_shared_src_utils_toPascalCase_mjs__WEBPACK_IMPORTED_MODULE_4__.toPascalCase)(iconName))), \"lucide-\".concat(iconName), className),\n ...props\n });\n });\n Component.displayName = (0,_shared_src_utils_toPascalCase_mjs__WEBPACK_IMPORTED_MODULE_4__.toPascalCase)(iconName);\n return Component;\n};\n //# sourceMappingURL=createLucideIcon.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vY3JlYXRlTHVjaWRlSWNvbi5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVdBLE1BQU0sbUJBQW1CLENBQUMsVUFBa0I7SUFDMUMsTUFBTSwwQkFBWSxrREFBdUMsUUFBMEI7WUFBekIsRUFBRSxXQUFXLEdBQUcsT0FBTTs2QkFDOUUscURBQWMsbURBQU07WUFDbEI7WUFDQTtZQUNBLFdBQVcsaUZBQ1QsVUFBNkMsT0FBbkMsK0VBQVksaUZBQWEsUUFBUSxDQUFDLENBQUMsR0FDN0MsVUFBa0IsT0FBUixRQUFRLEdBQ2xCO1lBRUYsR0FBRztRQUFBLENBQ0o7O0lBR0gsVUFBVSxjQUFjLGlGQUFhLFFBQVE7SUFFN0MsT0FBTztBQUNUIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vc3JjL2NyZWF0ZUx1Y2lkZUljb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgZm9yd2FyZFJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IG1lcmdlQ2xhc3NlcywgdG9LZWJhYkNhc2UsIHRvUGFzY2FsQ2FzZSB9IGZyb20gJ0BsdWNpZGUvc2hhcmVkJztcbmltcG9ydCB7IEljb25Ob2RlLCBMdWNpZGVQcm9wcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uJztcblxuLyoqXG4gKiBDcmVhdGUgYSBMdWNpZGUgaWNvbiBjb21wb25lbnRcbiAqIEBwYXJhbSB7c3RyaW5nfSBpY29uTmFtZVxuICogQHBhcmFtIHthcnJheX0gaWNvbk5vZGVcbiAqIEByZXR1cm5zIHtGb3J3YXJkUmVmRXhvdGljQ29tcG9uZW50fSBMdWNpZGVJY29uXG4gKi9cbmNvbnN0IGNyZWF0ZUx1Y2lkZUljb24gPSAoaWNvbk5hbWU6IHN0cmluZywgaWNvbk5vZGU6IEljb25Ob2RlKSA9PiB7XG4gIGNvbnN0IENvbXBvbmVudCA9IGZvcndhcmRSZWY8U1ZHU1ZHRWxlbWVudCwgTHVjaWRlUHJvcHM+KCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfSwgcmVmKSA9PlxuICAgIGNyZWF0ZUVsZW1lbnQoSWNvbiwge1xuICAgICAgcmVmLFxuICAgICAgaWNvbk5vZGUsXG4gICAgICBjbGFzc05hbWU6IG1lcmdlQ2xhc3NlcyhcbiAgICAgICAgYGx1Y2lkZS0ke3RvS2ViYWJDYXNlKHRvUGFzY2FsQ2FzZShpY29uTmFtZSkpfWAsXG4gICAgICAgIGBsdWNpZGUtJHtpY29uTmFtZX1gLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICApLFxuICAgICAgLi4ucHJvcHMsXG4gICAgfSksXG4gICk7XG5cbiAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gdG9QYXNjYWxDYXNlKGljb25OYW1lKTtcblxuICByZXR1cm4gQ29tcG9uZW50O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY3JlYXRlTHVjaWRlSWNvbjtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/defaultAttributes.mjs":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/defaultAttributes.mjs ***!
|
||
\******************************************************************/
|
||
/***/ ((__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 */ \"default\": () => (/* binding */ defaultAttributes)\n/* harmony export */ });\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ var defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n //# sourceMappingURL=defaultAttributes.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vZGVmYXVsdEF0dHJpYnV0ZXMubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztJQUFBLHdCQUFlO0lBQ2IsT0FBTztJQUNQLE9BQU87SUFDUCxRQUFRO0lBQ1IsU0FBUztJQUNULE1BQU07SUFDTixRQUFRO0lBQ1IsYUFBYTtJQUNiLGVBQWU7SUFDZixnQkFBZ0I7QUFDbEIiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9zcmMvZGVmYXVsdEF0dHJpYnV0ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQge1xuICB4bWxuczogJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyxcbiAgd2lkdGg6IDI0LFxuICBoZWlnaHQ6IDI0LFxuICB2aWV3Qm94OiAnMCAwIDI0IDI0JyxcbiAgZmlsbDogJ25vbmUnLFxuICBzdHJva2U6ICdjdXJyZW50Q29sb3InLFxuICBzdHJva2VXaWR0aDogMixcbiAgc3Ryb2tlTGluZWNhcDogJ3JvdW5kJyxcbiAgc3Ryb2tlTGluZWpvaW46ICdyb3VuZCcsXG59O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/defaultAttributes.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/bell-ring.mjs":
|
||
/*!****************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/bell-ring.mjs ***!
|
||
\****************************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ BellRing)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.268 21a2 2 0 0 0 3.464 0\",\n key: \"vwvbt9\"\n }\n ],\n [\n \"path\",\n {\n d: \"M22 8c0-2.3-.8-4.3-2-6\",\n key: \"5bb3ad\"\n }\n ],\n [\n \"path\",\n {\n d: \"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\",\n key: \"11g9vi\"\n }\n ],\n [\n \"path\",\n {\n d: \"M4 2C2.8 3.7 2 5.7 2 8\",\n key: \"tap9e0\"\n }\n ]\n];\nconst BellRing = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"bell-ring\", __iconNode);\n //# sourceMappingURL=bell-ring.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvYmVsbC1yaW5nLm1qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFHTyxNQUFNLGFBQXVCO0lBQ2xDO1FBQUM7UUFBUTtZQUFFLEdBQUc7WUFBZ0MsS0FBSztRQUFBLENBQVU7S0FBQTtJQUM3RDtRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQTBCLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDdkQ7UUFDRTtRQUNBO1lBQ0UsR0FBRztZQUNILEtBQUs7UUFBQTtLQUVUO0lBQ0E7UUFBQztRQUFRO1lBQUUsR0FBRztZQUEwQixLQUFLO1FBQUEsQ0FBVTtLQUFBO0NBQ3pEO0FBYUEsTUFBTSxXQUFXLGtFQUFpQixhQUFhLFVBQVUiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9pY29ucy9iZWxsLXJpbmcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbic7XG5pbXBvcnQgeyBJY29uTm9kZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IF9faWNvbk5vZGU6IEljb25Ob2RlID0gW1xuICBbJ3BhdGgnLCB7IGQ6ICdNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwJywga2V5OiAndnd2YnQ5JyB9XSxcbiAgWydwYXRoJywgeyBkOiAnTTIyIDhjMC0yLjMtLjgtNC4zLTItNicsIGtleTogJzViYjNhZCcgfV0sXG4gIFtcbiAgICAncGF0aCcsXG4gICAge1xuICAgICAgZDogJ00zLjI2MiAxNS4zMjZBMSAxIDAgMCAwIDQgMTdoMTZhMSAxIDAgMCAwIC43NC0xLjY3M0MxOS40MSAxMy45NTYgMTggMTIuNDk5IDE4IDhBNiA2IDAgMCAwIDYgOGMwIDQuNDk5LTEuNDExIDUuOTU2LTIuNzM4IDcuMzI2JyxcbiAgICAgIGtleTogJzExZzl2aScsXG4gICAgfSxcbiAgXSxcbiAgWydwYXRoJywgeyBkOiAnTTQgMkMyLjggMy43IDIgNS43IDIgOCcsIGtleTogJ3RhcDllMCcgfV0sXG5dO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgQmVsbFJpbmdcbiAqIEBkZXNjcmlwdGlvbiBMdWNpZGUgU1ZHIGljb24gY29tcG9uZW50LCByZW5kZXJzIFNWRyBFbGVtZW50IHdpdGggY2hpbGRyZW4uXG4gKlxuICogQHByZXZpZXcgIVtpbWddKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklnb2dJSGRwWkhSb1BTSXlOQ0lLSUNCb1pXbG5hSFE5SWpJMElnb2dJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lLSUNCbWFXeHNQU0p1YjI1bElnb2dJSE4wY205clpUMGlJekF3TUNJZ2MzUjViR1U5SW1KaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObVptWTdJR0p2Y21SbGNpMXlZV1JwZFhNNklESndlQ0lLSUNCemRISnZhMlV0ZDJsa2RHZzlJaklpQ2lBZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJZ29nSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlDajRLSUNBOGNHRjBhQ0JrUFNKTk1UQXVNalk0SURJeFlUSWdNaUF3SURBZ01DQXpMalEyTkNBd0lpQXZQZ29nSUR4d1lYUm9JR1E5SWsweU1pQTRZekF0TWk0ekxTNDRMVFF1TXkweUxUWWlJQzgrQ2lBZ1BIQmhkR2dnWkQwaVRUTXVNall5SURFMUxqTXlOa0V4SURFZ01DQXdJREFnTkNBeE4yZ3hObUV4SURFZ01DQXdJREFnTGpjMExURXVOamN6UXpFNUxqUXhJREV6TGprMU5pQXhPQ0F4TWk0ME9Ua2dNVGdnT0VFMklEWWdNQ0F3SURBZ05pQTRZekFnTkM0ME9Ua3RNUzQwTVRFZ05TNDVOVFl0TWk0M016Z2dOeTR6TWpZaUlDOCtDaUFnUEhCaGRHZ2daRDBpVFRRZ01rTXlMamdnTXk0M0lESWdOUzQzSURJZ09DSWdMejRLUEM5emRtYytDZz09KSAtIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucy9iZWxsLXJpbmdcbiAqIEBzZWUgaHR0cHM6Ly9sdWNpZGUuZGV2L2d1aWRlL3BhY2thZ2VzL2x1Y2lkZS1yZWFjdCAtIERvY3VtZW50YXRpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBMdWNpZGUgaWNvbnMgcHJvcHMgYW5kIGFueSB2YWxpZCBTVkcgYXR0cmlidXRlXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9IEpTWCBFbGVtZW50XG4gKlxuICovXG5jb25zdCBCZWxsUmluZyA9IGNyZWF0ZUx1Y2lkZUljb24oJ2JlbGwtcmluZycsIF9faWNvbk5vZGUpO1xuXG5leHBvcnQgZGVmYXVsdCBCZWxsUmluZztcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/bell-ring.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/bell.mjs":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/bell.mjs ***!
|
||
\***********************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ Bell)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M10.268 21a2 2 0 0 0 3.464 0\",\n key: \"vwvbt9\"\n }\n ],\n [\n \"path\",\n {\n d: \"M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326\",\n key: \"11g9vi\"\n }\n ]\n];\nconst Bell = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"bell\", __iconNode);\n //# sourceMappingURL=bell.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvYmVsbC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR08sTUFBTSxhQUF1QjtJQUNsQztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQWdDLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDN0Q7UUFDRTtRQUNBO1lBQ0UsR0FBRztZQUNILEtBQUs7UUFBQTtLQUNQO0NBRUo7QUFhQSxNQUFNLE9BQU8sa0VBQWlCLFFBQVEsVUFBVSIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2ljb25zL2JlbGwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbic7XG5pbXBvcnQgeyBJY29uTm9kZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IF9faWNvbk5vZGU6IEljb25Ob2RlID0gW1xuICBbJ3BhdGgnLCB7IGQ6ICdNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwJywga2V5OiAndnd2YnQ5JyB9XSxcbiAgW1xuICAgICdwYXRoJyxcbiAgICB7XG4gICAgICBkOiAnTTMuMjYyIDE1LjMyNkExIDEgMCAwIDAgNCAxN2gxNmExIDEgMCAwIDAgLjc0LTEuNjczQzE5LjQxIDEzLjk1NiAxOCAxMi40OTkgMTggOEE2IDYgMCAwIDAgNiA4YzAgNC40OTktMS40MTEgNS45NTYtMi43MzggNy4zMjYnLFxuICAgICAga2V5OiAnMTFnOXZpJyxcbiAgICB9LFxuICBdLFxuXTtcblxuLyoqXG4gKiBAY29tcG9uZW50IEBuYW1lIEJlbGxcbiAqIEBkZXNjcmlwdGlvbiBMdWNpZGUgU1ZHIGljb24gY29tcG9uZW50LCByZW5kZXJzIFNWRyBFbGVtZW50IHdpdGggY2hpbGRyZW4uXG4gKlxuICogQHByZXZpZXcgIVtpbWddKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklnb2dJSGRwWkhSb1BTSXlOQ0lLSUNCb1pXbG5hSFE5SWpJMElnb2dJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lLSUNCbWFXeHNQU0p1YjI1bElnb2dJSE4wY205clpUMGlJekF3TUNJZ2MzUjViR1U5SW1KaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObVptWTdJR0p2Y21SbGNpMXlZV1JwZFhNNklESndlQ0lLSUNCemRISnZhMlV0ZDJsa2RHZzlJaklpQ2lBZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJZ29nSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlDajRLSUNBOGNHRjBhQ0JrUFNKTk1UQXVNalk0SURJeFlUSWdNaUF3SURBZ01DQXpMalEyTkNBd0lpQXZQZ29nSUR4d1lYUm9JR1E5SWswekxqSTJNaUF4TlM0ek1qWkJNU0F4SURBZ01DQXdJRFFnTVRkb01UWmhNU0F4SURBZ01DQXdJQzQzTkMweExqWTNNME14T1M0ME1TQXhNeTQ1TlRZZ01UZ2dNVEl1TkRrNUlERTRJRGhCTmlBMklEQWdNQ0F3SURZZ09HTXdJRFF1TkRrNUxURXVOREV4SURVdU9UVTJMVEl1TnpNNElEY3VNekkySWlBdlBnbzhMM04yWno0SykgLSBodHRwczovL2x1Y2lkZS5kZXYvaWNvbnMvYmVsbFxuICogQHNlZSBodHRwczovL2x1Y2lkZS5kZXYvZ3VpZGUvcGFja2FnZXMvbHVjaWRlLXJlYWN0IC0gRG9jdW1lbnRhdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIEx1Y2lkZSBpY29ucyBwcm9wcyBhbmQgYW55IHZhbGlkIFNWRyBhdHRyaWJ1dGVcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH0gSlNYIEVsZW1lbnRcbiAqXG4gKi9cbmNvbnN0IEJlbGwgPSBjcmVhdGVMdWNpZGVJY29uKCdiZWxsJywgX19pY29uTm9kZSk7XG5cbmV4cG9ydCBkZWZhdWx0IEJlbGw7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/bell.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calendar-days.mjs":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/calendar-days.mjs ***!
|
||
\********************************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ CalendarDays)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M8 2v4\",\n key: \"1cmpym\"\n }\n ],\n [\n \"path\",\n {\n d: \"M16 2v4\",\n key: \"4m81vk\"\n }\n ],\n [\n \"rect\",\n {\n width: \"18\",\n height: \"18\",\n x: \"3\",\n y: \"4\",\n rx: \"2\",\n key: \"1hopcy\"\n }\n ],\n [\n \"path\",\n {\n d: \"M3 10h18\",\n key: \"8toen8\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8 14h.01\",\n key: \"6423bh\"\n }\n ],\n [\n \"path\",\n {\n d: \"M12 14h.01\",\n key: \"1etili\"\n }\n ],\n [\n \"path\",\n {\n d: \"M16 14h.01\",\n key: \"1gbofw\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8 18h.01\",\n key: \"lrp35t\"\n }\n ],\n [\n \"path\",\n {\n d: \"M12 18h.01\",\n key: \"mhygvu\"\n }\n ],\n [\n \"path\",\n {\n d: \"M16 18h.01\",\n key: \"kzsmim\"\n }\n ]\n];\nconst CalendarDays = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"calendar-days\", __iconNode);\n //# sourceMappingURL=calendar-days.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItZGF5cy5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR08sTUFBTSxhQUF1QjtJQUNsQztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQVUsS0FBSztRQUFBLENBQVU7S0FBQTtJQUN2QztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQVcsS0FBSztRQUFBLENBQVU7S0FBQTtJQUN4QztRQUFDO1FBQVE7WUFBRSxPQUFPO1lBQU0sUUFBUTtZQUFNLEdBQUc7WUFBSyxHQUFHO1lBQUssSUFBSTtZQUFLLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDOUU7UUFBQztRQUFRO1lBQUUsR0FBRztZQUFZLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDekM7UUFBQztRQUFRO1lBQUUsR0FBRztZQUFhLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDMUM7UUFBQztRQUFRO1lBQUUsR0FBRztZQUFjLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDM0M7UUFBQztRQUFRO1lBQUUsR0FBRztZQUFjLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDM0M7UUFBQztRQUFRO1lBQUUsR0FBRztZQUFhLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDMUM7UUFBQztRQUFRO1lBQUUsR0FBRztZQUFjLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDM0M7UUFBQztRQUFRO1lBQUUsR0FBRztZQUFjLEtBQUs7UUFBQSxDQUFVO0tBQUE7Q0FDN0M7QUFhQSxNQUFNLGVBQWUsa0VBQWlCLGlCQUFpQixVQUFVIiwic291cmNlcyI6WyIvaG9tZS9zcmMvaWNvbnMvY2FsZW5kYXItZGF5cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uJztcbmltcG9ydCB7IEljb25Ob2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgX19pY29uTm9kZTogSWNvbk5vZGUgPSBbXG4gIFsncGF0aCcsIHsgZDogJ004IDJ2NCcsIGtleTogJzFjbXB5bScgfV0sXG4gIFsncGF0aCcsIHsgZDogJ00xNiAydjQnLCBrZXk6ICc0bTgxdmsnIH1dLFxuICBbJ3JlY3QnLCB7IHdpZHRoOiAnMTgnLCBoZWlnaHQ6ICcxOCcsIHg6ICczJywgeTogJzQnLCByeDogJzInLCBrZXk6ICcxaG9wY3knIH1dLFxuICBbJ3BhdGgnLCB7IGQ6ICdNMyAxMGgxOCcsIGtleTogJzh0b2VuOCcgfV0sXG4gIFsncGF0aCcsIHsgZDogJ004IDE0aC4wMScsIGtleTogJzY0MjNiaCcgfV0sXG4gIFsncGF0aCcsIHsgZDogJ00xMiAxNGguMDEnLCBrZXk6ICcxZXRpbGknIH1dLFxuICBbJ3BhdGgnLCB7IGQ6ICdNMTYgMTRoLjAxJywga2V5OiAnMWdib2Z3JyB9XSxcbiAgWydwYXRoJywgeyBkOiAnTTggMThoLjAxJywga2V5OiAnbHJwMzV0JyB9XSxcbiAgWydwYXRoJywgeyBkOiAnTTEyIDE4aC4wMScsIGtleTogJ21oeWd2dScgfV0sXG4gIFsncGF0aCcsIHsgZDogJ00xNiAxOGguMDEnLCBrZXk6ICdrenNtaW0nIH1dLFxuXTtcblxuLyoqXG4gKiBAY29tcG9uZW50IEBuYW1lIENhbGVuZGFyRGF5c1xuICogQGRlc2NyaXB0aW9uIEx1Y2lkZSBTVkcgaWNvbiBjb21wb25lbnQsIHJlbmRlcnMgU1ZHIEVsZW1lbnQgd2l0aCBjaGlsZHJlbi5cbiAqXG4gKiBAcHJldmlldyAhW2ltZ10oZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlBZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWdvZ0lIZHBaSFJvUFNJeU5DSUtJQ0JvWldsbmFIUTlJakkwSWdvZ0lIWnBaWGRDYjNnOUlqQWdNQ0F5TkNBeU5DSUtJQ0JtYVd4c1BTSnViMjVsSWdvZ0lITjBjbTlyWlQwaUl6QXdNQ0lnYzNSNWJHVTlJbUpoWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWm1ZN0lHSnZjbVJsY2kxeVlXUnBkWE02SURKd2VDSUtJQ0J6ZEhKdmEyVXRkMmxrZEdnOUlqSWlDaUFnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lnb2dJSE4wY205clpTMXNhVzVsYW05cGJqMGljbTkxYm1RaUNqNEtJQ0E4Y0dGMGFDQmtQU0pOT0NBeWRqUWlJQzgrQ2lBZ1BIQmhkR2dnWkQwaVRURTJJREoyTkNJZ0x6NEtJQ0E4Y21WamRDQjNhV1IwYUQwaU1UZ2lJR2hsYVdkb2REMGlNVGdpSUhnOUlqTWlJSGs5SWpRaUlISjRQU0l5SWlBdlBnb2dJRHh3WVhSb0lHUTlJazB6SURFd2FERTRJaUF2UGdvZ0lEeHdZWFJvSUdROUlrMDRJREUwYUM0d01TSWdMejRLSUNBOGNHRjBhQ0JrUFNKTk1USWdNVFJvTGpBeElpQXZQZ29nSUR4d1lYUm9JR1E5SWsweE5pQXhOR2d1TURFaUlDOCtDaUFnUEhCaGRHZ2daRDBpVFRnZ01UaG9MakF4SWlBdlBnb2dJRHh3WVhSb0lHUTlJazB4TWlBeE9HZ3VNREVpSUM4K0NpQWdQSEJoZEdnZ1pEMGlUVEUySURFNGFDNHdNU0lnTHo0S1BDOXpkbWMrQ2c9PSkgLSBodHRwczovL2x1Y2lkZS5kZXYvaWNvbnMvY2FsZW5kYXItZGF5c1xuICogQHNlZSBodHRwczovL2x1Y2lkZS5kZXYvZ3VpZGUvcGFja2FnZXMvbHVjaWRlLXJlYWN0IC0gRG9jdW1lbnRhdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIEx1Y2lkZSBpY29ucyBwcm9wcyBhbmQgYW55IHZhbGlkIFNWRyBhdHRyaWJ1dGVcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH0gSlNYIEVsZW1lbnRcbiAqXG4gKi9cbmNvbnN0IENhbGVuZGFyRGF5cyA9IGNyZWF0ZUx1Y2lkZUljb24oJ2NhbGVuZGFyLWRheXMnLCBfX2ljb25Ob2RlKTtcblxuZXhwb3J0IGRlZmF1bHQgQ2FsZW5kYXJEYXlzO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calendar-days.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/clipboard-list.mjs":
|
||
/*!*********************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/clipboard-list.mjs ***!
|
||
\*********************************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ ClipboardList)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"rect\",\n {\n width: \"8\",\n height: \"4\",\n x: \"8\",\n y: \"2\",\n rx: \"1\",\n ry: \"1\",\n key: \"tgr4d6\"\n }\n ],\n [\n \"path\",\n {\n d: \"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\",\n key: \"116196\"\n }\n ],\n [\n \"path\",\n {\n d: \"M12 11h4\",\n key: \"1jrz19\"\n }\n ],\n [\n \"path\",\n {\n d: \"M12 16h4\",\n key: \"n85exb\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8 11h.01\",\n key: \"1dfujw\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8 16h.01\",\n key: \"18s6g9\"\n }\n ]\n];\nconst ClipboardList = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"clipboard-list\", __iconNode);\n //# sourceMappingURL=clipboard-list.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLWxpc3QubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdPLE1BQU0sYUFBdUI7SUFDbEM7UUFBQztRQUFRO1lBQUUsT0FBTztZQUFLLFFBQVE7WUFBSyxHQUFHO1lBQUssR0FBRztZQUFLLElBQUk7WUFBSyxJQUFJO1lBQUssS0FBSztRQUFBLENBQVU7S0FBQTtJQUNyRjtRQUNFO1FBQ0E7WUFDRSxHQUFHO1lBQ0gsS0FBSztRQUFBO0tBRVQ7SUFDQTtRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQVksS0FBSztRQUFBLENBQVU7S0FBQTtJQUN6QztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQVksS0FBSztRQUFBLENBQVU7S0FBQTtJQUN6QztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQWEsS0FBSztRQUFBLENBQVU7S0FBQTtJQUMxQztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQWEsS0FBSztRQUFBLENBQVU7S0FBQTtDQUM1QztBQWFBLE1BQU0sZ0JBQWdCLGtFQUFpQixrQkFBa0IsVUFBVSIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL2ljb25zL2NsaXBib2FyZC1saXN0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24nO1xuaW1wb3J0IHsgSWNvbk5vZGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBfX2ljb25Ob2RlOiBJY29uTm9kZSA9IFtcbiAgWydyZWN0JywgeyB3aWR0aDogJzgnLCBoZWlnaHQ6ICc0JywgeDogJzgnLCB5OiAnMicsIHJ4OiAnMScsIHJ5OiAnMScsIGtleTogJ3RncjRkNicgfV0sXG4gIFtcbiAgICAncGF0aCcsXG4gICAge1xuICAgICAgZDogJ00xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMicsXG4gICAgICBrZXk6ICcxMTYxOTYnLFxuICAgIH0sXG4gIF0sXG4gIFsncGF0aCcsIHsgZDogJ00xMiAxMWg0Jywga2V5OiAnMWpyejE5JyB9XSxcbiAgWydwYXRoJywgeyBkOiAnTTEyIDE2aDQnLCBrZXk6ICduODVleGInIH1dLFxuICBbJ3BhdGgnLCB7IGQ6ICdNOCAxMWguMDEnLCBrZXk6ICcxZGZ1ancnIH1dLFxuICBbJ3BhdGgnLCB7IGQ6ICdNOCAxNmguMDEnLCBrZXk6ICcxOHM2ZzknIH1dLFxuXTtcblxuLyoqXG4gKiBAY29tcG9uZW50IEBuYW1lIENsaXBib2FyZExpc3RcbiAqIEBkZXNjcmlwdGlvbiBMdWNpZGUgU1ZHIGljb24gY29tcG9uZW50LCByZW5kZXJzIFNWRyBFbGVtZW50IHdpdGggY2hpbGRyZW4uXG4gKlxuICogQHByZXZpZXcgIVtpbWddKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklnb2dJSGRwWkhSb1BTSXlOQ0lLSUNCb1pXbG5hSFE5SWpJMElnb2dJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lLSUNCbWFXeHNQU0p1YjI1bElnb2dJSE4wY205clpUMGlJekF3TUNJZ2MzUjViR1U5SW1KaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObVptWTdJR0p2Y21SbGNpMXlZV1JwZFhNNklESndlQ0lLSUNCemRISnZhMlV0ZDJsa2RHZzlJaklpQ2lBZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJZ29nSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlDajRLSUNBOGNtVmpkQ0IzYVdSMGFEMGlPQ0lnYUdWcFoyaDBQU0kwSWlCNFBTSTRJaUI1UFNJeUlpQnllRDBpTVNJZ2NuazlJakVpSUM4K0NpQWdQSEJoZEdnZ1pEMGlUVEUySURSb01tRXlJRElnTUNBd0lERWdNaUF5ZGpFMFlUSWdNaUF3SURBZ01TMHlJREpJTm1FeUlESWdNQ0F3SURFdE1pMHlWalpoTWlBeUlEQWdNQ0F4SURJdE1tZ3lJaUF2UGdvZ0lEeHdZWFJvSUdROUlrMHhNaUF4TVdnMElpQXZQZ29nSUR4d1lYUm9JR1E5SWsweE1pQXhObWcwSWlBdlBnb2dJRHh3WVhSb0lHUTlJazA0SURFeGFDNHdNU0lnTHo0S0lDQThjR0YwYUNCa1BTSk5PQ0F4Tm1ndU1ERWlJQzgrQ2p3dmMzWm5QZ289KSAtIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucy9jbGlwYm9hcmQtbGlzdFxuICogQHNlZSBodHRwczovL2x1Y2lkZS5kZXYvZ3VpZGUvcGFja2FnZXMvbHVjaWRlLXJlYWN0IC0gRG9jdW1lbnRhdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIEx1Y2lkZSBpY29ucyBwcm9wcyBhbmQgYW55IHZhbGlkIFNWRyBhdHRyaWJ1dGVcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH0gSlNYIEVsZW1lbnRcbiAqXG4gKi9cbmNvbnN0IENsaXBib2FyZExpc3QgPSBjcmVhdGVMdWNpZGVJY29uKCdjbGlwYm9hcmQtbGlzdCcsIF9faWNvbk5vZGUpO1xuXG5leHBvcnQgZGVmYXVsdCBDbGlwYm9hcmRMaXN0O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/clipboard-list.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/loader-circle.mjs":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/loader-circle.mjs ***!
|
||
\********************************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ LoaderCircle)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M21 12a9 9 0 1 1-6.219-8.56\",\n key: \"13zald\"\n }\n ]\n];\nconst LoaderCircle = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"loader-circle\", __iconNode);\n //# sourceMappingURL=loader-circle.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvbG9hZGVyLWNpcmNsZS5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR08sTUFBTSxhQUF1QjtJQUFDO1FBQUM7UUFBUTtZQUFFLEdBQUc7WUFBK0IsS0FBSztRQUFBLENBQVU7S0FBQztDQUFBO0FBYWxHLE1BQU0sZUFBZSxrRUFBaUIsaUJBQWlCLFVBQVUiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9pY29ucy9sb2FkZXItY2lyY2xlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24nO1xuaW1wb3J0IHsgSWNvbk5vZGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBfX2ljb25Ob2RlOiBJY29uTm9kZSA9IFtbJ3BhdGgnLCB7IGQ6ICdNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYnLCBrZXk6ICcxM3phbGQnIH1dXTtcblxuLyoqXG4gKiBAY29tcG9uZW50IEBuYW1lIExvYWRlckNpcmNsZVxuICogQGRlc2NyaXB0aW9uIEx1Y2lkZSBTVkcgaWNvbiBjb21wb25lbnQsIHJlbmRlcnMgU1ZHIEVsZW1lbnQgd2l0aCBjaGlsZHJlbi5cbiAqXG4gKiBAcHJldmlldyAhW2ltZ10oZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlBZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWdvZ0lIZHBaSFJvUFNJeU5DSUtJQ0JvWldsbmFIUTlJakkwSWdvZ0lIWnBaWGRDYjNnOUlqQWdNQ0F5TkNBeU5DSUtJQ0JtYVd4c1BTSnViMjVsSWdvZ0lITjBjbTlyWlQwaUl6QXdNQ0lnYzNSNWJHVTlJbUpoWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWm1ZN0lHSnZjbVJsY2kxeVlXUnBkWE02SURKd2VDSUtJQ0J6ZEhKdmEyVXRkMmxrZEdnOUlqSWlDaUFnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lnb2dJSE4wY205clpTMXNhVzVsYW05cGJqMGljbTkxYm1RaUNqNEtJQ0E4Y0dGMGFDQmtQU0pOTWpFZ01USmhPU0E1SURBZ01TQXhMVFl1TWpFNUxUZ3VOVFlpSUM4K0Nqd3ZjM1puUGdvPSkgLSBodHRwczovL2x1Y2lkZS5kZXYvaWNvbnMvbG9hZGVyLWNpcmNsZVxuICogQHNlZSBodHRwczovL2x1Y2lkZS5kZXYvZ3VpZGUvcGFja2FnZXMvbHVjaWRlLXJlYWN0IC0gRG9jdW1lbnRhdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIEx1Y2lkZSBpY29ucyBwcm9wcyBhbmQgYW55IHZhbGlkIFNWRyBhdHRyaWJ1dGVcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH0gSlNYIEVsZW1lbnRcbiAqXG4gKi9cbmNvbnN0IExvYWRlckNpcmNsZSA9IGNyZWF0ZUx1Y2lkZUljb24oJ2xvYWRlci1jaXJjbGUnLCBfX2ljb25Ob2RlKTtcblxuZXhwb3J0IGRlZmF1bHQgTG9hZGVyQ2lyY2xlO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/loader-circle.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/log-out.mjs":
|
||
/*!**************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/log-out.mjs ***!
|
||
\**************************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ LogOut)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m16 17 5-5-5-5\",\n key: \"1bji2h\"\n }\n ],\n [\n \"path\",\n {\n d: \"M21 12H9\",\n key: \"dn1m92\"\n }\n ],\n [\n \"path\",\n {\n d: \"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\",\n key: \"1uf3rs\"\n }\n ]\n];\nconst LogOut = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"log-out\", __iconNode);\n //# sourceMappingURL=log-out.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvbG9nLW91dC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR08sTUFBTSxhQUF1QjtJQUNsQztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQWtCLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDL0M7UUFBQztRQUFRO1lBQUUsR0FBRztZQUFZLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDekM7UUFBQztRQUFRO1lBQUUsR0FBRztZQUEyQyxLQUFLO1FBQUEsQ0FBVTtLQUFBO0NBQzFFO0FBYUEsTUFBTSxTQUFTLGtFQUFpQixXQUFXLFVBQVUiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9pY29ucy9sb2ctb3V0LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24nO1xuaW1wb3J0IHsgSWNvbk5vZGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBfX2ljb25Ob2RlOiBJY29uTm9kZSA9IFtcbiAgWydwYXRoJywgeyBkOiAnbTE2IDE3IDUtNS01LTUnLCBrZXk6ICcxYmppMmgnIH1dLFxuICBbJ3BhdGgnLCB7IGQ6ICdNMjEgMTJIOScsIGtleTogJ2RuMW05MicgfV0sXG4gIFsncGF0aCcsIHsgZDogJ005IDIxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNCcsIGtleTogJzF1ZjNycycgfV0sXG5dO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgTG9nT3V0XG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThjR0YwYUNCa1BTSnRNVFlnTVRjZ05TMDFMVFV0TlNJZ0x6NEtJQ0E4Y0dGMGFDQmtQU0pOTWpFZ01USklPU0lnTHo0S0lDQThjR0YwYUNCa1BTSk5PU0F5TVVnMVlUSWdNaUF3SURBZ01TMHlMVEpXTldFeUlESWdNQ0F3SURFZ01pMHlhRFFpSUM4K0Nqd3ZjM1puUGdvPSkgLSBodHRwczovL2x1Y2lkZS5kZXYvaWNvbnMvbG9nLW91dFxuICogQHNlZSBodHRwczovL2x1Y2lkZS5kZXYvZ3VpZGUvcGFja2FnZXMvbHVjaWRlLXJlYWN0IC0gRG9jdW1lbnRhdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIEx1Y2lkZSBpY29ucyBwcm9wcyBhbmQgYW55IHZhbGlkIFNWRyBhdHRyaWJ1dGVcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH0gSlNYIEVsZW1lbnRcbiAqXG4gKi9cbmNvbnN0IExvZ091dCA9IGNyZWF0ZUx1Y2lkZUljb24oJ2xvZy1vdXQnLCBfX2ljb25Ob2RlKTtcblxuZXhwb3J0IGRlZmF1bHQgTG9nT3V0O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/log-out.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/mail.mjs":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/mail.mjs ***!
|
||
\***********************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ Mail)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7\",\n key: \"132q7q\"\n }\n ],\n [\n \"rect\",\n {\n x: \"2\",\n y: \"4\",\n width: \"20\",\n height: \"16\",\n rx: \"2\",\n key: \"izxlao\"\n }\n ]\n];\nconst Mail = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"mail\", __iconNode);\n //# sourceMappingURL=mail.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvbWFpbC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR08sTUFBTSxhQUF1QjtJQUNsQztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQTJDLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDeEU7UUFBQztRQUFRO1lBQUUsR0FBRztZQUFLLEdBQUc7WUFBSyxPQUFPO1lBQU0sUUFBUTtZQUFNLElBQUk7WUFBSyxLQUFLO1FBQUEsQ0FBVTtLQUFBO0NBQ2hGO0FBYUEsTUFBTSxPQUFPLGtFQUFpQixRQUFRLFVBQVUiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9pY29ucy9tYWlsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24nO1xuaW1wb3J0IHsgSWNvbk5vZGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBfX2ljb25Ob2RlOiBJY29uTm9kZSA9IFtcbiAgWydwYXRoJywgeyBkOiAnbTIyIDctOC45OTEgNS43MjdhMiAyIDAgMCAxLTIuMDA5IDBMMiA3Jywga2V5OiAnMTMycTdxJyB9XSxcbiAgWydyZWN0JywgeyB4OiAnMicsIHk6ICc0Jywgd2lkdGg6ICcyMCcsIGhlaWdodDogJzE2Jywgcng6ICcyJywga2V5OiAnaXp4bGFvJyB9XSxcbl07XG5cbi8qKlxuICogQGNvbXBvbmVudCBAbmFtZSBNYWlsXG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThjR0YwYUNCa1BTSnRNaklnTnkwNExqazVNU0ExTGpjeU4yRXlJRElnTUNBd0lERXRNaTR3TURrZ01Fd3lJRGNpSUM4K0NpQWdQSEpsWTNRZ2VEMGlNaUlnZVQwaU5DSWdkMmxrZEdnOUlqSXdJaUJvWldsbmFIUTlJakUySWlCeWVEMGlNaUlnTHo0S1BDOXpkbWMrQ2c9PSkgLSBodHRwczovL2x1Y2lkZS5kZXYvaWNvbnMvbWFpbFxuICogQHNlZSBodHRwczovL2x1Y2lkZS5kZXYvZ3VpZGUvcGFja2FnZXMvbHVjaWRlLXJlYWN0IC0gRG9jdW1lbnRhdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIEx1Y2lkZSBpY29ucyBwcm9wcyBhbmQgYW55IHZhbGlkIFNWRyBhdHRyaWJ1dGVcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH0gSlNYIEVsZW1lbnRcbiAqXG4gKi9cbmNvbnN0IE1haWwgPSBjcmVhdGVMdWNpZGVJY29uKCdtYWlsJywgX19pY29uTm9kZSk7XG5cbmV4cG9ydCBkZWZhdWx0IE1haWw7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/mail.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/menu.mjs":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/menu.mjs ***!
|
||
\***********************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ Menu)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M4 5h16\",\n key: \"1tepv9\"\n }\n ],\n [\n \"path\",\n {\n d: \"M4 12h16\",\n key: \"1lakjw\"\n }\n ],\n [\n \"path\",\n {\n d: \"M4 19h16\",\n key: \"1djgab\"\n }\n ]\n];\nconst Menu = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"menu\", __iconNode);\n //# sourceMappingURL=menu.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvbWVudS5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR08sTUFBTSxhQUF1QjtJQUNsQztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQVcsS0FBSztRQUFBLENBQVU7S0FBQTtJQUN4QztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQVksS0FBSztRQUFBLENBQVU7S0FBQTtJQUN6QztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQVksS0FBSztRQUFBLENBQVU7S0FBQTtDQUMzQztBQWFBLE1BQU0sT0FBTyxrRUFBaUIsUUFBUSxVQUFVIiwic291cmNlcyI6WyIvaG9tZS9zcmMvaWNvbnMvbWVudS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uJztcbmltcG9ydCB7IEljb25Ob2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgX19pY29uTm9kZTogSWNvbk5vZGUgPSBbXG4gIFsncGF0aCcsIHsgZDogJ000IDVoMTYnLCBrZXk6ICcxdGVwdjknIH1dLFxuICBbJ3BhdGgnLCB7IGQ6ICdNNCAxMmgxNicsIGtleTogJzFsYWtqdycgfV0sXG4gIFsncGF0aCcsIHsgZDogJ000IDE5aDE2Jywga2V5OiAnMWRqZ2FiJyB9XSxcbl07XG5cbi8qKlxuICogQGNvbXBvbmVudCBAbmFtZSBNZW51XG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThjR0YwYUNCa1BTSk5OQ0ExYURFMklpQXZQZ29nSUR4d1lYUm9JR1E5SWswMElERXlhREUySWlBdlBnb2dJRHh3WVhSb0lHUTlJazAwSURFNWFERTJJaUF2UGdvOEwzTjJaejRLKSAtIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucy9tZW51XG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgTWVudSA9IGNyZWF0ZUx1Y2lkZUljb24oJ21lbnUnLCBfX2ljb25Ob2RlKTtcblxuZXhwb3J0IGRlZmF1bHQgTWVudTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/menu.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/moon.mjs":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/moon.mjs ***!
|
||
\***********************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ Moon)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401\",\n key: \"kfwtm\"\n }\n ]\n];\nconst Moon = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"moon\", __iconNode);\n //# sourceMappingURL=moon.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvbW9vbi5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR08sTUFBTSxhQUF1QjtJQUNsQztRQUNFO1FBQ0E7WUFDRSxHQUFHO1lBQ0gsS0FBSztRQUFBO0tBQ1A7Q0FFSjtBQWFBLE1BQU0sT0FBTyxrRUFBaUIsUUFBUSxVQUFVIiwic291cmNlcyI6WyIvaG9tZS9zcmMvaWNvbnMvbW9vbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uJztcbmltcG9ydCB7IEljb25Ob2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgX19pY29uTm9kZTogSWNvbk5vZGUgPSBbXG4gIFtcbiAgICAncGF0aCcsXG4gICAge1xuICAgICAgZDogJ00yMC45ODUgMTIuNDg2YTkgOSAwIDEgMS05LjQ3My05LjQ3MmMuNDA1LS4wMjIuNjE3LjQ2LjQwMi44MDNhNiA2IDAgMCAwIDguMjY4IDguMjY4Yy4zNDQtLjIxNS44MjUtLjAwNC44MDMuNDAxJyxcbiAgICAgIGtleTogJ2tmd3RtJyxcbiAgICB9LFxuICBdLFxuXTtcblxuLyoqXG4gKiBAY29tcG9uZW50IEBuYW1lIE1vb25cbiAqIEBkZXNjcmlwdGlvbiBMdWNpZGUgU1ZHIGljb24gY29tcG9uZW50LCByZW5kZXJzIFNWRyBFbGVtZW50IHdpdGggY2hpbGRyZW4uXG4gKlxuICogQHByZXZpZXcgIVtpbWddKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklnb2dJSGRwWkhSb1BTSXlOQ0lLSUNCb1pXbG5hSFE5SWpJMElnb2dJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lLSUNCbWFXeHNQU0p1YjI1bElnb2dJSE4wY205clpUMGlJekF3TUNJZ2MzUjViR1U5SW1KaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObVptWTdJR0p2Y21SbGNpMXlZV1JwZFhNNklESndlQ0lLSUNCemRISnZhMlV0ZDJsa2RHZzlJaklpQ2lBZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJZ29nSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlDajRLSUNBOGNHRjBhQ0JrUFNKTk1qQXVPVGcxSURFeUxqUTRObUU1SURrZ01DQXhJREV0T1M0ME56TXRPUzQwTnpKakxqUXdOUzB1TURJeUxqWXhOeTQwTmk0ME1ESXVPREF6WVRZZ05pQXdJREFnTUNBNExqSTJPQ0E0TGpJMk9HTXVNelEwTFM0eU1UVXVPREkxTFM0d01EUXVPREF6TGpRd01TSWdMejRLUEM5emRtYytDZz09KSAtIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucy9tb29uXG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgTW9vbiA9IGNyZWF0ZUx1Y2lkZUljb24oJ21vb24nLCBfX2ljb25Ob2RlKTtcblxuZXhwb3J0IGRlZmF1bHQgTW9vbjtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/moon.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/save.mjs":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/save.mjs ***!
|
||
\***********************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ Save)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z\",\n key: \"1c8476\"\n }\n ],\n [\n \"path\",\n {\n d: \"M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7\",\n key: \"1ydtos\"\n }\n ],\n [\n \"path\",\n {\n d: \"M7 3v4a1 1 0 0 0 1 1h7\",\n key: \"t51u73\"\n }\n ]\n];\nconst Save = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"save\", __iconNode);\n //# sourceMappingURL=save.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvc2F2ZS5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR08sTUFBTSxhQUF1QjtJQUNsQztRQUNFO1FBQ0E7WUFDRSxHQUFHO1lBQ0gsS0FBSztRQUFBO0tBRVQ7SUFDQTtRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQTZDLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDMUU7UUFBQztRQUFRO1lBQUUsR0FBRztZQUEwQixLQUFLO1FBQUEsQ0FBVTtLQUFBO0NBQ3pEO0FBYUEsTUFBTSxPQUFPLGtFQUFpQixRQUFRLFVBQVUiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9pY29ucy9zYXZlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjcmVhdGVMdWNpZGVJY29uIGZyb20gJy4uL2NyZWF0ZUx1Y2lkZUljb24nO1xuaW1wb3J0IHsgSWNvbk5vZGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBfX2ljb25Ob2RlOiBJY29uTm9kZSA9IFtcbiAgW1xuICAgICdwYXRoJyxcbiAgICB7XG4gICAgICBkOiAnTTE1LjIgM2EyIDIgMCAwIDEgMS40LjZsMy44IDMuOGEyIDIgMCAwIDEgLjYgMS40VjE5YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMnonLFxuICAgICAga2V5OiAnMWM4NDc2JyxcbiAgICB9LFxuICBdLFxuICBbJ3BhdGgnLCB7IGQ6ICdNMTcgMjF2LTdhMSAxIDAgMCAwLTEtMUg4YTEgMSAwIDAgMC0xIDF2NycsIGtleTogJzF5ZHRvcycgfV0sXG4gIFsncGF0aCcsIHsgZDogJ003IDN2NGExIDEgMCAwIDAgMSAxaDcnLCBrZXk6ICd0NTF1NzMnIH1dLFxuXTtcblxuLyoqXG4gKiBAY29tcG9uZW50IEBuYW1lIFNhdmVcbiAqIEBkZXNjcmlwdGlvbiBMdWNpZGUgU1ZHIGljb24gY29tcG9uZW50LCByZW5kZXJzIFNWRyBFbGVtZW50IHdpdGggY2hpbGRyZW4uXG4gKlxuICogQHByZXZpZXcgIVtpbWddKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklnb2dJSGRwWkhSb1BTSXlOQ0lLSUNCb1pXbG5hSFE5SWpJMElnb2dJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lLSUNCbWFXeHNQU0p1YjI1bElnb2dJSE4wY205clpUMGlJekF3TUNJZ2MzUjViR1U5SW1KaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObVptWTdJR0p2Y21SbGNpMXlZV1JwZFhNNklESndlQ0lLSUNCemRISnZhMlV0ZDJsa2RHZzlJaklpQ2lBZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJZ29nSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlDajRLSUNBOGNHRjBhQ0JrUFNKTk1UVXVNaUF6WVRJZ01pQXdJREFnTVNBeExqUXVObXd6TGpnZ015NDRZVElnTWlBd0lEQWdNU0F1TmlBeExqUldNVGxoTWlBeUlEQWdNQ0F4TFRJZ01rZzFZVElnTWlBd0lEQWdNUzB5TFRKV05XRXlJRElnTUNBd0lERWdNaTB5ZWlJZ0x6NEtJQ0E4Y0dGMGFDQmtQU0pOTVRjZ01qRjJMVGRoTVNBeElEQWdNQ0F3TFRFdE1VZzRZVEVnTVNBd0lEQWdNQzB4SURGMk55SWdMejRLSUNBOGNHRjBhQ0JrUFNKTk55QXpkalJoTVNBeElEQWdNQ0F3SURFZ01XZzNJaUF2UGdvOEwzTjJaejRLKSAtIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucy9zYXZlXG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgU2F2ZSA9IGNyZWF0ZUx1Y2lkZUljb24oJ3NhdmUnLCBfX2ljb25Ob2RlKTtcblxuZXhwb3J0IGRlZmF1bHQgU2F2ZTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/save.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/settings.mjs":
|
||
/*!***************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/settings.mjs ***!
|
||
\***************************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ Settings)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915\",\n key: \"1i5ecw\"\n }\n ],\n [\n \"circle\",\n {\n cx: \"12\",\n cy: \"12\",\n r: \"3\",\n key: \"1v7zrd\"\n }\n ]\n];\nconst Settings = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"settings\", __iconNode);\n //# sourceMappingURL=settings.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvc2V0dGluZ3MubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdPLE1BQU0sYUFBdUI7SUFDbEM7UUFDRTtRQUNBO1lBQ0UsR0FBRztZQUNILEtBQUs7UUFBQTtLQUVUO0lBQ0E7UUFBQztRQUFVO1lBQUUsSUFBSTtZQUFNLElBQUk7WUFBTSxHQUFHO1lBQUssS0FBSztRQUFBLENBQVU7S0FBQTtDQUMxRDtBQWFBLE1BQU0sV0FBVyxrRUFBaUIsWUFBWSxVQUFVIiwic291cmNlcyI6WyIvaG9tZS9zcmMvaWNvbnMvc2V0dGluZ3MudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbic7XG5pbXBvcnQgeyBJY29uTm9kZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IF9faWNvbk5vZGU6IEljb25Ob2RlID0gW1xuICBbXG4gICAgJ3BhdGgnLFxuICAgIHtcbiAgICAgIGQ6ICdNOS42NzEgNC4xMzZhMi4zNCAyLjM0IDAgMCAxIDQuNjU5IDAgMi4zNCAyLjM0IDAgMCAwIDMuMzE5IDEuOTE1IDIuMzQgMi4zNCAwIDAgMSAyLjMzIDQuMDMzIDIuMzQgMi4zNCAwIDAgMCAwIDMuODMxIDIuMzQgMi4zNCAwIDAgMS0yLjMzIDQuMDMzIDIuMzQgMi4zNCAwIDAgMC0zLjMxOSAxLjkxNSAyLjM0IDIuMzQgMCAwIDEtNC42NTkgMCAyLjM0IDIuMzQgMCAwIDAtMy4zMi0xLjkxNSAyLjM0IDIuMzQgMCAwIDEtMi4zMy00LjAzMyAyLjM0IDIuMzQgMCAwIDAgMC0zLjgzMUEyLjM0IDIuMzQgMCAwIDEgNi4zNSA2LjA1MWEyLjM0IDIuMzQgMCAwIDAgMy4zMTktMS45MTUnLFxuICAgICAga2V5OiAnMWk1ZWN3JyxcbiAgICB9LFxuICBdLFxuICBbJ2NpcmNsZScsIHsgY3g6ICcxMicsIGN5OiAnMTInLCByOiAnMycsIGtleTogJzF2N3pyZCcgfV0sXG5dO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgU2V0dGluZ3NcbiAqIEBkZXNjcmlwdGlvbiBMdWNpZGUgU1ZHIGljb24gY29tcG9uZW50LCByZW5kZXJzIFNWRyBFbGVtZW50IHdpdGggY2hpbGRyZW4uXG4gKlxuICogQHByZXZpZXcgIVtpbWddKGRhdGE6aW1hZ2Uvc3ZnK3htbDtiYXNlNjQsUEhOMlp5QWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklnb2dJSGRwWkhSb1BTSXlOQ0lLSUNCb1pXbG5hSFE5SWpJMElnb2dJSFpwWlhkQ2IzZzlJakFnTUNBeU5DQXlOQ0lLSUNCbWFXeHNQU0p1YjI1bElnb2dJSE4wY205clpUMGlJekF3TUNJZ2MzUjViR1U5SW1KaFkydG5jbTkxYm1RdFkyOXNiM0k2SUNObVptWTdJR0p2Y21SbGNpMXlZV1JwZFhNNklESndlQ0lLSUNCemRISnZhMlV0ZDJsa2RHZzlJaklpQ2lBZ2MzUnliMnRsTFd4cGJtVmpZWEE5SW5KdmRXNWtJZ29nSUhOMGNtOXJaUzFzYVc1bGFtOXBiajBpY205MWJtUWlDajRLSUNBOGNHRjBhQ0JrUFNKTk9TNDJOekVnTkM0eE16WmhNaTR6TkNBeUxqTTBJREFnTUNBeElEUXVOalU1SURBZ01pNHpOQ0F5TGpNMElEQWdNQ0F3SURNdU16RTVJREV1T1RFMUlESXVNelFnTWk0ek5DQXdJREFnTVNBeUxqTXpJRFF1TURNeklESXVNelFnTWk0ek5DQXdJREFnTUNBd0lETXVPRE14SURJdU16UWdNaTR6TkNBd0lEQWdNUzB5TGpNeklEUXVNRE16SURJdU16UWdNaTR6TkNBd0lEQWdNQzB6TGpNeE9TQXhMamt4TlNBeUxqTTBJREl1TXpRZ01DQXdJREV0TkM0Mk5Ua2dNQ0F5TGpNMElESXVNelFnTUNBd0lEQXRNeTR6TWkweExqa3hOU0F5TGpNMElESXVNelFnTUNBd0lERXRNaTR6TXkwMExqQXpNeUF5TGpNMElESXVNelFnTUNBd0lEQWdNQzB6TGpnek1VRXlMak0wSURJdU16UWdNQ0F3SURFZ05pNHpOU0EyTGpBMU1XRXlMak0wSURJdU16UWdNQ0F3SURBZ015NHpNVGt0TVM0NU1UVWlJQzgrQ2lBZ1BHTnBjbU5zWlNCamVEMGlNVElpSUdONVBTSXhNaUlnY2owaU15SWdMejRLUEM5emRtYytDZz09KSAtIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucy9zZXR0aW5nc1xuICogQHNlZSBodHRwczovL2x1Y2lkZS5kZXYvZ3VpZGUvcGFja2FnZXMvbHVjaWRlLXJlYWN0IC0gRG9jdW1lbnRhdGlvblxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wcyAtIEx1Y2lkZSBpY29ucyBwcm9wcyBhbmQgYW55IHZhbGlkIFNWRyBhdHRyaWJ1dGVcbiAqIEByZXR1cm5zIHtKU1guRWxlbWVudH0gSlNYIEVsZW1lbnRcbiAqXG4gKi9cbmNvbnN0IFNldHRpbmdzID0gY3JlYXRlTHVjaWRlSWNvbignc2V0dGluZ3MnLCBfX2ljb25Ob2RlKTtcblxuZXhwb3J0IGRlZmF1bHQgU2V0dGluZ3M7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/settings.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/shield.mjs":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/shield.mjs ***!
|
||
\*************************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ Shield)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z\",\n key: \"oel41y\"\n }\n ]\n];\nconst Shield = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"shield\", __iconNode);\n //# sourceMappingURL=shield.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvc2hpZWxkLm1qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFHTyxNQUFNLGFBQXVCO0lBQ2xDO1FBQ0U7UUFDQTtZQUNFLEdBQUc7WUFDSCxLQUFLO1FBQUE7S0FDUDtDQUVKO0FBYUEsTUFBTSxTQUFTLGtFQUFpQixVQUFVLFVBQVUiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9pY29ucy9zaGllbGQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbic7XG5pbXBvcnQgeyBJY29uTm9kZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IF9faWNvbk5vZGU6IEljb25Ob2RlID0gW1xuICBbXG4gICAgJ3BhdGgnLFxuICAgIHtcbiAgICAgIGQ6ICdNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXonLFxuICAgICAga2V5OiAnb2VsNDF5JyxcbiAgICB9LFxuICBdLFxuXTtcblxuLyoqXG4gKiBAY29tcG9uZW50IEBuYW1lIFNoaWVsZFxuICogQGRlc2NyaXB0aW9uIEx1Y2lkZSBTVkcgaWNvbiBjb21wb25lbnQsIHJlbmRlcnMgU1ZHIEVsZW1lbnQgd2l0aCBjaGlsZHJlbi5cbiAqXG4gKiBAcHJldmlldyAhW2ltZ10oZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlBZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWdvZ0lIZHBaSFJvUFNJeU5DSUtJQ0JvWldsbmFIUTlJakkwSWdvZ0lIWnBaWGRDYjNnOUlqQWdNQ0F5TkNBeU5DSUtJQ0JtYVd4c1BTSnViMjVsSWdvZ0lITjBjbTlyWlQwaUl6QXdNQ0lnYzNSNWJHVTlJbUpoWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWm1ZN0lHSnZjbVJsY2kxeVlXUnBkWE02SURKd2VDSUtJQ0J6ZEhKdmEyVXRkMmxrZEdnOUlqSWlDaUFnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lnb2dJSE4wY205clpTMXNhVzVsYW05cGJqMGljbTkxYm1RaUNqNEtJQ0E4Y0dGMGFDQmtQU0pOTWpBZ01UTmpNQ0ExTFRNdU5TQTNMalV0Tnk0Mk5pQTRMamsxWVRFZ01TQXdJREFnTVMwdU5qY3RMakF4UXpjdU5TQXlNQzQxSURRZ01UZ2dOQ0F4TTFZMllURWdNU0F3SURBZ01TQXhMVEZqTWlBd0lEUXVOUzB4TGpJZ05pNHlOQzB5TGpjeVlURXVNVGNnTVM0eE55QXdJREFnTVNBeExqVXlJREJETVRRdU5URWdNeTQ0TVNBeE55QTFJREU1SURWaE1TQXhJREFnTUNBeElERWdNWG9pSUM4K0Nqd3ZjM1puUGdvPSkgLSBodHRwczovL2x1Y2lkZS5kZXYvaWNvbnMvc2hpZWxkXG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgU2hpZWxkID0gY3JlYXRlTHVjaWRlSWNvbignc2hpZWxkJywgX19pY29uTm9kZSk7XG5cbmV4cG9ydCBkZWZhdWx0IFNoaWVsZDtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/shield.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/stethoscope.mjs":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/stethoscope.mjs ***!
|
||
\******************************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ Stethoscope)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M11 2v2\",\n key: \"1539x4\"\n }\n ],\n [\n \"path\",\n {\n d: \"M5 2v2\",\n key: \"1yf1q8\"\n }\n ],\n [\n \"path\",\n {\n d: \"M5 3H4a2 2 0 0 0-2 2v4a6 6 0 0 0 12 0V5a2 2 0 0 0-2-2h-1\",\n key: \"rb5t3r\"\n }\n ],\n [\n \"path\",\n {\n d: \"M8 15a6 6 0 0 0 12 0v-3\",\n key: \"x18d4x\"\n }\n ],\n [\n \"circle\",\n {\n cx: \"20\",\n cy: \"10\",\n r: \"2\",\n key: \"ts1r5v\"\n }\n ]\n];\nconst Stethoscope = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"stethoscope\", __iconNode);\n //# sourceMappingURL=stethoscope.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvc3RldGhvc2NvcGUubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdPLE1BQU0sYUFBdUI7SUFDbEM7UUFBQztRQUFRO1lBQUUsR0FBRztZQUFXLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDeEM7UUFBQztRQUFRO1lBQUUsR0FBRztZQUFVLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDdkM7UUFBQztRQUFRO1lBQUUsR0FBRztZQUE0RCxLQUFLO1FBQUEsQ0FBVTtLQUFBO0lBQ3pGO1FBQUM7UUFBUTtZQUFFLEdBQUc7WUFBMkIsS0FBSztRQUFBLENBQVU7S0FBQTtJQUN4RDtRQUFDO1FBQVU7WUFBRSxJQUFJO1lBQU0sSUFBSTtZQUFNLEdBQUc7WUFBSyxLQUFLO1FBQUEsQ0FBVTtLQUFBO0NBQzFEO0FBYUEsTUFBTSxjQUFjLGtFQUFpQixlQUFlLFVBQVUiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9pY29ucy9zdGV0aG9zY29wZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uJztcbmltcG9ydCB7IEljb25Ob2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgX19pY29uTm9kZTogSWNvbk5vZGUgPSBbXG4gIFsncGF0aCcsIHsgZDogJ00xMSAydjInLCBrZXk6ICcxNTM5eDQnIH1dLFxuICBbJ3BhdGgnLCB7IGQ6ICdNNSAydjInLCBrZXk6ICcxeWYxcTgnIH1dLFxuICBbJ3BhdGgnLCB7IGQ6ICdNNSAzSDRhMiAyIDAgMCAwLTIgMnY0YTYgNiAwIDAgMCAxMiAwVjVhMiAyIDAgMCAwLTItMmgtMScsIGtleTogJ3JiNXQzcicgfV0sXG4gIFsncGF0aCcsIHsgZDogJ004IDE1YTYgNiAwIDAgMCAxMiAwdi0zJywga2V5OiAneDE4ZDR4JyB9XSxcbiAgWydjaXJjbGUnLCB7IGN4OiAnMjAnLCBjeTogJzEwJywgcjogJzInLCBrZXk6ICd0czFyNXYnIH1dLFxuXTtcblxuLyoqXG4gKiBAY29tcG9uZW50IEBuYW1lIFN0ZXRob3Njb3BlXG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThjR0YwYUNCa1BTSk5NVEVnTW5ZeUlpQXZQZ29nSUR4d1lYUm9JR1E5SWswMUlESjJNaUlnTHo0S0lDQThjR0YwYUNCa1BTSk5OU0F6U0RSaE1pQXlJREFnTUNBd0xUSWdNblkwWVRZZ05pQXdJREFnTUNBeE1pQXdWalZoTWlBeUlEQWdNQ0F3TFRJdE1tZ3RNU0lnTHo0S0lDQThjR0YwYUNCa1BTSk5PQ0F4TldFMklEWWdNQ0F3SURBZ01USWdNSFl0TXlJZ0x6NEtJQ0E4WTJseVkyeGxJR040UFNJeU1DSWdZM2s5SWpFd0lpQnlQU0l5SWlBdlBnbzhMM04yWno0SykgLSBodHRwczovL2x1Y2lkZS5kZXYvaWNvbnMvc3RldGhvc2NvcGVcbiAqIEBzZWUgaHR0cHM6Ly9sdWNpZGUuZGV2L2d1aWRlL3BhY2thZ2VzL2x1Y2lkZS1yZWFjdCAtIERvY3VtZW50YXRpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBMdWNpZGUgaWNvbnMgcHJvcHMgYW5kIGFueSB2YWxpZCBTVkcgYXR0cmlidXRlXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9IEpTWCBFbGVtZW50XG4gKlxuICovXG5jb25zdCBTdGV0aG9zY29wZSA9IGNyZWF0ZUx1Y2lkZUljb24oJ3N0ZXRob3Njb3BlJywgX19pY29uTm9kZSk7XG5cbmV4cG9ydCBkZWZhdWx0IFN0ZXRob3Njb3BlO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/stethoscope.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/sun.mjs":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/sun.mjs ***!
|
||
\**********************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ Sun)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"circle\",\n {\n cx: \"12\",\n cy: \"12\",\n r: \"4\",\n key: \"4exip2\"\n }\n ],\n [\n \"path\",\n {\n d: \"M12 2v2\",\n key: \"tus03m\"\n }\n ],\n [\n \"path\",\n {\n d: \"M12 20v2\",\n key: \"1lh1kg\"\n }\n ],\n [\n \"path\",\n {\n d: \"m4.93 4.93 1.41 1.41\",\n key: \"149t6j\"\n }\n ],\n [\n \"path\",\n {\n d: \"m17.66 17.66 1.41 1.41\",\n key: \"ptbguv\"\n }\n ],\n [\n \"path\",\n {\n d: \"M2 12h2\",\n key: \"1t8f8n\"\n }\n ],\n [\n \"path\",\n {\n d: \"M20 12h2\",\n key: \"1q8mjw\"\n }\n ],\n [\n \"path\",\n {\n d: \"m6.34 17.66-1.41 1.41\",\n key: \"1m8zz5\"\n }\n ],\n [\n \"path\",\n {\n d: \"m19.07 4.93-1.41 1.41\",\n key: \"1shlcs\"\n }\n ]\n];\nconst Sun = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"sun\", __iconNode);\n //# sourceMappingURL=sun.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvc3VuLm1qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFHTyxNQUFNLGFBQXVCO0lBQ2xDO1FBQUM7UUFBVTtZQUFFLElBQUk7WUFBTSxJQUFJO1lBQU0sR0FBRztZQUFLLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDeEQ7UUFBQztRQUFRO1lBQUUsR0FBRztZQUFXLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDeEM7UUFBQztRQUFRO1lBQUUsR0FBRztZQUFZLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDekM7UUFBQztRQUFRO1lBQUUsR0FBRztZQUF3QixLQUFLO1FBQUEsQ0FBVTtLQUFBO0lBQ3JEO1FBQUM7UUFBUTtZQUFFLEdBQUc7WUFBMEIsS0FBSztRQUFBLENBQVU7S0FBQTtJQUN2RDtRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQVcsS0FBSztRQUFBLENBQVU7S0FBQTtJQUN4QztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQVksS0FBSztRQUFBLENBQVU7S0FBQTtJQUN6QztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQXlCLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDdEQ7UUFBQztRQUFRO1lBQUUsR0FBRztZQUF5QixLQUFLO1FBQUEsQ0FBVTtLQUFBO0NBQ3hEO0FBYUEsTUFBTSxNQUFNLGtFQUFpQixPQUFPLFVBQVUiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9pY29ucy9zdW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbic7XG5pbXBvcnQgeyBJY29uTm9kZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IF9faWNvbk5vZGU6IEljb25Ob2RlID0gW1xuICBbJ2NpcmNsZScsIHsgY3g6ICcxMicsIGN5OiAnMTInLCByOiAnNCcsIGtleTogJzRleGlwMicgfV0sXG4gIFsncGF0aCcsIHsgZDogJ00xMiAydjInLCBrZXk6ICd0dXMwM20nIH1dLFxuICBbJ3BhdGgnLCB7IGQ6ICdNMTIgMjB2MicsIGtleTogJzFsaDFrZycgfV0sXG4gIFsncGF0aCcsIHsgZDogJ200LjkzIDQuOTMgMS40MSAxLjQxJywga2V5OiAnMTQ5dDZqJyB9XSxcbiAgWydwYXRoJywgeyBkOiAnbTE3LjY2IDE3LjY2IDEuNDEgMS40MScsIGtleTogJ3B0Ymd1dicgfV0sXG4gIFsncGF0aCcsIHsgZDogJ00yIDEyaDInLCBrZXk6ICcxdDhmOG4nIH1dLFxuICBbJ3BhdGgnLCB7IGQ6ICdNMjAgMTJoMicsIGtleTogJzFxOG1qdycgfV0sXG4gIFsncGF0aCcsIHsgZDogJ202LjM0IDE3LjY2LTEuNDEgMS40MScsIGtleTogJzFtOHp6NScgfV0sXG4gIFsncGF0aCcsIHsgZDogJ20xOS4wNyA0LjkzLTEuNDEgMS40MScsIGtleTogJzFzaGxjcycgfV0sXG5dO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgU3VuXG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThZMmx5WTJ4bElHTjRQU0l4TWlJZ1kzazlJakV5SWlCeVBTSTBJaUF2UGdvZ0lEeHdZWFJvSUdROUlrMHhNaUF5ZGpJaUlDOCtDaUFnUEhCaGRHZ2daRDBpVFRFeUlESXdkaklpSUM4K0NpQWdQSEJoZEdnZ1pEMGliVFF1T1RNZ05DNDVNeUF4TGpReElERXVOREVpSUM4K0NpQWdQSEJoZEdnZ1pEMGliVEUzTGpZMklERTNMalkySURFdU5ERWdNUzQwTVNJZ0x6NEtJQ0E4Y0dGMGFDQmtQU0pOTWlBeE1tZ3lJaUF2UGdvZ0lEeHdZWFJvSUdROUlrMHlNQ0F4TW1neUlpQXZQZ29nSUR4d1lYUm9JR1E5SW0wMkxqTTBJREUzTGpZMkxURXVOREVnTVM0ME1TSWdMejRLSUNBOGNHRjBhQ0JrUFNKdE1Ua3VNRGNnTkM0NU15MHhMalF4SURFdU5ERWlJQzgrQ2p3dmMzWm5QZ289KSAtIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucy9zdW5cbiAqIEBzZWUgaHR0cHM6Ly9sdWNpZGUuZGV2L2d1aWRlL3BhY2thZ2VzL2x1Y2lkZS1yZWFjdCAtIERvY3VtZW50YXRpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBMdWNpZGUgaWNvbnMgcHJvcHMgYW5kIGFueSB2YWxpZCBTVkcgYXR0cmlidXRlXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9IEpTWCBFbGVtZW50XG4gKlxuICovXG5jb25zdCBTdW4gPSBjcmVhdGVMdWNpZGVJY29uKCdzdW4nLCBfX2ljb25Ob2RlKTtcblxuZXhwb3J0IGRlZmF1bHQgU3VuO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/sun.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/user.mjs":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/user.mjs ***!
|
||
\***********************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ User)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\",\n key: \"975kel\"\n }\n ],\n [\n \"circle\",\n {\n cx: \"12\",\n cy: \"7\",\n r: \"4\",\n key: \"17ys0d\"\n }\n ]\n];\nconst User = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"user\", __iconNode);\n //# sourceMappingURL=user.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvdXNlci5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR08sTUFBTSxhQUF1QjtJQUNsQztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQTZDLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDMUU7UUFBQztRQUFVO1lBQUUsSUFBSTtZQUFNLElBQUk7WUFBSyxHQUFHO1lBQUssS0FBSztRQUFBLENBQVU7S0FBQTtDQUN6RDtBQWFBLE1BQU0sT0FBTyxrRUFBaUIsUUFBUSxVQUFVIiwic291cmNlcyI6WyIvaG9tZS9zcmMvaWNvbnMvdXNlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uJztcbmltcG9ydCB7IEljb25Ob2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgX19pY29uTm9kZTogSWNvbk5vZGUgPSBbXG4gIFsncGF0aCcsIHsgZDogJ00xOSAyMXYtMmE0IDQgMCAwIDAtNC00SDlhNCA0IDAgMCAwLTQgNHYyJywga2V5OiAnOTc1a2VsJyB9XSxcbiAgWydjaXJjbGUnLCB7IGN4OiAnMTInLCBjeTogJzcnLCByOiAnNCcsIGtleTogJzE3eXMwZCcgfV0sXG5dO1xuXG4vKipcbiAqIEBjb21wb25lbnQgQG5hbWUgVXNlclxuICogQGRlc2NyaXB0aW9uIEx1Y2lkZSBTVkcgaWNvbiBjb21wb25lbnQsIHJlbmRlcnMgU1ZHIEVsZW1lbnQgd2l0aCBjaGlsZHJlbi5cbiAqXG4gKiBAcHJldmlldyAhW2ltZ10oZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlBZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWdvZ0lIZHBaSFJvUFNJeU5DSUtJQ0JvWldsbmFIUTlJakkwSWdvZ0lIWnBaWGRDYjNnOUlqQWdNQ0F5TkNBeU5DSUtJQ0JtYVd4c1BTSnViMjVsSWdvZ0lITjBjbTlyWlQwaUl6QXdNQ0lnYzNSNWJHVTlJbUpoWTJ0bmNtOTFibVF0WTI5c2IzSTZJQ05tWm1ZN0lHSnZjbVJsY2kxeVlXUnBkWE02SURKd2VDSUtJQ0J6ZEhKdmEyVXRkMmxrZEdnOUlqSWlDaUFnYzNSeWIydGxMV3hwYm1WallYQTlJbkp2ZFc1a0lnb2dJSE4wY205clpTMXNhVzVsYW05cGJqMGljbTkxYm1RaUNqNEtJQ0E4Y0dGMGFDQmtQU0pOTVRrZ01qRjJMVEpoTkNBMElEQWdNQ0F3TFRRdE5FZzVZVFFnTkNBd0lEQWdNQzAwSURSMk1pSWdMejRLSUNBOFkybHlZMnhsSUdONFBTSXhNaUlnWTNrOUlqY2lJSEk5SWpRaUlDOCtDand2YzNablBnbz0pIC0gaHR0cHM6Ly9sdWNpZGUuZGV2L2ljb25zL3VzZXJcbiAqIEBzZWUgaHR0cHM6Ly9sdWNpZGUuZGV2L2d1aWRlL3BhY2thZ2VzL2x1Y2lkZS1yZWFjdCAtIERvY3VtZW50YXRpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gcHJvcHMgLSBMdWNpZGUgaWNvbnMgcHJvcHMgYW5kIGFueSB2YWxpZCBTVkcgYXR0cmlidXRlXG4gKiBAcmV0dXJucyB7SlNYLkVsZW1lbnR9IEpTWCBFbGVtZW50XG4gKlxuICovXG5jb25zdCBVc2VyID0gY3JlYXRlTHVjaWRlSWNvbigndXNlcicsIF9faWNvbk5vZGUpO1xuXG5leHBvcnQgZGVmYXVsdCBVc2VyO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/user.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/users.mjs":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/users.mjs ***!
|
||
\************************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ Users)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\",\n key: \"1yyitq\"\n }\n ],\n [\n \"path\",\n {\n d: \"M16 3.128a4 4 0 0 1 0 7.744\",\n key: \"16gr8j\"\n }\n ],\n [\n \"path\",\n {\n d: \"M22 21v-2a4 4 0 0 0-3-3.87\",\n key: \"kshegd\"\n }\n ],\n [\n \"circle\",\n {\n cx: \"9\",\n cy: \"7\",\n r: \"4\",\n key: \"nufk8\"\n }\n ]\n];\nconst Users = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"users\", __iconNode);\n //# sourceMappingURL=users.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMvdXNlcnMubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdPLE1BQU0sYUFBdUI7SUFDbEM7UUFBQztRQUFRO1lBQUUsR0FBRztZQUE2QyxLQUFLO1FBQUEsQ0FBVTtLQUFBO0lBQzFFO1FBQUM7UUFBUTtZQUFFLEdBQUc7WUFBK0IsS0FBSztRQUFBLENBQVU7S0FBQTtJQUM1RDtRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQThCLEtBQUs7UUFBQSxDQUFVO0tBQUE7SUFDM0Q7UUFBQztRQUFVO1lBQUUsSUFBSTtZQUFLLElBQUk7WUFBSyxHQUFHO1lBQUssS0FBSztRQUFBLENBQVM7S0FBQTtDQUN2RDtBQWFBLE1BQU0sUUFBUSxrRUFBaUIsU0FBUyxVQUFVIiwic291cmNlcyI6WyIvaG9tZS9zcmMvaWNvbnMvdXNlcnMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGNyZWF0ZUx1Y2lkZUljb24gZnJvbSAnLi4vY3JlYXRlTHVjaWRlSWNvbic7XG5pbXBvcnQgeyBJY29uTm9kZSB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IF9faWNvbk5vZGU6IEljb25Ob2RlID0gW1xuICBbJ3BhdGgnLCB7IGQ6ICdNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg2YTQgNCAwIDAgMC00IDR2MicsIGtleTogJzF5eWl0cScgfV0sXG4gIFsncGF0aCcsIHsgZDogJ00xNiAzLjEyOGE0IDQgMCAwIDEgMCA3Ljc0NCcsIGtleTogJzE2Z3I4aicgfV0sXG4gIFsncGF0aCcsIHsgZDogJ00yMiAyMXYtMmE0IDQgMCAwIDAtMy0zLjg3Jywga2V5OiAna3NoZWdkJyB9XSxcbiAgWydjaXJjbGUnLCB7IGN4OiAnOScsIGN5OiAnNycsIHI6ICc0Jywga2V5OiAnbnVmazgnIH1dLFxuXTtcblxuLyoqXG4gKiBAY29tcG9uZW50IEBuYW1lIFVzZXJzXG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThjR0YwYUNCa1BTSk5NVFlnTWpGMkxUSmhOQ0EwSURBZ01DQXdMVFF0TkVnMllUUWdOQ0F3SURBZ01DMDBJRFIyTWlJZ0x6NEtJQ0E4Y0dGMGFDQmtQU0pOTVRZZ015NHhNamhoTkNBMElEQWdNQ0F4SURBZ055NDNORFFpSUM4K0NpQWdQSEJoZEdnZ1pEMGlUVEl5SURJeGRpMHlZVFFnTkNBd0lEQWdNQzB6TFRNdU9EY2lJQzgrQ2lBZ1BHTnBjbU5zWlNCamVEMGlPU0lnWTNrOUlqY2lJSEk5SWpRaUlDOCtDand2YzNablBnbz0pIC0gaHR0cHM6Ly9sdWNpZGUuZGV2L2ljb25zL3VzZXJzXG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgVXNlcnMgPSBjcmVhdGVMdWNpZGVJY29uKCd1c2VycycsIF9faWNvbk5vZGUpO1xuXG5leHBvcnQgZGVmYXVsdCBVc2VycztcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/users.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/x.mjs":
|
||
/*!********************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/icons/x.mjs ***!
|
||
\********************************************************/
|
||
/***/ ((__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 */ __iconNode: () => (/* binding */ __iconNode),\n/* harmony export */ \"default\": () => (/* binding */ X)\n/* harmony export */ });\n/* harmony import */ var _createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../createLucideIcon.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/createLucideIcon.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M18 6 6 18\",\n key: \"1bl5f8\"\n }\n ],\n [\n \"path\",\n {\n d: \"m6 6 12 12\",\n key: \"d8bk6v\"\n }\n ]\n];\nconst X = (0,_createLucideIcon_mjs__WEBPACK_IMPORTED_MODULE_0__[\"default\"])(\"x\", __iconNode);\n //# sourceMappingURL=x.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vaWNvbnMveC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR08sTUFBTSxhQUF1QjtJQUNsQztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQWMsS0FBSztRQUFBLENBQVU7S0FBQTtJQUMzQztRQUFDO1FBQVE7WUFBRSxHQUFHO1lBQWMsS0FBSztRQUFBLENBQVU7S0FBQTtDQUM3QztBQWFBLE1BQU0sSUFBSSxrRUFBaUIsS0FBSyxVQUFVIiwic291cmNlcyI6WyIvaG9tZS9zcmMvaWNvbnMveC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3JlYXRlTHVjaWRlSWNvbiBmcm9tICcuLi9jcmVhdGVMdWNpZGVJY29uJztcbmltcG9ydCB7IEljb25Ob2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgX19pY29uTm9kZTogSWNvbk5vZGUgPSBbXG4gIFsncGF0aCcsIHsgZDogJ00xOCA2IDYgMTgnLCBrZXk6ICcxYmw1ZjgnIH1dLFxuICBbJ3BhdGgnLCB7IGQ6ICdtNiA2IDEyIDEyJywga2V5OiAnZDhiazZ2JyB9XSxcbl07XG5cbi8qKlxuICogQGNvbXBvbmVudCBAbmFtZSBYXG4gKiBAZGVzY3JpcHRpb24gTHVjaWRlIFNWRyBpY29uIGNvbXBvbmVudCwgcmVuZGVycyBTVkcgRWxlbWVudCB3aXRoIGNoaWxkcmVuLlxuICpcbiAqIEBwcmV2aWV3ICFbaW1nXShkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUFnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JZ29nSUhkcFpIUm9QU0l5TkNJS0lDQm9aV2xuYUhROUlqSTBJZ29nSUhacFpYZENiM2c5SWpBZ01DQXlOQ0F5TkNJS0lDQm1hV3hzUFNKdWIyNWxJZ29nSUhOMGNtOXJaVDBpSXpBd01DSWdjM1I1YkdVOUltSmhZMnRuY205MWJtUXRZMjlzYjNJNklDTm1abVk3SUdKdmNtUmxjaTF5WVdScGRYTTZJREp3ZUNJS0lDQnpkSEp2YTJVdGQybGtkR2c5SWpJaUNpQWdjM1J5YjJ0bExXeHBibVZqWVhBOUluSnZkVzVrSWdvZ0lITjBjbTlyWlMxc2FXNWxhbTlwYmowaWNtOTFibVFpQ2o0S0lDQThjR0YwYUNCa1BTSk5NVGdnTmlBMklERTRJaUF2UGdvZ0lEeHdZWFJvSUdROUltMDJJRFlnTVRJZ01USWlJQzgrQ2p3dmMzWm5QZ289KSAtIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucy94XG4gKiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9ndWlkZS9wYWNrYWdlcy9sdWNpZGUtcmVhY3QgLSBEb2N1bWVudGF0aW9uXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzIC0gTHVjaWRlIGljb25zIHByb3BzIGFuZCBhbnkgdmFsaWQgU1ZHIGF0dHJpYnV0ZVxuICogQHJldHVybnMge0pTWC5FbGVtZW50fSBKU1ggRWxlbWVudFxuICpcbiAqL1xuY29uc3QgWCA9IGNyZWF0ZUx1Y2lkZUljb24oJ3gnLCBfX2ljb25Ob2RlKTtcblxuZXhwb3J0IGRlZmF1bHQgWDtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/x.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs":
|
||
/*!*****************************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs ***!
|
||
\*****************************************************************************/
|
||
/***/ ((__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 */ hasA11yProp: () => (/* binding */ hasA11yProp)\n/* harmony export */ });\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ const hasA11yProp = (props)=>{\n for(const prop in props){\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n return false;\n};\n //# sourceMappingURL=hasA11yProp.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vc2hhcmVkL3NyYy91dGlscy9oYXNBMTF5UHJvcC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0lBTU8sTUFBTSxjQUFjLENBQUM7SUFDMUIsVUFBVyxRQUFRO1FBQ2pCLElBQUksS0FBSyxXQUFXLE9BQU8sS0FBSyxTQUFTLFVBQVUsU0FBUyxTQUFTO1lBQ25FLE9BQU87UUFDVDtJQUNGO0lBRUEsT0FBTztBQUNUIiwic291cmNlcyI6WyIvc2hhcmVkL3NyYy91dGlscy9oYXNBMTF5UHJvcC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENoZWNrIGlmIGEgY29tcG9uZW50IGhhcyBhbiBhY2Nlc3NpYmlsaXR5IHByb3BcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBjb21wb25lbnQgaGFzIGFuIGFjY2Vzc2liaWxpdHkgcHJvcFxuICovXG5leHBvcnQgY29uc3QgaGFzQTExeVByb3AgPSAocHJvcHM6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHtcbiAgZm9yIChjb25zdCBwcm9wIGluIHByb3BzKSB7XG4gICAgaWYgKHByb3Auc3RhcnRzV2l0aCgnYXJpYS0nKSB8fCBwcm9wID09PSAncm9sZScgfHwgcHJvcCA9PT0gJ3RpdGxlJykge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs ***!
|
||
\******************************************************************************/
|
||
/***/ ((__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 */ mergeClasses: () => (/* binding */ mergeClasses)\n/* harmony export */ });\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ const mergeClasses = function() {\n for(var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++){\n classes[_key] = arguments[_key];\n }\n return classes.filter((className, index, array)=>{\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n }).join(\" \").trim();\n};\n //# sourceMappingURL=mergeClasses.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vc2hhcmVkL3NyYy91dGlscy9tZXJnZUNsYXNzZXMubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztJQU1PLE1BQU0sZUFBZTs7UUFBMkM7O1dBQ3JFLFFBQ0csT0FBTyxDQUFDLFdBQVcsT0FBTztRQUN6QixPQUNFLFFBQVEsU0FBUyxLQUNoQixVQUFxQixXQUFXLE1BQ2pDLE1BQU0sUUFBUSxTQUFTLE1BQU07SUFFakMsQ0FBQyxFQUNBLEtBQUssR0FBRyxFQUNSIiwic291cmNlcyI6WyIvc2hhcmVkL3NyYy91dGlscy9tZXJnZUNsYXNzZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBNZXJnZXMgY2xhc3NlcyBpbnRvIGEgc2luZ2xlIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7YXJyYXl9IGNsYXNzZXNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgc3RyaW5nIG9mIGNsYXNzZXNcbiAqL1xuZXhwb3J0IGNvbnN0IG1lcmdlQ2xhc3NlcyA9IDxDbGFzc1R5cGUgPSBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsPiguLi5jbGFzc2VzOiBDbGFzc1R5cGVbXSkgPT5cbiAgY2xhc3Nlc1xuICAgIC5maWx0ZXIoKGNsYXNzTmFtZSwgaW5kZXgsIGFycmF5KSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBCb29sZWFuKGNsYXNzTmFtZSkgJiZcbiAgICAgICAgKGNsYXNzTmFtZSBhcyBzdHJpbmcpLnRyaW0oKSAhPT0gJycgJiZcbiAgICAgICAgYXJyYXkuaW5kZXhPZihjbGFzc05hbWUpID09PSBpbmRleFxuICAgICAgKTtcbiAgICB9KVxuICAgIC5qb2luKCcgJylcbiAgICAudHJpbSgpO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs":
|
||
/*!*****************************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs ***!
|
||
\*****************************************************************************/
|
||
/***/ ((__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 */ toCamelCase: () => (/* binding */ toCamelCase)\n/* harmony export */ });\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ const toCamelCase = (string)=>string.replace(/^([A-Z])|[\\s-_]+(\\w)/g, (match, p1, p2)=>p2 ? p2.toUpperCase() : p1.toLowerCase());\n //# sourceMappingURL=toCamelCase.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vc2hhcmVkL3NyYy91dGlscy90b0NhbWVsQ2FzZS5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0lBTU8sTUFBTSxjQUFjLENBQW1CLFdBQzVDLEtBQU8sUUFBUSx5QkFBeUIsQ0FBQyxPQUFPLElBQUksVUFDN0MsR0FBRyxhQUFZLEdBQUksR0FBRyIsInNvdXJjZXMiOlsiL3NoYXJlZC9zcmMvdXRpbHMvdG9DYW1lbENhc2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb252ZXJ0cyBzdHJpbmcgdG8gY2FtZWwgY2FzZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgY2FtZWxpemVkIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgdG9DYW1lbENhc2UgPSA8VCBleHRlbmRzIHN0cmluZz4oc3RyaW5nOiBUKSA9PlxuICBzdHJpbmcucmVwbGFjZSgvXihbQS1aXSl8W1xccy1fXSsoXFx3KS9nLCAobWF0Y2gsIHAxLCBwMikgPT5cbiAgICBwMiA/IHAyLnRvVXBwZXJDYXNlKCkgOiBwMS50b0xvd2VyQ2FzZSgpLFxuICApO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs":
|
||
/*!*****************************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs ***!
|
||
\*****************************************************************************/
|
||
/***/ ((__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 */ toKebabCase: () => (/* binding */ toKebabCase)\n/* harmony export */ });\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ const toKebabCase = (string)=>string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\n //# sourceMappingURL=toKebabCase.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vc2hhcmVkL3NyYy91dGlscy90b0tlYmFiQ2FzZS5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0lBTU8sTUFBTSxjQUFjLENBQUMsU0FDMUIsT0FBTyxRQUFRLHNCQUFzQixPQUFPLEVBQUUiLCJzb3VyY2VzIjpbIi9zaGFyZWQvc3JjL3V0aWxzL3RvS2ViYWJDYXNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udmVydHMgc3RyaW5nIHRvIGtlYmFiIGNhc2VcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIGtlYmFiaXplZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHRvS2ViYWJDYXNlID0gKHN0cmluZzogc3RyaW5nKSA9PlxuICBzdHJpbmcucmVwbGFjZSgvKFthLXowLTldKShbQS1aXSkvZywgJyQxLSQyJykudG9Mb3dlckNhc2UoKTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs":
|
||
/*!******************************************************************************!*\
|
||
!*** ./node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs ***!
|
||
\******************************************************************************/
|
||
/***/ ((__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 */ toPascalCase: () => (/* binding */ toPascalCase)\n/* harmony export */ });\n/* harmony import */ var _toCamelCase_mjs__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./toCamelCase.mjs */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs\");\n/**\n * @license lucide-react v1.14.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */ \nconst toPascalCase = (string)=>{\n const camelCase = (0,_toCamelCase_mjs__WEBPACK_IMPORTED_MODULE_0__.toCamelCase)(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\n //# sourceMappingURL=toPascalCase.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9sdWNpZGUtcmVhY3QvZGlzdC9lc20vc2hhcmVkL3NyYy91dGlscy90b1Bhc2NhbENhc2UubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBU08sTUFBTSxlQUFlLENBQW1CO0lBQzdDLE1BQU0sWUFBWSw4REFBWSxNQUFNO0lBRXBDLE9BQVEsVUFBVSxPQUFPLENBQUMsRUFBRSxhQUFZLEdBQUksVUFBVSxNQUFNLENBQUM7QUFDL0QiLCJzb3VyY2VzIjpbIi9zaGFyZWQvc3JjL3V0aWxzL3RvUGFzY2FsQ2FzZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYW1lbFRvUGFzY2FsIH0gZnJvbSAnLi4vdXRpbGl0eS10eXBlcyc7XG5pbXBvcnQgeyB0b0NhbWVsQ2FzZSB9IGZyb20gJy4vdG9DYW1lbENhc2UnO1xuXG4vKipcbiAqIENvbnZlcnRzIHN0cmluZyB0byBwYXNjYWwgY2FzZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmdcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgcGFzY2FsaXplZCBzdHJpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHRvUGFzY2FsQ2FzZSA9IDxUIGV4dGVuZHMgc3RyaW5nPihzdHJpbmc6IFQpOiBDYW1lbFRvUGFzY2FsPFQ+ID0+IHtcbiAgY29uc3QgY2FtZWxDYXNlID0gdG9DYW1lbENhc2Uoc3RyaW5nKTtcblxuICByZXR1cm4gKGNhbWVsQ2FzZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGNhbWVsQ2FzZS5zbGljZSgxKSkgYXMgQ2FtZWxUb1Bhc2NhbDxUPjtcbn07XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next-themes/dist/index.mjs":
|
||
/*!*************************************************!*\
|
||
!*** ./node_modules/next-themes/dist/index.mjs ***!
|
||
\*************************************************/
|
||
/***/ ((__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 */ ThemeProvider: () => (/* binding */ J),\n/* harmony export */ useTheme: () => (/* binding */ z)\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/* __next_internal_client_entry_do_not_use__ ThemeProvider,useTheme auto */ var _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$();\n\nvar M = (e, i, s, u, m, a, l, h)=>{\n let d = document.documentElement, w = [\n \"light\",\n \"dark\"\n ];\n function p(n) {\n (Array.isArray(e) ? e : [\n e\n ]).forEach((y)=>{\n let k = y === \"class\", S = k && a ? m.map((f)=>a[f] || f) : m;\n k ? (d.classList.remove(...S), d.classList.add(a && a[n] ? a[n] : n)) : d.setAttribute(y, n);\n }), R(n);\n }\n function R(n) {\n h && w.includes(n) && (d.style.colorScheme = n);\n }\n function c() {\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? \"dark\" : \"light\";\n }\n if (u) p(u);\n else try {\n let n = localStorage.getItem(i) || s, y = l && n === \"system\" ? c() : n;\n p(y);\n } catch (n) {}\n};\n_c = M;\nvar b = [\n \"light\",\n \"dark\"\n], I = \"(prefers-color-scheme: dark)\", O = \"object\" == \"undefined\", x = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createContext(void 0), U = {\n setTheme: (e)=>{},\n themes: []\n}, z = ()=>{\n _s();\n var e;\n return (e = react__WEBPACK_IMPORTED_MODULE_0__.useContext(x)) != null ? e : U;\n}, J = (e)=>{\n _s1();\n return react__WEBPACK_IMPORTED_MODULE_0__.useContext(x) ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, e.children) : /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(V, {\n ...e\n });\n}, N = [\n \"light\",\n \"dark\"\n], V = (param)=>{\n let { forcedTheme: e, disableTransitionOnChange: i = !1, enableSystem: s = !0, enableColorScheme: u = !0, storageKey: m = \"theme\", themes: a = N, defaultTheme: l = s ? \"system\" : \"light\", attribute: h = \"data-theme\", value: d, children: w, nonce: p, scriptProps: R } = param;\n _s2();\n let [c, n] = react__WEBPACK_IMPORTED_MODULE_0__.useState({\n \"V.useState\": ()=>H(m, l)\n }[\"V.useState\"]), [T, y] = react__WEBPACK_IMPORTED_MODULE_0__.useState({\n \"V.useState\": ()=>c === \"system\" ? E() : c\n }[\"V.useState\"]), k = d ? Object.values(d) : a, S = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"V.useCallback[S]\": (o)=>{\n let r = o;\n if (!r) return;\n o === \"system\" && s && (r = E());\n let v = d ? d[r] : r, C = i ? W(p) : null, P = document.documentElement, L = {\n \"V.useCallback[S].L\": (g)=>{\n g === \"class\" ? (P.classList.remove(...k), v && P.classList.add(v)) : g.startsWith(\"data-\") && (v ? P.setAttribute(g, v) : P.removeAttribute(g));\n }\n }[\"V.useCallback[S].L\"];\n if (Array.isArray(h) ? h.forEach(L) : L(h), u) {\n let g = b.includes(l) ? l : null, D = b.includes(r) ? r : g;\n P.style.colorScheme = D;\n }\n C == null || C();\n }\n }[\"V.useCallback[S]\"], [\n p\n ]), f = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"V.useCallback[f]\": (o)=>{\n let r = typeof o == \"function\" ? o(c) : o;\n n(r);\n try {\n localStorage.setItem(m, r);\n } catch (v) {}\n }\n }[\"V.useCallback[f]\"], [\n c\n ]), A = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"V.useCallback[A]\": (o)=>{\n let r = E(o);\n y(r), c === \"system\" && s && !e && S(\"system\");\n }\n }[\"V.useCallback[A]\"], [\n c,\n e\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"V.useEffect\": ()=>{\n let o = window.matchMedia(I);\n return o.addListener(A), A(o), ({\n \"V.useEffect\": ()=>o.removeListener(A)\n })[\"V.useEffect\"];\n }\n }[\"V.useEffect\"], [\n A\n ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"V.useEffect\": ()=>{\n let o = {\n \"V.useEffect.o\": (r)=>{\n r.key === m && (r.newValue ? n(r.newValue) : f(l));\n }\n }[\"V.useEffect.o\"];\n return window.addEventListener(\"storage\", o), ({\n \"V.useEffect\": ()=>window.removeEventListener(\"storage\", o)\n })[\"V.useEffect\"];\n }\n }[\"V.useEffect\"], [\n f\n ]), react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"V.useEffect\": ()=>{\n S(e != null ? e : c);\n }\n }[\"V.useEffect\"], [\n e,\n c\n ]);\n let Q = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"V.useMemo[Q]\": ()=>({\n theme: c,\n setTheme: f,\n forcedTheme: e,\n resolvedTheme: c === \"system\" ? T : c,\n themes: s ? [\n ...a,\n \"system\"\n ] : a,\n systemTheme: s ? T : void 0\n })\n }[\"V.useMemo[Q]\"], [\n c,\n f,\n e,\n T,\n s,\n a\n ]);\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(x.Provider, {\n value: Q\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(_, {\n forcedTheme: e,\n storageKey: m,\n attribute: h,\n enableSystem: s,\n enableColorScheme: u,\n defaultTheme: l,\n value: d,\n themes: a,\n nonce: p,\n scriptProps: R\n }), w);\n}, _ = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.memo((param)=>{\n let { forcedTheme: e, storageKey: i, attribute: s, enableSystem: u, enableColorScheme: m, defaultTheme: a, value: l, themes: h, nonce: d, scriptProps: w } = param;\n let p = JSON.stringify([\n s,\n i,\n a,\n e,\n h,\n l,\n u,\n m\n ]).slice(1, -1);\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"script\", {\n ...w,\n suppressHydrationWarning: !0,\n nonce: false ? 0 : \"\",\n dangerouslySetInnerHTML: {\n __html: \"(\".concat(M.toString(), \")(\").concat(p, \")\")\n }\n });\n}), H = (e, i)=>{\n if (O) return;\n let s;\n try {\n s = localStorage.getItem(e) || void 0;\n } catch (u) {}\n return s || i;\n}, W = (e)=>{\n let i = document.createElement(\"style\");\n return e && i.setAttribute(\"nonce\", e), i.appendChild(document.createTextNode(\"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\")), document.head.appendChild(i), ()=>{\n window.getComputedStyle(document.body), setTimeout(()=>{\n document.head.removeChild(i);\n }, 1);\n };\n}, E = (e)=>(e || (e = window.matchMedia(I)), e.matches ? \"dark\" : \"light\");\n_s(z, \"gDsCjeeItUuvgOWf1v4qoK9RF6k=\");\n_s1(J, \"gDsCjeeItUuvgOWf1v4qoK9RF6k=\");\n_s2(V, \"UCkmxL+2pKwquH5a3QithkhUKcE=\");\n\nvar _c;\n$RefreshReg$(_c, \"M\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0LXRoZW1lcy9kaXN0L2luZGV4Lm1qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQXFDO0FBQUEsSUFBSUMsSUFBRSxDQUFDQyxHQUFFQyxHQUFFQyxHQUFFQyxHQUFFQyxHQUFFQyxHQUFFQyxHQUFFQztJQUFLLElBQUlDLElBQUVDLFNBQVNDLGVBQWUsRUFBQ0MsSUFBRTtRQUFDO1FBQVE7S0FBTztJQUFDLFNBQVNDLEVBQUVDLENBQUM7UUFBR0MsQ0FBQUEsTUFBTUMsT0FBTyxDQUFDZixLQUFHQSxJQUFFO1lBQUNBO1NBQUUsRUFBRWdCLE9BQU8sQ0FBQ0MsQ0FBQUE7WUFBSSxJQUFJQyxJQUFFRCxNQUFJLFNBQVFFLElBQUVELEtBQUdiLElBQUVELEVBQUVnQixHQUFHLENBQUNDLENBQUFBLElBQUdoQixDQUFDLENBQUNnQixFQUFFLElBQUVBLEtBQUdqQjtZQUFFYyxJQUFHVixDQUFBQSxFQUFFYyxTQUFTLENBQUNDLE1BQU0sSUFBSUosSUFBR1gsRUFBRWMsU0FBUyxDQUFDRSxHQUFHLENBQUNuQixLQUFHQSxDQUFDLENBQUNRLEVBQUUsR0FBQ1IsQ0FBQyxDQUFDUSxFQUFFLEdBQUNBLEVBQUMsSUFBR0wsRUFBRWlCLFlBQVksQ0FBQ1IsR0FBRUo7UUFBRSxJQUFHYSxFQUFFYjtJQUFFO0lBQUMsU0FBU2EsRUFBRWIsQ0FBQztRQUFFTixLQUFHSSxFQUFFZ0IsUUFBUSxDQUFDZCxNQUFLTCxDQUFBQSxFQUFFb0IsS0FBSyxDQUFDQyxXQUFXLEdBQUNoQixDQUFBQTtJQUFFO0lBQUMsU0FBU2lCO1FBQUksT0FBT0MsT0FBT0MsVUFBVSxDQUFDLGdDQUFnQ0MsT0FBTyxHQUFDLFNBQU87SUFBTztJQUFDLElBQUc5QixHQUFFUyxFQUFFVDtTQUFRLElBQUc7UUFBQyxJQUFJVSxJQUFFcUIsYUFBYUMsT0FBTyxDQUFDbEMsTUFBSUMsR0FBRWUsSUFBRVgsS0FBR08sTUFBSSxXQUFTaUIsTUFB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QUUsQ0FBQztJQUFDLE9BQU9ELEtBQUdEO0FBQUMsR0FBRXdFLElBQUV6RSxDQUFBQTtJQUFJLElBQUlDLElBQUVRLFNBQVNzQyxhQUFhLENBQUM7SUFBUyxPQUFPL0MsS0FBR0MsRUFBRXdCLFlBQVksQ0FBQyxTQUFRekIsSUFBR0MsRUFBRXVHLFdBQVcsQ0FBQy9GLFNBQVNnRyxjQUFjLENBQUMsaUxBQWdMaEcsU0FBU2lHLElBQUksQ0FBQ0YsV0FBVyxDQUFDdkcsSUFBRztRQUFLOEIsT0FBTzRFLGdCQUFnQixDQUFDbEcsU0FBU21HLElBQUksR0FBRUMsV0FBVztZQUFLcEcsU0FBU2lHLElBQUksQ0FBQ0ksV0FBVyxDQUFDN0c7UUFBRSxHQUFFO0lBQUU7QUFBQyxHQUFFZ0UsSUFBRWpFLENBQUFBLElBQUlBLENBQUFBLEtBQUlBLENBQUFBLElBQUUrQixPQUFPQyxVQUFVLENBQUNLLEVBQUMsR0FBR3JDLEVBQUVpQyxPQUFPLEdBQUMsU0FBTyxPQUFNO0dBQTVrRlc7SUFBa0RFO0lBQThHSTtBQUF3OUUiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvbmV4dC10aGVtZXMvZGlzdC9pbmRleC5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7aW1wb3J0KmFzIHQgZnJvbVwicmVhY3RcIjt2YXIgTT0oZSxpLHMsdSxtLGEsbCxoKT0+e2xldCBkPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCx3PVtcImxpZ2h0XCIsXCJkYXJrXCJdO2Z1bmN0aW9uIHAobil7KEFycmF5LmlzQXJyYXkoZSk/ZTpbZV0pLmZvckVhY2goeT0+e2xldCBrPXk9PT1cImNsYXNzXCIsUz1rJiZhP20ubWFwKGY9PmFbZl18fGYpOm07az8oZC5jbGFzc0xpc3QucmVtb3ZlKC4uLlMpLGQuY2xhc3NMaXN0LmFkZChhJiZhW25dP2Fbbl06bikpOmQuc2V0QXR0cmlidXRlKHksbil9KSxSKG4pfWZ1bmN0aW9uIFIobil7aCYmdy5pbmNsdWRlcyhuKSYmKGQuc3R5bGUuY29sb3JTY2hlbWU9bil9ZnVuY3Rpb24gYygpe3JldHVybiB3aW5kb3cubWF0Y2hNZWRpYShcIihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaylcIikubWF0Y2hlcz9cImRhcmtcIjpcImxpZ2h0XCJ9aWYodSlwKHUpO2Vsc2UgdHJ5e2xldCBuPWxvY2FsU3RvcmFnZS5nZXRJdGVtKGkpfHxzLHk9bCYmbj09PVwic3lzdGVtXCI/YygpOm47cCh5KX1jYXRjaChuKXt9fTt2YXIgYj1bXCJsaWdodFwiLFwiZGFya1wiXSxJPVwiKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKVwiLE89dHlwZW9mIHdpbmRvdz09XCJ1bmRlZmluZWRcIix4PXQuY3JlYXRlQ29udGV4dCh2b2lkIDApLFU9e3NldFRoZW1lOmU9Pnt9LHRoZW1lczpbXX0sej0oKT0+e3ZhciBlO3JldHVybihlPXQudXNlQ29udGV4dCh4KSkhPW51bGw/ZTpVfSxKPWU9PnQudXNlQ29udGV4dCh4KT90LmNyZWF0ZUVsZW1lbnQodC5GcmFnbWVudCxudWxsLGUuY2hpbGRyZW4pOnQuY3JlYXRlRWxlbWVudChWLHsuLi5lfSksTj1bXCJsaWdodFwiLFwiZGFya1wiXSxWPSh7Zm9yY2VkVGhlbWU6ZSxkaXNhYmxlVHJhbnNpdGlvbk9uQ2hhbmdlOmk9ITEsZW5hYmxlU3lzdGVtOnM9ITAsZW5hYmxlQ29sb3JTY2hlbWU6dT0hMCxzdG9yYWdlS2V5Om09XCJ0aGVtZVwiLHRoZW1lczphPU4sZGVmYXVsdFRoZW1lOmw9cz9cInN5c3RlbVwiOlwibGlnaHRcIixhdHRyaWJ1dGU6aD1cImRhdGEtdGhlbWVcIix2YWx1ZTpkLGNoaWxkcmVuOncsbm9uY2U6cCxzY3JpcHRQcm9wczpSfSk9PntsZXRbYyxuXT10LnVzZVN0YXRlKCgpPT5IKG0sbCkpLFtULHldPXQudXNlU3RhdGUoKCk9PmM9PT1cInN5c3RlbVwiP0UoKTpjKSxrPWQ/T2JqZWN0LnZhbHVlcyhkKTphLFM9dC51c2VDYWxsYmFjayhvPT57bGV0IHI9bztpZighcilyZXR1cm47bz09PVwic3lzdGVtXCImJnMmJihyPUUoKSk7bGV0IHY9ZD9kW3JdOnIsQz1pP1cocCk6bnVsbCxQPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxMPWc9PntnPT09XCJjbGFzc1wiPyhQLmNsYXNzTGlzdC5yZW1vdmUoLi4uayksdiYmUC5jbGFzc0xpc3QuYWRkKHYpKTpnLnN0YXJ0c1dpdGgoXCJkYXRhLVwiKSYmKHY/UC5zZXRBdHRyaWJ1dGUoZyx2KTpQLnJlbW92ZUF0dHJpYnV0ZShnKSl9O2lmKEFycmF5LmlzQXJyYXkoaCk/aC5mb3JFYWNoKEwpOkwoaCksdSl7bGV0IGc9Yi5pbmNsdWRlcyhsKT9sOm51bGwsRD1iLmluY2x1ZGVzKHIpP3I6ZztQLnN0eWxlLmNvbG9yU2NoZW1lPUR9Qz09bnVsbHx8QygpfSxbcF0pLGY9dC51c2VDYWxsYmFjayhvPT57bGV0IHI9dHlwZW9mIG89PVwiZnVuY3Rpb25cIj9vKGMpOm87bihyKTt0cnl7bG9jYWxTdG9yYWdlLnNldEl0ZW0obSxyKX1jYXRjaCh2KXt9fSxbY10pLEE9dC51c2VDYWxsYmFjayhvPT57bGV0IHI9RShvKTt5KHIpLGM9PT1cInN5c3RlbVwiJiZzJiYhZSYmUyhcInN5c3RlbVwiKX0sW2MsZV0pO3QudXNlRWZmZWN0KCgpPT57bGV0IG89d2luZG93Lm1hdGNoTWVkaWEoSSk7cmV0dXJuIG8uYWRkTGlzdGVuZXIoQSksQShvKSwoKT0+by5yZW1vdmVMaXN0ZW5lcihBKX0sW0FdKSx0LnVzZUVmZmVjdCgoKT0+e2xldCBvPXI9PntyLmtleT09PW0mJihyLm5ld1ZhbHVlP24oci5uZXdWYWx1ZSk6ZihsKSl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInN0b3JhZ2VcIixvKSwoKT0+d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzdG9yYWdlXCIsbyl9LFtmXSksdC51c2VFZmZlY3QoKCk9PntTKGUhPW51bGw/ZTpjKX0sW2UsY10pO2xldCBRPXQudXNlTWVtbygoKT0+KHt0aGVtZTpjLHNldFRoZW1lOmYsZm9yY2VkVGhlbWU6ZSxyZXNvbHZlZFRoZW1lOmM9PT1cInN5c3RlbVwiP1Q6Yyx0aGVtZXM6cz9bLi4uYSxcInN5c3RlbVwiXTphLHN5c3RlbVRoZW1lOnM/VDp2b2lkIDB9KSxbYyxmLGUsVCxzLGFdKTtyZXR1cm4gdC5jcmVhdGVFbGVtZW50KHguUHJvdmlkZXIse3ZhbHVlOlF9LHQuY3JlYXRlRWxlbWVudChfLHtmb3JjZWRUaGVtZTplLHN0b3JhZ2VLZXk6bSxhdHRyaWJ1dGU6aCxlbmFibGVTeXN0ZW06cyxlbmFibGVDb2xvclNjaGVtZTp1LGRlZmF1bHRUaGVtZTpsLHZhbHVlOmQsdGhlbWVzOmEsbm9uY2U6cCxzY3JpcHRQcm9wczpSfSksdyl9LF89dC5tZW1vKCh7Zm9yY2VkVGhlbWU6ZSxzdG9yYWdlS2V5OmksYXR0cmlidXRlOnMsZW5hYmxlU3lzdGVtOnUsZW5hYmxlQ29sb3JTY2hlbWU6bSxkZWZhdWx0VGhlbWU6YSx2YWx1ZTpsLHRoZW1lczpoLG5vbmNlOmQsc2NyaXB0UHJvcHM6d30pPT57bGV0IHA9SlNPTi5zdHJpbmdpZnkoW3MsaSxhLGUsaCxsLHUsbV0pLnNsaWNlKDEsLTEpO3JldHVybiB0LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIix7Li4udyxzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmc6ITAsbm9uY2U6dHlwZW9mIHdpbmRvdz09XCJ1bmRlZmluZWRcIj9kOlwiXCIsZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6e19faHRtbDpgKCR7TS50b1N0cmluZygpfSkoJHtwfSlgfX0pfSksSD0oZSxpKT0+e2lmKE8pcmV0dXJuO2xldCBzO3RyeXtzPWxvY2FsU3RvcmFnZS5nZXRJdGVtKGUpfHx2b2lkIDB9Y2F0Y2godSl7fXJldHVybiBzfHxpfSxXPWU9PntsZXQgaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7cmV0dXJuIGUmJmkuc2V0QXR0cmlidXRlKFwibm9uY2VcIixlKSxpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiKiwqOjpiZWZvcmUsKjo6YWZ0ZXJ7LXdlYmtpdC10cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50Oy1tb3otdHJhbnNpdGlvbjpub25lIWltcG9ydGFudDstby10cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50Oy1tcy10cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50O3RyYW5zaXRpb246bm9uZSFpbXBvcnRhbnR9XCIpKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKGkpLCgpPT57d2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuYm9keSksc2V0VGltZW91dCgoKT0+e2RvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoaSl9LDEpfX0sRT1lPT4oZXx8KGU9d2luZG93Lm1hdGNoTWVkaWEoSSkpLGUubWF0Y2hlcz9cImRhcmtcIjpcImxpZ2h0XCIpO2V4cG9ydHtKIGFzIFRoZW1lUHJvdmlkZXIseiBhcyB1c2VUaGVtZX07XG4iXSwibmFtZXMiOlsidCIsIk0iLCJlIiwiaSIsInMiLCJ1IiwibSIsImEiLCJsIiwiaCIsImQiLCJkb2N1bWVudCIsImRvY3VtZW50RWxlbWVudCIsInciLCJwIiwibiIsIkFycmF5IiwiaXNBcnJheSIsImZvckVhY2giLCJ5IiwiayIsIlMiLCJtYXAiLCJmIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiYWRkIiwic2V0QXR0cmlidXRlIiwiUiIsImluY2x1ZGVzIiwic3R5bGUiLCJjb2xvclNjaGVtZSIsImMiLCJ3aW5kb3ciLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJiIiwiSSIsIk8iLCJ4IiwiY3JlYXRlQ29udGV4dCIsIlUiLCJzZXRUaGVtZSIsInRoZW1lcyIsInoiLCJ1c2VDb250ZXh0IiwiSiIsImNyZWF0ZUVsZW1lbnQiLCJGcmFnbWVudCIsImNoaWxkcmVuIiwiViIsIk4iLCJmb3JjZWRUaGVtZSIsImRpc2FibGVUcmFuc2l0aW9uT25DaGFuZ2UiLCJlbmFibGVTeXN0ZW0iLCJlbmFibGVDb2xvclNjaGVtZSIsInN0b3JhZ2VLZXkiLCJkZWZhdWx0VGhlbWUiLCJhdHRyaWJ1dGUiLCJ2YWx1ZSIsIm5vbmNlIiwic2NyaXB0UHJvcHMiLCJ1c2VTdGF0ZSIsIkgiLCJUIiwiRSIsIk9iamVjdCIsInZhbHVlcyIsInVzZUNhbGxiYWNrIiwibyIsInIiLCJ2IiwiQyIsIlciLCJQIiwiTCIsImciLCJzdGFydHNXaXRoIiwicmVtb3ZlQXR0cmlidXRlIiwiRCIsInNldEl0ZW0iLCJBIiwidXNlRWZmZWN0IiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsImtleSIsIm5ld1ZhbHVlIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJRIiwidXNlTWVtbyIsInRoZW1lIiwicmVzb2x2ZWRUaGVtZSIsInN5c3RlbVRoZW1lIiwiUHJvdmlkZXIiLCJfIiwibWVtbyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzbGljZSIsInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIsImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiwiX19odG1sIiwidG9TdHJpbmciLCJhcHBlbmRDaGlsZCIsImNyZWF0ZVRleHROb2RlIiwiaGVhZCIsImdldENvbXB1dGVkU3R5bGUiLCJib2R5Iiwic2V0VGltZW91dCIsInJlbW92ZUNoaWxkIiwiVGhlbWVQcm92aWRlciIsInVzZVRoZW1lIl0sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next-themes/dist/index.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/api/image.js":
|
||
/*!*********************************************!*\
|
||
!*** ./node_modules/next/dist/api/image.js ***!
|
||
\*********************************************/
|
||
/***/ ((__unused_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 */ \"default\": () => (/* reexport default from dynamic */ _shared_lib_image_external__WEBPACK_IMPORTED_MODULE_0___default.a)\n/* harmony export */ });\n/* harmony import */ var _shared_lib_image_external__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../shared/lib/image-external */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/image-external.js\");\n/* harmony import */ var _shared_lib_image_external__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_shared_lib_image_external__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony reexport (unknown) */ var __WEBPACK_REEXPORT_OBJECT__ = {};\n/* harmony reexport (unknown) */ for(const __WEBPACK_IMPORT_KEY__ in _shared_lib_image_external__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _shared_lib_image_external__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n\n//# sourceMappingURL=image.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL2ltYWdlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUF1RDtBQUNWOztBQUU3QyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL2ltYWdlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGRlZmF1bHQgfSBmcm9tICcuLi9zaGFyZWQvbGliL2ltYWdlLWV4dGVybmFsJztcbmV4cG9ydCAqIGZyb20gJy4uL3NoYXJlZC9saWIvaW1hZ2UtZXh0ZXJuYWwnO1xuXG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbWFnZS5qcy5tYXAiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/api/image.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/api/navigation.js":
|
||
/*!**************************************************!*\
|
||
!*** ./node_modules/next/dist/api/navigation.js ***!
|
||
\**************************************************/
|
||
/***/ ((__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(const __WEBPACK_IMPORT_KEY__ in _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__) if(__WEBPACK_IMPORT_KEY__ !== \"default\") __WEBPACK_REEXPORT_OBJECT__[__WEBPACK_IMPORT_KEY__] = () => _client_components_navigation__WEBPACK_IMPORTED_MODULE_0__[__WEBPACK_IMPORT_KEY__]\n/* harmony reexport (unknown) */ __webpack_require__.d(__webpack_exports__, __WEBPACK_REEXPORT_OBJECT__);\n\n\n//# sourceMappingURL=navigation.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL25hdmlnYXRpb24uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWdEOztBQUVoRCIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYXBpL25hdmlnYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi4vY2xpZW50L2NvbXBvbmVudHMvbmF2aWdhdGlvbic7XG5cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW5hdmlnYXRpb24uanMubWFwIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/api/navigation.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Fsilvio%2FDevelop%2FCIRUX-APP%2Fsrc%2Fcomponents%2Flayout%2FSidebar.tsx%22%2C%22ids%22%3A%5B%22Sidebar%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Fsilvio%2FDevelop%2FCIRUX-APP%2Fsrc%2Fcomponents%2Flayout%2FTopbar.tsx%22%2C%22ids%22%3A%5B%22Topbar%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Fsilvio%2FDevelop%2FCIRUX-APP%2Fsrc%2Fcomponents%2Fproviders%2Findex.tsx%22%2C%22ids%22%3A%5B%22Providers%22%5D%7D&server=false!":
|
||
/*!*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************!*\
|
||
!*** ./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Fsilvio%2FDevelop%2FCIRUX-APP%2Fsrc%2Fcomponents%2Flayout%2FSidebar.tsx%22%2C%22ids%22%3A%5B%22Sidebar%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Fsilvio%2FDevelop%2FCIRUX-APP%2Fsrc%2Fcomponents%2Flayout%2FTopbar.tsx%22%2C%22ids%22%3A%5B%22Topbar%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Fsilvio%2FDevelop%2FCIRUX-APP%2Fsrc%2Fcomponents%2Fproviders%2Findex.tsx%22%2C%22ids%22%3A%5B%22Providers%22%5D%7D&server=false! ***!
|
||
\*****************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
||
/***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
eval(__webpack_require__.ts("Promise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./src/components/layout/Sidebar.tsx */ \"(app-pages-browser)/./src/components/layout/Sidebar.tsx\"));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./src/components/layout/Topbar.tsx */ \"(app-pages-browser)/./src/components/layout/Topbar.tsx\"));\n;\nPromise.resolve(/*! import() eager */).then(__webpack_require__.bind(__webpack_require__, /*! ./src/components/providers/index.tsx */ \"(app-pages-browser)/./src/components/providers/index.tsx\"));\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvYnVpbGQvd2VicGFjay9sb2FkZXJzL25leHQtZmxpZ2h0LWNsaWVudC1lbnRyeS1sb2FkZXIuanM/bW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGaG9tZSUyRnNpbHZpbyUyRkRldmVsb3AlMkZDSVJVWC1BUFAlMkZzcmMlMkZjb21wb25lbnRzJTJGbGF5b3V0JTJGU2lkZWJhci50c3glMjIlMkMlMjJpZHMlMjIlM0ElNUIlMjJTaWRlYmFyJTIyJTVEJTdEJm1vZHVsZXM9JTdCJTIycmVxdWVzdCUyMiUzQSUyMiUyRmhvbWUlMkZzaWx2aW8lMkZEZXZlbG9wJTJGQ0lSVVgtQVBQJTJGc3JjJTJGY29tcG9uZW50cyUyRmxheW91dCUyRlRvcGJhci50c3glMjIlMkMlMjJpZHMlMjIlM0ElNUIlMjJUb3BiYXIlMjIlNUQlN0QmbW9kdWxlcz0lN0IlMjJyZXF1ZXN0JTIyJTNBJTIyJTJGaG9tZSUyRnNpbHZpbyUyRkRldmVsb3AlMkZDSVJVWC1BUFAlMkZzcmMlMkZjb21wb25lbnRzJTJGcHJvdmlkZXJzJTJGaW5kZXgudHN4JTIyJTJDJTIyaWRzJTIyJTNBJTVCJTIyUHJvdmlkZXJzJTIyJTVEJTdEJnNlcnZlcj1mYWxzZSEiLCJtYXBwaW5ncyI6IkFBQUEsZ01BQWtJO0FBQ2xJO0FBQ0EsOExBQWdJO0FBQ2hJO0FBQ0Esa01BQXFJIiwic291cmNlcyI6WyIiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIsIHdlYnBhY2tFeHBvcnRzOiBbXCJTaWRlYmFyXCJdICovIFwiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL3NyYy9jb21wb25lbnRzL2xheW91dC9TaWRlYmFyLnRzeFwiKTtcbjtcbmltcG9ydCgvKiB3ZWJwYWNrTW9kZTogXCJlYWdlclwiLCB3ZWJwYWNrRXhwb3J0czogW1wiVG9wYmFyXCJdICovIFwiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL3NyYy9jb21wb25lbnRzL2xheW91dC9Ub3BiYXIudHN4XCIpO1xuO1xuaW1wb3J0KC8qIHdlYnBhY2tNb2RlOiBcImVhZ2VyXCIsIHdlYnBhY2tFeHBvcnRzOiBbXCJQcm92aWRlcnNcIl0gKi8gXCIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvc3JjL2NvbXBvbmVudHMvcHJvdmlkZXJzL2luZGV4LnRzeFwiKTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\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%22%2Fhome%2Fsilvio%2FDevelop%2FCIRUX-APP%2Fsrc%2Fcomponents%2Flayout%2FSidebar.tsx%22%2C%22ids%22%3A%5B%22Sidebar%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Fsilvio%2FDevelop%2FCIRUX-APP%2Fsrc%2Fcomponents%2Flayout%2FTopbar.tsx%22%2C%22ids%22%3A%5B%22Topbar%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Fsilvio%2FDevelop%2FCIRUX-APP%2Fsrc%2Fcomponents%2Fproviders%2Findex.tsx%22%2C%22ids%22%3A%5B%22Providers%22%5D%7D&server=false!\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/client/app-dir/link.js ***!
|
||
\*******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n /**\n * A React component that extends the HTML `<a>` element to provide\n * [prefetching](https://nextjs.org/docs/app/building-your-application/routing/linking-and-navigating#2-prefetching)\n * and client-side navigation. This is the primary way to navigate between routes in Next.js.\n *\n * @remarks\n * - Prefetching is only enabled in production.\n *\n * @see https://nextjs.org/docs/app/api-reference/components/link\n */ default: function() {\n return LinkComponent;\n },\n useLinkStatus: function() {\n return useLinkStatus;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _formaturl = __webpack_require__(/*! ../../shared/lib/router/utils/format-url */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js\");\nconst _approutercontextsharedruntime = __webpack_require__(/*! ../../shared/lib/app-router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.js\");\nconst _usemergedref = __webpack_require__(/*! ../use-merged-ref */ \"(app-pages-browser)/./node_modules/next/dist/client/use-merged-ref.js\");\nconst _utils = __webpack_require__(/*! ../../shared/lib/utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _addbasepath = __webpack_require__(/*! ../add-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/add-base-path.js\");\nconst _warnonce = __webpack_require__(/*! ../../shared/lib/utils/warn-once */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nconst _links = __webpack_require__(/*! ../components/links */ \"(app-pages-browser)/./node_modules/next/dist/client/components/links.js\");\nconst _islocalurl = __webpack_require__(/*! ../../shared/lib/router/utils/is-local-url */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\");\nconst _approuterinstance = __webpack_require__(/*! ../components/app-router-instance */ \"(app-pages-browser)/./node_modules/next/dist/client/components/app-router-instance.js\");\nconst _erroronce = __webpack_require__(/*! ../../shared/lib/utils/error-once */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils/error-once.js\");\nconst _segmentcache = __webpack_require__(/*! ../components/segment-cache */ \"(app-pages-browser)/./node_modules/next/dist/client/components/segment-cache.js\");\nfunction isModifiedEvent(event) {\n const eventTarget = event.currentTarget;\n const target = eventTarget.getAttribute('target');\n return target && target !== '_self' || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey || // triggers resource download\n event.nativeEvent && event.nativeEvent.which === 2;\n}\nfunction linkClicked(e, href, as, linkInstanceRef, replace, scroll, onNavigate) {\n const { nodeName } = e.currentTarget;\n // anchors inside an svg have a lowercase nodeName\n const isAnchorNodeName = nodeName.toUpperCase() === 'A';\n if (isAnchorNodeName && isModifiedEvent(e) || e.currentTarget.hasAttribute('download')) {\n // ignore click for browser’s default behavior\n return;\n }\n if (!(0, _islocalurl.isLocalURL)(href)) {\n if (replace) {\n // browser default behavior does not replace the history state\n // so we need to do it manually\n e.preventDefault();\n location.replace(href);\n }\n // ignore click for browser’s default behavior\n return;\n }\n e.preventDefault();\n if (onNavigate) {\n let isDefaultPrevented = false;\n onNavigate({\n preventDefault: ()=>{\n isDefaultPrevented = true;\n }\n });\n if (isDefaultPrevented) {\n return;\n }\n }\n _react.default.startTransition(()=>{\n (0, _approuterinstance.dispatchNavigateAction)(as || href, replace ? 'replace' : 'push', scroll != null ? scroll : true, linkInstanceRef.current);\n });\n}\nfunction formatStringOrUrl(urlObjOrString) {\n if (typeof urlObjOrString === 'string') {\n return urlObjOrString;\n }\n return (0, _formaturl.formatUrl)(urlObjOrString);\n}\nfunction LinkComponent(props) {\n _s();\n const [linkStatus, setOptimisticLinkStatus] = (0, _react.useOptimistic)(_links.IDLE_LINK_STATUS);\n let children;\n const linkInstanceRef = (0, _react.useRef)(null);\n const { href: hrefProp, as: asProp, children: childrenProp, prefetch: prefetchProp = null, passHref, replace, shallow, scroll, onClick, onMouseEnter: onMouseEnterProp, onTouchStart: onTouchStartProp, legacyBehavior = false, onNavigate, ref: forwardedRef, unstable_dynamicOnHover, ...restProps } = props;\n children = childrenProp;\n if (legacyBehavior && (typeof children === 'string' || typeof children === 'number')) {\n children = /*#__PURE__*/ (0, _jsxruntime.jsx)(\"a\", {\n children: children\n });\n }\n const router = _react.default.useContext(_approutercontextsharedruntime.AppRouterContext);\n const prefetchEnabled = prefetchProp !== false;\n const fetchStrategy = prefetchProp !== false ? getFetchStrategyFromPrefetchProp(prefetchProp) : _segmentcache.FetchStrategy.PPR;\n if (true) {\n function createPropError(args) {\n return Object.defineProperty(new Error(\"Failed prop type: The prop `\" + args.key + \"` expects a \" + args.expected + \" in `<Link>`, but got `\" + args.actual + \"` instead.\" + ( true ? \"\\nOpen your browser's console to view the Component stack trace.\" : 0)), \"__NEXT_ERROR_CODE\", {\n value: \"E319\",\n enumerable: false,\n configurable: true\n });\n }\n // TypeScript trick for type-guarding:\n const requiredPropsGuard = {\n href: true\n };\n const requiredProps = Object.keys(requiredPropsGuard);\n requiredProps.forEach((key)=>{\n if (key === 'href') {\n if (props[key] == null || typeof props[key] !== 'string' && typeof props[key] !== 'object') {\n throw createPropError({\n key,\n expected: '`string` or `object`',\n actual: props[key] === null ? 'null' : typeof props[key]\n });\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = key;\n }\n });\n // TypeScript trick for type-guarding:\n const optionalPropsGuard = {\n as: true,\n replace: true,\n scroll: true,\n shallow: true,\n passHref: true,\n prefetch: true,\n unstable_dynamicOnHover: true,\n onClick: true,\n onMouseEnter: true,\n onTouchStart: true,\n legacyBehavior: true,\n onNavigate: true\n };\n const optionalProps = Object.keys(optionalPropsGuard);\n optionalProps.forEach((key)=>{\n const valType = typeof props[key];\n if (key === 'as') {\n if (props[key] && valType !== 'string' && valType !== 'object') {\n throw createPropError({\n key,\n expected: '`string` or `object`',\n actual: valType\n });\n }\n } else if (key === 'onClick' || key === 'onMouseEnter' || key === 'onTouchStart' || key === 'onNavigate') {\n if (props[key] && valType !== 'function') {\n throw createPropError({\n key,\n expected: '`function`',\n actual: valType\n });\n }\n } else if (key === 'replace' || key === 'scroll' || key === 'shallow' || key === 'passHref' || key === 'legacyBehavior' || key === 'unstable_dynamicOnHover') {\n if (props[key] != null && valType !== 'boolean') {\n throw createPropError({\n key,\n expected: '`boolean`',\n actual: valType\n });\n }\n } else if (key === 'prefetch') {\n if (props[key] != null && valType !== 'boolean' && props[key] !== 'auto' && props[key] !== 'unstable_forceStale') {\n throw createPropError({\n key,\n expected: '`boolean | \"auto\" | \"unstable_forceStale\"`',\n actual: valType\n });\n }\n } else {\n // TypeScript trick for type-guarding:\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _ = key;\n }\n });\n }\n if (true) {\n if (props.locale) {\n (0, _warnonce.warnOnce)('The `locale` prop is not supported in `next/link` while using the `app` router. Read more about app router internalization: https://nextjs.org/docs/app/building-your-application/routing/internationalization');\n }\n if (!asProp) {\n let href;\n if (typeof hrefProp === 'string') {\n href = hrefProp;\n } else if (typeof hrefProp === 'object' && typeof hrefProp.pathname === 'string') {\n href = hrefProp.pathname;\n }\n if (href) {\n const hasDynamicSegment = href.split('/').some((segment)=>segment.startsWith('[') && segment.endsWith(']'));\n if (hasDynamicSegment) {\n throw Object.defineProperty(new Error(\"Dynamic href `\" + href + \"` found in <Link> while using the `/app` router, this is not supported. Read more: https://nextjs.org/docs/messages/app-dir-dynamic-href\"), \"__NEXT_ERROR_CODE\", {\n value: \"E267\",\n enumerable: false,\n configurable: true\n });\n }\n }\n }\n }\n const { href, as } = _react.default.useMemo({\n \"LinkComponent.useMemo\": ()=>{\n const resolvedHref = formatStringOrUrl(hrefProp);\n return {\n href: resolvedHref,\n as: asProp ? formatStringOrUrl(asProp) : resolvedHref\n };\n }\n }[\"LinkComponent.useMemo\"], [\n hrefProp,\n asProp\n ]);\n // This will return the first child, if multiple are provided it will throw an error\n let child;\n if (legacyBehavior) {\n if (true) {\n if (onClick) {\n console.warn('\"onClick\" was passed to <Link> with `href` of `' + hrefProp + '` but \"legacyBehavior\" was set. The legacy behavior requires onClick be set on the child of next/link');\n }\n if (onMouseEnterProp) {\n console.warn('\"onMouseEnter\" was passed to <Link> with `href` of `' + hrefProp + '` but \"legacyBehavior\" was set. The legacy behavior requires onMouseEnter be set on the child of next/link');\n }\n try {\n child = _react.default.Children.only(children);\n } catch (err) {\n if (!children) {\n throw Object.defineProperty(new Error(\"No children were passed to <Link> with `href` of `\" + hrefProp + \"` but one child is required https://nextjs.org/docs/messages/link-no-children\"), \"__NEXT_ERROR_CODE\", {\n value: \"E320\",\n enumerable: false,\n configurable: true\n });\n }\n throw Object.defineProperty(new Error(\"Multiple children were passed to <Link> with `href` of `\" + hrefProp + \"` but only one child is supported https://nextjs.org/docs/messages/link-multiple-children\" + ( true ? \" \\nOpen your browser's console to view the Component stack trace.\" : 0)), \"__NEXT_ERROR_CODE\", {\n value: \"E266\",\n enumerable: false,\n configurable: true\n });\n }\n } else {}\n } else {\n if (true) {\n if ((children == null ? void 0 : children.type) === 'a') {\n throw Object.defineProperty(new Error('Invalid <Link> with <a> child. Please remove <a> or use <Link legacyBehavior>.\\nLearn more: https://nextjs.org/docs/messages/invalid-new-link-with-extra-anchor'), \"__NEXT_ERROR_CODE\", {\n value: \"E209\",\n enumerable: false,\n configurable: true\n });\n }\n }\n }\n const childRef = legacyBehavior ? child && typeof child === 'object' && child.ref : forwardedRef;\n // Use a callback ref to attach an IntersectionObserver to the anchor tag on\n // mount. In the future we will also use this to keep track of all the\n // currently mounted <Link> instances, e.g. so we can re-prefetch them after\n // a revalidation or refresh.\n const observeLinkVisibilityOnMount = _react.default.useCallback({\n \"LinkComponent.useCallback[observeLinkVisibilityOnMount]\": (element)=>{\n if (router !== null) {\n linkInstanceRef.current = (0, _links.mountLinkInstance)(element, href, router, fetchStrategy, prefetchEnabled, setOptimisticLinkStatus);\n }\n return ({\n \"LinkComponent.useCallback[observeLinkVisibilityOnMount]\": ()=>{\n if (linkInstanceRef.current) {\n (0, _links.unmountLinkForCurrentNavigation)(linkInstanceRef.current);\n linkInstanceRef.current = null;\n }\n (0, _links.unmountPrefetchableInstance)(element);\n }\n })[\"LinkComponent.useCallback[observeLinkVisibilityOnMount]\"];\n }\n }[\"LinkComponent.useCallback[observeLinkVisibilityOnMount]\"], [\n prefetchEnabled,\n href,\n router,\n fetchStrategy,\n setOptimisticLinkStatus\n ]);\n const mergedRef = (0, _usemergedref.useMergedRef)(observeLinkVisibilityOnMount, childRef);\n const childProps = {\n ref: mergedRef,\n onClick (e) {\n if (true) {\n if (!e) {\n throw Object.defineProperty(new Error('Component rendered inside next/link has to pass click event to \"onClick\" prop.'), \"__NEXT_ERROR_CODE\", {\n value: \"E312\",\n enumerable: false,\n configurable: true\n });\n }\n }\n if (!legacyBehavior && typeof onClick === 'function') {\n onClick(e);\n }\n if (legacyBehavior && child.props && typeof child.props.onClick === 'function') {\n child.props.onClick(e);\n }\n if (!router) {\n return;\n }\n if (e.defaultPrevented) {\n return;\n }\n linkClicked(e, href, as, linkInstanceRef, replace, scroll, onNavigate);\n },\n onMouseEnter (e) {\n if (!legacyBehavior && typeof onMouseEnterProp === 'function') {\n onMouseEnterProp(e);\n }\n if (legacyBehavior && child.props && typeof child.props.onMouseEnter === 'function') {\n child.props.onMouseEnter(e);\n }\n if (!router) {\n return;\n }\n if (!prefetchEnabled || \"development\" === 'development') {\n return;\n }\n const upgradeToDynamicPrefetch = unstable_dynamicOnHover === true;\n (0, _links.onNavigationIntent)(e.currentTarget, upgradeToDynamicPrefetch);\n },\n onTouchStart: false ? 0 : function onTouchStart(e) {\n if (!legacyBehavior && typeof onTouchStartProp === 'function') {\n onTouchStartProp(e);\n }\n if (legacyBehavior && child.props && typeof child.props.onTouchStart === 'function') {\n child.props.onTouchStart(e);\n }\n if (!router) {\n return;\n }\n if (!prefetchEnabled) {\n return;\n }\n const upgradeToDynamicPrefetch = unstable_dynamicOnHover === true;\n (0, _links.onNavigationIntent)(e.currentTarget, upgradeToDynamicPrefetch);\n }\n };\n // If child is an <a> tag and doesn't have a href attribute, or if the 'passHref' property is\n // defined, we specify the current 'href', so that repetition is not needed by the user.\n // If the url is absolute, we can bypass the logic to prepend the basePath.\n if ((0, _utils.isAbsoluteUrl)(as)) {\n childProps.href = as;\n } else if (!legacyBehavior || passHref || child.type === 'a' && !('href' in child.props)) {\n childProps.href = (0, _addbasepath.addBasePath)(as);\n }\n let link;\n if (legacyBehavior) {\n if (true) {\n (0, _erroronce.errorOnce)('`legacyBehavior` is deprecated and will be removed in a future ' + 'release. A codemod is available to upgrade your components:\\n\\n' + 'npx @next/codemod@latest new-link .\\n\\n' + 'Learn more: https://nextjs.org/docs/app/building-your-application/upgrading/codemods#remove-a-tags-from-link-components');\n }\n link = /*#__PURE__*/ _react.default.cloneElement(child, childProps);\n } else {\n link = /*#__PURE__*/ (0, _jsxruntime.jsx)(\"a\", {\n ...restProps,\n ...childProps,\n children: children\n });\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(LinkStatusContext.Provider, {\n value: linkStatus,\n children: link\n });\n}\n_s(LinkComponent, \"MNV6IdWv8Lu3MKc7Fm4v59uGRY0=\");\n_c = LinkComponent;\nconst LinkStatusContext = /*#__PURE__*/ (0, _react.createContext)(_links.IDLE_LINK_STATUS);\nconst useLinkStatus = ()=>{\n return (0, _react.useContext)(LinkStatusContext);\n};\nfunction getFetchStrategyFromPrefetchProp(prefetchProp) {\n if (false) {} else {\n return prefetchProp === null || prefetchProp === 'auto' ? _segmentcache.FetchStrategy.PPR : // (although invalid values should've been filtered out by prop validation in dev)\n _segmentcache.FetchStrategy.Full;\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=link.js.map\nvar _c;\n$RefreshReg$(_c, \"LinkComponent\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2FwcC1kaXIvbGluay5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztJQW9UQTs7Ozs7Ozs7O0NBU0MsR0FDRCxPQWthQztlQWxhdUJBOztJQXdhWEMsYUFBYTtlQUFiQTs7Ozs7NkVBcHVCMkQ7dUNBRTlDOzJEQUNPOzBDQUNKO21DQUNDO3lDQUNGO3NDQUNIO21DQVNsQjt3Q0FDb0I7K0NBQ1k7dUNBQ2I7MENBSW5CO0FBME1QLFNBQVNDLGdCQUFnQkMsS0FBdUI7SUFDOUMsTUFBTUMsY0FBY0QsTUFBTUUsYUFBYTtJQUN2QyxNQUFNQyxTQUFTRixZQUFZRyxZQUFZLENBQUM7SUFDeEMsT0FDR0QsVUFBVUEsV0FBVyxXQUN0QkgsTUFBTUssT0FBTyxJQUNiTCxNQUFNTSxPQUFPLElBQ2JOLE1BQU1PLFFBQVEsSUFDZFAsTUFBTVEsTUFBTSxJQUFJLDZCQUE2QjtJQUM1Q1IsTUFBTVMsV0FBVyxJQUFJVCxNQUFNUyxXQUFXLENBQUNDLEtBQUssS0FBSztBQUV0RDtBQUVBLFNBQVNDLFlBQ1BDLENBQW1CLEVBQ25CQyxJQUFZLEVBQ1pDLEVBQVUsRUFDVkMsZUFBcUQsRUFDckRDLE9BQWlCLEVBQ2pCQyxNQUFnQixFQUNoQkMsVUFBbUM7SUFFbkMsTUFBTSxFQUFFQyxRQUFRLEVBQUUsR0FBR1AsRUFBRVYsYUFBYTtJQUVwQyxrREFBa0Q7SUFDbEQsTUFBTWtCLG1CQUFtQkQsU0FBU0UsV0FBVyxPQUFPO0lBRXBELElBQ0dELG9CQUFvQnJCLGdCQUFnQmEsTUFDckNBLEVBQUVWLGFBQWEsQ0FBQ29CLFlBQVksQ0FBQyxhQUM3QjtRQUNBLDhDQUE4QztRQUM5QztJQUNGO0lBRUEsSUFBSSxDQUFDQyxDQUFBQSxHQUFBQSxZQUFBQSxVQUFBQSxFQUFXVixPQUFPO1FBQ3JCLElBQUlHLFNBQVM7WUFDWCw4REFBOEQ7WUFDOUQsK0JBQStCO1lBQy9CSixFQUFFWSxjQUFj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SUFDcEIsT0FBTyxJQUNMLENBQUN1QyxrQkFDRFAsWUFDQ21ELE1BQU1NLElBQUksS0FBSyxPQUFPLENBQUUsV0FBVU4sTUFBTS9ELEtBQUFBLEdBQ3pDO1FBQ0ErRSxXQUFXcEcsSUFBSSxHQUFHMkcsQ0FBQUEsR0FBQUEsYUFBQUEsV0FBQUEsRUFBWTFHO0lBQ2hDO0lBRUEsSUFBSTJHO0lBRUosSUFBSXBFLGdCQUFnQjtRQUNsQixJQUFJYyxJQUFvQixFQUFvQjtZQUMxQ3VELENBQUFBLEdBQUFBLFdBQUFBLFNBQUFBLEVBQ0Usb0VBQ0Usb0VBQ0EsNENBQ0E7UUFFTjtRQUNBRCxPQUFBQSxXQUFBQSxHQUFPOUYsT0FBQUEsT0FBSyxDQUFDZ0csWUFBWSxDQUFDMUIsT0FBT2dCO0lBQ25DLE9BQU87UUFDTFEsT0FBQUEsV0FBQUEsR0FDRSxxQkFBQy9ELEtBQUFBO1lBQUcsR0FBR0QsU0FBUztZQUFHLEdBQUd3RCxVQUFVO3NCQUM3QjFFOztJQUdQO0lBRUEscUJBQ0UscUJBQUNxRixrQkFBa0JDLFFBQVE7UUFBQ0MsT0FBTzNGO2tCQUNoQ3NGOztBQUdQOztLQWxhd0I1SDtBQW9heEIsTUFBTStILG9CQUFBQSxXQUFBQSxHQUFvQkcsQ0FBQUEsR0FBQUEsT0FBQUEsYUFBQUEsRUFFeEJ6RixPQUFBQSxnQkFBZ0I7QUFFWCxNQUFNeEMsZ0JBQWdCO0lBQzNCLE9BQU84RCxDQUFBQSxHQUFBQSxPQUFBQSxVQUFBQSxFQUFXZ0U7QUFDcEI7QUFFQSxTQUFTNUQsaUNBQ1BuQixZQUErRDtJQUUvRCxJQUNFc0IsS0FDdUMsRUFDdkMsRUFvQkQsTUFBTTtRQUNMLE9BQU90QixpQkFBaUIsUUFBUUEsaUJBQWlCLFNBRTdDLGNBQ0FvQixhQUFhLENBQUNDLEdBQUcsR0FFakIsNERBSDhGLHNCQUlaO1FBQ2xGRCxjQUFBQSxhQUFhLENBQUNrRSxJQUFJO0lBQ3hCO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9jbGllbnQvYXBwLWRpci9saW5rLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIGNsaWVudCdcblxuaW1wb3J0IFJlYWN0LCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU9wdGltaXN0aWMsIHVzZVJlZiB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBVcmxPYmplY3QgfSBmcm9tICd1cmwnXG5pbXBvcnQgeyBmb3JtYXRVcmwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9mb3JtYXQtdXJsJ1xuaW1wb3J0IHsgQXBwUm91dGVyQ29udGV4dCB9IGZyb20gJy4uLy4uL3NoYXJlZC9saWIvYXBwLXJvdXRlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgdXNlTWVyZ2VkUmVmIH0gZnJvbSAnLi4vdXNlLW1lcmdlZC1yZWYnXG5pbXBvcnQgeyBpc0Fic29sdXRlVXJsIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi91dGlscydcbmltcG9ydCB7IGFkZEJhc2VQYXRoIH0gZnJvbSAnLi4vYWRkLWJhc2UtcGF0aCdcbmltcG9ydCB7IHdhcm5PbmNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UnXG5pbXBvcnQgdHlwZSB7IFBFTkRJTkdfTElOS19TVEFUVVMgfSBmcm9tICcuLi9jb21wb25lbnRzL2xpbmtzJ1xuaW1wb3J0IHtcbiAgSURMRV9MSU5LX1NUQVRVUyxcbiAgbW91bnRMaW5rSW5zdGFuY2UsXG4gIG9uTmF2aWdhdGlvbkludGVudCxcbiAgdW5tb3VudExpbmtGb3JDdXJyZW50TmF2aWdhdGlvbixcbiAgdW5tb3VudFByZWZldGNoYWJsZUluc3RhbmNlLFxuICB0eXBlIExpbmtJbnN0YW5jZSxcbn0gZnJvbSAnLi4vY29tcG9uZW50cy9saW5rcydcbmltcG9ydCB7IGlzTG9jYWxVUkwgfSBmcm9tICcuLi8uLi9zaGFyZWQvbGliL3JvdXRlci91dGlscy9pcy1sb2NhbC11cmwnXG5pbXBvcnQgeyBkaXNwYXRjaE5hdmlnYXRlQWN0aW9uIH0gZnJvbSAnLi4vY29tcG9uZW50cy9hcHAtcm91dGVyLWluc3RhbmNlJ1xuaW1wb3J0IHsgZXJyb3JPbmNlIH0gZnJvbSAnLi4vLi4vc2hhcmVkL2xpYi91dGlscy9lcnJvci1vbmNlJ1xuaW1wb3J0IHtcbiAgRmV0Y2hTdHJhdGVneSxcbiAgdHlwZSBQcmVmZXRjaFRhc2tGZXRjaFN0cmF0ZWd5LFxufSBmcm9tICcuLi9jb21wb25lbnRzL3NlZ21lbnQtY2FjaGUnXG5cbnR5cGUgVXJsID0gc3RyaW5nIHwgVXJsT2JqZWN0XG50eXBlIFJlcXVpcmVkS2V5czxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0tPzoge30gZXh0ZW5kcyBQaWNrPFQsIEs+ID8gbmV2ZXIgOiBLXG59W2tleW9mIFRdXG50eXBlIE9wdGlvbmFsS2V5czxUPiA9IHtcbiAgW0sgaW4ga2V5b2YgVF0tPzoge30gZXh0ZW5kcyBQaWNrPFQsIEs+ID8gSyA6IG5ldmVyXG59W2tleW9mIFRdXG5cbnR5cGUgT25OYXZpZ2F0ZUV2ZW50SGFuZGxlciA9IChldmVudDogeyBwcmV2ZW50RGVmYXVsdDogKCkgPT4gdm9pZCB9KSA9PiB2b2lkXG5cbnR5cGUgSW50ZXJuYWxMaW5rUHJvcHMgPSB7XG4gIC8qKlxuICAgKiAqKlJlcXVpcmVkKiouIFRoZSBwYXRoIG9yIFVSTCB0byBuYXZpZ2F0ZSB0by4gSXQgY2FuIGFsc28gYmUgYW4gb2JqZWN0IChzaW1pbGFyIHRvIGBVUkxgKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHN4XG4gICAqIC8vIE5hdmlnYXRlIHRvIC9kYXNoYm9hcmQ6XG4gICAqIDxMaW5rIGhyZWY9XCIvZGFzaGJvYXJkXCI+RGFzaGJvYXJkPC9MaW5rPlxuICAgKlxuICAgKiAvLyBOYXZpZ2F0ZSB0byAvYWJvdXQ/bmFtZT10ZXN0OlxuICAgKiA8TGluayBocmVmPXt7IHBhdGhuYW1lOiAnL2Fib3V0JywgcXVlcnk6IHsgbmFtZTogJ3Rlc3QnIH0gfX0+XG4gICAqICAgQWJvdXRcbiAgICogPC9MaW5rPlxuICAgKiBgYGBcbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogLSBGb3IgZXh0ZXJuYWwgVVJMcywgdXNlIGEgZnVsbHkgcXVhbGlmaWVkIFVSTCBzdWNoIGFzIGBodHRwczovLy4uLmAuXG4gICAqIC0gSW4gdGhlIEFwcCBSb3V0ZXIsIGR5bmFtaWMgcm91dGVzIG11c3Qgbm90IGluY2x1ZGUgYnJhY2tldGVkIHNlZ21lbnRzIGluIGBocmVmYC5cbiAgICovXG4gIGhyZWY6IFVybFxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB2MTAuMC4wOiBgaHJlZmAgcHJvcHMgcG9pbnRpbmcgdG8gYSBkeW5hbWljIHJvdXRlIGFyZVxuICAgKiBhdXRvbWF0aWNhbGx5IHJlc29sdmVkIGFuZCBubyBsb25nZXIgcmVxdWlyZSB0aGUgYGFzYCBwcm9wLlxuICAgKi9cbiAgYXM/OiBVcmxcblxuICAvKipcbiAgICogUmVwbGFjZSB0aGUgY3VycmVudCBgaGlzdG9yeWAgc3RhdGUgaW5zdGVhZCBvZiBhZGRpbmcgYSBuZXcgVVJMIGludG8gdGhlIHN0YWNrLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIGBmYWxzZWBcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHN4XG4gICAqIDxMaW5rIGhyZWY9XCIvYWJvdXRcIiByZXBsYWNlPlxuICAgKiAgIEFib3V0IChyZXBsYWNlcyB0aGUgaGlzdG9yeSBzdGF0ZSlcbiAgICogPC9MaW5rPlxuICAgKiBgYGBcbiAgICovXG4gIHJlcGxhY2U/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgc2Nyb2xsIGJlaGF2aW9yLiBJZiBgdHJ1ZWAsIE5leHQuanMgYXR0ZW1wdHMgdG8gbWFpbnRhaW5cbiAgICogdGhlIHNjcm9sbCBwb3NpdGlvbiBpZiB0aGUgbmV3bHkgbmF2aWdhdGVkIHBhZ2UgaXMgc3RpbGwgdmlzaWJsZS4gSWYgbm90LCBpdCBzY3JvbGxzIHRvIHRoZSB0b3AuXG4gICAqXG4gICAqIElmIGBmYWxzZWAsIE5leHQuanMgd2lsbCBub3QgbW9kaWZ5IHRoZSBzY3JvbGwgYmVoYXZpb3IgYXQgYWxsLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIGB0cnVlYFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c3hcbiAgICogPExpbmsgaHJlZj1cIi9kYXNoYm9hcmRcIiBzY3JvbGw9e2ZhbHNlfT5cbiAgICogICBObyBhdXRvIHNjcm9sbFxuICAgKiA8L0xpbms+XG4gICAqIGBgYFxuICAgKi9cbiAgc2Nyb2xsPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBVcGRhdGUgdGhlIHBhdGggb2YgdGhlIGN1cnJlbnQgcGFnZSB3aXRob3V0IHJlcnVubmluZyBkYXRhIGZldGNoaW5nIG1ldGhvZHNcbiAgICogbGlrZSBgZ2V0U3RhdGljUHJvcHNgLCBgZ2V0U2VydmVyU2lkZVByb3BzYCwgb3IgYGdldEluaXRpYWxQcm9wc2AuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIGBzaGFsbG93YCBvbmx5IGFwcGxpZXMgdG8gdGhlIFBhZ2VzIFJvdXRlci4gRm9yIHRoZSBBcHAgUm91dGVyLCBzZWUgdGhlXG4gICAqIFtmb2xsb3dpbmcgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcm91dGluZy9saW5raW5nLWFuZC1uYXZpZ2F0aW5nI3VzaW5nLXRoZS1uYXRpdmUtaGlzdG9yeS1hcGkpLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIGBmYWxzZWBcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHN4XG4gICAqIDxMaW5rIGhyZWY9XCIvYmxvZ1wiIHNoYWxsb3c+XG4gICAqICAgU2hhbGxvdyBuYXZpZ2F0aW9uXG4gICAqIDwvTGluaz5cbiAgICogYGBgXG4gICAqL1xuICBzaGFsbG93PzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBGb3JjZXMgYExpbmtgIHRvIHBhc3MgaXRzIGBocmVmYCB0byB0aGUgY2hpbGQgY29tcG9uZW50LiBVc2VmdWwgaWYgdGhlIGNoaWxkIGlzIGEgY3VzdG9tXG4gICAqIGNvbXBvbmVudCB0aGF0IHdyYXBzIGFuIGA8YT5gIHRhZywgb3IgaWYgeW91J3JlIHVzaW5nIGNlcnRhaW4gc3R5bGluZyBsaWJyYXJpZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgYGZhbHNlYFxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGB0c3hcbiAgICogPExpbmsgaHJlZj1cIi9kYXNoYm9hcmRcIiBwYXNzSHJlZj5cbiAgICogICA8TXlTdHlsZWRBbmNob3I+RGFzaGJvYXJkPC9NeVN0eWxlZEFuY2hvcj5cbiAgICogPC9MaW5rPlxuICAgKiBgYGBcbiAgICovXG4gIHBhc3NIcmVmPzogYm9vbGVhblxuXG4gIC8qKlxuICAgKiBQcmVmZXRjaCB0aGUgcGFnZSBpbiB0aGUgYmFja2dyb3VuZC5cbiAgICogQW55IGA8TGluayAvPmAgdGhhdCBpcyBpbiB0aGUgdmlld3BvcnQgKGluaXRpYWxseSBvciB0aHJvdWdoIHNjcm9sbCkgd2lsbCBiZSBwcmVmZXRjaGVkLlxuICAgKiBQcmVmZXRjaCBjYW4gYmUgZGlzYWJsZWQgYnkgcGFzc2luZyBgcHJlZmV0Y2g9e2ZhbHNlfWAuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIFByZWZldGNoaW5nIGlzIG9ubHkgZW5hYmxlZCBpbiBwcm9kdWN0aW9uLlxuICAgKlxuICAgKiAtIEluIHRoZSAqKkFwcCBSb3V0ZXIqKjpcbiAgICogICAtIGBcImF1dG9cImAsIGBudWxsYCwgYHVuZGVmaW5lZGAgKGRlZmF1bHQpOiBQcmVmZXRjaCBiZWhhdmlvciBkZXBlbmRzIG9uIHN0YXRpYyB2cyBkeW5hbWljIHJvdXRlczpcbiAgICogICAgIC0gU3RhdGljIHJvdXRlczogZnVsbHkgcHJlZmV0Y2hlZFxuICAgKiAgICAgLSBEeW5hbWljIHJvdXRlczogcGFydGlhbCBwcmVmZXRjaCB0byB0aGUgbmVhcmVzdCBzZWdtZW50IHdpdGggYSBgbG9hZGluZy5qc2BcbiAgICogICAtIGB0cnVlYDogQWx3YXlzIHByZWZldGNoIHRoZSBmdWxsIHJvdXRlIGFuZCBkYXRhLlxuICAgKiAgIC0gYGZhbHNlYDogRGlzYWJsZSBwcmVmZXRjaGluZyBvbiBib3RoIHZpZXdwb3J0IGFuZCBob3Zlci5cbiAgICogLSBJbiB0aGUgKipQYWdlcyBSb3V0ZXIqKjpcbiAgICogICAtIGB0cnVlYCAoZGVmYXVsdCk6IFByZWZldGNoZXMgdGhlIHJvdXRlIGFuZCBkYXRhIGluIHRoZSBiYWNrZ3JvdW5kIG9uIHZpZXdwb3J0IG9yIGhvdmVyLlxuICAgKiAgIC0gYGZhbHNlYDogUHJlZmV0Y2ggb25seSBvbiBob3Zlciwgbm90IG9uIHZpZXdwb3J0LlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIGB0cnVlYCAoUGFnZXMgUm91dGVyKSBvciBgbnVsbGAgKEFwcCBSb3V0ZXIpXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzeFxuICAgKiA8TGluayBocmVmPVwiL2Rhc2hib2FyZFwiIHByZWZldGNoPXtmYWxzZX0+XG4gICAqICAgRGFzaGJvYXJkXG4gICAqIDwvTGluaz5cbiAgICogYGBgXG4gICAqL1xuICBwcmVmZXRjaD86IGJvb2xlYW4gfCAnYXV0bycgfCBudWxsIHwgJ3Vuc3RhYmxlX2ZvcmNlU3RhbGUnXG5cbiAgLyoqXG4gICAqICh1bnN0YWJsZSkgU3dpdGNoIHRvIGEgZnVsbCBwcmVmZXRjaCBvbiBob3Zlci4gRWZmZWN0aXZlbHkgdGhlIHNhbWUgYXNcbiAgICogdXBkYXRpbmcgdGhlIHByZWZldGNoIHByb3AgdG8gYHRydWVgIGluIGEgbW91c2UgZXZlbnQuXG4gICAqL1xuICB1bnN0YWJsZV9keW5hbWljT25Ib3Zlcj86IGJvb2xlYW5cblxuICAvKipcbiAgICogVGhlIGFjdGl2ZSBsb2NhbGUgaXMgYXV0b21hdGljYWxseSBwcmVwZW5kZWQgaW4gdGhlIFBhZ2VzIFJvdXRlci4gYGxvY2FsZWAgYWxsb3dzIGZvciBwcm92aWRpbmdcbiAgICogYSBkaWZmZXJlbnQgbG9jYWxlLCBvciBjYW4gYmUgc2V0IHRvIGBmYWxzZWAgdG8gb3B0IG91dCBvZiBhdXRvbWF0aWMgbG9jYWxlIGJlaGF2aW9yLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBOb3RlOiBsb2NhbGUgb25seSBhcHBsaWVzIGluIHRoZSBQYWdlcyBSb3V0ZXIgYW5kIGlzIGlnbm9yZWQgaW4gdGhlIEFwcCBSb3V0ZXIuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBgYHRzeFxuICAgKiAvLyBVc2UgdGhlICdmcicgbG9jYWxlOlxuICAgKiA8TGluayBocmVmPVwiL2Fib3V0XCIgbG9jYWxlPVwiZnJcIj5cbiAgICogICBBYm91dCAoRnJlbmNoKVxuICAgKiA8L0xpbms+XG4gICAqXG4gICAqIC8vIERpc2FibGUgbG9jYWxlIHByZWZpeDpcbiAgICogPExpbmsgaHJlZj1cIi9hYm91dFwiIGxvY2FsZT17ZmFsc2V9PlxuICAgKiAgIEFib3V0IChubyBsb2NhbGUgcHJlZml4KVxuICAgKiA8L0xpbms+XG4gICAqIGBgYFxuICAgKi9cbiAgbG9jYWxlPzogc3RyaW5nIHwgZmFsc2VcblxuICAvKipcbiAgICogRW5hYmxlIGxlZ2FjeSBsaW5rIGJlaGF2aW9yLCByZXF1aXJpbmcgYW4gYDxhPmAgdGFnIHRvIHdyYXAgdGhlIGNoaWxkIGNvbnRlbnRcbiAgICogaWYgdGhlIGNoaWxkIGlzIGEgc3RyaW5nIG9yIG51bWJlci5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyB3aWxsIGJlIHJlbW92ZWQgaW4gdjE2XG4gICAqIEBkZWZhdWx0VmFsdWUgYGZhbHNlYFxuICAgKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvbmV4dC5qcy9jb21taXQvNDg5ZTY1ZWQ5ODU0NGU2OWIwYWZkN2UwY2ZjM2Y5ZjZjMmI4MDNiN1xuICAgKi9cbiAgbGVnYWN5QmVoYXZpb3I/OiBib29sZWFuXG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGV2ZW50IGhhbmRsZXIgZm9yIHdoZW4gdGhlIG1vdXNlIHBvaW50ZXIgaXMgbW92ZWQgb250byB0aGUgYDxMaW5rPmAuXG4gICAqL1xuICBvbk1vdXNlRW50ZXI/OiBSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MQW5jaG9yRWxlbWVudD5cblxuICAvKipcbiAgICogT3B0aW9uYWwgZXZlbnQgaGFuZGxlciBmb3Igd2hlbiB0aGUgYDxMaW5rPmAgaXMgdG91Y2hlZC5cbiAgICovXG4gIG9uVG91Y2hTdGFydD86IFJlYWN0LlRvdWNoRXZlbnRIYW5kbGVyPEhUTUxBbmNob3JFbGVtZW50PlxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBldmVudCBoYW5kbGVyIGZvciB3aGVuIHRoZSBgPExpbms+YCBpcyBjbGlja2VkLlxuICAgKi9cbiAgb25DbGljaz86IFJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxBbmNob3JFbGVtZW50PlxuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBldmVudCBoYW5kbGVyIGZvciB3aGVuIHRoZSBgPExpbms+YCBpcyBuYXZpZ2F0ZWQuXG4gICAqL1xuICBvbk5hdmlnYXRlPzogT25OYXZpZ2F0ZUV2ZW50SGFuZGxlclxufVxuXG4vLyBUT0RPLUFQUDogSW5jbHVkZSB0aGUgZnVsbCBzZXQgb2YgQW5jaG9yIHByb3BzXG4vLyBhZGRpbmcgdGhpcyB0byB0aGUgcHVibGljbHkgZXhwb3J0ZWQgdHlwZSBjdXJyZW50bHkgYnJlYWtzIGV4aXN0aW5nIGFwcHNcblxuLy8gYFJvdXRlSW5mZXJUeXBlYCBpcyBhIHN0dWIgaGVyZSB0byBhdm9pZCBicmVha2luZyBgdHlwZWRSb3V0ZXNgIHdoZW4gdGhlIHR5cGVcbi8vIGlzbid0IGdlbmVyYXRlZCB5ZXQuIEl0IHdpbGwgYmUgcmVwbGFjZWQgd2hlbiB0eXBlIGdlbmVyYXRpb24gcnVucy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbmV4cG9ydCB0eXBlIExpbmtQcm9wczxSb3V0ZUluZmVyVHlwZSA9IGFueT4gPSBJbnRlcm5hbExpbmtQcm9wc1xudHlwZSBMaW5rUHJvcHNSZXF1aXJlZCA9IFJlcXVpcmVkS2V5czxMaW5rUHJvcHM+XG50eXBlIExpbmtQcm9wc09wdGlvbmFsID0gT3B0aW9uYWxLZXlzPE9taXQ8SW50ZXJuYWxMaW5rUHJvcHMsICdsb2NhbGUnPj5cblxuZnVuY3Rpb24gaXNNb2RpZmllZEV2ZW50KGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IGV2ZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MQW5jaG9yRWxlbWVudCB8IFNWR0FFbGVtZW50XG4gIGNvbnN0IHRhcmdldCA9IGV2ZW50VGFyZ2V0LmdldEF0dHJpYnV0ZSgndGFyZ2V0JylcbiAgcmV0dXJuIChcbiAgICAodGFyZ2V0ICYmIHRhcmdldCAhPT0gJ19zZWxmJykgfHxcbiAgICBldmVudC5tZXRhS2V5IHx8XG4gICAgZXZlbnQuY3RybEtleSB8fFxuICAgIGV2ZW50LnNoaWZ0S2V5IHx8XG4gICAgZXZlbnQuYWx0S2V5IHx8IC8vIHRyaWdnZXJzIHJlc291cmNlIGRvd25sb2FkXG4gICAgKGV2ZW50Lm5hdGl2ZUV2ZW50ICYmIGV2ZW50Lm5hdGl2ZUV2ZW50LndoaWNoID09PSAyKVxuICApXG59XG5cbmZ1bmN0aW9uIGxpbmtDbGlja2VkKFxuICBlOiBSZWFjdC5Nb3VzZUV2ZW50LFxuICBocmVmOiBzdHJpbmcsXG4gIGFzOiBzdHJpbmcsXG4gIGxpbmtJbnN0YW5jZVJlZjogUmVhY3QuUmVmT2JqZWN0PExpbmtJbnN0YW5jZSB8IG51bGw+LFxuICByZXBsYWNlPzogYm9vbGVhbixcbiAgc2Nyb2xsPzogYm9vbGVhbixcbiAgb25OYXZpZ2F0ZT86IE9uTmF2aWdhdGVFdmVudEhhbmRsZXJcbik6IHZvaWQge1xuICBjb25zdCB7IG5vZGVOYW1lIH0gPSBlLmN1cnJlbnRUYXJnZXRcblxuICAvLyBhbmNob3JzIGluc2lkZSBhbiBzdmcgaGF2ZSBhIGxvd2VyY2FzZSBub2RlTmFtZVxuICBjb25zdCBpc0FuY2hvck5vZGVOYW1lID0gbm9kZU5hbWUudG9VcHBlckNhc2UoKSA9PT0gJ0EnXG5cbiAgaWYgKFxuICAgIChpc0FuY2hvck5vZGVOYW1lICYmIGlzTW9kaWZpZWRFdmVudChlKSkgfHxcbiAgICBlLmN1cnJlbnRUYXJnZXQuaGFzQXR0cmlidXRlKCdkb3dubG9hZCcpXG4gICkge1xuICAgIC8vIGlnbm9yZSBjbGljayBmb3IgYnJvd3NlcuKAmXMgZGVmYXVsdCBiZWhhdmlvclxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCFpc0xvY2FsVVJMKGhyZWYpKSB7XG4gICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgIC8vIGJyb3dzZXIgZGVmYXVsdCBiZWhhdmlvciBkb2VzIG5vdCByZXBsYWNlIHRoZSBoaXN0b3J5IHN0YXRlXG4gICAgICAvLyBzbyB3ZSBuZWVkIHRvIGRvIGl0IG1hbnVhbGx5XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGxvY2F0aW9uLnJlcGxhY2UoaHJlZilcbiAgICB9XG5cbiAgICAvLyBpZ25vcmUgY2xpY2sgZm9yIGJyb3dzZXLigJlzIGRlZmF1bHQgYmVoYXZpb3JcbiAgICByZXR1cm5cbiAgfVxuXG4gIGUucHJldmVudERlZmF1bHQoKVxuXG4gIGlmIChvbk5hdmlnYXRlKSB7XG4gICAgbGV0IGlzRGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlXG5cbiAgICBvbk5hdmlnYXRlKHtcbiAgICAgIHByZXZlbnREZWZhdWx0OiAoKSA9PiB7XG4gICAgICAgIGlzRGVmYXVsdFByZXZlbnRlZCA9IHRydWVcbiAgICAgIH0sXG4gICAgfSlcblxuICAgIGlmIChpc0RlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfVxuXG4gIFJlYWN0LnN0YXJ0VHJhbnNpdGlvbigoKSA9PiB7XG4gICAgZGlzcGF0Y2hOYXZpZ2F0ZUFjdGlvbihcbiAgICAgIGFzIHx8IGhyZWYsXG4gICAgICByZXBsYWNlID8gJ3JlcGxhY2UnIDogJ3B1c2gnLFxuICAgICAgc2Nyb2xsID8/IHRydWUsXG4gICAgICBsaW5rSW5zdGFuY2VSZWYuY3VycmVudFxuICAgIClcbiAgfSlcbn1cblxuZnVuY3Rpb24gZm9ybWF0U3RyaW5nT3JVcmwodXJsT2JqT3JTdHJpbmc6IFVybE9iamVjdCB8IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgdXJsT2JqT3JTdHJpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHVybE9iak9yU3RyaW5nXG4gIH1cblxuICByZXR1cm4gZm9ybWF0VXJsKHVybE9iak9yU3RyaW5nKVxufVxuXG4vKipcbiAqIEEgUmVhY3QgY29tcG9uZW50IHRoYXQgZXh0ZW5kcyB0aGUgSFRNTCBgPGE+YCBlbGVtZW50IHRvIHByb3ZpZGVcbiAqIFtwcmVmZXRjaGluZ10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vcm91dGluZy9saW5raW5nLWFuZC1uYXZpZ2F0aW5nIzItcHJlZmV0Y2hpbmcpXG4gKiBhbmQgY2xpZW50LXNpZGUgbmF2aWdhdGlvbi4gVGhpcyBpcyB0aGUgcHJpbWFyeSB3YXkgdG8gbmF2aWdhdGUgYmV0d2VlbiByb3V0ZXMgaW4gTmV4dC5qcy5cbiAqXG4gKiBAcmVtYXJrc1xuICogLSBQcmVmZXRjaGluZyBpcyBvbmx5IGVuYWJsZWQgaW4gcHJvZHVjdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2NvbXBvbmVudHMvbGlua1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBMaW5rQ29tcG9uZW50KFxuICBwcm9wczogTGlua1Byb3BzICYge1xuICAgIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcbiAgICByZWY6IFJlYWN0LlJlZjxIVE1MQW5jaG9yRWxlbWVudD5cbiAgfVxuKSB7XG4gIGNvbnN0IFtsaW5rU3RhdHVzLCBzZXRPcHRpbWlzdGljTGlua1N0YXR1c10gPSB1c2VPcHRpbWlzdGljKElETEVfTElOS19TVEFUVVMpXG5cbiAgbGV0IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGVcblxuICBjb25zdCBsaW5rSW5zdGFuY2VSZWYgPSB1c2VSZWY8TGlua0luc3RhbmNlIHwgbnVsbD4obnVsbClcblxuICBjb25zdCB7XG4gICAgaHJlZjogaHJlZlByb3AsXG4gICAgYXM6IGFzUHJvcCxcbiAgICBjaGlsZHJlbjogY2hpbGRyZW5Qcm9wLFxuICAgIHByZWZldGNoOiBwcmVmZXRjaFByb3AgPSBudWxsLFxuICAgIHBhc3NIcmVmLFxuICAgIHJlcGxhY2UsXG4gICAgc2hhbGxvdyxcbiAgICBzY3JvbGwsXG4gICAgb25DbGljayxcbiAgICBvbk1vdXNlRW50ZXI6IG9uTW91c2VFbnRlclByb3AsXG4gICAgb25Ub3VjaFN0YXJ0OiBvblRvdWNoU3RhcnRQcm9wLFxuICAgIGxlZ2FjeUJlaGF2aW9yID0gZmFsc2UsXG4gICAgb25OYXZpZ2F0ZSxcbiAgICByZWY6IGZvcndhcmRlZFJlZixcbiAgICB1bnN0YWJsZV9keW5hbWljT25Ib3ZlcixcbiAgICAuLi5yZXN0UHJvcHNcbiAgfSA9IHByb3BzXG5cbiAgY2hpbGRyZW4gPSBjaGlsZHJlblByb3BcblxuICBpZiAoXG4gICAgbGVnYWN5QmVoYXZpb3IgJiZcbiAgICAodHlwZW9mIGNoaWxkcmVuID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgY2hpbGRyZW4gPT09ICdudW1iZXInKVxuICApIHtcbiAgICBjaGlsZHJlbiA9IDxhPntjaGlsZHJlbn08L2E+XG4gIH1cblxuICBjb25zdCByb3V0ZXIgPSBSZWFjdC51c2VDb250ZXh0KEFwcFJvdXRlckNvbnRleHQpXG5cbiAgY29uc3QgcHJlZmV0Y2hFbmFibGVkID0gcHJlZmV0Y2hQcm9wICE9PSBmYWxzZVxuXG4gIGNvbnN0IGZldGNoU3RyYXRlZ3kgPVxuICAgIHByZWZldGNoUHJvcCAhPT0gZmFsc2VcbiAgICAgID8gZ2V0RmV0Y2hTdHJhdGVneUZyb21QcmVmZXRjaFByb3AocHJlZmV0Y2hQcm9wKVxuICAgICAgOiAvLyBUT0RPOiBpdCBtYWtlcyBubyBzZW5zZSB0byBhc3NpZ24gYSBmZXRjaFN0cmF0ZWd5IHdoZW4gcHJlZmV0Y2hpbmcgaXMgZGlzYWJsZWQuXG4gICAgICAgIEZldGNoU3RyYXRlZ3kuUFBSXG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBmdW5jdGlvbiBjcmVhdGVQcm9wRXJyb3IoYXJnczoge1xuICAgICAga2V5OiBzdHJpbmdcbiAgICAgIGV4cGVjdGVkOiBzdHJpbmdcbiAgICAgIGFjdHVhbDogc3RyaW5nXG4gICAgfSkge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCBwcm9wIHR5cGU6IFRoZSBwcm9wIFxcYCR7YXJncy5rZXl9XFxgIGV4cGVjdHMgYSAke2FyZ3MuZXhwZWN0ZWR9IGluIFxcYDxMaW5rPlxcYCwgYnV0IGdvdCBcXGAke2FyZ3MuYWN0dWFsfVxcYCBpbnN0ZWFkLmAgK1xuICAgICAgICAgICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICAgICAgPyBcIlxcbk9wZW4geW91ciBicm93c2VyJ3MgY29uc29sZSB0byB2aWV3IHRoZSBDb21wb25lbnQgc3RhY2sgdHJhY2UuXCJcbiAgICAgICAgICAgIDogJycpXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gVHlwZVNjcmlwdCB0cmljayBmb3IgdHlwZS1ndWFyZGluZzpcbiAgICBjb25zdCByZXF1aXJlZFByb3BzR3VhcmQ6IFJlY29yZDxMaW5rUHJvcHNSZXF1aXJlZCwgdHJ1ZT4gPSB7XG4gICAgICBocmVmOiB0cnVlLFxuICAgIH0gYXMgY29uc3RcbiAgICBjb25zdCByZXF1aXJlZFByb3BzOiBMaW5rUHJvcHNSZXF1aXJlZFtdID0gT2JqZWN0LmtleXMoXG4gICAgICByZXF1aXJlZFByb3BzR3VhcmRcbiAgICApIGFzIExpbmtQcm9wc1JlcXVpcmVkW11cbiAgICByZXF1aXJlZFByb3BzLmZvckVhY2goKGtleTogTGlua1Byb3BzUmVxdWlyZWQpID0+IHtcbiAgICAgIGlmIChrZXkgPT09ICdocmVmJykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvcHNba2V5XSA9PSBudWxsIHx8XG4gICAgICAgICAgKHR5cGVvZiBwcm9wc1trZXldICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgcHJvcHNba2V5XSAhPT0gJ29iamVjdCcpXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVByb3BFcnJvcih7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBleHBlY3RlZDogJ2BzdHJpbmdgIG9yIGBvYmplY3RgJyxcbiAgICAgICAgICAgIGFjdHVhbDogcHJvcHNba2V5XSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBwcm9wc1trZXldLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFR5cGVTY3JpcHQgdHJpY2sgZm9yIHR5cGUtZ3VhcmRpbmc6XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgY29uc3QgXzogbmV2ZXIgPSBrZXlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gVHlwZVNjcmlwdCB0cmljayBmb3IgdHlwZS1ndWFyZGluZzpcbiAgICBjb25zdCBvcHRpb25hbFByb3BzR3VhcmQ6IFJlY29yZDxMaW5rUHJvcHNPcHRpb25hbCwgdHJ1ZT4gPSB7XG4gICAgICBhczogdHJ1ZSxcbiAgICAgIHJlcGxhY2U6IHRydWUsXG4gICAgICBzY3JvbGw6IHRydWUsXG4gICAgICBzaGFsbG93OiB0cnVlLFxuICAgICAgcGFzc0hyZWY6IHRydWUsXG4gICAgICBwcmVmZXRjaDogdHJ1ZSxcbiAgICAgIHVuc3RhYmxlX2R5bmFtaWNPbkhvdmVyOiB0cnVlLFxuICAgICAgb25DbGljazogdHJ1ZSxcbiAgICAgIG9uTW91c2VFbnRlcjogdHJ1ZSxcbiAgICAgIG9uVG91Y2hTdGFydDogdHJ1ZSxcbiAgICAgIGxlZ2FjeUJlaGF2aW9yOiB0cnVlLFxuICAgICAgb25OYXZpZ2F0ZTogdHJ1ZSxcbiAgICB9IGFzIGNvbnN0XG4gICAgY29uc3Qgb3B0aW9uYWxQcm9wczogTGlua1Byb3BzT3B0aW9uYWxbXSA9IE9iamVjdC5rZXlzKFxuICAgICAgb3B0aW9uYWxQcm9wc0d1YXJkXG4gICAgKSBhcyBMaW5rUHJvcHNPcHRpb25hbFtdXG4gICAgb3B0aW9uYWxQcm9wcy5mb3JFYWNoKChrZXk6IExpbmtQcm9wc09wdGlvbmFsKSA9PiB7XG4gICAgICBjb25zdCB2YWxUeXBlID0gdHlwZW9mIHByb3BzW2tleV1cblxuICAgICAgaWYgKGtleSA9PT0gJ2FzJykge1xuICAgICAgICBpZiAocHJvcHNba2V5XSAmJiB2YWxUeXBlICE9PSAnc3RyaW5nJyAmJiB2YWxUeXBlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVByb3BFcnJvcih7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBleHBlY3RlZDogJ2BzdHJpbmdgIG9yIGBvYmplY3RgJyxcbiAgICAgICAgICAgIGFjdHVhbDogdmFsVHlwZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBrZXkgPT09ICdvbkNsaWNrJyB8fFxuICAgICAgICBrZXkgPT09ICdvbk1vdXNlRW50ZXInIHx8XG4gICAgICAgIGtleSA9PT0gJ29uVG91Y2hTdGFydCcgfHxcbiAgICAgICAga2V5ID09PSAnb25OYXZpZ2F0ZSdcbiAgICAgICkge1xuICAgICAgICBpZiAocHJvcHNba2V5XSAmJiB2YWxUeXBlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgY3JlYXRlUHJvcEVycm9yKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGV4cGVjdGVkOiAnYGZ1bmN0aW9uYCcsXG4gICAgICAgICAgICBhY3R1YWw6IHZhbFR5cGUsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAga2V5ID09PSAncmVwbGFjZScgfHxcbiAgICAgICAga2V5ID09PSAnc2Nyb2xsJyB8fFxuICAgICAgICBrZXkgPT09ICdzaGFsbG93JyB8fFxuICAgICAgICBrZXkgPT09ICdwYXNzSHJlZicgfHxcbiAgICAgICAga2V5ID09PSAnbGVnYWN5QmVoYXZpb3InIHx8XG4gICAgICAgIGtleSA9PT0gJ3Vuc3RhYmxlX2R5bmFtaWNPbkhvdmVyJ1xuICAgICAgKSB7XG4gICAgICAgIGlmIChwcm9wc1trZXldICE9IG51bGwgJiYgdmFsVHlwZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgdGhyb3cgY3JlYXRlUHJvcEVycm9yKHtcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGV4cGVjdGVkOiAnYGJvb2xlYW5gJyxcbiAgICAgICAgICAgIGFjdHVhbDogdmFsVHlwZSxcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ3ByZWZldGNoJykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJvcHNba2V5XSAhPSBudWxsICYmXG4gICAgICAgICAgdmFsVHlwZSAhPT0gJ2Jvb2xlYW4nICYmXG4gICAgICAgICAgcHJvcHNba2V5XSAhPT0gJ2F1dG8nICYmXG4gICAgICAgICAgcHJvcHNba2V5XSAhPT0gJ3Vuc3RhYmxlX2ZvcmNlU3RhbGUnXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVByb3BFcnJvcih7XG4gICAgICAgICAgICBrZXksXG4gICAgICAgICAgICBleHBlY3RlZDogJ2Bib29sZWFuIHwgXCJhdXRvXCIgfCBcInVuc3RhYmxlX2ZvcmNlU3RhbGVcImAnLFxuICAgICAgICAgICAgYWN0dWFsOiB2YWxUeXBlLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFR5cGVTY3JpcHQgdHJpY2sgZm9yIHR5cGUtZ3VhcmRpbmc6XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgY29uc3QgXzogbmV2ZXIgPSBrZXlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAocHJvcHMubG9jYWxlKSB7XG4gICAgICB3YXJuT25jZShcbiAgICAgICAgJ1RoZSBgbG9jYWxlYCBwcm9wIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYG5leHQvbGlua2Agd2hpbGUgdXNpbmcgdGhlIGBhcHBgIHJvdXRlci4gUmVhZCBtb3JlIGFib3V0IGFwcCByb3V0ZXIgaW50ZXJuYWxpemF0aW9uOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9yb3V0aW5nL2ludGVybmF0aW9uYWxpemF0aW9uJ1xuICAgICAgKVxuICAgIH1cbiAgICBpZiAoIWFzUHJvcCkge1xuICAgICAgbGV0IGhyZWY6IHN0cmluZyB8IHVuZGVmaW5lZFxuICAgICAgaWYgKHR5cGVvZiBocmVmUHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaHJlZiA9IGhyZWZQcm9wXG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0eXBlb2YgaHJlZlByb3AgPT09ICdvYmplY3QnICYmXG4gICAgICAgIHR5cGVvZiBocmVmUHJvcC5wYXRobmFtZSA9PT0gJ3N0cmluZydcbiAgICAgICkge1xuICAgICAgICBocmVmID0gaHJlZlByb3AucGF0aG5hbWVcbiAgICAgIH1cblxuICAgICAgaWYgKGhyZWYpIHtcbiAgICAgICAgY29uc3QgaGFzRHluYW1pY1NlZ21lbnQgPSBocmVmXG4gICAgICAgICAgLnNwbGl0KCcvJylcbiAgICAgICAgICAuc29tZSgoc2VnbWVudCkgPT4gc2VnbWVudC5zdGFydHNXaXRoKCdbJykgJiYgc2VnbWVudC5lbmRzV2l0aCgnXScpKVxuXG4gICAgICAgIGlmIChoYXNEeW5hbWljU2VnbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBEeW5hbWljIGhyZWYgXFxgJHtocmVmfVxcYCBmb3VuZCBpbiA8TGluaz4gd2hpbGUgdXNpbmcgdGhlIFxcYC9hcHBcXGAgcm91dGVyLCB0aGlzIGlzIG5vdCBzdXBwb3J0ZWQuIFJlYWQgbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvYXBwLWRpci1keW5hbWljLWhyZWZgXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgeyBocmVmLCBhcyB9ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgY29uc3QgcmVzb2x2ZWRIcmVmID0gZm9ybWF0U3RyaW5nT3JVcmwoaHJlZlByb3ApXG4gICAgcmV0dXJuIHtcbiAgICAgIGhyZWY6IHJlc29sdmVkSHJlZixcbiAgICAgIGFzOiBhc1Byb3AgPyBmb3JtYXRTdHJpbmdPclVybChhc1Byb3ApIDogcmVzb2x2ZWRIcmVmLFxuICAgIH1cbiAgfSwgW2hyZWZQcm9wLCBhc1Byb3BdKVxuXG4gIC8vIFRoaXMgd2lsbCByZXR1cm4gdGhlIGZpcnN0IGNoaWxkLCBpZiBtdWx0aXBsZSBhcmUgcHJvdmlkZWQgaXQgd2lsbCB0aHJvdyBhbiBlcnJvclxuICBsZXQgY2hpbGQ6IGFueVxuICBpZiAobGVnYWN5QmVoYXZpb3IpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgXCJvbkNsaWNrXCIgd2FzIHBhc3NlZCB0byA8TGluaz4gd2l0aCBcXGBocmVmXFxgIG9mIFxcYCR7aHJlZlByb3B9XFxgIGJ1dCBcImxlZ2FjeUJlaGF2aW9yXCIgd2FzIHNldC4gVGhlIGxlZ2FjeSBiZWhhdmlvciByZXF1aXJlcyBvbkNsaWNrIGJlIHNldCBvbiB0aGUgY2hpbGQgb2YgbmV4dC9saW5rYFxuICAgICAgICApXG4gICAgICB9XG4gICAgICBpZiAob25Nb3VzZUVudGVyUHJvcCkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYFwib25Nb3VzZUVudGVyXCIgd2FzIHBhc3NlZCB0byA8TGluaz4gd2l0aCBcXGBocmVmXFxgIG9mIFxcYCR7aHJlZlByb3B9XFxgIGJ1dCBcImxlZ2FjeUJlaGF2aW9yXCIgd2FzIHNldC4gVGhlIGxlZ2FjeSBiZWhhdmlvciByZXF1aXJlcyBvbk1vdXNlRW50ZXIgYmUgc2V0IG9uIHRoZSBjaGlsZCBvZiBuZXh0L2xpbmtgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNoaWxkID0gUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbilcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYE5vIGNoaWxkcmVuIHdlcmUgcGFzc2VkIHRvIDxMaW5rPiB3aXRoIFxcYGhyZWZcXGAgb2YgXFxgJHtocmVmUHJvcH1cXGAgYnV0IG9uZSBjaGlsZCBpcyByZXF1aXJlZCBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9saW5rLW5vLWNoaWxkcmVuYFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYE11bHRpcGxlIGNoaWxkcmVuIHdlcmUgcGFzc2VkIHRvIDxMaW5rPiB3aXRoIFxcYGhyZWZcXGAgb2YgXFxgJHtocmVmUHJvcH1cXGAgYnV0IG9ubHkgb25lIGNoaWxkIGlzIHN1cHBvcnRlZCBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9saW5rLW11bHRpcGxlLWNoaWxkcmVuYCArXG4gICAgICAgICAgICAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAgICAgICAgPyBcIiBcXG5PcGVuIHlvdXIgYnJvd3NlcidzIGNvbnNvbGUgdG8gdmlldyB0aGUgQ29tcG9uZW50IHN0YWNrIHRyYWNlLlwiXG4gICAgICAgICAgICAgIDogJycpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY2hpbGQgPSBSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICAgIGlmICgoY2hpbGRyZW4gYXMgYW55KT8udHlwZSA9PT0gJ2EnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnSW52YWxpZCA8TGluaz4gd2l0aCA8YT4gY2hpbGQuIFBsZWFzZSByZW1vdmUgPGE+IG9yIHVzZSA8TGluayBsZWdhY3lCZWhhdmlvcj4uXFxuTGVhcm4gbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvaW52YWxpZC1uZXctbGluay13aXRoLWV4dHJhLWFuY2hvcidcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNoaWxkUmVmOiBhbnkgPSBsZWdhY3lCZWhhdmlvclxuICAgID8gY2hpbGQgJiYgdHlwZW9mIGNoaWxkID09PSAnb2JqZWN0JyAmJiBjaGlsZC5yZWZcbiAgICA6IGZvcndhcmRlZFJlZlxuXG4gIC8vIFVzZSBhIGNhbGxiYWNrIHJlZiB0byBhdHRhY2ggYW4gSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgdG8gdGhlIGFuY2hvciB0YWcgb25cbiAgLy8gbW91bnQuIEluIHRoZSBmdXR1cmUgd2Ugd2lsbCBhbHNvIHVzZSB0aGlzIHRvIGtlZXAgdHJhY2sgb2YgYWxsIHRoZVxuICAvLyBjdXJyZW50bHkgbW91bnRlZCA8TGluaz4gaW5zdGFuY2VzLCBlLmcuIHNvIHdlIGNhbiByZS1wcmVmZXRjaCB0aGVtIGFmdGVyXG4gIC8vIGEgcmV2YWxpZGF0aW9uIG9yIHJlZnJlc2guXG4gIGNvbnN0IG9ic2VydmVMaW5rVmlzaWJpbGl0eU9uTW91bnQgPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZWxlbWVudDogSFRNTEFuY2hvckVsZW1lbnQgfCBTVkdBRWxlbWVudCkgPT4ge1xuICAgICAgaWYgKHJvdXRlciAhPT0gbnVsbCkge1xuICAgICAgICBsaW5rSW5zdGFuY2VSZWYuY3VycmVudCA9IG1vdW50TGlua0luc3RhbmNlKFxuICAgICAgICAgIGVsZW1lbnQsXG4gICAgICAgICAgaHJlZixcbiAgICAgICAgICByb3V0ZXIsXG4gICAgICAgICAgZmV0Y2hTdHJhdGVneSxcbiAgICAgICAgICBwcmVmZXRjaEVuYWJsZWQsXG4gICAgICAgICAgc2V0T3B0aW1pc3RpY0xpbmtTdGF0dXNcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBpZiAobGlua0luc3RhbmNlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICB1bm1vdW50TGlua0ZvckN1cnJlbnROYXZpZ2F0aW9uKGxpbmtJbnN0YW5jZVJlZi5jdXJyZW50KVxuICAgICAgICAgIGxpbmtJbnN0YW5jZVJlZi5jdXJyZW50ID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHVubW91bnRQcmVmZXRjaGFibGVJbnN0YW5jZShlbGVtZW50KVxuICAgICAgfVxuICAgIH0sXG4gICAgW3ByZWZldGNoRW5hYmxlZCwgaHJlZiwgcm91dGVyLCBmZXRjaFN0cmF0ZWd5LCBzZXRPcHRpbWlzdGljTGlua1N0YXR1c11cbiAgKVxuXG4gIGNvbnN0IG1lcmdlZFJlZiA9IHVzZU1lcmdlZFJlZihvYnNlcnZlTGlua1Zpc2liaWxpdHlPbk1vdW50LCBjaGlsZFJlZilcblxuICBjb25zdCBjaGlsZFByb3BzOiB7XG4gICAgb25Ub3VjaFN0YXJ0PzogUmVhY3QuVG91Y2hFdmVudEhhbmRsZXI8SFRNTEFuY2hvckVsZW1lbnQ+XG4gICAgb25Nb3VzZUVudGVyOiBSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MQW5jaG9yRWxlbWVudD5cbiAgICBvbkNsaWNrOiBSZWFjdC5Nb3VzZUV2ZW50SGFuZGxlcjxIVE1MQW5jaG9yRWxlbWVudD5cbiAgICBocmVmPzogc3RyaW5nXG4gICAgcmVmPzogYW55XG4gIH0gPSB7XG4gICAgcmVmOiBtZXJnZWRSZWYsXG4gICAgb25DbGljayhlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoIWUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgQ29tcG9uZW50IHJlbmRlcmVkIGluc2lkZSBuZXh0L2xpbmsgaGFzIHRvIHBhc3MgY2xpY2sgZXZlbnQgdG8gXCJvbkNsaWNrXCIgcHJvcC5gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghbGVnYWN5QmVoYXZpb3IgJiYgdHlwZW9mIG9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb25DbGljayhlKVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2FjeUJlaGF2aW9yICYmXG4gICAgICAgIGNoaWxkLnByb3BzICYmXG4gICAgICAgIHR5cGVvZiBjaGlsZC5wcm9wcy5vbkNsaWNrID09PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgY2hpbGQucHJvcHMub25DbGljayhlKVxuICAgICAgfVxuXG4gICAgICBpZiAoIXJvdXRlcikge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGUuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgbGlua0NsaWNrZWQoZSwgaHJlZiwgYXMsIGxpbmtJbnN0YW5jZVJlZiwgcmVwbGFjZSwgc2Nyb2xsLCBvbk5hdmlnYXRlKVxuICAgIH0sXG4gICAgb25Nb3VzZUVudGVyKGUpIHtcbiAgICAgIGlmICghbGVnYWN5QmVoYXZpb3IgJiYgdHlwZW9mIG9uTW91c2VFbnRlclByb3AgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb25Nb3VzZUVudGVyUHJvcChlKVxuICAgICAgfVxuXG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2FjeUJlaGF2aW9yICYmXG4gICAgICAgIGNoaWxkLnByb3BzICYmXG4gICAgICAgIHR5cGVvZiBjaGlsZC5wcm9wcy5vbk1vdXNlRW50ZXIgPT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICBjaGlsZC5wcm9wcy5vbk1vdXNlRW50ZXIoZSlcbiAgICAgIH1cblxuICAgICAgaWYgKCFyb3V0ZXIpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICghcHJlZmV0Y2hFbmFibGVkIHx8IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjb25zdCB1cGdyYWRlVG9EeW5hbWljUHJlZmV0Y2ggPSB1bnN0YWJsZV9keW5hbWljT25Ib3ZlciA9PT0gdHJ1ZVxuICAgICAgb25OYXZpZ2F0aW9uSW50ZW50KFxuICAgICAgICBlLmN1cnJlbnRUYXJnZXQgYXMgSFRNTEFuY2hvckVsZW1lbnQgfCBTVkdBRWxlbWVudCxcbiAgICAgICAgdXBncmFkZVRvRHluYW1pY1ByZWZldGNoXG4gICAgICApXG4gICAgfSxcbiAgICBvblRvdWNoU3RhcnQ6IHByb2Nlc3MuZW52Ll9fTkVYVF9MSU5LX05PX1RPVUNIX1NUQVJUXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiBmdW5jdGlvbiBvblRvdWNoU3RhcnQoZSkge1xuICAgICAgICAgIGlmICghbGVnYWN5QmVoYXZpb3IgJiYgdHlwZW9mIG9uVG91Y2hTdGFydFByb3AgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIG9uVG91Y2hTdGFydFByb3AoZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBsZWdhY3lCZWhhdmlvciAmJlxuICAgICAgICAgICAgY2hpbGQucHJvcHMgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjaGlsZC5wcm9wcy5vblRvdWNoU3RhcnQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNoaWxkLnByb3BzLm9uVG91Y2hTdGFydChlKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghcm91dGVyKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXByZWZldGNoRW5hYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgdXBncmFkZVRvRHluYW1pY1ByZWZldGNoID0gdW5zdGFibGVfZHluYW1pY09uSG92ZXIgPT09IHRydWVcbiAgICAgICAgICBvbk5hdmlnYXRpb25JbnRlbnQoXG4gICAgICAgICAgICBlLmN1cnJlbnRUYXJnZXQgYXMgSFRNTEFuY2hvckVsZW1lbnQgfCBTVkdBRWxlbWVudCxcbiAgICAgICAgICAgIHVwZ3JhZGVUb0R5bmFtaWNQcmVmZXRjaFxuICAgICAgICAgIClcbiAgICAgICAgfSxcbiAgfVxuXG4gIC8vIElmIGNoaWxkIGlzIGFuIDxhPiB0YWcgYW5kIGRvZXNuJ3QgaGF2ZSBhIGhyZWYgYXR0cmlidXRlLCBvciBpZiB0aGUgJ3Bhc3NIcmVmJyBwcm9wZXJ0eSBpc1xuICAvLyBkZWZpbmVkLCB3ZSBzcGVjaWZ5IHRoZSBjdXJyZW50ICdocmVmJywgc28gdGhhdCByZXBldGl0aW9uIGlzIG5vdCBuZWVkZWQgYnkgdGhlIHVzZXIuXG4gIC8vIElmIHRoZSB1cmwgaXMgYWJzb2x1dGUsIHdlIGNhbiBieXBhc3MgdGhlIGxvZ2ljIHRvIHByZXBlbmQgdGhlIGJhc2VQYXRoLlxuICBpZiAoaXNBYnNvbHV0ZVVybChhcykpIHtcbiAgICBjaGlsZFByb3BzLmhyZWYgPSBhc1xuICB9IGVsc2UgaWYgKFxuICAgICFsZWdhY3lCZWhhdmlvciB8fFxuICAgIHBhc3NIcmVmIHx8XG4gICAgKGNoaWxkLnR5cGUgPT09ICdhJyAmJiAhKCdocmVmJyBpbiBjaGlsZC5wcm9wcykpXG4gICkge1xuICAgIGNoaWxkUHJvcHMuaHJlZiA9IGFkZEJhc2VQYXRoKGFzKVxuICB9XG5cbiAgbGV0IGxpbms6IFJlYWN0LlJlYWN0Tm9kZVxuXG4gIGlmIChsZWdhY3lCZWhhdmlvcikge1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50Jykge1xuICAgICAgZXJyb3JPbmNlKFxuICAgICAgICAnYGxlZ2FjeUJlaGF2aW9yYCBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgJyArXG4gICAgICAgICAgJ3JlbGVhc2UuIEEgY29kZW1vZCBpcyBhdmFpbGFibGUgdG8gdXBncmFkZSB5b3VyIGNvbXBvbmVudHM6XFxuXFxuJyArXG4gICAgICAgICAgJ25weCBAbmV4dC9jb2RlbW9kQGxhdGVzdCBuZXctbGluayAuXFxuXFxuJyArXG4gICAgICAgICAgJ0xlYXJuIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL3VwZ3JhZGluZy9jb2RlbW9kcyNyZW1vdmUtYS10YWdzLWZyb20tbGluay1jb21wb25lbnRzJ1xuICAgICAgKVxuICAgIH1cbiAgICBsaW5rID0gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCBjaGlsZFByb3BzKVxuICB9IGVsc2Uge1xuICAgIGxpbmsgPSAoXG4gICAgICA8YSB7Li4ucmVzdFByb3BzfSB7Li4uY2hpbGRQcm9wc30+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvYT5cbiAgICApXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxMaW5rU3RhdHVzQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17bGlua1N0YXR1c30+XG4gICAgICB7bGlua31cbiAgICA8L0xpbmtTdGF0dXNDb250ZXh0LlByb3ZpZGVyPlxuICApXG59XG5cbmNvbnN0IExpbmtTdGF0dXNDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxcbiAgdHlwZW9mIFBFTkRJTkdfTElOS19TVEFUVVMgfCB0eXBlb2YgSURMRV9MSU5LX1NUQVRVU1xuPihJRExFX0xJTktfU1RBVFVTKVxuXG5leHBvcnQgY29uc3QgdXNlTGlua1N0YXR1cyA9ICgpID0+IHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoTGlua1N0YXR1c0NvbnRleHQpXG59XG5cbmZ1bmN0aW9uIGdldEZldGNoU3RyYXRlZ3lGcm9tUHJlZmV0Y2hQcm9wKFxuICBwcmVmZXRjaFByb3A6IEV4Y2x1ZGU8TGlua1Byb3BzWydwcmVmZXRjaCddLCB1bmRlZmluZWQgfCBmYWxzZT5cbik6IFByZWZldGNoVGFza0ZldGNoU3RyYXRlZ3kge1xuICBpZiAoXG4gICAgcHJvY2Vzcy5lbnYuX19ORVhUX0NBQ0hFX0NPTVBPTkVOVFMgJiZcbiAgICBwcm9jZXNzLmVudi5fX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEVcbiAgKSB7XG4gICAgLy8gSW4gdGhlIG5ldyBpbXBsZW1lbnRhdGlvbjpcbiAgICAvLyAtIGBwcmVmZXRjaD17dHJ1ZX1gIGlzIGEgcnVudGltZSBwcmVmZXRjaFxuICAgIC8vICAgKGluY2x1ZGVzIGNhY2hlZCBJTyArIHBhcmFtcyArIGNvb2tpZXMsIHdpdGggZHluYW1pYyBob2xlcyBmb3IgdW5jYWNoZWQgSU8pLlxuICAgIC8vIC0gYHVuc3RhYmxlX2ZvcmNlU3RhbGVgIGlzIGEgXCJmdWxsXCIgcHJlZmV0Y2hcbiAgICAvLyAgIChmb3JjZXMgaW5jbHVzaW9uIG9mIGFsbCBkeW5hbWljIGRhdGEsIGkuZS4gdGhlIG9sZCBiZWhhdmlvciBvZiBgcHJlZmV0Y2g9e3RydWV9YClcbiAgICBpZiAocHJlZmV0Y2hQcm9wID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gRmV0Y2hTdHJhdGVneS5QUFJSdW50aW1lXG4gICAgfVxuICAgIGlmIChwcmVmZXRjaFByb3AgPT09ICd1bnN0YWJsZV9mb3JjZVN0YWxlJykge1xuICAgICAgcmV0dXJuIEZldGNoU3RyYXRlZ3kuRnVsbFxuICAgIH1cblxuICAgIC8vIGBudWxsYCBvciBgXCJhdXRvXCJgOiB0aGlzIGlzIHRoZSBkZWZhdWx0IFwiYXV0b1wiIG1vZGUsIHdoZXJlIHdlIHdpbGwgcHJlZmV0Y2ggcGFydGlhbGx5IGlmIHRoZSBsaW5rIGlzIGluIHRoZSB2aWV3cG9ydC5cbiAgICAvLyBUaGlzIHdpbGwgYWxzbyBpbmNsdWRlIGludmFsaWQgcHJvcCB2YWx1ZXMgdGhhdCBkb24ndCBtYXRjaCB0aGUgdHlwZXMgc3BlY2lmaWVkIGhlcmUuXG4gICAgLy8gKGFsdGhvdWdoIHRob3NlIHNob3VsZCd2ZSBiZWVuIGZpbHRlcmVkIG91dCBieSBwcm9wIHZhbGlkYXRpb24gaW4gZGV2KVxuICAgIHByZWZldGNoUHJvcCBzYXRpc2ZpZXMgbnVsbCB8ICdhdXRvJ1xuICAgIC8vIEluIGBjbGllbnRTZWdtZW50Q2FjaGVgLCB3ZSBkZWZhdWx0IHRvIFBQUiwgYW5kIHdlJ2xsIGRpc2NvdmVyIHdoZXRoZXIgb3Igbm90IHRoZSByb3V0ZSBzdXBwb3J0cyBpdCB3aXRoIHRoZSBpbml0aWFsIHByZWZldGNoLlxuICAgIC8vIElmIHdlJ3JlIG5vdCB1c2luZyBgY2xpZW50U2VnbWVudENhY2hlYCwgdGhpcyB3aWxsIGJlIGNvbnZlcnRlZCBpbnRvIGEgYFByZWZldGNoS2luZC5BVVRPYC5cbiAgICByZXR1cm4gRmV0Y2hTdHJhdGVneS5QUFJcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcHJlZmV0Y2hQcm9wID09PSBudWxsIHx8IHByZWZldGNoUHJvcCA9PT0gJ2F1dG8nXG4gICAgICA/IC8vIEluIGBjbGllbnRTZWdtZW50Q2FjaGVgLCB3ZSBkZWZhdWx0IHRvIFBQUiwgYW5kIHdlJ2xsIGRpc2NvdmVyIHdoZXRoZXIgb3Igbm90IHRoZSByb3V0ZSBzdXBwb3J0cyBpdCB3aXRoIHRoZSBpbml0aWFsIHByZWZldGNoLlxuICAgICAgICAvLyBJZiB3ZSdyZSBub3QgdXNpbmcgYGNsaWVudFNlZ21lbnRDYWNoZWAsIHRoaXMgd2lsbCBiZSBjb252ZXJ0ZWQgaW50byBhIGBQcmVmZXRjaEtpbmQuQVVUT2AuXG4gICAgICAgIEZldGNoU3RyYXRlZ3kuUFBSXG4gICAgICA6IC8vIEluIHRoZSBvbGQgaW1wbGVtZW50YXRpb24gd2l0aG91dCBydW50aW1lIHByZWZldGNoZXMsIGBwcmVmZXRjaD17dHJ1ZX1gIGZvcmNlcyBhbGwgZHluYW1pYyBkYXRhIHRvIGJlIHByZWZldGNoZWQuXG4gICAgICAgIC8vIFRvIHByZXNlcnZlIGJhY2t3YXJkcy1jb21wYXRpYmlsaXR5LCBhbnl0aGluZyBvdGhlciB0aGFuIGBmYWxzZWAsIGBudWxsYCwgb3IgYFwiYXV0b1wiYCByZXN1bHRzIGluIGEgZnVsbCBwcmVmZXRjaC5cbiAgICAgICAgLy8gKGFsdGhvdWdoIGludmFsaWQgdmFsdWVzIHNob3VsZCd2ZSBiZWVuIGZpbHRlcmVkIG91dCBieSBwcm9wIHZhbGlkYXRpb24gaW4gZGV2KVxuICAgICAgICBGZXRjaFN0cmF0ZWd5LkZ1bGxcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkxpbmtDb21wb25lbnQiLCJ1c2VMaW5rU3RhdHVzIiwiaXNNb2RpZmllZEV2ZW50IiwiZXZlbnQiLCJldmVudFRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJ0YXJnZXQiLCJnZXRBdHRyaWJ1dGUiLCJtZXRhS2V5IiwiY3RybEtleSIsInNoaWZ0S2V5IiwiYWx0S2V5IiwibmF0aXZlRXZlbnQiLCJ3aGljaCIsImxpbmtDbGlja2VkIiwiZSIsImhyZWYiLCJhcyIsImxpbmtJbnN0YW5jZVJlZiIsInJlcGxhY2UiLCJzY3JvbGwiLCJvbk5hdmlnYXRlIiwibm9kZU5hbWUiLCJpc0FuY2hvck5vZGVOYW1lIiwidG9VcHBlckNhc2UiLCJoYXNBdHRyaWJ1dGUiLCJpc0xvY2FsVVJMIiwicHJldmVudERlZmF1bHQiLCJsb2NhdGlvbiIsImlzRGVmYXVsdFByZXZlbnRlZCIsIlJlYWN0Iiwic3RhcnRUcmFuc2l0aW9uIiwiZGlzcGF0Y2hOYXZpZ2F0ZUFjdGlvbiIsImN1cnJlbnQiLCJmb3JtYXRTdHJpbmdPclVybCIsInVybE9iak9yU3RyaW5nIiwiZm9ybWF0VXJsIiwicHJvcHMiLCJsaW5rU3RhdHVzIiwic2V0T3B0aW1pc3RpY0xpbmtTdGF0dXMiLCJ1c2VPcHRpbWlzdGljIiwiSURMRV9MSU5LX1NUQVRVUyIsImNoaWxkcmVuIiwidXNlUmVmIiwiaHJlZlByb3AiLCJhc1Byb3AiLCJjaGlsZHJlblByb3AiLCJwcmVmZXRjaCIsInByZWZldGNoUHJvcCIsInBhc3NIcmVmIiwic2hhbGxvdyIsIm9uQ2xpY2siLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlRW50ZXJQcm9wIiwib25Ub3VjaFN0YXJ0Iiwib25Ub3VjaFN0YXJ0UHJvcCIsImxlZ2FjeUJlaGF2aW9yIiwicmVmIiwiZm9yd2FyZGVkUmVmIiwidW5zdGFibGVfZHluYW1pY09uSG92ZXIiLCJyZXN0UHJvcHMiLCJhIiwicm91dGVyIiwidXNlQ29udGV4dCIsIkFwcFJvdXRlckNvbnRleHQiLCJwcmVmZXRjaEVuYWJsZWQiLCJmZXRjaFN0cmF0ZWd5IiwiZ2V0RmV0Y2hTdHJhdGVneUZyb21QcmVmZXRjaFByb3AiLCJGZXRjaFN0cmF0ZWd5IiwiUFBSIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiY3JlYXRlUHJvcEVycm9yIiwiYXJncyIsIkVycm9yIiwia2V5IiwiZXhwZWN0ZWQiLCJhY3R1YWwiLCJ3aW5kb3ciLCJyZXF1aXJlZFByb3BzR3VhcmQiLCJyZXF1aXJlZFByb3BzIiwiT2JqZWN0Iiwia2V5cyIsImZvckVhY2giLCJfIiwib3B0aW9uYWxQcm9wc0d1YXJkIiwib3B0aW9uYWxQcm9wcyIsInZhbFR5cGUiLCJsb2NhbGUiLCJ3YXJuT25jZSIsInBhdGhuYW1lIiwiaGFzRHluYW1pY1NlZ21lbnQiLCJzcGxpdCIsInNvbWUiLCJzZWdtZW50Iiwic3RhcnRzV2l0aCIsImVuZHNXaXRoIiwidXNlTWVtbyIsInJlc29sdmVkSHJlZiIsImNoaWxkIiwiY29uc29sZSIsIndhcm4iLCJDaGlsZHJlbiIsIm9ubHkiLCJlcnIiLCJ0eXBlIiwiY2hpbGRSZWYiLCJvYnNlcnZlTGlua1Zpc2liaWxpdHlPbk1vdW50IiwidXNlQ2FsbGJhY2siLCJlbGVtZW50IiwibW91bnRMaW5rSW5zdGFuY2UiLCJ1bm1vdW50TGlua0ZvckN1cnJlbnROYXZpZ2F0aW9uIiwidW5tb3VudFByZWZldGNoYWJsZUluc3RhbmNlIiwibWVyZ2VkUmVmIiwidXNlTWVyZ2VkUmVmIiwiY2hpbGRQcm9wcyIsImRlZmF1bHRQcmV2ZW50ZWQiLCJ1cGdyYWRlVG9EeW5hbWljUHJlZmV0Y2giLCJvbk5hdmlnYXRpb25JbnRlbnQiLCJfX05FWFRfTElOS19OT19UT1VDSF9TVEFSVCIsInVuZGVmaW5lZCIsImlzQWJzb2x1dGVVcmwiLCJhZGRCYXNlUGF0aCIsImxpbmsiLCJlcnJvck9uY2UiLCJjbG9uZUVsZW1lbnQiLCJMaW5rU3RhdHVzQ29udGV4dCIsIlByb3ZpZGVyIiwidmFsdWUiLCJjcmVhdGVDb250ZXh0IiwiX19ORVhUX0NBQ0hFX0NPTVBPTkVOVFMiLCJfX05FWFRfQ0xJRU5UX1NFR01FTlRfQ0FDSEUiLCJQUFJSdW50aW1lIiwiRnVsbCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/image-component.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/image-component.js ***!
|
||
\**********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"Image\", ({\n enumerable: true,\n get: function() {\n return Image;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _reactdom = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react-dom */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react-dom/index.js\"));\nconst _head = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ../shared/lib/head */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/head.js\"));\nconst _getimgprops = __webpack_require__(/*! ../shared/lib/get-img-props */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/get-img-props.js\");\nconst _imageconfig = __webpack_require__(/*! ../shared/lib/image-config */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/image-config.js\");\nconst _imageconfigcontextsharedruntime = __webpack_require__(/*! ../shared/lib/image-config-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js\");\nconst _warnonce = __webpack_require__(/*! ../shared/lib/utils/warn-once */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nconst _routercontextsharedruntime = __webpack_require__(/*! ../shared/lib/router-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\");\nconst _imageloader = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/shared/lib/image-loader */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/image-loader.js\"));\nconst _usemergedref = __webpack_require__(/*! ./use-merged-ref */ \"(app-pages-browser)/./node_modules/next/dist/client/use-merged-ref.js\");\n// This is replaced by webpack define plugin\nconst configEnv = {\"deviceSizes\":[640,750,828,1080,1200,1920,2048,3840],\"imageSizes\":[16,32,48,64,96,128,256,384],\"path\":\"/_next/image\",\"loader\":\"default\",\"dangerouslyAllowSVG\":false,\"unoptimized\":false,\"domains\":[],\"remotePatterns\":[],\"output\":\"standalone\"};\nif (false) {}\n// See https://stackoverflow.com/q/39777833/266535 for why we use this ref\n// handler instead of the img's onLoad attribute.\nfunction handleLoading(img, placeholder, onLoadRef, onLoadingCompleteRef, setBlurComplete, unoptimized, sizesInput) {\n const src = img == null ? void 0 : img.src;\n if (!img || img['data-loaded-src'] === src) {\n return;\n }\n img['data-loaded-src'] = src;\n const p = 'decode' in img ? img.decode() : Promise.resolve();\n p.catch(()=>{}).then(()=>{\n if (!img.parentElement || !img.isConnected) {\n // Exit early in case of race condition:\n // - onload() is called\n // - decode() is called but incomplete\n // - unmount is called\n // - decode() completes\n return;\n }\n if (placeholder !== 'empty') {\n setBlurComplete(true);\n }\n if (onLoadRef == null ? void 0 : onLoadRef.current) {\n // Since we don't have the SyntheticEvent here,\n // we must create one with the same shape.\n // See https://reactjs.org/docs/events.html\n const event = new Event('load');\n Object.defineProperty(event, 'target', {\n writable: false,\n value: img\n });\n let prevented = false;\n let stopped = false;\n onLoadRef.current({\n ...event,\n nativeEvent: event,\n currentTarget: img,\n target: img,\n isDefaultPrevented: ()=>prevented,\n isPropagationStopped: ()=>stopped,\n persist: ()=>{},\n preventDefault: ()=>{\n prevented = true;\n event.preventDefault();\n },\n stopPropagation: ()=>{\n stopped = true;\n event.stopPropagation();\n }\n });\n }\n if (onLoadingCompleteRef == null ? void 0 : onLoadingCompleteRef.current) {\n onLoadingCompleteRef.current(img);\n }\n if (true) {\n const origSrc = new URL(src, 'http://n').searchParams.get('url') || src;\n if (img.getAttribute('data-nimg') === 'fill') {\n if (!unoptimized && (!sizesInput || sizesInput === '100vw')) {\n let widthViewportRatio = img.getBoundingClientRect().width / window.innerWidth;\n if (widthViewportRatio < 0.6) {\n if (sizesInput === '100vw') {\n (0, _warnonce.warnOnce)('Image with src \"' + origSrc + '\" has \"fill\" prop and \"sizes\" prop of \"100vw\", but image is not rendered at full viewport width. Please adjust \"sizes\" to improve page performance. Read more: https://nextjs.org/docs/api-reference/next/image#sizes');\n } else {\n (0, _warnonce.warnOnce)('Image with src \"' + origSrc + '\" has \"fill\" but is missing \"sizes\" prop. Please add it to improve page performance. Read more: https://nextjs.org/docs/api-reference/next/image#sizes');\n }\n }\n }\n if (img.parentElement) {\n const { position } = window.getComputedStyle(img.parentElement);\n const valid = [\n 'absolute',\n 'fixed',\n 'relative'\n ];\n if (!valid.includes(position)) {\n (0, _warnonce.warnOnce)('Image with src \"' + origSrc + '\" has \"fill\" and parent element with invalid \"position\". Provided \"' + position + '\" should be one of ' + valid.map(String).join(',') + \".\");\n }\n }\n if (img.height === 0) {\n (0, _warnonce.warnOnce)('Image with src \"' + origSrc + '\" has \"fill\" and a height value of 0. This is likely because the parent element of the image has not been styled to have a set height.');\n }\n }\n const heightModified = img.height.toString() !== img.getAttribute('height');\n const widthModified = img.width.toString() !== img.getAttribute('width');\n if (heightModified && !widthModified || !heightModified && widthModified) {\n (0, _warnonce.warnOnce)('Image with src \"' + origSrc + '\" has either width or height modified, but not the other. If you use CSS to change the size of your image, also include the styles \\'width: \"auto\"\\' or \\'height: \"auto\"\\' to maintain the aspect ratio.');\n }\n }\n });\n}\nfunction getDynamicProps(fetchPriority) {\n if (Boolean(_react.use)) {\n // In React 19.0.0 or newer, we must use camelCase\n // prop to avoid \"Warning: Invalid DOM property\".\n // See https://github.com/facebook/react/pull/25927\n return {\n fetchPriority\n };\n }\n // In React 18.2.0 or older, we must use lowercase prop\n // to avoid \"Warning: Invalid DOM property\".\n return {\n fetchpriority: fetchPriority\n };\n}\nconst ImageElement = /*#__PURE__*/ (0, _react.forwardRef)((param, forwardedRef)=>{\n let { src, srcSet, sizes, height, width, decoding, className, style, fetchPriority, placeholder, loading, unoptimized, fill, onLoadRef, onLoadingCompleteRef, setBlurComplete, setShowAltText, sizesInput, onLoad, onError, ...rest } = param;\n const ownRef = (0, _react.useCallback)((img)=>{\n if (!img) {\n return;\n }\n if (onError) {\n // If the image has an error before react hydrates, then the error is lost.\n // The workaround is to wait until the image is mounted which is after hydration,\n // then we set the src again to trigger the error handler (if there was an error).\n // eslint-disable-next-line no-self-assign\n img.src = img.src;\n }\n if (true) {\n if (!src) {\n console.error('Image is missing required \"src\" property:', img);\n }\n if (img.getAttribute('alt') === null) {\n console.error('Image is missing required \"alt\" property. Please add Alternative Text to describe the image for screen readers and search engines.');\n }\n }\n if (img.complete) {\n handleLoading(img, placeholder, onLoadRef, onLoadingCompleteRef, setBlurComplete, unoptimized, sizesInput);\n }\n }, [\n src,\n placeholder,\n onLoadRef,\n onLoadingCompleteRef,\n setBlurComplete,\n onError,\n unoptimized,\n sizesInput\n ]);\n const ref = (0, _usemergedref.useMergedRef)(forwardedRef, ownRef);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(\"img\", {\n ...rest,\n ...getDynamicProps(fetchPriority),\n // It's intended to keep `loading` before `src` because React updates\n // props in order which causes Safari/Firefox to not lazy load properly.\n // See https://github.com/facebook/react/issues/25883\n loading: loading,\n width: width,\n height: height,\n decoding: decoding,\n \"data-nimg\": fill ? 'fill' : '1',\n className: className,\n style: style,\n // It's intended to keep `src` the last attribute because React updates\n // attributes in order. If we keep `src` the first one, Safari will\n // immediately start to fetch `src`, before `sizes` and `srcSet` are even\n // updated by React. That causes multiple unnecessary requests if `srcSet`\n // and `sizes` are defined.\n // This bug cannot be reproduced in Chrome or Firefox.\n sizes: sizes,\n srcSet: srcSet,\n src: src,\n ref: ref,\n onLoad: (event)=>{\n const img = event.currentTarget;\n handleLoading(img, placeholder, onLoadRef, onLoadingCompleteRef, setBlurComplete, unoptimized, sizesInput);\n },\n onError: (event)=>{\n // if the real image fails to load, this will ensure \"alt\" is visible\n setShowAltText(true);\n if (placeholder !== 'empty') {\n // If the real image fails to load, this will still remove the placeholder.\n setBlurComplete(true);\n }\n if (onError) {\n onError(event);\n }\n }\n });\n});\nfunction ImagePreload(param) {\n let { isAppRouter, imgAttributes } = param;\n const opts = {\n as: 'image',\n imageSrcSet: imgAttributes.srcSet,\n imageSizes: imgAttributes.sizes,\n crossOrigin: imgAttributes.crossOrigin,\n referrerPolicy: imgAttributes.referrerPolicy,\n ...getDynamicProps(imgAttributes.fetchPriority)\n };\n if (isAppRouter && _reactdom.default.preload) {\n _reactdom.default.preload(imgAttributes.src, opts);\n return null;\n }\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_head.default, {\n children: /*#__PURE__*/ (0, _jsxruntime.jsx)(\"link\", {\n rel: \"preload\",\n // Note how we omit the `href` attribute, as it would only be relevant\n // for browsers that do not support `imagesrcset`, and in those cases\n // it would cause the incorrect image to be preloaded.\n //\n // https://html.spec.whatwg.org/multipage/semantics.html#attr-link-imagesrcset\n href: imgAttributes.srcSet ? undefined : imgAttributes.src,\n ...opts\n }, '__nimg-' + imgAttributes.src + imgAttributes.srcSet + imgAttributes.sizes)\n });\n}\n_c = ImagePreload;\nconst Image = /*#__PURE__*/ (0, _react.forwardRef)((props, forwardedRef)=>{\n const pagesRouter = (0, _react.useContext)(_routercontextsharedruntime.RouterContext);\n // We're in the app directory if there is no pages router.\n const isAppRouter = !pagesRouter;\n const configContext = (0, _react.useContext)(_imageconfigcontextsharedruntime.ImageConfigContext);\n const config = (0, _react.useMemo)(()=>{\n var _c_qualities;\n const c = configEnv || configContext || _imageconfig.imageConfigDefault;\n const allSizes = [\n ...c.deviceSizes,\n ...c.imageSizes\n ].sort((a, b)=>a - b);\n const deviceSizes = c.deviceSizes.sort((a, b)=>a - b);\n const qualities = (_c_qualities = c.qualities) == null ? void 0 : _c_qualities.sort((a, b)=>a - b);\n return {\n ...c,\n allSizes,\n deviceSizes,\n qualities\n };\n }, [\n configContext\n ]);\n const { onLoad, onLoadingComplete } = props;\n const onLoadRef = (0, _react.useRef)(onLoad);\n (0, _react.useEffect)(()=>{\n onLoadRef.current = onLoad;\n }, [\n onLoad\n ]);\n const onLoadingCompleteRef = (0, _react.useRef)(onLoadingComplete);\n (0, _react.useEffect)(()=>{\n onLoadingCompleteRef.current = onLoadingComplete;\n }, [\n onLoadingComplete\n ]);\n const [blurComplete, setBlurComplete] = (0, _react.useState)(false);\n const [showAltText, setShowAltText] = (0, _react.useState)(false);\n const { props: imgAttributes, meta: imgMeta } = (0, _getimgprops.getImgProps)(props, {\n defaultLoader: _imageloader.default,\n imgConf: config,\n blurComplete,\n showAltText\n });\n return /*#__PURE__*/ (0, _jsxruntime.jsxs)(_jsxruntime.Fragment, {\n children: [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(ImageElement, {\n ...imgAttributes,\n unoptimized: imgMeta.unoptimized,\n placeholder: imgMeta.placeholder,\n fill: imgMeta.fill,\n onLoadRef: onLoadRef,\n onLoadingCompleteRef: onLoadingCompleteRef,\n setBlurComplete: setBlurComplete,\n setShowAltText: setShowAltText,\n sizesInput: props.sizes,\n ref: forwardedRef\n }),\n imgMeta.priority ? /*#__PURE__*/ (0, _jsxruntime.jsx)(ImagePreload, {\n isAppRouter: isAppRouter,\n imgAttributes: imgAttributes\n }) : null\n ]\n });\n});\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=image-component.js.map\nvar _c;\n$RefreshReg$(_c, \"ImagePreload\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L2ltYWdlLWNvbXBvbmVudC5qcyIsIm1hcHBpbmdzIjoiOzs7O3lDQXFXYUE7OztlQUFBQTs7Ozs7OzZFQTFWTjsrRUFDYzsyRUFDSjt5Q0FDVzt5Q0FZTzs2REFDQTtzQ0FDVjt3REFDSztrRkFHSjswQ0FDRztBQUU3Qiw0Q0FBNEM7QUFDNUMsTUFBTUMsWUFBWUMsZ1BBQTZCO0FBRS9DLElBQUksS0FBNkIsRUFBRSxFQUVsQztBQW1CRCwwRUFBMEU7QUFDMUUsaURBQWlEO0FBQ2pELFNBQVNNLGNBQ1BDLEdBQTJCLEVBQzNCQyxXQUE2QixFQUM3QkMsU0FBcUQsRUFDckRDLG9CQUEyRSxFQUMzRUMsZUFBcUMsRUFDckNDLFdBQW9CLEVBQ3BCQyxVQUE4QjtJQUU5QixNQUFNQyxNQUFNUCxPQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxJQUFLTyxHQUFHO0lBQ3BCLElBQUksQ0FBQ1AsT0FBT0EsR0FBRyxDQUFDLGtCQUFrQixLQUFLTyxLQUFLO1FBQzFDO0lBQ0Y7SUFDQVAsR0FBRyxDQUFDLGtCQUFrQixHQUFHTztJQUN6QixNQUFNQyxJQUFJLFlBQVlSLE1BQU1BLElBQUlTLE1BQU0sS0FBS0MsUUFBUUMsT0FBTztJQUMxREgsRUFBRUksS0FBSyxDQUFDLEtBQU8sR0FBR0MsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQ2IsSUFBSWMsYUFBYSxJQUFJLENBQUNkLElBQUllLFdBQVcsRUFBRTtZQUMxQyx3Q0FBd0M7WUFDeEMsdUJBQXVCO1lBQ3ZCLHNDQUFzQztZQUN0QyxzQkFBc0I7WUFDdEIsdUJBQXVCO1lBQ3ZCO1FBQ0Y7UUFDQSxJQUFJZCxnQkFBZ0IsU0FBUztZQUMzQkcsZ0JBQWdCO1FBQ2xCO1FBQ0EsSUFBSUYsYUFBQUEsT0FBQUEsS0FBQUEsSUFBQUEsVUFBV2MsT0FBTyxFQUFFO1lBQ3RCLCtDQUErQztZQUMvQywwQ0FBMEM7WUFDMUMsMkNBQTJDO1lBQzND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QUNiQyxlQUFlQTtpQkFFZjs7O0FBR1YiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9zcmMvY2xpZW50L2ltYWdlLWNvbXBvbmVudC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBjbGllbnQnXG5cbmltcG9ydCBSZWFjdCwge1xuICB1c2VSZWYsXG4gIHVzZUVmZmVjdCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxuICBmb3J3YXJkUmVmLFxuICB1c2UsXG59IGZyb20gJ3JlYWN0J1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcbmltcG9ydCBIZWFkIGZyb20gJy4uL3NoYXJlZC9saWIvaGVhZCdcbmltcG9ydCB7IGdldEltZ1Byb3BzIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9nZXQtaW1nLXByb3BzJ1xuaW1wb3J0IHR5cGUge1xuICBJbWFnZVByb3BzLFxuICBJbWdQcm9wcyxcbiAgT25Mb2FkLFxuICBPbkxvYWRpbmdDb21wbGV0ZSxcbiAgUGxhY2Vob2xkZXJWYWx1ZSxcbn0gZnJvbSAnLi4vc2hhcmVkL2xpYi9nZXQtaW1nLXByb3BzJ1xuaW1wb3J0IHR5cGUge1xuICBJbWFnZUNvbmZpZ0NvbXBsZXRlLFxuICBJbWFnZUxvYWRlclByb3BzLFxufSBmcm9tICcuLi9zaGFyZWQvbGliL2ltYWdlLWNvbmZpZydcbmltcG9ydCB7IGltYWdlQ29uZmlnRGVmYXVsdCB9IGZyb20gJy4uL3NoYXJlZC9saWIvaW1hZ2UtY29uZmlnJ1xuaW1wb3J0IHsgSW1hZ2VDb25maWdDb250ZXh0IH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9pbWFnZS1jb25maWctY29udGV4dC5zaGFyZWQtcnVudGltZSdcbmltcG9ydCB7IHdhcm5PbmNlIH0gZnJvbSAnLi4vc2hhcmVkL2xpYi91dGlscy93YXJuLW9uY2UnXG5pbXBvcnQgeyBSb3V0ZXJDb250ZXh0IH0gZnJvbSAnLi4vc2hhcmVkL2xpYi9yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZSdcblxuLy8gVGhpcyBpcyByZXBsYWNlZCBieSB3ZWJwYWNrIGFsaWFzXG5pbXBvcnQgZGVmYXVsdExvYWRlciBmcm9tICduZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pbWFnZS1sb2FkZXInXG5pbXBvcnQgeyB1c2VNZXJnZWRSZWYgfSBmcm9tICcuL3VzZS1tZXJnZWQtcmVmJ1xuXG4vLyBUaGlzIGlzIHJlcGxhY2VkIGJ5IHdlYnBhY2sgZGVmaW5lIHBsdWdpblxuY29uc3QgY29uZmlnRW52ID0gcHJvY2Vzcy5lbnYuX19ORVhUX0lNQUdFX09QVFMgYXMgYW55IGFzIEltYWdlQ29uZmlnQ29tcGxldGVcblxuaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSB7XG4gIDsoZ2xvYmFsVGhpcyBhcyBhbnkpLl9fTkVYVF9JTUFHRV9JTVBPUlRFRCA9IHRydWVcbn1cblxuZXhwb3J0IHR5cGUgeyBJbWFnZUxvYWRlclByb3BzIH1cbmV4cG9ydCB0eXBlIEltYWdlTG9hZGVyID0gKHA6IEltYWdlTG9hZGVyUHJvcHMpID0+IHN0cmluZ1xuXG50eXBlIEltZ0VsZW1lbnRXaXRoRGF0YVByb3AgPSBIVE1MSW1hZ2VFbGVtZW50ICYge1xuICAnZGF0YS1sb2FkZWQtc3JjJzogc3RyaW5nIHwgdW5kZWZpbmVkXG59XG5cbnR5cGUgSW1hZ2VFbGVtZW50UHJvcHMgPSBJbWdQcm9wcyAmIHtcbiAgdW5vcHRpbWl6ZWQ6IGJvb2xlYW5cbiAgcGxhY2Vob2xkZXI6IFBsYWNlaG9sZGVyVmFsdWVcbiAgb25Mb2FkUmVmOiBSZWFjdC5NdXRhYmxlUmVmT2JqZWN0PE9uTG9hZCB8IHVuZGVmaW5lZD5cbiAgb25Mb2FkaW5nQ29tcGxldGVSZWY6IFJlYWN0Lk11dGFibGVSZWZPYmplY3Q8T25Mb2FkaW5nQ29tcGxldGUgfCB1bmRlZmluZWQ+XG4gIHNldEJsdXJDb21wbGV0ZTogKGI6IGJvb2xlYW4pID0+IHZvaWRcbiAgc2V0U2hvd0FsdFRleHQ6IChiOiBib29sZWFuKSA9PiB2b2lkXG4gIHNpemVzSW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZFxufVxuXG4vLyBTZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzM5Nzc3ODMzLzI2NjUzNSBmb3Igd2h5IHdlIHVzZSB0aGlzIHJlZlxuLy8gaGFuZGxlciBpbnN0ZWFkIG9mIHRoZSBpbWcncyBvbkxvYWQgYXR0cmlidXRlLlxuZnVuY3Rpb24gaGFuZGxlTG9hZGluZyhcbiAgaW1nOiBJbWdFbGVtZW50V2l0aERhdGFQcm9wLFxuICBwbGFjZWhvbGRlcjogUGxhY2Vob2xkZXJWYWx1ZSxcbiAgb25Mb2FkUmVmOiBSZWFjdC5NdXRhYmxlUmVmT2JqZWN0PE9uTG9hZCB8IHVuZGVmaW5lZD4sXG4gIG9uTG9hZGluZ0NvbXBsZXRlUmVmOiBSZWFjdC5NdXRhYmxlUmVmT2JqZWN0PE9uTG9hZGluZ0NvbXBsZXRlIHwgdW5kZWZpbmVkPixcbiAgc2V0Qmx1ckNvbXBsZXRlOiAoYjogYm9vbGVhbikgPT4gdm9pZCxcbiAgdW5vcHRpbWl6ZWQ6IGJvb2xlYW4sXG4gIHNpemVzSW5wdXQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuKSB7XG4gIGNvbnN0IHNyYyA9IGltZz8uc3JjXG4gIGlmICghaW1nIHx8IGltZ1snZGF0YS1sb2FkZWQtc3JjJ10gPT09IHNyYykge1xuICAgIHJldHVyblxuICB9XG4gIGltZ1snZGF0YS1sb2FkZWQtc3JjJ10gPSBzcmNcbiAgY29uc3QgcCA9ICdkZWNvZGUnIGluIGltZyA/IGltZy5kZWNvZGUoKSA6IFByb21pc2UucmVzb2x2ZSgpXG4gIHAuY2F0Y2goKCkgPT4ge30pLnRoZW4oKCkgPT4ge1xuICAgIGlmICghaW1nLnBhcmVudEVsZW1lbnQgfHwgIWltZy5pc0Nvbm5lY3RlZCkge1xuICAgICAgLy8gRXhpdCBlYXJseSBpbiBjYXNlIG9mIHJhY2UgY29uZGl0aW9uOlxuICAgICAgLy8gLSBvbmxvYWQoKSBpcyBjYWxsZWRcbiAgICAgIC8vIC0gZGVjb2RlKCkgaXMgY2FsbGVkIGJ1dCBpbmNvbXBsZXRlXG4gICAgICAvLyAtIHVubW91bnQgaXMgY2FsbGVkXG4gICAgICAvLyAtIGRlY29kZSgpIGNvbXBsZXRlc1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChwbGFjZWhvbGRlciAhPT0gJ2VtcHR5Jykge1xuICAgICAgc2V0Qmx1ckNvbXBsZXRlKHRydWUpXG4gICAgfVxuICAgIGlmIChvbkxvYWRSZWY/LmN1cnJlbnQpIHtcbiAgICAgIC8vIFNpbmNlIHdlIGRvbid0IGhhdmUgdGhlIFN5bnRoZXRpY0V2ZW50IGhlcmUsXG4gICAgICAvLyB3ZSBtdXN0IGNyZWF0ZSBvbmUgd2l0aCB0aGUgc2FtZSBzaGFwZS5cbiAgICAgIC8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXZlbnRzLmh0bWxcbiAgICAgIGNvbnN0IGV2ZW50ID0gbmV3IEV2ZW50KCdsb2FkJylcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldmVudCwgJ3RhcmdldCcsIHsgd3JpdGFibGU6IGZhbHNlLCB2YWx1ZTogaW1nIH0pXG4gICAgICBsZXQgcHJldmVudGVkID0gZmFsc2VcbiAgICAgIGxldCBzdG9wcGVkID0gZmFsc2VcbiAgICAgIG9uTG9hZFJlZi5jdXJyZW50KHtcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIG5hdGl2ZUV2ZW50OiBldmVudCxcbiAgICAgICAgY3VycmVudFRhcmdldDogaW1nLFxuICAgICAgICB0YXJnZXQ6IGltZyxcbiAgICAgICAgaXNEZWZhdWx0UHJldmVudGVkOiAoKSA9PiBwcmV2ZW50ZWQsXG4gICAgICAgIGlzUHJvcGFnYXRpb25TdG9wcGVkOiAoKSA9PiBzdG9wcGVkLFxuICAgICAgICBwZXJzaXN0OiAoKSA9PiB7fSxcbiAgICAgICAgcHJldmVudERlZmF1bHQ6ICgpID0+IHtcbiAgICAgICAgICBwcmV2ZW50ZWQgPSB0cnVlXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICB9LFxuICAgICAgICBzdG9wUHJvcGFnYXRpb246ICgpID0+IHtcbiAgICAgICAgICBzdG9wcGVkID0gdHJ1ZVxuICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgIH1cbiAgICBpZiAob25Mb2FkaW5nQ29tcGxldGVSZWY/LmN1cnJlbnQpIHtcbiAgICAgIG9uTG9hZGluZ0NvbXBsZXRlUmVmLmN1cnJlbnQoaW1nKVxuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc3Qgb3JpZ1NyYyA9IG5ldyBVUkwoc3JjLCAnaHR0cDovL24nKS5zZWFyY2hQYXJhbXMuZ2V0KCd1cmwnKSB8fCBzcmNcbiAgICAgIGlmIChpbWcuZ2V0QXR0cmlidXRlKCdkYXRhLW5pbWcnKSA9PT0gJ2ZpbGwnKSB7XG4gICAgICAgIGlmICghdW5vcHRpbWl6ZWQgJiYgKCFzaXplc0lucHV0IHx8IHNpemVzSW5wdXQgPT09ICcxMDB2dycpKSB7XG4gICAgICAgICAgbGV0IHdpZHRoVmlld3BvcnRSYXRpbyA9XG4gICAgICAgICAgICBpbWcuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggLyB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgICAgIGlmICh3aWR0aFZpZXdwb3J0UmF0aW8gPCAwLjYpIHtcbiAgICAgICAgICAgIGlmIChzaXplc0lucHV0ID09PSAnMTAwdncnKSB7XG4gICAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAgIGBJbWFnZSB3aXRoIHNyYyBcIiR7b3JpZ1NyY31cIiBoYXMgXCJmaWxsXCIgcHJvcCBhbmQgXCJzaXplc1wiIHByb3Agb2YgXCIxMDB2d1wiLCBidXQgaW1hZ2UgaXMgbm90IHJlbmRlcmVkIGF0IGZ1bGwgdmlld3BvcnQgd2lkdGguIFBsZWFzZSBhZGp1c3QgXCJzaXplc1wiIHRvIGltcHJvdmUgcGFnZSBwZXJmb3JtYW5jZS4gUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvaW1hZ2Ujc2l6ZXNgXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAgIGBJbWFnZSB3aXRoIHNyYyBcIiR7b3JpZ1NyY31cIiBoYXMgXCJmaWxsXCIgYnV0IGlzIG1pc3NpbmcgXCJzaXplc1wiIHByb3AuIFBsZWFzZSBhZGQgaXQgdG8gaW1wcm92ZSBwYWdlIHBlcmZvcm1hbmNlLiBSZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNzaXplc2BcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1nLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICBjb25zdCB7IHBvc2l0aW9uIH0gPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpbWcucGFyZW50RWxlbWVudClcbiAgICAgICAgICBjb25zdCB2YWxpZCA9IFsnYWJzb2x1dGUnLCAnZml4ZWQnLCAncmVsYXRpdmUnXVxuICAgICAgICAgIGlmICghdmFsaWQuaW5jbHVkZXMocG9zaXRpb24pKSB7XG4gICAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgICAgYEltYWdlIHdpdGggc3JjIFwiJHtvcmlnU3JjfVwiIGhhcyBcImZpbGxcIiBhbmQgcGFyZW50IGVsZW1lbnQgd2l0aCBpbnZhbGlkIFwicG9zaXRpb25cIi4gUHJvdmlkZWQgXCIke3Bvc2l0aW9ufVwiIHNob3VsZCBiZSBvbmUgb2YgJHt2YWxpZFxuICAgICAgICAgICAgICAgIC5tYXAoU3RyaW5nKVxuICAgICAgICAgICAgICAgIC5qb2luKCcsJyl9LmBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGltZy5oZWlnaHQgPT09IDApIHtcbiAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgIGBJbWFnZSB3aXRoIHNyYyBcIiR7b3JpZ1NyY31cIiBoYXMgXCJmaWxsXCIgYW5kIGEgaGVpZ2h0IHZhbHVlIG9mIDAuIFRoaXMgaXMgbGlrZWx5IGJlY2F1c2UgdGhlIHBhcmVudCBlbGVtZW50IG9mIHRoZSBpbWFnZSBoYXMgbm90IGJlZW4gc3R5bGVkIHRvIGhhdmUgYSBzZXQgaGVpZ2h0LmBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgaGVpZ2h0TW9kaWZpZWQgPVxuICAgICAgICBpbWcuaGVpZ2h0LnRvU3RyaW5nKCkgIT09IGltZy5nZXRBdHRyaWJ1dGUoJ2hlaWdodCcpXG4gICAgICBjb25zdCB3aWR0aE1vZGlmaWVkID0gaW1nLndpZHRoLnRvU3RyaW5nKCkgIT09IGltZy5nZXRBdHRyaWJ1dGUoJ3dpZHRoJylcbiAgICAgIGlmIChcbiAgICAgICAgKGhlaWdodE1vZGlmaWVkICYmICF3aWR0aE1vZGlmaWVkKSB8fFxuICAgICAgICAoIWhlaWdodE1vZGlmaWVkICYmIHdpZHRoTW9kaWZpZWQpXG4gICAgICApIHtcbiAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgYEltYWdlIHdpdGggc3JjIFwiJHtvcmlnU3JjfVwiIGhhcyBlaXRoZXIgd2lkdGggb3IgaGVpZ2h0IG1vZGlmaWVkLCBidXQgbm90IHRoZSBvdGhlci4gSWYgeW91IHVzZSBDU1MgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHlvdXIgaW1hZ2UsIGFsc28gaW5jbHVkZSB0aGUgc3R5bGVzICd3aWR0aDogXCJhdXRvXCInIG9yICdoZWlnaHQ6IFwiYXV0b1wiJyB0byBtYWludGFpbiB0aGUgYXNwZWN0IHJhdGlvLmBcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gZ2V0RHluYW1pY1Byb3BzKFxuICBmZXRjaFByaW9yaXR5Pzogc3RyaW5nXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKEJvb2xlYW4odXNlKSkge1xuICAgIC8vIEluIFJlYWN0IDE5LjAuMCBvciBuZXdlciwgd2UgbXVzdCB1c2UgY2FtZWxDYXNlXG4gICAgLy8gcHJvcCB0byBhdm9pZCBcIldhcm5pbmc6IEludmFsaWQgRE9NIHByb3BlcnR5XCIuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9wdWxsLzI1OTI3XG4gICAgcmV0dXJuIHsgZmV0Y2hQcmlvcml0eSB9XG4gIH1cbiAgLy8gSW4gUmVhY3QgMTguMi4wIG9yIG9sZGVyLCB3ZSBtdXN0IHVzZSBsb3dlcmNhc2UgcHJvcFxuICAvLyB0byBhdm9pZCBcIldhcm5pbmc6IEludmFsaWQgRE9NIHByb3BlcnR5XCIuXG4gIHJldHVybiB7IGZldGNocHJpb3JpdHk6IGZldGNoUHJpb3JpdHkgfVxufVxuXG5jb25zdCBJbWFnZUVsZW1lbnQgPSBmb3J3YXJkUmVmPEhUTUxJbWFnZUVsZW1lbnQgfCBudWxsLCBJbWFnZUVsZW1lbnRQcm9wcz4oXG4gIChcbiAgICB7XG4gICAgICBzcmMsXG4gICAgICBzcmNTZXQsXG4gICAgICBzaXplcyxcbiAgICAgIGhlaWdodCxcbiAgICAgIHdpZHRoLFxuICAgICAgZGVjb2RpbmcsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBzdHlsZSxcbiAgICAgIGZldGNoUHJpb3JpdHksXG4gICAgICBwbGFjZWhvbGRlcixcbiAgICAgIGxvYWRpbmcsXG4gICAgICB1bm9wdGltaXplZCxcbiAgICAgIGZpbGwsXG4gICAgICBvbkxvYWRSZWYsXG4gICAgICBvbkxvYWRpbmdDb21wbGV0ZVJlZixcbiAgICAgIHNldEJsdXJDb21wbGV0ZSxcbiAgICAgIHNldFNob3dBbHRUZXh0LFxuICAgICAgc2l6ZXNJbnB1dCxcbiAgICAgIG9uTG9hZCxcbiAgICAgIG9uRXJyb3IsXG4gICAgICAuLi5yZXN0XG4gICAgfSxcbiAgICBmb3J3YXJkZWRSZWZcbiAgKSA9PiB7XG4gICAgY29uc3Qgb3duUmVmID0gdXNlQ2FsbGJhY2soXG4gICAgICAoaW1nOiBJbWdFbGVtZW50V2l0aERhdGFQcm9wIHwgbnVsbCkgPT4ge1xuICAgICAgICBpZiAoIWltZykge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIGlmIChvbkVycm9yKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGltYWdlIGhhcyBhbiBlcnJvciBiZWZvcmUgcmVhY3QgaHlkcmF0ZXMsIHRoZW4gdGhlIGVycm9yIGlzIGxvc3QuXG4gICAgICAgICAgLy8gVGhlIHdvcmthcm91bmQgaXMgdG8gd2FpdCB1bnRpbCB0aGUgaW1hZ2UgaXMgbW91bnRlZCB3aGljaCBpcyBhZnRlciBoeWRyYXRpb24sXG4gICAgICAgICAgLy8gdGhlbiB3ZSBzZXQgdGhlIHNyYyBhZ2FpbiB0byB0cmlnZ2VyIHRoZSBlcnJvciBoYW5kbGVyIChpZiB0aGVyZSB3YXMgYW4gZXJyb3IpLlxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWFzc2lnblxuICAgICAgICAgIGltZy5zcmMgPSBpbWcuc3JjXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgICBpZiAoIXNyYykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgSW1hZ2UgaXMgbWlzc2luZyByZXF1aXJlZCBcInNyY1wiIHByb3BlcnR5OmAsIGltZylcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGltZy5nZXRBdHRyaWJ1dGUoJ2FsdCcpID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBgSW1hZ2UgaXMgbWlzc2luZyByZXF1aXJlZCBcImFsdFwiIHByb3BlcnR5LiBQbGVhc2UgYWRkIEFsdGVybmF0aXZlIFRleHQgdG8gZGVzY3JpYmUgdGhlIGltYWdlIGZvciBzY3JlZW4gcmVhZGVycyBhbmQgc2VhcmNoIGVuZ2luZXMuYFxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW1nLmNvbXBsZXRlKSB7XG4gICAgICAgICAgaGFuZGxlTG9hZGluZyhcbiAgICAgICAgICAgIGltZyxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgb25Mb2FkUmVmLFxuICAgICAgICAgICAgb25Mb2FkaW5nQ29tcGxldGVSZWYsXG4gICAgICAgICAgICBzZXRCbHVyQ29tcGxldGUsXG4gICAgICAgICAgICB1bm9wdGltaXplZCxcbiAgICAgICAgICAgIHNpemVzSW5wdXRcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBbXG4gICAgICAgIHNyYyxcbiAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgIG9uTG9hZFJlZixcbiAgICAgICAgb25Mb2FkaW5nQ29tcGxldGVSZWYsXG4gICAgICAgIHNldEJsdXJDb21wbGV0ZSxcbiAgICAgICAgb25FcnJvcixcbiAgICAgICAgdW5vcHRpbWl6ZWQsXG4gICAgICAgIHNpemVzSW5wdXQsXG4gICAgICBdXG4gICAgKVxuXG4gICAgY29uc3QgcmVmID0gdXNlTWVyZ2VkUmVmKGZvcndhcmRlZFJlZiwgb3duUmVmKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxpbWdcbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIHsuLi5nZXREeW5hbWljUHJvcHMoZmV0Y2hQcmlvcml0eSl9XG4gICAgICAgIC8vIEl0J3MgaW50ZW5kZWQgdG8ga2VlcCBgbG9hZGluZ2AgYmVmb3JlIGBzcmNgIGJlY2F1c2UgUmVhY3QgdXBkYXRlc1xuICAgICAgICAvLyBwcm9wcyBpbiBvcmRlciB3aGljaCBjYXVzZXMgU2FmYXJpL0ZpcmVmb3ggdG8gbm90IGxhenkgbG9hZCBwcm9wZXJseS5cbiAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMjU4ODNcbiAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgd2lkdGg9e3dpZHRofVxuICAgICAgICBoZWlnaHQ9e2hlaWdodH1cbiAgICAgICAgZGVjb2Rpbmc9e2RlY29kaW5nfVxuICAgICAgICBkYXRhLW5pbWc9e2ZpbGwgPyAnZmlsbCcgOiAnMSd9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgIC8vIEl0J3MgaW50ZW5kZWQgdG8ga2VlcCBgc3JjYCB0aGUgbGFzdCBhdHRyaWJ1dGUgYmVjYXVzZSBSZWFjdCB1cGRhdGVzXG4gICAgICAgIC8vIGF0dHJpYnV0ZXMgaW4gb3JkZXIuIElmIHdlIGtlZXAgYHNyY2AgdGhlIGZpcnN0IG9uZSwgU2FmYXJpIHdpbGxcbiAgICAgICAgLy8gaW1tZWRpYXRlbHkgc3RhcnQgdG8gZmV0Y2ggYHNyY2AsIGJlZm9yZSBgc2l6ZXNgIGFuZCBgc3JjU2V0YCBhcmUgZXZlblxuICAgICAgICAvLyB1cGRhdGVkIGJ5IFJlYWN0LiBUaGF0IGNhdXNlcyBtdWx0aXBsZSB1bm5lY2Vzc2FyeSByZXF1ZXN0cyBpZiBgc3JjU2V0YFxuICAgICAgICAvLyBhbmQgYHNpemVzYCBhcmUgZGVmaW5lZC5cbiAgICAgICAgLy8gVGhpcyBidWcgY2Fubm90IGJlIHJlcHJvZHVjZWQgaW4gQ2hyb21lIG9yIEZpcmVmb3guXG4gICAgICAgIHNpemVzPXtzaXplc31cbiAgICAgICAgc3JjU2V0PXtzcmNTZXR9XG4gICAgICAgIHNyYz17c3JjfVxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgb25Mb2FkPXsoZXZlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBpbWcgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEltZ0VsZW1lbnRXaXRoRGF0YVByb3BcbiAgICAgICAgICBoYW5kbGVMb2FkaW5nKFxuICAgICAgICAgICAgaW1nLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICAgICAgICBvbkxvYWRSZWYsXG4gICAgICAgICAgICBvbkxvYWRpbmdDb21wbGV0ZVJlZixcbiAgICAgICAgICAgIHNldEJsdXJDb21wbGV0ZSxcbiAgICAgICAgICAgIHVub3B0aW1pemVkLFxuICAgICAgICAgICAgc2l6ZXNJbnB1dFxuICAgICAgICAgIClcbiAgICAgICAgfX1cbiAgICAgICAgb25FcnJvcj17KGV2ZW50KSA9PiB7XG4gICAgICAgICAgLy8gaWYgdGhlIHJlYWwgaW1hZ2UgZmFpbHMgdG8gbG9hZCwgdGhpcyB3aWxsIGVuc3VyZSBcImFsdFwiIGlzIHZpc2libGVcbiAgICAgICAgICBzZXRTaG93QWx0VGV4dCh0cnVlKVxuICAgICAgICAgIGlmIChwbGFjZWhvbGRlciAhPT0gJ2VtcHR5Jykge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHJlYWwgaW1hZ2UgZmFpbHMgdG8gbG9hZCwgdGhpcyB3aWxsIHN0aWxsIHJlbW92ZSB0aGUgcGxhY2Vob2xkZXIuXG4gICAgICAgICAgICBzZXRCbHVyQ29tcGxldGUodHJ1ZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKG9uRXJyb3IpIHtcbiAgICAgICAgICAgIG9uRXJyb3IoZXZlbnQpXG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgLz5cbiAgICApXG4gIH1cbilcblxuZnVuY3Rpb24gSW1hZ2VQcmVsb2FkKHtcbiAgaXNBcHBSb3V0ZXIsXG4gIGltZ0F0dHJpYnV0ZXMsXG59OiB7XG4gIGlzQXBwUm91dGVyOiBib29sZWFuXG4gIGltZ0F0dHJpYnV0ZXM6IEltZ1Byb3BzXG59KSB7XG4gIGNvbnN0IG9wdHM6IFJlYWN0RE9NLlByZWxvYWRPcHRpb25zID0ge1xuICAgIGFzOiAnaW1hZ2UnLFxuICAgIGltYWdlU3JjU2V0OiBpbWdBdHRyaWJ1dGVzLnNyY1NldCxcbiAgICBpbWFnZVNpemVzOiBpbWdBdHRyaWJ1dGVzLnNpemVzLFxuICAgIGNyb3NzT3JpZ2luOiBpbWdBdHRyaWJ1dGVzLmNyb3NzT3JpZ2luLFxuICAgIHJlZmVycmVyUG9saWN5OiBpbWdBdHRyaWJ1dGVzLnJlZmVycmVyUG9saWN5LFxuICAgIC4uLmdldER5bmFtaWNQcm9wcyhpbWdBdHRyaWJ1dGVzLmZldGNoUHJpb3JpdHkpLFxuICB9XG5cbiAgaWYgKGlzQXBwUm91dGVyICYmIFJlYWN0RE9NLnByZWxvYWQpIHtcbiAgICBSZWFjdERPTS5wcmVsb2FkKGltZ0F0dHJpYnV0ZXMuc3JjLCBvcHRzKVxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxIZWFkPlxuICAgICAgPGxpbmtcbiAgICAgICAga2V5PXtcbiAgICAgICAgICAnX19uaW1nLScgK1xuICAgICAgICAgIGltZ0F0dHJpYnV0ZXMuc3JjICtcbiAgICAgICAgICBpbWdBdHRyaWJ1dGVzLnNyY1NldCArXG4gICAgICAgICAgaW1nQXR0cmlidXRlcy5zaXplc1xuICAgICAgICB9XG4gICAgICAgIHJlbD1cInByZWxvYWRcIlxuICAgICAgICAvLyBOb3RlIGhvdyB3ZSBvbWl0IHRoZSBgaHJlZmAgYXR0cmlidXRlLCBhcyBpdCB3b3VsZCBvbmx5IGJlIHJlbGV2YW50XG4gICAgICAgIC8vIGZvciBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IGBpbWFnZXNyY3NldGAsIGFuZCBpbiB0aG9zZSBjYXNlc1xuICAgICAgICAvLyBpdCB3b3VsZCBjYXVzZSB0aGUgaW5jb3JyZWN0IGltYWdlIHRvIGJlIHByZWxvYWRlZC5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VtYW50aWNzLmh0bWwjYXR0ci1saW5rLWltYWdlc3Jjc2V0XG4gICAgICAgIGhyZWY9e2ltZ0F0dHJpYnV0ZXMuc3JjU2V0ID8gdW5kZWZpbmVkIDogaW1nQXR0cmlidXRlcy5zcmN9XG4gICAgICAgIHsuLi5vcHRzfVxuICAgICAgLz5cbiAgICA8L0hlYWQ+XG4gIClcbn1cblxuLyoqXG4gKiBUaGUgYEltYWdlYCBjb21wb25lbnQgaXMgdXNlZCB0byBvcHRpbWl6ZSBpbWFnZXMuXG4gKlxuICogUmVhZCBtb3JlOiBbTmV4dC5qcyBkb2NzOiBgSW1hZ2VgXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYXBpLXJlZmVyZW5jZS9jb21wb25lbnRzL2ltYWdlKVxuICovXG5leHBvcnQgY29uc3QgSW1hZ2UgPSBmb3J3YXJkUmVmPEhUTUxJbWFnZUVsZW1lbnQgfCBudWxsLCBJbWFnZVByb3BzPihcbiAgKHByb3BzLCBmb3J3YXJkZWRSZWYpID0+IHtcbiAgICBjb25zdCBwYWdlc1JvdXRlciA9IHVzZUNvbnRleHQoUm91dGVyQ29udGV4dClcbiAgICAvLyBXZSdyZSBpbiB0aGUgYXBwIGRpcmVjdG9yeSBpZiB0aGVyZSBpcyBubyBwYWdlcyByb3V0ZXIuXG4gICAgY29uc3QgaXNBcHBSb3V0ZXIgPSAhcGFnZXNSb3V0ZXJcblxuICAgIGNvbnN0IGNvbmZpZ0NvbnRleHQgPSB1c2VDb250ZXh0KEltYWdlQ29uZmlnQ29udGV4dClcbiAgICBjb25zdCBjb25maWcgPSB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGNvbnN0IGMgPSBjb25maWdFbnYgfHwgY29uZmlnQ29udGV4dCB8fCBpbWFnZUNvbmZpZ0RlZmF1bHRcbiAgICAgIGNvbnN0IGFsbFNpemVzID0gWy4uLmMuZGV2aWNlU2l6ZXMsIC4uLmMuaW1hZ2VTaXplc10uc29ydCgoYSwgYikgPT4gYSAtIGIpXG4gICAgICBjb25zdCBkZXZpY2VTaXplcyA9IGMuZGV2aWNlU2l6ZXMuc29ydCgoYSwgYikgPT4gYSAtIGIpXG4gICAgICBjb25zdCBxdWFsaXRpZXMgPSBjLnF1YWxpdGllcz8uc29ydCgoYSwgYikgPT4gYSAtIGIpXG4gICAgICByZXR1cm4geyAuLi5jLCBhbGxTaXplcywgZGV2aWNlU2l6ZXMsIHF1YWxpdGllcyB9XG4gICAgfSwgW2NvbmZpZ0NvbnRleHRdKVxuXG4gICAgY29uc3QgeyBvbkxvYWQsIG9uTG9hZGluZ0NvbXBsZXRlIH0gPSBwcm9wc1xuICAgIGNvbnN0IG9uTG9hZFJlZiA9IHVzZVJlZihvbkxvYWQpXG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgb25Mb2FkUmVmLmN1cnJlbnQgPSBvbkxvYWRcbiAgICB9LCBbb25Mb2FkXSlcblxuICAgIGNvbnN0IG9uTG9hZGluZ0NvbXBsZXRlUmVmID0gdXNlUmVmKG9uTG9hZGluZ0NvbXBsZXRlKVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgIG9uTG9hZGluZ0NvbXBsZXRlUmVmLmN1cnJlbnQgPSBvbkxvYWRpbmdDb21wbGV0ZVxuICAgIH0sIFtvbkxvYWRpbmdDb21wbGV0ZV0pXG5cbiAgICBjb25zdCBbYmx1ckNvbXBsZXRlLCBzZXRCbHVyQ29tcGxldGVdID0gdXNlU3RhdGUoZmFsc2UpXG4gICAgY29uc3QgW3Nob3dBbHRUZXh0LCBzZXRTaG93QWx0VGV4dF0gPSB1c2VTdGF0ZShmYWxzZSlcblxuICAgIGNvbnN0IHsgcHJvcHM6IGltZ0F0dHJpYnV0ZXMsIG1ldGE6IGltZ01ldGEgfSA9IGdldEltZ1Byb3BzKHByb3BzLCB7XG4gICAgICBkZWZhdWx0TG9hZGVyLFxuICAgICAgaW1nQ29uZjogY29uZmlnLFxuICAgICAgYmx1ckNvbXBsZXRlLFxuICAgICAgc2hvd0FsdFRleHQsXG4gICAgfSlcblxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7XG4gICAgICAgICAgPEltYWdlRWxlbWVudFxuICAgICAgICAgICAgey4uLmltZ0F0dHJpYnV0ZXN9XG4gICAgICAgICAgICB1bm9wdGltaXplZD17aW1nTWV0YS51bm9wdGltaXplZH1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtpbWdNZXRhLnBsYWNlaG9sZGVyfVxuICAgICAgICAgICAgZmlsbD17aW1nTWV0YS5maWxsfVxuICAgICAgICAgICAgb25Mb2FkUmVmPXtvbkxvYWRSZWZ9XG4gICAgICAgICAgICBvbkxvYWRpbmdDb21wbGV0ZVJlZj17b25Mb2FkaW5nQ29tcGxldGVSZWZ9XG4gICAgICAgICAgICBzZXRCbHVyQ29tcGxldGU9e3NldEJsdXJDb21wbGV0ZX1cbiAgICAgICAgICAgIHNldFNob3dBbHRUZXh0PXtzZXRTaG93QWx0VGV4dH1cbiAgICAgICAgICAgIHNpemVzSW5wdXQ9e3Byb3BzLnNpemVzfVxuICAgICAgICAgICAgcmVmPXtmb3J3YXJkZWRSZWZ9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgICB7aW1nTWV0YS5wcmlvcml0eSA/IChcbiAgICAgICAgICA8SW1hZ2VQcmVsb2FkXG4gICAgICAgICAgICBpc0FwcFJvdXRlcj17aXNBcHBSb3V0ZXJ9XG4gICAgICAgICAgICBpbWdBdHRyaWJ1dGVzPXtpbWdBdHRyaWJ1dGVzfVxuICAgICAgICAgIC8+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG4pXG4iXSwibmFtZXMiOlsiSW1hZ2UiLCJjb25maWdFbnYiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0lNQUdFX09QVFMiLCJ3aW5kb3ciLCJnbG9iYWxUaGlzIiwiX19ORVhUX0lNQUdFX0lNUE9SVEVEIiwiaGFuZGxlTG9hZGluZyIsImltZyIsInBsYWNlaG9sZGVyIiwib25Mb2FkUmVmIiwib25Mb2FkaW5nQ29tcGxldGVSZWYiLCJzZXRCbHVyQ29tcGxldGUiLCJ1bm9wdGltaXplZCIsInNpemVzSW5wdXQiLCJzcmMiLCJwIiwiZGVjb2RlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjYXRjaCIsInRoZW4iLCJwYXJlbnRFbGVtZW50IiwiaXNDb25uZWN0ZWQiLCJjdXJyZW50IiwiZXZlbnQiLCJFdmVudCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5Iiwid3JpdGFibGUiLCJ2YWx1ZSIsInByZXZlbnRlZCIsInN0b3BwZWQiLCJuYXRpdmVFdmVudCIsImN1cnJlbnRUYXJnZXQiLCJ0YXJnZXQiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJpc1Byb3BhZ2F0aW9uU3RvcHBlZCIsInBlcnNpc3QiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsIk5PREVfRU5WIiwib3JpZ1NyYyIsIlVSTCIsInNlYXJjaFBhcmFtcyIsImdldCIsImdldEF0dHJpYnV0ZSIsIndpZHRoVmlld3BvcnRSYXRpbyIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwiaW5uZXJXaWR0aCIsIndhcm5PbmNlIiwicG9zaXRpb24iLCJnZXRDb21wdXRlZFN0eWxlIiwidmFsaWQiLCJpbmNsdWRlcyIsIm1hcCIsIlN0cmluZyIsImpvaW4iLCJoZWlnaHQiLCJoZWlnaHRNb2RpZmllZCIsInRvU3RyaW5nIiwid2lkdGhNb2RpZmllZCIsImdldER5bmFtaWNQcm9wcyIsImZldGNoUHJpb3JpdHkiLCJCb29sZWFuIiwidXNlIiwiZmV0Y2hwcmlvcml0eSIsIkltYWdlRWxlbWVudCIsImZvcndhcmRSZWYiLCJmb3J3YXJkZWRSZWYiLCJzcmNTZXQiLCJzaXplcyIsImRlY29kaW5nIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJsb2FkaW5nIiwiZmlsbCIsInNldFNob3dBbHRUZXh0Iiwib25Mb2FkIiwib25FcnJvciIsInJlc3QiLCJvd25SZWYiLCJ1c2VDYWxsYmFjayIsImNvbnNvbGUiLCJlcnJvciIsImNvbXBsZXRlIiwicmVmIiwidXNlTWVyZ2VkUmVmIiwiZGF0YS1uaW1nIiwiSW1hZ2VQcmVsb2FkIiwiaXNBcHBSb3V0ZXIiLCJpbWdBdHRyaWJ1dGVzIiwib3B0cyIsImFzIiwiaW1hZ2VTcmNTZXQiLCJpbWFnZVNpemVzIiwiY3Jvc3NPcmlnaW4iLCJyZWZlcnJlclBvbGljeSIsIlJlYWN0RE9NIiwicHJlbG9hZCIsIkhlYWQiLCJsaW5rIiwicmVsIiwiaHJlZiIsInVuZGVmaW5lZCIsInByb3BzIiwicGFnZXNSb3V0ZXIiLCJ1c2VDb250ZXh0IiwiUm91dGVyQ29udGV4dCIsImNvbmZpZ0NvbnRleHQiLCJJbWFnZUNvbmZpZ0NvbnRleHQiLCJjb25maWciLCJ1c2VNZW1vIiwiYyIsImltYWdlQ29uZmlnRGVmYXVsdCIsImFsbFNpemVzIiwiZGV2aWNlU2l6ZXMiLCJzb3J0IiwiYSIsImIiLCJxdWFsaXRpZXMiLCJvbkxvYWRpbmdDb21wbGV0ZSIsInVzZVJlZiIsInVzZUVmZmVjdCIsImJsdXJDb21wbGV0ZSIsInVzZVN0YXRlIiwic2hvd0FsdFRleHQiLCJtZXRhIiwiaW1nTWV0YSIsImdldEltZ1Byb3BzIiwiZGVmYXVsdExvYWRlciIsImltZ0NvbmYiLCJwcmlvcml0eSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/image-component.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/client/use-merged-ref.js":
|
||
/*!*********************************************************!*\
|
||
!*** ./node_modules/next/dist/client/use-merged-ref.js ***!
|
||
\*********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"useMergedRef\", ({\n enumerable: true,\n get: function() {\n return useMergedRef;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nfunction useMergedRef(refA, refB) {\n const cleanupA = (0, _react.useRef)(null);\n const cleanupB = (0, _react.useRef)(null);\n // NOTE: In theory, we could skip the wrapping if only one of the refs is non-null.\n // (this happens often if the user doesn't pass a ref to Link/Form/Image)\n // But this can cause us to leak a cleanup-ref into user code (e.g. via `<Link legacyBehavior>`),\n // and the user might pass that ref into ref-merging library that doesn't support cleanup refs\n // (because it hasn't been updated for React 19)\n // which can then cause things to blow up, because a cleanup-returning ref gets called with `null`.\n // So in practice, it's safer to be defensive and always wrap the ref, even on React 19.\n return (0, _react.useCallback)((current)=>{\n if (current === null) {\n const cleanupFnA = cleanupA.current;\n if (cleanupFnA) {\n cleanupA.current = null;\n cleanupFnA();\n }\n const cleanupFnB = cleanupB.current;\n if (cleanupFnB) {\n cleanupB.current = null;\n cleanupFnB();\n }\n } else {\n if (refA) {\n cleanupA.current = applyRef(refA, current);\n }\n if (refB) {\n cleanupB.current = applyRef(refB, current);\n }\n }\n }, [\n refA,\n refB\n ]);\n}\nfunction applyRef(refA, current) {\n if (typeof refA === 'function') {\n const cleanup = refA(current);\n if (typeof cleanup === 'function') {\n return cleanup;\n } else {\n return ()=>refA(null);\n }\n } else {\n refA.current = current;\n return ()=>{\n refA.current = null;\n };\n }\n}\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=use-merged-ref.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY2xpZW50L3VzZS1tZXJnZWQtcmVmLmpzIiwibWFwcGluZ3MiOiI7Ozs7Z0RBU2dCQTs7O2VBQUFBOzs7bUNBVDhCO0FBU3ZDLFNBQVNBLGFBQ2RDLElBQW1CLEVBQ25CQyxJQUFtQjtJQUVuQixNQUFNQyxXQUFXQyxDQUFBQSxHQUFBQSxPQUFBQSxNQUFBQSxFQUE0QjtJQUM3QyxNQUFNQyxXQUFXRCxDQUFBQSxHQUFBQSxPQUFBQSxNQUFBQSxFQUE0QjtJQUU3QyxtRkFBbUY7SUFDbkYseUVBQXlFO0lBQ3pFLGlHQUFpRztJQUNqRyw4RkFBOEY7SUFDOUYsZ0RBQWdEO0lBQ2hELG1HQUFtRztJQUNuRyx3RkFBd0Y7SUFDeEYsT0FBT0UsQ0FBQUEsR0FBQUEsT0FBQUEsV0FBQUEsRUFDTCxDQUFDQztRQUNDLElBQUlBLFlBQVksTUFBTTtZQUNwQixNQUFNQyxhQUFhTCxTQUFTSSxPQUFPO1lBQ25DLElBQUlDLFlBQVk7Z0JBQ2RMLFNBQVNJLE9BQU8sR0FBRztnQkFDbkJDO1lBQ0Y7WUFDQSxNQUFNQyxhQUFhSixTQUFTRSxPQUFPO1lBQ25DLElBQUlFLFlBQVk7Z0JBQ2RKLFNBQVNFLE9BQU8sR0FBRztnQkFDbkJFO1lBQ0Y7UUFDRixPQUFPO1lBQ0wsSUFBSVIsTUFBTTtnQkFDUkUsU0FBU0ksT0FBTyxHQUFHRyxTQUFTVCxNQUFNTTtZQUNwQztZQUNBLElBQUlMLE1BQU07Z0JBQ1JHLFNBQVNFLE9BQU8sR0FBR0csU0FBU1IsTUFBTUs7WUFDcEM7UUFDRjtJQUNGLEdBQ0E7UUFBQ047UUFBTUM7S0FBSztBQUVoQjtBQUVBLFNBQVNRLFNBQ1BULElBQWdDLEVBQ2hDTSxPQUFpQjtJQUVqQixJQUFJLE9BQU9OLFNBQVMsWUFBWTtRQUM5QixNQUFNVSxVQUFVVixLQUFLTTtRQUNyQixJQUFJLE9BQU9JLFlBQVksWUFBWTtZQUNqQyxPQUFPQTtRQUNULE9BQU87WUFDTCxPQUFPLElBQU1WLEtBQUs7UUFDcEI7SUFDRixPQUFPO1FBQ0xBLEtBQUtNLE9BQU8sR0FBR0E7UUFDZixPQUFPO1lBQ0xOLEtBQUtNLE9BQU8sR0FBRztRQUNqQjtJQUNGO0FBQ0YiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9zcmMvY2xpZW50L3VzZS1tZXJnZWQtcmVmLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VSZWYsIHR5cGUgUmVmIH0gZnJvbSAncmVhY3QnXG5cbi8vIFRoaXMgaXMgYSBjb21wYXRpYmlsaXR5IGhvb2sgdG8gc3VwcG9ydCBSZWFjdCAxOCBhbmQgMTkgcmVmcy5cbi8vIEluIDE5LCBhIGNsZWFudXAgZnVuY3Rpb24gZnJvbSByZWZzIG1heSBiZSByZXR1cm5lZC5cbi8vIEluIDE4LCByZXR1cm5pbmcgYSBjbGVhbnVwIGZ1bmN0aW9uIGNyZWF0ZXMgYSB3YXJuaW5nLlxuLy8gU2luY2Ugd2UgdGFrZSB1c2Vyc3BhY2UgcmVmcywgd2UgZG9uJ3Qga25vdyBhaGVhZCBvZiB0aW1lIGlmIGEgY2xlYW51cCBmdW5jdGlvbiB3aWxsIGJlIHJldHVybmVkLlxuLy8gVGhpcyBpbXBsZW1lbnRzIGNsZWFudXAgZnVuY3Rpb25zIHdpdGggdGhlIG9sZCBiZWhhdmlvciBpbiAxOC5cbi8vIFdlIGtub3cgcmVmcyBhcmUgYWx3YXlzIGNhbGxlZCBhbHRlcm5hdGluZyB3aXRoIGBudWxsYCBhbmQgdGhlbiBgVGAuXG4vLyBTbyBhIGNhbGwgd2l0aCBgbnVsbGAgbWVhbnMgd2UgbmVlZCB0byBjYWxsIHRoZSBwcmV2aW91cyBjbGVhbnVwIGZ1bmN0aW9ucy5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNZXJnZWRSZWY8VEVsZW1lbnQ+KFxuICByZWZBOiBSZWY8VEVsZW1lbnQ+LFxuICByZWZCOiBSZWY8VEVsZW1lbnQ+XG4pOiBSZWY8VEVsZW1lbnQ+IHtcbiAgY29uc3QgY2xlYW51cEEgPSB1c2VSZWY8KCgpID0+IHZvaWQpIHwgbnVsbD4obnVsbClcbiAgY29uc3QgY2xlYW51cEIgPSB1c2VSZWY8KCgpID0+IHZvaWQpIHwgbnVsbD4obnVsbClcblxuICAvLyBOT1RFOiBJbiB0aGVvcnksIHdlIGNvdWxkIHNraXAgdGhlIHdyYXBwaW5nIGlmIG9ubHkgb25lIG9mIHRoZSByZWZzIGlzIG5vbi1udWxsLlxuICAvLyAodGhpcyBoYXBwZW5zIG9mdGVuIGlmIHRoZSB1c2VyIGRvZXNuJ3QgcGFzcyBhIHJlZiB0byBMaW5rL0Zvcm0vSW1hZ2UpXG4gIC8vIEJ1dCB0aGlzIGNhbiBjYXVzZSB1cyB0byBsZWFrIGEgY2xlYW51cC1yZWYgaW50byB1c2VyIGNvZGUgKGUuZy4gdmlhIGA8TGluayBsZWdhY3lCZWhhdmlvcj5gKSxcbiAgLy8gYW5kIHRoZSB1c2VyIG1pZ2h0IHBhc3MgdGhhdCByZWYgaW50byByZWYtbWVyZ2luZyBsaWJyYXJ5IHRoYXQgZG9lc24ndCBzdXBwb3J0IGNsZWFudXAgcmVmc1xuICAvLyAoYmVjYXVzZSBpdCBoYXNuJ3QgYmVlbiB1cGRhdGVkIGZvciBSZWFjdCAxOSlcbiAgLy8gd2hpY2ggY2FuIHRoZW4gY2F1c2UgdGhpbmdzIHRvIGJsb3cgdXAsIGJlY2F1c2UgYSBjbGVhbnVwLXJldHVybmluZyByZWYgZ2V0cyBjYWxsZWQgd2l0aCBgbnVsbGAuXG4gIC8vIFNvIGluIHByYWN0aWNlLCBpdCdzIHNhZmVyIHRvIGJlIGRlZmVuc2l2ZSBhbmQgYWx3YXlzIHdyYXAgdGhlIHJlZiwgZXZlbiBvbiBSZWFjdCAxOS5cbiAgcmV0dXJuIHVzZUNhbGxiYWNrKFxuICAgIChjdXJyZW50OiBURWxlbWVudCB8IG51bGwpOiB2b2lkID0+IHtcbiAgICAgIGlmIChjdXJyZW50ID09PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGNsZWFudXBGbkEgPSBjbGVhbnVwQS5jdXJyZW50XG4gICAgICAgIGlmIChjbGVhbnVwRm5BKSB7XG4gICAgICAgICAgY2xlYW51cEEuY3VycmVudCA9IG51bGxcbiAgICAgICAgICBjbGVhbnVwRm5BKClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGVhbnVwRm5CID0gY2xlYW51cEIuY3VycmVudFxuICAgICAgICBpZiAoY2xlYW51cEZuQikge1xuICAgICAgICAgIGNsZWFudXBCLmN1cnJlbnQgPSBudWxsXG4gICAgICAgICAgY2xlYW51cEZuQigpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChyZWZBKSB7XG4gICAgICAgICAgY2xlYW51cEEuY3VycmVudCA9IGFwcGx5UmVmKHJlZkEsIGN1cnJlbnQpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlZkIpIHtcbiAgICAgICAgICBjbGVhbnVwQi5jdXJyZW50ID0gYXBwbHlSZWYocmVmQiwgY3VycmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAgW3JlZkEsIHJlZkJdXG4gIClcbn1cblxuZnVuY3Rpb24gYXBwbHlSZWY8VEVsZW1lbnQ+KFxuICByZWZBOiBOb25OdWxsYWJsZTxSZWY8VEVsZW1lbnQ+PixcbiAgY3VycmVudDogVEVsZW1lbnRcbikge1xuICBpZiAodHlwZW9mIHJlZkEgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBjbGVhbnVwID0gcmVmQShjdXJyZW50KVxuICAgIGlmICh0eXBlb2YgY2xlYW51cCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGNsZWFudXBcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICgpID0+IHJlZkEobnVsbClcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmVmQS5jdXJyZW50ID0gY3VycmVudFxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICByZWZBLmN1cnJlbnQgPSBudWxsXG4gICAgfVxuICB9XG59XG4iXSwibmFtZXMiOlsidXNlTWVyZ2VkUmVmIiwicmVmQSIsInJlZkIiLCJjbGVhbnVwQSIsInVzZVJlZiIsImNsZWFudXBCIiwidXNlQ2FsbGJhY2siLCJjdXJyZW50IiwiY2xlYW51cEZuQSIsImNsZWFudXBGbkIiLCJhcHBseVJlZiIsImNsZWFudXAiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/client/use-merged-ref.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/buffer/index.js":
|
||
/*!*********************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/buffer/index.js ***!
|
||
\*********************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n(function(){var e={675:function(e,r){\"use strict\";r.byteLength=byteLength;r.toByteArray=toByteArray;r.fromByteArray=fromByteArray;var t=[];var f=[];var n=typeof Uint8Array!==\"undefined\"?Uint8Array:Array;var i=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";for(var o=0,u=i.length;o<u;++o){t[o]=i[o];f[i.charCodeAt(o)]=o}f[\"-\".charCodeAt(0)]=62;f[\"_\".charCodeAt(0)]=63;function getLens(e){var r=e.length;if(r%4>0){throw new Error(\"Invalid string. Length must be a multiple of 4\")}var t=e.indexOf(\"=\");if(t===-1)t=r;var f=t===r?0:4-t%4;return[t,f]}function byteLength(e){var r=getLens(e);var t=r[0];var f=r[1];return(t+f)*3/4-f}function _byteLength(e,r,t){return(r+t)*3/4-t}function toByteArray(e){var r;var t=getLens(e);var i=t[0];var o=t[1];var u=new n(_byteLength(e,i,o));var a=0;var s=o>0?i-4:i;var h;for(h=0;h<s;h+=4){r=f[e.charCodeAt(h)]<<18|f[e.charCodeAt(h+1)]<<12|f[e.charCodeAt(h+2)]<<6|f[e.charCodeAt(h+3)];u[a++]=r>>16&255;u[a++]=r>>8&255;u[a++]=r&255}if(o===2){r=f[e.charCodeAt(h)]<<2|f[e.charCodeAt(h+1)]>>4;u[a++]=r&255}if(o===1){r=f[e.charCodeAt(h)]<<10|f[e.charCodeAt(h+1)]<<4|f[e.charCodeAt(h+2)]>>2;u[a++]=r>>8&255;u[a++]=r&255}return u}function tripletToBase64(e){return t[e>>18&63]+t[e>>12&63]+t[e>>6&63]+t[e&63]}function encodeChunk(e,r,t){var f;var n=[];for(var i=r;i<t;i+=3){f=(e[i]<<16&16711680)+(e[i+1]<<8&65280)+(e[i+2]&255);n.push(tripletToBase64(f))}return n.join(\"\")}function fromByteArray(e){var r;var f=e.length;var n=f%3;var i=[];var o=16383;for(var u=0,a=f-n;u<a;u+=o){i.push(encodeChunk(e,u,u+o>a?a:u+o))}if(n===1){r=e[f-1];i.push(t[r>>2]+t[r<<4&63]+\"==\")}else if(n===2){r=(e[f-2]<<8)+e[f-1];i.push(t[r>>10]+t[r>>4&63]+t[r<<2&63]+\"=\")}return i.join(\"\")}},72:function(e,r,t){\"use strict\";\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */var f=t(675);var n=t(783);var i=typeof Symbol===\"function\"&&typeof Symbol.for===\"function\"?Symbol.for(\"nodejs.util.inspect.custom\"):null;r.Buffer=Buffer;r.SlowBuffer=SlowBuffer;r.INSPECT_MAX_BYTES=50;var o=2147483647;r.kMaxLength=o;Buffer.TYPED_ARRAY_SUPPORT=typedArraySupport();if(!Buffer.TYPED_ARRAY_SUPPORT&&typeof console!==\"undefined\"&&typeof console.error===\"function\"){console.error(\"This browser lacks typed array (Uint8Array) support which is required by \"+\"`buffer` v5.x. Use `buffer` v4.x if you require old browser support.\")}function typedArraySupport(){try{var e=new Uint8Array(1);var r={foo:function(){return 42}};Object.setPrototypeOf(r,Uint8Array.prototype);Object.setPrototypeOf(e,r);return e.foo()===42}catch(e){return false}}Object.defineProperty(Buffer.prototype,\"parent\",{enumerable:true,get:function(){if(!Buffer.isBuffer(this))return undefined;return this.buffer}});Object.defineProperty(Buffer.prototype,\"offset\",{enumerable:true,get:function(){if(!Buffer.isBuffer(this))return undefined;return this.byteOffset}});function createBuffer(e){if(e>o){throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}var r=new Uint8Array(e);Object.setPrototypeOf(r,Buffer.prototype);return r}function Buffer(e,r,t){if(typeof e===\"number\"){if(typeof r===\"string\"){throw new TypeError('The \"string\" argument must be of type string. Received type number')}return allocUnsafe(e)}return from(e,r,t)}Buffer.poolSize=8192;function from(e,r,t){if(typeof e===\"string\"){return fromString(e,r)}if(ArrayBuffer.isView(e)){return fromArrayLike(e)}if(e==null){throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, \"+\"or Array-like Object. Received type \"+typeof e)}if(isInstance(e,ArrayBuffer)||e&&isInstance(e.buffer,ArrayBuffer)){return fromArrayBuffer(e,r,t)}if(typeof SharedArrayBuffer!==\"undefined\"&&(isInstance(e,SharedArrayBuffer)||e&&isInstance(e.buffer,SharedArrayBuffer))){return fromArrayBuffer(e,r,t)}if(typeof e===\"number\"){throw new TypeError('The \"value\" argument must not be of type number. Received type number')}var f=e.valueOf&&e.valueOf();if(f!=null&&f!==e){return Buffer.from(f,r,t)}var n=fromObject(e);if(n)return n;if(typeof Symbol!==\"undefined\"&&Symbol.toPrimitive!=null&&typeof e[Symbol.toPrimitive]===\"function\"){return Buffer.from(e[Symbol.toPrimitive](\"string\"),r,t)}throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, \"+\"or Array-like Object. Received type \"+typeof e)}Buffer.from=function(e,r,t){return from(e,r,t)};Object.setPrototypeOf(Buffer.prototype,Uint8Array.prototype);Object.setPrototypeOf(Buffer,Uint8Array);function assertSize(e){if(typeof e!==\"number\"){throw new TypeError('\"size\" argument must be of type number')}else if(e<0){throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"')}}function alloc(e,r,t){assertSize(e);if(e<=0){return createBuffer(e)}if(r!==undefined){return typeof t===\"string\"?createBuffer(e).fill(r,t):createBuffer(e).fill(r)}return createBuffer(e)}Buffer.alloc=function(e,r,t){return alloc(e,r,t)};function allocUnsafe(e){assertSize(e);return createBuffer(e<0?0:checked(e)|0)}Buffer.allocUnsafe=function(e){return allocUnsafe(e)};Buffer.allocUnsafeSlow=function(e){return allocUnsafe(e)};function fromString(e,r){if(typeof r!==\"string\"||r===\"\"){r=\"utf8\"}if(!Buffer.isEncoding(r)){throw new TypeError(\"Unknown encoding: \"+r)}var t=byteLength(e,r)|0;var f=createBuffer(t);var n=f.write(e,r);if(n!==t){f=f.slice(0,n)}return f}function fromArrayLike(e){var r=e.length<0?0:checked(e.length)|0;var t=createBuffer(r);for(var f=0;f<r;f+=1){t[f]=e[f]&255}return t}function fromArrayBuffer(e,r,t){if(r<0||e.byteLength<r){throw new RangeError('\"offset\" is outside of buffer bounds')}if(e.byteLength<r+(t||0)){throw new RangeError('\"length\" is outside of buffer bounds')}var f;if(r===undefined&&t===undefined){f=new Uint8Array(e)}else if(t===undefined){f=new Uint8Array(e,r)}else{f=new Uint8Array(e,r,t)}Object.setPrototypeOf(f,Buffer.prototype);return f}function fromObject(e){if(Buffer.isBuffer(e)){var r=checked(e.length)|0;var t=createBuffer(r);if(t.length===0){return t}e.copy(t,0,0,r);return t}if(e.length!==undefined){if(typeof e.length!==\"number\"||numberIsNaN(e.length)){return createBuffer(0)}return fromArrayLike(e)}if(e.type===\"Buffer\"&&Array.isArray(e.data)){return fromArrayLike(e.data)}}function checked(e){if(e>=o){throw new RangeError(\"Attempt to allocate Buffer larger than maximum \"+\"size: 0x\"+o.toString(16)+\" bytes\")}return e|0}function SlowBuffer(e){if(+e!=e){e=0}return Buffer.alloc(+e)}Buffer.isBuffer=function isBuffer(e){return e!=null&&e._isBuffer===true&&e!==Buffer.prototype};Buffer.compare=function compare(e,r){if(isInstance(e,Uint8Array))e=Buffer.from(e,e.offset,e.byteLength);if(isInstance(r,Uint8Array))r=Buffer.from(r,r.offset,r.byteLength);if(!Buffer.isBuffer(e)||!Buffer.isBuffer(r)){throw new TypeError('The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array')}if(e===r)return 0;var t=e.length;var f=r.length;for(var n=0,i=Math.min(t,f);n<i;++n){if(e[n]!==r[n]){t=e[n];f=r[n];break}}if(t<f)return-1;if(f<t)return 1;return 0};Buffer.isEncoding=function isEncoding(e){switch(String(e).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return true;default:return false}};Buffer.concat=function concat(e,r){if(!Array.isArray(e)){throw new TypeError('\"list\" argument must be an Array of Buffers')}if(e.length===0){return Buffer.alloc(0)}var t;if(r===undefined){r=0;for(t=0;t<e.length;++t){r+=e[t].length}}var f=Buffer.allocUnsafe(r);var n=0;for(t=0;t<e.length;++t){var i=e[t];if(isInstance(i,Uint8Array)){i=Buffer.from(i)}if(!Buffer.isBuffer(i)){throw new TypeError('\"list\" argument must be an Array of Buffers')}i.copy(f,n);n+=i.length}return f};function byteLength(e,r){if(Buffer.isBuffer(e)){return e.length}if(ArrayBuffer.isView(e)||isInstance(e,ArrayBuffer)){return e.byteLength}if(typeof e!==\"string\"){throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. '+\"Received type \"+typeof e)}var t=e.length;var f=arguments.length>2&&arguments[2]===true;if(!f&&t===0)return 0;var n=false;for(;;){switch(r){case\"ascii\":case\"latin1\":case\"binary\":return t;case\"utf8\":case\"utf-8\":return utf8ToBytes(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return t*2;case\"hex\":return t>>>1;case\"base64\":return base64ToBytes(e).length;default:if(n){return f?-1:utf8ToBytes(e).length}r=(\"\"+r).toLowerCase();n=true}}}Buffer.byteLength=byteLength;function slowToString(e,r,t){var f=false;if(r===undefined||r<0){r=0}if(r>this.length){return\"\"}if(t===undefined||t>this.length){t=this.length}if(t<=0){return\"\"}t>>>=0;r>>>=0;if(t<=r){return\"\"}if(!e)e=\"utf8\";while(true){switch(e){case\"hex\":return hexSlice(this,r,t);case\"utf8\":case\"utf-8\":return utf8Slice(this,r,t);case\"ascii\":return asciiSlice(this,r,t);case\"latin1\":case\"binary\":return latin1Slice(this,r,t);case\"base64\":return base64Slice(this,r,t);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return utf16leSlice(this,r,t);default:if(f)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase();f=true}}}Buffer.prototype._isBuffer=true;function swap(e,r,t){var f=e[r];e[r]=e[t];e[t]=f}Buffer.prototype.swap16=function swap16(){var e=this.length;if(e%2!==0){throw new RangeError(\"Buffer size must be a multiple of 16-bits\")}for(var r=0;r<e;r+=2){swap(this,r,r+1)}return this};Buffer.prototype.swap32=function swap32(){var e=this.length;if(e%4!==0){throw new RangeError(\"Buffer size must be a multiple of 32-bits\")}for(var r=0;r<e;r+=4){swap(this,r,r+3);swap(this,r+1,r+2)}return this};Buffer.prototype.swap64=function swap64(){var e=this.length;if(e%8!==0){throw new RangeError(\"Buffer size must be a multiple of 64-bits\")}for(var r=0;r<e;r+=8){swap(this,r,r+7);swap(this,r+1,r+6);swap(this,r+2,r+5);swap(this,r+3,r+4)}return this};Buffer.prototype.toString=function toString(){var e=this.length;if(e===0)return\"\";if(arguments.length===0)return utf8Slice(this,0,e);return slowToString.apply(this,arguments)};Buffer.prototype.toLocaleString=Buffer.prototype.toString;Buffer.prototype.equals=function equals(e){if(!Buffer.isBuffer(e))throw new TypeError(\"Argument must be a Buffer\");if(this===e)return true;return Buffer.compare(this,e)===0};Buffer.prototype.inspect=function inspect(){var e=\"\";var t=r.INSPECT_MAX_BYTES;e=this.toString(\"hex\",0,t).replace(/(.{2})/g,\"$1 \").trim();if(this.length>t)e+=\" ... \";return\"<Buffer \"+e+\">\"};if(i){Buffer.prototype[i]=Buffer.prototype.inspect}Buffer.prototype.compare=function compare(e,r,t,f,n){if(isInstance(e,Uint8Array)){e=Buffer.from(e,e.offset,e.byteLength)}if(!Buffer.isBuffer(e)){throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. '+\"Received type \"+typeof e)}if(r===undefined){r=0}if(t===undefined){t=e?e.length:0}if(f===undefined){f=0}if(n===undefined){n=this.length}if(r<0||t>e.length||f<0||n>this.length){throw new RangeError(\"out of range index\")}if(f>=n&&r>=t){return 0}if(f>=n){return-1}if(r>=t){return 1}r>>>=0;t>>>=0;f>>>=0;n>>>=0;if(this===e)return 0;var i=n-f;var o=t-r;var u=Math.min(i,o);var a=this.slice(f,n);var s=e.slice(r,t);for(var h=0;h<u;++h){if(a[h]!==s[h]){i=a[h];o=s[h];break}}if(i<o)return-1;if(o<i)return 1;return 0};function bidirectionalIndexOf(e,r,t,f,n){if(e.length===0)return-1;if(typeof t===\"string\"){f=t;t=0}else if(t>2147483647){t=2147483647}else if(t<-2147483648){t=-2147483648}t=+t;if(numberIsNaN(t)){t=n?0:e.length-1}if(t<0)t=e.length+t;if(t>=e.length){if(n)return-1;else t=e.length-1}else if(t<0){if(n)t=0;else return-1}if(typeof r===\"string\"){r=Buffer.from(r,f)}if(Buffer.isBuffer(r)){if(r.length===0){return-1}return arrayIndexOf(e,r,t,f,n)}else if(typeof r===\"number\"){r=r&255;if(typeof Uint8Array.prototype.indexOf===\"function\"){if(n){return Uint8Array.prototype.indexOf.call(e,r,t)}else{return Uint8Array.prototype.lastIndexOf.call(e,r,t)}}return arrayIndexOf(e,[r],t,f,n)}throw new TypeError(\"val must be string, number or Buffer\")}function arrayIndexOf(e,r,t,f,n){var i=1;var o=e.length;var u=r.length;if(f!==undefined){f=String(f).toLowerCase();if(f===\"ucs2\"||f===\"ucs-2\"||f===\"utf16le\"||f===\"utf-16le\"){if(e.length<2||r.length<2){return-1}i=2;o/=2;u/=2;t/=2}}function read(e,r){if(i===1){return e[r]}else{return e.readUInt16BE(r*i)}}var a;if(n){var s=-1;for(a=t;a<o;a++){if(read(e,a)===read(r,s===-1?0:a-s)){if(s===-1)s=a;if(a-s+1===u)return s*i}else{if(s!==-1)a-=a-s;s=-1}}}else{if(t+u>o)t=o-u;for(a=t;a>=0;a--){var h=true;for(var c=0;c<u;c++){if(read(e,a+c)!==read(r,c)){h=false;break}}if(h)return a}}return-1}Buffer.prototype.includes=function includes(e,r,t){return this.indexOf(e,r,t)!==-1};Buffer.prototype.indexOf=function indexOf(e,r,t){return bidirectionalIndexOf(this,e,r,t,true)};Buffer.prototype.lastIndexOf=function lastIndexOf(e,r,t){return bidirectionalIndexOf(this,e,r,t,false)};function hexWrite(e,r,t,f){t=Number(t)||0;var n=e.length-t;if(!f){f=n}else{f=Number(f);if(f>n){f=n}}var i=r.length;if(f>i/2){f=i/2}for(var o=0;o<f;++o){var u=parseInt(r.substr(o*2,2),16);if(numberIsNaN(u))return o;e[t+o]=u}return o}function utf8Write(e,r,t,f){return blitBuffer(utf8ToBytes(r,e.length-t),e,t,f)}function asciiWrite(e,r,t,f){return blitBuffer(asciiToBytes(r),e,t,f)}function latin1Write(e,r,t,f){return asciiWrite(e,r,t,f)}function base64Write(e,r,t,f){return blitBuffer(base64ToBytes(r),e,t,f)}function ucs2Write(e,r,t,f){return blitBuffer(utf16leToBytes(r,e.length-t),e,t,f)}Buffer.prototype.write=function write(e,r,t,f){if(r===undefined){f=\"utf8\";t=this.length;r=0}else if(t===undefined&&typeof r===\"string\"){f=r;t=this.length;r=0}else if(isFinite(r)){r=r>>>0;if(isFinite(t)){t=t>>>0;if(f===undefined)f=\"utf8\"}else{f=t;t=undefined}}else{throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\")}var n=this.length-r;if(t===undefined||t>n)t=n;if(e.length>0&&(t<0||r<0)||r>this.length){throw new RangeError(\"Attempt to write outside buffer bounds\")}if(!f)f=\"utf8\";var i=false;for(;;){switch(f){case\"hex\":return hexWrite(this,e,r,t);case\"utf8\":case\"utf-8\":return utf8Write(this,e,r,t);case\"ascii\":return asciiWrite(this,e,r,t);case\"latin1\":case\"binary\":return latin1Write(this,e,r,t);case\"base64\":return base64Write(this,e,r,t);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return ucs2Write(this,e,r,t);default:if(i)throw new TypeError(\"Unknown encoding: \"+f);f=(\"\"+f).toLowerCase();i=true}}};Buffer.prototype.toJSON=function toJSON(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};function base64Slice(e,r,t){if(r===0&&t===e.length){return f.fromByteArray(e)}else{return f.fromByteArray(e.slice(r,t))}}function utf8Slice(e,r,t){t=Math.min(e.length,t);var f=[];var n=r;while(n<t){var i=e[n];var o=null;var u=i>239?4:i>223?3:i>191?2:1;if(n+u<=t){var a,s,h,c;switch(u){case 1:if(i<128){o=i}break;case 2:a=e[n+1];if((a&192)===128){c=(i&31)<<6|a&63;if(c>127){o=c}}break;case 3:a=e[n+1];s=e[n+2];if((a&192)===128&&(s&192)===128){c=(i&15)<<12|(a&63)<<6|s&63;if(c>2047&&(c<55296||c>57343)){o=c}}break;case 4:a=e[n+1];s=e[n+2];h=e[n+3];if((a&192)===128&&(s&192)===128&&(h&192)===128){c=(i&15)<<18|(a&63)<<12|(s&63)<<6|h&63;if(c>65535&&c<1114112){o=c}}}}if(o===null){o=65533;u=1}else if(o>65535){o-=65536;f.push(o>>>10&1023|55296);o=56320|o&1023}f.push(o);n+=u}return decodeCodePointsArray(f)}var u=4096;function decodeCodePointsArray(e){var r=e.length;if(r<=u){return String.fromCharCode.apply(String,e)}var t=\"\";var f=0;while(f<r){t+=String.fromCharCode.apply(String,e.slice(f,f+=u))}return t}function asciiSlice(e,r,t){var f=\"\";t=Math.min(e.length,t);for(var n=r;n<t;++n){f+=String.fromCharCode(e[n]&127)}return f}function latin1Slice(e,r,t){var f=\"\";t=Math.min(e.length,t);for(var n=r;n<t;++n){f+=String.fromCharCode(e[n])}return f}function hexSlice(e,r,t){var f=e.length;if(!r||r<0)r=0;if(!t||t<0||t>f)t=f;var n=\"\";for(var i=r;i<t;++i){n+=s[e[i]]}return n}function utf16leSlice(e,r,t){var f=e.slice(r,t);var n=\"\";for(var i=0;i<f.length;i+=2){n+=String.fromCharCode(f[i]+f[i+1]*256)}return n}Buffer.prototype.slice=function slice(e,r){var t=this.length;e=~~e;r=r===undefined?t:~~r;if(e<0){e+=t;if(e<0)e=0}else if(e>t){e=t}if(r<0){r+=t;if(r<0)r=0}else if(r>t){r=t}if(r<e)r=e;var f=this.subarray(e,r);Object.setPrototypeOf(f,Buffer.prototype);return f};function checkOffset(e,r,t){if(e%1!==0||e<0)throw new RangeError(\"offset is not uint\");if(e+r>t)throw new RangeError(\"Trying to access beyond buffer length\")}Buffer.prototype.readUIntLE=function readUIntLE(e,r,t){e=e>>>0;r=r>>>0;if(!t)checkOffset(e,r,this.length);var f=this[e];var n=1;var i=0;while(++i<r&&(n*=256)){f+=this[e+i]*n}return f};Buffer.prototype.readUIntBE=function readUIntBE(e,r,t){e=e>>>0;r=r>>>0;if(!t){checkOffset(e,r,this.length)}var f=this[e+--r];var n=1;while(r>0&&(n*=256)){f+=this[e+--r]*n}return f};Buffer.prototype.readUInt8=function readUInt8(e,r){e=e>>>0;if(!r)checkOffset(e,1,this.length);return this[e]};Buffer.prototype.readUInt16LE=function readUInt16LE(e,r){e=e>>>0;if(!r)checkOffset(e,2,this.length);return this[e]|this[e+1]<<8};Buffer.prototype.readUInt16BE=function readUInt16BE(e,r){e=e>>>0;if(!r)checkOffset(e,2,this.length);return this[e]<<8|this[e+1]};Buffer.prototype.readUInt32LE=function readUInt32LE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return(this[e]|this[e+1]<<8|this[e+2]<<16)+this[e+3]*16777216};Buffer.prototype.readUInt32BE=function readUInt32BE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return this[e]*16777216+(this[e+1]<<16|this[e+2]<<8|this[e+3])};Buffer.prototype.readIntLE=function readIntLE(e,r,t){e=e>>>0;r=r>>>0;if(!t)checkOffset(e,r,this.length);var f=this[e];var n=1;var i=0;while(++i<r&&(n*=256)){f+=this[e+i]*n}n*=128;if(f>=n)f-=Math.pow(2,8*r);return f};Buffer.prototype.readIntBE=function readIntBE(e,r,t){e=e>>>0;r=r>>>0;if(!t)checkOffset(e,r,this.length);var f=r;var n=1;var i=this[e+--f];while(f>0&&(n*=256)){i+=this[e+--f]*n}n*=128;if(i>=n)i-=Math.pow(2,8*r);return i};Buffer.prototype.readInt8=function readInt8(e,r){e=e>>>0;if(!r)checkOffset(e,1,this.length);if(!(this[e]&128))return this[e];return(255-this[e]+1)*-1};Buffer.prototype.readInt16LE=function readInt16LE(e,r){e=e>>>0;if(!r)checkOffset(e,2,this.length);var t=this[e]|this[e+1]<<8;return t&32768?t|4294901760:t};Buffer.prototype.readInt16BE=function readInt16BE(e,r){e=e>>>0;if(!r)checkOffset(e,2,this.length);var t=this[e+1]|this[e]<<8;return t&32768?t|4294901760:t};Buffer.prototype.readInt32LE=function readInt32LE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24};Buffer.prototype.readInt32BE=function readInt32BE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]};Buffer.prototype.readFloatLE=function readFloatLE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return n.read(this,e,true,23,4)};Buffer.prototype.readFloatBE=function readFloatBE(e,r){e=e>>>0;if(!r)checkOffset(e,4,this.length);return n.read(this,e,false,23,4)};Buffer.prototype.readDoubleLE=function readDoubleLE(e,r){e=e>>>0;if(!r)checkOffset(e,8,this.length);return n.read(this,e,true,52,8)};Buffer.prototype.readDoubleBE=function readDoubleBE(e,r){e=e>>>0;if(!r)checkOffset(e,8,this.length);return n.read(this,e,false,52,8)};function checkInt(e,r,t,f,n,i){if(!Buffer.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(r>n||r<i)throw new RangeError('\"value\" argument is out of bounds');if(t+f>e.length)throw new RangeError(\"Index out of range\")}Buffer.prototype.writeUIntLE=function writeUIntLE(e,r,t,f){e=+e;r=r>>>0;t=t>>>0;if(!f){var n=Math.pow(2,8*t)-1;checkInt(this,e,r,t,n,0)}var i=1;var o=0;this[r]=e&255;while(++o<t&&(i*=256)){this[r+o]=e/i&255}return r+t};Buffer.prototype.writeUIntBE=function writeUIntBE(e,r,t,f){e=+e;r=r>>>0;t=t>>>0;if(!f){var n=Math.pow(2,8*t)-1;checkInt(this,e,r,t,n,0)}var i=t-1;var o=1;this[r+i]=e&255;while(--i>=0&&(o*=256)){this[r+i]=e/o&255}return r+t};Buffer.prototype.writeUInt8=function writeUInt8(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,1,255,0);this[r]=e&255;return r+1};Buffer.prototype.writeUInt16LE=function writeUInt16LE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,2,65535,0);this[r]=e&255;this[r+1]=e>>>8;return r+2};Buffer.prototype.writeUInt16BE=function writeUInt16BE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,2,65535,0);this[r]=e>>>8;this[r+1]=e&255;return r+2};Buffer.prototype.writeUInt32LE=function writeUInt32LE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,4,4294967295,0);this[r+3]=e>>>24;this[r+2]=e>>>16;this[r+1]=e>>>8;this[r]=e&255;return r+4};Buffer.prototype.writeUInt32BE=function writeUInt32BE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,4,4294967295,0);this[r]=e>>>24;this[r+1]=e>>>16;this[r+2]=e>>>8;this[r+3]=e&255;return r+4};Buffer.prototype.writeIntLE=function writeIntLE(e,r,t,f){e=+e;r=r>>>0;if(!f){var n=Math.pow(2,8*t-1);checkInt(this,e,r,t,n-1,-n)}var i=0;var o=1;var u=0;this[r]=e&255;while(++i<t&&(o*=256)){if(e<0&&u===0&&this[r+i-1]!==0){u=1}this[r+i]=(e/o>>0)-u&255}return r+t};Buffer.prototype.writeIntBE=function writeIntBE(e,r,t,f){e=+e;r=r>>>0;if(!f){var n=Math.pow(2,8*t-1);checkInt(this,e,r,t,n-1,-n)}var i=t-1;var o=1;var u=0;this[r+i]=e&255;while(--i>=0&&(o*=256)){if(e<0&&u===0&&this[r+i+1]!==0){u=1}this[r+i]=(e/o>>0)-u&255}return r+t};Buffer.prototype.writeInt8=function writeInt8(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,1,127,-128);if(e<0)e=255+e+1;this[r]=e&255;return r+1};Buffer.prototype.writeInt16LE=function writeInt16LE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,2,32767,-32768);this[r]=e&255;this[r+1]=e>>>8;return r+2};Buffer.prototype.writeInt16BE=function writeInt16BE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,2,32767,-32768);this[r]=e>>>8;this[r+1]=e&255;return r+2};Buffer.prototype.writeInt32LE=function writeInt32LE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,4,2147483647,-2147483648);this[r]=e&255;this[r+1]=e>>>8;this[r+2]=e>>>16;this[r+3]=e>>>24;return r+4};Buffer.prototype.writeInt32BE=function writeInt32BE(e,r,t){e=+e;r=r>>>0;if(!t)checkInt(this,e,r,4,2147483647,-2147483648);if(e<0)e=4294967295+e+1;this[r]=e>>>24;this[r+1]=e>>>16;this[r+2]=e>>>8;this[r+3]=e&255;return r+4};function checkIEEE754(e,r,t,f,n,i){if(t+f>e.length)throw new RangeError(\"Index out of range\");if(t<0)throw new RangeError(\"Index out of range\")}function writeFloat(e,r,t,f,i){r=+r;t=t>>>0;if(!i){checkIEEE754(e,r,t,4,34028234663852886e22,-34028234663852886e22)}n.write(e,r,t,f,23,4);return t+4}Buffer.prototype.writeFloatLE=function writeFloatLE(e,r,t){return writeFloat(this,e,r,true,t)};Buffer.prototype.writeFloatBE=function writeFloatBE(e,r,t){return writeFloat(this,e,r,false,t)};function writeDouble(e,r,t,f,i){r=+r;t=t>>>0;if(!i){checkIEEE754(e,r,t,8,17976931348623157e292,-17976931348623157e292)}n.write(e,r,t,f,52,8);return t+8}Buffer.prototype.writeDoubleLE=function writeDoubleLE(e,r,t){return writeDouble(this,e,r,true,t)};Buffer.prototype.writeDoubleBE=function writeDoubleBE(e,r,t){return writeDouble(this,e,r,false,t)};Buffer.prototype.copy=function copy(e,r,t,f){if(!Buffer.isBuffer(e))throw new TypeError(\"argument should be a Buffer\");if(!t)t=0;if(!f&&f!==0)f=this.length;if(r>=e.length)r=e.length;if(!r)r=0;if(f>0&&f<t)f=t;if(f===t)return 0;if(e.length===0||this.length===0)return 0;if(r<0){throw new RangeError(\"targetStart out of bounds\")}if(t<0||t>=this.length)throw new RangeError(\"Index out of range\");if(f<0)throw new RangeError(\"sourceEnd out of bounds\");if(f>this.length)f=this.length;if(e.length-r<f-t){f=e.length-r+t}var n=f-t;if(this===e&&typeof Uint8Array.prototype.copyWithin===\"function\"){this.copyWithin(r,t,f)}else if(this===e&&t<r&&r<f){for(var i=n-1;i>=0;--i){e[i+r]=this[i+t]}}else{Uint8Array.prototype.set.call(e,this.subarray(t,f),r)}return n};Buffer.prototype.fill=function fill(e,r,t,f){if(typeof e===\"string\"){if(typeof r===\"string\"){f=r;r=0;t=this.length}else if(typeof t===\"string\"){f=t;t=this.length}if(f!==undefined&&typeof f!==\"string\"){throw new TypeError(\"encoding must be a string\")}if(typeof f===\"string\"&&!Buffer.isEncoding(f)){throw new TypeError(\"Unknown encoding: \"+f)}if(e.length===1){var n=e.charCodeAt(0);if(f===\"utf8\"&&n<128||f===\"latin1\"){e=n}}}else if(typeof e===\"number\"){e=e&255}else if(typeof e===\"boolean\"){e=Number(e)}if(r<0||this.length<r||this.length<t){throw new RangeError(\"Out of range index\")}if(t<=r){return this}r=r>>>0;t=t===undefined?this.length:t>>>0;if(!e)e=0;var i;if(typeof e===\"number\"){for(i=r;i<t;++i){this[i]=e}}else{var o=Buffer.isBuffer(e)?e:Buffer.from(e,f);var u=o.length;if(u===0){throw new TypeError('The value \"'+e+'\" is invalid for argument \"value\"')}for(i=0;i<t-r;++i){this[i+r]=o[i%u]}}return this};var a=/[^+/0-9A-Za-z-_]/g;function base64clean(e){e=e.split(\"=\")[0];e=e.trim().replace(a,\"\");if(e.length<2)return\"\";while(e.length%4!==0){e=e+\"=\"}return e}function utf8ToBytes(e,r){r=r||Infinity;var t;var f=e.length;var n=null;var i=[];for(var o=0;o<f;++o){t=e.charCodeAt(o);if(t>55295&&t<57344){if(!n){if(t>56319){if((r-=3)>-1)i.push(239,191,189);continue}else if(o+1===f){if((r-=3)>-1)i.push(239,191,189);continue}n=t;continue}if(t<56320){if((r-=3)>-1)i.push(239,191,189);n=t;continue}t=(n-55296<<10|t-56320)+65536}else if(n){if((r-=3)>-1)i.push(239,191,189)}n=null;if(t<128){if((r-=1)<0)break;i.push(t)}else if(t<2048){if((r-=2)<0)break;i.push(t>>6|192,t&63|128)}else if(t<65536){if((r-=3)<0)break;i.push(t>>12|224,t>>6&63|128,t&63|128)}else if(t<1114112){if((r-=4)<0)break;i.push(t>>18|240,t>>12&63|128,t>>6&63|128,t&63|128)}else{throw new Error(\"Invalid code point\")}}return i}function asciiToBytes(e){var r=[];for(var t=0;t<e.length;++t){r.push(e.charCodeAt(t)&255)}return r}function utf16leToBytes(e,r){var t,f,n;var i=[];for(var o=0;o<e.length;++o){if((r-=2)<0)break;t=e.charCodeAt(o);f=t>>8;n=t%256;i.push(n);i.push(f)}return i}function base64ToBytes(e){return f.toByteArray(base64clean(e))}function blitBuffer(e,r,t,f){for(var n=0;n<f;++n){if(n+t>=r.length||n>=e.length)break;r[n+t]=e[n]}return n}function isInstance(e,r){return e instanceof r||e!=null&&e.constructor!=null&&e.constructor.name!=null&&e.constructor.name===r.name}function numberIsNaN(e){return e!==e}var s=function(){var e=\"0123456789abcdef\";var r=new Array(256);for(var t=0;t<16;++t){var f=t*16;for(var n=0;n<16;++n){r[f+n]=e[t]+e[n]}}return r}()},783:function(e,r){\n/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nr.read=function(e,r,t,f,n){var i,o;var u=n*8-f-1;var a=(1<<u)-1;var s=a>>1;var h=-7;var c=t?n-1:0;var l=t?-1:1;var p=e[r+c];c+=l;i=p&(1<<-h)-1;p>>=-h;h+=u;for(;h>0;i=i*256+e[r+c],c+=l,h-=8){}o=i&(1<<-h)-1;i>>=-h;h+=f;for(;h>0;o=o*256+e[r+c],c+=l,h-=8){}if(i===0){i=1-s}else if(i===a){return o?NaN:(p?-1:1)*Infinity}else{o=o+Math.pow(2,f);i=i-s}return(p?-1:1)*o*Math.pow(2,i-f)};r.write=function(e,r,t,f,n,i){var o,u,a;var s=i*8-n-1;var h=(1<<s)-1;var c=h>>1;var l=n===23?Math.pow(2,-24)-Math.pow(2,-77):0;var p=f?0:i-1;var y=f?1:-1;var g=r<0||r===0&&1/r<0?1:0;r=Math.abs(r);if(isNaN(r)||r===Infinity){u=isNaN(r)?1:0;o=h}else{o=Math.floor(Math.log(r)/Math.LN2);if(r*(a=Math.pow(2,-o))<1){o--;a*=2}if(o+c>=1){r+=l/a}else{r+=l*Math.pow(2,1-c)}if(r*a>=2){o++;a/=2}if(o+c>=h){u=0;o=h}else if(o+c>=1){u=(r*a-1)*Math.pow(2,n);o=o+c}else{u=r*Math.pow(2,c-1)*Math.pow(2,n);o=0}}for(;n>=8;e[t+p]=u&255,p+=y,u/=256,n-=8){}o=o<<n|u;s+=n;for(;s>0;e[t+p]=o&255,p+=y,o/=256,s-=8){}e[t+p-y]|=g*128}}};var r={};function __nccwpck_require__(t){var f=r[t];if(f!==undefined){return f.exports}var n=r[t]={exports:{}};var i=true;try{e[t](n,n.exports,__nccwpck_require__);i=false}finally{if(i)delete r[t]}return n.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var t=__nccwpck_require__(72);module.exports=t})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvYnVmZmVyL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7QUFBQSxZQUFZLE9BQU8sa0JBQWtCLGFBQWEsd0JBQXdCLDBCQUEwQiw4QkFBOEIsU0FBUyxTQUFTLHVEQUF1RCx5RUFBeUUsdUJBQXVCLElBQUksS0FBSyxVQUFVLHFCQUFxQix3QkFBd0Isd0JBQXdCLG9CQUFvQixlQUFlLFVBQVUsa0VBQWtFLHFCQUFxQixjQUFjLG9CQUFvQixZQUFZLHVCQUF1QixpQkFBaUIsV0FBVyxXQUFXLGtCQUFrQiw0QkFBNEIsa0JBQWtCLHdCQUF3QixNQUFNLGlCQUFpQixXQUFXLFdBQVcsZ0NBQWdDLFFBQVEsZ0JBQWdCLE1BQU0sUUFBUSxJQUFJLE1BQU0sK0ZBQStGLGlCQUFpQixnQkFBZ0IsYUFBYSxVQUFVLGdEQUFnRCxhQUFhLFVBQVUseUVBQXlFLGdCQUFnQixhQUFhLFNBQVMsNEJBQTRCLGtEQUFrRCw0QkFBNEIsTUFBTSxTQUFTLFlBQVksSUFBSSxNQUFNLHFEQUFxRCwyQkFBMkIsa0JBQWtCLDBCQUEwQixNQUFNLGVBQWUsVUFBVSxTQUFTLFlBQVksa0JBQWtCLElBQUksTUFBTSxxQ0FBcUMsVUFBVSxTQUFTLGdDQUFnQyxlQUFlLHFCQUFxQiwyQ0FBMkMsbUJBQW1CLG9CQUFvQjtBQUM5ckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixhQUFhLCtHQUErRyxnQkFBZ0Isd0JBQXdCLHVCQUF1QixpQkFBaUIsZUFBZSwrQ0FBK0MsaUdBQWlHLGtLQUFrSyw2QkFBNkIsSUFBSSx3QkFBd0IsT0FBTyxlQUFlLFlBQVksOENBQThDLDJCQUEyQixvQkFBb0IsU0FBUyxjQUFjLGlEQUFpRCwrQkFBK0IsMkNBQTJDLG9CQUFvQixFQUFFLGlEQUFpRCwrQkFBK0IsMkNBQTJDLHdCQUF3QixFQUFFLHlCQUF5QixRQUFRLHVFQUF1RSx3QkFBd0IsMENBQTBDLFNBQVMs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Q0FBK0MsY0FBYyxhQUFhLDRCQUE0QixjQUFjLDJCQUEyQixlQUFlLElBQUksS0FBSyxtQ0FBbUMsMkJBQTJCLElBQUksS0FBSyxXQUFXLE9BQU8sS0FBSyxxQkFBcUIsV0FBVyxJQUFJLEtBQUssV0FBVyxJQUFJLElBQUksZ0JBQWdCLHdCQUF3QixNQUFNLEtBQUssa0NBQWtDLEtBQUssS0FBSyxLQUFLLGdDQUFnQyxTQUFTLEtBQUssS0FBSyxJQUFJLGdDQUFnQyxtQkFBbUIsU0FBUyxnQ0FBZ0MsV0FBVyxrQkFBa0IsaUJBQWlCLFlBQVksWUFBWSxXQUFXLElBQUksc0NBQXNDLFFBQVEsUUFBUSxpQkFBaUIsaUJBQWlCLG1FQUFtRSxTQUFTLEtBQUssOEJBQThCLGlCQUFpQiIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvYnVmZmVyL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe3ZhciBlPXs2NzU6ZnVuY3Rpb24oZSxyKXtcInVzZSBzdHJpY3RcIjtyLmJ5dGVMZW5ndGg9Ynl0ZUxlbmd0aDtyLnRvQnl0ZUFycmF5PXRvQnl0ZUFycmF5O3IuZnJvbUJ5dGVBcnJheT1mcm9tQnl0ZUFycmF5O3ZhciB0PVtdO3ZhciBmPVtdO3ZhciBuPXR5cGVvZiBVaW50OEFycmF5IT09XCJ1bmRlZmluZWRcIj9VaW50OEFycmF5OkFycmF5O3ZhciBpPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiO2Zvcih2YXIgbz0wLHU9aS5sZW5ndGg7bzx1Oysrbyl7dFtvXT1pW29dO2ZbaS5jaGFyQ29kZUF0KG8pXT1vfWZbXCItXCIuY2hhckNvZGVBdCgwKV09NjI7ZltcIl9cIi5jaGFyQ29kZUF0KDApXT02MztmdW5jdGlvbiBnZXRMZW5zKGUpe3ZhciByPWUubGVuZ3RoO2lmKHIlND4wKXt0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0XCIpfXZhciB0PWUuaW5kZXhPZihcIj1cIik7aWYodD09PS0xKXQ9cjt2YXIgZj10PT09cj8wOjQtdCU0O3JldHVyblt0LGZdfWZ1bmN0aW9uIGJ5dGVMZW5ndGgoZSl7dmFyIHI9Z2V0TGVucyhlKTt2YXIgdD1yWzBdO3ZhciBmPXJbMV07cmV0dXJuKHQrZikqMy80LWZ9ZnVuY3Rpb24gX2J5dGVMZW5ndGgoZSxyLHQpe3JldHVybihyK3QpKjMvNC10fWZ1bmN0aW9uIHRvQnl0ZUFycmF5KGUpe3ZhciByO3ZhciB0PWdldExlbnMoZSk7dmFyIGk9dFswXTt2YXIgbz10WzFdO3ZhciB1PW5ldyBuKF9ieXRlTGVuZ3RoKGUsaSxvKSk7dmFyIGE9MDt2YXIgcz1vPjA/aS00Omk7dmFyIGg7Zm9yKGg9MDtoPHM7aCs9NCl7cj1mW2UuY2hhckNvZGVBdChoKV08PDE4fGZbZS5jaGFyQ29kZUF0KGgrMSldPDwxMnxmW2UuY2hhckNvZGVBdChoKzIpXTw8NnxmW2UuY2hhckNvZGVBdChoKzMpXTt1W2ErK109cj4+MTYmMjU1O3VbYSsrXT1yPj44JjI1NTt1W2ErK109ciYyNTV9aWYobz09PTIpe3I9ZltlLmNoYXJDb2RlQXQoaCldPDwyfGZbZS5jaGFyQ29kZUF0KGgrMSldPj40O3VbYSsrXT1yJjI1NX1pZihvPT09MSl7cj1mW2UuY2hhckNvZGVBdChoKV08PDEwfGZbZS5jaGFyQ29kZUF0KGgrMSldPDw0fGZbZS5jaGFyQ29kZUF0KGgrMildPj4yO3VbYSsrXT1yPj44JjI1NTt1W2ErK109ciYyNTV9cmV0dXJuIHV9ZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0KGUpe3JldHVybiB0W2U+PjE4JjYzXSt0W2U+PjEyJjYzXSt0W2U+PjYmNjNdK3RbZSY2M119ZnVuY3Rpb24gZW5jb2RlQ2h1bmsoZSxyLHQpe3ZhciBmO3ZhciBuPVtdO2Zvcih2YXIgaT1yO2k8dDtpKz0zKXtmPShlW2ldPDwxNiYxNjcxMTY4MCkrKGVbaSsxXTw8OCY2NTI4MCkrKGVbaSsyXSYyNTUpO24ucHVzaCh0cmlwbGV0VG9CYXNlNjQoZikpfXJldHVybiBuLmpvaW4oXCJcIil9ZnVuY3Rpb24gZnJvbUJ5dGVBcnJheShlKXt2YXIgcjt2YXIgZj1lLmxlbmd0aDt2YXIgbj1mJTM7dmFyIGk9W107dmFyIG89MTYzODM7Zm9yKHZhciB1PTAsYT1mLW47dTxhO3UrPW8pe2kucHVzaChlbmNvZGVDaHVuayhlLHUsdStvPmE/YTp1K28pKX1pZihuPT09MSl7cj1lW2YtMV07aS5wdXNoKHRbcj4+Ml0rdFtyPDw0JjYzXStcIj09XCIpfWVsc2UgaWYobj09PTIpe3I9KGVbZi0yXTw8OCkrZVtmLTFdO2kucHVzaCh0W3I+PjEwXSt0W3I+PjQmNjNdK3Rbcjw8MiY2M10rXCI9XCIpfXJldHVybiBpLmpvaW4oXCJcIil9fSw3MjpmdW5jdGlvbihlLHIsdCl7XCJ1c2Ugc3RyaWN0XCI7XG4vKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi92YXIgZj10KDY3NSk7dmFyIG49dCg3ODMpO3ZhciBpPXR5cGVvZiBTeW1ib2w9PT1cImZ1bmN0aW9uXCImJnR5cGVvZiBTeW1ib2wuZm9yPT09XCJmdW5jdGlvblwiP1N5bWJvbC5mb3IoXCJub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbVwiKTpudWxsO3IuQnVmZmVyPUJ1ZmZlcjtyLlNsb3dCdWZmZXI9U2xvd0J1ZmZlcjtyLklOU1BFQ1RfTUFYX0JZVEVTPTUwO3ZhciBvPTIxNDc0ODM2NDc7ci5rTWF4TGVuZ3RoPW87QnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dHlwZWRBcnJheVN1cHBvcnQoKTtpZighQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQmJnR5cGVvZiBjb25zb2xlIT09XCJ1bmRlZmluZWRcIiYmdHlwZW9mIGNvbnNvbGUuZXJyb3I9PT1cImZ1bmN0aW9uXCIpe2NvbnNvbGUuZXJyb3IoXCJUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgXCIrXCJgYnVmZmVyYCB2NS54LiBVc2UgYGJ1ZmZlcmAgdjQueCBpZiB5b3UgcmVxdWlyZSBvbGQgYnJvd3NlciBzdXBwb3J0LlwiKX1mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCgpe3RyeXt2YXIgZT1uZXcgVWludDhBcnJheSgxKTt2YXIgcj17Zm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX07T2JqZWN0LnNldFByb3RvdHlwZU9mKHIsVWludDhBcnJheS5wcm90b3R5cGUpO09iamVjdC5zZXRQcm90b3R5cGVPZihlLHIpO3JldHVybiBlLmZvbygpPT09NDJ9Y2F0Y2goZSl7cmV0dXJuIGZhbHNlfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSxcInBhcmVudFwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLmJ1ZmZlcn19KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLnByb3RvdHlwZSxcIm9mZnNldFwiLHtlbnVtZXJhYmxlOnRydWUsZ2V0OmZ1bmN0aW9uKCl7aWYoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSlyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLmJ5dGVPZmZzZXR9fSk7ZnVuY3Rpb24gY3JlYXRlQnVmZmVyKGUpe2lmKGU+byl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrZSsnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyl9dmFyIHI9bmV3IFVpbnQ4QXJyYXkoZSk7T2JqZWN0LnNldFByb3RvdHlwZU9mKHIsQnVmZmVyLnByb3RvdHlwZSk7cmV0dXJuIHJ9ZnVuY3Rpb24gQnVmZmVyKGUscix0KXtpZih0eXBlb2YgZT09PVwibnVtYmVyXCIpe2lmKHR5cGVvZiByPT09XCJzdHJpbmdcIil7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwic3RyaW5nXCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4gUmVjZWl2ZWQgdHlwZSBudW1iZXInKX1yZXR1cm4gYWxsb2NVbnNhZmUoZSl9cmV0dXJuIGZyb20oZSxyLHQpfUJ1ZmZlci5wb29sU2l6ZT04MTkyO2Z1bmN0aW9uIGZyb20oZSxyLHQpe2lmKHR5cGVvZiBlPT09XCJzdHJpbmdcIil7cmV0dXJuIGZyb21TdHJpbmcoZSxyKX1pZihBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpe3JldHVybiBmcm9tQXJyYXlMaWtlKGUpfWlmKGU9PW51bGwpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBcIitcIm9yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlIFwiK3R5cGVvZiBlKX1pZihpc0luc3RhbmNlKGUsQXJyYXlCdWZmZXIpfHxlJiZpc0luc3RhbmNlKGUuYnVmZmVyLEFycmF5QnVmZmVyKSl7cmV0dXJuIGZyb21BcnJheUJ1ZmZlcihlLHIsdCl9aWYodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyIT09XCJ1bmRlZmluZWRcIiYmKGlzSW5zdGFuY2UoZSxTaGFyZWRBcnJheUJ1ZmZlcil8fGUmJmlzSW5zdGFuY2UoZS5idWZmZXIsU2hhcmVkQXJyYXlCdWZmZXIpKSl7cmV0dXJuIGZyb21BcnJheUJ1ZmZlcihlLHIsdCl9aWYodHlwZW9mIGU9PT1cIm51bWJlclwiKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcicpfXZhciBmPWUudmFsdWVPZiYmZS52YWx1ZU9mKCk7aWYoZiE9bnVsbCYmZiE9PWUpe3JldHVybiBCdWZmZXIuZnJvbShmLHIsdCl9dmFyIG49ZnJvbU9iamVjdChlKTtpZihuKXJldHVybiBuO2lmKHR5cGVvZiBTeW1ib2whPT1cInVuZGVmaW5lZFwiJiZTeW1ib2wudG9QcmltaXRpdmUhPW51bGwmJnR5cGVvZiBlW1N5bWJvbC50b1ByaW1pdGl2ZV09PT1cImZ1bmN0aW9uXCIpe3JldHVybiBCdWZmZXIuZnJvbShlW1N5bWJvbC50b1ByaW1pdGl2ZV0oXCJzdHJpbmdcIikscix0KX10aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgXCIrXCJvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSBcIit0eXBlb2YgZSl9QnVmZmVyLmZyb209ZnVuY3Rpb24oZSxyLHQpe3JldHVybiBmcm9tKGUscix0KX07T2JqZWN0LnNldFByb3RvdHlwZU9mKEJ1ZmZlci5wcm90b3R5cGUsVWludDhBcnJheS5wcm90b3R5cGUpO09iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIsVWludDhBcnJheSk7ZnVuY3Rpb24gYXNzZXJ0U2l6ZShlKXtpZih0eXBlb2YgZSE9PVwibnVtYmVyXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKX1lbHNlIGlmKGU8MCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicrZSsnXCIgaXMgaW52YWxpZCBmb3Igb3B0aW9uIFwic2l6ZVwiJyl9fWZ1bmN0aW9uIGFsbG9jKGUscix0KXthc3NlcnRTaXplKGUpO2lmKGU8PTApe3JldHVybiBjcmVhdGVCdWZmZXIoZSl9aWYociE9PXVuZGVmaW5lZCl7cmV0dXJuIHR5cGVvZiB0PT09XCJzdHJpbmdcIj9jcmVhdGVCdWZmZXIoZSkuZmlsbChyLHQpOmNyZWF0ZUJ1ZmZlcihlKS5maWxsKHIpfXJldHVybiBjcmVhdGVCdWZmZXIoZSl9QnVmZmVyLmFsbG9jPWZ1bmN0aW9uKGUscix0KXtyZXR1cm4gYWxsb2MoZSxyLHQpfTtmdW5jdGlvbiBhbGxvY1Vuc2FmZShlKXthc3NlcnRTaXplKGUpO3JldHVybiBjcmVhdGVCdWZmZXIoZTwwPzA6Y2hlY2tlZChlKXwwKX1CdWZmZXIuYWxsb2NVbnNhZmU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFsbG9jVW5zYWZlKGUpfTtCdWZmZXIuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBhbGxvY1Vuc2FmZShlKX07ZnVuY3Rpb24gZnJvbVN0cmluZyhlLHIpe2lmKHR5cGVvZiByIT09XCJzdHJpbmdcInx8cj09PVwiXCIpe3I9XCJ1dGY4XCJ9aWYoIUJ1ZmZlci5pc0VuY29kaW5nKHIpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrcil9dmFyIHQ9Ynl0ZUxlbmd0aChlLHIpfDA7dmFyIGY9Y3JlYXRlQnVmZmVyKHQpO3ZhciBuPWYud3JpdGUoZSxyKTtpZihuIT09dCl7Zj1mLnNsaWNlKDAsbil9cmV0dXJuIGZ9ZnVuY3Rpb24gZnJvbUFycmF5TGlrZShlKXt2YXIgcj1lLmxlbmd0aDwwPzA6Y2hlY2tlZChlLmxlbmd0aCl8MDt2YXIgdD1jcmVhdGVCdWZmZXIocik7Zm9yKHZhciBmPTA7ZjxyO2YrPTEpe3RbZl09ZVtmXSYyNTV9cmV0dXJuIHR9ZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyKGUscix0KXtpZihyPDB8fGUuYnl0ZUxlbmd0aDxyKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJvZmZzZXRcIiBpcyBvdXRzaWRlIG9mIGJ1ZmZlciBib3VuZHMnKX1pZihlLmJ5dGVMZW5ndGg8cisodHx8MCkpe3Rocm93IG5ldyBSYW5nZUVycm9yKCdcImxlbmd0aFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpfXZhciBmO2lmKHI9PT11bmRlZmluZWQmJnQ9PT11bmRlZmluZWQpe2Y9bmV3IFVpbnQ4QXJyYXkoZSl9ZWxzZSBpZih0PT09dW5kZWZpbmVkKXtmPW5ldyBVaW50OEFycmF5KGUscil9ZWxzZXtmPW5ldyBVaW50OEFycmF5KGUscix0KX1PYmplY3Quc2V0UHJvdG90eXBlT2YoZixCdWZmZXIucHJvdG90eXBlKTtyZXR1cm4gZn1mdW5jdGlvbiBmcm9tT2JqZWN0KGUpe2lmKEJ1ZmZlci5pc0J1ZmZlcihlKSl7dmFyIHI9Y2hlY2tlZChlLmxlbmd0aCl8MDt2YXIgdD1jcmVhdGVCdWZmZXIocik7aWYodC5sZW5ndGg9PT0wKXtyZXR1cm4gdH1lLmNvcHkodCwwLDAscik7cmV0dXJuIHR9aWYoZS5sZW5ndGghPT11bmRlZmluZWQpe2lmKHR5cGVvZiBlLmxlbmd0aCE9PVwibnVtYmVyXCJ8fG51bWJlcklzTmFOKGUubGVuZ3RoKSl7cmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKX1yZXR1cm4gZnJvbUFycmF5TGlrZShlKX1pZihlLnR5cGU9PT1cIkJ1ZmZlclwiJiZBcnJheS5pc0FycmF5KGUuZGF0YSkpe3JldHVybiBmcm9tQXJyYXlMaWtlKGUuZGF0YSl9fWZ1bmN0aW9uIGNoZWNrZWQoZSl7aWYoZT49byl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIFwiK1wic2l6ZTogMHhcIitvLnRvU3RyaW5nKDE2KStcIiBieXRlc1wiKX1yZXR1cm4gZXwwfWZ1bmN0aW9uIFNsb3dCdWZmZXIoZSl7aWYoK2UhPWUpe2U9MH1yZXR1cm4gQnVmZmVyLmFsbG9jKCtlKX1CdWZmZXIuaXNCdWZmZXI9ZnVuY3Rpb24gaXNCdWZmZXIoZSl7cmV0dXJuIGUhPW51bGwmJmUuX2lzQnVmZmVyPT09dHJ1ZSYmZSE9PUJ1ZmZlci5wcm90b3R5cGV9O0J1ZmZlci5jb21wYXJlPWZ1bmN0aW9uIGNvbXBhcmUoZSxyKXtpZihpc0luc3RhbmNlKGUsVWludDhBcnJheSkpZT1CdWZmZXIuZnJvbShlLGUub2Zmc2V0LGUuYnl0ZUxlbmd0aCk7aWYoaXNJbnN0YW5jZShyLFVpbnQ4QXJyYXkpKXI9QnVmZmVyLmZyb20ocixyLm9mZnNldCxyLmJ5dGVMZW5ndGgpO2lmKCFCdWZmZXIuaXNCdWZmZXIoZSl8fCFCdWZmZXIuaXNCdWZmZXIocikpe3Rocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcImJ1ZjFcIiwgXCJidWYyXCIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknKX1pZihlPT09cilyZXR1cm4gMDt2YXIgdD1lLmxlbmd0aDt2YXIgZj1yLmxlbmd0aDtmb3IodmFyIG49MCxpPU1hdGgubWluKHQsZik7bjxpOysrbil7aWYoZVtuXSE9PXJbbl0pe3Q9ZVtuXTtmPXJbbl07YnJlYWt9fWlmKHQ8ZilyZXR1cm4tMTtpZihmPHQpcmV0dXJuIDE7cmV0dXJuIDB9O0J1ZmZlci5pc0VuY29kaW5nPWZ1bmN0aW9uIGlzRW5jb2RpbmcoZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiB0cnVlO2RlZmF1bHQ6cmV0dXJuIGZhbHNlfX07QnVmZmVyLmNvbmNhdD1mdW5jdGlvbiBjb25jYXQoZSxyKXtpZighQXJyYXkuaXNBcnJheShlKSl7dGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyl9aWYoZS5sZW5ndGg9PT0wKXtyZXR1cm4gQnVmZmVyLmFsbG9jKDApfXZhciB0O2lmKHI9PT11bmRlZmluZWQpe3I9MDtmb3IodD0wO3Q8ZS5sZW5ndGg7Kyt0KXtyKz1lW3RdLmxlbmd0aH19dmFyIGY9QnVmZmVyLmFsbG9jVW5zYWZlKHIpO3ZhciBuPTA7Zm9yKHQ9MDt0PGUubGVuZ3RoOysrdCl7dmFyIGk9ZVt0XTtpZihpc0luc3RhbmNlKGksVWludDhBcnJheSkpe2k9QnVmZmVyLmZyb20oaSl9aWYoIUJ1ZmZlci5pc0J1ZmZlcihpKSl7dGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyl9aS5jb3B5KGYsbik7bis9aS5sZW5ndGh9cmV0dXJuIGZ9O2Z1bmN0aW9uIGJ5dGVMZW5ndGgoZSxyKXtpZihCdWZmZXIuaXNCdWZmZXIoZSkpe3JldHVybiBlLmxlbmd0aH1pZihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGlzSW5zdGFuY2UoZSxBcnJheUJ1ZmZlcikpe3JldHVybiBlLmJ5dGVMZW5ndGh9aWYodHlwZW9mIGUhPT1cInN0cmluZ1wiKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJzdHJpbmdcIiBhcmd1bWVudCBtdXN0IGJlIG9uZSBvZiB0eXBlIHN0cmluZywgQnVmZmVyLCBvciBBcnJheUJ1ZmZlci4gJytcIlJlY2VpdmVkIHR5cGUgXCIrdHlwZW9mIGUpfXZhciB0PWUubGVuZ3RoO3ZhciBmPWFyZ3VtZW50cy5sZW5ndGg+MiYmYXJndW1lbnRzWzJdPT09dHJ1ZTtpZighZiYmdD09PTApcmV0dXJuIDA7dmFyIG49ZmFsc2U7Zm9yKDs7KXtzd2l0Y2gocil7Y2FzZVwiYXNjaWlcIjpjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gdDtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gdXRmOFRvQnl0ZXMoZSkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiB0KjI7Y2FzZVwiaGV4XCI6cmV0dXJuIHQ+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBiYXNlNjRUb0J5dGVzKGUpLmxlbmd0aDtkZWZhdWx0OmlmKG4pe3JldHVybiBmPy0xOnV0ZjhUb0J5dGVzKGUpLmxlbmd0aH1yPShcIlwiK3IpLnRvTG93ZXJDYXNlKCk7bj10cnVlfX19QnVmZmVyLmJ5dGVMZW5ndGg9Ynl0ZUxlbmd0aDtmdW5jdGlvbiBzbG93VG9TdHJpbmcoZSxyLHQpe3ZhciBmPWZhbHNlO2lmKHI9PT11bmRlZmluZWR8fHI8MCl7cj0wfWlmKHI+dGhpcy5sZW5ndGgpe3JldHVyblwiXCJ9aWYodD09PXVuZGVmaW5lZHx8dD50aGlzLmxlbmd0aCl7dD10aGlzLmxlbmd0aH1pZih0PD0wKXtyZXR1cm5cIlwifXQ+Pj49MDtyPj4+PTA7aWYodDw9cil7cmV0dXJuXCJcIn1pZighZSllPVwidXRmOFwiO3doaWxlKHRydWUpe3N3aXRjaChlKXtjYXNlXCJoZXhcIjpyZXR1cm4gaGV4U2xpY2UodGhpcyxyLHQpO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiB1dGY4U2xpY2UodGhpcyxyLHQpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIGFzY2lpU2xpY2UodGhpcyxyLHQpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBsYXRpbjFTbGljZSh0aGlzLHIsdCk7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMscix0KTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMscix0KTtkZWZhdWx0OmlmKGYpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2UpO2U9KGUrXCJcIikudG9Mb3dlckNhc2UoKTtmPXRydWV9fX1CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlcj10cnVlO2Z1bmN0aW9uIHN3YXAoZSxyLHQpe3ZhciBmPWVbcl07ZVtyXT1lW3RdO2VbdF09Zn1CdWZmZXIucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbiBzd2FwMTYoKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPT0wKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzXCIpfWZvcih2YXIgcj0wO3I8ZTtyKz0yKXtzd2FwKHRoaXMscixyKzEpfXJldHVybiB0aGlzfTtCdWZmZXIucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbiBzd2FwMzIoKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTQhPT0wKXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzXCIpfWZvcih2YXIgcj0wO3I8ZTtyKz00KXtzd2FwKHRoaXMscixyKzMpO3N3YXAodGhpcyxyKzEscisyKX1yZXR1cm4gdGhpc307QnVmZmVyLnByb3RvdHlwZS5zd2FwNjQ9ZnVuY3Rpb24gc3dhcDY0KCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT09MCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0c1wiKX1mb3IodmFyIHI9MDtyPGU7cis9OCl7c3dhcCh0aGlzLHIscis3KTtzd2FwKHRoaXMscisxLHIrNik7c3dhcCh0aGlzLHIrMixyKzUpO3N3YXAodGhpcyxyKzMscis0KX1yZXR1cm4gdGhpc307QnVmZmVyLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbiB0b1N0cmluZygpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGU9PT0wKXJldHVyblwiXCI7aWYoYXJndW1lbnRzLmxlbmd0aD09PTApcmV0dXJuIHV0ZjhTbGljZSh0aGlzLDAsZSk7cmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O0J1ZmZlci5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmc9QnVmZmVyLnByb3RvdHlwZS50b1N0cmluZztCdWZmZXIucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbiBlcXVhbHMoZSl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtpZih0aGlzPT09ZSlyZXR1cm4gdHJ1ZTtyZXR1cm4gQnVmZmVyLmNvbXBhcmUodGhpcyxlKT09PTB9O0J1ZmZlci5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbiBpbnNwZWN0KCl7dmFyIGU9XCJcIjt2YXIgdD1yLklOU1BFQ1RfTUFYX0JZVEVTO2U9dGhpcy50b1N0cmluZyhcImhleFwiLDAsdCkucmVwbGFjZSgvKC57Mn0pL2csXCIkMSBcIikudHJpbSgpO2lmKHRoaXMubGVuZ3RoPnQpZSs9XCIgLi4uIFwiO3JldHVyblwiPEJ1ZmZlciBcIitlK1wiPlwifTtpZihpKXtCdWZmZXIucHJvdG90eXBlW2ldPUJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdH1CdWZmZXIucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24gY29tcGFyZShlLHIsdCxmLG4pe2lmKGlzSW5zdGFuY2UoZSxVaW50OEFycmF5KSl7ZT1CdWZmZXIuZnJvbShlLGUub2Zmc2V0LGUuYnl0ZUxlbmd0aCl9aWYoIUJ1ZmZlci5pc0J1ZmZlcihlKSl7dGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gJytcIlJlY2VpdmVkIHR5cGUgXCIrdHlwZW9mIGUpfWlmKHI9PT11bmRlZmluZWQpe3I9MH1pZih0PT09dW5kZWZpbmVkKXt0PWU/ZS5sZW5ndGg6MH1pZihmPT09dW5kZWZpbmVkKXtmPTB9aWYobj09PXVuZGVmaW5lZCl7bj10aGlzLmxlbmd0aH1pZihyPDB8fHQ+ZS5sZW5ndGh8fGY8MHx8bj50aGlzLmxlbmd0aCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvdXQgb2YgcmFuZ2UgaW5kZXhcIil9aWYoZj49biYmcj49dCl7cmV0dXJuIDB9aWYoZj49bil7cmV0dXJuLTF9aWYocj49dCl7cmV0dXJuIDF9cj4+Pj0wO3Q+Pj49MDtmPj4+PTA7bj4+Pj0wO2lmKHRoaXM9PT1lKXJldHVybiAwO3ZhciBpPW4tZjt2YXIgbz10LXI7dmFyIHU9TWF0aC5taW4oaSxvKTt2YXIgYT10aGlzLnNsaWNlKGYsbik7dmFyIHM9ZS5zbGljZShyLHQpO2Zvcih2YXIgaD0wO2g8dTsrK2gpe2lmKGFbaF0hPT1zW2hdKXtpPWFbaF07bz1zW2hdO2JyZWFrfX1pZihpPG8pcmV0dXJuLTE7aWYobzxpKXJldHVybiAxO3JldHVybiAwfTtmdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZihlLHIsdCxmLG4pe2lmKGUubGVuZ3RoPT09MClyZXR1cm4tMTtpZih0eXBlb2YgdD09PVwic3RyaW5nXCIpe2Y9dDt0PTB9ZWxzZSBpZih0PjIxNDc0ODM2NDcpe3Q9MjE0NzQ4MzY0N31lbHNlIGlmKHQ8LTIxNDc0ODM2NDgpe3Q9LTIxNDc0ODM2NDh9dD0rdDtpZihudW1iZXJJc05hTih0KSl7dD1uPzA6ZS5sZW5ndGgtMX1pZih0PDApdD1lLmxlbmd0aCt0O2lmKHQ+PWUubGVuZ3RoKXtpZihuKXJldHVybi0xO2Vsc2UgdD1lLmxlbmd0aC0xfWVsc2UgaWYodDwwKXtpZihuKXQ9MDtlbHNlIHJldHVybi0xfWlmKHR5cGVvZiByPT09XCJzdHJpbmdcIil7cj1CdWZmZXIuZnJvbShyLGYpfWlmKEJ1ZmZlci5pc0J1ZmZlcihyKSl7aWYoci5sZW5ndGg9PT0wKXtyZXR1cm4tMX1yZXR1cm4gYXJyYXlJbmRleE9mKGUscix0LGYsbil9ZWxzZSBpZih0eXBlb2Ygcj09PVwibnVtYmVyXCIpe3I9ciYyNTU7aWYodHlwZW9mIFVpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2Y9PT1cImZ1bmN0aW9uXCIpe2lmKG4pe3JldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoZSxyLHQpfWVsc2V7cmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoZSxyLHQpfX1yZXR1cm4gYXJyYXlJbmRleE9mKGUsW3JdLHQsZixuKX10aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfWZ1bmN0aW9uIGFycmF5SW5kZXhPZihlLHIsdCxmLG4pe3ZhciBpPTE7dmFyIG89ZS5sZW5ndGg7dmFyIHU9ci5sZW5ndGg7aWYoZiE9PXVuZGVmaW5lZCl7Zj1TdHJpbmcoZikudG9Mb3dlckNhc2UoKTtpZihmPT09XCJ1Y3MyXCJ8fGY9PT1cInVjcy0yXCJ8fGY9PT1cInV0ZjE2bGVcInx8Zj09PVwidXRmLTE2bGVcIil7aWYoZS5sZW5ndGg8Mnx8ci5sZW5ndGg8Mil7cmV0dXJuLTF9aT0yO28vPTI7dS89Mjt0Lz0yfX1mdW5jdGlvbiByZWFkKGUscil7aWYoaT09PTEpe3JldHVybiBlW3JdfWVsc2V7cmV0dXJuIGUucmVhZFVJbnQxNkJFKHIqaSl9fXZhciBhO2lmKG4pe3ZhciBzPS0xO2ZvcihhPXQ7YTxvO2ErKyl7aWYocmVhZChlLGEpPT09cmVhZChyLHM9PT0tMT8wOmEtcykpe2lmKHM9PT0tMSlzPWE7aWYoYS1zKzE9PT11KXJldHVybiBzKml9ZWxzZXtpZihzIT09LTEpYS09YS1zO3M9LTF9fX1lbHNle2lmKHQrdT5vKXQ9by11O2ZvcihhPXQ7YT49MDthLS0pe3ZhciBoPXRydWU7Zm9yKHZhciBjPTA7Yzx1O2MrKyl7aWYocmVhZChlLGErYykhPT1yZWFkKHIsYykpe2g9ZmFsc2U7YnJlYWt9fWlmKGgpcmV0dXJuIGF9fXJldHVybi0xfUJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXM9ZnVuY3Rpb24gaW5jbHVkZXMoZSxyLHQpe3JldHVybiB0aGlzLmluZGV4T2YoZSxyLHQpIT09LTF9O0J1ZmZlci5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbiBpbmRleE9mKGUscix0KXtyZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcyxlLHIsdCx0cnVlKX07QnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbiBsYXN0SW5kZXhPZihlLHIsdCl7cmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsZSxyLHQsZmFsc2UpfTtmdW5jdGlvbiBoZXhXcml0ZShlLHIsdCxmKXt0PU51bWJlcih0KXx8MDt2YXIgbj1lLmxlbmd0aC10O2lmKCFmKXtmPW59ZWxzZXtmPU51bWJlcihmKTtpZihmPm4pe2Y9bn19dmFyIGk9ci5sZW5ndGg7aWYoZj5pLzIpe2Y9aS8yfWZvcih2YXIgbz0wO288ZjsrK28pe3ZhciB1PXBhcnNlSW50KHIuc3Vic3RyKG8qMiwyKSwxNik7aWYobnVtYmVySXNOYU4odSkpcmV0dXJuIG87ZVt0K29dPXV9cmV0dXJuIG99ZnVuY3Rpb24gdXRmOFdyaXRlKGUscix0LGYpe3JldHVybiBibGl0QnVmZmVyKHV0ZjhUb0J5dGVzKHIsZS5sZW5ndGgtdCksZSx0LGYpfWZ1bmN0aW9uIGFzY2lpV3JpdGUoZSxyLHQsZil7cmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHIpLGUsdCxmKX1mdW5jdGlvbiBsYXRpbjFXcml0ZShlLHIsdCxmKXtyZXR1cm4gYXNjaWlXcml0ZShlLHIsdCxmKX1mdW5jdGlvbiBiYXNlNjRXcml0ZShlLHIsdCxmKXtyZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHIpLGUsdCxmKX1mdW5jdGlvbiB1Y3MyV3JpdGUoZSxyLHQsZil7cmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMocixlLmxlbmd0aC10KSxlLHQsZil9QnVmZmVyLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbiB3cml0ZShlLHIsdCxmKXtpZihyPT09dW5kZWZpbmVkKXtmPVwidXRmOFwiO3Q9dGhpcy5sZW5ndGg7cj0wfWVsc2UgaWYodD09PXVuZGVmaW5lZCYmdHlwZW9mIHI9PT1cInN0cmluZ1wiKXtmPXI7dD10aGlzLmxlbmd0aDtyPTB9ZWxzZSBpZihpc0Zpbml0ZShyKSl7cj1yPj4+MDtpZihpc0Zpbml0ZSh0KSl7dD10Pj4+MDtpZihmPT09dW5kZWZpbmVkKWY9XCJ1dGY4XCJ9ZWxzZXtmPXQ7dD11bmRlZmluZWR9fWVsc2V7dGhyb3cgbmV3IEVycm9yKFwiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRcIil9dmFyIG49dGhpcy5sZW5ndGgtcjtpZih0PT09dW5kZWZpbmVkfHx0Pm4pdD1uO2lmKGUubGVuZ3RoPjAmJih0PDB8fHI8MCl8fHI+dGhpcy5sZW5ndGgpe3Rocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIil9aWYoIWYpZj1cInV0ZjhcIjt2YXIgaT1mYWxzZTtmb3IoOzspe3N3aXRjaChmKXtjYXNlXCJoZXhcIjpyZXR1cm4gaGV4V3JpdGUodGhpcyxlLHIsdCk7Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6cmV0dXJuIHV0ZjhXcml0ZSh0aGlzLGUscix0KTtjYXNlXCJhc2NpaVwiOnJldHVybiBhc2NpaVdyaXRlKHRoaXMsZSxyLHQpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBsYXRpbjFXcml0ZSh0aGlzLGUscix0KTtjYXNlXCJiYXNlNjRcIjpyZXR1cm4gYmFzZTY0V3JpdGUodGhpcyxlLHIsdCk7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIHVjczJXcml0ZSh0aGlzLGUscix0KTtkZWZhdWx0OmlmKGkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2YpO2Y9KFwiXCIrZikudG9Mb3dlckNhc2UoKTtpPXRydWV9fX07QnVmZmVyLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24gdG9KU09OKCl7cmV0dXJue3R5cGU6XCJCdWZmZXJcIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2Z1bmN0aW9uIGJhc2U2NFNsaWNlKGUscix0KXtpZihyPT09MCYmdD09PWUubGVuZ3RoKXtyZXR1cm4gZi5mcm9tQnl0ZUFycmF5KGUpfWVsc2V7cmV0dXJuIGYuZnJvbUJ5dGVBcnJheShlLnNsaWNlKHIsdCkpfX1mdW5jdGlvbiB1dGY4U2xpY2UoZSxyLHQpe3Q9TWF0aC5taW4oZS5sZW5ndGgsdCk7dmFyIGY9W107dmFyIG49cjt3aGlsZShuPHQpe3ZhciBpPWVbbl07dmFyIG89bnVsbDt2YXIgdT1pPjIzOT80Omk+MjIzPzM6aT4xOTE/MjoxO2lmKG4rdTw9dCl7dmFyIGEscyxoLGM7c3dpdGNoKHUpe2Nhc2UgMTppZihpPDEyOCl7bz1pfWJyZWFrO2Nhc2UgMjphPWVbbisxXTtpZigoYSYxOTIpPT09MTI4KXtjPShpJjMxKTw8NnxhJjYzO2lmKGM+MTI3KXtvPWN9fWJyZWFrO2Nhc2UgMzphPWVbbisxXTtzPWVbbisyXTtpZigoYSYxOTIpPT09MTI4JiYocyYxOTIpPT09MTI4KXtjPShpJjE1KTw8MTJ8KGEmNjMpPDw2fHMmNjM7aWYoYz4yMDQ3JiYoYzw1NTI5Nnx8Yz41NzM0Mykpe289Y319YnJlYWs7Y2FzZSA0OmE9ZVtuKzFdO3M9ZVtuKzJdO2g9ZVtuKzNdO2lmKChhJjE5Mik9PT0xMjgmJihzJjE5Mik9PT0xMjgmJihoJjE5Mik9PT0xMjgpe2M9KGkmMTUpPDwxOHwoYSY2Myk8PDEyfChzJjYzKTw8NnxoJjYzO2lmKGM+NjU1MzUmJmM8MTExNDExMil7bz1jfX19fWlmKG89PT1udWxsKXtvPTY1NTMzO3U9MX1lbHNlIGlmKG8+NjU1MzUpe28tPTY1NTM2O2YucHVzaChvPj4+MTAmMTAyM3w1NTI5Nik7bz01NjMyMHxvJjEwMjN9Zi5wdXNoKG8pO24rPXV9cmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShmKX12YXIgdT00MDk2O2Z1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheShlKXt2YXIgcj1lLmxlbmd0aDtpZihyPD11KXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSl9dmFyIHQ9XCJcIjt2YXIgZj0wO3doaWxlKGY8cil7dCs9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShmLGYrPXUpKX1yZXR1cm4gdH1mdW5jdGlvbiBhc2NpaVNsaWNlKGUscix0KXt2YXIgZj1cIlwiO3Q9TWF0aC5taW4oZS5sZW5ndGgsdCk7Zm9yKHZhciBuPXI7bjx0Oysrbil7Zis9U3RyaW5nLmZyb21DaGFyQ29kZShlW25dJjEyNyl9cmV0dXJuIGZ9ZnVuY3Rpb24gbGF0aW4xU2xpY2UoZSxyLHQpe3ZhciBmPVwiXCI7dD1NYXRoLm1pbihlLmxlbmd0aCx0KTtmb3IodmFyIG49cjtuPHQ7KytuKXtmKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVbbl0pfXJldHVybiBmfWZ1bmN0aW9uIGhleFNsaWNlKGUscix0KXt2YXIgZj1lLmxlbmd0aDtpZighcnx8cjwwKXI9MDtpZighdHx8dDwwfHx0PmYpdD1mO3ZhciBuPVwiXCI7Zm9yKHZhciBpPXI7aTx0OysraSl7bis9c1tlW2ldXX1yZXR1cm4gbn1mdW5jdGlvbiB1dGYxNmxlU2xpY2UoZSxyLHQpe3ZhciBmPWUuc2xpY2Uocix0KTt2YXIgbj1cIlwiO2Zvcih2YXIgaT0wO2k8Zi5sZW5ndGg7aSs9Mil7bis9U3RyaW5nLmZyb21DaGFyQ29kZShmW2ldK2ZbaSsxXSoyNTYpfXJldHVybiBufUJ1ZmZlci5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24gc2xpY2UoZSxyKXt2YXIgdD10aGlzLmxlbmd0aDtlPX5+ZTtyPXI9PT11bmRlZmluZWQ/dDp+fnI7aWYoZTwwKXtlKz10O2lmKGU8MCllPTB9ZWxzZSBpZihlPnQpe2U9dH1pZihyPDApe3IrPXQ7aWYocjwwKXI9MH1lbHNlIGlmKHI+dCl7cj10fWlmKHI8ZSlyPWU7dmFyIGY9dGhpcy5zdWJhcnJheShlLHIpO09iamVjdC5zZXRQcm90b3R5cGVPZihmLEJ1ZmZlci5wcm90b3R5cGUpO3JldHVybiBmfTtmdW5jdGlvbiBjaGVja09mZnNldChlLHIsdCl7aWYoZSUxIT09MHx8ZTwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwib2Zmc2V0IGlzIG5vdCB1aW50XCIpO2lmKGUrcj50KXRocm93IG5ldyBSYW5nZUVycm9yKFwiVHJ5aW5nIHRvIGFjY2VzcyBiZXlvbmQgYnVmZmVyIGxlbmd0aFwiKX1CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEU9ZnVuY3Rpb24gcmVhZFVJbnRMRShlLHIsdCl7ZT1lPj4+MDtyPXI+Pj4wO2lmKCF0KWNoZWNrT2Zmc2V0KGUscix0aGlzLmxlbmd0aCk7dmFyIGY9dGhpc1tlXTt2YXIgbj0xO3ZhciBpPTA7d2hpbGUoKytpPHImJihuKj0yNTYpKXtmKz10aGlzW2UraV0qbn1yZXR1cm4gZn07QnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFPWZ1bmN0aW9uIHJlYWRVSW50QkUoZSxyLHQpe2U9ZT4+PjA7cj1yPj4+MDtpZighdCl7Y2hlY2tPZmZzZXQoZSxyLHRoaXMubGVuZ3RoKX12YXIgZj10aGlzW2UrLS1yXTt2YXIgbj0xO3doaWxlKHI+MCYmKG4qPTI1Nikpe2YrPXRoaXNbZSstLXJdKm59cmV0dXJuIGZ9O0J1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uIHJlYWRVSW50OChlLHIpe2U9ZT4+PjA7aWYoIXIpY2hlY2tPZmZzZXQoZSwxLHRoaXMubGVuZ3RoKTtyZXR1cm4gdGhpc1tlXX07QnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEU9ZnVuY3Rpb24gcmVhZFVJbnQxNkxFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDIsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2VdfHRoaXNbZSsxXTw8OH07QnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2QkU9ZnVuY3Rpb24gcmVhZFVJbnQxNkJFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDIsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2VdPDw4fHRoaXNbZSsxXX07QnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEU9ZnVuY3Rpb24gcmVhZFVJbnQzMkxFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDQsdGhpcy5sZW5ndGgpO3JldHVybih0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2KSt0aGlzW2UrM10qMTY3NzcyMTZ9O0J1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uIHJlYWRVSW50MzJCRShlLHIpe2U9ZT4+PjA7aWYoIXIpY2hlY2tPZmZzZXQoZSw0LHRoaXMubGVuZ3RoKTtyZXR1cm4gdGhpc1tlXSoxNjc3NzIxNisodGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdKX07QnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24gcmVhZEludExFKGUscix0KXtlPWU+Pj4wO3I9cj4+PjA7aWYoIXQpY2hlY2tPZmZzZXQoZSxyLHRoaXMubGVuZ3RoKTt2YXIgZj10aGlzW2VdO3ZhciBuPTE7dmFyIGk9MDt3aGlsZSgrK2k8ciYmKG4qPTI1Nikpe2YrPXRoaXNbZStpXSpufW4qPTEyODtpZihmPj1uKWYtPU1hdGgucG93KDIsOCpyKTtyZXR1cm4gZn07QnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24gcmVhZEludEJFKGUscix0KXtlPWU+Pj4wO3I9cj4+PjA7aWYoIXQpY2hlY2tPZmZzZXQoZSxyLHRoaXMubGVuZ3RoKTt2YXIgZj1yO3ZhciBuPTE7dmFyIGk9dGhpc1tlKy0tZl07d2hpbGUoZj4wJiYobio9MjU2KSl7aSs9dGhpc1tlKy0tZl0qbn1uKj0xMjg7aWYoaT49bilpLT1NYXRoLnBvdygyLDgqcik7cmV0dXJuIGl9O0J1ZmZlci5wcm90b3R5cGUucmVhZEludDg9ZnVuY3Rpb24gcmVhZEludDgoZSxyKXtlPWU+Pj4wO2lmKCFyKWNoZWNrT2Zmc2V0KGUsMSx0aGlzLmxlbmd0aCk7aWYoISh0aGlzW2VdJjEyOCkpcmV0dXJuIHRoaXNbZV07cmV0dXJuKDI1NS10aGlzW2VdKzEpKi0xfTtCdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uIHJlYWRJbnQxNkxFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDIsdGhpcy5sZW5ndGgpO3ZhciB0PXRoaXNbZV18dGhpc1tlKzFdPDw4O3JldHVybiB0JjMyNzY4P3R8NDI5NDkwMTc2MDp0fTtCdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uIHJlYWRJbnQxNkJFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDIsdGhpcy5sZW5ndGgpO3ZhciB0PXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiB0JjMyNzY4P3R8NDI5NDkwMTc2MDp0fTtCdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFPWZ1bmN0aW9uIHJlYWRJbnQzMkxFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDQsdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzW2VdfHRoaXNbZSsxXTw8OHx0aGlzW2UrMl08PDE2fHRoaXNbZSszXTw8MjR9O0J1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24gcmVhZEludDMyQkUoZSxyKXtlPWU+Pj4wO2lmKCFyKWNoZWNrT2Zmc2V0KGUsNCx0aGlzLmxlbmd0aCk7cmV0dXJuIHRoaXNbZV08PDI0fHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXX07QnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbiByZWFkRmxvYXRMRShlLHIpe2U9ZT4+PjA7aWYoIXIpY2hlY2tPZmZzZXQoZSw0LHRoaXMubGVuZ3RoKTtyZXR1cm4gbi5yZWFkKHRoaXMsZSx0cnVlLDIzLDQpfTtCdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uIHJlYWRGbG9hdEJFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDQsdGhpcy5sZW5ndGgpO3JldHVybiBuLnJlYWQodGhpcyxlLGZhbHNlLDIzLDQpfTtCdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbiByZWFkRG91YmxlTEUoZSxyKXtlPWU+Pj4wO2lmKCFyKWNoZWNrT2Zmc2V0KGUsOCx0aGlzLmxlbmd0aCk7cmV0dXJuIG4ucmVhZCh0aGlzLGUsdHJ1ZSw1Miw4KX07QnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkU9ZnVuY3Rpb24gcmVhZERvdWJsZUJFKGUscil7ZT1lPj4+MDtpZighciljaGVja09mZnNldChlLDgsdGhpcy5sZW5ndGgpO3JldHVybiBuLnJlYWQodGhpcyxlLGZhbHNlLDUyLDgpfTtmdW5jdGlvbiBjaGVja0ludChlLHIsdCxmLG4saSl7aWYoIUJ1ZmZlci5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKTtpZihyPm58fHI8aSl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZih0K2Y+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIil9QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbiB3cml0ZVVJbnRMRShlLHIsdCxmKXtlPStlO3I9cj4+PjA7dD10Pj4+MDtpZighZil7dmFyIG49TWF0aC5wb3coMiw4KnQpLTE7Y2hlY2tJbnQodGhpcyxlLHIsdCxuLDApfXZhciBpPTE7dmFyIG89MDt0aGlzW3JdPWUmMjU1O3doaWxlKCsrbzx0JiYoaSo9MjU2KSl7dGhpc1tyK29dPWUvaSYyNTV9cmV0dXJuIHIrdH07QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbiB3cml0ZVVJbnRCRShlLHIsdCxmKXtlPStlO3I9cj4+PjA7dD10Pj4+MDtpZighZil7dmFyIG49TWF0aC5wb3coMiw4KnQpLTE7Y2hlY2tJbnQodGhpcyxlLHIsdCxuLDApfXZhciBpPXQtMTt2YXIgbz0xO3RoaXNbcitpXT1lJjI1NTt3aGlsZSgtLWk+PTAmJihvKj0yNTYpKXt0aGlzW3IraV09ZS9vJjI1NX1yZXR1cm4gcit0fTtCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24gd3JpdGVVSW50OChlLHIsdCl7ZT0rZTtyPXI+Pj4wO2lmKCF0KWNoZWNrSW50KHRoaXMsZSxyLDEsMjU1LDApO3RoaXNbcl09ZSYyNTU7cmV0dXJuIHIrMX07QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uIHdyaXRlVUludDE2TEUoZSxyLHQpe2U9K2U7cj1yPj4+MDtpZighdCljaGVja0ludCh0aGlzLGUsciwyLDY1NTM1LDApO3RoaXNbcl09ZSYyNTU7dGhpc1tyKzFdPWU+Pj44O3JldHVybiByKzJ9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRT1mdW5jdGlvbiB3cml0ZVVJbnQxNkJFKGUscix0KXtlPStlO3I9cj4+PjA7aWYoIXQpY2hlY2tJbnQodGhpcyxlLHIsMiw2NTUzNSwwKTt0aGlzW3JdPWU+Pj44O3RoaXNbcisxXT1lJjI1NTtyZXR1cm4gcisyfTtCdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24gd3JpdGVVSW50MzJMRShlLHIsdCl7ZT0rZTtyPXI+Pj4wO2lmKCF0KWNoZWNrSW50KHRoaXMsZSxyLDQsNDI5NDk2NzI5NSwwKTt0aGlzW3IrM109ZT4+PjI0O3RoaXNbcisyXT1lPj4+MTY7dGhpc1tyKzFdPWU+Pj44O3RoaXNbcl09ZSYyNTU7cmV0dXJuIHIrNH07QnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uIHdyaXRlVUludDMyQkUoZSxyLHQpe2U9K2U7cj1yPj4+MDtpZighdCljaGVja0ludCh0aGlzLGUsciw0LDQyOTQ5NjcyOTUsMCk7dGhpc1tyXT1lPj4+MjQ7dGhpc1tyKzFdPWU+Pj4xNjt0aGlzW3IrMl09ZT4+Pjg7dGhpc1tyKzNdPWUmMjU1O3JldHVybiByKzR9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRT1mdW5jdGlvbiB3cml0ZUludExFKGUscix0LGYpe2U9K2U7cj1yPj4+MDtpZighZil7dmFyIG49TWF0aC5wb3coMiw4KnQtMSk7Y2hlY2tJbnQodGhpcyxlLHIsdCxuLTEsLW4pfXZhciBpPTA7dmFyIG89MTt2YXIgdT0wO3RoaXNbcl09ZSYyNTU7d2hpbGUoKytpPHQmJihvKj0yNTYpKXtpZihlPDAmJnU9PT0wJiZ0aGlzW3IraS0xXSE9PTApe3U9MX10aGlzW3IraV09KGUvbz4+MCktdSYyNTV9cmV0dXJuIHIrdH07QnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uIHdyaXRlSW50QkUoZSxyLHQsZil7ZT0rZTtyPXI+Pj4wO2lmKCFmKXt2YXIgbj1NYXRoLnBvdygyLDgqdC0xKTtjaGVja0ludCh0aGlzLGUscix0LG4tMSwtbil9dmFyIGk9dC0xO3ZhciBvPTE7dmFyIHU9MDt0aGlzW3IraV09ZSYyNTU7d2hpbGUoLS1pPj0wJiYobyo9MjU2KSl7aWYoZTwwJiZ1PT09MCYmdGhpc1tyK2krMV0hPT0wKXt1PTF9dGhpc1tyK2ldPShlL28+PjApLXUmMjU1fXJldHVybiByK3R9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uIHdyaXRlSW50OChlLHIsdCl7ZT0rZTtyPXI+Pj4wO2lmKCF0KWNoZWNrSW50KHRoaXMsZSxyLDEsMTI3LC0xMjgpO2lmKGU8MCllPTI1NStlKzE7dGhpc1tyXT1lJjI1NTtyZXR1cm4gcisxfTtCdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbiB3cml0ZUludDE2TEUoZSxyLHQpe2U9K2U7cj1yPj4+MDtpZighdCljaGVja0ludCh0aGlzLGUsciwyLDMyNzY3LC0zMjc2OCk7dGhpc1tyXT1lJjI1NTt0aGlzW3IrMV09ZT4+Pjg7cmV0dXJuIHIrMn07QnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24gd3JpdGVJbnQxNkJFKGUscix0KXtlPStlO3I9cj4+PjA7aWYoIXQpY2hlY2tJbnQodGhpcyxlLHIsMiwzMjc2NywtMzI3NjgpO3RoaXNbcl09ZT4+Pjg7dGhpc1tyKzFdPWUmMjU1O3JldHVybiByKzJ9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFPWZ1bmN0aW9uIHdyaXRlSW50MzJMRShlLHIsdCl7ZT0rZTtyPXI+Pj4wO2lmKCF0KWNoZWNrSW50KHRoaXMsZSxyLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCk7dGhpc1tyXT1lJjI1NTt0aGlzW3IrMV09ZT4+Pjg7dGhpc1tyKzJdPWU+Pj4xNjt0aGlzW3IrM109ZT4+PjI0O3JldHVybiByKzR9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uIHdyaXRlSW50MzJCRShlLHIsdCl7ZT0rZTtyPXI+Pj4wO2lmKCF0KWNoZWNrSW50KHRoaXMsZSxyLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCk7aWYoZTwwKWU9NDI5NDk2NzI5NStlKzE7dGhpc1tyXT1lPj4+MjQ7dGhpc1tyKzFdPWU+Pj4xNjt0aGlzW3IrMl09ZT4+Pjg7dGhpc1tyKzNdPWUmMjU1O3JldHVybiByKzR9O2Z1bmN0aW9uIGNoZWNrSUVFRTc1NChlLHIsdCxmLG4saSl7aWYodCtmPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiB3cml0ZUZsb2F0KGUscix0LGYsaSl7cj0rcjt0PXQ+Pj4wO2lmKCFpKXtjaGVja0lFRUU3NTQoZSxyLHQsNCwzNDAyODIzNDY2Mzg1Mjg4NmUyMiwtMzQwMjgyMzQ2NjM4NTI4ODZlMjIpfW4ud3JpdGUoZSxyLHQsZiwyMyw0KTtyZXR1cm4gdCs0fUJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uIHdyaXRlRmxvYXRMRShlLHIsdCl7cmV0dXJuIHdyaXRlRmxvYXQodGhpcyxlLHIsdHJ1ZSx0KX07QnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24gd3JpdGVGbG9hdEJFKGUscix0KXtyZXR1cm4gd3JpdGVGbG9hdCh0aGlzLGUscixmYWxzZSx0KX07ZnVuY3Rpb24gd3JpdGVEb3VibGUoZSxyLHQsZixpKXtyPStyO3Q9dD4+PjA7aWYoIWkpe2NoZWNrSUVFRTc1NChlLHIsdCw4LDE3OTc2OTMxMzQ4NjIzMTU3ZTI5MiwtMTc5NzY5MzEzNDg2MjMxNTdlMjkyKX1uLndyaXRlKGUscix0LGYsNTIsOCk7cmV0dXJuIHQrOH1CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEU9ZnVuY3Rpb24gd3JpdGVEb3VibGVMRShlLHIsdCl7cmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsZSxyLHRydWUsdCl9O0J1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbiB3cml0ZURvdWJsZUJFKGUscix0KXtyZXR1cm4gd3JpdGVEb3VibGUodGhpcyxlLHIsZmFsc2UsdCl9O0J1ZmZlci5wcm90b3R5cGUuY29weT1mdW5jdGlvbiBjb3B5KGUscix0LGYpe2lmKCFCdWZmZXIuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IHNob3VsZCBiZSBhIEJ1ZmZlclwiKTtpZighdCl0PTA7aWYoIWYmJmYhPT0wKWY9dGhpcy5sZW5ndGg7aWYocj49ZS5sZW5ndGgpcj1lLmxlbmd0aDtpZighcilyPTA7aWYoZj4wJiZmPHQpZj10O2lmKGY9PT10KXJldHVybiAwO2lmKGUubGVuZ3RoPT09MHx8dGhpcy5sZW5ndGg9PT0wKXJldHVybiAwO2lmKHI8MCl7dGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzXCIpfWlmKHQ8MHx8dD49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIik7aWYoZjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlRW5kIG91dCBvZiBib3VuZHNcIik7aWYoZj50aGlzLmxlbmd0aClmPXRoaXMubGVuZ3RoO2lmKGUubGVuZ3RoLXI8Zi10KXtmPWUubGVuZ3RoLXIrdH12YXIgbj1mLXQ7aWYodGhpcz09PWUmJnR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluPT09XCJmdW5jdGlvblwiKXt0aGlzLmNvcHlXaXRoaW4ocix0LGYpfWVsc2UgaWYodGhpcz09PWUmJnQ8ciYmcjxmKXtmb3IodmFyIGk9bi0xO2k+PTA7LS1pKXtlW2krcl09dGhpc1tpK3RdfX1lbHNle1VpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheSh0LGYpLHIpfXJldHVybiBufTtCdWZmZXIucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24gZmlsbChlLHIsdCxmKXtpZih0eXBlb2YgZT09PVwic3RyaW5nXCIpe2lmKHR5cGVvZiByPT09XCJzdHJpbmdcIil7Zj1yO3I9MDt0PXRoaXMubGVuZ3RofWVsc2UgaWYodHlwZW9mIHQ9PT1cInN0cmluZ1wiKXtmPXQ7dD10aGlzLmxlbmd0aH1pZihmIT09dW5kZWZpbmVkJiZ0eXBlb2YgZiE9PVwic3RyaW5nXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nXCIpfWlmKHR5cGVvZiBmPT09XCJzdHJpbmdcIiYmIUJ1ZmZlci5pc0VuY29kaW5nKGYpKXt0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrZil9aWYoZS5sZW5ndGg9PT0xKXt2YXIgbj1lLmNoYXJDb2RlQXQoMCk7aWYoZj09PVwidXRmOFwiJiZuPDEyOHx8Zj09PVwibGF0aW4xXCIpe2U9bn19fWVsc2UgaWYodHlwZW9mIGU9PT1cIm51bWJlclwiKXtlPWUmMjU1fWVsc2UgaWYodHlwZW9mIGU9PT1cImJvb2xlYW5cIil7ZT1OdW1iZXIoZSl9aWYocjwwfHx0aGlzLmxlbmd0aDxyfHx0aGlzLmxlbmd0aDx0KXt0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIk91dCBvZiByYW5nZSBpbmRleFwiKX1pZih0PD1yKXtyZXR1cm4gdGhpc31yPXI+Pj4wO3Q9dD09PXVuZGVmaW5lZD90aGlzLmxlbmd0aDp0Pj4+MDtpZighZSllPTA7dmFyIGk7aWYodHlwZW9mIGU9PT1cIm51bWJlclwiKXtmb3IoaT1yO2k8dDsrK2kpe3RoaXNbaV09ZX19ZWxzZXt2YXIgbz1CdWZmZXIuaXNCdWZmZXIoZSk/ZTpCdWZmZXIuZnJvbShlLGYpO3ZhciB1PW8ubGVuZ3RoO2lmKHU9PT0wKXt0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgdmFsdWUgXCInK2UrJ1wiIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50IFwidmFsdWVcIicpfWZvcihpPTA7aTx0LXI7KytpKXt0aGlzW2krcl09b1tpJXVdfX1yZXR1cm4gdGhpc307dmFyIGE9L1teKy8wLTlBLVphLXotX10vZztmdW5jdGlvbiBiYXNlNjRjbGVhbihlKXtlPWUuc3BsaXQoXCI9XCIpWzBdO2U9ZS50cmltKCkucmVwbGFjZShhLFwiXCIpO2lmKGUubGVuZ3RoPDIpcmV0dXJuXCJcIjt3aGlsZShlLmxlbmd0aCU0IT09MCl7ZT1lK1wiPVwifXJldHVybiBlfWZ1bmN0aW9uIHV0ZjhUb0J5dGVzKGUscil7cj1yfHxJbmZpbml0eTt2YXIgdDt2YXIgZj1lLmxlbmd0aDt2YXIgbj1udWxsO3ZhciBpPVtdO2Zvcih2YXIgbz0wO288ZjsrK28pe3Q9ZS5jaGFyQ29kZUF0KG8pO2lmKHQ+NTUyOTUmJnQ8NTczNDQpe2lmKCFuKXtpZih0PjU2MzE5KXtpZigoci09Myk+LTEpaS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1lbHNlIGlmKG8rMT09PWYpe2lmKChyLT0zKT4tMSlpLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfW49dDtjb250aW51ZX1pZih0PDU2MzIwKXtpZigoci09Myk+LTEpaS5wdXNoKDIzOSwxOTEsMTg5KTtuPXQ7Y29udGludWV9dD0obi01NTI5Njw8MTB8dC01NjMyMCkrNjU1MzZ9ZWxzZSBpZihuKXtpZigoci09Myk+LTEpaS5wdXNoKDIzOSwxOTEsMTg5KX1uPW51bGw7aWYodDwxMjgpe2lmKChyLT0xKTwwKWJyZWFrO2kucHVzaCh0KX1lbHNlIGlmKHQ8MjA0OCl7aWYoKHItPTIpPDApYnJlYWs7aS5wdXNoKHQ+PjZ8MTkyLHQmNjN8MTI4KX1lbHNlIGlmKHQ8NjU1MzYpe2lmKChyLT0zKTwwKWJyZWFrO2kucHVzaCh0Pj4xMnwyMjQsdD4+NiY2M3wxMjgsdCY2M3wxMjgpfWVsc2UgaWYodDwxMTE0MTEyKXtpZigoci09NCk8MClicmVhaztpLnB1c2godD4+MTh8MjQwLHQ+PjEyJjYzfDEyOCx0Pj42JjYzfDEyOCx0JjYzfDEyOCl9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGNvZGUgcG9pbnRcIil9fXJldHVybiBpfWZ1bmN0aW9uIGFzY2lpVG9CeXRlcyhlKXt2YXIgcj1bXTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoOysrdCl7ci5wdXNoKGUuY2hhckNvZGVBdCh0KSYyNTUpfXJldHVybiByfWZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzKGUscil7dmFyIHQsZixuO3ZhciBpPVtdO2Zvcih2YXIgbz0wO288ZS5sZW5ndGg7KytvKXtpZigoci09Mik8MClicmVhazt0PWUuY2hhckNvZGVBdChvKTtmPXQ+Pjg7bj10JTI1NjtpLnB1c2gobik7aS5wdXNoKGYpfXJldHVybiBpfWZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMoZSl7cmV0dXJuIGYudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oZSkpfWZ1bmN0aW9uIGJsaXRCdWZmZXIoZSxyLHQsZil7Zm9yKHZhciBuPTA7bjxmOysrbil7aWYobit0Pj1yLmxlbmd0aHx8bj49ZS5sZW5ndGgpYnJlYWs7cltuK3RdPWVbbl19cmV0dXJuIG59ZnVuY3Rpb24gaXNJbnN0YW5jZShlLHIpe3JldHVybiBlIGluc3RhbmNlb2Ygcnx8ZSE9bnVsbCYmZS5jb25zdHJ1Y3RvciE9bnVsbCYmZS5jb25zdHJ1Y3Rvci5uYW1lIT1udWxsJiZlLmNvbnN0cnVjdG9yLm5hbWU9PT1yLm5hbWV9ZnVuY3Rpb24gbnVtYmVySXNOYU4oZSl7cmV0dXJuIGUhPT1lfXZhciBzPWZ1bmN0aW9uKCl7dmFyIGU9XCIwMTIzNDU2Nzg5YWJjZGVmXCI7dmFyIHI9bmV3IEFycmF5KDI1Nik7Zm9yKHZhciB0PTA7dDwxNjsrK3Qpe3ZhciBmPXQqMTY7Zm9yKHZhciBuPTA7bjwxNjsrK24pe3JbZituXT1lW3RdK2Vbbl19fXJldHVybiByfSgpfSw3ODM6ZnVuY3Rpb24oZSxyKXtcbi8qISBpZWVlNzU0LiBCU0QtMy1DbGF1c2UgTGljZW5zZS4gRmVyb3NzIEFib3VraGFkaWplaCA8aHR0cHM6Ly9mZXJvc3Mub3JnL29wZW5zb3VyY2U+ICovXG5yLnJlYWQ9ZnVuY3Rpb24oZSxyLHQsZixuKXt2YXIgaSxvO3ZhciB1PW4qOC1mLTE7dmFyIGE9KDE8PHUpLTE7dmFyIHM9YT4+MTt2YXIgaD0tNzt2YXIgYz10P24tMTowO3ZhciBsPXQ/LTE6MTt2YXIgcD1lW3IrY107Yys9bDtpPXAmKDE8PC1oKS0xO3A+Pj0taDtoKz11O2Zvcig7aD4wO2k9aSoyNTYrZVtyK2NdLGMrPWwsaC09OCl7fW89aSYoMTw8LWgpLTE7aT4+PS1oO2grPWY7Zm9yKDtoPjA7bz1vKjI1NitlW3IrY10sYys9bCxoLT04KXt9aWYoaT09PTApe2k9MS1zfWVsc2UgaWYoaT09PWEpe3JldHVybiBvP05hTjoocD8tMToxKSpJbmZpbml0eX1lbHNle289bytNYXRoLnBvdygyLGYpO2k9aS1zfXJldHVybihwPy0xOjEpKm8qTWF0aC5wb3coMixpLWYpfTtyLndyaXRlPWZ1bmN0aW9uKGUscix0LGYsbixpKXt2YXIgbyx1LGE7dmFyIHM9aSo4LW4tMTt2YXIgaD0oMTw8cyktMTt2YXIgYz1oPj4xO3ZhciBsPW49PT0yMz9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjA7dmFyIHA9Zj8wOmktMTt2YXIgeT1mPzE6LTE7dmFyIGc9cjwwfHxyPT09MCYmMS9yPDA/MTowO3I9TWF0aC5hYnMocik7aWYoaXNOYU4ocil8fHI9PT1JbmZpbml0eSl7dT1pc05hTihyKT8xOjA7bz1ofWVsc2V7bz1NYXRoLmZsb29yKE1hdGgubG9nKHIpL01hdGguTE4yKTtpZihyKihhPU1hdGgucG93KDIsLW8pKTwxKXtvLS07YSo9Mn1pZihvK2M+PTEpe3IrPWwvYX1lbHNle3IrPWwqTWF0aC5wb3coMiwxLWMpfWlmKHIqYT49Mil7bysrO2EvPTJ9aWYobytjPj1oKXt1PTA7bz1ofWVsc2UgaWYobytjPj0xKXt1PShyKmEtMSkqTWF0aC5wb3coMixuKTtvPW8rY31lbHNle3U9cipNYXRoLnBvdygyLGMtMSkqTWF0aC5wb3coMixuKTtvPTB9fWZvcig7bj49ODtlW3QrcF09dSYyNTUscCs9eSx1Lz0yNTYsbi09OCl7fW89bzw8bnx1O3MrPW47Zm9yKDtzPjA7ZVt0K3BdPW8mMjU1LHArPXksby89MjU2LHMtPTgpe31lW3QrcC15XXw9ZyoxMjh9fX07dmFyIHI9e307ZnVuY3Rpb24gX19uY2N3cGNrX3JlcXVpcmVfXyh0KXt2YXIgZj1yW3RdO2lmKGYhPT11bmRlZmluZWQpe3JldHVybiBmLmV4cG9ydHN9dmFyIG49clt0XT17ZXhwb3J0czp7fX07dmFyIGk9dHJ1ZTt0cnl7ZVt0XShuLG4uZXhwb3J0cyxfX25jY3dwY2tfcmVxdWlyZV9fKTtpPWZhbHNlfWZpbmFsbHl7aWYoaSlkZWxldGUgclt0XX1yZXR1cm4gbi5leHBvcnRzfWlmKHR5cGVvZiBfX25jY3dwY2tfcmVxdWlyZV9fIT09XCJ1bmRlZmluZWRcIilfX25jY3dwY2tfcmVxdWlyZV9fLmFiPV9fZGlybmFtZStcIi9cIjt2YXIgdD1fX25jY3dwY2tfcmVxdWlyZV9fKDcyKTttb2R1bGUuZXhwb3J0cz10fSkoKTsiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/buffer/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/compiled/picomatch/index.js":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/next/dist/compiled/picomatch/index.js ***!
|
||
\************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
eval(__webpack_require__.ts("var __dirname = \"/\";\n/* provided dependency */ var process = __webpack_require__(/*! process */ \"(app-pages-browser)/./node_modules/next/dist/build/polyfills/process.js\");\n(()=>{\"use strict\";var t={170:(t,e,u)=>{const n=u(510);const isWindows=()=>{if(typeof navigator!==\"undefined\"&&navigator.platform){const t=navigator.platform.toLowerCase();return t===\"win32\"||t===\"windows\"}if(typeof process!==\"undefined\"&&process.platform){return process.platform===\"win32\"}return false};function picomatch(t,e,u=false){if(e&&(e.windows===null||e.windows===undefined)){e={...e,windows:isWindows()}}return n(t,e,u)}Object.assign(picomatch,n);t.exports=picomatch},154:t=>{const e=\"\\\\\\\\/\";const u=`[^${e}]`;const n=\"\\\\.\";const o=\"\\\\+\";const s=\"\\\\?\";const r=\"\\\\/\";const a=\"(?=.)\";const i=\"[^/]\";const c=`(?:${r}|$)`;const p=`(?:^|${r})`;const l=`${n}{1,2}${c}`;const f=`(?!${n})`;const A=`(?!${p}${l})`;const _=`(?!${n}{0,1}${c})`;const R=`(?!${l})`;const E=`[^.${r}]`;const h=`${i}*?`;const g=\"/\";const b={DOT_LITERAL:n,PLUS_LITERAL:o,QMARK_LITERAL:s,SLASH_LITERAL:r,ONE_CHAR:a,QMARK:i,END_ANCHOR:c,DOTS_SLASH:l,NO_DOT:f,NO_DOTS:A,NO_DOT_SLASH:_,NO_DOTS_SLASH:R,QMARK_NO_DOT:E,STAR:h,START_ANCHOR:p,SEP:g};const C={...b,SLASH_LITERAL:`[${e}]`,QMARK:u,STAR:`${u}*?`,DOTS_SLASH:`${n}{1,2}(?:[${e}]|$)`,NO_DOT:`(?!${n})`,NO_DOTS:`(?!(?:^|[${e}])${n}{1,2}(?:[${e}]|$))`,NO_DOT_SLASH:`(?!${n}{0,1}(?:[${e}]|$))`,NO_DOTS_SLASH:`(?!${n}{1,2}(?:[${e}]|$))`,QMARK_NO_DOT:`[^.${e}]`,START_ANCHOR:`(?:^|[${e}])`,END_ANCHOR:`(?:[${e}]|$)`,SEP:\"\\\\\"};const y={alnum:\"a-zA-Z0-9\",alpha:\"a-zA-Z\",ascii:\"\\\\x00-\\\\x7F\",blank:\" \\\\t\",cntrl:\"\\\\x00-\\\\x1F\\\\x7F\",digit:\"0-9\",graph:\"\\\\x21-\\\\x7E\",lower:\"a-z\",print:\"\\\\x20-\\\\x7E \",punct:\"\\\\-!\\\"#$%&'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~\",space:\" \\\\t\\\\r\\\\n\\\\v\\\\f\",upper:\"A-Z\",word:\"A-Za-z0-9_\",xdigit:\"A-Fa-f0-9\"};t.exports={MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:y,REGEX_BACKSLASH:/\\\\(?![*+?^${}(|)[\\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\\].,$*+?^{}()|\\\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\\\?)((\\W)(\\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,REPLACEMENTS:{\"***\":\"*\",\"**/**\":\"**\",\"**/**/**\":\"**\"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,extglobChars(t){return{\"!\":{type:\"negate\",open:\"(?:(?!(?:\",close:`))${t.STAR})`},\"?\":{type:\"qmark\",open:\"(?:\",close:\")?\"},\"+\":{type:\"plus\",open:\"(?:\",close:\")+\"},\"*\":{type:\"star\",open:\"(?:\",close:\")*\"},\"@\":{type:\"at\",open:\"(?:\",close:\")\"}}},globChars(t){return t===true?C:b}}},697:(t,e,u)=>{const n=u(154);const o=u(96);const{MAX_LENGTH:s,POSIX_REGEX_SOURCE:r,REGEX_NON_SPECIAL_CHARS:a,REGEX_SPECIAL_CHARS_BACKREF:i,REPLACEMENTS:c}=n;const expandRange=(t,e)=>{if(typeof e.expandRange===\"function\"){return e.expandRange(...t,e)}t.sort();const u=`[${t.join(\"-\")}]`;try{new RegExp(u)}catch(e){return t.map((t=>o.escapeRegex(t))).join(\"..\")}return u};const syntaxError=(t,e)=>`Missing ${t}: \"${e}\" - use \"\\\\\\\\${e}\" to match literal characters`;const parse=(t,e)=>{if(typeof t!==\"string\"){throw new TypeError(\"Expected a string\")}t=c[t]||t;const u={...e};const p=typeof u.maxLength===\"number\"?Math.min(s,u.maxLength):s;let l=t.length;if(l>p){throw new SyntaxError(`Input length: ${l}, exceeds maximum allowed length: ${p}`)}const f={type:\"bos\",value:\"\",output:u.prepend||\"\"};const A=[f];const _=u.capture?\"\":\"?:\";const R=n.globChars(u.windows);const E=n.extglobChars(R);const{DOT_LITERAL:h,PLUS_LITERAL:g,SLASH_LITERAL:b,ONE_CHAR:C,DOTS_SLASH:y,NO_DOT:$,NO_DOT_SLASH:x,NO_DOTS_SLASH:S,QMARK:H,QMARK_NO_DOT:v,STAR:d,START_ANCHOR:L}=R;const globstar=t=>`(${_}(?:(?!${L}${t.dot?y:h}).)*?)`;const T=u.dot?\"\":$;const O=u.dot?H:v;let k=u.bash===true?globstar(u):d;if(u.capture){k=`(${k})`}if(typeof u.noext===\"boolean\"){u.noextglob=u.noext}const m={input:t,index:-1,start:0,dot:u.dot===true,consumed:\"\",output:\"\",prefix:\"\",backtrack:false,negated:false,brackets:0,braces:0,parens:0,quotes:0,globstar:false,tokens:A};t=o.removePrefix(t,m);l=t.length;const w=[];const N=[];const I=[];let B=f;let G;const eos=()=>m.index===l-1;const D=m.peek=(e=1)=>t[m.index+e];const M=m.advance=()=>t[++m.index]||\"\";const remaining=()=>t.slice(m.index+1);const consume=(t=\"\",e=0)=>{m.consumed+=t;m.index+=e};const append=t=>{m.output+=t.output!=null?t.output:t.value;consume(t.value)};const negate=()=>{let t=1;while(D()===\"!\"&&(D(2)!==\"(\"||D(3)===\"?\")){M();m.start++;t++}if(t%2===0){return false}m.negated=true;m.start++;return true};const increment=t=>{m[t]++;I.push(t)};const decrement=t=>{m[t]--;I.pop()};const push=t=>{if(B.type===\"globstar\"){const e=m.braces>0&&(t.type===\"comma\"||t.type===\"brace\");const u=t.extglob===true||w.length&&(t.type===\"pipe\"||t.type===\"paren\");if(t.type!==\"slash\"&&t.type!==\"paren\"&&!e&&!u){m.output=m.output.slice(0,-B.output.length);B.type=\"star\";B.value=\"*\";B.output=k;m.output+=B.output}}if(w.length&&t.type!==\"paren\"){w[w.length-1].inner+=t.value}if(t.value||t.output)append(t);if(B&&B.type===\"text\"&&t.type===\"text\"){B.output=(B.output||B.value)+t.value;B.value+=t.value;return}t.prev=B;A.push(t);B=t};const extglobOpen=(t,e)=>{const n={...E[e],conditions:1,inner:\"\"};n.prev=B;n.parens=m.parens;n.output=m.output;const o=(u.capture?\"(\":\"\")+n.open;increment(\"parens\");push({type:t,value:e,output:m.output?\"\":C});push({type:\"paren\",extglob:true,value:M(),output:o});w.push(n)};const extglobClose=t=>{let n=t.close+(u.capture?\")\":\"\");let o;if(t.type===\"negate\"){let s=k;if(t.inner&&t.inner.length>1&&t.inner.includes(\"/\")){s=globstar(u)}if(s!==k||eos()||/^\\)+$/.test(remaining())){n=t.close=`)$))${s}`}if(t.inner.includes(\"*\")&&(o=remaining())&&/^\\.[^\\\\/.]+$/.test(o)){const u=parse(o,{...e,fastpaths:false}).output;n=t.close=`)${u})${s})`}if(t.prev.type===\"bos\"){m.negatedExtglob=true}}push({type:\"paren\",extglob:true,value:G,output:n});decrement(\"parens\")};if(u.fastpaths!==false&&!/(^[*!]|[/()[\\]{}\"])/.test(t)){let n=false;let s=t.replace(i,((t,e,u,o,s,r)=>{if(o===\"\\\\\"){n=true;return t}if(o===\"?\"){if(e){return e+o+(s?H.repeat(s.length):\"\")}if(r===0){return O+(s?H.repeat(s.length):\"\")}return H.repeat(u.length)}if(o===\".\"){return h.repeat(u.length)}if(o===\"*\"){if(e){return e+o+(s?k:\"\")}return k}return e?t:`\\\\${t}`}));if(n===true){if(u.unescape===true){s=s.replace(/\\\\/g,\"\")}else{s=s.replace(/\\\\+/g,(t=>t.length%2===0?\"\\\\\\\\\":t?\"\\\\\":\"\"))}}if(s===t&&u.contains===true){m.output=t;return m}m.output=o.wrapOutput(s,m,e);return m}while(!eos()){G=M();if(G===\"\\0\"){continue}if(G===\"\\\\\"){const t=D();if(t===\"/\"&&u.bash!==true){continue}if(t===\".\"||t===\";\"){continue}if(!t){G+=\"\\\\\";push({type:\"text\",value:G});continue}const e=/^\\\\+/.exec(remaining());let n=0;if(e&&e[0].length>2){n=e[0].length;m.index+=n;if(n%2!==0){G+=\"\\\\\"}}if(u.unescape===true){G=M()}else{G+=M()}if(m.brackets===0){push({type:\"text\",value:G});continue}}if(m.brackets>0&&(G!==\"]\"||B.value===\"[\"||B.value===\"[^\")){if(u.posix!==false&&G===\":\"){const t=B.value.slice(1);if(t.includes(\"[\")){B.posix=true;if(t.includes(\":\")){const t=B.value.lastIndexOf(\"[\");const e=B.value.slice(0,t);const u=B.value.slice(t+2);const n=r[u];if(n){B.value=e+n;m.backtrack=true;M();if(!f.output&&A.indexOf(B)===1){f.output=C}continue}}}}if(G===\"[\"&&D()!==\":\"||G===\"-\"&&D()===\"]\"){G=`\\\\${G}`}if(G===\"]\"&&(B.value===\"[\"||B.value===\"[^\")){G=`\\\\${G}`}if(u.posix===true&&G===\"!\"&&B.value===\"[\"){G=\"^\"}B.value+=G;append({value:G});continue}if(m.quotes===1&&G!=='\"'){G=o.escapeRegex(G);B.value+=G;append({value:G});continue}if(G==='\"'){m.quotes=m.quotes===1?0:1;if(u.keepQuotes===true){push({type:\"text\",value:G})}continue}if(G===\"(\"){increment(\"parens\");push({type:\"paren\",value:G});continue}if(G===\")\"){if(m.parens===0&&u.strictBrackets===true){throw new SyntaxError(syntaxError(\"opening\",\"(\"))}const t=w[w.length-1];if(t&&m.parens===t.parens+1){extglobClose(w.pop());continue}push({type:\"paren\",value:G,output:m.parens?\")\":\"\\\\)\"});decrement(\"parens\");continue}if(G===\"[\"){if(u.nobracket===true||!remaining().includes(\"]\")){if(u.nobracket!==true&&u.strictBrackets===true){throw new SyntaxError(syntaxError(\"closing\",\"]\"))}G=`\\\\${G}`}else{increment(\"brackets\")}push({type:\"bracket\",value:G});continue}if(G===\"]\"){if(u.nobracket===true||B&&B.type===\"bracket\"&&B.value.length===1){push({type:\"text\",value:G,output:`\\\\${G}`});continue}if(m.brackets===0){if(u.strictBrackets===true){throw new SyntaxError(syntaxError(\"opening\",\"[\"))}push({type:\"text\",value:G,output:`\\\\${G}`});continue}decrement(\"brackets\");const t=B.value.slice(1);if(B.posix!==true&&t[0]===\"^\"&&!t.includes(\"/\")){G=`/${G}`}B.value+=G;append({value:G});if(u.literalBrackets===false||o.hasRegexChars(t)){continue}const e=o.escapeRegex(B.value);m.output=m.output.slice(0,-B.value.length);if(u.literalBrackets===true){m.output+=e;B.value=e;continue}B.value=`(${_}${e}|${B.value})`;m.output+=B.value;continue}if(G===\"{\"&&u.nobrace!==true){increment(\"braces\");const t={type:\"brace\",value:G,output:\"(\",outputIndex:m.output.length,tokensIndex:m.tokens.length};N.push(t);push(t);continue}if(G===\"}\"){const t=N[N.length-1];if(u.nobrace===true||!t){push({type:\"text\",value:G,output:G});continue}let e=\")\";if(t.dots===true){const t=A.slice();const n=[];for(let e=t.length-1;e>=0;e--){A.pop();if(t[e].type===\"brace\"){break}if(t[e].type!==\"dots\"){n.unshift(t[e].value)}}e=expandRange(n,u);m.backtrack=true}if(t.comma!==true&&t.dots!==true){const u=m.output.slice(0,t.outputIndex);const n=m.tokens.slice(t.tokensIndex);t.value=t.output=\"\\\\{\";G=e=\"\\\\}\";m.output=u;for(const t of n){m.output+=t.output||t.value}}push({type:\"brace\",value:G,output:e});decrement(\"braces\");N.pop();continue}if(G===\"|\"){if(w.length>0){w[w.length-1].conditions++}push({type:\"text\",value:G});continue}if(G===\",\"){let t=G;const e=N[N.length-1];if(e&&I[I.length-1]===\"braces\"){e.comma=true;t=\"|\"}push({type:\"comma\",value:G,output:t});continue}if(G===\"/\"){if(B.type===\"dot\"&&m.index===m.start+1){m.start=m.index+1;m.consumed=\"\";m.output=\"\";A.pop();B=f;continue}push({type:\"slash\",value:G,output:b});continue}if(G===\".\"){if(m.braces>0&&B.type===\"dot\"){if(B.value===\".\")B.output=h;const t=N[N.length-1];B.type=\"dots\";B.output+=G;B.value+=G;t.dots=true;continue}if(m.braces+m.parens===0&&B.type!==\"bos\"&&B.type!==\"slash\"){push({type:\"text\",value:G,output:h});continue}push({type:\"dot\",value:G,output:h});continue}if(G===\"?\"){const t=B&&B.value===\"(\";if(!t&&u.noextglob!==true&&D()===\"(\"&&D(2)!==\"?\"){extglobOpen(\"qmark\",G);continue}if(B&&B.type===\"paren\"){const t=D();let e=G;if(B.value===\"(\"&&!/[!=<:]/.test(t)||t===\"<\"&&!/<([!=]|\\w+>)/.test(remaining())){e=`\\\\${G}`}push({type:\"text\",value:G,output:e});continue}if(u.dot!==true&&(B.type===\"slash\"||B.type===\"bos\")){push({type:\"qmark\",value:G,output:v});continue}push({type:\"qmark\",value:G,output:H});continue}if(G===\"!\"){if(u.noextglob!==true&&D()===\"(\"){if(D(2)!==\"?\"||!/[!=<:]/.test(D(3))){extglobOpen(\"negate\",G);continue}}if(u.nonegate!==true&&m.index===0){negate();continue}}if(G===\"+\"){if(u.noextglob!==true&&D()===\"(\"&&D(2)!==\"?\"){extglobOpen(\"plus\",G);continue}if(B&&B.value===\"(\"||u.regex===false){push({type:\"plus\",value:G,output:g});continue}if(B&&(B.type===\"bracket\"||B.type===\"paren\"||B.type===\"brace\")||m.parens>0){push({type:\"plus\",value:G});continue}push({type:\"plus\",value:g});continue}if(G===\"@\"){if(u.noextglob!==true&&D()===\"(\"&&D(2)!==\"?\"){push({type:\"at\",extglob:true,value:G,output:\"\"});continue}push({type:\"text\",value:G});continue}if(G!==\"*\"){if(G===\"$\"||G===\"^\"){G=`\\\\${G}`}const t=a.exec(remaining());if(t){G+=t[0];m.index+=t[0].length}push({type:\"text\",value:G});continue}if(B&&(B.type===\"globstar\"||B.star===true)){B.type=\"star\";B.star=true;B.value+=G;B.output=k;m.backtrack=true;m.globstar=true;consume(G);continue}let e=remaining();if(u.noextglob!==true&&/^\\([^?]/.test(e)){extglobOpen(\"star\",G);continue}if(B.type===\"star\"){if(u.noglobstar===true){consume(G);continue}const n=B.prev;const o=n.prev;const s=n.type===\"slash\"||n.type===\"bos\";const r=o&&(o.type===\"star\"||o.type===\"globstar\");if(u.bash===true&&(!s||e[0]&&e[0]!==\"/\")){push({type:\"star\",value:G,output:\"\"});continue}const a=m.braces>0&&(n.type===\"comma\"||n.type===\"brace\");const i=w.length&&(n.type===\"pipe\"||n.type===\"paren\");if(!s&&n.type!==\"paren\"&&!a&&!i){push({type:\"star\",value:G,output:\"\"});continue}while(e.slice(0,3)===\"/**\"){const u=t[m.index+4];if(u&&u!==\"/\"){break}e=e.slice(3);consume(\"/**\",3)}if(n.type===\"bos\"&&eos()){B.type=\"globstar\";B.value+=G;B.output=globstar(u);m.output=B.output;m.globstar=true;consume(G);continue}if(n.type===\"slash\"&&n.prev.type!==\"bos\"&&!r&&eos()){m.output=m.output.slice(0,-(n.output+B.output).length);n.output=`(?:${n.output}`;B.type=\"globstar\";B.output=globstar(u)+(u.strictSlashes?\")\":\"|$)\");B.value+=G;m.globstar=true;m.output+=n.output+B.output;consume(G);continue}if(n.type===\"slash\"&&n.prev.type!==\"bos\"&&e[0]===\"/\"){const t=e[1]!==void 0?\"|$\":\"\";m.output=m.output.slice(0,-(n.output+B.output).length);n.output=`(?:${n.output}`;B.type=\"globstar\";B.output=`${globstar(u)}${b}|${b}${t})`;B.value+=G;m.output+=n.output+B.output;m.globstar=true;consume(G+M());push({type:\"slash\",value:\"/\",output:\"\"});continue}if(n.type===\"bos\"&&e[0]===\"/\"){B.type=\"globstar\";B.value+=G;B.output=`(?:^|${b}|${globstar(u)}${b})`;m.output=B.output;m.globstar=true;consume(G+M());push({type:\"slash\",value:\"/\",output:\"\"});continue}m.output=m.output.slice(0,-B.output.length);B.type=\"globstar\";B.output=globstar(u);B.value+=G;m.output+=B.output;m.globstar=true;consume(G);continue}const n={type:\"star\",value:G,output:k};if(u.bash===true){n.output=\".*?\";if(B.type===\"bos\"||B.type===\"slash\"){n.output=T+n.output}push(n);continue}if(B&&(B.type===\"bracket\"||B.type===\"paren\")&&u.regex===true){n.output=G;push(n);continue}if(m.index===m.start||B.type===\"slash\"||B.type===\"dot\"){if(B.type===\"dot\"){m.output+=x;B.output+=x}else if(u.dot===true){m.output+=S;B.output+=S}else{m.output+=T;B.output+=T}if(D()!==\"*\"){m.output+=C;B.output+=C}}push(n)}while(m.brackets>0){if(u.strictBrackets===true)throw new SyntaxError(syntaxError(\"closing\",\"]\"));m.output=o.escapeLast(m.output,\"[\");decrement(\"brackets\")}while(m.parens>0){if(u.strictBrackets===true)throw new SyntaxError(syntaxError(\"closing\",\")\"));m.output=o.escapeLast(m.output,\"(\");decrement(\"parens\")}while(m.braces>0){if(u.strictBrackets===true)throw new SyntaxError(syntaxError(\"closing\",\"}\"));m.output=o.escapeLast(m.output,\"{\");decrement(\"braces\")}if(u.strictSlashes!==true&&(B.type===\"star\"||B.type===\"bracket\")){push({type:\"maybe_slash\",value:\"\",output:`${b}?`})}if(m.backtrack===true){m.output=\"\";for(const t of m.tokens){m.output+=t.output!=null?t.output:t.value;if(t.suffix){m.output+=t.suffix}}}return m};parse.fastpaths=(t,e)=>{const u={...e};const r=typeof u.maxLength===\"number\"?Math.min(s,u.maxLength):s;const a=t.length;if(a>r){throw new SyntaxError(`Input length: ${a}, exceeds maximum allowed length: ${r}`)}t=c[t]||t;const{DOT_LITERAL:i,SLASH_LITERAL:p,ONE_CHAR:l,DOTS_SLASH:f,NO_DOT:A,NO_DOTS:_,NO_DOTS_SLASH:R,STAR:E,START_ANCHOR:h}=n.globChars(u.windows);const g=u.dot?_:A;const b=u.dot?R:A;const C=u.capture?\"\":\"?:\";const y={negated:false,prefix:\"\"};let $=u.bash===true?\".*?\":E;if(u.capture){$=`(${$})`}const globstar=t=>{if(t.noglobstar===true)return $;return`(${C}(?:(?!${h}${t.dot?f:i}).)*?)`};const create=t=>{switch(t){case\"*\":return`${g}${l}${$}`;case\".*\":return`${i}${l}${$}`;case\"*.*\":return`${g}${$}${i}${l}${$}`;case\"*/*\":return`${g}${$}${p}${l}${b}${$}`;case\"**\":return g+globstar(u);case\"**/*\":return`(?:${g}${globstar(u)}${p})?${b}${l}${$}`;case\"**/*.*\":return`(?:${g}${globstar(u)}${p})?${b}${$}${i}${l}${$}`;case\"**/.*\":return`(?:${g}${globstar(u)}${p})?${i}${l}${$}`;default:{const e=/^(.*?)\\.(\\w+)$/.exec(t);if(!e)return;const u=create(e[1]);if(!u)return;return u+i+e[2]}}};const x=o.removePrefix(t,y);let S=create(x);if(S&&u.strictSlashes!==true){S+=`${p}?`}return S};t.exports=parse},510:(t,e,u)=>{const n=u(716);const o=u(697);const s=u(96);const r=u(154);const isObject=t=>t&&typeof t===\"object\"&&!Array.isArray(t);const picomatch=(t,e,u=false)=>{if(Array.isArray(t)){const n=t.map((t=>picomatch(t,e,u)));const arrayMatcher=t=>{for(const e of n){const u=e(t);if(u)return u}return false};return arrayMatcher}const n=isObject(t)&&t.tokens&&t.input;if(t===\"\"||typeof t!==\"string\"&&!n){throw new TypeError(\"Expected pattern to be a non-empty string\")}const o=e||{};const s=o.windows;const r=n?picomatch.compileRe(t,e):picomatch.makeRe(t,e,false,true);const a=r.state;delete r.state;let isIgnored=()=>false;if(o.ignore){const t={...e,ignore:null,onMatch:null,onResult:null};isIgnored=picomatch(o.ignore,t,u)}const matcher=(u,n=false)=>{const{isMatch:i,match:c,output:p}=picomatch.test(u,r,e,{glob:t,posix:s});const l={glob:t,state:a,regex:r,posix:s,input:u,output:p,match:c,isMatch:i};if(typeof o.onResult===\"function\"){o.onResult(l)}if(i===false){l.isMatch=false;return n?l:false}if(isIgnored(u)){if(typeof o.onIgnore===\"function\"){o.onIgnore(l)}l.isMatch=false;return n?l:false}if(typeof o.onMatch===\"function\"){o.onMatch(l)}return n?l:true};if(u){matcher.state=a}return matcher};picomatch.test=(t,e,u,{glob:n,posix:o}={})=>{if(typeof t!==\"string\"){throw new TypeError(\"Expected input to be a string\")}if(t===\"\"){return{isMatch:false,output:\"\"}}const r=u||{};const a=r.format||(o?s.toPosixSlashes:null);let i=t===n;let c=i&&a?a(t):t;if(i===false){c=a?a(t):t;i=c===n}if(i===false||r.capture===true){if(r.matchBase===true||r.basename===true){i=picomatch.matchBase(t,e,u,o)}else{i=e.exec(c)}}return{isMatch:Boolean(i),match:i,output:c}};picomatch.matchBase=(t,e,u)=>{const n=e instanceof RegExp?e:picomatch.makeRe(e,u);return n.test(s.basename(t))};picomatch.isMatch=(t,e,u)=>picomatch(e,u)(t);picomatch.parse=(t,e)=>{if(Array.isArray(t))return t.map((t=>picomatch.parse(t,e)));return o(t,{...e,fastpaths:false})};picomatch.scan=(t,e)=>n(t,e);picomatch.compileRe=(t,e,u=false,n=false)=>{if(u===true){return t.output}const o=e||{};const s=o.contains?\"\":\"^\";const r=o.contains?\"\":\"$\";let a=`${s}(?:${t.output})${r}`;if(t&&t.negated===true){a=`^(?!${a}).*$`}const i=picomatch.toRegex(a,e);if(n===true){i.state=t}return i};picomatch.makeRe=(t,e={},u=false,n=false)=>{if(!t||typeof t!==\"string\"){throw new TypeError(\"Expected a non-empty string\")}let s={negated:false,fastpaths:true};if(e.fastpaths!==false&&(t[0]===\".\"||t[0]===\"*\")){s.output=o.fastpaths(t,e)}if(!s.output){s=o(t,e)}return picomatch.compileRe(s,e,u,n)};picomatch.toRegex=(t,e)=>{try{const u=e||{};return new RegExp(t,u.flags||(u.nocase?\"i\":\"\"))}catch(t){if(e&&e.debug===true)throw t;return/$^/}};picomatch.constants=r;t.exports=picomatch},716:(t,e,u)=>{const n=u(96);const{CHAR_ASTERISK:o,CHAR_AT:s,CHAR_BACKWARD_SLASH:r,CHAR_COMMA:a,CHAR_DOT:i,CHAR_EXCLAMATION_MARK:c,CHAR_FORWARD_SLASH:p,CHAR_LEFT_CURLY_BRACE:l,CHAR_LEFT_PARENTHESES:f,CHAR_LEFT_SQUARE_BRACKET:A,CHAR_PLUS:_,CHAR_QUESTION_MARK:R,CHAR_RIGHT_CURLY_BRACE:E,CHAR_RIGHT_PARENTHESES:h,CHAR_RIGHT_SQUARE_BRACKET:g}=u(154);const isPathSeparator=t=>t===p||t===r;const depth=t=>{if(t.isPrefix!==true){t.depth=t.isGlobstar?Infinity:1}};const scan=(t,e)=>{const u=e||{};const b=t.length-1;const C=u.parts===true||u.scanToEnd===true;const y=[];const $=[];const x=[];let S=t;let H=-1;let v=0;let d=0;let L=false;let T=false;let O=false;let k=false;let m=false;let w=false;let N=false;let I=false;let B=false;let G=false;let D=0;let M;let P;let K={value:\"\",depth:0,isGlob:false};const eos=()=>H>=b;const peek=()=>S.charCodeAt(H+1);const advance=()=>{M=P;return S.charCodeAt(++H)};while(H<b){P=advance();let t;if(P===r){N=K.backslashes=true;P=advance();if(P===l){w=true}continue}if(w===true||P===l){D++;while(eos()!==true&&(P=advance())){if(P===r){N=K.backslashes=true;advance();continue}if(P===l){D++;continue}if(w!==true&&P===i&&(P=advance())===i){L=K.isBrace=true;O=K.isGlob=true;G=true;if(C===true){continue}break}if(w!==true&&P===a){L=K.isBrace=true;O=K.isGlob=true;G=true;if(C===true){continue}break}if(P===E){D--;if(D===0){w=false;L=K.isBrace=true;G=true;break}}}if(C===true){continue}break}if(P===p){y.push(H);$.push(K);K={value:\"\",depth:0,isGlob:false};if(G===true)continue;if(M===i&&H===v+1){v+=2;continue}d=H+1;continue}if(u.noext!==true){const t=P===_||P===s||P===o||P===R||P===c;if(t===true&&peek()===f){O=K.isGlob=true;k=K.isExtglob=true;G=true;if(P===c&&H===v){B=true}if(C===true){while(eos()!==true&&(P=advance())){if(P===r){N=K.backslashes=true;P=advance();continue}if(P===h){O=K.isGlob=true;G=true;break}}continue}break}}if(P===o){if(M===o)m=K.isGlobstar=true;O=K.isGlob=true;G=true;if(C===true){continue}break}if(P===R){O=K.isGlob=true;G=true;if(C===true){continue}break}if(P===A){while(eos()!==true&&(t=advance())){if(t===r){N=K.backslashes=true;advance();continue}if(t===g){T=K.isBracket=true;O=K.isGlob=true;G=true;break}}if(C===true){continue}break}if(u.nonegate!==true&&P===c&&H===v){I=K.negated=true;v++;continue}if(u.noparen!==true&&P===f){O=K.isGlob=true;if(C===true){while(eos()!==true&&(P=advance())){if(P===f){N=K.backslashes=true;P=advance();continue}if(P===h){G=true;break}}continue}break}if(O===true){G=true;if(C===true){continue}break}}if(u.noext===true){k=false;O=false}let U=S;let X=\"\";let F=\"\";if(v>0){X=S.slice(0,v);S=S.slice(v);d-=v}if(U&&O===true&&d>0){U=S.slice(0,d);F=S.slice(d)}else if(O===true){U=\"\";F=S}else{U=S}if(U&&U!==\"\"&&U!==\"/\"&&U!==S){if(isPathSeparator(U.charCodeAt(U.length-1))){U=U.slice(0,-1)}}if(u.unescape===true){if(F)F=n.removeBackslashes(F);if(U&&N===true){U=n.removeBackslashes(U)}}const Q={prefix:X,input:t,start:v,base:U,glob:F,isBrace:L,isBracket:T,isGlob:O,isExtglob:k,isGlobstar:m,negated:I,negatedExtglob:B};if(u.tokens===true){Q.maxDepth=0;if(!isPathSeparator(P)){$.push(K)}Q.tokens=$}if(u.parts===true||u.tokens===true){let e;for(let n=0;n<y.length;n++){const o=e?e+1:v;const s=y[n];const r=t.slice(o,s);if(u.tokens){if(n===0&&v!==0){$[n].isPrefix=true;$[n].value=X}else{$[n].value=r}depth($[n]);Q.maxDepth+=$[n].depth}if(n!==0||r!==\"\"){x.push(r)}e=s}if(e&&e+1<t.length){const n=t.slice(e+1);x.push(n);if(u.tokens){$[$.length-1].value=n;depth($[$.length-1]);Q.maxDepth+=$[$.length-1].depth}}Q.slashes=y;Q.parts=x}return Q};t.exports=scan},96:(t,e,u)=>{const{REGEX_BACKSLASH:n,REGEX_REMOVE_BACKSLASH:o,REGEX_SPECIAL_CHARS:s,REGEX_SPECIAL_CHARS_GLOBAL:r}=u(154);e.isObject=t=>t!==null&&typeof t===\"object\"&&!Array.isArray(t);e.hasRegexChars=t=>s.test(t);e.isRegexChar=t=>t.length===1&&e.hasRegexChars(t);e.escapeRegex=t=>t.replace(r,\"\\\\$1\");e.toPosixSlashes=t=>t.replace(n,\"/\");e.removeBackslashes=t=>t.replace(o,(t=>t===\"\\\\\"?\"\":t));e.escapeLast=(t,u,n)=>{const o=t.lastIndexOf(u,n);if(o===-1)return t;if(t[o-1]===\"\\\\\")return e.escapeLast(t,u,o-1);return`${t.slice(0,o)}\\\\${t.slice(o)}`};e.removePrefix=(t,e={})=>{let u=t;if(u.startsWith(\"./\")){u=u.slice(2);e.prefix=\"./\"}return u};e.wrapOutput=(t,e={},u={})=>{const n=u.contains?\"\":\"^\";const o=u.contains?\"\":\"$\";let s=`${n}(?:${t})${o}`;if(e.negated===true){s=`(?:^(?!${s}).*$)`}return s};e.basename=(t,{windows:e}={})=>{const u=t.split(e?/[\\\\/]/:\"/\");const n=u[u.length-1];if(n===\"\"){return u[u.length-2]}return n}}};var e={};function __nccwpck_require__(u){var n=e[u];if(n!==undefined){return n.exports}var o=e[u]={exports:{}};var s=true;try{t[u](o,o.exports,__nccwpck_require__);s=false}finally{if(s)delete e[u]}return o.exports}if(typeof __nccwpck_require__!==\"undefined\")__nccwpck_require__.ab=__dirname+\"/\";var u=__nccwpck_require__(170);module.exports=u})();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcGljb21hdGNoL2luZGV4LmpzIiwibWFwcGluZ3MiOiI7O0FBQUEsTUFBTSxhQUFhLE9BQU8sY0FBYyxlQUFlLHFCQUFxQix1REFBdUQseUNBQXlDLGtDQUFrQyxVQUFVLE9BQU8sZ0JBQWdCLE9BQU8sV0FBVyxPQUFPLE9BQU8sb0JBQW9CLGNBQWMsZ0NBQWdDLGlEQUFpRCxHQUFHLDBCQUEwQixnQkFBZ0IsMkJBQTJCLG9CQUFvQixTQUFTLGdCQUFnQixhQUFhLEVBQUUsR0FBRyxjQUFjLGNBQWMsY0FBYyxjQUFjLGdCQUFnQixlQUFlLGNBQWMsRUFBRSxLQUFLLGdCQUFnQixFQUFFLEdBQUcsV0FBVyxHQUFHLElBQUksRUFBRSxFQUFFLEVBQUUsY0FBYyxFQUFFLEdBQUcsY0FBYyxFQUFFLEVBQUUsRUFBRSxHQUFHLGNBQWMsR0FBRyxJQUFJLEVBQUUsRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLFdBQVcsRUFBRSxJQUFJLFlBQVksU0FBUyx3TUFBd00sU0FBUyx1QkFBdUIsRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsR0FBRyxJQUFJLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEdBQUcsSUFBSSxNQUFNLEVBQUUsMEJBQTBCLEdBQUcsSUFBSSxNQUFNLEVBQUUsMkJBQTJCLEdBQUcsSUFBSSxNQUFNLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsc0JBQXNCLEVBQUUsZ0JBQWdCLFNBQVMseUxBQXlMLGFBQWEsRUFBRSw4RUFBOEUsV0FBVyxzRUFBc0UscURBQXFELHlDQUF5QyxnR0FBZ0csNEVBQTRFLHVDQUF1QyxtM0JBQW0zQixPQUFPLEtBQUssMENBQTBDLE9BQU8sR0FBRyxNQUFNLG1DQUFtQyxNQUFNLGtDQUFrQyxNQUFNLGtDQUFrQyxNQUFNLGlDQUFpQyxjQUFjLHNCQUFzQixlQUFlLGVBQWUs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QUFPLGFBQWEsU0FBUyxPQUFPLG1CQUFtQixRQUFRLFFBQVEsUUFBUSxTQUFTLFNBQVMsUUFBUSxlQUFlLGFBQWEsS0FBSyxxQkFBcUIsZUFBZSxhQUFhLGtCQUFrQixLQUFLLElBQUksS0FBSyxJQUFJLDhCQUE4Qiw4Q0FBOEMsaUJBQWlCLHNCQUFzQiw4QkFBOEIsZ0JBQWdCLDBCQUEwQixTQUFTLDJIQUEySCxvQkFBb0IsYUFBYSx3QkFBd0IsVUFBVSxXQUFXLG9DQUFvQyxNQUFNLFlBQVksV0FBVyxLQUFLLGdCQUFnQixhQUFhLHFCQUFxQixhQUFhLGlCQUFpQixtQkFBbUIsYUFBYSxLQUFLLGFBQWEsWUFBWSx1QkFBdUIsa0JBQWtCLFVBQVUsSUFBSSxvQkFBb0IscUJBQXFCLFVBQVUsYUFBYSxzQkFBc0IscUJBQXFCLGlDQUFpQyxZQUFZLFVBQVUsVUFBVSxlQUFlLGNBQWMsTUFBTSw4RkFBOEYsUUFBUSwrREFBK0QsNkJBQTZCLGtEQUFrRCxxQ0FBcUMscUNBQXFDLHVEQUF1RCx1QkFBdUIsMkJBQTJCLG1CQUFtQiw4Q0FBOEMsU0FBUyxhQUFhLElBQUksV0FBVyxHQUFHLHNCQUFzQixJQUFJLFFBQVEsdUJBQXVCLGFBQWEsY0FBYyxVQUFVLG9CQUFvQixLQUFLLElBQUksMEJBQTBCLDBCQUEwQixTQUFTLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFLHFCQUFxQixZQUFZLEVBQUUsT0FBTyxVQUFVLGVBQWUsVUFBVSxHQUFHLElBQUksK0JBQStCLHNCQUFzQixXQUFXLHFCQUFxQixZQUFZLFNBQVMsZ0NBQWdDLFdBQVcsa0JBQWtCLGlCQUFpQixZQUFZLFlBQVksV0FBVyxJQUFJLHNDQUFzQyxRQUFRLFFBQVEsaUJBQWlCLGlCQUFpQixtRUFBbUUsU0FBUyxLQUFLLCtCQUErQixpQkFBaUIiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3BpY29tYXRjaC9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoKCk9PntcInVzZSBzdHJpY3RcIjt2YXIgdD17MTcwOih0LGUsdSk9Pntjb25zdCBuPXUoNTEwKTtjb25zdCBpc1dpbmRvd3M9KCk9PntpZih0eXBlb2YgbmF2aWdhdG9yIT09XCJ1bmRlZmluZWRcIiYmbmF2aWdhdG9yLnBsYXRmb3JtKXtjb25zdCB0PW5hdmlnYXRvci5wbGF0Zm9ybS50b0xvd2VyQ2FzZSgpO3JldHVybiB0PT09XCJ3aW4zMlwifHx0PT09XCJ3aW5kb3dzXCJ9aWYodHlwZW9mIHByb2Nlc3MhPT1cInVuZGVmaW5lZFwiJiZwcm9jZXNzLnBsYXRmb3JtKXtyZXR1cm4gcHJvY2Vzcy5wbGF0Zm9ybT09PVwid2luMzJcIn1yZXR1cm4gZmFsc2V9O2Z1bmN0aW9uIHBpY29tYXRjaCh0LGUsdT1mYWxzZSl7aWYoZSYmKGUud2luZG93cz09PW51bGx8fGUud2luZG93cz09PXVuZGVmaW5lZCkpe2U9ey4uLmUsd2luZG93czppc1dpbmRvd3MoKX19cmV0dXJuIG4odCxlLHUpfU9iamVjdC5hc3NpZ24ocGljb21hdGNoLG4pO3QuZXhwb3J0cz1waWNvbWF0Y2h9LDE1NDp0PT57Y29uc3QgZT1cIlxcXFxcXFxcL1wiO2NvbnN0IHU9YFteJHtlfV1gO2NvbnN0IG49XCJcXFxcLlwiO2NvbnN0IG89XCJcXFxcK1wiO2NvbnN0IHM9XCJcXFxcP1wiO2NvbnN0IHI9XCJcXFxcL1wiO2NvbnN0IGE9XCIoPz0uKVwiO2NvbnN0IGk9XCJbXi9dXCI7Y29uc3QgYz1gKD86JHtyfXwkKWA7Y29uc3QgcD1gKD86Xnwke3J9KWA7Y29uc3QgbD1gJHtufXsxLDJ9JHtjfWA7Y29uc3QgZj1gKD8hJHtufSlgO2NvbnN0IEE9YCg/ISR7cH0ke2x9KWA7Y29uc3QgXz1gKD8hJHtufXswLDF9JHtjfSlgO2NvbnN0IFI9YCg/ISR7bH0pYDtjb25zdCBFPWBbXi4ke3J9XWA7Y29uc3QgaD1gJHtpfSo/YDtjb25zdCBnPVwiL1wiO2NvbnN0IGI9e0RPVF9MSVRFUkFMOm4sUExVU19MSVRFUkFMOm8sUU1BUktfTElURVJBTDpzLFNMQVNIX0xJVEVSQUw6cixPTkVfQ0hBUjphLFFNQVJLOmksRU5EX0FOQ0hPUjpjLERPVFNfU0xBU0g6bCxOT19ET1Q6ZixOT19ET1RTOkEsTk9fRE9UX1NMQVNIOl8sTk9fRE9UU19TTEFTSDpSLFFNQVJLX05PX0RPVDpFLFNUQVI6aCxTVEFSVF9BTkNIT1I6cCxTRVA6Z307Y29uc3QgQz17Li4uYixTTEFTSF9MSVRFUkFMOmBbJHtlfV1gLFFNQVJLOnUsU1RBUjpgJHt1fSo/YCxET1RTX1NMQVNIOmAke259ezEsMn0oPzpbJHtlfV18JClgLE5PX0RPVDpgKD8hJHtufSlgLE5PX0RPVFM6YCg/ISg/Ol58WyR7ZX1dKSR7bn17MSwyfSg/Olske2V9XXwkKSlgLE5PX0RPVF9TTEFTSDpgKD8hJHtufXswLDF9KD86WyR7ZX1dfCQpKWAsTk9fRE9UU19TTEFTSDpgKD8hJHtufXsxLDJ9KD86WyR7ZX1dfCQpKWAsUU1BUktfTk9fRE9UOmBbXi4ke2V9XWAsU1RBUlRfQU5DSE9SOmAoPzpefFske2V9XSlgLEVORF9BTkNIT1I6YCg/Olske2V9XXwkKWAsU0VQOlwiXFxcXFwifTtjb25zdCB5PXthbG51bTpcImEtekEtWjAtOVwiLGFscGhhOlwiYS16QS1aXCIsYXNjaWk6XCJcXFxceDAwLVxcXFx4N0ZcIixibGFuazpcIiBcXFxcdFwiLGNudHJsOlwiXFxcXHgwMC1cXFxceDFGXFxcXHg3RlwiLGRpZ2l0OlwiMC05XCIsZ3JhcGg6XCJcXFxceDIxLVxcXFx4N0VcIixsb3dlcjpcImEtelwiLHByaW50OlwiXFxcXHgyMC1cXFxceDdFIFwiLHB1bmN0OlwiXFxcXC0hXFxcIiMkJSYnKClcXFxcKissLi86Ozw9Pj9AW1xcXFxdXl9ge3x9flwiLHNwYWNlOlwiIFxcXFx0XFxcXHJcXFxcblxcXFx2XFxcXGZcIix1cHBlcjpcIkEtWlwiLHdvcmQ6XCJBLVphLXowLTlfXCIseGRpZ2l0OlwiQS1GYS1mMC05XCJ9O3QuZXhwb3J0cz17TUFYX0xFTkdUSDoxMDI0KjY0LFBPU0lYX1JFR0VYX1NPVVJDRTp5LFJFR0VYX0JBQ0tTTEFTSDovXFxcXCg/IVsqKz9eJHt9KHwpW1xcXV0pL2csUkVHRVhfTk9OX1NQRUNJQUxfQ0hBUlM6L15bXkAhW1xcXS4sJCorP157fSgpfFxcXFwvXSsvLFJFR0VYX1NQRUNJQUxfQ0hBUlM6L1stKis/Ll4ke30ofClbXFxdXS8sUkVHRVhfU1BFQ0lBTF9DSEFSU19CQUNLUkVGOi8oXFxcXD8pKChcXFcpKFxcMyopKS9nLFJFR0VYX1NQRUNJQUxfQ0hBUlNfR0xPQkFMOi8oWy0qKz8uXiR7fSh8KVtcXF1dKS9nLFJFR0VYX1JFTU9WRV9CQUNLU0xBU0g6Lyg/OlxcWy4qP1teXFxcXF1cXF18XFxcXCg/PS4pKS9nLFJFUExBQ0VNRU5UUzp7XCIqKipcIjpcIipcIixcIioqLyoqXCI6XCIqKlwiLFwiKiovKiovKipcIjpcIioqXCJ9LENIQVJfMDo0OCxDSEFSXzk6NTcsQ0hBUl9VUFBFUkNBU0VfQTo2NSxDSEFSX0xPV0VSQ0FTRV9BOjk3LENIQVJfVVBQRVJDQVNFX1o6OTAsQ0hBUl9MT1dFUkNBU0VfWjoxMjIsQ0hBUl9MRUZUX1BBUkVOVEhFU0VTOjQwLENIQVJfUklHSFRfUEFSRU5USEVTRVM6NDEsQ0hBUl9BU1RFUklTSzo0MixDSEFSX0FNUEVSU0FORDozOCxDSEFSX0FUOjY0LENIQVJfQkFDS1dBUkRfU0xBU0g6OTIsQ0hBUl9DQVJSSUFHRV9SRVRVUk46MTMsQ0hBUl9DSVJDVU1GTEVYX0FDQ0VOVDo5NCxDSEFSX0NPTE9OOjU4LENIQVJfQ09NTUE6NDQsQ0hBUl9ET1Q6NDYsQ0hBUl9ET1VCTEVfUVVPVEU6MzQsQ0hBUl9FUVVBTDo2MSxDSEFSX0VYQ0xBTUFUSU9OX01BUks6MzMsQ0hBUl9GT1JNX0ZFRUQ6MTIsQ0hBUl9GT1JXQVJEX1NMQVNIOjQ3LENIQVJfR1JBVkVfQUNDRU5UOjk2LENIQVJfSEFTSDozNSxDSEFSX0hZUEhFTl9NSU5VUzo0NSxDSEFSX0xFRlRfQU5HTEVfQlJBQ0tFVDo2MCxDSEFSX0xFRlRfQ1VSTFlfQlJBQ0U6MTIzLENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVDo5MSxDSEFSX0xJTkVfRkVFRDoxMCxDSEFSX05PX0JSRUFLX1NQQUNFOjE2MCxDSEFSX1BFUkNFTlQ6MzcsQ0hBUl9QTFVTOjQzLENIQVJfUVVFU1RJT05fTUFSSzo2MyxDSEFSX1JJR0hUX0FOR0xFX0JSQUNLRVQ6NjIsQ0hBUl9SSUdIVF9DVVJMWV9CUkFDRToxMjUsQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVDo5MyxDSEFSX1NFTUlDT0xPTjo1OSxDSEFSX1NJTkdMRV9RVU9URTozOSxDSEFSX1NQQUNFOjMyLENIQVJfVEFCOjksQ0hBUl9VTkRFUlNDT1JFOjk1LENIQVJfVkVSVElDQUxfTElORToxMjQsQ0hBUl9aRVJPX1dJRFRIX05PQlJFQUtfU1BBQ0U6NjUyNzksZXh0Z2xvYkNoYXJzKHQpe3JldHVybntcIiFcIjp7dHlwZTpcIm5lZ2F0ZVwiLG9wZW46XCIoPzooPyEoPzpcIixjbG9zZTpgKSkke3QuU1RBUn0pYH0sXCI/XCI6e3R5cGU6XCJxbWFya1wiLG9wZW46XCIoPzpcIixjbG9zZTpcIik/XCJ9LFwiK1wiOnt0eXBlOlwicGx1c1wiLG9wZW46XCIoPzpcIixjbG9zZTpcIikrXCJ9LFwiKlwiOnt0eXBlOlwic3RhclwiLG9wZW46XCIoPzpcIixjbG9zZTpcIikqXCJ9LFwiQFwiOnt0eXBlOlwiYXRcIixvcGVuOlwiKD86XCIsY2xvc2U6XCIpXCJ9fX0sZ2xvYkNoYXJzKHQpe3JldHVybiB0PT09dHJ1ZT9DOmJ9fX0sNjk3Oih0LGUsdSk9Pntjb25zdCBuPXUoMTU0KTtjb25zdCBvPXUoOTYpO2NvbnN0e01BWF9MRU5HVEg6cyxQT1NJWF9SRUdFWF9TT1VSQ0U6cixSRUdFWF9OT05fU1BFQ0lBTF9DSEFSUzphLFJFR0VYX1NQRUNJQUxfQ0hBUlNfQkFDS1JFRjppLFJFUExBQ0VNRU5UUzpjfT1uO2NvbnN0IGV4cGFuZFJhbmdlPSh0LGUpPT57aWYodHlwZW9mIGUuZXhwYW5kUmFuZ2U9PT1cImZ1bmN0aW9uXCIpe3JldHVybiBlLmV4cGFuZFJhbmdlKC4uLnQsZSl9dC5zb3J0KCk7Y29uc3QgdT1gWyR7dC5qb2luKFwiLVwiKX1dYDt0cnl7bmV3IFJlZ0V4cCh1KX1jYXRjaChlKXtyZXR1cm4gdC5tYXAoKHQ9Pm8uZXNjYXBlUmVnZXgodCkpKS5qb2luKFwiLi5cIil9cmV0dXJuIHV9O2NvbnN0IHN5bnRheEVycm9yPSh0LGUpPT5gTWlzc2luZyAke3R9OiBcIiR7ZX1cIiAtIHVzZSBcIlxcXFxcXFxcJHtlfVwiIHRvIG1hdGNoIGxpdGVyYWwgY2hhcmFjdGVyc2A7Y29uc3QgcGFyc2U9KHQsZSk9PntpZih0eXBlb2YgdCE9PVwic3RyaW5nXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBhIHN0cmluZ1wiKX10PWNbdF18fHQ7Y29uc3QgdT17Li4uZX07Y29uc3QgcD10eXBlb2YgdS5tYXhMZW5ndGg9PT1cIm51bWJlclwiP01hdGgubWluKHMsdS5tYXhMZW5ndGgpOnM7bGV0IGw9dC5sZW5ndGg7aWYobD5wKXt0aHJvdyBuZXcgU3ludGF4RXJyb3IoYElucHV0IGxlbmd0aDogJHtsfSwgZXhjZWVkcyBtYXhpbXVtIGFsbG93ZWQgbGVuZ3RoOiAke3B9YCl9Y29uc3QgZj17dHlwZTpcImJvc1wiLHZhbHVlOlwiXCIsb3V0cHV0OnUucHJlcGVuZHx8XCJcIn07Y29uc3QgQT1bZl07Y29uc3QgXz11LmNhcHR1cmU/XCJcIjpcIj86XCI7Y29uc3QgUj1uLmdsb2JDaGFycyh1LndpbmRvd3MpO2NvbnN0IEU9bi5leHRnbG9iQ2hhcnMoUik7Y29uc3R7RE9UX0xJVEVSQUw6aCxQTFVTX0xJVEVSQUw6ZyxTTEFTSF9MSVRFUkFMOmIsT05FX0NIQVI6QyxET1RTX1NMQVNIOnksTk9fRE9UOiQsTk9fRE9UX1NMQVNIOngsTk9fRE9UU19TTEFTSDpTLFFNQVJLOkgsUU1BUktfTk9fRE9UOnYsU1RBUjpkLFNUQVJUX0FOQ0hPUjpMfT1SO2NvbnN0IGdsb2JzdGFyPXQ9PmAoJHtffSg/Oig/ISR7TH0ke3QuZG90P3k6aH0pLikqPylgO2NvbnN0IFQ9dS5kb3Q/XCJcIjokO2NvbnN0IE89dS5kb3Q/SDp2O2xldCBrPXUuYmFzaD09PXRydWU/Z2xvYnN0YXIodSk6ZDtpZih1LmNhcHR1cmUpe2s9YCgke2t9KWB9aWYodHlwZW9mIHUubm9leHQ9PT1cImJvb2xlYW5cIil7dS5ub2V4dGdsb2I9dS5ub2V4dH1jb25zdCBtPXtpbnB1dDp0LGluZGV4Oi0xLHN0YXJ0OjAsZG90OnUuZG90PT09dHJ1ZSxjb25zdW1lZDpcIlwiLG91dHB1dDpcIlwiLHByZWZpeDpcIlwiLGJhY2t0cmFjazpmYWxzZSxuZWdhdGVkOmZhbHNlLGJyYWNrZXRzOjAsYnJhY2VzOjAscGFyZW5zOjAscXVvdGVzOjAsZ2xvYnN0YXI6ZmFsc2UsdG9rZW5zOkF9O3Q9by5yZW1vdmVQcmVmaXgodCxtKTtsPXQubGVuZ3RoO2NvbnN0IHc9W107Y29uc3QgTj1bXTtjb25zdCBJPVtdO2xldCBCPWY7bGV0IEc7Y29uc3QgZW9zPSgpPT5tLmluZGV4PT09bC0xO2NvbnN0IEQ9bS5wZWVrPShlPTEpPT50W20uaW5kZXgrZV07Y29uc3QgTT1tLmFkdmFuY2U9KCk9PnRbKyttLmluZGV4XXx8XCJcIjtjb25zdCByZW1haW5pbmc9KCk9PnQuc2xpY2UobS5pbmRleCsxKTtjb25zdCBjb25zdW1lPSh0PVwiXCIsZT0wKT0+e20uY29uc3VtZWQrPXQ7bS5pbmRleCs9ZX07Y29uc3QgYXBwZW5kPXQ9PnttLm91dHB1dCs9dC5vdXRwdXQhPW51bGw/dC5vdXRwdXQ6dC52YWx1ZTtjb25zdW1lKHQudmFsdWUpfTtjb25zdCBuZWdhdGU9KCk9PntsZXQgdD0xO3doaWxlKEQoKT09PVwiIVwiJiYoRCgyKSE9PVwiKFwifHxEKDMpPT09XCI/XCIpKXtNKCk7bS5zdGFydCsrO3QrK31pZih0JTI9PT0wKXtyZXR1cm4gZmFsc2V9bS5uZWdhdGVkPXRydWU7bS5zdGFydCsrO3JldHVybiB0cnVlfTtjb25zdCBpbmNyZW1lbnQ9dD0+e21bdF0rKztJLnB1c2godCl9O2NvbnN0IGRlY3JlbWVudD10PT57bVt0XS0tO0kucG9wKCl9O2NvbnN0IHB1c2g9dD0+e2lmKEIudHlwZT09PVwiZ2xvYnN0YXJcIil7Y29uc3QgZT1tLmJyYWNlcz4wJiYodC50eXBlPT09XCJjb21tYVwifHx0LnR5cGU9PT1cImJyYWNlXCIpO2NvbnN0IHU9dC5leHRnbG9iPT09dHJ1ZXx8dy5sZW5ndGgmJih0LnR5cGU9PT1cInBpcGVcInx8dC50eXBlPT09XCJwYXJlblwiKTtpZih0LnR5cGUhPT1cInNsYXNoXCImJnQudHlwZSE9PVwicGFyZW5cIiYmIWUmJiF1KXttLm91dHB1dD1tLm91dHB1dC5zbGljZSgwLC1CLm91dHB1dC5sZW5ndGgpO0IudHlwZT1cInN0YXJcIjtCLnZhbHVlPVwiKlwiO0Iub3V0cHV0PWs7bS5vdXRwdXQrPUIub3V0cHV0fX1pZih3Lmxlbmd0aCYmdC50eXBlIT09XCJwYXJlblwiKXt3W3cubGVuZ3RoLTFdLmlubmVyKz10LnZhbHVlfWlmKHQudmFsdWV8fHQub3V0cHV0KWFwcGVuZCh0KTtpZihCJiZCLnR5cGU9PT1cInRleHRcIiYmdC50eXBlPT09XCJ0ZXh0XCIpe0Iub3V0cHV0PShCLm91dHB1dHx8Qi52YWx1ZSkrdC52YWx1ZTtCLnZhbHVlKz10LnZhbHVlO3JldHVybn10LnByZXY9QjtBLnB1c2godCk7Qj10fTtjb25zdCBleHRnbG9iT3Blbj0odCxlKT0+e2NvbnN0IG49ey4uLkVbZV0sY29uZGl0aW9uczoxLGlubmVyOlwiXCJ9O24ucHJldj1CO24ucGFyZW5zPW0ucGFyZW5zO24ub3V0cHV0PW0ub3V0cHV0O2NvbnN0IG89KHUuY2FwdHVyZT9cIihcIjpcIlwiKStuLm9wZW47aW5jcmVtZW50KFwicGFyZW5zXCIpO3B1c2goe3R5cGU6dCx2YWx1ZTplLG91dHB1dDptLm91dHB1dD9cIlwiOkN9KTtwdXNoKHt0eXBlOlwicGFyZW5cIixleHRnbG9iOnRydWUsdmFsdWU6TSgpLG91dHB1dDpvfSk7dy5wdXNoKG4pfTtjb25zdCBleHRnbG9iQ2xvc2U9dD0+e2xldCBuPXQuY2xvc2UrKHUuY2FwdHVyZT9cIilcIjpcIlwiKTtsZXQgbztpZih0LnR5cGU9PT1cIm5lZ2F0ZVwiKXtsZXQgcz1rO2lmKHQuaW5uZXImJnQuaW5uZXIubGVuZ3RoPjEmJnQuaW5uZXIuaW5jbHVkZXMoXCIvXCIpKXtzPWdsb2JzdGFyKHUpfWlmKHMhPT1rfHxlb3MoKXx8L15cXCkrJC8udGVzdChyZW1haW5pbmcoKSkpe249dC5jbG9zZT1gKSQpKSR7c31gfWlmKHQuaW5uZXIuaW5jbHVkZXMoXCIqXCIpJiYobz1yZW1haW5pbmcoKSkmJi9eXFwuW15cXFxcLy5dKyQvLnRlc3Qobykpe2NvbnN0IHU9cGFyc2Uobyx7Li4uZSxmYXN0cGF0aHM6ZmFsc2V9KS5vdXRwdXQ7bj10LmNsb3NlPWApJHt1fSkke3N9KWB9aWYodC5wcmV2LnR5cGU9PT1cImJvc1wiKXttLm5lZ2F0ZWRFeHRnbG9iPXRydWV9fXB1c2goe3R5cGU6XCJwYXJlblwiLGV4dGdsb2I6dHJ1ZSx2YWx1ZTpHLG91dHB1dDpufSk7ZGVjcmVtZW50KFwicGFyZW5zXCIpfTtpZih1LmZhc3RwYXRocyE9PWZhbHNlJiYhLyheWyohXXxbLygpW1xcXXt9XCJdKS8udGVzdCh0KSl7bGV0IG49ZmFsc2U7bGV0IHM9dC5yZXBsYWNlKGksKCh0LGUsdSxvLHMscik9PntpZihvPT09XCJcXFxcXCIpe249dHJ1ZTtyZXR1cm4gdH1pZihvPT09XCI/XCIpe2lmKGUpe3JldHVybiBlK28rKHM/SC5yZXBlYXQocy5sZW5ndGgpOlwiXCIpfWlmKHI9PT0wKXtyZXR1cm4gTysocz9ILnJlcGVhdChzLmxlbmd0aCk6XCJcIil9cmV0dXJuIEgucmVwZWF0KHUubGVuZ3RoKX1pZihvPT09XCIuXCIpe3JldHVybiBoLnJlcGVhdCh1Lmxlbmd0aCl9aWYobz09PVwiKlwiKXtpZihlKXtyZXR1cm4gZStvKyhzP2s6XCJcIil9cmV0dXJuIGt9cmV0dXJuIGU/dDpgXFxcXCR7dH1gfSkpO2lmKG49PT10cnVlKXtpZih1LnVuZXNjYXBlPT09dHJ1ZSl7cz1zLnJlcGxhY2UoL1xcXFwvZyxcIlwiKX1lbHNle3M9cy5yZXBsYWNlKC9cXFxcKy9nLCh0PT50Lmxlbmd0aCUyPT09MD9cIlxcXFxcXFxcXCI6dD9cIlxcXFxcIjpcIlwiKSl9fWlmKHM9PT10JiZ1LmNvbnRhaW5zPT09dHJ1ZSl7bS5vdXRwdXQ9dDtyZXR1cm4gbX1tLm91dHB1dD1vLndyYXBPdXRwdXQocyxtLGUpO3JldHVybiBtfXdoaWxlKCFlb3MoKSl7Rz1NKCk7aWYoRz09PVwiXFwwXCIpe2NvbnRpbnVlfWlmKEc9PT1cIlxcXFxcIil7Y29uc3QgdD1EKCk7aWYodD09PVwiL1wiJiZ1LmJhc2ghPT10cnVlKXtjb250aW51ZX1pZih0PT09XCIuXCJ8fHQ9PT1cIjtcIil7Y29udGludWV9aWYoIXQpe0crPVwiXFxcXFwiO3B1c2goe3R5cGU6XCJ0ZXh0XCIsdmFsdWU6R30pO2NvbnRpbnVlfWNvbnN0IGU9L15cXFxcKy8uZXhlYyhyZW1haW5pbmcoKSk7bGV0IG49MDtpZihlJiZlWzBdLmxlbmd0aD4yKXtuPWVbMF0ubGVuZ3RoO20uaW5kZXgrPW47aWYobiUyIT09MCl7Rys9XCJcXFxcXCJ9fWlmKHUudW5lc2NhcGU9PT10cnVlKXtHPU0oKX1lbHNle0crPU0oKX1pZihtLmJyYWNrZXRzPT09MCl7cHVzaCh7dHlwZTpcInRleHRcIix2YWx1ZTpHfSk7Y29udGludWV9fWlmKG0uYnJhY2tldHM+MCYmKEchPT1cIl1cInx8Qi52YWx1ZT09PVwiW1wifHxCLnZhbHVlPT09XCJbXlwiKSl7aWYodS5wb3NpeCE9PWZhbHNlJiZHPT09XCI6XCIpe2NvbnN0IHQ9Qi52YWx1ZS5zbGljZSgxKTtpZih0LmluY2x1ZGVzKFwiW1wiKSl7Qi5wb3NpeD10cnVlO2lmKHQuaW5jbHVkZXMoXCI6XCIpKXtjb25zdCB0PUIudmFsdWUubGFzdEluZGV4T2YoXCJbXCIpO2NvbnN0IGU9Qi52YWx1ZS5zbGljZSgwLHQpO2NvbnN0IHU9Qi52YWx1ZS5zbGljZSh0KzIpO2NvbnN0IG49clt1XTtpZihuKXtCLnZhbHVlPWUrbjttLmJhY2t0cmFjaz10cnVlO00oKTtpZighZi5vdXRwdXQmJkEuaW5kZXhPZihCKT09PTEpe2Yub3V0cHV0PUN9Y29udGludWV9fX19aWYoRz09PVwiW1wiJiZEKCkhPT1cIjpcInx8Rz09PVwiLVwiJiZEKCk9PT1cIl1cIil7Rz1gXFxcXCR7R31gfWlmKEc9PT1cIl1cIiYmKEIudmFsdWU9PT1cIltcInx8Qi52YWx1ZT09PVwiW15cIikpe0c9YFxcXFwke0d9YH1pZih1LnBvc2l4PT09dHJ1ZSYmRz09PVwiIVwiJiZCLnZhbHVlPT09XCJbXCIpe0c9XCJeXCJ9Qi52YWx1ZSs9RzthcHBlbmQoe3ZhbHVlOkd9KTtjb250aW51ZX1pZihtLnF1b3Rlcz09PTEmJkchPT0nXCInKXtHPW8uZXNjYXBlUmVnZXgoRyk7Qi52YWx1ZSs9RzthcHBlbmQoe3ZhbHVlOkd9KTtjb250aW51ZX1pZihHPT09J1wiJyl7bS5xdW90ZXM9bS5xdW90ZXM9PT0xPzA6MTtpZih1LmtlZXBRdW90ZXM9PT10cnVlKXtwdXNoKHt0eXBlOlwidGV4dFwiLHZhbHVlOkd9KX1jb250aW51ZX1pZihHPT09XCIoXCIpe2luY3JlbWVudChcInBhcmVuc1wiKTtwdXNoKHt0eXBlOlwicGFyZW5cIix2YWx1ZTpHfSk7Y29udGludWV9aWYoRz09PVwiKVwiKXtpZihtLnBhcmVucz09PTAmJnUuc3RyaWN0QnJhY2tldHM9PT10cnVlKXt0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ludGF4RXJyb3IoXCJvcGVuaW5nXCIsXCIoXCIpKX1jb25zdCB0PXdbdy5sZW5ndGgtMV07aWYodCYmbS5wYXJlbnM9PT10LnBhcmVucysxKXtleHRnbG9iQ2xvc2Uody5wb3AoKSk7Y29udGludWV9cHVzaCh7dHlwZTpcInBhcmVuXCIsdmFsdWU6RyxvdXRwdXQ6bS5wYXJlbnM/XCIpXCI6XCJcXFxcKVwifSk7ZGVjcmVtZW50KFwicGFyZW5zXCIpO2NvbnRpbnVlfWlmKEc9PT1cIltcIil7aWYodS5ub2JyYWNrZXQ9PT10cnVlfHwhcmVtYWluaW5nKCkuaW5jbHVkZXMoXCJdXCIpKXtpZih1Lm5vYnJhY2tldCE9PXRydWUmJnUuc3RyaWN0QnJhY2tldHM9PT10cnVlKXt0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ludGF4RXJyb3IoXCJjbG9zaW5nXCIsXCJdXCIpKX1HPWBcXFxcJHtHfWB9ZWxzZXtpbmNyZW1lbnQoXCJicmFja2V0c1wiKX1wdXNoKHt0eXBlOlwiYnJhY2tldFwiLHZhbHVlOkd9KTtjb250aW51ZX1pZihHPT09XCJdXCIpe2lmKHUubm9icmFja2V0PT09dHJ1ZXx8QiYmQi50eXBlPT09XCJicmFja2V0XCImJkIudmFsdWUubGVuZ3RoPT09MSl7cHVzaCh7dHlwZTpcInRleHRcIix2YWx1ZTpHLG91dHB1dDpgXFxcXCR7R31gfSk7Y29udGludWV9aWYobS5icmFja2V0cz09PTApe2lmKHUuc3RyaWN0QnJhY2tldHM9PT10cnVlKXt0aHJvdyBuZXcgU3ludGF4RXJyb3Ioc3ludGF4RXJyb3IoXCJvcGVuaW5nXCIsXCJbXCIpKX1wdXNoKHt0eXBlOlwidGV4dFwiLHZhbHVlOkcsb3V0cHV0OmBcXFxcJHtHfWB9KTtjb250aW51ZX1kZWNyZW1lbnQoXCJicmFja2V0c1wiKTtjb25zdCB0PUIudmFsdWUuc2xpY2UoMSk7aWYoQi5wb3NpeCE9PXRydWUmJnRbMF09PT1cIl5cIiYmIXQuaW5jbHVkZXMoXCIvXCIpKXtHPWAvJHtHfWB9Qi52YWx1ZSs9RzthcHBlbmQoe3ZhbHVlOkd9KTtpZih1LmxpdGVyYWxCcmFja2V0cz09PWZhbHNlfHxvLmhhc1JlZ2V4Q2hhcnModCkpe2NvbnRpbnVlfWNvbnN0IGU9by5lc2NhcGVSZWdleChCLnZhbHVlKTttLm91dHB1dD1tLm91dHB1dC5zbGljZSgwLC1CLnZhbHVlLmxlbmd0aCk7aWYodS5saXRlcmFsQnJhY2tldHM9PT10cnVlKXttLm91dHB1dCs9ZTtCLnZhbHVlPWU7Y29udGludWV9Qi52YWx1ZT1gKCR7X30ke2V9fCR7Qi52YWx1ZX0pYDttLm91dHB1dCs9Qi52YWx1ZTtjb250aW51ZX1pZihHPT09XCJ7XCImJnUubm9icmFjZSE9PXRydWUpe2luY3JlbWVudChcImJyYWNlc1wiKTtjb25zdCB0PXt0eXBlOlwiYnJhY2VcIix2YWx1ZTpHLG91dHB1dDpcIihcIixvdXRwdXRJbmRleDptLm91dHB1dC5sZW5ndGgsdG9rZW5zSW5kZXg6bS50b2tlbnMubGVuZ3RofTtOLnB1c2godCk7cHVzaCh0KTtjb250aW51ZX1pZihHPT09XCJ9XCIpe2NvbnN0IHQ9TltOLmxlbmd0aC0xXTtpZih1Lm5vYnJhY2U9PT10cnVlfHwhdCl7cHVzaCh7dHlwZTpcInRleHRcIix2YWx1ZTpHLG91dHB1dDpHfSk7Y29udGludWV9bGV0IGU9XCIpXCI7aWYodC5kb3RzPT09dHJ1ZSl7Y29uc3QgdD1BLnNsaWNlKCk7Y29uc3Qgbj1bXTtmb3IobGV0IGU9dC5sZW5ndGgtMTtlPj0wO2UtLSl7QS5wb3AoKTtpZih0W2VdLnR5cGU9PT1cImJyYWNlXCIpe2JyZWFrfWlmKHRbZV0udHlwZSE9PVwiZG90c1wiKXtuLnVuc2hpZnQodFtlXS52YWx1ZSl9fWU9ZXhwYW5kUmFuZ2Uobix1KTttLmJhY2t0cmFjaz10cnVlfWlmKHQuY29tbWEhPT10cnVlJiZ0LmRvdHMhPT10cnVlKXtjb25zdCB1PW0ub3V0cHV0LnNsaWNlKDAsdC5vdXRwdXRJbmRleCk7Y29uc3Qgbj1tLnRva2Vucy5zbGljZSh0LnRva2Vuc0luZGV4KTt0LnZhbHVlPXQub3V0cHV0PVwiXFxcXHtcIjtHPWU9XCJcXFxcfVwiO20ub3V0cHV0PXU7Zm9yKGNvbnN0IHQgb2Ygbil7bS5vdXRwdXQrPXQub3V0cHV0fHx0LnZhbHVlfX1wdXNoKHt0eXBlOlwiYnJhY2VcIix2YWx1ZTpHLG91dHB1dDplfSk7ZGVjcmVtZW50KFwiYnJhY2VzXCIpO04ucG9wKCk7Y29udGludWV9aWYoRz09PVwifFwiKXtpZih3Lmxlbmd0aD4wKXt3W3cubGVuZ3RoLTFdLmNvbmRpdGlvbnMrK31wdXNoKHt0eXBlOlwidGV4dFwiLHZhbHVlOkd9KTtjb250aW51ZX1pZihHPT09XCIsXCIpe2xldCB0PUc7Y29uc3QgZT1OW04ubGVuZ3RoLTFdO2lmKGUmJklbSS5sZW5ndGgtMV09PT1cImJyYWNlc1wiKXtlLmNvbW1hPXRydWU7dD1cInxcIn1wdXNoKHt0eXBlOlwiY29tbWFcIix2YWx1ZTpHLG91dHB1dDp0fSk7Y29udGludWV9aWYoRz09PVwiL1wiKXtpZihCLnR5cGU9PT1cImRvdFwiJiZtLmluZGV4PT09bS5zdGFydCsxKXttLnN0YXJ0PW0uaW5kZXgrMTttLmNvbnN1bWVkPVwiXCI7bS5vdXRwdXQ9XCJcIjtBLnBvcCgpO0I9Zjtjb250aW51ZX1wdXNoKHt0eXBlOlwic2xhc2hcIix2YWx1ZTpHLG91dHB1dDpifSk7Y29udGludWV9aWYoRz09PVwiLlwiKXtpZihtLmJyYWNlcz4wJiZCLnR5cGU9PT1cImRvdFwiKXtpZihCLnZhbHVlPT09XCIuXCIpQi5vdXRwdXQ9aDtjb25zdCB0PU5bTi5sZW5ndGgtMV07Qi50eXBlPVwiZG90c1wiO0Iub3V0cHV0Kz1HO0IudmFsdWUrPUc7dC5kb3RzPXRydWU7Y29udGludWV9aWYobS5icmFjZXMrbS5wYXJlbnM9PT0wJiZCLnR5cGUhPT1cImJvc1wiJiZCLnR5cGUhPT1cInNsYXNoXCIpe3B1c2goe3R5cGU6XCJ0ZXh0XCIsdmFsdWU6RyxvdXRwdXQ6aH0pO2NvbnRpbnVlfXB1c2goe3R5cGU6XCJkb3RcIix2YWx1ZTpHLG91dHB1dDpofSk7Y29udGludWV9aWYoRz09PVwiP1wiKXtjb25zdCB0PUImJkIudmFsdWU9PT1cIihcIjtpZighdCYmdS5ub2V4dGdsb2IhPT10cnVlJiZEKCk9PT1cIihcIiYmRCgyKSE9PVwiP1wiKXtleHRnbG9iT3BlbihcInFtYXJrXCIsRyk7Y29udGludWV9aWYoQiYmQi50eXBlPT09XCJwYXJlblwiKXtjb25zdCB0PUQoKTtsZXQgZT1HO2lmKEIudmFsdWU9PT1cIihcIiYmIS9bIT08Ol0vLnRlc3QodCl8fHQ9PT1cIjxcIiYmIS88KFshPV18XFx3Kz4pLy50ZXN0KHJlbWFpbmluZygpKSl7ZT1gXFxcXCR7R31gfXB1c2goe3R5cGU6XCJ0ZXh0XCIsdmFsdWU6RyxvdXRwdXQ6ZX0pO2NvbnRpbnVlfWlmKHUuZG90IT09dHJ1ZSYmKEIudHlwZT09PVwic2xhc2hcInx8Qi50eXBlPT09XCJib3NcIikpe3B1c2goe3R5cGU6XCJxbWFya1wiLHZhbHVlOkcsb3V0cHV0OnZ9KTtjb250aW51ZX1wdXNoKHt0eXBlOlwicW1hcmtcIix2YWx1ZTpHLG91dHB1dDpIfSk7Y29udGludWV9aWYoRz09PVwiIVwiKXtpZih1Lm5vZXh0Z2xvYiE9PXRydWUmJkQoKT09PVwiKFwiKXtpZihEKDIpIT09XCI/XCJ8fCEvWyE9PDpdLy50ZXN0KEQoMykpKXtleHRnbG9iT3BlbihcIm5lZ2F0ZVwiLEcpO2NvbnRpbnVlfX1pZih1Lm5vbmVnYXRlIT09dHJ1ZSYmbS5pbmRleD09PTApe25lZ2F0ZSgpO2NvbnRpbnVlfX1pZihHPT09XCIrXCIpe2lmKHUubm9leHRnbG9iIT09dHJ1ZSYmRCgpPT09XCIoXCImJkQoMikhPT1cIj9cIil7ZXh0Z2xvYk9wZW4oXCJwbHVzXCIsRyk7Y29udGludWV9aWYoQiYmQi52YWx1ZT09PVwiKFwifHx1LnJlZ2V4PT09ZmFsc2Upe3B1c2goe3R5cGU6XCJwbHVzXCIsdmFsdWU6RyxvdXRwdXQ6Z30pO2NvbnRpbnVlfWlmKEImJihCLnR5cGU9PT1cImJyYWNrZXRcInx8Qi50eXBlPT09XCJwYXJlblwifHxCLnR5cGU9PT1cImJyYWNlXCIpfHxtLnBhcmVucz4wKXtwdXNoKHt0eXBlOlwicGx1c1wiLHZhbHVlOkd9KTtjb250aW51ZX1wdXNoKHt0eXBlOlwicGx1c1wiLHZhbHVlOmd9KTtjb250aW51ZX1pZihHPT09XCJAXCIpe2lmKHUubm9leHRnbG9iIT09dHJ1ZSYmRCgpPT09XCIoXCImJkQoMikhPT1cIj9cIil7cHVzaCh7dHlwZTpcImF0XCIsZXh0Z2xvYjp0cnVlLHZhbHVlOkcsb3V0cHV0OlwiXCJ9KTtjb250aW51ZX1wdXNoKHt0eXBlOlwidGV4dFwiLHZhbHVlOkd9KTtjb250aW51ZX1pZihHIT09XCIqXCIpe2lmKEc9PT1cIiRcInx8Rz09PVwiXlwiKXtHPWBcXFxcJHtHfWB9Y29uc3QgdD1hLmV4ZWMocmVtYWluaW5nKCkpO2lmKHQpe0crPXRbMF07bS5pbmRleCs9dFswXS5sZW5ndGh9cHVzaCh7dHlwZTpcInRleHRcIix2YWx1ZTpHfSk7Y29udGludWV9aWYoQiYmKEIudHlwZT09PVwiZ2xvYnN0YXJcInx8Qi5zdGFyPT09dHJ1ZSkpe0IudHlwZT1cInN0YXJcIjtCLnN0YXI9dHJ1ZTtCLnZhbHVlKz1HO0Iub3V0cHV0PWs7bS5iYWNrdHJhY2s9dHJ1ZTttLmdsb2JzdGFyPXRydWU7Y29uc3VtZShHKTtjb250aW51ZX1sZXQgZT1yZW1haW5pbmcoKTtpZih1Lm5vZXh0Z2xvYiE9PXRydWUmJi9eXFwoW14/XS8udGVzdChlKSl7ZXh0Z2xvYk9wZW4oXCJzdGFyXCIsRyk7Y29udGludWV9aWYoQi50eXBlPT09XCJzdGFyXCIpe2lmKHUubm9nbG9ic3Rhcj09PXRydWUpe2NvbnN1bWUoRyk7Y29udGludWV9Y29uc3Qgbj1CLnByZXY7Y29uc3Qgbz1uLnByZXY7Y29uc3Qgcz1uLnR5cGU9PT1cInNsYXNoXCJ8fG4udHlwZT09PVwiYm9zXCI7Y29uc3Qgcj1vJiYoby50eXBlPT09XCJzdGFyXCJ8fG8udHlwZT09PVwiZ2xvYnN0YXJcIik7aWYodS5iYXNoPT09dHJ1ZSYmKCFzfHxlWzBdJiZlWzBdIT09XCIvXCIpKXtwdXNoKHt0eXBlOlwic3RhclwiLHZhbHVlOkcsb3V0cHV0OlwiXCJ9KTtjb250aW51ZX1jb25zdCBhPW0uYnJhY2VzPjAmJihuLnR5cGU9PT1cImNvbW1hXCJ8fG4udHlwZT09PVwiYnJhY2VcIik7Y29uc3QgaT13Lmxlbmd0aCYmKG4udHlwZT09PVwicGlwZVwifHxuLnR5cGU9PT1cInBhcmVuXCIpO2lmKCFzJiZuLnR5cGUhPT1cInBhcmVuXCImJiFhJiYhaSl7cHVzaCh7dHlwZTpcInN0YXJcIix2YWx1ZTpHLG91dHB1dDpcIlwifSk7Y29udGludWV9d2hpbGUoZS5zbGljZSgwLDMpPT09XCIvKipcIil7Y29uc3QgdT10W20uaW5kZXgrNF07aWYodSYmdSE9PVwiL1wiKXticmVha31lPWUuc2xpY2UoMyk7Y29uc3VtZShcIi8qKlwiLDMpfWlmKG4udHlwZT09PVwiYm9zXCImJmVvcygpKXtCLnR5cGU9XCJnbG9ic3RhclwiO0IudmFsdWUrPUc7Qi5vdXRwdXQ9Z2xvYnN0YXIodSk7bS5vdXRwdXQ9Qi5vdXRwdXQ7bS5nbG9ic3Rhcj10cnVlO2NvbnN1bWUoRyk7Y29udGludWV9aWYobi50eXBlPT09XCJzbGFzaFwiJiZuLnByZXYudHlwZSE9PVwiYm9zXCImJiFyJiZlb3MoKSl7bS5vdXRwdXQ9bS5vdXRwdXQuc2xpY2UoMCwtKG4ub3V0cHV0K0Iub3V0cHV0KS5sZW5ndGgpO24ub3V0cHV0PWAoPzoke24ub3V0cHV0fWA7Qi50eXBlPVwiZ2xvYnN0YXJcIjtCLm91dHB1dD1nbG9ic3Rhcih1KSsodS5zdHJpY3RTbGFzaGVzP1wiKVwiOlwifCQpXCIpO0IudmFsdWUrPUc7bS5nbG9ic3Rhcj10cnVlO20ub3V0cHV0Kz1uLm91dHB1dCtCLm91dHB1dDtjb25zdW1lKEcpO2NvbnRpbnVlfWlmKG4udHlwZT09PVwic2xhc2hcIiYmbi5wcmV2LnR5cGUhPT1cImJvc1wiJiZlWzBdPT09XCIvXCIpe2NvbnN0IHQ9ZVsxXSE9PXZvaWQgMD9cInwkXCI6XCJcIjttLm91dHB1dD1tLm91dHB1dC5zbGljZSgwLC0obi5vdXRwdXQrQi5vdXRwdXQpLmxlbmd0aCk7bi5vdXRwdXQ9YCg/OiR7bi5vdXRwdXR9YDtCLnR5cGU9XCJnbG9ic3RhclwiO0Iub3V0cHV0PWAke2dsb2JzdGFyKHUpfSR7Yn18JHtifSR7dH0pYDtCLnZhbHVlKz1HO20ub3V0cHV0Kz1uLm91dHB1dCtCLm91dHB1dDttLmdsb2JzdGFyPXRydWU7Y29uc3VtZShHK00oKSk7cHVzaCh7dHlwZTpcInNsYXNoXCIsdmFsdWU6XCIvXCIsb3V0cHV0OlwiXCJ9KTtjb250aW51ZX1pZihuLnR5cGU9PT1cImJvc1wiJiZlWzBdPT09XCIvXCIpe0IudHlwZT1cImdsb2JzdGFyXCI7Qi52YWx1ZSs9RztCLm91dHB1dD1gKD86Xnwke2J9fCR7Z2xvYnN0YXIodSl9JHtifSlgO20ub3V0cHV0PUIub3V0cHV0O20uZ2xvYnN0YXI9dHJ1ZTtjb25zdW1lKEcrTSgpKTtwdXNoKHt0eXBlOlwic2xhc2hcIix2YWx1ZTpcIi9cIixvdXRwdXQ6XCJcIn0pO2NvbnRpbnVlfW0ub3V0cHV0PW0ub3V0cHV0LnNsaWNlKDAsLUIub3V0cHV0Lmxlbmd0aCk7Qi50eXBlPVwiZ2xvYnN0YXJcIjtCLm91dHB1dD1nbG9ic3Rhcih1KTtCLnZhbHVlKz1HO20ub3V0cHV0Kz1CLm91dHB1dDttLmdsb2JzdGFyPXRydWU7Y29uc3VtZShHKTtjb250aW51ZX1jb25zdCBuPXt0eXBlOlwic3RhclwiLHZhbHVlOkcsb3V0cHV0Omt9O2lmKHUuYmFzaD09PXRydWUpe24ub3V0cHV0PVwiLio/XCI7aWYoQi50eXBlPT09XCJib3NcInx8Qi50eXBlPT09XCJzbGFzaFwiKXtuLm91dHB1dD1UK24ub3V0cHV0fXB1c2gobik7Y29udGludWV9aWYoQiYmKEIudHlwZT09PVwiYnJhY2tldFwifHxCLnR5cGU9PT1cInBhcmVuXCIpJiZ1LnJlZ2V4PT09dHJ1ZSl7bi5vdXRwdXQ9RztwdXNoKG4pO2NvbnRpbnVlfWlmKG0uaW5kZXg9PT1tLnN0YXJ0fHxCLnR5cGU9PT1cInNsYXNoXCJ8fEIudHlwZT09PVwiZG90XCIpe2lmKEIudHlwZT09PVwiZG90XCIpe20ub3V0cHV0Kz14O0Iub3V0cHV0Kz14fWVsc2UgaWYodS5kb3Q9PT10cnVlKXttLm91dHB1dCs9UztCLm91dHB1dCs9U31lbHNle20ub3V0cHV0Kz1UO0Iub3V0cHV0Kz1UfWlmKEQoKSE9PVwiKlwiKXttLm91dHB1dCs9QztCLm91dHB1dCs9Q319cHVzaChuKX13aGlsZShtLmJyYWNrZXRzPjApe2lmKHUuc3RyaWN0QnJhY2tldHM9PT10cnVlKXRocm93IG5ldyBTeW50YXhFcnJvcihzeW50YXhFcnJvcihcImNsb3NpbmdcIixcIl1cIikpO20ub3V0cHV0PW8uZXNjYXBlTGFzdChtLm91dHB1dCxcIltcIik7ZGVjcmVtZW50KFwiYnJhY2tldHNcIil9d2hpbGUobS5wYXJlbnM+MCl7aWYodS5zdHJpY3RCcmFja2V0cz09PXRydWUpdGhyb3cgbmV3IFN5bnRheEVycm9yKHN5bnRheEVycm9yKFwiY2xvc2luZ1wiLFwiKVwiKSk7bS5vdXRwdXQ9by5lc2NhcGVMYXN0KG0ub3V0cHV0LFwiKFwiKTtkZWNyZW1lbnQoXCJwYXJlbnNcIil9d2hpbGUobS5icmFjZXM+MCl7aWYodS5zdHJpY3RCcmFja2V0cz09PXRydWUpdGhyb3cgbmV3IFN5bnRheEVycm9yKHN5bnRheEVycm9yKFwiY2xvc2luZ1wiLFwifVwiKSk7bS5vdXRwdXQ9by5lc2NhcGVMYXN0KG0ub3V0cHV0LFwie1wiKTtkZWNyZW1lbnQoXCJicmFjZXNcIil9aWYodS5zdHJpY3RTbGFzaGVzIT09dHJ1ZSYmKEIudHlwZT09PVwic3RhclwifHxCLnR5cGU9PT1cImJyYWNrZXRcIikpe3B1c2goe3R5cGU6XCJtYXliZV9zbGFzaFwiLHZhbHVlOlwiXCIsb3V0cHV0OmAke2J9P2B9KX1pZihtLmJhY2t0cmFjaz09PXRydWUpe20ub3V0cHV0PVwiXCI7Zm9yKGNvbnN0IHQgb2YgbS50b2tlbnMpe20ub3V0cHV0Kz10Lm91dHB1dCE9bnVsbD90Lm91dHB1dDp0LnZhbHVlO2lmKHQuc3VmZml4KXttLm91dHB1dCs9dC5zdWZmaXh9fX1yZXR1cm4gbX07cGFyc2UuZmFzdHBhdGhzPSh0LGUpPT57Y29uc3QgdT17Li4uZX07Y29uc3Qgcj10eXBlb2YgdS5tYXhMZW5ndGg9PT1cIm51bWJlclwiP01hdGgubWluKHMsdS5tYXhMZW5ndGgpOnM7Y29uc3QgYT10Lmxlbmd0aDtpZihhPnIpe3Rocm93IG5ldyBTeW50YXhFcnJvcihgSW5wdXQgbGVuZ3RoOiAke2F9LCBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBsZW5ndGg6ICR7cn1gKX10PWNbdF18fHQ7Y29uc3R7RE9UX0xJVEVSQUw6aSxTTEFTSF9MSVRFUkFMOnAsT05FX0NIQVI6bCxET1RTX1NMQVNIOmYsTk9fRE9UOkEsTk9fRE9UUzpfLE5PX0RPVFNfU0xBU0g6UixTVEFSOkUsU1RBUlRfQU5DSE9SOmh9PW4uZ2xvYkNoYXJzKHUud2luZG93cyk7Y29uc3QgZz11LmRvdD9fOkE7Y29uc3QgYj11LmRvdD9SOkE7Y29uc3QgQz11LmNhcHR1cmU/XCJcIjpcIj86XCI7Y29uc3QgeT17bmVnYXRlZDpmYWxzZSxwcmVmaXg6XCJcIn07bGV0ICQ9dS5iYXNoPT09dHJ1ZT9cIi4qP1wiOkU7aWYodS5jYXB0dXJlKXskPWAoJHskfSlgfWNvbnN0IGdsb2JzdGFyPXQ9PntpZih0Lm5vZ2xvYnN0YXI9PT10cnVlKXJldHVybiAkO3JldHVybmAoJHtDfSg/Oig/ISR7aH0ke3QuZG90P2Y6aX0pLikqPylgfTtjb25zdCBjcmVhdGU9dD0+e3N3aXRjaCh0KXtjYXNlXCIqXCI6cmV0dXJuYCR7Z30ke2x9JHskfWA7Y2FzZVwiLipcIjpyZXR1cm5gJHtpfSR7bH0keyR9YDtjYXNlXCIqLipcIjpyZXR1cm5gJHtnfSR7JH0ke2l9JHtsfSR7JH1gO2Nhc2VcIiovKlwiOnJldHVybmAke2d9JHskfSR7cH0ke2x9JHtifSR7JH1gO2Nhc2VcIioqXCI6cmV0dXJuIGcrZ2xvYnN0YXIodSk7Y2FzZVwiKiovKlwiOnJldHVybmAoPzoke2d9JHtnbG9ic3Rhcih1KX0ke3B9KT8ke2J9JHtsfSR7JH1gO2Nhc2VcIioqLyouKlwiOnJldHVybmAoPzoke2d9JHtnbG9ic3Rhcih1KX0ke3B9KT8ke2J9JHskfSR7aX0ke2x9JHskfWA7Y2FzZVwiKiovLipcIjpyZXR1cm5gKD86JHtnfSR7Z2xvYnN0YXIodSl9JHtwfSk/JHtpfSR7bH0keyR9YDtkZWZhdWx0Ontjb25zdCBlPS9eKC4qPylcXC4oXFx3KykkLy5leGVjKHQpO2lmKCFlKXJldHVybjtjb25zdCB1PWNyZWF0ZShlWzFdKTtpZighdSlyZXR1cm47cmV0dXJuIHUraStlWzJdfX19O2NvbnN0IHg9by5yZW1vdmVQcmVmaXgodCx5KTtsZXQgUz1jcmVhdGUoeCk7aWYoUyYmdS5zdHJpY3RTbGFzaGVzIT09dHJ1ZSl7Uys9YCR7cH0/YH1yZXR1cm4gU307dC5leHBvcnRzPXBhcnNlfSw1MTA6KHQsZSx1KT0+e2NvbnN0IG49dSg3MTYpO2NvbnN0IG89dSg2OTcpO2NvbnN0IHM9dSg5Nik7Y29uc3Qgcj11KDE1NCk7Y29uc3QgaXNPYmplY3Q9dD0+dCYmdHlwZW9mIHQ9PT1cIm9iamVjdFwiJiYhQXJyYXkuaXNBcnJheSh0KTtjb25zdCBwaWNvbWF0Y2g9KHQsZSx1PWZhbHNlKT0+e2lmKEFycmF5LmlzQXJyYXkodCkpe2NvbnN0IG49dC5tYXAoKHQ9PnBpY29tYXRjaCh0LGUsdSkpKTtjb25zdCBhcnJheU1hdGNoZXI9dD0+e2Zvcihjb25zdCBlIG9mIG4pe2NvbnN0IHU9ZSh0KTtpZih1KXJldHVybiB1fXJldHVybiBmYWxzZX07cmV0dXJuIGFycmF5TWF0Y2hlcn1jb25zdCBuPWlzT2JqZWN0KHQpJiZ0LnRva2VucyYmdC5pbnB1dDtpZih0PT09XCJcInx8dHlwZW9mIHQhPT1cInN0cmluZ1wiJiYhbil7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIHBhdHRlcm4gdG8gYmUgYSBub24tZW1wdHkgc3RyaW5nXCIpfWNvbnN0IG89ZXx8e307Y29uc3Qgcz1vLndpbmRvd3M7Y29uc3Qgcj1uP3BpY29tYXRjaC5jb21waWxlUmUodCxlKTpwaWNvbWF0Y2gubWFrZVJlKHQsZSxmYWxzZSx0cnVlKTtjb25zdCBhPXIuc3RhdGU7ZGVsZXRlIHIuc3RhdGU7bGV0IGlzSWdub3JlZD0oKT0+ZmFsc2U7aWYoby5pZ25vcmUpe2NvbnN0IHQ9ey4uLmUsaWdub3JlOm51bGwsb25NYXRjaDpudWxsLG9uUmVzdWx0Om51bGx9O2lzSWdub3JlZD1waWNvbWF0Y2goby5pZ25vcmUsdCx1KX1jb25zdCBtYXRjaGVyPSh1LG49ZmFsc2UpPT57Y29uc3R7aXNNYXRjaDppLG1hdGNoOmMsb3V0cHV0OnB9PXBpY29tYXRjaC50ZXN0KHUscixlLHtnbG9iOnQscG9zaXg6c30pO2NvbnN0IGw9e2dsb2I6dCxzdGF0ZTphLHJlZ2V4OnIscG9zaXg6cyxpbnB1dDp1LG91dHB1dDpwLG1hdGNoOmMsaXNNYXRjaDppfTtpZih0eXBlb2Ygby5vblJlc3VsdD09PVwiZnVuY3Rpb25cIil7by5vblJlc3VsdChsKX1pZihpPT09ZmFsc2Upe2wuaXNNYXRjaD1mYWxzZTtyZXR1cm4gbj9sOmZhbHNlfWlmKGlzSWdub3JlZCh1KSl7aWYodHlwZW9mIG8ub25JZ25vcmU9PT1cImZ1bmN0aW9uXCIpe28ub25JZ25vcmUobCl9bC5pc01hdGNoPWZhbHNlO3JldHVybiBuP2w6ZmFsc2V9aWYodHlwZW9mIG8ub25NYXRjaD09PVwiZnVuY3Rpb25cIil7by5vbk1hdGNoKGwpfXJldHVybiBuP2w6dHJ1ZX07aWYodSl7bWF0Y2hlci5zdGF0ZT1hfXJldHVybiBtYXRjaGVyfTtwaWNvbWF0Y2gudGVzdD0odCxlLHUse2dsb2I6bixwb3NpeDpvfT17fSk9PntpZih0eXBlb2YgdCE9PVwic3RyaW5nXCIpe3Rocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCBpbnB1dCB0byBiZSBhIHN0cmluZ1wiKX1pZih0PT09XCJcIil7cmV0dXJue2lzTWF0Y2g6ZmFsc2Usb3V0cHV0OlwiXCJ9fWNvbnN0IHI9dXx8e307Y29uc3QgYT1yLmZvcm1hdHx8KG8/cy50b1Bvc2l4U2xhc2hlczpudWxsKTtsZXQgaT10PT09bjtsZXQgYz1pJiZhP2EodCk6dDtpZihpPT09ZmFsc2Upe2M9YT9hKHQpOnQ7aT1jPT09bn1pZihpPT09ZmFsc2V8fHIuY2FwdHVyZT09PXRydWUpe2lmKHIubWF0Y2hCYXNlPT09dHJ1ZXx8ci5iYXNlbmFtZT09PXRydWUpe2k9cGljb21hdGNoLm1hdGNoQmFzZSh0LGUsdSxvKX1lbHNle2k9ZS5leGVjKGMpfX1yZXR1cm57aXNNYXRjaDpCb29sZWFuKGkpLG1hdGNoOmksb3V0cHV0OmN9fTtwaWNvbWF0Y2gubWF0Y2hCYXNlPSh0LGUsdSk9Pntjb25zdCBuPWUgaW5zdGFuY2VvZiBSZWdFeHA/ZTpwaWNvbWF0Y2gubWFrZVJlKGUsdSk7cmV0dXJuIG4udGVzdChzLmJhc2VuYW1lKHQpKX07cGljb21hdGNoLmlzTWF0Y2g9KHQsZSx1KT0+cGljb21hdGNoKGUsdSkodCk7cGljb21hdGNoLnBhcnNlPSh0LGUpPT57aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5tYXAoKHQ9PnBpY29tYXRjaC5wYXJzZSh0LGUpKSk7cmV0dXJuIG8odCx7Li4uZSxmYXN0cGF0aHM6ZmFsc2V9KX07cGljb21hdGNoLnNjYW49KHQsZSk9Pm4odCxlKTtwaWNvbWF0Y2guY29tcGlsZVJlPSh0LGUsdT1mYWxzZSxuPWZhbHNlKT0+e2lmKHU9PT10cnVlKXtyZXR1cm4gdC5vdXRwdXR9Y29uc3Qgbz1lfHx7fTtjb25zdCBzPW8uY29udGFpbnM/XCJcIjpcIl5cIjtjb25zdCByPW8uY29udGFpbnM/XCJcIjpcIiRcIjtsZXQgYT1gJHtzfSg/OiR7dC5vdXRwdXR9KSR7cn1gO2lmKHQmJnQubmVnYXRlZD09PXRydWUpe2E9YF4oPyEke2F9KS4qJGB9Y29uc3QgaT1waWNvbWF0Y2gudG9SZWdleChhLGUpO2lmKG49PT10cnVlKXtpLnN0YXRlPXR9cmV0dXJuIGl9O3BpY29tYXRjaC5tYWtlUmU9KHQsZT17fSx1PWZhbHNlLG49ZmFsc2UpPT57aWYoIXR8fHR5cGVvZiB0IT09XCJzdHJpbmdcIil7dGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGEgbm9uLWVtcHR5IHN0cmluZ1wiKX1sZXQgcz17bmVnYXRlZDpmYWxzZSxmYXN0cGF0aHM6dHJ1ZX07aWYoZS5mYXN0cGF0aHMhPT1mYWxzZSYmKHRbMF09PT1cIi5cInx8dFswXT09PVwiKlwiKSl7cy5vdXRwdXQ9by5mYXN0cGF0aHModCxlKX1pZighcy5vdXRwdXQpe3M9byh0LGUpfXJldHVybiBwaWNvbWF0Y2guY29tcGlsZVJlKHMsZSx1LG4pfTtwaWNvbWF0Y2gudG9SZWdleD0odCxlKT0+e3RyeXtjb25zdCB1PWV8fHt9O3JldHVybiBuZXcgUmVnRXhwKHQsdS5mbGFnc3x8KHUubm9jYXNlP1wiaVwiOlwiXCIpKX1jYXRjaCh0KXtpZihlJiZlLmRlYnVnPT09dHJ1ZSl0aHJvdyB0O3JldHVybi8kXi99fTtwaWNvbWF0Y2guY29uc3RhbnRzPXI7dC5leHBvcnRzPXBpY29tYXRjaH0sNzE2Oih0LGUsdSk9Pntjb25zdCBuPXUoOTYpO2NvbnN0e0NIQVJfQVNURVJJU0s6byxDSEFSX0FUOnMsQ0hBUl9CQUNLV0FSRF9TTEFTSDpyLENIQVJfQ09NTUE6YSxDSEFSX0RPVDppLENIQVJfRVhDTEFNQVRJT05fTUFSSzpjLENIQVJfRk9SV0FSRF9TTEFTSDpwLENIQVJfTEVGVF9DVVJMWV9CUkFDRTpsLENIQVJfTEVGVF9QQVJFTlRIRVNFUzpmLENIQVJfTEVGVF9TUVVBUkVfQlJBQ0tFVDpBLENIQVJfUExVUzpfLENIQVJfUVVFU1RJT05fTUFSSzpSLENIQVJfUklHSFRfQ1VSTFlfQlJBQ0U6RSxDSEFSX1JJR0hUX1BBUkVOVEhFU0VTOmgsQ0hBUl9SSUdIVF9TUVVBUkVfQlJBQ0tFVDpnfT11KDE1NCk7Y29uc3QgaXNQYXRoU2VwYXJhdG9yPXQ9PnQ9PT1wfHx0PT09cjtjb25zdCBkZXB0aD10PT57aWYodC5pc1ByZWZpeCE9PXRydWUpe3QuZGVwdGg9dC5pc0dsb2JzdGFyP0luZmluaXR5OjF9fTtjb25zdCBzY2FuPSh0LGUpPT57Y29uc3QgdT1lfHx7fTtjb25zdCBiPXQubGVuZ3RoLTE7Y29uc3QgQz11LnBhcnRzPT09dHJ1ZXx8dS5zY2FuVG9FbmQ9PT10cnVlO2NvbnN0IHk9W107Y29uc3QgJD1bXTtjb25zdCB4PVtdO2xldCBTPXQ7bGV0IEg9LTE7bGV0IHY9MDtsZXQgZD0wO2xldCBMPWZhbHNlO2xldCBUPWZhbHNlO2xldCBPPWZhbHNlO2xldCBrPWZhbHNlO2xldCBtPWZhbHNlO2xldCB3PWZhbHNlO2xldCBOPWZhbHNlO2xldCBJPWZhbHNlO2xldCBCPWZhbHNlO2xldCBHPWZhbHNlO2xldCBEPTA7bGV0IE07bGV0IFA7bGV0IEs9e3ZhbHVlOlwiXCIsZGVwdGg6MCxpc0dsb2I6ZmFsc2V9O2NvbnN0IGVvcz0oKT0+SD49Yjtjb25zdCBwZWVrPSgpPT5TLmNoYXJDb2RlQXQoSCsxKTtjb25zdCBhZHZhbmNlPSgpPT57TT1QO3JldHVybiBTLmNoYXJDb2RlQXQoKytIKX07d2hpbGUoSDxiKXtQPWFkdmFuY2UoKTtsZXQgdDtpZihQPT09cil7Tj1LLmJhY2tzbGFzaGVzPXRydWU7UD1hZHZhbmNlKCk7aWYoUD09PWwpe3c9dHJ1ZX1jb250aW51ZX1pZih3PT09dHJ1ZXx8UD09PWwpe0QrKzt3aGlsZShlb3MoKSE9PXRydWUmJihQPWFkdmFuY2UoKSkpe2lmKFA9PT1yKXtOPUsuYmFja3NsYXNoZXM9dHJ1ZTthZHZhbmNlKCk7Y29udGludWV9aWYoUD09PWwpe0QrKztjb250aW51ZX1pZih3IT09dHJ1ZSYmUD09PWkmJihQPWFkdmFuY2UoKSk9PT1pKXtMPUsuaXNCcmFjZT10cnVlO089Sy5pc0dsb2I9dHJ1ZTtHPXRydWU7aWYoQz09PXRydWUpe2NvbnRpbnVlfWJyZWFrfWlmKHchPT10cnVlJiZQPT09YSl7TD1LLmlzQnJhY2U9dHJ1ZTtPPUsuaXNHbG9iPXRydWU7Rz10cnVlO2lmKEM9PT10cnVlKXtjb250aW51ZX1icmVha31pZihQPT09RSl7RC0tO2lmKEQ9PT0wKXt3PWZhbHNlO0w9Sy5pc0JyYWNlPXRydWU7Rz10cnVlO2JyZWFrfX19aWYoQz09PXRydWUpe2NvbnRpbnVlfWJyZWFrfWlmKFA9PT1wKXt5LnB1c2goSCk7JC5wdXNoKEspO0s9e3ZhbHVlOlwiXCIsZGVwdGg6MCxpc0dsb2I6ZmFsc2V9O2lmKEc9PT10cnVlKWNvbnRpbnVlO2lmKE09PT1pJiZIPT09disxKXt2Kz0yO2NvbnRpbnVlfWQ9SCsxO2NvbnRpbnVlfWlmKHUubm9leHQhPT10cnVlKXtjb25zdCB0PVA9PT1ffHxQPT09c3x8UD09PW98fFA9PT1SfHxQPT09YztpZih0PT09dHJ1ZSYmcGVlaygpPT09Zil7Tz1LLmlzR2xvYj10cnVlO2s9Sy5pc0V4dGdsb2I9dHJ1ZTtHPXRydWU7aWYoUD09PWMmJkg9PT12KXtCPXRydWV9aWYoQz09PXRydWUpe3doaWxlKGVvcygpIT09dHJ1ZSYmKFA9YWR2YW5jZSgpKSl7aWYoUD09PXIpe049Sy5iYWNrc2xhc2hlcz10cnVlO1A9YWR2YW5jZSgpO2NvbnRpbnVlfWlmKFA9PT1oKXtPPUsuaXNHbG9iPXRydWU7Rz10cnVlO2JyZWFrfX1jb250aW51ZX1icmVha319aWYoUD09PW8pe2lmKE09PT1vKW09Sy5pc0dsb2JzdGFyPXRydWU7Tz1LLmlzR2xvYj10cnVlO0c9dHJ1ZTtpZihDPT09dHJ1ZSl7Y29udGludWV9YnJlYWt9aWYoUD09PVIpe089Sy5pc0dsb2I9dHJ1ZTtHPXRydWU7aWYoQz09PXRydWUpe2NvbnRpbnVlfWJyZWFrfWlmKFA9PT1BKXt3aGlsZShlb3MoKSE9PXRydWUmJih0PWFkdmFuY2UoKSkpe2lmKHQ9PT1yKXtOPUsuYmFja3NsYXNoZXM9dHJ1ZTthZHZhbmNlKCk7Y29udGludWV9aWYodD09PWcpe1Q9Sy5pc0JyYWNrZXQ9dHJ1ZTtPPUsuaXNHbG9iPXRydWU7Rz10cnVlO2JyZWFrfX1pZihDPT09dHJ1ZSl7Y29udGludWV9YnJlYWt9aWYodS5ub25lZ2F0ZSE9PXRydWUmJlA9PT1jJiZIPT09dil7ST1LLm5lZ2F0ZWQ9dHJ1ZTt2Kys7Y29udGludWV9aWYodS5ub3BhcmVuIT09dHJ1ZSYmUD09PWYpe089Sy5pc0dsb2I9dHJ1ZTtpZihDPT09dHJ1ZSl7d2hpbGUoZW9zKCkhPT10cnVlJiYoUD1hZHZhbmNlKCkpKXtpZihQPT09Zil7Tj1LLmJhY2tzbGFzaGVzPXRydWU7UD1hZHZhbmNlKCk7Y29udGludWV9aWYoUD09PWgpe0c9dHJ1ZTticmVha319Y29udGludWV9YnJlYWt9aWYoTz09PXRydWUpe0c9dHJ1ZTtpZihDPT09dHJ1ZSl7Y29udGludWV9YnJlYWt9fWlmKHUubm9leHQ9PT10cnVlKXtrPWZhbHNlO089ZmFsc2V9bGV0IFU9UztsZXQgWD1cIlwiO2xldCBGPVwiXCI7aWYodj4wKXtYPVMuc2xpY2UoMCx2KTtTPVMuc2xpY2Uodik7ZC09dn1pZihVJiZPPT09dHJ1ZSYmZD4wKXtVPVMuc2xpY2UoMCxkKTtGPVMuc2xpY2UoZCl9ZWxzZSBpZihPPT09dHJ1ZSl7VT1cIlwiO0Y9U31lbHNle1U9U31pZihVJiZVIT09XCJcIiYmVSE9PVwiL1wiJiZVIT09Uyl7aWYoaXNQYXRoU2VwYXJhdG9yKFUuY2hhckNvZGVBdChVLmxlbmd0aC0xKSkpe1U9VS5zbGljZSgwLC0xKX19aWYodS51bmVzY2FwZT09PXRydWUpe2lmKEYpRj1uLnJlbW92ZUJhY2tzbGFzaGVzKEYpO2lmKFUmJk49PT10cnVlKXtVPW4ucmVtb3ZlQmFja3NsYXNoZXMoVSl9fWNvbnN0IFE9e3ByZWZpeDpYLGlucHV0OnQsc3RhcnQ6dixiYXNlOlUsZ2xvYjpGLGlzQnJhY2U6TCxpc0JyYWNrZXQ6VCxpc0dsb2I6Tyxpc0V4dGdsb2I6ayxpc0dsb2JzdGFyOm0sbmVnYXRlZDpJLG5lZ2F0ZWRFeHRnbG9iOkJ9O2lmKHUudG9rZW5zPT09dHJ1ZSl7US5tYXhEZXB0aD0wO2lmKCFpc1BhdGhTZXBhcmF0b3IoUCkpeyQucHVzaChLKX1RLnRva2Vucz0kfWlmKHUucGFydHM9PT10cnVlfHx1LnRva2Vucz09PXRydWUpe2xldCBlO2ZvcihsZXQgbj0wO248eS5sZW5ndGg7bisrKXtjb25zdCBvPWU/ZSsxOnY7Y29uc3Qgcz15W25dO2NvbnN0IHI9dC5zbGljZShvLHMpO2lmKHUudG9rZW5zKXtpZihuPT09MCYmdiE9PTApeyRbbl0uaXNQcmVmaXg9dHJ1ZTskW25dLnZhbHVlPVh9ZWxzZXskW25dLnZhbHVlPXJ9ZGVwdGgoJFtuXSk7US5tYXhEZXB0aCs9JFtuXS5kZXB0aH1pZihuIT09MHx8ciE9PVwiXCIpe3gucHVzaChyKX1lPXN9aWYoZSYmZSsxPHQubGVuZ3RoKXtjb25zdCBuPXQuc2xpY2UoZSsxKTt4LnB1c2gobik7aWYodS50b2tlbnMpeyRbJC5sZW5ndGgtMV0udmFsdWU9bjtkZXB0aCgkWyQubGVuZ3RoLTFdKTtRLm1heERlcHRoKz0kWyQubGVuZ3RoLTFdLmRlcHRofX1RLnNsYXNoZXM9eTtRLnBhcnRzPXh9cmV0dXJuIFF9O3QuZXhwb3J0cz1zY2FufSw5NjoodCxlLHUpPT57Y29uc3R7UkVHRVhfQkFDS1NMQVNIOm4sUkVHRVhfUkVNT1ZFX0JBQ0tTTEFTSDpvLFJFR0VYX1NQRUNJQUxfQ0hBUlM6cyxSRUdFWF9TUEVDSUFMX0NIQVJTX0dMT0JBTDpyfT11KDE1NCk7ZS5pc09iamVjdD10PT50IT09bnVsbCYmdHlwZW9mIHQ9PT1cIm9iamVjdFwiJiYhQXJyYXkuaXNBcnJheSh0KTtlLmhhc1JlZ2V4Q2hhcnM9dD0+cy50ZXN0KHQpO2UuaXNSZWdleENoYXI9dD0+dC5sZW5ndGg9PT0xJiZlLmhhc1JlZ2V4Q2hhcnModCk7ZS5lc2NhcGVSZWdleD10PT50LnJlcGxhY2UocixcIlxcXFwkMVwiKTtlLnRvUG9zaXhTbGFzaGVzPXQ9PnQucmVwbGFjZShuLFwiL1wiKTtlLnJlbW92ZUJhY2tzbGFzaGVzPXQ9PnQucmVwbGFjZShvLCh0PT50PT09XCJcXFxcXCI/XCJcIjp0KSk7ZS5lc2NhcGVMYXN0PSh0LHUsbik9Pntjb25zdCBvPXQubGFzdEluZGV4T2YodSxuKTtpZihvPT09LTEpcmV0dXJuIHQ7aWYodFtvLTFdPT09XCJcXFxcXCIpcmV0dXJuIGUuZXNjYXBlTGFzdCh0LHUsby0xKTtyZXR1cm5gJHt0LnNsaWNlKDAsbyl9XFxcXCR7dC5zbGljZShvKX1gfTtlLnJlbW92ZVByZWZpeD0odCxlPXt9KT0+e2xldCB1PXQ7aWYodS5zdGFydHNXaXRoKFwiLi9cIikpe3U9dS5zbGljZSgyKTtlLnByZWZpeD1cIi4vXCJ9cmV0dXJuIHV9O2Uud3JhcE91dHB1dD0odCxlPXt9LHU9e30pPT57Y29uc3Qgbj11LmNvbnRhaW5zP1wiXCI6XCJeXCI7Y29uc3Qgbz11LmNvbnRhaW5zP1wiXCI6XCIkXCI7bGV0IHM9YCR7bn0oPzoke3R9KSR7b31gO2lmKGUubmVnYXRlZD09PXRydWUpe3M9YCg/Ol4oPyEke3N9KS4qJClgfXJldHVybiBzfTtlLmJhc2VuYW1lPSh0LHt3aW5kb3dzOmV9PXt9KT0+e2NvbnN0IHU9dC5zcGxpdChlPy9bXFxcXC9dLzpcIi9cIik7Y29uc3Qgbj11W3UubGVuZ3RoLTFdO2lmKG49PT1cIlwiKXtyZXR1cm4gdVt1Lmxlbmd0aC0yXX1yZXR1cm4gbn19fTt2YXIgZT17fTtmdW5jdGlvbiBfX25jY3dwY2tfcmVxdWlyZV9fKHUpe3ZhciBuPWVbdV07aWYobiE9PXVuZGVmaW5lZCl7cmV0dXJuIG4uZXhwb3J0c312YXIgbz1lW3VdPXtleHBvcnRzOnt9fTt2YXIgcz10cnVlO3RyeXt0W3VdKG8sby5leHBvcnRzLF9fbmNjd3Bja19yZXF1aXJlX18pO3M9ZmFsc2V9ZmluYWxseXtpZihzKWRlbGV0ZSBlW3VdfXJldHVybiBvLmV4cG9ydHN9aWYodHlwZW9mIF9fbmNjd3Bja19yZXF1aXJlX18hPT1cInVuZGVmaW5lZFwiKV9fbmNjd3Bja19yZXF1aXJlX18uYWI9X19kaXJuYW1lK1wiL1wiO3ZhciB1PV9fbmNjd3Bja19yZXF1aXJlX18oMTcwKTttb2R1bGUuZXhwb3J0cz11fSkoKTsiXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/picomatch/index.js\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 ***!
|
||
\****************************************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * react-jsx-dev-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return type.displayName || \"Context\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%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://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(type, key, props, owner, debugStack, debugTask) {\n var refProp = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== refProp ? refProp : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n maybeKey,\n getOwner(),\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = __webpack_require__(/*! next/dist/compiled/react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n react_stack_bottom_frame: function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React.react_stack_bottom_frame.bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsxDEV = function (type, config, maybeKey, isStaticChildren) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvY2pzL3JlYWN0LWpzeC1kZXYtcnVudGltZS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixLQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGNBQWM7QUFDZDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCwrQ0FBK0MsNkJBQTZCO0FBQzVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxnQkFBZ0IsZ0RBQWdEO0FBQ2hFLGdCQUFnQixhQUFhO0FBQzdCO0FBQ0E7QUFDQSxnQ0FBZ0Msa0NBQWtDLE9BQU87QUFDekU7QUFDQSxnR0FBZ0csU0FBUyxVQUFVLHNGQUFzRixhQUFhLFVBQVUsVUFBVTtBQUMxTztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsc0dBQTBCO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksZ0JBQWdCO0FBQ3BCLElBQUksY0FBYztBQUNsQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUciLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0L2Nqcy9yZWFjdC1qc3gtZGV2LXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogcmVhY3QtanN4LWRldi1ydW50aW1lLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKSB7XG4gICAgICBpZiAobnVsbCA9PSB0eXBlKSByZXR1cm4gbnVsbDtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICByZXR1cm4gdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRVxuICAgICAgICAgID8gbnVsbFxuICAgICAgICAgIDogdHlwZS5kaXNwbGF5TmFtZSB8fCB0eXBlLm5hbWUgfHwgbnVsbDtcbiAgICAgIGlmIChcInN0cmluZ1wiID09PSB0eXBlb2YgdHlwZSkgcmV0dXJuIHR5cGU7XG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBSRUFDVF9GUkFHTUVOVF9UWVBFOlxuICAgICAgICAgIHJldHVybiBcIkZyYWdtZW50XCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfUFJPRklMRVJfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJQcm9maWxlclwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NUUklDVF9NT0RFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3RyaWN0TW9kZVwiO1xuICAgICAgICBjYXNlIFJFQUNUX1NVU1BFTlNFX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VcIjtcbiAgICAgICAgY2FzZSBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEU6XG4gICAgICAgICAgcmV0dXJuIFwiU3VzcGVuc2VMaXN0XCI7XG4gICAgICAgIGNhc2UgUkVBQ1RfQUNUSVZJVFlfVFlQRTpcbiAgICAgICAgICByZXR1cm4gXCJBY3Rpdml0eVwiO1xuICAgICAgfVxuICAgICAgaWYgKFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlKVxuICAgICAgICBzd2l0Y2ggKFxuICAgICAgICAgIChcIm51bWJlclwiID09PSB0eXBlb2YgdHlwZS50YWcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIFwiUmVjZWl2ZWQgYW4gdW5leHBlY3RlZCBvYmplY3QgaW4gZ2V0Q29tcG9uZW50TmFtZUZyb21UeXBlKCkuIFRoaXMgaXMgbGlrZWx5IGEgYnVnIGluIFJlYWN0LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIlxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB0eXBlLiQkdHlwZW9mKVxuICAgICAgICApIHtcbiAgICAgICAgICBjYXNlIFJFQUNUX1BPUlRBTF9UWVBFOlxuICAgICAgICAgICAgcmV0dXJuIFwiUG9ydGFsXCI7XG4gICAgICAgICAgY2FzZSBSRUFDVF9DT05URVhUX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gdHlwZS5kaXNwbGF5TmFtZSB8fCBcIkNvbnRleHRcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0NPTlNVTUVSX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKHR5cGUuX2NvbnRleHQuZGlzcGxheU5hbWUgfHwgXCJDb250ZXh0XCIpICsgXCIuQ29uc3VtZXJcIjtcbiAgICAgICAgICBjYXNlIFJFQUNUX0ZPUldBUkRfUkVGX1RZUEU6XG4gICAgICAgICAgICB2YXIgaW5uZXJUeXBlID0gdHlwZS5yZW5kZXI7XG4gICAgICAgICAgICB0eXBlID0gdHlwZS5kaXNwbGF5TmFtZTtcbiAgICAgICAgICAgIHR5cGUgfHxcbiAgICAgICAgICAgICAgKCh0eXBlID0gaW5uZXJUeXBlLmRpc3BsYXlOYW1lIHx8IGlubmVyVHlwZS5uYW1lIHx8IFwiXCIpLFxuICAgICAgICAgICAgICAodHlwZSA9IFwiXCIgIT09IHR5cGUgPyBcIkZvcndhcmRSZWYoXCIgKyB0eXBlICsgXCIpXCIgOiBcIkZvcndhcmRSZWZcIikpO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAoaW5uZXJUeXBlID0gdHlwZS5kaXNwbGF5TmFtZSB8fCBudWxsKSxcbiAgICAgICAgICAgICAgbnVsbCAhPT0gaW5uZXJUeXBlXG4gICAgICAgICAgICAgICAgPyBpbm5lclR5cGVcbiAgICAgICAgICAgICAgICA6IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlLnR5cGUpIHx8IFwiTWVtb1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIGNhc2UgUkVBQ1RfTEFaWV9UWVBFOlxuICAgICAgICAgICAgaW5uZXJUeXBlID0gdHlwZS5fcGF5bG9hZDtcbiAgICAgICAgICAgIHR5cGUgPSB0eXBlLl9pbml0O1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKGlubmVyVHlwZSkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoeCkge31cbiAgICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRlc3RTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgcmV0dXJuIFwiXCIgKyB2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tLZXlTdHJpbmdDb2VyY2lvbih2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCA9ICExO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQgPSAhMDtcbiAgICAgIH1cbiAgICAgIGlmIChKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQpIHtcbiAgICAgICAgSlNDb21waWxlcl9pbmxpbmVfcmVzdWx0ID0gY29uc29sZTtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfdGVtcF9jb25zdCA9IEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdC5lcnJvcjtcbiAgICAgICAgdmFyIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMCA9XG4gICAgICAgICAgKFwiZnVuY3Rpb25cIiA9PT0gdHlwZW9mIFN5bWJvbCAmJlxuICAgICAgICAgICAgU3ltYm9sLnRvU3RyaW5nVGFnICYmXG4gICAgICAgICAgICB2YWx1ZVtTeW1ib2wudG9TdHJpbmdUYWddKSB8fFxuICAgICAgICAgIHZhbHVlLmNvbnN0cnVjdG9yLm5hbWUgfHxcbiAgICAgICAgICBcIk9iamVjdFwiO1xuICAgICAgICBKU0NvbXBpbGVyX3RlbXBfY29uc3QuY2FsbChcbiAgICAgICAgICBKU0NvbXBpbGVyX2lubGluZV9yZXN1bHQsXG4gICAgICAgICAgXCJUaGUgcHJvdmlkZWQga2V5IGlzIGFuIHVuc3VwcG9ydGVkIHR5cGUgJXMuIFRoaXMgdmFsdWUgbXVzdCBiZSBjb2VyY2VkIHRvIGEgc3RyaW5nIGJlZm9yZSB1c2luZyBpdCBoZXJlLlwiLFxuICAgICAgICAgIEpTQ29tcGlsZXJfaW5saW5lX3Jlc3VsdCRqc2NvbXAkMFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGVzdFN0cmluZ0NvZXJjaW9uKHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VGFza05hbWUodHlwZSkge1xuICAgICAgaWYgKHR5cGUgPT09IFJFQUNUX0ZSQUdNRU5UX1RZUEUpIHJldHVybiBcIjw+XCI7XG4gICAgICBpZiAoXG4gICAgICAgIFwib2JqZWN0XCIgPT09IHR5cGVvZiB0eXBlICYmXG4gICAgICAgIG51bGwgIT09IHR5cGUgJiZcbiAgICAgICAgdHlwZS4kJHR5cGVvZiA9PT0gUkVBQ1RfTEFaWV9UWVBFXG4gICAgICApXG4gICAgICAgIHJldHVybiBcIjwuLi4+XCI7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbmFtZSA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcbiAgICAgICAgcmV0dXJuIG5hbWUgPyBcIjxcIiArIG5hbWUgKyBcIj5cIiA6IFwiPC4uLj5cIjtcbiAgICAgIH0gY2F0Y2ggKHgpIHtcbiAgICAgICAgcmV0dXJuIFwiPC4uLj5cIjtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0T3duZXIoKSB7XG4gICAgICB2YXIgZGlzcGF0Y2hlciA9IFJlYWN0U2hhcmVkSW50ZXJuYWxzLkE7XG4gICAgICByZXR1cm4gbnVsbCA9PT0gZGlzcGF0Y2hlciA/IG51bGwgOiBkaXNwYXRjaGVyLmdldE93bmVyKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIFVua25vd25Pd25lcigpIHtcbiAgICAgIHJldHVybiBFcnJvcihcInJlYWN0LXN0YWNrLXRvcC1mcmFtZVwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaGFzVmFsaWRLZXkoY29uZmlnKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChjb25maWcsIFwia2V5XCIpKSB7XG4gICAgICAgIHZhciBnZXR0ZXIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNvbmZpZywgXCJrZXlcIikuZ2V0O1xuICAgICAgICBpZiAoZ2V0dGVyICYmIGdldHRlci5pc1JlYWN0V2FybmluZykgcmV0dXJuICExO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gY29uZmlnLmtleTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIocHJvcHMsIGRpc3BsYXlOYW1lKSB7XG4gICAgICBmdW5jdGlvbiB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkoKSB7XG4gICAgICAgIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duIHx8XG4gICAgICAgICAgKChzcGVjaWFsUHJvcEtleVdhcm5pbmdTaG93biA9ICEwKSxcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCIlczogYGtleWAgaXMgbm90IGEgcHJvcC4gVHJ5aW5nIHRvIGFjY2VzcyBpdCB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBiZWluZyByZXR1cm5lZC4gSWYgeW91IG5lZWQgdG8gYWNjZXNzIHRoZSBzYW1lIHZhbHVlIHdpdGhpbiB0aGUgY2hpbGQgY29tcG9uZW50LCB5b3Ugc2hvdWxkIHBhc3MgaXQgYXMgYSBkaWZmZXJlbnQgcHJvcC4gKGh0dHBzOi8vcmVhY3QuZGV2L2xpbmsvc3BlY2lhbC1wcm9wcylcIixcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lXG4gICAgICAgICAgKSk7XG4gICAgICB9XG4gICAgICB3YXJuQWJvdXRBY2Nlc3NpbmdLZXkuaXNSZWFjdFdhcm5pbmcgPSAhMDtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShwcm9wcywgXCJrZXlcIiwge1xuICAgICAgICBnZXQ6IHdhcm5BYm91dEFjY2Vzc2luZ0tleSxcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGVsZW1lbnRSZWZHZXR0ZXJXaXRoRGVwcmVjYXRpb25XYXJuaW5nKCkge1xuICAgICAgdmFyIGNvbXBvbmVudE5hbWUgPSBnZXRDb21wb25lbnROYW1lRnJvbVR5cGUodGhpcy50eXBlKTtcbiAgICAgIGRpZFdhcm5BYm91dEVsZW1lbnRSZWZbY29tcG9uZW50TmFtZV0gfHxcbiAgICAgICAgKChkaWRXYXJuQWJvdXRFbGVtZW50UmVmW2NvbXBvbmVudE5hbWVdID0gITApLFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiQWNjZXNzaW5nIGVsZW1lbnQucmVmIHdhcyByZW1vdmVkIGluIFJlYWN0IDE5LiByZWYgaXMgbm93IGEgcmVndWxhciBwcm9wLiBJdCB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0aGUgSlNYIEVsZW1lbnQgdHlwZSBpbiBhIGZ1dHVyZSByZWxlYXNlLlwiXG4gICAgICAgICkpO1xuICAgICAgY29tcG9uZW50TmFtZSA9IHRoaXMucHJvcHMucmVmO1xuICAgICAgcmV0dXJuIHZvaWQgMCAhPT0gY29tcG9uZW50TmFtZSA/IGNvbXBvbmVudE5hbWUgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBSZWFjdEVsZW1lbnQodHlwZSwga2V5LCBwcm9wcywgb3duZXIsIGRlYnVnU3RhY2ssIGRlYnVnVGFzaykge1xuICAgICAgdmFyIHJlZlByb3AgPSBwcm9wcy5yZWY7XG4gICAgICB0eXBlID0ge1xuICAgICAgICAkJHR5cGVvZjogUkVBQ1RfRUxFTUVOVF9UWVBFLFxuICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgICBfb3duZXI6IG93bmVyXG4gICAgICB9O1xuICAgICAgbnVsbCAhPT0gKHZvaWQgMCAhPT0gcmVmUHJvcCA/IHJlZlByb3AgOiBudWxsKVxuICAgICAgICA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcInJlZlwiLCB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICAgICAgICAgIGdldDogZWxlbWVudFJlZkdldHRlcldpdGhEZXByZWNhdGlvbldhcm5pbmdcbiAgICAgICAgICB9KVxuICAgICAgICA6IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcInJlZlwiLCB7IGVudW1lcmFibGU6ICExLCB2YWx1ZTogbnVsbCB9KTtcbiAgICAgIHR5cGUuX3N0b3JlID0ge307XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodHlwZS5fc3RvcmUsIFwidmFsaWRhdGVkXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IDBcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwiX2RlYnVnSW5mb1wiLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITEsXG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0eXBlLCBcIl9kZWJ1Z1N0YWNrXCIsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiAhMSxcbiAgICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICAgIHdyaXRhYmxlOiAhMCxcbiAgICAgICAgdmFsdWU6IGRlYnVnU3RhY2tcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHR5cGUsIFwiX2RlYnVnVGFza1wiLCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogITEsXG4gICAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgICB3cml0YWJsZTogITAsXG4gICAgICAgIHZhbHVlOiBkZWJ1Z1Rhc2tcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmZyZWV6ZSAmJiAoT2JqZWN0LmZyZWV6ZSh0eXBlLnByb3BzKSwgT2JqZWN0LmZyZWV6ZSh0eXBlKSk7XG4gICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG4gICAgZnVuY3Rpb24ganN4REVWSW1wbChcbiAgICAgIHR5cGUsXG4gICAgICBjb25maWcsXG4gICAgICBtYXliZUtleSxcbiAgICAgIGlzU3RhdGljQ2hpbGRyZW4sXG4gICAgICBkZWJ1Z1N0YWNrLFxuICAgICAgZGVidWdUYXNrXG4gICAgKSB7XG4gICAgICB2YXIgY2hpbGRyZW4gPSBjb25maWcuY2hpbGRyZW47XG4gICAgICBpZiAodm9pZCAwICE9PSBjaGlsZHJlbilcbiAgICAgICAgaWYgKGlzU3RhdGljQ2hpbGRyZW4pXG4gICAgICAgICAgaWYgKGlzQXJyYXlJbXBsKGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgaXNTdGF0aWNDaGlsZHJlbiA9IDA7XG4gICAgICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4gPCBjaGlsZHJlbi5sZW5ndGg7XG4gICAgICAgICAgICAgIGlzU3RhdGljQ2hpbGRyZW4rK1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB2YWxpZGF0ZUNoaWxkS2V5cyhjaGlsZHJlbltpc1N0YXRpY0NoaWxkcmVuXSk7XG4gICAgICAgICAgICBPYmplY3QuZnJlZXplICYmIE9iamVjdC5mcmVlemUoY2hpbGRyZW4pO1xuICAgICAgICAgIH0gZWxzZVxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgXCJSZWFjdC5qc3g6IFN0YXRpYyBjaGlsZHJlbiBzaG91bGQgYWx3YXlzIGJlIGFuIGFycmF5LiBZb3UgYXJlIGxpa2VseSBleHBsaWNpdGx5IGNhbGxpbmcgUmVhY3QuanN4cyBvciBSZWFjdC5qc3hERVYuIFVzZSB0aGUgQmFiZWwgdHJhbnNmb3JtIGluc3RlYWQuXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIGVsc2UgdmFsaWRhdGVDaGlsZEtleXMoY2hpbGRyZW4pO1xuICAgICAgaWYgKGhhc093blByb3BlcnR5LmNhbGwoY29uZmlnLCBcImtleVwiKSkge1xuICAgICAgICBjaGlsZHJlbiA9IGdldENvbXBvbmVudE5hbWVGcm9tVHlwZSh0eXBlKTtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhjb25maWcpLmZpbHRlcihmdW5jdGlvbiAoaykge1xuICAgICAgICAgIHJldHVybiBcImtleVwiICE9PSBrO1xuICAgICAgICB9KTtcbiAgICAgICAgaXNTdGF0aWNDaGlsZHJlbiA9XG4gICAgICAgICAgMCA8IGtleXMubGVuZ3RoXG4gICAgICAgICAgICA/IFwie2tleTogc29tZUtleSwgXCIgKyBrZXlzLmpvaW4oXCI6IC4uLiwgXCIpICsgXCI6IC4uLn1cIlxuICAgICAgICAgICAgOiBcIntrZXk6IHNvbWVLZXl9XCI7XG4gICAgICAgIGRpZFdhcm5BYm91dEtleVNwcmVhZFtjaGlsZHJlbiArIGlzU3RhdGljQ2hpbGRyZW5dIHx8XG4gICAgICAgICAgKChrZXlzID1cbiAgICAgICAgICAgIDAgPCBrZXlzLmxlbmd0aCA/IFwie1wiICsga2V5cy5qb2luKFwiOiAuLi4sIFwiKSArIFwiOiAuLi59XCIgOiBcInt9XCIpLFxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAnQSBwcm9wcyBvYmplY3QgY29udGFpbmluZyBhIFwia2V5XCIgcHJvcCBpcyBiZWluZyBzcHJlYWQgaW50byBKU1g6XFxuICBsZXQgcHJvcHMgPSAlcztcXG4gIDwlcyB7Li4ucHJvcHN9IC8+XFxuUmVhY3Qga2V5cyBtdXN0IGJlIHBhc3NlZCBkaXJlY3RseSB0byBKU1ggd2l0aG91dCB1c2luZyBzcHJlYWQ6XFxuICBsZXQgcHJvcHMgPSAlcztcXG4gIDwlcyBrZXk9e3NvbWVLZXl9IHsuLi5wcm9wc30gLz4nLFxuICAgICAgICAgICAgaXNTdGF0aWNDaGlsZHJlbixcbiAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAga2V5cyxcbiAgICAgICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgKSxcbiAgICAgICAgICAoZGlkV2FybkFib3V0S2V5U3ByZWFkW2NoaWxkcmVuICsgaXNTdGF0aWNDaGlsZHJlbl0gPSAhMCkpO1xuICAgICAgfVxuICAgICAgY2hpbGRyZW4gPSBudWxsO1xuICAgICAgdm9pZCAwICE9PSBtYXliZUtleSAmJlxuICAgICAgICAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihtYXliZUtleSksIChjaGlsZHJlbiA9IFwiXCIgKyBtYXliZUtleSkpO1xuICAgICAgaGFzVmFsaWRLZXkoY29uZmlnKSAmJlxuICAgICAgICAoY2hlY2tLZXlTdHJpbmdDb2VyY2lvbihjb25maWcua2V5KSwgKGNoaWxkcmVuID0gXCJcIiArIGNvbmZpZy5rZXkpKTtcbiAgICAgIGlmIChcImtleVwiIGluIGNvbmZpZykge1xuICAgICAgICBtYXliZUtleSA9IHt9O1xuICAgICAgICBmb3IgKHZhciBwcm9wTmFtZSBpbiBjb25maWcpXG4gICAgICAgICAgXCJrZXlcIiAhPT0gcHJvcE5hbWUgJiYgKG1heWJlS2V5W3Byb3BOYW1lXSA9IGNvbmZpZ1twcm9wTmFtZV0pO1xuICAgICAgfSBlbHNlIG1heWJlS2V5ID0gY29uZmlnO1xuICAgICAgY2hpbGRyZW4gJiZcbiAgICAgICAgZGVmaW5lS2V5UHJvcFdhcm5pbmdHZXR0ZXIoXG4gICAgICAgICAgbWF5YmVLZXksXG4gICAgICAgICAgXCJmdW5jdGlvblwiID09PSB0eXBlb2YgdHlwZVxuICAgICAgICAgICAgPyB0eXBlLmRpc3BsYXlOYW1lIHx8IHR5cGUubmFtZSB8fCBcIlVua25vd25cIlxuICAgICAgICAgICAgOiB0eXBlXG4gICAgICAgICk7XG4gICAgICByZXR1cm4gUmVhY3RFbGVtZW50KFxuICAgICAgICB0eXBlLFxuICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgbWF5YmVLZXksXG4gICAgICAgIGdldE93bmVyKCksXG4gICAgICAgIGRlYnVnU3RhY2ssXG4gICAgICAgIGRlYnVnVGFza1xuICAgICAgKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsaWRhdGVDaGlsZEtleXMobm9kZSkge1xuICAgICAgXCJvYmplY3RcIiA9PT0gdHlwZW9mIG5vZGUgJiZcbiAgICAgICAgbnVsbCAhPT0gbm9kZSAmJlxuICAgICAgICBub2RlLiQkdHlwZW9mID09PSBSRUFDVF9FTEVNRU5UX1RZUEUgJiZcbiAgICAgICAgbm9kZS5fc3RvcmUgJiZcbiAgICAgICAgKG5vZGUuX3N0b3JlLnZhbGlkYXRlZCA9IDEpO1xuICAgIH1cbiAgICB2YXIgUmVhY3QgPSByZXF1aXJlKFwibmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0XCIpLFxuICAgICAgUkVBQ1RfRUxFTUVOVF9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnRyYW5zaXRpb25hbC5lbGVtZW50XCIpLFxuICAgICAgUkVBQ1RfUE9SVEFMX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3QucG9ydGFsXCIpLFxuICAgICAgUkVBQ1RfRlJBR01FTlRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mcmFnbWVudFwiKSxcbiAgICAgIFJFQUNUX1NUUklDVF9NT0RFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3RyaWN0X21vZGVcIiksXG4gICAgICBSRUFDVF9QUk9GSUxFUl9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LnByb2ZpbGVyXCIpLFxuICAgICAgUkVBQ1RfQ09OU1VNRVJfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb25zdW1lclwiKSxcbiAgICAgIFJFQUNUX0NPTlRFWFRfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jb250ZXh0XCIpLFxuICAgICAgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5mb3J3YXJkX3JlZlwiKSxcbiAgICAgIFJFQUNUX1NVU1BFTlNFX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VcIiksXG4gICAgICBSRUFDVF9TVVNQRU5TRV9MSVNUX1RZUEUgPSBTeW1ib2wuZm9yKFwicmVhY3Quc3VzcGVuc2VfbGlzdFwiKSxcbiAgICAgIFJFQUNUX01FTU9fVFlQRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5tZW1vXCIpLFxuICAgICAgUkVBQ1RfTEFaWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmxhenlcIiksXG4gICAgICBSRUFDVF9BQ1RJVklUWV9UWVBFID0gU3ltYm9sLmZvcihcInJlYWN0LmFjdGl2aXR5XCIpLFxuICAgICAgUkVBQ1RfQ0xJRU5UX1JFRkVSRU5DRSA9IFN5bWJvbC5mb3IoXCJyZWFjdC5jbGllbnQucmVmZXJlbmNlXCIpLFxuICAgICAgUmVhY3RTaGFyZWRJbnRlcm5hbHMgPVxuICAgICAgICBSZWFjdC5fX0NMSUVOVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9XQVJOX1VTRVJTX1RIRVlfQ0FOTk9UX1VQR1JBREUsXG4gICAgICBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksXG4gICAgICBpc0FycmF5SW1wbCA9IEFycmF5LmlzQXJyYXksXG4gICAgICBjcmVhdGVUYXNrID0gY29uc29sZS5jcmVhdGVUYXNrXG4gICAgICAgID8gY29uc29sZS5jcmVhdGVUYXNrXG4gICAgICAgIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfTtcbiAgICBSZWFjdCA9IHtcbiAgICAgIHJlYWN0X3N0YWNrX2JvdHRvbV9mcmFtZTogZnVuY3Rpb24gKGNhbGxTdGFja0ZvckVycm9yKSB7XG4gICAgICAgIHJldHVybiBjYWxsU3RhY2tGb3JFcnJvcigpO1xuICAgICAgfVxuICAgIH07XG4gICAgdmFyIHNwZWNpYWxQcm9wS2V5V2FybmluZ1Nob3duO1xuICAgIHZhciBkaWRXYXJuQWJvdXRFbGVtZW50UmVmID0ge307XG4gICAgdmFyIHVua25vd25Pd25lckRlYnVnU3RhY2sgPSBSZWFjdC5yZWFjdF9zdGFja19ib3R0b21fZnJhbWUuYmluZChcbiAgICAgIFJlYWN0LFxuICAgICAgVW5rbm93bk93bmVyXG4gICAgKSgpO1xuICAgIHZhciB1bmtub3duT3duZXJEZWJ1Z1Rhc2sgPSBjcmVhdGVUYXNrKGdldFRhc2tOYW1lKFVua25vd25Pd25lcikpO1xuICAgIHZhciBkaWRXYXJuQWJvdXRLZXlTcHJlYWQgPSB7fTtcbiAgICBleHBvcnRzLkZyYWdtZW50ID0gUkVBQ1RfRlJBR01FTlRfVFlQRTtcbiAgICBleHBvcnRzLmpzeERFViA9IGZ1bmN0aW9uICh0eXBlLCBjb25maWcsIG1heWJlS2V5LCBpc1N0YXRpY0NoaWxkcmVuKSB7XG4gICAgICB2YXIgdHJhY2tBY3R1YWxPd25lciA9XG4gICAgICAgIDFlNCA+IFJlYWN0U2hhcmVkSW50ZXJuYWxzLnJlY2VudGx5Q3JlYXRlZE93bmVyU3RhY2tzKys7XG4gICAgICByZXR1cm4ganN4REVWSW1wbChcbiAgICAgICAgdHlwZSxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBtYXliZUtleSxcbiAgICAgICAgaXNTdGF0aWNDaGlsZHJlbixcbiAgICAgICAgdHJhY2tBY3R1YWxPd25lclxuICAgICAgICAgID8gRXJyb3IoXCJyZWFjdC1zdGFjay10b3AtZnJhbWVcIilcbiAgICAgICAgICA6IHVua25vd25Pd25lckRlYnVnU3RhY2ssXG4gICAgICAgIHRyYWNrQWN0dWFsT3duZXIgPyBjcmVhdGVUYXNrKGdldFRhc2tOYW1lKHR5cGUpKSA6IHVua25vd25Pd25lckRlYnVnVGFza1xuICAgICAgKTtcbiAgICB9O1xuICB9KSgpO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\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 ***!
|
||
\******************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\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\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3QvY29tcGlsZWQvcmVhY3QvanN4LWRldi1ydW50aW1lLmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSw4TEFBc0U7QUFDeEUiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvbmV4dC9kaXN0L2NvbXBpbGVkL3JlYWN0L2pzeC1kZXYtcnVudGltZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LWRldi1ydW50aW1lLnByb2R1Y3Rpb24uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtanN4LWRldi1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-dev-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/amp-context.shared-runtime.js":
|
||
/*!*************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/amp-context.shared-runtime.js ***!
|
||
\*************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"AmpStateContext\", ({\n enumerable: true,\n get: function() {\n return AmpStateContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst AmpStateContext = _react.default.createContext({});\nif (true) {\n AmpStateContext.displayName = 'AmpStateContext';\n} //# sourceMappingURL=amp-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9hbXAtY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7O21EQUVhQTs7O2VBQUFBOzs7OzRFQUZLO0FBRVgsTUFBTUEsa0JBQXNDQyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBQyxDQUFDO0FBRXhFLElBQUlDLElBQW9CLEVBQW1CO0lBQ3pDSCxnQkFBZ0JNLFdBQVcsR0FBRztBQUNoQyIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL3NoYXJlZC9saWIvYW1wLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuXG5leHBvcnQgY29uc3QgQW1wU3RhdGVDb250ZXh0OiBSZWFjdC5Db250ZXh0PGFueT4gPSBSZWFjdC5jcmVhdGVDb250ZXh0KHt9KVxuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBBbXBTdGF0ZUNvbnRleHQuZGlzcGxheU5hbWUgPSAnQW1wU3RhdGVDb250ZXh0J1xufVxuIl0sIm5hbWVzIjpbIkFtcFN0YXRlQ29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImRpc3BsYXlOYW1lIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/amp-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/amp-mode.js":
|
||
/*!*******************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/amp-mode.js ***!
|
||
\*******************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isInAmpMode\", ({\n enumerable: true,\n get: function() {\n return isInAmpMode;\n }\n}));\nfunction isInAmpMode(param) {\n let { ampFirst = false, hybrid = false, hasQuery = false } = param === void 0 ? {} : param;\n return ampFirst || hybrid && hasQuery;\n} //# sourceMappingURL=amp-mode.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9hbXAtbW9kZS5qcyIsIm1hcHBpbmdzIjoiOzs7OytDQUFnQkE7OztlQUFBQTs7O0FBQVQsU0FBU0EsWUFBWTtJQUFBLE1BQzFCQyxXQUFXLEtBQUssRUFDaEJDLFNBQVMsS0FBSyxFQUNkQyxXQUFXLEtBQUssRUFDakIsR0FKMkIsbUJBSXhCLENBQUMsSUFKdUI7SUFLMUIsT0FBT0YsWUFBYUMsVUFBVUM7QUFDaEMiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9zaGFyZWQvbGliL2FtcC1tb2RlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBpc0luQW1wTW9kZSh7XG4gIGFtcEZpcnN0ID0gZmFsc2UsXG4gIGh5YnJpZCA9IGZhbHNlLFxuICBoYXNRdWVyeSA9IGZhbHNlLFxufSA9IHt9KTogYm9vbGVhbiB7XG4gIHJldHVybiBhbXBGaXJzdCB8fCAoaHlicmlkICYmIGhhc1F1ZXJ5KVxufVxuIl0sIm5hbWVzIjpbImlzSW5BbXBNb2RlIiwiYW1wRmlyc3QiLCJoeWJyaWQiLCJoYXNRdWVyeSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/amp-mode.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/get-img-props.js":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/get-img-props.js ***!
|
||
\************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getImgProps\", ({\n enumerable: true,\n get: function() {\n return getImgProps;\n }\n}));\nconst _warnonce = __webpack_require__(/*! ./utils/warn-once */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nconst _imageblursvg = __webpack_require__(/*! ./image-blur-svg */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/image-blur-svg.js\");\nconst _imageconfig = __webpack_require__(/*! ./image-config */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/image-config.js\");\nconst VALID_LOADING_VALUES = [\n 'lazy',\n 'eager',\n undefined\n];\n// Object-fit values that are not valid background-size values\nconst INVALID_BACKGROUND_SIZE_VALUES = [\n '-moz-initial',\n 'fill',\n 'none',\n 'scale-down',\n undefined\n];\nfunction isStaticRequire(src) {\n return src.default !== undefined;\n}\nfunction isStaticImageData(src) {\n return src.src !== undefined;\n}\nfunction isStaticImport(src) {\n return !!src && typeof src === 'object' && (isStaticRequire(src) || isStaticImageData(src));\n}\nconst allImgs = new Map();\nlet perfObserver;\nfunction getInt(x) {\n if (typeof x === 'undefined') {\n return x;\n }\n if (typeof x === 'number') {\n return Number.isFinite(x) ? x : NaN;\n }\n if (typeof x === 'string' && /^[0-9]+$/.test(x)) {\n return parseInt(x, 10);\n }\n return NaN;\n}\nfunction getWidths(param, width, sizes) {\n let { deviceSizes, allSizes } = param;\n if (sizes) {\n // Find all the \"vw\" percent sizes used in the sizes prop\n const viewportWidthRe = /(^|\\s)(1?\\d?\\d)vw/g;\n const percentSizes = [];\n for(let match; match = viewportWidthRe.exec(sizes); match){\n percentSizes.push(parseInt(match[2]));\n }\n if (percentSizes.length) {\n const smallestRatio = Math.min(...percentSizes) * 0.01;\n return {\n widths: allSizes.filter((s)=>s >= deviceSizes[0] * smallestRatio),\n kind: 'w'\n };\n }\n return {\n widths: allSizes,\n kind: 'w'\n };\n }\n if (typeof width !== 'number') {\n return {\n widths: deviceSizes,\n kind: 'w'\n };\n }\n const widths = [\n ...new Set(// > are actually 3x in the green color, but only 1.5x in the red and\n // > blue colors. Showing a 3x resolution image in the app vs a 2x\n // > resolution image will be visually the same, though the 3x image\n // > takes significantly more data. Even true 3x resolution screens are\n // > wasteful as the human eye cannot see that level of detail without\n // > something like a magnifying glass.\n // https://blog.twitter.com/engineering/en_us/topics/infrastructure/2019/capping-image-fidelity-on-ultra-high-resolution-devices.html\n [\n width,\n width * 2 /*, width * 3*/ \n ].map((w)=>allSizes.find((p)=>p >= w) || allSizes[allSizes.length - 1]))\n ];\n return {\n widths,\n kind: 'x'\n };\n}\nfunction generateImgAttrs(param) {\n let { config, src, unoptimized, width, quality, sizes, loader } = param;\n if (unoptimized) {\n return {\n src,\n srcSet: undefined,\n sizes: undefined\n };\n }\n const { widths, kind } = getWidths(config, width, sizes);\n const last = widths.length - 1;\n return {\n sizes: !sizes && kind === 'w' ? '100vw' : sizes,\n srcSet: widths.map((w, i)=>loader({\n config,\n src,\n quality,\n width: w\n }) + \" \" + (kind === 'w' ? w : i + 1) + kind).join(', '),\n // It's intended to keep `src` the last attribute because React updates\n // attributes in order. If we keep `src` the first one, Safari will\n // immediately start to fetch `src`, before `sizes` and `srcSet` are even\n // updated by React. That causes multiple unnecessary requests if `srcSet`\n // and `sizes` are defined.\n // This bug cannot be reproduced in Chrome or Firefox.\n src: loader({\n config,\n src,\n quality,\n width: widths[last]\n })\n };\n}\nfunction getImgProps(param, _state) {\n let { src, sizes, unoptimized = false, priority = false, loading, className, quality, width, height, fill = false, style, overrideSrc, onLoad, onLoadingComplete, placeholder = 'empty', blurDataURL, fetchPriority, decoding = 'async', layout, objectFit, objectPosition, lazyBoundary, lazyRoot, ...rest } = param;\n const { imgConf, showAltText, blurComplete, defaultLoader } = _state;\n let config;\n let c = imgConf || _imageconfig.imageConfigDefault;\n if ('allSizes' in c) {\n config = c;\n } else {\n var _c_qualities;\n const allSizes = [\n ...c.deviceSizes,\n ...c.imageSizes\n ].sort((a, b)=>a - b);\n const deviceSizes = c.deviceSizes.sort((a, b)=>a - b);\n const qualities = (_c_qualities = c.qualities) == null ? void 0 : _c_qualities.sort((a, b)=>a - b);\n config = {\n ...c,\n allSizes,\n deviceSizes,\n qualities\n };\n }\n if (typeof defaultLoader === 'undefined') {\n throw Object.defineProperty(new Error('images.loaderFile detected but the file is missing default export.\\nRead more: https://nextjs.org/docs/messages/invalid-images-config'), \"__NEXT_ERROR_CODE\", {\n value: \"E163\",\n enumerable: false,\n configurable: true\n });\n }\n let loader = rest.loader || defaultLoader;\n // Remove property so it's not spread on <img> element\n delete rest.loader;\n delete rest.srcSet;\n // This special value indicates that the user\n // didn't define a \"loader\" prop or \"loader\" config.\n const isDefaultLoader = '__next_img_default' in loader;\n if (isDefaultLoader) {\n if (config.loader === 'custom') {\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" is missing \"loader\" prop.' + \"\\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader\"), \"__NEXT_ERROR_CODE\", {\n value: \"E252\",\n enumerable: false,\n configurable: true\n });\n }\n } else {\n // The user defined a \"loader\" prop or config.\n // Since the config object is internal only, we\n // must not pass it to the user-defined \"loader\".\n const customImageLoader = loader;\n loader = (obj)=>{\n const { config: _, ...opts } = obj;\n return customImageLoader(opts);\n };\n }\n if (layout) {\n if (layout === 'fill') {\n fill = true;\n }\n const layoutToStyle = {\n intrinsic: {\n maxWidth: '100%',\n height: 'auto'\n },\n responsive: {\n width: '100%',\n height: 'auto'\n }\n };\n const layoutToSizes = {\n responsive: '100vw',\n fill: '100vw'\n };\n const layoutStyle = layoutToStyle[layout];\n if (layoutStyle) {\n style = {\n ...style,\n ...layoutStyle\n };\n }\n const layoutSizes = layoutToSizes[layout];\n if (layoutSizes && !sizes) {\n sizes = layoutSizes;\n }\n }\n let staticSrc = '';\n let widthInt = getInt(width);\n let heightInt = getInt(height);\n let blurWidth;\n let blurHeight;\n if (isStaticImport(src)) {\n const staticImageData = isStaticRequire(src) ? src.default : src;\n if (!staticImageData.src) {\n throw Object.defineProperty(new Error(\"An object should only be passed to the image component src parameter if it comes from a static image import. It must include src. Received \" + JSON.stringify(staticImageData)), \"__NEXT_ERROR_CODE\", {\n value: \"E460\",\n enumerable: false,\n configurable: true\n });\n }\n if (!staticImageData.height || !staticImageData.width) {\n throw Object.defineProperty(new Error(\"An object should only be passed to the image component src parameter if it comes from a static image import. It must include height and width. Received \" + JSON.stringify(staticImageData)), \"__NEXT_ERROR_CODE\", {\n value: \"E48\",\n enumerable: false,\n configurable: true\n });\n }\n blurWidth = staticImageData.blurWidth;\n blurHeight = staticImageData.blurHeight;\n blurDataURL = blurDataURL || staticImageData.blurDataURL;\n staticSrc = staticImageData.src;\n if (!fill) {\n if (!widthInt && !heightInt) {\n widthInt = staticImageData.width;\n heightInt = staticImageData.height;\n } else if (widthInt && !heightInt) {\n const ratio = widthInt / staticImageData.width;\n heightInt = Math.round(staticImageData.height * ratio);\n } else if (!widthInt && heightInt) {\n const ratio = heightInt / staticImageData.height;\n widthInt = Math.round(staticImageData.width * ratio);\n }\n }\n }\n src = typeof src === 'string' ? src : staticSrc;\n let isLazy = !priority && (loading === 'lazy' || typeof loading === 'undefined');\n if (!src || src.startsWith('data:') || src.startsWith('blob:')) {\n // https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs\n unoptimized = true;\n isLazy = false;\n }\n if (config.unoptimized) {\n unoptimized = true;\n }\n if (isDefaultLoader && !config.dangerouslyAllowSVG && src.split('?', 1)[0].endsWith('.svg')) {\n // Special case to make svg serve as-is to avoid proxying\n // through the built-in Image Optimization API.\n unoptimized = true;\n }\n const qualityInt = getInt(quality);\n if (true) {\n var _config_localPatterns;\n if (config.output === 'export' && isDefaultLoader && !unoptimized) {\n throw Object.defineProperty(new Error(\"Image Optimization using the default loader is not compatible with `{ output: 'export' }`.\\n Possible solutions:\\n - Remove `{ output: 'export' }` and run \\\"next start\\\" to run server mode including the Image Optimization API.\\n - Configure `{ images: { unoptimized: true } }` in `next.config.js` to disable the Image Optimization API.\\n Read more: https://nextjs.org/docs/messages/export-image-api\"), \"__NEXT_ERROR_CODE\", {\n value: \"E500\",\n enumerable: false,\n configurable: true\n });\n }\n if (!src) {\n // React doesn't show the stack trace and there's\n // no `src` to help identify which image, so we\n // instead console.error(ref) during mount.\n unoptimized = true;\n } else {\n if (fill) {\n if (width) {\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" has both \"width\" and \"fill\" properties. Only one should be used.'), \"__NEXT_ERROR_CODE\", {\n value: \"E96\",\n enumerable: false,\n configurable: true\n });\n }\n if (height) {\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" has both \"height\" and \"fill\" properties. Only one should be used.'), \"__NEXT_ERROR_CODE\", {\n value: \"E115\",\n enumerable: false,\n configurable: true\n });\n }\n if ((style == null ? void 0 : style.position) && style.position !== 'absolute') {\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" has both \"fill\" and \"style.position\" properties. Images with \"fill\" always use position absolute - it cannot be modified.'), \"__NEXT_ERROR_CODE\", {\n value: \"E216\",\n enumerable: false,\n configurable: true\n });\n }\n if ((style == null ? void 0 : style.width) && style.width !== '100%') {\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" has both \"fill\" and \"style.width\" properties. Images with \"fill\" always use width 100% - it cannot be modified.'), \"__NEXT_ERROR_CODE\", {\n value: \"E73\",\n enumerable: false,\n configurable: true\n });\n }\n if ((style == null ? void 0 : style.height) && style.height !== '100%') {\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" has both \"fill\" and \"style.height\" properties. Images with \"fill\" always use height 100% - it cannot be modified.'), \"__NEXT_ERROR_CODE\", {\n value: \"E404\",\n enumerable: false,\n configurable: true\n });\n }\n } else {\n if (typeof widthInt === 'undefined') {\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" is missing required \"width\" property.'), \"__NEXT_ERROR_CODE\", {\n value: \"E451\",\n enumerable: false,\n configurable: true\n });\n } else if (isNaN(widthInt)) {\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" has invalid \"width\" property. Expected a numeric value in pixels but received \"' + width + '\".'), \"__NEXT_ERROR_CODE\", {\n value: \"E66\",\n enumerable: false,\n configurable: true\n });\n }\n if (typeof heightInt === 'undefined') {\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" is missing required \"height\" property.'), \"__NEXT_ERROR_CODE\", {\n value: \"E397\",\n enumerable: false,\n configurable: true\n });\n } else if (isNaN(heightInt)) {\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" has invalid \"height\" property. Expected a numeric value in pixels but received \"' + height + '\".'), \"__NEXT_ERROR_CODE\", {\n value: \"E444\",\n enumerable: false,\n configurable: true\n });\n }\n // eslint-disable-next-line no-control-regex\n if (/^[\\x00-\\x20]/.test(src)) {\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" cannot start with a space or control character. Use src.trimStart() to remove it or encodeURIComponent(src) to keep it.'), \"__NEXT_ERROR_CODE\", {\n value: \"E176\",\n enumerable: false,\n configurable: true\n });\n }\n // eslint-disable-next-line no-control-regex\n if (/[\\x00-\\x20]$/.test(src)) {\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" cannot end with a space or control character. Use src.trimEnd() to remove it or encodeURIComponent(src) to keep it.'), \"__NEXT_ERROR_CODE\", {\n value: \"E21\",\n enumerable: false,\n configurable: true\n });\n }\n }\n }\n if (!VALID_LOADING_VALUES.includes(loading)) {\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" has invalid \"loading\" property. Provided \"' + loading + '\" should be one of ' + VALID_LOADING_VALUES.map(String).join(',') + \".\"), \"__NEXT_ERROR_CODE\", {\n value: \"E357\",\n enumerable: false,\n configurable: true\n });\n }\n if (priority && loading === 'lazy') {\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" has both \"priority\" and \"loading=\\'lazy\\'\" properties. Only one should be used.'), \"__NEXT_ERROR_CODE\", {\n value: \"E218\",\n enumerable: false,\n configurable: true\n });\n }\n if (placeholder !== 'empty' && placeholder !== 'blur' && !placeholder.startsWith('data:image/')) {\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" has invalid \"placeholder\" property \"' + placeholder + '\".'), \"__NEXT_ERROR_CODE\", {\n value: \"E431\",\n enumerable: false,\n configurable: true\n });\n }\n if (placeholder !== 'empty') {\n if (widthInt && heightInt && widthInt * heightInt < 1600) {\n (0, _warnonce.warnOnce)('Image with src \"' + src + '\" is smaller than 40x40. Consider removing the \"placeholder\" property to improve performance.');\n }\n }\n if (qualityInt && qualityInt !== 75 && !config.qualities) {\n (0, _warnonce.warnOnce)('Image with src \"' + src + '\" is using quality \"' + qualityInt + '\" which is not configured in images.qualities. This config will be required starting in Next.js 16.' + \"\\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-qualities\");\n }\n if (src.startsWith('/') && src.includes('?') && (!(config == null ? void 0 : (_config_localPatterns = config.localPatterns) == null ? void 0 : _config_localPatterns.length) || config.localPatterns.length === 1 && config.localPatterns[0].pathname === '/_next/static/media/**')) {\n (0, _warnonce.warnOnce)('Image with src \"' + src + '\" is using a query string which is not configured in images.localPatterns. This config will be required starting in Next.js 16.' + \"\\nRead more: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns\");\n }\n if (placeholder === 'blur' && !blurDataURL) {\n const VALID_BLUR_EXT = [\n 'jpeg',\n 'png',\n 'webp',\n 'avif'\n ] // should match next-image-loader\n ;\n throw Object.defineProperty(new Error('Image with src \"' + src + '\" has \"placeholder=\\'blur\\'\" property but is missing the \"blurDataURL\" property.\\n Possible solutions:\\n - Add a \"blurDataURL\" property, the contents should be a small Data URL to represent the image\\n - Change the \"src\" property to a static import with one of the supported file types: ' + VALID_BLUR_EXT.join(',') + ' (animated images not supported)\\n - Remove the \"placeholder\" property, effectively no blur effect\\n Read more: https://nextjs.org/docs/messages/placeholder-blur-data-url'), \"__NEXT_ERROR_CODE\", {\n value: \"E371\",\n enumerable: false,\n configurable: true\n });\n }\n if ('ref' in rest) {\n (0, _warnonce.warnOnce)('Image with src \"' + src + '\" is using unsupported \"ref\" property. Consider using the \"onLoad\" property instead.');\n }\n if (!unoptimized && !isDefaultLoader) {\n const urlStr = loader({\n config,\n src,\n width: widthInt || 400,\n quality: qualityInt || 75\n });\n let url;\n try {\n url = new URL(urlStr);\n } catch (err) {}\n if (urlStr === src || url && url.pathname === src && !url.search) {\n (0, _warnonce.warnOnce)('Image with src \"' + src + '\" has a \"loader\" property that does not implement width. Please implement it or use the \"unoptimized\" property instead.' + \"\\nRead more: https://nextjs.org/docs/messages/next-image-missing-loader-width\");\n }\n }\n if (onLoadingComplete) {\n (0, _warnonce.warnOnce)('Image with src \"' + src + '\" is using deprecated \"onLoadingComplete\" property. Please use the \"onLoad\" property instead.');\n }\n for (const [legacyKey, legacyValue] of Object.entries({\n layout,\n objectFit,\n objectPosition,\n lazyBoundary,\n lazyRoot\n })){\n if (legacyValue) {\n (0, _warnonce.warnOnce)('Image with src \"' + src + '\" has legacy prop \"' + legacyKey + '\". Did you forget to run the codemod?' + \"\\nRead more: https://nextjs.org/docs/messages/next-image-upgrade-to-13\");\n }\n }\n if ( true && !perfObserver && window.PerformanceObserver) {\n perfObserver = new PerformanceObserver((entryList)=>{\n for (const entry of entryList.getEntries()){\n var _entry_element;\n // @ts-ignore - missing \"LargestContentfulPaint\" class with \"element\" prop\n const imgSrc = (entry == null ? void 0 : (_entry_element = entry.element) == null ? void 0 : _entry_element.src) || '';\n const lcpImage = allImgs.get(imgSrc);\n if (lcpImage && !lcpImage.priority && lcpImage.placeholder === 'empty' && !lcpImage.src.startsWith('data:') && !lcpImage.src.startsWith('blob:')) {\n // https://web.dev/lcp/#measure-lcp-in-javascript\n (0, _warnonce.warnOnce)('Image with src \"' + lcpImage.src + '\" was detected as the Largest Contentful Paint (LCP). Please add the \"priority\" property if this image is above the fold.' + \"\\nRead more: https://nextjs.org/docs/api-reference/next/image#priority\");\n }\n }\n });\n try {\n perfObserver.observe({\n type: 'largest-contentful-paint',\n buffered: true\n });\n } catch (err) {\n // Log error but don't crash the app\n console.error(err);\n }\n }\n }\n const imgStyle = Object.assign(fill ? {\n position: 'absolute',\n height: '100%',\n width: '100%',\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n objectFit,\n objectPosition\n } : {}, showAltText ? {} : {\n color: 'transparent'\n }, style);\n const backgroundImage = !blurComplete && placeholder !== 'empty' ? placeholder === 'blur' ? 'url(\"data:image/svg+xml;charset=utf-8,' + (0, _imageblursvg.getImageBlurSvg)({\n widthInt,\n heightInt,\n blurWidth,\n blurHeight,\n blurDataURL: blurDataURL || '',\n objectFit: imgStyle.objectFit\n }) + '\")' : 'url(\"' + placeholder + '\")' // assume `data:image/`\n : null;\n const backgroundSize = !INVALID_BACKGROUND_SIZE_VALUES.includes(imgStyle.objectFit) ? imgStyle.objectFit : imgStyle.objectFit === 'fill' ? '100% 100%' // the background-size equivalent of `fill`\n : 'cover';\n let placeholderStyle = backgroundImage ? {\n backgroundSize,\n backgroundPosition: imgStyle.objectPosition || '50% 50%',\n backgroundRepeat: 'no-repeat',\n backgroundImage\n } : {};\n if (true) {\n if (placeholderStyle.backgroundImage && placeholder === 'blur' && (blurDataURL == null ? void 0 : blurDataURL.startsWith('/'))) {\n // During `next dev`, we don't want to generate blur placeholders with webpack\n // because it can delay starting the dev server. Instead, `next-image-loader.js`\n // will inline a special url to lazily generate the blur placeholder at request time.\n placeholderStyle.backgroundImage = 'url(\"' + blurDataURL + '\")';\n }\n }\n const imgAttributes = generateImgAttrs({\n config,\n src,\n unoptimized,\n width: widthInt,\n quality: qualityInt,\n sizes,\n loader\n });\n if (true) {\n if (true) {\n let fullUrl;\n try {\n fullUrl = new URL(imgAttributes.src);\n } catch (e) {\n fullUrl = new URL(imgAttributes.src, window.location.href);\n }\n allImgs.set(fullUrl.href, {\n src,\n priority,\n placeholder\n });\n }\n }\n const props = {\n ...rest,\n loading: isLazy ? 'lazy' : loading,\n fetchPriority,\n width: widthInt,\n height: heightInt,\n decoding,\n className,\n style: {\n ...imgStyle,\n ...placeholderStyle\n },\n sizes: imgAttributes.sizes,\n srcSet: imgAttributes.srcSet,\n src: overrideSrc || imgAttributes.src\n };\n const meta = {\n unoptimized,\n priority,\n placeholder,\n fill\n };\n return {\n props,\n meta\n };\n} //# sourceMappingURL=get-img-props.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9nZXQtaW1nLXByb3BzLmpzIiwibWFwcGluZ3MiOiI7Ozs7K0NBaVFnQkE7OztlQUFBQTs7O3NDQWpRUzswQ0FDTzt5Q0FDRztBQStFbkMsTUFBTUMsdUJBQXVCO0lBQUM7SUFBUTtJQUFTQztDQUFVO0FBRXpELDhEQUE4RDtBQUM5RCxNQUFNQyxpQ0FBaUM7SUFDckM7SUFDQTtJQUNBO0lBQ0E7SUFDQUQ7Q0FDRDtBQTRCRCxTQUFTRSxnQkFDUEMsR0FBb0M7SUFFcEMsT0FBUUEsSUFBc0JDLE9BQU8sS0FBS0o7QUFDNUM7QUFFQSxTQUFTSyxrQkFDUEYsR0FBb0M7SUFFcEMsT0FBUUEsSUFBd0JBLEdBQUcsS0FBS0g7QUFDMUM7QUFFQSxTQUFTTSxlQUFlSCxHQUEwQjtJQUNoRCxPQUNFLENBQUMsQ0FBQ0EsT0FDRixPQUFPQSxRQUFRLFlBQ2RELENBQUFBLGdCQUFnQkMsUUFDZkUsa0JBQWtCRixJQUFBQSxDQUFtQjtBQUUzQztBQUVBLE1BQU1JLFVBQVUsSUFBSUM7QUFJcEIsSUFBSUM7QUFFSixTQUFTQyxPQUFPQyxDQUFVO0lBQ3hCLElBQUksT0FBT0EsTUFBTSxhQUFhO1FBQzVCLE9BQU9BO0lBQ1Q7SUFDQSxJQUFJLE9BQU9BLE1BQU0sVUFBVTtRQUN6QixPQUFPQyxPQUFPQyxRQUFRLENBQUNGLEtBQUtBLElBQUlHO0lBQ2xDO0lBQ0EsSUFBSSxPQUFPSCxNQUFNLFlBQVksV0FBV0ksSUFBSSxDQUFDSixJQUFJO1FBQy9DLE9BQU9LLFNBQVNMLEdBQUc7SUFDckI7SUFDQSxPQUFPRztBQUNUO0FBRUEsU0FBU0csVUFDUCxLQUFzQyxFQUN0Q0MsS0FBeUIsRUFDekJDLEtBQXlCO0lBRnpCLE1BQUVDLFdBQVcsRUFBRUMsUUFBUSxFQUFlLEdBQXRDO0lBSUEsSUFBSUYsT0FBTztRQUNULHlEQUF5RDtRQUN6RCxNQUFNRyxrQkFBa0I7UUFDeEIsTUFBTUMs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NkIsRUFBRTtZQUNqQyxJQUFJaUQ7WUFDSixJQUFJO2dCQUNGQSxVQUFVLElBQUluQyxJQUFJa0MsY0FBYzFKLEdBQUc7WUFDckMsRUFBRSxPQUFPNEosR0FBRztnQkFDVkQsVUFBVSxJQUFJbkMsSUFBSWtDLGNBQWMxSixHQUFHLEVBQUUrSCxPQUFPOEIsUUFBUSxDQUFDQyxJQUFJO1lBQzNEO1lBQ0ExSixRQUFRMkosR0FBRyxDQUFDSixRQUFRRyxJQUFJLEVBQUU7Z0JBQUU5SjtnQkFBSytDO2dCQUFVUztZQUFZO1FBQ3pEO0lBQ0Y7SUFFQSxNQUFNd0csUUFBa0I7UUFDdEIsR0FBRy9GLElBQUk7UUFDUGpCLFNBQVNvRCxTQUFTLFNBQVNwRDtRQUMzQlU7UUFDQTNDLE9BQU80RTtRQUNQekMsUUFBUTBDO1FBQ1JqQztRQUNBVjtRQUNBRyxPQUFPO1lBQUUsR0FBR3lGLFFBQVE7WUFBRSxHQUFHVSxnQkFBZ0I7UUFBQztRQUMxQ3ZJLE9BQU8wSSxjQUFjMUksS0FBSztRQUMxQjBCLFFBQVFnSCxjQUFjaEgsTUFBTTtRQUM1QjFDLEtBQUtxRCxlQUFlcUcsY0FBYzFKLEdBQUc7SUFDdkM7SUFDQSxNQUFNaUssT0FBTztRQUFFMUg7UUFBYVE7UUFBVVM7UUFBYUw7SUFBSztJQUN4RCxPQUFPO1FBQUU2RztRQUFPQztJQUFLO0FBQ3ZCIiwic291cmNlcyI6WyIvaG9tZS9zcmMvc2hhcmVkL2xpYi9nZXQtaW1nLXByb3BzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdhcm5PbmNlIH0gZnJvbSAnLi91dGlscy93YXJuLW9uY2UnXG5pbXBvcnQgeyBnZXRJbWFnZUJsdXJTdmcgfSBmcm9tICcuL2ltYWdlLWJsdXItc3ZnJ1xuaW1wb3J0IHsgaW1hZ2VDb25maWdEZWZhdWx0IH0gZnJvbSAnLi9pbWFnZS1jb25maWcnXG5pbXBvcnQgdHlwZSB7XG4gIEltYWdlQ29uZmlnQ29tcGxldGUsXG4gIEltYWdlTG9hZGVyUHJvcHMsXG4gIEltYWdlTG9hZGVyUHJvcHNXaXRoQ29uZmlnLFxufSBmcm9tICcuL2ltYWdlLWNvbmZpZydcblxuaW1wb3J0IHR5cGUgeyBDU1NQcm9wZXJ0aWVzLCBKU1ggfSBmcm9tICdyZWFjdCdcblxuZXhwb3J0IGludGVyZmFjZSBTdGF0aWNJbWFnZURhdGEge1xuICBzcmM6IHN0cmluZ1xuICBoZWlnaHQ6IG51bWJlclxuICB3aWR0aDogbnVtYmVyXG4gIGJsdXJEYXRhVVJMPzogc3RyaW5nXG4gIGJsdXJXaWR0aD86IG51bWJlclxuICBibHVySGVpZ2h0PzogbnVtYmVyXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU3RhdGljUmVxdWlyZSB7XG4gIGRlZmF1bHQ6IFN0YXRpY0ltYWdlRGF0YVxufVxuXG5leHBvcnQgdHlwZSBTdGF0aWNJbXBvcnQgPSBTdGF0aWNSZXF1aXJlIHwgU3RhdGljSW1hZ2VEYXRhXG5cbmV4cG9ydCB0eXBlIEltYWdlUHJvcHMgPSBPbWl0PFxuICBKU1guSW50cmluc2ljRWxlbWVudHNbJ2ltZyddLFxuICAnc3JjJyB8ICdzcmNTZXQnIHwgJ3JlZicgfCAnYWx0JyB8ICd3aWR0aCcgfCAnaGVpZ2h0JyB8ICdsb2FkaW5nJ1xuPiAmIHtcbiAgc3JjOiBzdHJpbmcgfCBTdGF0aWNJbXBvcnRcbiAgYWx0OiBzdHJpbmdcbiAgd2lkdGg/OiBudW1iZXIgfCBgJHtudW1iZXJ9YFxuICBoZWlnaHQ/OiBudW1iZXIgfCBgJHtudW1iZXJ9YFxuICBmaWxsPzogYm9vbGVhblxuICBsb2FkZXI/OiBJbWFnZUxvYWRlclxuICBxdWFsaXR5PzogbnVtYmVyIHwgYCR7bnVtYmVyfWBcbiAgcHJpb3JpdHk/OiBib29sZWFuXG4gIGxvYWRpbmc/OiBMb2FkaW5nVmFsdWVcbiAgcGxhY2Vob2xkZXI/OiBQbGFjZWhvbGRlclZhbHVlXG4gIGJsdXJEYXRhVVJMPzogc3RyaW5nXG4gIHVub3B0aW1pemVkPzogYm9vbGVhblxuICBvdmVycmlkZVNyYz86IHN0cmluZ1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBvbkxvYWRgIGluc3RlYWQuXG4gICAqIEBzZWUgaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvY29tcG9uZW50cy9pbWFnZSNvbmxvYWRcbiAgICovXG4gIG9uTG9hZGluZ0NvbXBsZXRlPzogT25Mb2FkaW5nQ29tcGxldGVcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgZmlsbGAgcHJvcCBpbnN0ZWFkIG9mIGBsYXlvdXQ9XCJmaWxsXCJgIG9yIGNoYW5nZSBpbXBvcnQgdG8gYG5leHQvbGVnYWN5L2ltYWdlYC5cbiAgICogQHNlZSBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvbGVnYWN5L2ltYWdlXG4gICAqL1xuICBsYXlvdXQ/OiBzdHJpbmdcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc3R5bGVgIHByb3AgaW5zdGVhZC5cbiAgICovXG4gIG9iamVjdEZpdD86IHN0cmluZ1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzdHlsZWAgcHJvcCBpbnN0ZWFkLlxuICAgKi9cbiAgb2JqZWN0UG9zaXRpb24/OiBzdHJpbmdcbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFRoaXMgcHJvcCBkb2VzIG5vdCBkbyBhbnl0aGluZy5cbiAgICovXG4gIGxhenlCb3VuZGFyeT86IHN0cmluZ1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVGhpcyBwcm9wIGRvZXMgbm90IGRvIGFueXRoaW5nLlxuICAgKi9cbiAgbGF6eVJvb3Q/OiBzdHJpbmdcbn1cblxuZXhwb3J0IHR5cGUgSW1nUHJvcHMgPSBPbWl0PEltYWdlUHJvcHMsICdzcmMnIHwgJ2xvYWRlcic+ICYge1xuICBsb2FkaW5nOiBMb2FkaW5nVmFsdWVcbiAgd2lkdGg6IG51bWJlciB8IHVuZGVmaW5lZFxuICBoZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZFxuICBzdHlsZTogTm9uTnVsbGFibGU8SlNYLkludHJpbnNpY0VsZW1lbnRzWydpbWcnXVsnc3R5bGUnXT5cbiAgc2l6ZXM6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBzcmNTZXQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBzcmM6IHN0cmluZ1xufVxuXG5jb25zdCBWQUxJRF9MT0FESU5HX1ZBTFVFUyA9IFsnbGF6eScsICdlYWdlcicsIHVuZGVmaW5lZF0gYXMgY29uc3RcblxuLy8gT2JqZWN0LWZpdCB2YWx1ZXMgdGhhdCBhcmUgbm90IHZhbGlkIGJhY2tncm91bmQtc2l6ZSB2YWx1ZXNcbmNvbnN0IElOVkFMSURfQkFDS0dST1VORF9TSVpFX1ZBTFVFUyA9IFtcbiAgJy1tb3otaW5pdGlhbCcsXG4gICdmaWxsJyxcbiAgJ25vbmUnLFxuICAnc2NhbGUtZG93bicsXG4gIHVuZGVmaW5lZCxcbl1cbnR5cGUgTG9hZGluZ1ZhbHVlID0gKHR5cGVvZiBWQUxJRF9MT0FESU5HX1ZBTFVFUylbbnVtYmVyXVxudHlwZSBJbWFnZUNvbmZpZyA9IEltYWdlQ29uZmlnQ29tcGxldGUgJiB7XG4gIGFsbFNpemVzOiBudW1iZXJbXVxuICBvdXRwdXQ/OiAnc3RhbmRhbG9uZScgfCAnZXhwb3J0J1xufVxuXG5leHBvcnQgdHlwZSBJbWFnZUxvYWRlciA9IChwOiBJbWFnZUxvYWRlclByb3BzKSA9PiBzdHJpbmdcblxuLy8gRG8gbm90IGV4cG9ydCAtIHRoaXMgaXMgYW4gaW50ZXJuYWwgdHlwZSBvbmx5XG4vLyBiZWNhdXNlIGBuZXh0LmNvbmZpZy5qc2AgaXMgb25seSBtZWFudCBmb3IgdGhlXG4vLyBidWlsdC1pbiBsb2FkZXJzLCBub3QgZm9yIGEgY3VzdG9tIGxvYWRlcigpIHByb3AuXG50eXBlIEltYWdlTG9hZGVyV2l0aENvbmZpZyA9IChwOiBJbWFnZUxvYWRlclByb3BzV2l0aENvbmZpZykgPT4gc3RyaW5nXG5cbmV4cG9ydCB0eXBlIFBsYWNlaG9sZGVyVmFsdWUgPSAnYmx1cicgfCAnZW1wdHknIHwgYGRhdGE6aW1hZ2UvJHtzdHJpbmd9YFxuZXhwb3J0IHR5cGUgT25Mb2FkID0gUmVhY3QuUmVhY3RFdmVudEhhbmRsZXI8SFRNTEltYWdlRWxlbWVudD4gfCB1bmRlZmluZWRcbmV4cG9ydCB0eXBlIE9uTG9hZGluZ0NvbXBsZXRlID0gKGltZzogSFRNTEltYWdlRWxlbWVudCkgPT4gdm9pZFxuXG5leHBvcnQgdHlwZSBQbGFjZWhvbGRlclN0eWxlID0gUGFydGlhbDxcbiAgUGljazxcbiAgICBDU1NQcm9wZXJ0aWVzLFxuICAgIHwgJ2JhY2tncm91bmRTaXplJ1xuICAgIHwgJ2JhY2tncm91bmRQb3NpdGlvbidcbiAgICB8ICdiYWNrZ3JvdW5kUmVwZWF0J1xuICAgIHwgJ2JhY2tncm91bmRJbWFnZSdcbiAgPlxuPlxuXG5mdW5jdGlvbiBpc1N0YXRpY1JlcXVpcmUoXG4gIHNyYzogU3RhdGljUmVxdWlyZSB8IFN0YXRpY0ltYWdlRGF0YVxuKTogc3JjIGlzIFN0YXRpY1JlcXVpcmUge1xuICByZXR1cm4gKHNyYyBhcyBTdGF0aWNSZXF1aXJlKS5kZWZhdWx0ICE9PSB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gaXNTdGF0aWNJbWFnZURhdGEoXG4gIHNyYzogU3RhdGljUmVxdWlyZSB8IFN0YXRpY0ltYWdlRGF0YVxuKTogc3JjIGlzIFN0YXRpY0ltYWdlRGF0YSB7XG4gIHJldHVybiAoc3JjIGFzIFN0YXRpY0ltYWdlRGF0YSkuc3JjICE9PSB1bmRlZmluZWRcbn1cblxuZnVuY3Rpb24gaXNTdGF0aWNJbXBvcnQoc3JjOiBzdHJpbmcgfCBTdGF0aWNJbXBvcnQpOiBzcmMgaXMgU3RhdGljSW1wb3J0IHtcbiAgcmV0dXJuIChcbiAgICAhIXNyYyAmJlxuICAgIHR5cGVvZiBzcmMgPT09ICdvYmplY3QnICYmXG4gICAgKGlzU3RhdGljUmVxdWlyZShzcmMgYXMgU3RhdGljSW1wb3J0KSB8fFxuICAgICAgaXNTdGF0aWNJbWFnZURhdGEoc3JjIGFzIFN0YXRpY0ltcG9ydCkpXG4gIClcbn1cblxuY29uc3QgYWxsSW1ncyA9IG5ldyBNYXA8XG4gIHN0cmluZyxcbiAgeyBzcmM6IHN0cmluZzsgcHJpb3JpdHk6IGJvb2xlYW47IHBsYWNlaG9sZGVyOiBQbGFjZWhvbGRlclZhbHVlIH1cbj4oKVxubGV0IHBlcmZPYnNlcnZlcjogUGVyZm9ybWFuY2VPYnNlcnZlciB8IHVuZGVmaW5lZFxuXG5mdW5jdGlvbiBnZXRJbnQoeDogdW5rbm93bik6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIGlmICh0eXBlb2YgeCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4geFxuICB9XG4gIGlmICh0eXBlb2YgeCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKHgpID8geCA6IE5hTlxuICB9XG4gIGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycgJiYgL15bMC05XSskLy50ZXN0KHgpKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KHgsIDEwKVxuICB9XG4gIHJldHVybiBOYU5cbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhzKFxuICB7IGRldmljZVNpemVzLCBhbGxTaXplcyB9OiBJbWFnZUNvbmZpZyxcbiAgd2lkdGg6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgc2l6ZXM6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogeyB3aWR0aHM6IG51bWJlcltdOyBraW5kOiAndycgfCAneCcgfSB7XG4gIGlmIChzaXplcykge1xuICAgIC8vIEZpbmQgYWxsIHRoZSBcInZ3XCIgcGVyY2VudCBzaXplcyB1c2VkIGluIHRoZSBzaXplcyBwcm9wXG4gICAgY29uc3Qgdmlld3BvcnRXaWR0aFJlID0gLyhefFxccykoMT9cXGQ/XFxkKXZ3L2dcbiAgICBjb25zdCBwZXJjZW50U2l6ZXMgPSBbXVxuICAgIGZvciAobGV0IG1hdGNoOyAobWF0Y2ggPSB2aWV3cG9ydFdpZHRoUmUuZXhlYyhzaXplcykpOyBtYXRjaCkge1xuICAgICAgcGVyY2VudFNpemVzLnB1c2gocGFyc2VJbnQobWF0Y2hbMl0pKVxuICAgIH1cbiAgICBpZiAocGVyY2VudFNpemVzLmxlbmd0aCkge1xuICAgICAgY29uc3Qgc21hbGxlc3RSYXRpbyA9IE1hdGgubWluKC4uLnBlcmNlbnRTaXplcykgKiAwLjAxXG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aHM6IGFsbFNpemVzLmZpbHRlcigocykgPT4gcyA+PSBkZXZpY2VTaXplc1swXSAqIHNtYWxsZXN0UmF0aW8pLFxuICAgICAgICBraW5kOiAndycsXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHdpZHRoczogYWxsU2l6ZXMsIGtpbmQ6ICd3JyB9XG4gIH1cbiAgaWYgKHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4geyB3aWR0aHM6IGRldmljZVNpemVzLCBraW5kOiAndycgfVxuICB9XG5cbiAgY29uc3Qgd2lkdGhzID0gW1xuICAgIC4uLm5ldyBTZXQoXG4gICAgICAvLyA+IFRoaXMgbWVhbnMgdGhhdCBtb3N0IE9MRUQgc2NyZWVucyB0aGF0IHNheSB0aGV5IGFyZSAzeCByZXNvbHV0aW9uLFxuICAgICAgLy8gPiBhcmUgYWN0dWFsbHkgM3ggaW4gdGhlIGdyZWVuIGNvbG9yLCBidXQgb25seSAxLjV4IGluIHRoZSByZWQgYW5kXG4gICAgICAvLyA+IGJsdWUgY29sb3JzLiBTaG93aW5nIGEgM3ggcmVzb2x1dGlvbiBpbWFnZSBpbiB0aGUgYXBwIHZzIGEgMnhcbiAgICAgIC8vID4gcmVzb2x1dGlvbiBpbWFnZSB3aWxsIGJlIHZpc3VhbGx5IHRoZSBzYW1lLCB0aG91Z2ggdGhlIDN4IGltYWdlXG4gICAgICAvLyA+IHRha2VzIHNpZ25pZmljYW50bHkgbW9yZSBkYXRhLiBFdmVuIHRydWUgM3ggcmVzb2x1dGlvbiBzY3JlZW5zIGFyZVxuICAgICAgLy8gPiB3YXN0ZWZ1bCBhcyB0aGUgaHVtYW4gZXllIGNhbm5vdCBzZWUgdGhhdCBsZXZlbCBvZiBkZXRhaWwgd2l0aG91dFxuICAgICAgLy8gPiBzb21ldGhpbmcgbGlrZSBhIG1hZ25pZnlpbmcgZ2xhc3MuXG4gICAgICAvLyBodHRwczovL2Jsb2cudHdpdHRlci5jb20vZW5naW5lZXJpbmcvZW5fdXMvdG9waWNzL2luZnJhc3RydWN0dXJlLzIwMTkvY2FwcGluZy1pbWFnZS1maWRlbGl0eS1vbi11bHRyYS1oaWdoLXJlc29sdXRpb24tZGV2aWNlcy5odG1sXG4gICAgICBbd2lkdGgsIHdpZHRoICogMiAvKiwgd2lkdGggKiAzKi9dLm1hcChcbiAgICAgICAgKHcpID0+IGFsbFNpemVzLmZpbmQoKHApID0+IHAgPj0gdykgfHwgYWxsU2l6ZXNbYWxsU2l6ZXMubGVuZ3RoIC0gMV1cbiAgICAgIClcbiAgICApLFxuICBdXG4gIHJldHVybiB7IHdpZHRocywga2luZDogJ3gnIH1cbn1cblxudHlwZSBHZW5JbWdBdHRyc0RhdGEgPSB7XG4gIGNvbmZpZzogSW1hZ2VDb25maWdcbiAgc3JjOiBzdHJpbmdcbiAgdW5vcHRpbWl6ZWQ6IGJvb2xlYW5cbiAgbG9hZGVyOiBJbWFnZUxvYWRlcldpdGhDb25maWdcbiAgd2lkdGg/OiBudW1iZXJcbiAgcXVhbGl0eT86IG51bWJlclxuICBzaXplcz86IHN0cmluZ1xufVxuXG50eXBlIEdlbkltZ0F0dHJzUmVzdWx0ID0ge1xuICBzcmM6IHN0cmluZ1xuICBzcmNTZXQ6IHN0cmluZyB8IHVuZGVmaW5lZFxuICBzaXplczogc3RyaW5nIHwgdW5kZWZpbmVkXG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlSW1nQXR0cnMoe1xuICBjb25maWcsXG4gIHNyYyxcbiAgdW5vcHRpbWl6ZWQsXG4gIHdpZHRoLFxuICBxdWFsaXR5LFxuICBzaXplcyxcbiAgbG9hZGVyLFxufTogR2VuSW1nQXR0cnNEYXRhKTogR2VuSW1nQXR0cnNSZXN1bHQge1xuICBpZiAodW5vcHRpbWl6ZWQpIHtcbiAgICByZXR1cm4geyBzcmMsIHNyY1NldDogdW5kZWZpbmVkLCBzaXplczogdW5kZWZpbmVkIH1cbiAgfVxuXG4gIGNvbnN0IHsgd2lkdGhzLCBraW5kIH0gPSBnZXRXaWR0aHMoY29uZmlnLCB3aWR0aCwgc2l6ZXMpXG4gIGNvbnN0IGxhc3QgPSB3aWR0aHMubGVuZ3RoIC0gMVxuXG4gIHJldHVybiB7XG4gICAgc2l6ZXM6ICFzaXplcyAmJiBraW5kID09PSAndycgPyAnMTAwdncnIDogc2l6ZXMsXG4gICAgc3JjU2V0OiB3aWR0aHNcbiAgICAgIC5tYXAoXG4gICAgICAgICh3LCBpKSA9PlxuICAgICAgICAgIGAke2xvYWRlcih7IGNvbmZpZywgc3JjLCBxdWFsaXR5LCB3aWR0aDogdyB9KX0gJHtcbiAgICAgICAgICAgIGtpbmQgPT09ICd3JyA/IHcgOiBpICsgMVxuICAgICAgICAgIH0ke2tpbmR9YFxuICAgICAgKVxuICAgICAgLmpvaW4oJywgJyksXG5cbiAgICAvLyBJdCdzIGludGVuZGVkIHRvIGtlZXAgYHNyY2AgdGhlIGxhc3QgYXR0cmlidXRlIGJlY2F1c2UgUmVhY3QgdXBkYXRlc1xuICAgIC8vIGF0dHJpYnV0ZXMgaW4gb3JkZXIuIElmIHdlIGtlZXAgYHNyY2AgdGhlIGZpcnN0IG9uZSwgU2FmYXJpIHdpbGxcbiAgICAvLyBpbW1lZGlhdGVseSBzdGFydCB0byBmZXRjaCBgc3JjYCwgYmVmb3JlIGBzaXplc2AgYW5kIGBzcmNTZXRgIGFyZSBldmVuXG4gICAgLy8gdXBkYXRlZCBieSBSZWFjdC4gVGhhdCBjYXVzZXMgbXVsdGlwbGUgdW5uZWNlc3NhcnkgcmVxdWVzdHMgaWYgYHNyY1NldGBcbiAgICAvLyBhbmQgYHNpemVzYCBhcmUgZGVmaW5lZC5cbiAgICAvLyBUaGlzIGJ1ZyBjYW5ub3QgYmUgcmVwcm9kdWNlZCBpbiBDaHJvbWUgb3IgRmlyZWZveC5cbiAgICBzcmM6IGxvYWRlcih7IGNvbmZpZywgc3JjLCBxdWFsaXR5LCB3aWR0aDogd2lkdGhzW2xhc3RdIH0pLFxuICB9XG59XG5cbi8qKlxuICogQSBzaGFyZWQgZnVuY3Rpb24sIHVzZWQgb24gYm90aCBjbGllbnQgYW5kIHNlcnZlciwgdG8gZ2VuZXJhdGUgdGhlIHByb3BzIGZvciA8aW1nPi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEltZ1Byb3BzKFxuICB7XG4gICAgc3JjLFxuICAgIHNpemVzLFxuICAgIHVub3B0aW1pemVkID0gZmFsc2UsXG4gICAgcHJpb3JpdHkgPSBmYWxzZSxcbiAgICBsb2FkaW5nLFxuICAgIGNsYXNzTmFtZSxcbiAgICBxdWFsaXR5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBmaWxsID0gZmFsc2UsXG4gICAgc3R5bGUsXG4gICAgb3ZlcnJpZGVTcmMsXG4gICAgb25Mb2FkLFxuICAgIG9uTG9hZGluZ0NvbXBsZXRlLFxuICAgIHBsYWNlaG9sZGVyID0gJ2VtcHR5JyxcbiAgICBibHVyRGF0YVVSTCxcbiAgICBmZXRjaFByaW9yaXR5LFxuICAgIGRlY29kaW5nID0gJ2FzeW5jJyxcbiAgICBsYXlvdXQsXG4gICAgb2JqZWN0Rml0LFxuICAgIG9iamVjdFBvc2l0aW9uLFxuICAgIGxhenlCb3VuZGFyeSxcbiAgICBsYXp5Um9vdCxcbiAgICAuLi5yZXN0XG4gIH06IEltYWdlUHJvcHMsXG4gIF9zdGF0ZToge1xuICAgIGRlZmF1bHRMb2FkZXI6IEltYWdlTG9hZGVyV2l0aENvbmZpZ1xuICAgIGltZ0NvbmY6IEltYWdlQ29uZmlnQ29tcGxldGVcbiAgICBzaG93QWx0VGV4dD86IGJvb2xlYW5cbiAgICBibHVyQ29tcGxldGU/OiBib29sZWFuXG4gIH1cbik6IHtcbiAgcHJvcHM6IEltZ1Byb3BzXG4gIG1ldGE6IHtcbiAgICB1bm9wdGltaXplZDogYm9vbGVhblxuICAgIHByaW9yaXR5OiBib29sZWFuXG4gICAgcGxhY2Vob2xkZXI6IE5vbk51bGxhYmxlPEltYWdlUHJvcHNbJ3BsYWNlaG9sZGVyJ10+XG4gICAgZmlsbDogYm9vbGVhblxuICB9XG59IHtcbiAgY29uc3QgeyBpbWdDb25mLCBzaG93QWx0VGV4dCwgYmx1ckNvbXBsZXRlLCBkZWZhdWx0TG9hZGVyIH0gPSBfc3RhdGVcbiAgbGV0IGNvbmZpZzogSW1hZ2VDb25maWdcbiAgbGV0IGMgPSBpbWdDb25mIHx8IGltYWdlQ29uZmlnRGVmYXVsdFxuICBpZiAoJ2FsbFNpemVzJyBpbiBjKSB7XG4gICAgY29uZmlnID0gYyBhcyBJbWFnZUNvbmZpZ1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGFsbFNpemVzID0gWy4uLmMuZGV2aWNlU2l6ZXMsIC4uLmMuaW1hZ2VTaXplc10uc29ydCgoYSwgYikgPT4gYSAtIGIpXG4gICAgY29uc3QgZGV2aWNlU2l6ZXMgPSBjLmRldmljZVNpemVzLnNvcnQoKGEsIGIpID0+IGEgLSBiKVxuICAgIGNvbnN0IHF1YWxpdGllcyA9IGMucXVhbGl0aWVzPy5zb3J0KChhLCBiKSA9PiBhIC0gYilcbiAgICBjb25maWcgPSB7IC4uLmMsIGFsbFNpemVzLCBkZXZpY2VTaXplcywgcXVhbGl0aWVzIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgZGVmYXVsdExvYWRlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnaW1hZ2VzLmxvYWRlckZpbGUgZGV0ZWN0ZWQgYnV0IHRoZSBmaWxlIGlzIG1pc3NpbmcgZGVmYXVsdCBleHBvcnQuXFxuUmVhZCBtb3JlOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9pbnZhbGlkLWltYWdlcy1jb25maWcnXG4gICAgKVxuICB9XG4gIGxldCBsb2FkZXI6IEltYWdlTG9hZGVyV2l0aENvbmZpZyA9IHJlc3QubG9hZGVyIHx8IGRlZmF1bHRMb2FkZXJcblxuICAvLyBSZW1vdmUgcHJvcGVydHkgc28gaXQncyBub3Qgc3ByZWFkIG9uIDxpbWc+IGVsZW1lbnRcbiAgZGVsZXRlIHJlc3QubG9hZGVyXG4gIGRlbGV0ZSAocmVzdCBhcyBhbnkpLnNyY1NldFxuXG4gIC8vIFRoaXMgc3BlY2lhbCB2YWx1ZSBpbmRpY2F0ZXMgdGhhdCB0aGUgdXNlclxuICAvLyBkaWRuJ3QgZGVmaW5lIGEgXCJsb2FkZXJcIiBwcm9wIG9yIFwibG9hZGVyXCIgY29uZmlnLlxuICBjb25zdCBpc0RlZmF1bHRMb2FkZXIgPSAnX19uZXh0X2ltZ19kZWZhdWx0JyBpbiBsb2FkZXJcblxuICBpZiAoaXNEZWZhdWx0TG9hZGVyKSB7XG4gICAgaWYgKGNvbmZpZy5sb2FkZXIgPT09ICdjdXN0b20nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGlzIG1pc3NpbmcgXCJsb2FkZXJcIiBwcm9wLmAgK1xuICAgICAgICAgIGBcXG5SZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25leHQtaW1hZ2UtbWlzc2luZy1sb2FkZXJgXG4gICAgICApXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIFRoZSB1c2VyIGRlZmluZWQgYSBcImxvYWRlclwiIHByb3Agb3IgY29uZmlnLlxuICAgIC8vIFNpbmNlIHRoZSBjb25maWcgb2JqZWN0IGlzIGludGVybmFsIG9ubHksIHdlXG4gICAgLy8gbXVzdCBub3QgcGFzcyBpdCB0byB0aGUgdXNlci1kZWZpbmVkIFwibG9hZGVyXCIuXG4gICAgY29uc3QgY3VzdG9tSW1hZ2VMb2FkZXIgPSBsb2FkZXIgYXMgSW1hZ2VMb2FkZXJcbiAgICBsb2FkZXIgPSAob2JqKSA9PiB7XG4gICAgICBjb25zdCB7IGNvbmZpZzogXywgLi4ub3B0cyB9ID0gb2JqXG4gICAgICByZXR1cm4gY3VzdG9tSW1hZ2VMb2FkZXIob3B0cylcbiAgICB9XG4gIH1cblxuICBpZiAobGF5b3V0KSB7XG4gICAgaWYgKGxheW91dCA9PT0gJ2ZpbGwnKSB7XG4gICAgICBmaWxsID0gdHJ1ZVxuICAgIH1cbiAgICBjb25zdCBsYXlvdXRUb1N0eWxlOiBSZWNvcmQ8c3RyaW5nLCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkPiA9IHtcbiAgICAgIGludHJpbnNpYzogeyBtYXhXaWR0aDogJzEwMCUnLCBoZWlnaHQ6ICdhdXRvJyB9LFxuICAgICAgcmVzcG9uc2l2ZTogeyB3aWR0aDogJzEwMCUnLCBoZWlnaHQ6ICdhdXRvJyB9LFxuICAgIH1cbiAgICBjb25zdCBsYXlvdXRUb1NpemVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+ID0ge1xuICAgICAgcmVzcG9uc2l2ZTogJzEwMHZ3JyxcbiAgICAgIGZpbGw6ICcxMDB2dycsXG4gICAgfVxuICAgIGNvbnN0IGxheW91dFN0eWxlID0gbGF5b3V0VG9TdHlsZVtsYXlvdXRdXG4gICAgaWYgKGxheW91dFN0eWxlKSB7XG4gICAgICBzdHlsZSA9IHsgLi4uc3R5bGUsIC4uLmxheW91dFN0eWxlIH1cbiAgICB9XG4gICAgY29uc3QgbGF5b3V0U2l6ZXMgPSBsYXlvdXRUb1NpemVzW2xheW91dF1cbiAgICBpZiAobGF5b3V0U2l6ZXMgJiYgIXNpemVzKSB7XG4gICAgICBzaXplcyA9IGxheW91dFNpemVzXG4gICAgfVxuICB9XG5cbiAgbGV0IHN0YXRpY1NyYyA9ICcnXG4gIGxldCB3aWR0aEludCA9IGdldEludCh3aWR0aClcbiAgbGV0IGhlaWdodEludCA9IGdldEludChoZWlnaHQpXG4gIGxldCBibHVyV2lkdGg6IG51bWJlciB8IHVuZGVmaW5lZFxuICBsZXQgYmx1ckhlaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkXG4gIGlmIChpc1N0YXRpY0ltcG9ydChzcmMpKSB7XG4gICAgY29uc3Qgc3RhdGljSW1hZ2VEYXRhID0gaXNTdGF0aWNSZXF1aXJlKHNyYykgPyBzcmMuZGVmYXVsdCA6IHNyY1xuXG4gICAgaWYgKCFzdGF0aWNJbWFnZURhdGEuc3JjKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBbiBvYmplY3Qgc2hvdWxkIG9ubHkgYmUgcGFzc2VkIHRvIHRoZSBpbWFnZSBjb21wb25lbnQgc3JjIHBhcmFtZXRlciBpZiBpdCBjb21lcyBmcm9tIGEgc3RhdGljIGltYWdlIGltcG9ydC4gSXQgbXVzdCBpbmNsdWRlIHNyYy4gUmVjZWl2ZWQgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICBzdGF0aWNJbWFnZURhdGFcbiAgICAgICAgKX1gXG4gICAgICApXG4gICAgfVxuICAgIGlmICghc3RhdGljSW1hZ2VEYXRhLmhlaWdodCB8fCAhc3RhdGljSW1hZ2VEYXRhLndpZHRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBBbiBvYmplY3Qgc2hvdWxkIG9ubHkgYmUgcGFzc2VkIHRvIHRoZSBpbWFnZSBjb21wb25lbnQgc3JjIHBhcmFtZXRlciBpZiBpdCBjb21lcyBmcm9tIGEgc3RhdGljIGltYWdlIGltcG9ydC4gSXQgbXVzdCBpbmNsdWRlIGhlaWdodCBhbmQgd2lkdGguIFJlY2VpdmVkICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgc3RhdGljSW1hZ2VEYXRhXG4gICAgICAgICl9YFxuICAgICAgKVxuICAgIH1cblxuICAgIGJsdXJXaWR0aCA9IHN0YXRpY0ltYWdlRGF0YS5ibHVyV2lkdGhcbiAgICBibHVySGVpZ2h0ID0gc3RhdGljSW1hZ2VEYXRhLmJsdXJIZWlnaHRcbiAgICBibHVyRGF0YVVSTCA9IGJsdXJEYXRhVVJMIHx8IHN0YXRpY0ltYWdlRGF0YS5ibHVyRGF0YVVSTFxuICAgIHN0YXRpY1NyYyA9IHN0YXRpY0ltYWdlRGF0YS5zcmNcblxuICAgIGlmICghZmlsbCkge1xuICAgICAgaWYgKCF3aWR0aEludCAmJiAhaGVpZ2h0SW50KSB7XG4gICAgICAgIHdpZHRoSW50ID0gc3RhdGljSW1hZ2VEYXRhLndpZHRoXG4gICAgICAgIGhlaWdodEludCA9IHN0YXRpY0ltYWdlRGF0YS5oZWlnaHRcbiAgICAgIH0gZWxzZSBpZiAod2lkdGhJbnQgJiYgIWhlaWdodEludCkge1xuICAgICAgICBjb25zdCByYXRpbyA9IHdpZHRoSW50IC8gc3RhdGljSW1hZ2VEYXRhLndpZHRoXG4gICAgICAgIGhlaWdodEludCA9IE1hdGgucm91bmQoc3RhdGljSW1hZ2VEYXRhLmhlaWdodCAqIHJhdGlvKVxuICAgICAgfSBlbHNlIGlmICghd2lkdGhJbnQgJiYgaGVpZ2h0SW50KSB7XG4gICAgICAgIGNvbnN0IHJhdGlvID0gaGVpZ2h0SW50IC8gc3RhdGljSW1hZ2VEYXRhLmhlaWdodFxuICAgICAgICB3aWR0aEludCA9IE1hdGgucm91bmQoc3RhdGljSW1hZ2VEYXRhLndpZHRoICogcmF0aW8pXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHNyYyA9IHR5cGVvZiBzcmMgPT09ICdzdHJpbmcnID8gc3JjIDogc3RhdGljU3JjXG5cbiAgbGV0IGlzTGF6eSA9XG4gICAgIXByaW9yaXR5ICYmIChsb2FkaW5nID09PSAnbGF6eScgfHwgdHlwZW9mIGxvYWRpbmcgPT09ICd1bmRlZmluZWQnKVxuICBpZiAoIXNyYyB8fCBzcmMuc3RhcnRzV2l0aCgnZGF0YTonKSB8fCBzcmMuc3RhcnRzV2l0aCgnYmxvYjonKSkge1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvRGF0YV9VUklzXG4gICAgdW5vcHRpbWl6ZWQgPSB0cnVlXG4gICAgaXNMYXp5ID0gZmFsc2VcbiAgfVxuICBpZiAoY29uZmlnLnVub3B0aW1pemVkKSB7XG4gICAgdW5vcHRpbWl6ZWQgPSB0cnVlXG4gIH1cbiAgaWYgKFxuICAgIGlzRGVmYXVsdExvYWRlciAmJlxuICAgICFjb25maWcuZGFuZ2Vyb3VzbHlBbGxvd1NWRyAmJlxuICAgIHNyYy5zcGxpdCgnPycsIDEpWzBdLmVuZHNXaXRoKCcuc3ZnJylcbiAgKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlIHRvIG1ha2Ugc3ZnIHNlcnZlIGFzLWlzIHRvIGF2b2lkIHByb3h5aW5nXG4gICAgLy8gdGhyb3VnaCB0aGUgYnVpbHQtaW4gSW1hZ2UgT3B0aW1pemF0aW9uIEFQSS5cbiAgICB1bm9wdGltaXplZCA9IHRydWVcbiAgfVxuXG4gIGNvbnN0IHF1YWxpdHlJbnQgPSBnZXRJbnQocXVhbGl0eSlcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChjb25maWcub3V0cHV0ID09PSAnZXhwb3J0JyAmJiBpc0RlZmF1bHRMb2FkZXIgJiYgIXVub3B0aW1pemVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbWFnZSBPcHRpbWl6YXRpb24gdXNpbmcgdGhlIGRlZmF1bHQgbG9hZGVyIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggXFxgeyBvdXRwdXQ6ICdleHBvcnQnIH1cXGAuXG4gIFBvc3NpYmxlIHNvbHV0aW9uczpcbiAgICAtIFJlbW92ZSBcXGB7IG91dHB1dDogJ2V4cG9ydCcgfVxcYCBhbmQgcnVuIFwibmV4dCBzdGFydFwiIHRvIHJ1biBzZXJ2ZXIgbW9kZSBpbmNsdWRpbmcgdGhlIEltYWdlIE9wdGltaXphdGlvbiBBUEkuXG4gICAgLSBDb25maWd1cmUgXFxgeyBpbWFnZXM6IHsgdW5vcHRpbWl6ZWQ6IHRydWUgfSB9XFxgIGluIFxcYG5leHQuY29uZmlnLmpzXFxgIHRvIGRpc2FibGUgdGhlIEltYWdlIE9wdGltaXphdGlvbiBBUEkuXG4gIFJlYWQgbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvZXhwb3J0LWltYWdlLWFwaWBcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKCFzcmMpIHtcbiAgICAgIC8vIFJlYWN0IGRvZXNuJ3Qgc2hvdyB0aGUgc3RhY2sgdHJhY2UgYW5kIHRoZXJlJ3NcbiAgICAgIC8vIG5vIGBzcmNgIHRvIGhlbHAgaWRlbnRpZnkgd2hpY2ggaW1hZ2UsIHNvIHdlXG4gICAgICAvLyBpbnN0ZWFkIGNvbnNvbGUuZXJyb3IocmVmKSBkdXJpbmcgbW91bnQuXG4gICAgICB1bm9wdGltaXplZCA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZpbGwpIHtcbiAgICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaGFzIGJvdGggXCJ3aWR0aFwiIGFuZCBcImZpbGxcIiBwcm9wZXJ0aWVzLiBPbmx5IG9uZSBzaG91bGQgYmUgdXNlZC5gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGlmIChoZWlnaHQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW1hZ2Ugd2l0aCBzcmMgXCIke3NyY31cIiBoYXMgYm90aCBcImhlaWdodFwiIGFuZCBcImZpbGxcIiBwcm9wZXJ0aWVzLiBPbmx5IG9uZSBzaG91bGQgYmUgdXNlZC5gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdHlsZT8ucG9zaXRpb24gJiYgc3R5bGUucG9zaXRpb24gIT09ICdhYnNvbHV0ZScpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW1hZ2Ugd2l0aCBzcmMgXCIke3NyY31cIiBoYXMgYm90aCBcImZpbGxcIiBhbmQgXCJzdHlsZS5wb3NpdGlvblwiIHByb3BlcnRpZXMuIEltYWdlcyB3aXRoIFwiZmlsbFwiIGFsd2F5cyB1c2UgcG9zaXRpb24gYWJzb2x1dGUgLSBpdCBjYW5ub3QgYmUgbW9kaWZpZWQuYFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3R5bGU/LndpZHRoICYmIHN0eWxlLndpZHRoICE9PSAnMTAwJScpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW1hZ2Ugd2l0aCBzcmMgXCIke3NyY31cIiBoYXMgYm90aCBcImZpbGxcIiBhbmQgXCJzdHlsZS53aWR0aFwiIHByb3BlcnRpZXMuIEltYWdlcyB3aXRoIFwiZmlsbFwiIGFsd2F5cyB1c2Ugd2lkdGggMTAwJSAtIGl0IGNhbm5vdCBiZSBtb2RpZmllZC5gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdHlsZT8uaGVpZ2h0ICYmIHN0eWxlLmhlaWdodCAhPT0gJzEwMCUnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaGFzIGJvdGggXCJmaWxsXCIgYW5kIFwic3R5bGUuaGVpZ2h0XCIgcHJvcGVydGllcy4gSW1hZ2VzIHdpdGggXCJmaWxsXCIgYWx3YXlzIHVzZSBoZWlnaHQgMTAwJSAtIGl0IGNhbm5vdCBiZSBtb2RpZmllZC5gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHlwZW9mIHdpZHRoSW50ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGlzIG1pc3NpbmcgcmVxdWlyZWQgXCJ3aWR0aFwiIHByb3BlcnR5LmBcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSBpZiAoaXNOYU4od2lkdGhJbnQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaGFzIGludmFsaWQgXCJ3aWR0aFwiIHByb3BlcnR5LiBFeHBlY3RlZCBhIG51bWVyaWMgdmFsdWUgaW4gcGl4ZWxzIGJ1dCByZWNlaXZlZCBcIiR7d2lkdGh9XCIuYFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGhlaWdodEludCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW1hZ2Ugd2l0aCBzcmMgXCIke3NyY31cIiBpcyBtaXNzaW5nIHJlcXVpcmVkIFwiaGVpZ2h0XCIgcHJvcGVydHkuYFxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIGlmIChpc05hTihoZWlnaHRJbnQpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaGFzIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wZXJ0eS4gRXhwZWN0ZWQgYSBudW1lcmljIHZhbHVlIGluIHBpeGVscyBidXQgcmVjZWl2ZWQgXCIke2hlaWdodH1cIi5gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gICAgICAgIGlmICgvXltcXHgwMC1cXHgyMF0vLnRlc3Qoc3JjKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGNhbm5vdCBzdGFydCB3aXRoIGEgc3BhY2Ugb3IgY29udHJvbCBjaGFyYWN0ZXIuIFVzZSBzcmMudHJpbVN0YXJ0KCkgdG8gcmVtb3ZlIGl0IG9yIGVuY29kZVVSSUNvbXBvbmVudChzcmMpIHRvIGtlZXAgaXQuYFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICAgICAgICBpZiAoL1tcXHgwMC1cXHgyMF0kLy50ZXN0KHNyYykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW1hZ2Ugd2l0aCBzcmMgXCIke3NyY31cIiBjYW5ub3QgZW5kIHdpdGggYSBzcGFjZSBvciBjb250cm9sIGNoYXJhY3Rlci4gVXNlIHNyYy50cmltRW5kKCkgdG8gcmVtb3ZlIGl0IG9yIGVuY29kZVVSSUNvbXBvbmVudChzcmMpIHRvIGtlZXAgaXQuYFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIVZBTElEX0xPQURJTkdfVkFMVUVTLmluY2x1ZGVzKGxvYWRpbmcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGhhcyBpbnZhbGlkIFwibG9hZGluZ1wiIHByb3BlcnR5LiBQcm92aWRlZCBcIiR7bG9hZGluZ31cIiBzaG91bGQgYmUgb25lIG9mICR7VkFMSURfTE9BRElOR19WQUxVRVMubWFwKFxuICAgICAgICAgIFN0cmluZ1xuICAgICAgICApLmpvaW4oJywnKX0uYFxuICAgICAgKVxuICAgIH1cbiAgICBpZiAocHJpb3JpdHkgJiYgbG9hZGluZyA9PT0gJ2xhenknKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGhhcyBib3RoIFwicHJpb3JpdHlcIiBhbmQgXCJsb2FkaW5nPSdsYXp5J1wiIHByb3BlcnRpZXMuIE9ubHkgb25lIHNob3VsZCBiZSB1c2VkLmBcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKFxuICAgICAgcGxhY2Vob2xkZXIgIT09ICdlbXB0eScgJiZcbiAgICAgIHBsYWNlaG9sZGVyICE9PSAnYmx1cicgJiZcbiAgICAgICFwbGFjZWhvbGRlci5zdGFydHNXaXRoKCdkYXRhOmltYWdlLycpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGhhcyBpbnZhbGlkIFwicGxhY2Vob2xkZXJcIiBwcm9wZXJ0eSBcIiR7cGxhY2Vob2xkZXJ9XCIuYFxuICAgICAgKVxuICAgIH1cbiAgICBpZiAocGxhY2Vob2xkZXIgIT09ICdlbXB0eScpIHtcbiAgICAgIGlmICh3aWR0aEludCAmJiBoZWlnaHRJbnQgJiYgd2lkdGhJbnQgKiBoZWlnaHRJbnQgPCAxNjAwKSB7XG4gICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgIGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGlzIHNtYWxsZXIgdGhhbiA0MHg0MC4gQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIFwicGxhY2Vob2xkZXJcIiBwcm9wZXJ0eSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlLmBcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocXVhbGl0eUludCAmJiBxdWFsaXR5SW50ICE9PSA3NSAmJiAhY29uZmlnLnF1YWxpdGllcykge1xuICAgICAgd2Fybk9uY2UoXG4gICAgICAgIGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGlzIHVzaW5nIHF1YWxpdHkgXCIke3F1YWxpdHlJbnR9XCIgd2hpY2ggaXMgbm90IGNvbmZpZ3VyZWQgaW4gaW1hZ2VzLnF1YWxpdGllcy4gVGhpcyBjb25maWcgd2lsbCBiZSByZXF1aXJlZCBzdGFydGluZyBpbiBOZXh0LmpzIDE2LmAgK1xuICAgICAgICAgIGBcXG5SZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25leHQtaW1hZ2UtdW5jb25maWd1cmVkLXF1YWxpdGllc2BcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKFxuICAgICAgc3JjLnN0YXJ0c1dpdGgoJy8nKSAmJlxuICAgICAgc3JjLmluY2x1ZGVzKCc/JykgJiZcbiAgICAgICghY29uZmlnPy5sb2NhbFBhdHRlcm5zPy5sZW5ndGggfHxcbiAgICAgICAgKGNvbmZpZy5sb2NhbFBhdHRlcm5zLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgICAgIGNvbmZpZy5sb2NhbFBhdHRlcm5zWzBdLnBhdGhuYW1lID09PSAnL19uZXh0L3N0YXRpYy9tZWRpYS8qKicpKVxuICAgICkge1xuICAgICAgd2Fybk9uY2UoXG4gICAgICAgIGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGlzIHVzaW5nIGEgcXVlcnkgc3RyaW5nIHdoaWNoIGlzIG5vdCBjb25maWd1cmVkIGluIGltYWdlcy5sb2NhbFBhdHRlcm5zLiBUaGlzIGNvbmZpZyB3aWxsIGJlIHJlcXVpcmVkIHN0YXJ0aW5nIGluIE5leHQuanMgMTYuYCArXG4gICAgICAgICAgYFxcblJlYWQgbW9yZTogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvbmV4dC1pbWFnZS11bmNvbmZpZ3VyZWQtbG9jYWxwYXR0ZXJuc2BcbiAgICAgIClcbiAgICB9XG4gICAgaWYgKHBsYWNlaG9sZGVyID09PSAnYmx1cicgJiYgIWJsdXJEYXRhVVJMKSB7XG4gICAgICBjb25zdCBWQUxJRF9CTFVSX0VYVCA9IFsnanBlZycsICdwbmcnLCAnd2VicCcsICdhdmlmJ10gLy8gc2hvdWxkIG1hdGNoIG5leHQtaW1hZ2UtbG9hZGVyXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaGFzIFwicGxhY2Vob2xkZXI9J2JsdXInXCIgcHJvcGVydHkgYnV0IGlzIG1pc3NpbmcgdGhlIFwiYmx1ckRhdGFVUkxcIiBwcm9wZXJ0eS5cbiAgICAgICAgUG9zc2libGUgc29sdXRpb25zOlxuICAgICAgICAgIC0gQWRkIGEgXCJibHVyRGF0YVVSTFwiIHByb3BlcnR5LCB0aGUgY29udGVudHMgc2hvdWxkIGJlIGEgc21hbGwgRGF0YSBVUkwgdG8gcmVwcmVzZW50IHRoZSBpbWFnZVxuICAgICAgICAgIC0gQ2hhbmdlIHRoZSBcInNyY1wiIHByb3BlcnR5IHRvIGEgc3RhdGljIGltcG9ydCB3aXRoIG9uZSBvZiB0aGUgc3VwcG9ydGVkIGZpbGUgdHlwZXM6ICR7VkFMSURfQkxVUl9FWFQuam9pbihcbiAgICAgICAgICAgICcsJ1xuICAgICAgICAgICl9IChhbmltYXRlZCBpbWFnZXMgbm90IHN1cHBvcnRlZClcbiAgICAgICAgICAtIFJlbW92ZSB0aGUgXCJwbGFjZWhvbGRlclwiIHByb3BlcnR5LCBlZmZlY3RpdmVseSBubyBibHVyIGVmZmVjdFxuICAgICAgICBSZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL3BsYWNlaG9sZGVyLWJsdXItZGF0YS11cmxgXG4gICAgICApXG4gICAgfVxuICAgIGlmICgncmVmJyBpbiByZXN0KSB7XG4gICAgICB3YXJuT25jZShcbiAgICAgICAgYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaXMgdXNpbmcgdW5zdXBwb3J0ZWQgXCJyZWZcIiBwcm9wZXJ0eS4gQ29uc2lkZXIgdXNpbmcgdGhlIFwib25Mb2FkXCIgcHJvcGVydHkgaW5zdGVhZC5gXG4gICAgICApXG4gICAgfVxuXG4gICAgaWYgKCF1bm9wdGltaXplZCAmJiAhaXNEZWZhdWx0TG9hZGVyKSB7XG4gICAgICBjb25zdCB1cmxTdHIgPSBsb2FkZXIoe1xuICAgICAgICBjb25maWcsXG4gICAgICAgIHNyYyxcbiAgICAgICAgd2lkdGg6IHdpZHRoSW50IHx8IDQwMCxcbiAgICAgICAgcXVhbGl0eTogcXVhbGl0eUludCB8fCA3NSxcbiAgICAgIH0pXG4gICAgICBsZXQgdXJsOiBVUkwgfCB1bmRlZmluZWRcbiAgICAgIHRyeSB7XG4gICAgICAgIHVybCA9IG5ldyBVUkwodXJsU3RyKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7fVxuICAgICAgaWYgKHVybFN0ciA9PT0gc3JjIHx8ICh1cmwgJiYgdXJsLnBhdGhuYW1lID09PSBzcmMgJiYgIXVybC5zZWFyY2gpKSB7XG4gICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgIGBJbWFnZSB3aXRoIHNyYyBcIiR7c3JjfVwiIGhhcyBhIFwibG9hZGVyXCIgcHJvcGVydHkgdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgd2lkdGguIFBsZWFzZSBpbXBsZW1lbnQgaXQgb3IgdXNlIHRoZSBcInVub3B0aW1pemVkXCIgcHJvcGVydHkgaW5zdGVhZC5gICtcbiAgICAgICAgICAgIGBcXG5SZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25leHQtaW1hZ2UtbWlzc2luZy1sb2FkZXItd2lkdGhgXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAob25Mb2FkaW5nQ29tcGxldGUpIHtcbiAgICAgIHdhcm5PbmNlKFxuICAgICAgICBgSW1hZ2Ugd2l0aCBzcmMgXCIke3NyY31cIiBpcyB1c2luZyBkZXByZWNhdGVkIFwib25Mb2FkaW5nQ29tcGxldGVcIiBwcm9wZXJ0eS4gUGxlYXNlIHVzZSB0aGUgXCJvbkxvYWRcIiBwcm9wZXJ0eSBpbnN0ZWFkLmBcbiAgICAgIClcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtsZWdhY3lLZXksIGxlZ2FjeVZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh7XG4gICAgICBsYXlvdXQsXG4gICAgICBvYmplY3RGaXQsXG4gICAgICBvYmplY3RQb3NpdGlvbixcbiAgICAgIGxhenlCb3VuZGFyeSxcbiAgICAgIGxhenlSb290LFxuICAgIH0pKSB7XG4gICAgICBpZiAobGVnYWN5VmFsdWUpIHtcbiAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgYEltYWdlIHdpdGggc3JjIFwiJHtzcmN9XCIgaGFzIGxlZ2FjeSBwcm9wIFwiJHtsZWdhY3lLZXl9XCIuIERpZCB5b3UgZm9yZ2V0IHRvIHJ1biB0aGUgY29kZW1vZD9gICtcbiAgICAgICAgICAgIGBcXG5SZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25leHQtaW1hZ2UtdXBncmFkZS10by0xM2BcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAhcGVyZk9ic2VydmVyICYmXG4gICAgICB3aW5kb3cuUGVyZm9ybWFuY2VPYnNlcnZlclxuICAgICkge1xuICAgICAgcGVyZk9ic2VydmVyID0gbmV3IFBlcmZvcm1hbmNlT2JzZXJ2ZXIoKGVudHJ5TGlzdCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJ5TGlzdC5nZXRFbnRyaWVzKCkpIHtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlIC0gbWlzc2luZyBcIkxhcmdlc3RDb250ZW50ZnVsUGFpbnRcIiBjbGFzcyB3aXRoIFwiZWxlbWVudFwiIHByb3BcbiAgICAgICAgICBjb25zdCBpbWdTcmMgPSBlbnRyeT8uZWxlbWVudD8uc3JjIHx8ICcnXG4gICAgICAgICAgY29uc3QgbGNwSW1hZ2UgPSBhbGxJbWdzLmdldChpbWdTcmMpXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgbGNwSW1hZ2UgJiZcbiAgICAgICAgICAgICFsY3BJbWFnZS5wcmlvcml0eSAmJlxuICAgICAgICAgICAgbGNwSW1hZ2UucGxhY2Vob2xkZXIgPT09ICdlbXB0eScgJiZcbiAgICAgICAgICAgICFsY3BJbWFnZS5zcmMuc3RhcnRzV2l0aCgnZGF0YTonKSAmJlxuICAgICAgICAgICAgIWxjcEltYWdlLnNyYy5zdGFydHNXaXRoKCdibG9iOicpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBodHRwczovL3dlYi5kZXYvbGNwLyNtZWFzdXJlLWxjcC1pbi1qYXZhc2NyaXB0XG4gICAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgICAgYEltYWdlIHdpdGggc3JjIFwiJHtsY3BJbWFnZS5zcmN9XCIgd2FzIGRldGVjdGVkIGFzIHRoZSBMYXJnZXN0IENvbnRlbnRmdWwgUGFpbnQgKExDUCkuIFBsZWFzZSBhZGQgdGhlIFwicHJpb3JpdHlcIiBwcm9wZXJ0eSBpZiB0aGlzIGltYWdlIGlzIGFib3ZlIHRoZSBmb2xkLmAgK1xuICAgICAgICAgICAgICAgIGBcXG5SZWFkIG1vcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNwcmlvcml0eWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICB0cnkge1xuICAgICAgICBwZXJmT2JzZXJ2ZXIub2JzZXJ2ZSh7XG4gICAgICAgICAgdHlwZTogJ2xhcmdlc3QtY29udGVudGZ1bC1wYWludCcsXG4gICAgICAgICAgYnVmZmVyZWQ6IHRydWUsXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gTG9nIGVycm9yIGJ1dCBkb24ndCBjcmFzaCB0aGUgYXBwXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBjb25zdCBpbWdTdHlsZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgZmlsbFxuICAgICAgPyB7XG4gICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgICAgICBsZWZ0OiAwLFxuICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICByaWdodDogMCxcbiAgICAgICAgICBib3R0b206IDAsXG4gICAgICAgICAgb2JqZWN0Rml0LFxuICAgICAgICAgIG9iamVjdFBvc2l0aW9uLFxuICAgICAgICB9XG4gICAgICA6IHt9LFxuICAgIHNob3dBbHRUZXh0ID8ge30gOiB7IGNvbG9yOiAndHJhbnNwYXJlbnQnIH0sXG4gICAgc3R5bGVcbiAgKVxuXG4gIGNvbnN0IGJhY2tncm91bmRJbWFnZSA9XG4gICAgIWJsdXJDb21wbGV0ZSAmJiBwbGFjZWhvbGRlciAhPT0gJ2VtcHR5J1xuICAgICAgPyBwbGFjZWhvbGRlciA9PT0gJ2JsdXInXG4gICAgICAgID8gYHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCR7Z2V0SW1hZ2VCbHVyU3ZnKHtcbiAgICAgICAgICAgIHdpZHRoSW50LFxuICAgICAgICAgICAgaGVpZ2h0SW50LFxuICAgICAgICAgICAgYmx1cldpZHRoLFxuICAgICAgICAgICAgYmx1ckhlaWdodCxcbiAgICAgICAgICAgIGJsdXJEYXRhVVJMOiBibHVyRGF0YVVSTCB8fCAnJywgLy8gYXNzdW1lIG5vdCB1bmRlZmluZWRcbiAgICAgICAgICAgIG9iamVjdEZpdDogaW1nU3R5bGUub2JqZWN0Rml0LFxuICAgICAgICAgIH0pfVwiKWBcbiAgICAgICAgOiBgdXJsKFwiJHtwbGFjZWhvbGRlcn1cIilgIC8vIGFzc3VtZSBgZGF0YTppbWFnZS9gXG4gICAgICA6IG51bGxcblxuICBjb25zdCBiYWNrZ3JvdW5kU2l6ZSA9ICFJTlZBTElEX0JBQ0tHUk9VTkRfU0laRV9WQUxVRVMuaW5jbHVkZXMoXG4gICAgaW1nU3R5bGUub2JqZWN0Rml0XG4gIClcbiAgICA/IGltZ1N0eWxlLm9iamVjdEZpdFxuICAgIDogaW1nU3R5bGUub2JqZWN0Rml0ID09PSAnZmlsbCdcbiAgICAgID8gJzEwMCUgMTAwJScgLy8gdGhlIGJhY2tncm91bmQtc2l6ZSBlcXVpdmFsZW50IG9mIGBmaWxsYFxuICAgICAgOiAnY292ZXInXG5cbiAgbGV0IHBsYWNlaG9sZGVyU3R5bGU6IFBsYWNlaG9sZGVyU3R5bGUgPSBiYWNrZ3JvdW5kSW1hZ2VcbiAgICA/IHtcbiAgICAgICAgYmFja2dyb3VuZFNpemUsXG4gICAgICAgIGJhY2tncm91bmRQb3NpdGlvbjogaW1nU3R5bGUub2JqZWN0UG9zaXRpb24gfHwgJzUwJSA1MCUnLFxuICAgICAgICBiYWNrZ3JvdW5kUmVwZWF0OiAnbm8tcmVwZWF0JyxcbiAgICAgICAgYmFja2dyb3VuZEltYWdlLFxuICAgICAgfVxuICAgIDoge31cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcpIHtcbiAgICBpZiAoXG4gICAgICBwbGFjZWhvbGRlclN0eWxlLmJhY2tncm91bmRJbWFnZSAmJlxuICAgICAgcGxhY2Vob2xkZXIgPT09ICdibHVyJyAmJlxuICAgICAgYmx1ckRhdGFVUkw/LnN0YXJ0c1dpdGgoJy8nKVxuICAgICkge1xuICAgICAgLy8gRHVyaW5nIGBuZXh0IGRldmAsIHdlIGRvbid0IHdhbnQgdG8gZ2VuZXJhdGUgYmx1ciBwbGFjZWhvbGRlcnMgd2l0aCB3ZWJwYWNrXG4gICAgICAvLyBiZWNhdXNlIGl0IGNhbiBkZWxheSBzdGFydGluZyB0aGUgZGV2IHNlcnZlci4gSW5zdGVhZCwgYG5leHQtaW1hZ2UtbG9hZGVyLmpzYFxuICAgICAgLy8gd2lsbCBpbmxpbmUgYSBzcGVjaWFsIHVybCB0byBsYXppbHkgZ2VuZXJhdGUgdGhlIGJsdXIgcGxhY2Vob2xkZXIgYXQgcmVxdWVzdCB0aW1lLlxuICAgICAgcGxhY2Vob2xkZXJTdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKFwiJHtibHVyRGF0YVVSTH1cIilgXG4gICAgfVxuICB9XG5cbiAgY29uc3QgaW1nQXR0cmlidXRlcyA9IGdlbmVyYXRlSW1nQXR0cnMoe1xuICAgIGNvbmZpZyxcbiAgICBzcmMsXG4gICAgdW5vcHRpbWl6ZWQsXG4gICAgd2lkdGg6IHdpZHRoSW50LFxuICAgIHF1YWxpdHk6IHF1YWxpdHlJbnQsXG4gICAgc2l6ZXMsXG4gICAgbG9hZGVyLFxuICB9KVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBsZXQgZnVsbFVybDogVVJMXG4gICAgICB0cnkge1xuICAgICAgICBmdWxsVXJsID0gbmV3IFVSTChpbWdBdHRyaWJ1dGVzLnNyYylcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgZnVsbFVybCA9IG5ldyBVUkwoaW1nQXR0cmlidXRlcy5zcmMsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKVxuICAgICAgfVxuICAgICAgYWxsSW1ncy5zZXQoZnVsbFVybC5ocmVmLCB7IHNyYywgcHJpb3JpdHksIHBsYWNlaG9sZGVyIH0pXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcHJvcHM6IEltZ1Byb3BzID0ge1xuICAgIC4uLnJlc3QsXG4gICAgbG9hZGluZzogaXNMYXp5ID8gJ2xhenknIDogbG9hZGluZyxcbiAgICBmZXRjaFByaW9yaXR5LFxuICAgIHdpZHRoOiB3aWR0aEludCxcbiAgICBoZWlnaHQ6IGhlaWdodEludCxcbiAgICBkZWNvZGluZyxcbiAgICBjbGFzc05hbWUsXG4gICAgc3R5bGU6IHsgLi4uaW1nU3R5bGUsIC4uLnBsYWNlaG9sZGVyU3R5bGUgfSxcbiAgICBzaXplczogaW1nQXR0cmlidXRlcy5zaXplcyxcbiAgICBzcmNTZXQ6IGltZ0F0dHJpYnV0ZXMuc3JjU2V0LFxuICAgIHNyYzogb3ZlcnJpZGVTcmMgfHwgaW1nQXR0cmlidXRlcy5zcmMsXG4gIH1cbiAgY29uc3QgbWV0YSA9IHsgdW5vcHRpbWl6ZWQsIHByaW9yaXR5LCBwbGFjZWhvbGRlciwgZmlsbCB9XG4gIHJldHVybiB7IHByb3BzLCBtZXRhIH1cbn1cbiJdLCJuYW1lcyI6WyJnZXRJbWdQcm9wcyIsIlZBTElEX0xPQURJTkdfVkFMVUVTIiwidW5kZWZpbmVkIiwiSU5WQUxJRF9CQUNLR1JPVU5EX1NJWkVfVkFMVUVTIiwiaXNTdGF0aWNSZXF1aXJlIiwic3JjIiwiZGVmYXVsdCIsImlzU3RhdGljSW1hZ2VEYXRhIiwiaXNTdGF0aWNJbXBvcnQiLCJhbGxJbWdzIiwiTWFwIiwicGVyZk9ic2VydmVyIiwiZ2V0SW50IiwieCIsIk51bWJlciIsImlzRmluaXRlIiwiTmFOIiwidGVzdCIsInBhcnNlSW50IiwiZ2V0V2lkdGhzIiwid2lkdGgiLCJzaXplcyIsImRldmljZVNpemVzIiwiYWxsU2l6ZXMiLCJ2aWV3cG9ydFdpZHRoUmUiLCJwZXJjZW50U2l6ZXMiLCJtYXRjaCIsImV4ZWMiLCJwdXNoIiwibGVuZ3RoIiwic21hbGxlc3RSYXRpbyIsIk1hdGgiLCJtaW4iLCJ3aWR0aHMiLCJmaWx0ZXIiLCJzIiwia2luZCIsIlNldCIsIm1hcCIsInciLCJmaW5kIiwicCIsImdlbmVyYXRlSW1nQXR0cnMiLCJjb25maWciLCJ1bm9wdGltaXplZCIsInF1YWxpdHkiLCJsb2FkZXIiLCJzcmNTZXQiLCJsYXN0IiwiaSIsImpvaW4iLCJfc3RhdGUiLCJwcmlvcml0eSIsImxvYWRpbmciLCJjbGFzc05hbWUiLCJoZWlnaHQiLCJmaWxsIiwic3R5bGUiLCJvdmVycmlkZVNyYyIsIm9uTG9hZCIsIm9uTG9hZGluZ0NvbXBsZXRlIiwicGxhY2Vob2xkZXIiLCJibHVyRGF0YVVSTCIsImZldGNoUHJpb3JpdHkiLCJkZWNvZGluZyIsImxheW91dCIsIm9iamVjdEZpdCIsIm9iamVjdFBvc2l0aW9uIiwibGF6eUJvdW5kYXJ5IiwibGF6eVJvb3QiLCJyZXN0IiwiaW1nQ29uZiIsInNob3dBbHRUZXh0IiwiYmx1ckNvbXBsZXRlIiwiZGVmYXVsdExvYWRlciIsImMiLCJpbWFnZUNvbmZpZ0RlZmF1bHQiLCJpbWFnZVNpemVzIiwic29ydCIsImEiLCJiIiwicXVhbGl0aWVzIiwiRXJyb3IiLCJpc0RlZmF1bHRMb2FkZXIiLCJjdXN0b21JbWFnZUxvYWRlciIsIm9iaiIsIl8iLCJvcHRzIiwibGF5b3V0VG9TdHlsZSIsImludHJpbnNpYyIsIm1heFdpZHRoIiwicmVzcG9uc2l2ZSIsImxheW91dFRvU2l6ZXMiLCJsYXlvdXRTdHlsZSIsImxheW91dFNpemVzIiwic3RhdGljU3JjIiwid2lkdGhJbnQiLCJoZWlnaHRJbnQiLCJibHVyV2lkdGgiLCJibHVySGVpZ2h0Iiwic3RhdGljSW1hZ2VEYXRhIiwiSlNPTiIsInN0cmluZ2lmeSIsInJhdGlvIiwicm91bmQiLCJpc0xhenkiLCJzdGFydHNXaXRoIiwiZGFuZ2Vyb3VzbHlBbGxvd1NWRyIsInNwbGl0IiwiZW5kc1dpdGgiLCJxdWFsaXR5SW50IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwib3V0cHV0IiwicG9zaXRpb24iLCJpc05hTiIsImluY2x1ZGVzIiwiU3RyaW5nIiwid2Fybk9uY2UiLCJsb2NhbFBhdHRlcm5zIiwicGF0aG5hbWUiLCJWQUxJRF9CTFVSX0VYVCIsInVybFN0ciIsInVybCIsIlVSTCIsImVyciIsInNlYXJjaCIsImxlZ2FjeUtleSIsImxlZ2FjeVZhbHVlIiwiT2JqZWN0IiwiZW50cmllcyIsIndpbmRvdyIsIlBlcmZvcm1hbmNlT2JzZXJ2ZXIiLCJlbnRyeUxpc3QiLCJlbnRyeSIsImdldEVudHJpZXMiLCJpbWdTcmMiLCJlbGVtZW50IiwibGNwSW1hZ2UiLCJnZXQiLCJvYnNlcnZlIiwidHlwZSIsImJ1ZmZlcmVkIiwiY29uc29sZSIsImVycm9yIiwiaW1nU3R5bGUiLCJhc3NpZ24iLCJsZWZ0IiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJjb2xvciIsImJhY2tncm91bmRJbWFnZSIsImdldEltYWdlQmx1clN2ZyIsImJhY2tncm91bmRTaXplIiwicGxhY2Vob2xkZXJTdHlsZSIsImJhY2tncm91bmRQb3NpdGlvbiIsImJhY2tncm91bmRSZXBlYXQiLCJpbWdBdHRyaWJ1dGVzIiwiZnVsbFVybCIsImUiLCJsb2NhdGlvbiIsImhyZWYiLCJzZXQiLCJwcm9wcyIsIm1ldGEiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/get-img-props.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/head.js":
|
||
/*!***************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/head.js ***!
|
||
\***************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/* __next_internal_client_entry_do_not_use__ cjs */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return _default;\n },\n defaultHead: function() {\n return defaultHead;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _jsxruntime = __webpack_require__(/*! react/jsx-runtime */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/jsx-runtime.js\");\nconst _react = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _sideeffect = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! ./side-effect */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/side-effect.js\"));\nconst _ampcontextsharedruntime = __webpack_require__(/*! ./amp-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/amp-context.shared-runtime.js\");\nconst _headmanagercontextsharedruntime = __webpack_require__(/*! ./head-manager-context.shared-runtime */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.js\");\nconst _ampmode = __webpack_require__(/*! ./amp-mode */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/amp-mode.js\");\nconst _warnonce = __webpack_require__(/*! ./utils/warn-once */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils/warn-once.js\");\nfunction defaultHead(inAmpMode) {\n if (inAmpMode === void 0) inAmpMode = false;\n const head = [\n /*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n charSet: \"utf-8\"\n }, \"charset\")\n ];\n if (!inAmpMode) {\n head.push(/*#__PURE__*/ (0, _jsxruntime.jsx)(\"meta\", {\n name: \"viewport\",\n content: \"width=device-width\"\n }, \"viewport\"));\n }\n return head;\n}\nfunction onlyReactElement(list, child) {\n // React children can be \"string\" or \"number\" in this case we ignore them for backwards compat\n if (typeof child === 'string' || typeof child === 'number') {\n return list;\n }\n // Adds support for React.Fragment\n if (child.type === _react.default.Fragment) {\n return list.concat(_react.default.Children.toArray(child.props.children).reduce((fragmentList, fragmentChild)=>{\n if (typeof fragmentChild === 'string' || typeof fragmentChild === 'number') {\n return fragmentList;\n }\n return fragmentList.concat(fragmentChild);\n }, []));\n }\n return list.concat(child);\n}\nconst METATYPES = [\n 'name',\n 'httpEquiv',\n 'charSet',\n 'itemProp'\n];\n/*\n returns a function for filtering head child elements\n which shouldn't be duplicated, like <title/>\n Also adds support for deduplicated `key` properties\n*/ function unique() {\n const keys = new Set();\n const tags = new Set();\n const metaTypes = new Set();\n const metaCategories = {};\n return (h)=>{\n let isUnique = true;\n let hasKey = false;\n if (h.key && typeof h.key !== 'number' && h.key.indexOf('$') > 0) {\n hasKey = true;\n const key = h.key.slice(h.key.indexOf('$') + 1);\n if (keys.has(key)) {\n isUnique = false;\n } else {\n keys.add(key);\n }\n }\n // eslint-disable-next-line default-case\n switch(h.type){\n case 'title':\n case 'base':\n if (tags.has(h.type)) {\n isUnique = false;\n } else {\n tags.add(h.type);\n }\n break;\n case 'meta':\n for(let i = 0, len = METATYPES.length; i < len; i++){\n const metatype = METATYPES[i];\n if (!h.props.hasOwnProperty(metatype)) continue;\n if (metatype === 'charSet') {\n if (metaTypes.has(metatype)) {\n isUnique = false;\n } else {\n metaTypes.add(metatype);\n }\n } else {\n const category = h.props[metatype];\n const categories = metaCategories[metatype] || new Set();\n if ((metatype !== 'name' || !hasKey) && categories.has(category)) {\n isUnique = false;\n } else {\n categories.add(category);\n metaCategories[metatype] = categories;\n }\n }\n }\n break;\n }\n return isUnique;\n };\n}\n/**\n *\n * @param headChildrenElements List of children of <Head>\n */ function reduceComponents(headChildrenElements, props) {\n const { inAmpMode } = props;\n return headChildrenElements.reduce(onlyReactElement, []).reverse().concat(defaultHead(inAmpMode).reverse()).filter(unique()).reverse().map((c, i)=>{\n const key = c.key || i;\n if (true) {\n // omit JSON-LD structured data snippets from the warning\n if (c.type === 'script' && c.props['type'] !== 'application/ld+json') {\n const srcMessage = c.props['src'] ? '<script> tag with src=\"' + c.props['src'] + '\"' : \"inline <script>\";\n (0, _warnonce.warnOnce)(\"Do not add <script> tags using next/head (see \" + srcMessage + \"). Use next/script instead. \\nSee more info here: https://nextjs.org/docs/messages/no-script-tags-in-head-component\");\n } else if (c.type === 'link' && c.props['rel'] === 'stylesheet') {\n (0, _warnonce.warnOnce)('Do not add stylesheets using next/head (see <link rel=\"stylesheet\"> tag with href=\"' + c.props['href'] + '\"). Use Document instead. \\nSee more info here: https://nextjs.org/docs/messages/no-stylesheets-in-head-component');\n }\n }\n return /*#__PURE__*/ _react.default.cloneElement(c, {\n key\n });\n });\n}\n/**\n * This component injects elements to `<head>` of your page.\n * To avoid duplicated `tags` in `<head>` you can use the `key` property, which will make sure every tag is only rendered once.\n */ function Head(param) {\n let { children } = param;\n const ampState = (0, _react.useContext)(_ampcontextsharedruntime.AmpStateContext);\n const headManager = (0, _react.useContext)(_headmanagercontextsharedruntime.HeadManagerContext);\n return /*#__PURE__*/ (0, _jsxruntime.jsx)(_sideeffect.default, {\n reduceComponentsToState: reduceComponents,\n headManager: headManager,\n inAmpMode: (0, _ampmode.isInAmpMode)(ampState),\n children: children\n });\n}\n_c = Head;\nconst _default = Head;\nif ((typeof exports.default === 'function' || typeof exports.default === 'object' && exports.default !== null) && typeof exports.default.__esModule === 'undefined') {\n Object.defineProperty(exports.default, '__esModule', {\n value: true\n });\n Object.assign(exports.default, exports);\n module.exports = exports.default;\n} //# sourceMappingURL=head.js.map\nvar _c;\n$RefreshReg$(_c, \"Head\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9oZWFkLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQWdMQSxPQUFtQjtlQUFuQjs7SUFuS2dCQSxXQUFXO2VBQVhBOzs7Ozs7NkVBWDRCO2lGQUN6QjtxREFDYTs2REFDRztxQ0FDUDtzQ0FDSDtBQU1sQixTQUFTQSxZQUFZQyxTQUFpQjtJQUFqQkEsSUFBQUEsY0FBQUEsS0FBQUEsR0FBQUEsWUFBWTtJQUN0QyxNQUFNQyxPQUFPO3NCQUFDLHFCQUFDQyxRQUFBQTtZQUFLQyxTQUFRO1dBQVk7S0FBYTtJQUNyRCxJQUFJLENBQUNILFdBQVc7UUFDZEMsS0FBS0csSUFBSSxlQUNQLHFCQUFDRixRQUFBQTtZQUFLRyxNQUFLO1lBQVdDLFNBQVE7V0FBeUI7SUFFM0Q7SUFDQSxPQUFPTDtBQUNUO0FBRUEsU0FBU00saUJBQ1BDLElBQW9DLEVBQ3BDQyxLQUEyQztJQUUzQyw4RkFBOEY7SUFDOUYsSUFBSSxPQUFPQSxVQUFVLFlBQVksT0FBT0EsVUFBVSxVQUFVO1FBQzFELE9BQU9EO0lBQ1Q7SUFDQSxrQ0FBa0M7SUFDbEMsSUFBSUMsTUFBTUMsSUFBSSxLQUFLQyxPQUFBQSxPQUFLLENBQUNDLFFBQVEsRUFBRTtRQUNqQyxPQUFPSixLQUFLSyxNQUFNLENBQ2hCLE9BQ0FGLE9BQUssQ0FBQ0csUUFBUSxDQUFDQyxPQUFPLENBQUNOLE1BQU1PLEtBQUssQ0FBQ0MsUUFBUSxFQUFFQyxNQUFNLENBQ2pELENBRUVDLGNBQ0FDO1lBRUEsSUFDRSxPQUFPQSxrQkFBa0IsWUFDekIsT0FBT0Esa0JBQWtCLFVBQ3pCO2dCQUNBLE9BQU9EO1lBQ1Q7WUFDQSxPQUFPQSxhQUFhTixNQUFNLENBQUNPO1FBQzdCLEdBQ0EsRUFBRTtJQUdSO0lBQ0EsT0FBT1osS0FBS0ssTUFBTSxDQUFDSjtBQUNyQjtBQUVBLE1BQU1ZLFlBQVk7SUFBQztJQUFRO0lBQWE7SUFBVztDQUFX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Q0FBQUEsR0FBQUEsVUFBQUEsUUFBQUEsRUFDRyx3RkFBcUZMLEVBQUVoQyxLQUFLLENBQUMsT0FBTyxHQUFDO1lBRTFHO1FBQ0Y7UUFDQSxxQkFBT0wsT0FBQUEsT0FBSyxDQUFDMkMsWUFBWSxDQUFDTixHQUFHO1lBQUVqQjtRQUFJO0lBQ3JDO0FBQ0o7QUFFQTs7O0NBR0MsR0FDRCxjQUFjLEtBQTJDO0lBQTNDLE1BQUVkLFFBQVEsRUFBaUMsR0FBM0M7SUFDWixNQUFNdUMsV0FBV0MsQ0FBQUEsR0FBQUEsT0FBQUEsVUFBQUEsRUFBV0MseUJBQUFBLGVBQWU7SUFDM0MsTUFBTUMsY0FBY0YsQ0FBQUEsR0FBQUEsT0FBQUEsVUFBQUEsRUFBV0csaUNBQUFBLGtCQUFrQjtJQUNqRCxxQkFDRSxxQkFBQ0MsWUFBQUEsT0FBTTtRQUNMQyx5QkFBeUJuQjtRQUN6QmdCLGFBQWFBO1FBQ2IzRCxXQUFXK0QsQ0FBQUEsR0FBQUEsU0FBQUEsV0FBQUEsRUFBWVA7a0JBRXRCdkM7O0FBR1A7S0FaU3NDO01BY1QsV0FBZUEiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9zaGFyZWQvbGliL2hlYWQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50J1xuXG5pbXBvcnQgUmVhY3QsIHsgdXNlQ29udGV4dCwgdHlwZSBKU1ggfSBmcm9tICdyZWFjdCdcbmltcG9ydCBFZmZlY3QgZnJvbSAnLi9zaWRlLWVmZmVjdCdcbmltcG9ydCB7IEFtcFN0YXRlQ29udGV4dCB9IGZyb20gJy4vYW1wLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgeyBIZWFkTWFuYWdlckNvbnRleHQgfSBmcm9tICcuL2hlYWQtbWFuYWdlci1jb250ZXh0LnNoYXJlZC1ydW50aW1lJ1xuaW1wb3J0IHsgaXNJbkFtcE1vZGUgfSBmcm9tICcuL2FtcC1tb2RlJ1xuaW1wb3J0IHsgd2Fybk9uY2UgfSBmcm9tICcuL3V0aWxzL3dhcm4tb25jZSdcblxudHlwZSBXaXRoSW5BbXBNb2RlID0ge1xuICBpbkFtcE1vZGU/OiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0SGVhZChpbkFtcE1vZGUgPSBmYWxzZSk6IEpTWC5FbGVtZW50W10ge1xuICBjb25zdCBoZWFkID0gWzxtZXRhIGNoYXJTZXQ9XCJ1dGYtOFwiIGtleT1cImNoYXJzZXRcIiAvPl1cbiAgaWYgKCFpbkFtcE1vZGUpIHtcbiAgICBoZWFkLnB1c2goXG4gICAgICA8bWV0YSBuYW1lPVwidmlld3BvcnRcIiBjb250ZW50PVwid2lkdGg9ZGV2aWNlLXdpZHRoXCIga2V5PVwidmlld3BvcnRcIiAvPlxuICAgIClcbiAgfVxuICByZXR1cm4gaGVhZFxufVxuXG5mdW5jdGlvbiBvbmx5UmVhY3RFbGVtZW50KFxuICBsaXN0OiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4sXG4gIGNoaWxkOiBSZWFjdC5SZWFjdEVsZW1lbnQgfCBudW1iZXIgfCBzdHJpbmdcbik6IEFycmF5PFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+PiB7XG4gIC8vIFJlYWN0IGNoaWxkcmVuIGNhbiBiZSBcInN0cmluZ1wiIG9yIFwibnVtYmVyXCIgaW4gdGhpcyBjYXNlIHdlIGlnbm9yZSB0aGVtIGZvciBiYWNrd2FyZHMgY29tcGF0XG4gIGlmICh0eXBlb2YgY2hpbGQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBjaGlsZCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbGlzdFxuICB9XG4gIC8vIEFkZHMgc3VwcG9ydCBmb3IgUmVhY3QuRnJhZ21lbnRcbiAgaWYgKGNoaWxkLnR5cGUgPT09IFJlYWN0LkZyYWdtZW50KSB7XG4gICAgcmV0dXJuIGxpc3QuY29uY2F0KFxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBAdHlwZXMvcmVhY3QgZG9lcyBub3QgcmVtb3ZlIGZyYWdtZW50cyBidXQgdGhpcyBjb3VsZCBhbHNvIHJldHVybiBSZWFjdFBvcnRhbFtdXG4gICAgICBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkLnByb3BzLmNoaWxkcmVuKS5yZWR1Y2UoXG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgQHR5cGVzL3JlYWN0IGRvZXMgbm90IHJlbW92ZSBmcmFnbWVudHMgYnV0IHRoaXMgY291bGQgYWxzbyByZXR1cm4gUmVhY3RQb3J0YWxbXVxuICAgICAgICAoXG4gICAgICAgICAgZnJhZ21lbnRMaXN0OiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4sXG4gICAgICAgICAgZnJhZ21lbnRDaGlsZDogUmVhY3QuUmVhY3RFbGVtZW50IHwgbnVtYmVyIHwgc3RyaW5nXG4gICAgICAgICk6IEFycmF5PFJlYWN0LlJlYWN0RWxlbWVudDxhbnk+PiA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGZyYWdtZW50Q2hpbGQgPT09ICdzdHJpbmcnIHx8XG4gICAgICAgICAgICB0eXBlb2YgZnJhZ21lbnRDaGlsZCA9PT0gJ251bWJlcidcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmcmFnbWVudExpc3RcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZyYWdtZW50TGlzdC5jb25jYXQoZnJhZ21lbnRDaGlsZClcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIGxpc3QuY29uY2F0KGNoaWxkKVxufVxuXG5jb25zdCBNRVRBVFlQRVMgPSBbJ25hbWUnLCAnaHR0cEVxdWl2JywgJ2NoYXJTZXQnLCAnaXRlbVByb3AnXVxuXG4vKlxuIHJldHVybnMgYSBmdW5jdGlvbiBmb3IgZmlsdGVyaW5nIGhlYWQgY2hpbGQgZWxlbWVudHNcbiB3aGljaCBzaG91bGRuJ3QgYmUgZHVwbGljYXRlZCwgbGlrZSA8dGl0bGUvPlxuIEFsc28gYWRkcyBzdXBwb3J0IGZvciBkZWR1cGxpY2F0ZWQgYGtleWAgcHJvcGVydGllc1xuKi9cbmZ1bmN0aW9uIHVuaXF1ZSgpIHtcbiAgY29uc3Qga2V5cyA9IG5ldyBTZXQoKVxuICBjb25zdCB0YWdzID0gbmV3IFNldCgpXG4gIGNvbnN0IG1ldGFUeXBlcyA9IG5ldyBTZXQoKVxuICBjb25zdCBtZXRhQ2F0ZWdvcmllczogeyBbbWV0YXR5cGU6IHN0cmluZ106IFNldDxzdHJpbmc+IH0gPSB7fVxuXG4gIHJldHVybiAoaDogUmVhY3QuUmVhY3RFbGVtZW50PGFueT4pID0+IHtcbiAgICBsZXQgaXNVbmlxdWUgPSB0cnVlXG4gICAgbGV0IGhhc0tleSA9IGZhbHNlXG5cbiAgICBpZiAoaC5rZXkgJiYgdHlwZW9mIGgua2V5ICE9PSAnbnVtYmVyJyAmJiBoLmtleS5pbmRleE9mKCckJykgPiAwKSB7XG4gICAgICBoYXNLZXkgPSB0cnVlXG4gICAgICBjb25zdCBrZXkgPSBoLmtleS5zbGljZShoLmtleS5pbmRleE9mKCckJykgKyAxKVxuICAgICAgaWYgKGtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgaXNVbmlxdWUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAga2V5cy5hZGQoa2V5KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZWZhdWx0LWNhc2VcbiAgICBzd2l0Y2ggKGgudHlwZSkge1xuICAgICAgY2FzZSAndGl0bGUnOlxuICAgICAgY2FzZSAnYmFzZSc6XG4gICAgICAgIGlmICh0YWdzLmhhcyhoLnR5cGUpKSB7XG4gICAgICAgICAgaXNVbmlxdWUgPSBmYWxzZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRhZ3MuYWRkKGgudHlwZSlcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbWV0YSc6XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBNRVRBVFlQRVMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBtZXRhdHlwZSA9IE1FVEFUWVBFU1tpXVxuICAgICAgICAgIGlmICghaC5wcm9wcy5oYXNPd25Qcm9wZXJ0eShtZXRhdHlwZSkpIGNvbnRpbnVlXG5cbiAgICAgICAgICBpZiAobWV0YXR5cGUgPT09ICdjaGFyU2V0Jykge1xuICAgICAgICAgICAgaWYgKG1ldGFUeXBlcy5oYXMobWV0YXR5cGUpKSB7XG4gICAgICAgICAgICAgIGlzVW5pcXVlID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1ldGFUeXBlcy5hZGQobWV0YXR5cGUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gaC5wcm9wc1ttZXRhdHlwZV1cbiAgICAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBtZXRhQ2F0ZWdvcmllc1ttZXRhdHlwZV0gfHwgbmV3IFNldCgpXG4gICAgICAgICAgICBpZiAoKG1ldGF0eXBlICE9PSAnbmFtZScgfHwgIWhhc0tleSkgJiYgY2F0ZWdvcmllcy5oYXMoY2F0ZWdvcnkpKSB7XG4gICAgICAgICAgICAgIGlzVW5pcXVlID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KVxuICAgICAgICAgICAgICBtZXRhQ2F0ZWdvcmllc1ttZXRhdHlwZV0gPSBjYXRlZ29yaWVzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgcmV0dXJuIGlzVW5pcXVlXG4gIH1cbn1cblxuLyoqXG4gKlxuICogQHBhcmFtIGhlYWRDaGlsZHJlbkVsZW1lbnRzIExpc3Qgb2YgY2hpbGRyZW4gb2YgPEhlYWQ+XG4gKi9cbmZ1bmN0aW9uIHJlZHVjZUNvbXBvbmVudHM8VCBleHRlbmRzIHt9ICYgV2l0aEluQW1wTW9kZT4oXG4gIGhlYWRDaGlsZHJlbkVsZW1lbnRzOiBBcnJheTxSZWFjdC5SZWFjdEVsZW1lbnQ8YW55Pj4sXG4gIHByb3BzOiBUXG4pIHtcbiAgY29uc3QgeyBpbkFtcE1vZGUgfSA9IHByb3BzXG4gIHJldHVybiBoZWFkQ2hpbGRyZW5FbGVtZW50c1xuICAgIC5yZWR1Y2Uob25seVJlYWN0RWxlbWVudCwgW10pXG4gICAgLnJldmVyc2UoKVxuICAgIC5jb25jYXQoZGVmYXVsdEhlYWQoaW5BbXBNb2RlKS5yZXZlcnNlKCkpXG4gICAgLmZpbHRlcih1bmlxdWUoKSlcbiAgICAucmV2ZXJzZSgpXG4gICAgLm1hcCgoYzogUmVhY3QuUmVhY3RFbGVtZW50PGFueT4sIGk6IG51bWJlcikgPT4ge1xuICAgICAgY29uc3Qga2V5ID0gYy5rZXkgfHwgaVxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgICAgIC8vIG9taXQgSlNPTi1MRCBzdHJ1Y3R1cmVkIGRhdGEgc25pcHBldHMgZnJvbSB0aGUgd2FybmluZ1xuICAgICAgICBpZiAoYy50eXBlID09PSAnc2NyaXB0JyAmJiBjLnByb3BzWyd0eXBlJ10gIT09ICdhcHBsaWNhdGlvbi9sZCtqc29uJykge1xuICAgICAgICAgIGNvbnN0IHNyY01lc3NhZ2UgPSBjLnByb3BzWydzcmMnXVxuICAgICAgICAgICAgPyBgPHNjcmlwdD4gdGFnIHdpdGggc3JjPVwiJHtjLnByb3BzWydzcmMnXX1cImBcbiAgICAgICAgICAgIDogYGlubGluZSA8c2NyaXB0PmBcbiAgICAgICAgICB3YXJuT25jZShcbiAgICAgICAgICAgIGBEbyBub3QgYWRkIDxzY3JpcHQ+IHRhZ3MgdXNpbmcgbmV4dC9oZWFkIChzZWUgJHtzcmNNZXNzYWdlfSkuIFVzZSBuZXh0L3NjcmlwdCBpbnN0ZWFkLiBcXG5TZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25vLXNjcmlwdC10YWdzLWluLWhlYWQtY29tcG9uZW50YFxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIGlmIChjLnR5cGUgPT09ICdsaW5rJyAmJiBjLnByb3BzWydyZWwnXSA9PT0gJ3N0eWxlc2hlZXQnKSB7XG4gICAgICAgICAgd2Fybk9uY2UoXG4gICAgICAgICAgICBgRG8gbm90IGFkZCBzdHlsZXNoZWV0cyB1c2luZyBuZXh0L2hlYWQgKHNlZSA8bGluayByZWw9XCJzdHlsZXNoZWV0XCI+IHRhZyB3aXRoIGhyZWY9XCIke2MucHJvcHNbJ2hyZWYnXX1cIikuIFVzZSBEb2N1bWVudCBpbnN0ZWFkLiBcXG5TZWUgbW9yZSBpbmZvIGhlcmU6IGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL21lc3NhZ2VzL25vLXN0eWxlc2hlZXRzLWluLWhlYWQtY29tcG9uZW50YFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjLCB7IGtleSB9KVxuICAgIH0pXG59XG5cbi8qKlxuICogVGhpcyBjb21wb25lbnQgaW5qZWN0cyBlbGVtZW50cyB0byBgPGhlYWQ+YCBvZiB5b3VyIHBhZ2UuXG4gKiBUbyBhdm9pZCBkdXBsaWNhdGVkIGB0YWdzYCBpbiBgPGhlYWQ+YCB5b3UgY2FuIHVzZSB0aGUgYGtleWAgcHJvcGVydHksIHdoaWNoIHdpbGwgbWFrZSBzdXJlIGV2ZXJ5IHRhZyBpcyBvbmx5IHJlbmRlcmVkIG9uY2UuXG4gKi9cbmZ1bmN0aW9uIEhlYWQoeyBjaGlsZHJlbiB9OiB7IGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGUgfSkge1xuICBjb25zdCBhbXBTdGF0ZSA9IHVzZUNvbnRleHQoQW1wU3RhdGVDb250ZXh0KVxuICBjb25zdCBoZWFkTWFuYWdlciA9IHVzZUNvbnRleHQoSGVhZE1hbmFnZXJDb250ZXh0KVxuICByZXR1cm4gKFxuICAgIDxFZmZlY3RcbiAgICAgIHJlZHVjZUNvbXBvbmVudHNUb1N0YXRlPXtyZWR1Y2VDb21wb25lbnRzfVxuICAgICAgaGVhZE1hbmFnZXI9e2hlYWRNYW5hZ2VyfVxuICAgICAgaW5BbXBNb2RlPXtpc0luQW1wTW9kZShhbXBTdGF0ZSl9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvRWZmZWN0PlxuICApXG59XG5cbmV4cG9ydCBkZWZhdWx0IEhlYWRcbiJdLCJuYW1lcyI6WyJkZWZhdWx0SGVhZCIsImluQW1wTW9kZSIsImhlYWQiLCJtZXRhIiwiY2hhclNldCIsInB1c2giLCJuYW1lIiwiY29udGVudCIsIm9ubHlSZWFjdEVsZW1lbnQiLCJsaXN0IiwiY2hpbGQiLCJ0eXBlIiwiUmVhY3QiLCJGcmFnbWVudCIsImNvbmNhdCIsIkNoaWxkcmVuIiwidG9BcnJheSIsInByb3BzIiwiY2hpbGRyZW4iLCJyZWR1Y2UiLCJmcmFnbWVudExpc3QiLCJmcmFnbWVudENoaWxkIiwiTUVUQVRZUEVTIiwidW5pcXVlIiwia2V5cyIsIlNldCIsInRhZ3MiLCJtZXRhVHlwZXMiLCJtZXRhQ2F0ZWdvcmllcyIsImgiLCJpc1VuaXF1ZSIsImhhc0tleSIsImtleSIsImluZGV4T2YiLCJzbGljZSIsImhhcyIsImFkZCIsImkiLCJsZW4iLCJsZW5ndGgiLCJtZXRhdHlwZSIsImhhc093blByb3BlcnR5IiwiY2F0ZWdvcnkiLCJjYXRlZ29yaWVzIiwicmVkdWNlQ29tcG9uZW50cyIsImhlYWRDaGlsZHJlbkVsZW1lbnRzIiwicmV2ZXJzZSIsImZpbHRlciIsIm1hcCIsImMiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJzcmNNZXNzYWdlIiwid2Fybk9uY2UiLCJjbG9uZUVsZW1lbnQiLCJIZWFkIiwiYW1wU3RhdGUiLCJ1c2VDb250ZXh0IiwiQW1wU3RhdGVDb250ZXh0IiwiaGVhZE1hbmFnZXIiLCJIZWFkTWFuYWdlckNvbnRleHQiLCJFZmZlY3QiLCJyZWR1Y2VDb21wb25lbnRzVG9TdGF0ZSIsImlzSW5BbXBNb2RlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/head.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/image-blur-svg.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/image-blur-svg.js ***!
|
||
\*************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * A shared function, used on both client and server, to generate a SVG blur placeholder.\n */ \nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"getImageBlurSvg\", ({\n enumerable: true,\n get: function() {\n return getImageBlurSvg;\n }\n}));\nfunction getImageBlurSvg(param) {\n let { widthInt, heightInt, blurWidth, blurHeight, blurDataURL, objectFit } = param;\n const std = 20;\n const svgWidth = blurWidth ? blurWidth * 40 : widthInt;\n const svgHeight = blurHeight ? blurHeight * 40 : heightInt;\n const viewBox = svgWidth && svgHeight ? \"viewBox='0 0 \" + svgWidth + \" \" + svgHeight + \"'\" : '';\n const preserveAspectRatio = viewBox ? 'none' : objectFit === 'contain' ? 'xMidYMid' : objectFit === 'cover' ? 'xMidYMid slice' : 'none';\n return \"%3Csvg xmlns='http://www.w3.org/2000/svg' \" + viewBox + \"%3E%3Cfilter id='b' color-interpolation-filters='sRGB'%3E%3CfeGaussianBlur stdDeviation='\" + std + \"'/%3E%3CfeColorMatrix values='1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 100 -1' result='s'/%3E%3CfeFlood x='0' y='0' width='100%25' height='100%25'/%3E%3CfeComposite operator='out' in='s'/%3E%3CfeComposite in2='SourceGraphic'/%3E%3CfeGaussianBlur stdDeviation='\" + std + \"'/%3E%3C/filter%3E%3Cimage width='100%25' height='100%25' x='0' y='0' preserveAspectRatio='\" + preserveAspectRatio + \"' style='filter: url(%23b);' href='\" + blurDataURL + \"'/%3E%3C/svg%3E\";\n} //# sourceMappingURL=image-blur-svg.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pbWFnZS1ibHVyLXN2Zy5qcyIsIm1hcHBpbmdzIjoiQUFBQTs7Q0FFQzs7OzttREFDZUE7OztlQUFBQTs7O0FBQVQsU0FBU0EsZ0JBQWdCLEtBYy9CO0lBZCtCLE1BQzlCQyxRQUFRLEVBQ1JDLFNBQVMsRUFDVEMsU0FBUyxFQUNUQyxVQUFVLEVBQ1ZDLFdBQVcsRUFDWEMsU0FBUyxFQVFWLEdBZCtCO0lBZTlCLE1BQU1DLE1BQU07SUFDWixNQUFNQyxXQUFXTCxZQUFZQSxZQUFZLEtBQUtGO0lBQzlDLE1BQU1RLFlBQVlMLGFBQWFBLGFBQWEsS0FBS0Y7SUFFakQsTUFBTVEsVUFDSkYsWUFBWUMsWUFBYSxrQkFBZUQsV0FBUyxNQUFHQyxZQUFVLE1BQUs7SUFDckUsTUFBTUUsc0JBQXNCRCxVQUN4QixTQUNBSixjQUFjLFlBQ1osYUFDQUEsY0FBYyxVQUNaLG1CQUNBO0lBRVIsT0FBUSwrQ0FBNENJLFVBQVEsOEZBQTJGSCxNQUFJLG9RQUFpUUEsTUFBSSxnR0FBNkZJLHNCQUFvQix3Q0FBcUNOLGNBQVk7QUFDcGtCIiwic291cmNlcyI6WyIvaG9tZS9zcmMvc2hhcmVkL2xpYi9pbWFnZS1ibHVyLXN2Zy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEEgc2hhcmVkIGZ1bmN0aW9uLCB1c2VkIG9uIGJvdGggY2xpZW50IGFuZCBzZXJ2ZXIsIHRvIGdlbmVyYXRlIGEgU1ZHIGJsdXIgcGxhY2Vob2xkZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbWFnZUJsdXJTdmcoe1xuICB3aWR0aEludCxcbiAgaGVpZ2h0SW50LFxuICBibHVyV2lkdGgsXG4gIGJsdXJIZWlnaHQsXG4gIGJsdXJEYXRhVVJMLFxuICBvYmplY3RGaXQsXG59OiB7XG4gIHdpZHRoSW50PzogbnVtYmVyXG4gIGhlaWdodEludD86IG51bWJlclxuICBibHVyV2lkdGg/OiBudW1iZXJcbiAgYmx1ckhlaWdodD86IG51bWJlclxuICBibHVyRGF0YVVSTDogc3RyaW5nXG4gIG9iamVjdEZpdD86IHN0cmluZ1xufSk6IHN0cmluZyB7XG4gIGNvbnN0IHN0ZCA9IDIwXG4gIGNvbnN0IHN2Z1dpZHRoID0gYmx1cldpZHRoID8gYmx1cldpZHRoICogNDAgOiB3aWR0aEludFxuICBjb25zdCBzdmdIZWlnaHQgPSBibHVySGVpZ2h0ID8gYmx1ckhlaWdodCAqIDQwIDogaGVpZ2h0SW50XG5cbiAgY29uc3Qgdmlld0JveCA9XG4gICAgc3ZnV2lkdGggJiYgc3ZnSGVpZ2h0ID8gYHZpZXdCb3g9JzAgMCAke3N2Z1dpZHRofSAke3N2Z0hlaWdodH0nYCA6ICcnXG4gIGNvbnN0IHByZXNlcnZlQXNwZWN0UmF0aW8gPSB2aWV3Qm94XG4gICAgPyAnbm9uZSdcbiAgICA6IG9iamVjdEZpdCA9PT0gJ2NvbnRhaW4nXG4gICAgICA/ICd4TWlkWU1pZCdcbiAgICAgIDogb2JqZWN0Rml0ID09PSAnY292ZXInXG4gICAgICAgID8gJ3hNaWRZTWlkIHNsaWNlJ1xuICAgICAgICA6ICdub25lJ1xuXG4gIHJldHVybiBgJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgJHt2aWV3Qm94fSUzRSUzQ2ZpbHRlciBpZD0nYicgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSdzUkdCJyUzRSUzQ2ZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0nJHtzdGR9Jy8lM0UlM0NmZUNvbG9yTWF0cml4IHZhbHVlcz0nMSAwIDAgMCAwIDAgMSAwIDAgMCAwIDAgMSAwIDAgMCAwIDAgMTAwIC0xJyByZXN1bHQ9J3MnLyUzRSUzQ2ZlRmxvb2QgeD0nMCcgeT0nMCcgd2lkdGg9JzEwMCUyNScgaGVpZ2h0PScxMDAlMjUnLyUzRSUzQ2ZlQ29tcG9zaXRlIG9wZXJhdG9yPSdvdXQnIGluPSdzJy8lM0UlM0NmZUNvbXBvc2l0ZSBpbjI9J1NvdXJjZUdyYXBoaWMnLyUzRSUzQ2ZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0nJHtzdGR9Jy8lM0UlM0MvZmlsdGVyJTNFJTNDaW1hZ2Ugd2lkdGg9JzEwMCUyNScgaGVpZ2h0PScxMDAlMjUnIHg9JzAnIHk9JzAnIHByZXNlcnZlQXNwZWN0UmF0aW89JyR7cHJlc2VydmVBc3BlY3RSYXRpb30nIHN0eWxlPSdmaWx0ZXI6IHVybCglMjNiKTsnIGhyZWY9JyR7Ymx1ckRhdGFVUkx9Jy8lM0UlM0Mvc3ZnJTNFYFxufVxuIl0sIm5hbWVzIjpbImdldEltYWdlQmx1clN2ZyIsIndpZHRoSW50IiwiaGVpZ2h0SW50IiwiYmx1cldpZHRoIiwiYmx1ckhlaWdodCIsImJsdXJEYXRhVVJMIiwib2JqZWN0Rml0Iiwic3RkIiwic3ZnV2lkdGgiLCJzdmdIZWlnaHQiLCJ2aWV3Qm94IiwicHJlc2VydmVBc3BlY3RSYXRpbyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/image-blur-svg.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js":
|
||
/*!**********************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js ***!
|
||
\**********************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"ImageConfigContext\", ({\n enumerable: true,\n get: function() {\n return ImageConfigContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst _imageconfig = __webpack_require__(/*! ./image-config */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/image-config.js\");\nconst ImageConfigContext = _react.default.createContext(_imageconfig.imageConfigDefault);\nif (true) {\n ImageConfigContext.displayName = 'ImageConfigContext';\n} //# sourceMappingURL=image-config-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pbWFnZS1jb25maWctY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7O3NEQUlhQTs7O2VBQUFBOzs7OzRFQUpLO3lDQUVpQjtBQUU1QixNQUFNQSxxQkFDWEMsT0FBQUEsT0FBSyxDQUFDQyxhQUFhLENBQXNCQyxhQUFBQSxrQkFBa0I7QUFFN0QsSUFBSUMsSUFBb0IsRUFBbUI7SUFDekNKLG1CQUFtQk8sV0FBVyxHQUFHO0FBQ25DIiwic291cmNlcyI6WyIvaG9tZS9zcmMvc2hhcmVkL2xpYi9pbWFnZS1jb25maWctY29udGV4dC5zaGFyZWQtcnVudGltZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXG5pbXBvcnQgdHlwZSB7IEltYWdlQ29uZmlnQ29tcGxldGUgfSBmcm9tICcuL2ltYWdlLWNvbmZpZydcbmltcG9ydCB7IGltYWdlQ29uZmlnRGVmYXVsdCB9IGZyb20gJy4vaW1hZ2UtY29uZmlnJ1xuXG5leHBvcnQgY29uc3QgSW1hZ2VDb25maWdDb250ZXh0ID1cbiAgUmVhY3QuY3JlYXRlQ29udGV4dDxJbWFnZUNvbmZpZ0NvbXBsZXRlPihpbWFnZUNvbmZpZ0RlZmF1bHQpXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEltYWdlQ29uZmlnQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdJbWFnZUNvbmZpZ0NvbnRleHQnXG59XG4iXSwibmFtZXMiOlsiSW1hZ2VDb25maWdDb250ZXh0IiwiUmVhY3QiLCJjcmVhdGVDb250ZXh0IiwiaW1hZ2VDb25maWdEZWZhdWx0IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/image-config.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/image-config.js ***!
|
||
\***********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n VALID_LOADERS: function() {\n return VALID_LOADERS;\n },\n imageConfigDefault: function() {\n return imageConfigDefault;\n }\n});\nconst VALID_LOADERS = [\n 'default',\n 'imgix',\n 'cloudinary',\n 'akamai',\n 'custom'\n];\nconst imageConfigDefault = {\n deviceSizes: [\n 640,\n 750,\n 828,\n 1080,\n 1200,\n 1920,\n 2048,\n 3840\n ],\n imageSizes: [\n 16,\n 32,\n 48,\n 64,\n 96,\n 128,\n 256,\n 384\n ],\n path: '/_next/image',\n loader: 'default',\n loaderFile: '',\n domains: [],\n disableStaticImages: false,\n minimumCacheTTL: 60,\n formats: [\n 'image/webp'\n ],\n maximumDiskCacheSize: undefined,\n maximumResponseBody: 50000000,\n dangerouslyAllowSVG: false,\n contentSecurityPolicy: \"script-src 'none'; frame-src 'none'; sandbox;\",\n contentDispositionType: 'attachment',\n localPatterns: undefined,\n remotePatterns: [],\n qualities: undefined,\n unoptimized: false\n}; //# sourceMappingURL=image-config.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pbWFnZS1jb25maWcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBQWFBLGFBQWE7ZUFBYkE7O0lBdUlBQyxrQkFBa0I7ZUFBbEJBOzs7QUF2SU4sTUFBTUQsZ0JBQWdCO0lBQzNCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQWlJTSxNQUFNQyxxQkFBMEM7SUFDckRDLGFBQWE7UUFBQztRQUFLO1FBQUs7UUFBSztRQUFNO1FBQU07UUFBTTtRQUFNO0tBQUs7SUFDMURDLFlBQVk7UUFBQztRQUFJO1FBQUk7UUFBSTtRQUFJO1FBQUk7UUFBSztRQUFLO0tBQUk7SUFDL0NDLE1BQU07SUFDTkMsUUFBUTtJQUNSQyxZQUFZO0lBQ1pDLFNBQVMsRUFBRTtJQUNYQyxxQkFBcUI7SUFDckJDLGlCQUFpQjtJQUNqQkMsU0FBUztRQUFDO0tBQWE7SUFDdkJDLHNCQUFzQkM7SUFDdEJDLHFCQUFxQjtJQUNyQkMscUJBQXFCO0lBQ3JCQyx1QkFBd0I7SUFDeEJDLHdCQUF3QjtJQUN4QkMsZUFBZUw7SUFDZk0sZ0JBQWdCLEVBQUU7SUFDbEJDLFdBQVdQO0lBQ1hRLGFBQWE7QUFDZiIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL3NoYXJlZC9saWIvaW1hZ2UtY29uZmlnLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBWQUxJRF9MT0FERVJTID0gW1xuICAnZGVmYXVsdCcsXG4gICdpbWdpeCcsXG4gICdjbG91ZGluYXJ5JyxcbiAgJ2FrYW1haScsXG4gICdjdXN0b20nLFxuXSBhcyBjb25zdFxuXG5leHBvcnQgdHlwZSBMb2FkZXJWYWx1ZSA9ICh0eXBlb2YgVkFMSURfTE9BREVSUylbbnVtYmVyXVxuXG5leHBvcnQgdHlwZSBJbWFnZUxvYWRlclByb3BzID0ge1xuICBzcmM6IHN0cmluZ1xuICB3aWR0aDogbnVtYmVyXG4gIHF1YWxpdHk/OiBudW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgSW1hZ2VMb2FkZXJQcm9wc1dpdGhDb25maWcgPSBJbWFnZUxvYWRlclByb3BzICYge1xuICBjb25maWc6IFJlYWRvbmx5PEltYWdlQ29uZmlnPlxufVxuXG5leHBvcnQgdHlwZSBMb2NhbFBhdHRlcm4gPSB7XG4gIC8qKlxuICAgKiBDYW4gYmUgbGl0ZXJhbCBvciB3aWxkY2FyZC5cbiAgICogU2luZ2xlIGAqYCBtYXRjaGVzIGEgc2luZ2xlIHBhdGggc2VnbWVudC5cbiAgICogRG91YmxlIGAqKmAgbWF0Y2hlcyBhbnkgbnVtYmVyIG9mIHBhdGggc2VnbWVudHMuXG4gICAqL1xuICBwYXRobmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBDYW4gYmUgbGl0ZXJhbCBxdWVyeSBzdHJpbmcgc3VjaCBhcyBgP3Y9MWAgb3JcbiAgICogZW1wdHkgc3RyaW5nIG1lYW5pbmcgbm8gcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgc2VhcmNoPzogc3RyaW5nXG59XG5cbmV4cG9ydCB0eXBlIFJlbW90ZVBhdHRlcm4gPSB7XG4gIC8qKlxuICAgKiBNdXN0IGJlIGBodHRwYCBvciBgaHR0cHNgLlxuICAgKi9cbiAgcHJvdG9jb2w/OiAnaHR0cCcgfCAnaHR0cHMnXG5cbiAgLyoqXG4gICAqIENhbiBiZSBsaXRlcmFsIG9yIHdpbGRjYXJkLlxuICAgKiBTaW5nbGUgYCpgIG1hdGNoZXMgYSBzaW5nbGUgc3ViZG9tYWluLlxuICAgKiBEb3VibGUgYCoqYCBtYXRjaGVzIGFueSBudW1iZXIgb2Ygc3ViZG9tYWlucy5cbiAgICovXG4gIGhvc3RuYW1lOiBzdHJpbmdcblxuICAvKipcbiAgICogQ2FuIGJlIGxpdGVyYWwgcG9ydCBzdWNoIGFzIGA4MDgwYCBvciBlbXB0eSBzdHJpbmdcbiAgICogbWVhbmluZyBubyBwb3J0LlxuICAgKi9cbiAgcG9ydD86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBDYW4gYmUgbGl0ZXJhbCBvciB3aWxkY2FyZC5cbiAgICogU2luZ2xlIGAqYCBtYXRjaGVzIGEgc2luZ2xlIHBhdGggc2VnbWVudC5cbiAgICogRG91YmxlIGAqKmAgbWF0Y2hlcyBhbnkgbnVtYmVyIG9mIHBhdGggc2VnbWVudHMuXG4gICAqL1xuICBwYXRobmFtZT86IHN0cmluZ1xuXG4gIC8qKlxuICAgKiBDYW4gYmUgbGl0ZXJhbCBxdWVyeSBzdHJpbmcgc3VjaCBhcyBgP3Y9MWAgb3JcbiAgICogZW1wdHkgc3RyaW5nIG1lYW5pbmcgbm8gcXVlcnkgc3RyaW5nLlxuICAgKi9cbiAgc2VhcmNoPzogc3RyaW5nXG59XG5cbnR5cGUgSW1hZ2VGb3JtYXQgPSAnaW1hZ2UvYXZpZicgfCAnaW1hZ2Uvd2VicCdcblxuLyoqXG4gKiBJbWFnZSBjb25maWd1cmF0aW9uc1xuICpcbiAqIEBzZWUgW0ltYWdlIGNvbmZpZ3VyYXRpb24gb3B0aW9uc10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L2ltYWdlI2NvbmZpZ3VyYXRpb24tb3B0aW9ucylcbiAqL1xuZXhwb3J0IHR5cGUgSW1hZ2VDb25maWdDb21wbGV0ZSA9IHtcbiAgLyoqIEBzZWUgW0RldmljZSBzaXplcyBkb2N1bWVudGF0aW9uXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvaW1hZ2UjZGV2aWNlLXNpemVzKSAqL1xuICBkZXZpY2VTaXplczogbnVtYmVyW11cblxuICAvKiogQHNlZSBbSW1hZ2Ugc2l6aW5nIGRvY3VtZW50YXRpb25dKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL29wdGltaXppbmcvaW1hZ2VzI2ltYWdlLXNpemluZykgKi9cbiAgaW1hZ2VTaXplczogbnVtYmVyW11cblxuICAvKiogQHNlZSBbSW1hZ2UgbG9hZGVycyBjb25maWd1cmF0aW9uXShodHRwczovL25leHRqcy5vcmcvZG9jcy9hcGktcmVmZXJlbmNlL25leHQvbGVnYWN5L2ltYWdlI2xvYWRlcikgKi9cbiAgbG9hZGVyOiBMb2FkZXJWYWx1ZVxuXG4gIC8qKiBAc2VlIFtJbWFnZSBsb2FkZXIgY29uZmlndXJhdGlvbl0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2FwaS1yZWZlcmVuY2UvY29tcG9uZW50cy9pbWFnZSNwYXRoKSAqL1xuICBwYXRoOiBzdHJpbmdcblxuICAvKiogQHNlZSBbSW1hZ2UgbG9hZGVyIGNvbmZpZ3VyYXRpb25dKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNsb2FkZXItY29uZmlndXJhdGlvbikgKi9cbiAgbG9hZGVyRmlsZTogc3RyaW5nXG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgcmVtb3RlUGF0dGVybnNgIGluc3RlYWQuXG4gICAqL1xuICBkb21haW5zOiBzdHJpbmdbXVxuXG4gIC8qKiBAc2VlIFtEaXNhYmxlIHN0YXRpYyBpbWFnZSBpbXBvcnQgY29uZmlndXJhdGlvbl0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L2ltYWdlI2Rpc2FibGUtc3RhdGljLWltcG9ydHMpICovXG4gIGRpc2FibGVTdGF0aWNJbWFnZXM6IGJvb2xlYW5cblxuICAvKiogQHNlZSBbQ2FjaGUgYmVoYXZpb3JdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNjYWNoaW5nLWJlaGF2aW9yKSAqL1xuICBtaW5pbXVtQ2FjaGVUVEw6IG51bWJlclxuXG4gIC8qKiBAc2VlIFtBY2NlcHRhYmxlIGZvcm1hdHNdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNhY2NlcHRhYmxlLWZvcm1hdHMpICovXG4gIGZvcm1hdHM6IEltYWdlRm9ybWF0W11cblxuICAvKiogQHNlZSBbTWF4aW11bSBEaXNrIENhY2hlIFNpemUgKGluIGJ5dGVzKV0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L2ltYWdlI21heGltdW1kaXNrY2FjaGVzaXplKSAqL1xuICBtYXhpbXVtRGlza0NhY2hlU2l6ZTogbnVtYmVyIHwgdW5kZWZpbmVkXG5cbiAgLyoqIEBzZWUgW01heGltdW0gUmVzcG9uc2UgQm9keV0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L2ltYWdlI21heGltdW1yZXNwb25zZWJvZHkpICovXG4gIG1heGltdW1SZXNwb25zZUJvZHk6IG51bWJlclxuXG4gIC8qKiBAc2VlIFtEYW5nZXJvdXNseSBBbGxvdyBTVkddKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNkYW5nZXJvdXNseS1hbGxvdy1zdmcpICovXG4gIGRhbmdlcm91c2x5QWxsb3dTVkc6IGJvb2xlYW5cblxuICAvKiogQHNlZSBbQ29udGVudCBTZWN1cml0eSBQb2xpY3ldKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNjb250ZW50c2VjdXJpdHlwb2xpY3kpICovXG4gIGNvbnRlbnRTZWN1cml0eVBvbGljeTogc3RyaW5nXG5cbiAgLyoqIEBzZWUgW0NvbnRlbnQgRGlzcG9zaXRpb24gVHlwZV0oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L2ltYWdlI2NvbnRlbnRkaXNwb3NpdGlvbnR5cGUpICovXG4gIGNvbnRlbnREaXNwb3NpdGlvblR5cGU6ICdpbmxpbmUnIHwgJ2F0dGFjaG1lbnQnXG5cbiAgLyoqIEBzZWUgW1JlbW90ZSBQYXR0ZXJuc10oaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBpLXJlZmVyZW5jZS9uZXh0L2ltYWdlI3JlbW90ZXBhdHRlcm5zKSAqL1xuICByZW1vdGVQYXR0ZXJuczogQXJyYXk8VVJMIHwgUmVtb3RlUGF0dGVybj5cblxuICAvKiogQHNlZSBbTG9jYWwgUGF0dGVybnNdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNsb2NhbFBhdHRlcm5zKSAqL1xuICBsb2NhbFBhdHRlcm5zOiBMb2NhbFBhdHRlcm5bXSB8IHVuZGVmaW5lZFxuXG4gIC8qKiBAc2VlIFtRdWFsaXRpZXNdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSNxdWFsaXRpZXMpICovXG4gIHF1YWxpdGllczogbnVtYmVyW10gfCB1bmRlZmluZWRcblxuICAvKiogQHNlZSBbVW5vcHRpbWl6ZWRdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwaS1yZWZlcmVuY2UvbmV4dC9pbWFnZSN1bm9wdGltaXplZCkgKi9cbiAgdW5vcHRpbWl6ZWQ6IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgSW1hZ2VDb25maWcgPSBQYXJ0aWFsPEltYWdlQ29uZmlnQ29tcGxldGU+XG5cbmV4cG9ydCBjb25zdCBpbWFnZUNvbmZpZ0RlZmF1bHQ6IEltYWdlQ29uZmlnQ29tcGxldGUgPSB7XG4gIGRldmljZVNpemVzOiBbNjQwLCA3NTAsIDgyOCwgMTA4MCwgMTIwMCwgMTkyMCwgMjA0OCwgMzg0MF0sXG4gIGltYWdlU2l6ZXM6IFsxNiwgMzIsIDQ4LCA2NCwgOTYsIDEyOCwgMjU2LCAzODRdLFxuICBwYXRoOiAnL19uZXh0L2ltYWdlJyxcbiAgbG9hZGVyOiAnZGVmYXVsdCcsXG4gIGxvYWRlckZpbGU6ICcnLFxuICBkb21haW5zOiBbXSxcbiAgZGlzYWJsZVN0YXRpY0ltYWdlczogZmFsc2UsXG4gIG1pbmltdW1DYWNoZVRUTDogNjAsXG4gIGZvcm1hdHM6IFsnaW1hZ2Uvd2VicCddLFxuICBtYXhpbXVtRGlza0NhY2hlU2l6ZTogdW5kZWZpbmVkLCAvLyBhdXRvLWRldGVjdCBieSBkZWZhdWx0XG4gIG1heGltdW1SZXNwb25zZUJvZHk6IDUwXzAwMF8wMDAsIC8vIDUwIE1CXG4gIGRhbmdlcm91c2x5QWxsb3dTVkc6IGZhbHNlLFxuICBjb250ZW50U2VjdXJpdHlQb2xpY3k6IGBzY3JpcHQtc3JjICdub25lJzsgZnJhbWUtc3JjICdub25lJzsgc2FuZGJveDtgLFxuICBjb250ZW50RGlzcG9zaXRpb25UeXBlOiAnYXR0YWNobWVudCcsXG4gIGxvY2FsUGF0dGVybnM6IHVuZGVmaW5lZCwgLy8gZGVmYXVsdDogYWxsb3cgYWxsIGxvY2FsIGltYWdlc1xuICByZW1vdGVQYXR0ZXJuczogW10sIC8vIGRlZmF1bHQ6IGFsbG93IG5vIHJlbW90ZSBpbWFnZXNcbiAgcXVhbGl0aWVzOiB1bmRlZmluZWQsIC8vIGRlZmF1bHQ6IGFsbG93IGFsbCBxdWFsaXRpZXNcbiAgdW5vcHRpbWl6ZWQ6IGZhbHNlLFxufVxuIl0sIm5hbWVzIjpbIlZBTElEX0xPQURFUlMiLCJpbWFnZUNvbmZpZ0RlZmF1bHQiLCJkZXZpY2VTaXplcyIsImltYWdlU2l6ZXMiLCJwYXRoIiwibG9hZGVyIiwibG9hZGVyRmlsZSIsImRvbWFpbnMiLCJkaXNhYmxlU3RhdGljSW1hZ2VzIiwibWluaW11bUNhY2hlVFRMIiwiZm9ybWF0cyIsIm1heGltdW1EaXNrQ2FjaGVTaXplIiwidW5kZWZpbmVkIiwibWF4aW11bVJlc3BvbnNlQm9keSIsImRhbmdlcm91c2x5QWxsb3dTVkciLCJjb250ZW50U2VjdXJpdHlQb2xpY3kiLCJjb250ZW50RGlzcG9zaXRpb25UeXBlIiwibG9jYWxQYXR0ZXJucyIsInJlbW90ZVBhdHRlcm5zIiwicXVhbGl0aWVzIiwidW5vcHRpbWl6ZWQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/image-config.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/image-external.js":
|
||
/*!*************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/image-external.js ***!
|
||
\*************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n default: function() {\n return _default;\n },\n getImageProps: function() {\n return getImageProps;\n }\n});\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _getimgprops = __webpack_require__(/*! ./get-img-props */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/get-img-props.js\");\nconst _imagecomponent = __webpack_require__(/*! ../../client/image-component */ \"(app-pages-browser)/./node_modules/next/dist/client/image-component.js\");\nconst _imageloader = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! next/dist/shared/lib/image-loader */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/image-loader.js\"));\nfunction getImageProps(imgProps) {\n const { props } = (0, _getimgprops.getImgProps)(imgProps, {\n defaultLoader: _imageloader.default,\n // This is replaced by webpack define plugin\n imgConf: {\"deviceSizes\":[640,750,828,1080,1200,1920,2048,3840],\"imageSizes\":[16,32,48,64,96,128,256,384],\"path\":\"/_next/image\",\"loader\":\"default\",\"dangerouslyAllowSVG\":false,\"unoptimized\":false,\"domains\":[],\"remotePatterns\":[],\"output\":\"standalone\"}\n });\n // Normally we don't care about undefined props because we pass to JSX,\n // but this exported function could be used by the end user for anything\n // so we delete undefined props to clean it up a little.\n for (const [key, value] of Object.entries(props)){\n if (value === undefined) {\n delete props[key];\n }\n }\n return {\n props\n };\n}\nconst _default = _imagecomponent.Image; //# sourceMappingURL=image-external.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pbWFnZS1leHRlcm5hbC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFpQ0EsT0FBb0I7ZUFBcEI7O0lBakJnQkEsYUFBYTtlQUFiQTs7Ozt5Q0FiWTs0Q0FDTjtrRkFHSTtBQVNuQixTQUFTQSxjQUFjQyxRQUFvQjtJQUNoRCxNQUFNLEVBQUVDLEtBQUssRUFBRSxHQUFHQyxDQUFBQSxHQUFBQSxhQUFBQSxXQUFBQSxFQUFZRixVQUFVO1FBQ3RDRyxlQUFBQSxhQUFBQSxPQUFhO1FBQ2IsNENBQTRDO1FBQzVDQyxTQUFTQyxnUEFBNkI7SUFDeEM7SUFDQSx1RUFBdUU7SUFDdkUsd0VBQXdFO0lBQ3hFLHdEQUF3RDtJQUN4RCxLQUFLLE1BQU0sQ0FBQ0csS0FBS0MsTUFBTSxJQUFJQyxPQUFPQyxPQUFPLENBQUNWLE9BQVE7UUFDaEQsSUFBSVEsVUFBVUcsV0FBVztZQUN2QixPQUFPWCxLQUFLLENBQUNPLElBQTBCO1FBQ3pDO0lBQ0Y7SUFDQSxPQUFPO1FBQUVQO0lBQU07QUFDakI7TUFFQSxXQUFlWSxnQkFBQUEsS0FBSyIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL3NoYXJlZC9saWIvaW1hZ2UtZXh0ZXJuYWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSW1hZ2VDb25maWdDb21wbGV0ZSwgSW1hZ2VMb2FkZXJQcm9wcyB9IGZyb20gJy4vaW1hZ2UtY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBJbWFnZVByb3BzLCBJbWFnZUxvYWRlciwgU3RhdGljSW1hZ2VEYXRhIH0gZnJvbSAnLi9nZXQtaW1nLXByb3BzJ1xuXG5pbXBvcnQgeyBnZXRJbWdQcm9wcyB9IGZyb20gJy4vZ2V0LWltZy1wcm9wcydcbmltcG9ydCB7IEltYWdlIH0gZnJvbSAnLi4vLi4vY2xpZW50L2ltYWdlLWNvbXBvbmVudCdcblxuLy8gVGhpcyBpcyByZXBsYWNlZCBieSB3ZWJwYWNrIGFsaWFzXG5pbXBvcnQgZGVmYXVsdExvYWRlciBmcm9tICduZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pbWFnZS1sb2FkZXInXG5cbi8qKlxuICogRm9yIG1vcmUgYWR2YW5jZWQgdXNlIGNhc2VzLCB5b3UgY2FuIGNhbGwgYGdldEltYWdlUHJvcHMoKWBcbiAqIHRvIGdldCB0aGUgcHJvcHMgdGhhdCB3b3VsZCBiZSBwYXNzZWQgdG8gdGhlIHVuZGVybHlpbmcgYDxpbWc+YCBlbGVtZW50LFxuICogYW5kIGluc3RlYWQgcGFzcyB0byB0aGVtIHRvIGFub3RoZXIgY29tcG9uZW50LCBzdHlsZSwgY2FudmFzLCBldGMuXG4gKlxuICogUmVhZCBtb3JlOiBbTmV4dC5qcyBkb2NzOiBgZ2V0SW1hZ2VQcm9wc2BdKGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9hcGktcmVmZXJlbmNlL2NvbXBvbmVudHMvaW1hZ2UjZ2V0aW1hZ2Vwcm9wcylcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEltYWdlUHJvcHMoaW1nUHJvcHM6IEltYWdlUHJvcHMpIHtcbiAgY29uc3QgeyBwcm9wcyB9ID0gZ2V0SW1nUHJvcHMoaW1nUHJvcHMsIHtcbiAgICBkZWZhdWx0TG9hZGVyLFxuICAgIC8vIFRoaXMgaXMgcmVwbGFjZWQgYnkgd2VicGFjayBkZWZpbmUgcGx1Z2luXG4gICAgaW1nQ29uZjogcHJvY2Vzcy5lbnYuX19ORVhUX0lNQUdFX09QVFMgYXMgYW55IGFzIEltYWdlQ29uZmlnQ29tcGxldGUsXG4gIH0pXG4gIC8vIE5vcm1hbGx5IHdlIGRvbid0IGNhcmUgYWJvdXQgdW5kZWZpbmVkIHByb3BzIGJlY2F1c2Ugd2UgcGFzcyB0byBKU1gsXG4gIC8vIGJ1dCB0aGlzIGV4cG9ydGVkIGZ1bmN0aW9uIGNvdWxkIGJlIHVzZWQgYnkgdGhlIGVuZCB1c2VyIGZvciBhbnl0aGluZ1xuICAvLyBzbyB3ZSBkZWxldGUgdW5kZWZpbmVkIHByb3BzIHRvIGNsZWFuIGl0IHVwIGEgbGl0dGxlLlxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhwcm9wcykpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZGVsZXRlIHByb3BzW2tleSBhcyBrZXlvZiB0eXBlb2YgcHJvcHNdXG4gICAgfVxuICB9XG4gIHJldHVybiB7IHByb3BzIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VcblxuZXhwb3J0IHR5cGUgeyBJbWFnZVByb3BzLCBJbWFnZUxvYWRlclByb3BzLCBJbWFnZUxvYWRlciwgU3RhdGljSW1hZ2VEYXRhIH1cbiJdLCJuYW1lcyI6WyJnZXRJbWFnZVByb3BzIiwiaW1nUHJvcHMiLCJwcm9wcyIsImdldEltZ1Byb3BzIiwiZGVmYXVsdExvYWRlciIsImltZ0NvbmYiLCJwcm9jZXNzIiwiZW52IiwiX19ORVhUX0lNQUdFX09QVFMiLCJrZXkiLCJ2YWx1ZSIsIk9iamVjdCIsImVudHJpZXMiLCJ1bmRlZmluZWQiLCJJbWFnZSJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/image-external.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/image-loader.js":
|
||
/*!***********************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/image-loader.js ***!
|
||
\***********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return _default;\n }\n}));\nconst DEFAULT_Q = 75;\nfunction defaultLoader(param) {\n let { config, src, width, quality } = param;\n var _config_qualities;\n if (true) {\n const missingValues = [];\n // these should always be provided but make sure they are\n if (!src) missingValues.push('src');\n if (!width) missingValues.push('width');\n if (missingValues.length > 0) {\n throw Object.defineProperty(new Error(\"Next Image Optimization requires \" + missingValues.join(', ') + \" to be provided. Make sure you pass them as props to the `next/image` component. Received: \" + JSON.stringify({\n src,\n width,\n quality\n })), \"__NEXT_ERROR_CODE\", {\n value: \"E188\",\n enumerable: false,\n configurable: true\n });\n }\n if (src.startsWith('//')) {\n throw Object.defineProperty(new Error('Failed to parse src \"' + src + '\" on `next/image`, protocol-relative URL (//) must be changed to an absolute URL (http:// or https://)'), \"__NEXT_ERROR_CODE\", {\n value: \"E360\",\n enumerable: false,\n configurable: true\n });\n }\n if (src.startsWith('/') && config.localPatterns) {\n if (true) {\n // We use dynamic require because this should only error in development\n const { hasLocalMatch } = __webpack_require__(/*! ./match-local-pattern */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/match-local-pattern.js\");\n if (!hasLocalMatch(config.localPatterns, src)) {\n throw Object.defineProperty(new Error(\"Invalid src prop (\" + src + \") on `next/image` does not match `images.localPatterns` configured in your `next.config.js`\\n\" + \"See more info: https://nextjs.org/docs/messages/next-image-unconfigured-localpatterns\"), \"__NEXT_ERROR_CODE\", {\n value: \"E426\",\n enumerable: false,\n configurable: true\n });\n }\n }\n }\n if (!src.startsWith('/') && (config.domains || config.remotePatterns)) {\n let parsedSrc;\n try {\n parsedSrc = new URL(src);\n } catch (err) {\n console.error(err);\n throw Object.defineProperty(new Error('Failed to parse src \"' + src + '\" on `next/image`, if using relative image it must start with a leading slash \"/\" or be an absolute URL (http:// or https://)'), \"__NEXT_ERROR_CODE\", {\n value: \"E63\",\n enumerable: false,\n configurable: true\n });\n }\n if (true) {\n // We use dynamic require because this should only error in development\n const { hasRemoteMatch } = __webpack_require__(/*! ./match-remote-pattern */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/match-remote-pattern.js\");\n if (!hasRemoteMatch(config.domains, config.remotePatterns, parsedSrc)) {\n throw Object.defineProperty(new Error(\"Invalid src prop (\" + src + ') on `next/image`, hostname \"' + parsedSrc.hostname + '\" is not configured under images in your `next.config.js`\\n' + \"See more info: https://nextjs.org/docs/messages/next-image-unconfigured-host\"), \"__NEXT_ERROR_CODE\", {\n value: \"E231\",\n enumerable: false,\n configurable: true\n });\n }\n }\n }\n if (quality && config.qualities && !config.qualities.includes(quality)) {\n throw Object.defineProperty(new Error(\"Invalid quality prop (\" + quality + \") on `next/image` does not match `images.qualities` configured in your `next.config.js`\\n\" + \"See more info: https://nextjs.org/docs/messages/next-image-unconfigured-qualities\"), \"__NEXT_ERROR_CODE\", {\n value: \"E623\",\n enumerable: false,\n configurable: true\n });\n }\n }\n const q = quality || ((_config_qualities = config.qualities) == null ? void 0 : _config_qualities.reduce((prev, cur)=>Math.abs(cur - DEFAULT_Q) < Math.abs(prev - DEFAULT_Q) ? cur : prev)) || DEFAULT_Q;\n return config.path + \"?url=\" + encodeURIComponent(src) + \"&w=\" + width + \"&q=\" + q + (src.startsWith('/_next/static/media/') && false ? 0 : '');\n}\n// We use this to determine if the import is the default loader\n// or a custom loader defined by the user in next.config.js\ndefaultLoader.__next_img_default = true;\nconst _default = defaultLoader; //# sourceMappingURL=image-loader.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9pbWFnZS1sb2FkZXIuanMiLCJtYXBwaW5ncyI6Ijs7OzsyQ0EyR0E7OztlQUFBOzs7QUF6R0EsTUFBTUEsWUFBWTtBQUVsQixTQUFTQyxjQUFjLEtBS007SUFMTixNQUNyQkMsTUFBTSxFQUNOQyxHQUFHLEVBQ0hDLEtBQUssRUFDTEMsT0FBTyxFQUNvQixHQUxOO1FBdUZuQkg7SUFqRkYsSUFBSUksSUFBb0IsRUFBbUI7UUFDekMsTUFBTUcsZ0JBQWdCLEVBQUU7UUFFeEIseURBQXlEO1FBQ3pELElBQUksQ0FBQ04sS0FBS00sY0FBY0MsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQ04sT0FBT0ssY0FBY0MsSUFBSSxDQUFDO1FBRS9CLElBQUlELGNBQWNFLE1BQU0sR0FBRyxHQUFHO1lBQzVCLE1BQU0scUJBTUwsQ0FOSyxJQUFJQyxNQUNQLHNDQUFtQ0gsY0FBY0ksSUFBSSxDQUNwRCxRQUNBLGdHQUErRkMsS0FBS0MsU0FBUyxDQUM3RztnQkFBRVo7Z0JBQUtDO2dCQUFPQztZQUFRLEtBSnBCO3VCQUFBOzRCQUFBOzhCQUFBO1lBTU47UUFDRjtRQUVBLElBQUlGLElBQUlhLFVBQVUsQ0FBQyxPQUFPO1lBQ3hCLE1BQU0scUJBRUwsQ0FGSyxJQUFJSixNQUNQLDBCQUF1QlQsTUFBSSwyR0FEeEI7dUJBQUE7NEJBQUE7OEJBQUE7WUFFTjtRQUNGO1FBRUEsSUFBSUEsSUFBSWEsVUFBVSxDQUFDLFFBQVFkLE9BQU9lLGFBQWEsRUFBRTtZQUMvQyxJQUNFWCxJQUVtQyxFQUNuQztnQkFDQSx1RUFBdUU7Z0JBQ3ZFLE1BQU0sRUFBRWEsYUFBYSxFQUFFLEdBQ3JCQyxtQkFBT0EsQ0FBQyw2R0FBdUI7Z0JBQ2pDLElBQUksQ0FBQ0QsY0FBY2pCLE9BQU9lLGFBQWEsRUFBRWQsTUFBTTtvQkFDN0MsTUFBTSxxQkFHTCxDQUhLLElBQUlTLE1BQ1AsdUJBQW9CVCxNQUFJLGtHQUN0QiwwRkFGQzsrQkFBQTtvQ0FBQTtzQ0FBQTtvQkFHTjtnQkFDRjtZQUNGO1FBQ0Y7UUFFQSxJQUFJLENBQUNBLElBQUlhLFVBQVUsQ0FBQyxRQUFTZCxDQUFBQSxPQUFPbUIsT0FBTyxJQUFJbkIsT0FBT29CLGNBQUFBLEdBQWlCO1lBQ3JFLElBQUlDO1lBQ0osSUFBSTtnQkFDRkEsWUFBWSxJQUFJQyxJQUFJckI7WUFDdEIsRUFBRSxPQUFPc0IsS0FBSztnQkFDWkMsUUFBUUMsS0FBSyxDQUFDRjtnQkFDZCxNQUFNLHFCQUVMLENBRkssSUFBSWIsTUFDUCwwQkFBdUJULE1BQUksa0lBRHhCOzJCQUFBO2dDQUFBO2tDQUFBO2dCQUVOO1lBQ0Y7WUFFQSxJQUNFRyxJQUVtQyxFQUNuQztnQkFDQSx1RUFBdUU7Z0JBQ3ZFLE1BQU0sRUFBRXNCLGNBQWMsRUFBRSxHQUN0QlIsbUJBQU9BLENBQUMsK0dBQXdCO2dCQUNsQyxJQUNFLENBQUNRLGVBQWUxQixPQUFPbUIsT0FBTyxFQUFHbkIsT0FBT29CLGNBQWMsRUFBR0MsWUFDekQ7b0JBQ0EsTUFBTSxxQkFHTCxDQUhLLElBQUlYLE1BQ1AsdUJBQW9CVCxNQUFJLGtDQUFpQ29CLFVBQVVNLFFBQVEsR0FBQyxnRUFDMUUsaUZBRkM7K0JBQUE7b0NBQUE7c0NBQUE7b0JBR047Z0JBQ0Y7WUFDRjtRQUNGO1FBRUEsSUFBSXhCLFdBQVdILE9BQU80QixTQUFTLElBQUksQ0FBQzVCLE9BQU80QixTQUFTLENBQUNDLFFBQVEsQ0FBQzFCLFVBQVU7WUFDdEUsTUFBTSxxQkFHTCxDQUhLLElBQUlPLE1BQ1AsMkJBQXdCUCxVQUFRLDhGQUM5QixzRkFGQzt1QkFBQTs0QkFBQTs4QkFBQTtZQUdOO1FBQ0Y7SUFDRjtJQUVBLE1BQU0yQixJQUNKM0IsV0FBQUEsQ0FBQUEsQ0FDQUgsb0JBQUFBLE9BQU80QixTQUFBQSxLQUFTLGdCQUFoQjVCLGtCQUFrQitCLE1BQU0sQ0FBQyxDQUFDQyxNQUFNQyxNQUM5QkMsS0FBS0MsR0FBRyxDQUFDRixNQUFNbkMsYUFBYW9DLEtBQUtDLEdBQUcsQ0FBQ0gsT0FBT2xDLGFBQWFtQyxNQUFNRCxLQUFBQSxLQUVqRWxDO0lBRUYsT0FBVUUsT0FBT29DLElBQUksR0FBQyxVQUFPQyxtQkFBbUJwQyxPQUFLLFFBQUtDLFFBQU0sUUFBSzRCLElBQ25FN0IsQ0FBQUEsSUFBSWEsVUFBVSxDQUFDLDJCQUEyQlYsS0FBOEIsR0FDbkUsQ0FBcUMsR0FDdEMsR0FBQztBQUVUO0FBRUEsK0RBQStEO0FBQy9ELDJEQUEyRDtBQUMzREwsY0FBY3dDLGtCQUFrQixHQUFHO01BRW5DLFdBQWV4QyIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL3NoYXJlZC9saWIvaW1hZ2UtbG9hZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSW1hZ2VMb2FkZXJQcm9wc1dpdGhDb25maWcgfSBmcm9tICcuL2ltYWdlLWNvbmZpZydcblxuY29uc3QgREVGQVVMVF9RID0gNzVcblxuZnVuY3Rpb24gZGVmYXVsdExvYWRlcih7XG4gIGNvbmZpZyxcbiAgc3JjLFxuICB3aWR0aCxcbiAgcXVhbGl0eSxcbn06IEltYWdlTG9hZGVyUHJvcHNXaXRoQ29uZmlnKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBjb25zdCBtaXNzaW5nVmFsdWVzID0gW11cblxuICAgIC8vIHRoZXNlIHNob3VsZCBhbHdheXMgYmUgcHJvdmlkZWQgYnV0IG1ha2Ugc3VyZSB0aGV5IGFyZVxuICAgIGlmICghc3JjKSBtaXNzaW5nVmFsdWVzLnB1c2goJ3NyYycpXG4gICAgaWYgKCF3aWR0aCkgbWlzc2luZ1ZhbHVlcy5wdXNoKCd3aWR0aCcpXG5cbiAgICBpZiAobWlzc2luZ1ZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBOZXh0IEltYWdlIE9wdGltaXphdGlvbiByZXF1aXJlcyAke21pc3NpbmdWYWx1ZXMuam9pbihcbiAgICAgICAgICAnLCAnXG4gICAgICAgICl9IHRvIGJlIHByb3ZpZGVkLiBNYWtlIHN1cmUgeW91IHBhc3MgdGhlbSBhcyBwcm9wcyB0byB0aGUgXFxgbmV4dC9pbWFnZVxcYCBjb21wb25lbnQuIFJlY2VpdmVkOiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHsgc3JjLCB3aWR0aCwgcXVhbGl0eSB9XG4gICAgICAgICl9YFxuICAgICAgKVxuICAgIH1cblxuICAgIGlmIChzcmMuc3RhcnRzV2l0aCgnLy8nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRmFpbGVkIHRvIHBhcnNlIHNyYyBcIiR7c3JjfVwiIG9uIFxcYG5leHQvaW1hZ2VcXGAsIHByb3RvY29sLXJlbGF0aXZlIFVSTCAoLy8pIG11c3QgYmUgY2hhbmdlZCB0byBhbiBhYnNvbHV0ZSBVUkwgKGh0dHA6Ly8gb3IgaHR0cHM6Ly8pYFxuICAgICAgKVxuICAgIH1cblxuICAgIGlmIChzcmMuc3RhcnRzV2l0aCgnLycpICYmIGNvbmZpZy5sb2NhbFBhdHRlcm5zKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAndGVzdCcgJiZcbiAgICAgICAgLy8gbWljcm9tYXRjaCBpc24ndCBjb21wYXRpYmxlIHdpdGggZWRnZSBydW50aW1lXG4gICAgICAgIHByb2Nlc3MuZW52Lk5FWFRfUlVOVElNRSAhPT0gJ2VkZ2UnXG4gICAgICApIHtcbiAgICAgICAgLy8gV2UgdXNlIGR5bmFtaWMgcmVxdWlyZSBiZWNhdXNlIHRoaXMgc2hvdWxkIG9ubHkgZXJyb3IgaW4gZGV2ZWxvcG1lbnRcbiAgICAgICAgY29uc3QgeyBoYXNMb2NhbE1hdGNoIH0gPVxuICAgICAgICAgIHJlcXVpcmUoJy4vbWF0Y2gtbG9jYWwtcGF0dGVybicpIGFzIHR5cGVvZiBpbXBvcnQoJy4vbWF0Y2gtbG9jYWwtcGF0dGVybicpXG4gICAgICAgIGlmICghaGFzTG9jYWxNYXRjaChjb25maWcubG9jYWxQYXR0ZXJucywgc3JjKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIHNyYyBwcm9wICgke3NyY30pIG9uIFxcYG5leHQvaW1hZ2VcXGAgZG9lcyBub3QgbWF0Y2ggXFxgaW1hZ2VzLmxvY2FsUGF0dGVybnNcXGAgY29uZmlndXJlZCBpbiB5b3VyIFxcYG5leHQuY29uZmlnLmpzXFxgXFxuYCArXG4gICAgICAgICAgICAgIGBTZWUgbW9yZSBpbmZvOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9uZXh0LWltYWdlLXVuY29uZmlndXJlZC1sb2NhbHBhdHRlcm5zYFxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghc3JjLnN0YXJ0c1dpdGgoJy8nKSAmJiAoY29uZmlnLmRvbWFpbnMgfHwgY29uZmlnLnJlbW90ZVBhdHRlcm5zKSkge1xuICAgICAgbGV0IHBhcnNlZFNyYzogVVJMXG4gICAgICB0cnkge1xuICAgICAgICBwYXJzZWRTcmMgPSBuZXcgVVJMKHNyYylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGBGYWlsZWQgdG8gcGFyc2Ugc3JjIFwiJHtzcmN9XCIgb24gXFxgbmV4dC9pbWFnZVxcYCwgaWYgdXNpbmcgcmVsYXRpdmUgaW1hZ2UgaXQgbXVzdCBzdGFydCB3aXRoIGEgbGVhZGluZyBzbGFzaCBcIi9cIiBvciBiZSBhbiBhYnNvbHV0ZSBVUkwgKGh0dHA6Ly8gb3IgaHR0cHM6Ly8pYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJlxuICAgICAgICAvLyBtaWNyb21hdGNoIGlzbid0IGNvbXBhdGlibGUgd2l0aCBlZGdlIHJ1bnRpbWVcbiAgICAgICAgcHJvY2Vzcy5lbnYuTkVYVF9SVU5USU1FICE9PSAnZWRnZSdcbiAgICAgICkge1xuICAgICAgICAvLyBXZSB1c2UgZHluYW1pYyByZXF1aXJlIGJlY2F1c2UgdGhpcyBzaG91bGQgb25seSBlcnJvciBpbiBkZXZlbG9wbWVudFxuICAgICAgICBjb25zdCB7IGhhc1JlbW90ZU1hdGNoIH0gPVxuICAgICAgICAgIHJlcXVpcmUoJy4vbWF0Y2gtcmVtb3RlLXBhdHRlcm4nKSBhcyB0eXBlb2YgaW1wb3J0KCcuL21hdGNoLXJlbW90ZS1wYXR0ZXJuJylcbiAgICAgICAgaWYgKFxuICAgICAgICAgICFoYXNSZW1vdGVNYXRjaChjb25maWcuZG9tYWlucyEsIGNvbmZpZy5yZW1vdGVQYXR0ZXJucyEsIHBhcnNlZFNyYylcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYEludmFsaWQgc3JjIHByb3AgKCR7c3JjfSkgb24gXFxgbmV4dC9pbWFnZVxcYCwgaG9zdG5hbWUgXCIke3BhcnNlZFNyYy5ob3N0bmFtZX1cIiBpcyBub3QgY29uZmlndXJlZCB1bmRlciBpbWFnZXMgaW4geW91ciBcXGBuZXh0LmNvbmZpZy5qc1xcYFxcbmAgK1xuICAgICAgICAgICAgICBgU2VlIG1vcmUgaW5mbzogaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvbmV4dC1pbWFnZS11bmNvbmZpZ3VyZWQtaG9zdGBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocXVhbGl0eSAmJiBjb25maWcucXVhbGl0aWVzICYmICFjb25maWcucXVhbGl0aWVzLmluY2x1ZGVzKHF1YWxpdHkpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHF1YWxpdHkgcHJvcCAoJHtxdWFsaXR5fSkgb24gXFxgbmV4dC9pbWFnZVxcYCBkb2VzIG5vdCBtYXRjaCBcXGBpbWFnZXMucXVhbGl0aWVzXFxgIGNvbmZpZ3VyZWQgaW4geW91ciBcXGBuZXh0LmNvbmZpZy5qc1xcYFxcbmAgK1xuICAgICAgICAgIGBTZWUgbW9yZSBpbmZvOiBodHRwczovL25leHRqcy5vcmcvZG9jcy9tZXNzYWdlcy9uZXh0LWltYWdlLXVuY29uZmlndXJlZC1xdWFsaXRpZXNgXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcSA9XG4gICAgcXVhbGl0eSB8fFxuICAgIGNvbmZpZy5xdWFsaXRpZXM/LnJlZHVjZSgocHJldiwgY3VyKSA9PlxuICAgICAgTWF0aC5hYnMoY3VyIC0gREVGQVVMVF9RKSA8IE1hdGguYWJzKHByZXYgLSBERUZBVUxUX1EpID8gY3VyIDogcHJldlxuICAgICkgfHxcbiAgICBERUZBVUxUX1FcblxuICByZXR1cm4gYCR7Y29uZmlnLnBhdGh9P3VybD0ke2VuY29kZVVSSUNvbXBvbmVudChzcmMpfSZ3PSR7d2lkdGh9JnE9JHtxfSR7XG4gICAgc3JjLnN0YXJ0c1dpdGgoJy9fbmV4dC9zdGF0aWMvbWVkaWEvJykgJiYgcHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEXG4gICAgICA/IGAmZHBsPSR7cHJvY2Vzcy5lbnYuTkVYVF9ERVBMT1lNRU5UX0lEfWBcbiAgICAgIDogJydcbiAgfWBcbn1cblxuLy8gV2UgdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBpbXBvcnQgaXMgdGhlIGRlZmF1bHQgbG9hZGVyXG4vLyBvciBhIGN1c3RvbSBsb2FkZXIgZGVmaW5lZCBieSB0aGUgdXNlciBpbiBuZXh0LmNvbmZpZy5qc1xuZGVmYXVsdExvYWRlci5fX25leHRfaW1nX2RlZmF1bHQgPSB0cnVlXG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRMb2FkZXJcbiJdLCJuYW1lcyI6WyJERUZBVUxUX1EiLCJkZWZhdWx0TG9hZGVyIiwiY29uZmlnIiwic3JjIiwid2lkdGgiLCJxdWFsaXR5IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwibWlzc2luZ1ZhbHVlcyIsInB1c2giLCJsZW5ndGgiLCJFcnJvciIsImpvaW4iLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhcnRzV2l0aCIsImxvY2FsUGF0dGVybnMiLCJORVhUX1JVTlRJTUUiLCJoYXNMb2NhbE1hdGNoIiwicmVxdWlyZSIsImRvbWFpbnMiLCJyZW1vdGVQYXR0ZXJucyIsInBhcnNlZFNyYyIsIlVSTCIsImVyciIsImNvbnNvbGUiLCJlcnJvciIsImhhc1JlbW90ZU1hdGNoIiwiaG9zdG5hbWUiLCJxdWFsaXRpZXMiLCJpbmNsdWRlcyIsInEiLCJyZWR1Y2UiLCJwcmV2IiwiY3VyIiwiTWF0aCIsImFicyIsInBhdGgiLCJlbmNvZGVVUklDb21wb25lbnQiLCJORVhUX0RFUExPWU1FTlRfSUQiLCJfX25leHRfaW1nX2RlZmF1bHQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/image-loader.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/match-local-pattern.js":
|
||
/*!******************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/match-local-pattern.js ***!
|
||
\******************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n hasLocalMatch: function() {\n return hasLocalMatch;\n },\n matchLocalPattern: function() {\n return matchLocalPattern;\n }\n});\nconst _picomatch = __webpack_require__(/*! next/dist/compiled/picomatch */ \"(app-pages-browser)/./node_modules/next/dist/compiled/picomatch/index.js\");\nfunction matchLocalPattern(pattern, url) {\n if (pattern.search !== undefined) {\n if (pattern.search !== url.search) {\n return false;\n }\n }\n var _pattern_pathname;\n if (!(0, _picomatch.makeRe)((_pattern_pathname = pattern.pathname) != null ? _pattern_pathname : '**', {\n dot: true\n }).test(url.pathname)) {\n return false;\n }\n return true;\n}\nfunction hasLocalMatch(localPatterns, urlPathAndQuery) {\n if (!localPatterns) {\n // if the user didn't define \"localPatterns\", we allow all local images\n return true;\n }\n const url = new URL(urlPathAndQuery, 'http://n');\n return localPatterns.some((p)=>matchLocalPattern(p, url));\n} //# sourceMappingURL=match-local-pattern.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9tYXRjaC1sb2NhbC1wYXR0ZXJuLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztJQWtCZ0JBLGFBQWE7ZUFBYkE7O0lBZEFDLGlCQUFpQjtlQUFqQkE7Ozt1Q0FITztBQUdoQixTQUFTQSxrQkFBa0JDLE9BQXFCLEVBQUVDLEdBQVE7SUFDL0QsSUFBSUQsUUFBUUUsTUFBTSxLQUFLQyxXQUFXO1FBQ2hDLElBQUlILFFBQVFFLE1BQU0sS0FBS0QsSUFBSUMsTUFBTSxFQUFFO1lBQ2pDLE9BQU87UUFDVDtJQUNGO1FBRVlGO0lBQVosSUFBSSxDQUFDSSxDQUFBQSxHQUFBQSxXQUFBQSxNQUFBQSxFQUFPSixDQUFBQSxvQkFBQUEsUUFBUUssUUFBQUEsS0FBUSxPQUFoQkwsb0JBQW9CLE1BQU07UUFBRU0sS0FBSztJQUFLLEdBQUdDLElBQUksQ0FBQ04sSUFBSUksUUFBUSxHQUFHO1FBQ3ZFLE9BQU87SUFDVDtJQUVBLE9BQU87QUFDVDtBQUVPLFNBQVNQLGNBQ2RVLGFBQXlDLEVBQ3pDQyxlQUF1QjtJQUV2QixJQUFJLENBQUNELGVBQWU7UUFDbEIsdUVBQXVFO1FBQ3ZFLE9BQU87SUFDVDtJQUNBLE1BQU1QLE1BQU0sSUFBSVMsSUFBSUQsaUJBQWlCO0lBQ3JDLE9BQU9ELGNBQWNHLElBQUksQ0FBQyxDQUFDQyxJQUFNYixrQkFBa0JhLEdBQUdYO0FBQ3hEIiwic291cmNlcyI6WyIvaG9tZS9zcmMvc2hhcmVkL2xpYi9tYXRjaC1sb2NhbC1wYXR0ZXJuLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgTG9jYWxQYXR0ZXJuIH0gZnJvbSAnLi9pbWFnZS1jb25maWcnXG5pbXBvcnQgeyBtYWtlUmUgfSBmcm9tICduZXh0L2Rpc3QvY29tcGlsZWQvcGljb21hdGNoJ1xuXG4vLyBNb2RpZnlpbmcgdGhpcyBmdW5jdGlvbiBzaG91bGQgYWxzbyBtb2RpZnkgd3JpdGVJbWFnZXNNYW5pZmVzdCgpXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2hMb2NhbFBhdHRlcm4ocGF0dGVybjogTG9jYWxQYXR0ZXJuLCB1cmw6IFVSTCk6IGJvb2xlYW4ge1xuICBpZiAocGF0dGVybi5zZWFyY2ggIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChwYXR0ZXJuLnNlYXJjaCAhPT0gdXJsLnNlYXJjaCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgaWYgKCFtYWtlUmUocGF0dGVybi5wYXRobmFtZSA/PyAnKionLCB7IGRvdDogdHJ1ZSB9KS50ZXN0KHVybC5wYXRobmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNMb2NhbE1hdGNoKFxuICBsb2NhbFBhdHRlcm5zOiBMb2NhbFBhdHRlcm5bXSB8IHVuZGVmaW5lZCxcbiAgdXJsUGF0aEFuZFF1ZXJ5OiBzdHJpbmdcbik6IGJvb2xlYW4ge1xuICBpZiAoIWxvY2FsUGF0dGVybnMpIHtcbiAgICAvLyBpZiB0aGUgdXNlciBkaWRuJ3QgZGVmaW5lIFwibG9jYWxQYXR0ZXJuc1wiLCB3ZSBhbGxvdyBhbGwgbG9jYWwgaW1hZ2VzXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBjb25zdCB1cmwgPSBuZXcgVVJMKHVybFBhdGhBbmRRdWVyeSwgJ2h0dHA6Ly9uJylcbiAgcmV0dXJuIGxvY2FsUGF0dGVybnMuc29tZSgocCkgPT4gbWF0Y2hMb2NhbFBhdHRlcm4ocCwgdXJsKSlcbn1cbiJdLCJuYW1lcyI6WyJoYXNMb2NhbE1hdGNoIiwibWF0Y2hMb2NhbFBhdHRlcm4iLCJwYXR0ZXJuIiwidXJsIiwic2VhcmNoIiwidW5kZWZpbmVkIiwibWFrZVJlIiwicGF0aG5hbWUiLCJkb3QiLCJ0ZXN0IiwibG9jYWxQYXR0ZXJucyIsInVybFBhdGhBbmRRdWVyeSIsIlVSTCIsInNvbWUiLCJwIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/match-local-pattern.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/match-remote-pattern.js":
|
||
/*!*******************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/match-remote-pattern.js ***!
|
||
\*******************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n hasRemoteMatch: function() {\n return hasRemoteMatch;\n },\n matchRemotePattern: function() {\n return matchRemotePattern;\n }\n});\nconst _picomatch = __webpack_require__(/*! next/dist/compiled/picomatch */ \"(app-pages-browser)/./node_modules/next/dist/compiled/picomatch/index.js\");\nfunction matchRemotePattern(pattern, url) {\n if (pattern.protocol !== undefined) {\n if (pattern.protocol.replace(/:$/, '') !== url.protocol.replace(/:$/, '')) {\n return false;\n }\n }\n if (pattern.port !== undefined) {\n if (pattern.port !== url.port) {\n return false;\n }\n }\n if (pattern.hostname === undefined) {\n throw Object.defineProperty(new Error(\"Pattern should define hostname but found\\n\" + JSON.stringify(pattern)), \"__NEXT_ERROR_CODE\", {\n value: \"E410\",\n enumerable: false,\n configurable: true\n });\n } else {\n if (!(0, _picomatch.makeRe)(pattern.hostname).test(url.hostname)) {\n return false;\n }\n }\n if (pattern.search !== undefined) {\n if (pattern.search !== url.search) {\n return false;\n }\n }\n var _pattern_pathname;\n // Should be the same as writeImagesManifest()\n if (!(0, _picomatch.makeRe)((_pattern_pathname = pattern.pathname) != null ? _pattern_pathname : '**', {\n dot: true\n }).test(url.pathname)) {\n return false;\n }\n return true;\n}\nfunction hasRemoteMatch(domains, remotePatterns, url) {\n return domains.some((domain)=>url.hostname === domain) || remotePatterns.some((p)=>matchRemotePattern(p, url));\n} //# sourceMappingURL=match-remote-pattern.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9tYXRjaC1yZW1vdGUtcGF0dGVybi5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUEyQ2dCQSxjQUFjO2VBQWRBOztJQXZDQUMsa0JBQWtCO2VBQWxCQTs7O3VDQUhPO0FBR2hCLFNBQVNBLG1CQUNkQyxPQUE0QixFQUM1QkMsR0FBUTtJQUVSLElBQUlELFFBQVFFLFFBQVEsS0FBS0MsV0FBVztRQUNsQyxJQUFJSCxRQUFRRSxRQUFRLENBQUNFLE9BQU8sQ0FBQyxNQUFNLFFBQVFILElBQUlDLFFBQVEsQ0FBQ0UsT0FBTyxDQUFDLE1BQU0sS0FBSztZQUN6RSxPQUFPO1FBQ1Q7SUFDRjtJQUNBLElBQUlKLFFBQVFLLElBQUksS0FBS0YsV0FBVztRQUM5QixJQUFJSCxRQUFRSyxJQUFJLEtBQUtKLElBQUlJLElBQUksRUFBRTtZQUM3QixPQUFPO1FBQ1Q7SUFDRjtJQUVBLElBQUlMLFFBQVFNLFFBQVEsS0FBS0gsV0FBVztRQUNsQyxNQUFNLHFCQUVMLENBRkssSUFBSUksTUFDUCwrQ0FBNENDLEtBQUtDLFNBQVMsQ0FBQ1QsV0FEeEQ7bUJBQUE7d0JBQUE7MEJBQUE7UUFFTjtJQUNGLE9BQU87UUFDTCxJQUFJLENBQUNVLENBQUFBLEdBQUFBLFdBQUFBLE1BQUFBLEVBQU9WLFFBQVFNLFFBQVEsRUFBRUssSUFBSSxDQUFDVixJQUFJSyxRQUFRLEdBQUc7WUFDaEQsT0FBTztRQUNUO0lBQ0Y7SUFFQSxJQUFJTixRQUFRWSxNQUFNLEtBQUtULFdBQVc7UUFDaEMsSUFBSUgsUUFBUVksTUFBTSxLQUFLWCxJQUFJVyxNQUFNLEVBQUU7WUFDakMsT0FBTztRQUNUO0lBQ0Y7UUFHWVo7SUFEWiw4Q0FBOEM7SUFDOUMsSUFBSSxDQUFDVSxDQUFBQSxHQUFBQSxXQUFBQSxNQUFBQSxFQUFPVixDQUFBQSxvQkFBQUEsUUFBUWEsUUFBQUEsS0FBUSxPQUFoQmIsb0JBQW9CLE1BQU07UUFBRWMsS0FBSztJQUFLLEdBQUdILElBQUksQ0FBQ1YsSUFBSVksUUFBUSxHQUFHO1FBQ3ZFLE9BQU87SUFDVDtJQUVBLE9BQU87QUFDVDtBQUVPLFNBQVNmLGVBQ2RpQixPQUFpQixFQUNqQkMsY0FBMEMsRUFDMUNmLEdBQVE7SUFFUixPQUNFYyxRQUFRRSxJQUFJLENBQUMsQ0FBQ0MsU0FBV2pCLElBQUlLLFFBQVEsS0FBS1ksV0FDMUNGLGVBQWVDLElBQUksQ0FBQyxDQUFDRSxJQUFNcEIsbUJBQW1Cb0IsR0FBR2xCO0FBRXJEIiwic291cmNlcyI6WyIvaG9tZS9zcmMvc2hhcmVkL2xpYi9tYXRjaC1yZW1vdGUtcGF0dGVybi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFJlbW90ZVBhdHRlcm4gfSBmcm9tICcuL2ltYWdlLWNvbmZpZydcbmltcG9ydCB7IG1ha2VSZSB9IGZyb20gJ25leHQvZGlzdC9jb21waWxlZC9waWNvbWF0Y2gnXG5cbi8vIE1vZGlmeWluZyB0aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHNvIG1vZGlmeSB3cml0ZUltYWdlc01hbmlmZXN0KClcbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFJlbW90ZVBhdHRlcm4oXG4gIHBhdHRlcm46IFJlbW90ZVBhdHRlcm4gfCBVUkwsXG4gIHVybDogVVJMXG4pOiBib29sZWFuIHtcbiAgaWYgKHBhdHRlcm4ucHJvdG9jb2wgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChwYXR0ZXJuLnByb3RvY29sLnJlcGxhY2UoLzokLywgJycpICE9PSB1cmwucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICBpZiAocGF0dGVybi5wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocGF0dGVybi5wb3J0ICE9PSB1cmwucG9ydCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgaWYgKHBhdHRlcm4uaG9zdG5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBQYXR0ZXJuIHNob3VsZCBkZWZpbmUgaG9zdG5hbWUgYnV0IGZvdW5kXFxuJHtKU09OLnN0cmluZ2lmeShwYXR0ZXJuKX1gXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIGlmICghbWFrZVJlKHBhdHRlcm4uaG9zdG5hbWUpLnRlc3QodXJsLmhvc3RuYW1lKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgaWYgKHBhdHRlcm4uc2VhcmNoICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAocGF0dGVybi5zZWFyY2ggIT09IHVybC5zZWFyY2gpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIC8vIFNob3VsZCBiZSB0aGUgc2FtZSBhcyB3cml0ZUltYWdlc01hbmlmZXN0KClcbiAgaWYgKCFtYWtlUmUocGF0dGVybi5wYXRobmFtZSA/PyAnKionLCB7IGRvdDogdHJ1ZSB9KS50ZXN0KHVybC5wYXRobmFtZSkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZW1vdGVNYXRjaChcbiAgZG9tYWluczogc3RyaW5nW10sXG4gIHJlbW90ZVBhdHRlcm5zOiBBcnJheTxSZW1vdGVQYXR0ZXJuIHwgVVJMPixcbiAgdXJsOiBVUkxcbik6IGJvb2xlYW4ge1xuICByZXR1cm4gKFxuICAgIGRvbWFpbnMuc29tZSgoZG9tYWluKSA9PiB1cmwuaG9zdG5hbWUgPT09IGRvbWFpbikgfHxcbiAgICByZW1vdGVQYXR0ZXJucy5zb21lKChwKSA9PiBtYXRjaFJlbW90ZVBhdHRlcm4ocCwgdXJsKSlcbiAgKVxufVxuIl0sIm5hbWVzIjpbImhhc1JlbW90ZU1hdGNoIiwibWF0Y2hSZW1vdGVQYXR0ZXJuIiwicGF0dGVybiIsInVybCIsInByb3RvY29sIiwidW5kZWZpbmVkIiwicmVwbGFjZSIsInBvcnQiLCJob3N0bmFtZSIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsIm1ha2VSZSIsInRlc3QiLCJzZWFyY2giLCJwYXRobmFtZSIsImRvdCIsImRvbWFpbnMiLCJyZW1vdGVQYXR0ZXJucyIsInNvbWUiLCJkb21haW4iLCJwIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/match-remote-pattern.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.js":
|
||
/*!****************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router-context.shared-runtime.js ***!
|
||
\****************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"RouterContext\", ({\n enumerable: true,\n get: function() {\n return RouterContext;\n }\n}));\nconst _interop_require_default = __webpack_require__(/*! @swc/helpers/_/_interop_require_default */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_default.js\");\nconst _react = /*#__PURE__*/ _interop_require_default._(__webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"));\nconst RouterContext = _react.default.createContext(null);\nif (true) {\n RouterContext.displayName = 'RouterContext';\n} //# sourceMappingURL=router-context.shared-runtime.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXItY29udGV4dC5zaGFyZWQtcnVudGltZS5qcyIsIm1hcHBpbmdzIjoiOzs7O2lEQUdhQTs7O2VBQUFBOzs7OzRFQUhLO0FBR1gsTUFBTUEsZ0JBQWdCQyxPQUFBQSxPQUFLLENBQUNDLGFBQWEsQ0FBb0I7QUFFcEUsSUFBSUMsSUFBb0IsRUFBbUI7SUFDekNILGNBQWNNLFdBQVcsR0FBRztBQUM5QiIsInNvdXJjZXMiOlsiL2hvbWUvc3JjL3NoYXJlZC9saWIvcm91dGVyLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBOZXh0Um91dGVyIH0gZnJvbSAnLi9yb3V0ZXIvcm91dGVyJ1xuXG5leHBvcnQgY29uc3QgUm91dGVyQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8TmV4dFJvdXRlciB8IG51bGw+KG51bGwpXG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFJvdXRlckNvbnRleHQuZGlzcGxheU5hbWUgPSAnUm91dGVyQ29udGV4dCdcbn1cbiJdLCJuYW1lcyI6WyJSb3V0ZXJDb250ZXh0IiwiUmVhY3QiLCJjcmVhdGVDb250ZXh0IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiZGlzcGxheU5hbWUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router-context.shared-runtime.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js":
|
||
/*!**********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/format-url.js ***!
|
||
\**********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("// Format function modified from nodejs\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n formatUrl: function() {\n return formatUrl;\n },\n formatWithValidation: function() {\n return formatWithValidation;\n },\n urlObjectKeys: function() {\n return urlObjectKeys;\n }\n});\nconst _interop_require_wildcard = __webpack_require__(/*! @swc/helpers/_/_interop_require_wildcard */ \"(app-pages-browser)/./node_modules/@swc/helpers/esm/_interop_require_wildcard.js\");\nconst _querystring = /*#__PURE__*/ _interop_require_wildcard._(__webpack_require__(/*! ./querystring */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\"));\nconst slashedProtocols = /https?|ftp|gopher|file/;\nfunction formatUrl(urlObj) {\n let { auth, hostname } = urlObj;\n let protocol = urlObj.protocol || '';\n let pathname = urlObj.pathname || '';\n let hash = urlObj.hash || '';\n let query = urlObj.query || '';\n let host = false;\n auth = auth ? encodeURIComponent(auth).replace(/%3A/i, ':') + '@' : '';\n if (urlObj.host) {\n host = auth + urlObj.host;\n } else if (hostname) {\n host = auth + (~hostname.indexOf(':') ? \"[\" + hostname + \"]\" : hostname);\n if (urlObj.port) {\n host += ':' + urlObj.port;\n }\n }\n if (query && typeof query === 'object') {\n query = String(_querystring.urlQueryToSearchParams(query));\n }\n let search = urlObj.search || query && \"?\" + query || '';\n if (protocol && !protocol.endsWith(':')) protocol += ':';\n if (urlObj.slashes || (!protocol || slashedProtocols.test(protocol)) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname[0] !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n if (hash && hash[0] !== '#') hash = '#' + hash;\n if (search && search[0] !== '?') search = '?' + search;\n pathname = pathname.replace(/[?#]/g, encodeURIComponent);\n search = search.replace('#', '%23');\n return \"\" + protocol + host + pathname + search + hash;\n}\nconst urlObjectKeys = [\n 'auth',\n 'hash',\n 'host',\n 'hostname',\n 'href',\n 'path',\n 'pathname',\n 'port',\n 'protocol',\n 'query',\n 'search',\n 'slashes'\n];\nfunction formatWithValidation(url) {\n if (true) {\n if (url !== null && typeof url === 'object') {\n Object.keys(url).forEach((key)=>{\n if (!urlObjectKeys.includes(key)) {\n console.warn(\"Unknown key passed via urlObject into url.format: \" + key);\n }\n });\n }\n }\n return formatUrl(url);\n} //# sourceMappingURL=format-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvZm9ybWF0LXVybC5qcyIsIm1hcHBpbmdzIjoiQUFBQSx1Q0FBdUM7QUFDdkMsc0RBQXNEO0FBQ3RELEVBQUU7QUFDRiwwRUFBMEU7QUFDMUUsZ0VBQWdFO0FBQ2hFLHNFQUFzRTtBQUN0RSxzRUFBc0U7QUFDdEUsNEVBQTRFO0FBQzVFLHFFQUFxRTtBQUNyRSx3QkFBd0I7QUFDeEIsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSx5REFBeUQ7QUFDekQsRUFBRTtBQUNGLDBFQUEwRTtBQUMxRSw2REFBNkQ7QUFDN0QsNEVBQTRFO0FBQzVFLDJFQUEyRTtBQUMzRSx3RUFBd0U7QUFDeEUsNEVBQTRFO0FBQzVFLHlDQUF5Qzs7Ozs7Ozs7Ozs7OztJQVF6QkEsU0FBUztlQUFUQTs7SUE2REFDLG9CQUFvQjtlQUFwQkE7O0lBZkhDLGFBQWE7ZUFBYkE7Ozs7bUZBbERnQjtBQUU3QixNQUFNQyxtQkFBbUI7QUFFbEIsU0FBU0gsVUFBVUksTUFBaUI7SUFDekMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLFFBQVEsRUFBRSxHQUFHRjtJQUN6QixJQUFJRyxXQUFXSCxPQUFPRyxRQUFRLElBQUk7SUFDbEMsSUFBSUMsV0FBV0osT0FBT0ksUUFBUSxJQUFJO0lBQ2xDLElBQUlDLE9BQU9MLE9BQU9LLElBQUksSUFBSTtJQUMxQixJQUFJQyxRQUFRTixPQUFPTSxLQUFLLElBQUk7SUFDNUIsSUFBSUMsT0FBdUI7SUFFM0JOLE9BQU9BLE9BQU9PLG1CQUFtQlAsTUFBTVEsT0FBTyxDQUFDLFFBQVEsT0FBTyxNQUFNO0lBRXBFLElBQUlULE9BQU9PLElBQUksRUFBRTtRQUNmQSxPQUFPTixPQUFPRCxPQUFPTyxJQUFJO0lBQzNCLE9BQU8sSUFBSUwsVUFBVTtRQUNuQkssT0FBT04sT0FBUSxFQUFDQyxTQUFTUSxPQUFPLENBQUMsT0FBUSxNQUFHUixXQUFTLE1BQUtBLFFBQUFBLENBQU87UUFDakUsSUFBSUYsT0FBT1csSUFBSSxFQUFFO1lBQ2ZKLFFBQVEsTUFBTVAsT0FBT1csSUFBSTtRQUMzQjtJQUNGO0lBRUEsSUFBSUwsU0FBUyxPQUFPQSxVQUFVLFVBQVU7UUFDdENBLFFBQVFNLE9BQU9DLGFBQVlDLHNCQUFzQixDQUFDUjtJQUNwRDtJQUVBLElBQUlTLFNBQVNmLE9BQU9lLE1BQU0sSUFBS1QsU0FBVSxNQUFHQSxTQUFZO0lBRXhELElBQUlILFlBQVksQ0FBQ0EsU0FBU2EsUUFBUSxDQUFDLE1BQU1iLFlBQVk7SUFFckQsSUFDRUgsT0FBT2lCLE9BQU8sSUFDWixFQUFDZCxZQUFZSixpQkFBaUJtQixJQUFJLENBQUNmLFNBQUFBLENBQVEsSUFBTUksU0FBUyxPQUM1RDtRQUNBQSxPQUFPLE9BQVFBLENBQUFBLFFBQVEsR0FBQztRQUN4QixJQUFJSCxZQUFZQSxRQUFRLENBQUMsRUFBRSxLQUFLLEtBQUtBLFdBQVcsTUFBTUE7SUFDeEQsT0FBTyxJQUFJLENBQUNHLE1BQU07UUFDaEJBLE9BQU87SUFDVDtJQUVBLElBQUlGLFFBQVFBLElBQUksQ0FBQyxFQUFFLEtBQUssS0FBS0EsT0FBTyxNQUFNQTtJQUMxQyxJQUFJVSxVQUFVQSxNQUFNLENBQUMsRUFBRSxLQUFLLEtBQUtBLFNBQVMsTUFBTUE7SUFFaERYLFdBQVdBLFNBQVNLLE9BQU8sQ0FBQyxTQUFTRDtJQUNyQ08sU0FBU0EsT0FBT04sT0FBTyxDQUFDLEtBQUs7SUFFN0IsT0FBUSxLQUFFTixXQUFXSSxPQUFPSCxXQUFXVyxTQUFTVjtBQUNsRDtBQUVPLE1BQU1QLGdCQUFnQjtJQUMzQjtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7Q0FDRDtBQUVNLFNBQVNELHFCQUFxQnNCLEdBQWM7SUFDakQsSUFBSUMsSUFBb0IsRUFBb0I7UUFDMUMsSUFBSUQsUUFBUSxRQUFRLE9BQU9BLFFBQVEsVUFBVTtZQUMzQ0ksT0FBT0MsSUFBSSxDQUFDTCxLQUFLTSxPQUFPLENBQUMsQ0FBQ0M7Z0JBQ3hCLElBQUksQ0FBQzVCLGNBQWM2QixRQUFRLENBQUNELE1BQU07b0JBQ2hDRSxRQUFRQyxJQUFJLENBQ1QsdURBQW9ESDtnQkFFekQ7WUFDRjtRQUNGO0lBQ0Y7SUFFQSxPQUFPOUIsVUFBVXVCO0FBQ25CIiwic291cmNlcyI6WyIvc3JjL3NoYXJlZC9saWIvcm91dGVyL3V0aWxzL2Zvcm1hdC11cmwudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gRm9ybWF0IGZ1bmN0aW9uIG1vZGlmaWVkIGZyb20gbm9kZWpzXG4vLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuaW1wb3J0IHR5cGUgeyBVcmxPYmplY3QgfSBmcm9tICd1cmwnXG5pbXBvcnQgdHlwZSB7IFBhcnNlZFVybFF1ZXJ5IH0gZnJvbSAncXVlcnlzdHJpbmcnXG5pbXBvcnQgKiBhcyBxdWVyeXN0cmluZyBmcm9tICcuL3F1ZXJ5c3RyaW5nJ1xuXG5jb25zdCBzbGFzaGVkUHJvdG9jb2xzID0gL2h0dHBzP3xmdHB8Z29waGVyfGZpbGUvXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRVcmwodXJsT2JqOiBVcmxPYmplY3QpIHtcbiAgbGV0IHsgYXV0aCwgaG9zdG5hbWUgfSA9IHVybE9ialxuICBsZXQgcHJvdG9jb2wgPSB1cmxPYmoucHJvdG9jb2wgfHwgJydcbiAgbGV0IHBhdGhuYW1lID0gdXJsT2JqLnBhdGhuYW1lIHx8ICcnXG4gIGxldCBoYXNoID0gdXJsT2JqLmhhc2ggfHwgJydcbiAgbGV0IHF1ZXJ5ID0gdXJsT2JqLnF1ZXJ5IHx8ICcnXG4gIGxldCBob3N0OiBzdHJpbmcgfCBmYWxzZSA9IGZhbHNlXG5cbiAgYXV0aCA9IGF1dGggPyBlbmNvZGVVUklDb21wb25lbnQoYXV0aCkucmVwbGFjZSgvJTNBL2ksICc6JykgKyAnQCcgOiAnJ1xuXG4gIGlmICh1cmxPYmouaG9zdCkge1xuICAgIGhvc3QgPSBhdXRoICsgdXJsT2JqLmhvc3RcbiAgfSBlbHNlIGlmIChob3N0bmFtZSkge1xuICAgIGhvc3QgPSBhdXRoICsgKH5ob3N0bmFtZS5pbmRleE9mKCc6JykgPyBgWyR7aG9zdG5hbWV9XWAgOiBob3N0bmFtZSlcbiAgICBpZiAodXJsT2JqLnBvcnQpIHtcbiAgICAgIGhvc3QgKz0gJzonICsgdXJsT2JqLnBvcnRcbiAgICB9XG4gIH1cblxuICBpZiAocXVlcnkgJiYgdHlwZW9mIHF1ZXJ5ID09PSAnb2JqZWN0Jykge1xuICAgIHF1ZXJ5ID0gU3RyaW5nKHF1ZXJ5c3RyaW5nLnVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMocXVlcnkgYXMgUGFyc2VkVXJsUXVlcnkpKVxuICB9XG5cbiAgbGV0IHNlYXJjaCA9IHVybE9iai5zZWFyY2ggfHwgKHF1ZXJ5ICYmIGA/JHtxdWVyeX1gKSB8fCAnJ1xuXG4gIGlmIChwcm90b2NvbCAmJiAhcHJvdG9jb2wuZW5kc1dpdGgoJzonKSkgcHJvdG9jb2wgKz0gJzonXG5cbiAgaWYgKFxuICAgIHVybE9iai5zbGFzaGVzIHx8XG4gICAgKCghcHJvdG9jb2wgfHwgc2xhc2hlZFByb3RvY29scy50ZXN0KHByb3RvY29sKSkgJiYgaG9zdCAhPT0gZmFsc2UpXG4gICkge1xuICAgIGhvc3QgPSAnLy8nICsgKGhvc3QgfHwgJycpXG4gICAgaWYgKHBhdGhuYW1lICYmIHBhdGhuYW1lWzBdICE9PSAnLycpIHBhdGhuYW1lID0gJy8nICsgcGF0aG5hbWVcbiAgfSBlbHNlIGlmICghaG9zdCkge1xuICAgIGhvc3QgPSAnJ1xuICB9XG5cbiAgaWYgKGhhc2ggJiYgaGFzaFswXSAhPT0gJyMnKSBoYXNoID0gJyMnICsgaGFzaFxuICBpZiAoc2VhcmNoICYmIHNlYXJjaFswXSAhPT0gJz8nKSBzZWFyY2ggPSAnPycgKyBzZWFyY2hcblxuICBwYXRobmFtZSA9IHBhdGhuYW1lLnJlcGxhY2UoL1s/I10vZywgZW5jb2RlVVJJQ29tcG9uZW50KVxuICBzZWFyY2ggPSBzZWFyY2gucmVwbGFjZSgnIycsICclMjMnKVxuXG4gIHJldHVybiBgJHtwcm90b2NvbH0ke2hvc3R9JHtwYXRobmFtZX0ke3NlYXJjaH0ke2hhc2h9YFxufVxuXG5leHBvcnQgY29uc3QgdXJsT2JqZWN0S2V5cyA9IFtcbiAgJ2F1dGgnLFxuICAnaGFzaCcsXG4gICdob3N0JyxcbiAgJ2hvc3RuYW1lJyxcbiAgJ2hyZWYnLFxuICAncGF0aCcsXG4gICdwYXRobmFtZScsXG4gICdwb3J0JyxcbiAgJ3Byb3RvY29sJyxcbiAgJ3F1ZXJ5JyxcbiAgJ3NlYXJjaCcsXG4gICdzbGFzaGVzJyxcbl1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFdpdGhWYWxpZGF0aW9uKHVybDogVXJsT2JqZWN0KTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnKSB7XG4gICAgaWYgKHVybCAhPT0gbnVsbCAmJiB0eXBlb2YgdXJsID09PSAnb2JqZWN0Jykge1xuICAgICAgT2JqZWN0LmtleXModXJsKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgaWYgKCF1cmxPYmplY3RLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICBgVW5rbm93biBrZXkgcGFzc2VkIHZpYSB1cmxPYmplY3QgaW50byB1cmwuZm9ybWF0OiAke2tleX1gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3JtYXRVcmwodXJsKVxufVxuIl0sIm5hbWVzIjpbImZvcm1hdFVybCIsImZvcm1hdFdpdGhWYWxpZGF0aW9uIiwidXJsT2JqZWN0S2V5cyIsInNsYXNoZWRQcm90b2NvbHMiLCJ1cmxPYmoiLCJhdXRoIiwiaG9zdG5hbWUiLCJwcm90b2NvbCIsInBhdGhuYW1lIiwiaGFzaCIsInF1ZXJ5IiwiaG9zdCIsImVuY29kZVVSSUNvbXBvbmVudCIsInJlcGxhY2UiLCJpbmRleE9mIiwicG9ydCIsIlN0cmluZyIsInF1ZXJ5c3RyaW5nIiwidXJsUXVlcnlUb1NlYXJjaFBhcmFtcyIsInNlYXJjaCIsImVuZHNXaXRoIiwic2xhc2hlcyIsInRlc3QiLCJ1cmwiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsImluY2x1ZGVzIiwiY29uc29sZSIsIndhcm4iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/format-url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js":
|
||
/*!************************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/is-local-url.js ***!
|
||
\************************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"isLocalURL\", ({\n enumerable: true,\n get: function() {\n return isLocalURL;\n }\n}));\nconst _utils = __webpack_require__(/*! ../../utils */ \"(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\");\nconst _hasbasepath = __webpack_require__(/*! ../../../../client/has-base-path */ \"(app-pages-browser)/./node_modules/next/dist/client/has-base-path.js\");\nfunction isLocalURL(url) {\n // prevent a hydration mismatch on href for url with anchor refs\n if (!(0, _utils.isAbsoluteUrl)(url)) return true;\n try {\n // absolute urls can be local if they are on the same origin\n const locationOrigin = (0, _utils.getLocationOrigin)();\n const resolved = new URL(url, locationOrigin);\n return resolved.origin === locationOrigin && (0, _hasbasepath.hasBasePath)(resolved.pathname);\n } catch (_) {\n return false;\n }\n} //# sourceMappingURL=is-local-url.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtbG9jYWwtdXJsLmpzIiwibWFwcGluZ3MiOiI7Ozs7OENBTWdCQTs7O2VBQUFBOzs7bUNBTmlDO3lDQUNyQjtBQUtyQixTQUFTQSxXQUFXQyxHQUFXO0lBQ3BDLGdFQUFnRTtJQUNoRSxJQUFJLENBQUNDLENBQUFBLEdBQUFBLE9BQUFBLGFBQUFBLEVBQWNELE1BQU0sT0FBTztJQUNoQyxJQUFJO1FBQ0YsNERBQTREO1FBQzVELE1BQU1FLGlCQUFpQkMsQ0FBQUEsR0FBQUEsT0FBQUEsaUJBQUFBO1FBQ3ZCLE1BQU1DLFdBQVcsSUFBSUMsSUFBSUwsS0FBS0U7UUFDOUIsT0FBT0UsU0FBU0UsTUFBTSxLQUFLSixrQkFBa0JLLENBQUFBLEdBQUFBLGFBQUFBLFdBQUFBLEVBQVlILFNBQVNJLFFBQVE7SUFDNUUsRUFBRSxPQUFPQyxHQUFHO1FBQ1YsT0FBTztJQUNUO0FBQ0YiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvaXMtbG9jYWwtdXJsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzQWJzb2x1dGVVcmwsIGdldExvY2F0aW9uT3JpZ2luIH0gZnJvbSAnLi4vLi4vdXRpbHMnXG5pbXBvcnQgeyBoYXNCYXNlUGF0aCB9IGZyb20gJy4uLy4uLy4uLy4uL2NsaWVudC9oYXMtYmFzZS1wYXRoJ1xuXG4vKipcbiAqIERldGVjdHMgd2hldGhlciBhIGdpdmVuIHVybCBpcyByb3V0YWJsZSBieSB0aGUgTmV4dC5qcyByb3V0ZXIgKGJyb3dzZXIgb25seSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0xvY2FsVVJMKHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIHByZXZlbnQgYSBoeWRyYXRpb24gbWlzbWF0Y2ggb24gaHJlZiBmb3IgdXJsIHdpdGggYW5jaG9yIHJlZnNcbiAgaWYgKCFpc0Fic29sdXRlVXJsKHVybCkpIHJldHVybiB0cnVlXG4gIHRyeSB7XG4gICAgLy8gYWJzb2x1dGUgdXJscyBjYW4gYmUgbG9jYWwgaWYgdGhleSBhcmUgb24gdGhlIHNhbWUgb3JpZ2luXG4gICAgY29uc3QgbG9jYXRpb25PcmlnaW4gPSBnZXRMb2NhdGlvbk9yaWdpbigpXG4gICAgY29uc3QgcmVzb2x2ZWQgPSBuZXcgVVJMKHVybCwgbG9jYXRpb25PcmlnaW4pXG4gICAgcmV0dXJuIHJlc29sdmVkLm9yaWdpbiA9PT0gbG9jYXRpb25PcmlnaW4gJiYgaGFzQmFzZVBhdGgocmVzb2x2ZWQucGF0aG5hbWUpXG4gIH0gY2F0Y2ggKF8pIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuIl0sIm5hbWVzIjpbImlzTG9jYWxVUkwiLCJ1cmwiLCJpc0Fic29sdXRlVXJsIiwibG9jYXRpb25PcmlnaW4iLCJnZXRMb2NhdGlvbk9yaWdpbiIsInJlc29sdmVkIiwiVVJMIiwib3JpZ2luIiwiaGFzQmFzZVBhdGgiLCJwYXRobmFtZSIsIl8iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/is-local-url.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js":
|
||
/*!***********************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/router/utils/querystring.js ***!
|
||
\***********************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n assign: function() {\n return assign;\n },\n searchParamsToUrlQuery: function() {\n return searchParamsToUrlQuery;\n },\n urlQueryToSearchParams: function() {\n return urlQueryToSearchParams;\n }\n});\nfunction searchParamsToUrlQuery(searchParams) {\n const query = {};\n for (const [key, value] of searchParams.entries()){\n const existing = query[key];\n if (typeof existing === 'undefined') {\n query[key] = value;\n } else if (Array.isArray(existing)) {\n existing.push(value);\n } else {\n query[key] = [\n existing,\n value\n ];\n }\n }\n return query;\n}\nfunction stringifyUrlQueryParam(param) {\n if (typeof param === 'string') {\n return param;\n }\n if (typeof param === 'number' && !isNaN(param) || typeof param === 'boolean') {\n return String(param);\n } else {\n return '';\n }\n}\nfunction urlQueryToSearchParams(query) {\n const searchParams = new URLSearchParams();\n for (const [key, value] of Object.entries(query)){\n if (Array.isArray(value)) {\n for (const item of value){\n searchParams.append(key, stringifyUrlQueryParam(item));\n }\n } else {\n searchParams.set(key, stringifyUrlQueryParam(value));\n }\n }\n return searchParams;\n}\nfunction assign(target) {\n for(var _len = arguments.length, searchParamsList = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){\n searchParamsList[_key - 1] = arguments[_key];\n }\n for (const searchParams of searchParamsList){\n for (const key of searchParams.keys()){\n target.delete(key);\n }\n for (const [key, value] of searchParams.entries()){\n target.append(key, value);\n }\n }\n return target;\n} //# sourceMappingURL=querystring.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9yb3V0ZXIvdXRpbHMvcXVlcnlzdHJpbmcuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0lBZ0RnQkEsTUFBTTtlQUFOQTs7SUE5Q0FDLHNCQUFzQjtlQUF0QkE7O0lBZ0NBQyxzQkFBc0I7ZUFBdEJBOzs7QUFoQ1QsU0FBU0QsdUJBQ2RFLFlBQTZCO0lBRTdCLE1BQU1DLFFBQXdCLENBQUM7SUFDL0IsS0FBSyxNQUFNLENBQUNDLEtBQUtDLE1BQU0sSUFBSUgsYUFBYUksT0FBTyxHQUFJO1FBQ2pELE1BQU1DLFdBQVdKLEtBQUssQ0FBQ0MsSUFBSTtRQUMzQixJQUFJLE9BQU9HLGFBQWEsYUFBYTtZQUNuQ0osS0FBSyxDQUFDQyxJQUFJLEdBQUdDO1FBQ2YsT0FBTyxJQUFJRyxNQUFNQyxPQUFPLENBQUNGLFdBQVc7WUFDbENBLFNBQVNHLElBQUksQ0FBQ0w7UUFDaEIsT0FBTztZQUNMRixLQUFLLENBQUNDLElBQUksR0FBRztnQkFBQ0c7Z0JBQVVGO2FBQU07UUFDaEM7SUFDRjtJQUNBLE9BQU9GO0FBQ1Q7QUFFQSxTQUFTUSx1QkFBdUJDLEtBQWM7SUFDNUMsSUFBSSxPQUFPQSxVQUFVLFVBQVU7UUFDN0IsT0FBT0E7SUFDVDtJQUVBLElBQ0csT0FBT0EsVUFBVSxZQUFZLENBQUNDLE1BQU1ELFVBQ3JDLE9BQU9BLFVBQVUsV0FDakI7UUFDQSxPQUFPRSxPQUFPRjtJQUNoQixPQUFPO1FBQ0wsT0FBTztJQUNUO0FBQ0Y7QUFFTyxTQUFTWCx1QkFBdUJFLEtBQXFCO0lBQzFELE1BQU1ELGVBQWUsSUFBSWE7SUFDekIsS0FBSyxNQUFNLENBQUNYLEtBQUtDLE1BQU0sSUFBSVcsT0FBT1YsT0FBTyxDQUFDSCxPQUFRO1FBQ2hELElBQUlLLE1BQU1DLE9BQU8sQ0FBQ0osUUFBUTtZQUN4QixLQUFLLE1BQU1ZLFFBQVFaLE1BQU87Z0JBQ3hCSCxhQUFhZ0IsTUFBTSxDQUFDZCxLQUFLTyx1QkFBdUJNO1lBQ2xEO1FBQ0YsT0FBTztZQUNMZixhQUFhaUIsR0FBRyxDQUFDZixLQUFLTyx1QkFBdUJOO1FBQy9DO0lBQ0Y7SUFDQSxPQUFPSDtBQUNUO0FBRU8sU0FBU0gsT0FDZHFCLE1BQXVCO0lBQ3ZCLGlDQUFHQyxtQkFBSDtRQUFHQSxnQkFBQUEsQ0FBSCwyQkFBc0M7O0lBRXRDLEtBQUssTUFBTW5CLGdCQUFnQm1CLGlCQUFrQjtRQUMzQyxLQUFLLE1BQU1qQixPQUFPRixhQUFhb0IsSUFBSSxHQUFJO1lBQ3JDRixPQUFPRyxNQUFNLENBQUNuQjtRQUNoQjtRQUVBLEtBQUssTUFBTSxDQUFDQSxLQUFLQyxNQUFNLElBQUlILGFBQWFJLE9BQU8sR0FBSTtZQUNqRGMsT0FBT0YsTUFBTSxDQUFDZCxLQUFLQztRQUNyQjtJQUNGO0lBRUEsT0FBT2U7QUFDVCIsInNvdXJjZXMiOlsiL3NyYy9zaGFyZWQvbGliL3JvdXRlci91dGlscy9xdWVyeXN0cmluZy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhcnNlZFVybFF1ZXJ5IH0gZnJvbSAncXVlcnlzdHJpbmcnXG5cbmV4cG9ydCBmdW5jdGlvbiBzZWFyY2hQYXJhbXNUb1VybFF1ZXJ5KFxuICBzZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtc1xuKTogUGFyc2VkVXJsUXVlcnkge1xuICBjb25zdCBxdWVyeTogUGFyc2VkVXJsUXVlcnkgPSB7fVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBzZWFyY2hQYXJhbXMuZW50cmllcygpKSB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBxdWVyeVtrZXldXG4gICAgaWYgKHR5cGVvZiBleGlzdGluZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHF1ZXJ5W2tleV0gPSB2YWx1ZVxuICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZykpIHtcbiAgICAgIGV4aXN0aW5nLnB1c2godmFsdWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXJ5W2tleV0gPSBbZXhpc3RpbmcsIHZhbHVlXVxuICAgIH1cbiAgfVxuICByZXR1cm4gcXVlcnlcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5VXJsUXVlcnlQYXJhbShwYXJhbTogdW5rbm93bik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgcGFyYW0gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhcmFtXG4gIH1cblxuICBpZiAoXG4gICAgKHR5cGVvZiBwYXJhbSA9PT0gJ251bWJlcicgJiYgIWlzTmFOKHBhcmFtKSkgfHxcbiAgICB0eXBlb2YgcGFyYW0gPT09ICdib29sZWFuJ1xuICApIHtcbiAgICByZXR1cm4gU3RyaW5nKHBhcmFtKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiAnJ1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cmxRdWVyeVRvU2VhcmNoUGFyYW1zKHF1ZXJ5OiBQYXJzZWRVcmxRdWVyeSk6IFVSTFNlYXJjaFBhcmFtcyB7XG4gIGNvbnN0IHNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKVxuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhxdWVyeSkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB2YWx1ZSkge1xuICAgICAgICBzZWFyY2hQYXJhbXMuYXBwZW5kKGtleSwgc3RyaW5naWZ5VXJsUXVlcnlQYXJhbShpdGVtKSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2VhcmNoUGFyYW1zLnNldChrZXksIHN0cmluZ2lmeVVybFF1ZXJ5UGFyYW0odmFsdWUpKVxuICAgIH1cbiAgfVxuICByZXR1cm4gc2VhcmNoUGFyYW1zXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NpZ24oXG4gIHRhcmdldDogVVJMU2VhcmNoUGFyYW1zLFxuICAuLi5zZWFyY2hQYXJhbXNMaXN0OiBVUkxTZWFyY2hQYXJhbXNbXVxuKTogVVJMU2VhcmNoUGFyYW1zIHtcbiAgZm9yIChjb25zdCBzZWFyY2hQYXJhbXMgb2Ygc2VhcmNoUGFyYW1zTGlzdCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHNlYXJjaFBhcmFtcy5rZXlzKCkpIHtcbiAgICAgIHRhcmdldC5kZWxldGUoa2V5KVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIHNlYXJjaFBhcmFtcy5lbnRyaWVzKCkpIHtcbiAgICAgIHRhcmdldC5hcHBlbmQoa2V5LCB2YWx1ZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0XG59XG4iXSwibmFtZXMiOlsiYXNzaWduIiwic2VhcmNoUGFyYW1zVG9VcmxRdWVyeSIsInVybFF1ZXJ5VG9TZWFyY2hQYXJhbXMiLCJzZWFyY2hQYXJhbXMiLCJxdWVyeSIsImtleSIsInZhbHVlIiwiZW50cmllcyIsImV4aXN0aW5nIiwiQXJyYXkiLCJpc0FycmF5IiwicHVzaCIsInN0cmluZ2lmeVVybFF1ZXJ5UGFyYW0iLCJwYXJhbSIsImlzTmFOIiwiU3RyaW5nIiwiVVJMU2VhcmNoUGFyYW1zIiwiT2JqZWN0IiwiaXRlbSIsImFwcGVuZCIsInNldCIsInRhcmdldCIsInNlYXJjaFBhcmFtc0xpc3QiLCJrZXlzIiwiZGVsZXRlIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/router/utils/querystring.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/side-effect.js":
|
||
/*!**********************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/side-effect.js ***!
|
||
\**********************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nvar _s = $RefreshSig$();\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"default\", ({\n enumerable: true,\n get: function() {\n return SideEffect;\n }\n}));\nconst _react = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\nconst isServer = \"object\" === 'undefined';\nconst useClientOnlyLayoutEffect = isServer ? ()=>{} : _react.useLayoutEffect;\nconst useClientOnlyEffect = isServer ? ()=>{} : _react.useEffect;\nfunction SideEffect(props) {\n _s();\n const { headManager, reduceComponentsToState } = props;\n function emitChange() {\n if (headManager && headManager.mountedInstances) {\n const headElements = _react.Children.toArray(Array.from(headManager.mountedInstances).filter(Boolean));\n headManager.updateHead(reduceComponentsToState(headElements, props));\n }\n }\n if (isServer) {\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.add(props.children);\n emitChange();\n }\n useClientOnlyLayoutEffect({\n \"SideEffect.useClientOnlyLayoutEffect\": ()=>{\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.add(props.children);\n return ({\n \"SideEffect.useClientOnlyLayoutEffect\": ()=>{\n var _headManager_mountedInstances;\n headManager == null ? void 0 : (_headManager_mountedInstances = headManager.mountedInstances) == null ? void 0 : _headManager_mountedInstances.delete(props.children);\n }\n })[\"SideEffect.useClientOnlyLayoutEffect\"];\n }\n }[\"SideEffect.useClientOnlyLayoutEffect\"]);\n // We need to call `updateHead` method whenever the `SideEffect` is trigger in all\n // life-cycles: mount, update, unmount. However, if there are multiple `SideEffect`s\n // being rendered, we only trigger the method from the last one.\n // This is ensured by keeping the last unflushed `updateHead` in the `_pendingUpdate`\n // singleton in the layout effect pass, and actually trigger it in the effect pass.\n useClientOnlyLayoutEffect({\n \"SideEffect.useClientOnlyLayoutEffect\": ()=>{\n if (headManager) {\n headManager._pendingUpdate = emitChange;\n }\n return ({\n \"SideEffect.useClientOnlyLayoutEffect\": ()=>{\n if (headManager) {\n headManager._pendingUpdate = emitChange;\n }\n }\n })[\"SideEffect.useClientOnlyLayoutEffect\"];\n }\n }[\"SideEffect.useClientOnlyLayoutEffect\"]);\n useClientOnlyEffect({\n \"SideEffect.useClientOnlyEffect\": ()=>{\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate();\n headManager._pendingUpdate = null;\n }\n return ({\n \"SideEffect.useClientOnlyEffect\": ()=>{\n if (headManager && headManager._pendingUpdate) {\n headManager._pendingUpdate();\n headManager._pendingUpdate = null;\n }\n }\n })[\"SideEffect.useClientOnlyEffect\"];\n }\n }[\"SideEffect.useClientOnlyEffect\"]);\n return null;\n} //# sourceMappingURL=side-effect.js.map\n_s(SideEffect, \"gHVkikNHNxjVdD11eJBzaqkCiPY=\", false, function() {\n return [\n useClientOnlyLayoutEffect,\n useClientOnlyLayoutEffect,\n useClientOnlyEffect\n ];\n});\n_c = SideEffect;\nvar _c;\n$RefreshReg$(_c, \"SideEffect\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi9zaWRlLWVmZmVjdC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7MkNBb0JBOzs7ZUFBd0JBOzs7bUNBbkJ1QztBQWUvRCxNQUFNQyxXQUFXLE9BQU9DLE1BQVc7QUFDbkMsTUFBTUMsNEJBQTRCRixXQUFXLEtBQU8sSUFBSUcsT0FBQUEsZUFBZTtBQUN2RSxNQUFNQyxzQkFBc0JKLFdBQVcsS0FBTyxJQUFJSyxPQUFBQSxTQUFTO0FBRTVDLG9CQUFvQkMsS0FBc0I7O0lBQ3ZELE1BQU0sRUFBRUMsV0FBVyxFQUFFQyx1QkFBdUIsRUFBRSxHQUFHRjtJQUVqRCxTQUFTRztRQUNQLElBQUlGLGVBQWVBLFlBQVlHLGdCQUFnQixFQUFFO1lBQy9DLE1BQU1DLGVBQWVDLE9BQUFBLFFBQVEsQ0FBQ0MsT0FBTyxDQUNuQ0MsTUFBTUMsSUFBSSxDQUFDUixZQUFZRyxnQkFBZ0IsRUFBMEJNLE1BQU0sQ0FDckVDO1lBR0pWLFlBQVlXLFVBQVUsQ0FBQ1Ysd0JBQXdCRyxjQUFjTDtRQUMvRDtJQUNGO0lBRUEsSUFBSU4sVUFBVTtZQUNaTztRQUFBQSxlQUFBQSxPQUFBQSxLQUFBQSxJQUFBQSxDQUFBQSxnQ0FBQUEsWUFBYUcsZ0JBQUFBLEtBQWdCLGdCQUE3QkgsOEJBQStCWSxHQUFHLENBQUNiLE1BQU1jLFFBQVE7UUFDakRYO0lBQ0Y7O2dEQUUwQjtnQkFDeEJGO1lBQUFBLGVBQUFBLE9BQUFBLEtBQUFBLElBQUFBLENBQUFBLGdDQUFBQSxZQUFhRyxnQkFBQUEsS0FBZ0IsZ0JBQTdCSCw4QkFBK0JZLEdBQUcsQ0FBQ2IsTUFBTWMsUUFBUTtZQUNqRDt3REFBTzt3QkFDTGI7b0JBQUFBLGVBQUFBLE9BQUFBLEtBQUFBLElBQUFBLENBQUFBLGdDQUFBQSxZQUFhRyxnQkFBQUEsS0FBZ0IsZ0JBQTdCSCw4QkFBK0JjLE1BQU0sQ0FBQ2YsTUFBTWMsUUFBUTtnQkFDdEQ7O1FBQ0Y7O0lBRUEsa0ZBQWtGO0lBQ2xGLG9GQUFvRjtJQUNwRixnRUFBZ0U7SUFDaEUscUZBQXFGO0lBQ3JGLG1GQUFtRjs7Z0RBQ3pEO1lBQ3hCLElBQUliLGFBQWE7Z0JBQ2ZBLFlBQVllLGNBQWMsR0FBR2I7WUFDL0I7WUFDQTt3REFBTztvQkFDTCxJQUFJRixhQUFhO3dCQUNmQSxZQUFZZSxjQUFjLEdBQUdiO29CQUMvQjtnQkFDRjs7UUFDRjs7OzBDQUVvQjtZQUNsQixJQUFJRixlQUFlQSxZQUFZZSxjQUFjLEVBQUU7Z0JBQzdDZixZQUFZZSxjQUFjO2dCQUMxQmYsWUFBWWUsY0FBYyxHQUFHO1lBQy9CO1lBQ0E7a0RBQU87b0JBQ0wsSUFBSWYsZUFBZUEsWUFBWWUsY0FBYyxFQUFFO3dCQUM3Q2YsWUFBWWUsY0FBYzt3QkFDMUJmLFlBQVllLGNBQWMsR0FBRztvQkFDL0I7Z0JBQ0Y7O1FBQ0Y7O0lBRUEsT0FBTztBQUNUOzs7UUFyQ0VwQjtRQVlBQTtRQVdBRTs7O0tBMUNzQkwiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9zaGFyZWQvbGliL3NpZGUtZWZmZWN0LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSBSZWFjdCBmcm9tICdyZWFjdCdcbmltcG9ydCB7IENoaWxkcmVuLCB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgdHlwZSBKU1ggfSBmcm9tICdyZWFjdCdcblxudHlwZSBTdGF0ZSA9IEpTWC5FbGVtZW50W10gfCB1bmRlZmluZWRcblxuZXhwb3J0IHR5cGUgU2lkZUVmZmVjdFByb3BzID0ge1xuICByZWR1Y2VDb21wb25lbnRzVG9TdGF0ZTogPFQgZXh0ZW5kcyB7fT4oXG4gICAgY29tcG9uZW50czogQXJyYXk8UmVhY3QuUmVhY3RFbGVtZW50PGFueT4+LFxuICAgIHByb3BzOiBUXG4gICkgPT4gU3RhdGVcbiAgaGFuZGxlU3RhdGVDaGFuZ2U/OiAoc3RhdGU6IFN0YXRlKSA9PiB2b2lkXG4gIGhlYWRNYW5hZ2VyOiBhbnlcbiAgaW5BbXBNb2RlPzogYm9vbGVhblxuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlXG59XG5cbmNvbnN0IGlzU2VydmVyID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCdcbmNvbnN0IHVzZUNsaWVudE9ubHlMYXlvdXRFZmZlY3QgPSBpc1NlcnZlciA/ICgpID0+IHt9IDogdXNlTGF5b3V0RWZmZWN0XG5jb25zdCB1c2VDbGllbnRPbmx5RWZmZWN0ID0gaXNTZXJ2ZXIgPyAoKSA9PiB7fSA6IHVzZUVmZmVjdFxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTaWRlRWZmZWN0KHByb3BzOiBTaWRlRWZmZWN0UHJvcHMpIHtcbiAgY29uc3QgeyBoZWFkTWFuYWdlciwgcmVkdWNlQ29tcG9uZW50c1RvU3RhdGUgfSA9IHByb3BzXG5cbiAgZnVuY3Rpb24gZW1pdENoYW5nZSgpIHtcbiAgICBpZiAoaGVhZE1hbmFnZXIgJiYgaGVhZE1hbmFnZXIubW91bnRlZEluc3RhbmNlcykge1xuICAgICAgY29uc3QgaGVhZEVsZW1lbnRzID0gQ2hpbGRyZW4udG9BcnJheShcbiAgICAgICAgQXJyYXkuZnJvbShoZWFkTWFuYWdlci5tb3VudGVkSW5zdGFuY2VzIGFzIFNldDxSZWFjdC5SZWFjdE5vZGU+KS5maWx0ZXIoXG4gICAgICAgICAgQm9vbGVhblxuICAgICAgICApXG4gICAgICApIGFzIFJlYWN0LlJlYWN0RWxlbWVudFtdXG4gICAgICBoZWFkTWFuYWdlci51cGRhdGVIZWFkKHJlZHVjZUNvbXBvbmVudHNUb1N0YXRlKGhlYWRFbGVtZW50cywgcHJvcHMpKVxuICAgIH1cbiAgfVxuXG4gIGlmIChpc1NlcnZlcikge1xuICAgIGhlYWRNYW5hZ2VyPy5tb3VudGVkSW5zdGFuY2VzPy5hZGQocHJvcHMuY2hpbGRyZW4pXG4gICAgZW1pdENoYW5nZSgpXG4gIH1cblxuICB1c2VDbGllbnRPbmx5TGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBoZWFkTWFuYWdlcj8ubW91bnRlZEluc3RhbmNlcz8uYWRkKHByb3BzLmNoaWxkcmVuKVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBoZWFkTWFuYWdlcj8ubW91bnRlZEluc3RhbmNlcz8uZGVsZXRlKHByb3BzLmNoaWxkcmVuKVxuICAgIH1cbiAgfSlcblxuICAvLyBXZSBuZWVkIHRvIGNhbGwgYHVwZGF0ZUhlYWRgIG1ldGhvZCB3aGVuZXZlciB0aGUgYFNpZGVFZmZlY3RgIGlzIHRyaWdnZXIgaW4gYWxsXG4gIC8vIGxpZmUtY3ljbGVzOiBtb3VudCwgdXBkYXRlLCB1bm1vdW50LiBIb3dldmVyLCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgYFNpZGVFZmZlY3Rgc1xuICAvLyBiZWluZyByZW5kZXJlZCwgd2Ugb25seSB0cmlnZ2VyIHRoZSBtZXRob2QgZnJvbSB0aGUgbGFzdCBvbmUuXG4gIC8vIFRoaXMgaXMgZW5zdXJlZCBieSBrZWVwaW5nIHRoZSBsYXN0IHVuZmx1c2hlZCBgdXBkYXRlSGVhZGAgaW4gdGhlIGBfcGVuZGluZ1VwZGF0ZWBcbiAgLy8gc2luZ2xldG9uIGluIHRoZSBsYXlvdXQgZWZmZWN0IHBhc3MsIGFuZCBhY3R1YWxseSB0cmlnZ2VyIGl0IGluIHRoZSBlZmZlY3QgcGFzcy5cbiAgdXNlQ2xpZW50T25seUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGhlYWRNYW5hZ2VyKSB7XG4gICAgICBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSA9IGVtaXRDaGFuZ2VcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChoZWFkTWFuYWdlcikge1xuICAgICAgICBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSA9IGVtaXRDaGFuZ2VcbiAgICAgIH1cbiAgICB9XG4gIH0pXG5cbiAgdXNlQ2xpZW50T25seUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGhlYWRNYW5hZ2VyICYmIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlKSB7XG4gICAgICBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSgpXG4gICAgICBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSA9IG51bGxcbiAgICB9XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChoZWFkTWFuYWdlciAmJiBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSkge1xuICAgICAgICBoZWFkTWFuYWdlci5fcGVuZGluZ1VwZGF0ZSgpXG4gICAgICAgIGhlYWRNYW5hZ2VyLl9wZW5kaW5nVXBkYXRlID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gbnVsbFxufVxuIl0sIm5hbWVzIjpbIlNpZGVFZmZlY3QiLCJpc1NlcnZlciIsIndpbmRvdyIsInVzZUNsaWVudE9ubHlMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VDbGllbnRPbmx5RWZmZWN0IiwidXNlRWZmZWN0IiwicHJvcHMiLCJoZWFkTWFuYWdlciIsInJlZHVjZUNvbXBvbmVudHNUb1N0YXRlIiwiZW1pdENoYW5nZSIsIm1vdW50ZWRJbnN0YW5jZXMiLCJoZWFkRWxlbWVudHMiLCJDaGlsZHJlbiIsInRvQXJyYXkiLCJBcnJheSIsImZyb20iLCJmaWx0ZXIiLCJCb29sZWFuIiwidXBkYXRlSGVhZCIsImFkZCIsImNoaWxkcmVuIiwiZGVsZXRlIiwiX3BlbmRpbmdVcGRhdGUiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/side-effect.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js":
|
||
/*!****************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/utils.js ***!
|
||
\****************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\n0 && (0);\nfunction _export(target, all) {\n for(var name in all)Object.defineProperty(target, name, {\n enumerable: true,\n get: all[name]\n });\n}\n_export(exports, {\n DecodeError: function() {\n return DecodeError;\n },\n MiddlewareNotFoundError: function() {\n return MiddlewareNotFoundError;\n },\n MissingStaticPage: function() {\n return MissingStaticPage;\n },\n NormalizeError: function() {\n return NormalizeError;\n },\n PageNotFoundError: function() {\n return PageNotFoundError;\n },\n SP: function() {\n return SP;\n },\n ST: function() {\n return ST;\n },\n WEB_VITALS: function() {\n return WEB_VITALS;\n },\n execOnce: function() {\n return execOnce;\n },\n getDisplayName: function() {\n return getDisplayName;\n },\n getLocationOrigin: function() {\n return getLocationOrigin;\n },\n getURL: function() {\n return getURL;\n },\n isAbsoluteUrl: function() {\n return isAbsoluteUrl;\n },\n isResSent: function() {\n return isResSent;\n },\n loadGetInitialProps: function() {\n return loadGetInitialProps;\n },\n normalizeRepeatedSlashes: function() {\n return normalizeRepeatedSlashes;\n },\n stringifyError: function() {\n return stringifyError;\n }\n});\nconst WEB_VITALS = [\n 'CLS',\n 'FCP',\n 'FID',\n 'INP',\n 'LCP',\n 'TTFB'\n];\nfunction execOnce(fn) {\n let used = false;\n let result;\n return function() {\n for(var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++){\n args[_key] = arguments[_key];\n }\n if (!used) {\n used = true;\n result = fn(...args);\n }\n return result;\n };\n}\n// Scheme: https://tools.ietf.org/html/rfc3986#section-3.1\n// Absolute URL: https://tools.ietf.org/html/rfc3986#section-4.3\nconst ABSOLUTE_URL_REGEX = /^[a-zA-Z][a-zA-Z\\d+\\-.]*?:/;\nconst isAbsoluteUrl = (url)=>ABSOLUTE_URL_REGEX.test(url);\nfunction getLocationOrigin() {\n const { protocol, hostname, port } = window.location;\n return protocol + \"//\" + hostname + (port ? ':' + port : '');\n}\nfunction getURL() {\n const { href } = window.location;\n const origin = getLocationOrigin();\n return href.substring(origin.length);\n}\nfunction getDisplayName(Component) {\n return typeof Component === 'string' ? Component : Component.displayName || Component.name || 'Unknown';\n}\nfunction isResSent(res) {\n return res.finished || res.headersSent;\n}\nfunction normalizeRepeatedSlashes(url) {\n const urlParts = url.split('?');\n const urlNoQuery = urlParts[0];\n return urlNoQuery // first we replace any non-encoded backslashes with forward\n // then normalize repeated forward slashes\n .replace(/\\\\/g, '/').replace(/\\/\\/+/g, '/') + (urlParts[1] ? \"?\" + urlParts.slice(1).join('?') : '');\n}\nasync function loadGetInitialProps(App, ctx) {\n if (true) {\n var _App_prototype;\n if ((_App_prototype = App.prototype) == null ? void 0 : _App_prototype.getInitialProps) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" is defined as an instance method - visit https://nextjs.org/docs/messages/get-initial-props-as-an-instance-method for more information.';\n throw Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n }\n }\n // when called from _app `ctx` is nested in `ctx`\n const res = ctx.res || ctx.ctx && ctx.ctx.res;\n if (!App.getInitialProps) {\n if (ctx.ctx && ctx.Component) {\n // @ts-ignore pageProps default\n return {\n pageProps: await loadGetInitialProps(ctx.Component, ctx.ctx)\n };\n }\n return {};\n }\n const props = await App.getInitialProps(ctx);\n if (res && isResSent(res)) {\n return props;\n }\n if (!props) {\n const message = '\"' + getDisplayName(App) + '.getInitialProps()\" should resolve to an object. But found \"' + props + '\" instead.';\n throw Object.defineProperty(new Error(message), \"__NEXT_ERROR_CODE\", {\n value: \"E394\",\n enumerable: false,\n configurable: true\n });\n }\n if (true) {\n if (Object.keys(props).length === 0 && !ctx.ctx) {\n console.warn(\"\" + getDisplayName(App) + \" returned an empty object from `getInitialProps`. This de-optimizes and prevents automatic static optimization. https://nextjs.org/docs/messages/empty-object-getInitialProps\");\n }\n }\n return props;\n}\nconst SP = typeof performance !== 'undefined';\nconst ST = SP && [\n 'mark',\n 'measure',\n 'getEntriesByName'\n].every((method)=>typeof performance[method] === 'function');\nclass DecodeError extends Error {\n}\nclass NormalizeError extends Error {\n}\nclass PageNotFoundError extends Error {\n constructor(page){\n super();\n this.code = 'ENOENT';\n this.name = 'PageNotFoundError';\n this.message = \"Cannot find module for page: \" + page;\n }\n}\nclass MissingStaticPage extends Error {\n constructor(page, message){\n super();\n this.message = \"Failed to load static file for page: \" + page + \" \" + message;\n }\n}\nclass MiddlewareNotFoundError extends Error {\n constructor(){\n super();\n this.code = 'ENOENT';\n this.message = \"Cannot find the middleware module\";\n }\n}\nfunction stringifyError(error) {\n return JSON.stringify({\n message: error.message,\n stack: error.stack\n });\n} //# sourceMappingURL=utils.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi91dGlscy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7SUFvYWFBLFdBQVc7ZUFBWEE7O0lBb0JBQyx1QkFBdUI7ZUFBdkJBOztJQVBBQyxpQkFBaUI7ZUFBakJBOztJQVpBQyxjQUFjO2VBQWRBOztJQUNBQyxpQkFBaUI7ZUFBakJBOztJQVRBQyxFQUFFO2VBQUZBOztJQUNBQyxFQUFFO2VBQUZBOztJQWxYQUMsVUFBVTtlQUFWQTs7SUFzUUdDLFFBQVE7ZUFBUkE7O0lBK0JBQyxjQUFjO2VBQWRBOztJQVhBQyxpQkFBaUI7ZUFBakJBOztJQUtBQyxNQUFNO2VBQU5BOztJQVBIQyxhQUFhO2VBQWJBOztJQW1CR0MsU0FBUztlQUFUQTs7SUFrQk1DLG1CQUFtQjtlQUFuQkE7O0lBZE5DLHdCQUF3QjtlQUF4QkE7O0lBK0dBQyxjQUFjO2VBQWRBOzs7QUE5WlQsTUFBTVQsYUFBYTtJQUFDO0lBQU87SUFBTztJQUFPO0lBQU87SUFBTztDQUFPO0FBc1E5RCxTQUFTQyxTQUNkUyxFQUFLO0lBRUwsSUFBSUMsT0FBTztJQUNYLElBQUlDO0lBRUosT0FBUTt5Q0FBSUMsT0FBQUEsSUFBQUEsTUFBQUEsT0FBQUEsT0FBQUEsR0FBQUEsT0FBQUEsTUFBQUEsT0FBQUE7WUFBQUEsSUFBQUEsQ0FBQUEsS0FBQUEsR0FBQUEsU0FBQUEsQ0FBQUEsS0FBQUE7O1FBQ1YsSUFBSSxDQUFDRixNQUFNO1lBQ1RBLE9BQU87WUFDUEMsU0FBU0YsTUFBTUc7UUFDakI7UUFDQSxPQUFPRDtJQUNUO0FBQ0Y7QUFFQSwwREFBMEQ7QUFDMUQsZ0VBQWdFO0FBQ2hFLE1BQU1FLHFCQUFxQjtBQUNwQixNQUFNVCxnQkFBZ0IsQ0FBQ1UsTUFBZ0JELG1CQUFtQkUsSUFBSSxDQUFDRDtBQUUvRCxTQUFTWjtJQUNkLE1BQU0sRUFBRWMsUUFBUSxFQUFFQyxRQUFRLEVBQUVDLElBQUksRUFBRSxH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RztRQUNaLElBQUksQ0FBQzlCLElBQUksR0FBRztRQUNaLElBQUksQ0FBQ2lCLE9BQU8sR0FBSSxrQ0FBK0JZO0lBQ2pEO0FBQ0Y7QUFFTyxNQUFNOUQsMEJBQTBCbUQ7SUFDckNVLFlBQVlDLElBQVksRUFBRVosT0FBZSxDQUFFO1FBQ3pDLEtBQUs7UUFDTCxJQUFJLENBQUNBLE9BQU8sR0FBSSwwQ0FBdUNZLE9BQUssTUFBR1o7SUFDakU7QUFDRjtBQUVPLE1BQU1uRCxnQ0FBZ0NvRDtJQUUzQ1UsYUFBYztRQUNaLEtBQUs7UUFDTCxJQUFJLENBQUNFLElBQUksR0FBRztRQUNaLElBQUksQ0FBQ2IsT0FBTyxHQUFJO0lBQ2xCO0FBQ0Y7QUFXTyxTQUFTcEMsZUFBZWtELEtBQVk7SUFDekMsT0FBT0MsS0FBS0MsU0FBUyxDQUFDO1FBQUVoQixTQUFTYyxNQUFNZCxPQUFPO1FBQUVpQixPQUFPSCxNQUFNRyxLQUFLO0lBQUM7QUFDckUiLCJzb3VyY2VzIjpbIi9ob21lL3NyYy9zaGFyZWQvbGliL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgSHRtbFByb3BzIH0gZnJvbSAnLi9odG1sLWNvbnRleHQuc2hhcmVkLXJ1bnRpbWUnXG5pbXBvcnQgdHlwZSB7IENvbXBvbmVudFR5cGUsIEpTWCB9IGZyb20gJ3JlYWN0J1xuaW1wb3J0IHR5cGUgeyBEb21haW5Mb2NhbGUgfSBmcm9tICcuLi8uLi9zZXJ2ZXIvY29uZmlnJ1xuaW1wb3J0IHR5cGUgeyBFbnYgfSBmcm9tICdAbmV4dC9lbnYnXG5pbXBvcnQgdHlwZSB7IEluY29taW5nTWVzc2FnZSwgU2VydmVyUmVzcG9uc2UgfSBmcm9tICdodHRwJ1xuaW1wb3J0IHR5cGUgeyBOZXh0Um91dGVyIH0gZnJvbSAnLi9yb3V0ZXIvcm91dGVyJ1xuaW1wb3J0IHR5cGUgeyBQYXJzZWRVcmxRdWVyeSB9IGZyb20gJ3F1ZXJ5c3RyaW5nJ1xuaW1wb3J0IHR5cGUgeyBQcmV2aWV3RGF0YSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBDT01QSUxFUl9OQU1FUyB9IGZyb20gJy4vY29uc3RhbnRzJ1xuaW1wb3J0IHR5cGUgZnMgZnJvbSAnZnMnXG5cbmV4cG9ydCB0eXBlIE5leHRDb21wb25lbnRUeXBlPFxuICBDb250ZXh0IGV4dGVuZHMgQmFzZUNvbnRleHQgPSBOZXh0UGFnZUNvbnRleHQsXG4gIEluaXRpYWxQcm9wcyA9IHt9LFxuICBQcm9wcyA9IHt9LFxuPiA9IENvbXBvbmVudFR5cGU8UHJvcHM+ICYge1xuICAvKipcbiAgICogVXNlZCBmb3IgaW5pdGlhbCBwYWdlIGxvYWQgZGF0YSBwb3B1bGF0aW9uLiBEYXRhIHJldHVybmVkIGZyb20gYGdldEluaXRpYWxQcm9wc2AgaXMgc2VyaWFsaXplZCB3aGVuIHNlcnZlciByZW5kZXJlZC5cbiAgICogTWFrZSBzdXJlIHRvIHJldHVybiBwbGFpbiBgT2JqZWN0YCB3aXRob3V0IHVzaW5nIGBEYXRlYCwgYE1hcGAsIGBTZXRgLlxuICAgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IG9mIGBwYWdlYFxuICAgKi9cbiAgZ2V0SW5pdGlhbFByb3BzPyhjb250ZXh0OiBDb250ZXh0KTogSW5pdGlhbFByb3BzIHwgUHJvbWlzZTxJbml0aWFsUHJvcHM+XG59XG5cbmV4cG9ydCB0eXBlIERvY3VtZW50VHlwZSA9IE5leHRDb21wb25lbnRUeXBlPFxuICBEb2N1bWVudENvbnRleHQsXG4gIERvY3VtZW50SW5pdGlhbFByb3BzLFxuICBEb2N1bWVudFByb3BzXG4+XG5cbmV4cG9ydCB0eXBlIEFwcFR5cGU8UCA9IHt9PiA9IE5leHRDb21wb25lbnRUeXBlPFxuICBBcHBDb250ZXh0VHlwZSxcbiAgUCxcbiAgQXBwUHJvcHNUeXBlPGFueSwgUD5cbj5cblxuZXhwb3J0IHR5cGUgQXBwVHJlZVR5cGUgPSBDb21wb25lbnRUeXBlPFxuICBBcHBJbml0aWFsUHJvcHMgJiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfVxuPlxuXG4vKipcbiAqIFdlYiB2aXRhbHMgcHJvdmlkZWQgdG8gX2FwcC5yZXBvcnRXZWJWaXRhbHMgYnkgQ29yZSBXZWIgVml0YWxzIHBsdWdpbiBkZXZlbG9wZWQgYnkgR29vZ2xlIENocm9tZSB0ZWFtLlxuICogaHR0cHM6Ly9uZXh0anMub3JnL2Jsb2cvbmV4dC05LTQjaW50ZWdyYXRlZC13ZWItdml0YWxzLXJlcG9ydGluZ1xuICovXG5leHBvcnQgY29uc3QgV0VCX1ZJVEFMUyA9IFsnQ0xTJywgJ0ZDUCcsICdGSUQnLCAnSU5QJywgJ0xDUCcsICdUVEZCJ10gYXMgY29uc3RcbmV4cG9ydCB0eXBlIE5leHRXZWJWaXRhbHNNZXRyaWMgPSB7XG4gIGlkOiBzdHJpbmdcbiAgc3RhcnRUaW1lOiBudW1iZXJcbiAgdmFsdWU6IG51bWJlclxuICBhdHRyaWJ1dGlvbj86IHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9XG59ICYgKFxuICB8IHtcbiAgICAgIGxhYmVsOiAnd2ViLXZpdGFsJ1xuICAgICAgbmFtZTogKHR5cGVvZiBXRUJfVklUQUxTKVtudW1iZXJdXG4gICAgfVxuICB8IHtcbiAgICAgIGxhYmVsOiAnY3VzdG9tJ1xuICAgICAgbmFtZTpcbiAgICAgICAgfCAnTmV4dC5qcy1oeWRyYXRpb24nXG4gICAgICAgIHwgJ05leHQuanMtcm91dGUtY2hhbmdlLXRvLXJlbmRlcidcbiAgICAgICAgfCAnTmV4dC5qcy1yZW5kZXInXG4gICAgfVxuKVxuXG5leHBvcnQgdHlwZSBFbmhhbmNlcjxDPiA9IChDb21wb25lbnQ6IEMpID0+IENcblxuZXhwb3J0IHR5cGUgQ29tcG9uZW50c0VuaGFuY2VyID1cbiAgfCB7XG4gICAgICBlbmhhbmNlQXBwPzogRW5oYW5jZXI8QXBwVHlwZT5cbiAgICAgIGVuaGFuY2VDb21wb25lbnQ/OiBFbmhhbmNlcjxOZXh0Q29tcG9uZW50VHlwZT5cbiAgICB9XG4gIHwgRW5oYW5jZXI8TmV4dENvbXBvbmVudFR5cGU+XG5cbmV4cG9ydCB0eXBlIFJlbmRlclBhZ2VSZXN1bHQgPSB7XG4gIGh0bWw6IHN0cmluZ1xuICBoZWFkPzogQXJyYXk8SlNYLkVsZW1lbnQgfCBudWxsPlxufVxuXG5leHBvcnQgdHlwZSBSZW5kZXJQYWdlID0gKFxuICBvcHRpb25zPzogQ29tcG9uZW50c0VuaGFuY2VyXG4pID0+IERvY3VtZW50SW5pdGlhbFByb3BzIHwgUHJvbWlzZTxEb2N1bWVudEluaXRpYWxQcm9wcz5cblxuZXhwb3J0IHR5cGUgQmFzZUNvbnRleHQgPSB7XG4gIHJlcz86IFNlcnZlclJlc3BvbnNlXG4gIFtrOiBzdHJpbmddOiBhbnlcbn1cblxuZXhwb3J0IHR5cGUgTkVYVF9EQVRBID0ge1xuICBwcm9wczogUmVjb3JkPHN0cmluZywgYW55PlxuICBwYWdlOiBzdHJpbmdcbiAgcXVlcnk6IFBhcnNlZFVybFF1ZXJ5XG4gIGJ1aWxkSWQ6IHN0cmluZ1xuICBhc3NldFByZWZpeD86IHN0cmluZ1xuICBydW50aW1lQ29uZmlnPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfVxuICBuZXh0RXhwb3J0PzogYm9vbGVhblxuICBhdXRvRXhwb3J0PzogYm9vbGVhblxuICBpc0ZhbGxiYWNrPzogYm9vbGVhblxuICBpc0V4cGVyaW1lbnRhbENvbXBpbGU/OiBib29sZWFuXG4gIGR5bmFtaWNJZHM/OiAoc3RyaW5nIHwgbnVtYmVyKVtdXG4gIGVycj86IEVycm9yICYge1xuICAgIHN0YXR1c0NvZGU/OiBudW1iZXJcbiAgICBzb3VyY2U/OiB0eXBlb2YgQ09NUElMRVJfTkFNRVMuc2VydmVyIHwgdHlwZW9mIENPTVBJTEVSX05BTUVTLmVkZ2VTZXJ2ZXJcbiAgfVxuICBnc3A/OiBib29sZWFuXG4gIGdzc3A/OiBib29sZWFuXG4gIGN1c3RvbVNlcnZlcj86IGJvb2xlYW5cbiAgZ2lwPzogYm9vbGVhblxuICBhcHBHaXA/OiBib29sZWFuXG4gIGxvY2FsZT86IHN0cmluZ1xuICBsb2NhbGVzPzogcmVhZG9ubHkgc3RyaW5nW11cbiAgZGVmYXVsdExvY2FsZT86IHN0cmluZ1xuICBkb21haW5Mb2NhbGVzPzogcmVhZG9ubHkgRG9tYWluTG9jYWxlW11cbiAgc2NyaXB0TG9hZGVyPzogYW55W11cbiAgaXNQcmV2aWV3PzogYm9vbGVhblxuICBub3RGb3VuZFNyY1BhZ2U/OiBzdHJpbmdcbn1cblxuLyoqXG4gKiBgTmV4dGAgY29udGV4dFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRQYWdlQ29udGV4dCB7XG4gIC8qKlxuICAgKiBFcnJvciBvYmplY3QgaWYgZW5jb3VudGVyZWQgZHVyaW5nIHJlbmRlcmluZ1xuICAgKi9cbiAgZXJyPzogKEVycm9yICYgeyBzdGF0dXNDb2RlPzogbnVtYmVyIH0pIHwgbnVsbFxuICAvKipcbiAgICogYEhUVFBgIHJlcXVlc3Qgb2JqZWN0LlxuICAgKi9cbiAgcmVxPzogSW5jb21pbmdNZXNzYWdlXG4gIC8qKlxuICAgKiBgSFRUUGAgcmVzcG9uc2Ugb2JqZWN0LlxuICAgKi9cbiAgcmVzPzogU2VydmVyUmVzcG9uc2VcbiAgLyoqXG4gICAqIFBhdGggc2VjdGlvbiBvZiBgVVJMYC5cbiAgICovXG4gIHBhdGhuYW1lOiBzdHJpbmdcbiAgLyoqXG4gICAqIFF1ZXJ5IHN0cmluZyBzZWN0aW9uIG9mIGBVUkxgIHBhcnNlZCBhcyBhbiBvYmplY3QuXG4gICAqL1xuICBxdWVyeTogUGFyc2VkVXJsUXVlcnlcbiAgLyoqXG4gICAqIGBTdHJpbmdgIG9mIHRoZSBhY3R1YWwgcGF0aCBpbmNsdWRpbmcgcXVlcnkuXG4gICAqL1xuICBhc1BhdGg/OiBzdHJpbmdcbiAgLyoqXG4gICAqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGxvY2FsZVxuICAgKi9cbiAgbG9jYWxlPzogc3RyaW5nXG4gIC8qKlxuICAgKiBBbGwgY29uZmlndXJlZCBsb2NhbGVzXG4gICAqL1xuICBsb2NhbGVzPzogcmVhZG9ubHkgc3RyaW5nW11cbiAgLyoqXG4gICAqIFRoZSBjb25maWd1cmVkIGRlZmF1bHQgbG9jYWxlXG4gICAqL1xuICBkZWZhdWx0TG9jYWxlPzogc3RyaW5nXG4gIC8qKlxuICAgKiBgQ29tcG9uZW50YCB0aGUgdHJlZSBvZiB0aGUgQXBwIHRvIHVzZSBpZiBuZWVkaW5nIHRvIHJlbmRlciBzZXBhcmF0ZWx5XG4gICAqL1xuICBBcHBUcmVlOiBBcHBUcmVlVHlwZVxufVxuXG5leHBvcnQgdHlwZSBBcHBDb250ZXh0VHlwZTxSb3V0ZXIgZXh0ZW5kcyBOZXh0Um91dGVyID0gTmV4dFJvdXRlcj4gPSB7XG4gIENvbXBvbmVudDogTmV4dENvbXBvbmVudFR5cGU8TmV4dFBhZ2VDb250ZXh0PlxuICBBcHBUcmVlOiBBcHBUcmVlVHlwZVxuICBjdHg6IE5leHRQYWdlQ29udGV4dFxuICByb3V0ZXI6IFJvdXRlclxufVxuXG5leHBvcnQgdHlwZSBBcHBJbml0aWFsUHJvcHM8UGFnZVByb3BzID0gYW55PiA9IHtcbiAgcGFnZVByb3BzOiBQYWdlUHJvcHNcbn1cblxuZXhwb3J0IHR5cGUgQXBwUHJvcHNUeXBlPFxuICBSb3V0ZXIgZXh0ZW5kcyBOZXh0Um91dGVyID0gTmV4dFJvdXRlcixcbiAgUGFnZVByb3BzID0ge30sXG4+ID0gQXBwSW5pdGlhbFByb3BzPFBhZ2VQcm9wcz4gJiB7XG4gIENvbXBvbmVudDogTmV4dENvbXBvbmVudFR5cGU8TmV4dFBhZ2VDb250ZXh0LCBhbnksIGFueT5cbiAgcm91dGVyOiBSb3V0ZXJcbiAgX19OX1NTRz86IGJvb2xlYW5cbiAgX19OX1NTUD86IGJvb2xlYW5cbn1cblxuZXhwb3J0IHR5cGUgRG9jdW1lbnRDb250ZXh0ID0gTmV4dFBhZ2VDb250ZXh0ICYge1xuICByZW5kZXJQYWdlOiBSZW5kZXJQYWdlXG4gIGRlZmF1bHRHZXRJbml0aWFsUHJvcHMoXG4gICAgY3R4OiBEb2N1bWVudENvbnRleHQsXG4gICAgb3B0aW9ucz86IHsgbm9uY2U/OiBzdHJpbmcgfVxuICApOiBQcm9taXNlPERvY3VtZW50SW5pdGlhbFByb3BzPlxufVxuXG5leHBvcnQgdHlwZSBEb2N1bWVudEluaXRpYWxQcm9wcyA9IFJlbmRlclBhZ2VSZXN1bHQgJiB7XG4gIHN0eWxlcz86IFJlYWN0LlJlYWN0RWxlbWVudFtdIHwgSXRlcmFibGU8UmVhY3QuUmVhY3ROb2RlPiB8IEpTWC5FbGVtZW50XG59XG5cbmV4cG9ydCB0eXBlIERvY3VtZW50UHJvcHMgPSBEb2N1bWVudEluaXRpYWxQcm9wcyAmIEh0bWxQcm9wc1xuXG4vKipcbiAqIE5leHQgYEFQSWAgcm91dGUgcmVxdWVzdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRBcGlSZXF1ZXN0IGV4dGVuZHMgSW5jb21pbmdNZXNzYWdlIHtcbiAgLyoqXG4gICAqIE9iamVjdCBvZiBgcXVlcnlgIHZhbHVlcyBmcm9tIHVybFxuICAgKi9cbiAgcXVlcnk6IFBhcnRpYWw8e1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdXG4gIH0+XG4gIC8qKlxuICAgKiBPYmplY3Qgb2YgYGNvb2tpZXNgIGZyb20gaGVhZGVyXG4gICAqL1xuICBjb29raWVzOiBQYXJ0aWFsPHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmdcbiAgfT5cblxuICBib2R5OiBhbnlcblxuICBlbnY6IEVudlxuXG4gIGRyYWZ0TW9kZT86IGJvb2xlYW5cblxuICBwcmV2aWV3PzogYm9vbGVhblxuICAvKipcbiAgICogUHJldmlldyBkYXRhIHNldCBvbiB0aGUgcmVxdWVzdCwgaWYgYW55XG4gICAqICovXG4gIHByZXZpZXdEYXRhPzogUHJldmlld0RhdGFcbn1cblxuLyoqXG4gKiBTZW5kIGJvZHkgb2YgcmVzcG9uc2VcbiAqL1xudHlwZSBTZW5kPFQ+ID0gKGJvZHk6IFQpID0+IHZvaWRcblxuLyoqXG4gKiBOZXh0IGBBUElgIHJvdXRlIHJlc3BvbnNlXG4gKi9cbmV4cG9ydCB0eXBlIE5leHRBcGlSZXNwb25zZTxEYXRhID0gYW55PiA9IFNlcnZlclJlc3BvbnNlICYge1xuICAvKipcbiAgICogU2VuZCBkYXRhIGBhbnlgIGRhdGEgaW4gcmVzcG9uc2VcbiAgICovXG4gIHNlbmQ6IFNlbmQ8RGF0YT5cbiAgLyoqXG4gICAqIFNlbmQgZGF0YSBganNvbmAgZGF0YSBpbiByZXNwb25zZVxuICAgKi9cbiAganNvbjogU2VuZDxEYXRhPlxuICBzdGF0dXM6IChzdGF0dXNDb2RlOiBudW1iZXIpID0+IE5leHRBcGlSZXNwb25zZTxEYXRhPlxuICByZWRpcmVjdCh1cmw6IHN0cmluZyk6IE5leHRBcGlSZXNwb25zZTxEYXRhPlxuICByZWRpcmVjdChzdGF0dXM6IG51bWJlciwgdXJsOiBzdHJpbmcpOiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cblxuICAvKipcbiAgICogU2V0IGRyYWZ0IG1vZGVcbiAgICovXG4gIHNldERyYWZ0TW9kZTogKG9wdGlvbnM6IHsgZW5hYmxlOiBib29sZWFuIH0pID0+IE5leHRBcGlSZXNwb25zZTxEYXRhPlxuXG4gIC8qKlxuICAgKiBTZXQgcHJldmlldyBkYXRhIGZvciBOZXh0LmpzJyBwcmVyZW5kZXIgbW9kZVxuICAgKi9cbiAgc2V0UHJldmlld0RhdGE6IChcbiAgICBkYXRhOiBvYmplY3QgfCBzdHJpbmcsXG4gICAgb3B0aW9ucz86IHtcbiAgICAgIC8qKlxuICAgICAgICogU3BlY2lmaWVzIHRoZSBudW1iZXIgKGluIHNlY29uZHMpIGZvciB0aGUgcHJldmlldyBzZXNzaW9uIHRvIGxhc3QgZm9yLlxuICAgICAgICogVGhlIGdpdmVuIG51bWJlciB3aWxsIGJlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyIGJ5IHJvdW5kaW5nIGRvd24uXG4gICAgICAgKiBCeSBkZWZhdWx0LCBubyBtYXhpbXVtIGFnZSBpcyBzZXQgYW5kIHRoZSBwcmV2aWV3IHNlc3Npb24gZmluaXNoZXNcbiAgICAgICAqIHdoZW4gdGhlIGNsaWVudCBzaHV0cyBkb3duIChicm93c2VyIGlzIGNsb3NlZCkuXG4gICAgICAgKi9cbiAgICAgIG1heEFnZT86IG51bWJlclxuICAgICAgLyoqXG4gICAgICAgKiBTcGVjaWZpZXMgdGhlIHBhdGggZm9yIHRoZSBwcmV2aWV3IHNlc3Npb24gdG8gd29yayB1bmRlci4gQnkgZGVmYXVsdCxcbiAgICAgICAqIHRoZSBwYXRoIGlzIGNvbnNpZGVyZWQgdGhlIFwiZGVmYXVsdCBwYXRoXCIsIGkuZS4sIGFueSBwYWdlcyB1bmRlciBcIi9cIi5cbiAgICAgICAqL1xuICAgICAgcGF0aD86IHN0cmluZ1xuICAgIH1cbiAgKSA9PiBOZXh0QXBpUmVzcG9uc2U8RGF0YT5cblxuICAvKipcbiAgICogQ2xlYXIgcHJldmlldyBkYXRhIGZvciBOZXh0LmpzJyBwcmVyZW5kZXIgbW9kZVxuICAgKi9cbiAgY2xlYXJQcmV2aWV3RGF0YTogKG9wdGlvbnM/OiB7IHBhdGg/OiBzdHJpbmcgfSkgPT4gTmV4dEFwaVJlc3BvbnNlPERhdGE+XG5cbiAgLyoqXG4gICAqIFJldmFsaWRhdGUgYSBzcGVjaWZpYyBwYWdlIGFuZCByZWdlbmVyYXRlIGl0IHVzaW5nIE9uLURlbWFuZCBJbmNyZW1lbnRhbFxuICAgKiBTdGF0aWMgUmVnZW5lcmF0aW9uLlxuICAgKiBUaGUgcGF0aCBzaG91bGQgYmUgYW4gYWN0dWFsIHBhdGgsIG5vdCBhIHJld3JpdHRlbiBwYXRoLiBFLmcuIGZvclxuICAgKiBcIi9ibG9nL1tzbHVnXVwiIHRoaXMgc2hvdWxkIGJlIFwiL2Jsb2cvcG9zdC0xXCIuXG4gICAqIEBsaW5rIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL2RhdGEtZmV0Y2hpbmcvaW5jcmVtZW50YWwtc3RhdGljLXJlZ2VuZXJhdGlvbiNvbi1kZW1hbmQtcmV2YWxpZGF0aW9uLXdpdGgtcmV2YWxpZGF0ZXBhdGhcbiAgICovXG4gIHJldmFsaWRhdGU6IChcbiAgICB1cmxQYXRoOiBzdHJpbmcsXG4gICAgb3B0cz86IHtcbiAgICAgIHVuc3RhYmxlX29ubHlHZW5lcmF0ZWQ/OiBib29sZWFuXG4gICAgfVxuICApID0+IFByb21pc2U8dm9pZD5cbn1cblxuLyoqXG4gKiBOZXh0IGBBUElgIHJvdXRlIGhhbmRsZXJcbiAqL1xuZXhwb3J0IHR5cGUgTmV4dEFwaUhhbmRsZXI8VCA9IGFueT4gPSAoXG4gIHJlcTogTmV4dEFwaVJlcXVlc3QsXG4gIHJlczogTmV4dEFwaVJlc3BvbnNlPFQ+XG4pID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+XG5cbi8qKlxuICogVXRpbHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4ZWNPbmNlPFQgZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IFJldHVyblR5cGU8VD4+KFxuICBmbjogVFxuKTogVCB7XG4gIGxldCB1c2VkID0gZmFsc2VcbiAgbGV0IHJlc3VsdDogUmV0dXJuVHlwZTxUPlxuXG4gIHJldHVybiAoKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgaWYgKCF1c2VkKSB7XG4gICAgICB1c2VkID0gdHJ1ZVxuICAgICAgcmVzdWx0ID0gZm4oLi4uYXJncylcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9KSBhcyBUXG59XG5cbi8vIFNjaGVtZTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjFcbi8vIEFic29sdXRlIFVSTDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi00LjNcbmNvbnN0IEFCU09MVVRFX1VSTF9SRUdFWCA9IC9eW2EtekEtWl1bYS16QS1aXFxkK1xcLS5dKj86L1xuZXhwb3J0IGNvbnN0IGlzQWJzb2x1dGVVcmwgPSAodXJsOiBzdHJpbmcpID0+IEFCU09MVVRFX1VSTF9SRUdFWC50ZXN0KHVybClcblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2F0aW9uT3JpZ2luKCkge1xuICBjb25zdCB7IHByb3RvY29sLCBob3N0bmFtZSwgcG9ydCB9ID0gd2luZG93LmxvY2F0aW9uXG4gIHJldHVybiBgJHtwcm90b2NvbH0vLyR7aG9zdG5hbWV9JHtwb3J0ID8gJzonICsgcG9ydCA6ICcnfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFVSTCgpIHtcbiAgY29uc3QgeyBocmVmIH0gPSB3aW5kb3cubG9jYXRpb25cbiAgY29uc3Qgb3JpZ2luID0gZ2V0TG9jYXRpb25PcmlnaW4oKVxuICByZXR1cm4gaHJlZi5zdWJzdHJpbmcob3JpZ2luLmxlbmd0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpc3BsYXlOYW1lPFA+KENvbXBvbmVudDogQ29tcG9uZW50VHlwZTxQPikge1xuICByZXR1cm4gdHlwZW9mIENvbXBvbmVudCA9PT0gJ3N0cmluZydcbiAgICA/IENvbXBvbmVudFxuICAgIDogQ29tcG9uZW50LmRpc3BsYXlOYW1lIHx8IENvbXBvbmVudC5uYW1lIHx8ICdVbmtub3duJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXNTZW50KHJlczogU2VydmVyUmVzcG9uc2UpIHtcbiAgcmV0dXJuIHJlcy5maW5pc2hlZCB8fCByZXMuaGVhZGVyc1NlbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVJlcGVhdGVkU2xhc2hlcyh1cmw6IHN0cmluZykge1xuICBjb25zdCB1cmxQYXJ0cyA9IHVybC5zcGxpdCgnPycpXG4gIGNvbnN0IHVybE5vUXVlcnkgPSB1cmxQYXJ0c1swXVxuXG4gIHJldHVybiAoXG4gICAgdXJsTm9RdWVyeVxuICAgICAgLy8gZmlyc3Qgd2UgcmVwbGFjZSBhbnkgbm9uLWVuY29kZWQgYmFja3NsYXNoZXMgd2l0aCBmb3J3YXJkXG4gICAgICAvLyB0aGVuIG5vcm1hbGl6ZSByZXBlYXRlZCBmb3J3YXJkIHNsYXNoZXNcbiAgICAgIC5yZXBsYWNlKC9cXFxcL2csICcvJylcbiAgICAgIC5yZXBsYWNlKC9cXC9cXC8rL2csICcvJykgK1xuICAgICh1cmxQYXJ0c1sxXSA/IGA/JHt1cmxQYXJ0cy5zbGljZSgxKS5qb2luKCc/Jyl9YCA6ICcnKVxuICApXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkR2V0SW5pdGlhbFByb3BzPFxuICBDIGV4dGVuZHMgQmFzZUNvbnRleHQsXG4gIElQID0ge30sXG4gIFAgPSB7fSxcbj4oQXBwOiBOZXh0Q29tcG9uZW50VHlwZTxDLCBJUCwgUD4sIGN0eDogQyk6IFByb21pc2U8SVA+IHtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoQXBwLnByb3RvdHlwZT8uZ2V0SW5pdGlhbFByb3BzKSB7XG4gICAgICBjb25zdCBtZXNzYWdlID0gYFwiJHtnZXREaXNwbGF5TmFtZShcbiAgICAgICAgQXBwXG4gICAgICApfS5nZXRJbml0aWFsUHJvcHMoKVwiIGlzIGRlZmluZWQgYXMgYW4gaW5zdGFuY2UgbWV0aG9kIC0gdmlzaXQgaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvZ2V0LWluaXRpYWwtcHJvcHMtYXMtYW4taW5zdGFuY2UtbWV0aG9kIGZvciBtb3JlIGluZm9ybWF0aW9uLmBcbiAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKVxuICAgIH1cbiAgfVxuICAvLyB3aGVuIGNhbGxlZCBmcm9tIF9hcHAgYGN0eGAgaXMgbmVzdGVkIGluIGBjdHhgXG4gIGNvbnN0IHJlcyA9IGN0eC5yZXMgfHwgKGN0eC5jdHggJiYgY3R4LmN0eC5yZXMpXG5cbiAgaWYgKCFBcHAuZ2V0SW5pdGlhbFByb3BzKSB7XG4gICAgaWYgKGN0eC5jdHggJiYgY3R4LkNvbXBvbmVudCkge1xuICAgICAgLy8gQHRzLWlnbm9yZSBwYWdlUHJvcHMgZGVmYXVsdFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFnZVByb3BzOiBhd2FpdCBsb2FkR2V0SW5pdGlhbFByb3BzKGN0eC5Db21wb25lbnQsIGN0eC5jdHgpLFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge30gYXMgSVBcbiAgfVxuXG4gIGNvbnN0IHByb3BzID0gYXdhaXQgQXBwLmdldEluaXRpYWxQcm9wcyhjdHgpXG5cbiAgaWYgKHJlcyAmJiBpc1Jlc1NlbnQocmVzKSkge1xuICAgIHJldHVybiBwcm9wc1xuICB9XG5cbiAgaWYgKCFwcm9wcykge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgXCIke2dldERpc3BsYXlOYW1lKFxuICAgICAgQXBwXG4gICAgKX0uZ2V0SW5pdGlhbFByb3BzKClcIiBzaG91bGQgcmVzb2x2ZSB0byBhbiBvYmplY3QuIEJ1dCBmb3VuZCBcIiR7cHJvcHN9XCIgaW5zdGVhZC5gXG4gICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpXG4gIH1cblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChPYmplY3Qua2V5cyhwcm9wcykubGVuZ3RoID09PSAwICYmICFjdHguY3R4KSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGAke2dldERpc3BsYXlOYW1lKFxuICAgICAgICAgIEFwcFxuICAgICAgICApfSByZXR1cm5lZCBhbiBlbXB0eSBvYmplY3QgZnJvbSBcXGBnZXRJbml0aWFsUHJvcHNcXGAuIFRoaXMgZGUtb3B0aW1pemVzIGFuZCBwcmV2ZW50cyBhdXRvbWF0aWMgc3RhdGljIG9wdGltaXphdGlvbi4gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvbWVzc2FnZXMvZW1wdHktb2JqZWN0LWdldEluaXRpYWxQcm9wc2BcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJvcHNcbn1cblxuZXhwb3J0IGNvbnN0IFNQID0gdHlwZW9mIHBlcmZvcm1hbmNlICE9PSAndW5kZWZpbmVkJ1xuZXhwb3J0IGNvbnN0IFNUID1cbiAgU1AgJiZcbiAgKFsnbWFyaycsICdtZWFzdXJlJywgJ2dldEVudHJpZXNCeU5hbWUnXSBhcyBjb25zdCkuZXZlcnkoXG4gICAgKG1ldGhvZCkgPT4gdHlwZW9mIHBlcmZvcm1hbmNlW21ldGhvZF0gPT09ICdmdW5jdGlvbidcbiAgKVxuXG5leHBvcnQgY2xhc3MgRGVjb2RlRXJyb3IgZXh0ZW5kcyBFcnJvciB7fVxuZXhwb3J0IGNsYXNzIE5vcm1hbGl6ZUVycm9yIGV4dGVuZHMgRXJyb3Ige31cbmV4cG9ydCBjbGFzcyBQYWdlTm90Rm91bmRFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29kZTogc3RyaW5nXG5cbiAgY29uc3RydWN0b3IocGFnZTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY29kZSA9ICdFTk9FTlQnXG4gICAgdGhpcy5uYW1lID0gJ1BhZ2VOb3RGb3VuZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IGBDYW5ub3QgZmluZCBtb2R1bGUgZm9yIHBhZ2U6ICR7cGFnZX1gXG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIE1pc3NpbmdTdGF0aWNQYWdlIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihwYWdlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLm1lc3NhZ2UgPSBgRmFpbGVkIHRvIGxvYWQgc3RhdGljIGZpbGUgZm9yIHBhZ2U6ICR7cGFnZX0gJHttZXNzYWdlfWBcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWlkZGxld2FyZU5vdEZvdW5kRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvZGU6IHN0cmluZ1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5jb2RlID0gJ0VOT0VOVCdcbiAgICB0aGlzLm1lc3NhZ2UgPSBgQ2Fubm90IGZpbmQgdGhlIG1pZGRsZXdhcmUgbW9kdWxlYFxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVGcyB7XG4gIGV4aXN0c1N5bmM6IHR5cGVvZiBmcy5leGlzdHNTeW5jXG4gIHJlYWRGaWxlOiB0eXBlb2YgZnMucHJvbWlzZXMucmVhZEZpbGVcbiAgcmVhZEZpbGVTeW5jOiB0eXBlb2YgZnMucmVhZEZpbGVTeW5jXG4gIHdyaXRlRmlsZShmOiBzdHJpbmcsIGQ6IGFueSk6IFByb21pc2U8dm9pZD5cbiAgbWtkaXIoZGlyOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQgfCBzdHJpbmc+XG4gIHN0YXQoZjogc3RyaW5nKTogUHJvbWlzZTx7IG10aW1lOiBEYXRlIH0+XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlFcnJvcihlcnJvcjogRXJyb3IpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHsgbWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrIH0pXG59XG4iXSwibmFtZXMiOlsiRGVjb2RlRXJyb3IiLCJNaWRkbGV3YXJlTm90Rm91bmRFcnJvciIsIk1pc3NpbmdTdGF0aWNQYWdlIiwiTm9ybWFsaXplRXJyb3IiLCJQYWdlTm90Rm91bmRFcnJvciIsIlNQIiwiU1QiLCJXRUJfVklUQUxTIiwiZXhlY09uY2UiLCJnZXREaXNwbGF5TmFtZSIsImdldExvY2F0aW9uT3JpZ2luIiwiZ2V0VVJMIiwiaXNBYnNvbHV0ZVVybCIsImlzUmVzU2VudCIsImxvYWRHZXRJbml0aWFsUHJvcHMiLCJub3JtYWxpemVSZXBlYXRlZFNsYXNoZXMiLCJzdHJpbmdpZnlFcnJvciIsImZuIiwidXNlZCIsInJlc3VsdCIsImFyZ3MiLCJBQlNPTFVURV9VUkxfUkVHRVgiLCJ1cmwiLCJ0ZXN0IiwicHJvdG9jb2wiLCJob3N0bmFtZSIsInBvcnQiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImhyZWYiLCJvcmlnaW4iLCJzdWJzdHJpbmciLCJsZW5ndGgiLCJDb21wb25lbnQiLCJkaXNwbGF5TmFtZSIsIm5hbWUiLCJyZXMiLCJmaW5pc2hlZCIsImhlYWRlcnNTZW50IiwidXJsUGFydHMiLCJzcGxpdCIsInVybE5vUXVlcnkiLCJyZXBsYWNlIiwic2xpY2UiLCJqb2luIiwiQXBwIiwiY3R4IiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicHJvdG90eXBlIiwiZ2V0SW5pdGlhbFByb3BzIiwibWVzc2FnZSIsIkVycm9yIiwicGFnZVByb3BzIiwicHJvcHMiLCJPYmplY3QiLCJrZXlzIiwiY29uc29sZSIsIndhcm4iLCJwZXJmb3JtYW5jZSIsImV2ZXJ5IiwibWV0aG9kIiwiY29uc3RydWN0b3IiLCJwYWdlIiwiY29kZSIsImVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YWNrIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/utils.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/next/dist/shared/lib/utils/error-once.js":
|
||
/*!***************************************************************!*\
|
||
!*** ./node_modules/next/dist/shared/lib/utils/error-once.js ***!
|
||
\***************************************************************/
|
||
/***/ ((module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\nObject.defineProperty(exports, \"__esModule\", ({\n value: true\n}));\nObject.defineProperty(exports, \"errorOnce\", ({\n enumerable: true,\n get: function() {\n return errorOnce;\n }\n}));\nlet errorOnce = (_)=>{};\nif (true) {\n const errors = new Set();\n errorOnce = (msg)=>{\n if (!errors.has(msg)) {\n console.error(msg);\n }\n errors.add(msg);\n };\n} //# sourceMappingURL=error-once.js.map\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9uZXh0L2Rpc3Qvc2hhcmVkL2xpYi91dGlscy9lcnJvci1vbmNlLmpzIiwibWFwcGluZ3MiOiI7Ozs7NkNBV1NBOzs7ZUFBQUE7OztBQVhULElBQUlBLFlBQVksQ0FBQ0MsS0FBZTtBQUNoQyxJQUFJQyxJQUFvQixFQUFtQjtJQUN6QyxNQUFNRyxTQUFTLElBQUlDO0lBQ25CTixZQUFZLENBQUNPO1FBQ1gsSUFBSSxDQUFDRixPQUFPRyxHQUFHLENBQUNELE1BQU07WUFDcEJFLFFBQVFDLEtBQUssQ0FBQ0g7UUFDaEI7UUFDQUYsT0FBT00sR0FBRyxDQUFDSjtJQUNiO0FBQ0YiLCJzb3VyY2VzIjpbIi9zcmMvc2hhcmVkL2xpYi91dGlscy9lcnJvci1vbmNlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImxldCBlcnJvck9uY2UgPSAoXzogc3RyaW5nKSA9PiB7fVxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgY29uc3QgZXJyb3JzID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZXJyb3JPbmNlID0gKG1zZzogc3RyaW5nKSA9PiB7XG4gICAgaWYgKCFlcnJvcnMuaGFzKG1zZykpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IobXNnKVxuICAgIH1cbiAgICBlcnJvcnMuYWRkKG1zZylcbiAgfVxufVxuXG5leHBvcnQgeyBlcnJvck9uY2UgfVxuIl0sIm5hbWVzIjpbImVycm9yT25jZSIsIl8iLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJlcnJvcnMiLCJTZXQiLCJtc2ciLCJoYXMiLCJjb25zb2xlIiwiZXJyb3IiLCJhZGQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/next/dist/shared/lib/utils/error-once.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/react-hook-form/dist/index.esm.mjs":
|
||
/*!*********************************************************!*\
|
||
!*** ./node_modules/react-hook-form/dist/index.esm.mjs ***!
|
||
\*********************************************************/
|
||
/***/ ((__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 */ Controller: () => (/* binding */ Controller),\n/* harmony export */ Form: () => (/* binding */ Form),\n/* harmony export */ FormProvider: () => (/* binding */ FormProvider),\n/* harmony export */ FormStateSubscribe: () => (/* binding */ FormStateSubscribe),\n/* harmony export */ Watch: () => (/* binding */ Watch),\n/* harmony export */ appendErrors: () => (/* binding */ appendErrors),\n/* harmony export */ createFormControl: () => (/* binding */ createFormControl),\n/* harmony export */ get: () => (/* binding */ get),\n/* harmony export */ set: () => (/* binding */ set),\n/* harmony export */ useController: () => (/* binding */ useController),\n/* harmony export */ useFieldArray: () => (/* binding */ useFieldArray),\n/* harmony export */ useForm: () => (/* binding */ useForm),\n/* harmony export */ useFormContext: () => (/* binding */ useFormContext),\n/* harmony export */ useFormState: () => (/* binding */ useFormState),\n/* harmony export */ useWatch: () => (/* binding */ useWatch)\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\n\nvar isCheckBoxInput = (element) => element.type === 'checkbox';\n\nvar isDateObject = (value) => value instanceof Date;\n\nvar isNullOrUndefined = (value) => value == null;\n\nconst isObjectType = (value) => typeof value === 'object';\nvar isObject = (value) => !isNullOrUndefined(value) &&\n !Array.isArray(value) &&\n isObjectType(value) &&\n !isDateObject(value);\n\nvar getEventValue = (event) => isObject(event) && event.target\n ? isCheckBoxInput(event.target)\n ? event.target.checked\n : event.target.value\n : event;\n\nvar isNameInFieldArray = (names, name) => name\n .split('.')\n .some((part, index, arr) => !isNaN(Number(part)) && names.has(arr.slice(0, index).join('.')));\n\nvar isPlainObject = (tempObject) => {\n const prototypeCopy = tempObject.constructor && tempObject.constructor.prototype;\n return (isObject(prototypeCopy) && prototypeCopy.hasOwnProperty('isPrototypeOf'));\n};\n\nvar isWeb = typeof window !== 'undefined' &&\n typeof window.HTMLElement !== 'undefined' &&\n typeof document !== 'undefined';\n\nfunction cloneObject(data) {\n if (data instanceof Date) {\n return new Date(data);\n }\n const isFileListInstance = typeof FileList !== 'undefined' && data instanceof FileList;\n if (isWeb && (data instanceof Blob || isFileListInstance)) {\n return data;\n }\n const isArray = Array.isArray(data);\n if (!isArray && !(isObject(data) && isPlainObject(data))) {\n return data;\n }\n const copy = isArray ? [] : Object.create(Object.getPrototypeOf(data));\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n copy[key] = cloneObject(data[key]);\n }\n }\n return copy;\n}\n\nvar isKey = (value) => /^\\w*$/.test(value);\n\nvar isUndefined = (val) => val === undefined;\n\nvar compact = (value) => Array.isArray(value) ? value.filter(Boolean) : [];\n\nvar stringToPath = (input) => compact(input.replace(/[\"|']|\\]/g, '').split(/\\.|\\[/));\n\nvar get = (object, path, defaultValue) => {\n if (!path || !isObject(object)) {\n return defaultValue;\n }\n const paths = isKey(path) ? [path] : stringToPath(path);\n const result = paths.reduce((result, key) => {\n return isNullOrUndefined(result) ? undefined : result[key];\n }, object);\n return isUndefined(result) || result === object\n ? isUndefined(object[path])\n ? defaultValue\n : object[path]\n : result;\n};\n\nvar isBoolean = (value) => typeof value === 'boolean';\n\nvar isFunction = (value) => typeof value === 'function';\n\nvar set = (object, path, value) => {\n let index = -1;\n const tempPath = isKey(path) ? [path] : stringToPath(path);\n const length = tempPath.length;\n const lastIndex = length - 1;\n while (++index < length) {\n const key = tempPath[index];\n let newValue = value;\n if (index !== lastIndex) {\n const objValue = object[key];\n newValue =\n isObject(objValue) || Array.isArray(objValue)\n ? objValue\n : !isNaN(+tempPath[index + 1])\n ? []\n : {};\n }\n if (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return;\n }\n object[key] = newValue;\n object = object[key];\n }\n};\n\nconst EVENTS = {\n BLUR: 'blur',\n FOCUS_OUT: 'focusout',\n CHANGE: 'change',\n SUBMIT: 'submit',\n TRIGGER: 'trigger',\n VALID: 'valid',\n};\nconst VALIDATION_MODE = {\n onBlur: 'onBlur',\n onChange: 'onChange',\n onSubmit: 'onSubmit',\n onTouched: 'onTouched',\n all: 'all',\n};\nconst INPUT_VALIDATION_RULES = {\n max: 'max',\n min: 'min',\n maxLength: 'maxLength',\n minLength: 'minLength',\n pattern: 'pattern',\n required: 'required',\n validate: 'validate',\n};\nconst FORM_ERROR_TYPE = 'form';\nconst ROOT_ERROR_TYPE = 'root';\n\n/**\n * Separate context for `control` to prevent unnecessary rerenders.\n * Internal hooks that only need control use this instead of full form context.\n */\nconst HookFormControlContext = react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);\nHookFormControlContext.displayName = 'HookFormControlContext';\n/**\n * @internal Internal hook to access only control from context.\n */\nconst useFormControlContext = () => react__WEBPACK_IMPORTED_MODULE_0__.useContext(HookFormControlContext);\n\nvar getProxyFormState = (formState, control, localProxyFormState, isRoot = true) => {\n const result = {};\n for (const key in formState) {\n Object.defineProperty(result, key, {\n get: () => {\n const _key = key;\n if (control._proxyFormState[_key] !== VALIDATION_MODE.all) {\n control._proxyFormState[_key] = !isRoot || VALIDATION_MODE.all;\n }\n localProxyFormState && (localProxyFormState[_key] = true);\n return formState[_key];\n },\n });\n }\n return result;\n};\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect : react__WEBPACK_IMPORTED_MODULE_0__.useEffect;\n\n/**\n * This custom hook allows you to subscribe to each form state, and isolate the re-render at the custom hook level. It has its scope in terms of form state subscription, so it would not affect other useFormState and useForm. Using this hook can reduce the re-render impact on large and complex form application.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformstate) • [Demo](https://codesandbox.io/s/useformstate-75xly)\n *\n * @param props - include options on specify fields to subscribe. {@link UseFormStateReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, control } = useForm({\n * defaultValues: {\n * firstName: \"firstName\"\n * }});\n * const { dirtyFields } = useFormState({\n * control\n * });\n * const onSubmit = (data) => console.log(data);\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input {...register(\"firstName\")} placeholder=\"First Name\" />\n * {dirtyFields.firstName && <p>Field is dirty.</p>}\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nfunction useFormState(props) {\n const formControl = useFormControlContext();\n const { control = formControl, disabled, name, exact } = props || {};\n const [formState, updateFormState] = react__WEBPACK_IMPORTED_MODULE_0__.useState(() => ({\n ...control._formState,\n defaultValues: control._defaultValues,\n }));\n const _localProxyFormState = react__WEBPACK_IMPORTED_MODULE_0__.useRef({\n isDirty: false,\n isLoading: false,\n dirtyFields: false,\n touchedFields: false,\n validatingFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n });\n useIsomorphicLayoutEffect(() => control._subscribe({\n name,\n formState: _localProxyFormState.current,\n exact,\n callback: (formState) => {\n !disabled &&\n updateFormState({\n ...control._formState,\n ...formState,\n defaultValues: control._defaultValues,\n });\n },\n }), [name, disabled, exact]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n _localProxyFormState.current.isValid && control._setValid(true);\n }, [control]);\n return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => getProxyFormState(formState, control, _localProxyFormState.current, false), [formState, control]);\n}\n\nvar isString = (value) => typeof value === 'string';\n\nvar generateWatchOutput = (names, _names, formValues, isGlobal, defaultValue) => {\n if (isString(names)) {\n isGlobal && _names.watch.add(names);\n return get(formValues, names, defaultValue);\n }\n if (Array.isArray(names)) {\n return names.map((fieldName) => (isGlobal && _names.watch.add(fieldName),\n get(formValues, fieldName)));\n }\n isGlobal && (_names.watchAll = true);\n return formValues;\n};\n\nvar isPrimitive = (value) => isNullOrUndefined(value) || !isObjectType(value);\n\nfunction deepEqual(object1, object2, visited = new WeakSet()) {\n if (object1 === object2) {\n return true;\n }\n if (isPrimitive(object1) || isPrimitive(object2)) {\n return Object.is(object1, object2);\n }\n if (isDateObject(object1) && isDateObject(object2)) {\n return Object.is(object1.getTime(), object2.getTime());\n }\n const keys1 = Object.keys(object1);\n const keys2 = Object.keys(object2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n if (visited.has(object1) || visited.has(object2)) {\n return true;\n }\n visited.add(object1);\n visited.add(object2);\n for (const key of keys1) {\n const val1 = object1[key];\n if (!(key in object2)) {\n return false;\n }\n if (key !== 'ref') {\n const val2 = object2[key];\n if ((isDateObject(val1) && isDateObject(val2)) ||\n ((isObject(val1) || Array.isArray(val1)) &&\n (isObject(val2) || Array.isArray(val2)))\n ? !deepEqual(val1, val2, visited)\n : !Object.is(val1, val2)) {\n return false;\n }\n }\n }\n return true;\n}\n\n/**\n * Custom hook to subscribe to field change and isolate re-rendering at the component level.\n *\n * @remarks\n *\n * [API](https://react-hook-form.com/docs/usewatch) • [Demo](https://codesandbox.io/s/react-hook-form-v7-ts-usewatch-h9i5e)\n *\n * @example\n * ```tsx\n * const { control } = useForm();\n * const values = useWatch({\n * name: \"fieldName\"\n * control,\n * })\n * ```\n */\nfunction useWatch(props) {\n const formControl = useFormControlContext();\n const { control = formControl, name, defaultValue, disabled, exact, compute, } = props || {};\n const _defaultValue = react__WEBPACK_IMPORTED_MODULE_0__.useRef(defaultValue);\n const _compute = react__WEBPACK_IMPORTED_MODULE_0__.useRef(compute);\n const _computeFormValues = react__WEBPACK_IMPORTED_MODULE_0__.useRef(undefined);\n const _prevControl = react__WEBPACK_IMPORTED_MODULE_0__.useRef(control);\n const _prevName = react__WEBPACK_IMPORTED_MODULE_0__.useRef(name);\n _compute.current = compute;\n const [value, updateValue] = react__WEBPACK_IMPORTED_MODULE_0__.useState(() => {\n const defaultValue = control._getWatch(name, _defaultValue.current);\n return _compute.current ? _compute.current(defaultValue) : defaultValue;\n });\n const getCurrentOutput = react__WEBPACK_IMPORTED_MODULE_0__.useCallback((values) => {\n const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n return _compute.current ? _compute.current(formValues) : formValues;\n }, [control._formValues, control._names, name]);\n const refreshValue = react__WEBPACK_IMPORTED_MODULE_0__.useCallback((values) => {\n if (!disabled) {\n const formValues = generateWatchOutput(name, control._names, values || control._formValues, false, _defaultValue.current);\n if (_compute.current) {\n const computedFormValues = _compute.current(formValues);\n if (!deepEqual(computedFormValues, _computeFormValues.current)) {\n updateValue(computedFormValues);\n _computeFormValues.current = computedFormValues;\n }\n }\n else {\n updateValue(formValues);\n }\n }\n }, [control._formValues, control._names, disabled, name]);\n useIsomorphicLayoutEffect(() => {\n if (_prevControl.current !== control ||\n !deepEqual(_prevName.current, name)) {\n _prevControl.current = control;\n _prevName.current = name;\n refreshValue();\n }\n return control._subscribe({\n name,\n formState: {\n values: true,\n },\n exact,\n callback: (formState) => {\n refreshValue(formState.values);\n },\n });\n }, [control, exact, name, refreshValue]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => control._removeUnmounted());\n // If name or control changed for this render, synchronously reflect the\n // latest value so callers (like useController) see the correct value\n // immediately on the same render.\n // Optimize: Check control reference first before expensive deepEqual\n const controlChanged = _prevControl.current !== control;\n const prevName = _prevName.current;\n // Cache the computed output to avoid duplicate calls within the same render\n // We include shouldReturnImmediate in deps to ensure proper recomputation\n const computedOutput = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => {\n if (disabled) {\n return null;\n }\n const nameChanged = !controlChanged && !deepEqual(prevName, name);\n const shouldReturnImmediate = controlChanged || nameChanged;\n return shouldReturnImmediate ? getCurrentOutput() : null;\n }, [disabled, controlChanged, name, prevName, getCurrentOutput]);\n return computedOutput !== null ? computedOutput : value;\n}\n\n/**\n * Custom hook to work with controlled component, this function provide you with both form and field level state. Re-render is isolated at the hook level.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller) • [Demo](https://codesandbox.io/s/usecontroller-0o8px)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns field properties, field and form state. {@link UseControllerReturn}\n *\n * @example\n * ```tsx\n * function Input(props) {\n * const { field, fieldState, formState } = useController(props);\n * return (\n * <div>\n * <input {...field} placeholder={props.name} />\n * <p>{fieldState.isTouched && \"Touched\"}</p>\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * </div>\n * );\n * }\n * ```\n */\nfunction useController(props) {\n const formControl = useFormControlContext();\n const { name, disabled, control = formControl, shouldUnregister, defaultValue, exact = true, } = props;\n const isArrayField = isNameInFieldArray(control._names.array, name);\n const defaultValueMemo = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => get(control._formValues, name, get(control._defaultValues, name, defaultValue)), [control, name, defaultValue]);\n const value = useWatch({\n control,\n name,\n defaultValue: defaultValueMemo,\n exact,\n });\n const formState = useFormState({\n control,\n name,\n exact,\n });\n const _props = react__WEBPACK_IMPORTED_MODULE_0__.useRef(props);\n const _registerProps = react__WEBPACK_IMPORTED_MODULE_0__.useRef(control.register(name, {\n ...props.rules,\n value,\n ...(isBoolean(props.disabled) ? { disabled: props.disabled } : {}),\n }));\n _props.current = props;\n const fieldState = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => Object.defineProperties({}, {\n invalid: {\n enumerable: true,\n get: () => !!get(formState.errors, name),\n },\n isDirty: {\n enumerable: true,\n get: () => !!get(formState.dirtyFields, name),\n },\n isTouched: {\n enumerable: true,\n get: () => !!get(formState.touchedFields, name),\n },\n isValidating: {\n enumerable: true,\n get: () => !!get(formState.validatingFields, name),\n },\n error: {\n enumerable: true,\n get: () => get(formState.errors, name),\n },\n }), [formState, name]);\n const onChange = react__WEBPACK_IMPORTED_MODULE_0__.useCallback((event) => _registerProps.current.onChange({\n target: {\n value: getEventValue(event),\n name: name,\n },\n type: EVENTS.CHANGE,\n }), [name]);\n const onBlur = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => _registerProps.current.onBlur({\n target: {\n value: get(control._formValues, name),\n name: name,\n },\n type: EVENTS.BLUR,\n }), [name, control._formValues]);\n const ref = react__WEBPACK_IMPORTED_MODULE_0__.useCallback((elm) => {\n const field = get(control._fields, name);\n if (field && field._f && elm) {\n field._f.ref = {\n focus: () => isFunction(elm.focus) && elm.focus(),\n select: () => isFunction(elm.select) && elm.select(),\n setCustomValidity: (message) => isFunction(elm.setCustomValidity) && elm.setCustomValidity(message),\n reportValidity: () => isFunction(elm.reportValidity) && elm.reportValidity(),\n };\n }\n }, [control._fields, name]);\n const field = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({\n name,\n value,\n ...(isBoolean(disabled) || formState.disabled\n ? { disabled: formState.disabled || disabled }\n : {}),\n onChange,\n onBlur,\n ref,\n }), [name, disabled, formState.disabled, onChange, onBlur, ref, value]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n const _shouldUnregisterField = control._options.shouldUnregister || shouldUnregister;\n control.register(name, {\n ..._props.current.rules,\n ...(isBoolean(_props.current.disabled)\n ? { disabled: _props.current.disabled }\n : {}),\n });\n const updateMounted = (name, value) => {\n const field = get(control._fields, name);\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n updateMounted(name, true);\n if (_shouldUnregisterField) {\n const value = cloneObject(get(control._options.defaultValues, name, _props.current.defaultValue));\n set(control._defaultValues, name, value);\n if (isUndefined(get(control._formValues, name))) {\n set(control._formValues, name, value);\n }\n }\n !isArrayField && control.register(name);\n return () => {\n (isArrayField\n ? _shouldUnregisterField && !control._state.action\n : _shouldUnregisterField)\n ? control.unregister(name)\n : updateMounted(name, false);\n };\n }, [name, control, isArrayField, shouldUnregister]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n control._setDisabledField({\n disabled,\n name,\n });\n }, [disabled, name, control]);\n return react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({\n field,\n formState,\n fieldState,\n }), [field, formState, fieldState]);\n}\n\n/**\n * Component based on `useController` hook to work with controlled component.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usecontroller/controller) • [Demo](https://codesandbox.io/s/react-hook-form-v6-controller-ts-jwyzw) • [Video](https://www.youtube.com/watch?v=N2UNk_UCVyA)\n *\n * @param props - the path name to the form field value, and validation rules.\n *\n * @returns provide field handler functions, field and form state.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control } = useForm<FormValues>({\n * defaultValues: {\n * test: \"\"\n * }\n * });\n *\n * return (\n * <form>\n * <Controller\n * control={control}\n * name=\"test\"\n * render={({ field: { onChange, onBlur, value, ref }, formState, fieldState }) => (\n * <>\n * <input\n * onChange={onChange} // send value to hook form\n * onBlur={onBlur} // notify when input is touched\n * value={value} // return updated value\n * ref={ref} // set ref for focus management\n * />\n * <p>{formState.isSubmitted ? \"submitted\" : \"\"}</p>\n * <p>{fieldState.isTouched ? \"touched\" : \"\"}</p>\n * </>\n * )}\n * />\n * </form>\n * );\n * }\n * ```\n */\nconst Controller = (props) => props.render(useController(props));\n\nconst flatten = (obj) => {\n const output = {};\n for (const key of Object.keys(obj)) {\n if (isObjectType(obj[key]) && obj[key] !== null) {\n const nested = flatten(obj[key]);\n for (const nestedKey of Object.keys(nested)) {\n output[`${key}.${nestedKey}`] = nested[nestedKey];\n }\n }\n else {\n output[key] = obj[key];\n }\n }\n return output;\n};\n\nconst HookFormContext = react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);\nHookFormContext.displayName = 'HookFormContext';\n/**\n * This custom hook allows you to access the form context. useFormContext is intended to be used in deeply nested structures, where it would become inconvenient to pass the context as a prop. To be used with {@link FormProvider}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @returns return all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst useFormContext = () => react__WEBPACK_IMPORTED_MODULE_0__.useContext(HookFormContext);\n/**\n * A provider component that propagates the `useForm` methods to all children components via [React Context](https://react.dev/reference/react/useContext) API. To be used with {@link useFormContext}.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useformcontext) • [Demo](https://codesandbox.io/s/react-hook-form-v7-form-context-ytudi)\n *\n * @param props - all useForm methods\n *\n * @example\n * ```tsx\n * function App() {\n * const methods = useForm();\n * const onSubmit = data => console.log(data);\n *\n * return (\n * <FormProvider {...methods} >\n * <form onSubmit={methods.handleSubmit(onSubmit)}>\n * <NestedInput />\n * <input type=\"submit\" />\n * </form>\n * </FormProvider>\n * );\n * }\n *\n * function NestedInput() {\n * const { register } = useFormContext(); // retrieve all hook methods\n * return <input {...register(\"test\")} />;\n * }\n * ```\n */\nconst FormProvider = (props) => {\n const { children, watch, getValues, getFieldState, setError, clearErrors, setValue, setValues, trigger, formState, resetField, reset, handleSubmit, unregister, control, register, setFocus, subscribe, } = props;\n const memoizedValue = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => ({\n watch,\n getValues,\n getFieldState,\n setError,\n clearErrors,\n setValue,\n setValues,\n trigger,\n formState,\n resetField,\n reset,\n handleSubmit,\n unregister,\n control,\n register,\n setFocus,\n subscribe,\n }), [\n clearErrors,\n control,\n formState,\n getFieldState,\n getValues,\n handleSubmit,\n register,\n reset,\n resetField,\n setError,\n setFocus,\n setValue,\n setValues,\n subscribe,\n trigger,\n unregister,\n watch,\n ]);\n return (react__WEBPACK_IMPORTED_MODULE_0__.createElement(HookFormContext.Provider, { value: memoizedValue },\n react__WEBPACK_IMPORTED_MODULE_0__.createElement(HookFormControlContext.Provider, { value: memoizedValue.control }, children)));\n};\n\nconst POST_REQUEST = 'post';\n/**\n * Form component to manage submission.\n *\n * @param props - to setup submission detail. {@link FormProps}\n *\n * @returns form component or headless render prop.\n *\n * @example\n * ```tsx\n * function App() {\n * const { control, formState: { errors } } = useForm();\n *\n * return (\n * <Form action=\"/api\" control={control}>\n * <input {...register(\"name\")} />\n * <p>{errors?.root?.server && 'Server error'}</p>\n * <button>Submit</button>\n * </Form>\n * );\n * }\n * ```\n */\nfunction Form(props) {\n const methods = useFormContext();\n const [mounted, setMounted] = react__WEBPACK_IMPORTED_MODULE_0__.useState(false);\n const { control = methods.control, onSubmit, children, action, method = POST_REQUEST, headers, encType, onError, render, onSuccess, validateStatus, ...rest } = props;\n const submit = react__WEBPACK_IMPORTED_MODULE_0__.useCallback(async (event) => {\n let hasError = false;\n let type = '';\n await control.handleSubmit(async (data) => {\n const formData = new FormData();\n let formDataJson = '';\n try {\n formDataJson = JSON.stringify(data);\n }\n catch (_a) { }\n const flattenFormValues = flatten(data);\n for (const key in flattenFormValues) {\n formData.append(key, flattenFormValues[key]);\n }\n if (onSubmit) {\n await onSubmit({\n data,\n event,\n method,\n formData,\n formDataJson,\n });\n }\n if (action) {\n try {\n const shouldStringifySubmissionData = [\n headers && headers['Content-Type'],\n encType,\n ].some((value) => value && value.includes('json'));\n const response = await fetch(String(action), {\n method,\n headers: {\n ...headers,\n ...(encType && encType !== 'multipart/form-data'\n ? { 'Content-Type': encType }\n : {}),\n },\n body: shouldStringifySubmissionData ? formDataJson : formData,\n });\n if (response &&\n (validateStatus\n ? !validateStatus(response.status)\n : response.status < 200 || response.status >= 300)) {\n hasError = true;\n onError && onError({ response });\n type = String(response.status);\n }\n else {\n onSuccess && onSuccess({ response });\n }\n }\n catch (error) {\n hasError = true;\n onError && onError({ error });\n }\n }\n })(event);\n if (hasError && control) {\n control._subjects.state.next({\n isSubmitSuccessful: false,\n });\n control.setError('root.server', {\n type,\n });\n }\n }, [\n control,\n onSubmit,\n method,\n action,\n headers,\n encType,\n validateStatus,\n onError,\n onSuccess,\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n setMounted(true);\n }, []);\n return render ? (react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, null, render({\n submit,\n }))) : (react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"form\", { noValidate: mounted, action: action, method: method, encType: encType, onSubmit: submit, ...rest }, children));\n}\n\nconst FormStateSubscribe = ({ control, disabled, exact, name, render, }) => render(useFormState({ control, name, disabled, exact }));\n\nvar appendErrors = (name, validateAllFieldCriteria, errors, type, message) => validateAllFieldCriteria\n ? {\n ...errors[name],\n types: {\n ...(errors[name] && errors[name].types ? errors[name].types : {}),\n [type]: message || true,\n },\n }\n : {};\n\nvar convertToArrayPayload = (value) => (Array.isArray(value) ? value : [value]);\n\nvar createSubject = () => {\n let _observers = [];\n const next = (value) => {\n for (const observer of _observers) {\n observer.next && observer.next(value);\n }\n };\n const subscribe = (observer) => {\n _observers.push(observer);\n return {\n unsubscribe: () => {\n _observers = _observers.filter((o) => o !== observer);\n },\n };\n };\n const unsubscribe = () => {\n _observers = [];\n };\n return {\n get observers() {\n return _observers;\n },\n next,\n subscribe,\n unsubscribe,\n };\n};\n\nfunction extractFormValues(fieldsState, formValues) {\n const values = {};\n for (const key in fieldsState) {\n if (fieldsState.hasOwnProperty(key)) {\n const fieldState = fieldsState[key];\n const fieldValue = formValues[key];\n if (fieldState && isObject(fieldState) && fieldValue) {\n const nestedFieldsState = extractFormValues(fieldState, fieldValue);\n if (isObject(nestedFieldsState)) {\n values[key] = nestedFieldsState;\n }\n }\n else if (fieldsState[key]) {\n values[key] = fieldValue;\n }\n }\n }\n return values;\n}\n\nvar isEmptyObject = (value) => isObject(value) && !Object.keys(value).length;\n\nvar isFileInput = (element) => element.type === 'file';\n\nvar isHTMLElement = (value) => {\n if (!isWeb) {\n return false;\n }\n const owner = value ? value.ownerDocument : 0;\n return (value instanceof\n (owner && owner.defaultView ? owner.defaultView.HTMLElement : HTMLElement));\n};\n\nvar isMultipleSelect = (element) => element.type === `select-multiple`;\n\nvar isRadioInput = (element) => element.type === 'radio';\n\nvar isRadioOrCheckbox = (ref) => isRadioInput(ref) || isCheckBoxInput(ref);\n\nvar live = (ref) => isHTMLElement(ref) && ref.isConnected;\n\nfunction baseGet(object, updatePath) {\n const length = updatePath.slice(0, -1).length;\n let index = 0;\n while (index < length) {\n if (isNullOrUndefined(object)) {\n object = undefined;\n break;\n }\n object = object[updatePath[index]];\n index++;\n }\n return object;\n}\nfunction isEmptyArray(obj) {\n for (const key in obj) {\n if (obj.hasOwnProperty(key) && !isUndefined(obj[key])) {\n return false;\n }\n }\n return true;\n}\nfunction unset(object, path) {\n if (isString(path) && Object.prototype.hasOwnProperty.call(object, path)) {\n delete object[path];\n return object;\n }\n const paths = Array.isArray(path)\n ? path\n : isKey(path)\n ? [path]\n : stringToPath(path);\n const childObject = paths.length === 1 ? object : baseGet(object, paths);\n const index = paths.length - 1;\n const key = paths[index];\n if (childObject) {\n delete childObject[key];\n }\n if (index !== 0 &&\n ((isObject(childObject) && isEmptyObject(childObject)) ||\n (Array.isArray(childObject) && isEmptyArray(childObject)))) {\n unset(object, paths.slice(0, -1));\n }\n return object;\n}\n\nvar objectHasFunction = (data) => {\n for (const key in data) {\n if (isFunction(data[key])) {\n return true;\n }\n }\n return false;\n};\n\nfunction isTraversable(value) {\n return Array.isArray(value) || (isObject(value) && !objectHasFunction(value));\n}\nfunction markFieldsDirty(data, fields = {}) {\n for (const key in data) {\n const value = data[key];\n if (isTraversable(value)) {\n fields[key] = Array.isArray(value) ? [] : {};\n markFieldsDirty(value, fields[key]);\n }\n else if (!isUndefined(value)) {\n fields[key] = true;\n }\n }\n return fields;\n}\nfunction pruneDirtyFields(value) {\n if (value === false) {\n return undefined;\n }\n if (value === true) {\n return true;\n }\n if (Array.isArray(value)) {\n const result = value.map((value) => pruneDirtyFields(value));\n return (result.some((value) => value !== undefined) ? result : undefined);\n }\n if (isObject(value)) {\n const result = {};\n for (const key in value) {\n const pruned = pruneDirtyFields(value[key]);\n if (!isUndefined(pruned)) {\n result[key] = pruned;\n }\n }\n return (Object.keys(result).length ? result : undefined);\n }\n return undefined;\n}\nfunction getDirtyFields(data, formValues, dirtyFieldsFromValues) {\n if (!dirtyFieldsFromValues) {\n dirtyFieldsFromValues = markFieldsDirty(formValues);\n }\n for (const key in data) {\n const value = data[key];\n if (isTraversable(value)) {\n if (isUndefined(formValues) || isPrimitive(dirtyFieldsFromValues[key])) {\n dirtyFieldsFromValues[key] = markFieldsDirty(value, Array.isArray(value) ? [] : {});\n }\n else {\n getDirtyFields(value, isNullOrUndefined(formValues) ? {} : formValues[key], dirtyFieldsFromValues[key]);\n }\n }\n else {\n const formValue = formValues[key];\n dirtyFieldsFromValues[key] = !deepEqual(value, formValue);\n }\n }\n return pruneDirtyFields(dirtyFieldsFromValues) || {};\n}\n\nconst defaultResult = {\n value: false,\n isValid: false,\n};\nconst validResult = { value: true, isValid: true };\nvar getCheckboxValue = (options) => {\n if (Array.isArray(options)) {\n if (options.length > 1) {\n const values = options\n .filter((option) => option && option.checked && !option.disabled)\n .map((option) => option.value);\n return { value: values, isValid: !!values.length };\n }\n return options[0].checked && !options[0].disabled\n ? // @ts-expect-error expected to work in the browser\n options[0].attributes && !isUndefined(options[0].attributes.value)\n ? isUndefined(options[0].value) || options[0].value === ''\n ? validResult\n : { value: options[0].value, isValid: true }\n : validResult\n : defaultResult;\n }\n return defaultResult;\n};\n\nvar getFieldValueAs = (value, { valueAsNumber, valueAsDate, setValueAs }) => isUndefined(value)\n ? value\n : valueAsNumber\n ? value === ''\n ? NaN\n : value\n ? +value\n : value\n : valueAsDate && isString(value)\n ? new Date(value)\n : setValueAs\n ? setValueAs(value)\n : value;\n\nconst defaultReturn = {\n isValid: false,\n value: null,\n};\nvar getRadioValue = (options) => Array.isArray(options)\n ? options.reduce((previous, option) => option && option.checked && !option.disabled\n ? {\n isValid: true,\n value: option.value,\n }\n : previous, defaultReturn)\n : defaultReturn;\n\nfunction getFieldValue(_f) {\n const ref = _f.ref;\n if (isFileInput(ref)) {\n return ref.files;\n }\n if (isRadioInput(ref)) {\n return getRadioValue(_f.refs).value;\n }\n if (isMultipleSelect(ref)) {\n return [...ref.selectedOptions].map(({ value }) => value);\n }\n if (isCheckBoxInput(ref)) {\n return getCheckboxValue(_f.refs).value;\n }\n return getFieldValueAs(isUndefined(ref.value) ? _f.ref.value : ref.value, _f);\n}\n\nvar getResolverOptions = (fieldsNames, _fields, criteriaMode, shouldUseNativeValidation) => {\n const fields = {};\n for (const name of fieldsNames) {\n const field = get(_fields, name);\n field && set(fields, name, field._f);\n }\n return {\n criteriaMode,\n names: [...fieldsNames],\n fields,\n shouldUseNativeValidation,\n };\n};\n\nvar isRegex = (value) => value instanceof RegExp;\n\nvar getRuleValue = (rule) => isUndefined(rule)\n ? rule\n : isRegex(rule)\n ? rule.source\n : isObject(rule)\n ? isRegex(rule.value)\n ? rule.value.source\n : rule.value\n : rule;\n\nvar getValidationModes = (mode) => ({\n isOnSubmit: !mode || mode === VALIDATION_MODE.onSubmit,\n isOnBlur: mode === VALIDATION_MODE.onBlur,\n isOnChange: mode === VALIDATION_MODE.onChange,\n isOnAll: mode === VALIDATION_MODE.all,\n isOnTouch: mode === VALIDATION_MODE.onTouched,\n});\n\nconst ASYNC_FUNCTION = 'AsyncFunction';\nvar hasPromiseValidation = (fieldReference) => !!fieldReference &&\n !!fieldReference.validate &&\n !!((isFunction(fieldReference.validate) &&\n fieldReference.validate.constructor.name === ASYNC_FUNCTION) ||\n (isObject(fieldReference.validate) &&\n Object.values(fieldReference.validate).find((validateFunction) => validateFunction.constructor.name === ASYNC_FUNCTION)));\n\nvar hasValidation = (options) => options.mount &&\n (options.required ||\n options.min ||\n options.max ||\n options.maxLength ||\n options.minLength ||\n options.pattern ||\n options.validate);\n\nvar isWatched = (name, _names, isBlurEvent) => !isBlurEvent &&\n (_names.watchAll ||\n _names.watch.has(name) ||\n [..._names.watch].some((watchName) => name.startsWith(watchName) &&\n /^\\.\\w+/.test(name.slice(watchName.length))));\n\nconst iterateFieldsByAction = (fields, action, fieldsNames, abortEarly) => {\n for (const key of fieldsNames || Object.keys(fields)) {\n const field = get(fields, key);\n if (field) {\n const { _f, ...currentField } = field;\n if (_f) {\n if (_f.refs && _f.refs[0] && action(_f.refs[0], key) && !abortEarly) {\n return true;\n }\n else if (_f.ref && action(_f.ref, _f.name) && !abortEarly) {\n return true;\n }\n else {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n }\n else if (isObject(currentField)) {\n if (iterateFieldsByAction(currentField, action)) {\n break;\n }\n }\n }\n }\n return;\n};\n\nfunction schemaErrorLookup(errors, _fields, name) {\n const error = get(errors, name);\n if (error || isKey(name)) {\n return {\n error,\n name,\n };\n }\n const names = name.split('.');\n while (names.length) {\n const fieldName = names.join('.');\n const field = get(_fields, fieldName);\n const foundError = get(errors, fieldName);\n if (field && !Array.isArray(field) && name !== fieldName) {\n return { name };\n }\n if (foundError && foundError.type) {\n return {\n name: fieldName,\n error: foundError,\n };\n }\n if (foundError && foundError.root && foundError.root.type) {\n return {\n name: `${fieldName}.root`,\n error: foundError.root,\n };\n }\n names.pop();\n }\n return {\n name,\n };\n}\n\nvar shouldRenderFormState = (formStateData, _proxyFormState, updateFormState, isRoot) => {\n updateFormState(formStateData);\n const { name, ...formState } = formStateData;\n return (isEmptyObject(formState) ||\n (isRoot &&\n Object.keys(formState).length >= Object.keys(_proxyFormState).length) ||\n Object.keys(formState).find((key) => _proxyFormState[key] ===\n (!isRoot || VALIDATION_MODE.all)));\n};\n\nvar shouldSubscribeByName = (name, signalName, exact) => !name ||\n !signalName ||\n name === signalName ||\n convertToArrayPayload(name).some((currentName) => currentName &&\n (exact\n ? currentName === signalName\n : currentName.startsWith(signalName) ||\n signalName.startsWith(currentName)));\n\nvar skipValidation = (isBlurEvent, isTouched, isSubmitted, reValidateMode, mode) => {\n if (mode.isOnAll) {\n return false;\n }\n else if (!isSubmitted && mode.isOnTouch) {\n return !(isTouched || isBlurEvent);\n }\n else if (isSubmitted ? reValidateMode.isOnBlur : mode.isOnBlur) {\n return !isBlurEvent;\n }\n else if (isSubmitted ? reValidateMode.isOnChange : mode.isOnChange) {\n return isBlurEvent;\n }\n return true;\n};\n\nvar unsetEmptyArray = (ref, name) => !compact(get(ref, name)).length && unset(ref, name);\n\nvar updateFieldArrayRootError = (errors, error, name) => {\n const fieldArrayErrors = convertToArrayPayload(get(errors, name));\n set(fieldArrayErrors, ROOT_ERROR_TYPE, error[name]);\n set(errors, name, fieldArrayErrors);\n return errors;\n};\n\nfunction getValidateError(result, ref, type = 'validate') {\n if (isString(result) ||\n (Array.isArray(result) && result.every(isString)) ||\n (isBoolean(result) && !result)) {\n return {\n type,\n message: isString(result) ? result : '',\n ref,\n };\n }\n}\n\nvar getValueAndMessage = (validationData) => isObject(validationData) && !isRegex(validationData)\n ? validationData\n : {\n value: validationData,\n message: '',\n };\n\nvar validateField = async (field, disabledFieldNames, formValues, validateAllFieldCriteria, shouldUseNativeValidation, isFieldArray) => {\n const { ref, refs, required, maxLength, minLength, min, max, pattern, validate, name, valueAsNumber, mount, } = field._f;\n const inputValue = get(formValues, name);\n if (!mount || disabledFieldNames.has(name)) {\n return {};\n }\n const inputRef = refs ? refs[0] : ref;\n const setCustomValidity = (message) => {\n if (shouldUseNativeValidation && inputRef.reportValidity) {\n inputRef.setCustomValidity(isBoolean(message) ? '' : message || '');\n inputRef.reportValidity();\n }\n };\n const error = {};\n const isRadio = isRadioInput(ref);\n const isCheckBox = isCheckBoxInput(ref);\n const isRadioOrCheckbox = isRadio || isCheckBox;\n const isEmpty = ((valueAsNumber || isFileInput(ref)) &&\n isUndefined(ref.value) &&\n isUndefined(inputValue)) ||\n (isHTMLElement(ref) && ref.value === '') ||\n inputValue === '' ||\n (Array.isArray(inputValue) && !inputValue.length) ||\n (valueAsNumber && typeof inputValue === 'number' && isNaN(inputValue));\n const appendErrorsCurry = appendErrors.bind(null, name, validateAllFieldCriteria, error);\n const getMinMaxMessage = (exceedMax, maxLengthMessage, minLengthMessage, maxType = INPUT_VALIDATION_RULES.maxLength, minType = INPUT_VALIDATION_RULES.minLength) => {\n const message = exceedMax ? maxLengthMessage : minLengthMessage;\n error[name] = {\n type: exceedMax ? maxType : minType,\n message,\n ref,\n ...appendErrorsCurry(exceedMax ? maxType : minType, message),\n };\n };\n if (isFieldArray\n ? !Array.isArray(inputValue) || !inputValue.length\n : required &&\n ((!isRadioOrCheckbox && (isEmpty || isNullOrUndefined(inputValue))) ||\n (isBoolean(inputValue) && !inputValue) ||\n (isCheckBox && !getCheckboxValue(refs).isValid) ||\n (isRadio && !getRadioValue(refs).isValid))) {\n const { value, message } = isString(required)\n ? { value: !!required, message: required }\n : getValueAndMessage(required);\n if (value) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.required,\n message,\n ref: inputRef,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.required, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (!isEmpty && (!isNullOrUndefined(min) || !isNullOrUndefined(max))) {\n let exceedMax;\n let exceedMin;\n const maxOutput = getValueAndMessage(max);\n const minOutput = getValueAndMessage(min);\n if (!isNullOrUndefined(inputValue) && !isNaN(inputValue)) {\n const valueNumber = ref.valueAsNumber ||\n (inputValue ? +inputValue : inputValue);\n if (!isNullOrUndefined(maxOutput.value)) {\n exceedMax = valueNumber > maxOutput.value;\n }\n if (!isNullOrUndefined(minOutput.value)) {\n exceedMin = valueNumber < minOutput.value;\n }\n }\n else {\n const valueDate = ref.valueAsDate || new Date(inputValue);\n const convertTimeToDate = (time) => new Date(new Date().toDateString() + ' ' + time);\n const isTime = ref.type == 'time';\n const isWeek = ref.type == 'week';\n if (isString(maxOutput.value) && inputValue) {\n exceedMax = isTime\n ? convertTimeToDate(inputValue) > convertTimeToDate(maxOutput.value)\n : isWeek\n ? inputValue > maxOutput.value\n : valueDate > new Date(maxOutput.value);\n }\n if (isString(minOutput.value) && inputValue) {\n exceedMin = isTime\n ? convertTimeToDate(inputValue) < convertTimeToDate(minOutput.value)\n : isWeek\n ? inputValue < minOutput.value\n : valueDate < new Date(minOutput.value);\n }\n }\n if (exceedMax || exceedMin) {\n getMinMaxMessage(!!exceedMax, maxOutput.message, minOutput.message, INPUT_VALIDATION_RULES.max, INPUT_VALIDATION_RULES.min);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if ((maxLength || minLength) &&\n !isEmpty &&\n (isString(inputValue) || (isFieldArray && Array.isArray(inputValue)))) {\n const maxLengthOutput = getValueAndMessage(maxLength);\n const minLengthOutput = getValueAndMessage(minLength);\n const exceedMax = !isNullOrUndefined(maxLengthOutput.value) &&\n inputValue.length > +maxLengthOutput.value;\n const exceedMin = !isNullOrUndefined(minLengthOutput.value) &&\n inputValue.length < +minLengthOutput.value;\n if (exceedMax || exceedMin) {\n getMinMaxMessage(exceedMax, maxLengthOutput.message, minLengthOutput.message);\n if (!validateAllFieldCriteria) {\n setCustomValidity(error[name].message);\n return error;\n }\n }\n }\n if (pattern && !isEmpty && isString(inputValue)) {\n const { value: patternValue, message } = getValueAndMessage(pattern);\n if (isRegex(patternValue) && !inputValue.match(patternValue)) {\n error[name] = {\n type: INPUT_VALIDATION_RULES.pattern,\n message,\n ref,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.pattern, message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(message);\n return error;\n }\n }\n }\n if (validate) {\n if (isFunction(validate)) {\n const result = await validate(inputValue, formValues);\n const validateError = getValidateError(result, inputRef);\n if (validateError) {\n error[name] = {\n ...validateError,\n ...appendErrorsCurry(INPUT_VALIDATION_RULES.validate, validateError.message),\n };\n if (!validateAllFieldCriteria) {\n setCustomValidity(validateError.message);\n return error;\n }\n }\n }\n else if (isObject(validate)) {\n let validationResult = {};\n for (const key in validate) {\n if (!isEmptyObject(validationResult) && !validateAllFieldCriteria) {\n break;\n }\n const validateError = getValidateError(await validate[key](inputValue, formValues), inputRef, key);\n if (validateError) {\n validationResult = {\n ...validateError,\n ...appendErrorsCurry(key, validateError.message),\n };\n setCustomValidity(validateError.message);\n if (validateAllFieldCriteria) {\n error[name] = validationResult;\n }\n }\n }\n if (!isEmptyObject(validationResult)) {\n error[name] = {\n ref: inputRef,\n ...validationResult,\n };\n if (!validateAllFieldCriteria) {\n return error;\n }\n }\n }\n }\n setCustomValidity(true);\n return error;\n};\n\nconst defaultOptions = {\n mode: VALIDATION_MODE.onSubmit,\n reValidateMode: VALIDATION_MODE.onChange,\n shouldFocusError: true,\n};\nconst DEFAULT_FORM_STATE = {\n submitCount: 0,\n isDirty: false,\n isReady: false,\n isValidating: false,\n isSubmitted: false,\n isSubmitting: false,\n isSubmitSuccessful: false,\n isValid: false,\n touchedFields: {},\n dirtyFields: {},\n validatingFields: {},\n};\nfunction createFormControl(props = {}) {\n let _options = {\n ...defaultOptions,\n ...props,\n };\n let _formState = {\n ...cloneObject(DEFAULT_FORM_STATE),\n isLoading: isFunction(_options.defaultValues),\n errors: _options.errors || {},\n disabled: _options.disabled || false,\n };\n let _fields = {};\n let _defaultValues = isObject(_options.defaultValues) || isObject(_options.values)\n ? cloneObject(_options.defaultValues || _options.values) || {}\n : {};\n let _formValues = _options.shouldUnregister\n ? {}\n : cloneObject(_defaultValues);\n let _state = {\n action: false,\n mount: false,\n watch: false,\n keepIsValid: false,\n };\n let _names = {\n mount: new Set(),\n disabled: new Set(),\n unMount: new Set(),\n array: new Set(),\n watch: new Set(),\n registerName: new Set(),\n };\n let delayErrorCallback;\n let timer = 0;\n const defaultProxyFormState = {\n isDirty: false,\n dirtyFields: false,\n validatingFields: false,\n touchedFields: false,\n isValidating: false,\n isValid: false,\n errors: false,\n };\n const _proxyFormState = {\n ...defaultProxyFormState,\n };\n let _proxySubscribeFormState = {\n ..._proxyFormState,\n };\n const _subjects = {\n array: createSubject(),\n state: createSubject(),\n };\n const shouldDisplayAllAssociatedErrors = _options.criteriaMode === VALIDATION_MODE.all;\n const debounce = (callback) => (wait) => {\n clearTimeout(timer);\n timer = setTimeout(callback, wait);\n };\n const _setValid = async (shouldUpdateValid) => {\n if (_state.keepIsValid) {\n return;\n }\n if (!_options.disabled &&\n (_proxyFormState.isValid ||\n _proxySubscribeFormState.isValid ||\n shouldUpdateValid)) {\n let isValid;\n if (_options.resolver) {\n isValid = isEmptyObject((await _runSchema()).errors);\n _updateIsValidating();\n }\n else {\n isValid = await executeBuiltInValidation({\n fields: _fields,\n onlyCheckValid: true,\n eventType: EVENTS.VALID,\n });\n }\n if (isValid !== _formState.isValid) {\n _subjects.state.next({\n isValid,\n });\n }\n }\n };\n const _updateIsValidating = (names, isValidating) => {\n if (!_options.disabled &&\n (_proxyFormState.isValidating ||\n _proxyFormState.validatingFields ||\n _proxySubscribeFormState.isValidating ||\n _proxySubscribeFormState.validatingFields)) {\n (names || Array.from(_names.mount)).forEach((name) => {\n if (name) {\n isValidating\n ? set(_formState.validatingFields, name, isValidating)\n : unset(_formState.validatingFields, name);\n }\n });\n _subjects.state.next({\n validatingFields: _formState.validatingFields,\n isValidating: !isEmptyObject(_formState.validatingFields),\n });\n }\n };\n const _updateDirtyFields = () => {\n _formState.dirtyFields = getDirtyFields(_defaultValues, _formValues);\n };\n const _setFieldArray = (name, values = [], method, args, shouldSetValues = true, shouldUpdateFieldsAndState = true) => {\n if (args && method && !_options.disabled) {\n _state.action = true;\n if (shouldUpdateFieldsAndState && Array.isArray(get(_fields, name))) {\n const fieldValues = method(get(_fields, name), args.argA, args.argB);\n shouldSetValues && set(_fields, name, fieldValues);\n }\n if (shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.errors, name))) {\n const errors = method(get(_formState.errors, name), args.argA, args.argB);\n shouldSetValues && set(_formState.errors, name, errors);\n unsetEmptyArray(_formState.errors, name);\n }\n if ((_proxyFormState.touchedFields ||\n _proxySubscribeFormState.touchedFields) &&\n shouldUpdateFieldsAndState &&\n Array.isArray(get(_formState.touchedFields, name))) {\n const touchedFields = method(get(_formState.touchedFields, name), args.argA, args.argB);\n shouldSetValues && set(_formState.touchedFields, name, touchedFields);\n }\n if (_proxyFormState.dirtyFields || _proxySubscribeFormState.dirtyFields) {\n _updateDirtyFields();\n }\n _subjects.state.next({\n name,\n isDirty: _getDirty(name, values),\n dirtyFields: _formState.dirtyFields,\n errors: _formState.errors,\n isValid: _formState.isValid,\n });\n }\n else {\n set(_formValues, name, values);\n }\n };\n const updateErrors = (name, error) => {\n set(_formState.errors, name, error);\n _subjects.state.next({\n errors: _formState.errors,\n });\n };\n const _setErrors = (errors) => {\n _formState.errors = errors;\n _subjects.state.next({\n errors: _formState.errors,\n isValid: false,\n });\n };\n const updateValidAndValue = (name, shouldSkipSetValueAs, value, ref) => {\n const field = get(_fields, name);\n if (field) {\n const wasUnsetInFormValues = isUndefined(get(_formValues, name));\n const defaultValue = get(_formValues, name, isUndefined(value) ? get(_defaultValues, name) : value);\n isUndefined(defaultValue) ||\n (ref && ref.defaultChecked) ||\n shouldSkipSetValueAs\n ? set(_formValues, name, shouldSkipSetValueAs ? defaultValue : getFieldValue(field._f))\n : setFieldValue(name, defaultValue);\n if (_state.mount && !_state.action) {\n _setValid();\n // Re-registering a field after a prior unregister puts its key back\n // into _formValues, which can flip isDirty back to false (#13397).\n // Only run when we are currently dirty, otherwise an initial register\n // for a field with no defaultValue would flip isDirty to true. Reset\n // paths repopulate _formValues before re-register, so the key is\n // present then and this branch is skipped (preserves keepDirty).\n if (wasUnsetInFormValues &&\n _formState.isDirty &&\n (_proxyFormState.isDirty || _proxySubscribeFormState.isDirty)) {\n const isDirty = _getDirty();\n if (!isDirty) {\n _formState.isDirty = false;\n _subjects.state.next({ ..._formState });\n }\n }\n }\n }\n };\n const updateTouchAndDirty = (name, fieldValue, isBlurEvent, shouldDirty, shouldRender) => {\n let shouldUpdateField = false;\n let isPreviousDirty = false;\n const output = {\n name,\n };\n if (!_options.disabled) {\n if (!isBlurEvent || shouldDirty) {\n if (_proxyFormState.isDirty || _proxySubscribeFormState.isDirty) {\n isPreviousDirty = _formState.isDirty;\n _formState.isDirty = output.isDirty = _getDirty();\n shouldUpdateField = isPreviousDirty !== output.isDirty;\n }\n const isCurrentFieldPristine = deepEqual(get(_defaultValues, name), fieldValue);\n isPreviousDirty = !!get(_formState.dirtyFields, name);\n isCurrentFieldPristine\n ? unset(_formState.dirtyFields, name)\n : set(_formState.dirtyFields, name, true);\n output.dirtyFields = _formState.dirtyFields;\n shouldUpdateField =\n shouldUpdateField ||\n ((_proxyFormState.dirtyFields ||\n _proxySubscribeFormState.dirtyFields) &&\n isPreviousDirty !== !isCurrentFieldPristine);\n }\n if (isBlurEvent) {\n const isPreviousFieldTouched = get(_formState.touchedFields, name);\n if (!isPreviousFieldTouched) {\n set(_formState.touchedFields, name, isBlurEvent);\n output.touchedFields = _formState.touchedFields;\n shouldUpdateField =\n shouldUpdateField ||\n ((_proxyFormState.touchedFields ||\n _proxySubscribeFormState.touchedFields) &&\n isPreviousFieldTouched !== isBlurEvent);\n }\n }\n shouldUpdateField && shouldRender && _subjects.state.next(output);\n }\n return shouldUpdateField ? output : {};\n };\n const shouldRenderByError = (name, isValid, error, fieldState) => {\n const previousFieldError = get(_formState.errors, name);\n const shouldUpdateValid = (_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n isBoolean(isValid) &&\n _formState.isValid !== isValid;\n if (_options.delayError && error) {\n delayErrorCallback = debounce(() => updateErrors(name, error));\n delayErrorCallback(_options.delayError);\n }\n else {\n clearTimeout(timer);\n delayErrorCallback = null;\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n if ((error ? !deepEqual(previousFieldError, error) : previousFieldError) ||\n !isEmptyObject(fieldState) ||\n shouldUpdateValid) {\n const updatedFormState = {\n ...fieldState,\n ...(shouldUpdateValid && isBoolean(isValid) ? { isValid } : {}),\n errors: _formState.errors,\n name,\n };\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n _subjects.state.next(updatedFormState);\n }\n };\n const _runSchema = async (name) => {\n _updateIsValidating(name, true);\n return await _options.resolver(_formValues, _options.context, getResolverOptions(name || _names.mount, _fields, _options.criteriaMode, _options.shouldUseNativeValidation));\n };\n const executeSchemaAndUpdateState = async (names) => {\n const { errors } = await _runSchema(names);\n _updateIsValidating(names);\n if (names) {\n for (const name of names) {\n const error = get(errors, name);\n error\n ? set(_formState.errors, name, error)\n : unset(_formState.errors, name);\n }\n }\n else {\n _formState.errors = errors;\n }\n return errors;\n };\n const validateForm = async ({ name, eventType, }) => {\n if (props.validate) {\n const result = await props.validate({\n formValues: _formValues,\n formState: _formState,\n name,\n eventType,\n });\n if (isObject(result)) {\n for (const key in result) {\n const error = result[key];\n if (error) {\n setError(`${FORM_ERROR_TYPE}.${key}`, {\n message: isString(result.message) ? result.message : '',\n type: INPUT_VALIDATION_RULES.validate,\n });\n }\n }\n }\n else if (isString(result) || !result) {\n setError(FORM_ERROR_TYPE, {\n message: result || '',\n type: INPUT_VALIDATION_RULES.validate,\n });\n }\n else {\n clearErrors(FORM_ERROR_TYPE);\n }\n return result;\n }\n return true;\n };\n const executeBuiltInValidation = async ({ fields, onlyCheckValid, name, eventType, context = {\n valid: true,\n runRootValidation: false,\n }, }) => {\n if (props.validate) {\n context.runRootValidation = true;\n const result = await validateForm({\n name,\n eventType,\n });\n if (!result) {\n context.valid = false;\n if (onlyCheckValid) {\n return context.valid;\n }\n }\n }\n for (const name in fields) {\n const field = fields[name];\n if (field) {\n const { _f, ...fieldValue } = field;\n if (_f) {\n const isFieldArrayRoot = _names.array.has(_f.name);\n const isPromiseFunction = field._f && hasPromiseValidation(field._f);\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([_f.name], true);\n }\n const fieldError = await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation && !onlyCheckValid, isFieldArrayRoot);\n if (isPromiseFunction && _proxyFormState.validatingFields) {\n _updateIsValidating([_f.name]);\n }\n if (fieldError[_f.name]) {\n context.valid = false;\n if (onlyCheckValid) {\n break;\n }\n }\n !onlyCheckValid &&\n (get(fieldError, _f.name)\n ? isFieldArrayRoot\n ? updateFieldArrayRootError(_formState.errors, fieldError, _f.name)\n : set(_formState.errors, _f.name, fieldError[_f.name])\n : unset(_formState.errors, _f.name));\n if (props.shouldUseNativeValidation && fieldError[_f.name]) {\n break;\n }\n }\n !isEmptyObject(fieldValue) &&\n (await executeBuiltInValidation({\n context,\n onlyCheckValid,\n fields: fieldValue,\n name: name,\n eventType,\n }));\n }\n }\n return context.valid;\n };\n const _removeUnmounted = () => {\n for (const name of _names.unMount) {\n const field = get(_fields, name);\n field &&\n (field._f.refs\n ? field._f.refs.every((ref) => !live(ref))\n : !live(field._f.ref)) &&\n unregister(name);\n }\n _names.unMount = new Set();\n };\n const _getDirty = (name, data) => !_options.disabled &&\n (name && data && set(_formValues, name, data),\n !deepEqual(getValues(), _defaultValues));\n const _getWatch = (names, defaultValue, isGlobal) => generateWatchOutput(names, _names, {\n ...(_state.mount\n ? _formValues\n : isUndefined(defaultValue)\n ? _defaultValues\n : isString(names)\n ? { [names]: defaultValue }\n : defaultValue),\n }, isGlobal, defaultValue);\n const _getFieldArray = (name) => compact(get(_state.mount ? _formValues : _defaultValues, name, _options.shouldUnregister ? get(_defaultValues, name, []) : []));\n const setFieldValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n let fieldValue = value;\n if (field) {\n const fieldReference = field._f;\n if (fieldReference) {\n !fieldReference.disabled &&\n set(_formValues, name, getFieldValueAs(value, fieldReference));\n fieldValue =\n isHTMLElement(fieldReference.ref) && isNullOrUndefined(value)\n ? ''\n : value;\n if (isMultipleSelect(fieldReference.ref)) {\n [...fieldReference.ref.options].forEach((optionRef) => (optionRef.selected = fieldValue.includes(optionRef.value)));\n }\n else if (fieldReference.refs) {\n if (isCheckBoxInput(fieldReference.ref)) {\n fieldReference.refs.forEach((checkboxRef) => {\n if (!checkboxRef.defaultChecked || !checkboxRef.disabled) {\n if (Array.isArray(fieldValue)) {\n checkboxRef.checked = !!fieldValue.find((data) => data === checkboxRef.value);\n }\n else {\n checkboxRef.checked =\n fieldValue === checkboxRef.value || !!fieldValue;\n }\n }\n });\n }\n else {\n fieldReference.refs.forEach((radioRef) => (radioRef.checked = radioRef.value === fieldValue));\n }\n }\n else if (isFileInput(fieldReference.ref)) {\n fieldReference.ref.value = '';\n }\n else {\n fieldReference.ref.value = fieldValue;\n if (!fieldReference.ref.type) {\n _subjects.state.next({\n name,\n values: cloneObject(_formValues),\n });\n }\n }\n }\n }\n (options.shouldDirty || options.shouldTouch) &&\n updateTouchAndDirty(name, fieldValue, options.shouldTouch, options.shouldDirty, true);\n options.shouldValidate && trigger(name);\n };\n const setFieldValues = (name, value, options) => {\n for (const fieldKey in value) {\n if (!value.hasOwnProperty(fieldKey)) {\n return;\n }\n const fieldValue = value[fieldKey];\n const fieldName = name + '.' + fieldKey;\n const field = get(_fields, fieldName);\n (_names.array.has(name) ||\n isObject(fieldValue) ||\n (field && !field._f)) &&\n !isDateObject(fieldValue)\n ? setFieldValues(fieldName, fieldValue, options)\n : setFieldValue(fieldName, fieldValue, options);\n }\n };\n const setValue = (name, value, options = {}) => {\n const field = get(_fields, name);\n const isFieldArray = _names.array.has(name);\n const cloneValue = cloneObject(value);\n const previousValue = get(_formValues, name);\n const isValueUnchanged = deepEqual(previousValue, cloneValue);\n set(_formValues, name, cloneValue);\n if (isFieldArray) {\n _subjects.array.next({\n name,\n values: cloneObject(_formValues),\n });\n if ((_proxyFormState.isDirty ||\n _proxyFormState.dirtyFields ||\n _proxySubscribeFormState.isDirty ||\n _proxySubscribeFormState.dirtyFields) &&\n options.shouldDirty) {\n _updateDirtyFields();\n _subjects.state.next({\n name,\n dirtyFields: _formState.dirtyFields,\n isDirty: _getDirty(name, cloneValue),\n });\n }\n }\n else {\n const isEmpty = (Array.isArray(cloneValue) && !cloneValue.length) ||\n isEmptyObject(cloneValue);\n if (!field || field._f || isNullOrUndefined(cloneValue) || isEmpty) {\n setFieldValue(name, cloneValue, options);\n }\n else {\n setFieldValues(name, cloneValue, options);\n }\n }\n if (!isValueUnchanged) {\n const watched = isWatched(name, _names);\n _subjects.state.next({\n ...(watched && _formState),\n name: _state.mount || watched ? name : undefined,\n values: cloneObject(_formValues),\n });\n }\n };\n const setValues = (formValues) => {\n const updatedFormValues = isFunction(formValues)\n ? formValues(_formValues)\n : formValues;\n if (!deepEqual(_formValues, updatedFormValues)) {\n _formValues = {\n ..._formValues,\n ...updatedFormValues,\n };\n _subjects.state.next({ ..._formState, values: _formValues });\n }\n };\n const onChange = async (event) => {\n _state.mount = true;\n const target = event.target;\n let name = target.name;\n let isFieldValueUpdated = true;\n const field = get(_fields, name);\n const _updateIsFieldValueUpdated = (fieldValue) => {\n isFieldValueUpdated =\n Number.isNaN(fieldValue) ||\n (isDateObject(fieldValue) && isNaN(fieldValue.getTime())) ||\n deepEqual(fieldValue, get(_formValues, name, fieldValue));\n };\n const validationModeBeforeSubmit = getValidationModes(_options.mode);\n const validationModeAfterSubmit = getValidationModes(_options.reValidateMode);\n if (field) {\n let error;\n let isValid;\n const fieldValue = target.type\n ? getFieldValue(field._f)\n : getEventValue(event);\n const isBlurEvent = event.type === EVENTS.BLUR || event.type === EVENTS.FOCUS_OUT;\n const shouldSkipValidation = (!hasValidation(field._f) &&\n !props.validate &&\n !_options.resolver &&\n !get(_formState.errors, name) &&\n !field._f.deps) ||\n skipValidation(isBlurEvent, get(_formState.touchedFields, name), _formState.isSubmitted, validationModeAfterSubmit, validationModeBeforeSubmit);\n const watched = isWatched(name, _names, isBlurEvent);\n set(_formValues, name, fieldValue);\n if (isBlurEvent) {\n if (!target || !target.readOnly) {\n field._f.onBlur && field._f.onBlur(event);\n delayErrorCallback && delayErrorCallback(0);\n }\n }\n else if (field._f.onChange) {\n field._f.onChange(event);\n }\n const fieldState = updateTouchAndDirty(name, fieldValue, isBlurEvent);\n const shouldRender = !isEmptyObject(fieldState) || watched;\n !isBlurEvent &&\n _subjects.state.next({\n name,\n type: event.type,\n values: cloneObject(_formValues),\n });\n if (shouldSkipValidation) {\n if (_proxyFormState.isValid || _proxySubscribeFormState.isValid) {\n if (_options.mode === 'onBlur') {\n if (isBlurEvent) {\n _setValid();\n }\n }\n else if (!isBlurEvent) {\n _setValid();\n }\n }\n return (shouldRender &&\n _subjects.state.next({ name, ...(watched ? {} : fieldState) }));\n }\n if (!_options.resolver && props.validate) {\n await validateForm({\n name: name,\n eventType: event.type,\n });\n }\n !isBlurEvent && watched && _subjects.state.next({ ..._formState });\n if (_options.resolver) {\n const { errors } = await _runSchema([name]);\n _updateIsValidating([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n const previousErrorLookupResult = schemaErrorLookup(_formState.errors, _fields, name);\n const errorLookupResult = schemaErrorLookup(errors, _fields, previousErrorLookupResult.name || name);\n error = errorLookupResult.error;\n name = errorLookupResult.name;\n isValid = isEmptyObject(errors);\n }\n }\n else {\n _updateIsValidating([name], true);\n error = (await validateField(field, _names.disabled, _formValues, shouldDisplayAllAssociatedErrors, _options.shouldUseNativeValidation))[name];\n _updateIsValidating([name]);\n _updateIsFieldValueUpdated(fieldValue);\n if (isFieldValueUpdated) {\n if (error) {\n isValid = false;\n }\n else if (_proxyFormState.isValid ||\n _proxySubscribeFormState.isValid) {\n isValid = await executeBuiltInValidation({\n fields: _fields,\n onlyCheckValid: true,\n name: name,\n eventType: event.type,\n });\n }\n }\n }\n if (isFieldValueUpdated) {\n field._f.deps &&\n (!Array.isArray(field._f.deps) || field._f.deps.length > 0) &&\n trigger(field._f.deps);\n shouldRenderByError(name, isValid, error, fieldState);\n }\n }\n };\n const _focusInput = (ref, key) => {\n if (get(_formState.errors, key) && ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n };\n const trigger = async (name, options = {}) => {\n let isValid;\n let validationResult;\n const fieldNames = convertToArrayPayload(name);\n if (_options.resolver) {\n const errors = await executeSchemaAndUpdateState(isUndefined(name) ? name : fieldNames);\n isValid = isEmptyObject(errors);\n validationResult = name\n ? !fieldNames.some((name) => get(errors, name))\n : isValid;\n }\n else if (name) {\n validationResult = (await Promise.all(fieldNames.map(async (fieldName) => {\n const field = get(_fields, fieldName);\n return await executeBuiltInValidation({\n fields: field && field._f ? { [fieldName]: field } : field,\n eventType: EVENTS.TRIGGER,\n });\n }))).every(Boolean);\n !(!validationResult && !_formState.isValid) && _setValid();\n }\n else {\n validationResult = isValid = await executeBuiltInValidation({\n fields: _fields,\n name,\n eventType: EVENTS.TRIGGER,\n });\n }\n _subjects.state.next({\n ...(!isString(name) ||\n ((_proxyFormState.isValid || _proxySubscribeFormState.isValid) &&\n isValid !== _formState.isValid)\n ? {}\n : { name }),\n ...(_options.resolver || !name ? { isValid } : {}),\n errors: _formState.errors,\n });\n options.shouldFocus &&\n !validationResult &&\n iterateFieldsByAction(_fields, _focusInput, name ? fieldNames : _names.mount);\n return validationResult;\n };\n const getValues = (fieldNames, config) => {\n let values = {\n ...(_state.mount ? _formValues : _defaultValues),\n };\n if (config) {\n values = extractFormValues(config.dirtyFields ? _formState.dirtyFields : _formState.touchedFields, values);\n }\n return isUndefined(fieldNames)\n ? values\n : isString(fieldNames)\n ? get(values, fieldNames)\n : fieldNames.map((name) => get(values, name));\n };\n const getFieldState = (name, formState) => ({\n invalid: !!get((formState || _formState).errors, name),\n isDirty: !!get((formState || _formState).dirtyFields, name),\n error: get((formState || _formState).errors, name),\n isValidating: !!get(_formState.validatingFields, name),\n isTouched: !!get((formState || _formState).touchedFields, name),\n });\n const clearErrors = (name) => {\n const names = name ? convertToArrayPayload(name) : undefined;\n names === null || names === void 0 ? void 0 : names.forEach((inputName) => unset(_formState.errors, inputName));\n if (names) {\n // Emit for each cleared field with the field name so that\n // shouldSubscribeByName can filter and avoid broad re-renders\n names.forEach((inputName) => {\n _subjects.state.next({\n name: inputName,\n errors: _formState.errors,\n });\n });\n }\n else {\n // Clear all errors - emit without name to notify all subscribers\n _subjects.state.next({\n errors: {},\n });\n }\n };\n const setError = (name, error, options) => {\n const ref = (get(_fields, name, { _f: {} })._f || {}).ref;\n const currentError = get(_formState.errors, name) || {};\n // Don't override existing error messages elsewhere in the object tree.\n const { ref: currentRef, message, type, ...restOfErrorTree } = currentError;\n set(_formState.errors, name, {\n ...restOfErrorTree,\n ...error,\n ref,\n });\n _subjects.state.next({\n name,\n errors: _formState.errors,\n isValid: false,\n });\n options && options.shouldFocus && ref && ref.focus && ref.focus();\n };\n const watch = (name, defaultValue) => isFunction(name)\n ? _subjects.state.subscribe({\n next: (payload) => 'values' in payload &&\n name(payload.values || _getWatch(undefined, defaultValue), payload),\n })\n : _getWatch(name, defaultValue, true);\n const _subscribe = (props) => _subjects.state.subscribe({\n next: (formState) => {\n if (shouldSubscribeByName(props.name, formState.name, props.exact) &&\n shouldRenderFormState(formState, props.formState || _proxyFormState, _setFormState, props.reRenderRoot)) {\n const snapshot = { ..._formValues };\n props.callback({\n values: snapshot,\n ..._formState,\n ...formState,\n defaultValues: _defaultValues,\n });\n }\n },\n }).unsubscribe;\n const subscribe = (props) => {\n _state.mount = true;\n _proxySubscribeFormState = {\n ..._proxySubscribeFormState,\n ...props.formState,\n };\n return _subscribe({\n ...props,\n formState: {\n ...defaultProxyFormState,\n ...props.formState,\n },\n });\n };\n const unregister = (name, options = {}) => {\n for (const fieldName of name ? convertToArrayPayload(name) : _names.mount) {\n _names.mount.delete(fieldName);\n _names.array.delete(fieldName);\n if (!options.keepValue) {\n unset(_fields, fieldName);\n unset(_formValues, fieldName);\n }\n !options.keepError && unset(_formState.errors, fieldName);\n !options.keepDirty && unset(_formState.dirtyFields, fieldName);\n !options.keepTouched && unset(_formState.touchedFields, fieldName);\n !options.keepIsValidating &&\n unset(_formState.validatingFields, fieldName);\n !_options.shouldUnregister &&\n !options.keepDefaultValue &&\n unset(_defaultValues, fieldName);\n }\n _subjects.state.next({\n values: cloneObject(_formValues),\n });\n _subjects.state.next({\n ..._formState,\n ...(!options.keepDirty ? {} : { isDirty: _getDirty() }),\n });\n !options.keepIsValid && _setValid();\n };\n const _setDisabledField = ({ disabled, name, }) => {\n if ((isBoolean(disabled) && _state.mount) ||\n !!disabled ||\n _names.disabled.has(name)) {\n const wasDisabled = _names.disabled.has(name);\n const isDisabled = !!disabled;\n const disabledStateChanged = wasDisabled !== isDisabled;\n disabled ? _names.disabled.add(name) : _names.disabled.delete(name);\n disabledStateChanged && _state.mount && !_state.action && _setValid();\n }\n };\n const register = (name, options = {}) => {\n let field = get(_fields, name);\n const disabledIsDefined = isBoolean(options.disabled) || isBoolean(_options.disabled);\n const shouldRevalidateRemount = !_names.registerName.has(name) && field && field._f && !field._f.mount;\n set(_fields, name, {\n ...(field || {}),\n _f: {\n ...(field && field._f ? field._f : { ref: { name } }),\n name,\n mount: true,\n ...options,\n },\n });\n _names.mount.add(name);\n if (field && !shouldRevalidateRemount) {\n _setDisabledField({\n disabled: isBoolean(options.disabled)\n ? options.disabled\n : _options.disabled,\n name,\n });\n }\n else {\n updateValidAndValue(name, true, options.value);\n }\n return {\n ...(disabledIsDefined\n ? { disabled: options.disabled || _options.disabled }\n : {}),\n ...(_options.progressive\n ? {\n required: !!options.required,\n min: getRuleValue(options.min),\n max: getRuleValue(options.max),\n minLength: getRuleValue(options.minLength),\n maxLength: getRuleValue(options.maxLength),\n pattern: getRuleValue(options.pattern),\n }\n : {}),\n name,\n onChange,\n onBlur: onChange,\n ref: (ref) => {\n if (ref) {\n _names.registerName.add(name);\n register(name, options);\n _names.registerName.delete(name);\n field = get(_fields, name);\n const fieldRef = isUndefined(ref.value)\n ? ref.querySelectorAll\n ? ref.querySelectorAll('input,select,textarea')[0] || ref\n : ref\n : ref;\n const radioOrCheckbox = isRadioOrCheckbox(fieldRef);\n const refs = field._f.refs || [];\n if (radioOrCheckbox\n ? refs.find((option) => option === fieldRef)\n : fieldRef === field._f.ref) {\n return;\n }\n set(_fields, name, {\n _f: {\n ...field._f,\n ...(radioOrCheckbox\n ? {\n refs: [\n ...refs.filter(live),\n fieldRef,\n ...(Array.isArray(get(_defaultValues, name)) ? [{}] : []),\n ],\n ref: { type: fieldRef.type, name },\n }\n : { ref: fieldRef }),\n },\n });\n updateValidAndValue(name, false, undefined, fieldRef);\n }\n else {\n field = get(_fields, name, {});\n if (field._f) {\n field._f.mount = false;\n }\n (_options.shouldUnregister || options.shouldUnregister) &&\n !(isNameInFieldArray(_names.array, name) && _state.action) &&\n _names.unMount.add(name);\n }\n },\n };\n };\n const _focusError = () => _options.shouldFocusError &&\n iterateFieldsByAction(_fields, _focusInput, _names.mount);\n const _disableForm = (disabled) => {\n if (isBoolean(disabled)) {\n _subjects.state.next({ disabled });\n iterateFieldsByAction(_fields, (ref, name) => {\n const currentField = get(_fields, name);\n if (currentField) {\n ref.disabled = currentField._f.disabled || disabled;\n if (Array.isArray(currentField._f.refs)) {\n currentField._f.refs.forEach((inputRef) => {\n inputRef.disabled = currentField._f.disabled || disabled;\n });\n }\n }\n }, 0, false);\n }\n };\n const handleSubmit = (onValid, onInvalid) => async (e) => {\n let onValidError = undefined;\n if (e) {\n e.preventDefault && e.preventDefault();\n e.persist &&\n e.persist();\n }\n let fieldValues = cloneObject(_formValues);\n _subjects.state.next({\n isSubmitting: true,\n });\n if (_options.resolver) {\n const { errors, values } = await _runSchema();\n _updateIsValidating();\n _formState.errors = errors;\n fieldValues = cloneObject(values);\n }\n else {\n await executeBuiltInValidation({\n fields: _fields,\n eventType: EVENTS.SUBMIT,\n });\n }\n if (_names.disabled.size) {\n for (const name of _names.disabled) {\n unset(fieldValues, name);\n }\n }\n unset(_formState.errors, ROOT_ERROR_TYPE);\n if (isEmptyObject(_formState.errors)) {\n _subjects.state.next({\n errors: {},\n });\n try {\n await onValid(fieldValues, e);\n }\n catch (error) {\n onValidError = error;\n }\n }\n else {\n if (onInvalid) {\n await onInvalid({ ..._formState.errors }, e);\n }\n _focusError();\n setTimeout(_focusError);\n }\n _subjects.state.next({\n isSubmitted: true,\n isSubmitting: false,\n isSubmitSuccessful: isEmptyObject(_formState.errors) && !onValidError,\n submitCount: _formState.submitCount + 1,\n errors: _formState.errors,\n });\n if (onValidError) {\n throw onValidError;\n }\n };\n const resetField = (name, options = {}) => {\n if (get(_fields, name)) {\n if (isUndefined(options.defaultValue)) {\n setValue(name, cloneObject(get(_defaultValues, name)));\n }\n else {\n setValue(name, options.defaultValue);\n set(_defaultValues, name, cloneObject(options.defaultValue));\n }\n if (!options.keepTouched) {\n unset(_formState.touchedFields, name);\n }\n if (!options.keepDirty) {\n unset(_formState.dirtyFields, name);\n _formState.isDirty = options.defaultValue\n ? _getDirty(name, cloneObject(get(_defaultValues, name)))\n : _getDirty();\n }\n if (!options.keepError) {\n unset(_formState.errors, name);\n _proxyFormState.isValid && _setValid();\n }\n _subjects.state.next({ ..._formState });\n }\n };\n const _reset = (formValues, keepStateOptions = {}) => {\n const updatedValues = formValues ? cloneObject(formValues) : _defaultValues;\n const cloneUpdatedValues = cloneObject(updatedValues);\n const isEmptyResetValues = isEmptyObject(formValues);\n const values = isEmptyResetValues ? _defaultValues : cloneUpdatedValues;\n if (!keepStateOptions.keepDefaultValues) {\n _defaultValues = updatedValues;\n }\n if (!keepStateOptions.keepValues) {\n if (keepStateOptions.keepDirtyValues) {\n const fieldsToCheck = new Set([\n ..._names.mount,\n ...Object.keys(getDirtyFields(_defaultValues, _formValues)),\n ]);\n for (const fieldName of Array.from(fieldsToCheck)) {\n const isDirty = get(_formState.dirtyFields, fieldName);\n const existingValue = get(_formValues, fieldName);\n const newValue = get(values, fieldName);\n if (isDirty && !isUndefined(existingValue)) {\n set(values, fieldName, existingValue);\n }\n else if (!isDirty && !isUndefined(newValue)) {\n setValue(fieldName, newValue);\n }\n }\n }\n else {\n if (isWeb && isUndefined(formValues)) {\n for (const name of _names.mount) {\n const field = get(_fields, name);\n if (field && field._f) {\n const fieldReference = Array.isArray(field._f.refs)\n ? field._f.refs[0]\n : field._f.ref;\n if (isHTMLElement(fieldReference)) {\n const form = fieldReference.closest('form');\n if (form) {\n form.reset();\n break;\n }\n }\n }\n }\n }\n if (keepStateOptions.keepFieldsRef) {\n for (const fieldName of _names.mount) {\n setValue(fieldName, get(values, fieldName));\n }\n }\n else {\n _fields = {};\n }\n }\n _formValues = _options.shouldUnregister\n ? keepStateOptions.keepDefaultValues\n ? cloneObject(_defaultValues)\n : {}\n : cloneObject(values);\n _subjects.array.next({\n values: { ...values },\n });\n _subjects.state.next({\n values: { ...values },\n });\n }\n _names = {\n mount: keepStateOptions.keepDirtyValues ? _names.mount : new Set(),\n unMount: new Set(),\n array: new Set(),\n registerName: new Set(),\n disabled: new Set(),\n watch: new Set(),\n watchAll: false,\n focus: '',\n };\n _state.mount =\n !_proxyFormState.isValid ||\n !!keepStateOptions.keepIsValid ||\n !!keepStateOptions.keepDirtyValues ||\n (!_options.shouldUnregister && !isEmptyObject(values));\n _state.watch = !!_options.shouldUnregister;\n _state.keepIsValid = !!keepStateOptions.keepIsValid;\n _state.action = false;\n // Clear errors synchronously to prevent validation errors on subsequent submissions\n // This fixes the issue where form.reset() causes validation errors on subsequent\n // submissions in Next.js 16 with Server Actions\n if (!keepStateOptions.keepErrors) {\n _formState.errors = {};\n }\n _subjects.state.next({\n submitCount: keepStateOptions.keepSubmitCount\n ? _formState.submitCount\n : 0,\n isDirty: isEmptyResetValues\n ? false\n : keepStateOptions.keepDirty\n ? _formState.isDirty\n : !!(keepStateOptions.keepDefaultValues &&\n !deepEqual(formValues, _defaultValues)),\n isSubmitted: keepStateOptions.keepIsSubmitted\n ? _formState.isSubmitted\n : false,\n dirtyFields: isEmptyResetValues\n ? {}\n : keepStateOptions.keepDirtyValues\n ? keepStateOptions.keepDefaultValues && _formValues\n ? getDirtyFields(_defaultValues, _formValues)\n : _formState.dirtyFields\n : keepStateOptions.keepDefaultValues && formValues\n ? getDirtyFields(_defaultValues, formValues)\n : keepStateOptions.keepDirty\n ? _formState.dirtyFields\n : {},\n touchedFields: keepStateOptions.keepTouched\n ? _formState.touchedFields\n : {},\n errors: keepStateOptions.keepErrors ? _formState.errors : {},\n isSubmitSuccessful: keepStateOptions.keepIsSubmitSuccessful\n ? _formState.isSubmitSuccessful\n : false,\n isSubmitting: false,\n defaultValues: _defaultValues,\n });\n };\n const reset = (formValues, keepStateOptions) => _reset(isFunction(formValues)\n ? formValues(_formValues)\n : formValues, { ..._options.resetOptions, ...keepStateOptions });\n const setFocus = (name, options = {}) => {\n const field = get(_fields, name);\n const fieldReference = field && field._f;\n if (fieldReference) {\n const fieldRef = fieldReference.refs\n ? fieldReference.refs[0]\n : fieldReference.ref;\n if (fieldRef.focus) {\n // Use setTimeout to ensure focus happens after any pending state updates\n // This fixes the issue where setFocus doesn't work immediately after setError\n setTimeout(() => {\n fieldRef.focus();\n options.shouldSelect &&\n isFunction(fieldRef.select) &&\n fieldRef.select();\n });\n }\n }\n };\n const _setFormState = (updatedFormState) => {\n _formState = {\n ..._formState,\n ...updatedFormState,\n };\n };\n const _resetDefaultValues = () => isFunction(_options.defaultValues) &&\n _options.defaultValues().then((values) => {\n reset(values, _options.resetOptions);\n _subjects.state.next({\n isLoading: false,\n });\n });\n const methods = {\n control: {\n register,\n unregister,\n getFieldState,\n handleSubmit,\n setError,\n _subscribe,\n _runSchema,\n _updateIsValidating,\n _focusError,\n _getWatch,\n _getDirty,\n _setValid,\n _setFieldArray,\n _setDisabledField,\n _setErrors,\n _getFieldArray,\n _reset,\n _resetDefaultValues,\n _removeUnmounted,\n _disableForm,\n _subjects,\n _proxyFormState,\n get _fields() {\n return _fields;\n },\n get _formValues() {\n return _formValues;\n },\n get _state() {\n return _state;\n },\n set _state(value) {\n _state = value;\n },\n get _defaultValues() {\n return _defaultValues;\n },\n get _names() {\n return _names;\n },\n set _names(value) {\n _names = value;\n },\n get _formState() {\n return _formState;\n },\n get _options() {\n return _options;\n },\n set _options(value) {\n _options = {\n ..._options,\n ...value,\n };\n },\n },\n subscribe,\n trigger,\n register,\n handleSubmit,\n watch,\n setValue,\n setValues,\n getValues,\n reset,\n resetField,\n clearErrors,\n unregister,\n setError,\n setFocus,\n getFieldState,\n };\n return {\n ...methods,\n formControl: methods,\n };\n}\n\nvar generateId = () => {\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID();\n }\n const d = typeof performance === 'undefined' ? Date.now() : performance.now() * 1000;\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = ((Math.random() * 16 + d) % 16) | 0;\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\n });\n};\n\nvar getFocusFieldName = (name, index, options = {}) => options.shouldFocus || isUndefined(options.shouldFocus)\n ? options.focusName ||\n `${name}.${isUndefined(options.focusIndex) ? index : options.focusIndex}.`\n : '';\n\nvar appendAt = (data, value) => [\n ...data,\n ...convertToArrayPayload(value),\n];\n\nvar fillEmptyArray = (value) => Array.isArray(value) ? value.map(() => undefined) : undefined;\n\nfunction insert(data, index, value) {\n return [\n ...data.slice(0, index),\n ...convertToArrayPayload(value),\n ...data.slice(index),\n ];\n}\n\nvar moveArrayAt = (data, from, to) => {\n if (!Array.isArray(data)) {\n return [];\n }\n if (isUndefined(data[to])) {\n data[to] = undefined;\n }\n data.splice(to, 0, data.splice(from, 1)[0]);\n return data;\n};\n\nvar prependAt = (data, value) => [\n ...convertToArrayPayload(value),\n ...convertToArrayPayload(data),\n];\n\nfunction removeAtIndexes(data, indexes) {\n let i = 0;\n const temp = [...data];\n for (const index of indexes) {\n temp.splice(index - i, 1);\n i++;\n }\n return compact(temp).length ? temp : [];\n}\nvar removeArrayAt = (data, index) => isUndefined(index)\n ? []\n : removeAtIndexes(data, convertToArrayPayload(index).sort((a, b) => a - b));\n\nvar swapArrayAt = (data, indexA, indexB) => {\n [data[indexA], data[indexB]] = [data[indexB], data[indexA]];\n};\n\nvar updateAt = (fieldValues, index, value) => {\n fieldValues[index] = value;\n return fieldValues;\n};\n\n/**\n * A custom hook that exposes convenient methods to perform operations with a list of dynamic inputs that need to be appended, updated, removed etc. • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn) • [Video](https://youtu.be/4MrbfGSFY2A)\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/usefieldarray) • [Demo](https://codesandbox.io/s/react-hook-form-usefieldarray-ssugn)\n *\n * @param props - useFieldArray props\n *\n * @returns methods - functions to manipulate with the Field Arrays (dynamic inputs) {@link UseFieldArrayReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, control, handleSubmit, reset, trigger, setError } = useForm({\n * defaultValues: {\n * test: []\n * }\n * });\n * const { fields, append } = useFieldArray({\n * control,\n * name: \"test\"\n * });\n *\n * return (\n * <form onSubmit={handleSubmit(data => console.log(data))}>\n * {fields.map((item, index) => (\n * <input key={item.id} {...register(`test.${index}.firstName`)} />\n * ))}\n * <button type=\"button\" onClick={() => append({ firstName: \"bill\" })}>\n * append\n * </button>\n * <input type=\"submit\" />\n * </form>\n * );\n * }\n * ```\n */\nfunction useFieldArray(props) {\n const formControl = useFormControlContext();\n const { control = formControl, name, keyName = 'id', shouldUnregister, rules, } = props;\n const [fields, setFields] = react__WEBPACK_IMPORTED_MODULE_0__.useState(control._getFieldArray(name));\n const ids = react__WEBPACK_IMPORTED_MODULE_0__.useRef(control._getFieldArray(name).map(generateId));\n const _actioned = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n control._names.array.add(name);\n react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => rules &&\n fields.length >= 0 &&\n control.register(name, rules), [control, name, fields.length, rules]);\n useIsomorphicLayoutEffect(() => control._subjects.array.subscribe({\n next: ({ values, name: fieldArrayName, }) => {\n if (fieldArrayName === name || !fieldArrayName) {\n const fieldValues = get(values, name);\n if (Array.isArray(fieldValues)) {\n setFields(fieldValues);\n ids.current = fieldValues.map(generateId);\n }\n }\n },\n }).unsubscribe, [control, name]);\n const updateValues = react__WEBPACK_IMPORTED_MODULE_0__.useCallback((updatedFieldArrayValues) => {\n _actioned.current = true;\n control._setFieldArray(name, updatedFieldArrayValues);\n }, [control, name]);\n const append = (value, options) => {\n const appendValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = appendAt(control._getFieldArray(name), appendValue);\n control._names.focus = getFocusFieldName(name, updatedFieldArrayValues.length - 1, options);\n ids.current = appendAt(ids.current, appendValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, appendAt, {\n argA: fillEmptyArray(value),\n });\n };\n const prepend = (value, options) => {\n const prependValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = prependAt(control._getFieldArray(name), prependValue);\n control._names.focus = getFocusFieldName(name, 0, options);\n ids.current = prependAt(ids.current, prependValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, prependAt, {\n argA: fillEmptyArray(value),\n });\n };\n const remove = (index) => {\n const updatedFieldArrayValues = removeArrayAt(control._getFieldArray(name), index);\n ids.current = removeArrayAt(ids.current, index);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n !Array.isArray(get(control._fields, name)) &&\n set(control._fields, name, undefined);\n control._setFieldArray(name, updatedFieldArrayValues, removeArrayAt, {\n argA: index,\n });\n };\n const insert$1 = (index, value, options) => {\n const insertValue = convertToArrayPayload(cloneObject(value));\n const updatedFieldArrayValues = insert(control._getFieldArray(name), index, insertValue);\n control._names.focus = getFocusFieldName(name, index, options);\n ids.current = insert(ids.current, index, insertValue.map(generateId));\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, insert, {\n argA: index,\n argB: fillEmptyArray(value),\n });\n };\n const swap = (indexA, indexB) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n swapArrayAt(updatedFieldArrayValues, indexA, indexB);\n swapArrayAt(ids.current, indexA, indexB);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, swapArrayAt, {\n argA: indexA,\n argB: indexB,\n }, false);\n };\n const move = (from, to) => {\n const updatedFieldArrayValues = control._getFieldArray(name);\n moveArrayAt(updatedFieldArrayValues, from, to);\n moveArrayAt(ids.current, from, to);\n updateValues(updatedFieldArrayValues);\n setFields(updatedFieldArrayValues);\n control._setFieldArray(name, updatedFieldArrayValues, moveArrayAt, {\n argA: from,\n argB: to,\n }, false);\n };\n const update = (index, value) => {\n const updateValue = cloneObject(value);\n const updatedFieldArrayValues = updateAt(control._getFieldArray(name), index, updateValue);\n ids.current = [...updatedFieldArrayValues].map((item, i) => !item || i === index ? generateId() : ids.current[i]);\n updateValues(updatedFieldArrayValues);\n setFields([...updatedFieldArrayValues]);\n control._setFieldArray(name, updatedFieldArrayValues, updateAt, {\n argA: index,\n argB: updateValue,\n }, true, false);\n };\n const replace = (value) => {\n const updatedFieldArrayValues = convertToArrayPayload(cloneObject(value));\n ids.current = updatedFieldArrayValues.map(generateId);\n updateValues([...updatedFieldArrayValues]);\n setFields([...updatedFieldArrayValues]);\n control._setFieldArray(name, [...updatedFieldArrayValues], (data) => data, {}, true, false);\n };\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n control._state.action = false;\n isWatched(name, control._names) &&\n control._subjects.state.next({\n ...control._formState,\n });\n const validationModes = getValidationModes(control._options.mode);\n if (_actioned.current &&\n (!validationModes.isOnSubmit || control._formState.isSubmitted) &&\n !getValidationModes(control._options.reValidateMode).isOnSubmit &&\n !validationModes.isOnBlur) {\n if (control._options.resolver) {\n control._runSchema([name]).then((result) => {\n control._updateIsValidating([name]);\n const error = get(result.errors, name);\n const existingError = get(control._formState.errors, name);\n if (existingError\n ? (!error && existingError.type) ||\n (error &&\n (existingError.type !== error.type ||\n existingError.message !== error.message))\n : error && error.type) {\n error\n ? set(control._formState.errors, name, error)\n : unset(control._formState.errors, name);\n control._subjects.state.next({\n errors: control._formState.errors,\n });\n }\n });\n }\n else {\n const field = get(control._fields, name);\n if (field &&\n field._f &&\n !(getValidationModes(control._options.reValidateMode).isOnSubmit &&\n getValidationModes(control._options.mode).isOnSubmit)) {\n validateField(field, control._names.disabled, control._formValues, control._options.criteriaMode === VALIDATION_MODE.all, control._options.shouldUseNativeValidation, true).then((error) => !isEmptyObject(error) &&\n control._subjects.state.next({\n errors: updateFieldArrayRootError(control._formState.errors, error, name),\n }));\n }\n }\n }\n control._subjects.state.next({\n name,\n values: cloneObject(control._formValues),\n });\n control._names.focus &&\n iterateFieldsByAction(control._fields, (ref, key) => {\n if (control._names.focus &&\n key.startsWith(control._names.focus) &&\n ref.focus) {\n ref.focus();\n return 1;\n }\n return;\n });\n control._names.focus = '';\n control._setValid();\n _actioned.current = false;\n }, [fields, name, control]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n !get(control._formValues, name) && control._setFieldArray(name);\n return () => {\n const shouldKeepFieldArrayValues = !(control._options.shouldUnregister || shouldUnregister);\n const updateMounted = (name, value) => {\n const field = get(control._fields, name);\n if (field && field._f) {\n field._f.mount = value;\n }\n };\n if (_actioned.current && shouldKeepFieldArrayValues) {\n control._subjects.state.next({\n name,\n values: cloneObject(control._formValues),\n });\n }\n shouldKeepFieldArrayValues\n ? updateMounted(name, false)\n : control.unregister(name);\n };\n }, [name, control, keyName, shouldUnregister]);\n return {\n swap: react__WEBPACK_IMPORTED_MODULE_0__.useCallback(swap, [updateValues, name, control]),\n move: react__WEBPACK_IMPORTED_MODULE_0__.useCallback(move, [updateValues, name, control]),\n prepend: react__WEBPACK_IMPORTED_MODULE_0__.useCallback(prepend, [updateValues, name, control]),\n append: react__WEBPACK_IMPORTED_MODULE_0__.useCallback(append, [updateValues, name, control]),\n remove: react__WEBPACK_IMPORTED_MODULE_0__.useCallback(remove, [updateValues, name, control]),\n insert: react__WEBPACK_IMPORTED_MODULE_0__.useCallback(insert$1, [updateValues, name, control]),\n update: react__WEBPACK_IMPORTED_MODULE_0__.useCallback(update, [updateValues, name, control]),\n replace: react__WEBPACK_IMPORTED_MODULE_0__.useCallback(replace, [updateValues, name, control]),\n fields: react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => fields.map((field, index) => ({\n ...field,\n [keyName]: ids.current[index] || generateId(),\n })), [fields, keyName]),\n };\n}\n\n/**\n * Custom hook to manage the entire form.\n *\n * @remarks\n * [API](https://react-hook-form.com/docs/useform) • [Demo](https://codesandbox.io/s/react-hook-form-get-started-ts-5ksmm) • [Video](https://www.youtube.com/watch?v=RkXv4AXXC_4)\n *\n * @param props - form configuration and validation parameters.\n *\n * @returns methods - individual functions to manage the form state. {@link UseFormReturn}\n *\n * @example\n * ```tsx\n * function App() {\n * const { register, handleSubmit, watch, formState: { errors } } = useForm();\n * const onSubmit = data => console.log(data);\n *\n * console.log(watch(\"example\"));\n *\n * return (\n * <form onSubmit={handleSubmit(onSubmit)}>\n * <input defaultValue=\"test\" {...register(\"example\")} />\n * <input {...register(\"exampleRequired\", { required: true })} />\n * {errors.exampleRequired && <span>This field is required</span>}\n * <button>Submit</button>\n * </form>\n * );\n * }\n * ```\n */\nfunction useForm(props = {}) {\n const _formControl = react__WEBPACK_IMPORTED_MODULE_0__.useRef(undefined);\n const _values = react__WEBPACK_IMPORTED_MODULE_0__.useRef(undefined);\n const [formState, updateFormState] = react__WEBPACK_IMPORTED_MODULE_0__.useState(() => ({\n ...cloneObject(DEFAULT_FORM_STATE),\n isLoading: isFunction(props.defaultValues),\n errors: props.errors || {},\n disabled: props.disabled || false,\n defaultValues: isFunction(props.defaultValues)\n ? undefined\n : props.defaultValues,\n }));\n if (!_formControl.current) {\n if (props.formControl) {\n _formControl.current = {\n ...props.formControl,\n formState,\n };\n if (props.defaultValues && !isFunction(props.defaultValues)) {\n props.formControl.reset(props.defaultValues, props.resetOptions);\n }\n }\n else {\n const { formControl, ...rest } = createFormControl(props);\n _formControl.current = {\n ...rest,\n formState,\n };\n }\n }\n const control = _formControl.current.control;\n control._options = props;\n useIsomorphicLayoutEffect(() => {\n const sub = control._subscribe({\n formState: control._proxyFormState,\n callback: () => updateFormState({ ...control._formState }),\n reRenderRoot: true,\n });\n updateFormState((data) => ({\n ...data,\n isReady: true,\n }));\n control._formState.isReady = true;\n return sub;\n }, [control]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => control._disableForm(props.disabled), [control, props.disabled]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n if (props.mode) {\n control._options.mode = props.mode;\n }\n if (props.reValidateMode) {\n control._options.reValidateMode = props.reValidateMode;\n }\n }, [control, props.mode, props.reValidateMode]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n if (props.errors) {\n control._setErrors(props.errors);\n control._focusError();\n }\n }, [control, props.errors]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n props.shouldUnregister &&\n control._subjects.state.next({\n values: control._getWatch(),\n });\n }, [control, props.shouldUnregister]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n if (control._proxyFormState.isDirty) {\n const isDirty = control._getDirty();\n if (isDirty !== formState.isDirty) {\n control._subjects.state.next({\n isDirty,\n });\n }\n }\n }, [control, formState.isDirty]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n var _a;\n if (props.values && !deepEqual(props.values, _values.current)) {\n control._reset(props.values, {\n keepFieldsRef: true,\n ...control._options.resetOptions,\n });\n if (!((_a = control._options.resetOptions) === null || _a === void 0 ? void 0 : _a.keepIsValid)) {\n control._setValid();\n }\n _values.current = props.values;\n updateFormState((state) => ({ ...state }));\n }\n else {\n control._resetDefaultValues();\n }\n }, [control, props.values]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect(() => {\n if (!control._state.mount) {\n control._setValid();\n control._state.mount = true;\n }\n if (control._state.watch) {\n control._state.watch = false;\n control._subjects.state.next({ ...control._formState });\n }\n control._removeUnmounted();\n });\n _formControl.current.formState = react__WEBPACK_IMPORTED_MODULE_0__.useMemo(() => getProxyFormState(formState, control), [control, formState]);\n return _formControl.current;\n}\n\n/**\n * Watch component that subscribes to form field changes and re-renders when watched fields update.\n *\n * @param control - The form control object from useForm\n * @param name - Can be field name, array of field names, or undefined to watch the entire form\n * @param disabled - Disable subscription\n * @param exact - Whether to watch exact field names or not\n * @param defaultValue - The default value to use if the field is not yet set\n * @param compute - Function to compute derived values from watched fields\n * @param render - The function that receives watched values and returns ReactNode\n * @returns The result of calling render function with watched values\n *\n * @example\n * The `Watch` component only re-render when the values of `foo`, `bar`, and `baz.qux` change.\n * The types of `foo`, `bar`, and `baz.qux` are precisely inferred.\n *\n * ```tsx\n * const { control } = useForm();\n *\n * <Watch\n * control={control}\n * names={['foo', 'bar', 'baz.qux']}\n * render={([foo, bar, baz_qux]) => <div>{foo}{bar}{baz_qux}</div>}\n * />\n * ```\n */\nconst Watch = (props) => props.render(useWatch({ name: props.names, ...props }));\n\n\n//# sourceMappingURL=index.esm.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9yZWFjdC1ob29rLWZvcm0vZGlzdC9pbmRleC5lc20ubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMEI7O0FBRTFCOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGdEQUFtQjtBQUNsRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyw2Q0FBZ0I7O0FBRXBEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQSxrRUFB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QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtHQUFrRztBQUNsRztBQUNBO0FBQ0EseUVBQXlFO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHNCQUFzQjtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNEJBQTRCO0FBQzVCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0NBQWdDLHdDQUF3QztBQUN4RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxPQUFPO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isc0JBQXNCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUJBQXlCLFVBQVU7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxZQUFZLHFCQUFxQjtBQUNqQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWSxzR0FBc0c7QUFDbEg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLGlCQUFpQjtBQUNqQyxnQkFBZ0I7QUFDaEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLCtCQUErQjtBQUMvQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQixtQkFBbUI7QUFDbkIsd0JBQXdCO0FBQ3hCO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUNBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQyxlQUFlO0FBQzlEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtB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QUNBLEtBQUs7QUFDTCxJQUFJLDRDQUFlO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQ0FBMEMsVUFBVTtBQUNwRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxJQUFJLDRDQUFlO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJDQUEyQyx1QkFBdUI7QUFDbEU7QUFDQTtBQUNBLEtBQUs7QUFDTCxxQ0FBcUMsMENBQWE7QUFDbEQ7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxVQUFVO0FBQ3JCO0FBQ0E7QUFDQSxjQUFjO0FBQ2QsWUFBWTtBQUNaLGFBQWEsK0JBQStCLEtBQUssS0FBSyxRQUFRO0FBQzlEO0FBQ0E7QUFDQTtBQUNBLGlEQUFpRCw2QkFBNkI7O0FBRWlIO0FBQy9MIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL3JlYWN0LWhvb2stZm9ybS9kaXN0L2luZGV4LmVzbS5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcblxudmFyIGlzQ2hlY2tCb3hJbnB1dCA9IChlbGVtZW50KSA9PiBlbGVtZW50LnR5cGUgPT09ICdjaGVja2JveCc7XG5cbnZhciBpc0RhdGVPYmplY3QgPSAodmFsdWUpID0+IHZhbHVlIGluc3RhbmNlb2YgRGF0ZTtcblxudmFyIGlzTnVsbE9yVW5kZWZpbmVkID0gKHZhbHVlKSA9PiB2YWx1ZSA9PSBudWxsO1xuXG5jb25zdCBpc09iamVjdFR5cGUgPSAodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG52YXIgaXNPYmplY3QgPSAodmFsdWUpID0+ICFpc051bGxPclVuZGVmaW5lZCh2YWx1ZSkgJiZcbiAgICAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiZcbiAgICBpc09iamVjdFR5cGUodmFsdWUpICYmXG4gICAgIWlzRGF0ZU9iamVjdCh2YWx1ZSk7XG5cbnZhciBnZXRFdmVudFZhbHVlID0gKGV2ZW50KSA9PiBpc09iamVjdChldmVudCkgJiYgZXZlbnQudGFyZ2V0XG4gICAgPyBpc0NoZWNrQm94SW5wdXQoZXZlbnQudGFyZ2V0KVxuICAgICAgICA/IGV2ZW50LnRhcmdldC5jaGVja2VkXG4gICAgICAgIDogZXZlbnQudGFyZ2V0LnZhbHVlXG4gICAgOiBldmVudDtcblxudmFyIGlzTmFtZUluRmllbGRBcnJheSA9IChuYW1lcywgbmFtZSkgPT4gbmFtZVxuICAgIC5zcGxpdCgnLicpXG4gICAgLnNvbWUoKHBhcnQsIGluZGV4LCBhcnIpID0+ICFpc05hTihOdW1iZXIocGFydCkpICYmIG5hbWVzLmhhcyhhcnIuc2xpY2UoMCwgaW5kZXgpLmpvaW4oJy4nKSkpO1xuXG52YXIgaXNQbGFpbk9iamVjdCA9ICh0ZW1wT2JqZWN0KSA9PiB7XG4gICAgY29uc3QgcHJvdG90eXBlQ29weSA9IHRlbXBPYmplY3QuY29uc3RydWN0b3IgJiYgdGVtcE9iamVjdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gICAgcmV0dXJuIChpc09iamVjdChwcm90b3R5cGVDb3B5KSAmJiBwcm90b3R5cGVDb3B5Lmhhc093blByb3BlcnR5KCdpc1Byb3RvdHlwZU9mJykpO1xufTtcblxudmFyIGlzV2ViID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2Ygd2luZG93LkhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmZ1bmN0aW9uIGNsb25lT2JqZWN0KGRhdGEpIHtcbiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKGRhdGEpO1xuICAgIH1cbiAgICBjb25zdCBpc0ZpbGVMaXN0SW5zdGFuY2UgPSB0eXBlb2YgRmlsZUxpc3QgIT09ICd1bmRlZmluZWQnICYmIGRhdGEgaW5zdGFuY2VvZiBGaWxlTGlzdDtcbiAgICBpZiAoaXNXZWIgJiYgKGRhdGEgaW5zdGFuY2VvZiBCbG9iIHx8IGlzRmlsZUxpc3RJbnN0YW5jZSkpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGRhdGEpO1xuICAgIGlmICghaXNBcnJheSAmJiAhKGlzT2JqZWN0KGRhdGEpICYmIGlzUGxhaW5PYmplY3QoZGF0YSkpKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBjb25zdCBjb3B5ID0gaXNBcnJheSA/IFtdIDogT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2YoZGF0YSkpO1xuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkYXRhLCBrZXkpKSB7XG4gICAgICAgICAgICBjb3B5W2tleV0gPSBjbG9uZU9iamVjdChkYXRhW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb3B5O1xufVxuXG52YXIgaXNLZXkgPSAodmFsdWUpID0+IC9eXFx3KiQvLnRlc3QodmFsdWUpO1xuXG52YXIgaXNVbmRlZmluZWQgPSAodmFsKSA9PiB2YWwgPT09IHVuZGVmaW5lZDtcblxudmFyIGNvbXBhY3QgPSAodmFsdWUpID0+IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUuZmlsdGVyKEJvb2xlYW4pIDogW107XG5cbnZhciBzdHJpbmdUb1BhdGggPSAoaW5wdXQpID0+IGNvbXBhY3QoaW5wdXQucmVwbGFjZSgvW1wifCddfFxcXS9nLCAnJykuc3BsaXQoL1xcLnxcXFsvKSk7XG5cbnZhciBnZXQgPSAob2JqZWN0LCBwYXRoLCBkZWZhdWx0VmFsdWUpID0+IHtcbiAgICBpZiAoIXBhdGggfHwgIWlzT2JqZWN0KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgY29uc3QgcGF0aHMgPSBpc0tleShwYXRoKSA/IFtwYXRoXSA6IHN0cmluZ1RvUGF0aChwYXRoKTtcbiAgICBjb25zdCByZXN1bHQgPSBwYXRocy5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgICAgIHJldHVybiBpc051bGxPclVuZGVmaW5lZChyZXN1bHQpID8gdW5kZWZpbmVkIDogcmVzdWx0W2tleV07XG4gICAgfSwgb2JqZWN0KTtcbiAgICByZXR1cm4gaXNVbmRlZmluZWQocmVzdWx0KSB8fCByZXN1bHQgPT09IG9iamVjdFxuICAgICAgICA/IGlzVW5kZWZpbmVkKG9iamVjdFtwYXRoXSlcbiAgICAgICAgICAgID8gZGVmYXVsdFZhbHVlXG4gICAgICAgICAgICA6IG9iamVjdFtwYXRoXVxuICAgICAgICA6IHJlc3VsdDtcbn07XG5cbnZhciBpc0Jvb2xlYW4gPSAodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xuXG52YXIgaXNGdW5jdGlvbiA9ICh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xuXG52YXIgc2V0ID0gKG9iamVjdCwgcGF0aCwgdmFsdWUpID0+IHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBjb25zdCB0ZW1wUGF0aCA9IGlzS2V5KHBhdGgpID8gW3BhdGhdIDogc3RyaW5nVG9QYXRoKHBhdGgpO1xuICAgIGNvbnN0IGxlbmd0aCA9IHRlbXBQYXRoLmxlbmd0aDtcbiAgICBjb25zdCBsYXN0SW5kZXggPSBsZW5ndGggLSAxO1xuICAgIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRlbXBQYXRoW2luZGV4XTtcbiAgICAgICAgbGV0IG5ld1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmIChpbmRleCAhPT0gbGFzdEluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBvYmpWYWx1ZSA9IG9iamVjdFtrZXldO1xuICAgICAgICAgICAgbmV3VmFsdWUgPVxuICAgICAgICAgICAgICAgIGlzT2JqZWN0KG9ialZhbHVlKSB8fCBBcnJheS5pc0FycmF5KG9ialZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA/IG9ialZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogIWlzTmFOKCt0ZW1wUGF0aFtpbmRleCArIDFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBbXVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSAnX19wcm90b19fJyB8fCBrZXkgPT09ICdjb25zdHJ1Y3RvcicgfHwga2V5ID09PSAncHJvdG90eXBlJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIG9iamVjdFtrZXldID0gbmV3VmFsdWU7XG4gICAgICAgIG9iamVjdCA9IG9iamVjdFtrZXldO1xuICAgIH1cbn07XG5cbmNvbnN0IEVWRU5UUyA9IHtcbiAgICBCTFVSOiAnYmx1cicsXG4gICAgRk9DVVNfT1VUOiAnZm9jdXNvdXQnLFxuICAgIENIQU5HRTogJ2NoYW5nZScsXG4gICAgU1VCTUlUOiAnc3VibWl0JyxcbiAgICBUUklHR0VSOiAndHJpZ2dlcicsXG4gICAgVkFMSUQ6ICd2YWxpZCcsXG59O1xuY29uc3QgVkFMSURBVElPTl9NT0RFID0ge1xuICAgIG9uQmx1cjogJ29uQmx1cicsXG4gICAgb25DaGFuZ2U6ICdvbkNoYW5nZScsXG4gICAgb25TdWJtaXQ6ICdvblN1Ym1pdCcsXG4gICAgb25Ub3VjaGVkOiAnb25Ub3VjaGVkJyxcbiAgICBhbGw6ICdhbGwnLFxufTtcbmNvbnN0IElOUFVUX1ZBTElEQVRJT05fUlVMRVMgPSB7XG4gICAgbWF4OiAnbWF4JyxcbiAgICBtaW46ICdtaW4nLFxuICAgIG1heExlbmd0aDogJ21heExlbmd0aCcsXG4gICAgbWluTGVuZ3RoOiAnbWluTGVuZ3RoJyxcbiAgICBwYXR0ZXJuOiAncGF0dGVybicsXG4gICAgcmVxdWlyZWQ6ICdyZXF1aXJlZCcsXG4gICAgdmFsaWRhdGU6ICd2YWxpZGF0ZScsXG59O1xuY29uc3QgRk9STV9FUlJPUl9UWVBFID0gJ2Zvcm0nO1xuY29uc3QgUk9PVF9FUlJPUl9UWVBFID0gJ3Jvb3QnO1xuXG4vKipcbiAqIFNlcGFyYXRlIGNvbnRleHQgZm9yIGBjb250cm9sYCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHJlcmVuZGVycy5cbiAqIEludGVybmFsIGhvb2tzIHRoYXQgb25seSBuZWVkIGNvbnRyb2wgdXNlIHRoaXMgaW5zdGVhZCBvZiBmdWxsIGZvcm0gY29udGV4dC5cbiAqL1xuY29uc3QgSG9va0Zvcm1Db250cm9sQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5Ib29rRm9ybUNvbnRyb2xDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0hvb2tGb3JtQ29udHJvbENvbnRleHQnO1xuLyoqXG4gKiBAaW50ZXJuYWwgSW50ZXJuYWwgaG9vayB0byBhY2Nlc3Mgb25seSBjb250cm9sIGZyb20gY29udGV4dC5cbiAqL1xuY29uc3QgdXNlRm9ybUNvbnRyb2xDb250ZXh0ID0gKCkgPT4gUmVhY3QudXNlQ29udGV4dChIb29rRm9ybUNvbnRyb2xDb250ZXh0KTtcblxudmFyIGdldFByb3h5Rm9ybVN0YXRlID0gKGZvcm1TdGF0ZSwgY29udHJvbCwgbG9jYWxQcm94eUZvcm1TdGF0ZSwgaXNSb290ID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IGluIGZvcm1TdGF0ZSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkocmVzdWx0LCBrZXksIHtcbiAgICAgICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9rZXkgPSBrZXk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wuX3Byb3h5Rm9ybVN0YXRlW19rZXldICE9PSBWQUxJREFUSU9OX01PREUuYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRyb2wuX3Byb3h5Rm9ybVN0YXRlW19rZXldID0gIWlzUm9vdCB8fCBWQUxJREFUSU9OX01PREUuYWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2NhbFByb3h5Rm9ybVN0YXRlICYmIChsb2NhbFByb3h5Rm9ybVN0YXRlW19rZXldID0gdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1TdGF0ZVtfa2V5XTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gUmVhY3QudXNlTGF5b3V0RWZmZWN0IDogUmVhY3QudXNlRWZmZWN0O1xuXG4vKipcbiAqIFRoaXMgY3VzdG9tIGhvb2sgYWxsb3dzIHlvdSB0byBzdWJzY3JpYmUgdG8gZWFjaCBmb3JtIHN0YXRlLCBhbmQgaXNvbGF0ZSB0aGUgcmUtcmVuZGVyIGF0IHRoZSBjdXN0b20gaG9vayBsZXZlbC4gSXQgaGFzIGl0cyBzY29wZSBpbiB0ZXJtcyBvZiBmb3JtIHN0YXRlIHN1YnNjcmlwdGlvbiwgc28gaXQgd291bGQgbm90IGFmZmVjdCBvdGhlciB1c2VGb3JtU3RhdGUgYW5kIHVzZUZvcm0uIFVzaW5nIHRoaXMgaG9vayBjYW4gcmVkdWNlIHRoZSByZS1yZW5kZXIgaW1wYWN0IG9uIGxhcmdlIGFuZCBjb21wbGV4IGZvcm0gYXBwbGljYXRpb24uXG4gKlxuICogQHJlbWFya3NcbiAqIFtBUEldKGh0dHBzOi8vcmVhY3QtaG9vay1mb3JtLmNvbS9kb2NzL3VzZWZvcm1zdGF0ZSkg4oCiIFtEZW1vXShodHRwczovL2NvZGVzYW5kYm94LmlvL3MvdXNlZm9ybXN0YXRlLTc1eGx5KVxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIGluY2x1ZGUgb3B0aW9ucyBvbiBzcGVjaWZ5IGZpZWxkcyB0byBzdWJzY3JpYmUuIHtAbGluayBVc2VGb3JtU3RhdGVSZXR1cm59XG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCB7IHJlZ2lzdGVyLCBoYW5kbGVTdWJtaXQsIGNvbnRyb2wgfSA9IHVzZUZvcm0oe1xuICogICAgIGRlZmF1bHRWYWx1ZXM6IHtcbiAqICAgICBmaXJzdE5hbWU6IFwiZmlyc3ROYW1lXCJcbiAqICAgfX0pO1xuICogICBjb25zdCB7IGRpcnR5RmllbGRzIH0gPSB1c2VGb3JtU3RhdGUoe1xuICogICAgIGNvbnRyb2xcbiAqICAgfSk7XG4gKiAgIGNvbnN0IG9uU3VibWl0ID0gKGRhdGEpID0+IGNvbnNvbGUubG9nKGRhdGEpO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8Zm9ybSBvblN1Ym1pdD17aGFuZGxlU3VibWl0KG9uU3VibWl0KX0+XG4gKiAgICAgICA8aW5wdXQgey4uLnJlZ2lzdGVyKFwiZmlyc3ROYW1lXCIpfSBwbGFjZWhvbGRlcj1cIkZpcnN0IE5hbWVcIiAvPlxuICogICAgICAge2RpcnR5RmllbGRzLmZpcnN0TmFtZSAmJiA8cD5GaWVsZCBpcyBkaXJ0eS48L3A+fVxuICogICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiAvPlxuICogICAgIDwvZm9ybT5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICovXG5mdW5jdGlvbiB1c2VGb3JtU3RhdGUocHJvcHMpIHtcbiAgICBjb25zdCBmb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sQ29udGV4dCgpO1xuICAgIGNvbnN0IHsgY29udHJvbCA9IGZvcm1Db250cm9sLCBkaXNhYmxlZCwgbmFtZSwgZXhhY3QgfSA9IHByb3BzIHx8IHt9O1xuICAgIGNvbnN0IFtmb3JtU3RhdGUsIHVwZGF0ZUZvcm1TdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiAoe1xuICAgICAgICAuLi5jb250cm9sLl9mb3JtU3RhdGUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZXM6IGNvbnRyb2wuX2RlZmF1bHRWYWx1ZXMsXG4gICAgfSkpO1xuICAgIGNvbnN0IF9sb2NhbFByb3h5Rm9ybVN0YXRlID0gUmVhY3QudXNlUmVmKHtcbiAgICAgICAgaXNEaXJ0eTogZmFsc2UsXG4gICAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICAgIGRpcnR5RmllbGRzOiBmYWxzZSxcbiAgICAgICAgdG91Y2hlZEZpZWxkczogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpbmdGaWVsZHM6IGZhbHNlLFxuICAgICAgICBpc1ZhbGlkYXRpbmc6IGZhbHNlLFxuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgZXJyb3JzOiBmYWxzZSxcbiAgICB9KTtcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IGNvbnRyb2wuX3N1YnNjcmliZSh7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGZvcm1TdGF0ZTogX2xvY2FsUHJveHlGb3JtU3RhdGUuY3VycmVudCxcbiAgICAgICAgZXhhY3QsXG4gICAgICAgIGNhbGxiYWNrOiAoZm9ybVN0YXRlKSA9PiB7XG4gICAgICAgICAgICAhZGlzYWJsZWQgJiZcbiAgICAgICAgICAgICAgICB1cGRhdGVGb3JtU3RhdGUoe1xuICAgICAgICAgICAgICAgICAgICAuLi5jb250cm9sLl9mb3JtU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgIC4uLmZvcm1TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlczogY29udHJvbC5fZGVmYXVsdFZhbHVlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9KSwgW25hbWUsIGRpc2FibGVkLCBleGFjdF0pO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIF9sb2NhbFByb3h5Rm9ybVN0YXRlLmN1cnJlbnQuaXNWYWxpZCAmJiBjb250cm9sLl9zZXRWYWxpZCh0cnVlKTtcbiAgICB9LCBbY29udHJvbF0pO1xuICAgIHJldHVybiBSZWFjdC51c2VNZW1vKCgpID0+IGdldFByb3h5Rm9ybVN0YXRlKGZvcm1TdGF0ZSwgY29udHJvbCwgX2xvY2FsUHJveHlGb3JtU3RhdGUuY3VycmVudCwgZmFsc2UpLCBbZm9ybVN0YXRlLCBjb250cm9sXSk7XG59XG5cbnZhciBpc1N0cmluZyA9ICh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJztcblxudmFyIGdlbmVyYXRlV2F0Y2hPdXRwdXQgPSAobmFtZXMsIF9uYW1lcywgZm9ybVZhbHVlcywgaXNHbG9iYWwsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhuYW1lcykpIHtcbiAgICAgICAgaXNHbG9iYWwgJiYgX25hbWVzLndhdGNoLmFkZChuYW1lcyk7XG4gICAgICAgIHJldHVybiBnZXQoZm9ybVZhbHVlcywgbmFtZXMsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfVxuICAgIGlmIChBcnJheS5pc0FycmF5KG5hbWVzKSkge1xuICAgICAgICByZXR1cm4gbmFtZXMubWFwKChmaWVsZE5hbWUpID0+IChpc0dsb2JhbCAmJiBfbmFtZXMud2F0Y2guYWRkKGZpZWxkTmFtZSksXG4gICAgICAgICAgICBnZXQoZm9ybVZhbHVlcywgZmllbGROYW1lKSkpO1xuICAgIH1cbiAgICBpc0dsb2JhbCAmJiAoX25hbWVzLndhdGNoQWxsID0gdHJ1ZSk7XG4gICAgcmV0dXJuIGZvcm1WYWx1ZXM7XG59O1xuXG52YXIgaXNQcmltaXRpdmUgPSAodmFsdWUpID0+IGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlKSB8fCAhaXNPYmplY3RUeXBlKHZhbHVlKTtcblxuZnVuY3Rpb24gZGVlcEVxdWFsKG9iamVjdDEsIG9iamVjdDIsIHZpc2l0ZWQgPSBuZXcgV2Vha1NldCgpKSB7XG4gICAgaWYgKG9iamVjdDEgPT09IG9iamVjdDIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChpc1ByaW1pdGl2ZShvYmplY3QxKSB8fCBpc1ByaW1pdGl2ZShvYmplY3QyKSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmlzKG9iamVjdDEsIG9iamVjdDIpO1xuICAgIH1cbiAgICBpZiAoaXNEYXRlT2JqZWN0KG9iamVjdDEpICYmIGlzRGF0ZU9iamVjdChvYmplY3QyKSkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmlzKG9iamVjdDEuZ2V0VGltZSgpLCBvYmplY3QyLmdldFRpbWUoKSk7XG4gICAgfVxuICAgIGNvbnN0IGtleXMxID0gT2JqZWN0LmtleXMob2JqZWN0MSk7XG4gICAgY29uc3Qga2V5czIgPSBPYmplY3Qua2V5cyhvYmplY3QyKTtcbiAgICBpZiAoa2V5czEubGVuZ3RoICE9PSBrZXlzMi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAodmlzaXRlZC5oYXMob2JqZWN0MSkgfHwgdmlzaXRlZC5oYXMob2JqZWN0MikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHZpc2l0ZWQuYWRkKG9iamVjdDEpO1xuICAgIHZpc2l0ZWQuYWRkKG9iamVjdDIpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMxKSB7XG4gICAgICAgIGNvbnN0IHZhbDEgPSBvYmplY3QxW2tleV07XG4gICAgICAgIGlmICghKGtleSBpbiBvYmplY3QyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChrZXkgIT09ICdyZWYnKSB7XG4gICAgICAgICAgICBjb25zdCB2YWwyID0gb2JqZWN0MltrZXldO1xuICAgICAgICAgICAgaWYgKChpc0RhdGVPYmplY3QodmFsMSkgJiYgaXNEYXRlT2JqZWN0KHZhbDIpKSB8fFxuICAgICAgICAgICAgICAgICgoaXNPYmplY3QodmFsMSkgfHwgQXJyYXkuaXNBcnJheSh2YWwxKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgKGlzT2JqZWN0KHZhbDIpIHx8IEFycmF5LmlzQXJyYXkodmFsMikpKVxuICAgICAgICAgICAgICAgID8gIWRlZXBFcXVhbCh2YWwxLCB2YWwyLCB2aXNpdGVkKVxuICAgICAgICAgICAgICAgIDogIU9iamVjdC5pcyh2YWwxLCB2YWwyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDdXN0b20gaG9vayB0byBzdWJzY3JpYmUgdG8gZmllbGQgY2hhbmdlIGFuZCBpc29sYXRlIHJlLXJlbmRlcmluZyBhdCB0aGUgY29tcG9uZW50IGxldmVsLlxuICpcbiAqIEByZW1hcmtzXG4gKlxuICogW0FQSV0oaHR0cHM6Ly9yZWFjdC1ob29rLWZvcm0uY29tL2RvY3MvdXNld2F0Y2gpIOKAoiBbRGVtb10oaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9zL3JlYWN0LWhvb2stZm9ybS12Ny10cy11c2V3YXRjaC1oOWk1ZSlcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBjb25zdCB7IGNvbnRyb2wgfSA9IHVzZUZvcm0oKTtcbiAqIGNvbnN0IHZhbHVlcyA9IHVzZVdhdGNoKHtcbiAqICAgbmFtZTogXCJmaWVsZE5hbWVcIlxuICogICBjb250cm9sLFxuICogfSlcbiAqIGBgYFxuICovXG5mdW5jdGlvbiB1c2VXYXRjaChwcm9wcykge1xuICAgIGNvbnN0IGZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2xDb250ZXh0KCk7XG4gICAgY29uc3QgeyBjb250cm9sID0gZm9ybUNvbnRyb2wsIG5hbWUsIGRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQsIGV4YWN0LCBjb21wdXRlLCB9ID0gcHJvcHMgfHwge307XG4gICAgY29uc3QgX2RlZmF1bHRWYWx1ZSA9IFJlYWN0LnVzZVJlZihkZWZhdWx0VmFsdWUpO1xuICAgIGNvbnN0IF9jb21wdXRlID0gUmVhY3QudXNlUmVmKGNvbXB1dGUpO1xuICAgIGNvbnN0IF9jb21wdXRlRm9ybVZhbHVlcyA9IFJlYWN0LnVzZVJlZih1bmRlZmluZWQpO1xuICAgIGNvbnN0IF9wcmV2Q29udHJvbCA9IFJlYWN0LnVzZVJlZihjb250cm9sKTtcbiAgICBjb25zdCBfcHJldk5hbWUgPSBSZWFjdC51c2VSZWYobmFtZSk7XG4gICAgX2NvbXB1dGUuY3VycmVudCA9IGNvbXB1dGU7XG4gICAgY29uc3QgW3ZhbHVlLCB1cGRhdGVWYWx1ZV0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGNvbnRyb2wuX2dldFdhdGNoKG5hbWUsIF9kZWZhdWx0VmFsdWUuY3VycmVudCk7XG4gICAgICAgIHJldHVybiBfY29tcHV0ZS5jdXJyZW50ID8gX2NvbXB1dGUuY3VycmVudChkZWZhdWx0VmFsdWUpIDogZGVmYXVsdFZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGdldEN1cnJlbnRPdXRwdXQgPSBSZWFjdC51c2VDYWxsYmFjaygodmFsdWVzKSA9PiB7XG4gICAgICAgIGNvbnN0IGZvcm1WYWx1ZXMgPSBnZW5lcmF0ZVdhdGNoT3V0cHV0KG5hbWUsIGNvbnRyb2wuX25hbWVzLCB2YWx1ZXMgfHwgY29udHJvbC5fZm9ybVZhbHVlcywgZmFsc2UsIF9kZWZhdWx0VmFsdWUuY3VycmVudCk7XG4gICAgICAgIHJldHVybiBfY29tcHV0ZS5jdXJyZW50ID8gX2NvbXB1dGUuY3VycmVudChmb3JtVmFsdWVzKSA6IGZvcm1WYWx1ZXM7XG4gICAgfSwgW2NvbnRyb2wuX2Zvcm1WYWx1ZXMsIGNvbnRyb2wuX25hbWVzLCBuYW1lXSk7XG4gICAgY29uc3QgcmVmcmVzaFZhbHVlID0gUmVhY3QudXNlQ2FsbGJhY2soKHZhbHVlcykgPT4ge1xuICAgICAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtVmFsdWVzID0gZ2VuZXJhdGVXYXRjaE91dHB1dChuYW1lLCBjb250cm9sLl9uYW1lcywgdmFsdWVzIHx8IGNvbnRyb2wuX2Zvcm1WYWx1ZXMsIGZhbHNlLCBfZGVmYXVsdFZhbHVlLmN1cnJlbnQpO1xuICAgICAgICAgICAgaWYgKF9jb21wdXRlLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wdXRlZEZvcm1WYWx1ZXMgPSBfY29tcHV0ZS5jdXJyZW50KGZvcm1WYWx1ZXMpO1xuICAgICAgICAgICAgICAgIGlmICghZGVlcEVxdWFsKGNvbXB1dGVkRm9ybVZhbHVlcywgX2NvbXB1dGVGb3JtVmFsdWVzLmN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlKGNvbXB1dGVkRm9ybVZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIF9jb21wdXRlRm9ybVZhbHVlcy5jdXJyZW50ID0gY29tcHV0ZWRGb3JtVmFsdWVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlKGZvcm1WYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW2NvbnRyb2wuX2Zvcm1WYWx1ZXMsIGNvbnRyb2wuX25hbWVzLCBkaXNhYmxlZCwgbmFtZV0pO1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoX3ByZXZDb250cm9sLmN1cnJlbnQgIT09IGNvbnRyb2wgfHxcbiAgICAgICAgICAgICFkZWVwRXF1YWwoX3ByZXZOYW1lLmN1cnJlbnQsIG5hbWUpKSB7XG4gICAgICAgICAgICBfcHJldkNvbnRyb2wuY3VycmVudCA9IGNvbnRyb2w7XG4gICAgICAgICAgICBfcHJldk5hbWUuY3VycmVudCA9IG5hbWU7XG4gICAgICAgICAgICByZWZyZXNoVmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJvbC5fc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBmb3JtU3RhdGU6IHtcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IHRydWUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhhY3QsXG4gICAgICAgICAgICBjYWxsYmFjazogKGZvcm1TdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJlZnJlc2hWYWx1ZShmb3JtU3RhdGUudmFsdWVzKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0sIFtjb250cm9sLCBleGFjdCwgbmFtZSwgcmVmcmVzaFZhbHVlXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IGNvbnRyb2wuX3JlbW92ZVVubW91bnRlZCgpKTtcbiAgICAvLyBJZiBuYW1lIG9yIGNvbnRyb2wgY2hhbmdlZCBmb3IgdGhpcyByZW5kZXIsIHN5bmNocm9ub3VzbHkgcmVmbGVjdCB0aGVcbiAgICAvLyBsYXRlc3QgdmFsdWUgc28gY2FsbGVycyAobGlrZSB1c2VDb250cm9sbGVyKSBzZWUgdGhlIGNvcnJlY3QgdmFsdWVcbiAgICAvLyBpbW1lZGlhdGVseSBvbiB0aGUgc2FtZSByZW5kZXIuXG4gICAgLy8gT3B0aW1pemU6IENoZWNrIGNvbnRyb2wgcmVmZXJlbmNlIGZpcnN0IGJlZm9yZSBleHBlbnNpdmUgZGVlcEVxdWFsXG4gICAgY29uc3QgY29udHJvbENoYW5nZWQgPSBfcHJldkNvbnRyb2wuY3VycmVudCAhPT0gY29udHJvbDtcbiAgICBjb25zdCBwcmV2TmFtZSA9IF9wcmV2TmFtZS5jdXJyZW50O1xuICAgIC8vIENhY2hlIHRoZSBjb21wdXRlZCBvdXRwdXQgdG8gYXZvaWQgZHVwbGljYXRlIGNhbGxzIHdpdGhpbiB0aGUgc2FtZSByZW5kZXJcbiAgICAvLyBXZSBpbmNsdWRlIHNob3VsZFJldHVybkltbWVkaWF0ZSBpbiBkZXBzIHRvIGVuc3VyZSBwcm9wZXIgcmVjb21wdXRhdGlvblxuICAgIGNvbnN0IGNvbXB1dGVkT3V0cHV0ID0gUmVhY3QudXNlTWVtbygoKSA9PiB7XG4gICAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmFtZUNoYW5nZWQgPSAhY29udHJvbENoYW5nZWQgJiYgIWRlZXBFcXVhbChwcmV2TmFtZSwgbmFtZSk7XG4gICAgICAgIGNvbnN0IHNob3VsZFJldHVybkltbWVkaWF0ZSA9IGNvbnRyb2xDaGFuZ2VkIHx8IG5hbWVDaGFuZ2VkO1xuICAgICAgICByZXR1cm4gc2hvdWxkUmV0dXJuSW1tZWRpYXRlID8gZ2V0Q3VycmVudE91dHB1dCgpIDogbnVsbDtcbiAgICB9LCBbZGlzYWJsZWQsIGNvbnRyb2xDaGFuZ2VkLCBuYW1lLCBwcmV2TmFtZSwgZ2V0Q3VycmVudE91dHB1dF0pO1xuICAgIHJldHVybiBjb21wdXRlZE91dHB1dCAhPT0gbnVsbCA/IGNvbXB1dGVkT3V0cHV0IDogdmFsdWU7XG59XG5cbi8qKlxuICogQ3VzdG9tIGhvb2sgdG8gd29yayB3aXRoIGNvbnRyb2xsZWQgY29tcG9uZW50LCB0aGlzIGZ1bmN0aW9uIHByb3ZpZGUgeW91IHdpdGggYm90aCBmb3JtIGFuZCBmaWVsZCBsZXZlbCBzdGF0ZS4gUmUtcmVuZGVyIGlzIGlzb2xhdGVkIGF0IHRoZSBob29rIGxldmVsLlxuICpcbiAqIEByZW1hcmtzXG4gKiBbQVBJXShodHRwczovL3JlYWN0LWhvb2stZm9ybS5jb20vZG9jcy91c2Vjb250cm9sbGVyKSDigKIgW0RlbW9dKGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy91c2Vjb250cm9sbGVyLTBvOHB4KVxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIHRoZSBwYXRoIG5hbWUgdG8gdGhlIGZvcm0gZmllbGQgdmFsdWUsIGFuZCB2YWxpZGF0aW9uIHJ1bGVzLlxuICpcbiAqIEByZXR1cm5zIGZpZWxkIHByb3BlcnRpZXMsIGZpZWxkIGFuZCBmb3JtIHN0YXRlLiB7QGxpbmsgVXNlQ29udHJvbGxlclJldHVybn1cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHN4XG4gKiBmdW5jdGlvbiBJbnB1dChwcm9wcykge1xuICogICBjb25zdCB7IGZpZWxkLCBmaWVsZFN0YXRlLCBmb3JtU3RhdGUgfSA9IHVzZUNvbnRyb2xsZXIocHJvcHMpO1xuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8aW5wdXQgey4uLmZpZWxkfSBwbGFjZWhvbGRlcj17cHJvcHMubmFtZX0gLz5cbiAqICAgICAgIDxwPntmaWVsZFN0YXRlLmlzVG91Y2hlZCAmJiBcIlRvdWNoZWRcIn08L3A+XG4gKiAgICAgICA8cD57Zm9ybVN0YXRlLmlzU3VibWl0dGVkID8gXCJzdWJtaXR0ZWRcIiA6IFwiXCJ9PC9wPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKi9cbmZ1bmN0aW9uIHVzZUNvbnRyb2xsZXIocHJvcHMpIHtcbiAgICBjb25zdCBmb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sQ29udGV4dCgpO1xuICAgIGNvbnN0IHsgbmFtZSwgZGlzYWJsZWQsIGNvbnRyb2wgPSBmb3JtQ29udHJvbCwgc2hvdWxkVW5yZWdpc3RlciwgZGVmYXVsdFZhbHVlLCBleGFjdCA9IHRydWUsIH0gPSBwcm9wcztcbiAgICBjb25zdCBpc0FycmF5RmllbGQgPSBpc05hbWVJbkZpZWxkQXJyYXkoY29udHJvbC5fbmFtZXMuYXJyYXksIG5hbWUpO1xuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZU1lbW8gPSBSZWFjdC51c2VNZW1vKCgpID0+IGdldChjb250cm9sLl9mb3JtVmFsdWVzLCBuYW1lLCBnZXQoY29udHJvbC5fZGVmYXVsdFZhbHVlcywgbmFtZSwgZGVmYXVsdFZhbHVlKSksIFtjb250cm9sLCBuYW1lLCBkZWZhdWx0VmFsdWVdKTtcbiAgICBjb25zdCB2YWx1ZSA9IHVzZVdhdGNoKHtcbiAgICAgICAgY29udHJvbCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWVNZW1vLFxuICAgICAgICBleGFjdCxcbiAgICB9KTtcbiAgICBjb25zdCBmb3JtU3RhdGUgPSB1c2VGb3JtU3RhdGUoe1xuICAgICAgICBjb250cm9sLFxuICAgICAgICBuYW1lLFxuICAgICAgICBleGFjdCxcbiAgICB9KTtcbiAgICBjb25zdCBfcHJvcHMgPSBSZWFjdC51c2VSZWYocHJvcHMpO1xuICAgIGNvbnN0IF9yZWdpc3RlclByb3BzID0gUmVhY3QudXNlUmVmKGNvbnRyb2wucmVnaXN0ZXIobmFtZSwge1xuICAgICAgICAuLi5wcm9wcy5ydWxlcyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIC4uLihpc0Jvb2xlYW4ocHJvcHMuZGlzYWJsZWQpID8geyBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQgfSA6IHt9KSxcbiAgICB9KSk7XG4gICAgX3Byb3BzLmN1cnJlbnQgPSBwcm9wcztcbiAgICBjb25zdCBmaWVsZFN0YXRlID0gUmVhY3QudXNlTWVtbygoKSA9PiBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh7fSwge1xuICAgICAgICBpbnZhbGlkOiB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZ2V0OiAoKSA9PiAhIWdldChmb3JtU3RhdGUuZXJyb3JzLCBuYW1lKSxcbiAgICAgICAgfSxcbiAgICAgICAgaXNEaXJ0eToge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGdldDogKCkgPT4gISFnZXQoZm9ybVN0YXRlLmRpcnR5RmllbGRzLCBuYW1lKSxcbiAgICAgICAgfSxcbiAgICAgICAgaXNUb3VjaGVkOiB7XG4gICAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgZ2V0OiAoKSA9PiAhIWdldChmb3JtU3RhdGUudG91Y2hlZEZpZWxkcywgbmFtZSksXG4gICAgICAgIH0sXG4gICAgICAgIGlzVmFsaWRhdGluZzoge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGdldDogKCkgPT4gISFnZXQoZm9ybVN0YXRlLnZhbGlkYXRpbmdGaWVsZHMsIG5hbWUpLFxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjoge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGdldDogKCkgPT4gZ2V0KGZvcm1TdGF0ZS5lcnJvcnMsIG5hbWUpLFxuICAgICAgICB9LFxuICAgIH0pLCBbZm9ybVN0YXRlLCBuYW1lXSk7XG4gICAgY29uc3Qgb25DaGFuZ2UgPSBSZWFjdC51c2VDYWxsYmFjaygoZXZlbnQpID0+IF9yZWdpc3RlclByb3BzLmN1cnJlbnQub25DaGFuZ2Uoe1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIHZhbHVlOiBnZXRFdmVudFZhbHVlKGV2ZW50KSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIH0sXG4gICAgICAgIHR5cGU6IEVWRU5UUy5DSEFOR0UsXG4gICAgfSksIFtuYW1lXSk7XG4gICAgY29uc3Qgb25CbHVyID0gUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gX3JlZ2lzdGVyUHJvcHMuY3VycmVudC5vbkJsdXIoe1xuICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgIHZhbHVlOiBnZXQoY29udHJvbC5fZm9ybVZhbHVlcywgbmFtZSksXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB9LFxuICAgICAgICB0eXBlOiBFVkVOVFMuQkxVUixcbiAgICB9KSwgW25hbWUsIGNvbnRyb2wuX2Zvcm1WYWx1ZXNdKTtcbiAgICBjb25zdCByZWYgPSBSZWFjdC51c2VDYWxsYmFjaygoZWxtKSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0KGNvbnRyb2wuX2ZpZWxkcywgbmFtZSk7XG4gICAgICAgIGlmIChmaWVsZCAmJiBmaWVsZC5fZiAmJiBlbG0pIHtcbiAgICAgICAgICAgIGZpZWxkLl9mLnJlZiA9IHtcbiAgICAgICAgICAgICAgICBmb2N1czogKCkgPT4gaXNGdW5jdGlvbihlbG0uZm9jdXMpICYmIGVsbS5mb2N1cygpLFxuICAgICAgICAgICAgICAgIHNlbGVjdDogKCkgPT4gaXNGdW5jdGlvbihlbG0uc2VsZWN0KSAmJiBlbG0uc2VsZWN0KCksXG4gICAgICAgICAgICAgICAgc2V0Q3VzdG9tVmFsaWRpdHk6IChtZXNzYWdlKSA9PiBpc0Z1bmN0aW9uKGVsbS5zZXRDdXN0b21WYWxpZGl0eSkgJiYgZWxtLnNldEN1c3RvbVZhbGlkaXR5KG1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgIHJlcG9ydFZhbGlkaXR5OiAoKSA9PiBpc0Z1bmN0aW9uKGVsbS5yZXBvcnRWYWxpZGl0eSkgJiYgZWxtLnJlcG9ydFZhbGlkaXR5KCksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfSwgW2NvbnRyb2wuX2ZpZWxkcywgbmFtZV0pO1xuICAgIGNvbnN0IGZpZWxkID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgICAgICBuYW1lLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgLi4uKGlzQm9vbGVhbihkaXNhYmxlZCkgfHwgZm9ybVN0YXRlLmRpc2FibGVkXG4gICAgICAgICAgICA/IHsgZGlzYWJsZWQ6IGZvcm1TdGF0ZS5kaXNhYmxlZCB8fCBkaXNhYmxlZCB9XG4gICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgb25DaGFuZ2UsXG4gICAgICAgIG9uQmx1cixcbiAgICAgICAgcmVmLFxuICAgIH0pLCBbbmFtZSwgZGlzYWJsZWQsIGZvcm1TdGF0ZS5kaXNhYmxlZCwgb25DaGFuZ2UsIG9uQmx1ciwgcmVmLCB2YWx1ZV0pO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IF9zaG91bGRVbnJlZ2lzdGVyRmllbGQgPSBjb250cm9sLl9vcHRpb25zLnNob3VsZFVucmVnaXN0ZXIgfHwgc2hvdWxkVW5yZWdpc3RlcjtcbiAgICAgICAgY29udHJvbC5yZWdpc3RlcihuYW1lLCB7XG4gICAgICAgICAgICAuLi5fcHJvcHMuY3VycmVudC5ydWxlcyxcbiAgICAgICAgICAgIC4uLihpc0Jvb2xlYW4oX3Byb3BzLmN1cnJlbnQuZGlzYWJsZWQpXG4gICAgICAgICAgICAgICAgPyB7IGRpc2FibGVkOiBfcHJvcHMuY3VycmVudC5kaXNhYmxlZCB9XG4gICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB1cGRhdGVNb3VudGVkID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGdldChjb250cm9sLl9maWVsZHMsIG5hbWUpO1xuICAgICAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkLl9mKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuX2YubW91bnQgPSB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdXBkYXRlTW91bnRlZChuYW1lLCB0cnVlKTtcbiAgICAgICAgaWYgKF9zaG91bGRVbnJlZ2lzdGVyRmllbGQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xvbmVPYmplY3QoZ2V0KGNvbnRyb2wuX29wdGlvbnMuZGVmYXVsdFZhbHVlcywgbmFtZSwgX3Byb3BzLmN1cnJlbnQuZGVmYXVsdFZhbHVlKSk7XG4gICAgICAgICAgICBzZXQoY29udHJvbC5fZGVmYXVsdFZhbHVlcywgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGdldChjb250cm9sLl9mb3JtVmFsdWVzLCBuYW1lKSkpIHtcbiAgICAgICAgICAgICAgICBzZXQoY29udHJvbC5fZm9ybVZhbHVlcywgbmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgICFpc0FycmF5RmllbGQgJiYgY29udHJvbC5yZWdpc3RlcihuYW1lKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIChpc0FycmF5RmllbGRcbiAgICAgICAgICAgICAgICA/IF9zaG91bGRVbnJlZ2lzdGVyRmllbGQgJiYgIWNvbnRyb2wuX3N0YXRlLmFjdGlvblxuICAgICAgICAgICAgICAgIDogX3Nob3VsZFVucmVnaXN0ZXJGaWVsZClcbiAgICAgICAgICAgICAgICA/IGNvbnRyb2wudW5yZWdpc3RlcihuYW1lKVxuICAgICAgICAgICAgICAgIDogdXBkYXRlTW91bnRlZChuYW1lLCBmYWxzZSk7XG4gICAgICAgIH07XG4gICAgfSwgW25hbWUsIGNvbnRyb2wsIGlzQXJyYXlGaWVsZCwgc2hvdWxkVW5yZWdpc3Rlcl0pO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnRyb2wuX3NldERpc2FibGVkRmllbGQoe1xuICAgICAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICB9KTtcbiAgICB9LCBbZGlzYWJsZWQsIG5hbWUsIGNvbnRyb2xdKTtcbiAgICByZXR1cm4gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgICAgICBmaWVsZCxcbiAgICAgICAgZm9ybVN0YXRlLFxuICAgICAgICBmaWVsZFN0YXRlLFxuICAgIH0pLCBbZmllbGQsIGZvcm1TdGF0ZSwgZmllbGRTdGF0ZV0pO1xufVxuXG4vKipcbiAqIENvbXBvbmVudCBiYXNlZCBvbiBgdXNlQ29udHJvbGxlcmAgaG9vayB0byB3b3JrIHdpdGggY29udHJvbGxlZCBjb21wb25lbnQuXG4gKlxuICogQHJlbWFya3NcbiAqIFtBUEldKGh0dHBzOi8vcmVhY3QtaG9vay1mb3JtLmNvbS9kb2NzL3VzZWNvbnRyb2xsZXIvY29udHJvbGxlcikg4oCiIFtEZW1vXShodHRwczovL2NvZGVzYW5kYm94LmlvL3MvcmVhY3QtaG9vay1mb3JtLXY2LWNvbnRyb2xsZXItdHMtand5encpIOKAoiBbVmlkZW9dKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9TjJVTmtfVUNWeUEpXG4gKlxuICogQHBhcmFtIHByb3BzIC0gdGhlIHBhdGggbmFtZSB0byB0aGUgZm9ybSBmaWVsZCB2YWx1ZSwgYW5kIHZhbGlkYXRpb24gcnVsZXMuXG4gKlxuICogQHJldHVybnMgcHJvdmlkZSBmaWVsZCBoYW5kbGVyIGZ1bmN0aW9ucywgZmllbGQgYW5kIGZvcm0gc3RhdGUuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCB7IGNvbnRyb2wgfSA9IHVzZUZvcm08Rm9ybVZhbHVlcz4oe1xuICogICAgIGRlZmF1bHRWYWx1ZXM6IHtcbiAqICAgICAgIHRlc3Q6IFwiXCJcbiAqICAgICB9XG4gKiAgIH0pO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8Zm9ybT5cbiAqICAgICAgIDxDb250cm9sbGVyXG4gKiAgICAgICAgIGNvbnRyb2w9e2NvbnRyb2x9XG4gKiAgICAgICAgIG5hbWU9XCJ0ZXN0XCJcbiAqICAgICAgICAgcmVuZGVyPXsoeyBmaWVsZDogeyBvbkNoYW5nZSwgb25CbHVyLCB2YWx1ZSwgcmVmIH0sIGZvcm1TdGF0ZSwgZmllbGRTdGF0ZSB9KSA9PiAoXG4gKiAgICAgICAgICAgPD5cbiAqICAgICAgICAgICAgIDxpbnB1dFxuICogICAgICAgICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9IC8vIHNlbmQgdmFsdWUgdG8gaG9vayBmb3JtXG4gKiAgICAgICAgICAgICAgIG9uQmx1cj17b25CbHVyfSAvLyBub3RpZnkgd2hlbiBpbnB1dCBpcyB0b3VjaGVkXG4gKiAgICAgICAgICAgICAgIHZhbHVlPXt2YWx1ZX0gLy8gcmV0dXJuIHVwZGF0ZWQgdmFsdWVcbiAqICAgICAgICAgICAgICAgcmVmPXtyZWZ9IC8vIHNldCByZWYgZm9yIGZvY3VzIG1hbmFnZW1lbnRcbiAqICAgICAgICAgICAgIC8+XG4gKiAgICAgICAgICAgICA8cD57Zm9ybVN0YXRlLmlzU3VibWl0dGVkID8gXCJzdWJtaXR0ZWRcIiA6IFwiXCJ9PC9wPlxuICogICAgICAgICAgICAgPHA+e2ZpZWxkU3RhdGUuaXNUb3VjaGVkID8gXCJ0b3VjaGVkXCIgOiBcIlwifTwvcD5cbiAqICAgICAgICAgICA8Lz5cbiAqICAgICAgICAgKX1cbiAqICAgICAgIC8+XG4gKiAgICAgPC9mb3JtPlxuICogICApO1xuICogfVxuICogYGBgXG4gKi9cbmNvbnN0IENvbnRyb2xsZXIgPSAocHJvcHMpID0+IHByb3BzLnJlbmRlcih1c2VDb250cm9sbGVyKHByb3BzKSk7XG5cbmNvbnN0IGZsYXR0ZW4gPSAob2JqKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgICBpZiAoaXNPYmplY3RUeXBlKG9ialtrZXldKSAmJiBvYmpba2V5XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgbmVzdGVkID0gZmxhdHRlbihvYmpba2V5XSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5lc3RlZEtleSBvZiBPYmplY3Qua2V5cyhuZXN0ZWQpKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0W2Ake2tleX0uJHtuZXN0ZWRLZXl9YF0gPSBuZXN0ZWRbbmVzdGVkS2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG91dHB1dFtrZXldID0gb2JqW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn07XG5cbmNvbnN0IEhvb2tGb3JtQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7XG5Ib29rRm9ybUNvbnRleHQuZGlzcGxheU5hbWUgPSAnSG9va0Zvcm1Db250ZXh0Jztcbi8qKlxuICogVGhpcyBjdXN0b20gaG9vayBhbGxvd3MgeW91IHRvIGFjY2VzcyB0aGUgZm9ybSBjb250ZXh0LiB1c2VGb3JtQ29udGV4dCBpcyBpbnRlbmRlZCB0byBiZSB1c2VkIGluIGRlZXBseSBuZXN0ZWQgc3RydWN0dXJlcywgd2hlcmUgaXQgd291bGQgYmVjb21lIGluY29udmVuaWVudCB0byBwYXNzIHRoZSBjb250ZXh0IGFzIGEgcHJvcC4gVG8gYmUgdXNlZCB3aXRoIHtAbGluayBGb3JtUHJvdmlkZXJ9LlxuICpcbiAqIEByZW1hcmtzXG4gKiBbQVBJXShodHRwczovL3JlYWN0LWhvb2stZm9ybS5jb20vZG9jcy91c2Vmb3JtY29udGV4dCkg4oCiIFtEZW1vXShodHRwczovL2NvZGVzYW5kYm94LmlvL3MvcmVhY3QtaG9vay1mb3JtLXY3LWZvcm0tY29udGV4dC15dHVkaSlcbiAqXG4gKiBAcmV0dXJucyByZXR1cm4gYWxsIHVzZUZvcm0gbWV0aG9kc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgbWV0aG9kcyA9IHVzZUZvcm0oKTtcbiAqICAgY29uc3Qgb25TdWJtaXQgPSBkYXRhID0+IGNvbnNvbGUubG9nKGRhdGEpO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8Rm9ybVByb3ZpZGVyIHsuLi5tZXRob2RzfSA+XG4gKiAgICAgICA8Zm9ybSBvblN1Ym1pdD17bWV0aG9kcy5oYW5kbGVTdWJtaXQob25TdWJtaXQpfT5cbiAqICAgICAgICAgPE5lc3RlZElucHV0IC8+XG4gKiAgICAgICAgIDxpbnB1dCB0eXBlPVwic3VibWl0XCIgLz5cbiAqICAgICAgIDwvZm9ybT5cbiAqICAgICA8L0Zvcm1Qcm92aWRlcj5cbiAqICAgKTtcbiAqIH1cbiAqXG4gKiAgZnVuY3Rpb24gTmVzdGVkSW5wdXQoKSB7XG4gKiAgIGNvbnN0IHsgcmVnaXN0ZXIgfSA9IHVzZUZvcm1Db250ZXh0KCk7IC8vIHJldHJpZXZlIGFsbCBob29rIG1ldGhvZHNcbiAqICAgcmV0dXJuIDxpbnB1dCB7Li4ucmVnaXN0ZXIoXCJ0ZXN0XCIpfSAvPjtcbiAqIH1cbiAqIGBgYFxuICovXG5jb25zdCB1c2VGb3JtQ29udGV4dCA9ICgpID0+IFJlYWN0LnVzZUNvbnRleHQoSG9va0Zvcm1Db250ZXh0KTtcbi8qKlxuICogQSBwcm92aWRlciBjb21wb25lbnQgdGhhdCBwcm9wYWdhdGVzIHRoZSBgdXNlRm9ybWAgbWV0aG9kcyB0byBhbGwgY2hpbGRyZW4gY29tcG9uZW50cyB2aWEgW1JlYWN0IENvbnRleHRdKGh0dHBzOi8vcmVhY3QuZGV2L3JlZmVyZW5jZS9yZWFjdC91c2VDb250ZXh0KSBBUEkuIFRvIGJlIHVzZWQgd2l0aCB7QGxpbmsgdXNlRm9ybUNvbnRleHR9LlxuICpcbiAqIEByZW1hcmtzXG4gKiBbQVBJXShodHRwczovL3JlYWN0LWhvb2stZm9ybS5jb20vZG9jcy91c2Vmb3JtY29udGV4dCkg4oCiIFtEZW1vXShodHRwczovL2NvZGVzYW5kYm94LmlvL3MvcmVhY3QtaG9vay1mb3JtLXY3LWZvcm0tY29udGV4dC15dHVkaSlcbiAqXG4gKiBAcGFyYW0gcHJvcHMgLSBhbGwgdXNlRm9ybSBtZXRob2RzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCBtZXRob2RzID0gdXNlRm9ybSgpO1xuICogICBjb25zdCBvblN1Ym1pdCA9IGRhdGEgPT4gY29uc29sZS5sb2coZGF0YSk7XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxGb3JtUHJvdmlkZXIgey4uLm1ldGhvZHN9ID5cbiAqICAgICAgIDxmb3JtIG9uU3VibWl0PXttZXRob2RzLmhhbmRsZVN1Ym1pdChvblN1Ym1pdCl9PlxuICogICAgICAgICA8TmVzdGVkSW5wdXQgLz5cbiAqICAgICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiAvPlxuICogICAgICAgPC9mb3JtPlxuICogICAgIDwvRm9ybVByb3ZpZGVyPlxuICogICApO1xuICogfVxuICpcbiAqICBmdW5jdGlvbiBOZXN0ZWRJbnB1dCgpIHtcbiAqICAgY29uc3QgeyByZWdpc3RlciB9ID0gdXNlRm9ybUNvbnRleHQoKTsgLy8gcmV0cmlldmUgYWxsIGhvb2sgbWV0aG9kc1xuICogICByZXR1cm4gPGlucHV0IHsuLi5yZWdpc3RlcihcInRlc3RcIil9IC8+O1xuICogfVxuICogYGBgXG4gKi9cbmNvbnN0IEZvcm1Qcm92aWRlciA9IChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHsgY2hpbGRyZW4sIHdhdGNoLCBnZXRWYWx1ZXMsIGdldEZpZWxkU3RhdGUsIHNldEVycm9yLCBjbGVhckVycm9ycywgc2V0VmFsdWUsIHNldFZhbHVlcywgdHJpZ2dlciwgZm9ybVN0YXRlLCByZXNldEZpZWxkLCByZXNldCwgaGFuZGxlU3VibWl0LCB1bnJlZ2lzdGVyLCBjb250cm9sLCByZWdpc3Rlciwgc2V0Rm9jdXMsIHN1YnNjcmliZSwgfSA9IHByb3BzO1xuICAgIGNvbnN0IG1lbW9pemVkVmFsdWUgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHdhdGNoLFxuICAgICAgICBnZXRWYWx1ZXMsXG4gICAgICAgIGdldEZpZWxkU3RhdGUsXG4gICAgICAgIHNldEVycm9yLFxuICAgICAgICBjbGVhckVycm9ycyxcbiAgICAgICAgc2V0VmFsdWUsXG4gICAgICAgIHNldFZhbHVlcyxcbiAgICAgICAgdHJpZ2dlcixcbiAgICAgICAgZm9ybVN0YXRlLFxuICAgICAgICByZXNldEZpZWxkLFxuICAgICAgICByZXNldCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICB1bnJlZ2lzdGVyLFxuICAgICAgICBjb250cm9sLFxuICAgICAgICByZWdpc3RlcixcbiAgICAgICAgc2V0Rm9jdXMsXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICB9KSwgW1xuICAgICAgICBjbGVhckVycm9ycyxcbiAgICAgICAgY29udHJvbCxcbiAgICAgICAgZm9ybVN0YXRlLFxuICAgICAgICBnZXRGaWVsZFN0YXRlLFxuICAgICAgICBnZXRWYWx1ZXMsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgcmVnaXN0ZXIsXG4gICAgICAgIHJlc2V0LFxuICAgICAgICByZXNldEZpZWxkLFxuICAgICAgICBzZXRFcnJvcixcbiAgICAgICAgc2V0Rm9jdXMsXG4gICAgICAgIHNldFZhbHVlLFxuICAgICAgICBzZXRWYWx1ZXMsXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgdHJpZ2dlcixcbiAgICAgICAgdW5yZWdpc3RlcixcbiAgICAgICAgd2F0Y2gsXG4gICAgXSk7XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KEhvb2tGb3JtQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogbWVtb2l6ZWRWYWx1ZSB9LFxuICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KEhvb2tGb3JtQ29udHJvbENvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IG1lbW9pemVkVmFsdWUuY29udHJvbCB9LCBjaGlsZHJlbikpKTtcbn07XG5cbmNvbnN0IFBPU1RfUkVRVUVTVCA9ICdwb3N0Jztcbi8qKlxuICogRm9ybSBjb21wb25lbnQgdG8gbWFuYWdlIHN1Ym1pc3Npb24uXG4gKlxuICogQHBhcmFtIHByb3BzIC0gdG8gc2V0dXAgc3VibWlzc2lvbiBkZXRhaWwuIHtAbGluayBGb3JtUHJvcHN9XG4gKlxuICogQHJldHVybnMgZm9ybSBjb21wb25lbnQgb3IgaGVhZGxlc3MgcmVuZGVyIHByb3AuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCB7IGNvbnRyb2wsIGZvcm1TdGF0ZTogeyBlcnJvcnMgfSB9ID0gdXNlRm9ybSgpO1xuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8Rm9ybSBhY3Rpb249XCIvYXBpXCIgY29udHJvbD17Y29udHJvbH0+XG4gKiAgICAgICA8aW5wdXQgey4uLnJlZ2lzdGVyKFwibmFtZVwiKX0gLz5cbiAqICAgICAgIDxwPntlcnJvcnM/LnJvb3Q/LnNlcnZlciAmJiAnU2VydmVyIGVycm9yJ308L3A+XG4gKiAgICAgICA8YnV0dG9uPlN1Ym1pdDwvYnV0dG9uPlxuICogICAgIDwvRm9ybT5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICovXG5mdW5jdGlvbiBGb3JtKHByb3BzKSB7XG4gICAgY29uc3QgbWV0aG9kcyA9IHVzZUZvcm1Db250ZXh0KCk7XG4gICAgY29uc3QgW21vdW50ZWQsIHNldE1vdW50ZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHsgY29udHJvbCA9IG1ldGhvZHMuY29udHJvbCwgb25TdWJtaXQsIGNoaWxkcmVuLCBhY3Rpb24sIG1ldGhvZCA9IFBPU1RfUkVRVUVTVCwgaGVhZGVycywgZW5jVHlwZSwgb25FcnJvciwgcmVuZGVyLCBvblN1Y2Nlc3MsIHZhbGlkYXRlU3RhdHVzLCAuLi5yZXN0IH0gPSBwcm9wcztcbiAgICBjb25zdCBzdWJtaXQgPSBSZWFjdC51c2VDYWxsYmFjayhhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIGxldCB0eXBlID0gJyc7XG4gICAgICAgIGF3YWl0IGNvbnRyb2wuaGFuZGxlU3VibWl0KGFzeW5jIChkYXRhKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xuICAgICAgICAgICAgbGV0IGZvcm1EYXRhSnNvbiA9ICcnO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3JtRGF0YUpzb24gPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfYSkgeyB9XG4gICAgICAgICAgICBjb25zdCBmbGF0dGVuRm9ybVZhbHVlcyA9IGZsYXR0ZW4oZGF0YSk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBmbGF0dGVuRm9ybVZhbHVlcykge1xuICAgICAgICAgICAgICAgIGZvcm1EYXRhLmFwcGVuZChrZXksIGZsYXR0ZW5Gb3JtVmFsdWVzW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9uU3VibWl0KSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgb25TdWJtaXQoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBldmVudCxcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kLFxuICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGFKc29uLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFjdGlvbikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZFN0cmluZ2lmeVN1Ym1pc3Npb25EYXRhID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVycyAmJiBoZWFkZXJzWydDb250ZW50LVR5cGUnXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuY1R5cGUsXG4gICAgICAgICAgICAgICAgICAgIF0uc29tZSgodmFsdWUpID0+IHZhbHVlICYmIHZhbHVlLmluY2x1ZGVzKCdqc29uJykpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKFN0cmluZyhhY3Rpb24pLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXRob2QsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uaGVhZGVycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4oZW5jVHlwZSAmJiBlbmNUeXBlICE9PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB7ICdDb250ZW50LVR5cGUnOiBlbmNUeXBlIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9keTogc2hvdWxkU3RyaW5naWZ5U3VibWlzc2lvbkRhdGEgPyBmb3JtRGF0YUpzb24gOiBmb3JtRGF0YSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbGlkYXRlU3RhdHVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAhdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVzcG9uc2Uuc3RhdHVzIDwgMjAwIHx8IHJlc3BvbnNlLnN0YXR1cyA+PSAzMDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkVycm9yICYmIG9uRXJyb3IoeyByZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uU3VjY2VzcyAmJiBvblN1Y2Nlc3MoeyByZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yICYmIG9uRXJyb3IoeyBlcnJvciB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKGV2ZW50KTtcbiAgICAgICAgaWYgKGhhc0Vycm9yICYmIGNvbnRyb2wpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgICAgIGlzU3VibWl0U3VjY2Vzc2Z1bDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnRyb2wuc2V0RXJyb3IoJ3Jvb3Quc2VydmVyJywge1xuICAgICAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtcbiAgICAgICAgY29udHJvbCxcbiAgICAgICAgb25TdWJtaXQsXG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBlbmNUeXBlLFxuICAgICAgICB2YWxpZGF0ZVN0YXR1cyxcbiAgICAgICAgb25FcnJvcixcbiAgICAgICAgb25TdWNjZXNzLFxuICAgIF0pO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHNldE1vdW50ZWQodHJ1ZSk7XG4gICAgfSwgW10pO1xuICAgIHJldHVybiByZW5kZXIgPyAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgcmVuZGVyKHtcbiAgICAgICAgc3VibWl0LFxuICAgIH0pKSkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChcImZvcm1cIiwgeyBub1ZhbGlkYXRlOiBtb3VudGVkLCBhY3Rpb246IGFjdGlvbiwgbWV0aG9kOiBtZXRob2QsIGVuY1R5cGU6IGVuY1R5cGUsIG9uU3VibWl0OiBzdWJtaXQsIC4uLnJlc3QgfSwgY2hpbGRyZW4pKTtcbn1cblxuY29uc3QgRm9ybVN0YXRlU3Vic2NyaWJlID0gKHsgY29udHJvbCwgZGlzYWJsZWQsIGV4YWN0LCBuYW1lLCByZW5kZXIsIH0pID0+IHJlbmRlcih1c2VGb3JtU3RhdGUoeyBjb250cm9sLCBuYW1lLCBkaXNhYmxlZCwgZXhhY3QgfSkpO1xuXG52YXIgYXBwZW5kRXJyb3JzID0gKG5hbWUsIHZhbGlkYXRlQWxsRmllbGRDcml0ZXJpYSwgZXJyb3JzLCB0eXBlLCBtZXNzYWdlKSA9PiB2YWxpZGF0ZUFsbEZpZWxkQ3JpdGVyaWFcbiAgICA/IHtcbiAgICAgICAgLi4uZXJyb3JzW25hbWVdLFxuICAgICAgICB0eXBlczoge1xuICAgICAgICAgICAgLi4uKGVycm9yc1tuYW1lXSAmJiBlcnJvcnNbbmFtZV0udHlwZXMgPyBlcnJvcnNbbmFtZV0udHlwZXMgOiB7fSksXG4gICAgICAgICAgICBbdHlwZV06IG1lc3NhZ2UgfHwgdHJ1ZSxcbiAgICAgICAgfSxcbiAgICB9XG4gICAgOiB7fTtcblxudmFyIGNvbnZlcnRUb0FycmF5UGF5bG9hZCA9ICh2YWx1ZSkgPT4gKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdKTtcblxudmFyIGNyZWF0ZVN1YmplY3QgPSAoKSA9PiB7XG4gICAgbGV0IF9vYnNlcnZlcnMgPSBbXTtcbiAgICBjb25zdCBuZXh0ID0gKHZhbHVlKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qgb2JzZXJ2ZXIgb2YgX29ic2VydmVycykge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCAmJiBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc3Vic2NyaWJlID0gKG9ic2VydmVyKSA9PiB7XG4gICAgICAgIF9vYnNlcnZlcnMucHVzaChvYnNlcnZlcik7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB1bnN1YnNjcmliZTogKCkgPT4ge1xuICAgICAgICAgICAgICAgIF9vYnNlcnZlcnMgPSBfb2JzZXJ2ZXJzLmZpbHRlcigobykgPT4gbyAhPT0gb2JzZXJ2ZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gKCkgPT4ge1xuICAgICAgICBfb2JzZXJ2ZXJzID0gW107XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgICBnZXQgb2JzZXJ2ZXJzKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9vYnNlcnZlcnM7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHQsXG4gICAgICAgIHN1YnNjcmliZSxcbiAgICAgICAgdW5zdWJzY3JpYmUsXG4gICAgfTtcbn07XG5cbmZ1bmN0aW9uIGV4dHJhY3RGb3JtVmFsdWVzKGZpZWxkc1N0YXRlLCBmb3JtVmFsdWVzKSB7XG4gICAgY29uc3QgdmFsdWVzID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZmllbGRzU3RhdGUpIHtcbiAgICAgICAgaWYgKGZpZWxkc1N0YXRlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkU3RhdGUgPSBmaWVsZHNTdGF0ZVtrZXldO1xuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IGZvcm1WYWx1ZXNba2V5XTtcbiAgICAgICAgICAgIGlmIChmaWVsZFN0YXRlICYmIGlzT2JqZWN0KGZpZWxkU3RhdGUpICYmIGZpZWxkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXN0ZWRGaWVsZHNTdGF0ZSA9IGV4dHJhY3RGb3JtVmFsdWVzKGZpZWxkU3RhdGUsIGZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChuZXN0ZWRGaWVsZHNTdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2tleV0gPSBuZXN0ZWRGaWVsZHNTdGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChmaWVsZHNTdGF0ZVtrZXldKSB7XG4gICAgICAgICAgICAgICAgdmFsdWVzW2tleV0gPSBmaWVsZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG59XG5cbnZhciBpc0VtcHR5T2JqZWN0ID0gKHZhbHVlKSA9PiBpc09iamVjdCh2YWx1ZSkgJiYgIU9iamVjdC5rZXlzKHZhbHVlKS5sZW5ndGg7XG5cbnZhciBpc0ZpbGVJbnB1dCA9IChlbGVtZW50KSA9PiBlbGVtZW50LnR5cGUgPT09ICdmaWxlJztcblxudmFyIGlzSFRNTEVsZW1lbnQgPSAodmFsdWUpID0+IHtcbiAgICBpZiAoIWlzV2ViKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgb3duZXIgPSB2YWx1ZSA/IHZhbHVlLm93bmVyRG9jdW1lbnQgOiAwO1xuICAgIHJldHVybiAodmFsdWUgaW5zdGFuY2VvZlxuICAgICAgICAob3duZXIgJiYgb3duZXIuZGVmYXVsdFZpZXcgPyBvd25lci5kZWZhdWx0Vmlldy5IVE1MRWxlbWVudCA6IEhUTUxFbGVtZW50KSk7XG59O1xuXG52YXIgaXNNdWx0aXBsZVNlbGVjdCA9IChlbGVtZW50KSA9PiBlbGVtZW50LnR5cGUgPT09IGBzZWxlY3QtbXVsdGlwbGVgO1xuXG52YXIgaXNSYWRpb0lucHV0ID0gKGVsZW1lbnQpID0+IGVsZW1lbnQudHlwZSA9PT0gJ3JhZGlvJztcblxudmFyIGlzUmFkaW9PckNoZWNrYm94ID0gKHJlZikgPT4gaXNSYWRpb0lucHV0KHJlZikgfHwgaXNDaGVja0JveElucHV0KHJlZik7XG5cbnZhciBsaXZlID0gKHJlZikgPT4gaXNIVE1MRWxlbWVudChyZWYpICYmIHJlZi5pc0Nvbm5lY3RlZDtcblxuZnVuY3Rpb24gYmFzZUdldChvYmplY3QsIHVwZGF0ZVBhdGgpIHtcbiAgICBjb25zdCBsZW5ndGggPSB1cGRhdGVQYXRoLnNsaWNlKDAsIC0xKS5sZW5ndGg7XG4gICAgbGV0IGluZGV4ID0gMDtcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKG9iamVjdCkpIHtcbiAgICAgICAgICAgIG9iamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIG9iamVjdCA9IG9iamVjdFt1cGRhdGVQYXRoW2luZGV4XV07XG4gICAgICAgIGluZGV4Kys7XG4gICAgfVxuICAgIHJldHVybiBvYmplY3Q7XG59XG5mdW5jdGlvbiBpc0VtcHR5QXJyYXkob2JqKSB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSAmJiAhaXNVbmRlZmluZWQob2JqW2tleV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5mdW5jdGlvbiB1bnNldChvYmplY3QsIHBhdGgpIHtcbiAgICBpZiAoaXNTdHJpbmcocGF0aCkgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcGF0aCkpIHtcbiAgICAgICAgZGVsZXRlIG9iamVjdFtwYXRoXTtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICB9XG4gICAgY29uc3QgcGF0aHMgPSBBcnJheS5pc0FycmF5KHBhdGgpXG4gICAgICAgID8gcGF0aFxuICAgICAgICA6IGlzS2V5KHBhdGgpXG4gICAgICAgICAgICA/IFtwYXRoXVxuICAgICAgICAgICAgOiBzdHJpbmdUb1BhdGgocGF0aCk7XG4gICAgY29uc3QgY2hpbGRPYmplY3QgPSBwYXRocy5sZW5ndGggPT09IDEgPyBvYmplY3QgOiBiYXNlR2V0KG9iamVjdCwgcGF0aHMpO1xuICAgIGNvbnN0IGluZGV4ID0gcGF0aHMubGVuZ3RoIC0gMTtcbiAgICBjb25zdCBrZXkgPSBwYXRoc1tpbmRleF07XG4gICAgaWYgKGNoaWxkT2JqZWN0KSB7XG4gICAgICAgIGRlbGV0ZSBjaGlsZE9iamVjdFtrZXldO1xuICAgIH1cbiAgICBpZiAoaW5kZXggIT09IDAgJiZcbiAgICAgICAgKChpc09iamVjdChjaGlsZE9iamVjdCkgJiYgaXNFbXB0eU9iamVjdChjaGlsZE9iamVjdCkpIHx8XG4gICAgICAgICAgICAoQXJyYXkuaXNBcnJheShjaGlsZE9iamVjdCkgJiYgaXNFbXB0eUFycmF5KGNoaWxkT2JqZWN0KSkpKSB7XG4gICAgICAgIHVuc2V0KG9iamVjdCwgcGF0aHMuc2xpY2UoMCwgLTEpKTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdDtcbn1cblxudmFyIG9iamVjdEhhc0Z1bmN0aW9uID0gKGRhdGEpID0+IHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGFba2V5XSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmZ1bmN0aW9uIGlzVHJhdmVyc2FibGUodmFsdWUpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgfHwgKGlzT2JqZWN0KHZhbHVlKSAmJiAhb2JqZWN0SGFzRnVuY3Rpb24odmFsdWUpKTtcbn1cbmZ1bmN0aW9uIG1hcmtGaWVsZHNEaXJ0eShkYXRhLCBmaWVsZHMgPSB7fSkge1xuICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGEpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhW2tleV07XG4gICAgICAgIGlmIChpc1RyYXZlcnNhYmxlKHZhbHVlKSkge1xuICAgICAgICAgICAgZmllbGRzW2tleV0gPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IFtdIDoge307XG4gICAgICAgICAgICBtYXJrRmllbGRzRGlydHkodmFsdWUsIGZpZWxkc1trZXldKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghaXNVbmRlZmluZWQodmFsdWUpKSB7XG4gICAgICAgICAgICBmaWVsZHNba2V5XSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpZWxkcztcbn1cbmZ1bmN0aW9uIHBydW5lRGlydHlGaWVsZHModmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbHVlLm1hcCgodmFsdWUpID0+IHBydW5lRGlydHlGaWVsZHModmFsdWUpKTtcbiAgICAgICAgcmV0dXJuIChyZXN1bHQuc29tZSgodmFsdWUpID0+IHZhbHVlICE9PSB1bmRlZmluZWQpID8gcmVzdWx0IDogdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBydW5lZCA9IHBydW5lRGlydHlGaWVsZHModmFsdWVba2V5XSk7XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHBydW5lZCkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IHBydW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKE9iamVjdC5rZXlzKHJlc3VsdCkubGVuZ3RoID8gcmVzdWx0IDogdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGdldERpcnR5RmllbGRzKGRhdGEsIGZvcm1WYWx1ZXMsIGRpcnR5RmllbGRzRnJvbVZhbHVlcykge1xuICAgIGlmICghZGlydHlGaWVsZHNGcm9tVmFsdWVzKSB7XG4gICAgICAgIGRpcnR5RmllbGRzRnJvbVZhbHVlcyA9IG1hcmtGaWVsZHNEaXJ0eShmb3JtVmFsdWVzKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gZGF0YSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGFba2V5XTtcbiAgICAgICAgaWYgKGlzVHJhdmVyc2FibGUodmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZm9ybVZhbHVlcykgfHwgaXNQcmltaXRpdmUoZGlydHlGaWVsZHNGcm9tVmFsdWVzW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgZGlydHlGaWVsZHNGcm9tVmFsdWVzW2tleV0gPSBtYXJrRmllbGRzRGlydHkodmFsdWUsIEFycmF5LmlzQXJyYXkodmFsdWUpID8gW10gOiB7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXREaXJ0eUZpZWxkcyh2YWx1ZSwgaXNOdWxsT3JVbmRlZmluZWQoZm9ybVZhbHVlcykgPyB7fSA6IGZvcm1WYWx1ZXNba2V5XSwgZGlydHlGaWVsZHNGcm9tVmFsdWVzW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZm9ybVZhbHVlID0gZm9ybVZhbHVlc1trZXldO1xuICAgICAgICAgICAgZGlydHlGaWVsZHNGcm9tVmFsdWVzW2tleV0gPSAhZGVlcEVxdWFsKHZhbHVlLCBmb3JtVmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcnVuZURpcnR5RmllbGRzKGRpcnR5RmllbGRzRnJvbVZhbHVlcykgfHwge307XG59XG5cbmNvbnN0IGRlZmF1bHRSZXN1bHQgPSB7XG4gICAgdmFsdWU6IGZhbHNlLFxuICAgIGlzVmFsaWQ6IGZhbHNlLFxufTtcbmNvbnN0IHZhbGlkUmVzdWx0ID0geyB2YWx1ZTogdHJ1ZSwgaXNWYWxpZDogdHJ1ZSB9O1xudmFyIGdldENoZWNrYm94VmFsdWUgPSAob3B0aW9ucykgPT4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KG9wdGlvbnMpKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IG9wdGlvbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbiAmJiBvcHRpb24uY2hlY2tlZCAmJiAhb3B0aW9uLmRpc2FibGVkKVxuICAgICAgICAgICAgICAgIC5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiB2YWx1ZXMsIGlzVmFsaWQ6ICEhdmFsdWVzLmxlbmd0aCB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvcHRpb25zWzBdLmNoZWNrZWQgJiYgIW9wdGlvbnNbMF0uZGlzYWJsZWRcbiAgICAgICAgICAgID8gLy8gQHRzLWV4cGVjdC1lcnJvciBleHBlY3RlZCB0byB3b3JrIGluIHRoZSBicm93c2VyXG4gICAgICAgICAgICAgICAgb3B0aW9uc1swXS5hdHRyaWJ1dGVzICYmICFpc1VuZGVmaW5lZChvcHRpb25zWzBdLmF0dHJpYnV0ZXMudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgID8gaXNVbmRlZmluZWQob3B0aW9uc1swXS52YWx1ZSkgfHwgb3B0aW9uc1swXS52YWx1ZSA9PT0gJydcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdmFsaWRSZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogeyB2YWx1ZTogb3B0aW9uc1swXS52YWx1ZSwgaXNWYWxpZDogdHJ1ZSB9XG4gICAgICAgICAgICAgICAgICAgIDogdmFsaWRSZXN1bHRcbiAgICAgICAgICAgIDogZGVmYXVsdFJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRSZXN1bHQ7XG59O1xuXG52YXIgZ2V0RmllbGRWYWx1ZUFzID0gKHZhbHVlLCB7IHZhbHVlQXNOdW1iZXIsIHZhbHVlQXNEYXRlLCBzZXRWYWx1ZUFzIH0pID0+IGlzVW5kZWZpbmVkKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IHZhbHVlQXNOdW1iZXJcbiAgICAgICAgPyB2YWx1ZSA9PT0gJydcbiAgICAgICAgICAgID8gTmFOXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgICAgICAgICAgPyArdmFsdWVcbiAgICAgICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIDogdmFsdWVBc0RhdGUgJiYgaXNTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICA/IG5ldyBEYXRlKHZhbHVlKVxuICAgICAgICAgICAgOiBzZXRWYWx1ZUFzXG4gICAgICAgICAgICAgICAgPyBzZXRWYWx1ZUFzKHZhbHVlKVxuICAgICAgICAgICAgICAgIDogdmFsdWU7XG5cbmNvbnN0IGRlZmF1bHRSZXR1cm4gPSB7XG4gICAgaXNWYWxpZDogZmFsc2UsXG4gICAgdmFsdWU6IG51bGwsXG59O1xudmFyIGdldFJhZGlvVmFsdWUgPSAob3B0aW9ucykgPT4gQXJyYXkuaXNBcnJheShvcHRpb25zKVxuICAgID8gb3B0aW9ucy5yZWR1Y2UoKHByZXZpb3VzLCBvcHRpb24pID0+IG9wdGlvbiAmJiBvcHRpb24uY2hlY2tlZCAmJiAhb3B0aW9uLmRpc2FibGVkXG4gICAgICAgID8ge1xuICAgICAgICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBvcHRpb24udmFsdWUsXG4gICAgICAgIH1cbiAgICAgICAgOiBwcmV2aW91cywgZGVmYXVsdFJldHVybilcbiAgICA6IGRlZmF1bHRSZXR1cm47XG5cbmZ1bmN0aW9uIGdldEZpZWxkVmFsdWUoX2YpIHtcbiAgICBjb25zdCByZWYgPSBfZi5yZWY7XG4gICAgaWYgKGlzRmlsZUlucHV0KHJlZikpIHtcbiAgICAgICAgcmV0dXJuIHJlZi5maWxlcztcbiAgICB9XG4gICAgaWYgKGlzUmFkaW9JbnB1dChyZWYpKSB7XG4gICAgICAgIHJldHVybiBnZXRSYWRpb1ZhbHVlKF9mLnJlZnMpLnZhbHVlO1xuICAgIH1cbiAgICBpZiAoaXNNdWx0aXBsZVNlbGVjdChyZWYpKSB7XG4gICAgICAgIHJldHVybiBbLi4ucmVmLnNlbGVjdGVkT3B0aW9uc10ubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKGlzQ2hlY2tCb3hJbnB1dChyZWYpKSB7XG4gICAgICAgIHJldHVybiBnZXRDaGVja2JveFZhbHVlKF9mLnJlZnMpLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0RmllbGRWYWx1ZUFzKGlzVW5kZWZpbmVkKHJlZi52YWx1ZSkgPyBfZi5yZWYudmFsdWUgOiByZWYudmFsdWUsIF9mKTtcbn1cblxudmFyIGdldFJlc29sdmVyT3B0aW9ucyA9IChmaWVsZHNOYW1lcywgX2ZpZWxkcywgY3JpdGVyaWFNb2RlLCBzaG91bGRVc2VOYXRpdmVWYWxpZGF0aW9uKSA9PiB7XG4gICAgY29uc3QgZmllbGRzID0ge307XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIGZpZWxkc05hbWVzKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0KF9maWVsZHMsIG5hbWUpO1xuICAgICAgICBmaWVsZCAmJiBzZXQoZmllbGRzLCBuYW1lLCBmaWVsZC5fZik7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGNyaXRlcmlhTW9kZSxcbiAgICAgICAgbmFtZXM6IFsuLi5maWVsZHNOYW1lc10sXG4gICAgICAgIGZpZWxkcyxcbiAgICAgICAgc2hvdWxkVXNlTmF0aXZlVmFsaWRhdGlvbixcbiAgICB9O1xufTtcblxudmFyIGlzUmVnZXggPSAodmFsdWUpID0+IHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwO1xuXG52YXIgZ2V0UnVsZVZhbHVlID0gKHJ1bGUpID0+IGlzVW5kZWZpbmVkKHJ1bGUpXG4gICAgPyBydWxlXG4gICAgOiBpc1JlZ2V4KHJ1bGUpXG4gICAgICAgID8gcnVsZS5zb3VyY2VcbiAgICAgICAgOiBpc09iamVjdChydWxlKVxuICAgICAgICAgICAgPyBpc1JlZ2V4KHJ1bGUudmFsdWUpXG4gICAgICAgICAgICAgICAgPyBydWxlLnZhbHVlLnNvdXJjZVxuICAgICAgICAgICAgICAgIDogcnVsZS52YWx1ZVxuICAgICAgICAgICAgOiBydWxlO1xuXG52YXIgZ2V0VmFsaWRhdGlvbk1vZGVzID0gKG1vZGUpID0+ICh7XG4gICAgaXNPblN1Ym1pdDogIW1vZGUgfHwgbW9kZSA9PT0gVkFMSURBVElPTl9NT0RFLm9uU3VibWl0LFxuICAgIGlzT25CbHVyOiBtb2RlID09PSBWQUxJREFUSU9OX01PREUub25CbHVyLFxuICAgIGlzT25DaGFuZ2U6IG1vZGUgPT09IFZBTElEQVRJT05fTU9ERS5vbkNoYW5nZSxcbiAgICBpc09uQWxsOiBtb2RlID09PSBWQUxJREFUSU9OX01PREUuYWxsLFxuICAgIGlzT25Ub3VjaDogbW9kZSA9PT0gVkFMSURBVElPTl9NT0RFLm9uVG91Y2hlZCxcbn0pO1xuXG5jb25zdCBBU1lOQ19GVU5DVElPTiA9ICdBc3luY0Z1bmN0aW9uJztcbnZhciBoYXNQcm9taXNlVmFsaWRhdGlvbiA9IChmaWVsZFJlZmVyZW5jZSkgPT4gISFmaWVsZFJlZmVyZW5jZSAmJlxuICAgICEhZmllbGRSZWZlcmVuY2UudmFsaWRhdGUgJiZcbiAgICAhISgoaXNGdW5jdGlvbihmaWVsZFJlZmVyZW5jZS52YWxpZGF0ZSkgJiZcbiAgICAgICAgZmllbGRSZWZlcmVuY2UudmFsaWRhdGUuY29uc3RydWN0b3IubmFtZSA9PT0gQVNZTkNfRlVOQ1RJT04pIHx8XG4gICAgICAgIChpc09iamVjdChmaWVsZFJlZmVyZW5jZS52YWxpZGF0ZSkgJiZcbiAgICAgICAgICAgIE9iamVjdC52YWx1ZXMoZmllbGRSZWZlcmVuY2UudmFsaWRhdGUpLmZpbmQoKHZhbGlkYXRlRnVuY3Rpb24pID0+IHZhbGlkYXRlRnVuY3Rpb24uY29uc3RydWN0b3IubmFtZSA9PT0gQVNZTkNfRlVOQ1RJT04pKSk7XG5cbnZhciBoYXNWYWxpZGF0aW9uID0gKG9wdGlvbnMpID0+IG9wdGlvbnMubW91bnQgJiZcbiAgICAob3B0aW9ucy5yZXF1aXJlZCB8fFxuICAgICAgICBvcHRpb25zLm1pbiB8fFxuICAgICAgICBvcHRpb25zLm1heCB8fFxuICAgICAgICBvcHRpb25zLm1heExlbmd0aCB8fFxuICAgICAgICBvcHRpb25zLm1pbkxlbmd0aCB8fFxuICAgICAgICBvcHRpb25zLnBhdHRlcm4gfHxcbiAgICAgICAgb3B0aW9ucy52YWxpZGF0ZSk7XG5cbnZhciBpc1dhdGNoZWQgPSAobmFtZSwgX25hbWVzLCBpc0JsdXJFdmVudCkgPT4gIWlzQmx1ckV2ZW50ICYmXG4gICAgKF9uYW1lcy53YXRjaEFsbCB8fFxuICAgICAgICBfbmFtZXMud2F0Y2guaGFzKG5hbWUpIHx8XG4gICAgICAgIFsuLi5fbmFtZXMud2F0Y2hdLnNvbWUoKHdhdGNoTmFtZSkgPT4gbmFtZS5zdGFydHNXaXRoKHdhdGNoTmFtZSkgJiZcbiAgICAgICAgICAgIC9eXFwuXFx3Ky8udGVzdChuYW1lLnNsaWNlKHdhdGNoTmFtZS5sZW5ndGgpKSkpO1xuXG5jb25zdCBpdGVyYXRlRmllbGRzQnlBY3Rpb24gPSAoZmllbGRzLCBhY3Rpb24sIGZpZWxkc05hbWVzLCBhYm9ydEVhcmx5KSA9PiB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgZmllbGRzTmFtZXMgfHwgT2JqZWN0LmtleXMoZmllbGRzKSkge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGdldChmaWVsZHMsIGtleSk7XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgICAgY29uc3QgeyBfZiwgLi4uY3VycmVudEZpZWxkIH0gPSBmaWVsZDtcbiAgICAgICAgICAgIGlmIChfZikge1xuICAgICAgICAgICAgICAgIGlmIChfZi5yZWZzICYmIF9mLnJlZnNbMF0gJiYgYWN0aW9uKF9mLnJlZnNbMF0sIGtleSkgJiYgIWFib3J0RWFybHkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9mLnJlZiAmJiBhY3Rpb24oX2YucmVmLCBfZi5uYW1lKSAmJiAhYWJvcnRFYXJseSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpdGVyYXRlRmllbGRzQnlBY3Rpb24oY3VycmVudEZpZWxkLCBhY3Rpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzT2JqZWN0KGN1cnJlbnRGaWVsZCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmF0ZUZpZWxkc0J5QWN0aW9uKGN1cnJlbnRGaWVsZCwgYWN0aW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xufTtcblxuZnVuY3Rpb24gc2NoZW1hRXJyb3JMb29rdXAoZXJyb3JzLCBfZmllbGRzLCBuYW1lKSB7XG4gICAgY29uc3QgZXJyb3IgPSBnZXQoZXJyb3JzLCBuYW1lKTtcbiAgICBpZiAoZXJyb3IgfHwgaXNLZXkobmFtZSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgbmFtZXMgPSBuYW1lLnNwbGl0KCcuJyk7XG4gICAgd2hpbGUgKG5hbWVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBuYW1lcy5qb2luKCcuJyk7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0KF9maWVsZHMsIGZpZWxkTmFtZSk7XG4gICAgICAgIGNvbnN0IGZvdW5kRXJyb3IgPSBnZXQoZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgICAgICBpZiAoZmllbGQgJiYgIUFycmF5LmlzQXJyYXkoZmllbGQpICYmIG5hbWUgIT09IGZpZWxkTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbmFtZSB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3VuZEVycm9yICYmIGZvdW5kRXJyb3IudHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBmaWVsZE5hbWUsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGZvdW5kRXJyb3IsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChmb3VuZEVycm9yICYmIGZvdW5kRXJyb3Iucm9vdCAmJiBmb3VuZEVycm9yLnJvb3QudHlwZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBgJHtmaWVsZE5hbWV9LnJvb3RgLFxuICAgICAgICAgICAgICAgIGVycm9yOiBmb3VuZEVycm9yLnJvb3QsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIG5hbWVzLnBvcCgpO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBuYW1lLFxuICAgIH07XG59XG5cbnZhciBzaG91bGRSZW5kZXJGb3JtU3RhdGUgPSAoZm9ybVN0YXRlRGF0YSwgX3Byb3h5Rm9ybVN0YXRlLCB1cGRhdGVGb3JtU3RhdGUsIGlzUm9vdCkgPT4ge1xuICAgIHVwZGF0ZUZvcm1TdGF0ZShmb3JtU3RhdGVEYXRhKTtcbiAgICBjb25zdCB7IG5hbWUsIC4uLmZvcm1TdGF0ZSB9ID0gZm9ybVN0YXRlRGF0YTtcbiAgICByZXR1cm4gKGlzRW1wdHlPYmplY3QoZm9ybVN0YXRlKSB8fFxuICAgICAgICAoaXNSb290ICYmXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmb3JtU3RhdGUpLmxlbmd0aCA+PSBPYmplY3Qua2V5cyhfcHJveHlGb3JtU3RhdGUpLmxlbmd0aCkgfHxcbiAgICAgICAgT2JqZWN0LmtleXMoZm9ybVN0YXRlKS5maW5kKChrZXkpID0+IF9wcm94eUZvcm1TdGF0ZVtrZXldID09PVxuICAgICAgICAgICAgKCFpc1Jvb3QgfHwgVkFMSURBVElPTl9NT0RFLmFsbCkpKTtcbn07XG5cbnZhciBzaG91bGRTdWJzY3JpYmVCeU5hbWUgPSAobmFtZSwgc2lnbmFsTmFtZSwgZXhhY3QpID0+ICFuYW1lIHx8XG4gICAgIXNpZ25hbE5hbWUgfHxcbiAgICBuYW1lID09PSBzaWduYWxOYW1lIHx8XG4gICAgY29udmVydFRvQXJyYXlQYXlsb2FkKG5hbWUpLnNvbWUoKGN1cnJlbnROYW1lKSA9PiBjdXJyZW50TmFtZSAmJlxuICAgICAgICAoZXhhY3RcbiAgICAgICAgICAgID8gY3VycmVudE5hbWUgPT09IHNpZ25hbE5hbWVcbiAgICAgICAgICAgIDogY3VycmVudE5hbWUuc3RhcnRzV2l0aChzaWduYWxOYW1lKSB8fFxuICAgICAgICAgICAgICAgIHNpZ25hbE5hbWUuc3RhcnRzV2l0aChjdXJyZW50TmFtZSkpKTtcblxudmFyIHNraXBWYWxpZGF0aW9uID0gKGlzQmx1ckV2ZW50LCBpc1RvdWNoZWQsIGlzU3VibWl0dGVkLCByZVZhbGlkYXRlTW9kZSwgbW9kZSkgPT4ge1xuICAgIGlmIChtb2RlLmlzT25BbGwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmICghaXNTdWJtaXR0ZWQgJiYgbW9kZS5pc09uVG91Y2gpIHtcbiAgICAgICAgcmV0dXJuICEoaXNUb3VjaGVkIHx8IGlzQmx1ckV2ZW50KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdWJtaXR0ZWQgPyByZVZhbGlkYXRlTW9kZS5pc09uQmx1ciA6IG1vZGUuaXNPbkJsdXIpIHtcbiAgICAgICAgcmV0dXJuICFpc0JsdXJFdmVudDtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNTdWJtaXR0ZWQgPyByZVZhbGlkYXRlTW9kZS5pc09uQ2hhbmdlIDogbW9kZS5pc09uQ2hhbmdlKSB7XG4gICAgICAgIHJldHVybiBpc0JsdXJFdmVudDtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG52YXIgdW5zZXRFbXB0eUFycmF5ID0gKHJlZiwgbmFtZSkgPT4gIWNvbXBhY3QoZ2V0KHJlZiwgbmFtZSkpLmxlbmd0aCAmJiB1bnNldChyZWYsIG5hbWUpO1xuXG52YXIgdXBkYXRlRmllbGRBcnJheVJvb3RFcnJvciA9IChlcnJvcnMsIGVycm9yLCBuYW1lKSA9PiB7XG4gICAgY29uc3QgZmllbGRBcnJheUVycm9ycyA9IGNvbnZlcnRUb0FycmF5UGF5bG9hZChnZXQoZXJyb3JzLCBuYW1lKSk7XG4gICAgc2V0KGZpZWxkQXJyYXlFcnJvcnMsIFJPT1RfRVJST1JfVFlQRSwgZXJyb3JbbmFtZV0pO1xuICAgIHNldChlcnJvcnMsIG5hbWUsIGZpZWxkQXJyYXlFcnJvcnMpO1xuICAgIHJldHVybiBlcnJvcnM7XG59O1xuXG5mdW5jdGlvbiBnZXRWYWxpZGF0ZUVycm9yKHJlc3VsdCwgcmVmLCB0eXBlID0gJ3ZhbGlkYXRlJykge1xuICAgIGlmIChpc1N0cmluZyhyZXN1bHQpIHx8XG4gICAgICAgIChBcnJheS5pc0FycmF5KHJlc3VsdCkgJiYgcmVzdWx0LmV2ZXJ5KGlzU3RyaW5nKSkgfHxcbiAgICAgICAgKGlzQm9vbGVhbihyZXN1bHQpICYmICFyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgbWVzc2FnZTogaXNTdHJpbmcocmVzdWx0KSA/IHJlc3VsdCA6ICcnLFxuICAgICAgICAgICAgcmVmLFxuICAgICAgICB9O1xuICAgIH1cbn1cblxudmFyIGdldFZhbHVlQW5kTWVzc2FnZSA9ICh2YWxpZGF0aW9uRGF0YSkgPT4gaXNPYmplY3QodmFsaWRhdGlvbkRhdGEpICYmICFpc1JlZ2V4KHZhbGlkYXRpb25EYXRhKVxuICAgID8gdmFsaWRhdGlvbkRhdGFcbiAgICA6IHtcbiAgICAgICAgdmFsdWU6IHZhbGlkYXRpb25EYXRhLFxuICAgICAgICBtZXNzYWdlOiAnJyxcbiAgICB9O1xuXG52YXIgdmFsaWRhdGVGaWVsZCA9IGFzeW5jIChmaWVsZCwgZGlzYWJsZWRGaWVsZE5hbWVzLCBmb3JtVmFsdWVzLCB2YWxpZGF0ZUFsbEZpZWxkQ3JpdGVyaWEsIHNob3VsZFVzZU5hdGl2ZVZhbGlkYXRpb24sIGlzRmllbGRBcnJheSkgPT4ge1xuICAgIGNvbnN0IHsgcmVmLCByZWZzLCByZXF1aXJlZCwgbWF4TGVuZ3RoLCBtaW5MZW5ndGgsIG1pbiwgbWF4LCBwYXR0ZXJuLCB2YWxpZGF0ZSwgbmFtZSwgdmFsdWVBc051bWJlciwgbW91bnQsIH0gPSBmaWVsZC5fZjtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gZ2V0KGZvcm1WYWx1ZXMsIG5hbWUpO1xuICAgIGlmICghbW91bnQgfHwgZGlzYWJsZWRGaWVsZE5hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIGNvbnN0IGlucHV0UmVmID0gcmVmcyA/IHJlZnNbMF0gOiByZWY7XG4gICAgY29uc3Qgc2V0Q3VzdG9tVmFsaWRpdHkgPSAobWVzc2FnZSkgPT4ge1xuICAgICAgICBpZiAoc2hvdWxkVXNlTmF0aXZlVmFsaWRhdGlvbiAmJiBpbnB1dFJlZi5yZXBvcnRWYWxpZGl0eSkge1xuICAgICAgICAgICAgaW5wdXRSZWYuc2V0Q3VzdG9tVmFsaWRpdHkoaXNCb29sZWFuKG1lc3NhZ2UpID8gJycgOiBtZXNzYWdlIHx8ICcnKTtcbiAgICAgICAgICAgIGlucHV0UmVmLnJlcG9ydFZhbGlkaXR5KCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGVycm9yID0ge307XG4gICAgY29uc3QgaXNSYWRpbyA9IGlzUmFkaW9JbnB1dChyZWYpO1xuICAgIGNvbnN0IGlzQ2hlY2tCb3ggPSBpc0NoZWNrQm94SW5wdXQocmVmKTtcbiAgICBjb25zdCBpc1JhZGlvT3JDaGVja2JveCA9IGlzUmFkaW8gfHwgaXNDaGVja0JveDtcbiAgICBjb25zdCBpc0VtcHR5ID0gKCh2YWx1ZUFzTnVtYmVyIHx8IGlzRmlsZUlucHV0KHJlZikpICYmXG4gICAgICAgIGlzVW5kZWZpbmVkKHJlZi52YWx1ZSkgJiZcbiAgICAgICAgaXNVbmRlZmluZWQoaW5wdXRWYWx1ZSkpIHx8XG4gICAgICAgIChpc0hUTUxFbGVtZW50KHJlZikgJiYgcmVmLnZhbHVlID09PSAnJykgfHxcbiAgICAgICAgaW5wdXRWYWx1ZSA9PT0gJycgfHxcbiAgICAgICAgKEFycmF5LmlzQXJyYXkoaW5wdXRWYWx1ZSkgJiYgIWlucHV0VmFsdWUubGVuZ3RoKSB8fFxuICAgICAgICAodmFsdWVBc051bWJlciAmJiB0eXBlb2YgaW5wdXRWYWx1ZSA9PT0gJ251bWJlcicgJiYgaXNOYU4oaW5wdXRWYWx1ZSkpO1xuICAgIGNvbnN0IGFwcGVuZEVycm9yc0N1cnJ5ID0gYXBwZW5kRXJyb3JzLmJpbmQobnVsbCwgbmFtZSwgdmFsaWRhdGVBbGxGaWVsZENyaXRlcmlhLCBlcnJvcik7XG4gICAgY29uc3QgZ2V0TWluTWF4TWVzc2FnZSA9IChleGNlZWRNYXgsIG1heExlbmd0aE1lc3NhZ2UsIG1pbkxlbmd0aE1lc3NhZ2UsIG1heFR5cGUgPSBJTlBVVF9WQUxJREFUSU9OX1JVTEVTLm1heExlbmd0aCwgbWluVHlwZSA9IElOUFVUX1ZBTElEQVRJT05fUlVMRVMubWluTGVuZ3RoKSA9PiB7XG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBleGNlZWRNYXggPyBtYXhMZW5ndGhNZXNzYWdlIDogbWluTGVuZ3RoTWVzc2FnZTtcbiAgICAgICAgZXJyb3JbbmFtZV0gPSB7XG4gICAgICAgICAgICB0eXBlOiBleGNlZWRNYXggPyBtYXhUeXBlIDogbWluVHlwZSxcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICByZWYsXG4gICAgICAgICAgICAuLi5hcHBlbmRFcnJvcnNDdXJyeShleGNlZWRNYXggPyBtYXhUeXBlIDogbWluVHlwZSwgbWVzc2FnZSksXG4gICAgICAgIH07XG4gICAgfTtcbiAgICBpZiAoaXNGaWVsZEFycmF5XG4gICAgICAgID8gIUFycmF5LmlzQXJyYXkoaW5wdXRWYWx1ZSkgfHwgIWlucHV0VmFsdWUubGVuZ3RoXG4gICAgICAgIDogcmVxdWlyZWQgJiZcbiAgICAgICAgICAgICgoIWlzUmFkaW9PckNoZWNrYm94ICYmIChpc0VtcHR5IHx8IGlzTnVsbE9yVW5kZWZpbmVkKGlucHV0VmFsdWUpKSkgfHxcbiAgICAgICAgICAgICAgICAoaXNCb29sZWFuKGlucHV0VmFsdWUpICYmICFpbnB1dFZhbHVlKSB8fFxuICAgICAgICAgICAgICAgIChpc0NoZWNrQm94ICYmICFnZXRDaGVja2JveFZhbHVlKHJlZnMpLmlzVmFsaWQpIHx8XG4gICAgICAgICAgICAgICAgKGlzUmFkaW8gJiYgIWdldFJhZGlvVmFsdWUocmVmcykuaXNWYWxpZCkpKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUsIG1lc3NhZ2UgfSA9IGlzU3RyaW5nKHJlcXVpcmVkKVxuICAgICAgICAgICAgPyB7IHZhbHVlOiAhIXJlcXVpcmVkLCBtZXNzYWdlOiByZXF1aXJlZCB9XG4gICAgICAgICAgICA6IGdldFZhbHVlQW5kTWVzc2FnZShyZXF1aXJlZCk7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgZXJyb3JbbmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgdHlwZTogSU5QVVRfVkFMSURBVElPTl9SVUxFUy5yZXF1aXJlZCxcbiAgICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICAgICAgICAgICAgLi4uYXBwZW5kRXJyb3JzQ3VycnkoSU5QVVRfVkFMSURBVElPTl9SVUxFUy5yZXF1aXJlZCwgbWVzc2FnZSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUFsbEZpZWxkQ3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICBzZXRDdXN0b21WYWxpZGl0eShtZXNzYWdlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFpc0VtcHR5ICYmICghaXNOdWxsT3JVbmRlZmluZWQobWluKSB8fCAhaXNOdWxsT3JVbmRlZmluZWQobWF4KSkpIHtcbiAgICAgICAgbGV0IGV4Y2VlZE1heDtcbiAgICAgICAgbGV0IGV4Y2VlZE1pbjtcbiAgICAgICAgY29uc3QgbWF4T3V0cHV0ID0gZ2V0VmFsdWVBbmRNZXNzYWdlKG1heCk7XG4gICAgICAgIGNvbnN0IG1pbk91dHB1dCA9IGdldFZhbHVlQW5kTWVzc2FnZShtaW4pO1xuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGlucHV0VmFsdWUpICYmICFpc05hTihpbnB1dFZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVOdW1iZXIgPSByZWYudmFsdWVBc051bWJlciB8fFxuICAgICAgICAgICAgICAgIChpbnB1dFZhbHVlID8gK2lucHV0VmFsdWUgOiBpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQobWF4T3V0cHV0LnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGV4Y2VlZE1heCA9IHZhbHVlTnVtYmVyID4gbWF4T3V0cHV0LnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChtaW5PdXRwdXQudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgZXhjZWVkTWluID0gdmFsdWVOdW1iZXIgPCBtaW5PdXRwdXQudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZURhdGUgPSByZWYudmFsdWVBc0RhdGUgfHwgbmV3IERhdGUoaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBjb252ZXJ0VGltZVRvRGF0ZSA9ICh0aW1lKSA9PiBuZXcgRGF0ZShuZXcgRGF0ZSgpLnRvRGF0ZVN0cmluZygpICsgJyAnICsgdGltZSk7XG4gICAgICAgICAgICBjb25zdCBpc1RpbWUgPSByZWYudHlwZSA9PSAndGltZSc7XG4gICAgICAgICAgICBjb25zdCBpc1dlZWsgPSByZWYudHlwZSA9PSAnd2Vlayc7XG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcobWF4T3V0cHV0LnZhbHVlKSAmJiBpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZXhjZWVkTWF4ID0gaXNUaW1lXG4gICAgICAgICAgICAgICAgICAgID8gY29udmVydFRpbWVUb0RhdGUoaW5wdXRWYWx1ZSkgPiBjb252ZXJ0VGltZVRvRGF0ZShtYXhPdXRwdXQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgIDogaXNXZWVrXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGlucHV0VmFsdWUgPiBtYXhPdXRwdXQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWVEYXRlID4gbmV3IERhdGUobWF4T3V0cHV0LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmluZyhtaW5PdXRwdXQudmFsdWUpICYmIGlucHV0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBleGNlZWRNaW4gPSBpc1RpbWVcbiAgICAgICAgICAgICAgICAgICAgPyBjb252ZXJ0VGltZVRvRGF0ZShpbnB1dFZhbHVlKSA8IGNvbnZlcnRUaW1lVG9EYXRlKG1pbk91dHB1dC52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgOiBpc1dlZWtcbiAgICAgICAgICAgICAgICAgICAgICAgID8gaW5wdXRWYWx1ZSA8IG1pbk91dHB1dC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB2YWx1ZURhdGUgPCBuZXcgRGF0ZShtaW5PdXRwdXQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChleGNlZWRNYXggfHwgZXhjZWVkTWluKSB7XG4gICAgICAgICAgICBnZXRNaW5NYXhNZXNzYWdlKCEhZXhjZWVkTWF4LCBtYXhPdXRwdXQubWVzc2FnZSwgbWluT3V0cHV0Lm1lc3NhZ2UsIElOUFVUX1ZBTElEQVRJT05fUlVMRVMubWF4LCBJTlBVVF9WQUxJREFUSU9OX1JVTEVTLm1pbik7XG4gICAgICAgICAgICBpZiAoIXZhbGlkYXRlQWxsRmllbGRDcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgIHNldEN1c3RvbVZhbGlkaXR5KGVycm9yW25hbWVdLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoKG1heExlbmd0aCB8fCBtaW5MZW5ndGgpICYmXG4gICAgICAgICFpc0VtcHR5ICYmXG4gICAgICAgIChpc1N0cmluZyhpbnB1dFZhbHVlKSB8fCAoaXNGaWVsZEFycmF5ICYmIEFycmF5LmlzQXJyYXkoaW5wdXRWYWx1ZSkpKSkge1xuICAgICAgICBjb25zdCBtYXhMZW5ndGhPdXRwdXQgPSBnZXRWYWx1ZUFuZE1lc3NhZ2UobWF4TGVuZ3RoKTtcbiAgICAgICAgY29uc3QgbWluTGVuZ3RoT3V0cHV0ID0gZ2V0VmFsdWVBbmRNZXNzYWdlKG1pbkxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGV4Y2VlZE1heCA9ICFpc051bGxPclVuZGVmaW5lZChtYXhMZW5ndGhPdXRwdXQudmFsdWUpICYmXG4gICAgICAgICAgICBpbnB1dFZhbHVlLmxlbmd0aCA+ICttYXhMZW5ndGhPdXRwdXQudmFsdWU7XG4gICAgICAgIGNvbnN0IGV4Y2VlZE1pbiA9ICFpc051bGxPclVuZGVmaW5lZChtaW5MZW5ndGhPdXRwdXQudmFsdWUpICYmXG4gICAgICAgICAgICBpbnB1dFZhbHVlLmxlbmd0aCA8ICttaW5MZW5ndGhPdXRwdXQudmFsdWU7XG4gICAgICAgIGlmIChleGNlZWRNYXggfHwgZXhjZWVkTWluKSB7XG4gICAgICAgICAgICBnZXRNaW5NYXhNZXNzYWdlKGV4Y2VlZE1heCwgbWF4TGVuZ3RoT3V0cHV0Lm1lc3NhZ2UsIG1pbkxlbmd0aE91dHB1dC5tZXNzYWdlKTtcbiAgICAgICAgICAgIGlmICghdmFsaWRhdGVBbGxGaWVsZENyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgc2V0Q3VzdG9tVmFsaWRpdHkoZXJyb3JbbmFtZV0ubWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChwYXR0ZXJuICYmICFpc0VtcHR5ICYmIGlzU3RyaW5nKGlucHV0VmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWU6IHBhdHRlcm5WYWx1ZSwgbWVzc2FnZSB9ID0gZ2V0VmFsdWVBbmRNZXNzYWdlKHBhdHRlcm4pO1xuICAgICAgICBpZiAoaXNSZWdleChwYXR0ZXJuVmFsdWUpICYmICFpbnB1dFZhbHVlLm1hdGNoKHBhdHRlcm5WYWx1ZSkpIHtcbiAgICAgICAgICAgIGVycm9yW25hbWVdID0ge1xuICAgICAgICAgICAgICAgIHR5cGU6IElOUFVUX1ZBTElEQVRJT05fUlVMRVMucGF0dGVybixcbiAgICAgICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgICAgIHJlZixcbiAgICAgICAgICAgICAgICAuLi5hcHBlbmRFcnJvcnNDdXJyeShJTlBVVF9WQUxJREFUSU9OX1JVTEVTLnBhdHRlcm4sIG1lc3NhZ2UpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICghdmFsaWRhdGVBbGxGaWVsZENyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgc2V0Q3VzdG9tVmFsaWRpdHkobWVzc2FnZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh2YWxpZGF0ZSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWxpZGF0ZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHZhbGlkYXRlKGlucHV0VmFsdWUsIGZvcm1WYWx1ZXMpO1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVFcnJvciA9IGdldFZhbGlkYXRlRXJyb3IocmVzdWx0LCBpbnB1dFJlZik7XG4gICAgICAgICAgICBpZiAodmFsaWRhdGVFcnJvcikge1xuICAgICAgICAgICAgICAgIGVycm9yW25hbWVdID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi52YWxpZGF0ZUVycm9yLFxuICAgICAgICAgICAgICAgICAgICAuLi5hcHBlbmRFcnJvcnNDdXJyeShJTlBVVF9WQUxJREFUSU9OX1JVTEVTLnZhbGlkYXRlLCB2YWxpZGF0ZUVycm9yLm1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0ZUFsbEZpZWxkQ3JpdGVyaWEpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q3VzdG9tVmFsaWRpdHkodmFsaWRhdGVFcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc09iamVjdCh2YWxpZGF0ZSkpIHtcbiAgICAgICAgICAgIGxldCB2YWxpZGF0aW9uUmVzdWx0ID0ge307XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB2YWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmICghaXNFbXB0eU9iamVjdCh2YWxpZGF0aW9uUmVzdWx0KSAmJiAhdmFsaWRhdGVBbGxGaWVsZENyaXRlcmlhKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0ZUVycm9yID0gZ2V0VmFsaWRhdGVFcnJvcihhd2FpdCB2YWxpZGF0ZVtrZXldKGlucHV0VmFsdWUsIGZvcm1WYWx1ZXMpLCBpbnB1dFJlZiwga2V5KTtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVFcnJvcikge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uUmVzdWx0ID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4udmFsaWRhdGVFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFwcGVuZEVycm9yc0N1cnJ5KGtleSwgdmFsaWRhdGVFcnJvci5tZXNzYWdlKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgc2V0Q3VzdG9tVmFsaWRpdHkodmFsaWRhdGVFcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlQWxsRmllbGRDcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JbbmFtZV0gPSB2YWxpZGF0aW9uUmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc0VtcHR5T2JqZWN0KHZhbGlkYXRpb25SZXN1bHQpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JbbmFtZV0gPSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZjogaW5wdXRSZWYsXG4gICAgICAgICAgICAgICAgICAgIC4uLnZhbGlkYXRpb25SZXN1bHQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBpZiAoIXZhbGlkYXRlQWxsRmllbGRDcml0ZXJpYSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHNldEN1c3RvbVZhbGlkaXR5KHRydWUpO1xuICAgIHJldHVybiBlcnJvcjtcbn07XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIG1vZGU6IFZBTElEQVRJT05fTU9ERS5vblN1Ym1pdCxcbiAgICByZVZhbGlkYXRlTW9kZTogVkFMSURBVElPTl9NT0RFLm9uQ2hhbmdlLFxuICAgIHNob3VsZEZvY3VzRXJyb3I6IHRydWUsXG59O1xuY29uc3QgREVGQVVMVF9GT1JNX1NUQVRFID0ge1xuICAgIHN1Ym1pdENvdW50OiAwLFxuICAgIGlzRGlydHk6IGZhbHNlLFxuICAgIGlzUmVhZHk6IGZhbHNlLFxuICAgIGlzVmFsaWRhdGluZzogZmFsc2UsXG4gICAgaXNTdWJtaXR0ZWQ6IGZhbHNlLFxuICAgIGlzU3VibWl0dGluZzogZmFsc2UsXG4gICAgaXNTdWJtaXRTdWNjZXNzZnVsOiBmYWxzZSxcbiAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICB0b3VjaGVkRmllbGRzOiB7fSxcbiAgICBkaXJ0eUZpZWxkczoge30sXG4gICAgdmFsaWRhdGluZ0ZpZWxkczoge30sXG59O1xuZnVuY3Rpb24gY3JlYXRlRm9ybUNvbnRyb2wocHJvcHMgPSB7fSkge1xuICAgIGxldCBfb3B0aW9ucyA9IHtcbiAgICAgICAgLi4uZGVmYXVsdE9wdGlvbnMsXG4gICAgICAgIC4uLnByb3BzLFxuICAgIH07XG4gICAgbGV0IF9mb3JtU3RhdGUgPSB7XG4gICAgICAgIC4uLmNsb25lT2JqZWN0KERFRkFVTFRfRk9STV9TVEFURSksXG4gICAgICAgIGlzTG9hZGluZzogaXNGdW5jdGlvbihfb3B0aW9ucy5kZWZhdWx0VmFsdWVzKSxcbiAgICAgICAgZXJyb3JzOiBfb3B0aW9ucy5lcnJvcnMgfHwge30sXG4gICAgICAgIGRpc2FibGVkOiBfb3B0aW9ucy5kaXNhYmxlZCB8fCBmYWxzZSxcbiAgICB9O1xuICAgIGxldCBfZmllbGRzID0ge307XG4gICAgbGV0IF9kZWZhdWx0VmFsdWVzID0gaXNPYmplY3QoX29wdGlvbnMuZGVmYXVsdFZhbHVlcykgfHwgaXNPYmplY3QoX29wdGlvbnMudmFsdWVzKVxuICAgICAgICA/IGNsb25lT2JqZWN0KF9vcHRpb25zLmRlZmF1bHRWYWx1ZXMgfHwgX29wdGlvbnMudmFsdWVzKSB8fCB7fVxuICAgICAgICA6IHt9O1xuICAgIGxldCBfZm9ybVZhbHVlcyA9IF9vcHRpb25zLnNob3VsZFVucmVnaXN0ZXJcbiAgICAgICAgPyB7fVxuICAgICAgICA6IGNsb25lT2JqZWN0KF9kZWZhdWx0VmFsdWVzKTtcbiAgICBsZXQgX3N0YXRlID0ge1xuICAgICAgICBhY3Rpb246IGZhbHNlLFxuICAgICAgICBtb3VudDogZmFsc2UsXG4gICAgICAgIHdhdGNoOiBmYWxzZSxcbiAgICAgICAga2VlcElzVmFsaWQ6IGZhbHNlLFxuICAgIH07XG4gICAgbGV0IF9uYW1lcyA9IHtcbiAgICAgICAgbW91bnQ6IG5ldyBTZXQoKSxcbiAgICAgICAgZGlzYWJsZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgdW5Nb3VudDogbmV3IFNldCgpLFxuICAgICAgICBhcnJheTogbmV3IFNldCgpLFxuICAgICAgICB3YXRjaDogbmV3IFNldCgpLFxuICAgICAgICByZWdpc3Rlck5hbWU6IG5ldyBTZXQoKSxcbiAgICB9O1xuICAgIGxldCBkZWxheUVycm9yQ2FsbGJhY2s7XG4gICAgbGV0IHRpbWVyID0gMDtcbiAgICBjb25zdCBkZWZhdWx0UHJveHlGb3JtU3RhdGUgPSB7XG4gICAgICAgIGlzRGlydHk6IGZhbHNlLFxuICAgICAgICBkaXJ0eUZpZWxkczogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpbmdGaWVsZHM6IGZhbHNlLFxuICAgICAgICB0b3VjaGVkRmllbGRzOiBmYWxzZSxcbiAgICAgICAgaXNWYWxpZGF0aW5nOiBmYWxzZSxcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIGVycm9yczogZmFsc2UsXG4gICAgfTtcbiAgICBjb25zdCBfcHJveHlGb3JtU3RhdGUgPSB7XG4gICAgICAgIC4uLmRlZmF1bHRQcm94eUZvcm1TdGF0ZSxcbiAgICB9O1xuICAgIGxldCBfcHJveHlTdWJzY3JpYmVGb3JtU3RhdGUgPSB7XG4gICAgICAgIC4uLl9wcm94eUZvcm1TdGF0ZSxcbiAgICB9O1xuICAgIGNvbnN0IF9zdWJqZWN0cyA9IHtcbiAgICAgICAgYXJyYXk6IGNyZWF0ZVN1YmplY3QoKSxcbiAgICAgICAgc3RhdGU6IGNyZWF0ZVN1YmplY3QoKSxcbiAgICB9O1xuICAgIGNvbnN0IHNob3VsZERpc3BsYXlBbGxBc3NvY2lhdGVkRXJyb3JzID0gX29wdGlvbnMuY3JpdGVyaWFNb2RlID09PSBWQUxJREFUSU9OX01PREUuYWxsO1xuICAgIGNvbnN0IGRlYm91bmNlID0gKGNhbGxiYWNrKSA9PiAod2FpdCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoY2FsbGJhY2ssIHdhaXQpO1xuICAgIH07XG4gICAgY29uc3QgX3NldFZhbGlkID0gYXN5bmMgKHNob3VsZFVwZGF0ZVZhbGlkKSA9PiB7XG4gICAgICAgIGlmIChfc3RhdGUua2VlcElzVmFsaWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIV9vcHRpb25zLmRpc2FibGVkICYmXG4gICAgICAgICAgICAoX3Byb3h5Rm9ybVN0YXRlLmlzVmFsaWQgfHxcbiAgICAgICAgICAgICAgICBfcHJveHlTdWJzY3JpYmVGb3JtU3RhdGUuaXNWYWxpZCB8fFxuICAgICAgICAgICAgICAgIHNob3VsZFVwZGF0ZVZhbGlkKSkge1xuICAgICAgICAgICAgbGV0IGlzVmFsaWQ7XG4gICAgICAgICAgICBpZiAoX29wdGlvbnMucmVzb2x2ZXIpIHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gaXNFbXB0eU9iamVjdCgoYXdhaXQgX3J1blNjaGVtYSgpKS5lcnJvcnMpO1xuICAgICAgICAgICAgICAgIF91cGRhdGVJc1ZhbGlkYXRpbmcoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBhd2FpdCBleGVjdXRlQnVpbHRJblZhbGlkYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZHM6IF9maWVsZHMsXG4gICAgICAgICAgICAgICAgICAgIG9ubHlDaGVja1ZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6IEVWRU5UUy5WQUxJRCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1ZhbGlkICE9PSBfZm9ybVN0YXRlLmlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgIGlzVmFsaWQsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IF91cGRhdGVJc1ZhbGlkYXRpbmcgPSAobmFtZXMsIGlzVmFsaWRhdGluZykgPT4ge1xuICAgICAgICBpZiAoIV9vcHRpb25zLmRpc2FibGVkICYmXG4gICAgICAgICAgICAoX3Byb3h5Rm9ybVN0YXRlLmlzVmFsaWRhdGluZyB8fFxuICAgICAgICAgICAgICAgIF9wcm94eUZvcm1TdGF0ZS52YWxpZGF0aW5nRmllbGRzIHx8XG4gICAgICAgICAgICAgICAgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlLmlzVmFsaWRhdGluZyB8fFxuICAgICAgICAgICAgICAgIF9wcm94eVN1YnNjcmliZUZvcm1TdGF0ZS52YWxpZGF0aW5nRmllbGRzKSkge1xuICAgICAgICAgICAgKG5hbWVzIHx8IEFycmF5LmZyb20oX25hbWVzLm1vdW50KSkuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzVmFsaWRhdGluZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZXQoX2Zvcm1TdGF0ZS52YWxpZGF0aW5nRmllbGRzLCBuYW1lLCBpc1ZhbGlkYXRpbmcpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuc2V0KF9mb3JtU3RhdGUudmFsaWRhdGluZ0ZpZWxkcywgbmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAgICAgdmFsaWRhdGluZ0ZpZWxkczogX2Zvcm1TdGF0ZS52YWxpZGF0aW5nRmllbGRzLFxuICAgICAgICAgICAgICAgIGlzVmFsaWRhdGluZzogIWlzRW1wdHlPYmplY3QoX2Zvcm1TdGF0ZS52YWxpZGF0aW5nRmllbGRzKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBfdXBkYXRlRGlydHlGaWVsZHMgPSAoKSA9PiB7XG4gICAgICAgIF9mb3JtU3RhdGUuZGlydHlGaWVsZHMgPSBnZXREaXJ0eUZpZWxkcyhfZGVmYXVsdFZhbHVlcywgX2Zvcm1WYWx1ZXMpO1xuICAgIH07XG4gICAgY29uc3QgX3NldEZpZWxkQXJyYXkgPSAobmFtZSwgdmFsdWVzID0gW10sIG1ldGhvZCwgYXJncywgc2hvdWxkU2V0VmFsdWVzID0gdHJ1ZSwgc2hvdWxkVXBkYXRlRmllbGRzQW5kU3RhdGUgPSB0cnVlKSA9PiB7XG4gICAgICAgIGlmIChhcmdzICYmIG1ldGhvZCAmJiAhX29wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIF9zdGF0ZS5hY3Rpb24gPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZUZpZWxkc0FuZFN0YXRlICYmIEFycmF5LmlzQXJyYXkoZ2V0KF9maWVsZHMsIG5hbWUpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gbWV0aG9kKGdldChfZmllbGRzLCBuYW1lKSwgYXJncy5hcmdBLCBhcmdzLmFyZ0IpO1xuICAgICAgICAgICAgICAgIHNob3VsZFNldFZhbHVlcyAmJiBzZXQoX2ZpZWxkcywgbmFtZSwgZmllbGRWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNob3VsZFVwZGF0ZUZpZWxkc0FuZFN0YXRlICYmXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShnZXQoX2Zvcm1TdGF0ZS5lcnJvcnMsIG5hbWUpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IG1ldGhvZChnZXQoX2Zvcm1TdGF0ZS5lcnJvcnMsIG5hbWUpLCBhcmdzLmFyZ0EsIGFyZ3MuYXJnQik7XG4gICAgICAgICAgICAgICAgc2hvdWxkU2V0VmFsdWVzICYmIHNldChfZm9ybVN0YXRlLmVycm9ycywgbmFtZSwgZXJyb3JzKTtcbiAgICAgICAgICAgICAgICB1bnNldEVtcHR5QXJyYXkoX2Zvcm1TdGF0ZS5lcnJvcnMsIG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKChfcHJveHlGb3JtU3RhdGUudG91Y2hlZEZpZWxkcyB8fFxuICAgICAgICAgICAgICAgIF9wcm94eVN1YnNjcmliZUZvcm1TdGF0ZS50b3VjaGVkRmllbGRzKSAmJlxuICAgICAgICAgICAgICAgIHNob3VsZFVwZGF0ZUZpZWxkc0FuZFN0YXRlICYmXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShnZXQoX2Zvcm1TdGF0ZS50b3VjaGVkRmllbGRzLCBuYW1lKSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3VjaGVkRmllbGRzID0gbWV0aG9kKGdldChfZm9ybVN0YXRlLnRvdWNoZWRGaWVsZHMsIG5hbWUpLCBhcmdzLmFyZ0EsIGFyZ3MuYXJnQik7XG4gICAgICAgICAgICAgICAgc2hvdWxkU2V0VmFsdWVzICYmIHNldChfZm9ybVN0YXRlLnRvdWNoZWRGaWVsZHMsIG5hbWUsIHRvdWNoZWRGaWVsZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF9wcm94eUZvcm1TdGF0ZS5kaXJ0eUZpZWxkcyB8fCBfcHJveHlTdWJzY3JpYmVGb3JtU3RhdGUuZGlydHlGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBfdXBkYXRlRGlydHlGaWVsZHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIGlzRGlydHk6IF9nZXREaXJ0eShuYW1lLCB2YWx1ZXMpLFxuICAgICAgICAgICAgICAgIGRpcnR5RmllbGRzOiBfZm9ybVN0YXRlLmRpcnR5RmllbGRzLFxuICAgICAgICAgICAgICAgIGVycm9yczogX2Zvcm1TdGF0ZS5lcnJvcnMsXG4gICAgICAgICAgICAgICAgaXNWYWxpZDogX2Zvcm1TdGF0ZS5pc1ZhbGlkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXQoX2Zvcm1WYWx1ZXMsIG5hbWUsIHZhbHVlcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZUVycm9ycyA9IChuYW1lLCBlcnJvcikgPT4ge1xuICAgICAgICBzZXQoX2Zvcm1TdGF0ZS5lcnJvcnMsIG5hbWUsIGVycm9yKTtcbiAgICAgICAgX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgZXJyb3JzOiBfZm9ybVN0YXRlLmVycm9ycyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBfc2V0RXJyb3JzID0gKGVycm9ycykgPT4ge1xuICAgICAgICBfZm9ybVN0YXRlLmVycm9ycyA9IGVycm9ycztcbiAgICAgICAgX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgZXJyb3JzOiBfZm9ybVN0YXRlLmVycm9ycyxcbiAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZVZhbGlkQW5kVmFsdWUgPSAobmFtZSwgc2hvdWxkU2tpcFNldFZhbHVlQXMsIHZhbHVlLCByZWYpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGQgPSBnZXQoX2ZpZWxkcywgbmFtZSk7XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgICAgY29uc3Qgd2FzVW5zZXRJbkZvcm1WYWx1ZXMgPSBpc1VuZGVmaW5lZChnZXQoX2Zvcm1WYWx1ZXMsIG5hbWUpKTtcbiAgICAgICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGdldChfZm9ybVZhbHVlcywgbmFtZSwgaXNVbmRlZmluZWQodmFsdWUpID8gZ2V0KF9kZWZhdWx0VmFsdWVzLCBuYW1lKSA6IHZhbHVlKTtcbiAgICAgICAgICAgIGlzVW5kZWZpbmVkKGRlZmF1bHRWYWx1ZSkgfHxcbiAgICAgICAgICAgICAgICAocmVmICYmIHJlZi5kZWZhdWx0Q2hlY2tlZCkgfHxcbiAgICAgICAgICAgICAgICBzaG91bGRTa2lwU2V0VmFsdWVBc1xuICAgICAgICAgICAgICAgID8gc2V0KF9mb3JtVmFsdWVzLCBuYW1lLCBzaG91bGRTa2lwU2V0VmFsdWVBcyA/IGRlZmF1bHRWYWx1ZSA6IGdldEZpZWxkVmFsdWUoZmllbGQuX2YpKVxuICAgICAgICAgICAgICAgIDogc2V0RmllbGRWYWx1ZShuYW1lLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgaWYgKF9zdGF0ZS5tb3VudCAmJiAhX3N0YXRlLmFjdGlvbikge1xuICAgICAgICAgICAgICAgIF9zZXRWYWxpZCgpO1xuICAgICAgICAgICAgICAgIC8vIFJlLXJlZ2lzdGVyaW5nIGEgZmllbGQgYWZ0ZXIgYSBwcmlvciB1bnJlZ2lzdGVyIHB1dHMgaXRzIGtleSBiYWNrXG4gICAgICAgICAgICAgICAgLy8gaW50byBfZm9ybVZhbHVlcywgd2hpY2ggY2FuIGZsaXAgaXNEaXJ0eSBiYWNrIHRvIGZhbHNlICgjMTMzOTcpLlxuICAgICAgICAgICAgICAgIC8vIE9ubHkgcnVuIHdoZW4gd2UgYXJlIGN1cnJlbnRseSBkaXJ0eSwgb3RoZXJ3aXNlIGFuIGluaXRpYWwgcmVnaXN0ZXJcbiAgICAgICAgICAgICAgICAvLyBmb3IgYSBmaWVsZCB3aXRoIG5vIGRlZmF1bHRWYWx1ZSB3b3VsZCBmbGlwIGlzRGlydHkgdG8gdHJ1ZS4gUmVzZXRcbiAgICAgICAgICAgICAgICAvLyBwYXRocyByZXBvcHVsYXRlIF9mb3JtVmFsdWVzIGJlZm9yZSByZS1yZWdpc3Rlciwgc28gdGhlIGtleSBpc1xuICAgICAgICAgICAgICAgIC8vIHByZXNlbnQgdGhlbiBhbmQgdGhpcyBicmFuY2ggaXMgc2tpcHBlZCAocHJlc2VydmVzIGtlZXBEaXJ0eSkuXG4gICAgICAgICAgICAgICAgaWYgKHdhc1Vuc2V0SW5Gb3JtVmFsdWVzICYmXG4gICAgICAgICAgICAgICAgICAgIF9mb3JtU3RhdGUuaXNEaXJ0eSAmJlxuICAgICAgICAgICAgICAgICAgICAoX3Byb3h5Rm9ybVN0YXRlLmlzRGlydHkgfHwgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlLmlzRGlydHkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRGlydHkgPSBfZ2V0RGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc0RpcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfZm9ybVN0YXRlLmlzRGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHsgLi4uX2Zvcm1TdGF0ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgdXBkYXRlVG91Y2hBbmREaXJ0eSA9IChuYW1lLCBmaWVsZFZhbHVlLCBpc0JsdXJFdmVudCwgc2hvdWxkRGlydHksIHNob3VsZFJlbmRlcikgPT4ge1xuICAgICAgICBsZXQgc2hvdWxkVXBkYXRlRmllbGQgPSBmYWxzZTtcbiAgICAgICAgbGV0IGlzUHJldmlvdXNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBvdXRwdXQgPSB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoIV9vcHRpb25zLmRpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAoIWlzQmx1ckV2ZW50IHx8IHNob3VsZERpcnR5KSB7XG4gICAgICAgICAgICAgICAgaWYgKF9wcm94eUZvcm1TdGF0ZS5pc0RpcnR5IHx8IF9wcm94eVN1YnNjcmliZUZvcm1TdGF0ZS5pc0RpcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgIGlzUHJldmlvdXNEaXJ0eSA9IF9mb3JtU3RhdGUuaXNEaXJ0eTtcbiAgICAgICAgICAgICAgICAgICAgX2Zvcm1TdGF0ZS5pc0RpcnR5ID0gb3V0cHV0LmlzRGlydHkgPSBfZ2V0RGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkVXBkYXRlRmllbGQgPSBpc1ByZXZpb3VzRGlydHkgIT09IG91dHB1dC5pc0RpcnR5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRGaWVsZFByaXN0aW5lID0gZGVlcEVxdWFsKGdldChfZGVmYXVsdFZhbHVlcywgbmFtZSksIGZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgICAgIGlzUHJldmlvdXNEaXJ0eSA9ICEhZ2V0KF9mb3JtU3RhdGUuZGlydHlGaWVsZHMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIGlzQ3VycmVudEZpZWxkUHJpc3RpbmVcbiAgICAgICAgICAgICAgICAgICAgPyB1bnNldChfZm9ybVN0YXRlLmRpcnR5RmllbGRzLCBuYW1lKVxuICAgICAgICAgICAgICAgICAgICA6IHNldChfZm9ybVN0YXRlLmRpcnR5RmllbGRzLCBuYW1lLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBvdXRwdXQuZGlydHlGaWVsZHMgPSBfZm9ybVN0YXRlLmRpcnR5RmllbGRzO1xuICAgICAgICAgICAgICAgIHNob3VsZFVwZGF0ZUZpZWxkID1cbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkVXBkYXRlRmllbGQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICgoX3Byb3h5Rm9ybVN0YXRlLmRpcnR5RmllbGRzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlLmRpcnR5RmllbGRzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJldmlvdXNEaXJ0eSAhPT0gIWlzQ3VycmVudEZpZWxkUHJpc3RpbmUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzQmx1ckV2ZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNQcmV2aW91c0ZpZWxkVG91Y2hlZCA9IGdldChfZm9ybVN0YXRlLnRvdWNoZWRGaWVsZHMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghaXNQcmV2aW91c0ZpZWxkVG91Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICBzZXQoX2Zvcm1TdGF0ZS50b3VjaGVkRmllbGRzLCBuYW1lLCBpc0JsdXJFdmVudCk7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC50b3VjaGVkRmllbGRzID0gX2Zvcm1TdGF0ZS50b3VjaGVkRmllbGRzO1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRVcGRhdGVGaWVsZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRVcGRhdGVGaWVsZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoX3Byb3h5Rm9ybVN0YXRlLnRvdWNoZWRGaWVsZHMgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlLnRvdWNoZWRGaWVsZHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUHJldmlvdXNGaWVsZFRvdWNoZWQgIT09IGlzQmx1ckV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaG91bGRVcGRhdGVGaWVsZCAmJiBzaG91bGRSZW5kZXIgJiYgX3N1YmplY3RzLnN0YXRlLm5leHQob3V0cHV0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2hvdWxkVXBkYXRlRmllbGQgPyBvdXRwdXQgOiB7fTtcbiAgICB9O1xuICAgIGNvbnN0IHNob3VsZFJlbmRlckJ5RXJyb3IgPSAobmFtZSwgaXNWYWxpZCwgZXJyb3IsIGZpZWxkU3RhdGUpID0+IHtcbiAgICAgICAgY29uc3QgcHJldmlvdXNGaWVsZEVycm9yID0gZ2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBuYW1lKTtcbiAgICAgICAgY29uc3Qgc2hvdWxkVXBkYXRlVmFsaWQgPSAoX3Byb3h5Rm9ybVN0YXRlLmlzVmFsaWQgfHwgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlLmlzVmFsaWQpICYmXG4gICAgICAgICAgICBpc0Jvb2xlYW4oaXNWYWxpZCkgJiZcbiAgICAgICAgICAgIF9mb3JtU3RhdGUuaXNWYWxpZCAhPT0gaXNWYWxpZDtcbiAgICAgICAgaWYgKF9vcHRpb25zLmRlbGF5RXJyb3IgJiYgZXJyb3IpIHtcbiAgICAgICAgICAgIGRlbGF5RXJyb3JDYWxsYmFjayA9IGRlYm91bmNlKCgpID0+IHVwZGF0ZUVycm9ycyhuYW1lLCBlcnJvcikpO1xuICAgICAgICAgICAgZGVsYXlFcnJvckNhbGxiYWNrKF9vcHRpb25zLmRlbGF5RXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgIGRlbGF5RXJyb3JDYWxsYmFjayA9IG51bGw7XG4gICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgID8gc2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBuYW1lLCBlcnJvcilcbiAgICAgICAgICAgICAgICA6IHVuc2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBuYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGVycm9yID8gIWRlZXBFcXVhbChwcmV2aW91c0ZpZWxkRXJyb3IsIGVycm9yKSA6IHByZXZpb3VzRmllbGRFcnJvcikgfHxcbiAgICAgICAgICAgICFpc0VtcHR5T2JqZWN0KGZpZWxkU3RhdGUpIHx8XG4gICAgICAgICAgICBzaG91bGRVcGRhdGVWYWxpZCkge1xuICAgICAgICAgICAgY29uc3QgdXBkYXRlZEZvcm1TdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAuLi5maWVsZFN0YXRlLFxuICAgICAgICAgICAgICAgIC4uLihzaG91bGRVcGRhdGVWYWxpZCAmJiBpc0Jvb2xlYW4oaXNWYWxpZCkgPyB7IGlzVmFsaWQgfSA6IHt9KSxcbiAgICAgICAgICAgICAgICBlcnJvcnM6IF9mb3JtU3RhdGUuZXJyb3JzLFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgX2Zvcm1TdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAuLi5fZm9ybVN0YXRlLFxuICAgICAgICAgICAgICAgIC4uLnVwZGF0ZWRGb3JtU3RhdGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgX3N1YmplY3RzLnN0YXRlLm5leHQodXBkYXRlZEZvcm1TdGF0ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IF9ydW5TY2hlbWEgPSBhc3luYyAobmFtZSkgPT4ge1xuICAgICAgICBfdXBkYXRlSXNWYWxpZGF0aW5nKG5hbWUsIHRydWUpO1xuICAgICAgICByZXR1cm4gYXdhaXQgX29wdGlvbnMucmVzb2x2ZXIoX2Zvcm1WYWx1ZXMsIF9vcHRpb25zLmNvbnRleHQsIGdldFJlc29sdmVyT3B0aW9ucyhuYW1lIHx8IF9uYW1lcy5tb3VudCwgX2ZpZWxkcywgX29wdGlvbnMuY3JpdGVyaWFNb2RlLCBfb3B0aW9ucy5zaG91bGRVc2VOYXRpdmVWYWxpZGF0aW9uKSk7XG4gICAgfTtcbiAgICBjb25zdCBleGVjdXRlU2NoZW1hQW5kVXBkYXRlU3RhdGUgPSBhc3luYyAobmFtZXMpID0+IHtcbiAgICAgICAgY29uc3QgeyBlcnJvcnMgfSA9IGF3YWl0IF9ydW5TY2hlbWEobmFtZXMpO1xuICAgICAgICBfdXBkYXRlSXNWYWxpZGF0aW5nKG5hbWVzKTtcbiAgICAgICAgaWYgKG5hbWVzKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgbmFtZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGdldChlcnJvcnMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgICAgID8gc2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBuYW1lLCBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgOiB1bnNldChfZm9ybVN0YXRlLmVycm9ycywgbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfZm9ybVN0YXRlLmVycm9ycyA9IGVycm9ycztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgIH07XG4gICAgY29uc3QgdmFsaWRhdGVGb3JtID0gYXN5bmMgKHsgbmFtZSwgZXZlbnRUeXBlLCB9KSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy52YWxpZGF0ZSkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcHJvcHMudmFsaWRhdGUoe1xuICAgICAgICAgICAgICAgIGZvcm1WYWx1ZXM6IF9mb3JtVmFsdWVzLFxuICAgICAgICAgICAgICAgIGZvcm1TdGF0ZTogX2Zvcm1TdGF0ZSxcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHJlc3VsdCkpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSByZXN1bHRba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcihgJHtGT1JNX0VSUk9SX1RZUEV9LiR7a2V5fWAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBpc1N0cmluZyhyZXN1bHQubWVzc2FnZSkgPyByZXN1bHQubWVzc2FnZSA6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IElOUFVUX1ZBTElEQVRJT05fUlVMRVMudmFsaWRhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzU3RyaW5nKHJlc3VsdCkgfHwgIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHNldEVycm9yKEZPUk1fRVJST1JfVFlQRSwge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiByZXN1bHQgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IElOUFVUX1ZBTElEQVRJT05fUlVMRVMudmFsaWRhdGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjbGVhckVycm9ycyhGT1JNX0VSUk9SX1RZUEUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIGNvbnN0IGV4ZWN1dGVCdWlsdEluVmFsaWRhdGlvbiA9IGFzeW5jICh7IGZpZWxkcywgb25seUNoZWNrVmFsaWQsIG5hbWUsIGV2ZW50VHlwZSwgY29udGV4dCA9IHtcbiAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgIHJ1blJvb3RWYWxpZGF0aW9uOiBmYWxzZSxcbiAgICB9LCB9KSA9PiB7XG4gICAgICAgIGlmIChwcm9wcy52YWxpZGF0ZSkge1xuICAgICAgICAgICAgY29udGV4dC5ydW5Sb290VmFsaWRhdGlvbiA9IHRydWU7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB2YWxpZGF0ZUZvcm0oe1xuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgZXZlbnRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGNvbnRleHQudmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAob25seUNoZWNrVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHQudmFsaWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBmaWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZmllbGRzW25hbWVdO1xuICAgICAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBfZiwgLi4uZmllbGRWYWx1ZSB9ID0gZmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKF9mKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRmllbGRBcnJheVJvb3QgPSBfbmFtZXMuYXJyYXkuaGFzKF9mLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1Byb21pc2VGdW5jdGlvbiA9IGZpZWxkLl9mICYmIGhhc1Byb21pc2VWYWxpZGF0aW9uKGZpZWxkLl9mKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvbWlzZUZ1bmN0aW9uICYmIF9wcm94eUZvcm1TdGF0ZS52YWxpZGF0aW5nRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdXBkYXRlSXNWYWxpZGF0aW5nKFtfZi5uYW1lXSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvciA9IGF3YWl0IHZhbGlkYXRlRmllbGQoZmllbGQsIF9uYW1lcy5kaXNhYmxlZCwgX2Zvcm1WYWx1ZXMsIHNob3VsZERpc3BsYXlBbGxBc3NvY2lhdGVkRXJyb3JzLCBfb3B0aW9ucy5zaG91bGRVc2VOYXRpdmVWYWxpZGF0aW9uICYmICFvbmx5Q2hlY2tWYWxpZCwgaXNGaWVsZEFycmF5Um9vdCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Byb21pc2VGdW5jdGlvbiAmJiBfcHJveHlGb3JtU3RhdGUudmFsaWRhdGluZ0ZpZWxkcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3VwZGF0ZUlzVmFsaWRhdGluZyhbX2YubmFtZV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZEVycm9yW19mLm5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob25seUNoZWNrVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAhb25seUNoZWNrVmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChnZXQoZmllbGRFcnJvciwgX2YubmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGlzRmllbGRBcnJheVJvb3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB1cGRhdGVGaWVsZEFycmF5Um9vdEVycm9yKF9mb3JtU3RhdGUuZXJyb3JzLCBmaWVsZEVycm9yLCBfZi5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNldChfZm9ybVN0YXRlLmVycm9ycywgX2YubmFtZSwgZmllbGRFcnJvcltfZi5uYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuc2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBfZi5uYW1lKSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwcm9wcy5zaG91bGRVc2VOYXRpdmVWYWxpZGF0aW9uICYmIGZpZWxkRXJyb3JbX2YubmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICFpc0VtcHR5T2JqZWN0KGZpZWxkVmFsdWUpICYmXG4gICAgICAgICAgICAgICAgICAgIChhd2FpdCBleGVjdXRlQnVpbHRJblZhbGlkYXRpb24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ubHlDaGVja1ZhbGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzOiBmaWVsZFZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VHlwZSxcbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250ZXh0LnZhbGlkO1xuICAgIH07XG4gICAgY29uc3QgX3JlbW92ZVVubW91bnRlZCA9ICgpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIF9uYW1lcy51bk1vdW50KSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGdldChfZmllbGRzLCBuYW1lKTtcbiAgICAgICAgICAgIGZpZWxkICYmXG4gICAgICAgICAgICAgICAgKGZpZWxkLl9mLnJlZnNcbiAgICAgICAgICAgICAgICAgICAgPyBmaWVsZC5fZi5yZWZzLmV2ZXJ5KChyZWYpID0+ICFsaXZlKHJlZikpXG4gICAgICAgICAgICAgICAgICAgIDogIWxpdmUoZmllbGQuX2YucmVmKSkgJiZcbiAgICAgICAgICAgICAgICB1bnJlZ2lzdGVyKG5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIF9uYW1lcy51bk1vdW50ID0gbmV3IFNldCgpO1xuICAgIH07XG4gICAgY29uc3QgX2dldERpcnR5ID0gKG5hbWUsIGRhdGEpID0+ICFfb3B0aW9ucy5kaXNhYmxlZCAmJlxuICAgICAgICAobmFtZSAmJiBkYXRhICYmIHNldChfZm9ybVZhbHVlcywgbmFtZSwgZGF0YSksXG4gICAgICAgICAgICAhZGVlcEVxdWFsKGdldFZhbHVlcygpLCBfZGVmYXVsdFZhbHVlcykpO1xuICAgIGNvbnN0IF9nZXRXYXRjaCA9IChuYW1lcywgZGVmYXVsdFZhbHVlLCBpc0dsb2JhbCkgPT4gZ2VuZXJhdGVXYXRjaE91dHB1dChuYW1lcywgX25hbWVzLCB7XG4gICAgICAgIC4uLihfc3RhdGUubW91bnRcbiAgICAgICAgICAgID8gX2Zvcm1WYWx1ZXNcbiAgICAgICAgICAgIDogaXNVbmRlZmluZWQoZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgICAgID8gX2RlZmF1bHRWYWx1ZXNcbiAgICAgICAgICAgICAgICA6IGlzU3RyaW5nKG5hbWVzKVxuICAgICAgICAgICAgICAgICAgICA/IHsgW25hbWVzXTogZGVmYXVsdFZhbHVlIH1cbiAgICAgICAgICAgICAgICAgICAgOiBkZWZhdWx0VmFsdWUpLFxuICAgIH0sIGlzR2xvYmFsLCBkZWZhdWx0VmFsdWUpO1xuICAgIGNvbnN0IF9nZXRGaWVsZEFycmF5ID0gKG5hbWUpID0+IGNvbXBhY3QoZ2V0KF9zdGF0ZS5tb3VudCA/IF9mb3JtVmFsdWVzIDogX2RlZmF1bHRWYWx1ZXMsIG5hbWUsIF9vcHRpb25zLnNob3VsZFVucmVnaXN0ZXIgPyBnZXQoX2RlZmF1bHRWYWx1ZXMsIG5hbWUsIFtdKSA6IFtdKSk7XG4gICAgY29uc3Qgc2V0RmllbGRWYWx1ZSA9IChuYW1lLCB2YWx1ZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0KF9maWVsZHMsIG5hbWUpO1xuICAgICAgICBsZXQgZmllbGRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUmVmZXJlbmNlID0gZmllbGQuX2Y7XG4gICAgICAgICAgICBpZiAoZmllbGRSZWZlcmVuY2UpIHtcbiAgICAgICAgICAgICAgICAhZmllbGRSZWZlcmVuY2UuZGlzYWJsZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2V0KF9mb3JtVmFsdWVzLCBuYW1lLCBnZXRGaWVsZFZhbHVlQXModmFsdWUsIGZpZWxkUmVmZXJlbmNlKSk7XG4gICAgICAgICAgICAgICAgZmllbGRWYWx1ZSA9XG4gICAgICAgICAgICAgICAgICAgIGlzSFRNTEVsZW1lbnQoZmllbGRSZWZlcmVuY2UucmVmKSAmJiBpc051bGxPclVuZGVmaW5lZCh2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKGlzTXVsdGlwbGVTZWxlY3QoZmllbGRSZWZlcmVuY2UucmVmKSkge1xuICAgICAgICAgICAgICAgICAgICBbLi4uZmllbGRSZWZlcmVuY2UucmVmLm9wdGlvbnNdLmZvckVhY2goKG9wdGlvblJlZikgPT4gKG9wdGlvblJlZi5zZWxlY3RlZCA9IGZpZWxkVmFsdWUuaW5jbHVkZXMob3B0aW9uUmVmLnZhbHVlKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmaWVsZFJlZmVyZW5jZS5yZWZzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0NoZWNrQm94SW5wdXQoZmllbGRSZWZlcmVuY2UucmVmKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRSZWZlcmVuY2UucmVmcy5mb3JFYWNoKChjaGVja2JveFJlZikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY2hlY2tib3hSZWYuZGVmYXVsdENoZWNrZWQgfHwgIWNoZWNrYm94UmVmLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZpZWxkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFJlZi5jaGVja2VkID0gISFmaWVsZFZhbHVlLmZpbmQoKGRhdGEpID0+IGRhdGEgPT09IGNoZWNrYm94UmVmLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94UmVmLmNoZWNrZWQgPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkVmFsdWUgPT09IGNoZWNrYm94UmVmLnZhbHVlIHx8ICEhZmllbGRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRSZWZlcmVuY2UucmVmcy5mb3JFYWNoKChyYWRpb1JlZikgPT4gKHJhZGlvUmVmLmNoZWNrZWQgPSByYWRpb1JlZi52YWx1ZSA9PT0gZmllbGRWYWx1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzRmlsZUlucHV0KGZpZWxkUmVmZXJlbmNlLnJlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRSZWZlcmVuY2UucmVmLnZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZFJlZmVyZW5jZS5yZWYudmFsdWUgPSBmaWVsZFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZpZWxkUmVmZXJlbmNlLnJlZi50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IGNsb25lT2JqZWN0KF9mb3JtVmFsdWVzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIChvcHRpb25zLnNob3VsZERpcnR5IHx8IG9wdGlvbnMuc2hvdWxkVG91Y2gpICYmXG4gICAgICAgICAgICB1cGRhdGVUb3VjaEFuZERpcnR5KG5hbWUsIGZpZWxkVmFsdWUsIG9wdGlvbnMuc2hvdWxkVG91Y2gsIG9wdGlvbnMuc2hvdWxkRGlydHksIHRydWUpO1xuICAgICAgICBvcHRpb25zLnNob3VsZFZhbGlkYXRlICYmIHRyaWdnZXIobmFtZSk7XG4gICAgfTtcbiAgICBjb25zdCBzZXRGaWVsZFZhbHVlcyA9IChuYW1lLCB2YWx1ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkS2V5IGluIHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlLmhhc093blByb3BlcnR5KGZpZWxkS2V5KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSB2YWx1ZVtmaWVsZEtleV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSBuYW1lICsgJy4nICsgZmllbGRLZXk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IGdldChfZmllbGRzLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgKF9uYW1lcy5hcnJheS5oYXMobmFtZSkgfHxcbiAgICAgICAgICAgICAgICBpc09iamVjdChmaWVsZFZhbHVlKSB8fFxuICAgICAgICAgICAgICAgIChmaWVsZCAmJiAhZmllbGQuX2YpKSAmJlxuICAgICAgICAgICAgICAgICFpc0RhdGVPYmplY3QoZmllbGRWYWx1ZSlcbiAgICAgICAgICAgICAgICA/IHNldEZpZWxkVmFsdWVzKGZpZWxkTmFtZSwgZmllbGRWYWx1ZSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICA6IHNldEZpZWxkVmFsdWUoZmllbGROYW1lLCBmaWVsZFZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0VmFsdWUgPSAobmFtZSwgdmFsdWUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGdldChfZmllbGRzLCBuYW1lKTtcbiAgICAgICAgY29uc3QgaXNGaWVsZEFycmF5ID0gX25hbWVzLmFycmF5LmhhcyhuYW1lKTtcbiAgICAgICAgY29uc3QgY2xvbmVWYWx1ZSA9IGNsb25lT2JqZWN0KHZhbHVlKTtcbiAgICAgICAgY29uc3QgcHJldmlvdXNWYWx1ZSA9IGdldChfZm9ybVZhbHVlcywgbmFtZSk7XG4gICAgICAgIGNvbnN0IGlzVmFsdWVVbmNoYW5nZWQgPSBkZWVwRXF1YWwocHJldmlvdXNWYWx1ZSwgY2xvbmVWYWx1ZSk7XG4gICAgICAgIHNldChfZm9ybVZhbHVlcywgbmFtZSwgY2xvbmVWYWx1ZSk7XG4gICAgICAgIGlmIChpc0ZpZWxkQXJyYXkpIHtcbiAgICAgICAgICAgIF9zdWJqZWN0cy5hcnJheS5uZXh0KHtcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlczogY2xvbmVPYmplY3QoX2Zvcm1WYWx1ZXMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoKF9wcm94eUZvcm1TdGF0ZS5pc0RpcnR5IHx8XG4gICAgICAgICAgICAgICAgX3Byb3h5Rm9ybVN0YXRlLmRpcnR5RmllbGRzIHx8XG4gICAgICAgICAgICAgICAgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlLmlzRGlydHkgfHxcbiAgICAgICAgICAgICAgICBfcHJveHlTdWJzY3JpYmVGb3JtU3RhdGUuZGlydHlGaWVsZHMpICYmXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zaG91bGREaXJ0eSkge1xuICAgICAgICAgICAgICAgIF91cGRhdGVEaXJ0eUZpZWxkcygpO1xuICAgICAgICAgICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgZGlydHlGaWVsZHM6IF9mb3JtU3RhdGUuZGlydHlGaWVsZHMsXG4gICAgICAgICAgICAgICAgICAgIGlzRGlydHk6IF9nZXREaXJ0eShuYW1lLCBjbG9uZVZhbHVlKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGlzRW1wdHkgPSAoQXJyYXkuaXNBcnJheShjbG9uZVZhbHVlKSAmJiAhY2xvbmVWYWx1ZS5sZW5ndGgpIHx8XG4gICAgICAgICAgICAgICAgaXNFbXB0eU9iamVjdChjbG9uZVZhbHVlKTtcbiAgICAgICAgICAgIGlmICghZmllbGQgfHwgZmllbGQuX2YgfHwgaXNOdWxsT3JVbmRlZmluZWQoY2xvbmVWYWx1ZSkgfHwgaXNFbXB0eSkge1xuICAgICAgICAgICAgICAgIHNldEZpZWxkVmFsdWUobmFtZSwgY2xvbmVWYWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRGaWVsZFZhbHVlcyhuYW1lLCBjbG9uZVZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVmFsdWVVbmNoYW5nZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHdhdGNoZWQgPSBpc1dhdGNoZWQobmFtZSwgX25hbWVzKTtcbiAgICAgICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgICAgICAuLi4od2F0Y2hlZCAmJiBfZm9ybVN0YXRlKSxcbiAgICAgICAgICAgICAgICBuYW1lOiBfc3RhdGUubW91bnQgfHwgd2F0Y2hlZCA/IG5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgdmFsdWVzOiBjbG9uZU9iamVjdChfZm9ybVZhbHVlcyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0VmFsdWVzID0gKGZvcm1WYWx1ZXMpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZEZvcm1WYWx1ZXMgPSBpc0Z1bmN0aW9uKGZvcm1WYWx1ZXMpXG4gICAgICAgICAgICA/IGZvcm1WYWx1ZXMoX2Zvcm1WYWx1ZXMpXG4gICAgICAgICAgICA6IGZvcm1WYWx1ZXM7XG4gICAgICAgIGlmICghZGVlcEVxdWFsKF9mb3JtVmFsdWVzLCB1cGRhdGVkRm9ybVZhbHVlcykpIHtcbiAgICAgICAgICAgIF9mb3JtVmFsdWVzID0ge1xuICAgICAgICAgICAgICAgIC4uLl9mb3JtVmFsdWVzLFxuICAgICAgICAgICAgICAgIC4uLnVwZGF0ZWRGb3JtVmFsdWVzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHsgLi4uX2Zvcm1TdGF0ZSwgdmFsdWVzOiBfZm9ybVZhbHVlcyB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgb25DaGFuZ2UgPSBhc3luYyAoZXZlbnQpID0+IHtcbiAgICAgICAgX3N0YXRlLm1vdW50ID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgICBsZXQgbmFtZSA9IHRhcmdldC5uYW1lO1xuICAgICAgICBsZXQgaXNGaWVsZFZhbHVlVXBkYXRlZCA9IHRydWU7XG4gICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0KF9maWVsZHMsIG5hbWUpO1xuICAgICAgICBjb25zdCBfdXBkYXRlSXNGaWVsZFZhbHVlVXBkYXRlZCA9IChmaWVsZFZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpc0ZpZWxkVmFsdWVVcGRhdGVkID1cbiAgICAgICAgICAgICAgICBOdW1iZXIuaXNOYU4oZmllbGRWYWx1ZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgKGlzRGF0ZU9iamVjdChmaWVsZFZhbHVlKSAmJiBpc05hTihmaWVsZFZhbHVlLmdldFRpbWUoKSkpIHx8XG4gICAgICAgICAgICAgICAgICAgIGRlZXBFcXVhbChmaWVsZFZhbHVlLCBnZXQoX2Zvcm1WYWx1ZXMsIG5hbWUsIGZpZWxkVmFsdWUpKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbk1vZGVCZWZvcmVTdWJtaXQgPSBnZXRWYWxpZGF0aW9uTW9kZXMoX29wdGlvbnMubW9kZSk7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25Nb2RlQWZ0ZXJTdWJtaXQgPSBnZXRWYWxpZGF0aW9uTW9kZXMoX29wdGlvbnMucmVWYWxpZGF0ZU1vZGUpO1xuICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgICAgIGxldCBpc1ZhbGlkO1xuICAgICAgICAgICAgY29uc3QgZmllbGRWYWx1ZSA9IHRhcmdldC50eXBlXG4gICAgICAgICAgICAgICAgPyBnZXRGaWVsZFZhbHVlKGZpZWxkLl9mKVxuICAgICAgICAgICAgICAgIDogZ2V0RXZlbnRWYWx1ZShldmVudCk7XG4gICAgICAgICAgICBjb25zdCBpc0JsdXJFdmVudCA9IGV2ZW50LnR5cGUgPT09IEVWRU5UUy5CTFVSIHx8IGV2ZW50LnR5cGUgPT09IEVWRU5UUy5GT0NVU19PVVQ7XG4gICAgICAgICAgICBjb25zdCBzaG91bGRTa2lwVmFsaWRhdGlvbiA9ICghaGFzVmFsaWRhdGlvbihmaWVsZC5fZikgJiZcbiAgICAgICAgICAgICAgICAhcHJvcHMudmFsaWRhdGUgJiZcbiAgICAgICAgICAgICAgICAhX29wdGlvbnMucmVzb2x2ZXIgJiZcbiAgICAgICAgICAgICAgICAhZ2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBuYW1lKSAmJlxuICAgICAgICAgICAgICAgICFmaWVsZC5fZi5kZXBzKSB8fFxuICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uKGlzQmx1ckV2ZW50LCBnZXQoX2Zvcm1TdGF0ZS50b3VjaGVkRmllbGRzLCBuYW1lKSwgX2Zvcm1TdGF0ZS5pc1N1Ym1pdHRlZCwgdmFsaWRhdGlvbk1vZGVBZnRlclN1Ym1pdCwgdmFsaWRhdGlvbk1vZGVCZWZvcmVTdWJtaXQpO1xuICAgICAgICAgICAgY29uc3Qgd2F0Y2hlZCA9IGlzV2F0Y2hlZChuYW1lLCBfbmFtZXMsIGlzQmx1ckV2ZW50KTtcbiAgICAgICAgICAgIHNldChfZm9ybVZhbHVlcywgbmFtZSwgZmllbGRWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoaXNCbHVyRXZlbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LnJlYWRPbmx5KSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLl9mLm9uQmx1ciAmJiBmaWVsZC5fZi5vbkJsdXIoZXZlbnQpO1xuICAgICAgICAgICAgICAgICAgICBkZWxheUVycm9yQ2FsbGJhY2sgJiYgZGVsYXlFcnJvckNhbGxiYWNrKDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZpZWxkLl9mLm9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuX2Yub25DaGFuZ2UoZXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmllbGRTdGF0ZSA9IHVwZGF0ZVRvdWNoQW5kRGlydHkobmFtZSwgZmllbGRWYWx1ZSwgaXNCbHVyRXZlbnQpO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkUmVuZGVyID0gIWlzRW1wdHlPYmplY3QoZmllbGRTdGF0ZSkgfHwgd2F0Y2hlZDtcbiAgICAgICAgICAgICFpc0JsdXJFdmVudCAmJlxuICAgICAgICAgICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZXZlbnQudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBjbG9uZU9iamVjdChfZm9ybVZhbHVlcyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU2tpcFZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoX3Byb3h5Rm9ybVN0YXRlLmlzVmFsaWQgfHwgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlLmlzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKF9vcHRpb25zLm1vZGUgPT09ICdvbkJsdXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNCbHVyRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2V0VmFsaWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICghaXNCbHVyRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9zZXRWYWxpZCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoc2hvdWxkUmVuZGVyICYmXG4gICAgICAgICAgICAgICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHsgbmFtZSwgLi4uKHdhdGNoZWQgPyB7fSA6IGZpZWxkU3RhdGUpIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghX29wdGlvbnMucmVzb2x2ZXIgJiYgcHJvcHMudmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB2YWxpZGF0ZUZvcm0oe1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6IGV2ZW50LnR5cGUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAhaXNCbHVyRXZlbnQgJiYgd2F0Y2hlZCAmJiBfc3ViamVjdHMuc3RhdGUubmV4dCh7IC4uLl9mb3JtU3RhdGUgfSk7XG4gICAgICAgICAgICBpZiAoX29wdGlvbnMucmVzb2x2ZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9ycyB9ID0gYXdhaXQgX3J1blNjaGVtYShbbmFtZV0pO1xuICAgICAgICAgICAgICAgIF91cGRhdGVJc1ZhbGlkYXRpbmcoW25hbWVdKTtcbiAgICAgICAgICAgICAgICBfdXBkYXRlSXNGaWVsZFZhbHVlVXBkYXRlZChmaWVsZFZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNGaWVsZFZhbHVlVXBkYXRlZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c0Vycm9yTG9va3VwUmVzdWx0ID0gc2NoZW1hRXJyb3JMb29rdXAoX2Zvcm1TdGF0ZS5lcnJvcnMsIF9maWVsZHMsIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvckxvb2t1cFJlc3VsdCA9IHNjaGVtYUVycm9yTG9va3VwKGVycm9ycywgX2ZpZWxkcywgcHJldmlvdXNFcnJvckxvb2t1cFJlc3VsdC5uYW1lIHx8IG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IGVycm9yTG9va3VwUmVzdWx0LmVycm9yO1xuICAgICAgICAgICAgICAgICAgICBuYW1lID0gZXJyb3JMb29rdXBSZXN1bHQubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGlzRW1wdHlPYmplY3QoZXJyb3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBfdXBkYXRlSXNWYWxpZGF0aW5nKFtuYW1lXSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgZXJyb3IgPSAoYXdhaXQgdmFsaWRhdGVGaWVsZChmaWVsZCwgX25hbWVzLmRpc2FibGVkLCBfZm9ybVZhbHVlcywgc2hvdWxkRGlzcGxheUFsbEFzc29jaWF0ZWRFcnJvcnMsIF9vcHRpb25zLnNob3VsZFVzZU5hdGl2ZVZhbGlkYXRpb24pKVtuYW1lXTtcbiAgICAgICAgICAgICAgICBfdXBkYXRlSXNWYWxpZGF0aW5nKFtuYW1lXSk7XG4gICAgICAgICAgICAgICAgX3VwZGF0ZUlzRmllbGRWYWx1ZVVwZGF0ZWQoZmllbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzRmllbGRWYWx1ZVVwZGF0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX3Byb3h5Rm9ybVN0YXRlLmlzVmFsaWQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIF9wcm94eVN1YnNjcmliZUZvcm1TdGF0ZS5pc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gYXdhaXQgZXhlY3V0ZUJ1aWx0SW5WYWxpZGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZHM6IF9maWVsZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25seUNoZWNrVmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudFR5cGU6IGV2ZW50LnR5cGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc0ZpZWxkVmFsdWVVcGRhdGVkKSB7XG4gICAgICAgICAgICAgICAgZmllbGQuX2YuZGVwcyAmJlxuICAgICAgICAgICAgICAgICAgICAoIUFycmF5LmlzQXJyYXkoZmllbGQuX2YuZGVwcykgfHwgZmllbGQuX2YuZGVwcy5sZW5ndGggPiAwKSAmJlxuICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyKGZpZWxkLl9mLmRlcHMpO1xuICAgICAgICAgICAgICAgIHNob3VsZFJlbmRlckJ5RXJyb3IobmFtZSwgaXNWYWxpZCwgZXJyb3IsIGZpZWxkU3RhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBfZm9jdXNJbnB1dCA9IChyZWYsIGtleSkgPT4ge1xuICAgICAgICBpZiAoZ2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBrZXkpICYmIHJlZi5mb2N1cykge1xuICAgICAgICAgICAgcmVmLmZvY3VzKCk7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfTtcbiAgICBjb25zdCB0cmlnZ2VyID0gYXN5bmMgKG5hbWUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBsZXQgaXNWYWxpZDtcbiAgICAgICAgbGV0IHZhbGlkYXRpb25SZXN1bHQ7XG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZXMgPSBjb252ZXJ0VG9BcnJheVBheWxvYWQobmFtZSk7XG4gICAgICAgIGlmIChfb3B0aW9ucy5yZXNvbHZlcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gYXdhaXQgZXhlY3V0ZVNjaGVtYUFuZFVwZGF0ZVN0YXRlKGlzVW5kZWZpbmVkKG5hbWUpID8gbmFtZSA6IGZpZWxkTmFtZXMpO1xuICAgICAgICAgICAgaXNWYWxpZCA9IGlzRW1wdHlPYmplY3QoZXJyb3JzKTtcbiAgICAgICAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSBuYW1lXG4gICAgICAgICAgICAgICAgPyAhZmllbGROYW1lcy5zb21lKChuYW1lKSA9PiBnZXQoZXJyb3JzLCBuYW1lKSlcbiAgICAgICAgICAgICAgICA6IGlzVmFsaWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobmFtZSkge1xuICAgICAgICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IChhd2FpdCBQcm9taXNlLmFsbChmaWVsZE5hbWVzLm1hcChhc3luYyAoZmllbGROYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBnZXQoX2ZpZWxkcywgZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgZXhlY3V0ZUJ1aWx0SW5WYWxpZGF0aW9uKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzOiBmaWVsZCAmJiBmaWVsZC5fZiA/IHsgW2ZpZWxkTmFtZV06IGZpZWxkIH0gOiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRUeXBlOiBFVkVOVFMuVFJJR0dFUixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pKSkuZXZlcnkoQm9vbGVhbik7XG4gICAgICAgICAgICAhKCF2YWxpZGF0aW9uUmVzdWx0ICYmICFfZm9ybVN0YXRlLmlzVmFsaWQpICYmIF9zZXRWYWxpZCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IGlzVmFsaWQgPSBhd2FpdCBleGVjdXRlQnVpbHRJblZhbGlkYXRpb24oe1xuICAgICAgICAgICAgICAgIGZpZWxkczogX2ZpZWxkcyxcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogRVZFTlRTLlRSSUdHRVIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAuLi4oIWlzU3RyaW5nKG5hbWUpIHx8XG4gICAgICAgICAgICAgICAgKChfcHJveHlGb3JtU3RhdGUuaXNWYWxpZCB8fCBfcHJveHlTdWJzY3JpYmVGb3JtU3RhdGUuaXNWYWxpZCkgJiZcbiAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCAhPT0gX2Zvcm1TdGF0ZS5pc1ZhbGlkKVxuICAgICAgICAgICAgICAgID8ge31cbiAgICAgICAgICAgICAgICA6IHsgbmFtZSB9KSxcbiAgICAgICAgICAgIC4uLihfb3B0aW9ucy5yZXNvbHZlciB8fCAhbmFtZSA/IHsgaXNWYWxpZCB9IDoge30pLFxuICAgICAgICAgICAgZXJyb3JzOiBfZm9ybVN0YXRlLmVycm9ycyxcbiAgICAgICAgfSk7XG4gICAgICAgIG9wdGlvbnMuc2hvdWxkRm9jdXMgJiZcbiAgICAgICAgICAgICF2YWxpZGF0aW9uUmVzdWx0ICYmXG4gICAgICAgICAgICBpdGVyYXRlRmllbGRzQnlBY3Rpb24oX2ZpZWxkcywgX2ZvY3VzSW5wdXQsIG5hbWUgPyBmaWVsZE5hbWVzIDogX25hbWVzLm1vdW50KTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQ7XG4gICAgfTtcbiAgICBjb25zdCBnZXRWYWx1ZXMgPSAoZmllbGROYW1lcywgY29uZmlnKSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZXMgPSB7XG4gICAgICAgICAgICAuLi4oX3N0YXRlLm1vdW50ID8gX2Zvcm1WYWx1ZXMgOiBfZGVmYXVsdFZhbHVlcyksXG4gICAgICAgIH07XG4gICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IGV4dHJhY3RGb3JtVmFsdWVzKGNvbmZpZy5kaXJ0eUZpZWxkcyA/IF9mb3JtU3RhdGUuZGlydHlGaWVsZHMgOiBfZm9ybVN0YXRlLnRvdWNoZWRGaWVsZHMsIHZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGZpZWxkTmFtZXMpXG4gICAgICAgICAgICA/IHZhbHVlc1xuICAgICAgICAgICAgOiBpc1N0cmluZyhmaWVsZE5hbWVzKVxuICAgICAgICAgICAgICAgID8gZ2V0KHZhbHVlcywgZmllbGROYW1lcylcbiAgICAgICAgICAgICAgICA6IGZpZWxkTmFtZXMubWFwKChuYW1lKSA9PiBnZXQodmFsdWVzLCBuYW1lKSk7XG4gICAgfTtcbiAgICBjb25zdCBnZXRGaWVsZFN0YXRlID0gKG5hbWUsIGZvcm1TdGF0ZSkgPT4gKHtcbiAgICAgICAgaW52YWxpZDogISFnZXQoKGZvcm1TdGF0ZSB8fCBfZm9ybVN0YXRlKS5lcnJvcnMsIG5hbWUpLFxuICAgICAgICBpc0RpcnR5OiAhIWdldCgoZm9ybVN0YXRlIHx8IF9mb3JtU3RhdGUpLmRpcnR5RmllbGRzLCBuYW1lKSxcbiAgICAgICAgZXJyb3I6IGdldCgoZm9ybVN0YXRlIHx8IF9mb3JtU3RhdGUpLmVycm9ycywgbmFtZSksXG4gICAgICAgIGlzVmFsaWRhdGluZzogISFnZXQoX2Zvcm1TdGF0ZS52YWxpZGF0aW5nRmllbGRzLCBuYW1lKSxcbiAgICAgICAgaXNUb3VjaGVkOiAhIWdldCgoZm9ybVN0YXRlIHx8IF9mb3JtU3RhdGUpLnRvdWNoZWRGaWVsZHMsIG5hbWUpLFxuICAgIH0pO1xuICAgIGNvbnN0IGNsZWFyRXJyb3JzID0gKG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBuYW1lID8gY29udmVydFRvQXJyYXlQYXlsb2FkKG5hbWUpIDogdW5kZWZpbmVkO1xuICAgICAgICBuYW1lcyA9PT0gbnVsbCB8fCBuYW1lcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmFtZXMuZm9yRWFjaCgoaW5wdXROYW1lKSA9PiB1bnNldChfZm9ybVN0YXRlLmVycm9ycywgaW5wdXROYW1lKSk7XG4gICAgICAgIGlmIChuYW1lcykge1xuICAgICAgICAgICAgLy8gRW1pdCBmb3IgZWFjaCBjbGVhcmVkIGZpZWxkIHdpdGggdGhlIGZpZWxkIG5hbWUgc28gdGhhdFxuICAgICAgICAgICAgLy8gc2hvdWxkU3Vic2NyaWJlQnlOYW1lIGNhbiBmaWx0ZXIgYW5kIGF2b2lkIGJyb2FkIHJlLXJlbmRlcnNcbiAgICAgICAgICAgIG5hbWVzLmZvckVhY2goKGlucHV0TmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogaW5wdXROYW1lLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IF9mb3JtU3RhdGUuZXJyb3JzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBDbGVhciBhbGwgZXJyb3JzIC0gZW1pdCB3aXRob3V0IG5hbWUgdG8gbm90aWZ5IGFsbCBzdWJzY3JpYmVyc1xuICAgICAgICAgICAgX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgICAgIGVycm9yczoge30sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3Qgc2V0RXJyb3IgPSAobmFtZSwgZXJyb3IsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgcmVmID0gKGdldChfZmllbGRzLCBuYW1lLCB7IF9mOiB7fSB9KS5fZiB8fCB7fSkucmVmO1xuICAgICAgICBjb25zdCBjdXJyZW50RXJyb3IgPSBnZXQoX2Zvcm1TdGF0ZS5lcnJvcnMsIG5hbWUpIHx8IHt9O1xuICAgICAgICAvLyBEb24ndCBvdmVycmlkZSBleGlzdGluZyBlcnJvciBtZXNzYWdlcyBlbHNld2hlcmUgaW4gdGhlIG9iamVjdCB0cmVlLlxuICAgICAgICBjb25zdCB7IHJlZjogY3VycmVudFJlZiwgbWVzc2FnZSwgdHlwZSwgLi4ucmVzdE9mRXJyb3JUcmVlIH0gPSBjdXJyZW50RXJyb3I7XG4gICAgICAgIHNldChfZm9ybVN0YXRlLmVycm9ycywgbmFtZSwge1xuICAgICAgICAgICAgLi4ucmVzdE9mRXJyb3JUcmVlLFxuICAgICAgICAgICAgLi4uZXJyb3IsXG4gICAgICAgICAgICByZWYsXG4gICAgICAgIH0pO1xuICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgZXJyb3JzOiBfZm9ybVN0YXRlLmVycm9ycyxcbiAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgb3B0aW9ucyAmJiBvcHRpb25zLnNob3VsZEZvY3VzICYmIHJlZiAmJiByZWYuZm9jdXMgJiYgcmVmLmZvY3VzKCk7XG4gICAgfTtcbiAgICBjb25zdCB3YXRjaCA9IChuYW1lLCBkZWZhdWx0VmFsdWUpID0+IGlzRnVuY3Rpb24obmFtZSlcbiAgICAgICAgPyBfc3ViamVjdHMuc3RhdGUuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IChwYXlsb2FkKSA9PiAndmFsdWVzJyBpbiBwYXlsb2FkICYmXG4gICAgICAgICAgICAgICAgbmFtZShwYXlsb2FkLnZhbHVlcyB8fCBfZ2V0V2F0Y2godW5kZWZpbmVkLCBkZWZhdWx0VmFsdWUpLCBwYXlsb2FkKSxcbiAgICAgICAgfSlcbiAgICAgICAgOiBfZ2V0V2F0Y2gobmFtZSwgZGVmYXVsdFZhbHVlLCB0cnVlKTtcbiAgICBjb25zdCBfc3Vic2NyaWJlID0gKHByb3BzKSA9PiBfc3ViamVjdHMuc3RhdGUuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGZvcm1TdGF0ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHNob3VsZFN1YnNjcmliZUJ5TmFtZShwcm9wcy5uYW1lLCBmb3JtU3RhdGUubmFtZSwgcHJvcHMuZXhhY3QpICYmXG4gICAgICAgICAgICAgICAgc2hvdWxkUmVuZGVyRm9ybVN0YXRlKGZvcm1TdGF0ZSwgcHJvcHMuZm9ybVN0YXRlIHx8IF9wcm94eUZvcm1TdGF0ZSwgX3NldEZvcm1TdGF0ZSwgcHJvcHMucmVSZW5kZXJSb290KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0geyAuLi5fZm9ybVZhbHVlcyB9O1xuICAgICAgICAgICAgICAgIHByb3BzLmNhbGxiYWNrKHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzOiBzbmFwc2hvdCxcbiAgICAgICAgICAgICAgICAgICAgLi4uX2Zvcm1TdGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgLi4uZm9ybVN0YXRlLFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWVzOiBfZGVmYXVsdFZhbHVlcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KS51bnN1YnNjcmliZTtcbiAgICBjb25zdCBzdWJzY3JpYmUgPSAocHJvcHMpID0+IHtcbiAgICAgICAgX3N0YXRlLm1vdW50ID0gdHJ1ZTtcbiAgICAgICAgX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlID0ge1xuICAgICAgICAgICAgLi4uX3Byb3h5U3Vic2NyaWJlRm9ybVN0YXRlLFxuICAgICAgICAgICAgLi4ucHJvcHMuZm9ybVN0YXRlLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gX3N1YnNjcmliZSh7XG4gICAgICAgICAgICAuLi5wcm9wcyxcbiAgICAgICAgICAgIGZvcm1TdGF0ZToge1xuICAgICAgICAgICAgICAgIC4uLmRlZmF1bHRQcm94eUZvcm1TdGF0ZSxcbiAgICAgICAgICAgICAgICAuLi5wcm9wcy5mb3JtU3RhdGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHVucmVnaXN0ZXIgPSAobmFtZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGROYW1lIG9mIG5hbWUgPyBjb252ZXJ0VG9BcnJheVBheWxvYWQobmFtZSkgOiBfbmFtZXMubW91bnQpIHtcbiAgICAgICAgICAgIF9uYW1lcy5tb3VudC5kZWxldGUoZmllbGROYW1lKTtcbiAgICAgICAgICAgIF9uYW1lcy5hcnJheS5kZWxldGUoZmllbGROYW1lKTtcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5rZWVwVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB1bnNldChfZmllbGRzLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgICAgIHVuc2V0KF9mb3JtVmFsdWVzLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgIW9wdGlvbnMua2VlcEVycm9yICYmIHVuc2V0KF9mb3JtU3RhdGUuZXJyb3JzLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgIW9wdGlvbnMua2VlcERpcnR5ICYmIHVuc2V0KF9mb3JtU3RhdGUuZGlydHlGaWVsZHMsIGZpZWxkTmFtZSk7XG4gICAgICAgICAgICAhb3B0aW9ucy5rZWVwVG91Y2hlZCAmJiB1bnNldChfZm9ybVN0YXRlLnRvdWNoZWRGaWVsZHMsIGZpZWxkTmFtZSk7XG4gICAgICAgICAgICAhb3B0aW9ucy5rZWVwSXNWYWxpZGF0aW5nICYmXG4gICAgICAgICAgICAgICAgdW5zZXQoX2Zvcm1TdGF0ZS52YWxpZGF0aW5nRmllbGRzLCBmaWVsZE5hbWUpO1xuICAgICAgICAgICAgIV9vcHRpb25zLnNob3VsZFVucmVnaXN0ZXIgJiZcbiAgICAgICAgICAgICAgICAhb3B0aW9ucy5rZWVwRGVmYXVsdFZhbHVlICYmXG4gICAgICAgICAgICAgICAgdW5zZXQoX2RlZmF1bHRWYWx1ZXMsIGZpZWxkTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgdmFsdWVzOiBjbG9uZU9iamVjdChfZm9ybVZhbHVlcyksXG4gICAgICAgIH0pO1xuICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAuLi5fZm9ybVN0YXRlLFxuICAgICAgICAgICAgLi4uKCFvcHRpb25zLmtlZXBEaXJ0eSA/IHt9IDogeyBpc0RpcnR5OiBfZ2V0RGlydHkoKSB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgICFvcHRpb25zLmtlZXBJc1ZhbGlkICYmIF9zZXRWYWxpZCgpO1xuICAgIH07XG4gICAgY29uc3QgX3NldERpc2FibGVkRmllbGQgPSAoeyBkaXNhYmxlZCwgbmFtZSwgfSkgPT4ge1xuICAgICAgICBpZiAoKGlzQm9vbGVhbihkaXNhYmxlZCkgJiYgX3N0YXRlLm1vdW50KSB8fFxuICAgICAgICAgICAgISFkaXNhYmxlZCB8fFxuICAgICAgICAgICAgX25hbWVzLmRpc2FibGVkLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgY29uc3Qgd2FzRGlzYWJsZWQgPSBfbmFtZXMuZGlzYWJsZWQuaGFzKG5hbWUpO1xuICAgICAgICAgICAgY29uc3QgaXNEaXNhYmxlZCA9ICEhZGlzYWJsZWQ7XG4gICAgICAgICAgICBjb25zdCBkaXNhYmxlZFN0YXRlQ2hhbmdlZCA9IHdhc0Rpc2FibGVkICE9PSBpc0Rpc2FibGVkO1xuICAgICAgICAgICAgZGlzYWJsZWQgPyBfbmFtZXMuZGlzYWJsZWQuYWRkKG5hbWUpIDogX25hbWVzLmRpc2FibGVkLmRlbGV0ZShuYW1lKTtcbiAgICAgICAgICAgIGRpc2FibGVkU3RhdGVDaGFuZ2VkICYmIF9zdGF0ZS5tb3VudCAmJiAhX3N0YXRlLmFjdGlvbiAmJiBfc2V0VmFsaWQoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgY29uc3QgcmVnaXN0ZXIgPSAobmFtZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGxldCBmaWVsZCA9IGdldChfZmllbGRzLCBuYW1lKTtcbiAgICAgICAgY29uc3QgZGlzYWJsZWRJc0RlZmluZWQgPSBpc0Jvb2xlYW4ob3B0aW9ucy5kaXNhYmxlZCkgfHwgaXNCb29sZWFuKF9vcHRpb25zLmRpc2FibGVkKTtcbiAgICAgICAgY29uc3Qgc2hvdWxkUmV2YWxpZGF0ZVJlbW91bnQgPSAhX25hbWVzLnJlZ2lzdGVyTmFtZS5oYXMobmFtZSkgJiYgZmllbGQgJiYgZmllbGQuX2YgJiYgIWZpZWxkLl9mLm1vdW50O1xuICAgICAgICBzZXQoX2ZpZWxkcywgbmFtZSwge1xuICAgICAgICAgICAgLi4uKGZpZWxkIHx8IHt9KSxcbiAgICAgICAgICAgIF9mOiB7XG4gICAgICAgICAgICAgICAgLi4uKGZpZWxkICYmIGZpZWxkLl9mID8gZmllbGQuX2YgOiB7IHJlZjogeyBuYW1lIH0gfSksXG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICBtb3VudDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIF9uYW1lcy5tb3VudC5hZGQobmFtZSk7XG4gICAgICAgIGlmIChmaWVsZCAmJiAhc2hvdWxkUmV2YWxpZGF0ZVJlbW91bnQpIHtcbiAgICAgICAgICAgIF9zZXREaXNhYmxlZEZpZWxkKHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogaXNCb29sZWFuKG9wdGlvbnMuZGlzYWJsZWQpXG4gICAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5kaXNhYmxlZFxuICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zLmRpc2FibGVkLFxuICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVwZGF0ZVZhbGlkQW5kVmFsdWUobmFtZSwgdHJ1ZSwgb3B0aW9ucy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLihkaXNhYmxlZElzRGVmaW5lZFxuICAgICAgICAgICAgICAgID8geyBkaXNhYmxlZDogb3B0aW9ucy5kaXNhYmxlZCB8fCBfb3B0aW9ucy5kaXNhYmxlZCB9XG4gICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAuLi4oX29wdGlvbnMucHJvZ3Jlc3NpdmVcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ6ICEhb3B0aW9ucy5yZXF1aXJlZCxcbiAgICAgICAgICAgICAgICAgICAgbWluOiBnZXRSdWxlVmFsdWUob3B0aW9ucy5taW4pLFxuICAgICAgICAgICAgICAgICAgICBtYXg6IGdldFJ1bGVWYWx1ZShvcHRpb25zLm1heCksXG4gICAgICAgICAgICAgICAgICAgIG1pbkxlbmd0aDogZ2V0UnVsZVZhbHVlKG9wdGlvbnMubWluTGVuZ3RoKSxcbiAgICAgICAgICAgICAgICAgICAgbWF4TGVuZ3RoOiBnZXRSdWxlVmFsdWUob3B0aW9ucy5tYXhMZW5ndGgpLFxuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuOiBnZXRSdWxlVmFsdWUob3B0aW9ucy5wYXR0ZXJuKSxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgb25DaGFuZ2UsXG4gICAgICAgICAgICBvbkJsdXI6IG9uQ2hhbmdlLFxuICAgICAgICAgICAgcmVmOiAocmVmKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZikge1xuICAgICAgICAgICAgICAgICAgICBfbmFtZXMucmVnaXN0ZXJOYW1lLmFkZChuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIobmFtZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIF9uYW1lcy5yZWdpc3Rlck5hbWUuZGVsZXRlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZCA9IGdldChfZmllbGRzLCBuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRSZWYgPSBpc1VuZGVmaW5lZChyZWYudmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJlZi5xdWVyeVNlbGVjdG9yQWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyByZWYucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsc2VsZWN0LHRleHRhcmVhJylbMF0gfHwgcmVmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIDogcmVmO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByYWRpb09yQ2hlY2tib3ggPSBpc1JhZGlvT3JDaGVja2JveChmaWVsZFJlZik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZnMgPSBmaWVsZC5fZi5yZWZzIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmFkaW9PckNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJlZnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24gPT09IGZpZWxkUmVmKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBmaWVsZFJlZiA9PT0gZmllbGQuX2YucmVmKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0KF9maWVsZHMsIG5hbWUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9mOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZmllbGQuX2YsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKHJhZGlvT3JDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnM6IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5yZWZzLmZpbHRlcihsaXZlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4oQXJyYXkuaXNBcnJheShnZXQoX2RlZmF1bHRWYWx1ZXMsIG5hbWUpKSA/IFt7fV0gOiBbXSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmOiB7IHR5cGU6IGZpZWxkUmVmLnR5cGUsIG5hbWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHsgcmVmOiBmaWVsZFJlZiB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB1cGRhdGVWYWxpZEFuZFZhbHVlKG5hbWUsIGZhbHNlLCB1bmRlZmluZWQsIGZpZWxkUmVmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkID0gZ2V0KF9maWVsZHMsIG5hbWUsIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkLl9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZC5fZi5tb3VudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIChfb3B0aW9ucy5zaG91bGRVbnJlZ2lzdGVyIHx8IG9wdGlvbnMuc2hvdWxkVW5yZWdpc3RlcikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICEoaXNOYW1lSW5GaWVsZEFycmF5KF9uYW1lcy5hcnJheSwgbmFtZSkgJiYgX3N0YXRlLmFjdGlvbikgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIF9uYW1lcy51bk1vdW50LmFkZChuYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH07XG4gICAgY29uc3QgX2ZvY3VzRXJyb3IgPSAoKSA9PiBfb3B0aW9ucy5zaG91bGRGb2N1c0Vycm9yICYmXG4gICAgICAgIGl0ZXJhdGVGaWVsZHNCeUFjdGlvbihfZmllbGRzLCBfZm9jdXNJbnB1dCwgX25hbWVzLm1vdW50KTtcbiAgICBjb25zdCBfZGlzYWJsZUZvcm0gPSAoZGlzYWJsZWQpID0+IHtcbiAgICAgICAgaWYgKGlzQm9vbGVhbihkaXNhYmxlZCkpIHtcbiAgICAgICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHsgZGlzYWJsZWQgfSk7XG4gICAgICAgICAgICBpdGVyYXRlRmllbGRzQnlBY3Rpb24oX2ZpZWxkcywgKHJlZiwgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaWVsZCA9IGdldChfZmllbGRzLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5kaXNhYmxlZCA9IGN1cnJlbnRGaWVsZC5fZi5kaXNhYmxlZCB8fCBkaXNhYmxlZDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY3VycmVudEZpZWxkLl9mLnJlZnMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmllbGQuX2YucmVmcy5mb3JFYWNoKChpbnB1dFJlZikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0UmVmLmRpc2FibGVkID0gY3VycmVudEZpZWxkLl9mLmRpc2FibGVkIHx8IGRpc2FibGVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IChvblZhbGlkLCBvbkludmFsaWQpID0+IGFzeW5jIChlKSA9PiB7XG4gICAgICAgIGxldCBvblZhbGlkRXJyb3IgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0ICYmIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUucGVyc2lzdCAmJlxuICAgICAgICAgICAgICAgIGUucGVyc2lzdCgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBmaWVsZFZhbHVlcyA9IGNsb25lT2JqZWN0KF9mb3JtVmFsdWVzKTtcbiAgICAgICAgX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgaXNTdWJtaXR0aW5nOiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKF9vcHRpb25zLnJlc29sdmVyKSB7XG4gICAgICAgICAgICBjb25zdCB7IGVycm9ycywgdmFsdWVzIH0gPSBhd2FpdCBfcnVuU2NoZW1hKCk7XG4gICAgICAgICAgICBfdXBkYXRlSXNWYWxpZGF0aW5nKCk7XG4gICAgICAgICAgICBfZm9ybVN0YXRlLmVycm9ycyA9IGVycm9ycztcbiAgICAgICAgICAgIGZpZWxkVmFsdWVzID0gY2xvbmVPYmplY3QodmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGF3YWl0IGV4ZWN1dGVCdWlsdEluVmFsaWRhdGlvbih7XG4gICAgICAgICAgICAgICAgZmllbGRzOiBfZmllbGRzLFxuICAgICAgICAgICAgICAgIGV2ZW50VHlwZTogRVZFTlRTLlNVQk1JVCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfbmFtZXMuZGlzYWJsZWQuc2l6ZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIF9uYW1lcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHVuc2V0KGZpZWxkVmFsdWVzLCBuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1bnNldChfZm9ybVN0YXRlLmVycm9ycywgUk9PVF9FUlJPUl9UWVBFKTtcbiAgICAgICAgaWYgKGlzRW1wdHlPYmplY3QoX2Zvcm1TdGF0ZS5lcnJvcnMpKSB7XG4gICAgICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAgICAgZXJyb3JzOiB7fSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBvblZhbGlkKGZpZWxkVmFsdWVzLCBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIG9uVmFsaWRFcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKG9uSW52YWxpZCkge1xuICAgICAgICAgICAgICAgIGF3YWl0IG9uSW52YWxpZCh7IC4uLl9mb3JtU3RhdGUuZXJyb3JzIH0sIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2ZvY3VzRXJyb3IoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoX2ZvY3VzRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIF9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgIGlzU3VibWl0dGVkOiB0cnVlLFxuICAgICAgICAgICAgaXNTdWJtaXR0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzU3VibWl0U3VjY2Vzc2Z1bDogaXNFbXB0eU9iamVjdChfZm9ybVN0YXRlLmVycm9ycykgJiYgIW9uVmFsaWRFcnJvcixcbiAgICAgICAgICAgIHN1Ym1pdENvdW50OiBfZm9ybVN0YXRlLnN1Ym1pdENvdW50ICsgMSxcbiAgICAgICAgICAgIGVycm9yczogX2Zvcm1TdGF0ZS5lcnJvcnMsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob25WYWxpZEVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBvblZhbGlkRXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IHJlc2V0RmllbGQgPSAobmFtZSwgb3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGlmIChnZXQoX2ZpZWxkcywgbmFtZSkpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChvcHRpb25zLmRlZmF1bHRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZShuYW1lLCBjbG9uZU9iamVjdChnZXQoX2RlZmF1bHRWYWx1ZXMsIG5hbWUpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRWYWx1ZShuYW1lLCBvcHRpb25zLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgc2V0KF9kZWZhdWx0VmFsdWVzLCBuYW1lLCBjbG9uZU9iamVjdChvcHRpb25zLmRlZmF1bHRWYWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmtlZXBUb3VjaGVkKSB7XG4gICAgICAgICAgICAgICAgdW5zZXQoX2Zvcm1TdGF0ZS50b3VjaGVkRmllbGRzLCBuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5rZWVwRGlydHkpIHtcbiAgICAgICAgICAgICAgICB1bnNldChfZm9ybVN0YXRlLmRpcnR5RmllbGRzLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBfZm9ybVN0YXRlLmlzRGlydHkgPSBvcHRpb25zLmRlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgICAgICAgICA/IF9nZXREaXJ0eShuYW1lLCBjbG9uZU9iamVjdChnZXQoX2RlZmF1bHRWYWx1ZXMsIG5hbWUpKSlcbiAgICAgICAgICAgICAgICAgICAgOiBfZ2V0RGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5rZWVwRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB1bnNldChfZm9ybVN0YXRlLmVycm9ycywgbmFtZSk7XG4gICAgICAgICAgICAgICAgX3Byb3h5Rm9ybVN0YXRlLmlzVmFsaWQgJiYgX3NldFZhbGlkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7IC4uLl9mb3JtU3RhdGUgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IF9yZXNldCA9IChmb3JtVmFsdWVzLCBrZWVwU3RhdGVPcHRpb25zID0ge30pID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZFZhbHVlcyA9IGZvcm1WYWx1ZXMgPyBjbG9uZU9iamVjdChmb3JtVmFsdWVzKSA6IF9kZWZhdWx0VmFsdWVzO1xuICAgICAgICBjb25zdCBjbG9uZVVwZGF0ZWRWYWx1ZXMgPSBjbG9uZU9iamVjdCh1cGRhdGVkVmFsdWVzKTtcbiAgICAgICAgY29uc3QgaXNFbXB0eVJlc2V0VmFsdWVzID0gaXNFbXB0eU9iamVjdChmb3JtVmFsdWVzKTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gaXNFbXB0eVJlc2V0VmFsdWVzID8gX2RlZmF1bHRWYWx1ZXMgOiBjbG9uZVVwZGF0ZWRWYWx1ZXM7XG4gICAgICAgIGlmICgha2VlcFN0YXRlT3B0aW9ucy5rZWVwRGVmYXVsdFZhbHVlcykge1xuICAgICAgICAgICAgX2RlZmF1bHRWYWx1ZXMgPSB1cGRhdGVkVmFsdWVzO1xuICAgICAgICB9XG4gICAgICAgIGlmICgha2VlcFN0YXRlT3B0aW9ucy5rZWVwVmFsdWVzKSB7XG4gICAgICAgICAgICBpZiAoa2VlcFN0YXRlT3B0aW9ucy5rZWVwRGlydHlWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZHNUb0NoZWNrID0gbmV3IFNldChbXG4gICAgICAgICAgICAgICAgICAgIC4uLl9uYW1lcy5tb3VudCxcbiAgICAgICAgICAgICAgICAgICAgLi4uT2JqZWN0LmtleXMoZ2V0RGlydHlGaWVsZHMoX2RlZmF1bHRWYWx1ZXMsIF9mb3JtVmFsdWVzKSksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZE5hbWUgb2YgQXJyYXkuZnJvbShmaWVsZHNUb0NoZWNrKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0RpcnR5ID0gZ2V0KF9mb3JtU3RhdGUuZGlydHlGaWVsZHMsIGZpZWxkTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nVmFsdWUgPSBnZXQoX2Zvcm1WYWx1ZXMsIGZpZWxkTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZ2V0KHZhbHVlcywgZmllbGROYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzRGlydHkgJiYgIWlzVW5kZWZpbmVkKGV4aXN0aW5nVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQodmFsdWVzLCBmaWVsZE5hbWUsIGV4aXN0aW5nVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc0RpcnR5ICYmICFpc1VuZGVmaW5lZChuZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKGZpZWxkTmFtZSwgbmV3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzV2ViICYmIGlzVW5kZWZpbmVkKGZvcm1WYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBfbmFtZXMubW91bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0KF9maWVsZHMsIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkLl9mKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRSZWZlcmVuY2UgPSBBcnJheS5pc0FycmF5KGZpZWxkLl9mLnJlZnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZmllbGQuX2YucmVmc1swXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGZpZWxkLl9mLnJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNIVE1MRWxlbWVudChmaWVsZFJlZmVyZW5jZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybSA9IGZpZWxkUmVmZXJlbmNlLmNsb3Nlc3QoJ2Zvcm0nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0ucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrZWVwU3RhdGVPcHRpb25zLmtlZXBGaWVsZHNSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZE5hbWUgb2YgX25hbWVzLm1vdW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShmaWVsZE5hbWUsIGdldCh2YWx1ZXMsIGZpZWxkTmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBfZmllbGRzID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgX2Zvcm1WYWx1ZXMgPSBfb3B0aW9ucy5zaG91bGRVbnJlZ2lzdGVyXG4gICAgICAgICAgICAgICAgPyBrZWVwU3RhdGVPcHRpb25zLmtlZXBEZWZhdWx0VmFsdWVzXG4gICAgICAgICAgICAgICAgICAgID8gY2xvbmVPYmplY3QoX2RlZmF1bHRWYWx1ZXMpXG4gICAgICAgICAgICAgICAgICAgIDoge31cbiAgICAgICAgICAgICAgICA6IGNsb25lT2JqZWN0KHZhbHVlcyk7XG4gICAgICAgICAgICBfc3ViamVjdHMuYXJyYXkubmV4dCh7XG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7IC4uLnZhbHVlcyB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAgICAgdmFsdWVzOiB7IC4uLnZhbHVlcyB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgX25hbWVzID0ge1xuICAgICAgICAgICAgbW91bnQ6IGtlZXBTdGF0ZU9wdGlvbnMua2VlcERpcnR5VmFsdWVzID8gX25hbWVzLm1vdW50IDogbmV3IFNldCgpLFxuICAgICAgICAgICAgdW5Nb3VudDogbmV3IFNldCgpLFxuICAgICAgICAgICAgYXJyYXk6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIHJlZ2lzdGVyTmFtZTogbmV3IFNldCgpLFxuICAgICAgICAgICAgZGlzYWJsZWQ6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIHdhdGNoOiBuZXcgU2V0KCksXG4gICAgICAgICAgICB3YXRjaEFsbDogZmFsc2UsXG4gICAgICAgICAgICBmb2N1czogJycsXG4gICAgICAgIH07XG4gICAgICAgIF9zdGF0ZS5tb3VudCA9XG4gICAgICAgICAgICAhX3Byb3h5Rm9ybVN0YXRlLmlzVmFsaWQgfHxcbiAgICAgICAgICAgICAgICAhIWtlZXBTdGF0ZU9wdGlvbnMua2VlcElzVmFsaWQgfHxcbiAgICAgICAgICAgICAgICAhIWtlZXBTdGF0ZU9wdGlvbnMua2VlcERpcnR5VmFsdWVzIHx8XG4gICAgICAgICAgICAgICAgKCFfb3B0aW9ucy5zaG91bGRVbnJlZ2lzdGVyICYmICFpc0VtcHR5T2JqZWN0KHZhbHVlcykpO1xuICAgICAgICBfc3RhdGUud2F0Y2ggPSAhIV9vcHRpb25zLnNob3VsZFVucmVnaXN0ZXI7XG4gICAgICAgIF9zdGF0ZS5rZWVwSXNWYWxpZCA9ICEha2VlcFN0YXRlT3B0aW9ucy5rZWVwSXNWYWxpZDtcbiAgICAgICAgX3N0YXRlLmFjdGlvbiA9IGZhbHNlO1xuICAgICAgICAvLyBDbGVhciBlcnJvcnMgc3luY2hyb25vdXNseSB0byBwcmV2ZW50IHZhbGlkYXRpb24gZXJyb3JzIG9uIHN1YnNlcXVlbnQgc3VibWlzc2lvbnNcbiAgICAgICAgLy8gVGhpcyBmaXhlcyB0aGUgaXNzdWUgd2hlcmUgZm9ybS5yZXNldCgpIGNhdXNlcyB2YWxpZGF0aW9uIGVycm9ycyBvbiBzdWJzZXF1ZW50XG4gICAgICAgIC8vIHN1Ym1pc3Npb25zIGluIE5leHQuanMgMTYgd2l0aCBTZXJ2ZXIgQWN0aW9uc1xuICAgICAgICBpZiAoIWtlZXBTdGF0ZU9wdGlvbnMua2VlcEVycm9ycykge1xuICAgICAgICAgICAgX2Zvcm1TdGF0ZS5lcnJvcnMgPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICBzdWJtaXRDb3VudDoga2VlcFN0YXRlT3B0aW9ucy5rZWVwU3VibWl0Q291bnRcbiAgICAgICAgICAgICAgICA/IF9mb3JtU3RhdGUuc3VibWl0Q291bnRcbiAgICAgICAgICAgICAgICA6IDAsXG4gICAgICAgICAgICBpc0RpcnR5OiBpc0VtcHR5UmVzZXRWYWx1ZXNcbiAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgOiBrZWVwU3RhdGVPcHRpb25zLmtlZXBEaXJ0eVxuICAgICAgICAgICAgICAgICAgICA/IF9mb3JtU3RhdGUuaXNEaXJ0eVxuICAgICAgICAgICAgICAgICAgICA6ICEhKGtlZXBTdGF0ZU9wdGlvbnMua2VlcERlZmF1bHRWYWx1ZXMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFkZWVwRXF1YWwoZm9ybVZhbHVlcywgX2RlZmF1bHRWYWx1ZXMpKSxcbiAgICAgICAgICAgIGlzU3VibWl0dGVkOiBrZWVwU3RhdGVPcHRpb25zLmtlZXBJc1N1Ym1pdHRlZFxuICAgICAgICAgICAgICAgID8gX2Zvcm1TdGF0ZS5pc1N1Ym1pdHRlZFxuICAgICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBkaXJ0eUZpZWxkczogaXNFbXB0eVJlc2V0VmFsdWVzXG4gICAgICAgICAgICAgICAgPyB7fVxuICAgICAgICAgICAgICAgIDoga2VlcFN0YXRlT3B0aW9ucy5rZWVwRGlydHlWYWx1ZXNcbiAgICAgICAgICAgICAgICAgICAgPyBrZWVwU3RhdGVPcHRpb25zLmtlZXBEZWZhdWx0VmFsdWVzICYmIF9mb3JtVmFsdWVzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGdldERpcnR5RmllbGRzKF9kZWZhdWx0VmFsdWVzLCBfZm9ybVZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX2Zvcm1TdGF0ZS5kaXJ0eUZpZWxkc1xuICAgICAgICAgICAgICAgICAgICA6IGtlZXBTdGF0ZU9wdGlvbnMua2VlcERlZmF1bHRWYWx1ZXMgJiYgZm9ybVZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBnZXREaXJ0eUZpZWxkcyhfZGVmYXVsdFZhbHVlcywgZm9ybVZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIDoga2VlcFN0YXRlT3B0aW9ucy5rZWVwRGlydHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9mb3JtU3RhdGUuZGlydHlGaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgdG91Y2hlZEZpZWxkczoga2VlcFN0YXRlT3B0aW9ucy5rZWVwVG91Y2hlZFxuICAgICAgICAgICAgICAgID8gX2Zvcm1TdGF0ZS50b3VjaGVkRmllbGRzXG4gICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgIGVycm9yczoga2VlcFN0YXRlT3B0aW9ucy5rZWVwRXJyb3JzID8gX2Zvcm1TdGF0ZS5lcnJvcnMgOiB7fSxcbiAgICAgICAgICAgIGlzU3VibWl0U3VjY2Vzc2Z1bDoga2VlcFN0YXRlT3B0aW9ucy5rZWVwSXNTdWJtaXRTdWNjZXNzZnVsXG4gICAgICAgICAgICAgICAgPyBfZm9ybVN0YXRlLmlzU3VibWl0U3VjY2Vzc2Z1bFxuICAgICAgICAgICAgICAgIDogZmFsc2UsXG4gICAgICAgICAgICBpc1N1Ym1pdHRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlczogX2RlZmF1bHRWYWx1ZXMsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgY29uc3QgcmVzZXQgPSAoZm9ybVZhbHVlcywga2VlcFN0YXRlT3B0aW9ucykgPT4gX3Jlc2V0KGlzRnVuY3Rpb24oZm9ybVZhbHVlcylcbiAgICAgICAgPyBmb3JtVmFsdWVzKF9mb3JtVmFsdWVzKVxuICAgICAgICA6IGZvcm1WYWx1ZXMsIHsgLi4uX29wdGlvbnMucmVzZXRPcHRpb25zLCAuLi5rZWVwU3RhdGVPcHRpb25zIH0pO1xuICAgIGNvbnN0IHNldEZvY3VzID0gKG5hbWUsIG9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZCA9IGdldChfZmllbGRzLCBuYW1lKTtcbiAgICAgICAgY29uc3QgZmllbGRSZWZlcmVuY2UgPSBmaWVsZCAmJiBmaWVsZC5fZjtcbiAgICAgICAgaWYgKGZpZWxkUmVmZXJlbmNlKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFJlZiA9IGZpZWxkUmVmZXJlbmNlLnJlZnNcbiAgICAgICAgICAgICAgICA/IGZpZWxkUmVmZXJlbmNlLnJlZnNbMF1cbiAgICAgICAgICAgICAgICA6IGZpZWxkUmVmZXJlbmNlLnJlZjtcbiAgICAgICAgICAgIGlmIChmaWVsZFJlZi5mb2N1cykge1xuICAgICAgICAgICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIGVuc3VyZSBmb2N1cyBoYXBwZW5zIGFmdGVyIGFueSBwZW5kaW5nIHN0YXRlIHVwZGF0ZXNcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGZpeGVzIHRoZSBpc3N1ZSB3aGVyZSBzZXRGb2N1cyBkb2Vzbid0IHdvcmsgaW1tZWRpYXRlbHkgYWZ0ZXIgc2V0RXJyb3JcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRSZWYuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5zaG91bGRTZWxlY3QgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzRnVuY3Rpb24oZmllbGRSZWYuc2VsZWN0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRSZWYuc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IF9zZXRGb3JtU3RhdGUgPSAodXBkYXRlZEZvcm1TdGF0ZSkgPT4ge1xuICAgICAgICBfZm9ybVN0YXRlID0ge1xuICAgICAgICAgICAgLi4uX2Zvcm1TdGF0ZSxcbiAgICAgICAgICAgIC4uLnVwZGF0ZWRGb3JtU3RhdGUsXG4gICAgICAgIH07XG4gICAgfTtcbiAgICBjb25zdCBfcmVzZXREZWZhdWx0VmFsdWVzID0gKCkgPT4gaXNGdW5jdGlvbihfb3B0aW9ucy5kZWZhdWx0VmFsdWVzKSAmJlxuICAgICAgICBfb3B0aW9ucy5kZWZhdWx0VmFsdWVzKCkudGhlbigodmFsdWVzKSA9PiB7XG4gICAgICAgICAgICByZXNldCh2YWx1ZXMsIF9vcHRpb25zLnJlc2V0T3B0aW9ucyk7XG4gICAgICAgICAgICBfc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICBjb25zdCBtZXRob2RzID0ge1xuICAgICAgICBjb250cm9sOiB7XG4gICAgICAgICAgICByZWdpc3RlcixcbiAgICAgICAgICAgIHVucmVnaXN0ZXIsXG4gICAgICAgICAgICBnZXRGaWVsZFN0YXRlLFxuICAgICAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICAgICAgc2V0RXJyb3IsXG4gICAgICAgICAgICBfc3Vic2NyaWJlLFxuICAgICAgICAgICAgX3J1blNjaGVtYSxcbiAgICAgICAgICAgIF91cGRhdGVJc1ZhbGlkYXRpbmcsXG4gICAgICAgICAgICBfZm9jdXNFcnJvcixcbiAgICAgICAgICAgIF9nZXRXYXRjaCxcbiAgICAgICAgICAgIF9nZXREaXJ0eSxcbiAgICAgICAgICAgIF9zZXRWYWxpZCxcbiAgICAgICAgICAgIF9zZXRGaWVsZEFycmF5LFxuICAgICAgICAgICAgX3NldERpc2FibGVkRmllbGQsXG4gICAgICAgICAgICBfc2V0RXJyb3JzLFxuICAgICAgICAgICAgX2dldEZpZWxkQXJyYXksXG4gICAgICAgICAgICBfcmVzZXQsXG4gICAgICAgICAgICBfcmVzZXREZWZhdWx0VmFsdWVzLFxuICAgICAgICAgICAgX3JlbW92ZVVubW91bnRlZCxcbiAgICAgICAgICAgIF9kaXNhYmxlRm9ybSxcbiAgICAgICAgICAgIF9zdWJqZWN0cyxcbiAgICAgICAgICAgIF9wcm94eUZvcm1TdGF0ZSxcbiAgICAgICAgICAgIGdldCBfZmllbGRzKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZmllbGRzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBfZm9ybVZhbHVlcygpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2Zvcm1WYWx1ZXM7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IF9zdGF0ZSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX3N0YXRlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNldCBfc3RhdGUodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfc3RhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBnZXQgX2RlZmF1bHRWYWx1ZXMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9kZWZhdWx0VmFsdWVzO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldCBfbmFtZXMoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9uYW1lcztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgX25hbWVzKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgX25hbWVzID0gdmFsdWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IF9mb3JtU3RhdGUoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9mb3JtU3RhdGU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IF9vcHRpb25zKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfb3B0aW9ucztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzZXQgX29wdGlvbnModmFsdWUpIHtcbiAgICAgICAgICAgICAgICBfb3B0aW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uX29wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzdWJzY3JpYmUsXG4gICAgICAgIHRyaWdnZXIsXG4gICAgICAgIHJlZ2lzdGVyLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIHdhdGNoLFxuICAgICAgICBzZXRWYWx1ZSxcbiAgICAgICAgc2V0VmFsdWVzLFxuICAgICAgICBnZXRWYWx1ZXMsXG4gICAgICAgIHJlc2V0LFxuICAgICAgICByZXNldEZpZWxkLFxuICAgICAgICBjbGVhckVycm9ycyxcbiAgICAgICAgdW5yZWdpc3RlcixcbiAgICAgICAgc2V0RXJyb3IsXG4gICAgICAgIHNldEZvY3VzLFxuICAgICAgICBnZXRGaWVsZFN0YXRlLFxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4ubWV0aG9kcyxcbiAgICAgICAgZm9ybUNvbnRyb2w6IG1ldGhvZHMsXG4gICAgfTtcbn1cblxudmFyIGdlbmVyYXRlSWQgPSAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5yYW5kb21VVUlEKSB7XG4gICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpO1xuICAgIH1cbiAgICBjb25zdCBkID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSAndW5kZWZpbmVkJyA/IERhdGUubm93KCkgOiBwZXJmb3JtYW5jZS5ub3coKSAqIDEwMDA7XG4gICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgKGMpID0+IHtcbiAgICAgICAgY29uc3QgciA9ICgoTWF0aC5yYW5kb20oKSAqIDE2ICsgZCkgJSAxNikgfCAwO1xuICAgICAgICByZXR1cm4gKGMgPT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4OCkudG9TdHJpbmcoMTYpO1xuICAgIH0pO1xufTtcblxudmFyIGdldEZvY3VzRmllbGROYW1lID0gKG5hbWUsIGluZGV4LCBvcHRpb25zID0ge30pID0+IG9wdGlvbnMuc2hvdWxkRm9jdXMgfHwgaXNVbmRlZmluZWQob3B0aW9ucy5zaG91bGRGb2N1cylcbiAgICA/IG9wdGlvbnMuZm9jdXNOYW1lIHx8XG4gICAgICAgIGAke25hbWV9LiR7aXNVbmRlZmluZWQob3B0aW9ucy5mb2N1c0luZGV4KSA/IGluZGV4IDogb3B0aW9ucy5mb2N1c0luZGV4fS5gXG4gICAgOiAnJztcblxudmFyIGFwcGVuZEF0ID0gKGRhdGEsIHZhbHVlKSA9PiBbXG4gICAgLi4uZGF0YSxcbiAgICAuLi5jb252ZXJ0VG9BcnJheVBheWxvYWQodmFsdWUpLFxuXTtcblxudmFyIGZpbGxFbXB0eUFycmF5ID0gKHZhbHVlKSA9PiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcCgoKSA9PiB1bmRlZmluZWQpIDogdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpbnNlcnQoZGF0YSwgaW5kZXgsIHZhbHVlKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgLi4uZGF0YS5zbGljZSgwLCBpbmRleCksXG4gICAgICAgIC4uLmNvbnZlcnRUb0FycmF5UGF5bG9hZCh2YWx1ZSksXG4gICAgICAgIC4uLmRhdGEuc2xpY2UoaW5kZXgpLFxuICAgIF07XG59XG5cbnZhciBtb3ZlQXJyYXlBdCA9IChkYXRhLCBmcm9tLCB0bykgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGlmIChpc1VuZGVmaW5lZChkYXRhW3RvXSkpIHtcbiAgICAgICAgZGF0YVt0b10gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGRhdGEuc3BsaWNlKHRvLCAwLCBkYXRhLnNwbGljZShmcm9tLCAxKVswXSk7XG4gICAgcmV0dXJuIGRhdGE7XG59O1xuXG52YXIgcHJlcGVuZEF0ID0gKGRhdGEsIHZhbHVlKSA9PiBbXG4gICAgLi4uY29udmVydFRvQXJyYXlQYXlsb2FkKHZhbHVlKSxcbiAgICAuLi5jb252ZXJ0VG9BcnJheVBheWxvYWQoZGF0YSksXG5dO1xuXG5mdW5jdGlvbiByZW1vdmVBdEluZGV4ZXMoZGF0YSwgaW5kZXhlcykge1xuICAgIGxldCBpID0gMDtcbiAgICBjb25zdCB0ZW1wID0gWy4uLmRhdGFdO1xuICAgIGZvciAoY29uc3QgaW5kZXggb2YgaW5kZXhlcykge1xuICAgICAgICB0ZW1wLnNwbGljZShpbmRleCAtIGksIDEpO1xuICAgICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiBjb21wYWN0KHRlbXApLmxlbmd0aCA/IHRlbXAgOiBbXTtcbn1cbnZhciByZW1vdmVBcnJheUF0ID0gKGRhdGEsIGluZGV4KSA9PiBpc1VuZGVmaW5lZChpbmRleClcbiAgICA/IFtdXG4gICAgOiByZW1vdmVBdEluZGV4ZXMoZGF0YSwgY29udmVydFRvQXJyYXlQYXlsb2FkKGluZGV4KS5zb3J0KChhLCBiKSA9PiBhIC0gYikpO1xuXG52YXIgc3dhcEFycmF5QXQgPSAoZGF0YSwgaW5kZXhBLCBpbmRleEIpID0+IHtcbiAgICBbZGF0YVtpbmRleEFdLCBkYXRhW2luZGV4Ql1dID0gW2RhdGFbaW5kZXhCXSwgZGF0YVtpbmRleEFdXTtcbn07XG5cbnZhciB1cGRhdGVBdCA9IChmaWVsZFZhbHVlcywgaW5kZXgsIHZhbHVlKSA9PiB7XG4gICAgZmllbGRWYWx1ZXNbaW5kZXhdID0gdmFsdWU7XG4gICAgcmV0dXJuIGZpZWxkVmFsdWVzO1xufTtcblxuLyoqXG4gKiBBIGN1c3RvbSBob29rIHRoYXQgZXhwb3NlcyBjb252ZW5pZW50IG1ldGhvZHMgdG8gcGVyZm9ybSBvcGVyYXRpb25zIHdpdGggYSBsaXN0IG9mIGR5bmFtaWMgaW5wdXRzIHRoYXQgbmVlZCB0byBiZSBhcHBlbmRlZCwgdXBkYXRlZCwgcmVtb3ZlZCBldGMuIOKAoiBbRGVtb10oaHR0cHM6Ly9jb2Rlc2FuZGJveC5pby9zL3JlYWN0LWhvb2stZm9ybS11c2VmaWVsZGFycmF5LXNzdWduKSDigKIgW1ZpZGVvXShodHRwczovL3lvdXR1LmJlLzRNcmJmR1NGWTJBKVxuICpcbiAqIEByZW1hcmtzXG4gKiBbQVBJXShodHRwczovL3JlYWN0LWhvb2stZm9ybS5jb20vZG9jcy91c2VmaWVsZGFycmF5KSDigKIgW0RlbW9dKGh0dHBzOi8vY29kZXNhbmRib3guaW8vcy9yZWFjdC1ob29rLWZvcm0tdXNlZmllbGRhcnJheS1zc3VnbilcbiAqXG4gKiBAcGFyYW0gcHJvcHMgLSB1c2VGaWVsZEFycmF5IHByb3BzXG4gKlxuICogQHJldHVybnMgbWV0aG9kcyAtIGZ1bmN0aW9ucyB0byBtYW5pcHVsYXRlIHdpdGggdGhlIEZpZWxkIEFycmF5cyAoZHluYW1pYyBpbnB1dHMpIHtAbGluayBVc2VGaWVsZEFycmF5UmV0dXJufVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgeyByZWdpc3RlciwgY29udHJvbCwgaGFuZGxlU3VibWl0LCByZXNldCwgdHJpZ2dlciwgc2V0RXJyb3IgfSA9IHVzZUZvcm0oe1xuICogICAgIGRlZmF1bHRWYWx1ZXM6IHtcbiAqICAgICAgIHRlc3Q6IFtdXG4gKiAgICAgfVxuICogICB9KTtcbiAqICAgY29uc3QgeyBmaWVsZHMsIGFwcGVuZCB9ID0gdXNlRmllbGRBcnJheSh7XG4gKiAgICAgY29udHJvbCxcbiAqICAgICBuYW1lOiBcInRlc3RcIlxuICogICB9KTtcbiAqXG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGZvcm0gb25TdWJtaXQ9e2hhbmRsZVN1Ym1pdChkYXRhID0+IGNvbnNvbGUubG9nKGRhdGEpKX0+XG4gKiAgICAgICB7ZmllbGRzLm1hcCgoaXRlbSwgaW5kZXgpID0+IChcbiAqICAgICAgICAgIDxpbnB1dCBrZXk9e2l0ZW0uaWR9IHsuLi5yZWdpc3RlcihgdGVzdC4ke2luZGV4fS5maXJzdE5hbWVgKX0gIC8+XG4gKiAgICAgICApKX1cbiAqICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IGFwcGVuZCh7IGZpcnN0TmFtZTogXCJiaWxsXCIgfSl9PlxuICogICAgICAgICBhcHBlbmRcbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgICAgPGlucHV0IHR5cGU9XCJzdWJtaXRcIiAvPlxuICogICAgIDwvZm9ybT5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICovXG5mdW5jdGlvbiB1c2VGaWVsZEFycmF5KHByb3BzKSB7XG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB1c2VGb3JtQ29udHJvbENvbnRleHQoKTtcbiAgICBjb25zdCB7IGNvbnRyb2wgPSBmb3JtQ29udHJvbCwgbmFtZSwga2V5TmFtZSA9ICdpZCcsIHNob3VsZFVucmVnaXN0ZXIsIHJ1bGVzLCB9ID0gcHJvcHM7XG4gICAgY29uc3QgW2ZpZWxkcywgc2V0RmllbGRzXSA9IFJlYWN0LnVzZVN0YXRlKGNvbnRyb2wuX2dldEZpZWxkQXJyYXkobmFtZSkpO1xuICAgIGNvbnN0IGlkcyA9IFJlYWN0LnVzZVJlZihjb250cm9sLl9nZXRGaWVsZEFycmF5KG5hbWUpLm1hcChnZW5lcmF0ZUlkKSk7XG4gICAgY29uc3QgX2FjdGlvbmVkID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICBjb250cm9sLl9uYW1lcy5hcnJheS5hZGQobmFtZSk7XG4gICAgUmVhY3QudXNlTWVtbygoKSA9PiBydWxlcyAmJlxuICAgICAgICBmaWVsZHMubGVuZ3RoID49IDAgJiZcbiAgICAgICAgY29udHJvbC5yZWdpc3RlcihuYW1lLCBydWxlcyksIFtjb250cm9sLCBuYW1lLCBmaWVsZHMubGVuZ3RoLCBydWxlc10pO1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCkgPT4gY29udHJvbC5fc3ViamVjdHMuYXJyYXkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHsgdmFsdWVzLCBuYW1lOiBmaWVsZEFycmF5TmFtZSwgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZpZWxkQXJyYXlOYW1lID09PSBuYW1lIHx8ICFmaWVsZEFycmF5TmFtZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0KHZhbHVlcywgbmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmllbGRWYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEZpZWxkcyhmaWVsZFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgICAgIGlkcy5jdXJyZW50ID0gZmllbGRWYWx1ZXMubWFwKGdlbmVyYXRlSWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICB9KS51bnN1YnNjcmliZSwgW2NvbnRyb2wsIG5hbWVdKTtcbiAgICBjb25zdCB1cGRhdGVWYWx1ZXMgPSBSZWFjdC51c2VDYWxsYmFjaygodXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMpID0+IHtcbiAgICAgICAgX2FjdGlvbmVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBjb250cm9sLl9zZXRGaWVsZEFycmF5KG5hbWUsIHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzKTtcbiAgICB9LCBbY29udHJvbCwgbmFtZV0pO1xuICAgIGNvbnN0IGFwcGVuZCA9ICh2YWx1ZSwgb3B0aW9ucykgPT4ge1xuICAgICAgICBjb25zdCBhcHBlbmRWYWx1ZSA9IGNvbnZlcnRUb0FycmF5UGF5bG9hZChjbG9uZU9iamVjdCh2YWx1ZSkpO1xuICAgICAgICBjb25zdCB1cGRhdGVkRmllbGRBcnJheVZhbHVlcyA9IGFwcGVuZEF0KGNvbnRyb2wuX2dldEZpZWxkQXJyYXkobmFtZSksIGFwcGVuZFZhbHVlKTtcbiAgICAgICAgY29udHJvbC5fbmFtZXMuZm9jdXMgPSBnZXRGb2N1c0ZpZWxkTmFtZShuYW1lLCB1cGRhdGVkRmllbGRBcnJheVZhbHVlcy5sZW5ndGggLSAxLCBvcHRpb25zKTtcbiAgICAgICAgaWRzLmN1cnJlbnQgPSBhcHBlbmRBdChpZHMuY3VycmVudCwgYXBwZW5kVmFsdWUubWFwKGdlbmVyYXRlSWQpKTtcbiAgICAgICAgdXBkYXRlVmFsdWVzKHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzKTtcbiAgICAgICAgc2V0RmllbGRzKHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzKTtcbiAgICAgICAgY29udHJvbC5fc2V0RmllbGRBcnJheShuYW1lLCB1cGRhdGVkRmllbGRBcnJheVZhbHVlcywgYXBwZW5kQXQsIHtcbiAgICAgICAgICAgIGFyZ0E6IGZpbGxFbXB0eUFycmF5KHZhbHVlKSxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBwcmVwZW5kID0gKHZhbHVlLCBvcHRpb25zKSA9PiB7XG4gICAgICAgIGNvbnN0IHByZXBlbmRWYWx1ZSA9IGNvbnZlcnRUb0FycmF5UGF5bG9hZChjbG9uZU9iamVjdCh2YWx1ZSkpO1xuICAgICAgICBjb25zdCB1cGRhdGVkRmllbGRBcnJheVZhbHVlcyA9IHByZXBlbmRBdChjb250cm9sLl9nZXRGaWVsZEFycmF5KG5hbWUpLCBwcmVwZW5kVmFsdWUpO1xuICAgICAgICBjb250cm9sLl9uYW1lcy5mb2N1cyA9IGdldEZvY3VzRmllbGROYW1lKG5hbWUsIDAsIG9wdGlvbnMpO1xuICAgICAgICBpZHMuY3VycmVudCA9IHByZXBlbmRBdChpZHMuY3VycmVudCwgcHJlcGVuZFZhbHVlLm1hcChnZW5lcmF0ZUlkKSk7XG4gICAgICAgIHVwZGF0ZVZhbHVlcyh1cGRhdGVkRmllbGRBcnJheVZhbHVlcyk7XG4gICAgICAgIHNldEZpZWxkcyh1cGRhdGVkRmllbGRBcnJheVZhbHVlcyk7XG4gICAgICAgIGNvbnRyb2wuX3NldEZpZWxkQXJyYXkobmFtZSwgdXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMsIHByZXBlbmRBdCwge1xuICAgICAgICAgICAgYXJnQTogZmlsbEVtcHR5QXJyYXkodmFsdWUpLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIGNvbnN0IHJlbW92ZSA9IChpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkRmllbGRBcnJheVZhbHVlcyA9IHJlbW92ZUFycmF5QXQoY29udHJvbC5fZ2V0RmllbGRBcnJheShuYW1lKSwgaW5kZXgpO1xuICAgICAgICBpZHMuY3VycmVudCA9IHJlbW92ZUFycmF5QXQoaWRzLmN1cnJlbnQsIGluZGV4KTtcbiAgICAgICAgdXBkYXRlVmFsdWVzKHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzKTtcbiAgICAgICAgc2V0RmllbGRzKHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzKTtcbiAgICAgICAgIUFycmF5LmlzQXJyYXkoZ2V0KGNvbnRyb2wuX2ZpZWxkcywgbmFtZSkpICYmXG4gICAgICAgICAgICBzZXQoY29udHJvbC5fZmllbGRzLCBuYW1lLCB1bmRlZmluZWQpO1xuICAgICAgICBjb250cm9sLl9zZXRGaWVsZEFycmF5KG5hbWUsIHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzLCByZW1vdmVBcnJheUF0LCB7XG4gICAgICAgICAgICBhcmdBOiBpbmRleCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBpbnNlcnQkMSA9IChpbmRleCwgdmFsdWUsIG9wdGlvbnMpID0+IHtcbiAgICAgICAgY29uc3QgaW5zZXJ0VmFsdWUgPSBjb252ZXJ0VG9BcnJheVBheWxvYWQoY2xvbmVPYmplY3QodmFsdWUpKTtcbiAgICAgICAgY29uc3QgdXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMgPSBpbnNlcnQoY29udHJvbC5fZ2V0RmllbGRBcnJheShuYW1lKSwgaW5kZXgsIGluc2VydFZhbHVlKTtcbiAgICAgICAgY29udHJvbC5fbmFtZXMuZm9jdXMgPSBnZXRGb2N1c0ZpZWxkTmFtZShuYW1lLCBpbmRleCwgb3B0aW9ucyk7XG4gICAgICAgIGlkcy5jdXJyZW50ID0gaW5zZXJ0KGlkcy5jdXJyZW50LCBpbmRleCwgaW5zZXJ0VmFsdWUubWFwKGdlbmVyYXRlSWQpKTtcbiAgICAgICAgdXBkYXRlVmFsdWVzKHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzKTtcbiAgICAgICAgc2V0RmllbGRzKHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzKTtcbiAgICAgICAgY29udHJvbC5fc2V0RmllbGRBcnJheShuYW1lLCB1cGRhdGVkRmllbGRBcnJheVZhbHVlcywgaW5zZXJ0LCB7XG4gICAgICAgICAgICBhcmdBOiBpbmRleCxcbiAgICAgICAgICAgIGFyZ0I6IGZpbGxFbXB0eUFycmF5KHZhbHVlKSxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzd2FwID0gKGluZGV4QSwgaW5kZXhCKSA9PiB7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzID0gY29udHJvbC5fZ2V0RmllbGRBcnJheShuYW1lKTtcbiAgICAgICAgc3dhcEFycmF5QXQodXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMsIGluZGV4QSwgaW5kZXhCKTtcbiAgICAgICAgc3dhcEFycmF5QXQoaWRzLmN1cnJlbnQsIGluZGV4QSwgaW5kZXhCKTtcbiAgICAgICAgdXBkYXRlVmFsdWVzKHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzKTtcbiAgICAgICAgc2V0RmllbGRzKHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzKTtcbiAgICAgICAgY29udHJvbC5fc2V0RmllbGRBcnJheShuYW1lLCB1cGRhdGVkRmllbGRBcnJheVZhbHVlcywgc3dhcEFycmF5QXQsIHtcbiAgICAgICAgICAgIGFyZ0E6IGluZGV4QSxcbiAgICAgICAgICAgIGFyZ0I6IGluZGV4QixcbiAgICAgICAgfSwgZmFsc2UpO1xuICAgIH07XG4gICAgY29uc3QgbW92ZSA9IChmcm9tLCB0bykgPT4ge1xuICAgICAgICBjb25zdCB1cGRhdGVkRmllbGRBcnJheVZhbHVlcyA9IGNvbnRyb2wuX2dldEZpZWxkQXJyYXkobmFtZSk7XG4gICAgICAgIG1vdmVBcnJheUF0KHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzLCBmcm9tLCB0byk7XG4gICAgICAgIG1vdmVBcnJheUF0KGlkcy5jdXJyZW50LCBmcm9tLCB0byk7XG4gICAgICAgIHVwZGF0ZVZhbHVlcyh1cGRhdGVkRmllbGRBcnJheVZhbHVlcyk7XG4gICAgICAgIHNldEZpZWxkcyh1cGRhdGVkRmllbGRBcnJheVZhbHVlcyk7XG4gICAgICAgIGNvbnRyb2wuX3NldEZpZWxkQXJyYXkobmFtZSwgdXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMsIG1vdmVBcnJheUF0LCB7XG4gICAgICAgICAgICBhcmdBOiBmcm9tLFxuICAgICAgICAgICAgYXJnQjogdG8sXG4gICAgICAgIH0sIGZhbHNlKTtcbiAgICB9O1xuICAgIGNvbnN0IHVwZGF0ZSA9IChpbmRleCwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlVmFsdWUgPSBjbG9uZU9iamVjdCh2YWx1ZSk7XG4gICAgICAgIGNvbnN0IHVwZGF0ZWRGaWVsZEFycmF5VmFsdWVzID0gdXBkYXRlQXQoY29udHJvbC5fZ2V0RmllbGRBcnJheShuYW1lKSwgaW5kZXgsIHVwZGF0ZVZhbHVlKTtcbiAgICAgICAgaWRzLmN1cnJlbnQgPSBbLi4udXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXNdLm1hcCgoaXRlbSwgaSkgPT4gIWl0ZW0gfHwgaSA9PT0gaW5kZXggPyBnZW5lcmF0ZUlkKCkgOiBpZHMuY3VycmVudFtpXSk7XG4gICAgICAgIHVwZGF0ZVZhbHVlcyh1cGRhdGVkRmllbGRBcnJheVZhbHVlcyk7XG4gICAgICAgIHNldEZpZWxkcyhbLi4udXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXNdKTtcbiAgICAgICAgY29udHJvbC5fc2V0RmllbGRBcnJheShuYW1lLCB1cGRhdGVkRmllbGRBcnJheVZhbHVlcywgdXBkYXRlQXQsIHtcbiAgICAgICAgICAgIGFyZ0E6IGluZGV4LFxuICAgICAgICAgICAgYXJnQjogdXBkYXRlVmFsdWUsXG4gICAgICAgIH0sIHRydWUsIGZhbHNlKTtcbiAgICB9O1xuICAgIGNvbnN0IHJlcGxhY2UgPSAodmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXMgPSBjb252ZXJ0VG9BcnJheVBheWxvYWQoY2xvbmVPYmplY3QodmFsdWUpKTtcbiAgICAgICAgaWRzLmN1cnJlbnQgPSB1cGRhdGVkRmllbGRBcnJheVZhbHVlcy5tYXAoZ2VuZXJhdGVJZCk7XG4gICAgICAgIHVwZGF0ZVZhbHVlcyhbLi4udXBkYXRlZEZpZWxkQXJyYXlWYWx1ZXNdKTtcbiAgICAgICAgc2V0RmllbGRzKFsuLi51cGRhdGVkRmllbGRBcnJheVZhbHVlc10pO1xuICAgICAgICBjb250cm9sLl9zZXRGaWVsZEFycmF5KG5hbWUsIFsuLi51cGRhdGVkRmllbGRBcnJheVZhbHVlc10sIChkYXRhKSA9PiBkYXRhLCB7fSwgdHJ1ZSwgZmFsc2UpO1xuICAgIH07XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29udHJvbC5fc3RhdGUuYWN0aW9uID0gZmFsc2U7XG4gICAgICAgIGlzV2F0Y2hlZChuYW1lLCBjb250cm9sLl9uYW1lcykgJiZcbiAgICAgICAgICAgIGNvbnRyb2wuX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgICAgIC4uLmNvbnRyb2wuX2Zvcm1TdGF0ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uTW9kZXMgPSBnZXRWYWxpZGF0aW9uTW9kZXMoY29udHJvbC5fb3B0aW9ucy5tb2RlKTtcbiAgICAgICAgaWYgKF9hY3Rpb25lZC5jdXJyZW50ICYmXG4gICAgICAgICAgICAoIXZhbGlkYXRpb25Nb2Rlcy5pc09uU3VibWl0IHx8IGNvbnRyb2wuX2Zvcm1TdGF0ZS5pc1N1Ym1pdHRlZCkgJiZcbiAgICAgICAgICAgICFnZXRWYWxpZGF0aW9uTW9kZXMoY29udHJvbC5fb3B0aW9ucy5yZVZhbGlkYXRlTW9kZSkuaXNPblN1Ym1pdCAmJlxuICAgICAgICAgICAgIXZhbGlkYXRpb25Nb2Rlcy5pc09uQmx1cikge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wuX29wdGlvbnMucmVzb2x2ZXIpIHtcbiAgICAgICAgICAgICAgICBjb250cm9sLl9ydW5TY2hlbWEoW25hbWVdKS50aGVuKChyZXN1bHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29udHJvbC5fdXBkYXRlSXNWYWxpZGF0aW5nKFtuYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gZ2V0KHJlc3VsdC5lcnJvcnMsIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0Vycm9yID0gZ2V0KGNvbnRyb2wuX2Zvcm1TdGF0ZS5lcnJvcnMsIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdFcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgPyAoIWVycm9yICYmIGV4aXN0aW5nRXJyb3IudHlwZSkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3IgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV4aXN0aW5nRXJyb3IudHlwZSAhPT0gZXJyb3IudHlwZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmdFcnJvci5tZXNzYWdlICE9PSBlcnJvci5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogZXJyb3IgJiYgZXJyb3IudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHNldChjb250cm9sLl9mb3JtU3RhdGUuZXJyb3JzLCBuYW1lLCBlcnJvcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHVuc2V0KGNvbnRyb2wuX2Zvcm1TdGF0ZS5lcnJvcnMsIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbC5fc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzOiBjb250cm9sLl9mb3JtU3RhdGUuZXJyb3JzLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gZ2V0KGNvbnRyb2wuX2ZpZWxkcywgbmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkICYmXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkLl9mICYmXG4gICAgICAgICAgICAgICAgICAgICEoZ2V0VmFsaWRhdGlvbk1vZGVzKGNvbnRyb2wuX29wdGlvbnMucmVWYWxpZGF0ZU1vZGUpLmlzT25TdWJtaXQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFZhbGlkYXRpb25Nb2Rlcyhjb250cm9sLl9vcHRpb25zLm1vZGUpLmlzT25TdWJtaXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRlRmllbGQoZmllbGQsIGNvbnRyb2wuX25hbWVzLmRpc2FibGVkLCBjb250cm9sLl9mb3JtVmFsdWVzLCBjb250cm9sLl9vcHRpb25zLmNyaXRlcmlhTW9kZSA9PT0gVkFMSURBVElPTl9NT0RFLmFsbCwgY29udHJvbC5fb3B0aW9ucy5zaG91bGRVc2VOYXRpdmVWYWxpZGF0aW9uLCB0cnVlKS50aGVuKChlcnJvcikgPT4gIWlzRW1wdHlPYmplY3QoZXJyb3IpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLl9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnM6IHVwZGF0ZUZpZWxkQXJyYXlSb290RXJyb3IoY29udHJvbC5fZm9ybVN0YXRlLmVycm9ycywgZXJyb3IsIG5hbWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb250cm9sLl9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2YWx1ZXM6IGNsb25lT2JqZWN0KGNvbnRyb2wuX2Zvcm1WYWx1ZXMpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29udHJvbC5fbmFtZXMuZm9jdXMgJiZcbiAgICAgICAgICAgIGl0ZXJhdGVGaWVsZHNCeUFjdGlvbihjb250cm9sLl9maWVsZHMsIChyZWYsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sLl9uYW1lcy5mb2N1cyAmJlxuICAgICAgICAgICAgICAgICAgICBrZXkuc3RhcnRzV2l0aChjb250cm9sLl9uYW1lcy5mb2N1cykgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVmLmZvY3VzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZi5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNvbnRyb2wuX25hbWVzLmZvY3VzID0gJyc7XG4gICAgICAgIGNvbnRyb2wuX3NldFZhbGlkKCk7XG4gICAgICAgIF9hY3Rpb25lZC5jdXJyZW50ID0gZmFsc2U7XG4gICAgfSwgW2ZpZWxkcywgbmFtZSwgY29udHJvbF0pO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICFnZXQoY29udHJvbC5fZm9ybVZhbHVlcywgbmFtZSkgJiYgY29udHJvbC5fc2V0RmllbGRBcnJheShuYW1lKTtcbiAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZEtlZXBGaWVsZEFycmF5VmFsdWVzID0gIShjb250cm9sLl9vcHRpb25zLnNob3VsZFVucmVnaXN0ZXIgfHwgc2hvdWxkVW5yZWdpc3Rlcik7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVNb3VudGVkID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBnZXQoY29udHJvbC5fZmllbGRzLCBuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQuX2YpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQuX2YubW91bnQgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKF9hY3Rpb25lZC5jdXJyZW50ICYmIHNob3VsZEtlZXBGaWVsZEFycmF5VmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5fc3ViamVjdHMuc3RhdGUubmV4dCh7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlczogY2xvbmVPYmplY3QoY29udHJvbC5fZm9ybVZhbHVlcyksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzaG91bGRLZWVwRmllbGRBcnJheVZhbHVlc1xuICAgICAgICAgICAgICAgID8gdXBkYXRlTW91bnRlZChuYW1lLCBmYWxzZSlcbiAgICAgICAgICAgICAgICA6IGNvbnRyb2wudW5yZWdpc3RlcihuYW1lKTtcbiAgICAgICAgfTtcbiAgICB9LCBbbmFtZSwgY29udHJvbCwga2V5TmFtZSwgc2hvdWxkVW5yZWdpc3Rlcl0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN3YXA6IFJlYWN0LnVzZUNhbGxiYWNrKHN3YXAsIFt1cGRhdGVWYWx1ZXMsIG5hbWUsIGNvbnRyb2xdKSxcbiAgICAgICAgbW92ZTogUmVhY3QudXNlQ2FsbGJhY2sobW92ZSwgW3VwZGF0ZVZhbHVlcywgbmFtZSwgY29udHJvbF0pLFxuICAgICAgICBwcmVwZW5kOiBSZWFjdC51c2VDYWxsYmFjayhwcmVwZW5kLCBbdXBkYXRlVmFsdWVzLCBuYW1lLCBjb250cm9sXSksXG4gICAgICAgIGFwcGVuZDogUmVhY3QudXNlQ2FsbGJhY2soYXBwZW5kLCBbdXBkYXRlVmFsdWVzLCBuYW1lLCBjb250cm9sXSksXG4gICAgICAgIHJlbW92ZTogUmVhY3QudXNlQ2FsbGJhY2socmVtb3ZlLCBbdXBkYXRlVmFsdWVzLCBuYW1lLCBjb250cm9sXSksXG4gICAgICAgIGluc2VydDogUmVhY3QudXNlQ2FsbGJhY2soaW5zZXJ0JDEsIFt1cGRhdGVWYWx1ZXMsIG5hbWUsIGNvbnRyb2xdKSxcbiAgICAgICAgdXBkYXRlOiBSZWFjdC51c2VDYWxsYmFjayh1cGRhdGUsIFt1cGRhdGVWYWx1ZXMsIG5hbWUsIGNvbnRyb2xdKSxcbiAgICAgICAgcmVwbGFjZTogUmVhY3QudXNlQ2FsbGJhY2socmVwbGFjZSwgW3VwZGF0ZVZhbHVlcywgbmFtZSwgY29udHJvbF0pLFxuICAgICAgICBmaWVsZHM6IFJlYWN0LnVzZU1lbW8oKCkgPT4gZmllbGRzLm1hcCgoZmllbGQsIGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgLi4uZmllbGQsXG4gICAgICAgICAgICBba2V5TmFtZV06IGlkcy5jdXJyZW50W2luZGV4XSB8fCBnZW5lcmF0ZUlkKCksXG4gICAgICAgIH0pKSwgW2ZpZWxkcywga2V5TmFtZV0pLFxuICAgIH07XG59XG5cbi8qKlxuICogQ3VzdG9tIGhvb2sgdG8gbWFuYWdlIHRoZSBlbnRpcmUgZm9ybS5cbiAqXG4gKiBAcmVtYXJrc1xuICogW0FQSV0oaHR0cHM6Ly9yZWFjdC1ob29rLWZvcm0uY29tL2RvY3MvdXNlZm9ybSkg4oCiIFtEZW1vXShodHRwczovL2NvZGVzYW5kYm94LmlvL3MvcmVhY3QtaG9vay1mb3JtLWdldC1zdGFydGVkLXRzLTVrc21tKSDigKIgW1ZpZGVvXShodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PVJrWHY0QVhYQ180KVxuICpcbiAqIEBwYXJhbSBwcm9wcyAtIGZvcm0gY29uZmlndXJhdGlvbiBhbmQgdmFsaWRhdGlvbiBwYXJhbWV0ZXJzLlxuICpcbiAqIEByZXR1cm5zIG1ldGhvZHMgLSBpbmRpdmlkdWFsIGZ1bmN0aW9ucyB0byBtYW5hZ2UgdGhlIGZvcm0gc3RhdGUuIHtAbGluayBVc2VGb3JtUmV0dXJufVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgeyByZWdpc3RlciwgaGFuZGxlU3VibWl0LCB3YXRjaCwgZm9ybVN0YXRlOiB7IGVycm9ycyB9IH0gPSB1c2VGb3JtKCk7XG4gKiAgIGNvbnN0IG9uU3VibWl0ID0gZGF0YSA9PiBjb25zb2xlLmxvZyhkYXRhKTtcbiAqXG4gKiAgIGNvbnNvbGUubG9nKHdhdGNoKFwiZXhhbXBsZVwiKSk7XG4gKlxuICogICByZXR1cm4gKFxuICogICAgIDxmb3JtIG9uU3VibWl0PXtoYW5kbGVTdWJtaXQob25TdWJtaXQpfT5cbiAqICAgICAgIDxpbnB1dCBkZWZhdWx0VmFsdWU9XCJ0ZXN0XCIgey4uLnJlZ2lzdGVyKFwiZXhhbXBsZVwiKX0gLz5cbiAqICAgICAgIDxpbnB1dCB7Li4ucmVnaXN0ZXIoXCJleGFtcGxlUmVxdWlyZWRcIiwgeyByZXF1aXJlZDogdHJ1ZSB9KX0gLz5cbiAqICAgICAgIHtlcnJvcnMuZXhhbXBsZVJlcXVpcmVkICYmIDxzcGFuPlRoaXMgZmllbGQgaXMgcmVxdWlyZWQ8L3NwYW4+fVxuICogICAgICAgPGJ1dHRvbj5TdWJtaXQ8L2J1dHRvbj5cbiAqICAgICA8L2Zvcm0+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqL1xuZnVuY3Rpb24gdXNlRm9ybShwcm9wcyA9IHt9KSB7XG4gICAgY29uc3QgX2Zvcm1Db250cm9sID0gUmVhY3QudXNlUmVmKHVuZGVmaW5lZCk7XG4gICAgY29uc3QgX3ZhbHVlcyA9IFJlYWN0LnVzZVJlZih1bmRlZmluZWQpO1xuICAgIGNvbnN0IFtmb3JtU3RhdGUsIHVwZGF0ZUZvcm1TdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZSgoKSA9PiAoe1xuICAgICAgICAuLi5jbG9uZU9iamVjdChERUZBVUxUX0ZPUk1fU1RBVEUpLFxuICAgICAgICBpc0xvYWRpbmc6IGlzRnVuY3Rpb24ocHJvcHMuZGVmYXVsdFZhbHVlcyksXG4gICAgICAgIGVycm9yczogcHJvcHMuZXJyb3JzIHx8IHt9LFxuICAgICAgICBkaXNhYmxlZDogcHJvcHMuZGlzYWJsZWQgfHwgZmFsc2UsXG4gICAgICAgIGRlZmF1bHRWYWx1ZXM6IGlzRnVuY3Rpb24ocHJvcHMuZGVmYXVsdFZhbHVlcylcbiAgICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgICA6IHByb3BzLmRlZmF1bHRWYWx1ZXMsXG4gICAgfSkpO1xuICAgIGlmICghX2Zvcm1Db250cm9sLmN1cnJlbnQpIHtcbiAgICAgICAgaWYgKHByb3BzLmZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICBfZm9ybUNvbnRyb2wuY3VycmVudCA9IHtcbiAgICAgICAgICAgICAgICAuLi5wcm9wcy5mb3JtQ29udHJvbCxcbiAgICAgICAgICAgICAgICBmb3JtU3RhdGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHByb3BzLmRlZmF1bHRWYWx1ZXMgJiYgIWlzRnVuY3Rpb24ocHJvcHMuZGVmYXVsdFZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5mb3JtQ29udHJvbC5yZXNldChwcm9wcy5kZWZhdWx0VmFsdWVzLCBwcm9wcy5yZXNldE9wdGlvbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBmb3JtQ29udHJvbCwgLi4ucmVzdCB9ID0gY3JlYXRlRm9ybUNvbnRyb2wocHJvcHMpO1xuICAgICAgICAgICAgX2Zvcm1Db250cm9sLmN1cnJlbnQgPSB7XG4gICAgICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICAgICAgICBmb3JtU3RhdGUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGNvbnRyb2wgPSBfZm9ybUNvbnRyb2wuY3VycmVudC5jb250cm9sO1xuICAgIGNvbnRyb2wuX29wdGlvbnMgPSBwcm9wcztcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICAgICAgY29uc3Qgc3ViID0gY29udHJvbC5fc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIGZvcm1TdGF0ZTogY29udHJvbC5fcHJveHlGb3JtU3RhdGUsXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4gdXBkYXRlRm9ybVN0YXRlKHsgLi4uY29udHJvbC5fZm9ybVN0YXRlIH0pLFxuICAgICAgICAgICAgcmVSZW5kZXJSb290OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgdXBkYXRlRm9ybVN0YXRlKChkYXRhKSA9PiAoe1xuICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgIGlzUmVhZHk6IHRydWUsXG4gICAgICAgIH0pKTtcbiAgICAgICAgY29udHJvbC5fZm9ybVN0YXRlLmlzUmVhZHkgPSB0cnVlO1xuICAgICAgICByZXR1cm4gc3ViO1xuICAgIH0sIFtjb250cm9sXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IGNvbnRyb2wuX2Rpc2FibGVGb3JtKHByb3BzLmRpc2FibGVkKSwgW2NvbnRyb2wsIHByb3BzLmRpc2FibGVkXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKHByb3BzLm1vZGUpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuX29wdGlvbnMubW9kZSA9IHByb3BzLm1vZGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3BzLnJlVmFsaWRhdGVNb2RlKSB7XG4gICAgICAgICAgICBjb250cm9sLl9vcHRpb25zLnJlVmFsaWRhdGVNb2RlID0gcHJvcHMucmVWYWxpZGF0ZU1vZGU7XG4gICAgICAgIH1cbiAgICB9LCBbY29udHJvbCwgcHJvcHMubW9kZSwgcHJvcHMucmVWYWxpZGF0ZU1vZGVdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAocHJvcHMuZXJyb3JzKSB7XG4gICAgICAgICAgICBjb250cm9sLl9zZXRFcnJvcnMocHJvcHMuZXJyb3JzKTtcbiAgICAgICAgICAgIGNvbnRyb2wuX2ZvY3VzRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH0sIFtjb250cm9sLCBwcm9wcy5lcnJvcnNdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBwcm9wcy5zaG91bGRVbnJlZ2lzdGVyICYmXG4gICAgICAgICAgICBjb250cm9sLl9zdWJqZWN0cy5zdGF0ZS5uZXh0KHtcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IGNvbnRyb2wuX2dldFdhdGNoKCksXG4gICAgICAgICAgICB9KTtcbiAgICB9LCBbY29udHJvbCwgcHJvcHMuc2hvdWxkVW5yZWdpc3Rlcl0pO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChjb250cm9sLl9wcm94eUZvcm1TdGF0ZS5pc0RpcnR5KSB7XG4gICAgICAgICAgICBjb25zdCBpc0RpcnR5ID0gY29udHJvbC5fZ2V0RGlydHkoKTtcbiAgICAgICAgICAgIGlmIChpc0RpcnR5ICE9PSBmb3JtU3RhdGUuaXNEaXJ0eSkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuX3N1YmplY3RzLnN0YXRlLm5leHQoe1xuICAgICAgICAgICAgICAgICAgICBpc0RpcnR5LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgW2NvbnRyb2wsIGZvcm1TdGF0ZS5pc0RpcnR5XSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAocHJvcHMudmFsdWVzICYmICFkZWVwRXF1YWwocHJvcHMudmFsdWVzLCBfdmFsdWVzLmN1cnJlbnQpKSB7XG4gICAgICAgICAgICBjb250cm9sLl9yZXNldChwcm9wcy52YWx1ZXMsIHtcbiAgICAgICAgICAgICAgICBrZWVwRmllbGRzUmVmOiB0cnVlLFxuICAgICAgICAgICAgICAgIC4uLmNvbnRyb2wuX29wdGlvbnMucmVzZXRPcHRpb25zLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoISgoX2EgPSBjb250cm9sLl9vcHRpb25zLnJlc2V0T3B0aW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmtlZXBJc1ZhbGlkKSkge1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuX3NldFZhbGlkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdmFsdWVzLmN1cnJlbnQgPSBwcm9wcy52YWx1ZXM7XG4gICAgICAgICAgICB1cGRhdGVGb3JtU3RhdGUoKHN0YXRlKSA9PiAoeyAuLi5zdGF0ZSB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb250cm9sLl9yZXNldERlZmF1bHRWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgIH0sIFtjb250cm9sLCBwcm9wcy52YWx1ZXNdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoIWNvbnRyb2wuX3N0YXRlLm1vdW50KSB7XG4gICAgICAgICAgICBjb250cm9sLl9zZXRWYWxpZCgpO1xuICAgICAgICAgICAgY29udHJvbC5fc3RhdGUubW91bnQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sLl9zdGF0ZS53YXRjaCkge1xuICAgICAgICAgICAgY29udHJvbC5fc3RhdGUud2F0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnRyb2wuX3N1YmplY3RzLnN0YXRlLm5leHQoeyAuLi5jb250cm9sLl9mb3JtU3RhdGUgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbC5fcmVtb3ZlVW5tb3VudGVkKCk7XG4gICAgfSk7XG4gICAgX2Zvcm1Db250cm9sLmN1cnJlbnQuZm9ybVN0YXRlID0gUmVhY3QudXNlTWVtbygoKSA9PiBnZXRQcm94eUZvcm1TdGF0ZShmb3JtU3RhdGUsIGNvbnRyb2wpLCBbY29udHJvbCwgZm9ybVN0YXRlXSk7XG4gICAgcmV0dXJuIF9mb3JtQ29udHJvbC5jdXJyZW50O1xufVxuXG4vKipcbiAqIFdhdGNoIGNvbXBvbmVudCB0aGF0IHN1YnNjcmliZXMgdG8gZm9ybSBmaWVsZCBjaGFuZ2VzIGFuZCByZS1yZW5kZXJzIHdoZW4gd2F0Y2hlZCBmaWVsZHMgdXBkYXRlLlxuICpcbiAqIEBwYXJhbSBjb250cm9sIC0gVGhlIGZvcm0gY29udHJvbCBvYmplY3QgZnJvbSB1c2VGb3JtXG4gKiBAcGFyYW0gbmFtZSAtIENhbiBiZSBmaWVsZCBuYW1lLCBhcnJheSBvZiBmaWVsZCBuYW1lcywgb3IgdW5kZWZpbmVkIHRvIHdhdGNoIHRoZSBlbnRpcmUgZm9ybVxuICogQHBhcmFtIGRpc2FibGVkIC0gRGlzYWJsZSBzdWJzY3JpcHRpb25cbiAqIEBwYXJhbSBleGFjdCAtIFdoZXRoZXIgdG8gd2F0Y2ggZXhhY3QgZmllbGQgbmFtZXMgb3Igbm90XG4gKiBAcGFyYW0gZGVmYXVsdFZhbHVlIC0gVGhlIGRlZmF1bHQgdmFsdWUgdG8gdXNlIGlmIHRoZSBmaWVsZCBpcyBub3QgeWV0IHNldFxuICogQHBhcmFtIGNvbXB1dGUgLSBGdW5jdGlvbiB0byBjb21wdXRlIGRlcml2ZWQgdmFsdWVzIGZyb20gd2F0Y2hlZCBmaWVsZHNcbiAqIEBwYXJhbSByZW5kZXIgLSBUaGUgZnVuY3Rpb24gdGhhdCByZWNlaXZlcyB3YXRjaGVkIHZhbHVlcyBhbmQgcmV0dXJucyBSZWFjdE5vZGVcbiAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgY2FsbGluZyByZW5kZXIgZnVuY3Rpb24gd2l0aCB3YXRjaGVkIHZhbHVlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBUaGUgYFdhdGNoYCBjb21wb25lbnQgb25seSByZS1yZW5kZXIgd2hlbiB0aGUgdmFsdWVzIG9mIGBmb29gLCBgYmFyYCwgYW5kIGBiYXoucXV4YCBjaGFuZ2UuXG4gKiBUaGUgdHlwZXMgb2YgYGZvb2AsIGBiYXJgLCBhbmQgYGJhei5xdXhgIGFyZSBwcmVjaXNlbHkgaW5mZXJyZWQuXG4gKlxuICogYGBgdHN4XG4gKiBjb25zdCB7IGNvbnRyb2wgfSA9IHVzZUZvcm0oKTtcbiAqXG4gKiA8V2F0Y2hcbiAqICAgY29udHJvbD17Y29udHJvbH1cbiAqICAgbmFtZXM9e1snZm9vJywgJ2JhcicsICdiYXoucXV4J119XG4gKiAgIHJlbmRlcj17KFtmb28sIGJhciwgYmF6X3F1eF0pID0+IDxkaXY+e2Zvb317YmFyfXtiYXpfcXV4fTwvZGl2Pn1cbiAqIC8+XG4gKiBgYGBcbiAqL1xuY29uc3QgV2F0Y2ggPSAocHJvcHMpID0+IHByb3BzLnJlbmRlcih1c2VXYXRjaCh7IG5hbWU6IHByb3BzLm5hbWVzLCAuLi5wcm9wcyB9KSk7XG5cbmV4cG9ydCB7IENvbnRyb2xsZXIsIEZvcm0sIEZvcm1Qcm92aWRlciwgRm9ybVN0YXRlU3Vic2NyaWJlLCBXYXRjaCwgYXBwZW5kRXJyb3JzLCBjcmVhdGVGb3JtQ29udHJvbCwgZ2V0LCBzZXQsIHVzZUNvbnRyb2xsZXIsIHVzZUZpZWxkQXJyYXksIHVzZUZvcm0sIHVzZUZvcm1Db250ZXh0LCB1c2VGb3JtU3RhdGUsIHVzZVdhdGNoIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lc20ubWpzLm1hcFxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/react-hook-form/dist/index.esm.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/sonner/dist/index.mjs":
|
||
/*!********************************************!*\
|
||
!*** ./node_modules/sonner/dist/index.mjs ***!
|
||
\********************************************/
|
||
/***/ ((__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 */ Toaster: () => (/* binding */ Toaster),\n/* harmony export */ toast: () => (/* binding */ toast),\n/* harmony export */ useSonner: () => (/* binding */ useSonner)\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/* __next_internal_client_entry_do_not_use__ Toaster,toast,useSonner auto */ var _s = $RefreshSig$(), _s1 = $RefreshSig$(), _s2 = $RefreshSig$(), _s3 = $RefreshSig$();\nfunction __insertCSS(code) {\n if (!code || typeof document == 'undefined') return;\n let head = document.head || document.getElementsByTagName('head')[0];\n let style = document.createElement('style');\n style.type = 'text/css';\n head.appendChild(style);\n style.styleSheet ? style.styleSheet.cssText = code : style.appendChild(document.createTextNode(code));\n}\n\n\nconst getAsset = (type)=>{\n switch(type){\n case 'success':\n return SuccessIcon;\n case 'info':\n return InfoIcon;\n case 'warning':\n return WarningIcon;\n case 'error':\n return ErrorIcon;\n default:\n return null;\n }\n};\nconst bars = Array(12).fill(0);\nconst Loader = (param)=>{\n let { visible, className } = param;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: [\n 'sonner-loading-wrapper',\n className\n ].filter(Boolean).join(' '),\n \"data-visible\": visible\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"sonner-spinner\"\n }, bars.map((_, i)=>/*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: \"sonner-loading-bar\",\n key: \"spinner-bar-\".concat(i)\n }))));\n};\n_c = Loader;\nconst SuccessIcon = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\",\n clipRule: \"evenodd\"\n}));\nconst WarningIcon = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\",\n clipRule: \"evenodd\"\n}));\nconst InfoIcon = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\",\n clipRule: \"evenodd\"\n}));\nconst ErrorIcon = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\",\n clipRule: \"evenodd\"\n}));\nconst CloseIcon = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"12\",\n height: \"12\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n}, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"line\", {\n x1: \"18\",\n y1: \"6\",\n x2: \"6\",\n y2: \"18\"\n}), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"line\", {\n x1: \"6\",\n y1: \"6\",\n x2: \"18\",\n y2: \"18\"\n}));\nconst useIsDocumentHidden = ()=>{\n _s();\n const [isDocumentHidden, setIsDocumentHidden] = react__WEBPACK_IMPORTED_MODULE_0__.useState(document.hidden);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"useIsDocumentHidden.useEffect\": ()=>{\n const callback = {\n \"useIsDocumentHidden.useEffect.callback\": ()=>{\n setIsDocumentHidden(document.hidden);\n }\n }[\"useIsDocumentHidden.useEffect.callback\"];\n document.addEventListener('visibilitychange', callback);\n return ({\n \"useIsDocumentHidden.useEffect\": ()=>window.removeEventListener('visibilitychange', callback)\n })[\"useIsDocumentHidden.useEffect\"];\n }\n }[\"useIsDocumentHidden.useEffect\"], []);\n return isDocumentHidden;\n};\n_s(useIsDocumentHidden, \"RJwWklAunJjdVVAElZ/SoraKxVU=\");\nlet toastsCounter = 1;\nclass Observer {\n constructor(){\n // We use arrow functions to maintain the correct `this` reference\n this.subscribe = (subscriber)=>{\n this.subscribers.push(subscriber);\n return ()=>{\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n this.publish = (data)=>{\n this.subscribers.forEach((subscriber)=>subscriber(data));\n };\n this.addToast = (data)=>{\n this.publish(data);\n this.toasts = [\n ...this.toasts,\n data\n ];\n };\n this.create = (data)=>{\n var _data_id;\n const { message, ...rest } = data;\n const id = typeof (data == null ? void 0 : data.id) === 'number' || ((_data_id = data.id) == null ? void 0 : _data_id.length) > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast)=>{\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n if (this.dismissedToasts.has(id)) {\n this.dismissedToasts.delete(id);\n }\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast)=>{\n if (toast.id === id) {\n this.publish({\n ...toast,\n ...data,\n id,\n title: message\n });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message\n };\n }\n return toast;\n });\n } else {\n this.addToast({\n title: message,\n ...rest,\n dismissible,\n id\n });\n }\n return id;\n };\n this.dismiss = (id)=>{\n if (id) {\n this.dismissedToasts.add(id);\n requestAnimationFrame(()=>this.subscribers.forEach((subscriber)=>subscriber({\n id,\n dismiss: true\n })));\n } else {\n this.toasts.forEach((toast)=>{\n this.subscribers.forEach((subscriber)=>subscriber({\n id: toast.id,\n dismiss: true\n }));\n });\n }\n return id;\n };\n this.message = (message, data)=>{\n return this.create({\n ...data,\n message\n });\n };\n this.error = (message, data)=>{\n return this.create({\n ...data,\n message,\n type: 'error'\n });\n };\n this.success = (message, data)=>{\n return this.create({\n ...data,\n type: 'success',\n message\n });\n };\n this.info = (message, data)=>{\n return this.create({\n ...data,\n type: 'info',\n message\n });\n };\n this.warning = (message, data)=>{\n return this.create({\n ...data,\n type: 'warning',\n message\n });\n };\n this.loading = (message, data)=>{\n return this.create({\n ...data,\n type: 'loading',\n message\n });\n };\n this.promise = (promise, data)=>{\n if (!data) {\n // Nothing to show\n return;\n }\n let id = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined\n });\n }\n const p = Promise.resolve(promise instanceof Function ? promise() : promise);\n let shouldDismiss = id !== undefined;\n let result;\n const originalPromise = p.then(async (response)=>{\n result = [\n 'resolve',\n response\n ];\n const isReactElementResponse = /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(response);\n if (isReactElementResponse) {\n shouldDismiss = false;\n this.create({\n id,\n type: 'default',\n message: response\n });\n } else if (isHttpResponse(response) && !response.ok) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(\"HTTP error! status: \".concat(response.status)) : data.error;\n const description = typeof data.description === 'function' ? await data.description(\"HTTP error! status: \".concat(response.status)) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !/*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n } else if (response instanceof Error) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(response) : data.error;\n const description = typeof data.description === 'function' ? await data.description(response) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !/*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const promiseData = typeof data.success === 'function' ? await data.success(response) : data.success;\n const description = typeof data.description === 'function' ? await data.description(response) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !/*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'success',\n description,\n ...toastSettings\n });\n }\n }).catch(async (error)=>{\n result = [\n 'reject',\n error\n ];\n if (data.error !== undefined) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(error) : data.error;\n const description = typeof data.description === 'function' ? await data.description(error) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !/*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n }\n }).finally(()=>{\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n data.finally == null ? void 0 : data.finally.call(data);\n });\n const unwrap = ()=>new Promise((resolve, reject)=>originalPromise.then(()=>result[0] === 'reject' ? reject(result[1]) : resolve(result[1])).catch(reject));\n if (typeof id !== 'string' && typeof id !== 'number') {\n // cannot Object.assign on undefined\n return {\n unwrap\n };\n } else {\n return Object.assign(id, {\n unwrap\n });\n }\n };\n this.custom = (jsx, data)=>{\n const id = (data == null ? void 0 : data.id) || toastsCounter++;\n this.create({\n jsx: jsx(id),\n id,\n ...data\n });\n return id;\n };\n this.getActiveToasts = ()=>{\n return this.toasts.filter((toast)=>!this.dismissedToasts.has(toast.id));\n };\n this.subscribers = [];\n this.toasts = [];\n this.dismissedToasts = new Set();\n }\n}\nconst ToastState = new Observer();\n// bind this to the toast function\nconst toastFunction = (message, data)=>{\n const id = (data == null ? void 0 : data.id) || toastsCounter++;\n ToastState.addToast({\n title: message,\n ...data,\n id\n });\n return id;\n};\nconst isHttpResponse = (data)=>{\n return data && typeof data === 'object' && 'ok' in data && typeof data.ok === 'boolean' && 'status' in data && typeof data.status === 'number';\n};\nconst basicToast = toastFunction;\nconst getHistory = ()=>ToastState.toasts;\nconst getToasts = ()=>ToastState.getActiveToasts();\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nconst toast = Object.assign(basicToast, {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading\n}, {\n getHistory,\n getToasts\n});\n__insertCSS(\"[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\");\nfunction isAction(action) {\n return action.label !== undefined;\n}\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n// Viewport padding\nconst VIEWPORT_OFFSET = '24px';\n// Mobile viewport padding\nconst MOBILE_VIEWPORT_OFFSET = '16px';\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n// Default toast width\nconst TOAST_WIDTH = 356;\n// Default gap between toasts\nconst GAP = 14;\n// Threshold to dismiss a toast\nconst SWIPE_THRESHOLD = 45;\n// Equal to exit animation duration\nconst TIME_BEFORE_UNMOUNT = 200;\nfunction cn() {\n for(var _len = arguments.length, classes = new Array(_len), _key = 0; _key < _len; _key++){\n classes[_key] = arguments[_key];\n }\n return classes.filter(Boolean).join(' ');\n}\nfunction getDefaultSwipeDirections(position) {\n const [y, x] = position.split('-');\n const directions = [];\n if (y) {\n directions.push(y);\n }\n if (x) {\n directions.push(x);\n }\n return directions;\n}\nconst Toast = (props)=>{\n _s1();\n var _toast_classNames, _toast_classNames1, _toast_classNames2, _toast_classNames3, _toast_classNames4, _toast_classNames5, _toast_classNames6, _toast_classNames7, _toast_classNames8;\n const { invert: ToasterInvert, toast, unstyled, interacting, setHeights, visibleToasts, heights, index, toasts, expanded, removeToast, defaultRichColors, closeButton: closeButtonFromToaster, style, cancelButtonStyle, actionButtonStyle, className = '', descriptionClassName = '', duration: durationFromToaster, position, gap, expandByDefault, classNames, icons, closeButtonAriaLabel = 'Close toast' } = props;\n const [swipeDirection, setSwipeDirection] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null);\n const [swipeOutDirection, setSwipeOutDirection] = react__WEBPACK_IMPORTED_MODULE_0__.useState(null);\n const [mounted, setMounted] = react__WEBPACK_IMPORTED_MODULE_0__.useState(false);\n const [removed, setRemoved] = react__WEBPACK_IMPORTED_MODULE_0__.useState(false);\n const [swiping, setSwiping] = react__WEBPACK_IMPORTED_MODULE_0__.useState(false);\n const [swipeOut, setSwipeOut] = react__WEBPACK_IMPORTED_MODULE_0__.useState(false);\n const [isSwiped, setIsSwiped] = react__WEBPACK_IMPORTED_MODULE_0__.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = react__WEBPACK_IMPORTED_MODULE_0__.useState(0);\n const [initialHeight, setInitialHeight] = react__WEBPACK_IMPORTED_MODULE_0__.useState(0);\n const remainingTime = react__WEBPACK_IMPORTED_MODULE_0__.useRef(toast.duration || durationFromToaster || TOAST_LIFETIME);\n const dragStartTime = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const toastRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"Toast.useMemo[heightIndex]\": ()=>heights.findIndex({\n \"Toast.useMemo[heightIndex]\": (height)=>height.toastId === toast.id\n }[\"Toast.useMemo[heightIndex]\"]) || 0\n }[\"Toast.useMemo[heightIndex]\"], [\n heights,\n toast.id\n ]);\n const closeButton = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"Toast.useMemo[closeButton]\": ()=>{\n var _toast_closeButton;\n return (_toast_closeButton = toast.closeButton) != null ? _toast_closeButton : closeButtonFromToaster;\n }\n }[\"Toast.useMemo[closeButton]\"], [\n toast.closeButton,\n closeButtonFromToaster\n ]);\n const duration = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"Toast.useMemo[duration]\": ()=>toast.duration || durationFromToaster || TOAST_LIFETIME\n }[\"Toast.useMemo[duration]\"], [\n toast.duration,\n durationFromToaster\n ]);\n const closeTimerStartTimeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(0);\n const offset = react__WEBPACK_IMPORTED_MODULE_0__.useRef(0);\n const lastCloseTimerStartTimeRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(0);\n const pointerStartRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"Toast.useMemo[toastsHeightBefore]\": ()=>{\n return heights.reduce({\n \"Toast.useMemo[toastsHeightBefore]\": (prev, curr, reducerIndex)=>{\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n return prev + curr.height;\n }\n }[\"Toast.useMemo[toastsHeightBefore]\"], 0);\n }\n }[\"Toast.useMemo[toastsHeightBefore]\"], [\n heights,\n heightIndex\n ]);\n const isDocumentHidden = useIsDocumentHidden();\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n offset.current = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"Toast.useMemo\": ()=>heightIndex * gap + toastsHeightBefore\n }[\"Toast.useMemo\"], [\n heightIndex,\n toastsHeightBefore\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"Toast.useEffect\": ()=>{\n remainingTime.current = duration;\n }\n }[\"Toast.useEffect\"], [\n duration\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"Toast.useEffect\": ()=>{\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }\n }[\"Toast.useEffect\"], []);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"Toast.useEffect\": ()=>{\n const toastNode = toastRef.current;\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height to heights array after the toast is mounted\n setInitialHeight(height);\n setHeights({\n \"Toast.useEffect\": (h)=>[\n {\n toastId: toast.id,\n height,\n position: toast.position\n },\n ...h\n ]\n }[\"Toast.useEffect\"]);\n return ({\n \"Toast.useEffect\": ()=>setHeights({\n \"Toast.useEffect\": (h)=>h.filter({\n \"Toast.useEffect\": (height)=>height.toastId !== toast.id\n }[\"Toast.useEffect\"])\n }[\"Toast.useEffect\"])\n })[\"Toast.useEffect\"];\n }\n }\n }[\"Toast.useEffect\"], [\n setHeights,\n toast.id\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect({\n \"Toast.useLayoutEffect\": ()=>{\n // Keep height up to date with the content in case it updates\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n setInitialHeight(newHeight);\n setHeights({\n \"Toast.useLayoutEffect\": (heights)=>{\n const alreadyExists = heights.find({\n \"Toast.useLayoutEffect.alreadyExists\": (height)=>height.toastId === toast.id\n }[\"Toast.useLayoutEffect.alreadyExists\"]);\n if (!alreadyExists) {\n return [\n {\n toastId: toast.id,\n height: newHeight,\n position: toast.position\n },\n ...heights\n ];\n } else {\n return heights.map({\n \"Toast.useLayoutEffect\": (height)=>height.toastId === toast.id ? {\n ...height,\n height: newHeight\n } : height\n }[\"Toast.useLayoutEffect\"]);\n }\n }\n }[\"Toast.useLayoutEffect\"]);\n }\n }[\"Toast.useLayoutEffect\"], [\n mounted,\n toast.title,\n toast.description,\n setHeights,\n toast.id,\n toast.jsx,\n toast.action,\n toast.cancel\n ]);\n const deleteToast = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Toast.useCallback[deleteToast]\": ()=>{\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights({\n \"Toast.useCallback[deleteToast]\": (h)=>h.filter({\n \"Toast.useCallback[deleteToast]\": (height)=>height.toastId !== toast.id\n }[\"Toast.useCallback[deleteToast]\"])\n }[\"Toast.useCallback[deleteToast]\"]);\n setTimeout({\n \"Toast.useCallback[deleteToast]\": ()=>{\n removeToast(toast);\n }\n }[\"Toast.useCallback[deleteToast]\"], TIME_BEFORE_UNMOUNT);\n }\n }[\"Toast.useCallback[deleteToast]\"], [\n toast,\n removeToast,\n setHeights,\n offset\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"Toast.useEffect\": ()=>{\n if (toast.promise && toastType === 'loading' || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId;\n // Pause the timer on each hover\n const pauseTimer = {\n \"Toast.useEffect.pauseTimer\": ()=>{\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n remainingTime.current = remainingTime.current - elapsedTime;\n }\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n }\n }[\"Toast.useEffect.pauseTimer\"];\n const startTimer = {\n \"Toast.useEffect.startTimer\": ()=>{\n // setTimeout(, Infinity) behaves as if the delay is 0.\n // As a result, the toast would be closed immediately, giving the appearance that it was never rendered.\n // See: https://github.com/denysdovhan/wtfjs?tab=readme-ov-file#an-infinite-timeout\n if (remainingTime.current === Infinity) return;\n closeTimerStartTimeRef.current = new Date().getTime();\n // Let the toast know it has started\n timeoutId = setTimeout({\n \"Toast.useEffect.startTimer\": ()=>{\n toast.onAutoClose == null ? void 0 : toast.onAutoClose.call(toast, toast);\n deleteToast();\n }\n }[\"Toast.useEffect.startTimer\"], remainingTime.current);\n }\n }[\"Toast.useEffect.startTimer\"];\n if (expanded || interacting || isDocumentHidden) {\n pauseTimer();\n } else {\n startTimer();\n }\n return ({\n \"Toast.useEffect\": ()=>clearTimeout(timeoutId)\n })[\"Toast.useEffect\"];\n }\n }[\"Toast.useEffect\"], [\n expanded,\n interacting,\n toast,\n toastType,\n isDocumentHidden,\n deleteToast\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"Toast.useEffect\": ()=>{\n if (toast.delete) {\n deleteToast();\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n }\n }\n }[\"Toast.useEffect\"], [\n deleteToast,\n toast.delete\n ]);\n function getLoadingIcon() {\n var _toast_classNames;\n if (icons == null ? void 0 : icons.loading) {\n var _toast_classNames1;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n className: cn(classNames == null ? void 0 : classNames.loader, toast == null ? void 0 : (_toast_classNames1 = toast.classNames) == null ? void 0 : _toast_classNames1.loader, 'sonner-loader'),\n \"data-visible\": toastType === 'loading'\n }, icons.loading);\n }\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(Loader, {\n className: cn(classNames == null ? void 0 : classNames.loader, toast == null ? void 0 : (_toast_classNames = toast.classNames) == null ? void 0 : _toast_classNames.loader),\n visible: toastType === 'loading'\n });\n }\n const icon = toast.icon || (icons == null ? void 0 : icons[toastType]) || getAsset(toastType);\n var _toast_richColors, _icons_close;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"li\", {\n tabIndex: 0,\n ref: toastRef,\n className: cn(className, toastClassname, classNames == null ? void 0 : classNames.toast, toast == null ? void 0 : (_toast_classNames = toast.classNames) == null ? void 0 : _toast_classNames.toast, classNames == null ? void 0 : classNames.default, classNames == null ? void 0 : classNames[toastType], toast == null ? void 0 : (_toast_classNames1 = toast.classNames) == null ? void 0 : _toast_classNames1[toastType]),\n \"data-sonner-toast\": \"\",\n \"data-rich-colors\": (_toast_richColors = toast.richColors) != null ? _toast_richColors : defaultRichColors,\n \"data-styled\": !Boolean(toast.jsx || toast.unstyled || unstyled),\n \"data-mounted\": mounted,\n \"data-promise\": Boolean(toast.promise),\n \"data-swiped\": isSwiped,\n \"data-removed\": removed,\n \"data-visible\": isVisible,\n \"data-y-position\": y,\n \"data-x-position\": x,\n \"data-index\": index,\n \"data-front\": isFront,\n \"data-swiping\": swiping,\n \"data-dismissible\": dismissible,\n \"data-type\": toastType,\n \"data-invert\": invert,\n \"data-swipe-out\": swipeOut,\n \"data-swipe-direction\": swipeOutDirection,\n \"data-expanded\": Boolean(expanded || expandByDefault && mounted),\n \"data-testid\": toast.testId,\n style: {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': \"\".concat(removed ? offsetBeforeRemove : offset.current, \"px\"),\n '--initial-height': expandByDefault ? 'auto' : \"\".concat(initialHeight, \"px\"),\n ...style,\n ...toast.style\n },\n onDragEnd: ()=>{\n setSwiping(false);\n setSwipeDirection(null);\n pointerStartRef.current = null;\n },\n onPointerDown: (event)=>{\n if (event.button === 2) return; // Return early on right click\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n event.target.setPointerCapture(event.pointerId);\n if (event.target.tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = {\n x: event.clientX,\n y: event.clientY\n };\n },\n onPointerUp: ()=>{\n var _toastRef_current, _toastRef_current1, _dragStartTime_current;\n if (swipeOut || !dismissible) return;\n pointerStartRef.current = null;\n const swipeAmountX = Number(((_toastRef_current = toastRef.current) == null ? void 0 : _toastRef_current.style.getPropertyValue('--swipe-amount-x').replace('px', '')) || 0);\n const swipeAmountY = Number(((_toastRef_current1 = toastRef.current) == null ? void 0 : _toastRef_current1.style.getPropertyValue('--swipe-amount-y').replace('px', '')) || 0);\n const timeTaken = new Date().getTime() - ((_dragStartTime_current = dragStartTime.current) == null ? void 0 : _dragStartTime_current.getTime());\n const swipeAmount = swipeDirection === 'x' ? swipeAmountX : swipeAmountY;\n const velocity = Math.abs(swipeAmount) / timeTaken;\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n if (swipeDirection === 'x') {\n setSwipeOutDirection(swipeAmountX > 0 ? 'right' : 'left');\n } else {\n setSwipeOutDirection(swipeAmountY > 0 ? 'down' : 'up');\n }\n deleteToast();\n setSwipeOut(true);\n return;\n } else {\n var _toastRef_current2, _toastRef_current3;\n (_toastRef_current2 = toastRef.current) == null ? void 0 : _toastRef_current2.style.setProperty('--swipe-amount-x', \"0px\");\n (_toastRef_current3 = toastRef.current) == null ? void 0 : _toastRef_current3.style.setProperty('--swipe-amount-y', \"0px\");\n }\n setIsSwiped(false);\n setSwiping(false);\n setSwipeDirection(null);\n },\n onPointerMove: (event)=>{\n var _window_getSelection, _toastRef_current, _toastRef_current1;\n if (!pointerStartRef.current || !dismissible) return;\n const isHighlighted = ((_window_getSelection = window.getSelection()) == null ? void 0 : _window_getSelection.toString().length) > 0;\n if (isHighlighted) return;\n const yDelta = event.clientY - pointerStartRef.current.y;\n const xDelta = event.clientX - pointerStartRef.current.x;\n var _props_swipeDirections;\n const swipeDirections = (_props_swipeDirections = props.swipeDirections) != null ? _props_swipeDirections : getDefaultSwipeDirections(position);\n // Determine swipe direction if not already locked\n if (!swipeDirection && (Math.abs(xDelta) > 1 || Math.abs(yDelta) > 1)) {\n setSwipeDirection(Math.abs(xDelta) > Math.abs(yDelta) ? 'x' : 'y');\n }\n let swipeAmount = {\n x: 0,\n y: 0\n };\n const getDampening = (delta)=>{\n const factor = Math.abs(delta) / 20;\n return 1 / (1.5 + factor);\n };\n // Only apply swipe in the locked direction\n if (swipeDirection === 'y') {\n // Handle vertical swipes\n if (swipeDirections.includes('top') || swipeDirections.includes('bottom')) {\n if (swipeDirections.includes('top') && yDelta < 0 || swipeDirections.includes('bottom') && yDelta > 0) {\n swipeAmount.y = yDelta;\n } else {\n // Smoothly transition to dampened movement\n const dampenedDelta = yDelta * getDampening(yDelta);\n // Ensure we don't jump when transitioning to dampened movement\n swipeAmount.y = Math.abs(dampenedDelta) < Math.abs(yDelta) ? dampenedDelta : yDelta;\n }\n }\n } else if (swipeDirection === 'x') {\n // Handle horizontal swipes\n if (swipeDirections.includes('left') || swipeDirections.includes('right')) {\n if (swipeDirections.includes('left') && xDelta < 0 || swipeDirections.includes('right') && xDelta > 0) {\n swipeAmount.x = xDelta;\n } else {\n // Smoothly transition to dampened movement\n const dampenedDelta = xDelta * getDampening(xDelta);\n // Ensure we don't jump when transitioning to dampened movement\n swipeAmount.x = Math.abs(dampenedDelta) < Math.abs(xDelta) ? dampenedDelta : xDelta;\n }\n }\n }\n if (Math.abs(swipeAmount.x) > 0 || Math.abs(swipeAmount.y) > 0) {\n setIsSwiped(true);\n }\n (_toastRef_current = toastRef.current) == null ? void 0 : _toastRef_current.style.setProperty('--swipe-amount-x', \"\".concat(swipeAmount.x, \"px\"));\n (_toastRef_current1 = toastRef.current) == null ? void 0 : _toastRef_current1.style.setProperty('--swipe-amount-y', \"\".concat(swipeAmount.y, \"px\"));\n }\n }, closeButton && !toast.jsx && toastType !== 'loading' ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n \"aria-label\": closeButtonAriaLabel,\n \"data-disabled\": disabled,\n \"data-close-button\": true,\n onClick: disabled || !dismissible ? ()=>{} : ()=>{\n deleteToast();\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n },\n className: cn(classNames == null ? void 0 : classNames.closeButton, toast == null ? void 0 : (_toast_classNames2 = toast.classNames) == null ? void 0 : _toast_classNames2.closeButton)\n }, (_icons_close = icons == null ? void 0 : icons.close) != null ? _icons_close : CloseIcon) : null, (toastType || toast.icon || toast.promise) && toast.icon !== null && ((icons == null ? void 0 : icons[toastType]) !== null || toast.icon) ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n \"data-icon\": \"\",\n className: cn(classNames == null ? void 0 : classNames.icon, toast == null ? void 0 : (_toast_classNames3 = toast.classNames) == null ? void 0 : _toast_classNames3.icon)\n }, toast.promise || toast.type === 'loading' && !toast.icon ? toast.icon || getLoadingIcon() : null, toast.type !== 'loading' ? icon : null) : null, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n \"data-content\": \"\",\n className: cn(classNames == null ? void 0 : classNames.content, toast == null ? void 0 : (_toast_classNames4 = toast.classNames) == null ? void 0 : _toast_classNames4.content)\n }, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n \"data-title\": \"\",\n className: cn(classNames == null ? void 0 : classNames.title, toast == null ? void 0 : (_toast_classNames5 = toast.classNames) == null ? void 0 : _toast_classNames5.title)\n }, toast.jsx ? toast.jsx : typeof toast.title === 'function' ? toast.title() : toast.title), toast.description ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"div\", {\n \"data-description\": \"\",\n className: cn(descriptionClassName, toastDescriptionClassname, classNames == null ? void 0 : classNames.description, toast == null ? void 0 : (_toast_classNames6 = toast.classNames) == null ? void 0 : _toast_classNames6.description)\n }, typeof toast.description === 'function' ? toast.description() : toast.description) : null), /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(toast.cancel) ? toast.cancel : toast.cancel && isAction(toast.cancel) ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n \"data-button\": true,\n \"data-cancel\": true,\n style: toast.cancelButtonStyle || cancelButtonStyle,\n onClick: (event)=>{\n // We need to check twice because typescript\n if (!isAction(toast.cancel)) return;\n if (!dismissible) return;\n toast.cancel.onClick == null ? void 0 : toast.cancel.onClick.call(toast.cancel, event);\n deleteToast();\n },\n className: cn(classNames == null ? void 0 : classNames.cancelButton, toast == null ? void 0 : (_toast_classNames7 = toast.classNames) == null ? void 0 : _toast_classNames7.cancelButton)\n }, toast.cancel.label) : null, /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(toast.action) ? toast.action : toast.action && isAction(toast.action) ? /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"button\", {\n \"data-button\": true,\n \"data-action\": true,\n style: toast.actionButtonStyle || actionButtonStyle,\n onClick: (event)=>{\n // We need to check twice because typescript\n if (!isAction(toast.action)) return;\n toast.action.onClick == null ? void 0 : toast.action.onClick.call(toast.action, event);\n if (event.defaultPrevented) return;\n deleteToast();\n },\n className: cn(classNames == null ? void 0 : classNames.actionButton, toast == null ? void 0 : (_toast_classNames8 = toast.classNames) == null ? void 0 : _toast_classNames8.actionButton)\n }, toast.action.label) : null);\n};\n_s1(Toast, \"Hs2RwklMUctKsF2fEbXUzesmn3w=\", false, function() {\n return [\n useIsDocumentHidden\n ];\n});\n_c1 = Toast;\nfunction getDocumentDirection() {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n const dirAttribute = document.documentElement.getAttribute('dir');\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction;\n }\n return dirAttribute;\n}\nfunction assignOffset(defaultOffset, mobileOffset) {\n const styles = {};\n [\n defaultOffset,\n mobileOffset\n ].forEach((offset, index)=>{\n const isMobile = index === 1;\n const prefix = isMobile ? '--mobile-offset' : '--offset';\n const defaultValue = isMobile ? MOBILE_VIEWPORT_OFFSET : VIEWPORT_OFFSET;\n function assignAll(offset) {\n [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ].forEach((key)=>{\n styles[\"\".concat(prefix, \"-\").concat(key)] = typeof offset === 'number' ? \"\".concat(offset, \"px\") : offset;\n });\n }\n if (typeof offset === 'number' || typeof offset === 'string') {\n assignAll(offset);\n } else if (typeof offset === 'object') {\n [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ].forEach((key)=>{\n if (offset[key] === undefined) {\n styles[\"\".concat(prefix, \"-\").concat(key)] = defaultValue;\n } else {\n styles[\"\".concat(prefix, \"-\").concat(key)] = typeof offset[key] === 'number' ? \"\".concat(offset[key], \"px\") : offset[key];\n }\n });\n } else {\n assignAll(defaultValue);\n }\n });\n return styles;\n}\nfunction useSonner() {\n _s2();\n const [activeToasts, setActiveToasts] = react__WEBPACK_IMPORTED_MODULE_0__.useState([]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"useSonner.useEffect\": ()=>{\n return ToastState.subscribe({\n \"useSonner.useEffect\": (toast)=>{\n if (toast.dismiss) {\n setTimeout({\n \"useSonner.useEffect\": ()=>{\n react_dom__WEBPACK_IMPORTED_MODULE_1__.flushSync({\n \"useSonner.useEffect\": ()=>{\n setActiveToasts({\n \"useSonner.useEffect\": (toasts)=>toasts.filter({\n \"useSonner.useEffect\": (t)=>t.id !== toast.id\n }[\"useSonner.useEffect\"])\n }[\"useSonner.useEffect\"]);\n }\n }[\"useSonner.useEffect\"]);\n }\n }[\"useSonner.useEffect\"]);\n return;\n }\n // Prevent batching, temp solution.\n setTimeout({\n \"useSonner.useEffect\": ()=>{\n react_dom__WEBPACK_IMPORTED_MODULE_1__.flushSync({\n \"useSonner.useEffect\": ()=>{\n setActiveToasts({\n \"useSonner.useEffect\": (toasts)=>{\n const indexOfExistingToast = toasts.findIndex({\n \"useSonner.useEffect.indexOfExistingToast\": (t)=>t.id === toast.id\n }[\"useSonner.useEffect.indexOfExistingToast\"]);\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n {\n ...toasts[indexOfExistingToast],\n ...toast\n },\n ...toasts.slice(indexOfExistingToast + 1)\n ];\n }\n return [\n toast,\n ...toasts\n ];\n }\n }[\"useSonner.useEffect\"]);\n }\n }[\"useSonner.useEffect\"]);\n }\n }[\"useSonner.useEffect\"]);\n }\n }[\"useSonner.useEffect\"]);\n }\n }[\"useSonner.useEffect\"], []);\n return {\n toasts: activeToasts\n };\n}\n_s2(useSonner, \"wvKkrpl8d9UBJsfUcWYgFEOa7SA=\");\nconst Toaster = /*#__PURE__*/ _s3(react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(_c2 = _s3(function Toaster(props, ref) {\n _s3();\n const { id, invert, position = 'bottom-right', hotkey = [\n 'altKey',\n 'KeyT'\n ], expand, closeButton, className, offset, mobileOffset, theme = 'light', richColors, duration, style, visibleToasts = VISIBLE_TOASTS_AMOUNT, toastOptions, dir = getDocumentDirection(), gap = GAP, icons, containerAriaLabel = 'Notifications' } = props;\n const [toasts, setToasts] = react__WEBPACK_IMPORTED_MODULE_0__.useState([]);\n const filteredToasts = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"Toaster.Toaster.useMemo[filteredToasts]\": ()=>{\n if (id) {\n return toasts.filter({\n \"Toaster.Toaster.useMemo[filteredToasts]\": (toast)=>toast.toasterId === id\n }[\"Toaster.Toaster.useMemo[filteredToasts]\"]);\n }\n return toasts.filter({\n \"Toaster.Toaster.useMemo[filteredToasts]\": (toast)=>!toast.toasterId\n }[\"Toaster.Toaster.useMemo[filteredToasts]\"]);\n }\n }[\"Toaster.Toaster.useMemo[filteredToasts]\"], [\n toasts,\n id\n ]);\n const possiblePositions = react__WEBPACK_IMPORTED_MODULE_0__.useMemo({\n \"Toaster.Toaster.useMemo[possiblePositions]\": ()=>{\n return Array.from(new Set([\n position\n ].concat(filteredToasts.filter({\n \"Toaster.Toaster.useMemo[possiblePositions]\": (toast)=>toast.position\n }[\"Toaster.Toaster.useMemo[possiblePositions]\"]).map({\n \"Toaster.Toaster.useMemo[possiblePositions]\": (toast)=>toast.position\n }[\"Toaster.Toaster.useMemo[possiblePositions]\"]))));\n }\n }[\"Toaster.Toaster.useMemo[possiblePositions]\"], [\n filteredToasts,\n position\n ]);\n const [heights, setHeights] = react__WEBPACK_IMPORTED_MODULE_0__.useState([]);\n const [expanded, setExpanded] = react__WEBPACK_IMPORTED_MODULE_0__.useState(false);\n const [interacting, setInteracting] = react__WEBPACK_IMPORTED_MODULE_0__.useState(false);\n const [actualTheme, setActualTheme] = react__WEBPACK_IMPORTED_MODULE_0__.useState(theme !== 'system' ? theme : typeof window !== 'undefined' ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' : 'light');\n const listRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(null);\n const isFocusWithinRef = react__WEBPACK_IMPORTED_MODULE_0__.useRef(false);\n const removeToast = react__WEBPACK_IMPORTED_MODULE_0__.useCallback({\n \"Toaster.Toaster.useCallback[removeToast]\": (toastToRemove)=>{\n setToasts({\n \"Toaster.Toaster.useCallback[removeToast]\": (toasts)=>{\n var _toasts_find;\n if (!((_toasts_find = toasts.find({\n \"Toaster.Toaster.useCallback[removeToast]\": (toast)=>toast.id === toastToRemove.id\n }[\"Toaster.Toaster.useCallback[removeToast]\"])) == null ? void 0 : _toasts_find.delete)) {\n ToastState.dismiss(toastToRemove.id);\n }\n return toasts.filter({\n \"Toaster.Toaster.useCallback[removeToast]\": (param)=>{\n let { id } = param;\n return id !== toastToRemove.id;\n }\n }[\"Toaster.Toaster.useCallback[removeToast]\"]);\n }\n }[\"Toaster.Toaster.useCallback[removeToast]\"]);\n }\n }[\"Toaster.Toaster.useCallback[removeToast]\"], []);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"Toaster.Toaster.useEffect\": ()=>{\n return ToastState.subscribe({\n \"Toaster.Toaster.useEffect\": (toast)=>{\n if (toast.dismiss) {\n // Prevent batching of other state updates\n requestAnimationFrame({\n \"Toaster.Toaster.useEffect\": ()=>{\n setToasts({\n \"Toaster.Toaster.useEffect\": (toasts)=>toasts.map({\n \"Toaster.Toaster.useEffect\": (t)=>t.id === toast.id ? {\n ...t,\n delete: true\n } : t\n }[\"Toaster.Toaster.useEffect\"])\n }[\"Toaster.Toaster.useEffect\"]);\n }\n }[\"Toaster.Toaster.useEffect\"]);\n return;\n }\n // Prevent batching, temp solution.\n setTimeout({\n \"Toaster.Toaster.useEffect\": ()=>{\n react_dom__WEBPACK_IMPORTED_MODULE_1__.flushSync({\n \"Toaster.Toaster.useEffect\": ()=>{\n setToasts({\n \"Toaster.Toaster.useEffect\": (toasts)=>{\n const indexOfExistingToast = toasts.findIndex({\n \"Toaster.Toaster.useEffect.indexOfExistingToast\": (t)=>t.id === toast.id\n }[\"Toaster.Toaster.useEffect.indexOfExistingToast\"]);\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n {\n ...toasts[indexOfExistingToast],\n ...toast\n },\n ...toasts.slice(indexOfExistingToast + 1)\n ];\n }\n return [\n toast,\n ...toasts\n ];\n }\n }[\"Toaster.Toaster.useEffect\"]);\n }\n }[\"Toaster.Toaster.useEffect\"]);\n }\n }[\"Toaster.Toaster.useEffect\"]);\n }\n }[\"Toaster.Toaster.useEffect\"]);\n }\n }[\"Toaster.Toaster.useEffect\"], [\n toasts\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"Toaster.Toaster.useEffect\": ()=>{\n if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n if (theme === 'system') {\n // check if current preference is dark\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // it's currently dark\n setActualTheme('dark');\n } else {\n // it's not dark\n setActualTheme('light');\n }\n }\n if (typeof window === 'undefined') return;\n const darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n try {\n // Chrome & Firefox\n darkMediaQuery.addEventListener('change', {\n \"Toaster.Toaster.useEffect\": (param)=>{\n let { matches } = param;\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n }\n }[\"Toaster.Toaster.useEffect\"]);\n } catch (error) {\n // Safari < 14\n darkMediaQuery.addListener({\n \"Toaster.Toaster.useEffect\": (param)=>{\n let { matches } = param;\n try {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n } catch (e) {\n console.error(e);\n }\n }\n }[\"Toaster.Toaster.useEffect\"]);\n }\n }\n }[\"Toaster.Toaster.useEffect\"], [\n theme\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"Toaster.Toaster.useEffect\": ()=>{\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }\n }[\"Toaster.Toaster.useEffect\"], [\n toasts\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"Toaster.Toaster.useEffect\": ()=>{\n const handleKeyDown = {\n \"Toaster.Toaster.useEffect.handleKeyDown\": (event)=>{\n var _listRef_current;\n const isHotkeyPressed = hotkey.every({\n \"Toaster.Toaster.useEffect.handleKeyDown.isHotkeyPressed\": (key)=>event[key] || event.code === key\n }[\"Toaster.Toaster.useEffect.handleKeyDown.isHotkeyPressed\"]);\n if (isHotkeyPressed) {\n var _listRef_current1;\n setExpanded(true);\n (_listRef_current1 = listRef.current) == null ? void 0 : _listRef_current1.focus();\n }\n if (event.code === 'Escape' && (document.activeElement === listRef.current || ((_listRef_current = listRef.current) == null ? void 0 : _listRef_current.contains(document.activeElement)))) {\n setExpanded(false);\n }\n }\n }[\"Toaster.Toaster.useEffect.handleKeyDown\"];\n document.addEventListener('keydown', handleKeyDown);\n return ({\n \"Toaster.Toaster.useEffect\": ()=>document.removeEventListener('keydown', handleKeyDown)\n })[\"Toaster.Toaster.useEffect\"];\n }\n }[\"Toaster.Toaster.useEffect\"], [\n hotkey\n ]);\n react__WEBPACK_IMPORTED_MODULE_0__.useEffect({\n \"Toaster.Toaster.useEffect\": ()=>{\n if (listRef.current) {\n return ({\n \"Toaster.Toaster.useEffect\": ()=>{\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({\n preventScroll: true\n });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n }\n })[\"Toaster.Toaster.useEffect\"];\n }\n }\n }[\"Toaster.Toaster.useEffect\"], [\n listRef.current\n ]);\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"section\", {\n ref: ref,\n \"aria-label\": \"\".concat(containerAriaLabel, \" \").concat(hotkeyLabel),\n tabIndex: -1,\n \"aria-live\": \"polite\",\n \"aria-relevant\": \"additions text\",\n \"aria-atomic\": \"false\",\n suppressHydrationWarning: true\n }, possiblePositions.map((position, index)=>{\n var _heights_;\n const [y, x] = position.split('-');\n if (!filteredToasts.length) return null;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(\"ol\", {\n key: position,\n dir: dir === 'auto' ? getDocumentDirection() : dir,\n tabIndex: -1,\n ref: listRef,\n className: className,\n \"data-sonner-toaster\": true,\n \"data-sonner-theme\": actualTheme,\n \"data-y-position\": y,\n \"data-x-position\": x,\n style: {\n '--front-toast-height': \"\".concat(((_heights_ = heights[0]) == null ? void 0 : _heights_.height) || 0, \"px\"),\n '--width': \"\".concat(TOAST_WIDTH, \"px\"),\n '--gap': \"\".concat(gap, \"px\"),\n ...style,\n ...assignOffset(offset, mobileOffset)\n },\n onBlur: (event)=>{\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({\n preventScroll: true\n });\n lastFocusedElementRef.current = null;\n }\n }\n },\n onFocus: (event)=>{\n const isNotDismissible = event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n if (isNotDismissible) return;\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget;\n }\n },\n onMouseEnter: ()=>setExpanded(true),\n onMouseMove: ()=>setExpanded(true),\n onMouseLeave: ()=>{\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n },\n onDragEnd: ()=>setExpanded(false),\n onPointerDown: (event)=>{\n const isNotDismissible = event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n if (isNotDismissible) return;\n setInteracting(true);\n },\n onPointerUp: ()=>setInteracting(false)\n }, filteredToasts.filter((toast)=>!toast.position && index === 0 || toast.position === position).map((toast, index)=>{\n var _toastOptions_duration, _toastOptions_closeButton;\n return /*#__PURE__*/ react__WEBPACK_IMPORTED_MODULE_0__.createElement(Toast, {\n key: toast.id,\n icons: icons,\n index: index,\n toast: toast,\n defaultRichColors: richColors,\n duration: (_toastOptions_duration = toastOptions == null ? void 0 : toastOptions.duration) != null ? _toastOptions_duration : duration,\n className: toastOptions == null ? void 0 : toastOptions.className,\n descriptionClassName: toastOptions == null ? void 0 : toastOptions.descriptionClassName,\n invert: invert,\n visibleToasts: visibleToasts,\n closeButton: (_toastOptions_closeButton = toastOptions == null ? void 0 : toastOptions.closeButton) != null ? _toastOptions_closeButton : closeButton,\n interacting: interacting,\n position: position,\n style: toastOptions == null ? void 0 : toastOptions.style,\n unstyled: toastOptions == null ? void 0 : toastOptions.unstyled,\n classNames: toastOptions == null ? void 0 : toastOptions.classNames,\n cancelButtonStyle: toastOptions == null ? void 0 : toastOptions.cancelButtonStyle,\n actionButtonStyle: toastOptions == null ? void 0 : toastOptions.actionButtonStyle,\n closeButtonAriaLabel: toastOptions == null ? void 0 : toastOptions.closeButtonAriaLabel,\n removeToast: removeToast,\n toasts: filteredToasts.filter((t)=>t.position == toast.position),\n heights: heights.filter((h)=>h.position == toast.position),\n setHeights: setHeights,\n expandByDefault: expand,\n gap: gap,\n expanded: expanded,\n swipeDirections: props.swipeDirections\n });\n }));\n }));\n}, \"ShJc+0hlP7kpJg+bSV2b9eE3FXo=\")), \"ShJc+0hlP7kpJg+bSV2b9eE3FXo=\");\n_c3 = Toaster;\n\nvar _c, _c1, _c2, _c3;\n$RefreshReg$(_c, \"Loader\");\n$RefreshReg$(_c1, \"Toast\");\n$RefreshReg$(_c2, \"Toaster$React.forwardRef\");\n$RefreshReg$(_c3, \"Toaster\");\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy9zb25uZXIvZGlzdC9pbmRleC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQ0EsU0FBU0EsWUFBWUMsSUFBSTtJQUN2QixJQUFJLENBQUNBLFFBQVEsT0FBT0MsWUFBWSxhQUFhO0lBQzdDLElBQUlDLE9BQU9ELFNBQVNDLElBQUksSUFBSUQsU0FBU0Usb0JBQW9CLENBQUMsT0FBTyxDQUFDLEVBQUU7SUFDcEUsSUFBSUMsUUFBUUgsU0FBU0ksYUFBYSxDQUFDO0lBQ25DRCxNQUFNRSxJQUFJLEdBQUc7SUFDYkosS0FBS0ssV0FBVyxDQUFDSDtJQUNoQkEsTUFBTUksVUFBVSxHQUFJSixNQUFNSSxVQUFVLENBQUNDLE9BQU8sR0FBR1QsT0FBUUksTUFBTUcsV0FBVyxDQUFDTixTQUFTUyxjQUFjLENBQUNWO0FBQ3BHO0FBRTBCO0FBQ087QUFFakMsTUFBTWEsV0FBVyxDQUFDUDtJQUNkLE9BQU9BO1FBQ0gsS0FBSztZQUNELE9BQU9RO1FBQ1gsS0FBSztZQUNELE9BQU9DO1FBQ1gsS0FBSztZQUNELE9BQU9DO1FBQ1gsS0FBSztZQUNELE9BQU9DO1FBQ1g7WUFDSSxPQUFPO0lBQ2Y7QUFDSjtBQUNBLE1BQU1DLE9BQU9DLE1BQU0sSUFBSUMsSUFBSSxDQUFDO0FBQzVCLE1BQU1DLFNBQVM7UUFBQyxFQUFFQyxPQUFPLEVBQUVDLFNBQVMsRUFBRTtJQUNsQyxPQUFPLFdBQVcsR0FBR1osZ0RBQW1CLENBQUMsT0FBTztRQUM1Q1ksV0FBVztZQUNQO1lBQ0FBO1NBQ0gsQ0FBQ0MsTUFBTSxDQUFDQyxTQUFTQyxJQUFJLENBQUM7UUFDdkIsZ0JBQWdCSjtJQUNwQixHQUFHLFdBQVcsR0FBR1gsZ0RBQW1CLENBQUMsT0FBTztRQUN4Q1ksV0FBVztJQUNmLEdBQUdMLEtBQUtTLEdBQUcsQ0FBQyxDQUFDQyxHQUFHQyxJQUFJLFdBQVcsR0FBR2xCLGdEQUFtQixDQUFDLE9BQU87WUFDckRZLFdBQVc7WUFD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LEtBQUs7Z0JBQ3pEOEosVUFBVXNLLGdCQUFnQixPQUFPLEtBQUssSUFBSUEsYUFBYXRLLFFBQVE7Z0JBQy9EaUIsWUFBWXFKLGdCQUFnQixPQUFPLEtBQUssSUFBSUEsYUFBYXJKLFVBQVU7Z0JBQ25FUCxtQkFBbUI0SixnQkFBZ0IsT0FBTyxLQUFLLElBQUlBLGFBQWE1SixpQkFBaUI7Z0JBQ2pGQyxtQkFBbUIySixnQkFBZ0IsT0FBTyxLQUFLLElBQUlBLGFBQWEzSixpQkFBaUI7Z0JBQ2pGUSxzQkFBc0JtSixnQkFBZ0IsT0FBTyxLQUFLLElBQUlBLGFBQWFuSixvQkFBb0I7Z0JBQ3ZGYixhQUFhQTtnQkFDYmxHLFFBQVFzUSxlQUFlcFQsTUFBTSxDQUFDLENBQUN3UyxJQUFJQSxFQUFFaEwsUUFBUSxJQUFJakUsTUFBTWlFLFFBQVE7Z0JBQy9Ec0IsU0FBU0EsUUFBUTlJLE1BQU0sQ0FBQyxDQUFDMk0sSUFBSUEsRUFBRW5GLFFBQVEsSUFBSWpFLE1BQU1pRSxRQUFRO2dCQUN6RG9CLFlBQVlBO2dCQUNaYyxpQkFBaUJvSjtnQkFDakJySixLQUFLQTtnQkFDTFYsVUFBVUE7Z0JBQ1YySCxpQkFBaUI1SSxNQUFNNEksZUFBZTtZQUMxQztRQUNKO0lBQ0o7QUFDSjs7QUFFcUMiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvc29ubmVyL2Rpc3QvaW5kZXgubWpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcbmZ1bmN0aW9uIF9faW5zZXJ0Q1NTKGNvZGUpIHtcbiAgaWYgKCFjb2RlIHx8IHR5cGVvZiBkb2N1bWVudCA9PSAndW5kZWZpbmVkJykgcmV0dXJuXG4gIGxldCBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdXG4gIGxldCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJylcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2NzcydcbiAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSlcbiAgO3N0eWxlLnN0eWxlU2hlZXQgPyAoc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY29kZSkgOiBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjb2RlKSlcbn1cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuXG5jb25zdCBnZXRBc3NldCA9ICh0eXBlKT0+e1xuICAgIHN3aXRjaCh0eXBlKXtcbiAgICAgICAgY2FzZSAnc3VjY2Vzcyc6XG4gICAgICAgICAgICByZXR1cm4gU3VjY2Vzc0ljb247XG4gICAgICAgIGNhc2UgJ2luZm8nOlxuICAgICAgICAgICAgcmV0dXJuIEluZm9JY29uO1xuICAgICAgICBjYXNlICd3YXJuaW5nJzpcbiAgICAgICAgICAgIHJldHVybiBXYXJuaW5nSWNvbjtcbiAgICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICAgICAgcmV0dXJuIEVycm9ySWNvbjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5jb25zdCBiYXJzID0gQXJyYXkoMTIpLmZpbGwoMCk7XG5jb25zdCBMb2FkZXIgPSAoeyB2aXNpYmxlLCBjbGFzc05hbWUgfSk9PntcbiAgICByZXR1cm4gLyojX19QVVJFX18qLyBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBbXG4gICAgICAgICAgICAnc29ubmVyLWxvYWRpbmctd3JhcHBlcicsXG4gICAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpLFxuICAgICAgICBcImRhdGEtdmlzaWJsZVwiOiB2aXNpYmxlXG4gICAgfSwgLyojX19QVVJFX18qLyBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcInNvbm5lci1zcGlubmVyXCJcbiAgICB9LCBiYXJzLm1hcCgoXywgaSk9Pi8qI19fUFVSRV9fKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IFwic29ubmVyLWxvYWRpbmctYmFyXCIsXG4gICAgICAgICAgICBrZXk6IGBzcGlubmVyLWJhci0ke2l9YFxuICAgICAgICB9KSkpKTtcbn07XG5jb25zdCBTdWNjZXNzSWNvbiA9IC8qI19fUFVSRV9fKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyMCAyMFwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgaGVpZ2h0OiBcIjIwXCIsXG4gICAgd2lkdGg6IFwiMjBcIlxufSwgLyojX19QVVJFX18qLyBSZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTEwIDE4YTggOCAwIDEwMC0xNiA4IDggMCAwMDAgMTZ6bTMuODU3LTkuODA5YS43NS43NSAwIDAwLTEuMjE0LS44ODJsLTMuNDgzIDQuNzktMS44OC0xLjg4YS43NS43NSAwIDEwLTEuMDYgMS4wNjFsMi41IDIuNWEuNzUuNzUgMCAwMDEuMTM3LS4wODlsNC01LjV6XCIsXG4gICAgY2xpcFJ1bGU6IFwiZXZlbm9kZFwiXG59KSk7XG5jb25zdCBXYXJuaW5nSWNvbiA9IC8qI19fUFVSRV9fKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyNCAyNFwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgaGVpZ2h0OiBcIjIwXCIsXG4gICAgd2lkdGg6IFwiMjBcIlxufSwgLyojX19QVVJFX18qLyBSZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTkuNDAxIDMuMDAzYzEuMTU1LTIgNC4wNDMtMiA1LjE5NyAwbDcuMzU1IDEyLjc0OGMxLjE1NCAyLS4yOSA0LjUtMi41OTkgNC41SDQuNjQ1Yy0yLjMwOSAwLTMuNzUyLTIuNS0yLjU5OC00LjVMOS40IDMuMDAzek0xMiA4LjI1YS43NS43NSAwIDAxLjc1Ljc1djMuNzVhLjc1Ljc1IDAgMDEtMS41IDBWOWEuNzUuNzUgMCAwMS43NS0uNzV6bTAgOC4yNWEuNzUuNzUgMCAxMDAtMS41Ljc1Ljc1IDAgMDAwIDEuNXpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbn0pKTtcbmNvbnN0IEluZm9JY29uID0gLyojX19QVVJFX18qLyBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDIwIDIwXCIsXG4gICAgZmlsbDogXCJjdXJyZW50Q29sb3JcIixcbiAgICBoZWlnaHQ6IFwiMjBcIixcbiAgICB3aWR0aDogXCIyMFwiXG59LCAvKiNfX1BVUkVfXyovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBmaWxsUnVsZTogXCJldmVub2RkXCIsXG4gICAgZDogXCJNMTggMTBhOCA4IDAgMTEtMTYgMCA4IDggMCAwMTE2IDB6bS03LTRhMSAxIDAgMTEtMiAwIDEgMSAwIDAxMiAwek05IDlhLjc1Ljc1IDAgMDAwIDEuNWguMjUzYS4yNS4yNSAwIDAxLjI0NC4zMDRsLS40NTkgMi4wNjZBMS43NSAxLjc1IDAgMDAxMC43NDcgMTVIMTFhLjc1Ljc1IDAgMDAwLTEuNWgtLjI1M2EuMjUuMjUgMCAwMS0uMjQ0LS4zMDRsLjQ1OS0yLjA2NkExLjc1IDEuNzUgMCAwMDkuMjUzIDlIOXpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbn0pKTtcbmNvbnN0IEVycm9ySWNvbiA9IC8qI19fUFVSRV9fKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB2aWV3Qm94OiBcIjAgMCAyMCAyMFwiLFxuICAgIGZpbGw6IFwiY3VycmVudENvbG9yXCIsXG4gICAgaGVpZ2h0OiBcIjIwXCIsXG4gICAgd2lkdGg6IFwiMjBcIlxufSwgLyojX19QVVJFX18qLyBSZWFjdC5jcmVhdGVFbGVtZW50KFwicGF0aFwiLCB7XG4gICAgZmlsbFJ1bGU6IFwiZXZlbm9kZFwiLFxuICAgIGQ6IFwiTTE4IDEwYTggOCAwIDExLTE2IDAgOCA4IDAgMDExNiAwem0tOC01YS43NS43NSAwIDAxLjc1Ljc1djQuNWEuNzUuNzUgMCAwMS0xLjUgMHYtNC41QS43NS43NSAwIDAxMTAgNXptMCAxMGExIDEgMCAxMDAtMiAxIDEgMCAwMDAgMnpcIixcbiAgICBjbGlwUnVsZTogXCJldmVub2RkXCJcbn0pKTtcbmNvbnN0IENsb3NlSWNvbiA9IC8qI19fUFVSRV9fKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XG4gICAgeG1sbnM6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIixcbiAgICB3aWR0aDogXCIxMlwiLFxuICAgIGhlaWdodDogXCIxMlwiLFxuICAgIHZpZXdCb3g6IFwiMCAwIDI0IDI0XCIsXG4gICAgZmlsbDogXCJub25lXCIsXG4gICAgc3Ryb2tlOiBcImN1cnJlbnRDb2xvclwiLFxuICAgIHN0cm9rZVdpZHRoOiBcIjEuNVwiLFxuICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICBzdHJva2VMaW5lam9pbjogXCJyb3VuZFwiXG59LCAvKiNfX1BVUkVfXyovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaW5lXCIsIHtcbiAgICB4MTogXCIxOFwiLFxuICAgIHkxOiBcIjZcIixcbiAgICB4MjogXCI2XCIsXG4gICAgeTI6IFwiMThcIlxufSksIC8qI19fUFVSRV9fKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcImxpbmVcIiwge1xuICAgIHgxOiBcIjZcIixcbiAgICB5MTogXCI2XCIsXG4gICAgeDI6IFwiMThcIixcbiAgICB5MjogXCIxOFwiXG59KSk7XG5cbmNvbnN0IHVzZUlzRG9jdW1lbnRIaWRkZW4gPSAoKT0+e1xuICAgIGNvbnN0IFtpc0RvY3VtZW50SGlkZGVuLCBzZXRJc0RvY3VtZW50SGlkZGVuXSA9IFJlYWN0LnVzZVN0YXRlKGRvY3VtZW50LmhpZGRlbik7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gKCk9PntcbiAgICAgICAgICAgIHNldElzRG9jdW1lbnRIaWRkZW4oZG9jdW1lbnQuaGlkZGVuKTtcbiAgICAgICAgfTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuICgpPT53aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIGlzRG9jdW1lbnRIaWRkZW47XG59O1xuXG5sZXQgdG9hc3RzQ291bnRlciA9IDE7XG5jbGFzcyBPYnNlcnZlciB7XG4gICAgY29uc3RydWN0b3IoKXtcbiAgICAgICAgLy8gV2UgdXNlIGFycm93IGZ1bmN0aW9ucyB0byBtYWludGFpbiB0aGUgY29ycmVjdCBgdGhpc2AgcmVmZXJlbmNlXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlID0gKHN1YnNjcmliZXIpPT57XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuc3Vic2NyaWJlcnMuaW5kZXhPZihzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmliZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnB1Ymxpc2ggPSAoZGF0YSk9PntcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoc3Vic2NyaWJlcik9PnN1YnNjcmliZXIoZGF0YSkpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmFkZFRvYXN0ID0gKGRhdGEpPT57XG4gICAgICAgICAgICB0aGlzLnB1Ymxpc2goZGF0YSk7XG4gICAgICAgICAgICB0aGlzLnRvYXN0cyA9IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnRvYXN0cyxcbiAgICAgICAgICAgICAgICBkYXRhXG4gICAgICAgICAgICBdO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmNyZWF0ZSA9IChkYXRhKT0+e1xuICAgICAgICAgICAgdmFyIF9kYXRhX2lkO1xuICAgICAgICAgICAgY29uc3QgeyBtZXNzYWdlLCAuLi5yZXN0IH0gPSBkYXRhO1xuICAgICAgICAgICAgY29uc3QgaWQgPSB0eXBlb2YgKGRhdGEgPT0gbnVsbCA/IHZvaWQgMCA6IGRhdGEuaWQpID09PSAnbnVtYmVyJyB8fCAoKF9kYXRhX2lkID0gZGF0YS5pZCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9kYXRhX2lkLmxlbmd0aCkgPiAwID8gZGF0YS5pZCA6IHRvYXN0c0NvdW50ZXIrKztcbiAgICAgICAgICAgIGNvbnN0IGFscmVhZHlFeGlzdHMgPSB0aGlzLnRvYXN0cy5maW5kKCh0b2FzdCk9PntcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9hc3QuaWQgPT09IGlkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBkaXNtaXNzaWJsZSA9IGRhdGEuZGlzbWlzc2libGUgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBkYXRhLmRpc21pc3NpYmxlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzbWlzc2VkVG9hc3RzLmhhcyhpZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc21pc3NlZFRvYXN0cy5kZWxldGUoaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFscmVhZHlFeGlzdHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0cyA9IHRoaXMudG9hc3RzLm1hcCgodG9hc3QpPT57XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2FzdC5pZCA9PT0gaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHVibGlzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udG9hc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRvYXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzbWlzc2libGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvYXN0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFRvYXN0KHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IG1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIC4uLnJlc3QsXG4gICAgICAgICAgICAgICAgICAgIGRpc21pc3NpYmxlLFxuICAgICAgICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRpc21pc3MgPSAoaWQpPT57XG4gICAgICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc21pc3NlZFRvYXN0cy5hZGQoaWQpO1xuICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChzdWJzY3JpYmVyKT0+c3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzbWlzczogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHMuZm9yRWFjaCgodG9hc3QpPT57XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlcnMuZm9yRWFjaCgoc3Vic2NyaWJlcik9PnN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiB0b2FzdC5pZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNtaXNzOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IChtZXNzYWdlLCBkYXRhKT0+e1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmVycm9yID0gKG1lc3NhZ2UsIGRhdGEpPT57XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICAgICAgbWVzc2FnZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5zdWNjZXNzID0gKG1lc3NhZ2UsIGRhdGEpPT57XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmluZm8gPSAobWVzc2FnZSwgZGF0YSk9PntcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgLi4uZGF0YSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgICAgICAgbWVzc2FnZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMud2FybmluZyA9IChtZXNzYWdlLCBkYXRhKT0+e1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgICAgICAgIHR5cGU6ICd3YXJuaW5nJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gKG1lc3NhZ2UsIGRhdGEpPT57XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIC4uLmRhdGEsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2xvYWRpbmcnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2VcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnByb21pc2UgPSAocHJvbWlzZSwgZGF0YSk9PntcbiAgICAgICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIE5vdGhpbmcgdG8gc2hvd1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBpZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGlmIChkYXRhLmxvYWRpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGlkID0gdGhpcy5jcmVhdGUoe1xuICAgICAgICAgICAgICAgICAgICAuLi5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwcm9taXNlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbG9hZGluZycsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRhdGEubG9hZGluZyxcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IHR5cGVvZiBkYXRhLmRlc2NyaXB0aW9uICE9PSAnZnVuY3Rpb24nID8gZGF0YS5kZXNjcmlwdGlvbiA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFByb21pc2UucmVzb2x2ZShwcm9taXNlIGluc3RhbmNlb2YgRnVuY3Rpb24gPyBwcm9taXNlKCkgOiBwcm9taXNlKTtcbiAgICAgICAgICAgIGxldCBzaG91bGREaXNtaXNzID0gaWQgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGxldCByZXN1bHQ7XG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbFByb21pc2UgPSBwLnRoZW4oYXN5bmMgKHJlc3BvbnNlKT0+e1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IFtcbiAgICAgICAgICAgICAgICAgICAgJ3Jlc29sdmUnLFxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgY29uc3QgaXNSZWFjdEVsZW1lbnRSZXNwb25zZSA9IFJlYWN0LmlzVmFsaWRFbGVtZW50KHJlc3BvbnNlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNSZWFjdEVsZW1lbnRSZXNwb25zZSkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGREaXNtaXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2RlZmF1bHQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogcmVzcG9uc2VcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc0h0dHBSZXNwb25zZShyZXNwb25zZSkgJiYgIXJlc3BvbnNlLm9rKSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3VsZERpc21pc3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZURhdGEgPSB0eXBlb2YgZGF0YS5lcnJvciA9PT0gJ2Z1bmN0aW9uJyA/IGF3YWl0IGRhdGEuZXJyb3IoYEhUVFAgZXJyb3IhIHN0YXR1czogJHtyZXNwb25zZS5zdGF0dXN9YCkgOiBkYXRhLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHR5cGVvZiBkYXRhLmRlc2NyaXB0aW9uID09PSAnZnVuY3Rpb24nID8gYXdhaXQgZGF0YS5kZXNjcmlwdGlvbihgSFRUUCBlcnJvciEgc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKSA6IGRhdGEuZGVzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRXh0ZW5kZWRSZXN1bHQgPSB0eXBlb2YgcHJvbWlzZURhdGEgPT09ICdvYmplY3QnICYmICFSZWFjdC5pc1ZhbGlkRWxlbWVudChwcm9taXNlRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvYXN0U2V0dGluZ3MgPSBpc0V4dGVuZGVkUmVzdWx0ID8gcHJvbWlzZURhdGEgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBwcm9taXNlRGF0YVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRvYXN0U2V0dGluZ3NcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3VsZERpc21pc3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZURhdGEgPSB0eXBlb2YgZGF0YS5lcnJvciA9PT0gJ2Z1bmN0aW9uJyA/IGF3YWl0IGRhdGEuZXJyb3IocmVzcG9uc2UpIDogZGF0YS5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0eXBlb2YgZGF0YS5kZXNjcmlwdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGF3YWl0IGRhdGEuZGVzY3JpcHRpb24ocmVzcG9uc2UpIDogZGF0YS5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNFeHRlbmRlZFJlc3VsdCA9IHR5cGVvZiBwcm9taXNlRGF0YSA9PT0gJ29iamVjdCcgJiYgIVJlYWN0LmlzVmFsaWRFbGVtZW50KHByb21pc2VEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9hc3RTZXR0aW5ncyA9IGlzRXh0ZW5kZWRSZXN1bHQgPyBwcm9taXNlRGF0YSA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHByb21pc2VEYXRhXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4udG9hc3RTZXR0aW5nc1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGRhdGEuc3VjY2VzcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3VsZERpc21pc3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJvbWlzZURhdGEgPSB0eXBlb2YgZGF0YS5zdWNjZXNzID09PSAnZnVuY3Rpb24nID8gYXdhaXQgZGF0YS5zdWNjZXNzKHJlc3BvbnNlKSA6IGRhdGEuc3VjY2VzcztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0eXBlb2YgZGF0YS5kZXNjcmlwdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IGF3YWl0IGRhdGEuZGVzY3JpcHRpb24ocmVzcG9uc2UpIDogZGF0YS5kZXNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXNFeHRlbmRlZFJlc3VsdCA9IHR5cGVvZiBwcm9taXNlRGF0YSA9PT0gJ29iamVjdCcgJiYgIVJlYWN0LmlzVmFsaWRFbGVtZW50KHByb21pc2VEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9hc3RTZXR0aW5ncyA9IGlzRXh0ZW5kZWRSZXN1bHQgPyBwcm9taXNlRGF0YSA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IHByb21pc2VEYXRhXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50b2FzdFNldHRpbmdzXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pLmNhdGNoKGFzeW5jIChlcnJvcik9PntcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBbXG4gICAgICAgICAgICAgICAgICAgICdyZWplY3QnLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgaWYgKGRhdGEuZXJyb3IgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGREaXNtaXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHByb21pc2VEYXRhID0gdHlwZW9mIGRhdGEuZXJyb3IgPT09ICdmdW5jdGlvbicgPyBhd2FpdCBkYXRhLmVycm9yKGVycm9yKSA6IGRhdGEuZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gdHlwZW9mIGRhdGEuZGVzY3JpcHRpb24gPT09ICdmdW5jdGlvbicgPyBhd2FpdCBkYXRhLmRlc2NyaXB0aW9uKGVycm9yKSA6IGRhdGEuZGVzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRXh0ZW5kZWRSZXN1bHQgPSB0eXBlb2YgcHJvbWlzZURhdGEgPT09ICdvYmplY3QnICYmICFSZWFjdC5pc1ZhbGlkRWxlbWVudChwcm9taXNlRGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvYXN0U2V0dGluZ3MgPSBpc0V4dGVuZGVkUmVzdWx0ID8gcHJvbWlzZURhdGEgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBwcm9taXNlRGF0YVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRvYXN0U2V0dGluZ3NcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkuZmluYWxseSgoKT0+e1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREaXNtaXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRvYXN0IGlzIHN0aWxsIGluIGxvYWQgc3RhdGUgKGFuZCB3aWxsIGJlIGluZGVmaW5pdGVseSDigJQgZGlzbWlzcyBpdClcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNtaXNzKGlkKTtcbiAgICAgICAgICAgICAgICAgICAgaWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRhdGEuZmluYWxseSA9PSBudWxsID8gdm9pZCAwIDogZGF0YS5maW5hbGx5LmNhbGwoZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHVud3JhcCA9ICgpPT5uZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KT0+b3JpZ2luYWxQcm9taXNlLnRoZW4oKCk9PnJlc3VsdFswXSA9PT0gJ3JlamVjdCcgPyByZWplY3QocmVzdWx0WzFdKSA6IHJlc29sdmUocmVzdWx0WzFdKSkuY2F0Y2gocmVqZWN0KSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlkICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgaWQgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgLy8gY2Fubm90IE9iamVjdC5hc3NpZ24gb24gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdW53cmFwXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oaWQsIHtcbiAgICAgICAgICAgICAgICAgICAgdW53cmFwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY3VzdG9tID0gKGpzeCwgZGF0YSk9PntcbiAgICAgICAgICAgIGNvbnN0IGlkID0gKGRhdGEgPT0gbnVsbCA/IHZvaWQgMCA6IGRhdGEuaWQpIHx8IHRvYXN0c0NvdW50ZXIrKztcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICBqc3g6IGpzeChpZCksXG4gICAgICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICAgICAgLi4uZGF0YVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2V0QWN0aXZlVG9hc3RzID0gKCk9PntcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRvYXN0cy5maWx0ZXIoKHRvYXN0KT0+IXRoaXMuZGlzbWlzc2VkVG9hc3RzLmhhcyh0b2FzdC5pZCkpO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnN1YnNjcmliZXJzID0gW107XG4gICAgICAgIHRoaXMudG9hc3RzID0gW107XG4gICAgICAgIHRoaXMuZGlzbWlzc2VkVG9hc3RzID0gbmV3IFNldCgpO1xuICAgIH1cbn1cbmNvbnN0IFRvYXN0U3RhdGUgPSBuZXcgT2JzZXJ2ZXIoKTtcbi8vIGJpbmQgdGhpcyB0byB0aGUgdG9hc3QgZnVuY3Rpb25cbmNvbnN0IHRvYXN0RnVuY3Rpb24gPSAobWVzc2FnZSwgZGF0YSk9PntcbiAgICBjb25zdCBpZCA9IChkYXRhID09IG51bGwgPyB2b2lkIDAgOiBkYXRhLmlkKSB8fCB0b2FzdHNDb3VudGVyKys7XG4gICAgVG9hc3RTdGF0ZS5hZGRUb2FzdCh7XG4gICAgICAgIHRpdGxlOiBtZXNzYWdlLFxuICAgICAgICAuLi5kYXRhLFxuICAgICAgICBpZFxuICAgIH0pO1xuICAgIHJldHVybiBpZDtcbn07XG5jb25zdCBpc0h0dHBSZXNwb25zZSA9IChkYXRhKT0+e1xuICAgIHJldHVybiBkYXRhICYmIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAnb2snIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEub2sgPT09ICdib29sZWFuJyAmJiAnc3RhdHVzJyBpbiBkYXRhICYmIHR5cGVvZiBkYXRhLnN0YXR1cyA9PT0gJ251bWJlcic7XG59O1xuY29uc3QgYmFzaWNUb2FzdCA9IHRvYXN0RnVuY3Rpb247XG5jb25zdCBnZXRIaXN0b3J5ID0gKCk9PlRvYXN0U3RhdGUudG9hc3RzO1xuY29uc3QgZ2V0VG9hc3RzID0gKCk9PlRvYXN0U3RhdGUuZ2V0QWN0aXZlVG9hc3RzKCk7XG4vLyBXZSB1c2UgYE9iamVjdC5hc3NpZ25gIHRvIG1haW50YWluIHRoZSBjb3JyZWN0IHR5cGVzIGFzIHdlIHdvdWxkIGxvc2UgdGhlbSBvdGhlcndpc2VcbmNvbnN0IHRvYXN0ID0gT2JqZWN0LmFzc2lnbihiYXNpY1RvYXN0LCB7XG4gICAgc3VjY2VzczogVG9hc3RTdGF0ZS5zdWNjZXNzLFxuICAgIGluZm86IFRvYXN0U3RhdGUuaW5mbyxcbiAgICB3YXJuaW5nOiBUb2FzdFN0YXRlLndhcm5pbmcsXG4gICAgZXJyb3I6IFRvYXN0U3RhdGUuZXJyb3IsXG4gICAgY3VzdG9tOiBUb2FzdFN0YXRlLmN1c3RvbSxcbiAgICBtZXNzYWdlOiBUb2FzdFN0YXRlLm1lc3NhZ2UsXG4gICAgcHJvbWlzZTogVG9hc3RTdGF0ZS5wcm9taXNlLFxuICAgIGRpc21pc3M6IFRvYXN0U3RhdGUuZGlzbWlzcyxcbiAgICBsb2FkaW5nOiBUb2FzdFN0YXRlLmxvYWRpbmdcbn0sIHtcbiAgICBnZXRIaXN0b3J5LFxuICAgIGdldFRvYXN0c1xufSk7XG5cbl9faW5zZXJ0Q1NTKFwiW2RhdGEtc29ubmVyLXRvYXN0ZXJdW2Rpcj1sdHJdLGh0bWxbZGlyPWx0cl17LS10b2FzdC1pY29uLW1hcmdpbi1zdGFydDotM3B4Oy0tdG9hc3QtaWNvbi1tYXJnaW4tZW5kOjRweDstLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQ6LTFweDstLXRvYXN0LXN2Zy1tYXJnaW4tZW5kOjBweDstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tc3RhcnQ6YXV0bzstLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kOjA7LS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQ6MDstLXRvYXN0LWNsb3NlLWJ1dHRvbi1lbmQ6dW5zZXQ7LS10b2FzdC1jbG9zZS1idXR0b24tdHJhbnNmb3JtOnRyYW5zbGF0ZSgtMzUlLCAtMzUlKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGlyPXJ0bF0saHRtbFtkaXI9cnRsXXstLXRvYXN0LWljb24tbWFyZ2luLXN0YXJ0OjRweDstLXRvYXN0LWljb24tbWFyZ2luLWVuZDotM3B4Oy0tdG9hc3Qtc3ZnLW1hcmdpbi1zdGFydDowcHg7LS10b2FzdC1zdmctbWFyZ2luLWVuZDotMXB4Oy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydDowOy0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQ6YXV0bzstLXRvYXN0LWNsb3NlLWJ1dHRvbi1zdGFydDp1bnNldDstLXRvYXN0LWNsb3NlLWJ1dHRvbi1lbmQ6MDstLXRvYXN0LWNsb3NlLWJ1dHRvbi10cmFuc2Zvcm06dHJhbnNsYXRlKDM1JSwgLTM1JSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJde3Bvc2l0aW9uOmZpeGVkO3dpZHRoOnZhcigtLXdpZHRoKTtmb250LWZhbWlseTp1aS1zYW5zLXNlcmlmLHN5c3RlbS11aSwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCxTZWdvZSBVSSxSb2JvdG8sSGVsdmV0aWNhIE5ldWUsQXJpYWwsTm90byBTYW5zLHNhbnMtc2VyaWYsQXBwbGUgQ29sb3IgRW1vamksU2Vnb2UgVUkgRW1vamksU2Vnb2UgVUkgU3ltYm9sLE5vdG8gQ29sb3IgRW1vamk7LS1ncmF5MTpoc2woMCwgMCUsIDk5JSk7LS1ncmF5Mjpoc2woMCwgMCUsIDk3LjMlKTstLWdyYXkzOmhzbCgwLCAwJSwgOTUuMSUpOy0tZ3JheTQ6aHNsKDAsIDAlLCA5MyUpOy0tZ3JheTU6aHNsKDAsIDAlLCA5MC45JSk7LS1ncmF5Njpoc2woMCwgMCUsIDg4LjclKTstLWdyYXk3OmhzbCgwLCAwJSwgODUuOCUpOy0tZ3JheTg6aHNsKDAsIDAlLCA3OCUpOy0tZ3JheTk6aHNsKDAsIDAlLCA1Ni4xJSk7LS1ncmF5MTA6aHNsKDAsIDAlLCA1Mi4zJSk7LS1ncmF5MTE6aHNsKDAsIDAlLCA0My41JSk7LS1ncmF5MTI6aHNsKDAsIDAlLCA5JSk7LS1ib3JkZXItcmFkaXVzOjhweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7cGFkZGluZzowO21hcmdpbjowO2xpc3Qtc3R5bGU6bm9uZTtvdXRsaW5lOjA7ei1pbmRleDo5OTk5OTk5OTk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjRzIGVhc2V9QG1lZGlhIChob3Zlcjpub25lKSBhbmQgKHBvaW50ZXI6Y29hcnNlKXtbZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1saWZ0ZWQ9dHJ1ZV17dHJhbnNmb3JtOm5vbmV9fVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXgtcG9zaXRpb249cmlnaHRde3JpZ2h0OnZhcigtLW9mZnNldC1yaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1sZWZ0XXtsZWZ0OnZhcigtLW9mZnNldC1sZWZ0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS14LXBvc2l0aW9uPWNlbnRlcl17bGVmdDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoLTUwJSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj10b3Bde3RvcDp2YXIoLS1vZmZzZXQtdG9wKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV17Ym90dG9tOnZhcigtLW9mZnNldC1ib3R0b20pfVtkYXRhLXNvbm5lci10b2FzdF17LS15OnRyYW5zbGF0ZVkoMTAwJSk7LS1saWZ0LWFtb3VudDpjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tZ2FwKSk7ei1pbmRleDp2YXIoLS16LWluZGV4KTtwb3NpdGlvbjphYnNvbHV0ZTtvcGFjaXR5OjA7dHJhbnNmb3JtOnZhcigtLXkpO3RvdWNoLWFjdGlvbjpub25lO3RyYW5zaXRpb246dHJhbnNmb3JtIC40cyxvcGFjaXR5IC40cyxoZWlnaHQgLjRzLGJveC1zaGFkb3cgLjJzO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdXRsaW5lOjA7b3ZlcmZsb3ctd3JhcDphbnl3aGVyZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVde3BhZGRpbmc6MTZweDtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1ub3JtYWwtYm9yZGVyKTtjb2xvcjp2YXIoLS1ub3JtYWwtdGV4dCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1ib3JkZXItcmFkaXVzKTtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSk7d2lkdGg6dmFyKC0td2lkdGgpO2ZvbnQtc2l6ZToxM3B4O2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjZweH1bZGF0YS1zb25uZXItdG9hc3RdOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDRweCAxMnB4IHJnYmEoMCwwLDAsLjEpLDAgMCAwIDJweCByZ2JhKDAsMCwwLC4yKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteS1wb3NpdGlvbj10b3Bde3RvcDowOy0teTp0cmFuc2xhdGVZKC0xMDAlKTstLWxpZnQ6MTstLWxpZnQtYW1vdW50OmNhbGMoMSAqIHZhcigtLWdhcCkpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV17Ym90dG9tOjA7LS15OnRyYW5zbGF0ZVkoMTAwJSk7LS1saWZ0Oi0xOy0tbGlmdC1hbW91bnQ6Y2FsYyh2YXIoLS1saWZ0KSAqIHZhcigtLWdhcCkpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtZGVzY3JpcHRpb25de2ZvbnQtd2VpZ2h0OjQwMDtsaW5lLWhlaWdodDoxLjQ7Y29sb3I6IzNmM2YzZn1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtZGVzY3JpcHRpb25de2NvbG9yOmluaGVyaXR9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLWRlc2NyaXB0aW9uXXtjb2xvcjojZThlOGU4fVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtdGl0bGVde2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxLjU7Y29sb3I6aW5oZXJpdH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWljb25de2Rpc3BsYXk6ZmxleDtoZWlnaHQ6MTZweDt3aWR0aDoxNnB4O3Bvc2l0aW9uOnJlbGF0aXZlO2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXNocmluazowO21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LWljb24tbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3QtaWNvbi1tYXJnaW4tZW5kKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcHJvbWlzZT10cnVlXSBbZGF0YS1pY29uXT5zdmd7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7YW5pbWF0aW9uOnNvbm5lci1mYWRlLWluIC4zcyBlYXNlIGZvcndhcmRzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtaWNvbl0+KntmbGV4LXNocmluazowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtaWNvbl0gc3Zne21hcmdpbi1sZWZ0OnZhcigtLXRvYXN0LXN2Zy1tYXJnaW4tc3RhcnQpO21hcmdpbi1yaWdodDp2YXIoLS10b2FzdC1zdmctbWFyZ2luLWVuZCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1jb250ZW50XXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoycHh9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1idXR0b25de2JvcmRlci1yYWRpdXM6NHB4O3BhZGRpbmctbGVmdDo4cHg7cGFkZGluZy1yaWdodDo4cHg7aGVpZ2h0OjI0cHg7Zm9udC1zaXplOjEycHg7Y29sb3I6dmFyKC0tbm9ybWFsLWJnKTtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC10ZXh0KTttYXJnaW4tbGVmdDp2YXIoLS10b2FzdC1idXR0b24tbWFyZ2luLXN0YXJ0KTttYXJnaW4tcmlnaHQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1lbmQpO2JvcmRlcjpub25lO2ZvbnQtd2VpZ2h0OjUwMDtjdXJzb3I6cG9pbnRlcjtvdXRsaW5lOjA7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXNocmluazowO3RyYW5zaXRpb246b3BhY2l0eSAuNHMsYm94LXNoYWRvdyAuMnN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1idXR0b25dOmZvY3VzLXZpc2libGV7Ym94LXNoYWRvdzowIDAgMCAycHggcmdiYSgwLDAsMCwuNCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN0eWxlZD10cnVlXSBbZGF0YS1idXR0b25dOmZpcnN0LW9mLXR5cGV7bWFyZ2luLWxlZnQ6dmFyKC0tdG9hc3QtYnV0dG9uLW1hcmdpbi1zdGFydCk7bWFyZ2luLXJpZ2h0OnZhcigtLXRvYXN0LWJ1dHRvbi1tYXJnaW4tZW5kKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNhbmNlbF17Y29sb3I6dmFyKC0tbm9ybWFsLXRleHQpO2JhY2tncm91bmQ6cmdiYSgwLDAsMCwuMDgpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1kYXJrXSBbZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNhbmNlbF17YmFja2dyb3VuZDpyZ2JhKDI1NSwyNTUsMjU1LC4zKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNsb3NlLWJ1dHRvbl17cG9zaXRpb246YWJzb2x1dGU7bGVmdDp2YXIoLS10b2FzdC1jbG9zZS1idXR0b24tc3RhcnQpO3JpZ2h0OnZhcigtLXRvYXN0LWNsb3NlLWJ1dHRvbi1lbmQpO3RvcDowO2hlaWdodDoyMHB4O3dpZHRoOjIwcHg7ZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpjZW50ZXI7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6MDtjb2xvcjp2YXIoLS1ncmF5MTIpO2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnKTtib3JkZXI6MXB4IHNvbGlkIHZhcigtLWdyYXk0KTt0cmFuc2Zvcm06dmFyKC0tdG9hc3QtY2xvc2UtYnV0dG9uLXRyYW5zZm9ybSk7Ym9yZGVyLXJhZGl1czo1MCU7Y3Vyc29yOnBvaW50ZXI7ei1pbmRleDoxO3RyYW5zaXRpb246b3BhY2l0eSAuMXMsYmFja2dyb3VuZCAuMnMsYm9yZGVyLWNvbG9yIC4yc31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3R5bGVkPXRydWVdIFtkYXRhLWNsb3NlLWJ1dHRvbl06Zm9jdXMtdmlzaWJsZXtib3gtc2hhZG93OjAgNHB4IDEycHggcmdiYSgwLDAsMCwuMSksMCAwIDAgMnB4IHJnYmEoMCwwLDAsLjIpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV0gW2RhdGEtZGlzYWJsZWQ9dHJ1ZV17Y3Vyc29yOm5vdC1hbGxvd2VkfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zdHlsZWQ9dHJ1ZV06aG92ZXIgW2RhdGEtY2xvc2UtYnV0dG9uXTpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLWdyYXkyKTtib3JkZXItY29sb3I6dmFyKC0tZ3JheTUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMDAlO3JpZ2h0Oi0xMDAlO2hlaWdodDoxMDAlO3otaW5kZXg6LTF9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXktcG9zaXRpb249dG9wXVtkYXRhLXN3aXBpbmc9dHJ1ZV06OmJlZm9yZXtib3R0b206NTAlO3RyYW5zZm9ybTpzY2FsZVkoMykgdHJhbnNsYXRlWSg1MCUpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS15LXBvc2l0aW9uPWJvdHRvbV1bZGF0YS1zd2lwaW5nPXRydWVdOjpiZWZvcmV7dG9wOjUwJTt0cmFuc2Zvcm06c2NhbGVZKDMpIHRyYW5zbGF0ZVkoLTUwJSl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBpbmc9ZmFsc2VdW2RhdGEtcmVtb3ZlZD10cnVlXTo6YmVmb3Jle2NvbnRlbnQ6Jyc7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt0cmFuc2Zvcm06c2NhbGVZKDIpfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1leHBhbmRlZD10cnVlXTo6YWZ0ZXJ7Y29udGVudDonJztwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0OjA7aGVpZ2h0OmNhbGModmFyKC0tZ2FwKSArIDFweCk7Ym90dG9tOjEwMCU7d2lkdGg6MTAwJX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtbW91bnRlZD10cnVlXXstLXk6dHJhbnNsYXRlWSgwKTtvcGFjaXR5OjF9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWV4cGFuZGVkPWZhbHNlXVtkYXRhLWZyb250PWZhbHNlXXstLXNjYWxlOnZhcigtLXRvYXN0cy1iZWZvcmUpICogMC4wNSArIDE7LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0LWFtb3VudCkgKiB2YXIoLS10b2FzdHMtYmVmb3JlKSkpIHNjYWxlKGNhbGMoLTEgKiB2YXIoLS1zY2FsZSkpKTtoZWlnaHQ6dmFyKC0tZnJvbnQtdG9hc3QtaGVpZ2h0KX1bZGF0YS1zb25uZXItdG9hc3RdPip7dHJhbnNpdGlvbjpvcGFjaXR5IC40c31bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteC1wb3NpdGlvbj1yaWdodF17cmlnaHQ6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEteC1wb3NpdGlvbj1sZWZ0XXtsZWZ0OjB9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWV4cGFuZGVkPWZhbHNlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN0eWxlZD10cnVlXT4qe29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdmlzaWJsZT1mYWxzZV17b3BhY2l0eTowO3BvaW50ZXItZXZlbnRzOm5vbmV9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLW1vdW50ZWQ9dHJ1ZV1bZGF0YS1leHBhbmRlZD10cnVlXXstLXk6dHJhbnNsYXRlWShjYWxjKHZhcigtLWxpZnQpICogdmFyKC0tb2Zmc2V0KSkpO2hlaWdodDp2YXIoLS1pbml0aWFsLWhlaWdodCl9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXJlbW92ZWQ9dHJ1ZV1bZGF0YS1mcm9udD10cnVlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV17LS15OnRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1saWZ0KSAqIC0xMDAlKSk7b3BhY2l0eTowfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9ZmFsc2VdW2RhdGEtc3dpcGUtb3V0PWZhbHNlXVtkYXRhLWV4cGFuZGVkPXRydWVdey0teTp0cmFuc2xhdGVZKGNhbGModmFyKC0tbGlmdCkgKiB2YXIoLS1vZmZzZXQpICsgdmFyKC0tbGlmdCkgKiAtMTAwJSkpO29wYWNpdHk6MH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtcmVtb3ZlZD10cnVlXVtkYXRhLWZyb250PWZhbHNlXVtkYXRhLXN3aXBlLW91dD1mYWxzZV1bZGF0YS1leHBhbmRlZD1mYWxzZV17LS15OnRyYW5zbGF0ZVkoNDAlKTtvcGFjaXR5OjA7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjVzLG9wYWNpdHkgLjJzfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1yZW1vdmVkPXRydWVdW2RhdGEtZnJvbnQ9ZmFsc2VdOjpiZWZvcmV7aGVpZ2h0OmNhbGModmFyKC0taW5pdGlhbC1oZWlnaHQpICsgMjAlKX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGluZz10cnVlXXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWSh2YXIoLS1zd2lwZS1hbW91bnQteSwwKSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCwwKSk7dHJhbnNpdGlvbjpub25lfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZWQ9dHJ1ZV17dXNlci1zZWxlY3Q6bm9uZX1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21dLFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS15LXBvc2l0aW9uPXRvcF17YW5pbWF0aW9uLWR1cmF0aW9uOi4yczthbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOmVhc2Utb3V0O2FuaW1hdGlvbi1maWxsLW1vZGU6Zm9yd2FyZHN9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj1sZWZ0XXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtbGVmdH1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtc3dpcGUtb3V0PXRydWVdW2RhdGEtc3dpcGUtZGlyZWN0aW9uPXJpZ2h0XXthbmltYXRpb24tbmFtZTpzd2lwZS1vdXQtcmlnaHR9W2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLXN3aXBlLW91dD10cnVlXVtkYXRhLXN3aXBlLWRpcmVjdGlvbj11cF17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LXVwfVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1zd2lwZS1vdXQ9dHJ1ZV1bZGF0YS1zd2lwZS1kaXJlY3Rpb249ZG93bl17YW5pbWF0aW9uLW5hbWU6c3dpcGUtb3V0LWRvd259QGtleWZyYW1lcyBzd2lwZS1vdXQtbGVmdHtmcm9te3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKHZhcigtLXN3aXBlLWFtb3VudC14KSk7b3BhY2l0eToxfXRve3RyYW5zZm9ybTp2YXIoLS15KSB0cmFuc2xhdGVYKGNhbGModmFyKC0tc3dpcGUtYW1vdW50LXgpIC0gMTAwJSkpO29wYWNpdHk6MH19QGtleWZyYW1lcyBzd2lwZS1vdXQtcmlnaHR7ZnJvbXt0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWCh2YXIoLS1zd2lwZS1hbW91bnQteCkpO29wYWNpdHk6MX10b3t0cmFuc2Zvcm06dmFyKC0teSkgdHJhbnNsYXRlWChjYWxjKHZhcigtLXN3aXBlLWFtb3VudC14KSArIDEwMCUpKTtvcGFjaXR5OjB9fUBrZXlmcmFtZXMgc3dpcGUtb3V0LXVwe2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXkpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteSkgLSAxMDAlKSk7b3BhY2l0eTowfX1Aa2V5ZnJhbWVzIHN3aXBlLW91dC1kb3due2Zyb217dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkodmFyKC0tc3dpcGUtYW1vdW50LXkpKTtvcGFjaXR5OjF9dG97dHJhbnNmb3JtOnZhcigtLXkpIHRyYW5zbGF0ZVkoY2FsYyh2YXIoLS1zd2lwZS1hbW91bnQteSkgKyAxMDAlKSk7b3BhY2l0eTowfX1AbWVkaWEgKG1heC13aWR0aDo2MDBweCl7W2RhdGEtc29ubmVyLXRvYXN0ZXJde3Bvc2l0aW9uOmZpeGVkO3JpZ2h0OnZhcigtLW1vYmlsZS1vZmZzZXQtcmlnaHQpO2xlZnQ6dmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KTt3aWR0aDoxMDAlfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkaXI9cnRsXXtsZWZ0OmNhbGModmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KSAqIC0xKX1bZGF0YS1zb25uZXItdG9hc3Rlcl0gW2RhdGEtc29ubmVyLXRvYXN0XXtsZWZ0OjA7cmlnaHQ6MDt3aWR0aDpjYWxjKDEwMCUgLSB2YXIoLS1tb2JpbGUtb2Zmc2V0LWxlZnQpICogMil9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1sZWZ0XXtsZWZ0OnZhcigtLW1vYmlsZS1vZmZzZXQtbGVmdCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj1ib3R0b21de2JvdHRvbTp2YXIoLS1tb2JpbGUtb2Zmc2V0LWJvdHRvbSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteS1wb3NpdGlvbj10b3Bde3RvcDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXRvcCl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEteC1wb3NpdGlvbj1jZW50ZXJde2xlZnQ6dmFyKC0tbW9iaWxlLW9mZnNldC1sZWZ0KTtyaWdodDp2YXIoLS1tb2JpbGUtb2Zmc2V0LXJpZ2h0KTt0cmFuc2Zvcm06bm9uZX19W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWxpZ2h0XXstLW5vcm1hbC1iZzojZmZmOy0tbm9ybWFsLWJvcmRlcjp2YXIoLS1ncmF5NCk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MTIpOy0tc3VjY2Vzcy1iZzpoc2woMTQzLCA4NSUsIDk2JSk7LS1zdWNjZXNzLWJvcmRlcjpoc2woMTQ1LCA5MiUsIDg3JSk7LS1zdWNjZXNzLXRleHQ6aHNsKDE0MCwgMTAwJSwgMjclKTstLWluZm8tYmc6aHNsKDIwOCwgMTAwJSwgOTclKTstLWluZm8tYm9yZGVyOmhzbCgyMjEsIDkxJSwgOTMlKTstLWluZm8tdGV4dDpoc2woMjEwLCA5MiUsIDQ1JSk7LS13YXJuaW5nLWJnOmhzbCg0OSwgMTAwJSwgOTclKTstLXdhcm5pbmctYm9yZGVyOmhzbCg0OSwgOTElLCA4NCUpOy0td2FybmluZy10ZXh0OmhzbCgzMSwgOTIlLCA0NSUpOy0tZXJyb3ItYmc6aHNsKDM1OSwgMTAwJSwgOTclKTstLWVycm9yLWJvcmRlcjpoc2woMzU5LCAxMDAlLCA5NCUpOy0tZXJyb3ItdGV4dDpoc2woMzYwLCAxMDAlLCA0NSUpfVtkYXRhLXNvbm5lci10b2FzdGVyXVtkYXRhLXNvbm5lci10aGVtZT1saWdodF0gW2RhdGEtc29ubmVyLXRvYXN0XVtkYXRhLWludmVydD10cnVlXXstLW5vcm1hbC1iZzojMDAwOy0tbm9ybWFsLWJvcmRlcjpoc2woMCwgMCUsIDIwJSk7LS1ub3JtYWwtdGV4dDp2YXIoLS1ncmF5MSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS1pbnZlcnQ9dHJ1ZV17LS1ub3JtYWwtYmc6I2ZmZjstLW5vcm1hbC1ib3JkZXI6dmFyKC0tZ3JheTMpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEyKX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya117LS1ub3JtYWwtYmc6IzAwMDstLW5vcm1hbC1iZy1ob3Zlcjpoc2woMCwgMCUsIDEyJSk7LS1ub3JtYWwtYm9yZGVyOmhzbCgwLCAwJSwgMjAlKTstLW5vcm1hbC1ib3JkZXItaG92ZXI6aHNsKDAsIDAlLCAyNSUpOy0tbm9ybWFsLXRleHQ6dmFyKC0tZ3JheTEpOy0tc3VjY2Vzcy1iZzpoc2woMTUwLCAxMDAlLCA2JSk7LS1zdWNjZXNzLWJvcmRlcjpoc2woMTQ3LCAxMDAlLCAxMiUpOy0tc3VjY2Vzcy10ZXh0OmhzbCgxNTAsIDg2JSwgNjUlKTstLWluZm8tYmc6aHNsKDIxNSwgMTAwJSwgNiUpOy0taW5mby1ib3JkZXI6aHNsKDIyMywgNDMlLCAxNyUpOy0taW5mby10ZXh0OmhzbCgyMTYsIDg3JSwgNjUlKTstLXdhcm5pbmctYmc6aHNsKDY0LCAxMDAlLCA2JSk7LS13YXJuaW5nLWJvcmRlcjpoc2woNjAsIDEwMCUsIDklKTstLXdhcm5pbmctdGV4dDpoc2woNDYsIDg3JSwgNjUlKTstLWVycm9yLWJnOmhzbCgzNTgsIDc2JSwgMTAlKTstLWVycm9yLWJvcmRlcjpoc2woMzU3LCA4OSUsIDE2JSk7LS1lcnJvci10ZXh0OmhzbCgzNTgsIDEwMCUsIDgxJSl9W2RhdGEtc29ubmVyLXRvYXN0ZXJdW2RhdGEtc29ubmVyLXRoZW1lPWRhcmtdIFtkYXRhLXNvbm5lci10b2FzdF0gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLW5vcm1hbC1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLW5vcm1hbC1ib3JkZXIpO2NvbG9yOnZhcigtLW5vcm1hbC10ZXh0KX1bZGF0YS1zb25uZXItdG9hc3Rlcl1bZGF0YS1zb25uZXItdGhlbWU9ZGFya10gW2RhdGEtc29ubmVyLXRvYXN0XSBbZGF0YS1jbG9zZS1idXR0b25dOmhvdmVye2JhY2tncm91bmQ6dmFyKC0tbm9ybWFsLWJnLWhvdmVyKTtib3JkZXItY29sb3I6dmFyKC0tbm9ybWFsLWJvcmRlci1ob3Zlcil9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1zdWNjZXNzXXtiYWNrZ3JvdW5kOnZhcigtLXN1Y2Nlc3MtYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1zdWNjZXNzLWJvcmRlcik7Y29sb3I6dmFyKC0tc3VjY2Vzcy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXN1Y2Nlc3NdIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1zdWNjZXNzLWJnKTtib3JkZXItY29sb3I6dmFyKC0tc3VjY2Vzcy1ib3JkZXIpO2NvbG9yOnZhcigtLXN1Y2Nlc3MtdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1pbmZvXXtiYWNrZ3JvdW5kOnZhcigtLWluZm8tYmcpO2JvcmRlci1jb2xvcjp2YXIoLS1pbmZvLWJvcmRlcik7Y29sb3I6dmFyKC0taW5mby10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPWluZm9dIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS1pbmZvLWJnKTtib3JkZXItY29sb3I6dmFyKC0taW5mby1ib3JkZXIpO2NvbG9yOnZhcigtLWluZm8tdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT13YXJuaW5nXXtiYWNrZ3JvdW5kOnZhcigtLXdhcm5pbmctYmcpO2JvcmRlci1jb2xvcjp2YXIoLS13YXJuaW5nLWJvcmRlcik7Y29sb3I6dmFyKC0td2FybmluZy10ZXh0KX1bZGF0YS1yaWNoLWNvbG9ycz10cnVlXVtkYXRhLXNvbm5lci10b2FzdF1bZGF0YS10eXBlPXdhcm5pbmddIFtkYXRhLWNsb3NlLWJ1dHRvbl17YmFja2dyb3VuZDp2YXIoLS13YXJuaW5nLWJnKTtib3JkZXItY29sb3I6dmFyKC0td2FybmluZy1ib3JkZXIpO2NvbG9yOnZhcigtLXdhcm5pbmctdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1lcnJvcl17YmFja2dyb3VuZDp2YXIoLS1lcnJvci1iZyk7Ym9yZGVyLWNvbG9yOnZhcigtLWVycm9yLWJvcmRlcik7Y29sb3I6dmFyKC0tZXJyb3ItdGV4dCl9W2RhdGEtcmljaC1jb2xvcnM9dHJ1ZV1bZGF0YS1zb25uZXItdG9hc3RdW2RhdGEtdHlwZT1lcnJvcl0gW2RhdGEtY2xvc2UtYnV0dG9uXXtiYWNrZ3JvdW5kOnZhcigtLWVycm9yLWJnKTtib3JkZXItY29sb3I6dmFyKC0tZXJyb3ItYm9yZGVyKTtjb2xvcjp2YXIoLS1lcnJvci10ZXh0KX0uc29ubmVyLWxvYWRpbmctd3JhcHBlcnstLXNpemU6MTZweDtoZWlnaHQ6dmFyKC0tc2l6ZSk7d2lkdGg6dmFyKC0tc2l6ZSk7cG9zaXRpb246YWJzb2x1dGU7aW5zZXQ6MDt6LWluZGV4OjEwfS5zb25uZXItbG9hZGluZy13cmFwcGVyW2RhdGEtdmlzaWJsZT1mYWxzZV17dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7YW5pbWF0aW9uOnNvbm5lci1mYWRlLW91dCAuMnMgZWFzZSBmb3J3YXJkc30uc29ubmVyLXNwaW5uZXJ7cG9zaXRpb246cmVsYXRpdmU7dG9wOjUwJTtsZWZ0OjUwJTtoZWlnaHQ6dmFyKC0tc2l6ZSk7d2lkdGg6dmFyKC0tc2l6ZSl9LnNvbm5lci1sb2FkaW5nLWJhcnthbmltYXRpb246c29ubmVyLXNwaW4gMS4ycyBsaW5lYXIgaW5maW5pdGU7YmFja2dyb3VuZDp2YXIoLS1ncmF5MTEpO2JvcmRlci1yYWRpdXM6NnB4O2hlaWdodDo4JTtsZWZ0Oi0xMCU7cG9zaXRpb246YWJzb2x1dGU7dG9wOi0zLjklO3dpZHRoOjI0JX0uc29ubmVyLWxvYWRpbmctYmFyOmZpcnN0LWNoaWxke2FuaW1hdGlvbi1kZWxheTotMS4yczt0cmFuc2Zvcm06cm90YXRlKC4wMDAxZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoMil7YW5pbWF0aW9uLWRlbGF5Oi0xLjFzO3RyYW5zZm9ybTpyb3RhdGUoMzBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCgzKXthbmltYXRpb24tZGVsYXk6LTFzO3RyYW5zZm9ybTpyb3RhdGUoNjBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg0KXthbmltYXRpb24tZGVsYXk6LS45czt0cmFuc2Zvcm06cm90YXRlKDkwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoNSl7YW5pbWF0aW9uLWRlbGF5Oi0uOHM7dHJhbnNmb3JtOnJvdGF0ZSgxMjBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg2KXthbmltYXRpb24tZGVsYXk6LS43czt0cmFuc2Zvcm06cm90YXRlKDE1MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDcpe2FuaW1hdGlvbi1kZWxheTotLjZzO3RyYW5zZm9ybTpyb3RhdGUoMTgwZGVnKSB0cmFuc2xhdGUoMTQ2JSl9LnNvbm5lci1sb2FkaW5nLWJhcjpudGgtY2hpbGQoOCl7YW5pbWF0aW9uLWRlbGF5Oi0uNXM7dHJhbnNmb3JtOnJvdGF0ZSgyMTBkZWcpIHRyYW5zbGF0ZSgxNDYlKX0uc29ubmVyLWxvYWRpbmctYmFyOm50aC1jaGlsZCg5KXthbmltYXRpb24tZGVsYXk6LS40czt0cmFuc2Zvcm06cm90YXRlKDI0MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDEwKXthbmltYXRpb24tZGVsYXk6LS4zczt0cmFuc2Zvcm06cm90YXRlKDI3MGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDExKXthbmltYXRpb24tZGVsYXk6LS4yczt0cmFuc2Zvcm06cm90YXRlKDMwMGRlZykgdHJhbnNsYXRlKDE0NiUpfS5zb25uZXItbG9hZGluZy1iYXI6bnRoLWNoaWxkKDEyKXthbmltYXRpb24tZGVsYXk6LS4xczt0cmFuc2Zvcm06cm90YXRlKDMzMGRlZykgdHJhbnNsYXRlKDE0NiUpfUBrZXlmcmFtZXMgc29ubmVyLWZhZGUtaW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCl9MTAwJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX1Aa2V5ZnJhbWVzIHNvbm5lci1mYWRlLW91dHswJXtvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfTEwMCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCl9fUBrZXlmcmFtZXMgc29ubmVyLXNwaW57MCV7b3BhY2l0eToxfTEwMCV7b3BhY2l0eTouMTV9fUBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbil7LnNvbm5lci1sb2FkaW5nLWJhcixbZGF0YS1zb25uZXItdG9hc3RdLFtkYXRhLXNvbm5lci10b2FzdF0+Knt0cmFuc2l0aW9uOm5vbmUhaW1wb3J0YW50O2FuaW1hdGlvbjpub25lIWltcG9ydGFudH19LnNvbm5lci1sb2FkZXJ7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsLTUwJSk7dHJhbnNmb3JtLW9yaWdpbjpjZW50ZXI7dHJhbnNpdGlvbjpvcGFjaXR5IC4ycyx0cmFuc2Zvcm0gLjJzfS5zb25uZXItbG9hZGVyW2RhdGEtdmlzaWJsZT1mYWxzZV17b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOCkgdHJhbnNsYXRlKC01MCUsLTUwJSl9XCIpO1xuXG5mdW5jdGlvbiBpc0FjdGlvbihhY3Rpb24pIHtcbiAgICByZXR1cm4gYWN0aW9uLmxhYmVsICE9PSB1bmRlZmluZWQ7XG59XG5cbi8vIFZpc2libGUgdG9hc3RzIGFtb3VudFxuY29uc3QgVklTSUJMRV9UT0FTVFNfQU1PVU5UID0gMztcbi8vIFZpZXdwb3J0IHBhZGRpbmdcbmNvbnN0IFZJRVdQT1JUX09GRlNFVCA9ICcyNHB4Jztcbi8vIE1vYmlsZSB2aWV3cG9ydCBwYWRkaW5nXG5jb25zdCBNT0JJTEVfVklFV1BPUlRfT0ZGU0VUID0gJzE2cHgnO1xuLy8gRGVmYXVsdCBsaWZldGltZSBvZiBhIHRvYXN0cyAoaW4gbXMpXG5jb25zdCBUT0FTVF9MSUZFVElNRSA9IDQwMDA7XG4vLyBEZWZhdWx0IHRvYXN0IHdpZHRoXG5jb25zdCBUT0FTVF9XSURUSCA9IDM1Njtcbi8vIERlZmF1bHQgZ2FwIGJldHdlZW4gdG9hc3RzXG5jb25zdCBHQVAgPSAxNDtcbi8vIFRocmVzaG9sZCB0byBkaXNtaXNzIGEgdG9hc3RcbmNvbnN0IFNXSVBFX1RIUkVTSE9MRCA9IDQ1O1xuLy8gRXF1YWwgdG8gZXhpdCBhbmltYXRpb24gZHVyYXRpb25cbmNvbnN0IFRJTUVfQkVGT1JFX1VOTU9VTlQgPSAyMDA7XG5mdW5jdGlvbiBjbiguLi5jbGFzc2VzKSB7XG4gICAgcmV0dXJuIGNsYXNzZXMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKTtcbn1cbmZ1bmN0aW9uIGdldERlZmF1bHRTd2lwZURpcmVjdGlvbnMocG9zaXRpb24pIHtcbiAgICBjb25zdCBbeSwgeF0gPSBwb3NpdGlvbi5zcGxpdCgnLScpO1xuICAgIGNvbnN0IGRpcmVjdGlvbnMgPSBbXTtcbiAgICBpZiAoeSkge1xuICAgICAgICBkaXJlY3Rpb25zLnB1c2goeSk7XG4gICAgfVxuICAgIGlmICh4KSB7XG4gICAgICAgIGRpcmVjdGlvbnMucHVzaCh4KTtcbiAgICB9XG4gICAgcmV0dXJuIGRpcmVjdGlvbnM7XG59XG5jb25zdCBUb2FzdCA9IChwcm9wcyk9PntcbiAgICB2YXIgX3RvYXN0X2NsYXNzTmFtZXMsIF90b2FzdF9jbGFzc05hbWVzMSwgX3RvYXN0X2NsYXNzTmFtZXMyLCBfdG9hc3RfY2xhc3NOYW1lczMsIF90b2FzdF9jbGFzc05hbWVzNCwgX3RvYXN0X2NsYXNzTmFtZXM1LCBfdG9hc3RfY2xhc3NOYW1lczYsIF90b2FzdF9jbGFzc05hbWVzNywgX3RvYXN0X2NsYXNzTmFtZXM4O1xuICAgIGNvbnN0IHsgaW52ZXJ0OiBUb2FzdGVySW52ZXJ0LCB0b2FzdCwgdW5zdHlsZWQsIGludGVyYWN0aW5nLCBzZXRIZWlnaHRzLCB2aXNpYmxlVG9hc3RzLCBoZWlnaHRzLCBpbmRleCwgdG9hc3RzLCBleHBhbmRlZCwgcmVtb3ZlVG9hc3QsIGRlZmF1bHRSaWNoQ29sb3JzLCBjbG9zZUJ1dHRvbjogY2xvc2VCdXR0b25Gcm9tVG9hc3Rlciwgc3R5bGUsIGNhbmNlbEJ1dHRvblN0eWxlLCBhY3Rpb25CdXR0b25TdHlsZSwgY2xhc3NOYW1lID0gJycsIGRlc2NyaXB0aW9uQ2xhc3NOYW1lID0gJycsIGR1cmF0aW9uOiBkdXJhdGlvbkZyb21Ub2FzdGVyLCBwb3NpdGlvbiwgZ2FwLCBleHBhbmRCeURlZmF1bHQsIGNsYXNzTmFtZXMsIGljb25zLCBjbG9zZUJ1dHRvbkFyaWFMYWJlbCA9ICdDbG9zZSB0b2FzdCcgfSA9IHByb3BzO1xuICAgIGNvbnN0IFtzd2lwZURpcmVjdGlvbiwgc2V0U3dpcGVEaXJlY3Rpb25dID0gUmVhY3QudXNlU3RhdGUobnVsbCk7XG4gICAgY29uc3QgW3N3aXBlT3V0RGlyZWN0aW9uLCBzZXRTd2lwZU91dERpcmVjdGlvbl0gPSBSZWFjdC51c2VTdGF0ZShudWxsKTtcbiAgICBjb25zdCBbbW91bnRlZCwgc2V0TW91bnRlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3JlbW92ZWQsIHNldFJlbW92ZWRdID0gUmVhY3QudXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtzd2lwaW5nLCBzZXRTd2lwaW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbc3dpcGVPdXQsIHNldFN3aXBlT3V0XSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbaXNTd2lwZWQsIHNldElzU3dpcGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbb2Zmc2V0QmVmb3JlUmVtb3ZlLCBzZXRPZmZzZXRCZWZvcmVSZW1vdmVdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gICAgY29uc3QgW2luaXRpYWxIZWlnaHQsIHNldEluaXRpYWxIZWlnaHRdID0gUmVhY3QudXNlU3RhdGUoMCk7XG4gICAgY29uc3QgcmVtYWluaW5nVGltZSA9IFJlYWN0LnVzZVJlZih0b2FzdC5kdXJhdGlvbiB8fCBkdXJhdGlvbkZyb21Ub2FzdGVyIHx8IFRPQVNUX0xJRkVUSU1FKTtcbiAgICBjb25zdCBkcmFnU3RhcnRUaW1lID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IHRvYXN0UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGlzRnJvbnQgPSBpbmRleCA9PT0gMDtcbiAgICBjb25zdCBpc1Zpc2libGUgPSBpbmRleCArIDEgPD0gdmlzaWJsZVRvYXN0cztcbiAgICBjb25zdCB0b2FzdFR5cGUgPSB0b2FzdC50eXBlO1xuICAgIGNvbnN0IGRpc21pc3NpYmxlID0gdG9hc3QuZGlzbWlzc2libGUgIT09IGZhbHNlO1xuICAgIGNvbnN0IHRvYXN0Q2xhc3NuYW1lID0gdG9hc3QuY2xhc3NOYW1lIHx8ICcnO1xuICAgIGNvbnN0IHRvYXN0RGVzY3JpcHRpb25DbGFzc25hbWUgPSB0b2FzdC5kZXNjcmlwdGlvbkNsYXNzTmFtZSB8fCAnJztcbiAgICAvLyBIZWlnaHQgaW5kZXggaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIG9mZnNldCBhcyBpdCBnZXRzIHVwZGF0ZWQgYmVmb3JlIHRoZSB0b2FzdCBhcnJheSwgd2hpY2ggbWVhbnMgd2UgY2FuIGNhbGN1bGF0ZSB0aGUgbmV3IGxheW91dCBmYXN0ZXIuXG4gICAgY29uc3QgaGVpZ2h0SW5kZXggPSBSZWFjdC51c2VNZW1vKCgpPT5oZWlnaHRzLmZpbmRJbmRleCgoaGVpZ2h0KT0+aGVpZ2h0LnRvYXN0SWQgPT09IHRvYXN0LmlkKSB8fCAwLCBbXG4gICAgICAgIGhlaWdodHMsXG4gICAgICAgIHRvYXN0LmlkXG4gICAgXSk7XG4gICAgY29uc3QgY2xvc2VCdXR0b24gPSBSZWFjdC51c2VNZW1vKCgpPT57XG4gICAgICAgIHZhciBfdG9hc3RfY2xvc2VCdXR0b247XG4gICAgICAgIHJldHVybiAoX3RvYXN0X2Nsb3NlQnV0dG9uID0gdG9hc3QuY2xvc2VCdXR0b24pICE9IG51bGwgPyBfdG9hc3RfY2xvc2VCdXR0b24gOiBjbG9zZUJ1dHRvbkZyb21Ub2FzdGVyO1xuICAgIH0sIFtcbiAgICAgICAgdG9hc3QuY2xvc2VCdXR0b24sXG4gICAgICAgIGNsb3NlQnV0dG9uRnJvbVRvYXN0ZXJcbiAgICBdKTtcbiAgICBjb25zdCBkdXJhdGlvbiA9IFJlYWN0LnVzZU1lbW8oKCk9PnRvYXN0LmR1cmF0aW9uIHx8IGR1cmF0aW9uRnJvbVRvYXN0ZXIgfHwgVE9BU1RfTElGRVRJTUUsIFtcbiAgICAgICAgdG9hc3QuZHVyYXRpb24sXG4gICAgICAgIGR1cmF0aW9uRnJvbVRvYXN0ZXJcbiAgICBdKTtcbiAgICBjb25zdCBjbG9zZVRpbWVyU3RhcnRUaW1lUmVmID0gUmVhY3QudXNlUmVmKDApO1xuICAgIGNvbnN0IG9mZnNldCA9IFJlYWN0LnVzZVJlZigwKTtcbiAgICBjb25zdCBsYXN0Q2xvc2VUaW1lclN0YXJ0VGltZVJlZiA9IFJlYWN0LnVzZVJlZigwKTtcbiAgICBjb25zdCBwb2ludGVyU3RhcnRSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gICAgY29uc3QgW3ksIHhdID0gcG9zaXRpb24uc3BsaXQoJy0nKTtcbiAgICBjb25zdCB0b2FzdHNIZWlnaHRCZWZvcmUgPSBSZWFjdC51c2VNZW1vKCgpPT57XG4gICAgICAgIHJldHVybiBoZWlnaHRzLnJlZHVjZSgocHJldiwgY3VyciwgcmVkdWNlckluZGV4KT0+e1xuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIG9mZnNldCB1cCB1bnRpbCBjdXJyZW50IHRvYXN0XG4gICAgICAgICAgICBpZiAocmVkdWNlckluZGV4ID49IGhlaWdodEluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcHJldiArIGN1cnIuaGVpZ2h0O1xuICAgICAgICB9LCAwKTtcbiAgICB9LCBbXG4gICAgICAgIGhlaWdodHMsXG4gICAgICAgIGhlaWdodEluZGV4XG4gICAgXSk7XG4gICAgY29uc3QgaXNEb2N1bWVudEhpZGRlbiA9IHVzZUlzRG9jdW1lbnRIaWRkZW4oKTtcbiAgICBjb25zdCBpbnZlcnQgPSB0b2FzdC5pbnZlcnQgfHwgVG9hc3RlckludmVydDtcbiAgICBjb25zdCBkaXNhYmxlZCA9IHRvYXN0VHlwZSA9PT0gJ2xvYWRpbmcnO1xuICAgIG9mZnNldC5jdXJyZW50ID0gUmVhY3QudXNlTWVtbygoKT0+aGVpZ2h0SW5kZXggKiBnYXAgKyB0b2FzdHNIZWlnaHRCZWZvcmUsIFtcbiAgICAgICAgaGVpZ2h0SW5kZXgsXG4gICAgICAgIHRvYXN0c0hlaWdodEJlZm9yZVxuICAgIF0pO1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKT0+e1xuICAgICAgICByZW1haW5pbmdUaW1lLmN1cnJlbnQgPSBkdXJhdGlvbjtcbiAgICB9LCBbXG4gICAgICAgIGR1cmF0aW9uXG4gICAgXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIC8vIFRyaWdnZXIgZW50ZXIgYW5pbWF0aW9uIHdpdGhvdXQgdXNpbmcgQ1NTIGFuaW1hdGlvblxuICAgICAgICBzZXRNb3VudGVkKHRydWUpO1xuICAgIH0sIFtdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCk9PntcbiAgICAgICAgY29uc3QgdG9hc3ROb2RlID0gdG9hc3RSZWYuY3VycmVudDtcbiAgICAgICAgaWYgKHRvYXN0Tm9kZSkge1xuICAgICAgICAgICAgY29uc3QgaGVpZ2h0ID0gdG9hc3ROb2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodDtcbiAgICAgICAgICAgIC8vIEFkZCB0b2FzdCBoZWlnaHQgdG8gaGVpZ2h0cyBhcnJheSBhZnRlciB0aGUgdG9hc3QgaXMgbW91bnRlZFxuICAgICAgICAgICAgc2V0SW5pdGlhbEhlaWdodChoZWlnaHQpO1xuICAgICAgICAgICAgc2V0SGVpZ2h0cygoaCk9PltcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3RJZDogdG9hc3QuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogdG9hc3QucG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLi4uaFxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgcmV0dXJuICgpPT5zZXRIZWlnaHRzKChoKT0+aC5maWx0ZXIoKGhlaWdodCk9PmhlaWdodC50b2FzdElkICE9PSB0b2FzdC5pZCkpO1xuICAgICAgICB9XG4gICAgfSwgW1xuICAgICAgICBzZXRIZWlnaHRzLFxuICAgICAgICB0b2FzdC5pZFxuICAgIF0pO1xuICAgIFJlYWN0LnVzZUxheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICAvLyBLZWVwIGhlaWdodCB1cCB0byBkYXRlIHdpdGggdGhlIGNvbnRlbnQgaW4gY2FzZSBpdCB1cGRhdGVzXG4gICAgICAgIGlmICghbW91bnRlZCkgcmV0dXJuO1xuICAgICAgICBjb25zdCB0b2FzdE5vZGUgPSB0b2FzdFJlZi5jdXJyZW50O1xuICAgICAgICBjb25zdCBvcmlnaW5hbEhlaWdodCA9IHRvYXN0Tm9kZS5zdHlsZS5oZWlnaHQ7XG4gICAgICAgIHRvYXN0Tm9kZS5zdHlsZS5oZWlnaHQgPSAnYXV0byc7XG4gICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IHRvYXN0Tm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG4gICAgICAgIHRvYXN0Tm9kZS5zdHlsZS5oZWlnaHQgPSBvcmlnaW5hbEhlaWdodDtcbiAgICAgICAgc2V0SW5pdGlhbEhlaWdodChuZXdIZWlnaHQpO1xuICAgICAgICBzZXRIZWlnaHRzKChoZWlnaHRzKT0+e1xuICAgICAgICAgICAgY29uc3QgYWxyZWFkeUV4aXN0cyA9IGhlaWdodHMuZmluZCgoaGVpZ2h0KT0+aGVpZ2h0LnRvYXN0SWQgPT09IHRvYXN0LmlkKTtcbiAgICAgICAgICAgIGlmICghYWxyZWFkeUV4aXN0cykge1xuICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0SWQ6IHRvYXN0LmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBuZXdIZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogdG9hc3QucG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLi4uaGVpZ2h0c1xuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBoZWlnaHRzLm1hcCgoaGVpZ2h0KT0+aGVpZ2h0LnRvYXN0SWQgPT09IHRvYXN0LmlkID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBuZXdIZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgfSA6IGhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0sIFtcbiAgICAgICAgbW91bnRlZCxcbiAgICAgICAgdG9hc3QudGl0bGUsXG4gICAgICAgIHRvYXN0LmRlc2NyaXB0aW9uLFxuICAgICAgICBzZXRIZWlnaHRzLFxuICAgICAgICB0b2FzdC5pZCxcbiAgICAgICAgdG9hc3QuanN4LFxuICAgICAgICB0b2FzdC5hY3Rpb24sXG4gICAgICAgIHRvYXN0LmNhbmNlbFxuICAgIF0pO1xuICAgIGNvbnN0IGRlbGV0ZVRvYXN0ID0gUmVhY3QudXNlQ2FsbGJhY2soKCk9PntcbiAgICAgICAgLy8gU2F2ZSB0aGUgb2Zmc2V0IGZvciB0aGUgZXhpdCBzd2lwZSBhbmltYXRpb25cbiAgICAgICAgc2V0UmVtb3ZlZCh0cnVlKTtcbiAgICAgICAgc2V0T2Zmc2V0QmVmb3JlUmVtb3ZlKG9mZnNldC5jdXJyZW50KTtcbiAgICAgICAgc2V0SGVpZ2h0cygoaCk9PmguZmlsdGVyKChoZWlnaHQpPT5oZWlnaHQudG9hc3RJZCAhPT0gdG9hc3QuaWQpKTtcbiAgICAgICAgc2V0VGltZW91dCgoKT0+e1xuICAgICAgICAgICAgcmVtb3ZlVG9hc3QodG9hc3QpO1xuICAgICAgICB9LCBUSU1FX0JFRk9SRV9VTk1PVU5UKTtcbiAgICB9LCBbXG4gICAgICAgIHRvYXN0LFxuICAgICAgICByZW1vdmVUb2FzdCxcbiAgICAgICAgc2V0SGVpZ2h0cyxcbiAgICAgICAgb2Zmc2V0XG4gICAgXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIGlmICh0b2FzdC5wcm9taXNlICYmIHRvYXN0VHlwZSA9PT0gJ2xvYWRpbmcnIHx8IHRvYXN0LmR1cmF0aW9uID09PSBJbmZpbml0eSB8fCB0b2FzdC50eXBlID09PSAnbG9hZGluZycpIHJldHVybjtcbiAgICAgICAgbGV0IHRpbWVvdXRJZDtcbiAgICAgICAgLy8gUGF1c2UgdGhlIHRpbWVyIG9uIGVhY2ggaG92ZXJcbiAgICAgICAgY29uc3QgcGF1c2VUaW1lciA9ICgpPT57XG4gICAgICAgICAgICBpZiAobGFzdENsb3NlVGltZXJTdGFydFRpbWVSZWYuY3VycmVudCA8IGNsb3NlVGltZXJTdGFydFRpbWVSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgZWxhcHNlZCB0aW1lIHNpbmNlIHRoZSB0aW1lciBzdGFydGVkXG4gICAgICAgICAgICAgICAgY29uc3QgZWxhcHNlZFRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSAtIGNsb3NlVGltZXJTdGFydFRpbWVSZWYuY3VycmVudDtcbiAgICAgICAgICAgICAgICByZW1haW5pbmdUaW1lLmN1cnJlbnQgPSByZW1haW5pbmdUaW1lLmN1cnJlbnQgLSBlbGFwc2VkVGltZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3RDbG9zZVRpbWVyU3RhcnRUaW1lUmVmLmN1cnJlbnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc3RhcnRUaW1lciA9ICgpPT57XG4gICAgICAgICAgICAvLyBzZXRUaW1lb3V0KCwgSW5maW5pdHkpIGJlaGF2ZXMgYXMgaWYgdGhlIGRlbGF5IGlzIDAuXG4gICAgICAgICAgICAvLyBBcyBhIHJlc3VsdCwgdGhlIHRvYXN0IHdvdWxkIGJlIGNsb3NlZCBpbW1lZGlhdGVseSwgZ2l2aW5nIHRoZSBhcHBlYXJhbmNlIHRoYXQgaXQgd2FzIG5ldmVyIHJlbmRlcmVkLlxuICAgICAgICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZGVueXNkb3ZoYW4vd3RmanM/dGFiPXJlYWRtZS1vdi1maWxlI2FuLWluZmluaXRlLXRpbWVvdXRcbiAgICAgICAgICAgIGlmIChyZW1haW5pbmdUaW1lLmN1cnJlbnQgPT09IEluZmluaXR5KSByZXR1cm47XG4gICAgICAgICAgICBjbG9zZVRpbWVyU3RhcnRUaW1lUmVmLmN1cnJlbnQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgICAgIC8vIExldCB0aGUgdG9hc3Qga25vdyBpdCBoYXMgc3RhcnRlZFxuICAgICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKT0+e1xuICAgICAgICAgICAgICAgIHRvYXN0Lm9uQXV0b0Nsb3NlID09IG51bGwgPyB2b2lkIDAgOiB0b2FzdC5vbkF1dG9DbG9zZS5jYWxsKHRvYXN0LCB0b2FzdCk7XG4gICAgICAgICAgICAgICAgZGVsZXRlVG9hc3QoKTtcbiAgICAgICAgICAgIH0sIHJlbWFpbmluZ1RpbWUuY3VycmVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChleHBhbmRlZCB8fCBpbnRlcmFjdGluZyB8fCBpc0RvY3VtZW50SGlkZGVuKSB7XG4gICAgICAgICAgICBwYXVzZVRpbWVyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGFydFRpbWVyKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpPT5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICB9LCBbXG4gICAgICAgIGV4cGFuZGVkLFxuICAgICAgICBpbnRlcmFjdGluZyxcbiAgICAgICAgdG9hc3QsXG4gICAgICAgIHRvYXN0VHlwZSxcbiAgICAgICAgaXNEb2N1bWVudEhpZGRlbixcbiAgICAgICAgZGVsZXRlVG9hc3RcbiAgICBdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKHRvYXN0LmRlbGV0ZSkge1xuICAgICAgICAgICAgZGVsZXRlVG9hc3QoKTtcbiAgICAgICAgICAgIHRvYXN0Lm9uRGlzbWlzcyA9PSBudWxsID8gdm9pZCAwIDogdG9hc3Qub25EaXNtaXNzLmNhbGwodG9hc3QsIHRvYXN0KTtcbiAgICAgICAgfVxuICAgIH0sIFtcbiAgICAgICAgZGVsZXRlVG9hc3QsXG4gICAgICAgIHRvYXN0LmRlbGV0ZVxuICAgIF0pO1xuICAgIGZ1bmN0aW9uIGdldExvYWRpbmdJY29uKCkge1xuICAgICAgICB2YXIgX3RvYXN0X2NsYXNzTmFtZXM7XG4gICAgICAgIGlmIChpY29ucyA9PSBudWxsID8gdm9pZCAwIDogaWNvbnMubG9hZGluZykge1xuICAgICAgICAgICAgdmFyIF90b2FzdF9jbGFzc05hbWVzMTtcbiAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogY24oY2xhc3NOYW1lcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3NOYW1lcy5sb2FkZXIsIHRvYXN0ID09IG51bGwgPyB2b2lkIDAgOiAoX3RvYXN0X2NsYXNzTmFtZXMxID0gdG9hc3QuY2xhc3NOYW1lcykgPT0gbnVsbCA/IHZvaWQgMCA6IF90b2FzdF9jbGFzc05hbWVzMS5sb2FkZXIsICdzb25uZXItbG9hZGVyJyksXG4gICAgICAgICAgICAgICAgXCJkYXRhLXZpc2libGVcIjogdG9hc3RUeXBlID09PSAnbG9hZGluZydcbiAgICAgICAgICAgIH0sIGljb25zLmxvYWRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoTG9hZGVyLCB7XG4gICAgICAgICAgICBjbGFzc05hbWU6IGNuKGNsYXNzTmFtZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsYXNzTmFtZXMubG9hZGVyLCB0b2FzdCA9PSBudWxsID8gdm9pZCAwIDogKF90b2FzdF9jbGFzc05hbWVzID0gdG9hc3QuY2xhc3NOYW1lcykgPT0gbnVsbCA/IHZvaWQgMCA6IF90b2FzdF9jbGFzc05hbWVzLmxvYWRlciksXG4gICAgICAgICAgICB2aXNpYmxlOiB0b2FzdFR5cGUgPT09ICdsb2FkaW5nJ1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgaWNvbiA9IHRvYXN0Lmljb24gfHwgKGljb25zID09IG51bGwgPyB2b2lkIDAgOiBpY29uc1t0b2FzdFR5cGVdKSB8fCBnZXRBc3NldCh0b2FzdFR5cGUpO1xuICAgIHZhciBfdG9hc3RfcmljaENvbG9ycywgX2ljb25zX2Nsb3NlO1xuICAgIHJldHVybiAvKiNfX1BVUkVfXyovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsaVwiLCB7XG4gICAgICAgIHRhYkluZGV4OiAwLFxuICAgICAgICByZWY6IHRvYXN0UmVmLFxuICAgICAgICBjbGFzc05hbWU6IGNuKGNsYXNzTmFtZSwgdG9hc3RDbGFzc25hbWUsIGNsYXNzTmFtZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsYXNzTmFtZXMudG9hc3QsIHRvYXN0ID09IG51bGwgPyB2b2lkIDAgOiAoX3RvYXN0X2NsYXNzTmFtZXMgPSB0b2FzdC5jbGFzc05hbWVzKSA9PSBudWxsID8gdm9pZCAwIDogX3RvYXN0X2NsYXNzTmFtZXMudG9hc3QsIGNsYXNzTmFtZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsYXNzTmFtZXMuZGVmYXVsdCwgY2xhc3NOYW1lcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3NOYW1lc1t0b2FzdFR5cGVdLCB0b2FzdCA9PSBudWxsID8gdm9pZCAwIDogKF90b2FzdF9jbGFzc05hbWVzMSA9IHRvYXN0LmNsYXNzTmFtZXMpID09IG51bGwgPyB2b2lkIDAgOiBfdG9hc3RfY2xhc3NOYW1lczFbdG9hc3RUeXBlXSksXG4gICAgICAgIFwiZGF0YS1zb25uZXItdG9hc3RcIjogXCJcIixcbiAgICAgICAgXCJkYXRhLXJpY2gtY29sb3JzXCI6IChfdG9hc3RfcmljaENvbG9ycyA9IHRvYXN0LnJpY2hDb2xvcnMpICE9IG51bGwgPyBfdG9hc3RfcmljaENvbG9ycyA6IGRlZmF1bHRSaWNoQ29sb3JzLFxuICAgICAgICBcImRhdGEtc3R5bGVkXCI6ICFCb29sZWFuKHRvYXN0LmpzeCB8fCB0b2FzdC51bnN0eWxlZCB8fCB1bnN0eWxlZCksXG4gICAgICAgIFwiZGF0YS1tb3VudGVkXCI6IG1vdW50ZWQsXG4gICAgICAgIFwiZGF0YS1wcm9taXNlXCI6IEJvb2xlYW4odG9hc3QucHJvbWlzZSksXG4gICAgICAgIFwiZGF0YS1zd2lwZWRcIjogaXNTd2lwZWQsXG4gICAgICAgIFwiZGF0YS1yZW1vdmVkXCI6IHJlbW92ZWQsXG4gICAgICAgIFwiZGF0YS12aXNpYmxlXCI6IGlzVmlzaWJsZSxcbiAgICAgICAgXCJkYXRhLXktcG9zaXRpb25cIjogeSxcbiAgICAgICAgXCJkYXRhLXgtcG9zaXRpb25cIjogeCxcbiAgICAgICAgXCJkYXRhLWluZGV4XCI6IGluZGV4LFxuICAgICAgICBcImRhdGEtZnJvbnRcIjogaXNGcm9udCxcbiAgICAgICAgXCJkYXRhLXN3aXBpbmdcIjogc3dpcGluZyxcbiAgICAgICAgXCJkYXRhLWRpc21pc3NpYmxlXCI6IGRpc21pc3NpYmxlLFxuICAgICAgICBcImRhdGEtdHlwZVwiOiB0b2FzdFR5cGUsXG4gICAgICAgIFwiZGF0YS1pbnZlcnRcIjogaW52ZXJ0LFxuICAgICAgICBcImRhdGEtc3dpcGUtb3V0XCI6IHN3aXBlT3V0LFxuICAgICAgICBcImRhdGEtc3dpcGUtZGlyZWN0aW9uXCI6IHN3aXBlT3V0RGlyZWN0aW9uLFxuICAgICAgICBcImRhdGEtZXhwYW5kZWRcIjogQm9vbGVhbihleHBhbmRlZCB8fCBleHBhbmRCeURlZmF1bHQgJiYgbW91bnRlZCksXG4gICAgICAgIFwiZGF0YS10ZXN0aWRcIjogdG9hc3QudGVzdElkLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgJy0taW5kZXgnOiBpbmRleCxcbiAgICAgICAgICAgICctLXRvYXN0cy1iZWZvcmUnOiBpbmRleCxcbiAgICAgICAgICAgICctLXotaW5kZXgnOiB0b2FzdHMubGVuZ3RoIC0gaW5kZXgsXG4gICAgICAgICAgICAnLS1vZmZzZXQnOiBgJHtyZW1vdmVkID8gb2Zmc2V0QmVmb3JlUmVtb3ZlIDogb2Zmc2V0LmN1cnJlbnR9cHhgLFxuICAgICAgICAgICAgJy0taW5pdGlhbC1oZWlnaHQnOiBleHBhbmRCeURlZmF1bHQgPyAnYXV0bycgOiBgJHtpbml0aWFsSGVpZ2h0fXB4YCxcbiAgICAgICAgICAgIC4uLnN0eWxlLFxuICAgICAgICAgICAgLi4udG9hc3Quc3R5bGVcbiAgICAgICAgfSxcbiAgICAgICAgb25EcmFnRW5kOiAoKT0+e1xuICAgICAgICAgICAgc2V0U3dpcGluZyhmYWxzZSk7XG4gICAgICAgICAgICBzZXRTd2lwZURpcmVjdGlvbihudWxsKTtcbiAgICAgICAgICAgIHBvaW50ZXJTdGFydFJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgb25Qb2ludGVyRG93bjogKGV2ZW50KT0+e1xuICAgICAgICAgICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gMikgcmV0dXJuOyAvLyBSZXR1cm4gZWFybHkgb24gcmlnaHQgY2xpY2tcbiAgICAgICAgICAgIGlmIChkaXNhYmxlZCB8fCAhZGlzbWlzc2libGUpIHJldHVybjtcbiAgICAgICAgICAgIGRyYWdTdGFydFRpbWUuY3VycmVudCA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICBzZXRPZmZzZXRCZWZvcmVSZW1vdmUob2Zmc2V0LmN1cnJlbnQpO1xuICAgICAgICAgICAgLy8gRW5zdXJlIHdlIG1haW50YWluIGNvcnJlY3QgcG9pbnRlciBjYXB0dXJlIGV2ZW4gd2hlbiBnb2luZyBvdXRzaWRlIG9mIHRoZSB0b2FzdCAoZS5nLiB3aGVuIHN3aXBpbmcpXG4gICAgICAgICAgICBldmVudC50YXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTtcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQudGFnTmFtZSA9PT0gJ0JVVFRPTicpIHJldHVybjtcbiAgICAgICAgICAgIHNldFN3aXBpbmcodHJ1ZSk7XG4gICAgICAgICAgICBwb2ludGVyU3RhcnRSZWYuY3VycmVudCA9IHtcbiAgICAgICAgICAgICAgICB4OiBldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgICAgIHk6IGV2ZW50LmNsaWVudFlcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0sXG4gICAgICAgIG9uUG9pbnRlclVwOiAoKT0+e1xuICAgICAgICAgICAgdmFyIF90b2FzdFJlZl9jdXJyZW50LCBfdG9hc3RSZWZfY3VycmVudDEsIF9kcmFnU3RhcnRUaW1lX2N1cnJlbnQ7XG4gICAgICAgICAgICBpZiAoc3dpcGVPdXQgfHwgIWRpc21pc3NpYmxlKSByZXR1cm47XG4gICAgICAgICAgICBwb2ludGVyU3RhcnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICBjb25zdCBzd2lwZUFtb3VudFggPSBOdW1iZXIoKChfdG9hc3RSZWZfY3VycmVudCA9IHRvYXN0UmVmLmN1cnJlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfdG9hc3RSZWZfY3VycmVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXN3aXBlLWFtb3VudC14JykucmVwbGFjZSgncHgnLCAnJykpIHx8IDApO1xuICAgICAgICAgICAgY29uc3Qgc3dpcGVBbW91bnRZID0gTnVtYmVyKCgoX3RvYXN0UmVmX2N1cnJlbnQxID0gdG9hc3RSZWYuY3VycmVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90b2FzdFJlZl9jdXJyZW50MS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKCctLXN3aXBlLWFtb3VudC15JykucmVwbGFjZSgncHgnLCAnJykpIHx8IDApO1xuICAgICAgICAgICAgY29uc3QgdGltZVRha2VuID0gbmV3IERhdGUoKS5nZXRUaW1lKCkgLSAoKF9kcmFnU3RhcnRUaW1lX2N1cnJlbnQgPSBkcmFnU3RhcnRUaW1lLmN1cnJlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZHJhZ1N0YXJ0VGltZV9jdXJyZW50LmdldFRpbWUoKSk7XG4gICAgICAgICAgICBjb25zdCBzd2lwZUFtb3VudCA9IHN3aXBlRGlyZWN0aW9uID09PSAneCcgPyBzd2lwZUFtb3VudFggOiBzd2lwZUFtb3VudFk7XG4gICAgICAgICAgICBjb25zdCB2ZWxvY2l0eSA9IE1hdGguYWJzKHN3aXBlQW1vdW50KSAvIHRpbWVUYWtlbjtcbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhzd2lwZUFtb3VudCkgPj0gU1dJUEVfVEhSRVNIT0xEIHx8IHZlbG9jaXR5ID4gMC4xMSkge1xuICAgICAgICAgICAgICAgIHNldE9mZnNldEJlZm9yZVJlbW92ZShvZmZzZXQuY3VycmVudCk7XG4gICAgICAgICAgICAgICAgdG9hc3Qub25EaXNtaXNzID09IG51bGwgPyB2b2lkIDAgOiB0b2FzdC5vbkRpc21pc3MuY2FsbCh0b2FzdCwgdG9hc3QpO1xuICAgICAgICAgICAgICAgIGlmIChzd2lwZURpcmVjdGlvbiA9PT0gJ3gnKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFN3aXBlT3V0RGlyZWN0aW9uKHN3aXBlQW1vdW50WCA+IDAgPyAncmlnaHQnIDogJ2xlZnQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzZXRTd2lwZU91dERpcmVjdGlvbihzd2lwZUFtb3VudFkgPiAwID8gJ2Rvd24nIDogJ3VwJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlbGV0ZVRvYXN0KCk7XG4gICAgICAgICAgICAgICAgc2V0U3dpcGVPdXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgX3RvYXN0UmVmX2N1cnJlbnQyLCBfdG9hc3RSZWZfY3VycmVudDM7XG4gICAgICAgICAgICAgICAgKF90b2FzdFJlZl9jdXJyZW50MiA9IHRvYXN0UmVmLmN1cnJlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfdG9hc3RSZWZfY3VycmVudDIuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3dpcGUtYW1vdW50LXgnLCBgMHB4YCk7XG4gICAgICAgICAgICAgICAgKF90b2FzdFJlZl9jdXJyZW50MyA9IHRvYXN0UmVmLmN1cnJlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfdG9hc3RSZWZfY3VycmVudDMuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3dpcGUtYW1vdW50LXknLCBgMHB4YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRJc1N3aXBlZChmYWxzZSk7XG4gICAgICAgICAgICBzZXRTd2lwaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIHNldFN3aXBlRGlyZWN0aW9uKG51bGwpO1xuICAgICAgICB9LFxuICAgICAgICBvblBvaW50ZXJNb3ZlOiAoZXZlbnQpPT57XG4gICAgICAgICAgICB2YXIgX3dpbmRvd19nZXRTZWxlY3Rpb24sIC8vIEFwcGx5IHRyYW5zZm9ybSB1c2luZyBib3RoIHggYW5kIHkgdmFsdWVzXG4gICAgICAgICAgICBfdG9hc3RSZWZfY3VycmVudCwgX3RvYXN0UmVmX2N1cnJlbnQxO1xuICAgICAgICAgICAgaWYgKCFwb2ludGVyU3RhcnRSZWYuY3VycmVudCB8fCAhZGlzbWlzc2libGUpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGlzSGlnaGxpZ2h0ZWQgPSAoKF93aW5kb3dfZ2V0U2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpKSA9PSBudWxsID8gdm9pZCAwIDogX3dpbmRvd19nZXRTZWxlY3Rpb24udG9TdHJpbmcoKS5sZW5ndGgpID4gMDtcbiAgICAgICAgICAgIGlmIChpc0hpZ2hsaWdodGVkKSByZXR1cm47XG4gICAgICAgICAgICBjb25zdCB5RGVsdGEgPSBldmVudC5jbGllbnRZIC0gcG9pbnRlclN0YXJ0UmVmLmN1cnJlbnQueTtcbiAgICAgICAgICAgIGNvbnN0IHhEZWx0YSA9IGV2ZW50LmNsaWVudFggLSBwb2ludGVyU3RhcnRSZWYuY3VycmVudC54O1xuICAgICAgICAgICAgdmFyIF9wcm9wc19zd2lwZURpcmVjdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBzd2lwZURpcmVjdGlvbnMgPSAoX3Byb3BzX3N3aXBlRGlyZWN0aW9ucyA9IHByb3BzLnN3aXBlRGlyZWN0aW9ucykgIT0gbnVsbCA/IF9wcm9wc19zd2lwZURpcmVjdGlvbnMgOiBnZXREZWZhdWx0U3dpcGVEaXJlY3Rpb25zKHBvc2l0aW9uKTtcbiAgICAgICAgICAgIC8vIERldGVybWluZSBzd2lwZSBkaXJlY3Rpb24gaWYgbm90IGFscmVhZHkgbG9ja2VkXG4gICAgICAgICAgICBpZiAoIXN3aXBlRGlyZWN0aW9uICYmIChNYXRoLmFicyh4RGVsdGEpID4gMSB8fCBNYXRoLmFicyh5RGVsdGEpID4gMSkpIHtcbiAgICAgICAgICAgICAgICBzZXRTd2lwZURpcmVjdGlvbihNYXRoLmFicyh4RGVsdGEpID4gTWF0aC5hYnMoeURlbHRhKSA/ICd4JyA6ICd5Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgc3dpcGVBbW91bnQgPSB7XG4gICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICB5OiAwXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgZ2V0RGFtcGVuaW5nID0gKGRlbHRhKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IGZhY3RvciA9IE1hdGguYWJzKGRlbHRhKSAvIDIwO1xuICAgICAgICAgICAgICAgIHJldHVybiAxIC8gKDEuNSArIGZhY3Rvcik7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gT25seSBhcHBseSBzd2lwZSBpbiB0aGUgbG9ja2VkIGRpcmVjdGlvblxuICAgICAgICAgICAgaWYgKHN3aXBlRGlyZWN0aW9uID09PSAneScpIHtcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgdmVydGljYWwgc3dpcGVzXG4gICAgICAgICAgICAgICAgaWYgKHN3aXBlRGlyZWN0aW9ucy5pbmNsdWRlcygndG9wJykgfHwgc3dpcGVEaXJlY3Rpb25zLmluY2x1ZGVzKCdib3R0b20nKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3dpcGVEaXJlY3Rpb25zLmluY2x1ZGVzKCd0b3AnKSAmJiB5RGVsdGEgPCAwIHx8IHN3aXBlRGlyZWN0aW9ucy5pbmNsdWRlcygnYm90dG9tJykgJiYgeURlbHRhID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpcGVBbW91bnQueSA9IHlEZWx0YTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNtb290aGx5IHRyYW5zaXRpb24gdG8gZGFtcGVuZWQgbW92ZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhbXBlbmVkRGVsdGEgPSB5RGVsdGEgKiBnZXREYW1wZW5pbmcoeURlbHRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEVuc3VyZSB3ZSBkb24ndCBqdW1wIHdoZW4gdHJhbnNpdGlvbmluZyB0byBkYW1wZW5lZCBtb3ZlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpcGVBbW91bnQueSA9IE1hdGguYWJzKGRhbXBlbmVkRGVsdGEpIDwgTWF0aC5hYnMoeURlbHRhKSA/IGRhbXBlbmVkRGVsdGEgOiB5RGVsdGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN3aXBlRGlyZWN0aW9uID09PSAneCcpIHtcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgaG9yaXpvbnRhbCBzd2lwZXNcbiAgICAgICAgICAgICAgICBpZiAoc3dpcGVEaXJlY3Rpb25zLmluY2x1ZGVzKCdsZWZ0JykgfHwgc3dpcGVEaXJlY3Rpb25zLmluY2x1ZGVzKCdyaWdodCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzd2lwZURpcmVjdGlvbnMuaW5jbHVkZXMoJ2xlZnQnKSAmJiB4RGVsdGEgPCAwIHx8IHN3aXBlRGlyZWN0aW9ucy5pbmNsdWRlcygncmlnaHQnKSAmJiB4RGVsdGEgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2lwZUFtb3VudC54ID0geERlbHRhO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU21vb3RobHkgdHJhbnNpdGlvbiB0byBkYW1wZW5lZCBtb3ZlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGFtcGVuZWREZWx0YSA9IHhEZWx0YSAqIGdldERhbXBlbmluZyh4RGVsdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHdlIGRvbid0IGp1bXAgd2hlbiB0cmFuc2l0aW9uaW5nIHRvIGRhbXBlbmVkIG1vdmVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICBzd2lwZUFtb3VudC54ID0gTWF0aC5hYnMoZGFtcGVuZWREZWx0YSkgPCBNYXRoLmFicyh4RGVsdGEpID8gZGFtcGVuZWREZWx0YSA6IHhEZWx0YTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyhzd2lwZUFtb3VudC54KSA+IDAgfHwgTWF0aC5hYnMoc3dpcGVBbW91bnQueSkgPiAwKSB7XG4gICAgICAgICAgICAgICAgc2V0SXNTd2lwZWQodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoX3RvYXN0UmVmX2N1cnJlbnQgPSB0b2FzdFJlZi5jdXJyZW50KSA9PSBudWxsID8gdm9pZCAwIDogX3RvYXN0UmVmX2N1cnJlbnQuc3R5bGUuc2V0UHJvcGVydHkoJy0tc3dpcGUtYW1vdW50LXgnLCBgJHtzd2lwZUFtb3VudC54fXB4YCk7XG4gICAgICAgICAgICAoX3RvYXN0UmVmX2N1cnJlbnQxID0gdG9hc3RSZWYuY3VycmVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF90b2FzdFJlZl9jdXJyZW50MS5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zd2lwZS1hbW91bnQteScsIGAke3N3aXBlQW1vdW50Lnl9cHhgKTtcbiAgICAgICAgfVxuICAgIH0sIGNsb3NlQnV0dG9uICYmICF0b2FzdC5qc3ggJiYgdG9hc3RUeXBlICE9PSAnbG9hZGluZycgPyAvKiNfX1BVUkVfXyovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgICAgICBcImFyaWEtbGFiZWxcIjogY2xvc2VCdXR0b25BcmlhTGFiZWwsXG4gICAgICAgIFwiZGF0YS1kaXNhYmxlZFwiOiBkaXNhYmxlZCxcbiAgICAgICAgXCJkYXRhLWNsb3NlLWJ1dHRvblwiOiB0cnVlLFxuICAgICAgICBvbkNsaWNrOiBkaXNhYmxlZCB8fCAhZGlzbWlzc2libGUgPyAoKT0+e30gOiAoKT0+e1xuICAgICAgICAgICAgZGVsZXRlVG9hc3QoKTtcbiAgICAgICAgICAgIHRvYXN0Lm9uRGlzbWlzcyA9PSBudWxsID8gdm9pZCAwIDogdG9hc3Qub25EaXNtaXNzLmNhbGwodG9hc3QsIHRvYXN0KTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbihjbGFzc05hbWVzID09IG51bGwgPyB2b2lkIDAgOiBjbGFzc05hbWVzLmNsb3NlQnV0dG9uLCB0b2FzdCA9PSBudWxsID8gdm9pZCAwIDogKF90b2FzdF9jbGFzc05hbWVzMiA9IHRvYXN0LmNsYXNzTmFtZXMpID09IG51bGwgPyB2b2lkIDAgOiBfdG9hc3RfY2xhc3NOYW1lczIuY2xvc2VCdXR0b24pXG4gICAgfSwgKF9pY29uc19jbG9zZSA9IGljb25zID09IG51bGwgPyB2b2lkIDAgOiBpY29ucy5jbG9zZSkgIT0gbnVsbCA/IF9pY29uc19jbG9zZSA6IENsb3NlSWNvbikgOiBudWxsLCAodG9hc3RUeXBlIHx8IHRvYXN0Lmljb24gfHwgdG9hc3QucHJvbWlzZSkgJiYgdG9hc3QuaWNvbiAhPT0gbnVsbCAmJiAoKGljb25zID09IG51bGwgPyB2b2lkIDAgOiBpY29uc1t0b2FzdFR5cGVdKSAhPT0gbnVsbCB8fCB0b2FzdC5pY29uKSA/IC8qI19fUFVSRV9fKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIFwiZGF0YS1pY29uXCI6IFwiXCIsXG4gICAgICAgIGNsYXNzTmFtZTogY24oY2xhc3NOYW1lcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3NOYW1lcy5pY29uLCB0b2FzdCA9PSBudWxsID8gdm9pZCAwIDogKF90b2FzdF9jbGFzc05hbWVzMyA9IHRvYXN0LmNsYXNzTmFtZXMpID09IG51bGwgPyB2b2lkIDAgOiBfdG9hc3RfY2xhc3NOYW1lczMuaWNvbilcbiAgICB9LCB0b2FzdC5wcm9taXNlIHx8IHRvYXN0LnR5cGUgPT09ICdsb2FkaW5nJyAmJiAhdG9hc3QuaWNvbiA/IHRvYXN0Lmljb24gfHwgZ2V0TG9hZGluZ0ljb24oKSA6IG51bGwsIHRvYXN0LnR5cGUgIT09ICdsb2FkaW5nJyA/IGljb24gOiBudWxsKSA6IG51bGwsIC8qI19fUFVSRV9fKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIFwiZGF0YS1jb250ZW50XCI6IFwiXCIsXG4gICAgICAgIGNsYXNzTmFtZTogY24oY2xhc3NOYW1lcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3NOYW1lcy5jb250ZW50LCB0b2FzdCA9PSBudWxsID8gdm9pZCAwIDogKF90b2FzdF9jbGFzc05hbWVzNCA9IHRvYXN0LmNsYXNzTmFtZXMpID09IG51bGwgPyB2b2lkIDAgOiBfdG9hc3RfY2xhc3NOYW1lczQuY29udGVudClcbiAgICB9LCAvKiNfX1BVUkVfXyovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBcImRhdGEtdGl0bGVcIjogXCJcIixcbiAgICAgICAgY2xhc3NOYW1lOiBjbihjbGFzc05hbWVzID09IG51bGwgPyB2b2lkIDAgOiBjbGFzc05hbWVzLnRpdGxlLCB0b2FzdCA9PSBudWxsID8gdm9pZCAwIDogKF90b2FzdF9jbGFzc05hbWVzNSA9IHRvYXN0LmNsYXNzTmFtZXMpID09IG51bGwgPyB2b2lkIDAgOiBfdG9hc3RfY2xhc3NOYW1lczUudGl0bGUpXG4gICAgfSwgdG9hc3QuanN4ID8gdG9hc3QuanN4IDogdHlwZW9mIHRvYXN0LnRpdGxlID09PSAnZnVuY3Rpb24nID8gdG9hc3QudGl0bGUoKSA6IHRvYXN0LnRpdGxlKSwgdG9hc3QuZGVzY3JpcHRpb24gPyAvKiNfX1BVUkVfXyovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge1xuICAgICAgICBcImRhdGEtZGVzY3JpcHRpb25cIjogXCJcIixcbiAgICAgICAgY2xhc3NOYW1lOiBjbihkZXNjcmlwdGlvbkNsYXNzTmFtZSwgdG9hc3REZXNjcmlwdGlvbkNsYXNzbmFtZSwgY2xhc3NOYW1lcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3NOYW1lcy5kZXNjcmlwdGlvbiwgdG9hc3QgPT0gbnVsbCA/IHZvaWQgMCA6IChfdG9hc3RfY2xhc3NOYW1lczYgPSB0b2FzdC5jbGFzc05hbWVzKSA9PSBudWxsID8gdm9pZCAwIDogX3RvYXN0X2NsYXNzTmFtZXM2LmRlc2NyaXB0aW9uKVxuICAgIH0sIHR5cGVvZiB0b2FzdC5kZXNjcmlwdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHRvYXN0LmRlc2NyaXB0aW9uKCkgOiB0b2FzdC5kZXNjcmlwdGlvbikgOiBudWxsKSwgLyojX19QVVJFX18qLyBSZWFjdC5pc1ZhbGlkRWxlbWVudCh0b2FzdC5jYW5jZWwpID8gdG9hc3QuY2FuY2VsIDogdG9hc3QuY2FuY2VsICYmIGlzQWN0aW9uKHRvYXN0LmNhbmNlbCkgPyAvKiNfX1BVUkVfXyovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgICAgICBcImRhdGEtYnV0dG9uXCI6IHRydWUsXG4gICAgICAgIFwiZGF0YS1jYW5jZWxcIjogdHJ1ZSxcbiAgICAgICAgc3R5bGU6IHRvYXN0LmNhbmNlbEJ1dHRvblN0eWxlIHx8IGNhbmNlbEJ1dHRvblN0eWxlLFxuICAgICAgICBvbkNsaWNrOiAoZXZlbnQpPT57XG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGNoZWNrIHR3aWNlIGJlY2F1c2UgdHlwZXNjcmlwdFxuICAgICAgICAgICAgaWYgKCFpc0FjdGlvbih0b2FzdC5jYW5jZWwpKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIWRpc21pc3NpYmxlKSByZXR1cm47XG4gICAgICAgICAgICB0b2FzdC5jYW5jZWwub25DbGljayA9PSBudWxsID8gdm9pZCAwIDogdG9hc3QuY2FuY2VsLm9uQ2xpY2suY2FsbCh0b2FzdC5jYW5jZWwsIGV2ZW50KTtcbiAgICAgICAgICAgIGRlbGV0ZVRvYXN0KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZTogY24oY2xhc3NOYW1lcyA9PSBudWxsID8gdm9pZCAwIDogY2xhc3NOYW1lcy5jYW5jZWxCdXR0b24sIHRvYXN0ID09IG51bGwgPyB2b2lkIDAgOiAoX3RvYXN0X2NsYXNzTmFtZXM3ID0gdG9hc3QuY2xhc3NOYW1lcykgPT0gbnVsbCA/IHZvaWQgMCA6IF90b2FzdF9jbGFzc05hbWVzNy5jYW5jZWxCdXR0b24pXG4gICAgfSwgdG9hc3QuY2FuY2VsLmxhYmVsKSA6IG51bGwsIC8qI19fUFVSRV9fKi8gUmVhY3QuaXNWYWxpZEVsZW1lbnQodG9hc3QuYWN0aW9uKSA/IHRvYXN0LmFjdGlvbiA6IHRvYXN0LmFjdGlvbiAmJiBpc0FjdGlvbih0b2FzdC5hY3Rpb24pID8gLyojX19QVVJFX18qLyBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICAgICAgXCJkYXRhLWJ1dHRvblwiOiB0cnVlLFxuICAgICAgICBcImRhdGEtYWN0aW9uXCI6IHRydWUsXG4gICAgICAgIHN0eWxlOiB0b2FzdC5hY3Rpb25CdXR0b25TdHlsZSB8fCBhY3Rpb25CdXR0b25TdHlsZSxcbiAgICAgICAgb25DbGljazogKGV2ZW50KT0+e1xuICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBjaGVjayB0d2ljZSBiZWNhdXNlIHR5cGVzY3JpcHRcbiAgICAgICAgICAgIGlmICghaXNBY3Rpb24odG9hc3QuYWN0aW9uKSkgcmV0dXJuO1xuICAgICAgICAgICAgdG9hc3QuYWN0aW9uLm9uQ2xpY2sgPT0gbnVsbCA/IHZvaWQgMCA6IHRvYXN0LmFjdGlvbi5vbkNsaWNrLmNhbGwodG9hc3QuYWN0aW9uLCBldmVudCk7XG4gICAgICAgICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgICAgICAgICAgZGVsZXRlVG9hc3QoKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lOiBjbihjbGFzc05hbWVzID09IG51bGwgPyB2b2lkIDAgOiBjbGFzc05hbWVzLmFjdGlvbkJ1dHRvbiwgdG9hc3QgPT0gbnVsbCA/IHZvaWQgMCA6IChfdG9hc3RfY2xhc3NOYW1lczggPSB0b2FzdC5jbGFzc05hbWVzKSA9PSBudWxsID8gdm9pZCAwIDogX3RvYXN0X2NsYXNzTmFtZXM4LmFjdGlvbkJ1dHRvbilcbiAgICB9LCB0b2FzdC5hY3Rpb24ubGFiZWwpIDogbnVsbCk7XG59O1xuZnVuY3Rpb24gZ2V0RG9jdW1lbnREaXJlY3Rpb24oKSB7XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnKSByZXR1cm4gJ2x0cic7XG4gICAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybiAnbHRyJzsgLy8gRm9yIEZyZXNoIHB1cnBvc2VcbiAgICBjb25zdCBkaXJBdHRyaWJ1dGUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXInKTtcbiAgICBpZiAoZGlyQXR0cmlidXRlID09PSAnYXV0bycgfHwgIWRpckF0dHJpYnV0ZSkge1xuICAgICAgICByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5kaXJlY3Rpb247XG4gICAgfVxuICAgIHJldHVybiBkaXJBdHRyaWJ1dGU7XG59XG5mdW5jdGlvbiBhc3NpZ25PZmZzZXQoZGVmYXVsdE9mZnNldCwgbW9iaWxlT2Zmc2V0KSB7XG4gICAgY29uc3Qgc3R5bGVzID0ge307XG4gICAgW1xuICAgICAgICBkZWZhdWx0T2Zmc2V0LFxuICAgICAgICBtb2JpbGVPZmZzZXRcbiAgICBdLmZvckVhY2goKG9mZnNldCwgaW5kZXgpPT57XG4gICAgICAgIGNvbnN0IGlzTW9iaWxlID0gaW5kZXggPT09IDE7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGlzTW9iaWxlID8gJy0tbW9iaWxlLW9mZnNldCcgOiAnLS1vZmZzZXQnO1xuICAgICAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSBpc01vYmlsZSA/IE1PQklMRV9WSUVXUE9SVF9PRkZTRVQgOiBWSUVXUE9SVF9PRkZTRVQ7XG4gICAgICAgIGZ1bmN0aW9uIGFzc2lnbkFsbChvZmZzZXQpIHtcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAndG9wJyxcbiAgICAgICAgICAgICAgICAncmlnaHQnLFxuICAgICAgICAgICAgICAgICdib3R0b20nLFxuICAgICAgICAgICAgICAgICdsZWZ0J1xuICAgICAgICAgICAgXS5mb3JFYWNoKChrZXkpPT57XG4gICAgICAgICAgICAgICAgc3R5bGVzW2Ake3ByZWZpeH0tJHtrZXl9YF0gPSB0eXBlb2Ygb2Zmc2V0ID09PSAnbnVtYmVyJyA/IGAke29mZnNldH1weGAgOiBvZmZzZXQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGFzc2lnbkFsbChvZmZzZXQpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgJ3RvcCcsXG4gICAgICAgICAgICAgICAgJ3JpZ2h0JyxcbiAgICAgICAgICAgICAgICAnYm90dG9tJyxcbiAgICAgICAgICAgICAgICAnbGVmdCdcbiAgICAgICAgICAgIF0uZm9yRWFjaCgoa2V5KT0+e1xuICAgICAgICAgICAgICAgIGlmIChvZmZzZXRba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlc1tgJHtwcmVmaXh9LSR7a2V5fWBdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN0eWxlc1tgJHtwcmVmaXh9LSR7a2V5fWBdID0gdHlwZW9mIG9mZnNldFtrZXldID09PSAnbnVtYmVyJyA/IGAke29mZnNldFtrZXldfXB4YCA6IG9mZnNldFtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXNzaWduQWxsKGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc3R5bGVzO1xufVxuZnVuY3Rpb24gdXNlU29ubmVyKCkge1xuICAgIGNvbnN0IFthY3RpdmVUb2FzdHMsIHNldEFjdGl2ZVRvYXN0c10gPSBSZWFjdC51c2VTdGF0ZShbXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIHJldHVybiBUb2FzdFN0YXRlLnN1YnNjcmliZSgodG9hc3QpPT57XG4gICAgICAgICAgICBpZiAodG9hc3QuZGlzbWlzcykge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgUmVhY3RET00uZmx1c2hTeW5jKCgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVUb2FzdHMoKHRvYXN0cyk9PnRvYXN0cy5maWx0ZXIoKHQpPT50LmlkICE9PSB0b2FzdC5pZCkpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBQcmV2ZW50IGJhdGNoaW5nLCB0ZW1wIHNvbHV0aW9uLlxuICAgICAgICAgICAgc2V0VGltZW91dCgoKT0+e1xuICAgICAgICAgICAgICAgIFJlYWN0RE9NLmZsdXNoU3luYygoKT0+e1xuICAgICAgICAgICAgICAgICAgICBzZXRBY3RpdmVUb2FzdHMoKHRvYXN0cyk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4T2ZFeGlzdGluZ1RvYXN0ID0gdG9hc3RzLmZpbmRJbmRleCgodCk9PnQuaWQgPT09IHRvYXN0LmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdG9hc3QgaWYgaXQgYWxyZWFkeSBleGlzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleE9mRXhpc3RpbmdUb2FzdCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50b2FzdHMuc2xpY2UoMCwgaW5kZXhPZkV4aXN0aW5nVG9hc3QpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50b2FzdHNbaW5kZXhPZkV4aXN0aW5nVG9hc3RdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udG9hc3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4udG9hc3RzLnNsaWNlKGluZGV4T2ZFeGlzdGluZ1RvYXN0ICsgMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50b2FzdHNcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcbiAgICByZXR1cm4ge1xuICAgICAgICB0b2FzdHM6IGFjdGl2ZVRvYXN0c1xuICAgIH07XG59XG5jb25zdCBUb2FzdGVyID0gLyojX19QVVJFX18qLyBSZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRvYXN0ZXIocHJvcHMsIHJlZikge1xuICAgIGNvbnN0IHsgaWQsIGludmVydCwgcG9zaXRpb24gPSAnYm90dG9tLXJpZ2h0JywgaG90a2V5ID0gW1xuICAgICAgICAnYWx0S2V5JyxcbiAgICAgICAgJ0tleVQnXG4gICAgXSwgZXhwYW5kLCBjbG9zZUJ1dHRvbiwgY2xhc3NOYW1lLCBvZmZzZXQsIG1vYmlsZU9mZnNldCwgdGhlbWUgPSAnbGlnaHQnLCByaWNoQ29sb3JzLCBkdXJhdGlvbiwgc3R5bGUsIHZpc2libGVUb2FzdHMgPSBWSVNJQkxFX1RPQVNUU19BTU9VTlQsIHRvYXN0T3B0aW9ucywgZGlyID0gZ2V0RG9jdW1lbnREaXJlY3Rpb24oKSwgZ2FwID0gR0FQLCBpY29ucywgY29udGFpbmVyQXJpYUxhYmVsID0gJ05vdGlmaWNhdGlvbnMnIH0gPSBwcm9wcztcbiAgICBjb25zdCBbdG9hc3RzLCBzZXRUb2FzdHNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICAgIGNvbnN0IGZpbHRlcmVkVG9hc3RzID0gUmVhY3QudXNlTWVtbygoKT0+e1xuICAgICAgICBpZiAoaWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2FzdHMuZmlsdGVyKCh0b2FzdCk9PnRvYXN0LnRvYXN0ZXJJZCA9PT0gaWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0b2FzdHMuZmlsdGVyKCh0b2FzdCk9PiF0b2FzdC50b2FzdGVySWQpO1xuICAgIH0sIFtcbiAgICAgICAgdG9hc3RzLFxuICAgICAgICBpZFxuICAgIF0pO1xuICAgIGNvbnN0IHBvc3NpYmxlUG9zaXRpb25zID0gUmVhY3QudXNlTWVtbygoKT0+e1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KFtcbiAgICAgICAgICAgIHBvc2l0aW9uXG4gICAgICAgIF0uY29uY2F0KGZpbHRlcmVkVG9hc3RzLmZpbHRlcigodG9hc3QpPT50b2FzdC5wb3NpdGlvbikubWFwKCh0b2FzdCk9PnRvYXN0LnBvc2l0aW9uKSkpKTtcbiAgICB9LCBbXG4gICAgICAgIGZpbHRlcmVkVG9hc3RzLFxuICAgICAgICBwb3NpdGlvblxuICAgIF0pO1xuICAgIGNvbnN0IFtoZWlnaHRzLCBzZXRIZWlnaHRzXSA9IFJlYWN0LnVzZVN0YXRlKFtdKTtcbiAgICBjb25zdCBbZXhwYW5kZWQsIHNldEV4cGFuZGVkXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbaW50ZXJhY3RpbmcsIHNldEludGVyYWN0aW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbYWN0dWFsVGhlbWUsIHNldEFjdHVhbFRoZW1lXSA9IFJlYWN0LnVzZVN0YXRlKHRoZW1lICE9PSAnc3lzdGVtJyA/IHRoZW1lIDogdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cubWF0Y2hNZWRpYSAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLm1hdGNoZXMgPyAnZGFyaycgOiAnbGlnaHQnIDogJ2xpZ2h0Jyk7XG4gICAgY29uc3QgbGlzdFJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgICBjb25zdCBob3RrZXlMYWJlbCA9IGhvdGtleS5qb2luKCcrJykucmVwbGFjZSgvS2V5L2csICcnKS5yZXBsYWNlKC9EaWdpdC9nLCAnJyk7XG4gICAgY29uc3QgbGFzdEZvY3VzZWRFbGVtZW50UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IGlzRm9jdXNXaXRoaW5SZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IHJlbW92ZVRvYXN0ID0gUmVhY3QudXNlQ2FsbGJhY2soKHRvYXN0VG9SZW1vdmUpPT57XG4gICAgICAgIHNldFRvYXN0cygodG9hc3RzKT0+e1xuICAgICAgICAgICAgdmFyIF90b2FzdHNfZmluZDtcbiAgICAgICAgICAgIGlmICghKChfdG9hc3RzX2ZpbmQgPSB0b2FzdHMuZmluZCgodG9hc3QpPT50b2FzdC5pZCA9PT0gdG9hc3RUb1JlbW92ZS5pZCkpID09IG51bGwgPyB2b2lkIDAgOiBfdG9hc3RzX2ZpbmQuZGVsZXRlKSkge1xuICAgICAgICAgICAgICAgIFRvYXN0U3RhdGUuZGlzbWlzcyh0b2FzdFRvUmVtb3ZlLmlkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0b2FzdHMuZmlsdGVyKCh7IGlkIH0pPT5pZCAhPT0gdG9hc3RUb1JlbW92ZS5pZCk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCk9PntcbiAgICAgICAgcmV0dXJuIFRvYXN0U3RhdGUuc3Vic2NyaWJlKCh0b2FzdCk9PntcbiAgICAgICAgICAgIGlmICh0b2FzdC5kaXNtaXNzKSB7XG4gICAgICAgICAgICAgICAgLy8gUHJldmVudCBiYXRjaGluZyBvZiBvdGhlciBzdGF0ZSB1cGRhdGVzXG4gICAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57XG4gICAgICAgICAgICAgICAgICAgIHNldFRvYXN0cygodG9hc3RzKT0+dG9hc3RzLm1hcCgodCk9PnQuaWQgPT09IHRvYXN0LmlkID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IDogdCkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFByZXZlbnQgYmF0Y2hpbmcsIHRlbXAgc29sdXRpb24uXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT57XG4gICAgICAgICAgICAgICAgUmVhY3RET00uZmx1c2hTeW5jKCgpPT57XG4gICAgICAgICAgICAgICAgICAgIHNldFRvYXN0cygodG9hc3RzKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhPZkV4aXN0aW5nVG9hc3QgPSB0b2FzdHMuZmluZEluZGV4KCh0KT0+dC5pZCA9PT0gdG9hc3QuaWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0b2FzdCBpZiBpdCBhbHJlYWR5IGV4aXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4T2ZFeGlzdGluZ1RvYXN0ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRvYXN0cy5zbGljZSgwLCBpbmRleE9mRXhpc3RpbmdUb2FzdCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRvYXN0c1tpbmRleE9mRXhpc3RpbmdUb2FzdF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50b2FzdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi50b2FzdHMuc2xpY2UoaW5kZXhPZkV4aXN0aW5nVG9hc3QgKyAxKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRvYXN0c1xuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfSwgW1xuICAgICAgICB0b2FzdHNcbiAgICBdKTtcbiAgICBSZWFjdC51c2VFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKHRoZW1lICE9PSAnc3lzdGVtJykge1xuICAgICAgICAgICAgc2V0QWN0dWFsVGhlbWUodGhlbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGVtZSA9PT0gJ3N5c3RlbScpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIGlmIGN1cnJlbnQgcHJlZmVyZW5jZSBpcyBkYXJrXG4gICAgICAgICAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEgJiYgd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyayknKS5tYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gaXQncyBjdXJyZW50bHkgZGFya1xuICAgICAgICAgICAgICAgIHNldEFjdHVhbFRoZW1lKCdkYXJrJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGl0J3Mgbm90IGRhcmtcbiAgICAgICAgICAgICAgICBzZXRBY3R1YWxUaGVtZSgnbGlnaHQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcpIHJldHVybjtcbiAgICAgICAgY29uc3QgZGFya01lZGlhUXVlcnkgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gQ2hyb21lICYgRmlyZWZveFxuICAgICAgICAgICAgZGFya01lZGlhUXVlcnkuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKHsgbWF0Y2hlcyB9KT0+e1xuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEFjdHVhbFRoZW1lKCdkYXJrJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0QWN0dWFsVGhlbWUoJ2xpZ2h0Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAvLyBTYWZhcmkgPCAxNFxuICAgICAgICAgICAgZGFya01lZGlhUXVlcnkuYWRkTGlzdGVuZXIoKHsgbWF0Y2hlcyB9KT0+e1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBY3R1YWxUaGVtZSgnZGFyaycpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWN0dWFsVGhlbWUoJ2xpZ2h0Jyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbXG4gICAgICAgIHRoZW1lXG4gICAgXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIC8vIEVuc3VyZSBleHBhbmRlZCBpcyBhbHdheXMgZmFsc2Ugd2hlbiBubyB0b2FzdHMgYXJlIHByZXNlbnQgLyBvbmx5IG9uZSBsZWZ0XG4gICAgICAgIGlmICh0b2FzdHMubGVuZ3RoIDw9IDEpIHtcbiAgICAgICAgICAgIHNldEV4cGFuZGVkKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0sIFtcbiAgICAgICAgdG9hc3RzXG4gICAgXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZXZlbnQpPT57XG4gICAgICAgICAgICB2YXIgX2xpc3RSZWZfY3VycmVudDtcbiAgICAgICAgICAgIGNvbnN0IGlzSG90a2V5UHJlc3NlZCA9IGhvdGtleS5ldmVyeSgoa2V5KT0+ZXZlbnRba2V5XSB8fCBldmVudC5jb2RlID09PSBrZXkpO1xuICAgICAgICAgICAgaWYgKGlzSG90a2V5UHJlc3NlZCkge1xuICAgICAgICAgICAgICAgIHZhciBfbGlzdFJlZl9jdXJyZW50MTtcbiAgICAgICAgICAgICAgICBzZXRFeHBhbmRlZCh0cnVlKTtcbiAgICAgICAgICAgICAgICAoX2xpc3RSZWZfY3VycmVudDEgPSBsaXN0UmVmLmN1cnJlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbGlzdFJlZl9jdXJyZW50MS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdFc2NhcGUnICYmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsaXN0UmVmLmN1cnJlbnQgfHwgKChfbGlzdFJlZl9jdXJyZW50ID0gbGlzdFJlZi5jdXJyZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2xpc3RSZWZfY3VycmVudC5jb250YWlucyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KSkpKSB7XG4gICAgICAgICAgICAgICAgc2V0RXhwYW5kZWQoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlS2V5RG93bik7XG4gICAgICAgIHJldHVybiAoKT0+ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZUtleURvd24pO1xuICAgIH0sIFtcbiAgICAgICAgaG90a2V5XG4gICAgXSk7XG4gICAgUmVhY3QudXNlRWZmZWN0KCgpPT57XG4gICAgICAgIGlmIChsaXN0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgICAgIGlmIChsYXN0Rm9jdXNlZEVsZW1lbnRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICBsYXN0Rm9jdXNlZEVsZW1lbnRSZWYuY3VycmVudC5mb2N1cyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ZW50U2Nyb2xsOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBsYXN0Rm9jdXNlZEVsZW1lbnRSZWYuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlzRm9jdXNXaXRoaW5SZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9LCBbXG4gICAgICAgIGxpc3RSZWYuY3VycmVudFxuICAgIF0pO1xuICAgIHJldHVybigvLyBSZW1vdmUgaXRlbSBmcm9tIG5vcm1hbCBuYXZpZ2F0aW9uIGZsb3csIG9ubHkgYXZhaWxhYmxlIHZpYSBob3RrZXlcbiAgICAvKiNfX1BVUkVfXyovIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzZWN0aW9uXCIsIHtcbiAgICAgICAgcmVmOiByZWYsXG4gICAgICAgIFwiYXJpYS1sYWJlbFwiOiBgJHtjb250YWluZXJBcmlhTGFiZWx9ICR7aG90a2V5TGFiZWx9YCxcbiAgICAgICAgdGFiSW5kZXg6IC0xLFxuICAgICAgICBcImFyaWEtbGl2ZVwiOiBcInBvbGl0ZVwiLFxuICAgICAgICBcImFyaWEtcmVsZXZhbnRcIjogXCJhZGRpdGlvbnMgdGV4dFwiLFxuICAgICAgICBcImFyaWEtYXRvbWljXCI6IFwiZmFsc2VcIixcbiAgICAgICAgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nOiB0cnVlXG4gICAgfSwgcG9zc2libGVQb3NpdGlvbnMubWFwKChwb3NpdGlvbiwgaW5kZXgpPT57XG4gICAgICAgIHZhciBfaGVpZ2h0c187XG4gICAgICAgIGNvbnN0IFt5LCB4XSA9IHBvc2l0aW9uLnNwbGl0KCctJyk7XG4gICAgICAgIGlmICghZmlsdGVyZWRUb2FzdHMubGVuZ3RoKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gUmVhY3QuY3JlYXRlRWxlbWVudChcIm9sXCIsIHtcbiAgICAgICAgICAgIGtleTogcG9zaXRpb24sXG4gICAgICAgICAgICBkaXI6IGRpciA9PT0gJ2F1dG8nID8gZ2V0RG9jdW1lbnREaXJlY3Rpb24oKSA6IGRpcixcbiAgICAgICAgICAgIHRhYkluZGV4OiAtMSxcbiAgICAgICAgICAgIHJlZjogbGlzdFJlZixcbiAgICAgICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICAgICAgXCJkYXRhLXNvbm5lci10b2FzdGVyXCI6IHRydWUsXG4gICAgICAgICAgICBcImRhdGEtc29ubmVyLXRoZW1lXCI6IGFjdHVhbFRoZW1lLFxuICAgICAgICAgICAgXCJkYXRhLXktcG9zaXRpb25cIjogeSxcbiAgICAgICAgICAgIFwiZGF0YS14LXBvc2l0aW9uXCI6IHgsXG4gICAgICAgICAgICBzdHlsZToge1xuICAgICAgICAgICAgICAgICctLWZyb250LXRvYXN0LWhlaWdodCc6IGAkeygoX2hlaWdodHNfID0gaGVpZ2h0c1swXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9oZWlnaHRzXy5oZWlnaHQpIHx8IDB9cHhgLFxuICAgICAgICAgICAgICAgICctLXdpZHRoJzogYCR7VE9BU1RfV0lEVEh9cHhgLFxuICAgICAgICAgICAgICAgICctLWdhcCc6IGAke2dhcH1weGAsXG4gICAgICAgICAgICAgICAgLi4uc3R5bGUsXG4gICAgICAgICAgICAgICAgLi4uYXNzaWduT2Zmc2V0KG9mZnNldCwgbW9iaWxlT2Zmc2V0KVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uQmx1cjogKGV2ZW50KT0+e1xuICAgICAgICAgICAgICAgIGlmIChpc0ZvY3VzV2l0aGluUmVmLmN1cnJlbnQgJiYgIWV2ZW50LmN1cnJlbnRUYXJnZXQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNGb2N1c1dpdGhpblJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0Rm9jdXNlZEVsZW1lbnRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEZvY3VzZWRFbGVtZW50UmVmLmN1cnJlbnQuZm9jdXMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZlbnRTY3JvbGw6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdEZvY3VzZWRFbGVtZW50UmVmLmN1cnJlbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uRm9jdXM6IChldmVudCk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBpc05vdERpc21pc3NpYmxlID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0LmRhdGFzZXQuZGlzbWlzc2libGUgPT09ICdmYWxzZSc7XG4gICAgICAgICAgICAgICAgaWYgKGlzTm90RGlzbWlzc2libGUpIHJldHVybjtcbiAgICAgICAgICAgICAgICBpZiAoIWlzRm9jdXNXaXRoaW5SZWYuY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICBpc0ZvY3VzV2l0aGluUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBsYXN0Rm9jdXNlZEVsZW1lbnRSZWYuY3VycmVudCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uTW91c2VFbnRlcjogKCk9PnNldEV4cGFuZGVkKHRydWUpLFxuICAgICAgICAgICAgb25Nb3VzZU1vdmU6ICgpPT5zZXRFeHBhbmRlZCh0cnVlKSxcbiAgICAgICAgICAgIG9uTW91c2VMZWF2ZTogKCk9PntcbiAgICAgICAgICAgICAgICAvLyBBdm9pZCBzZXR0aW5nIGV4cGFuZGVkIHRvIGZhbHNlIHdoZW4gaW50ZXJhY3Rpbmcgd2l0aCBhIHRvYXN0LCBlLmcuIHN3aXBpbmdcbiAgICAgICAgICAgICAgICBpZiAoIWludGVyYWN0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEV4cGFuZGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb25EcmFnRW5kOiAoKT0+c2V0RXhwYW5kZWQoZmFsc2UpLFxuICAgICAgICAgICAgb25Qb2ludGVyRG93bjogKGV2ZW50KT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzTm90RGlzbWlzc2libGUgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBldmVudC50YXJnZXQuZGF0YXNldC5kaXNtaXNzaWJsZSA9PT0gJ2ZhbHNlJztcbiAgICAgICAgICAgICAgICBpZiAoaXNOb3REaXNtaXNzaWJsZSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHNldEludGVyYWN0aW5nKHRydWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG9uUG9pbnRlclVwOiAoKT0+c2V0SW50ZXJhY3RpbmcoZmFsc2UpXG4gICAgICAgIH0sIGZpbHRlcmVkVG9hc3RzLmZpbHRlcigodG9hc3QpPT4hdG9hc3QucG9zaXRpb24gJiYgaW5kZXggPT09IDAgfHwgdG9hc3QucG9zaXRpb24gPT09IHBvc2l0aW9uKS5tYXAoKHRvYXN0LCBpbmRleCk9PntcbiAgICAgICAgICAgIHZhciBfdG9hc3RPcHRpb25zX2R1cmF0aW9uLCBfdG9hc3RPcHRpb25zX2Nsb3NlQnV0dG9uO1xuICAgICAgICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi8gUmVhY3QuY3JlYXRlRWxlbWVudChUb2FzdCwge1xuICAgICAgICAgICAgICAgIGtleTogdG9hc3QuaWQsXG4gICAgICAgICAgICAgICAgaWNvbnM6IGljb25zLFxuICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICB0b2FzdDogdG9hc3QsXG4gICAgICAgICAgICAgICAgZGVmYXVsdFJpY2hDb2xvcnM6IHJpY2hDb2xvcnMsXG4gICAgICAgICAgICAgICAgZHVyYXRpb246IChfdG9hc3RPcHRpb25zX2R1cmF0aW9uID0gdG9hc3RPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiB0b2FzdE9wdGlvbnMuZHVyYXRpb24pICE9IG51bGwgPyBfdG9hc3RPcHRpb25zX2R1cmF0aW9uIDogZHVyYXRpb24sXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiB0b2FzdE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IHRvYXN0T3B0aW9ucy5jbGFzc05hbWUsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb25DbGFzc05hbWU6IHRvYXN0T3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogdG9hc3RPcHRpb25zLmRlc2NyaXB0aW9uQ2xhc3NOYW1lLFxuICAgICAgICAgICAgICAgIGludmVydDogaW52ZXJ0LFxuICAgICAgICAgICAgICAgIHZpc2libGVUb2FzdHM6IHZpc2libGVUb2FzdHMsXG4gICAgICAgICAgICAgICAgY2xvc2VCdXR0b246IChfdG9hc3RPcHRpb25zX2Nsb3NlQnV0dG9uID0gdG9hc3RPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiB0b2FzdE9wdGlvbnMuY2xvc2VCdXR0b24pICE9IG51bGwgPyBfdG9hc3RPcHRpb25zX2Nsb3NlQnV0dG9uIDogY2xvc2VCdXR0b24sXG4gICAgICAgICAgICAgICAgaW50ZXJhY3Rpbmc6IGludGVyYWN0aW5nLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbixcbiAgICAgICAgICAgICAgICBzdHlsZTogdG9hc3RPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiB0b2FzdE9wdGlvbnMuc3R5bGUsXG4gICAgICAgICAgICAgICAgdW5zdHlsZWQ6IHRvYXN0T3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogdG9hc3RPcHRpb25zLnVuc3R5bGVkLFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZXM6IHRvYXN0T3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogdG9hc3RPcHRpb25zLmNsYXNzTmFtZXMsXG4gICAgICAgICAgICAgICAgY2FuY2VsQnV0dG9uU3R5bGU6IHRvYXN0T3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogdG9hc3RPcHRpb25zLmNhbmNlbEJ1dHRvblN0eWxlLFxuICAgICAgICAgICAgICAgIGFjdGlvbkJ1dHRvblN0eWxlOiB0b2FzdE9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IHRvYXN0T3B0aW9ucy5hY3Rpb25CdXR0b25TdHlsZSxcbiAgICAgICAgICAgICAgICBjbG9zZUJ1dHRvbkFyaWFMYWJlbDogdG9hc3RPcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiB0b2FzdE9wdGlvbnMuY2xvc2VCdXR0b25BcmlhTGFiZWwsXG4gICAgICAgICAgICAgICAgcmVtb3ZlVG9hc3Q6IHJlbW92ZVRvYXN0LFxuICAgICAgICAgICAgICAgIHRvYXN0czogZmlsdGVyZWRUb2FzdHMuZmlsdGVyKCh0KT0+dC5wb3NpdGlvbiA9PSB0b2FzdC5wb3NpdGlvbiksXG4gICAgICAgICAgICAgICAgaGVpZ2h0czogaGVpZ2h0cy5maWx0ZXIoKGgpPT5oLnBvc2l0aW9uID09IHRvYXN0LnBvc2l0aW9uKSxcbiAgICAgICAgICAgICAgICBzZXRIZWlnaHRzOiBzZXRIZWlnaHRzLFxuICAgICAgICAgICAgICAgIGV4cGFuZEJ5RGVmYXVsdDogZXhwYW5kLFxuICAgICAgICAgICAgICAgIGdhcDogZ2FwLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBleHBhbmRlZCxcbiAgICAgICAgICAgICAgICBzd2lwZURpcmVjdGlvbnM6IHByb3BzLnN3aXBlRGlyZWN0aW9uc1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pKTtcbiAgICB9KSkpO1xufSk7XG5cbmV4cG9ydCB7IFRvYXN0ZXIsIHRvYXN0LCB1c2VTb25uZXIgfTtcbiJdLCJuYW1lcyI6WyJfX2luc2VydENTUyIsImNvZGUiLCJkb2N1bWVudCIsImhlYWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsInR5cGUiLCJhcHBlbmRDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJSZWFjdCIsIlJlYWN0RE9NIiwiZ2V0QXNzZXQiLCJTdWNjZXNzSWNvbiIsIkluZm9JY29uIiwiV2FybmluZ0ljb24iLCJFcnJvckljb24iLCJiYXJzIiwiQXJyYXkiLCJmaWxsIiwiTG9hZGVyIiwidmlzaWJsZSIsImNsYXNzTmFtZSIsImZpbHRlciIsIkJvb2xlYW4iLCJqb2luIiwibWFwIiwiXyIsImkiLCJrZXkiLCJ4bWxucyIsInZpZXdCb3giLCJoZWlnaHQiLCJ3aWR0aCIsImZpbGxSdWxlIiwiZCIsImNsaXBSdWxlIiwiQ2xvc2VJY29uIiwic3Ryb2tlIiwic3Ryb2tlV2lkdGgiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlTGluZWpvaW4iLCJ4MSIsInkxIiwieDIiLCJ5MiIsInVzZUlzRG9jdW1lbnRIaWRkZW4iLCJpc0RvY3VtZW50SGlkZGVuIiwic2V0SXNEb2N1bWVudEhpZGRlbiIsInVzZVN0YXRlIiwiaGlkZGVuIiwidXNlRWZmZWN0IiwiY2FsbGJhY2siLCJhZGRFdmVudExpc3RlbmVyIiwid2luZG93IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInRvYXN0c0NvdW50ZXIiLCJPYnNlcnZlciIsInN1YnNjcmliZSIsInN1YnNjcmliZXIiLCJzdWJzY3JpYmVycyIsInB1c2giLCJpbmRleCIsImluZGV4T2YiLCJzcGxpY2UiLCJwdWJsaXNoIiwiZGF0YSIsImZvckVhY2giLCJhZGRUb2FzdCIsInRvYXN0cyIsImNyZWF0ZSIsIl9kYXRhX2lkIiwibWVzc2FnZSIsInJlc3QiLCJpZCIsImxlbmd0aCIsImFscmVhZHlFeGlzdHMiLCJmaW5kIiwidG9hc3QiLCJkaXNtaXNzaWJsZSIsInVuZGVmaW5lZCIsImRpc21pc3NlZFRvYXN0cyIsImhhcyIsImRlbGV0ZSIsInRpdGxlIiwiZGlzbWlzcyIsImFkZCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImVycm9yIiwic3VjY2VzcyIsImluZm8iLCJ3YXJuaW5nIiwibG9hZGluZyIsInByb21pc2UiLCJkZXNjcmlwdGlvbiIsInAiLCJQcm9taXNlIiwicmVzb2x2ZSIsIkZ1bmN0aW9uIiwic2hvdWxkRGlzbWlzcyIsInJlc3VsdCIsIm9yaWdpbmFsUHJvbWlzZSIsInRoZW4iLCJyZXNwb25zZSIsImlzUmVhY3RFbGVtZW50UmVzcG9uc2UiLCJpc1ZhbGlkRWxlbWVudCIsImlzSHR0cFJlc3BvbnNlIiwib2siLCJwcm9taXNlRGF0YSIsInN0YXR1cyIsImlzRXh0ZW5kZWRSZXN1bHQiLCJ0b2FzdFNldHRpbmdzIiwiRXJyb3IiLCJjYXRjaCIsImZpbmFsbHkiLCJjYWxsIiwidW53cmFwIiwicmVqZWN0IiwiT2JqZWN0IiwiYXNzaWduIiwiY3VzdG9tIiwianN4IiwiZ2V0QWN0aXZlVG9hc3RzIiwiU2V0IiwiVG9hc3RTdGF0ZSIsInRvYXN0RnVuY3Rpb24iLCJiYXNpY1RvYXN0IiwiZ2V0SGlzdG9yeSIsImdldFRvYXN0cyIsImlzQWN0aW9uIiwiYWN0aW9uIiwibGFiZWwiLCJWSVNJQkxFX1RPQVNUU19BTU9VTlQiLCJWSUVXUE9SVF9PRkZTRVQiLCJNT0JJTEVfVklFV1BPUlRfT0ZGU0VUIiwiVE9BU1RfTElGRVRJTUUiLCJUT0FTVF9XSURUSCIsIkdBUCIsIlNXSVBFX1RIUkVTSE9MRCIsIlRJTUVfQkVGT1JFX1VOTU9VTlQiLCJjbiIsImNsYXNzZXMiLCJnZXREZWZhdWx0U3dpcGVEaXJlY3Rpb25zIiwicG9zaXRpb24iLCJ5IiwieCIsInNwbGl0IiwiZGlyZWN0aW9ucyIsIlRvYXN0IiwicHJvcHMiLCJfdG9hc3RfY2xhc3NOYW1lcyIsIl90b2FzdF9jbGFzc05hbWVzMSIsIl90b2FzdF9jbGFzc05hbWVzMiIsIl90b2FzdF9jbGFzc05hbWVzMyIsIl90b2FzdF9jbGFzc05hbWVzNCIsIl90b2FzdF9jbGFzc05hbWVzNSIsIl90b2FzdF9jbGFzc05hbWVzNiIsIl90b2FzdF9jbGFzc05hbWVzNyIsIl90b2FzdF9jbGFzc05hbWVzOCIsImludmVydCIsIlRvYXN0ZXJJbnZlcnQiLCJ1bnN0eWxlZCIsImludGVyYWN0aW5nIiwic2V0SGVpZ2h0cyIsInZpc2libGVUb2FzdHMiLCJoZWlnaHRzIiwiZXhwYW5kZWQiLCJyZW1vdmVUb2FzdCIsImRlZmF1bHRSaWNoQ29sb3JzIiwiY2xvc2VCdXR0b24iLCJjbG9zZUJ1dHRvbkZyb21Ub2FzdGVyIiwiY2FuY2VsQnV0dG9uU3R5bGUiLCJhY3Rpb25CdXR0b25TdHlsZSIsImRlc2NyaXB0aW9uQ2xhc3NOYW1lIiwiZHVyYXRpb24iLCJkdXJhdGlvbkZyb21Ub2FzdGVyIiwiZ2FwIiwiZXhwYW5kQnlEZWZhdWx0IiwiY2xhc3NOYW1lcyIsImljb25zIiwiY2xvc2VCdXR0b25BcmlhTGFiZWwiLCJzd2lwZURpcmVjdGlvbiIsInNldFN3aXBlRGlyZWN0aW9uIiwic3dpcGVPdXREaXJlY3Rpb24iLCJzZXRTd2lwZU91dERpcmVjdGlvbiIsIm1vdW50ZWQiLCJzZXRNb3VudGVkIiwicmVtb3ZlZCIsInNldFJlbW92ZWQiLCJzd2lwaW5nIiwic2V0U3dpcGluZyIsInN3aXBlT3V0Iiwic2V0U3dpcGVPdXQiLCJpc1N3aXBlZCIsInNldElzU3dpcGVkIiwib2Zmc2V0QmVmb3JlUmVtb3ZlIiwic2V0T2Zmc2V0QmVmb3JlUmVtb3ZlIiwiaW5pdGlhbEhlaWdodCIsInNldEluaXRpYWxIZWlnaHQiLCJyZW1haW5pbmdUaW1lIiwidXNlUmVmIiwiZHJhZ1N0YXJ0VGltZSIsInRvYXN0UmVmIiwiaXNGcm9udCIsImlzVmlzaWJsZSIsInRvYXN0VHlwZSIsInRvYXN0Q2xhc3NuYW1lIiwidG9hc3REZXNjcmlwdGlvbkNsYXNzbmFtZSIsImhlaWdodEluZGV4IiwidXNlTWVtbyIsImZpbmRJbmRleCIsInRvYXN0SWQiLCJfdG9hc3RfY2xvc2VCdXR0b24iLCJjbG9zZVRpbWVyU3RhcnRUaW1lUmVmIiwib2Zmc2V0IiwibGFzdENsb3NlVGltZXJTdGFydFRpbWVSZWYiLCJwb2ludGVyU3RhcnRSZWYiLCJ0b2FzdHNIZWlnaHRCZWZvcmUiLCJyZWR1Y2UiLCJwcmV2IiwiY3VyciIsInJlZHVjZXJJbmRleCIsImRpc2FibGVkIiwiY3VycmVudCIsInRvYXN0Tm9kZSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImgiLCJ1c2VMYXlvdXRFZmZlY3QiLCJvcmlnaW5hbEhlaWdodCIsIm5ld0hlaWdodCIsImNhbmNlbCIsImRlbGV0ZVRvYXN0IiwidXNlQ2FsbGJhY2siLCJzZXRUaW1lb3V0IiwiSW5maW5pdHkiLCJ0aW1lb3V0SWQiLCJwYXVzZVRpbWVyIiwiZWxhcHNlZFRpbWUiLCJEYXRlIiwiZ2V0VGltZSIsInN0YXJ0VGltZXIiLCJvbkF1dG9DbG9zZSIsImNsZWFyVGltZW91dCIsIm9uRGlzbWlzcyIsImdldExvYWRpbmdJY29uIiwibG9hZGVyIiwiaWNvbiIsIl90b2FzdF9yaWNoQ29sb3JzIiwiX2ljb25zX2Nsb3NlIiwidGFiSW5kZXgiLCJyZWYiLCJkZWZhdWx0IiwicmljaENvbG9ycyIsInRlc3RJZCIsIm9uRHJhZ0VuZCIsIm9uUG9pbnRlckRvd24iLCJldmVudCIsImJ1dHRvbiIsInRhcmdldCIsInNldFBvaW50ZXJDYXB0dXJlIiwicG9pbnRlcklkIiwidGFnTmFtZSIsImNsaWVudFgiLCJjbGllbnRZIiwib25Qb2ludGVyVXAiLCJfdG9hc3RSZWZfY3VycmVudCIsIl90b2FzdFJlZl9jdXJyZW50MSIsIl9kcmFnU3RhcnRUaW1lX2N1cnJlbnQiLCJzd2lwZUFtb3VudFgiLCJOdW1iZXIiLCJnZXRQcm9wZXJ0eVZhbHVlIiwicmVwbGFjZSIsInN3aXBlQW1vdW50WSIsInRpbWVUYWtlbiIsInN3aXBlQW1vdW50IiwidmVsb2NpdHkiLCJNYXRoIiwiYWJzIiwiX3RvYXN0UmVmX2N1cnJlbnQyIiwiX3RvYXN0UmVmX2N1cnJlbnQzIiwic2V0UHJvcGVydHkiLCJvblBvaW50ZXJNb3ZlIiwiX3dpbmRvd19nZXRTZWxlY3Rpb24iLCJpc0hpZ2hsaWdodGVkIiwiZ2V0U2VsZWN0aW9uIiwidG9TdHJpbmciLCJ5RGVsdGEiLCJ4RGVsdGEiLCJfcHJvcHNfc3dpcGVEaXJlY3Rpb25zIiwic3dpcGVEaXJlY3Rpb25zIiwiZ2V0RGFtcGVuaW5nIiwiZGVsdGEiLCJmYWN0b3IiLCJpbmNsdWRlcyIsImRhbXBlbmVkRGVsdGEiLCJvbkNsaWNrIiwiY2xvc2UiLCJjb250ZW50IiwiY2FuY2VsQnV0dG9uIiwiZGVmYXVsdFByZXZlbnRlZCIsImFjdGlvbkJ1dHRvbiIsImdldERvY3VtZW50RGlyZWN0aW9uIiwiZGlyQXR0cmlidXRlIiwiZG9jdW1lbnRFbGVtZW50IiwiZ2V0QXR0cmlidXRlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImRpcmVjdGlvbiIsImFzc2lnbk9mZnNldCIsImRlZmF1bHRPZmZzZXQiLCJtb2JpbGVPZmZzZXQiLCJzdHlsZXMiLCJpc01vYmlsZSIsInByZWZpeCIsImRlZmF1bHRWYWx1ZSIsImFzc2lnbkFsbCIsInVzZVNvbm5lciIsImFjdGl2ZVRvYXN0cyIsInNldEFjdGl2ZVRvYXN0cyIsImZsdXNoU3luYyIsInQiLCJpbmRleE9mRXhpc3RpbmdUb2FzdCIsInNsaWNlIiwiVG9hc3RlciIsImZvcndhcmRSZWYiLCJob3RrZXkiLCJleHBhbmQiLCJ0aGVtZSIsInRvYXN0T3B0aW9ucyIsImRpciIsImNvbnRhaW5lckFyaWFMYWJlbCIsInNldFRvYXN0cyIsImZpbHRlcmVkVG9hc3RzIiwidG9hc3RlcklkIiwicG9zc2libGVQb3NpdGlvbnMiLCJmcm9tIiwiY29uY2F0Iiwic2V0RXhwYW5kZWQiLCJzZXRJbnRlcmFjdGluZyIsImFjdHVhbFRoZW1lIiwic2V0QWN0dWFsVGhlbWUiLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsImxpc3RSZWYiLCJob3RrZXlMYWJlbCIsImxhc3RGb2N1c2VkRWxlbWVudFJlZiIsImlzRm9jdXNXaXRoaW5SZWYiLCJ0b2FzdFRvUmVtb3ZlIiwiX3RvYXN0c19maW5kIiwiZGFya01lZGlhUXVlcnkiLCJhZGRMaXN0ZW5lciIsImUiLCJjb25zb2xlIiwiaGFuZGxlS2V5RG93biIsIl9saXN0UmVmX2N1cnJlbnQiLCJpc0hvdGtleVByZXNzZWQiLCJldmVyeSIsIl9saXN0UmVmX2N1cnJlbnQxIiwiZm9jdXMiLCJhY3RpdmVFbGVtZW50IiwiY29udGFpbnMiLCJwcmV2ZW50U2Nyb2xsIiwic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIiwiX2hlaWdodHNfIiwib25CbHVyIiwiY3VycmVudFRhcmdldCIsInJlbGF0ZWRUYXJnZXQiLCJvbkZvY3VzIiwiaXNOb3REaXNtaXNzaWJsZSIsIkhUTUxFbGVtZW50IiwiZGF0YXNldCIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VNb3ZlIiwib25Nb3VzZUxlYXZlIiwiX3RvYXN0T3B0aW9uc19kdXJhdGlvbiIsIl90b2FzdE9wdGlvbnNfY2xvc2VCdXR0b24iXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/sonner/dist/index.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/tailwind-merge/dist/bundle-mjs.mjs":
|
||
/*!*********************************************************!*\
|
||
!*** ./node_modules/tailwind-merge/dist/bundle-mjs.mjs ***!
|
||
\*********************************************************/
|
||
/***/ ((__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 */ createTailwindMerge: () => (/* binding */ createTailwindMerge),\n/* harmony export */ extendTailwindMerge: () => (/* binding */ extendTailwindMerge),\n/* harmony export */ fromTheme: () => (/* binding */ fromTheme),\n/* harmony export */ getDefaultConfig: () => (/* binding */ getDefaultConfig),\n/* harmony export */ mergeConfigs: () => (/* binding */ mergeConfigs),\n/* harmony export */ twJoin: () => (/* binding */ twJoin),\n/* harmony export */ twMerge: () => (/* binding */ twMerge),\n/* harmony export */ validators: () => (/* binding */ validators)\n/* harmony export */ });\n/**\n * Concatenates two arrays faster than the array spread operator.\n */\nconst concatArrays = (array1, array2) => {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\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$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryWeight = value => getIsArbitraryValue(value, isLabelWeight, isAny);\nconst isArbitraryFamilyName = value => getIsArbitraryValue(value, isLabelFamilyName, isNever);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\nconst isArbitraryVariableWeight = value => getIsArbitraryVariable(value, isLabelWeight, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelWeight = label => label === 'number' || label === 'weight';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryFamilyName,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isArbitraryVariableWeight,\n isArbitraryWeight,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingInline = () => [isFraction, 'screen', 'full', 'dvw', 'lvw', 'svw', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleSizingBlock = () => [isFraction, 'screen', 'full', 'lh', 'dvh', 'lvh', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\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'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Inset\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Inset Inline\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Inset Block\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Inset Inline Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-s` in next major release\n */\n start: [{\n 'inset-s': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-s-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n start: scaleInset()\n }],\n /**\n * Inset Inline End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n * @todo class group will be renamed to `inset-e` in next major release\n */\n end: [{\n 'inset-e': scaleInset(),\n /**\n * @deprecated since Tailwind CSS v4.2.0 in favor of `inset-e-*` utilities.\n * @see https://github.com/tailwindlabs/tailwindcss/pull/19613\n */\n end: scaleInset()\n }],\n /**\n * Inset Block Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-bs': [{\n 'inset-bs': scaleInset()\n }],\n /**\n * Inset Block End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-be': [{\n 'inset-be': scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Inline End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block Start\n * @see https://tailwindcss.com/docs/padding\n */\n pbs: [{\n pbs: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Block End\n * @see https://tailwindcss.com/docs/padding\n */\n pbe: [{\n pbe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin Inline\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Block\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Inline Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin Inline End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Block Start\n * @see https://tailwindcss.com/docs/margin\n */\n mbs: [{\n mbs: scaleMargin()\n }],\n /**\n * Margin Block End\n * @see https://tailwindcss.com/docs/margin\n */\n mbe: [{\n mbe: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Inline Size\n * @see https://tailwindcss.com/docs/width\n */\n 'inline-size': [{\n inline: ['auto', ...scaleSizingInline()]\n }],\n /**\n * Min-Inline Size\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-inline-size': [{\n 'min-inline': ['auto', ...scaleSizingInline()]\n }],\n /**\n * Max-Inline Size\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-inline-size': [{\n 'max-inline': ['none', ...scaleSizingInline()]\n }],\n /**\n * Block Size\n * @see https://tailwindcss.com/docs/height\n */\n 'block-size': [{\n block: ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Min-Block Size\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-block-size': [{\n 'min-block': ['auto', ...scaleSizingBlock()]\n }],\n /**\n * Max-Block Size\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-block-size': [{\n 'max-block': ['none', ...scaleSizingBlock()]\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariableWeight, isArbitraryWeight]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryFamilyName, themeFont]\n }],\n /**\n * Font Feature Settings\n * @see https://tailwindcss.com/docs/font-feature-settings\n */\n 'font-features': [{\n 'font-features': [isArbitraryValue]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width Inline\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Block\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Inline Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width Inline End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Block Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-bs': [{\n 'border-bs': scaleBorderWidth()\n }],\n /**\n * Border Width Block End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-be': [{\n 'border-be': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color Inline\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Block\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color Inline Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color Inline End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Block Start\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-bs': [{\n 'border-bs': scaleColor()\n }],\n /**\n * Border Color Block End\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-be': [{\n 'border-be': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\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', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Inline End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbs': [{\n 'scroll-mbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Block End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mbe': [{\n 'scroll-mbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Inline End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbs': [{\n 'scroll-pbs': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Block End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pbe': [{\n 'scroll-pbe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'inset-bs', 'inset-be', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pbs', 'pbe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mbs', 'mbe', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\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'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-bs', 'border-w-be', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-bs', 'border-color-be', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mbs', 'scroll-mbe', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pbs', 'scroll-pbe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\n\n//# sourceMappingURL=bundle-mjs.mjs.map\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy90YWlsd2luZC1tZXJnZS9kaXN0L2J1bmRsZS1tanMubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0JBQWtCLG1CQUFtQjtBQUNyQztBQUNBO0FBQ0Esa0JBQWtCLG1CQUFtQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixzQkFBc0I7QUFDeEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixTQUFTO0FBQzNCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrQkFBa0IsU0FBUztBQUMzQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixhQUFhO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1EQUFtRCxrREFBa0QsZ0RBQWdEO0FBQ3JKO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtDQUErQztBQUMvQyxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0Isc0JBQXNCO0FBQzFDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTtBQUNKO0FBQ0E7QUFDQSxPQUFPLG1CQUFtQixrQkFBa0IsYUFBYTtBQUN6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBDQUEwQyxZQUFZO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQiwyQkFBMkI7QUFDL0M7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtCQUFrQixnQkFBZ0I7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1QsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUM0SDtBQUM1SCIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy90YWlsd2luZC1tZXJnZS9kaXN0L2J1bmRsZS1tanMubWpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29uY2F0ZW5hdGVzIHR3byBhcnJheXMgZmFzdGVyIHRoYW4gdGhlIGFycmF5IHNwcmVhZCBvcGVyYXRvci5cbiAqL1xuY29uc3QgY29uY2F0QXJyYXlzID0gKGFycmF5MSwgYXJyYXkyKSA9PiB7XG4gIC8vIFByZS1hbGxvY2F0ZSBmb3IgYmV0dGVyIFY4IG9wdGltaXphdGlvblxuICBjb25zdCBjb21iaW5lZEFycmF5ID0gbmV3IEFycmF5KGFycmF5MS5sZW5ndGggKyBhcnJheTIubGVuZ3RoKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheTEubGVuZ3RoOyBpKyspIHtcbiAgICBjb21iaW5lZEFycmF5W2ldID0gYXJyYXkxW2ldO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyYXkyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29tYmluZWRBcnJheVthcnJheTEubGVuZ3RoICsgaV0gPSBhcnJheTJbaV07XG4gIH1cbiAgcmV0dXJuIGNvbWJpbmVkQXJyYXk7XG59O1xuXG4vLyBGYWN0b3J5IGZ1bmN0aW9uIGVuc3VyZXMgY29uc2lzdGVudCBvYmplY3Qgc2hhcGVzXG5jb25zdCBjcmVhdGVDbGFzc1ZhbGlkYXRvck9iamVjdCA9IChjbGFzc0dyb3VwSWQsIHZhbGlkYXRvcikgPT4gKHtcbiAgY2xhc3NHcm91cElkLFxuICB2YWxpZGF0b3Jcbn0pO1xuLy8gRmFjdG9yeSBlbnN1cmVzIGNvbnNpc3RlbnQgQ2xhc3NQYXJ0T2JqZWN0IHNoYXBlXG5jb25zdCBjcmVhdGVDbGFzc1BhcnRPYmplY3QgPSAobmV4dFBhcnQgPSBuZXcgTWFwKCksIHZhbGlkYXRvcnMgPSBudWxsLCBjbGFzc0dyb3VwSWQpID0+ICh7XG4gIG5leHRQYXJ0LFxuICB2YWxpZGF0b3JzLFxuICBjbGFzc0dyb3VwSWRcbn0pO1xuY29uc3QgQ0xBU1NfUEFSVF9TRVBBUkFUT1IgPSAnLSc7XG5jb25zdCBFTVBUWV9DT05GTElDVFMgPSBbXTtcbi8vIEkgdXNlIHR3byBkb3RzIGhlcmUgYmVjYXVzZSBvbmUgZG90IGlzIHVzZWQgYXMgcHJlZml4IGZvciBjbGFzcyBncm91cHMgaW4gcGx1Z2luc1xuY29uc3QgQVJCSVRSQVJZX1BST1BFUlRZX1BSRUZJWCA9ICdhcmJpdHJhcnkuLic7XG5jb25zdCBjcmVhdGVDbGFzc0dyb3VwVXRpbHMgPSBjb25maWcgPT4ge1xuICBjb25zdCBjbGFzc01hcCA9IGNyZWF0ZUNsYXNzTWFwKGNvbmZpZyk7XG4gIGNvbnN0IHtcbiAgICBjb25mbGljdGluZ0NsYXNzR3JvdXBzLFxuICAgIGNvbmZsaWN0aW5nQ2xhc3NHcm91cE1vZGlmaWVyc1xuICB9ID0gY29uZmlnO1xuICBjb25zdCBnZXRDbGFzc0dyb3VwSWQgPSBjbGFzc05hbWUgPT4ge1xuICAgIGlmIChjbGFzc05hbWUuc3RhcnRzV2l0aCgnWycpICYmIGNsYXNzTmFtZS5lbmRzV2l0aCgnXScpKSB7XG4gICAgICByZXR1cm4gZ2V0R3JvdXBJZEZvckFyYml0cmFyeVByb3BlcnR5KGNsYXNzTmFtZSk7XG4gICAgfVxuICAgIGNvbnN0IGNsYXNzUGFydHMgPSBjbGFzc05hbWUuc3BsaXQoQ0xBU1NfUEFSVF9TRVBBUkFUT1IpO1xuICAgIC8vIENsYXNzZXMgbGlrZSBgLWluc2V0LTFgIHByb2R1Y2UgYW4gZW1wdHkgc3RyaW5nIGFzIGZpcnN0IGNsYXNzUGFydC4gV2UgYXNzdW1lIHRoYXQgY2xhc3NlcyBmb3IgbmVnYXRpdmUgdmFsdWVzIGFyZSB1c2VkIGNvcnJlY3RseSBhbmQgc2tpcCBpdC5cbiAgICBjb25zdCBzdGFydEluZGV4ID0gY2xhc3NQYXJ0c1swXSA9PT0gJycgJiYgY2xhc3NQYXJ0cy5sZW5ndGggPiAxID8gMSA6IDA7XG4gICAgcmV0dXJuIGdldEdyb3VwUmVjdXJzaXZlKGNsYXNzUGFydHMsIHN0YXJ0SW5kZXgsIGNsYXNzTWFwKTtcbiAgfTtcbiAgY29uc3QgZ2V0Q29uZmxpY3RpbmdDbGFzc0dyb3VwSWRzID0gKGNsYXNzR3JvdXBJZCwgaGFzUG9zdGZpeE1vZGlmaWVyKSA9PiB7XG4gICAgaWYgKGhhc1Bvc3RmaXhNb2RpZmllcikge1xuICAgICAgY29uc3QgbW9kaWZpZXJDb25mbGljdHMgPSBjb25mbGljdGluZ0NsYXNzR3JvdXBNb2RpZmllcnNbY2xhc3NHcm91cElkXTtcbiAgICAgIGNvbnN0IGJhc2VDb25mbGljdHMgPSBjb25mbGljdGluZ0NsYXNzR3JvdXBzW2NsYXNzR3JvdXBJZF07XG4gICAgICBpZiAobW9kaWZpZXJDb25mbGljdHMpIHtcbiAgICAgICAgaWYgKGJhc2VDb25mbGljdHMpIHtcbiAgICAgICAgICAvLyBNZXJnZSBiYXNlIGNvbmZsaWN0cyB3aXRoIG1vZGlmaWVyIGNvbmZsaWN0c1xuICAgICAgICAgIHJldHVybiBjb25jYXRBcnJheXMoYmFzZUNvbmZsaWN0cywgbW9kaWZpZXJDb25mbGljdHMpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE9ubHkgbW9kaWZpZXIgY29uZmxpY3RzXG4gICAgICAgIHJldHVybiBtb2RpZmllckNvbmZsaWN0cztcbiAgICAgIH1cbiAgICAgIC8vIEZhbGwgYmFjayB0byB3aXRob3V0IHBvc3RmaXggaWYgbm8gbW9kaWZpZXIgY29uZmxpY3RzXG4gICAgICByZXR1cm4gYmFzZUNvbmZsaWN0cyB8fCBFTVBUWV9DT05GTElDVFM7XG4gICAgfVxuICAgIHJldHVybiBjb25mbGljdGluZ0NsYXNzR3JvdXBzW2NsYXNzR3JvdXBJZF0gfHwgRU1QVFlfQ09ORkxJQ1RTO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGdldENsYXNzR3JvdXBJZCxcbiAgICBnZXRDb25mbGljdGluZ0NsYXNzR3JvdXBJZHNcbiAgfTtcbn07XG5jb25zdCBnZXRHcm91cFJlY3Vyc2l2ZSA9IChjbGFzc1BhcnRzLCBzdGFydEluZGV4LCBjbGFzc1BhcnRPYmplY3QpID0+IHtcbiAgY29uc3QgY2xhc3NQYXRoc0xlbmd0aCA9IGNsYXNzUGFydHMubGVuZ3RoIC0gc3RhcnRJbmRleDtcbiAgaWYgKGNsYXNzUGF0aHNMZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gY2xhc3NQYXJ0T2JqZWN0LmNsYXNzR3JvdXBJZDtcbiAgfVxuICBjb25zdCBjdXJyZW50Q2xhc3NQYXJ0ID0gY2xhc3NQYXJ0c1tzdGFydEluZGV4XTtcbiAgY29uc3QgbmV4dENsYXNzUGFydE9iamVjdCA9IGNsYXNzUGFydE9iamVjdC5uZXh0UGFydC5nZXQoY3VycmVudENsYXNzUGFydCk7XG4gIGlmIChuZXh0Q2xhc3NQYXJ0T2JqZWN0KSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZ2V0R3JvdXBSZWN1cnNpdmUoY2xhc3NQYXJ0cywgc3RhcnRJbmRleCArIDEsIG5leHRDbGFzc1BhcnRPYmplY3QpO1xuICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgY29uc3QgdmFsaWRhdG9ycyA9IGNsYXNzUGFydE9iamVjdC52YWxpZGF0b3JzO1xuICBpZiAodmFsaWRhdG9ycyA9PT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gQnVpbGQgY2xhc3NSZXN0IHN0cmluZyBlZmZpY2llbnRseSBieSBqb2luaW5nIGZyb20gc3RhcnRJbmRleCBvbndhcmRzXG4gIGNvbnN0IGNsYXNzUmVzdCA9IHN0YXJ0SW5kZXggPT09IDAgPyBjbGFzc1BhcnRzLmpvaW4oQ0xBU1NfUEFSVF9TRVBBUkFUT1IpIDogY2xhc3NQYXJ0cy5zbGljZShzdGFydEluZGV4KS5qb2luKENMQVNTX1BBUlRfU0VQQVJBVE9SKTtcbiAgY29uc3QgdmFsaWRhdG9yc0xlbmd0aCA9IHZhbGlkYXRvcnMubGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbGlkYXRvcnNMZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHZhbGlkYXRvck9iaiA9IHZhbGlkYXRvcnNbaV07XG4gICAgaWYgKHZhbGlkYXRvck9iai52YWxpZGF0b3IoY2xhc3NSZXN0KSkge1xuICAgICAgcmV0dXJuIHZhbGlkYXRvck9iai5jbGFzc0dyb3VwSWQ7XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59O1xuLyoqXG4gKiBHZXQgdGhlIGNsYXNzIGdyb3VwIElEIGZvciBhbiBhcmJpdHJhcnkgcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBjbGFzcyBuYW1lIHRvIGdldCB0aGUgZ3JvdXAgSUQgZm9yLiBJcyBleHBlY3RlZCB0byBiZSBzdHJpbmcgc3RhcnRpbmcgd2l0aCBgW2AgYW5kIGVuZGluZyB3aXRoIGBdYC5cbiAqL1xuY29uc3QgZ2V0R3JvdXBJZEZvckFyYml0cmFyeVByb3BlcnR5ID0gY2xhc3NOYW1lID0+IGNsYXNzTmFtZS5zbGljZSgxLCAtMSkuaW5kZXhPZignOicpID09PSAtMSA/IHVuZGVmaW5lZCA6ICgoKSA9PiB7XG4gIGNvbnN0IGNvbnRlbnQgPSBjbGFzc05hbWUuc2xpY2UoMSwgLTEpO1xuICBjb25zdCBjb2xvbkluZGV4ID0gY29udGVudC5pbmRleE9mKCc6Jyk7XG4gIGNvbnN0IHByb3BlcnR5ID0gY29udGVudC5zbGljZSgwLCBjb2xvbkluZGV4KTtcbiAgcmV0dXJuIHByb3BlcnR5ID8gQVJCSVRSQVJZX1BST1BFUlRZX1BSRUZJWCArIHByb3BlcnR5IDogdW5kZWZpbmVkO1xufSkoKTtcbi8qKlxuICogRXhwb3J0ZWQgZm9yIHRlc3Rpbmcgb25seVxuICovXG5jb25zdCBjcmVhdGVDbGFzc01hcCA9IGNvbmZpZyA9PiB7XG4gIGNvbnN0IHtcbiAgICB0aGVtZSxcbiAgICBjbGFzc0dyb3Vwc1xuICB9ID0gY29uZmlnO1xuICByZXR1cm4gcHJvY2Vzc0NsYXNzR3JvdXBzKGNsYXNzR3JvdXBzLCB0aGVtZSk7XG59O1xuLy8gU3BsaXQgaW50byBzZXBhcmF0ZSBmdW5jdGlvbnMgdG8gbWFpbnRhaW4gbW9ub21vcnBoaWMgY2FsbCBzaXRlc1xuY29uc3QgcHJvY2Vzc0NsYXNzR3JvdXBzID0gKGNsYXNzR3JvdXBzLCB0aGVtZSkgPT4ge1xuICBjb25zdCBjbGFzc01hcCA9IGNyZWF0ZUNsYXNzUGFydE9iamVjdCgpO1xuICBmb3IgKGNvbnN0IGNsYXNzR3JvdXBJZCBpbiBjbGFzc0dyb3Vwcykge1xuICAgIGNvbnN0IGdyb3VwID0gY2xhc3NHcm91cHNbY2xhc3NHcm91cElkXTtcbiAgICBwcm9jZXNzQ2xhc3Nlc1JlY3Vyc2l2ZWx5KGdyb3VwLCBjbGFzc01hcCwgY2xhc3NHcm91cElkLCB0aGVtZSk7XG4gIH1cbiAgcmV0dXJuIGNsYXNzTWFwO1xufTtcbmNvbnN0IHByb2Nlc3NDbGFzc2VzUmVjdXJzaXZlbHkgPSAoY2xhc3NHcm91cCwgY2xhc3NQYXJ0T2JqZWN0LCBjbGFzc0dyb3VwSWQsIHRoZW1lKSA9PiB7XG4gIGNvbnN0IGxlbiA9IGNsYXNzR3JvdXAubGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgY2xhc3NEZWZpbml0aW9uID0gY2xhc3NHcm91cFtpXTtcbiAgICBwcm9jZXNzQ2xhc3NEZWZpbml0aW9uKGNsYXNzRGVmaW5pdGlvbiwgY2xhc3NQYXJ0T2JqZWN0LCBjbGFzc0dyb3VwSWQsIHRoZW1lKTtcbiAgfVxufTtcbi8vIFNwbGl0IGludG8gc2VwYXJhdGUgZnVuY3Rpb25zIGZvciBlYWNoIHR5cGUgdG8gbWFpbnRhaW4gbW9ub21vcnBoaWMgY2FsbCBzaXRlc1xuY29uc3QgcHJvY2Vzc0NsYXNzRGVmaW5pdGlvbiA9IChjbGFzc0RlZmluaXRpb24sIGNsYXNzUGFydE9iamVjdCwgY2xhc3NHcm91cElkLCB0aGVtZSkgPT4ge1xuICBpZiAodHlwZW9mIGNsYXNzRGVmaW5pdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICBwcm9jZXNzU3RyaW5nRGVmaW5pdGlvbihjbGFzc0RlZmluaXRpb24sIGNsYXNzUGFydE9iamVjdCwgY2xhc3NHcm91cElkKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHR5cGVvZiBjbGFzc0RlZmluaXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBwcm9jZXNzRnVuY3Rpb25EZWZpbml0aW9uKGNsYXNzRGVmaW5pdGlvbiwgY2xhc3NQYXJ0T2JqZWN0LCBjbGFzc0dyb3VwSWQsIHRoZW1lKTtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvY2Vzc09iamVjdERlZmluaXRpb24oY2xhc3NEZWZpbml0aW9uLCBjbGFzc1BhcnRPYmplY3QsIGNsYXNzR3JvdXBJZCwgdGhlbWUpO1xufTtcbmNvbnN0IHByb2Nlc3NTdHJpbmdEZWZpbml0aW9uID0gKGNsYXNzRGVmaW5pdGlvbiwgY2xhc3NQYXJ0T2JqZWN0LCBjbGFzc0dyb3VwSWQpID0+IHtcbiAgY29uc3QgY2xhc3NQYXJ0T2JqZWN0VG9FZGl0ID0gY2xhc3NEZWZpbml0aW9uID09PSAnJyA/IGNsYXNzUGFydE9iamVjdCA6IGdldFBhcnQoY2xhc3NQYXJ0T2JqZWN0LCBjbGFzc0RlZmluaXRpb24pO1xuICBjbGFzc1BhcnRPYmplY3RUb0VkaXQuY2xhc3NHcm91cElkID0gY2xhc3NHcm91cElkO1xufTtcbmNvbnN0IHByb2Nlc3NGdW5jdGlvbkRlZmluaXRpb24gPSAoY2xhc3NEZWZpbml0aW9uLCBjbGFzc1BhcnRPYmplY3QsIGNsYXNzR3JvdXBJZCwgdGhlbWUpID0+IHtcbiAgaWYgKGlzVGhlbWVHZXR0ZXIoY2xhc3NEZWZpbml0aW9uKSkge1xuICAgIHByb2Nlc3NDbGFzc2VzUmVjdXJzaXZlbHkoY2xhc3NEZWZpbml0aW9uKHRoZW1lKSwgY2xhc3NQYXJ0T2JqZWN0LCBjbGFzc0dyb3VwSWQsIHRoZW1lKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGNsYXNzUGFydE9iamVjdC52YWxpZGF0b3JzID09PSBudWxsKSB7XG4gICAgY2xhc3NQYXJ0T2JqZWN0LnZhbGlkYXRvcnMgPSBbXTtcbiAgfVxuICBjbGFzc1BhcnRPYmplY3QudmFsaWRhdG9ycy5wdXNoKGNyZWF0ZUNsYXNzVmFsaWRhdG9yT2JqZWN0KGNsYXNzR3JvdXBJZCwgY2xhc3NEZWZpbml0aW9uKSk7XG59O1xuY29uc3QgcHJvY2Vzc09iamVjdERlZmluaXRpb24gPSAoY2xhc3NEZWZpbml0aW9uLCBjbGFzc1BhcnRPYmplY3QsIGNsYXNzR3JvdXBJZCwgdGhlbWUpID0+IHtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKGNsYXNzRGVmaW5pdGlvbik7XG4gIGNvbnN0IGxlbiA9IGVudHJpZXMubGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgW2tleSwgdmFsdWVdID0gZW50cmllc1tpXTtcbiAgICBwcm9jZXNzQ2xhc3Nlc1JlY3Vyc2l2ZWx5KHZhbHVlLCBnZXRQYXJ0KGNsYXNzUGFydE9iamVjdCwga2V5KSwgY2xhc3NHcm91cElkLCB0aGVtZSk7XG4gIH1cbn07XG5jb25zdCBnZXRQYXJ0ID0gKGNsYXNzUGFydE9iamVjdCwgcGF0aCkgPT4ge1xuICBsZXQgY3VycmVudCA9IGNsYXNzUGFydE9iamVjdDtcbiAgY29uc3QgcGFydHMgPSBwYXRoLnNwbGl0KENMQVNTX1BBUlRfU0VQQVJBVE9SKTtcbiAgY29uc3QgbGVuID0gcGFydHMubGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgY29uc3QgcGFydCA9IHBhcnRzW2ldO1xuICAgIGxldCBuZXh0ID0gY3VycmVudC5uZXh0UGFydC5nZXQocGFydCk7XG4gICAgaWYgKCFuZXh0KSB7XG4gICAgICBuZXh0ID0gY3JlYXRlQ2xhc3NQYXJ0T2JqZWN0KCk7XG4gICAgICBjdXJyZW50Lm5leHRQYXJ0LnNldChwYXJ0LCBuZXh0KTtcbiAgICB9XG4gICAgY3VycmVudCA9IG5leHQ7XG4gIH1cbiAgcmV0dXJuIGN1cnJlbnQ7XG59O1xuLy8gVHlwZSBndWFyZCBtYWludGFpbnMgbW9ub21vcnBoaWMgY2hlY2tcbmNvbnN0IGlzVGhlbWVHZXR0ZXIgPSBmdW5jID0+ICdpc1RoZW1lR2V0dGVyJyBpbiBmdW5jICYmIGZ1bmMuaXNUaGVtZUdldHRlciA9PT0gdHJ1ZTtcblxuLy8gTFJVIGNhY2hlIGltcGxlbWVudGF0aW9uIHVzaW5nIHBsYWluIG9iamVjdHMgZm9yIHNpbXBsaWNpdHlcbmNvbnN0IGNyZWF0ZUxydUNhY2hlID0gbWF4Q2FjaGVTaXplID0+IHtcbiAgaWYgKG1heENhY2hlU2l6ZSA8IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZ2V0OiAoKSA9PiB1bmRlZmluZWQsXG4gICAgICBzZXQ6ICgpID0+IHt9XG4gICAgfTtcbiAgfVxuICBsZXQgY2FjaGVTaXplID0gMDtcbiAgbGV0IGNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgbGV0IHByZXZpb3VzQ2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCB1cGRhdGUgPSAoa2V5LCB2YWx1ZSkgPT4ge1xuICAgIGNhY2hlW2tleV0gPSB2YWx1ZTtcbiAgICBjYWNoZVNpemUrKztcbiAgICBpZiAoY2FjaGVTaXplID4gbWF4Q2FjaGVTaXplKSB7XG4gICAgICBjYWNoZVNpemUgPSAwO1xuICAgICAgcHJldmlvdXNDYWNoZSA9IGNhY2hlO1xuICAgICAgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBnZXQoa2V5KSB7XG4gICAgICBsZXQgdmFsdWUgPSBjYWNoZVtrZXldO1xuICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgaWYgKCh2YWx1ZSA9IHByZXZpb3VzQ2FjaGVba2V5XSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB1cGRhdGUoa2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHNldChrZXksIHZhbHVlKSB7XG4gICAgICBpZiAoa2V5IGluIGNhY2hlKSB7XG4gICAgICAgIGNhY2hlW2tleV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZShrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuY29uc3QgSU1QT1JUQU5UX01PRElGSUVSID0gJyEnO1xuY29uc3QgTU9ESUZJRVJfU0VQQVJBVE9SID0gJzonO1xuY29uc3QgRU1QVFlfTU9ESUZJRVJTID0gW107XG4vLyBQcmUtYWxsb2NhdGVkIHJlc3VsdCBvYmplY3Qgc2hhcGUgZm9yIGNvbnNpc3RlbmN5XG5jb25zdCBjcmVhdGVSZXN1bHRPYmplY3QgPSAobW9kaWZpZXJzLCBoYXNJbXBvcnRhbnRNb2RpZmllciwgYmFzZUNsYXNzTmFtZSwgbWF5YmVQb3N0Zml4TW9kaWZpZXJQb3NpdGlvbiwgaXNFeHRlcm5hbCkgPT4gKHtcbiAgbW9kaWZpZXJzLFxuICBoYXNJbXBvcnRhbnRNb2RpZmllcixcbiAgYmFzZUNsYXNzTmFtZSxcbiAgbWF5YmVQb3N0Zml4TW9kaWZpZXJQb3NpdGlvbixcbiAgaXNFeHRlcm5hbFxufSk7XG5jb25zdCBjcmVhdGVQYXJzZUNsYXNzTmFtZSA9IGNvbmZpZyA9PiB7XG4gIGNvbnN0IHtcbiAgICBwcmVmaXgsXG4gICAgZXhwZXJpbWVudGFsUGFyc2VDbGFzc05hbWVcbiAgfSA9IGNvbmZpZztcbiAgLyoqXG4gICAqIFBhcnNlIGNsYXNzIG5hbWUgaW50byBwYXJ0cy5cbiAgICpcbiAgICogSW5zcGlyZWQgYnkgYHNwbGl0QXRUb3BMZXZlbE9ubHlgIHVzZWQgaW4gVGFpbHdpbmQgQ1NTXG4gICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RhaWx3aW5kbGFicy90YWlsd2luZGNzcy9ibG9iL3YzLjIuMi9zcmMvdXRpbC9zcGxpdEF0VG9wTGV2ZWxPbmx5LmpzXG4gICAqL1xuICBsZXQgcGFyc2VDbGFzc05hbWUgPSBjbGFzc05hbWUgPT4ge1xuICAgIC8vIFVzZSBzaW1wbGUgYXJyYXkgd2l0aCBwdXNoIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2VcbiAgICBjb25zdCBtb2RpZmllcnMgPSBbXTtcbiAgICBsZXQgYnJhY2tldERlcHRoID0gMDtcbiAgICBsZXQgcGFyZW5EZXB0aCA9IDA7XG4gICAgbGV0IG1vZGlmaWVyU3RhcnQgPSAwO1xuICAgIGxldCBwb3N0Zml4TW9kaWZpZXJQb3NpdGlvbjtcbiAgICBjb25zdCBsZW4gPSBjbGFzc05hbWUubGVuZ3RoO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZW47IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGN1cnJlbnRDaGFyYWN0ZXIgPSBjbGFzc05hbWVbaW5kZXhdO1xuICAgICAgaWYgKGJyYWNrZXREZXB0aCA9PT0gMCAmJiBwYXJlbkRlcHRoID09PSAwKSB7XG4gICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyID09PSBNT0RJRklFUl9TRVBBUkFUT1IpIHtcbiAgICAgICAgICBtb2RpZmllcnMucHVzaChjbGFzc05hbWUuc2xpY2UobW9kaWZpZXJTdGFydCwgaW5kZXgpKTtcbiAgICAgICAgICBtb2RpZmllclN0YXJ0ID0gaW5kZXggKyAxO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyID09PSAnLycpIHtcbiAgICAgICAgICBwb3N0Zml4TW9kaWZpZXJQb3NpdGlvbiA9IGluZGV4O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY3VycmVudENoYXJhY3RlciA9PT0gJ1snKSBicmFja2V0RGVwdGgrKztlbHNlIGlmIChjdXJyZW50Q2hhcmFjdGVyID09PSAnXScpIGJyYWNrZXREZXB0aC0tO2Vsc2UgaWYgKGN1cnJlbnRDaGFyYWN0ZXIgPT09ICcoJykgcGFyZW5EZXB0aCsrO2Vsc2UgaWYgKGN1cnJlbnRDaGFyYWN0ZXIgPT09ICcpJykgcGFyZW5EZXB0aC0tO1xuICAgIH1cbiAgICBjb25zdCBiYXNlQ2xhc3NOYW1lV2l0aEltcG9ydGFudE1vZGlmaWVyID0gbW9kaWZpZXJzLmxlbmd0aCA9PT0gMCA/IGNsYXNzTmFtZSA6IGNsYXNzTmFtZS5zbGljZShtb2RpZmllclN0YXJ0KTtcbiAgICAvLyBJbmxpbmUgaW1wb3J0YW50IG1vZGlmaWVyIGNoZWNrXG4gICAgbGV0IGJhc2VDbGFzc05hbWUgPSBiYXNlQ2xhc3NOYW1lV2l0aEltcG9ydGFudE1vZGlmaWVyO1xuICAgIGxldCBoYXNJbXBvcnRhbnRNb2RpZmllciA9IGZhbHNlO1xuICAgIGlmIChiYXNlQ2xhc3NOYW1lV2l0aEltcG9ydGFudE1vZGlmaWVyLmVuZHNXaXRoKElNUE9SVEFOVF9NT0RJRklFUikpIHtcbiAgICAgIGJhc2VDbGFzc05hbWUgPSBiYXNlQ2xhc3NOYW1lV2l0aEltcG9ydGFudE1vZGlmaWVyLnNsaWNlKDAsIC0xKTtcbiAgICAgIGhhc0ltcG9ydGFudE1vZGlmaWVyID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKFxuICAgIC8qKlxuICAgICAqIEluIFRhaWx3aW5kIENTUyB2MyB0aGUgaW1wb3J0YW50IG1vZGlmaWVyIHdhcyBhdCB0aGUgc3RhcnQgb2YgdGhlIGJhc2UgY2xhc3MgbmFtZS4gVGhpcyBpcyBzdGlsbCBzdXBwb3J0ZWQgZm9yIGxlZ2FjeSByZWFzb25zLlxuICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2RjYXN0aWwvdGFpbHdpbmQtbWVyZ2UvaXNzdWVzLzUxMyNpc3N1ZWNvbW1lbnQtMjYxNDAyOTg2NFxuICAgICAqL1xuICAgIGJhc2VDbGFzc05hbWVXaXRoSW1wb3J0YW50TW9kaWZpZXIuc3RhcnRzV2l0aChJTVBPUlRBTlRfTU9ESUZJRVIpKSB7XG4gICAgICBiYXNlQ2xhc3NOYW1lID0gYmFzZUNsYXNzTmFtZVdpdGhJbXBvcnRhbnRNb2RpZmllci5zbGljZSgxKTtcbiAgICAgIGhhc0ltcG9ydGFudE1vZGlmaWVyID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgbWF5YmVQb3N0Zml4TW9kaWZpZXJQb3NpdGlvbiA9IHBvc3RmaXhNb2RpZmllclBvc2l0aW9uICYmIHBvc3RmaXhNb2RpZmllclBvc2l0aW9uID4gbW9kaWZpZXJTdGFydCA/IHBvc3RmaXhNb2RpZmllclBvc2l0aW9uIC0gbW9kaWZpZXJTdGFydCA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gY3JlYXRlUmVzdWx0T2JqZWN0KG1vZGlmaWVycywgaGFzSW1wb3J0YW50TW9kaWZpZXIsIGJhc2VDbGFzc05hbWUsIG1heWJlUG9zdGZpeE1vZGlmaWVyUG9zaXRpb24pO1xuICB9O1xuICBpZiAocHJlZml4KSB7XG4gICAgY29uc3QgZnVsbFByZWZpeCA9IHByZWZpeCArIE1PRElGSUVSX1NFUEFSQVRPUjtcbiAgICBjb25zdCBwYXJzZUNsYXNzTmFtZU9yaWdpbmFsID0gcGFyc2VDbGFzc05hbWU7XG4gICAgcGFyc2VDbGFzc05hbWUgPSBjbGFzc05hbWUgPT4gY2xhc3NOYW1lLnN0YXJ0c1dpdGgoZnVsbFByZWZpeCkgPyBwYXJzZUNsYXNzTmFtZU9yaWdpbmFsKGNsYXNzTmFtZS5zbGljZShmdWxsUHJlZml4Lmxlbmd0aCkpIDogY3JlYXRlUmVzdWx0T2JqZWN0KEVNUFRZX01PRElGSUVSUywgZmFsc2UsIGNsYXNzTmFtZSwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgfVxuICBpZiAoZXhwZXJpbWVudGFsUGFyc2VDbGFzc05hbWUpIHtcbiAgICBjb25zdCBwYXJzZUNsYXNzTmFtZU9yaWdpbmFsID0gcGFyc2VDbGFzc05hbWU7XG4gICAgcGFyc2VDbGFzc05hbWUgPSBjbGFzc05hbWUgPT4gZXhwZXJpbWVudGFsUGFyc2VDbGFzc05hbWUoe1xuICAgICAgY2xhc3NOYW1lLFxuICAgICAgcGFyc2VDbGFzc05hbWU6IHBhcnNlQ2xhc3NOYW1lT3JpZ2luYWxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gcGFyc2VDbGFzc05hbWU7XG59O1xuXG4vKipcbiAqIFNvcnRzIG1vZGlmaWVycyBhY2NvcmRpbmcgdG8gZm9sbG93aW5nIHNjaGVtYTpcbiAqIC0gUHJlZGVmaW5lZCBtb2RpZmllcnMgYXJlIHNvcnRlZCBhbHBoYWJldGljYWxseVxuICogLSBXaGVuIGFuIGFyYml0cmFyeSB2YXJpYW50IGFwcGVhcnMsIGl0IG11c3QgYmUgcHJlc2VydmVkIHdoaWNoIG1vZGlmaWVycyBhcmUgYmVmb3JlIGFuZCBhZnRlciBpdFxuICovXG5jb25zdCBjcmVhdGVTb3J0TW9kaWZpZXJzID0gY29uZmlnID0+IHtcbiAgLy8gUHJlLWNvbXB1dGUgd2VpZ2h0cyBmb3IgYWxsIGtub3duIG1vZGlmaWVycyBmb3IgTygxKSBjb21wYXJpc29uXG4gIGNvbnN0IG1vZGlmaWVyV2VpZ2h0cyA9IG5ldyBNYXAoKTtcbiAgLy8gQXNzaWduIHdlaWdodHMgdG8gc2Vuc2l0aXZlIG1vZGlmaWVycyAoaGlnaGVzdCBwcmlvcml0eSwgYnV0IHByZXNlcnZlIG9yZGVyKVxuICBjb25maWcub3JkZXJTZW5zaXRpdmVNb2RpZmllcnMuZm9yRWFjaCgobW9kLCBpbmRleCkgPT4ge1xuICAgIG1vZGlmaWVyV2VpZ2h0cy5zZXQobW9kLCAxMDAwMDAwICsgaW5kZXgpOyAvLyBIaWdoIHdlaWdodHMgZm9yIHNlbnNpdGl2ZSBtb2RzXG4gIH0pO1xuICByZXR1cm4gbW9kaWZpZXJzID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBsZXQgY3VycmVudFNlZ21lbnQgPSBbXTtcbiAgICAvLyBQcm9jZXNzIG1vZGlmaWVycyBpbiBvbmUgcGFzc1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbW9kaWZpZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBtb2RpZmllciA9IG1vZGlmaWVyc1tpXTtcbiAgICAgIC8vIENoZWNrIGlmIG1vZGlmaWVyIGlzIHNlbnNpdGl2ZSAoc3RhcnRzIHdpdGggJ1snIG9yIGluIG9yZGVyU2Vuc2l0aXZlTW9kaWZpZXJzKVxuICAgICAgY29uc3QgaXNBcmJpdHJhcnkgPSBtb2RpZmllclswXSA9PT0gJ1snO1xuICAgICAgY29uc3QgaXNPcmRlclNlbnNpdGl2ZSA9IG1vZGlmaWVyV2VpZ2h0cy5oYXMobW9kaWZpZXIpO1xuICAgICAgaWYgKGlzQXJiaXRyYXJ5IHx8IGlzT3JkZXJTZW5zaXRpdmUpIHtcbiAgICAgICAgLy8gU29ydCBhbmQgZmx1c2ggY3VycmVudCBzZWdtZW50IGFscGhhYmV0aWNhbGx5XG4gICAgICAgIGlmIChjdXJyZW50U2VnbWVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY3VycmVudFNlZ21lbnQuc29ydCgpO1xuICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLmN1cnJlbnRTZWdtZW50KTtcbiAgICAgICAgICBjdXJyZW50U2VnbWVudCA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlZ3VsYXIgbW9kaWZpZXIgLSBhZGQgdG8gY3VycmVudCBzZWdtZW50IGZvciBiYXRjaCBzb3J0aW5nXG4gICAgICAgIGN1cnJlbnRTZWdtZW50LnB1c2gobW9kaWZpZXIpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBTb3J0IGFuZCBhZGQgYW55IHJlbWFpbmluZyBzZWdtZW50IGl0ZW1zXG4gICAgaWYgKGN1cnJlbnRTZWdtZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIGN1cnJlbnRTZWdtZW50LnNvcnQoKTtcbiAgICAgIHJlc3VsdC5wdXNoKC4uLmN1cnJlbnRTZWdtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG5jb25zdCBjcmVhdGVDb25maWdVdGlscyA9IGNvbmZpZyA9PiAoe1xuICBjYWNoZTogY3JlYXRlTHJ1Q2FjaGUoY29uZmlnLmNhY2hlU2l6ZSksXG4gIHBhcnNlQ2xhc3NOYW1lOiBjcmVhdGVQYXJzZUNsYXNzTmFtZShjb25maWcpLFxuICBzb3J0TW9kaWZpZXJzOiBjcmVhdGVTb3J0TW9kaWZpZXJzKGNvbmZpZyksXG4gIC4uLmNyZWF0ZUNsYXNzR3JvdXBVdGlscyhjb25maWcpXG59KTtcbmNvbnN0IFNQTElUX0NMQVNTRVNfUkVHRVggPSAvXFxzKy87XG5jb25zdCBtZXJnZUNsYXNzTGlzdCA9IChjbGFzc0xpc3QsIGNvbmZpZ1V0aWxzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBwYXJzZUNsYXNzTmFtZSxcbiAgICBnZXRDbGFzc0dyb3VwSWQsXG4gICAgZ2V0Q29uZmxpY3RpbmdDbGFzc0dyb3VwSWRzLFxuICAgIHNvcnRNb2RpZmllcnNcbiAgfSA9IGNvbmZpZ1V0aWxzO1xuICAvKipcbiAgICogU2V0IG9mIGNsYXNzR3JvdXBJZHMgaW4gZm9sbG93aW5nIGZvcm1hdDpcbiAgICogYHtpbXBvcnRhbnRNb2RpZmllcn17dmFyaWFudE1vZGlmaWVyc317Y2xhc3NHcm91cElkfWBcbiAgICogQGV4YW1wbGUgJ2Zsb2F0J1xuICAgKiBAZXhhbXBsZSAnaG92ZXI6Zm9jdXM6YmctY29sb3InXG4gICAqIEBleGFtcGxlICdtZDohcHInXG4gICAqL1xuICBjb25zdCBjbGFzc0dyb3Vwc0luQ29uZmxpY3QgPSBbXTtcbiAgY29uc3QgY2xhc3NOYW1lcyA9IGNsYXNzTGlzdC50cmltKCkuc3BsaXQoU1BMSVRfQ0xBU1NFU19SRUdFWCk7XG4gIGxldCByZXN1bHQgPSAnJztcbiAgZm9yIChsZXQgaW5kZXggPSBjbGFzc05hbWVzLmxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4IC09IDEpIHtcbiAgICBjb25zdCBvcmlnaW5hbENsYXNzTmFtZSA9IGNsYXNzTmFtZXNbaW5kZXhdO1xuICAgIGNvbnN0IHtcbiAgICAgIGlzRXh0ZXJuYWwsXG4gICAgICBtb2RpZmllcnMsXG4gICAgICBoYXNJbXBvcnRhbnRNb2RpZmllcixcbiAgICAgIGJhc2VDbGFzc05hbWUsXG4gICAgICBtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uXG4gICAgfSA9IHBhcnNlQ2xhc3NOYW1lKG9yaWdpbmFsQ2xhc3NOYW1lKTtcbiAgICBpZiAoaXNFeHRlcm5hbCkge1xuICAgICAgcmVzdWx0ID0gb3JpZ2luYWxDbGFzc05hbWUgKyAocmVzdWx0Lmxlbmd0aCA+IDAgPyAnICcgKyByZXN1bHQgOiByZXN1bHQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGxldCBoYXNQb3N0Zml4TW9kaWZpZXIgPSAhIW1heWJlUG9zdGZpeE1vZGlmaWVyUG9zaXRpb247XG4gICAgbGV0IGNsYXNzR3JvdXBJZCA9IGdldENsYXNzR3JvdXBJZChoYXNQb3N0Zml4TW9kaWZpZXIgPyBiYXNlQ2xhc3NOYW1lLnN1YnN0cmluZygwLCBtYXliZVBvc3RmaXhNb2RpZmllclBvc2l0aW9uKSA6IGJhc2VDbGFzc05hbWUpO1xuICAgIGlmICghY2xhc3NHcm91cElkKSB7XG4gICAgICBpZiAoIWhhc1Bvc3RmaXhNb2RpZmllcikge1xuICAgICAgICAvLyBOb3QgYSBUYWlsd2luZCBjbGFzc1xuICAgICAgICByZXN1bHQgPSBvcmlnaW5hbENsYXNzTmFtZSArIChyZXN1bHQubGVuZ3RoID4gMCA/ICcgJyArIHJlc3VsdCA6IHJlc3VsdCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY2xhc3NHcm91cElkID0gZ2V0Q2xhc3NHcm91cElkKGJhc2VDbGFzc05hbWUpO1xuICAgICAgaWYgKCFjbGFzc0dyb3VwSWQpIHtcbiAgICAgICAgLy8gTm90IGEgVGFpbHdpbmQgY2xhc3NcbiAgICAgICAgcmVzdWx0ID0gb3JpZ2luYWxDbGFzc05hbWUgKyAocmVzdWx0Lmxlbmd0aCA+IDAgPyAnICcgKyByZXN1bHQgOiByZXN1bHQpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGhhc1Bvc3RmaXhNb2RpZmllciA9IGZhbHNlO1xuICAgIH1cbiAgICAvLyBGYXN0IHBhdGg6IHNraXAgc29ydGluZyBmb3IgZW1wdHkgb3Igc2luZ2xlIG1vZGlmaWVyXG4gICAgY29uc3QgdmFyaWFudE1vZGlmaWVyID0gbW9kaWZpZXJzLmxlbmd0aCA9PT0gMCA/ICcnIDogbW9kaWZpZXJzLmxlbmd0aCA9PT0gMSA/IG1vZGlmaWVyc1swXSA6IHNvcnRNb2RpZmllcnMobW9kaWZpZXJzKS5qb2luKCc6Jyk7XG4gICAgY29uc3QgbW9kaWZpZXJJZCA9IGhhc0ltcG9ydGFudE1vZGlmaWVyID8gdmFyaWFudE1vZGlmaWVyICsgSU1QT1JUQU5UX01PRElGSUVSIDogdmFyaWFudE1vZGlmaWVyO1xuICAgIGNvbnN0IGNsYXNzSWQgPSBtb2RpZmllcklkICsgY2xhc3NHcm91cElkO1xuICAgIGlmIChjbGFzc0dyb3Vwc0luQ29uZmxpY3QuaW5kZXhPZihjbGFzc0lkKSA+IC0xKSB7XG4gICAgICAvLyBUYWlsd2luZCBjbGFzcyBvbWl0dGVkIGR1ZSB0byBjb25mbGljdFxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNsYXNzR3JvdXBzSW5Db25mbGljdC5wdXNoKGNsYXNzSWQpO1xuICAgIGNvbnN0IGNvbmZsaWN0R3JvdXBzID0gZ2V0Q29uZmxpY3RpbmdDbGFzc0dyb3VwSWRzKGNsYXNzR3JvdXBJZCwgaGFzUG9zdGZpeE1vZGlmaWVyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmZsaWN0R3JvdXBzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBncm91cCA9IGNvbmZsaWN0R3JvdXBzW2ldO1xuICAgICAgY2xhc3NHcm91cHNJbkNvbmZsaWN0LnB1c2gobW9kaWZpZXJJZCArIGdyb3VwKTtcbiAgICB9XG4gICAgLy8gVGFpbHdpbmQgY2xhc3Mgbm90IGluIGNvbmZsaWN0XG4gICAgcmVzdWx0ID0gb3JpZ2luYWxDbGFzc05hbWUgKyAocmVzdWx0Lmxlbmd0aCA+IDAgPyAnICcgKyByZXN1bHQgOiByZXN1bHQpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIFRoZSBjb2RlIGluIHRoaXMgZmlsZSBpcyBjb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbHVrZWVkL2Nsc3ggYW5kIG1vZGlmaWVkIHRvIHN1aXQgdGhlIG5lZWRzIG9mIHRhaWx3aW5kLW1lcmdlIGJldHRlci5cbiAqXG4gKiBTcGVjaWZpY2FsbHk6XG4gKiAtIFJ1bnRpbWUgY29kZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sdWtlZWQvY2xzeC9ibG9iL3YxLjIuMS9zcmMvaW5kZXguanNcbiAqIC0gVHlwZVNjcmlwdCB0eXBlcyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sdWtlZWQvY2xzeC9ibG9iL3YxLjIuMS9jbHN4LmQudHNcbiAqXG4gKiBPcmlnaW5hbCBjb2RlIGhhcyBNSVQgbGljZW5zZTogQ29weXJpZ2h0IChjKSBMdWtlIEVkd2FyZHMgPGx1a2UuZWR3YXJkczA1QGdtYWlsLmNvbT4gKGx1a2VlZC5jb20pXG4gKi9cbmNvbnN0IHR3Sm9pbiA9ICguLi5jbGFzc0xpc3RzKSA9PiB7XG4gIGxldCBpbmRleCA9IDA7XG4gIGxldCBhcmd1bWVudDtcbiAgbGV0IHJlc29sdmVkVmFsdWU7XG4gIGxldCBzdHJpbmcgPSAnJztcbiAgd2hpbGUgKGluZGV4IDwgY2xhc3NMaXN0cy5sZW5ndGgpIHtcbiAgICBpZiAoYXJndW1lbnQgPSBjbGFzc0xpc3RzW2luZGV4KytdKSB7XG4gICAgICBpZiAocmVzb2x2ZWRWYWx1ZSA9IHRvVmFsdWUoYXJndW1lbnQpKSB7XG4gICAgICAgIHN0cmluZyAmJiAoc3RyaW5nICs9ICcgJyk7XG4gICAgICAgIHN0cmluZyArPSByZXNvbHZlZFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyaW5nO1xufTtcbmNvbnN0IHRvVmFsdWUgPSBtaXggPT4ge1xuICAvLyBGYXN0IHBhdGggZm9yIHN0cmluZ3NcbiAgaWYgKHR5cGVvZiBtaXggPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG1peDtcbiAgfVxuICBsZXQgcmVzb2x2ZWRWYWx1ZTtcbiAgbGV0IHN0cmluZyA9ICcnO1xuICBmb3IgKGxldCBrID0gMDsgayA8IG1peC5sZW5ndGg7IGsrKykge1xuICAgIGlmIChtaXhba10pIHtcbiAgICAgIGlmIChyZXNvbHZlZFZhbHVlID0gdG9WYWx1ZShtaXhba10pKSB7XG4gICAgICAgIHN0cmluZyAmJiAoc3RyaW5nICs9ICcgJyk7XG4gICAgICAgIHN0cmluZyArPSByZXNvbHZlZFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc3RyaW5nO1xufTtcbmNvbnN0IGNyZWF0ZVRhaWx3aW5kTWVyZ2UgPSAoY3JlYXRlQ29uZmlnRmlyc3QsIC4uLmNyZWF0ZUNvbmZpZ1Jlc3QpID0+IHtcbiAgbGV0IGNvbmZpZ1V0aWxzO1xuICBsZXQgY2FjaGVHZXQ7XG4gIGxldCBjYWNoZVNldDtcbiAgbGV0IGZ1bmN0aW9uVG9DYWxsO1xuICBjb25zdCBpbml0VGFpbHdpbmRNZXJnZSA9IGNsYXNzTGlzdCA9PiB7XG4gICAgY29uc3QgY29uZmlnID0gY3JlYXRlQ29uZmlnUmVzdC5yZWR1Y2UoKHByZXZpb3VzQ29uZmlnLCBjcmVhdGVDb25maWdDdXJyZW50KSA9PiBjcmVhdGVDb25maWdDdXJyZW50KHByZXZpb3VzQ29uZmlnKSwgY3JlYXRlQ29uZmlnRmlyc3QoKSk7XG4gICAgY29uZmlnVXRpbHMgPSBjcmVhdGVDb25maWdVdGlscyhjb25maWcpO1xuICAgIGNhY2hlR2V0ID0gY29uZmlnVXRpbHMuY2FjaGUuZ2V0O1xuICAgIGNhY2hlU2V0ID0gY29uZmlnVXRpbHMuY2FjaGUuc2V0O1xuICAgIGZ1bmN0aW9uVG9DYWxsID0gdGFpbHdpbmRNZXJnZTtcbiAgICByZXR1cm4gdGFpbHdpbmRNZXJnZShjbGFzc0xpc3QpO1xuICB9O1xuICBjb25zdCB0YWlsd2luZE1lcmdlID0gY2xhc3NMaXN0ID0+IHtcbiAgICBjb25zdCBjYWNoZWRSZXN1bHQgPSBjYWNoZUdldChjbGFzc0xpc3QpO1xuICAgIGlmIChjYWNoZWRSZXN1bHQpIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHQ7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IG1lcmdlQ2xhc3NMaXN0KGNsYXNzTGlzdCwgY29uZmlnVXRpbHMpO1xuICAgIGNhY2hlU2V0KGNsYXNzTGlzdCwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBmdW5jdGlvblRvQ2FsbCA9IGluaXRUYWlsd2luZE1lcmdlO1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IGZ1bmN0aW9uVG9DYWxsKHR3Sm9pbiguLi5hcmdzKSk7XG59O1xuY29uc3QgZmFsbGJhY2tUaGVtZUFyciA9IFtdO1xuY29uc3QgZnJvbVRoZW1lID0ga2V5ID0+IHtcbiAgY29uc3QgdGhlbWVHZXR0ZXIgPSB0aGVtZSA9PiB0aGVtZVtrZXldIHx8IGZhbGxiYWNrVGhlbWVBcnI7XG4gIHRoZW1lR2V0dGVyLmlzVGhlbWVHZXR0ZXIgPSB0cnVlO1xuICByZXR1cm4gdGhlbWVHZXR0ZXI7XG59O1xuY29uc3QgYXJiaXRyYXJ5VmFsdWVSZWdleCA9IC9eXFxbKD86KFxcd1tcXHctXSopOik/KC4rKVxcXSQvaTtcbmNvbnN0IGFyYml0cmFyeVZhcmlhYmxlUmVnZXggPSAvXlxcKCg/OihcXHdbXFx3LV0qKTopPyguKylcXCkkL2k7XG5jb25zdCBmcmFjdGlvblJlZ2V4ID0gL15cXGQrKD86XFwuXFxkKyk/XFwvXFxkKyg/OlxcLlxcZCspPyQvO1xuY29uc3QgdHNoaXJ0VW5pdFJlZ2V4ID0gL14oXFxkKyhcXC5cXGQrKT8pPyh4c3xzbXxtZHxsZ3x4bCkkLztcbmNvbnN0IGxlbmd0aFVuaXRSZWdleCA9IC9cXGQrKCV8cHh8cj9lbXxbc2RsXT92KFtod2liXXxtaW58bWF4KXxwdHxwY3xpbnxjbXxtbXxjYXB8Y2h8ZXh8cj9saHxjcSh3fGh8aXxifG1pbnxtYXgpKXxcXGIoY2FsY3xtaW58bWF4fGNsYW1wKVxcKC4rXFwpfF4wJC87XG5jb25zdCBjb2xvckZ1bmN0aW9uUmVnZXggPSAvXihyZ2JhP3xoc2xhP3xod2J8KG9rKT8obGFifGxjaCl8Y29sb3ItbWl4KVxcKC4rXFwpJC87XG4vLyBTaGFkb3cgYWx3YXlzIGJlZ2lucyB3aXRoIHggYW5kIHkgb2Zmc2V0IHNlcGFyYXRlZCBieSB1bmRlcnNjb3JlIG9wdGlvbmFsbHkgcHJlcGVuZGVkIGJ5IGluc2V0XG5jb25zdCBzaGFkb3dSZWdleCA9IC9eKGluc2V0Xyk/LT8oKFxcZCspP1xcLj8oXFxkKylbYS16XSt8MClfLT8oKFxcZCspP1xcLj8oXFxkKylbYS16XSt8MCkvO1xuY29uc3QgaW1hZ2VSZWdleCA9IC9eKHVybHxpbWFnZXxpbWFnZS1zZXR8Y3Jvc3MtZmFkZXxlbGVtZW50fChyZXBlYXRpbmctKT8obGluZWFyfHJhZGlhbHxjb25pYyktZ3JhZGllbnQpXFwoLitcXCkkLztcbmNvbnN0IGlzRnJhY3Rpb24gPSB2YWx1ZSA9PiBmcmFjdGlvblJlZ2V4LnRlc3QodmFsdWUpO1xuY29uc3QgaXNOdW1iZXIgPSB2YWx1ZSA9PiAhIXZhbHVlICYmICFOdW1iZXIuaXNOYU4oTnVtYmVyKHZhbHVlKSk7XG5jb25zdCBpc0ludGVnZXIgPSB2YWx1ZSA9PiAhIXZhbHVlICYmIE51bWJlci5pc0ludGVnZXIoTnVtYmVyKHZhbHVlKSk7XG5jb25zdCBpc1BlcmNlbnQgPSB2YWx1ZSA9PiB2YWx1ZS5lbmRzV2l0aCgnJScpICYmIGlzTnVtYmVyKHZhbHVlLnNsaWNlKDAsIC0xKSk7XG5jb25zdCBpc1RzaGlydFNpemUgPSB2YWx1ZSA9PiB0c2hpcnRVbml0UmVnZXgudGVzdCh2YWx1ZSk7XG5jb25zdCBpc0FueSA9ICgpID0+IHRydWU7XG5jb25zdCBpc0xlbmd0aE9ubHkgPSB2YWx1ZSA9PlxuLy8gYGNvbG9yRnVuY3Rpb25SZWdleGAgY2hlY2sgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgY29sb3IgZnVuY3Rpb25zIGNhbiBoYXZlIHBlcmNlbnRhZ2VzIGluIHRoZW0gd2hpY2ggd2hpY2ggd291bGQgYmUgaW5jb3JyZWN0bHkgY2xhc3NpZmllZCBhcyBsZW5ndGhzLlxuLy8gRm9yIGV4YW1wbGUsIGBoc2woMCAwJSAwJSlgIHdvdWxkIGJlIGNsYXNzaWZpZWQgYXMgYSBsZW5ndGggd2l0aG91dCB0aGlzIGNoZWNrLlxuLy8gSSBjb3VsZCBhbHNvIHVzZSBsb29rYmVoaW5kIGFzc2VydGlvbiBpbiBgbGVuZ3RoVW5pdFJlZ2V4YCBidXQgdGhhdCBpc24ndCBzdXBwb3J0ZWQgd2lkZWx5IGVub3VnaC5cbmxlbmd0aFVuaXRSZWdleC50ZXN0KHZhbHVlKSAmJiAhY29sb3JGdW5jdGlvblJlZ2V4LnRlc3QodmFsdWUpO1xuY29uc3QgaXNOZXZlciA9ICgpID0+IGZhbHNlO1xuY29uc3QgaXNTaGFkb3cgPSB2YWx1ZSA9PiBzaGFkb3dSZWdleC50ZXN0KHZhbHVlKTtcbmNvbnN0IGlzSW1hZ2UgPSB2YWx1ZSA9PiBpbWFnZVJlZ2V4LnRlc3QodmFsdWUpO1xuY29uc3QgaXNBbnlOb25BcmJpdHJhcnkgPSB2YWx1ZSA9PiAhaXNBcmJpdHJhcnlWYWx1ZSh2YWx1ZSkgJiYgIWlzQXJiaXRyYXJ5VmFyaWFibGUodmFsdWUpO1xuY29uc3QgaXNBcmJpdHJhcnlTaXplID0gdmFsdWUgPT4gZ2V0SXNBcmJpdHJhcnlWYWx1ZSh2YWx1ZSwgaXNMYWJlbFNpemUsIGlzTmV2ZXIpO1xuY29uc3QgaXNBcmJpdHJhcnlWYWx1ZSA9IHZhbHVlID0+IGFyYml0cmFyeVZhbHVlUmVnZXgudGVzdCh2YWx1ZSk7XG5jb25zdCBpc0FyYml0cmFyeUxlbmd0aCA9IHZhbHVlID0+IGdldElzQXJiaXRyYXJ5VmFsdWUodmFsdWUsIGlzTGFiZWxMZW5ndGgsIGlzTGVuZ3RoT25seSk7XG5jb25zdCBpc0FyYml0cmFyeU51bWJlciA9IHZhbHVlID0+IGdldElzQXJiaXRyYXJ5VmFsdWUodmFsdWUsIGlzTGFiZWxOdW1iZXIsIGlzTnVtYmVyKTtcbmNvbnN0IGlzQXJiaXRyYXJ5V2VpZ2h0ID0gdmFsdWUgPT4gZ2V0SXNBcmJpdHJhcnlWYWx1ZSh2YWx1ZSwgaXNMYWJlbFdlaWdodCwgaXNBbnkpO1xuY29uc3QgaXNBcmJpdHJhcnlGYW1pbHlOYW1lID0gdmFsdWUgPT4gZ2V0SXNBcmJpdHJhcnlWYWx1ZSh2YWx1ZSwgaXNMYWJlbEZhbWlseU5hbWUsIGlzTmV2ZXIpO1xuY29uc3QgaXNBcmJpdHJhcnlQb3NpdGlvbiA9IHZhbHVlID0+IGdldElzQXJiaXRyYXJ5VmFsdWUodmFsdWUsIGlzTGFiZWxQb3NpdGlvbiwgaXNOZXZlcik7XG5jb25zdCBpc0FyYml0cmFyeUltYWdlID0gdmFsdWUgPT4gZ2V0SXNBcmJpdHJhcnlWYWx1ZSh2YWx1ZSwgaXNMYWJlbEltYWdlLCBpc0ltYWdlKTtcbmNvbnN0IGlzQXJiaXRyYXJ5U2hhZG93ID0gdmFsdWUgPT4gZ2V0SXNBcmJpdHJhcnlWYWx1ZSh2YWx1ZSwgaXNMYWJlbFNoYWRvdywgaXNTaGFkb3cpO1xuY29uc3QgaXNBcmJpdHJhcnlWYXJpYWJsZSA9IHZhbHVlID0+IGFyYml0cmFyeVZhcmlhYmxlUmVnZXgudGVzdCh2YWx1ZSk7XG5jb25zdCBpc0FyYml0cmFyeVZhcmlhYmxlTGVuZ3RoID0gdmFsdWUgPT4gZ2V0SXNBcmJpdHJhcnlWYXJpYWJsZSh2YWx1ZSwgaXNMYWJlbExlbmd0aCk7XG5jb25zdCBpc0FyYml0cmFyeVZhcmlhYmxlRmFtaWx5TmFtZSA9IHZhbHVlID0+IGdldElzQXJiaXRyYXJ5VmFyaWFibGUodmFsdWUsIGlzTGFiZWxGYW1pbHlOYW1lKTtcbmNvbnN0IGlzQXJiaXRyYXJ5VmFyaWFibGVQb3NpdGlvbiA9IHZhbHVlID0+IGdldElzQXJiaXRyYXJ5VmFyaWFibGUodmFsdWUsIGlzTGFiZWxQb3NpdGlvbik7XG5jb25zdCBpc0FyYml0cmFyeVZhcmlhYmxlU2l6ZSA9IHZhbHVlID0+IGdldElzQXJiaXRyYXJ5VmFyaWFibGUodmFsdWUsIGlzTGFiZWxTaXplKTtcbmNvbnN0IGlzQXJiaXRyYXJ5VmFyaWFibGVJbWFnZSA9IHZhbHVlID0+IGdldElzQXJiaXRyYXJ5VmFyaWFibGUodmFsdWUsIGlzTGFiZWxJbWFnZSk7XG5jb25zdCBpc0FyYml0cmFyeVZhcmlhYmxlU2hhZG93ID0gdmFsdWUgPT4gZ2V0SXNBcmJpdHJhcnlWYXJpYWJsZSh2YWx1ZSwgaXNMYWJlbFNoYWRvdywgdHJ1ZSk7XG5jb25zdCBpc0FyYml0cmFyeVZhcmlhYmxlV2VpZ2h0ID0gdmFsdWUgPT4gZ2V0SXNBcmJpdHJhcnlWYXJpYWJsZSh2YWx1ZSwgaXNMYWJlbFdlaWdodCwgdHJ1ZSk7XG4vLyBIZWxwZXJzXG5jb25zdCBnZXRJc0FyYml0cmFyeVZhbHVlID0gKHZhbHVlLCB0ZXN0TGFiZWwsIHRlc3RWYWx1ZSkgPT4ge1xuICBjb25zdCByZXN1bHQgPSBhcmJpdHJhcnlWYWx1ZVJlZ2V4LmV4ZWModmFsdWUpO1xuICBpZiAocmVzdWx0KSB7XG4gICAgaWYgKHJlc3VsdFsxXSkge1xuICAgICAgcmV0dXJuIHRlc3RMYWJlbChyZXN1bHRbMV0pO1xuICAgIH1cbiAgICByZXR1cm4gdGVzdFZhbHVlKHJlc3VsdFsyXSk7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufTtcbmNvbnN0IGdldElzQXJiaXRyYXJ5VmFyaWFibGUgPSAodmFsdWUsIHRlc3RMYWJlbCwgc2hvdWxkTWF0Y2hOb0xhYmVsID0gZmFsc2UpID0+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXJiaXRyYXJ5VmFyaWFibGVSZWdleC5leGVjKHZhbHVlKTtcbiAgaWYgKHJlc3VsdCkge1xuICAgIGlmIChyZXN1bHRbMV0pIHtcbiAgICAgIHJldHVybiB0ZXN0TGFiZWwocmVzdWx0WzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIHNob3VsZE1hdGNoTm9MYWJlbDtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuLy8gTGFiZWxzXG5jb25zdCBpc0xhYmVsUG9zaXRpb24gPSBsYWJlbCA9PiBsYWJlbCA9PT0gJ3Bvc2l0aW9uJyB8fCBsYWJlbCA9PT0gJ3BlcmNlbnRhZ2UnO1xuY29uc3QgaXNMYWJlbEltYWdlID0gbGFiZWwgPT4gbGFiZWwgPT09ICdpbWFnZScgfHwgbGFiZWwgPT09ICd1cmwnO1xuY29uc3QgaXNMYWJlbFNpemUgPSBsYWJlbCA9PiBsYWJlbCA9PT0gJ2xlbmd0aCcgfHwgbGFiZWwgPT09ICdzaXplJyB8fCBsYWJlbCA9PT0gJ2JnLXNpemUnO1xuY29uc3QgaXNMYWJlbExlbmd0aCA9IGxhYmVsID0+IGxhYmVsID09PSAnbGVuZ3RoJztcbmNvbnN0IGlzTGFiZWxOdW1iZXIgPSBsYWJlbCA9PiBsYWJlbCA9PT0gJ251bWJlcic7XG5jb25zdCBpc0xhYmVsRmFtaWx5TmFtZSA9IGxhYmVsID0+IGxhYmVsID09PSAnZmFtaWx5LW5hbWUnO1xuY29uc3QgaXNMYWJlbFdlaWdodCA9IGxhYmVsID0+IGxhYmVsID09PSAnbnVtYmVyJyB8fCBsYWJlbCA9PT0gJ3dlaWdodCc7XG5jb25zdCBpc0xhYmVsU2hhZG93ID0gbGFiZWwgPT4gbGFiZWwgPT09ICdzaGFkb3cnO1xuY29uc3QgdmFsaWRhdG9ycyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZGVmaW5lUHJvcGVydHkoe1xuICBfX3Byb3RvX186IG51bGwsXG4gIGlzQW55LFxuICBpc0FueU5vbkFyYml0cmFyeSxcbiAgaXNBcmJpdHJhcnlGYW1pbHlOYW1lLFxuICBpc0FyYml0cmFyeUltYWdlLFxuICBpc0FyYml0cmFyeUxlbmd0aCxcbiAgaXNBcmJpdHJhcnlOdW1iZXIsXG4gIGlzQXJiaXRyYXJ5UG9zaXRpb24sXG4gIGlzQXJiaXRyYXJ5U2hhZG93LFxuICBpc0FyYml0cmFyeVNpemUsXG4gIGlzQXJiaXRyYXJ5VmFsdWUsXG4gIGlzQXJiaXRyYXJ5VmFyaWFibGUsXG4gIGlzQXJiaXRyYXJ5VmFyaWFibGVGYW1pbHlOYW1lLFxuICBpc0FyYml0cmFyeVZhcmlhYmxlSW1hZ2UsXG4gIGlzQXJiaXRyYXJ5VmFyaWFibGVMZW5ndGgsXG4gIGlzQXJiaXRyYXJ5VmFyaWFibGVQb3NpdGlvbixcbiAgaXNBcmJpdHJhcnlWYXJpYWJsZVNoYWRvdyxcbiAgaXNBcmJpdHJhcnlWYXJpYWJsZVNpemUsXG4gIGlzQXJiaXRyYXJ5VmFyaWFibGVXZWlnaHQsXG4gIGlzQXJiaXRyYXJ5V2VpZ2h0LFxuICBpc0ZyYWN0aW9uLFxuICBpc0ludGVnZXIsXG4gIGlzTnVtYmVyLFxuICBpc1BlcmNlbnQsXG4gIGlzVHNoaXJ0U2l6ZVxufSwgU3ltYm9sLnRvU3RyaW5nVGFnLCB7XG4gIHZhbHVlOiAnTW9kdWxlJ1xufSk7XG5jb25zdCBnZXREZWZhdWx0Q29uZmlnID0gKCkgPT4ge1xuICAvKipcbiAgICogVGhlbWUgZ2V0dGVycyBmb3IgdGhlbWUgdmFyaWFibGUgbmFtZXNwYWNlc1xuICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdGhlbWUjdGhlbWUtdmFyaWFibGUtbmFtZXNwYWNlc1xuICAgKi9cbiAgLyoqKi9cbiAgY29uc3QgdGhlbWVDb2xvciA9IGZyb21UaGVtZSgnY29sb3InKTtcbiAgY29uc3QgdGhlbWVGb250ID0gZnJvbVRoZW1lKCdmb250Jyk7XG4gIGNvbnN0IHRoZW1lVGV4dCA9IGZyb21UaGVtZSgndGV4dCcpO1xuICBjb25zdCB0aGVtZUZvbnRXZWlnaHQgPSBmcm9tVGhlbWUoJ2ZvbnQtd2VpZ2h0Jyk7XG4gIGNvbnN0IHRoZW1lVHJhY2tpbmcgPSBmcm9tVGhlbWUoJ3RyYWNraW5nJyk7XG4gIGNvbnN0IHRoZW1lTGVhZGluZyA9IGZyb21UaGVtZSgnbGVhZGluZycpO1xuICBjb25zdCB0aGVtZUJyZWFrcG9pbnQgPSBmcm9tVGhlbWUoJ2JyZWFrcG9pbnQnKTtcbiAgY29uc3QgdGhlbWVDb250YWluZXIgPSBmcm9tVGhlbWUoJ2NvbnRhaW5lcicpO1xuICBjb25zdCB0aGVtZVNwYWNpbmcgPSBmcm9tVGhlbWUoJ3NwYWNpbmcnKTtcbiAgY29uc3QgdGhlbWVSYWRpdXMgPSBmcm9tVGhlbWUoJ3JhZGl1cycpO1xuICBjb25zdCB0aGVtZVNoYWRvdyA9IGZyb21UaGVtZSgnc2hhZG93Jyk7XG4gIGNvbnN0IHRoZW1lSW5zZXRTaGFkb3cgPSBmcm9tVGhlbWUoJ2luc2V0LXNoYWRvdycpO1xuICBjb25zdCB0aGVtZVRleHRTaGFkb3cgPSBmcm9tVGhlbWUoJ3RleHQtc2hhZG93Jyk7XG4gIGNvbnN0IHRoZW1lRHJvcFNoYWRvdyA9IGZyb21UaGVtZSgnZHJvcC1zaGFkb3cnKTtcbiAgY29uc3QgdGhlbWVCbHVyID0gZnJvbVRoZW1lKCdibHVyJyk7XG4gIGNvbnN0IHRoZW1lUGVyc3BlY3RpdmUgPSBmcm9tVGhlbWUoJ3BlcnNwZWN0aXZlJyk7XG4gIGNvbnN0IHRoZW1lQXNwZWN0ID0gZnJvbVRoZW1lKCdhc3BlY3QnKTtcbiAgY29uc3QgdGhlbWVFYXNlID0gZnJvbVRoZW1lKCdlYXNlJyk7XG4gIGNvbnN0IHRoZW1lQW5pbWF0ZSA9IGZyb21UaGVtZSgnYW5pbWF0ZScpO1xuICAvKipcbiAgICogSGVscGVycyB0byBhdm9pZCByZXBlYXRpbmcgdGhlIHNhbWUgc2NhbGVzXG4gICAqXG4gICAqIFdlIHVzZSBmdW5jdGlvbnMgdGhhdCBjcmVhdGUgYSBuZXcgYXJyYXkgZXZlcnkgdGltZSB0aGV5J3JlIGNhbGxlZCBpbnN0ZWFkIG9mIHN0YXRpYyBhcnJheXMuXG4gICAqIFRoaXMgZW5zdXJlcyB0aGF0IHVzZXJzIHdobyBtb2RpZnkgYW55IHNjYWxlIGJ5IG11dGF0aW5nIHRoZSBhcnJheSAoZS5nLiB3aXRoIGBhcnJheS5wdXNoKGVsZW1lbnQpYCkgZG9uJ3QgYWNjaWRlbnRhbGx5IG11dGF0ZSBhcnJheXMgaW4gb3RoZXIgcGFydHMgb2YgdGhlIGNvbmZpZy5cbiAgICovXG4gIC8qKiovXG4gIGNvbnN0IHNjYWxlQnJlYWsgPSAoKSA9PiBbJ2F1dG8nLCAnYXZvaWQnLCAnYWxsJywgJ2F2b2lkLXBhZ2UnLCAncGFnZScsICdsZWZ0JywgJ3JpZ2h0JywgJ2NvbHVtbiddO1xuICBjb25zdCBzY2FsZVBvc2l0aW9uID0gKCkgPT4gWydjZW50ZXInLCAndG9wJywgJ2JvdHRvbScsICdsZWZ0JywgJ3JpZ2h0JywgJ3RvcC1sZWZ0JyxcbiAgLy8gRGVwcmVjYXRlZCBzaW5jZSBUYWlsd2luZCBDU1MgdjQuMS4wLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RhaWx3aW5kbGFicy90YWlsd2luZGNzcy9wdWxsLzE3Mzc4XG4gICdsZWZ0LXRvcCcsICd0b3AtcmlnaHQnLFxuICAvLyBEZXByZWNhdGVkIHNpbmNlIFRhaWx3aW5kIENTUyB2NC4xLjAsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGFpbHdpbmRsYWJzL3RhaWx3aW5kY3NzL3B1bGwvMTczNzhcbiAgJ3JpZ2h0LXRvcCcsICdib3R0b20tcmlnaHQnLFxuICAvLyBEZXByZWNhdGVkIHNpbmNlIFRhaWx3aW5kIENTUyB2NC4xLjAsIHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGFpbHdpbmRsYWJzL3RhaWx3aW5kY3NzL3B1bGwvMTczNzhcbiAgJ3JpZ2h0LWJvdHRvbScsICdib3R0b20tbGVmdCcsXG4gIC8vIERlcHJlY2F0ZWQgc2luY2UgVGFpbHdpbmQgQ1NTIHY0LjEuMCwgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90YWlsd2luZGxhYnMvdGFpbHdpbmRjc3MvcHVsbC8xNzM3OFxuICAnbGVmdC1ib3R0b20nXTtcbiAgY29uc3Qgc2NhbGVQb3NpdGlvbldpdGhBcmJpdHJhcnkgPSAoKSA9PiBbLi4uc2NhbGVQb3NpdGlvbigpLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXTtcbiAgY29uc3Qgc2NhbGVPdmVyZmxvdyA9ICgpID0+IFsnYXV0bycsICdoaWRkZW4nLCAnY2xpcCcsICd2aXNpYmxlJywgJ3Njcm9sbCddO1xuICBjb25zdCBzY2FsZU92ZXJzY3JvbGwgPSAoKSA9PiBbJ2F1dG8nLCAnY29udGFpbicsICdub25lJ107XG4gIGNvbnN0IHNjYWxlVW5hbWJpZ3VvdXNTcGFjaW5nID0gKCkgPT4gW2lzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWUsIHRoZW1lU3BhY2luZ107XG4gIGNvbnN0IHNjYWxlSW5zZXQgPSAoKSA9PiBbaXNGcmFjdGlvbiwgJ2Z1bGwnLCAnYXV0bycsIC4uLnNjYWxlVW5hbWJpZ3VvdXNTcGFjaW5nKCldO1xuICBjb25zdCBzY2FsZUdyaWRUZW1wbGF0ZUNvbHNSb3dzID0gKCkgPT4gW2lzSW50ZWdlciwgJ25vbmUnLCAnc3ViZ3JpZCcsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdO1xuICBjb25zdCBzY2FsZUdyaWRDb2xSb3dTdGFydEFuZEVuZCA9ICgpID0+IFsnYXV0bycsIHtcbiAgICBzcGFuOiBbJ2Z1bGwnLCBpc0ludGVnZXIsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdXG4gIH0sIGlzSW50ZWdlciwgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV07XG4gIGNvbnN0IHNjYWxlR3JpZENvbFJvd1N0YXJ0T3JFbmQgPSAoKSA9PiBbaXNJbnRlZ2VyLCAnYXV0bycsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdO1xuICBjb25zdCBzY2FsZUdyaWRBdXRvQ29sc1Jvd3MgPSAoKSA9PiBbJ2F1dG8nLCAnbWluJywgJ21heCcsICdmcicsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdO1xuICBjb25zdCBzY2FsZUFsaWduUHJpbWFyeUF4aXMgPSAoKSA9PiBbJ3N0YXJ0JywgJ2VuZCcsICdjZW50ZXInLCAnYmV0d2VlbicsICdhcm91bmQnLCAnZXZlbmx5JywgJ3N0cmV0Y2gnLCAnYmFzZWxpbmUnLCAnY2VudGVyLXNhZmUnLCAnZW5kLXNhZmUnXTtcbiAgY29uc3Qgc2NhbGVBbGlnblNlY29uZGFyeUF4aXMgPSAoKSA9PiBbJ3N0YXJ0JywgJ2VuZCcsICdjZW50ZXInLCAnc3RyZXRjaCcsICdjZW50ZXItc2FmZScsICdlbmQtc2FmZSddO1xuICBjb25zdCBzY2FsZU1hcmdpbiA9ICgpID0+IFsnYXV0bycsIC4uLnNjYWxlVW5hbWJpZ3VvdXNTcGFjaW5nKCldO1xuICBjb25zdCBzY2FsZVNpemluZyA9ICgpID0+IFtpc0ZyYWN0aW9uLCAnYXV0bycsICdmdWxsJywgJ2R2dycsICdkdmgnLCAnbHZ3JywgJ2x2aCcsICdzdncnLCAnc3ZoJywgJ21pbicsICdtYXgnLCAnZml0JywgLi4uc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKV07XG4gIGNvbnN0IHNjYWxlU2l6aW5nSW5saW5lID0gKCkgPT4gW2lzRnJhY3Rpb24sICdzY3JlZW4nLCAnZnVsbCcsICdkdncnLCAnbHZ3JywgJ3N2dycsICdtaW4nLCAnbWF4JywgJ2ZpdCcsIC4uLnNjYWxlVW5hbWJpZ3VvdXNTcGFjaW5nKCldO1xuICBjb25zdCBzY2FsZVNpemluZ0Jsb2NrID0gKCkgPT4gW2lzRnJhY3Rpb24sICdzY3JlZW4nLCAnZnVsbCcsICdsaCcsICdkdmgnLCAnbHZoJywgJ3N2aCcsICdtaW4nLCAnbWF4JywgJ2ZpdCcsIC4uLnNjYWxlVW5hbWJpZ3VvdXNTcGFjaW5nKCldO1xuICBjb25zdCBzY2FsZUNvbG9yID0gKCkgPT4gW3RoZW1lQ29sb3IsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdO1xuICBjb25zdCBzY2FsZUJnUG9zaXRpb24gPSAoKSA9PiBbLi4uc2NhbGVQb3NpdGlvbigpLCBpc0FyYml0cmFyeVZhcmlhYmxlUG9zaXRpb24sIGlzQXJiaXRyYXJ5UG9zaXRpb24sIHtcbiAgICBwb3NpdGlvbjogW2lzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdXG4gIH1dO1xuICBjb25zdCBzY2FsZUJnUmVwZWF0ID0gKCkgPT4gWyduby1yZXBlYXQnLCB7XG4gICAgcmVwZWF0OiBbJycsICd4JywgJ3knLCAnc3BhY2UnLCAncm91bmQnXVxuICB9XTtcbiAgY29uc3Qgc2NhbGVCZ1NpemUgPSAoKSA9PiBbJ2F1dG8nLCAnY292ZXInLCAnY29udGFpbicsIGlzQXJiaXRyYXJ5VmFyaWFibGVTaXplLCBpc0FyYml0cmFyeVNpemUsIHtcbiAgICBzaXplOiBbaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgfV07XG4gIGNvbnN0IHNjYWxlR3JhZGllbnRTdG9wUG9zaXRpb24gPSAoKSA9PiBbaXNQZXJjZW50LCBpc0FyYml0cmFyeVZhcmlhYmxlTGVuZ3RoLCBpc0FyYml0cmFyeUxlbmd0aF07XG4gIGNvbnN0IHNjYWxlUmFkaXVzID0gKCkgPT4gW1xuICAvLyBEZXByZWNhdGVkIHNpbmNlIFRhaWx3aW5kIENTUyB2NC4wLjBcbiAgJycsICdub25lJywgJ2Z1bGwnLCB0aGVtZVJhZGl1cywgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV07XG4gIGNvbnN0IHNjYWxlQm9yZGVyV2lkdGggPSAoKSA9PiBbJycsIGlzTnVtYmVyLCBpc0FyYml0cmFyeVZhcmlhYmxlTGVuZ3RoLCBpc0FyYml0cmFyeUxlbmd0aF07XG4gIGNvbnN0IHNjYWxlTGluZVN0eWxlID0gKCkgPT4gWydzb2xpZCcsICdkYXNoZWQnLCAnZG90dGVkJywgJ2RvdWJsZSddO1xuICBjb25zdCBzY2FsZUJsZW5kTW9kZSA9ICgpID0+IFsnbm9ybWFsJywgJ211bHRpcGx5JywgJ3NjcmVlbicsICdvdmVybGF5JywgJ2RhcmtlbicsICdsaWdodGVuJywgJ2NvbG9yLWRvZGdlJywgJ2NvbG9yLWJ1cm4nLCAnaGFyZC1saWdodCcsICdzb2Z0LWxpZ2h0JywgJ2RpZmZlcmVuY2UnLCAnZXhjbHVzaW9uJywgJ2h1ZScsICdzYXR1cmF0aW9uJywgJ2NvbG9yJywgJ2x1bWlub3NpdHknXTtcbiAgY29uc3Qgc2NhbGVNYXNrSW1hZ2VQb3NpdGlvbiA9ICgpID0+IFtpc051bWJlciwgaXNQZXJjZW50LCBpc0FyYml0cmFyeVZhcmlhYmxlUG9zaXRpb24sIGlzQXJiaXRyYXJ5UG9zaXRpb25dO1xuICBjb25zdCBzY2FsZUJsdXIgPSAoKSA9PiBbXG4gIC8vIERlcHJlY2F0ZWQgc2luY2UgVGFpbHdpbmQgQ1NTIHY0LjAuMFxuICAnJywgJ25vbmUnLCB0aGVtZUJsdXIsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdO1xuICBjb25zdCBzY2FsZVJvdGF0ZSA9ICgpID0+IFsnbm9uZScsIGlzTnVtYmVyLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXTtcbiAgY29uc3Qgc2NhbGVTY2FsZSA9ICgpID0+IFsnbm9uZScsIGlzTnVtYmVyLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXTtcbiAgY29uc3Qgc2NhbGVTa2V3ID0gKCkgPT4gW2lzTnVtYmVyLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXTtcbiAgY29uc3Qgc2NhbGVUcmFuc2xhdGUgPSAoKSA9PiBbaXNGcmFjdGlvbiwgJ2Z1bGwnLCAuLi5zY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXTtcbiAgcmV0dXJuIHtcbiAgICBjYWNoZVNpemU6IDUwMCxcbiAgICB0aGVtZToge1xuICAgICAgYW5pbWF0ZTogWydzcGluJywgJ3BpbmcnLCAncHVsc2UnLCAnYm91bmNlJ10sXG4gICAgICBhc3BlY3Q6IFsndmlkZW8nXSxcbiAgICAgIGJsdXI6IFtpc1RzaGlydFNpemVdLFxuICAgICAgYnJlYWtwb2ludDogW2lzVHNoaXJ0U2l6ZV0sXG4gICAgICBjb2xvcjogW2lzQW55XSxcbiAgICAgIGNvbnRhaW5lcjogW2lzVHNoaXJ0U2l6ZV0sXG4gICAgICAnZHJvcC1zaGFkb3cnOiBbaXNUc2hpcnRTaXplXSxcbiAgICAgIGVhc2U6IFsnaW4nLCAnb3V0JywgJ2luLW91dCddLFxuICAgICAgZm9udDogW2lzQW55Tm9uQXJiaXRyYXJ5XSxcbiAgICAgICdmb250LXdlaWdodCc6IFsndGhpbicsICdleHRyYWxpZ2h0JywgJ2xpZ2h0JywgJ25vcm1hbCcsICdtZWRpdW0nLCAnc2VtaWJvbGQnLCAnYm9sZCcsICdleHRyYWJvbGQnLCAnYmxhY2snXSxcbiAgICAgICdpbnNldC1zaGFkb3cnOiBbaXNUc2hpcnRTaXplXSxcbiAgICAgIGxlYWRpbmc6IFsnbm9uZScsICd0aWdodCcsICdzbnVnJywgJ25vcm1hbCcsICdyZWxheGVkJywgJ2xvb3NlJ10sXG4gICAgICBwZXJzcGVjdGl2ZTogWydkcmFtYXRpYycsICduZWFyJywgJ25vcm1hbCcsICdtaWRyYW5nZScsICdkaXN0YW50JywgJ25vbmUnXSxcbiAgICAgIHJhZGl1czogW2lzVHNoaXJ0U2l6ZV0sXG4gICAgICBzaGFkb3c6IFtpc1RzaGlydFNpemVdLFxuICAgICAgc3BhY2luZzogWydweCcsIGlzTnVtYmVyXSxcbiAgICAgIHRleHQ6IFtpc1RzaGlydFNpemVdLFxuICAgICAgJ3RleHQtc2hhZG93JzogW2lzVHNoaXJ0U2l6ZV0sXG4gICAgICB0cmFja2luZzogWyd0aWdodGVyJywgJ3RpZ2h0JywgJ25vcm1hbCcsICd3aWRlJywgJ3dpZGVyJywgJ3dpZGVzdCddXG4gICAgfSxcbiAgICBjbGFzc0dyb3Vwczoge1xuICAgICAgLy8gLS0tLS0tLS0tLS0tLS1cbiAgICAgIC8vIC0tLSBMYXlvdXQgLS0tXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLVxuICAgICAgLyoqXG4gICAgICAgKiBBc3BlY3QgUmF0aW9cbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9hc3BlY3QtcmF0aW9cbiAgICAgICAqL1xuICAgICAgYXNwZWN0OiBbe1xuICAgICAgICBhc3BlY3Q6IFsnYXV0bycsICdzcXVhcmUnLCBpc0ZyYWN0aW9uLCBpc0FyYml0cmFyeVZhbHVlLCBpc0FyYml0cmFyeVZhcmlhYmxlLCB0aGVtZUFzcGVjdF1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBDb250YWluZXJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9jb250YWluZXJcbiAgICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIFRhaWx3aW5kIENTUyB2NC4wLjBcbiAgICAgICAqL1xuICAgICAgY29udGFpbmVyOiBbJ2NvbnRhaW5lciddLFxuICAgICAgLyoqXG4gICAgICAgKiBDb2x1bW5zXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvY29sdW1uc1xuICAgICAgICovXG4gICAgICBjb2x1bW5zOiBbe1xuICAgICAgICBjb2x1bW5zOiBbaXNOdW1iZXIsIGlzQXJiaXRyYXJ5VmFsdWUsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIHRoZW1lQ29udGFpbmVyXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJyZWFrIEFmdGVyXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYnJlYWstYWZ0ZXJcbiAgICAgICAqL1xuICAgICAgJ2JyZWFrLWFmdGVyJzogW3tcbiAgICAgICAgJ2JyZWFrLWFmdGVyJzogc2NhbGVCcmVhaygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQnJlYWsgQmVmb3JlXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYnJlYWstYmVmb3JlXG4gICAgICAgKi9cbiAgICAgICdicmVhay1iZWZvcmUnOiBbe1xuICAgICAgICAnYnJlYWstYmVmb3JlJzogc2NhbGVCcmVhaygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQnJlYWsgSW5zaWRlXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYnJlYWstaW5zaWRlXG4gICAgICAgKi9cbiAgICAgICdicmVhay1pbnNpZGUnOiBbe1xuICAgICAgICAnYnJlYWstaW5zaWRlJzogWydhdXRvJywgJ2F2b2lkJywgJ2F2b2lkLXBhZ2UnLCAnYXZvaWQtY29sdW1uJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCb3ggRGVjb3JhdGlvbiBCcmVha1xuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JveC1kZWNvcmF0aW9uLWJyZWFrXG4gICAgICAgKi9cbiAgICAgICdib3gtZGVjb3JhdGlvbic6IFt7XG4gICAgICAgICdib3gtZGVjb3JhdGlvbic6IFsnc2xpY2UnLCAnY2xvbmUnXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJveCBTaXppbmdcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3gtc2l6aW5nXG4gICAgICAgKi9cbiAgICAgIGJveDogW3tcbiAgICAgICAgYm94OiBbJ2JvcmRlcicsICdjb250ZW50J11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBEaXNwbGF5XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZGlzcGxheVxuICAgICAgICovXG4gICAgICBkaXNwbGF5OiBbJ2Jsb2NrJywgJ2lubGluZS1ibG9jaycsICdpbmxpbmUnLCAnZmxleCcsICdpbmxpbmUtZmxleCcsICd0YWJsZScsICdpbmxpbmUtdGFibGUnLCAndGFibGUtY2FwdGlvbicsICd0YWJsZS1jZWxsJywgJ3RhYmxlLWNvbHVtbicsICd0YWJsZS1jb2x1bW4tZ3JvdXAnLCAndGFibGUtZm9vdGVyLWdyb3VwJywgJ3RhYmxlLWhlYWRlci1ncm91cCcsICd0YWJsZS1yb3ctZ3JvdXAnLCAndGFibGUtcm93JywgJ2Zsb3ctcm9vdCcsICdncmlkJywgJ2lubGluZS1ncmlkJywgJ2NvbnRlbnRzJywgJ2xpc3QtaXRlbScsICdoaWRkZW4nXSxcbiAgICAgIC8qKlxuICAgICAgICogU2NyZWVuIFJlYWRlciBPbmx5XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZGlzcGxheSNzY3JlZW4tcmVhZGVyLW9ubHlcbiAgICAgICAqL1xuICAgICAgc3I6IFsnc3Itb25seScsICdub3Qtc3Itb25seSddLFxuICAgICAgLyoqXG4gICAgICAgKiBGbG9hdHNcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9mbG9hdFxuICAgICAgICovXG4gICAgICBmbG9hdDogW3tcbiAgICAgICAgZmxvYXQ6IFsncmlnaHQnLCAnbGVmdCcsICdub25lJywgJ3N0YXJ0JywgJ2VuZCddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQ2xlYXJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9jbGVhclxuICAgICAgICovXG4gICAgICBjbGVhcjogW3tcbiAgICAgICAgY2xlYXI6IFsnbGVmdCcsICdyaWdodCcsICdib3RoJywgJ25vbmUnLCAnc3RhcnQnLCAnZW5kJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBJc29sYXRpb25cbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9pc29sYXRpb25cbiAgICAgICAqL1xuICAgICAgaXNvbGF0aW9uOiBbJ2lzb2xhdGUnLCAnaXNvbGF0aW9uLWF1dG8nXSxcbiAgICAgIC8qKlxuICAgICAgICogT2JqZWN0IEZpdFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL29iamVjdC1maXRcbiAgICAgICAqL1xuICAgICAgJ29iamVjdC1maXQnOiBbe1xuICAgICAgICBvYmplY3Q6IFsnY29udGFpbicsICdjb3ZlcicsICdmaWxsJywgJ25vbmUnLCAnc2NhbGUtZG93biddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogT2JqZWN0IFBvc2l0aW9uXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb2JqZWN0LXBvc2l0aW9uXG4gICAgICAgKi9cbiAgICAgICdvYmplY3QtcG9zaXRpb24nOiBbe1xuICAgICAgICBvYmplY3Q6IHNjYWxlUG9zaXRpb25XaXRoQXJiaXRyYXJ5KClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBPdmVyZmxvd1xuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL292ZXJmbG93XG4gICAgICAgKi9cbiAgICAgIG92ZXJmbG93OiBbe1xuICAgICAgICBvdmVyZmxvdzogc2NhbGVPdmVyZmxvdygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogT3ZlcmZsb3cgWFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL292ZXJmbG93XG4gICAgICAgKi9cbiAgICAgICdvdmVyZmxvdy14JzogW3tcbiAgICAgICAgJ292ZXJmbG93LXgnOiBzY2FsZU92ZXJmbG93KClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBPdmVyZmxvdyBZXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb3ZlcmZsb3dcbiAgICAgICAqL1xuICAgICAgJ292ZXJmbG93LXknOiBbe1xuICAgICAgICAnb3ZlcmZsb3cteSc6IHNjYWxlT3ZlcmZsb3coKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIE92ZXJzY3JvbGwgQmVoYXZpb3JcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9vdmVyc2Nyb2xsLWJlaGF2aW9yXG4gICAgICAgKi9cbiAgICAgIG92ZXJzY3JvbGw6IFt7XG4gICAgICAgIG92ZXJzY3JvbGw6IHNjYWxlT3ZlcnNjcm9sbCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogT3ZlcnNjcm9sbCBCZWhhdmlvciBYXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb3ZlcnNjcm9sbC1iZWhhdmlvclxuICAgICAgICovXG4gICAgICAnb3ZlcnNjcm9sbC14JzogW3tcbiAgICAgICAgJ292ZXJzY3JvbGwteCc6IHNjYWxlT3ZlcnNjcm9sbCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogT3ZlcnNjcm9sbCBCZWhhdmlvciBZXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb3ZlcnNjcm9sbC1iZWhhdmlvclxuICAgICAgICovXG4gICAgICAnb3ZlcnNjcm9sbC15JzogW3tcbiAgICAgICAgJ292ZXJzY3JvbGwteSc6IHNjYWxlT3ZlcnNjcm9sbCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogUG9zaXRpb25cbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wb3NpdGlvblxuICAgICAgICovXG4gICAgICBwb3NpdGlvbjogWydzdGF0aWMnLCAnZml4ZWQnLCAnYWJzb2x1dGUnLCAncmVsYXRpdmUnLCAnc3RpY2t5J10sXG4gICAgICAvKipcbiAgICAgICAqIEluc2V0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XG4gICAgICAgKi9cbiAgICAgIGluc2V0OiBbe1xuICAgICAgICBpbnNldDogc2NhbGVJbnNldCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogSW5zZXQgSW5saW5lXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XG4gICAgICAgKi9cbiAgICAgICdpbnNldC14JzogW3tcbiAgICAgICAgJ2luc2V0LXgnOiBzY2FsZUluc2V0KClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBJbnNldCBCbG9ja1xuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RvcC1yaWdodC1ib3R0b20tbGVmdFxuICAgICAgICovXG4gICAgICAnaW5zZXQteSc6IFt7XG4gICAgICAgICdpbnNldC15Jzogc2NhbGVJbnNldCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogSW5zZXQgSW5saW5lIFN0YXJ0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XG4gICAgICAgKiBAdG9kbyBjbGFzcyBncm91cCB3aWxsIGJlIHJlbmFtZWQgdG8gYGluc2V0LXNgIGluIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgICAgICovXG4gICAgICBzdGFydDogW3tcbiAgICAgICAgJ2luc2V0LXMnOiBzY2FsZUluc2V0KCksXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVwcmVjYXRlZCBzaW5jZSBUYWlsd2luZCBDU1MgdjQuMi4wIGluIGZhdm9yIG9mIGBpbnNldC1zLSpgIHV0aWxpdGllcy5cbiAgICAgICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGFpbHdpbmRsYWJzL3RhaWx3aW5kY3NzL3B1bGwvMTk2MTNcbiAgICAgICAgICovXG4gICAgICAgIHN0YXJ0OiBzY2FsZUluc2V0KClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBJbnNldCBJbmxpbmUgRW5kXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XG4gICAgICAgKiBAdG9kbyBjbGFzcyBncm91cCB3aWxsIGJlIHJlbmFtZWQgdG8gYGluc2V0LWVgIGluIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgICAgICovXG4gICAgICBlbmQ6IFt7XG4gICAgICAgICdpbnNldC1lJzogc2NhbGVJbnNldCgpLFxuICAgICAgICAvKipcbiAgICAgICAgICogQGRlcHJlY2F0ZWQgc2luY2UgVGFpbHdpbmQgQ1NTIHY0LjIuMCBpbiBmYXZvciBvZiBgaW5zZXQtZS0qYCB1dGlsaXRpZXMuXG4gICAgICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RhaWx3aW5kbGFicy90YWlsd2luZGNzcy9wdWxsLzE5NjEzXG4gICAgICAgICAqL1xuICAgICAgICBlbmQ6IHNjYWxlSW5zZXQoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEluc2V0IEJsb2NrIFN0YXJ0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XG4gICAgICAgKi9cbiAgICAgICdpbnNldC1icyc6IFt7XG4gICAgICAgICdpbnNldC1icyc6IHNjYWxlSW5zZXQoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEluc2V0IEJsb2NrIEVuZFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RvcC1yaWdodC1ib3R0b20tbGVmdFxuICAgICAgICovXG4gICAgICAnaW5zZXQtYmUnOiBbe1xuICAgICAgICAnaW5zZXQtYmUnOiBzY2FsZUluc2V0KClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBUb3BcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90b3AtcmlnaHQtYm90dG9tLWxlZnRcbiAgICAgICAqL1xuICAgICAgdG9wOiBbe1xuICAgICAgICB0b3A6IHNjYWxlSW5zZXQoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFJpZ2h0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XG4gICAgICAgKi9cbiAgICAgIHJpZ2h0OiBbe1xuICAgICAgICByaWdodDogc2NhbGVJbnNldCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm90dG9tXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XG4gICAgICAgKi9cbiAgICAgIGJvdHRvbTogW3tcbiAgICAgICAgYm90dG9tOiBzY2FsZUluc2V0KClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBMZWZ0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG9wLXJpZ2h0LWJvdHRvbS1sZWZ0XG4gICAgICAgKi9cbiAgICAgIGxlZnQ6IFt7XG4gICAgICAgIGxlZnQ6IHNjYWxlSW5zZXQoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFZpc2liaWxpdHlcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy92aXNpYmlsaXR5XG4gICAgICAgKi9cbiAgICAgIHZpc2liaWxpdHk6IFsndmlzaWJsZScsICdpbnZpc2libGUnLCAnY29sbGFwc2UnXSxcbiAgICAgIC8qKlxuICAgICAgICogWi1JbmRleFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3otaW5kZXhcbiAgICAgICAqL1xuICAgICAgejogW3tcbiAgICAgICAgejogW2lzSW50ZWdlciwgJ2F1dG8nLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgIC8vIC0tLSBGbGV4Ym94IGFuZCBHcmlkIC0tLVxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAvKipcbiAgICAgICAqIEZsZXggQmFzaXNcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9mbGV4LWJhc2lzXG4gICAgICAgKi9cbiAgICAgIGJhc2lzOiBbe1xuICAgICAgICBiYXNpczogW2lzRnJhY3Rpb24sICdmdWxsJywgJ2F1dG8nLCB0aGVtZUNvbnRhaW5lciwgLi4uc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBGbGV4IERpcmVjdGlvblxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZsZXgtZGlyZWN0aW9uXG4gICAgICAgKi9cbiAgICAgICdmbGV4LWRpcmVjdGlvbic6IFt7XG4gICAgICAgIGZsZXg6IFsncm93JywgJ3Jvdy1yZXZlcnNlJywgJ2NvbCcsICdjb2wtcmV2ZXJzZSddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogRmxleCBXcmFwXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZmxleC13cmFwXG4gICAgICAgKi9cbiAgICAgICdmbGV4LXdyYXAnOiBbe1xuICAgICAgICBmbGV4OiBbJ25vd3JhcCcsICd3cmFwJywgJ3dyYXAtcmV2ZXJzZSddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogRmxleFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZsZXhcbiAgICAgICAqL1xuICAgICAgZmxleDogW3tcbiAgICAgICAgZmxleDogW2lzTnVtYmVyLCBpc0ZyYWN0aW9uLCAnYXV0bycsICdpbml0aWFsJywgJ25vbmUnLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEZsZXggR3Jvd1xuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZsZXgtZ3Jvd1xuICAgICAgICovXG4gICAgICBncm93OiBbe1xuICAgICAgICBncm93OiBbJycsIGlzTnVtYmVyLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEZsZXggU2hyaW5rXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZmxleC1zaHJpbmtcbiAgICAgICAqL1xuICAgICAgc2hyaW5rOiBbe1xuICAgICAgICBzaHJpbms6IFsnJywgaXNOdW1iZXIsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogT3JkZXJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9vcmRlclxuICAgICAgICovXG4gICAgICBvcmRlcjogW3tcbiAgICAgICAgb3JkZXI6IFtpc0ludGVnZXIsICdmaXJzdCcsICdsYXN0JywgJ25vbmUnLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEdyaWQgVGVtcGxhdGUgQ29sdW1uc1xuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyaWQtdGVtcGxhdGUtY29sdW1uc1xuICAgICAgICovXG4gICAgICAnZ3JpZC1jb2xzJzogW3tcbiAgICAgICAgJ2dyaWQtY29scyc6IHNjYWxlR3JpZFRlbXBsYXRlQ29sc1Jvd3MoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEdyaWQgQ29sdW1uIFN0YXJ0IC8gRW5kXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ3JpZC1jb2x1bW5cbiAgICAgICAqL1xuICAgICAgJ2NvbC1zdGFydC1lbmQnOiBbe1xuICAgICAgICBjb2w6IHNjYWxlR3JpZENvbFJvd1N0YXJ0QW5kRW5kKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBHcmlkIENvbHVtbiBTdGFydFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyaWQtY29sdW1uXG4gICAgICAgKi9cbiAgICAgICdjb2wtc3RhcnQnOiBbe1xuICAgICAgICAnY29sLXN0YXJ0Jzogc2NhbGVHcmlkQ29sUm93U3RhcnRPckVuZCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogR3JpZCBDb2x1bW4gRW5kXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ3JpZC1jb2x1bW5cbiAgICAgICAqL1xuICAgICAgJ2NvbC1lbmQnOiBbe1xuICAgICAgICAnY29sLWVuZCc6IHNjYWxlR3JpZENvbFJvd1N0YXJ0T3JFbmQoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEdyaWQgVGVtcGxhdGUgUm93c1xuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyaWQtdGVtcGxhdGUtcm93c1xuICAgICAgICovXG4gICAgICAnZ3JpZC1yb3dzJzogW3tcbiAgICAgICAgJ2dyaWQtcm93cyc6IHNjYWxlR3JpZFRlbXBsYXRlQ29sc1Jvd3MoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEdyaWQgUm93IFN0YXJ0IC8gRW5kXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ3JpZC1yb3dcbiAgICAgICAqL1xuICAgICAgJ3Jvdy1zdGFydC1lbmQnOiBbe1xuICAgICAgICByb3c6IHNjYWxlR3JpZENvbFJvd1N0YXJ0QW5kRW5kKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBHcmlkIFJvdyBTdGFydFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyaWQtcm93XG4gICAgICAgKi9cbiAgICAgICdyb3ctc3RhcnQnOiBbe1xuICAgICAgICAncm93LXN0YXJ0Jzogc2NhbGVHcmlkQ29sUm93U3RhcnRPckVuZCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogR3JpZCBSb3cgRW5kXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ3JpZC1yb3dcbiAgICAgICAqL1xuICAgICAgJ3Jvdy1lbmQnOiBbe1xuICAgICAgICAncm93LWVuZCc6IHNjYWxlR3JpZENvbFJvd1N0YXJ0T3JFbmQoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEdyaWQgQXV0byBGbG93XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ3JpZC1hdXRvLWZsb3dcbiAgICAgICAqL1xuICAgICAgJ2dyaWQtZmxvdyc6IFt7XG4gICAgICAgICdncmlkLWZsb3cnOiBbJ3JvdycsICdjb2wnLCAnZGVuc2UnLCAncm93LWRlbnNlJywgJ2NvbC1kZW5zZSddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogR3JpZCBBdXRvIENvbHVtbnNcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmlkLWF1dG8tY29sdW1uc1xuICAgICAgICovXG4gICAgICAnYXV0by1jb2xzJzogW3tcbiAgICAgICAgJ2F1dG8tY29scyc6IHNjYWxlR3JpZEF1dG9Db2xzUm93cygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogR3JpZCBBdXRvIFJvd3NcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmlkLWF1dG8tcm93c1xuICAgICAgICovXG4gICAgICAnYXV0by1yb3dzJzogW3tcbiAgICAgICAgJ2F1dG8tcm93cyc6IHNjYWxlR3JpZEF1dG9Db2xzUm93cygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogR2FwXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ2FwXG4gICAgICAgKi9cbiAgICAgIGdhcDogW3tcbiAgICAgICAgZ2FwOiBzY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogR2FwIFhcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9nYXBcbiAgICAgICAqL1xuICAgICAgJ2dhcC14JzogW3tcbiAgICAgICAgJ2dhcC14Jzogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEdhcCBZXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ2FwXG4gICAgICAgKi9cbiAgICAgICdnYXAteSc6IFt7XG4gICAgICAgICdnYXAteSc6IHNjYWxlVW5hbWJpZ3VvdXNTcGFjaW5nKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBKdXN0aWZ5IENvbnRlbnRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9qdXN0aWZ5LWNvbnRlbnRcbiAgICAgICAqL1xuICAgICAgJ2p1c3RpZnktY29udGVudCc6IFt7XG4gICAgICAgIGp1c3RpZnk6IFsuLi5zY2FsZUFsaWduUHJpbWFyeUF4aXMoKSwgJ25vcm1hbCddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogSnVzdGlmeSBJdGVtc1xuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2p1c3RpZnktaXRlbXNcbiAgICAgICAqL1xuICAgICAgJ2p1c3RpZnktaXRlbXMnOiBbe1xuICAgICAgICAnanVzdGlmeS1pdGVtcyc6IFsuLi5zY2FsZUFsaWduU2Vjb25kYXJ5QXhpcygpLCAnbm9ybWFsJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBKdXN0aWZ5IFNlbGZcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9qdXN0aWZ5LXNlbGZcbiAgICAgICAqL1xuICAgICAgJ2p1c3RpZnktc2VsZic6IFt7XG4gICAgICAgICdqdXN0aWZ5LXNlbGYnOiBbJ2F1dG8nLCAuLi5zY2FsZUFsaWduU2Vjb25kYXJ5QXhpcygpXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEFsaWduIENvbnRlbnRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9hbGlnbi1jb250ZW50XG4gICAgICAgKi9cbiAgICAgICdhbGlnbi1jb250ZW50JzogW3tcbiAgICAgICAgY29udGVudDogWydub3JtYWwnLCAuLi5zY2FsZUFsaWduUHJpbWFyeUF4aXMoKV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBBbGlnbiBJdGVtc1xuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2FsaWduLWl0ZW1zXG4gICAgICAgKi9cbiAgICAgICdhbGlnbi1pdGVtcyc6IFt7XG4gICAgICAgIGl0ZW1zOiBbLi4uc2NhbGVBbGlnblNlY29uZGFyeUF4aXMoKSwge1xuICAgICAgICAgIGJhc2VsaW5lOiBbJycsICdsYXN0J11cbiAgICAgICAgfV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBBbGlnbiBTZWxmXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYWxpZ24tc2VsZlxuICAgICAgICovXG4gICAgICAnYWxpZ24tc2VsZic6IFt7XG4gICAgICAgIHNlbGY6IFsnYXV0bycsIC4uLnNjYWxlQWxpZ25TZWNvbmRhcnlBeGlzKCksIHtcbiAgICAgICAgICBiYXNlbGluZTogWycnLCAnbGFzdCddXG4gICAgICAgIH1dXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogUGxhY2UgQ29udGVudFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3BsYWNlLWNvbnRlbnRcbiAgICAgICAqL1xuICAgICAgJ3BsYWNlLWNvbnRlbnQnOiBbe1xuICAgICAgICAncGxhY2UtY29udGVudCc6IHNjYWxlQWxpZ25QcmltYXJ5QXhpcygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogUGxhY2UgSXRlbXNcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wbGFjZS1pdGVtc1xuICAgICAgICovXG4gICAgICAncGxhY2UtaXRlbXMnOiBbe1xuICAgICAgICAncGxhY2UtaXRlbXMnOiBbLi4uc2NhbGVBbGlnblNlY29uZGFyeUF4aXMoKSwgJ2Jhc2VsaW5lJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBQbGFjZSBTZWxmXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcGxhY2Utc2VsZlxuICAgICAgICovXG4gICAgICAncGxhY2Utc2VsZic6IFt7XG4gICAgICAgICdwbGFjZS1zZWxmJzogWydhdXRvJywgLi4uc2NhbGVBbGlnblNlY29uZGFyeUF4aXMoKV1cbiAgICAgIH1dLFxuICAgICAgLy8gU3BhY2luZ1xuICAgICAgLyoqXG4gICAgICAgKiBQYWRkaW5nXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcGFkZGluZ1xuICAgICAgICovXG4gICAgICBwOiBbe1xuICAgICAgICBwOiBzY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogUGFkZGluZyBJbmxpbmVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wYWRkaW5nXG4gICAgICAgKi9cbiAgICAgIHB4OiBbe1xuICAgICAgICBweDogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFBhZGRpbmcgQmxvY2tcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wYWRkaW5nXG4gICAgICAgKi9cbiAgICAgIHB5OiBbe1xuICAgICAgICBweTogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFBhZGRpbmcgSW5saW5lIFN0YXJ0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcGFkZGluZ1xuICAgICAgICovXG4gICAgICBwczogW3tcbiAgICAgICAgcHM6IHNjYWxlVW5hbWJpZ3VvdXNTcGFjaW5nKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBQYWRkaW5nIElubGluZSBFbmRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wYWRkaW5nXG4gICAgICAgKi9cbiAgICAgIHBlOiBbe1xuICAgICAgICBwZTogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFBhZGRpbmcgQmxvY2sgU3RhcnRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wYWRkaW5nXG4gICAgICAgKi9cbiAgICAgIHBiczogW3tcbiAgICAgICAgcGJzOiBzY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogUGFkZGluZyBCbG9jayBFbmRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wYWRkaW5nXG4gICAgICAgKi9cbiAgICAgIHBiZTogW3tcbiAgICAgICAgcGJlOiBzY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogUGFkZGluZyBUb3BcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wYWRkaW5nXG4gICAgICAgKi9cbiAgICAgIHB0OiBbe1xuICAgICAgICBwdDogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFBhZGRpbmcgUmlnaHRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wYWRkaW5nXG4gICAgICAgKi9cbiAgICAgIHByOiBbe1xuICAgICAgICBwcjogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFBhZGRpbmcgQm90dG9tXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcGFkZGluZ1xuICAgICAgICovXG4gICAgICBwYjogW3tcbiAgICAgICAgcGI6IHNjYWxlVW5hbWJpZ3VvdXNTcGFjaW5nKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBQYWRkaW5nIExlZnRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wYWRkaW5nXG4gICAgICAgKi9cbiAgICAgIHBsOiBbe1xuICAgICAgICBwbDogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIE1hcmdpblxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpblxuICAgICAgICovXG4gICAgICBtOiBbe1xuICAgICAgICBtOiBzY2FsZU1hcmdpbigpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWFyZ2luIElubGluZVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpblxuICAgICAgICovXG4gICAgICBteDogW3tcbiAgICAgICAgbXg6IHNjYWxlTWFyZ2luKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBNYXJnaW4gQmxvY2tcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9tYXJnaW5cbiAgICAgICAqL1xuICAgICAgbXk6IFt7XG4gICAgICAgIG15OiBzY2FsZU1hcmdpbigpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWFyZ2luIElubGluZSBTdGFydFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpblxuICAgICAgICovXG4gICAgICBtczogW3tcbiAgICAgICAgbXM6IHNjYWxlTWFyZ2luKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBNYXJnaW4gSW5saW5lIEVuZFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpblxuICAgICAgICovXG4gICAgICBtZTogW3tcbiAgICAgICAgbWU6IHNjYWxlTWFyZ2luKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBNYXJnaW4gQmxvY2sgU3RhcnRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9tYXJnaW5cbiAgICAgICAqL1xuICAgICAgbWJzOiBbe1xuICAgICAgICBtYnM6IHNjYWxlTWFyZ2luKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBNYXJnaW4gQmxvY2sgRW5kXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWFyZ2luXG4gICAgICAgKi9cbiAgICAgIG1iZTogW3tcbiAgICAgICAgbWJlOiBzY2FsZU1hcmdpbigpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWFyZ2luIFRvcFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpblxuICAgICAgICovXG4gICAgICBtdDogW3tcbiAgICAgICAgbXQ6IHNjYWxlTWFyZ2luKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBNYXJnaW4gUmlnaHRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9tYXJnaW5cbiAgICAgICAqL1xuICAgICAgbXI6IFt7XG4gICAgICAgIG1yOiBzY2FsZU1hcmdpbigpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWFyZ2luIEJvdHRvbVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpblxuICAgICAgICovXG4gICAgICBtYjogW3tcbiAgICAgICAgbWI6IHNjYWxlTWFyZ2luKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBNYXJnaW4gTGVmdFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpblxuICAgICAgICovXG4gICAgICBtbDogW3tcbiAgICAgICAgbWw6IHNjYWxlTWFyZ2luKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBTcGFjZSBCZXR3ZWVuIFhcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9tYXJnaW4jYWRkaW5nLXNwYWNlLWJldHdlZW4tY2hpbGRyZW5cbiAgICAgICAqL1xuICAgICAgJ3NwYWNlLXgnOiBbe1xuICAgICAgICAnc3BhY2UteCc6IHNjYWxlVW5hbWJpZ3VvdXNTcGFjaW5nKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBTcGFjZSBCZXR3ZWVuIFggUmV2ZXJzZVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hcmdpbiNhZGRpbmctc3BhY2UtYmV0d2Vlbi1jaGlsZHJlblxuICAgICAgICovXG4gICAgICAnc3BhY2UteC1yZXZlcnNlJzogWydzcGFjZS14LXJldmVyc2UnXSxcbiAgICAgIC8qKlxuICAgICAgICogU3BhY2UgQmV0d2VlbiBZXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWFyZ2luI2FkZGluZy1zcGFjZS1iZXR3ZWVuLWNoaWxkcmVuXG4gICAgICAgKi9cbiAgICAgICdzcGFjZS15JzogW3tcbiAgICAgICAgJ3NwYWNlLXknOiBzY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU3BhY2UgQmV0d2VlbiBZIFJldmVyc2VcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9tYXJnaW4jYWRkaW5nLXNwYWNlLWJldHdlZW4tY2hpbGRyZW5cbiAgICAgICAqL1xuICAgICAgJ3NwYWNlLXktcmV2ZXJzZSc6IFsnc3BhY2UteS1yZXZlcnNlJ10sXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLVxuICAgICAgLy8gLS0tIFNpemluZyAtLS1cbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tXG4gICAgICAvKipcbiAgICAgICAqIFNpemVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy93aWR0aCNzZXR0aW5nLWJvdGgtd2lkdGgtYW5kLWhlaWdodFxuICAgICAgICovXG4gICAgICBzaXplOiBbe1xuICAgICAgICBzaXplOiBzY2FsZVNpemluZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogSW5saW5lIFNpemVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy93aWR0aFxuICAgICAgICovXG4gICAgICAnaW5saW5lLXNpemUnOiBbe1xuICAgICAgICBpbmxpbmU6IFsnYXV0bycsIC4uLnNjYWxlU2l6aW5nSW5saW5lKCldXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWluLUlubGluZSBTaXplXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWluLXdpZHRoXG4gICAgICAgKi9cbiAgICAgICdtaW4taW5saW5lLXNpemUnOiBbe1xuICAgICAgICAnbWluLWlubGluZSc6IFsnYXV0bycsIC4uLnNjYWxlU2l6aW5nSW5saW5lKCldXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWF4LUlubGluZSBTaXplXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWF4LXdpZHRoXG4gICAgICAgKi9cbiAgICAgICdtYXgtaW5saW5lLXNpemUnOiBbe1xuICAgICAgICAnbWF4LWlubGluZSc6IFsnbm9uZScsIC4uLnNjYWxlU2l6aW5nSW5saW5lKCldXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQmxvY2sgU2l6ZVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2hlaWdodFxuICAgICAgICovXG4gICAgICAnYmxvY2stc2l6ZSc6IFt7XG4gICAgICAgIGJsb2NrOiBbJ2F1dG8nLCAuLi5zY2FsZVNpemluZ0Jsb2NrKCldXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWluLUJsb2NrIFNpemVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9taW4taGVpZ2h0XG4gICAgICAgKi9cbiAgICAgICdtaW4tYmxvY2stc2l6ZSc6IFt7XG4gICAgICAgICdtaW4tYmxvY2snOiBbJ2F1dG8nLCAuLi5zY2FsZVNpemluZ0Jsb2NrKCldXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWF4LUJsb2NrIFNpemVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9tYXgtaGVpZ2h0XG4gICAgICAgKi9cbiAgICAgICdtYXgtYmxvY2stc2l6ZSc6IFt7XG4gICAgICAgICdtYXgtYmxvY2snOiBbJ25vbmUnLCAuLi5zY2FsZVNpemluZ0Jsb2NrKCldXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogV2lkdGhcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy93aWR0aFxuICAgICAgICovXG4gICAgICB3OiBbe1xuICAgICAgICB3OiBbdGhlbWVDb250YWluZXIsICdzY3JlZW4nLCAuLi5zY2FsZVNpemluZygpXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIE1pbi1XaWR0aFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21pbi13aWR0aFxuICAgICAgICovXG4gICAgICAnbWluLXcnOiBbe1xuICAgICAgICAnbWluLXcnOiBbdGhlbWVDb250YWluZXIsICdzY3JlZW4nLCAvKiogRGVwcmVjYXRlZC4gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGFpbHdpbmRsYWJzL3RhaWx3aW5kY3NzLmNvbS9pc3N1ZXMvMjAyNyNpc3N1ZWNvbW1lbnQtMjYyMDE1Mjc1NyAqL1xuICAgICAgICAnbm9uZScsIC4uLnNjYWxlU2l6aW5nKCldXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWF4LVdpZHRoXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWF4LXdpZHRoXG4gICAgICAgKi9cbiAgICAgICdtYXgtdyc6IFt7XG4gICAgICAgICdtYXgtdyc6IFt0aGVtZUNvbnRhaW5lciwgJ3NjcmVlbicsICdub25lJywgLyoqIERlcHJlY2F0ZWQgc2luY2UgVGFpbHdpbmQgQ1NTIHY0LjAuMC4gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGFpbHdpbmRsYWJzL3RhaWx3aW5kY3NzLmNvbS9pc3N1ZXMvMjAyNyNpc3N1ZWNvbW1lbnQtMjYyMDE1Mjc1NyAqL1xuICAgICAgICAncHJvc2UnLCAvKiogRGVwcmVjYXRlZCBzaW5jZSBUYWlsd2luZCBDU1MgdjQuMC4wLiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90YWlsd2luZGxhYnMvdGFpbHdpbmRjc3MuY29tL2lzc3Vlcy8yMDI3I2lzc3VlY29tbWVudC0yNjIwMTUyNzU3ICovXG4gICAgICAgIHtcbiAgICAgICAgICBzY3JlZW46IFt0aGVtZUJyZWFrcG9pbnRdXG4gICAgICAgIH0sIC4uLnNjYWxlU2l6aW5nKCldXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogSGVpZ2h0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvaGVpZ2h0XG4gICAgICAgKi9cbiAgICAgIGg6IFt7XG4gICAgICAgIGg6IFsnc2NyZWVuJywgJ2xoJywgLi4uc2NhbGVTaXppbmcoKV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBNaW4tSGVpZ2h0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWluLWhlaWdodFxuICAgICAgICovXG4gICAgICAnbWluLWgnOiBbe1xuICAgICAgICAnbWluLWgnOiBbJ3NjcmVlbicsICdsaCcsICdub25lJywgLi4uc2NhbGVTaXppbmcoKV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBNYXgtSGVpZ2h0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWF4LWhlaWdodFxuICAgICAgICovXG4gICAgICAnbWF4LWgnOiBbe1xuICAgICAgICAnbWF4LWgnOiBbJ3NjcmVlbicsICdsaCcsIC4uLnNjYWxlU2l6aW5nKCldXG4gICAgICB9XSxcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgLy8gLS0tIFR5cG9ncmFwaHkgLS0tXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgIC8qKlxuICAgICAgICogRm9udCBTaXplXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZm9udC1zaXplXG4gICAgICAgKi9cbiAgICAgICdmb250LXNpemUnOiBbe1xuICAgICAgICB0ZXh0OiBbJ2Jhc2UnLCB0aGVtZVRleHQsIGlzQXJiaXRyYXJ5VmFyaWFibGVMZW5ndGgsIGlzQXJiaXRyYXJ5TGVuZ3RoXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEZvbnQgU21vb3RoaW5nXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZm9udC1zbW9vdGhpbmdcbiAgICAgICAqL1xuICAgICAgJ2ZvbnQtc21vb3RoaW5nJzogWydhbnRpYWxpYXNlZCcsICdzdWJwaXhlbC1hbnRpYWxpYXNlZCddLFxuICAgICAgLyoqXG4gICAgICAgKiBGb250IFN0eWxlXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZm9udC1zdHlsZVxuICAgICAgICovXG4gICAgICAnZm9udC1zdHlsZSc6IFsnaXRhbGljJywgJ25vdC1pdGFsaWMnXSxcbiAgICAgIC8qKlxuICAgICAgICogRm9udCBXZWlnaHRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9mb250LXdlaWdodFxuICAgICAgICovXG4gICAgICAnZm9udC13ZWlnaHQnOiBbe1xuICAgICAgICBmb250OiBbdGhlbWVGb250V2VpZ2h0LCBpc0FyYml0cmFyeVZhcmlhYmxlV2VpZ2h0LCBpc0FyYml0cmFyeVdlaWdodF1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBGb250IFN0cmV0Y2hcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9mb250LXN0cmV0Y2hcbiAgICAgICAqL1xuICAgICAgJ2ZvbnQtc3RyZXRjaCc6IFt7XG4gICAgICAgICdmb250LXN0cmV0Y2gnOiBbJ3VsdHJhLWNvbmRlbnNlZCcsICdleHRyYS1jb25kZW5zZWQnLCAnY29uZGVuc2VkJywgJ3NlbWktY29uZGVuc2VkJywgJ25vcm1hbCcsICdzZW1pLWV4cGFuZGVkJywgJ2V4cGFuZGVkJywgJ2V4dHJhLWV4cGFuZGVkJywgJ3VsdHJhLWV4cGFuZGVkJywgaXNQZXJjZW50LCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEZvbnQgRmFtaWx5XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZm9udC1mYW1pbHlcbiAgICAgICAqL1xuICAgICAgJ2ZvbnQtZmFtaWx5JzogW3tcbiAgICAgICAgZm9udDogW2lzQXJiaXRyYXJ5VmFyaWFibGVGYW1pbHlOYW1lLCBpc0FyYml0cmFyeUZhbWlseU5hbWUsIHRoZW1lRm9udF1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBGb250IEZlYXR1cmUgU2V0dGluZ3NcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9mb250LWZlYXR1cmUtc2V0dGluZ3NcbiAgICAgICAqL1xuICAgICAgJ2ZvbnQtZmVhdHVyZXMnOiBbe1xuICAgICAgICAnZm9udC1mZWF0dXJlcyc6IFtpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEZvbnQgVmFyaWFudCBOdW1lcmljXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZm9udC12YXJpYW50LW51bWVyaWNcbiAgICAgICAqL1xuICAgICAgJ2Z2bi1ub3JtYWwnOiBbJ25vcm1hbC1udW1zJ10sXG4gICAgICAvKipcbiAgICAgICAqIEZvbnQgVmFyaWFudCBOdW1lcmljXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZm9udC12YXJpYW50LW51bWVyaWNcbiAgICAgICAqL1xuICAgICAgJ2Z2bi1vcmRpbmFsJzogWydvcmRpbmFsJ10sXG4gICAgICAvKipcbiAgICAgICAqIEZvbnQgVmFyaWFudCBOdW1lcmljXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZm9udC12YXJpYW50LW51bWVyaWNcbiAgICAgICAqL1xuICAgICAgJ2Z2bi1zbGFzaGVkLXplcm8nOiBbJ3NsYXNoZWQtemVybyddLFxuICAgICAgLyoqXG4gICAgICAgKiBGb250IFZhcmlhbnQgTnVtZXJpY1xuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZvbnQtdmFyaWFudC1udW1lcmljXG4gICAgICAgKi9cbiAgICAgICdmdm4tZmlndXJlJzogWydsaW5pbmctbnVtcycsICdvbGRzdHlsZS1udW1zJ10sXG4gICAgICAvKipcbiAgICAgICAqIEZvbnQgVmFyaWFudCBOdW1lcmljXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZm9udC12YXJpYW50LW51bWVyaWNcbiAgICAgICAqL1xuICAgICAgJ2Z2bi1zcGFjaW5nJzogWydwcm9wb3J0aW9uYWwtbnVtcycsICd0YWJ1bGFyLW51bXMnXSxcbiAgICAgIC8qKlxuICAgICAgICogRm9udCBWYXJpYW50IE51bWVyaWNcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9mb250LXZhcmlhbnQtbnVtZXJpY1xuICAgICAgICovXG4gICAgICAnZnZuLWZyYWN0aW9uJzogWydkaWFnb25hbC1mcmFjdGlvbnMnLCAnc3RhY2tlZC1mcmFjdGlvbnMnXSxcbiAgICAgIC8qKlxuICAgICAgICogTGV0dGVyIFNwYWNpbmdcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9sZXR0ZXItc3BhY2luZ1xuICAgICAgICovXG4gICAgICB0cmFja2luZzogW3tcbiAgICAgICAgdHJhY2tpbmc6IFt0aGVtZVRyYWNraW5nLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIExpbmUgQ2xhbXBcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9saW5lLWNsYW1wXG4gICAgICAgKi9cbiAgICAgICdsaW5lLWNsYW1wJzogW3tcbiAgICAgICAgJ2xpbmUtY2xhbXAnOiBbaXNOdW1iZXIsICdub25lJywgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlOdW1iZXJdXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTGluZSBIZWlnaHRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9saW5lLWhlaWdodFxuICAgICAgICovXG4gICAgICBsZWFkaW5nOiBbe1xuICAgICAgICBsZWFkaW5nOiBbLyoqIERlcHJlY2F0ZWQgc2luY2UgVGFpbHdpbmQgQ1NTIHY0LjAuMC4gQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGFpbHdpbmRsYWJzL3RhaWx3aW5kY3NzLmNvbS9pc3N1ZXMvMjAyNyNpc3N1ZWNvbW1lbnQtMjYyMDE1Mjc1NyAqL1xuICAgICAgICB0aGVtZUxlYWRpbmcsIC4uLnNjYWxlVW5hbWJpZ3VvdXNTcGFjaW5nKCldXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTGlzdCBTdHlsZSBJbWFnZVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2xpc3Qtc3R5bGUtaW1hZ2VcbiAgICAgICAqL1xuICAgICAgJ2xpc3QtaW1hZ2UnOiBbe1xuICAgICAgICAnbGlzdC1pbWFnZSc6IFsnbm9uZScsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTGlzdCBTdHlsZSBQb3NpdGlvblxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2xpc3Qtc3R5bGUtcG9zaXRpb25cbiAgICAgICAqL1xuICAgICAgJ2xpc3Qtc3R5bGUtcG9zaXRpb24nOiBbe1xuICAgICAgICBsaXN0OiBbJ2luc2lkZScsICdvdXRzaWRlJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBMaXN0IFN0eWxlIFR5cGVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9saXN0LXN0eWxlLXR5cGVcbiAgICAgICAqL1xuICAgICAgJ2xpc3Qtc3R5bGUtdHlwZSc6IFt7XG4gICAgICAgIGxpc3Q6IFsnZGlzYycsICdkZWNpbWFsJywgJ25vbmUnLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFRleHQgQWxpZ25tZW50XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdGV4dC1hbGlnblxuICAgICAgICovXG4gICAgICAndGV4dC1hbGlnbm1lbnQnOiBbe1xuICAgICAgICB0ZXh0OiBbJ2xlZnQnLCAnY2VudGVyJywgJ3JpZ2h0JywgJ2p1c3RpZnknLCAnc3RhcnQnLCAnZW5kJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBQbGFjZWhvbGRlciBDb2xvclxuICAgICAgICogQGRlcHJlY2F0ZWQgc2luY2UgVGFpbHdpbmQgQ1NTIHYzLjAuMFxuICAgICAgICogQHNlZSBodHRwczovL3YzLnRhaWx3aW5kY3NzLmNvbS9kb2NzL3BsYWNlaG9sZGVyLWNvbG9yXG4gICAgICAgKi9cbiAgICAgICdwbGFjZWhvbGRlci1jb2xvcic6IFt7XG4gICAgICAgIHBsYWNlaG9sZGVyOiBzY2FsZUNvbG9yKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBUZXh0IENvbG9yXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdGV4dC1jb2xvclxuICAgICAgICovXG4gICAgICAndGV4dC1jb2xvcic6IFt7XG4gICAgICAgIHRleHQ6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFRleHQgRGVjb3JhdGlvblxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RleHQtZGVjb3JhdGlvblxuICAgICAgICovXG4gICAgICAndGV4dC1kZWNvcmF0aW9uJzogWyd1bmRlcmxpbmUnLCAnb3ZlcmxpbmUnLCAnbGluZS10aHJvdWdoJywgJ25vLXVuZGVybGluZSddLFxuICAgICAgLyoqXG4gICAgICAgKiBUZXh0IERlY29yYXRpb24gU3R5bGVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90ZXh0LWRlY29yYXRpb24tc3R5bGVcbiAgICAgICAqL1xuICAgICAgJ3RleHQtZGVjb3JhdGlvbi1zdHlsZSc6IFt7XG4gICAgICAgIGRlY29yYXRpb246IFsuLi5zY2FsZUxpbmVTdHlsZSgpLCAnd2F2eSddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogVGV4dCBEZWNvcmF0aW9uIFRoaWNrbmVzc1xuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RleHQtZGVjb3JhdGlvbi10aGlja25lc3NcbiAgICAgICAqL1xuICAgICAgJ3RleHQtZGVjb3JhdGlvbi10aGlja25lc3MnOiBbe1xuICAgICAgICBkZWNvcmF0aW9uOiBbaXNOdW1iZXIsICdmcm9tLWZvbnQnLCAnYXV0bycsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5TGVuZ3RoXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFRleHQgRGVjb3JhdGlvbiBDb2xvclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RleHQtZGVjb3JhdGlvbi1jb2xvclxuICAgICAgICovXG4gICAgICAndGV4dC1kZWNvcmF0aW9uLWNvbG9yJzogW3tcbiAgICAgICAgZGVjb3JhdGlvbjogc2NhbGVDb2xvcigpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogVGV4dCBVbmRlcmxpbmUgT2Zmc2V0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdGV4dC11bmRlcmxpbmUtb2Zmc2V0XG4gICAgICAgKi9cbiAgICAgICd1bmRlcmxpbmUtb2Zmc2V0JzogW3tcbiAgICAgICAgJ3VuZGVybGluZS1vZmZzZXQnOiBbaXNOdW1iZXIsICdhdXRvJywgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBUZXh0IFRyYW5zZm9ybVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RleHQtdHJhbnNmb3JtXG4gICAgICAgKi9cbiAgICAgICd0ZXh0LXRyYW5zZm9ybSc6IFsndXBwZXJjYXNlJywgJ2xvd2VyY2FzZScsICdjYXBpdGFsaXplJywgJ25vcm1hbC1jYXNlJ10sXG4gICAgICAvKipcbiAgICAgICAqIFRleHQgT3ZlcmZsb3dcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90ZXh0LW92ZXJmbG93XG4gICAgICAgKi9cbiAgICAgICd0ZXh0LW92ZXJmbG93JzogWyd0cnVuY2F0ZScsICd0ZXh0LWVsbGlwc2lzJywgJ3RleHQtY2xpcCddLFxuICAgICAgLyoqXG4gICAgICAgKiBUZXh0IFdyYXBcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90ZXh0LXdyYXBcbiAgICAgICAqL1xuICAgICAgJ3RleHQtd3JhcCc6IFt7XG4gICAgICAgIHRleHQ6IFsnd3JhcCcsICdub3dyYXAnLCAnYmFsYW5jZScsICdwcmV0dHknXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFRleHQgSW5kZW50XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdGV4dC1pbmRlbnRcbiAgICAgICAqL1xuICAgICAgaW5kZW50OiBbe1xuICAgICAgICBpbmRlbnQ6IHNjYWxlVW5hbWJpZ3VvdXNTcGFjaW5nKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBWZXJ0aWNhbCBBbGlnbm1lbnRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy92ZXJ0aWNhbC1hbGlnblxuICAgICAgICovXG4gICAgICAndmVydGljYWwtYWxpZ24nOiBbe1xuICAgICAgICBhbGlnbjogWydiYXNlbGluZScsICd0b3AnLCAnbWlkZGxlJywgJ2JvdHRvbScsICd0ZXh0LXRvcCcsICd0ZXh0LWJvdHRvbScsICdzdWInLCAnc3VwZXInLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFdoaXRlc3BhY2VcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy93aGl0ZXNwYWNlXG4gICAgICAgKi9cbiAgICAgIHdoaXRlc3BhY2U6IFt7XG4gICAgICAgIHdoaXRlc3BhY2U6IFsnbm9ybWFsJywgJ25vd3JhcCcsICdwcmUnLCAncHJlLWxpbmUnLCAncHJlLXdyYXAnLCAnYnJlYWstc3BhY2VzJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBXb3JkIEJyZWFrXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvd29yZC1icmVha1xuICAgICAgICovXG4gICAgICBicmVhazogW3tcbiAgICAgICAgYnJlYWs6IFsnbm9ybWFsJywgJ3dvcmRzJywgJ2FsbCcsICdrZWVwJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBPdmVyZmxvdyBXcmFwXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb3ZlcmZsb3ctd3JhcFxuICAgICAgICovXG4gICAgICB3cmFwOiBbe1xuICAgICAgICB3cmFwOiBbJ2JyZWFrLXdvcmQnLCAnYW55d2hlcmUnLCAnbm9ybWFsJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBIeXBoZW5zXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvaHlwaGVuc1xuICAgICAgICovXG4gICAgICBoeXBoZW5zOiBbe1xuICAgICAgICBoeXBoZW5zOiBbJ25vbmUnLCAnbWFudWFsJywgJ2F1dG8nXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIENvbnRlbnRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9jb250ZW50XG4gICAgICAgKi9cbiAgICAgIGNvbnRlbnQ6IFt7XG4gICAgICAgIGNvbnRlbnQ6IFsnbm9uZScsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdXG4gICAgICB9XSxcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgIC8vIC0tLSBCYWNrZ3JvdW5kcyAtLS1cbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgIC8qKlxuICAgICAgICogQmFja2dyb3VuZCBBdHRhY2htZW50XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2dyb3VuZC1hdHRhY2htZW50XG4gICAgICAgKi9cbiAgICAgICdiZy1hdHRhY2htZW50JzogW3tcbiAgICAgICAgYmc6IFsnZml4ZWQnLCAnbG9jYWwnLCAnc2Nyb2xsJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCYWNrZ3JvdW5kIENsaXBcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZ3JvdW5kLWNsaXBcbiAgICAgICAqL1xuICAgICAgJ2JnLWNsaXAnOiBbe1xuICAgICAgICAnYmctY2xpcCc6IFsnYm9yZGVyJywgJ3BhZGRpbmcnLCAnY29udGVudCcsICd0ZXh0J11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCYWNrZ3JvdW5kIE9yaWdpblxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tncm91bmQtb3JpZ2luXG4gICAgICAgKi9cbiAgICAgICdiZy1vcmlnaW4nOiBbe1xuICAgICAgICAnYmctb3JpZ2luJzogWydib3JkZXInLCAncGFkZGluZycsICdjb250ZW50J11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCYWNrZ3JvdW5kIFBvc2l0aW9uXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2dyb3VuZC1wb3NpdGlvblxuICAgICAgICovXG4gICAgICAnYmctcG9zaXRpb24nOiBbe1xuICAgICAgICBiZzogc2NhbGVCZ1Bvc2l0aW9uKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCYWNrZ3JvdW5kIFJlcGVhdFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tncm91bmQtcmVwZWF0XG4gICAgICAgKi9cbiAgICAgICdiZy1yZXBlYXQnOiBbe1xuICAgICAgICBiZzogc2NhbGVCZ1JlcGVhdCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQmFja2dyb3VuZCBTaXplXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2dyb3VuZC1zaXplXG4gICAgICAgKi9cbiAgICAgICdiZy1zaXplJzogW3tcbiAgICAgICAgYmc6IHNjYWxlQmdTaXplKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCYWNrZ3JvdW5kIEltYWdlXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2dyb3VuZC1pbWFnZVxuICAgICAgICovXG4gICAgICAnYmctaW1hZ2UnOiBbe1xuICAgICAgICBiZzogWydub25lJywge1xuICAgICAgICAgIGxpbmVhcjogW3tcbiAgICAgICAgICAgIHRvOiBbJ3QnLCAndHInLCAncicsICdicicsICdiJywgJ2JsJywgJ2wnLCAndGwnXVxuICAgICAgICAgIH0sIGlzSW50ZWdlciwgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV0sXG4gICAgICAgICAgcmFkaWFsOiBbJycsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdLFxuICAgICAgICAgIGNvbmljOiBbaXNJbnRlZ2VyLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgICB9LCBpc0FyYml0cmFyeVZhcmlhYmxlSW1hZ2UsIGlzQXJiaXRyYXJ5SW1hZ2VdXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQmFja2dyb3VuZCBDb2xvclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tncm91bmQtY29sb3JcbiAgICAgICAqL1xuICAgICAgJ2JnLWNvbG9yJzogW3tcbiAgICAgICAgYmc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEdyYWRpZW50IENvbG9yIFN0b3BzIEZyb20gUG9zaXRpb25cbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmFkaWVudC1jb2xvci1zdG9wc1xuICAgICAgICovXG4gICAgICAnZ3JhZGllbnQtZnJvbS1wb3MnOiBbe1xuICAgICAgICBmcm9tOiBzY2FsZUdyYWRpZW50U3RvcFBvc2l0aW9uKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBHcmFkaWVudCBDb2xvciBTdG9wcyBWaWEgUG9zaXRpb25cbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmFkaWVudC1jb2xvci1zdG9wc1xuICAgICAgICovXG4gICAgICAnZ3JhZGllbnQtdmlhLXBvcyc6IFt7XG4gICAgICAgIHZpYTogc2NhbGVHcmFkaWVudFN0b3BQb3NpdGlvbigpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogR3JhZGllbnQgQ29sb3IgU3RvcHMgVG8gUG9zaXRpb25cbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmFkaWVudC1jb2xvci1zdG9wc1xuICAgICAgICovXG4gICAgICAnZ3JhZGllbnQtdG8tcG9zJzogW3tcbiAgICAgICAgdG86IHNjYWxlR3JhZGllbnRTdG9wUG9zaXRpb24oKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEdyYWRpZW50IENvbG9yIFN0b3BzIEZyb21cbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ncmFkaWVudC1jb2xvci1zdG9wc1xuICAgICAgICovXG4gICAgICAnZ3JhZGllbnQtZnJvbSc6IFt7XG4gICAgICAgIGZyb206IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEdyYWRpZW50IENvbG9yIFN0b3BzIFZpYVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyYWRpZW50LWNvbG9yLXN0b3BzXG4gICAgICAgKi9cbiAgICAgICdncmFkaWVudC12aWEnOiBbe1xuICAgICAgICB2aWE6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEdyYWRpZW50IENvbG9yIFN0b3BzIFRvXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZ3JhZGllbnQtY29sb3Itc3RvcHNcbiAgICAgICAqL1xuICAgICAgJ2dyYWRpZW50LXRvJzogW3tcbiAgICAgICAgdG86IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS1cbiAgICAgIC8vIC0tLSBCb3JkZXJzIC0tLVxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tXG4gICAgICAvKipcbiAgICAgICAqIEJvcmRlciBSYWRpdXNcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItcmFkaXVzXG4gICAgICAgKi9cbiAgICAgIHJvdW5kZWQ6IFt7XG4gICAgICAgIHJvdW5kZWQ6IHNjYWxlUmFkaXVzKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCb3JkZXIgUmFkaXVzIFN0YXJ0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXJhZGl1c1xuICAgICAgICovXG4gICAgICAncm91bmRlZC1zJzogW3tcbiAgICAgICAgJ3JvdW5kZWQtcyc6IHNjYWxlUmFkaXVzKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCb3JkZXIgUmFkaXVzIEVuZFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1yYWRpdXNcbiAgICAgICAqL1xuICAgICAgJ3JvdW5kZWQtZSc6IFt7XG4gICAgICAgICdyb3VuZGVkLWUnOiBzY2FsZVJhZGl1cygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm9yZGVyIFJhZGl1cyBUb3BcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItcmFkaXVzXG4gICAgICAgKi9cbiAgICAgICdyb3VuZGVkLXQnOiBbe1xuICAgICAgICAncm91bmRlZC10Jzogc2NhbGVSYWRpdXMoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJvcmRlciBSYWRpdXMgUmlnaHRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItcmFkaXVzXG4gICAgICAgKi9cbiAgICAgICdyb3VuZGVkLXInOiBbe1xuICAgICAgICAncm91bmRlZC1yJzogc2NhbGVSYWRpdXMoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJvcmRlciBSYWRpdXMgQm90dG9tXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXJhZGl1c1xuICAgICAgICovXG4gICAgICAncm91bmRlZC1iJzogW3tcbiAgICAgICAgJ3JvdW5kZWQtYic6IHNjYWxlUmFkaXVzKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCb3JkZXIgUmFkaXVzIExlZnRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItcmFkaXVzXG4gICAgICAgKi9cbiAgICAgICdyb3VuZGVkLWwnOiBbe1xuICAgICAgICAncm91bmRlZC1sJzogc2NhbGVSYWRpdXMoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJvcmRlciBSYWRpdXMgU3RhcnQgU3RhcnRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItcmFkaXVzXG4gICAgICAgKi9cbiAgICAgICdyb3VuZGVkLXNzJzogW3tcbiAgICAgICAgJ3JvdW5kZWQtc3MnOiBzY2FsZVJhZGl1cygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm9yZGVyIFJhZGl1cyBTdGFydCBFbmRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItcmFkaXVzXG4gICAgICAgKi9cbiAgICAgICdyb3VuZGVkLXNlJzogW3tcbiAgICAgICAgJ3JvdW5kZWQtc2UnOiBzY2FsZVJhZGl1cygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm9yZGVyIFJhZGl1cyBFbmQgRW5kXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXJhZGl1c1xuICAgICAgICovXG4gICAgICAncm91bmRlZC1lZSc6IFt7XG4gICAgICAgICdyb3VuZGVkLWVlJzogc2NhbGVSYWRpdXMoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJvcmRlciBSYWRpdXMgRW5kIFN0YXJ0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXJhZGl1c1xuICAgICAgICovXG4gICAgICAncm91bmRlZC1lcyc6IFt7XG4gICAgICAgICdyb3VuZGVkLWVzJzogc2NhbGVSYWRpdXMoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJvcmRlciBSYWRpdXMgVG9wIExlZnRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItcmFkaXVzXG4gICAgICAgKi9cbiAgICAgICdyb3VuZGVkLXRsJzogW3tcbiAgICAgICAgJ3JvdW5kZWQtdGwnOiBzY2FsZVJhZGl1cygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm9yZGVyIFJhZGl1cyBUb3AgUmlnaHRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItcmFkaXVzXG4gICAgICAgKi9cbiAgICAgICdyb3VuZGVkLXRyJzogW3tcbiAgICAgICAgJ3JvdW5kZWQtdHInOiBzY2FsZVJhZGl1cygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm9yZGVyIFJhZGl1cyBCb3R0b20gUmlnaHRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItcmFkaXVzXG4gICAgICAgKi9cbiAgICAgICdyb3VuZGVkLWJyJzogW3tcbiAgICAgICAgJ3JvdW5kZWQtYnInOiBzY2FsZVJhZGl1cygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm9yZGVyIFJhZGl1cyBCb3R0b20gTGVmdFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1yYWRpdXNcbiAgICAgICAqL1xuICAgICAgJ3JvdW5kZWQtYmwnOiBbe1xuICAgICAgICAncm91bmRlZC1ibCc6IHNjYWxlUmFkaXVzKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCb3JkZXIgV2lkdGhcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItd2lkdGhcbiAgICAgICAqL1xuICAgICAgJ2JvcmRlci13JzogW3tcbiAgICAgICAgYm9yZGVyOiBzY2FsZUJvcmRlcldpZHRoKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCb3JkZXIgV2lkdGggSW5saW5lXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItdy14JzogW3tcbiAgICAgICAgJ2JvcmRlci14Jzogc2NhbGVCb3JkZXJXaWR0aCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm9yZGVyIFdpZHRoIEJsb2NrXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItdy15JzogW3tcbiAgICAgICAgJ2JvcmRlci15Jzogc2NhbGVCb3JkZXJXaWR0aCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm9yZGVyIFdpZHRoIElubGluZSBTdGFydFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci13aWR0aFxuICAgICAgICovXG4gICAgICAnYm9yZGVyLXctcyc6IFt7XG4gICAgICAgICdib3JkZXItcyc6IHNjYWxlQm9yZGVyV2lkdGgoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJvcmRlciBXaWR0aCBJbmxpbmUgRW5kXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItdy1lJzogW3tcbiAgICAgICAgJ2JvcmRlci1lJzogc2NhbGVCb3JkZXJXaWR0aCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm9yZGVyIFdpZHRoIEJsb2NrIFN0YXJ0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItdy1icyc6IFt7XG4gICAgICAgICdib3JkZXItYnMnOiBzY2FsZUJvcmRlcldpZHRoKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCb3JkZXIgV2lkdGggQmxvY2sgRW5kXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItdy1iZSc6IFt7XG4gICAgICAgICdib3JkZXItYmUnOiBzY2FsZUJvcmRlcldpZHRoKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCb3JkZXIgV2lkdGggVG9wXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItdy10JzogW3tcbiAgICAgICAgJ2JvcmRlci10Jzogc2NhbGVCb3JkZXJXaWR0aCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm9yZGVyIFdpZHRoIFJpZ2h0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItdy1yJzogW3tcbiAgICAgICAgJ2JvcmRlci1yJzogc2NhbGVCb3JkZXJXaWR0aCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm9yZGVyIFdpZHRoIEJvdHRvbVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci13aWR0aFxuICAgICAgICovXG4gICAgICAnYm9yZGVyLXctYic6IFt7XG4gICAgICAgICdib3JkZXItYic6IHNjYWxlQm9yZGVyV2lkdGgoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJvcmRlciBXaWR0aCBMZWZ0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItdy1sJzogW3tcbiAgICAgICAgJ2JvcmRlci1sJzogc2NhbGVCb3JkZXJXaWR0aCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogRGl2aWRlIFdpZHRoIFhcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItd2lkdGgjYmV0d2Vlbi1jaGlsZHJlblxuICAgICAgICovXG4gICAgICAnZGl2aWRlLXgnOiBbe1xuICAgICAgICAnZGl2aWRlLXgnOiBzY2FsZUJvcmRlcldpZHRoKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBEaXZpZGUgV2lkdGggWCBSZXZlcnNlXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoI2JldHdlZW4tY2hpbGRyZW5cbiAgICAgICAqL1xuICAgICAgJ2RpdmlkZS14LXJldmVyc2UnOiBbJ2RpdmlkZS14LXJldmVyc2UnXSxcbiAgICAgIC8qKlxuICAgICAgICogRGl2aWRlIFdpZHRoIFlcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItd2lkdGgjYmV0d2Vlbi1jaGlsZHJlblxuICAgICAgICovXG4gICAgICAnZGl2aWRlLXknOiBbe1xuICAgICAgICAnZGl2aWRlLXknOiBzY2FsZUJvcmRlcldpZHRoKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBEaXZpZGUgV2lkdGggWSBSZXZlcnNlXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXdpZHRoI2JldHdlZW4tY2hpbGRyZW5cbiAgICAgICAqL1xuICAgICAgJ2RpdmlkZS15LXJldmVyc2UnOiBbJ2RpdmlkZS15LXJldmVyc2UnXSxcbiAgICAgIC8qKlxuICAgICAgICogQm9yZGVyIFN0eWxlXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLXN0eWxlXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItc3R5bGUnOiBbe1xuICAgICAgICBib3JkZXI6IFsuLi5zY2FsZUxpbmVTdHlsZSgpLCAnaGlkZGVuJywgJ25vbmUnXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIERpdmlkZSBTdHlsZVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1zdHlsZSNzZXR0aW5nLXRoZS1kaXZpZGVyLXN0eWxlXG4gICAgICAgKi9cbiAgICAgICdkaXZpZGUtc3R5bGUnOiBbe1xuICAgICAgICBkaXZpZGU6IFsuLi5zY2FsZUxpbmVTdHlsZSgpLCAnaGlkZGVuJywgJ25vbmUnXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJvcmRlciBDb2xvclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1jb2xvclxuICAgICAgICovXG4gICAgICAnYm9yZGVyLWNvbG9yJzogW3tcbiAgICAgICAgYm9yZGVyOiBzY2FsZUNvbG9yKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCb3JkZXIgQ29sb3IgSW5saW5lXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLWNvbG9yXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItY29sb3IteCc6IFt7XG4gICAgICAgICdib3JkZXIteCc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJvcmRlciBDb2xvciBCbG9ja1xuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1jb2xvclxuICAgICAgICovXG4gICAgICAnYm9yZGVyLWNvbG9yLXknOiBbe1xuICAgICAgICAnYm9yZGVyLXknOiBzY2FsZUNvbG9yKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCb3JkZXIgQ29sb3IgSW5saW5lIFN0YXJ0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLWNvbG9yXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItY29sb3Itcyc6IFt7XG4gICAgICAgICdib3JkZXItcyc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJvcmRlciBDb2xvciBJbmxpbmUgRW5kXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLWNvbG9yXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItY29sb3ItZSc6IFt7XG4gICAgICAgICdib3JkZXItZSc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJvcmRlciBDb2xvciBCbG9jayBTdGFydFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1jb2xvclxuICAgICAgICovXG4gICAgICAnYm9yZGVyLWNvbG9yLWJzJzogW3tcbiAgICAgICAgJ2JvcmRlci1icyc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJvcmRlciBDb2xvciBCbG9jayBFbmRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItY29sb3JcbiAgICAgICAqL1xuICAgICAgJ2JvcmRlci1jb2xvci1iZSc6IFt7XG4gICAgICAgICdib3JkZXItYmUnOiBzY2FsZUNvbG9yKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCb3JkZXIgQ29sb3IgVG9wXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLWNvbG9yXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItY29sb3ItdCc6IFt7XG4gICAgICAgICdib3JkZXItdCc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJvcmRlciBDb2xvciBSaWdodFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1jb2xvclxuICAgICAgICovXG4gICAgICAnYm9yZGVyLWNvbG9yLXInOiBbe1xuICAgICAgICAnYm9yZGVyLXInOiBzY2FsZUNvbG9yKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCb3JkZXIgQ29sb3IgQm90dG9tXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLWNvbG9yXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItY29sb3ItYic6IFt7XG4gICAgICAgICdib3JkZXItYic6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJvcmRlciBDb2xvciBMZWZ0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm9yZGVyLWNvbG9yXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItY29sb3ItbCc6IFt7XG4gICAgICAgICdib3JkZXItbCc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIERpdmlkZSBDb2xvclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2RpdmlkZS1jb2xvclxuICAgICAgICovXG4gICAgICAnZGl2aWRlLWNvbG9yJzogW3tcbiAgICAgICAgZGl2aWRlOiBzY2FsZUNvbG9yKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBPdXRsaW5lIFN0eWxlXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb3V0bGluZS1zdHlsZVxuICAgICAgICovXG4gICAgICAnb3V0bGluZS1zdHlsZSc6IFt7XG4gICAgICAgIG91dGxpbmU6IFsuLi5zY2FsZUxpbmVTdHlsZSgpLCAnbm9uZScsICdoaWRkZW4nXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIE91dGxpbmUgT2Zmc2V0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb3V0bGluZS1vZmZzZXRcbiAgICAgICAqL1xuICAgICAgJ291dGxpbmUtb2Zmc2V0JzogW3tcbiAgICAgICAgJ291dGxpbmUtb2Zmc2V0JzogW2lzTnVtYmVyLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIE91dGxpbmUgV2lkdGhcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9vdXRsaW5lLXdpZHRoXG4gICAgICAgKi9cbiAgICAgICdvdXRsaW5lLXcnOiBbe1xuICAgICAgICBvdXRsaW5lOiBbJycsIGlzTnVtYmVyLCBpc0FyYml0cmFyeVZhcmlhYmxlTGVuZ3RoLCBpc0FyYml0cmFyeUxlbmd0aF1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBPdXRsaW5lIENvbG9yXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb3V0bGluZS1jb2xvclxuICAgICAgICovXG4gICAgICAnb3V0bGluZS1jb2xvcic6IFt7XG4gICAgICAgIG91dGxpbmU6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS1cbiAgICAgIC8vIC0tLSBFZmZlY3RzIC0tLVxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tXG4gICAgICAvKipcbiAgICAgICAqIEJveCBTaGFkb3dcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3gtc2hhZG93XG4gICAgICAgKi9cbiAgICAgIHNoYWRvdzogW3tcbiAgICAgICAgc2hhZG93OiBbXG4gICAgICAgIC8vIERlcHJlY2F0ZWQgc2luY2UgVGFpbHdpbmQgQ1NTIHY0LjAuMFxuICAgICAgICAnJywgJ25vbmUnLCB0aGVtZVNoYWRvdywgaXNBcmJpdHJhcnlWYXJpYWJsZVNoYWRvdywgaXNBcmJpdHJhcnlTaGFkb3ddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm94IFNoYWRvdyBDb2xvclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JveC1zaGFkb3cjc2V0dGluZy10aGUtc2hhZG93LWNvbG9yXG4gICAgICAgKi9cbiAgICAgICdzaGFkb3ctY29sb3InOiBbe1xuICAgICAgICBzaGFkb3c6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEluc2V0IEJveCBTaGFkb3dcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3gtc2hhZG93I2FkZGluZy1hbi1pbnNldC1zaGFkb3dcbiAgICAgICAqL1xuICAgICAgJ2luc2V0LXNoYWRvdyc6IFt7XG4gICAgICAgICdpbnNldC1zaGFkb3cnOiBbJ25vbmUnLCB0aGVtZUluc2V0U2hhZG93LCBpc0FyYml0cmFyeVZhcmlhYmxlU2hhZG93LCBpc0FyYml0cmFyeVNoYWRvd11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBJbnNldCBCb3ggU2hhZG93IENvbG9yXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm94LXNoYWRvdyNzZXR0aW5nLXRoZS1pbnNldC1zaGFkb3ctY29sb3JcbiAgICAgICAqL1xuICAgICAgJ2luc2V0LXNoYWRvdy1jb2xvcic6IFt7XG4gICAgICAgICdpbnNldC1zaGFkb3cnOiBzY2FsZUNvbG9yKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBSaW5nIFdpZHRoXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm94LXNoYWRvdyNhZGRpbmctYS1yaW5nXG4gICAgICAgKi9cbiAgICAgICdyaW5nLXcnOiBbe1xuICAgICAgICByaW5nOiBzY2FsZUJvcmRlcldpZHRoKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBSaW5nIFdpZHRoIEluc2V0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdjMudGFpbHdpbmRjc3MuY29tL2RvY3MvcmluZy13aWR0aCNpbnNldC1yaW5nc1xuICAgICAgICogQGRlcHJlY2F0ZWQgc2luY2UgVGFpbHdpbmQgQ1NTIHY0LjAuMFxuICAgICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGFpbHdpbmRsYWJzL3RhaWx3aW5kY3NzL2Jsb2IvdjQuMC4wL3BhY2thZ2VzL3RhaWx3aW5kY3NzL3NyYy91dGlsaXRpZXMudHMjTDQxNThcbiAgICAgICAqL1xuICAgICAgJ3Jpbmctdy1pbnNldCc6IFsncmluZy1pbnNldCddLFxuICAgICAgLyoqXG4gICAgICAgKiBSaW5nIENvbG9yXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYm94LXNoYWRvdyNzZXR0aW5nLXRoZS1yaW5nLWNvbG9yXG4gICAgICAgKi9cbiAgICAgICdyaW5nLWNvbG9yJzogW3tcbiAgICAgICAgcmluZzogc2NhbGVDb2xvcigpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogUmluZyBPZmZzZXQgV2lkdGhcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly92My50YWlsd2luZGNzcy5jb20vZG9jcy9yaW5nLW9mZnNldC13aWR0aFxuICAgICAgICogQGRlcHJlY2F0ZWQgc2luY2UgVGFpbHdpbmQgQ1NTIHY0LjAuMFxuICAgICAgICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vdGFpbHdpbmRsYWJzL3RhaWx3aW5kY3NzL2Jsb2IvdjQuMC4wL3BhY2thZ2VzL3RhaWx3aW5kY3NzL3NyYy91dGlsaXRpZXMudHMjTDQxNThcbiAgICAgICAqL1xuICAgICAgJ3Jpbmctb2Zmc2V0LXcnOiBbe1xuICAgICAgICAncmluZy1vZmZzZXQnOiBbaXNOdW1iZXIsIGlzQXJiaXRyYXJ5TGVuZ3RoXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFJpbmcgT2Zmc2V0IENvbG9yXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdjMudGFpbHdpbmRjc3MuY29tL2RvY3MvcmluZy1vZmZzZXQtY29sb3JcbiAgICAgICAqIEBkZXByZWNhdGVkIHNpbmNlIFRhaWx3aW5kIENTUyB2NC4wLjBcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3RhaWx3aW5kbGFicy90YWlsd2luZGNzcy9ibG9iL3Y0LjAuMC9wYWNrYWdlcy90YWlsd2luZGNzcy9zcmMvdXRpbGl0aWVzLnRzI0w0MTU4XG4gICAgICAgKi9cbiAgICAgICdyaW5nLW9mZnNldC1jb2xvcic6IFt7XG4gICAgICAgICdyaW5nLW9mZnNldCc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEluc2V0IFJpbmcgV2lkdGhcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3gtc2hhZG93I2FkZGluZy1hbi1pbnNldC1yaW5nXG4gICAgICAgKi9cbiAgICAgICdpbnNldC1yaW5nLXcnOiBbe1xuICAgICAgICAnaW5zZXQtcmluZyc6IHNjYWxlQm9yZGVyV2lkdGgoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEluc2V0IFJpbmcgQ29sb3JcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3gtc2hhZG93I3NldHRpbmctdGhlLWluc2V0LXJpbmctY29sb3JcbiAgICAgICAqL1xuICAgICAgJ2luc2V0LXJpbmctY29sb3InOiBbe1xuICAgICAgICAnaW5zZXQtcmluZyc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFRleHQgU2hhZG93XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdGV4dC1zaGFkb3dcbiAgICAgICAqL1xuICAgICAgJ3RleHQtc2hhZG93JzogW3tcbiAgICAgICAgJ3RleHQtc2hhZG93JzogWydub25lJywgdGhlbWVUZXh0U2hhZG93LCBpc0FyYml0cmFyeVZhcmlhYmxlU2hhZG93LCBpc0FyYml0cmFyeVNoYWRvd11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBUZXh0IFNoYWRvdyBDb2xvclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RleHQtc2hhZG93I3NldHRpbmctdGhlLXNoYWRvdy1jb2xvclxuICAgICAgICovXG4gICAgICAndGV4dC1zaGFkb3ctY29sb3InOiBbe1xuICAgICAgICAndGV4dC1zaGFkb3cnOiBzY2FsZUNvbG9yKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBPcGFjaXR5XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvb3BhY2l0eVxuICAgICAgICovXG4gICAgICBvcGFjaXR5OiBbe1xuICAgICAgICBvcGFjaXR5OiBbaXNOdW1iZXIsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWl4IEJsZW5kIE1vZGVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9taXgtYmxlbmQtbW9kZVxuICAgICAgICovXG4gICAgICAnbWl4LWJsZW5kJzogW3tcbiAgICAgICAgJ21peC1ibGVuZCc6IFsuLi5zY2FsZUJsZW5kTW9kZSgpLCAncGx1cy1kYXJrZXInLCAncGx1cy1saWdodGVyJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCYWNrZ3JvdW5kIEJsZW5kIE1vZGVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZ3JvdW5kLWJsZW5kLW1vZGVcbiAgICAgICAqL1xuICAgICAgJ2JnLWJsZW5kJzogW3tcbiAgICAgICAgJ2JnLWJsZW5kJzogc2NhbGVCbGVuZE1vZGUoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIE1hc2sgQ2xpcFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hc2stY2xpcFxuICAgICAgICovXG4gICAgICAnbWFzay1jbGlwJzogW3tcbiAgICAgICAgJ21hc2stY2xpcCc6IFsnYm9yZGVyJywgJ3BhZGRpbmcnLCAnY29udGVudCcsICdmaWxsJywgJ3N0cm9rZScsICd2aWV3J11cbiAgICAgIH0sICdtYXNrLW5vLWNsaXAnXSxcbiAgICAgIC8qKlxuICAgICAgICogTWFzayBDb21wb3NpdGVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9tYXNrLWNvbXBvc2l0ZVxuICAgICAgICovXG4gICAgICAnbWFzay1jb21wb3NpdGUnOiBbe1xuICAgICAgICBtYXNrOiBbJ2FkZCcsICdzdWJ0cmFjdCcsICdpbnRlcnNlY3QnLCAnZXhjbHVkZSddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWFzayBJbWFnZVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hc2staW1hZ2VcbiAgICAgICAqL1xuICAgICAgJ21hc2staW1hZ2UtbGluZWFyLXBvcyc6IFt7XG4gICAgICAgICdtYXNrLWxpbmVhcic6IFtpc051bWJlcl1cbiAgICAgIH1dLFxuICAgICAgJ21hc2staW1hZ2UtbGluZWFyLWZyb20tcG9zJzogW3tcbiAgICAgICAgJ21hc2stbGluZWFyLWZyb20nOiBzY2FsZU1hc2tJbWFnZVBvc2l0aW9uKClcbiAgICAgIH1dLFxuICAgICAgJ21hc2staW1hZ2UtbGluZWFyLXRvLXBvcyc6IFt7XG4gICAgICAgICdtYXNrLWxpbmVhci10byc6IHNjYWxlTWFza0ltYWdlUG9zaXRpb24oKVxuICAgICAgfV0sXG4gICAgICAnbWFzay1pbWFnZS1saW5lYXItZnJvbS1jb2xvcic6IFt7XG4gICAgICAgICdtYXNrLWxpbmVhci1mcm9tJzogc2NhbGVDb2xvcigpXG4gICAgICB9XSxcbiAgICAgICdtYXNrLWltYWdlLWxpbmVhci10by1jb2xvcic6IFt7XG4gICAgICAgICdtYXNrLWxpbmVhci10byc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAnbWFzay1pbWFnZS10LWZyb20tcG9zJzogW3tcbiAgICAgICAgJ21hc2stdC1mcm9tJzogc2NhbGVNYXNrSW1hZ2VQb3NpdGlvbigpXG4gICAgICB9XSxcbiAgICAgICdtYXNrLWltYWdlLXQtdG8tcG9zJzogW3tcbiAgICAgICAgJ21hc2stdC10byc6IHNjYWxlTWFza0ltYWdlUG9zaXRpb24oKVxuICAgICAgfV0sXG4gICAgICAnbWFzay1pbWFnZS10LWZyb20tY29sb3InOiBbe1xuICAgICAgICAnbWFzay10LWZyb20nOiBzY2FsZUNvbG9yKClcbiAgICAgIH1dLFxuICAgICAgJ21hc2staW1hZ2UtdC10by1jb2xvcic6IFt7XG4gICAgICAgICdtYXNrLXQtdG8nOiBzY2FsZUNvbG9yKClcbiAgICAgIH1dLFxuICAgICAgJ21hc2staW1hZ2Utci1mcm9tLXBvcyc6IFt7XG4gICAgICAgICdtYXNrLXItZnJvbSc6IHNjYWxlTWFza0ltYWdlUG9zaXRpb24oKVxuICAgICAgfV0sXG4gICAgICAnbWFzay1pbWFnZS1yLXRvLXBvcyc6IFt7XG4gICAgICAgICdtYXNrLXItdG8nOiBzY2FsZU1hc2tJbWFnZVBvc2l0aW9uKClcbiAgICAgIH1dLFxuICAgICAgJ21hc2staW1hZ2Utci1mcm9tLWNvbG9yJzogW3tcbiAgICAgICAgJ21hc2stci1mcm9tJzogc2NhbGVDb2xvcigpXG4gICAgICB9XSxcbiAgICAgICdtYXNrLWltYWdlLXItdG8tY29sb3InOiBbe1xuICAgICAgICAnbWFzay1yLXRvJzogc2NhbGVDb2xvcigpXG4gICAgICB9XSxcbiAgICAgICdtYXNrLWltYWdlLWItZnJvbS1wb3MnOiBbe1xuICAgICAgICAnbWFzay1iLWZyb20nOiBzY2FsZU1hc2tJbWFnZVBvc2l0aW9uKClcbiAgICAgIH1dLFxuICAgICAgJ21hc2staW1hZ2UtYi10by1wb3MnOiBbe1xuICAgICAgICAnbWFzay1iLXRvJzogc2NhbGVNYXNrSW1hZ2VQb3NpdGlvbigpXG4gICAgICB9XSxcbiAgICAgICdtYXNrLWltYWdlLWItZnJvbS1jb2xvcic6IFt7XG4gICAgICAgICdtYXNrLWItZnJvbSc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAnbWFzay1pbWFnZS1iLXRvLWNvbG9yJzogW3tcbiAgICAgICAgJ21hc2stYi10byc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAnbWFzay1pbWFnZS1sLWZyb20tcG9zJzogW3tcbiAgICAgICAgJ21hc2stbC1mcm9tJzogc2NhbGVNYXNrSW1hZ2VQb3NpdGlvbigpXG4gICAgICB9XSxcbiAgICAgICdtYXNrLWltYWdlLWwtdG8tcG9zJzogW3tcbiAgICAgICAgJ21hc2stbC10byc6IHNjYWxlTWFza0ltYWdlUG9zaXRpb24oKVxuICAgICAgfV0sXG4gICAgICAnbWFzay1pbWFnZS1sLWZyb20tY29sb3InOiBbe1xuICAgICAgICAnbWFzay1sLWZyb20nOiBzY2FsZUNvbG9yKClcbiAgICAgIH1dLFxuICAgICAgJ21hc2staW1hZ2UtbC10by1jb2xvcic6IFt7XG4gICAgICAgICdtYXNrLWwtdG8nOiBzY2FsZUNvbG9yKClcbiAgICAgIH1dLFxuICAgICAgJ21hc2staW1hZ2UteC1mcm9tLXBvcyc6IFt7XG4gICAgICAgICdtYXNrLXgtZnJvbSc6IHNjYWxlTWFza0ltYWdlUG9zaXRpb24oKVxuICAgICAgfV0sXG4gICAgICAnbWFzay1pbWFnZS14LXRvLXBvcyc6IFt7XG4gICAgICAgICdtYXNrLXgtdG8nOiBzY2FsZU1hc2tJbWFnZVBvc2l0aW9uKClcbiAgICAgIH1dLFxuICAgICAgJ21hc2staW1hZ2UteC1mcm9tLWNvbG9yJzogW3tcbiAgICAgICAgJ21hc2steC1mcm9tJzogc2NhbGVDb2xvcigpXG4gICAgICB9XSxcbiAgICAgICdtYXNrLWltYWdlLXgtdG8tY29sb3InOiBbe1xuICAgICAgICAnbWFzay14LXRvJzogc2NhbGVDb2xvcigpXG4gICAgICB9XSxcbiAgICAgICdtYXNrLWltYWdlLXktZnJvbS1wb3MnOiBbe1xuICAgICAgICAnbWFzay15LWZyb20nOiBzY2FsZU1hc2tJbWFnZVBvc2l0aW9uKClcbiAgICAgIH1dLFxuICAgICAgJ21hc2staW1hZ2UteS10by1wb3MnOiBbe1xuICAgICAgICAnbWFzay15LXRvJzogc2NhbGVNYXNrSW1hZ2VQb3NpdGlvbigpXG4gICAgICB9XSxcbiAgICAgICdtYXNrLWltYWdlLXktZnJvbS1jb2xvcic6IFt7XG4gICAgICAgICdtYXNrLXktZnJvbSc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAnbWFzay1pbWFnZS15LXRvLWNvbG9yJzogW3tcbiAgICAgICAgJ21hc2steS10byc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAnbWFzay1pbWFnZS1yYWRpYWwnOiBbe1xuICAgICAgICAnbWFzay1yYWRpYWwnOiBbaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgICAgIH1dLFxuICAgICAgJ21hc2staW1hZ2UtcmFkaWFsLWZyb20tcG9zJzogW3tcbiAgICAgICAgJ21hc2stcmFkaWFsLWZyb20nOiBzY2FsZU1hc2tJbWFnZVBvc2l0aW9uKClcbiAgICAgIH1dLFxuICAgICAgJ21hc2staW1hZ2UtcmFkaWFsLXRvLXBvcyc6IFt7XG4gICAgICAgICdtYXNrLXJhZGlhbC10byc6IHNjYWxlTWFza0ltYWdlUG9zaXRpb24oKVxuICAgICAgfV0sXG4gICAgICAnbWFzay1pbWFnZS1yYWRpYWwtZnJvbS1jb2xvcic6IFt7XG4gICAgICAgICdtYXNrLXJhZGlhbC1mcm9tJzogc2NhbGVDb2xvcigpXG4gICAgICB9XSxcbiAgICAgICdtYXNrLWltYWdlLXJhZGlhbC10by1jb2xvcic6IFt7XG4gICAgICAgICdtYXNrLXJhZGlhbC10byc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAnbWFzay1pbWFnZS1yYWRpYWwtc2hhcGUnOiBbe1xuICAgICAgICAnbWFzay1yYWRpYWwnOiBbJ2NpcmNsZScsICdlbGxpcHNlJ11cbiAgICAgIH1dLFxuICAgICAgJ21hc2staW1hZ2UtcmFkaWFsLXNpemUnOiBbe1xuICAgICAgICAnbWFzay1yYWRpYWwnOiBbe1xuICAgICAgICAgIGNsb3Nlc3Q6IFsnc2lkZScsICdjb3JuZXInXSxcbiAgICAgICAgICBmYXJ0aGVzdDogWydzaWRlJywgJ2Nvcm5lciddXG4gICAgICAgIH1dXG4gICAgICB9XSxcbiAgICAgICdtYXNrLWltYWdlLXJhZGlhbC1wb3MnOiBbe1xuICAgICAgICAnbWFzay1yYWRpYWwtYXQnOiBzY2FsZVBvc2l0aW9uKClcbiAgICAgIH1dLFxuICAgICAgJ21hc2staW1hZ2UtY29uaWMtcG9zJzogW3tcbiAgICAgICAgJ21hc2stY29uaWMnOiBbaXNOdW1iZXJdXG4gICAgICB9XSxcbiAgICAgICdtYXNrLWltYWdlLWNvbmljLWZyb20tcG9zJzogW3tcbiAgICAgICAgJ21hc2stY29uaWMtZnJvbSc6IHNjYWxlTWFza0ltYWdlUG9zaXRpb24oKVxuICAgICAgfV0sXG4gICAgICAnbWFzay1pbWFnZS1jb25pYy10by1wb3MnOiBbe1xuICAgICAgICAnbWFzay1jb25pYy10byc6IHNjYWxlTWFza0ltYWdlUG9zaXRpb24oKVxuICAgICAgfV0sXG4gICAgICAnbWFzay1pbWFnZS1jb25pYy1mcm9tLWNvbG9yJzogW3tcbiAgICAgICAgJ21hc2stY29uaWMtZnJvbSc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAnbWFzay1pbWFnZS1jb25pYy10by1jb2xvcic6IFt7XG4gICAgICAgICdtYXNrLWNvbmljLXRvJzogc2NhbGVDb2xvcigpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWFzayBNb2RlXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWFzay1tb2RlXG4gICAgICAgKi9cbiAgICAgICdtYXNrLW1vZGUnOiBbe1xuICAgICAgICBtYXNrOiBbJ2FscGhhJywgJ2x1bWluYW5jZScsICdtYXRjaCddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWFzayBPcmlnaW5cbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9tYXNrLW9yaWdpblxuICAgICAgICovXG4gICAgICAnbWFzay1vcmlnaW4nOiBbe1xuICAgICAgICAnbWFzay1vcmlnaW4nOiBbJ2JvcmRlcicsICdwYWRkaW5nJywgJ2NvbnRlbnQnLCAnZmlsbCcsICdzdHJva2UnLCAndmlldyddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWFzayBQb3NpdGlvblxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL21hc2stcG9zaXRpb25cbiAgICAgICAqL1xuICAgICAgJ21hc2stcG9zaXRpb24nOiBbe1xuICAgICAgICBtYXNrOiBzY2FsZUJnUG9zaXRpb24oKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIE1hc2sgUmVwZWF0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWFzay1yZXBlYXRcbiAgICAgICAqL1xuICAgICAgJ21hc2stcmVwZWF0JzogW3tcbiAgICAgICAgbWFzazogc2NhbGVCZ1JlcGVhdCgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWFzayBTaXplXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWFzay1zaXplXG4gICAgICAgKi9cbiAgICAgICdtYXNrLXNpemUnOiBbe1xuICAgICAgICBtYXNrOiBzY2FsZUJnU2l6ZSgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogTWFzayBUeXBlXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvbWFzay10eXBlXG4gICAgICAgKi9cbiAgICAgICdtYXNrLXR5cGUnOiBbe1xuICAgICAgICAnbWFzay10eXBlJzogWydhbHBoYScsICdsdW1pbmFuY2UnXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIE1hc2sgSW1hZ2VcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9tYXNrLWltYWdlXG4gICAgICAgKi9cbiAgICAgICdtYXNrLWltYWdlJzogW3tcbiAgICAgICAgbWFzazogWydub25lJywgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgICAgIH1dLFxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tXG4gICAgICAvLyAtLS0gRmlsdGVycyAtLS1cbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLVxuICAgICAgLyoqXG4gICAgICAgKiBGaWx0ZXJcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9maWx0ZXJcbiAgICAgICAqL1xuICAgICAgZmlsdGVyOiBbe1xuICAgICAgICBmaWx0ZXI6IFtcbiAgICAgICAgLy8gRGVwcmVjYXRlZCBzaW5jZSBUYWlsd2luZCBDU1MgdjMuMC4wXG4gICAgICAgICcnLCAnbm9uZScsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQmx1clxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JsdXJcbiAgICAgICAqL1xuICAgICAgYmx1cjogW3tcbiAgICAgICAgYmx1cjogc2NhbGVCbHVyKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCcmlnaHRuZXNzXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYnJpZ2h0bmVzc1xuICAgICAgICovXG4gICAgICBicmlnaHRuZXNzOiBbe1xuICAgICAgICBicmlnaHRuZXNzOiBbaXNOdW1iZXIsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQ29udHJhc3RcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9jb250cmFzdFxuICAgICAgICovXG4gICAgICBjb250cmFzdDogW3tcbiAgICAgICAgY29udHJhc3Q6IFtpc051bWJlciwgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBEcm9wIFNoYWRvd1xuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2Ryb3Atc2hhZG93XG4gICAgICAgKi9cbiAgICAgICdkcm9wLXNoYWRvdyc6IFt7XG4gICAgICAgICdkcm9wLXNoYWRvdyc6IFtcbiAgICAgICAgLy8gRGVwcmVjYXRlZCBzaW5jZSBUYWlsd2luZCBDU1MgdjQuMC4wXG4gICAgICAgICcnLCAnbm9uZScsIHRoZW1lRHJvcFNoYWRvdywgaXNBcmJpdHJhcnlWYXJpYWJsZVNoYWRvdywgaXNBcmJpdHJhcnlTaGFkb3ddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogRHJvcCBTaGFkb3cgQ29sb3JcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9maWx0ZXItZHJvcC1zaGFkb3cjc2V0dGluZy10aGUtc2hhZG93LWNvbG9yXG4gICAgICAgKi9cbiAgICAgICdkcm9wLXNoYWRvdy1jb2xvcic6IFt7XG4gICAgICAgICdkcm9wLXNoYWRvdyc6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEdyYXlzY2FsZVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2dyYXlzY2FsZVxuICAgICAgICovXG4gICAgICBncmF5c2NhbGU6IFt7XG4gICAgICAgIGdyYXlzY2FsZTogWycnLCBpc051bWJlciwgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBIdWUgUm90YXRlXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvaHVlLXJvdGF0ZVxuICAgICAgICovXG4gICAgICAnaHVlLXJvdGF0ZSc6IFt7XG4gICAgICAgICdodWUtcm90YXRlJzogW2lzTnVtYmVyLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEludmVydFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ludmVydFxuICAgICAgICovXG4gICAgICBpbnZlcnQ6IFt7XG4gICAgICAgIGludmVydDogWycnLCBpc051bWJlciwgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBTYXR1cmF0ZVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3NhdHVyYXRlXG4gICAgICAgKi9cbiAgICAgIHNhdHVyYXRlOiBbe1xuICAgICAgICBzYXR1cmF0ZTogW2lzTnVtYmVyLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFNlcGlhXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2VwaWFcbiAgICAgICAqL1xuICAgICAgc2VwaWE6IFt7XG4gICAgICAgIHNlcGlhOiBbJycsIGlzTnVtYmVyLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJhY2tkcm9wIEZpbHRlclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tkcm9wLWZpbHRlclxuICAgICAgICovXG4gICAgICAnYmFja2Ryb3AtZmlsdGVyJzogW3tcbiAgICAgICAgJ2JhY2tkcm9wLWZpbHRlcic6IFtcbiAgICAgICAgLy8gRGVwcmVjYXRlZCBzaW5jZSBUYWlsd2luZCBDU1MgdjMuMC4wXG4gICAgICAgICcnLCAnbm9uZScsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQmFja2Ryb3AgQmx1clxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tkcm9wLWJsdXJcbiAgICAgICAqL1xuICAgICAgJ2JhY2tkcm9wLWJsdXInOiBbe1xuICAgICAgICAnYmFja2Ryb3AtYmx1cic6IHNjYWxlQmx1cigpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQmFja2Ryb3AgQnJpZ2h0bmVzc1xuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tkcm9wLWJyaWdodG5lc3NcbiAgICAgICAqL1xuICAgICAgJ2JhY2tkcm9wLWJyaWdodG5lc3MnOiBbe1xuICAgICAgICAnYmFja2Ryb3AtYnJpZ2h0bmVzcyc6IFtpc051bWJlciwgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCYWNrZHJvcCBDb250cmFzdFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JhY2tkcm9wLWNvbnRyYXN0XG4gICAgICAgKi9cbiAgICAgICdiYWNrZHJvcC1jb250cmFzdCc6IFt7XG4gICAgICAgICdiYWNrZHJvcC1jb250cmFzdCc6IFtpc051bWJlciwgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCYWNrZHJvcCBHcmF5c2NhbGVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZHJvcC1ncmF5c2NhbGVcbiAgICAgICAqL1xuICAgICAgJ2JhY2tkcm9wLWdyYXlzY2FsZSc6IFt7XG4gICAgICAgICdiYWNrZHJvcC1ncmF5c2NhbGUnOiBbJycsIGlzTnVtYmVyLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJhY2tkcm9wIEh1ZSBSb3RhdGVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZHJvcC1odWUtcm90YXRlXG4gICAgICAgKi9cbiAgICAgICdiYWNrZHJvcC1odWUtcm90YXRlJzogW3tcbiAgICAgICAgJ2JhY2tkcm9wLWh1ZS1yb3RhdGUnOiBbaXNOdW1iZXIsIGlzQXJiaXRyYXJ5VmFyaWFibGUsIGlzQXJiaXRyYXJ5VmFsdWVdXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQmFja2Ryb3AgSW52ZXJ0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2Ryb3AtaW52ZXJ0XG4gICAgICAgKi9cbiAgICAgICdiYWNrZHJvcC1pbnZlcnQnOiBbe1xuICAgICAgICAnYmFja2Ryb3AtaW52ZXJ0JzogWycnLCBpc051bWJlciwgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBCYWNrZHJvcCBPcGFjaXR5XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2Ryb3Atb3BhY2l0eVxuICAgICAgICovXG4gICAgICAnYmFja2Ryb3Atb3BhY2l0eSc6IFt7XG4gICAgICAgICdiYWNrZHJvcC1vcGFjaXR5JzogW2lzTnVtYmVyLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJhY2tkcm9wIFNhdHVyYXRlXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2Ryb3Atc2F0dXJhdGVcbiAgICAgICAqL1xuICAgICAgJ2JhY2tkcm9wLXNhdHVyYXRlJzogW3tcbiAgICAgICAgJ2JhY2tkcm9wLXNhdHVyYXRlJzogW2lzTnVtYmVyLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEJhY2tkcm9wIFNlcGlhXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvYmFja2Ryb3Atc2VwaWFcbiAgICAgICAqL1xuICAgICAgJ2JhY2tkcm9wLXNlcGlhJzogW3tcbiAgICAgICAgJ2JhY2tkcm9wLXNlcGlhJzogWycnLCBpc051bWJlciwgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgICAgIH1dLFxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS1cbiAgICAgIC8vIC0tLSBUYWJsZXMgLS0tXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLVxuICAgICAgLyoqXG4gICAgICAgKiBCb3JkZXIgQ29sbGFwc2VcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItY29sbGFwc2VcbiAgICAgICAqL1xuICAgICAgJ2JvcmRlci1jb2xsYXBzZSc6IFt7XG4gICAgICAgIGJvcmRlcjogWydjb2xsYXBzZScsICdzZXBhcmF0ZSddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm9yZGVyIFNwYWNpbmdcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9ib3JkZXItc3BhY2luZ1xuICAgICAgICovXG4gICAgICAnYm9yZGVyLXNwYWNpbmcnOiBbe1xuICAgICAgICAnYm9yZGVyLXNwYWNpbmcnOiBzY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm9yZGVyIFNwYWNpbmcgWFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1zcGFjaW5nXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItc3BhY2luZy14JzogW3tcbiAgICAgICAgJ2JvcmRlci1zcGFjaW5nLXgnOiBzY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQm9yZGVyIFNwYWNpbmcgWVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2JvcmRlci1zcGFjaW5nXG4gICAgICAgKi9cbiAgICAgICdib3JkZXItc3BhY2luZy15JzogW3tcbiAgICAgICAgJ2JvcmRlci1zcGFjaW5nLXknOiBzY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogVGFibGUgTGF5b3V0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdGFibGUtbGF5b3V0XG4gICAgICAgKi9cbiAgICAgICd0YWJsZS1sYXlvdXQnOiBbe1xuICAgICAgICB0YWJsZTogWydhdXRvJywgJ2ZpeGVkJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBDYXB0aW9uIFNpZGVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9jYXB0aW9uLXNpZGVcbiAgICAgICAqL1xuICAgICAgY2FwdGlvbjogW3tcbiAgICAgICAgY2FwdGlvbjogWyd0b3AnLCAnYm90dG9tJ11cbiAgICAgIH1dLFxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAvLyAtLS0gVHJhbnNpdGlvbnMgYW5kIEFuaW1hdGlvbiAtLS1cbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgLyoqXG4gICAgICAgKiBUcmFuc2l0aW9uIFByb3BlcnR5XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNpdGlvbi1wcm9wZXJ0eVxuICAgICAgICovXG4gICAgICB0cmFuc2l0aW9uOiBbe1xuICAgICAgICB0cmFuc2l0aW9uOiBbJycsICdhbGwnLCAnY29sb3JzJywgJ29wYWNpdHknLCAnc2hhZG93JywgJ3RyYW5zZm9ybScsICdub25lJywgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBUcmFuc2l0aW9uIEJlaGF2aW9yXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNpdGlvbi1iZWhhdmlvclxuICAgICAgICovXG4gICAgICAndHJhbnNpdGlvbi1iZWhhdmlvcic6IFt7XG4gICAgICAgIHRyYW5zaXRpb246IFsnbm9ybWFsJywgJ2Rpc2NyZXRlJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBUcmFuc2l0aW9uIER1cmF0aW9uXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNpdGlvbi1kdXJhdGlvblxuICAgICAgICovXG4gICAgICBkdXJhdGlvbjogW3tcbiAgICAgICAgZHVyYXRpb246IFtpc051bWJlciwgJ2luaXRpYWwnLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFRyYW5zaXRpb24gVGltaW5nIEZ1bmN0aW9uXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb25cbiAgICAgICAqL1xuICAgICAgZWFzZTogW3tcbiAgICAgICAgZWFzZTogWydsaW5lYXInLCAnaW5pdGlhbCcsIHRoZW1lRWFzZSwgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBUcmFuc2l0aW9uIERlbGF5XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNpdGlvbi1kZWxheVxuICAgICAgICovXG4gICAgICBkZWxheTogW3tcbiAgICAgICAgZGVsYXk6IFtpc051bWJlciwgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBBbmltYXRpb25cbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9hbmltYXRpb25cbiAgICAgICAqL1xuICAgICAgYW5pbWF0ZTogW3tcbiAgICAgICAgYW5pbWF0ZTogWydub25lJywgdGhlbWVBbmltYXRlLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgIC8vIC0tLSBUcmFuc2Zvcm1zIC0tLVxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAvKipcbiAgICAgICAqIEJhY2tmYWNlIFZpc2liaWxpdHlcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9iYWNrZmFjZS12aXNpYmlsaXR5XG4gICAgICAgKi9cbiAgICAgIGJhY2tmYWNlOiBbe1xuICAgICAgICBiYWNrZmFjZTogWydoaWRkZW4nLCAndmlzaWJsZSddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogUGVyc3BlY3RpdmVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9wZXJzcGVjdGl2ZVxuICAgICAgICovXG4gICAgICBwZXJzcGVjdGl2ZTogW3tcbiAgICAgICAgcGVyc3BlY3RpdmU6IFt0aGVtZVBlcnNwZWN0aXZlLCBpc0FyYml0cmFyeVZhcmlhYmxlLCBpc0FyYml0cmFyeVZhbHVlXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFBlcnNwZWN0aXZlIE9yaWdpblxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3BlcnNwZWN0aXZlLW9yaWdpblxuICAgICAgICovXG4gICAgICAncGVyc3BlY3RpdmUtb3JpZ2luJzogW3tcbiAgICAgICAgJ3BlcnNwZWN0aXZlLW9yaWdpbic6IHNjYWxlUG9zaXRpb25XaXRoQXJiaXRyYXJ5KClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBSb3RhdGVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9yb3RhdGVcbiAgICAgICAqL1xuICAgICAgcm90YXRlOiBbe1xuICAgICAgICByb3RhdGU6IHNjYWxlUm90YXRlKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBSb3RhdGUgWFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3JvdGF0ZVxuICAgICAgICovXG4gICAgICAncm90YXRlLXgnOiBbe1xuICAgICAgICAncm90YXRlLXgnOiBzY2FsZVJvdGF0ZSgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogUm90YXRlIFlcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9yb3RhdGVcbiAgICAgICAqL1xuICAgICAgJ3JvdGF0ZS15JzogW3tcbiAgICAgICAgJ3JvdGF0ZS15Jzogc2NhbGVSb3RhdGUoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFJvdGF0ZSBaXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvcm90YXRlXG4gICAgICAgKi9cbiAgICAgICdyb3RhdGUteic6IFt7XG4gICAgICAgICdyb3RhdGUteic6IHNjYWxlUm90YXRlKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBTY2FsZVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3NjYWxlXG4gICAgICAgKi9cbiAgICAgIHNjYWxlOiBbe1xuICAgICAgICBzY2FsZTogc2NhbGVTY2FsZSgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU2NhbGUgWFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3NjYWxlXG4gICAgICAgKi9cbiAgICAgICdzY2FsZS14JzogW3tcbiAgICAgICAgJ3NjYWxlLXgnOiBzY2FsZVNjYWxlKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBTY2FsZSBZXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2NhbGVcbiAgICAgICAqL1xuICAgICAgJ3NjYWxlLXknOiBbe1xuICAgICAgICAnc2NhbGUteSc6IHNjYWxlU2NhbGUoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFNjYWxlIFpcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY2FsZVxuICAgICAgICovXG4gICAgICAnc2NhbGUteic6IFt7XG4gICAgICAgICdzY2FsZS16Jzogc2NhbGVTY2FsZSgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU2NhbGUgM0RcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY2FsZVxuICAgICAgICovXG4gICAgICAnc2NhbGUtM2QnOiBbJ3NjYWxlLTNkJ10sXG4gICAgICAvKipcbiAgICAgICAqIFNrZXdcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9za2V3XG4gICAgICAgKi9cbiAgICAgIHNrZXc6IFt7XG4gICAgICAgIHNrZXc6IHNjYWxlU2tldygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU2tldyBYXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2tld1xuICAgICAgICovXG4gICAgICAnc2tldy14JzogW3tcbiAgICAgICAgJ3NrZXcteCc6IHNjYWxlU2tldygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU2tldyBZXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2tld1xuICAgICAgICovXG4gICAgICAnc2tldy15JzogW3tcbiAgICAgICAgJ3NrZXcteSc6IHNjYWxlU2tldygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogVHJhbnNmb3JtXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNmb3JtXG4gICAgICAgKi9cbiAgICAgIHRyYW5zZm9ybTogW3tcbiAgICAgICAgdHJhbnNmb3JtOiBbaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZSwgJycsICdub25lJywgJ2dwdScsICdjcHUnXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFRyYW5zZm9ybSBPcmlnaW5cbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90cmFuc2Zvcm0tb3JpZ2luXG4gICAgICAgKi9cbiAgICAgICd0cmFuc2Zvcm0tb3JpZ2luJzogW3tcbiAgICAgICAgb3JpZ2luOiBzY2FsZVBvc2l0aW9uV2l0aEFyYml0cmFyeSgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogVHJhbnNmb3JtIFN0eWxlXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNmb3JtLXN0eWxlXG4gICAgICAgKi9cbiAgICAgICd0cmFuc2Zvcm0tc3R5bGUnOiBbe1xuICAgICAgICB0cmFuc2Zvcm06IFsnM2QnLCAnZmxhdCddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogVHJhbnNsYXRlXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNsYXRlXG4gICAgICAgKi9cbiAgICAgIHRyYW5zbGF0ZTogW3tcbiAgICAgICAgdHJhbnNsYXRlOiBzY2FsZVRyYW5zbGF0ZSgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogVHJhbnNsYXRlIFhcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90cmFuc2xhdGVcbiAgICAgICAqL1xuICAgICAgJ3RyYW5zbGF0ZS14JzogW3tcbiAgICAgICAgJ3RyYW5zbGF0ZS14Jzogc2NhbGVUcmFuc2xhdGUoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFRyYW5zbGF0ZSBZXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdHJhbnNsYXRlXG4gICAgICAgKi9cbiAgICAgICd0cmFuc2xhdGUteSc6IFt7XG4gICAgICAgICd0cmFuc2xhdGUteSc6IHNjYWxlVHJhbnNsYXRlKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBUcmFuc2xhdGUgWlxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RyYW5zbGF0ZVxuICAgICAgICovXG4gICAgICAndHJhbnNsYXRlLXonOiBbe1xuICAgICAgICAndHJhbnNsYXRlLXonOiBzY2FsZVRyYW5zbGF0ZSgpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogVHJhbnNsYXRlIE5vbmVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90cmFuc2xhdGVcbiAgICAgICAqL1xuICAgICAgJ3RyYW5zbGF0ZS1ub25lJzogWyd0cmFuc2xhdGUtbm9uZSddLFxuICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgICAvLyAtLS0gSW50ZXJhY3Rpdml0eSAtLS1cbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgLyoqXG4gICAgICAgKiBBY2NlbnQgQ29sb3JcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9hY2NlbnQtY29sb3JcbiAgICAgICAqL1xuICAgICAgYWNjZW50OiBbe1xuICAgICAgICBhY2NlbnQ6IHNjYWxlQ29sb3IoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIEFwcGVhcmFuY2VcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9hcHBlYXJhbmNlXG4gICAgICAgKi9cbiAgICAgIGFwcGVhcmFuY2U6IFt7XG4gICAgICAgIGFwcGVhcmFuY2U6IFsnbm9uZScsICdhdXRvJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBDYXJldCBDb2xvclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2p1c3QtaW4tdGltZS1tb2RlI2NhcmV0LWNvbG9yLXV0aWxpdGllc1xuICAgICAgICovXG4gICAgICAnY2FyZXQtY29sb3InOiBbe1xuICAgICAgICBjYXJldDogc2NhbGVDb2xvcigpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQ29sb3IgU2NoZW1lXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvY29sb3Itc2NoZW1lXG4gICAgICAgKi9cbiAgICAgICdjb2xvci1zY2hlbWUnOiBbe1xuICAgICAgICBzY2hlbWU6IFsnbm9ybWFsJywgJ2RhcmsnLCAnbGlnaHQnLCAnbGlnaHQtZGFyaycsICdvbmx5LWRhcmsnLCAnb25seS1saWdodCddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogQ3Vyc29yXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvY3Vyc29yXG4gICAgICAgKi9cbiAgICAgIGN1cnNvcjogW3tcbiAgICAgICAgY3Vyc29yOiBbJ2F1dG8nLCAnZGVmYXVsdCcsICdwb2ludGVyJywgJ3dhaXQnLCAndGV4dCcsICdtb3ZlJywgJ2hlbHAnLCAnbm90LWFsbG93ZWQnLCAnbm9uZScsICdjb250ZXh0LW1lbnUnLCAncHJvZ3Jlc3MnLCAnY2VsbCcsICdjcm9zc2hhaXInLCAndmVydGljYWwtdGV4dCcsICdhbGlhcycsICdjb3B5JywgJ25vLWRyb3AnLCAnZ3JhYicsICdncmFiYmluZycsICdhbGwtc2Nyb2xsJywgJ2NvbC1yZXNpemUnLCAncm93LXJlc2l6ZScsICduLXJlc2l6ZScsICdlLXJlc2l6ZScsICdzLXJlc2l6ZScsICd3LXJlc2l6ZScsICduZS1yZXNpemUnLCAnbnctcmVzaXplJywgJ3NlLXJlc2l6ZScsICdzdy1yZXNpemUnLCAnZXctcmVzaXplJywgJ25zLXJlc2l6ZScsICduZXN3LXJlc2l6ZScsICdud3NlLXJlc2l6ZScsICd6b29tLWluJywgJ3pvb20tb3V0JywgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBGaWVsZCBTaXppbmdcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9maWVsZC1zaXppbmdcbiAgICAgICAqL1xuICAgICAgJ2ZpZWxkLXNpemluZyc6IFt7XG4gICAgICAgICdmaWVsZC1zaXppbmcnOiBbJ2ZpeGVkJywgJ2NvbnRlbnQnXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFBvaW50ZXIgRXZlbnRzXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvcG9pbnRlci1ldmVudHNcbiAgICAgICAqL1xuICAgICAgJ3BvaW50ZXItZXZlbnRzJzogW3tcbiAgICAgICAgJ3BvaW50ZXItZXZlbnRzJzogWydhdXRvJywgJ25vbmUnXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFJlc2l6ZVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Jlc2l6ZVxuICAgICAgICovXG4gICAgICByZXNpemU6IFt7XG4gICAgICAgIHJlc2l6ZTogWydub25lJywgJycsICd5JywgJ3gnXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFNjcm9sbCBCZWhhdmlvclxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1iZWhhdmlvclxuICAgICAgICovXG4gICAgICAnc2Nyb2xsLWJlaGF2aW9yJzogW3tcbiAgICAgICAgc2Nyb2xsOiBbJ2F1dG8nLCAnc21vb3RoJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBTY3JvbGwgTWFyZ2luXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLW1hcmdpblxuICAgICAgICovXG4gICAgICAnc2Nyb2xsLW0nOiBbe1xuICAgICAgICAnc2Nyb2xsLW0nOiBzY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU2Nyb2xsIE1hcmdpbiBJbmxpbmVcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtbWFyZ2luXG4gICAgICAgKi9cbiAgICAgICdzY3JvbGwtbXgnOiBbe1xuICAgICAgICAnc2Nyb2xsLW14Jzogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFNjcm9sbCBNYXJnaW4gQmxvY2tcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtbWFyZ2luXG4gICAgICAgKi9cbiAgICAgICdzY3JvbGwtbXknOiBbe1xuICAgICAgICAnc2Nyb2xsLW15Jzogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFNjcm9sbCBNYXJnaW4gSW5saW5lIFN0YXJ0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLW1hcmdpblxuICAgICAgICovXG4gICAgICAnc2Nyb2xsLW1zJzogW3tcbiAgICAgICAgJ3Njcm9sbC1tcyc6IHNjYWxlVW5hbWJpZ3VvdXNTcGFjaW5nKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBTY3JvbGwgTWFyZ2luIElubGluZSBFbmRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtbWFyZ2luXG4gICAgICAgKi9cbiAgICAgICdzY3JvbGwtbWUnOiBbe1xuICAgICAgICAnc2Nyb2xsLW1lJzogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFNjcm9sbCBNYXJnaW4gQmxvY2sgU3RhcnRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtbWFyZ2luXG4gICAgICAgKi9cbiAgICAgICdzY3JvbGwtbWJzJzogW3tcbiAgICAgICAgJ3Njcm9sbC1tYnMnOiBzY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU2Nyb2xsIE1hcmdpbiBCbG9jayBFbmRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtbWFyZ2luXG4gICAgICAgKi9cbiAgICAgICdzY3JvbGwtbWJlJzogW3tcbiAgICAgICAgJ3Njcm9sbC1tYmUnOiBzY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU2Nyb2xsIE1hcmdpbiBUb3BcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtbWFyZ2luXG4gICAgICAgKi9cbiAgICAgICdzY3JvbGwtbXQnOiBbe1xuICAgICAgICAnc2Nyb2xsLW10Jzogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFNjcm9sbCBNYXJnaW4gUmlnaHRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtbWFyZ2luXG4gICAgICAgKi9cbiAgICAgICdzY3JvbGwtbXInOiBbe1xuICAgICAgICAnc2Nyb2xsLW1yJzogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFNjcm9sbCBNYXJnaW4gQm90dG9tXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLW1hcmdpblxuICAgICAgICovXG4gICAgICAnc2Nyb2xsLW1iJzogW3tcbiAgICAgICAgJ3Njcm9sbC1tYic6IHNjYWxlVW5hbWJpZ3VvdXNTcGFjaW5nKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBTY3JvbGwgTWFyZ2luIExlZnRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtbWFyZ2luXG4gICAgICAgKi9cbiAgICAgICdzY3JvbGwtbWwnOiBbe1xuICAgICAgICAnc2Nyb2xsLW1sJzogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFNjcm9sbCBQYWRkaW5nXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXBhZGRpbmdcbiAgICAgICAqL1xuICAgICAgJ3Njcm9sbC1wJzogW3tcbiAgICAgICAgJ3Njcm9sbC1wJzogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFNjcm9sbCBQYWRkaW5nIElubGluZVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1wYWRkaW5nXG4gICAgICAgKi9cbiAgICAgICdzY3JvbGwtcHgnOiBbe1xuICAgICAgICAnc2Nyb2xsLXB4Jzogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFNjcm9sbCBQYWRkaW5nIEJsb2NrXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXBhZGRpbmdcbiAgICAgICAqL1xuICAgICAgJ3Njcm9sbC1weSc6IFt7XG4gICAgICAgICdzY3JvbGwtcHknOiBzY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU2Nyb2xsIFBhZGRpbmcgSW5saW5lIFN0YXJ0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXBhZGRpbmdcbiAgICAgICAqL1xuICAgICAgJ3Njcm9sbC1wcyc6IFt7XG4gICAgICAgICdzY3JvbGwtcHMnOiBzY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU2Nyb2xsIFBhZGRpbmcgSW5saW5lIEVuZFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1wYWRkaW5nXG4gICAgICAgKi9cbiAgICAgICdzY3JvbGwtcGUnOiBbe1xuICAgICAgICAnc2Nyb2xsLXBlJzogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFNjcm9sbCBQYWRkaW5nIEJsb2NrIFN0YXJ0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXBhZGRpbmdcbiAgICAgICAqL1xuICAgICAgJ3Njcm9sbC1wYnMnOiBbe1xuICAgICAgICAnc2Nyb2xsLXBicyc6IHNjYWxlVW5hbWJpZ3VvdXNTcGFjaW5nKClcbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBTY3JvbGwgUGFkZGluZyBCbG9jayBFbmRcbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy9zY3JvbGwtcGFkZGluZ1xuICAgICAgICovXG4gICAgICAnc2Nyb2xsLXBiZSc6IFt7XG4gICAgICAgICdzY3JvbGwtcGJlJzogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFNjcm9sbCBQYWRkaW5nIFRvcFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1wYWRkaW5nXG4gICAgICAgKi9cbiAgICAgICdzY3JvbGwtcHQnOiBbe1xuICAgICAgICAnc2Nyb2xsLXB0Jzogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFNjcm9sbCBQYWRkaW5nIFJpZ2h0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXBhZGRpbmdcbiAgICAgICAqL1xuICAgICAgJ3Njcm9sbC1wcic6IFt7XG4gICAgICAgICdzY3JvbGwtcHInOiBzY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU2Nyb2xsIFBhZGRpbmcgQm90dG9tXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXBhZGRpbmdcbiAgICAgICAqL1xuICAgICAgJ3Njcm9sbC1wYic6IFt7XG4gICAgICAgICdzY3JvbGwtcGInOiBzY2FsZVVuYW1iaWd1b3VzU3BhY2luZygpXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU2Nyb2xsIFBhZGRpbmcgTGVmdFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1wYWRkaW5nXG4gICAgICAgKi9cbiAgICAgICdzY3JvbGwtcGwnOiBbe1xuICAgICAgICAnc2Nyb2xsLXBsJzogc2NhbGVVbmFtYmlndW91c1NwYWNpbmcoKVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFNjcm9sbCBTbmFwIEFsaWduXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXNuYXAtYWxpZ25cbiAgICAgICAqL1xuICAgICAgJ3NuYXAtYWxpZ24nOiBbe1xuICAgICAgICBzbmFwOiBbJ3N0YXJ0JywgJ2VuZCcsICdjZW50ZXInLCAnYWxpZ24tbm9uZSddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU2Nyb2xsIFNuYXAgU3RvcFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1zbmFwLXN0b3BcbiAgICAgICAqL1xuICAgICAgJ3NuYXAtc3RvcCc6IFt7XG4gICAgICAgIHNuYXA6IFsnbm9ybWFsJywgJ2Fsd2F5cyddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU2Nyb2xsIFNuYXAgVHlwZVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3Njcm9sbC1zbmFwLXR5cGVcbiAgICAgICAqL1xuICAgICAgJ3NuYXAtdHlwZSc6IFt7XG4gICAgICAgIHNuYXA6IFsnbm9uZScsICd4JywgJ3knLCAnYm90aCddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU2Nyb2xsIFNuYXAgVHlwZSBTdHJpY3RuZXNzXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc2Nyb2xsLXNuYXAtdHlwZVxuICAgICAgICovXG4gICAgICAnc25hcC1zdHJpY3RuZXNzJzogW3tcbiAgICAgICAgc25hcDogWydtYW5kYXRvcnknLCAncHJveGltaXR5J11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBUb3VjaCBBY3Rpb25cbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90b3VjaC1hY3Rpb25cbiAgICAgICAqL1xuICAgICAgdG91Y2g6IFt7XG4gICAgICAgIHRvdWNoOiBbJ2F1dG8nLCAnbm9uZScsICdtYW5pcHVsYXRpb24nXVxuICAgICAgfV0sXG4gICAgICAvKipcbiAgICAgICAqIFRvdWNoIEFjdGlvbiBYXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdG91Y2gtYWN0aW9uXG4gICAgICAgKi9cbiAgICAgICd0b3VjaC14JzogW3tcbiAgICAgICAgJ3RvdWNoLXBhbic6IFsneCcsICdsZWZ0JywgJ3JpZ2h0J11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBUb3VjaCBBY3Rpb24gWVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3RvdWNoLWFjdGlvblxuICAgICAgICovXG4gICAgICAndG91Y2gteSc6IFt7XG4gICAgICAgICd0b3VjaC1wYW4nOiBbJ3knLCAndXAnLCAnZG93biddXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogVG91Y2ggQWN0aW9uIFBpbmNoIFpvb21cbiAgICAgICAqIEBzZWUgaHR0cHM6Ly90YWlsd2luZGNzcy5jb20vZG9jcy90b3VjaC1hY3Rpb25cbiAgICAgICAqL1xuICAgICAgJ3RvdWNoLXB6JzogWyd0b3VjaC1waW5jaC16b29tJ10sXG4gICAgICAvKipcbiAgICAgICAqIFVzZXIgU2VsZWN0XG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvdXNlci1zZWxlY3RcbiAgICAgICAqL1xuICAgICAgc2VsZWN0OiBbe1xuICAgICAgICBzZWxlY3Q6IFsnbm9uZScsICd0ZXh0JywgJ2FsbCcsICdhdXRvJ11cbiAgICAgIH1dLFxuICAgICAgLyoqXG4gICAgICAgKiBXaWxsIENoYW5nZVxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL3dpbGwtY2hhbmdlXG4gICAgICAgKi9cbiAgICAgICd3aWxsLWNoYW5nZSc6IFt7XG4gICAgICAgICd3aWxsLWNoYW5nZSc6IFsnYXV0bycsICdzY3JvbGwnLCAnY29udGVudHMnLCAndHJhbnNmb3JtJywgaXNBcmJpdHJhcnlWYXJpYWJsZSwgaXNBcmJpdHJhcnlWYWx1ZV1cbiAgICAgIH1dLFxuICAgICAgLy8gLS0tLS0tLS0tLS1cbiAgICAgIC8vIC0tLSBTVkcgLS0tXG4gICAgICAvLyAtLS0tLS0tLS0tLVxuICAgICAgLyoqXG4gICAgICAgKiBGaWxsXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3MvZmlsbFxuICAgICAgICovXG4gICAgICBmaWxsOiBbe1xuICAgICAgICBmaWxsOiBbJ25vbmUnLCAuLi5zY2FsZUNvbG9yKCldXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU3Ryb2tlIFdpZHRoXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc3Ryb2tlLXdpZHRoXG4gICAgICAgKi9cbiAgICAgICdzdHJva2Utdyc6IFt7XG4gICAgICAgIHN0cm9rZTogW2lzTnVtYmVyLCBpc0FyYml0cmFyeVZhcmlhYmxlTGVuZ3RoLCBpc0FyYml0cmFyeUxlbmd0aCwgaXNBcmJpdHJhcnlOdW1iZXJdXG4gICAgICB9XSxcbiAgICAgIC8qKlxuICAgICAgICogU3Ryb2tlXG4gICAgICAgKiBAc2VlIGh0dHBzOi8vdGFpbHdpbmRjc3MuY29tL2RvY3Mvc3Ryb2tlXG4gICAgICAgKi9cbiAgICAgIHN0cm9rZTogW3tcbiAgICAgICAgc3Ryb2tlOiBbJ25vbmUnLCAuLi5zY2FsZUNvbG9yKCldXG4gICAgICB9XSxcbiAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgICAgLy8gLS0tIEFjY2Vzc2liaWxpdHkgLS0tXG4gICAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAgIC8qKlxuICAgICAgICogRm9yY2VkIENvbG9yIEFkanVzdFxuICAgICAgICogQHNlZSBodHRwczovL3RhaWx3aW5kY3NzLmNvbS9kb2NzL2ZvcmNlZC1jb2xvci1hZGp1c3RcbiAgICAgICAqL1xuICAgICAgJ2ZvcmNlZC1jb2xvci1hZGp1c3QnOiBbe1xuICAgICAgICAnZm9yY2VkLWNvbG9yLWFkanVzdCc6IFsnYXV0bycsICdub25lJ11cbiAgICAgIH1dXG4gICAgfSxcbiAgICBjb25mbGljdGluZ0NsYXNzR3JvdXBzOiB7XG4gICAgICBvdmVyZmxvdzogWydvdmVyZmxvdy14JywgJ292ZXJmbG93LXknXSxcbiAgICAgIG92ZXJzY3JvbGw6IFsnb3ZlcnNjcm9sbC14JywgJ292ZXJzY3JvbGwteSddLFxuICAgICAgaW5zZXQ6IFsnaW5zZXQteCcsICdpbnNldC15JywgJ2luc2V0LWJzJywgJ2luc2V0LWJlJywgJ3N0YXJ0JywgJ2VuZCcsICd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXSxcbiAgICAgICdpbnNldC14JzogWydyaWdodCcsICdsZWZ0J10sXG4gICAgICAnaW5zZXQteSc6IFsndG9wJywgJ2JvdHRvbSddLFxuICAgICAgZmxleDogWydiYXNpcycsICdncm93JywgJ3NocmluayddLFxuICAgICAgZ2FwOiBbJ2dhcC14JywgJ2dhcC15J10sXG4gICAgICBwOiBbJ3B4JywgJ3B5JywgJ3BzJywgJ3BlJywgJ3BicycsICdwYmUnLCAncHQnLCAncHInLCAncGInLCAncGwnXSxcbiAgICAgIHB4OiBbJ3ByJywgJ3BsJ10sXG4gICAgICBweTogWydwdCcsICdwYiddLFxuICAgICAgbTogWydteCcsICdteScsICdtcycsICdtZScsICdtYnMnLCAnbWJlJywgJ210JywgJ21yJywgJ21iJywgJ21sJ10sXG4gICAgICBteDogWydtcicsICdtbCddLFxuICAgICAgbXk6IFsnbXQnLCAnbWInXSxcbiAgICAgIHNpemU6IFsndycsICdoJ10sXG4gICAgICAnZm9udC1zaXplJzogWydsZWFkaW5nJ10sXG4gICAgICAnZnZuLW5vcm1hbCc6IFsnZnZuLW9yZGluYWwnLCAnZnZuLXNsYXNoZWQtemVybycsICdmdm4tZmlndXJlJywgJ2Z2bi1zcGFjaW5nJywgJ2Z2bi1mcmFjdGlvbiddLFxuICAgICAgJ2Z2bi1vcmRpbmFsJzogWydmdm4tbm9ybWFsJ10sXG4gICAgICAnZnZuLXNsYXNoZWQtemVybyc6IFsnZnZuLW5vcm1hbCddLFxuICAgICAgJ2Z2bi1maWd1cmUnOiBbJ2Z2bi1ub3JtYWwnXSxcbiAgICAgICdmdm4tc3BhY2luZyc6IFsnZnZuLW5vcm1hbCddLFxuICAgICAgJ2Z2bi1mcmFjdGlvbic6IFsnZnZuLW5vcm1hbCddLFxuICAgICAgJ2xpbmUtY2xhbXAnOiBbJ2Rpc3BsYXknLCAnb3ZlcmZsb3cnXSxcbiAgICAgIHJvdW5kZWQ6IFsncm91bmRlZC1zJywgJ3JvdW5kZWQtZScsICdyb3VuZGVkLXQnLCAncm91bmRlZC1yJywgJ3JvdW5kZWQtYicsICdyb3VuZGVkLWwnLCAncm91bmRlZC1zcycsICdyb3VuZGVkLXNlJywgJ3JvdW5kZWQtZWUnLCAncm91bmRlZC1lcycsICdyb3VuZGVkLXRsJywgJ3JvdW5kZWQtdHInLCAncm91bmRlZC1icicsICdyb3VuZGVkLWJsJ10sXG4gICAgICAncm91bmRlZC1zJzogWydyb3VuZGVkLXNzJywgJ3JvdW5kZWQtZXMnXSxcbiAgICAgICdyb3VuZGVkLWUnOiBbJ3JvdW5kZWQtc2UnLCAncm91bmRlZC1lZSddLFxuICAgICAgJ3JvdW5kZWQtdCc6IFsncm91bmRlZC10bCcsICdyb3VuZGVkLXRyJ10sXG4gICAgICAncm91bmRlZC1yJzogWydyb3VuZGVkLXRyJywgJ3JvdW5kZWQtYnInXSxcbiAgICAgICdyb3VuZGVkLWInOiBbJ3JvdW5kZWQtYnInLCAncm91bmRlZC1ibCddLFxuICAgICAgJ3JvdW5kZWQtbCc6IFsncm91bmRlZC10bCcsICdyb3VuZGVkLWJsJ10sXG4gICAgICAnYm9yZGVyLXNwYWNpbmcnOiBbJ2JvcmRlci1zcGFjaW5nLXgnLCAnYm9yZGVyLXNwYWNpbmcteSddLFxuICAgICAgJ2JvcmRlci13JzogWydib3JkZXItdy14JywgJ2JvcmRlci13LXknLCAnYm9yZGVyLXctcycsICdib3JkZXItdy1lJywgJ2JvcmRlci13LWJzJywgJ2JvcmRlci13LWJlJywgJ2JvcmRlci13LXQnLCAnYm9yZGVyLXctcicsICdib3JkZXItdy1iJywgJ2JvcmRlci13LWwnXSxcbiAgICAgICdib3JkZXItdy14JzogWydib3JkZXItdy1yJywgJ2JvcmRlci13LWwnXSxcbiAgICAgICdib3JkZXItdy15JzogWydib3JkZXItdy10JywgJ2JvcmRlci13LWInXSxcbiAgICAgICdib3JkZXItY29sb3InOiBbJ2JvcmRlci1jb2xvci14JywgJ2JvcmRlci1jb2xvci15JywgJ2JvcmRlci1jb2xvci1zJywgJ2JvcmRlci1jb2xvci1lJywgJ2JvcmRlci1jb2xvci1icycsICdib3JkZXItY29sb3ItYmUnLCAnYm9yZGVyLWNvbG9yLXQnLCAnYm9yZGVyLWNvbG9yLXInLCAnYm9yZGVyLWNvbG9yLWInLCAnYm9yZGVyLWNvbG9yLWwnXSxcbiAgICAgICdib3JkZXItY29sb3IteCc6IFsnYm9yZGVyLWNvbG9yLXInLCAnYm9yZGVyLWNvbG9yLWwnXSxcbiAgICAgICdib3JkZXItY29sb3IteSc6IFsnYm9yZGVyLWNvbG9yLXQnLCAnYm9yZGVyLWNvbG9yLWInXSxcbiAgICAgIHRyYW5zbGF0ZTogWyd0cmFuc2xhdGUteCcsICd0cmFuc2xhdGUteScsICd0cmFuc2xhdGUtbm9uZSddLFxuICAgICAgJ3RyYW5zbGF0ZS1ub25lJzogWyd0cmFuc2xhdGUnLCAndHJhbnNsYXRlLXgnLCAndHJhbnNsYXRlLXknLCAndHJhbnNsYXRlLXonXSxcbiAgICAgICdzY3JvbGwtbSc6IFsnc2Nyb2xsLW14JywgJ3Njcm9sbC1teScsICdzY3JvbGwtbXMnLCAnc2Nyb2xsLW1lJywgJ3Njcm9sbC1tYnMnLCAnc2Nyb2xsLW1iZScsICdzY3JvbGwtbXQnLCAnc2Nyb2xsLW1yJywgJ3Njcm9sbC1tYicsICdzY3JvbGwtbWwnXSxcbiAgICAgICdzY3JvbGwtbXgnOiBbJ3Njcm9sbC1tcicsICdzY3JvbGwtbWwnXSxcbiAgICAgICdzY3JvbGwtbXknOiBbJ3Njcm9sbC1tdCcsICdzY3JvbGwtbWInXSxcbiAgICAgICdzY3JvbGwtcCc6IFsnc2Nyb2xsLXB4JywgJ3Njcm9sbC1weScsICdzY3JvbGwtcHMnLCAnc2Nyb2xsLXBlJywgJ3Njcm9sbC1wYnMnLCAnc2Nyb2xsLXBiZScsICdzY3JvbGwtcHQnLCAnc2Nyb2xsLXByJywgJ3Njcm9sbC1wYicsICdzY3JvbGwtcGwnXSxcbiAgICAgICdzY3JvbGwtcHgnOiBbJ3Njcm9sbC1wcicsICdzY3JvbGwtcGwnXSxcbiAgICAgICdzY3JvbGwtcHknOiBbJ3Njcm9sbC1wdCcsICdzY3JvbGwtcGInXSxcbiAgICAgIHRvdWNoOiBbJ3RvdWNoLXgnLCAndG91Y2gteScsICd0b3VjaC1weiddLFxuICAgICAgJ3RvdWNoLXgnOiBbJ3RvdWNoJ10sXG4gICAgICAndG91Y2gteSc6IFsndG91Y2gnXSxcbiAgICAgICd0b3VjaC1weic6IFsndG91Y2gnXVxuICAgIH0sXG4gICAgY29uZmxpY3RpbmdDbGFzc0dyb3VwTW9kaWZpZXJzOiB7XG4gICAgICAnZm9udC1zaXplJzogWydsZWFkaW5nJ11cbiAgICB9LFxuICAgIG9yZGVyU2Vuc2l0aXZlTW9kaWZpZXJzOiBbJyonLCAnKionLCAnYWZ0ZXInLCAnYmFja2Ryb3AnLCAnYmVmb3JlJywgJ2RldGFpbHMtY29udGVudCcsICdmaWxlJywgJ2ZpcnN0LWxldHRlcicsICdmaXJzdC1saW5lJywgJ21hcmtlcicsICdwbGFjZWhvbGRlcicsICdzZWxlY3Rpb24nXVxuICB9O1xufTtcblxuLyoqXG4gKiBAcGFyYW0gYmFzZUNvbmZpZyBDb25maWcgd2hlcmUgb3RoZXIgY29uZmlnIHdpbGwgYmUgbWVyZ2VkIGludG8uIFRoaXMgb2JqZWN0IHdpbGwgYmUgbXV0YXRlZC5cbiAqIEBwYXJhbSBjb25maWdFeHRlbnNpb24gUGFydGlhbCBjb25maWcgdG8gbWVyZ2UgaW50byB0aGUgYGJhc2VDb25maWdgLlxuICovXG5jb25zdCBtZXJnZUNvbmZpZ3MgPSAoYmFzZUNvbmZpZywge1xuICBjYWNoZVNpemUsXG4gIHByZWZpeCxcbiAgZXhwZXJpbWVudGFsUGFyc2VDbGFzc05hbWUsXG4gIGV4dGVuZCA9IHt9LFxuICBvdmVycmlkZSA9IHt9XG59KSA9PiB7XG4gIG92ZXJyaWRlUHJvcGVydHkoYmFzZUNvbmZpZywgJ2NhY2hlU2l6ZScsIGNhY2hlU2l6ZSk7XG4gIG92ZXJyaWRlUHJvcGVydHkoYmFzZUNvbmZpZywgJ3ByZWZpeCcsIHByZWZpeCk7XG4gIG92ZXJyaWRlUHJvcGVydHkoYmFzZUNvbmZpZywgJ2V4cGVyaW1lbnRhbFBhcnNlQ2xhc3NOYW1lJywgZXhwZXJpbWVudGFsUGFyc2VDbGFzc05hbWUpO1xuICBvdmVycmlkZUNvbmZpZ1Byb3BlcnRpZXMoYmFzZUNvbmZpZy50aGVtZSwgb3ZlcnJpZGUudGhlbWUpO1xuICBvdmVycmlkZUNvbmZpZ1Byb3BlcnRpZXMoYmFzZUNvbmZpZy5jbGFzc0dyb3Vwcywgb3ZlcnJpZGUuY2xhc3NHcm91cHMpO1xuICBvdmVycmlkZUNvbmZpZ1Byb3BlcnRpZXMoYmFzZUNvbmZpZy5jb25mbGljdGluZ0NsYXNzR3JvdXBzLCBvdmVycmlkZS5jb25mbGljdGluZ0NsYXNzR3JvdXBzKTtcbiAgb3ZlcnJpZGVDb25maWdQcm9wZXJ0aWVzKGJhc2VDb25maWcuY29uZmxpY3RpbmdDbGFzc0dyb3VwTW9kaWZpZXJzLCBvdmVycmlkZS5jb25mbGljdGluZ0NsYXNzR3JvdXBNb2RpZmllcnMpO1xuICBvdmVycmlkZVByb3BlcnR5KGJhc2VDb25maWcsICdvcmRlclNlbnNpdGl2ZU1vZGlmaWVycycsIG92ZXJyaWRlLm9yZGVyU2Vuc2l0aXZlTW9kaWZpZXJzKTtcbiAgbWVyZ2VDb25maWdQcm9wZXJ0aWVzKGJhc2VDb25maWcudGhlbWUsIGV4dGVuZC50aGVtZSk7XG4gIG1lcmdlQ29uZmlnUHJvcGVydGllcyhiYXNlQ29uZmlnLmNsYXNzR3JvdXBzLCBleHRlbmQuY2xhc3NHcm91cHMpO1xuICBtZXJnZUNvbmZpZ1Byb3BlcnRpZXMoYmFzZUNvbmZpZy5jb25mbGljdGluZ0NsYXNzR3JvdXBzLCBleHRlbmQuY29uZmxpY3RpbmdDbGFzc0dyb3Vwcyk7XG4gIG1lcmdlQ29uZmlnUHJvcGVydGllcyhiYXNlQ29uZmlnLmNvbmZsaWN0aW5nQ2xhc3NHcm91cE1vZGlmaWVycywgZXh0ZW5kLmNvbmZsaWN0aW5nQ2xhc3NHcm91cE1vZGlmaWVycyk7XG4gIG1lcmdlQXJyYXlQcm9wZXJ0aWVzKGJhc2VDb25maWcsIGV4dGVuZCwgJ29yZGVyU2Vuc2l0aXZlTW9kaWZpZXJzJyk7XG4gIHJldHVybiBiYXNlQ29uZmlnO1xufTtcbmNvbnN0IG92ZXJyaWRlUHJvcGVydHkgPSAoYmFzZU9iamVjdCwgb3ZlcnJpZGVLZXksIG92ZXJyaWRlVmFsdWUpID0+IHtcbiAgaWYgKG92ZXJyaWRlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGJhc2VPYmplY3Rbb3ZlcnJpZGVLZXldID0gb3ZlcnJpZGVWYWx1ZTtcbiAgfVxufTtcbmNvbnN0IG92ZXJyaWRlQ29uZmlnUHJvcGVydGllcyA9IChiYXNlT2JqZWN0LCBvdmVycmlkZU9iamVjdCkgPT4ge1xuICBpZiAob3ZlcnJpZGVPYmplY3QpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvdmVycmlkZU9iamVjdCkge1xuICAgICAgb3ZlcnJpZGVQcm9wZXJ0eShiYXNlT2JqZWN0LCBrZXksIG92ZXJyaWRlT2JqZWN0W2tleV0pO1xuICAgIH1cbiAgfVxufTtcbmNvbnN0IG1lcmdlQ29uZmlnUHJvcGVydGllcyA9IChiYXNlT2JqZWN0LCBtZXJnZU9iamVjdCkgPT4ge1xuICBpZiAobWVyZ2VPYmplY3QpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBtZXJnZU9iamVjdCkge1xuICAgICAgbWVyZ2VBcnJheVByb3BlcnRpZXMoYmFzZU9iamVjdCwgbWVyZ2VPYmplY3QsIGtleSk7XG4gICAgfVxuICB9XG59O1xuY29uc3QgbWVyZ2VBcnJheVByb3BlcnRpZXMgPSAoYmFzZU9iamVjdCwgbWVyZ2VPYmplY3QsIGtleSkgPT4ge1xuICBjb25zdCBtZXJnZVZhbHVlID0gbWVyZ2VPYmplY3Rba2V5XTtcbiAgaWYgKG1lcmdlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGJhc2VPYmplY3Rba2V5XSA9IGJhc2VPYmplY3Rba2V5XSA/IGJhc2VPYmplY3Rba2V5XS5jb25jYXQobWVyZ2VWYWx1ZSkgOiBtZXJnZVZhbHVlO1xuICB9XG59O1xuY29uc3QgZXh0ZW5kVGFpbHdpbmRNZXJnZSA9IChjb25maWdFeHRlbnNpb24sIC4uLmNyZWF0ZUNvbmZpZykgPT4gdHlwZW9mIGNvbmZpZ0V4dGVuc2lvbiA9PT0gJ2Z1bmN0aW9uJyA/IGNyZWF0ZVRhaWx3aW5kTWVyZ2UoZ2V0RGVmYXVsdENvbmZpZywgY29uZmlnRXh0ZW5zaW9uLCAuLi5jcmVhdGVDb25maWcpIDogY3JlYXRlVGFpbHdpbmRNZXJnZSgoKSA9PiBtZXJnZUNvbmZpZ3MoZ2V0RGVmYXVsdENvbmZpZygpLCBjb25maWdFeHRlbnNpb24pLCAuLi5jcmVhdGVDb25maWcpO1xuY29uc3QgdHdNZXJnZSA9IC8qI19fUFVSRV9fKi9jcmVhdGVUYWlsd2luZE1lcmdlKGdldERlZmF1bHRDb25maWcpO1xuZXhwb3J0IHsgY3JlYXRlVGFpbHdpbmRNZXJnZSwgZXh0ZW5kVGFpbHdpbmRNZXJnZSwgZnJvbVRoZW1lLCBnZXREZWZhdWx0Q29uZmlnLCBtZXJnZUNvbmZpZ3MsIHR3Sm9pbiwgdHdNZXJnZSwgdmFsaWRhdG9ycyB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVuZGxlLW1qcy5tanMubWFwXG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/tailwind-merge/dist/bundle-mjs.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/tslib/tslib.es6.mjs":
|
||
/*!******************************************!*\
|
||
!*** ./node_modules/tslib/tslib.es6.mjs ***!
|
||
\******************************************/
|
||
/***/ ((__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 */ __addDisposableResource: () => (/* binding */ __addDisposableResource),\n/* harmony export */ __assign: () => (/* binding */ __assign),\n/* harmony export */ __asyncDelegator: () => (/* binding */ __asyncDelegator),\n/* harmony export */ __asyncGenerator: () => (/* binding */ __asyncGenerator),\n/* harmony export */ __asyncValues: () => (/* binding */ __asyncValues),\n/* harmony export */ __await: () => (/* binding */ __await),\n/* harmony export */ __awaiter: () => (/* binding */ __awaiter),\n/* harmony export */ __classPrivateFieldGet: () => (/* binding */ __classPrivateFieldGet),\n/* harmony export */ __classPrivateFieldIn: () => (/* binding */ __classPrivateFieldIn),\n/* harmony export */ __classPrivateFieldSet: () => (/* binding */ __classPrivateFieldSet),\n/* harmony export */ __createBinding: () => (/* binding */ __createBinding),\n/* harmony export */ __decorate: () => (/* binding */ __decorate),\n/* harmony export */ __disposeResources: () => (/* binding */ __disposeResources),\n/* harmony export */ __esDecorate: () => (/* binding */ __esDecorate),\n/* harmony export */ __exportStar: () => (/* binding */ __exportStar),\n/* harmony export */ __extends: () => (/* binding */ __extends),\n/* harmony export */ __generator: () => (/* binding */ __generator),\n/* harmony export */ __importDefault: () => (/* binding */ __importDefault),\n/* harmony export */ __importStar: () => (/* binding */ __importStar),\n/* harmony export */ __makeTemplateObject: () => (/* binding */ __makeTemplateObject),\n/* harmony export */ __metadata: () => (/* binding */ __metadata),\n/* harmony export */ __param: () => (/* binding */ __param),\n/* harmony export */ __propKey: () => (/* binding */ __propKey),\n/* harmony export */ __read: () => (/* binding */ __read),\n/* harmony export */ __rest: () => (/* binding */ __rest),\n/* harmony export */ __rewriteRelativeImportExtension: () => (/* binding */ __rewriteRelativeImportExtension),\n/* harmony export */ __runInitializers: () => (/* binding */ __runInitializers),\n/* harmony export */ __setFunctionName: () => (/* binding */ __setFunctionName),\n/* harmony export */ __spread: () => (/* binding */ __spread),\n/* harmony export */ __spreadArray: () => (/* binding */ __spreadArray),\n/* harmony export */ __spreadArrays: () => (/* binding */ __spreadArrays),\n/* harmony export */ __values: () => (/* binding */ __values),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nfunction __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nvar __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nfunction __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nfunction __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nfunction __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nfunction __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nfunction __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nfunction __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nfunction __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nfunction __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nfunction __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nvar __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nfunction __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nfunction __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nfunction __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nfunction __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nfunction __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nfunction __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nfunction __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nfunction __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nfunction __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nfunction __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nfunction __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nfunction __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nfunction __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nfunction __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nfunction __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nfunction __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nfunction __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nfunction __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nfunction __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVMsZ0JBQWdCLHNDQUFzQyxrQkFBa0I7QUFDakYsd0JBQXdCO0FBQ3hCO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFTztBQUNQO0FBQ0EsK0NBQStDLE9BQU87QUFDdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxjQUFjO0FBQ3pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRU87QUFDUDtBQUNBO0FBQ0EsMkNBQTJDLFFBQVE7QUFDbkQ7QUFDQTs7QUFFTztBQUNQLGtDQUFrQztBQUNsQzs7QUFFTztBQUNQLHVCQUF1Qix1RkFBdUY7QUFDOUc7QUFDQTtBQUNBLHlHQUF5RztBQUN6RztBQUNBLHNDQUFzQyxRQUFRO0FBQzlDO0FBQ0EsZ0VBQWdFO0FBQ2hFO0FBQ0EsOENBQThDLHlGQUF5RjtBQUN2SSw4REFBOEQsMkNBQTJDO0FBQ3pHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0Esa0JBQWtCLHlCQUF5QjtBQUMzQztBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7O0FBRU87QUFDUDtBQUNBLDRDQUE0Qyx5RUFBeUU7QUFDckg7O0FBRU87QUFDUDtBQUNBOztBQUVPO0FBQ1AsMEJBQTBCLCtEQUErRCxpQkFBaUI7QUFDMUc7QUFDQSxrQ0FBa0MsTUFBTSwrQkFBK0IsWUFBWTtB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUZBQXVGLFNBQVMsZ0JBQWdCO0FBQ2hIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFTztBQUNQO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7O0FBRUEsaUVBQWU7QUFDZjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQyxFQUFDIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXG5cblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxuXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1Jcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UsIFN1cHByZXNzZWRFcnJvciwgU3ltYm9sLCBJdGVyYXRvciAqL1xuXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcbiAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcbiAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbn1cblxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xuICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xuICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gIH1cbiAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgIHRbcF0gPSBzW3BdO1xuICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgIH1cbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XG4gIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XG4gIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XG4gIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xuICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xuICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cbiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcbiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XG4gIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xuICB2YXIgXywgZG9uZSA9IGZhbHNlO1xuICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xuICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XG4gICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xuICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XG4gICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XG4gICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcbiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XG4gICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcbiAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xuICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXyk7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcbiAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcbiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XG4gICAgICB9XG4gIH1cbiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xuICBkb25lID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XG4gIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xuICB9XG4gIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XG4gIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XG4gIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGcgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gZy5uZXh0ID0gdmVyYigwKSwgZ1tcInRocm93XCJdID0gdmVyYigxKSwgZ1tcInJldHVyblwiXSA9IHZlcmIoMiksIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgfVxufVxuXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xuICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgb1trMl0gPSBtW2tdO1xufSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xuICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XG4gIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XG4gICAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XG4gIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFtKSByZXR1cm4gbztcbiAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gIHRyeSB7XG4gICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgfVxuICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgfVxuICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gIH1cbiAgcmV0dXJuIGFyO1xufVxuXG4vKiogQGRlcHJlY2F0ZWQgKi9cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcbiAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXG4gICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XG4gIHJldHVybiBhcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkICovXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XG4gIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXG4gICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcbiAgICAgICAgICByW2tdID0gYVtqXTtcbiAgcmV0dXJuIHI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XG4gIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcbiAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIsIGF3YWl0UmV0dXJuKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xuICBmdW5jdGlvbiBhd2FpdFJldHVybihmKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZiwgcmVqZWN0KTsgfTsgfVxuICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaWYgKGdbbl0pIHsgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgaWYgKGYpIGlbbl0gPSBmKGlbbl0pOyB9IH1cbiAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxuICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cbiAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxuICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XG4gIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xuICB2YXIgaSwgcDtcbiAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcbiAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xuICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XG4gIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cbiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcbiAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cbiAgcmV0dXJuIGNvb2tlZDtcbn07XG5cbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gIG9bXCJkZWZhdWx0XCJdID0gdjtcbn07XG5cbnZhciBvd25LZXlzID0gZnVuY3Rpb24obykge1xuICBvd25LZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgfHwgZnVuY3Rpb24gKG8pIHtcbiAgICB2YXIgYXIgPSBbXTtcbiAgICBmb3IgKHZhciBrIGluIG8pIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaykpIGFyW2FyLmxlbmd0aF0gPSBrO1xuICAgIHJldHVybiBhcjtcbiAgfTtcbiAgcmV0dXJuIG93bktleXMobyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xuICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayA9IG93bktleXMobW9kKSwgaSA9IDA7IGkgPCBrLmxlbmd0aDsgaSsrKSBpZiAoa1tpXSAhPT0gXCJkZWZhdWx0XCIpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwga1tpXSk7XG4gIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XG4gIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XG4gIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XG4gIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xuICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xuICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcbiAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XG4gIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZShlbnYsIHZhbHVlLCBhc3luYykge1xuICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWQuXCIpO1xuICAgIHZhciBkaXNwb3NlLCBpbm5lcjtcbiAgICBpZiAoYXN5bmMpIHtcbiAgICAgIGlmICghU3ltYm9sLmFzeW5jRGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5hc3luY0Rpc3Bvc2VdO1xuICAgIH1cbiAgICBpZiAoZGlzcG9zZSA9PT0gdm9pZCAwKSB7XG4gICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmRpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xuICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcbiAgICAgIGlmIChhc3luYykgaW5uZXIgPSBkaXNwb3NlO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRpc3Bvc2UgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBub3QgZGlzcG9zYWJsZS5cIik7XG4gICAgaWYgKGlubmVyKSBkaXNwb3NlID0gZnVuY3Rpb24oKSB7IHRyeSB7IGlubmVyLmNhbGwodGhpcyk7IH0gY2F0Y2ggKGUpIHsgcmV0dXJuIFByb21pc2UucmVqZWN0KGUpOyB9IH07XG4gICAgZW52LnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUsIGRpc3Bvc2U6IGRpc3Bvc2UsIGFzeW5jOiBhc3luYyB9KTtcbiAgfVxuICBlbHNlIGlmIChhc3luYykge1xuICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgX1N1cHByZXNzZWRFcnJvciA9IHR5cGVvZiBTdXBwcmVzc2VkRXJyb3IgPT09IFwiZnVuY3Rpb25cIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uIChlcnJvciwgc3VwcHJlc3NlZCwgbWVzc2FnZSkge1xuICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgcmV0dXJuIGUubmFtZSA9IFwiU3VwcHJlc3NlZEVycm9yXCIsIGUuZXJyb3IgPSBlcnJvciwgZS5zdXBwcmVzc2VkID0gc3VwcHJlc3NlZCwgZTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52KSB7XG4gIGZ1bmN0aW9uIGZhaWwoZSkge1xuICAgIGVudi5lcnJvciA9IGVudi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUsIGVudi5lcnJvciwgXCJBbiBlcnJvciB3YXMgc3VwcHJlc3NlZCBkdXJpbmcgZGlzcG9zYWwuXCIpIDogZTtcbiAgICBlbnYuaGFzRXJyb3IgPSB0cnVlO1xuICB9XG4gIHZhciByLCBzID0gMDtcbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICB3aGlsZSAociA9IGVudi5zdGFjay5wb3AoKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKCFyLmFzeW5jICYmIHMgPT09IDEpIHJldHVybiBzID0gMCwgZW52LnN0YWNrLnB1c2gociksIFByb21pc2UucmVzb2x2ZSgpLnRoZW4obmV4dCk7XG4gICAgICAgIGlmIChyLmRpc3Bvc2UpIHtcbiAgICAgICAgICB2YXIgcmVzdWx0ID0gci5kaXNwb3NlLmNhbGwoci52YWx1ZSk7XG4gICAgICAgICAgaWYgKHIuYXN5bmMpIHJldHVybiBzIHw9IDIsIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHMgfD0gMTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgIGZhaWwoZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzID09PSAxKSByZXR1cm4gZW52Lmhhc0Vycm9yID8gUHJvbWlzZS5yZWplY3QoZW52LmVycm9yKSA6IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGlmIChlbnYuaGFzRXJyb3IpIHRocm93IGVudi5lcnJvcjtcbiAgfVxuICByZXR1cm4gbmV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24ocGF0aCwgcHJlc2VydmVKc3gpIHtcbiAgaWYgKHR5cGVvZiBwYXRoID09PSBcInN0cmluZ1wiICYmIC9eXFwuXFwuP1xcLy8udGVzdChwYXRoKSkge1xuICAgICAgcmV0dXJuIHBhdGgucmVwbGFjZSgvXFwuKHRzeCkkfCgoPzpcXC5kKT8pKCg/OlxcLlteLi9dKz8pPylcXC4oW2NtXT8pdHMkL2ksIGZ1bmN0aW9uIChtLCB0c3gsIGQsIGV4dCwgY20pIHtcbiAgICAgICAgICByZXR1cm4gdHN4ID8gcHJlc2VydmVKc3ggPyBcIi5qc3hcIiA6IFwiLmpzXCIgOiBkICYmICghZXh0IHx8ICFjbSkgPyBtIDogKGQgKyBleHQgKyBcIi5cIiArIGNtLnRvTG93ZXJDYXNlKCkgKyBcImpzXCIpO1xuICAgICAgfSk7XG4gIH1cbiAgcmV0dXJuIHBhdGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgX19leHRlbmRzLFxuICBfX2Fzc2lnbixcbiAgX19yZXN0LFxuICBfX2RlY29yYXRlLFxuICBfX3BhcmFtLFxuICBfX2VzRGVjb3JhdGUsXG4gIF9fcnVuSW5pdGlhbGl6ZXJzLFxuICBfX3Byb3BLZXksXG4gIF9fc2V0RnVuY3Rpb25OYW1lLFxuICBfX21ldGFkYXRhLFxuICBfX2F3YWl0ZXIsXG4gIF9fZ2VuZXJhdG9yLFxuICBfX2NyZWF0ZUJpbmRpbmcsXG4gIF9fZXhwb3J0U3RhcixcbiAgX192YWx1ZXMsXG4gIF9fcmVhZCxcbiAgX19zcHJlYWQsXG4gIF9fc3ByZWFkQXJyYXlzLFxuICBfX3NwcmVhZEFycmF5LFxuICBfX2F3YWl0LFxuICBfX2FzeW5jR2VuZXJhdG9yLFxuICBfX2FzeW5jRGVsZWdhdG9yLFxuICBfX2FzeW5jVmFsdWVzLFxuICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcbiAgX19pbXBvcnRTdGFyLFxuICBfX2ltcG9ydERlZmF1bHQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRTZXQsXG4gIF9fY2xhc3NQcml2YXRlRmllbGRJbixcbiAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2UsXG4gIF9fZGlzcG9zZVJlc291cmNlcyxcbiAgX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24sXG59O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/tslib/tslib.es6.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js":
|
||
/*!**********************************************************************************************!*\
|
||
!*** ./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js ***!
|
||
\**********************************************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5kZXZlbG9wbWVudC5qcyIsIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRWE7QUFDYixLQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0I7QUFDaEIsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCxZQUFZO0FBQ3BFLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLHdEQUF3RCxZQUFZO0FBQ3BFO0FBQ0EsMERBQTBELFlBQVk7QUFDdEUsV0FBVztBQUNYLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLG1CQUFPLENBQUMsbUZBQU87QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLDRCQUE0QjtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5kZXZlbG9wbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLmRldmVsb3BtZW50LmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5cInVzZSBzdHJpY3RcIjtcblwicHJvZHVjdGlvblwiICE9PSBwcm9jZXNzLmVudi5OT0RFX0VOViAmJlxuICAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIGlzKHgsIHkpIHtcbiAgICAgIHJldHVybiAoeCA9PT0geSAmJiAoMCAhPT0geCB8fCAxIC8geCA9PT0gMSAvIHkpKSB8fCAoeCAhPT0geCAmJiB5ICE9PSB5KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXNlU3luY0V4dGVybmFsU3RvcmUkMihzdWJzY3JpYmUsIGdldFNuYXBzaG90KSB7XG4gICAgICBkaWRXYXJuT2xkMThBbHBoYSB8fFxuICAgICAgICB2b2lkIDAgPT09IFJlYWN0LnN0YXJ0VHJhbnNpdGlvbiB8fFxuICAgICAgICAoKGRpZFdhcm5PbGQxOEFscGhhID0gITApLFxuICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgIFwiWW91IGFyZSB1c2luZyBhbiBvdXRkYXRlZCwgcHJlLXJlbGVhc2UgYWxwaGEgb2YgUmVhY3QgMTggdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHVzZVN5bmNFeHRlcm5hbFN0b3JlLiBUaGUgdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUgc2hpbSB3aWxsIG5vdCB3b3JrIGNvcnJlY3RseS4gVXBncmFkZSB0byBhIG5ld2VyIHByZS1yZWxlYXNlLlwiXG4gICAgICAgICkpO1xuICAgICAgdmFyIHZhbHVlID0gZ2V0U25hcHNob3QoKTtcbiAgICAgIGlmICghZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QpIHtcbiAgICAgICAgdmFyIGNhY2hlZFZhbHVlID0gZ2V0U25hcHNob3QoKTtcbiAgICAgICAgb2JqZWN0SXModmFsdWUsIGNhY2hlZFZhbHVlKSB8fFxuICAgICAgICAgIChjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgXCJUaGUgcmVzdWx0IG9mIGdldFNuYXBzaG90IHNob3VsZCBiZSBjYWNoZWQgdG8gYXZvaWQgYW4gaW5maW5pdGUgbG9vcFwiXG4gICAgICAgICAgKSxcbiAgICAgICAgICAoZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgPSAhMCkpO1xuICAgICAgfVxuICAgICAgY2FjaGVkVmFsdWUgPSB1c2VTdGF0ZSh7XG4gICAgICAgIGluc3Q6IHsgdmFsdWU6IHZhbHVlLCBnZXRTbmFwc2hvdDogZ2V0U25hcHNob3QgfVxuICAgICAgfSk7XG4gICAgICB2YXIgaW5zdCA9IGNhY2hlZFZhbHVlWzBdLmluc3QsXG4gICAgICAgIGZvcmNlVXBkYXRlID0gY2FjaGVkVmFsdWVbMV07XG4gICAgICB1c2VMYXlvdXRFZmZlY3QoXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpbnN0LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgaW5zdC5nZXRTbmFwc2hvdCA9IGdldFNuYXBzaG90O1xuICAgICAgICAgIGNoZWNrSWZTbmFwc2hvdENoYW5nZWQoaW5zdCkgJiYgZm9yY2VVcGRhdGUoeyBpbnN0OiBpbnN0IH0pO1xuICAgICAgICB9LFxuICAgICAgICBbc3Vic2NyaWJlLCB2YWx1ZSwgZ2V0U25hcHNob3RdXG4gICAgICApO1xuICAgICAgdXNlRWZmZWN0KFxuICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSAmJiBmb3JjZVVwZGF0ZSh7IGluc3Q6IGluc3QgfSk7XG4gICAgICAgICAgcmV0dXJuIHN1YnNjcmliZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjaGVja0lmU25hcHNob3RDaGFuZ2VkKGluc3QpICYmIGZvcmNlVXBkYXRlKHsgaW5zdDogaW5zdCB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgW3N1YnNjcmliZV1cbiAgICAgICk7XG4gICAgICB1c2VEZWJ1Z1ZhbHVlKHZhbHVlKTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tJZlNuYXBzaG90Q2hhbmdlZChpbnN0KSB7XG4gICAgICB2YXIgbGF0ZXN0R2V0U25hcHNob3QgPSBpbnN0LmdldFNuYXBzaG90O1xuICAgICAgaW5zdCA9IGluc3QudmFsdWU7XG4gICAgICB0cnkge1xuICAgICAgICB2YXIgbmV4dFZhbHVlID0gbGF0ZXN0R2V0U25hcHNob3QoKTtcbiAgICAgICAgcmV0dXJuICFvYmplY3RJcyhpbnN0LCBuZXh0VmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuICEwO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSQxKHN1YnNjcmliZSwgZ2V0U25hcHNob3QpIHtcbiAgICAgIHJldHVybiBnZXRTbmFwc2hvdCgpO1xuICAgIH1cbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KEVycm9yKCkpO1xuICAgIHZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKSxcbiAgICAgIG9iamVjdElzID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgT2JqZWN0LmlzID8gT2JqZWN0LmlzIDogaXMsXG4gICAgICB1c2VTdGF0ZSA9IFJlYWN0LnVzZVN0YXRlLFxuICAgICAgdXNlRWZmZWN0ID0gUmVhY3QudXNlRWZmZWN0LFxuICAgICAgdXNlTGF5b3V0RWZmZWN0ID0gUmVhY3QudXNlTGF5b3V0RWZmZWN0LFxuICAgICAgdXNlRGVidWdWYWx1ZSA9IFJlYWN0LnVzZURlYnVnVmFsdWUsXG4gICAgICBkaWRXYXJuT2xkMThBbHBoYSA9ICExLFxuICAgICAgZGlkV2FyblVuY2FjaGVkR2V0U25hcHNob3QgPSAhMSxcbiAgICAgIHNoaW0gPVxuICAgICAgICBcInVuZGVmaW5lZFwiID09PSB0eXBlb2Ygd2luZG93IHx8XG4gICAgICAgIFwidW5kZWZpbmVkXCIgPT09IHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgfHxcbiAgICAgICAgXCJ1bmRlZmluZWRcIiA9PT0gdHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50XG4gICAgICAgICAgPyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSQxXG4gICAgICAgICAgOiB1c2VTeW5jRXh0ZXJuYWxTdG9yZSQyO1xuICAgIGV4cG9ydHMudXNlU3luY0V4dGVybmFsU3RvcmUgPVxuICAgICAgdm9pZCAwICE9PSBSZWFjdC51c2VTeW5jRXh0ZXJuYWxTdG9yZSA/IFJlYWN0LnVzZVN5bmNFeHRlcm5hbFN0b3JlIDogc2hpbTtcbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChFcnJvcigpKTtcbiAgfSkoKTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js":
|
||
/*!************************************************************************************************************!*\
|
||
!*** ./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js ***!
|
||
\************************************************************************************************************/
|
||
/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\n true &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\"),\n shim = __webpack_require__(/*! use-sync-external-store/shim */ \"(app-pages-browser)/./node_modules/use-sync-external-store/shim/index.js\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\n exports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n ) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot))\n return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS93aXRoLXNlbGVjdG9yLmRldmVsb3BtZW50LmpzIiwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFYTtBQUNiLEtBQXFDO0FBQ3JDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsbUJBQU8sQ0FBQyxtRkFBTztBQUMvQixhQUFhLG1CQUFPLENBQUMsOEdBQThCO0FBQ25EO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUksd0NBQXdDO0FBQzVDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7QUFDckI7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUciLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0vd2l0aC1zZWxlY3Rvci5kZXZlbG9wbWVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltL3dpdGgtc2VsZWN0b3IuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIE1ldGEgUGxhdGZvcm1zLCBJbmMuIGFuZCBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cblwidXNlIHN0cmljdFwiO1xuXCJwcm9kdWN0aW9uXCIgIT09IHByb2Nlc3MuZW52Lk5PREVfRU5WICYmXG4gIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gaXMoeCwgeSkge1xuICAgICAgcmV0dXJuICh4ID09PSB5ICYmICgwICE9PSB4IHx8IDEgLyB4ID09PSAxIC8geSkpIHx8ICh4ICE9PSB4ICYmIHkgIT09IHkpO1xuICAgIH1cbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0ICYmXG4gICAgICBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0YXJ0KEVycm9yKCkpO1xuICAgIHZhciBSZWFjdCA9IHJlcXVpcmUoXCJyZWFjdFwiKSxcbiAgICAgIHNoaW0gPSByZXF1aXJlKFwidXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbVwiKSxcbiAgICAgIG9iamVjdElzID0gXCJmdW5jdGlvblwiID09PSB0eXBlb2YgT2JqZWN0LmlzID8gT2JqZWN0LmlzIDogaXMsXG4gICAgICB1c2VTeW5jRXh0ZXJuYWxTdG9yZSA9IHNoaW0udXNlU3luY0V4dGVybmFsU3RvcmUsXG4gICAgICB1c2VSZWYgPSBSZWFjdC51c2VSZWYsXG4gICAgICB1c2VFZmZlY3QgPSBSZWFjdC51c2VFZmZlY3QsXG4gICAgICB1c2VNZW1vID0gUmVhY3QudXNlTWVtbyxcbiAgICAgIHVzZURlYnVnVmFsdWUgPSBSZWFjdC51c2VEZWJ1Z1ZhbHVlO1xuICAgIGV4cG9ydHMudXNlU3luY0V4dGVybmFsU3RvcmVXaXRoU2VsZWN0b3IgPSBmdW5jdGlvbiAoXG4gICAgICBzdWJzY3JpYmUsXG4gICAgICBnZXRTbmFwc2hvdCxcbiAgICAgIGdldFNlcnZlclNuYXBzaG90LFxuICAgICAgc2VsZWN0b3IsXG4gICAgICBpc0VxdWFsXG4gICAgKSB7XG4gICAgICB2YXIgaW5zdFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICAgIGlmIChudWxsID09PSBpbnN0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgdmFyIGluc3QgPSB7IGhhc1ZhbHVlOiAhMSwgdmFsdWU6IG51bGwgfTtcbiAgICAgICAgaW5zdFJlZi5jdXJyZW50ID0gaW5zdDtcbiAgICAgIH0gZWxzZSBpbnN0ID0gaW5zdFJlZi5jdXJyZW50O1xuICAgICAgaW5zdFJlZiA9IHVzZU1lbW8oXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBmdW5jdGlvbiBtZW1vaXplZFNlbGVjdG9yKG5leHRTbmFwc2hvdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNNZW1vKSB7XG4gICAgICAgICAgICAgIGhhc01lbW8gPSAhMDtcbiAgICAgICAgICAgICAgbWVtb2l6ZWRTbmFwc2hvdCA9IG5leHRTbmFwc2hvdDtcbiAgICAgICAgICAgICAgbmV4dFNuYXBzaG90ID0gc2VsZWN0b3IobmV4dFNuYXBzaG90KTtcbiAgICAgICAgICAgICAgaWYgKHZvaWQgMCAhPT0gaXNFcXVhbCAmJiBpbnN0Lmhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnRTZWxlY3Rpb24gPSBpbnN0LnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmIChpc0VxdWFsKGN1cnJlbnRTZWxlY3Rpb24sIG5leHRTbmFwc2hvdCkpXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKG1lbW9pemVkU2VsZWN0aW9uID0gY3VycmVudFNlbGVjdGlvbik7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIChtZW1vaXplZFNlbGVjdGlvbiA9IG5leHRTbmFwc2hvdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50U2VsZWN0aW9uID0gbWVtb2l6ZWRTZWxlY3Rpb247XG4gICAgICAgICAgICBpZiAob2JqZWN0SXMobWVtb2l6ZWRTbmFwc2hvdCwgbmV4dFNuYXBzaG90KSlcbiAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTZWxlY3Rpb247XG4gICAgICAgICAgICB2YXIgbmV4dFNlbGVjdGlvbiA9IHNlbGVjdG9yKG5leHRTbmFwc2hvdCk7XG4gICAgICAgICAgICBpZiAodm9pZCAwICE9PSBpc0VxdWFsICYmIGlzRXF1YWwoY3VycmVudFNlbGVjdGlvbiwgbmV4dFNlbGVjdGlvbikpXG4gICAgICAgICAgICAgIHJldHVybiAobWVtb2l6ZWRTbmFwc2hvdCA9IG5leHRTbmFwc2hvdCksIGN1cnJlbnRTZWxlY3Rpb247XG4gICAgICAgICAgICBtZW1vaXplZFNuYXBzaG90ID0gbmV4dFNuYXBzaG90O1xuICAgICAgICAgICAgcmV0dXJuIChtZW1vaXplZFNlbGVjdGlvbiA9IG5leHRTZWxlY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgaGFzTWVtbyA9ICExLFxuICAgICAgICAgICAgbWVtb2l6ZWRTbmFwc2hvdCxcbiAgICAgICAgICAgIG1lbW9pemVkU2VsZWN0aW9uLFxuICAgICAgICAgICAgbWF5YmVHZXRTZXJ2ZXJTbmFwc2hvdCA9XG4gICAgICAgICAgICAgIHZvaWQgMCA9PT0gZ2V0U2VydmVyU25hcHNob3QgPyBudWxsIDogZ2V0U2VydmVyU25hcHNob3Q7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1lbW9pemVkU2VsZWN0b3IoZ2V0U25hcHNob3QoKSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbnVsbCA9PT0gbWF5YmVHZXRTZXJ2ZXJTbmFwc2hvdFxuICAgICAgICAgICAgICA/IHZvaWQgMFxuICAgICAgICAgICAgICA6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBtZW1vaXplZFNlbGVjdG9yKG1heWJlR2V0U2VydmVyU25hcHNob3QoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgIF07XG4gICAgICAgIH0sXG4gICAgICAgIFtnZXRTbmFwc2hvdCwgZ2V0U2VydmVyU25hcHNob3QsIHNlbGVjdG9yLCBpc0VxdWFsXVxuICAgICAgKTtcbiAgICAgIHZhciB2YWx1ZSA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlKHN1YnNjcmliZSwgaW5zdFJlZlswXSwgaW5zdFJlZlsxXSk7XG4gICAgICB1c2VFZmZlY3QoXG4gICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpbnN0Lmhhc1ZhbHVlID0gITA7XG4gICAgICAgICAgaW5zdC52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBbdmFsdWVdXG4gICAgICApO1xuICAgICAgdXNlRGVidWdWYWx1ZSh2YWx1ZSk7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiAgICBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fICYmXG4gICAgICBcImZ1bmN0aW9uXCIgPT09XG4gICAgICAgIHR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18ucmVnaXN0ZXJJbnRlcm5hbE1vZHVsZVN0b3AgJiZcbiAgICAgIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5yZWdpc3RlckludGVybmFsTW9kdWxlU3RvcChFcnJvcigpKTtcbiAgfSkoKTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/use-sync-external-store/shim/index.js":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/use-sync-external-store/shim/index.js ***!
|
||
\************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ../cjs/use-sync-external-store-shim.development.js */ \"(app-pages-browser)/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzIiwibWFwcGluZ3MiOiJBQUFhOztBQUViLElBQUksS0FBcUMsRUFBRSxFQUUxQyxDQUFDO0FBQ0YsRUFBRSw0TUFBOEU7QUFDaEYiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/use-sync-external-store/shim/index.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/use-sync-external-store/shim/with-selector.js":
|
||
/*!********************************************************************!*\
|
||
!*** ./node_modules/use-sync-external-store/shim/with-selector.js ***!
|
||
\********************************************************************/
|
||
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
|
||
|
||
"use strict";
|
||
eval(__webpack_require__.ts("\n\nif (false) {} else {\n module.exports = __webpack_require__(/*! ../cjs/use-sync-external-store-shim/with-selector.development.js */ \"(app-pages-browser)/./node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL3dpdGgtc2VsZWN0b3IuanMiLCJtYXBwaW5ncyI6IkFBQWE7O0FBRWIsSUFBSSxLQUFxQyxFQUFFLEVBRTFDLENBQUM7QUFDRixFQUFFLHdPQUE0RjtBQUM5RiIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL3dpdGgtc2VsZWN0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltL3dpdGgtc2VsZWN0b3IucHJvZHVjdGlvbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS93aXRoLXNlbGVjdG9yLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/use-sync-external-store/shim/with-selector.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/classic/errors.js":
|
||
/*!***********************************************!*\
|
||
!*** ./node_modules/zod/v4/classic/errors.js ***!
|
||
\***********************************************/
|
||
/***/ ((__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 */ ZodError: () => (/* binding */ ZodError),\n/* harmony export */ ZodRealError: () => (/* binding */ ZodRealError)\n/* harmony export */ });\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/index.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/errors.js\");\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/index.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/core.js\");\n/* harmony import */ var _core_util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/util.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/util.js\");\n\n\n\nconst initializer = (inst, issues) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$ZodError.init(inst, issues);\n inst.name = \"ZodError\";\n Object.defineProperties(inst, {\n format: {\n value: (mapper) => _core_index_js__WEBPACK_IMPORTED_MODULE_0__.formatError(inst, mapper),\n // enumerable: false,\n },\n flatten: {\n value: (mapper) => _core_index_js__WEBPACK_IMPORTED_MODULE_0__.flattenError(inst, mapper),\n // enumerable: false,\n },\n addIssue: {\n value: (issue) => {\n inst.issues.push(issue);\n inst.message = JSON.stringify(inst.issues, _core_util_js__WEBPACK_IMPORTED_MODULE_1__.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n addIssues: {\n value: (issues) => {\n inst.issues.push(...issues);\n inst.message = JSON.stringify(inst.issues, _core_util_js__WEBPACK_IMPORTED_MODULE_1__.jsonStringifyReplacer, 2);\n },\n // enumerable: false,\n },\n isEmpty: {\n get() {\n return inst.issues.length === 0;\n },\n // enumerable: false,\n },\n });\n // Object.defineProperty(inst, \"isEmpty\", {\n // get() {\n // return inst.issues.length === 0;\n // },\n // });\n};\nconst ZodError = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_2__.$constructor(\"ZodError\", initializer);\nconst ZodRealError = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_2__.$constructor(\"ZodError\", initializer, {\n Parent: Error,\n});\n// /** @deprecated Use `z.core.$ZodErrorMapCtx` instead. */\n// export type ErrorMapCtx = core.$ZodErrorMapCtx;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9lcnJvcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBeUM7QUFDSTtBQUNMO0FBQ3hDO0FBQ0EsSUFBSSxxREFBUztBQUNiO0FBQ0E7QUFDQTtBQUNBLCtCQUErQix1REFBZ0I7QUFDL0M7QUFDQSxTQUFTO0FBQ1Q7QUFDQSwrQkFBK0Isd0RBQWlCO0FBQ2hEO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxnRUFBMEI7QUFDckYsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRCxnRUFBMEI7QUFDckYsYUFBYTtBQUNiO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWLFFBQVE7QUFDUjtBQUNPLCtCQUErQix3REFBaUI7QUFDaEQsbUNBQW1DLHdEQUFpQjtBQUMzRDtBQUNBLENBQUM7QUFDRDtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL3pvZC92NC9jbGFzc2ljL2Vycm9ycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjb3JlIGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyAkWm9kRXJyb3IgfSBmcm9tIFwiLi4vY29yZS9pbmRleC5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi4vY29yZS91dGlsLmpzXCI7XG5jb25zdCBpbml0aWFsaXplciA9IChpbnN0LCBpc3N1ZXMpID0+IHtcbiAgICAkWm9kRXJyb3IuaW5pdChpbnN0LCBpc3N1ZXMpO1xuICAgIGluc3QubmFtZSA9IFwiWm9kRXJyb3JcIjtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhpbnN0LCB7XG4gICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgdmFsdWU6IChtYXBwZXIpID0+IGNvcmUuZm9ybWF0RXJyb3IoaW5zdCwgbWFwcGVyKSxcbiAgICAgICAgICAgIC8vIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBmbGF0dGVuOiB7XG4gICAgICAgICAgICB2YWx1ZTogKG1hcHBlcikgPT4gY29yZS5mbGF0dGVuRXJyb3IoaW5zdCwgbWFwcGVyKSxcbiAgICAgICAgICAgIC8vIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBhZGRJc3N1ZToge1xuICAgICAgICAgICAgdmFsdWU6IChpc3N1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGluc3QuaXNzdWVzLnB1c2goaXNzdWUpO1xuICAgICAgICAgICAgICAgIGluc3QubWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KGluc3QuaXNzdWVzLCB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlciwgMik7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIGFkZElzc3Vlczoge1xuICAgICAgICAgICAgdmFsdWU6IChpc3N1ZXMpID0+IHtcbiAgICAgICAgICAgICAgICBpbnN0Lmlzc3Vlcy5wdXNoKC4uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgaW5zdC5tZXNzYWdlID0gSlNPTi5zdHJpbmdpZnkoaW5zdC5pc3N1ZXMsIHV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyLCAyKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgaXNFbXB0eToge1xuICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbnN0Lmlzc3Vlcy5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8gZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgLy8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3QsIFwiaXNFbXB0eVwiLCB7XG4gICAgLy8gICBnZXQoKSB7XG4gICAgLy8gICAgIHJldHVybiBpbnN0Lmlzc3Vlcy5sZW5ndGggPT09IDA7XG4gICAgLy8gICB9LFxuICAgIC8vIH0pO1xufTtcbmV4cG9ydCBjb25zdCBab2RFcnJvciA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RFcnJvclwiLCBpbml0aWFsaXplcik7XG5leHBvcnQgY29uc3QgWm9kUmVhbEVycm9yID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEVycm9yXCIsIGluaXRpYWxpemVyLCB7XG4gICAgUGFyZW50OiBFcnJvcixcbn0pO1xuLy8gLyoqIEBkZXByZWNhdGVkIFVzZSBgei5jb3JlLiRab2RFcnJvck1hcEN0eGAgaW5zdGVhZC4gKi9cbi8vIGV4cG9ydCB0eXBlIEVycm9yTWFwQ3R4ID0gY29yZS4kWm9kRXJyb3JNYXBDdHg7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/classic/errors.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/classic/iso.js":
|
||
/*!********************************************!*\
|
||
!*** ./node_modules/zod/v4/classic/iso.js ***!
|
||
\********************************************/
|
||
/***/ ((__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 */ ZodISODate: () => (/* binding */ ZodISODate),\n/* harmony export */ ZodISODateTime: () => (/* binding */ ZodISODateTime),\n/* harmony export */ ZodISODuration: () => (/* binding */ ZodISODuration),\n/* harmony export */ ZodISOTime: () => (/* binding */ ZodISOTime),\n/* harmony export */ date: () => (/* binding */ date),\n/* harmony export */ datetime: () => (/* binding */ datetime),\n/* harmony export */ duration: () => (/* binding */ duration),\n/* harmony export */ time: () => (/* binding */ time)\n/* harmony export */ });\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/index.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/core.js\");\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/index.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/schemas.js\");\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../core/index.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/api.js\");\n/* harmony import */ var _schemas_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./schemas.js */ \"(app-pages-browser)/./node_modules/zod/v4/classic/schemas.js\");\n\n\nconst ZodISODateTime = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodISODateTime\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodISODateTime.init(inst, def);\n _schemas_js__WEBPACK_IMPORTED_MODULE_2__.ZodStringFormat.init(inst, def);\n});\nfunction datetime(params) {\n return _core_index_js__WEBPACK_IMPORTED_MODULE_3__._isoDateTime(ZodISODateTime, params);\n}\nconst ZodISODate = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodISODate\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodISODate.init(inst, def);\n _schemas_js__WEBPACK_IMPORTED_MODULE_2__.ZodStringFormat.init(inst, def);\n});\nfunction date(params) {\n return _core_index_js__WEBPACK_IMPORTED_MODULE_3__._isoDate(ZodISODate, params);\n}\nconst ZodISOTime = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodISOTime\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodISOTime.init(inst, def);\n _schemas_js__WEBPACK_IMPORTED_MODULE_2__.ZodStringFormat.init(inst, def);\n});\nfunction time(params) {\n return _core_index_js__WEBPACK_IMPORTED_MODULE_3__._isoTime(ZodISOTime, params);\n}\nconst ZodISODuration = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodISODuration\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodISODuration.init(inst, def);\n _schemas_js__WEBPACK_IMPORTED_MODULE_2__.ZodStringFormat.init(inst, def);\n});\nfunction duration(params) {\n return _core_index_js__WEBPACK_IMPORTED_MODULE_3__._isoDuration(ZodISODuration, params);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9pc28uanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQXlDO0FBQ0Q7QUFDakMscUNBQXFDLHdEQUFpQjtBQUM3RCxJQUFJLDJEQUFvQjtBQUN4QixJQUFJLHdEQUF1QjtBQUMzQixDQUFDO0FBQ007QUFDUCxXQUFXLHdEQUFpQjtBQUM1QjtBQUNPLGlDQUFpQyx3REFBaUI7QUFDekQsSUFBSSx1REFBZ0I7QUFDcEIsSUFBSSx3REFBdUI7QUFDM0IsQ0FBQztBQUNNO0FBQ1AsV0FBVyxvREFBYTtBQUN4QjtBQUNPLGlDQUFpQyx3REFBaUI7QUFDekQsSUFBSSx1REFBZ0I7QUFDcEIsSUFBSSx3REFBdUI7QUFDM0IsQ0FBQztBQUNNO0FBQ1AsV0FBVyxvREFBYTtBQUN4QjtBQUNPLHFDQUFxQyx3REFBaUI7QUFDN0QsSUFBSSwyREFBb0I7QUFDeEIsSUFBSSx3REFBdUI7QUFDM0IsQ0FBQztBQUNNO0FBQ1AsV0FBVyx3REFBaUI7QUFDNUIiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvem9kL3Y0L2NsYXNzaWMvaXNvLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIi4uL2NvcmUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHNjaGVtYXMgZnJvbSBcIi4vc2NoZW1hcy5qc1wiO1xuZXhwb3J0IGNvbnN0IFpvZElTT0RhdGVUaW1lID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZElTT0RhdGVUaW1lXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RJU09EYXRlVGltZS5pbml0KGluc3QsIGRlZik7XG4gICAgc2NoZW1hcy5ab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZGF0ZXRpbWUocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2lzb0RhdGVUaW1lKFpvZElTT0RhdGVUaW1lLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZElTT0RhdGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kSVNPRGF0ZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kSVNPRGF0ZS5pbml0KGluc3QsIGRlZik7XG4gICAgc2NoZW1hcy5ab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZGF0ZShwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faXNvRGF0ZShab2RJU09EYXRlLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZElTT1RpbWUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kSVNPVGltZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kSVNPVGltZS5pbml0KGluc3QsIGRlZik7XG4gICAgc2NoZW1hcy5ab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdGltZShwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faXNvVGltZShab2RJU09UaW1lLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZElTT0R1cmF0aW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZElTT0R1cmF0aW9uXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RJU09EdXJhdGlvbi5pbml0KGluc3QsIGRlZik7XG4gICAgc2NoZW1hcy5ab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZHVyYXRpb24ocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2lzb0R1cmF0aW9uKFpvZElTT0R1cmF0aW9uLCBwYXJhbXMpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/classic/iso.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/classic/parse.js":
|
||
/*!**********************************************!*\
|
||
!*** ./node_modules/zod/v4/classic/parse.js ***!
|
||
\**********************************************/
|
||
/***/ ((__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 */ decode: () => (/* binding */ decode),\n/* harmony export */ decodeAsync: () => (/* binding */ decodeAsync),\n/* harmony export */ encode: () => (/* binding */ encode),\n/* harmony export */ encodeAsync: () => (/* binding */ encodeAsync),\n/* harmony export */ parse: () => (/* binding */ parse),\n/* harmony export */ parseAsync: () => (/* binding */ parseAsync),\n/* harmony export */ safeDecode: () => (/* binding */ safeDecode),\n/* harmony export */ safeDecodeAsync: () => (/* binding */ safeDecodeAsync),\n/* harmony export */ safeEncode: () => (/* binding */ safeEncode),\n/* harmony export */ safeEncodeAsync: () => (/* binding */ safeEncodeAsync),\n/* harmony export */ safeParse: () => (/* binding */ safeParse),\n/* harmony export */ safeParseAsync: () => (/* binding */ safeParseAsync)\n/* harmony export */ });\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/index.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/parse.js\");\n/* harmony import */ var _errors_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./errors.js */ \"(app-pages-browser)/./node_modules/zod/v4/classic/errors.js\");\n\n\nconst parse = /* @__PURE__ */ _core_index_js__WEBPACK_IMPORTED_MODULE_0__._parse(_errors_js__WEBPACK_IMPORTED_MODULE_1__.ZodRealError);\nconst parseAsync = /* @__PURE__ */ _core_index_js__WEBPACK_IMPORTED_MODULE_0__._parseAsync(_errors_js__WEBPACK_IMPORTED_MODULE_1__.ZodRealError);\nconst safeParse = /* @__PURE__ */ _core_index_js__WEBPACK_IMPORTED_MODULE_0__._safeParse(_errors_js__WEBPACK_IMPORTED_MODULE_1__.ZodRealError);\nconst safeParseAsync = /* @__PURE__ */ _core_index_js__WEBPACK_IMPORTED_MODULE_0__._safeParseAsync(_errors_js__WEBPACK_IMPORTED_MODULE_1__.ZodRealError);\n// Codec functions\nconst encode = /* @__PURE__ */ _core_index_js__WEBPACK_IMPORTED_MODULE_0__._encode(_errors_js__WEBPACK_IMPORTED_MODULE_1__.ZodRealError);\nconst decode = /* @__PURE__ */ _core_index_js__WEBPACK_IMPORTED_MODULE_0__._decode(_errors_js__WEBPACK_IMPORTED_MODULE_1__.ZodRealError);\nconst encodeAsync = /* @__PURE__ */ _core_index_js__WEBPACK_IMPORTED_MODULE_0__._encodeAsync(_errors_js__WEBPACK_IMPORTED_MODULE_1__.ZodRealError);\nconst decodeAsync = /* @__PURE__ */ _core_index_js__WEBPACK_IMPORTED_MODULE_0__._decodeAsync(_errors_js__WEBPACK_IMPORTED_MODULE_1__.ZodRealError);\nconst safeEncode = /* @__PURE__ */ _core_index_js__WEBPACK_IMPORTED_MODULE_0__._safeEncode(_errors_js__WEBPACK_IMPORTED_MODULE_1__.ZodRealError);\nconst safeDecode = /* @__PURE__ */ _core_index_js__WEBPACK_IMPORTED_MODULE_0__._safeDecode(_errors_js__WEBPACK_IMPORTED_MODULE_1__.ZodRealError);\nconst safeEncodeAsync = /* @__PURE__ */ _core_index_js__WEBPACK_IMPORTED_MODULE_0__._safeEncodeAsync(_errors_js__WEBPACK_IMPORTED_MODULE_1__.ZodRealError);\nconst safeDecodeAsync = /* @__PURE__ */ _core_index_js__WEBPACK_IMPORTED_MODULE_0__._safeDecodeAsync(_errors_js__WEBPACK_IMPORTED_MODULE_1__.ZodRealError);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9wYXJzZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQUF5QztBQUNFO0FBQ3BDLDhCQUE4QixrREFBVyxDQUFDLG9EQUFZO0FBQ3RELG1DQUFtQyx1REFBZ0IsQ0FBQyxvREFBWTtBQUNoRSxrQ0FBa0Msc0RBQWUsQ0FBQyxvREFBWTtBQUM5RCx1Q0FBdUMsMkRBQW9CLENBQUMsb0RBQVk7QUFDL0U7QUFDTywrQkFBK0IsbURBQVksQ0FBQyxvREFBWTtBQUN4RCwrQkFBK0IsbURBQVksQ0FBQyxvREFBWTtBQUN4RCxvQ0FBb0Msd0RBQWlCLENBQUMsb0RBQVk7QUFDbEUsb0NBQW9DLHdEQUFpQixDQUFDLG9EQUFZO0FBQ2xFLG1DQUFtQyx1REFBZ0IsQ0FBQyxvREFBWTtBQUNoRSxtQ0FBbUMsdURBQWdCLENBQUMsb0RBQVk7QUFDaEUsd0NBQXdDLDREQUFxQixDQUFDLG9EQUFZO0FBQzFFLHdDQUF3Qyw0REFBcUIsQ0FBQyxvREFBWSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9wYXJzZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjb3JlIGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBab2RSZWFsRXJyb3IgfSBmcm9tIFwiLi9lcnJvcnMuanNcIjtcbmV4cG9ydCBjb25zdCBwYXJzZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9wYXJzZShab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IHBhcnNlQXN5bmMgPSAvKiBAX19QVVJFX18gKi8gY29yZS5fcGFyc2VBc3luYyhab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IHNhZmVQYXJzZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlUGFyc2UoWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBzYWZlUGFyc2VBc3luYyA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlUGFyc2VBc3luYyhab2RSZWFsRXJyb3IpO1xuLy8gQ29kZWMgZnVuY3Rpb25zXG5leHBvcnQgY29uc3QgZW5jb2RlID0gLyogQF9fUFVSRV9fICovIGNvcmUuX2VuY29kZShab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IGRlY29kZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9kZWNvZGUoWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBlbmNvZGVBc3luYyA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9lbmNvZGVBc3luYyhab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IGRlY29kZUFzeW5jID0gLyogQF9fUFVSRV9fICovIGNvcmUuX2RlY29kZUFzeW5jKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3Qgc2FmZUVuY29kZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlRW5jb2RlKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3Qgc2FmZURlY29kZSA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlRGVjb2RlKFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3Qgc2FmZUVuY29kZUFzeW5jID0gLyogQF9fUFVSRV9fICovIGNvcmUuX3NhZmVFbmNvZGVBc3luYyhab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IHNhZmVEZWNvZGVBc3luYyA9IC8qIEBfX1BVUkVfXyAqLyBjb3JlLl9zYWZlRGVjb2RlQXN5bmMoWm9kUmVhbEVycm9yKTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/classic/parse.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/classic/schemas.js":
|
||
/*!************************************************!*\
|
||
!*** ./node_modules/zod/v4/classic/schemas.js ***!
|
||
\************************************************/
|
||
/***/ ((__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 */ ZodAny: () => (/* binding */ ZodAny),\n/* harmony export */ ZodArray: () => (/* binding */ ZodArray),\n/* harmony export */ ZodBase64: () => (/* binding */ ZodBase64),\n/* harmony export */ ZodBase64URL: () => (/* binding */ ZodBase64URL),\n/* harmony export */ ZodBigInt: () => (/* binding */ ZodBigInt),\n/* harmony export */ ZodBigIntFormat: () => (/* binding */ ZodBigIntFormat),\n/* harmony export */ ZodBoolean: () => (/* binding */ ZodBoolean),\n/* harmony export */ ZodCIDRv4: () => (/* binding */ ZodCIDRv4),\n/* harmony export */ ZodCIDRv6: () => (/* binding */ ZodCIDRv6),\n/* harmony export */ ZodCUID: () => (/* binding */ ZodCUID),\n/* harmony export */ ZodCUID2: () => (/* binding */ ZodCUID2),\n/* harmony export */ ZodCatch: () => (/* binding */ ZodCatch),\n/* harmony export */ ZodCodec: () => (/* binding */ ZodCodec),\n/* harmony export */ ZodCustom: () => (/* binding */ ZodCustom),\n/* harmony export */ ZodCustomStringFormat: () => (/* binding */ ZodCustomStringFormat),\n/* harmony export */ ZodDate: () => (/* binding */ ZodDate),\n/* harmony export */ ZodDefault: () => (/* binding */ ZodDefault),\n/* harmony export */ ZodDiscriminatedUnion: () => (/* binding */ ZodDiscriminatedUnion),\n/* harmony export */ ZodE164: () => (/* binding */ ZodE164),\n/* harmony export */ ZodEmail: () => (/* binding */ ZodEmail),\n/* harmony export */ ZodEmoji: () => (/* binding */ ZodEmoji),\n/* harmony export */ ZodEnum: () => (/* binding */ ZodEnum),\n/* harmony export */ ZodExactOptional: () => (/* binding */ ZodExactOptional),\n/* harmony export */ ZodFile: () => (/* binding */ ZodFile),\n/* harmony export */ ZodFunction: () => (/* binding */ ZodFunction),\n/* harmony export */ ZodGUID: () => (/* binding */ ZodGUID),\n/* harmony export */ ZodIPv4: () => (/* binding */ ZodIPv4),\n/* harmony export */ ZodIPv6: () => (/* binding */ ZodIPv6),\n/* harmony export */ ZodIntersection: () => (/* binding */ ZodIntersection),\n/* harmony export */ ZodJWT: () => (/* binding */ ZodJWT),\n/* harmony export */ ZodKSUID: () => (/* binding */ ZodKSUID),\n/* harmony export */ ZodLazy: () => (/* binding */ ZodLazy),\n/* harmony export */ ZodLiteral: () => (/* binding */ ZodLiteral),\n/* harmony export */ ZodMAC: () => (/* binding */ ZodMAC),\n/* harmony export */ ZodMap: () => (/* binding */ ZodMap),\n/* harmony export */ ZodNaN: () => (/* binding */ ZodNaN),\n/* harmony export */ ZodNanoID: () => (/* binding */ ZodNanoID),\n/* harmony export */ ZodNever: () => (/* binding */ ZodNever),\n/* harmony export */ ZodNonOptional: () => (/* binding */ ZodNonOptional),\n/* harmony export */ ZodNull: () => (/* binding */ ZodNull),\n/* harmony export */ ZodNullable: () => (/* binding */ ZodNullable),\n/* harmony export */ ZodNumber: () => (/* binding */ ZodNumber),\n/* harmony export */ ZodNumberFormat: () => (/* binding */ ZodNumberFormat),\n/* harmony export */ ZodObject: () => (/* binding */ ZodObject),\n/* harmony export */ ZodOptional: () => (/* binding */ ZodOptional),\n/* harmony export */ ZodPipe: () => (/* binding */ ZodPipe),\n/* harmony export */ ZodPrefault: () => (/* binding */ ZodPrefault),\n/* harmony export */ ZodPreprocess: () => (/* binding */ ZodPreprocess),\n/* harmony export */ ZodPromise: () => (/* binding */ ZodPromise),\n/* harmony export */ ZodReadonly: () => (/* binding */ ZodReadonly),\n/* harmony export */ ZodRecord: () => (/* binding */ ZodRecord),\n/* harmony export */ ZodSet: () => (/* binding */ ZodSet),\n/* harmony export */ ZodString: () => (/* binding */ ZodString),\n/* harmony export */ ZodStringFormat: () => (/* binding */ ZodStringFormat),\n/* harmony export */ ZodSuccess: () => (/* binding */ ZodSuccess),\n/* harmony export */ ZodSymbol: () => (/* binding */ ZodSymbol),\n/* harmony export */ ZodTemplateLiteral: () => (/* binding */ ZodTemplateLiteral),\n/* harmony export */ ZodTransform: () => (/* binding */ ZodTransform),\n/* harmony export */ ZodTuple: () => (/* binding */ ZodTuple),\n/* harmony export */ ZodType: () => (/* binding */ ZodType),\n/* harmony export */ ZodULID: () => (/* binding */ ZodULID),\n/* harmony export */ ZodURL: () => (/* binding */ ZodURL),\n/* harmony export */ ZodUUID: () => (/* binding */ ZodUUID),\n/* harmony export */ ZodUndefined: () => (/* binding */ ZodUndefined),\n/* harmony export */ ZodUnion: () => (/* binding */ ZodUnion),\n/* harmony export */ ZodUnknown: () => (/* binding */ ZodUnknown),\n/* harmony export */ ZodVoid: () => (/* binding */ ZodVoid),\n/* harmony export */ ZodXID: () => (/* binding */ ZodXID),\n/* harmony export */ ZodXor: () => (/* binding */ ZodXor),\n/* harmony export */ _ZodString: () => (/* binding */ _ZodString),\n/* harmony export */ _default: () => (/* binding */ _default),\n/* harmony export */ _function: () => (/* binding */ _function),\n/* harmony export */ any: () => (/* binding */ any),\n/* harmony export */ array: () => (/* binding */ array),\n/* harmony export */ base64: () => (/* binding */ base64),\n/* harmony export */ base64url: () => (/* binding */ base64url),\n/* harmony export */ bigint: () => (/* binding */ bigint),\n/* harmony export */ boolean: () => (/* binding */ boolean),\n/* harmony export */ \"catch\": () => (/* binding */ _catch),\n/* harmony export */ check: () => (/* binding */ check),\n/* harmony export */ cidrv4: () => (/* binding */ cidrv4),\n/* harmony export */ cidrv6: () => (/* binding */ cidrv6),\n/* harmony export */ codec: () => (/* binding */ codec),\n/* harmony export */ cuid: () => (/* binding */ cuid),\n/* harmony export */ cuid2: () => (/* binding */ cuid2),\n/* harmony export */ custom: () => (/* binding */ custom),\n/* harmony export */ date: () => (/* binding */ date),\n/* harmony export */ describe: () => (/* binding */ describe),\n/* harmony export */ discriminatedUnion: () => (/* binding */ discriminatedUnion),\n/* harmony export */ e164: () => (/* binding */ e164),\n/* harmony export */ email: () => (/* binding */ email),\n/* harmony export */ emoji: () => (/* binding */ emoji),\n/* harmony export */ \"enum\": () => (/* binding */ _enum),\n/* harmony export */ exactOptional: () => (/* binding */ exactOptional),\n/* harmony export */ file: () => (/* binding */ file),\n/* harmony export */ float32: () => (/* binding */ float32),\n/* harmony export */ float64: () => (/* binding */ float64),\n/* harmony export */ \"function\": () => (/* binding */ _function),\n/* harmony export */ guid: () => (/* binding */ guid),\n/* harmony export */ hash: () => (/* binding */ hash),\n/* harmony export */ hex: () => (/* binding */ hex),\n/* harmony export */ hostname: () => (/* binding */ hostname),\n/* harmony export */ httpUrl: () => (/* binding */ httpUrl),\n/* harmony export */ \"instanceof\": () => (/* binding */ _instanceof),\n/* harmony export */ int: () => (/* binding */ int),\n/* harmony export */ int32: () => (/* binding */ int32),\n/* harmony export */ int64: () => (/* binding */ int64),\n/* harmony export */ intersection: () => (/* binding */ intersection),\n/* harmony export */ invertCodec: () => (/* binding */ invertCodec),\n/* harmony export */ ipv4: () => (/* binding */ ipv4),\n/* harmony export */ ipv6: () => (/* binding */ ipv6),\n/* harmony export */ json: () => (/* binding */ json),\n/* harmony export */ jwt: () => (/* binding */ jwt),\n/* harmony export */ keyof: () => (/* binding */ keyof),\n/* harmony export */ ksuid: () => (/* binding */ ksuid),\n/* harmony export */ lazy: () => (/* binding */ lazy),\n/* harmony export */ literal: () => (/* binding */ literal),\n/* harmony export */ looseObject: () => (/* binding */ looseObject),\n/* harmony export */ looseRecord: () => (/* binding */ looseRecord),\n/* harmony export */ mac: () => (/* binding */ mac),\n/* harmony export */ map: () => (/* binding */ map),\n/* harmony export */ meta: () => (/* binding */ meta),\n/* harmony export */ nan: () => (/* binding */ nan),\n/* harmony export */ nanoid: () => (/* binding */ nanoid),\n/* harmony export */ nativeEnum: () => (/* binding */ nativeEnum),\n/* harmony export */ never: () => (/* binding */ never),\n/* harmony export */ nonoptional: () => (/* binding */ nonoptional),\n/* harmony export */ \"null\": () => (/* binding */ _null),\n/* harmony export */ nullable: () => (/* binding */ nullable),\n/* harmony export */ nullish: () => (/* binding */ nullish),\n/* harmony export */ number: () => (/* binding */ number),\n/* harmony export */ object: () => (/* binding */ object),\n/* harmony export */ optional: () => (/* binding */ optional),\n/* harmony export */ partialRecord: () => (/* binding */ partialRecord),\n/* harmony export */ pipe: () => (/* binding */ pipe),\n/* harmony export */ prefault: () => (/* binding */ prefault),\n/* harmony export */ preprocess: () => (/* binding */ preprocess),\n/* harmony export */ promise: () => (/* binding */ promise),\n/* harmony export */ readonly: () => (/* binding */ readonly),\n/* harmony export */ record: () => (/* binding */ record),\n/* harmony export */ refine: () => (/* binding */ refine),\n/* harmony export */ set: () => (/* binding */ set),\n/* harmony export */ strictObject: () => (/* binding */ strictObject),\n/* harmony export */ string: () => (/* binding */ string),\n/* harmony export */ stringFormat: () => (/* binding */ stringFormat),\n/* harmony export */ stringbool: () => (/* binding */ stringbool),\n/* harmony export */ success: () => (/* binding */ success),\n/* harmony export */ superRefine: () => (/* binding */ superRefine),\n/* harmony export */ symbol: () => (/* binding */ symbol),\n/* harmony export */ templateLiteral: () => (/* binding */ templateLiteral),\n/* harmony export */ transform: () => (/* binding */ transform),\n/* harmony export */ tuple: () => (/* binding */ tuple),\n/* harmony export */ uint32: () => (/* binding */ uint32),\n/* harmony export */ uint64: () => (/* binding */ uint64),\n/* harmony export */ ulid: () => (/* binding */ ulid),\n/* harmony export */ undefined: () => (/* binding */ _undefined),\n/* harmony export */ union: () => (/* binding */ union),\n/* harmony export */ unknown: () => (/* binding */ unknown),\n/* harmony export */ url: () => (/* binding */ url),\n/* harmony export */ uuid: () => (/* binding */ uuid),\n/* harmony export */ uuidv4: () => (/* binding */ uuidv4),\n/* harmony export */ uuidv6: () => (/* binding */ uuidv6),\n/* harmony export */ uuidv7: () => (/* binding */ uuidv7),\n/* harmony export */ \"void\": () => (/* binding */ _void),\n/* harmony export */ xid: () => (/* binding */ xid),\n/* harmony export */ xor: () => (/* binding */ xor)\n/* harmony export */ });\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../core/index.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/core.js\");\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../core/index.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/schemas.js\");\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../core/index.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/util.js\");\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../core/index.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/registries.js\");\n/* harmony import */ var _checks_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./checks.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/api.js\");\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../core/index.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/regexes.js\");\n/* harmony import */ var _core_index_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../core/index.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/checks.js\");\n/* harmony import */ var _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../core/json-schema-processors.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/json-schema-processors.js\");\n/* harmony import */ var _core_to_json_schema_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core/to-json-schema.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/to-json-schema.js\");\n/* harmony import */ var _iso_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./iso.js */ \"(app-pages-browser)/./node_modules/zod/v4/classic/iso.js\");\n/* harmony import */ var _parse_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./parse.js */ \"(app-pages-browser)/./node_modules/zod/v4/classic/parse.js\");\n\n\n\n\n\n\n\n// Lazy-bind builder methods.\n//\n// Builder methods (`.optional`, `.array`, `.refine`, ...) live as\n// non-enumerable getters on each concrete schema constructor's\n// prototype. On first access from an instance the getter allocates\n// `fn.bind(this)` and caches it as an own property on that instance,\n// so detached usage (`const m = schema.optional; m()`) still works\n// and the per-instance allocation only happens for methods actually\n// touched.\n//\n// One install per (prototype, group), memoized by `_installedGroups`.\nconst _installedGroups = /* @__PURE__ */ new WeakMap();\nfunction _installLazyMethods(inst, group, methods) {\n const proto = Object.getPrototypeOf(inst);\n let installed = _installedGroups.get(proto);\n if (!installed) {\n installed = new Set();\n _installedGroups.set(proto, installed);\n }\n if (installed.has(group))\n return;\n installed.add(group);\n for (const key in methods) {\n const fn = methods[key];\n Object.defineProperty(proto, key, {\n configurable: true,\n enumerable: false,\n get() {\n const bound = fn.bind(this);\n Object.defineProperty(this, key, {\n configurable: true,\n writable: true,\n enumerable: true,\n value: bound,\n });\n return bound;\n },\n set(v) {\n Object.defineProperty(this, key, {\n configurable: true,\n writable: true,\n enumerable: true,\n value: v,\n });\n },\n });\n }\n}\nconst ZodType = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodType\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodType.init(inst, def);\n Object.assign(inst[\"~standard\"], {\n jsonSchema: {\n input: (0,_core_to_json_schema_js__WEBPACK_IMPORTED_MODULE_2__.createStandardJSONSchemaMethod)(inst, \"input\"),\n output: (0,_core_to_json_schema_js__WEBPACK_IMPORTED_MODULE_2__.createStandardJSONSchemaMethod)(inst, \"output\"),\n },\n });\n inst.toJSONSchema = (0,_core_to_json_schema_js__WEBPACK_IMPORTED_MODULE_2__.createToJSONSchemaMethod)(inst, {});\n inst.def = def;\n inst.type = def.type;\n Object.defineProperty(inst, \"_def\", { value: def });\n // Parse-family is intentionally kept as per-instance closures: these are\n // the hot path AND the most-detached methods (`arr.map(schema.parse)`,\n // `const { parse } = schema`, etc.). Eager closures here mean callers pay\n // ~12 closure allocations per schema but get monomorphic call sites and\n // detached usage that \"just works\".\n inst.parse = (data, params) => _parse_js__WEBPACK_IMPORTED_MODULE_3__.parse(inst, data, params, { callee: inst.parse });\n inst.safeParse = (data, params) => _parse_js__WEBPACK_IMPORTED_MODULE_3__.safeParse(inst, data, params);\n inst.parseAsync = async (data, params) => _parse_js__WEBPACK_IMPORTED_MODULE_3__.parseAsync(inst, data, params, { callee: inst.parseAsync });\n inst.safeParseAsync = async (data, params) => _parse_js__WEBPACK_IMPORTED_MODULE_3__.safeParseAsync(inst, data, params);\n inst.spa = inst.safeParseAsync;\n inst.encode = (data, params) => _parse_js__WEBPACK_IMPORTED_MODULE_3__.encode(inst, data, params);\n inst.decode = (data, params) => _parse_js__WEBPACK_IMPORTED_MODULE_3__.decode(inst, data, params);\n inst.encodeAsync = async (data, params) => _parse_js__WEBPACK_IMPORTED_MODULE_3__.encodeAsync(inst, data, params);\n inst.decodeAsync = async (data, params) => _parse_js__WEBPACK_IMPORTED_MODULE_3__.decodeAsync(inst, data, params);\n inst.safeEncode = (data, params) => _parse_js__WEBPACK_IMPORTED_MODULE_3__.safeEncode(inst, data, params);\n inst.safeDecode = (data, params) => _parse_js__WEBPACK_IMPORTED_MODULE_3__.safeDecode(inst, data, params);\n inst.safeEncodeAsync = async (data, params) => _parse_js__WEBPACK_IMPORTED_MODULE_3__.safeEncodeAsync(inst, data, params);\n inst.safeDecodeAsync = async (data, params) => _parse_js__WEBPACK_IMPORTED_MODULE_3__.safeDecodeAsync(inst, data, params);\n // All builder methods are placed on the internal prototype as lazy-bind\n // getters. On first access per-instance, a bound thunk is allocated and\n // cached as an own property; subsequent accesses skip the getter. This\n // means: no per-instance allocation for unused methods, full\n // detachability preserved (`const m = schema.optional; m()` works), and\n // shared underlying function references across all instances.\n _installLazyMethods(inst, \"ZodType\", {\n check(...chks) {\n const def = this.def;\n return this.clone(_core_index_js__WEBPACK_IMPORTED_MODULE_4__.mergeDefs(def, {\n checks: [\n ...(def.checks ?? []),\n ...chks.map((ch) => typeof ch === \"function\" ? { _zod: { check: ch, def: { check: \"custom\" }, onattach: [] } } : ch),\n ],\n }), { parent: true });\n },\n with(...chks) {\n return this.check(...chks);\n },\n clone(def, params) {\n return _core_index_js__WEBPACK_IMPORTED_MODULE_4__.clone(this, def, params);\n },\n brand() {\n return this;\n },\n register(reg, meta) {\n reg.add(this, meta);\n return this;\n },\n refine(check, params) {\n return this.check(refine(check, params));\n },\n superRefine(refinement, params) {\n return this.check(superRefine(refinement, params));\n },\n overwrite(fn) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._overwrite(fn));\n },\n optional() {\n return optional(this);\n },\n exactOptional() {\n return exactOptional(this);\n },\n nullable() {\n return nullable(this);\n },\n nullish() {\n return optional(nullable(this));\n },\n nonoptional(params) {\n return nonoptional(this, params);\n },\n array() {\n return array(this);\n },\n or(arg) {\n return union([this, arg]);\n },\n and(arg) {\n return intersection(this, arg);\n },\n transform(tx) {\n return pipe(this, transform(tx));\n },\n default(d) {\n return _default(this, d);\n },\n prefault(d) {\n return prefault(this, d);\n },\n catch(params) {\n return _catch(this, params);\n },\n pipe(target) {\n return pipe(this, target);\n },\n readonly() {\n return readonly(this);\n },\n describe(description) {\n const cl = this.clone();\n _core_index_js__WEBPACK_IMPORTED_MODULE_6__.globalRegistry.add(cl, { description });\n return cl;\n },\n meta(...args) {\n // overloaded: meta() returns the registered metadata, meta(data)\n // returns a clone with `data` registered. The mapped type picks\n // up the second overload, so we accept variadic any-args and\n // return `any` to satisfy both at runtime.\n if (args.length === 0)\n return _core_index_js__WEBPACK_IMPORTED_MODULE_6__.globalRegistry.get(this);\n const cl = this.clone();\n _core_index_js__WEBPACK_IMPORTED_MODULE_6__.globalRegistry.add(cl, args[0]);\n return cl;\n },\n isOptional() {\n return this.safeParse(undefined).success;\n },\n isNullable() {\n return this.safeParse(null).success;\n },\n apply(fn) {\n return fn(this);\n },\n });\n Object.defineProperty(inst, \"description\", {\n get() {\n return _core_index_js__WEBPACK_IMPORTED_MODULE_6__.globalRegistry.get(inst)?.description;\n },\n configurable: true,\n });\n return inst;\n});\n/** @internal */\nconst _ZodString = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"_ZodString\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodString.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.stringProcessor(inst, ctx, json, params);\n const bag = inst._zod.bag;\n inst.format = bag.format ?? null;\n inst.minLength = bag.minimum ?? null;\n inst.maxLength = bag.maximum ?? null;\n _installLazyMethods(inst, \"_ZodString\", {\n regex(...args) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._regex(...args));\n },\n includes(...args) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._includes(...args));\n },\n startsWith(...args) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._startsWith(...args));\n },\n endsWith(...args) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._endsWith(...args));\n },\n min(...args) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._minLength(...args));\n },\n max(...args) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._maxLength(...args));\n },\n length(...args) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._length(...args));\n },\n nonempty(...args) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._minLength(1, ...args));\n },\n lowercase(params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._lowercase(params));\n },\n uppercase(params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._uppercase(params));\n },\n trim() {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._trim());\n },\n normalize(...args) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._normalize(...args));\n },\n toLowerCase() {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._toLowerCase());\n },\n toUpperCase() {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._toUpperCase());\n },\n slugify() {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._slugify());\n },\n });\n});\nconst ZodString = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodString\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodString.init(inst, def);\n _ZodString.init(inst, def);\n inst.email = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._email(ZodEmail, params));\n inst.url = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._url(ZodURL, params));\n inst.jwt = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._jwt(ZodJWT, params));\n inst.emoji = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._emoji(ZodEmoji, params));\n inst.guid = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._guid(ZodGUID, params));\n inst.uuid = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._uuid(ZodUUID, params));\n inst.uuidv4 = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._uuidv4(ZodUUID, params));\n inst.uuidv6 = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._uuidv6(ZodUUID, params));\n inst.uuidv7 = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._uuidv7(ZodUUID, params));\n inst.nanoid = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._nanoid(ZodNanoID, params));\n inst.guid = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._guid(ZodGUID, params));\n inst.cuid = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._cuid(ZodCUID, params));\n inst.cuid2 = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._cuid2(ZodCUID2, params));\n inst.ulid = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._ulid(ZodULID, params));\n inst.base64 = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._base64(ZodBase64, params));\n inst.base64url = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._base64url(ZodBase64URL, params));\n inst.xid = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._xid(ZodXID, params));\n inst.ksuid = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._ksuid(ZodKSUID, params));\n inst.ipv4 = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._ipv4(ZodIPv4, params));\n inst.ipv6 = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._ipv6(ZodIPv6, params));\n inst.cidrv4 = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._cidrv4(ZodCIDRv4, params));\n inst.cidrv6 = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._cidrv6(ZodCIDRv6, params));\n inst.e164 = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._e164(ZodE164, params));\n // iso\n inst.datetime = (params) => inst.check(_iso_js__WEBPACK_IMPORTED_MODULE_8__.datetime(params));\n inst.date = (params) => inst.check(_iso_js__WEBPACK_IMPORTED_MODULE_8__.date(params));\n inst.time = (params) => inst.check(_iso_js__WEBPACK_IMPORTED_MODULE_8__.time(params));\n inst.duration = (params) => inst.check(_iso_js__WEBPACK_IMPORTED_MODULE_8__.duration(params));\n});\nfunction string(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._string(ZodString, params);\n}\nconst ZodStringFormat = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodStringFormat\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodStringFormat.init(inst, def);\n _ZodString.init(inst, def);\n});\nconst ZodEmail = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodEmail\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodEmail.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction email(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._email(ZodEmail, params);\n}\nconst ZodGUID = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodGUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodGUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction guid(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._guid(ZodGUID, params);\n}\nconst ZodUUID = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodUUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodUUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction uuid(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._uuid(ZodUUID, params);\n}\nfunction uuidv4(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._uuidv4(ZodUUID, params);\n}\n// ZodUUIDv6\nfunction uuidv6(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._uuidv6(ZodUUID, params);\n}\n// ZodUUIDv7\nfunction uuidv7(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._uuidv7(ZodUUID, params);\n}\nconst ZodURL = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodURL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodURL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction url(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._url(ZodURL, params);\n}\nfunction httpUrl(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._url(ZodURL, {\n protocol: _core_index_js__WEBPACK_IMPORTED_MODULE_9__.httpProtocol,\n hostname: _core_index_js__WEBPACK_IMPORTED_MODULE_9__.domain,\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\nconst ZodEmoji = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodEmoji\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodEmoji.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction emoji(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._emoji(ZodEmoji, params);\n}\nconst ZodNanoID = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodNanoID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodNanoID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction nanoid(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._nanoid(ZodNanoID, params);\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nconst ZodCUID = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodCUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\n/**\n * Validates a CUID v1 string.\n *\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2 | `z.cuid2()`} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nfunction cuid(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._cuid(ZodCUID, params);\n}\nconst ZodCUID2 = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodCUID2\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCUID2.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction cuid2(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._cuid2(ZodCUID2, params);\n}\nconst ZodULID = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodULID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodULID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction ulid(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._ulid(ZodULID, params);\n}\nconst ZodXID = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodXID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodXID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction xid(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._xid(ZodXID, params);\n}\nconst ZodKSUID = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodKSUID\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodKSUID.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction ksuid(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._ksuid(ZodKSUID, params);\n}\nconst ZodIPv4 = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodIPv4\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodIPv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction ipv4(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._ipv4(ZodIPv4, params);\n}\nconst ZodMAC = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodMAC\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodMAC.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction mac(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._mac(ZodMAC, params);\n}\nconst ZodIPv6 = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodIPv6\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodIPv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction ipv6(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._ipv6(ZodIPv6, params);\n}\nconst ZodCIDRv4 = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodCIDRv4\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCIDRv4.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction cidrv4(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._cidrv4(ZodCIDRv4, params);\n}\nconst ZodCIDRv6 = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodCIDRv6\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCIDRv6.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction cidrv6(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._cidrv6(ZodCIDRv6, params);\n}\nconst ZodBase64 = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodBase64\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodBase64.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction base64(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._base64(ZodBase64, params);\n}\nconst ZodBase64URL = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodBase64URL\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodBase64URL.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction base64url(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._base64url(ZodBase64URL, params);\n}\nconst ZodE164 = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodE164\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodE164.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction e164(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._e164(ZodE164, params);\n}\nconst ZodJWT = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodJWT\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodJWT.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction jwt(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._jwt(ZodJWT, params);\n}\nconst ZodCustomStringFormat = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodCustomStringFormat\", (inst, def) => {\n // ZodStringFormat.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCustomStringFormat.init(inst, def);\n ZodStringFormat.init(inst, def);\n});\nfunction stringFormat(format, fnOrRegex, _params = {}) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._stringFormat(ZodCustomStringFormat, format, fnOrRegex, _params);\n}\nfunction hostname(_params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._stringFormat(ZodCustomStringFormat, \"hostname\", _core_index_js__WEBPACK_IMPORTED_MODULE_9__.hostname, _params);\n}\nfunction hex(_params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._stringFormat(ZodCustomStringFormat, \"hex\", _core_index_js__WEBPACK_IMPORTED_MODULE_9__.hex, _params);\n}\nfunction hash(alg, params) {\n const enc = params?.enc ?? \"hex\";\n const format = `${alg}_${enc}`;\n const regex = _core_index_js__WEBPACK_IMPORTED_MODULE_9__[format];\n if (!regex)\n throw new Error(`Unrecognized hash format: ${format}`);\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._stringFormat(ZodCustomStringFormat, format, regex, params);\n}\nconst ZodNumber = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodNumber\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodNumber.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.numberProcessor(inst, ctx, json, params);\n _installLazyMethods(inst, \"ZodNumber\", {\n gt(value, params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._gt(value, params));\n },\n gte(value, params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._gte(value, params));\n },\n min(value, params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._gte(value, params));\n },\n lt(value, params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._lt(value, params));\n },\n lte(value, params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._lte(value, params));\n },\n max(value, params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._lte(value, params));\n },\n int(params) {\n return this.check(int(params));\n },\n safe(params) {\n return this.check(int(params));\n },\n positive(params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._gt(0, params));\n },\n nonnegative(params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._gte(0, params));\n },\n negative(params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._lt(0, params));\n },\n nonpositive(params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._lte(0, params));\n },\n multipleOf(value, params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._multipleOf(value, params));\n },\n step(value, params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._multipleOf(value, params));\n },\n finite() {\n return this;\n },\n });\n const bag = inst._zod.bag;\n inst.minValue =\n Math.max(bag.minimum ?? Number.NEGATIVE_INFINITY, bag.exclusiveMinimum ?? Number.NEGATIVE_INFINITY) ?? null;\n inst.maxValue =\n Math.min(bag.maximum ?? Number.POSITIVE_INFINITY, bag.exclusiveMaximum ?? Number.POSITIVE_INFINITY) ?? null;\n inst.isInt = (bag.format ?? \"\").includes(\"int\") || Number.isSafeInteger(bag.multipleOf ?? 0.5);\n inst.isFinite = true;\n inst.format = bag.format ?? null;\n});\nfunction number(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._number(ZodNumber, params);\n}\nconst ZodNumberFormat = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodNumberFormat\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodNumberFormat.init(inst, def);\n ZodNumber.init(inst, def);\n});\nfunction int(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._int(ZodNumberFormat, params);\n}\nfunction float32(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._float32(ZodNumberFormat, params);\n}\nfunction float64(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._float64(ZodNumberFormat, params);\n}\nfunction int32(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._int32(ZodNumberFormat, params);\n}\nfunction uint32(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._uint32(ZodNumberFormat, params);\n}\nconst ZodBoolean = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodBoolean\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodBoolean.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.booleanProcessor(inst, ctx, json, params);\n});\nfunction boolean(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._boolean(ZodBoolean, params);\n}\nconst ZodBigInt = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodBigInt\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodBigInt.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.bigintProcessor(inst, ctx, json, params);\n inst.gte = (value, params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._gte(value, params));\n inst.min = (value, params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._gte(value, params));\n inst.gt = (value, params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._gt(value, params));\n inst.gte = (value, params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._gte(value, params));\n inst.min = (value, params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._gte(value, params));\n inst.lt = (value, params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._lt(value, params));\n inst.lte = (value, params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._lte(value, params));\n inst.max = (value, params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._lte(value, params));\n inst.positive = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._gt(BigInt(0), params));\n inst.negative = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._lt(BigInt(0), params));\n inst.nonpositive = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._lte(BigInt(0), params));\n inst.nonnegative = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._gte(BigInt(0), params));\n inst.multipleOf = (value, params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._multipleOf(value, params));\n const bag = inst._zod.bag;\n inst.minValue = bag.minimum ?? null;\n inst.maxValue = bag.maximum ?? null;\n inst.format = bag.format ?? null;\n});\nfunction bigint(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._bigint(ZodBigInt, params);\n}\nconst ZodBigIntFormat = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodBigIntFormat\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodBigIntFormat.init(inst, def);\n ZodBigInt.init(inst, def);\n});\n// int64\nfunction int64(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._int64(ZodBigIntFormat, params);\n}\n// uint64\nfunction uint64(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._uint64(ZodBigIntFormat, params);\n}\nconst ZodSymbol = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodSymbol\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodSymbol.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.symbolProcessor(inst, ctx, json, params);\n});\nfunction symbol(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._symbol(ZodSymbol, params);\n}\nconst ZodUndefined = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodUndefined\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodUndefined.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.undefinedProcessor(inst, ctx, json, params);\n});\nfunction _undefined(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._undefined(ZodUndefined, params);\n}\n\nconst ZodNull = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodNull\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodNull.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.nullProcessor(inst, ctx, json, params);\n});\nfunction _null(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._null(ZodNull, params);\n}\n\nconst ZodAny = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodAny\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodAny.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.anyProcessor(inst, ctx, json, params);\n});\nfunction any() {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._any(ZodAny);\n}\nconst ZodUnknown = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodUnknown\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodUnknown.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.unknownProcessor(inst, ctx, json, params);\n});\nfunction unknown() {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._unknown(ZodUnknown);\n}\nconst ZodNever = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodNever\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodNever.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.neverProcessor(inst, ctx, json, params);\n});\nfunction never(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._never(ZodNever, params);\n}\nconst ZodVoid = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodVoid\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodVoid.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.voidProcessor(inst, ctx, json, params);\n});\nfunction _void(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._void(ZodVoid, params);\n}\n\nconst ZodDate = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodDate\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodDate.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.dateProcessor(inst, ctx, json, params);\n inst.min = (value, params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._gte(value, params));\n inst.max = (value, params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._lte(value, params));\n const c = inst._zod.bag;\n inst.minDate = c.minimum ? new Date(c.minimum) : null;\n inst.maxDate = c.maximum ? new Date(c.maximum) : null;\n});\nfunction date(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._date(ZodDate, params);\n}\nconst ZodArray = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodArray\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodArray.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.arrayProcessor(inst, ctx, json, params);\n inst.element = def.element;\n _installLazyMethods(inst, \"ZodArray\", {\n min(n, params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._minLength(n, params));\n },\n nonempty(params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._minLength(1, params));\n },\n max(n, params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._maxLength(n, params));\n },\n length(n, params) {\n return this.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._length(n, params));\n },\n unwrap() {\n return this.element;\n },\n });\n});\nfunction array(element, params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._array(ZodArray, element, params);\n}\n// .keyof\nfunction keyof(schema) {\n const shape = schema._zod.def.shape;\n return _enum(Object.keys(shape));\n}\nconst ZodObject = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodObject\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodObjectJIT.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.objectProcessor(inst, ctx, json, params);\n _core_index_js__WEBPACK_IMPORTED_MODULE_4__.defineLazy(inst, \"shape\", () => {\n return def.shape;\n });\n _installLazyMethods(inst, \"ZodObject\", {\n keyof() {\n return _enum(Object.keys(this._zod.def.shape));\n },\n catchall(catchall) {\n return this.clone({ ...this._zod.def, catchall: catchall });\n },\n passthrough() {\n return this.clone({ ...this._zod.def, catchall: unknown() });\n },\n loose() {\n return this.clone({ ...this._zod.def, catchall: unknown() });\n },\n strict() {\n return this.clone({ ...this._zod.def, catchall: never() });\n },\n strip() {\n return this.clone({ ...this._zod.def, catchall: undefined });\n },\n extend(incoming) {\n return _core_index_js__WEBPACK_IMPORTED_MODULE_4__.extend(this, incoming);\n },\n safeExtend(incoming) {\n return _core_index_js__WEBPACK_IMPORTED_MODULE_4__.safeExtend(this, incoming);\n },\n merge(other) {\n return _core_index_js__WEBPACK_IMPORTED_MODULE_4__.merge(this, other);\n },\n pick(mask) {\n return _core_index_js__WEBPACK_IMPORTED_MODULE_4__.pick(this, mask);\n },\n omit(mask) {\n return _core_index_js__WEBPACK_IMPORTED_MODULE_4__.omit(this, mask);\n },\n partial(...args) {\n return _core_index_js__WEBPACK_IMPORTED_MODULE_4__.partial(ZodOptional, this, args[0]);\n },\n required(...args) {\n return _core_index_js__WEBPACK_IMPORTED_MODULE_4__.required(ZodNonOptional, this, args[0]);\n },\n });\n});\nfunction object(shape, params) {\n const def = {\n type: \"object\",\n shape: shape ?? {},\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n };\n return new ZodObject(def);\n}\n// strictObject\nfunction strictObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: never(),\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\n// looseObject\nfunction looseObject(shape, params) {\n return new ZodObject({\n type: \"object\",\n shape,\n catchall: unknown(),\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\nconst ZodUnion = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodUnion\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodUnion.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\nfunction union(options, params) {\n return new ZodUnion({\n type: \"union\",\n options: options,\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\nconst ZodXor = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodXor\", (inst, def) => {\n ZodUnion.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodXor.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.unionProcessor(inst, ctx, json, params);\n inst.options = def.options;\n});\n/** Creates an exclusive union (XOR) where exactly one option must match.\n * Unlike regular unions that succeed when any option matches, xor fails if\n * zero or more than one option matches the input. */\nfunction xor(options, params) {\n return new ZodXor({\n type: \"union\",\n options: options,\n inclusive: false,\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\nconst ZodDiscriminatedUnion = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodDiscriminatedUnion\", (inst, def) => {\n ZodUnion.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodDiscriminatedUnion.init(inst, def);\n});\nfunction discriminatedUnion(discriminator, options, params) {\n // const [options, params] = args;\n return new ZodDiscriminatedUnion({\n type: \"union\",\n options,\n discriminator,\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\nconst ZodIntersection = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodIntersection\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodIntersection.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.intersectionProcessor(inst, ctx, json, params);\n});\nfunction intersection(left, right) {\n return new ZodIntersection({\n type: \"intersection\",\n left: left,\n right: right,\n });\n}\nconst ZodTuple = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodTuple\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodTuple.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.tupleProcessor(inst, ctx, json, params);\n inst.rest = (rest) => inst.clone({\n ...inst._zod.def,\n rest: rest,\n });\n});\nfunction tuple(items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new ZodTuple({\n type: \"tuple\",\n items: items,\n rest,\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\nconst ZodRecord = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodRecord\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodRecord.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.recordProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n});\nfunction record(keyType, valueType, params) {\n // v3-compat: z.record(valueType, params?) — defaults keyType to z.string()\n if (!valueType || !valueType._zod) {\n return new ZodRecord({\n type: \"record\",\n keyType: string(),\n valueType: keyType,\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(valueType),\n });\n }\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\n// type alksjf = core.output<core.$ZodRecordKey>;\nfunction partialRecord(keyType, valueType, params) {\n const k = _core_index_js__WEBPACK_IMPORTED_MODULE_4__.clone(keyType);\n k._zod.values = undefined;\n return new ZodRecord({\n type: \"record\",\n keyType: k,\n valueType: valueType,\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\nfunction looseRecord(keyType, valueType, params) {\n return new ZodRecord({\n type: \"record\",\n keyType,\n valueType: valueType,\n mode: \"loose\",\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\nconst ZodMap = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodMap\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodMap.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.mapProcessor(inst, ctx, json, params);\n inst.keyType = def.keyType;\n inst.valueType = def.valueType;\n inst.min = (...args) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._minSize(...args));\n inst.nonempty = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._minSize(1, params));\n inst.max = (...args) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._maxSize(...args));\n inst.size = (...args) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._size(...args));\n});\nfunction map(keyType, valueType, params) {\n return new ZodMap({\n type: \"map\",\n keyType: keyType,\n valueType: valueType,\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\nconst ZodSet = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodSet\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodSet.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.setProcessor(inst, ctx, json, params);\n inst.min = (...args) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._minSize(...args));\n inst.nonempty = (params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._minSize(1, params));\n inst.max = (...args) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._maxSize(...args));\n inst.size = (...args) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._size(...args));\n});\nfunction set(valueType, params) {\n return new ZodSet({\n type: \"set\",\n valueType: valueType,\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\nconst ZodEnum = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodEnum\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodEnum.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.enumProcessor(inst, ctx, json, params);\n inst.enum = def.entries;\n inst.options = Object.values(def.entries);\n const keys = new Set(Object.keys(def.entries));\n inst.extract = (values, params) => {\n const newEntries = {};\n for (const value of values) {\n if (keys.has(value)) {\n newEntries[value] = def.entries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n entries: newEntries,\n });\n };\n inst.exclude = (values, params) => {\n const newEntries = { ...def.entries };\n for (const value of values) {\n if (keys.has(value)) {\n delete newEntries[value];\n }\n else\n throw new Error(`Key ${value} not found in enum`);\n }\n return new ZodEnum({\n ...def,\n checks: [],\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n entries: newEntries,\n });\n };\n});\nfunction _enum(values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n return new ZodEnum({\n type: \"enum\",\n entries,\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\n\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nfunction nativeEnum(entries, params) {\n return new ZodEnum({\n type: \"enum\",\n entries,\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\nconst ZodLiteral = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodLiteral\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.literalProcessor(inst, ctx, json, params);\n inst.values = new Set(def.values);\n Object.defineProperty(inst, \"value\", {\n get() {\n if (def.values.length > 1) {\n throw new Error(\"This schema contains multiple valid literal values. Use `.values` instead.\");\n }\n return def.values[0];\n },\n });\n});\nfunction literal(value, params) {\n return new ZodLiteral({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\nconst ZodFile = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodFile\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodFile.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.fileProcessor(inst, ctx, json, params);\n inst.min = (size, params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._minSize(size, params));\n inst.max = (size, params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._maxSize(size, params));\n inst.mime = (types, params) => inst.check(_checks_js__WEBPACK_IMPORTED_MODULE_5__._mime(Array.isArray(types) ? types : [types], params));\n});\nfunction file(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._file(ZodFile, params);\n}\nconst ZodTransform = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodTransform\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodTransform.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.transformProcessor(inst, ctx, json, params);\n inst._zod.parse = (payload, _ctx) => {\n if (_ctx.direction === \"backward\") {\n throw new _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$ZodEncodeError(inst.constructor.name);\n }\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(_core_index_js__WEBPACK_IMPORTED_MODULE_4__.issue(issue, payload.value, def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = inst);\n // _issue.continue ??= true;\n payload.issues.push(_core_index_js__WEBPACK_IMPORTED_MODULE_4__.issue(_issue));\n }\n };\n const output = def.transform(payload.value, payload);\n if (output instanceof Promise) {\n return output.then((output) => {\n payload.value = output;\n payload.fallback = true;\n return payload;\n });\n }\n payload.value = output;\n payload.fallback = true;\n return payload;\n };\n});\nfunction transform(fn) {\n return new ZodTransform({\n type: \"transform\",\n transform: fn,\n });\n}\nconst ZodOptional = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodOptional\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction optional(innerType) {\n return new ZodOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nconst ZodExactOptional = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodExactOptional\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodExactOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.optionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction exactOptional(innerType) {\n return new ZodExactOptional({\n type: \"optional\",\n innerType: innerType,\n });\n}\nconst ZodNullable = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodNullable\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodNullable.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.nullableProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction nullable(innerType) {\n return new ZodNullable({\n type: \"nullable\",\n innerType: innerType,\n });\n}\n// nullish\nfunction nullish(innerType) {\n return optional(nullable(innerType));\n}\nconst ZodDefault = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodDefault\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodDefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.defaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeDefault = inst.unwrap;\n});\nfunction _default(innerType, defaultValue) {\n return new ZodDefault({\n type: \"default\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : _core_index_js__WEBPACK_IMPORTED_MODULE_4__.shallowClone(defaultValue);\n },\n });\n}\nconst ZodPrefault = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodPrefault\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodPrefault.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.prefaultProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction prefault(innerType, defaultValue) {\n return new ZodPrefault({\n type: \"prefault\",\n innerType: innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : _core_index_js__WEBPACK_IMPORTED_MODULE_4__.shallowClone(defaultValue);\n },\n });\n}\nconst ZodNonOptional = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodNonOptional\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodNonOptional.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.nonoptionalProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction nonoptional(innerType, params) {\n return new ZodNonOptional({\n type: \"nonoptional\",\n innerType: innerType,\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\nconst ZodSuccess = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodSuccess\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodSuccess.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.successProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction success(innerType) {\n return new ZodSuccess({\n type: \"success\",\n innerType: innerType,\n });\n}\nconst ZodCatch = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodCatch\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCatch.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.catchProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n inst.removeCatch = inst.unwrap;\n});\nfunction _catch(innerType, catchValue) {\n return new ZodCatch({\n type: \"catch\",\n innerType: innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n\nconst ZodNaN = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodNaN\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodNaN.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.nanProcessor(inst, ctx, json, params);\n});\nfunction nan(params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._nan(ZodNaN, params);\n}\nconst ZodPipe = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodPipe\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodPipe.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.pipeProcessor(inst, ctx, json, params);\n inst.in = def.in;\n inst.out = def.out;\n});\nfunction pipe(in_, out) {\n return new ZodPipe({\n type: \"pipe\",\n in: in_,\n out: out,\n // ...util.normalizeParams(params),\n });\n}\nconst ZodCodec = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodCodec\", (inst, def) => {\n ZodPipe.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCodec.init(inst, def);\n});\nfunction codec(in_, out, params) {\n return new ZodCodec({\n type: \"pipe\",\n in: in_,\n out: out,\n transform: params.decode,\n reverseTransform: params.encode,\n });\n}\nfunction invertCodec(codec) {\n const def = codec._zod.def;\n return new ZodCodec({\n type: \"pipe\",\n in: def.out,\n out: def.in,\n transform: def.reverseTransform,\n reverseTransform: def.transform,\n });\n}\nconst ZodPreprocess = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodPreprocess\", (inst, def) => {\n ZodPipe.init(inst, def);\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodPreprocess.init(inst, def);\n});\nconst ZodReadonly = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodReadonly\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodReadonly.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.readonlyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction readonly(innerType) {\n return new ZodReadonly({\n type: \"readonly\",\n innerType: innerType,\n });\n}\nconst ZodTemplateLiteral = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodTemplateLiteral\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodTemplateLiteral.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.templateLiteralProcessor(inst, ctx, json, params);\n});\nfunction templateLiteral(parts, params) {\n return new ZodTemplateLiteral({\n type: \"template_literal\",\n parts,\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n}\nconst ZodLazy = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodLazy\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodLazy.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.lazyProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.getter();\n});\nfunction lazy(getter) {\n return new ZodLazy({\n type: \"lazy\",\n getter: getter,\n });\n}\nconst ZodPromise = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodPromise\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodPromise.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.promiseProcessor(inst, ctx, json, params);\n inst.unwrap = () => inst._zod.def.innerType;\n});\nfunction promise(innerType) {\n return new ZodPromise({\n type: \"promise\",\n innerType: innerType,\n });\n}\nconst ZodFunction = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodFunction\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodFunction.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.functionProcessor(inst, ctx, json, params);\n});\nfunction _function(params) {\n return new ZodFunction({\n type: \"function\",\n input: Array.isArray(params?.input) ? tuple(params?.input) : (params?.input ?? array(unknown())),\n output: params?.output ?? unknown(),\n });\n}\n\nconst ZodCustom = /*@__PURE__*/ _core_index_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"ZodCustom\", (inst, def) => {\n _core_index_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCustom.init(inst, def);\n ZodType.init(inst, def);\n inst._zod.processJSONSchema = (ctx, json, params) => _core_json_schema_processors_js__WEBPACK_IMPORTED_MODULE_7__.customProcessor(inst, ctx, json, params);\n});\n// custom checks\nfunction check(fn) {\n const ch = new _core_index_js__WEBPACK_IMPORTED_MODULE_10__.$ZodCheck({\n check: \"custom\",\n // ...util.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\nfunction custom(fn, _params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._custom(ZodCustom, fn ?? (() => true), _params);\n}\nfunction refine(fn, _params = {}) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._refine(ZodCustom, fn, _params);\n}\n// superRefine\nfunction superRefine(fn, params) {\n return _checks_js__WEBPACK_IMPORTED_MODULE_5__._superRefine(fn, params);\n}\n// Re-export describe and meta from core\nconst describe = _checks_js__WEBPACK_IMPORTED_MODULE_5__.describe;\nconst meta = _checks_js__WEBPACK_IMPORTED_MODULE_5__.meta;\nfunction _instanceof(cls, params = {}) {\n const inst = new ZodCustom({\n type: \"custom\",\n check: \"custom\",\n fn: (data) => data instanceof cls,\n abort: true,\n ..._core_index_js__WEBPACK_IMPORTED_MODULE_4__.normalizeParams(params),\n });\n inst._zod.bag.Class = cls;\n // Override check to emit invalid_type instead of custom\n inst._zod.check = (payload) => {\n if (!(payload.value instanceof cls)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: cls.name,\n input: payload.value,\n inst,\n path: [...(inst._zod.def.path ?? [])],\n });\n }\n };\n return inst;\n}\n\n// stringbool\nconst stringbool = (...args) => _checks_js__WEBPACK_IMPORTED_MODULE_5__._stringbool({\n Codec: ZodCodec,\n Boolean: ZodBoolean,\n String: ZodString,\n}, ...args);\nfunction json(params) {\n const jsonSchema = lazy(() => {\n return union([string(params), number(), boolean(), _null(), array(jsonSchema), record(string(), jsonSchema)]);\n });\n return jsonSchema;\n}\n// preprocess\nfunction preprocess(fn, schema) {\n return new ZodPreprocess({\n type: \"pipe\",\n in: transform(fn),\n out: schema,\n });\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY2xhc3NpYy9zY2hlbWFzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUF5QztBQUNEO0FBQ3dCO0FBQ3FDO0FBQy9EO0FBQ047QUFDSTtBQUNwQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxrREFBa0Q7QUFDbEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQixhQUFhO0FBQ2IsU0FBUztBQUNUO0FBQ0E7QUFDTyw4QkFBOEIsd0RBQWlCO0FBQ3RELElBQUksb0RBQWE7QUFDakI7QUFDQTtBQUNBLG1CQUFtQix1RkFBOEI7QUFDakQsb0JBQW9CLHVGQUE4QjtBQUNsRCxTQUFTO0FBQ1QsS0FBSztBQUNMLHdCQUF3QixpRkFBd0IsU0FBUztBQUN6RDtBQUNBO0FBQ0EsMENBQTBDLFlBQVk7QUFDdEQ7QUFDQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQSxtQ0FBbUMsNENBQVcsdUJBQXVCLG9CQUFvQjtBQUN6Rix1Q0FBdUMsZ0RBQWU7QUFDdEQsOENBQThDLGlEQUFnQix1QkFBdUIseUJBQXlCO0FBQzlHLGtEQUFrRCxxREFBb0I7QUFD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QUNPO0FBQ1AsbUJBQW1CLHNEQUFjO0FBQ2pDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ087QUFDUCxXQUFXLCtDQUFZO0FBQ3ZCO0FBQ08sZ0NBQWdDO0FBQ3ZDLFdBQVcsK0NBQVk7QUFDdkI7QUFDQTtBQUNPO0FBQ1AsV0FBVyxvREFBaUI7QUFDNUI7QUFDQTtBQUNPLGlCQUFpQixnREFBYTtBQUM5QixhQUFhLDRDQUFTO0FBQzdCLHFDQUFxQztBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVywyREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ3FDO0FBQ3JDO0FBQ08sZ0NBQWdDLG1EQUFnQjtBQUN2RDtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ007QUFDUDtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvem9kL3Y0L2NsYXNzaWMvc2NoZW1hcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjb3JlIGZyb20gXCIuLi9jb3JlL2luZGV4LmpzXCI7XG5pbXBvcnQgeyB1dGlsIH0gZnJvbSBcIi4uL2NvcmUvaW5kZXguanNcIjtcbmltcG9ydCAqIGFzIHByb2Nlc3NvcnMgZnJvbSBcIi4uL2NvcmUvanNvbi1zY2hlbWEtcHJvY2Vzc29ycy5qc1wiO1xuaW1wb3J0IHsgY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kLCBjcmVhdGVUb0pTT05TY2hlbWFNZXRob2QgfSBmcm9tIFwiLi4vY29yZS90by1qc29uLXNjaGVtYS5qc1wiO1xuaW1wb3J0ICogYXMgY2hlY2tzIGZyb20gXCIuL2NoZWNrcy5qc1wiO1xuaW1wb3J0ICogYXMgaXNvIGZyb20gXCIuL2lzby5qc1wiO1xuaW1wb3J0ICogYXMgcGFyc2UgZnJvbSBcIi4vcGFyc2UuanNcIjtcbi8vIExhenktYmluZCBidWlsZGVyIG1ldGhvZHMuXG4vL1xuLy8gQnVpbGRlciBtZXRob2RzIChgLm9wdGlvbmFsYCwgYC5hcnJheWAsIGAucmVmaW5lYCwgLi4uKSBsaXZlIGFzXG4vLyBub24tZW51bWVyYWJsZSBnZXR0ZXJzIG9uIGVhY2ggY29uY3JldGUgc2NoZW1hIGNvbnN0cnVjdG9yJ3Ncbi8vIHByb3RvdHlwZS4gT24gZmlyc3QgYWNjZXNzIGZyb20gYW4gaW5zdGFuY2UgdGhlIGdldHRlciBhbGxvY2F0ZXNcbi8vIGBmbi5iaW5kKHRoaXMpYCBhbmQgY2FjaGVzIGl0IGFzIGFuIG93biBwcm9wZXJ0eSBvbiB0aGF0IGluc3RhbmNlLFxuLy8gc28gZGV0YWNoZWQgdXNhZ2UgKGBjb25zdCBtID0gc2NoZW1hLm9wdGlvbmFsOyBtKClgKSBzdGlsbCB3b3Jrc1xuLy8gYW5kIHRoZSBwZXItaW5zdGFuY2UgYWxsb2NhdGlvbiBvbmx5IGhhcHBlbnMgZm9yIG1ldGhvZHMgYWN0dWFsbHlcbi8vIHRvdWNoZWQuXG4vL1xuLy8gT25lIGluc3RhbGwgcGVyIChwcm90b3R5cGUsIGdyb3VwKSwgbWVtb2l6ZWQgYnkgYF9pbnN0YWxsZWRHcm91cHNgLlxuY29uc3QgX2luc3RhbGxlZEdyb3VwcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xuZnVuY3Rpb24gX2luc3RhbGxMYXp5TWV0aG9kcyhpbnN0LCBncm91cCwgbWV0aG9kcykge1xuICAgIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGluc3QpO1xuICAgIGxldCBpbnN0YWxsZWQgPSBfaW5zdGFsbGVkR3JvdXBzLmdldChwcm90byk7XG4gICAgaWYgKCFpbnN0YWxsZWQpIHtcbiAgICAgICAgaW5zdGFsbGVkID0gbmV3IFNldCgpO1xuICAgICAgICBfaW5zdGFsbGVkR3JvdXBzLnNldChwcm90bywgaW5zdGFsbGVkKTtcbiAgICB9XG4gICAgaWYgKGluc3RhbGxlZC5oYXMoZ3JvdXApKVxuICAgICAgICByZXR1cm47XG4gICAgaW5zdGFsbGVkLmFkZChncm91cCk7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gbWV0aG9kcykge1xuICAgICAgICBjb25zdCBmbiA9IG1ldGhvZHNba2V5XTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvLCBrZXksIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvdW5kID0gZm4uYmluZCh0aGlzKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBib3VuZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYm91bmQ7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0KHYpIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywga2V5LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGNvbnN0IFpvZFR5cGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVHlwZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgT2JqZWN0LmFzc2lnbihpbnN0W1wifnN0YW5kYXJkXCJdLCB7XG4gICAgICAgIGpzb25TY2hlbWE6IHtcbiAgICAgICAgICAgIGlucHV0OiBjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2QoaW5zdCwgXCJpbnB1dFwiKSxcbiAgICAgICAgICAgIG91dHB1dDogY3JlYXRlU3RhbmRhcmRKU09OU2NoZW1hTWV0aG9kKGluc3QsIFwib3V0cHV0XCIpLFxuICAgICAgICB9LFxuICAgIH0pO1xuICAgIGluc3QudG9KU09OU2NoZW1hID0gY3JlYXRlVG9KU09OU2NoZW1hTWV0aG9kKGluc3QsIHt9KTtcbiAgICBpbnN0LmRlZiA9IGRlZjtcbiAgICBpbnN0LnR5cGUgPSBkZWYudHlwZTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5zdCwgXCJfZGVmXCIsIHsgdmFsdWU6IGRlZiB9KTtcbiAgICAvLyBQYXJzZS1mYW1pbHkgaXMgaW50ZW50aW9uYWxseSBrZXB0IGFzIHBlci1pbnN0YW5jZSBjbG9zdXJlczogdGhlc2UgYXJlXG4gICAgLy8gdGhlIGhvdCBwYXRoIEFORCB0aGUgbW9zdC1kZXRhY2hlZCBtZXRob2RzIChgYXJyLm1hcChzY2hlbWEucGFyc2UpYCxcbiAgICAvLyBgY29uc3QgeyBwYXJzZSB9ID0gc2NoZW1hYCwgZXRjLikuIEVhZ2VyIGNsb3N1cmVzIGhlcmUgbWVhbiBjYWxsZXJzIHBheVxuICAgIC8vIH4xMiBjbG9zdXJlIGFsbG9jYXRpb25zIHBlciBzY2hlbWEgYnV0IGdldCBtb25vbW9ycGhpYyBjYWxsIHNpdGVzIGFuZFxuICAgIC8vIGRldGFjaGVkIHVzYWdlIHRoYXQgXCJqdXN0IHdvcmtzXCIuXG4gICAgaW5zdC5wYXJzZSA9IChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLnBhcnNlKGluc3QsIGRhdGEsIHBhcmFtcywgeyBjYWxsZWU6IGluc3QucGFyc2UgfSk7XG4gICAgaW5zdC5zYWZlUGFyc2UgPSAoZGF0YSwgcGFyYW1zKSA9PiBwYXJzZS5zYWZlUGFyc2UoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LnBhcnNlQXN5bmMgPSBhc3luYyAoZGF0YSwgcGFyYW1zKSA9PiBwYXJzZS5wYXJzZUFzeW5jKGluc3QsIGRhdGEsIHBhcmFtcywgeyBjYWxsZWU6IGluc3QucGFyc2VBc3luYyB9KTtcbiAgICBpbnN0LnNhZmVQYXJzZUFzeW5jID0gYXN5bmMgKGRhdGEsIHBhcmFtcykgPT4gcGFyc2Uuc2FmZVBhcnNlQXN5bmMoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LnNwYSA9IGluc3Quc2FmZVBhcnNlQXN5bmM7XG4gICAgaW5zdC5lbmNvZGUgPSAoZGF0YSwgcGFyYW1zKSA9PiBwYXJzZS5lbmNvZGUoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LmRlY29kZSA9IChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLmRlY29kZShpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3QuZW5jb2RlQXN5bmMgPSBhc3luYyAoZGF0YSwgcGFyYW1zKSA9PiBwYXJzZS5lbmNvZGVBc3luYyhpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3QuZGVjb2RlQXN5bmMgPSBhc3luYyAoZGF0YSwgcGFyYW1zKSA9PiBwYXJzZS5kZWNvZGVBc3luYyhpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIGluc3Quc2FmZUVuY29kZSA9IChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLnNhZmVFbmNvZGUoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LnNhZmVEZWNvZGUgPSAoZGF0YSwgcGFyYW1zKSA9PiBwYXJzZS5zYWZlRGVjb2RlKGluc3QsIGRhdGEsIHBhcmFtcyk7XG4gICAgaW5zdC5zYWZlRW5jb2RlQXN5bmMgPSBhc3luYyAoZGF0YSwgcGFyYW1zKSA9PiBwYXJzZS5zYWZlRW5jb2RlQXN5bmMoaW5zdCwgZGF0YSwgcGFyYW1zKTtcbiAgICBpbnN0LnNhZmVEZWNvZGVBc3luYyA9IGFzeW5jIChkYXRhLCBwYXJhbXMpID0+IHBhcnNlLnNhZmVEZWNvZGVBc3luYyhpbnN0LCBkYXRhLCBwYXJhbXMpO1xuICAgIC8vIEFsbCBidWlsZGVyIG1ldGhvZHMgYXJlIHBsYWNlZCBvbiB0aGUgaW50ZXJuYWwgcHJvdG90eXBlIGFzIGxhenktYmluZFxuICAgIC8vIGdldHRlcnMuIE9uIGZpcnN0IGFjY2VzcyBwZXItaW5zdGFuY2UsIGEgYm91bmQgdGh1bmsgaXMgYWxsb2NhdGVkIGFuZFxuICAgIC8vIGNhY2hlZCBhcyBhbiBvd24gcHJvcGVydHk7IHN1YnNlcXVlbnQgYWNjZXNzZXMgc2tpcCB0aGUgZ2V0dGVyLiBUaGlzXG4gICAgLy8gbWVhbnM6IG5vIHBlci1pbnN0YW5jZSBhbGxvY2F0aW9uIGZvciB1bnVzZWQgbWV0aG9kcywgZnVsbFxuICAgIC8vIGRldGFjaGFiaWxpdHkgcHJlc2VydmVkIChgY29uc3QgbSA9IHNjaGVtYS5vcHRpb25hbDsgbSgpYCB3b3JrcyksIGFuZFxuICAgIC8vIHNoYXJlZCB1bmRlcmx5aW5nIGZ1bmN0aW9uIHJlZmVyZW5jZXMgYWNyb3NzIGFsbCBpbnN0YW5jZXMuXG4gICAgX2luc3RhbGxMYXp5TWV0aG9kcyhpbnN0LCBcIlpvZFR5cGVcIiwge1xuICAgICAgICBjaGVjayguLi5jaGtzKSB7XG4gICAgICAgICAgICBjb25zdCBkZWYgPSB0aGlzLmRlZjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKHV0aWwubWVyZ2VEZWZzKGRlZiwge1xuICAgICAgICAgICAgICAgIGNoZWNrczogW1xuICAgICAgICAgICAgICAgICAgICAuLi4oZGVmLmNoZWNrcyA/PyBbXSksXG4gICAgICAgICAgICAgICAgICAgIC4uLmNoa3MubWFwKChjaCkgPT4gdHlwZW9mIGNoID09PSBcImZ1bmN0aW9uXCIgPyB7IF96b2Q6IHsgY2hlY2s6IGNoLCBkZWY6IHsgY2hlY2s6IFwiY3VzdG9tXCIgfSwgb25hdHRhY2g6IFtdIH0gfSA6IGNoKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSksIHsgcGFyZW50OiB0cnVlIH0pO1xuICAgICAgICB9LFxuICAgICAgICB3aXRoKC4uLmNoa3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKC4uLmNoa3MpO1xuICAgICAgICB9LFxuICAgICAgICBjbG9uZShkZWYsIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIGNvcmUuY2xvbmUodGhpcywgZGVmLCBwYXJhbXMpO1xuICAgICAgICB9LFxuICAgICAgICBicmFuZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9LFxuICAgICAgICByZWdpc3RlcihyZWcsIG1ldGEpIHtcbiAgICAgICAgICAgIHJlZy5hZGQodGhpcywgbWV0YSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSxcbiAgICAgICAgcmVmaW5lKGNoZWNrLCBwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKHJlZmluZShjaGVjaywgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN1cGVyUmVmaW5lKHJlZmluZW1lbnQsIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soc3VwZXJSZWZpbmUocmVmaW5lbWVudCwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG92ZXJ3cml0ZShmbikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLm92ZXJ3cml0ZShmbikpO1xuICAgICAgICB9LFxuICAgICAgICBvcHRpb25hbCgpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25hbCh0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXhhY3RPcHRpb25hbCgpIHtcbiAgICAgICAgICAgIHJldHVybiBleGFjdE9wdGlvbmFsKHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBudWxsYWJsZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsYWJsZSh0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgbnVsbGlzaCgpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25hbChudWxsYWJsZSh0aGlzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG5vbm9wdGlvbmFsKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIG5vbm9wdGlvbmFsKHRoaXMsIHBhcmFtcyk7XG4gICAgICAgIH0sXG4gICAgICAgIGFycmF5KCkge1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5KHRoaXMpO1xuICAgICAgICB9LFxuICAgICAgICBvcihhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmlvbihbdGhpcywgYXJnXSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFuZChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnRlcnNlY3Rpb24odGhpcywgYXJnKTtcbiAgICAgICAgfSxcbiAgICAgICAgdHJhbnNmb3JtKHR4KSB7XG4gICAgICAgICAgICByZXR1cm4gcGlwZSh0aGlzLCB0cmFuc2Zvcm0odHgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVmYXVsdChkKSB7XG4gICAgICAgICAgICByZXR1cm4gX2RlZmF1bHQodGhpcywgZCk7XG4gICAgICAgIH0sXG4gICAgICAgIHByZWZhdWx0KGQpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmVmYXVsdCh0aGlzLCBkKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2F0Y2gocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gX2NhdGNoKHRoaXMsIHBhcmFtcyk7XG4gICAgICAgIH0sXG4gICAgICAgIHBpcGUodGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gcGlwZSh0aGlzLCB0YXJnZXQpO1xuICAgICAgICB9LFxuICAgICAgICByZWFkb25seSgpIHtcbiAgICAgICAgICAgIHJldHVybiByZWFkb25seSh0aGlzKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVzY3JpYmUoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGNsID0gdGhpcy5jbG9uZSgpO1xuICAgICAgICAgICAgY29yZS5nbG9iYWxSZWdpc3RyeS5hZGQoY2wsIHsgZGVzY3JpcHRpb24gfSk7XG4gICAgICAgICAgICByZXR1cm4gY2w7XG4gICAgICAgIH0sXG4gICAgICAgIG1ldGEoLi4uYXJncykge1xuICAgICAgICAgICAgLy8gb3ZlcmxvYWRlZDogbWV0YSgpIHJldHVybnMgdGhlIHJlZ2lzdGVyZWQgbWV0YWRhdGEsIG1ldGEoZGF0YSlcbiAgICAgICAgICAgIC8vIHJldHVybnMgYSBjbG9uZSB3aXRoIGBkYXRhYCByZWdpc3RlcmVkLiBUaGUgbWFwcGVkIHR5cGUgcGlja3NcbiAgICAgICAgICAgIC8vIHVwIHRoZSBzZWNvbmQgb3ZlcmxvYWQsIHNvIHdlIGFjY2VwdCB2YXJpYWRpYyBhbnktYXJncyBhbmRcbiAgICAgICAgICAgIC8vIHJldHVybiBgYW55YCB0byBzYXRpc2Z5IGJvdGggYXQgcnVudGltZS5cbiAgICAgICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gY29yZS5nbG9iYWxSZWdpc3RyeS5nZXQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCBjbCA9IHRoaXMuY2xvbmUoKTtcbiAgICAgICAgICAgIGNvcmUuZ2xvYmFsUmVnaXN0cnkuYWRkKGNsLCBhcmdzWzBdKTtcbiAgICAgICAgICAgIHJldHVybiBjbDtcbiAgICAgICAgfSxcbiAgICAgICAgaXNPcHRpb25hbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNhZmVQYXJzZSh1bmRlZmluZWQpLnN1Y2Nlc3M7XG4gICAgICAgIH0sXG4gICAgICAgIGlzTnVsbGFibGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zYWZlUGFyc2UobnVsbCkuc3VjY2VzcztcbiAgICAgICAgfSxcbiAgICAgICAgYXBwbHkoZm4pIHtcbiAgICAgICAgICAgIHJldHVybiBmbih0aGlzKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5zdCwgXCJkZXNjcmlwdGlvblwiLCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb3JlLmdsb2JhbFJlZ2lzdHJ5LmdldChpbnN0KT8uZGVzY3JpcHRpb247XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICByZXR1cm4gaW5zdDtcbn0pO1xuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGNvbnN0IF9ab2RTdHJpbmcgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiX1pvZFN0cmluZ1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kU3RyaW5nLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuc3RyaW5nUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgIGluc3QuZm9ybWF0ID0gYmFnLmZvcm1hdCA/PyBudWxsO1xuICAgIGluc3QubWluTGVuZ3RoID0gYmFnLm1pbmltdW0gPz8gbnVsbDtcbiAgICBpbnN0Lm1heExlbmd0aCA9IGJhZy5tYXhpbXVtID8/IG51bGw7XG4gICAgX2luc3RhbGxMYXp5TWV0aG9kcyhpbnN0LCBcIl9ab2RTdHJpbmdcIiwge1xuICAgICAgICByZWdleCguLi5hcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MucmVnZXgoLi4uYXJncykpO1xuICAgICAgICB9LFxuICAgICAgICBpbmNsdWRlcyguLi5hcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MuaW5jbHVkZXMoLi4uYXJncykpO1xuICAgICAgICB9LFxuICAgICAgICBzdGFydHNXaXRoKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5zdGFydHNXaXRoKC4uLmFyZ3MpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW5kc1dpdGgoLi4uYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmVuZHNXaXRoKC4uLmFyZ3MpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWluKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5taW5MZW5ndGgoLi4uYXJncykpO1xuICAgICAgICB9LFxuICAgICAgICBtYXgoLi4uYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLm1heExlbmd0aCguLi5hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGxlbmd0aCguLi5hcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MubGVuZ3RoKC4uLmFyZ3MpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbm9uZW1wdHkoLi4uYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLm1pbkxlbmd0aCgxLCAuLi5hcmdzKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGxvd2VyY2FzZShwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5sb3dlcmNhc2UocGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHVwcGVyY2FzZShwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy51cHBlcmNhc2UocGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRyaW0oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MudHJpbSgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbm9ybWFsaXplKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5ub3JtYWxpemUoLi4uYXJncykpO1xuICAgICAgICB9LFxuICAgICAgICB0b0xvd2VyQ2FzZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgfSxcbiAgICAgICAgdG9VcHBlckNhc2UoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MudG9VcHBlckNhc2UoKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNsdWdpZnkoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3Muc2x1Z2lmeSgpKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn0pO1xuZXhwb3J0IGNvbnN0IFpvZFN0cmluZyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RTdHJpbmdcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFN0cmluZy5pbml0KGluc3QsIGRlZik7XG4gICAgX1pvZFN0cmluZy5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5lbWFpbCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fZW1haWwoWm9kRW1haWwsIHBhcmFtcykpO1xuICAgIGluc3QudXJsID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl91cmwoWm9kVVJMLCBwYXJhbXMpKTtcbiAgICBpbnN0Lmp3dCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fand0KFpvZEpXVCwgcGFyYW1zKSk7XG4gICAgaW5zdC5lbW9qaSA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fZW1vamkoWm9kRW1vamksIHBhcmFtcykpO1xuICAgIGluc3QuZ3VpZCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fZ3VpZChab2RHVUlELCBwYXJhbXMpKTtcbiAgICBpbnN0LnV1aWQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX3V1aWQoWm9kVVVJRCwgcGFyYW1zKSk7XG4gICAgaW5zdC51dWlkdjQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX3V1aWR2NChab2RVVUlELCBwYXJhbXMpKTtcbiAgICBpbnN0LnV1aWR2NiA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fdXVpZHY2KFpvZFVVSUQsIHBhcmFtcykpO1xuICAgIGluc3QudXVpZHY3ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl91dWlkdjcoWm9kVVVJRCwgcGFyYW1zKSk7XG4gICAgaW5zdC5uYW5vaWQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX25hbm9pZChab2ROYW5vSUQsIHBhcmFtcykpO1xuICAgIGluc3QuZ3VpZCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fZ3VpZChab2RHVUlELCBwYXJhbXMpKTtcbiAgICBpbnN0LmN1aWQgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2N1aWQoWm9kQ1VJRCwgcGFyYW1zKSk7XG4gICAgaW5zdC5jdWlkMiA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fY3VpZDIoWm9kQ1VJRDIsIHBhcmFtcykpO1xuICAgIGluc3QudWxpZCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fdWxpZChab2RVTElELCBwYXJhbXMpKTtcbiAgICBpbnN0LmJhc2U2NCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fYmFzZTY0KFpvZEJhc2U2NCwgcGFyYW1zKSk7XG4gICAgaW5zdC5iYXNlNjR1cmwgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2Jhc2U2NHVybChab2RCYXNlNjRVUkwsIHBhcmFtcykpO1xuICAgIGluc3QueGlkID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl94aWQoWm9kWElELCBwYXJhbXMpKTtcbiAgICBpbnN0LmtzdWlkID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9rc3VpZChab2RLU1VJRCwgcGFyYW1zKSk7XG4gICAgaW5zdC5pcHY0ID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjb3JlLl9pcHY0KFpvZElQdjQsIHBhcmFtcykpO1xuICAgIGluc3QuaXB2NiA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5faXB2Nihab2RJUHY2LCBwYXJhbXMpKTtcbiAgICBpbnN0LmNpZHJ2NCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fY2lkcnY0KFpvZENJRFJ2NCwgcGFyYW1zKSk7XG4gICAgaW5zdC5jaWRydjYgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX2NpZHJ2Nihab2RDSURSdjYsIHBhcmFtcykpO1xuICAgIGluc3QuZTE2NCA9IChwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fZTE2NChab2RFMTY0LCBwYXJhbXMpKTtcbiAgICAvLyBpc29cbiAgICBpbnN0LmRhdGV0aW1lID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhpc28uZGF0ZXRpbWUocGFyYW1zKSk7XG4gICAgaW5zdC5kYXRlID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhpc28uZGF0ZShwYXJhbXMpKTtcbiAgICBpbnN0LnRpbWUgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGlzby50aW1lKHBhcmFtcykpO1xuICAgIGluc3QuZHVyYXRpb24gPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGlzby5kdXJhdGlvbihwYXJhbXMpKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZyhwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fc3RyaW5nKFpvZFN0cmluZywgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RTdHJpbmdGb3JtYXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kU3RyaW5nRm9ybWF0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIF9ab2RTdHJpbmcuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgWm9kRW1haWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRW1haWxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kRW1haWwuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBlbWFpbChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fZW1haWwoWm9kRW1haWwsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kR1VJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RHVUlEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZEdVSUQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBndWlkKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9ndWlkKFpvZEdVSUQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kVVVJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RVVUlEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZFVVSUQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB1dWlkKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl91dWlkKFpvZFVVSUQsIHBhcmFtcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gdXVpZHY0KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl91dWlkdjQoWm9kVVVJRCwgcGFyYW1zKTtcbn1cbi8vIFpvZFVVSUR2NlxuZXhwb3J0IGZ1bmN0aW9uIHV1aWR2NihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdXVpZHY2KFpvZFVVSUQsIHBhcmFtcyk7XG59XG4vLyBab2RVVUlEdjdcbmV4cG9ydCBmdW5jdGlvbiB1dWlkdjcocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3V1aWR2Nyhab2RVVUlELCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFVSTCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RVUkxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kVVJMLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdXJsKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl91cmwoWm9kVVJMLCBwYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGh0dHBVcmwocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3VybChab2RVUkwsIHtcbiAgICAgICAgcHJvdG9jb2w6IGNvcmUucmVnZXhlcy5odHRwUHJvdG9jb2wsXG4gICAgICAgIGhvc3RuYW1lOiBjb3JlLnJlZ2V4ZXMuZG9tYWluLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZEVtb2ppID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEVtb2ppXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZEVtb2ppLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZW1vamkocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2Vtb2ppKFpvZEVtb2ppLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZE5hbm9JRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2ROYW5vSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kTmFub0lELmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbmFub2lkKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9uYW5vaWQoWm9kTmFub0lELCBwYXJhbXMpO1xufVxuLyoqXG4gKiBAZGVwcmVjYXRlZCBDVUlEIHYxIGlzIGRlcHJlY2F0ZWQgYnkgaXRzIGF1dGhvcnMgZHVlIHRvIGluZm9ybWF0aW9uIGxlYWthZ2VcbiAqICh0aW1lc3RhbXBzIGVtYmVkZGVkIGluIHRoZSBpZCkuIFVzZSB7QGxpbmsgWm9kQ1VJRDJ9IGluc3RlYWQuXG4gKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BhcmFsbGVsZHJpdmUvY3VpZC5cbiAqL1xuZXhwb3J0IGNvbnN0IFpvZENVSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQ1VJRFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RDVUlELmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG4vKipcbiAqIFZhbGlkYXRlcyBhIENVSUQgdjEgc3RyaW5nLlxuICpcbiAqIEBkZXByZWNhdGVkIENVSUQgdjEgaXMgZGVwcmVjYXRlZCBieSBpdHMgYXV0aG9ycyBkdWUgdG8gaW5mb3JtYXRpb24gbGVha2FnZVxuICogKHRpbWVzdGFtcHMgZW1iZWRkZWQgaW4gdGhlIGlkKS4gVXNlIHtAbGluayBjdWlkMiB8IGB6LmN1aWQyKClgfSBpbnN0ZWFkLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJhbGxlbGRyaXZlL2N1aWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjdWlkKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9jdWlkKFpvZENVSUQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kQ1VJRDIgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQ1VJRDJcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kQ1VJRDIuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBjdWlkMihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fY3VpZDIoWm9kQ1VJRDIsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kVUxJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RVTElEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZFVMSUQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB1bGlkKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl91bGlkKFpvZFVMSUQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kWElEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFhJRFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RYSUQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB4aWQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3hpZChab2RYSUQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kS1NVSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kS1NVSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kS1NVSUQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBrc3VpZChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fa3N1aWQoWm9kS1NVSUQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kSVB2NCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RJUHY0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZElQdjQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBpcHY0KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pcHY0KFpvZElQdjQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kTUFDID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE1BQ1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RNQUMuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBtYWMocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX21hYyhab2RNQUMsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kSVB2NiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RJUHY2XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZElQdjYuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBpcHY2KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pcHY2KFpvZElQdjYsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kQ0lEUnY0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZENJRFJ2NFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kQ0lEUnY0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gY2lkcnY0KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9jaWRydjQoWm9kQ0lEUnY0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZENJRFJ2NiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RDSURSdjZcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZENJRFJ2Ni5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGNpZHJ2NihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fY2lkcnY2KFpvZENJRFJ2NiwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RCYXNlNjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQmFzZTY0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZEJhc2U2NC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fYmFzZTY0KFpvZEJhc2U2NCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RCYXNlNjRVUkwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQmFzZTY0VVJMXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZEJhc2U2NFVSTC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NHVybChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fYmFzZTY0dXJsKFpvZEJhc2U2NFVSTCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RFMTY0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEUxNjRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgY29yZS4kWm9kRTE2NC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGUxNjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2UxNjQoWm9kRTE2NCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RKV1QgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kSldUXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZEpXVC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGp3dChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fand0KFpvZEpXVCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RDdXN0b21TdHJpbmdGb3JtYXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQ3VzdG9tU3RyaW5nRm9ybWF0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZEN1c3RvbVN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ0Zvcm1hdChmb3JtYXQsIGZuT3JSZWdleCwgX3BhcmFtcyA9IHt9KSB7XG4gICAgcmV0dXJuIGNvcmUuX3N0cmluZ0Zvcm1hdChab2RDdXN0b21TdHJpbmdGb3JtYXQsIGZvcm1hdCwgZm5PclJlZ2V4LCBfcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBob3N0bmFtZShfcGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3N0cmluZ0Zvcm1hdChab2RDdXN0b21TdHJpbmdGb3JtYXQsIFwiaG9zdG5hbWVcIiwgY29yZS5yZWdleGVzLmhvc3RuYW1lLCBfcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoZXgoX3BhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9zdHJpbmdGb3JtYXQoWm9kQ3VzdG9tU3RyaW5nRm9ybWF0LCBcImhleFwiLCBjb3JlLnJlZ2V4ZXMuaGV4LCBfcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBoYXNoKGFsZywgcGFyYW1zKSB7XG4gICAgY29uc3QgZW5jID0gcGFyYW1zPy5lbmMgPz8gXCJoZXhcIjtcbiAgICBjb25zdCBmb3JtYXQgPSBgJHthbGd9XyR7ZW5jfWA7XG4gICAgY29uc3QgcmVnZXggPSBjb3JlLnJlZ2V4ZXNbZm9ybWF0XTtcbiAgICBpZiAoIXJlZ2V4KVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBoYXNoIGZvcm1hdDogJHtmb3JtYXR9YCk7XG4gICAgcmV0dXJuIGNvcmUuX3N0cmluZ0Zvcm1hdChab2RDdXN0b21TdHJpbmdGb3JtYXQsIGZvcm1hdCwgcmVnZXgsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kTnVtYmVyID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE51bWJlclwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kTnVtYmVyLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMubnVtYmVyUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBfaW5zdGFsbExhenlNZXRob2RzKGluc3QsIFwiWm9kTnVtYmVyXCIsIHtcbiAgICAgICAgZ3QodmFsdWUsIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmd0KHZhbHVlLCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZ3RlKHZhbHVlLCBwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5ndGUodmFsdWUsIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICBtaW4odmFsdWUsIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmd0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGx0KHZhbHVlLCBwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5sdCh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIGx0ZSh2YWx1ZSwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MubHRlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbWF4KHZhbHVlLCBwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5sdGUodmFsdWUsIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICBpbnQocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhpbnQocGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHNhZmUocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhpbnQocGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIHBvc2l0aXZlKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmd0KDAsIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICBub25uZWdhdGl2ZShwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5ndGUoMCwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG5lZ2F0aXZlKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLmx0KDAsIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICBub25wb3NpdGl2ZShwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5sdGUoMCwgcGFyYW1zKSk7XG4gICAgICAgIH0sXG4gICAgICAgIG11bHRpcGxlT2YodmFsdWUsIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLm11bHRpcGxlT2YodmFsdWUsIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICBzdGVwKHZhbHVlLCBwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNoZWNrKGNoZWNrcy5tdWx0aXBsZU9mKHZhbHVlLCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgZmluaXRlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgYmFnID0gaW5zdC5fem9kLmJhZztcbiAgICBpbnN0Lm1pblZhbHVlID1cbiAgICAgICAgTWF0aC5tYXgoYmFnLm1pbmltdW0gPz8gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZLCBiYWcuZXhjbHVzaXZlTWluaW11bSA/PyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpID8/IG51bGw7XG4gICAgaW5zdC5tYXhWYWx1ZSA9XG4gICAgICAgIE1hdGgubWluKGJhZy5tYXhpbXVtID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSwgYmFnLmV4Y2x1c2l2ZU1heGltdW0gPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKSA/PyBudWxsO1xuICAgIGluc3QuaXNJbnQgPSAoYmFnLmZvcm1hdCA/PyBcIlwiKS5pbmNsdWRlcyhcImludFwiKSB8fCBOdW1iZXIuaXNTYWZlSW50ZWdlcihiYWcubXVsdGlwbGVPZiA/PyAwLjUpO1xuICAgIGluc3QuaXNGaW5pdGUgPSB0cnVlO1xuICAgIGluc3QuZm9ybWF0ID0gYmFnLmZvcm1hdCA/PyBudWxsO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbnVtYmVyKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9udW1iZXIoWm9kTnVtYmVyLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZE51bWJlckZvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2ROdW1iZXJGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZE51bWJlckZvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kTnVtYmVyLmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGludChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faW50KFpvZE51bWJlckZvcm1hdCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdDMyKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9mbG9hdDMyKFpvZE51bWJlckZvcm1hdCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmbG9hdDY0KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9mbG9hdDY0KFpvZE51bWJlckZvcm1hdCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbnQzMihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5faW50MzIoWm9kTnVtYmVyRm9ybWF0LCBwYXJhbXMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVpbnQzMihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdWludDMyKFpvZE51bWJlckZvcm1hdCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RCb29sZWFuID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEJvb2xlYW5cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZEJvb2xlYW4uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5ib29sZWFuUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGJvb2xlYW4ocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2Jvb2xlYW4oWm9kQm9vbGVhbiwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RCaWdJbnQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQmlnSW50XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RCaWdJbnQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5iaWdpbnRQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QuZ3RlID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmd0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5taW4gPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MuZ3RlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lmd0ID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmd0KHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lmd0ZSA9ICh2YWx1ZSwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5ndGUodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QubWluID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmd0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5sdCA9ICh2YWx1ZSwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5sdCh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5sdGUgPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MubHRlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm1heCA9ICh2YWx1ZSwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5sdGUodmFsdWUsIHBhcmFtcykpO1xuICAgIGluc3QucG9zaXRpdmUgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5ndChCaWdJbnQoMCksIHBhcmFtcykpO1xuICAgIGluc3QubmVnYXRpdmUgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5sdChCaWdJbnQoMCksIHBhcmFtcykpO1xuICAgIGluc3Qubm9ucG9zaXRpdmUgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNoZWNrcy5sdGUoQmlnSW50KDApLCBwYXJhbXMpKTtcbiAgICBpbnN0Lm5vbm5lZ2F0aXZlID0gKHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MuZ3RlKEJpZ0ludCgwKSwgcGFyYW1zKSk7XG4gICAgaW5zdC5tdWx0aXBsZU9mID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLm11bHRpcGxlT2YodmFsdWUsIHBhcmFtcykpO1xuICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgaW5zdC5taW5WYWx1ZSA9IGJhZy5taW5pbXVtID8/IG51bGw7XG4gICAgaW5zdC5tYXhWYWx1ZSA9IGJhZy5tYXhpbXVtID8/IG51bGw7XG4gICAgaW5zdC5mb3JtYXQgPSBiYWcuZm9ybWF0ID8/IG51bGw7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBiaWdpbnQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2JpZ2ludChab2RCaWdJbnQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kQmlnSW50Rm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZEJpZ0ludEZvcm1hdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kQmlnSW50Rm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RCaWdJbnQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG4vLyBpbnQ2NFxuZXhwb3J0IGZ1bmN0aW9uIGludDY0KHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9pbnQ2NChab2RCaWdJbnRGb3JtYXQsIHBhcmFtcyk7XG59XG4vLyB1aW50NjRcbmV4cG9ydCBmdW5jdGlvbiB1aW50NjQocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3VpbnQ2NChab2RCaWdJbnRGb3JtYXQsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kU3ltYm9sID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFN5bWJvbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kU3ltYm9sLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuc3ltYm9sUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHN5bWJvbChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fc3ltYm9sKFpvZFN5bWJvbCwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RVbmRlZmluZWQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVW5kZWZpbmVkXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RVbmRlZmluZWQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy51bmRlZmluZWRQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5mdW5jdGlvbiBfdW5kZWZpbmVkKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl91bmRlZmluZWQoWm9kVW5kZWZpbmVkLCBwYXJhbXMpO1xufVxuZXhwb3J0IHsgX3VuZGVmaW5lZCBhcyB1bmRlZmluZWQgfTtcbmV4cG9ydCBjb25zdCBab2ROdWxsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE51bGxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZE51bGwuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5udWxsUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZnVuY3Rpb24gX251bGwocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX251bGwoWm9kTnVsbCwgcGFyYW1zKTtcbn1cbmV4cG9ydCB7IF9udWxsIGFzIG51bGwgfTtcbmV4cG9ydCBjb25zdCBab2RBbnkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQW55XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RBbnkuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5hbnlQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gYW55KCkge1xuICAgIHJldHVybiBjb3JlLl9hbnkoWm9kQW55KTtcbn1cbmV4cG9ydCBjb25zdCBab2RVbmtub3duID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFVua25vd25cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFVua25vd24uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy51bmtub3duUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHVua25vd24oKSB7XG4gICAgcmV0dXJuIGNvcmUuX3Vua25vd24oWm9kVW5rbm93bik7XG59XG5leHBvcnQgY29uc3QgWm9kTmV2ZXIgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTmV2ZXJcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZE5ldmVyLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMubmV2ZXJQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbmV2ZXIocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX25ldmVyKFpvZE5ldmVyLCBwYXJhbXMpO1xufVxuZXhwb3J0IGNvbnN0IFpvZFZvaWQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVm9pZFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kVm9pZC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnZvaWRQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5mdW5jdGlvbiBfdm9pZChwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fdm9pZChab2RWb2lkLCBwYXJhbXMpO1xufVxuZXhwb3J0IHsgX3ZvaWQgYXMgdm9pZCB9O1xuZXhwb3J0IGNvbnN0IFpvZERhdGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRGF0ZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kRGF0ZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmRhdGVQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QubWluID0gKHZhbHVlLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY2hlY2tzLmd0ZSh2YWx1ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5tYXggPSAodmFsdWUsIHBhcmFtcykgPT4gaW5zdC5jaGVjayhjaGVja3MubHRlKHZhbHVlLCBwYXJhbXMpKTtcbiAgICBjb25zdCBjID0gaW5zdC5fem9kLmJhZztcbiAgICBpbnN0Lm1pbkRhdGUgPSBjLm1pbmltdW0gPyBuZXcgRGF0ZShjLm1pbmltdW0pIDogbnVsbDtcbiAgICBpbnN0Lm1heERhdGUgPSBjLm1heGltdW0gPyBuZXcgRGF0ZShjLm1heGltdW0pIDogbnVsbDtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGUocGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2RhdGUoWm9kRGF0ZSwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RBcnJheSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RBcnJheVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kQXJyYXkuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5hcnJheVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5lbGVtZW50ID0gZGVmLmVsZW1lbnQ7XG4gICAgX2luc3RhbGxMYXp5TWV0aG9kcyhpbnN0LCBcIlpvZEFycmF5XCIsIHtcbiAgICAgICAgbWluKG4sIHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2hlY2soY2hlY2tzLm1pbkxlbmd0aChuLCBwYXJhbXMpKTtcbiAgICAgICAgfSxcbiAgICAgICAgbm9uZW1wdHkocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MubWluTGVuZ3RoKDEsIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICBtYXgobiwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MubWF4TGVuZ3RoKG4sIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICBsZW5ndGgobiwgcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jaGVjayhjaGVja3MubGVuZ3RoKG4sIHBhcmFtcykpO1xuICAgICAgICB9LFxuICAgICAgICB1bndyYXAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50O1xuICAgICAgICB9LFxuICAgIH0pO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gYXJyYXkoZWxlbWVudCwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2FycmF5KFpvZEFycmF5LCBlbGVtZW50LCBwYXJhbXMpO1xufVxuLy8gLmtleW9mXG5leHBvcnQgZnVuY3Rpb24ga2V5b2Yoc2NoZW1hKSB7XG4gICAgY29uc3Qgc2hhcGUgPSBzY2hlbWEuX3pvZC5kZWYuc2hhcGU7XG4gICAgcmV0dXJuIF9lbnVtKE9iamVjdC5rZXlzKHNoYXBlKSk7XG59XG5leHBvcnQgY29uc3QgWm9kT2JqZWN0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE9iamVjdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kT2JqZWN0SklULmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMub2JqZWN0UHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdCwgXCJzaGFwZVwiLCAoKSA9PiB7XG4gICAgICAgIHJldHVybiBkZWYuc2hhcGU7XG4gICAgfSk7XG4gICAgX2luc3RhbGxMYXp5TWV0aG9kcyhpbnN0LCBcIlpvZE9iamVjdFwiLCB7XG4gICAgICAgIGtleW9mKCkge1xuICAgICAgICAgICAgcmV0dXJuIF9lbnVtKE9iamVjdC5rZXlzKHRoaXMuX3pvZC5kZWYuc2hhcGUpKTtcbiAgICAgICAgfSxcbiAgICAgICAgY2F0Y2hhbGwoY2F0Y2hhbGwpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKHsgLi4udGhpcy5fem9kLmRlZiwgY2F0Y2hhbGw6IGNhdGNoYWxsIH0pO1xuICAgICAgICB9LFxuICAgICAgICBwYXNzdGhyb3VnaCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKHsgLi4udGhpcy5fem9kLmRlZiwgY2F0Y2hhbGw6IHVua25vd24oKSB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgbG9vc2UoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSh7IC4uLnRoaXMuX3pvZC5kZWYsIGNhdGNoYWxsOiB1bmtub3duKCkgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN0cmljdCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKHsgLi4udGhpcy5fem9kLmRlZiwgY2F0Y2hhbGw6IG5ldmVyKCkgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIHN0cmlwKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoeyAuLi50aGlzLl96b2QuZGVmLCBjYXRjaGFsbDogdW5kZWZpbmVkIH0pO1xuICAgICAgICB9LFxuICAgICAgICBleHRlbmQoaW5jb21pbmcpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlsLmV4dGVuZCh0aGlzLCBpbmNvbWluZyk7XG4gICAgICAgIH0sXG4gICAgICAgIHNhZmVFeHRlbmQoaW5jb21pbmcpIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlsLnNhZmVFeHRlbmQodGhpcywgaW5jb21pbmcpO1xuICAgICAgICB9LFxuICAgICAgICBtZXJnZShvdGhlcikge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWwubWVyZ2UodGhpcywgb3RoZXIpO1xuICAgICAgICB9LFxuICAgICAgICBwaWNrKG1hc2spIHtcbiAgICAgICAgICAgIHJldHVybiB1dGlsLnBpY2sodGhpcywgbWFzayk7XG4gICAgICAgIH0sXG4gICAgICAgIG9taXQobWFzaykge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWwub21pdCh0aGlzLCBtYXNrKTtcbiAgICAgICAgfSxcbiAgICAgICAgcGFydGlhbCguLi5hcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdXRpbC5wYXJ0aWFsKFpvZE9wdGlvbmFsLCB0aGlzLCBhcmdzWzBdKTtcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZWQoLi4uYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWwucmVxdWlyZWQoWm9kTm9uT3B0aW9uYWwsIHRoaXMsIGFyZ3NbMF0pO1xuICAgICAgICB9LFxuICAgIH0pO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gb2JqZWN0KHNoYXBlLCBwYXJhbXMpIHtcbiAgICBjb25zdCBkZWYgPSB7XG4gICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgIHNoYXBlOiBzaGFwZSA/PyB7fSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9O1xuICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KGRlZik7XG59XG4vLyBzdHJpY3RPYmplY3RcbmV4cG9ydCBmdW5jdGlvbiBzdHJpY3RPYmplY3Qoc2hhcGUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgc2hhcGUsXG4gICAgICAgIGNhdGNoYWxsOiBuZXZlcigpLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gbG9vc2VPYmplY3RcbmV4cG9ydCBmdW5jdGlvbiBsb29zZU9iamVjdChzaGFwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICBzaGFwZSxcbiAgICAgICAgY2F0Y2hhbGw6IHVua25vd24oKSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RVbmlvbiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RVbmlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kVW5pb24uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy51bmlvblByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5vcHRpb25zID0gZGVmLm9wdGlvbnM7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB1bmlvbihvcHRpb25zLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZFVuaW9uKHtcbiAgICAgICAgdHlwZTogXCJ1bmlvblwiLFxuICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFhvciA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RYb3JcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIFpvZFVuaW9uLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb3JlLiRab2RYb3IuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy51bmlvblByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5vcHRpb25zID0gZGVmLm9wdGlvbnM7XG59KTtcbi8qKiBDcmVhdGVzIGFuIGV4Y2x1c2l2ZSB1bmlvbiAoWE9SKSB3aGVyZSBleGFjdGx5IG9uZSBvcHRpb24gbXVzdCBtYXRjaC5cbiAqIFVubGlrZSByZWd1bGFyIHVuaW9ucyB0aGF0IHN1Y2NlZWQgd2hlbiBhbnkgb3B0aW9uIG1hdGNoZXMsIHhvciBmYWlscyBpZlxuICogemVybyBvciBtb3JlIHRoYW4gb25lIG9wdGlvbiBtYXRjaGVzIHRoZSBpbnB1dC4gKi9cbmV4cG9ydCBmdW5jdGlvbiB4b3Iob3B0aW9ucywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RYb3Ioe1xuICAgICAgICB0eXBlOiBcInVuaW9uXCIsXG4gICAgICAgIG9wdGlvbnM6IG9wdGlvbnMsXG4gICAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kRGlzY3JpbWluYXRlZFVuaW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZERpc2NyaW1pbmF0ZWRVbmlvblwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgWm9kVW5pb24uaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZERpc2NyaW1pbmF0ZWRVbmlvbi5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBkaXNjcmltaW5hdGVkVW5pb24oZGlzY3JpbWluYXRvciwgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgLy8gY29uc3QgW29wdGlvbnMsIHBhcmFtc10gPSBhcmdzO1xuICAgIHJldHVybiBuZXcgWm9kRGlzY3JpbWluYXRlZFVuaW9uKHtcbiAgICAgICAgdHlwZTogXCJ1bmlvblwiLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBkaXNjcmltaW5hdG9yLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZEludGVyc2VjdGlvbiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RJbnRlcnNlY3Rpb25cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZEludGVyc2VjdGlvbi5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmludGVyc2VjdGlvblByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnNlY3Rpb24obGVmdCwgcmlnaHQpIHtcbiAgICByZXR1cm4gbmV3IFpvZEludGVyc2VjdGlvbih7XG4gICAgICAgIHR5cGU6IFwiaW50ZXJzZWN0aW9uXCIsXG4gICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgIHJpZ2h0OiByaWdodCxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RUdXBsZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RUdXBsZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kVHVwbGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy50dXBsZVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5yZXN0ID0gKHJlc3QpID0+IGluc3QuY2xvbmUoe1xuICAgICAgICAuLi5pbnN0Ll96b2QuZGVmLFxuICAgICAgICByZXN0OiByZXN0LFxuICAgIH0pO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdHVwbGUoaXRlbXMsIF9wYXJhbXNPclJlc3QsIF9wYXJhbXMpIHtcbiAgICBjb25zdCBoYXNSZXN0ID0gX3BhcmFtc09yUmVzdCBpbnN0YW5jZW9mIGNvcmUuJFpvZFR5cGU7XG4gICAgY29uc3QgcGFyYW1zID0gaGFzUmVzdCA/IF9wYXJhbXMgOiBfcGFyYW1zT3JSZXN0O1xuICAgIGNvbnN0IHJlc3QgPSBoYXNSZXN0ID8gX3BhcmFtc09yUmVzdCA6IG51bGw7XG4gICAgcmV0dXJuIG5ldyBab2RUdXBsZSh7XG4gICAgICAgIHR5cGU6IFwidHVwbGVcIixcbiAgICAgICAgaXRlbXM6IGl0ZW1zLFxuICAgICAgICByZXN0LFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZFJlY29yZCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RSZWNvcmRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFJlY29yZC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLnJlY29yZFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5rZXlUeXBlID0gZGVmLmtleVR5cGU7XG4gICAgaW5zdC52YWx1ZVR5cGUgPSBkZWYudmFsdWVUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gcmVjb3JkKGtleVR5cGUsIHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgLy8gdjMtY29tcGF0OiB6LnJlY29yZCh2YWx1ZVR5cGUsIHBhcmFtcz8pIOKAlCBkZWZhdWx0cyBrZXlUeXBlIHRvIHouc3RyaW5nKClcbiAgICBpZiAoIXZhbHVlVHlwZSB8fCAhdmFsdWVUeXBlLl96b2QpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RSZWNvcmQoe1xuICAgICAgICAgICAgdHlwZTogXCJyZWNvcmRcIixcbiAgICAgICAgICAgIGtleVR5cGU6IHN0cmluZygpLFxuICAgICAgICAgICAgdmFsdWVUeXBlOiBrZXlUeXBlLFxuICAgICAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXModmFsdWVUeXBlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgWm9kUmVjb3JkKHtcbiAgICAgICAgdHlwZTogXCJyZWNvcmRcIixcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgdmFsdWVUeXBlOiB2YWx1ZVR5cGUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyB0eXBlIGFsa3NqZiA9IGNvcmUub3V0cHV0PGNvcmUuJFpvZFJlY29yZEtleT47XG5leHBvcnQgZnVuY3Rpb24gcGFydGlhbFJlY29yZChrZXlUeXBlLCB2YWx1ZVR5cGUsIHBhcmFtcykge1xuICAgIGNvbnN0IGsgPSBjb3JlLmNsb25lKGtleVR5cGUpO1xuICAgIGsuX3pvZC52YWx1ZXMgPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG5ldyBab2RSZWNvcmQoe1xuICAgICAgICB0eXBlOiBcInJlY29yZFwiLFxuICAgICAgICBrZXlUeXBlOiBrLFxuICAgICAgICB2YWx1ZVR5cGU6IHZhbHVlVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBsb29zZVJlY29yZChrZXlUeXBlLCB2YWx1ZVR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kUmVjb3JkKHtcbiAgICAgICAgdHlwZTogXCJyZWNvcmRcIixcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgdmFsdWVUeXBlOiB2YWx1ZVR5cGUsXG4gICAgICAgIG1vZGU6IFwibG9vc2VcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RNYXAgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTWFwXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RNYXAuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5tYXBQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3Qua2V5VHlwZSA9IGRlZi5rZXlUeXBlO1xuICAgIGluc3QudmFsdWVUeXBlID0gZGVmLnZhbHVlVHlwZTtcbiAgICBpbnN0Lm1pbiA9ICguLi5hcmdzKSA9PiBpbnN0LmNoZWNrKGNvcmUuX21pblNpemUoLi4uYXJncykpO1xuICAgIGluc3Qubm9uZW1wdHkgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX21pblNpemUoMSwgcGFyYW1zKSk7XG4gICAgaW5zdC5tYXggPSAoLi4uYXJncykgPT4gaW5zdC5jaGVjayhjb3JlLl9tYXhTaXplKC4uLmFyZ3MpKTtcbiAgICBpbnN0LnNpemUgPSAoLi4uYXJncykgPT4gaW5zdC5jaGVjayhjb3JlLl9zaXplKC4uLmFyZ3MpKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIG1hcChrZXlUeXBlLCB2YWx1ZVR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kTWFwKHtcbiAgICAgICAgdHlwZTogXCJtYXBcIixcbiAgICAgICAga2V5VHlwZToga2V5VHlwZSxcbiAgICAgICAgdmFsdWVUeXBlOiB2YWx1ZVR5cGUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kU2V0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFNldFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kU2V0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuc2V0UHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0Lm1pbiA9ICguLi5hcmdzKSA9PiBpbnN0LmNoZWNrKGNvcmUuX21pblNpemUoLi4uYXJncykpO1xuICAgIGluc3Qubm9uZW1wdHkgPSAocGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX21pblNpemUoMSwgcGFyYW1zKSk7XG4gICAgaW5zdC5tYXggPSAoLi4uYXJncykgPT4gaW5zdC5jaGVjayhjb3JlLl9tYXhTaXplKC4uLmFyZ3MpKTtcbiAgICBpbnN0LnNpemUgPSAoLi4uYXJncykgPT4gaW5zdC5jaGVjayhjb3JlLl9zaXplKC4uLmFyZ3MpKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHNldCh2YWx1ZVR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kU2V0KHtcbiAgICAgICAgdHlwZTogXCJzZXRcIixcbiAgICAgICAgdmFsdWVUeXBlOiB2YWx1ZVR5cGUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kRW51bSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RFbnVtXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RFbnVtLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuZW51bVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5lbnVtID0gZGVmLmVudHJpZXM7XG4gICAgaW5zdC5vcHRpb25zID0gT2JqZWN0LnZhbHVlcyhkZWYuZW50cmllcyk7XG4gICAgY29uc3Qga2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMoZGVmLmVudHJpZXMpKTtcbiAgICBpbnN0LmV4dHJhY3QgPSAodmFsdWVzLCBwYXJhbXMpID0+IHtcbiAgICAgICAgY29uc3QgbmV3RW50cmllcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgaWYgKGtleXMuaGFzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIG5ld0VudHJpZXNbdmFsdWVdID0gZGVmLmVudHJpZXNbdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgS2V5ICR7dmFsdWV9IG5vdCBmb3VuZCBpbiBlbnVtYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBab2RFbnVtKHtcbiAgICAgICAgICAgIC4uLmRlZixcbiAgICAgICAgICAgIGNoZWNrczogW10sXG4gICAgICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICAgICAgZW50cmllczogbmV3RW50cmllcyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBpbnN0LmV4Y2x1ZGUgPSAodmFsdWVzLCBwYXJhbXMpID0+IHtcbiAgICAgICAgY29uc3QgbmV3RW50cmllcyA9IHsgLi4uZGVmLmVudHJpZXMgfTtcbiAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGlmIChrZXlzLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3RW50cmllc1t2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBLZXkgJHt2YWx1ZX0gbm90IGZvdW5kIGluIGVudW1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFpvZEVudW0oe1xuICAgICAgICAgICAgLi4uZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbXSxcbiAgICAgICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgICAgICBlbnRyaWVzOiBuZXdFbnRyaWVzLFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBfZW51bSh2YWx1ZXMsIHBhcmFtcykge1xuICAgIGNvbnN0IGVudHJpZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlcykgPyBPYmplY3QuZnJvbUVudHJpZXModmFsdWVzLm1hcCgodikgPT4gW3YsIHZdKSkgOiB2YWx1ZXM7XG4gICAgcmV0dXJuIG5ldyBab2RFbnVtKHtcbiAgICAgICAgdHlwZTogXCJlbnVtXCIsXG4gICAgICAgIGVudHJpZXMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgeyBfZW51bSBhcyBlbnVtIH07XG4vKiogQGRlcHJlY2F0ZWQgVGhpcyBBUEkgaGFzIGJlZW4gbWVyZ2VkIGludG8gYHouZW51bSgpYC4gVXNlIGB6LmVudW0oKWAgaW5zdGVhZC5cbiAqXG4gKiBgYGB0c1xuICogZW51bSBDb2xvcnMgeyByZWQsIGdyZWVuLCBibHVlIH1cbiAqIHouZW51bShDb2xvcnMpO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYXRpdmVFbnVtKGVudHJpZXMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kRW51bSh7XG4gICAgICAgIHR5cGU6IFwiZW51bVwiLFxuICAgICAgICBlbnRyaWVzLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZExpdGVyYWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kTGl0ZXJhbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kTGl0ZXJhbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLmxpdGVyYWxQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudmFsdWVzID0gbmV3IFNldChkZWYudmFsdWVzKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW5zdCwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIGlmIChkZWYudmFsdWVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIHNjaGVtYSBjb250YWlucyBtdWx0aXBsZSB2YWxpZCBsaXRlcmFsIHZhbHVlcy4gVXNlIGAudmFsdWVzYCBpbnN0ZWFkLlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBkZWYudmFsdWVzWzBdO1xuICAgICAgICB9LFxuICAgIH0pO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbGl0ZXJhbCh2YWx1ZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBab2RMaXRlcmFsKHtcbiAgICAgICAgdHlwZTogXCJsaXRlcmFsXCIsXG4gICAgICAgIHZhbHVlczogQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IFt2YWx1ZV0sXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kRmlsZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RGaWxlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RGaWxlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuZmlsZVByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC5taW4gPSAoc2l6ZSwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX21pblNpemUoc2l6ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5tYXggPSAoc2l6ZSwgcGFyYW1zKSA9PiBpbnN0LmNoZWNrKGNvcmUuX21heFNpemUoc2l6ZSwgcGFyYW1zKSk7XG4gICAgaW5zdC5taW1lID0gKHR5cGVzLCBwYXJhbXMpID0+IGluc3QuY2hlY2soY29yZS5fbWltZShBcnJheS5pc0FycmF5KHR5cGVzKSA/IHR5cGVzIDogW3R5cGVzXSwgcGFyYW1zKSk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBmaWxlKHBhcmFtcykge1xuICAgIHJldHVybiBjb3JlLl9maWxlKFpvZEZpbGUsIHBhcmFtcyk7XG59XG5leHBvcnQgY29uc3QgWm9kVHJhbnNmb3JtID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFRyYW5zZm9ybVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kVHJhbnNmb3JtLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMudHJhbnNmb3JtUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBpZiAoX2N0eC5kaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuJFpvZEVuY29kZUVycm9yKGluc3QuY29uc3RydWN0b3IubmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC5hZGRJc3N1ZSA9IChpc3N1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpc3N1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2godXRpbC5pc3N1ZShpc3N1ZSwgcGF5bG9hZC52YWx1ZSwgZGVmKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBmb3IgWm9kIDMgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBjb25zdCBfaXNzdWUgPSBpc3N1ZTtcbiAgICAgICAgICAgICAgICBpZiAoX2lzc3VlLmZhdGFsKVxuICAgICAgICAgICAgICAgICAgICBfaXNzdWUuY29udGludWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBfaXNzdWUuY29kZSA/PyAoX2lzc3VlLmNvZGUgPSBcImN1c3RvbVwiKTtcbiAgICAgICAgICAgICAgICBfaXNzdWUuaW5wdXQgPz8gKF9pc3N1ZS5pbnB1dCA9IHBheWxvYWQudmFsdWUpO1xuICAgICAgICAgICAgICAgIF9pc3N1ZS5pbnN0ID8/IChfaXNzdWUuaW5zdCA9IGluc3QpO1xuICAgICAgICAgICAgICAgIC8vIF9pc3N1ZS5jb250aW51ZSA/Pz0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHV0aWwuaXNzdWUoX2lzc3VlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IG91dHB1dCA9IGRlZi50cmFuc2Zvcm0ocGF5bG9hZC52YWx1ZSwgcGF5bG9hZCk7XG4gICAgICAgIGlmIChvdXRwdXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0LnRoZW4oKG91dHB1dCkgPT4ge1xuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBvdXRwdXQ7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5mYWxsYmFjayA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLnZhbHVlID0gb3V0cHV0O1xuICAgICAgICBwYXlsb2FkLmZhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybShmbikge1xuICAgIHJldHVybiBuZXcgWm9kVHJhbnNmb3JtKHtcbiAgICAgICAgdHlwZTogXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgdHJhbnNmb3JtOiBmbixcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RPcHRpb25hbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RPcHRpb25hbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kT3B0aW9uYWwuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5vcHRpb25hbFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC51bndyYXAgPSAoKSA9PiBpbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsKGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgWm9kT3B0aW9uYWwoe1xuICAgICAgICB0eXBlOiBcIm9wdGlvbmFsXCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZEV4YWN0T3B0aW9uYWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRXhhY3RPcHRpb25hbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kRXhhY3RPcHRpb25hbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLm9wdGlvbmFsUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gZXhhY3RPcHRpb25hbChpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFpvZEV4YWN0T3B0aW9uYWwoe1xuICAgICAgICB0eXBlOiBcIm9wdGlvbmFsXCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlLFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZE51bGxhYmxlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE51bGxhYmxlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2ROdWxsYWJsZS5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLm51bGxhYmxlUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbnVsbGFibGUoaW5uZXJUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBab2ROdWxsYWJsZSh7XG4gICAgICAgIHR5cGU6IFwibnVsbGFibGVcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgfSk7XG59XG4vLyBudWxsaXNoXG5leHBvcnQgZnVuY3Rpb24gbnVsbGlzaChpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gb3B0aW9uYWwobnVsbGFibGUoaW5uZXJUeXBlKSk7XG59XG5leHBvcnQgY29uc3QgWm9kRGVmYXVsdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2REZWZhdWx0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2REZWZhdWx0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuZGVmYXVsdFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC51bndyYXAgPSAoKSA9PiBpbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbiAgICBpbnN0LnJlbW92ZURlZmF1bHQgPSBpbnN0LnVud3JhcDtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIF9kZWZhdWx0KGlubmVyVHlwZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBab2REZWZhdWx0KHtcbiAgICAgICAgdHlwZTogXCJkZWZhdWx0XCIsXG4gICAgICAgIGlubmVyVHlwZTogaW5uZXJUeXBlLFxuICAgICAgICBnZXQgZGVmYXVsdFZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IGRlZmF1bHRWYWx1ZSgpIDogdXRpbC5zaGFsbG93Q2xvbmUoZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RQcmVmYXVsdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCJab2RQcmVmYXVsdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kUHJlZmF1bHQuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5wcmVmYXVsdFByb2Nlc3NvcihpbnN0LCBjdHgsIGpzb24sIHBhcmFtcyk7XG4gICAgaW5zdC51bndyYXAgPSAoKSA9PiBpbnN0Ll96b2QuZGVmLmlubmVyVHlwZTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZhdWx0KGlubmVyVHlwZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBab2RQcmVmYXVsdCh7XG4gICAgICAgIHR5cGU6IFwicHJlZmF1bHRcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgICAgIGdldCBkZWZhdWx0VmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gZGVmYXVsdFZhbHVlKCkgOiB1dGlsLnNoYWxsb3dDbG9uZShkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuZXhwb3J0IGNvbnN0IFpvZE5vbk9wdGlvbmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE5vbk9wdGlvbmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2ROb25PcHRpb25hbC5pbml0KGluc3QsIGRlZik7XG4gICAgWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnByb2Nlc3NKU09OU2NoZW1hID0gKGN0eCwganNvbiwgcGFyYW1zKSA9PiBwcm9jZXNzb3JzLm5vbm9wdGlvbmFsUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gbm9ub3B0aW9uYWwoaW5uZXJUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZE5vbk9wdGlvbmFsKHtcbiAgICAgICAgdHlwZTogXCJub25vcHRpb25hbFwiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RTdWNjZXNzID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFN1Y2Nlc3NcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFN1Y2Nlc3MuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5zdWNjZXNzUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gc3VjY2Vzcyhpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFpvZFN1Y2Nlc3Moe1xuICAgICAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kQ2F0Y2ggPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQ2F0Y2hcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZENhdGNoLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuY2F0Y2hQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG4gICAgaW5zdC5yZW1vdmVDYXRjaCA9IGluc3QudW53cmFwO1xufSk7XG5mdW5jdGlvbiBfY2F0Y2goaW5uZXJUeXBlLCBjYXRjaFZhbHVlKSB7XG4gICAgcmV0dXJuIG5ldyBab2RDYXRjaCh7XG4gICAgICAgIHR5cGU6IFwiY2F0Y2hcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgICAgIGNhdGNoVmFsdWU6ICh0eXBlb2YgY2F0Y2hWYWx1ZSA9PT0gXCJmdW5jdGlvblwiID8gY2F0Y2hWYWx1ZSA6ICgpID0+IGNhdGNoVmFsdWUpLFxuICAgIH0pO1xufVxuZXhwb3J0IHsgX2NhdGNoIGFzIGNhdGNoIH07XG5leHBvcnQgY29uc3QgWm9kTmFOID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZE5hTlwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY29yZS4kWm9kTmFOLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMubmFuUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIG5hbihwYXJhbXMpIHtcbiAgICByZXR1cm4gY29yZS5fbmFuKFpvZE5hTiwgcGFyYW1zKTtcbn1cbmV4cG9ydCBjb25zdCBab2RQaXBlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFBpcGVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFBpcGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5waXBlUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LmluID0gZGVmLmluO1xuICAgIGluc3Qub3V0ID0gZGVmLm91dDtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIHBpcGUoaW5fLCBvdXQpIHtcbiAgICByZXR1cm4gbmV3IFpvZFBpcGUoe1xuICAgICAgICB0eXBlOiBcInBpcGVcIixcbiAgICAgICAgaW46IGluXyxcbiAgICAgICAgb3V0OiBvdXQsXG4gICAgICAgIC8vIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kQ29kZWMgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQ29kZWNcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIFpvZFBpcGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZENvZGVjLmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGZ1bmN0aW9uIGNvZGVjKGluXywgb3V0LCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZENvZGVjKHtcbiAgICAgICAgdHlwZTogXCJwaXBlXCIsXG4gICAgICAgIGluOiBpbl8sXG4gICAgICAgIG91dDogb3V0LFxuICAgICAgICB0cmFuc2Zvcm06IHBhcmFtcy5kZWNvZGUsXG4gICAgICAgIHJldmVyc2VUcmFuc2Zvcm06IHBhcmFtcy5lbmNvZGUsXG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaW52ZXJ0Q29kZWMoY29kZWMpIHtcbiAgICBjb25zdCBkZWYgPSBjb2RlYy5fem9kLmRlZjtcbiAgICByZXR1cm4gbmV3IFpvZENvZGVjKHtcbiAgICAgICAgdHlwZTogXCJwaXBlXCIsXG4gICAgICAgIGluOiBkZWYub3V0LFxuICAgICAgICBvdXQ6IGRlZi5pbixcbiAgICAgICAgdHJhbnNmb3JtOiBkZWYucmV2ZXJzZVRyYW5zZm9ybSxcbiAgICAgICAgcmV2ZXJzZVRyYW5zZm9ybTogZGVmLnRyYW5zZm9ybSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RQcmVwcm9jZXNzID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFByZXByb2Nlc3NcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIFpvZFBpcGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvcmUuJFpvZFByZXByb2Nlc3MuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgWm9kUmVhZG9ubHkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kUmVhZG9ubHlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFJlYWRvbmx5LmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMucmVhZG9ubHlQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xuICAgIGluc3QudW53cmFwID0gKCkgPT4gaW5zdC5fem9kLmRlZi5pbm5lclR5cGU7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiByZWFkb25seShpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFpvZFJlYWRvbmx5KHtcbiAgICAgICAgdHlwZTogXCJyZWFkb25seVwiLFxuICAgICAgICBpbm5lclR5cGU6IGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RUZW1wbGF0ZUxpdGVyYWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kVGVtcGxhdGVMaXRlcmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RUZW1wbGF0ZUxpdGVyYWwuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy50ZW1wbGF0ZUxpdGVyYWxQcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gdGVtcGxhdGVMaXRlcmFsKHBhcnRzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZFRlbXBsYXRlTGl0ZXJhbCh7XG4gICAgICAgIHR5cGU6IFwidGVtcGxhdGVfbGl0ZXJhbFwiLFxuICAgICAgICBwYXJ0cyxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RMYXp5ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZExhenlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZExhenkuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5sYXp5UHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuZ2V0dGVyKCk7XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBsYXp5KGdldHRlcikge1xuICAgIHJldHVybiBuZXcgWm9kTGF6eSh7XG4gICAgICAgIHR5cGU6IFwibGF6eVwiLFxuICAgICAgICBnZXR0ZXI6IGdldHRlcixcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBab2RQcm9taXNlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIlpvZFByb21pc2VcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZFByb21pc2UuaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5wcm9taXNlUHJvY2Vzc29yKGluc3QsIGN0eCwganNvbiwgcGFyYW1zKTtcbiAgICBpbnN0LnVud3JhcCA9ICgpID0+IGluc3QuX3pvZC5kZWYuaW5uZXJUeXBlO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZShpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFpvZFByb21pc2Uoe1xuICAgICAgICB0eXBlOiBcInByb21pc2VcIixcbiAgICAgICAgaW5uZXJUeXBlOiBpbm5lclR5cGUsXG4gICAgfSk7XG59XG5leHBvcnQgY29uc3QgWm9kRnVuY3Rpb24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kRnVuY3Rpb25cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGNvcmUuJFpvZEZ1bmN0aW9uLmluaXQoaW5zdCwgZGVmKTtcbiAgICBab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucHJvY2Vzc0pTT05TY2hlbWEgPSAoY3R4LCBqc29uLCBwYXJhbXMpID0+IHByb2Nlc3NvcnMuZnVuY3Rpb25Qcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG5leHBvcnQgZnVuY3Rpb24gX2Z1bmN0aW9uKHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgWm9kRnVuY3Rpb24oe1xuICAgICAgICB0eXBlOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgIGlucHV0OiBBcnJheS5pc0FycmF5KHBhcmFtcz8uaW5wdXQpID8gdHVwbGUocGFyYW1zPy5pbnB1dCkgOiAocGFyYW1zPy5pbnB1dCA/PyBhcnJheSh1bmtub3duKCkpKSxcbiAgICAgICAgb3V0cHV0OiBwYXJhbXM/Lm91dHB1dCA/PyB1bmtub3duKCksXG4gICAgfSk7XG59XG5leHBvcnQgeyBfZnVuY3Rpb24gYXMgZnVuY3Rpb24gfTtcbmV4cG9ydCBjb25zdCBab2RDdXN0b20gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiWm9kQ3VzdG9tXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjb3JlLiRab2RDdXN0b20uaW5pdChpbnN0LCBkZWYpO1xuICAgIFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSA9IChjdHgsIGpzb24sIHBhcmFtcykgPT4gcHJvY2Vzc29ycy5jdXN0b21Qcm9jZXNzb3IoaW5zdCwgY3R4LCBqc29uLCBwYXJhbXMpO1xufSk7XG4vLyBjdXN0b20gY2hlY2tzXG5leHBvcnQgZnVuY3Rpb24gY2hlY2soZm4pIHtcbiAgICBjb25zdCBjaCA9IG5ldyBjb3JlLiRab2RDaGVjayh7XG4gICAgICAgIGNoZWNrOiBcImN1c3RvbVwiLFxuICAgICAgICAvLyAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xuICAgIGNoLl96b2QuY2hlY2sgPSBmbjtcbiAgICByZXR1cm4gY2g7XG59XG5leHBvcnQgZnVuY3Rpb24gY3VzdG9tKGZuLCBfcGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX2N1c3RvbShab2RDdXN0b20sIGZuID8/ICgoKSA9PiB0cnVlKSwgX3BhcmFtcyk7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVmaW5lKGZuLCBfcGFyYW1zID0ge30pIHtcbiAgICByZXR1cm4gY29yZS5fcmVmaW5lKFpvZEN1c3RvbSwgZm4sIF9wYXJhbXMpO1xufVxuLy8gc3VwZXJSZWZpbmVcbmV4cG9ydCBmdW5jdGlvbiBzdXBlclJlZmluZShmbiwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIGNvcmUuX3N1cGVyUmVmaW5lKGZuLCBwYXJhbXMpO1xufVxuLy8gUmUtZXhwb3J0IGRlc2NyaWJlIGFuZCBtZXRhIGZyb20gY29yZVxuZXhwb3J0IGNvbnN0IGRlc2NyaWJlID0gY29yZS5kZXNjcmliZTtcbmV4cG9ydCBjb25zdCBtZXRhID0gY29yZS5tZXRhO1xuZnVuY3Rpb24gX2luc3RhbmNlb2YoY2xzLCBwYXJhbXMgPSB7fSkge1xuICAgIGNvbnN0IGluc3QgPSBuZXcgWm9kQ3VzdG9tKHtcbiAgICAgICAgdHlwZTogXCJjdXN0b21cIixcbiAgICAgICAgY2hlY2s6IFwiY3VzdG9tXCIsXG4gICAgICAgIGZuOiAoZGF0YSkgPT4gZGF0YSBpbnN0YW5jZW9mIGNscyxcbiAgICAgICAgYWJvcnQ6IHRydWUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmJhZy5DbGFzcyA9IGNscztcbiAgICAvLyBPdmVycmlkZSBjaGVjayB0byBlbWl0IGludmFsaWRfdHlwZSBpbnN0ZWFkIG9mIGN1c3RvbVxuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmICghKHBheWxvYWQudmFsdWUgaW5zdGFuY2VvZiBjbHMpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBjbHMubmFtZSxcbiAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIHBhdGg6IFsuLi4oaW5zdC5fem9kLmRlZi5wYXRoID8/IFtdKV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGluc3Q7XG59XG5leHBvcnQgeyBfaW5zdGFuY2VvZiBhcyBpbnN0YW5jZW9mIH07XG4vLyBzdHJpbmdib29sXG5leHBvcnQgY29uc3Qgc3RyaW5nYm9vbCA9ICguLi5hcmdzKSA9PiBjb3JlLl9zdHJpbmdib29sKHtcbiAgICBDb2RlYzogWm9kQ29kZWMsXG4gICAgQm9vbGVhbjogWm9kQm9vbGVhbixcbiAgICBTdHJpbmc6IFpvZFN0cmluZyxcbn0sIC4uLmFyZ3MpO1xuZXhwb3J0IGZ1bmN0aW9uIGpzb24ocGFyYW1zKSB7XG4gICAgY29uc3QganNvblNjaGVtYSA9IGxhenkoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdW5pb24oW3N0cmluZyhwYXJhbXMpLCBudW1iZXIoKSwgYm9vbGVhbigpLCBfbnVsbCgpLCBhcnJheShqc29uU2NoZW1hKSwgcmVjb3JkKHN0cmluZygpLCBqc29uU2NoZW1hKV0pO1xuICAgIH0pO1xuICAgIHJldHVybiBqc29uU2NoZW1hO1xufVxuLy8gcHJlcHJvY2Vzc1xuZXhwb3J0IGZ1bmN0aW9uIHByZXByb2Nlc3MoZm4sIHNjaGVtYSkge1xuICAgIHJldHVybiBuZXcgWm9kUHJlcHJvY2Vzcyh7XG4gICAgICAgIHR5cGU6IFwicGlwZVwiLFxuICAgICAgICBpbjogdHJhbnNmb3JtKGZuKSxcbiAgICAgICAgb3V0OiBzY2hlbWEsXG4gICAgfSk7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/classic/schemas.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/core/api.js":
|
||
/*!*****************************************!*\
|
||
!*** ./node_modules/zod/v4/core/api.js ***!
|
||
\*****************************************/
|
||
/***/ ((__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 */ TimePrecision: () => (/* binding */ TimePrecision),\n/* harmony export */ _any: () => (/* binding */ _any),\n/* harmony export */ _array: () => (/* binding */ _array),\n/* harmony export */ _base64: () => (/* binding */ _base64),\n/* harmony export */ _base64url: () => (/* binding */ _base64url),\n/* harmony export */ _bigint: () => (/* binding */ _bigint),\n/* harmony export */ _boolean: () => (/* binding */ _boolean),\n/* harmony export */ _catch: () => (/* binding */ _catch),\n/* harmony export */ _check: () => (/* binding */ _check),\n/* harmony export */ _cidrv4: () => (/* binding */ _cidrv4),\n/* harmony export */ _cidrv6: () => (/* binding */ _cidrv6),\n/* harmony export */ _coercedBigint: () => (/* binding */ _coercedBigint),\n/* harmony export */ _coercedBoolean: () => (/* binding */ _coercedBoolean),\n/* harmony export */ _coercedDate: () => (/* binding */ _coercedDate),\n/* harmony export */ _coercedNumber: () => (/* binding */ _coercedNumber),\n/* harmony export */ _coercedString: () => (/* binding */ _coercedString),\n/* harmony export */ _cuid: () => (/* binding */ _cuid),\n/* harmony export */ _cuid2: () => (/* binding */ _cuid2),\n/* harmony export */ _custom: () => (/* binding */ _custom),\n/* harmony export */ _date: () => (/* binding */ _date),\n/* harmony export */ _default: () => (/* binding */ _default),\n/* harmony export */ _discriminatedUnion: () => (/* binding */ _discriminatedUnion),\n/* harmony export */ _e164: () => (/* binding */ _e164),\n/* harmony export */ _email: () => (/* binding */ _email),\n/* harmony export */ _emoji: () => (/* binding */ _emoji),\n/* harmony export */ _endsWith: () => (/* binding */ _endsWith),\n/* harmony export */ _enum: () => (/* binding */ _enum),\n/* harmony export */ _file: () => (/* binding */ _file),\n/* harmony export */ _float32: () => (/* binding */ _float32),\n/* harmony export */ _float64: () => (/* binding */ _float64),\n/* harmony export */ _gt: () => (/* binding */ _gt),\n/* harmony export */ _gte: () => (/* binding */ _gte),\n/* harmony export */ _guid: () => (/* binding */ _guid),\n/* harmony export */ _includes: () => (/* binding */ _includes),\n/* harmony export */ _int: () => (/* binding */ _int),\n/* harmony export */ _int32: () => (/* binding */ _int32),\n/* harmony export */ _int64: () => (/* binding */ _int64),\n/* harmony export */ _intersection: () => (/* binding */ _intersection),\n/* harmony export */ _ipv4: () => (/* binding */ _ipv4),\n/* harmony export */ _ipv6: () => (/* binding */ _ipv6),\n/* harmony export */ _isoDate: () => (/* binding */ _isoDate),\n/* harmony export */ _isoDateTime: () => (/* binding */ _isoDateTime),\n/* harmony export */ _isoDuration: () => (/* binding */ _isoDuration),\n/* harmony export */ _isoTime: () => (/* binding */ _isoTime),\n/* harmony export */ _jwt: () => (/* binding */ _jwt),\n/* harmony export */ _ksuid: () => (/* binding */ _ksuid),\n/* harmony export */ _lazy: () => (/* binding */ _lazy),\n/* harmony export */ _length: () => (/* binding */ _length),\n/* harmony export */ _literal: () => (/* binding */ _literal),\n/* harmony export */ _lowercase: () => (/* binding */ _lowercase),\n/* harmony export */ _lt: () => (/* binding */ _lt),\n/* harmony export */ _lte: () => (/* binding */ _lte),\n/* harmony export */ _mac: () => (/* binding */ _mac),\n/* harmony export */ _map: () => (/* binding */ _map),\n/* harmony export */ _max: () => (/* binding */ _lte),\n/* harmony export */ _maxLength: () => (/* binding */ _maxLength),\n/* harmony export */ _maxSize: () => (/* binding */ _maxSize),\n/* harmony export */ _mime: () => (/* binding */ _mime),\n/* harmony export */ _min: () => (/* binding */ _gte),\n/* harmony export */ _minLength: () => (/* binding */ _minLength),\n/* harmony export */ _minSize: () => (/* binding */ _minSize),\n/* harmony export */ _multipleOf: () => (/* binding */ _multipleOf),\n/* harmony export */ _nan: () => (/* binding */ _nan),\n/* harmony export */ _nanoid: () => (/* binding */ _nanoid),\n/* harmony export */ _nativeEnum: () => (/* binding */ _nativeEnum),\n/* harmony export */ _negative: () => (/* binding */ _negative),\n/* harmony export */ _never: () => (/* binding */ _never),\n/* harmony export */ _nonnegative: () => (/* binding */ _nonnegative),\n/* harmony export */ _nonoptional: () => (/* binding */ _nonoptional),\n/* harmony export */ _nonpositive: () => (/* binding */ _nonpositive),\n/* harmony export */ _normalize: () => (/* binding */ _normalize),\n/* harmony export */ _null: () => (/* binding */ _null),\n/* harmony export */ _nullable: () => (/* binding */ _nullable),\n/* harmony export */ _number: () => (/* binding */ _number),\n/* harmony export */ _optional: () => (/* binding */ _optional),\n/* harmony export */ _overwrite: () => (/* binding */ _overwrite),\n/* harmony export */ _pipe: () => (/* binding */ _pipe),\n/* harmony export */ _positive: () => (/* binding */ _positive),\n/* harmony export */ _promise: () => (/* binding */ _promise),\n/* harmony export */ _property: () => (/* binding */ _property),\n/* harmony export */ _readonly: () => (/* binding */ _readonly),\n/* harmony export */ _record: () => (/* binding */ _record),\n/* harmony export */ _refine: () => (/* binding */ _refine),\n/* harmony export */ _regex: () => (/* binding */ _regex),\n/* harmony export */ _set: () => (/* binding */ _set),\n/* harmony export */ _size: () => (/* binding */ _size),\n/* harmony export */ _slugify: () => (/* binding */ _slugify),\n/* harmony export */ _startsWith: () => (/* binding */ _startsWith),\n/* harmony export */ _string: () => (/* binding */ _string),\n/* harmony export */ _stringFormat: () => (/* binding */ _stringFormat),\n/* harmony export */ _stringbool: () => (/* binding */ _stringbool),\n/* harmony export */ _success: () => (/* binding */ _success),\n/* harmony export */ _superRefine: () => (/* binding */ _superRefine),\n/* harmony export */ _symbol: () => (/* binding */ _symbol),\n/* harmony export */ _templateLiteral: () => (/* binding */ _templateLiteral),\n/* harmony export */ _toLowerCase: () => (/* binding */ _toLowerCase),\n/* harmony export */ _toUpperCase: () => (/* binding */ _toUpperCase),\n/* harmony export */ _transform: () => (/* binding */ _transform),\n/* harmony export */ _trim: () => (/* binding */ _trim),\n/* harmony export */ _tuple: () => (/* binding */ _tuple),\n/* harmony export */ _uint32: () => (/* binding */ _uint32),\n/* harmony export */ _uint64: () => (/* binding */ _uint64),\n/* harmony export */ _ulid: () => (/* binding */ _ulid),\n/* harmony export */ _undefined: () => (/* binding */ _undefined),\n/* harmony export */ _union: () => (/* binding */ _union),\n/* harmony export */ _unknown: () => (/* binding */ _unknown),\n/* harmony export */ _uppercase: () => (/* binding */ _uppercase),\n/* harmony export */ _url: () => (/* binding */ _url),\n/* harmony export */ _uuid: () => (/* binding */ _uuid),\n/* harmony export */ _uuidv4: () => (/* binding */ _uuidv4),\n/* harmony export */ _uuidv6: () => (/* binding */ _uuidv6),\n/* harmony export */ _uuidv7: () => (/* binding */ _uuidv7),\n/* harmony export */ _void: () => (/* binding */ _void),\n/* harmony export */ _xid: () => (/* binding */ _xid),\n/* harmony export */ _xor: () => (/* binding */ _xor),\n/* harmony export */ describe: () => (/* binding */ describe),\n/* harmony export */ meta: () => (/* binding */ meta)\n/* harmony export */ });\n/* harmony import */ var _checks_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./checks.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/checks.js\");\n/* harmony import */ var _registries_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./registries.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/registries.js\");\n/* harmony import */ var _schemas_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./schemas.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/schemas.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/util.js\");\n\n\n\n\n// @__NO_SIDE_EFFECTS__\nfunction _string(Class, params) {\n return new Class({\n type: \"string\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _coercedString(Class, params) {\n return new Class({\n type: \"string\",\n coerce: true,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _email(Class, params) {\n return new Class({\n type: \"string\",\n format: \"email\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _guid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"guid\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _uuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _uuidv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v4\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _uuidv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v6\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _uuidv7(Class, params) {\n return new Class({\n type: \"string\",\n format: \"uuid\",\n check: \"string_format\",\n abort: false,\n version: \"v7\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"url\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _emoji(Class, params) {\n return new Class({\n type: \"string\",\n format: \"emoji\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _nanoid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"nanoid\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link _cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\n// @__NO_SIDE_EFFECTS__\nfunction _cuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _cuid2(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cuid2\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _ulid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ulid\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _xid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"xid\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _ksuid(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ksuid\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _ipv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv4\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _ipv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"ipv6\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _mac(Class, params) {\n return new Class({\n type: \"string\",\n format: \"mac\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _cidrv4(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv4\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _cidrv6(Class, params) {\n return new Class({\n type: \"string\",\n format: \"cidrv6\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _base64(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _base64url(Class, params) {\n return new Class({\n type: \"string\",\n format: \"base64url\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _e164(Class, params) {\n return new Class({\n type: \"string\",\n format: \"e164\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _jwt(Class, params) {\n return new Class({\n type: \"string\",\n format: \"jwt\",\n check: \"string_format\",\n abort: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\nconst TimePrecision = {\n Any: null,\n Minute: -1,\n Second: 0,\n Millisecond: 3,\n Microsecond: 6,\n};\n// @__NO_SIDE_EFFECTS__\nfunction _isoDateTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"datetime\",\n check: \"string_format\",\n offset: false,\n local: false,\n precision: null,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _isoDate(Class, params) {\n return new Class({\n type: \"string\",\n format: \"date\",\n check: \"string_format\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _isoTime(Class, params) {\n return new Class({\n type: \"string\",\n format: \"time\",\n check: \"string_format\",\n precision: null,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _isoDuration(Class, params) {\n return new Class({\n type: \"string\",\n format: \"duration\",\n check: \"string_format\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _number(Class, params) {\n return new Class({\n type: \"number\",\n checks: [],\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _coercedNumber(Class, params) {\n return new Class({\n type: \"number\",\n coerce: true,\n checks: [],\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _int(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"safeint\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _float32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float32\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _float64(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"float64\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _int32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"int32\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _uint32(Class, params) {\n return new Class({\n type: \"number\",\n check: \"number_format\",\n abort: false,\n format: \"uint32\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _boolean(Class, params) {\n return new Class({\n type: \"boolean\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _coercedBoolean(Class, params) {\n return new Class({\n type: \"boolean\",\n coerce: true,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _bigint(Class, params) {\n return new Class({\n type: \"bigint\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _coercedBigint(Class, params) {\n return new Class({\n type: \"bigint\",\n coerce: true,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _int64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"int64\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _uint64(Class, params) {\n return new Class({\n type: \"bigint\",\n check: \"bigint_format\",\n abort: false,\n format: \"uint64\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _symbol(Class, params) {\n return new Class({\n type: \"symbol\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _undefined(Class, params) {\n return new Class({\n type: \"undefined\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _null(Class, params) {\n return new Class({\n type: \"null\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _any(Class) {\n return new Class({\n type: \"any\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _unknown(Class) {\n return new Class({\n type: \"unknown\",\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _never(Class, params) {\n return new Class({\n type: \"never\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _void(Class, params) {\n return new Class({\n type: \"void\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _date(Class, params) {\n return new Class({\n type: \"date\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _coercedDate(Class, params) {\n return new Class({\n type: \"date\",\n coerce: true,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _nan(Class, params) {\n return new Class({\n type: \"nan\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _lt(value, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckLessThan({\n check: \"less_than\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _lte(value, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckLessThan({\n check: \"less_than\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\n\n// @__NO_SIDE_EFFECTS__\nfunction _gt(value, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n value,\n inclusive: false,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _gte(value, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckGreaterThan({\n check: \"greater_than\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n value,\n inclusive: true,\n });\n}\n\n// @__NO_SIDE_EFFECTS__\nfunction _positive(params) {\n return _gt(0, params);\n}\n// negative\n// @__NO_SIDE_EFFECTS__\nfunction _negative(params) {\n return _lt(0, params);\n}\n// nonpositive\n// @__NO_SIDE_EFFECTS__\nfunction _nonpositive(params) {\n return _lte(0, params);\n}\n// nonnegative\n// @__NO_SIDE_EFFECTS__\nfunction _nonnegative(params) {\n return _gte(0, params);\n}\n// @__NO_SIDE_EFFECTS__\nfunction _multipleOf(value, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckMultipleOf({\n check: \"multiple_of\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n value,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _maxSize(maximum, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckMaxSize({\n check: \"max_size\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n maximum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _minSize(minimum, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckMinSize({\n check: \"min_size\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _size(size, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckSizeEquals({\n check: \"size_equals\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n size,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _maxLength(maximum, params) {\n const ch = new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckMaxLength({\n check: \"max_length\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n maximum,\n });\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nfunction _minLength(minimum, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckMinLength({\n check: \"min_length\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n minimum,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _length(length, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckLengthEquals({\n check: \"length_equals\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n length,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _regex(pattern, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckRegex({\n check: \"string_format\",\n format: \"regex\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n pattern,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _lowercase(params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckLowerCase({\n check: \"string_format\",\n format: \"lowercase\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _uppercase(params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckUpperCase({\n check: \"string_format\",\n format: \"uppercase\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _includes(includes, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckIncludes({\n check: \"string_format\",\n format: \"includes\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n includes,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _startsWith(prefix, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckStartsWith({\n check: \"string_format\",\n format: \"starts_with\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n prefix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _endsWith(suffix, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckEndsWith({\n check: \"string_format\",\n format: \"ends_with\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n suffix,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _property(property, schema, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckProperty({\n check: \"property\",\n property,\n schema,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _mime(types, params) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckMimeType({\n check: \"mime_type\",\n mime: types,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _overwrite(tx) {\n return new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheckOverwrite({\n check: \"overwrite\",\n tx,\n });\n}\n// normalize\n// @__NO_SIDE_EFFECTS__\nfunction _normalize(form) {\n return _overwrite((input) => input.normalize(form));\n}\n// trim\n// @__NO_SIDE_EFFECTS__\nfunction _trim() {\n return _overwrite((input) => input.trim());\n}\n// toLowerCase\n// @__NO_SIDE_EFFECTS__\nfunction _toLowerCase() {\n return _overwrite((input) => input.toLowerCase());\n}\n// toUpperCase\n// @__NO_SIDE_EFFECTS__\nfunction _toUpperCase() {\n return _overwrite((input) => input.toUpperCase());\n}\n// slugify\n// @__NO_SIDE_EFFECTS__\nfunction _slugify() {\n return _overwrite((input) => _util_js__WEBPACK_IMPORTED_MODULE_0__.slugify(input));\n}\n// @__NO_SIDE_EFFECTS__\nfunction _array(Class, element, params) {\n return new Class({\n type: \"array\",\n element,\n // get element() {\n // return element;\n // },\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _union(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\nfunction _xor(Class, options, params) {\n return new Class({\n type: \"union\",\n options,\n inclusive: false,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _discriminatedUnion(Class, discriminator, options, params) {\n return new Class({\n type: \"union\",\n options,\n discriminator,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _intersection(Class, left, right) {\n return new Class({\n type: \"intersection\",\n left,\n right,\n });\n}\n// export function _tuple(\n// Class: util.SchemaClass<schemas.$ZodTuple>,\n// items: [],\n// params?: string | $ZodTupleParams\n// ): schemas.$ZodTuple<[], null>;\n// @__NO_SIDE_EFFECTS__\nfunction _tuple(Class, items, _paramsOrRest, _params) {\n const hasRest = _paramsOrRest instanceof _schemas_js__WEBPACK_IMPORTED_MODULE_2__.$ZodType;\n const params = hasRest ? _params : _paramsOrRest;\n const rest = hasRest ? _paramsOrRest : null;\n return new Class({\n type: \"tuple\",\n items,\n rest,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _record(Class, keyType, valueType, params) {\n return new Class({\n type: \"record\",\n keyType,\n valueType,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _map(Class, keyType, valueType, params) {\n return new Class({\n type: \"map\",\n keyType,\n valueType,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _set(Class, valueType, params) {\n return new Class({\n type: \"set\",\n valueType,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _enum(Class, values, params) {\n const entries = Array.isArray(values) ? Object.fromEntries(values.map((v) => [v, v])) : values;\n // if (Array.isArray(values)) {\n // for (const value of values) {\n // entries[value] = value;\n // }\n // } else {\n // Object.assign(entries, values);\n // }\n // const entries: util.EnumLike = {};\n // for (const val of values) {\n // entries[val] = val;\n // }\n return new Class({\n type: \"enum\",\n entries,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\n/** @deprecated This API has been merged into `z.enum()`. Use `z.enum()` instead.\n *\n * ```ts\n * enum Colors { red, green, blue }\n * z.enum(Colors);\n * ```\n */\nfunction _nativeEnum(Class, entries, params) {\n return new Class({\n type: \"enum\",\n entries,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _literal(Class, value, params) {\n return new Class({\n type: \"literal\",\n values: Array.isArray(value) ? value : [value],\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _file(Class, params) {\n return new Class({\n type: \"file\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _transform(Class, fn) {\n return new Class({\n type: \"transform\",\n transform: fn,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _optional(Class, innerType) {\n return new Class({\n type: \"optional\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _nullable(Class, innerType) {\n return new Class({\n type: \"nullable\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _default(Class, innerType, defaultValue) {\n return new Class({\n type: \"default\",\n innerType,\n get defaultValue() {\n return typeof defaultValue === \"function\" ? defaultValue() : _util_js__WEBPACK_IMPORTED_MODULE_0__.shallowClone(defaultValue);\n },\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _nonoptional(Class, innerType, params) {\n return new Class({\n type: \"nonoptional\",\n innerType,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _success(Class, innerType) {\n return new Class({\n type: \"success\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _catch(Class, innerType, catchValue) {\n return new Class({\n type: \"catch\",\n innerType,\n catchValue: (typeof catchValue === \"function\" ? catchValue : () => catchValue),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _pipe(Class, in_, out) {\n return new Class({\n type: \"pipe\",\n in: in_,\n out,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _readonly(Class, innerType) {\n return new Class({\n type: \"readonly\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _templateLiteral(Class, parts, params) {\n return new Class({\n type: \"template_literal\",\n parts,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _lazy(Class, getter) {\n return new Class({\n type: \"lazy\",\n getter,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _promise(Class, innerType) {\n return new Class({\n type: \"promise\",\n innerType,\n });\n}\n// @__NO_SIDE_EFFECTS__\nfunction _custom(Class, fn, _params) {\n const norm = _util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(_params);\n norm.abort ?? (norm.abort = true); // default to abort:false\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ...norm,\n });\n return schema;\n}\n// same as _custom but defaults to abort:false\n// @__NO_SIDE_EFFECTS__\nfunction _refine(Class, fn, _params) {\n const schema = new Class({\n type: \"custom\",\n check: \"custom\",\n fn: fn,\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(_params),\n });\n return schema;\n}\n// @__NO_SIDE_EFFECTS__\nfunction _superRefine(fn, params) {\n const ch = _check((payload) => {\n payload.addIssue = (issue) => {\n if (typeof issue === \"string\") {\n payload.issues.push(_util_js__WEBPACK_IMPORTED_MODULE_0__.issue(issue, payload.value, ch._zod.def));\n }\n else {\n // for Zod 3 backwards compatibility\n const _issue = issue;\n if (_issue.fatal)\n _issue.continue = false;\n _issue.code ?? (_issue.code = \"custom\");\n _issue.input ?? (_issue.input = payload.value);\n _issue.inst ?? (_issue.inst = ch);\n _issue.continue ?? (_issue.continue = !ch._zod.def.abort); // abort is always undefined, so this is always true...\n payload.issues.push(_util_js__WEBPACK_IMPORTED_MODULE_0__.issue(_issue));\n }\n };\n return fn(payload.value, payload);\n }, params);\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nfunction _check(fn, params) {\n const ch = new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheck({\n check: \"custom\",\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(params),\n });\n ch._zod.check = fn;\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nfunction describe(description) {\n const ch = new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheck({ check: \"describe\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = _registries_js__WEBPACK_IMPORTED_MODULE_3__.globalRegistry.get(inst) ?? {};\n _registries_js__WEBPACK_IMPORTED_MODULE_3__.globalRegistry.add(inst, { ...existing, description });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nfunction meta(metadata) {\n const ch = new _checks_js__WEBPACK_IMPORTED_MODULE_1__.$ZodCheck({ check: \"meta\" });\n ch._zod.onattach = [\n (inst) => {\n const existing = _registries_js__WEBPACK_IMPORTED_MODULE_3__.globalRegistry.get(inst) ?? {};\n _registries_js__WEBPACK_IMPORTED_MODULE_3__.globalRegistry.add(inst, { ...existing, ...metadata });\n },\n ];\n ch._zod.check = () => { }; // no-op check\n return ch;\n}\n// @__NO_SIDE_EFFECTS__\nfunction _stringbool(Classes, _params) {\n const params = _util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(_params);\n let truthyArray = params.truthy ?? [\"true\", \"1\", \"yes\", \"on\", \"y\", \"enabled\"];\n let falsyArray = params.falsy ?? [\"false\", \"0\", \"no\", \"off\", \"n\", \"disabled\"];\n if (params.case !== \"sensitive\") {\n truthyArray = truthyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n falsyArray = falsyArray.map((v) => (typeof v === \"string\" ? v.toLowerCase() : v));\n }\n const truthySet = new Set(truthyArray);\n const falsySet = new Set(falsyArray);\n const _Codec = Classes.Codec ?? _schemas_js__WEBPACK_IMPORTED_MODULE_2__.$ZodCodec;\n const _Boolean = Classes.Boolean ?? _schemas_js__WEBPACK_IMPORTED_MODULE_2__.$ZodBoolean;\n const _String = Classes.String ?? _schemas_js__WEBPACK_IMPORTED_MODULE_2__.$ZodString;\n const stringSchema = new _String({ type: \"string\", error: params.error });\n const booleanSchema = new _Boolean({ type: \"boolean\", error: params.error });\n const codec = new _Codec({\n type: \"pipe\",\n in: stringSchema,\n out: booleanSchema,\n transform: ((input, payload) => {\n let data = input;\n if (params.case !== \"sensitive\")\n data = data.toLowerCase();\n if (truthySet.has(data)) {\n return true;\n }\n else if (falsySet.has(data)) {\n return false;\n }\n else {\n payload.issues.push({\n code: \"invalid_value\",\n expected: \"stringbool\",\n values: [...truthySet, ...falsySet],\n input: payload.value,\n inst: codec,\n continue: false,\n });\n return {};\n }\n }),\n reverseTransform: ((input, _payload) => {\n if (input === true) {\n return truthyArray[0] || \"true\";\n }\n else {\n return falsyArray[0] || \"false\";\n }\n }),\n error: params.error,\n });\n return codec;\n}\n// @__NO_SIDE_EFFECTS__\nfunction _stringFormat(Class, format, fnOrRegex, _params = {}) {\n const params = _util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(_params);\n const def = {\n ..._util_js__WEBPACK_IMPORTED_MODULE_0__.normalizeParams(_params),\n check: \"string_format\",\n type: \"string\",\n format,\n fn: typeof fnOrRegex === \"function\" ? fnOrRegex : (val) => fnOrRegex.test(val),\n ...params,\n };\n if (fnOrRegex instanceof RegExp) {\n def.pattern = fnOrRegex;\n }\n const inst = new Class(def);\n return inst;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9hcGkuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFzQztBQUNRO0FBQ047QUFDTjtBQUNsQztBQUNPO0FBQ1A7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EseUNBQXlDLGNBQWM7QUFDdkQ7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0IsS0FBSztBQUNMO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQSxXQUFXLHFEQUFvQjtBQUMvQixLQUFLO0FBQ0w7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLFdBQVcscURBQW9CO0FBQy9CLEtBQUs7QUFDTDtBQUNBO0FBQ087QUFD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QkFBbUIsaURBQWdCLEdBQUcsbUJBQW1CO0FBQ3pEO0FBQ0E7QUFDQSw2QkFBNkIsMERBQXlCO0FBQ3RELFlBQVksMERBQXlCLGFBQWEsMEJBQTBCO0FBQzVFLFNBQVM7QUFDVDtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDTztBQUNQLG1CQUFtQixpREFBZ0IsR0FBRyxlQUFlO0FBQ3JEO0FBQ0E7QUFDQSw2QkFBNkIsMERBQXlCO0FBQ3RELFlBQVksMERBQXlCLGFBQWEsMEJBQTBCO0FBQzVFLFNBQVM7QUFDVDtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDTztBQUNQLG1CQUFtQixxREFBb0I7QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyxrREFBaUI7QUFDckQsd0NBQXdDLG9EQUFtQjtBQUMzRCxzQ0FBc0MsbURBQWtCO0FBQ3hELHVDQUF1QyxxQ0FBcUM7QUFDNUUseUNBQXlDLHNDQUFzQztBQUMvRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNPLDZEQUE2RDtBQUNwRSxtQkFBbUIscURBQW9CO0FBQ3ZDO0FBQ0EsV0FBVyxxREFBb0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL2FwaS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBjaGVja3MgZnJvbSBcIi4vY2hlY2tzLmpzXCI7XG5pbXBvcnQgKiBhcyByZWdpc3RyaWVzIGZyb20gXCIuL3JlZ2lzdHJpZXMuanNcIjtcbmltcG9ydCAqIGFzIHNjaGVtYXMgZnJvbSBcIi4vc2NoZW1hcy5qc1wiO1xuaW1wb3J0ICogYXMgdXRpbCBmcm9tIFwiLi91dGlsLmpzXCI7XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zdHJpbmcoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY29lcmNlZFN0cmluZyhDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGNvZXJjZTogdHJ1ZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2VtYWlsKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImVtYWlsXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZ3VpZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJndWlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdXVpZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJ1dWlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdXVpZHY0KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcInV1aWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIHZlcnNpb246IFwidjRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3V1aWR2NihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJ1dWlkXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICB2ZXJzaW9uOiBcInY2XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91dWlkdjcoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwidXVpZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgdmVyc2lvbjogXCJ2N1wiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdXJsKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcInVybFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2Vtb2ppKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImVtb2ppXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbmFub2lkKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcIm5hbm9pZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8qKlxuICogQGRlcHJlY2F0ZWQgQ1VJRCB2MSBpcyBkZXByZWNhdGVkIGJ5IGl0cyBhdXRob3JzIGR1ZSB0byBpbmZvcm1hdGlvbiBsZWFrYWdlXG4gKiAodGltZXN0YW1wcyBlbWJlZGRlZCBpbiB0aGUgaWQpLiBVc2Uge0BsaW5rIF9jdWlkMn0gaW5zdGVhZC5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcGFyYWxsZWxkcml2ZS9jdWlkLlxuICovXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9jdWlkKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImN1aWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9jdWlkMihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJjdWlkMlwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3VsaWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwidWxpZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3hpZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJ4aWRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9rc3VpZChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJrc3VpZFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2lwdjQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiaXB2NFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2lwdjYoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiaXB2NlwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX21hYyhDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJtYWNcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9jaWRydjQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiY2lkcnY0XCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY2lkcnY2KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImNpZHJ2NlwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2Jhc2U2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJiYXNlNjRcIixcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9iYXNlNjR1cmwoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwiYmFzZTY0dXJsXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZTE2NChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJlMTY0XCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfand0KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImp3dFwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGFib3J0OiBmYWxzZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBUaW1lUHJlY2lzaW9uID0ge1xuICAgIEFueTogbnVsbCxcbiAgICBNaW51dGU6IC0xLFxuICAgIFNlY29uZDogMCxcbiAgICBNaWxsaXNlY29uZDogMyxcbiAgICBNaWNyb3NlY29uZDogNixcbn07XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pc29EYXRlVGltZShDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJkYXRldGltZVwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIG9mZnNldDogZmFsc2UsXG4gICAgICAgIGxvY2FsOiBmYWxzZSxcbiAgICAgICAgcHJlY2lzaW9uOiBudWxsLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaXNvRGF0ZShDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgIGZvcm1hdDogXCJkYXRlXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2lzb1RpbWUoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQ6IFwidGltZVwiLFxuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIHByZWNpc2lvbjogbnVsbCxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2lzb0R1cmF0aW9uKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImR1cmF0aW9uXCIsXG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX251bWJlcihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9jb2VyY2VkTnVtYmVyKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgY29lcmNlOiB0cnVlLFxuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaW50KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgY2hlY2s6IFwibnVtYmVyX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIGZvcm1hdDogXCJzYWZlaW50XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9mbG9hdDMyKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgY2hlY2s6IFwibnVtYmVyX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIGZvcm1hdDogXCJmbG9hdDMyXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9mbG9hdDY0KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgY2hlY2s6IFwibnVtYmVyX2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIGZvcm1hdDogXCJmbG9hdDY0XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pbnQzMihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNoZWNrOiBcIm51bWJlcl9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwiaW50MzJcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3VpbnQzMihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgIGNoZWNrOiBcIm51bWJlcl9mb3JtYXRcIixcbiAgICAgICAgYWJvcnQ6IGZhbHNlLFxuICAgICAgICBmb3JtYXQ6IFwidWludDMyXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9ib29sZWFuKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJib29sZWFuXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9jb2VyY2VkQm9vbGVhbihDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiYm9vbGVhblwiLFxuICAgICAgICBjb2VyY2U6IHRydWUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9iaWdpbnQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImJpZ2ludFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY29lcmNlZEJpZ2ludChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiYmlnaW50XCIsXG4gICAgICAgIGNvZXJjZTogdHJ1ZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2ludDY0KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJiaWdpbnRcIixcbiAgICAgICAgY2hlY2s6IFwiYmlnaW50X2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIGZvcm1hdDogXCJpbnQ2NFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdWludDY0KENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJiaWdpbnRcIixcbiAgICAgICAgY2hlY2s6IFwiYmlnaW50X2Zvcm1hdFwiLFxuICAgICAgICBhYm9ydDogZmFsc2UsXG4gICAgICAgIGZvcm1hdDogXCJ1aW50NjRcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3N5bWJvbChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic3ltYm9sXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91bmRlZmluZWQoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInVuZGVmaW5lZFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbnVsbChDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibnVsbFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfYW55KENsYXNzKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiYW55XCIsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91bmtub3duKENsYXNzKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidW5rbm93blwiLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbmV2ZXIoQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm5ldmVyXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF92b2lkKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ2b2lkXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9kYXRlKENsYXNzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9jb2VyY2VkRGF0ZShDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAgICAgICBjb2VyY2U6IHRydWUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9uYW4oQ2xhc3MsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm5hblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbHQodmFsdWUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja0xlc3NUaGFuKHtcbiAgICAgICAgY2hlY2s6IFwibGVzc190aGFuXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbHRlKHZhbHVlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tMZXNzVGhhbih7XG4gICAgICAgIGNoZWNrOiBcImxlc3NfdGhhblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgIH0pO1xufVxuZXhwb3J0IHsgXG4vKiogQGRlcHJlY2F0ZWQgVXNlIGB6Lmx0ZSgpYCBpbnN0ZWFkLiAqL1xuX2x0ZSBhcyBfbWF4LCB9O1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZ3QodmFsdWUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja0dyZWF0ZXJUaGFuKHtcbiAgICAgICAgY2hlY2s6IFwiZ3JlYXRlcl90aGFuXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIHZhbHVlLFxuICAgICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZ3RlKHZhbHVlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tHcmVhdGVyVGhhbih7XG4gICAgICAgIGNoZWNrOiBcImdyZWF0ZXJfdGhhblwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgIH0pO1xufVxuZXhwb3J0IHsgXG4vKiogQGRlcHJlY2F0ZWQgVXNlIGB6Lmd0ZSgpYCBpbnN0ZWFkLiAqL1xuX2d0ZSBhcyBfbWluLCB9O1xuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcG9zaXRpdmUocGFyYW1zKSB7XG4gICAgcmV0dXJuIF9ndCgwLCBwYXJhbXMpO1xufVxuLy8gbmVnYXRpdmVcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX25lZ2F0aXZlKHBhcmFtcykge1xuICAgIHJldHVybiBfbHQoMCwgcGFyYW1zKTtcbn1cbi8vIG5vbnBvc2l0aXZlXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9ub25wb3NpdGl2ZShwYXJhbXMpIHtcbiAgICByZXR1cm4gX2x0ZSgwLCBwYXJhbXMpO1xufVxuLy8gbm9ubmVnYXRpdmVcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX25vbm5lZ2F0aXZlKHBhcmFtcykge1xuICAgIHJldHVybiBfZ3RlKDAsIHBhcmFtcyk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9tdWx0aXBsZU9mKHZhbHVlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tNdWx0aXBsZU9mKHtcbiAgICAgICAgY2hlY2s6IFwibXVsdGlwbGVfb2ZcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgdmFsdWUsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9tYXhTaXplKG1heGltdW0sIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja01heFNpemUoe1xuICAgICAgICBjaGVjazogXCJtYXhfc2l6ZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBtYXhpbXVtLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbWluU2l6ZShtaW5pbXVtLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tNaW5TaXplKHtcbiAgICAgICAgY2hlY2s6IFwibWluX3NpemVcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgbWluaW11bSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3NpemUoc2l6ZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrU2l6ZUVxdWFscyh7XG4gICAgICAgIGNoZWNrOiBcInNpemVfZXF1YWxzXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIHNpemUsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9tYXhMZW5ndGgobWF4aW11bSwgcGFyYW1zKSB7XG4gICAgY29uc3QgY2ggPSBuZXcgY2hlY2tzLiRab2RDaGVja01heExlbmd0aCh7XG4gICAgICAgIGNoZWNrOiBcIm1heF9sZW5ndGhcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgbWF4aW11bSxcbiAgICB9KTtcbiAgICByZXR1cm4gY2g7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9taW5MZW5ndGgobWluaW11bSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTWluTGVuZ3RoKHtcbiAgICAgICAgY2hlY2s6IFwibWluX2xlbmd0aFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBtaW5pbXVtLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbGVuZ3RoKGxlbmd0aCwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTGVuZ3RoRXF1YWxzKHtcbiAgICAgICAgY2hlY2s6IFwibGVuZ3RoX2VxdWFsc1wiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBsZW5ndGgsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9yZWdleChwYXR0ZXJuLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tSZWdleCh7XG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgZm9ybWF0OiBcInJlZ2V4XCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIHBhdHRlcm4sXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9sb3dlcmNhc2UocGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrTG93ZXJDYXNlKHtcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBmb3JtYXQ6IFwibG93ZXJjYXNlXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91cHBlcmNhc2UocGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrVXBwZXJDYXNlKHtcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBmb3JtYXQ6IFwidXBwZXJjYXNlXCIsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9pbmNsdWRlcyhpbmNsdWRlcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBjaGVja3MuJFpvZENoZWNrSW5jbHVkZXMoe1xuICAgICAgICBjaGVjazogXCJzdHJpbmdfZm9ybWF0XCIsXG4gICAgICAgIGZvcm1hdDogXCJpbmNsdWRlc1wiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBpbmNsdWRlcyxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3N0YXJ0c1dpdGgocHJlZml4LCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tTdGFydHNXaXRoKHtcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICBmb3JtYXQ6IFwic3RhcnRzX3dpdGhcIixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgcHJlZml4LFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZW5kc1dpdGgoc3VmZml4LCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tFbmRzV2l0aCh7XG4gICAgICAgIGNoZWNrOiBcInN0cmluZ19mb3JtYXRcIixcbiAgICAgICAgZm9ybWF0OiBcImVuZHNfd2l0aFwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgICAgICBzdWZmaXgsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9wcm9wZXJ0eShwcm9wZXJ0eSwgc2NoZW1hLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tQcm9wZXJ0eSh7XG4gICAgICAgIGNoZWNrOiBcInByb3BlcnR5XCIsXG4gICAgICAgIHByb3BlcnR5LFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9taW1lKHR5cGVzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IGNoZWNrcy4kWm9kQ2hlY2tNaW1lVHlwZSh7XG4gICAgICAgIGNoZWNrOiBcIm1pbWVfdHlwZVwiLFxuICAgICAgICBtaW1lOiB0eXBlcyxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX292ZXJ3cml0ZSh0eCkge1xuICAgIHJldHVybiBuZXcgY2hlY2tzLiRab2RDaGVja092ZXJ3cml0ZSh7XG4gICAgICAgIGNoZWNrOiBcIm92ZXJ3cml0ZVwiLFxuICAgICAgICB0eCxcbiAgICB9KTtcbn1cbi8vIG5vcm1hbGl6ZVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbm9ybWFsaXplKGZvcm0pIHtcbiAgICByZXR1cm4gX292ZXJ3cml0ZSgoaW5wdXQpID0+IGlucHV0Lm5vcm1hbGl6ZShmb3JtKSk7XG59XG4vLyB0cmltXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF90cmltKCkge1xuICAgIHJldHVybiBfb3ZlcndyaXRlKChpbnB1dCkgPT4gaW5wdXQudHJpbSgpKTtcbn1cbi8vIHRvTG93ZXJDYXNlXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF90b0xvd2VyQ2FzZSgpIHtcbiAgICByZXR1cm4gX292ZXJ3cml0ZSgoaW5wdXQpID0+IGlucHV0LnRvTG93ZXJDYXNlKCkpO1xufVxuLy8gdG9VcHBlckNhc2Vcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3RvVXBwZXJDYXNlKCkge1xuICAgIHJldHVybiBfb3ZlcndyaXRlKChpbnB1dCkgPT4gaW5wdXQudG9VcHBlckNhc2UoKSk7XG59XG4vLyBzbHVnaWZ5XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zbHVnaWZ5KCkge1xuICAgIHJldHVybiBfb3ZlcndyaXRlKChpbnB1dCkgPT4gdXRpbC5zbHVnaWZ5KGlucHV0KSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9hcnJheShDbGFzcywgZWxlbWVudCwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiYXJyYXlcIixcbiAgICAgICAgZWxlbWVudCxcbiAgICAgICAgLy8gZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgIC8vICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIC8vIH0sXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF91bmlvbihDbGFzcywgb3B0aW9ucywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwidW5pb25cIixcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBfeG9yKENsYXNzLCBvcHRpb25zLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ1bmlvblwiLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZGlzY3JpbWluYXRlZFVuaW9uKENsYXNzLCBkaXNjcmltaW5hdG9yLCBvcHRpb25zLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ1bmlvblwiLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICBkaXNjcmltaW5hdG9yLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfaW50ZXJzZWN0aW9uKENsYXNzLCBsZWZ0LCByaWdodCkge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImludGVyc2VjdGlvblwiLFxuICAgICAgICBsZWZ0LFxuICAgICAgICByaWdodCxcbiAgICB9KTtcbn1cbi8vIGV4cG9ydCBmdW5jdGlvbiBfdHVwbGUoXG4vLyAgIENsYXNzOiB1dGlsLlNjaGVtYUNsYXNzPHNjaGVtYXMuJFpvZFR1cGxlPixcbi8vICAgaXRlbXM6IFtdLFxuLy8gICBwYXJhbXM/OiBzdHJpbmcgfCAkWm9kVHVwbGVQYXJhbXNcbi8vICk6IHNjaGVtYXMuJFpvZFR1cGxlPFtdLCBudWxsPjtcbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3R1cGxlKENsYXNzLCBpdGVtcywgX3BhcmFtc09yUmVzdCwgX3BhcmFtcykge1xuICAgIGNvbnN0IGhhc1Jlc3QgPSBfcGFyYW1zT3JSZXN0IGluc3RhbmNlb2Ygc2NoZW1hcy4kWm9kVHlwZTtcbiAgICBjb25zdCBwYXJhbXMgPSBoYXNSZXN0ID8gX3BhcmFtcyA6IF9wYXJhbXNPclJlc3Q7XG4gICAgY29uc3QgcmVzdCA9IGhhc1Jlc3QgPyBfcGFyYW1zT3JSZXN0IDogbnVsbDtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJ0dXBsZVwiLFxuICAgICAgICBpdGVtcyxcbiAgICAgICAgcmVzdCxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3JlY29yZChDbGFzcywga2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJyZWNvcmRcIixcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgdmFsdWVUeXBlLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfbWFwKENsYXNzLCBrZXlUeXBlLCB2YWx1ZVR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm1hcFwiLFxuICAgICAgICBrZXlUeXBlLFxuICAgICAgICB2YWx1ZVR5cGUsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zZXQoQ2xhc3MsIHZhbHVlVHlwZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwic2V0XCIsXG4gICAgICAgIHZhbHVlVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX2VudW0oQ2xhc3MsIHZhbHVlcywgcGFyYW1zKSB7XG4gICAgY29uc3QgZW50cmllcyA9IEFycmF5LmlzQXJyYXkodmFsdWVzKSA/IE9iamVjdC5mcm9tRW50cmllcyh2YWx1ZXMubWFwKCh2KSA9PiBbdiwgdl0pKSA6IHZhbHVlcztcbiAgICAvLyBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgLy8gICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgIC8vICAgICBlbnRyaWVzW3ZhbHVlXSA9IHZhbHVlO1xuICAgIC8vICAgfVxuICAgIC8vIH0gZWxzZSB7XG4gICAgLy8gICBPYmplY3QuYXNzaWduKGVudHJpZXMsIHZhbHVlcyk7XG4gICAgLy8gfVxuICAgIC8vIGNvbnN0IGVudHJpZXM6IHV0aWwuRW51bUxpa2UgPSB7fTtcbiAgICAvLyBmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZXMpIHtcbiAgICAvLyAgIGVudHJpZXNbdmFsXSA9IHZhbDtcbiAgICAvLyB9XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiZW51bVwiLFxuICAgICAgICBlbnRyaWVzLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbi8qKiBAZGVwcmVjYXRlZCBUaGlzIEFQSSBoYXMgYmVlbiBtZXJnZWQgaW50byBgei5lbnVtKClgLiBVc2UgYHouZW51bSgpYCBpbnN0ZWFkLlxuICpcbiAqIGBgYHRzXG4gKiBlbnVtIENvbG9ycyB7IHJlZCwgZ3JlZW4sIGJsdWUgfVxuICogei5lbnVtKENvbG9ycyk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9uYXRpdmVFbnVtKENsYXNzLCBlbnRyaWVzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJlbnVtXCIsXG4gICAgICAgIGVudHJpZXMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9saXRlcmFsKENsYXNzLCB2YWx1ZSwgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwibGl0ZXJhbFwiLFxuICAgICAgICB2YWx1ZXM6IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfZmlsZShDbGFzcywgcGFyYW1zKSB7XG4gICAgcmV0dXJuIG5ldyBDbGFzcyh7XG4gICAgICAgIHR5cGU6IFwiZmlsZVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfdHJhbnNmb3JtKENsYXNzLCBmbikge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInRyYW5zZm9ybVwiLFxuICAgICAgICB0cmFuc2Zvcm06IGZuLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfb3B0aW9uYWwoQ2xhc3MsIGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm9wdGlvbmFsXCIsXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX251bGxhYmxlKENsYXNzLCBpbm5lclR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJudWxsYWJsZVwiLFxuICAgICAgICBpbm5lclR5cGUsXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9kZWZhdWx0KENsYXNzLCBpbm5lclR5cGUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImRlZmF1bHRcIixcbiAgICAgICAgaW5uZXJUeXBlLFxuICAgICAgICBnZXQgZGVmYXVsdFZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBkZWZhdWx0VmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IGRlZmF1bHRWYWx1ZSgpIDogdXRpbC5zaGFsbG93Q2xvbmUoZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX25vbm9wdGlvbmFsKENsYXNzLCBpbm5lclR5cGUsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcIm5vbm9wdGlvbmFsXCIsXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3N1Y2Nlc3MoQ2xhc3MsIGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgaW5uZXJUeXBlLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY2F0Y2goQ2xhc3MsIGlubmVyVHlwZSwgY2F0Y2hWYWx1ZSkge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImNhdGNoXCIsXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICAgICAgY2F0Y2hWYWx1ZTogKHR5cGVvZiBjYXRjaFZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyBjYXRjaFZhbHVlIDogKCkgPT4gY2F0Y2hWYWx1ZSksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9waXBlKENsYXNzLCBpbl8sIG91dCkge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInBpcGVcIixcbiAgICAgICAgaW46IGluXyxcbiAgICAgICAgb3V0LFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfcmVhZG9ubHkoQ2xhc3MsIGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInJlYWRvbmx5XCIsXG4gICAgICAgIGlubmVyVHlwZSxcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3RlbXBsYXRlTGl0ZXJhbChDbGFzcywgcGFydHMsIHBhcmFtcykge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInRlbXBsYXRlX2xpdGVyYWxcIixcbiAgICAgICAgcGFydHMsXG4gICAgICAgIC4uLnV0aWwubm9ybWFsaXplUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9sYXp5KENsYXNzLCBnZXR0ZXIpIHtcbiAgICByZXR1cm4gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJsYXp5XCIsXG4gICAgICAgIGdldHRlcixcbiAgICB9KTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3Byb21pc2UoQ2xhc3MsIGlubmVyVHlwZSkge1xuICAgIHJldHVybiBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcInByb21pc2VcIixcbiAgICAgICAgaW5uZXJUeXBlLFxuICAgIH0pO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfY3VzdG9tKENsYXNzLCBmbiwgX3BhcmFtcykge1xuICAgIGNvbnN0IG5vcm0gPSB1dGlsLm5vcm1hbGl6ZVBhcmFtcyhfcGFyYW1zKTtcbiAgICBub3JtLmFib3J0ID8/IChub3JtLmFib3J0ID0gdHJ1ZSk7IC8vIGRlZmF1bHQgdG8gYWJvcnQ6ZmFsc2VcbiAgICBjb25zdCBzY2hlbWEgPSBuZXcgQ2xhc3Moe1xuICAgICAgICB0eXBlOiBcImN1c3RvbVwiLFxuICAgICAgICBjaGVjazogXCJjdXN0b21cIixcbiAgICAgICAgZm46IGZuLFxuICAgICAgICAuLi5ub3JtLFxuICAgIH0pO1xuICAgIHJldHVybiBzY2hlbWE7XG59XG4vLyBzYW1lIGFzIF9jdXN0b20gYnV0IGRlZmF1bHRzIHRvIGFib3J0OmZhbHNlXG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9yZWZpbmUoQ2xhc3MsIGZuLCBfcGFyYW1zKSB7XG4gICAgY29uc3Qgc2NoZW1hID0gbmV3IENsYXNzKHtcbiAgICAgICAgdHlwZTogXCJjdXN0b21cIixcbiAgICAgICAgY2hlY2s6IFwiY3VzdG9tXCIsXG4gICAgICAgIGZuOiBmbixcbiAgICAgICAgLi4udXRpbC5ub3JtYWxpemVQYXJhbXMoX3BhcmFtcyksXG4gICAgfSk7XG4gICAgcmV0dXJuIHNjaGVtYTtcbn1cbi8vIEBfX05PX1NJREVfRUZGRUNUU19fXG5leHBvcnQgZnVuY3Rpb24gX3N1cGVyUmVmaW5lKGZuLCBwYXJhbXMpIHtcbiAgICBjb25zdCBjaCA9IF9jaGVjaygocGF5bG9hZCkgPT4ge1xuICAgICAgICBwYXlsb2FkLmFkZElzc3VlID0gKGlzc3VlKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlzc3VlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh1dGlsLmlzc3VlKGlzc3VlLCBwYXlsb2FkLnZhbHVlLCBjaC5fem9kLmRlZikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZm9yIFpvZCAzIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgY29uc3QgX2lzc3VlID0gaXNzdWU7XG4gICAgICAgICAgICAgICAgaWYgKF9pc3N1ZS5mYXRhbClcbiAgICAgICAgICAgICAgICAgICAgX2lzc3VlLmNvbnRpbnVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgX2lzc3VlLmNvZGUgPz8gKF9pc3N1ZS5jb2RlID0gXCJjdXN0b21cIik7XG4gICAgICAgICAgICAgICAgX2lzc3VlLmlucHV0ID8/IChfaXNzdWUuaW5wdXQgPSBwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBfaXNzdWUuaW5zdCA/PyAoX2lzc3VlLmluc3QgPSBjaCk7XG4gICAgICAgICAgICAgICAgX2lzc3VlLmNvbnRpbnVlID8/IChfaXNzdWUuY29udGludWUgPSAhY2guX3pvZC5kZWYuYWJvcnQpOyAvLyBhYm9ydCBpcyBhbHdheXMgdW5kZWZpbmVkLCBzbyB0aGlzIGlzIGFsd2F5cyB0cnVlLi4uXG4gICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh1dGlsLmlzc3VlKF9pc3N1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZm4ocGF5bG9hZC52YWx1ZSwgcGF5bG9hZCk7XG4gICAgfSwgcGFyYW1zKTtcbiAgICByZXR1cm4gY2g7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9jaGVjayhmbiwgcGFyYW1zKSB7XG4gICAgY29uc3QgY2ggPSBuZXcgY2hlY2tzLiRab2RDaGVjayh7XG4gICAgICAgIGNoZWNrOiBcImN1c3RvbVwiLFxuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xuICAgIGNoLl96b2QuY2hlY2sgPSBmbjtcbiAgICByZXR1cm4gY2g7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIGRlc2NyaWJlKGRlc2NyaXB0aW9uKSB7XG4gICAgY29uc3QgY2ggPSBuZXcgY2hlY2tzLiRab2RDaGVjayh7IGNoZWNrOiBcImRlc2NyaWJlXCIgfSk7XG4gICAgY2guX3pvZC5vbmF0dGFjaCA9IFtcbiAgICAgICAgKGluc3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nID0gcmVnaXN0cmllcy5nbG9iYWxSZWdpc3RyeS5nZXQoaW5zdCkgPz8ge307XG4gICAgICAgICAgICByZWdpc3RyaWVzLmdsb2JhbFJlZ2lzdHJ5LmFkZChpbnN0LCB7IC4uLmV4aXN0aW5nLCBkZXNjcmlwdGlvbiB9KTtcbiAgICAgICAgfSxcbiAgICBdO1xuICAgIGNoLl96b2QuY2hlY2sgPSAoKSA9PiB7IH07IC8vIG5vLW9wIGNoZWNrXG4gICAgcmV0dXJuIGNoO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBtZXRhKG1ldGFkYXRhKSB7XG4gICAgY29uc3QgY2ggPSBuZXcgY2hlY2tzLiRab2RDaGVjayh7IGNoZWNrOiBcIm1ldGFcIiB9KTtcbiAgICBjaC5fem9kLm9uYXR0YWNoID0gW1xuICAgICAgICAoaW5zdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSByZWdpc3RyaWVzLmdsb2JhbFJlZ2lzdHJ5LmdldChpbnN0KSA/PyB7fTtcbiAgICAgICAgICAgIHJlZ2lzdHJpZXMuZ2xvYmFsUmVnaXN0cnkuYWRkKGluc3QsIHsgLi4uZXhpc3RpbmcsIC4uLm1ldGFkYXRhIH0pO1xuICAgICAgICB9LFxuICAgIF07XG4gICAgY2guX3pvZC5jaGVjayA9ICgpID0+IHsgfTsgLy8gbm8tb3AgY2hlY2tcbiAgICByZXR1cm4gY2g7XG59XG4vLyBAX19OT19TSURFX0VGRkVDVFNfX1xuZXhwb3J0IGZ1bmN0aW9uIF9zdHJpbmdib29sKENsYXNzZXMsIF9wYXJhbXMpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB1dGlsLm5vcm1hbGl6ZVBhcmFtcyhfcGFyYW1zKTtcbiAgICBsZXQgdHJ1dGh5QXJyYXkgPSBwYXJhbXMudHJ1dGh5ID8/IFtcInRydWVcIiwgXCIxXCIsIFwieWVzXCIsIFwib25cIiwgXCJ5XCIsIFwiZW5hYmxlZFwiXTtcbiAgICBsZXQgZmFsc3lBcnJheSA9IHBhcmFtcy5mYWxzeSA/PyBbXCJmYWxzZVwiLCBcIjBcIiwgXCJub1wiLCBcIm9mZlwiLCBcIm5cIiwgXCJkaXNhYmxlZFwiXTtcbiAgICBpZiAocGFyYW1zLmNhc2UgIT09IFwic2Vuc2l0aXZlXCIpIHtcbiAgICAgICAgdHJ1dGh5QXJyYXkgPSB0cnV0aHlBcnJheS5tYXAoKHYpID0+ICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiA/IHYudG9Mb3dlckNhc2UoKSA6IHYpKTtcbiAgICAgICAgZmFsc3lBcnJheSA9IGZhbHN5QXJyYXkubWFwKCh2KSA9PiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgPyB2LnRvTG93ZXJDYXNlKCkgOiB2KSk7XG4gICAgfVxuICAgIGNvbnN0IHRydXRoeVNldCA9IG5ldyBTZXQodHJ1dGh5QXJyYXkpO1xuICAgIGNvbnN0IGZhbHN5U2V0ID0gbmV3IFNldChmYWxzeUFycmF5KTtcbiAgICBjb25zdCBfQ29kZWMgPSBDbGFzc2VzLkNvZGVjID8/IHNjaGVtYXMuJFpvZENvZGVjO1xuICAgIGNvbnN0IF9Cb29sZWFuID0gQ2xhc3Nlcy5Cb29sZWFuID8/IHNjaGVtYXMuJFpvZEJvb2xlYW47XG4gICAgY29uc3QgX1N0cmluZyA9IENsYXNzZXMuU3RyaW5nID8/IHNjaGVtYXMuJFpvZFN0cmluZztcbiAgICBjb25zdCBzdHJpbmdTY2hlbWEgPSBuZXcgX1N0cmluZyh7IHR5cGU6IFwic3RyaW5nXCIsIGVycm9yOiBwYXJhbXMuZXJyb3IgfSk7XG4gICAgY29uc3QgYm9vbGVhblNjaGVtYSA9IG5ldyBfQm9vbGVhbih7IHR5cGU6IFwiYm9vbGVhblwiLCBlcnJvcjogcGFyYW1zLmVycm9yIH0pO1xuICAgIGNvbnN0IGNvZGVjID0gbmV3IF9Db2RlYyh7XG4gICAgICAgIHR5cGU6IFwicGlwZVwiLFxuICAgICAgICBpbjogc3RyaW5nU2NoZW1hLFxuICAgICAgICBvdXQ6IGJvb2xlYW5TY2hlbWEsXG4gICAgICAgIHRyYW5zZm9ybTogKChpbnB1dCwgcGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgbGV0IGRhdGEgPSBpbnB1dDtcbiAgICAgICAgICAgIGlmIChwYXJhbXMuY2FzZSAhPT0gXCJzZW5zaXRpdmVcIilcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgaWYgKHRydXRoeVNldC5oYXMoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGZhbHN5U2V0LmhhcyhkYXRhKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdmFsdWVcIixcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwic3RyaW5nYm9vbFwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZXM6IFsuLi50cnV0aHlTZXQsIC4uLmZhbHN5U2V0XSxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGluc3Q6IGNvZGVjLFxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSxcbiAgICAgICAgcmV2ZXJzZVRyYW5zZm9ybTogKChpbnB1dCwgX3BheWxvYWQpID0+IHtcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnV0aHlBcnJheVswXSB8fCBcInRydWVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzeUFycmF5WzBdIHx8IFwiZmFsc2VcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIGVycm9yOiBwYXJhbXMuZXJyb3IsXG4gICAgfSk7XG4gICAgcmV0dXJuIGNvZGVjO1xufVxuLy8gQF9fTk9fU0lERV9FRkZFQ1RTX19cbmV4cG9ydCBmdW5jdGlvbiBfc3RyaW5nRm9ybWF0KENsYXNzLCBmb3JtYXQsIGZuT3JSZWdleCwgX3BhcmFtcyA9IHt9KSB7XG4gICAgY29uc3QgcGFyYW1zID0gdXRpbC5ub3JtYWxpemVQYXJhbXMoX3BhcmFtcyk7XG4gICAgY29uc3QgZGVmID0ge1xuICAgICAgICAuLi51dGlsLm5vcm1hbGl6ZVBhcmFtcyhfcGFyYW1zKSxcbiAgICAgICAgY2hlY2s6IFwic3RyaW5nX2Zvcm1hdFwiLFxuICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICBmb3JtYXQsXG4gICAgICAgIGZuOiB0eXBlb2YgZm5PclJlZ2V4ID09PSBcImZ1bmN0aW9uXCIgPyBmbk9yUmVnZXggOiAodmFsKSA9PiBmbk9yUmVnZXgudGVzdCh2YWwpLFxuICAgICAgICAuLi5wYXJhbXMsXG4gICAgfTtcbiAgICBpZiAoZm5PclJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICAgIGRlZi5wYXR0ZXJuID0gZm5PclJlZ2V4O1xuICAgIH1cbiAgICBjb25zdCBpbnN0ID0gbmV3IENsYXNzKGRlZik7XG4gICAgcmV0dXJuIGluc3Q7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/core/api.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/core/checks.js":
|
||
/*!********************************************!*\
|
||
!*** ./node_modules/zod/v4/core/checks.js ***!
|
||
\********************************************/
|
||
/***/ ((__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 */ $ZodCheck: () => (/* binding */ $ZodCheck),\n/* harmony export */ $ZodCheckBigIntFormat: () => (/* binding */ $ZodCheckBigIntFormat),\n/* harmony export */ $ZodCheckEndsWith: () => (/* binding */ $ZodCheckEndsWith),\n/* harmony export */ $ZodCheckGreaterThan: () => (/* binding */ $ZodCheckGreaterThan),\n/* harmony export */ $ZodCheckIncludes: () => (/* binding */ $ZodCheckIncludes),\n/* harmony export */ $ZodCheckLengthEquals: () => (/* binding */ $ZodCheckLengthEquals),\n/* harmony export */ $ZodCheckLessThan: () => (/* binding */ $ZodCheckLessThan),\n/* harmony export */ $ZodCheckLowerCase: () => (/* binding */ $ZodCheckLowerCase),\n/* harmony export */ $ZodCheckMaxLength: () => (/* binding */ $ZodCheckMaxLength),\n/* harmony export */ $ZodCheckMaxSize: () => (/* binding */ $ZodCheckMaxSize),\n/* harmony export */ $ZodCheckMimeType: () => (/* binding */ $ZodCheckMimeType),\n/* harmony export */ $ZodCheckMinLength: () => (/* binding */ $ZodCheckMinLength),\n/* harmony export */ $ZodCheckMinSize: () => (/* binding */ $ZodCheckMinSize),\n/* harmony export */ $ZodCheckMultipleOf: () => (/* binding */ $ZodCheckMultipleOf),\n/* harmony export */ $ZodCheckNumberFormat: () => (/* binding */ $ZodCheckNumberFormat),\n/* harmony export */ $ZodCheckOverwrite: () => (/* binding */ $ZodCheckOverwrite),\n/* harmony export */ $ZodCheckProperty: () => (/* binding */ $ZodCheckProperty),\n/* harmony export */ $ZodCheckRegex: () => (/* binding */ $ZodCheckRegex),\n/* harmony export */ $ZodCheckSizeEquals: () => (/* binding */ $ZodCheckSizeEquals),\n/* harmony export */ $ZodCheckStartsWith: () => (/* binding */ $ZodCheckStartsWith),\n/* harmony export */ $ZodCheckStringFormat: () => (/* binding */ $ZodCheckStringFormat),\n/* harmony export */ $ZodCheckUpperCase: () => (/* binding */ $ZodCheckUpperCase)\n/* harmony export */ });\n/* harmony import */ var _core_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/core.js\");\n/* harmony import */ var _regexes_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./regexes.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/regexes.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/util.js\");\n// import { $ZodType } from \"./schemas.js\";\n\n\n\nconst $ZodCheck = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheck\", (inst, def) => {\n var _a;\n inst._zod ?? (inst._zod = {});\n inst._zod.def = def;\n (_a = inst._zod).onattach ?? (_a.onattach = []);\n});\nconst numericOriginMap = {\n number: \"number\",\n bigint: \"bigint\",\n object: \"date\",\n};\nconst $ZodCheckLessThan = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckLessThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.maximum : bag.exclusiveMaximum) ?? Number.POSITIVE_INFINITY;\n if (def.value < curr) {\n if (def.inclusive)\n bag.maximum = def.value;\n else\n bag.exclusiveMaximum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value <= def.value : payload.value < def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodCheckGreaterThan = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckGreaterThan\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const origin = numericOriginMap[typeof def.value];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n const curr = (def.inclusive ? bag.minimum : bag.exclusiveMinimum) ?? Number.NEGATIVE_INFINITY;\n if (def.value > curr) {\n if (def.inclusive)\n bag.minimum = def.value;\n else\n bag.exclusiveMinimum = def.value;\n }\n });\n inst._zod.check = (payload) => {\n if (def.inclusive ? payload.value >= def.value : payload.value > def.value) {\n return;\n }\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: typeof def.value === \"object\" ? def.value.getTime() : def.value,\n input: payload.value,\n inclusive: def.inclusive,\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodCheckMultipleOf = \n/*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckMultipleOf\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n var _a;\n (_a = inst._zod.bag).multipleOf ?? (_a.multipleOf = def.value);\n });\n inst._zod.check = (payload) => {\n if (typeof payload.value !== typeof def.value)\n throw new Error(\"Cannot mix number and bigint in multiple_of check.\");\n const isMultiple = typeof payload.value === \"bigint\"\n ? payload.value % def.value === BigInt(0)\n : _util_js__WEBPACK_IMPORTED_MODULE_1__.floatSafeRemainder(payload.value, def.value) === 0;\n if (isMultiple)\n return;\n payload.issues.push({\n origin: typeof payload.value,\n code: \"not_multiple_of\",\n divisor: def.value,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodCheckNumberFormat = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckNumberFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n def.format = def.format || \"float64\";\n const isInt = def.format?.includes(\"int\");\n const origin = isInt ? \"int\" : \"number\";\n const [minimum, maximum] = _util_js__WEBPACK_IMPORTED_MODULE_1__.NUMBER_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n if (isInt)\n bag.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_2__.integer;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (isInt) {\n if (!Number.isInteger(input)) {\n // invalid_format issue\n // payload.issues.push({\n // expected: def.format,\n // format: def.format,\n // code: \"invalid_format\",\n // input,\n // inst,\n // });\n // invalid_type issue\n payload.issues.push({\n expected: origin,\n format: def.format,\n code: \"invalid_type\",\n continue: false,\n input,\n inst,\n });\n return;\n // not_multiple_of issue\n // payload.issues.push({\n // code: \"not_multiple_of\",\n // origin: \"number\",\n // input,\n // inst,\n // divisor: 1,\n // });\n }\n if (!Number.isSafeInteger(input)) {\n if (input > 0) {\n // too_big\n payload.issues.push({\n input,\n code: \"too_big\",\n maximum: Number.MAX_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n else {\n // too_small\n payload.issues.push({\n input,\n code: \"too_small\",\n minimum: Number.MIN_SAFE_INTEGER,\n note: \"Integers must be within the safe integer range.\",\n inst,\n origin,\n inclusive: true,\n continue: !def.abort,\n });\n }\n return;\n }\n }\n if (input < minimum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_small\",\n minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"number\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nconst $ZodCheckBigIntFormat = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckBigIntFormat\", (inst, def) => {\n $ZodCheck.init(inst, def); // no format checks\n const [minimum, maximum] = _util_js__WEBPACK_IMPORTED_MODULE_1__.BIGINT_FORMAT_RANGES[def.format];\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n bag.minimum = minimum;\n bag.maximum = maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n if (input < minimum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_small\",\n minimum: minimum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n if (input > maximum) {\n payload.issues.push({\n origin: \"bigint\",\n input,\n code: \"too_big\",\n maximum,\n inclusive: true,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nconst $ZodCheckMaxSize = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckMaxSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !_util_js__WEBPACK_IMPORTED_MODULE_1__.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size <= def.maximum)\n return;\n payload.issues.push({\n origin: _util_js__WEBPACK_IMPORTED_MODULE_1__.getSizableOrigin(input),\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodCheckMinSize = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckMinSize\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !_util_js__WEBPACK_IMPORTED_MODULE_1__.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size >= def.minimum)\n return;\n payload.issues.push({\n origin: _util_js__WEBPACK_IMPORTED_MODULE_1__.getSizableOrigin(input),\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodCheckSizeEquals = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckSizeEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !_util_js__WEBPACK_IMPORTED_MODULE_1__.nullish(val) && val.size !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.size;\n bag.maximum = def.size;\n bag.size = def.size;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const size = input.size;\n if (size === def.size)\n return;\n const tooBig = size > def.size;\n payload.issues.push({\n origin: _util_js__WEBPACK_IMPORTED_MODULE_1__.getSizableOrigin(input),\n ...(tooBig ? { code: \"too_big\", maximum: def.size } : { code: \"too_small\", minimum: def.size }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodCheckMaxLength = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckMaxLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !_util_js__WEBPACK_IMPORTED_MODULE_1__.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.maximum ?? Number.POSITIVE_INFINITY);\n if (def.maximum < curr)\n inst._zod.bag.maximum = def.maximum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length <= def.maximum)\n return;\n const origin = _util_js__WEBPACK_IMPORTED_MODULE_1__.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_big\",\n maximum: def.maximum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodCheckMinLength = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckMinLength\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !_util_js__WEBPACK_IMPORTED_MODULE_1__.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const curr = (inst._zod.bag.minimum ?? Number.NEGATIVE_INFINITY);\n if (def.minimum > curr)\n inst._zod.bag.minimum = def.minimum;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length >= def.minimum)\n return;\n const origin = _util_js__WEBPACK_IMPORTED_MODULE_1__.getLengthableOrigin(input);\n payload.issues.push({\n origin,\n code: \"too_small\",\n minimum: def.minimum,\n inclusive: true,\n input,\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodCheckLengthEquals = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckLengthEquals\", (inst, def) => {\n var _a;\n $ZodCheck.init(inst, def);\n (_a = inst._zod.def).when ?? (_a.when = (payload) => {\n const val = payload.value;\n return !_util_js__WEBPACK_IMPORTED_MODULE_1__.nullish(val) && val.length !== undefined;\n });\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.minimum = def.length;\n bag.maximum = def.length;\n bag.length = def.length;\n });\n inst._zod.check = (payload) => {\n const input = payload.value;\n const length = input.length;\n if (length === def.length)\n return;\n const origin = _util_js__WEBPACK_IMPORTED_MODULE_1__.getLengthableOrigin(input);\n const tooBig = length > def.length;\n payload.issues.push({\n origin,\n ...(tooBig ? { code: \"too_big\", maximum: def.length } : { code: \"too_small\", minimum: def.length }),\n inclusive: true,\n exact: true,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodCheckStringFormat = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckStringFormat\", (inst, def) => {\n var _a, _b;\n $ZodCheck.init(inst, def);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.format = def.format;\n if (def.pattern) {\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(def.pattern);\n }\n });\n if (def.pattern)\n (_a = inst._zod).check ?? (_a.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n ...(def.pattern ? { pattern: def.pattern.toString() } : {}),\n inst,\n continue: !def.abort,\n });\n });\n else\n (_b = inst._zod).check ?? (_b.check = () => { });\n});\nconst $ZodCheckRegex = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckRegex\", (inst, def) => {\n $ZodCheckStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n def.pattern.lastIndex = 0;\n if (def.pattern.test(payload.value))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"regex\",\n input: payload.value,\n pattern: def.pattern.toString(),\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodCheckLowerCase = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckLowerCase\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_2__.lowercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nconst $ZodCheckUpperCase = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckUpperCase\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_2__.uppercase);\n $ZodCheckStringFormat.init(inst, def);\n});\nconst $ZodCheckIncludes = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckIncludes\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const escapedRegex = _util_js__WEBPACK_IMPORTED_MODULE_1__.escapeRegex(def.includes);\n const pattern = new RegExp(typeof def.position === \"number\" ? `^.{${def.position}}${escapedRegex}` : escapedRegex);\n def.pattern = pattern;\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.includes(def.includes, def.position))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"includes\",\n includes: def.includes,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodCheckStartsWith = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckStartsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`^${_util_js__WEBPACK_IMPORTED_MODULE_1__.escapeRegex(def.prefix)}.*`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.startsWith(def.prefix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"starts_with\",\n prefix: def.prefix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodCheckEndsWith = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckEndsWith\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const pattern = new RegExp(`.*${_util_js__WEBPACK_IMPORTED_MODULE_1__.escapeRegex(def.suffix)}$`);\n def.pattern ?? (def.pattern = pattern);\n inst._zod.onattach.push((inst) => {\n const bag = inst._zod.bag;\n bag.patterns ?? (bag.patterns = new Set());\n bag.patterns.add(pattern);\n });\n inst._zod.check = (payload) => {\n if (payload.value.endsWith(def.suffix))\n return;\n payload.issues.push({\n origin: \"string\",\n code: \"invalid_format\",\n format: \"ends_with\",\n suffix: def.suffix,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n///////////////////////////////////\n///// $ZodCheckProperty /////\n///////////////////////////////////\nfunction handleCheckPropertyResult(result, payload, property) {\n if (result.issues.length) {\n payload.issues.push(..._util_js__WEBPACK_IMPORTED_MODULE_1__.prefixIssues(property, result.issues));\n }\n}\nconst $ZodCheckProperty = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckProperty\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n const result = def.schema._zod.run({\n value: payload.value[def.property],\n issues: [],\n }, {});\n if (result instanceof Promise) {\n return result.then((result) => handleCheckPropertyResult(result, payload, def.property));\n }\n handleCheckPropertyResult(result, payload, def.property);\n return;\n };\n});\nconst $ZodCheckMimeType = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckMimeType\", (inst, def) => {\n $ZodCheck.init(inst, def);\n const mimeSet = new Set(def.mime);\n inst._zod.onattach.push((inst) => {\n inst._zod.bag.mime = def.mime;\n });\n inst._zod.check = (payload) => {\n if (mimeSet.has(payload.value.type))\n return;\n payload.issues.push({\n code: \"invalid_value\",\n values: def.mime,\n input: payload.value.type,\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodCheckOverwrite = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCheckOverwrite\", (inst, def) => {\n $ZodCheck.init(inst, def);\n inst._zod.check = (payload) => {\n payload.value = def.tx(payload.value);\n };\n});\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9jaGVja3MuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLFlBQVksV0FBVztBQUNXO0FBQ007QUFDTjtBQUMzQixnQ0FBZ0Msa0RBQWlCO0FBQ3hEO0FBQ0EsZ0NBQWdDO0FBQ2hDO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLHdDQUF3QyxrREFBaUI7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxDQUFDO0FBQ00sMkNBQTJDLGtEQUFpQjtBQUNuRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLENBQUM7QUFDTTtBQUNQLGNBQWMsa0RBQWlCO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxjQUFjLHdEQUF1QjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQSxDQUFDO0FBQ00sNENBQTRDLGtEQUFpQjtBQUNwRSwrQkFBK0I7QUFDL0I7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLDBEQUF5QjtBQUN4RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwwQkFBMEIsZ0RBQWU7QUFDekMsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNB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Q0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLENBQUM7QUFDTSx3Q0FBd0Msa0RBQWlCO0FBQ2hFO0FBQ0Esb0NBQW9DLGlEQUFnQixhQUFhO0FBQ2pFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsK0JBQStCLGtEQUFpQjtBQUNoRDtBQUNBO0FBQ08sd0NBQXdDLGtEQUFpQjtBQUNoRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUyxJQUFJO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNNLHdDQUF3QyxrREFBaUI7QUFDaEU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0EsQ0FBQztBQUNNLHlDQUF5QyxrREFBaUI7QUFDakU7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL2NoZWNrcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQgeyAkWm9kVHlwZSB9IGZyb20gXCIuL3NjaGVtYXMuanNcIjtcbmltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIi4vY29yZS5qc1wiO1xuaW1wb3J0ICogYXMgcmVnZXhlcyBmcm9tIFwiLi9yZWdleGVzLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuL3V0aWwuanNcIjtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2sgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgaW5zdC5fem9kID8/IChpbnN0Ll96b2QgPSB7fSk7XG4gICAgaW5zdC5fem9kLmRlZiA9IGRlZjtcbiAgICAoX2EgPSBpbnN0Ll96b2QpLm9uYXR0YWNoID8/IChfYS5vbmF0dGFjaCA9IFtdKTtcbn0pO1xuY29uc3QgbnVtZXJpY09yaWdpbk1hcCA9IHtcbiAgICBudW1iZXI6IFwibnVtYmVyXCIsXG4gICAgYmlnaW50OiBcImJpZ2ludFwiLFxuICAgIG9iamVjdDogXCJkYXRlXCIsXG59O1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja0xlc3NUaGFuID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja0xlc3NUaGFuXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvbnN0IG9yaWdpbiA9IG51bWVyaWNPcmlnaW5NYXBbdHlwZW9mIGRlZi52YWx1ZV07XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgY29uc3QgYmFnID0gaW5zdC5fem9kLmJhZztcbiAgICAgICAgY29uc3QgY3VyciA9IChkZWYuaW5jbHVzaXZlID8gYmFnLm1heGltdW0gOiBiYWcuZXhjbHVzaXZlTWF4aW11bSkgPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICBpZiAoZGVmLnZhbHVlIDwgY3Vycikge1xuICAgICAgICAgICAgaWYgKGRlZi5pbmNsdXNpdmUpXG4gICAgICAgICAgICAgICAgYmFnLm1heGltdW0gPSBkZWYudmFsdWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgYmFnLmV4Y2x1c2l2ZU1heGltdW0gPSBkZWYudmFsdWU7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAoZGVmLmluY2x1c2l2ZSA/IHBheWxvYWQudmFsdWUgPD0gZGVmLnZhbHVlIDogcGF5bG9hZC52YWx1ZSA8IGRlZi52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgICAgY29kZTogXCJ0b29fYmlnXCIsXG4gICAgICAgICAgICBtYXhpbXVtOiB0eXBlb2YgZGVmLnZhbHVlID09PSBcIm9iamVjdFwiID8gZGVmLnZhbHVlLmdldFRpbWUoKSA6IGRlZi52YWx1ZSxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBkZWYuaW5jbHVzaXZlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrR3JlYXRlclRoYW4gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrR3JlYXRlclRoYW5cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3Qgb3JpZ2luID0gbnVtZXJpY09yaWdpbk1hcFt0eXBlb2YgZGVmLnZhbHVlXTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBjb25zdCBjdXJyID0gKGRlZi5pbmNsdXNpdmUgPyBiYWcubWluaW11bSA6IGJhZy5leGNsdXNpdmVNaW5pbXVtKSA/PyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIGlmIChkZWYudmFsdWUgPiBjdXJyKSB7XG4gICAgICAgICAgICBpZiAoZGVmLmluY2x1c2l2ZSlcbiAgICAgICAgICAgICAgICBiYWcubWluaW11bSA9IGRlZi52YWx1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBiYWcuZXhjbHVzaXZlTWluaW11bSA9IGRlZi52YWx1ZTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChkZWYuaW5jbHVzaXZlID8gcGF5bG9hZC52YWx1ZSA+PSBkZWYudmFsdWUgOiBwYXlsb2FkLnZhbHVlID4gZGVmLnZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICBjb2RlOiBcInRvb19zbWFsbFwiLFxuICAgICAgICAgICAgbWluaW11bTogdHlwZW9mIGRlZi52YWx1ZSA9PT0gXCJvYmplY3RcIiA/IGRlZi52YWx1ZS5nZXRUaW1lKCkgOiBkZWYudmFsdWUsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZGVmLmluY2x1c2l2ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja011bHRpcGxlT2YgPSBcbi8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tNdWx0aXBsZU9mXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gaW5zdC5fem9kLmJhZykubXVsdGlwbGVPZiA/PyAoX2EubXVsdGlwbGVPZiA9IGRlZi52YWx1ZSk7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkLnZhbHVlICE9PSB0eXBlb2YgZGVmLnZhbHVlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IG1peCBudW1iZXIgYW5kIGJpZ2ludCBpbiBtdWx0aXBsZV9vZiBjaGVjay5cIik7XG4gICAgICAgIGNvbnN0IGlzTXVsdGlwbGUgPSB0eXBlb2YgcGF5bG9hZC52YWx1ZSA9PT0gXCJiaWdpbnRcIlxuICAgICAgICAgICAgPyBwYXlsb2FkLnZhbHVlICUgZGVmLnZhbHVlID09PSBCaWdJbnQoMClcbiAgICAgICAgICAgIDogdXRpbC5mbG9hdFNhZmVSZW1haW5kZXIocGF5bG9hZC52YWx1ZSwgZGVmLnZhbHVlKSA9PT0gMDtcbiAgICAgICAgaWYgKGlzTXVsdGlwbGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiB0eXBlb2YgcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGNvZGU6IFwibm90X211bHRpcGxlX29mXCIsXG4gICAgICAgICAgICBkaXZpc29yOiBkZWYudmFsdWUsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja051bWJlckZvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tOdW1iZXJGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7IC8vIG5vIGZvcm1hdCBjaGVja3NcbiAgICBkZWYuZm9ybWF0ID0gZGVmLmZvcm1hdCB8fCBcImZsb2F0NjRcIjtcbiAgICBjb25zdCBpc0ludCA9IGRlZi5mb3JtYXQ/LmluY2x1ZGVzKFwiaW50XCIpO1xuICAgIGNvbnN0IG9yaWdpbiA9IGlzSW50ID8gXCJpbnRcIiA6IFwibnVtYmVyXCI7XG4gICAgY29uc3QgW21pbmltdW0sIG1heGltdW1dID0gdXRpbC5OVU1CRVJfRk9STUFUX1JBTkdFU1tkZWYuZm9ybWF0XTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcuZm9ybWF0ID0gZGVmLmZvcm1hdDtcbiAgICAgICAgYmFnLm1pbmltdW0gPSBtaW5pbXVtO1xuICAgICAgICBiYWcubWF4aW11bSA9IG1heGltdW07XG4gICAgICAgIGlmIChpc0ludClcbiAgICAgICAgICAgIGJhZy5wYXR0ZXJuID0gcmVnZXhlcy5pbnRlZ2VyO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKGlzSW50KSB7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgLy8gaW52YWxpZF9mb3JtYXQgaXNzdWVcbiAgICAgICAgICAgICAgICAvLyBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAvLyAgIGV4cGVjdGVkOiBkZWYuZm9ybWF0LFxuICAgICAgICAgICAgICAgIC8vICAgZm9ybWF0OiBkZWYuZm9ybWF0LFxuICAgICAgICAgICAgICAgIC8vICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgICAgIC8vICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgLy8gICBpbnN0LFxuICAgICAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgICAgICAgIC8vIGludmFsaWRfdHlwZSBpc3N1ZVxuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDogb3JpZ2luLFxuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IGRlZi5mb3JtYXQsXG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIC8vIG5vdF9tdWx0aXBsZV9vZiBpc3N1ZVxuICAgICAgICAgICAgICAgIC8vIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIC8vICAgY29kZTogXCJub3RfbXVsdGlwbGVfb2ZcIixcbiAgICAgICAgICAgICAgICAvLyAgIG9yaWdpbjogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAvLyAgIGlucHV0LFxuICAgICAgICAgICAgICAgIC8vICAgaW5zdCxcbiAgICAgICAgICAgICAgICAvLyAgIGRpdmlzb3I6IDEsXG4gICAgICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGlucHV0KSkge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdG9vX2JpZ1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJ0b29fYmlnXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyB0b29fc21hbGxcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwidG9vX3NtYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBOdW1iZXIuTUlOX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSW50ZWdlcnMgbXVzdCBiZSB3aXRoaW4gdGhlIHNhZmUgaW50ZWdlciByYW5nZS5cIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgPCBtaW5pbXVtKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBvcmlnaW46IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgICAgICBtaW5pbXVtLFxuICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0ID4gbWF4aW11bSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgb3JpZ2luOiBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGNvZGU6IFwidG9vX2JpZ1wiLFxuICAgICAgICAgICAgICAgIG1heGltdW0sXG4gICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tCaWdJbnRGb3JtYXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrQmlnSW50Rm9ybWF0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpOyAvLyBubyBmb3JtYXQgY2hlY2tzXG4gICAgY29uc3QgW21pbmltdW0sIG1heGltdW1dID0gdXRpbC5CSUdJTlRfRk9STUFUX1JBTkdFU1tkZWYuZm9ybWF0XTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcuZm9ybWF0ID0gZGVmLmZvcm1hdDtcbiAgICAgICAgYmFnLm1pbmltdW0gPSBtaW5pbXVtO1xuICAgICAgICBiYWcubWF4aW11bSA9IG1heGltdW07XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoaW5wdXQgPCBtaW5pbXVtKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBvcmlnaW46IFwiYmlnaW50XCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgICAgICBtaW5pbXVtOiBtaW5pbXVtLFxuICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0ID4gbWF4aW11bSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgb3JpZ2luOiBcImJpZ2ludFwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGNvZGU6IFwidG9vX2JpZ1wiLFxuICAgICAgICAgICAgICAgIG1heGltdW0sXG4gICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tNYXhTaXplID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja01heFNpemVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIHZhciBfYTtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIChfYSA9IGluc3QuX3pvZC5kZWYpLndoZW4gPz8gKF9hLndoZW4gPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICByZXR1cm4gIXV0aWwubnVsbGlzaCh2YWwpICYmIHZhbC5zaXplICE9PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgY29uc3QgY3VyciA9IChpbnN0Ll96b2QuYmFnLm1heGltdW0gPz8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTtcbiAgICAgICAgaWYgKGRlZi5tYXhpbXVtIDwgY3VycilcbiAgICAgICAgICAgIGluc3QuX3pvZC5iYWcubWF4aW11bSA9IGRlZi5tYXhpbXVtO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3Qgc2l6ZSA9IGlucHV0LnNpemU7XG4gICAgICAgIGlmIChzaXplIDw9IGRlZi5tYXhpbXVtKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIG9yaWdpbjogdXRpbC5nZXRTaXphYmxlT3JpZ2luKGlucHV0KSxcbiAgICAgICAgICAgIGNvZGU6IFwidG9vX2JpZ1wiLFxuICAgICAgICAgICAgbWF4aW11bTogZGVmLm1heGltdW0sXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja01pblNpemUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrTWluU2l6ZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgKF9hID0gaW5zdC5fem9kLmRlZikud2hlbiA/PyAoX2Eud2hlbiA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIHJldHVybiAhdXRpbC5udWxsaXNoKHZhbCkgJiYgdmFsLnNpemUgIT09IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyID0gKGluc3QuX3pvZC5iYWcubWluaW11bSA/PyBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpO1xuICAgICAgICBpZiAoZGVmLm1pbmltdW0gPiBjdXJyKVxuICAgICAgICAgICAgaW5zdC5fem9kLmJhZy5taW5pbXVtID0gZGVmLm1pbmltdW07XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBjb25zdCBzaXplID0gaW5wdXQuc2l6ZTtcbiAgICAgICAgaWYgKHNpemUgPj0gZGVmLm1pbmltdW0pXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiB1dGlsLmdldFNpemFibGVPcmlnaW4oaW5wdXQpLFxuICAgICAgICAgICAgY29kZTogXCJ0b29fc21hbGxcIixcbiAgICAgICAgICAgIG1pbmltdW06IGRlZi5taW5pbXVtLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tTaXplRXF1YWxzID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1NpemVFcXVhbHNcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIHZhciBfYTtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIChfYSA9IGluc3QuX3pvZC5kZWYpLndoZW4gPz8gKF9hLndoZW4gPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICByZXR1cm4gIXV0aWwubnVsbGlzaCh2YWwpICYmIHZhbC5zaXplICE9PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgY29uc3QgYmFnID0gaW5zdC5fem9kLmJhZztcbiAgICAgICAgYmFnLm1pbmltdW0gPSBkZWYuc2l6ZTtcbiAgICAgICAgYmFnLm1heGltdW0gPSBkZWYuc2l6ZTtcbiAgICAgICAgYmFnLnNpemUgPSBkZWYuc2l6ZTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGNvbnN0IHNpemUgPSBpbnB1dC5zaXplO1xuICAgICAgICBpZiAoc2l6ZSA9PT0gZGVmLnNpemUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHRvb0JpZyA9IHNpemUgPiBkZWYuc2l6ZTtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW46IHV0aWwuZ2V0U2l6YWJsZU9yaWdpbihpbnB1dCksXG4gICAgICAgICAgICAuLi4odG9vQmlnID8geyBjb2RlOiBcInRvb19iaWdcIiwgbWF4aW11bTogZGVmLnNpemUgfSA6IHsgY29kZTogXCJ0b29fc21hbGxcIiwgbWluaW11bTogZGVmLnNpemUgfSksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTWF4TGVuZ3RoID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja01heExlbmd0aFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgKF9hID0gaW5zdC5fem9kLmRlZikud2hlbiA/PyAoX2Eud2hlbiA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIHJldHVybiAhdXRpbC5udWxsaXNoKHZhbCkgJiYgdmFsLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnIgPSAoaW5zdC5fem9kLmJhZy5tYXhpbXVtID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgICAgIGlmIChkZWYubWF4aW11bSA8IGN1cnIpXG4gICAgICAgICAgICBpbnN0Ll96b2QuYmFnLm1heGltdW0gPSBkZWYubWF4aW11bTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA8PSBkZWYubWF4aW11bSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gdXRpbC5nZXRMZW5ndGhhYmxlT3JpZ2luKGlucHV0KTtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICBjb2RlOiBcInRvb19iaWdcIixcbiAgICAgICAgICAgIG1heGltdW06IGRlZi5tYXhpbXVtLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tNaW5MZW5ndGggPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrTWluTGVuZ3RoXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICAoX2EgPSBpbnN0Ll96b2QuZGVmKS53aGVuID8/IChfYS53aGVuID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgdmFsID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgcmV0dXJuICF1dGlsLm51bGxpc2godmFsKSAmJiB2YWwubGVuZ3RoICE9PSB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLm9uYXR0YWNoLnB1c2goKGluc3QpID0+IHtcbiAgICAgICAgY29uc3QgY3VyciA9IChpbnN0Ll96b2QuYmFnLm1pbmltdW0gPz8gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKTtcbiAgICAgICAgaWYgKGRlZi5taW5pbXVtID4gY3VycilcbiAgICAgICAgICAgIGluc3QuX3pvZC5iYWcubWluaW11bSA9IGRlZi5taW5pbXVtO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoID49IGRlZi5taW5pbXVtKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBvcmlnaW4gPSB1dGlsLmdldExlbmd0aGFibGVPcmlnaW4oaW5wdXQpO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIGNvZGU6IFwidG9vX3NtYWxsXCIsXG4gICAgICAgICAgICBtaW5pbXVtOiBkZWYubWluaW11bSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTGVuZ3RoRXF1YWxzID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja0xlbmd0aEVxdWFsc1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgKF9hID0gaW5zdC5fem9kLmRlZikud2hlbiA/PyAoX2Eud2hlbiA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIHJldHVybiAhdXRpbC5udWxsaXNoKHZhbCkgJiYgdmFsLmxlbmd0aCAhPT0gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgICAgIGJhZy5taW5pbXVtID0gZGVmLmxlbmd0aDtcbiAgICAgICAgYmFnLm1heGltdW0gPSBkZWYubGVuZ3RoO1xuICAgICAgICBiYWcubGVuZ3RoID0gZGVmLmxlbmd0aDtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGNvbnN0IGxlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA9PT0gZGVmLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgb3JpZ2luID0gdXRpbC5nZXRMZW5ndGhhYmxlT3JpZ2luKGlucHV0KTtcbiAgICAgICAgY29uc3QgdG9vQmlnID0gbGVuZ3RoID4gZGVmLmxlbmd0aDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICAuLi4odG9vQmlnID8geyBjb2RlOiBcInRvb19iaWdcIiwgbWF4aW11bTogZGVmLmxlbmd0aCB9IDogeyBjb2RlOiBcInRvb19zbWFsbFwiLCBtaW5pbXVtOiBkZWYubGVuZ3RoIH0pLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja1N0cmluZ0Zvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tTdHJpbmdGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcuZm9ybWF0ID0gZGVmLmZvcm1hdDtcbiAgICAgICAgaWYgKGRlZi5wYXR0ZXJuKSB7XG4gICAgICAgICAgICBiYWcucGF0dGVybnMgPz8gKGJhZy5wYXR0ZXJucyA9IG5ldyBTZXQoKSk7XG4gICAgICAgICAgICBiYWcucGF0dGVybnMuYWRkKGRlZi5wYXR0ZXJuKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChkZWYucGF0dGVybilcbiAgICAgICAgKF9hID0gaW5zdC5fem9kKS5jaGVjayA/PyAoX2EuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgICAgZGVmLnBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGlmIChkZWYucGF0dGVybi50ZXN0KHBheWxvYWQudmFsdWUpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG9yaWdpbjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBkZWYuZm9ybWF0LFxuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIC4uLihkZWYucGF0dGVybiA/IHsgcGF0dGVybjogZGVmLnBhdHRlcm4udG9TdHJpbmcoKSB9IDoge30pLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgZWxzZVxuICAgICAgICAoX2IgPSBpbnN0Ll96b2QpLmNoZWNrID8/IChfYi5jaGVjayA9ICgpID0+IHsgfSk7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tSZWdleCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tSZWdleFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZENoZWNrU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBkZWYucGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICAgICAgICBpZiAoZGVmLnBhdHRlcm4udGVzdChwYXlsb2FkLnZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW46IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICBmb3JtYXQ6IFwicmVnZXhcIixcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgcGF0dGVybjogZGVmLnBhdHRlcm4udG9TdHJpbmcoKSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDaGVja0xvd2VyQ2FzZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tMb3dlckNhc2VcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMubG93ZXJjYXNlKTtcbiAgICAkWm9kQ2hlY2tTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrVXBwZXJDYXNlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1VwcGVyQ2FzZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy51cHBlcmNhc2UpO1xuICAgICRab2RDaGVja1N0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tJbmNsdWRlcyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2hlY2tJbmNsdWRlc1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBlc2NhcGVkUmVnZXggPSB1dGlsLmVzY2FwZVJlZ2V4KGRlZi5pbmNsdWRlcyk7XG4gICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAodHlwZW9mIGRlZi5wb3NpdGlvbiA9PT0gXCJudW1iZXJcIiA/IGBeLnske2RlZi5wb3NpdGlvbn19JHtlc2NhcGVkUmVnZXh9YCA6IGVzY2FwZWRSZWdleCk7XG4gICAgZGVmLnBhdHRlcm4gPSBwYXR0ZXJuO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGJhZyA9IGluc3QuX3pvZC5iYWc7XG4gICAgICAgIGJhZy5wYXR0ZXJucyA/PyAoYmFnLnBhdHRlcm5zID0gbmV3IFNldCgpKTtcbiAgICAgICAgYmFnLnBhdHRlcm5zLmFkZChwYXR0ZXJuKTtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAocGF5bG9hZC52YWx1ZS5pbmNsdWRlcyhkZWYuaW5jbHVkZXMsIGRlZi5wb3NpdGlvbikpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBcImluY2x1ZGVzXCIsXG4gICAgICAgICAgICBpbmNsdWRlczogZGVmLmluY2x1ZGVzLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tTdGFydHNXaXRoID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1N0YXJ0c1dpdGhcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoYF4ke3V0aWwuZXNjYXBlUmVnZXgoZGVmLnByZWZpeCl9LipgKTtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSBwYXR0ZXJuKTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcucGF0dGVybnMgPz8gKGJhZy5wYXR0ZXJucyA9IG5ldyBTZXQoKSk7XG4gICAgICAgIGJhZy5wYXR0ZXJucy5hZGQocGF0dGVybik7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQudmFsdWUuc3RhcnRzV2l0aChkZWYucHJlZml4KSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBvcmlnaW46IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICBmb3JtYXQ6IFwic3RhcnRzX3dpdGhcIixcbiAgICAgICAgICAgIHByZWZpeDogZGVmLnByZWZpeCxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrRW5kc1dpdGggPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrRW5kc1dpdGhcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgcGF0dGVybiA9IG5ldyBSZWdFeHAoYC4qJHt1dGlsLmVzY2FwZVJlZ2V4KGRlZi5zdWZmaXgpfSRgKTtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSBwYXR0ZXJuKTtcbiAgICBpbnN0Ll96b2Qub25hdHRhY2gucHVzaCgoaW5zdCkgPT4ge1xuICAgICAgICBjb25zdCBiYWcgPSBpbnN0Ll96b2QuYmFnO1xuICAgICAgICBiYWcucGF0dGVybnMgPz8gKGJhZy5wYXR0ZXJucyA9IG5ldyBTZXQoKSk7XG4gICAgICAgIGJhZy5wYXR0ZXJucy5hZGQocGF0dGVybik7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgaWYgKHBheWxvYWQudmFsdWUuZW5kc1dpdGgoZGVmLnN1ZmZpeCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgb3JpZ2luOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2Zvcm1hdFwiLFxuICAgICAgICAgICAgZm9ybWF0OiBcImVuZHNfd2l0aFwiLFxuICAgICAgICAgICAgc3VmZml4OiBkZWYuc3VmZml4LFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLyAgICAkWm9kQ2hlY2tQcm9wZXJ0eSAgICAvLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbmZ1bmN0aW9uIGhhbmRsZUNoZWNrUHJvcGVydHlSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBwcm9wZXJ0eSkge1xuICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKHByb3BlcnR5LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgfVxufVxuZXhwb3J0IGNvbnN0ICRab2RDaGVja1Byb3BlcnR5ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RDaGVja1Byb3BlcnR5XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi5zY2hlbWEuX3pvZC5ydW4oe1xuICAgICAgICAgICAgdmFsdWU6IHBheWxvYWQudmFsdWVbZGVmLnByb3BlcnR5XSxcbiAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiBoYW5kbGVDaGVja1Byb3BlcnR5UmVzdWx0KHJlc3VsdCwgcGF5bG9hZCwgZGVmLnByb3BlcnR5KSk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlQ2hlY2tQcm9wZXJ0eVJlc3VsdChyZXN1bHQsIHBheWxvYWQsIGRlZi5wcm9wZXJ0eSk7XG4gICAgICAgIHJldHVybjtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENoZWNrTWltZVR5cGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrTWltZVR5cGVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RDaGVjay5pbml0KGluc3QsIGRlZik7XG4gICAgY29uc3QgbWltZVNldCA9IG5ldyBTZXQoZGVmLm1pbWUpO1xuICAgIGluc3QuX3pvZC5vbmF0dGFjaC5wdXNoKChpbnN0KSA9PiB7XG4gICAgICAgIGluc3QuX3pvZC5iYWcubWltZSA9IGRlZi5taW1lO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChtaW1lU2V0LmhhcyhwYXlsb2FkLnZhbHVlLnR5cGUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF92YWx1ZVwiLFxuICAgICAgICAgICAgdmFsdWVzOiBkZWYubWltZSxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLnR5cGUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ2hlY2tPdmVyd3JpdGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENoZWNrT3ZlcndyaXRlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kQ2hlY2suaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBkZWYudHgocGF5bG9hZC52YWx1ZSk7XG4gICAgfTtcbn0pO1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/core/checks.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/core/core.js":
|
||
/*!******************************************!*\
|
||
!*** ./node_modules/zod/v4/core/core.js ***!
|
||
\******************************************/
|
||
/***/ ((__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 */ $ZodAsyncError: () => (/* binding */ $ZodAsyncError),\n/* harmony export */ $ZodEncodeError: () => (/* binding */ $ZodEncodeError),\n/* harmony export */ $brand: () => (/* binding */ $brand),\n/* harmony export */ $constructor: () => (/* binding */ $constructor),\n/* harmony export */ NEVER: () => (/* binding */ NEVER),\n/* harmony export */ config: () => (/* binding */ config),\n/* harmony export */ globalConfig: () => (/* binding */ globalConfig)\n/* harmony export */ });\nvar _a;\n/** A special constant with type `never` */\nconst NEVER = /*@__PURE__*/ Object.freeze({\n status: \"aborted\",\n});\nfunction $constructor(name, initializer, params) {\n function init(inst, def) {\n if (!inst._zod) {\n Object.defineProperty(inst, \"_zod\", {\n value: {\n def,\n constr: _,\n traits: new Set(),\n },\n enumerable: false,\n });\n }\n if (inst._zod.traits.has(name)) {\n return;\n }\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n const proto = _.prototype;\n const keys = Object.keys(proto);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n if (!(k in inst)) {\n inst[k] = proto[k].bind(inst);\n }\n }\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nconst $brand = Symbol(\"zod_brand\");\nclass $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nclass $ZodEncodeError extends Error {\n constructor(name) {\n super(`Encountered unidirectional transform during encode: ${name}`);\n this.name = \"ZodEncodeError\";\n }\n}\n(_a = globalThis).__zod_globalConfig ?? (_a.__zod_globalConfig = {});\nconst globalConfig = globalThis.__zod_globalConfig;\nfunction config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9jb3JlLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ087QUFDUDtBQUNBLENBQUM7QUFDK0I7QUFDaEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUI7QUFDakI7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxhQUFhO0FBQzdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGFBQWE7QUFDcEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVCxLQUFLO0FBQ0wsdUNBQXVDLGFBQWE7QUFDcEQ7QUFDQTtBQUNBO0FBQ087QUFDQTtBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBLHFFQUFxRSxLQUFLO0FBQzFFO0FBQ0E7QUFDQTtBQUNBLG1FQUFtRTtBQUM1RDtBQUNBO0FBQ1A7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvY29yZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX2E7XG4vKiogQSBzcGVjaWFsIGNvbnN0YW50IHdpdGggdHlwZSBgbmV2ZXJgICovXG5leHBvcnQgY29uc3QgTkVWRVIgPSAvKkBfX1BVUkVfXyovIE9iamVjdC5mcmVlemUoe1xuICAgIHN0YXR1czogXCJhYm9ydGVkXCIsXG59KTtcbmV4cG9ydCAvKkBfX05PX1NJREVfRUZGRUNUU19fKi8gZnVuY3Rpb24gJGNvbnN0cnVjdG9yKG5hbWUsIGluaXRpYWxpemVyLCBwYXJhbXMpIHtcbiAgICBmdW5jdGlvbiBpbml0KGluc3QsIGRlZikge1xuICAgICAgICBpZiAoIWluc3QuX3pvZCkge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3QsIFwiX3pvZFwiLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgICAgICAgZGVmLFxuICAgICAgICAgICAgICAgICAgICBjb25zdHI6IF8sXG4gICAgICAgICAgICAgICAgICAgIHRyYWl0czogbmV3IFNldCgpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5zdC5fem9kLnRyYWl0cy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpbnN0Ll96b2QudHJhaXRzLmFkZChuYW1lKTtcbiAgICAgICAgaW5pdGlhbGl6ZXIoaW5zdCwgZGVmKTtcbiAgICAgICAgLy8gc3VwcG9ydCBwcm90b3R5cGUgbW9kaWZpY2F0aW9uc1xuICAgICAgICBjb25zdCBwcm90byA9IF8ucHJvdG90eXBlO1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocHJvdG8pO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGsgPSBrZXlzW2ldO1xuICAgICAgICAgICAgaWYgKCEoayBpbiBpbnN0KSkge1xuICAgICAgICAgICAgICAgIGluc3Rba10gPSBwcm90b1trXS5iaW5kKGluc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGRvZXNuJ3Qgd29yayBpZiBQYXJlbnQgaGFzIGEgY29uc3RydWN0b3Igd2l0aCBhcmd1bWVudHNcbiAgICBjb25zdCBQYXJlbnQgPSBwYXJhbXM/LlBhcmVudCA/PyBPYmplY3Q7XG4gICAgY2xhc3MgRGVmaW5pdGlvbiBleHRlbmRzIFBhcmVudCB7XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWZpbml0aW9uLCBcIm5hbWVcIiwgeyB2YWx1ZTogbmFtZSB9KTtcbiAgICBmdW5jdGlvbiBfKGRlZikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGluc3QgPSBwYXJhbXM/LlBhcmVudCA/IG5ldyBEZWZpbml0aW9uKCkgOiB0aGlzO1xuICAgICAgICBpbml0KGluc3QsIGRlZik7XG4gICAgICAgIChfYSA9IGluc3QuX3pvZCkuZGVmZXJyZWQgPz8gKF9hLmRlZmVycmVkID0gW10pO1xuICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIGluc3QuX3pvZC5kZWZlcnJlZCkge1xuICAgICAgICAgICAgZm4oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5zdDtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIFwiaW5pdFwiLCB7IHZhbHVlOiBpbml0IH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfLCBTeW1ib2wuaGFzSW5zdGFuY2UsIHtcbiAgICAgICAgdmFsdWU6IChpbnN0KSA9PiB7XG4gICAgICAgICAgICBpZiAocGFyYW1zPy5QYXJlbnQgJiYgaW5zdCBpbnN0YW5jZW9mIHBhcmFtcy5QYXJlbnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICByZXR1cm4gaW5zdD8uX3pvZD8udHJhaXRzPy5oYXMobmFtZSk7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF8sIFwibmFtZVwiLCB7IHZhbHVlOiBuYW1lIH0pO1xuICAgIHJldHVybiBfO1xufVxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICAgVVRJTElUSUVTICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5leHBvcnQgY29uc3QgJGJyYW5kID0gU3ltYm9sKFwiem9kX2JyYW5kXCIpO1xuZXhwb3J0IGNsYXNzICRab2RBc3luY0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcihgRW5jb3VudGVyZWQgUHJvbWlzZSBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2UuIFVzZSAucGFyc2VBc3luYygpIGluc3RlYWQuYCk7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzICRab2RFbmNvZGVFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihuYW1lKSB7XG4gICAgICAgIHN1cGVyKGBFbmNvdW50ZXJlZCB1bmlkaXJlY3Rpb25hbCB0cmFuc2Zvcm0gZHVyaW5nIGVuY29kZTogJHtuYW1lfWApO1xuICAgICAgICB0aGlzLm5hbWUgPSBcIlpvZEVuY29kZUVycm9yXCI7XG4gICAgfVxufVxuKF9hID0gZ2xvYmFsVGhpcykuX196b2RfZ2xvYmFsQ29uZmlnID8/IChfYS5fX3pvZF9nbG9iYWxDb25maWcgPSB7fSk7XG5leHBvcnQgY29uc3QgZ2xvYmFsQ29uZmlnID0gZ2xvYmFsVGhpcy5fX3pvZF9nbG9iYWxDb25maWc7XG5leHBvcnQgZnVuY3Rpb24gY29uZmlnKG5ld0NvbmZpZykge1xuICAgIGlmIChuZXdDb25maWcpXG4gICAgICAgIE9iamVjdC5hc3NpZ24oZ2xvYmFsQ29uZmlnLCBuZXdDb25maWcpO1xuICAgIHJldHVybiBnbG9iYWxDb25maWc7XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/core/core.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/core/doc.js":
|
||
/*!*****************************************!*\
|
||
!*** ./node_modules/zod/v4/core/doc.js ***!
|
||
\*****************************************/
|
||
/***/ ((__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 */ Doc: () => (/* binding */ Doc)\n/* harmony export */ });\nclass Doc {\n constructor(args = []) {\n this.content = [];\n this.indent = 0;\n if (this)\n this.args = args;\n }\n indented(fn) {\n this.indent += 1;\n fn(this);\n this.indent -= 1;\n }\n write(arg) {\n if (typeof arg === \"function\") {\n arg(this, { execution: \"sync\" });\n arg(this, { execution: \"async\" });\n return;\n }\n const content = arg;\n const lines = content.split(\"\\n\").filter((x) => x);\n const minIndent = Math.min(...lines.map((x) => x.length - x.trimStart().length));\n const dedented = lines.map((x) => x.slice(minIndent)).map((x) => \" \".repeat(this.indent * 2) + x);\n for (const line of dedented) {\n this.content.push(line);\n }\n }\n compile() {\n const F = Function;\n const args = this?.args;\n const content = this?.content ?? [``];\n const lines = [...content.map((x) => ` ${x}`)];\n // console.log(lines.join(\"\\n\"));\n return new F(...args, lines.join(\"\\n\"));\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9kb2MuanMiLCJtYXBwaW5ncyI6Ijs7OztBQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsbUJBQW1CO0FBQzNDLHdCQUF3QixvQkFBb0I7QUFDNUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtEQUFrRCxFQUFFO0FBQ3BEO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL2RvYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgRG9jIHtcbiAgICBjb25zdHJ1Y3RvcihhcmdzID0gW10pIHtcbiAgICAgICAgdGhpcy5jb250ZW50ID0gW107XG4gICAgICAgIHRoaXMuaW5kZW50ID0gMDtcbiAgICAgICAgaWYgKHRoaXMpXG4gICAgICAgICAgICB0aGlzLmFyZ3MgPSBhcmdzO1xuICAgIH1cbiAgICBpbmRlbnRlZChmbikge1xuICAgICAgICB0aGlzLmluZGVudCArPSAxO1xuICAgICAgICBmbih0aGlzKTtcbiAgICAgICAgdGhpcy5pbmRlbnQgLT0gMTtcbiAgICB9XG4gICAgd3JpdGUoYXJnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYXJnID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIGFyZyh0aGlzLCB7IGV4ZWN1dGlvbjogXCJzeW5jXCIgfSk7XG4gICAgICAgICAgICBhcmcodGhpcywgeyBleGVjdXRpb246IFwiYXN5bmNcIiB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb250ZW50ID0gYXJnO1xuICAgICAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIikuZmlsdGVyKCh4KSA9PiB4KTtcbiAgICAgICAgY29uc3QgbWluSW5kZW50ID0gTWF0aC5taW4oLi4ubGluZXMubWFwKCh4KSA9PiB4Lmxlbmd0aCAtIHgudHJpbVN0YXJ0KCkubGVuZ3RoKSk7XG4gICAgICAgIGNvbnN0IGRlZGVudGVkID0gbGluZXMubWFwKCh4KSA9PiB4LnNsaWNlKG1pbkluZGVudCkpLm1hcCgoeCkgPT4gXCIgXCIucmVwZWF0KHRoaXMuaW5kZW50ICogMikgKyB4KTtcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGRlZGVudGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnQucHVzaChsaW5lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb21waWxlKCkge1xuICAgICAgICBjb25zdCBGID0gRnVuY3Rpb247XG4gICAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzPy5hcmdzO1xuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcz8uY29udGVudCA/PyBbYGBdO1xuICAgICAgICBjb25zdCBsaW5lcyA9IFsuLi5jb250ZW50Lm1hcCgoeCkgPT4gYCAgJHt4fWApXTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZXMuam9pbihcIlxcblwiKSk7XG4gICAgICAgIHJldHVybiBuZXcgRiguLi5hcmdzLCBsaW5lcy5qb2luKFwiXFxuXCIpKTtcbiAgICB9XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/core/doc.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/core/errors.js":
|
||
/*!********************************************!*\
|
||
!*** ./node_modules/zod/v4/core/errors.js ***!
|
||
\********************************************/
|
||
/***/ ((__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 */ $ZodError: () => (/* binding */ $ZodError),\n/* harmony export */ $ZodRealError: () => (/* binding */ $ZodRealError),\n/* harmony export */ flattenError: () => (/* binding */ flattenError),\n/* harmony export */ formatError: () => (/* binding */ formatError),\n/* harmony export */ prettifyError: () => (/* binding */ prettifyError),\n/* harmony export */ toDotPath: () => (/* binding */ toDotPath),\n/* harmony export */ treeifyError: () => (/* binding */ treeifyError)\n/* harmony export */ });\n/* harmony import */ var _core_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./core.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/core.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/util.js\");\n\n\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n inst.message = JSON.stringify(def, _util_js__WEBPACK_IMPORTED_MODULE_0__.jsonStringifyReplacer, 2);\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nconst $ZodError = (0,_core_js__WEBPACK_IMPORTED_MODULE_1__.$constructor)(\"$ZodError\", initializer);\nconst $ZodRealError = (0,_core_js__WEBPACK_IMPORTED_MODULE_1__.$constructor)(\"$ZodError\", initializer, { Parent: Error });\nfunction flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nfunction formatError(error, mapper = (issue) => issue.message) {\n const fieldErrors = { _errors: [] };\n const processError = (error, path = []) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nfunction treeifyError(error, mapper = (issue) => issue.message) {\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, [...path, ...issue.path]));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, [...path, ...issue.path]);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nfunction toDotPath(_path) {\n const segs = [];\n const path = _path.map((seg) => (typeof seg === \"object\" ? seg.key : seg));\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nfunction prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => (a.path ?? []).length - (b.path ?? []).length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9lcnJvcnMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQXlDO0FBQ1A7QUFDbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsdUNBQXVDLDJEQUEwQjtBQUNqRTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDTyxrQkFBa0Isc0RBQVk7QUFDOUIsc0JBQXNCLHNEQUFZLDZCQUE2QixlQUFlO0FBQzlFO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNPO0FBQ1AsMEJBQTBCO0FBQzFCO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxRQUFRO0FBQ3BFO0FBQ0E7QUFDQSwrQkFBK0Isc0JBQXNCO0FBQ3JEO0FBQ0E7QUFDQSwrQkFBK0Isc0JBQXNCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscURBQXFEO0FBQ3JEO0FBQ0E7QUFDQSxxREFBcUQ7QUFDckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUCxxQkFBcUI7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDREQUE0RCxRQUFRO0FBQ3BFO0FBQ0E7QUFDQSwrQkFBK0Isc0JBQXNCO0FBQ3JEO0FBQ0E7QUFDQSwrQkFBK0Isc0JBQXNCO0FBQ3JEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0VBQWdFO0FBQ2hFLGtFQUFrRSxZQUFZO0FBQzlFO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsNkRBQTZELFlBQVk7QUFDekU7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMEJBQTBCLElBQUk7QUFDOUI7QUFDQSwwQkFBMEIsNEJBQTRCO0FBQ3REO0FBQ0EsMEJBQTBCLG9CQUFvQjtBQUM5QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGNBQWM7QUFDdEM7QUFDQSxpQ0FBaUMsc0JBQXNCO0FBQ3ZEO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvbm9kZV9tb2R1bGVzL3pvZC92NC9jb3JlL2Vycm9ycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyAkY29uc3RydWN0b3IgfSBmcm9tIFwiLi9jb3JlLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuL3V0aWwuanNcIjtcbmNvbnN0IGluaXRpYWxpemVyID0gKGluc3QsIGRlZikgPT4ge1xuICAgIGluc3QubmFtZSA9IFwiJFpvZEVycm9yXCI7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGluc3QsIFwiX3pvZFwiLCB7XG4gICAgICAgIHZhbHVlOiBpbnN0Ll96b2QsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIH0pO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0LCBcImlzc3Vlc1wiLCB7XG4gICAgICAgIHZhbHVlOiBkZWYsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIH0pO1xuICAgIGluc3QubWVzc2FnZSA9IEpTT04uc3RyaW5naWZ5KGRlZiwgdXRpbC5qc29uU3RyaW5naWZ5UmVwbGFjZXIsIDIpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpbnN0LCBcInRvU3RyaW5nXCIsIHtcbiAgICAgICAgdmFsdWU6ICgpID0+IGluc3QubWVzc2FnZSxcbiAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgfSk7XG59O1xuZXhwb3J0IGNvbnN0ICRab2RFcnJvciA9ICRjb25zdHJ1Y3RvcihcIiRab2RFcnJvclwiLCBpbml0aWFsaXplcik7XG5leHBvcnQgY29uc3QgJFpvZFJlYWxFcnJvciA9ICRjb25zdHJ1Y3RvcihcIiRab2RFcnJvclwiLCBpbml0aWFsaXplciwgeyBQYXJlbnQ6IEVycm9yIH0pO1xuZXhwb3J0IGZ1bmN0aW9uIGZsYXR0ZW5FcnJvcihlcnJvciwgbWFwcGVyID0gKGlzc3VlKSA9PiBpc3N1ZS5tZXNzYWdlKSB7XG4gICAgY29uc3QgZmllbGRFcnJvcnMgPSB7fTtcbiAgICBjb25zdCBmb3JtRXJyb3JzID0gW107XG4gICAgZm9yIChjb25zdCBzdWIgb2YgZXJyb3IuaXNzdWVzKSB7XG4gICAgICAgIGlmIChzdWIucGF0aC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBmaWVsZEVycm9yc1tzdWIucGF0aFswXV0gPSBmaWVsZEVycm9yc1tzdWIucGF0aFswXV0gfHwgW107XG4gICAgICAgICAgICBmaWVsZEVycm9yc1tzdWIucGF0aFswXV0ucHVzaChtYXBwZXIoc3ViKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3JtRXJyb3JzLnB1c2gobWFwcGVyKHN1YikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IGZvcm1FcnJvcnMsIGZpZWxkRXJyb3JzIH07XG59XG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RXJyb3IoZXJyb3IsIG1hcHBlciA9IChpc3N1ZSkgPT4gaXNzdWUubWVzc2FnZSkge1xuICAgIGNvbnN0IGZpZWxkRXJyb3JzID0geyBfZXJyb3JzOiBbXSB9O1xuICAgIGNvbnN0IHByb2Nlc3NFcnJvciA9IChlcnJvciwgcGF0aCA9IFtdKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgaXNzdWUgb2YgZXJyb3IuaXNzdWVzKSB7XG4gICAgICAgICAgICBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX3VuaW9uXCIgJiYgaXNzdWUuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlzc3VlLmVycm9ycy5tYXAoKGlzc3VlcykgPT4gcHJvY2Vzc0Vycm9yKHsgaXNzdWVzIH0sIFsuLi5wYXRoLCAuLi5pc3N1ZS5wYXRoXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX2tleVwiKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Vycm9yKHsgaXNzdWVzOiBpc3N1ZS5pc3N1ZXMgfSwgWy4uLnBhdGgsIC4uLmlzc3VlLnBhdGhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9lbGVtZW50XCIpIHtcbiAgICAgICAgICAgICAgICBwcm9jZXNzRXJyb3IoeyBpc3N1ZXM6IGlzc3VlLmlzc3VlcyB9LCBbLi4ucGF0aCwgLi4uaXNzdWUucGF0aF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZnVsbHBhdGggPSBbLi4ucGF0aCwgLi4uaXNzdWUucGF0aF07XG4gICAgICAgICAgICAgICAgaWYgKGZ1bGxwYXRoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9ycy5fZXJyb3JzLnB1c2gobWFwcGVyKGlzc3VlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VyciA9IGZpZWxkRXJyb3JzO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgZnVsbHBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbCA9IGZ1bGxwYXRoW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVybWluYWwgPSBpID09PSBmdWxscGF0aC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0ZXJtaW5hbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJbZWxdID0gY3VycltlbF0gfHwgeyBfZXJyb3JzOiBbXSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycltlbF0gPSBjdXJyW2VsXSB8fCB7IF9lcnJvcnM6IFtdIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycltlbF0uX2Vycm9ycy5wdXNoKG1hcHBlcihpc3N1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnJbZWxdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBwcm9jZXNzRXJyb3IoZXJyb3IpO1xuICAgIHJldHVybiBmaWVsZEVycm9ycztcbn1cbmV4cG9ydCBmdW5jdGlvbiB0cmVlaWZ5RXJyb3IoZXJyb3IsIG1hcHBlciA9IChpc3N1ZSkgPT4gaXNzdWUubWVzc2FnZSkge1xuICAgIGNvbnN0IHJlc3VsdCA9IHsgZXJyb3JzOiBbXSB9O1xuICAgIGNvbnN0IHByb2Nlc3NFcnJvciA9IChlcnJvciwgcGF0aCA9IFtdKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGZvciAoY29uc3QgaXNzdWUgb2YgZXJyb3IuaXNzdWVzKSB7XG4gICAgICAgICAgICBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX3VuaW9uXCIgJiYgaXNzdWUuZXJyb3JzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIHJlZ3VsYXIgdW5pb24gZXJyb3JcbiAgICAgICAgICAgICAgICBpc3N1ZS5lcnJvcnMubWFwKChpc3N1ZXMpID0+IHByb2Nlc3NFcnJvcih7IGlzc3VlcyB9LCBbLi4ucGF0aCwgLi4uaXNzdWUucGF0aF0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF9rZXlcIikge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NFcnJvcih7IGlzc3VlczogaXNzdWUuaXNzdWVzIH0sIFsuLi5wYXRoLCAuLi5pc3N1ZS5wYXRoXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfZWxlbWVudFwiKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0Vycm9yKHsgaXNzdWVzOiBpc3N1ZS5pc3N1ZXMgfSwgWy4uLnBhdGgsIC4uLmlzc3VlLnBhdGhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZ1bGxwYXRoID0gWy4uLnBhdGgsIC4uLmlzc3VlLnBhdGhdO1xuICAgICAgICAgICAgICAgIGlmIChmdWxscGF0aC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmVycm9ycy5wdXNoKG1hcHBlcihpc3N1ZSkpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IGN1cnIgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpIDwgZnVsbHBhdGgubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsID0gZnVsbHBhdGhbaV07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlcm1pbmFsID0gaSA9PT0gZnVsbHBhdGgubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3Vyci5wcm9wZXJ0aWVzID8/IChjdXJyLnByb3BlcnRpZXMgPSB7fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAoX2EgPSBjdXJyLnByb3BlcnRpZXMpW2VsXSA/PyAoX2FbZWxdID0geyBlcnJvcnM6IFtdIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIucHJvcGVydGllc1tlbF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyLml0ZW1zID8/IChjdXJyLml0ZW1zID0gW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgKF9iID0gY3Vyci5pdGVtcylbZWxdID8/IChfYltlbF0gPSB7IGVycm9yczogW10gfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci5pdGVtc1tlbF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlcm1pbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyLmVycm9ycy5wdXNoKG1hcHBlcihpc3N1ZSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHByb2Nlc3NFcnJvcihlcnJvcik7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKiBGb3JtYXQgYSBab2RFcnJvciBhcyBhIGh1bWFuLXJlYWRhYmxlIHN0cmluZyBpbiB0aGUgZm9sbG93aW5nIGZvcm0uXG4gKlxuICogRnJvbVxuICpcbiAqIGBgYHRzXG4gKiBab2RFcnJvciB7XG4gKiAgIGlzc3VlczogW1xuICogICAgIHtcbiAqICAgICAgIGV4cGVjdGVkOiAnc3RyaW5nJyxcbiAqICAgICAgIGNvZGU6ICdpbnZhbGlkX3R5cGUnLFxuICogICAgICAgcGF0aDogWyAndXNlcm5hbWUnIF0sXG4gKiAgICAgICBtZXNzYWdlOiAnSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgc3RyaW5nJ1xuICogICAgIH0sXG4gKiAgICAge1xuICogICAgICAgZXhwZWN0ZWQ6ICdudW1iZXInLFxuICogICAgICAgY29kZTogJ2ludmFsaWRfdHlwZScsXG4gKiAgICAgICBwYXRoOiBbICdmYXZvcml0ZU51bWJlcnMnLCAxIF0sXG4gKiAgICAgICBtZXNzYWdlOiAnSW52YWxpZCBpbnB1dDogZXhwZWN0ZWQgbnVtYmVyJ1xuICogICAgIH1cbiAqICAgXTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIHRvXG4gKlxuICogYGBgXG4gKiB1c2VybmFtZVxuICogICDinJYgRXhwZWN0ZWQgbnVtYmVyLCByZWNlaXZlZCBzdHJpbmcgYXQgXCJ1c2VybmFtZVxuICogZmF2b3JpdGVOdW1iZXJzWzBdXG4gKiAgIOKcliBJbnZhbGlkIGlucHV0OiBleHBlY3RlZCBudW1iZXJcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Eb3RQYXRoKF9wYXRoKSB7XG4gICAgY29uc3Qgc2VncyA9IFtdO1xuICAgIGNvbnN0IHBhdGggPSBfcGF0aC5tYXAoKHNlZykgPT4gKHR5cGVvZiBzZWcgPT09IFwib2JqZWN0XCIgPyBzZWcua2V5IDogc2VnKSk7XG4gICAgZm9yIChjb25zdCBzZWcgb2YgcGF0aCkge1xuICAgICAgICBpZiAodHlwZW9mIHNlZyA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgIHNlZ3MucHVzaChgWyR7c2VnfV1gKTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHNlZyA9PT0gXCJzeW1ib2xcIilcbiAgICAgICAgICAgIHNlZ3MucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkoU3RyaW5nKHNlZykpfV1gKTtcbiAgICAgICAgZWxzZSBpZiAoL1teXFx3JF0vLnRlc3Qoc2VnKSlcbiAgICAgICAgICAgIHNlZ3MucHVzaChgWyR7SlNPTi5zdHJpbmdpZnkoc2VnKX1dYCk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHNlZ3MubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHNlZ3MucHVzaChcIi5cIik7XG4gICAgICAgICAgICBzZWdzLnB1c2goc2VnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc2Vncy5qb2luKFwiXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHByZXR0aWZ5RXJyb3IoZXJyb3IpIHtcbiAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgIC8vIHNvcnQgYnkgcGF0aCBsZW5ndGhcbiAgICBjb25zdCBpc3N1ZXMgPSBbLi4uZXJyb3IuaXNzdWVzXS5zb3J0KChhLCBiKSA9PiAoYS5wYXRoID8/IFtdKS5sZW5ndGggLSAoYi5wYXRoID8/IFtdKS5sZW5ndGgpO1xuICAgIC8vIFByb2Nlc3MgZWFjaCBpc3N1ZVxuICAgIGZvciAoY29uc3QgaXNzdWUgb2YgaXNzdWVzKSB7XG4gICAgICAgIGxpbmVzLnB1c2goYOKcliAke2lzc3VlLm1lc3NhZ2V9YCk7XG4gICAgICAgIGlmIChpc3N1ZS5wYXRoPy5sZW5ndGgpXG4gICAgICAgICAgICBsaW5lcy5wdXNoKGAgIOKGkiBhdCAke3RvRG90UGF0aChpc3N1ZS5wYXRoKX1gKTtcbiAgICB9XG4gICAgLy8gQ29udmVydCBNYXAgdG8gZm9ybWF0dGVkIHN0cmluZ1xuICAgIHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/core/errors.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/core/json-schema-processors.js":
|
||
/*!************************************************************!*\
|
||
!*** ./node_modules/zod/v4/core/json-schema-processors.js ***!
|
||
\************************************************************/
|
||
/***/ ((__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 */ allProcessors: () => (/* binding */ allProcessors),\n/* harmony export */ anyProcessor: () => (/* binding */ anyProcessor),\n/* harmony export */ arrayProcessor: () => (/* binding */ arrayProcessor),\n/* harmony export */ bigintProcessor: () => (/* binding */ bigintProcessor),\n/* harmony export */ booleanProcessor: () => (/* binding */ booleanProcessor),\n/* harmony export */ catchProcessor: () => (/* binding */ catchProcessor),\n/* harmony export */ customProcessor: () => (/* binding */ customProcessor),\n/* harmony export */ dateProcessor: () => (/* binding */ dateProcessor),\n/* harmony export */ defaultProcessor: () => (/* binding */ defaultProcessor),\n/* harmony export */ enumProcessor: () => (/* binding */ enumProcessor),\n/* harmony export */ fileProcessor: () => (/* binding */ fileProcessor),\n/* harmony export */ functionProcessor: () => (/* binding */ functionProcessor),\n/* harmony export */ intersectionProcessor: () => (/* binding */ intersectionProcessor),\n/* harmony export */ lazyProcessor: () => (/* binding */ lazyProcessor),\n/* harmony export */ literalProcessor: () => (/* binding */ literalProcessor),\n/* harmony export */ mapProcessor: () => (/* binding */ mapProcessor),\n/* harmony export */ nanProcessor: () => (/* binding */ nanProcessor),\n/* harmony export */ neverProcessor: () => (/* binding */ neverProcessor),\n/* harmony export */ nonoptionalProcessor: () => (/* binding */ nonoptionalProcessor),\n/* harmony export */ nullProcessor: () => (/* binding */ nullProcessor),\n/* harmony export */ nullableProcessor: () => (/* binding */ nullableProcessor),\n/* harmony export */ numberProcessor: () => (/* binding */ numberProcessor),\n/* harmony export */ objectProcessor: () => (/* binding */ objectProcessor),\n/* harmony export */ optionalProcessor: () => (/* binding */ optionalProcessor),\n/* harmony export */ pipeProcessor: () => (/* binding */ pipeProcessor),\n/* harmony export */ prefaultProcessor: () => (/* binding */ prefaultProcessor),\n/* harmony export */ promiseProcessor: () => (/* binding */ promiseProcessor),\n/* harmony export */ readonlyProcessor: () => (/* binding */ readonlyProcessor),\n/* harmony export */ recordProcessor: () => (/* binding */ recordProcessor),\n/* harmony export */ setProcessor: () => (/* binding */ setProcessor),\n/* harmony export */ stringProcessor: () => (/* binding */ stringProcessor),\n/* harmony export */ successProcessor: () => (/* binding */ successProcessor),\n/* harmony export */ symbolProcessor: () => (/* binding */ symbolProcessor),\n/* harmony export */ templateLiteralProcessor: () => (/* binding */ templateLiteralProcessor),\n/* harmony export */ toJSONSchema: () => (/* binding */ toJSONSchema),\n/* harmony export */ transformProcessor: () => (/* binding */ transformProcessor),\n/* harmony export */ tupleProcessor: () => (/* binding */ tupleProcessor),\n/* harmony export */ undefinedProcessor: () => (/* binding */ undefinedProcessor),\n/* harmony export */ unionProcessor: () => (/* binding */ unionProcessor),\n/* harmony export */ unknownProcessor: () => (/* binding */ unknownProcessor),\n/* harmony export */ voidProcessor: () => (/* binding */ voidProcessor)\n/* harmony export */ });\n/* harmony import */ var _to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./to-json-schema.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/to-json-schema.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/util.js\");\n\n\nconst formatMap = {\n guid: \"uuid\",\n url: \"uri\",\n datetime: \"date-time\",\n json_string: \"json-string\",\n regex: \"\", // do not set\n};\n// ==================== SIMPLE TYPE PROCESSORS ====================\nconst stringProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n json.type = \"string\";\n const { minimum, maximum, format, patterns, contentEncoding } = schema._zod\n .bag;\n if (typeof minimum === \"number\")\n json.minLength = minimum;\n if (typeof maximum === \"number\")\n json.maxLength = maximum;\n // custom pattern overrides format\n if (format) {\n json.format = formatMap[format] ?? format;\n if (json.format === \"\")\n delete json.format; // empty format is not valid\n // JSON Schema format: \"time\" requires a full time with offset or Z\n // z.iso.time() does not include timezone information, so format: \"time\" should never be used\n if (format === \"time\") {\n delete json.format;\n }\n }\n if (contentEncoding)\n json.contentEncoding = contentEncoding;\n if (patterns && patterns.size > 0) {\n const regexes = [...patterns];\n if (regexes.length === 1)\n json.pattern = regexes[0].source;\n else if (regexes.length > 1) {\n json.allOf = [\n ...regexes.map((regex) => ({\n ...(ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\"\n ? { type: \"string\" }\n : {}),\n pattern: regex.source,\n })),\n ];\n }\n }\n};\nconst numberProcessor = (schema, ctx, _json, _params) => {\n const json = _json;\n const { minimum, maximum, format, multipleOf, exclusiveMaximum, exclusiveMinimum } = schema._zod.bag;\n if (typeof format === \"string\" && format.includes(\"int\"))\n json.type = \"integer\";\n else\n json.type = \"number\";\n // when both minimum and exclusiveMinimum exist, pick the more restrictive one\n const exMin = typeof exclusiveMinimum === \"number\" && exclusiveMinimum >= (minimum ?? Number.NEGATIVE_INFINITY);\n const exMax = typeof exclusiveMaximum === \"number\" && exclusiveMaximum <= (maximum ?? Number.POSITIVE_INFINITY);\n const legacy = ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\";\n if (exMin) {\n if (legacy) {\n json.minimum = exclusiveMinimum;\n json.exclusiveMinimum = true;\n }\n else {\n json.exclusiveMinimum = exclusiveMinimum;\n }\n }\n else if (typeof minimum === \"number\") {\n json.minimum = minimum;\n }\n if (exMax) {\n if (legacy) {\n json.maximum = exclusiveMaximum;\n json.exclusiveMaximum = true;\n }\n else {\n json.exclusiveMaximum = exclusiveMaximum;\n }\n }\n else if (typeof maximum === \"number\") {\n json.maximum = maximum;\n }\n if (typeof multipleOf === \"number\")\n json.multipleOf = multipleOf;\n};\nconst booleanProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nconst bigintProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt cannot be represented in JSON Schema\");\n }\n};\nconst symbolProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Symbols cannot be represented in JSON Schema\");\n }\n};\nconst nullProcessor = (_schema, ctx, json, _params) => {\n if (ctx.target === \"openapi-3.0\") {\n json.type = \"string\";\n json.nullable = true;\n json.enum = [null];\n }\n else {\n json.type = \"null\";\n }\n};\nconst undefinedProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Undefined cannot be represented in JSON Schema\");\n }\n};\nconst voidProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Void cannot be represented in JSON Schema\");\n }\n};\nconst neverProcessor = (_schema, _ctx, json, _params) => {\n json.not = {};\n};\nconst anyProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nconst unknownProcessor = (_schema, _ctx, _json, _params) => {\n // empty schema accepts anything\n};\nconst dateProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Date cannot be represented in JSON Schema\");\n }\n};\nconst enumProcessor = (schema, _ctx, json, _params) => {\n const def = schema._zod.def;\n const values = (0,_util_js__WEBPACK_IMPORTED_MODULE_0__.getEnumValues)(def.entries);\n // Number enums can have both string and number values\n if (values.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (values.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n json.enum = values;\n};\nconst literalProcessor = (schema, ctx, json, _params) => {\n const def = schema._zod.def;\n const vals = [];\n for (const val of def.values) {\n if (val === undefined) {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Literal `undefined` cannot be represented in JSON Schema\");\n }\n else {\n // do not add to vals\n }\n }\n else if (typeof val === \"bigint\") {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"BigInt literals cannot be represented in JSON Schema\");\n }\n else {\n vals.push(Number(val));\n }\n }\n else {\n vals.push(val);\n }\n }\n if (vals.length === 0) {\n // do nothing (an undefined literal was stripped)\n }\n else if (vals.length === 1) {\n const val = vals[0];\n json.type = val === null ? \"null\" : typeof val;\n if (ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\") {\n json.enum = [val];\n }\n else {\n json.const = val;\n }\n }\n else {\n if (vals.every((v) => typeof v === \"number\"))\n json.type = \"number\";\n if (vals.every((v) => typeof v === \"string\"))\n json.type = \"string\";\n if (vals.every((v) => typeof v === \"boolean\"))\n json.type = \"boolean\";\n if (vals.every((v) => v === null))\n json.type = \"null\";\n json.enum = vals;\n }\n};\nconst nanProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"NaN cannot be represented in JSON Schema\");\n }\n};\nconst templateLiteralProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const pattern = schema._zod.pattern;\n if (!pattern)\n throw new Error(\"Pattern not found in template literal\");\n _json.type = \"string\";\n _json.pattern = pattern.source;\n};\nconst fileProcessor = (schema, _ctx, json, _params) => {\n const _json = json;\n const file = {\n type: \"string\",\n format: \"binary\",\n contentEncoding: \"binary\",\n };\n const { minimum, maximum, mime } = schema._zod.bag;\n if (minimum !== undefined)\n file.minLength = minimum;\n if (maximum !== undefined)\n file.maxLength = maximum;\n if (mime) {\n if (mime.length === 1) {\n file.contentMediaType = mime[0];\n Object.assign(_json, file);\n }\n else {\n Object.assign(_json, file); // shared props at root\n _json.anyOf = mime.map((m) => ({ contentMediaType: m })); // only contentMediaType differs\n }\n }\n else {\n Object.assign(_json, file);\n }\n};\nconst successProcessor = (_schema, _ctx, json, _params) => {\n json.type = \"boolean\";\n};\nconst customProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Custom types cannot be represented in JSON Schema\");\n }\n};\nconst functionProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Function types cannot be represented in JSON Schema\");\n }\n};\nconst transformProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Transforms cannot be represented in JSON Schema\");\n }\n};\nconst mapProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Map cannot be represented in JSON Schema\");\n }\n};\nconst setProcessor = (_schema, ctx, _json, _params) => {\n if (ctx.unrepresentable === \"throw\") {\n throw new Error(\"Set cannot be represented in JSON Schema\");\n }\n};\n// ==================== COMPOSITE TYPE PROCESSORS ====================\nconst arrayProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n json.type = \"array\";\n json.items = (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.element, ctx, {\n ...params,\n path: [...params.path, \"items\"],\n });\n};\nconst objectProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n json.properties = {};\n const shape = def.shape;\n for (const key in shape) {\n json.properties[key] = (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(shape[key], ctx, {\n ...params,\n path: [...params.path, \"properties\", key],\n });\n }\n // required keys\n const allKeys = new Set(Object.keys(shape));\n const requiredKeys = new Set([...allKeys].filter((key) => {\n const v = def.shape[key]._zod;\n if (ctx.io === \"input\") {\n return v.optin === undefined;\n }\n else {\n return v.optout === undefined;\n }\n }));\n if (requiredKeys.size > 0) {\n json.required = Array.from(requiredKeys);\n }\n // catchall\n if (def.catchall?._zod.def.type === \"never\") {\n // strict\n json.additionalProperties = false;\n }\n else if (!def.catchall) {\n // regular\n if (ctx.io === \"output\")\n json.additionalProperties = false;\n }\n else if (def.catchall) {\n json.additionalProperties = (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.catchall, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n};\nconst unionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n // Exclusive unions (inclusive === false) use oneOf (exactly one match) instead of anyOf (one or more matches)\n // This includes both z.xor() and discriminated unions\n const isExclusive = def.inclusive === false;\n const options = def.options.map((x, i) => (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(x, ctx, {\n ...params,\n path: [...params.path, isExclusive ? \"oneOf\" : \"anyOf\", i],\n }));\n if (isExclusive) {\n json.oneOf = options;\n }\n else {\n json.anyOf = options;\n }\n};\nconst intersectionProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const a = (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.left, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 0],\n });\n const b = (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.right, ctx, {\n ...params,\n path: [...params.path, \"allOf\", 1],\n });\n const isSimpleIntersection = (val) => \"allOf\" in val && Object.keys(val).length === 1;\n const allOf = [\n ...(isSimpleIntersection(a) ? a.allOf : [a]),\n ...(isSimpleIntersection(b) ? b.allOf : [b]),\n ];\n json.allOf = allOf;\n};\nconst tupleProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"array\";\n const prefixPath = ctx.target === \"draft-2020-12\" ? \"prefixItems\" : \"items\";\n const restPath = ctx.target === \"draft-2020-12\" ? \"items\" : ctx.target === \"openapi-3.0\" ? \"items\" : \"additionalItems\";\n const prefixItems = def.items.map((x, i) => (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(x, ctx, {\n ...params,\n path: [...params.path, prefixPath, i],\n }));\n const rest = def.rest\n ? (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.rest, ctx, {\n ...params,\n path: [...params.path, restPath, ...(ctx.target === \"openapi-3.0\" ? [def.items.length] : [])],\n })\n : null;\n if (ctx.target === \"draft-2020-12\") {\n json.prefixItems = prefixItems;\n if (rest) {\n json.items = rest;\n }\n }\n else if (ctx.target === \"openapi-3.0\") {\n json.items = {\n anyOf: prefixItems,\n };\n if (rest) {\n json.items.anyOf.push(rest);\n }\n json.minItems = prefixItems.length;\n if (!rest) {\n json.maxItems = prefixItems.length;\n }\n }\n else {\n json.items = prefixItems;\n if (rest) {\n json.additionalItems = rest;\n }\n }\n // length\n const { minimum, maximum } = schema._zod.bag;\n if (typeof minimum === \"number\")\n json.minItems = minimum;\n if (typeof maximum === \"number\")\n json.maxItems = maximum;\n};\nconst recordProcessor = (schema, ctx, _json, params) => {\n const json = _json;\n const def = schema._zod.def;\n json.type = \"object\";\n // For looseRecord with regex patterns, use patternProperties\n // This correctly represents \"only validate keys matching the pattern\" semantics\n // and composes well with allOf (intersections)\n const keyType = def.keyType;\n const keyBag = keyType._zod.bag;\n const patterns = keyBag?.patterns;\n if (def.mode === \"loose\" && patterns && patterns.size > 0) {\n // Use patternProperties for looseRecord with regex patterns\n const valueSchema = (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"patternProperties\", \"*\"],\n });\n json.patternProperties = {};\n for (const pattern of patterns) {\n json.patternProperties[pattern.source] = valueSchema;\n }\n }\n else {\n // Default behavior: use propertyNames + additionalProperties\n if (ctx.target === \"draft-07\" || ctx.target === \"draft-2020-12\") {\n json.propertyNames = (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.keyType, ctx, {\n ...params,\n path: [...params.path, \"propertyNames\"],\n });\n }\n json.additionalProperties = (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.valueType, ctx, {\n ...params,\n path: [...params.path, \"additionalProperties\"],\n });\n }\n // Add required for keys with discrete values (enum, literal, etc.)\n const keyValues = keyType._zod.values;\n if (keyValues) {\n const validKeyValues = [...keyValues].filter((v) => typeof v === \"string\" || typeof v === \"number\");\n if (validKeyValues.length > 0) {\n json.required = validKeyValues;\n }\n }\n};\nconst nullableProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n const inner = (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n if (ctx.target === \"openapi-3.0\") {\n seen.ref = def.innerType;\n json.nullable = true;\n }\n else {\n json.anyOf = [inner, { type: \"null\" }];\n }\n};\nconst nonoptionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nconst defaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.default = JSON.parse(JSON.stringify(def.defaultValue));\n};\nconst prefaultProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n if (ctx.io === \"input\")\n json._prefault = JSON.parse(JSON.stringify(def.defaultValue));\n};\nconst catchProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n let catchValue;\n try {\n catchValue = def.catchValue(undefined);\n }\n catch {\n throw new Error(\"Dynamic catch values are not supported in JSON Schema\");\n }\n json.default = catchValue;\n};\nconst pipeProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n const inIsTransform = def.in._zod.traits.has(\"$ZodTransform\");\n const innerType = ctx.io === \"input\" ? (inIsTransform ? def.out : def.in) : def.out;\n (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\nconst readonlyProcessor = (schema, ctx, json, params) => {\n const def = schema._zod.def;\n (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n json.readOnly = true;\n};\nconst promiseProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nconst optionalProcessor = (schema, ctx, _json, params) => {\n const def = schema._zod.def;\n (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(def.innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = def.innerType;\n};\nconst lazyProcessor = (schema, ctx, _json, params) => {\n const innerType = schema._zod.innerType;\n (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(innerType, ctx, params);\n const seen = ctx.seen.get(schema);\n seen.ref = innerType;\n};\n// ==================== ALL PROCESSORS ====================\nconst allProcessors = {\n string: stringProcessor,\n number: numberProcessor,\n boolean: booleanProcessor,\n bigint: bigintProcessor,\n symbol: symbolProcessor,\n null: nullProcessor,\n undefined: undefinedProcessor,\n void: voidProcessor,\n never: neverProcessor,\n any: anyProcessor,\n unknown: unknownProcessor,\n date: dateProcessor,\n enum: enumProcessor,\n literal: literalProcessor,\n nan: nanProcessor,\n template_literal: templateLiteralProcessor,\n file: fileProcessor,\n success: successProcessor,\n custom: customProcessor,\n function: functionProcessor,\n transform: transformProcessor,\n map: mapProcessor,\n set: setProcessor,\n array: arrayProcessor,\n object: objectProcessor,\n union: unionProcessor,\n intersection: intersectionProcessor,\n tuple: tupleProcessor,\n record: recordProcessor,\n nullable: nullableProcessor,\n nonoptional: nonoptionalProcessor,\n default: defaultProcessor,\n prefault: prefaultProcessor,\n catch: catchProcessor,\n pipe: pipeProcessor,\n readonly: readonlyProcessor,\n promise: promiseProcessor,\n optional: optionalProcessor,\n lazy: lazyProcessor,\n};\nfunction toJSONSchema(input, params) {\n if (\"_idmap\" in input) {\n // Registry case\n const registry = input;\n const ctx = (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.initializeContext)({ ...params, processors: allProcessors });\n const defs = {};\n // First pass: process all schemas to build the seen map\n for (const entry of registry._idmap.entries()) {\n const [_, schema] = entry;\n (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(schema, ctx);\n }\n const schemas = {};\n const external = {\n registry,\n uri: params?.uri,\n defs,\n };\n // Update the context with external configuration\n ctx.external = external;\n // Second pass: emit each schema\n for (const entry of registry._idmap.entries()) {\n const [key, schema] = entry;\n (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.extractDefs)(ctx, schema);\n schemas[key] = (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.finalize)(ctx, schema);\n }\n if (Object.keys(defs).length > 0) {\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n schemas.__shared = {\n [defsSegment]: defs,\n };\n }\n return { schemas };\n }\n // Single schema case\n const ctx = (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.initializeContext)({ ...params, processors: allProcessors });\n (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.process)(input, ctx);\n (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.extractDefs)(ctx, input);\n return (0,_to_json_schema_js__WEBPACK_IMPORTED_MODULE_1__.finalize)(ctx, input);\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9qc29uLXNjaGVtYS1wcm9jZXNzb3JzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBeUY7QUFDL0M7QUFDMUM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBLFlBQVksc0RBQXNEO0FBQ2xFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQztBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QjtBQUM1Qiw0QkFBNEI7QUFDNUI7QUFDQSxpQkFBaUI7QUFDakI7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0EsWUFBWSwyRUFBMkU7QUFDdkY7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0EsbUJBQW1C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QUFXO0FBQ3ZCLDJCQUEyQiw0REFBUTtBQUNuQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQjtBQUNqQjtBQUNBO0FBQ0EsZ0JBQWdCLHFFQUFpQixHQUFHLHNDQUFzQztBQUMxRSxJQUFJLDJEQUFPO0FBQ1gsSUFBSSwrREFBVztBQUNmLFdBQVcsNERBQVE7QUFDbkIiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvanNvbi1zY2hlbWEtcHJvY2Vzc29ycy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBleHRyYWN0RGVmcywgZmluYWxpemUsIGluaXRpYWxpemVDb250ZXh0LCBwcm9jZXNzLCB9IGZyb20gXCIuL3RvLWpzb24tc2NoZW1hLmpzXCI7XG5pbXBvcnQgeyBnZXRFbnVtVmFsdWVzIH0gZnJvbSBcIi4vdXRpbC5qc1wiO1xuY29uc3QgZm9ybWF0TWFwID0ge1xuICAgIGd1aWQ6IFwidXVpZFwiLFxuICAgIHVybDogXCJ1cmlcIixcbiAgICBkYXRldGltZTogXCJkYXRlLXRpbWVcIixcbiAgICBqc29uX3N0cmluZzogXCJqc29uLXN0cmluZ1wiLFxuICAgIHJlZ2V4OiBcIlwiLCAvLyBkbyBub3Qgc2V0XG59O1xuLy8gPT09PT09PT09PT09PT09PT09PT0gU0lNUExFIFRZUEUgUFJPQ0VTU09SUyA9PT09PT09PT09PT09PT09PT09PVxuZXhwb3J0IGNvbnN0IHN0cmluZ1Byb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBqc29uID0gX2pzb247XG4gICAganNvbi50eXBlID0gXCJzdHJpbmdcIjtcbiAgICBjb25zdCB7IG1pbmltdW0sIG1heGltdW0sIGZvcm1hdCwgcGF0dGVybnMsIGNvbnRlbnRFbmNvZGluZyB9ID0gc2NoZW1hLl96b2RcbiAgICAgICAgLmJhZztcbiAgICBpZiAodHlwZW9mIG1pbmltdW0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGpzb24ubWluTGVuZ3RoID0gbWluaW11bTtcbiAgICBpZiAodHlwZW9mIG1heGltdW0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGpzb24ubWF4TGVuZ3RoID0gbWF4aW11bTtcbiAgICAvLyBjdXN0b20gcGF0dGVybiBvdmVycmlkZXMgZm9ybWF0XG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgICBqc29uLmZvcm1hdCA9IGZvcm1hdE1hcFtmb3JtYXRdID8/IGZvcm1hdDtcbiAgICAgICAgaWYgKGpzb24uZm9ybWF0ID09PSBcIlwiKVxuICAgICAgICAgICAgZGVsZXRlIGpzb24uZm9ybWF0OyAvLyBlbXB0eSBmb3JtYXQgaXMgbm90IHZhbGlkXG4gICAgICAgIC8vIEpTT04gU2NoZW1hIGZvcm1hdDogXCJ0aW1lXCIgcmVxdWlyZXMgYSBmdWxsIHRpbWUgd2l0aCBvZmZzZXQgb3IgWlxuICAgICAgICAvLyB6Lmlzby50aW1lKCkgZG9lcyBub3QgaW5jbHVkZSB0aW1lem9uZSBpbmZvcm1hdGlvbiwgc28gZm9ybWF0OiBcInRpbWVcIiBzaG91bGQgbmV2ZXIgYmUgdXNlZFxuICAgICAgICBpZiAoZm9ybWF0ID09PSBcInRpbWVcIikge1xuICAgICAgICAgICAgZGVsZXRlIGpzb24uZm9ybWF0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb250ZW50RW5jb2RpbmcpXG4gICAgICAgIGpzb24uY29udGVudEVuY29kaW5nID0gY29udGVudEVuY29kaW5nO1xuICAgIGlmIChwYXR0ZXJucyAmJiBwYXR0ZXJucy5zaXplID4gMCkge1xuICAgICAgICBjb25zdCByZWdleGVzID0gWy4uLnBhdHRlcm5zXTtcbiAgICAgICAgaWYgKHJlZ2V4ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAganNvbi5wYXR0ZXJuID0gcmVnZXhlc1swXS5zb3VyY2U7XG4gICAgICAgIGVsc2UgaWYgKHJlZ2V4ZXMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAganNvbi5hbGxPZiA9IFtcbiAgICAgICAgICAgICAgICAuLi5yZWdleGVzLm1hcCgocmVnZXgpID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIC4uLihjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTA3XCIgfHwgY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wNFwiIHx8IGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyB7IHR5cGU6IFwic3RyaW5nXCIgfVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IHJlZ2V4LnNvdXJjZSxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBudW1iZXJQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgY29uc3QganNvbiA9IF9qc29uO1xuICAgIGNvbnN0IHsgbWluaW11bSwgbWF4aW11bSwgZm9ybWF0LCBtdWx0aXBsZU9mLCBleGNsdXNpdmVNYXhpbXVtLCBleGNsdXNpdmVNaW5pbXVtIH0gPSBzY2hlbWEuX3pvZC5iYWc7XG4gICAgaWYgKHR5cGVvZiBmb3JtYXQgPT09IFwic3RyaW5nXCIgJiYgZm9ybWF0LmluY2x1ZGVzKFwiaW50XCIpKVxuICAgICAgICBqc29uLnR5cGUgPSBcImludGVnZXJcIjtcbiAgICBlbHNlXG4gICAgICAgIGpzb24udHlwZSA9IFwibnVtYmVyXCI7XG4gICAgLy8gd2hlbiBib3RoIG1pbmltdW0gYW5kIGV4Y2x1c2l2ZU1pbmltdW0gZXhpc3QsIHBpY2sgdGhlIG1vcmUgcmVzdHJpY3RpdmUgb25lXG4gICAgY29uc3QgZXhNaW4gPSB0eXBlb2YgZXhjbHVzaXZlTWluaW11bSA9PT0gXCJudW1iZXJcIiAmJiBleGNsdXNpdmVNaW5pbXVtID49IChtaW5pbXVtID8/IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7XG4gICAgY29uc3QgZXhNYXggPSB0eXBlb2YgZXhjbHVzaXZlTWF4aW11bSA9PT0gXCJudW1iZXJcIiAmJiBleGNsdXNpdmVNYXhpbXVtIDw9IChtYXhpbXVtID8/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG4gICAgY29uc3QgbGVnYWN5ID0gY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wNFwiIHx8IGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIjtcbiAgICBpZiAoZXhNaW4pIHtcbiAgICAgICAgaWYgKGxlZ2FjeSkge1xuICAgICAgICAgICAganNvbi5taW5pbXVtID0gZXhjbHVzaXZlTWluaW11bTtcbiAgICAgICAgICAgIGpzb24uZXhjbHVzaXZlTWluaW11bSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBqc29uLmV4Y2x1c2l2ZU1pbmltdW0gPSBleGNsdXNpdmVNaW5pbXVtO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGVvZiBtaW5pbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGpzb24ubWluaW11bSA9IG1pbmltdW07XG4gICAgfVxuICAgIGlmIChleE1heCkge1xuICAgICAgICBpZiAobGVnYWN5KSB7XG4gICAgICAgICAgICBqc29uLm1heGltdW0gPSBleGNsdXNpdmVNYXhpbXVtO1xuICAgICAgICAgICAganNvbi5leGNsdXNpdmVNYXhpbXVtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGpzb24uZXhjbHVzaXZlTWF4aW11bSA9IGV4Y2x1c2l2ZU1heGltdW07XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIG1heGltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAganNvbi5tYXhpbXVtID0gbWF4aW11bTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBtdWx0aXBsZU9mID09PSBcIm51bWJlclwiKVxuICAgICAgICBqc29uLm11bHRpcGxlT2YgPSBtdWx0aXBsZU9mO1xufTtcbmV4cG9ydCBjb25zdCBib29sZWFuUHJvY2Vzc29yID0gKF9zY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBqc29uLnR5cGUgPSBcImJvb2xlYW5cIjtcbn07XG5leHBvcnQgY29uc3QgYmlnaW50UHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkJpZ0ludCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBzeW1ib2xQcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3ltYm9scyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBudWxsUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwganNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudGFyZ2V0ID09PSBcIm9wZW5hcGktMy4wXCIpIHtcbiAgICAgICAganNvbi50eXBlID0gXCJzdHJpbmdcIjtcbiAgICAgICAganNvbi5udWxsYWJsZSA9IHRydWU7XG4gICAgICAgIGpzb24uZW51bSA9IFtudWxsXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGpzb24udHlwZSA9IFwibnVsbFwiO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgdW5kZWZpbmVkUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuZGVmaW5lZCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCB2b2lkUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlZvaWQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgbmV2ZXJQcm9jZXNzb3IgPSAoX3NjaGVtYSwgX2N0eCwganNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGpzb24ubm90ID0ge307XG59O1xuZXhwb3J0IGNvbnN0IGFueVByb2Nlc3NvciA9IChfc2NoZW1hLCBfY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIC8vIGVtcHR5IHNjaGVtYSBhY2NlcHRzIGFueXRoaW5nXG59O1xuZXhwb3J0IGNvbnN0IHVua25vd25Qcm9jZXNzb3IgPSAoX3NjaGVtYSwgX2N0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICAvLyBlbXB0eSBzY2hlbWEgYWNjZXB0cyBhbnl0aGluZ1xufTtcbmV4cG9ydCBjb25zdCBkYXRlUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkRhdGUgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgZW51bVByb2Nlc3NvciA9IChzY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgdmFsdWVzID0gZ2V0RW51bVZhbHVlcyhkZWYuZW50cmllcyk7XG4gICAgLy8gTnVtYmVyIGVudW1zIGNhbiBoYXZlIGJvdGggc3RyaW5nIGFuZCBudW1iZXIgdmFsdWVzXG4gICAgaWYgKHZhbHVlcy5ldmVyeSgodikgPT4gdHlwZW9mIHYgPT09IFwibnVtYmVyXCIpKVxuICAgICAgICBqc29uLnR5cGUgPSBcIm51bWJlclwiO1xuICAgIGlmICh2YWx1ZXMuZXZlcnkoKHYpID0+IHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSlcbiAgICAgICAganNvbi50eXBlID0gXCJzdHJpbmdcIjtcbiAgICBqc29uLmVudW0gPSB2YWx1ZXM7XG59O1xuZXhwb3J0IGNvbnN0IGxpdGVyYWxQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgdmFscyA9IFtdO1xuICAgIGZvciAoY29uc3QgdmFsIG9mIGRlZi52YWx1ZXMpIHtcbiAgICAgICAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTGl0ZXJhbCBgdW5kZWZpbmVkYCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkbyBub3QgYWRkIHRvIHZhbHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgdmFsID09PSBcImJpZ2ludFwiKSB7XG4gICAgICAgICAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQmlnSW50IGxpdGVyYWxzIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHMucHVzaChOdW1iZXIodmFsKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YWxzLnB1c2godmFsKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodmFscy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gZG8gbm90aGluZyAoYW4gdW5kZWZpbmVkIGxpdGVyYWwgd2FzIHN0cmlwcGVkKVxuICAgIH1cbiAgICBlbHNlIGlmICh2YWxzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCB2YWwgPSB2YWxzWzBdO1xuICAgICAgICBqc29uLnR5cGUgPSB2YWwgPT09IG51bGwgPyBcIm51bGxcIiA6IHR5cGVvZiB2YWw7XG4gICAgICAgIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTA0XCIgfHwgY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiKSB7XG4gICAgICAgICAgICBqc29uLmVudW0gPSBbdmFsXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGpzb24uY29uc3QgPSB2YWw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICh2YWxzLmV2ZXJ5KCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikpXG4gICAgICAgICAgICBqc29uLnR5cGUgPSBcIm51bWJlclwiO1xuICAgICAgICBpZiAodmFscy5ldmVyeSgodikgPT4gdHlwZW9mIHYgPT09IFwic3RyaW5nXCIpKVxuICAgICAgICAgICAganNvbi50eXBlID0gXCJzdHJpbmdcIjtcbiAgICAgICAgaWYgKHZhbHMuZXZlcnkoKHYpID0+IHR5cGVvZiB2ID09PSBcImJvb2xlYW5cIikpXG4gICAgICAgICAgICBqc29uLnR5cGUgPSBcImJvb2xlYW5cIjtcbiAgICAgICAgaWYgKHZhbHMuZXZlcnkoKHYpID0+IHYgPT09IG51bGwpKVxuICAgICAgICAgICAganNvbi50eXBlID0gXCJudWxsXCI7XG4gICAgICAgIGpzb24uZW51bSA9IHZhbHM7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBuYW5Qcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTmFOIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHRlbXBsYXRlTGl0ZXJhbFByb2Nlc3NvciA9IChzY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBfanNvbiA9IGpzb247XG4gICAgY29uc3QgcGF0dGVybiA9IHNjaGVtYS5fem9kLnBhdHRlcm47XG4gICAgaWYgKCFwYXR0ZXJuKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJQYXR0ZXJuIG5vdCBmb3VuZCBpbiB0ZW1wbGF0ZSBsaXRlcmFsXCIpO1xuICAgIF9qc29uLnR5cGUgPSBcInN0cmluZ1wiO1xuICAgIF9qc29uLnBhdHRlcm4gPSBwYXR0ZXJuLnNvdXJjZTtcbn07XG5leHBvcnQgY29uc3QgZmlsZVByb2Nlc3NvciA9IChzY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBfanNvbiA9IGpzb247XG4gICAgY29uc3QgZmlsZSA9IHtcbiAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgZm9ybWF0OiBcImJpbmFyeVwiLFxuICAgICAgICBjb250ZW50RW5jb2Rpbmc6IFwiYmluYXJ5XCIsXG4gICAgfTtcbiAgICBjb25zdCB7IG1pbmltdW0sIG1heGltdW0sIG1pbWUgfSA9IHNjaGVtYS5fem9kLmJhZztcbiAgICBpZiAobWluaW11bSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBmaWxlLm1pbkxlbmd0aCA9IG1pbmltdW07XG4gICAgaWYgKG1heGltdW0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgZmlsZS5tYXhMZW5ndGggPSBtYXhpbXVtO1xuICAgIGlmIChtaW1lKSB7XG4gICAgICAgIGlmIChtaW1lLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZmlsZS5jb250ZW50TWVkaWFUeXBlID0gbWltZVswXTtcbiAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oX2pzb24sIGZpbGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihfanNvbiwgZmlsZSk7IC8vIHNoYXJlZCBwcm9wcyBhdCByb290XG4gICAgICAgICAgICBfanNvbi5hbnlPZiA9IG1pbWUubWFwKChtKSA9PiAoeyBjb250ZW50TWVkaWFUeXBlOiBtIH0pKTsgLy8gb25seSBjb250ZW50TWVkaWFUeXBlIGRpZmZlcnNcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihfanNvbiwgZmlsZSk7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBzdWNjZXNzUHJvY2Vzc29yID0gKF9zY2hlbWEsIF9jdHgsIGpzb24sIF9wYXJhbXMpID0+IHtcbiAgICBqc29uLnR5cGUgPSBcImJvb2xlYW5cIjtcbn07XG5leHBvcnQgY29uc3QgY3VzdG9tUHJvY2Vzc29yID0gKF9zY2hlbWEsIGN0eCwgX2pzb24sIF9wYXJhbXMpID0+IHtcbiAgICBpZiAoY3R4LnVucmVwcmVzZW50YWJsZSA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkN1c3RvbSB0eXBlcyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBmdW5jdGlvblByb2Nlc3NvciA9IChfc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgaWYgKGN0eC51bnJlcHJlc2VudGFibGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJGdW5jdGlvbiB0eXBlcyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1Qcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVHJhbnNmb3JtcyBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBtYXBQcm9jZXNzb3IgPSAoX3NjaGVtYSwgY3R4LCBfanNvbiwgX3BhcmFtcykgPT4ge1xuICAgIGlmIChjdHgudW5yZXByZXNlbnRhYmxlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTWFwIGNhbm5vdCBiZSByZXByZXNlbnRlZCBpbiBKU09OIFNjaGVtYVwiKTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IHNldFByb2Nlc3NvciA9IChfc2NoZW1hLCBjdHgsIF9qc29uLCBfcGFyYW1zKSA9PiB7XG4gICAgaWYgKGN0eC51bnJlcHJlc2VudGFibGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTZXQgY2Fubm90IGJlIHJlcHJlc2VudGVkIGluIEpTT04gU2NoZW1hXCIpO1xuICAgIH1cbn07XG4vLyA9PT09PT09PT09PT09PT09PT09PSBDT01QT1NJVEUgVFlQRSBQUk9DRVNTT1JTID09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgY29uc3QgYXJyYXlQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBqc29uID0gX2pzb247XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIGNvbnN0IHsgbWluaW11bSwgbWF4aW11bSB9ID0gc2NoZW1hLl96b2QuYmFnO1xuICAgIGlmICh0eXBlb2YgbWluaW11bSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAganNvbi5taW5JdGVtcyA9IG1pbmltdW07XG4gICAgaWYgKHR5cGVvZiBtYXhpbXVtID09PSBcIm51bWJlclwiKVxuICAgICAgICBqc29uLm1heEl0ZW1zID0gbWF4aW11bTtcbiAgICBqc29uLnR5cGUgPSBcImFycmF5XCI7XG4gICAganNvbi5pdGVtcyA9IHByb2Nlc3MoZGVmLmVsZW1lbnQsIGN0eCwge1xuICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgIHBhdGg6IFsuLi5wYXJhbXMucGF0aCwgXCJpdGVtc1wiXSxcbiAgICB9KTtcbn07XG5leHBvcnQgY29uc3Qgb2JqZWN0UHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QganNvbiA9IF9qc29uO1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBqc29uLnR5cGUgPSBcIm9iamVjdFwiO1xuICAgIGpzb24ucHJvcGVydGllcyA9IHt9O1xuICAgIGNvbnN0IHNoYXBlID0gZGVmLnNoYXBlO1xuICAgIGZvciAoY29uc3Qga2V5IGluIHNoYXBlKSB7XG4gICAgICAgIGpzb24ucHJvcGVydGllc1trZXldID0gcHJvY2VzcyhzaGFwZVtrZXldLCBjdHgsIHtcbiAgICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICAgIHBhdGg6IFsuLi5wYXJhbXMucGF0aCwgXCJwcm9wZXJ0aWVzXCIsIGtleV0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyByZXF1aXJlZCBrZXlzXG4gICAgY29uc3QgYWxsS2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMoc2hhcGUpKTtcbiAgICBjb25zdCByZXF1aXJlZEtleXMgPSBuZXcgU2V0KFsuLi5hbGxLZXlzXS5maWx0ZXIoKGtleSkgPT4ge1xuICAgICAgICBjb25zdCB2ID0gZGVmLnNoYXBlW2tleV0uX3pvZDtcbiAgICAgICAgaWYgKGN0eC5pbyA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gdi5vcHRpbiA9PT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHYub3B0b3V0ID09PSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgaWYgKHJlcXVpcmVkS2V5cy5zaXplID4gMCkge1xuICAgICAgICBqc29uLnJlcXVpcmVkID0gQXJyYXkuZnJvbShyZXF1aXJlZEtleXMpO1xuICAgIH1cbiAgICAvLyBjYXRjaGFsbFxuICAgIGlmIChkZWYuY2F0Y2hhbGw/Ll96b2QuZGVmLnR5cGUgPT09IFwibmV2ZXJcIikge1xuICAgICAgICAvLyBzdHJpY3RcbiAgICAgICAganNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmICghZGVmLmNhdGNoYWxsKSB7XG4gICAgICAgIC8vIHJlZ3VsYXJcbiAgICAgICAgaWYgKGN0eC5pbyA9PT0gXCJvdXRwdXRcIilcbiAgICAgICAgICAgIGpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoZGVmLmNhdGNoYWxsKSB7XG4gICAgICAgIGpzb24uYWRkaXRpb25hbFByb3BlcnRpZXMgPSBwcm9jZXNzKGRlZi5jYXRjaGFsbCwgY3R4LCB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIl0sXG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5leHBvcnQgY29uc3QgdW5pb25Qcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICAvLyBFeGNsdXNpdmUgdW5pb25zIChpbmNsdXNpdmUgPT09IGZhbHNlKSB1c2Ugb25lT2YgKGV4YWN0bHkgb25lIG1hdGNoKSBpbnN0ZWFkIG9mIGFueU9mIChvbmUgb3IgbW9yZSBtYXRjaGVzKVxuICAgIC8vIFRoaXMgaW5jbHVkZXMgYm90aCB6LnhvcigpIGFuZCBkaXNjcmltaW5hdGVkIHVuaW9uc1xuICAgIGNvbnN0IGlzRXhjbHVzaXZlID0gZGVmLmluY2x1c2l2ZSA9PT0gZmFsc2U7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGRlZi5vcHRpb25zLm1hcCgoeCwgaSkgPT4gcHJvY2Vzcyh4LCBjdHgsIHtcbiAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIGlzRXhjbHVzaXZlID8gXCJvbmVPZlwiIDogXCJhbnlPZlwiLCBpXSxcbiAgICB9KSk7XG4gICAgaWYgKGlzRXhjbHVzaXZlKSB7XG4gICAgICAgIGpzb24ub25lT2YgPSBvcHRpb25zO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAganNvbi5hbnlPZiA9IG9wdGlvbnM7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBpbnRlcnNlY3Rpb25Qcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBjb25zdCBhID0gcHJvY2VzcyhkZWYubGVmdCwgY3R4LCB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgcGF0aDogWy4uLnBhcmFtcy5wYXRoLCBcImFsbE9mXCIsIDBdLFxuICAgIH0pO1xuICAgIGNvbnN0IGIgPSBwcm9jZXNzKGRlZi5yaWdodCwgY3R4LCB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgcGF0aDogWy4uLnBhcmFtcy5wYXRoLCBcImFsbE9mXCIsIDFdLFxuICAgIH0pO1xuICAgIGNvbnN0IGlzU2ltcGxlSW50ZXJzZWN0aW9uID0gKHZhbCkgPT4gXCJhbGxPZlwiIGluIHZhbCAmJiBPYmplY3Qua2V5cyh2YWwpLmxlbmd0aCA9PT0gMTtcbiAgICBjb25zdCBhbGxPZiA9IFtcbiAgICAgICAgLi4uKGlzU2ltcGxlSW50ZXJzZWN0aW9uKGEpID8gYS5hbGxPZiA6IFthXSksXG4gICAgICAgIC4uLihpc1NpbXBsZUludGVyc2VjdGlvbihiKSA/IGIuYWxsT2YgOiBbYl0pLFxuICAgIF07XG4gICAganNvbi5hbGxPZiA9IGFsbE9mO1xufTtcbmV4cG9ydCBjb25zdCB0dXBsZVByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBfanNvbjtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAganNvbi50eXBlID0gXCJhcnJheVwiO1xuICAgIGNvbnN0IHByZWZpeFBhdGggPSBjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIiA/IFwicHJlZml4SXRlbXNcIiA6IFwiaXRlbXNcIjtcbiAgICBjb25zdCByZXN0UGF0aCA9IGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiID8gXCJpdGVtc1wiIDogY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiID8gXCJpdGVtc1wiIDogXCJhZGRpdGlvbmFsSXRlbXNcIjtcbiAgICBjb25zdCBwcmVmaXhJdGVtcyA9IGRlZi5pdGVtcy5tYXAoKHgsIGkpID0+IHByb2Nlc3MoeCwgY3R4LCB7XG4gICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgcGF0aDogWy4uLnBhcmFtcy5wYXRoLCBwcmVmaXhQYXRoLCBpXSxcbiAgICB9KSk7XG4gICAgY29uc3QgcmVzdCA9IGRlZi5yZXN0XG4gICAgICAgID8gcHJvY2VzcyhkZWYucmVzdCwgY3R4LCB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIHJlc3RQYXRoLCAuLi4oY3R4LnRhcmdldCA9PT0gXCJvcGVuYXBpLTMuMFwiID8gW2RlZi5pdGVtcy5sZW5ndGhdIDogW10pXSxcbiAgICAgICAgfSlcbiAgICAgICAgOiBudWxsO1xuICAgIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIikge1xuICAgICAgICBqc29uLnByZWZpeEl0ZW1zID0gcHJlZml4SXRlbXM7XG4gICAgICAgIGlmIChyZXN0KSB7XG4gICAgICAgICAgICBqc29uLml0ZW1zID0gcmVzdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChjdHgudGFyZ2V0ID09PSBcIm9wZW5hcGktMy4wXCIpIHtcbiAgICAgICAganNvbi5pdGVtcyA9IHtcbiAgICAgICAgICAgIGFueU9mOiBwcmVmaXhJdGVtcyxcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgIGpzb24uaXRlbXMuYW55T2YucHVzaChyZXN0KTtcbiAgICAgICAgfVxuICAgICAgICBqc29uLm1pbkl0ZW1zID0gcHJlZml4SXRlbXMubGVuZ3RoO1xuICAgICAgICBpZiAoIXJlc3QpIHtcbiAgICAgICAgICAgIGpzb24ubWF4SXRlbXMgPSBwcmVmaXhJdGVtcy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGpzb24uaXRlbXMgPSBwcmVmaXhJdGVtcztcbiAgICAgICAgaWYgKHJlc3QpIHtcbiAgICAgICAgICAgIGpzb24uYWRkaXRpb25hbEl0ZW1zID0gcmVzdDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBsZW5ndGhcbiAgICBjb25zdCB7IG1pbmltdW0sIG1heGltdW0gfSA9IHNjaGVtYS5fem9kLmJhZztcbiAgICBpZiAodHlwZW9mIG1pbmltdW0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgIGpzb24ubWluSXRlbXMgPSBtaW5pbXVtO1xuICAgIGlmICh0eXBlb2YgbWF4aW11bSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAganNvbi5tYXhJdGVtcyA9IG1heGltdW07XG59O1xuZXhwb3J0IGNvbnN0IHJlY29yZFByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGpzb24gPSBfanNvbjtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAganNvbi50eXBlID0gXCJvYmplY3RcIjtcbiAgICAvLyBGb3IgbG9vc2VSZWNvcmQgd2l0aCByZWdleCBwYXR0ZXJucywgdXNlIHBhdHRlcm5Qcm9wZXJ0aWVzXG4gICAgLy8gVGhpcyBjb3JyZWN0bHkgcmVwcmVzZW50cyBcIm9ubHkgdmFsaWRhdGUga2V5cyBtYXRjaGluZyB0aGUgcGF0dGVyblwiIHNlbWFudGljc1xuICAgIC8vIGFuZCBjb21wb3NlcyB3ZWxsIHdpdGggYWxsT2YgKGludGVyc2VjdGlvbnMpXG4gICAgY29uc3Qga2V5VHlwZSA9IGRlZi5rZXlUeXBlO1xuICAgIGNvbnN0IGtleUJhZyA9IGtleVR5cGUuX3pvZC5iYWc7XG4gICAgY29uc3QgcGF0dGVybnMgPSBrZXlCYWc/LnBhdHRlcm5zO1xuICAgIGlmIChkZWYubW9kZSA9PT0gXCJsb29zZVwiICYmIHBhdHRlcm5zICYmIHBhdHRlcm5zLnNpemUgPiAwKSB7XG4gICAgICAgIC8vIFVzZSBwYXR0ZXJuUHJvcGVydGllcyBmb3IgbG9vc2VSZWNvcmQgd2l0aCByZWdleCBwYXR0ZXJuc1xuICAgICAgICBjb25zdCB2YWx1ZVNjaGVtYSA9IHByb2Nlc3MoZGVmLnZhbHVlVHlwZSwgY3R4LCB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIFwicGF0dGVyblByb3BlcnRpZXNcIiwgXCIqXCJdLFxuICAgICAgICB9KTtcbiAgICAgICAganNvbi5wYXR0ZXJuUHJvcGVydGllcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICAgICAgICAgIGpzb24ucGF0dGVyblByb3BlcnRpZXNbcGF0dGVybi5zb3VyY2VdID0gdmFsdWVTY2hlbWE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIERlZmF1bHQgYmVoYXZpb3I6IHVzZSBwcm9wZXJ0eU5hbWVzICsgYWRkaXRpb25hbFByb3BlcnRpZXNcbiAgICAgICAgaWYgKGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMDdcIiB8fCBjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIikge1xuICAgICAgICAgICAganNvbi5wcm9wZXJ0eU5hbWVzID0gcHJvY2VzcyhkZWYua2V5VHlwZSwgY3R4LCB7XG4gICAgICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgICAgICAgIHBhdGg6IFsuLi5wYXJhbXMucGF0aCwgXCJwcm9wZXJ0eU5hbWVzXCJdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAganNvbi5hZGRpdGlvbmFsUHJvcGVydGllcyA9IHByb2Nlc3MoZGVmLnZhbHVlVHlwZSwgY3R4LCB7XG4gICAgICAgICAgICAuLi5wYXJhbXMsXG4gICAgICAgICAgICBwYXRoOiBbLi4ucGFyYW1zLnBhdGgsIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIl0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBBZGQgcmVxdWlyZWQgZm9yIGtleXMgd2l0aCBkaXNjcmV0ZSB2YWx1ZXMgKGVudW0sIGxpdGVyYWwsIGV0Yy4pXG4gICAgY29uc3Qga2V5VmFsdWVzID0ga2V5VHlwZS5fem9kLnZhbHVlcztcbiAgICBpZiAoa2V5VmFsdWVzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkS2V5VmFsdWVzID0gWy4uLmtleVZhbHVlc10uZmlsdGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdiA9PT0gXCJudW1iZXJcIik7XG4gICAgICAgIGlmICh2YWxpZEtleVZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBqc29uLnJlcXVpcmVkID0gdmFsaWRLZXlWYWx1ZXM7XG4gICAgICAgIH1cbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IG51bGxhYmxlUHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBqc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgaW5uZXIgPSBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgaWYgKGN0eC50YXJnZXQgPT09IFwib3BlbmFwaS0zLjBcIikge1xuICAgICAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG4gICAgICAgIGpzb24ubnVsbGFibGUgPSB0cnVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAganNvbi5hbnlPZiA9IFtpbm5lciwgeyB0eXBlOiBcIm51bGxcIiB9XTtcbiAgICB9XG59O1xuZXhwb3J0IGNvbnN0IG5vbm9wdGlvbmFsUHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIHByb2Nlc3MoZGVmLmlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG59O1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIGpzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBkZWYuaW5uZXJUeXBlO1xuICAgIGpzb24uZGVmYXVsdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmLmRlZmF1bHRWYWx1ZSkpO1xufTtcbmV4cG9ydCBjb25zdCBwcmVmYXVsdFByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwganNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIHByb2Nlc3MoZGVmLmlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG4gICAgaWYgKGN0eC5pbyA9PT0gXCJpbnB1dFwiKVxuICAgICAgICBqc29uLl9wcmVmYXVsdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVmLmRlZmF1bHRWYWx1ZSkpO1xufTtcbmV4cG9ydCBjb25zdCBjYXRjaFByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwganNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIHByb2Nlc3MoZGVmLmlubmVyVHlwZSwgY3R4LCBwYXJhbXMpO1xuICAgIGNvbnN0IHNlZW4gPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBzZWVuLnJlZiA9IGRlZi5pbm5lclR5cGU7XG4gICAgbGV0IGNhdGNoVmFsdWU7XG4gICAgdHJ5IHtcbiAgICAgICAgY2F0Y2hWYWx1ZSA9IGRlZi5jYXRjaFZhbHVlKHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRHluYW1pYyBjYXRjaCB2YWx1ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gSlNPTiBTY2hlbWFcIik7XG4gICAgfVxuICAgIGpzb24uZGVmYXVsdCA9IGNhdGNoVmFsdWU7XG59O1xuZXhwb3J0IGNvbnN0IHBpcGVQcm9jZXNzb3IgPSAoc2NoZW1hLCBjdHgsIF9qc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgaW5Jc1RyYW5zZm9ybSA9IGRlZi5pbi5fem9kLnRyYWl0cy5oYXMoXCIkWm9kVHJhbnNmb3JtXCIpO1xuICAgIGNvbnN0IGlubmVyVHlwZSA9IGN0eC5pbyA9PT0gXCJpbnB1dFwiID8gKGluSXNUcmFuc2Zvcm0gPyBkZWYub3V0IDogZGVmLmluKSA6IGRlZi5vdXQ7XG4gICAgcHJvY2Vzcyhpbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBpbm5lclR5cGU7XG59O1xuZXhwb3J0IGNvbnN0IHJlYWRvbmx5UHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBqc29uLCBwYXJhbXMpID0+IHtcbiAgICBjb25zdCBkZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgcHJvY2VzcyhkZWYuaW5uZXJUeXBlLCBjdHgsIHBhcmFtcyk7XG4gICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIHNlZW4ucmVmID0gZGVmLmlubmVyVHlwZTtcbiAgICBqc29uLnJlYWRPbmx5ID0gdHJ1ZTtcbn07XG5leHBvcnQgY29uc3QgcHJvbWlzZVByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBkZWYuaW5uZXJUeXBlO1xufTtcbmV4cG9ydCBjb25zdCBvcHRpb25hbFByb2Nlc3NvciA9IChzY2hlbWEsIGN0eCwgX2pzb24sIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBwcm9jZXNzKGRlZi5pbm5lclR5cGUsIGN0eCwgcGFyYW1zKTtcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgc2Vlbi5yZWYgPSBkZWYuaW5uZXJUeXBlO1xufTtcbmV4cG9ydCBjb25zdCBsYXp5UHJvY2Vzc29yID0gKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKSA9PiB7XG4gICAgY29uc3QgaW5uZXJUeXBlID0gc2NoZW1hLl96b2QuaW5uZXJUeXBlO1xuICAgIHByb2Nlc3MoaW5uZXJUeXBlLCBjdHgsIHBhcmFtcyk7XG4gICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldChzY2hlbWEpO1xuICAgIHNlZW4ucmVmID0gaW5uZXJUeXBlO1xufTtcbi8vID09PT09PT09PT09PT09PT09PT09IEFMTCBQUk9DRVNTT1JTID09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgY29uc3QgYWxsUHJvY2Vzc29ycyA9IHtcbiAgICBzdHJpbmc6IHN0cmluZ1Byb2Nlc3NvcixcbiAgICBudW1iZXI6IG51bWJlclByb2Nlc3NvcixcbiAgICBib29sZWFuOiBib29sZWFuUHJvY2Vzc29yLFxuICAgIGJpZ2ludDogYmlnaW50UHJvY2Vzc29yLFxuICAgIHN5bWJvbDogc3ltYm9sUHJvY2Vzc29yLFxuICAgIG51bGw6IG51bGxQcm9jZXNzb3IsXG4gICAgdW5kZWZpbmVkOiB1bmRlZmluZWRQcm9jZXNzb3IsXG4gICAgdm9pZDogdm9pZFByb2Nlc3NvcixcbiAgICBuZXZlcjogbmV2ZXJQcm9jZXNzb3IsXG4gICAgYW55OiBhbnlQcm9jZXNzb3IsXG4gICAgdW5rbm93bjogdW5rbm93blByb2Nlc3NvcixcbiAgICBkYXRlOiBkYXRlUHJvY2Vzc29yLFxuICAgIGVudW06IGVudW1Qcm9jZXNzb3IsXG4gICAgbGl0ZXJhbDogbGl0ZXJhbFByb2Nlc3NvcixcbiAgICBuYW46IG5hblByb2Nlc3NvcixcbiAgICB0ZW1wbGF0ZV9saXRlcmFsOiB0ZW1wbGF0ZUxpdGVyYWxQcm9jZXNzb3IsXG4gICAgZmlsZTogZmlsZVByb2Nlc3NvcixcbiAgICBzdWNjZXNzOiBzdWNjZXNzUHJvY2Vzc29yLFxuICAgIGN1c3RvbTogY3VzdG9tUHJvY2Vzc29yLFxuICAgIGZ1bmN0aW9uOiBmdW5jdGlvblByb2Nlc3NvcixcbiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybVByb2Nlc3NvcixcbiAgICBtYXA6IG1hcFByb2Nlc3NvcixcbiAgICBzZXQ6IHNldFByb2Nlc3NvcixcbiAgICBhcnJheTogYXJyYXlQcm9jZXNzb3IsXG4gICAgb2JqZWN0OiBvYmplY3RQcm9jZXNzb3IsXG4gICAgdW5pb246IHVuaW9uUHJvY2Vzc29yLFxuICAgIGludGVyc2VjdGlvbjogaW50ZXJzZWN0aW9uUHJvY2Vzc29yLFxuICAgIHR1cGxlOiB0dXBsZVByb2Nlc3NvcixcbiAgICByZWNvcmQ6IHJlY29yZFByb2Nlc3NvcixcbiAgICBudWxsYWJsZTogbnVsbGFibGVQcm9jZXNzb3IsXG4gICAgbm9ub3B0aW9uYWw6IG5vbm9wdGlvbmFsUHJvY2Vzc29yLFxuICAgIGRlZmF1bHQ6IGRlZmF1bHRQcm9jZXNzb3IsXG4gICAgcHJlZmF1bHQ6IHByZWZhdWx0UHJvY2Vzc29yLFxuICAgIGNhdGNoOiBjYXRjaFByb2Nlc3NvcixcbiAgICBwaXBlOiBwaXBlUHJvY2Vzc29yLFxuICAgIHJlYWRvbmx5OiByZWFkb25seVByb2Nlc3NvcixcbiAgICBwcm9taXNlOiBwcm9taXNlUHJvY2Vzc29yLFxuICAgIG9wdGlvbmFsOiBvcHRpb25hbFByb2Nlc3NvcixcbiAgICBsYXp5OiBsYXp5UHJvY2Vzc29yLFxufTtcbmV4cG9ydCBmdW5jdGlvbiB0b0pTT05TY2hlbWEoaW5wdXQsIHBhcmFtcykge1xuICAgIGlmIChcIl9pZG1hcFwiIGluIGlucHV0KSB7XG4gICAgICAgIC8vIFJlZ2lzdHJ5IGNhc2VcbiAgICAgICAgY29uc3QgcmVnaXN0cnkgPSBpbnB1dDtcbiAgICAgICAgY29uc3QgY3R4ID0gaW5pdGlhbGl6ZUNvbnRleHQoeyAuLi5wYXJhbXMsIHByb2Nlc3NvcnM6IGFsbFByb2Nlc3NvcnMgfSk7XG4gICAgICAgIGNvbnN0IGRlZnMgPSB7fTtcbiAgICAgICAgLy8gRmlyc3QgcGFzczogcHJvY2VzcyBhbGwgc2NoZW1hcyB0byBidWlsZCB0aGUgc2VlbiBtYXBcbiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiByZWdpc3RyeS5faWRtYXAuZW50cmllcygpKSB7XG4gICAgICAgICAgICBjb25zdCBbXywgc2NoZW1hXSA9IGVudHJ5O1xuICAgICAgICAgICAgcHJvY2VzcyhzY2hlbWEsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NoZW1hcyA9IHt9O1xuICAgICAgICBjb25zdCBleHRlcm5hbCA9IHtcbiAgICAgICAgICAgIHJlZ2lzdHJ5LFxuICAgICAgICAgICAgdXJpOiBwYXJhbXM/LnVyaSxcbiAgICAgICAgICAgIGRlZnMsXG4gICAgICAgIH07XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgY29udGV4dCB3aXRoIGV4dGVybmFsIGNvbmZpZ3VyYXRpb25cbiAgICAgICAgY3R4LmV4dGVybmFsID0gZXh0ZXJuYWw7XG4gICAgICAgIC8vIFNlY29uZCBwYXNzOiBlbWl0IGVhY2ggc2NoZW1hXG4gICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVnaXN0cnkuX2lkbWFwLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3QgW2tleSwgc2NoZW1hXSA9IGVudHJ5O1xuICAgICAgICAgICAgZXh0cmFjdERlZnMoY3R4LCBzY2hlbWEpO1xuICAgICAgICAgICAgc2NoZW1hc1trZXldID0gZmluYWxpemUoY3R4LCBzY2hlbWEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhkZWZzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBkZWZzU2VnbWVudCA9IGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiID8gXCIkZGVmc1wiIDogXCJkZWZpbml0aW9uc1wiO1xuICAgICAgICAgICAgc2NoZW1hcy5fX3NoYXJlZCA9IHtcbiAgICAgICAgICAgICAgICBbZGVmc1NlZ21lbnRdOiBkZWZzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzY2hlbWFzIH07XG4gICAgfVxuICAgIC8vIFNpbmdsZSBzY2hlbWEgY2FzZVxuICAgIGNvbnN0IGN0eCA9IGluaXRpYWxpemVDb250ZXh0KHsgLi4ucGFyYW1zLCBwcm9jZXNzb3JzOiBhbGxQcm9jZXNzb3JzIH0pO1xuICAgIHByb2Nlc3MoaW5wdXQsIGN0eCk7XG4gICAgZXh0cmFjdERlZnMoY3R4LCBpbnB1dCk7XG4gICAgcmV0dXJuIGZpbmFsaXplKGN0eCwgaW5wdXQpO1xufVxuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/core/json-schema-processors.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/core/parse.js":
|
||
/*!*******************************************!*\
|
||
!*** ./node_modules/zod/v4/core/parse.js ***!
|
||
\*******************************************/
|
||
/***/ ((__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 */ _decode: () => (/* binding */ _decode),\n/* harmony export */ _decodeAsync: () => (/* binding */ _decodeAsync),\n/* harmony export */ _encode: () => (/* binding */ _encode),\n/* harmony export */ _encodeAsync: () => (/* binding */ _encodeAsync),\n/* harmony export */ _parse: () => (/* binding */ _parse),\n/* harmony export */ _parseAsync: () => (/* binding */ _parseAsync),\n/* harmony export */ _safeDecode: () => (/* binding */ _safeDecode),\n/* harmony export */ _safeDecodeAsync: () => (/* binding */ _safeDecodeAsync),\n/* harmony export */ _safeEncode: () => (/* binding */ _safeEncode),\n/* harmony export */ _safeEncodeAsync: () => (/* binding */ _safeEncodeAsync),\n/* harmony export */ _safeParse: () => (/* binding */ _safeParse),\n/* harmony export */ _safeParseAsync: () => (/* binding */ _safeParseAsync),\n/* harmony export */ decode: () => (/* binding */ decode),\n/* harmony export */ decodeAsync: () => (/* binding */ decodeAsync),\n/* harmony export */ encode: () => (/* binding */ encode),\n/* harmony export */ encodeAsync: () => (/* binding */ encodeAsync),\n/* harmony export */ parse: () => (/* binding */ parse),\n/* harmony export */ parseAsync: () => (/* binding */ parseAsync),\n/* harmony export */ safeDecode: () => (/* binding */ safeDecode),\n/* harmony export */ safeDecodeAsync: () => (/* binding */ safeDecodeAsync),\n/* harmony export */ safeEncode: () => (/* binding */ safeEncode),\n/* harmony export */ safeEncodeAsync: () => (/* binding */ safeEncodeAsync),\n/* harmony export */ safeParse: () => (/* binding */ safeParse),\n/* harmony export */ safeParseAsync: () => (/* binding */ safeParseAsync)\n/* harmony export */ });\n/* harmony import */ var _core_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/core.js\");\n/* harmony import */ var _errors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./errors.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/errors.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/util.js\");\n\n\n\nconst _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new _core_js__WEBPACK_IMPORTED_MODULE_0__.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => _util_js__WEBPACK_IMPORTED_MODULE_1__.finalizeIssue(iss, ctx, _core_js__WEBPACK_IMPORTED_MODULE_0__.config())));\n _util_js__WEBPACK_IMPORTED_MODULE_1__.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nconst parse = /* @__PURE__*/ _parse(_errors_js__WEBPACK_IMPORTED_MODULE_2__.$ZodRealError);\nconst _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => _util_js__WEBPACK_IMPORTED_MODULE_1__.finalizeIssue(iss, ctx, _core_js__WEBPACK_IMPORTED_MODULE_0__.config())));\n _util_js__WEBPACK_IMPORTED_MODULE_1__.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nconst parseAsync = /* @__PURE__*/ _parseAsync(_errors_js__WEBPACK_IMPORTED_MODULE_2__.$ZodRealError);\nconst _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new _core_js__WEBPACK_IMPORTED_MODULE_0__.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? _errors_js__WEBPACK_IMPORTED_MODULE_2__.$ZodError)(result.issues.map((iss) => _util_js__WEBPACK_IMPORTED_MODULE_1__.finalizeIssue(iss, ctx, _core_js__WEBPACK_IMPORTED_MODULE_0__.config()))),\n }\n : { success: true, data: result.value };\n};\nconst safeParse = /* @__PURE__*/ _safeParse(_errors_js__WEBPACK_IMPORTED_MODULE_2__.$ZodRealError);\nconst _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: true } : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => _util_js__WEBPACK_IMPORTED_MODULE_1__.finalizeIssue(iss, ctx, _core_js__WEBPACK_IMPORTED_MODULE_0__.config()))),\n }\n : { success: true, data: result.value };\n};\nconst safeParseAsync = /* @__PURE__*/ _safeParseAsync(_errors_js__WEBPACK_IMPORTED_MODULE_2__.$ZodRealError);\nconst _encode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _parse(_Err)(schema, value, ctx);\n};\nconst encode = /* @__PURE__*/ _encode(_errors_js__WEBPACK_IMPORTED_MODULE_2__.$ZodRealError);\nconst _decode = (_Err) => (schema, value, _ctx) => {\n return _parse(_Err)(schema, value, _ctx);\n};\nconst decode = /* @__PURE__*/ _decode(_errors_js__WEBPACK_IMPORTED_MODULE_2__.$ZodRealError);\nconst _encodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _parseAsync(_Err)(schema, value, ctx);\n};\nconst encodeAsync = /* @__PURE__*/ _encodeAsync(_errors_js__WEBPACK_IMPORTED_MODULE_2__.$ZodRealError);\nconst _decodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _parseAsync(_Err)(schema, value, _ctx);\n};\nconst decodeAsync = /* @__PURE__*/ _decodeAsync(_errors_js__WEBPACK_IMPORTED_MODULE_2__.$ZodRealError);\nconst _safeEncode = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _safeParse(_Err)(schema, value, ctx);\n};\nconst safeEncode = /* @__PURE__*/ _safeEncode(_errors_js__WEBPACK_IMPORTED_MODULE_2__.$ZodRealError);\nconst _safeDecode = (_Err) => (schema, value, _ctx) => {\n return _safeParse(_Err)(schema, value, _ctx);\n};\nconst safeDecode = /* @__PURE__*/ _safeDecode(_errors_js__WEBPACK_IMPORTED_MODULE_2__.$ZodRealError);\nconst _safeEncodeAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, direction: \"backward\" } : { direction: \"backward\" };\n return _safeParseAsync(_Err)(schema, value, ctx);\n};\nconst safeEncodeAsync = /* @__PURE__*/ _safeEncodeAsync(_errors_js__WEBPACK_IMPORTED_MODULE_2__.$ZodRealError);\nconst _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {\n return _safeParseAsync(_Err)(schema, value, _ctx);\n};\nconst safeDecodeAsync = /* @__PURE__*/ _safeDecodeAsync(_errors_js__WEBPACK_IMPORTED_MODULE_2__.$ZodRealError);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9wYXJzZS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBa0M7QUFDSTtBQUNKO0FBQzNCO0FBQ1AseUJBQXlCLHdCQUF3QixJQUFJO0FBQ3JELHFDQUFxQyxtQkFBbUI7QUFDeEQ7QUFDQSxrQkFBa0Isb0RBQW1CO0FBQ3JDO0FBQ0E7QUFDQSx3RUFBd0UsbURBQWtCLFdBQVcsNENBQVc7QUFDaEgsUUFBUSx1REFBc0I7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDTyxvQ0FBb0MscURBQW9CO0FBQ3hEO0FBQ1AseUJBQXlCLHVCQUF1QixJQUFJO0FBQ3BELG1DQUFtQyxtQkFBbUI7QUFDdEQ7QUFDQTtBQUNBO0FBQ0EsdUVBQXVFLG1EQUFrQixXQUFXLDRDQUFXO0FBQy9HLFFBQVEsdURBQXNCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ08sOENBQThDLHFEQUFvQjtBQUNsRTtBQUNQLHlCQUF5Qix3QkFBd0IsSUFBSTtBQUNyRCxxQ0FBcUMsbUJBQW1CO0FBQ3hEO0FBQ0Esa0JBQWtCLG9EQUFtQjtBQUNyQztBQUNBO0FBQ0E7QUFDQTtBQUNBLGdDQUFnQyxpREFBZ0IsNkJBQTZCLG1EQUFrQixXQUFXLDRDQUFXO0FBQ3JIO0FBQ0EsWUFBWTtBQUNaO0FBQ08sNENBQTRDLHFEQUFvQjtBQUNoRTtBQUNQLHlCQUF5Qix1QkFBdUIsSUFBSTtBQUNwRCxtQ0FBbUMsbUJBQW1CO0FBQ3REO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx1REFBdUQsbURBQWtCLFdBQVcsNENBQVc7QUFDL0Y7QUFDQSxZQUFZO0FBQ1o7QUFDTyxzREFBc0QscURBQW9CO0FBQzFFO0FBQ1AseUJBQXlCLGlDQUFpQyxJQUFJO0FBQzlEO0FBQ0E7QUFDTyxzQ0FBc0MscURBQW9CO0FBQzFEO0FBQ1A7QUFDQTtBQUNPLHNDQUFzQyxxREFBb0I7QUFDMUQ7QUFDUCx5QkFBeUIsaUNBQWlDLElBQUk7QUFDOUQ7QUFDQTtBQUNPLGdEQUFnRCxxREFBb0I7QUFDcEU7QUFDUDtBQUNBO0FBQ08sZ0RBQWdELHFEQUFvQjtBQUNwRTtBQUNQLHlCQUF5QixpQ0FBaUMsSUFBSTtBQUM5RDtBQUNBO0FBQ08sOENBQThDLHFEQUFvQjtBQUNsRTtBQUNQO0FBQ0E7QUFDTyw4Q0FBOEMscURBQW9CO0FBQ2xFO0FBQ1AseUJBQXlCLGlDQUFpQyxJQUFJO0FBQzlEO0FBQ0E7QUFDTyx3REFBd0QscURBQW9CO0FBQzVFO0FBQ1A7QUFDQTtBQUNPLHdEQUF3RCxxREFBb0IiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvcGFyc2UuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiLi9jb3JlLmpzXCI7XG5pbXBvcnQgKiBhcyBlcnJvcnMgZnJvbSBcIi4vZXJyb3JzLmpzXCI7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuL3V0aWwuanNcIjtcbmV4cG9ydCBjb25zdCBfcGFyc2UgPSAoX0VycikgPT4gKHNjaGVtYSwgdmFsdWUsIF9jdHgsIF9wYXJhbXMpID0+IHtcbiAgICBjb25zdCBjdHggPSBfY3R4ID8geyAuLi5fY3R4LCBhc3luYzogZmFsc2UgfSA6IHsgYXN5bmM6IGZhbHNlIH07XG4gICAgY29uc3QgcmVzdWx0ID0gc2NoZW1hLl96b2QucnVuKHsgdmFsdWUsIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kQXN5bmNFcnJvcigpO1xuICAgIH1cbiAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZSA9IG5ldyAoX3BhcmFtcz8uRXJyID8/IF9FcnIpKHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpKTtcbiAgICAgICAgdXRpbC5jYXB0dXJlU3RhY2tUcmFjZShlLCBfcGFyYW1zPy5jYWxsZWUpO1xuICAgICAgICB0aHJvdyBlO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0LnZhbHVlO1xufTtcbmV4cG9ydCBjb25zdCBwYXJzZSA9IC8qIEBfX1BVUkVfXyovIF9wYXJzZShlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgX3BhcnNlQXN5bmMgPSAoX0VycikgPT4gYXN5bmMgKHNjaGVtYSwgdmFsdWUsIF9jdHgsIHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGN0eCA9IF9jdHggPyB7IC4uLl9jdHgsIGFzeW5jOiB0cnVlIH0gOiB7IGFzeW5jOiB0cnVlIH07XG4gICAgbGV0IHJlc3VsdCA9IHNjaGVtYS5fem9kLnJ1bih7IHZhbHVlLCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpXG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHJlc3VsdDtcbiAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgZSA9IG5ldyAocGFyYW1zPy5FcnIgPz8gX0VycikocmVzdWx0Lmlzc3Vlcy5tYXAoKGlzcykgPT4gdXRpbC5maW5hbGl6ZUlzc3VlKGlzcywgY3R4LCBjb3JlLmNvbmZpZygpKSkpO1xuICAgICAgICB1dGlsLmNhcHR1cmVTdGFja1RyYWNlKGUsIHBhcmFtcz8uY2FsbGVlKTtcbiAgICAgICAgdGhyb3cgZTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC52YWx1ZTtcbn07XG5leHBvcnQgY29uc3QgcGFyc2VBc3luYyA9IC8qIEBfX1BVUkVfXyovIF9wYXJzZUFzeW5jKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfc2FmZVBhcnNlID0gKF9FcnIpID0+IChzY2hlbWEsIHZhbHVlLCBfY3R4KSA9PiB7XG4gICAgY29uc3QgY3R4ID0gX2N0eCA/IHsgLi4uX2N0eCwgYXN5bmM6IGZhbHNlIH0gOiB7IGFzeW5jOiBmYWxzZSB9O1xuICAgIGNvbnN0IHJlc3VsdCA9IHNjaGVtYS5fem9kLnJ1bih7IHZhbHVlLCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgdGhyb3cgbmV3IGNvcmUuJFpvZEFzeW5jRXJyb3IoKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdC5pc3N1ZXMubGVuZ3RoXG4gICAgICAgID8ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBlcnJvcjogbmV3IChfRXJyID8/IGVycm9ycy4kWm9kRXJyb3IpKHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpKSxcbiAgICAgICAgfVxuICAgICAgICA6IHsgc3VjY2VzczogdHJ1ZSwgZGF0YTogcmVzdWx0LnZhbHVlIH07XG59O1xuZXhwb3J0IGNvbnN0IHNhZmVQYXJzZSA9IC8qIEBfX1BVUkVfXyovIF9zYWZlUGFyc2UoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9zYWZlUGFyc2VBc3luYyA9IChfRXJyKSA9PiBhc3luYyAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IF9jdHggPyB7IC4uLl9jdHgsIGFzeW5jOiB0cnVlIH0gOiB7IGFzeW5jOiB0cnVlIH07XG4gICAgbGV0IHJlc3VsdCA9IHNjaGVtYS5fem9kLnJ1bih7IHZhbHVlLCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpXG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IHJlc3VsdDtcbiAgICByZXR1cm4gcmVzdWx0Lmlzc3Vlcy5sZW5ndGhcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIGVycm9yOiBuZXcgX0VycihyZXN1bHQuaXNzdWVzLm1hcCgoaXNzKSA9PiB1dGlsLmZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvcmUuY29uZmlnKCkpKSksXG4gICAgICAgIH1cbiAgICAgICAgOiB7IHN1Y2Nlc3M6IHRydWUsIGRhdGE6IHJlc3VsdC52YWx1ZSB9O1xufTtcbmV4cG9ydCBjb25zdCBzYWZlUGFyc2VBc3luYyA9IC8qIEBfX1BVUkVfXyovIF9zYWZlUGFyc2VBc3luYyhlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgX2VuY29kZSA9IChfRXJyKSA9PiAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IF9jdHggPyB7IC4uLl9jdHgsIGRpcmVjdGlvbjogXCJiYWNrd2FyZFwiIH0gOiB7IGRpcmVjdGlvbjogXCJiYWNrd2FyZFwiIH07XG4gICAgcmV0dXJuIF9wYXJzZShfRXJyKShzY2hlbWEsIHZhbHVlLCBjdHgpO1xufTtcbmV4cG9ydCBjb25zdCBlbmNvZGUgPSAvKiBAX19QVVJFX18qLyBfZW5jb2RlKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfZGVjb2RlID0gKF9FcnIpID0+IChzY2hlbWEsIHZhbHVlLCBfY3R4KSA9PiB7XG4gICAgcmV0dXJuIF9wYXJzZShfRXJyKShzY2hlbWEsIHZhbHVlLCBfY3R4KTtcbn07XG5leHBvcnQgY29uc3QgZGVjb2RlID0gLyogQF9fUFVSRV9fKi8gX2RlY29kZShlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgX2VuY29kZUFzeW5jID0gKF9FcnIpID0+IGFzeW5jIChzY2hlbWEsIHZhbHVlLCBfY3R4KSA9PiB7XG4gICAgY29uc3QgY3R4ID0gX2N0eCA/IHsgLi4uX2N0eCwgZGlyZWN0aW9uOiBcImJhY2t3YXJkXCIgfSA6IHsgZGlyZWN0aW9uOiBcImJhY2t3YXJkXCIgfTtcbiAgICByZXR1cm4gX3BhcnNlQXN5bmMoX0Vycikoc2NoZW1hLCB2YWx1ZSwgY3R4KTtcbn07XG5leHBvcnQgY29uc3QgZW5jb2RlQXN5bmMgPSAvKiBAX19QVVJFX18qLyBfZW5jb2RlQXN5bmMoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9kZWNvZGVBc3luYyA9IChfRXJyKSA9PiBhc3luYyAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIHJldHVybiBfcGFyc2VBc3luYyhfRXJyKShzY2hlbWEsIHZhbHVlLCBfY3R4KTtcbn07XG5leHBvcnQgY29uc3QgZGVjb2RlQXN5bmMgPSAvKiBAX19QVVJFX18qLyBfZGVjb2RlQXN5bmMoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9zYWZlRW5jb2RlID0gKF9FcnIpID0+IChzY2hlbWEsIHZhbHVlLCBfY3R4KSA9PiB7XG4gICAgY29uc3QgY3R4ID0gX2N0eCA/IHsgLi4uX2N0eCwgZGlyZWN0aW9uOiBcImJhY2t3YXJkXCIgfSA6IHsgZGlyZWN0aW9uOiBcImJhY2t3YXJkXCIgfTtcbiAgICByZXR1cm4gX3NhZmVQYXJzZShfRXJyKShzY2hlbWEsIHZhbHVlLCBjdHgpO1xufTtcbmV4cG9ydCBjb25zdCBzYWZlRW5jb2RlID0gLyogQF9fUFVSRV9fKi8gX3NhZmVFbmNvZGUoZXJyb3JzLiRab2RSZWFsRXJyb3IpO1xuZXhwb3J0IGNvbnN0IF9zYWZlRGVjb2RlID0gKF9FcnIpID0+IChzY2hlbWEsIHZhbHVlLCBfY3R4KSA9PiB7XG4gICAgcmV0dXJuIF9zYWZlUGFyc2UoX0Vycikoc2NoZW1hLCB2YWx1ZSwgX2N0eCk7XG59O1xuZXhwb3J0IGNvbnN0IHNhZmVEZWNvZGUgPSAvKiBAX19QVVJFX18qLyBfc2FmZURlY29kZShlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG5leHBvcnQgY29uc3QgX3NhZmVFbmNvZGVBc3luYyA9IChfRXJyKSA9PiBhc3luYyAoc2NoZW1hLCB2YWx1ZSwgX2N0eCkgPT4ge1xuICAgIGNvbnN0IGN0eCA9IF9jdHggPyB7IC4uLl9jdHgsIGRpcmVjdGlvbjogXCJiYWNrd2FyZFwiIH0gOiB7IGRpcmVjdGlvbjogXCJiYWNrd2FyZFwiIH07XG4gICAgcmV0dXJuIF9zYWZlUGFyc2VBc3luYyhfRXJyKShzY2hlbWEsIHZhbHVlLCBjdHgpO1xufTtcbmV4cG9ydCBjb25zdCBzYWZlRW5jb2RlQXN5bmMgPSAvKiBAX19QVVJFX18qLyBfc2FmZUVuY29kZUFzeW5jKGVycm9ycy4kWm9kUmVhbEVycm9yKTtcbmV4cG9ydCBjb25zdCBfc2FmZURlY29kZUFzeW5jID0gKF9FcnIpID0+IGFzeW5jIChzY2hlbWEsIHZhbHVlLCBfY3R4KSA9PiB7XG4gICAgcmV0dXJuIF9zYWZlUGFyc2VBc3luYyhfRXJyKShzY2hlbWEsIHZhbHVlLCBfY3R4KTtcbn07XG5leHBvcnQgY29uc3Qgc2FmZURlY29kZUFzeW5jID0gLyogQF9fUFVSRV9fKi8gX3NhZmVEZWNvZGVBc3luYyhlcnJvcnMuJFpvZFJlYWxFcnJvcik7XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/core/parse.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/core/regexes.js":
|
||
/*!*********************************************!*\
|
||
!*** ./node_modules/zod/v4/core/regexes.js ***!
|
||
\*********************************************/
|
||
/***/ ((__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 */ base64: () => (/* binding */ base64),\n/* harmony export */ base64url: () => (/* binding */ base64url),\n/* harmony export */ bigint: () => (/* binding */ bigint),\n/* harmony export */ boolean: () => (/* binding */ boolean),\n/* harmony export */ browserEmail: () => (/* binding */ browserEmail),\n/* harmony export */ cidrv4: () => (/* binding */ cidrv4),\n/* harmony export */ cidrv6: () => (/* binding */ cidrv6),\n/* harmony export */ cuid: () => (/* binding */ cuid),\n/* harmony export */ cuid2: () => (/* binding */ cuid2),\n/* harmony export */ date: () => (/* binding */ date),\n/* harmony export */ datetime: () => (/* binding */ datetime),\n/* harmony export */ domain: () => (/* binding */ domain),\n/* harmony export */ duration: () => (/* binding */ duration),\n/* harmony export */ e164: () => (/* binding */ e164),\n/* harmony export */ email: () => (/* binding */ email),\n/* harmony export */ emoji: () => (/* binding */ emoji),\n/* harmony export */ extendedDuration: () => (/* binding */ extendedDuration),\n/* harmony export */ guid: () => (/* binding */ guid),\n/* harmony export */ hex: () => (/* binding */ hex),\n/* harmony export */ hostname: () => (/* binding */ hostname),\n/* harmony export */ html5Email: () => (/* binding */ html5Email),\n/* harmony export */ httpProtocol: () => (/* binding */ httpProtocol),\n/* harmony export */ idnEmail: () => (/* binding */ idnEmail),\n/* harmony export */ integer: () => (/* binding */ integer),\n/* harmony export */ ipv4: () => (/* binding */ ipv4),\n/* harmony export */ ipv6: () => (/* binding */ ipv6),\n/* harmony export */ ksuid: () => (/* binding */ ksuid),\n/* harmony export */ lowercase: () => (/* binding */ lowercase),\n/* harmony export */ mac: () => (/* binding */ mac),\n/* harmony export */ md5_base64: () => (/* binding */ md5_base64),\n/* harmony export */ md5_base64url: () => (/* binding */ md5_base64url),\n/* harmony export */ md5_hex: () => (/* binding */ md5_hex),\n/* harmony export */ nanoid: () => (/* binding */ nanoid),\n/* harmony export */ \"null\": () => (/* binding */ _null),\n/* harmony export */ number: () => (/* binding */ number),\n/* harmony export */ rfc5322Email: () => (/* binding */ rfc5322Email),\n/* harmony export */ sha1_base64: () => (/* binding */ sha1_base64),\n/* harmony export */ sha1_base64url: () => (/* binding */ sha1_base64url),\n/* harmony export */ sha1_hex: () => (/* binding */ sha1_hex),\n/* harmony export */ sha256_base64: () => (/* binding */ sha256_base64),\n/* harmony export */ sha256_base64url: () => (/* binding */ sha256_base64url),\n/* harmony export */ sha256_hex: () => (/* binding */ sha256_hex),\n/* harmony export */ sha384_base64: () => (/* binding */ sha384_base64),\n/* harmony export */ sha384_base64url: () => (/* binding */ sha384_base64url),\n/* harmony export */ sha384_hex: () => (/* binding */ sha384_hex),\n/* harmony export */ sha512_base64: () => (/* binding */ sha512_base64),\n/* harmony export */ sha512_base64url: () => (/* binding */ sha512_base64url),\n/* harmony export */ sha512_hex: () => (/* binding */ sha512_hex),\n/* harmony export */ string: () => (/* binding */ string),\n/* harmony export */ time: () => (/* binding */ time),\n/* harmony export */ ulid: () => (/* binding */ ulid),\n/* harmony export */ undefined: () => (/* binding */ _undefined),\n/* harmony export */ unicodeEmail: () => (/* binding */ unicodeEmail),\n/* harmony export */ uppercase: () => (/* binding */ uppercase),\n/* harmony export */ uuid: () => (/* binding */ uuid),\n/* harmony export */ uuid4: () => (/* binding */ uuid4),\n/* harmony export */ uuid6: () => (/* binding */ uuid6),\n/* harmony export */ uuid7: () => (/* binding */ uuid7),\n/* harmony export */ xid: () => (/* binding */ xid)\n/* harmony export */ });\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/util.js\");\n\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link cuid2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nconst cuid = /^[cC][0-9a-z]{6,}$/;\nconst cuid2 = /^[0-9a-z]+$/;\nconst ulid = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;\nconst xid = /^[0-9a-vA-V]{20}$/;\nconst ksuid = /^[A-Za-z0-9]{27}$/;\nconst nanoid = /^[a-zA-Z0-9_-]{21}$/;\n/** ISO 8601-1 duration regex. Does not support the 8601-2 extensions like negative durations or fractional/negative components. */\nconst duration = /^P(?:(\\d+W)|(?!.*W)(?=\\d|T\\d)(\\d+Y)?(\\d+M)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+([.,]\\d+)?S)?)?)$/;\n/** Implements ISO 8601-2 extensions like explicit +- prefixes, mixing weeks with other units, and fractional/negative components. */\nconst extendedDuration = /^[-+]?P(?!$)(?:(?:[-+]?\\d+Y)|(?:[-+]?\\d+[.,]\\d+Y$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:(?:[-+]?\\d+W)|(?:[-+]?\\d+[.,]\\d+W$))?(?:(?:[-+]?\\d+D)|(?:[-+]?\\d+[.,]\\d+D$))?(?:T(?=[\\d+-])(?:(?:[-+]?\\d+H)|(?:[-+]?\\d+[.,]\\d+H$))?(?:(?:[-+]?\\d+M)|(?:[-+]?\\d+[.,]\\d+M$))?(?:[-+]?\\d+(?:[.,]\\d+)?S)?)??$/;\n/** A regex for any UUID-like identifier: 8-4-4-4-12 hex pattern */\nconst guid = /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/;\n/** Returns a regex for validating an RFC 9562/4122 UUID.\n *\n * @param version Optionally specify a version 1-8. If no version is specified, all versions are supported. */\nconst uuid = (version) => {\n if (!version)\n return /^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/;\n return new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${version}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`);\n};\nconst uuid4 = /*@__PURE__*/ uuid(4);\nconst uuid6 = /*@__PURE__*/ uuid(6);\nconst uuid7 = /*@__PURE__*/ uuid(7);\n/** Practical email validation */\nconst email = /^(?!\\.)(?!.*\\.\\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$/;\n/** Equivalent to the HTML5 input[type=email] validation implemented by browsers. Source: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email */\nconst html5Email = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n/** The classic emailregex.com regex for RFC 5322-compliant emails */\nconst rfc5322Email = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n/** A loose regex that allows Unicode characters, enforces length limits, and that's about it. */\nconst unicodeEmail = /^[^\\s@\"]{1,64}@[^\\s@]{1,255}$/u;\nconst idnEmail = unicodeEmail;\nconst browserEmail = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;\n// from https://thekevinscott.com/emojis-in-javascript/#writing-a-regular-expression\nconst _emoji = `^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$`;\nfunction emoji() {\n return new RegExp(_emoji, \"u\");\n}\nconst ipv4 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;\nconst ipv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/;\nconst mac = (delimiter) => {\n const escapedDelim = _util_js__WEBPACK_IMPORTED_MODULE_0__.escapeRegex(delimiter ?? \":\");\n return new RegExp(`^(?:[0-9A-F]{2}${escapedDelim}){5}[0-9A-F]{2}$|^(?:[0-9a-f]{2}${escapedDelim}){5}[0-9a-f]{2}$`);\n};\nconst cidrv4 = /^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/([0-9]|[1-2][0-9]|3[0-2])$/;\nconst cidrv6 = /^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;\n// https://stackoverflow.com/questions/7860392/determine-if-string-is-in-base64-using-javascript\nconst base64 = /^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/;\nconst base64url = /^[A-Za-z0-9_-]*$/;\n// based on https://stackoverflow.com/questions/106179/regular-expression-to-match-dns-hostname-or-ip-address\n// export const hostname: RegExp = /^([a-zA-Z0-9-]+\\.)*[a-zA-Z0-9-]+$/;\nconst hostname = /^(?=.{1,253}\\.?$)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[-0-9a-zA-Z]{0,61}[0-9a-zA-Z])?)*\\.?$/;\nconst domain = /^([a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\\.)+[a-zA-Z]{2,}$/;\nconst httpProtocol = /^https?$/;\n// https://blog.stevenlevithan.com/archives/validate-phone-number#r4-3 (regex sans spaces)\n// E.164: leading digit must be 1-9; total digits (excluding '+') between 7-15\nconst e164 = /^\\+[1-9]\\d{6,14}$/;\n// const dateSource = `((\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\\\d|30)|(02)-(0[1-9]|1\\\\d|2[0-8])))`;\nconst dateSource = `(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))`;\nconst date = /*@__PURE__*/ new RegExp(`^${dateSource}$`);\nfunction timeSource(args) {\n const hhmm = `(?:[01]\\\\d|2[0-3]):[0-5]\\\\d`;\n const regex = typeof args.precision === \"number\"\n ? args.precision === -1\n ? `${hhmm}`\n : args.precision === 0\n ? `${hhmm}:[0-5]\\\\d`\n : `${hhmm}:[0-5]\\\\d\\\\.\\\\d{${args.precision}}`\n : `${hhmm}(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?`;\n return regex;\n}\nfunction time(args) {\n return new RegExp(`^${timeSource(args)}$`);\n}\n// Adapted from https://stackoverflow.com/a/3143231\nfunction datetime(args) {\n const time = timeSource({ precision: args.precision });\n const opts = [\"Z\"];\n if (args.local)\n opts.push(\"\");\n // if (args.offset) opts.push(`([+-]\\\\d{2}:\\\\d{2})`);\n if (args.offset)\n opts.push(`([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)`);\n const timeRegex = `${time}(?:${opts.join(\"|\")})`;\n return new RegExp(`^${dateSource}T(?:${timeRegex})$`);\n}\nconst string = (params) => {\n const regex = params ? `[\\\\s\\\\S]{${params?.minimum ?? 0},${params?.maximum ?? \"\"}}` : `[\\\\s\\\\S]*`;\n return new RegExp(`^${regex}$`);\n};\nconst bigint = /^-?\\d+n?$/;\nconst integer = /^-?\\d+$/;\nconst number = /^-?\\d+(?:\\.\\d+)?$/;\nconst boolean = /^(?:true|false)$/i;\nconst _null = /^null$/i;\n\nconst _undefined = /^undefined$/i;\n\n// regex for string with no uppercase letters\nconst lowercase = /^[^A-Z]*$/;\n// regex for string with no lowercase letters\nconst uppercase = /^[^a-z]*$/;\n// regex for hexadecimal strings (any length)\nconst hex = /^[0-9a-fA-F]*$/;\n// Hash regexes for different algorithms and encodings\n// Helper function to create base64 regex with exact length and padding\nfunction fixedBase64(bodyLength, padding) {\n return new RegExp(`^[A-Za-z0-9+/]{${bodyLength}}${padding}$`);\n}\n// Helper function to create base64url regex with exact length (no padding)\nfunction fixedBase64url(length) {\n return new RegExp(`^[A-Za-z0-9_-]{${length}}$`);\n}\n// MD5 (16 bytes): base64 = 24 chars total (22 + \"==\")\nconst md5_hex = /^[0-9a-fA-F]{32}$/;\nconst md5_base64 = /*@__PURE__*/ fixedBase64(22, \"==\");\nconst md5_base64url = /*@__PURE__*/ fixedBase64url(22);\n// SHA1 (20 bytes): base64 = 28 chars total (27 + \"=\")\nconst sha1_hex = /^[0-9a-fA-F]{40}$/;\nconst sha1_base64 = /*@__PURE__*/ fixedBase64(27, \"=\");\nconst sha1_base64url = /*@__PURE__*/ fixedBase64url(27);\n// SHA256 (32 bytes): base64 = 44 chars total (43 + \"=\")\nconst sha256_hex = /^[0-9a-fA-F]{64}$/;\nconst sha256_base64 = /*@__PURE__*/ fixedBase64(43, \"=\");\nconst sha256_base64url = /*@__PURE__*/ fixedBase64url(43);\n// SHA384 (48 bytes): base64 = 64 chars total (no padding)\nconst sha384_hex = /^[0-9a-fA-F]{96}$/;\nconst sha384_base64 = /*@__PURE__*/ fixedBase64(64, \"\");\nconst sha384_base64url = /*@__PURE__*/ fixedBase64url(64);\n// SHA512 (64 bytes): base64 = 88 chars total (86 + \"==\")\nconst sha512_hex = /^[0-9a-fA-F]{128}$/;\nconst sha512_base64 = /*@__PURE__*/ fixedBase64(86, \"==\");\nconst sha512_base64url = /*@__PURE__*/ fixedBase64url(86);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9yZWdleGVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFrQztBQUNsQztBQUNBO0FBQ0EseUNBQXlDLGFBQWE7QUFDdEQ7QUFDQTtBQUNPLDRCQUE0QixHQUFHO0FBQy9CO0FBQ0EsK0NBQStDLEdBQUc7QUFDbEQsMEJBQTBCLEdBQUc7QUFDN0IsNEJBQTRCLEdBQUc7QUFDL0IsK0JBQStCLEdBQUc7QUFDekM7QUFDTztBQUNQO0FBQ087QUFDUDtBQUNPLDRCQUE0QixFQUFFLGFBQWEsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGFBQWEsR0FBRztBQUNsRztBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0EsOEJBQThCLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLHFCQUFxQixFQUFFLGFBQWEsR0FBRztBQUMxRyxxQ0FBcUMsRUFBRSxhQUFhLEVBQUUsR0FBRyxRQUFRLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxhQUFhLEdBQUc7QUFDdEg7QUFDTztBQUNBO0FBQ0E7QUFDUDtBQUNPLDJHQUEyRyxHQUFHO0FBQ3JIO0FBQ08sK0NBQStDLEVBQUUsZ0NBQWdDLEtBQUssNkNBQTZDLEtBQUs7QUFDL0k7QUFDTyx3Q0FBd0MseUJBQXlCLDZCQUE2QixJQUFJLFFBQVEsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLGdDQUFnQyxHQUFHO0FBQ2hMO0FBQ08sK0JBQStCLEtBQUssUUFBUSxNQUFNO0FBQ2xEO0FBQ0EsaURBQWlELEVBQUUsZ0NBQWdDLEtBQUssNkNBQTZDLEtBQUs7QUFDako7QUFDQSxzQkFBc0Isc0JBQXNCLEtBQUssZ0JBQWdCO0FBQzFEO0FBQ1A7QUFDQTtBQUNPLDBFQUEwRSxFQUFFO0FBQzVFLDZCQUE2QixJQUFJLEdBQUcsRUFBRSxZQUFZLElBQUksY0FBYyxJQUFJLEdBQUcsSUFBSSxlQUFlLElBQUksR0FBRyxJQUFJLGFBQWEsSUFBSSxjQUFjLElBQUksR0FBRyxJQUFJLGNBQWMsSUFBSSxFQUFFLElBQUksY0FBYyxJQUFJLEdBQUcsSUFBSSxjQUFjLElBQUksRUFBRSxJQUFJLGNBQWMsSUFBSSxHQUFHLElBQUksY0FBYyxJQUFJLEVBQUUsSUFBSSxjQUFjLElBQUksR0FBRyxJQUFJLGNBQWMsSUFBSSxFQUFFLElBQUksYUFBYSxJQUFJLGdCQUFnQixJQUFJLEVBQUUsSUFBSSxrQkFBa0IsSUFBSSxFQUFFLElBQUk7QUFDclk7QUFDUCx5QkFBeUIsaURBQWdCO0FBQ3pDLG9DQUFvQyxFQUFFLEVBQUUsYUFBYSxFQUFFLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxFQUFFLGFBQWEsRUFBRSxFQUFFLFNBQVMsRUFBRTtBQUNuSDtBQUNPLHdFQUF3RSxFQUFFO0FBQzFFLCtCQUErQixJQUFJLEdBQUcsRUFBRSxZQUFZLElBQUksaUJBQWlCLElBQUksaUJBQWlCLElBQUksSUFBSSxJQUFJO0FBQ2pIO0FBQ08scUNBQXFDLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCLEVBQUU7QUFDdEY7QUFDUDtBQUNBO0FBQ08sd0JBQXdCLE1BQU0sZ0NBQWdDLEtBQUssNkNBQTZDLEtBQUs7QUFDckgsNkNBQTZDLEtBQUssMEJBQTBCLEdBQUc7QUFDL0U7QUFDUDtBQUNBLHFDQUFxQztBQUM5Qix5QkFBeUIsS0FBSztBQUNyQyxpSEFBaUgsRUFBRTtBQUNuSCxrSEFBa0gsRUFBRTtBQUM3RywwQ0FBMEMsV0FBVztBQUM1RDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixLQUFLO0FBQ3RCO0FBQ0EscUJBQXFCLEtBQUs7QUFDMUIscUJBQXFCLEtBQUssZ0JBQWdCLEVBQUUsZ0JBQWdCO0FBQzVELGFBQWEsS0FBSztBQUNsQjtBQUNBO0FBQ087QUFDUCwwQkFBMEIsaUJBQWlCO0FBQzNDO0FBQ0E7QUFDTztBQUNQLDhCQUE4QiwyQkFBMkI7QUFDekQ7QUFDQTtBQUNBO0FBQ0EsNENBQTRDLEVBQUUsS0FBSyxFQUFFO0FBQ3JEO0FBQ0E7QUFDQSx5QkFBeUIsS0FBSyxLQUFLLGVBQWU7QUFDbEQsMEJBQTBCLFdBQVcsTUFBTSxVQUFVO0FBQ3JEO0FBQ087QUFDUCxxQ0FBcUMsRUFBRSxxQkFBcUIsR0FBRyx1QkFBdUI7QUFDdEYsMEJBQTBCLE1BQU07QUFDaEM7QUFDTztBQUNBO0FBQ0E7QUFDQTtBQUNQO0FBQ3lCO0FBQ3pCO0FBQ21DO0FBQ25DO0FBQ087QUFDUDtBQUNPO0FBQ1A7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxFQUFFLFlBQVksRUFBRSxRQUFRO0FBQzlEO0FBQ0E7QUFDQTtBQUNBLHNDQUFzQyxFQUFFLFFBQVE7QUFDaEQ7QUFDQTtBQUNPLDhCQUE4QixHQUFHO0FBQ2pDO0FBQ0E7QUFDUDtBQUNPLCtCQUErQixHQUFHO0FBQ2xDO0FBQ0E7QUFDUDtBQUNPLGlDQUFpQyxHQUFHO0FBQ3BDO0FBQ0E7QUFDUDtBQUNPLGlDQUFpQyxHQUFHO0FBQ3BDO0FBQ0E7QUFDUDtBQUNPLGlDQUFpQyxJQUFJO0FBQ3JDO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvcmVnZXhlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyB1dGlsIGZyb20gXCIuL3V0aWwuanNcIjtcbi8qKlxuICogQGRlcHJlY2F0ZWQgQ1VJRCB2MSBpcyBkZXByZWNhdGVkIGJ5IGl0cyBhdXRob3JzIGR1ZSB0byBpbmZvcm1hdGlvbiBsZWFrYWdlXG4gKiAodGltZXN0YW1wcyBlbWJlZGRlZCBpbiB0aGUgaWQpLiBVc2Uge0BsaW5rIGN1aWQyfSBpbnN0ZWFkLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXJhbGxlbGRyaXZlL2N1aWQuXG4gKi9cbmV4cG9ydCBjb25zdCBjdWlkID0gL15bY0NdWzAtOWEtel17Nix9JC87XG5leHBvcnQgY29uc3QgY3VpZDIgPSAvXlswLTlhLXpdKyQvO1xuZXhwb3J0IGNvbnN0IHVsaWQgPSAvXlswLTlBLUhKS01OUC1UVi1aYS1oamttbnAtdHYtel17MjZ9JC87XG5leHBvcnQgY29uc3QgeGlkID0gL15bMC05YS12QS1WXXsyMH0kLztcbmV4cG9ydCBjb25zdCBrc3VpZCA9IC9eW0EtWmEtejAtOV17Mjd9JC87XG5leHBvcnQgY29uc3QgbmFub2lkID0gL15bYS16QS1aMC05Xy1dezIxfSQvO1xuLyoqIElTTyA4NjAxLTEgZHVyYXRpb24gcmVnZXguIERvZXMgbm90IHN1cHBvcnQgdGhlIDg2MDEtMiBleHRlbnNpb25zIGxpa2UgbmVnYXRpdmUgZHVyYXRpb25zIG9yIGZyYWN0aW9uYWwvbmVnYXRpdmUgY29tcG9uZW50cy4gKi9cbmV4cG9ydCBjb25zdCBkdXJhdGlvbiA9IC9eUCg/OihcXGQrVyl8KD8hLipXKSg/PVxcZHxUXFxkKShcXGQrWSk/KFxcZCtNKT8oXFxkK0QpPyhUKD89XFxkKShcXGQrSCk/KFxcZCtNKT8oXFxkKyhbLixdXFxkKyk/Uyk/KT8pJC87XG4vKiogSW1wbGVtZW50cyBJU08gODYwMS0yIGV4dGVuc2lvbnMgbGlrZSBleHBsaWNpdCArLSBwcmVmaXhlcywgbWl4aW5nIHdlZWtzIHdpdGggb3RoZXIgdW5pdHMsIGFuZCBmcmFjdGlvbmFsL25lZ2F0aXZlIGNvbXBvbmVudHMuICovXG5leHBvcnQgY29uc3QgZXh0ZW5kZWREdXJhdGlvbiA9IC9eWy0rXT9QKD8hJCkoPzooPzpbLStdP1xcZCtZKXwoPzpbLStdP1xcZCtbLixdXFxkK1kkKSk/KD86KD86Wy0rXT9cXGQrTSl8KD86Wy0rXT9cXGQrWy4sXVxcZCtNJCkpPyg/Oig/OlstK10/XFxkK1cpfCg/OlstK10/XFxkK1suLF1cXGQrVyQpKT8oPzooPzpbLStdP1xcZCtEKXwoPzpbLStdP1xcZCtbLixdXFxkK0QkKSk/KD86VCg/PVtcXGQrLV0pKD86KD86Wy0rXT9cXGQrSCl8KD86Wy0rXT9cXGQrWy4sXVxcZCtIJCkpPyg/Oig/OlstK10/XFxkK00pfCg/OlstK10/XFxkK1suLF1cXGQrTSQpKT8oPzpbLStdP1xcZCsoPzpbLixdXFxkKyk/Uyk/KT8/JC87XG4vKiogQSByZWdleCBmb3IgYW55IFVVSUQtbGlrZSBpZGVudGlmaWVyOiA4LTQtNC00LTEyIGhleCBwYXR0ZXJuICovXG5leHBvcnQgY29uc3QgZ3VpZCA9IC9eKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfSkkLztcbi8qKiBSZXR1cm5zIGEgcmVnZXggZm9yIHZhbGlkYXRpbmcgYW4gUkZDIDk1NjIvNDEyMiBVVUlELlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIE9wdGlvbmFsbHkgc3BlY2lmeSBhIHZlcnNpb24gMS04LiBJZiBubyB2ZXJzaW9uIGlzIHNwZWNpZmllZCwgYWxsIHZlcnNpb25zIGFyZSBzdXBwb3J0ZWQuICovXG5leHBvcnQgY29uc3QgdXVpZCA9ICh2ZXJzaW9uKSA9PiB7XG4gICAgaWYgKCF2ZXJzaW9uKVxuICAgICAgICByZXR1cm4gL14oWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzEtOF1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDB8ZmZmZmZmZmYtZmZmZi1mZmZmLWZmZmYtZmZmZmZmZmZmZmZmKSQvO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeKFswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LSR7dmVyc2lvbn1bMC05YS1mQS1GXXszfS1bODlhYkFCXVswLTlhLWZBLUZdezN9LVswLTlhLWZBLUZdezEyfSkkYCk7XG59O1xuZXhwb3J0IGNvbnN0IHV1aWQ0ID0gLypAX19QVVJFX18qLyB1dWlkKDQpO1xuZXhwb3J0IGNvbnN0IHV1aWQ2ID0gLypAX19QVVJFX18qLyB1dWlkKDYpO1xuZXhwb3J0IGNvbnN0IHV1aWQ3ID0gLypAX19QVVJFX18qLyB1dWlkKDcpO1xuLyoqIFByYWN0aWNhbCBlbWFpbCB2YWxpZGF0aW9uICovXG5leHBvcnQgY29uc3QgZW1haWwgPSAvXig/IVxcLikoPyEuKlxcLlxcLikoW0EtWmEtejAtOV8nK1xcLVxcLl0qKVtBLVphLXowLTlfKy1dQChbQS1aYS16MC05XVtBLVphLXowLTlcXC1dKlxcLikrW0EtWmEtel17Mix9JC87XG4vKiogRXF1aXZhbGVudCB0byB0aGUgSFRNTDUgaW5wdXRbdHlwZT1lbWFpbF0gdmFsaWRhdGlvbiBpbXBsZW1lbnRlZCBieSBicm93c2Vycy4gU291cmNlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQvZW1haWwgKi9cbmV4cG9ydCBjb25zdCBodG1sNUVtYWlsID0gL15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvO1xuLyoqIFRoZSBjbGFzc2ljIGVtYWlscmVnZXguY29tIHJlZ2V4IGZvciBSRkMgNTMyMi1jb21wbGlhbnQgZW1haWxzICovXG5leHBvcnQgY29uc3QgcmZjNTMyMkVtYWlsID0gL14oKFtePD4oKVxcW1xcXVxcXFwuLDs6XFxzQFwiXSsoXFwuW148PigpXFxbXFxdXFxcXC4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKChcXFtbMC05XXsxLDN9XFwuWzAtOV17MSwzfVxcLlswLTldezEsM31cXC5bMC05XXsxLDN9XSl8KChbYS16QS1aXFwtMC05XStcXC4pK1thLXpBLVpdezIsfSkpJC87XG4vKiogQSBsb29zZSByZWdleCB0aGF0IGFsbG93cyBVbmljb2RlIGNoYXJhY3RlcnMsIGVuZm9yY2VzIGxlbmd0aCBsaW1pdHMsIGFuZCB0aGF0J3MgYWJvdXQgaXQuICovXG5leHBvcnQgY29uc3QgdW5pY29kZUVtYWlsID0gL15bXlxcc0BcIl17MSw2NH1AW15cXHNAXXsxLDI1NX0kL3U7XG5leHBvcnQgY29uc3QgaWRuRW1haWwgPSB1bmljb2RlRW1haWw7XG5leHBvcnQgY29uc3QgYnJvd3NlckVtYWlsID0gL15bYS16QS1aMC05LiEjJCUmJyorLz0/Xl9ge3x9fi1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvO1xuLy8gZnJvbSBodHRwczovL3RoZWtldmluc2NvdHQuY29tL2Vtb2ppcy1pbi1qYXZhc2NyaXB0LyN3cml0aW5nLWEtcmVndWxhci1leHByZXNzaW9uXG5jb25zdCBfZW1vamkgPSBgXihcXFxccHtFeHRlbmRlZF9QaWN0b2dyYXBoaWN9fFxcXFxwe0Vtb2ppX0NvbXBvbmVudH0pKyRgO1xuZXhwb3J0IGZ1bmN0aW9uIGVtb2ppKCkge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKF9lbW9qaSwgXCJ1XCIpO1xufVxuZXhwb3J0IGNvbnN0IGlwdjQgPSAvXig/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKSQvO1xuZXhwb3J0IGNvbnN0IGlwdjYgPSAvXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXwoWzAtOWEtZkEtRl17MSw0fTopezEsN306fChbMC05YS1mQS1GXXsxLDR9Oil7MSw2fTpbMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw1fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwyfXwoWzAtOWEtZkEtRl17MSw0fTopezEsNH0oOlswLTlhLWZBLUZdezEsNH0pezEsM318KFswLTlhLWZBLUZdezEsNH06KXsxLDN9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSwyfSg6WzAtOWEtZkEtRl17MSw0fSl7MSw1fXxbMC05YS1mQS1GXXsxLDR9OigoOlswLTlhLWZBLUZdezEsNH0pezEsNn0pfDooKDpbMC05YS1mQS1GXXsxLDR9KXsxLDd9fDopKSQvO1xuZXhwb3J0IGNvbnN0IG1hYyA9IChkZWxpbWl0ZXIpID0+IHtcbiAgICBjb25zdCBlc2NhcGVkRGVsaW0gPSB1dGlsLmVzY2FwZVJlZ2V4KGRlbGltaXRlciA/PyBcIjpcIik7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4oPzpbMC05QS1GXXsyfSR7ZXNjYXBlZERlbGltfSl7NX1bMC05QS1GXXsyfSR8Xig/OlswLTlhLWZdezJ9JHtlc2NhcGVkRGVsaW19KXs1fVswLTlhLWZdezJ9JGApO1xufTtcbmV4cG9ydCBjb25zdCBjaWRydjQgPSAvXigoMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVxcLil7M30oMjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVxcLyhbMC05XXxbMS0yXVswLTldfDNbMC0yXSkkLztcbmV4cG9ydCBjb25zdCBjaWRydjYgPSAvXigoWzAtOWEtZkEtRl17MSw0fTopezd9WzAtOWEtZkEtRl17MSw0fXw6OnwoWzAtOWEtZkEtRl17MSw0fSk/OjooWzAtOWEtZkEtRl17MSw0fTo/KXswLDZ9KVxcLygxMlswLThdfDFbMDFdWzAtOV18WzEtOV0/WzAtOV0pJC87XG4vLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83ODYwMzkyL2RldGVybWluZS1pZi1zdHJpbmctaXMtaW4tYmFzZTY0LXVzaW5nLWphdmFzY3JpcHRcbmV4cG9ydCBjb25zdCBiYXNlNjQgPSAvXiR8Xig/OlswLTlhLXpBLVorL117NH0pKig/Oig/OlswLTlhLXpBLVorL117Mn09PSl8KD86WzAtOWEtekEtWisvXXszfT0pKT8kLztcbmV4cG9ydCBjb25zdCBiYXNlNjR1cmwgPSAvXltBLVphLXowLTlfLV0qJC87XG4vLyBiYXNlZCBvbiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMDYxNzkvcmVndWxhci1leHByZXNzaW9uLXRvLW1hdGNoLWRucy1ob3N0bmFtZS1vci1pcC1hZGRyZXNzXG4vLyBleHBvcnQgY29uc3QgaG9zdG5hbWU6IFJlZ0V4cCA9IC9eKFthLXpBLVowLTktXStcXC4pKlthLXpBLVowLTktXSskLztcbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IC9eKD89LnsxLDI1M31cXC4/JClbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlstMC05YS16QS1aXXswLDYxfVswLTlhLXpBLVpdKT8pKlxcLj8kLztcbmV4cG9ydCBjb25zdCBkb21haW4gPSAvXihbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT9cXC4pK1thLXpBLVpdezIsfSQvO1xuZXhwb3J0IGNvbnN0IGh0dHBQcm90b2NvbCA9IC9eaHR0cHM/JC87XG4vLyBodHRwczovL2Jsb2cuc3RldmVubGV2aXRoYW4uY29tL2FyY2hpdmVzL3ZhbGlkYXRlLXBob25lLW51bWJlciNyNC0zIChyZWdleCBzYW5zIHNwYWNlcylcbi8vIEUuMTY0OiBsZWFkaW5nIGRpZ2l0IG11c3QgYmUgMS05OyB0b3RhbCBkaWdpdHMgKGV4Y2x1ZGluZyAnKycpIGJldHdlZW4gNy0xNVxuZXhwb3J0IGNvbnN0IGUxNjQgPSAvXlxcK1sxLTldXFxkezYsMTR9JC87XG4vLyBjb25zdCBkYXRlU291cmNlID0gYCgoXFxcXGRcXFxcZFsyNDY4XVswNDhdfFxcXFxkXFxcXGRbMTM1NzldWzI2XXxcXFxcZFxcXFxkMFs0OF18WzAyNDY4XVswNDhdMDB8WzEzNTc5XVsyNl0wMCktMDItMjl8XFxcXGR7NH0tKCgwWzEzNTc4XXwxWzAyXSktKDBbMS05XXxbMTJdXFxcXGR8M1swMV0pfCgwWzQ2OV18MTEpLSgwWzEtOV18WzEyXVxcXFxkfDMwKXwoMDIpLSgwWzEtOV18MVxcXFxkfDJbMC04XSkpKWA7XG5jb25zdCBkYXRlU291cmNlID0gYCg/Oig/OlxcXFxkXFxcXGRbMjQ2OF1bMDQ4XXxcXFxcZFxcXFxkWzEzNTc5XVsyNl18XFxcXGRcXFxcZDBbNDhdfFswMjQ2OF1bMDQ4XTAwfFsxMzU3OV1bMjZdMDApLTAyLTI5fFxcXFxkezR9LSg/Oig/OjBbMTM1NzhdfDFbMDJdKS0oPzowWzEtOV18WzEyXVxcXFxkfDNbMDFdKXwoPzowWzQ2OV18MTEpLSg/OjBbMS05XXxbMTJdXFxcXGR8MzApfCg/OjAyKS0oPzowWzEtOV18MVxcXFxkfDJbMC04XSkpKWA7XG5leHBvcnQgY29uc3QgZGF0ZSA9IC8qQF9fUFVSRV9fKi8gbmV3IFJlZ0V4cChgXiR7ZGF0ZVNvdXJjZX0kYCk7XG5mdW5jdGlvbiB0aW1lU291cmNlKGFyZ3MpIHtcbiAgICBjb25zdCBoaG1tID0gYCg/OlswMV1cXFxcZHwyWzAtM10pOlswLTVdXFxcXGRgO1xuICAgIGNvbnN0IHJlZ2V4ID0gdHlwZW9mIGFyZ3MucHJlY2lzaW9uID09PSBcIm51bWJlclwiXG4gICAgICAgID8gYXJncy5wcmVjaXNpb24gPT09IC0xXG4gICAgICAgICAgICA/IGAke2hobW19YFxuICAgICAgICAgICAgOiBhcmdzLnByZWNpc2lvbiA9PT0gMFxuICAgICAgICAgICAgICAgID8gYCR7aGhtbX06WzAtNV1cXFxcZGBcbiAgICAgICAgICAgICAgICA6IGAke2hobW19OlswLTVdXFxcXGRcXFxcLlxcXFxkeyR7YXJncy5wcmVjaXNpb259fWBcbiAgICAgICAgOiBgJHtoaG1tfSg/OjpbMC01XVxcXFxkKD86XFxcXC5cXFxcZCspPyk/YDtcbiAgICByZXR1cm4gcmVnZXg7XG59XG5leHBvcnQgZnVuY3Rpb24gdGltZShhcmdzKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4ke3RpbWVTb3VyY2UoYXJncyl9JGApO1xufVxuLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zMTQzMjMxXG5leHBvcnQgZnVuY3Rpb24gZGF0ZXRpbWUoYXJncykge1xuICAgIGNvbnN0IHRpbWUgPSB0aW1lU291cmNlKHsgcHJlY2lzaW9uOiBhcmdzLnByZWNpc2lvbiB9KTtcbiAgICBjb25zdCBvcHRzID0gW1wiWlwiXTtcbiAgICBpZiAoYXJncy5sb2NhbClcbiAgICAgICAgb3B0cy5wdXNoKFwiXCIpO1xuICAgIC8vIGlmIChhcmdzLm9mZnNldCkgb3B0cy5wdXNoKGAoWystXVxcXFxkezJ9OlxcXFxkezJ9KWApO1xuICAgIGlmIChhcmdzLm9mZnNldClcbiAgICAgICAgb3B0cy5wdXNoKGAoWystXSg/OlswMV1cXFxcZHwyWzAtM10pOlswLTVdXFxcXGQpYCk7XG4gICAgY29uc3QgdGltZVJlZ2V4ID0gYCR7dGltZX0oPzoke29wdHMuam9pbihcInxcIil9KWA7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF4ke2RhdGVTb3VyY2V9VCg/OiR7dGltZVJlZ2V4fSkkYCk7XG59XG5leHBvcnQgY29uc3Qgc3RyaW5nID0gKHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IHJlZ2V4ID0gcGFyYW1zID8gYFtcXFxcc1xcXFxTXXske3BhcmFtcz8ubWluaW11bSA/PyAwfSwke3BhcmFtcz8ubWF4aW11bSA/PyBcIlwifX1gIDogYFtcXFxcc1xcXFxTXSpgO1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeJHtyZWdleH0kYCk7XG59O1xuZXhwb3J0IGNvbnN0IGJpZ2ludCA9IC9eLT9cXGQrbj8kLztcbmV4cG9ydCBjb25zdCBpbnRlZ2VyID0gL14tP1xcZCskLztcbmV4cG9ydCBjb25zdCBudW1iZXIgPSAvXi0/XFxkKyg/OlxcLlxcZCspPyQvO1xuZXhwb3J0IGNvbnN0IGJvb2xlYW4gPSAvXig/OnRydWV8ZmFsc2UpJC9pO1xuY29uc3QgX251bGwgPSAvXm51bGwkL2k7XG5leHBvcnQgeyBfbnVsbCBhcyBudWxsIH07XG5jb25zdCBfdW5kZWZpbmVkID0gL151bmRlZmluZWQkL2k7XG5leHBvcnQgeyBfdW5kZWZpbmVkIGFzIHVuZGVmaW5lZCB9O1xuLy8gcmVnZXggZm9yIHN0cmluZyB3aXRoIG5vIHVwcGVyY2FzZSBsZXR0ZXJzXG5leHBvcnQgY29uc3QgbG93ZXJjYXNlID0gL15bXkEtWl0qJC87XG4vLyByZWdleCBmb3Igc3RyaW5nIHdpdGggbm8gbG93ZXJjYXNlIGxldHRlcnNcbmV4cG9ydCBjb25zdCB1cHBlcmNhc2UgPSAvXlteYS16XSokLztcbi8vIHJlZ2V4IGZvciBoZXhhZGVjaW1hbCBzdHJpbmdzIChhbnkgbGVuZ3RoKVxuZXhwb3J0IGNvbnN0IGhleCA9IC9eWzAtOWEtZkEtRl0qJC87XG4vLyBIYXNoIHJlZ2V4ZXMgZm9yIGRpZmZlcmVudCBhbGdvcml0aG1zIGFuZCBlbmNvZGluZ3Ncbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYmFzZTY0IHJlZ2V4IHdpdGggZXhhY3QgbGVuZ3RoIGFuZCBwYWRkaW5nXG5mdW5jdGlvbiBmaXhlZEJhc2U2NChib2R5TGVuZ3RoLCBwYWRkaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Ky9deyR7Ym9keUxlbmd0aH19JHtwYWRkaW5nfSRgKTtcbn1cbi8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYmFzZTY0dXJsIHJlZ2V4IHdpdGggZXhhY3QgbGVuZ3RoIChubyBwYWRkaW5nKVxuZnVuY3Rpb24gZml4ZWRCYXNlNjR1cmwobGVuZ3RoKSB7XG4gICAgcmV0dXJuIG5ldyBSZWdFeHAoYF5bQS1aYS16MC05Xy1deyR7bGVuZ3RofX0kYCk7XG59XG4vLyBNRDUgKDE2IGJ5dGVzKTogYmFzZTY0ID0gMjQgY2hhcnMgdG90YWwgKDIyICsgXCI9PVwiKVxuZXhwb3J0IGNvbnN0IG1kNV9oZXggPSAvXlswLTlhLWZBLUZdezMyfSQvO1xuZXhwb3J0IGNvbnN0IG1kNV9iYXNlNjQgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0KDIyLCBcIj09XCIpO1xuZXhwb3J0IGNvbnN0IG1kNV9iYXNlNjR1cmwgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0dXJsKDIyKTtcbi8vIFNIQTEgKDIwIGJ5dGVzKTogYmFzZTY0ID0gMjggY2hhcnMgdG90YWwgKDI3ICsgXCI9XCIpXG5leHBvcnQgY29uc3Qgc2hhMV9oZXggPSAvXlswLTlhLWZBLUZdezQwfSQvO1xuZXhwb3J0IGNvbnN0IHNoYTFfYmFzZTY0ID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NCgyNywgXCI9XCIpO1xuZXhwb3J0IGNvbnN0IHNoYTFfYmFzZTY0dXJsID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NHVybCgyNyk7XG4vLyBTSEEyNTYgKDMyIGJ5dGVzKTogYmFzZTY0ID0gNDQgY2hhcnMgdG90YWwgKDQzICsgXCI9XCIpXG5leHBvcnQgY29uc3Qgc2hhMjU2X2hleCA9IC9eWzAtOWEtZkEtRl17NjR9JC87XG5leHBvcnQgY29uc3Qgc2hhMjU2X2Jhc2U2NCA9IC8qQF9fUFVSRV9fKi8gZml4ZWRCYXNlNjQoNDMsIFwiPVwiKTtcbmV4cG9ydCBjb25zdCBzaGEyNTZfYmFzZTY0dXJsID0gLypAX19QVVJFX18qLyBmaXhlZEJhc2U2NHVybCg0Myk7XG4vLyBTSEEzODQgKDQ4IGJ5dGVzKTogYmFzZTY0ID0gNjQgY2hhcnMgdG90YWwgKG5vIHBhZGRpbmcpXG5leHBvcnQgY29uc3Qgc2hhMzg0X2hleCA9IC9eWzAtOWEtZkEtRl17OTZ9JC87XG5leHBvcnQgY29uc3Qgc2hhMzg0X2Jhc2U2NCA9IC8qQF9fUFVSRV9fKi8gZml4ZWRCYXNlNjQoNjQsIFwiXCIpO1xuZXhwb3J0IGNvbnN0IHNoYTM4NF9iYXNlNjR1cmwgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0dXJsKDY0KTtcbi8vIFNIQTUxMiAoNjQgYnl0ZXMpOiBiYXNlNjQgPSA4OCBjaGFycyB0b3RhbCAoODYgKyBcIj09XCIpXG5leHBvcnQgY29uc3Qgc2hhNTEyX2hleCA9IC9eWzAtOWEtZkEtRl17MTI4fSQvO1xuZXhwb3J0IGNvbnN0IHNoYTUxMl9iYXNlNjQgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0KDg2LCBcIj09XCIpO1xuZXhwb3J0IGNvbnN0IHNoYTUxMl9iYXNlNjR1cmwgPSAvKkBfX1BVUkVfXyovIGZpeGVkQmFzZTY0dXJsKDg2KTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/core/regexes.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/core/registries.js":
|
||
/*!************************************************!*\
|
||
!*** ./node_modules/zod/v4/core/registries.js ***!
|
||
\************************************************/
|
||
/***/ ((__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 */ $ZodRegistry: () => (/* binding */ $ZodRegistry),\n/* harmony export */ $input: () => (/* binding */ $input),\n/* harmony export */ $output: () => (/* binding */ $output),\n/* harmony export */ globalRegistry: () => (/* binding */ globalRegistry),\n/* harmony export */ registry: () => (/* binding */ registry)\n/* harmony export */ });\nvar _a;\nconst $output = Symbol(\"ZodOutput\");\nconst $input = Symbol(\"ZodInput\");\nclass $ZodRegistry {\n constructor() {\n this._map = new WeakMap();\n this._idmap = new Map();\n }\n add(schema, ..._meta) {\n const meta = _meta[0];\n this._map.set(schema, meta);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.set(meta.id, schema);\n }\n return this;\n }\n clear() {\n this._map = new WeakMap();\n this._idmap = new Map();\n return this;\n }\n remove(schema) {\n const meta = this._map.get(schema);\n if (meta && typeof meta === \"object\" && \"id\" in meta) {\n this._idmap.delete(meta.id);\n }\n this._map.delete(schema);\n return this;\n }\n get(schema) {\n // return this._map.get(schema) as any;\n // inherit metadata\n const p = schema._zod.parent;\n if (p) {\n const pm = { ...(this.get(p) ?? {}) };\n delete pm.id; // do not inherit id\n const f = { ...pm, ...this._map.get(schema) };\n return Object.keys(f).length ? f : undefined;\n }\n return this._map.get(schema);\n }\n has(schema) {\n return this._map.has(schema);\n }\n}\n// registries\nfunction registry() {\n return new $ZodRegistry();\n}\n(_a = globalThis).__zod_globalRegistry ?? (_a.__zod_globalRegistry = registry());\nconst globalRegistry = globalThis.__zod_globalRegistry;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9yZWdpc3RyaWVzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDTztBQUNBO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5QkFBeUIscUJBQXFCO0FBQzlDLDBCQUEwQjtBQUMxQix3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDTyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9yZWdpc3RyaWVzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciBfYTtcbmV4cG9ydCBjb25zdCAkb3V0cHV0ID0gU3ltYm9sKFwiWm9kT3V0cHV0XCIpO1xuZXhwb3J0IGNvbnN0ICRpbnB1dCA9IFN5bWJvbChcIlpvZElucHV0XCIpO1xuZXhwb3J0IGNsYXNzICRab2RSZWdpc3RyeSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuX21hcCA9IG5ldyBXZWFrTWFwKCk7XG4gICAgICAgIHRoaXMuX2lkbWFwID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBhZGQoc2NoZW1hLCAuLi5fbWV0YSkge1xuICAgICAgICBjb25zdCBtZXRhID0gX21ldGFbMF07XG4gICAgICAgIHRoaXMuX21hcC5zZXQoc2NoZW1hLCBtZXRhKTtcbiAgICAgICAgaWYgKG1ldGEgJiYgdHlwZW9mIG1ldGEgPT09IFwib2JqZWN0XCIgJiYgXCJpZFwiIGluIG1ldGEpIHtcbiAgICAgICAgICAgIHRoaXMuX2lkbWFwLnNldChtZXRhLmlkLCBzY2hlbWEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjbGVhcigpIHtcbiAgICAgICAgdGhpcy5fbWFwID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgdGhpcy5faWRtYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZW1vdmUoc2NoZW1hKSB7XG4gICAgICAgIGNvbnN0IG1ldGEgPSB0aGlzLl9tYXAuZ2V0KHNjaGVtYSk7XG4gICAgICAgIGlmIChtZXRhICYmIHR5cGVvZiBtZXRhID09PSBcIm9iamVjdFwiICYmIFwiaWRcIiBpbiBtZXRhKSB7XG4gICAgICAgICAgICB0aGlzLl9pZG1hcC5kZWxldGUobWV0YS5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fbWFwLmRlbGV0ZShzY2hlbWEpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZ2V0KHNjaGVtYSkge1xuICAgICAgICAvLyByZXR1cm4gdGhpcy5fbWFwLmdldChzY2hlbWEpIGFzIGFueTtcbiAgICAgICAgLy8gaW5oZXJpdCBtZXRhZGF0YVxuICAgICAgICBjb25zdCBwID0gc2NoZW1hLl96b2QucGFyZW50O1xuICAgICAgICBpZiAocCkge1xuICAgICAgICAgICAgY29uc3QgcG0gPSB7IC4uLih0aGlzLmdldChwKSA/PyB7fSkgfTtcbiAgICAgICAgICAgIGRlbGV0ZSBwbS5pZDsgLy8gZG8gbm90IGluaGVyaXQgaWRcbiAgICAgICAgICAgIGNvbnN0IGYgPSB7IC4uLnBtLCAuLi50aGlzLl9tYXAuZ2V0KHNjaGVtYSkgfTtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhmKS5sZW5ndGggPyBmIDogdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXAuZ2V0KHNjaGVtYSk7XG4gICAgfVxuICAgIGhhcyhzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX21hcC5oYXMoc2NoZW1hKTtcbiAgICB9XG59XG4vLyByZWdpc3RyaWVzXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0cnkoKSB7XG4gICAgcmV0dXJuIG5ldyAkWm9kUmVnaXN0cnkoKTtcbn1cbihfYSA9IGdsb2JhbFRoaXMpLl9fem9kX2dsb2JhbFJlZ2lzdHJ5ID8/IChfYS5fX3pvZF9nbG9iYWxSZWdpc3RyeSA9IHJlZ2lzdHJ5KCkpO1xuZXhwb3J0IGNvbnN0IGdsb2JhbFJlZ2lzdHJ5ID0gZ2xvYmFsVGhpcy5fX3pvZF9nbG9iYWxSZWdpc3RyeTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/core/registries.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/core/schemas.js":
|
||
/*!*********************************************!*\
|
||
!*** ./node_modules/zod/v4/core/schemas.js ***!
|
||
\*********************************************/
|
||
/***/ ((__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 */ $ZodAny: () => (/* binding */ $ZodAny),\n/* harmony export */ $ZodArray: () => (/* binding */ $ZodArray),\n/* harmony export */ $ZodBase64: () => (/* binding */ $ZodBase64),\n/* harmony export */ $ZodBase64URL: () => (/* binding */ $ZodBase64URL),\n/* harmony export */ $ZodBigInt: () => (/* binding */ $ZodBigInt),\n/* harmony export */ $ZodBigIntFormat: () => (/* binding */ $ZodBigIntFormat),\n/* harmony export */ $ZodBoolean: () => (/* binding */ $ZodBoolean),\n/* harmony export */ $ZodCIDRv4: () => (/* binding */ $ZodCIDRv4),\n/* harmony export */ $ZodCIDRv6: () => (/* binding */ $ZodCIDRv6),\n/* harmony export */ $ZodCUID: () => (/* binding */ $ZodCUID),\n/* harmony export */ $ZodCUID2: () => (/* binding */ $ZodCUID2),\n/* harmony export */ $ZodCatch: () => (/* binding */ $ZodCatch),\n/* harmony export */ $ZodCodec: () => (/* binding */ $ZodCodec),\n/* harmony export */ $ZodCustom: () => (/* binding */ $ZodCustom),\n/* harmony export */ $ZodCustomStringFormat: () => (/* binding */ $ZodCustomStringFormat),\n/* harmony export */ $ZodDate: () => (/* binding */ $ZodDate),\n/* harmony export */ $ZodDefault: () => (/* binding */ $ZodDefault),\n/* harmony export */ $ZodDiscriminatedUnion: () => (/* binding */ $ZodDiscriminatedUnion),\n/* harmony export */ $ZodE164: () => (/* binding */ $ZodE164),\n/* harmony export */ $ZodEmail: () => (/* binding */ $ZodEmail),\n/* harmony export */ $ZodEmoji: () => (/* binding */ $ZodEmoji),\n/* harmony export */ $ZodEnum: () => (/* binding */ $ZodEnum),\n/* harmony export */ $ZodExactOptional: () => (/* binding */ $ZodExactOptional),\n/* harmony export */ $ZodFile: () => (/* binding */ $ZodFile),\n/* harmony export */ $ZodFunction: () => (/* binding */ $ZodFunction),\n/* harmony export */ $ZodGUID: () => (/* binding */ $ZodGUID),\n/* harmony export */ $ZodIPv4: () => (/* binding */ $ZodIPv4),\n/* harmony export */ $ZodIPv6: () => (/* binding */ $ZodIPv6),\n/* harmony export */ $ZodISODate: () => (/* binding */ $ZodISODate),\n/* harmony export */ $ZodISODateTime: () => (/* binding */ $ZodISODateTime),\n/* harmony export */ $ZodISODuration: () => (/* binding */ $ZodISODuration),\n/* harmony export */ $ZodISOTime: () => (/* binding */ $ZodISOTime),\n/* harmony export */ $ZodIntersection: () => (/* binding */ $ZodIntersection),\n/* harmony export */ $ZodJWT: () => (/* binding */ $ZodJWT),\n/* harmony export */ $ZodKSUID: () => (/* binding */ $ZodKSUID),\n/* harmony export */ $ZodLazy: () => (/* binding */ $ZodLazy),\n/* harmony export */ $ZodLiteral: () => (/* binding */ $ZodLiteral),\n/* harmony export */ $ZodMAC: () => (/* binding */ $ZodMAC),\n/* harmony export */ $ZodMap: () => (/* binding */ $ZodMap),\n/* harmony export */ $ZodNaN: () => (/* binding */ $ZodNaN),\n/* harmony export */ $ZodNanoID: () => (/* binding */ $ZodNanoID),\n/* harmony export */ $ZodNever: () => (/* binding */ $ZodNever),\n/* harmony export */ $ZodNonOptional: () => (/* binding */ $ZodNonOptional),\n/* harmony export */ $ZodNull: () => (/* binding */ $ZodNull),\n/* harmony export */ $ZodNullable: () => (/* binding */ $ZodNullable),\n/* harmony export */ $ZodNumber: () => (/* binding */ $ZodNumber),\n/* harmony export */ $ZodNumberFormat: () => (/* binding */ $ZodNumberFormat),\n/* harmony export */ $ZodObject: () => (/* binding */ $ZodObject),\n/* harmony export */ $ZodObjectJIT: () => (/* binding */ $ZodObjectJIT),\n/* harmony export */ $ZodOptional: () => (/* binding */ $ZodOptional),\n/* harmony export */ $ZodPipe: () => (/* binding */ $ZodPipe),\n/* harmony export */ $ZodPrefault: () => (/* binding */ $ZodPrefault),\n/* harmony export */ $ZodPreprocess: () => (/* binding */ $ZodPreprocess),\n/* harmony export */ $ZodPromise: () => (/* binding */ $ZodPromise),\n/* harmony export */ $ZodReadonly: () => (/* binding */ $ZodReadonly),\n/* harmony export */ $ZodRecord: () => (/* binding */ $ZodRecord),\n/* harmony export */ $ZodSet: () => (/* binding */ $ZodSet),\n/* harmony export */ $ZodString: () => (/* binding */ $ZodString),\n/* harmony export */ $ZodStringFormat: () => (/* binding */ $ZodStringFormat),\n/* harmony export */ $ZodSuccess: () => (/* binding */ $ZodSuccess),\n/* harmony export */ $ZodSymbol: () => (/* binding */ $ZodSymbol),\n/* harmony export */ $ZodTemplateLiteral: () => (/* binding */ $ZodTemplateLiteral),\n/* harmony export */ $ZodTransform: () => (/* binding */ $ZodTransform),\n/* harmony export */ $ZodTuple: () => (/* binding */ $ZodTuple),\n/* harmony export */ $ZodType: () => (/* binding */ $ZodType),\n/* harmony export */ $ZodULID: () => (/* binding */ $ZodULID),\n/* harmony export */ $ZodURL: () => (/* binding */ $ZodURL),\n/* harmony export */ $ZodUUID: () => (/* binding */ $ZodUUID),\n/* harmony export */ $ZodUndefined: () => (/* binding */ $ZodUndefined),\n/* harmony export */ $ZodUnion: () => (/* binding */ $ZodUnion),\n/* harmony export */ $ZodUnknown: () => (/* binding */ $ZodUnknown),\n/* harmony export */ $ZodVoid: () => (/* binding */ $ZodVoid),\n/* harmony export */ $ZodXID: () => (/* binding */ $ZodXID),\n/* harmony export */ $ZodXor: () => (/* binding */ $ZodXor),\n/* harmony export */ clone: () => (/* reexport safe */ _util_js__WEBPACK_IMPORTED_MODULE_2__.clone),\n/* harmony export */ isValidBase64: () => (/* binding */ isValidBase64),\n/* harmony export */ isValidBase64URL: () => (/* binding */ isValidBase64URL),\n/* harmony export */ isValidJWT: () => (/* binding */ isValidJWT)\n/* harmony export */ });\n/* harmony import */ var _checks_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./checks.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/checks.js\");\n/* harmony import */ var _core_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/core.js\");\n/* harmony import */ var _doc_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./doc.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/doc.js\");\n/* harmony import */ var _parse_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./parse.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/parse.js\");\n/* harmony import */ var _regexes_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./regexes.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/regexes.js\");\n/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./util.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/util.js\");\n/* harmony import */ var _versions_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./versions.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/versions.js\");\n\n\n\n\n\n\n\nconst $ZodType = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodType\", (inst, def) => {\n var _a;\n inst ?? (inst = {});\n inst._zod.def = def; // set _def property\n inst._zod.bag = inst._zod.bag || {}; // initialize _bag object\n inst._zod.version = _versions_js__WEBPACK_IMPORTED_MODULE_1__.version;\n const checks = [...(inst._zod.def.checks ?? [])];\n // if inst is itself a checks.$ZodCheck, run it as a check\n if (inst._zod.traits.has(\"$ZodCheck\")) {\n checks.unshift(inst);\n }\n for (const ch of checks) {\n for (const fn of ch._zod.onattach) {\n fn(inst);\n }\n }\n if (checks.length === 0) {\n // deferred initializer\n // inst._zod.parse is not yet defined\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n inst._zod.deferred?.push(() => {\n inst._zod.run = inst._zod.parse;\n });\n }\n else {\n const runChecks = (payload, checks, ctx) => {\n let isAborted = _util_js__WEBPACK_IMPORTED_MODULE_2__.aborted(payload);\n let asyncResult;\n for (const ch of checks) {\n if (ch._zod.def.when) {\n if (_util_js__WEBPACK_IMPORTED_MODULE_2__.explicitlyAborted(payload))\n continue;\n const shouldRun = ch._zod.def.when(payload);\n if (!shouldRun)\n continue;\n }\n else if (isAborted) {\n continue;\n }\n const currLen = payload.issues.length;\n const _ = ch._zod.check(payload);\n if (_ instanceof Promise && ctx?.async === false) {\n throw new _core_js__WEBPACK_IMPORTED_MODULE_0__.$ZodAsyncError();\n }\n if (asyncResult || _ instanceof Promise) {\n asyncResult = (asyncResult ?? Promise.resolve()).then(async () => {\n await _;\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n return;\n if (!isAborted)\n isAborted = _util_js__WEBPACK_IMPORTED_MODULE_2__.aborted(payload, currLen);\n });\n }\n else {\n const nextLen = payload.issues.length;\n if (nextLen === currLen)\n continue;\n if (!isAborted)\n isAborted = _util_js__WEBPACK_IMPORTED_MODULE_2__.aborted(payload, currLen);\n }\n }\n if (asyncResult) {\n return asyncResult.then(() => {\n return payload;\n });\n }\n return payload;\n };\n const handleCanaryResult = (canary, payload, ctx) => {\n // abort if the canary is aborted\n if (_util_js__WEBPACK_IMPORTED_MODULE_2__.aborted(canary)) {\n canary.aborted = true;\n return canary;\n }\n // run checks first, then\n const checkResult = runChecks(payload, checks, ctx);\n if (checkResult instanceof Promise) {\n if (ctx.async === false)\n throw new _core_js__WEBPACK_IMPORTED_MODULE_0__.$ZodAsyncError();\n return checkResult.then((checkResult) => inst._zod.parse(checkResult, ctx));\n }\n return inst._zod.parse(checkResult, ctx);\n };\n inst._zod.run = (payload, ctx) => {\n if (ctx.skipChecks) {\n return inst._zod.parse(payload, ctx);\n }\n if (ctx.direction === \"backward\") {\n // run canary\n // initial pass (no checks)\n const canary = inst._zod.parse({ value: payload.value, issues: [] }, { ...ctx, skipChecks: true });\n if (canary instanceof Promise) {\n return canary.then((canary) => {\n return handleCanaryResult(canary, payload, ctx);\n });\n }\n return handleCanaryResult(canary, payload, ctx);\n }\n // forward\n const result = inst._zod.parse(payload, ctx);\n if (result instanceof Promise) {\n if (ctx.async === false)\n throw new _core_js__WEBPACK_IMPORTED_MODULE_0__.$ZodAsyncError();\n return result.then((result) => runChecks(result, checks, ctx));\n }\n return runChecks(result, checks, ctx);\n };\n }\n // Lazy initialize ~standard to avoid creating objects for every schema\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst, \"~standard\", () => ({\n validate: (value) => {\n try {\n const r = (0,_parse_js__WEBPACK_IMPORTED_MODULE_3__.safeParse)(inst, value);\n return r.success ? { value: r.data } : { issues: r.error?.issues };\n }\n catch (_) {\n return (0,_parse_js__WEBPACK_IMPORTED_MODULE_3__.safeParseAsync)(inst, value).then((r) => (r.success ? { value: r.data } : { issues: r.error?.issues }));\n }\n },\n vendor: \"zod\",\n version: 1,\n }));\n});\n\nconst $ZodString = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodString\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = [...(inst?._zod.bag?.patterns ?? [])].pop() ?? _regexes_js__WEBPACK_IMPORTED_MODULE_4__.string(inst._zod.bag);\n inst._zod.parse = (payload, _) => {\n if (def.coerce)\n try {\n payload.value = String(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"string\")\n return payload;\n payload.issues.push({\n expected: \"string\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nconst $ZodStringFormat = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodStringFormat\", (inst, def) => {\n // check initialization must come first\n _checks_js__WEBPACK_IMPORTED_MODULE_5__.$ZodCheckStringFormat.init(inst, def);\n $ZodString.init(inst, def);\n});\nconst $ZodGUID = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodGUID\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.guid);\n $ZodStringFormat.init(inst, def);\n});\nconst $ZodUUID = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodUUID\", (inst, def) => {\n if (def.version) {\n const versionMap = {\n v1: 1,\n v2: 2,\n v3: 3,\n v4: 4,\n v5: 5,\n v6: 6,\n v7: 7,\n v8: 8,\n };\n const v = versionMap[def.version];\n if (v === undefined)\n throw new Error(`Invalid UUID version: \"${def.version}\"`);\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.uuid(v));\n }\n else\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.uuid());\n $ZodStringFormat.init(inst, def);\n});\nconst $ZodEmail = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodEmail\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.email);\n $ZodStringFormat.init(inst, def);\n});\nconst $ZodURL = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodURL\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n try {\n // Trim whitespace from input\n const trimmed = payload.value.trim();\n // When normalize is off, require :// for http/https URLs\n // This prevents strings like \"http:example.com\" or \"https:/path\" from being silently accepted\n if (!def.normalize && def.protocol?.source === _regexes_js__WEBPACK_IMPORTED_MODULE_4__.httpProtocol.source) {\n if (!/^https?:\\/\\//i.test(trimmed)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid URL format\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n return;\n }\n }\n // @ts-ignore\n const url = new URL(trimmed);\n if (def.hostname) {\n def.hostname.lastIndex = 0;\n if (!def.hostname.test(url.hostname)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid hostname\",\n pattern: def.hostname.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n if (def.protocol) {\n def.protocol.lastIndex = 0;\n if (!def.protocol.test(url.protocol.endsWith(\":\") ? url.protocol.slice(0, -1) : url.protocol)) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n note: \"Invalid protocol\",\n pattern: def.protocol.source,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n }\n // Set the output value based on normalize flag\n if (def.normalize) {\n // Use normalized URL\n payload.value = url.href;\n }\n else {\n // Preserve the original input (trimmed)\n payload.value = trimmed;\n }\n return;\n }\n catch (_) {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nconst $ZodEmoji = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodEmoji\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.emoji());\n $ZodStringFormat.init(inst, def);\n});\nconst $ZodNanoID = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodNanoID\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.nanoid);\n $ZodStringFormat.init(inst, def);\n});\n/**\n * @deprecated CUID v1 is deprecated by its authors due to information leakage\n * (timestamps embedded in the id). Use {@link $ZodCUID2} instead.\n * See https://github.com/paralleldrive/cuid.\n */\nconst $ZodCUID = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCUID\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.cuid);\n $ZodStringFormat.init(inst, def);\n});\nconst $ZodCUID2 = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCUID2\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.cuid2);\n $ZodStringFormat.init(inst, def);\n});\nconst $ZodULID = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodULID\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.ulid);\n $ZodStringFormat.init(inst, def);\n});\nconst $ZodXID = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodXID\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.xid);\n $ZodStringFormat.init(inst, def);\n});\nconst $ZodKSUID = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodKSUID\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.ksuid);\n $ZodStringFormat.init(inst, def);\n});\nconst $ZodISODateTime = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodISODateTime\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.datetime(def));\n $ZodStringFormat.init(inst, def);\n});\nconst $ZodISODate = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodISODate\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.date);\n $ZodStringFormat.init(inst, def);\n});\nconst $ZodISOTime = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodISOTime\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.time(def));\n $ZodStringFormat.init(inst, def);\n});\nconst $ZodISODuration = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodISODuration\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.duration);\n $ZodStringFormat.init(inst, def);\n});\nconst $ZodIPv4 = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodIPv4\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.ipv4);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv4`;\n});\nconst $ZodIPv6 = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodIPv6\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.ipv6);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `ipv6`;\n inst._zod.check = (payload) => {\n try {\n // @ts-ignore\n new URL(`http://[${payload.value}]`);\n // return;\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"ipv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\nconst $ZodMAC = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodMAC\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.mac(def.delimiter));\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.format = `mac`;\n});\nconst $ZodCIDRv4 = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCIDRv4\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.cidrv4);\n $ZodStringFormat.init(inst, def);\n});\nconst $ZodCIDRv6 = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCIDRv6\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.cidrv6); // not used for validation\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n const parts = payload.value.split(\"/\");\n try {\n if (parts.length !== 2)\n throw new Error();\n const [address, prefix] = parts;\n if (!prefix)\n throw new Error();\n const prefixNum = Number(prefix);\n if (`${prefixNum}` !== prefix)\n throw new Error();\n if (prefixNum < 0 || prefixNum > 128)\n throw new Error();\n // @ts-ignore\n new URL(`http://[${address}]`);\n }\n catch {\n payload.issues.push({\n code: \"invalid_format\",\n format: \"cidrv6\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n }\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nfunction isValidBase64(data) {\n if (data === \"\")\n return true;\n // atob ignores whitespace, so reject it up front.\n if (/\\s/.test(data))\n return false;\n if (data.length % 4 !== 0)\n return false;\n try {\n // @ts-ignore\n atob(data);\n return true;\n }\n catch {\n return false;\n }\n}\nconst $ZodBase64 = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodBase64\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.base64);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64\";\n inst._zod.check = (payload) => {\n if (isValidBase64(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\n////////////////////////////// ZodBase64 //////////////////////////////\nfunction isValidBase64URL(data) {\n if (!_regexes_js__WEBPACK_IMPORTED_MODULE_4__.base64url.test(data))\n return false;\n const base64 = data.replace(/[-_]/g, (c) => (c === \"-\" ? \"+\" : \"/\"));\n const padded = base64.padEnd(Math.ceil(base64.length / 4) * 4, \"=\");\n return isValidBase64(padded);\n}\nconst $ZodBase64URL = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodBase64URL\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.base64url);\n $ZodStringFormat.init(inst, def);\n inst._zod.bag.contentEncoding = \"base64url\";\n inst._zod.check = (payload) => {\n if (isValidBase64URL(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"base64url\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodE164 = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodE164\", (inst, def) => {\n def.pattern ?? (def.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.e164);\n $ZodStringFormat.init(inst, def);\n});\n////////////////////////////// ZodJWT //////////////////////////////\nfunction isValidJWT(token, algorithm = null) {\n try {\n const tokensParts = token.split(\".\");\n if (tokensParts.length !== 3)\n return false;\n const [header] = tokensParts;\n if (!header)\n return false;\n // @ts-ignore\n const parsedHeader = JSON.parse(atob(header));\n if (\"typ\" in parsedHeader && parsedHeader?.typ !== \"JWT\")\n return false;\n if (!parsedHeader.alg)\n return false;\n if (algorithm && (!(\"alg\" in parsedHeader) || parsedHeader.alg !== algorithm))\n return false;\n return true;\n }\n catch {\n return false;\n }\n}\nconst $ZodJWT = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodJWT\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (isValidJWT(payload.value, def.alg))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: \"jwt\",\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodCustomStringFormat = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCustomStringFormat\", (inst, def) => {\n $ZodStringFormat.init(inst, def);\n inst._zod.check = (payload) => {\n if (def.fn(payload.value))\n return;\n payload.issues.push({\n code: \"invalid_format\",\n format: def.format,\n input: payload.value,\n inst,\n continue: !def.abort,\n });\n };\n});\nconst $ZodNumber = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodNumber\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = inst._zod.bag.pattern ?? _regexes_js__WEBPACK_IMPORTED_MODULE_4__.number;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Number(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"number\" && !Number.isNaN(input) && Number.isFinite(input)) {\n return payload;\n }\n const received = typeof input === \"number\"\n ? Number.isNaN(input)\n ? \"NaN\"\n : !Number.isFinite(input)\n ? \"Infinity\"\n : undefined\n : undefined;\n payload.issues.push({\n expected: \"number\",\n code: \"invalid_type\",\n input,\n inst,\n ...(received ? { received } : {}),\n });\n return payload;\n };\n});\nconst $ZodNumberFormat = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodNumberFormat\", (inst, def) => {\n _checks_js__WEBPACK_IMPORTED_MODULE_5__.$ZodCheckNumberFormat.init(inst, def);\n $ZodNumber.init(inst, def); // no format checks\n});\nconst $ZodBoolean = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodBoolean\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.boolean;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = Boolean(payload.value);\n }\n catch (_) { }\n const input = payload.value;\n if (typeof input === \"boolean\")\n return payload;\n payload.issues.push({\n expected: \"boolean\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nconst $ZodBigInt = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodBigInt\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.bigint;\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce)\n try {\n payload.value = BigInt(payload.value);\n }\n catch (_) { }\n if (typeof payload.value === \"bigint\")\n return payload;\n payload.issues.push({\n expected: \"bigint\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nconst $ZodBigIntFormat = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodBigIntFormat\", (inst, def) => {\n _checks_js__WEBPACK_IMPORTED_MODULE_5__.$ZodCheckBigIntFormat.init(inst, def);\n $ZodBigInt.init(inst, def); // no format checks\n});\nconst $ZodSymbol = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodSymbol\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"symbol\")\n return payload;\n payload.issues.push({\n expected: \"symbol\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nconst $ZodUndefined = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodUndefined\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__.undefined;\n inst._zod.values = new Set([undefined]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"undefined\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nconst $ZodNull = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodNull\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.pattern = _regexes_js__WEBPACK_IMPORTED_MODULE_4__[\"null\"];\n inst._zod.values = new Set([null]);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (input === null)\n return payload;\n payload.issues.push({\n expected: \"null\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nconst $ZodAny = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodAny\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nconst $ZodUnknown = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodUnknown\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload) => payload;\n});\nconst $ZodNever = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodNever\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n payload.issues.push({\n expected: \"never\",\n code: \"invalid_type\",\n input: payload.value,\n inst,\n });\n return payload;\n };\n});\nconst $ZodVoid = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodVoid\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (typeof input === \"undefined\")\n return payload;\n payload.issues.push({\n expected: \"void\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nconst $ZodDate = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodDate\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (def.coerce) {\n try {\n payload.value = new Date(payload.value);\n }\n catch (_err) { }\n }\n const input = payload.value;\n const isDate = input instanceof Date;\n const isValidDate = isDate && !Number.isNaN(input.getTime());\n if (isValidDate)\n return payload;\n payload.issues.push({\n expected: \"date\",\n code: \"invalid_type\",\n input,\n ...(isDate ? { received: \"Invalid Date\" } : {}),\n inst,\n });\n return payload;\n };\n});\nfunction handleArrayResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(..._util_js__WEBPACK_IMPORTED_MODULE_2__.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nconst $ZodArray = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodArray\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n expected: \"array\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = Array(input.length);\n const proms = [];\n for (let i = 0; i < input.length; i++) {\n const item = input[i];\n const result = def.element._zod.run({\n value: item,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleArrayResult(result, payload, i)));\n }\n else {\n handleArrayResult(result, payload, i);\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload; //handleArrayResultsAsync(parseResults, final);\n };\n});\nfunction handlePropertyResult(result, final, key, input, isOptionalIn, isOptionalOut) {\n const isPresent = key in input;\n if (result.issues.length) {\n // For optional-in/out schemas, ignore errors on absent keys.\n if (isOptionalIn && isOptionalOut && !isPresent) {\n return;\n }\n final.issues.push(..._util_js__WEBPACK_IMPORTED_MODULE_2__.prefixIssues(key, result.issues));\n }\n if (!isPresent && !isOptionalIn) {\n if (!result.issues.length) {\n final.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: undefined,\n path: [key],\n });\n }\n return;\n }\n if (result.value === undefined) {\n if (isPresent) {\n final.value[key] = undefined;\n }\n }\n else {\n final.value[key] = result.value;\n }\n}\nfunction normalizeDef(def) {\n const keys = Object.keys(def.shape);\n for (const k of keys) {\n if (!def.shape?.[k]?._zod?.traits?.has(\"$ZodType\")) {\n throw new Error(`Invalid element at key \"${k}\": expected a Zod schema`);\n }\n }\n const okeys = _util_js__WEBPACK_IMPORTED_MODULE_2__.optionalKeys(def.shape);\n return {\n ...def,\n keys,\n keySet: new Set(keys),\n numKeys: keys.length,\n optionalKeys: new Set(okeys),\n };\n}\nfunction handleCatchall(proms, input, payload, ctx, def, inst) {\n const unrecognized = [];\n const keySet = def.keySet;\n const _catchall = def.catchall._zod;\n const t = _catchall.def.type;\n const isOptionalIn = _catchall.optin === \"optional\";\n const isOptionalOut = _catchall.optout === \"optional\";\n for (const key in input) {\n // skip __proto__ so it can't replace the result prototype via the\n // assignment setter on the plain {} we build into\n if (key === \"__proto__\")\n continue;\n if (keySet.has(key))\n continue;\n if (t === \"never\") {\n unrecognized.push(key);\n continue;\n }\n const r = _catchall.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\n }\n }\n if (unrecognized.length) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n keys: unrecognized,\n input,\n inst,\n });\n }\n if (!proms.length)\n return payload;\n return Promise.all(proms).then(() => {\n return payload;\n });\n}\nconst $ZodObject = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodObject\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodType.init(inst, def);\n // const sh = def.shape;\n const desc = Object.getOwnPropertyDescriptor(def, \"shape\");\n if (!desc?.get) {\n const sh = def.shape;\n Object.defineProperty(def, \"shape\", {\n get: () => {\n const newSh = { ...sh };\n Object.defineProperty(def, \"shape\", {\n value: newSh,\n });\n return newSh;\n },\n });\n }\n const _normalized = _util_js__WEBPACK_IMPORTED_MODULE_2__.cached(() => normalizeDef(def));\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"propValues\", () => {\n const shape = def.shape;\n const propValues = {};\n for (const key in shape) {\n const field = shape[key]._zod;\n if (field.values) {\n propValues[key] ?? (propValues[key] = new Set());\n for (const v of field.values)\n propValues[key].add(v);\n }\n }\n return propValues;\n });\n const isObject = _util_js__WEBPACK_IMPORTED_MODULE_2__.isObject;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n payload.value = {};\n const proms = [];\n const shape = value.shape;\n for (const key of value.keys) {\n const el = shape[key];\n const isOptionalIn = el._zod.optin === \"optional\";\n const isOptionalOut = el._zod.optout === \"optional\";\n const r = el._zod.run({ value: input[key], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((r) => handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut)));\n }\n else {\n handlePropertyResult(r, payload, key, input, isOptionalIn, isOptionalOut);\n }\n }\n if (!catchall) {\n return proms.length ? Promise.all(proms).then(() => payload) : payload;\n }\n return handleCatchall(proms, input, payload, ctx, _normalized.value, inst);\n };\n});\nconst $ZodObjectJIT = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodObjectJIT\", (inst, def) => {\n // requires cast because technically $ZodObject doesn't extend\n $ZodObject.init(inst, def);\n const superParse = inst._zod.parse;\n const _normalized = _util_js__WEBPACK_IMPORTED_MODULE_2__.cached(() => normalizeDef(def));\n const generateFastpass = (shape) => {\n const doc = new _doc_js__WEBPACK_IMPORTED_MODULE_6__.Doc([\"shape\", \"payload\", \"ctx\"]);\n const normalized = _normalized.value;\n const parseStr = (key) => {\n const k = _util_js__WEBPACK_IMPORTED_MODULE_2__.esc(key);\n return `shape[${k}]._zod.run({ value: input[${k}], issues: [] }, ctx)`;\n };\n doc.write(`const input = payload.value;`);\n const ids = Object.create(null);\n let counter = 0;\n for (const key of normalized.keys) {\n ids[key] = `key_${counter++}`;\n }\n // A: preserve key order {\n doc.write(`const newResult = {};`);\n for (const key of normalized.keys) {\n const id = ids[key];\n const k = _util_js__WEBPACK_IMPORTED_MODULE_2__.esc(key);\n const schema = shape[key];\n const isOptionalIn = schema?._zod?.optin === \"optional\";\n const isOptionalOut = schema?._zod?.optout === \"optional\";\n doc.write(`const ${id} = ${parseStr(key)};`);\n if (isOptionalIn && isOptionalOut) {\n // For optional-in/out schemas, ignore errors on absent keys\n doc.write(`\n if (${id}.issues.length) {\n if (${k} in input) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n else if (!isOptionalIn) {\n doc.write(`\n const ${id}_present = ${k} in input;\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n if (!${id}_present && !${id}.issues.length) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: undefined,\n path: [${k}]\n });\n }\n\n if (${id}_present) {\n if (${id}.value === undefined) {\n newResult[${k}] = undefined;\n } else {\n newResult[${k}] = ${id}.value;\n }\n }\n\n `);\n }\n else {\n doc.write(`\n if (${id}.issues.length) {\n payload.issues = payload.issues.concat(${id}.issues.map(iss => ({\n ...iss,\n path: iss.path ? [${k}, ...iss.path] : [${k}]\n })));\n }\n \n if (${id}.value === undefined) {\n if (${k} in input) {\n newResult[${k}] = undefined;\n }\n } else {\n newResult[${k}] = ${id}.value;\n }\n \n `);\n }\n }\n doc.write(`payload.value = newResult;`);\n doc.write(`return payload;`);\n const fn = doc.compile();\n return (payload, ctx) => fn(shape, payload, ctx);\n };\n let fastpass;\n const isObject = _util_js__WEBPACK_IMPORTED_MODULE_2__.isObject;\n const jit = !_core_js__WEBPACK_IMPORTED_MODULE_0__.globalConfig.jitless;\n const allowsEval = _util_js__WEBPACK_IMPORTED_MODULE_2__.allowsEval;\n const fastEnabled = jit && allowsEval.value; // && !def.catchall;\n const catchall = def.catchall;\n let value;\n inst._zod.parse = (payload, ctx) => {\n value ?? (value = _normalized.value);\n const input = payload.value;\n if (!isObject(input)) {\n payload.issues.push({\n expected: \"object\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n if (jit && fastEnabled && ctx?.async === false && ctx.jitless !== true) {\n // always synchronous\n if (!fastpass)\n fastpass = generateFastpass(def.shape);\n payload = fastpass(payload, ctx);\n if (!catchall)\n return payload;\n return handleCatchall([], input, payload, ctx, value, inst);\n }\n return superParse(payload, ctx);\n };\n});\nfunction handleUnionResults(results, final, inst, ctx) {\n for (const result of results) {\n if (result.issues.length === 0) {\n final.value = result.value;\n return final;\n }\n }\n const nonaborted = results.filter((r) => !_util_js__WEBPACK_IMPORTED_MODULE_2__.aborted(r));\n if (nonaborted.length === 1) {\n final.value = nonaborted[0].value;\n return nonaborted[0];\n }\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => _util_js__WEBPACK_IMPORTED_MODULE_2__.finalizeIssue(iss, ctx, _core_js__WEBPACK_IMPORTED_MODULE_0__.config()))),\n });\n return final;\n}\nconst $ZodUnion = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodUnion\", (inst, def) => {\n $ZodType.init(inst, def);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"optin\", () => def.options.some((o) => o._zod.optin === \"optional\") ? \"optional\" : undefined);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"optout\", () => def.options.some((o) => o._zod.optout === \"optional\") ? \"optional\" : undefined);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"values\", () => {\n if (def.options.every((o) => o._zod.values)) {\n return new Set(def.options.flatMap((option) => Array.from(option._zod.values)));\n }\n return undefined;\n });\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"pattern\", () => {\n if (def.options.every((o) => o._zod.pattern)) {\n const patterns = def.options.map((o) => o._zod.pattern);\n return new RegExp(`^(${patterns.map((p) => _util_js__WEBPACK_IMPORTED_MODULE_2__.cleanRegex(p.source)).join(\"|\")})$`);\n }\n return undefined;\n });\n const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n inst._zod.parse = (payload, ctx) => {\n if (first) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n if (result.issues.length === 0)\n return result;\n results.push(result);\n }\n }\n if (!async)\n return handleUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleUnionResults(results, payload, inst, ctx);\n });\n };\n});\nfunction handleExclusiveUnionResults(results, final, inst, ctx) {\n const successes = results.filter((r) => r.issues.length === 0);\n if (successes.length === 1) {\n final.value = successes[0].value;\n return final;\n }\n if (successes.length === 0) {\n // No matches - same as regular union\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: results.map((result) => result.issues.map((iss) => _util_js__WEBPACK_IMPORTED_MODULE_2__.finalizeIssue(iss, ctx, _core_js__WEBPACK_IMPORTED_MODULE_0__.config()))),\n });\n }\n else {\n // Multiple matches - exclusive union failure\n final.issues.push({\n code: \"invalid_union\",\n input: final.value,\n inst,\n errors: [],\n inclusive: false,\n });\n }\n return final;\n}\nconst $ZodXor = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodXor\", (inst, def) => {\n $ZodUnion.init(inst, def);\n def.inclusive = false;\n const first = def.options.length === 1 ? def.options[0]._zod.run : null;\n inst._zod.parse = (payload, ctx) => {\n if (first) {\n return first(payload, ctx);\n }\n let async = false;\n const results = [];\n for (const option of def.options) {\n const result = option._zod.run({\n value: payload.value,\n issues: [],\n }, ctx);\n if (result instanceof Promise) {\n results.push(result);\n async = true;\n }\n else {\n results.push(result);\n }\n }\n if (!async)\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n return Promise.all(results).then((results) => {\n return handleExclusiveUnionResults(results, payload, inst, ctx);\n });\n };\n});\nconst $ZodDiscriminatedUnion = \n/*@__PURE__*/\n_core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodDiscriminatedUnion\", (inst, def) => {\n def.inclusive = false;\n $ZodUnion.init(inst, def);\n const _super = inst._zod.parse;\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"propValues\", () => {\n const propValues = {};\n for (const option of def.options) {\n const pv = option._zod.propValues;\n if (!pv || Object.keys(pv).length === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(option)}\"`);\n for (const [k, v] of Object.entries(pv)) {\n if (!propValues[k])\n propValues[k] = new Set();\n for (const val of v) {\n propValues[k].add(val);\n }\n }\n }\n return propValues;\n });\n const disc = _util_js__WEBPACK_IMPORTED_MODULE_2__.cached(() => {\n const opts = def.options;\n const map = new Map();\n for (const o of opts) {\n const values = o._zod.propValues?.[def.discriminator];\n if (!values || values.size === 0)\n throw new Error(`Invalid discriminated union option at index \"${def.options.indexOf(o)}\"`);\n for (const v of values) {\n if (map.has(v)) {\n throw new Error(`Duplicate discriminator value \"${String(v)}\"`);\n }\n map.set(v, o);\n }\n }\n return map;\n });\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!_util_js__WEBPACK_IMPORTED_MODULE_2__.isObject(input)) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"object\",\n input,\n inst,\n });\n return payload;\n }\n const opt = disc.value.get(input?.[def.discriminator]);\n if (opt) {\n return opt._zod.run(payload, ctx);\n }\n // Fall back to union matching when the fast discriminator path fails:\n // - explicitly enabled via unionFallback, or\n // - during backward direction (encode), since codec-based discriminators\n // have different values in forward vs backward directions\n if (def.unionFallback || ctx.direction === \"backward\") {\n return _super(payload, ctx);\n }\n // no matching discriminator\n payload.issues.push({\n code: \"invalid_union\",\n errors: [],\n note: \"No matching discriminator\",\n discriminator: def.discriminator,\n options: Array.from(disc.value.keys()),\n input,\n path: [def.discriminator],\n inst,\n });\n return payload;\n };\n});\nconst $ZodIntersection = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodIntersection\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n const left = def.left._zod.run({ value: input, issues: [] }, ctx);\n const right = def.right._zod.run({ value: input, issues: [] }, ctx);\n const async = left instanceof Promise || right instanceof Promise;\n if (async) {\n return Promise.all([left, right]).then(([left, right]) => {\n return handleIntersectionResults(payload, left, right);\n });\n }\n return handleIntersectionResults(payload, left, right);\n };\n});\nfunction mergeValues(a, b) {\n // const aType = parse.t(a);\n // const bType = parse.t(b);\n if (a === b) {\n return { valid: true, data: a };\n }\n if (a instanceof Date && b instanceof Date && +a === +b) {\n return { valid: true, data: a };\n }\n if (_util_js__WEBPACK_IMPORTED_MODULE_2__.isPlainObject(a) && _util_js__WEBPACK_IMPORTED_MODULE_2__.isPlainObject(b)) {\n const bKeys = Object.keys(b);\n const sharedKeys = Object.keys(a).filter((key) => bKeys.indexOf(key) !== -1);\n const newObj = { ...a, ...b };\n for (const key of sharedKeys) {\n const sharedValue = mergeValues(a[key], b[key]);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [key, ...sharedValue.mergeErrorPath],\n };\n }\n newObj[key] = sharedValue.data;\n }\n return { valid: true, data: newObj };\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return { valid: false, mergeErrorPath: [] };\n }\n const newArray = [];\n for (let index = 0; index < a.length; index++) {\n const itemA = a[index];\n const itemB = b[index];\n const sharedValue = mergeValues(itemA, itemB);\n if (!sharedValue.valid) {\n return {\n valid: false,\n mergeErrorPath: [index, ...sharedValue.mergeErrorPath],\n };\n }\n newArray.push(sharedValue.data);\n }\n return { valid: true, data: newArray };\n }\n return { valid: false, mergeErrorPath: [] };\n}\nfunction handleIntersectionResults(result, left, right) {\n // Track which side(s) report each key as unrecognized\n const unrecKeys = new Map();\n let unrecIssue;\n for (const iss of left.issues) {\n if (iss.code === \"unrecognized_keys\") {\n unrecIssue ?? (unrecIssue = iss);\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).l = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n for (const iss of right.issues) {\n if (iss.code === \"unrecognized_keys\") {\n for (const k of iss.keys) {\n if (!unrecKeys.has(k))\n unrecKeys.set(k, {});\n unrecKeys.get(k).r = true;\n }\n }\n else {\n result.issues.push(iss);\n }\n }\n // Report only keys unrecognized by BOTH sides\n const bothKeys = [...unrecKeys].filter(([, f]) => f.l && f.r).map(([k]) => k);\n if (bothKeys.length && unrecIssue) {\n result.issues.push({ ...unrecIssue, keys: bothKeys });\n }\n if (_util_js__WEBPACK_IMPORTED_MODULE_2__.aborted(result))\n return result;\n const merged = mergeValues(left.value, right.value);\n if (!merged.valid) {\n throw new Error(`Unmergable intersection. Error path: ` + `${JSON.stringify(merged.mergeErrorPath)}`);\n }\n result.value = merged.data;\n return result;\n}\nconst $ZodTuple = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodTuple\", (inst, def) => {\n $ZodType.init(inst, def);\n const items = def.items;\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!Array.isArray(input)) {\n payload.issues.push({\n input,\n inst,\n expected: \"tuple\",\n code: \"invalid_type\",\n });\n return payload;\n }\n payload.value = [];\n const proms = [];\n const optinStart = getTupleOptStart(items, \"optin\");\n const optoutStart = getTupleOptStart(items, \"optout\");\n if (!def.rest) {\n if (input.length < optinStart) {\n payload.issues.push({\n code: \"too_small\",\n minimum: optinStart,\n inclusive: true,\n input,\n inst,\n origin: \"array\",\n });\n return payload;\n }\n if (input.length > items.length) {\n payload.issues.push({\n code: \"too_big\",\n maximum: items.length,\n inclusive: true,\n input,\n inst,\n origin: \"array\",\n });\n }\n }\n // Run every item in parallel, collecting results into an indexed\n // array. The post-processing in `handleTupleResults` walks them in\n // order so it can decide whether an absent optional-output error can\n // truncate the tail or must be reported to preserve required output.\n const itemResults = new Array(items.length);\n for (let i = 0; i < items.length; i++) {\n const r = items[i]._zod.run({ value: input[i], issues: [] }, ctx);\n if (r instanceof Promise) {\n proms.push(r.then((rr) => {\n itemResults[i] = rr;\n }));\n }\n else {\n itemResults[i] = r;\n }\n }\n if (def.rest) {\n let i = items.length - 1;\n const rest = input.slice(items.length);\n for (const el of rest) {\n i++;\n const result = def.rest._zod.run({ value: el, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((r) => handleTupleResult(r, payload, i)));\n }\n else {\n handleTupleResult(result, payload, i);\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => handleTupleResults(itemResults, payload, items, input, optoutStart));\n }\n return handleTupleResults(itemResults, payload, items, input, optoutStart);\n };\n});\nfunction getTupleOptStart(items, key) {\n for (let i = items.length - 1; i >= 0; i--) {\n if (items[i]._zod[key] !== \"optional\")\n return i + 1;\n }\n return 0;\n}\nfunction handleTupleResult(result, final, index) {\n if (result.issues.length) {\n final.issues.push(..._util_js__WEBPACK_IMPORTED_MODULE_2__.prefixIssues(index, result.issues));\n }\n final.value[index] = result.value;\n}\nfunction handleTupleResults(itemResults, final, items, input, optoutStart) {\n // Walk results in order. Mirror $ZodObject's swallow-on-absent-optional\n // rule, but only after `optoutStart`: the first index where the output\n // tuple tail can be absent.\n for (let i = 0; i < items.length; i++) {\n const r = itemResults[i];\n const isPresent = i < input.length;\n if (r.issues.length) {\n if (!isPresent && i >= optoutStart) {\n final.value.length = i;\n break;\n }\n final.issues.push(..._util_js__WEBPACK_IMPORTED_MODULE_2__.prefixIssues(i, r.issues));\n }\n final.value[i] = r.value;\n }\n // Drop trailing slots that produced `undefined` for absent input\n // (the array analog of an absent optional key on an object). The\n // `i >= input.length` floor is critical: an explicit `undefined`\n // *inside* the input must be preserved even when the schema is\n // optional-out (e.g. `z.string().or(z.undefined())` accepting an\n // explicit undefined value).\n for (let i = final.value.length - 1; i >= input.length; i--) {\n if (items[i]._zod.optout === \"optional\" && final.value[i] === undefined) {\n final.value.length = i;\n }\n else {\n break;\n }\n }\n return final;\n}\nconst $ZodRecord = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodRecord\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!_util_js__WEBPACK_IMPORTED_MODULE_2__.isPlainObject(input)) {\n payload.issues.push({\n expected: \"record\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n const values = def.keyType._zod.values;\n if (values) {\n payload.value = {};\n const recordKeys = new Set();\n for (const key of values) {\n if (typeof key === \"string\" || typeof key === \"number\" || typeof key === \"symbol\") {\n recordKeys.add(typeof key === \"number\" ? key.toString() : key);\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (keyResult.issues.length) {\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => _util_js__WEBPACK_IMPORTED_MODULE_2__.finalizeIssue(iss, ctx, _core_js__WEBPACK_IMPORTED_MODULE_0__.config())),\n input: key,\n path: [key],\n inst,\n });\n continue;\n }\n const outKey = keyResult.value;\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(..._util_js__WEBPACK_IMPORTED_MODULE_2__.prefixIssues(key, result.issues));\n }\n payload.value[outKey] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(..._util_js__WEBPACK_IMPORTED_MODULE_2__.prefixIssues(key, result.issues));\n }\n payload.value[outKey] = result.value;\n }\n }\n }\n let unrecognized;\n for (const key in input) {\n if (!recordKeys.has(key)) {\n unrecognized = unrecognized ?? [];\n unrecognized.push(key);\n }\n }\n if (unrecognized && unrecognized.length > 0) {\n payload.issues.push({\n code: \"unrecognized_keys\",\n input,\n inst,\n keys: unrecognized,\n });\n }\n }\n else {\n payload.value = {};\n // Reflect.ownKeys for Symbol-key support; filter non-enumerable to match z.object()\n for (const key of Reflect.ownKeys(input)) {\n if (key === \"__proto__\")\n continue;\n if (!Object.prototype.propertyIsEnumerable.call(input, key))\n continue;\n let keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n if (keyResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n // Numeric string fallback: if key is a numeric string and failed, retry with Number(key)\n // This handles z.number(), z.literal([1, 2, 3]), and unions containing numeric literals\n const checkNumericKey = typeof key === \"string\" && _regexes_js__WEBPACK_IMPORTED_MODULE_4__.number.test(key) && keyResult.issues.length;\n if (checkNumericKey) {\n const retryResult = def.keyType._zod.run({ value: Number(key), issues: [] }, ctx);\n if (retryResult instanceof Promise) {\n throw new Error(\"Async schemas not supported in object keys currently\");\n }\n if (retryResult.issues.length === 0) {\n keyResult = retryResult;\n }\n }\n if (keyResult.issues.length) {\n if (def.mode === \"loose\") {\n // Pass through unchanged\n payload.value[key] = input[key];\n }\n else {\n // Default \"strict\" behavior: error on invalid key\n payload.issues.push({\n code: \"invalid_key\",\n origin: \"record\",\n issues: keyResult.issues.map((iss) => _util_js__WEBPACK_IMPORTED_MODULE_2__.finalizeIssue(iss, ctx, _core_js__WEBPACK_IMPORTED_MODULE_0__.config())),\n input: key,\n path: [key],\n inst,\n });\n }\n continue;\n }\n const result = def.valueType._zod.run({ value: input[key], issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => {\n if (result.issues.length) {\n payload.issues.push(..._util_js__WEBPACK_IMPORTED_MODULE_2__.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }));\n }\n else {\n if (result.issues.length) {\n payload.issues.push(..._util_js__WEBPACK_IMPORTED_MODULE_2__.prefixIssues(key, result.issues));\n }\n payload.value[keyResult.value] = result.value;\n }\n }\n }\n if (proms.length) {\n return Promise.all(proms).then(() => payload);\n }\n return payload;\n };\n});\nconst $ZodMap = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodMap\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Map)) {\n payload.issues.push({\n expected: \"map\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n }\n const proms = [];\n payload.value = new Map();\n for (const [key, value] of input) {\n const keyResult = def.keyType._zod.run({ value: key, issues: [] }, ctx);\n const valueResult = def.valueType._zod.run({ value: value, issues: [] }, ctx);\n if (keyResult instanceof Promise || valueResult instanceof Promise) {\n proms.push(Promise.all([keyResult, valueResult]).then(([keyResult, valueResult]) => {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }));\n }\n else {\n handleMapResult(keyResult, valueResult, payload, key, input, inst, ctx);\n }\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleMapResult(keyResult, valueResult, final, key, input, inst, ctx) {\n if (keyResult.issues.length) {\n if (_util_js__WEBPACK_IMPORTED_MODULE_2__.propertyKeyTypes.has(typeof key)) {\n final.issues.push(..._util_js__WEBPACK_IMPORTED_MODULE_2__.prefixIssues(key, keyResult.issues));\n }\n else {\n final.issues.push({\n code: \"invalid_key\",\n origin: \"map\",\n input,\n inst,\n issues: keyResult.issues.map((iss) => _util_js__WEBPACK_IMPORTED_MODULE_2__.finalizeIssue(iss, ctx, _core_js__WEBPACK_IMPORTED_MODULE_0__.config())),\n });\n }\n }\n if (valueResult.issues.length) {\n if (_util_js__WEBPACK_IMPORTED_MODULE_2__.propertyKeyTypes.has(typeof key)) {\n final.issues.push(..._util_js__WEBPACK_IMPORTED_MODULE_2__.prefixIssues(key, valueResult.issues));\n }\n else {\n final.issues.push({\n origin: \"map\",\n code: \"invalid_element\",\n input,\n inst,\n key: key,\n issues: valueResult.issues.map((iss) => _util_js__WEBPACK_IMPORTED_MODULE_2__.finalizeIssue(iss, ctx, _core_js__WEBPACK_IMPORTED_MODULE_0__.config())),\n });\n }\n }\n final.value.set(keyResult.value, valueResult.value);\n}\nconst $ZodSet = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodSet\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n const input = payload.value;\n if (!(input instanceof Set)) {\n payload.issues.push({\n input,\n inst,\n expected: \"set\",\n code: \"invalid_type\",\n });\n return payload;\n }\n const proms = [];\n payload.value = new Set();\n for (const item of input) {\n const result = def.valueType._zod.run({ value: item, issues: [] }, ctx);\n if (result instanceof Promise) {\n proms.push(result.then((result) => handleSetResult(result, payload)));\n }\n else\n handleSetResult(result, payload);\n }\n if (proms.length)\n return Promise.all(proms).then(() => payload);\n return payload;\n };\n});\nfunction handleSetResult(result, final) {\n if (result.issues.length) {\n final.issues.push(...result.issues);\n }\n final.value.add(result.value);\n}\nconst $ZodEnum = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodEnum\", (inst, def) => {\n $ZodType.init(inst, def);\n const values = _util_js__WEBPACK_IMPORTED_MODULE_2__.getEnumValues(def.entries);\n const valuesSet = new Set(values);\n inst._zod.values = valuesSet;\n inst._zod.pattern = new RegExp(`^(${values\n .filter((k) => _util_js__WEBPACK_IMPORTED_MODULE_2__.propertyKeyTypes.has(typeof k))\n .map((o) => (typeof o === \"string\" ? _util_js__WEBPACK_IMPORTED_MODULE_2__.escapeRegex(o) : o.toString()))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (valuesSet.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values,\n input,\n inst,\n });\n return payload;\n };\n});\nconst $ZodLiteral = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n if (def.values.length === 0) {\n throw new Error(\"Cannot create literal schema with no valid values\");\n }\n const values = new Set(def.values);\n inst._zod.values = values;\n inst._zod.pattern = new RegExp(`^(${def.values\n .map((o) => (typeof o === \"string\" ? _util_js__WEBPACK_IMPORTED_MODULE_2__.escapeRegex(o) : o ? _util_js__WEBPACK_IMPORTED_MODULE_2__.escapeRegex(o.toString()) : String(o)))\n .join(\"|\")})$`);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n if (values.has(input)) {\n return payload;\n }\n payload.issues.push({\n code: \"invalid_value\",\n values: def.values,\n input,\n inst,\n });\n return payload;\n };\n});\nconst $ZodFile = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodFile\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n const input = payload.value;\n // @ts-ignore\n if (input instanceof File)\n return payload;\n payload.issues.push({\n expected: \"file\",\n code: \"invalid_type\",\n input,\n inst,\n });\n return payload;\n };\n});\nconst $ZodTransform = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodTransform\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new _core_js__WEBPACK_IMPORTED_MODULE_0__.$ZodEncodeError(inst.constructor.name);\n }\n const _out = def.transform(payload.value, payload);\n if (ctx.async) {\n const output = _out instanceof Promise ? _out : Promise.resolve(_out);\n return output.then((output) => {\n payload.value = output;\n payload.fallback = true;\n return payload;\n });\n }\n if (_out instanceof Promise) {\n throw new _core_js__WEBPACK_IMPORTED_MODULE_0__.$ZodAsyncError();\n }\n payload.value = _out;\n payload.fallback = true;\n return payload;\n };\n});\nfunction handleOptionalResult(result, input) {\n if (input === undefined && (result.issues.length || result.fallback)) {\n return { issues: [], value: undefined };\n }\n return result;\n}\nconst $ZodOptional = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n inst._zod.optout = \"optional\";\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, undefined]) : undefined;\n });\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${_util_js__WEBPACK_IMPORTED_MODULE_2__.cleanRegex(pattern.source)})?$`) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n if (def.innerType._zod.optin === \"optional\") {\n const input = payload.value;\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise)\n return result.then((r) => handleOptionalResult(r, input));\n return handleOptionalResult(result, input);\n }\n if (payload.value === undefined) {\n return payload;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nconst $ZodExactOptional = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodExactOptional\", (inst, def) => {\n // Call parent init - inherits optin/optout = \"optional\"\n $ZodOptional.init(inst, def);\n // Override values/pattern to NOT add undefined\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"pattern\", () => def.innerType._zod.pattern);\n // Override parse to just delegate (no undefined handling)\n inst._zod.parse = (payload, ctx) => {\n return def.innerType._zod.run(payload, ctx);\n };\n});\nconst $ZodNullable = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodNullable\", (inst, def) => {\n $ZodType.init(inst, def);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"optin\", () => def.innerType._zod.optin);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"pattern\", () => {\n const pattern = def.innerType._zod.pattern;\n return pattern ? new RegExp(`^(${_util_js__WEBPACK_IMPORTED_MODULE_2__.cleanRegex(pattern.source)}|null)$`) : undefined;\n });\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"values\", () => {\n return def.innerType._zod.values ? new Set([...def.innerType._zod.values, null]) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n // Forward direction (decode): allow null to pass through\n if (payload.value === null)\n return payload;\n return def.innerType._zod.run(payload, ctx);\n };\n});\nconst $ZodDefault = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodDefault\", (inst, def) => {\n $ZodType.init(inst, def);\n // inst._zod.qin = \"true\";\n inst._zod.optin = \"optional\";\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply defaults for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n /**\n * $ZodDefault returns the default value immediately in forward direction.\n * It doesn't pass the default value into the validator (\"prefault\"). There's no reason to pass the default value through validation. The validity of the default is enforced by TypeScript statically. Otherwise, it's the responsibility of the user to ensure the default is valid. In the case of pipes with divergent in/out types, you can specify the default on the `in` schema of your ZodPipe to set a \"prefault\" for the pipe. */\n return payload;\n }\n // Forward direction: continue with default handling\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleDefaultResult(result, def));\n }\n return handleDefaultResult(result, def);\n };\n});\nfunction handleDefaultResult(payload, def) {\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return payload;\n}\nconst $ZodPrefault = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodPrefault\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply prefault for undefined input\n if (payload.value === undefined) {\n payload.value = def.defaultValue;\n }\n return def.innerType._zod.run(payload, ctx);\n };\n});\nconst $ZodNonOptional = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodNonOptional\", (inst, def) => {\n $ZodType.init(inst, def);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"values\", () => {\n const v = def.innerType._zod.values;\n return v ? new Set([...v].filter((x) => x !== undefined)) : undefined;\n });\n inst._zod.parse = (payload, ctx) => {\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => handleNonOptionalResult(result, inst));\n }\n return handleNonOptionalResult(result, inst);\n };\n});\nfunction handleNonOptionalResult(payload, inst) {\n if (!payload.issues.length && payload.value === undefined) {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"nonoptional\",\n input: payload.value,\n inst,\n });\n }\n return payload;\n}\nconst $ZodSuccess = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodSuccess\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n throw new _core_js__WEBPACK_IMPORTED_MODULE_0__.$ZodEncodeError(\"ZodSuccess\");\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.issues.length === 0;\n return payload;\n });\n }\n payload.value = result.issues.length === 0;\n return payload;\n };\n});\nconst $ZodCatch = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCatch\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.optin = \"optional\";\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"optout\", () => def.innerType._zod.optout);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n // Forward direction (decode): apply catch logic\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then((result) => {\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => _util_js__WEBPACK_IMPORTED_MODULE_2__.finalizeIssue(iss, ctx, _core_js__WEBPACK_IMPORTED_MODULE_0__.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n payload.fallback = true;\n }\n return payload;\n });\n }\n payload.value = result.value;\n if (result.issues.length) {\n payload.value = def.catchValue({\n ...payload,\n error: {\n issues: result.issues.map((iss) => _util_js__WEBPACK_IMPORTED_MODULE_2__.finalizeIssue(iss, ctx, _core_js__WEBPACK_IMPORTED_MODULE_0__.config())),\n },\n input: payload.value,\n });\n payload.issues = [];\n payload.fallback = true;\n }\n return payload;\n };\n});\nconst $ZodNaN = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodNaN\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"number\" || !Number.isNaN(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"nan\",\n code: \"invalid_type\",\n });\n return payload;\n }\n return payload;\n };\n});\nconst $ZodPipe = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodPipe\", (inst, def) => {\n $ZodType.init(inst, def);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handlePipeResult(right, def.in, ctx));\n }\n return handlePipeResult(right, def.in, ctx);\n }\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handlePipeResult(left, def.out, ctx));\n }\n return handlePipeResult(left, def.out, ctx);\n };\n});\nfunction handlePipeResult(left, next, ctx) {\n if (left.issues.length) {\n // prevent further checks\n left.aborted = true;\n return left;\n }\n return next._zod.run({ value: left.value, issues: left.issues, fallback: left.fallback }, ctx);\n}\nconst $ZodCodec = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCodec\", (inst, def) => {\n $ZodType.init(inst, def);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"values\", () => def.in._zod.values);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"optin\", () => def.in._zod.optin);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"optout\", () => def.out._zod.optout);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"propValues\", () => def.in._zod.propValues);\n inst._zod.parse = (payload, ctx) => {\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const left = def.in._zod.run(payload, ctx);\n if (left instanceof Promise) {\n return left.then((left) => handleCodecAResult(left, def, ctx));\n }\n return handleCodecAResult(left, def, ctx);\n }\n else {\n const right = def.out._zod.run(payload, ctx);\n if (right instanceof Promise) {\n return right.then((right) => handleCodecAResult(right, def, ctx));\n }\n return handleCodecAResult(right, def, ctx);\n }\n };\n});\nfunction handleCodecAResult(result, def, ctx) {\n if (result.issues.length) {\n // prevent further checks\n result.aborted = true;\n return result;\n }\n const direction = ctx.direction || \"forward\";\n if (direction === \"forward\") {\n const transformed = def.transform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.out, ctx));\n }\n return handleCodecTxResult(result, transformed, def.out, ctx);\n }\n else {\n const transformed = def.reverseTransform(result.value, result);\n if (transformed instanceof Promise) {\n return transformed.then((value) => handleCodecTxResult(result, value, def.in, ctx));\n }\n return handleCodecTxResult(result, transformed, def.in, ctx);\n }\n}\nfunction handleCodecTxResult(left, value, nextSchema, ctx) {\n // Check if transform added any issues\n if (left.issues.length) {\n left.aborted = true;\n return left;\n }\n return nextSchema._zod.run({ value, issues: left.issues }, ctx);\n}\nconst $ZodPreprocess = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodPreprocess\", (inst, def) => {\n $ZodPipe.init(inst, def);\n});\nconst $ZodReadonly = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodReadonly\", (inst, def) => {\n $ZodType.init(inst, def);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"propValues\", () => def.innerType._zod.propValues);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"values\", () => def.innerType._zod.values);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"optin\", () => def.innerType?._zod?.optin);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"optout\", () => def.innerType?._zod?.optout);\n inst._zod.parse = (payload, ctx) => {\n if (ctx.direction === \"backward\") {\n return def.innerType._zod.run(payload, ctx);\n }\n const result = def.innerType._zod.run(payload, ctx);\n if (result instanceof Promise) {\n return result.then(handleReadonlyResult);\n }\n return handleReadonlyResult(result);\n };\n});\nfunction handleReadonlyResult(payload) {\n payload.value = Object.freeze(payload.value);\n return payload;\n}\nconst $ZodTemplateLiteral = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodTemplateLiteral\", (inst, def) => {\n $ZodType.init(inst, def);\n const regexParts = [];\n for (const part of def.parts) {\n if (typeof part === \"object\" && part !== null) {\n // is Zod schema\n if (!part._zod.pattern) {\n // if (!source)\n throw new Error(`Invalid template literal part, no pattern found: ${[...part._zod.traits].shift()}`);\n }\n const source = part._zod.pattern instanceof RegExp ? part._zod.pattern.source : part._zod.pattern;\n if (!source)\n throw new Error(`Invalid template literal part: ${part._zod.traits}`);\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n regexParts.push(source.slice(start, end));\n }\n else if (part === null || _util_js__WEBPACK_IMPORTED_MODULE_2__.primitiveTypes.has(typeof part)) {\n regexParts.push(_util_js__WEBPACK_IMPORTED_MODULE_2__.escapeRegex(`${part}`));\n }\n else {\n throw new Error(`Invalid template literal part: ${part}`);\n }\n }\n inst._zod.pattern = new RegExp(`^${regexParts.join(\"\")}$`);\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"string\") {\n payload.issues.push({\n input: payload.value,\n inst,\n expected: \"string\",\n code: \"invalid_type\",\n });\n return payload;\n }\n inst._zod.pattern.lastIndex = 0;\n if (!inst._zod.pattern.test(payload.value)) {\n payload.issues.push({\n input: payload.value,\n inst,\n code: \"invalid_format\",\n format: def.format ?? \"template_literal\",\n pattern: inst._zod.pattern.source,\n });\n return payload;\n }\n return payload;\n };\n});\nconst $ZodFunction = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodFunction\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._def = def;\n inst._zod.def = def;\n inst.implement = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implement() must be called with a function\");\n }\n return function (...args) {\n const parsedArgs = inst._def.input ? (0,_parse_js__WEBPACK_IMPORTED_MODULE_3__.parse)(inst._def.input, args) : args;\n const result = Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return (0,_parse_js__WEBPACK_IMPORTED_MODULE_3__.parse)(inst._def.output, result);\n }\n return result;\n };\n };\n inst.implementAsync = (func) => {\n if (typeof func !== \"function\") {\n throw new Error(\"implementAsync() must be called with a function\");\n }\n return async function (...args) {\n const parsedArgs = inst._def.input ? await (0,_parse_js__WEBPACK_IMPORTED_MODULE_3__.parseAsync)(inst._def.input, args) : args;\n const result = await Reflect.apply(func, this, parsedArgs);\n if (inst._def.output) {\n return await (0,_parse_js__WEBPACK_IMPORTED_MODULE_3__.parseAsync)(inst._def.output, result);\n }\n return result;\n };\n };\n inst._zod.parse = (payload, _ctx) => {\n if (typeof payload.value !== \"function\") {\n payload.issues.push({\n code: \"invalid_type\",\n expected: \"function\",\n input: payload.value,\n inst,\n });\n return payload;\n }\n // Check if output is a promise type to determine if we should use async implementation\n const hasPromiseOutput = inst._def.output && inst._def.output._zod.def.type === \"promise\";\n if (hasPromiseOutput) {\n payload.value = inst.implementAsync(payload.value);\n }\n else {\n payload.value = inst.implement(payload.value);\n }\n return payload;\n };\n inst.input = (...args) => {\n const F = inst.constructor;\n if (Array.isArray(args[0])) {\n return new F({\n type: \"function\",\n input: new $ZodTuple({\n type: \"tuple\",\n items: args[0],\n rest: args[1],\n }),\n output: inst._def.output,\n });\n }\n return new F({\n type: \"function\",\n input: args[0],\n output: inst._def.output,\n });\n };\n inst.output = (output) => {\n const F = inst.constructor;\n return new F({\n type: \"function\",\n input: inst._def.input,\n output,\n });\n };\n return inst;\n});\nconst $ZodPromise = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodPromise\", (inst, def) => {\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, ctx) => {\n return Promise.resolve(payload.value).then((inner) => def.innerType._zod.run({ value: inner, issues: [] }, ctx));\n };\n});\nconst $ZodLazy = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodLazy\", (inst, def) => {\n $ZodType.init(inst, def);\n // Cache the resolved inner type on the shared `def` so all clones of this\n // lazy (e.g. via `.describe()`/`.meta()`) share the same inner instance,\n // preserving identity for cycle detection on recursive schemas.\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"innerType\", () => {\n const d = def;\n if (!d._cachedInner)\n d._cachedInner = def.getter();\n return d._cachedInner;\n });\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"pattern\", () => inst._zod.innerType?._zod?.pattern);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"propValues\", () => inst._zod.innerType?._zod?.propValues);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"optin\", () => inst._zod.innerType?._zod?.optin ?? undefined);\n _util_js__WEBPACK_IMPORTED_MODULE_2__.defineLazy(inst._zod, \"optout\", () => inst._zod.innerType?._zod?.optout ?? undefined);\n inst._zod.parse = (payload, ctx) => {\n const inner = inst._zod.innerType;\n return inner._zod.run(payload, ctx);\n };\n});\nconst $ZodCustom = /*@__PURE__*/ _core_js__WEBPACK_IMPORTED_MODULE_0__.$constructor(\"$ZodCustom\", (inst, def) => {\n _checks_js__WEBPACK_IMPORTED_MODULE_5__.$ZodCheck.init(inst, def);\n $ZodType.init(inst, def);\n inst._zod.parse = (payload, _) => {\n return payload;\n };\n inst._zod.check = (payload) => {\n const input = payload.value;\n const r = def.fn(input);\n if (r instanceof Promise) {\n return r.then((r) => handleRefineResult(r, payload, input, inst));\n }\n handleRefineResult(r, payload, input, inst);\n return;\n };\n});\nfunction handleRefineResult(result, payload, input, inst) {\n if (!result) {\n const _iss = {\n code: \"custom\",\n input,\n inst, // incorporates params.error into issue reporting\n path: [...(inst._zod.def.path ?? [])], // incorporates params.error into issue reporting\n continue: !inst._zod.def.abort,\n // params: inst._zod.def.params,\n };\n if (inst._zod.def.params)\n _iss.params = inst._zod.def.params;\n payload.issues.push(_util_js__WEBPACK_IMPORTED_MODULE_2__.issue(_iss));\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9zY2hlbWFzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBc0M7QUFDSjtBQUNIO0FBQzJDO0FBQ2xDO0FBQ047QUFDTTtBQUNqQywrQkFBK0Isa0RBQWlCO0FBQ3ZEO0FBQ0Esc0JBQXNCO0FBQ3RCLHlCQUF5QjtBQUN6Qix5Q0FBeUM7QUFDekMsd0JBQXdCLGlEQUFPO0FBQy9CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBLDRCQUE0Qiw2Q0FBWTtBQUN4QztBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsdURBQXNCO0FBQzlDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsb0RBQW1CO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3Q0FBd0MsNkNBQVk7QUFDcEQscUJBQXFCO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9DQUFvQyw2Q0FBWTtBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnQkFBZ0IsNkNBQVk7QUFDNUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4QkFBOEIsb0RBQW1CO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpREFBaUQsa0NBQWtDLElBQUksMEJBQTBCO0FBQ2pIO0FBQ0E7QUFDQTtBQUNB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QWlCO0FBQ2pCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLENBQUM7QUFDTSxrQ0FBa0Msa0RBQWlCO0FBQzFEO0FBQ0E7QUFDQSx1RkFBdUYsMEJBQTBCO0FBQ2pIO0FBQ0EsQ0FBQztBQUNNLCtCQUErQixrREFBaUI7QUFDdkQ7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGdEQUFlO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMLElBQUksZ0RBQWU7QUFDbkIsSUFBSSxnREFBZTtBQUNuQixJQUFJLGdEQUFlO0FBQ25CLElBQUksZ0RBQWU7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ00saUNBQWlDLGtEQUFpQjtBQUN6RCxJQUFJLGlEQUFnQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw0QkFBNEIsMkNBQVU7QUFDdEM7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS9zY2hlbWFzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNoZWNrcyBmcm9tIFwiLi9jaGVja3MuanNcIjtcbmltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIi4vY29yZS5qc1wiO1xuaW1wb3J0IHsgRG9jIH0gZnJvbSBcIi4vZG9jLmpzXCI7XG5pbXBvcnQgeyBwYXJzZSwgcGFyc2VBc3luYywgc2FmZVBhcnNlLCBzYWZlUGFyc2VBc3luYyB9IGZyb20gXCIuL3BhcnNlLmpzXCI7XG5pbXBvcnQgKiBhcyByZWdleGVzIGZyb20gXCIuL3JlZ2V4ZXMuanNcIjtcbmltcG9ydCAqIGFzIHV0aWwgZnJvbSBcIi4vdXRpbC5qc1wiO1xuaW1wb3J0IHsgdmVyc2lvbiB9IGZyb20gXCIuL3ZlcnNpb25zLmpzXCI7XG5leHBvcnQgY29uc3QgJFpvZFR5cGUgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFR5cGVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIHZhciBfYTtcbiAgICBpbnN0ID8/IChpbnN0ID0ge30pO1xuICAgIGluc3QuX3pvZC5kZWYgPSBkZWY7IC8vIHNldCBfZGVmIHByb3BlcnR5XG4gICAgaW5zdC5fem9kLmJhZyA9IGluc3QuX3pvZC5iYWcgfHwge307IC8vIGluaXRpYWxpemUgX2JhZyBvYmplY3RcbiAgICBpbnN0Ll96b2QudmVyc2lvbiA9IHZlcnNpb247XG4gICAgY29uc3QgY2hlY2tzID0gWy4uLihpbnN0Ll96b2QuZGVmLmNoZWNrcyA/PyBbXSldO1xuICAgIC8vIGlmIGluc3QgaXMgaXRzZWxmIGEgY2hlY2tzLiRab2RDaGVjaywgcnVuIGl0IGFzIGEgY2hlY2tcbiAgICBpZiAoaW5zdC5fem9kLnRyYWl0cy5oYXMoXCIkWm9kQ2hlY2tcIikpIHtcbiAgICAgICAgY2hlY2tzLnVuc2hpZnQoaW5zdCk7XG4gICAgfVxuICAgIGZvciAoY29uc3QgY2ggb2YgY2hlY2tzKSB7XG4gICAgICAgIGZvciAoY29uc3QgZm4gb2YgY2guX3pvZC5vbmF0dGFjaCkge1xuICAgICAgICAgICAgZm4oaW5zdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNoZWNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gZGVmZXJyZWQgaW5pdGlhbGl6ZXJcbiAgICAgICAgLy8gaW5zdC5fem9kLnBhcnNlIGlzIG5vdCB5ZXQgZGVmaW5lZFxuICAgICAgICAoX2EgPSBpbnN0Ll96b2QpLmRlZmVycmVkID8/IChfYS5kZWZlcnJlZCA9IFtdKTtcbiAgICAgICAgaW5zdC5fem9kLmRlZmVycmVkPy5wdXNoKCgpID0+IHtcbiAgICAgICAgICAgIGluc3QuX3pvZC5ydW4gPSBpbnN0Ll96b2QucGFyc2U7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcnVuQ2hlY2tzID0gKHBheWxvYWQsIGNoZWNrcywgY3R4KSA9PiB7XG4gICAgICAgICAgICBsZXQgaXNBYm9ydGVkID0gdXRpbC5hYm9ydGVkKHBheWxvYWQpO1xuICAgICAgICAgICAgbGV0IGFzeW5jUmVzdWx0O1xuICAgICAgICAgICAgZm9yIChjb25zdCBjaCBvZiBjaGVja3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2guX3pvZC5kZWYud2hlbikge1xuICAgICAgICAgICAgICAgICAgICBpZiAodXRpbC5leHBsaWNpdGx5QWJvcnRlZChwYXlsb2FkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaG91bGRSdW4gPSBjaC5fem9kLmRlZi53aGVuKHBheWxvYWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNob3VsZFJ1bilcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc0Fib3J0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJMZW4gPSBwYXlsb2FkLmlzc3Vlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgY29uc3QgXyA9IGNoLl96b2QuY2hlY2socGF5bG9hZCk7XG4gICAgICAgICAgICAgICAgaWYgKF8gaW5zdGFuY2VvZiBQcm9taXNlICYmIGN0eD8uYXN5bmMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBjb3JlLiRab2RBc3luY0Vycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhc3luY1Jlc3VsdCB8fCBfIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICBhc3luY1Jlc3VsdCA9IChhc3luY1Jlc3VsdCA/PyBQcm9taXNlLnJlc29sdmUoKSkudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBfO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dExlbiA9IHBheWxvYWQuaXNzdWVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0TGVuID09PSBjdXJyTGVuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNBYm9ydGVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQWJvcnRlZCA9IHV0aWwuYWJvcnRlZChwYXlsb2FkLCBjdXJyTGVuKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXh0TGVuID0gcGF5bG9hZC5pc3N1ZXMubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dExlbiA9PT0gY3VyckxlbilcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQWJvcnRlZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQWJvcnRlZCA9IHV0aWwuYWJvcnRlZChwYXlsb2FkLCBjdXJyTGVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYXN5bmNSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXN5bmNSZXN1bHQudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGhhbmRsZUNhbmFyeVJlc3VsdCA9IChjYW5hcnksIHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICAgICAgLy8gYWJvcnQgaWYgdGhlIGNhbmFyeSBpcyBhYm9ydGVkXG4gICAgICAgICAgICBpZiAodXRpbC5hYm9ydGVkKGNhbmFyeSkpIHtcbiAgICAgICAgICAgICAgICBjYW5hcnkuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNhbmFyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHJ1biBjaGVja3MgZmlyc3QsIHRoZW5cbiAgICAgICAgICAgIGNvbnN0IGNoZWNrUmVzdWx0ID0gcnVuQ2hlY2tzKHBheWxvYWQsIGNoZWNrcywgY3R4KTtcbiAgICAgICAgICAgIGlmIChjaGVja1Jlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3R4LmFzeW5jID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuJFpvZEFzeW5jRXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hlY2tSZXN1bHQudGhlbigoY2hlY2tSZXN1bHQpID0+IGluc3QuX3pvZC5wYXJzZShjaGVja1Jlc3VsdCwgY3R4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaW5zdC5fem9kLnBhcnNlKGNoZWNrUmVzdWx0LCBjdHgpO1xuICAgICAgICB9O1xuICAgICAgICBpbnN0Ll96b2QucnVuID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICAgICAgaWYgKGN0eC5za2lwQ2hlY2tzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGluc3QuX3pvZC5wYXJzZShwYXlsb2FkLCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGN0eC5kaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIikge1xuICAgICAgICAgICAgICAgIC8vIHJ1biBjYW5hcnlcbiAgICAgICAgICAgICAgICAvLyBpbml0aWFsIHBhc3MgKG5vIGNoZWNrcylcbiAgICAgICAgICAgICAgICBjb25zdCBjYW5hcnkgPSBpbnN0Ll96b2QucGFyc2UoeyB2YWx1ZTogcGF5bG9hZC52YWx1ZSwgaXNzdWVzOiBbXSB9LCB7IC4uLmN0eCwgc2tpcENoZWNrczogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBpZiAoY2FuYXJ5IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FuYXJ5LnRoZW4oKGNhbmFyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUNhbmFyeVJlc3VsdChjYW5hcnksIHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxlQ2FuYXJ5UmVzdWx0KGNhbmFyeSwgcGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZvcndhcmRcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGluc3QuX3pvZC5wYXJzZShwYXlsb2FkLCBjdHgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBpZiAoY3R4LmFzeW5jID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuJFpvZEFzeW5jRXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4gcnVuQ2hlY2tzKHJlc3VsdCwgY2hlY2tzLCBjdHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBydW5DaGVja3MocmVzdWx0LCBjaGVja3MsIGN0eCk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIC8vIExhenkgaW5pdGlhbGl6ZSB+c3RhbmRhcmQgdG8gYXZvaWQgY3JlYXRpbmcgb2JqZWN0cyBmb3IgZXZlcnkgc2NoZW1hXG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QsIFwifnN0YW5kYXJkXCIsICgpID0+ICh7XG4gICAgICAgIHZhbGlkYXRlOiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgciA9IHNhZmVQYXJzZShpbnN0LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHIuc3VjY2VzcyA/IHsgdmFsdWU6IHIuZGF0YSB9IDogeyBpc3N1ZXM6IHIuZXJyb3I/Lmlzc3VlcyB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2FmZVBhcnNlQXN5bmMoaW5zdCwgdmFsdWUpLnRoZW4oKHIpID0+IChyLnN1Y2Nlc3MgPyB7IHZhbHVlOiByLmRhdGEgfSA6IHsgaXNzdWVzOiByLmVycm9yPy5pc3N1ZXMgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB2ZW5kb3I6IFwiem9kXCIsXG4gICAgICAgIHZlcnNpb246IDEsXG4gICAgfSkpO1xufSk7XG5leHBvcnQgeyBjbG9uZSB9IGZyb20gXCIuL3V0aWwuanNcIjtcbmV4cG9ydCBjb25zdCAkWm9kU3RyaW5nID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RTdHJpbmdcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGF0dGVybiA9IFsuLi4oaW5zdD8uX3pvZC5iYWc/LnBhdHRlcm5zID8/IFtdKV0ucG9wKCkgPz8gcmVnZXhlcy5zdHJpbmcoaW5zdC5fem9kLmJhZyk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF8pID0+IHtcbiAgICAgICAgaWYgKGRlZi5jb2VyY2UpXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBTdHJpbmcocGF5bG9hZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoXykgeyB9XG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZC52YWx1ZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kU3RyaW5nRm9ybWF0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RTdHJpbmdGb3JtYXRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIGNoZWNrIGluaXRpYWxpemF0aW9uIG11c3QgY29tZSBmaXJzdFxuICAgIGNoZWNrcy4kWm9kQ2hlY2tTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgICRab2RTdHJpbmcuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEdVSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEdVSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuZ3VpZCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kVVVJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVVVJRFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgaWYgKGRlZi52ZXJzaW9uKSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb25NYXAgPSB7XG4gICAgICAgICAgICB2MTogMSxcbiAgICAgICAgICAgIHYyOiAyLFxuICAgICAgICAgICAgdjM6IDMsXG4gICAgICAgICAgICB2NDogNCxcbiAgICAgICAgICAgIHY1OiA1LFxuICAgICAgICAgICAgdjY6IDYsXG4gICAgICAgICAgICB2NzogNyxcbiAgICAgICAgICAgIHY4OiA4LFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCB2ID0gdmVyc2lvbk1hcFtkZWYudmVyc2lvbl07XG4gICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgVVVJRCB2ZXJzaW9uOiBcIiR7ZGVmLnZlcnNpb259XCJgKTtcbiAgICAgICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy51dWlkKHYpKTtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLnV1aWQoKSk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kRW1haWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEVtYWlsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmVtYWlsKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RVUkwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFVSTFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFRyaW0gd2hpdGVzcGFjZSBmcm9tIGlucHV0XG4gICAgICAgICAgICBjb25zdCB0cmltbWVkID0gcGF5bG9hZC52YWx1ZS50cmltKCk7XG4gICAgICAgICAgICAvLyBXaGVuIG5vcm1hbGl6ZSBpcyBvZmYsIHJlcXVpcmUgOi8vIGZvciBodHRwL2h0dHBzIFVSTHNcbiAgICAgICAgICAgIC8vIFRoaXMgcHJldmVudHMgc3RyaW5ncyBsaWtlIFwiaHR0cDpleGFtcGxlLmNvbVwiIG9yIFwiaHR0cHM6L3BhdGhcIiBmcm9tIGJlaW5nIHNpbGVudGx5IGFjY2VwdGVkXG4gICAgICAgICAgICBpZiAoIWRlZi5ub3JtYWxpemUgJiYgZGVmLnByb3RvY29sPy5zb3VyY2UgPT09IHJlZ2V4ZXMuaHR0cFByb3RvY29sLnNvdXJjZSkge1xuICAgICAgICAgICAgICAgIGlmICghL15odHRwcz86XFwvXFwvL2kudGVzdCh0cmltbWVkKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogXCJ1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSW52YWxpZCBVUkwgZm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHRyaW1tZWQpO1xuICAgICAgICAgICAgaWYgKGRlZi5ob3N0bmFtZSkge1xuICAgICAgICAgICAgICAgIGRlZi5ob3N0bmFtZS5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgICAgIGlmICghZGVmLmhvc3RuYW1lLnRlc3QodXJsLmhvc3RuYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogXCJ1cmxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSW52YWxpZCBob3N0bmFtZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0dGVybjogZGVmLmhvc3RuYW1lLnNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVmLnByb3RvY29sKSB7XG4gICAgICAgICAgICAgICAgZGVmLnByb3RvY29sLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgaWYgKCFkZWYucHJvdG9jb2wudGVzdCh1cmwucHJvdG9jb2wuZW5kc1dpdGgoXCI6XCIpID8gdXJsLnByb3RvY29sLnNsaWNlKDAsIC0xKSA6IHVybC5wcm90b2NvbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IFwidXJsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkludmFsaWQgcHJvdG9jb2xcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm46IGRlZi5wcm90b2NvbC5zb3VyY2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2V0IHRoZSBvdXRwdXQgdmFsdWUgYmFzZWQgb24gbm9ybWFsaXplIGZsYWdcbiAgICAgICAgICAgIGlmIChkZWYubm9ybWFsaXplKSB7XG4gICAgICAgICAgICAgICAgLy8gVXNlIG5vcm1hbGl6ZWQgVVJMXG4gICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHVybC5ocmVmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gUHJlc2VydmUgdGhlIG9yaWdpbmFsIGlucHV0ICh0cmltbWVkKVxuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSB0cmltbWVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcInVybFwiLFxuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgY29udGludWU6ICFkZWYuYWJvcnQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kRW1vamkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEVtb2ppXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmVtb2ppKCkpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE5hbm9JRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTmFub0lEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLm5hbm9pZCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbi8qKlxuICogQGRlcHJlY2F0ZWQgQ1VJRCB2MSBpcyBkZXByZWNhdGVkIGJ5IGl0cyBhdXRob3JzIGR1ZSB0byBpbmZvcm1hdGlvbiBsZWFrYWdlXG4gKiAodGltZXN0YW1wcyBlbWJlZGRlZCBpbiB0aGUgaWQpLiBVc2Uge0BsaW5rICRab2RDVUlEMn0gaW5zdGVhZC5cbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcGFyYWxsZWxkcml2ZS9jdWlkLlxuICovXG5leHBvcnQgY29uc3QgJFpvZENVSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENVSURcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuY3VpZCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQ1VJRDIgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENVSUQyXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmN1aWQyKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RVTElEID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RVTElEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLnVsaWQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFhJRCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kWElEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLnhpZCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kS1NVSUQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEtTVUlEXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmtzdWlkKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RJU09EYXRlVGltZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kSVNPRGF0ZVRpbWVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuZGF0ZXRpbWUoZGVmKSk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kSVNPRGF0ZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kSVNPRGF0ZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5kYXRlKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RJU09UaW1lID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RJU09UaW1lXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLnRpbWUoZGVmKSk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kSVNPRHVyYXRpb24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZElTT0R1cmF0aW9uXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmR1cmF0aW9uKTtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RJUHY0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RJUHY0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmlwdjQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5iYWcuZm9ybWF0ID0gYGlwdjRgO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZElQdjYgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZElQdjZcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuaXB2Nik7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmJhZy5mb3JtYXQgPSBgaXB2NmA7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgIG5ldyBVUkwoYGh0dHA6Ly9bJHtwYXlsb2FkLnZhbHVlfV1gKTtcbiAgICAgICAgICAgIC8vIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBcImlwdjZcIixcbiAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE1BQyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTUFDXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLm1hYyhkZWYuZGVsaW1pdGVyKSk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmJhZy5mb3JtYXQgPSBgbWFjYDtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDSURSdjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZENJRFJ2NFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5jaWRydjQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZENJRFJ2NiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ0lEUnY2XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmNpZHJ2Nik7IC8vIG5vdCB1c2VkIGZvciB2YWxpZGF0aW9uXG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmNoZWNrID0gKHBheWxvYWQpID0+IHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBwYXlsb2FkLnZhbHVlLnNwbGl0KFwiL1wiKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggIT09IDIpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICBjb25zdCBbYWRkcmVzcywgcHJlZml4XSA9IHBhcnRzO1xuICAgICAgICAgICAgaWYgKCFwcmVmaXgpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXhOdW0gPSBOdW1iZXIocHJlZml4KTtcbiAgICAgICAgICAgIGlmIChgJHtwcmVmaXhOdW19YCAhPT0gcHJlZml4KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgaWYgKHByZWZpeE51bSA8IDAgfHwgcHJlZml4TnVtID4gMTI4KVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgbmV3IFVSTChgaHR0cDovL1ske2FkZHJlc3N9XWApO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IFwiY2lkcnY2XCIsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbn0pO1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICAgWm9kQmFzZTY0ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEJhc2U2NChkYXRhKSB7XG4gICAgaWYgKGRhdGEgPT09IFwiXCIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIC8vIGF0b2IgaWdub3JlcyB3aGl0ZXNwYWNlLCBzbyByZWplY3QgaXQgdXAgZnJvbnQuXG4gICAgaWYgKC9cXHMvLnRlc3QoZGF0YSkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoZGF0YS5sZW5ndGggJSA0ICE9PSAwKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBhdG9iKGRhdGEpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZXhwb3J0IGNvbnN0ICRab2RCYXNlNjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEJhc2U2NFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgZGVmLnBhdHRlcm4gPz8gKGRlZi5wYXR0ZXJuID0gcmVnZXhlcy5iYXNlNjQpO1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5iYWcuY29udGVudEVuY29kaW5nID0gXCJiYXNlNjRcIjtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAoaXNWYWxpZEJhc2U2NChwYXlsb2FkLnZhbHVlKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICBmb3JtYXQ6IFwiYmFzZTY0XCIsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBjb250aW51ZTogIWRlZi5hYm9ydCxcbiAgICAgICAgfSk7XG4gICAgfTtcbn0pO1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vICAgWm9kQmFzZTY0ICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5leHBvcnQgZnVuY3Rpb24gaXNWYWxpZEJhc2U2NFVSTChkYXRhKSB7XG4gICAgaWYgKCFyZWdleGVzLmJhc2U2NHVybC50ZXN0KGRhdGEpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgYmFzZTY0ID0gZGF0YS5yZXBsYWNlKC9bLV9dL2csIChjKSA9PiAoYyA9PT0gXCItXCIgPyBcIitcIiA6IFwiL1wiKSk7XG4gICAgY29uc3QgcGFkZGVkID0gYmFzZTY0LnBhZEVuZChNYXRoLmNlaWwoYmFzZTY0Lmxlbmd0aCAvIDQpICogNCwgXCI9XCIpO1xuICAgIHJldHVybiBpc1ZhbGlkQmFzZTY0KHBhZGRlZCk7XG59XG5leHBvcnQgY29uc3QgJFpvZEJhc2U2NFVSTCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQmFzZTY0VVJMXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBkZWYucGF0dGVybiA/PyAoZGVmLnBhdHRlcm4gPSByZWdleGVzLmJhc2U2NHVybCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLmJhZy5jb250ZW50RW5jb2RpbmcgPSBcImJhc2U2NHVybFwiO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChpc1ZhbGlkQmFzZTY0VVJMKHBheWxvYWQudmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgIGZvcm1hdDogXCJiYXNlNjR1cmxcIixcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEUxNjQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEUxNjRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5wYXR0ZXJuID8/IChkZWYucGF0dGVybiA9IHJlZ2V4ZXMuZTE2NCk7XG4gICAgJFpvZFN0cmluZ0Zvcm1hdC5pbml0KGluc3QsIGRlZik7XG59KTtcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLyAgIFpvZEpXVCAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmFsaWRKV1QodG9rZW4sIGFsZ29yaXRobSA9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCB0b2tlbnNQYXJ0cyA9IHRva2VuLnNwbGl0KFwiLlwiKTtcbiAgICAgICAgaWYgKHRva2Vuc1BhcnRzLmxlbmd0aCAhPT0gMylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3QgW2hlYWRlcl0gPSB0b2tlbnNQYXJ0cztcbiAgICAgICAgaWYgKCFoZWFkZXIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgcGFyc2VkSGVhZGVyID0gSlNPTi5wYXJzZShhdG9iKGhlYWRlcikpO1xuICAgICAgICBpZiAoXCJ0eXBcIiBpbiBwYXJzZWRIZWFkZXIgJiYgcGFyc2VkSGVhZGVyPy50eXAgIT09IFwiSldUXCIpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICghcGFyc2VkSGVhZGVyLmFsZylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGFsZ29yaXRobSAmJiAoIShcImFsZ1wiIGluIHBhcnNlZEhlYWRlcikgfHwgcGFyc2VkSGVhZGVyLmFsZyAhPT0gYWxnb3JpdGhtKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbmV4cG9ydCBjb25zdCAkWm9kSldUID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RKV1RcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RTdHJpbmdGb3JtYXQuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5jaGVjayA9IChwYXlsb2FkKSA9PiB7XG4gICAgICAgIGlmIChpc1ZhbGlkSldUKHBheWxvYWQudmFsdWUsIGRlZi5hbGcpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgIGZvcm1hdDogXCJqd3RcIixcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEN1c3RvbVN0cmluZ0Zvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ3VzdG9tU3RyaW5nRm9ybWF0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kU3RyaW5nRm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBpZiAoZGVmLmZuKHBheWxvYWQudmFsdWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9mb3JtYXRcIixcbiAgICAgICAgICAgIGZvcm1hdDogZGVmLmZvcm1hdCxcbiAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIGNvbnRpbnVlOiAhZGVmLmFib3J0LFxuICAgICAgICB9KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE51bWJlciA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTnVtYmVyXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSBpbnN0Ll96b2QuYmFnLnBhdHRlcm4gPz8gcmVnZXhlcy5udW1iZXI7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKGRlZi5jb2VyY2UpXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBOdW1iZXIocGF5bG9hZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoXykgeyB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJudW1iZXJcIiAmJiAhTnVtYmVyLmlzTmFOKGlucHV0KSAmJiBOdW1iZXIuaXNGaW5pdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZWNlaXZlZCA9IHR5cGVvZiBpbnB1dCA9PT0gXCJudW1iZXJcIlxuICAgICAgICAgICAgPyBOdW1iZXIuaXNOYU4oaW5wdXQpXG4gICAgICAgICAgICAgICAgPyBcIk5hTlwiXG4gICAgICAgICAgICAgICAgOiAhTnVtYmVyLmlzRmluaXRlKGlucHV0KVxuICAgICAgICAgICAgICAgICAgICA/IFwiSW5maW5pdHlcIlxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgLi4uKHJlY2VpdmVkID8geyByZWNlaXZlZCB9IDoge30pLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2ROdW1iZXJGb3JtYXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE51bWJlckZvcm1hdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgY2hlY2tzLiRab2RDaGVja051bWJlckZvcm1hdC5pbml0KGluc3QsIGRlZik7XG4gICAgJFpvZE51bWJlci5pbml0KGluc3QsIGRlZik7IC8vIG5vIGZvcm1hdCBjaGVja3Ncbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RCb29sZWFuID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RCb29sZWFuXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSByZWdleGVzLmJvb2xlYW47XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKGRlZi5jb2VyY2UpXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBCb29sZWFuKHBheWxvYWQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF8pIHsgfVxuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwiYm9vbGVhblwiKVxuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kQmlnSW50ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RCaWdJbnRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGF0dGVybiA9IHJlZ2V4ZXMuYmlnaW50O1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIGlmIChkZWYuY29lcmNlKVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gQmlnSW50KHBheWxvYWQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF8pIHsgfVxuICAgICAgICBpZiAodHlwZW9mIHBheWxvYWQudmFsdWUgPT09IFwiYmlnaW50XCIpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJiaWdpbnRcIixcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEJpZ0ludEZvcm1hdCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQmlnSW50Rm9ybWF0XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjaGVja3MuJFpvZENoZWNrQmlnSW50Rm9ybWF0LmluaXQoaW5zdCwgZGVmKTtcbiAgICAkWm9kQmlnSW50LmluaXQoaW5zdCwgZGVmKTsgLy8gbm8gZm9ybWF0IGNoZWNrc1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFN5bWJvbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kU3ltYm9sXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN5bWJvbFwiKVxuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwic3ltYm9sXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RVbmRlZmluZWQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFVuZGVmaW5lZFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXR0ZXJuID0gcmVnZXhlcy51bmRlZmluZWQ7XG4gICAgaW5zdC5fem9kLnZhbHVlcyA9IG5ldyBTZXQoW3VuZGVmaW5lZF0pO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcInVuZGVmaW5lZFwiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTnVsbCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTnVsbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXR0ZXJuID0gcmVnZXhlcy5udWxsO1xuICAgIGluc3QuX3pvZC52YWx1ZXMgPSBuZXcgU2V0KFtudWxsXSk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJudWxsXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RBbnkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEFueVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkKSA9PiBwYXlsb2FkO1xufSk7XG5leHBvcnQgY29uc3QgJFpvZFVua25vd24gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFVua25vd25cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCkgPT4gcGF5bG9hZDtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2ROZXZlciA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTmV2ZXJcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcIm5ldmVyXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RWb2lkID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RWb2lkXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInVuZGVmaW5lZFwiKVxuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwidm9pZFwiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kRGF0ZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kRGF0ZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIGlmIChkZWYuY29lcmNlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBuZXcgRGF0ZShwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfZXJyKSB7IH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGNvbnN0IGlzRGF0ZSA9IGlucHV0IGluc3RhbmNlb2YgRGF0ZTtcbiAgICAgICAgY29uc3QgaXNWYWxpZERhdGUgPSBpc0RhdGUgJiYgIU51bWJlci5pc05hTihpbnB1dC5nZXRUaW1lKCkpO1xuICAgICAgICBpZiAoaXNWYWxpZERhdGUpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBleHBlY3RlZDogXCJkYXRlXCIsXG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAuLi4oaXNEYXRlID8geyByZWNlaXZlZDogXCJJbnZhbGlkIERhdGVcIiB9IDoge30pLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZUFycmF5UmVzdWx0KHJlc3VsdCwgZmluYWwsIGluZGV4KSB7XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGluZGV4LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgfVxuICAgIGZpbmFsLnZhbHVlW2luZGV4XSA9IHJlc3VsdC52YWx1ZTtcbn1cbmV4cG9ydCBjb25zdCAkWm9kQXJyYXkgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZEFycmF5XCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLnZhbHVlID0gQXJyYXkoaW5wdXQubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgcHJvbXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IGlucHV0W2ldO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLmVsZW1lbnQuX3pvZC5ydW4oe1xuICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICB9LCBjdHgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBwcm9tcy5wdXNoKHJlc3VsdC50aGVuKChyZXN1bHQpID0+IGhhbmRsZUFycmF5UmVzdWx0KHJlc3VsdCwgcGF5bG9hZCwgaSkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZUFycmF5UmVzdWx0KHJlc3VsdCwgcGF5bG9hZCwgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb21zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHByb21zKS50aGVuKCgpID0+IHBheWxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkOyAvL2hhbmRsZUFycmF5UmVzdWx0c0FzeW5jKHBhcnNlUmVzdWx0cywgZmluYWwpO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZVByb3BlcnR5UmVzdWx0KHJlc3VsdCwgZmluYWwsIGtleSwgaW5wdXQsIGlzT3B0aW9uYWxJbiwgaXNPcHRpb25hbE91dCkge1xuICAgIGNvbnN0IGlzUHJlc2VudCA9IGtleSBpbiBpbnB1dDtcbiAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gRm9yIG9wdGlvbmFsLWluL291dCBzY2hlbWFzLCBpZ25vcmUgZXJyb3JzIG9uIGFic2VudCBrZXlzLlxuICAgICAgICBpZiAoaXNPcHRpb25hbEluICYmIGlzT3B0aW9uYWxPdXQgJiYgIWlzUHJlc2VudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGtleSwgcmVzdWx0Lmlzc3VlcykpO1xuICAgIH1cbiAgICBpZiAoIWlzUHJlc2VudCAmJiAhaXNPcHRpb25hbEluKSB7XG4gICAgICAgIGlmICghcmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcIm5vbm9wdGlvbmFsXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBwYXRoOiBba2V5XSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChpc1ByZXNlbnQpIHtcbiAgICAgICAgICAgIGZpbmFsLnZhbHVlW2tleV0gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZpbmFsLnZhbHVlW2tleV0gPSByZXN1bHQudmFsdWU7XG4gICAgfVxufVxuZnVuY3Rpb24gbm9ybWFsaXplRGVmKGRlZikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkZWYuc2hhcGUpO1xuICAgIGZvciAoY29uc3QgayBvZiBrZXlzKSB7XG4gICAgICAgIGlmICghZGVmLnNoYXBlPy5ba10/Ll96b2Q/LnRyYWl0cz8uaGFzKFwiJFpvZFR5cGVcIikpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBlbGVtZW50IGF0IGtleSBcIiR7a31cIjogZXhwZWN0ZWQgYSBab2Qgc2NoZW1hYCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgb2tleXMgPSB1dGlsLm9wdGlvbmFsS2V5cyhkZWYuc2hhcGUpO1xuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmRlZixcbiAgICAgICAga2V5cyxcbiAgICAgICAga2V5U2V0OiBuZXcgU2V0KGtleXMpLFxuICAgICAgICBudW1LZXlzOiBrZXlzLmxlbmd0aCxcbiAgICAgICAgb3B0aW9uYWxLZXlzOiBuZXcgU2V0KG9rZXlzKSxcbiAgICB9O1xufVxuZnVuY3Rpb24gaGFuZGxlQ2F0Y2hhbGwocHJvbXMsIGlucHV0LCBwYXlsb2FkLCBjdHgsIGRlZiwgaW5zdCkge1xuICAgIGNvbnN0IHVucmVjb2duaXplZCA9IFtdO1xuICAgIGNvbnN0IGtleVNldCA9IGRlZi5rZXlTZXQ7XG4gICAgY29uc3QgX2NhdGNoYWxsID0gZGVmLmNhdGNoYWxsLl96b2Q7XG4gICAgY29uc3QgdCA9IF9jYXRjaGFsbC5kZWYudHlwZTtcbiAgICBjb25zdCBpc09wdGlvbmFsSW4gPSBfY2F0Y2hhbGwub3B0aW4gPT09IFwib3B0aW9uYWxcIjtcbiAgICBjb25zdCBpc09wdGlvbmFsT3V0ID0gX2NhdGNoYWxsLm9wdG91dCA9PT0gXCJvcHRpb25hbFwiO1xuICAgIGZvciAoY29uc3Qga2V5IGluIGlucHV0KSB7XG4gICAgICAgIC8vIHNraXAgX19wcm90b19fIHNvIGl0IGNhbid0IHJlcGxhY2UgdGhlIHJlc3VsdCBwcm90b3R5cGUgdmlhIHRoZVxuICAgICAgICAvLyBhc3NpZ25tZW50IHNldHRlciBvbiB0aGUgcGxhaW4ge30gd2UgYnVpbGQgaW50b1xuICAgICAgICBpZiAoa2V5ID09PSBcIl9fcHJvdG9fX1wiKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmIChrZXlTZXQuaGFzKGtleSkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKHQgPT09IFwibmV2ZXJcIikge1xuICAgICAgICAgICAgdW5yZWNvZ25pemVkLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHIgPSBfY2F0Y2hhbGwucnVuKHsgdmFsdWU6IGlucHV0W2tleV0sIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICBwcm9tcy5wdXNoKHIudGhlbigocikgPT4gaGFuZGxlUHJvcGVydHlSZXN1bHQociwgcGF5bG9hZCwga2V5LCBpbnB1dCwgaXNPcHRpb25hbEluLCBpc09wdGlvbmFsT3V0KSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaGFuZGxlUHJvcGVydHlSZXN1bHQociwgcGF5bG9hZCwga2V5LCBpbnB1dCwgaXNPcHRpb25hbEluLCBpc09wdGlvbmFsT3V0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodW5yZWNvZ25pemVkLmxlbmd0aCkge1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwidW5yZWNvZ25pemVkX2tleXNcIixcbiAgICAgICAgICAgIGtleXM6IHVucmVjb2duaXplZCxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghcHJvbXMubGVuZ3RoKVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbXMpLnRoZW4oKCkgPT4ge1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCAkWm9kT2JqZWN0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RPYmplY3RcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIC8vIHJlcXVpcmVzIGNhc3QgYmVjYXVzZSB0ZWNobmljYWxseSAkWm9kT2JqZWN0IGRvZXNuJ3QgZXh0ZW5kXG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIC8vIGNvbnN0IHNoID0gZGVmLnNoYXBlO1xuICAgIGNvbnN0IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGRlZiwgXCJzaGFwZVwiKTtcbiAgICBpZiAoIWRlc2M/LmdldCkge1xuICAgICAgICBjb25zdCBzaCA9IGRlZi5zaGFwZTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGRlZiwgXCJzaGFwZVwiLCB7XG4gICAgICAgICAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTaCA9IHsgLi4uc2ggfTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVmLCBcInNoYXBlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG5ld1NoLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdTaDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCBfbm9ybWFsaXplZCA9IHV0aWwuY2FjaGVkKCgpID0+IG5vcm1hbGl6ZURlZihkZWYpKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInByb3BWYWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBzaGFwZSA9IGRlZi5zaGFwZTtcbiAgICAgICAgY29uc3QgcHJvcFZhbHVlcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzaGFwZSkge1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSBzaGFwZVtrZXldLl96b2Q7XG4gICAgICAgICAgICBpZiAoZmllbGQudmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgcHJvcFZhbHVlc1trZXldID8/IChwcm9wVmFsdWVzW2tleV0gPSBuZXcgU2V0KCkpO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiBmaWVsZC52YWx1ZXMpXG4gICAgICAgICAgICAgICAgICAgIHByb3BWYWx1ZXNba2V5XS5hZGQodik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByb3BWYWx1ZXM7XG4gICAgfSk7XG4gICAgY29uc3QgaXNPYmplY3QgPSB1dGlsLmlzT2JqZWN0O1xuICAgIGNvbnN0IGNhdGNoYWxsID0gZGVmLmNhdGNoYWxsO1xuICAgIGxldCB2YWx1ZTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIHZhbHVlID8/ICh2YWx1ZSA9IF9ub3JtYWxpemVkLnZhbHVlKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGlucHV0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBwYXlsb2FkLnZhbHVlID0ge307XG4gICAgICAgIGNvbnN0IHByb21zID0gW107XG4gICAgICAgIGNvbnN0IHNoYXBlID0gdmFsdWUuc2hhcGU7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHZhbHVlLmtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsID0gc2hhcGVba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IGlzT3B0aW9uYWxJbiA9IGVsLl96b2Qub3B0aW4gPT09IFwib3B0aW9uYWxcIjtcbiAgICAgICAgICAgIGNvbnN0IGlzT3B0aW9uYWxPdXQgPSBlbC5fem9kLm9wdG91dCA9PT0gXCJvcHRpb25hbFwiO1xuICAgICAgICAgICAgY29uc3QgciA9IGVsLl96b2QucnVuKHsgdmFsdWU6IGlucHV0W2tleV0sIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHByb21zLnB1c2goci50aGVuKChyKSA9PiBoYW5kbGVQcm9wZXJ0eVJlc3VsdChyLCBwYXlsb2FkLCBrZXksIGlucHV0LCBpc09wdGlvbmFsSW4sIGlzT3B0aW9uYWxPdXQpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVQcm9wZXJ0eVJlc3VsdChyLCBwYXlsb2FkLCBrZXksIGlucHV0LCBpc09wdGlvbmFsSW4sIGlzT3B0aW9uYWxPdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghY2F0Y2hhbGwpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9tcy5sZW5ndGggPyBQcm9taXNlLmFsbChwcm9tcykudGhlbigoKSA9PiBwYXlsb2FkKSA6IHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhbmRsZUNhdGNoYWxsKHByb21zLCBpbnB1dCwgcGF5bG9hZCwgY3R4LCBfbm9ybWFsaXplZC52YWx1ZSwgaW5zdCk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RPYmplY3RKSVQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE9iamVjdEpJVFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgLy8gcmVxdWlyZXMgY2FzdCBiZWNhdXNlIHRlY2huaWNhbGx5ICRab2RPYmplY3QgZG9lc24ndCBleHRlbmRcbiAgICAkWm9kT2JqZWN0LmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBzdXBlclBhcnNlID0gaW5zdC5fem9kLnBhcnNlO1xuICAgIGNvbnN0IF9ub3JtYWxpemVkID0gdXRpbC5jYWNoZWQoKCkgPT4gbm9ybWFsaXplRGVmKGRlZikpO1xuICAgIGNvbnN0IGdlbmVyYXRlRmFzdHBhc3MgPSAoc2hhcGUpID0+IHtcbiAgICAgICAgY29uc3QgZG9jID0gbmV3IERvYyhbXCJzaGFwZVwiLCBcInBheWxvYWRcIiwgXCJjdHhcIl0pO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkID0gX25vcm1hbGl6ZWQudmFsdWU7XG4gICAgICAgIGNvbnN0IHBhcnNlU3RyID0gKGtleSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgayA9IHV0aWwuZXNjKGtleSk7XG4gICAgICAgICAgICByZXR1cm4gYHNoYXBlWyR7a31dLl96b2QucnVuKHsgdmFsdWU6IGlucHV0WyR7a31dLCBpc3N1ZXM6IFtdIH0sIGN0eClgO1xuICAgICAgICB9O1xuICAgICAgICBkb2Mud3JpdGUoYGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtgKTtcbiAgICAgICAgY29uc3QgaWRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBub3JtYWxpemVkLmtleXMpIHtcbiAgICAgICAgICAgIGlkc1trZXldID0gYGtleV8ke2NvdW50ZXIrK31gO1xuICAgICAgICB9XG4gICAgICAgIC8vIEE6IHByZXNlcnZlIGtleSBvcmRlciB7XG4gICAgICAgIGRvYy53cml0ZShgY29uc3QgbmV3UmVzdWx0ID0ge307YCk7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIG5vcm1hbGl6ZWQua2V5cykge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBpZHNba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IGsgPSB1dGlsLmVzYyhrZXkpO1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gc2hhcGVba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IGlzT3B0aW9uYWxJbiA9IHNjaGVtYT8uX3pvZD8ub3B0aW4gPT09IFwib3B0aW9uYWxcIjtcbiAgICAgICAgICAgIGNvbnN0IGlzT3B0aW9uYWxPdXQgPSBzY2hlbWE/Ll96b2Q/Lm9wdG91dCA9PT0gXCJvcHRpb25hbFwiO1xuICAgICAgICAgICAgZG9jLndyaXRlKGBjb25zdCAke2lkfSA9ICR7cGFyc2VTdHIoa2V5KX07YCk7XG4gICAgICAgICAgICBpZiAoaXNPcHRpb25hbEluICYmIGlzT3B0aW9uYWxPdXQpIHtcbiAgICAgICAgICAgICAgICAvLyBGb3Igb3B0aW9uYWwtaW4vb3V0IHNjaGVtYXMsIGlnbm9yZSBlcnJvcnMgb24gYWJzZW50IGtleXNcbiAgICAgICAgICAgICAgICBkb2Mud3JpdGUoYFxuICAgICAgICBpZiAoJHtpZH0uaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgIGlmICgke2t9IGluIGlucHV0KSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3VlcyA9IHBheWxvYWQuaXNzdWVzLmNvbmNhdCgke2lkfS5pc3N1ZXMubWFwKGlzcyA9PiAoe1xuICAgICAgICAgICAgICAuLi5pc3MsXG4gICAgICAgICAgICAgIHBhdGg6IGlzcy5wYXRoID8gWyR7a30sIC4uLmlzcy5wYXRoXSA6IFske2t9XVxuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICAgIGlmICgke2lkfS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCR7a30gaW4gaW5wdXQpIHtcbiAgICAgICAgICAgIG5ld1Jlc3VsdFske2t9XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3UmVzdWx0WyR7a31dID0gJHtpZH0udmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgICBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCFpc09wdGlvbmFsSW4pIHtcbiAgICAgICAgICAgICAgICBkb2Mud3JpdGUoYFxuICAgICAgICBjb25zdCAke2lkfV9wcmVzZW50ID0gJHtrfSBpbiBpbnB1dDtcbiAgICAgICAgaWYgKCR7aWR9Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICBwYXlsb2FkLmlzc3VlcyA9IHBheWxvYWQuaXNzdWVzLmNvbmNhdCgke2lkfS5pc3N1ZXMubWFwKGlzcyA9PiAoe1xuICAgICAgICAgICAgLi4uaXNzLFxuICAgICAgICAgICAgcGF0aDogaXNzLnBhdGggPyBbJHtrfSwgLi4uaXNzLnBhdGhdIDogWyR7a31dXG4gICAgICAgICAgfSkpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISR7aWR9X3ByZXNlbnQgJiYgISR7aWR9Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICBleHBlY3RlZDogXCJub25vcHRpb25hbFwiLFxuICAgICAgICAgICAgaW5wdXQ6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHBhdGg6IFske2t9XVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCR7aWR9X3ByZXNlbnQpIHtcbiAgICAgICAgICBpZiAoJHtpZH0udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbmV3UmVzdWx0WyR7a31dID0gdW5kZWZpbmVkO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdSZXN1bHRbJHtrfV0gPSAke2lkfS52YWx1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBkb2Mud3JpdGUoYFxuICAgICAgICBpZiAoJHtpZH0uaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgIHBheWxvYWQuaXNzdWVzID0gcGF5bG9hZC5pc3N1ZXMuY29uY2F0KCR7aWR9Lmlzc3Vlcy5tYXAoaXNzID0+ICh7XG4gICAgICAgICAgICAuLi5pc3MsXG4gICAgICAgICAgICBwYXRoOiBpc3MucGF0aCA/IFske2t9LCAuLi5pc3MucGF0aF0gOiBbJHtrfV1cbiAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICBpZiAoJHtpZH0udmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgke2t9IGluIGlucHV0KSB7XG4gICAgICAgICAgICBuZXdSZXN1bHRbJHtrfV0gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1Jlc3VsdFske2t9XSA9ICR7aWR9LnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZG9jLndyaXRlKGBwYXlsb2FkLnZhbHVlID0gbmV3UmVzdWx0O2ApO1xuICAgICAgICBkb2Mud3JpdGUoYHJldHVybiBwYXlsb2FkO2ApO1xuICAgICAgICBjb25zdCBmbiA9IGRvYy5jb21waWxlKCk7XG4gICAgICAgIHJldHVybiAocGF5bG9hZCwgY3R4KSA9PiBmbihzaGFwZSwgcGF5bG9hZCwgY3R4KTtcbiAgICB9O1xuICAgIGxldCBmYXN0cGFzcztcbiAgICBjb25zdCBpc09iamVjdCA9IHV0aWwuaXNPYmplY3Q7XG4gICAgY29uc3Qgaml0ID0gIWNvcmUuZ2xvYmFsQ29uZmlnLmppdGxlc3M7XG4gICAgY29uc3QgYWxsb3dzRXZhbCA9IHV0aWwuYWxsb3dzRXZhbDtcbiAgICBjb25zdCBmYXN0RW5hYmxlZCA9IGppdCAmJiBhbGxvd3NFdmFsLnZhbHVlOyAvLyAmJiAhZGVmLmNhdGNoYWxsO1xuICAgIGNvbnN0IGNhdGNoYWxsID0gZGVmLmNhdGNoYWxsO1xuICAgIGxldCB2YWx1ZTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIHZhbHVlID8/ICh2YWx1ZSA9IF9ub3JtYWxpemVkLnZhbHVlKTtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGlucHV0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaml0ICYmIGZhc3RFbmFibGVkICYmIGN0eD8uYXN5bmMgPT09IGZhbHNlICYmIGN0eC5qaXRsZXNzICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAvLyBhbHdheXMgc3luY2hyb25vdXNcbiAgICAgICAgICAgIGlmICghZmFzdHBhc3MpXG4gICAgICAgICAgICAgICAgZmFzdHBhc3MgPSBnZW5lcmF0ZUZhc3RwYXNzKGRlZi5zaGFwZSk7XG4gICAgICAgICAgICBwYXlsb2FkID0gZmFzdHBhc3MocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgICAgIGlmICghY2F0Y2hhbGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQ2F0Y2hhbGwoW10sIGlucHV0LCBwYXlsb2FkLCBjdHgsIHZhbHVlLCBpbnN0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VwZXJQYXJzZShwYXlsb2FkLCBjdHgpO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZVVuaW9uUmVzdWx0cyhyZXN1bHRzLCBmaW5hbCwgaW5zdCwgY3R4KSB7XG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGZpbmFsLnZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgcmV0dXJuIGZpbmFsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5vbmFib3J0ZWQgPSByZXN1bHRzLmZpbHRlcigocikgPT4gIXV0aWwuYWJvcnRlZChyKSk7XG4gICAgaWYgKG5vbmFib3J0ZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGZpbmFsLnZhbHVlID0gbm9uYWJvcnRlZFswXS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIG5vbmFib3J0ZWRbMF07XG4gICAgfVxuICAgIGZpbmFsLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgY29kZTogXCJpbnZhbGlkX3VuaW9uXCIsXG4gICAgICAgIGlucHV0OiBmaW5hbC52YWx1ZSxcbiAgICAgICAgaW5zdCxcbiAgICAgICAgZXJyb3JzOiByZXN1bHRzLm1hcCgocmVzdWx0KSA9PiByZXN1bHQuaXNzdWVzLm1hcCgoaXNzKSA9PiB1dGlsLmZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvcmUuY29uZmlnKCkpKSksXG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbmFsO1xufVxuZXhwb3J0IGNvbnN0ICRab2RVbmlvbiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVW5pb25cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdGluXCIsICgpID0+IGRlZi5vcHRpb25zLnNvbWUoKG8pID0+IG8uX3pvZC5vcHRpbiA9PT0gXCJvcHRpb25hbFwiKSA/IFwib3B0aW9uYWxcIiA6IHVuZGVmaW5lZCk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRvdXRcIiwgKCkgPT4gZGVmLm9wdGlvbnMuc29tZSgobykgPT4gby5fem9kLm9wdG91dCA9PT0gXCJvcHRpb25hbFwiKSA/IFwib3B0aW9uYWxcIiA6IHVuZGVmaW5lZCk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgICBpZiAoZGVmLm9wdGlvbnMuZXZlcnkoKG8pID0+IG8uX3pvZC52YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNldChkZWYub3B0aW9ucy5mbGF0TWFwKChvcHRpb24pID0+IEFycmF5LmZyb20ob3B0aW9uLl96b2QudmFsdWVzKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwYXR0ZXJuXCIsICgpID0+IHtcbiAgICAgICAgaWYgKGRlZi5vcHRpb25zLmV2ZXJ5KChvKSA9PiBvLl96b2QucGF0dGVybikpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhdHRlcm5zID0gZGVmLm9wdGlvbnMubWFwKChvKSA9PiBvLl96b2QucGF0dGVybik7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChgXigke3BhdHRlcm5zLm1hcCgocCkgPT4gdXRpbC5jbGVhblJlZ2V4KHAuc291cmNlKSkuam9pbihcInxcIil9KSRgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGNvbnN0IGZpcnN0ID0gZGVmLm9wdGlvbnMubGVuZ3RoID09PSAxID8gZGVmLm9wdGlvbnNbMF0uX3pvZC5ydW4gOiBudWxsO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgICAgICByZXR1cm4gZmlyc3QocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgYXN5bmMgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBkZWYub3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gb3B0aW9uLl96b2QucnVuKHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgfSwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgYXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghYXN5bmMpXG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlVW5pb25SZXN1bHRzKHJlc3VsdHMsIHBheWxvYWQsIGluc3QsIGN0eCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXN1bHRzKS50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlVW5pb25SZXN1bHRzKHJlc3VsdHMsIHBheWxvYWQsIGluc3QsIGN0eCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZUV4Y2x1c2l2ZVVuaW9uUmVzdWx0cyhyZXN1bHRzLCBmaW5hbCwgaW5zdCwgY3R4KSB7XG4gICAgY29uc3Qgc3VjY2Vzc2VzID0gcmVzdWx0cy5maWx0ZXIoKHIpID0+IHIuaXNzdWVzLmxlbmd0aCA9PT0gMCk7XG4gICAgaWYgKHN1Y2Nlc3Nlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZmluYWwudmFsdWUgPSBzdWNjZXNzZXNbMF0udmFsdWU7XG4gICAgICAgIHJldHVybiBmaW5hbDtcbiAgICB9XG4gICAgaWYgKHN1Y2Nlc3Nlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gTm8gbWF0Y2hlcyAtIHNhbWUgYXMgcmVndWxhciB1bmlvblxuICAgICAgICBmaW5hbC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdW5pb25cIixcbiAgICAgICAgICAgIGlucHV0OiBmaW5hbC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICBlcnJvcnM6IHJlc3VsdHMubWFwKChyZXN1bHQpID0+IHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICAvLyBNdWx0aXBsZSBtYXRjaGVzIC0gZXhjbHVzaXZlIHVuaW9uIGZhaWx1cmVcbiAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3VuaW9uXCIsXG4gICAgICAgICAgICBpbnB1dDogZmluYWwudmFsdWUsXG4gICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgZXJyb3JzOiBbXSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZmluYWw7XG59XG5leHBvcnQgY29uc3QgJFpvZFhvciA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kWG9yXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVW5pb24uaW5pdChpbnN0LCBkZWYpO1xuICAgIGRlZi5pbmNsdXNpdmUgPSBmYWxzZTtcbiAgICBjb25zdCBmaXJzdCA9IGRlZi5vcHRpb25zLmxlbmd0aCA9PT0gMSA/IGRlZi5vcHRpb25zWzBdLl96b2QucnVuIDogbnVsbDtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGlmIChmaXJzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZpcnN0KHBheWxvYWQsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGFzeW5jID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgZGVmLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9wdGlvbi5fem9kLnJ1bih7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgIH0sIGN0eCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICAgICAgICAgIGFzeW5jID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghYXN5bmMpXG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlRXhjbHVzaXZlVW5pb25SZXN1bHRzKHJlc3VsdHMsIHBheWxvYWQsIGluc3QsIGN0eCk7XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChyZXN1bHRzKS50aGVuKChyZXN1bHRzKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlRXhjbHVzaXZlVW5pb25SZXN1bHRzKHJlc3VsdHMsIHBheWxvYWQsIGluc3QsIGN0eCk7XG4gICAgICAgIH0pO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kRGlzY3JpbWluYXRlZFVuaW9uID0gXG4vKkBfX1BVUkVfXyovXG5jb3JlLiRjb25zdHJ1Y3RvcihcIiRab2REaXNjcmltaW5hdGVkVW5pb25cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgIGRlZi5pbmNsdXNpdmUgPSBmYWxzZTtcbiAgICAkWm9kVW5pb24uaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvbnN0IF9zdXBlciA9IGluc3QuX3pvZC5wYXJzZTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInByb3BWYWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIGRlZi5vcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBwdiA9IG9wdGlvbi5fem9kLnByb3BWYWx1ZXM7XG4gICAgICAgICAgICBpZiAoIXB2IHx8IE9iamVjdC5rZXlzKHB2KS5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGRpc2NyaW1pbmF0ZWQgdW5pb24gb3B0aW9uIGF0IGluZGV4IFwiJHtkZWYub3B0aW9ucy5pbmRleE9mKG9wdGlvbil9XCJgKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHB2KSkge1xuICAgICAgICAgICAgICAgIGlmICghcHJvcFZhbHVlc1trXSlcbiAgICAgICAgICAgICAgICAgICAgcHJvcFZhbHVlc1trXSA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB2KSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BWYWx1ZXNba10uYWRkKHZhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcm9wVmFsdWVzO1xuICAgIH0pO1xuICAgIGNvbnN0IGRpc2MgPSB1dGlsLmNhY2hlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBkZWYub3B0aW9ucztcbiAgICAgICAgY29uc3QgbWFwID0gbmV3IE1hcCgpO1xuICAgICAgICBmb3IgKGNvbnN0IG8gb2Ygb3B0cykge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVzID0gby5fem9kLnByb3BWYWx1ZXM/LltkZWYuZGlzY3JpbWluYXRvcl07XG4gICAgICAgICAgICBpZiAoIXZhbHVlcyB8fCB2YWx1ZXMuc2l6ZSA9PT0gMClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZGlzY3JpbWluYXRlZCB1bmlvbiBvcHRpb24gYXQgaW5kZXggXCIke2RlZi5vcHRpb25zLmluZGV4T2Yobyl9XCJgKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAobWFwLmhhcyh2KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSBkaXNjcmltaW5hdG9yIHZhbHVlIFwiJHtTdHJpbmcodil9XCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbWFwLnNldCh2LCBvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFwO1xuICAgIH0pO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoIXV0aWwuaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wdCA9IGRpc2MudmFsdWUuZ2V0KGlucHV0Py5bZGVmLmRpc2NyaW1pbmF0b3JdKTtcbiAgICAgICAgaWYgKG9wdCkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdC5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZhbGwgYmFjayB0byB1bmlvbiBtYXRjaGluZyB3aGVuIHRoZSBmYXN0IGRpc2NyaW1pbmF0b3IgcGF0aCBmYWlsczpcbiAgICAgICAgLy8gLSBleHBsaWNpdGx5IGVuYWJsZWQgdmlhIHVuaW9uRmFsbGJhY2ssIG9yXG4gICAgICAgIC8vIC0gZHVyaW5nIGJhY2t3YXJkIGRpcmVjdGlvbiAoZW5jb2RlKSwgc2luY2UgY29kZWMtYmFzZWQgZGlzY3JpbWluYXRvcnNcbiAgICAgICAgLy8gICBoYXZlIGRpZmZlcmVudCB2YWx1ZXMgaW4gZm9yd2FyZCB2cyBiYWNrd2FyZCBkaXJlY3Rpb25zXG4gICAgICAgIGlmIChkZWYudW5pb25GYWxsYmFjayB8fCBjdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBubyBtYXRjaGluZyBkaXNjcmltaW5hdG9yXG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3VuaW9uXCIsXG4gICAgICAgICAgICBlcnJvcnM6IFtdLFxuICAgICAgICAgICAgbm90ZTogXCJObyBtYXRjaGluZyBkaXNjcmltaW5hdG9yXCIsXG4gICAgICAgICAgICBkaXNjcmltaW5hdG9yOiBkZWYuZGlzY3JpbWluYXRvcixcbiAgICAgICAgICAgIG9wdGlvbnM6IEFycmF5LmZyb20oZGlzYy52YWx1ZS5rZXlzKCkpLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBwYXRoOiBbZGVmLmRpc2NyaW1pbmF0b3JdLFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kSW50ZXJzZWN0aW9uID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RJbnRlcnNlY3Rpb25cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgY29uc3QgbGVmdCA9IGRlZi5sZWZ0Ll96b2QucnVuKHsgdmFsdWU6IGlucHV0LCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0ID0gZGVmLnJpZ2h0Ll96b2QucnVuKHsgdmFsdWU6IGlucHV0LCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgICAgIGNvbnN0IGFzeW5jID0gbGVmdCBpbnN0YW5jZW9mIFByb21pc2UgfHwgcmlnaHQgaW5zdGFuY2VvZiBQcm9taXNlO1xuICAgICAgICBpZiAoYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChbbGVmdCwgcmlnaHRdKS50aGVuKChbbGVmdCwgcmlnaHRdKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZUludGVyc2VjdGlvblJlc3VsdHMocGF5bG9hZCwgbGVmdCwgcmlnaHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhbmRsZUludGVyc2VjdGlvblJlc3VsdHMocGF5bG9hZCwgbGVmdCwgcmlnaHQpO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIG1lcmdlVmFsdWVzKGEsIGIpIHtcbiAgICAvLyBjb25zdCBhVHlwZSA9IHBhcnNlLnQoYSk7XG4gICAgLy8gY29uc3QgYlR5cGUgPSBwYXJzZS50KGIpO1xuICAgIGlmIChhID09PSBiKSB7XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBhIH07XG4gICAgfVxuICAgIGlmIChhIGluc3RhbmNlb2YgRGF0ZSAmJiBiIGluc3RhbmNlb2YgRGF0ZSAmJiArYSA9PT0gK2IpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IGEgfTtcbiAgICB9XG4gICAgaWYgKHV0aWwuaXNQbGFpbk9iamVjdChhKSAmJiB1dGlsLmlzUGxhaW5PYmplY3QoYikpIHtcbiAgICAgICAgY29uc3QgYktleXMgPSBPYmplY3Qua2V5cyhiKTtcbiAgICAgICAgY29uc3Qgc2hhcmVkS2V5cyA9IE9iamVjdC5rZXlzKGEpLmZpbHRlcigoa2V5KSA9PiBiS2V5cy5pbmRleE9mKGtleSkgIT09IC0xKTtcbiAgICAgICAgY29uc3QgbmV3T2JqID0geyAuLi5hLCAuLi5iIH07XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHNoYXJlZEtleXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHNoYXJlZFZhbHVlID0gbWVyZ2VWYWx1ZXMoYVtrZXldLCBiW2tleV0pO1xuICAgICAgICAgICAgaWYgKCFzaGFyZWRWYWx1ZS52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWVyZ2VFcnJvclBhdGg6IFtrZXksIC4uLnNoYXJlZFZhbHVlLm1lcmdlRXJyb3JQYXRoXSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBzaGFyZWRWYWx1ZS5kYXRhO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHZhbGlkOiB0cnVlLCBkYXRhOiBuZXdPYmogfTtcbiAgICB9XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYSkgJiYgQXJyYXkuaXNBcnJheShiKSkge1xuICAgICAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UsIG1lcmdlRXJyb3JQYXRoOiBbXSB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld0FycmF5ID0gW107XG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgY29uc3QgaXRlbUEgPSBhW2luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1CID0gYltpbmRleF07XG4gICAgICAgICAgICBjb25zdCBzaGFyZWRWYWx1ZSA9IG1lcmdlVmFsdWVzKGl0ZW1BLCBpdGVtQik7XG4gICAgICAgICAgICBpZiAoIXNoYXJlZFZhbHVlLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICBtZXJnZUVycm9yUGF0aDogW2luZGV4LCAuLi5zaGFyZWRWYWx1ZS5tZXJnZUVycm9yUGF0aF0sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5ld0FycmF5LnB1c2goc2hhcmVkVmFsdWUuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IG5ld0FycmF5IH07XG4gICAgfVxuICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSwgbWVyZ2VFcnJvclBhdGg6IFtdIH07XG59XG5mdW5jdGlvbiBoYW5kbGVJbnRlcnNlY3Rpb25SZXN1bHRzKHJlc3VsdCwgbGVmdCwgcmlnaHQpIHtcbiAgICAvLyBUcmFjayB3aGljaCBzaWRlKHMpIHJlcG9ydCBlYWNoIGtleSBhcyB1bnJlY29nbml6ZWRcbiAgICBjb25zdCB1bnJlY0tleXMgPSBuZXcgTWFwKCk7XG4gICAgbGV0IHVucmVjSXNzdWU7XG4gICAgZm9yIChjb25zdCBpc3Mgb2YgbGVmdC5pc3N1ZXMpIHtcbiAgICAgICAgaWYgKGlzcy5jb2RlID09PSBcInVucmVjb2duaXplZF9rZXlzXCIpIHtcbiAgICAgICAgICAgIHVucmVjSXNzdWUgPz8gKHVucmVjSXNzdWUgPSBpc3MpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIGlzcy5rZXlzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1bnJlY0tleXMuaGFzKGspKVxuICAgICAgICAgICAgICAgICAgICB1bnJlY0tleXMuc2V0KGssIHt9KTtcbiAgICAgICAgICAgICAgICB1bnJlY0tleXMuZ2V0KGspLmwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0Lmlzc3Vlcy5wdXNoKGlzcyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBpc3Mgb2YgcmlnaHQuaXNzdWVzKSB7XG4gICAgICAgIGlmIChpc3MuY29kZSA9PT0gXCJ1bnJlY29nbml6ZWRfa2V5c1wiKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGsgb2YgaXNzLmtleXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXVucmVjS2V5cy5oYXMoaykpXG4gICAgICAgICAgICAgICAgICAgIHVucmVjS2V5cy5zZXQoaywge30pO1xuICAgICAgICAgICAgICAgIHVucmVjS2V5cy5nZXQoaykuciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQuaXNzdWVzLnB1c2goaXNzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBSZXBvcnQgb25seSBrZXlzIHVucmVjb2duaXplZCBieSBCT1RIIHNpZGVzXG4gICAgY29uc3QgYm90aEtleXMgPSBbLi4udW5yZWNLZXlzXS5maWx0ZXIoKFssIGZdKSA9PiBmLmwgJiYgZi5yKS5tYXAoKFtrXSkgPT4gayk7XG4gICAgaWYgKGJvdGhLZXlzLmxlbmd0aCAmJiB1bnJlY0lzc3VlKSB7XG4gICAgICAgIHJlc3VsdC5pc3N1ZXMucHVzaCh7IC4uLnVucmVjSXNzdWUsIGtleXM6IGJvdGhLZXlzIH0pO1xuICAgIH1cbiAgICBpZiAodXRpbC5hYm9ydGVkKHJlc3VsdCkpXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgY29uc3QgbWVyZ2VkID0gbWVyZ2VWYWx1ZXMobGVmdC52YWx1ZSwgcmlnaHQudmFsdWUpO1xuICAgIGlmICghbWVyZ2VkLnZhbGlkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5tZXJnYWJsZSBpbnRlcnNlY3Rpb24uIEVycm9yIHBhdGg6IGAgKyBgJHtKU09OLnN0cmluZ2lmeShtZXJnZWQubWVyZ2VFcnJvclBhdGgpfWApO1xuICAgIH1cbiAgICByZXN1bHQudmFsdWUgPSBtZXJnZWQuZGF0YTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGNvbnN0ICRab2RUdXBsZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kVHVwbGVcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBjb25zdCBpdGVtcyA9IGRlZi5pdGVtcztcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogXCJ0dXBsZVwiLFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBbXTtcbiAgICAgICAgY29uc3QgcHJvbXMgPSBbXTtcbiAgICAgICAgY29uc3Qgb3B0aW5TdGFydCA9IGdldFR1cGxlT3B0U3RhcnQoaXRlbXMsIFwib3B0aW5cIik7XG4gICAgICAgIGNvbnN0IG9wdG91dFN0YXJ0ID0gZ2V0VHVwbGVPcHRTdGFydChpdGVtcywgXCJvcHRvdXRcIik7XG4gICAgICAgIGlmICghZGVmLnJlc3QpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPCBvcHRpblN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFwidG9vX3NtYWxsXCIsXG4gICAgICAgICAgICAgICAgICAgIG1pbmltdW06IG9wdGluU3RhcnQsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbjogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA+IGl0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBcInRvb19iaWdcIixcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogaXRlbXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgICAgICBvcmlnaW46IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBSdW4gZXZlcnkgaXRlbSBpbiBwYXJhbGxlbCwgY29sbGVjdGluZyByZXN1bHRzIGludG8gYW4gaW5kZXhlZFxuICAgICAgICAvLyBhcnJheS4gVGhlIHBvc3QtcHJvY2Vzc2luZyBpbiBgaGFuZGxlVHVwbGVSZXN1bHRzYCB3YWxrcyB0aGVtIGluXG4gICAgICAgIC8vIG9yZGVyIHNvIGl0IGNhbiBkZWNpZGUgd2hldGhlciBhbiBhYnNlbnQgb3B0aW9uYWwtb3V0cHV0IGVycm9yIGNhblxuICAgICAgICAvLyB0cnVuY2F0ZSB0aGUgdGFpbCBvciBtdXN0IGJlIHJlcG9ydGVkIHRvIHByZXNlcnZlIHJlcXVpcmVkIG91dHB1dC5cbiAgICAgICAgY29uc3QgaXRlbVJlc3VsdHMgPSBuZXcgQXJyYXkoaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgciA9IGl0ZW1zW2ldLl96b2QucnVuKHsgdmFsdWU6IGlucHV0W2ldLCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgICAgICAgICBpZiAociBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBwcm9tcy5wdXNoKHIudGhlbigocnIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbVJlc3VsdHNbaV0gPSBycjtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpdGVtUmVzdWx0c1tpXSA9IHI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZi5yZXN0KSB7XG4gICAgICAgICAgICBsZXQgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBjb25zdCByZXN0ID0gaW5wdXQuc2xpY2UoaXRlbXMubGVuZ3RoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWwgb2YgcmVzdCkge1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYucmVzdC5fem9kLnJ1bih7IHZhbHVlOiBlbCwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb21zLnB1c2gocmVzdWx0LnRoZW4oKHIpID0+IGhhbmRsZVR1cGxlUmVzdWx0KHIsIHBheWxvYWQsIGkpKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBoYW5kbGVUdXBsZVJlc3VsdChyZXN1bHQsIHBheWxvYWQsIGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbXMpLnRoZW4oKCkgPT4gaGFuZGxlVHVwbGVSZXN1bHRzKGl0ZW1SZXN1bHRzLCBwYXlsb2FkLCBpdGVtcywgaW5wdXQsIG9wdG91dFN0YXJ0KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhbmRsZVR1cGxlUmVzdWx0cyhpdGVtUmVzdWx0cywgcGF5bG9hZCwgaXRlbXMsIGlucHV0LCBvcHRvdXRTdGFydCk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gZ2V0VHVwbGVPcHRTdGFydChpdGVtcywga2V5KSB7XG4gICAgZm9yIChsZXQgaSA9IGl0ZW1zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmIChpdGVtc1tpXS5fem9kW2tleV0gIT09IFwib3B0aW9uYWxcIilcbiAgICAgICAgICAgIHJldHVybiBpICsgMTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG5mdW5jdGlvbiBoYW5kbGVUdXBsZVJlc3VsdChyZXN1bHQsIGZpbmFsLCBpbmRleCkge1xuICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICBmaW5hbC5pc3N1ZXMucHVzaCguLi51dGlsLnByZWZpeElzc3VlcyhpbmRleCwgcmVzdWx0Lmlzc3VlcykpO1xuICAgIH1cbiAgICBmaW5hbC52YWx1ZVtpbmRleF0gPSByZXN1bHQudmFsdWU7XG59XG5mdW5jdGlvbiBoYW5kbGVUdXBsZVJlc3VsdHMoaXRlbVJlc3VsdHMsIGZpbmFsLCBpdGVtcywgaW5wdXQsIG9wdG91dFN0YXJ0KSB7XG4gICAgLy8gV2FsayByZXN1bHRzIGluIG9yZGVyLiBNaXJyb3IgJFpvZE9iamVjdCdzIHN3YWxsb3ctb24tYWJzZW50LW9wdGlvbmFsXG4gICAgLy8gcnVsZSwgYnV0IG9ubHkgYWZ0ZXIgYG9wdG91dFN0YXJ0YDogdGhlIGZpcnN0IGluZGV4IHdoZXJlIHRoZSBvdXRwdXRcbiAgICAvLyB0dXBsZSB0YWlsIGNhbiBiZSBhYnNlbnQuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByID0gaXRlbVJlc3VsdHNbaV07XG4gICAgICAgIGNvbnN0IGlzUHJlc2VudCA9IGkgPCBpbnB1dC5sZW5ndGg7XG4gICAgICAgIGlmIChyLmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICghaXNQcmVzZW50ICYmIGkgPj0gb3B0b3V0U3RhcnQpIHtcbiAgICAgICAgICAgICAgICBmaW5hbC52YWx1ZS5sZW5ndGggPSBpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoaSwgci5pc3N1ZXMpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbC52YWx1ZVtpXSA9IHIudmFsdWU7XG4gICAgfVxuICAgIC8vIERyb3AgdHJhaWxpbmcgc2xvdHMgdGhhdCBwcm9kdWNlZCBgdW5kZWZpbmVkYCBmb3IgYWJzZW50IGlucHV0XG4gICAgLy8gKHRoZSBhcnJheSBhbmFsb2cgb2YgYW4gYWJzZW50IG9wdGlvbmFsIGtleSBvbiBhbiBvYmplY3QpLiBUaGVcbiAgICAvLyBgaSA+PSBpbnB1dC5sZW5ndGhgIGZsb29yIGlzIGNyaXRpY2FsOiBhbiBleHBsaWNpdCBgdW5kZWZpbmVkYFxuICAgIC8vICppbnNpZGUqIHRoZSBpbnB1dCBtdXN0IGJlIHByZXNlcnZlZCBldmVuIHdoZW4gdGhlIHNjaGVtYSBpc1xuICAgIC8vIG9wdGlvbmFsLW91dCAoZS5nLiBgei5zdHJpbmcoKS5vcih6LnVuZGVmaW5lZCgpKWAgYWNjZXB0aW5nIGFuXG4gICAgLy8gZXhwbGljaXQgdW5kZWZpbmVkIHZhbHVlKS5cbiAgICBmb3IgKGxldCBpID0gZmluYWwudmFsdWUubGVuZ3RoIC0gMTsgaSA+PSBpbnB1dC5sZW5ndGg7IGktLSkge1xuICAgICAgICBpZiAoaXRlbXNbaV0uX3pvZC5vcHRvdXQgPT09IFwib3B0aW9uYWxcIiAmJiBmaW5hbC52YWx1ZVtpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmaW5hbC52YWx1ZS5sZW5ndGggPSBpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbmFsO1xufVxuZXhwb3J0IGNvbnN0ICRab2RSZWNvcmQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFJlY29yZFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoIXV0aWwuaXNQbGFpbk9iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcInJlY29yZFwiLFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbXMgPSBbXTtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZGVmLmtleVR5cGUuX3pvZC52YWx1ZXM7XG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSB7fTtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZEtleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Yga2V5ID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiBrZXkgPT09IFwic3ltYm9sXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkS2V5cy5hZGQodHlwZW9mIGtleSA9PT0gXCJudW1iZXJcIiA/IGtleS50b1N0cmluZygpIDoga2V5KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5UmVzdWx0ID0gZGVmLmtleVR5cGUuX3pvZC5ydW4oeyB2YWx1ZToga2V5LCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlSZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJBc3luYyBzY2hlbWFzIG5vdCBzdXBwb3J0ZWQgaW4gb2JqZWN0IGtleXMgY3VycmVudGx5XCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXlSZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX2tleVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogXCJyZWNvcmRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IGtleVJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogW2tleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3V0S2V5ID0ga2V5UmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYudmFsdWVUeXBlLl96b2QucnVuKHsgdmFsdWU6IGlucHV0W2tleV0sIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21zLnB1c2gocmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGtleSwgcmVzdWx0Lmlzc3VlcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlW291dEtleV0gPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGtleSwgcmVzdWx0Lmlzc3VlcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZVtvdXRLZXldID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHVucmVjb2duaXplZDtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWNvcmRLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHVucmVjb2duaXplZCA9IHVucmVjb2duaXplZCA/PyBbXTtcbiAgICAgICAgICAgICAgICAgICAgdW5yZWNvZ25pemVkLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodW5yZWNvZ25pemVkICYmIHVucmVjb2duaXplZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFwidW5yZWNvZ25pemVkX2tleXNcIixcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgIGtleXM6IHVucmVjb2duaXplZCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSB7fTtcbiAgICAgICAgICAgIC8vIFJlZmxlY3Qub3duS2V5cyBmb3IgU3ltYm9sLWtleSBzdXBwb3J0OyBmaWx0ZXIgbm9uLWVudW1lcmFibGUgdG8gbWF0Y2ggei5vYmplY3QoKVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgUmVmbGVjdC5vd25LZXlzKGlucHV0KSkge1xuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IFwiX19wcm90b19fXCIpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGlucHV0LCBrZXkpKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBsZXQga2V5UmVzdWx0ID0gZGVmLmtleVR5cGUuX3pvZC5ydW4oeyB2YWx1ZToga2V5LCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgICAgICAgICAgICAgaWYgKGtleVJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXN5bmMgc2NoZW1hcyBub3Qgc3VwcG9ydGVkIGluIG9iamVjdCBrZXlzIGN1cnJlbnRseVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTnVtZXJpYyBzdHJpbmcgZmFsbGJhY2s6IGlmIGtleSBpcyBhIG51bWVyaWMgc3RyaW5nIGFuZCBmYWlsZWQsIHJldHJ5IHdpdGggTnVtYmVyKGtleSlcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGhhbmRsZXMgei5udW1iZXIoKSwgei5saXRlcmFsKFsxLCAyLCAzXSksIGFuZCB1bmlvbnMgY29udGFpbmluZyBudW1lcmljIGxpdGVyYWxzXG4gICAgICAgICAgICAgICAgY29uc3QgY2hlY2tOdW1lcmljS2V5ID0gdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiAmJiByZWdleGVzLm51bWJlci50ZXN0KGtleSkgJiYga2V5UmVzdWx0Lmlzc3Vlcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrTnVtZXJpY0tleSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXRyeVJlc3VsdCA9IGRlZi5rZXlUeXBlLl96b2QucnVuKHsgdmFsdWU6IE51bWJlcihrZXkpLCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeVJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFzeW5jIHNjaGVtYXMgbm90IHN1cHBvcnRlZCBpbiBvYmplY3Qga2V5cyBjdXJyZW50bHlcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5UmVzdWx0Lmlzc3Vlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleVJlc3VsdCA9IHJldHJ5UmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrZXlSZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGVmLm1vZGUgPT09IFwibG9vc2VcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFzcyB0aHJvdWdoIHVuY2hhbmdlZFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZVtrZXldID0gaW5wdXRba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlZmF1bHQgXCJzdHJpY3RcIiBiZWhhdmlvcjogZXJyb3Igb24gaW52YWxpZCBrZXlcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF9rZXlcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IFwicmVjb3JkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiBrZXlSZXN1bHQuaXNzdWVzLm1hcCgoaXNzKSA9PiB1dGlsLmZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvcmUuY29uZmlnKCkpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDoga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGg6IFtrZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLnZhbHVlVHlwZS5fem9kLnJ1bih7IHZhbHVlOiBpbnB1dFtrZXldLCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvbXMucHVzaChyZXN1bHQudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKC4uLnV0aWwucHJlZml4SXNzdWVzKGtleSwgcmVzdWx0Lmlzc3VlcykpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZVtrZXlSZXN1bHQudmFsdWVdID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0Lmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goLi4udXRpbC5wcmVmaXhJc3N1ZXMoa2V5LCByZXN1bHQuaXNzdWVzKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC52YWx1ZVtrZXlSZXN1bHQudmFsdWVdID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbXMpLnRoZW4oKCkgPT4gcGF5bG9hZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RNYXAgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE1hcFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoIShpbnB1dCBpbnN0YW5jZW9mIE1hcCkpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcIm1hcFwiLFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbXMgPSBbXTtcbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaW5wdXQpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleVJlc3VsdCA9IGRlZi5rZXlUeXBlLl96b2QucnVuKHsgdmFsdWU6IGtleSwgaXNzdWVzOiBbXSB9LCBjdHgpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVSZXN1bHQgPSBkZWYudmFsdWVUeXBlLl96b2QucnVuKHsgdmFsdWU6IHZhbHVlLCBpc3N1ZXM6IFtdIH0sIGN0eCk7XG4gICAgICAgICAgICBpZiAoa2V5UmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSB8fCB2YWx1ZVJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICBwcm9tcy5wdXNoKFByb21pc2UuYWxsKFtrZXlSZXN1bHQsIHZhbHVlUmVzdWx0XSkudGhlbigoW2tleVJlc3VsdCwgdmFsdWVSZXN1bHRdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZU1hcFJlc3VsdChrZXlSZXN1bHQsIHZhbHVlUmVzdWx0LCBwYXlsb2FkLCBrZXksIGlucHV0LCBpbnN0LCBjdHgpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhhbmRsZU1hcFJlc3VsdChrZXlSZXN1bHQsIHZhbHVlUmVzdWx0LCBwYXlsb2FkLCBrZXksIGlucHV0LCBpbnN0LCBjdHgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9tcy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbXMpLnRoZW4oKCkgPT4gcGF5bG9hZCk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZU1hcFJlc3VsdChrZXlSZXN1bHQsIHZhbHVlUmVzdWx0LCBmaW5hbCwga2V5LCBpbnB1dCwgaW5zdCwgY3R4KSB7XG4gICAgaWYgKGtleVJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh1dGlsLnByb3BlcnR5S2V5VHlwZXMuaGFzKHR5cGVvZiBrZXkpKSB7XG4gICAgICAgICAgICBmaW5hbC5pc3N1ZXMucHVzaCguLi51dGlsLnByZWZpeElzc3VlcyhrZXksIGtleVJlc3VsdC5pc3N1ZXMpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfa2V5XCIsXG4gICAgICAgICAgICAgICAgb3JpZ2luOiBcIm1hcFwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgaXNzdWVzOiBrZXlSZXN1bHQuaXNzdWVzLm1hcCgoaXNzKSA9PiB1dGlsLmZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvcmUuY29uZmlnKCkpKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh2YWx1ZVJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh1dGlsLnByb3BlcnR5S2V5VHlwZXMuaGFzKHR5cGVvZiBrZXkpKSB7XG4gICAgICAgICAgICBmaW5hbC5pc3N1ZXMucHVzaCguLi51dGlsLnByZWZpeElzc3VlcyhrZXksIHZhbHVlUmVzdWx0Lmlzc3VlcykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZmluYWwuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIG9yaWdpbjogXCJtYXBcIixcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZWxlbWVudFwiLFxuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgaXNzdWVzOiB2YWx1ZVJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmluYWwudmFsdWUuc2V0KGtleVJlc3VsdC52YWx1ZSwgdmFsdWVSZXN1bHQudmFsdWUpO1xufVxuZXhwb3J0IGNvbnN0ICRab2RTZXQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFNldFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAoIShpbnB1dCBpbnN0YW5jZW9mIFNldCkpIHtcbiAgICAgICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgIGluc3QsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFwic2V0XCIsXG4gICAgICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbXMgPSBbXTtcbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IG5ldyBTZXQoKTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGlucHV0KSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYudmFsdWVUeXBlLl96b2QucnVuKHsgdmFsdWU6IGl0ZW0sIGlzc3VlczogW10gfSwgY3R4KTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcHJvbXMucHVzaChyZXN1bHQudGhlbigocmVzdWx0KSA9PiBoYW5kbGVTZXRSZXN1bHQocmVzdWx0LCBwYXlsb2FkKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIGhhbmRsZVNldFJlc3VsdChyZXN1bHQsIHBheWxvYWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9tcy5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbXMpLnRoZW4oKCkgPT4gcGF5bG9hZCk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZVNldFJlc3VsdChyZXN1bHQsIGZpbmFsKSB7XG4gICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZpbmFsLmlzc3Vlcy5wdXNoKC4uLnJlc3VsdC5pc3N1ZXMpO1xuICAgIH1cbiAgICBmaW5hbC52YWx1ZS5hZGQocmVzdWx0LnZhbHVlKTtcbn1cbmV4cG9ydCBjb25zdCAkWm9kRW51bSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kRW51bVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvbnN0IHZhbHVlcyA9IHV0aWwuZ2V0RW51bVZhbHVlcyhkZWYuZW50cmllcyk7XG4gICAgY29uc3QgdmFsdWVzU2V0ID0gbmV3IFNldCh2YWx1ZXMpO1xuICAgIGluc3QuX3pvZC52YWx1ZXMgPSB2YWx1ZXNTZXQ7XG4gICAgaW5zdC5fem9kLnBhdHRlcm4gPSBuZXcgUmVnRXhwKGBeKCR7dmFsdWVzXG4gICAgICAgIC5maWx0ZXIoKGspID0+IHV0aWwucHJvcGVydHlLZXlUeXBlcy5oYXModHlwZW9mIGspKVxuICAgICAgICAubWFwKChvKSA9PiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIgPyB1dGlsLmVzY2FwZVJlZ2V4KG8pIDogby50b1N0cmluZygpKSlcbiAgICAgICAgLmpvaW4oXCJ8XCIpfSkkYCk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICBpZiAodmFsdWVzU2V0LmhhcyhpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3ZhbHVlXCIsXG4gICAgICAgICAgICB2YWx1ZXMsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZExpdGVyYWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZExpdGVyYWxcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpZiAoZGVmLnZhbHVlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNyZWF0ZSBsaXRlcmFsIHNjaGVtYSB3aXRoIG5vIHZhbGlkIHZhbHVlc1wiKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVzID0gbmV3IFNldChkZWYudmFsdWVzKTtcbiAgICBpbnN0Ll96b2QudmFsdWVzID0gdmFsdWVzO1xuICAgIGluc3QuX3pvZC5wYXR0ZXJuID0gbmV3IFJlZ0V4cChgXigke2RlZi52YWx1ZXNcbiAgICAgICAgLm1hcCgobykgPT4gKHR5cGVvZiBvID09PSBcInN0cmluZ1wiID8gdXRpbC5lc2NhcGVSZWdleChvKSA6IG8gPyB1dGlsLmVzY2FwZVJlZ2V4KG8udG9TdHJpbmcoKSkgOiBTdHJpbmcobykpKVxuICAgICAgICAuam9pbihcInxcIil9KSRgKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgX2N0eCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGlmICh2YWx1ZXMuaGFzKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdmFsdWVcIixcbiAgICAgICAgICAgIHZhbHVlczogZGVmLnZhbHVlcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kRmlsZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kRmlsZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gcGF5bG9hZC52YWx1ZTtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBGaWxlKVxuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgZXhwZWN0ZWQ6IFwiZmlsZVwiLFxuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kVHJhbnNmb3JtID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RUcmFuc2Zvcm1cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2Qub3B0aW4gPSBcIm9wdGlvbmFsXCI7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kRW5jb2RlRXJyb3IoaW5zdC5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBfb3V0ID0gZGVmLnRyYW5zZm9ybShwYXlsb2FkLnZhbHVlLCBwYXlsb2FkKTtcbiAgICAgICAgaWYgKGN0eC5hc3luYykge1xuICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gX291dCBpbnN0YW5jZW9mIFByb21pc2UgPyBfb3V0IDogUHJvbWlzZS5yZXNvbHZlKF9vdXQpO1xuICAgICAgICAgICAgcmV0dXJuIG91dHB1dC50aGVuKChvdXRwdXQpID0+IHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gb3V0cHV0O1xuICAgICAgICAgICAgICAgIHBheWxvYWQuZmFsbGJhY2sgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9vdXQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgY29yZS4kWm9kQXN5bmNFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSBfb3V0O1xuICAgICAgICBwYXlsb2FkLmZhbGxiYWNrID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlT3B0aW9uYWxSZXN1bHQocmVzdWx0LCBpbnB1dCkge1xuICAgIGlmIChpbnB1dCA9PT0gdW5kZWZpbmVkICYmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCB8fCByZXN1bHQuZmFsbGJhY2spKSB7XG4gICAgICAgIHJldHVybiB7IGlzc3VlczogW10sIHZhbHVlOiB1bmRlZmluZWQgfTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBjb25zdCAkWm9kT3B0aW9uYWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE9wdGlvbmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLm9wdGluID0gXCJvcHRpb25hbFwiO1xuICAgIGluc3QuX3pvZC5vcHRvdXQgPSBcIm9wdGlvbmFsXCI7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4ge1xuICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyA/IG5ldyBTZXQoWy4uLmRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMsIHVuZGVmaW5lZF0pIDogdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicGF0dGVyblwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBkZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybjtcbiAgICAgICAgcmV0dXJuIHBhdHRlcm4gPyBuZXcgUmVnRXhwKGBeKCR7dXRpbC5jbGVhblJlZ2V4KHBhdHRlcm4uc291cmNlKX0pPyRgKSA6IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGlmIChkZWYuaW5uZXJUeXBlLl96b2Qub3B0aW4gPT09IFwib3B0aW9uYWxcIikge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBwYXlsb2FkLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC50aGVuKChyKSA9PiBoYW5kbGVPcHRpb25hbFJlc3VsdChyLCBpbnB1dCkpO1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZU9wdGlvbmFsUmVzdWx0KHJlc3VsdCwgaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXlsb2FkLnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RFeGFjdE9wdGlvbmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RFeGFjdE9wdGlvbmFsXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAvLyBDYWxsIHBhcmVudCBpbml0IC0gaW5oZXJpdHMgb3B0aW4vb3B0b3V0ID0gXCJvcHRpb25hbFwiXG4gICAgJFpvZE9wdGlvbmFsLmluaXQoaW5zdCwgZGVmKTtcbiAgICAvLyBPdmVycmlkZSB2YWx1ZXMvcGF0dGVybiB0byBOT1QgYWRkIHVuZGVmaW5lZFxuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IGRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicGF0dGVyblwiLCAoKSA9PiBkZWYuaW5uZXJUeXBlLl96b2QucGF0dGVybik7XG4gICAgLy8gT3ZlcnJpZGUgcGFyc2UgdG8ganVzdCBkZWxlZ2F0ZSAobm8gdW5kZWZpbmVkIGhhbmRsaW5nKVxuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE51bGxhYmxlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROdWxsYWJsZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0aW5cIiwgKCkgPT4gZGVmLmlubmVyVHlwZS5fem9kLm9wdGluKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcIm9wdG91dFwiLCAoKSA9PiBkZWYuaW5uZXJUeXBlLl96b2Qub3B0b3V0KTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInBhdHRlcm5cIiwgKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXR0ZXJuID0gZGVmLmlubmVyVHlwZS5fem9kLnBhdHRlcm47XG4gICAgICAgIHJldHVybiBwYXR0ZXJuID8gbmV3IFJlZ0V4cChgXigke3V0aWwuY2xlYW5SZWdleChwYXR0ZXJuLnNvdXJjZSl9fG51bGwpJGApIDogdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMgPyBuZXcgU2V0KFsuLi5kZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzLCBudWxsXSkgOiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICAvLyBGb3J3YXJkIGRpcmVjdGlvbiAoZGVjb2RlKTogYWxsb3cgbnVsbCB0byBwYXNzIHRocm91Z2hcbiAgICAgICAgaWYgKHBheWxvYWQudmFsdWUgPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZERlZmF1bHQgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZERlZmF1bHRcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICAvLyBpbnN0Ll96b2QucWluID0gXCJ0cnVlXCI7XG4gICAgaW5zdC5fem9kLm9wdGluID0gXCJvcHRpb25hbFwiO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IGRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgaWYgKGN0eC5kaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIikge1xuICAgICAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3J3YXJkIGRpcmVjdGlvbiAoZGVjb2RlKTogYXBwbHkgZGVmYXVsdHMgZm9yIHVuZGVmaW5lZCBpbnB1dFxuICAgICAgICBpZiAocGF5bG9hZC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gZGVmLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogJFpvZERlZmF1bHQgcmV0dXJucyB0aGUgZGVmYXVsdCB2YWx1ZSBpbW1lZGlhdGVseSBpbiBmb3J3YXJkIGRpcmVjdGlvbi5cbiAgICAgICAgICAgICAqIEl0IGRvZXNuJ3QgcGFzcyB0aGUgZGVmYXVsdCB2YWx1ZSBpbnRvIHRoZSB2YWxpZGF0b3IgKFwicHJlZmF1bHRcIikuIFRoZXJlJ3Mgbm8gcmVhc29uIHRvIHBhc3MgdGhlIGRlZmF1bHQgdmFsdWUgdGhyb3VnaCB2YWxpZGF0aW9uLiBUaGUgdmFsaWRpdHkgb2YgdGhlIGRlZmF1bHQgaXMgZW5mb3JjZWQgYnkgVHlwZVNjcmlwdCBzdGF0aWNhbGx5LiBPdGhlcndpc2UsIGl0J3MgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB1c2VyIHRvIGVuc3VyZSB0aGUgZGVmYXVsdCBpcyB2YWxpZC4gSW4gdGhlIGNhc2Ugb2YgcGlwZXMgd2l0aCBkaXZlcmdlbnQgaW4vb3V0IHR5cGVzLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGRlZmF1bHQgb24gdGhlIGBpbmAgc2NoZW1hIG9mIHlvdXIgWm9kUGlwZSB0byBzZXQgYSBcInByZWZhdWx0XCIgZm9yIHRoZSBwaXBlLiAgICovXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBGb3J3YXJkIGRpcmVjdGlvbjogY29udGludWUgd2l0aCBkZWZhdWx0IGhhbmRsaW5nXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiBoYW5kbGVEZWZhdWx0UmVzdWx0KHJlc3VsdCwgZGVmKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhbmRsZURlZmF1bHRSZXN1bHQocmVzdWx0LCBkZWYpO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZURlZmF1bHRSZXN1bHQocGF5bG9hZCwgZGVmKSB7XG4gICAgaWYgKHBheWxvYWQudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwYXlsb2FkLnZhbHVlID0gZGVmLmRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHBheWxvYWQ7XG59XG5leHBvcnQgY29uc3QgJFpvZFByZWZhdWx0ID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RQcmVmYXVsdFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5vcHRpbiA9IFwib3B0aW9uYWxcIjtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInZhbHVlc1wiLCAoKSA9PiBkZWYuaW5uZXJUeXBlLl96b2QudmFsdWVzKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGlmIChjdHguZGlyZWN0aW9uID09PSBcImJhY2t3YXJkXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yd2FyZCBkaXJlY3Rpb24gKGRlY29kZSk6IGFwcGx5IHByZWZhdWx0IGZvciB1bmRlZmluZWQgaW5wdXRcbiAgICAgICAgaWYgKHBheWxvYWQudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcGF5bG9hZC52YWx1ZSA9IGRlZi5kZWZhdWx0VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZE5vbk9wdGlvbmFsID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2ROb25PcHRpb25hbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IHtcbiAgICAgICAgY29uc3QgdiA9IGRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXM7XG4gICAgICAgIHJldHVybiB2ID8gbmV3IFNldChbLi4udl0uZmlsdGVyKCh4KSA9PiB4ICE9PSB1bmRlZmluZWQpKSA6IHVuZGVmaW5lZDtcbiAgICB9KTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbigocmVzdWx0KSA9PiBoYW5kbGVOb25PcHRpb25hbFJlc3VsdChyZXN1bHQsIGluc3QpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlTm9uT3B0aW9uYWxSZXN1bHQocmVzdWx0LCBpbnN0KTtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVOb25PcHRpb25hbFJlc3VsdChwYXlsb2FkLCBpbnN0KSB7XG4gICAgaWYgKCFwYXlsb2FkLmlzc3Vlcy5sZW5ndGggJiYgcGF5bG9hZC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBheWxvYWQuaXNzdWVzLnB1c2goe1xuICAgICAgICAgICAgY29kZTogXCJpbnZhbGlkX3R5cGVcIixcbiAgICAgICAgICAgIGV4cGVjdGVkOiBcIm5vbm9wdGlvbmFsXCIsXG4gICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZDtcbn1cbmV4cG9ydCBjb25zdCAkWm9kU3VjY2VzcyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kU3VjY2Vzc1wiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgaWYgKGN0eC5kaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGNvcmUuJFpvZEVuY29kZUVycm9yKFwiWm9kU3VjY2Vzc1wiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSByZXN1bHQuaXNzdWVzLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHBheWxvYWQudmFsdWUgPSByZXN1bHQuaXNzdWVzLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RDYXRjaCA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ2F0Y2hcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll96b2Qub3B0aW4gPSBcIm9wdGlvbmFsXCI7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRvdXRcIiwgKCkgPT4gZGVmLmlubmVyVHlwZS5fem9kLm9wdG91dCk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJ2YWx1ZXNcIiwgKCkgPT4gZGVmLmlubmVyVHlwZS5fem9kLnZhbHVlcyk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZvcndhcmQgZGlyZWN0aW9uIChkZWNvZGUpOiBhcHBseSBjYXRjaCBsb2dpY1xuICAgICAgICBjb25zdCByZXN1bHQgPSBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBkZWYuY2F0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXlsb2FkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IHJlc3VsdC5pc3N1ZXMubWFwKChpc3MpID0+IHV0aWwuZmluYWxpemVJc3N1ZShpc3MsIGN0eCwgY29yZS5jb25maWcoKSkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcGF5bG9hZC5mYWxsYmFjayA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcGF5bG9hZC52YWx1ZSA9IHJlc3VsdC52YWx1ZTtcbiAgICAgICAgaWYgKHJlc3VsdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gZGVmLmNhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgIC4uLnBheWxvYWQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IHtcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVzOiByZXN1bHQuaXNzdWVzLm1hcCgoaXNzKSA9PiB1dGlsLmZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvcmUuY29uZmlnKCkpKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGlucHV0OiBwYXlsb2FkLnZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3VlcyA9IFtdO1xuICAgICAgICAgICAgcGF5bG9hZC5mYWxsYmFjayA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2ROYU4gPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZE5hTlwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZC52YWx1ZSAhPT0gXCJudW1iZXJcIiB8fCAhTnVtYmVyLmlzTmFOKHBheWxvYWQudmFsdWUpKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcIm5hblwiLFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kUGlwZSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kUGlwZVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IGRlZi5pbi5fem9kLnZhbHVlcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRpblwiLCAoKSA9PiBkZWYuaW4uX3pvZC5vcHRpbik7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRvdXRcIiwgKCkgPT4gZGVmLm91dC5fem9kLm9wdG91dCk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJwcm9wVmFsdWVzXCIsICgpID0+IGRlZi5pbi5fem9kLnByb3BWYWx1ZXMpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgaWYgKGN0eC5kaXJlY3Rpb24gPT09IFwiYmFja3dhcmRcIikge1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBkZWYub3V0Ll96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICBpZiAocmlnaHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJpZ2h0LnRoZW4oKHJpZ2h0KSA9PiBoYW5kbGVQaXBlUmVzdWx0KHJpZ2h0LCBkZWYuaW4sIGN0eCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVBpcGVSZXN1bHQocmlnaHQsIGRlZi5pbiwgY3R4KTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsZWZ0ID0gZGVmLmluLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgIGlmIChsZWZ0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGxlZnQudGhlbigobGVmdCkgPT4gaGFuZGxlUGlwZVJlc3VsdChsZWZ0LCBkZWYub3V0LCBjdHgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlUGlwZVJlc3VsdChsZWZ0LCBkZWYub3V0LCBjdHgpO1xuICAgIH07XG59KTtcbmZ1bmN0aW9uIGhhbmRsZVBpcGVSZXN1bHQobGVmdCwgbmV4dCwgY3R4KSB7XG4gICAgaWYgKGxlZnQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAvLyBwcmV2ZW50IGZ1cnRoZXIgY2hlY2tzXG4gICAgICAgIGxlZnQuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBsZWZ0O1xuICAgIH1cbiAgICByZXR1cm4gbmV4dC5fem9kLnJ1bih7IHZhbHVlOiBsZWZ0LnZhbHVlLCBpc3N1ZXM6IGxlZnQuaXNzdWVzLCBmYWxsYmFjazogbGVmdC5mYWxsYmFjayB9LCBjdHgpO1xufVxuZXhwb3J0IGNvbnN0ICRab2RDb2RlYyA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ29kZWNcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInZhbHVlc1wiLCAoKSA9PiBkZWYuaW4uX3pvZC52YWx1ZXMpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0aW5cIiwgKCkgPT4gZGVmLmluLl96b2Qub3B0aW4pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0b3V0XCIsICgpID0+IGRlZi5vdXQuX3pvZC5vcHRvdXQpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicHJvcFZhbHVlc1wiLCAoKSA9PiBkZWYuaW4uX3pvZC5wcm9wVmFsdWVzKTtcbiAgICBpbnN0Ll96b2QucGFyc2UgPSAocGF5bG9hZCwgY3R4KSA9PiB7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGN0eC5kaXJlY3Rpb24gfHwgXCJmb3J3YXJkXCI7XG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09IFwiZm9yd2FyZFwiKSB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gZGVmLmluLl96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICBpZiAobGVmdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGVmdC50aGVuKChsZWZ0KSA9PiBoYW5kbGVDb2RlY0FSZXN1bHQobGVmdCwgZGVmLCBjdHgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVDb2RlY0FSZXN1bHQobGVmdCwgZGVmLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBkZWYub3V0Ll96b2QucnVuKHBheWxvYWQsIGN0eCk7XG4gICAgICAgICAgICBpZiAocmlnaHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJpZ2h0LnRoZW4oKHJpZ2h0KSA9PiBoYW5kbGVDb2RlY0FSZXN1bHQocmlnaHQsIGRlZiwgY3R4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlQ29kZWNBUmVzdWx0KHJpZ2h0LCBkZWYsIGN0eCk7XG4gICAgICAgIH1cbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVDb2RlY0FSZXN1bHQocmVzdWx0LCBkZWYsIGN0eCkge1xuICAgIGlmIChyZXN1bHQuaXNzdWVzLmxlbmd0aCkge1xuICAgICAgICAvLyBwcmV2ZW50IGZ1cnRoZXIgY2hlY2tzXG4gICAgICAgIHJlc3VsdC5hYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgY29uc3QgZGlyZWN0aW9uID0gY3R4LmRpcmVjdGlvbiB8fCBcImZvcndhcmRcIjtcbiAgICBpZiAoZGlyZWN0aW9uID09PSBcImZvcndhcmRcIikge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1lZCA9IGRlZi50cmFuc2Zvcm0ocmVzdWx0LnZhbHVlLCByZXN1bHQpO1xuICAgICAgICBpZiAodHJhbnNmb3JtZWQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWQudGhlbigodmFsdWUpID0+IGhhbmRsZUNvZGVjVHhSZXN1bHQocmVzdWx0LCB2YWx1ZSwgZGVmLm91dCwgY3R4KSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhbmRsZUNvZGVjVHhSZXN1bHQocmVzdWx0LCB0cmFuc2Zvcm1lZCwgZGVmLm91dCwgY3R4KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gZGVmLnJldmVyc2VUcmFuc2Zvcm0ocmVzdWx0LnZhbHVlLCByZXN1bHQpO1xuICAgICAgICBpZiAodHJhbnNmb3JtZWQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJhbnNmb3JtZWQudGhlbigodmFsdWUpID0+IGhhbmRsZUNvZGVjVHhSZXN1bHQocmVzdWx0LCB2YWx1ZSwgZGVmLmluLCBjdHgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFuZGxlQ29kZWNUeFJlc3VsdChyZXN1bHQsIHRyYW5zZm9ybWVkLCBkZWYuaW4sIGN0eCk7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlQ29kZWNUeFJlc3VsdChsZWZ0LCB2YWx1ZSwgbmV4dFNjaGVtYSwgY3R4KSB7XG4gICAgLy8gQ2hlY2sgaWYgdHJhbnNmb3JtIGFkZGVkIGFueSBpc3N1ZXNcbiAgICBpZiAobGVmdC5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGxlZnQuYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBsZWZ0O1xuICAgIH1cbiAgICByZXR1cm4gbmV4dFNjaGVtYS5fem9kLnJ1bih7IHZhbHVlLCBpc3N1ZXM6IGxlZnQuaXNzdWVzIH0sIGN0eCk7XG59XG5leHBvcnQgY29uc3QgJFpvZFByZXByb2Nlc3MgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFByZXByb2Nlc3NcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RQaXBlLmluaXQoaW5zdCwgZGVmKTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RSZWFkb25seSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kUmVhZG9ubHlcIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInByb3BWYWx1ZXNcIiwgKCkgPT4gZGVmLmlubmVyVHlwZS5fem9kLnByb3BWYWx1ZXMpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwidmFsdWVzXCIsICgpID0+IGRlZi5pbm5lclR5cGUuX3pvZC52YWx1ZXMpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0aW5cIiwgKCkgPT4gZGVmLmlubmVyVHlwZT8uX3pvZD8ub3B0aW4pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0b3V0XCIsICgpID0+IGRlZi5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dCk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICBpZiAoY3R4LmRpcmVjdGlvbiA9PT0gXCJiYWNrd2FyZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVmLmlubmVyVHlwZS5fem9kLnJ1bihwYXlsb2FkLCBjdHgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGRlZi5pbm5lclR5cGUuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQudGhlbihoYW5kbGVSZWFkb25seVJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlYWRvbmx5UmVzdWx0KHJlc3VsdCk7XG4gICAgfTtcbn0pO1xuZnVuY3Rpb24gaGFuZGxlUmVhZG9ubHlSZXN1bHQocGF5bG9hZCkge1xuICAgIHBheWxvYWQudmFsdWUgPSBPYmplY3QuZnJlZXplKHBheWxvYWQudmFsdWUpO1xuICAgIHJldHVybiBwYXlsb2FkO1xufVxuZXhwb3J0IGNvbnN0ICRab2RUZW1wbGF0ZUxpdGVyYWwgPSAvKkBfX1BVUkVfXyovIGNvcmUuJGNvbnN0cnVjdG9yKFwiJFpvZFRlbXBsYXRlTGl0ZXJhbFwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIGNvbnN0IHJlZ2V4UGFydHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IHBhcnQgb2YgZGVmLnBhcnRzKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiBwYXJ0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBpcyBab2Qgc2NoZW1hXG4gICAgICAgICAgICBpZiAoIXBhcnQuX3pvZC5wYXR0ZXJuKSB7XG4gICAgICAgICAgICAgICAgLy8gaWYgKCFzb3VyY2UpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHRlbXBsYXRlIGxpdGVyYWwgcGFydCwgbm8gcGF0dGVybiBmb3VuZDogJHtbLi4ucGFydC5fem9kLnRyYWl0c10uc2hpZnQoKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHBhcnQuX3pvZC5wYXR0ZXJuIGluc3RhbmNlb2YgUmVnRXhwID8gcGFydC5fem9kLnBhdHRlcm4uc291cmNlIDogcGFydC5fem9kLnBhdHRlcm47XG4gICAgICAgICAgICBpZiAoIXNvdXJjZSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGVtcGxhdGUgbGl0ZXJhbCBwYXJ0OiAke3BhcnQuX3pvZC50cmFpdHN9YCk7XG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHNvdXJjZS5zdGFydHNXaXRoKFwiXlwiKSA/IDEgOiAwO1xuICAgICAgICAgICAgY29uc3QgZW5kID0gc291cmNlLmVuZHNXaXRoKFwiJFwiKSA/IHNvdXJjZS5sZW5ndGggLSAxIDogc291cmNlLmxlbmd0aDtcbiAgICAgICAgICAgIHJlZ2V4UGFydHMucHVzaChzb3VyY2Uuc2xpY2Uoc3RhcnQsIGVuZCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHBhcnQgPT09IG51bGwgfHwgdXRpbC5wcmltaXRpdmVUeXBlcy5oYXModHlwZW9mIHBhcnQpKSB7XG4gICAgICAgICAgICByZWdleFBhcnRzLnB1c2godXRpbC5lc2NhcGVSZWdleChgJHtwYXJ0fWApKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB0ZW1wbGF0ZSBsaXRlcmFsIHBhcnQ6ICR7cGFydH1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnN0Ll96b2QucGF0dGVybiA9IG5ldyBSZWdFeHAoYF4ke3JlZ2V4UGFydHMuam9pbihcIlwiKX0kYCk7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF9jdHgpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXlsb2FkLnZhbHVlICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBpbnB1dDogcGF5bG9hZC52YWx1ZSxcbiAgICAgICAgICAgICAgICBpbnN0LFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgIGNvZGU6IFwiaW52YWxpZF90eXBlXCIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBwYXlsb2FkO1xuICAgICAgICB9XG4gICAgICAgIGluc3QuX3pvZC5wYXR0ZXJuLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGlmICghaW5zdC5fem9kLnBhdHRlcm4udGVzdChwYXlsb2FkLnZhbHVlKSkge1xuICAgICAgICAgICAgcGF5bG9hZC5pc3N1ZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfZm9ybWF0XCIsXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBkZWYuZm9ybWF0ID8/IFwidGVtcGxhdGVfbGl0ZXJhbFwiLFxuICAgICAgICAgICAgICAgIHBhdHRlcm46IGluc3QuX3pvZC5wYXR0ZXJuLnNvdXJjZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RGdW5jdGlvbiA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kRnVuY3Rpb25cIiwgKGluc3QsIGRlZikgPT4ge1xuICAgICRab2RUeXBlLmluaXQoaW5zdCwgZGVmKTtcbiAgICBpbnN0Ll9kZWYgPSBkZWY7XG4gICAgaW5zdC5fem9kLmRlZiA9IGRlZjtcbiAgICBpbnN0LmltcGxlbWVudCA9IChmdW5jKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbXBsZW1lbnQoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgZnVuY3Rpb25cIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRBcmdzID0gaW5zdC5fZGVmLmlucHV0ID8gcGFyc2UoaW5zdC5fZGVmLmlucHV0LCBhcmdzKSA6IGFyZ3M7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBSZWZsZWN0LmFwcGx5KGZ1bmMsIHRoaXMsIHBhcnNlZEFyZ3MpO1xuICAgICAgICAgICAgaWYgKGluc3QuX2RlZi5vdXRwdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2UoaW5zdC5fZGVmLm91dHB1dCwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBpbnN0LmltcGxlbWVudEFzeW5jID0gKGZ1bmMpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImltcGxlbWVudEFzeW5jKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIGZ1bmN0aW9uXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luYyBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQXJncyA9IGluc3QuX2RlZi5pbnB1dCA/IGF3YWl0IHBhcnNlQXN5bmMoaW5zdC5fZGVmLmlucHV0LCBhcmdzKSA6IGFyZ3M7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBSZWZsZWN0LmFwcGx5KGZ1bmMsIHRoaXMsIHBhcnNlZEFyZ3MpO1xuICAgICAgICAgICAgaWYgKGluc3QuX2RlZi5vdXRwdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgcGFyc2VBc3luYyhpbnN0Ll9kZWYub3V0cHV0LCByZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBfY3R4KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgcGF5bG9hZC52YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBjb2RlOiBcImludmFsaWRfdHlwZVwiLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcImZ1bmN0aW9uXCIsXG4gICAgICAgICAgICAgICAgaW5wdXQ6IHBheWxvYWQudmFsdWUsXG4gICAgICAgICAgICAgICAgaW5zdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQ2hlY2sgaWYgb3V0cHV0IGlzIGEgcHJvbWlzZSB0eXBlIHRvIGRldGVybWluZSBpZiB3ZSBzaG91bGQgdXNlIGFzeW5jIGltcGxlbWVudGF0aW9uXG4gICAgICAgIGNvbnN0IGhhc1Byb21pc2VPdXRwdXQgPSBpbnN0Ll9kZWYub3V0cHV0ICYmIGluc3QuX2RlZi5vdXRwdXQuX3pvZC5kZWYudHlwZSA9PT0gXCJwcm9taXNlXCI7XG4gICAgICAgIGlmIChoYXNQcm9taXNlT3V0cHV0KSB7XG4gICAgICAgICAgICBwYXlsb2FkLnZhbHVlID0gaW5zdC5pbXBsZW1lbnRBc3luYyhwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBheWxvYWQudmFsdWUgPSBpbnN0LmltcGxlbWVudChwYXlsb2FkLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGF5bG9hZDtcbiAgICB9O1xuICAgIGluc3QuaW5wdXQgPSAoLi4uYXJncykgPT4ge1xuICAgICAgICBjb25zdCBGID0gaW5zdC5jb25zdHJ1Y3RvcjtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnc1swXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRih7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJmdW5jdGlvblwiLFxuICAgICAgICAgICAgICAgIGlucHV0OiBuZXcgJFpvZFR1cGxlKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJ0dXBsZVwiLFxuICAgICAgICAgICAgICAgICAgICBpdGVtczogYXJnc1swXSxcbiAgICAgICAgICAgICAgICAgICAgcmVzdDogYXJnc1sxXSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBvdXRwdXQ6IGluc3QuX2RlZi5vdXRwdXQsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEYoe1xuICAgICAgICAgICAgdHlwZTogXCJmdW5jdGlvblwiLFxuICAgICAgICAgICAgaW5wdXQ6IGFyZ3NbMF0sXG4gICAgICAgICAgICBvdXRwdXQ6IGluc3QuX2RlZi5vdXRwdXQsXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgaW5zdC5vdXRwdXQgPSAob3V0cHV0KSA9PiB7XG4gICAgICAgIGNvbnN0IEYgPSBpbnN0LmNvbnN0cnVjdG9yO1xuICAgICAgICByZXR1cm4gbmV3IEYoe1xuICAgICAgICAgICAgdHlwZTogXCJmdW5jdGlvblwiLFxuICAgICAgICAgICAgaW5wdXQ6IGluc3QuX2RlZi5pbnB1dCxcbiAgICAgICAgICAgIG91dHB1dCxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICByZXR1cm4gaW5zdDtcbn0pO1xuZXhwb3J0IGNvbnN0ICRab2RQcm9taXNlID0gLypAX19QVVJFX18qLyBjb3JlLiRjb25zdHJ1Y3RvcihcIiRab2RQcm9taXNlXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIGN0eCkgPT4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBheWxvYWQudmFsdWUpLnRoZW4oKGlubmVyKSA9PiBkZWYuaW5uZXJUeXBlLl96b2QucnVuKHsgdmFsdWU6IGlubmVyLCBpc3N1ZXM6IFtdIH0sIGN0eCkpO1xuICAgIH07XG59KTtcbmV4cG9ydCBjb25zdCAkWm9kTGF6eSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kTGF6eVwiLCAoaW5zdCwgZGVmKSA9PiB7XG4gICAgJFpvZFR5cGUuaW5pdChpbnN0LCBkZWYpO1xuICAgIC8vIENhY2hlIHRoZSByZXNvbHZlZCBpbm5lciB0eXBlIG9uIHRoZSBzaGFyZWQgYGRlZmAgc28gYWxsIGNsb25lcyBvZiB0aGlzXG4gICAgLy8gbGF6eSAoZS5nLiB2aWEgYC5kZXNjcmliZSgpYC9gLm1ldGEoKWApIHNoYXJlIHRoZSBzYW1lIGlubmVyIGluc3RhbmNlLFxuICAgIC8vIHByZXNlcnZpbmcgaWRlbnRpdHkgZm9yIGN5Y2xlIGRldGVjdGlvbiBvbiByZWN1cnNpdmUgc2NoZW1hcy5cbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcImlubmVyVHlwZVwiLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGQgPSBkZWY7XG4gICAgICAgIGlmICghZC5fY2FjaGVkSW5uZXIpXG4gICAgICAgICAgICBkLl9jYWNoZWRJbm5lciA9IGRlZi5nZXR0ZXIoKTtcbiAgICAgICAgcmV0dXJuIGQuX2NhY2hlZElubmVyO1xuICAgIH0pO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwicGF0dGVyblwiLCAoKSA9PiBpbnN0Ll96b2QuaW5uZXJUeXBlPy5fem9kPy5wYXR0ZXJuKTtcbiAgICB1dGlsLmRlZmluZUxhenkoaW5zdC5fem9kLCBcInByb3BWYWx1ZXNcIiwgKCkgPT4gaW5zdC5fem9kLmlubmVyVHlwZT8uX3pvZD8ucHJvcFZhbHVlcyk7XG4gICAgdXRpbC5kZWZpbmVMYXp5KGluc3QuX3pvZCwgXCJvcHRpblwiLCAoKSA9PiBpbnN0Ll96b2QuaW5uZXJUeXBlPy5fem9kPy5vcHRpbiA/PyB1bmRlZmluZWQpO1xuICAgIHV0aWwuZGVmaW5lTGF6eShpbnN0Ll96b2QsIFwib3B0b3V0XCIsICgpID0+IGluc3QuX3pvZC5pbm5lclR5cGU/Ll96b2Q/Lm9wdG91dCA/PyB1bmRlZmluZWQpO1xuICAgIGluc3QuX3pvZC5wYXJzZSA9IChwYXlsb2FkLCBjdHgpID0+IHtcbiAgICAgICAgY29uc3QgaW5uZXIgPSBpbnN0Ll96b2QuaW5uZXJUeXBlO1xuICAgICAgICByZXR1cm4gaW5uZXIuX3pvZC5ydW4ocGF5bG9hZCwgY3R4KTtcbiAgICB9O1xufSk7XG5leHBvcnQgY29uc3QgJFpvZEN1c3RvbSA9IC8qQF9fUFVSRV9fKi8gY29yZS4kY29uc3RydWN0b3IoXCIkWm9kQ3VzdG9tXCIsIChpbnN0LCBkZWYpID0+IHtcbiAgICBjaGVja3MuJFpvZENoZWNrLmluaXQoaW5zdCwgZGVmKTtcbiAgICAkWm9kVHlwZS5pbml0KGluc3QsIGRlZik7XG4gICAgaW5zdC5fem9kLnBhcnNlID0gKHBheWxvYWQsIF8pID0+IHtcbiAgICAgICAgcmV0dXJuIHBheWxvYWQ7XG4gICAgfTtcbiAgICBpbnN0Ll96b2QuY2hlY2sgPSAocGF5bG9hZCkgPT4ge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHBheWxvYWQudmFsdWU7XG4gICAgICAgIGNvbnN0IHIgPSBkZWYuZm4oaW5wdXQpO1xuICAgICAgICBpZiAociBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgIHJldHVybiByLnRoZW4oKHIpID0+IGhhbmRsZVJlZmluZVJlc3VsdChyLCBwYXlsb2FkLCBpbnB1dCwgaW5zdCkpO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVJlZmluZVJlc3VsdChyLCBwYXlsb2FkLCBpbnB1dCwgaW5zdCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9O1xufSk7XG5mdW5jdGlvbiBoYW5kbGVSZWZpbmVSZXN1bHQocmVzdWx0LCBwYXlsb2FkLCBpbnB1dCwgaW5zdCkge1xuICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIGNvbnN0IF9pc3MgPSB7XG4gICAgICAgICAgICBjb2RlOiBcImN1c3RvbVwiLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICBpbnN0LCAvLyBpbmNvcnBvcmF0ZXMgcGFyYW1zLmVycm9yIGludG8gaXNzdWUgcmVwb3J0aW5nXG4gICAgICAgICAgICBwYXRoOiBbLi4uKGluc3QuX3pvZC5kZWYucGF0aCA/PyBbXSldLCAvLyBpbmNvcnBvcmF0ZXMgcGFyYW1zLmVycm9yIGludG8gaXNzdWUgcmVwb3J0aW5nXG4gICAgICAgICAgICBjb250aW51ZTogIWluc3QuX3pvZC5kZWYuYWJvcnQsXG4gICAgICAgICAgICAvLyBwYXJhbXM6IGluc3QuX3pvZC5kZWYucGFyYW1zLFxuICAgICAgICB9O1xuICAgICAgICBpZiAoaW5zdC5fem9kLmRlZi5wYXJhbXMpXG4gICAgICAgICAgICBfaXNzLnBhcmFtcyA9IGluc3QuX3pvZC5kZWYucGFyYW1zO1xuICAgICAgICBwYXlsb2FkLmlzc3Vlcy5wdXNoKHV0aWwuaXNzdWUoX2lzcykpO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/core/schemas.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/core/to-json-schema.js":
|
||
/*!****************************************************!*\
|
||
!*** ./node_modules/zod/v4/core/to-json-schema.js ***!
|
||
\****************************************************/
|
||
/***/ ((__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 */ createStandardJSONSchemaMethod: () => (/* binding */ createStandardJSONSchemaMethod),\n/* harmony export */ createToJSONSchemaMethod: () => (/* binding */ createToJSONSchemaMethod),\n/* harmony export */ extractDefs: () => (/* binding */ extractDefs),\n/* harmony export */ finalize: () => (/* binding */ finalize),\n/* harmony export */ initializeContext: () => (/* binding */ initializeContext),\n/* harmony export */ process: () => (/* binding */ process)\n/* harmony export */ });\n/* harmony import */ var _registries_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./registries.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/registries.js\");\n\n// function initializeContext<T extends schemas.$ZodType>(inputs: JSONSchemaGeneratorParams<T>): ToJSONSchemaContext<T> {\n// return {\n// processor: inputs.processor,\n// metadataRegistry: inputs.metadata ?? globalRegistry,\n// target: inputs.target ?? \"draft-2020-12\",\n// unrepresentable: inputs.unrepresentable ?? \"throw\",\n// };\n// }\nfunction initializeContext(params) {\n // Normalize target: convert old non-hyphenated versions to hyphenated versions\n let target = params?.target ?? \"draft-2020-12\";\n if (target === \"draft-4\")\n target = \"draft-04\";\n if (target === \"draft-7\")\n target = \"draft-07\";\n return {\n processors: params.processors ?? {},\n metadataRegistry: params?.metadata ?? _registries_js__WEBPACK_IMPORTED_MODULE_0__.globalRegistry,\n target,\n unrepresentable: params?.unrepresentable ?? \"throw\",\n override: params?.override ?? (() => { }),\n io: params?.io ?? \"output\",\n counter: 0,\n seen: new Map(),\n cycles: params?.cycles ?? \"ref\",\n reused: params?.reused ?? \"inline\",\n external: params?.external ?? undefined,\n };\n}\nfunction process(schema, ctx, _params = { path: [], schemaPath: [] }) {\n var _a;\n const def = schema._zod.def;\n // check for schema in seens\n const seen = ctx.seen.get(schema);\n if (seen) {\n seen.count++;\n // check if cycle\n const isCycle = _params.schemaPath.includes(schema);\n if (isCycle) {\n seen.cycle = _params.path;\n }\n return seen.schema;\n }\n // initialize\n const result = { schema: {}, count: 1, cycle: undefined, path: _params.path };\n ctx.seen.set(schema, result);\n // custom method overrides default behavior\n const overrideSchema = schema._zod.toJSONSchema?.();\n if (overrideSchema) {\n result.schema = overrideSchema;\n }\n else {\n const params = {\n ..._params,\n schemaPath: [..._params.schemaPath, schema],\n path: _params.path,\n };\n if (schema._zod.processJSONSchema) {\n schema._zod.processJSONSchema(ctx, result.schema, params);\n }\n else {\n const _json = result.schema;\n const processor = ctx.processors[def.type];\n if (!processor) {\n throw new Error(`[toJSONSchema]: Non-representable type encountered: ${def.type}`);\n }\n processor(schema, ctx, _json, params);\n }\n const parent = schema._zod.parent;\n if (parent) {\n // Also set ref if processor didn't (for inheritance)\n if (!result.ref)\n result.ref = parent;\n process(parent, ctx, params);\n ctx.seen.get(parent).isParent = true;\n }\n }\n // metadata\n const meta = ctx.metadataRegistry.get(schema);\n if (meta)\n Object.assign(result.schema, meta);\n if (ctx.io === \"input\" && isTransforming(schema)) {\n // examples/defaults only apply to output type of pipe\n delete result.schema.examples;\n delete result.schema.default;\n }\n // set prefault as default\n if (ctx.io === \"input\" && \"_prefault\" in result.schema)\n (_a = result.schema).default ?? (_a.default = result.schema._prefault);\n delete result.schema._prefault;\n // pulling fresh from ctx.seen in case it was overwritten\n const _result = ctx.seen.get(schema);\n return _result.schema;\n}\nfunction extractDefs(ctx, schema\n// params: EmitParams\n) {\n // iterate over seen map;\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // Track ids to detect duplicates across different schemas\n const idToSchema = new Map();\n for (const entry of ctx.seen.entries()) {\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n const existing = idToSchema.get(id);\n if (existing && existing !== entry[0]) {\n throw new Error(`Duplicate schema id \"${id}\" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);\n }\n idToSchema.set(id, entry[0]);\n }\n }\n // returns a ref to the schema\n // defId will be empty if the ref points to an external schema (or #)\n const makeURI = (entry) => {\n // comparing the seen objects because sometimes\n // multiple schemas map to the same seen object.\n // e.g. lazy\n // external is configured\n const defsSegment = ctx.target === \"draft-2020-12\" ? \"$defs\" : \"definitions\";\n if (ctx.external) {\n const externalId = ctx.external.registry.get(entry[0])?.id; // ?? \"__shared\";// `__schema${ctx.counter++}`;\n // check if schema is in the external registry\n const uriGenerator = ctx.external.uri ?? ((id) => id);\n if (externalId) {\n return { ref: uriGenerator(externalId) };\n }\n // otherwise, add to __shared\n const id = entry[1].defId ?? entry[1].schema.id ?? `schema${ctx.counter++}`;\n entry[1].defId = id; // set defId so it will be reused if needed\n return { defId: id, ref: `${uriGenerator(\"__shared\")}#/${defsSegment}/${id}` };\n }\n if (entry[1] === root) {\n return { ref: \"#\" };\n }\n // self-contained schema\n const uriPrefix = `#`;\n const defUriPrefix = `${uriPrefix}/${defsSegment}/`;\n const defId = entry[1].schema.id ?? `__schema${ctx.counter++}`;\n return { defId, ref: defUriPrefix + defId };\n };\n // stored cached version in `def` property\n // remove all properties, set $ref\n const extractToDef = (entry) => {\n // if the schema is already a reference, do not extract it\n if (entry[1].schema.$ref) {\n return;\n }\n const seen = entry[1];\n const { ref, defId } = makeURI(entry);\n seen.def = { ...seen.schema };\n // defId won't be set if the schema is a reference to an external schema\n // or if the schema is the root schema\n if (defId)\n seen.defId = defId;\n // wipe away all properties except $ref\n const schema = seen.schema;\n for (const key in schema) {\n delete schema[key];\n }\n schema.$ref = ref;\n };\n // throw on cycles\n // break cycles\n if (ctx.cycles === \"throw\") {\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.cycle) {\n throw new Error(\"Cycle detected: \" +\n `#/${seen.cycle?.join(\"/\")}/<root>` +\n '\\n\\nSet the `cycles` parameter to `\"ref\"` to resolve cyclical schemas with defs.');\n }\n }\n }\n // extract schemas into $defs\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n // convert root schema to # $ref\n if (schema === entry[0]) {\n extractToDef(entry); // this has special handling for the root schema\n continue;\n }\n // extract schemas that are in the external registry\n if (ctx.external) {\n const ext = ctx.external.registry.get(entry[0])?.id;\n if (schema !== entry[0] && ext) {\n extractToDef(entry);\n continue;\n }\n }\n // extract schemas with `id` meta\n const id = ctx.metadataRegistry.get(entry[0])?.id;\n if (id) {\n extractToDef(entry);\n continue;\n }\n // break cycles\n if (seen.cycle) {\n // any\n extractToDef(entry);\n continue;\n }\n // extract reused schemas\n if (seen.count > 1) {\n if (ctx.reused === \"ref\") {\n extractToDef(entry);\n // biome-ignore lint:\n continue;\n }\n }\n }\n}\nfunction finalize(ctx, schema) {\n const root = ctx.seen.get(schema);\n if (!root)\n throw new Error(\"Unprocessed schema. This is a bug in Zod.\");\n // flatten refs - inherit properties from parent schemas\n const flattenRef = (zodSchema) => {\n const seen = ctx.seen.get(zodSchema);\n // already processed\n if (seen.ref === null)\n return;\n const schema = seen.def ?? seen.schema;\n const _cached = { ...schema };\n const ref = seen.ref;\n seen.ref = null; // prevent infinite recursion\n if (ref) {\n flattenRef(ref);\n const refSeen = ctx.seen.get(ref);\n const refSchema = refSeen.schema;\n // merge referenced schema into current\n if (refSchema.$ref && (ctx.target === \"draft-07\" || ctx.target === \"draft-04\" || ctx.target === \"openapi-3.0\")) {\n // older drafts can't combine $ref with other properties\n schema.allOf = schema.allOf ?? [];\n schema.allOf.push(refSchema);\n }\n else {\n Object.assign(schema, refSchema);\n }\n // restore child's own properties (child wins)\n Object.assign(schema, _cached);\n const isParentRef = zodSchema._zod.parent === ref;\n // For parent chain, child is a refinement - remove parent-only properties\n if (isParentRef) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (!(key in _cached)) {\n delete schema[key];\n }\n }\n }\n // When ref was extracted to $defs, remove properties that match the definition\n if (refSchema.$ref && refSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in refSeen.def && JSON.stringify(schema[key]) === JSON.stringify(refSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n // If parent was extracted (has $ref), propagate $ref to this schema\n // This handles cases like: readonly().meta({id}).describe()\n // where processor sets ref to innerType but parent should be referenced\n const parent = zodSchema._zod.parent;\n if (parent && parent !== ref) {\n // Ensure parent is processed first so its def has inherited properties\n flattenRef(parent);\n const parentSeen = ctx.seen.get(parent);\n if (parentSeen?.schema.$ref) {\n schema.$ref = parentSeen.schema.$ref;\n // De-duplicate with parent's definition\n if (parentSeen.def) {\n for (const key in schema) {\n if (key === \"$ref\" || key === \"allOf\")\n continue;\n if (key in parentSeen.def && JSON.stringify(schema[key]) === JSON.stringify(parentSeen.def[key])) {\n delete schema[key];\n }\n }\n }\n }\n }\n // execute overrides\n ctx.override({\n zodSchema: zodSchema,\n jsonSchema: schema,\n path: seen.path ?? [],\n });\n };\n for (const entry of [...ctx.seen.entries()].reverse()) {\n flattenRef(entry[0]);\n }\n const result = {};\n if (ctx.target === \"draft-2020-12\") {\n result.$schema = \"https://json-schema.org/draft/2020-12/schema\";\n }\n else if (ctx.target === \"draft-07\") {\n result.$schema = \"http://json-schema.org/draft-07/schema#\";\n }\n else if (ctx.target === \"draft-04\") {\n result.$schema = \"http://json-schema.org/draft-04/schema#\";\n }\n else if (ctx.target === \"openapi-3.0\") {\n // OpenAPI 3.0 schema objects should not include a $schema property\n }\n else {\n // Arbitrary string values are allowed but won't have a $schema property set\n }\n if (ctx.external?.uri) {\n const id = ctx.external.registry.get(schema)?.id;\n if (!id)\n throw new Error(\"Schema is missing an `id` property\");\n result.$id = ctx.external.uri(id);\n }\n Object.assign(result, root.def ?? root.schema);\n // The `id` in `.meta()` is a Zod-specific registration tag used to extract\n // schemas into $defs — it is not user-facing JSON Schema metadata. Strip it\n // from the output body where it would otherwise leak. The id is preserved\n // implicitly via the $defs key (and via $ref paths).\n const rootMetaId = ctx.metadataRegistry.get(schema)?.id;\n if (rootMetaId !== undefined && result.id === rootMetaId)\n delete result.id;\n // build defs object\n const defs = ctx.external?.defs ?? {};\n for (const entry of ctx.seen.entries()) {\n const seen = entry[1];\n if (seen.def && seen.defId) {\n if (seen.def.id === seen.defId)\n delete seen.def.id;\n defs[seen.defId] = seen.def;\n }\n }\n // set definitions in result\n if (ctx.external) {\n }\n else {\n if (Object.keys(defs).length > 0) {\n if (ctx.target === \"draft-2020-12\") {\n result.$defs = defs;\n }\n else {\n result.definitions = defs;\n }\n }\n }\n try {\n // this \"finalizes\" this schema and ensures all cycles are removed\n // each call to finalize() is functionally independent\n // though the seen map is shared\n const finalized = JSON.parse(JSON.stringify(result));\n Object.defineProperty(finalized, \"~standard\", {\n value: {\n ...schema[\"~standard\"],\n jsonSchema: {\n input: createStandardJSONSchemaMethod(schema, \"input\", ctx.processors),\n output: createStandardJSONSchemaMethod(schema, \"output\", ctx.processors),\n },\n },\n enumerable: false,\n writable: false,\n });\n return finalized;\n }\n catch (_err) {\n throw new Error(\"Error converting schema to JSON.\");\n }\n}\nfunction isTransforming(_schema, _ctx) {\n const ctx = _ctx ?? { seen: new Set() };\n if (ctx.seen.has(_schema))\n return false;\n ctx.seen.add(_schema);\n const def = _schema._zod.def;\n if (def.type === \"transform\")\n return true;\n if (def.type === \"array\")\n return isTransforming(def.element, ctx);\n if (def.type === \"set\")\n return isTransforming(def.valueType, ctx);\n if (def.type === \"lazy\")\n return isTransforming(def.getter(), ctx);\n if (def.type === \"promise\" ||\n def.type === \"optional\" ||\n def.type === \"nonoptional\" ||\n def.type === \"nullable\" ||\n def.type === \"readonly\" ||\n def.type === \"default\" ||\n def.type === \"prefault\") {\n return isTransforming(def.innerType, ctx);\n }\n if (def.type === \"intersection\") {\n return isTransforming(def.left, ctx) || isTransforming(def.right, ctx);\n }\n if (def.type === \"record\" || def.type === \"map\") {\n return isTransforming(def.keyType, ctx) || isTransforming(def.valueType, ctx);\n }\n if (def.type === \"pipe\") {\n if (_schema._zod.traits.has(\"$ZodCodec\"))\n return true;\n return isTransforming(def.in, ctx) || isTransforming(def.out, ctx);\n }\n if (def.type === \"object\") {\n for (const key in def.shape) {\n if (isTransforming(def.shape[key], ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"union\") {\n for (const option of def.options) {\n if (isTransforming(option, ctx))\n return true;\n }\n return false;\n }\n if (def.type === \"tuple\") {\n for (const item of def.items) {\n if (isTransforming(item, ctx))\n return true;\n }\n if (def.rest && isTransforming(def.rest, ctx))\n return true;\n return false;\n }\n return false;\n}\n/**\n * Creates a toJSONSchema method for a schema instance.\n * This encapsulates the logic of initializing context, processing, extracting defs, and finalizing.\n */\nconst createToJSONSchemaMethod = (schema, processors = {}) => (params) => {\n const ctx = initializeContext({ ...params, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\nconst createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params) => {\n const { libraryOptions, target } = params ?? {};\n const ctx = initializeContext({ ...(libraryOptions ?? {}), target, io, processors });\n process(schema, ctx);\n extractDefs(ctx, schema);\n return finalize(ctx, schema);\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS90by1qc29uLXNjaGVtYS5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQWlEO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsMkNBQTJDO0FBQzNDLDhDQUE4QywwREFBYztBQUM1RDtBQUNBO0FBQ0EsZ0RBQWdEO0FBQ2hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTywwQ0FBMEMsMEJBQTBCO0FBQzNFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUIsVUFBVTtBQUMvQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHVGQUF1RixTQUFTO0FBQ2hHO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0RBQXdELEdBQUc7QUFDM0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx3RUFBd0UsaUJBQWlCLGNBQWMsY0FBYztBQUNySDtBQUNBO0FBQ0E7QUFDQSx5QkFBeUI7QUFDekI7QUFDQTtBQUNBLHdFQUF3RSxjQUFjO0FBQ3RG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QUF5QjtBQUNyQyxvQ0FBb0Msd0JBQXdCLDJCQUEyQjtBQUN2RjtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS90by1qc29uLXNjaGVtYS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnbG9iYWxSZWdpc3RyeSB9IGZyb20gXCIuL3JlZ2lzdHJpZXMuanNcIjtcbi8vIGZ1bmN0aW9uIGluaXRpYWxpemVDb250ZXh0PFQgZXh0ZW5kcyBzY2hlbWFzLiRab2RUeXBlPihpbnB1dHM6IEpTT05TY2hlbWFHZW5lcmF0b3JQYXJhbXM8VD4pOiBUb0pTT05TY2hlbWFDb250ZXh0PFQ+IHtcbi8vICAgcmV0dXJuIHtcbi8vICAgICBwcm9jZXNzb3I6IGlucHV0cy5wcm9jZXNzb3IsXG4vLyAgICAgbWV0YWRhdGFSZWdpc3RyeTogaW5wdXRzLm1ldGFkYXRhID8/IGdsb2JhbFJlZ2lzdHJ5LFxuLy8gICAgIHRhcmdldDogaW5wdXRzLnRhcmdldCA/PyBcImRyYWZ0LTIwMjAtMTJcIixcbi8vICAgICB1bnJlcHJlc2VudGFibGU6IGlucHV0cy51bnJlcHJlc2VudGFibGUgPz8gXCJ0aHJvd1wiLFxuLy8gICB9O1xuLy8gfVxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVDb250ZXh0KHBhcmFtcykge1xuICAgIC8vIE5vcm1hbGl6ZSB0YXJnZXQ6IGNvbnZlcnQgb2xkIG5vbi1oeXBoZW5hdGVkIHZlcnNpb25zIHRvIGh5cGhlbmF0ZWQgdmVyc2lvbnNcbiAgICBsZXQgdGFyZ2V0ID0gcGFyYW1zPy50YXJnZXQgPz8gXCJkcmFmdC0yMDIwLTEyXCI7XG4gICAgaWYgKHRhcmdldCA9PT0gXCJkcmFmdC00XCIpXG4gICAgICAgIHRhcmdldCA9IFwiZHJhZnQtMDRcIjtcbiAgICBpZiAodGFyZ2V0ID09PSBcImRyYWZ0LTdcIilcbiAgICAgICAgdGFyZ2V0ID0gXCJkcmFmdC0wN1wiO1xuICAgIHJldHVybiB7XG4gICAgICAgIHByb2Nlc3NvcnM6IHBhcmFtcy5wcm9jZXNzb3JzID8/IHt9LFxuICAgICAgICBtZXRhZGF0YVJlZ2lzdHJ5OiBwYXJhbXM/Lm1ldGFkYXRhID8/IGdsb2JhbFJlZ2lzdHJ5LFxuICAgICAgICB0YXJnZXQsXG4gICAgICAgIHVucmVwcmVzZW50YWJsZTogcGFyYW1zPy51bnJlcHJlc2VudGFibGUgPz8gXCJ0aHJvd1wiLFxuICAgICAgICBvdmVycmlkZTogcGFyYW1zPy5vdmVycmlkZSA/PyAoKCkgPT4geyB9KSxcbiAgICAgICAgaW86IHBhcmFtcz8uaW8gPz8gXCJvdXRwdXRcIixcbiAgICAgICAgY291bnRlcjogMCxcbiAgICAgICAgc2VlbjogbmV3IE1hcCgpLFxuICAgICAgICBjeWNsZXM6IHBhcmFtcz8uY3ljbGVzID8/IFwicmVmXCIsXG4gICAgICAgIHJldXNlZDogcGFyYW1zPy5yZXVzZWQgPz8gXCJpbmxpbmVcIixcbiAgICAgICAgZXh0ZXJuYWw6IHBhcmFtcz8uZXh0ZXJuYWwgPz8gdW5kZWZpbmVkLFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gcHJvY2VzcyhzY2hlbWEsIGN0eCwgX3BhcmFtcyA9IHsgcGF0aDogW10sIHNjaGVtYVBhdGg6IFtdIH0pIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgZGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIC8vIGNoZWNrIGZvciBzY2hlbWEgaW4gc2VlbnNcbiAgICBjb25zdCBzZWVuID0gY3R4LnNlZW4uZ2V0KHNjaGVtYSk7XG4gICAgaWYgKHNlZW4pIHtcbiAgICAgICAgc2Vlbi5jb3VudCsrO1xuICAgICAgICAvLyBjaGVjayBpZiBjeWNsZVxuICAgICAgICBjb25zdCBpc0N5Y2xlID0gX3BhcmFtcy5zY2hlbWFQYXRoLmluY2x1ZGVzKHNjaGVtYSk7XG4gICAgICAgIGlmIChpc0N5Y2xlKSB7XG4gICAgICAgICAgICBzZWVuLmN5Y2xlID0gX3BhcmFtcy5wYXRoO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZWVuLnNjaGVtYTtcbiAgICB9XG4gICAgLy8gaW5pdGlhbGl6ZVxuICAgIGNvbnN0IHJlc3VsdCA9IHsgc2NoZW1hOiB7fSwgY291bnQ6IDEsIGN5Y2xlOiB1bmRlZmluZWQsIHBhdGg6IF9wYXJhbXMucGF0aCB9O1xuICAgIGN0eC5zZWVuLnNldChzY2hlbWEsIHJlc3VsdCk7XG4gICAgLy8gY3VzdG9tIG1ldGhvZCBvdmVycmlkZXMgZGVmYXVsdCBiZWhhdmlvclxuICAgIGNvbnN0IG92ZXJyaWRlU2NoZW1hID0gc2NoZW1hLl96b2QudG9KU09OU2NoZW1hPy4oKTtcbiAgICBpZiAob3ZlcnJpZGVTY2hlbWEpIHtcbiAgICAgICAgcmVzdWx0LnNjaGVtYSA9IG92ZXJyaWRlU2NoZW1hO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICAgICAgLi4uX3BhcmFtcyxcbiAgICAgICAgICAgIHNjaGVtYVBhdGg6IFsuLi5fcGFyYW1zLnNjaGVtYVBhdGgsIHNjaGVtYV0sXG4gICAgICAgICAgICBwYXRoOiBfcGFyYW1zLnBhdGgsXG4gICAgICAgIH07XG4gICAgICAgIGlmIChzY2hlbWEuX3pvZC5wcm9jZXNzSlNPTlNjaGVtYSkge1xuICAgICAgICAgICAgc2NoZW1hLl96b2QucHJvY2Vzc0pTT05TY2hlbWEoY3R4LCByZXN1bHQuc2NoZW1hLCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgX2pzb24gPSByZXN1bHQuc2NoZW1hO1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc29yID0gY3R4LnByb2Nlc3NvcnNbZGVmLnR5cGVdO1xuICAgICAgICAgICAgaWYgKCFwcm9jZXNzb3IpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFt0b0pTT05TY2hlbWFdOiBOb24tcmVwcmVzZW50YWJsZSB0eXBlIGVuY291bnRlcmVkOiAke2RlZi50eXBlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvY2Vzc29yKHNjaGVtYSwgY3R4LCBfanNvbiwgcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJlbnQgPSBzY2hlbWEuX3pvZC5wYXJlbnQ7XG4gICAgICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgICAgIC8vIEFsc28gc2V0IHJlZiBpZiBwcm9jZXNzb3IgZGlkbid0IChmb3IgaW5oZXJpdGFuY2UpXG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5yZWYpXG4gICAgICAgICAgICAgICAgcmVzdWx0LnJlZiA9IHBhcmVudDtcbiAgICAgICAgICAgIHByb2Nlc3MocGFyZW50LCBjdHgsIHBhcmFtcyk7XG4gICAgICAgICAgICBjdHguc2Vlbi5nZXQocGFyZW50KS5pc1BhcmVudCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gbWV0YWRhdGFcbiAgICBjb25zdCBtZXRhID0gY3R4Lm1ldGFkYXRhUmVnaXN0cnkuZ2V0KHNjaGVtYSk7XG4gICAgaWYgKG1ldGEpXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LnNjaGVtYSwgbWV0YSk7XG4gICAgaWYgKGN0eC5pbyA9PT0gXCJpbnB1dFwiICYmIGlzVHJhbnNmb3JtaW5nKHNjaGVtYSkpIHtcbiAgICAgICAgLy8gZXhhbXBsZXMvZGVmYXVsdHMgb25seSBhcHBseSB0byBvdXRwdXQgdHlwZSBvZiBwaXBlXG4gICAgICAgIGRlbGV0ZSByZXN1bHQuc2NoZW1hLmV4YW1wbGVzO1xuICAgICAgICBkZWxldGUgcmVzdWx0LnNjaGVtYS5kZWZhdWx0O1xuICAgIH1cbiAgICAvLyBzZXQgcHJlZmF1bHQgYXMgZGVmYXVsdFxuICAgIGlmIChjdHguaW8gPT09IFwiaW5wdXRcIiAmJiBcIl9wcmVmYXVsdFwiIGluIHJlc3VsdC5zY2hlbWEpXG4gICAgICAgIChfYSA9IHJlc3VsdC5zY2hlbWEpLmRlZmF1bHQgPz8gKF9hLmRlZmF1bHQgPSByZXN1bHQuc2NoZW1hLl9wcmVmYXVsdCk7XG4gICAgZGVsZXRlIHJlc3VsdC5zY2hlbWEuX3ByZWZhdWx0O1xuICAgIC8vIHB1bGxpbmcgZnJlc2ggZnJvbSBjdHguc2VlbiBpbiBjYXNlIGl0IHdhcyBvdmVyd3JpdHRlblxuICAgIGNvbnN0IF9yZXN1bHQgPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICByZXR1cm4gX3Jlc3VsdC5zY2hlbWE7XG59XG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdERlZnMoY3R4LCBzY2hlbWFcbi8vIHBhcmFtczogRW1pdFBhcmFtc1xuKSB7XG4gICAgLy8gaXRlcmF0ZSBvdmVyIHNlZW4gbWFwO1xuICAgIGNvbnN0IHJvb3QgPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBpZiAoIXJvb3QpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucHJvY2Vzc2VkIHNjaGVtYS4gVGhpcyBpcyBhIGJ1ZyBpbiBab2QuXCIpO1xuICAgIC8vIFRyYWNrIGlkcyB0byBkZXRlY3QgZHVwbGljYXRlcyBhY3Jvc3MgZGlmZmVyZW50IHNjaGVtYXNcbiAgICBjb25zdCBpZFRvU2NoZW1hID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgY3R4LnNlZW4uZW50cmllcygpKSB7XG4gICAgICAgIGNvbnN0IGlkID0gY3R4Lm1ldGFkYXRhUmVnaXN0cnkuZ2V0KGVudHJ5WzBdKT8uaWQ7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmcgPSBpZFRvU2NoZW1hLmdldChpZCk7XG4gICAgICAgICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmcgIT09IGVudHJ5WzBdKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgc2NoZW1hIGlkIFwiJHtpZH1cIiBkZXRlY3RlZCBkdXJpbmcgSlNPTiBTY2hlbWEgY29udmVyc2lvbi4gVHdvIGRpZmZlcmVudCBzY2hlbWFzIGNhbm5vdCBzaGFyZSB0aGUgc2FtZSBpZCB3aGVuIGNvbnZlcnRlZCB0b2dldGhlci5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlkVG9TY2hlbWEuc2V0KGlkLCBlbnRyeVswXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gcmV0dXJucyBhIHJlZiB0byB0aGUgc2NoZW1hXG4gICAgLy8gZGVmSWQgd2lsbCBiZSBlbXB0eSBpZiB0aGUgcmVmIHBvaW50cyB0byBhbiBleHRlcm5hbCBzY2hlbWEgKG9yICMpXG4gICAgY29uc3QgbWFrZVVSSSA9IChlbnRyeSkgPT4ge1xuICAgICAgICAvLyBjb21wYXJpbmcgdGhlIHNlZW4gb2JqZWN0cyBiZWNhdXNlIHNvbWV0aW1lc1xuICAgICAgICAvLyBtdWx0aXBsZSBzY2hlbWFzIG1hcCB0byB0aGUgc2FtZSBzZWVuIG9iamVjdC5cbiAgICAgICAgLy8gZS5nLiBsYXp5XG4gICAgICAgIC8vIGV4dGVybmFsIGlzIGNvbmZpZ3VyZWRcbiAgICAgICAgY29uc3QgZGVmc1NlZ21lbnQgPSBjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTIwMjAtMTJcIiA/IFwiJGRlZnNcIiA6IFwiZGVmaW5pdGlvbnNcIjtcbiAgICAgICAgaWYgKGN0eC5leHRlcm5hbCkge1xuICAgICAgICAgICAgY29uc3QgZXh0ZXJuYWxJZCA9IGN0eC5leHRlcm5hbC5yZWdpc3RyeS5nZXQoZW50cnlbMF0pPy5pZDsgLy8gPz8gXCJfX3NoYXJlZFwiOy8vIGBfX3NjaGVtYSR7Y3R4LmNvdW50ZXIrK31gO1xuICAgICAgICAgICAgLy8gY2hlY2sgaWYgc2NoZW1hIGlzIGluIHRoZSBleHRlcm5hbCByZWdpc3RyeVxuICAgICAgICAgICAgY29uc3QgdXJpR2VuZXJhdG9yID0gY3R4LmV4dGVybmFsLnVyaSA/PyAoKGlkKSA9PiBpZCk7XG4gICAgICAgICAgICBpZiAoZXh0ZXJuYWxJZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHJlZjogdXJpR2VuZXJhdG9yKGV4dGVybmFsSWQpIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBvdGhlcndpc2UsIGFkZCB0byBfX3NoYXJlZFxuICAgICAgICAgICAgY29uc3QgaWQgPSBlbnRyeVsxXS5kZWZJZCA/PyBlbnRyeVsxXS5zY2hlbWEuaWQgPz8gYHNjaGVtYSR7Y3R4LmNvdW50ZXIrK31gO1xuICAgICAgICAgICAgZW50cnlbMV0uZGVmSWQgPSBpZDsgLy8gc2V0IGRlZklkIHNvIGl0IHdpbGwgYmUgcmV1c2VkIGlmIG5lZWRlZFxuICAgICAgICAgICAgcmV0dXJuIHsgZGVmSWQ6IGlkLCByZWY6IGAke3VyaUdlbmVyYXRvcihcIl9fc2hhcmVkXCIpfSMvJHtkZWZzU2VnbWVudH0vJHtpZH1gIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVudHJ5WzFdID09PSByb290KSB7XG4gICAgICAgICAgICByZXR1cm4geyByZWY6IFwiI1wiIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2VsZi1jb250YWluZWQgc2NoZW1hXG4gICAgICAgIGNvbnN0IHVyaVByZWZpeCA9IGAjYDtcbiAgICAgICAgY29uc3QgZGVmVXJpUHJlZml4ID0gYCR7dXJpUHJlZml4fS8ke2RlZnNTZWdtZW50fS9gO1xuICAgICAgICBjb25zdCBkZWZJZCA9IGVudHJ5WzFdLnNjaGVtYS5pZCA/PyBgX19zY2hlbWEke2N0eC5jb3VudGVyKyt9YDtcbiAgICAgICAgcmV0dXJuIHsgZGVmSWQsIHJlZjogZGVmVXJpUHJlZml4ICsgZGVmSWQgfTtcbiAgICB9O1xuICAgIC8vIHN0b3JlZCBjYWNoZWQgdmVyc2lvbiBpbiBgZGVmYCBwcm9wZXJ0eVxuICAgIC8vIHJlbW92ZSBhbGwgcHJvcGVydGllcywgc2V0ICRyZWZcbiAgICBjb25zdCBleHRyYWN0VG9EZWYgPSAoZW50cnkpID0+IHtcbiAgICAgICAgLy8gaWYgdGhlIHNjaGVtYSBpcyBhbHJlYWR5IGEgcmVmZXJlbmNlLCBkbyBub3QgZXh0cmFjdCBpdFxuICAgICAgICBpZiAoZW50cnlbMV0uc2NoZW1hLiRyZWYpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWVuID0gZW50cnlbMV07XG4gICAgICAgIGNvbnN0IHsgcmVmLCBkZWZJZCB9ID0gbWFrZVVSSShlbnRyeSk7XG4gICAgICAgIHNlZW4uZGVmID0geyAuLi5zZWVuLnNjaGVtYSB9O1xuICAgICAgICAvLyBkZWZJZCB3b24ndCBiZSBzZXQgaWYgdGhlIHNjaGVtYSBpcyBhIHJlZmVyZW5jZSB0byBhbiBleHRlcm5hbCBzY2hlbWFcbiAgICAgICAgLy8gb3IgaWYgdGhlIHNjaGVtYSBpcyB0aGUgcm9vdCBzY2hlbWFcbiAgICAgICAgaWYgKGRlZklkKVxuICAgICAgICAgICAgc2Vlbi5kZWZJZCA9IGRlZklkO1xuICAgICAgICAvLyB3aXBlIGF3YXkgYWxsIHByb3BlcnRpZXMgZXhjZXB0ICRyZWZcbiAgICAgICAgY29uc3Qgc2NoZW1hID0gc2Vlbi5zY2hlbWE7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIHNjaGVtYSkge1xuICAgICAgICAgICAgZGVsZXRlIHNjaGVtYVtrZXldO1xuICAgICAgICB9XG4gICAgICAgIHNjaGVtYS4kcmVmID0gcmVmO1xuICAgIH07XG4gICAgLy8gdGhyb3cgb24gY3ljbGVzXG4gICAgLy8gYnJlYWsgY3ljbGVzXG4gICAgaWYgKGN0eC5jeWNsZXMgPT09IFwidGhyb3dcIikge1xuICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGN0eC5zZWVuLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3Qgc2VlbiA9IGVudHJ5WzFdO1xuICAgICAgICAgICAgaWYgKHNlZW4uY3ljbGUpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDeWNsZSBkZXRlY3RlZDogXCIgK1xuICAgICAgICAgICAgICAgICAgICBgIy8ke3NlZW4uY3ljbGU/LmpvaW4oXCIvXCIpfS88cm9vdD5gICtcbiAgICAgICAgICAgICAgICAgICAgJ1xcblxcblNldCB0aGUgYGN5Y2xlc2AgcGFyYW1ldGVyIHRvIGBcInJlZlwiYCB0byByZXNvbHZlIGN5Y2xpY2FsIHNjaGVtYXMgd2l0aCBkZWZzLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGV4dHJhY3Qgc2NoZW1hcyBpbnRvICRkZWZzXG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBjdHguc2Vlbi5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3Qgc2VlbiA9IGVudHJ5WzFdO1xuICAgICAgICAvLyBjb252ZXJ0IHJvb3Qgc2NoZW1hIHRvICMgJHJlZlxuICAgICAgICBpZiAoc2NoZW1hID09PSBlbnRyeVswXSkge1xuICAgICAgICAgICAgZXh0cmFjdFRvRGVmKGVudHJ5KTsgLy8gdGhpcyBoYXMgc3BlY2lhbCBoYW5kbGluZyBmb3IgdGhlIHJvb3Qgc2NoZW1hXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBleHRyYWN0IHNjaGVtYXMgdGhhdCBhcmUgaW4gdGhlIGV4dGVybmFsIHJlZ2lzdHJ5XG4gICAgICAgIGlmIChjdHguZXh0ZXJuYWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4dCA9IGN0eC5leHRlcm5hbC5yZWdpc3RyeS5nZXQoZW50cnlbMF0pPy5pZDtcbiAgICAgICAgICAgIGlmIChzY2hlbWEgIT09IGVudHJ5WzBdICYmIGV4dCkge1xuICAgICAgICAgICAgICAgIGV4dHJhY3RUb0RlZihlbnRyeSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXh0cmFjdCBzY2hlbWFzIHdpdGggYGlkYCBtZXRhXG4gICAgICAgIGNvbnN0IGlkID0gY3R4Lm1ldGFkYXRhUmVnaXN0cnkuZ2V0KGVudHJ5WzBdKT8uaWQ7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgZXh0cmFjdFRvRGVmKGVudHJ5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJyZWFrIGN5Y2xlc1xuICAgICAgICBpZiAoc2Vlbi5jeWNsZSkge1xuICAgICAgICAgICAgLy8gYW55XG4gICAgICAgICAgICBleHRyYWN0VG9EZWYoZW50cnkpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXh0cmFjdCByZXVzZWQgc2NoZW1hc1xuICAgICAgICBpZiAoc2Vlbi5jb3VudCA+IDEpIHtcbiAgICAgICAgICAgIGlmIChjdHgucmV1c2VkID09PSBcInJlZlwiKSB7XG4gICAgICAgICAgICAgICAgZXh0cmFjdFRvRGVmKGVudHJ5KTtcbiAgICAgICAgICAgICAgICAvLyBiaW9tZS1pZ25vcmUgbGludDpcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBmaW5hbGl6ZShjdHgsIHNjaGVtYSkge1xuICAgIGNvbnN0IHJvb3QgPSBjdHguc2Vlbi5nZXQoc2NoZW1hKTtcbiAgICBpZiAoIXJvb3QpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVucHJvY2Vzc2VkIHNjaGVtYS4gVGhpcyBpcyBhIGJ1ZyBpbiBab2QuXCIpO1xuICAgIC8vIGZsYXR0ZW4gcmVmcyAtIGluaGVyaXQgcHJvcGVydGllcyBmcm9tIHBhcmVudCBzY2hlbWFzXG4gICAgY29uc3QgZmxhdHRlblJlZiA9ICh6b2RTY2hlbWEpID0+IHtcbiAgICAgICAgY29uc3Qgc2VlbiA9IGN0eC5zZWVuLmdldCh6b2RTY2hlbWEpO1xuICAgICAgICAvLyBhbHJlYWR5IHByb2Nlc3NlZFxuICAgICAgICBpZiAoc2Vlbi5yZWYgPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHNjaGVtYSA9IHNlZW4uZGVmID8/IHNlZW4uc2NoZW1hO1xuICAgICAgICBjb25zdCBfY2FjaGVkID0geyAuLi5zY2hlbWEgfTtcbiAgICAgICAgY29uc3QgcmVmID0gc2Vlbi5yZWY7XG4gICAgICAgIHNlZW4ucmVmID0gbnVsbDsgLy8gcHJldmVudCBpbmZpbml0ZSByZWN1cnNpb25cbiAgICAgICAgaWYgKHJlZikge1xuICAgICAgICAgICAgZmxhdHRlblJlZihyZWYpO1xuICAgICAgICAgICAgY29uc3QgcmVmU2VlbiA9IGN0eC5zZWVuLmdldChyZWYpO1xuICAgICAgICAgICAgY29uc3QgcmVmU2NoZW1hID0gcmVmU2Vlbi5zY2hlbWE7XG4gICAgICAgICAgICAvLyBtZXJnZSByZWZlcmVuY2VkIHNjaGVtYSBpbnRvIGN1cnJlbnRcbiAgICAgICAgICAgIGlmIChyZWZTY2hlbWEuJHJlZiAmJiAoY3R4LnRhcmdldCA9PT0gXCJkcmFmdC0wN1wiIHx8IGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMDRcIiB8fCBjdHgudGFyZ2V0ID09PSBcIm9wZW5hcGktMy4wXCIpKSB7XG4gICAgICAgICAgICAgICAgLy8gb2xkZXIgZHJhZnRzIGNhbid0IGNvbWJpbmUgJHJlZiB3aXRoIG90aGVyIHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICBzY2hlbWEuYWxsT2YgPSBzY2hlbWEuYWxsT2YgPz8gW107XG4gICAgICAgICAgICAgICAgc2NoZW1hLmFsbE9mLnB1c2gocmVmU2NoZW1hKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCByZWZTY2hlbWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmVzdG9yZSBjaGlsZCdzIG93biBwcm9wZXJ0aWVzIChjaGlsZCB3aW5zKVxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIF9jYWNoZWQpO1xuICAgICAgICAgICAgY29uc3QgaXNQYXJlbnRSZWYgPSB6b2RTY2hlbWEuX3pvZC5wYXJlbnQgPT09IHJlZjtcbiAgICAgICAgICAgIC8vIEZvciBwYXJlbnQgY2hhaW4sIGNoaWxkIGlzIGEgcmVmaW5lbWVudCAtIHJlbW92ZSBwYXJlbnQtb25seSBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBpZiAoaXNQYXJlbnRSZWYpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gXCIkcmVmXCIgfHwga2V5ID09PSBcImFsbE9mXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIF9jYWNoZWQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2NoZW1hW2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBXaGVuIHJlZiB3YXMgZXh0cmFjdGVkIHRvICRkZWZzLCByZW1vdmUgcHJvcGVydGllcyB0aGF0IG1hdGNoIHRoZSBkZWZpbml0aW9uXG4gICAgICAgICAgICBpZiAocmVmU2NoZW1hLiRyZWYgJiYgcmVmU2Vlbi5kZWYpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gXCIkcmVmXCIgfHwga2V5ID09PSBcImFsbE9mXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiByZWZTZWVuLmRlZiAmJiBKU09OLnN0cmluZ2lmeShzY2hlbWFba2V5XSkgPT09IEpTT04uc3RyaW5naWZ5KHJlZlNlZW4uZGVmW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgc2NoZW1hW2tleV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgcGFyZW50IHdhcyBleHRyYWN0ZWQgKGhhcyAkcmVmKSwgcHJvcGFnYXRlICRyZWYgdG8gdGhpcyBzY2hlbWFcbiAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGNhc2VzIGxpa2U6IHJlYWRvbmx5KCkubWV0YSh7aWR9KS5kZXNjcmliZSgpXG4gICAgICAgIC8vIHdoZXJlIHByb2Nlc3NvciBzZXRzIHJlZiB0byBpbm5lclR5cGUgYnV0IHBhcmVudCBzaG91bGQgYmUgcmVmZXJlbmNlZFxuICAgICAgICBjb25zdCBwYXJlbnQgPSB6b2RTY2hlbWEuX3pvZC5wYXJlbnQ7XG4gICAgICAgIGlmIChwYXJlbnQgJiYgcGFyZW50ICE9PSByZWYpIHtcbiAgICAgICAgICAgIC8vIEVuc3VyZSBwYXJlbnQgaXMgcHJvY2Vzc2VkIGZpcnN0IHNvIGl0cyBkZWYgaGFzIGluaGVyaXRlZCBwcm9wZXJ0aWVzXG4gICAgICAgICAgICBmbGF0dGVuUmVmKHBhcmVudCk7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRTZWVuID0gY3R4LnNlZW4uZ2V0KHBhcmVudCk7XG4gICAgICAgICAgICBpZiAocGFyZW50U2Vlbj8uc2NoZW1hLiRyZWYpIHtcbiAgICAgICAgICAgICAgICBzY2hlbWEuJHJlZiA9IHBhcmVudFNlZW4uc2NoZW1hLiRyZWY7XG4gICAgICAgICAgICAgICAgLy8gRGUtZHVwbGljYXRlIHdpdGggcGFyZW50J3MgZGVmaW5pdGlvblxuICAgICAgICAgICAgICAgIGlmIChwYXJlbnRTZWVuLmRlZikge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXkgPT09IFwiJHJlZlwiIHx8IGtleSA9PT0gXCJhbGxPZlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGtleSBpbiBwYXJlbnRTZWVuLmRlZiAmJiBKU09OLnN0cmluZ2lmeShzY2hlbWFba2V5XSkgPT09IEpTT04uc3RyaW5naWZ5KHBhcmVudFNlZW4uZGVmW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNjaGVtYVtrZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGV4ZWN1dGUgb3ZlcnJpZGVzXG4gICAgICAgIGN0eC5vdmVycmlkZSh7XG4gICAgICAgICAgICB6b2RTY2hlbWE6IHpvZFNjaGVtYSxcbiAgICAgICAgICAgIGpzb25TY2hlbWE6IHNjaGVtYSxcbiAgICAgICAgICAgIHBhdGg6IHNlZW4ucGF0aCA/PyBbXSxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIFsuLi5jdHguc2Vlbi5lbnRyaWVzKCldLnJldmVyc2UoKSkge1xuICAgICAgICBmbGF0dGVuUmVmKGVudHJ5WzBdKTtcbiAgICB9XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgaWYgKGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiKSB7XG4gICAgICAgIHJlc3VsdC4kc2NoZW1hID0gXCJodHRwczovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC8yMDIwLTEyL3NjaGVtYVwiO1xuICAgIH1cbiAgICBlbHNlIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTA3XCIpIHtcbiAgICAgICAgcmVzdWx0LiRzY2hlbWEgPSBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hI1wiO1xuICAgIH1cbiAgICBlbHNlIGlmIChjdHgudGFyZ2V0ID09PSBcImRyYWZ0LTA0XCIpIHtcbiAgICAgICAgcmVzdWx0LiRzY2hlbWEgPSBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDQvc2NoZW1hI1wiO1xuICAgIH1cbiAgICBlbHNlIGlmIChjdHgudGFyZ2V0ID09PSBcIm9wZW5hcGktMy4wXCIpIHtcbiAgICAgICAgLy8gT3BlbkFQSSAzLjAgc2NoZW1hIG9iamVjdHMgc2hvdWxkIG5vdCBpbmNsdWRlIGEgJHNjaGVtYSBwcm9wZXJ0eVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgLy8gQXJiaXRyYXJ5IHN0cmluZyB2YWx1ZXMgYXJlIGFsbG93ZWQgYnV0IHdvbid0IGhhdmUgYSAkc2NoZW1hIHByb3BlcnR5IHNldFxuICAgIH1cbiAgICBpZiAoY3R4LmV4dGVybmFsPy51cmkpIHtcbiAgICAgICAgY29uc3QgaWQgPSBjdHguZXh0ZXJuYWwucmVnaXN0cnkuZ2V0KHNjaGVtYSk/LmlkO1xuICAgICAgICBpZiAoIWlkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU2NoZW1hIGlzIG1pc3NpbmcgYW4gYGlkYCBwcm9wZXJ0eVwiKTtcbiAgICAgICAgcmVzdWx0LiRpZCA9IGN0eC5leHRlcm5hbC51cmkoaWQpO1xuICAgIH1cbiAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgcm9vdC5kZWYgPz8gcm9vdC5zY2hlbWEpO1xuICAgIC8vIFRoZSBgaWRgIGluIGAubWV0YSgpYCBpcyBhIFpvZC1zcGVjaWZpYyByZWdpc3RyYXRpb24gdGFnIHVzZWQgdG8gZXh0cmFjdFxuICAgIC8vIHNjaGVtYXMgaW50byAkZGVmcyDigJQgaXQgaXMgbm90IHVzZXItZmFjaW5nIEpTT04gU2NoZW1hIG1ldGFkYXRhLiBTdHJpcCBpdFxuICAgIC8vIGZyb20gdGhlIG91dHB1dCBib2R5IHdoZXJlIGl0IHdvdWxkIG90aGVyd2lzZSBsZWFrLiBUaGUgaWQgaXMgcHJlc2VydmVkXG4gICAgLy8gaW1wbGljaXRseSB2aWEgdGhlICRkZWZzIGtleSAoYW5kIHZpYSAkcmVmIHBhdGhzKS5cbiAgICBjb25zdCByb290TWV0YUlkID0gY3R4Lm1ldGFkYXRhUmVnaXN0cnkuZ2V0KHNjaGVtYSk/LmlkO1xuICAgIGlmIChyb290TWV0YUlkICE9PSB1bmRlZmluZWQgJiYgcmVzdWx0LmlkID09PSByb290TWV0YUlkKVxuICAgICAgICBkZWxldGUgcmVzdWx0LmlkO1xuICAgIC8vIGJ1aWxkIGRlZnMgb2JqZWN0XG4gICAgY29uc3QgZGVmcyA9IGN0eC5leHRlcm5hbD8uZGVmcyA/PyB7fTtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGN0eC5zZWVuLmVudHJpZXMoKSkge1xuICAgICAgICBjb25zdCBzZWVuID0gZW50cnlbMV07XG4gICAgICAgIGlmIChzZWVuLmRlZiAmJiBzZWVuLmRlZklkKSB7XG4gICAgICAgICAgICBpZiAoc2Vlbi5kZWYuaWQgPT09IHNlZW4uZGVmSWQpXG4gICAgICAgICAgICAgICAgZGVsZXRlIHNlZW4uZGVmLmlkO1xuICAgICAgICAgICAgZGVmc1tzZWVuLmRlZklkXSA9IHNlZW4uZGVmO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIHNldCBkZWZpbml0aW9ucyBpbiByZXN1bHRcbiAgICBpZiAoY3R4LmV4dGVybmFsKSB7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZGVmcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKGN0eC50YXJnZXQgPT09IFwiZHJhZnQtMjAyMC0xMlwiKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LiRkZWZzID0gZGVmcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5kZWZpbml0aW9ucyA9IGRlZnM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gdGhpcyBcImZpbmFsaXplc1wiIHRoaXMgc2NoZW1hIGFuZCBlbnN1cmVzIGFsbCBjeWNsZXMgYXJlIHJlbW92ZWRcbiAgICAgICAgLy8gZWFjaCBjYWxsIHRvIGZpbmFsaXplKCkgaXMgZnVuY3Rpb25hbGx5IGluZGVwZW5kZW50XG4gICAgICAgIC8vIHRob3VnaCB0aGUgc2VlbiBtYXAgaXMgc2hhcmVkXG4gICAgICAgIGNvbnN0IGZpbmFsaXplZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocmVzdWx0KSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmaW5hbGl6ZWQsIFwifnN0YW5kYXJkXCIsIHtcbiAgICAgICAgICAgIHZhbHVlOiB7XG4gICAgICAgICAgICAgICAgLi4uc2NoZW1hW1wifnN0YW5kYXJkXCJdLFxuICAgICAgICAgICAgICAgIGpzb25TY2hlbWE6IHtcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQ6IGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZChzY2hlbWEsIFwiaW5wdXRcIiwgY3R4LnByb2Nlc3NvcnMpLFxuICAgICAgICAgICAgICAgICAgICBvdXRwdXQ6IGNyZWF0ZVN0YW5kYXJkSlNPTlNjaGVtYU1ldGhvZChzY2hlbWEsIFwib3V0cHV0XCIsIGN0eC5wcm9jZXNzb3JzKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgICAgd3JpdGFibGU6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZpbmFsaXplZDtcbiAgICB9XG4gICAgY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRXJyb3IgY29udmVydGluZyBzY2hlbWEgdG8gSlNPTi5cIik7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNUcmFuc2Zvcm1pbmcoX3NjaGVtYSwgX2N0eCkge1xuICAgIGNvbnN0IGN0eCA9IF9jdHggPz8geyBzZWVuOiBuZXcgU2V0KCkgfTtcbiAgICBpZiAoY3R4LnNlZW4uaGFzKF9zY2hlbWEpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgY3R4LnNlZW4uYWRkKF9zY2hlbWEpO1xuICAgIGNvbnN0IGRlZiA9IF9zY2hlbWEuX3pvZC5kZWY7XG4gICAgaWYgKGRlZi50eXBlID09PSBcInRyYW5zZm9ybVwiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZGVmLnR5cGUgPT09IFwiYXJyYXlcIilcbiAgICAgICAgcmV0dXJuIGlzVHJhbnNmb3JtaW5nKGRlZi5lbGVtZW50LCBjdHgpO1xuICAgIGlmIChkZWYudHlwZSA9PT0gXCJzZXRcIilcbiAgICAgICAgcmV0dXJuIGlzVHJhbnNmb3JtaW5nKGRlZi52YWx1ZVR5cGUsIGN0eCk7XG4gICAgaWYgKGRlZi50eXBlID09PSBcImxhenlcIilcbiAgICAgICAgcmV0dXJuIGlzVHJhbnNmb3JtaW5nKGRlZi5nZXR0ZXIoKSwgY3R4KTtcbiAgICBpZiAoZGVmLnR5cGUgPT09IFwicHJvbWlzZVwiIHx8XG4gICAgICAgIGRlZi50eXBlID09PSBcIm9wdGlvbmFsXCIgfHxcbiAgICAgICAgZGVmLnR5cGUgPT09IFwibm9ub3B0aW9uYWxcIiB8fFxuICAgICAgICBkZWYudHlwZSA9PT0gXCJudWxsYWJsZVwiIHx8XG4gICAgICAgIGRlZi50eXBlID09PSBcInJlYWRvbmx5XCIgfHxcbiAgICAgICAgZGVmLnR5cGUgPT09IFwiZGVmYXVsdFwiIHx8XG4gICAgICAgIGRlZi50eXBlID09PSBcInByZWZhdWx0XCIpIHtcbiAgICAgICAgcmV0dXJuIGlzVHJhbnNmb3JtaW5nKGRlZi5pbm5lclR5cGUsIGN0eCk7XG4gICAgfVxuICAgIGlmIChkZWYudHlwZSA9PT0gXCJpbnRlcnNlY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXNUcmFuc2Zvcm1pbmcoZGVmLmxlZnQsIGN0eCkgfHwgaXNUcmFuc2Zvcm1pbmcoZGVmLnJpZ2h0LCBjdHgpO1xuICAgIH1cbiAgICBpZiAoZGVmLnR5cGUgPT09IFwicmVjb3JkXCIgfHwgZGVmLnR5cGUgPT09IFwibWFwXCIpIHtcbiAgICAgICAgcmV0dXJuIGlzVHJhbnNmb3JtaW5nKGRlZi5rZXlUeXBlLCBjdHgpIHx8IGlzVHJhbnNmb3JtaW5nKGRlZi52YWx1ZVR5cGUsIGN0eCk7XG4gICAgfVxuICAgIGlmIChkZWYudHlwZSA9PT0gXCJwaXBlXCIpIHtcbiAgICAgICAgaWYgKF9zY2hlbWEuX3pvZC50cmFpdHMuaGFzKFwiJFpvZENvZGVjXCIpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBpc1RyYW5zZm9ybWluZyhkZWYuaW4sIGN0eCkgfHwgaXNUcmFuc2Zvcm1pbmcoZGVmLm91dCwgY3R4KTtcbiAgICB9XG4gICAgaWYgKGRlZi50eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRlZi5zaGFwZSkge1xuICAgICAgICAgICAgaWYgKGlzVHJhbnNmb3JtaW5nKGRlZi5zaGFwZVtrZXldLCBjdHgpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGRlZi50eXBlID09PSBcInVuaW9uXCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2YgZGVmLm9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmIChpc1RyYW5zZm9ybWluZyhvcHRpb24sIGN0eCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZGVmLnR5cGUgPT09IFwidHVwbGVcIikge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGVmLml0ZW1zKSB7XG4gICAgICAgICAgICBpZiAoaXNUcmFuc2Zvcm1pbmcoaXRlbSwgY3R4KSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLnJlc3QgJiYgaXNUcmFuc2Zvcm1pbmcoZGVmLnJlc3QsIGN0eCkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIENyZWF0ZXMgYSB0b0pTT05TY2hlbWEgbWV0aG9kIGZvciBhIHNjaGVtYSBpbnN0YW5jZS5cbiAqIFRoaXMgZW5jYXBzdWxhdGVzIHRoZSBsb2dpYyBvZiBpbml0aWFsaXppbmcgY29udGV4dCwgcHJvY2Vzc2luZywgZXh0cmFjdGluZyBkZWZzLCBhbmQgZmluYWxpemluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZVRvSlNPTlNjaGVtYU1ldGhvZCA9IChzY2hlbWEsIHByb2Nlc3NvcnMgPSB7fSkgPT4gKHBhcmFtcykgPT4ge1xuICAgIGNvbnN0IGN0eCA9IGluaXRpYWxpemVDb250ZXh0KHsgLi4ucGFyYW1zLCBwcm9jZXNzb3JzIH0pO1xuICAgIHByb2Nlc3Moc2NoZW1hLCBjdHgpO1xuICAgIGV4dHJhY3REZWZzKGN0eCwgc2NoZW1hKTtcbiAgICByZXR1cm4gZmluYWxpemUoY3R4LCBzY2hlbWEpO1xufTtcbmV4cG9ydCBjb25zdCBjcmVhdGVTdGFuZGFyZEpTT05TY2hlbWFNZXRob2QgPSAoc2NoZW1hLCBpbywgcHJvY2Vzc29ycyA9IHt9KSA9PiAocGFyYW1zKSA9PiB7XG4gICAgY29uc3QgeyBsaWJyYXJ5T3B0aW9ucywgdGFyZ2V0IH0gPSBwYXJhbXMgPz8ge307XG4gICAgY29uc3QgY3R4ID0gaW5pdGlhbGl6ZUNvbnRleHQoeyAuLi4obGlicmFyeU9wdGlvbnMgPz8ge30pLCB0YXJnZXQsIGlvLCBwcm9jZXNzb3JzIH0pO1xuICAgIHByb2Nlc3Moc2NoZW1hLCBjdHgpO1xuICAgIGV4dHJhY3REZWZzKGN0eCwgc2NoZW1hKTtcbiAgICByZXR1cm4gZmluYWxpemUoY3R4LCBzY2hlbWEpO1xufTtcbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/core/to-json-schema.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/core/util.js":
|
||
/*!******************************************!*\
|
||
!*** ./node_modules/zod/v4/core/util.js ***!
|
||
\******************************************/
|
||
/***/ ((__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 */ BIGINT_FORMAT_RANGES: () => (/* binding */ BIGINT_FORMAT_RANGES),\n/* harmony export */ Class: () => (/* binding */ Class),\n/* harmony export */ NUMBER_FORMAT_RANGES: () => (/* binding */ NUMBER_FORMAT_RANGES),\n/* harmony export */ aborted: () => (/* binding */ aborted),\n/* harmony export */ allowsEval: () => (/* binding */ allowsEval),\n/* harmony export */ assert: () => (/* binding */ assert),\n/* harmony export */ assertEqual: () => (/* binding */ assertEqual),\n/* harmony export */ assertIs: () => (/* binding */ assertIs),\n/* harmony export */ assertNever: () => (/* binding */ assertNever),\n/* harmony export */ assertNotEqual: () => (/* binding */ assertNotEqual),\n/* harmony export */ assignProp: () => (/* binding */ assignProp),\n/* harmony export */ base64ToUint8Array: () => (/* binding */ base64ToUint8Array),\n/* harmony export */ base64urlToUint8Array: () => (/* binding */ base64urlToUint8Array),\n/* harmony export */ cached: () => (/* binding */ cached),\n/* harmony export */ captureStackTrace: () => (/* binding */ captureStackTrace),\n/* harmony export */ cleanEnum: () => (/* binding */ cleanEnum),\n/* harmony export */ cleanRegex: () => (/* binding */ cleanRegex),\n/* harmony export */ clone: () => (/* binding */ clone),\n/* harmony export */ cloneDef: () => (/* binding */ cloneDef),\n/* harmony export */ createTransparentProxy: () => (/* binding */ createTransparentProxy),\n/* harmony export */ defineLazy: () => (/* binding */ defineLazy),\n/* harmony export */ esc: () => (/* binding */ esc),\n/* harmony export */ escapeRegex: () => (/* binding */ escapeRegex),\n/* harmony export */ explicitlyAborted: () => (/* binding */ explicitlyAborted),\n/* harmony export */ extend: () => (/* binding */ extend),\n/* harmony export */ finalizeIssue: () => (/* binding */ finalizeIssue),\n/* harmony export */ floatSafeRemainder: () => (/* binding */ floatSafeRemainder),\n/* harmony export */ getElementAtPath: () => (/* binding */ getElementAtPath),\n/* harmony export */ getEnumValues: () => (/* binding */ getEnumValues),\n/* harmony export */ getLengthableOrigin: () => (/* binding */ getLengthableOrigin),\n/* harmony export */ getParsedType: () => (/* binding */ getParsedType),\n/* harmony export */ getSizableOrigin: () => (/* binding */ getSizableOrigin),\n/* harmony export */ hexToUint8Array: () => (/* binding */ hexToUint8Array),\n/* harmony export */ isObject: () => (/* binding */ isObject),\n/* harmony export */ isPlainObject: () => (/* binding */ isPlainObject),\n/* harmony export */ issue: () => (/* binding */ issue),\n/* harmony export */ joinValues: () => (/* binding */ joinValues),\n/* harmony export */ jsonStringifyReplacer: () => (/* binding */ jsonStringifyReplacer),\n/* harmony export */ merge: () => (/* binding */ merge),\n/* harmony export */ mergeDefs: () => (/* binding */ mergeDefs),\n/* harmony export */ normalizeParams: () => (/* binding */ normalizeParams),\n/* harmony export */ nullish: () => (/* binding */ nullish),\n/* harmony export */ numKeys: () => (/* binding */ numKeys),\n/* harmony export */ objectClone: () => (/* binding */ objectClone),\n/* harmony export */ omit: () => (/* binding */ omit),\n/* harmony export */ optionalKeys: () => (/* binding */ optionalKeys),\n/* harmony export */ parsedType: () => (/* binding */ parsedType),\n/* harmony export */ partial: () => (/* binding */ partial),\n/* harmony export */ pick: () => (/* binding */ pick),\n/* harmony export */ prefixIssues: () => (/* binding */ prefixIssues),\n/* harmony export */ primitiveTypes: () => (/* binding */ primitiveTypes),\n/* harmony export */ promiseAllObject: () => (/* binding */ promiseAllObject),\n/* harmony export */ propertyKeyTypes: () => (/* binding */ propertyKeyTypes),\n/* harmony export */ randomString: () => (/* binding */ randomString),\n/* harmony export */ required: () => (/* binding */ required),\n/* harmony export */ safeExtend: () => (/* binding */ safeExtend),\n/* harmony export */ shallowClone: () => (/* binding */ shallowClone),\n/* harmony export */ slugify: () => (/* binding */ slugify),\n/* harmony export */ stringifyPrimitive: () => (/* binding */ stringifyPrimitive),\n/* harmony export */ uint8ArrayToBase64: () => (/* binding */ uint8ArrayToBase64),\n/* harmony export */ uint8ArrayToBase64url: () => (/* binding */ uint8ArrayToBase64url),\n/* harmony export */ uint8ArrayToHex: () => (/* binding */ uint8ArrayToHex),\n/* harmony export */ unwrapMessage: () => (/* binding */ unwrapMessage)\n/* harmony export */ });\n/* harmony import */ var _core_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core.js */ \"(app-pages-browser)/./node_modules/zod/v4/core/core.js\");\n\n// functions\nfunction assertEqual(val) {\n return val;\n}\nfunction assertNotEqual(val) {\n return val;\n}\nfunction assertIs(_arg) { }\nfunction assertNever(_x) {\n throw new Error(\"Unexpected value in exhaustive check\");\n}\nfunction assert(_) { }\nfunction getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nfunction joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nfunction jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nfunction cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nfunction nullish(input) {\n return input === null || input === undefined;\n}\nfunction cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nfunction floatSafeRemainder(val, step) {\n const ratio = val / step;\n const roundedRatio = Math.round(ratio);\n // Use a relative epsilon scaled to the magnitude of the result\n const tolerance = Number.EPSILON * Math.max(Math.abs(ratio), 1);\n if (Math.abs(ratio - roundedRatio) < tolerance)\n return 0;\n return ratio - roundedRatio;\n}\nconst EVALUATING = /* @__PURE__*/ Symbol(\"evaluating\");\nfunction defineLazy(object, key, getter) {\n let value = undefined;\n Object.defineProperty(object, key, {\n get() {\n if (value === EVALUATING) {\n // Circular reference detected, return undefined to break the cycle\n return undefined;\n }\n if (value === undefined) {\n value = EVALUATING;\n value = getter();\n }\n return value;\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nfunction objectClone(obj) {\n return Object.create(Object.getPrototypeOf(obj), Object.getOwnPropertyDescriptors(obj));\n}\nfunction assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nfunction mergeDefs(...defs) {\n const mergedDescriptors = {};\n for (const def of defs) {\n const descriptors = Object.getOwnPropertyDescriptors(def);\n Object.assign(mergedDescriptors, descriptors);\n }\n return Object.defineProperties({}, mergedDescriptors);\n}\nfunction cloneDef(schema) {\n return mergeDefs(schema._zod.def);\n}\nfunction getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nfunction promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nfunction randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nfunction esc(str) {\n return JSON.stringify(str);\n}\nfunction slugify(input) {\n return input\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, \"\")\n .replace(/[\\s_-]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\nconst captureStackTrace = (\"captureStackTrace\" in Error ? Error.captureStackTrace : (..._args) => { });\nfunction isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nconst allowsEval = /* @__PURE__*/ cached(() => {\n // Skip the probe under `jitless`: strict CSPs report the caught `new Function`\n // as a `securitypolicyviolation` even though the throw is swallowed.\n if (_core_js__WEBPACK_IMPORTED_MODULE_0__.globalConfig.jitless) {\n return false;\n }\n // @ts-ignore\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nfunction isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n if (typeof ctor !== \"function\")\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nfunction shallowClone(o) {\n if (isPlainObject(o))\n return { ...o };\n if (Array.isArray(o))\n return [...o];\n if (o instanceof Map)\n return new Map(o);\n if (o instanceof Set)\n return new Set(o);\n return o;\n}\nfunction numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nconst getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n // @ts-ignore\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nconst propertyKeyTypes = /* @__PURE__*/ new Set([\"string\", \"number\", \"symbol\"]);\nconst primitiveTypes = /* @__PURE__*/ new Set([\n \"string\",\n \"number\",\n \"bigint\",\n \"boolean\",\n \"symbol\",\n \"undefined\",\n]);\nfunction escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nfunction clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nfunction normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nfunction createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nfunction stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nfunction optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nconst NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nconst BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nfunction pick(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".pick() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = {};\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n newShape[key] = currDef.shape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nfunction omit(schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".omit() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const newShape = { ...schema._zod.def.shape };\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n assignProp(this, \"shape\", newShape); // self-caching\n return newShape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nfunction extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const checks = schema._zod.def.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n // Only throw if new shape overlaps with existing shape\n // Use getOwnPropertyDescriptor to check key existence without accessing values\n const existingShape = schema._zod.def.shape;\n for (const key in shape) {\n if (Object.getOwnPropertyDescriptor(existingShape, key) !== undefined) {\n throw new Error(\"Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.\");\n }\n }\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nfunction safeExtend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to safeExtend: expected a plain object\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n });\n return clone(schema, def);\n}\nfunction merge(a, b) {\n if (a._zod.def.checks?.length) {\n throw new Error(\".merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.\");\n }\n const def = mergeDefs(a._zod.def, {\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n get catchall() {\n return b._zod.def.catchall;\n },\n checks: b._zod.def.checks ?? [],\n });\n return clone(a, def);\n}\nfunction partial(Class, schema, mask) {\n const currDef = schema._zod.def;\n const checks = currDef.checks;\n const hasChecks = checks && checks.length > 0;\n if (hasChecks) {\n throw new Error(\".partial() cannot be used on object schemas containing refinements\");\n }\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n checks: [],\n });\n return clone(schema, def);\n}\nfunction required(Class, schema, mask) {\n const def = mergeDefs(schema._zod.def, {\n get shape() {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n assignProp(this, \"shape\", shape); // self-caching\n return shape;\n },\n });\n return clone(schema, def);\n}\n// invalid_type | too_big | too_small | invalid_format | not_multiple_of | unrecognized_keys | invalid_union | invalid_key | invalid_element | invalid_value | custom\nfunction aborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true) {\n return true;\n }\n }\n return false;\n}\n// Checks for explicit abort (continue === false), as opposed to implicit abort (continue === undefined).\n// Used to respect `abort: true` in .refine() even for checks that have a `when` function.\nfunction explicitlyAborted(x, startIndex = 0) {\n if (x.aborted === true)\n return true;\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue === false) {\n return true;\n }\n }\n return false;\n}\nfunction prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nfunction unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nfunction finalizeIssue(iss, ctx, config) {\n const message = iss.message\n ? iss.message\n : (unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\");\n const { inst: _inst, continue: _continue, input: _input, ...rest } = iss;\n rest.path ?? (rest.path = []);\n rest.message = message;\n if (ctx?.reportInput) {\n rest.input = _input;\n }\n return rest;\n}\nfunction getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n // @ts-ignore\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nfunction getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nfunction parsedType(data) {\n const t = typeof data;\n switch (t) {\n case \"number\": {\n return Number.isNaN(data) ? \"nan\" : \"number\";\n }\n case \"object\": {\n if (data === null) {\n return \"null\";\n }\n if (Array.isArray(data)) {\n return \"array\";\n }\n const obj = data;\n if (obj && Object.getPrototypeOf(obj) !== Object.prototype && \"constructor\" in obj && obj.constructor) {\n return obj.constructor.name;\n }\n }\n }\n return t;\n}\nfunction issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nfunction cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// Codec utility functions\nfunction base64ToUint8Array(base64) {\n const binaryString = atob(base64);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n return bytes;\n}\nfunction uint8ArrayToBase64(bytes) {\n let binaryString = \"\";\n for (let i = 0; i < bytes.length; i++) {\n binaryString += String.fromCharCode(bytes[i]);\n }\n return btoa(binaryString);\n}\nfunction base64urlToUint8Array(base64url) {\n const base64 = base64url.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return base64ToUint8Array(base64 + padding);\n}\nfunction uint8ArrayToBase64url(bytes) {\n return uint8ArrayToBase64(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=/g, \"\");\n}\nfunction hexToUint8Array(hex) {\n const cleanHex = hex.replace(/^0x/, \"\");\n if (cleanHex.length % 2 !== 0) {\n throw new Error(\"Invalid hex string length\");\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = Number.parseInt(cleanHex.slice(i, i + 2), 16);\n }\n return bytes;\n}\nfunction uint8ArrayToHex(bytes) {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n// instanceof\nclass Class {\n constructor(..._args) { }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS91dGlsLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBeUM7QUFDekM7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNBO0FBQ1A7QUFDQTtBQUNPO0FBQ0E7QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBLFNBQVM7QUFDVDtBQUNBLEtBQUs7QUFDTDtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFDQUFxQztBQUNyQztBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esd0JBQXdCLGlCQUFpQjtBQUN6QztBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDTztBQUNQO0FBQ0E7QUFDQSxvQkFBb0IsWUFBWTtBQUNoQztBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFD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QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0Esb0JBQW9CLHlCQUF5QjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQSxvQkFBb0Isa0JBQWtCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ087QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQixxQkFBcUI7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDTztBQUNQO0FBQ0EiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvem9kL3Y0L2NvcmUvdXRpbC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnbG9iYWxDb25maWcgfSBmcm9tIFwiLi9jb3JlLmpzXCI7XG4vLyBmdW5jdGlvbnNcbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRFcXVhbCh2YWwpIHtcbiAgICByZXR1cm4gdmFsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGFzc2VydE5vdEVxdWFsKHZhbCkge1xuICAgIHJldHVybiB2YWw7XG59XG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0SXMoX2FyZykgeyB9XG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0TmV2ZXIoX3gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmV4cGVjdGVkIHZhbHVlIGluIGV4aGF1c3RpdmUgY2hlY2tcIik7XG59XG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0KF8pIHsgfVxuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1WYWx1ZXMoZW50cmllcykge1xuICAgIGNvbnN0IG51bWVyaWNWYWx1ZXMgPSBPYmplY3QudmFsdWVzKGVudHJpZXMpLmZpbHRlcigodikgPT4gdHlwZW9mIHYgPT09IFwibnVtYmVyXCIpO1xuICAgIGNvbnN0IHZhbHVlcyA9IE9iamVjdC5lbnRyaWVzKGVudHJpZXMpXG4gICAgICAgIC5maWx0ZXIoKFtrLCBfXSkgPT4gbnVtZXJpY1ZhbHVlcy5pbmRleE9mKCtrKSA9PT0gLTEpXG4gICAgICAgIC5tYXAoKFtfLCB2XSkgPT4gdik7XG4gICAgcmV0dXJuIHZhbHVlcztcbn1cbmV4cG9ydCBmdW5jdGlvbiBqb2luVmFsdWVzKGFycmF5LCBzZXBhcmF0b3IgPSBcInxcIikge1xuICAgIHJldHVybiBhcnJheS5tYXAoKHZhbCkgPT4gc3RyaW5naWZ5UHJpbWl0aXZlKHZhbCkpLmpvaW4oc2VwYXJhdG9yKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBqc29uU3RyaW5naWZ5UmVwbGFjZXIoXywgdmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcImJpZ2ludFwiKVxuICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gY2FjaGVkKGdldHRlcikge1xuICAgIGNvbnN0IHNldCA9IGZhbHNlO1xuICAgIHJldHVybiB7XG4gICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgIGlmICghc2V0KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBnZXR0ZXIoKTtcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgXCJ2YWx1ZVwiLCB7IHZhbHVlIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImNhY2hlZCB2YWx1ZSBhbHJlYWR5IHNldFwiKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIG51bGxpc2goaW5wdXQpIHtcbiAgICByZXR1cm4gaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjbGVhblJlZ2V4KHNvdXJjZSkge1xuICAgIGNvbnN0IHN0YXJ0ID0gc291cmNlLnN0YXJ0c1dpdGgoXCJeXCIpID8gMSA6IDA7XG4gICAgY29uc3QgZW5kID0gc291cmNlLmVuZHNXaXRoKFwiJFwiKSA/IHNvdXJjZS5sZW5ndGggLSAxIDogc291cmNlLmxlbmd0aDtcbiAgICByZXR1cm4gc291cmNlLnNsaWNlKHN0YXJ0LCBlbmQpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZsb2F0U2FmZVJlbWFpbmRlcih2YWwsIHN0ZXApIHtcbiAgICBjb25zdCByYXRpbyA9IHZhbCAvIHN0ZXA7XG4gICAgY29uc3Qgcm91bmRlZFJhdGlvID0gTWF0aC5yb3VuZChyYXRpbyk7XG4gICAgLy8gVXNlIGEgcmVsYXRpdmUgZXBzaWxvbiBzY2FsZWQgdG8gdGhlIG1hZ25pdHVkZSBvZiB0aGUgcmVzdWx0XG4gICAgY29uc3QgdG9sZXJhbmNlID0gTnVtYmVyLkVQU0lMT04gKiBNYXRoLm1heChNYXRoLmFicyhyYXRpbyksIDEpO1xuICAgIGlmIChNYXRoLmFicyhyYXRpbyAtIHJvdW5kZWRSYXRpbykgPCB0b2xlcmFuY2UpXG4gICAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiByYXRpbyAtIHJvdW5kZWRSYXRpbztcbn1cbmNvbnN0IEVWQUxVQVRJTkcgPSAvKiBAX19QVVJFX18qLyBTeW1ib2woXCJldmFsdWF0aW5nXCIpO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZUxhenkob2JqZWN0LCBrZXksIGdldHRlcikge1xuICAgIGxldCB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBrZXksIHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSBFVkFMVUFUSU5HKSB7XG4gICAgICAgICAgICAgICAgLy8gQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkLCByZXR1cm4gdW5kZWZpbmVkIHRvIGJyZWFrIHRoZSBjeWNsZVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gRVZBTFVBVElORztcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldHRlcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9LFxuICAgICAgICBzZXQodikge1xuICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwga2V5LCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHYsXG4gICAgICAgICAgICAgICAgLy8gY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBvYmplY3Rba2V5XSA9IHY7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RDbG9uZShvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LmNyZWF0ZShPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqKSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXNzaWduUHJvcCh0YXJnZXQsIHByb3AsIHZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgcHJvcCwge1xuICAgICAgICB2YWx1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZURlZnMoLi4uZGVmcykge1xuICAgIGNvbnN0IG1lcmdlZERlc2NyaXB0b3JzID0ge307XG4gICAgZm9yIChjb25zdCBkZWYgb2YgZGVmcykge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGRlZik7XG4gICAgICAgIE9iamVjdC5hc3NpZ24obWVyZ2VkRGVzY3JpcHRvcnMsIGRlc2NyaXB0b3JzKTtcbiAgICB9XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHt9LCBtZXJnZWREZXNjcmlwdG9ycyk7XG59XG5leHBvcnQgZnVuY3Rpb24gY2xvbmVEZWYoc2NoZW1hKSB7XG4gICAgcmV0dXJuIG1lcmdlRGVmcyhzY2hlbWEuX3pvZC5kZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEVsZW1lbnRBdFBhdGgob2JqLCBwYXRoKSB7XG4gICAgaWYgKCFwYXRoKVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIHJldHVybiBwYXRoLnJlZHVjZSgoYWNjLCBrZXkpID0+IGFjYz8uW2tleV0sIG9iaik7XG59XG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZUFsbE9iamVjdChwcm9taXNlc09iaikge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhwcm9taXNlc09iaik7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBrZXlzLm1hcCgoa2V5KSA9PiBwcm9taXNlc09ialtrZXldKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpLnRoZW4oKHJlc3VsdHMpID0+IHtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRPYmogPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXNvbHZlZE9ialtrZXlzW2ldXSA9IHJlc3VsdHNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkT2JqO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJhbmRvbVN0cmluZyhsZW5ndGggPSAxMCkge1xuICAgIGNvbnN0IGNoYXJzID0gXCJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwiO1xuICAgIGxldCBzdHIgPSBcIlwiO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc3RyICs9IGNoYXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJzLmxlbmd0aCldO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGVzYyhzdHIpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc3RyKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzbHVnaWZ5KGlucHV0KSB7XG4gICAgcmV0dXJuIGlucHV0XG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC50cmltKClcbiAgICAgICAgLnJlcGxhY2UoL1teXFx3XFxzLV0vZywgXCJcIilcbiAgICAgICAgLnJlcGxhY2UoL1tcXHNfLV0rL2csIFwiLVwiKVxuICAgICAgICAucmVwbGFjZSgvXi0rfC0rJC9nLCBcIlwiKTtcbn1cbmV4cG9ydCBjb25zdCBjYXB0dXJlU3RhY2tUcmFjZSA9IChcImNhcHR1cmVTdGFja1RyYWNlXCIgaW4gRXJyb3IgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSA6ICguLi5fYXJncykgPT4geyB9KTtcbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdChkYXRhKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSBcIm9iamVjdFwiICYmIGRhdGEgIT09IG51bGwgJiYgIUFycmF5LmlzQXJyYXkoZGF0YSk7XG59XG5leHBvcnQgY29uc3QgYWxsb3dzRXZhbCA9IC8qIEBfX1BVUkVfXyovIGNhY2hlZCgoKSA9PiB7XG4gICAgLy8gU2tpcCB0aGUgcHJvYmUgdW5kZXIgYGppdGxlc3NgOiBzdHJpY3QgQ1NQcyByZXBvcnQgdGhlIGNhdWdodCBgbmV3IEZ1bmN0aW9uYFxuICAgIC8vIGFzIGEgYHNlY3VyaXR5cG9saWN5dmlvbGF0aW9uYCBldmVuIHRob3VnaCB0aGUgdGhyb3cgaXMgc3dhbGxvd2VkLlxuICAgIGlmIChnbG9iYWxDb25maWcuaml0bGVzcykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIiAmJiBuYXZpZ2F0b3I/LnVzZXJBZ2VudD8uaW5jbHVkZXMoXCJDbG91ZGZsYXJlXCIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgRiA9IEZ1bmN0aW9uO1xuICAgICAgICBuZXcgRihcIlwiKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhdGNoIChfKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59KTtcbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KG8pIHtcbiAgICBpZiAoaXNPYmplY3QobykgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gbW9kaWZpZWQgY29uc3RydWN0b3JcbiAgICBjb25zdCBjdG9yID0gby5jb25zdHJ1Y3RvcjtcbiAgICBpZiAoY3RvciA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAodHlwZW9mIGN0b3IgIT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgLy8gbW9kaWZpZWQgcHJvdG90eXBlXG4gICAgY29uc3QgcHJvdCA9IGN0b3IucHJvdG90eXBlO1xuICAgIGlmIChpc09iamVjdChwcm90KSA9PT0gZmFsc2UpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAvLyBjdG9yIGRvZXNuJ3QgaGF2ZSBzdGF0aWMgYGlzUHJvdG90eXBlT2ZgXG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90LCBcImlzUHJvdG90eXBlT2ZcIikgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5leHBvcnQgZnVuY3Rpb24gc2hhbGxvd0Nsb25lKG8pIHtcbiAgICBpZiAoaXNQbGFpbk9iamVjdChvKSlcbiAgICAgICAgcmV0dXJuIHsgLi4ubyB9O1xuICAgIGlmIChBcnJheS5pc0FycmF5KG8pKVxuICAgICAgICByZXR1cm4gWy4uLm9dO1xuICAgIGlmIChvIGluc3RhbmNlb2YgTWFwKVxuICAgICAgICByZXR1cm4gbmV3IE1hcChvKTtcbiAgICBpZiAobyBpbnN0YW5jZW9mIFNldClcbiAgICAgICAgcmV0dXJuIG5ldyBTZXQobyk7XG4gICAgcmV0dXJuIG87XG59XG5leHBvcnQgZnVuY3Rpb24gbnVtS2V5cyhkYXRhKSB7XG4gICAgbGV0IGtleUNvdW50ID0gMDtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSkge1xuICAgICAgICAgICAga2V5Q291bnQrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ga2V5Q291bnQ7XG59XG5leHBvcnQgY29uc3QgZ2V0UGFyc2VkVHlwZSA9IChkYXRhKSA9PiB7XG4gICAgY29uc3QgdCA9IHR5cGVvZiBkYXRhO1xuICAgIHN3aXRjaCAodCkge1xuICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJ1bmRlZmluZWRcIjtcbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4oZGF0YSkgPyBcIm5hblwiIDogXCJudW1iZXJcIjtcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICAgICAgY2FzZSBcImZ1bmN0aW9uXCI6XG4gICAgICAgICAgICByZXR1cm4gXCJmdW5jdGlvblwiO1xuICAgICAgICBjYXNlIFwiYmlnaW50XCI6XG4gICAgICAgICAgICByZXR1cm4gXCJiaWdpbnRcIjtcbiAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgcmV0dXJuIFwic3ltYm9sXCI7XG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYXJyYXlcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEudGhlbiAmJiB0eXBlb2YgZGF0YS50aGVuID09PSBcImZ1bmN0aW9uXCIgJiYgZGF0YS5jYXRjaCAmJiB0eXBlb2YgZGF0YS5jYXRjaCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwicHJvbWlzZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBNYXAgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIE1hcCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIm1hcFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBTZXQgIT09IFwidW5kZWZpbmVkXCIgJiYgZGF0YSBpbnN0YW5jZW9mIFNldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcInNldFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBEYXRlICE9PSBcInVuZGVmaW5lZFwiICYmIGRhdGEgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZGF0ZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBGaWxlICE9PSBcInVuZGVmaW5lZFwiICYmIGRhdGEgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiZmlsZVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwib2JqZWN0XCI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gZGF0YSB0eXBlOiAke3R9YCk7XG4gICAgfVxufTtcbmV4cG9ydCBjb25zdCBwcm9wZXJ0eUtleVR5cGVzID0gLyogQF9fUFVSRV9fKi8gbmV3IFNldChbXCJzdHJpbmdcIiwgXCJudW1iZXJcIiwgXCJzeW1ib2xcIl0pO1xuZXhwb3J0IGNvbnN0IHByaW1pdGl2ZVR5cGVzID0gLyogQF9fUFVSRV9fKi8gbmV3IFNldChbXG4gICAgXCJzdHJpbmdcIixcbiAgICBcIm51bWJlclwiLFxuICAgIFwiYmlnaW50XCIsXG4gICAgXCJib29sZWFuXCIsXG4gICAgXCJzeW1ib2xcIixcbiAgICBcInVuZGVmaW5lZFwiLFxuXSk7XG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlUmVnZXgoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIik7XG59XG4vLyB6b2Qtc3BlY2lmaWMgdXRpbHNcbmV4cG9ydCBmdW5jdGlvbiBjbG9uZShpbnN0LCBkZWYsIHBhcmFtcykge1xuICAgIGNvbnN0IGNsID0gbmV3IGluc3QuX3pvZC5jb25zdHIoZGVmID8/IGluc3QuX3pvZC5kZWYpO1xuICAgIGlmICghZGVmIHx8IHBhcmFtcz8ucGFyZW50KVxuICAgICAgICBjbC5fem9kLnBhcmVudCA9IGluc3Q7XG4gICAgcmV0dXJuIGNsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhcmFtcyhfcGFyYW1zKSB7XG4gICAgY29uc3QgcGFyYW1zID0gX3BhcmFtcztcbiAgICBpZiAoIXBhcmFtcylcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIGlmICh0eXBlb2YgcGFyYW1zID09PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4geyBlcnJvcjogKCkgPT4gcGFyYW1zIH07XG4gICAgaWYgKHBhcmFtcz8ubWVzc2FnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmIChwYXJhbXM/LmVycm9yICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3Qgc3BlY2lmeSBib3RoIGBtZXNzYWdlYCBhbmQgYGVycm9yYCBwYXJhbXNcIik7XG4gICAgICAgIHBhcmFtcy5lcnJvciA9IHBhcmFtcy5tZXNzYWdlO1xuICAgIH1cbiAgICBkZWxldGUgcGFyYW1zLm1lc3NhZ2U7XG4gICAgaWYgKHR5cGVvZiBwYXJhbXMuZXJyb3IgPT09IFwic3RyaW5nXCIpXG4gICAgICAgIHJldHVybiB7IC4uLnBhcmFtcywgZXJyb3I6ICgpID0+IHBhcmFtcy5lcnJvciB9O1xuICAgIHJldHVybiBwYXJhbXM7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVHJhbnNwYXJlbnRQcm94eShnZXR0ZXIpIHtcbiAgICBsZXQgdGFyZ2V0O1xuICAgIHJldHVybiBuZXcgUHJveHkoe30sIHtcbiAgICAgICAgZ2V0KF8sIHByb3AsIHJlY2VpdmVyKSB7XG4gICAgICAgICAgICB0YXJnZXQgPz8gKHRhcmdldCA9IGdldHRlcigpKTtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0KF8sIHByb3AsIHZhbHVlLCByZWNlaXZlcikge1xuICAgICAgICAgICAgdGFyZ2V0ID8/ICh0YXJnZXQgPSBnZXR0ZXIoKSk7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5zZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZSwgcmVjZWl2ZXIpO1xuICAgICAgICB9LFxuICAgICAgICBoYXMoXywgcHJvcCkge1xuICAgICAgICAgICAgdGFyZ2V0ID8/ICh0YXJnZXQgPSBnZXR0ZXIoKSk7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5oYXModGFyZ2V0LCBwcm9wKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVsZXRlUHJvcGVydHkoXywgcHJvcCkge1xuICAgICAgICAgICAgdGFyZ2V0ID8/ICh0YXJnZXQgPSBnZXR0ZXIoKSk7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5kZWxldGVQcm9wZXJ0eSh0YXJnZXQsIHByb3ApO1xuICAgICAgICB9LFxuICAgICAgICBvd25LZXlzKF8pIHtcbiAgICAgICAgICAgIHRhcmdldCA/PyAodGFyZ2V0ID0gZ2V0dGVyKCkpO1xuICAgICAgICAgICAgcmV0dXJuIFJlZmxlY3Qub3duS2V5cyh0YXJnZXQpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXywgcHJvcCkge1xuICAgICAgICAgICAgdGFyZ2V0ID8/ICh0YXJnZXQgPSBnZXR0ZXIoKSk7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBwcm9wKTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVmaW5lUHJvcGVydHkoXywgcHJvcCwgZGVzY3JpcHRvcikge1xuICAgICAgICAgICAgdGFyZ2V0ID8/ICh0YXJnZXQgPSBnZXR0ZXIoKSk7XG4gICAgICAgICAgICByZXR1cm4gUmVmbGVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIHByb3AsIGRlc2NyaXB0b3IpO1xuICAgICAgICB9LFxuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeVByaW1pdGl2ZSh2YWx1ZSkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYmlnaW50XCIpXG4gICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpICsgXCJuXCI7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgcmV0dXJuIGBcIiR7dmFsdWV9XCJgO1xuICAgIHJldHVybiBgJHt2YWx1ZX1gO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9wdGlvbmFsS2V5cyhzaGFwZSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzaGFwZSkuZmlsdGVyKChrKSA9PiB7XG4gICAgICAgIHJldHVybiBzaGFwZVtrXS5fem9kLm9wdGluID09PSBcIm9wdGlvbmFsXCIgJiYgc2hhcGVba10uX3pvZC5vcHRvdXQgPT09IFwib3B0aW9uYWxcIjtcbiAgICB9KTtcbn1cbmV4cG9ydCBjb25zdCBOVU1CRVJfRk9STUFUX1JBTkdFUyA9IHtcbiAgICBzYWZlaW50OiBbTnVtYmVyLk1JTl9TQUZFX0lOVEVHRVIsIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSXSxcbiAgICBpbnQzMjogWy0yMTQ3NDgzNjQ4LCAyMTQ3NDgzNjQ3XSxcbiAgICB1aW50MzI6IFswLCA0Mjk0OTY3Mjk1XSxcbiAgICBmbG9hdDMyOiBbLTMuNDAyODIzNDY2Mzg1Mjg4NmUzOCwgMy40MDI4MjM0NjYzODUyODg2ZTM4XSxcbiAgICBmbG9hdDY0OiBbLU51bWJlci5NQVhfVkFMVUUsIE51bWJlci5NQVhfVkFMVUVdLFxufTtcbmV4cG9ydCBjb25zdCBCSUdJTlRfRk9STUFUX1JBTkdFUyA9IHtcbiAgICBpbnQ2NDogWy8qIEBfX1BVUkVfXyovIEJpZ0ludChcIi05MjIzMzcyMDM2ODU0Nzc1ODA4XCIpLCAvKiBAX19QVVJFX18qLyBCaWdJbnQoXCI5MjIzMzcyMDM2ODU0Nzc1ODA3XCIpXSxcbiAgICB1aW50NjQ6IFsvKiBAX19QVVJFX18qLyBCaWdJbnQoMCksIC8qIEBfX1BVUkVfXyovIEJpZ0ludChcIjE4NDQ2NzQ0MDczNzA5NTUxNjE1XCIpXSxcbn07XG5leHBvcnQgZnVuY3Rpb24gcGljayhzY2hlbWEsIG1hc2spIHtcbiAgICBjb25zdCBjdXJyRGVmID0gc2NoZW1hLl96b2QuZGVmO1xuICAgIGNvbnN0IGNoZWNrcyA9IGN1cnJEZWYuY2hlY2tzO1xuICAgIGNvbnN0IGhhc0NoZWNrcyA9IGNoZWNrcyAmJiBjaGVja3MubGVuZ3RoID4gMDtcbiAgICBpZiAoaGFzQ2hlY2tzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIi5waWNrKCkgY2Fubm90IGJlIHVzZWQgb24gb2JqZWN0IHNjaGVtYXMgY29udGFpbmluZyByZWZpbmVtZW50c1wiKTtcbiAgICB9XG4gICAgY29uc3QgZGVmID0gbWVyZ2VEZWZzKHNjaGVtYS5fem9kLmRlZiwge1xuICAgICAgICBnZXQgc2hhcGUoKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdTaGFwZSA9IHt9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbWFzaykge1xuICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBjdXJyRGVmLnNoYXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBrZXk6IFwiJHtrZXl9XCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFtYXNrW2tleV0pXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSBjdXJyRGVmLnNoYXBlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3NpZ25Qcm9wKHRoaXMsIFwic2hhcGVcIiwgbmV3U2hhcGUpOyAvLyBzZWxmLWNhY2hpbmdcbiAgICAgICAgICAgIHJldHVybiBuZXdTaGFwZTtcbiAgICAgICAgfSxcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmUoc2NoZW1hLCBkZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9taXQoc2NoZW1hLCBtYXNrKSB7XG4gICAgY29uc3QgY3VyckRlZiA9IHNjaGVtYS5fem9kLmRlZjtcbiAgICBjb25zdCBjaGVja3MgPSBjdXJyRGVmLmNoZWNrcztcbiAgICBjb25zdCBoYXNDaGVja3MgPSBjaGVja3MgJiYgY2hlY2tzLmxlbmd0aCA+IDA7XG4gICAgaWYgKGhhc0NoZWNrcykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIub21pdCgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHNcIik7XG4gICAgfVxuICAgIGNvbnN0IGRlZiA9IG1lcmdlRGVmcyhzY2hlbWEuX3pvZC5kZWYsIHtcbiAgICAgICAgZ2V0IHNoYXBlKCkge1xuICAgICAgICAgICAgY29uc3QgbmV3U2hhcGUgPSB7IC4uLnNjaGVtYS5fem9kLmRlZi5zaGFwZSB9O1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbWFzaykge1xuICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBjdXJyRGVmLnNoYXBlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCBrZXk6IFwiJHtrZXl9XCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFtYXNrW2tleV0pXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdTaGFwZVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXNzaWduUHJvcCh0aGlzLCBcInNoYXBlXCIsIG5ld1NoYXBlKTsgLy8gc2VsZi1jYWNoaW5nXG4gICAgICAgICAgICByZXR1cm4gbmV3U2hhcGU7XG4gICAgICAgIH0sXG4gICAgICAgIGNoZWNrczogW10sXG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lKHNjaGVtYSwgZGVmKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQoc2NoZW1hLCBzaGFwZSkge1xuICAgIGlmICghaXNQbGFpbk9iamVjdChzaGFwZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBpbnB1dCB0byBleHRlbmQ6IGV4cGVjdGVkIGEgcGxhaW4gb2JqZWN0XCIpO1xuICAgIH1cbiAgICBjb25zdCBjaGVja3MgPSBzY2hlbWEuX3pvZC5kZWYuY2hlY2tzO1xuICAgIGNvbnN0IGhhc0NoZWNrcyA9IGNoZWNrcyAmJiBjaGVja3MubGVuZ3RoID4gMDtcbiAgICBpZiAoaGFzQ2hlY2tzKSB7XG4gICAgICAgIC8vIE9ubHkgdGhyb3cgaWYgbmV3IHNoYXBlIG92ZXJsYXBzIHdpdGggZXhpc3Rpbmcgc2hhcGVcbiAgICAgICAgLy8gVXNlIGdldE93blByb3BlcnR5RGVzY3JpcHRvciB0byBjaGVjayBrZXkgZXhpc3RlbmNlIHdpdGhvdXQgYWNjZXNzaW5nIHZhbHVlc1xuICAgICAgICBjb25zdCBleGlzdGluZ1NoYXBlID0gc2NoZW1hLl96b2QuZGVmLnNoYXBlO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzaGFwZSkge1xuICAgICAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhpc3RpbmdTaGFwZSwga2V5KSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IG92ZXJ3cml0ZSBrZXlzIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSBgLnNhZmVFeHRlbmQoKWAgaW5zdGVhZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgZGVmID0gbWVyZ2VEZWZzKHNjaGVtYS5fem9kLmRlZiwge1xuICAgICAgICBnZXQgc2hhcGUoKSB7XG4gICAgICAgICAgICBjb25zdCBfc2hhcGUgPSB7IC4uLnNjaGVtYS5fem9kLmRlZi5zaGFwZSwgLi4uc2hhcGUgfTtcbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBfc2hhcGUpOyAvLyBzZWxmLWNhY2hpbmdcbiAgICAgICAgICAgIHJldHVybiBfc2hhcGU7XG4gICAgICAgIH0sXG4gICAgfSk7XG4gICAgcmV0dXJuIGNsb25lKHNjaGVtYSwgZGVmKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzYWZlRXh0ZW5kKHNjaGVtYSwgc2hhcGUpIHtcbiAgICBpZiAoIWlzUGxhaW5PYmplY3Qoc2hhcGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgdG8gc2FmZUV4dGVuZDogZXhwZWN0ZWQgYSBwbGFpbiBvYmplY3RcIik7XG4gICAgfVxuICAgIGNvbnN0IGRlZiA9IG1lcmdlRGVmcyhzY2hlbWEuX3pvZC5kZWYsIHtcbiAgICAgICAgZ2V0IHNoYXBlKCkge1xuICAgICAgICAgICAgY29uc3QgX3NoYXBlID0geyAuLi5zY2hlbWEuX3pvZC5kZWYuc2hhcGUsIC4uLnNoYXBlIH07XG4gICAgICAgICAgICBhc3NpZ25Qcm9wKHRoaXMsIFwic2hhcGVcIiwgX3NoYXBlKTsgLy8gc2VsZi1jYWNoaW5nXG4gICAgICAgICAgICByZXR1cm4gX3NoYXBlO1xuICAgICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZShzY2hlbWEsIGRlZik7XG59XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UoYSwgYikge1xuICAgIGlmIChhLl96b2QuZGVmLmNoZWNrcz8ubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIi5tZXJnZSgpIGNhbm5vdCBiZSB1c2VkIG9uIG9iamVjdCBzY2hlbWFzIGNvbnRhaW5pbmcgcmVmaW5lbWVudHMuIFVzZSAuc2FmZUV4dGVuZCgpIGluc3RlYWQuXCIpO1xuICAgIH1cbiAgICBjb25zdCBkZWYgPSBtZXJnZURlZnMoYS5fem9kLmRlZiwge1xuICAgICAgICBnZXQgc2hhcGUoKSB7XG4gICAgICAgICAgICBjb25zdCBfc2hhcGUgPSB7IC4uLmEuX3pvZC5kZWYuc2hhcGUsIC4uLmIuX3pvZC5kZWYuc2hhcGUgfTtcbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBfc2hhcGUpOyAvLyBzZWxmLWNhY2hpbmdcbiAgICAgICAgICAgIHJldHVybiBfc2hhcGU7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBjYXRjaGFsbCgpIHtcbiAgICAgICAgICAgIHJldHVybiBiLl96b2QuZGVmLmNhdGNoYWxsO1xuICAgICAgICB9LFxuICAgICAgICBjaGVja3M6IGIuX3pvZC5kZWYuY2hlY2tzID8/IFtdLFxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZShhLCBkZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpYWwoQ2xhc3MsIHNjaGVtYSwgbWFzaykge1xuICAgIGNvbnN0IGN1cnJEZWYgPSBzY2hlbWEuX3pvZC5kZWY7XG4gICAgY29uc3QgY2hlY2tzID0gY3VyckRlZi5jaGVja3M7XG4gICAgY29uc3QgaGFzQ2hlY2tzID0gY2hlY2tzICYmIGNoZWNrcy5sZW5ndGggPiAwO1xuICAgIGlmIChoYXNDaGVja3MpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiLnBhcnRpYWwoKSBjYW5ub3QgYmUgdXNlZCBvbiBvYmplY3Qgc2NoZW1hcyBjb250YWluaW5nIHJlZmluZW1lbnRzXCIpO1xuICAgIH1cbiAgICBjb25zdCBkZWYgPSBtZXJnZURlZnMoc2NoZW1hLl96b2QuZGVmLCB7XG4gICAgICAgIGdldCBzaGFwZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFNoYXBlID0gc2NoZW1hLl96b2QuZGVmLnNoYXBlO1xuICAgICAgICAgICAgY29uc3Qgc2hhcGUgPSB7IC4uLm9sZFNoYXBlIH07XG4gICAgICAgICAgICBpZiAobWFzaykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIG9sZFNoYXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiBcIiR7a2V5fVwiYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXNrW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgKG9sZFNoYXBlW2tleV0hLl96b2Qub3B0aW4gPT09IFwib3B0aW9uYWxcIikgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSBDbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBuZXcgQ2xhc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwib3B0aW9uYWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lclR5cGU6IG9sZFNoYXBlW2tleV0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBvbGRTaGFwZVtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG9sZFNoYXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIChvbGRTaGFwZVtrZXldIS5fem9kLm9wdGluID09PSBcIm9wdGlvbmFsXCIpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBzaGFwZVtrZXldID0gQ2xhc3NcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IENsYXNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm9wdGlvbmFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJUeXBlOiBvbGRTaGFwZVtrZXldLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogb2xkU2hhcGVba2V5XTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhc3NpZ25Qcm9wKHRoaXMsIFwic2hhcGVcIiwgc2hhcGUpOyAvLyBzZWxmLWNhY2hpbmdcbiAgICAgICAgICAgIHJldHVybiBzaGFwZTtcbiAgICAgICAgfSxcbiAgICAgICAgY2hlY2tzOiBbXSxcbiAgICB9KTtcbiAgICByZXR1cm4gY2xvbmUoc2NoZW1hLCBkZWYpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVkKENsYXNzLCBzY2hlbWEsIG1hc2spIHtcbiAgICBjb25zdCBkZWYgPSBtZXJnZURlZnMoc2NoZW1hLl96b2QuZGVmLCB7XG4gICAgICAgIGdldCBzaGFwZSgpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFNoYXBlID0gc2NoZW1hLl96b2QuZGVmLnNoYXBlO1xuICAgICAgICAgICAgY29uc3Qgc2hhcGUgPSB7IC4uLm9sZFNoYXBlIH07XG4gICAgICAgICAgICBpZiAobWFzaykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG1hc2spIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIHNoYXBlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbnJlY29nbml6ZWQga2V5OiBcIiR7a2V5fVwiYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtYXNrW2tleV0pXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgLy8gb3ZlcndyaXRlIHdpdGggbm9uLW9wdGlvbmFsXG4gICAgICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSBuZXcgQ2xhc3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJub25vcHRpb25hbFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5uZXJUeXBlOiBvbGRTaGFwZVtrZXldLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvbGRTaGFwZSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBvdmVyd3JpdGUgd2l0aCBub24tb3B0aW9uYWxcbiAgICAgICAgICAgICAgICAgICAgc2hhcGVba2V5XSA9IG5ldyBDbGFzcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcIm5vbm9wdGlvbmFsXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbm5lclR5cGU6IG9sZFNoYXBlW2tleV0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzc2lnblByb3AodGhpcywgXCJzaGFwZVwiLCBzaGFwZSk7IC8vIHNlbGYtY2FjaGluZ1xuICAgICAgICAgICAgcmV0dXJuIHNoYXBlO1xuICAgICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZShzY2hlbWEsIGRlZik7XG59XG4vLyBpbnZhbGlkX3R5cGUgfCB0b29fYmlnIHwgdG9vX3NtYWxsIHwgaW52YWxpZF9mb3JtYXQgfCBub3RfbXVsdGlwbGVfb2YgfCB1bnJlY29nbml6ZWRfa2V5cyB8IGludmFsaWRfdW5pb24gfCBpbnZhbGlkX2tleSB8IGludmFsaWRfZWxlbWVudCB8IGludmFsaWRfdmFsdWUgfCBjdXN0b21cbmV4cG9ydCBmdW5jdGlvbiBhYm9ydGVkKHgsIHN0YXJ0SW5kZXggPSAwKSB7XG4gICAgaWYgKHguYWJvcnRlZCA9PT0gdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCB4Lmlzc3Vlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoeC5pc3N1ZXNbaV0/LmNvbnRpbnVlICE9PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG4vLyBDaGVja3MgZm9yIGV4cGxpY2l0IGFib3J0IChjb250aW51ZSA9PT0gZmFsc2UpLCBhcyBvcHBvc2VkIHRvIGltcGxpY2l0IGFib3J0IChjb250aW51ZSA9PT0gdW5kZWZpbmVkKS5cbi8vIFVzZWQgdG8gcmVzcGVjdCBgYWJvcnQ6IHRydWVgIGluIC5yZWZpbmUoKSBldmVuIGZvciBjaGVja3MgdGhhdCBoYXZlIGEgYHdoZW5gIGZ1bmN0aW9uLlxuZXhwb3J0IGZ1bmN0aW9uIGV4cGxpY2l0bHlBYm9ydGVkKHgsIHN0YXJ0SW5kZXggPSAwKSB7XG4gICAgaWYgKHguYWJvcnRlZCA9PT0gdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPCB4Lmlzc3Vlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoeC5pc3N1ZXNbaV0/LmNvbnRpbnVlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeElzc3VlcyhwYXRoLCBpc3N1ZXMpIHtcbiAgICByZXR1cm4gaXNzdWVzLm1hcCgoaXNzKSA9PiB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gaXNzKS5wYXRoID8/IChfYS5wYXRoID0gW10pO1xuICAgICAgICBpc3MucGF0aC51bnNoaWZ0KHBhdGgpO1xuICAgICAgICByZXR1cm4gaXNzO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVud3JhcE1lc3NhZ2UobWVzc2FnZSkge1xuICAgIHJldHVybiB0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiA/IG1lc3NhZ2UgOiBtZXNzYWdlPy5tZXNzYWdlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplSXNzdWUoaXNzLCBjdHgsIGNvbmZpZykge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBpc3MubWVzc2FnZVxuICAgICAgICA/IGlzcy5tZXNzYWdlXG4gICAgICAgIDogKHVud3JhcE1lc3NhZ2UoaXNzLmluc3Q/Ll96b2QuZGVmPy5lcnJvcj8uKGlzcykpID8/XG4gICAgICAgICAgICB1bndyYXBNZXNzYWdlKGN0eD8uZXJyb3I/Lihpc3MpKSA/P1xuICAgICAgICAgICAgdW53cmFwTWVzc2FnZShjb25maWcuY3VzdG9tRXJyb3I/Lihpc3MpKSA/P1xuICAgICAgICAgICAgdW53cmFwTWVzc2FnZShjb25maWcubG9jYWxlRXJyb3I/Lihpc3MpKSA/P1xuICAgICAgICAgICAgXCJJbnZhbGlkIGlucHV0XCIpO1xuICAgIGNvbnN0IHsgaW5zdDogX2luc3QsIGNvbnRpbnVlOiBfY29udGludWUsIGlucHV0OiBfaW5wdXQsIC4uLnJlc3QgfSA9IGlzcztcbiAgICByZXN0LnBhdGggPz8gKHJlc3QucGF0aCA9IFtdKTtcbiAgICByZXN0Lm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgIGlmIChjdHg/LnJlcG9ydElucHV0KSB7XG4gICAgICAgIHJlc3QuaW5wdXQgPSBfaW5wdXQ7XG4gICAgfVxuICAgIHJldHVybiByZXN0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFNpemFibGVPcmlnaW4oaW5wdXQpIHtcbiAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBTZXQpXG4gICAgICAgIHJldHVybiBcInNldFwiO1xuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE1hcClcbiAgICAgICAgcmV0dXJuIFwibWFwXCI7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIEZpbGUpXG4gICAgICAgIHJldHVybiBcImZpbGVcIjtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGVuZ3RoYWJsZU9yaWdpbihpbnB1dCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSlcbiAgICAgICAgcmV0dXJuIFwiYXJyYXlcIjtcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKVxuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICByZXR1cm4gXCJ1bmtub3duXCI7XG59XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VkVHlwZShkYXRhKSB7XG4gICAgY29uc3QgdCA9IHR5cGVvZiBkYXRhO1xuICAgIHN3aXRjaCAodCkge1xuICAgICAgICBjYXNlIFwibnVtYmVyXCI6IHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIuaXNOYU4oZGF0YSkgPyBcIm5hblwiIDogXCJudW1iZXJcIjtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwib2JqZWN0XCI6IHtcbiAgICAgICAgICAgIGlmIChkYXRhID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibnVsbFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb2JqID0gZGF0YTtcbiAgICAgICAgICAgIGlmIChvYmogJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikgIT09IE9iamVjdC5wcm90b3R5cGUgJiYgXCJjb25zdHJ1Y3RvclwiIGluIG9iaiAmJiBvYmouY29uc3RydWN0b3IpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNzdWUoLi4uYXJncykge1xuICAgIGNvbnN0IFtpc3MsIGlucHV0LCBpbnN0XSA9IGFyZ3M7XG4gICAgaWYgKHR5cGVvZiBpc3MgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IGlzcyxcbiAgICAgICAgICAgIGNvZGU6IFwiY3VzdG9tXCIsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIGluc3QsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB7IC4uLmlzcyB9O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNsZWFuRW51bShvYmopIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMob2JqKVxuICAgICAgICAuZmlsdGVyKChbaywgX10pID0+IHtcbiAgICAgICAgLy8gcmV0dXJuIHRydWUgaWYgTmFOLCBtZWFuaW5nIGl0J3Mgbm90IGEgbnVtYmVyLCB0aHVzIGEgc3RyaW5nIGtleVxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUludChrLCAxMCkpO1xuICAgIH0pXG4gICAgICAgIC5tYXAoKGVsKSA9PiBlbFsxXSk7XG59XG4vLyBDb2RlYyB1dGlsaXR5IGZ1bmN0aW9uc1xuZXhwb3J0IGZ1bmN0aW9uIGJhc2U2NFRvVWludDhBcnJheShiYXNlNjQpIHtcbiAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSBhdG9iKGJhc2U2NCk7XG4gICAgY29uc3QgYnl0ZXMgPSBuZXcgVWludDhBcnJheShiaW5hcnlTdHJpbmcubGVuZ3RoKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJpbmFyeVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgICBieXRlc1tpXSA9IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gdWludDhBcnJheVRvQmFzZTY0KGJ5dGVzKSB7XG4gICAgbGV0IGJpbmFyeVN0cmluZyA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBiaW5hcnlTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBidG9hKGJpbmFyeVN0cmluZyk7XG59XG5leHBvcnQgZnVuY3Rpb24gYmFzZTY0dXJsVG9VaW50OEFycmF5KGJhc2U2NHVybCkge1xuICAgIGNvbnN0IGJhc2U2NCA9IGJhc2U2NHVybC5yZXBsYWNlKC8tL2csIFwiK1wiKS5yZXBsYWNlKC9fL2csIFwiL1wiKTtcbiAgICBjb25zdCBwYWRkaW5nID0gXCI9XCIucmVwZWF0KCg0IC0gKGJhc2U2NC5sZW5ndGggJSA0KSkgJSA0KTtcbiAgICByZXR1cm4gYmFzZTY0VG9VaW50OEFycmF5KGJhc2U2NCArIHBhZGRpbmcpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHVpbnQ4QXJyYXlUb0Jhc2U2NHVybChieXRlcykge1xuICAgIHJldHVybiB1aW50OEFycmF5VG9CYXNlNjQoYnl0ZXMpLnJlcGxhY2UoL1xcKy9nLCBcIi1cIikucmVwbGFjZSgvXFwvL2csIFwiX1wiKS5yZXBsYWNlKC89L2csIFwiXCIpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhleFRvVWludDhBcnJheShoZXgpIHtcbiAgICBjb25zdCBjbGVhbkhleCA9IGhleC5yZXBsYWNlKC9eMHgvLCBcIlwiKTtcbiAgICBpZiAoY2xlYW5IZXgubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIGhleCBzdHJpbmcgbGVuZ3RoXCIpO1xuICAgIH1cbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGNsZWFuSGV4Lmxlbmd0aCAvIDIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2xlYW5IZXgubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgYnl0ZXNbaSAvIDJdID0gTnVtYmVyLnBhcnNlSW50KGNsZWFuSGV4LnNsaWNlKGksIGkgKyAyKSwgMTYpO1xuICAgIH1cbiAgICByZXR1cm4gYnl0ZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gdWludDhBcnJheVRvSGV4KGJ5dGVzKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oYnl0ZXMpXG4gICAgICAgIC5tYXAoKGIpID0+IGIudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDIsIFwiMFwiKSlcbiAgICAgICAgLmpvaW4oXCJcIik7XG59XG4vLyBpbnN0YW5jZW9mXG5leHBvcnQgY2xhc3MgQ2xhc3Mge1xuICAgIGNvbnN0cnVjdG9yKC4uLl9hcmdzKSB7IH1cbn1cbiJdLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOlswXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/core/util.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zod/v4/core/versions.js":
|
||
/*!**********************************************!*\
|
||
!*** ./node_modules/zod/v4/core/versions.js ***!
|
||
\**********************************************/
|
||
/***/ ((__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 */ version: () => (/* binding */ version)\n/* harmony export */ });\nconst version = {\n major: 4,\n minor: 4,\n patch: 3,\n};\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS92ZXJzaW9ucy5qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQU87QUFDUDtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy96b2QvdjQvY29yZS92ZXJzaW9ucy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgdmVyc2lvbiA9IHtcbiAgICBtYWpvcjogNCxcbiAgICBtaW5vcjogNCxcbiAgICBwYXRjaDogMyxcbn07XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zod/v4/core/versions.js\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zustand/esm/middleware.mjs":
|
||
/*!*************************************************!*\
|
||
!*** ./node_modules/zustand/esm/middleware.mjs ***!
|
||
\*************************************************/
|
||
/***/ ((__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 */ combine: () => (/* binding */ combine),\n/* harmony export */ createJSONStorage: () => (/* binding */ createJSONStorage),\n/* harmony export */ devtools: () => (/* binding */ devtools),\n/* harmony export */ persist: () => (/* binding */ persist),\n/* harmony export */ redux: () => (/* binding */ redux),\n/* harmony export */ subscribeWithSelector: () => (/* binding */ subscribeWithSelector),\n/* harmony export */ unstable_ssrSafe: () => (/* binding */ ssrSafe)\n/* harmony export */ });\nconst reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...args) => api.dispatch(...args), ...initial };\n};\nconst redux = reduxImpl;\n\nconst shouldDispatchFromDevtools = (api) => !!api.dispatchFromDevtools && typeof api.dispatch === \"function\";\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst removeStoreFromTrackedConnections = (name, store) => {\n if (store === void 0) return;\n const connectionInfo = trackedConnections.get(name);\n if (!connectionInfo) return;\n delete connectionInfo.stores[store];\n if (Object.keys(connectionInfo.stores).length === 0) {\n trackedConnections.delete(name);\n }\n};\nconst v8StackLineRe = /.+ (.+) .+/;\nconst geckoStackLineRe = /^([^@]+)@/;\nfunction findCallerName(stack) {\n var _a, _b, _c;\n if (!stack) return void 0;\n const traceLines = stack.split(\"\\n\");\n const apiSetStateLineIndex = traceLines.findIndex(\n (traceLine) => traceLine.includes(\"api.setState\")\n );\n if (apiSetStateLineIndex < 0) return void 0;\n const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || \"\";\n return ((_b = v8StackLineRe.exec(callerLine)) == null ? void 0 : _b[1]) || ((_c = geckoStackLineRe.exec(callerLine)) == null ? void 0 : _c[1]);\n}\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : ( false ? 0 : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = ((state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const action = nameOrAction === void 0 ? {\n type: anonymousActionType || findCallerName(new Error().stack) || \"anonymous\"\n } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n });\n api.devtools = {\n cleanup: () => {\n if (connection && typeof connection.unsubscribe === \"function\") {\n connection.unsubscribe();\n }\n removeStoreFromTrackedConnections(options.name, store);\n }\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (shouldDispatchFromDevtools(api)) {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...args) => {\n if (( false ? 0 : void 0) !== \"production\" && args[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...args);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format.\n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (shouldDispatchFromDevtools(api)) {\n api.dispatch(action);\n }\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, fn) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) fn(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = ((selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n });\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nfunction combine(initialState, create) {\n return (...args) => Object.assign({}, initialState, create(...args));\n}\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => window.localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n let hydrationVersion = 0;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n return setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n return setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n const currentVersion = ++hydrationVersion;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n const migration = options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n if (migration instanceof Promise) {\n return migration.then((result) => [true, result]);\n }\n return [true, migration];\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return [false, deserializedStorageValue.state];\n }\n }\n return [false, void 0];\n }).then((migrationResult) => {\n var _a2;\n if (currentVersion !== hydrationVersion) {\n return;\n }\n const [migrated, migratedState] = migrationResult;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n if (migrated) {\n return setItem();\n }\n }).then(() => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(get(), void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nfunction ssrSafe(config, isSSR = typeof window === \"undefined\") {\n return (set, get, api) => {\n if (!isSSR) {\n return config(set, get, api);\n }\n const ssrSet = () => {\n throw new Error(\"Cannot set state of Zustand store in SSR\");\n };\n api.setState = ssrSet;\n return config(ssrSet, get, api);\n };\n}\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96dXN0YW5kL2VzbS9taWRkbGV3YXJlLm1qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsV0FBVztBQUNYO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOENBQThDO0FBQzlDLFVBQVUsa0RBQWtEO0FBQzVEO0FBQ0E7QUFDQSx1REFBdUQsTUFBZSxHQUFHLENBQW9CO0FBQzdGLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsdUNBQXVDO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE1BQU0sdUNBQXVDLHFCQUFxQjtBQUNsRTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixNQUFNLEdBQUcsWUFBWTtBQUN0QyxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVcsTUFBZSxHQUFHLENBQW9CO0FBQ2pEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0ZBQW9GLGlDQUFpQyxpQkFBaUI7QUFDdEk7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhO0FBQ2I7QUFDQSxvQkFBb0Isa0JBQWtCO0FBQ3RDO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsY0FBYztBQUNkO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzQ0FBc0M7QUFDdEM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUk7QUFDSjtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUVBQWlFLGFBQWE7QUFDOUU7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLFVBQVU7QUFDakQ7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFb0giLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvenVzdGFuZC9lc20vbWlkZGxld2FyZS5tanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgcmVkdXhJbXBsID0gKHJlZHVjZXIsIGluaXRpYWwpID0+IChzZXQsIF9nZXQsIGFwaSkgPT4ge1xuICBhcGkuZGlzcGF0Y2ggPSAoYWN0aW9uKSA9PiB7XG4gICAgc2V0KChzdGF0ZSkgPT4gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSwgZmFsc2UsIGFjdGlvbik7XG4gICAgcmV0dXJuIGFjdGlvbjtcbiAgfTtcbiAgYXBpLmRpc3BhdGNoRnJvbURldnRvb2xzID0gdHJ1ZTtcbiAgcmV0dXJuIHsgZGlzcGF0Y2g6ICguLi5hcmdzKSA9PiBhcGkuZGlzcGF0Y2goLi4uYXJncyksIC4uLmluaXRpYWwgfTtcbn07XG5jb25zdCByZWR1eCA9IHJlZHV4SW1wbDtcblxuY29uc3Qgc2hvdWxkRGlzcGF0Y2hGcm9tRGV2dG9vbHMgPSAoYXBpKSA9PiAhIWFwaS5kaXNwYXRjaEZyb21EZXZ0b29scyAmJiB0eXBlb2YgYXBpLmRpc3BhdGNoID09PSBcImZ1bmN0aW9uXCI7XG5jb25zdCB0cmFja2VkQ29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuY29uc3QgZ2V0VHJhY2tlZENvbm5lY3Rpb25TdGF0ZSA9IChuYW1lKSA9PiB7XG4gIGNvbnN0IGFwaSA9IHRyYWNrZWRDb25uZWN0aW9ucy5nZXQobmFtZSk7XG4gIGlmICghYXBpKSByZXR1cm4ge307XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoYXBpLnN0b3JlcykubWFwKChba2V5LCBhcGkyXSkgPT4gW2tleSwgYXBpMi5nZXRTdGF0ZSgpXSlcbiAgKTtcbn07XG5jb25zdCBleHRyYWN0Q29ubmVjdGlvbkluZm9ybWF0aW9uID0gKHN0b3JlLCBleHRlbnNpb25Db25uZWN0b3IsIG9wdGlvbnMpID0+IHtcbiAgaWYgKHN0b3JlID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1bnRyYWNrZWRcIixcbiAgICAgIGNvbm5lY3Rpb246IGV4dGVuc2lvbkNvbm5lY3Rvci5jb25uZWN0KG9wdGlvbnMpXG4gICAgfTtcbiAgfVxuICBjb25zdCBleGlzdGluZ0Nvbm5lY3Rpb24gPSB0cmFja2VkQ29ubmVjdGlvbnMuZ2V0KG9wdGlvbnMubmFtZSk7XG4gIGlmIChleGlzdGluZ0Nvbm5lY3Rpb24pIHtcbiAgICByZXR1cm4geyB0eXBlOiBcInRyYWNrZWRcIiwgc3RvcmUsIC4uLmV4aXN0aW5nQ29ubmVjdGlvbiB9O1xuICB9XG4gIGNvbnN0IG5ld0Nvbm5lY3Rpb24gPSB7XG4gICAgY29ubmVjdGlvbjogZXh0ZW5zaW9uQ29ubmVjdG9yLmNvbm5lY3Qob3B0aW9ucyksXG4gICAgc3RvcmVzOiB7fVxuICB9O1xuICB0cmFja2VkQ29ubmVjdGlvbnMuc2V0KG9wdGlvbnMubmFtZSwgbmV3Q29ubmVjdGlvbik7XG4gIHJldHVybiB7IHR5cGU6IFwidHJhY2tlZFwiLCBzdG9yZSwgLi4ubmV3Q29ubmVjdGlvbiB9O1xufTtcbmNvbnN0IHJlbW92ZVN0b3JlRnJvbVRyYWNrZWRDb25uZWN0aW9ucyA9IChuYW1lLCBzdG9yZSkgPT4ge1xuICBpZiAoc3RvcmUgPT09IHZvaWQgMCkgcmV0dXJuO1xuICBjb25zdCBjb25uZWN0aW9uSW5mbyA9IHRyYWNrZWRDb25uZWN0aW9ucy5nZXQobmFtZSk7XG4gIGlmICghY29ubmVjdGlvbkluZm8pIHJldHVybjtcbiAgZGVsZXRlIGNvbm5lY3Rpb25JbmZvLnN0b3Jlc1tzdG9yZV07XG4gIGlmIChPYmplY3Qua2V5cyhjb25uZWN0aW9uSW5mby5zdG9yZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHRyYWNrZWRDb25uZWN0aW9ucy5kZWxldGUobmFtZSk7XG4gIH1cbn07XG5jb25zdCB2OFN0YWNrTGluZVJlID0gLy4rICguKykgLisvO1xuY29uc3QgZ2Vja29TdGFja0xpbmVSZSA9IC9eKFteQF0rKUAvO1xuZnVuY3Rpb24gZmluZENhbGxlck5hbWUoc3RhY2spIHtcbiAgdmFyIF9hLCBfYiwgX2M7XG4gIGlmICghc3RhY2spIHJldHVybiB2b2lkIDA7XG4gIGNvbnN0IHRyYWNlTGluZXMgPSBzdGFjay5zcGxpdChcIlxcblwiKTtcbiAgY29uc3QgYXBpU2V0U3RhdGVMaW5lSW5kZXggPSB0cmFjZUxpbmVzLmZpbmRJbmRleChcbiAgICAodHJhY2VMaW5lKSA9PiB0cmFjZUxpbmUuaW5jbHVkZXMoXCJhcGkuc2V0U3RhdGVcIilcbiAgKTtcbiAgaWYgKGFwaVNldFN0YXRlTGluZUluZGV4IDwgMCkgcmV0dXJuIHZvaWQgMDtcbiAgY29uc3QgY2FsbGVyTGluZSA9ICgoX2EgPSB0cmFjZUxpbmVzW2FwaVNldFN0YXRlTGluZUluZGV4ICsgMV0pID09IG51bGwgPyB2b2lkIDAgOiBfYS50cmltKCkpIHx8IFwiXCI7XG4gIHJldHVybiAoKF9iID0gdjhTdGFja0xpbmVSZS5leGVjKGNhbGxlckxpbmUpKSA9PSBudWxsID8gdm9pZCAwIDogX2JbMV0pIHx8ICgoX2MgPSBnZWNrb1N0YWNrTGluZVJlLmV4ZWMoY2FsbGVyTGluZSkpID09IG51bGwgPyB2b2lkIDAgOiBfY1sxXSk7XG59XG5jb25zdCBkZXZ0b29sc0ltcGwgPSAoZm4sIGRldnRvb2xzT3B0aW9ucyA9IHt9KSA9PiAoc2V0LCBnZXQsIGFwaSkgPT4ge1xuICBjb25zdCB7IGVuYWJsZWQsIGFub255bW91c0FjdGlvblR5cGUsIHN0b3JlLCAuLi5vcHRpb25zIH0gPSBkZXZ0b29sc09wdGlvbnM7XG4gIGxldCBleHRlbnNpb25Db25uZWN0b3I7XG4gIHRyeSB7XG4gICAgZXh0ZW5zaW9uQ29ubmVjdG9yID0gKGVuYWJsZWQgIT0gbnVsbCA/IGVuYWJsZWQgOiAoaW1wb3J0Lm1ldGEuZW52ID8gaW1wb3J0Lm1ldGEuZW52Lk1PREUgOiB2b2lkIDApICE9PSBcInByb2R1Y3Rpb25cIikgJiYgd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX187XG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxuICBpZiAoIWV4dGVuc2lvbkNvbm5lY3Rvcikge1xuICAgIHJldHVybiBmbihzZXQsIGdldCwgYXBpKTtcbiAgfVxuICBjb25zdCB7IGNvbm5lY3Rpb24sIC4uLmNvbm5lY3Rpb25JbmZvcm1hdGlvbiB9ID0gZXh0cmFjdENvbm5lY3Rpb25JbmZvcm1hdGlvbihzdG9yZSwgZXh0ZW5zaW9uQ29ubmVjdG9yLCBvcHRpb25zKTtcbiAgbGV0IGlzUmVjb3JkaW5nID0gdHJ1ZTtcbiAgYXBpLnNldFN0YXRlID0gKChzdGF0ZSwgcmVwbGFjZSwgbmFtZU9yQWN0aW9uKSA9PiB7XG4gICAgY29uc3QgciA9IHNldChzdGF0ZSwgcmVwbGFjZSk7XG4gICAgaWYgKCFpc1JlY29yZGluZykgcmV0dXJuIHI7XG4gICAgY29uc3QgYWN0aW9uID0gbmFtZU9yQWN0aW9uID09PSB2b2lkIDAgPyB7XG4gICAgICB0eXBlOiBhbm9ueW1vdXNBY3Rpb25UeXBlIHx8IGZpbmRDYWxsZXJOYW1lKG5ldyBFcnJvcigpLnN0YWNrKSB8fCBcImFub255bW91c1wiXG4gICAgfSA6IHR5cGVvZiBuYW1lT3JBY3Rpb24gPT09IFwic3RyaW5nXCIgPyB7IHR5cGU6IG5hbWVPckFjdGlvbiB9IDogbmFtZU9yQWN0aW9uO1xuICAgIGlmIChzdG9yZSA9PT0gdm9pZCAwKSB7XG4gICAgICBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLnNlbmQoYWN0aW9uLCBnZXQoKSk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9XG4gICAgY29ubmVjdGlvbiA9PSBudWxsID8gdm9pZCAwIDogY29ubmVjdGlvbi5zZW5kKFxuICAgICAge1xuICAgICAgICAuLi5hY3Rpb24sXG4gICAgICAgIHR5cGU6IGAke3N0b3JlfS8ke2FjdGlvbi50eXBlfWBcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIC4uLmdldFRyYWNrZWRDb25uZWN0aW9uU3RhdGUob3B0aW9ucy5uYW1lKSxcbiAgICAgICAgW3N0b3JlXTogYXBpLmdldFN0YXRlKClcbiAgICAgIH1cbiAgICApO1xuICAgIHJldHVybiByO1xuICB9KTtcbiAgYXBpLmRldnRvb2xzID0ge1xuICAgIGNsZWFudXA6ICgpID0+IHtcbiAgICAgIGlmIChjb25uZWN0aW9uICYmIHR5cGVvZiBjb25uZWN0aW9uLnVuc3Vic2NyaWJlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgY29ubmVjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgcmVtb3ZlU3RvcmVGcm9tVHJhY2tlZENvbm5lY3Rpb25zKG9wdGlvbnMubmFtZSwgc3RvcmUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc2V0U3RhdGVGcm9tRGV2dG9vbHMgPSAoLi4uYSkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsSXNSZWNvcmRpbmcgPSBpc1JlY29yZGluZztcbiAgICBpc1JlY29yZGluZyA9IGZhbHNlO1xuICAgIHNldCguLi5hKTtcbiAgICBpc1JlY29yZGluZyA9IG9yaWdpbmFsSXNSZWNvcmRpbmc7XG4gIH07XG4gIGNvbnN0IGluaXRpYWxTdGF0ZSA9IGZuKGFwaS5zZXRTdGF0ZSwgZ2V0LCBhcGkpO1xuICBpZiAoY29ubmVjdGlvbkluZm9ybWF0aW9uLnR5cGUgPT09IFwidW50cmFja2VkXCIpIHtcbiAgICBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLmluaXQoaW5pdGlhbFN0YXRlKTtcbiAgfSBlbHNlIHtcbiAgICBjb25uZWN0aW9uSW5mb3JtYXRpb24uc3RvcmVzW2Nvbm5lY3Rpb25JbmZvcm1hdGlvbi5zdG9yZV0gPSBhcGk7XG4gICAgY29ubmVjdGlvbiA9PSBudWxsID8gdm9pZCAwIDogY29ubmVjdGlvbi5pbml0KFxuICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhjb25uZWN0aW9uSW5mb3JtYXRpb24uc3RvcmVzKS5tYXAoKFtrZXksIHN0b3JlMl0pID0+IFtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAga2V5ID09PSBjb25uZWN0aW9uSW5mb3JtYXRpb24uc3RvcmUgPyBpbml0aWFsU3RhdGUgOiBzdG9yZTIuZ2V0U3RhdGUoKVxuICAgICAgICBdKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgaWYgKHNob3VsZERpc3BhdGNoRnJvbURldnRvb2xzKGFwaSkpIHtcbiAgICBsZXQgZGlkV2FybkFib3V0UmVzZXJ2ZWRBY3Rpb25UeXBlID0gZmFsc2U7XG4gICAgY29uc3Qgb3JpZ2luYWxEaXNwYXRjaCA9IGFwaS5kaXNwYXRjaDtcbiAgICBhcGkuZGlzcGF0Y2ggPSAoLi4uYXJncykgPT4ge1xuICAgICAgaWYgKChpbXBvcnQubWV0YS5lbnYgPyBpbXBvcnQubWV0YS5lbnYuTU9ERSA6IHZvaWQgMCkgIT09IFwicHJvZHVjdGlvblwiICYmIGFyZ3NbMF0udHlwZSA9PT0gXCJfX3NldFN0YXRlXCIgJiYgIWRpZFdhcm5BYm91dFJlc2VydmVkQWN0aW9uVHlwZSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgJ1t6dXN0YW5kIGRldnRvb2xzIG1pZGRsZXdhcmVdIFwiX19zZXRTdGF0ZVwiIGFjdGlvbiB0eXBlIGlzIHJlc2VydmVkIHRvIHNldCBzdGF0ZSBmcm9tIHRoZSBkZXZ0b29scy4gQXZvaWQgdXNpbmcgaXQuJ1xuICAgICAgICApO1xuICAgICAgICBkaWRXYXJuQWJvdXRSZXNlcnZlZEFjdGlvblR5cGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgb3JpZ2luYWxEaXNwYXRjaCguLi5hcmdzKTtcbiAgICB9O1xuICB9XG4gIGNvbm5lY3Rpb24uc3Vic2NyaWJlKChtZXNzYWdlKSA9PiB7XG4gICAgdmFyIF9hO1xuICAgIHN3aXRjaCAobWVzc2FnZS50eXBlKSB7XG4gICAgICBjYXNlIFwiQUNUSU9OXCI6XG4gICAgICAgIGlmICh0eXBlb2YgbWVzc2FnZS5wYXlsb2FkICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIFwiW3p1c3RhbmQgZGV2dG9vbHMgbWlkZGxld2FyZV0gVW5zdXBwb3J0ZWQgYWN0aW9uIGZvcm1hdFwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlSnNvblRoZW4oXG4gICAgICAgICAgbWVzc2FnZS5wYXlsb2FkLFxuICAgICAgICAgIChhY3Rpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gXCJfX3NldFN0YXRlXCIpIHtcbiAgICAgICAgICAgICAgaWYgKHN0b3JlID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21EZXZ0b29scyhhY3Rpb24uc3RhdGUpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoYWN0aW9uLnN0YXRlKS5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgICAgICBbenVzdGFuZCBkZXZ0b29scyBtaWRkbGV3YXJlXSBVbnN1cHBvcnRlZCBfX3NldFN0YXRlIGFjdGlvbiBmb3JtYXQuXG4gICAgICAgICAgICAgICAgICAgIFdoZW4gdXNpbmcgJ3N0b3JlJyBvcHRpb24gaW4gZGV2dG9vbHMoKSwgdGhlICdzdGF0ZScgc2hvdWxkIGhhdmUgb25seSBvbmUga2V5LCB3aGljaCBpcyBhIHZhbHVlIG9mICdzdG9yZScgdGhhdCB3YXMgcGFzc2VkIGluIGRldnRvb2xzKCksXG4gICAgICAgICAgICAgICAgICAgIGFuZCB2YWx1ZSBvZiB0aGlzIG9ubHkga2V5IHNob3VsZCBiZSBhIHN0YXRlIG9iamVjdC4gRXhhbXBsZTogeyBcInR5cGVcIjogXCJfX3NldFN0YXRlXCIsIFwic3RhdGVcIjogeyBcImFiYzEyM1N0b3JlXCI6IHsgXCJmb29cIjogXCJiYXJcIiB9IH0gfVxuICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBzdGF0ZUZyb21EZXZ0b29scyA9IGFjdGlvbi5zdGF0ZVtzdG9yZV07XG4gICAgICAgICAgICAgIGlmIChzdGF0ZUZyb21EZXZ0b29scyA9PT0gdm9pZCAwIHx8IHN0YXRlRnJvbURldnRvb2xzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShhcGkuZ2V0U3RhdGUoKSkgIT09IEpTT04uc3RyaW5naWZ5KHN0YXRlRnJvbURldnRvb2xzKSkge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbURldnRvb2xzKHN0YXRlRnJvbURldnRvb2xzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2hvdWxkRGlzcGF0Y2hGcm9tRGV2dG9vbHMoYXBpKSkge1xuICAgICAgICAgICAgICBhcGkuZGlzcGF0Y2goYWN0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICBjYXNlIFwiRElTUEFUQ0hcIjpcbiAgICAgICAgc3dpdGNoIChtZXNzYWdlLnBheWxvYWQudHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJSRVNFVFwiOlxuICAgICAgICAgICAgc2V0U3RhdGVGcm9tRGV2dG9vbHMoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICAgIGlmIChzdG9yZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLmluaXQoYXBpLmdldFN0YXRlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uaW5pdChnZXRUcmFja2VkQ29ubmVjdGlvblN0YXRlKG9wdGlvbnMubmFtZSkpO1xuICAgICAgICAgIGNhc2UgXCJDT01NSVRcIjpcbiAgICAgICAgICAgIGlmIChzdG9yZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uaW5pdChhcGkuZ2V0U3RhdGUoKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLmluaXQoZ2V0VHJhY2tlZENvbm5lY3Rpb25TdGF0ZShvcHRpb25zLm5hbWUpKTtcbiAgICAgICAgICBjYXNlIFwiUk9MTEJBQ0tcIjpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUpzb25UaGVuKG1lc3NhZ2Uuc3RhdGUsIChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3RvcmUgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbURldnRvb2xzKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLmluaXQoYXBpLmdldFN0YXRlKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21EZXZ0b29scyhzdGF0ZVtzdG9yZV0pO1xuICAgICAgICAgICAgICBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLmluaXQoZ2V0VHJhY2tlZENvbm5lY3Rpb25TdGF0ZShvcHRpb25zLm5hbWUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGNhc2UgXCJKVU1QX1RPX1NUQVRFXCI6XG4gICAgICAgICAgY2FzZSBcIkpVTVBfVE9fQUNUSU9OXCI6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VKc29uVGhlbihtZXNzYWdlLnN0YXRlLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHN0b3JlID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21EZXZ0b29scyhzdGF0ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShhcGkuZ2V0U3RhdGUoKSkgIT09IEpTT04uc3RyaW5naWZ5KHN0YXRlW3N0b3JlXSkpIHtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21EZXZ0b29scyhzdGF0ZVtzdG9yZV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBjYXNlIFwiSU1QT1JUX1NUQVRFXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmV4dExpZnRlZFN0YXRlIH0gPSBtZXNzYWdlLnBheWxvYWQ7XG4gICAgICAgICAgICBjb25zdCBsYXN0Q29tcHV0ZWRTdGF0ZSA9IChfYSA9IG5leHRMaWZ0ZWRTdGF0ZS5jb21wdXRlZFN0YXRlcy5zbGljZSgtMSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfYS5zdGF0ZTtcbiAgICAgICAgICAgIGlmICghbGFzdENvbXB1dGVkU3RhdGUpIHJldHVybjtcbiAgICAgICAgICAgIGlmIChzdG9yZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgIHNldFN0YXRlRnJvbURldnRvb2xzKGxhc3RDb21wdXRlZFN0YXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldFN0YXRlRnJvbURldnRvb2xzKGxhc3RDb21wdXRlZFN0YXRlW3N0b3JlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLnNlbmQoXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIC8vIEZJWE1FIG5vLWFueVxuICAgICAgICAgICAgICBuZXh0TGlmdGVkU3RhdGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJQQVVTRV9SRUNPUkRJTkdcIjpcbiAgICAgICAgICAgIHJldHVybiBpc1JlY29yZGluZyA9ICFpc1JlY29yZGluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbn07XG5jb25zdCBkZXZ0b29scyA9IGRldnRvb2xzSW1wbDtcbmNvbnN0IHBhcnNlSnNvblRoZW4gPSAoc3RyaW5naWZpZWQsIGZuKSA9PiB7XG4gIGxldCBwYXJzZWQ7XG4gIHRyeSB7XG4gICAgcGFyc2VkID0gSlNPTi5wYXJzZShzdHJpbmdpZmllZCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKFxuICAgICAgXCJbenVzdGFuZCBkZXZ0b29scyBtaWRkbGV3YXJlXSBDb3VsZCBub3QgcGFyc2UgdGhlIHJlY2VpdmVkIGpzb25cIixcbiAgICAgIGVcbiAgICApO1xuICB9XG4gIGlmIChwYXJzZWQgIT09IHZvaWQgMCkgZm4ocGFyc2VkKTtcbn07XG5cbmNvbnN0IHN1YnNjcmliZVdpdGhTZWxlY3RvckltcGwgPSAoZm4pID0+IChzZXQsIGdldCwgYXBpKSA9PiB7XG4gIGNvbnN0IG9yaWdTdWJzY3JpYmUgPSBhcGkuc3Vic2NyaWJlO1xuICBhcGkuc3Vic2NyaWJlID0gKChzZWxlY3Rvciwgb3B0TGlzdGVuZXIsIG9wdGlvbnMpID0+IHtcbiAgICBsZXQgbGlzdGVuZXIgPSBzZWxlY3RvcjtcbiAgICBpZiAob3B0TGlzdGVuZXIpIHtcbiAgICAgIGNvbnN0IGVxdWFsaXR5Rm4gPSAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5lcXVhbGl0eUZuKSB8fCBPYmplY3QuaXM7XG4gICAgICBsZXQgY3VycmVudFNsaWNlID0gc2VsZWN0b3IoYXBpLmdldFN0YXRlKCkpO1xuICAgICAgbGlzdGVuZXIgPSAoc3RhdGUpID0+IHtcbiAgICAgICAgY29uc3QgbmV4dFNsaWNlID0gc2VsZWN0b3Ioc3RhdGUpO1xuICAgICAgICBpZiAoIWVxdWFsaXR5Rm4oY3VycmVudFNsaWNlLCBuZXh0U2xpY2UpKSB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNTbGljZSA9IGN1cnJlbnRTbGljZTtcbiAgICAgICAgICBvcHRMaXN0ZW5lcihjdXJyZW50U2xpY2UgPSBuZXh0U2xpY2UsIHByZXZpb3VzU2xpY2UpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMuZmlyZUltbWVkaWF0ZWx5KSB7XG4gICAgICAgIG9wdExpc3RlbmVyKGN1cnJlbnRTbGljZSwgY3VycmVudFNsaWNlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9yaWdTdWJzY3JpYmUobGlzdGVuZXIpO1xuICB9KTtcbiAgY29uc3QgaW5pdGlhbFN0YXRlID0gZm4oc2V0LCBnZXQsIGFwaSk7XG4gIHJldHVybiBpbml0aWFsU3RhdGU7XG59O1xuY29uc3Qgc3Vic2NyaWJlV2l0aFNlbGVjdG9yID0gc3Vic2NyaWJlV2l0aFNlbGVjdG9ySW1wbDtcblxuZnVuY3Rpb24gY29tYmluZShpbml0aWFsU3RhdGUsIGNyZWF0ZSkge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IE9iamVjdC5hc3NpZ24oe30sIGluaXRpYWxTdGF0ZSwgY3JlYXRlKC4uLmFyZ3MpKTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlSlNPTlN0b3JhZ2UoZ2V0U3RvcmFnZSwgb3B0aW9ucykge1xuICBsZXQgc3RvcmFnZTtcbiAgdHJ5IHtcbiAgICBzdG9yYWdlID0gZ2V0U3RvcmFnZSgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IHBlcnNpc3RTdG9yYWdlID0ge1xuICAgIGdldEl0ZW06IChuYW1lKSA9PiB7XG4gICAgICB2YXIgX2E7XG4gICAgICBjb25zdCBwYXJzZSA9IChzdHIyKSA9PiB7XG4gICAgICAgIGlmIChzdHIyID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2Uoc3RyMiwgb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZXZpdmVyKTtcbiAgICAgIH07XG4gICAgICBjb25zdCBzdHIgPSAoX2EgPSBzdG9yYWdlLmdldEl0ZW0obmFtZSkpICE9IG51bGwgPyBfYSA6IG51bGw7XG4gICAgICBpZiAoc3RyIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICByZXR1cm4gc3RyLnRoZW4ocGFyc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcnNlKHN0cik7XG4gICAgfSxcbiAgICBzZXRJdGVtOiAobmFtZSwgbmV3VmFsdWUpID0+IHN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShuZXdWYWx1ZSwgb3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5yZXBsYWNlcikpLFxuICAgIHJlbW92ZUl0ZW06IChuYW1lKSA9PiBzdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSlcbiAgfTtcbiAgcmV0dXJuIHBlcnNpc3RTdG9yYWdlO1xufVxuY29uc3QgdG9UaGVuYWJsZSA9IChmbikgPT4gKGlucHV0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZm4oaW5wdXQpO1xuICAgIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgdGhlbihvbkZ1bGZpbGxlZCkge1xuICAgICAgICByZXR1cm4gdG9UaGVuYWJsZShvbkZ1bGZpbGxlZCkocmVzdWx0KTtcbiAgICAgIH0sXG4gICAgICBjYXRjaChfb25SZWplY3RlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICB9O1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRoZW4oX29uRnVsZmlsbGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfSxcbiAgICAgIGNhdGNoKG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRvVGhlbmFibGUob25SZWplY3RlZCkoZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxufTtcbmNvbnN0IHBlcnNpc3RJbXBsID0gKGNvbmZpZywgYmFzZU9wdGlvbnMpID0+IChzZXQsIGdldCwgYXBpKSA9PiB7XG4gIGxldCBvcHRpb25zID0ge1xuICAgIHN0b3JhZ2U6IGNyZWF0ZUpTT05TdG9yYWdlKCgpID0+IHdpbmRvdy5sb2NhbFN0b3JhZ2UpLFxuICAgIHBhcnRpYWxpemU6IChzdGF0ZSkgPT4gc3RhdGUsXG4gICAgdmVyc2lvbjogMCxcbiAgICBtZXJnZTogKHBlcnNpc3RlZFN0YXRlLCBjdXJyZW50U3RhdGUpID0+ICh7XG4gICAgICAuLi5jdXJyZW50U3RhdGUsXG4gICAgICAuLi5wZXJzaXN0ZWRTdGF0ZVxuICAgIH0pLFxuICAgIC4uLmJhc2VPcHRpb25zXG4gIH07XG4gIGxldCBoYXNIeWRyYXRlZCA9IGZhbHNlO1xuICBsZXQgaHlkcmF0aW9uVmVyc2lvbiA9IDA7XG4gIGNvbnN0IGh5ZHJhdGlvbkxpc3RlbmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gIGNvbnN0IGZpbmlzaEh5ZHJhdGlvbkxpc3RlbmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gIGxldCBzdG9yYWdlID0gb3B0aW9ucy5zdG9yYWdlO1xuICBpZiAoIXN0b3JhZ2UpIHtcbiAgICByZXR1cm4gY29uZmlnKFxuICAgICAgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbenVzdGFuZCBwZXJzaXN0IG1pZGRsZXdhcmVdIFVuYWJsZSB0byB1cGRhdGUgaXRlbSAnJHtvcHRpb25zLm5hbWV9JywgdGhlIGdpdmVuIHN0b3JhZ2UgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlLmBcbiAgICAgICAgKTtcbiAgICAgICAgc2V0KC4uLmFyZ3MpO1xuICAgICAgfSxcbiAgICAgIGdldCxcbiAgICAgIGFwaVxuICAgICk7XG4gIH1cbiAgY29uc3Qgc2V0SXRlbSA9ICgpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IG9wdGlvbnMucGFydGlhbGl6ZSh7IC4uLmdldCgpIH0pO1xuICAgIHJldHVybiBzdG9yYWdlLnNldEl0ZW0ob3B0aW9ucy5uYW1lLCB7XG4gICAgICBzdGF0ZSxcbiAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvblxuICAgIH0pO1xuICB9O1xuICBjb25zdCBzYXZlZFNldFN0YXRlID0gYXBpLnNldFN0YXRlO1xuICBhcGkuc2V0U3RhdGUgPSAoc3RhdGUsIHJlcGxhY2UpID0+IHtcbiAgICBzYXZlZFNldFN0YXRlKHN0YXRlLCByZXBsYWNlKTtcbiAgICByZXR1cm4gc2V0SXRlbSgpO1xuICB9O1xuICBjb25zdCBjb25maWdSZXN1bHQgPSBjb25maWcoXG4gICAgKC4uLmFyZ3MpID0+IHtcbiAgICAgIHNldCguLi5hcmdzKTtcbiAgICAgIHJldHVybiBzZXRJdGVtKCk7XG4gICAgfSxcbiAgICBnZXQsXG4gICAgYXBpXG4gICk7XG4gIGFwaS5nZXRJbml0aWFsU3RhdGUgPSAoKSA9PiBjb25maWdSZXN1bHQ7XG4gIGxldCBzdGF0ZUZyb21TdG9yYWdlO1xuICBjb25zdCBoeWRyYXRlID0gKCkgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKCFzdG9yYWdlKSByZXR1cm47XG4gICAgY29uc3QgY3VycmVudFZlcnNpb24gPSArK2h5ZHJhdGlvblZlcnNpb247XG4gICAgaGFzSHlkcmF0ZWQgPSBmYWxzZTtcbiAgICBoeWRyYXRpb25MaXN0ZW5lcnMuZm9yRWFjaCgoY2IpID0+IHtcbiAgICAgIHZhciBfYTI7XG4gICAgICByZXR1cm4gY2IoKF9hMiA9IGdldCgpKSAhPSBudWxsID8gX2EyIDogY29uZmlnUmVzdWx0KTtcbiAgICB9KTtcbiAgICBjb25zdCBwb3N0UmVoeWRyYXRpb25DYWxsYmFjayA9ICgoX2IgPSBvcHRpb25zLm9uUmVoeWRyYXRlU3RvcmFnZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwob3B0aW9ucywgKF9hID0gZ2V0KCkpICE9IG51bGwgPyBfYSA6IGNvbmZpZ1Jlc3VsdCkpIHx8IHZvaWQgMDtcbiAgICByZXR1cm4gdG9UaGVuYWJsZShzdG9yYWdlLmdldEl0ZW0uYmluZChzdG9yYWdlKSkob3B0aW9ucy5uYW1lKS50aGVuKChkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUpID0+IHtcbiAgICAgIGlmIChkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUudmVyc2lvbiA9PT0gXCJudW1iZXJcIiAmJiBkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUudmVyc2lvbiAhPT0gb3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMubWlncmF0ZSkge1xuICAgICAgICAgICAgY29uc3QgbWlncmF0aW9uID0gb3B0aW9ucy5taWdyYXRlKFxuICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUuc3RhdGUsXG4gICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN0b3JhZ2VWYWx1ZS52ZXJzaW9uXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKG1pZ3JhdGlvbiBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG1pZ3JhdGlvbi50aGVuKChyZXN1bHQpID0+IFt0cnVlLCByZXN1bHRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbdHJ1ZSwgbWlncmF0aW9uXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBTdGF0ZSBsb2FkZWQgZnJvbSBzdG9yYWdlIGNvdWxkbid0IGJlIG1pZ3JhdGVkIHNpbmNlIG5vIG1pZ3JhdGUgZnVuY3Rpb24gd2FzIHByb3ZpZGVkYFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIFtmYWxzZSwgZGVzZXJpYWxpemVkU3RvcmFnZVZhbHVlLnN0YXRlXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFtmYWxzZSwgdm9pZCAwXTtcbiAgICB9KS50aGVuKChtaWdyYXRpb25SZXN1bHQpID0+IHtcbiAgICAgIHZhciBfYTI7XG4gICAgICBpZiAoY3VycmVudFZlcnNpb24gIT09IGh5ZHJhdGlvblZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgW21pZ3JhdGVkLCBtaWdyYXRlZFN0YXRlXSA9IG1pZ3JhdGlvblJlc3VsdDtcbiAgICAgIHN0YXRlRnJvbVN0b3JhZ2UgPSBvcHRpb25zLm1lcmdlKFxuICAgICAgICBtaWdyYXRlZFN0YXRlLFxuICAgICAgICAoX2EyID0gZ2V0KCkpICE9IG51bGwgPyBfYTIgOiBjb25maWdSZXN1bHRcbiAgICAgICk7XG4gICAgICBzZXQoc3RhdGVGcm9tU3RvcmFnZSwgdHJ1ZSk7XG4gICAgICBpZiAobWlncmF0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHNldEl0ZW0oKTtcbiAgICAgIH1cbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIGlmIChjdXJyZW50VmVyc2lvbiAhPT0gaHlkcmF0aW9uVmVyc2lvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBwb3N0UmVoeWRyYXRpb25DYWxsYmFjayA9PSBudWxsID8gdm9pZCAwIDogcG9zdFJlaHlkcmF0aW9uQ2FsbGJhY2soZ2V0KCksIHZvaWQgMCk7XG4gICAgICBzdGF0ZUZyb21TdG9yYWdlID0gZ2V0KCk7XG4gICAgICBoYXNIeWRyYXRlZCA9IHRydWU7XG4gICAgICBmaW5pc2hIeWRyYXRpb25MaXN0ZW5lcnMuZm9yRWFjaCgoY2IpID0+IGNiKHN0YXRlRnJvbVN0b3JhZ2UpKTtcbiAgICB9KS5jYXRjaCgoZSkgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRWZXJzaW9uICE9PSBoeWRyYXRpb25WZXJzaW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHBvc3RSZWh5ZHJhdGlvbkNhbGxiYWNrID09IG51bGwgPyB2b2lkIDAgOiBwb3N0UmVoeWRyYXRpb25DYWxsYmFjayh2b2lkIDAsIGUpO1xuICAgIH0pO1xuICB9O1xuICBhcGkucGVyc2lzdCA9IHtcbiAgICBzZXRPcHRpb25zOiAobmV3T3B0aW9ucykgPT4ge1xuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgLi4ubmV3T3B0aW9uc1xuICAgICAgfTtcbiAgICAgIGlmIChuZXdPcHRpb25zLnN0b3JhZ2UpIHtcbiAgICAgICAgc3RvcmFnZSA9IG5ld09wdGlvbnMuc3RvcmFnZTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNsZWFyU3RvcmFnZTogKCkgPT4ge1xuICAgICAgc3RvcmFnZSA9PSBudWxsID8gdm9pZCAwIDogc3RvcmFnZS5yZW1vdmVJdGVtKG9wdGlvbnMubmFtZSk7XG4gICAgfSxcbiAgICBnZXRPcHRpb25zOiAoKSA9PiBvcHRpb25zLFxuICAgIHJlaHlkcmF0ZTogKCkgPT4gaHlkcmF0ZSgpLFxuICAgIGhhc0h5ZHJhdGVkOiAoKSA9PiBoYXNIeWRyYXRlZCxcbiAgICBvbkh5ZHJhdGU6IChjYikgPT4ge1xuICAgICAgaHlkcmF0aW9uTGlzdGVuZXJzLmFkZChjYik7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBoeWRyYXRpb25MaXN0ZW5lcnMuZGVsZXRlKGNiKTtcbiAgICAgIH07XG4gICAgfSxcbiAgICBvbkZpbmlzaEh5ZHJhdGlvbjogKGNiKSA9PiB7XG4gICAgICBmaW5pc2hIeWRyYXRpb25MaXN0ZW5lcnMuYWRkKGNiKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGZpbmlzaEh5ZHJhdGlvbkxpc3RlbmVycy5kZWxldGUoY2IpO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIGlmICghb3B0aW9ucy5za2lwSHlkcmF0aW9uKSB7XG4gICAgaHlkcmF0ZSgpO1xuICB9XG4gIHJldHVybiBzdGF0ZUZyb21TdG9yYWdlIHx8IGNvbmZpZ1Jlc3VsdDtcbn07XG5jb25zdCBwZXJzaXN0ID0gcGVyc2lzdEltcGw7XG5cbmZ1bmN0aW9uIHNzclNhZmUoY29uZmlnLCBpc1NTUiA9IHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgcmV0dXJuIChzZXQsIGdldCwgYXBpKSA9PiB7XG4gICAgaWYgKCFpc1NTUikge1xuICAgICAgcmV0dXJuIGNvbmZpZyhzZXQsIGdldCwgYXBpKTtcbiAgICB9XG4gICAgY29uc3Qgc3NyU2V0ID0gKCkgPT4ge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNldCBzdGF0ZSBvZiBadXN0YW5kIHN0b3JlIGluIFNTUlwiKTtcbiAgICB9O1xuICAgIGFwaS5zZXRTdGF0ZSA9IHNzclNldDtcbiAgICByZXR1cm4gY29uZmlnKHNzclNldCwgZ2V0LCBhcGkpO1xuICB9O1xufVxuXG5leHBvcnQgeyBjb21iaW5lLCBjcmVhdGVKU09OU3RvcmFnZSwgZGV2dG9vbHMsIHBlcnNpc3QsIHJlZHV4LCBzdWJzY3JpYmVXaXRoU2VsZWN0b3IsIHNzclNhZmUgYXMgdW5zdGFibGVfc3NyU2FmZSB9O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zustand/esm/middleware.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zustand/esm/react.mjs":
|
||
/*!********************************************!*\
|
||
!*** ./node_modules/zustand/esm/react.mjs ***!
|
||
\********************************************/
|
||
/***/ ((__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 */ create: () => (/* binding */ create),\n/* harmony export */ useStore: () => (/* binding */ useStore)\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 zustand_vanilla__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zustand/vanilla */ \"(app-pages-browser)/./node_modules/zustand/esm/vanilla.mjs\");\n\n\n\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity) {\n const slice = react__WEBPACK_IMPORTED_MODULE_0__.useSyncExternalStore(\n api.subscribe,\n react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => selector(api.getState()), [api, selector]),\n react__WEBPACK_IMPORTED_MODULE_0__.useCallback(() => selector(api.getInitialState()), [api, selector])\n );\n react__WEBPACK_IMPORTED_MODULE_0__.useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n const api = (0,zustand_vanilla__WEBPACK_IMPORTED_MODULE_1__.createStore)(createState);\n const useBoundStore = (selector) => useStore(api, selector);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = ((createState) => createState ? createImpl(createState) : createImpl);\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96dXN0YW5kL2VzbS9yZWFjdC5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUEwQjtBQUNvQjs7QUFFOUM7QUFDQTtBQUNBLGdCQUFnQix1REFBMEI7QUFDMUM7QUFDQSxJQUFJLDhDQUFpQjtBQUNyQixJQUFJLDhDQUFpQjtBQUNyQjtBQUNBLEVBQUUsZ0RBQW1CO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGNBQWMsNERBQVc7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFNEIiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9ub2RlX21vZHVsZXMvenVzdGFuZC9lc20vcmVhY3QubWpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBjcmVhdGVTdG9yZSB9IGZyb20gJ3p1c3RhbmQvdmFuaWxsYSc7XG5cbmNvbnN0IGlkZW50aXR5ID0gKGFyZykgPT4gYXJnO1xuZnVuY3Rpb24gdXNlU3RvcmUoYXBpLCBzZWxlY3RvciA9IGlkZW50aXR5KSB7XG4gIGNvbnN0IHNsaWNlID0gUmVhY3QudXNlU3luY0V4dGVybmFsU3RvcmUoXG4gICAgYXBpLnN1YnNjcmliZSxcbiAgICBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiBzZWxlY3RvcihhcGkuZ2V0U3RhdGUoKSksIFthcGksIHNlbGVjdG9yXSksXG4gICAgUmVhY3QudXNlQ2FsbGJhY2soKCkgPT4gc2VsZWN0b3IoYXBpLmdldEluaXRpYWxTdGF0ZSgpKSwgW2FwaSwgc2VsZWN0b3JdKVxuICApO1xuICBSZWFjdC51c2VEZWJ1Z1ZhbHVlKHNsaWNlKTtcbiAgcmV0dXJuIHNsaWNlO1xufVxuY29uc3QgY3JlYXRlSW1wbCA9IChjcmVhdGVTdGF0ZSkgPT4ge1xuICBjb25zdCBhcGkgPSBjcmVhdGVTdG9yZShjcmVhdGVTdGF0ZSk7XG4gIGNvbnN0IHVzZUJvdW5kU3RvcmUgPSAoc2VsZWN0b3IpID0+IHVzZVN0b3JlKGFwaSwgc2VsZWN0b3IpO1xuICBPYmplY3QuYXNzaWduKHVzZUJvdW5kU3RvcmUsIGFwaSk7XG4gIHJldHVybiB1c2VCb3VuZFN0b3JlO1xufTtcbmNvbnN0IGNyZWF0ZSA9ICgoY3JlYXRlU3RhdGUpID0+IGNyZWF0ZVN0YXRlID8gY3JlYXRlSW1wbChjcmVhdGVTdGF0ZSkgOiBjcmVhdGVJbXBsKTtcblxuZXhwb3J0IHsgY3JlYXRlLCB1c2VTdG9yZSB9O1xuIl0sIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6WzBdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zustand/esm/react.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./node_modules/zustand/esm/vanilla.mjs":
|
||
/*!**********************************************!*\
|
||
!*** ./node_modules/zustand/esm/vanilla.mjs ***!
|
||
\**********************************************/
|
||
/***/ ((__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 */ createStore: () => (/* binding */ createStore)\n/* harmony export */ });\nconst createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = ((createState) => createState ? createStoreImpl(createState) : createStoreImpl);\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL25vZGVfbW9kdWxlcy96dXN0YW5kL2VzbS92YW5pbGxhLm1qcyIsIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSw4SEFBOEg7QUFDOUg7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCO0FBQ2hCO0FBQ0E7QUFDQTtBQUNBOztBQUV1QiIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL25vZGVfbW9kdWxlcy96dXN0YW5kL2VzbS92YW5pbGxhLm1qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBjcmVhdGVTdG9yZUltcGwgPSAoY3JlYXRlU3RhdGUpID0+IHtcbiAgbGV0IHN0YXRlO1xuICBjb25zdCBsaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICBjb25zdCBzZXRTdGF0ZSA9IChwYXJ0aWFsLCByZXBsYWNlKSA9PiB7XG4gICAgY29uc3QgbmV4dFN0YXRlID0gdHlwZW9mIHBhcnRpYWwgPT09IFwiZnVuY3Rpb25cIiA/IHBhcnRpYWwoc3RhdGUpIDogcGFydGlhbDtcbiAgICBpZiAoIU9iamVjdC5pcyhuZXh0U3RhdGUsIHN0YXRlKSkge1xuICAgICAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IHN0YXRlO1xuICAgICAgc3RhdGUgPSAocmVwbGFjZSAhPSBudWxsID8gcmVwbGFjZSA6IHR5cGVvZiBuZXh0U3RhdGUgIT09IFwib2JqZWN0XCIgfHwgbmV4dFN0YXRlID09PSBudWxsKSA/IG5leHRTdGF0ZSA6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCBuZXh0U3RhdGUpO1xuICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcihzdGF0ZSwgcHJldmlvdXNTdGF0ZSkpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgZ2V0U3RhdGUgPSAoKSA9PiBzdGF0ZTtcbiAgY29uc3QgZ2V0SW5pdGlhbFN0YXRlID0gKCkgPT4gaW5pdGlhbFN0YXRlO1xuICBjb25zdCBzdWJzY3JpYmUgPSAobGlzdGVuZXIpID0+IHtcbiAgICBsaXN0ZW5lcnMuYWRkKGxpc3RlbmVyKTtcbiAgICByZXR1cm4gKCkgPT4gbGlzdGVuZXJzLmRlbGV0ZShsaXN0ZW5lcik7XG4gIH07XG4gIGNvbnN0IGFwaSA9IHsgc2V0U3RhdGUsIGdldFN0YXRlLCBnZXRJbml0aWFsU3RhdGUsIHN1YnNjcmliZSB9O1xuICBjb25zdCBpbml0aWFsU3RhdGUgPSBzdGF0ZSA9IGNyZWF0ZVN0YXRlKHNldFN0YXRlLCBnZXRTdGF0ZSwgYXBpKTtcbiAgcmV0dXJuIGFwaTtcbn07XG5jb25zdCBjcmVhdGVTdG9yZSA9ICgoY3JlYXRlU3RhdGUpID0+IGNyZWF0ZVN0YXRlID8gY3JlYXRlU3RvcmVJbXBsKGNyZWF0ZVN0YXRlKSA6IGNyZWF0ZVN0b3JlSW1wbCk7XG5cbmV4cG9ydCB7IGNyZWF0ZVN0b3JlIH07XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbMF0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./node_modules/zustand/esm/vanilla.mjs\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/components/layout/Sidebar.tsx":
|
||
/*!*******************************************!*\
|
||
!*** ./src/components/layout/Sidebar.tsx ***!
|
||
\*******************************************/
|
||
/***/ ((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 */ Sidebar: () => (/* binding */ Sidebar)\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_link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! next/link */ \"(app-pages-browser)/./node_modules/next/dist/client/app-dir/link.js\");\n/* harmony import */ var next_link__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(next_link__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var next_navigation__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! next/navigation */ \"(app-pages-browser)/./node_modules/next/dist/api/navigation.js\");\n/* harmony import */ var next_image__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! next/image */ \"(app-pages-browser)/./node_modules/next/dist/api/image.js\");\n/* harmony import */ var next_themes__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! next-themes */ \"(app-pages-browser)/./node_modules/next-themes/dist/index.mjs\");\n/* harmony import */ var _barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! __barrel_optimize__?names=BellRing,CalendarDays,ClipboardList,LogOut,Menu,Settings,Stethoscope,Users,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/calendar-days.mjs\");\n/* harmony import */ var _barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! __barrel_optimize__?names=BellRing,CalendarDays,ClipboardList,LogOut,Menu,Settings,Stethoscope,Users,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/users.mjs\");\n/* harmony import */ var _barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! __barrel_optimize__?names=BellRing,CalendarDays,ClipboardList,LogOut,Menu,Settings,Stethoscope,Users,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/clipboard-list.mjs\");\n/* harmony import */ var _barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! __barrel_optimize__?names=BellRing,CalendarDays,ClipboardList,LogOut,Menu,Settings,Stethoscope,Users,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/bell-ring.mjs\");\n/* harmony import */ var _barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! __barrel_optimize__?names=BellRing,CalendarDays,ClipboardList,LogOut,Menu,Settings,Stethoscope,Users,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/stethoscope.mjs\");\n/* harmony import */ var _barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! __barrel_optimize__?names=BellRing,CalendarDays,ClipboardList,LogOut,Menu,Settings,Stethoscope,Users,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/settings.mjs\");\n/* harmony import */ var _barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! __barrel_optimize__?names=BellRing,CalendarDays,ClipboardList,LogOut,Menu,Settings,Stethoscope,Users,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/x.mjs\");\n/* harmony import */ var _barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! __barrel_optimize__?names=BellRing,CalendarDays,ClipboardList,LogOut,Menu,Settings,Stethoscope,Users,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/menu.mjs\");\n/* harmony import */ var _barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! __barrel_optimize__?names=BellRing,CalendarDays,ClipboardList,LogOut,Menu,Settings,Stethoscope,Users,X!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/log-out.mjs\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./src/lib/utils.ts\");\n/* harmony import */ var _lib_stores_uiStore__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/lib/stores/uiStore */ \"(app-pages-browser)/./src/lib/stores/uiStore.ts\");\n/* harmony import */ var _lib_stores_notificationStore__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/lib/stores/notificationStore */ \"(app-pages-browser)/./src/lib/stores/notificationStore.ts\");\n/* harmony import */ var _lib_stores_authStore__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/lib/stores/authStore */ \"(app-pages-browser)/./src/lib/stores/authStore.ts\");\n/* harmony import */ var _utils_supabase_client__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/utils/supabase/client */ \"(app-pages-browser)/./src/utils/supabase/client.ts\");\n/* harmony import */ var sonner__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! sonner */ \"(app-pages-browser)/./node_modules/sonner/dist/index.mjs\");\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @/components/ui/button */ \"(app-pages-browser)/./src/components/ui/button.tsx\");\n/* harmony import */ var _components_ui_badge__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @/components/ui/badge */ \"(app-pages-browser)/./src/components/ui/badge.tsx\");\n/* __next_internal_client_entry_do_not_use__ Sidebar auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst navItems = [\n {\n label: \"Calendario\",\n href: \"/dashboard/calendar\",\n icon: _barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_14__[\"default\"]\n },\n {\n label: \"Pacientes\",\n href: \"/dashboard/patients\",\n icon: _barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_15__[\"default\"]\n },\n {\n label: \"Citas\",\n href: \"/dashboard/appointments\",\n icon: _barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_16__[\"default\"]\n },\n {\n label: \"Notificaciones\",\n href: \"/dashboard/notifications\",\n icon: _barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_17__[\"default\"]\n },\n {\n label: \"Procedimientos\",\n href: \"/dashboard/procedures\",\n icon: _barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_18__[\"default\"],\n adminOnly: true\n },\n {\n label: \"Configuración\",\n href: \"/dashboard/settings\",\n icon: _barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_19__[\"default\"],\n adminOnly: true\n }\n];\n/**\n * Sidebar de navegación principal del dashboard.\n * Soporta colapso y muestra el badge de notificaciones pendientes.\n */ function Sidebar() {\n _s();\n const pathname = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.usePathname)();\n const router = (0,next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter)();\n const sidebarOpen = (0,_lib_stores_uiStore__WEBPACK_IMPORTED_MODULE_7__.useUIStore)({\n \"Sidebar.useUIStore[sidebarOpen]\": (s)=>s.sidebarOpen\n }[\"Sidebar.useUIStore[sidebarOpen]\"]);\n const toggleSidebar = (0,_lib_stores_uiStore__WEBPACK_IMPORTED_MODULE_7__.useUIStore)({\n \"Sidebar.useUIStore[toggleSidebar]\": (s)=>s.toggleSidebar\n }[\"Sidebar.useUIStore[toggleSidebar]\"]);\n const unreadCount = (0,_lib_stores_notificationStore__WEBPACK_IMPORTED_MODULE_8__.useNotificationStore)({\n \"Sidebar.useNotificationStore[unreadCount]\": (s)=>s.unreadCount\n }[\"Sidebar.useNotificationStore[unreadCount]\"]);\n const role = (0,_lib_stores_authStore__WEBPACK_IMPORTED_MODULE_9__.useAuthStore)({\n \"Sidebar.useAuthStore[role]\": (s)=>s.role\n }[\"Sidebar.useAuthStore[role]\"]);\n const reset = (0,_lib_stores_authStore__WEBPACK_IMPORTED_MODULE_9__.useAuthStore)({\n \"Sidebar.useAuthStore[reset]\": (s)=>s.reset\n }[\"Sidebar.useAuthStore[reset]\"]);\n const supabase = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)({\n \"Sidebar.useMemo[supabase]\": ()=>(0,_utils_supabase_client__WEBPACK_IMPORTED_MODULE_10__.createClient)()\n }[\"Sidebar.useMemo[supabase]\"], []);\n const { resolvedTheme } = (0,next_themes__WEBPACK_IMPORTED_MODULE_5__.useTheme)();\n const handleLogout = (0,react__WEBPACK_IMPORTED_MODULE_1__.useCallback)({\n \"Sidebar.useCallback[handleLogout]\": async ()=>{\n const { error } = await supabase.auth.signOut();\n if (error) {\n sonner__WEBPACK_IMPORTED_MODULE_11__.toast.error(\"Error al cerrar sesión\");\n return;\n }\n reset();\n router.push(\"/login\");\n }\n }[\"Sidebar.useCallback[handleLogout]\"], [\n reset,\n router,\n supabase\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"aside\", {\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_6__.cn)(\"flex flex-col bg-sidebar border-r border-sidebar-border transition-all duration-300 z-30\", \"fixed inset-y-0 left-0 md:relative md:translate-x-0\", sidebarOpen ? \"w-60 translate-x-0\" : \"w-16 -translate-x-full md:translate-x-0\"),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between px-4 py-5 border-b border-sidebar-border\",\n children: [\n sidebarOpen && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: \"/dashboard\",\n className: \"flex items-center hover:opacity-80 transition-opacity\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(next_image__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n src: resolvedTheme === \"dark\" ? \"/logo-cirux-dark.webp\" : \"/logo-cirux-light.webp\",\n alt: \"Cirux\",\n width: 120,\n height: 32,\n className: \"h-8 w-auto\",\n priority: true,\n suppressHydrationWarning: true\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 81,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 80,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_12__.Button, {\n variant: \"ghost\",\n size: \"icon\",\n onClick: toggleSidebar,\n className: \"text-sidebar-foreground hover:bg-sidebar-accent ml-auto\",\n \"aria-label\": sidebarOpen ? \"Colapsar sidebar\" : \"Expandir sidebar\",\n children: sidebarOpen ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n className: \"size-4\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 99,\n columnNumber: 26\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n className: \"size-4\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 99,\n columnNumber: 53\n }, this)\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 92,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 78,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"nav\", {\n className: \"flex-1 py-4 px-2 space-y-1 overflow-y-auto\",\n children: navItems.filter((item)=>!item.adminOnly || role === \"admin\").map((item)=>{\n const isActive = pathname.startsWith(item.href);\n const Icon = item.icon;\n const isNotif = item.href === \"/dashboard/notifications\";\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)((next_link__WEBPACK_IMPORTED_MODULE_2___default()), {\n href: item.href,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_6__.cn)(\"flex items-center gap-3 rounded-[12px] px-3 py-2.5 text-sm font-medium transition-colors\", \"text-sidebar-foreground hover:bg-sidebar-accent hover:text-primary\", isActive && \"bg-primary/10 text-primary\"),\n title: !sidebarOpen ? item.label : undefined,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative flex-shrink-0\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(Icon, {\n className: \"size-4\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 124,\n columnNumber: 19\n }, this),\n isNotif && unreadCount > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"absolute -top-1.5 -right-1.5 size-2 bg-secondary rounded-full\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 126,\n columnNumber: 21\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 123,\n columnNumber: 17\n }, this),\n sidebarOpen && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"truncate\",\n children: item.label\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 130,\n columnNumber: 19\n }, this),\n sidebarOpen && isNotif && unreadCount > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_badge__WEBPACK_IMPORTED_MODULE_13__.Badge, {\n variant: \"secondary\",\n className: \"ml-auto text-[10px] px-1.5 py-0 h-5\",\n children: unreadCount\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 133,\n columnNumber: 19\n }, this)\n ]\n }, item.href, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 113,\n columnNumber: 15\n }, this);\n })\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 104,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"px-2 py-3 border-t border-sidebar-border\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: handleLogout,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_6__.cn)(\"flex items-center gap-3 rounded-[12px] px-3 py-2.5 text-sm font-medium w-full\", \"text-sidebar-foreground hover:bg-destructive/10 hover:text-destructive transition-colors\"),\n title: !sidebarOpen ? \"Cerrar sesión\" : undefined,\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_BellRing_CalendarDays_ClipboardList_LogOut_Menu_Settings_Stethoscope_Users_X_lucide_react__WEBPACK_IMPORTED_MODULE_22__[\"default\"], {\n className: \"size-4 flex-shrink-0\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 155,\n columnNumber: 11\n }, this),\n sidebarOpen && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n children: \"Cerrar sesi\\xf3n\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 156,\n columnNumber: 27\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 147,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 146,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Sidebar.tsx\",\n lineNumber: 70,\n columnNumber: 5\n }, this);\n}\n_s(Sidebar, \"aiWOyXbJVVLPVxP5C7pUIGK59xQ=\", false, function() {\n return [\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.usePathname,\n next_navigation__WEBPACK_IMPORTED_MODULE_3__.useRouter,\n _lib_stores_uiStore__WEBPACK_IMPORTED_MODULE_7__.useUIStore,\n _lib_stores_uiStore__WEBPACK_IMPORTED_MODULE_7__.useUIStore,\n _lib_stores_notificationStore__WEBPACK_IMPORTED_MODULE_8__.useNotificationStore,\n _lib_stores_authStore__WEBPACK_IMPORTED_MODULE_9__.useAuthStore,\n _lib_stores_authStore__WEBPACK_IMPORTED_MODULE_9__.useAuthStore,\n next_themes__WEBPACK_IMPORTED_MODULE_5__.useTheme\n ];\n});\n_c = Sidebar;\nvar _c;\n$RefreshReg$(_c, \"Sidebar\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL2xheW91dC9TaWRlYmFyLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTZDO0FBQ2hCO0FBQzRCO0FBQzFCO0FBQ1E7QUFXakI7QUFDVztBQUNpQjtBQUNvQjtBQUNoQjtBQUNDO0FBQ3hCO0FBQ2lCO0FBQ0Y7QUFTOUMsTUFBTXdCLFdBQXNCO0lBQzFCO1FBQUVDLE9BQU87UUFBY0MsTUFBTTtRQUF1QkMsTUFBTXBCLHlKQUFZQTtJQUFDO0lBQ3ZFO1FBQUVrQixPQUFPO1FBQWFDLE1BQU07UUFBdUJDLE1BQU1uQix5SkFBS0E7SUFBQztJQUMvRDtRQUFFaUIsT0FBTztRQUFTQyxNQUFNO1FBQTJCQyxNQUFNZix5SkFBYUE7SUFBQztJQUN2RTtRQUFFYSxPQUFPO1FBQWtCQyxNQUFNO1FBQTRCQyxNQUFNbEIseUpBQVFBO0lBQUM7SUFDNUU7UUFBRWdCLE9BQU87UUFBa0JDLE1BQU07UUFBeUJDLE1BQU1qQix5SkFBV0E7UUFBRWtCLFdBQVc7SUFBSztJQUM3RjtRQUFFSCxPQUFPO1FBQWlCQyxNQUFNO1FBQXVCQyxNQUFNaEIseUpBQVFBO1FBQUVpQixXQUFXO0lBQUs7Q0FDeEY7QUFFRDs7O0NBR0MsR0FDTSxTQUFTQzs7SUFDZCxNQUFNQyxXQUFXM0IsNERBQVdBO0lBQzVCLE1BQU00QixTQUFTM0IsMERBQVNBO0lBQ3hCLE1BQU00QixjQUFjZiwrREFBVUE7MkNBQUMsQ0FBQ2dCLElBQU1BLEVBQUVELFdBQVc7O0lBQ25ELE1BQU1FLGdCQUFnQmpCLCtEQUFVQTs2Q0FBQyxDQUFDZ0IsSUFBTUEsRUFBRUMsYUFBYTs7SUFDdkQsTUFBTUMsY0FBY2pCLG1GQUFvQkE7cURBQUMsQ0FBQ2UsSUFBTUEsRUFBRUUsV0FBVzs7SUFDN0QsTUFBTUMsT0FBT2pCLG1FQUFZQTtzQ0FBQyxDQUFDYyxJQUFNQSxFQUFFRyxJQUFJOztJQUN2QyxNQUFNQyxRQUFRbEIsbUVBQVlBO3VDQUFDLENBQUNjLElBQU1BLEVBQUVJLEtBQUs7O0lBQ3pDLE1BQU1DLFdBQVd0Qyw4Q0FBT0E7cUNBQUMsSUFBTW9CLHFFQUFZQTtvQ0FBSSxFQUFFO0lBQ2pELE1BQU0sRUFBRW1CLGFBQWEsRUFBRSxHQUFHakMscURBQVFBO0lBRWxDLE1BQU1rQyxlQUFldkMsa0RBQVdBOzZDQUFDO1lBQy9CLE1BQU0sRUFBRXdDLEtBQUssRUFBRSxHQUFHLE1BQU1ILFNBQVNJLElBQUksQ0FBQ0MsT0FBTztZQUM3QyxJQUFJRixPQUFPO2dCQUNUcEIsMENBQUtBLENBQUNvQixLQUFLLENBQUM7Z0JBQ1o7WUFDRjtZQUNBSjtZQUNBTixPQUFPYSxJQUFJLENBQUM7UUFDZDs0Q0FBRztRQUFDUDtRQUFPTjtRQUFRTztLQUFTO0lBRTVCLHFCQUNFLDhEQUFDTztRQUNDQyxXQUFXOUIsOENBQUVBLENBQ1gsNEZBQ0EsdURBQ0FnQixjQUFjLHVCQUF1Qjs7MEJBSXZDLDhEQUFDZTtnQkFBSUQsV0FBVTs7b0JBQ1pkLDZCQUNDLDhEQUFDOUIsa0RBQUlBO3dCQUFDd0IsTUFBSzt3QkFBYW9CLFdBQVU7a0NBQ2hDLDRFQUFDekMsa0RBQUtBOzRCQUNKMkMsS0FBS1Qsa0JBQWtCLFNBQVMsMEJBQTBCOzRCQUMxRFUsS0FBSTs0QkFDSkMsT0FBTzs0QkFDUEMsUUFBUTs0QkFDUkwsV0FBVTs0QkFDVk0sUUFBUTs0QkFDUkMsd0JBQXdCOzs7Ozs7Ozs7OztrQ0FJOUIsOERBQUMvQiwwREFBTUE7d0JBQ0xnQyxTQUFRO3dCQUNSQyxNQUFLO3dCQUNMQyxTQUFTdEI7d0JBQ1RZLFdBQVU7d0JBQ1ZXLGNBQVl6QixjQUFjLHFCQUFxQjtrQ0FFOUNBLDRCQUFjLDhEQUFDakIseUpBQUNBOzRCQUFDK0IsV0FBVTs7Ozs7aURBQWMsOERBQUNoQyx5SkFBSUE7NEJBQUNnQyxXQUFVOzs7Ozs7Ozs7Ozs7Ozs7OzswQkFLOUQsOERBQUNZO2dCQUFJWixXQUFVOzBCQUNadEIsU0FDRW1DLE1BQU0sQ0FBQyxDQUFDQyxPQUFTLENBQUNBLEtBQUtoQyxTQUFTLElBQUlRLFNBQVMsU0FDN0N5QixHQUFHLENBQUMsQ0FBQ0Q7b0JBQ0osTUFBTUUsV0FBV2hDLFNBQVNpQyxVQUFVLENBQUNILEtBQUtsQyxJQUFJO29CQUM5QyxNQUFNc0MsT0FBT0osS0FBS2pDLElBQUk7b0JBQ3RCLE1BQU1zQyxVQUFVTCxLQUFLbEMsSUFBSSxLQUFLO29CQUU5QixxQkFDRSw4REFBQ3hCLGtEQUFJQTt3QkFFSHdCLE1BQU1rQyxLQUFLbEMsSUFBSTt3QkFDZm9CLFdBQVc5Qiw4Q0FBRUEsQ0FDWCw0RkFDQSxzRUFDQThDLFlBQVk7d0JBRWRJLE9BQU8sQ0FBQ2xDLGNBQWM0QixLQUFLbkMsS0FBSyxHQUFHMEM7OzBDQUVuQyw4REFBQ3BCO2dDQUFJRCxXQUFVOztrREFDYiw4REFBQ2tCO3dDQUFLbEIsV0FBVTs7Ozs7O29DQUNmbUIsV0FBVzlCLGNBQWMsbUJBQ3hCLDhEQUFDaUM7d0NBQUt0QixXQUFVOzs7Ozs7Ozs7Ozs7NEJBR25CZCw2QkFDQyw4REFBQ29DO2dDQUFLdEIsV0FBVTswQ0FBWWMsS0FBS25DLEtBQUs7Ozs7Ozs0QkFFdkNPLGVBQWVpQyxXQUFXOUIsY0FBYyxtQkFDdkMsOERBQUNaLHdEQUFLQTtnQ0FDSitCLFNBQVE7Z0NBQ1JSLFdBQVU7MENBRVRYOzs7Ozs7O3VCQXZCQXlCLEtBQUtsQyxJQUFJOzs7OztnQkE0QnBCOzs7Ozs7MEJBSUosOERBQUNxQjtnQkFBSUQsV0FBVTswQkFDYiw0RUFBQ3VCO29CQUNDYixTQUFTaEI7b0JBQ1RNLFdBQVc5Qiw4Q0FBRUEsQ0FDWCxpRkFDQTtvQkFFRmtELE9BQU8sQ0FBQ2xDLGNBQWMsa0JBQWtCbUM7O3NDQUV4Qyw4REFBQ3RELHlKQUFNQTs0QkFBQ2lDLFdBQVU7Ozs7Ozt3QkFDakJkLDZCQUFlLDhEQUFDb0M7c0NBQUs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBS2hDO0dBakhnQnZDOztRQUNHMUIsd0RBQVdBO1FBQ2JDLHNEQUFTQTtRQUNKYSwyREFBVUE7UUFDUkEsMkRBQVVBO1FBQ1pDLCtFQUFvQkE7UUFDM0JDLCtEQUFZQTtRQUNYQSwrREFBWUE7UUFFQWIsaURBQVFBOzs7S0FUcEJ1QiIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL3NyYy9jb21wb25lbnRzL2xheW91dC9TaWRlYmFyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlTWVtbywgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJuZXh0L2xpbmtcIjtcbmltcG9ydCB7IHVzZVBhdGhuYW1lLCB1c2VSb3V0ZXIgfSBmcm9tIFwibmV4dC9uYXZpZ2F0aW9uXCI7XG5pbXBvcnQgSW1hZ2UgZnJvbSBcIm5leHQvaW1hZ2VcIjtcbmltcG9ydCB7IHVzZVRoZW1lIH0gZnJvbSBcIm5leHQtdGhlbWVzXCI7XG5pbXBvcnQge1xuICBDYWxlbmRhckRheXMsXG4gIFVzZXJzLFxuICBCZWxsUmluZyxcbiAgU3RldGhvc2NvcGUsXG4gIFNldHRpbmdzLFxuICBDbGlwYm9hcmRMaXN0LFxuICBMb2dPdXQsXG4gIE1lbnUsXG4gIFgsXG59IGZyb20gXCJsdWNpZGUtcmVhY3RcIjtcbmltcG9ydCB7IGNuIH0gZnJvbSBcIkAvbGliL3V0aWxzXCI7XG5pbXBvcnQgeyB1c2VVSVN0b3JlIH0gZnJvbSBcIkAvbGliL3N0b3Jlcy91aVN0b3JlXCI7XG5pbXBvcnQgeyB1c2VOb3RpZmljYXRpb25TdG9yZSB9IGZyb20gXCJAL2xpYi9zdG9yZXMvbm90aWZpY2F0aW9uU3RvcmVcIjtcbmltcG9ydCB7IHVzZUF1dGhTdG9yZSB9IGZyb20gXCJAL2xpYi9zdG9yZXMvYXV0aFN0b3JlXCI7XG5pbXBvcnQgeyBjcmVhdGVDbGllbnQgfSBmcm9tIFwiQC91dGlscy9zdXBhYmFzZS9jbGllbnRcIjtcbmltcG9ydCB7IHRvYXN0IH0gZnJvbSBcInNvbm5lclwiO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9idXR0b25cIjtcbmltcG9ydCB7IEJhZGdlIH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9iYWRnZVwiO1xuXG5pbnRlcmZhY2UgTmF2SXRlbSB7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGhyZWY6IHN0cmluZztcbiAgaWNvbjogUmVhY3QuRWxlbWVudFR5cGU7XG4gIGFkbWluT25seT86IGJvb2xlYW47XG59XG5cbmNvbnN0IG5hdkl0ZW1zOiBOYXZJdGVtW10gPSBbXG4gIHsgbGFiZWw6IFwiQ2FsZW5kYXJpb1wiLCBocmVmOiBcIi9kYXNoYm9hcmQvY2FsZW5kYXJcIiwgaWNvbjogQ2FsZW5kYXJEYXlzIH0sXG4gIHsgbGFiZWw6IFwiUGFjaWVudGVzXCIsIGhyZWY6IFwiL2Rhc2hib2FyZC9wYXRpZW50c1wiLCBpY29uOiBVc2VycyB9LFxuICB7IGxhYmVsOiBcIkNpdGFzXCIsIGhyZWY6IFwiL2Rhc2hib2FyZC9hcHBvaW50bWVudHNcIiwgaWNvbjogQ2xpcGJvYXJkTGlzdCB9LFxuICB7IGxhYmVsOiBcIk5vdGlmaWNhY2lvbmVzXCIsIGhyZWY6IFwiL2Rhc2hib2FyZC9ub3RpZmljYXRpb25zXCIsIGljb246IEJlbGxSaW5nIH0sXG4gIHsgbGFiZWw6IFwiUHJvY2VkaW1pZW50b3NcIiwgaHJlZjogXCIvZGFzaGJvYXJkL3Byb2NlZHVyZXNcIiwgaWNvbjogU3RldGhvc2NvcGUsIGFkbWluT25seTogdHJ1ZSB9LFxuICB7IGxhYmVsOiBcIkNvbmZpZ3VyYWNpw7NuXCIsIGhyZWY6IFwiL2Rhc2hib2FyZC9zZXR0aW5nc1wiLCBpY29uOiBTZXR0aW5ncywgYWRtaW5Pbmx5OiB0cnVlIH0sXG5dO1xuXG4vKipcbiAqIFNpZGViYXIgZGUgbmF2ZWdhY2nDs24gcHJpbmNpcGFsIGRlbCBkYXNoYm9hcmQuXG4gKiBTb3BvcnRhIGNvbGFwc28geSBtdWVzdHJhIGVsIGJhZGdlIGRlIG5vdGlmaWNhY2lvbmVzIHBlbmRpZW50ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBTaWRlYmFyKCkge1xuICBjb25zdCBwYXRobmFtZSA9IHVzZVBhdGhuYW1lKCk7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBzaWRlYmFyT3BlbiA9IHVzZVVJU3RvcmUoKHMpID0+IHMuc2lkZWJhck9wZW4pO1xuICBjb25zdCB0b2dnbGVTaWRlYmFyID0gdXNlVUlTdG9yZSgocykgPT4gcy50b2dnbGVTaWRlYmFyKTtcbiAgY29uc3QgdW5yZWFkQ291bnQgPSB1c2VOb3RpZmljYXRpb25TdG9yZSgocykgPT4gcy51bnJlYWRDb3VudCk7XG4gIGNvbnN0IHJvbGUgPSB1c2VBdXRoU3RvcmUoKHMpID0+IHMucm9sZSk7XG4gIGNvbnN0IHJlc2V0ID0gdXNlQXV0aFN0b3JlKChzKSA9PiBzLnJlc2V0KTtcbiAgY29uc3Qgc3VwYWJhc2UgPSB1c2VNZW1vKCgpID0+IGNyZWF0ZUNsaWVudCgpLCBbXSk7XG4gIGNvbnN0IHsgcmVzb2x2ZWRUaGVtZSB9ID0gdXNlVGhlbWUoKTtcblxuICBjb25zdCBoYW5kbGVMb2dvdXQgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgeyBlcnJvciB9ID0gYXdhaXQgc3VwYWJhc2UuYXV0aC5zaWduT3V0KCk7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICB0b2FzdC5lcnJvcihcIkVycm9yIGFsIGNlcnJhciBzZXNpw7NuXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXNldCgpO1xuICAgIHJvdXRlci5wdXNoKFwiL2xvZ2luXCIpO1xuICB9LCBbcmVzZXQsIHJvdXRlciwgc3VwYWJhc2VdKTtcblxuICByZXR1cm4gKFxuICAgIDxhc2lkZVxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgXCJmbGV4IGZsZXgtY29sIGJnLXNpZGViYXIgYm9yZGVyLXIgYm9yZGVyLXNpZGViYXItYm9yZGVyIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTMwMCB6LTMwXCIsXG4gICAgICAgIFwiZml4ZWQgaW5zZXQteS0wIGxlZnQtMCBtZDpyZWxhdGl2ZSBtZDp0cmFuc2xhdGUteC0wXCIsXG4gICAgICAgIHNpZGViYXJPcGVuID8gXCJ3LTYwIHRyYW5zbGF0ZS14LTBcIiA6IFwidy0xNiAtdHJhbnNsYXRlLXgtZnVsbCBtZDp0cmFuc2xhdGUteC0wXCJcbiAgICAgICl9XG4gICAgPlxuICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB4LTQgcHktNSBib3JkZXItYiBib3JkZXItc2lkZWJhci1ib3JkZXJcIj5cbiAgICAgICAge3NpZGViYXJPcGVuICYmIChcbiAgICAgICAgICA8TGluayBocmVmPVwiL2Rhc2hib2FyZFwiIGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGhvdmVyOm9wYWNpdHktODAgdHJhbnNpdGlvbi1vcGFjaXR5XCI+XG4gICAgICAgICAgICA8SW1hZ2VcbiAgICAgICAgICAgICAgc3JjPXtyZXNvbHZlZFRoZW1lID09PSBcImRhcmtcIiA/IFwiL2xvZ28tY2lydXgtZGFyay53ZWJwXCIgOiBcIi9sb2dvLWNpcnV4LWxpZ2h0LndlYnBcIn1cbiAgICAgICAgICAgICAgYWx0PVwiQ2lydXhcIlxuICAgICAgICAgICAgICB3aWR0aD17MTIwfVxuICAgICAgICAgICAgICBoZWlnaHQ9ezMyfVxuICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTggdy1hdXRvXCJcbiAgICAgICAgICAgICAgcHJpb3JpdHlcbiAgICAgICAgICAgICAgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgKX1cbiAgICAgICAgPEJ1dHRvblxuICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgc2l6ZT1cImljb25cIlxuICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZVNpZGViYXJ9XG4gICAgICAgICAgY2xhc3NOYW1lPVwidGV4dC1zaWRlYmFyLWZvcmVncm91bmQgaG92ZXI6Ymctc2lkZWJhci1hY2NlbnQgbWwtYXV0b1wiXG4gICAgICAgICAgYXJpYS1sYWJlbD17c2lkZWJhck9wZW4gPyBcIkNvbGFwc2FyIHNpZGViYXJcIiA6IFwiRXhwYW5kaXIgc2lkZWJhclwifVxuICAgICAgICA+XG4gICAgICAgICAge3NpZGViYXJPcGVuID8gPFggY2xhc3NOYW1lPVwic2l6ZS00XCIgLz4gOiA8TWVudSBjbGFzc05hbWU9XCJzaXplLTRcIiAvPn1cbiAgICAgICAgPC9CdXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgey8qIE5hdiAqL31cbiAgICAgIDxuYXYgY2xhc3NOYW1lPVwiZmxleC0xIHB5LTQgcHgtMiBzcGFjZS15LTEgb3ZlcmZsb3cteS1hdXRvXCI+XG4gICAgICAgIHtuYXZJdGVtc1xuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICFpdGVtLmFkbWluT25seSB8fCByb2xlID09PSBcImFkbWluXCIpXG4gICAgICAgICAgLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXNBY3RpdmUgPSBwYXRobmFtZS5zdGFydHNXaXRoKGl0ZW0uaHJlZik7XG4gICAgICAgICAgICBjb25zdCBJY29uID0gaXRlbS5pY29uO1xuICAgICAgICAgICAgY29uc3QgaXNOb3RpZiA9IGl0ZW0uaHJlZiA9PT0gXCIvZGFzaGJvYXJkL25vdGlmaWNhdGlvbnNcIjtcblxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgPExpbmtcbiAgICAgICAgICAgICAgICBrZXk9e2l0ZW0uaHJlZn1cbiAgICAgICAgICAgICAgICBocmVmPXtpdGVtLmhyZWZ9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICAgICAgICAgIFwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgcm91bmRlZC1bMTJweF0gcHgtMyBweS0yLjUgdGV4dC1zbSBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWNvbG9yc1wiLFxuICAgICAgICAgICAgICAgICAgXCJ0ZXh0LXNpZGViYXItZm9yZWdyb3VuZCBob3ZlcjpiZy1zaWRlYmFyLWFjY2VudCBob3Zlcjp0ZXh0LXByaW1hcnlcIixcbiAgICAgICAgICAgICAgICAgIGlzQWN0aXZlICYmIFwiYmctcHJpbWFyeS8xMCB0ZXh0LXByaW1hcnlcIlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgdGl0bGU9eyFzaWRlYmFyT3BlbiA/IGl0ZW0ubGFiZWwgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXgtc2hyaW5rLTBcIj5cbiAgICAgICAgICAgICAgICAgIDxJY29uIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgICAgICAgICB7aXNOb3RpZiAmJiB1bnJlYWRDb3VudCA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJhYnNvbHV0ZSAtdG9wLTEuNSAtcmlnaHQtMS41IHNpemUtMiBiZy1zZWNvbmRhcnkgcm91bmRlZC1mdWxsXCIgLz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAge3NpZGViYXJPcGVuICYmIChcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRydW5jYXRlXCI+e2l0ZW0ubGFiZWx9PC9zcGFuPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAge3NpZGViYXJPcGVuICYmIGlzTm90aWYgJiYgdW5yZWFkQ291bnQgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgIDxCYWRnZVxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwic2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibWwtYXV0byB0ZXh0LVsxMHB4XSBweC0xLjUgcHktMCBoLTVcIlxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7dW5yZWFkQ291bnR9XG4gICAgICAgICAgICAgICAgICA8L0JhZGdlPlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvTGluaz5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSl9XG4gICAgICA8L25hdj5cblxuICAgICAgey8qIExvZ291dCAqL31cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwicHgtMiBweS0zIGJvcmRlci10IGJvcmRlci1zaWRlYmFyLWJvcmRlclwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlTG9nb3V0fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgICAgICBcImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIHJvdW5kZWQtWzEycHhdIHB4LTMgcHktMi41IHRleHQtc20gZm9udC1tZWRpdW0gdy1mdWxsXCIsXG4gICAgICAgICAgICBcInRleHQtc2lkZWJhci1mb3JlZ3JvdW5kIGhvdmVyOmJnLWRlc3RydWN0aXZlLzEwIGhvdmVyOnRleHQtZGVzdHJ1Y3RpdmUgdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICl9XG4gICAgICAgICAgdGl0bGU9eyFzaWRlYmFyT3BlbiA/IFwiQ2VycmFyIHNlc2nDs25cIiA6IHVuZGVmaW5lZH1cbiAgICAgICAgPlxuICAgICAgICAgIDxMb2dPdXQgY2xhc3NOYW1lPVwic2l6ZS00IGZsZXgtc2hyaW5rLTBcIiAvPlxuICAgICAgICAgIHtzaWRlYmFyT3BlbiAmJiA8c3Bhbj5DZXJyYXIgc2VzacOzbjwvc3Bhbj59XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9hc2lkZT5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJ1c2VNZW1vIiwidXNlQ2FsbGJhY2siLCJMaW5rIiwidXNlUGF0aG5hbWUiLCJ1c2VSb3V0ZXIiLCJJbWFnZSIsInVzZVRoZW1lIiwiQ2FsZW5kYXJEYXlzIiwiVXNlcnMiLCJCZWxsUmluZyIsIlN0ZXRob3Njb3BlIiwiU2V0dGluZ3MiLCJDbGlwYm9hcmRMaXN0IiwiTG9nT3V0IiwiTWVudSIsIlgiLCJjbiIsInVzZVVJU3RvcmUiLCJ1c2VOb3RpZmljYXRpb25TdG9yZSIsInVzZUF1dGhTdG9yZSIsImNyZWF0ZUNsaWVudCIsInRvYXN0IiwiQnV0dG9uIiwiQmFkZ2UiLCJuYXZJdGVtcyIsImxhYmVsIiwiaHJlZiIsImljb24iLCJhZG1pbk9ubHkiLCJTaWRlYmFyIiwicGF0aG5hbWUiLCJyb3V0ZXIiLCJzaWRlYmFyT3BlbiIsInMiLCJ0b2dnbGVTaWRlYmFyIiwidW5yZWFkQ291bnQiLCJyb2xlIiwicmVzZXQiLCJzdXBhYmFzZSIsInJlc29sdmVkVGhlbWUiLCJoYW5kbGVMb2dvdXQiLCJlcnJvciIsImF1dGgiLCJzaWduT3V0IiwicHVzaCIsImFzaWRlIiwiY2xhc3NOYW1lIiwiZGl2Iiwic3JjIiwiYWx0Iiwid2lkdGgiLCJoZWlnaHQiLCJwcmlvcml0eSIsInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIsInZhcmlhbnQiLCJzaXplIiwib25DbGljayIsImFyaWEtbGFiZWwiLCJuYXYiLCJmaWx0ZXIiLCJpdGVtIiwibWFwIiwiaXNBY3RpdmUiLCJzdGFydHNXaXRoIiwiSWNvbiIsImlzTm90aWYiLCJ0aXRsZSIsInVuZGVmaW5lZCIsInNwYW4iLCJidXR0b24iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/layout/Sidebar.tsx\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/components/layout/Topbar.tsx":
|
||
/*!******************************************!*\
|
||
!*** ./src/components/layout/Topbar.tsx ***!
|
||
\******************************************/
|
||
/***/ ((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 */ Topbar: () => (/* binding */ Topbar)\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 _barrel_optimize_names_Bell_Menu_lucide_react__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,Menu!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/menu.mjs\");\n/* harmony import */ var _barrel_optimize_names_Bell_Menu_lucide_react__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! __barrel_optimize__?names=Bell,Menu!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/bell.mjs\");\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/components/ui/button */ \"(app-pages-browser)/./src/components/ui/button.tsx\");\n/* harmony import */ var _components_ui_badge__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ui/badge */ \"(app-pages-browser)/./src/components/ui/badge.tsx\");\n/* harmony import */ var _lib_stores_uiStore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/stores/uiStore */ \"(app-pages-browser)/./src/lib/stores/uiStore.ts\");\n/* harmony import */ var _lib_stores_notificationStore__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/lib/stores/notificationStore */ \"(app-pages-browser)/./src/lib/stores/notificationStore.ts\");\n/* harmony import */ var _lib_stores_authStore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/lib/stores/authStore */ \"(app-pages-browser)/./src/lib/stores/authStore.ts\");\n/* harmony import */ var _components_layout_UserProfileModal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/components/layout/UserProfileModal */ \"(app-pages-browser)/./src/components/layout/UserProfileModal.tsx\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! react */ \"(app-pages-browser)/./node_modules/next/dist/compiled/react/index.js\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_7__);\n/* __next_internal_client_entry_do_not_use__ Topbar auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\n\n\n\n/**\n * Topbar del dashboard con título de sección, botón de sidebar móvil y badge de notificaciones.\n */ function Topbar(param) {\n let { title } = param;\n _s();\n const toggleSidebar = (0,_lib_stores_uiStore__WEBPACK_IMPORTED_MODULE_3__.useUIStore)({\n \"Topbar.useUIStore[toggleSidebar]\": (s)=>s.toggleSidebar\n }[\"Topbar.useUIStore[toggleSidebar]\"]);\n const openModal = (0,_lib_stores_uiStore__WEBPACK_IMPORTED_MODULE_3__.useUIStore)({\n \"Topbar.useUIStore[openModal]\": (s)=>s.openModal\n }[\"Topbar.useUIStore[openModal]\"]);\n const unreadCount = (0,_lib_stores_notificationStore__WEBPACK_IMPORTED_MODULE_4__.useNotificationStore)({\n \"Topbar.useNotificationStore[unreadCount]\": (s)=>s.unreadCount\n }[\"Topbar.useNotificationStore[unreadCount]\"]);\n const user = (0,_lib_stores_authStore__WEBPACK_IMPORTED_MODULE_5__.useAuthStore)({\n \"Topbar.useAuthStore[user]\": (s)=>s.user\n }[\"Topbar.useAuthStore[user]\"]);\n const initials = (0,react__WEBPACK_IMPORTED_MODULE_7__.useMemo)({\n \"Topbar.useMemo[initials]\": ()=>{\n var _user_email;\n var _user_email_slice_toUpperCase;\n return (_user_email_slice_toUpperCase = user === null || user === void 0 ? void 0 : (_user_email = user.email) === null || _user_email === void 0 ? void 0 : _user_email.slice(0, 2).toUpperCase()) !== null && _user_email_slice_toUpperCase !== void 0 ? _user_email_slice_toUpperCase : \"??\";\n }\n }[\"Topbar.useMemo[initials]\"], [\n user === null || user === void 0 ? void 0 : user.email\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"header\", {\n className: \"h-16 border-b border-border bg-background/80 backdrop-blur-sm flex items-center px-6 gap-4 sticky top-0 z-20\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_1__.Button, {\n variant: \"ghost\",\n size: \"icon\",\n onClick: toggleSidebar,\n className: \"md:hidden\",\n \"aria-label\": \"Abrir men\\xfa\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_Menu_lucide_react__WEBPACK_IMPORTED_MODULE_8__[\"default\"], {\n className: \"size-4\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Topbar.tsx\",\n lineNumber: 37,\n columnNumber: 9\n }, this)\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Topbar.tsx\",\n lineNumber: 30,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"h1\", {\n className: \"font-heading font-semibold text-lg text-foreground truncate flex-1\",\n children: title\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Topbar.tsx\",\n lineNumber: 40,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-3\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"relative\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_1__.Button, {\n variant: \"ghost\",\n size: \"icon\",\n \"aria-label\": \"Notificaciones\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Bell_Menu_lucide_react__WEBPACK_IMPORTED_MODULE_9__[\"default\"], {\n className: \"size-4\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Topbar.tsx\",\n lineNumber: 48,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Topbar.tsx\",\n lineNumber: 47,\n columnNumber: 11\n }, this),\n unreadCount > 0 && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_badge__WEBPACK_IMPORTED_MODULE_2__.Badge, {\n variant: \"secondary\",\n className: \"absolute -top-1 -right-1 h-4 min-w-4 text-[9px] px-1 flex items-center justify-center\",\n children: unreadCount\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Topbar.tsx\",\n lineNumber: 51,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Topbar.tsx\",\n lineNumber: 46,\n columnNumber: 9\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"button\", {\n onClick: ()=>openModal(\"editProfile\"),\n className: \"size-8 rounded-full bg-primary flex items-center justify-center text-[11px] font-bold text-[#0D141D] hover:bg-primary/80 transition-colors cursor-pointer\",\n \"aria-label\": \"Editar perfil\",\n children: initials\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Topbar.tsx\",\n lineNumber: 61,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Topbar.tsx\",\n lineNumber: 44,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_layout_UserProfileModal__WEBPACK_IMPORTED_MODULE_6__.UserProfileModal, {}, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Topbar.tsx\",\n lineNumber: 70,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/Topbar.tsx\",\n lineNumber: 28,\n columnNumber: 5\n }, this);\n}\n_s(Topbar, \"PzeuTmHt4so/3IxYoehu+rToJDU=\", false, function() {\n return [\n _lib_stores_uiStore__WEBPACK_IMPORTED_MODULE_3__.useUIStore,\n _lib_stores_uiStore__WEBPACK_IMPORTED_MODULE_3__.useUIStore,\n _lib_stores_notificationStore__WEBPACK_IMPORTED_MODULE_4__.useNotificationStore,\n _lib_stores_authStore__WEBPACK_IMPORTED_MODULE_5__.useAuthStore\n ];\n});\n_c = Topbar;\nvar _c;\n$RefreshReg$(_c, \"Topbar\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL2xheW91dC9Ub3BiYXIudHN4IiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTBDO0FBQ007QUFDRjtBQUNJO0FBQ29CO0FBQ2hCO0FBQ2tCO0FBQ3hDO0FBTWhDOztDQUVDLEdBQ00sU0FBU1MsT0FBTyxLQUFzQjtRQUF0QixFQUFFQyxLQUFLLEVBQWUsR0FBdEI7O0lBQ3JCLE1BQU1DLGdCQUFnQlAsK0RBQVVBOzRDQUFDLENBQUNRLElBQU1BLEVBQUVELGFBQWE7O0lBQ3ZELE1BQU1FLFlBQVlULCtEQUFVQTt3Q0FBQyxDQUFDUSxJQUFNQSxFQUFFQyxTQUFTOztJQUMvQyxNQUFNQyxjQUFjVCxtRkFBb0JBO29EQUFDLENBQUNPLElBQU1BLEVBQUVFLFdBQVc7O0lBQzdELE1BQU1DLE9BQU9ULG1FQUFZQTtxQ0FBQyxDQUFDTSxJQUFNQSxFQUFFRyxJQUFJOztJQUV2QyxNQUFNQyxXQUFXUiw4Q0FBT0E7b0NBQUM7Z0JBQU1PO2dCQUFBQTttQkFBQUEsQ0FBQUEsZ0NBQUFBLGlCQUFBQSw0QkFBQUEsY0FBQUEsS0FBTUUsS0FBSyxjQUFYRixrQ0FBQUEsWUFBYUcsS0FBSyxDQUFDLEdBQUcsR0FBR0MsV0FBVyxnQkFBcENKLDJDQUFBQSxnQ0FBMEM7O21DQUFNO1FBQUNBLGlCQUFBQSwyQkFBQUEsS0FBTUUsS0FBSztLQUFDO0lBRTVGLHFCQUNFLDhEQUFDRztRQUFPQyxXQUFVOzswQkFFaEIsOERBQUNuQix5REFBTUE7Z0JBQ0xvQixTQUFRO2dCQUNSQyxNQUFLO2dCQUNMQyxTQUFTYjtnQkFDVFUsV0FBVTtnQkFDVkksY0FBVzswQkFFWCw0RUFBQ3hCLHFGQUFJQTtvQkFBQ29CLFdBQVU7Ozs7Ozs7Ozs7OzBCQUdsQiw4REFBQ0s7Z0JBQUdMLFdBQVU7MEJBQ1hYOzs7Ozs7MEJBR0gsOERBQUNpQjtnQkFBSU4sV0FBVTs7a0NBRWIsOERBQUNNO3dCQUFJTixXQUFVOzswQ0FDYiw4REFBQ25CLHlEQUFNQTtnQ0FBQ29CLFNBQVE7Z0NBQVFDLE1BQUs7Z0NBQU9FLGNBQVc7MENBQzdDLDRFQUFDekIscUZBQUlBO29DQUFDcUIsV0FBVTs7Ozs7Ozs7Ozs7NEJBRWpCUCxjQUFjLG1CQUNiLDhEQUFDWCx1REFBS0E7Z0NBQ0ptQixTQUFRO2dDQUNSRCxXQUFVOzBDQUVUUDs7Ozs7Ozs7Ozs7O2tDQU1QLDhEQUFDYzt3QkFDQ0osU0FBUyxJQUFNWCxVQUFVO3dCQUN6QlEsV0FBVTt3QkFDVkksY0FBVztrQ0FFVlQ7Ozs7Ozs7Ozs7OzswQkFJTCw4REFBQ1QsaUZBQWdCQTs7Ozs7Ozs7Ozs7QUFHdkI7R0F0RGdCRTs7UUFDUUwsMkRBQVVBO1FBQ2RBLDJEQUFVQTtRQUNSQywrRUFBb0JBO1FBQzNCQywrREFBWUE7OztLQUpYRyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL3NyYy9jb21wb25lbnRzL2xheW91dC9Ub3BiYXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiO1xuXG5pbXBvcnQgeyBCZWxsLCBNZW51IH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9idXR0b25cIjtcbmltcG9ydCB7IEJhZGdlIH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9iYWRnZVwiO1xuaW1wb3J0IHsgdXNlVUlTdG9yZSB9IGZyb20gXCJAL2xpYi9zdG9yZXMvdWlTdG9yZVwiO1xuaW1wb3J0IHsgdXNlTm90aWZpY2F0aW9uU3RvcmUgfSBmcm9tIFwiQC9saWIvc3RvcmVzL25vdGlmaWNhdGlvblN0b3JlXCI7XG5pbXBvcnQgeyB1c2VBdXRoU3RvcmUgfSBmcm9tIFwiQC9saWIvc3RvcmVzL2F1dGhTdG9yZVwiO1xuaW1wb3J0IHsgVXNlclByb2ZpbGVNb2RhbCB9IGZyb20gXCJAL2NvbXBvbmVudHMvbGF5b3V0L1VzZXJQcm9maWxlTW9kYWxcIjtcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcblxuaW50ZXJmYWNlIFRvcGJhclByb3BzIHtcbiAgdGl0bGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUb3BiYXIgZGVsIGRhc2hib2FyZCBjb24gdMOtdHVsbyBkZSBzZWNjacOzbiwgYm90w7NuIGRlIHNpZGViYXIgbcOzdmlsIHkgYmFkZ2UgZGUgbm90aWZpY2FjaW9uZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBUb3BiYXIoeyB0aXRsZSB9OiBUb3BiYXJQcm9wcykge1xuICBjb25zdCB0b2dnbGVTaWRlYmFyID0gdXNlVUlTdG9yZSgocykgPT4gcy50b2dnbGVTaWRlYmFyKTtcbiAgY29uc3Qgb3Blbk1vZGFsID0gdXNlVUlTdG9yZSgocykgPT4gcy5vcGVuTW9kYWwpO1xuICBjb25zdCB1bnJlYWRDb3VudCA9IHVzZU5vdGlmaWNhdGlvblN0b3JlKChzKSA9PiBzLnVucmVhZENvdW50KTtcbiAgY29uc3QgdXNlciA9IHVzZUF1dGhTdG9yZSgocykgPT4gcy51c2VyKTtcblxuICBjb25zdCBpbml0aWFscyA9IHVzZU1lbW8oKCkgPT4gdXNlcj8uZW1haWw/LnNsaWNlKDAsIDIpLnRvVXBwZXJDYXNlKCkgPz8gXCI/P1wiLCBbdXNlcj8uZW1haWxdKTtcblxuICByZXR1cm4gKFxuICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwiaC0xNiBib3JkZXItYiBib3JkZXItYm9yZGVyIGJnLWJhY2tncm91bmQvODAgYmFja2Ryb3AtYmx1ci1zbSBmbGV4IGl0ZW1zLWNlbnRlciBweC02IGdhcC00IHN0aWNreSB0b3AtMCB6LTIwXCI+XG4gICAgICB7LyogTW9iaWxlIG1lbnUgdG9nZ2xlICovfVxuICAgICAgPEJ1dHRvblxuICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICBzaXplPVwiaWNvblwiXG4gICAgICAgIG9uQ2xpY2s9e3RvZ2dsZVNpZGViYXJ9XG4gICAgICAgIGNsYXNzTmFtZT1cIm1kOmhpZGRlblwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJBYnJpciBtZW7DulwiXG4gICAgICA+XG4gICAgICAgIDxNZW51IGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICA8L0J1dHRvbj5cblxuICAgICAgPGgxIGNsYXNzTmFtZT1cImZvbnQtaGVhZGluZyBmb250LXNlbWlib2xkIHRleHQtbGcgdGV4dC1mb3JlZ3JvdW5kIHRydW5jYXRlIGZsZXgtMVwiPlxuICAgICAgICB7dGl0bGV9XG4gICAgICA8L2gxPlxuXG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgIHsvKiBOb3RpZmljYWNpb25lcyAqL31cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZVwiPlxuICAgICAgICAgIDxCdXR0b24gdmFyaWFudD1cImdob3N0XCIgc2l6ZT1cImljb25cIiBhcmlhLWxhYmVsPVwiTm90aWZpY2FjaW9uZXNcIj5cbiAgICAgICAgICAgIDxCZWxsIGNsYXNzTmFtZT1cInNpemUtNFwiIC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAge3VucmVhZENvdW50ID4gMCAmJiAoXG4gICAgICAgICAgICA8QmFkZ2VcbiAgICAgICAgICAgICAgdmFyaWFudD1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT1cImFic29sdXRlIC10b3AtMSAtcmlnaHQtMSBoLTQgbWluLXctNCB0ZXh0LVs5cHhdIHB4LTEgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7dW5yZWFkQ291bnR9XG4gICAgICAgICAgICA8L0JhZGdlPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIHsvKiBBdmF0YXIgKi99XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvcGVuTW9kYWwoXCJlZGl0UHJvZmlsZVwiKX1cbiAgICAgICAgICBjbGFzc05hbWU9XCJzaXplLTggcm91bmRlZC1mdWxsIGJnLXByaW1hcnkgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1bMTFweF0gZm9udC1ib2xkIHRleHQtWyMwRDE0MURdIGhvdmVyOmJnLXByaW1hcnkvODAgdHJhbnNpdGlvbi1jb2xvcnMgY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJFZGl0YXIgcGVyZmlsXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtpbml0aWFsc31cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPFVzZXJQcm9maWxlTW9kYWwgLz5cbiAgICA8L2hlYWRlcj5cbiAgKTtcbn1cbiJdLCJuYW1lcyI6WyJCZWxsIiwiTWVudSIsIkJ1dHRvbiIsIkJhZGdlIiwidXNlVUlTdG9yZSIsInVzZU5vdGlmaWNhdGlvblN0b3JlIiwidXNlQXV0aFN0b3JlIiwiVXNlclByb2ZpbGVNb2RhbCIsInVzZU1lbW8iLCJUb3BiYXIiLCJ0aXRsZSIsInRvZ2dsZVNpZGViYXIiLCJzIiwib3Blbk1vZGFsIiwidW5yZWFkQ291bnQiLCJ1c2VyIiwiaW5pdGlhbHMiLCJlbWFpbCIsInNsaWNlIiwidG9VcHBlckNhc2UiLCJoZWFkZXIiLCJjbGFzc05hbWUiLCJ2YXJpYW50Iiwic2l6ZSIsIm9uQ2xpY2siLCJhcmlhLWxhYmVsIiwiaDEiLCJkaXYiLCJidXR0b24iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/layout/Topbar.tsx\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/components/layout/UserProfileModal.tsx":
|
||
/*!****************************************************!*\
|
||
!*** ./src/components/layout/UserProfileModal.tsx ***!
|
||
\****************************************************/
|
||
/***/ ((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 */ UserProfileModal: () => (/* binding */ UserProfileModal)\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 react_hook_form__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! react-hook-form */ \"(app-pages-browser)/./node_modules/react-hook-form/dist/index.esm.mjs\");\n/* harmony import */ var _hookform_resolvers_zod__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @hookform/resolvers/zod */ \"(app-pages-browser)/./node_modules/@hookform/resolvers/zod/dist/zod.mjs\");\n/* harmony import */ var zod__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! zod */ \"(app-pages-browser)/./node_modules/zod/v4/classic/schemas.js\");\n/* harmony import */ var sonner__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! sonner */ \"(app-pages-browser)/./node_modules/sonner/dist/index.mjs\");\n/* harmony import */ var next_themes__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! next-themes */ \"(app-pages-browser)/./node_modules/next-themes/dist/index.mjs\");\n/* harmony import */ var _barrel_optimize_names_Loader2_Mail_Moon_Save_Shield_Sun_User_lucide_react__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! __barrel_optimize__?names=Loader2,Mail,Moon,Save,Shield,Sun,User!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/loader-circle.mjs\");\n/* harmony import */ var _barrel_optimize_names_Loader2_Mail_Moon_Save_Shield_Sun_User_lucide_react__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! __barrel_optimize__?names=Loader2,Mail,Moon,Save,Shield,Sun,User!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/mail.mjs\");\n/* harmony import */ var _barrel_optimize_names_Loader2_Mail_Moon_Save_Shield_Sun_User_lucide_react__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! __barrel_optimize__?names=Loader2,Mail,Moon,Save,Shield,Sun,User!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/shield.mjs\");\n/* harmony import */ var _barrel_optimize_names_Loader2_Mail_Moon_Save_Shield_Sun_User_lucide_react__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! __barrel_optimize__?names=Loader2,Mail,Moon,Save,Shield,Sun,User!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/user.mjs\");\n/* harmony import */ var _barrel_optimize_names_Loader2_Mail_Moon_Save_Shield_Sun_User_lucide_react__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! __barrel_optimize__?names=Loader2,Mail,Moon,Save,Shield,Sun,User!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/moon.mjs\");\n/* harmony import */ var _barrel_optimize_names_Loader2_Mail_Moon_Save_Shield_Sun_User_lucide_react__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! __barrel_optimize__?names=Loader2,Mail,Moon,Save,Shield,Sun,User!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/sun.mjs\");\n/* harmony import */ var _barrel_optimize_names_Loader2_Mail_Moon_Save_Shield_Sun_User_lucide_react__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! __barrel_optimize__?names=Loader2,Mail,Moon,Save,Shield,Sun,User!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/save.mjs\");\n/* harmony import */ var _utils_supabase_client__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @/utils/supabase/client */ \"(app-pages-browser)/./src/utils/supabase/client.ts\");\n/* harmony import */ var _lib_stores_uiStore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @/lib/stores/uiStore */ \"(app-pages-browser)/./src/lib/stores/uiStore.ts\");\n/* harmony import */ var _lib_stores_authStore__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @/lib/stores/authStore */ \"(app-pages-browser)/./src/lib/stores/authStore.ts\");\n/* harmony import */ var _components_ui_dialog__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @/components/ui/dialog */ \"(app-pages-browser)/./src/components/ui/dialog.tsx\");\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @/components/ui/button */ \"(app-pages-browser)/./src/components/ui/button.tsx\");\n/* harmony import */ var _components_ui_input__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @/components/ui/input */ \"(app-pages-browser)/./src/components/ui/input.tsx\");\n/* harmony import */ var _components_ui_label__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @/components/ui/label */ \"(app-pages-browser)/./src/components/ui/label.tsx\");\n/* harmony import */ var _components_ui_switch__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @/components/ui/switch */ \"(app-pages-browser)/./src/components/ui/switch.tsx\");\n/* __next_internal_client_entry_do_not_use__ UserProfileModal auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nconst profileSchema = zod__WEBPACK_IMPORTED_MODULE_13__.object({\n name: zod__WEBPACK_IMPORTED_MODULE_13__.string().min(2, \"El nombre debe tener al menos 2 caracteres\")\n});\nfunction UserProfileModal() {\n _s();\n const supabase = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)({\n \"UserProfileModal.useMemo[supabase]\": ()=>(0,_utils_supabase_client__WEBPACK_IMPORTED_MODULE_5__.createClient)()\n }[\"UserProfileModal.useMemo[supabase]\"], []);\n const activeModal = (0,_lib_stores_uiStore__WEBPACK_IMPORTED_MODULE_6__.useUIStore)({\n \"UserProfileModal.useUIStore[activeModal]\": (s)=>s.activeModal\n }[\"UserProfileModal.useUIStore[activeModal]\"]);\n const closeModal = (0,_lib_stores_uiStore__WEBPACK_IMPORTED_MODULE_6__.useUIStore)({\n \"UserProfileModal.useUIStore[closeModal]\": (s)=>s.closeModal\n }[\"UserProfileModal.useUIStore[closeModal]\"]);\n const user = (0,_lib_stores_authStore__WEBPACK_IMPORTED_MODULE_7__.useAuthStore)({\n \"UserProfileModal.useAuthStore[user]\": (s)=>s.user\n }[\"UserProfileModal.useAuthStore[user]\"]);\n const role = (0,_lib_stores_authStore__WEBPACK_IMPORTED_MODULE_7__.useAuthStore)({\n \"UserProfileModal.useAuthStore[role]\": (s)=>s.role\n }[\"UserProfileModal.useAuthStore[role]\"]);\n const { theme, setTheme } = (0,next_themes__WEBPACK_IMPORTED_MODULE_4__.useTheme)();\n const isOpen = activeModal === \"editProfile\";\n const [staff, setStaff] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(null);\n const [isLoadingProfile, setIsLoadingProfile] = (0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(false);\n const form = (0,react_hook_form__WEBPACK_IMPORTED_MODULE_14__.useForm)({\n resolver: (0,_hookform_resolvers_zod__WEBPACK_IMPORTED_MODULE_2__.zodResolver)(profileSchema),\n defaultValues: {\n name: \"\"\n }\n });\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"UserProfileModal.useEffect\": ()=>{\n if (!isOpen || !user) return;\n const loadStaff = {\n \"UserProfileModal.useEffect.loadStaff\": async ()=>{\n var _user_user_metadata, _user_email;\n setIsLoadingProfile(true);\n const { data } = await supabase.from(\"staff\").select(\"*\").eq(\"id\", user.id).single();\n const staffData = data !== null && data !== void 0 ? data : null;\n // Prefer staff name, fallback to auth display_name, then to auth email prefix\n const displayName = (staffData === null || staffData === void 0 ? void 0 : staffData.name) || ((_user_user_metadata = user.user_metadata) === null || _user_user_metadata === void 0 ? void 0 : _user_user_metadata.display_name) || ((_user_email = user.email) === null || _user_email === void 0 ? void 0 : _user_email.split(\"@\")[0]) || \"\";\n setStaff(staffData);\n form.reset({\n name: displayName\n });\n setIsLoadingProfile(false);\n }\n }[\"UserProfileModal.useEffect.loadStaff\"];\n void loadStaff();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }\n }[\"UserProfileModal.useEffect\"], [\n isOpen,\n user === null || user === void 0 ? void 0 : user.id\n ]);\n const onSubmit = async (values)=>{\n if (!user) return;\n const trimmedName = values.name.trim();\n const { error } = await supabase.from(\"staff\").update({\n name: trimmedName\n }).eq(\"id\", user.id);\n if (error) {\n sonner__WEBPACK_IMPORTED_MODULE_3__.toast.error(\"Error al actualizar el perfil.\");\n return;\n }\n // Sync display name to Supabase Auth user metadata\n await supabase.auth.updateUser({\n data: {\n display_name: trimmedName\n }\n });\n sonner__WEBPACK_IMPORTED_MODULE_3__.toast.success(\"Perfil actualizado.\");\n closeModal();\n };\n var _staff_email, _ref;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_8__.Dialog, {\n open: isOpen,\n onOpenChange: (open)=>!open && closeModal(),\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_8__.DialogContent, {\n className: \"max-w-sm rounded-[18px]\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_8__.DialogHeader, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_8__.DialogTitle, {\n className: \"font-heading text-lg font-semibold\",\n children: \"Editar perfil\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 105,\n columnNumber: 11\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_dialog__WEBPACK_IMPORTED_MODULE_8__.DialogDescription, {\n className: \"text-xs text-muted-foreground\",\n children: \"Actualiza tus datos personales\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 108,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 104,\n columnNumber: 9\n }, this),\n isLoadingProfile ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-center py-8\",\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Loader2_Mail_Moon_Save_Shield_Sun_User_lucide_react__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n className: \"size-5 animate-spin text-muted-foreground\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 115,\n columnNumber: 13\n }, this)\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 114,\n columnNumber: 11\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"form\", {\n onSubmit: form.handleSubmit(onSubmit),\n className: \"space-y-4 mt-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-1.5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_label__WEBPACK_IMPORTED_MODULE_11__.Label, {\n className: \"text-xs text-muted-foreground flex items-center gap-1.5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Loader2_Mail_Moon_Save_Shield_Sun_User_lucide_react__WEBPACK_IMPORTED_MODULE_16__[\"default\"], {\n className: \"size-3\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 122,\n columnNumber: 17\n }, this),\n \"Email\"\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 121,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_10__.Input, {\n value: (_ref = (_staff_email = staff === null || staff === void 0 ? void 0 : staff.email) !== null && _staff_email !== void 0 ? _staff_email : user === null || user === void 0 ? void 0 : user.email) !== null && _ref !== void 0 ? _ref : \"\",\n disabled: true,\n className: \"rounded-[12px] h-9 text-sm bg-muted/50 cursor-not-allowed\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 125,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 120,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-1.5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_label__WEBPACK_IMPORTED_MODULE_11__.Label, {\n className: \"text-xs text-muted-foreground flex items-center gap-1.5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Loader2_Mail_Moon_Save_Shield_Sun_User_lucide_react__WEBPACK_IMPORTED_MODULE_17__[\"default\"], {\n className: \"size-3\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 135,\n columnNumber: 17\n }, this),\n \"Rol\"\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 134,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_10__.Input, {\n value: role !== null && role !== void 0 ? role : \"\",\n disabled: true,\n className: \"rounded-[12px] h-9 text-sm bg-muted/50 cursor-not-allowed capitalize\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 138,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 133,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"space-y-1.5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_label__WEBPACK_IMPORTED_MODULE_11__.Label, {\n className: \"text-xs text-muted-foreground flex items-center gap-1.5\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Loader2_Mail_Moon_Save_Shield_Sun_User_lucide_react__WEBPACK_IMPORTED_MODULE_18__[\"default\"], {\n className: \"size-3\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 148,\n columnNumber: 17\n }, this),\n \"Nombre\"\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 147,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_input__WEBPACK_IMPORTED_MODULE_10__.Input, {\n ...form.register(\"name\"),\n placeholder: \"Tu nombre completo\",\n className: \"rounded-[12px] h-9 text-sm\",\n autoFocus: true\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 151,\n columnNumber: 15\n }, this),\n form.formState.errors.name && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"p\", {\n className: \"text-xs text-destructive\",\n children: form.formState.errors.name.message\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 158,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 146,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center justify-between py-2 px-3 rounded-[12px] bg-muted/30\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex items-center gap-2\",\n children: [\n theme === \"dark\" ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Loader2_Mail_Moon_Save_Shield_Sun_User_lucide_react__WEBPACK_IMPORTED_MODULE_19__[\"default\"], {\n className: \"size-3.5 text-muted-foreground\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 168,\n columnNumber: 19\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Loader2_Mail_Moon_Save_Shield_Sun_User_lucide_react__WEBPACK_IMPORTED_MODULE_20__[\"default\"], {\n className: \"size-3.5 text-muted-foreground\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 170,\n columnNumber: 19\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_label__WEBPACK_IMPORTED_MODULE_11__.Label, {\n className: \"text-xs cursor-pointer\",\n onClick: ()=>setTheme(theme === \"dark\" ? \"light\" : \"dark\"),\n children: \"Tema oscuro\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 172,\n columnNumber: 17\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 166,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_switch__WEBPACK_IMPORTED_MODULE_12__.Switch, {\n checked: theme === \"dark\",\n onCheckedChange: (checked)=>setTheme(checked ? \"dark\" : \"light\"),\n \"aria-label\": \"Cambiar tema\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 176,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 165,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n className: \"flex gap-2 pt-2\",\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_9__.Button, {\n type: \"button\",\n variant: \"outline\",\n className: \"flex-1 rounded-[12px]\",\n onClick: closeModal,\n children: \"Cancelar\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 184,\n columnNumber: 15\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_9__.Button, {\n type: \"submit\",\n className: \"flex-1 bg-primary text-[#0D141D] font-semibold rounded-[12px] hover:bg-primary/90\",\n disabled: form.formState.isSubmitting,\n children: form.formState.isSubmitting ? /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Loader2_Mail_Moon_Save_Shield_Sun_User_lucide_react__WEBPACK_IMPORTED_MODULE_15__[\"default\"], {\n className: \"size-4 animate-spin\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 198,\n columnNumber: 19\n }, this) : /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_Loader2_Mail_Moon_Save_Shield_Sun_User_lucide_react__WEBPACK_IMPORTED_MODULE_21__[\"default\"], {\n className: \"size-3.5 mr-1.5\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 201,\n columnNumber: 21\n }, this),\n \"Guardar\"\n ]\n }, void 0, true)\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 192,\n columnNumber: 15\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 183,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 118,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 103,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/layout/UserProfileModal.tsx\",\n lineNumber: 102,\n columnNumber: 5\n }, this);\n}\n_s(UserProfileModal, \"+Yh8EatKH51nENkBb7VLQWahO7M=\", false, function() {\n return [\n _lib_stores_uiStore__WEBPACK_IMPORTED_MODULE_6__.useUIStore,\n _lib_stores_uiStore__WEBPACK_IMPORTED_MODULE_6__.useUIStore,\n _lib_stores_authStore__WEBPACK_IMPORTED_MODULE_7__.useAuthStore,\n _lib_stores_authStore__WEBPACK_IMPORTED_MODULE_7__.useAuthStore,\n next_themes__WEBPACK_IMPORTED_MODULE_4__.useTheme,\n react_hook_form__WEBPACK_IMPORTED_MODULE_14__.useForm\n ];\n});\n_c = UserProfileModal;\nvar _c;\n$RefreshReg$(_c, \"UserProfileModal\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL2xheW91dC9Vc2VyUHJvZmlsZU1vZGFsLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVxRDtBQUNYO0FBQ1k7QUFDOUI7QUFDTztBQUNRO0FBQ3FDO0FBQ3JCO0FBQ0w7QUFDSTtBQU90QjtBQUNnQjtBQUNGO0FBQ0E7QUFDRTtBQUdoRCxNQUFNMkIsZ0JBQWdCdEIsd0NBQVEsQ0FBQztJQUM3QndCLE1BQU14Qix3Q0FBUSxHQUFHMEIsR0FBRyxDQUFDLEdBQUc7QUFDMUI7QUFJTyxTQUFTQzs7SUFDZCxNQUFNQyxXQUFXL0IsOENBQU9BOzhDQUFDLElBQU1hLG9FQUFZQTs2Q0FBSSxFQUFFO0lBQ2pELE1BQU1tQixjQUFjbEIsK0RBQVVBO29EQUFDLENBQUNtQixJQUFNQSxFQUFFRCxXQUFXOztJQUNuRCxNQUFNRSxhQUFhcEIsK0RBQVVBO21EQUFDLENBQUNtQixJQUFNQSxFQUFFQyxVQUFVOztJQUNqRCxNQUFNQyxPQUFPcEIsbUVBQVlBOytDQUFDLENBQUNrQixJQUFNQSxFQUFFRSxJQUFJOztJQUN2QyxNQUFNQyxPQUFPckIsbUVBQVlBOytDQUFDLENBQUNrQixJQUFNQSxFQUFFRyxJQUFJOztJQUN2QyxNQUFNLEVBQUVDLEtBQUssRUFBRUMsUUFBUSxFQUFFLEdBQUdqQyxxREFBUUE7SUFDcEMsTUFBTWtDLFNBQVNQLGdCQUFnQjtJQUUvQixNQUFNLENBQUNRLE9BQU9DLFNBQVMsR0FBRzFDLCtDQUFRQSxDQUFlO0lBQ2pELE1BQU0sQ0FBQzJDLGtCQUFrQkMsb0JBQW9CLEdBQUc1QywrQ0FBUUEsQ0FBQztJQUV6RCxNQUFNNkMsT0FBTzNDLHlEQUFPQSxDQUFnQjtRQUNsQzRDLFVBQVUzQyxvRUFBV0EsQ0FBQ3VCO1FBQ3RCcUIsZUFBZTtZQUFFbkIsTUFBTTtRQUFHO0lBQzVCO0lBRUE3QixnREFBU0E7c0NBQUM7WUFDUixJQUFJLENBQUN5QyxV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QUFNQTtvQ0FDTG1FLE1BQUs7b0NBQ0xoQixXQUFVO29DQUNWSSxVQUFVaEMsS0FBS29DLFNBQVMsQ0FBQ1UsWUFBWTs4Q0FFcEM5QyxLQUFLb0MsU0FBUyxDQUFDVSxZQUFZLGlCQUMxQiw4REFBQ3BGLG1IQUFPQTt3Q0FBQ2tFLFdBQVU7Ozs7OzZEQUVuQjs7MERBQ0UsOERBQUM5RCxtSEFBSUE7Z0RBQUM4RCxXQUFVOzs7Ozs7NENBQW9COzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBV3hEO0dBcExnQjFDOztRQUVNaEIsMkRBQVVBO1FBQ1hBLDJEQUFVQTtRQUNoQkMsK0RBQVlBO1FBQ1pBLCtEQUFZQTtRQUNHVixpREFBUUE7UUFNdkJKLHFEQUFPQTs7O0tBWk42QiIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL3NyYy9jb21wb25lbnRzL2xheW91dC9Vc2VyUHJvZmlsZU1vZGFsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBjbGllbnRcIjtcblxuaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VTdGF0ZSwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gXCJyZWFjdC1ob29rLWZvcm1cIjtcbmltcG9ydCB7IHpvZFJlc29sdmVyIH0gZnJvbSBcIkBob29rZm9ybS9yZXNvbHZlcnMvem9kXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgdG9hc3QgfSBmcm9tIFwic29ubmVyXCI7XG5pbXBvcnQgeyB1c2VUaGVtZSB9IGZyb20gXCJuZXh0LXRoZW1lc1wiO1xuaW1wb3J0IHsgTG9hZGVyMiwgVXNlciwgTWFpbCwgU2hpZWxkLCBTYXZlLCBTdW4sIE1vb24gfSBmcm9tIFwibHVjaWRlLXJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVDbGllbnQgfSBmcm9tIFwiQC91dGlscy9zdXBhYmFzZS9jbGllbnRcIjtcbmltcG9ydCB7IHVzZVVJU3RvcmUgfSBmcm9tIFwiQC9saWIvc3RvcmVzL3VpU3RvcmVcIjtcbmltcG9ydCB7IHVzZUF1dGhTdG9yZSB9IGZyb20gXCJAL2xpYi9zdG9yZXMvYXV0aFN0b3JlXCI7XG5pbXBvcnQge1xuICBEaWFsb2csXG4gIERpYWxvZ0NvbnRlbnQsXG4gIERpYWxvZ0hlYWRlcixcbiAgRGlhbG9nVGl0bGUsXG4gIERpYWxvZ0Rlc2NyaXB0aW9uLFxufSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2RpYWxvZ1wiO1xuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9idXR0b25cIjtcbmltcG9ydCB7IElucHV0IH0gZnJvbSBcIkAvY29tcG9uZW50cy91aS9pbnB1dFwiO1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL2xhYmVsXCI7XG5pbXBvcnQgeyBTd2l0Y2ggfSBmcm9tIFwiQC9jb21wb25lbnRzL3VpL3N3aXRjaFwiO1xuaW1wb3J0IHR5cGUgeyBTdGFmZiB9IGZyb20gXCJAL2xpYi90eXBlc1wiO1xuXG5jb25zdCBwcm9maWxlU2NoZW1hID0gei5vYmplY3Qoe1xuICBuYW1lOiB6LnN0cmluZygpLm1pbigyLCBcIkVsIG5vbWJyZSBkZWJlIHRlbmVyIGFsIG1lbm9zIDIgY2FyYWN0ZXJlc1wiKSxcbn0pO1xuXG50eXBlIFByb2ZpbGVWYWx1ZXMgPSB6LmluZmVyPHR5cGVvZiBwcm9maWxlU2NoZW1hPjtcblxuZXhwb3J0IGZ1bmN0aW9uIFVzZXJQcm9maWxlTW9kYWwoKSB7XG4gIGNvbnN0IHN1cGFiYXNlID0gdXNlTWVtbygoKSA9PiBjcmVhdGVDbGllbnQoKSwgW10pO1xuICBjb25zdCBhY3RpdmVNb2RhbCA9IHVzZVVJU3RvcmUoKHMpID0+IHMuYWN0aXZlTW9kYWwpO1xuICBjb25zdCBjbG9zZU1vZGFsID0gdXNlVUlTdG9yZSgocykgPT4gcy5jbG9zZU1vZGFsKTtcbiAgY29uc3QgdXNlciA9IHVzZUF1dGhTdG9yZSgocykgPT4gcy51c2VyKTtcbiAgY29uc3Qgcm9sZSA9IHVzZUF1dGhTdG9yZSgocykgPT4gcy5yb2xlKTtcbiAgY29uc3QgeyB0aGVtZSwgc2V0VGhlbWUgfSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IGlzT3BlbiA9IGFjdGl2ZU1vZGFsID09PSBcImVkaXRQcm9maWxlXCI7XG5cbiAgY29uc3QgW3N0YWZmLCBzZXRTdGFmZl0gPSB1c2VTdGF0ZTxTdGFmZiB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbaXNMb2FkaW5nUHJvZmlsZSwgc2V0SXNMb2FkaW5nUHJvZmlsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgZm9ybSA9IHVzZUZvcm08UHJvZmlsZVZhbHVlcz4oe1xuICAgIHJlc29sdmVyOiB6b2RSZXNvbHZlcihwcm9maWxlU2NoZW1hKSxcbiAgICBkZWZhdWx0VmFsdWVzOiB7IG5hbWU6IFwiXCIgfSxcbiAgfSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlzT3BlbiB8fCAhdXNlcikgcmV0dXJuO1xuXG4gICAgY29uc3QgbG9hZFN0YWZmID0gYXN5bmMgKCkgPT4ge1xuICAgICAgc2V0SXNMb2FkaW5nUHJvZmlsZSh0cnVlKTtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgc3VwYWJhc2VcbiAgICAgICAgLmZyb20oXCJzdGFmZlwiKVxuICAgICAgICAuc2VsZWN0KFwiKlwiKVxuICAgICAgICAuZXEoXCJpZFwiLCB1c2VyLmlkKVxuICAgICAgICAuc2luZ2xlKCk7XG5cbiAgICAgIGNvbnN0IHN0YWZmRGF0YSA9IChkYXRhID8/IG51bGwpIGFzIFN0YWZmIHwgbnVsbDtcblxuICAgICAgLy8gUHJlZmVyIHN0YWZmIG5hbWUsIGZhbGxiYWNrIHRvIGF1dGggZGlzcGxheV9uYW1lLCB0aGVuIHRvIGF1dGggZW1haWwgcHJlZml4XG4gICAgICBjb25zdCBkaXNwbGF5TmFtZSA9XG4gICAgICAgIHN0YWZmRGF0YT8ubmFtZSB8fFxuICAgICAgICAodXNlci51c2VyX21ldGFkYXRhIGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQpPy5kaXNwbGF5X25hbWUgfHxcbiAgICAgICAgdXNlci5lbWFpbD8uc3BsaXQoXCJAXCIpWzBdIHx8XG4gICAgICAgIFwiXCI7XG5cbiAgICAgIHNldFN0YWZmKHN0YWZmRGF0YSk7XG4gICAgICBmb3JtLnJlc2V0KHsgbmFtZTogZGlzcGxheU5hbWUgfSk7XG4gICAgICBzZXRJc0xvYWRpbmdQcm9maWxlKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgdm9pZCBsb2FkU3RhZmYoKTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtpc09wZW4sIHVzZXI/LmlkXSk7XG5cbiAgY29uc3Qgb25TdWJtaXQgPSBhc3luYyAodmFsdWVzOiBQcm9maWxlVmFsdWVzKSA9PiB7XG4gICAgaWYgKCF1c2VyKSByZXR1cm47XG5cbiAgICBjb25zdCB0cmltbWVkTmFtZSA9IHZhbHVlcy5uYW1lLnRyaW0oKTtcbiAgICBjb25zdCB7IGVycm9yIH0gPSBhd2FpdCBzdXBhYmFzZVxuICAgICAgLmZyb20oXCJzdGFmZlwiKVxuICAgICAgLnVwZGF0ZSh7IG5hbWU6IHRyaW1tZWROYW1lIH0pXG4gICAgICAuZXEoXCJpZFwiLCB1c2VyLmlkKTtcblxuICAgIGlmIChlcnJvcikge1xuICAgICAgdG9hc3QuZXJyb3IoXCJFcnJvciBhbCBhY3R1YWxpemFyIGVsIHBlcmZpbC5cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU3luYyBkaXNwbGF5IG5hbWUgdG8gU3VwYWJhc2UgQXV0aCB1c2VyIG1ldGFkYXRhXG4gICAgYXdhaXQgc3VwYWJhc2UuYXV0aC51cGRhdGVVc2VyKHtcbiAgICAgIGRhdGE6IHsgZGlzcGxheV9uYW1lOiB0cmltbWVkTmFtZSB9LFxuICAgIH0pO1xuXG4gICAgdG9hc3Quc3VjY2VzcyhcIlBlcmZpbCBhY3R1YWxpemFkby5cIik7XG4gICAgY2xvc2VNb2RhbCgpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPERpYWxvZyBvcGVuPXtpc09wZW59IG9uT3BlbkNoYW5nZT17KG9wZW4pID0+ICFvcGVuICYmIGNsb3NlTW9kYWwoKX0+XG4gICAgICA8RGlhbG9nQ29udGVudCBjbGFzc05hbWU9XCJtYXgtdy1zbSByb3VuZGVkLVsxOHB4XVwiPlxuICAgICAgICA8RGlhbG9nSGVhZGVyPlxuICAgICAgICAgIDxEaWFsb2dUaXRsZSBjbGFzc05hbWU9XCJmb250LWhlYWRpbmcgdGV4dC1sZyBmb250LXNlbWlib2xkXCI+XG4gICAgICAgICAgICBFZGl0YXIgcGVyZmlsXG4gICAgICAgICAgPC9EaWFsb2dUaXRsZT5cbiAgICAgICAgICA8RGlhbG9nRGVzY3JpcHRpb24gY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj5cbiAgICAgICAgICAgIEFjdHVhbGl6YSB0dXMgZGF0b3MgcGVyc29uYWxlc1xuICAgICAgICAgIDwvRGlhbG9nRGVzY3JpcHRpb24+XG4gICAgICAgIDwvRGlhbG9nSGVhZGVyPlxuXG4gICAgICAgIHtpc0xvYWRpbmdQcm9maWxlID8gKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcHktOFwiPlxuICAgICAgICAgICAgPExvYWRlcjIgY2xhc3NOYW1lPVwic2l6ZS01IGFuaW1hdGUtc3BpbiB0ZXh0LW11dGVkLWZvcmVncm91bmRcIiAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxmb3JtIG9uU3VibWl0PXtmb3JtLmhhbmRsZVN1Ym1pdChvblN1Ym1pdCl9IGNsYXNzTmFtZT1cInNwYWNlLXktNCBtdC0yXCI+XG4gICAgICAgICAgICB7LyogRW1haWwgKHJlYWQtb25seSkgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMS41XCI+XG4gICAgICAgICAgICAgIDxMYWJlbCBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMS41XCI+XG4gICAgICAgICAgICAgICAgPE1haWwgY2xhc3NOYW1lPVwic2l6ZS0zXCIgLz5cbiAgICAgICAgICAgICAgICBFbWFpbFxuICAgICAgICAgICAgICA8L0xhYmVsPlxuICAgICAgICAgICAgICA8SW5wdXRcbiAgICAgICAgICAgICAgICB2YWx1ZT17c3RhZmY/LmVtYWlsID8/IHVzZXI/LmVtYWlsID8/IFwiXCJ9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWRcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJyb3VuZGVkLVsxMnB4XSBoLTkgdGV4dC1zbSBiZy1tdXRlZC81MCBjdXJzb3Itbm90LWFsbG93ZWRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBSb2xlIChyZWFkLW9ubHkpICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTEuNVwiPlxuICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNVwiPlxuICAgICAgICAgICAgICAgIDxTaGllbGQgY2xhc3NOYW1lPVwic2l6ZS0zXCIgLz5cbiAgICAgICAgICAgICAgICBSb2xcbiAgICAgICAgICAgICAgPC9MYWJlbD5cbiAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgdmFsdWU9e3JvbGUgPz8gXCJcIn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInJvdW5kZWQtWzEycHhdIGgtOSB0ZXh0LXNtIGJnLW11dGVkLzUwIGN1cnNvci1ub3QtYWxsb3dlZCBjYXBpdGFsaXplXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICB7LyogTmFtZSAoZWRpdGFibGUpICovfVxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTEuNVwiPlxuICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmQgZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEuNVwiPlxuICAgICAgICAgICAgICAgIDxVc2VyIGNsYXNzTmFtZT1cInNpemUtM1wiIC8+XG4gICAgICAgICAgICAgICAgTm9tYnJlXG4gICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgIHsuLi5mb3JtLnJlZ2lzdGVyKFwibmFtZVwiKX1cbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR1IG5vbWJyZSBjb21wbGV0b1wiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwicm91bmRlZC1bMTJweF0gaC05IHRleHQtc21cIlxuICAgICAgICAgICAgICAgIGF1dG9Gb2N1c1xuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICB7Zm9ybS5mb3JtU3RhdGUuZXJyb3JzLm5hbWUgJiYgKFxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1kZXN0cnVjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAge2Zvcm0uZm9ybVN0YXRlLmVycm9ycy5uYW1lLm1lc3NhZ2V9XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIHsvKiBUaGVtZSB0b2dnbGUgKi99XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBweS0yIHB4LTMgcm91bmRlZC1bMTJweF0gYmctbXV0ZWQvMzBcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIHt0aGVtZSA9PT0gXCJkYXJrXCIgPyAoXG4gICAgICAgICAgICAgICAgICA8TW9vbiBjbGFzc05hbWU9XCJzaXplLTMuNSB0ZXh0LW11dGVkLWZvcmVncm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICA8U3VuIGNsYXNzTmFtZT1cInNpemUtMy41IHRleHQtbXV0ZWQtZm9yZWdyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8TGFiZWwgY2xhc3NOYW1lPVwidGV4dC14cyBjdXJzb3ItcG9pbnRlclwiIG9uQ2xpY2s9eygpID0+IHNldFRoZW1lKHRoZW1lID09PSBcImRhcmtcIiA/IFwibGlnaHRcIiA6IFwiZGFya1wiKX0+XG4gICAgICAgICAgICAgICAgICBUZW1hIG9zY3Vyb1xuICAgICAgICAgICAgICAgIDwvTGFiZWw+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8U3dpdGNoXG4gICAgICAgICAgICAgICAgY2hlY2tlZD17dGhlbWUgPT09IFwiZGFya1wifVxuICAgICAgICAgICAgICAgIG9uQ2hlY2tlZENoYW5nZT17KGNoZWNrZWQpID0+IHNldFRoZW1lKGNoZWNrZWQgPyBcImRhcmtcIiA6IFwibGlnaHRcIil9XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkNhbWJpYXIgdGVtYVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGdhcC0yIHB0LTJcIj5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJmbGV4LTEgcm91bmRlZC1bMTJweF1cIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2Nsb3NlTW9kYWx9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBDYW5jZWxhclxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImZsZXgtMSBiZy1wcmltYXJ5IHRleHQtWyMwRDE0MURdIGZvbnQtc2VtaWJvbGQgcm91bmRlZC1bMTJweF0gaG92ZXI6YmctcHJpbWFyeS85MFwiXG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Zvcm0uZm9ybVN0YXRlLmlzU3VibWl0dGluZ31cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtmb3JtLmZvcm1TdGF0ZS5pc1N1Ym1pdHRpbmcgPyAoXG4gICAgICAgICAgICAgICAgICA8TG9hZGVyMiBjbGFzc05hbWU9XCJzaXplLTQgYW5pbWF0ZS1zcGluXCIgLz5cbiAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgICAgPFNhdmUgY2xhc3NOYW1lPVwic2l6ZS0zLjUgbXItMS41XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgR3VhcmRhclxuICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICl9XG4gICAgICA8L0RpYWxvZ0NvbnRlbnQ+XG4gICAgPC9EaWFsb2c+XG4gICk7XG59XG4iXSwibmFtZXMiOlsidXNlRWZmZWN0IiwidXNlU3RhdGUiLCJ1c2VNZW1vIiwidXNlRm9ybSIsInpvZFJlc29sdmVyIiwieiIsInRvYXN0IiwidXNlVGhlbWUiLCJMb2FkZXIyIiwiVXNlciIsIk1haWwiLCJTaGllbGQiLCJTYXZlIiwiU3VuIiwiTW9vbiIsImNyZWF0ZUNsaWVudCIsInVzZVVJU3RvcmUiLCJ1c2VBdXRoU3RvcmUiLCJEaWFsb2ciLCJEaWFsb2dDb250ZW50IiwiRGlhbG9nSGVhZGVyIiwiRGlhbG9nVGl0bGUiLCJEaWFsb2dEZXNjcmlwdGlvbiIsIkJ1dHRvbiIsIklucHV0IiwiTGFiZWwiLCJTd2l0Y2giLCJwcm9maWxlU2NoZW1hIiwib2JqZWN0IiwibmFtZSIsInN0cmluZyIsIm1pbiIsIlVzZXJQcm9maWxlTW9kYWwiLCJzdXBhYmFzZSIsImFjdGl2ZU1vZGFsIiwicyIsImNsb3NlTW9kYWwiLCJ1c2VyIiwicm9sZSIsInRoZW1lIiwic2V0VGhlbWUiLCJpc09wZW4iLCJzdGFmZiIsInNldFN0YWZmIiwiaXNMb2FkaW5nUHJvZmlsZSIsInNldElzTG9hZGluZ1Byb2ZpbGUiLCJmb3JtIiwicmVzb2x2ZXIiLCJkZWZhdWx0VmFsdWVzIiwibG9hZFN0YWZmIiwiZGF0YSIsImZyb20iLCJzZWxlY3QiLCJlcSIsImlkIiwic2luZ2xlIiwic3RhZmZEYXRhIiwiZGlzcGxheU5hbWUiLCJ1c2VyX21ldGFkYXRhIiwiZGlzcGxheV9uYW1lIiwiZW1haWwiLCJzcGxpdCIsInJlc2V0Iiwib25TdWJtaXQiLCJ2YWx1ZXMiLCJ0cmltbWVkTmFtZSIsInRyaW0iLCJlcnJvciIsInVwZGF0ZSIsImF1dGgiLCJ1cGRhdGVVc2VyIiwic3VjY2VzcyIsIm9wZW4iLCJvbk9wZW5DaGFuZ2UiLCJjbGFzc05hbWUiLCJkaXYiLCJoYW5kbGVTdWJtaXQiLCJ2YWx1ZSIsImRpc2FibGVkIiwicmVnaXN0ZXIiLCJwbGFjZWhvbGRlciIsImF1dG9Gb2N1cyIsImZvcm1TdGF0ZSIsImVycm9ycyIsInAiLCJtZXNzYWdlIiwib25DbGljayIsImNoZWNrZWQiLCJvbkNoZWNrZWRDaGFuZ2UiLCJhcmlhLWxhYmVsIiwidHlwZSIsInZhcmlhbnQiLCJpc1N1Ym1pdHRpbmciXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/layout/UserProfileModal.tsx\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/components/providers/index.tsx":
|
||
/*!********************************************!*\
|
||
!*** ./src/components/providers/index.tsx ***!
|
||
\********************************************/
|
||
/***/ ((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 */ Providers: () => (/* binding */ Providers)\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 _utils_supabase_client__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/utils/supabase/client */ \"(app-pages-browser)/./src/utils/supabase/client.ts\");\n/* harmony import */ var _lib_stores_authStore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/lib/stores/authStore */ \"(app-pages-browser)/./src/lib/stores/authStore.ts\");\n/* harmony import */ var _lib_stores_notificationStore__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @/lib/stores/notificationStore */ \"(app-pages-browser)/./src/lib/stores/notificationStore.ts\");\n/* __next_internal_client_entry_do_not_use__ Providers auto */ \nvar _s = $RefreshSig$();\n\n\n\n\n/**\n * Proveedor global React que:\n * 1. Sincroniza la sesión de Supabase Auth con authStore.\n * 2. Suscribe a Supabase Realtime en conversations.\n */ function Providers(param) {\n let { children } = param;\n _s();\n const { setUser, setSession, setLoading } = (0,_lib_stores_authStore__WEBPACK_IMPORTED_MODULE_3__.useAuthStore)();\n const { setPendingConversations, addPendingConversation } = (0,_lib_stores_notificationStore__WEBPACK_IMPORTED_MODULE_4__.useNotificationStore)();\n const supabase = (0,react__WEBPACK_IMPORTED_MODULE_1__.useMemo)({\n \"Providers.useMemo[supabase]\": ()=>(0,_utils_supabase_client__WEBPACK_IMPORTED_MODULE_2__.createClient)()\n }[\"Providers.useMemo[supabase]\"], []);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Providers.useEffect\": ()=>{\n // Sincronizar sesión inicial\n const init = {\n \"Providers.useEffect.init\": async ()=>{\n var _data_session;\n setLoading(true);\n const { data } = await supabase.auth.getSession();\n setSession(data.session);\n var _data_session_user;\n setUser((_data_session_user = (_data_session = data.session) === null || _data_session === void 0 ? void 0 : _data_session.user) !== null && _data_session_user !== void 0 ? _data_session_user : null);\n setLoading(false);\n }\n }[\"Providers.useEffect.init\"];\n void init();\n // Listener para cambios de auth\n const { data: { subscription } } = supabase.auth.onAuthStateChange({\n \"Providers.useEffect\": (_event, session)=>{\n setSession(session);\n var _session_user;\n setUser((_session_user = session === null || session === void 0 ? void 0 : session.user) !== null && _session_user !== void 0 ? _session_user : null);\n }\n }[\"Providers.useEffect\"]);\n return ({\n \"Providers.useEffect\": ()=>subscription.unsubscribe()\n })[\"Providers.useEffect\"];\n }\n }[\"Providers.useEffect\"], [\n setSession,\n setUser,\n setLoading,\n supabase\n ]);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useEffect)({\n \"Providers.useEffect\": ()=>{\n // Cargar conversaciones pendientes iniciales\n const loadPending = {\n \"Providers.useEffect.loadPending\": async ()=>{\n const { data } = await supabase.from(\"conversations\").select(\"*, patient:patients(id, name, phone)\").eq(\"status\", \"pending_human\").order(\"last_message_at\", {\n ascending: false\n });\n if (data) setPendingConversations(data);\n }\n }[\"Providers.useEffect.loadPending\"];\n void loadPending();\n // Suscripción Realtime a conversaciones (INSERT y UPDATE)\n const channel = supabase.channel(\"conversations-realtime\").on(\"postgres_changes\", {\n event: \"INSERT\",\n schema: \"public\",\n table: \"conversations\",\n filter: \"status=eq.pending_human\"\n }, {\n \"Providers.useEffect.channel\": (payload)=>{\n addPendingConversation(payload.new);\n }\n }[\"Providers.useEffect.channel\"]).on(\"postgres_changes\", {\n event: \"UPDATE\",\n schema: \"public\",\n table: \"conversations\",\n filter: \"status=eq.pending_human\"\n }, {\n \"Providers.useEffect.channel\": (payload)=>{\n addPendingConversation(payload.new);\n }\n }[\"Providers.useEffect.channel\"]).subscribe();\n return ({\n \"Providers.useEffect\": ()=>{\n void supabase.removeChannel(channel);\n }\n })[\"Providers.useEffect\"];\n }\n }[\"Providers.useEffect\"], [\n setPendingConversations,\n addPendingConversation,\n supabase\n ]);\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.Fragment, {\n children: children\n }, void 0, false);\n}\n_s(Providers, \"nJ5fdjxWSq7Wgs1Ul5BpYBVuPHE=\", false, function() {\n return [\n _lib_stores_authStore__WEBPACK_IMPORTED_MODULE_3__.useAuthStore,\n _lib_stores_notificationStore__WEBPACK_IMPORTED_MODULE_4__.useNotificationStore\n ];\n});\n_c = Providers;\nvar _c;\n$RefreshReg$(_c, \"Providers\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL3Byb3ZpZGVycy9pbmRleC50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBRTJDO0FBQ1k7QUFDRDtBQUNnQjtBQUd0RTs7OztDQUlDLEdBQ00sU0FBU0ssVUFBVSxLQUEyQztRQUEzQyxFQUFFQyxRQUFRLEVBQWlDLEdBQTNDOztJQUN4QixNQUFNLEVBQUVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxVQUFVLEVBQUUsR0FBR04sbUVBQVlBO0lBQ3hELE1BQU0sRUFBRU8sdUJBQXVCLEVBQUVDLHNCQUFzQixFQUFFLEdBQUdQLG1GQUFvQkE7SUFDaEYsTUFBTVEsV0FBV1gsOENBQU9BO3VDQUFDLElBQU1DLG9FQUFZQTtzQ0FBSSxFQUFFO0lBRWpERixnREFBU0E7K0JBQUM7WUFDUiw2QkFBNkI7WUFDN0IsTUFBTWE7NENBQU87d0JBSUhDO29CQUhSTCxXQUFXO29CQUNYLE1BQU0sRUFBRUssSUFBSSxFQUFFLEdBQUcsTUFBTUYsU0FBU0csSUFBSSxDQUFDQyxVQUFVO29CQUMvQ1IsV0FBV00sS0FBS0csT0FBTzt3QkFDZkg7b0JBQVJQLFFBQVFPLENBQUFBLHNCQUFBQSxnQkFBQUEsS0FBS0csT0FBTyxjQUFaSCxvQ0FBQUEsY0FBY0ksSUFBSSxjQUFsQkosZ0NBQUFBLHFCQUFzQjtvQkFDOUJMLFdBQVc7Z0JBQ2I7O1lBRUEsS0FBS0k7WUFFTCxnQ0FBZ0M7WUFDaEMsTUFBTSxFQUFFQyxNQUFNLEVBQUVLLFlBQVksRUFBRSxFQUFFLEdBQUdQLFNBQVNHLElBQUksQ0FBQ0ssaUJBQWlCO3VDQUNoRSxDQUFDQyxRQUFRSjtvQkFDUFQsV0FBV1M7d0JBQ0hBO29CQUFSVixRQUFRVSxDQUFBQSxnQkFBQUEsb0JBQUFBLDhCQUFBQSxRQUFTQyxJQUFJLGNBQWJELDJCQUFBQSxnQkFBaUI7Z0JBQzNCOztZQUdGO3VDQUFPLElBQU1FLGFBQWFHLFdBQVc7O1FBQ3ZDOzhCQUFHO1FBQUNkO1FBQVlEO1FBQVNFO1FBQVlHO0tBQVM7SUFFOUNaLGdEQUFTQTsrQkFBQztZQUNSLDZDQUE2QztZQUM3QyxNQUFNdUI7bURBQWM7b0JBQ2xCLE1BQU0sRUFBRVQsSUFBSSxFQUFFLEdBQUcsTUFBTUYsU0FDcEJZLElBQUksQ0FBQyxpQkFDTEMsTUFBTSxDQUFDLHdDQUNQQyxFQUFFLENBQUMsVUFBVSxpQkFDYkMsS0FBSyxDQUFDLG1CQUFtQjt3QkFBRUMsV0FBVztvQkFBTTtvQkFFL0MsSUFBSWQsTUFBTUosd0JBQXdCSTtnQkFDcEM7O1lBRUEsS0FBS1M7WUFFTCwwREFBMEQ7WUFDMUQsTUFBTU0sVUFBVWpCLFNBQ2JpQixPQUFPLENBQUMsMEJBQ1JDLEVBQUUsQ0FDRCxvQkFDQTtnQkFDRUMsT0FBTztnQkFDUEMsUUFBUTtnQkFDUkMsT0FBTztnQkFDUEMsUUFBUTtZQUNWOytDQUNBLENBQUNDO29CQUNDeEIsdUJBQXVCd0IsUUFBUUMsR0FBRztnQkFDcEM7OENBRUROLEVBQUUsQ0FDRCxvQkFDQTtnQkFDRUMsT0FBTztnQkFDUEMsUUFBUTtnQkFDUkMsT0FBTztnQkFDUEMsUUFBUTtZQUNWOytDQUNBLENBQUNDO29CQUNDeEIsdUJBQXVCd0IsUUFBUUMsR0FBRztnQkFDcEM7OENBRURDLFNBQVM7WUFFWjt1Q0FBTztvQkFDTCxLQUFLekIsU0FBUzBCLGFBQWEsQ0FBQ1Q7Z0JBQzlCOztRQUNGOzhCQUFHO1FBQUNuQjtRQUF5QkM7UUFBd0JDO0tBQVM7SUFFOUQscUJBQU87a0JBQUdOOztBQUNaO0dBN0VnQkQ7O1FBQzhCRiwrREFBWUE7UUFDSUMsK0VBQW9CQTs7O0tBRmxFQyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL3NyYy9jb21wb25lbnRzL3Byb3ZpZGVycy9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2UgY2xpZW50XCI7XG5cbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlQ2xpZW50IH0gZnJvbSBcIkAvdXRpbHMvc3VwYWJhc2UvY2xpZW50XCI7XG5pbXBvcnQgeyB1c2VBdXRoU3RvcmUgfSBmcm9tIFwiQC9saWIvc3RvcmVzL2F1dGhTdG9yZVwiO1xuaW1wb3J0IHsgdXNlTm90aWZpY2F0aW9uU3RvcmUgfSBmcm9tIFwiQC9saWIvc3RvcmVzL25vdGlmaWNhdGlvblN0b3JlXCI7XG5pbXBvcnQgdHlwZSB7IENvbnZlcnNhdGlvbiB9IGZyb20gXCJAL2xpYi90eXBlc1wiO1xuXG4vKipcbiAqIFByb3ZlZWRvciBnbG9iYWwgUmVhY3QgcXVlOlxuICogMS4gU2luY3Jvbml6YSBsYSBzZXNpw7NuIGRlIFN1cGFiYXNlIEF1dGggY29uIGF1dGhTdG9yZS5cbiAqIDIuIFN1c2NyaWJlIGEgU3VwYWJhc2UgUmVhbHRpbWUgZW4gY29udmVyc2F0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFByb3ZpZGVycyh7IGNoaWxkcmVuIH06IHsgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZSB9KSB7XG4gIGNvbnN0IHsgc2V0VXNlciwgc2V0U2Vzc2lvbiwgc2V0TG9hZGluZyB9ID0gdXNlQXV0aFN0b3JlKCk7XG4gIGNvbnN0IHsgc2V0UGVuZGluZ0NvbnZlcnNhdGlvbnMsIGFkZFBlbmRpbmdDb252ZXJzYXRpb24gfSA9IHVzZU5vdGlmaWNhdGlvblN0b3JlKCk7XG4gIGNvbnN0IHN1cGFiYXNlID0gdXNlTWVtbygoKSA9PiBjcmVhdGVDbGllbnQoKSwgW10pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gU2luY3Jvbml6YXIgc2VzacOzbiBpbmljaWFsXG4gICAgY29uc3QgaW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHNldExvYWRpbmcodHJ1ZSk7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHN1cGFiYXNlLmF1dGguZ2V0U2Vzc2lvbigpO1xuICAgICAgc2V0U2Vzc2lvbihkYXRhLnNlc3Npb24pO1xuICAgICAgc2V0VXNlcihkYXRhLnNlc3Npb24/LnVzZXIgPz8gbnVsbCk7XG4gICAgICBzZXRMb2FkaW5nKGZhbHNlKTtcbiAgICB9O1xuXG4gICAgdm9pZCBpbml0KCk7XG5cbiAgICAvLyBMaXN0ZW5lciBwYXJhIGNhbWJpb3MgZGUgYXV0aFxuICAgIGNvbnN0IHsgZGF0YTogeyBzdWJzY3JpcHRpb24gfSB9ID0gc3VwYWJhc2UuYXV0aC5vbkF1dGhTdGF0ZUNoYW5nZShcbiAgICAgIChfZXZlbnQsIHNlc3Npb24pID0+IHtcbiAgICAgICAgc2V0U2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgICAgc2V0VXNlcihzZXNzaW9uPy51c2VyID8/IG51bGwpO1xuICAgICAgfVxuICAgICk7XG5cbiAgICByZXR1cm4gKCkgPT4gc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH0sIFtzZXRTZXNzaW9uLCBzZXRVc2VyLCBzZXRMb2FkaW5nLCBzdXBhYmFzZV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgLy8gQ2FyZ2FyIGNvbnZlcnNhY2lvbmVzIHBlbmRpZW50ZXMgaW5pY2lhbGVzXG4gICAgY29uc3QgbG9hZFBlbmRpbmcgPSBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHN1cGFiYXNlXG4gICAgICAgIC5mcm9tKFwiY29udmVyc2F0aW9uc1wiKVxuICAgICAgICAuc2VsZWN0KFwiKiwgcGF0aWVudDpwYXRpZW50cyhpZCwgbmFtZSwgcGhvbmUpXCIpXG4gICAgICAgIC5lcShcInN0YXR1c1wiLCBcInBlbmRpbmdfaHVtYW5cIilcbiAgICAgICAgLm9yZGVyKFwibGFzdF9tZXNzYWdlX2F0XCIsIHsgYXNjZW5kaW5nOiBmYWxzZSB9KTtcblxuICAgICAgaWYgKGRhdGEpIHNldFBlbmRpbmdDb252ZXJzYXRpb25zKGRhdGEgYXMgQ29udmVyc2F0aW9uW10pO1xuICAgIH07XG5cbiAgICB2b2lkIGxvYWRQZW5kaW5nKCk7XG5cbiAgICAvLyBTdXNjcmlwY2nDs24gUmVhbHRpbWUgYSBjb252ZXJzYWNpb25lcyAoSU5TRVJUIHkgVVBEQVRFKVxuICAgIGNvbnN0IGNoYW5uZWwgPSBzdXBhYmFzZVxuICAgICAgLmNoYW5uZWwoXCJjb252ZXJzYXRpb25zLXJlYWx0aW1lXCIpXG4gICAgICAub24oXG4gICAgICAgIFwicG9zdGdyZXNfY2hhbmdlc1wiLFxuICAgICAgICB7XG4gICAgICAgICAgZXZlbnQ6IFwiSU5TRVJUXCIsXG4gICAgICAgICAgc2NoZW1hOiBcInB1YmxpY1wiLFxuICAgICAgICAgIHRhYmxlOiBcImNvbnZlcnNhdGlvbnNcIixcbiAgICAgICAgICBmaWx0ZXI6IFwic3RhdHVzPWVxLnBlbmRpbmdfaHVtYW5cIixcbiAgICAgICAgfSxcbiAgICAgICAgKHBheWxvYWQpID0+IHtcbiAgICAgICAgICBhZGRQZW5kaW5nQ29udmVyc2F0aW9uKHBheWxvYWQubmV3IGFzIENvbnZlcnNhdGlvbik7XG4gICAgICAgIH1cbiAgICAgIClcbiAgICAgIC5vbihcbiAgICAgICAgXCJwb3N0Z3Jlc19jaGFuZ2VzXCIsXG4gICAgICAgIHtcbiAgICAgICAgICBldmVudDogXCJVUERBVEVcIixcbiAgICAgICAgICBzY2hlbWE6IFwicHVibGljXCIsXG4gICAgICAgICAgdGFibGU6IFwiY29udmVyc2F0aW9uc1wiLFxuICAgICAgICAgIGZpbHRlcjogXCJzdGF0dXM9ZXEucGVuZGluZ19odW1hblwiLFxuICAgICAgICB9LFxuICAgICAgICAocGF5bG9hZCkgPT4ge1xuICAgICAgICAgIGFkZFBlbmRpbmdDb252ZXJzYXRpb24ocGF5bG9hZC5uZXcgYXMgQ29udmVyc2F0aW9uKTtcbiAgICAgICAgfVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHZvaWQgc3VwYWJhc2UucmVtb3ZlQ2hhbm5lbChjaGFubmVsKTtcbiAgICB9O1xuICB9LCBbc2V0UGVuZGluZ0NvbnZlcnNhdGlvbnMsIGFkZFBlbmRpbmdDb252ZXJzYXRpb24sIHN1cGFiYXNlXSk7XG5cbiAgcmV0dXJuIDw+e2NoaWxkcmVufTwvPjtcbn1cbiJdLCJuYW1lcyI6WyJ1c2VFZmZlY3QiLCJ1c2VNZW1vIiwiY3JlYXRlQ2xpZW50IiwidXNlQXV0aFN0b3JlIiwidXNlTm90aWZpY2F0aW9uU3RvcmUiLCJQcm92aWRlcnMiLCJjaGlsZHJlbiIsInNldFVzZXIiLCJzZXRTZXNzaW9uIiwic2V0TG9hZGluZyIsInNldFBlbmRpbmdDb252ZXJzYXRpb25zIiwiYWRkUGVuZGluZ0NvbnZlcnNhdGlvbiIsInN1cGFiYXNlIiwiaW5pdCIsImRhdGEiLCJhdXRoIiwiZ2V0U2Vzc2lvbiIsInNlc3Npb24iLCJ1c2VyIiwic3Vic2NyaXB0aW9uIiwib25BdXRoU3RhdGVDaGFuZ2UiLCJfZXZlbnQiLCJ1bnN1YnNjcmliZSIsImxvYWRQZW5kaW5nIiwiZnJvbSIsInNlbGVjdCIsImVxIiwib3JkZXIiLCJhc2NlbmRpbmciLCJjaGFubmVsIiwib24iLCJldmVudCIsInNjaGVtYSIsInRhYmxlIiwiZmlsdGVyIiwicGF5bG9hZCIsIm5ldyIsInN1YnNjcmliZSIsInJlbW92ZUNoYW5uZWwiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/providers/index.tsx\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/components/ui/badge.tsx":
|
||
/*!*************************************!*\
|
||
!*** ./src/components/ui/badge.tsx ***!
|
||
\*************************************/
|
||
/***/ ((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 */ Badge: () => (/* binding */ Badge),\n/* harmony export */ badgeVariants: () => (/* binding */ badgeVariants)\n/* harmony export */ });\n/* harmony import */ var _base_ui_react_merge_props__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @base-ui/react/merge-props */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/merge-props/mergeProps.js\");\n/* harmony import */ var _base_ui_react_use_render__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/react/use-render */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/use-render/useRender.js\");\n/* harmony import */ var class_variance_authority__WEBPACK_IMPORTED_MODULE_0__ = __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_1__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./src/lib/utils.ts\");\nvar _s = $RefreshSig$();\n\n\n\n\nconst badgeVariants = (0,class_variance_authority__WEBPACK_IMPORTED_MODULE_0__.cva)(\"group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!\", {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a]:hover:bg-primary/80\",\n secondary: \"bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80\",\n destructive: \"bg-destructive/10 text-destructive focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:focus-visible:ring-destructive/40 [a]:hover:bg-destructive/20\",\n outline: \"border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground\",\n ghost: \"hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50\",\n link: \"text-primary underline-offset-4 hover:underline\"\n }\n },\n defaultVariants: {\n variant: \"default\"\n }\n});\nfunction Badge(param) {\n let { className, variant = \"default\", render, ...props } = param;\n _s();\n return (0,_base_ui_react_use_render__WEBPACK_IMPORTED_MODULE_2__.useRender)({\n defaultTagName: \"span\",\n props: (0,_base_ui_react_merge_props__WEBPACK_IMPORTED_MODULE_3__.mergeProps)({\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_1__.cn)(badgeVariants({\n variant\n }), className)\n }, props),\n render,\n state: {\n slot: \"badge\",\n variant\n }\n });\n}\n_s(Badge, \"Yxn2JZFvED13KkqGsiyGOoQOkjM=\", false, function() {\n return [\n _base_ui_react_use_render__WEBPACK_IMPORTED_MODULE_2__.useRender\n ];\n});\n_c = Badge;\n\nvar _c;\n$RefreshReg$(_c, \"Badge\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL3VpL2JhZGdlLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQXVEO0FBQ0Y7QUFDWTtBQUVqQztBQUVoQyxNQUFNSSxnQkFBZ0JGLDZEQUFHQSxDQUN2Qiw4ZUFDQTtJQUNFRyxVQUFVO1FBQ1JDLFNBQVM7WUFDUEMsU0FBUztZQUNUQyxXQUNFO1lBQ0ZDLGFBQ0U7WUFDRkMsU0FDRTtZQUNGQyxPQUNFO1lBQ0ZDLE1BQU07UUFDUjtJQUNGO0lBQ0FDLGlCQUFpQjtRQUNmUCxTQUFTO0lBQ1g7QUFDRjtBQUdGLFNBQVNRLE1BQU0sS0FLeUQ7UUFMekQsRUFDYkMsU0FBUyxFQUNUVCxVQUFVLFNBQVMsRUFDbkJVLE1BQU0sRUFDTixHQUFHQyxPQUNtRSxHQUx6RDs7SUFNYixPQUFPaEIsb0VBQVNBLENBQUM7UUFDZmlCLGdCQUFnQjtRQUNoQkQsT0FBT2pCLHNFQUFVQSxDQUNmO1lBQ0VlLFdBQVdaLDhDQUFFQSxDQUFDQyxjQUFjO2dCQUFFRTtZQUFRLElBQUlTO1FBQzVDLEdBQ0FFO1FBRUZEO1FBQ0FHLE9BQU87WUFDTEMsTUFBTTtZQUNOZDtRQUNGO0lBQ0Y7QUFDRjtHQXBCU1E7O1FBTUFiLGdFQUFTQTs7O0tBTlRhO0FBc0JzQiIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL3NyYy9jb21wb25lbnRzL3VpL2JhZGdlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtZXJnZVByb3BzIH0gZnJvbSBcIkBiYXNlLXVpL3JlYWN0L21lcmdlLXByb3BzXCJcbmltcG9ydCB7IHVzZVJlbmRlciB9IGZyb20gXCJAYmFzZS11aS9yZWFjdC91c2UtcmVuZGVyXCJcbmltcG9ydCB7IGN2YSwgdHlwZSBWYXJpYW50UHJvcHMgfSBmcm9tIFwiY2xhc3MtdmFyaWFuY2UtYXV0aG9yaXR5XCJcblxuaW1wb3J0IHsgY24gfSBmcm9tIFwiQC9saWIvdXRpbHNcIlxuXG5jb25zdCBiYWRnZVZhcmlhbnRzID0gY3ZhKFxuICBcImdyb3VwL2JhZGdlIGlubGluZS1mbGV4IGgtNSB3LWZpdCBzaHJpbmstMCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTEgb3ZlcmZsb3ctaGlkZGVuIHJvdW5kZWQtNHhsIGJvcmRlciBib3JkZXItdHJhbnNwYXJlbnQgcHgtMiBweS0wLjUgdGV4dC14cyBmb250LW1lZGl1bSB3aGl0ZXNwYWNlLW5vd3JhcCB0cmFuc2l0aW9uLWFsbCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy1bM3B4XSBmb2N1cy12aXNpYmxlOnJpbmctcmluZy81MCBoYXMtZGF0YS1baWNvbj1pbmxpbmUtZW5kXTpwci0xLjUgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0xLjUgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIFsmPnN2Z106cG9pbnRlci1ldmVudHMtbm9uZSBbJj5zdmddOnNpemUtMyFcIixcbiAge1xuICAgIHZhcmlhbnRzOiB7XG4gICAgICB2YXJpYW50OiB7XG4gICAgICAgIGRlZmF1bHQ6IFwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBbYV06aG92ZXI6YmctcHJpbWFyeS84MFwiLFxuICAgICAgICBzZWNvbmRhcnk6XG4gICAgICAgICAgXCJiZy1zZWNvbmRhcnkgdGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZCBbYV06aG92ZXI6Ymctc2Vjb25kYXJ5LzgwXCIsXG4gICAgICAgIGRlc3RydWN0aXZlOlxuICAgICAgICAgIFwiYmctZGVzdHJ1Y3RpdmUvMTAgdGV4dC1kZXN0cnVjdGl2ZSBmb2N1cy12aXNpYmxlOnJpbmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpiZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS80MCBbYV06aG92ZXI6YmctZGVzdHJ1Y3RpdmUvMjBcIixcbiAgICAgICAgb3V0bGluZTpcbiAgICAgICAgICBcImJvcmRlci1ib3JkZXIgdGV4dC1mb3JlZ3JvdW5kIFthXTpob3ZlcjpiZy1tdXRlZCBbYV06aG92ZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCIsXG4gICAgICAgIGdob3N0OlxuICAgICAgICAgIFwiaG92ZXI6YmctbXV0ZWQgaG92ZXI6dGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGRhcms6aG92ZXI6YmctbXV0ZWQvNTBcIixcbiAgICAgICAgbGluazogXCJ0ZXh0LXByaW1hcnkgdW5kZXJsaW5lLW9mZnNldC00IGhvdmVyOnVuZGVybGluZVwiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRlZmF1bHRWYXJpYW50czoge1xuICAgICAgdmFyaWFudDogXCJkZWZhdWx0XCIsXG4gICAgfSxcbiAgfVxuKVxuXG5mdW5jdGlvbiBCYWRnZSh7XG4gIGNsYXNzTmFtZSxcbiAgdmFyaWFudCA9IFwiZGVmYXVsdFwiLFxuICByZW5kZXIsXG4gIC4uLnByb3BzXG59OiB1c2VSZW5kZXIuQ29tcG9uZW50UHJvcHM8XCJzcGFuXCI+ICYgVmFyaWFudFByb3BzPHR5cGVvZiBiYWRnZVZhcmlhbnRzPikge1xuICByZXR1cm4gdXNlUmVuZGVyKHtcbiAgICBkZWZhdWx0VGFnTmFtZTogXCJzcGFuXCIsXG4gICAgcHJvcHM6IG1lcmdlUHJvcHM8XCJzcGFuXCI+KFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWU6IGNuKGJhZGdlVmFyaWFudHMoeyB2YXJpYW50IH0pLCBjbGFzc05hbWUpLFxuICAgICAgfSxcbiAgICAgIHByb3BzXG4gICAgKSxcbiAgICByZW5kZXIsXG4gICAgc3RhdGU6IHtcbiAgICAgIHNsb3Q6IFwiYmFkZ2VcIixcbiAgICAgIHZhcmlhbnQsXG4gICAgfSxcbiAgfSlcbn1cblxuZXhwb3J0IHsgQmFkZ2UsIGJhZGdlVmFyaWFudHMgfVxuIl0sIm5hbWVzIjpbIm1lcmdlUHJvcHMiLCJ1c2VSZW5kZXIiLCJjdmEiLCJjbiIsImJhZGdlVmFyaWFudHMiLCJ2YXJpYW50cyIsInZhcmlhbnQiLCJkZWZhdWx0Iiwic2Vjb25kYXJ5IiwiZGVzdHJ1Y3RpdmUiLCJvdXRsaW5lIiwiZ2hvc3QiLCJsaW5rIiwiZGVmYXVsdFZhcmlhbnRzIiwiQmFkZ2UiLCJjbGFzc05hbWUiLCJyZW5kZXIiLCJwcm9wcyIsImRlZmF1bHRUYWdOYW1lIiwic3RhdGUiLCJzbG90Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/ui/badge.tsx\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/components/ui/button.tsx":
|
||
/*!**************************************!*\
|
||
!*** ./src/components/ui/button.tsx ***!
|
||
\**************************************/
|
||
/***/ ((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: () => (/* binding */ Button),\n/* harmony export */ buttonVariants: () => (/* 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 _base_ui_react_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @base-ui/react/button */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/button/Button.js\");\n/* harmony import */ var class_variance_authority__WEBPACK_IMPORTED_MODULE_1__ = __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_2__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./src/lib/utils.ts\");\n\n\n\n\nconst buttonVariants = (0,class_variance_authority__WEBPACK_IMPORTED_MODULE_1__.cva)(\"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\", {\n variants: {\n variant: {\n default: \"bg-primary text-primary-foreground [a]:hover:bg-primary/80\",\n outline: \"border-border bg-background hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50\",\n secondary: \"bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground\",\n ghost: \"hover:bg-muted hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground dark:hover:bg-muted/50\",\n destructive: \"bg-destructive/10 text-destructive hover:bg-destructive/20 focus-visible:border-destructive/40 focus-visible:ring-destructive/20 dark:bg-destructive/20 dark:hover:bg-destructive/30 dark:focus-visible:ring-destructive/40\",\n link: \"text-primary underline-offset-4 hover:underline\"\n },\n size: {\n default: \"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n xs: \"h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3\",\n sm: \"h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5\",\n lg: \"h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2\",\n icon: \"size-8\",\n \"icon-xs\": \"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg\",\n \"icon-lg\": \"size-9\"\n }\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\"\n }\n});\nfunction Button(param) {\n let { className, variant = \"default\", size = \"default\", ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_base_ui_react_button__WEBPACK_IMPORTED_MODULE_3__.Button, {\n \"data-slot\": \"button\",\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(buttonVariants({\n variant,\n size,\n className\n })),\n ...props\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/button.tsx\",\n lineNumber: 50,\n columnNumber: 5\n }, this);\n}\n_c = Button;\n\nvar _c;\n$RefreshReg$(_c, \"Button\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL3VpL2J1dHRvbi50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFpRTtBQUNBO0FBRWpDO0FBRWhDLE1BQU1JLGlCQUFpQkYsNkRBQUdBLENBQ3hCLDhsQkFDQTtJQUNFRyxVQUFVO1FBQ1JDLFNBQVM7WUFDUEMsU0FBUztZQUNUQyxTQUNFO1lBQ0ZDLFdBQ0U7WUFDRkMsT0FDRTtZQUNGQyxhQUNFO1lBQ0ZDLE1BQU07UUFDUjtRQUNBQyxNQUFNO1lBQ0pOLFNBQ0U7WUFDRk8sSUFBSTtZQUNKQyxJQUFJO1lBQ0pDLElBQUk7WUFDSkMsTUFBTTtZQUNOLFdBQ0U7WUFDRixXQUNFO1lBQ0YsV0FBVztRQUNiO0lBQ0Y7SUFDQUMsaUJBQWlCO1FBQ2ZaLFNBQVM7UUFDVE8sTUFBTTtJQUNSO0FBQ0Y7QUFHRixTQUFTYixPQUFPLEtBSzhDO1FBTDlDLEVBQ2RtQixTQUFTLEVBQ1RiLFVBQVUsU0FBUyxFQUNuQk8sT0FBTyxTQUFTLEVBQ2hCLEdBQUdPLE9BQ3lELEdBTDlDO0lBTWQscUJBQ0UsOERBQUNuQix5REFBZUE7UUFDZG9CLGFBQVU7UUFDVkYsV0FBV2hCLDhDQUFFQSxDQUFDQyxlQUFlO1lBQUVFO1lBQVNPO1lBQU1NO1FBQVU7UUFDdkQsR0FBR0MsS0FBSzs7Ozs7O0FBR2Y7S0FiU3BCO0FBZXdCIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvc3JjL2NvbXBvbmVudHMvdWkvYnV0dG9uLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCdXR0b24gYXMgQnV0dG9uUHJpbWl0aXZlIH0gZnJvbSBcIkBiYXNlLXVpL3JlYWN0L2J1dHRvblwiXG5pbXBvcnQgeyBjdmEsIHR5cGUgVmFyaWFudFByb3BzIH0gZnJvbSBcImNsYXNzLXZhcmlhbmNlLWF1dGhvcml0eVwiXG5cbmltcG9ydCB7IGNuIH0gZnJvbSBcIkAvbGliL3V0aWxzXCJcblxuY29uc3QgYnV0dG9uVmFyaWFudHMgPSBjdmEoXG4gIFwiZ3JvdXAvYnV0dG9uIGlubGluZS1mbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciByb3VuZGVkLWxnIGJvcmRlciBib3JkZXItdHJhbnNwYXJlbnQgYmctY2xpcC1wYWRkaW5nIHRleHQtc20gZm9udC1tZWRpdW0gd2hpdGVzcGFjZS1ub3dyYXAgdHJhbnNpdGlvbi1hbGwgb3V0bGluZS1ub25lIHNlbGVjdC1ub25lIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLTMgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYWN0aXZlOm5vdC1hcmlhLVtoYXNwb3B1cF06dHJhbnNsYXRlLXktcHggZGlzYWJsZWQ6cG9pbnRlci1ldmVudHMtbm9uZSBkaXNhYmxlZDpvcGFjaXR5LTUwIGFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUgYXJpYS1pbnZhbGlkOnJpbmctMyBhcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS8yMCBkYXJrOmFyaWEtaW52YWxpZDpib3JkZXItZGVzdHJ1Y3RpdmUvNTAgZGFyazphcmlhLWludmFsaWQ6cmluZy1kZXN0cnVjdGl2ZS80MCBbJl9zdmddOnBvaW50ZXItZXZlbnRzLW5vbmUgWyZfc3ZnXTpzaHJpbmstMCBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTRcIixcbiAge1xuICAgIHZhcmlhbnRzOiB7XG4gICAgICB2YXJpYW50OiB7XG4gICAgICAgIGRlZmF1bHQ6IFwiYmctcHJpbWFyeSB0ZXh0LXByaW1hcnktZm9yZWdyb3VuZCBbYV06aG92ZXI6YmctcHJpbWFyeS84MFwiLFxuICAgICAgICBvdXRsaW5lOlxuICAgICAgICAgIFwiYm9yZGVyLWJvcmRlciBiZy1iYWNrZ3JvdW5kIGhvdmVyOmJnLW11dGVkIGhvdmVyOnRleHQtZm9yZWdyb3VuZCBhcmlhLWV4cGFuZGVkOmJnLW11dGVkIGFyaWEtZXhwYW5kZWQ6dGV4dC1mb3JlZ3JvdW5kIGRhcms6Ym9yZGVyLWlucHV0IGRhcms6YmctaW5wdXQvMzAgZGFyazpob3ZlcjpiZy1pbnB1dC81MFwiLFxuICAgICAgICBzZWNvbmRhcnk6XG4gICAgICAgICAgXCJiZy1zZWNvbmRhcnkgdGV4dC1zZWNvbmRhcnktZm9yZWdyb3VuZCBob3ZlcjpiZy1zZWNvbmRhcnkvODAgYXJpYS1leHBhbmRlZDpiZy1zZWNvbmRhcnkgYXJpYS1leHBhbmRlZDp0ZXh0LXNlY29uZGFyeS1mb3JlZ3JvdW5kXCIsXG4gICAgICAgIGdob3N0OlxuICAgICAgICAgIFwiaG92ZXI6YmctbXV0ZWQgaG92ZXI6dGV4dC1mb3JlZ3JvdW5kIGFyaWEtZXhwYW5kZWQ6YmctbXV0ZWQgYXJpYS1leHBhbmRlZDp0ZXh0LWZvcmVncm91bmQgZGFyazpob3ZlcjpiZy1tdXRlZC81MFwiLFxuICAgICAgICBkZXN0cnVjdGl2ZTpcbiAgICAgICAgICBcImJnLWRlc3RydWN0aXZlLzEwIHRleHQtZGVzdHJ1Y3RpdmUgaG92ZXI6YmctZGVzdHJ1Y3RpdmUvMjAgZm9jdXMtdmlzaWJsZTpib3JkZXItZGVzdHJ1Y3RpdmUvNDAgZm9jdXMtdmlzaWJsZTpyaW5nLWRlc3RydWN0aXZlLzIwIGRhcms6YmctZGVzdHJ1Y3RpdmUvMjAgZGFyazpob3ZlcjpiZy1kZXN0cnVjdGl2ZS8zMCBkYXJrOmZvY3VzLXZpc2libGU6cmluZy1kZXN0cnVjdGl2ZS80MFwiLFxuICAgICAgICBsaW5rOiBcInRleHQtcHJpbWFyeSB1bmRlcmxpbmUtb2Zmc2V0LTQgaG92ZXI6dW5kZXJsaW5lXCIsXG4gICAgICB9LFxuICAgICAgc2l6ZToge1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIFwiaC04IGdhcC0xLjUgcHgtMi41IGhhcy1kYXRhLVtpY29uPWlubGluZS1lbmRdOnByLTIgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0yXCIsXG4gICAgICAgIHhzOiBcImgtNiBnYXAtMSByb3VuZGVkLVttaW4odmFyKC0tcmFkaXVzLW1kKSwxMHB4KV0gcHgtMiB0ZXh0LXhzIGluLWRhdGEtW3Nsb3Q9YnV0dG9uLWdyb3VwXTpyb3VuZGVkLWxnIGhhcy1kYXRhLVtpY29uPWlubGluZS1lbmRdOnByLTEuNSBoYXMtZGF0YS1baWNvbj1pbmxpbmUtc3RhcnRdOnBsLTEuNSBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTNcIixcbiAgICAgICAgc206IFwiaC03IGdhcC0xIHJvdW5kZWQtW21pbih2YXIoLS1yYWRpdXMtbWQpLDEycHgpXSBweC0yLjUgdGV4dC1bMC44cmVtXSBpbi1kYXRhLVtzbG90PWJ1dHRvbi1ncm91cF06cm91bmRlZC1sZyBoYXMtZGF0YS1baWNvbj1pbmxpbmUtZW5kXTpwci0xLjUgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0xLjUgWyZfc3ZnOm5vdChbY2xhc3MqPSdzaXplLSddKV06c2l6ZS0zLjVcIixcbiAgICAgICAgbGc6IFwiaC05IGdhcC0xLjUgcHgtMi41IGhhcy1kYXRhLVtpY29uPWlubGluZS1lbmRdOnByLTIgaGFzLWRhdGEtW2ljb249aW5saW5lLXN0YXJ0XTpwbC0yXCIsXG4gICAgICAgIGljb246IFwic2l6ZS04XCIsXG4gICAgICAgIFwiaWNvbi14c1wiOlxuICAgICAgICAgIFwic2l6ZS02IHJvdW5kZWQtW21pbih2YXIoLS1yYWRpdXMtbWQpLDEwcHgpXSBpbi1kYXRhLVtzbG90PWJ1dHRvbi1ncm91cF06cm91bmRlZC1sZyBbJl9zdmc6bm90KFtjbGFzcyo9J3NpemUtJ10pXTpzaXplLTNcIixcbiAgICAgICAgXCJpY29uLXNtXCI6XG4gICAgICAgICAgXCJzaXplLTcgcm91bmRlZC1bbWluKHZhcigtLXJhZGl1cy1tZCksMTJweCldIGluLWRhdGEtW3Nsb3Q9YnV0dG9uLWdyb3VwXTpyb3VuZGVkLWxnXCIsXG4gICAgICAgIFwiaWNvbi1sZ1wiOiBcInNpemUtOVwiLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRlZmF1bHRWYXJpYW50czoge1xuICAgICAgdmFyaWFudDogXCJkZWZhdWx0XCIsXG4gICAgICBzaXplOiBcImRlZmF1bHRcIixcbiAgICB9LFxuICB9XG4pXG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG4gIGNsYXNzTmFtZSxcbiAgdmFyaWFudCA9IFwiZGVmYXVsdFwiLFxuICBzaXplID0gXCJkZWZhdWx0XCIsXG4gIC4uLnByb3BzXG59OiBCdXR0b25QcmltaXRpdmUuUHJvcHMgJiBWYXJpYW50UHJvcHM8dHlwZW9mIGJ1dHRvblZhcmlhbnRzPikge1xuICByZXR1cm4gKFxuICAgIDxCdXR0b25QcmltaXRpdmVcbiAgICAgIGRhdGEtc2xvdD1cImJ1dHRvblwiXG4gICAgICBjbGFzc05hbWU9e2NuKGJ1dHRvblZhcmlhbnRzKHsgdmFyaWFudCwgc2l6ZSwgY2xhc3NOYW1lIH0pKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7IEJ1dHRvbiwgYnV0dG9uVmFyaWFudHMgfVxuIl0sIm5hbWVzIjpbIkJ1dHRvbiIsIkJ1dHRvblByaW1pdGl2ZSIsImN2YSIsImNuIiwiYnV0dG9uVmFyaWFudHMiLCJ2YXJpYW50cyIsInZhcmlhbnQiLCJkZWZhdWx0Iiwib3V0bGluZSIsInNlY29uZGFyeSIsImdob3N0IiwiZGVzdHJ1Y3RpdmUiLCJsaW5rIiwic2l6ZSIsInhzIiwic20iLCJsZyIsImljb24iLCJkZWZhdWx0VmFyaWFudHMiLCJjbGFzc05hbWUiLCJwcm9wcyIsImRhdGEtc2xvdCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/ui/button.tsx\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/components/ui/dialog.tsx":
|
||
/*!**************************************!*\
|
||
!*** ./src/components/ui/dialog.tsx ***!
|
||
\**************************************/
|
||
/***/ ((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 */ Dialog: () => (/* binding */ Dialog),\n/* harmony export */ DialogClose: () => (/* binding */ DialogClose),\n/* harmony export */ DialogContent: () => (/* binding */ DialogContent),\n/* harmony export */ DialogDescription: () => (/* binding */ DialogDescription),\n/* harmony export */ DialogFooter: () => (/* binding */ DialogFooter),\n/* harmony export */ DialogHeader: () => (/* binding */ DialogHeader),\n/* harmony export */ DialogOverlay: () => (/* binding */ DialogOverlay),\n/* harmony export */ DialogPortal: () => (/* binding */ DialogPortal),\n/* harmony export */ DialogTitle: () => (/* binding */ DialogTitle),\n/* harmony export */ DialogTrigger: () => (/* binding */ DialogTrigger)\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 _base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @base-ui/react/dialog */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/root/DialogRoot.js\");\n/* harmony import */ var _base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @base-ui/react/dialog */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/trigger/DialogTrigger.js\");\n/* harmony import */ var _base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @base-ui/react/dialog */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/portal/DialogPortal.js\");\n/* harmony import */ var _base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! @base-ui/react/dialog */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/close/DialogClose.js\");\n/* harmony import */ var _base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @base-ui/react/dialog */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/backdrop/DialogBackdrop.js\");\n/* harmony import */ var _base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @base-ui/react/dialog */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/popup/DialogPopup.js\");\n/* harmony import */ var _base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! @base-ui/react/dialog */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/title/DialogTitle.js\");\n/* harmony import */ var _base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! @base-ui/react/dialog */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/dialog/description/DialogDescription.js\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./src/lib/utils.ts\");\n/* harmony import */ var _components_ui_button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/ui/button */ \"(app-pages-browser)/./src/components/ui/button.tsx\");\n/* harmony import */ var _barrel_optimize_names_XIcon_lucide_react__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! __barrel_optimize__?names=XIcon!=!lucide-react */ \"(app-pages-browser)/./node_modules/lucide-react/dist/esm/icons/x.mjs\");\n/* __next_internal_client_entry_do_not_use__ Dialog,DialogClose,DialogContent,DialogDescription,DialogFooter,DialogHeader,DialogOverlay,DialogPortal,DialogTitle,DialogTrigger auto */ \n\n\n\n\n\nfunction Dialog(param) {\n let { ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_4__.DialogRoot, {\n \"data-slot\": \"dialog\",\n ...props\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 11,\n columnNumber: 10\n }, this);\n}\n_c = Dialog;\nfunction DialogTrigger(param) {\n let { ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_5__.DialogTrigger, {\n \"data-slot\": \"dialog-trigger\",\n ...props\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 15,\n columnNumber: 10\n }, this);\n}\n_c1 = DialogTrigger;\nfunction DialogPortal(param) {\n let { ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_6__.DialogPortal, {\n \"data-slot\": \"dialog-portal\",\n ...props\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 19,\n columnNumber: 10\n }, this);\n}\n_c2 = DialogPortal;\nfunction DialogClose(param) {\n let { ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_7__.DialogClose, {\n \"data-slot\": \"dialog-close\",\n ...props\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 23,\n columnNumber: 10\n }, this);\n}\n_c3 = DialogClose;\nfunction DialogOverlay(param) {\n let { className, ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_8__.DialogBackdrop, {\n \"data-slot\": \"dialog-overlay\",\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"fixed inset-0 isolate z-50 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs data-open:animate-in data-open:fade-in-0 data-closed:animate-out data-closed:fade-out-0\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 31,\n columnNumber: 5\n }, this);\n}\n_c4 = DialogOverlay;\nfunction DialogContent(param) {\n let { className, children, showCloseButton = true, ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(DialogPortal, {\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(DialogOverlay, {}, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 52,\n columnNumber: 7\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_9__.DialogPopup, {\n \"data-slot\": \"dialog-content\",\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"fixed top-1/2 left-1/2 z-50 grid w-full max-w-[calc(100%-2rem)] -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-sm text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95\", className),\n ...props,\n children: [\n children,\n showCloseButton && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_7__.DialogClose, {\n \"data-slot\": \"dialog-close\",\n render: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_3__.Button, {\n variant: \"ghost\",\n className: \"absolute top-2 right-2\",\n size: \"icon-sm\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 66,\n columnNumber: 15\n }, void 0),\n children: [\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_barrel_optimize_names_XIcon_lucide_react__WEBPACK_IMPORTED_MODULE_10__[\"default\"], {}, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 73,\n columnNumber: 13\n }, this),\n /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"span\", {\n className: \"sr-only\",\n children: \"Close\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 75,\n columnNumber: 13\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 63,\n columnNumber: 11\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 53,\n columnNumber: 7\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 51,\n columnNumber: 5\n }, this);\n}\n_c5 = DialogContent;\nfunction DialogHeader(param) {\n let { className, ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n \"data-slot\": \"dialog-header\",\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"flex flex-col gap-2\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 85,\n columnNumber: 5\n }, this);\n}\n_c6 = DialogHeader;\nfunction DialogFooter(param) {\n let { className, showCloseButton = false, children, ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"div\", {\n \"data-slot\": \"dialog-footer\",\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"-mx-4 -mb-4 flex flex-col-reverse gap-2 rounded-b-xl border-t bg-muted/50 p-4 sm:flex-row sm:justify-end\", className),\n ...props,\n children: [\n children,\n showCloseButton && /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_7__.DialogClose, {\n render: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_components_ui_button__WEBPACK_IMPORTED_MODULE_3__.Button, {\n variant: \"outline\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 112,\n columnNumber: 40\n }, void 0),\n children: \"Close\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 112,\n columnNumber: 9\n }, this)\n ]\n }, void 0, true, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 102,\n columnNumber: 5\n }, this);\n}\n_c7 = DialogFooter;\nfunction DialogTitle(param) {\n let { className, ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_11__.DialogTitle, {\n \"data-slot\": \"dialog-title\",\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"font-heading text-base leading-none font-medium\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 122,\n columnNumber: 5\n }, this);\n}\n_c8 = DialogTitle;\nfunction DialogDescription(param) {\n let { className, ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_base_ui_react_dialog__WEBPACK_IMPORTED_MODULE_12__.DialogDescription, {\n \"data-slot\": \"dialog-description\",\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/dialog.tsx\",\n lineNumber: 138,\n columnNumber: 5\n }, this);\n}\n_c9 = DialogDescription;\n\nvar _c, _c1, _c2, _c3, _c4, _c5, _c6, _c7, _c8, _c9;\n$RefreshReg$(_c, \"Dialog\");\n$RefreshReg$(_c1, \"DialogTrigger\");\n$RefreshReg$(_c2, \"DialogPortal\");\n$RefreshReg$(_c3, \"DialogClose\");\n$RefreshReg$(_c4, \"DialogOverlay\");\n$RefreshReg$(_c5, \"DialogContent\");\n$RefreshReg$(_c6, \"DialogHeader\");\n$RefreshReg$(_c7, \"DialogFooter\");\n$RefreshReg$(_c8, \"DialogTitle\");\n$RefreshReg$(_c9, \"DialogDescription\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL3VpL2RpYWxvZy50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU4QjtBQUNtQztBQUVqQztBQUNlO0FBQ1g7QUFFcEMsU0FBU0MsT0FBTyxLQUF3QztRQUF4QyxFQUFFLEdBQUdLLE9BQW1DLEdBQXhDO0lBQ2QscUJBQU8sOERBQUNKLDZEQUFvQjtRQUFDTSxhQUFVO1FBQVUsR0FBR0YsS0FBSzs7Ozs7O0FBQzNEO0tBRlNMO0FBSVQsU0FBU1EsY0FBYyxLQUEyQztRQUEzQyxFQUFFLEdBQUdILE9BQXNDLEdBQTNDO0lBQ3JCLHFCQUFPLDhEQUFDSixnRUFBdUI7UUFBQ00sYUFBVTtRQUFrQixHQUFHRixLQUFLOzs7Ozs7QUFDdEU7TUFGU0c7QUFJVCxTQUFTRSxhQUFhLEtBQTBDO1FBQTFDLEVBQUUsR0FBR0wsT0FBcUMsR0FBMUM7SUFDcEIscUJBQU8sOERBQUNKLCtEQUFzQjtRQUFDTSxhQUFVO1FBQWlCLEdBQUdGLEtBQUs7Ozs7OztBQUNwRTtNQUZTSztBQUlULFNBQVNFLFlBQVksS0FBeUM7UUFBekMsRUFBRSxHQUFHUCxPQUFvQyxHQUF6QztJQUNuQixxQkFBTyw4REFBQ0osOERBQXFCO1FBQUNNLGFBQVU7UUFBZ0IsR0FBR0YsS0FBSzs7Ozs7O0FBQ2xFO01BRlNPO0FBSVQsU0FBU0UsY0FBYyxLQUdVO1FBSFYsRUFDckJDLFNBQVMsRUFDVCxHQUFHVixPQUM0QixHQUhWO0lBSXJCLHFCQUNFLDhEQUFDSixpRUFBd0I7UUFDdkJNLGFBQVU7UUFDVlEsV0FBV2IsOENBQUVBLENBQ1gseUxBQ0FhO1FBRUQsR0FBR1YsS0FBSzs7Ozs7O0FBR2Y7TUFkU1M7QUFnQlQsU0FBU0csY0FBYyxLQU90QjtRQVBzQixFQUNyQkYsU0FBUyxFQUNURyxRQUFRLEVBQ1JDLGtCQUFrQixJQUFJLEVBQ3RCLEdBQUdkLE9BR0osR0FQc0I7SUFRckIscUJBQ0UsOERBQUNLOzswQkFDQyw4REFBQ0k7Ozs7OzBCQUNELDhEQUFDYiw4REFBcUI7Z0JBQ3BCTSxhQUFVO2dCQUNWUSxXQUFXYiw4Q0FBRUEsQ0FDWCwwV0FDQWE7Z0JBRUQsR0FBR1YsS0FBSzs7b0JBRVJhO29CQUNBQyxpQ0FDQyw4REFBQ2xCLDhEQUFxQjt3QkFDcEJNLGFBQVU7d0JBQ1ZjLHNCQUNFLDhEQUFDbEIseURBQU1BOzRCQUNMbUIsU0FBUTs0QkFDUlAsV0FBVTs0QkFDVlEsTUFBSzs7Ozs7OzswQ0FJVCw4REFBQ25CLGtGQUFLQTs7Ozs7MENBRU4sOERBQUNvQjtnQ0FBS1QsV0FBVTswQ0FBVTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBTXRDO01BdkNTRTtBQXlDVCxTQUFTUSxhQUFhLEtBQW9EO1FBQXBELEVBQUVWLFNBQVMsRUFBRSxHQUFHVixPQUFvQyxHQUFwRDtJQUNwQixxQkFDRSw4REFBQ3FCO1FBQ0NuQixhQUFVO1FBQ1ZRLFdBQVdiLDhDQUFFQSxDQUFDLHVCQUF1QmE7UUFDcEMsR0FBR1YsS0FBSzs7Ozs7O0FBR2Y7TUFSU29CO0FBVVQsU0FBU0UsYUFBYSxLQU9yQjtRQVBxQixFQUNwQlosU0FBUyxFQUNUSSxrQkFBa0IsS0FBSyxFQUN2QkQsUUFBUSxFQUNSLEdBQUdiLE9BR0osR0FQcUI7SUFRcEIscUJBQ0UsOERBQUNxQjtRQUNDbkIsYUFBVTtRQUNWUSxXQUFXYiw4Q0FBRUEsQ0FDWCw0R0FDQWE7UUFFRCxHQUFHVixLQUFLOztZQUVSYTtZQUNBQyxpQ0FDQyw4REFBQ2xCLDhEQUFxQjtnQkFBQ29CLHNCQUFRLDhEQUFDbEIseURBQU1BO29CQUFDbUIsU0FBUTs7Ozs7OzBCQUFjOzs7Ozs7Ozs7Ozs7QUFNckU7TUF6QlNLO0FBMkJULFNBQVNDLFlBQVksS0FBb0Q7UUFBcEQsRUFBRWIsU0FBUyxFQUFFLEdBQUdWLE9BQW9DLEdBQXBEO0lBQ25CLHFCQUNFLDhEQUFDSiwrREFBcUI7UUFDcEJNLGFBQVU7UUFDVlEsV0FBV2IsOENBQUVBLENBQ1gsbURBQ0FhO1FBRUQsR0FBR1YsS0FBSzs7Ozs7O0FBR2Y7TUFYU3VCO0FBYVQsU0FBU0Usa0JBQWtCLEtBR1M7UUFIVCxFQUN6QmYsU0FBUyxFQUNULEdBQUdWLE9BQytCLEdBSFQ7SUFJekIscUJBQ0UsOERBQUNKLHFFQUEyQjtRQUMxQk0sYUFBVTtRQUNWUSxXQUFXYiw4Q0FBRUEsQ0FDWCxzR0FDQWE7UUFFRCxHQUFHVixLQUFLOzs7Ozs7QUFHZjtNQWRTeUI7QUEyQlIiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9zcmMvY29tcG9uZW50cy91aS9kaWFsb2cudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiXG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgeyBEaWFsb2cgYXMgRGlhbG9nUHJpbWl0aXZlIH0gZnJvbSBcIkBiYXNlLXVpL3JlYWN0L2RpYWxvZ1wiXG5cbmltcG9ydCB7IGNuIH0gZnJvbSBcIkAvbGliL3V0aWxzXCJcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCJAL2NvbXBvbmVudHMvdWkvYnV0dG9uXCJcbmltcG9ydCB7IFhJY29uIH0gZnJvbSBcImx1Y2lkZS1yZWFjdFwiXG5cbmZ1bmN0aW9uIERpYWxvZyh7IC4uLnByb3BzIH06IERpYWxvZ1ByaW1pdGl2ZS5Sb290LlByb3BzKSB7XG4gIHJldHVybiA8RGlhbG9nUHJpbWl0aXZlLlJvb3QgZGF0YS1zbG90PVwiZGlhbG9nXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dUcmlnZ2VyKHsgLi4ucHJvcHMgfTogRGlhbG9nUHJpbWl0aXZlLlRyaWdnZXIuUHJvcHMpIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuVHJpZ2dlciBkYXRhLXNsb3Q9XCJkaWFsb2ctdHJpZ2dlclwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nUG9ydGFsKHsgLi4ucHJvcHMgfTogRGlhbG9nUHJpbWl0aXZlLlBvcnRhbC5Qcm9wcykge1xuICByZXR1cm4gPERpYWxvZ1ByaW1pdGl2ZS5Qb3J0YWwgZGF0YS1zbG90PVwiZGlhbG9nLXBvcnRhbFwiIHsuLi5wcm9wc30gLz5cbn1cblxuZnVuY3Rpb24gRGlhbG9nQ2xvc2UoeyAuLi5wcm9wcyB9OiBEaWFsb2dQcmltaXRpdmUuQ2xvc2UuUHJvcHMpIHtcbiAgcmV0dXJuIDxEaWFsb2dQcmltaXRpdmUuQ2xvc2UgZGF0YS1zbG90PVwiZGlhbG9nLWNsb3NlXCIgey4uLnByb3BzfSAvPlxufVxuXG5mdW5jdGlvbiBEaWFsb2dPdmVybGF5KHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogRGlhbG9nUHJpbWl0aXZlLkJhY2tkcm9wLlByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPERpYWxvZ1ByaW1pdGl2ZS5CYWNrZHJvcFxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLW92ZXJsYXlcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgXCJmaXhlZCBpbnNldC0wIGlzb2xhdGUgei01MCBiZy1ibGFjay8xMCBkdXJhdGlvbi0xMDAgc3VwcG9ydHMtYmFja2Ryb3AtZmlsdGVyOmJhY2tkcm9wLWJsdXIteHMgZGF0YS1vcGVuOmFuaW1hdGUtaW4gZGF0YS1vcGVuOmZhZGUtaW4tMCBkYXRhLWNsb3NlZDphbmltYXRlLW91dCBkYXRhLWNsb3NlZDpmYWRlLW91dC0wXCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0NvbnRlbnQoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICBzaG93Q2xvc2VCdXR0b24gPSB0cnVlLFxuICAuLi5wcm9wc1xufTogRGlhbG9nUHJpbWl0aXZlLlBvcHVwLlByb3BzICYge1xuICBzaG93Q2xvc2VCdXR0b24/OiBib29sZWFuXG59KSB7XG4gIHJldHVybiAoXG4gICAgPERpYWxvZ1BvcnRhbD5cbiAgICAgIDxEaWFsb2dPdmVybGF5IC8+XG4gICAgICA8RGlhbG9nUHJpbWl0aXZlLlBvcHVwXG4gICAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy1jb250ZW50XCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgICBcImZpeGVkIHRvcC0xLzIgbGVmdC0xLzIgei01MCBncmlkIHctZnVsbCBtYXgtdy1bY2FsYygxMDAlLTJyZW0pXSAtdHJhbnNsYXRlLXgtMS8yIC10cmFuc2xhdGUteS0xLzIgZ2FwLTQgcm91bmRlZC14bCBiZy1wb3BvdmVyIHAtNCB0ZXh0LXNtIHRleHQtcG9wb3Zlci1mb3JlZ3JvdW5kIHJpbmctMSByaW5nLWZvcmVncm91bmQvMTAgZHVyYXRpb24tMTAwIG91dGxpbmUtbm9uZSBzbTptYXgtdy1zbSBkYXRhLW9wZW46YW5pbWF0ZS1pbiBkYXRhLW9wZW46ZmFkZS1pbi0wIGRhdGEtb3Blbjp6b29tLWluLTk1IGRhdGEtY2xvc2VkOmFuaW1hdGUtb3V0IGRhdGEtY2xvc2VkOmZhZGUtb3V0LTAgZGF0YS1jbG9zZWQ6em9vbS1vdXQtOTVcIixcbiAgICAgICAgICBjbGFzc05hbWVcbiAgICAgICAgKX1cbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIHtzaG93Q2xvc2VCdXR0b24gJiYgKFxuICAgICAgICAgIDxEaWFsb2dQcmltaXRpdmUuQ2xvc2VcbiAgICAgICAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy1jbG9zZVwiXG4gICAgICAgICAgICByZW5kZXI9e1xuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cImdob3N0XCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSB0b3AtMiByaWdodC0yXCJcbiAgICAgICAgICAgICAgICBzaXplPVwiaWNvbi1zbVwiXG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFhJY29uXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwic3Itb25seVwiPkNsb3NlPC9zcGFuPlxuICAgICAgICAgIDwvRGlhbG9nUHJpbWl0aXZlLkNsb3NlPlxuICAgICAgICApfVxuICAgICAgPC9EaWFsb2dQcmltaXRpdmUuUG9wdXA+XG4gICAgPC9EaWFsb2dQb3J0YWw+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nSGVhZGVyKHsgY2xhc3NOYW1lLCAuLi5wcm9wcyB9OiBSZWFjdC5Db21wb25lbnRQcm9wczxcImRpdlwiPikge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy1oZWFkZXJcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcImZsZXggZmxleC1jb2wgZ2FwLTJcIiwgY2xhc3NOYW1lKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Zvb3Rlcih7XG4gIGNsYXNzTmFtZSxcbiAgc2hvd0Nsb3NlQnV0dG9uID0gZmFsc2UsXG4gIGNoaWxkcmVuLFxuICAuLi5wcm9wc1xufTogUmVhY3QuQ29tcG9uZW50UHJvcHM8XCJkaXZcIj4gJiB7XG4gIHNob3dDbG9zZUJ1dHRvbj86IGJvb2xlYW5cbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBkYXRhLXNsb3Q9XCJkaWFsb2ctZm9vdGVyXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIFwiLW14LTQgLW1iLTQgZmxleCBmbGV4LWNvbC1yZXZlcnNlIGdhcC0yIHJvdW5kZWQtYi14bCBib3JkZXItdCBiZy1tdXRlZC81MCBwLTQgc206ZmxleC1yb3cgc206anVzdGlmeS1lbmRcIixcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICAgIHtzaG93Q2xvc2VCdXR0b24gJiYgKFxuICAgICAgICA8RGlhbG9nUHJpbWl0aXZlLkNsb3NlIHJlbmRlcj17PEJ1dHRvbiB2YXJpYW50PVwib3V0bGluZVwiIC8+fT5cbiAgICAgICAgICBDbG9zZVxuICAgICAgICA8L0RpYWxvZ1ByaW1pdGl2ZS5DbG9zZT5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZnVuY3Rpb24gRGlhbG9nVGl0bGUoeyBjbGFzc05hbWUsIC4uLnByb3BzIH06IERpYWxvZ1ByaW1pdGl2ZS5UaXRsZS5Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxEaWFsb2dQcmltaXRpdmUuVGl0bGVcbiAgICAgIGRhdGEtc2xvdD1cImRpYWxvZy10aXRsZVwiXG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcImZvbnQtaGVhZGluZyB0ZXh0LWJhc2UgbGVhZGluZy1ub25lIGZvbnQtbWVkaXVtXCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmZ1bmN0aW9uIERpYWxvZ0Rlc2NyaXB0aW9uKHtcbiAgY2xhc3NOYW1lLFxuICAuLi5wcm9wc1xufTogRGlhbG9nUHJpbWl0aXZlLkRlc2NyaXB0aW9uLlByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPERpYWxvZ1ByaW1pdGl2ZS5EZXNjcmlwdGlvblxuICAgICAgZGF0YS1zbG90PVwiZGlhbG9nLWRlc2NyaXB0aW9uXCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIFwidGV4dC1zbSB0ZXh0LW11dGVkLWZvcmVncm91bmQgKjpbYV06dW5kZXJsaW5lICo6W2FdOnVuZGVybGluZS1vZmZzZXQtMyAqOlthXTpob3Zlcjp0ZXh0LWZvcmVncm91bmRcIixcbiAgICAgICAgY2xhc3NOYW1lXG4gICAgICApfVxuICAgICAgey4uLnByb3BzfVxuICAgIC8+XG4gIClcbn1cblxuZXhwb3J0IHtcbiAgRGlhbG9nLFxuICBEaWFsb2dDbG9zZSxcbiAgRGlhbG9nQ29udGVudCxcbiAgRGlhbG9nRGVzY3JpcHRpb24sXG4gIERpYWxvZ0Zvb3RlcixcbiAgRGlhbG9nSGVhZGVyLFxuICBEaWFsb2dPdmVybGF5LFxuICBEaWFsb2dQb3J0YWwsXG4gIERpYWxvZ1RpdGxlLFxuICBEaWFsb2dUcmlnZ2VyLFxufVxuIl0sIm5hbWVzIjpbIlJlYWN0IiwiRGlhbG9nIiwiRGlhbG9nUHJpbWl0aXZlIiwiY24iLCJCdXR0b24iLCJYSWNvbiIsInByb3BzIiwiUm9vdCIsImRhdGEtc2xvdCIsIkRpYWxvZ1RyaWdnZXIiLCJUcmlnZ2VyIiwiRGlhbG9nUG9ydGFsIiwiUG9ydGFsIiwiRGlhbG9nQ2xvc2UiLCJDbG9zZSIsIkRpYWxvZ092ZXJsYXkiLCJjbGFzc05hbWUiLCJCYWNrZHJvcCIsIkRpYWxvZ0NvbnRlbnQiLCJjaGlsZHJlbiIsInNob3dDbG9zZUJ1dHRvbiIsIlBvcHVwIiwicmVuZGVyIiwidmFyaWFudCIsInNpemUiLCJzcGFuIiwiRGlhbG9nSGVhZGVyIiwiZGl2IiwiRGlhbG9nRm9vdGVyIiwiRGlhbG9nVGl0bGUiLCJUaXRsZSIsIkRpYWxvZ0Rlc2NyaXB0aW9uIiwiRGVzY3JpcHRpb24iXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/ui/dialog.tsx\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/components/ui/input.tsx":
|
||
/*!*************************************!*\
|
||
!*** ./src/components/ui/input.tsx ***!
|
||
\*************************************/
|
||
/***/ ((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: () => (/* 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 _base_ui_react_input__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @base-ui/react/input */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/input/Input.js\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./src/lib/utils.ts\");\n\n\n\n\nfunction Input(param) {\n let { className, type, ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_base_ui_react_input__WEBPACK_IMPORTED_MODULE_3__.Input, {\n type: type,\n \"data-slot\": \"input\",\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"h-8 w-full min-w-0 rounded-lg border border-input bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:pointer-events-none disabled:cursor-not-allowed disabled:bg-input/50 disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:disabled:bg-input/80 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/input.tsx\",\n lineNumber: 8,\n columnNumber: 5\n }, this);\n}\n_c = Input;\n\nvar _c;\n$RefreshReg$(_c, \"Input\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL3VpL2lucHV0LnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQThCO0FBQ2dDO0FBRTlCO0FBRWhDLFNBQVNDLE1BQU0sS0FBNEQ7UUFBNUQsRUFBRUcsU0FBUyxFQUFFQyxJQUFJLEVBQUUsR0FBR0MsT0FBc0MsR0FBNUQ7SUFDYixxQkFDRSw4REFBQ0osdURBQWNBO1FBQ2JHLE1BQU1BO1FBQ05FLGFBQVU7UUFDVkgsV0FBV0QsOENBQUVBLENBQ1gsK29CQUNBQztRQUVELEdBQUdFLEtBQUs7Ozs7OztBQUdmO0tBWlNMO0FBY08iLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9zcmMvY29tcG9uZW50cy91aS9pbnB1dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7IElucHV0IGFzIElucHV0UHJpbWl0aXZlIH0gZnJvbSBcIkBiYXNlLXVpL3JlYWN0L2lucHV0XCJcblxuaW1wb3J0IHsgY24gfSBmcm9tIFwiQC9saWIvdXRpbHNcIlxuXG5mdW5jdGlvbiBJbnB1dCh7IGNsYXNzTmFtZSwgdHlwZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8XCJpbnB1dFwiPikge1xuICByZXR1cm4gKFxuICAgIDxJbnB1dFByaW1pdGl2ZVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIGRhdGEtc2xvdD1cImlucHV0XCJcbiAgICAgIGNsYXNzTmFtZT17Y24oXG4gICAgICAgIFwiaC04IHctZnVsbCBtaW4tdy0wIHJvdW5kZWQtbGcgYm9yZGVyIGJvcmRlci1pbnB1dCBiZy10cmFuc3BhcmVudCBweC0yLjUgcHktMSB0ZXh0LWJhc2UgdHJhbnNpdGlvbi1jb2xvcnMgb3V0bGluZS1ub25lIGZpbGU6aW5saW5lLWZsZXggZmlsZTpoLTYgZmlsZTpib3JkZXItMCBmaWxlOmJnLXRyYW5zcGFyZW50IGZpbGU6dGV4dC1zbSBmaWxlOmZvbnQtbWVkaXVtIGZpbGU6dGV4dC1mb3JlZ3JvdW5kIHBsYWNlaG9sZGVyOnRleHQtbXV0ZWQtZm9yZWdyb3VuZCBmb2N1cy12aXNpYmxlOmJvcmRlci1yaW5nIGZvY3VzLXZpc2libGU6cmluZy0zIGZvY3VzLXZpc2libGU6cmluZy1yaW5nLzUwIGRpc2FibGVkOnBvaW50ZXItZXZlbnRzLW5vbmUgZGlzYWJsZWQ6Y3Vyc29yLW5vdC1hbGxvd2VkIGRpc2FibGVkOmJnLWlucHV0LzUwIGRpc2FibGVkOm9wYWNpdHktNTAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBhcmlhLWludmFsaWQ6cmluZy0zIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIG1kOnRleHQtc20gZGFyazpiZy1pbnB1dC8zMCBkYXJrOmRpc2FibGVkOmJnLWlucHV0LzgwIGRhcms6YXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZS81MCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwXCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7IElucHV0IH1cbiJdLCJuYW1lcyI6WyJSZWFjdCIsIklucHV0IiwiSW5wdXRQcmltaXRpdmUiLCJjbiIsImNsYXNzTmFtZSIsInR5cGUiLCJwcm9wcyIsImRhdGEtc2xvdCJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/ui/input.tsx\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/components/ui/label.tsx":
|
||
/*!*************************************!*\
|
||
!*** ./src/components/ui/label.tsx ***!
|
||
\*************************************/
|
||
/***/ ((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: () => (/* 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 _lib_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./src/lib/utils.ts\");\n\n\n\nfunction Label(param) {\n let { className, ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(\"label\", {\n \"data-slot\": \"label\",\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_2__.cn)(\"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\", className),\n ...props\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/label.tsx\",\n lineNumber: 7,\n columnNumber: 5\n }, this);\n}\n_c = Label;\n\nvar _c;\n$RefreshReg$(_c, \"Label\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL3VpL2xhYmVsLnRzeCIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBOEI7QUFFRTtBQUVoQyxTQUFTRSxNQUFNLEtBQXNEO1FBQXRELEVBQUVDLFNBQVMsRUFBRSxHQUFHQyxPQUFzQyxHQUF0RDtJQUNiLHFCQUNFLDhEQUFDQztRQUNDQyxhQUFVO1FBQ1ZILFdBQVdGLDhDQUFFQSxDQUNYLHVOQUNBRTtRQUVELEdBQUdDLEtBQUs7Ozs7OztBQUdmO0tBWFNGO0FBYU8iLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9zcmMvY29tcG9uZW50cy91aS9sYWJlbC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCJcblxuaW1wb3J0IHsgY24gfSBmcm9tIFwiQC9saWIvdXRpbHNcIlxuXG5mdW5jdGlvbiBMYWJlbCh7IGNsYXNzTmFtZSwgLi4ucHJvcHMgfTogUmVhY3QuQ29tcG9uZW50UHJvcHM8XCJsYWJlbFwiPikge1xuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgZGF0YS1zbG90PVwibGFiZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbihcbiAgICAgICAgXCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiB0ZXh0LXNtIGxlYWRpbmctbm9uZSBmb250LW1lZGl1bSBzZWxlY3Qtbm9uZSBncm91cC1kYXRhLVtkaXNhYmxlZD10cnVlXTpwb2ludGVyLWV2ZW50cy1ub25lIGdyb3VwLWRhdGEtW2Rpc2FibGVkPXRydWVdOm9wYWNpdHktNTAgcGVlci1kaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgcGVlci1kaXNhYmxlZDpvcGFjaXR5LTUwXCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICAvPlxuICApXG59XG5cbmV4cG9ydCB7IExhYmVsIH1cbiJdLCJuYW1lcyI6WyJSZWFjdCIsImNuIiwiTGFiZWwiLCJjbGFzc05hbWUiLCJwcm9wcyIsImxhYmVsIiwiZGF0YS1zbG90Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/ui/label.tsx\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/components/ui/switch.tsx":
|
||
/*!**************************************!*\
|
||
!*** ./src/components/ui/switch.tsx ***!
|
||
\**************************************/
|
||
/***/ ((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 */ Switch: () => (/* binding */ Switch)\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 _base_ui_react_switch__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @base-ui/react/switch */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/root/SwitchRoot.js\");\n/* harmony import */ var _base_ui_react_switch__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @base-ui/react/switch */ \"(app-pages-browser)/./node_modules/@base-ui/react/esm/switch/thumb/SwitchThumb.js\");\n/* harmony import */ var _lib_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/lib/utils */ \"(app-pages-browser)/./src/lib/utils.ts\");\n/* __next_internal_client_entry_do_not_use__ Switch auto */ \n\n\nfunction Switch(param) {\n let { className, size = \"default\", ...props } = param;\n return /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_base_ui_react_switch__WEBPACK_IMPORTED_MODULE_2__.SwitchRoot, {\n \"data-slot\": \"switch\",\n \"data-size\": size,\n className: (0,_lib_utils__WEBPACK_IMPORTED_MODULE_1__.cn)(\"peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50\", className),\n ...props,\n children: /*#__PURE__*/ (0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_0__.jsxDEV)(_base_ui_react_switch__WEBPACK_IMPORTED_MODULE_3__.SwitchThumb, {\n \"data-slot\": \"switch-thumb\",\n className: \"pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground\"\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/switch.tsx\",\n lineNumber: 24,\n columnNumber: 7\n }, this)\n }, void 0, false, {\n fileName: \"/home/silvio/Develop/CIRUX-APP/src/components/ui/switch.tsx\",\n lineNumber: 15,\n columnNumber: 5\n }, this);\n}\n_c = Switch;\n\nvar _c;\n$RefreshReg$(_c, \"Switch\");\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9jb21wb25lbnRzL3VpL3N3aXRjaC50c3giLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBRWlFO0FBRWpDO0FBRWhDLFNBQVNBLE9BQU8sS0FNZjtRQU5lLEVBQ2RHLFNBQVMsRUFDVEMsT0FBTyxTQUFTLEVBQ2hCLEdBQUdDLE9BR0osR0FOZTtJQU9kLHFCQUNFLDhEQUFDSiw2REFBb0I7UUFDbkJNLGFBQVU7UUFDVkMsYUFBV0o7UUFDWEQsV0FBV0QsOENBQUVBLENBQ1gsdXBCQUNBQztRQUVELEdBQUdFLEtBQUs7a0JBRVQsNEVBQUNKLDhEQUFxQjtZQUNwQk0sYUFBVTtZQUNWSixXQUFVOzs7Ozs7Ozs7OztBQUlsQjtLQXZCU0g7QUF5QlEiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9zcmMvY29tcG9uZW50cy91aS9zd2l0Y2gudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIGNsaWVudFwiXG5cbmltcG9ydCB7IFN3aXRjaCBhcyBTd2l0Y2hQcmltaXRpdmUgfSBmcm9tIFwiQGJhc2UtdWkvcmVhY3Qvc3dpdGNoXCJcblxuaW1wb3J0IHsgY24gfSBmcm9tIFwiQC9saWIvdXRpbHNcIlxuXG5mdW5jdGlvbiBTd2l0Y2goe1xuICBjbGFzc05hbWUsXG4gIHNpemUgPSBcImRlZmF1bHRcIixcbiAgLi4ucHJvcHNcbn06IFN3aXRjaFByaW1pdGl2ZS5Sb290LlByb3BzICYge1xuICBzaXplPzogXCJzbVwiIHwgXCJkZWZhdWx0XCJcbn0pIHtcbiAgcmV0dXJuIChcbiAgICA8U3dpdGNoUHJpbWl0aXZlLlJvb3RcbiAgICAgIGRhdGEtc2xvdD1cInN3aXRjaFwiXG4gICAgICBkYXRhLXNpemU9e3NpemV9XG4gICAgICBjbGFzc05hbWU9e2NuKFxuICAgICAgICBcInBlZXIgZ3JvdXAvc3dpdGNoIHJlbGF0aXZlIGlubGluZS1mbGV4IHNocmluay0wIGl0ZW1zLWNlbnRlciByb3VuZGVkLWZ1bGwgYm9yZGVyIGJvcmRlci10cmFuc3BhcmVudCB0cmFuc2l0aW9uLWFsbCBvdXRsaW5lLW5vbmUgYWZ0ZXI6YWJzb2x1dGUgYWZ0ZXI6LWluc2V0LXgtMyBhZnRlcjotaW5zZXQteS0yIGZvY3VzLXZpc2libGU6Ym9yZGVyLXJpbmcgZm9jdXMtdmlzaWJsZTpyaW5nLTMgZm9jdXMtdmlzaWJsZTpyaW5nLXJpbmcvNTAgYXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZSBhcmlhLWludmFsaWQ6cmluZy0zIGFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzIwIGRhdGEtW3NpemU9ZGVmYXVsdF06aC1bMTguNHB4XSBkYXRhLVtzaXplPWRlZmF1bHRdOnctWzMycHhdIGRhdGEtW3NpemU9c21dOmgtWzE0cHhdIGRhdGEtW3NpemU9c21dOnctWzI0cHhdIGRhcms6YXJpYS1pbnZhbGlkOmJvcmRlci1kZXN0cnVjdGl2ZS81MCBkYXJrOmFyaWEtaW52YWxpZDpyaW5nLWRlc3RydWN0aXZlLzQwIGRhdGEtY2hlY2tlZDpiZy1wcmltYXJ5IGRhdGEtdW5jaGVja2VkOmJnLWlucHV0IGRhcms6ZGF0YS11bmNoZWNrZWQ6YmctaW5wdXQvODAgZGF0YS1kaXNhYmxlZDpjdXJzb3Itbm90LWFsbG93ZWQgZGF0YS1kaXNhYmxlZDpvcGFjaXR5LTUwXCIsXG4gICAgICAgIGNsYXNzTmFtZVxuICAgICAgKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICA8U3dpdGNoUHJpbWl0aXZlLlRodW1iXG4gICAgICAgIGRhdGEtc2xvdD1cInN3aXRjaC10aHVtYlwiXG4gICAgICAgIGNsYXNzTmFtZT1cInBvaW50ZXItZXZlbnRzLW5vbmUgYmxvY2sgcm91bmRlZC1mdWxsIGJnLWJhY2tncm91bmQgcmluZy0wIHRyYW5zaXRpb24tdHJhbnNmb3JtIGdyb3VwLWRhdGEtW3NpemU9ZGVmYXVsdF0vc3dpdGNoOnNpemUtNCBncm91cC1kYXRhLVtzaXplPXNtXS9zd2l0Y2g6c2l6ZS0zIGdyb3VwLWRhdGEtW3NpemU9ZGVmYXVsdF0vc3dpdGNoOmRhdGEtY2hlY2tlZDp0cmFuc2xhdGUteC1bY2FsYygxMDAlLTJweCldIGdyb3VwLWRhdGEtW3NpemU9c21dL3N3aXRjaDpkYXRhLWNoZWNrZWQ6dHJhbnNsYXRlLXgtW2NhbGMoMTAwJS0ycHgpXSBkYXJrOmRhdGEtY2hlY2tlZDpiZy1wcmltYXJ5LWZvcmVncm91bmQgZ3JvdXAtZGF0YS1bc2l6ZT1kZWZhdWx0XS9zd2l0Y2g6ZGF0YS11bmNoZWNrZWQ6dHJhbnNsYXRlLXgtMCBncm91cC1kYXRhLVtzaXplPXNtXS9zd2l0Y2g6ZGF0YS11bmNoZWNrZWQ6dHJhbnNsYXRlLXgtMCBkYXJrOmRhdGEtdW5jaGVja2VkOmJnLWZvcmVncm91bmRcIlxuICAgICAgLz5cbiAgICA8L1N3aXRjaFByaW1pdGl2ZS5Sb290PlxuICApXG59XG5cbmV4cG9ydCB7IFN3aXRjaCB9XG4iXSwibmFtZXMiOlsiU3dpdGNoIiwiU3dpdGNoUHJpbWl0aXZlIiwiY24iLCJjbGFzc05hbWUiLCJzaXplIiwicHJvcHMiLCJSb290IiwiZGF0YS1zbG90IiwiZGF0YS1zaXplIiwiVGh1bWIiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/components/ui/switch.tsx\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/lib/stores/authStore.ts":
|
||
/*!*************************************!*\
|
||
!*** ./src/lib/stores/authStore.ts ***!
|
||
\*************************************/
|
||
/***/ ((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 */ useAuthStore: () => (/* binding */ useAuthStore)\n/* harmony export */ });\n/* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zustand */ \"(app-pages-browser)/./node_modules/zustand/esm/react.mjs\");\n/* harmony import */ var zustand_middleware__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zustand/middleware */ \"(app-pages-browser)/./node_modules/zustand/esm/middleware.mjs\");\n\n\n/**\n * Store de autenticación. Sincroniza sesión de Supabase y rol del usuario.\n * El rol se extrae de `app_metadata.role` en el JWT.\n */ const useAuthStore = (0,zustand__WEBPACK_IMPORTED_MODULE_0__.create)()((0,zustand_middleware__WEBPACK_IMPORTED_MODULE_1__.devtools)((set)=>({\n session: null,\n user: null,\n role: null,\n isLoading: true,\n setSession: (session)=>set({\n session\n }, false, \"auth/setSession\"),\n setUser: (user)=>{\n var _user_app_metadata;\n var _user_app_metadata_role;\n const role = (_user_app_metadata_role = user === null || user === void 0 ? void 0 : (_user_app_metadata = user.app_metadata) === null || _user_app_metadata === void 0 ? void 0 : _user_app_metadata.role) !== null && _user_app_metadata_role !== void 0 ? _user_app_metadata_role : null;\n set({\n user,\n role\n }, false, \"auth/setUser\");\n },\n setRole: (role)=>set({\n role\n }, false, \"auth/setRole\"),\n setLoading: (isLoading)=>set({\n isLoading\n }, false, \"auth/setLoading\"),\n reset: ()=>set({\n session: null,\n user: null,\n role: null,\n isLoading: false\n }, false, \"auth/reset\")\n }), {\n name: \"AuthStore\",\n enabled: \"development\" === \"development\"\n}));\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9saWIvc3RvcmVzL2F1dGhTdG9yZS50cyIsIm1hcHBpbmdzIjoiOzs7Ozs7QUFBaUM7QUFDYTtBQWdCOUM7OztDQUdDLEdBQ00sTUFBTUUsZUFBZUYsK0NBQU1BLEdBQ2hDQyw0REFBUUEsQ0FDTixDQUFDRSxNQUFTO1FBQ1JDLFNBQVM7UUFDVEMsTUFBTTtRQUNOQyxNQUFNO1FBQ05DLFdBQVc7UUFFWEMsWUFBWSxDQUFDSixVQUNYRCxJQUFJO2dCQUFFQztZQUFRLEdBQUcsT0FBTztRQUUxQkssU0FBUyxDQUFDSjtnQkFFTEE7Z0JBQUFBO1lBREgsTUFBTUMsT0FDSixDQUFDRCwwQkFBQUEsaUJBQUFBLDRCQUFBQSxxQkFBQUEsS0FBTUssWUFBWSxjQUFsQkwseUNBQUFBLG1CQUFvQkMsSUFBSSxjQUF4QkQscUNBQUFBLDBCQUFzRDtZQUN6REYsSUFBSTtnQkFBRUU7Z0JBQU1DO1lBQUssR0FBRyxPQUFPO1FBQzdCO1FBRUFLLFNBQVMsQ0FBQ0wsT0FDUkgsSUFBSTtnQkFBRUc7WUFBSyxHQUFHLE9BQU87UUFFdkJNLFlBQVksQ0FBQ0wsWUFDWEosSUFBSTtnQkFBRUk7WUFBVSxHQUFHLE9BQU87UUFFNUJNLE9BQU8sSUFDTFYsSUFDRTtnQkFBRUMsU0FBUztnQkFBTUMsTUFBTTtnQkFBTUMsTUFBTTtnQkFBTUMsV0FBVztZQUFNLEdBQzFELE9BQ0E7SUFFTixJQUNBO0lBQUVPLE1BQU07SUFBYUMsU0FBU0Msa0JBQXlCO0FBQWMsSUFFdkUiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9zcmMvbGliL3N0b3Jlcy9hdXRoU3RvcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlIH0gZnJvbSBcInp1c3RhbmRcIjtcbmltcG9ydCB7IGRldnRvb2xzIH0gZnJvbSBcInp1c3RhbmQvbWlkZGxld2FyZVwiO1xuaW1wb3J0IHR5cGUgeyBTZXNzaW9uLCBVc2VyIH0gZnJvbSBcIkBzdXBhYmFzZS9zdXBhYmFzZS1qc1wiO1xuaW1wb3J0IHR5cGUgeyBTdGFmZlJvbGUgfSBmcm9tIFwiQC9saWIvdHlwZXNcIjtcblxuaW50ZXJmYWNlIEF1dGhTdGF0ZSB7XG4gIHNlc3Npb246IFNlc3Npb24gfCBudWxsO1xuICB1c2VyOiBVc2VyIHwgbnVsbDtcbiAgcm9sZTogU3RhZmZSb2xlIHwgbnVsbDtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBzZXRTZXNzaW9uOiAoc2Vzc2lvbjogU2Vzc2lvbiB8IG51bGwpID0+IHZvaWQ7XG4gIHNldFVzZXI6ICh1c2VyOiBVc2VyIHwgbnVsbCkgPT4gdm9pZDtcbiAgc2V0Um9sZTogKHJvbGU6IFN0YWZmUm9sZSB8IG51bGwpID0+IHZvaWQ7XG4gIHNldExvYWRpbmc6IChpc0xvYWRpbmc6IGJvb2xlYW4pID0+IHZvaWQ7XG4gIHJlc2V0OiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFN0b3JlIGRlIGF1dGVudGljYWNpw7NuLiBTaW5jcm9uaXphIHNlc2nDs24gZGUgU3VwYWJhc2UgeSByb2wgZGVsIHVzdWFyaW8uXG4gKiBFbCByb2wgc2UgZXh0cmFlIGRlIGBhcHBfbWV0YWRhdGEucm9sZWAgZW4gZWwgSldULlxuICovXG5leHBvcnQgY29uc3QgdXNlQXV0aFN0b3JlID0gY3JlYXRlPEF1dGhTdGF0ZT4oKShcbiAgZGV2dG9vbHMoXG4gICAgKHNldCkgPT4gKHtcbiAgICAgIHNlc3Npb246IG51bGwsXG4gICAgICB1c2VyOiBudWxsLFxuICAgICAgcm9sZTogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogdHJ1ZSxcblxuICAgICAgc2V0U2Vzc2lvbjogKHNlc3Npb24pID0+XG4gICAgICAgIHNldCh7IHNlc3Npb24gfSwgZmFsc2UsIFwiYXV0aC9zZXRTZXNzaW9uXCIpLFxuXG4gICAgICBzZXRVc2VyOiAodXNlcikgPT4ge1xuICAgICAgICBjb25zdCByb2xlID1cbiAgICAgICAgICAodXNlcj8uYXBwX21ldGFkYXRhPy5yb2xlIGFzIFN0YWZmUm9sZSB8IHVuZGVmaW5lZCkgPz8gbnVsbDtcbiAgICAgICAgc2V0KHsgdXNlciwgcm9sZSB9LCBmYWxzZSwgXCJhdXRoL3NldFVzZXJcIik7XG4gICAgICB9LFxuXG4gICAgICBzZXRSb2xlOiAocm9sZSkgPT5cbiAgICAgICAgc2V0KHsgcm9sZSB9LCBmYWxzZSwgXCJhdXRoL3NldFJvbGVcIiksXG5cbiAgICAgIHNldExvYWRpbmc6IChpc0xvYWRpbmcpID0+XG4gICAgICAgIHNldCh7IGlzTG9hZGluZyB9LCBmYWxzZSwgXCJhdXRoL3NldExvYWRpbmdcIiksXG5cbiAgICAgIHJlc2V0OiAoKSA9PlxuICAgICAgICBzZXQoXG4gICAgICAgICAgeyBzZXNzaW9uOiBudWxsLCB1c2VyOiBudWxsLCByb2xlOiBudWxsLCBpc0xvYWRpbmc6IGZhbHNlIH0sXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgXCJhdXRoL3Jlc2V0XCJcbiAgICAgICAgKSxcbiAgICB9KSxcbiAgICB7IG5hbWU6IFwiQXV0aFN0b3JlXCIsIGVuYWJsZWQ6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIgfVxuICApXG4pO1xuIl0sIm5hbWVzIjpbImNyZWF0ZSIsImRldnRvb2xzIiwidXNlQXV0aFN0b3JlIiwic2V0Iiwic2Vzc2lvbiIsInVzZXIiLCJyb2xlIiwiaXNMb2FkaW5nIiwic2V0U2Vzc2lvbiIsInNldFVzZXIiLCJhcHBfbWV0YWRhdGEiLCJzZXRSb2xlIiwic2V0TG9hZGluZyIsInJlc2V0IiwibmFtZSIsImVuYWJsZWQiLCJwcm9jZXNzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/lib/stores/authStore.ts\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/lib/stores/notificationStore.ts":
|
||
/*!*********************************************!*\
|
||
!*** ./src/lib/stores/notificationStore.ts ***!
|
||
\*********************************************/
|
||
/***/ ((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 */ useNotificationStore: () => (/* binding */ useNotificationStore)\n/* harmony export */ });\n/* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zustand */ \"(app-pages-browser)/./node_modules/zustand/esm/react.mjs\");\n/* harmony import */ var zustand_middleware__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zustand/middleware */ \"(app-pages-browser)/./node_modules/zustand/esm/middleware.mjs\");\n\n\n/**\n * Store de notificaciones. Gestiona en tiempo real las conversaciones\n * pendientes de atención humana (RF-08) y notificaciones del sistema.\n * Se actualiza vía Supabase Realtime.\n */ const useNotificationStore = (0,zustand__WEBPACK_IMPORTED_MODULE_0__.create)()((0,zustand_middleware__WEBPACK_IMPORTED_MODULE_1__.devtools)((set, get)=>({\n pendingConversations: [],\n systemNotifications: [],\n unreadCount: 0,\n setPendingConversations: (conversations)=>set({\n pendingConversations: conversations,\n unreadCount: conversations.length\n }, false, \"notifications/setPendingConversations\"),\n addPendingConversation: (conversation)=>{\n const exists = get().pendingConversations.some((c)=>c.id === conversation.id);\n if (exists) return;\n set((state)=>({\n pendingConversations: [\n conversation,\n ...state.pendingConversations\n ],\n unreadCount: state.unreadCount + 1\n }), false, \"notifications/addPendingConversation\");\n },\n removePendingConversation: (id)=>set((state)=>({\n pendingConversations: state.pendingConversations.filter((c)=>c.id !== id),\n unreadCount: Math.max(0, state.unreadCount - 1)\n }), false, \"notifications/removePendingConversation\"),\n setSystemNotifications: (notifications)=>set({\n systemNotifications: notifications\n }, false, \"notifications/setSystemNotifications\"),\n markAllRead: ()=>set({\n unreadCount: 0\n }, false, \"notifications/markAllRead\")\n }), {\n name: \"NotificationStore\",\n enabled: \"development\" === \"development\"\n}));\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9saWIvc3RvcmVzL25vdGlmaWNhdGlvblN0b3JlLnRzIiwibWFwcGluZ3MiOiI7Ozs7OztBQUFpQztBQUNhO0FBYzlDOzs7O0NBSUMsR0FDTSxNQUFNRSx1QkFBdUJGLCtDQUFNQSxHQUN4Q0MsNERBQVFBLENBQ04sQ0FBQ0UsS0FBS0MsTUFBUztRQUNiQyxzQkFBc0IsRUFBRTtRQUN4QkMscUJBQXFCLEVBQUU7UUFDdkJDLGFBQWE7UUFFYkMseUJBQXlCLENBQUNDLGdCQUN4Qk4sSUFDRTtnQkFBRUUsc0JBQXNCSTtnQkFBZUYsYUFBYUUsY0FBY0MsTUFBTTtZQUFDLEdBQ3pFLE9BQ0E7UUFHSkMsd0JBQXdCLENBQUNDO1lBQ3ZCLE1BQU1DLFNBQVNULE1BQU1DLG9CQUFvQixDQUFDUyxJQUFJLENBQUMsQ0FBQ0MsSUFBTUEsRUFBRUMsRUFBRSxLQUFLSixhQUFhSSxFQUFFO1lBQzlFLElBQUlILFFBQVE7WUFDWlYsSUFDRSxDQUFDYyxRQUFXO29CQUNWWixzQkFBc0I7d0JBQUNPOzJCQUFpQkssTUFBTVosb0JBQW9CO3FCQUFDO29CQUNuRUUsYUFBYVUsTUFBTVYsV0FBVyxHQUFHO2dCQUNuQyxJQUNBLE9BQ0E7UUFFSjtRQUVBVywyQkFBMkIsQ0FBQ0YsS0FDMUJiLElBQ0UsQ0FBQ2MsUUFBVztvQkFDVlosc0JBQXNCWSxNQUFNWixvQkFBb0IsQ0FBQ2MsTUFBTSxDQUFDLENBQUNKLElBQU1BLEVBQUVDLEVBQUUsS0FBS0E7b0JBQ3hFVCxhQUFhYSxLQUFLQyxHQUFHLENBQUMsR0FBR0osTUFBTVYsV0FBVyxHQUFHO2dCQUMvQyxJQUNBLE9BQ0E7UUFHSmUsd0JBQXdCLENBQUNDLGdCQUN2QnBCLElBQUk7Z0JBQUVHLHFCQUFxQmlCO1lBQWMsR0FBRyxPQUFPO1FBRXJEQyxhQUFhLElBQ1hyQixJQUFJO2dCQUFFSSxhQUFhO1lBQUUsR0FBRyxPQUFPO0lBQ25DLElBQ0E7SUFBRWtCLE1BQU07SUFBcUJDLFNBQVNDLGtCQUF5QjtBQUFjLElBRS9FIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvc3JjL2xpYi9zdG9yZXMvbm90aWZpY2F0aW9uU3RvcmUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlIH0gZnJvbSBcInp1c3RhbmRcIjtcbmltcG9ydCB7IGRldnRvb2xzIH0gZnJvbSBcInp1c3RhbmQvbWlkZGxld2FyZVwiO1xuaW1wb3J0IHR5cGUgeyBDb252ZXJzYXRpb24sIFN0YWZmTm90aWZpY2F0aW9uIH0gZnJvbSBcIkAvbGliL3R5cGVzXCI7XG5cbmludGVyZmFjZSBOb3RpZmljYXRpb25TdGF0ZSB7XG4gIHBlbmRpbmdDb252ZXJzYXRpb25zOiBDb252ZXJzYXRpb25bXTtcbiAgc3lzdGVtTm90aWZpY2F0aW9uczogU3RhZmZOb3RpZmljYXRpb25bXTtcbiAgdW5yZWFkQ291bnQ6IG51bWJlcjtcbiAgc2V0UGVuZGluZ0NvbnZlcnNhdGlvbnM6IChjb252ZXJzYXRpb25zOiBDb252ZXJzYXRpb25bXSkgPT4gdm9pZDtcbiAgYWRkUGVuZGluZ0NvbnZlcnNhdGlvbjogKGNvbnZlcnNhdGlvbjogQ29udmVyc2F0aW9uKSA9PiB2b2lkO1xuICByZW1vdmVQZW5kaW5nQ29udmVyc2F0aW9uOiAoaWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgc2V0U3lzdGVtTm90aWZpY2F0aW9uczogKG5vdGlmaWNhdGlvbnM6IFN0YWZmTm90aWZpY2F0aW9uW10pID0+IHZvaWQ7XG4gIG1hcmtBbGxSZWFkOiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFN0b3JlIGRlIG5vdGlmaWNhY2lvbmVzLiBHZXN0aW9uYSBlbiB0aWVtcG8gcmVhbCBsYXMgY29udmVyc2FjaW9uZXNcbiAqIHBlbmRpZW50ZXMgZGUgYXRlbmNpw7NuIGh1bWFuYSAoUkYtMDgpIHkgbm90aWZpY2FjaW9uZXMgZGVsIHNpc3RlbWEuXG4gKiBTZSBhY3R1YWxpemEgdsOtYSBTdXBhYmFzZSBSZWFsdGltZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZU5vdGlmaWNhdGlvblN0b3JlID0gY3JlYXRlPE5vdGlmaWNhdGlvblN0YXRlPigpKFxuICBkZXZ0b29scyhcbiAgICAoc2V0LCBnZXQpID0+ICh7XG4gICAgICBwZW5kaW5nQ29udmVyc2F0aW9uczogW10sXG4gICAgICBzeXN0ZW1Ob3RpZmljYXRpb25zOiBbXSxcbiAgICAgIHVucmVhZENvdW50OiAwLFxuXG4gICAgICBzZXRQZW5kaW5nQ29udmVyc2F0aW9uczogKGNvbnZlcnNhdGlvbnMpID0+XG4gICAgICAgIHNldChcbiAgICAgICAgICB7IHBlbmRpbmdDb252ZXJzYXRpb25zOiBjb252ZXJzYXRpb25zLCB1bnJlYWRDb3VudDogY29udmVyc2F0aW9ucy5sZW5ndGggfSxcbiAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICBcIm5vdGlmaWNhdGlvbnMvc2V0UGVuZGluZ0NvbnZlcnNhdGlvbnNcIlxuICAgICAgICApLFxuXG4gICAgICBhZGRQZW5kaW5nQ29udmVyc2F0aW9uOiAoY29udmVyc2F0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IGdldCgpLnBlbmRpbmdDb252ZXJzYXRpb25zLnNvbWUoKGMpID0+IGMuaWQgPT09IGNvbnZlcnNhdGlvbi5pZCk7XG4gICAgICAgIGlmIChleGlzdHMpIHJldHVybjtcbiAgICAgICAgc2V0KFxuICAgICAgICAgIChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIHBlbmRpbmdDb252ZXJzYXRpb25zOiBbY29udmVyc2F0aW9uLCAuLi5zdGF0ZS5wZW5kaW5nQ29udmVyc2F0aW9uc10sXG4gICAgICAgICAgICB1bnJlYWRDb3VudDogc3RhdGUudW5yZWFkQ291bnQgKyAxLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIFwibm90aWZpY2F0aW9ucy9hZGRQZW5kaW5nQ29udmVyc2F0aW9uXCJcbiAgICAgICAgKTtcbiAgICAgIH0sXG5cbiAgICAgIHJlbW92ZVBlbmRpbmdDb252ZXJzYXRpb246IChpZCkgPT5cbiAgICAgICAgc2V0KFxuICAgICAgICAgIChzdGF0ZSkgPT4gKHtcbiAgICAgICAgICAgIHBlbmRpbmdDb252ZXJzYXRpb25zOiBzdGF0ZS5wZW5kaW5nQ29udmVyc2F0aW9ucy5maWx0ZXIoKGMpID0+IGMuaWQgIT09IGlkKSxcbiAgICAgICAgICAgIHVucmVhZENvdW50OiBNYXRoLm1heCgwLCBzdGF0ZS51bnJlYWRDb3VudCAtIDEpLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIFwibm90aWZpY2F0aW9ucy9yZW1vdmVQZW5kaW5nQ29udmVyc2F0aW9uXCJcbiAgICAgICAgKSxcblxuICAgICAgc2V0U3lzdGVtTm90aWZpY2F0aW9uczogKG5vdGlmaWNhdGlvbnMpID0+XG4gICAgICAgIHNldCh7IHN5c3RlbU5vdGlmaWNhdGlvbnM6IG5vdGlmaWNhdGlvbnMgfSwgZmFsc2UsIFwibm90aWZpY2F0aW9ucy9zZXRTeXN0ZW1Ob3RpZmljYXRpb25zXCIpLFxuXG4gICAgICBtYXJrQWxsUmVhZDogKCkgPT5cbiAgICAgICAgc2V0KHsgdW5yZWFkQ291bnQ6IDAgfSwgZmFsc2UsIFwibm90aWZpY2F0aW9ucy9tYXJrQWxsUmVhZFwiKSxcbiAgICB9KSxcbiAgICB7IG5hbWU6IFwiTm90aWZpY2F0aW9uU3RvcmVcIiwgZW5hYmxlZDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiB9XG4gIClcbik7XG4iXSwibmFtZXMiOlsiY3JlYXRlIiwiZGV2dG9vbHMiLCJ1c2VOb3RpZmljYXRpb25TdG9yZSIsInNldCIsImdldCIsInBlbmRpbmdDb252ZXJzYXRpb25zIiwic3lzdGVtTm90aWZpY2F0aW9ucyIsInVucmVhZENvdW50Iiwic2V0UGVuZGluZ0NvbnZlcnNhdGlvbnMiLCJjb252ZXJzYXRpb25zIiwibGVuZ3RoIiwiYWRkUGVuZGluZ0NvbnZlcnNhdGlvbiIsImNvbnZlcnNhdGlvbiIsImV4aXN0cyIsInNvbWUiLCJjIiwiaWQiLCJzdGF0ZSIsInJlbW92ZVBlbmRpbmdDb252ZXJzYXRpb24iLCJmaWx0ZXIiLCJNYXRoIiwibWF4Iiwic2V0U3lzdGVtTm90aWZpY2F0aW9ucyIsIm5vdGlmaWNhdGlvbnMiLCJtYXJrQWxsUmVhZCIsIm5hbWUiLCJlbmFibGVkIiwicHJvY2VzcyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/lib/stores/notificationStore.ts\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/lib/stores/uiStore.ts":
|
||
/*!***********************************!*\
|
||
!*** ./src/lib/stores/uiStore.ts ***!
|
||
\***********************************/
|
||
/***/ ((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 */ useUIStore: () => (/* binding */ useUIStore)\n/* harmony export */ });\n/* harmony import */ var zustand__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zustand */ \"(app-pages-browser)/./node_modules/zustand/esm/react.mjs\");\n/* harmony import */ var zustand_middleware__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zustand/middleware */ \"(app-pages-browser)/./node_modules/zustand/esm/middleware.mjs\");\n\n\n/**\n * Store de UI global. Controla el sidebar y el stack de modales.\n */ const useUIStore = (0,zustand__WEBPACK_IMPORTED_MODULE_0__.create)()((0,zustand_middleware__WEBPACK_IMPORTED_MODULE_1__.devtools)((set)=>({\n sidebarOpen: true,\n activeModal: null,\n modalPayload: null,\n setSidebarOpen: (open)=>set({\n sidebarOpen: open\n }, false, \"ui/setSidebarOpen\"),\n toggleSidebar: ()=>set((state)=>({\n sidebarOpen: !state.sidebarOpen\n }), false, \"ui/toggleSidebar\"),\n openModal: function(key) {\n let payload = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};\n return set({\n activeModal: key,\n modalPayload: payload\n }, false, \"ui/openModal\");\n },\n closeModal: ()=>set({\n activeModal: null,\n modalPayload: null\n }, false, \"ui/closeModal\")\n }), {\n name: \"UIStore\",\n enabled: \"development\" === \"development\"\n}));\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9saWIvc3RvcmVzL3VpU3RvcmUudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQWlDO0FBQ2E7QUFvQjlDOztDQUVDLEdBQ00sTUFBTUUsYUFBYUYsK0NBQU1BLEdBQzlCQyw0REFBUUEsQ0FDTixDQUFDRSxNQUFTO1FBQ1JDLGFBQWE7UUFDYkMsYUFBYTtRQUNiQyxjQUFjO1FBRWRDLGdCQUFnQixDQUFDQyxPQUNmTCxJQUFJO2dCQUFFQyxhQUFhSTtZQUFLLEdBQUcsT0FBTztRQUVwQ0MsZUFBZSxJQUNiTixJQUNFLENBQUNPLFFBQVc7b0JBQUVOLGFBQWEsQ0FBQ00sTUFBTU4sV0FBVztnQkFBQyxJQUM5QyxPQUNBO1FBR0pPLFdBQVcsU0FBQ0M7Z0JBQUtDLDJFQUFVLENBQUM7bUJBQzFCVixJQUFJO2dCQUFFRSxhQUFhTztnQkFBS04sY0FBY087WUFBUSxHQUFHLE9BQU87O1FBRTFEQyxZQUFZLElBQ1ZYLElBQUk7Z0JBQUVFLGFBQWE7Z0JBQU1DLGNBQWM7WUFBSyxHQUFHLE9BQU87SUFDMUQsSUFDQTtJQUFFUyxNQUFNO0lBQVdDLFNBQVNDLGtCQUF5QjtBQUFjLElBRXJFIiwic291cmNlcyI6WyIvaG9tZS9zaWx2aW8vRGV2ZWxvcC9DSVJVWC1BUFAvc3JjL2xpYi9zdG9yZXMvdWlTdG9yZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGUgfSBmcm9tIFwienVzdGFuZFwiO1xuaW1wb3J0IHsgZGV2dG9vbHMgfSBmcm9tIFwienVzdGFuZC9taWRkbGV3YXJlXCI7XG5cbnR5cGUgTW9kYWxLZXkgPVxuICB8IFwic2xvdEFjdGlvblwiXG4gIHwgXCJhcHBvaW50bWVudERldGFpbFwiXG4gIHwgXCJjcmVhdGVQYXRpZW50XCJcbiAgfCBcInNlbmROb3RpZmljYXRpb25cIlxuICB8IFwiZWRpdFByb2ZpbGVcIlxuICB8IG51bGw7XG5cbmludGVyZmFjZSBVSVN0YXRlIHtcbiAgc2lkZWJhck9wZW46IGJvb2xlYW47XG4gIGFjdGl2ZU1vZGFsOiBNb2RhbEtleTtcbiAgbW9kYWxQYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGw7XG4gIHNldFNpZGViYXJPcGVuOiAob3BlbjogYm9vbGVhbikgPT4gdm9pZDtcbiAgdG9nZ2xlU2lkZWJhcjogKCkgPT4gdm9pZDtcbiAgb3Blbk1vZGFsOiAoa2V5OiBNb2RhbEtleSwgcGF5bG9hZD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkO1xuICBjbG9zZU1vZGFsOiAoKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFN0b3JlIGRlIFVJIGdsb2JhbC4gQ29udHJvbGEgZWwgc2lkZWJhciB5IGVsIHN0YWNrIGRlIG1vZGFsZXMuXG4gKi9cbmV4cG9ydCBjb25zdCB1c2VVSVN0b3JlID0gY3JlYXRlPFVJU3RhdGU+KCkoXG4gIGRldnRvb2xzKFxuICAgIChzZXQpID0+ICh7XG4gICAgICBzaWRlYmFyT3BlbjogdHJ1ZSxcbiAgICAgIGFjdGl2ZU1vZGFsOiBudWxsLFxuICAgICAgbW9kYWxQYXlsb2FkOiBudWxsLFxuXG4gICAgICBzZXRTaWRlYmFyT3BlbjogKG9wZW4pID0+XG4gICAgICAgIHNldCh7IHNpZGViYXJPcGVuOiBvcGVuIH0sIGZhbHNlLCBcInVpL3NldFNpZGViYXJPcGVuXCIpLFxuXG4gICAgICB0b2dnbGVTaWRlYmFyOiAoKSA9PlxuICAgICAgICBzZXQoXG4gICAgICAgICAgKHN0YXRlKSA9PiAoeyBzaWRlYmFyT3BlbjogIXN0YXRlLnNpZGViYXJPcGVuIH0pLFxuICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgIFwidWkvdG9nZ2xlU2lkZWJhclwiXG4gICAgICAgICksXG5cbiAgICAgIG9wZW5Nb2RhbDogKGtleSwgcGF5bG9hZCA9IHt9KSA9PlxuICAgICAgICBzZXQoeyBhY3RpdmVNb2RhbDoga2V5LCBtb2RhbFBheWxvYWQ6IHBheWxvYWQgfSwgZmFsc2UsIFwidWkvb3Blbk1vZGFsXCIpLFxuXG4gICAgICBjbG9zZU1vZGFsOiAoKSA9PlxuICAgICAgICBzZXQoeyBhY3RpdmVNb2RhbDogbnVsbCwgbW9kYWxQYXlsb2FkOiBudWxsIH0sIGZhbHNlLCBcInVpL2Nsb3NlTW9kYWxcIiksXG4gICAgfSksXG4gICAgeyBuYW1lOiBcIlVJU3RvcmVcIiwgZW5hYmxlZDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwiZGV2ZWxvcG1lbnRcIiB9XG4gIClcbik7XG4iXSwibmFtZXMiOlsiY3JlYXRlIiwiZGV2dG9vbHMiLCJ1c2VVSVN0b3JlIiwic2V0Iiwic2lkZWJhck9wZW4iLCJhY3RpdmVNb2RhbCIsIm1vZGFsUGF5bG9hZCIsInNldFNpZGViYXJPcGVuIiwib3BlbiIsInRvZ2dsZVNpZGViYXIiLCJzdGF0ZSIsIm9wZW5Nb2RhbCIsImtleSIsInBheWxvYWQiLCJjbG9zZU1vZGFsIiwibmFtZSIsImVuYWJsZWQiLCJwcm9jZXNzIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/lib/stores/uiStore.ts\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/lib/utils.ts":
|
||
/*!**************************!*\
|
||
!*** ./src/lib/utils.ts ***!
|
||
\**************************/
|
||
/***/ ((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: () => (/* binding */ cn),\n/* harmony export */ formatPgTime: () => (/* binding */ formatPgTime),\n/* harmony export */ toColombiaISOString: () => (/* binding */ toColombiaISOString)\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 * Crea un timestamp ISO con offset explícito de Colombia (UTC-5).\n * Útil para insertar en PostgreSQL TIMESTAMPTZ sin depender del TZ del navegador.\n */ function toColombiaISOString(dateStr, hour, minute) {\n // Construye string ISO con offset explícito de Colombia\n const iso = \"\".concat(dateStr, \"T\").concat(String(hour).padStart(2, \"0\"), \":\").concat(String(minute).padStart(2, \"0\"), \":00-05:00\");\n return new Date(iso).toISOString();\n}\n/**\n * Formatea un timestamp de PostgreSQL/Supabase sin conversiones de zona horaria.\n * Asume que el valor ya está en la zona horaria deseada.\n */ function formatPgTime(ts, pattern) {\n const clean = ts.replace(\" \", \"T\");\n const datePart = clean.slice(0, 10); // YYYY-MM-DD\n const hour = clean.slice(11, 13);\n const minute = clean.slice(14, 16);\n const timePart = \"\".concat(hour, \":\").concat(minute);\n if (pattern === \"HH:mm\") return timePart;\n if (pattern === \"haaa\") {\n const h = parseInt(hour, 10);\n const ampm = h < 12 ? \"a. m.\" : \"p. m.\";\n const h12 = h % 12 || 12;\n return \"\".concat(h12, \" \").concat(ampm);\n }\n const [year, month, day] = datePart.split(\"-\");\n const months = [\n \"ene\",\n \"feb\",\n \"mar\",\n \"abr\",\n \"may\",\n \"jun\",\n \"jul\",\n \"ago\",\n \"sep\",\n \"oct\",\n \"nov\",\n \"dic\"\n ];\n const monthAbbr = months[parseInt(month, 10) - 1];\n return \"\".concat(day, \" \").concat(monthAbbr, \" \").concat(year, \" \\xb7 \").concat(timePart);\n}\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy9saWIvdXRpbHMudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBNEM7QUFDSjtBQUVqQyxTQUFTRTtJQUFHO1FBQUdDLE9BQUgsdUJBQXVCOztJQUN4QyxPQUFPRix1REFBT0EsQ0FBQ0QsMENBQUlBLENBQUNHO0FBQ3RCO0FBRUE7OztDQUdDLEdBQ00sU0FBU0Msb0JBQW9CQyxPQUFlLEVBQUVDLElBQVksRUFBRUMsTUFBYztJQUMvRSx3REFBd0Q7SUFDeEQsTUFBTUMsTUFBTSxHQUFjQyxPQUFYSixTQUFRLEtBQW9DSSxPQUFqQ0EsT0FBT0gsTUFBTUksUUFBUSxDQUFDLEdBQUcsTUFBSyxLQUFtQyxPQUFoQ0QsT0FBT0YsUUFBUUcsUUFBUSxDQUFDLEdBQUcsTUFBSztJQUMzRixPQUFPLElBQUlDLEtBQUtILEtBQUtJLFdBQVc7QUFDbEM7QUFFQTs7O0NBR0MsR0FDTSxTQUFTQyxhQUFhQyxFQUFVLEVBQUVDLE9BQWlEO0lBQ3hGLE1BQU1DLFFBQVFGLEdBQUdHLE9BQU8sQ0FBQyxLQUFLO0lBQzlCLE1BQU1DLFdBQVdGLE1BQU1HLEtBQUssQ0FBQyxHQUFHLEtBQUssYUFBYTtJQUNsRCxNQUFNYixPQUFPVSxNQUFNRyxLQUFLLENBQUMsSUFBSTtJQUM3QixNQUFNWixTQUFTUyxNQUFNRyxLQUFLLENBQUMsSUFBSTtJQUMvQixNQUFNQyxXQUFXLEdBQVdiLE9BQVJELE1BQUssS0FBVSxPQUFQQztJQUU1QixJQUFJUSxZQUFZLFNBQVMsT0FBT0s7SUFFaEMsSUFBSUwsWUFBWSxRQUFRO1FBQ3RCLE1BQU1NLElBQUlDLFNBQVNoQixNQUFNO1FBQ3pCLE1BQU1pQixPQUFPRixJQUFJLEtBQUssVUFBVTtRQUNoQyxNQUFNRyxNQUFNSCxJQUFJLE1BQU07UUFDdEIsT0FBTyxHQUFVRSxPQUFQQyxLQUFJLEtBQVEsT0FBTEQ7SUFDbkI7SUFFQSxNQUFNLENBQUNFLE1BQU1DLE9BQU9DLElBQUksR0FBR1QsU0FBU1UsS0FBSyxDQUFDO0lBQzFDLE1BQU1DLFNBQVM7UUFBQztRQUFPO1FBQU87UUFBTztRQUFPO1FBQU87UUFBTztRQUFPO1FBQU87UUFBTztRQUFPO1FBQU87S0FBTTtJQUNuRyxNQUFNQyxZQUFZRCxNQUFNLENBQUNQLFNBQVNJLE9BQU8sTUFBTSxFQUFFO0lBQ2pELE9BQU8sR0FBVUksT0FBUEgsS0FBSSxLQUFnQkYsT0FBYkssV0FBVSxLQUFhVixPQUFWSyxNQUFLLFVBQWMsT0FBVEw7QUFDMUMiLCJzb3VyY2VzIjpbIi9ob21lL3NpbHZpby9EZXZlbG9wL0NJUlVYLUFQUC9zcmMvbGliL3V0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNsc3gsIHR5cGUgQ2xhc3NWYWx1ZSB9IGZyb20gXCJjbHN4XCJcbmltcG9ydCB7IHR3TWVyZ2UgfSBmcm9tIFwidGFpbHdpbmQtbWVyZ2VcIlxuXG5leHBvcnQgZnVuY3Rpb24gY24oLi4uaW5wdXRzOiBDbGFzc1ZhbHVlW10pIHtcbiAgcmV0dXJuIHR3TWVyZ2UoY2xzeChpbnB1dHMpKVxufVxuXG4vKipcbiAqIENyZWEgdW4gdGltZXN0YW1wIElTTyBjb24gb2Zmc2V0IGV4cGzDrWNpdG8gZGUgQ29sb21iaWEgKFVUQy01KS5cbiAqIMOadGlsIHBhcmEgaW5zZXJ0YXIgZW4gUG9zdGdyZVNRTCBUSU1FU1RBTVBUWiBzaW4gZGVwZW5kZXIgZGVsIFRaIGRlbCBuYXZlZ2Fkb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0NvbG9tYmlhSVNPU3RyaW5nKGRhdGVTdHI6IHN0cmluZywgaG91cjogbnVtYmVyLCBtaW51dGU6IG51bWJlcik6IHN0cmluZyB7XG4gIC8vIENvbnN0cnV5ZSBzdHJpbmcgSVNPIGNvbiBvZmZzZXQgZXhwbMOtY2l0byBkZSBDb2xvbWJpYVxuICBjb25zdCBpc28gPSBgJHtkYXRlU3RyfVQke1N0cmluZyhob3VyKS5wYWRTdGFydCgyLCBcIjBcIil9OiR7U3RyaW5nKG1pbnV0ZSkucGFkU3RhcnQoMiwgXCIwXCIpfTowMC0wNTowMGA7XG4gIHJldHVybiBuZXcgRGF0ZShpc28pLnRvSVNPU3RyaW5nKCk7XG59XG5cbi8qKlxuICogRm9ybWF0ZWEgdW4gdGltZXN0YW1wIGRlIFBvc3RncmVTUUwvU3VwYWJhc2Ugc2luIGNvbnZlcnNpb25lcyBkZSB6b25hIGhvcmFyaWEuXG4gKiBBc3VtZSBxdWUgZWwgdmFsb3IgeWEgZXN0w6EgZW4gbGEgem9uYSBob3JhcmlhIGRlc2VhZGEuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRQZ1RpbWUodHM6IHN0cmluZywgcGF0dGVybjogXCJISDptbVwiIHwgXCJkZCBNTU0geXl5eSDCtyBISDptbVwiIHwgXCJoYWFhXCIpOiBzdHJpbmcge1xuICBjb25zdCBjbGVhbiA9IHRzLnJlcGxhY2UoXCIgXCIsIFwiVFwiKTtcbiAgY29uc3QgZGF0ZVBhcnQgPSBjbGVhbi5zbGljZSgwLCAxMCk7IC8vIFlZWVktTU0tRERcbiAgY29uc3QgaG91ciA9IGNsZWFuLnNsaWNlKDExLCAxMyk7XG4gIGNvbnN0IG1pbnV0ZSA9IGNsZWFuLnNsaWNlKDE0LCAxNik7XG4gIGNvbnN0IHRpbWVQYXJ0ID0gYCR7aG91cn06JHttaW51dGV9YDtcblxuICBpZiAocGF0dGVybiA9PT0gXCJISDptbVwiKSByZXR1cm4gdGltZVBhcnQ7XG5cbiAgaWYgKHBhdHRlcm4gPT09IFwiaGFhYVwiKSB7XG4gICAgY29uc3QgaCA9IHBhcnNlSW50KGhvdXIsIDEwKTtcbiAgICBjb25zdCBhbXBtID0gaCA8IDEyID8gXCJhLiBtLlwiIDogXCJwLiBtLlwiO1xuICAgIGNvbnN0IGgxMiA9IGggJSAxMiB8fCAxMjtcbiAgICByZXR1cm4gYCR7aDEyfSAke2FtcG19YDtcbiAgfVxuXG4gIGNvbnN0IFt5ZWFyLCBtb250aCwgZGF5XSA9IGRhdGVQYXJ0LnNwbGl0KFwiLVwiKTtcbiAgY29uc3QgbW9udGhzID0gW1wiZW5lXCIsIFwiZmViXCIsIFwibWFyXCIsIFwiYWJyXCIsIFwibWF5XCIsIFwianVuXCIsIFwianVsXCIsIFwiYWdvXCIsIFwic2VwXCIsIFwib2N0XCIsIFwibm92XCIsIFwiZGljXCJdO1xuICBjb25zdCBtb250aEFiYnIgPSBtb250aHNbcGFyc2VJbnQobW9udGgsIDEwKSAtIDFdO1xuICByZXR1cm4gYCR7ZGF5fSAke21vbnRoQWJicn0gJHt5ZWFyfSDCtyAke3RpbWVQYXJ0fWA7XG59XG4iXSwibmFtZXMiOlsiY2xzeCIsInR3TWVyZ2UiLCJjbiIsImlucHV0cyIsInRvQ29sb21iaWFJU09TdHJpbmciLCJkYXRlU3RyIiwiaG91ciIsIm1pbnV0ZSIsImlzbyIsIlN0cmluZyIsInBhZFN0YXJ0IiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwiZm9ybWF0UGdUaW1lIiwidHMiLCJwYXR0ZXJuIiwiY2xlYW4iLCJyZXBsYWNlIiwiZGF0ZVBhcnQiLCJzbGljZSIsInRpbWVQYXJ0IiwiaCIsInBhcnNlSW50IiwiYW1wbSIsImgxMiIsInllYXIiLCJtb250aCIsImRheSIsInNwbGl0IiwibW9udGhzIiwibW9udGhBYmJyIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/lib/utils.ts\n"));
|
||
|
||
/***/ }),
|
||
|
||
/***/ "(app-pages-browser)/./src/utils/supabase/client.ts":
|
||
/*!**************************************!*\
|
||
!*** ./src/utils/supabase/client.ts ***!
|
||
\**************************************/
|
||
/***/ ((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 */ createClient: () => (/* binding */ createClient)\n/* harmony export */ });\n/* harmony import */ var _supabase_ssr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @supabase/ssr */ \"(app-pages-browser)/./node_modules/@supabase/ssr/dist/module/index.js\");\n\nfunction createClient() {\n return (0,_supabase_ssr__WEBPACK_IMPORTED_MODULE_0__.createBrowserClient)(\"https://supabase.silvioalzate.shop\", \"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlIiwiaWF0IjoxNzc5MTYzNDQ1LCJleHAiOjE5MzY4NDM0NDV9.RGVwyQdA7oigXmMylP2Df7DKpNno_8_rSTwd0471zLk\");\n}\n\n\n;\n // Wrapped in an IIFE to avoid polluting the global scope\n ;\n (function () {\n var _a, _b;\n // Legacy CSS implementations will `eval` browser code in a Node.js context\n // to extract CSS. For backwards compatibility, we need to check we're in a\n // browser context before continuing.\n if (typeof self !== 'undefined' &&\n // AMP / No-JS mode does not inject these helpers:\n '$RefreshHelpers$' in self) {\n // @ts-ignore __webpack_module__ is global\n var currentExports = module.exports;\n // @ts-ignore __webpack_module__ is global\n var prevSignature = (_b = (_a = module.hot.data) === null || _a === void 0 ? void 0 : _a.prevSignature) !== null && _b !== void 0 ? _b : null;\n // This cannot happen in MainTemplate because the exports mismatch between\n // templating and execution.\n self.$RefreshHelpers$.registerExportsForReactRefresh(currentExports, module.id);\n // A module can be accepted automatically based on its exports, e.g. when\n // it is a Refresh Boundary.\n if (self.$RefreshHelpers$.isReactRefreshBoundary(currentExports)) {\n // Save the previous exports signature on update so we can compare the boundary\n // signatures. We avoid saving exports themselves since it causes memory leaks (https://github.com/vercel/next.js/pull/53797)\n module.hot.dispose(function (data) {\n data.prevSignature =\n self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports);\n });\n // Unconditionally accept an update to this module, we'll check if it's\n // still a Refresh Boundary later.\n // @ts-ignore importMeta is replaced in the loader\n module.hot.accept();\n // This field is set when the previous version of this module was a\n // Refresh Boundary, letting us know we need to check for invalidation or\n // enqueue an update.\n if (prevSignature !== null) {\n // A boundary can become ineligible if its exports are incompatible\n // with the previous exports.\n //\n // For example, if you add/remove/change exports, we'll want to\n // re-execute the importing modules, and force those components to\n // re-render. Similarly, if you convert a class component to a\n // function, we want to invalidate the boundary.\n if (self.$RefreshHelpers$.shouldInvalidateReactRefreshBoundary(prevSignature, self.$RefreshHelpers$.getRefreshBoundarySignature(currentExports))) {\n module.hot.invalidate();\n }\n else {\n self.$RefreshHelpers$.scheduleUpdate();\n }\n }\n }\n else {\n // Since we just executed the code for the module, it's possible that the\n // new exports made it ineligible for being a boundary.\n // We only care about the case when we were _previously_ a boundary,\n // because we already accepted this update (accidental side effect).\n var isNoLongerABoundary = prevSignature !== null;\n if (isNoLongerABoundary) {\n module.hot.invalidate();\n }\n }\n }\n })();\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFwcC1wYWdlcy1icm93c2VyKS8uL3NyYy91dGlscy9zdXBhYmFzZS9jbGllbnQudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBbUQ7QUFFNUMsU0FBU0M7SUFDZCxPQUFPRCxrRUFBbUJBLENBQ3hCRSxvQ0FBb0MsRUFDcENBLDJLQUF5QztBQUU3QyIsInNvdXJjZXMiOlsiL2hvbWUvc2lsdmlvL0RldmVsb3AvQ0lSVVgtQVBQL3NyYy91dGlscy9zdXBhYmFzZS9jbGllbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlQnJvd3NlckNsaWVudCB9IGZyb20gJ0BzdXBhYmFzZS9zc3InXG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVDbGllbnQoKSB7XG4gIHJldHVybiBjcmVhdGVCcm93c2VyQ2xpZW50KFxuICAgIHByb2Nlc3MuZW52Lk5FWFRfUFVCTElDX1NVUEFCQVNFX1VSTCEsXG4gICAgcHJvY2Vzcy5lbnYuTkVYVF9QVUJMSUNfU1VQQUJBU0VfQU5PTl9LRVkhXG4gIClcbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVCcm93c2VyQ2xpZW50IiwiY3JlYXRlQ2xpZW50IiwicHJvY2VzcyIsImVudiIsIk5FWFRfUFVCTElDX1NVUEFCQVNFX1VSTCIsIk5FWFRfUFVCTElDX1NVUEFCQVNFX0FOT05fS0VZIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(app-pages-browser)/./src/utils/supabase/client.ts\n"));
|
||
|
||
/***/ })
|
||
|
||
},
|
||
/******/ __webpack_require__ => { // webpackRuntimeModules
|
||
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
|
||
/******/ __webpack_require__.O(0, ["main-app"], () => (__webpack_exec__("(app-pages-browser)/./node_modules/next/dist/build/webpack/loaders/next-flight-client-entry-loader.js?modules=%7B%22request%22%3A%22%2Fhome%2Fsilvio%2FDevelop%2FCIRUX-APP%2Fsrc%2Fcomponents%2Flayout%2FSidebar.tsx%22%2C%22ids%22%3A%5B%22Sidebar%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Fsilvio%2FDevelop%2FCIRUX-APP%2Fsrc%2Fcomponents%2Flayout%2FTopbar.tsx%22%2C%22ids%22%3A%5B%22Topbar%22%5D%7D&modules=%7B%22request%22%3A%22%2Fhome%2Fsilvio%2FDevelop%2FCIRUX-APP%2Fsrc%2Fcomponents%2Fproviders%2Findex.tsx%22%2C%22ids%22%3A%5B%22Providers%22%5D%7D&server=false!")));
|
||
/******/ var __webpack_exports__ = __webpack_require__.O();
|
||
/******/ _N_E = __webpack_exports__;
|
||
/******/ }
|
||
]); |