You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

45 lines
81 KiB
JavaScript

"use strict";
/*
* ATTENTION: An "eval-source-map" devtool has been used.
* This devtool is neither made for production nor for readable output files.
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
* or disable the default devtool with "devtool: false".
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
*/
exports.id = "vendor-chunks/zustand";
exports.ids = ["vendor-chunks/zustand"];
exports.modules = {
/***/ "(ssr)/./node_modules/zustand/esm/index.mjs":
/*!********************************************!*\
!*** ./node_modules/zustand/esm/index.mjs ***!
\********************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ create: () => (/* binding */ create),\n/* harmony export */ createStore: () => (/* reexport safe */ zustand_vanilla__WEBPACK_IMPORTED_MODULE_0__.createStore),\n/* harmony export */ \"default\": () => (/* binding */ react),\n/* harmony export */ useStore: () => (/* binding */ useStore)\n/* harmony export */ });\n/* harmony import */ var zustand_vanilla__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! zustand/vanilla */ \"(ssr)/./node_modules/zustand/esm/vanilla.mjs\");\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ \"(ssr)/./node_modules/next/dist/server/future/route-modules/app-page/vendored/ssr/react.js\");\n/* harmony import */ var use_sync_external_store_shim_with_selector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! use-sync-external-store/shim/with-selector.js */ \"(ssr)/./node_modules/use-sync-external-store/shim/with-selector.js\");\n\n\n\n\nconst { useSyncExternalStoreWithSelector } = use_sync_external_store_shim_with_selector_js__WEBPACK_IMPORTED_MODULE_2__;\nfunction useStore(api, selector = api.getState, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(api.subscribe, api.getState, api.getServerState || api.getState, selector, equalityFn);\n (0,react__WEBPACK_IMPORTED_MODULE_1__.useDebugValue)(slice);\n return slice;\n}\nconst createImpl = (createState)=>{\n if ( true && typeof createState !== \"function\") {\n console.warn(\"[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.\");\n }\n const api = typeof createState === \"function\" ? (0,zustand_vanilla__WEBPACK_IMPORTED_MODULE_0__.createStore)(createState) : createState;\n const useBoundStore = (selector, equalityFn)=>useStore(api, selector, equalityFn);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState)=>createState ? createImpl(createState) : createImpl;\nvar react = (createState)=>{\n if (true) {\n console.warn(\"[DEPRECATED] Default export is deprecated. Instead use `import { create } from 'zustand'`.\");\n }\n return create(createState);\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvenVzdGFuZC9lc20vaW5kZXgubWpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBOEM7QUFDZDtBQUNNO0FBQ2tEO0FBRXhGLE1BQU0sRUFBRUcsZ0NBQWdDLEVBQUUsR0FBR0QsMEVBQTJCQTtBQUN4RSxTQUFTRSxTQUFTQyxHQUFHLEVBQUVDLFdBQVdELElBQUlFLFFBQVEsRUFBRUMsVUFBVTtJQUN4RCxNQUFNQyxRQUFRTixpQ0FDWkUsSUFBSUssU0FBUyxFQUNiTCxJQUFJRSxRQUFRLEVBQ1pGLElBQUlNLGNBQWMsSUFBSU4sSUFBSUUsUUFBUSxFQUNsQ0QsVUFDQUU7SUFFRlAsb0RBQWFBLENBQUNRO0lBQ2QsT0FBT0E7QUFDVDtBQUNBLE1BQU1HLGFBQWEsQ0FBQ0M7SUFDbEIsSUFBSSxLQUEwRCxJQUFJLE9BQU9BLGdCQUFnQixZQUFZO1FBQ25HRyxRQUFRQyxJQUFJLENBQ1Y7SUFFSjtJQUNBLE1BQU1aLE1BQU0sT0FBT1EsZ0JBQWdCLGFBQWFiLDREQUFXQSxDQUFDYSxlQUFlQTtJQUMzRSxNQUFNSyxnQkFBZ0IsQ0FBQ1osVUFBVUUsYUFBZUosU0FBU0MsS0FBS0MsVUFBVUU7SUFDeEVXLE9BQU9DLE1BQU0sQ0FBQ0YsZUFBZWI7SUFDN0IsT0FBT2E7QUFDVDtBQUNBLE1BQU1HLFNBQVMsQ0FBQ1IsY0FBZ0JBLGNBQWNELFdBQVdDLGVBQWVEO0FBQ3hFLElBQUlVLFFBQVEsQ0FBQ1Q7SUFDWCxJQUFJLElBQTBELEVBQUU7UUFDOURHLFFBQVFDLElBQUksQ0FDVjtJQUVKO0lBQ0EsT0FBT0ksT0FBT1I7QUFDaEI7QUFFOEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9uZXh0Y2hhdC8uL25vZGVfbW9kdWxlcy96dXN0YW5kL2VzbS9pbmRleC5tanM/MmU0ZSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVTdG9yZSB9IGZyb20gJ3p1c3RhbmQvdmFuaWxsYSc7XG5leHBvcnQgKiBmcm9tICd6dXN0YW5kL3ZhbmlsbGEnO1xuaW1wb3J0IHsgdXNlRGVidWdWYWx1ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VTeW5jRXh0ZXJuYWxTdG9yZUV4cG9ydHMgZnJvbSAndXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS93aXRoLXNlbGVjdG9yLmpzJztcblxuY29uc3QgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZVdpdGhTZWxlY3RvciB9ID0gdXNlU3luY0V4dGVybmFsU3RvcmVFeHBvcnRzO1xuZnVuY3Rpb24gdXNlU3RvcmUoYXBpLCBzZWxlY3RvciA9IGFwaS5nZXRTdGF0ZSwgZXF1YWxpdHlGbikge1xuICBjb25zdCBzbGljZSA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yKFxuICAgIGFwaS5zdWJzY3JpYmUsXG4gICAgYXBpLmdldFN0YXRlLFxuICAgIGFwaS5nZXRTZXJ2ZXJTdGF0ZSB8fCBhcGkuZ2V0U3RhdGUsXG4gICAgc2VsZWN0b3IsXG4gICAgZXF1YWxpdHlGblxuICApO1xuICB1c2VEZWJ1Z1ZhbHVlKHNsaWNlKTtcbiAgcmV0dXJuIHNsaWNlO1xufVxuY29uc3QgY3JlYXRlSW1wbCA9IChjcmVhdGVTdGF0ZSkgPT4ge1xuICBpZiAoKGltcG9ydC5tZXRhLmVudiAmJiBpbXBvcnQubWV0YS5lbnYuTU9ERSkgIT09IFwicHJvZHVjdGlvblwiICYmIHR5cGVvZiBjcmVhdGVTdGF0ZSAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgXCJbREVQUkVDQVRFRF0gUGFzc2luZyBhIHZhbmlsbGEgc3RvcmUgd2lsbCBiZSB1bnN1cHBvcnRlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiBJbnN0ZWFkIHVzZSBgaW1wb3J0IHsgdXNlU3RvcmUgfSBmcm9tICd6dXN0YW5kJ2AuXCJcbiAgICApO1xuICB9XG4gIGNvbnN0IGFwaSA9IHR5cGVvZiBjcmVhdGVTdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gY3JlYXRlU3RvcmUoY3JlYXRlU3RhdGUpIDogY3JlYXRlU3RhdGU7XG4gIGNvbnN0IHVzZUJvdW5kU3RvcmUgPSAoc2VsZWN0b3IsIGVxdWFsaXR5Rm4pID0+IHVzZVN0b3JlKGFwaSwgc2VsZWN0b3IsIGVxdWFsaXR5Rm4pO1xuICBPYmplY3QuYXNzaWduKHVzZUJvdW5kU3RvcmUsIGFwaSk7XG4gIHJldHVybiB1c2VCb3VuZFN0b3JlO1xufTtcbmNvbnN0IGNyZWF0ZSA9IChjcmVhdGVTdGF0ZSkgPT4gY3JlYXRlU3RhdGUgPyBjcmVhdGVJbXBsKGNyZWF0ZVN0YXRlKSA6IGNyZWF0ZUltcGw7XG52YXIgcmVhY3QgPSAoY3JlYXRlU3RhdGUpID0+IHtcbiAgaWYgKChpbXBvcnQubWV0YS5lbnYgJiYgaW1wb3J0Lm1ldGEuZW52Lk1PREUpICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIFwiW0RFUFJFQ0FURURdIERlZmF1bHQgZXhwb3J0IGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQgdXNlIGBpbXBvcnQgeyBjcmVhdGUgfSBmcm9tICd6dXN0YW5kJ2AuXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBjcmVhdGUoY3JlYXRlU3RhdGUpO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlLCByZWFjdCBhcyBkZWZhdWx0LCB1c2VTdG9yZSB9O1xuIl0sIm5hbWVzIjpbImNyZWF0ZVN0b3JlIiwidXNlRGVidWdWYWx1ZSIsInVzZVN5bmNFeHRlcm5hbFN0b3JlRXhwb3J0cyIsInVzZVN5bmNFeHRlcm5hbFN0b3JlV2l0aFNlbGVjdG9yIiwidXNlU3RvcmUiLCJhcGkiLCJzZWxlY3RvciIsImdldFN0YXRlIiwiZXF1YWxpdHlGbiIsInNsaWNlIiwic3Vic2NyaWJlIiwiZ2V0U2VydmVyU3RhdGUiLCJjcmVhdGVJbXBsIiwiY3JlYXRlU3RhdGUiLCJlbnYiLCJNT0RFIiwiY29uc29sZSIsIndhcm4iLCJ1c2VCb3VuZFN0b3JlIiwiT2JqZWN0IiwiYXNzaWduIiwiY3JlYXRlIiwicmVhY3QiLCJkZWZhdWx0Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/zustand/esm/index.mjs\n");
/***/ }),
/***/ "(ssr)/./node_modules/zustand/esm/middleware.mjs":
/*!*************************************************!*\
!*** ./node_modules/zustand/esm/middleware.mjs ***!
\*************************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ 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 */ });\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 {\n dispatch: (...a)=>api.dispatch(...a),\n ...initial\n };\n };\nconst redux = reduxImpl;\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name)=>{\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(Object.entries(api.stores).map(([key, api2])=>[\n key,\n 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 {\n type: \"tracked\",\n store,\n ...existingConnection\n };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return {\n type: \"tracked\",\n store,\n ...newConnection\n };\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 : (/* unsupported import.meta.env */ undefined && 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {}\n if (!extensionConnector) {\n if ( true && enabled) {\n console.warn(\"[zustand devtools middleware] Please install/enable Redux devtools extension\");\n }\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 || \"anonymous\"\n } : typeof nameOrAction === \"string\" ? {\n type: nameOrAction\n } : 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 ...action,\n type: `${store}/${action.type}`\n }, {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n });\n return r;\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(Object.fromEntries(Object.entries(connectionInformation.stores).map(([key, store2])=>[\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])));\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...a)=>{\n if ( true && a[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn('[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.');\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...a);\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(\"[zustand devtools middleware] Unsupported action format\");\n return;\n }\n return parseJsonThen(message.payload, (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 [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 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 (!api.dispatchFromDevtools) return;\n if (typeof api.dispatch !== \"function\") return;\n api.dispatch(action);\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 {\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(null, // FIXME no-any\n nextLiftedState);\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, f)=>{\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\"[zustand devtools middleware] Could not parse the received json\", e);\n }\n if (parsed !== void 0) f(parsed);\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;\nconst combine = (initialState, create)=>(...a)=>Object.assign({}, initialState, create(...a));\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 oldImpl = (config, baseOptions)=>(set, get, api)=>{\n let options = {\n getStorage: ()=>localStorage,\n serialize: JSON.stringify,\n deserialize: JSON.parse,\n partialize: (state)=>state,\n version: 0,\n merge: (persistedState, currentState)=>({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage;\n try {\n storage = options.getStorage();\n } catch (e) {}\n if (!storage) {\n return config((...args)=>{\n console.warn(`[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`);\n set(...args);\n }, get, api);\n }\n const thenableSerialize = toThenable(options.serialize);\n const setItem = ()=>{\n const state = options.partialize({\n ...get()\n });\n let errorInSync;\n const thenable = thenableSerialize({\n state,\n version: options.version\n }).then((serializedValue)=>storage.setItem(options.name, serializedValue)).catch((e)=>{\n errorInSync = e;\n });\n if (errorInSync) {\n throw errorInSync;\n }\n return thenable;\n };\n const savedSetState = api.setState;\n api.setState = (state, replace)=>{\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config((...args)=>{\n set(...args);\n void setItem();\n }, get, api);\n let stateFromStorage;\n const hydrate = ()=>{\n var _a;\n if (!storage) return;\n hasHydrated = false;\n hydrationListeners.forEach((cb)=>cb(get()));\n const postRehydrationCallback = ((_a = options.onRehydrateStorage) == null ? void 0 : _a.call(options, get())) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((storageValue)=>{\n if (storageValue) {\n return options.deserialize(storageValue);\n }\n }).then((deserializedStorageValue)=>{\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return options.migrate(deserializedStorageValue.state, deserializedStorageValue.version);\n }\n console.error(`State loaded from storage couldn't be migrated since no migrate function was provided`);\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState)=>{\n var _a2;\n stateFromStorage = options.merge(migratedState, (_a2 = get()) != null ? _a2 : configResult);\n set(stateFromStorage, true);\n return setItem();\n }).then(()=>{\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n hasHydrated = true;\n finishHydrationListeners.forEach((cb)=>cb(stateFromStorage));\n }).catch((e)=>{\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.getStorage) {\n storage = newOptions.getStorage();\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 hydrate();\n return stateFromStorage || configResult;\n };\nconst newImpl = (config, baseOptions)=>(set, get, api)=>{\n let options = {\n storage: createJSONStorage(()=>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 const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config((...args)=>{\n console.warn(`[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`);\n set(...args);\n }, get, api);\n }\n const setItem = ()=>{\n const state = options.partialize({\n ...get()\n });\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 void setItem();\n };\n const configResult = config((...args)=>{\n set(...args);\n void setItem();\n }, get, api);\n let stateFromStorage;\n const hydrate = ()=>{\n var _a, _b;\n if (!storage) return;\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 return options.migrate(deserializedStorageValue.state, deserializedStorageValue.version);\n }\n console.error(`State loaded from storage couldn't be migrated since no migrate function was provided`);\n } else {\n return deserializedStorageValue.state;\n }\n }\n }).then((migratedState)=>{\n var _a2;\n stateFromStorage = options.merge(migratedState, (_a2 = get()) != null ? _a2 : configResult);\n set(stateFromStorage, true);\n return setItem();\n }).then(()=>{\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb)=>cb(stateFromStorage));\n }).catch((e)=>{\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 persistImpl = (config, baseOptions)=>{\n if (\"getStorage\" in baseOptions || \"serialize\" in baseOptions || \"deserialize\" in baseOptions) {\n if (true) {\n console.warn(\"[DEPRECATED] `getStorage`, `serialize` and `deserialize` options are deprecated. Use `storage` option instead.\");\n }\n return oldImpl(config, baseOptions);\n }\n return newImpl(config, baseOptions);\n};\nconst persist = persistImpl;\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvenVzdGFuZC9lc20vbWlkZGxld2FyZS5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsTUFBTUEsWUFBWSxDQUFDQyxTQUFTQyxVQUFZLENBQUNDLEtBQUtDLE1BQU1DO1FBQ2xEQSxJQUFJQyxRQUFRLEdBQUcsQ0FBQ0M7WUFDZEosSUFBSSxDQUFDSyxRQUFVUCxRQUFRTyxPQUFPRCxTQUFTLE9BQU9BO1lBQzlDLE9BQU9BO1FBQ1Q7UUFDQUYsSUFBSUksb0JBQW9CLEdBQUc7UUFDM0IsT0FBTztZQUFFSCxVQUFVLENBQUMsR0FBR0ksSUFBTUwsSUFBSUMsUUFBUSxJQUFJSTtZQUFJLEdBQUdSLE9BQU87UUFBQztJQUM5RDtBQUNBLE1BQU1TLFFBQVFYO0FBRWQsTUFBTVkscUJBQXFCLGFBQWEsR0FBRyxJQUFJQztBQUMvQyxNQUFNQyw0QkFBNEIsQ0FBQ0M7SUFDakMsTUFBTVYsTUFBTU8sbUJBQW1CSSxHQUFHLENBQUNEO0lBQ25DLElBQUksQ0FBQ1YsS0FDSCxPQUFPLENBQUM7SUFDVixPQUFPWSxPQUFPQyxXQUFXLENBQ3ZCRCxPQUFPRSxPQUFPLENBQUNkLElBQUllLE1BQU0sRUFBRUMsR0FBRyxDQUFDLENBQUMsQ0FBQ0MsS0FBS0MsS0FBSyxHQUFLO1lBQUNEO1lBQUtDLEtBQUtDLFFBQVE7U0FBRztBQUUxRTtBQUNBLE1BQU1DLCtCQUErQixDQUFDQyxPQUFPQyxvQkFBb0JDO0lBQy9ELElBQUlGLFVBQVUsS0FBSyxHQUFHO1FBQ3BCLE9BQU87WUFDTEcsTUFBTTtZQUNOQyxZQUFZSCxtQkFBbUJJLE9BQU8sQ0FBQ0g7UUFDekM7SUFDRjtJQUNBLE1BQU1JLHFCQUFxQnBCLG1CQUFtQkksR0FBRyxDQUFDWSxRQUFRYixJQUFJO0lBQzlELElBQUlpQixvQkFBb0I7UUFDdEIsT0FBTztZQUFFSCxNQUFNO1lBQVdIO1lBQU8sR0FBR00sa0JBQWtCO1FBQUM7SUFDekQ7SUFDQSxNQUFNQyxnQkFBZ0I7UUFDcEJI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R0FBRztZQUNaQyxZQUFZLENBQUNDO2dCQUNYOUgsVUFBVTtvQkFDUixHQUFHQSxPQUFPO29CQUNWLEdBQUc4SCxVQUFVO2dCQUNmO2dCQUNBLElBQUlBLFdBQVd6RCxPQUFPLEVBQUU7b0JBQ3RCQSxVQUFVeUQsV0FBV3pELE9BQU87Z0JBQzlCO1lBQ0Y7WUFDQTBELGNBQWM7Z0JBQ1oxRCxXQUFXLE9BQU8sS0FBSyxJQUFJQSxRQUFRVyxVQUFVLENBQUNoRixRQUFRYixJQUFJO1lBQzVEO1lBQ0E2SSxZQUFZLElBQU1oSTtZQUNsQmlJLFdBQVcsSUFBTWpCO1lBQ2pCWixhQUFhLElBQU1BO1lBQ25COEIsV0FBVyxDQUFDaEI7Z0JBQ1ZiLG1CQUFtQjhCLEdBQUcsQ0FBQ2pCO2dCQUN2QixPQUFPO29CQUNMYixtQkFBbUIrQixNQUFNLENBQUNsQjtnQkFDNUI7WUFDRjtZQUNBbUIsbUJBQW1CLENBQUNuQjtnQkFDbEJYLHlCQUF5QjRCLEdBQUcsQ0FBQ2pCO2dCQUM3QixPQUFPO29CQUNMWCx5QkFBeUI2QixNQUFNLENBQUNsQjtnQkFDbEM7WUFDRjtRQUNGO1FBQ0EsSUFBSSxDQUFDbEgsUUFBUXdJLGFBQWEsRUFBRTtZQUMxQnhCO1FBQ0Y7UUFDQSxPQUFPRCxvQkFBb0JEO0lBQzdCO0FBQ0EsTUFBTTJCLGNBQWMsQ0FBQy9DLFFBQVFDO0lBQzNCLElBQUksZ0JBQWdCQSxlQUFlLGVBQWVBLGVBQWUsaUJBQWlCQSxhQUFhO1FBQzdGLElBQUksSUFBMEQsRUFBRTtZQUM5RDNFLFFBQVFDLElBQUksQ0FDVjtRQUVKO1FBQ0EsT0FBT3dFLFFBQVFDLFFBQVFDO0lBQ3pCO0lBQ0EsT0FBTzJDLFFBQVE1QyxRQUFRQztBQUN6QjtBQUNBLE1BQU1pQyxVQUFVYTtBQUV1RSIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRjaGF0Ly4vbm9kZV9tb2R1bGVzL3p1c3RhbmQvZXNtL21pZGRsZXdhcmUubWpzPzNjZmEiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgcmVkdXhJbXBsID0gKHJlZHVjZXIsIGluaXRpYWwpID0+IChzZXQsIF9nZXQsIGFwaSkgPT4ge1xuICBhcGkuZGlzcGF0Y2ggPSAoYWN0aW9uKSA9PiB7XG4gICAgc2V0KChzdGF0ZSkgPT4gcmVkdWNlcihzdGF0ZSwgYWN0aW9uKSwgZmFsc2UsIGFjdGlvbik7XG4gICAgcmV0dXJuIGFjdGlvbjtcbiAgfTtcbiAgYXBpLmRpc3BhdGNoRnJvbURldnRvb2xzID0gdHJ1ZTtcbiAgcmV0dXJuIHsgZGlzcGF0Y2g6ICguLi5hKSA9PiBhcGkuZGlzcGF0Y2goLi4uYSksIC4uLmluaXRpYWwgfTtcbn07XG5jb25zdCByZWR1eCA9IHJlZHV4SW1wbDtcblxuY29uc3QgdHJhY2tlZENvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbmNvbnN0IGdldFRyYWNrZWRDb25uZWN0aW9uU3RhdGUgPSAobmFtZSkgPT4ge1xuICBjb25zdCBhcGkgPSB0cmFja2VkQ29ubmVjdGlvbnMuZ2V0KG5hbWUpO1xuICBpZiAoIWFwaSlcbiAgICByZXR1cm4ge307XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoYXBpLnN0b3JlcykubWFwKChba2V5LCBhcGkyXSkgPT4gW2tleSwgYXBpMi5nZXRTdGF0ZSgpXSlcbiAgKTtcbn07XG5jb25zdCBleHRyYWN0Q29ubmVjdGlvbkluZm9ybWF0aW9uID0gKHN0b3JlLCBleHRlbnNpb25Db25uZWN0b3IsIG9wdGlvbnMpID0+IHtcbiAgaWYgKHN0b3JlID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogXCJ1bnRyYWNrZWRcIixcbiAgICAgIGNvbm5lY3Rpb246IGV4dGVuc2lvbkNvbm5lY3Rvci5jb25uZWN0KG9wdGlvbnMpXG4gICAgfTtcbiAgfVxuICBjb25zdCBleGlzdGluZ0Nvbm5lY3Rpb24gPSB0cmFja2VkQ29ubmVjdGlvbnMuZ2V0KG9wdGlvbnMubmFtZSk7XG4gIGlmIChleGlzdGluZ0Nvbm5lY3Rpb24pIHtcbiAgICByZXR1cm4geyB0eXBlOiBcInRyYWNrZWRcIiwgc3RvcmUsIC4uLmV4aXN0aW5nQ29ubmVjdGlvbiB9O1xuICB9XG4gIGNvbnN0IG5ld0Nvbm5lY3Rpb24gPSB7XG4gICAgY29ubmVjdGlvbjogZXh0ZW5zaW9uQ29ubmVjdG9yLmNvbm5lY3Qob3B0aW9ucyksXG4gICAgc3RvcmVzOiB7fVxuICB9O1xuICB0cmFja2VkQ29ubmVjdGlvbnMuc2V0KG9wdGlvbnMubmFtZSwgbmV3Q29ubmVjdGlvbik7XG4gIHJldHVybiB7IHR5cGU6IFwidHJhY2tlZFwiLCBzdG9yZSwgLi4ubmV3Q29ubmVjdGlvbiB9O1xufTtcbmNvbnN0IGRldnRvb2xzSW1wbCA9IChmbiwgZGV2dG9vbHNPcHRpb25zID0ge30pID0+IChzZXQsIGdldCwgYXBpKSA9PiB7XG4gIGNvbnN0IHsgZW5hYmxlZCwgYW5vbnltb3VzQWN0aW9uVHlwZSwgc3RvcmUsIC4uLm9wdGlvbnMgfSA9IGRldnRvb2xzT3B0aW9ucztcbiAgbGV0IGV4dGVuc2lvbkNvbm5lY3RvcjtcbiAgdHJ5IHtcbiAgICBleHRlbnNpb25Db25uZWN0b3IgPSAoZW5hYmxlZCAhPSBudWxsID8gZW5hYmxlZCA6IChpbXBvcnQubWV0YS5lbnYgJiYgaW1wb3J0Lm1ldGEuZW52Lk1PREUpICE9PSBcInByb2R1Y3Rpb25cIikgJiYgd2luZG93Ll9fUkVEVVhfREVWVE9PTFNfRVhURU5TSU9OX187XG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxuICBpZiAoIWV4dGVuc2lvbkNvbm5lY3Rvcikge1xuICAgIGlmICgoaW1wb3J0Lm1ldGEuZW52ICYmIGltcG9ydC5tZXRhLmVudi5NT0RFKSAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgZW5hYmxlZCkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBcIlt6dXN0YW5kIGRldnRvb2xzIG1pZGRsZXdhcmVdIFBsZWFzZSBpbnN0YWxsL2VuYWJsZSBSZWR1eCBkZXZ0b29scyBleHRlbnNpb25cIlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGZuKHNldCwgZ2V0LCBhcGkpO1xuICB9XG4gIGNvbnN0IHsgY29ubmVjdGlvbiwgLi4uY29ubmVjdGlvbkluZm9ybWF0aW9uIH0gPSBleHRyYWN0Q29ubmVjdGlvbkluZm9ybWF0aW9uKHN0b3JlLCBleHRlbnNpb25Db25uZWN0b3IsIG9wdGlvbnMpO1xuICBsZXQgaXNSZWNvcmRpbmcgPSB0cnVlO1xuICBhcGkuc2V0U3RhdGUgPSAoc3RhdGUsIHJlcGxhY2UsIG5hbWVPckFjdGlvbikgPT4ge1xuICAgIGNvbnN0IHIgPSBzZXQoc3RhdGUsIHJlcGxhY2UpO1xuICAgIGlmICghaXNSZWNvcmRpbmcpXG4gICAgICByZXR1cm4gcjtcbiAgICBjb25zdCBhY3Rpb24gPSBuYW1lT3JBY3Rpb24gPT09IHZvaWQgMCA/IHsgdHlwZTogYW5vbnltb3VzQWN0aW9uVHlwZSB8fCBcImFub255bW91c1wiIH0gOiB0eXBlb2YgbmFtZU9yQWN0aW9uID09PSBcInN0cmluZ1wiID8geyB0eXBlOiBuYW1lT3JBY3Rpb24gfSA6IG5hbWVPckFjdGlvbjtcbiAgICBpZiAoc3RvcmUgPT09IHZvaWQgMCkge1xuICAgICAgY29ubmVjdGlvbiA9PSBudWxsID8gdm9pZCAwIDogY29ubmVjdGlvbi5zZW5kKGFjdGlvbiwgZ2V0KCkpO1xuICAgICAgcmV0dXJuIHI7XG4gICAgfVxuICAgIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uc2VuZChcbiAgICAgIHtcbiAgICAgICAgLi4uYWN0aW9uLFxuICAgICAgICB0eXBlOiBgJHtzdG9yZX0vJHthY3Rpb24udHlwZX1gXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICAuLi5nZXRUcmFja2VkQ29ubmVjdGlvblN0YXRlKG9wdGlvbnMubmFtZSksXG4gICAgICAgIFtzdG9yZV06IGFwaS5nZXRTdGF0ZSgpXG4gICAgICB9XG4gICAgKTtcbiAgICByZXR1cm4gcjtcbiAgfTtcbiAgY29uc3Qgc2V0U3RhdGVGcm9tRGV2dG9vbHMgPSAoLi4uYSkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsSXNSZWNvcmRpbmcgPSBpc1JlY29yZGluZztcbiAgICBpc1JlY29yZGluZyA9IGZhbHNlO1xuICAgIHNldCguLi5hKTtcbiAgICBpc1JlY29yZGluZyA9IG9yaWdpbmFsSXNSZWNvcmRpbmc7XG4gIH07XG4gIGNvbnN0IGluaXRpYWxTdGF0ZSA9IGZuKGFwaS5zZXRTdGF0ZSwgZ2V0LCBhcGkpO1xuICBpZiAoY29ubmVjdGlvbkluZm9ybWF0aW9uLnR5cGUgPT09IFwidW50cmFja2VkXCIpIHtcbiAgICBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLmluaXQoaW5pdGlhbFN0YXRlKTtcbiAgfSBlbHNlIHtcbiAgICBjb25uZWN0aW9uSW5mb3JtYXRpb24uc3RvcmVzW2Nvbm5lY3Rpb25JbmZvcm1hdGlvbi5zdG9yZV0gPSBhcGk7XG4gICAgY29ubmVjdGlvbiA9PSBudWxsID8gdm9pZCAwIDogY29ubmVjdGlvbi5pbml0KFxuICAgICAgT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhjb25uZWN0aW9uSW5mb3JtYXRpb24uc3RvcmVzKS5tYXAoKFtrZXksIHN0b3JlMl0pID0+IFtcbiAgICAgICAgICBrZXksXG4gICAgICAgICAga2V5ID09PSBjb25uZWN0aW9uSW5mb3JtYXRpb24uc3RvcmUgPyBpbml0aWFsU3RhdGUgOiBzdG9yZTIuZ2V0U3RhdGUoKVxuICAgICAgICBdKVxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgaWYgKGFwaS5kaXNwYXRjaEZyb21EZXZ0b29scyAmJiB0eXBlb2YgYXBpLmRpc3BhdGNoID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsZXQgZGlkV2FybkFib3V0UmVzZXJ2ZWRBY3Rpb25UeXBlID0gZmFsc2U7XG4gICAgY29uc3Qgb3JpZ2luYWxEaXNwYXRjaCA9IGFwaS5kaXNwYXRjaDtcbiAgICBhcGkuZGlzcGF0Y2ggPSAoLi4uYSkgPT4ge1xuICAgICAgaWYgKChpbXBvcnQubWV0YS5lbnYgJiYgaW1wb3J0Lm1ldGEuZW52Lk1PREUpICE9PSBcInByb2R1Y3Rpb25cIiAmJiBhWzBdLnR5cGUgPT09IFwiX19zZXRTdGF0ZVwiICYmICFkaWRXYXJuQWJvdXRSZXNlcnZlZEFjdGlvblR5cGUpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdbenVzdGFuZCBkZXZ0b29scyBtaWRkbGV3YXJlXSBcIl9fc2V0U3RhdGVcIiBhY3Rpb24gdHlwZSBpcyByZXNlcnZlZCB0byBzZXQgc3RhdGUgZnJvbSB0aGUgZGV2dG9vbHMuIEF2b2lkIHVzaW5nIGl0LidcbiAgICAgICAgKTtcbiAgICAgICAgZGlkV2FybkFib3V0UmVzZXJ2ZWRBY3Rpb25UeXBlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIG9yaWdpbmFsRGlzcGF0Y2goLi4uYSk7XG4gICAgfTtcbiAgfVxuICBjb25uZWN0aW9uLnN1YnNjcmliZSgobWVzc2FnZSkgPT4ge1xuICAgIHZhciBfYTtcbiAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgY2FzZSBcIkFDVElPTlwiOlxuICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UucGF5bG9hZCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBcIlt6dXN0YW5kIGRldnRvb2xzIG1pZGRsZXdhcmVdIFVuc3VwcG9ydGVkIGFjdGlvbiBmb3JtYXRcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZUpzb25UaGVuKFxuICAgICAgICAgIG1lc3NhZ2UucGF5bG9hZCxcbiAgICAgICAgICAoYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBpZiAoYWN0aW9uLnR5cGUgPT09IFwiX19zZXRTdGF0ZVwiKSB7XG4gICAgICAgICAgICAgIGlmIChzdG9yZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tRGV2dG9vbHMoYWN0aW9uLnN0YXRlKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGFjdGlvbi5zdGF0ZSkubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgIGBcbiAgICAgICAgICAgICAgICAgICAgW3p1c3RhbmQgZGV2dG9vbHMgbWlkZGxld2FyZV0gVW5zdXBwb3J0ZWQgX19zZXRTdGF0ZSBhY3Rpb24gZm9ybWF0LiBcbiAgICAgICAgICAgICAgICAgICAgV2hlbiB1c2luZyAnc3RvcmUnIG9wdGlvbiBpbiBkZXZ0b29scygpLCB0aGUgJ3N0YXRlJyBzaG91bGQgaGF2ZSBvbmx5IG9uZSBrZXksIHdoaWNoIGlzIGEgdmFsdWUgb2YgJ3N0b3JlJyB0aGF0IHdhcyBwYXNzZWQgaW4gZGV2dG9vbHMoKSxcbiAgICAgICAgICAgICAgICAgICAgYW5kIHZhbHVlIG9mIHRoaXMgb25seSBrZXkgc2hvdWxkIGJlIGEgc3RhdGUgb2JqZWN0LiBFeGFtcGxlOiB7IFwidHlwZVwiOiBcIl9fc2V0U3RhdGVcIiwgXCJzdGF0ZVwiOiB7IFwiYWJjMTIzU3RvcmVcIjogeyBcImZvb1wiOiBcImJhclwiIH0gfSB9XG4gICAgICAgICAgICAgICAgICAgIGBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHN0YXRlRnJvbURldnRvb2xzID0gYWN0aW9uLnN0YXRlW3N0b3JlXTtcbiAgICAgICAgICAgICAgaWYgKHN0YXRlRnJvbURldnRvb2xzID09PSB2b2lkIDAgfHwgc3RhdGVGcm9tRGV2dG9vbHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGFwaS5nZXRTdGF0ZSgpKSAhPT0gSlNPTi5zdHJpbmdpZnkoc3RhdGVGcm9tRGV2dG9vbHMpKSB7XG4gICAgICAgICAgICAgICAgc2V0U3RhdGVGcm9tRGV2dG9vbHMoc3RhdGVGcm9tRGV2dG9vbHMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYXBpLmRpc3BhdGNoRnJvbURldnRvb2xzKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAodHlwZW9mIGFwaS5kaXNwYXRjaCAhPT0gXCJmdW5jdGlvblwiKVxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBhcGkuZGlzcGF0Y2goYWN0aW9uKTtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICBjYXNlIFwiRElTUEFUQ0hcIjpcbiAgICAgICAgc3dpdGNoIChtZXNzYWdlLnBheWxvYWQudHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJSRVNFVFwiOlxuICAgICAgICAgICAgc2V0U3RhdGVGcm9tRGV2dG9vbHMoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICAgIGlmIChzdG9yZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLmluaXQoYXBpLmdldFN0YXRlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uaW5pdChnZXRUcmFja2VkQ29ubmVjdGlvblN0YXRlKG9wdGlvbnMubmFtZSkpO1xuICAgICAgICAgIGNhc2UgXCJDT01NSVRcIjpcbiAgICAgICAgICAgIGlmIChzdG9yZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgIGNvbm5lY3Rpb24gPT0gbnVsbCA/IHZvaWQgMCA6IGNvbm5lY3Rpb24uaW5pdChhcGkuZ2V0U3RhdGUoKSk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLmluaXQoZ2V0VHJhY2tlZENvbm5lY3Rpb25TdGF0ZShvcHRpb25zLm5hbWUpKTtcbiAgICAgICAgICBjYXNlIFwiUk9MTEJBQ0tcIjpcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUpzb25UaGVuKG1lc3NhZ2Uuc3RhdGUsIChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoc3RvcmUgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgIHNldFN0YXRlRnJvbURldnRvb2xzKHN0YXRlKTtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLmluaXQoYXBpLmdldFN0YXRlKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21EZXZ0b29scyhzdGF0ZVtzdG9yZV0pO1xuICAgICAgICAgICAgICBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLmluaXQoZ2V0VHJhY2tlZENvbm5lY3Rpb25TdGF0ZShvcHRpb25zLm5hbWUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGNhc2UgXCJKVU1QX1RPX1NUQVRFXCI6XG4gICAgICAgICAgY2FzZSBcIkpVTVBfVE9fQUNUSU9OXCI6XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VKc29uVGhlbihtZXNzYWdlLnN0YXRlLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHN0b3JlID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21EZXZ0b29scyhzdGF0ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChKU09OLnN0cmluZ2lmeShhcGkuZ2V0U3RhdGUoKSkgIT09IEpTT04uc3RyaW5naWZ5KHN0YXRlW3N0b3JlXSkpIHtcbiAgICAgICAgICAgICAgICBzZXRTdGF0ZUZyb21EZXZ0b29scyhzdGF0ZVtzdG9yZV0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICBjYXNlIFwiSU1QT1JUX1NUQVRFXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmV4dExpZnRlZFN0YXRlIH0gPSBtZXNzYWdlLnBheWxvYWQ7XG4gICAgICAgICAgICBjb25zdCBsYXN0Q29tcHV0ZWRTdGF0ZSA9IChfYSA9IG5leHRMaWZ0ZWRTdGF0ZS5jb21wdXRlZFN0YXRlcy5zbGljZSgtMSlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfYS5zdGF0ZTtcbiAgICAgICAgICAgIGlmICghbGFzdENvbXB1dGVkU3RhdGUpXG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmIChzdG9yZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgIHNldFN0YXRlRnJvbURldnRvb2xzKGxhc3RDb21wdXRlZFN0YXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNldFN0YXRlRnJvbURldnRvb2xzKGxhc3RDb21wdXRlZFN0YXRlW3N0b3JlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25uZWN0aW9uID09IG51bGwgPyB2b2lkIDAgOiBjb25uZWN0aW9uLnNlbmQoXG4gICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgIC8vIEZJWE1FIG5vLWFueVxuICAgICAgICAgICAgICBuZXh0TGlmdGVkU3RhdGVcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgXCJQQVVTRV9SRUNPUkRJTkdcIjpcbiAgICAgICAgICAgIHJldHVybiBpc1JlY29yZGluZyA9ICFpc1JlY29yZGluZztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGluaXRpYWxTdGF0ZTtcbn07XG5jb25zdCBkZXZ0b29scyA9IGRldnRvb2xzSW1wbDtcbmNvbnN0IHBhcnNlSnNvblRoZW4gPSAoc3RyaW5naWZpZWQsIGYpID0+IHtcbiAgbGV0IHBhcnNlZDtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKHN0cmluZ2lmaWVkKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICBcIlt6dXN0YW5kIGRldnRvb2xzIG1pZGRsZXdhcmVdIENvdWxkIG5vdCBwYXJzZSB0aGUgcmVjZWl2ZWQganNvblwiLFxuICAgICAgZVxuICAgICk7XG4gIH1cbiAgaWYgKHBhcnNlZCAhPT0gdm9pZCAwKVxuICAgIGYocGFyc2VkKTtcbn07XG5cbmNvbnN0IHN1YnNjcmliZVdpdGhTZWxlY3RvckltcGwgPSAoZm4pID0+IChzZXQsIGdldCwgYXBpKSA9PiB7XG4gIGNvbnN0IG9yaWdTdWJzY3JpYmUgPSBhcGkuc3Vic2NyaWJlO1xuICBhcGkuc3Vic2NyaWJlID0gKHNlbGVjdG9yLCBvcHRMaXN0ZW5lciwgb3B0aW9ucykgPT4ge1xuICAgIGxldCBsaXN0ZW5lciA9IHNlbGVjdG9yO1xuICAgIGlmIChvcHRMaXN0ZW5lcikge1xuICAgICAgY29uc3QgZXF1YWxpdHlGbiA9IChvcHRpb25zID09IG51bGwgPyB2b2lkIDAgOiBvcHRpb25zLmVxdWFsaXR5Rm4pIHx8IE9iamVjdC5pcztcbiAgICAgIGxldCBjdXJyZW50U2xpY2UgPSBzZWxlY3RvcihhcGkuZ2V0U3RhdGUoKSk7XG4gICAgICBsaXN0ZW5lciA9IChzdGF0ZSkgPT4ge1xuICAgICAgICBjb25zdCBuZXh0U2xpY2UgPSBzZWxlY3RvcihzdGF0ZSk7XG4gICAgICAgIGlmICghZXF1YWxpdHlGbihjdXJyZW50U2xpY2UsIG5leHRTbGljZSkpIHtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c1NsaWNlID0gY3VycmVudFNsaWNlO1xuICAgICAgICAgIG9wdExpc3RlbmVyKGN1cnJlbnRTbGljZSA9IG5leHRTbGljZSwgcHJldmlvdXNTbGljZSk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBpZiAob3B0aW9ucyA9PSBudWxsID8gdm9pZCAwIDogb3B0aW9ucy5maXJlSW1tZWRpYXRlbHkpIHtcbiAgICAgICAgb3B0TGlzdGVuZXIoY3VycmVudFNsaWNlLCBjdXJyZW50U2xpY2UpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3JpZ1N1YnNjcmliZShsaXN0ZW5lcik7XG4gIH07XG4gIGNvbnN0IGluaXRpYWxTdGF0ZSA9IGZuKHNldCwgZ2V0LCBhcGkpO1xuICByZXR1cm4gaW5pdGlhbFN0YXRlO1xufTtcbmNvbnN0IHN1YnNjcmliZVdpdGhTZWxlY3RvciA9IHN1YnNjcmliZVdpdGhTZWxlY3RvckltcGw7XG5cbmNvbnN0IGNvbWJpbmUgPSAoaW5pdGlhbFN0YXRlLCBjcmVhdGUpID0+ICguLi5hKSA9PiBPYmplY3QuYXNzaWduKHt9LCBpbml0aWFsU3RhdGUsIGNyZWF0ZSguLi5hKSk7XG5cbmZ1bmN0aW9uIGNyZWF0ZUpTT05TdG9yYWdlKGdldFN0b3JhZ2UsIG9wdGlvbnMpIHtcbiAgbGV0IHN0b3JhZ2U7XG4gIHRyeSB7XG4gICAgc3RvcmFnZSA9IGdldFN0b3JhZ2UoKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBwZXJzaXN0U3RvcmFnZSA9IHtcbiAgICBnZXRJdGVtOiAobmFtZSkgPT4ge1xuICAgICAgdmFyIF9hO1xuICAgICAgY29uc3QgcGFyc2UgPSAoc3RyMikgPT4ge1xuICAgICAgICBpZiAoc3RyMiA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHN0cjIsIG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucmV2aXZlcik7XG4gICAgICB9O1xuICAgICAgY29uc3Qgc3RyID0gKF9hID0gc3RvcmFnZS5nZXRJdGVtKG5hbWUpKSAhPSBudWxsID8gX2EgOiBudWxsO1xuICAgICAgaWYgKHN0ciBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgcmV0dXJuIHN0ci50aGVuKHBhcnNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJzZShzdHIpO1xuICAgIH0sXG4gICAgc2V0SXRlbTogKG5hbWUsIG5ld1ZhbHVlKSA9PiBzdG9yYWdlLnNldEl0ZW0oXG4gICAgICBuYW1lLFxuICAgICAgSlNPTi5zdHJpbmdpZnkobmV3VmFsdWUsIG9wdGlvbnMgPT0gbnVsbCA/IHZvaWQgMCA6IG9wdGlvbnMucmVwbGFjZXIpXG4gICAgKSxcbiAgICByZW1vdmVJdGVtOiAobmFtZSkgPT4gc3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpXG4gIH07XG4gIHJldHVybiBwZXJzaXN0U3RvcmFnZTtcbn1cbmNvbnN0IHRvVGhlbmFibGUgPSAoZm4pID0+IChpbnB1dCkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGZuKGlucHV0KTtcbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHRoZW4ob25GdWxmaWxsZWQpIHtcbiAgICAgICAgcmV0dXJuIHRvVGhlbmFibGUob25GdWxmaWxsZWQpKHJlc3VsdCk7XG4gICAgICB9LFxuICAgICAgY2F0Y2goX29uUmVqZWN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgfTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiB7XG4gICAgICB0aGVuKF9vbkZ1bGZpbGxlZCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0sXG4gICAgICBjYXRjaChvblJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiB0b1RoZW5hYmxlKG9uUmVqZWN0ZWQpKGUpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn07XG5jb25zdCBvbGRJbXBsID0gKGNvbmZpZywgYmFzZU9wdGlvbnMpID0+IChzZXQsIGdldCwgYXBpKSA9PiB7XG4gIGxldCBvcHRpb25zID0ge1xuICAgIGdldFN0b3JhZ2U6ICgpID0+IGxvY2FsU3RvcmFnZSxcbiAgICBzZXJpYWxpemU6IEpTT04uc3RyaW5naWZ5LFxuICAgIGRlc2VyaWFsaXplOiBKU09OLnBhcnNlLFxuICAgIHBhcnRpYWxpemU6IChzdGF0ZSkgPT4gc3RhdGUsXG4gICAgdmVyc2lvbjogMCxcbiAgICBtZXJnZTogKHBlcnNpc3RlZFN0YXRlLCBjdXJyZW50U3RhdGUpID0+ICh7XG4gICAgICAuLi5jdXJyZW50U3RhdGUsXG4gICAgICAuLi5wZXJzaXN0ZWRTdGF0ZVxuICAgIH0pLFxuICAgIC4uLmJhc2VPcHRpb25zXG4gIH07XG4gIGxldCBoYXNIeWRyYXRlZCA9IGZhbHNlO1xuICBjb25zdCBoeWRyYXRpb25MaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICBjb25zdCBmaW5pc2hIeWRyYXRpb25MaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICBsZXQgc3RvcmFnZTtcbiAgdHJ5IHtcbiAgICBzdG9yYWdlID0gb3B0aW9ucy5nZXRTdG9yYWdlKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgfVxuICBpZiAoIXN0b3JhZ2UpIHtcbiAgICByZXR1cm4gY29uZmlnKFxuICAgICAgKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBbenVzdGFuZCBwZXJzaXN0IG1pZGRsZXdhcmVdIFVuYWJsZSB0byB1cGRhdGUgaXRlbSAnJHtvcHRpb25zLm5hbWV9JywgdGhlIGdpdmVuIHN0b3JhZ2UgaXMgY3VycmVudGx5IHVuYXZhaWxhYmxlLmBcbiAgICAgICAgKTtcbiAgICAgICAgc2V0KC4uLmFyZ3MpO1xuICAgICAgfSxcbiAgICAgIGdldCxcbiAgICAgIGFwaVxuICAgICk7XG4gIH1cbiAgY29uc3QgdGhlbmFibGVTZXJpYWxpemUgPSB0b1RoZW5hYmxlKG9wdGlvbnMuc2VyaWFsaXplKTtcbiAgY29uc3Qgc2V0SXRlbSA9ICgpID0+IHtcbiAgICBjb25zdCBzdGF0ZSA9IG9wdGlvbnMucGFydGlhbGl6ZSh7IC4uLmdldCgpIH0pO1xuICAgIGxldCBlcnJvckluU3luYztcbiAgICBjb25zdCB0aGVuYWJsZSA9IHRoZW5hYmxlU2VyaWFsaXplKHsgc3RhdGUsIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiB9KS50aGVuKFxuICAgICAgKHNlcmlhbGl6ZWRWYWx1ZSkgPT4gc3RvcmFnZS5zZXRJdGVtKG9wdGlvbnMubmFtZSwgc2VyaWFsaXplZFZhbHVlKVxuICAgICkuY2F0Y2goKGUpID0+IHtcbiAgICAgIGVycm9ySW5TeW5jID0gZTtcbiAgICB9KTtcbiAgICBpZiAoZXJyb3JJblN5bmMpIHtcbiAgICAgIHRocm93IGVycm9ySW5TeW5jO1xuICAgIH1cbiAgICByZXR1cm4gdGhlbmFibGU7XG4gIH07XG4gIGNvbnN0IHNhdmVkU2V0U3RhdGUgPSBhcGkuc2V0U3RhdGU7XG4gIGFwaS5zZXRTdGF0ZSA9IChzdGF0ZSwgcmVwbGFjZSkgPT4ge1xuICAgIHNhdmVkU2V0U3RhdGUoc3RhdGUsIHJlcGxhY2UpO1xuICAgIHZvaWQgc2V0SXRlbSgpO1xuICB9O1xuICBjb25zdCBjb25maWdSZXN1bHQgPSBjb25maWcoXG4gICAgKC4uLmFyZ3MpID0+IHtcbiAgICAgIHNldCguLi5hcmdzKTtcbiAgICAgIHZvaWQgc2V0SXRlbSgpO1xuICAgIH0sXG4gICAgZ2V0LFxuICAgIGFwaVxuICApO1xuICBsZXQgc3RhdGVGcm9tU3RvcmFnZTtcbiAgY29uc3QgaHlkcmF0ZSA9ICgpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKCFzdG9yYWdlKVxuICAgICAgcmV0dXJuO1xuICAgIGhhc0h5ZHJhdGVkID0gZmFsc2U7XG4gICAgaHlkcmF0aW9uTGlzdGVuZXJzLmZvckVhY2goKGNiKSA9PiBjYihnZXQoKSkpO1xuICAgIGNvbnN0IHBvc3RSZWh5ZHJhdGlvbkNhbGxiYWNrID0gKChfYSA9IG9wdGlvbnMub25SZWh5ZHJhdGVTdG9yYWdlKSA9PSBudWxsID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zLCBnZXQoKSkpIHx8IHZvaWQgMDtcbiAgICByZXR1cm4gdG9UaGVuYWJsZShzdG9yYWdlLmdldEl0ZW0uYmluZChzdG9yYWdlKSkob3B0aW9ucy5uYW1lKS50aGVuKChzdG9yYWdlVmFsdWUpID0+IHtcbiAgICAgIGlmIChzdG9yYWdlVmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMuZGVzZXJpYWxpemUoc3RvcmFnZVZhbHVlKTtcbiAgICAgIH1cbiAgICB9KS50aGVuKChkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUpID0+IHtcbiAgICAgIGlmIChkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUudmVyc2lvbiA9PT0gXCJudW1iZXJcIiAmJiBkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUudmVyc2lvbiAhPT0gb3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMubWlncmF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMubWlncmF0ZShcbiAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3RvcmFnZVZhbHVlLnN0YXRlLFxuICAgICAgICAgICAgICBkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUudmVyc2lvblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBTdGF0ZSBsb2FkZWQgZnJvbSBzdG9yYWdlIGNvdWxkbid0IGJlIG1pZ3JhdGVkIHNpbmNlIG5vIG1pZ3JhdGUgZnVuY3Rpb24gd2FzIHByb3ZpZGVkYFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGRlc2VyaWFsaXplZFN0b3JhZ2VWYWx1ZS5zdGF0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLnRoZW4oKG1pZ3JhdGVkU3RhdGUpID0+IHtcbiAgICAgIHZhciBfYTI7XG4gICAgICBzdGF0ZUZyb21TdG9yYWdlID0gb3B0aW9ucy5tZXJnZShcbiAgICAgICAgbWlncmF0ZWRTdGF0ZSxcbiAgICAgICAgKF9hMiA9IGdldCgpKSAhPSBudWxsID8gX2EyIDogY29uZmlnUmVzdWx0XG4gICAgICApO1xuICAgICAgc2V0KHN0YXRlRnJvbVN0b3JhZ2UsIHRydWUpO1xuICAgICAgcmV0dXJuIHNldEl0ZW0oKTtcbiAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgIHBvc3RSZWh5ZHJhdGlvbkNhbGxiYWNrID09IG51bGwgPyB2b2lkIDAgOiBwb3N0UmVoeWRyYXRpb25DYWxsYmFjayhzdGF0ZUZyb21TdG9yYWdlLCB2b2lkIDApO1xuICAgICAgaGFzSHlkcmF0ZWQgPSB0cnVlO1xuICAgICAgZmluaXNoSHlkcmF0aW9uTGlzdGVuZXJzLmZvckVhY2goKGNiKSA9PiBjYihzdGF0ZUZyb21TdG9yYWdlKSk7XG4gICAgfSkuY2F0Y2goKGUpID0+IHtcbiAgICAgIHBvc3RSZWh5ZHJhdGlvbkNhbGxiYWNrID09IG51bGwgPyB2b2lkIDAgOiBwb3N0UmVoeWRyYXRpb25DYWxsYmFjayh2b2lkIDAsIGUpO1xuICAgIH0pO1xuICB9O1xuICBhcGkucGVyc2lzdCA9IHtcbiAgICBzZXRPcHRpb25zOiAobmV3T3B0aW9ucykgPT4ge1xuICAgICAgb3B0aW9ucyA9IHtcbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgLi4ubmV3T3B0aW9uc1xuICAgICAgfTtcbiAgICAgIGlmIChuZXdPcHRpb25zLmdldFN0b3JhZ2UpIHtcbiAgICAgICAgc3RvcmFnZSA9IG5ld09wdGlvbnMuZ2V0U3RvcmFnZSgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgY2xlYXJTdG9yYWdlOiAoKSA9PiB7XG4gICAgICBzdG9yYWdlID09IG51bGwgPyB2b2lkIDAgOiBzdG9yYWdlLnJlbW92ZUl0ZW0ob3B0aW9ucy5uYW1lKTtcbiAgICB9LFxuICAgIGdldE9wdGlvbnM6ICgpID0+IG9wdGlvbnMsXG4gICAgcmVoeWRyYXRlOiAoKSA9PiBoeWRyYXRlKCksXG4gICAgaGFzSHlkcmF0ZWQ6ICgpID0+IGhhc0h5ZHJhdGVkLFxuICAgIG9uSHlkcmF0ZTogKGNiKSA9PiB7XG4gICAgICBoeWRyYXRpb25MaXN0ZW5lcnMuYWRkKGNiKTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGh5ZHJhdGlvbkxpc3RlbmVycy5kZWxldGUoY2IpO1xuICAgICAgfTtcbiAgICB9LFxuICAgIG9uRmluaXNoSHlkcmF0aW9uOiAoY2IpID0+IHtcbiAgICAgIGZpbmlzaEh5ZHJhdGlvbkxpc3RlbmVycy5hZGQoY2IpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgZmluaXNoSHlkcmF0aW9uTGlzdGVuZXJzLmRlbGV0ZShjYik7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgaHlkcmF0ZSgpO1xuICByZXR1cm4gc3RhdGVGcm9tU3RvcmFnZSB8fCBjb25maWdSZXN1bHQ7XG59O1xuY29uc3QgbmV3SW1wbCA9IChjb25maWcsIGJhc2VPcHRpb25zKSA9PiAoc2V0LCBnZXQsIGFwaSkgPT4ge1xuICBsZXQgb3B0aW9ucyA9IHtcbiAgICBzdG9yYWdlOiBjcmVhdGVKU09OU3RvcmFnZSgoKSA9PiBsb2NhbFN0b3JhZ2UpLFxuICAgIHBhcnRpYWxpemU6IChzdGF0ZSkgPT4gc3RhdGUsXG4gICAgdmVyc2lvbjogMCxcbiAgICBtZXJnZTogKHBlcnNpc3RlZFN0YXRlLCBjdXJyZW50U3RhdGUpID0+ICh7XG4gICAgICAuLi5jdXJyZW50U3RhdGUsXG4gICAgICAuLi5wZXJzaXN0ZWRTdGF0ZVxuICAgIH0pLFxuICAgIC4uLmJhc2VPcHRpb25zXG4gIH07XG4gIGxldCBoYXNIeWRyYXRlZCA9IGZhbHNlO1xuICBjb25zdCBoeWRyYXRpb25MaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICBjb25zdCBmaW5pc2hIeWRyYXRpb25MaXN0ZW5lcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpO1xuICBsZXQgc3RvcmFnZSA9IG9wdGlvbnMuc3RvcmFnZTtcbiAgaWYgKCFzdG9yYWdlKSB7XG4gICAgcmV0dXJuIGNvbmZpZyhcbiAgICAgICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgW3p1c3RhbmQgcGVyc2lzdCBtaWRkbGV3YXJlXSBVbmFibGUgdG8gdXBkYXRlIGl0ZW0gJyR7b3B0aW9ucy5uYW1lfScsIHRoZSBnaXZlbiBzdG9yYWdlIGlzIGN1cnJlbnRseSB1bmF2YWlsYWJsZS5gXG4gICAgICAgICk7XG4gICAgICAgIHNldCguLi5hcmdzKTtcbiAgICAgIH0sXG4gICAgICBnZXQsXG4gICAgICBhcGlcbiAgICApO1xuICB9XG4gIGNvbnN0IHNldEl0ZW0gPSAoKSA9PiB7XG4gICAgY29uc3Qgc3RhdGUgPSBvcHRpb25zLnBhcnRpYWxpemUoeyAuLi5nZXQoKSB9KTtcbiAgICByZXR1cm4gc3RvcmFnZS5zZXRJdGVtKG9wdGlvbnMubmFtZSwge1xuICAgICAgc3RhdGUsXG4gICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb25cbiAgICB9KTtcbiAgfTtcbiAgY29uc3Qgc2F2ZWRTZXRTdGF0ZSA9IGFwaS5zZXRTdGF0ZTtcbiAgYXBpLnNldFN0YXRlID0gKHN0YXRlLCByZXBsYWNlKSA9PiB7XG4gICAgc2F2ZWRTZXRTdGF0ZShzdGF0ZSwgcmVwbGFjZSk7XG4gICAgdm9pZCBzZXRJdGVtKCk7XG4gIH07XG4gIGNvbnN0IGNvbmZpZ1Jlc3VsdCA9IGNvbmZpZyhcbiAgICAoLi4uYXJncykgPT4ge1xuICAgICAgc2V0KC4uLmFyZ3MpO1xuICAgICAgdm9pZCBzZXRJdGVtKCk7XG4gICAgfSxcbiAgICBnZXQsXG4gICAgYXBpXG4gICk7XG4gIGxldCBzdGF0ZUZyb21TdG9yYWdlO1xuICBjb25zdCBoeWRyYXRlID0gKCkgPT4ge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKCFzdG9yYWdlKVxuICAgICAgcmV0dXJuO1xuICAgIGhhc0h5ZHJhdGVkID0gZmFsc2U7XG4gICAgaHlkcmF0aW9uTGlzdGVuZXJzLmZvckVhY2goKGNiKSA9PiB7XG4gICAgICB2YXIgX2EyO1xuICAgICAgcmV0dXJuIGNiKChfYTIgPSBnZXQoKSkgIT0gbnVsbCA/IF9hMiA6IGNvbmZpZ1Jlc3VsdCk7XG4gICAgfSk7XG4gICAgY29uc3QgcG9zdFJlaHlkcmF0aW9uQ2FsbGJhY2sgPSAoKF9iID0gb3B0aW9ucy5vblJlaHlkcmF0ZVN0b3JhZ2UpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKG9wdGlvbnMsIChfYSA9IGdldCgpKSAhPSBudWxsID8gX2EgOiBjb25maWdSZXN1bHQpKSB8fCB2b2lkIDA7XG4gICAgcmV0dXJuIHRvVGhlbmFibGUoc3RvcmFnZS5nZXRJdGVtLmJpbmQoc3RvcmFnZSkpKG9wdGlvbnMubmFtZSkudGhlbigoZGVzZXJpYWxpemVkU3RvcmFnZVZhbHVlKSA9PiB7XG4gICAgICBpZiAoZGVzZXJpYWxpemVkU3RvcmFnZVZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGVzZXJpYWxpemVkU3RvcmFnZVZhbHVlLnZlcnNpb24gPT09IFwibnVtYmVyXCIgJiYgZGVzZXJpYWxpemVkU3RvcmFnZVZhbHVlLnZlcnNpb24gIT09IG9wdGlvbnMudmVyc2lvbikge1xuICAgICAgICAgIGlmIChvcHRpb25zLm1pZ3JhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLm1pZ3JhdGUoXG4gICAgICAgICAgICAgIGRlc2VyaWFsaXplZFN0b3JhZ2VWYWx1ZS5zdGF0ZSxcbiAgICAgICAgICAgICAgZGVzZXJpYWxpemVkU3RvcmFnZVZhbHVlLnZlcnNpb25cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgU3RhdGUgbG9hZGVkIGZyb20gc3RvcmFnZSBjb3VsZG4ndCBiZSBtaWdyYXRlZCBzaW5jZSBubyBtaWdyYXRlIGZ1bmN0aW9uIHdhcyBwcm92aWRlZGBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBkZXNlcmlhbGl6ZWRTdG9yYWdlVmFsdWUuc3RhdGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KS50aGVuKChtaWdyYXRlZFN0YXRlKSA9PiB7XG4gICAgICB2YXIgX2EyO1xuICAgICAgc3RhdGVGcm9tU3RvcmFnZSA9IG9wdGlvbnMubWVyZ2UoXG4gICAgICAgIG1pZ3JhdGVkU3RhdGUsXG4gICAgICAgIChfYTIgPSBnZXQoKSkgIT0gbnVsbCA/IF9hMiA6IGNvbmZpZ1Jlc3VsdFxuICAgICAgKTtcbiAgICAgIHNldChzdGF0ZUZyb21TdG9yYWdlLCB0cnVlKTtcbiAgICAgIHJldHVybiBzZXRJdGVtKCk7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBwb3N0UmVoeWRyYXRpb25DYWxsYmFjayA9PSBudWxsID8gdm9pZCAwIDogcG9zdFJlaHlkcmF0aW9uQ2FsbGJhY2soc3RhdGVGcm9tU3RvcmFnZSwgdm9pZCAwKTtcbiAgICAgIHN0YXRlRnJvbVN0b3JhZ2UgPSBnZXQoKTtcbiAgICAgIGhhc0h5ZHJhdGVkID0gdHJ1ZTtcbiAgICAgIGZpbmlzaEh5ZHJhdGlvbkxpc3RlbmVycy5mb3JFYWNoKChjYikgPT4gY2Ioc3RhdGVGcm9tU3RvcmFnZSkpO1xuICAgIH0pLmNhdGNoKChlKSA9PiB7XG4gICAgICBwb3N0UmVoeWRyYXRpb25DYWxsYmFjayA9PSBudWxsID8gdm9pZCAwIDogcG9zdFJlaHlkcmF0aW9uQ2FsbGJhY2sodm9pZCAwLCBlKTtcbiAgICB9KTtcbiAgfTtcbiAgYXBpLnBlcnNpc3QgPSB7XG4gICAgc2V0T3B0aW9uczogKG5ld09wdGlvbnMpID0+IHtcbiAgICAgIG9wdGlvbnMgPSB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC4uLm5ld09wdGlvbnNcbiAgICAgIH07XG4gICAgICBpZiAobmV3T3B0aW9ucy5zdG9yYWdlKSB7XG4gICAgICAgIHN0b3JhZ2UgPSBuZXdPcHRpb25zLnN0b3JhZ2U7XG4gICAgICB9XG4gICAgfSxcbiAgICBjbGVhclN0b3JhZ2U6ICgpID0+IHtcbiAgICAgIHN0b3JhZ2UgPT0gbnVsbCA/IHZvaWQgMCA6IHN0b3JhZ2UucmVtb3ZlSXRlbShvcHRpb25zLm5hbWUpO1xuICAgIH0sXG4gICAgZ2V0T3B0aW9uczogKCkgPT4gb3B0aW9ucyxcbiAgICByZWh5ZHJhdGU6ICgpID0+IGh5ZHJhdGUoKSxcbiAgICBoYXNIeWRyYXRlZDogKCkgPT4gaGFzSHlkcmF0ZWQsXG4gICAgb25IeWRyYXRlOiAoY2IpID0+IHtcbiAgICAgIGh5ZHJhdGlvbkxpc3RlbmVycy5hZGQoY2IpO1xuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaHlkcmF0aW9uTGlzdGVuZXJzLmRlbGV0ZShjYik7XG4gICAgICB9O1xuICAgIH0sXG4gICAgb25GaW5pc2hIeWRyYXRpb246IChjYikgPT4ge1xuICAgICAgZmluaXNoSHlkcmF0aW9uTGlzdGVuZXJzLmFkZChjYik7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICBmaW5pc2hIeWRyYXRpb25MaXN0ZW5lcnMuZGVsZXRlKGNiKTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICBpZiAoIW9wdGlvbnMuc2tpcEh5ZHJhdGlvbikge1xuICAgIGh5ZHJhdGUoKTtcbiAgfVxuICByZXR1cm4gc3RhdGVGcm9tU3RvcmFnZSB8fCBjb25maWdSZXN1bHQ7XG59O1xuY29uc3QgcGVyc2lzdEltcGwgPSAoY29uZmlnLCBiYXNlT3B0aW9ucykgPT4ge1xuICBpZiAoXCJnZXRTdG9yYWdlXCIgaW4gYmFzZU9wdGlvbnMgfHwgXCJzZXJpYWxpemVcIiBpbiBiYXNlT3B0aW9ucyB8fCBcImRlc2VyaWFsaXplXCIgaW4gYmFzZU9wdGlvbnMpIHtcbiAgICBpZiAoKGltcG9ydC5tZXRhLmVudiAmJiBpbXBvcnQubWV0YS5lbnYuTU9ERSkgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIFwiW0RFUFJFQ0FURURdIGBnZXRTdG9yYWdlYCwgYHNlcmlhbGl6ZWAgYW5kIGBkZXNlcmlhbGl6ZWAgb3B0aW9ucyBhcmUgZGVwcmVjYXRlZC4gVXNlIGBzdG9yYWdlYCBvcHRpb24gaW5zdGVhZC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG9sZEltcGwoY29uZmlnLCBiYXNlT3B0aW9ucyk7XG4gIH1cbiAgcmV0dXJuIG5ld0ltcGwoY29uZmlnLCBiYXNlT3B0aW9ucyk7XG59O1xuY29uc3QgcGVyc2lzdCA9IHBlcnNpc3RJbXBsO1xuXG5leHBvcnQgeyBjb21iaW5lLCBjcmVhdGVKU09OU3RvcmFnZSwgZGV2dG9vbHMsIHBlcnNpc3QsIHJlZHV4LCBzdWJzY3JpYmVXaXRoU2VsZWN0b3IgfTtcbiJdLCJuYW1lcyI6WyJyZWR1eEltcGwiLCJyZWR1Y2VyIiwiaW5pdGlhbCIsInNldCIsIl9nZXQiLCJhcGkiLCJkaXNwYXRjaCIsImFjdGlvbiIsInN0YXRlIiwiZGlzcGF0Y2hGcm9tRGV2dG9vbHMiLCJhIiwicmVkdXgiLCJ0cmFja2VkQ29ubmVjdGlvbnMiLCJNYXAiLCJnZXRUcmFja2VkQ29ubmVjdGlvblN0YXRlIiwibmFtZSIsImdldCIsIk9iamVjdCIsImZyb21FbnRyaWVzIiwiZW50cmllcyIsInN0b3JlcyIsIm1hcCIsImtleSIsImFwaTIiLCJnZXRTdGF0ZSIsImV4dHJhY3RDb25uZWN0aW9uSW5mb3JtYXRpb24iLCJzdG9yZSIsImV4dGVuc2lvbkNvbm5lY3RvciIsIm9wdGlvbnMiLCJ0eXBlIiwiY29ubmVjdGlvbiIsImNvbm5lY3QiLCJleGlzdGluZ0Nvbm5lY3Rpb24iLCJuZXdDb25uZWN0aW9uIiwiZGV2dG9vbHNJbXBsIiwiZm4iLCJkZXZ0b29sc09wdGlvbnMiLCJlbmFibGVkIiwiYW5vbnltb3VzQWN0aW9uVHlwZSIsImVudiIsIk1PREUiLCJ3aW5kb3ciLCJfX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9fIiwiZSIsImNvbnNvbGUiLCJ3YXJuIiwiY29ubmVjdGlvbkluZm9ybWF0aW9uIiwiaXNSZWNvcmRpbmciLCJzZXRTdGF0ZSIsInJlcGxhY2UiLCJuYW1lT3JBY3Rpb24iLCJyIiwic2VuZCIsInNldFN0YXRlRnJvbURldnRvb2xzIiwib3JpZ2luYWxJc1JlY29yZGluZyIsImluaXRpYWxTdGF0ZSIsImluaXQiLCJzdG9yZTIiLCJkaWRXYXJuQWJvdXRSZXNlcnZlZEFjdGlvblR5cGUiLCJvcmlnaW5hbERpc3BhdGNoIiwic3Vic2NyaWJlIiwibWVzc2FnZSIsIl9hIiwicGF5bG9hZCIsImVycm9yIiwicGFyc2VKc29uVGhlbiIsImtleXMiLCJsZW5ndGgiLCJzdGF0ZUZyb21EZXZ0b29scyIsIkpTT04iLCJzdHJpbmdpZnkiLCJuZXh0TGlmdGVkU3RhdGUiLCJsYXN0Q29tcHV0ZWRTdGF0ZSIsImNvbXB1dGVkU3RhdGVzIiwic2xpY2UiLCJkZXZ0b29scyIsInN0cmluZ2lmaWVkIiwiZiIsInBhcnNlZCIsInBhcnNlIiwic3Vic2NyaWJlV2l0aFNlbGVjdG9ySW1wbCIsIm9yaWdTdWJzY3JpYmUiLCJzZWxlY3RvciIsIm9wdExpc3RlbmVyIiwibGlzdGVuZXIiLCJlcXVhbGl0eUZuIiwiaXMiLCJjdXJyZW50U2xpY2UiLCJuZXh0U2xpY2UiLCJwcmV2aW91c1NsaWNlIiwiZmlyZUltbWVkaWF0ZWx5Iiwic3Vic2NyaWJlV2l0aFNlbGVjdG9yIiwiY29tYmluZSIsImNyZWF0ZSIsImFzc2lnbiIsImNyZWF0ZUpTT05TdG9yYWdlIiwiZ2V0U3RvcmFnZSIsInN0b3JhZ2UiLCJwZXJzaXN0U3RvcmFnZSIsImdldEl0ZW0iLCJzdHIyIiwicmV2aXZlciIsInN0ciIsIlByb21pc2UiLCJ0aGVuIiwic2V0SXRlbSIsIm5ld1ZhbHVlIiwicmVwbGFjZXIiLCJyZW1vdmVJdGVtIiwidG9UaGVuYWJsZSIsImlucHV0IiwicmVzdWx0Iiwib25GdWxmaWxsZWQiLCJjYXRjaCIsIl9vblJlamVjdGVkIiwiX29uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsIm9sZEltcGwiLCJjb25maWciLCJiYXNlT3B0aW9ucyIsImxvY2FsU3RvcmFnZSIsInNlcmlhbGl6ZSIsImRlc2VyaWFsaXplIiwicGFydGlhbGl6ZSIsInZlcnNpb24iLCJtZXJnZSIsInBlcnNpc3RlZFN0YXRlIiwiY3VycmVudFN0YXRlIiwiaGFzSHlkcmF0ZWQiLCJoeWRyYXRpb25MaXN0ZW5lcnMiLCJTZXQiLCJmaW5pc2hIeWRyYXRpb25MaXN0ZW5lcnMiLCJhcmdzIiwidGhlbmFibGVTZXJpYWxpemUiLCJlcnJvckluU3luYyIsInRoZW5hYmxlIiwic2VyaWFsaXplZFZhbHVlIiwic2F2ZWRTZXRTdGF0ZSIsImNvbmZpZ1Jlc3VsdCIsInN0YXRlRnJvbVN0b3JhZ2UiLCJoeWRyYXRlIiwiZm9yRWFjaCIsImNiIiwicG9zdFJlaHlkcmF0aW9uQ2FsbGJhY2siLCJvblJlaHlkcmF0ZVN0b3JhZ2UiLCJjYWxsIiwiYmluZCIsInN0b3JhZ2VWYWx1ZSIsImRlc2VyaWFsaXplZFN0b3JhZ2VWYWx1ZSIsIm1pZ3JhdGUiLCJtaWdyYXRlZFN0YXRlIiwiX2EyIiwicGVyc2lzdCIsInNldE9wdGlvbnMiLCJuZXdPcHRpb25zIiwiY2xlYXJTdG9yYWdlIiwiZ2V0T3B0aW9ucyIsInJlaHlkcmF0ZSIsIm9uSHlkcmF0ZSIsImFkZCIsImRlbGV0ZSIsIm9uRmluaXNoSHlkcmF0aW9uIiwibmV3SW1wbCIsIl9iIiwic2tpcEh5ZHJhdGlvbiIsInBlcnNpc3RJbXBsIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/zustand/esm/middleware.mjs\n");
/***/ }),
/***/ "(ssr)/./node_modules/zustand/esm/vanilla.mjs":
/*!**********************************************!*\
!*** ./node_modules/zustand/esm/vanilla.mjs ***!
\**********************************************/
/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ createStore: () => (/* binding */ createStore),\n/* harmony export */ \"default\": () => (/* binding */ vanilla)\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 : Object.assign({}, state, nextState);\n listeners.forEach((listener)=>listener(state, previousState));\n }\n };\n const getState = ()=>state;\n const subscribe = (listener)=>{\n listeners.add(listener);\n return ()=>listeners.delete(listener);\n };\n const destroy = ()=>{\n if (true) {\n console.warn(\"[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected.\");\n }\n listeners.clear();\n };\n const api = {\n setState,\n getState,\n subscribe,\n destroy\n };\n state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState)=>createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState)=>{\n if (true) {\n console.warn(\"[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.\");\n }\n return createStore(createState);\n};\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKHNzcikvLi9ub2RlX21vZHVsZXMvenVzdGFuZC9lc20vdmFuaWxsYS5tanMiLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxNQUFNQSxrQkFBa0IsQ0FBQ0M7SUFDdkIsSUFBSUM7SUFDSixNQUFNQyxZQUFZLGFBQWEsR0FBRyxJQUFJQztJQUN0QyxNQUFNQyxXQUFXLENBQUNDLFNBQVNDO1FBQ3pCLE1BQU1DLFlBQVksT0FBT0YsWUFBWSxhQUFhQSxRQUFRSixTQUFTSTtRQUNuRSxJQUFJLENBQUNHLE9BQU9DLEVBQUUsQ0FBQ0YsV0FBV04sUUFBUTtZQUNoQyxNQUFNUyxnQkFBZ0JUO1lBQ3RCQSxRQUFRLENBQUNLLFdBQVcsT0FBT0EsVUFBVSxPQUFPQyxjQUFjLFFBQU8sSUFBS0EsWUFBWUMsT0FBT0csTUFBTSxDQUFDLENBQUMsR0FBR1YsT0FBT007WUFDM0dMLFVBQVVVLE9BQU8sQ0FBQyxDQUFDQyxXQUFhQSxTQUFTWixPQUFPUztRQUNsRDtJQUNGO0lBQ0EsTUFBTUksV0FBVyxJQUFNYjtJQUN2QixNQUFNYyxZQUFZLENBQUNGO1FBQ2pCWCxVQUFVYyxHQUFHLENBQUNIO1FBQ2QsT0FBTyxJQUFNWCxVQUFVZSxNQUFNLENBQUNKO0lBQ2hDO0lBQ0EsTUFBTUssVUFBVTtRQUNkLElBQUksSUFBMEQsRUFBRTtZQUM5REcsUUFBUUMsSUFBSSxDQUNWO1FBRUo7UUFDQXBCLFVBQVVxQixLQUFLO0lBQ2pCO0lBQ0EsTUFBTUMsTUFBTTtRQUFFcEI7UUFBVVU7UUFBVUM7UUFBV0c7SUFBUTtJQUNyRGpCLFFBQVFELFlBQVlJLFVBQVVVLFVBQVVVO0lBQ3hDLE9BQU9BO0FBQ1Q7QUFDQSxNQUFNQyxjQUFjLENBQUN6QixjQUFnQkEsY0FBY0QsZ0JBQWdCQyxlQUFlRDtBQUNsRixJQUFJMkIsVUFBVSxDQUFDMUI7SUFDYixJQUFJLElBQTBELEVBQUU7UUFDOURxQixRQUFRQyxJQUFJLENBQ1Y7SUFFSjtJQUNBLE9BQU9HLFlBQVl6QjtBQUNyQjtBQUUyQyIsInNvdXJjZXMiOlsid2VicGFjazovL25leHRjaGF0Ly4vbm9kZV9tb2R1bGVzL3p1c3RhbmQvZXNtL3ZhbmlsbGEubWpzPzlkOWUiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgY3JlYXRlU3RvcmVJbXBsID0gKGNyZWF0ZVN0YXRlKSA9PiB7XG4gIGxldCBzdGF0ZTtcbiAgY29uc3QgbGlzdGVuZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTtcbiAgY29uc3Qgc2V0U3RhdGUgPSAocGFydGlhbCwgcmVwbGFjZSkgPT4ge1xuICAgIGNvbnN0IG5leHRTdGF0ZSA9IHR5cGVvZiBwYXJ0aWFsID09PSBcImZ1bmN0aW9uXCIgPyBwYXJ0aWFsKHN0YXRlKSA6IHBhcnRpYWw7XG4gICAgaWYgKCFPYmplY3QuaXMobmV4dFN0YXRlLCBzdGF0ZSkpIHtcbiAgICAgIGNvbnN0IHByZXZpb3VzU3RhdGUgPSBzdGF0ZTtcbiAgICAgIHN0YXRlID0gKHJlcGxhY2UgIT0gbnVsbCA/IHJlcGxhY2UgOiB0eXBlb2YgbmV4dFN0YXRlICE9PSBcIm9iamVjdFwiKSA/IG5leHRTdGF0ZSA6IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLCBuZXh0U3RhdGUpO1xuICAgICAgbGlzdGVuZXJzLmZvckVhY2goKGxpc3RlbmVyKSA9PiBsaXN0ZW5lcihzdGF0ZSwgcHJldmlvdXNTdGF0ZSkpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgZ2V0U3RhdGUgPSAoKSA9PiBzdGF0ZTtcbiAgY29uc3Qgc3Vic2NyaWJlID0gKGxpc3RlbmVyKSA9PiB7XG4gICAgbGlzdGVuZXJzLmFkZChsaXN0ZW5lcik7XG4gICAgcmV0dXJuICgpID0+IGxpc3RlbmVycy5kZWxldGUobGlzdGVuZXIpO1xuICB9O1xuICBjb25zdCBkZXN0cm95ID0gKCkgPT4ge1xuICAgIGlmICgoaW1wb3J0Lm1ldGEuZW52ICYmIGltcG9ydC5tZXRhLmVudi5NT0RFKSAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgXCJbREVQUkVDQVRFRF0gVGhlIGBkZXN0cm95YCBtZXRob2Qgd2lsbCBiZSB1bnN1cHBvcnRlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uLiBJbnN0ZWFkIHVzZSB1bnN1YnNjcmliZSBmdW5jdGlvbiByZXR1cm5lZCBieSBzdWJzY3JpYmUuIEV2ZXJ5dGhpbmcgd2lsbCBiZSBnYXJiYWdlLWNvbGxlY3RlZCBpZiBzdG9yZSBpcyBnYXJiYWdlLWNvbGxlY3RlZC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgbGlzdGVuZXJzLmNsZWFyKCk7XG4gIH07XG4gIGNvbnN0IGFwaSA9IHsgc2V0U3RhdGUsIGdldFN0YXRlLCBzdWJzY3JpYmUsIGRlc3Ryb3kgfTtcbiAgc3RhdGUgPSBjcmVhdGVTdGF0ZShzZXRTdGF0ZSwgZ2V0U3RhdGUsIGFwaSk7XG4gIHJldHVybiBhcGk7XG59O1xuY29uc3QgY3JlYXRlU3RvcmUgPSAoY3JlYXRlU3RhdGUpID0+IGNyZWF0ZVN0YXRlID8gY3JlYXRlU3RvcmVJbXBsKGNyZWF0ZVN0YXRlKSA6IGNyZWF0ZVN0b3JlSW1wbDtcbnZhciB2YW5pbGxhID0gKGNyZWF0ZVN0YXRlKSA9PiB7XG4gIGlmICgoaW1wb3J0Lm1ldGEuZW52ICYmIGltcG9ydC5tZXRhLmVudi5NT0RFKSAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBcIltERVBSRUNBVEVEXSBEZWZhdWx0IGV4cG9ydCBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkIHVzZSBpbXBvcnQgeyBjcmVhdGVTdG9yZSB9IGZyb20gJ3p1c3RhbmQvdmFuaWxsYScuXCJcbiAgICApO1xuICB9XG4gIHJldHVybiBjcmVhdGVTdG9yZShjcmVhdGVTdGF0ZSk7XG59O1xuXG5leHBvcnQgeyBjcmVhdGVTdG9yZSwgdmFuaWxsYSBhcyBkZWZhdWx0IH07XG4iXSwibmFtZXMiOlsiY3JlYXRlU3RvcmVJbXBsIiwiY3JlYXRlU3RhdGUiLCJzdGF0ZSIsImxpc3RlbmVycyIsIlNldCIsInNldFN0YXRlIiwicGFydGlhbCIsInJlcGxhY2UiLCJuZXh0U3RhdGUiLCJPYmplY3QiLCJpcyIsInByZXZpb3VzU3RhdGUiLCJhc3NpZ24iLCJmb3JFYWNoIiwibGlzdGVuZXIiLCJnZXRTdGF0ZSIsInN1YnNjcmliZSIsImFkZCIsImRlbGV0ZSIsImRlc3Ryb3kiLCJlbnYiLCJNT0RFIiwiY29uc29sZSIsIndhcm4iLCJjbGVhciIsImFwaSIsImNyZWF0ZVN0b3JlIiwidmFuaWxsYSIsImRlZmF1bHQiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///(ssr)/./node_modules/zustand/esm/vanilla.mjs\n");
/***/ })
};
;