@bounded-sh/core 0.0.72 → 0.0.74

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index-yT8ZfzrL.js","sources":["../.rollup-tmp/client/config.js","../node_modules/is-retry-allowed/index.js","../node_modules/axios-retry/dist/esm/index.js","../.rollup-tmp/utils/auth-api.js","../.rollup-tmp/utils/refresh-error.js","../.rollup-tmp/utils/session-binding.js","../.rollup-tmp/utils/session-events.js","../.rollup-tmp/utils/session-mutation.js","../.rollup-tmp/utils/web-session-manager.js","../.rollup-tmp/utils/rn-session-manager.js","../.rollup-tmp/utils/session-manager.js","../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../.rollup-tmp/utils/server-session-manager.js","../.rollup-tmp/utils/core-platform.js","../.rollup-tmp/utils/evm/evm-utils.js","../.rollup-tmp/utils/auth-token-freshness.js","../.rollup-tmp/utils/utils.js","../.rollup-tmp/client/decline.js","../.rollup-tmp/utils/api.js","../.rollup-tmp/client/subscription-v2.js","../.rollup-tmp/client/operations.js","../.rollup-tmp/client/reconcile.js","../.rollup-tmp/client/subscription.js","../.rollup-tmp/client/create-client.js","../.rollup-tmp/client/subscribe-query.js","../.rollup-tmp/client/field-values.js","../.rollup-tmp/time.js","../.rollup-tmp/utils/sol/sol-accessors.js","../.rollup-tmp/client/functions.js","../.rollup-tmp/client/live.js","../.rollup-tmp/client/live-effects.js"],"sourcesContent":["// The pristine default config. `clientConfig` (the module global) starts as a\n// copy of this and is mutated by init(); createClient() resolves fresh scoped\n// configs from this pristine template so a scoped instance never inherits a\n// prior init()'s state.\nexport const DEFAULT_CLIENT_CONFIG = {\n // User configured settings\n name: '',\n logoUrl: '',\n // Bounded production is the endpoint default. Apps still choose one explicit\n // auth method at init time. Pass `network: 'bounded-staging'` to target staging.\n network: 'bounded-production',\n wsApiUrl: 'wss://realtime.bounded.sh',\n apiUrl: 'https://realtime.bounded.sh',\n authApiUrl: 'https://wallet-auth.bounded.sh',\n humanAuthApiUrl: 'https://auth.bounded.sh',\n functionsUrl: 'https://functions.bounded.sh',\n devApiUrl: 'https://dev-api.bounded.sh',\n appId: '',\n // No hidden modal fallback: browser clients start hosted Bounded Auth with\n // loginWithRedirect/loginWithPopup. For crypto/onchain wallet login use\n // authMethod:'phantom' (Solana / Phantom), and use signInAnonymously() for\n // zero-friction guest accounts. ('wallet' and 'mobile-wallet-adapter' are\n // accepted spellings of the same lane and canonicalize to 'phantom'.)\n authMethod: 'none',\n chain: '',\n rpcUrl: '',\n skipBackendInit: true,\n authProvider: null,\n isServer: false,\n};\nexport let clientConfig = Object.assign({}, DEFAULT_CLIENT_CONFIG);\nlet isInitialized = false;\n// Callers awaiting getConfig() before init() completes. Resolved synchronously\n// by init() — the previous 50ms setInterval poll added up to 50ms of latency\n// to the first SDK operation after init for no reason.\nlet initWaiters = [];\nexport const BOUNDED_NETWORKS = {\n 'bounded-staging': {\n wsApiUrl: 'wss://realtime-staging.bounded.sh',\n apiUrl: 'https://realtime-staging.bounded.sh',\n authApiUrl: 'https://wallet-auth-staging.bounded.sh',\n humanAuthApiUrl: 'https://auth-staging.bounded.sh',\n functionsUrl: 'https://functions-staging.bounded.sh',\n devApiUrl: 'https://dev-api-staging.bounded.sh',\n },\n 'bounded-production': {\n // All on bounded.sh custom domains. authApiUrl = WALLET/SIWS issuer\n // (wallet + guest providers); humanAuthApiUrl = human email-OTP issuer\n // (the 'email' provider). realtime.bounded.sh fronts the realtime worker.\n wsApiUrl: 'wss://realtime.bounded.sh',\n apiUrl: 'https://realtime.bounded.sh',\n authApiUrl: 'https://wallet-auth.bounded.sh',\n humanAuthApiUrl: 'https://auth.bounded.sh',\n functionsUrl: 'https://functions.bounded.sh',\n devApiUrl: 'https://dev-api.bounded.sh',\n },\n};\n// `network: 'bounded'` is an alias for the current GA target.\nBOUNDED_NETWORKS['bounded'] = BOUNDED_NETWORKS['bounded-production'];\n/**\n * The hosted `/.well-known/bounded-webhook-keys.json` URL for the configured\n * Bounded network, or `undefined` when no Bounded network is set. Used by\n * `verifyWebhook` so a staging receiver that did `init({ network:\n * 'bounded-staging' })` verifies against the STAGING signing keys instead of\n * the production default. Synchronous and non-blocking on purpose: a pure\n * webhook receiver may never call `init()`, so we read the already-applied\n * config rather than awaiting `getConfig()` (which blocks on initialization).\n * Returns `undefined` when the network is unknown so the caller keeps its\n * fail-closed production default (audit SDK LOW-7).\n */\nexport function getWebhookKeysUrl() {\n const net = clientConfig.network;\n const preset = net ? BOUNDED_NETWORKS[net] : undefined;\n const host = preset === null || preset === void 0 ? void 0 : preset.apiUrl;\n if (!host)\n return undefined;\n return host.replace(/\\/$/, '') + '/.well-known/bounded-webhook-keys.json';\n}\n/**\n * The app id configured via `init({ appId })`, or `undefined` when none has been set.\n * Synchronous + non-blocking on purpose (mirrors {@link getWebhookKeysUrl}): a pure webhook\n * receiver may never call `init()`, and `getConfig()` would block on initialization. Used by\n * `verifyWebhook` to bind a webhook to THIS app by default (#072) rather than trusting any\n * app's shared-key-signed delivery.\n */\nexport function getConfiguredAppId() {\n return clientConfig.appId || undefined;\n}\n/**\n * True when init() configured a Bounded network (the Cloudflare-native stack).\n * Synchronous + non-blocking. Used to route reads/writes that behave differently\n * on Bounded vs the legacy backend (e.g. `count`/`aggregate`, which on\n * Bounded must use the deterministic server aggregation, not the legacy AI query).\n */\nexport function isBoundedNetwork() {\n return isBoundedNetworkConfig(clientConfig);\n}\n/**\n * Config-scoped variant of {@link isBoundedNetwork}: reports whether a SPECIFIC\n * config (e.g. a scoped `createClient()` instance's) targets a Bounded network,\n * rather than the module global. Used so a scoped client routes count/aggregate\n * by its OWN network, not the global one.\n */\nexport function isBoundedNetworkConfig(config) {\n const net = config.network;\n return typeof net === 'string' && net in BOUNDED_NETWORKS;\n}\n/**\n * Merge a partial config over a base config, applying the Bounded endpoint\n * precedence rule used everywhere: defaults (or `base`) < network preset <\n * explicit fields. Pure - never touches module state. Shared by `init` (base =\n * the current global) and `createClient` (base = the pristine defaults) so both\n * resolve endpoints identically. Throws on an unsupported `network`.\n */\nexport function resolveClientConfig(base, newConfig) {\n if (newConfig.network !== undefined && !(newConfig.network in BOUNDED_NETWORKS)) {\n throw new Error(`Unsupported Bounded network \"${String(newConfig.network)}\". Expected bounded, bounded-staging, or bounded-production.`);\n }\n const preset = newConfig.network ? BOUNDED_NETWORKS[newConfig.network] : {};\n return Object.assign(Object.assign(Object.assign({}, base), preset), newConfig);\n}\nexport function init(newConfig) {\n return new Promise((resolve, reject) => {\n if (!newConfig.appId) {\n reject(new Error('No app ID provided.'));\n return;\n }\n // Bounded is client-driven: defaults are Bounded production, `network`\n // switches the whole endpoint set (e.g. 'bounded-staging'), and anything\n // passed explicitly wins. No `/config` round-trip; browser SDKs still pass\n // one explicit authMethod so there is no hidden auth-provider fallback.\n // defaults (bounded-production) < network preset < explicit newConfig\n let resolved;\n try {\n resolved = resolveClientConfig(clientConfig, newConfig);\n }\n catch (error) {\n reject(error instanceof Error ? error : new Error(String(error)));\n return;\n }\n clientConfig = resolved;\n isInitialized = true;\n const waiters = initWaiters;\n initWaiters = [];\n for (const wake of waiters)\n wake();\n resolve();\n });\n}\nfunction waitForInitialization() {\n if (isInitialized)\n return Promise.resolve();\n return new Promise((resolve) => { initWaiters.push(resolve); });\n}\nexport async function getConfig() {\n await waitForInitialization();\n return clientConfig;\n}\n","'use strict';\n\nconst denyList = new Set([\n\t'ENOTFOUND',\n\t'ENETUNREACH',\n\n\t// SSL errors from https://github.com/nodejs/node/blob/fc8e3e2cdc521978351de257030db0076d79e0ab/src/crypto/crypto_common.cc#L301-L328\n\t'UNABLE_TO_GET_ISSUER_CERT',\n\t'UNABLE_TO_GET_CRL',\n\t'UNABLE_TO_DECRYPT_CERT_SIGNATURE',\n\t'UNABLE_TO_DECRYPT_CRL_SIGNATURE',\n\t'UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY',\n\t'CERT_SIGNATURE_FAILURE',\n\t'CRL_SIGNATURE_FAILURE',\n\t'CERT_NOT_YET_VALID',\n\t'CERT_HAS_EXPIRED',\n\t'CRL_NOT_YET_VALID',\n\t'CRL_HAS_EXPIRED',\n\t'ERROR_IN_CERT_NOT_BEFORE_FIELD',\n\t'ERROR_IN_CERT_NOT_AFTER_FIELD',\n\t'ERROR_IN_CRL_LAST_UPDATE_FIELD',\n\t'ERROR_IN_CRL_NEXT_UPDATE_FIELD',\n\t'OUT_OF_MEM',\n\t'DEPTH_ZERO_SELF_SIGNED_CERT',\n\t'SELF_SIGNED_CERT_IN_CHAIN',\n\t'UNABLE_TO_GET_ISSUER_CERT_LOCALLY',\n\t'UNABLE_TO_VERIFY_LEAF_SIGNATURE',\n\t'CERT_CHAIN_TOO_LONG',\n\t'CERT_REVOKED',\n\t'INVALID_CA',\n\t'PATH_LENGTH_EXCEEDED',\n\t'INVALID_PURPOSE',\n\t'CERT_UNTRUSTED',\n\t'CERT_REJECTED',\n\t'HOSTNAME_MISMATCH'\n]);\n\n// TODO: Use `error?.code` when targeting Node.js 14\nmodule.exports = error => !denyList.has(error && error.code);\n","import isRetryAllowed from 'is-retry-allowed';\nexport const namespace = 'axios-retry';\nexport function isNetworkError(error) {\n const CODE_EXCLUDE_LIST = ['ERR_CANCELED', 'ECONNABORTED'];\n if (error.response) {\n return false;\n }\n if (!error.code) {\n return false;\n }\n // Prevents retrying timed out & cancelled requests\n if (CODE_EXCLUDE_LIST.includes(error.code)) {\n return false;\n }\n // Prevents retrying unsafe errors\n return isRetryAllowed(error);\n}\nconst SAFE_HTTP_METHODS = ['get', 'head', 'options'];\nconst IDEMPOTENT_HTTP_METHODS = SAFE_HTTP_METHODS.concat(['put', 'delete']);\nexport function isRetryableError(error) {\n return (error.code !== 'ECONNABORTED' &&\n (!error.response ||\n error.response.status === 429 ||\n (error.response.status >= 500 && error.response.status <= 599)));\n}\nexport function isSafeRequestError(error) {\n if (!error.config?.method) {\n // Cannot determine if the request can be retried\n return false;\n }\n return isRetryableError(error) && SAFE_HTTP_METHODS.indexOf(error.config.method) !== -1;\n}\nexport function isIdempotentRequestError(error) {\n if (!error.config?.method) {\n // Cannot determine if the request can be retried\n return false;\n }\n return isRetryableError(error) && IDEMPOTENT_HTTP_METHODS.indexOf(error.config.method) !== -1;\n}\nexport function isNetworkOrIdempotentRequestError(error) {\n return isNetworkError(error) || isIdempotentRequestError(error);\n}\nexport function retryAfter(error = undefined) {\n const retryAfterHeader = error?.response?.headers['retry-after'];\n if (!retryAfterHeader) {\n return 0;\n }\n // if the retry after header is a number, convert it to milliseconds\n let retryAfterMs = (Number(retryAfterHeader) || 0) * 1000;\n // If the retry after header is a date, get the number of milliseconds until that date\n if (retryAfterMs === 0) {\n retryAfterMs = (new Date(retryAfterHeader).valueOf() || 0) - Date.now();\n }\n return Math.max(0, retryAfterMs);\n}\nfunction noDelay(_retryNumber = 0, error = undefined) {\n return Math.max(0, retryAfter(error));\n}\nexport function exponentialDelay(retryNumber = 0, error = undefined, delayFactor = 100) {\n const calculatedDelay = 2 ** retryNumber * delayFactor;\n const delay = Math.max(calculatedDelay, retryAfter(error));\n const randomSum = delay * 0.2 * Math.random(); // 0-20% of the delay\n return delay + randomSum;\n}\n/**\n * Linear delay\n * @param {number | undefined} delayFactor - delay factor in milliseconds (default: 100)\n * @returns {function} (retryNumber: number, error: AxiosError | undefined) => number\n */\nexport function linearDelay(delayFactor = 100) {\n return (retryNumber = 0, error = undefined) => {\n const delay = retryNumber * delayFactor;\n return Math.max(delay, retryAfter(error));\n };\n}\nexport const DEFAULT_OPTIONS = {\n retries: 3,\n retryCondition: isNetworkOrIdempotentRequestError,\n retryDelay: noDelay,\n shouldResetTimeout: false,\n onRetry: () => { },\n onMaxRetryTimesExceeded: () => { },\n validateResponse: null\n};\nfunction getRequestOptions(config, defaultOptions) {\n return { ...DEFAULT_OPTIONS, ...defaultOptions, ...config[namespace] };\n}\nfunction setCurrentState(config, defaultOptions, resetLastRequestTime = false) {\n const currentState = getRequestOptions(config, defaultOptions || {});\n currentState.retryCount = currentState.retryCount || 0;\n if (!currentState.lastRequestTime || resetLastRequestTime) {\n currentState.lastRequestTime = Date.now();\n }\n config[namespace] = currentState;\n return currentState;\n}\nfunction fixConfig(axiosInstance, config) {\n // @ts-ignore\n if (axiosInstance.defaults.agent === config.agent) {\n // @ts-ignore\n delete config.agent;\n }\n if (axiosInstance.defaults.httpAgent === config.httpAgent) {\n delete config.httpAgent;\n }\n if (axiosInstance.defaults.httpsAgent === config.httpsAgent) {\n delete config.httpsAgent;\n }\n}\nasync function shouldRetry(currentState, error) {\n const { retries, retryCondition } = currentState;\n const shouldRetryOrPromise = (currentState.retryCount || 0) < retries && retryCondition(error);\n // This could be a promise\n if (typeof shouldRetryOrPromise === 'object') {\n try {\n const shouldRetryPromiseResult = await shouldRetryOrPromise;\n // keep return true unless shouldRetryPromiseResult return false for compatibility\n return shouldRetryPromiseResult !== false;\n }\n catch (_err) {\n return false;\n }\n }\n return shouldRetryOrPromise;\n}\nasync function handleRetry(axiosInstance, currentState, error, config) {\n currentState.retryCount += 1;\n const { retryDelay, shouldResetTimeout, onRetry } = currentState;\n const delay = retryDelay(currentState.retryCount, error);\n // Axios fails merging this configuration to the default configuration because it has an issue\n // with circular structures: https://github.com/mzabriskie/axios/issues/370\n fixConfig(axiosInstance, config);\n if (!shouldResetTimeout && config.timeout && currentState.lastRequestTime) {\n const lastRequestDuration = Date.now() - currentState.lastRequestTime;\n const timeout = config.timeout - lastRequestDuration - delay;\n if (timeout <= 0) {\n return Promise.reject(error);\n }\n config.timeout = timeout;\n }\n config.transformRequest = [(data) => data];\n await onRetry(currentState.retryCount, error, config);\n if (config.signal?.aborted) {\n return Promise.resolve(axiosInstance(config));\n }\n return new Promise((resolve) => {\n const abortListener = () => {\n clearTimeout(timeout);\n resolve(axiosInstance(config));\n };\n const timeout = setTimeout(() => {\n resolve(axiosInstance(config));\n if (config.signal?.removeEventListener) {\n config.signal.removeEventListener('abort', abortListener);\n }\n }, delay);\n if (config.signal?.addEventListener) {\n config.signal.addEventListener('abort', abortListener, { once: true });\n }\n });\n}\nasync function handleMaxRetryTimesExceeded(currentState, error) {\n if (currentState.retryCount >= currentState.retries)\n await currentState.onMaxRetryTimesExceeded(error, currentState.retryCount);\n}\nconst axiosRetry = (axiosInstance, defaultOptions) => {\n const requestInterceptorId = axiosInstance.interceptors.request.use((config) => {\n setCurrentState(config, defaultOptions, true);\n if (config[namespace]?.validateResponse) {\n // by setting this, all HTTP responses will be go through the error interceptor first\n config.validateStatus = () => false;\n }\n return config;\n });\n const responseInterceptorId = axiosInstance.interceptors.response.use(null, async (error) => {\n const { config } = error;\n // If we have no information to retry the request\n if (!config) {\n return Promise.reject(error);\n }\n const currentState = setCurrentState(config, defaultOptions);\n if (error.response && currentState.validateResponse?.(error.response)) {\n // no issue with response\n return error.response;\n }\n if (await shouldRetry(currentState, error)) {\n return handleRetry(axiosInstance, currentState, error, config);\n }\n await handleMaxRetryTimesExceeded(currentState, error);\n return Promise.reject(error);\n });\n return { requestInterceptorId, responseInterceptorId };\n};\n// Compatibility with CommonJS\naxiosRetry.isNetworkError = isNetworkError;\naxiosRetry.isSafeRequestError = isSafeRequestError;\naxiosRetry.isIdempotentRequestError = isIdempotentRequestError;\naxiosRetry.isNetworkOrIdempotentRequestError = isNetworkOrIdempotentRequestError;\naxiosRetry.exponentialDelay = exponentialDelay;\naxiosRetry.linearDelay = linearDelay;\naxiosRetry.isRetryableError = isRetryableError;\nexport default axiosRetry;\n","import axios from 'axios';\nimport { getConfig } from '../client/config';\n/**\n * Resolve the refresh/revoke base URL to a CONFIGURED issuer only. The session's\n * `issuer` is persisted in client storage; if that storage is tampered (e.g. XSS)\n * a raw value could redirect the refresh token to an attacker host. So we accept the\n * stored issuer only when it exactly matches a configured allowlisted issuer\n * (authApiUrl / humanAuthApiUrl); otherwise we fall back to authApiUrl. The refresh\n * token is therefore never POSTed anywhere except a Bounded-configured origin.\n */\nfunction resolveIssuerBase(issuer, cfg) {\n const norm = (u) => (u || '').replace(/\\/$/, '');\n const allow = [norm(cfg.authApiUrl), norm(cfg.humanAuthApiUrl)].filter(Boolean);\n const want = norm(issuer);\n if (want && allow.includes(want))\n return want;\n return norm(cfg.authApiUrl);\n}\n// #062: key the auth client by its baseURL. The old single memoized client froze the FIRST\n// environment's authApiUrl, so after re-initializing the SDK to a different issuer (staging->\n// prod, or a custom issuer) the mint calls (/nonce, /auth/nonce, /session) kept hitting the\n// original address forever - a \"works only after a full reload\" login bug, and in a multi-tenant\n// process one config's address could leak into another's. refresh/revoke already resolve per\n// call via resolveIssuerBase; this makes minting do the same while still caching per URL.\nconst axiosClientsByUrl = new Map();\nasync function getAxiosAuthClient(baseURLOverride) {\n // A wallet client passes its snapshotted issuer so the mint never follows the\n // mutable global; the default path reads the current global config.\n const baseURL = baseURLOverride || (await getConfig()).authApiUrl || '';\n let client = axiosClientsByUrl.get(baseURL);\n if (!client) {\n client = axios.create({\n baseURL,\n headers: {\n 'Content-Type': 'application/json',\n },\n timeout: 30000, // 30s timeout, matching makeApiRequest\n });\n axiosClientsByUrl.set(baseURL, client);\n }\n return client;\n}\nexport async function genNonce() {\n const client = await getAxiosAuthClient();\n const response = await client.post('/nonce');\n return response.data;\n}\nexport async function genAuthNonce(sessionConfig) {\n // Bind the nonce to the snapshotted app+issuer when a wallet client supplies\n // one; otherwise resolve from the mutable global config (unchanged default).\n const config = sessionConfig !== null && sessionConfig !== void 0 ? sessionConfig : await getConfig();\n const client = await getAxiosAuthClient(config.authApiUrl);\n const appId = config.appId;\n const response = await client.post('/auth/nonce', {\n appId\n });\n return response.data.nonce;\n}\n// authMethods that the /session issuer treats as a Solana wallet-signature flow.\n// createSessionWithSignature ALWAYS exchanges an Ed25519 signature over the\n// canonical genSolanaMessage prompt (server keypair, Phantom, mobile wallet,\n// guest device key), so the method it reports must be a wallet method — never a\n// human-login method like 'email' (the SDK default). Both issuers reject a\n// signature carrying a non-wallet authMethod: the bounded-auth worker returns\n// 501 (\"email-OTP not yet enabled\") and the legacy session-management server\n// returns 400 (\"EVM/SIWE auth is no longer supported\"). See routes.ts /session.\n// Wallet/signature methods whose authMethod is forwarded verbatim to the /session\n// issuer. 'guest' is included so anonymous (device-keypair) logins arrive as\n// authMethod:\"guest\" — the issuer gates them on the app's anonymous opt-in and\n// stamps an is_anonymous claim. Without this a guest would be indistinguishable\n// from 'phantom' and couldn't be gated or flagged.\nconst SIGNATURE_AUTH_METHODS = new Set(['phantom', 'mobile-wallet-adapter', 'guest']);\n// DS2-0110: header a SERVER-SIDE caller (Node: the @bounded-sh/server keypair SDK, the CLI, an\n// agent) presents so the wallet issuer's origin gate admits its ORIGIN-LESS /session mint. A\n// non-browser client sends no Origin, and the issuer (AS-03) no longer treats a missing Origin as\n// \"server, allow\"; the origin-less path is reserved for callers that PROVE a server-client\n// credential via X-Bounded-Server-Auth, matched against the worker's SERVER_CLIENT_SECRET. We read\n// it from the SAME env var Bind injects on the worker side (BOUNDED_SERVER_CLIENT_SECRET). Guarded\n// for non-Node hosts - browsers never carry it and don't need it (they authenticate by Origin) -\n// mirroring genSolanaMessage's process guard. Absent/empty => no header => the browser path is\n// unchanged.\nfunction serverAuthHeaders() {\n var _a;\n const secret = (typeof process !== 'undefined' && ((_a = process.env) === null || _a === void 0 ? void 0 : _a.BOUNDED_SERVER_CLIENT_SECRET)) || '';\n return secret ? { 'X-Bounded-Server-Auth': secret } : {};\n}\n// Maps a client authMethod to the /session issuer's signature discriminator when\n// they differ. EVM WALLET LOGIN (config.authMethod 'evm-wallet') exchanges a SIWE\n// (EIP-4361 personal_sign, secp256k1) signature, which the bounded-auth issuer\n// routes on authMethod:\"siwe\" (index.ts /session → parseSiweMessage/recoverSiweSigner)\n// and mints under custom:evmWalletAddress. The EVM provider also passes 'siwe'\n// explicitly (authMethodOverride), so this map is the belt-and-suspenders path.\nconst SESSION_METHOD_ALIASES = { 'evm-wallet': 'siwe' };\n/**\n * Exchange a wallet signature for a Bounded session at the /session issuer.\n *\n * @param authMethodOverride the exact /session discriminator to send (e.g. 'siwe'\n * for the SIWE/EVM path). When omitted the method is derived from config: an\n * aliased method (evm-wallet → siwe) maps through SESSION_METHOD_ALIASES, a\n * Solana wallet/guest method passes through verbatim, and anything else\n * defaults to the canonical 'phantom' the issuer accepts for a signature.\n */\nexport async function createSessionWithSignature(address, message, signature, authMethodOverride, sessionConfig) {\n var _a, _b, _c;\n // Bind the /session mint to the snapshotted app+issuer when a wallet client\n // supplies one; otherwise resolve from the mutable global (unchanged default).\n const config = sessionConfig !== null && sessionConfig !== void 0 ? sessionConfig : await getConfig();\n const client = await getAxiosAuthClient(config.authApiUrl);\n const appId = config.appId;\n // Preserve a wallet authMethod when one is configured (so the backend records\n // the real method, e.g. mobile-wallet-adapter); otherwise default to the\n // canonical Solana wallet method 'phantom' that every /session issuer accepts\n // for a signature exchange. This is what makes the server SDK + guest device\n // keypair work under the email-default config.\n const authMethod = (_a = authMethodOverride !== null && authMethodOverride !== void 0 ? authMethodOverride : SESSION_METHOD_ALIASES[config.authMethod]) !== null && _a !== void 0 ? _a : (SIGNATURE_AUTH_METHODS.has(config.authMethod) ? config.authMethod : 'phantom');\n try {\n const response = await client.post('/session', {\n appId,\n address,\n message,\n signature,\n authMethod\n }, { headers: serverAuthHeaders() });\n return response.data;\n }\n catch (err) {\n // Surface the issuer's actionable message (e.g. \"Anonymous auth is not enabled for\n // this app. Add \\\"auth\\\": { \\\"anonymous\\\": true } to policy.json and redeploy.\")\n // instead of axios's generic \"Request failed with status code 403\".\n const d = (_b = err === null || err === void 0 ? void 0 : err.response) === null || _b === void 0 ? void 0 : _b.data;\n if (d && (d.message || d.error)) {\n const e = new Error(String(d.message || d.error));\n e.code = d.error;\n e.status = (_c = err === null || err === void 0 ? void 0 : err.response) === null || _c === void 0 ? void 0 : _c.status;\n e.hint = d.hint;\n throw e;\n }\n throw err;\n }\n}\n// Deduplicate concurrent refreshSession calls to prevent multiple code paths\n// (WebSocket reconnection, periodic refresh, API 401 retry) from all hitting\n// /session/refresh simultaneously.\n//\n// Keyed PER (issuer, token) in a Map, not one global slot (DS2-0373): the rotating\n// refresh token is single-use, so two concurrent refreshes of the SAME token must\n// share one in-flight request. A single global slot could hold only one token at a\n// time, so an interleaved refresh of a DIFFERENT session's token evicted the first\n// token's in-flight promise; a later second refresh of the first token then missed\n// its own in-flight request and re-POSTed the already-spent token - the issuer sees\n// reuse and revokes the whole family. Keying by token lets unrelated sessions\n// coalesce independently.\n// Note: module-level state is shared across requests in SSR/Node - acceptable since\n// each key is bound to a specific session's token (same pattern as api.ts).\nconst refreshInFlightByToken = new Map();\nexport async function refreshSession(refreshToken, issuer) {\n const dedupeKey = `${issuer || ''}::${refreshToken}`;\n const existing = refreshInFlightByToken.get(dedupeKey);\n if (existing)\n return existing;\n let currentFlight;\n currentFlight = (async () => {\n try {\n const config = await getConfig();\n const appId = config.appId;\n // Route to the issuer that MINTED this session (email/social ->\n // humanAuthApiUrl, wallet/guest -> authApiUrl), validated against the\n // configured allowlist so a tampered stored issuer can't exfiltrate the token.\n const base = resolveIssuerBase(issuer, config);\n const response = await axios.post(`${base}/session/refresh`, {\n refreshToken,\n appId\n }, { headers: { 'Content-Type': 'application/json' }, timeout: 30000 });\n return response.data;\n }\n finally {\n // Only remove our own entry, and only if it is still the active flight\n // for this token (a later refresh of the same token cannot have replaced\n // it while we were in flight, but this stays correct if that ever changes).\n if (refreshInFlightByToken.get(dedupeKey) === currentFlight) {\n refreshInFlightByToken.delete(dedupeKey);\n }\n }\n })();\n refreshInFlightByToken.set(dedupeKey, currentFlight);\n return currentFlight;\n}\nexport class SessionRevokeError extends Error {\n constructor(message, cause) {\n super(message);\n this.name = 'SessionRevokeError';\n this.cause = cause;\n }\n}\nfunction revokeFailureMessage(err) {\n var _a, _b;\n const status = (_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status;\n const statusText = (_b = err === null || err === void 0 ? void 0 : err.response) === null || _b === void 0 ? void 0 : _b.statusText;\n const suffix = typeof status === 'number'\n ? ` (HTTP ${status}${statusText ? ` ${statusText}` : ''})`\n : '';\n return `Failed to revoke refresh token server-side${suffix}. The refresh-token family may still be active.`;\n}\n/**\n * Revoke a session's refresh-token family server-side (logout). Routes to the\n * minting issuer and rejects if the revoke request fails.\n */\nexport async function revokeSession(refreshToken, issuer) {\n if (!refreshToken)\n return;\n try {\n const config = await getConfig();\n const base = resolveIssuerBase(issuer, config);\n await axios.post(`${base}/session/revoke`, {\n refreshToken,\n appId: config.appId,\n }, {\n headers: { 'Content-Type': 'application/json' },\n timeout: 15000,\n // Preserve the transport error for programmatic diagnostics while\n // ensuring AxiosError.toJSON() cannot serialize the live token body\n // into logs, telemetry, UI state, or crash reports.\n redact: ['data'],\n });\n }\n catch (err) {\n throw new SessionRevokeError(revokeFailureMessage(err), err);\n }\n}\nexport async function signSessionCreateMessage(_signMessageFunction) {\n}\n","// Classify a session-refresh failure as a DEFINITIVE rejection of the credential\n// vs a TRANSPORT failure (DS4-0054).\n//\n// The restore path refreshes an expired token at boot. The old code destroyed the\n// local session on ANY refresh failure, so a network blip - common on mobile -\n// signed the user out. Only a real HTTP rejection of the refresh token proves the\n// session is invalid; anything else is unknown, and the safe move is to RETAIN local\n// state and retry. Keeping a genuinely dead session locally is harmless: every\n// request still fails closed server-side, and the next refresh that reaches the\n// server clears it. Destroying a live session on a blip is user-visible damage.\n//\n// `/session/refresh` answers 401 (session_revoked / invalid_grant) when the token is\n// dead. 400 (bad request), 408/429 (transient), and 5xx are NOT proof the session is\n// invalid, and a network/DNS/timeout error carries no HTTP response at all.\n//\n// This is the single classifier for every refresh path: the per-request freshness\n// check (auth-token-freshness) and the boot-time restore paths (web + RN session\n// managers) all import it, so \"definitive\" means the same thing everywhere. It lives\n// in this leaf module to avoid an import cycle between those consumers.\nexport function isDefinitiveRejection(err) {\n var _a;\n const status = (_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status;\n return status === 401 || status === 403;\n}\n// How long past the id token's own `exp` a session may survive purely on\n// transport failures.\n//\n// \"Retain on a blip\" must not become \"retain forever\". A statusless failure is\n// unknown, so the first ones are absorbed - but a revoked session, or a gateway\n// that rewrites the issuer's 401 into a 502, would otherwise keep\n// isAuthenticated() reporting a signed-in user for as long as the device never\n// reaches the issuer again. One day covers an offline flight or a bad-network day\n// while making the retention finite: past it, an unrefreshable session is cleared\n// and the user is asked to sign in again.\nexport const TRANSPORT_RETENTION_GRACE_MS = 24 * 60 * 60 * 1000;\n/**\n * May a session whose refresh failed WITHOUT a definitive rejection be kept?\n *\n * `expSeconds` is the id token's `exp` claim. Fails closed: a missing or\n * non-numeric expiry is not a usable bound, so such a session is never retained.\n */\nexport function mayRetainAfterTransportFailure(expSeconds, now = Date.now()) {\n if (typeof expSeconds !== 'number' || !Number.isFinite(expSeconds))\n return false;\n return now <= expSeconds * 1000 + TRANSPORT_RETENTION_GRACE_MS;\n}\n","// Shared session-binding guard for the web + React Native session managers, so\n// the cross-principal refresh guard (#220 / #221) lives in ONE place and the two\n// managers can't drift apart. Base64url decoding differs by platform (browser\n// atob vs a configured decoder), so the caller passes its own decoder in.\n/**\n * Extract the `custom:walletAddress` claim from a JWT idToken. Returns undefined\n * when the token has no wallet claim or cannot be decoded.\n */\nexport function idTokenWalletAddress(idToken, decodeBase64Url) {\n try {\n const payloadB64 = idToken.split(\".\")[1];\n if (!payloadB64)\n return undefined;\n const wallet = JSON.parse(decodeBase64Url(payloadB64))[\"custom:walletAddress\"];\n return typeof wallet === \"string\" && wallet.length > 0 ? wallet : undefined;\n }\n catch (_a) {\n return undefined;\n }\n}\n/**\n * Whether a refreshed idToken may be grafted onto the CURRENTLY-stored session.\n *\n * A silent refresh started for user A can complete after storage was replaced\n * with user B (a login, guest→wallet upgrade, or a cross-tab login). Overwriting\n * B's tokens with A's — the app-id matches, so the old guard let it through —\n * installs a genuine-but-WRONG session: the UI shows B while the app authenticates\n * as A (#220 / #221). Refuse the write when the refreshed token binds to a\n * DIFFERENT wallet than the one currently stored. A tokenless/addressless session\n * (guest / opaque) preserves the prior behavior (returns true).\n */\nexport function refreshedTokenMayReplaceStored(newIdToken, storedAddress, decodeBase64Url) {\n const tokenWallet = idTokenWalletAddress(newIdToken, decodeBase64Url);\n if (!tokenWallet || !storedAddress)\n return true;\n return tokenWallet === storedAddress;\n}\n","/**\n * The one signal core sends upward when a stored session stops existing.\n *\n * `tarobase-core` cannot import `js-sdk` (that would be a cycle), and core has no\n * event bus, so a session dying inside a session manager used to be invisible to\n * the SDK: `setCurrentUser(null)` was only ever called by `logout()` and `init()`.\n * The result was a UI that kept showing a connected wallet long after the session\n * it was showing had been wiped, which is exactly what let a wallet-review UI\n * freeze a review against a wallet the server no longer knew about.\n *\n * `js-sdk` registers a handler at init; core fires it ONLY when storage was\n * actually cleared, never on a failed-but-preserved refresh. Firing on a\n * preserved session would log people out on a transient network blip.\n */\nlet handlers = [];\n/**\n * Register a listener for \"the stored session is gone\".\n * Returns an unsubscribe function.\n */\nexport function onSessionCleared(handler) {\n handlers.push(handler);\n return () => {\n handlers = handlers.filter((h) => h !== handler);\n };\n}\n/**\n * Announce that session storage was cleared.\n *\n * Call this ONLY after a removal actually happened. Handlers are best-effort: a\n * throwing listener must not turn a successful clear into a failed one, because\n * the storage mutation has already committed by this point.\n */\nexport function notifySessionCleared() {\n for (const handler of handlers) {\n try {\n handler();\n }\n catch (_a) {\n // A listener's failure cannot un-clear storage; keep notifying the rest.\n }\n }\n}\n/** Test seam: drop every registered handler. */\nexport function resetSessionClearedHandlers() {\n handlers = [];\n}\n","/**\n * The one protocol every session-storage mutation goes through.\n *\n * WHY THIS EXISTS\n *\n * `localStorage` is shared by every tab on an origin but offers no atomic\n * compare-and-set spanning a read and a write, and each tab is a separate JS\n * realm, so an in-memory guard cannot serialize them. The old code relied on\n * doing its read → check → write inside one synchronous turn, which is only\n * atomic *within* a realm.\n *\n * That is not a theoretical gap. `REFRESH_REUSE_GRACE_MS` on the issuer is 60s,\n * so two tabs presenting the same refresh token inside that window BOTH succeed\n * and BOTH receive the same successor refresh token — while each response mints\n * its own distinct idToken. Concurrent cross-tab commits are a designed-for\n * occurrence, not an edge case.\n *\n * Two failures follow from an unlocked read-then-write, and both are closed here:\n *\n * 1. Lost update / resurrection. Tab A reads, tab B logs in (or logs out), tab A\n * writes its stale blob back. B's login is silently replaced, or a logged-out\n * session comes back to life.\n * 2. Spurious \"the user changed\". Tab B's commit finds tab A's blob, which\n * matches neither B's snapshot nor B's own result because the idTokens\n * differ — even though it is the same user and the same login.\n *\n * THE CRITICAL SECTION IS THE COMMIT, NOT THE NETWORK CALL\n *\n * The lock covers read → compare → write only. The refresh POST happens outside\n * it: holding a cross-tab lock across a 30s network call would serialize every\n * tab behind the slowest one. This is safe because the snapshot captured before\n * the network call is used only for COMPARISON. What actually gets written is\n * decided against storage re-read inside the lock, so a login or logout that lands\n * during the network call is always observed.\n *\n * NO BEST-EFFORT FALLBACK\n *\n * A `localStorage` lease was considered and rejected: its own acquire sequence is\n * a non-atomic read-then-write across realms, and a backgrounded tab can be frozen\n * past any lease timeout and then resume and write. Both leave exactly the windows\n * this module exists to close, so a browser without Web Locks fails closed instead.\n * Absence of `navigator.locks` does NOT imply a single realm — such a browser still\n * has tabs. Single realm is determined by the absence of `localStorage`.\n */\nconst SESSION_LOCK_NAME = \"bounded_session_mutation\";\nexport const UNSUPPORTED_ENVIRONMENT_CODE = \"unsupported_environment\";\n/**\n * Thrown when authenticated session work is attempted in a browser that shares\n * `localStorage` across tabs but cannot serialize access to it. Reads and\n * anonymous requests are unaffected; only session mutation is refused.\n */\nexport class SessionEnvironmentError extends Error {\n constructor(message) {\n super(message);\n this.code = UNSUPPORTED_ENVIRONMENT_CODE;\n this.name = \"SessionEnvironmentError\";\n }\n}\n/**\n * True when nothing outside this realm can touch session storage.\n *\n * Keyed on `localStorage`, not on `window`: React Native defines `window` but\n * stores sessions through a per-process StorageAdapter, and Node/SSR has neither.\n * A browser is the only multi-realm case, and `localStorage` is what makes it one.\n */\nfunction isSingleRealm() {\n return typeof localStorage === \"undefined\";\n}\nfunction hasWebLocks() {\n var _a;\n return typeof navigator !== \"undefined\"\n && typeof ((_a = navigator.locks) === null || _a === void 0 ? void 0 : _a.request) === \"function\";\n}\n/**\n * Run `fn` with exclusive access to session storage across every tab on this origin.\n *\n * Single-realm runtimes execute directly. Browsers serialize through Web Locks.\n * A browser without Web Locks throws rather than running unserialized.\n */\nexport async function withSessionLock(fn) {\n if (isSingleRealm()) {\n return await fn();\n }\n if (!hasWebLocks()) {\n throw new SessionEnvironmentError(\"This browser cannot safely coordinate a Bounded session across tabs \" +\n \"(the Web Locks API is unavailable). Authenticated operations are disabled; \" +\n \"anonymous reads still work.\");\n }\n return await navigator.locks.request(SESSION_LOCK_NAME, { mode: \"exclusive\" }, async () => await fn());\n}\n/** Throws if this environment cannot safely mutate a session. Cheap pre-flight. */\nexport function assertSessionMutationSupported() {\n if (isSingleRealm() || hasWebLocks())\n return;\n throw new SessionEnvironmentError(\"This browser cannot safely coordinate a Bounded session across tabs \" +\n \"(the Web Locks API is unavailable). Authenticated operations are disabled; \" +\n \"anonymous reads still work.\");\n}\n/**\n * Opaque per-login identifier stamped into the stored session.\n *\n * Minted on every `storeSession` (login, guest upgrade, wallet switch) and\n * PRESERVED across refresh commits. That is the whole point: it is what makes\n * \"S1 refreshed into S1'\" provable and distinguishable from \"someone logged in\n * again\", which token equality and address equality both get wrong — token\n * equality rejects a valid post-refresh retry, and address equality accepts a\n * same-wallet re-login as if it were the same session.\n *\n * The issuer has a server-side `familyId` that would serve, but `/session/refresh`\n * does not return it, so this is client-side.\n */\nexport function mintSessionGeneration() {\n const c = typeof crypto !== \"undefined\" ? crypto : undefined;\n if (typeof (c === null || c === void 0 ? void 0 : c.randomUUID) === \"function\")\n return c.randomUUID();\n if (typeof (c === null || c === void 0 ? void 0 : c.getRandomValues) === \"function\") {\n const bytes = c.getRandomValues(new Uint8Array(16));\n return Array.from(bytes, (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n }\n // Last resort only; every runtime the SDK targets provides one of the above.\n return `g${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;\n}\n/**\n * Decide a commit against what storage ACTUALLY holds right now.\n *\n * Must be called inside `withSessionLock`, with `current` read inside that same\n * critical section — comparing against a value read before the network call is\n * exactly the race this exists to prevent.\n */\nexport function decideCommit(current, expected, next) {\n var _a;\n // Absence is SUPERSEDED, never \"free to write\". A logout that lands between a\n // refresh's read and its write must not be undone by that write. This is the\n // backstop that makes session resurrection impossible.\n if (!current)\n return \"superseded\";\n // A caller with no captured generation cannot prove lineage, so it must not\n // write. Reads mint a generation for legacy sessions before returning them, so\n // in practice this only catches a request that was in flight across that\n // upgrade. Fail closed: the caller retries and gets a provable session.\n if (expected.generation === null)\n return \"superseded\";\n // A different generation means a different LOGIN, which the address-based guard\n // cannot see when the same wallet signs in again.\n if (((_a = current.sessionGeneration) !== null && _a !== void 0 ? _a : null) !== expected.generation) {\n return \"superseded\";\n }\n if (current.idToken === next.idToken && current.refreshToken === next.refreshToken) {\n return \"already-equal\";\n }\n // Storage is exactly what this caller read before it went to the network, so\n // nothing has moved underneath and this write is the legitimate one.\n if (expected.idToken === undefined || current.idToken === expected.idToken) {\n return \"applied\";\n }\n // Same login, but storage has moved on: another caller's refresh of this same\n // session already landed. Theirs is the current truth — its rotated refresh\n // token is the live one — so defer rather than overwrite. Reporting a principal\n // change here would fail ordinary concurrent requests at expiry, which is the\n // common case, not a rare one.\n return \"same-generation-winner\";\n}\n","import { refreshSession } from \"./auth-api\";\nimport { isDefinitiveRejection, mayRetainAfterTransportFailure } from \"./refresh-error\";\nimport { getConfig } from \"../client/config\";\nimport { refreshedTokenMayReplaceStored } from \"./session-binding\";\nimport { notifySessionCleared } from \"./session-events\";\nimport { decideCommit, mintSessionGeneration, withSessionLock, } from \"./session-mutation\";\nexport class WebSessionManager {\n /** Raw read of the stored blob. Callers inside the lock use this, never a cached copy. */\n static readRaw() {\n if (typeof window === \"undefined\")\n return null;\n const raw = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n if (!raw)\n return null;\n try {\n return JSON.parse(raw);\n }\n catch (_a) {\n return null;\n }\n }\n static writeRaw(sessionObj) {\n localStorage.setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(sessionObj));\n }\n /**\n * Read the session, stamping a `sessionGeneration` if it predates them.\n *\n * Sessions written before generations existed have no lineage marker, so a\n * later refresh could not prove it descended from them. Minting on read\n * upgrades them in place; a request already in flight across that mint carries\n * no generation and fails closed at commit rather than writing unprovably.\n */\n static async readSessionWithGeneration() {\n const existing = this.readRaw();\n if (!existing)\n return null;\n if (existing.sessionGeneration)\n return existing;\n return await withSessionLock(() => {\n // Re-read inside the lock: another tab may have minted one already.\n const current = this.readRaw();\n if (!current)\n return null;\n if (current.sessionGeneration)\n return current;\n const upgraded = Object.assign(Object.assign({}, current), { sessionGeneration: mintSessionGeneration() });\n this.writeRaw(upgraded);\n return upgraded;\n });\n }\n /**\n * Decode a base64url-encoded string (used by JWT payloads).\n * Normalises base64url → standard base64 before calling browser atob().\n */\n static decodeBase64Url(input) {\n let b64 = input.replace(/-/g, '+').replace(/_/g, '/');\n const pad = b64.length % 4;\n if (pad === 2)\n b64 += '==';\n else if (pad === 3)\n b64 += '=';\n return atob(b64);\n }\n /* ------------------------------------------------------------------ */\n /* STORE */\n /* ------------------------------------------------------------------ */\n static async storeSession(address, accessToken, idToken, refreshToken, issuer) {\n var _a;\n if (typeof window === \"undefined\")\n return;\n // JWT-wallet binding: refuse to store a session whose idToken is bound\n // to a different wallet than `address`. Prevents races that would otherwise\n // leave localStorage with mismatched address/token state.\n try {\n const payloadB64 = idToken.split(\".\")[1];\n if (payloadB64) {\n const payload = JSON.parse(this.decodeBase64Url(payloadB64));\n const tokenWallet = payload[\"custom:walletAddress\"];\n if (tokenWallet && tokenWallet !== address) {\n throw new Error(`[WebSessionManager] Refusing to store session: address (${address}) does not match idToken custom:walletAddress (${tokenWallet})`);\n }\n if (!tokenWallet) {\n console.warn(\"[WebSessionManager] storeSession: idToken has no custom:walletAddress claim — writing without validation\");\n }\n }\n }\n catch (err) {\n if (typeof (err === null || err === void 0 ? void 0 : err.message) === \"string\" && err.message.includes(\"Refusing to store session\")) {\n throw err;\n }\n console.warn(\"[WebSessionManager] storeSession: failed to decode idToken for validation. reason:\", (_a = err === null || err === void 0 ? void 0 : err.name) !== null && _a !== void 0 ? _a : \"decode_failed\");\n }\n const config = await getConfig();\n const currentAppId = config.appId;\n // The auth issuer base that minted this session, so silent refresh POSTs to\n // the RIGHT /session/refresh. Email overrides with humanAuthApiUrl; all\n // wallet/guest/signature flows default to authApiUrl (the bounded-auth issuer).\n const sessionIssuer = (issuer || config.authApiUrl || \"\").replace(/\\/$/, \"\");\n // A login always starts a NEW generation. Refresh commits preserve it, so\n // \"same generation\" means \"same login\", which is what lets a post-refresh\n // retry be told apart from a re-login by the same wallet.\n await withSessionLock(() => {\n this.writeRaw(Object.assign({ address,\n accessToken,\n idToken,\n refreshToken, appId: currentAppId, sessionGeneration: mintSessionGeneration() }, (sessionIssuer ? { issuer: sessionIssuer } : {})));\n });\n }\n /* ------------------------------------------------------------------ */\n /* GET */\n /* ------------------------------------------------------------------ */\n static async getSession() {\n var _a;\n if (typeof window === \"undefined\")\n return null;\n const sessionObj = await this.readSessionWithGeneration();\n if (!sessionObj)\n return null;\n const generation = (_a = sessionObj.sessionGeneration) !== null && _a !== void 0 ? _a : null;\n /* ---------- validate app-id ---------- */\n const config = await getConfig();\n if (sessionObj.appId && sessionObj.appId !== config.appId) {\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n /* ---------- check JWT expiration ---------- */\n // Deliberately NO skew buffer here, unlike the per-request freshness helper.\n // This is the restore path: at boot a token already past `exp` is unusable\n // either way, so clearing it is honest. Preserving it would only make\n // isAuthenticated() lie about a session that cannot authenticate anything.\n try {\n // Check expiry on the ID TOKEN — it is ALWAYS a JWT. The OIDC access_token for\n // email/social (hosted) logins is an OPAQUE string (not a JWT), so decoding IT\n // here threw and the catch below wiped a perfectly valid session — breaking\n // hosted login. The idToken carries the canonical identity (@user.id) + exp.\n const { idToken } = sessionObj;\n const { exp } = JSON.parse(this.decodeBase64Url(idToken.split(\".\")[1]));\n // Treat a MISSING or non-numeric expiry as EXPIRED (fail closed). A bare\n // `Date.now() > exp * 1000` is NaN -> false when exp is absent/non-numeric,\n // so a forged or malformed token with no usable expiry would otherwise be\n // accepted as valid forever.\n const expired = typeof exp !== \"number\" || !Number.isFinite(exp) || Date.now() > exp * 1000;\n if (expired) {\n const { refreshToken } = sessionObj;\n // Expired token with no way to refresh — clear the stale session\n // (mirrors the refresh-failed branch below) so isAuthenticated()\n // does not stay true and every request does not 401 + retry forever.\n if (!refreshToken) {\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n let refreshed;\n try {\n refreshed = await refreshSession(refreshToken, sessionObj.issuer);\n }\n catch (refreshErr) {\n // DS4-0054: only a DEFINITIVE server rejection (401/403) proves the\n // refresh token is dead. A transport failure - offline, DNS, timeout,\n // 5xx - is unknown, not proof the session is invalid. Destroying local\n // state here signs the user out on a network blip (common on mobile),\n // so RETAIN it and return the existing session; the next request will\n // retry the refresh. The retention is BOUNDED by the token's own\n // expiry plus a grace window, so a revoked session - or an issuer 401\n // a gateway rewrote into a 5xx - cannot keep isAuthenticated() true\n // forever on a device that never reaches the issuer again.\n if (isDefinitiveRejection(refreshErr) || !mayRetainAfterTransportFailure(exp)) {\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n return { address: sessionObj.address, session: sessionObj };\n }\n if ((refreshed === null || refreshed === void 0 ? void 0 : refreshed.idToken) && (refreshed === null || refreshed === void 0 ? void 0 : refreshed.accessToken)) {\n const committed = await this.commitRefreshedTokens({ generation, idToken: sessionObj.idToken }, refreshed.idToken, refreshed.accessToken, \n // Persist the ROTATED refresh token — the old one is now\n // single-use spent; reusing it would revoke the family.\n refreshed.refreshToken);\n // Superseded means a login or logout landed while we were on the\n // network. Returning our own stale null here would sign the UI out\n // of a session that is now perfectly valid, because init() applies\n // whatever restoreSession() returns. Re-read once and report THAT.\n if (committed.outcome === \"superseded\") {\n const current = this.readRaw();\n if (!current)\n return null;\n return { address: current.address, session: current };\n }\n const newObj = committed.session;\n if (!newObj)\n return null;\n return { address: newObj.address, session: newObj };\n }\n // The server answered but issued no usable tokens - a definitive refusal,\n // not a transport failure - so clear the stale session to stop retry loops,\n // but only if it is still the session we set out to refresh.\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n }\n catch (err) {\n // Token decode or refresh failed — clear stale session to prevent retry loops\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n return { address: sessionObj.address, session: sessionObj };\n }\n /* ------------------------------------------------------------------ */\n /* CLEAR */\n /* ------------------------------------------------------------------ */\n /**\n * Remove the session unconditionally (logout, app-id mismatch, dead refresh).\n *\n * ASYNC AND LOCKED, and callers MUST await it. Two failure modes hang on this:\n *\n * - Removing outside the lock lets a refresh that read before the logout write\n * the session back afterwards, resurrecting a logged-out session.\n * - Not awaiting lets `logout()` return while the credential is still in\n * storage, so the very next request authenticates as the user who just left.\n */\n static async clearSession() {\n if (typeof window === \"undefined\")\n return;\n const removed = await withSessionLock(() => {\n if (localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY) === null)\n return false;\n localStorage.removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return true;\n });\n // Only announce a clear that actually happened, so a no-op cannot sign out\n // a UI that was already signed out.\n if (removed)\n notifySessionCleared();\n }\n /**\n * Remove the session only if it is still the one identified by `generation`.\n *\n * Used by every failure path that wants to drop a dead session without\n * trampling a newer login that landed while the failure was in flight.\n */\n static async clearSessionIfGeneration(generation) {\n if (typeof window === \"undefined\")\n return;\n const removed = await withSessionLock(() => {\n var _a;\n const current = this.readRaw();\n if (!current)\n return false;\n // No captured generation means no proof this is the session we meant to\n // drop. Leave it alone rather than risk removing a replacement.\n if (generation === null)\n return false;\n if (((_a = current.sessionGeneration) !== null && _a !== void 0 ? _a : null) !== generation)\n return false;\n localStorage.removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return true;\n });\n if (removed)\n notifySessionCleared();\n }\n /* ------------------------------------------------------------------ */\n /* IS-AUTH */\n /* ------------------------------------------------------------------ */\n static isAuthenticated() {\n // NOTE: this remains synchronous to stay backward compatible\n return !!localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n }\n /* ------------------------------------------------------------------ */\n /* TOKEN HELPERS */\n /* ------------------------------------------------------------------ */\n // These reads are DEFENSIVE (try/catch -> treat a corrupt blob as absent).\n // logout() reads the refresh token + issuer BEFORE the session is cleared; if a\n // corrupt (non-JSON) blob threw out of the read, logout would abort with the\n // credential still in storage while isAuthenticated() kept reporting true, so\n // sign-out could never complete. A corrupt blob is unusable either way, so\n // reporting \"no token\" lets the clear path proceed and finish the sign-out.\n static getIdToken() {\n if (typeof window === \"undefined\")\n return null;\n try {\n const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return session ? JSON.parse(session).idToken : null;\n }\n catch (_a) {\n return null;\n }\n }\n static getRefreshToken() {\n if (typeof window === \"undefined\")\n return null;\n try {\n const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return session ? JSON.parse(session).refreshToken : null;\n }\n catch (_a) {\n return null;\n }\n }\n /** The issuer base that minted this session (for routing silent refresh). */\n static getIssuer() {\n var _a;\n if (typeof window === \"undefined\")\n return null;\n try {\n const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return session ? ((_a = JSON.parse(session).issuer) !== null && _a !== void 0 ? _a : null) : null;\n }\n catch (_b) {\n return null;\n }\n }\n /* ------------------------------------------------------------------ */\n /* UPDATE TOKENS */\n /* ------------------------------------------------------------------ */\n /**\n * Commit refreshed tokens, bound to the session generation they were minted for.\n *\n * Returns WHICH of the four outcomes happened, and the session the caller must\n * actually use. The old version returned void and silently dropped a refused\n * write, so `getFreshAuthToken` handed back the refreshed token regardless — a\n * request could then execute as the previous user while storage and the UI had\n * already moved to a new one.\n *\n * Never hand back `idToken` directly: use `result.session`.\n */\n static async commitRefreshedTokens(expected, idToken, accessToken, refreshToken) {\n if (typeof window === \"undefined\")\n return { outcome: \"superseded\", session: null };\n // Resolve config BEFORE taking the lock: no awaits are allowed inside the\n // critical section, or another realm could interleave between read and write.\n const config = await getConfig();\n const result = await withSessionLock(() => {\n var _a;\n // Read INSIDE the lock. The snapshot the caller captured before its\n // network refresh is only a comparison key; what gets written is decided\n // against what storage holds right now.\n const current = this.readRaw();\n /* ---------- app-id guard ---------- */\n if ((current === null || current === void 0 ? void 0 : current.appId) && current.appId !== config.appId) {\n localStorage.removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return { outcome: \"superseded\", session: null, cleared: true };\n }\n const next = Object.assign(Object.assign(Object.assign({}, (current !== null && current !== void 0 ? current : {})), { idToken,\n accessToken }), (typeof refreshToken === \"string\" && refreshToken.length > 0\n ? { refreshToken }\n : {}));\n const outcome = decideCommit(current, expected, next);\n if (outcome === \"superseded\")\n return { outcome, session: null };\n // Another caller's refresh of this same login already landed. Theirs is\n // the truth; reporting a principal change here would fail every ordinary\n // concurrent request at expiry, which is the common case.\n if (outcome === \"same-generation-winner\")\n return { outcome, session: current };\n if (outcome === \"already-equal\")\n return { outcome, session: current };\n /* ---------- cross-principal guard (#221) ---------- */\n // Belt-and-braces alongside the generation check: refuse to graft a\n // refreshed token onto a DIFFERENT wallet's stored session. Generations\n // catch a same-wallet re-login, which this address check cannot.\n if (!refreshedTokenMayReplaceStored(idToken, current.address, (s) => this.decodeBase64Url(s))) {\n console.warn(\"[WebSessionManager] commitRefreshedTokens: refreshed token wallet does not match the stored session address — discarding stale refresh\");\n return { outcome: \"superseded\", session: null };\n }\n (_a = next.appId) !== null && _a !== void 0 ? _a : (next.appId = config.appId);\n this.writeRaw(next);\n return { outcome, session: next };\n });\n if (result.cleared)\n notifySessionCleared();\n return { outcome: result.outcome, session: result.session };\n }\n}\nWebSessionManager.BOUNDED_SESSION_STORAGE_KEY = \"bounded_session_storage\";\n","import { refreshSession } from \"./auth-api\";\nimport { isDefinitiveRejection, mayRetainAfterTransportFailure } from \"./refresh-error\";\nimport { getConfig } from \"../client/config\";\nimport { refreshedTokenMayReplaceStored } from \"./session-binding\";\nimport { notifySessionCleared } from \"./session-events\";\nimport { decideCommit, mintSessionGeneration, withSessionLock, } from \"./session-mutation\";\nlet _config = null;\nexport class ReactNativeSessionManager {\n /**\n * Must be called once before any other method.\n *\n * SECURITY: the persisted blob includes the long-lived refresh token, so the\n * `storage` adapter MUST encrypt at rest. The supported pattern is MMKV with an\n * `encryptionKey` held in the OS keystore (Keychain on iOS / Keystore on Android)\n * via react-native-keychain - NOT a keyless MMKV instance, and NEVER a hardcoded key.\n *\n * ```ts\n * import { ReactNativeSessionManager } from '@bounded-sh/core';\n * import { MMKV } from 'react-native-mmkv';\n * import * as Keychain from 'react-native-keychain';\n * import { decode } from 'base-64';\n *\n * // Fetch (or lazily mint) a random 256-bit key stored in the OS keystore.\n * // The keystore - not the app bundle - is the root of trust for the key.\n * async function getMmkvEncryptionKey(): Promise<string> {\n * const service = 'sh.bounded.session.mmkv';\n * const existing = await Keychain.getGenericPassword({ service });\n * if (existing) return existing.password;\n * const bytes = crypto.getRandomValues(new Uint8Array(32));\n * const key = [...bytes].map((b) => b.toString(16).padStart(2, '0')).join('');\n * await Keychain.setGenericPassword('bounded', key, { service });\n * return key;\n * }\n *\n * const encryptionKey = await getMmkvEncryptionKey();\n * const mmkv = new MMKV({ id: 'bounded-session', encryptionKey });\n * ReactNativeSessionManager.configure({\n * storage: {\n * getItem: (k) => mmkv.getString(k) ?? null,\n * setItem: (k, v) => mmkv.set(k, v),\n * removeItem: (k) => mmkv.delete(k),\n * },\n * atob: decode,\n * });\n * ```\n *\n * Unencrypted adapters (bare MMKV, AsyncStorage) are a credential-theft risk and\n * require an explicit opt-in - the manager cannot verify encryption for you:\n *\n * ```ts\n * // Development only: acknowledge that tokens are stored in plaintext.\n * ReactNativeSessionManager.configure({ storage, atob: decode, allowUnsafePlaintext: true });\n * ```\n */\n static configure(cfg) {\n if (cfg.allowUnsafePlaintext === true) {\n // The developer explicitly opted into a plaintext store. Make it loud so it is\n // never a silent production default. (We cannot detect plaintext for the\n // non-opted-in case, hence the required, documented acknowledgment flag.)\n console.warn(\"[ReactNativeSessionManager] configure(): allowUnsafePlaintext=true - the session \" +\n \"(including the long-lived refresh token) is being stored UNENCRYPTED. Use an \" +\n \"encrypted backend (MMKV with a Keychain-held encryptionKey / expo-secure-store) \" +\n \"before shipping; plaintext tokens are readable from a rooted device or a backup.\");\n }\n _config = cfg;\n }\n /**\n * Whether configure() has been called. This is the canonical \"are we on\n * React Native?\" signal used by getActiveSessionManager(): RN consumers MUST\n * call configure() at startup, while web/Node never do. Far more reliable\n * than sniffing `typeof window` (React Native defines a global `window`, so\n * that test misclassifies RN as web and routes session writes to a\n * non-existent localStorage).\n */\n static isConfigured() {\n return _config !== null;\n }\n static getStorage() {\n if (!_config) {\n throw new Error(\"ReactNativeSessionManager.configure() must be called before using session methods.\");\n }\n return _config.storage;\n }\n static decodeBase64(input) {\n if (!_config) {\n throw new Error(\"ReactNativeSessionManager.configure() must be called before using session methods.\");\n }\n return _config.atob(input);\n }\n /**\n * Decode a base64url-encoded string (used by JWT payloads).\n * Normalises base64url → standard base64 before decoding.\n */\n static decodeBase64Url(input) {\n let b64 = input.replace(/-/g, '+').replace(/_/g, '/');\n const pad = b64.length % 4;\n if (pad === 2)\n b64 += '==';\n else if (pad === 3)\n b64 += '=';\n return this.decodeBase64(b64);\n }\n /* ------------------------------------------------------------------ */\n /* STORE */\n /* ------------------------------------------------------------------ */\n static async storeSession(address, accessToken, idToken, refreshToken, issuer) {\n var _a;\n // JWT-wallet binding: refuse to store a session whose idToken is bound\n // to a different wallet than `address`. Prevents races that would otherwise\n // leave storage with mismatched address/token state.\n try {\n const payloadB64 = idToken.split(\".\")[1];\n if (payloadB64) {\n const payload = JSON.parse(this.decodeBase64Url(payloadB64));\n const tokenWallet = payload[\"custom:walletAddress\"];\n if (tokenWallet && tokenWallet !== address) {\n throw new Error(`[ReactNativeSessionManager] Refusing to store session: address (${address}) does not match idToken custom:walletAddress (${tokenWallet})`);\n }\n if (!tokenWallet) {\n console.warn(\"[ReactNativeSessionManager] storeSession: idToken has no custom:walletAddress claim — writing without validation\");\n }\n }\n }\n catch (err) {\n if (typeof (err === null || err === void 0 ? void 0 : err.message) === \"string\" && err.message.includes(\"Refusing to store session\")) {\n throw err;\n }\n console.warn(\"[ReactNativeSessionManager] storeSession: failed to decode idToken for validation. reason:\", (_a = err === null || err === void 0 ? void 0 : err.name) !== null && _a !== void 0 ? _a : \"decode_failed\");\n }\n const config = await getConfig();\n const currentAppId = config.appId;\n // Issuer base for silent refresh (email overrides w/ humanAuthApiUrl; wallet/\n // guest default to authApiUrl). See WebSessionManager for the rationale.\n const sessionIssuer = (issuer || config.authApiUrl || \"\").replace(/\\/$/, \"\");\n // A login always starts a NEW generation; refresh commits preserve it.\n // See WebSessionManager for why lineage cannot be inferred from tokens or\n // address. RN is single-realm, so the lock resolves to direct execution.\n await withSessionLock(() => {\n this.writeRaw(Object.assign({ address,\n accessToken,\n idToken,\n refreshToken, appId: currentAppId, sessionGeneration: mintSessionGeneration() }, (sessionIssuer ? { issuer: sessionIssuer } : {})));\n });\n }\n /** Raw read of the stored blob. Callers inside the lock use this, never a cached copy. */\n static readRaw() {\n try {\n const raw = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return raw ? JSON.parse(raw) : null;\n }\n catch (_a) {\n return null;\n }\n }\n static writeRaw(sessionObj) {\n this.getStorage().setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(sessionObj));\n }\n /** Mirror of WebSessionManager.readSessionWithGeneration. */\n static async readSessionWithGeneration() {\n const existing = this.readRaw();\n if (!existing)\n return null;\n if (existing.sessionGeneration)\n return existing;\n return await withSessionLock(() => {\n const current = this.readRaw();\n if (!current)\n return null;\n if (current.sessionGeneration)\n return current;\n const upgraded = Object.assign(Object.assign({}, current), { sessionGeneration: mintSessionGeneration() });\n this.writeRaw(upgraded);\n return upgraded;\n });\n }\n /* ------------------------------------------------------------------ */\n /* GET */\n /* ------------------------------------------------------------------ */\n static async getSession() {\n var _a;\n const sessionObj = await this.readSessionWithGeneration();\n if (!sessionObj)\n return null;\n const generation = (_a = sessionObj.sessionGeneration) !== null && _a !== void 0 ? _a : null;\n /* ---------- validate app-id ---------- */\n const config = await getConfig();\n if (sessionObj.appId && sessionObj.appId !== config.appId) {\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n /* ---------- check JWT expiration ---------- */\n // No skew buffer, deliberately: this is the restore path, and at boot a token\n // already past `exp` cannot authenticate anything. See WebSessionManager.\n try {\n // Expiry on the ID TOKEN (always a JWT). The OIDC access_token for email/social\n // logins is opaque, so decoding it threw → the catch wiped a valid session.\n const { idToken } = sessionObj;\n const { exp } = JSON.parse(this.decodeBase64Url(idToken.split(\".\")[1]));\n // Treat a MISSING or non-numeric expiry as EXPIRED (fail closed). A bare\n // `Date.now() > exp * 1000` is NaN -> false when exp is absent/non-numeric,\n // so a forged or malformed token with no usable expiry would otherwise be\n // accepted as valid forever.\n const expired = typeof exp !== \"number\" || !Number.isFinite(exp) || Date.now() > exp * 1000;\n if (expired) {\n const { refreshToken } = sessionObj;\n // Expired token with no way to refresh — clear the stale session\n // (mirrors the refresh-failed branch below) so isAuthenticated()\n // does not stay true and every request does not 401 + retry forever.\n if (!refreshToken) {\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n let refreshed;\n try {\n refreshed = await refreshSession(refreshToken, sessionObj.issuer);\n }\n catch (refreshErr) {\n // DS4-0054: only a DEFINITIVE server rejection (401/403) proves the\n // refresh token is dead. A transport failure - offline, DNS, timeout,\n // 5xx - is unknown, not proof the session is invalid. On mobile these\n // blips are common, so destroying local state here signs the user out\n // on a bad network. RETAIN it and return the existing session; the next\n // request retries the refresh. The retention is BOUNDED by the token's\n // own expiry plus a grace window, so a revoked session - or an issuer\n // 401 a gateway rewrote into a 5xx - cannot keep isAuthenticated() true\n // forever on a device that never reaches the issuer again.\n if (isDefinitiveRejection(refreshErr) || !mayRetainAfterTransportFailure(exp)) {\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n return { address: sessionObj.address, session: sessionObj };\n }\n if ((refreshed === null || refreshed === void 0 ? void 0 : refreshed.idToken) && (refreshed === null || refreshed === void 0 ? void 0 : refreshed.accessToken)) {\n const committed = await this.commitRefreshedTokens({ generation, idToken: sessionObj.idToken }, refreshed.idToken, refreshed.accessToken, refreshed.refreshToken);\n // Superseded means a login or logout landed mid-refresh. Returning\n // our stale null would sign the UI out of a session that is now\n // valid, since init() applies whatever restoreSession() returns.\n if (committed.outcome === \"superseded\") {\n const current = this.readRaw();\n if (!current)\n return null;\n return { address: current.address, session: current };\n }\n const newObj = committed.session;\n if (!newObj)\n return null;\n return { address: newObj.address, session: newObj };\n }\n // The server answered but issued no usable tokens - a definitive refusal,\n // not a transport failure - so clear the stale session to stop retry loops,\n // but only if it is still the session we set out to refresh.\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n }\n catch (err) {\n // Token decode or refresh failed — clear stale session to prevent retry loops\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n return { address: sessionObj.address, session: sessionObj };\n }\n /* ------------------------------------------------------------------ */\n /* CLEAR */\n /* ------------------------------------------------------------------ */\n /**\n * Remove the session unconditionally. Async and awaited for the same reason as\n * the web manager: a caller that does not await lets logout() return while the\n * credential is still readable.\n */\n static async clearSession() {\n const removed = await withSessionLock(() => {\n if (this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY) === null)\n return false;\n this.getStorage().removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return true;\n });\n if (removed)\n notifySessionCleared();\n }\n /** Remove only if the stored session is still the one identified by `generation`. */\n static async clearSessionIfGeneration(generation) {\n const removed = await withSessionLock(() => {\n var _a;\n const current = this.readRaw();\n if (!current)\n return false;\n if (generation === null)\n return false;\n if (((_a = current.sessionGeneration) !== null && _a !== void 0 ? _a : null) !== generation)\n return false;\n this.getStorage().removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return true;\n });\n if (removed)\n notifySessionCleared();\n }\n /* ------------------------------------------------------------------ */\n /* IS-AUTH */\n /* ------------------------------------------------------------------ */\n static isAuthenticated() {\n return !!this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n }\n /* ------------------------------------------------------------------ */\n /* TOKEN HELPERS */\n /* ------------------------------------------------------------------ */\n static getIdToken() {\n try {\n const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return session ? JSON.parse(session).idToken : null;\n }\n catch (_a) {\n return null;\n }\n }\n /** The issuer base that minted this session (for routing silent refresh). */\n static getIssuer() {\n var _a;\n try {\n const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return session ? ((_a = JSON.parse(session).issuer) !== null && _a !== void 0 ? _a : null) : null;\n }\n catch (_b) {\n return null;\n }\n }\n static getRefreshToken() {\n try {\n const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return session ? JSON.parse(session).refreshToken : null;\n }\n catch (_a) {\n return null;\n }\n }\n /* ------------------------------------------------------------------ */\n /* UPDATE TOKENS */\n /* ------------------------------------------------------------------ */\n /**\n * Commit refreshed tokens bound to the generation they were minted for.\n * Mirror of WebSessionManager.commitRefreshedTokens; see it for the rationale.\n */\n static async commitRefreshedTokens(expected, idToken, accessToken, refreshToken) {\n // Resolve config BEFORE the lock: no awaits inside the critical section.\n const config = await getConfig();\n const result = await withSessionLock(() => {\n var _a;\n const current = this.readRaw();\n /* ---------- app-id guard ---------- */\n if ((current === null || current === void 0 ? void 0 : current.appId) && current.appId !== config.appId) {\n this.getStorage().removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return { outcome: \"superseded\", session: null, cleared: true };\n }\n const next = Object.assign(Object.assign(Object.assign({}, (current !== null && current !== void 0 ? current : {})), { idToken,\n accessToken }), (typeof refreshToken === \"string\" && refreshToken.length > 0\n ? { refreshToken }\n : {}));\n const outcome = decideCommit(current, expected, next);\n if (outcome === \"superseded\")\n return { outcome, session: null };\n if (outcome === \"same-generation-winner\")\n return { outcome, session: current };\n if (outcome === \"already-equal\")\n return { outcome, session: current };\n /* ---------- cross-principal guard (#220) ---------- */\n if (!refreshedTokenMayReplaceStored(idToken, current.address, (s) => this.decodeBase64Url(s))) {\n console.warn(\"[ReactNativeSessionManager] commitRefreshedTokens: refreshed token wallet does not match the stored session address — discarding stale refresh\");\n return { outcome: \"superseded\", session: null };\n }\n (_a = next.appId) !== null && _a !== void 0 ? _a : (next.appId = config.appId);\n this.writeRaw(next);\n return { outcome, session: next };\n });\n if (result.cleared)\n notifySessionCleared();\n return { outcome: result.outcome, session: result.session };\n }\n}\nReactNativeSessionManager.BOUNDED_SESSION_STORAGE_KEY = \"bounded_session_storage\";\n","import { WebSessionManager } from './web-session-manager';\nimport { ReactNativeSessionManager } from './rn-session-manager';\n/**\n * Return the active CLIENT session manager for the current runtime.\n *\n * This is the single source of truth for \"which store holds the session token\"\n * and MUST be used everywhere the client reads/writes the session (login,\n * restore, logout, and — critically — the per-request auth-header path in\n * utils.ts). Previously this decision was made ad-hoc with\n * `typeof window !== 'undefined' ? WebSessionManager : ReactNativeSessionManager`,\n * which is wrong on React Native: RN defines a global `window`, so that test\n * picked WebSessionManager and then hit a non-existent `localStorage` — the\n * session was silently dropped (or threw), so every authenticated request 403'd.\n *\n * Decision rule: if a consumer configured the React Native session manager\n * (ReactNativeSessionManager.configure(), which RN apps call once at startup and\n * web/Node never do), we're on RN — use it. Otherwise use the localStorage-backed\n * WebSessionManager (which itself no-ops gracefully in Node/SSR where there is no\n * `window`). This changes ONLY React Native behavior; web and Node are unchanged.\n *\n * NOTE: this intentionally does NOT cover the SERVER (keypair) path — callers that\n * branch on `isServer` keep using ServerSessionManager and only fall through to\n * getActiveSessionManager() for the browser/RN client case.\n */\nexport function getActiveSessionManager() {\n return ReactNativeSessionManager.isConfigured()\n ? ReactNativeSessionManager\n : WebSessionManager;\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","import { Buffer } from 'buffer';\nimport nacl from \"tweetnacl\";\nimport { createSessionWithSignature, genAuthNonce } from \"./auth-api\";\nconst NO_AMBIENT_SERVER_SESSION = \"Server sessions are not process-global. Use createWalletClient({ keypair }) and call that wallet client's methods.\";\n/* A create that a concurrent clearSession()/setSession() invalidated must fail\n * closed rather than hand its stale, generation-mismatched session back to the\n * caller; the caller re-requests and gets a session for the current generation. */\nconst STALE_SESSION_CREATE = \"Server session create was superseded by a concurrent clearSession()/setSession(); retry to obtain a fresh session.\";\n/* ------------------------------------------------------------------ */\n/* SESSION MANAGER */\n/* ------------------------------------------------------------------ */\nexport class ServerSessionManager {\n constructor(keypair, sessionFactory, sessionConfig) {\n /* Private cache (lives for the life of the instance) */\n this.session = null;\n /* Coalesce concurrent getSession() calls into a single in-flight request */\n this.pendingSession = null;\n /* Monotonic generation, bumped on clear/set. An in-flight createSession() only\n * commits its result to the cache if the generation still matches the value it\n * captured when it started - so a clearSession()/setSession() that happens WHILE\n * a create is in flight deterministically wins, and the late result can't\n * silently re-install a session the caller just cleared/replaced (#259). */\n this.generation = 0;\n this.keypair = keypair !== null && keypair !== void 0 ? keypair : null;\n this.sessionFactory = sessionFactory !== null && sessionFactory !== void 0 ? sessionFactory : null;\n this.sessionConfig = sessionConfig !== null && sessionConfig !== void 0 ? sessionConfig : null;\n }\n /**\n * Create a session manager for a specific keypair.\n * Each instance has its own independent session cache.\n *\n * `sessionConfig` (optional) pins the app+issuer the keypair signs/mints\n * against, so re-signing after expiry never follows a later global init().\n */\n static forKeypair(keypair, sessionConfig) {\n return new ServerSessionManager(keypair, undefined, sessionConfig);\n }\n /**\n * Create an isolated server session manager for a non-Solana signer (currently\n * EVM/SIWE). The factory must perform the signature exchange and return the\n * canonical signer address with its tokens; no signer state becomes global.\n */\n static forSessionFactory(factory) {\n if (typeof factory !== 'function')\n throw new Error('A server session factory is required');\n return new ServerSessionManager(undefined, factory);\n }\n /* ---------------------------------------------- *\n * Session creation (instance method)\n * ---------------------------------------------- */\n async createSession() {\n var _a;\n if (this.sessionFactory) {\n const session = await this.sessionFactory();\n if (!session || typeof session.address !== 'string' || !session.address ||\n typeof session.idToken !== 'string' || !session.idToken ||\n typeof session.accessToken !== 'string' || !session.accessToken ||\n typeof session.refreshToken !== 'string' || !session.refreshToken) {\n throw new Error('Server signer session factory returned an invalid session');\n }\n return session;\n }\n if (!this.keypair) {\n throw new Error(NO_AMBIENT_SERVER_SESSION);\n }\n const kp = this.keypair;\n const address = kp.publicKey.toBase58();\n const sessionConfig = (_a = this.sessionConfig) !== null && _a !== void 0 ? _a : undefined;\n /* fetch nonce from auth API (bound to the snapshotted app+issuer) */\n const nonce = await genAuthNonce(sessionConfig);\n const { genSolanaMessage } = await import(\"./sol/solana-message\");\n const message = await genSolanaMessage(address, nonce, sessionConfig === null || sessionConfig === void 0 ? void 0 : sessionConfig.appId);\n /* sign the message */\n const sigBytes = nacl.sign.detached(new TextEncoder().encode(message), kp.secretKey);\n const signature = Buffer.from(sigBytes).toString(\"base64\");\n /* call auth API (bound to the snapshotted app+issuer) */\n const { accessToken, idToken, refreshToken, } = await createSessionWithSignature(address, message, signature, undefined, sessionConfig);\n return { address, accessToken, idToken, refreshToken };\n }\n /* ---------------------------------------------- *\n * GET (lazy-fetch)\n * ---------------------------------------------- */\n async getSession() {\n if (this.session !== null) {\n return this.session;\n }\n // If a session creation is already in-flight, reuse that promise\n // instead of firing a second concurrent request.\n if (this.pendingSession !== null) {\n return this.pendingSession;\n }\n const startedGeneration = this.generation;\n // Capture the composed promise so BOTH the cache commit and the in-flight\n // pointer reset can verify this create is still the active one. A\n // clearSession()/setSession() during the create may have started a NEWER\n // create that now owns `pendingSession`; neither the commit nor the reset may\n // touch state that no longer belongs to this create.\n const pending = this.createSession()\n .then((session) => {\n if (this.generation !== startedGeneration) {\n // A clear/set won the race while this create was in flight. Do NOT\n // cache the now-invalidated session and do NOT return it to the\n // caller - fail closed so the caller re-requests against the current\n // generation instead of using a stale token.\n throw new Error(STALE_SESSION_CREATE);\n }\n this.session = session;\n return session;\n })\n .finally(() => {\n // Release the in-flight pointer ONLY if it still refers to THIS create.\n // A concurrent clearSession() nulled it and a newer create may already\n // own it; clearing unconditionally would erase that create's coalescing\n // and force later callers to redo the nonce/signature/session mint.\n if (this.pendingSession === pending) {\n this.pendingSession = null;\n }\n });\n this.pendingSession = pending;\n return pending;\n }\n /* ---------------------------------------------- *\n * STORE (overwrites the cached value)\n * ---------------------------------------------- */\n setSession(session) {\n this.generation++;\n this.session = session;\n }\n /* ---------------------------------------------- *\n * CLEAR (e.g. after explicit logout)\n * ---------------------------------------------- */\n clearSession() {\n this.generation++;\n this.session = null;\n this.pendingSession = null;\n }\n /* ---------------------------------------------- *\n * QUICK helpers\n * ---------------------------------------------- */\n isAuthenticated() {\n return this.session !== null;\n }\n getIdToken() {\n var _a, _b;\n return (_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.idToken) !== null && _b !== void 0 ? _b : null;\n }\n getRefreshToken() {\n var _a, _b;\n return (_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.refreshToken) !== null && _b !== void 0 ? _b : null;\n }\n}\n/* The default singleton exists only so top-level server calls fail closed. */\nServerSessionManager.instance = new ServerSessionManager();\n","/**\n * Safe base64 helpers for bounded-core.\n *\n * Uses the global atob/btoa when available (browser, RN with polyfill),\n * falls back to the 'buffer' package (Node.js / SSR / RN without polyfill).\n *\n * These are used instead of bare `atob()`/`btoa()` so the core package\n * works in React Native without requiring the consumer to polyfill globals.\n *\n * Both directions are UTF-8-safe: bare btoa / Buffer('binary') are LATIN-1 and\n * throw (surrogate-pair emoji) or silently mangle (accents, CJK) any code point\n * > 0xFF, corrupting user text - e.g. an AI-query `prompt` - before it is sent.\n * safeBtoa base64s the UTF-8 bytes; safeAtob is its exact inverse, and the\n * realtime worker decodes the same bytes as UTF-8 (src/utf8-base64.ts). ASCII is\n * byte-identical either way, so JWT (decodeBase64Url) decoding is unaffected.\n */\nimport { Buffer } from 'buffer';\nexport function safeAtob(input) {\n if (typeof globalThis.atob === 'function') {\n const binary = globalThis.atob(input);\n const bytes = Uint8Array.from(binary, (c) => c.charCodeAt(0));\n return new TextDecoder().decode(bytes);\n }\n return Buffer.from(input, 'base64').toString('utf-8');\n}\nexport function safeBtoa(input) {\n const bytes = new TextEncoder().encode(input);\n if (typeof globalThis.btoa === 'function') {\n let binary = '';\n for (let i = 0; i < bytes.length; i++)\n binary += String.fromCharCode(bytes[i]);\n return globalThis.btoa(binary);\n }\n return Buffer.from(bytes).toString('base64');\n}\n/**\n * Decode a base64url-encoded string (used by JWT payloads).\n * Normalises base64url → standard base64 before decoding.\n */\nexport function decodeBase64Url(input) {\n let b64 = input.replace(/-/g, '+').replace(/_/g, '/');\n const pad = b64.length % 4;\n if (pad === 2)\n b64 += '==';\n else if (pad === 3)\n b64 += '=';\n return safeAtob(b64);\n}\n","// evm-utils.ts — the EVM twin of sol/sol-utils.ts's genSolanaMessage. It builds\n// the canonical EIP-4361 (Sign-In with Ethereum, SIWE) prompt the bounded-auth\n// issuer verifies, and normalizes EVM addresses to the single canonical form the\n// identity layer matches on.\n//\n// The SIWE message MUST match bounded-auth's parser byte-for-byte\n// (packages/cdk/cloudflare/bounded-auth/src/verify-siwe.ts → parseSiweMessage):\n// <domain> wants you to sign in with your Ethereum account:\n// <address>\n// <blank>\n// <statement>\n// <blank>\n// URI: <uri>\n// Version: 1\n// Chain ID: <chainId>\n// Nonce: <nonce>\n// Issued At: <ISO8601>\n// Expiration Time: <ISO8601>\n// Resources:\n// - bounded:app:<appId>\n//\n// Bindings the verifier enforces (so we produce them exactly): the address is\n// lowercased (identity match is case-sensitive, so lowercase-at-boundary is\n// mandatory), the single `bounded:app:<appId>` resource binds the signature to\n// THIS app (a signature for one app must not mint a session for another — the\n// SIWE analog of genSolanaMessage's `App ID:` line), and Expiration Time is\n// REQUIRED and must fall within the issuer's 10-minute max validity window.\n/** Default statement — kept identical to genSolanaMessage's for a consistent prompt. */\nconst DEFAULT_STATEMENT = 'Sign this message to authenticate with our application.';\n/** Match bounded-auth's MAX_AUTH_WINDOW_MS (10 min); we default to a 5-min window. */\nconst DEFAULT_VALIDITY_MS = 5 * 60 * 1000;\n/**\n * Build the canonical EIP-4361 SIWE message the bounded-auth issuer verifies.\n *\n * @param address the connected EVM account (lowercased into the prompt).\n * @param nonce single-use nonce from genAuthNonce().\n * @param appId the target app id (bound as the sole `bounded:app:<appId>` resource).\n * @param domain RFC-3986 authority of the requesting site (e.g. window.location.host).\n * @param uri the requesting URI; its origin is bound to the domain and actual browser Origin.\n */\nexport function genSiweMessage(address, nonce, appId, domain, uri, options = {}) {\n var _a, _b, _c, _d, _e;\n const addr = normalizeEvmAddress(address);\n if (!addr)\n throw new Error('SIWE address must be a 20-byte 0x-prefixed EVM address');\n const statement = (_a = options.statement) !== null && _a !== void 0 ? _a : DEFAULT_STATEMENT;\n const version = (_b = options.version) !== null && _b !== void 0 ? _b : '1';\n const chainId = (_c = options.chainId) !== null && _c !== void 0 ? _c : 1;\n if (statement !== DEFAULT_STATEMENT)\n throw new Error('SIWE statement must use the canonical Bounded authentication text');\n if (version !== '1')\n throw new Error('SIWE version must be 1');\n if (!Number.isSafeInteger(chainId) || chainId <= 0)\n throw new Error('SIWE chainId must be a positive safe integer');\n if (!/^[A-Za-z0-9]{8,}$/.test(nonce))\n throw new Error('SIWE nonce must be at least 8 alphanumeric characters');\n if (!appId || /[\\r\\n]/.test(appId))\n throw new Error('SIWE appId is required and must be single-line');\n if (!domain || domain !== domain.trim() || /[\\s/@?#\\\\]/.test(domain))\n throw new Error('SIWE domain must be an RFC-3986 authority');\n try {\n const parsedAuthority = new URL(`https://${domain}`);\n if (parsedAuthority.username || parsedAuthority.password || parsedAuthority.pathname !== '/' ||\n parsedAuthority.search || parsedAuthority.hash || parsedAuthority.host.toLowerCase() !== domain) {\n throw new Error('non-canonical authority');\n }\n }\n catch (_f) {\n throw new Error('SIWE domain must be a canonical lowercase RFC-3986 authority');\n }\n let parsedUri;\n try {\n parsedUri = new URL(uri);\n }\n catch (_g) {\n throw new Error('SIWE URI must be an absolute URL');\n }\n const local = parsedUri.hostname === 'localhost' || parsedUri.hostname === '127.0.0.1' || parsedUri.hostname === '[::1]';\n if (parsedUri.protocol !== 'https:' && !(local && parsedUri.protocol === 'http:')) {\n throw new Error('SIWE URI must use HTTPS (HTTP is allowed only for localhost)');\n }\n if (parsedUri.username || parsedUri.password || parsedUri.hash || parsedUri.host.toLowerCase() !== domain.toLowerCase()) {\n throw new Error('SIWE URI authority must match the SIWE domain');\n }\n const issuedAtDate = (_d = options.issuedAt) !== null && _d !== void 0 ? _d : new Date();\n const expirationDate = (_e = options.expirationTime) !== null && _e !== void 0 ? _e : new Date(issuedAtDate.getTime() + DEFAULT_VALIDITY_MS);\n if (!Number.isFinite(issuedAtDate.getTime()) || !Number.isFinite(expirationDate.getTime()) || expirationDate <= issuedAtDate) {\n throw new Error('SIWE validity window is invalid');\n }\n if (expirationDate.getTime() - issuedAtDate.getTime() > 10 * 60 * 1000) {\n throw new Error('SIWE validity window exceeds 10 minutes');\n }\n const issuedAt = issuedAtDate.toISOString();\n const expirationTime = expirationDate.toISOString();\n return (`${domain} wants you to sign in with your Ethereum account:\\n${addr}\\n\\n` +\n `${statement}\\n\\n` +\n `URI: ${parsedUri.toString()}\\n` +\n `Version: ${version}\\n` +\n `Chain ID: ${chainId}\\n` +\n `Nonce: ${nonce}\\n` +\n `Issued At: ${issuedAt}\\n` +\n `Expiration Time: ${expirationTime}\\n` +\n `Resources:\\n` +\n `- bounded:app:${appId}`);\n}\n/**\n * Lowercase an EVM address to the canonical identity form. EVM addresses are\n * case-insensitive on-chain but the identity layer (@user.evmAddress) matches\n * case-sensitively, so every boundary normalizes to lowercase. Does not validate\n * shape — use normalizeEvmAddress() when the input is untrusted.\n */\nexport function toLowerEvmAddress(address) {\n return address.trim().toLowerCase();\n}\n/**\n * Normalize an untrusted EVM address to canonical lowercase 0x-hex, or null when\n * it isn't a well-formed 20-byte hex address. Mirrors the realtime-worker's\n * normalizeEvmAddress (auth.ts) EXACTLY so a client-derived @user.evmAddress and\n * the server-authenticated one are byte-identical (fail-closed on malformed).\n */\nexport function normalizeEvmAddress(raw) {\n if (typeof raw !== 'string')\n return null;\n const v = raw.trim().toLowerCase();\n return /^0x[0-9a-f]{40}$/.test(v) ? v : null;\n}\n","/**\n * The one place a caller turns \"I need a credential\" into a usable token.\n *\n * Both transports go through this. The WebSocket path grew a good version of this\n * logic first; the HTTP path had none at all and simply sent whatever was in\n * storage, which is what let an expired token reach the server and come back as a\n * misleading policy denial.\n *\n * THE CONTRACT, which callers depend on:\n *\n * returns null -> there is no session. Send the request anonymously; public\n * reads must keep working for logged-out visitors.\n * returns token -> use exactly this token.\n * throws -> there IS a session and it is unusable. NEVER fall back to an\n * anonymous request, or the caller lands in policy as an\n * anonymous user and gets the same misleading 403 this whole\n * change exists to remove.\n *\n * Four corrections over the WebSocket original, each of which was a real defect:\n *\n * - No sticky module-global failure. The original latched any refresh failure\n * into `ambientAuthFailure` and rethrew it on every later call, so ONE\n * transient network blip disabled refresh until an unrelated auth-state\n * change reset it.\n * - \"Expiring soon\" and \"already expired\" are different. The original collapsed\n * both behind a 60s buffer, so a transient refresh failure threw away a token\n * that was still valid for another 59 seconds.\n * - A missing or non-numeric `exp` is unusable, not fresh. `payload.exp * 1000`\n * is NaN, and `now > NaN` is false, so such a token read as perfectly fresh.\n * - Storage is cleared only on a DEFINITIVE rejection, never on a transient one.\n */\nimport { getConfig } from '../client/config';\nimport { decodeBase64Url } from './core-platform';\nimport { refreshSession } from './auth-api';\nimport { isDefinitiveRejection } from './refresh-error';\nimport { getActiveSessionManager } from './session-manager';\nimport { ServerSessionManager } from './server-session-manager';\n/**\n * Stable machine code for \"there is a session and it cannot be used\".\n *\n * The VALUE is deliberately unchanged from when this lived in subscription-v2 as\n * `WS_AUTH_EXPIRED_CODE`: it is public surface that consumers branch on\n * (`e.code === 'auth_expired'`), so renaming it would break them for no gain. Only\n * the identifier lost its `WS_` prefix, now that HTTP raises it too.\n *\n * The realtime worker's 401 body uses `invalid_or_expired_session` for the same\n * condition on the wire; this is the client-side counterpart.\n */\nexport const AUTH_EXPIRED_CODE = 'auth_expired';\n/** The principal changed under a request that was already in flight. */\nexport const AUTH_CHANGED_CODE = 'auth_changed';\nexport function makeAuthExpiredError(message, status) {\n const err = new Error(`${AUTH_EXPIRED_CODE}: ${message}`);\n err.code = AUTH_EXPIRED_CODE;\n if (status !== undefined)\n err.status = status;\n return err;\n}\nexport function makeAuthChangedError(message) {\n const err = new Error(`${AUTH_CHANGED_CODE}: ${message}`);\n err.code = AUTH_CHANGED_CODE;\n return err;\n}\nexport function isAuthExpiredError(error) {\n const code = error === null || error === void 0 ? void 0 : error.code;\n return !!error && typeof error === 'object'\n && (code === AUTH_EXPIRED_CODE || code === AUTH_CHANGED_CODE);\n}\nexport function normalizeAuthExpiredError(error, fallbackMessage) {\n var _a, _b;\n if (isAuthExpiredError(error))\n return error;\n const status = (_b = (_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status) !== null && _b !== void 0 ? _b : error === null || error === void 0 ? void 0 : error.code;\n return makeAuthExpiredError(fallbackMessage, status);\n}\n/** Refresh this many ms before `exp`, so a token cannot die mid-flight. */\nexport const TOKEN_EXPIRY_SKEW_MS = 60000;\nexport function classifyToken(token, nowMs = Date.now()) {\n let exp;\n try {\n const payload = JSON.parse(decodeBase64Url(token.split('.')[1]));\n exp = payload === null || payload === void 0 ? void 0 : payload.exp;\n }\n catch (_a) {\n return 'unusable';\n }\n // A token with no numeric exp used to compare against NaN and read as fresh.\n if (typeof exp !== 'number' || !Number.isFinite(exp))\n return 'unusable';\n const expiresAtMs = exp * 1000;\n if (nowMs >= expiresAtMs)\n return 'expired';\n if (nowMs >= expiresAtMs - TOKEN_EXPIRY_SKEW_MS)\n return 'expiring-soon';\n return 'fresh';\n}\n/** Short, non-secret fingerprint used only to key the in-flight map. Never logged. */\nexport function tokenFingerprint(token) {\n let h = 5381;\n for (let i = 0; i < token.length; i++)\n h = ((h << 5) + h + token.charCodeAt(i)) >>> 0;\n return h.toString(16);\n}\n/**\n * In-flight refresh TRANSACTIONS, keyed by the session they act on.\n *\n * The issuer-level dedupe in `refreshSession` shares only the network response;\n * each caller then commits independently. With a generation check that means the\n * first commit wins and every other caller sees storage it does not recognise —\n * so a burst of ordinary requests at expiry would all fail as \"the user changed\".\n * Deduping the WHOLE snapshot -> refresh -> commit makes them share one outcome.\n *\n * Keyed by generation as well as app, so a caller that arrives after a re-login\n * starts its own transaction instead of joining a stale one.\n */\nconst refreshTransactions = new Map();\nfunction transactionKey(scope, appId, generation, refreshToken) {\n return `${scope}:${appId}:${generation !== null && generation !== void 0 ? generation : 'none'}:${tokenFingerprint(refreshToken)}`;\n}\nasync function readSessionParts(isServer) {\n var _a, _b, _c, _d, _e, _f;\n if (isServer) {\n const session = await ServerSessionManager.instance.getSession();\n return {\n idToken: (_a = session === null || session === void 0 ? void 0 : session.idToken) !== null && _a !== void 0 ? _a : null,\n refreshToken: (_b = session === null || session === void 0 ? void 0 : session.refreshToken) !== null && _b !== void 0 ? _b : null,\n issuer: undefined,\n generation: null,\n };\n }\n const mgr = getActiveSessionManager();\n const session = await mgr.readSessionWithGeneration();\n return {\n idToken: (_c = session === null || session === void 0 ? void 0 : session.idToken) !== null && _c !== void 0 ? _c : null,\n refreshToken: (_d = session === null || session === void 0 ? void 0 : session.refreshToken) !== null && _d !== void 0 ? _d : null,\n issuer: (_e = session === null || session === void 0 ? void 0 : session.issuer) !== null && _e !== void 0 ? _e : undefined,\n generation: (_f = session === null || session === void 0 ? void 0 : session.sessionGeneration) !== null && _f !== void 0 ? _f : null,\n };\n}\nasync function commit(isServer, expected, refreshed) {\n var _a, _b;\n if (isServer) {\n const mgr = ServerSessionManager.instance;\n const session = await mgr.getSession();\n if (!session)\n return { outcome: 'superseded', token: null };\n const next = Object.assign(Object.assign(Object.assign({}, session), { idToken: refreshed.idToken, accessToken: refreshed.accessToken }), (refreshed.refreshToken ? { refreshToken: refreshed.refreshToken } : {}));\n mgr.setSession(next);\n return { outcome: 'applied', token: next.idToken };\n }\n const result = await getActiveSessionManager().commitRefreshedTokens(expected, refreshed.idToken, refreshed.accessToken, refreshed.refreshToken);\n // NEVER return refreshed.idToken directly. When the commit is refused or lost,\n // that token was not stored, and using it would authenticate the request as\n // whoever the refresh was for rather than whoever the session now belongs to.\n return { outcome: result.outcome, token: (_b = (_a = result.session) === null || _a === void 0 ? void 0 : _a.idToken) !== null && _b !== void 0 ? _b : null };\n}\n/**\n * Get a token that is safe to send right now, refreshing if needed.\n *\n * `null` means anonymous is fine. A throw means there is a session that cannot be\n * used; the caller must surface it rather than downgrade to anonymous.\n */\nexport async function getFreshAuthToken(isServer = false, options = {}) {\n const { idToken, refreshToken, issuer, generation } = await readSessionParts(isServer);\n // No session at all: anonymous is legitimate.\n if (!idToken)\n return null;\n const force = options.force === true;\n const freshness = classifyToken(idToken);\n if (!force && freshness === 'fresh')\n return idToken;\n // Still valid for a little longer, so a failed refresh can fall back to it —\n // but never when forced, since the server has already refused this exact token.\n const stillUsable = !force && freshness === 'expiring-soon';\n if (!refreshToken) {\n if (stillUsable)\n return idToken;\n // Nothing can revive this session. Drop it so isAuthenticated() stops lying\n // and the UI is told, then fail loudly instead of going anonymous.\n await clearDeadSession(isServer, generation);\n throw makeAuthExpiredError('Authentication expired and no refresh token is available');\n }\n const config = await getConfig();\n const key = transactionKey(isServer ? 'server' : 'web', config.appId, generation, refreshToken);\n const existing = refreshTransactions.get(key);\n if (existing)\n return await existing;\n const transaction = (async () => {\n var _a, _b, _c;\n try {\n const refreshed = await refreshSession(refreshToken, issuer);\n if (!(refreshed === null || refreshed === void 0 ? void 0 : refreshed.idToken) || !(refreshed === null || refreshed === void 0 ? void 0 : refreshed.accessToken)) {\n throw makeAuthExpiredError('Authentication refresh returned an incomplete session');\n }\n const { outcome, token } = await commit(isServer, { generation, idToken }, refreshed);\n if (outcome === 'superseded') {\n // A login or logout landed while we were on the network. Refuse rather\n // than authenticate this request as the principal that just left.\n throw makeAuthChangedError('The signed-in account changed while this request was in flight');\n }\n // applied / already-equal / same-generation-winner are all successes: the\n // stored session is valid for this same login either way.\n if (!token) {\n throw makeAuthExpiredError('Authentication refresh produced no usable token');\n }\n return token;\n }\n catch (error) {\n if (isAuthExpiredError(error))\n throw error;\n // Log the STATUS only: the axios error carries config.data, which holds\n // the refresh token, and must never reach a console or log sink.\n const status = (_c = (_b = (_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status) !== null && _b !== void 0 ? _b : error === null || error === void 0 ? void 0 : error.code) !== null && _c !== void 0 ? _c : 'unknown';\n if (isDefinitiveRejection(error)) {\n // The issuer says this refresh token is dead. Drop the session.\n await clearDeadSession(isServer, generation);\n throw makeAuthExpiredError('Authentication expired and refresh was rejected', status);\n }\n // TRANSIENT: network blip, 5xx, timeout. Keep the session — it may well\n // work in a moment. If the access token is still inside its skew window\n // it is valid right now, so use it rather than failing the request.\n if (stillUsable)\n return idToken;\n throw makeAuthExpiredError('Authentication expired and refresh failed', status);\n }\n finally {\n refreshTransactions.delete(key);\n }\n })();\n refreshTransactions.set(key, transaction);\n return await transaction;\n}\nasync function clearDeadSession(isServer, generation) {\n if (isServer) {\n try {\n ServerSessionManager.instance.clearSession();\n }\n catch ( /* best effort */_a) { /* best effort */ }\n return;\n }\n try {\n // Conditional: never remove a session that a concurrent login already replaced.\n await getActiveSessionManager().clearSessionIfGeneration(generation);\n }\n catch ( /* a clear failure must not mask the auth error we are about to throw */_b) { /* a clear failure must not mask the auth error we are about to throw */ }\n}\n/** Test seam: drop any in-flight refresh transactions. */\nexport function resetRefreshTransactions() {\n refreshTransactions.clear();\n}\n","import { getConfig } from '../client/config';\nimport { getActiveSessionManager } from './session-manager';\nimport { ServerSessionManager } from './server-session-manager';\nimport { decodeBase64Url } from './core-platform';\nimport { normalizeEvmAddress } from './evm/evm-utils';\nimport { getFreshAuthToken } from './auth-token-freshness';\nexport async function getMessageStatement() {\n const config = await getConfig();\n return `Authenticating to Bounded App With ID ${config.appId}`;\n}\nasync function createBearerToken(isServer) {\n // Both branches go through the freshness helper now. The web branch used to read\n // localStorage synchronously and send whatever was there, so an expired token was\n // handed to the server on every request and only recovered from AFTER a 401 —\n // and until the worker started returning 401 for a rejected bearer, never.\n //\n // A throw here is deliberate and must propagate: it means a session exists but\n // cannot be used. Swallowing it and sending the request anonymously would put\n // the caller back in policy as an anonymous user, which is the original bug.\n const idToken = await getFreshAuthToken(isServer);\n if (!idToken) {\n return null;\n }\n return `Bearer ${idToken}`;\n}\nexport async function createAuthHeader(isServer) {\n const bearerToken = await createBearerToken(isServer);\n if (!bearerToken) {\n return null;\n }\n return {\n Authorization: bearerToken\n };\n}\nexport async function getUserInfo(isServer) {\n const idToken = await getIdToken(isServer);\n if (!idToken) {\n return null;\n }\n // Decode the JWT to get user info (base64url-safe)\n const payload = JSON.parse(decodeBase64Url(idToken.split('.')[1]));\n return payload;\n}\n;\n/**\n * Derive { id, address, email } from an idToken's claims.\n *\n * Mirrors the realtime-worker auth.ts identity resolution so the client-side\n * `user` object matches what the backend authenticates as:\n * - id = custom:userId only.\n * - address = custom:walletAddress only (a REAL wallet). NEVER falls back to the\n * identity: an opaque id is not a spendable onchain address. null for\n * email-only sessions.\n * - email = the token's `email` claim, lowercased to match the canonical form\n * policy equality compares against. null when absent (wallet/SIWS).\n *\n * Returns all-null when the token can't be decoded (caller treats as no identity).\n */\nexport function deriveUserIdentityFromIdToken(idToken) {\n const empty = { id: null, address: null, email: null, evmAddress: null };\n if (!idToken)\n return empty;\n try {\n const parts = idToken.split('.');\n if (parts.length < 2)\n return empty;\n const payload = JSON.parse(decodeBase64Url(parts[1]));\n const walletClaim = payload['custom:walletAddress'];\n const address = (typeof walletClaim === 'string' && walletClaim.length > 0)\n ? walletClaim\n : null;\n const userIdClaim = payload['custom:userId'];\n let id = (typeof userIdClaim === 'string' && userIdClaim.length > 0)\n ? userIdClaim\n : null;\n const emailClaim = payload['email'];\n const email = (typeof emailClaim === 'string' && emailClaim.length > 0)\n ? emailClaim.toLowerCase()\n : null;\n // EVM wallet — carried on the `custom:evmWalletAddress` claim (an EVM login\n // OMITS custom:walletAddress). Normalized to canonical lowercase 0x-hex the\n // SAME way the realtime-worker does, so the client @user.evmAddress and the\n // server-authenticated one are byte-identical (fail-closed on malformed).\n const evmAddress = normalizeEvmAddress(payload['custom:evmWalletAddress']);\n // A SIWE identity uses its EVM address as custom:userId. Normalize legacy\n // mixed-case tokens at this boundary too so the principal and\n // @user.evmAddress cannot diverge solely by hex casing. Opaque human-login\n // ids remain byte-for-byte unchanged even when they have a linked wallet.\n if (evmAddress && id && normalizeEvmAddress(id) === evmAddress)\n id = evmAddress;\n return { id, address, email, evmAddress };\n }\n catch (_a) {\n return empty;\n }\n}\nexport async function getIdToken(isServer) {\n if (isServer) {\n const sessionMgr = ServerSessionManager.instance;\n const session = await sessionMgr.getSession();\n return session === null || session === void 0 ? void 0 : session.idToken;\n }\n return getActiveSessionManager().getIdToken();\n}\nexport async function getRefreshToken(isServer) {\n if (isServer) {\n const sessionMgr = ServerSessionManager.instance;\n const session = await sessionMgr.getSession();\n return session === null || session === void 0 ? void 0 : session.refreshToken;\n }\n return getActiveSessionManager().getRefreshToken();\n}\n/** The auth issuer base that minted the active client session, so a refresh POSTs\n * to the right /session/refresh. Undefined on the server (keypair, no refresh). */\nexport function getSessionIssuer(isServer) {\n var _a;\n if (isServer)\n return undefined;\n return (_a = getActiveSessionManager().getIssuer()) !== null && _a !== void 0 ? _a : undefined;\n}\n/**\n * Read the active session's generation, minting one for a pre-generation session.\n *\n * The server manager is a single in-memory session per process, so it has no\n * cross-realm lineage problem and reports null.\n */\nexport async function getSessionGeneration(isServer = false) {\n var _a;\n if (isServer)\n return null;\n const session = await getActiveSessionManager().readSessionWithGeneration();\n return (_a = session === null || session === void 0 ? void 0 : session.sessionGeneration) !== null && _a !== void 0 ? _a : null;\n}\n/**\n * Commit refreshed tokens, bound to the generation they were minted for.\n *\n * Replaces the old void-returning `updateIdTokenAndAccessToken`. That version\n * silently dropped a write its cross-principal guard refused, so callers went on\n * to use a token that had NOT been stored — letting a request execute as the\n * previous user while storage and the UI already showed a new one. Callers must\n * branch on the outcome and use `session`, never the token they passed in.\n */\nexport async function commitRefreshedTokens(expected, idToken, accessToken, isServer = false, refreshToken) {\n if (isServer) {\n const sessionMgr = ServerSessionManager.instance;\n // Ensure we have a session to update; if missing, let lazy creation happen on next request.\n let session = null;\n try {\n session = await sessionMgr.getSession();\n }\n catch (_a) {\n return { outcome: \"superseded\", session: null };\n }\n if (!session) {\n return { outcome: \"superseded\", session: null };\n }\n const next = Object.assign(Object.assign(Object.assign({}, session), { idToken,\n accessToken }), (refreshToken ? { refreshToken } : {}));\n sessionMgr.setSession(next);\n return { outcome: \"applied\", session: next };\n }\n return await getActiveSessionManager().commitRefreshedTokens(expected, idToken, accessToken, refreshToken);\n}\n","// ---------------------------------------------------------------------------\n// decline.ts -- the structured \"declined write\" surface.\n//\n// When a data-plane write violates a proven policy rule or invariant, the\n// realtime backend rejects it: HTTP 403 { verdict:'declined', reason:'rule' }\n// or 409 { verdict:'declined', reason:'invariant', invariant } on the request\n// path, or a coded error frame over the room socket. This module turns those\n// rejections into a first-class, share-worthy decline:\n//\n// - `BoundedDeclineError` -- the thrown error. Keeps every legacy field apps\n// already catch (code/status/statusCode/requestId/...), and adds `.decline`\n// (the structured object below) plus a stable `.isBoundedDecline` flag.\n// - `deriveDecline(body, status)` -- normalizes a server rejection body into a\n// `BoundedDecline`, trusting a backend-sent `decline` object when present\n// and synthesizing a minimal one from legacy fields otherwise. Returns\n// `null` when the rejection is not a policy/invariant decline.\n// - `dispatchDeclineEvent(decline, appId?)` -- in a browser, fires the\n// `bounded:decline` CustomEvent the hosted widget listens to. Fire-and-\n// forget: guarded for non-browser/SSR, never throws, never delays the throw.\n// ---------------------------------------------------------------------------\nconst RULE_DEFAULT_MESSAGE = 'This write is not allowed by policy.';\nconst INVARIANT_DEFAULT_MESSAGE = 'This write would violate a proven invariant.';\n/** The window event the hosted widget listens to for rendering a decline card. */\nexport const DECLINE_EVENT_NAME = 'bounded:decline';\n/**\n * Normalize a server rejection body into a structured `BoundedDecline`, or\n * `null` when the rejection is not a policy/invariant decline.\n *\n * Prefers a backend-sent `decline` object verbatim; otherwise synthesizes a\n * minimal `{ verdict, reason, invariant?, message }` from the legacy envelope\n * (`verdict` / `reason` / `code` / `invariant`). Only strong signals count —\n * a bare 403/409 with no policy marker is left alone (returns `null`).\n */\nexport function deriveDecline(body, status) {\n if (!body || typeof body !== 'object')\n return null;\n // Trust a backend-sent structured decline verbatim.\n const provided = body.decline;\n if (provided && typeof provided === 'object' && provided.verdict === 'declined') {\n return provided;\n }\n const rawReason = body.reason;\n const code = body.code;\n const hasInvariant = body.invariant != null;\n let reason = rawReason === 'rule' || rawReason === 'invariant' ? rawReason : undefined;\n if (!reason) {\n if (code === 'invariant_violation' || hasInvariant)\n reason = 'invariant';\n else if (code === 'policy_denied')\n reason = 'rule';\n }\n const isDecline = body.verdict === 'declined' || reason === 'rule' || reason === 'invariant';\n if (!isDecline)\n return null;\n const resolvedReason = reason !== null && reason !== void 0 ? reason : (status === 409 ? 'invariant' : 'rule');\n const rawMessage = body.message;\n const message = typeof rawMessage === 'string' && rawMessage.length > 0\n ? rawMessage\n : resolvedReason === 'invariant'\n ? INVARIANT_DEFAULT_MESSAGE\n : RULE_DEFAULT_MESSAGE;\n const decline = { verdict: 'declined', reason: resolvedReason, message };\n if (hasInvariant)\n decline.invariant = body.invariant;\n if (typeof body.collection === 'string')\n decline.collection = body.collection;\n if (typeof body.op === 'string')\n decline.op = body.op;\n if (body.boundary && typeof body.boundary === 'object')\n decline.boundary = body.boundary;\n if (typeof body.provenAtDeploy === 'boolean')\n decline.provenAtDeploy = body.provenAtDeploy;\n return decline;\n}\n/**\n * In a browser, dispatch a `bounded:decline` CustomEvent for the surfaced\n * decline. Fire-and-forget: guarded for non-browser/SSR (no `window`/\n * `CustomEvent`), never throws, and never delays the rejection it accompanies.\n */\nexport function dispatchDeclineEvent(decline, appId) {\n try {\n if (typeof window === 'undefined')\n return;\n const Ctor = globalThis.CustomEvent;\n if (typeof Ctor !== 'function')\n return;\n const detail = Object.assign({}, decline);\n if (appId)\n detail.appId = appId;\n detail.at = Date.now();\n window.dispatchEvent(new Ctor(DECLINE_EVENT_NAME, { detail }));\n }\n catch (_a) {\n // Fire-and-forget: a widget/telemetry hiccup must never mask the decline.\n }\n}\n/**\n * A rejected write that violated a proven policy rule or invariant. Thrown by\n * the data-plane write paths (set/setMany/update/delete) in place of a bare\n * Error, and attached (as `.decline`) to live-intent rejections.\n *\n * Back-compatible: the full server envelope (code/status/statusCode/requestId/\n * ...) is copied onto the instance, so existing `catch` handlers keep working;\n * new code reads `.decline`. Detect it with `err.name === 'BoundedDeclineError'`\n * or the bundle-copy-safe `err.isBoundedDecline === true`.\n */\nexport class BoundedDeclineError extends Error {\n constructor(decline, envelope) {\n super(`Declined: ${decline.message}`);\n // Copy the legacy envelope FIRST, then re-assert our own fields so a\n // stray envelope key can never clobber name/message/decline/flag.\n if (envelope && typeof envelope === 'object')\n Object.assign(this, envelope);\n this.name = 'BoundedDeclineError';\n this.message = `Declined: ${decline.message}`;\n this.decline = decline;\n this.isBoundedDecline = true;\n }\n}\n","import axios from \"axios\";\nimport axiosRetry from \"axios-retry\";\nimport { getConfig } from \"../client/config\";\nimport { createAuthHeader, getSessionGeneration, } from \"../utils/utils\";\nimport { getFreshAuthToken } from \"../utils/auth-token-freshness\";\nimport { deriveDecline, dispatchDeclineEvent, BoundedDeclineError } from \"../client/decline\";\nconst apiClient = axios.create();\nconst TRANSIENT_GET_STATUSES = new Set([500, 502, 503, 504]);\nconst RATE_LIMIT_RETRY_BASE_DELAY_MS = 100;\n/** The window event emitted when the API responds with HTTP 429. */\nexport const RATE_LIMIT_EVENT_NAME = 'bounded:ratelimit';\n/** Dispatch a rate-limit event without affecting request error handling. */\nexport function dispatchRateLimitEvent(detail) {\n try {\n if (typeof window === 'undefined')\n return;\n const Ctor = globalThis.CustomEvent;\n if (typeof Ctor !== 'function')\n return;\n window.dispatchEvent(new Ctor(RATE_LIMIT_EVENT_NAME, {\n detail: Object.assign(Object.assign({}, detail), { at: Date.now() }),\n }));\n }\n catch (_a) {\n // Fire-and-forget: event consumers must never delay or mask the request.\n }\n}\nfunction getRateLimitEventDetail(error, attempt, willRetry) {\n var _a, _b;\n const endpoint = typeof ((_a = error.config) === null || _a === void 0 ? void 0 : _a.url) === 'string' ? error.config.url : '';\n let path = endpoint;\n try {\n const parsed = new URL(endpoint);\n path = `${parsed.pathname}${parsed.search}`;\n }\n catch (_c) {\n // Keep a relative or otherwise non-standard endpoint as-is.\n }\n const responseBody = (_b = error.response) === null || _b === void 0 ? void 0 : _b.data;\n const body = responseBody && typeof responseBody === 'object' && !Array.isArray(responseBody)\n ? responseBody\n : responseBody == null\n ? {}\n : { message: String(responseBody) };\n return Object.assign(Object.assign({}, body), { endpoint,\n path, status: 429, attempt,\n willRetry });\n}\nfunction getRateLimitAttempt(error) {\n var _a, _b;\n const retryCount = (_b = (_a = error.config) === null || _a === void 0 ? void 0 : _a['axios-retry']) === null || _b === void 0 ? void 0 : _b.retryCount;\n return typeof retryCount === 'number' ? retryCount + 1 : 1;\n}\naxiosRetry(apiClient, {\n retries: 2,\n retryCondition: (error) => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n // A caller cancellation is final. In particular, never turn a route\n // unmount into a fresh GET after its AbortSignal has fired.\n const canceled = axios.isCancel(error)\n || error.code === 'ERR_CANCELED'\n || ((_b = (_a = error.config) === null || _a === void 0 ? void 0 : _a.signal) === null || _b === void 0 ? void 0 : _b.aborted);\n if (canceled) {\n if (((_c = error.response) === null || _c === void 0 ? void 0 : _c.status) === 429) {\n dispatchRateLimitEvent(getRateLimitEventDetail(error, getRateLimitAttempt(error), false));\n }\n return false;\n }\n // A 429 means the server did not execute the request, so retrying is\n // safe for every method, including POST requests to the queries API.\n if (((_d = error.response) === null || _d === void 0 ? void 0 : _d.status) === 429)\n return true;\n // Only retry idempotent GETs. Network failures and the small set of\n // conventional transient gateway/runtime statuses get two bounded\n // retries; auth, policy, invariant, and other terminal responses stay final.\n // Writes are never retried because the server may already have applied\n // them before the response was lost.\n if (((_f = (_e = error.config) === null || _e === void 0 ? void 0 : _e.method) === null || _f === void 0 ? void 0 : _f.toLowerCase()) !== 'get')\n return false;\n return axiosRetry.isNetworkError(error)\n || TRANSIENT_GET_STATUSES.has((_h = (_g = error.response) === null || _g === void 0 ? void 0 : _g.status) !== null && _h !== void 0 ? _h : 0);\n },\n retryDelay: (retryCount, error) => {\n var _a;\n if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 429) {\n const exponentialCap = RATE_LIMIT_RETRY_BASE_DELAY_MS * (2 ** retryCount);\n return Math.floor(Math.random() * exponentialCap);\n }\n return axiosRetry.exponentialDelay(retryCount, error);\n },\n shouldResetTimeout: true,\n onRetry: (retryCount, error, requestConfig) => {\n var _a, _b, _c;\n if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 429) {\n dispatchRateLimitEvent(getRateLimitEventDetail(error, retryCount, !((_b = requestConfig.signal) === null || _b === void 0 ? void 0 : _b.aborted)));\n }\n console.warn(`[bounded-sdk] retry ${retryCount} for ${(_c = requestConfig.method) === null || _c === void 0 ? void 0 : _c.toUpperCase()} ${requestConfig.url} - ${error.code || error.message}`);\n },\n onMaxRetryTimesExceeded: (error, retryCount) => {\n var _a;\n if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 429) {\n dispatchRateLimitEvent(getRateLimitEventDetail(error, retryCount + 1, false));\n }\n },\n});\n/**\n * Recover from a 401, bound to the session that authenticated the ORIGINAL attempt.\n *\n * The dedupe, rotation and conditional-clear all live in `getFreshAuthToken` now;\n * this only adds the principal binding a reactive retry needs.\n *\n * Why the binding matters: `createAuthHeader` is acquired inside `executeRequest`,\n * so a retry re-reads whatever session is current at retry time. If B logs in while\n * A's request is in flight, A's 401 handler used to refresh B's session and replay\n * A's exact request as B — writing data under the wrong principal. Making a rejected\n * bearer return 401 turned that from a near-impossible race into the normal recovery\n * path, so it has to be closed here.\n *\n * Returns true only when the retry may proceed under the SAME login.\n */\nasync function refreshAuthSessionOnce(capturedGeneration, isServer) {\n try {\n // force: the server just rejected the stored token, so a locally-fresh-looking\n // one is not evidence of anything. Without this, a 401 caused by anything the\n // client cannot see (revoked family, app mismatch, key rotation) would be\n // \"recovered\" by replaying the exact same credential.\n const token = await getFreshAuthToken(isServer, { force: true });\n if (!token)\n return false;\n // Equal generation covers both \"unchanged\" and \"refreshed descendant\": a\n // refresh preserves the generation, a re-login mints a new one. Comparing\n // tokens instead would reject a perfectly good retry whenever a concurrent\n // request refreshed first, which at expiry is the common case.\n const currentGeneration = await getSessionGeneration(isServer);\n if (currentGeneration !== capturedGeneration)\n return false;\n return true;\n }\n catch (_a) {\n // Includes auth_changed and a definitively rejected refresh. Either way the\n // retry must not proceed; the caller surfaces the original 401.\n return false;\n }\n}\nexport async function makeApiRequest(method, urlPath, data, _overrides) {\n var _a, _b, _c, _d, _e, _f, _g;\n // A scoped createClient() instance passes its own resolved config; otherwise\n // fall back to the module-global init() config.\n const config = (_a = _overrides === null || _overrides === void 0 ? void 0 : _overrides._config) !== null && _a !== void 0 ? _a : await getConfig();\n const readOnly = (_overrides === null || _overrides === void 0 ? void 0 : _overrides._readOnly) === true;\n // CREDENTIAL PROVENANCE.\n //\n // Only a MANAGED credential — one this SDK minted from the global session — may\n // trigger global-session recovery. A caller that supplies its own Authorization\n // (via `_overrides.headers` or a wallet client's `_getAuthHeaders`) owns that\n // token; refreshing or clearing the global session because THAT token got a 401\n // would sign out an unrelated user. Rare before, because a rejected bearer used\n // to come back as 403; routine now that it is a 401.\n const usesOverrideAuthHeader = !!(_overrides === null || _overrides === void 0 ? void 0 : _overrides.headers)\n && Object.keys(_overrides.headers).some((name) => name.toLowerCase() === \"authorization\");\n const isManagedCredential = !readOnly\n && !(_overrides === null || _overrides === void 0 ? void 0 : _overrides._getAuthHeaders)\n && !usesOverrideAuthHeader;\n // The session that authenticated the FIRST attempt. 401 recovery is bound to it\n // so a retry can never execute under a principal that replaced it mid-flight.\n const capturedGeneration = isManagedCredential\n ? await getSessionGeneration(config.isServer)\n : null;\n async function executeRequest() {\n var _a;\n // When _getAuthHeaders is provided (wallet client), use it as the sole auth source.\n // A read-only scoped instance omits auth entirely. Otherwise use the\n // global createAuthHeader (default path).\n const authHeader = (_overrides === null || _overrides === void 0 ? void 0 : _overrides._getAuthHeaders)\n ? await _overrides._getAuthHeaders()\n : readOnly\n ? {}\n : await createAuthHeader(config.isServer);\n const headers = Object.assign({ \"Content-Type\": \"application/json\", \"X-App-Id\": config.appId }, authHeader);\n // Apply custom headers from _overrides. #022/#023: HTTP header names are\n // case-insensitive, so normalize any override `authorization` (in any casing) onto the\n // single canonical `Authorization` key - never send two differently-cased Authorization\n // headers, and keep the credential the request sends identical to the one the read\n // cache key is derived from.\n if (_overrides === null || _overrides === void 0 ? void 0 : _overrides.headers) {\n for (const [name, value] of Object.entries(_overrides.headers)) {\n if (name.toLowerCase() === \"authorization\") {\n delete headers[\"authorization\"];\n headers[\"Authorization\"] = value;\n }\n else {\n headers[name] = value;\n }\n }\n }\n // Writes (PUT/POST/DELETE) can take significantly longer than reads —\n // server-side they may trigger ad-hoc LUT creation (create + extend +\n // wait-for-finalization, ~15-30s on mainnet). Use a larger default for\n // non-GET so the SDK doesn't time out before client-api responds.\n const isRead = method.toUpperCase() === \"GET\";\n const defaultTimeout = isRead ? 30000 : 90000;\n const requestConfig = {\n method,\n url: `${config.apiUrl}${urlPath.startsWith(\"/\") ? urlPath : `/${urlPath}`}`,\n headers,\n timeout: (_a = _overrides === null || _overrides === void 0 ? void 0 : _overrides.timeout) !== null && _a !== void 0 ? _a : defaultTimeout,\n signal: _overrides === null || _overrides === void 0 ? void 0 : _overrides.signal,\n };\n if (method !== \"GET\" && method !== \"get\") {\n requestConfig.data = data ? JSON.stringify(data) : {};\n }\n const response = await apiClient(requestConfig);\n return { data: response.data, status: response.status, headers: response.headers };\n }\n try {\n return await executeRequest();\n }\n catch (initialError) {\n // The error that ultimately gets normalized below. A retry REPLACES it, so a\n // genuine post-refresh policy denial surfaces as itself.\n //\n // Both retry paths used to `return await executeRequest()` from inside this\n // catch, which meant a retry that failed skipped the whole normalization\n // block further down. The default path additionally swallowed the retry error\n // and rethrew the ORIGINAL 401 — so `401 -> refresh succeeds -> retry is\n // genuinely denied 403` reached the caller as a 401, contradicting the point\n // of returning 401 for expired credentials in the first place.\n let error = initialError;\n if (((_b = error.response) === null || _b === void 0 ? void 0 : _b.status) === 401) {\n // Read-only scoped instance: it holds no session, so there is nothing\n // to refresh. Surface the 401 without touching the global session.\n if (readOnly) {\n throw error;\n }\n if (_overrides === null || _overrides === void 0 ? void 0 : _overrides._clearAuth) {\n // Wallet client path: client-specific retry, never the global session.\n await _overrides._clearAuth();\n try {\n return await executeRequest();\n }\n catch (retryError) {\n // Normalize the RETRY's own failure. Still no global auth touched.\n error = retryError;\n }\n }\n else if (isManagedCredential) {\n // Default path: recover the global session, bound to the principal\n // that authenticated the first attempt.\n const recovered = await refreshAuthSessionOnce(capturedGeneration, config.isServer);\n if (recovered) {\n try {\n return await executeRequest();\n }\n catch (retryError) {\n error = retryError;\n }\n }\n // Not recovered: keep the original 401 for normalization below.\n }\n // Unmanaged credential (caller-supplied Authorization): its 401 is the\n // caller's to handle. Never refresh or clear the global session for it.\n }\n if (((_c = error.response) === null || _c === void 0 ? void 0 : _c.status) == 404) {\n return { data: null, status: 404 };\n }\n if ((_d = error.response) === null || _d === void 0 ? void 0 : _d.data) {\n const responseData = typeof error.response.data === 'object'\n ? error.response.data\n : { message: String(error.response.data) };\n const httpStatus = (_e = error.response) === null || _e === void 0 ? void 0 : _e.status;\n // A policy/invariant denial (403 rule / 409 invariant) is surfaced as\n // a first-class BoundedDeclineError carrying `.decline`; every other\n // failure stays a bare enriched Error (unchanged behavior).\n const decline = deriveDecline(responseData, httpStatus);\n const apiError = decline\n ? new BoundedDeclineError(decline)\n : new Error(responseData.message || error.message || 'Request failed');\n Object.assign(apiError, responseData);\n apiError.statusCode = httpStatus;\n // Surface the structured error envelope { code, status, requestId } so\n // callers can branch on the stable category (e.g.\n // `if (e.code === 'invariant_violation')`) without parsing the message.\n // `code` is a stable category ('policy_denied' | 'invariant_violation');\n // `status` is the HTTP status; `requestId` correlates with the decision log.\n apiError.code = (_f = responseData.code) !== null && _f !== void 0 ? _f : apiError.code;\n apiError.status = httpStatus !== null && httpStatus !== void 0 ? httpStatus : responseData.status;\n apiError.requestId = (_g = responseData.requestId) !== null && _g !== void 0 ? _g : apiError.requestId;\n if (decline) {\n // Re-assert decline-owned fields after the envelope copy, then\n // notify the browser widget. Fire-and-forget: never delays or\n // masks the throw.\n apiError.decline = decline;\n apiError.name = 'BoundedDeclineError';\n apiError.isBoundedDecline = true;\n apiError.message = `Declined: ${decline.message}`;\n dispatchDeclineEvent(decline, config.appId);\n }\n throw apiError;\n }\n throw error;\n }\n}\n","/**\n * WebSocket v2 Subscription Manager\n *\n * This module implements multiplexed subscriptions over a single WebSocket connection.\n * It maintains the same external API as v1 but uses the new v2 protocol internally.\n */\nimport { getConfig } from './config';\nimport { getIdToken } from '../utils/utils';\nimport { getActiveSessionManager } from '../utils/session-manager';\nimport { AUTH_CHANGED_CODE, AUTH_EXPIRED_CODE, getFreshAuthToken, makeAuthExpiredError, normalizeAuthExpiredError, } from '../utils/auth-token-freshness';\nimport { decodeBase64Url, safeBtoa } from '../utils/core-platform';\nimport { docId } from './operations';\nimport { deriveDecline, dispatchDeclineEvent } from './decline';\nimport ReconnectingWebSocket from 'reconnecting-websocket';\n// ============ Global State ============\n// One connection per routing target (appId, or appId#room#<collection>/<roomId>)\nconst connections = new Map();\n// Coalesce concurrent first-use/auth-preflight calls for the same routing target.\n// React commonly mounts several subscriptions in one render; without this map,\n// every call can pass the empty `connections` check, await auth, and create an\n// orphan ReconnectingWebSocket before the first call publishes its connection.\n// Keyed by the identity-bucket lease key (see connectionLeaseKey) so two distinct\n// wallet tokens never share one in-flight socket even under a compact-hash collision.\nconst connectionFlights = new Map();\n// A subscriber holds a routing-target lease from connection acquisition until\n// its callback/subscription is registered. The last old-route unsubscribe must\n// not close a connection already captured by a new route awaiting auth. Keyed by\n// the same identity-bucket lease key as connectionFlights.\nconst connectionAcquisitions = new Map();\n// Compact identity hashes remain useful bounded-size indexes, but collisions\n// share a bucket instead of sharing authority. Each exact bearer keeps its own\n// cache entry so collision isolation does not evict another principal's cache.\nconst responseCache = new Map();\nconst CACHE_TTL = 5 * 60 * 1000; // 5 minutes\nconst TOKEN_REFRESH_BUFFER = 10 * 60 * 1000; // Refresh token 10 minutes before expiry\nconst TOKEN_CHECK_INTERVAL = 5 * 60 * 1000; // Check token freshness every 5 minutes\nfunction getResponseCacheEntry(cacheKey, identityToken) {\n var _a;\n return (_a = responseCache.get(cacheKey)) === null || _a === void 0 ? void 0 : _a.find(entry => entry.identityToken === identityToken);\n}\nfunction setResponseCacheEntry(cacheKey, identityToken, data) {\n var _a;\n const now = Date.now();\n const bucket = (_a = responseCache.get(cacheKey)) !== null && _a !== void 0 ? _a : [];\n const reusableEntries = bucket.filter(entry => (entry.identityToken !== identityToken && now - entry.timestamp < CACHE_TTL));\n reusableEntries.push({ data, timestamp: now, identityToken });\n responseCache.set(cacheKey, reusableEntries);\n}\n// ============ WebSocket Config ============\nconst BASE_MIN_RECONNECT_DELAY_MS = 1000;\nconst MIN_RECONNECT_DELAY_JITTER_MS = 1000;\nconst MAX_RECONNECT_DELAY_MS = 300000;\nconst RECONNECT_DELAY_GROW_FACTOR = 1.8;\nconst MIN_BROWSER_RECONNECT_INTERVAL_MS = 5000;\nconst WS_AUTH_EXPIRED_CODE = 'auth_expired';\n// React runs old-route effect cleanup before new-route effects. Keep an\n// otherwise-idle socket for one short handoff window so the new route can\n// cancel teardown and reuse it; genuinely idle sockets still close promptly.\nconst IDLE_CONNECTION_CLOSE_GRACE_MS = 5000;\nconst SUBSCRIPTION_CONFIRM_TIMEOUT_MS = 10000;\nconst WS_CONFIG = {\n // Keep retrying indefinitely so long outages recover without page refresh.\n maxRetries: Infinity,\n // Conservative starting delay with jitter spreads reconnects across clients.\n minReconnectionDelay: BASE_MIN_RECONNECT_DELAY_MS + Math.floor(Math.random() * MIN_RECONNECT_DELAY_JITTER_MS),\n // Stretch backoff to 5 minutes during prolonged outages to protect backend pools.\n maxReconnectionDelay: MAX_RECONNECT_DELAY_MS,\n // Moderate growth to avoid rapid retry bursts while still converging to max delay.\n reconnectionDelayGrowFactor: RECONNECT_DELAY_GROW_FACTOR,\n // Give handshakes more time before considering the attempt failed.\n connectionTimeout: 10000,\n};\nconst WS_V2_PATH = '/ws/v2';\nlet browserReconnectHooksAttached = false;\nlet lastBrowserTriggeredReconnectAt = 0;\nlet reconnectInProgress = null;\nlet ambientAuthFailure = null;\n// ============ Helper Functions ============\nfunction generateSubscriptionId() {\n return `sub_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;\n}\nfunction hashForKey(value) {\n let h = 5381;\n for (let i = 0; i < value.length; i++) {\n h = ((h << 5) + h + value.charCodeAt(i)) & 0x7fffffff;\n }\n return h.toString(36);\n}\n/**\n * SECURITY (H1): Response-cache keys must be scoped to the caller's identity, not\n * just the path/filter/shape. The compact `identity` prefix selects a bucket;\n * exact opaque bearer equality is required inside it before reuse. Together they\n * keep a private snapshot from being delivered to a different user with the same\n * options (shared process / SSR worker / browser login-switch; this cache has a\n * 5-minute TTL). Callers must opt in before entries are read or written; no-auth\n * subscriptions never populate an implicit anonymous cache bucket.\n */\nfunction getCacheKey(path, prompt, shape, limit, cursor, filter, identity) {\n const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n const shapeKey = shape && Object.keys(shape).length > 0 ? JSON.stringify(shape) : '';\n const limitKey = limit !== undefined ? `:l${limit}` : '';\n const cursorKey = cursor ? `:c${hashForKey(cursor)}` : '';\n const filterKey = filter && Object.keys(filter).length > 0 ? `:f${hashForKey(JSON.stringify(filter))}` : '';\n return `${identity}|${normalizedPath}:${prompt || 'default'}:${shapeKey}${limitKey}${cursorKey}${filterKey}`;\n}\n/**\n * Derive an opaque identity string for the bearer material a subscription sends.\n * JWT payloads are deliberately not trusted here: cache isolation must happen\n * before the server has verified any claims.\n */\nfunction principalFromIdToken(idToken) {\n return idToken ? `t${hashForKey(idToken)}` : null;\n}\nfunction livePrincipalFromIdToken(idToken) {\n if (!idToken)\n return null;\n try {\n const payload = JSON.parse(decodeBase64Url(idToken.split('.')[1]));\n const userId = payload['custom:userId'];\n if (typeof userId === 'string' && userId.length > 0)\n return userId;\n const walletAddress = payload['custom:walletAddress'];\n if (typeof walletAddress === 'string' && walletAddress.length > 0)\n return walletAddress;\n const subject = payload.sub;\n return typeof subject === 'string' && subject.length > 0 ? subject : null;\n }\n catch (_a) {\n return null;\n }\n}\nfunction authSnapshotFromToken(idToken) {\n return {\n tokenValue: idToken !== null && idToken !== void 0 ? idToken : null,\n principal: livePrincipalFromIdToken(idToken),\n };\n}\nfunction connectionMatchesAuthToken(connection, idToken) {\n const current = authSnapshotFromToken(idToken);\n if (!current.tokenValue) {\n return connection.authTokenValue === null && connection.authPrincipal === null;\n }\n if (connection.authTokenValue && connection.authTokenValue === current.tokenValue) {\n return true;\n }\n return !!connection.authPrincipal && !!current.principal && connection.authPrincipal === current.principal;\n}\nasync function canSendAuthenticatedLiveIntent(connection, isServer) {\n const currentToken = await getIdToken(isServer);\n if (!currentToken)\n return false;\n if (!connection.authTokenValue && !connection.authPrincipal)\n return false;\n return connectionMatchesAuthToken(connection, currentToken);\n}\nasync function getSubscriptionIdentity(effectiveAppId, isServer, overrides, anonymous) {\n // A read-only scoped instance is unauthenticated by construction. Key it as\n // anonymous and never read the ambient global session (a different app's).\n if (anonymous) {\n return { key: `${effectiveAppId}:anon`, cacheable: false, token: null };\n }\n // Per-subscription wallet override (server WalletClient.subscribe): key by\n // the wallet's own opaque token material, mirroring getReadPrincipalKey. Do\n // not trust decoded claims or the unverified _walletAddress hint.\n if (overrides === null || overrides === void 0 ? void 0 : overrides._getAuthHeaders) {\n try {\n const bearer = bearerFromAuthHeaders(await overrides._getAuthHeaders());\n const principal = principalFromIdToken(bearer);\n return principal\n ? { key: `${effectiveAppId}:o${principal}`, cacheable: true, token: bearer }\n : { key: `${effectiveAppId}:oanon`, cacheable: false, token: null };\n }\n catch (_a) {\n // Couldn't resolve the override identity — do not use response cache.\n return { key: `${effectiveAppId}:o-uncacheable-${safeBtoa(String(connectionEpoch++))}`, cacheable: false, token: null };\n }\n }\n const idToken = await getIdToken(isServer);\n const principal = principalFromIdToken(idToken);\n return principal\n ? { key: `${effectiveAppId}:${principal}`, cacheable: true, token: idToken !== null && idToken !== void 0 ? idToken : null }\n : { key: `${effectiveAppId}:anon`, cacheable: false, token: null };\n}\n/** Extract the bare bearer token from a `{ Authorization: 'Bearer <jwt>' }` map. */\nfunction bearerFromAuthHeaders(headers) {\n const auth = (headers === null || headers === void 0 ? void 0 : headers.Authorization) || (headers === null || headers === void 0 ? void 0 : headers.authorization) || '';\n return auth.startsWith('Bearer ') ? auth.slice('Bearer '.length) : auth;\n}\n// Monotonic counter for unique-ish fallback identity keys (no Date.now in some envs).\nlet connectionEpoch = 0;\n// isTokenExpired / makeAuthExpiredError / isAuthExpiredError /\n// normalizeAuthExpiredError now live in utils/auth-token-freshness so the HTTP and\n// WebSocket paths cannot drift apart. `classifyToken` replaces the old boolean,\n// which collapsed \"expiring soon\" and \"already expired\" into one answer and read a\n// token with no numeric `exp` as fresh.\nfunction getTokenExpirationTime(token) {\n try {\n const payload = JSON.parse(decodeBase64Url(token.split('.')[1]));\n return payload.exp ? payload.exp * 1000 : null;\n }\n catch (_a) {\n return null;\n }\n}\n/**\n * Latch a failure so a dead session does not re-hammer /session/refresh every tick.\n *\n * NOT latched when the failure came with the session being cleared or replaced.\n * The clear notifies auth-state listeners, which kicks a reconnect that resets this\n * — and if we re-latched afterwards, `getConnectionAuthToken` would keep throwing\n * even though storage is now empty, so an ordinary expiry left WebSocket\n * acquisition permanently broken instead of falling back to an anonymous socket.\n */\nfunction rememberAmbientAuthFailure(error) {\n if ((error === null || error === void 0 ? void 0 : error.code) === AUTH_CHANGED_CODE)\n return error;\n // The session is gone: the right next move is an anonymous connection, not a\n // remembered failure.\n if (!getIdTokenSync())\n return error;\n ambientAuthFailure = error;\n return error;\n}\n/** Best-effort synchronous peek, only for deciding whether a session still exists. */\nfunction getIdTokenSync() {\n try {\n return getActiveSessionManager().getIdToken();\n }\n catch (_a) {\n return null;\n }\n}\nfunction failConnectionAuth(connection, error) {\n connection.authFailure = error;\n connection.pendingAuthToken = null;\n connection.pendingAuthSnapshot = null;\n connection.authTokenValue = null;\n connection.authPrincipal = null;\n connection.isConnecting = false;\n connection.isConnected = false;\n connection.isAuthenticating = false;\n for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, error);\n }\n for (const subscription of connection.subscriptions.values()) {\n notifyErrorCallbacks(subscription, error);\n rejectSubscriptionRefresh(subscription, error);\n }\n}\nfunction scheduleTokenRefresh(connection, isServer) {\n // Clear any existing timer\n if (connection.tokenRefreshTimer) {\n clearInterval(connection.tokenRefreshTimer);\n connection.tokenRefreshTimer = null;\n }\n // Periodic check: every TOKEN_CHECK_INTERVAL, check if the token needs refreshing.\n // This replaces the old single setTimeout approach which was unreliable for long\n // delays (browsers throttle/suspend timers in background tabs).\n connection.tokenRefreshTimer = setInterval(async () => {\n var _a, _b, _c, _d, _e;\n try {\n const currentToken = await getIdToken(isServer);\n if (!currentToken)\n return; // Unauthenticated, nothing to refresh\n const expirationTime = getTokenExpirationTime(currentToken);\n if (!expirationTime)\n return;\n const timeUntilExpiry = expirationTime - Date.now();\n if (timeUntilExpiry <= TOKEN_REFRESH_BUFFER) {\n console.info('[WS v2] Token expiring soon, proactively refreshing');\n // Refresh the token and store it. Do NOT reconnect — the server only\n // verifies JWT at $connect time, so the existing connection continues\n // working. The fresh token is picked up by urlProvider the next time\n // a reconnect naturally happens (network drop, keepalive timeout, etc.).\n //\n // Routed through the shared transaction. This used to read a refresh\n // token, call refreshSession, and write the result with nothing binding\n // it to the session it started from — so a timer that fired for S1 and\n // completed after a same-wallet re-login could overwrite S2's rotated\n // token, and the next refresh would trip the issuer's reuse detection\n // and revoke the whole family.\n try {\n await getFreshAuthToken(isServer);\n console.info('[WS v2] Token refreshed successfully, stored for next connection');\n }\n catch (refreshError) {\n const definitive = (refreshError === null || refreshError === void 0 ? void 0 : refreshError.code) === AUTH_EXPIRED_CODE\n || (refreshError === null || refreshError === void 0 ? void 0 : refreshError.code) === AUTH_CHANGED_CODE;\n if (definitive) {\n // The session is dead or belongs to someone else now. The shared\n // helper has already cleared storage and notified auth-state\n // listeners, so the UI stops showing a connection that is gone —\n // this branch used to just stop the timer and leave the UI\n // claiming to be connected.\n console.warn('[WS v2] Session no longer usable, stopping periodic refresh');\n if (connection.tokenRefreshTimer) {\n clearInterval(connection.tokenRefreshTimer);\n connection.tokenRefreshTimer = null;\n }\n return;\n }\n // Transient: keep the session and try again next interval.\n // Status only — the raw axios error carries config.data (the refresh\n // token) and must never hit the console / log sinks.\n console.warn('[WS v2] Proactive token refresh failed, will retry next interval. status:', (_b = (_a = refreshError === null || refreshError === void 0 ? void 0 : refreshError.status) !== null && _a !== void 0 ? _a : refreshError === null || refreshError === void 0 ? void 0 : refreshError.code) !== null && _b !== void 0 ? _b : 'unknown');\n }\n }\n }\n catch (error) {\n console.error('[WS v2] Error in periodic token check. status:', (_e = (_d = (_c = error === null || error === void 0 ? void 0 : error.response) === null || _c === void 0 ? void 0 : _c.status) !== null && _d !== void 0 ? _d : error === null || error === void 0 ? void 0 : error.code) !== null && _e !== void 0 ? _e : 'unknown');\n }\n }, TOKEN_CHECK_INTERVAL);\n}\n/**\n * WS-local wrapper around the shared freshness helper.\n *\n * The shared helper owns expiry classification, the deduplicated\n * snapshot -> refresh -> commit transaction, and conditional clearing. This adds\n * only the WS-specific storm guard: without it, a dead session would retry the\n * refresh on every reconnect attempt and every 5-minute tick.\n */\nasync function getWsAuthToken(isServer) {\n var _a, _b;\n // A remembered failure short-circuits, but only while a session still exists.\n // See rememberAmbientAuthFailure: once storage is cleared the correct next move\n // is an anonymous connection, not a replayed error.\n if (ambientAuthFailure && getIdTokenSync()) {\n throw ambientAuthFailure;\n }\n try {\n const token = await getFreshAuthToken(isServer);\n ambientAuthFailure = null;\n return token;\n }\n catch (error) {\n // Status only — the raw axios error carries config.data (the refresh token)\n // and must never reach a console or log sink.\n console.error('[WS v2] Error acquiring auth token. status:', (_b = (_a = error === null || error === void 0 ? void 0 : error.status) !== null && _a !== void 0 ? _a : error === null || error === void 0 ? void 0 : error.code) !== null && _b !== void 0 ? _b : 'unknown');\n throw rememberAmbientAuthFailure(normalizeAuthExpiredError(error, 'Authentication expired and refresh failed'));\n }\n}\n/**\n * The server refused the token sent on the auth frame: its error frame arrives\n * while the auth ack is still pending, just before the 1008 close. Local expiry\n * had vouched for that exact token (unexpired but invalid - e.g. a rotated\n * issuer key), so re-sending it would only be refused again. Force a genuinely\n * new one: a definitive issuer rejection clears the session inside the shared\n * helper (firing notifySessionCleared, which signs the UI out), a successful\n * refresh commits a new token - and the ordinary reconnect loop picks up either\n * outcome on its own. Fresh token: authenticates. No token: connects\n * anonymously and public reads replay instead of erroring forever.\n */\nasync function recoverFromServerAuthRejection(connection) {\n const rejected = connection.pendingAuthToken;\n if (!rejected)\n return;\n // One forced refresh per distinct rejected token value: a transiently\n // unreachable issuer must not turn the reconnect loop into a refresh storm.\n if (connection.serverRejectedAuthToken === rejected)\n return;\n connection.serverRejectedAuthToken = rejected;\n try {\n await getFreshAuthToken(connection.isServer, { force: true });\n }\n catch (_a) {\n // Every failure mode is already handled inside the helper: a dead\n // session was cleared (auth listeners notified), a transient refresh\n // failure keeps the session and the latch above stops the storm.\n }\n}\nasync function getConnectionAuthToken(isServer, authTokenProvider, anonymous) {\n // A read-only scoped instance connects anonymously: no auth frame, and it\n // must never read (or refresh) the ambient global session - that session\n // belongs to a different app and would be rejected by this app's worker.\n if (anonymous) {\n return null;\n }\n if (!authTokenProvider) {\n // getWsAuthToken, not the shared helper directly: the wrapper carries the\n // reconnect-storm guard that keeps a dead session from re-refreshing on\n // every reconnect attempt.\n return getWsAuthToken(isServer);\n }\n try {\n const token = await authTokenProvider();\n if (token)\n return token;\n throw makeAuthExpiredError('Authenticated websocket token provider returned no token');\n }\n catch (error) {\n throw normalizeAuthExpiredError(error, 'Authenticated websocket token provider failed');\n }\n}\nfunction hasDisconnectedActiveConnections() {\n for (const connection of connections.values()) {\n if (!connection.ws) {\n continue;\n }\n // Only nudge reconnection when socket is fully closed.\n // If ReconnectingWebSocket is already in CONNECTING/backoff state, don't interfere.\n if (connection.ws.readyState === WS_READY_STATE_CLOSED) {\n return true;\n }\n }\n return false;\n}\nfunction maybeReconnectFromBrowserSignal() {\n const now = Date.now();\n if (now - lastBrowserTriggeredReconnectAt < MIN_BROWSER_RECONNECT_INTERVAL_MS) {\n return;\n }\n if (!hasDisconnectedActiveConnections()) {\n return;\n }\n lastBrowserTriggeredReconnectAt = now;\n reconnectWithNewAuthV2().catch((error) => {\n console.error('[WS v2] Browser-triggered reconnect failed:', error);\n });\n}\nfunction attachBrowserReconnectHooksOnce() {\n if (browserReconnectHooksAttached) {\n return;\n }\n if (typeof window === 'undefined') {\n return;\n }\n browserReconnectHooksAttached = true;\n window.addEventListener('online', () => {\n maybeReconnectFromBrowserSignal();\n });\n if (typeof document !== 'undefined') {\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'visible') {\n maybeReconnectFromBrowserSignal();\n }\n });\n }\n}\n// ============ Connection Management ============\n/**\n * Derive the stable `<collection>/<roomId>` room key from a routePath hint.\n * Returns null when the hint isn't a room path (fewer than 2 segments).\n */\nfunction roomKeyFromRoutePath(routePath) {\n if (!routePath)\n return null;\n const segs = routePath.replace(/^\\/+/, '').split('/').filter(Boolean);\n if (segs.length < 2)\n return null;\n return `${segs[0]}/${segs[1]}`;\n}\nfunction replaySubscriptions(connection) {\n for (const sub of connection.subscriptions.values()) {\n sub.lastData = undefined;\n if (!connection.pendingSubscriptions.has(sub.subscriptionId)) {\n registerDetachedReplayConfirmation(connection, sub);\n }\n sendSubscribeWithConfirmation(connection, sub);\n }\n}\n/**\n * Derive the stable identity-bucket lease key used to coalesce (singleflight)\n * and refcount (acquisition / idle-close) connection use. Ambient app/room\n * connections key by their routing target; wallet-scoped connections pin the\n * exact bearer so two distinct tokens never share a flight or a lease, even\n * when their compact `#id#<principalKey>` hashes collide.\n */\nfunction connectionLeaseKey(appId, routePath, principalKey, principalToken, anonymous) {\n const roomKey = roomKeyFromRoutePath(routePath);\n // A read-only scoped instance is anonymous and must never share a socket with\n // the authenticated global path even when it targets the same appId.\n const appKey = anonymous ? `${appId}#ro` : appId;\n const base = roomKey ? `${appKey}#room#${roomKey}` : appKey;\n if (!principalKey)\n return base;\n const bucket = `${base}#id#${principalKey}`;\n return principalToken ? `${bucket}#tok#${principalToken}` : bucket;\n}\nfunction cancelIdleConnectionClose(connection) {\n if (!connection.idleCloseTimer)\n return;\n clearTimeout(connection.idleCloseTimer);\n connection.idleCloseTimer = null;\n}\nfunction closeConnectionNow(connection) {\n if (connections.get(connection.key) !== connection)\n return;\n if (!connection.ws)\n return;\n cancelIdleConnectionClose(connection);\n if (connection.tokenRefreshTimer) {\n clearInterval(connection.tokenRefreshTimer);\n connection.tokenRefreshTimer = null;\n }\n const ws = connection.ws;\n connection.ws = null;\n connection.isConnecting = false;\n connection.isConnected = false;\n connection.isAuthenticating = false;\n const closeError = new Error('WebSocket connection closed');\n for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, closeError);\n }\n for (const subscription of connection.subscriptions.values()) {\n rejectSubscriptionRefresh(subscription, closeError);\n }\n connections.delete(connection.key);\n try {\n ws.close();\n }\n catch ( /* already closing */_a) { /* already closing */ }\n}\nfunction scheduleConnectionCloseIfIdle(connection) {\n var _a;\n if (connections.get(connection.key) !== connection)\n return;\n if (connection.subscriptions.size > 0)\n return;\n if (((_a = connectionAcquisitions.get(connection.acquisitionKey)) !== null && _a !== void 0 ? _a : 0) > 0)\n return;\n if (!connection.ws || connection.idleCloseTimer)\n return;\n connection.idleCloseTimer = setTimeout(() => {\n var _a;\n connection.idleCloseTimer = null;\n if (connection.subscriptions.size > 0)\n return;\n if (((_a = connectionAcquisitions.get(connection.acquisitionKey)) !== null && _a !== void 0 ? _a : 0) > 0)\n return;\n closeConnectionNow(connection);\n }, IDLE_CONNECTION_CLOSE_GRACE_MS);\n}\n/**\n * Acquire a connection under a routing-target lease. The lease is refcounted on\n * the identity-bucket key and held across the caller's auth preflight so a\n * concurrent old-route teardown cannot close a socket a new route is about to\n * reuse. The lease is released once the caller has registered its\n * subscription/callback.\n */\nasync function acquireConnection(appId, isServer, routePath, authTokenProvider, principalKey, principalToken, source) {\n var _a;\n const leaseKey = connectionLeaseKey(appId, routePath, principalKey, principalToken, source === null || source === void 0 ? void 0 : source.anonymous);\n connectionAcquisitions.set(leaseKey, ((_a = connectionAcquisitions.get(leaseKey)) !== null && _a !== void 0 ? _a : 0) + 1);\n let released = false;\n let releaseTimer = null;\n const release = (connection) => {\n var _a;\n if (released)\n return;\n released = true;\n if (releaseTimer) {\n clearTimeout(releaseTimer);\n releaseTimer = null;\n }\n const remaining = ((_a = connectionAcquisitions.get(leaseKey)) !== null && _a !== void 0 ? _a : 1) - 1;\n if (remaining > 0)\n connectionAcquisitions.set(leaseKey, remaining);\n else\n connectionAcquisitions.delete(leaseKey);\n if (connection)\n scheduleConnectionCloseIfIdle(connection);\n };\n try {\n const connection = await getOrCreateConnection(appId, isServer, routePath, authTokenProvider, principalKey, principalToken, source);\n const releaseConnection = () => release(connection);\n // Registration is synchronous after the caller's await. This fail-safe\n // releases on the next task even if an option getter/callback throws\n // before subscribeV2 reaches its explicit release path.\n releaseTimer = setTimeout(releaseConnection, 0);\n return { connection, release: releaseConnection };\n }\n catch (error) {\n release();\n throw error;\n }\n}\nasync function getOrCreateConnection(appId, isServer, routePath, authTokenProvider, principalKey, principalToken, source) {\n // Singleflight: concurrent first-use of the same routing target shares one\n // in-flight connection rather than each creating an orphan socket. Keyed by\n // the identity-bucket lease key so distinct wallet tokens never coalesce.\n const leaseKey = connectionLeaseKey(appId, routePath, principalKey, principalToken, source === null || source === void 0 ? void 0 : source.anonymous);\n const activeFlight = connectionFlights.get(leaseKey);\n if (activeFlight)\n return activeFlight;\n const flight = getOrCreateConnectionOnce(appId, isServer, routePath, authTokenProvider, principalKey, principalToken, leaseKey, source);\n connectionFlights.set(leaseKey, flight);\n try {\n return await flight;\n }\n finally {\n if (connectionFlights.get(leaseKey) === flight) {\n connectionFlights.delete(leaseKey);\n }\n }\n}\nasync function getOrCreateConnectionOnce(appId, isServer, routePath, authTokenProvider, principalKey, principalToken, leaseKey, source) {\n attachBrowserReconnectHooksOnce();\n const anonymous = (source === null || source === void 0 ? void 0 : source.anonymous) === true;\n // A per-room subscription gets its OWN connection routed to the room DO; all\n // other subscriptions share the app-level connection (project DO). The worker\n // derives the room from the `?path=` we attach below and is the final routing\n // authority — `routePath` is only a hint.\n const roomKey = roomKeyFromRoutePath(routePath);\n // A wallet-scoped subscription (server WalletClient) gets its OWN connection\n // keyed by the wallet identity, so its WS authenticates as that wallet and\n // never shares a connection (or token) with any top-level server caller. A\n // read-only scoped (anonymous) instance is likewise isolated by an `#ro`\n // marker so it never shares the authenticated global socket on the same appId.\n const appKey = anonymous ? `${appId}#ro` : appId;\n const base = roomKey ? `${appKey}#room#${roomKey}` : appKey;\n const identityBucketKey = principalKey\n ? `${base}#id#${principalKey}`\n : base;\n let connKey = identityBucketKey;\n let connection;\n if (principalKey && principalToken) {\n // The 31-bit hash selects a small bucket only. Exact token equality is\n // authoritative, and a rare collision gets an independent map slot.\n for (const [candidateKey, candidate] of connections) {\n if ((candidateKey === identityBucketKey || candidateKey.startsWith(`${identityBucketKey}#collision#`)) &&\n candidate.connectionIdentityToken === principalToken) {\n connKey = candidateKey;\n connection = candidate;\n break;\n }\n }\n if (!connection && connections.has(connKey)) {\n let collisionIndex = 1;\n while (connections.has(`${identityBucketKey}#collision#${collisionIndex}`))\n collisionIndex += 1;\n connKey = `${identityBucketKey}#collision#${collisionIndex}`;\n }\n }\n else {\n connection = connections.get(connKey);\n }\n if (connection && connection.ws) {\n // We may reuse this connection; cancel any pending idle-close so it is\n // not torn down during the auth preflight below. The held acquisition\n // lease also guards this window, but cancelling here avoids a needless\n // grace-timer round-trip on the common reuse path.\n cancelIdleConnectionClose(connection);\n if (connection.authFailure) {\n throw connection.authFailure;\n }\n let currentAuthToken;\n try {\n currentAuthToken = await getConnectionAuthToken(isServer, authTokenProvider, anonymous);\n }\n catch (error) {\n const authError = normalizeAuthExpiredError(error, 'Authentication expired and refresh failed');\n failConnectionAuth(connection, authError);\n throw authError;\n }\n if (connection.isConnected &&\n !connection.isAuthenticating &&\n !connectionMatchesAuthToken(connection, currentAuthToken)) {\n closeConnectionNow(connection);\n }\n else {\n connection.authFailure = null;\n return connection;\n }\n connection.authFailure = null;\n }\n let initialAuthToken = await getConnectionAuthToken(isServer, authTokenProvider, anonymous);\n // Create new connection\n connection = {\n ws: null,\n subscriptions: new Map(),\n pendingSubscriptions: new Map(),\n pendingUnsubscriptions: new Map(),\n pendingRequests: new Map(),\n isConnecting: false,\n isConnected: false,\n isAuthenticating: false,\n appId,\n key: connKey,\n acquisitionKey: leaseKey,\n routePath: roomKey ? routePath : undefined,\n authTokenProvider,\n connectionIdentityToken: principalToken !== null && principalToken !== void 0 ? principalToken : null,\n pendingAuthToken: null,\n pendingAuthSnapshot: null,\n authTokenValue: null,\n authPrincipal: null,\n socketGeneration: 0,\n tokenRefreshTimer: null,\n idleCloseTimer: null,\n consecutiveAuthFailures: 0,\n authFailure: null,\n source,\n anonymous,\n isServer,\n serverRejectedAuthToken: null,\n };\n connections.set(connKey, connection);\n // URL provider for reconnection with fresh tokens\n const urlProvider = async () => {\n var _a;\n // A scoped createClient() connection targets its own realtime endpoint;\n // the default path reads the module-global config.\n const wsApiUrl = (_a = source === null || source === void 0 ? void 0 : source.wsApiUrl) !== null && _a !== void 0 ? _a : (await getConfig()).wsApiUrl;\n const wsUrl = new URL(wsApiUrl);\n // Always use v2 path\n wsUrl.pathname = WS_V2_PATH;\n // Set appId from the configured SDK source, or an explicit per-call\n // override passed through subscribeV2. Do not consult ambient globals:\n // app identity must come from init({ appId }) or an explicit call option.\n // `appId` here is already the resolved effectiveAppId; fall back to the\n // global only on the default path when it was somehow empty.\n wsUrl.searchParams.append('appId', appId || (await getConfig()).appId);\n // Per-room connection: carry the room path so the worker routes this WS\n // to the room DO (appId#room#roomId) where the live view fan-out lives.\n if (connection.routePath) {\n wsUrl.searchParams.append('routePath', connection.routePath);\n }\n // Resolve auth token if available. A wallet-scoped connection resolves\n // its token from the wallet's own session (self-refreshing); all others\n // use the browser session or fail closed for top-level server calls. The token is sent as the first WS\n // frame after open, never as a URL query parameter.\n let authToken;\n try {\n authToken = initialAuthToken !== undefined\n ? initialAuthToken\n : await getConnectionAuthToken(isServer, connection.authTokenProvider, connection.anonymous);\n initialAuthToken = undefined;\n }\n catch (error) {\n const authError = normalizeAuthExpiredError(error, 'Authentication expired and refresh failed');\n failConnectionAuth(connection, authError);\n throw authError;\n }\n connection.pendingAuthToken = authToken || null;\n connection.pendingAuthSnapshot = authSnapshotFromToken(authToken);\n if (authToken) {\n // Successful token acquisition — reset failure counter\n connection.consecutiveAuthFailures = 0;\n connection.authFailure = null;\n }\n return wsUrl.toString();\n };\n // Create WebSocket connection\n connection.isConnecting = true;\n const ws = new ReconnectingWebSocket(urlProvider, [], Object.assign(Object.assign({}, WS_CONFIG), { debug: false }));\n connection.ws = ws;\n // Handle connection open\n ws.addEventListener('open', () => {\n var _a, _b;\n connection.socketGeneration += 1;\n connection.isConnecting = false;\n connection.isConnected = true;\n // NOTE: Do NOT reset consecutiveAuthFailures here. It is reset when a\n // fresh auth token is actually obtained or on an explicit auth change.\n // Schedule periodic token freshness checks. An anonymous (read-only\n // scoped) connection holds no token and must never poll or refresh the\n // ambient global session, so it is skipped.\n if (!connection.anonymous) {\n scheduleTokenRefresh(connection, isServer);\n }\n if (connection.pendingAuthToken) {\n connection.isAuthenticating = true;\n try {\n (_a = connection.ws) === null || _a === void 0 ? void 0 : _a.send(JSON.stringify({ type: 'auth', token: connection.pendingAuthToken }));\n }\n catch (error) {\n connection.isAuthenticating = false;\n connection.isConnected = false;\n console.error('[WS v2] Error sending auth message:', error);\n try {\n (_b = connection.ws) === null || _b === void 0 ? void 0 : _b.close(1008, 'Authentication send failed');\n }\n catch (_c) {\n // Already closed.\n }\n }\n }\n else {\n connection.isAuthenticating = false;\n connection.authTokenValue = null;\n connection.authPrincipal = null;\n replaySubscriptions(connection);\n }\n });\n // Handle incoming messages\n ws.addEventListener('message', (event) => {\n try {\n const message = JSON.parse(event.data);\n handleServerMessage(connection, message);\n }\n catch (error) {\n console.error('[WS v2] Error parsing message:', error);\n }\n });\n // Handle errors\n ws.addEventListener('error', (event) => {\n console.error('[WS v2] WebSocket error:', event);\n const wsError = new Error('WebSocket error');\n for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, wsError);\n }\n for (const subscription of connection.subscriptions.values()) {\n rejectSubscriptionRefresh(subscription, wsError);\n }\n });\n // Handle close\n ws.addEventListener('close', () => {\n connection.isConnected = false;\n connection.isAuthenticating = false;\n const disconnectError = new Error('WebSocket disconnected');\n for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, disconnectError);\n }\n if (connection.tokenRefreshTimer) {\n clearInterval(connection.tokenRefreshTimer);\n connection.tokenRefreshTimer = null;\n }\n // Reject all pending WS CRUD requests on disconnect (fail fast)\n for (const [id, pending] of connection.pendingRequests) {\n clearTimeout(pending.timer);\n pending.reject(disconnectError);\n }\n connection.pendingRequests.clear();\n });\n return connection;\n}\nfunction handleServerMessage(connection, message) {\n var _a, _b, _c, _d, _e, _f;\n switch (message.type) {\n case 'authenticated': {\n connection.isAuthenticating = false;\n connection.authTokenValue = (_b = (_a = connection.pendingAuthSnapshot) === null || _a === void 0 ? void 0 : _a.tokenValue) !== null && _b !== void 0 ? _b : null;\n connection.authPrincipal = (_d = (_c = connection.pendingAuthSnapshot) === null || _c === void 0 ? void 0 : _c.principal) !== null && _d !== void 0 ? _d : null;\n // Record server-advertised capabilities (v2 socket query transport).\n connection.capabilities = (_e = message.capabilities) !== null && _e !== void 0 ? _e : null;\n replaySubscriptions(connection);\n break;\n }\n case 'subscribed': {\n const subscription = connection.subscriptions.get(message.subscriptionId);\n if (subscription) {\n const refresh = subscription.refresh;\n // A data update can race ahead of subscribed during reconnect.\n // If we already received data for this subscription, treat subscribed\n // as an ack only and avoid regressing to an older snapshot.\n if (refresh) {\n const hadBaseline = subscription.lastData !== undefined;\n if (subscription.dataRevision === refresh.dataRevisionAtStart) {\n if (subscription.cache) {\n const cacheKey = getCacheKey(subscription.path, subscription.prompt, subscription.shape, subscription.limit, subscription.cursor, subscription.filter, subscription.identity);\n setResponseCacheEntry(cacheKey, subscription.identityToken, message.data);\n }\n subscription.lastData = message.data;\n subscription.dataRevision += 1;\n if (hadBaseline) {\n const callbacks = Array.from(refresh.callbacks)\n .filter((callback) => subscription.callbacks.includes(callback));\n notifyCallbackOptions(callbacks, message.data);\n }\n else {\n // The refresh joined an original registration or a\n // reconnect replay before its first baseline arrived.\n // Every active callback needs that initial snapshot.\n notifyCallbacks(subscription, message.data);\n }\n }\n else if (refresh.callbacks.size > 0 && subscription.lastData !== undefined) {\n // A newer authorized data frame arrived after this refresh\n // began. Do not regress lastData to the older subscribed\n // snapshot; use that newer frame for callbacks that joined\n // after it was broadcast.\n const callbacks = Array.from(refresh.callbacks)\n .filter((callback) => subscription.callbacks.includes(callback));\n notifyCallbackOptions(callbacks, subscription.lastData);\n }\n resolveSubscriptionRefresh(subscription);\n }\n else if (subscription.lastData === undefined) {\n if (subscription.cache) {\n const cacheKey = getCacheKey(subscription.path, subscription.prompt, subscription.shape, subscription.limit, subscription.cursor, subscription.filter, subscription.identity);\n setResponseCacheEntry(cacheKey, subscription.identityToken, message.data);\n }\n subscription.lastData = message.data;\n subscription.dataRevision += 1;\n notifyCallbacks(subscription, message.data);\n }\n }\n // Resolve pending subscription promise\n const pending = connection.pendingSubscriptions.get(message.subscriptionId);\n if (pending) {\n resolvePendingSubscriptionConfirmation(connection, message.subscriptionId);\n }\n break;\n }\n case 'unsubscribed': {\n // Resolve pending unsubscription promise\n const pending = connection.pendingUnsubscriptions.get(message.subscriptionId);\n if (pending) {\n pending.resolve();\n connection.pendingUnsubscriptions.delete(message.subscriptionId);\n }\n break;\n }\n case 'data': {\n const subscription = connection.subscriptions.get(message.subscriptionId);\n if (subscription) {\n // Update cache\n if (subscription.cache) {\n const cacheKey = getCacheKey(subscription.path, subscription.prompt, subscription.shape, subscription.limit, subscription.cursor, subscription.filter, subscription.identity);\n setResponseCacheEntry(cacheKey, subscription.identityToken, message.data);\n }\n // Store last data\n subscription.lastData = message.data;\n subscription.dataRevision += 1;\n // Notify callbacks\n notifyCallbacks(subscription, message.data);\n // A data frame is itself a full, freshly authorized snapshot.\n // It satisfies every joined callback even if the duplicate\n // subscribed ACK was lost; resolving here prevents a false\n // refresh timeout ten seconds after the UI already rendered.\n if (subscription.refresh) {\n resolveSubscriptionRefresh(subscription);\n }\n }\n // A data frame is a full, authorized snapshot and therefore also\n // confirms an initial registration when its `subscribed` ACK was\n // lost. Resolve the originating promise without duplicating state.\n resolvePendingSubscriptionConfirmation(connection, message.subscriptionId);\n break;\n }\n case 'response': {\n const pendingReq = connection.pendingRequests.get(message.requestId);\n if (pendingReq) {\n connection.pendingRequests.delete(message.requestId);\n clearTimeout(pendingReq.timer);\n if (message.status >= 400) {\n pendingReq.reject(new Error(`Request failed with status ${message.status}`));\n }\n else {\n pendingReq.resolve(message.data);\n }\n }\n break;\n }\n case 'setResponse': {\n const pendingSet = connection.pendingRequests.get(message.requestId);\n if (pendingSet) {\n connection.pendingRequests.delete(message.requestId);\n clearTimeout(pendingSet.timer);\n if (message.statusCode >= 400) {\n pendingSet.reject(new Error(((_f = message.body) === null || _f === void 0 ? void 0 : _f.message) || `Set failed with status ${message.statusCode}`));\n }\n else {\n pendingSet.resolve(message.body);\n }\n }\n break;\n }\n case 'error': {\n console.error('[WS v2] Server error:', message.code, message.message);\n // The auth frame was just refused: while the auth ack is pending the\n // server sends no other error frame, and this one is immediately\n // followed by its 1008 close. Kick the forced-refresh recovery - the\n // ordinary reconnect loop then re-auths with a fresh token or, once a\n // definitively dead session is cleared, connects anonymously so\n // public reads still replay. Ambient connections only: wallet-scoped\n // connections refresh through their own provider.\n if (connection.isAuthenticating && connection.pendingAuthToken && !connection.authTokenProvider && !connection.anonymous) {\n void recoverFromServerAuthRejection(connection);\n }\n // Build an Error that ALSO carries the stable `code` as a structured\n // field (not just string-interpolated into the message) so callers can\n // branch on it — e.g. `catch (e) { if (e.code === 'invariant_violation') }`\n // — symmetric with the HTTP path in utils/api.ts. requestId (CRUD) /\n // subscriptionId are attached for correlation with the decision log.\n const buildWsError = () => {\n const err = new Error(`${message.code}: ${message.message}`);\n err.code = message.code;\n if (message.requestId)\n err.requestId = message.requestId;\n if (message.subscriptionId)\n err.subscriptionId = message.subscriptionId;\n // A policy/invariant denial over the socket carries the same\n // structured decline as the HTTP path (live-intent acks, WS\n // writes). Mirror `.decline` and notify the browser widget.\n const declineBody = message.decline\n ? { decline: message.decline }\n : {\n code: message.code,\n message: message.message,\n reason: message.reason,\n invariant: message.invariant,\n verdict: message.verdict,\n };\n const decline = deriveDecline(declineBody);\n if (decline) {\n err.decline = decline;\n err.isBoundedDecline = true;\n dispatchDeclineEvent(decline, connection.appId);\n }\n return err;\n };\n const wsError = buildWsError();\n // Handle CRUD request errors (requestId present)\n if (message.requestId) {\n const pendingReq = connection.pendingRequests.get(message.requestId);\n if (pendingReq) {\n connection.pendingRequests.delete(message.requestId);\n clearTimeout(pendingReq.timer);\n pendingReq.reject(wsError);\n }\n }\n if (message.subscriptionId) {\n // Reject pending subscription if this is a subscription error\n const pending = connection.pendingSubscriptions.get(message.subscriptionId);\n if (pending) {\n rejectPendingSubscriptionConfirmation(connection, message.subscriptionId, wsError);\n }\n // Notify error callbacks for this subscription\n const subscription = connection.subscriptions.get(message.subscriptionId);\n if (subscription) {\n notifyErrorCallbacks(subscription, wsError);\n rejectSubscriptionRefresh(subscription, wsError);\n }\n }\n break;\n }\n }\n}\n/**\n * Additively attach the bare `id` (leaf doc key) to a subscription row (Bug 1).\n * Rows carry `_id`/`pathId` = the full document path; this leaves those as-is and\n * adds `id` = the last path segment so `row.id` is the doc key apps expect. No-ops\n * for non-objects and rows that already define `id`.\n */\nfunction withSubscriptionId(row) {\n var _a, _b, _c;\n if (!row || typeof row !== 'object' || Array.isArray(row))\n return row;\n if ('id' in row)\n return row;\n const source = (_c = (_b = (_a = row._id) !== null && _a !== void 0 ? _a : row.pathId) !== null && _b !== void 0 ? _b : row.relativePath) !== null && _c !== void 0 ? _c : row.absolutePath;\n if (typeof source !== 'string' || source.length === 0)\n return row;\n const leaf = docId(source);\n if (!leaf)\n return row;\n return Object.assign(Object.assign({}, row), { id: leaf });\n}\n/**\n * The `onData` payload follows the path: a collection delivers a bare array of\n * rows, a single-doc path delivers the document (or null). Attach the bare `id`\n * to each returned row in either case, additive (Bug 1).\n */\nfunction addIdsToSubscriptionData(data) {\n if (Array.isArray(data))\n return data.map(withSubscriptionId);\n return withSubscriptionId(data);\n}\nfunction notifyCallbackOptions(callbacks, data) {\n var _a;\n // Attach the bare `id` (leaf doc key) to every delivered row (Bug 1).\n const decorated = addIdsToSubscriptionData(data);\n for (const callback of callbacks) {\n try {\n (_a = callback.onData) === null || _a === void 0 ? void 0 : _a.call(callback, decorated);\n }\n catch (error) {\n console.error('[WS v2] Error in subscription callback:', error);\n }\n }\n}\nfunction notifyCallbacks(subscription, data) {\n // Snapshot the callbacks array so that unsubscriptions during\n // notification don't cause callbacks to be skipped.\n notifyCallbackOptions(subscription.callbacks.slice(), data);\n}\nfunction notifyErrorCallback(callback, error) {\n let delivered = false;\n try {\n const onError = callback.onError;\n if (!onError)\n return false;\n onError(error);\n delivered = true;\n }\n catch (callbackError) {\n console.error('[WS v2] Error in subscription error callback:', callbackError);\n }\n return delivered;\n}\nfunction notifyErrorCallbacks(subscription, error) {\n let delivered = false;\n const callbacks = subscription.callbacks.slice();\n for (const callback of callbacks) {\n delivered = notifyErrorCallback(callback, error) || delivered;\n }\n if (delivered)\n error.__boundedDeliveredToOnError = true;\n return delivered;\n}\n// WebSocket readyState constants\nconst WS_READY_STATE_OPEN = 1;\nconst WS_READY_STATE_CLOSED = 3;\nfunction sendSubscribe(connection, subscription) {\n if (!connection.ws || connection.ws.readyState !== WS_READY_STATE_OPEN) {\n return;\n }\n const message = {\n type: 'subscribe',\n subscriptionId: subscription.subscriptionId,\n path: subscription.path,\n filter: subscription.filter,\n sort: subscription.sort,\n prompt: subscription.prompt ? safeBtoa(subscription.prompt) : undefined,\n includeSubPaths: subscription.includeSubPaths,\n shape: subscription.shape && Object.keys(subscription.shape).length > 0\n ? subscription.shape\n : undefined,\n limit: subscription.limit,\n cursor: subscription.cursor,\n };\n try {\n connection.ws.send(JSON.stringify(message));\n }\n catch (error) {\n console.error('[WS v2] Error sending subscribe message:', error);\n }\n}\nfunction resolvePendingSubscriptionConfirmation(connection, subscriptionId) {\n const pending = connection.pendingSubscriptions.get(subscriptionId);\n if (!pending)\n return false;\n connection.pendingSubscriptions.delete(subscriptionId);\n if (pending.timer) {\n clearTimeout(pending.timer);\n pending.timer = null;\n }\n pending.resolve();\n return true;\n}\nfunction rejectPendingSubscriptionConfirmation(connection, subscriptionId, error) {\n const pending = connection.pendingSubscriptions.get(subscriptionId);\n if (!pending)\n return false;\n connection.pendingSubscriptions.delete(subscriptionId);\n if (pending.timer) {\n clearTimeout(pending.timer);\n pending.timer = null;\n }\n pending.reject(error);\n return true;\n}\nfunction armSubscriptionConfirmationTimeout(connection, subscription, pending) {\n pending.timer = setTimeout(() => {\n if (connection.pendingSubscriptions.get(subscription.subscriptionId) !== pending)\n return;\n pending.timer = null;\n const sameReadySocket = connection.ws === pending.socket &&\n connection.socketGeneration === pending.socketGeneration &&\n connection.authTokenValue === pending.authTokenValue &&\n connection.authPrincipal === pending.authPrincipal &&\n connection.isConnected &&\n !connection.isAuthenticating &&\n pending.socket.readyState === WS_READY_STATE_OPEN;\n const sameRegistration = connection.subscriptions.get(subscription.subscriptionId) === subscription;\n if (!pending.retrySent && sameReadySocket && sameRegistration) {\n pending.retrySent = true;\n // Arm the terminal timeout before sending: browser/test transports\n // may synchronously dispatch the acknowledgement from send().\n armSubscriptionConfirmationTimeout(connection, subscription, pending);\n sendSubscribe(connection, subscription);\n return;\n }\n rejectPendingSubscriptionConfirmation(connection, subscription.subscriptionId, new Error('Subscription timeout'));\n }, SUBSCRIPTION_CONFIRM_TIMEOUT_MS);\n}\n/**\n * Bind an existing confirmation promise to the exact socket session that is\n * about to carry its subscribe frame. Cold-start registrations create the\n * promise before the socket opens; replay uses this helper to move the timeout\n * from the connection wait onto the authenticated socket without allocating a\n * second promise or leaving the original timer behind.\n */\nfunction sendSubscribeWithConfirmation(connection, subscription) {\n const pending = connection.pendingSubscriptions.get(subscription.subscriptionId);\n const socket = connection.ws;\n if (pending && socket && socket.readyState === WS_READY_STATE_OPEN) {\n if (pending.timer) {\n clearTimeout(pending.timer);\n pending.timer = null;\n }\n pending.socket = socket;\n pending.socketGeneration = connection.socketGeneration;\n pending.authTokenValue = connection.authTokenValue;\n pending.authPrincipal = connection.authPrincipal;\n // Arm before send: browser/test transports may synchronously dispatch\n // the subscribed/data/error response from send().\n armSubscriptionConfirmationTimeout(connection, subscription, pending);\n }\n sendSubscribe(connection, subscription);\n}\n/**\n * A reconnect replay has no caller awaiting subscribeV2 anymore, but it still\n * needs the same bounded confirmation/retry guarantee. Attach the rejection\n * handler immediately so this recovery record can never become an unhandled\n * promise. Structured server errors are delivered by handleServerMessage;\n * terminal local timeouts are surfaced here exactly once to active callbacks.\n */\nfunction registerDetachedReplayConfirmation(connection, subscription) {\n const socket = connection.ws;\n if (!socket || connection.pendingSubscriptions.has(subscription.subscriptionId))\n return;\n let resolve;\n let reject;\n const promise = new Promise((resolvePromise, rejectPromise) => {\n resolve = resolvePromise;\n reject = rejectPromise;\n });\n const pending = {\n resolve,\n reject,\n timer: null,\n retrySent: false,\n socket,\n socketGeneration: connection.socketGeneration,\n authTokenValue: connection.authTokenValue,\n authPrincipal: connection.authPrincipal,\n };\n connection.pendingSubscriptions.set(subscription.subscriptionId, pending);\n void promise.catch((error) => {\n if (error.__boundedDeliveredToOnError)\n return;\n if (connection.subscriptions.get(subscription.subscriptionId) !== subscription)\n return;\n // Ordinary socket/auth-change close paths will replay again and did not\n // historically poison every established callback. Only a healthy socket\n // exhausting its bounded confirmation retry is a new terminal condition.\n if (error.message === 'Subscription timeout') {\n const delivered = notifyErrorCallbacks(subscription, error);\n if (!delivered) {\n console.warn('[WS v2] Replayed subscription confirmation timed out:', subscription.path);\n }\n }\n });\n}\nfunction resolveSubscriptionRefresh(subscription) {\n const refresh = subscription.refresh;\n if (!refresh)\n return;\n subscription.refresh = null;\n if (refresh.timer)\n clearTimeout(refresh.timer);\n refresh.callbacks.clear();\n refresh.resolve();\n}\nfunction rejectSubscriptionRefresh(subscription, error) {\n const refresh = subscription.refresh;\n if (!refresh)\n return;\n subscription.refresh = null;\n if (refresh.timer)\n clearTimeout(refresh.timer);\n refresh.callbacks.clear();\n refresh.reject(error);\n}\n/**\n * A callback joining an already-registered non-cache subscription cannot be\n * seeded from `lastData`: that snapshot may predate the callback's auth\n * preflight. Re-send the same subscription id so the server re-runs read auth\n * and returns a fresh baseline, without allocating another websocket or\n * replacing the logical client subscription.\n */\nfunction requestFreshSubscriptionSnapshot(connection, subscription, callback) {\n let refresh = subscription.refresh;\n if (!refresh) {\n let resolve;\n let reject;\n const promise = new Promise((resolvePromise, rejectPromise) => {\n resolve = resolvePromise;\n reject = rejectPromise;\n });\n refresh = {\n promise,\n resolve,\n reject,\n timer: null,\n callbacks: new Set(),\n dataRevisionAtStart: subscription.dataRevision,\n };\n subscription.refresh = refresh;\n refresh.timer = setTimeout(() => {\n if (subscription.refresh !== refresh)\n return;\n rejectSubscriptionRefresh(subscription, new Error('Subscription timeout'));\n }, 10000);\n }\n // Register before sendSubscribe: test/browser transports may synchronously\n // dispatch the subscribed response from send().\n refresh.callbacks.add(callback);\n // Every newly joined callback gets an idempotent same-id resend when the\n // authenticated socket is ready. Do not suppress this because an initial\n // confirmation or an earlier refresh is pending: that pending frame may\n // have been lost or displaced, and sharing it is exactly how an entire\n // route remount can inherit one doomed timeout. When connecting or\n // authenticating, replaySubscriptions will send after auth completes.\n if (connection.isConnected && !connection.isAuthenticating) {\n sendSubscribe(connection, subscription);\n }\n return refresh.promise;\n}\nfunction sendUnsubscribe(connection, subscriptionId) {\n if (!connection.ws || connection.ws.readyState !== WS_READY_STATE_OPEN) {\n return;\n }\n const message = {\n type: 'unsubscribe',\n subscriptionId,\n };\n try {\n connection.ws.send(JSON.stringify(message));\n }\n catch (error) {\n console.error('[WS v2] Error sending unsubscribe message:', error);\n }\n}\n// ============ Public API ============\n/**\n * Subscribe to data at a path using WebSocket v2.\n * Returns an unsubscribe function.\n */\n/**\n * @param roomRoutePath INTERNAL ONLY. A `<sessionCollection>/<roomId>` room path\n * used by `live.subscribeView` to route this subscription's connection to the\n * per-room DO (where live view fan-out lives). It is NOT part of the public\n * subscribe API — app code never passes routing; the worker remains the\n * authority on the destination DO (it derives the room from the `?path=` we\n * attach). This argument only tells the client which connection to multiplex\n * the subscription onto, since a WS connection routes to a single DO.\n */\nexport async function subscribeV2(path, subscriptionOptions, roomRoutePath) {\n var _a, _b, _c, _d, _e, _f;\n const overrides = subscriptionOptions._overrides;\n // A scoped createClient() instance passes its own resolved config; the\n // default path reads the module-global init() config.\n const config = (_a = overrides === null || overrides === void 0 ? void 0 : overrides._config) !== null && _a !== void 0 ? _a : await getConfig();\n const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n // A read-only scoped instance connects anonymously to its own realtime\n // endpoint - never sharing a socket, token, or the ambient session with the\n // global (default) app.\n const anonymous = (overrides === null || overrides === void 0 ? void 0 : overrides._readOnly) === true;\n const source = (overrides === null || overrides === void 0 ? void 0 : overrides._config)\n ? { wsApiUrl: overrides._config.wsApiUrl, anonymous }\n : undefined;\n // Use explicit appId override if provided, otherwise fall back to config\n const effectiveAppId = subscriptionOptions.appId || config.appId;\n // H1: scope the response cache to the caller's identity so a private snapshot\n // cached for one principal is never delivered to a different principal who\n // subscribes with identical options (shared process / SSR / login-switch).\n // Per-subscription wallet override (server WalletClient.subscribe). When set,\n // the connection authenticates + caches under the wallet's identity instead of\n // any top-level server caller — so a `createWalletClient` caller can\n // subscribe through its explicit wallet session. A read-only scoped instance\n // is anonymous, so it never carries an auth-token provider.\n const authTokenProvider = (!anonymous && (overrides === null || overrides === void 0 ? void 0 : overrides._getAuthHeaders))\n ? async () => bearerFromAuthHeaders(await overrides._getAuthHeaders()) || null\n : undefined;\n const identityInfo = await getSubscriptionIdentity(effectiveAppId, config.isServer, overrides, anonymous);\n const identity = identityInfo.key;\n const identityToken = identityInfo.token;\n const responseCacheEnabled = subscriptionOptions.cache === true && identityInfo.cacheable;\n // Preserve the existing compact connection-key shape, but use the exact\n // token as a secondary in-memory equality check within that hash bucket.\n const principalKey = authTokenProvider ? identity : undefined;\n const principalToken = authTokenProvider\n ? (identityToken !== null && identityToken !== void 0 ? identityToken : identity)\n : undefined;\n const cacheKey = responseCacheEnabled\n ? getCacheKey(normalizedPath, subscriptionOptions.prompt, subscriptionOptions.shape, subscriptionOptions.limit, subscriptionOptions.cursor, subscriptionOptions.filter, identity)\n : null;\n // Acquire a connection for this routing target (room-scoped when a room route\n // is supplied by the live helper, else the app-level connection). The lease is\n // held across auth preflight and released once this call registers below, so a\n // concurrent old-route teardown cannot close a socket we are about to reuse.\n let connection;\n let releaseConnection;\n try {\n const acquisition = await acquireConnection(effectiveAppId, config.isServer, roomRoutePath, authTokenProvider, principalKey, principalToken, source);\n connection = acquisition.connection;\n releaseConnection = acquisition.release;\n }\n catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n if (subscriptionOptions.onError) {\n subscriptionOptions.onError(err);\n return async () => { };\n }\n throw err;\n }\n const cachedEntry = cacheKey ? getResponseCacheEntry(cacheKey, identityToken) : undefined;\n // Check if we already have a subscription for this path+prompt+shape+limit+cursor+filter+sort\n let existingSubscription;\n let specKey = '';\n try {\n // Stringify THIS call's specs once; existing subscriptions carry their\n // precomputed specKey, so the scan is a string compare per entry\n // (previously each new subscribe re-stringified every existing\n // subscription's shape/filter/sort — O(N²) with many live hooks).\n specKey = JSON.stringify([\n (_b = subscriptionOptions.shape) !== null && _b !== void 0 ? _b : null,\n (_c = subscriptionOptions.filter) !== null && _c !== void 0 ? _c : null,\n (_d = subscriptionOptions.sort) !== null && _d !== void 0 ? _d : null,\n ]);\n for (const sub of connection.subscriptions.values()) {\n // H1: also require the same principal identity (compact hash AND exact\n // token) — a different logged-in user must not piggy-back on (and\n // inherit lastData from) another user's existing subscription, even\n // with identical path/prompt/shape/filter/sort.\n if (sub.identity === identity && sub.identityToken === identityToken && sub.path === normalizedPath && sub.prompt === subscriptionOptions.prompt && sub.specKey === specKey && sub.includeSubPaths === ((_e = subscriptionOptions.includeSubPaths) !== null && _e !== void 0 ? _e : false) && sub.limit === subscriptionOptions.limit && sub.cursor === subscriptionOptions.cursor) {\n existingSubscription = sub;\n break;\n }\n }\n }\n catch (error) {\n releaseConnection();\n throw error;\n }\n if (existingSubscription) {\n let replayData = undefined;\n let replayOnData;\n if (responseCacheEnabled) {\n // Read callback getters before mutating the shared subscription. If\n // a caller supplied a throwing getter, the acquisition fail-safe can\n // release cleanly without leaving a ghost callback behind.\n replayOnData = subscriptionOptions.onData;\n replayData = existingSubscription.lastData !== undefined\n ? existingSubscription.lastData\n : cachedEntry && Date.now() - cachedEntry.timestamp < CACHE_TTL\n ? cachedEntry.data\n : undefined;\n }\n if (responseCacheEnabled) {\n existingSubscription.cache = true;\n }\n // Add callback to existing subscription\n existingSubscription.callbacks.push(subscriptionOptions);\n let refreshPromise = null;\n if (responseCacheEnabled) {\n // Explicit, principal-bound cache opt-in may replay exactly one\n // snapshot. Prefer the active subscription's lastData, falling back\n // to the short-lived response cache while a reconnect is in flight.\n if (replayData !== undefined && replayOnData) {\n setTimeout(() => {\n replayOnData === null || replayOnData === void 0 ? void 0 : replayOnData(addIdsToSubscriptionData(replayData));\n }, 0);\n }\n }\n else {\n // Default (non-cache) subscriptions require a fresh authorized\n // baseline for every newly joined callback. Reuse the same logical\n // subscription id and socket, but make the server re-run the read.\n refreshPromise = requestFreshSubscriptionSnapshot(connection, existingSubscription, subscriptionOptions);\n }\n releaseConnection();\n if (refreshPromise) {\n try {\n await refreshPromise;\n }\n catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n let deliveredLocally = false;\n if (!err.__boundedDeliveredToOnError) {\n deliveredLocally = notifyErrorCallback(subscriptionOptions, err);\n }\n if (!subscriptionOptions.onError) {\n await removeCallbackFromSubscription(connection, existingSubscription.subscriptionId, subscriptionOptions);\n throw err;\n }\n if (!err.__boundedDeliveredToOnError && !deliveredLocally) {\n console.warn('[WS v2] Subscription refresh failed, keeping for reconnect recovery:', error);\n }\n }\n }\n return async () => {\n await removeCallbackFromSubscription(connection, existingSubscription.subscriptionId, subscriptionOptions);\n };\n }\n // Deliver cached data immediately for a new logical subscription, but only\n // after connection auth preflight has succeeded. An expired authenticated\n // session must receive an auth error, not a stale private snapshot followed\n // by a failed connect.\n if (cachedEntry && Date.now() - cachedEntry.timestamp < CACHE_TTL && subscriptionOptions.onData) {\n setTimeout(() => {\n var _a;\n (_a = subscriptionOptions.onData) === null || _a === void 0 ? void 0 : _a.call(subscriptionOptions, addIdsToSubscriptionData(cachedEntry.data));\n }, 0);\n }\n // Create new subscription\n const subscriptionId = generateSubscriptionId();\n let subscription;\n try {\n subscription = {\n subscriptionId,\n path: normalizedPath,\n filter: subscriptionOptions.filter,\n sort: subscriptionOptions.sort,\n prompt: subscriptionOptions.prompt,\n shape: subscriptionOptions.shape,\n limit: subscriptionOptions.limit,\n cursor: subscriptionOptions.cursor,\n includeSubPaths: (_f = subscriptionOptions.includeSubPaths) !== null && _f !== void 0 ? _f : false,\n callbacks: [subscriptionOptions],\n lastData: undefined,\n dataRevision: 0,\n refresh: null,\n cache: responseCacheEnabled,\n identity,\n identityToken,\n specKey,\n };\n connection.subscriptions.set(subscriptionId, subscription);\n }\n catch (error) {\n releaseConnection();\n throw error;\n }\n releaseConnection();\n // Register the confirmation before any possible synchronous send/ACK. This\n // includes the first subscription on a cold socket: replaySubscriptions()\n // will bind this same pending record to the authenticated socket and send it.\n const subscriptionPromise = new Promise((resolve, reject) => {\n const socket = connection.ws;\n if (!socket) {\n reject(new Error('WebSocket disconnected'));\n return;\n }\n const pending = {\n resolve,\n reject,\n timer: null,\n retrySent: false,\n socket,\n socketGeneration: connection.socketGeneration,\n authTokenValue: connection.authTokenValue,\n authPrincipal: connection.authPrincipal,\n };\n connection.pendingSubscriptions.set(subscriptionId, pending);\n // Bound a cold connection/auth wait as well. Once the socket becomes\n // ready, sendSubscribeWithConfirmation() replaces this timer with a\n // fresh per-socket confirmation window.\n armSubscriptionConfirmationTimeout(connection, subscription, pending);\n });\n if (connection.isConnected && !connection.isAuthenticating) {\n sendSubscribeWithConfirmation(connection, subscription);\n }\n try {\n await subscriptionPromise;\n }\n catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n let deliveredLocally = false;\n if (!err.__boundedDeliveredToOnError) {\n // A local confirmation timeout belongs to the caller that\n // originated it. Joined callbacks may already have a viable\n // same-id refresh and must not be poisoned by that old attempt.\n deliveredLocally = notifyErrorCallback(subscriptionOptions, err);\n }\n if (!subscriptionOptions.onError) {\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, err);\n // This registration may have acquired joined callbacks while\n // its confirmation was pending. Remove only the originating\n // callback; deleting the whole logical subscription would\n // orphan those remounted consumers and their refresh flight.\n await removeCallbackFromSubscription(connection, subscriptionId, subscriptionOptions);\n throw err;\n }\n if (!err.__boundedDeliveredToOnError && !deliveredLocally) {\n console.warn('[WS v2] Subscription confirmation failed, keeping for reconnect recovery:', error);\n }\n }\n // Return unsubscribe function\n return async () => {\n await removeCallbackFromSubscription(connection, subscriptionId, subscriptionOptions);\n };\n}\nasync function removeCallbackFromSubscription(connection, subscriptionId, callback) {\n var _a;\n const subscription = connection.subscriptions.get(subscriptionId);\n if (!subscription) {\n return;\n }\n // Remove this callback\n subscription.callbacks = subscription.callbacks.filter(cb => cb !== callback);\n (_a = subscription.refresh) === null || _a === void 0 ? void 0 : _a.callbacks.delete(callback);\n // If there are still callbacks, don't unsubscribe\n if (subscription.callbacks.length > 0) {\n return;\n }\n // No more callbacks, unsubscribe from server\n connection.subscriptions.delete(subscriptionId);\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, new Error('Subscription unsubscribed'));\n if (connection.isConnected && !connection.isAuthenticating) {\n // Create a promise to wait for unsubscription confirmation\n const unsubscribePromise = new Promise((resolve, reject) => {\n connection.pendingUnsubscriptions.set(subscriptionId, { resolve, reject });\n // Timeout after 5 seconds\n setTimeout(() => {\n if (connection.pendingUnsubscriptions.has(subscriptionId)) {\n connection.pendingUnsubscriptions.delete(subscriptionId);\n resolve(); // Don't throw on unsubscribe timeout\n }\n }, 5000);\n });\n sendUnsubscribe(connection, subscriptionId);\n await unsubscribePromise;\n }\n // If no more subscriptions, let the connection close after a short idle\n // grace so an immediately-following route remount can reclaim the socket.\n scheduleConnectionCloseIfIdle(connection);\n}\n/**\n * Close all v2 subscriptions.\n */\nexport async function closeAllSubscriptionsV2() {\n const closePromises = [];\n for (const [appId, connection] of connections) {\n cancelIdleConnectionClose(connection);\n const closeError = new Error('Subscriptions closed');\n for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, closeError);\n }\n for (const subscription of connection.subscriptions.values()) {\n rejectSubscriptionRefresh(subscription, closeError);\n }\n if (connection.tokenRefreshTimer) {\n clearInterval(connection.tokenRefreshTimer);\n connection.tokenRefreshTimer = null;\n }\n if (connection.ws) {\n const ws = connection.ws;\n connection.ws = null;\n connection.isConnected = false;\n if (ws.readyState !== WS_READY_STATE_CLOSED) {\n closePromises.push(new Promise((resolve) => {\n ws.addEventListener('close', () => {\n resolve();\n });\n ws.close();\n }));\n }\n }\n connections.delete(appId);\n }\n connectionAcquisitions.clear();\n await Promise.all(closePromises);\n}\n/**\n * Clear the v2 cache.\n */\nexport function clearCacheV2(path) {\n if (path) {\n const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n // Clear all cache entries for this path across ALL identities. Keys are\n // now `<identity>|<path>:...` (H1 principal-scoping), so match the path\n // portion AFTER the identity prefix — otherwise this is a silent no-op.\n for (const key of responseCache.keys()) {\n const sep = key.indexOf('|');\n const pathPart = sep >= 0 ? key.slice(sep + 1) : key;\n if (pathPart.startsWith(normalizedPath)) {\n responseCache.delete(key);\n }\n }\n }\n else {\n responseCache.clear();\n }\n}\n/**\n * Get cached data for a path (v2).\n */\nexport function getCachedDataV2(path, prompt) {\n const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n // H1: response caches are identity-scoped (`<identity>|<path>:...`) and\n // opt-in. Resolve the caller's identity from an active cache-enabled\n // subscription for this path. No matching sub → null (safe).\n let identity;\n let identityToken;\n outer: for (const connection of connections.values()) {\n for (const sub of connection.subscriptions.values()) {\n if (sub.cache && sub.path === normalizedPath && sub.prompt === prompt) {\n identity = sub.identity;\n identityToken = sub.identityToken;\n break outer;\n }\n }\n }\n if (!identity) {\n return null;\n }\n const cacheKey = getCacheKey(path, prompt, undefined, undefined, undefined, undefined, identity);\n const cachedEntry = getResponseCacheEntry(cacheKey, identityToken !== null && identityToken !== void 0 ? identityToken : null);\n if (cachedEntry && Date.now() - cachedEntry.timestamp < CACHE_TTL) {\n return cachedEntry.data;\n }\n return null;\n}\n/**\n * Reconnect all v2 WebSocket connections with fresh authentication.\n * Call this when the user's auth state changes (login/logout).\n *\n * This will:\n * 1. Close existing connections\n * 2. Re-establish with new auth token\n * 3. Re-subscribe to all active paths\n *\n * Note: Existing subscriptions will receive new initial data after reconnection.\n */\nexport async function reconnectWithNewAuthV2() {\n if (reconnectInProgress) {\n return reconnectInProgress;\n }\n reconnectInProgress = doReconnectWithNewAuth();\n try {\n await reconnectInProgress;\n }\n finally {\n reconnectInProgress = null;\n }\n}\nasync function doReconnectWithNewAuth() {\n ambientAuthFailure = null;\n // SECURITY (H1): the logged-in identity is changing (login / logout / switch).\n // Wipe ALL principal-scoped read caches so the new identity can never observe\n // data cached for the previous one. Clear both the WS response cache and the\n // HTTP get() cache (the latter lives in operations.ts — imported dynamically\n // to avoid a static import cycle).\n responseCache.clear();\n // Drop in-memory per-subscription snapshots so they are not redelivered as the\n // previous identity's data after the socket reconnects under new auth.\n for (const connection of connections.values()) {\n for (const sub of connection.subscriptions.values()) {\n sub.lastData = undefined;\n }\n }\n try {\n const { clearReadCacheForAuthChange } = await import('./operations');\n clearReadCacheForAuthChange();\n }\n catch (error) {\n console.warn('[WS v2] Failed to clear HTTP read cache on auth change:', error);\n }\n try {\n const { reconnectRealtimeStoreWithNewAuth } = await import('./realtime-store');\n await reconnectRealtimeStoreWithNewAuth();\n }\n catch (error) {\n console.warn('[WS v2] Failed to reset legacy realtime store on auth change:', error);\n }\n for (const [appId, connection] of connections) {\n if (!connection.ws) {\n continue;\n }\n cancelIdleConnectionClose(connection);\n const reconnectError = new Error('Connection reconnecting due to auth change');\n for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, reconnectError);\n }\n for (const subscription of connection.subscriptions.values()) {\n rejectSubscriptionRefresh(subscription, reconnectError);\n }\n for (const [, pending] of connection.pendingUnsubscriptions) {\n pending.resolve();\n }\n connection.pendingUnsubscriptions.clear();\n // Reset auth failure counter — this is a proactive reconnect (login, token refresh)\n connection.consecutiveAuthFailures = 0;\n connection.authFailure = null;\n // Close the WebSocket (this triggers reconnection in ReconnectingWebSocket)\n // We use reconnect() which will close and re-open with fresh URL (including new token)\n try {\n connection.ws.reconnect();\n }\n catch (error) {\n console.error('[WS v2] Error reconnecting:', error);\n }\n }\n}\n/**\n * Force close and reconnect all connections.\n * This is more aggressive than reconnectWithNewAuthV2() and ensures\n * a complete teardown and rebuild of connections.\n */\nexport async function forceReconnectV2() {\n const reconnectPromises = [];\n const isServer = (await getConfig()).isServer;\n for (const [appId, connection] of connections) {\n if (!connection.ws) {\n continue;\n }\n cancelIdleConnectionClose(connection);\n // Store subscriptions to restore\n const subscriptionsToRestore = Array.from(connection.subscriptions.values());\n // Close the connection\n connection.ws.close();\n connection.ws = null;\n connection.isConnected = false;\n connections.delete(appId);\n // If there were active subscriptions, re-establish connection\n if (subscriptionsToRestore.length > 0) {\n const reconnectPromise = (async () => {\n // Get fresh connection\n const newConnection = await getOrCreateConnection(appId, isServer);\n // Re-register all subscriptions\n for (const sub of subscriptionsToRestore) {\n newConnection.subscriptions.set(sub.subscriptionId, sub);\n }\n // Wait for connection to be ready, then re-subscribe\n // The 'open' handler in getOrCreateConnection will send subscribe messages\n })();\n reconnectPromises.push(reconnectPromise);\n }\n }\n await Promise.all(reconnectPromises);\n}\n// ============ WebSocket request helpers ============\nconst WS_REQUEST_TIMEOUT_MS = 30000;\nfunction generateRequestId() {\n return `req_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;\n}\n/**\n * Returns true if there is an active v2 WebSocket connection open.\n */\nexport function hasActiveConnection() {\n for (const connection of connections.values()) {\n if (connection.ws && connection.isConnected && !connection.isAuthenticating) {\n return true;\n }\n }\n return false;\n}\n/** WS frame byte ceiling for a runQuery batch. The server's raw message gate is\n * 65536 bytes and rejects an oversized frame pre-parse with an UNCORRELATED error\n * (no requestId to fall back on), so the client keeps larger batches on HTTP\n * (which accepts up to 1MB). Headroom left below the hard limit. */\nconst WS_RUNQUERY_MAX_FRAME_BYTES = 60000;\n/**\n * v2 socket-when-warm transport for named/computed query polls (subscribeQuery /\n * runQuery). Runs `queries` over the ambient per-app authenticated socket instead\n * of HTTP `POST /queries`, but ONLY when that is observably safe and identity-correct:\n * - a warm, OPEN, non-authenticating app socket already exists (never opens one);\n * - the server advertised `capabilities.runQuery` on the authenticated ack;\n * - the socket's authenticated principal matches the caller's CURRENT identity\n * (else read rules would evaluate for the wrong user) - reuses the same gate as\n * reliable live intents;\n * - the serialized frame fits the WS message limit.\n * Returns the per-row array on a clean socket success; returns null - meaning\n * \"fall back to HTTP\" - for every miss/refusal (no socket, no capability, identity\n * skew, oversized batch, the server's own `{ useHttp: true }` deferral, or any\n * timeout / disconnect / error frame). The rows are byte-identical to POST /queries,\n * so the caller is transport-agnostic and never observes which transport won.\n */\nexport async function runNamedQueriesOverSocket(appId, queries, isServer) {\n var _a;\n const connection = connections.get(appId);\n if (!connection || !connection.ws || connection.ws.readyState !== WS_READY_STATE_OPEN || connection.isAuthenticating) {\n return null; // no warm socket -> HTTP (never open one just for queries)\n }\n if (!((_a = connection.capabilities) === null || _a === void 0 ? void 0 : _a.runQuery)) {\n return null; // server did not advertise the capability -> HTTP\n }\n if (!(await canSendAuthenticatedLiveIntent(connection, isServer).catch(() => false))) {\n return null; // identity skew / mid-refresh -> HTTP runs under the current token\n }\n const requestId = generateRequestId();\n const frame = JSON.stringify({ type: 'runQuery', requestId, queries });\n if (frame.length > WS_RUNQUERY_MAX_FRAME_BYTES) {\n return null; // oversized -> HTTP (see WS_RUNQUERY_MAX_FRAME_BYTES)\n }\n let data;\n try {\n data = await new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n connection.pendingRequests.delete(requestId);\n reject(new Error(`runQuery ack timed out after ${WS_REQUEST_TIMEOUT_MS}ms`));\n }, WS_REQUEST_TIMEOUT_MS);\n connection.pendingRequests.set(requestId, { resolve, reject, timer });\n try {\n connection.ws.send(frame);\n }\n catch (e) {\n connection.pendingRequests.delete(requestId);\n clearTimeout(timer);\n reject(e);\n }\n });\n }\n catch (_b) {\n return null; // timeout / disconnect / server error frame -> HTTP re-runs authoritatively\n }\n if ((data === null || data === void 0 ? void 0 : data.useHttp) === true)\n return null; // server deferred (onchain, cross-room, malformed)\n if (Array.isArray(data === null || data === void 0 ? void 0 : data.queries))\n return data.queries;\n return null; // unexpected shape -> HTTP\n}\n/**\n * Send a live-room intent over the EXISTING per-room socket (fire-and-forget).\n * Returns true if it was sent over an open connection, false if there is no\n * live socket for this room yet (caller falls back to HTTP). The worker is the\n * room authority — the connection is already routed to the room DO, so the\n * client never names a destination.\n */\nexport async function wsIntent(appId, roomRoutePath, intent, isServer) {\n const roomKey = roomKeyFromRoutePath(roomRoutePath);\n const connKey = roomKey ? `${appId}#room#${roomKey}` : appId;\n const connection = connections.get(connKey);\n if (!connection || !connection.ws || connection.ws.readyState !== WS_READY_STATE_OPEN || connection.isAuthenticating) {\n return false;\n }\n // Identity-aware send gate. The server attributes intents to the\n // CONNECTION's authenticated principal, so the only correct reasons to\n // refuse the socket are identity ones:\n // - the socket is anonymous while the user is now authenticated, or\n // - the current principal DIFFERS from the socket principal.\n // A mere token rotation for the SAME principal, or a transiently-null\n // token mid-refresh, must NOT reroute a 30Hz command stream to\n // per-command HTTP — that collapses delivery rate and unbounds the game's\n // ack lag (field-debugged: server 500+ commands behind).\n const currentToken = await getIdToken(isServer).catch(() => null);\n if (!currentToken) {\n // Mid-refresh: the socket principal still governs server-side.\n if (!connection.authTokenValue && !connection.authPrincipal)\n return false;\n }\n else if (!connection.authTokenValue && !connection.authPrincipal) {\n // Anonymous socket + authenticated user: do not attribute this user's\n // input to the anon principal. Reauth the socket; caller may fall back.\n void maybeReauthRoomConnection(connection, isServer);\n return false;\n }\n else if (!connectionMatchesAuthToken(connection, currentToken)) {\n // Different principal (identity switch): never send as the old user.\n void maybeReauthRoomConnection(connection, isServer);\n return false;\n }\n try {\n connection.ws.send(JSON.stringify({ type: 'intent', intent }));\n return true;\n }\n catch (_a) {\n return false;\n }\n}\n// Debounced background reauth: when the client's current token no longer\n// matches the connection's authenticated identity (token rotation), refresh the\n// socket auth ONCE rather than degrading every subsequent send.\nconst reauthInFlight = new WeakSet();\nasync function maybeReauthRoomConnection(connection, isServer) {\n try {\n if (reauthInFlight.has(connection))\n return;\n reauthInFlight.add(connection);\n try {\n await reconnectWithNewAuthV2();\n }\n finally {\n reauthInFlight.delete(connection);\n }\n }\n catch (_a) {\n // Best-effort: the next send retries; the server still enforces auth.\n }\n}\n/** True when an OPEN room socket exists for this room path. */\nexport function hasOpenRoomConnection(appId, roomRoutePath) {\n const roomKey = roomKeyFromRoutePath(roomRoutePath);\n const connKey = roomKey ? `${appId}#room#${roomKey}` : appId;\n const connection = connections.get(connKey);\n return !!(connection && connection.ws && connection.ws.readyState === WS_READY_STATE_OPEN);\n}\n/**\n * Send a live-room intent over the EXISTING per-room socket and AWAIT the server\n * ack — so a policy/auth denial (401/403/404/503) REJECTS instead of being\n * silently dropped (the fire-and-forget `wsIntent` discards request-less error\n * frames). Use for semantically important intents (join/ready/leave). Returns a\n * Promise that resolves on ack / rejects on error, or `undefined` if no live\n * socket exists yet (caller falls back to HTTP, which also surfaces errors).\n */\nexport async function wsIntentReliable(appId, roomRoutePath, intent, isServer) {\n const roomKey = roomKeyFromRoutePath(roomRoutePath);\n const connKey = roomKey ? `${appId}#room#${roomKey}` : appId;\n const connection = connections.get(connKey);\n if (!connection || !connection.ws || connection.ws.readyState !== WS_READY_STATE_OPEN || connection.isAuthenticating) {\n return undefined;\n }\n if (!(await canSendAuthenticatedLiveIntent(connection, isServer))) {\n return undefined;\n }\n const requestId = generateRequestId();\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n connection.pendingRequests.delete(requestId);\n reject(new Error(`Live intent ack timed out after ${WS_REQUEST_TIMEOUT_MS}ms`));\n }, WS_REQUEST_TIMEOUT_MS);\n connection.pendingRequests.set(requestId, {\n resolve: (data) => resolve((data !== null && data !== void 0 ? data : { ok: true })),\n reject,\n timer,\n });\n try {\n connection.ws.send(JSON.stringify({ type: 'intent', requestId, intent }));\n }\n catch (e) {\n connection.pendingRequests.delete(requestId);\n clearTimeout(timer);\n reject(e);\n }\n });\n}\n","import { makeApiRequest } from '../utils/api';\nimport { getConfig, isBoundedNetwork, isBoundedNetworkConfig } from './config';\nimport { runNamedQueriesOverSocket } from './subscription-v2';\nimport { getIdToken } from '../utils/utils';\nimport { safeBtoa } from '../utils/core-platform';\n/**\n * Thrown when a user's wallet doesn't have enough SOL to cover the transaction.\n * Apps can catch this to trigger an onramp/funding flow.\n */\nexport class InsufficientBalanceError extends Error {\n constructor(address, balanceLamports, estimatedCostLamports, deficitLamports, deficitSol) {\n super(`Insufficient balance: wallet ${address} needs ~${deficitSol.toFixed(6)} SOL more to complete this transaction.`);\n this.name = 'InsufficientBalanceError';\n this.address = address;\n this.balanceLamports = balanceLamports;\n this.estimatedCostLamports = estimatedCostLamports;\n this.deficitLamports = deficitLamports;\n this.deficitSol = deficitSol;\n }\n}\nconst getCache = {};\nconst pendingRequests = {};\n// Default cache TTL (500ms = 0.5 seconds)\nconst GET_CACHE_TTL = 500; // Adjust this value as needed (in milliseconds)\nfunction getReadCacheEntry(cacheKey, principalValue) {\n var _a;\n return (_a = getCache[cacheKey]) === null || _a === void 0 ? void 0 : _a.find(entry => entry.principalValue === principalValue);\n}\nfunction setReadCacheEntry(cacheKey, principalValue, data, expiresAt) {\n var _a;\n const bucket = (_a = getCache[cacheKey]) !== null && _a !== void 0 ? _a : [];\n const reusableEntries = bucket.filter(entry => (entry.principalValue !== principalValue && entry.expiresAt >= Date.now()));\n reusableEntries.push({ data, expiresAt, principalValue });\n getCache[cacheKey] = reusableEntries;\n}\n// Last time we cleaned up the cache\nlet lastCacheCleanup = Date.now();\nlet uncacheableReadKeyCounter = 0;\n/**\n * Return the leaf document key (last path segment) for a document path.\n *\n * Bounded rows carry `_id` (and `pathId`) set to the FULL document path\n * (e.g. `\"rooms/r1/prompts/8rd49se3sg\"`). Apps that build a child path from a\n * row naturally want the bare doc key, not the whole path — using the full path\n * doubles it (`rooms/r1/prompts/rooms/r1/prompts/8rd.../votes/...`) → 403/404.\n * `docId` extracts that leaf key. Tolerates leading slashes and a trailing `*`.\n *\n * @example docId(\"rooms/r1/prompts/8rd49se3sg\") // \"8rd49se3sg\"\n */\nexport function docId(path) {\n if (typeof path !== 'string')\n return '';\n let p = path.startsWith('/') ? path.slice(1) : path;\n if (p.endsWith('*') && p.length > 1)\n p = p.slice(0, -1);\n if (p.endsWith('/'))\n p = p.slice(0, -1);\n const segments = p.split('/').filter(Boolean);\n return segments.length ? segments[segments.length - 1] : '';\n}\n/**\n * Additively attach a convenience bare `id` (the leaf doc key) to a returned row.\n *\n * Rows already carry `_id`/`pathId` = the full document path; this leaves those\n * untouched and adds `id` = the last path segment so `row.id` is the doc key apps\n * expect. No-ops for non-objects, arrays, and rows that already define `id`\n * (never clobber a user field named `id`). Source for the leaf is `_id` (falling\n * back to `pathId`/`relativePath`/`absolutePath`).\n */\nfunction withBareId(row) {\n var _a, _b, _c;\n if (!row || typeof row !== 'object' || Array.isArray(row))\n return row;\n const r = row;\n if ('id' in r)\n return row; // don't clobber an explicit user field\n const source = (_c = (_b = (_a = r._id) !== null && _a !== void 0 ? _a : r.pathId) !== null && _b !== void 0 ? _b : r.relativePath) !== null && _c !== void 0 ? _c : r.absolutePath;\n if (typeof source !== 'string' || source.length === 0)\n return row;\n const leaf = docId(source);\n if (!leaf)\n return row;\n return Object.assign(Object.assign({}, r), { id: leaf });\n}\n/**\n * Normalize a raw read response from the worker into the SDK's stable shape and\n * attach the bare `id` to every returned row (Bug 1 + Bug 2).\n *\n * - Single-document path: returns EXACTLY ONE shape — the resolved document, or\n * `null` if missing (Firebase/Mongo convention). Unwraps the ambiguous\n * `{ data, status }` envelope the worker sometimes emits for a single doc so a\n * single-doc `get` never sometimes-returns the doc and sometimes the envelope.\n * - Collection path: preserves the `{ data, nextCursor, ... }` envelope and maps\n * the bare `id` onto each row in `data`.\n */\nfunction normalizeReadResult(responseData, pathIsDocument) {\n if (pathIsDocument) {\n let doc = responseData;\n // Unwrap the single-doc envelope `{ data, status }` (Bug 2). A real document\n // never has the exact shape `{ data, status }` with nothing else meaningful,\n // so detect the envelope by `data` + numeric `status` AND the absence of a\n // top-level `_id` (a real stored doc always carries `_id`/`pathId` from the\n // worker; the envelope wrapper does not). This avoids unwrapping a genuine\n // document that merely happens to own `data`/`status` fields.\n if (doc && typeof doc === 'object' && !Array.isArray(doc) &&\n 'data' in doc && 'status' in doc && typeof doc.status === 'number' &&\n !('_id' in doc) && !('pathId' in doc)) {\n doc = doc.data;\n }\n if (doc === undefined || doc === null)\n return null;\n return withBareId(doc);\n }\n // Collection read. The worker body is `{ data: rows[], nextCursor?, status? }`.\n if (responseData && typeof responseData === 'object' && !Array.isArray(responseData) && Array.isArray(responseData.data)) {\n return Object.assign(Object.assign({}, responseData), { data: responseData.data.map((row) => withBareId(row)) });\n }\n // Some paths return a bare array of rows — map id onto each.\n if (Array.isArray(responseData)) {\n return responseData.map((row) => withBareId(row));\n }\n return responseData;\n}\nfunction hashForKey(value) {\n let h = 5381;\n for (let i = 0; i < value.length; i++) {\n h = ((h << 5) + h + value.charCodeAt(i)) & 0x7fffffff;\n }\n return h.toString(36);\n}\n// Memoize the compact principal hash per exact credential string. Every read\n// hashed the entire (~1KB) bearer/idToken on every call; a session presents\n// the same handful of credentials for its lifetime. Bounded size — a rotation\n// simply inserts the new token and stale entries fall off on clear.\nconst principalHashCache = new Map();\nfunction hashForKeyCached(value) {\n const hit = principalHashCache.get(value);\n if (hit !== undefined)\n return hit;\n const h = hashForKey(value);\n if (principalHashCache.size >= 50)\n principalHashCache.clear();\n principalHashCache.set(value, h);\n return h;\n}\n// #022: HTTP header names are case-insensitive on the wire, so recognize `authorization`\n// in ANY casing when deriving the per-user cache key. Otherwise a caller-supplied\n// `AUTHORIZATION: <token B>` rides into the request while the cache key is computed from\n// the ambient token A - filing B's data under A's identity. The cache key must always be\n// derived from the same credential the request authenticates with.\nfunction authHeaderEntry(headers) {\n if (!headers)\n return undefined;\n for (const name of Object.keys(headers)) {\n if (name.toLowerCase() === 'authorization')\n return headers[name];\n }\n return undefined;\n}\nfunction hasAuthHeader(headers) {\n return authHeaderEntry(headers) !== undefined;\n}\nfunction authValueFromHeaders(headers) {\n return authHeaderEntry(headers) || '';\n}\nfunction principalFromAuthValue(authValue) {\n return authValue ? `h${hashForKeyCached(authValue)}` : null;\n}\nfunction principalFromIdToken(idToken) {\n return idToken ? `t${hashForKeyCached(idToken)}` : null;\n}\nfunction uncacheableReadKey(appId, scope) {\n uncacheableReadKeyCounter += 1;\n return `${appId}:${scope}-uncacheable-${uncacheableReadKeyCounter}`;\n}\n/**\n * SECURITY (H1): Read caches must be keyed by the caller's principal, not just\n * by path/filter/shape. In a shared process / SSR worker / browser login-switch,\n * keying by path alone lets User B receive User A's cached private read before\n * any server read rule runs. This returns `appId:<principal>` for the opaque\n * auth material a given read will actually authenticate with. No-auth reads are\n * deliberately marked uncacheable instead of sharing an implicit `anon` bucket.\n * JWTs are intentionally treated as opaque unverified bearer material — never\n * decoded claims and never caller identity hints such as `_walletAddress`.\n */\nasync function getReadPrincipalKey(overrides) {\n var _a;\n const config = (_a = overrides === null || overrides === void 0 ? void 0 : overrides._config) !== null && _a !== void 0 ? _a : await getConfig();\n const appId = config.appId || '';\n // A scoped read-only instance sends no auth and must never consult the ambient\n // global session for a principal - its reads are always uncacheable (no\n // per-user cache reuse, but also no cross-app/cross-user leak).\n if (overrides === null || overrides === void 0 ? void 0 : overrides._readOnly) {\n return { key: uncacheableReadKey(appId, 'ro'), cacheable: false, principalValue: null };\n }\n // makeApiRequest applies overrides.headers AFTER its computed auth header, so\n // caller-supplied Authorization is the real request auth when present.\n if (hasAuthHeader(overrides === null || overrides === void 0 ? void 0 : overrides.headers)) {\n const authValue = authValueFromHeaders(overrides === null || overrides === void 0 ? void 0 : overrides.headers);\n const principal = principalFromAuthValue(authValue);\n return principal\n ? { key: `${appId}:${principal}`, cacheable: true, principalValue: authValue }\n : { key: uncacheableReadKey(appId, 'h'), cacheable: false, principalValue: null };\n }\n // Per-request auth-header override (wallet client). Key by the exact opaque\n // header it produces, not decoded claims or the unverified _walletAddress hint.\n if (overrides === null || overrides === void 0 ? void 0 : overrides._getAuthHeaders) {\n try {\n const headers = await overrides._getAuthHeaders();\n const authValue = authValueFromHeaders(headers);\n const principal = principalFromAuthValue(authValue);\n return principal\n ? { key: `${appId}:o${principal}`, cacheable: true, principalValue: authValue }\n : { key: uncacheableReadKey(appId, 'o'), cacheable: false, principalValue: null };\n }\n catch (_b) {\n // If we can't resolve the override identity, do not read/write cache.\n return { key: uncacheableReadKey(appId, 'o'), cacheable: false, principalValue: null };\n }\n }\n // Ambient session principal.\n const idToken = await getIdToken(config.isServer);\n const principal = principalFromIdToken(idToken);\n return principal\n ? { key: `${appId}:${principal}`, cacheable: true, principalValue: idToken !== null && idToken !== void 0 ? idToken : null }\n : { key: uncacheableReadKey(appId, 'a'), cacheable: false, principalValue: null };\n}\n/**\n * Validates that a field name is a safe identifier (alphanumeric, underscores, dots for nested paths).\n * Prevents prompt injection via crafted field names.\n */\nfunction validateFieldName(field) {\n if (!/^[a-zA-Z0-9_.]+$/.test(field)) {\n throw new Error(`Invalid field name \"${field}\". Field names must only contain letters, numbers, underscores, and dots.`);\n }\n}\n/**\n * Parses a raw aggregation result (e.g. [{ count: 42 }] or [{ _id: null, total: 100 }])\n * into a single numeric value.\n */\nfunction parseAggregateValue(result) {\n if (typeof result === 'number')\n return result;\n if (Array.isArray(result)) {\n if (result.length === 0)\n return 0;\n // Multiple elements — not a collapsed aggregate result\n if (result.length > 1) {\n throw new Error(`Unexpected aggregate result: got array with ${result.length} elements. The AI may have returned full documents instead of an aggregation.`);\n }\n const first = result[0];\n if (typeof first === 'number')\n return first;\n if (first && typeof first === 'object') {\n // $count stage returns { count: N }\n if (typeof first.count === 'number')\n return first.count;\n // $group stage returns { _id: null, result: N } — expect _id + one numeric field\n const numericEntries = Object.entries(first).filter(([key, val]) => key !== '_id' && typeof val === 'number');\n if (numericEntries.length === 1)\n return numericEntries[0][1];\n }\n // Avoid leaking document contents into error messages\n const shape = first && typeof first === 'object' ? `{${Object.keys(first).join(', ')}}` : String(first);\n throw new Error(`Unexpected aggregate result shape: ${shape}. Expected {count: N} or {_id: null, <field>: N}.`);\n }\n if (result && typeof result === 'object' && typeof result.count === 'number') {\n return result.count;\n }\n throw new Error(`Unexpected aggregate result type: ${typeof result}. Expected a number, array, or object with a count field.`);\n}\n/**\n * Count items in a collection path. Returns a numeric result.\n *\n * This uses the AI query engine with a count-specific prompt prefix,\n * so Bounded will generate a $count aggregation pipeline and return\n * just the count rather than full documents.\n *\n * IMPORTANT: This only works for collections where the read policy is \"true\".\n * If the read policy requires per-document checks, the server will return\n * an error because aggregate counts cannot be performed without pulling all\n * documents for access control evaluation.\n *\n * @param path - Collection path (e.g., \"posts\", \"users/abc/comments\")\n * @param opts - Optional filter prompt and overrides\n * @returns AggregateResult with the count value\n */\n/** Whether these opts target a Bounded network - honoring a scoped instance's\n * own config (`_overrides._config`) rather than the module global. */\nfunction optsTargetBounded(overrides) {\n return (overrides === null || overrides === void 0 ? void 0 : overrides._config) ? isBoundedNetworkConfig(overrides._config) : isBoundedNetwork();\n}\nexport async function count(path, opts = {}) {\n var _a, _b;\n // On Bounded, the worker has no AI query engine — a prompt-based count returns\n // the raw documents, not an aggregation. Use the deterministic server\n // aggregation (queryAggregate) instead.\n if (optsTargetBounded(opts._overrides)) {\n const rows = await queryAggregate(path, { count: true }, { filter: opts.filter, _overrides: opts._overrides });\n return { value: (_b = (_a = rows[0]) === null || _a === void 0 ? void 0 : _a.count) !== null && _b !== void 0 ? _b : 0 };\n }\n const prefix = 'Return ONLY the total count of matching documents. Use the $count stage to produce a field named \"count\". Do NOT return the documents themselves.';\n const fullPrompt = opts.prompt\n ? `${prefix} Filter: ${opts.prompt}`\n : prefix;\n const result = await get(path, { prompt: fullPrompt, bypassCache: true, _overrides: opts._overrides });\n return { value: parseAggregateValue(result) };\n}\n/**\n * Bounded-native implementation of `aggregate`: map the single-scalar operation\n * onto the deterministic `queryAggregate` server aggregation and pull the value\n * out of the (single, ungrouped) result row. Empty collection → 0.\n */\nasync function boundedAggregate(path, operation, opts) {\n var _a, _b, _c;\n const qopts = { filter: opts.filter, _overrides: opts._overrides };\n if (operation === 'count') {\n const rows = await queryAggregate(path, { count: true }, qopts);\n return (_b = (_a = rows[0]) === null || _a === void 0 ? void 0 : _a.count) !== null && _b !== void 0 ? _b : 0;\n }\n if (!opts.field)\n throw new Error(`aggregate \"${operation}\" requires a field option`);\n validateFieldName(opts.field);\n if (operation === 'uniqueCount') {\n // distinct values = number of groups when grouping by the field.\n const rows = await queryAggregate(path, { groupBy: [opts.field] }, qopts);\n return rows.length;\n }\n // sum / avg / min / max → one bucket keyed by the field on the single row.\n const rows = await queryAggregate(path, { [operation]: [opts.field] }, qopts);\n const bucket = (_c = rows[0]) === null || _c === void 0 ? void 0 : _c[operation];\n const v = bucket === null || bucket === void 0 ? void 0 : bucket[opts.field];\n return typeof v === 'number' ? v : 0;\n}\n/**\n * Run an aggregate operation on a collection path. Returns a numeric result.\n *\n * Supported operations:\n * - count: Total number of documents\n * - uniqueCount: Number of distinct values for a field\n * - sum: Sum of a numeric field\n * - avg: Average of a numeric field\n * - min: Minimum value of a numeric field\n * - max: Maximum value of a numeric field\n *\n * IMPORTANT: This only works for collections where the read policy is \"true\".\n * If the read policy requires per-document checks, the server will return\n * an error because aggregate operations cannot be performed without pulling\n * all documents for access control evaluation.\n *\n * @param path - Collection path (e.g., \"posts\", \"users/abc/comments\")\n * @param operation - The aggregate operation to perform\n * @param opts - Options including optional filter prompt and field name\n * @returns AggregateResult with the computed numeric value\n */\nexport async function aggregate(path, operation, opts = {}) {\n // On Bounded, route through the deterministic server aggregation — the legacy\n // AI-prompt path returns raw documents on the worker (no AI query engine).\n if (optsTargetBounded(opts._overrides)) {\n return { value: await boundedAggregate(path, operation, opts) };\n }\n let prefix;\n switch (operation) {\n case 'count':\n prefix = 'Return ONLY the total count of matching documents. Use the $count stage to produce a field named \"count\". Do NOT return the documents themselves.';\n break;\n case 'uniqueCount':\n if (!opts.field)\n throw new Error('aggregate \"uniqueCount\" requires a field option');\n validateFieldName(opts.field);\n prefix = `Return ONLY the count of unique/distinct values of the \"${opts.field}\" field. Use $group with _id set to \"$${opts.field}\" then $count to produce a field named \"count\". Do NOT return the documents themselves.`;\n break;\n case 'sum':\n if (!opts.field)\n throw new Error('aggregate \"sum\" requires a field option');\n validateFieldName(opts.field);\n prefix = `Return ONLY the sum of the \"${opts.field}\" field across all matching documents. Use $group with _id: null and result: { $sum: \"$${opts.field}\" }. Do NOT return the documents themselves.`;\n break;\n case 'avg':\n if (!opts.field)\n throw new Error('aggregate \"avg\" requires a field option');\n validateFieldName(opts.field);\n prefix = `Return ONLY the average of the \"${opts.field}\" field across all matching documents. Use $group with _id: null and result: { $avg: \"$${opts.field}\" }. Do NOT return the documents themselves.`;\n break;\n case 'min':\n if (!opts.field)\n throw new Error('aggregate \"min\" requires a field option');\n validateFieldName(opts.field);\n prefix = `Return ONLY the minimum value of the \"${opts.field}\" field across all matching documents. Use $group with _id: null and result: { $min: \"$${opts.field}\" }. Do NOT return the documents themselves.`;\n break;\n case 'max':\n if (!opts.field)\n throw new Error('aggregate \"max\" requires a field option');\n validateFieldName(opts.field);\n prefix = `Return ONLY the maximum value of the \"${opts.field}\" field across all matching documents. Use $group with _id: null and result: { $max: \"$${opts.field}\" }. Do NOT return the documents themselves.`;\n break;\n default:\n throw new Error(`Unsupported aggregate operation: ${operation}`);\n }\n const fullPrompt = opts.prompt\n ? `${prefix} Filter: ${opts.prompt}`\n : prefix;\n const result = await get(path, { prompt: fullPrompt, bypassCache: true, _overrides: opts._overrides });\n // For uniqueCount, the AI may return $group results without the final $count\n // stage, producing [{_id: \"val1\"}, {_id: \"val2\"}, ...]. Verify elements look\n // like $group output (only _id key) before using array length as the count.\n if (operation === 'uniqueCount' && Array.isArray(result) && result.length > 1) {\n const looksLikeGroupOutput = result.every((el) => el && typeof el === 'object' && Object.keys(el).length === 1 && '_id' in el);\n if (looksLikeGroupOutput) {\n return { value: result.length };\n }\n throw new Error(`Unexpected uniqueCount result: got ${result.length} elements that don't match $group output shape.`);\n }\n return { value: parseAggregateValue(result) };\n}\n/**\n * Structured, grouped aggregation over a collection. Returns one row per group\n * (or a single row when `spec.groupBy` is omitted). Read rules are enforced — the\n * aggregation only sees documents the caller can read.\n *\n * ```ts\n * const byCat = await queryAggregate(\"spend\", { groupBy: [\"category\"], count: true, sum: [\"amount\"] });\n * // [{ group: { category: \"food\" }, count: 2, sum: { amount: 70 } }, ...]\n * ```\n */\nexport async function queryAggregate(path, spec, opts = {}) {\n var _a, _b, _c, _d, _e;\n let normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n if (normalizedPath.endsWith(\"*\") && normalizedPath.length > 1) {\n normalizedPath = normalizedPath.slice(0, -1);\n }\n if (!normalizedPath || normalizedPath.length === 0) {\n throw new Error(\"Invalid path provided.\");\n }\n // Validate every referenced field name to prevent injection via crafted keys.\n // Each of these takes an ARRAY of field names — catch the common mistake of\n // passing an object/string (e.g. `sum: { field: \"n\" }`) with a clear error\n // instead of a cryptic \"list is not iterable\" from the for-of below.\n for (const key of ['groupBy', 'sum', 'avg', 'min', 'max']) {\n const list = spec[key];\n if (list == null)\n continue;\n if (!Array.isArray(list)) {\n throw new Error(`queryAggregate: spec.${key} must be an array of field names ` +\n `(e.g. ${key}: [\"amount\"]), got ${typeof list}`);\n }\n for (const f of list)\n validateFieldName(f);\n }\n const cleanSpec = {};\n if ((_a = spec.groupBy) === null || _a === void 0 ? void 0 : _a.length)\n cleanSpec.groupBy = spec.groupBy;\n if (spec.count)\n cleanSpec.count = true;\n if ((_b = spec.sum) === null || _b === void 0 ? void 0 : _b.length)\n cleanSpec.sum = spec.sum;\n if ((_c = spec.avg) === null || _c === void 0 ? void 0 : _c.length)\n cleanSpec.avg = spec.avg;\n if ((_d = spec.min) === null || _d === void 0 ? void 0 : _d.length)\n cleanSpec.min = spec.min;\n if ((_e = spec.max) === null || _e === void 0 ? void 0 : _e.length)\n cleanSpec.max = spec.max;\n const aggParam = `&aggregate=${encodeURIComponent(JSON.stringify(cleanSpec))}`;\n const filterParam = opts.filter ? `&filter=${encodeURIComponent(JSON.stringify(opts.filter))}` : '';\n const apiPath = `items?path=${encodeURIComponent(normalizedPath)}${aggParam}${filterParam}`;\n const response = await makeApiRequest('GET', apiPath, null, opts._overrides);\n const body = response.data;\n // Worker returns { data: AggregateRow[], nextCursor, status } for aggregate queries.\n if (Array.isArray(body))\n return body;\n if (body && Array.isArray(body.data))\n return body.data;\n return [];\n}\n/**\n * Full-text search a collection declared with `search: { fields: [...] }`.\n *\n * The match runs over the collection's indexed fields (or the subset passed in\n * `opts.fields`) and respects each document's `read` rule — results the caller\n * cannot read are omitted. Returns the matching documents (optionally paged via\n * `opts.limit`/`opts.cursor`).\n *\n * @param path Collection path, e.g. \"orgs/o1/docs\"\n * @param query Free-text query string (non-empty)\n */\nexport async function search(path, query, opts = {}) {\n let normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n if (normalizedPath.endsWith(\"*\") && normalizedPath.length > 1) {\n normalizedPath = normalizedPath.slice(0, -1);\n }\n if (!normalizedPath || normalizedPath.length === 0) {\n throw new Error(\"Invalid path provided.\");\n }\n if (typeof query !== \"string\" || query.trim().length === 0) {\n throw new Error(\"search query must be a non-empty string\");\n }\n if (opts.fields) {\n for (const f of opts.fields)\n validateFieldName(f);\n }\n const spec = { query };\n if (opts.fields && opts.fields.length > 0)\n spec.fields = opts.fields;\n const searchParam = `&search=${encodeURIComponent(JSON.stringify(spec))}`;\n const limitParam = opts.limit !== undefined ? `&limit=${opts.limit}` : '';\n const cursorParam = opts.cursor ? `&cursor=${encodeURIComponent(opts.cursor)}` : '';\n const apiPath = `items?path=${encodeURIComponent(normalizedPath)}${searchParam}${limitParam}${cursorParam}`;\n const response = await makeApiRequest('GET', apiPath, null, opts._overrides);\n return response.data;\n}\nexport async function get(path, opts = {}) {\n var _a, _b, _c;\n try {\n let normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n // Remove last '*' if it exists in the path\n if (normalizedPath.endsWith(\"*\") && normalizedPath.length > 1) {\n normalizedPath = normalizedPath.slice(0, -1);\n }\n if (!normalizedPath || normalizedPath.length === 0) {\n throw new Error(\"Invalid path provided.\");\n }\n // Create cache key combining path, prompt, filter, sort, includeSubPaths,\n // shape, limit, cursor — and (H1) the caller's appId + compact principal\n // bucket. Exact opaque credential equality is checked inside that bucket,\n // so a private read cached for one user is never served to another in a\n // shared process / SSR worker / browser login-switch. The cache is opt-in\n // and disabled for no-auth reads, which get an uncacheable unique key.\n const shapeKey = opts.shape ? JSON.stringify(opts.shape) : '';\n const includeSubPathsKey = opts.includeSubPaths ? ':subpaths' : '';\n const limitKey = opts.limit !== undefined ? `:l${opts.limit}` : '';\n const cursorKey = opts.cursor ? `:c${hashForKey(opts.cursor)}` : '';\n const filterKey = opts.filter ? `:f${hashForKey(JSON.stringify(opts.filter))}` : '';\n const sortKey = opts.sort ? `:s${hashForKey(JSON.stringify(opts.sort))}` : '';\n const principalKey = await getReadPrincipalKey(opts._overrides);\n const cacheKey = `${principalKey.key}|${normalizedPath}:${opts.prompt || ''}${filterKey}${sortKey}${includeSubPathsKey}:${shapeKey}${limitKey}${cursorKey}`;\n const cacheEnabled = opts.cache === true && !opts.bypassCache && principalKey.cacheable;\n const now = Date.now();\n // Check for valid cache entry when the caller explicitly opted in.\n const cachedEntry = getReadCacheEntry(cacheKey, principalKey.principalValue);\n if (cacheEnabled &&\n cachedEntry &&\n now < cachedEntry.expiresAt) {\n return cachedEntry.data;\n }\n // If we're bypassing cache, we should still coalesce identical requests\n // but need a different key to avoid interfering with regular requests.\n // Abortable calls are deliberately never coalesced: sharing one Axios\n // promise would let an old route's AbortSignal cancel a newer consumer of\n // the same path, or make the newer consumer inherit the old cancellation.\n const requestKey = opts.bypassCache ? `bypass:${cacheKey}` : cacheKey;\n const shouldCoalesce = !((_a = opts._overrides) === null || _a === void 0 ? void 0 : _a.signal);\n // The compact principal hash is only an index bucket. Coalesce only when\n // the exact opaque credential also matches, so collisions stay isolated.\n const existingPending = shouldCoalesce\n ? (_b = pendingRequests[requestKey]) === null || _b === void 0 ? void 0 : _b.find(entry => entry.principalValue === principalKey.principalValue)\n : undefined;\n if (existingPending) {\n return existingPending.promise;\n }\n // Create a new request promise and store it\n let requestPromise;\n requestPromise = (async () => {\n var _a;\n try {\n const pathIsDocument = normalizedPath.split(\"/\").length % 2 === 0;\n // Cache miss or bypass - proceed with HTTP API request\n let response;\n // Build common query params\n const includeSubPathsParam = opts.includeSubPaths ? '&includeSubPaths=true' : '';\n const shapeParam = opts.shape ? `&shape=${encodeURIComponent(JSON.stringify(opts.shape))}` : '';\n const limitParam = opts.limit !== undefined ? `&limit=${opts.limit}` : '';\n const cursorParam = opts.cursor ? `&cursor=${encodeURIComponent(opts.cursor)}` : '';\n const filterParam = opts.filter ? `&filter=${encodeURIComponent(JSON.stringify(opts.filter))}` : '';\n const sortParam = opts.sort ? `&sort=${encodeURIComponent(JSON.stringify(opts.sort))}` : '';\n if (pathIsDocument) {\n const itemId = encodeURIComponent(normalizedPath);\n const queryParams = [includeSubPathsParam, shapeParam].filter(p => p).join('');\n const apiPath = queryParams ? `items/${itemId}?${queryParams.substring(1)}` : `items/${itemId}`;\n response = await makeApiRequest('GET', apiPath, null, opts._overrides);\n }\n else {\n const path = encodeURIComponent(normalizedPath);\n // encodeURIComponent the base64: safeBtoa emits standard base64 (with '+' '/' '='),\n // and a raw '+' in a query string decodes to a space on the server\n // (url.searchParams.get), corrupting the exact non-ASCII prompts DS2-0463 fixed. The\n // server percent-decodes back to the original base64 before decodeUtf8Base64. (DS2-0463)\n const promptQueryParam = (opts === null || opts === void 0 ? void 0 : opts.prompt) ? `&prompt=${encodeURIComponent(safeBtoa(opts.prompt))}` : \"\";\n const apiPath = `items?path=${path}${promptQueryParam}${filterParam}${sortParam}${includeSubPathsParam}${shapeParam}${limitParam}${cursorParam}`;\n response = await makeApiRequest('GET', apiPath, null, opts._overrides);\n }\n // Normalize the worker's raw body into the SDK's stable shape:\n // - single-doc path → the resolved document or null (Bug 2), and\n // - collection path → `{ data, nextCursor }` preserved,\n // with the bare `id` (leaf doc key) attached to every returned row (Bug 1).\n const responseData = normalizeReadResult(response.data, pathIsDocument);\n // Cache the response only when explicitly requested and principal-bound.\n if (cacheEnabled) {\n setReadCacheEntry(cacheKey, principalKey.principalValue, responseData, now + GET_CACHE_TTL);\n // Periodically clean up expired cache entries (every 5 seconds)\n if (now - lastCacheCleanup > 5000) {\n cleanupExpiredCache();\n lastCacheCleanup = now;\n }\n }\n // Return the data from the response\n return responseData;\n }\n finally {\n // Remove only this exact request. A colliding principal can legitimately\n // have another request in the same compact-hash bucket.\n if (shouldCoalesce) {\n const bucket = pendingRequests[requestKey];\n const index = (_a = bucket === null || bucket === void 0 ? void 0 : bucket.findIndex(entry => entry.promise === requestPromise)) !== null && _a !== void 0 ? _a : -1;\n if (index >= 0)\n bucket.splice(index, 1);\n if ((bucket === null || bucket === void 0 ? void 0 : bucket.length) === 0)\n delete pendingRequests[requestKey];\n }\n }\n })();\n // Store the promise so only callers with the exact same credential join it.\n if (shouldCoalesce) {\n ((_c = pendingRequests[requestKey]) !== null && _c !== void 0 ? _c : (pendingRequests[requestKey] = [])).push({\n principalValue: principalKey.principalValue,\n promise: requestPromise,\n });\n }\n // Return the promise\n return requestPromise;\n }\n catch (error) {\n throw error;\n }\n}\n// Helper to clean up expired cache entries\nfunction cleanupExpiredCache() {\n const now = Date.now();\n Object.keys(getCache).forEach(key => {\n var _a, _b;\n const activeEntries = (_b = (_a = getCache[key]) === null || _a === void 0 ? void 0 : _a.filter(entry => entry.expiresAt >= now)) !== null && _b !== void 0 ? _b : [];\n if (activeEntries.length > 0)\n getCache[key] = activeEntries;\n else\n delete getCache[key];\n });\n lastCacheCleanup = now;\n}\nfunction classifyGetManyBatchError(error) {\n var _a, _b, _c;\n const err = error;\n const status = (_b = (_a = err === null || err === void 0 ? void 0 : err.status) !== null && _a !== void 0 ? _a : err === null || err === void 0 ? void 0 : err.statusCode) !== null && _b !== void 0 ? _b : (_c = err === null || err === void 0 ? void 0 : err.response) === null || _c === void 0 ? void 0 : _c.status;\n const message = error instanceof Error\n ? error.message\n : typeof (err === null || err === void 0 ? void 0 : err.message) === 'string'\n ? err.message\n : 'Unknown error';\n if (status === 401 || status === 403) {\n return { code: 'UNAUTHORIZED', message };\n }\n if (status === 400) {\n return { code: 'INVALID_PATH', message };\n }\n return { code: 'REQUEST_FAILED', message };\n}\nexport async function getMany(paths, opts = {}) {\n var _a, _b, _c, _d, _e;\n if (paths.length === 0) {\n return [];\n }\n if (paths.length > 30) {\n throw new Error('Cannot fetch more than 30 documents at once');\n }\n const normalizedPaths = [];\n for (const path of paths) {\n let normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n if (normalizedPath.endsWith(\"*\") && normalizedPath.length > 1) {\n normalizedPath = normalizedPath.slice(0, -1);\n }\n if (!normalizedPath || normalizedPath.length === 0) {\n throw new Error(`Invalid path provided: ${path}`);\n }\n const pathIsDocument = normalizedPath.split(\"/\").length % 2 === 0;\n if (!pathIsDocument) {\n throw new Error(`Path must point to a document (even number of segments): ${path}`);\n }\n normalizedPaths.push(normalizedPath);\n }\n const now = Date.now();\n // H1: principal-scope getMany cache keys so one user's batch reads are never\n // served to another. Same `<appId:principal>|<path>:` shape used by get().\n const principalKey = await getReadPrincipalKey(opts._overrides);\n const cacheEnabled = opts.cache === true && !opts.bypassCache && principalKey.cacheable;\n const results = new Array(paths.length);\n const uncachedIndices = [];\n const uncachedPaths = [];\n for (let i = 0; i < normalizedPaths.length; i++) {\n const normalizedPath = normalizedPaths[i];\n const cacheKey = `${principalKey.key}|${normalizedPath}:`;\n const cachedEntry = getReadCacheEntry(cacheKey, principalKey.principalValue);\n if (cacheEnabled &&\n cachedEntry &&\n now < cachedEntry.expiresAt) {\n results[i] = { path: normalizedPath, data: cachedEntry.data };\n }\n else {\n uncachedIndices.push(i);\n uncachedPaths.push(normalizedPath);\n }\n }\n if (uncachedPaths.length > 0) {\n try {\n const response = await makeApiRequest('POST', 'items/batch', { paths: uncachedPaths }, opts._overrides);\n if (response.status === 404 && response.data == null) {\n const endpointError = new Error('Batch read endpoint returned 404');\n endpointError.status = 404;\n throw endpointError;\n }\n // makeApiRequest returns `{ data: <httpBody> }`, and the worker's items/batch\n // httpBody is `{ data: { results: [...] }, status }` — so the results are\n // double-nested at response.data.data.results. (Reading response.data.results\n // here is undefined → \"serverResults is not iterable\".) Tolerate both shapes.\n const serverResults = (_e = (_c = (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.results) !== null && _c !== void 0 ? _c : (_d = response.data) === null || _d === void 0 ? void 0 : _d.results) !== null && _e !== void 0 ? _e : [];\n const serverResultsMap = new Map();\n for (const result of serverResults) {\n serverResultsMap.set(result.path, result);\n }\n for (let i = 0; i < uncachedIndices.length; i++) {\n const originalIndex = uncachedIndices[i];\n const normalizedPath = uncachedPaths[i];\n const serverResult = serverResultsMap.get(normalizedPath);\n if (serverResult) {\n // getMany batches single-doc paths — attach the bare `id` (leaf doc\n // key) to each returned doc, additive (Bug 1), matching get().\n const normalizedResult = serverResult.error\n ? serverResult\n : Object.assign(Object.assign({}, serverResult), { data: withBareId(serverResult.data) });\n results[originalIndex] = normalizedResult;\n if (!normalizedResult.error && cacheEnabled) {\n const cacheKey = `${principalKey.key}|${normalizedPath}:`;\n setReadCacheEntry(cacheKey, principalKey.principalValue, normalizedResult.data, now + GET_CACHE_TTL);\n }\n }\n else {\n results[originalIndex] = {\n path: normalizedPath,\n data: null,\n error: { code: 'NOT_FOUND', message: `No result returned for path ${normalizedPath}` }\n };\n }\n }\n if (cacheEnabled && now - lastCacheCleanup > 5000) {\n cleanupExpiredCache();\n lastCacheCleanup = now;\n }\n }\n catch (error) {\n const batchError = classifyGetManyBatchError(error);\n for (const originalIndex of uncachedIndices) {\n results[originalIndex] = {\n path: normalizedPaths[originalIndex],\n data: null,\n error: batchError,\n };\n }\n }\n }\n return results;\n}\nconst MAX_RUN_QUERIES_PER_POST = 10;\nlet pendingRunQueries = [];\nlet runQueryFlushScheduled = false;\nfunction unwrapRunQueryRow(row, entry) {\n var _a;\n // The worker disambiguates a computed null from a failed/undeclared query\n // with a per-row `error` string, so surface it instead of returning undefined.\n if ((row === null || row === void 0 ? void 0 : row.error) != null) {\n const err = new Error(String(row.error));\n err.isQueryError = true;\n err.queryName = entry.queryName;\n err.path = entry.absolutePath;\n throw err;\n }\n return (_a = row === null || row === void 0 ? void 0 : row.result) !== null && _a !== void 0 ? _a : null;\n}\nfunction flushPendingRunQueries() {\n const pending = pendingRunQueries;\n pendingRunQueries = [];\n runQueryFlushScheduled = false;\n // Calls with any request overrides bypass this buffer, so every entry here\n // belongs to the same default-overrides identity bucket.\n for (let offset = 0; offset < pending.length; offset += MAX_RUN_QUERIES_PER_POST) {\n const chunk = pending.slice(offset, offset + MAX_RUN_QUERIES_PER_POST);\n void runQueryManyRows(chunk.map(({ entry }) => entry)).then((rows) => {\n chunk.forEach((caller, index) => {\n try {\n caller.resolve(unwrapRunQueryRow(rows[index], caller.entry));\n }\n catch (error) {\n caller.reject(error);\n }\n });\n }, (error) => {\n chunk.forEach(({ reject }) => reject(error));\n });\n }\n}\nexport async function runQuery(absolutePath, queryName, queryArgs, opts) {\n const entry = { absolutePath, queryName, queryArgs };\n // Auth, custom headers, timeout, and signal overrides must remain local to\n // one request, so any override-bearing call deliberately bypasses coalescing.\n if ((opts === null || opts === void 0 ? void 0 : opts._overrides) != null) {\n const rows = await runQueryManyRows([entry], opts);\n return unwrapRunQueryRow(rows[0], entry);\n }\n return new Promise((resolve, reject) => {\n pendingRunQueries.push({ entry, resolve, reject });\n if (!runQueryFlushScheduled) {\n runQueryFlushScheduled = true;\n queueMicrotask(flushPendingRunQueries);\n }\n });\n}\nexport async function runQueryMany(many, opts) {\n // Batch shape stays an array of result values (errored rows map to null) so\n // existing callers keep working; use runQuery for per-row error surfacing.\n const rows = await runQueryManyRows(many, opts);\n return rows.map((row) => { var _a; return (_a = row === null || row === void 0 ? void 0 : row.result) !== null && _a !== void 0 ? _a : null; });\n}\nasync function runQueryManyRows(many, opts) {\n var _a, _b, _c, _d;\n try {\n let queries = [];\n for (const { absolutePath, queryName, queryArgs } of many) {\n const normalizedPath = absolutePath.startsWith(\"/\") ? absolutePath.slice(1) : absolutePath;\n const pathIsDocument = normalizedPath.split(\"/\").length % 2 === 0;\n if (!pathIsDocument) {\n throw new Error(`Invalid path provided make sure it is pointing to a document: ${absolutePath}`);\n }\n queries.push({ path: normalizedPath, queryName, queryArgs });\n }\n // v2 socket-when-warm transport: when a warm, identity-matched app socket\n // already exists and the server advertised the runQuery capability, run this\n // batch over the socket instead of a fresh HTTP POST. Default-identity calls\n // only - per-request overrides (a distinct identity) always use HTTP. Any\n // miss/failure returns null and falls through to the identical HTTP call below,\n // so the result is byte-identical either way. Never opens a socket just to query.\n if ((opts === null || opts === void 0 ? void 0 : opts._overrides) == null) {\n const cfg = await getConfig();\n const socketRows = await runNamedQueriesOverSocket(cfg.appId, queries, cfg.isServer).catch(() => null);\n if (socketRows != null) {\n return socketRows;\n }\n }\n const response = await makeApiRequest('POST', 'queries', { queries }, opts === null || opts === void 0 ? void 0 : opts._overrides);\n // makeApiRequest returns `{ data: <httpBody> }`, and the worker's httpBody\n // is `{ data: { queries: [...] }, status }` — so the rows are double-nested\n // at response.data.data.queries. (Reading response.data.queries here is\n // undefined → \"Cannot read properties of undefined\".) Tolerate both shapes,\n // same as getMany does for items/batch.\n const rows = (_c = (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.queries) !== null && _c !== void 0 ? _c : (_d = response.data) === null || _d === void 0 ? void 0 : _d.queries;\n if (!Array.isArray(rows)) {\n throw new Error(`queries endpoint returned an unexpected response shape (status ${response.status})`);\n }\n return rows;\n }\n catch (error) {\n throw error;\n }\n}\n// NEW: Ad-hoc expression execution - first-class feature\nexport async function runExpression(expression, queryArgs, options) {\n const results = await runExpressionMany([Object.assign({ expression, queryArgs }, options)]);\n return results[0];\n}\nexport async function runExpressionMany(many) {\n var _a, _b, _c, _d;\n try {\n let queries = [];\n let firstCredential = undefined;\n let credentialSeen = false;\n for (const { expression, queryArgs, returnType, _overrides } of many) {\n // All batched queries ride ONE request, so they must run under ONE credential.\n // \"Ambient\" (no _overrides = the logged-in user) is a DISTINCT credential, not\n // a wildcard any override may satisfy: capture the FIRST entry's credential\n // state (including undefined/ambient) and reject any later entry whose\n // credential differs. Silently running the whole batch under the first\n // override found would evaluate a query meant for user B - or an ambient\n // end-user row under its restrictive policy - as whoever supplied an override\n // (e.g. an admin), a cross-principal authorization confusion the caller can't\n // detect (#103, DS2-0085). Split the batch by credential to run under\n // different identities.\n if (!credentialSeen) {\n firstCredential = _overrides;\n credentialSeen = true;\n }\n else if (_overrides !== firstCredential) {\n throw new Error(\"[bounded-sdk] runExpressionMany: batched queries carry different _overrides; all queries in one batch share a single request and credential. Split the batch so each request uses one credential.\");\n }\n queries.push({ queryArgs, expression, returnType });\n }\n const response = await makeApiRequest('POST', 'queries', { queries }, firstCredential);\n // Same double-nesting as runQueryMany: the worker's httpBody is\n // { data: { queries: [...] }, status } under makeApiRequest's own\n // { data: <httpBody> } wrapper. Tolerate both shapes.\n const rows = (_c = (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.queries) !== null && _c !== void 0 ? _c : (_d = response.data) === null || _d === void 0 ? void 0 : _d.queries;\n if (!Array.isArray(rows)) {\n throw new Error(`queries endpoint returned an unexpected response shape (status ${response.status})`);\n }\n // Map results - trace is automatically included by server for non-mainnet networks\n return rows.map((queryResult) => {\n const result = { result: queryResult.result };\n // Include trace if present (server includes it for non-mainnet networks)\n if (queryResult.trace) {\n result.trace = queryResult.trace;\n }\n // Pass through the server's per-row failure so callers can distinguish\n // a computed null from a failed row.\n if (queryResult.error != null) {\n result.error = String(queryResult.error);\n }\n return result;\n });\n }\n catch (error) {\n throw error;\n }\n}\n/* ===================== WRITE RECEIPT HELPERS (W4) ======================== */\n/**\n * Settle delay before the best-effort mirror read on an on-chain write. It is\n * an optimization, not a correctness guarantee: the receipt is captured first\n * and returned regardless of what the mirror read reports.\n */\nconst MIRROR_SYNC_SETTLE_MS = 1500;\nconst SOLANA_CHAIN_TAGS = new Set(['solana_devnet', 'solana_mainnet']);\n/**\n * Read the execution-lane tag the WORKER reported. The SDK never infers it: a\n * batch touching only unflagged collections in a `realtime_devnet` app commits\n * offchain, so the app's protocol is not the lane. Several field names are\n * accepted (batch-level receipt first, then the per-transaction Solana\n * `network` tag that predates it), but no value is ever manufactured.\n */\nfunction readWorkerChainTag(...sources) {\n for (const source of sources) {\n if (!source || typeof source !== 'object')\n continue;\n for (const key of ['chain', 'executionChain', 'network']) {\n const value = source[key];\n if (typeof value === 'string' && value.trim().length > 0)\n return value.trim();\n }\n }\n return null;\n}\n/** Path-keyed echo of what the caller asked for. NEVER authoritative state. */\nfunction buildRequestedDocuments(documents) {\n return documents.map(entry => {\n var _a;\n return ({\n path: entry.destinationPath,\n document: ((_a = entry.document) !== null && _a !== void 0 ? _a : null),\n });\n });\n}\n/** Look a concrete path up in a path-keyed map, tolerating a leading slash. */\nfunction pickPathDocument(source, path) {\n if (Object.prototype.hasOwnProperty.call(source, path))\n return source[path];\n const withSlash = path.startsWith('/') ? path : `/${path}`;\n if (Object.prototype.hasOwnProperty.call(source, withSlash))\n return source[withSlash];\n const withoutSlash = path.startsWith('/') ? path.slice(1) : path;\n if (Object.prototype.hasOwnProperty.call(source, withoutSlash))\n return source[withoutSlash];\n return undefined;\n}\n/**\n * `observed: true` only when EVERY requested concrete path was read back as a\n * real document. The sync endpoint answers `null` for a document that is\n * absent, lagging, or read-denied, and a deleted path reads back as `null` too\n * — none of those are evidence of synchronization.\n */\nfunction validatePathKeyedDocuments(paths, source) {\n if (!source || typeof source !== 'object' || Array.isArray(source)) {\n return { observed: false, reason: 'the synchronization response was not a path-keyed document map' };\n }\n const map = source;\n const documents = [];\n const unobserved = [];\n for (const path of paths) {\n const document = pickPathDocument(map, path);\n if (document == null || typeof document !== 'object' || Array.isArray(document)) {\n unobserved.push(path);\n documents.push({ path, document: null });\n continue;\n }\n documents.push({ path, document: document });\n }\n if (unobserved.length > 0) {\n return {\n observed: false,\n reason: `no readable document was returned for ${unobserved.join(', ')} ` +\n '(absent, deleted, lagging, read-denied, or a passthrough write)',\n };\n }\n return { observed: true, documents };\n}\n/**\n * Best-effort mirror read. A confirmed transaction must NEVER be lost to a\n * synchronization failure, so this reports its outcome in `mirrorSync` and\n * never rejects. It reads the CONCRETE destination paths, so a collection\n * insert with a generated id syncs the path that actually exists.\n */\nexport async function attemptMirrorSync(paths, options, settleMs = MIRROR_SYNC_SETTLE_MS) {\n try {\n if (settleMs > 0)\n await new Promise(resolve => setTimeout(resolve, settleMs));\n const synced = await syncItems(paths, options);\n // The sync endpoint answers `{ data: <path-keyed map>, status }`; a document\n // path always contains a `/`, so a top-level `data` key is never one.\n const map = (synced && typeof synced === 'object' && !Array.isArray(synced) && 'data' in synced)\n ? synced.data\n : synced;\n return validatePathKeyedDocuments(paths, map);\n }\n catch (error) {\n const message = typeof (error === null || error === void 0 ? void 0 : error.message) === 'string' ? error.message : String(error);\n return { observed: false, reason: `mirror synchronization failed: ${message}` };\n }\n}\nfunction normalizePathKey(path) {\n return path.startsWith('/') ? path.slice(1) : path;\n}\n/**\n * Post-hook observation for a DIRECT commit, taken from the worker's own batch\n * receipt. The worker is the only party that can read every concrete path back\n * AFTER hooks have run, so when it reports nothing we say so rather than\n * echoing the request as if it were server state.\n *\n * Unlike the mirror read, a `null` document here IS authoritative: the worker\n * read its own store, so a deleted path genuinely is absent. The worker's\n * `observed` verdict is still re-validated against the requested paths — a\n * receipt that skips one of them cannot be treated as complete.\n */\nfunction observationFromDirectCommit(paths, observation) {\n var _a;\n if (!observation || typeof observation !== 'object' || Array.isArray(observation)) {\n return { observed: false, reason: 'the write receipt carried no post-hook observation' };\n }\n const entries = Array.isArray(observation.documents) ? observation.documents : null;\n if (!entries) {\n return { observed: false, reason: 'the write receipt carried no path-keyed post-hook documents' };\n }\n const byPath = new Map();\n for (const entry of entries) {\n if (!entry || typeof entry.path !== 'string')\n continue;\n const document = entry.document;\n byPath.set(normalizePathKey(entry.path), (document && typeof document === 'object' && !Array.isArray(document))\n ? document\n : null);\n }\n const documents = [];\n const missing = [];\n for (const path of paths) {\n const key = normalizePathKey(path);\n if (!byPath.has(key)) {\n missing.push(path);\n documents.push({ path, document: null });\n continue;\n }\n documents.push({ path, document: (_a = byPath.get(key)) !== null && _a !== void 0 ? _a : null });\n }\n if (observation.observed !== true || missing.length > 0) {\n const unobserved = Array.isArray(observation.unobserved) ? observation.unobserved : [];\n const reasons = [\n ...unobserved\n .filter((entry) => entry && typeof entry.path === 'string')\n .map((entry) => { var _a; return `${entry.path}: ${(_a = entry.reason) !== null && _a !== void 0 ? _a : 'not observable'}`; }),\n ...missing.map(path => `${path}: no entry in the receipt observation`),\n ];\n return {\n observed: false,\n reason: reasons.length > 0\n ? reasons.join('; ')\n : 'the worker could not read every requested path back after hooks',\n };\n }\n return { observed: true, documents };\n}\n/**\n * Write a document at `path`. Sugar for a one-element {@link setMany}.\n *\n * **Delete:** pass `null` as the document to delete it — `set(path, null)` is\n * the delete (there is no separate `del`/`remove`). It is routed through the\n * collection's policy `delete` rule and broadcasts a delete to subscribers, and\n * the deleted entry surfaces as a `null` document under its path.\n *\n * Resolves to a discriminated {@link SetResult}; discriminate on `status`.\n */\nexport async function set(path, document, options) {\n // setMany already invalidates the read cache for the affected document and\n // collection paths — no second sweep needed here.\n return setMany([{ path, document }], options);\n}\n/**\n * Atomically write (or delete, with a `null` document) a batch of documents.\n *\n * Resolves to a discriminated {@link SetResult}:\n * - `committed` — the worker applied the batch directly.\n * - `confirmed` — a client-signed chain transaction landed successfully.\n * - `submitted` — broadcast happened but the outcome is unknown. NEVER\n * resubmit; call `reconcileSetResult`/`waitForSetResult` on the receipt.\n * - `expired_not_landed` — Solana only, and the one retry-safe terminal state.\n * - `signed` — `shouldSubmitTx: false`; signed and deliberately not sent.\n *\n * `requestedDocuments` is always the caller's own echo; authoritative server\n * state appears only under `observation`/`mirrorSync` once actually observed.\n */\nexport async function setMany(many, options) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n // Returns the data that was set, or undefined if the document was already set.\n try {\n // A server WalletClient threads its immutable config snapshot; the default\n // path reads the mutable process-global init() config. This keeps the app-id\n // bound into an on-chain 202 write (Solana/offchain) on the wallet\n // client's original app after a later global init() (CTA-05).\n const config = (_b = (_a = options === null || options === void 0 ? void 0 : options._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n const authProvider = (_d = (_c = options === null || options === void 0 ? void 0 : options._overrides) === null || _c === void 0 ? void 0 : _c.authProvider) !== null && _d !== void 0 ? _d : config.authProvider;\n if (!authProvider) {\n throw new Error('Auth provider not initialized');\n }\n let documents = [];\n const pathsToInvalidate = new Set();\n for (const { path, document: documentWithReservedFields } of many) {\n // for setting, we should remove any pieces of the document that start with '_' as they are internal and shouldn't be updated. The API would block it if it is one of the reserved ones\n let document = documentWithReservedFields;\n if (documentWithReservedFields) {\n document = Object.fromEntries(Object.entries(documentWithReservedFields).filter(([key]) => !key.startsWith('_')));\n }\n const normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n pathsToInvalidate.add(normalizedPath);\n const pathIsDocument = normalizedPath.split(\"/\").length % 2 === 0;\n let curItemId = \"\";\n if (pathIsDocument) {\n curItemId = normalizedPath.split(\"/\").pop() ? normalizedPath.split(\"/\").pop() : \"\";\n }\n else {\n curItemId = Math.random().toString(36).slice(2).substring(0, 12);\n }\n // if the path is a document, we need to append the document id to the path\n const collectionPath = pathIsDocument ? normalizedPath.split(\"/\").slice(0, -1).join(\"/\") : normalizedPath;\n pathsToInvalidate.add(collectionPath);\n let destinationPath = collectionPath;\n if (curItemId && curItemId.length > 0) {\n destinationPath = `${destinationPath}/${curItemId}`;\n }\n documents.push({ destinationPath, document });\n }\n let setResponse;\n try {\n setResponse = await makeApiRequest('PUT', `items`, { documents }, options === null || options === void 0 ? void 0 : options._overrides);\n }\n catch (error) {\n if ((error === null || error === void 0 ? void 0 : error.statusCode) === 402 && (error === null || error === void 0 ? void 0 : error.error) === 'INSUFFICIENT_BALANCE') {\n const deficitLamports = Number((_e = error.deficitLamports) !== null && _e !== void 0 ? _e : 0);\n const deficitSol = Number((_f = error.deficitSol) !== null && _f !== void 0 ? _f : deficitLamports / 1000000000);\n throw new InsufficientBalanceError(String((_g = error.address) !== null && _g !== void 0 ? _g : ''), Number((_h = error.balanceLamports) !== null && _h !== void 0 ? _h : 0), Number((_j = error.estimatedCostLamports) !== null && _j !== void 0 ? _j : 0), deficitLamports, deficitSol);\n }\n throw error;\n }\n // Invalidate caches and pending requests for affected paths\n pathsToInvalidate.forEach(path => {\n clearCacheByPrefix(path);\n });\n if (setResponse.status === 202) {\n // This means that the document needs to be set on-chain (or signed for offchain),\n // the API did nothing and gave us the required info to run this transaction.\n const { transactions, offchainTransaction } = setResponse.data;\n // Handle offchain transaction flow (for 'offchain' protocol apps)\n if (offchainTransaction && Array.isArray(transactions) && transactions.length > 0) {\n throw new Error('Ambiguous write response mixes offchain and onchain transaction targets');\n }\n if (offchainTransaction) {\n // Offchain signing is retired: no server mints this envelope any more\n // (the realtime worker commits poofnet writes directly). Fail loudly\n // rather than silently ignoring a payload the caller was asked to sign.\n throw new Error('Unsupported 202 transaction shape: offchain signing is retired');\n }\n // Handle Solana on-chain transaction flow\n if (!Array.isArray(transactions) || transactions.length !== 1) {\n throw new Error(`Expected exactly one on-chain transaction, received ${Array.isArray(transactions) ? transactions.length : 0}`);\n }\n const curTx = transactions[0];\n // The EVM onchain data plane is retired: no worker mints an EVM 202 any\n // more. A payload that still carries one is an unexpected response and\n // fails loudly BEFORE anything is signed - never silently ignored.\n if ((curTx === null || curTx === void 0 ? void 0 : curTx.evmTransaction) != null) {\n throw new Error('Unsupported 202 transaction shape: the write response carried an evmTransaction, ' +\n 'but EVM onchain writes are no longer supported. Nothing was signed or submitted.');\n }\n const hasSerializedSolanaTarget = (curTx === null || curTx === void 0 ? void 0 : curTx.serializedTransaction) != null;\n const hasBuiltSolanaTarget = (curTx === null || curTx === void 0 ? void 0 : curTx.transactionArgs) != null || (curTx === null || curTx === void 0 ? void 0 : curTx.remainingAccounts) != null ||\n (curTx === null || curTx === void 0 ? void 0 : curTx.idl) != null || (curTx === null || curTx === void 0 ? void 0 : curTx.txData) != null || (curTx === null || curTx === void 0 ? void 0 : curTx.preInstructions) != null;\n if (hasSerializedSolanaTarget && hasBuiltSolanaTarget) {\n throw new Error('Ambiguous on-chain write response mixes Solana transaction target formats');\n }\n const expectedWritePaths = documents.map(d => d.destinationPath);\n const requestedDocuments = buildRequestedDocuments(documents);\n const appId = config.appId;\n // The lane comes verbatim from the worker, and is read BEFORE anything is\n // signed or submitted: a missing tag fails closed while nothing has been\n // broadcast, instead of stranding a landed transaction with no receipt.\n const workerChain = readWorkerChainTag((_k = setResponse.data) === null || _k === void 0 ? void 0 : _k.receipt, setResponse.data, curTx);\n if (!workerChain) {\n throw new Error('The write response carried no execution-chain tag, so this receipt could not state where the write ran. ' +\n 'Nothing was signed or submitted.');\n }\n if (curTx.serializedTransaction) {\n if (!SOLANA_CHAIN_TAGS.has(workerChain)) {\n throw new Error(`The write response reported execution chain \"${workerChain}\" for a Solana transaction. ` +\n 'Nothing was signed or submitted.');\n }\n const solanaChain = workerChain;\n const { handlePreBuiltTransaction } = await import('./solana-operations');\n const solanaOutcome = await handlePreBuiltTransaction(curTx, authProvider, options, expectedWritePaths);\n // `shouldSubmitTx: false` signed WITHOUT sending — no signature exists,\n // and there is nothing to mirror, so no synchronization is attempted.\n if (solanaOutcome.outcome === 'signed') {\n return {\n status: 'signed', appId, requestedDocuments, chain: solanaChain,\n transactionId: null,\n signedTransaction: solanaOutcome.signedTransaction,\n fence: solanaOutcome.fence,\n };\n }\n if (solanaOutcome.outcome === 'submitted') {\n return {\n status: 'submitted', appId, requestedDocuments, chain: solanaChain,\n transactionId: solanaOutcome.transactionSignature,\n signedTransaction: solanaOutcome.signedTransaction,\n fence: solanaOutcome.fence,\n confirmation: { state: 'unknown', reason: solanaOutcome.reason },\n };\n }\n // Confirmed: the receipt is already complete, so the mirror read is a\n // best-effort enrichment reported in `mirrorSync`, never a rejection.\n const mirrorSync = await attemptMirrorSync(expectedWritePaths, options);\n return {\n status: 'confirmed', appId, requestedDocuments, chain: solanaChain,\n transactionId: solanaOutcome.transactionSignature,\n signedTransaction: solanaOutcome.signedTransaction,\n fence: solanaOutcome.fence,\n confirmationContextSlot: solanaOutcome.confirmationContextSlot,\n mirrorSync,\n };\n }\n else {\n throw new Error('Unsupported 202 transaction shape: expected serializedTransaction');\n }\n }\n else if (setResponse.status === 200) {\n // Direct commit: the worker applied the batch itself. The receipt is\n // batch-level — `transactionId` comes from the worker's own receipt and is\n // NEVER lifted out of a result document (a delete returns the PREVIOUS\n // document, so its stale `_transaction_hash` would misreport the delete).\n const body = (setResponse.data && typeof setResponse.data === 'object' && !Array.isArray(setResponse.data))\n ? setResponse.data\n : null;\n const receipt = ((body === null || body === void 0 ? void 0 : body.receipt) && typeof body.receipt === 'object' && !Array.isArray(body.receipt))\n ? body.receipt\n : null;\n const rawTransactionId = receipt === null || receipt === void 0 ? void 0 : receipt.transactionId;\n return {\n status: 'committed',\n requestedDocuments: buildRequestedDocuments(documents),\n observation: observationFromDirectCommit(documents.map(d => d.destinationPath), receipt === null || receipt === void 0 ? void 0 : receipt.observation),\n // A worker predating the batch receipt reports no lane. Say so rather\n // than inventing one — and never discard a committed write's receipt.\n chain: ((_l = readWorkerChainTag(receipt)) !== null && _l !== void 0 ? _l : 'unknown'),\n transactionId: typeof rawTransactionId === 'string' && rawTransactionId.length > 0 ? rawTransactionId : null,\n };\n }\n else {\n throw new Error(`Failed to set document: ${setResponse}`);\n }\n }\n catch (error) {\n throw error;\n }\n}\n/**\n * Extract the document/collection path from a cache key. Keys are\n * `<appId:principal>|<path>:<...>` (H1 principal-scoped) — strip the principal\n * prefix (everything up to and including the first `|`, if present) before\n * splitting off the path segment.\n */\nfunction pathFromCacheKey(key) {\n const barIdx = key.indexOf('|');\n const afterPrincipal = barIdx >= 0 ? key.slice(barIdx + 1) : key;\n return afterPrincipal.split(':')[0];\n}\n// Helper to clear cache entries by prefix (across ALL principals — a write\n// invalidates every cached read of that path regardless of which user cached it)\nfunction clearCacheByPrefix(prefix) {\n // Fixed: Use prefix instead of undefined 'path' variable\n const normalizedPrefix = prefix.startsWith(\"/\") ? prefix.slice(1) : prefix;\n // Clear cache entries\n Object.keys(getCache).forEach(key => {\n const path = pathFromCacheKey(key);\n if (path === normalizedPrefix || path.startsWith(`${normalizedPrefix}/`)) {\n delete getCache[key];\n }\n });\n // Cancel pending requests for this path\n Object.keys(pendingRequests).forEach(key => {\n // Skip bypass-specific requests which have a different format\n const lookupKey = key.startsWith('bypass:') ? key.slice('bypass:'.length) : key;\n const path = pathFromCacheKey(lookupKey);\n if (path === normalizedPrefix || path.startsWith(`${normalizedPrefix}/`)) {\n // We don't actually abort the fetch (we could with AbortController),\n // but we remove it from pending so new requests won't coalesce with it\n delete pendingRequests[key];\n }\n });\n}\n// Utility functions for cache management\nexport function clearCache(path, opts) {\n if (path) {\n // Clear cache entries for this path across ALL principals. Keys are now\n // principal-scoped (`<appId:principal>|<path>:<...>`), so we can't compute a\n // single deterministic key — match by the path segment instead. When a\n // prompt is supplied, only drop entries for that exact prompt.\n const normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n const prompt = (opts === null || opts === void 0 ? void 0 : opts.prompt) || '';\n const matches = (key) => {\n const barIdx = key.indexOf('|');\n const afterPrincipal = barIdx >= 0 ? key.slice(barIdx + 1) : key;\n const colonIdx = afterPrincipal.indexOf(':');\n if (colonIdx < 0)\n return false;\n const keyPath = afterPrincipal.slice(0, colonIdx);\n if (keyPath !== normalizedPath)\n return false;\n if (!(opts === null || opts === void 0 ? void 0 : opts.prompt))\n return true;\n // The prompt is the segment immediately after the path's first colon.\n const rest = afterPrincipal.slice(colonIdx + 1);\n return rest === prompt || rest.startsWith(`${prompt}:`) || rest.startsWith(prompt);\n };\n Object.keys(getCache).forEach(key => { if (matches(key))\n delete getCache[key]; });\n Object.keys(pendingRequests).forEach(key => {\n const lookupKey = key.startsWith('bypass:') ? key.slice('bypass:'.length) : key;\n if (matches(lookupKey))\n delete pendingRequests[key];\n });\n }\n else {\n // Clear entire cache\n Object.keys(getCache).forEach(key => delete getCache[key]);\n Object.keys(pendingRequests).forEach(key => delete pendingRequests[key]);\n }\n}\n/**\n * Listeners notified after an identity change wipes the read caches. Registered\n * via `onReadCacheAuthChange` so downstream modules (e.g. the subscribeQuery poll\n * manager) can re-key/drop stale in-flight work WITHOUT operations.ts importing\n * them (avoids a static cycle; keeps the coalesce test bundle lean).\n */\nconst authChangeListeners = new Set();\n/** Register a callback invoked after `clearReadCacheForAuthChange`. Returns an unregister fn. */\nexport function onReadCacheAuthChange(listener) {\n authChangeListeners.add(listener);\n return () => { authChangeListeners.delete(listener); };\n}\n/**\n * SECURITY (H1): Wipe ALL HTTP read caches + in-flight reads. Call this whenever\n * the logged-in identity changes (login / logout / switch identity) so a freshly\n * authenticated principal can never observe data cached for the previous one.\n * This is invoked from the WS auth-change path (reconnectWithNewAuthV2).\n */\nexport function clearReadCacheForAuthChange() {\n Object.keys(getCache).forEach(key => delete getCache[key]);\n Object.keys(pendingRequests).forEach(key => delete pendingRequests[key]);\n authChangeListeners.forEach(fn => {\n try {\n fn();\n }\n catch ( /* a listener throwing must not abort the cache wipe */_a) { /* a listener throwing must not abort the cache wipe */ }\n });\n}\nexport async function getFiles(path, options) {\n try {\n const normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n if (!normalizedPath || normalizedPath.length === 0) {\n throw new Error(\"Invalid path provided.\");\n }\n const apiPath = `storage?path=${encodeURIComponent(normalizedPath)}`;\n const response = await makeApiRequest('GET', apiPath, null, options === null || options === void 0 ? void 0 : options._overrides);\n return response.data;\n }\n catch (error) {\n throw error;\n }\n}\n/** Pull the worker's concrete object path (`token.pathId`) out of a response body. */\nfunction readWorkerFilePath(source) {\n if (!source || typeof source !== 'object')\n return null;\n for (const key of ['pathId', 'path', 'destinationPath']) {\n const value = source[key];\n if (typeof value === 'string' && value.trim().length > 0)\n return value.trim();\n }\n return null;\n}\nfunction readFileVisibility(source) {\n const value = (source && typeof source === 'object') ? source.visibility : undefined;\n if (value === 'public' || value === 'private' || value === 'unknown')\n return value;\n // The worker did not state it, so neither do we. `unknown` never means the\n // object is private — it means the read-rule evaluation was not reported.\n return 'unknown';\n}\nexport async function setFile(path, file, options) {\n var _a, _b, _c, _d;\n // 1) Get the presigned URL from your backend\n const requestBody = {\n destinationPath: path,\n operation: file ? 'upload' : 'delete',\n };\n // Send file size so the server can enforce upload limits before issuing a presigned URL\n if (file) {\n requestBody.contentLength = file.size;\n requestBody.contentType = file.type || undefined;\n // Declared metadata fields set atomically with the create (server validates\n // them against the storage collection's `fields` and applies the CREATE rule).\n if (options === null || options === void 0 ? void 0 : options.metadata) {\n requestBody.metadata = options.metadata;\n }\n }\n const response = await makeApiRequest('POST', 'storage/url', requestBody, options === null || options === void 0 ? void 0 : options._overrides);\n const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n if (file == null) {\n // A deletion is acknowledged only by a non-404 response. `makeApiRequest`\n // normalizes 404 into `{ data: null, status: 404 }` rather than throwing, so\n // the status has to be inspected.\n const deletePath = (_a = readWorkerFilePath(response === null || response === void 0 ? void 0 : response.data)) !== null && _a !== void 0 ? _a : normalizedPath;\n if ((response === null || response === void 0 ? void 0 : response.status) === 404) {\n return { path: deletePath, deleted: false, alreadyAbsent: true };\n }\n return { path: deletePath, deleted: true };\n }\n if (!((_b = response === null || response === void 0 ? void 0 : response.data) === null || _b === void 0 ? void 0 : _b.s3Url)) {\n throw new Error(\"No s3Url in response\");\n }\n // Client-side size guard using the limit returned by the server\n const maxFileSize = response.data.maxFileSize;\n if (maxFileSize && file.size > maxFileSize) {\n throw new Error(`File size ${(file.size / (1024 * 1024)).toFixed(2)} MB exceeds the maximum upload size of ${(maxFileSize / (1024 * 1024)).toFixed(0)} MB.`);\n }\n const presignedUrl = response.data.s3Url;\n // Retain the CONCRETE path BEFORE the PUT. Storage generates a collection\n // upload's id server-side, so `setFile(\"metadata\", file)` creates\n // `metadata/<generated-id>`; if the commit succeeds and only its response is\n // lost, this is the only identifier the object has.\n const retainedPath = (_c = readWorkerFilePath(response.data)) !== null && _c !== void 0 ? _c : normalizedPath;\n // 2) Upload the file directly to storage with a PUT request\n let uploadResponse;\n try {\n uploadResponse = await fetch(presignedUrl, {\n method: 'PUT',\n headers: {\n 'Content-Type': file.type,\n },\n body: file\n });\n }\n catch (error) {\n // The transport itself failed, so we do not know whether the object\n // committed. This is NOT a definite failure and NOT retry-safe.\n const message = typeof (error === null || error === void 0 ? void 0 : error.message) === 'string' ? error.message : String(error);\n return {\n status: 'unknown',\n path: retainedPath,\n reason: `the upload response was lost before it could be read: ${message}`,\n retrySafe: false,\n };\n }\n // 3) A non-2xx answer is a definite, unambiguous failure — keep throwing.\n if (!uploadResponse.ok) {\n await uploadResponse.text().catch(() => '');\n throw new Error(`Upload failed with status: ${uploadResponse.status}`);\n }\n // 4) The PUT response IS the finalize response: it carries the durable URL\n // and the anonymous-read verdict, inside the worker's `{ data, status }`\n // envelope.\n let finalizeBody = null;\n try {\n const parsed = await uploadResponse.json();\n finalizeBody = (parsed && typeof parsed === 'object' && parsed.data && typeof parsed.data === 'object')\n ? parsed.data\n : parsed;\n }\n catch (_e) {\n // A worker predating the URL-carrying finalize response answers with\n // something we cannot parse. The object still committed.\n finalizeBody = null;\n }\n const url = (finalizeBody && typeof finalizeBody.url === 'string' && finalizeBody.url.length > 0)\n ? finalizeBody.url\n : null;\n return {\n status: 'uploaded',\n path: (_d = readWorkerFilePath(finalizeBody)) !== null && _d !== void 0 ? _d : retainedPath,\n url,\n visibility: readFileVisibility(finalizeBody),\n };\n}\nexport async function signMessage(message) {\n const config = await getConfig();\n if (!config.authProvider) {\n throw new Error('Auth provider not initialized. Please call init() first.');\n }\n return config.authProvider.signMessage(message);\n}\nexport async function signTransaction(transaction) {\n const config = await getConfig();\n if (!config.authProvider) {\n throw new Error('Auth provider not initialized. Please call init() first.');\n }\n return config.authProvider.signTransaction(transaction);\n}\nexport async function signAndSubmitTransaction(transaction, feePayer) {\n const config = await getConfig();\n if (!config.authProvider) {\n throw new Error('Auth provider not initialized. Please call init() first.');\n }\n return config.authProvider.signAndSubmitTransaction(transaction, feePayer);\n}\nexport async function syncItems(paths, options) {\n try {\n const response = await makeApiRequest('PUT', 'items/sync', { paths }, options === null || options === void 0 ? void 0 : options._overrides);\n return response.data;\n }\n catch (error) {\n throw error;\n }\n}\n","import { getConfig } from './config';\nimport { attemptMirrorSync } from './operations';\nconst DEFAULT_TIMEOUT_MS = 60000;\nconst DEFAULT_MAX_ATTEMPTS = 20;\nconst DEFAULT_POLL_INTERVAL_MS = 3000;\n/** Mirror read after a late confirmation. No settle delay: the tx already landed. */\nconst RECONCILE_MIRROR_SETTLE_MS = 0;\nfunction errorText(error) {\n const message = error === null || error === void 0 ? void 0 : error.message;\n return typeof message === 'string' && message.length > 0 ? message : String(error);\n}\nfunction isSolanaSubmitted(receipt) {\n return receipt.status === 'submitted' && 'signedTransaction' in receipt;\n}\n/**\n * The Solana execution lane a client config REQUIRES, or `null` when the config\n * carries no constraint. Only a positive contradiction rejects a receipt — an\n * unmapped or unset `chain` is not evidence of a mismatch.\n */\nfunction requiredSolanaChain(config) {\n switch (config.chain) {\n case 'realtime_devnet':\n case 'solana_devnet':\n return 'solana_devnet';\n case 'realtime_mainnet':\n case 'realtime_mainnet_preview':\n case 'solana_mainnet':\n return 'solana_mainnet';\n default:\n return null;\n }\n}\n/**\n * Bind the receipt to the app + chain it was issued for BEFORE any RPC or\n * mirror request. Writes bind to an immutable config, so a bare reconcile after\n * a global re-`init()` could otherwise poll the wrong app's endpoints entirely.\n */\nfunction assertReceiptMatchesContext(receipt, config) {\n if (!receipt.appId || typeof receipt.appId !== 'string') {\n throw new Error('This write receipt carries no appId and cannot be reconciled.');\n }\n if (receipt.appId !== config.appId) {\n throw new Error(`This write receipt was issued for app \"${receipt.appId}\" but the bound client targets \"${config.appId}\". ` +\n 'Reconcile it through the client it came from.');\n }\n if (isSolanaSubmitted(receipt)) {\n const required = requiredSolanaChain(config);\n if (required && required !== receipt.chain) {\n throw new Error(`This write receipt ran on \"${receipt.chain}\" but the bound client targets \"${required}\".`);\n }\n }\n}\nfunction stillSubmitted(receipt, reason) {\n return Object.assign(Object.assign({}, receipt), { confirmation: Object.assign(Object.assign({}, receipt.confirmation), { reason }) });\n}\nasync function mirrorFor(receipt, options) {\n const paths = receipt.requestedDocuments.map(entry => entry.path);\n if (paths.length === 0)\n return { observed: false, reason: 'the receipt carried no requested paths' };\n const setOptions = (options === null || options === void 0 ? void 0 : options._overrides) ? { _overrides: options._overrides } : undefined;\n return attemptMirrorSync(paths, setOptions, RECONCILE_MIRROR_SETTLE_MS);\n}\nasync function resolveSolanaRpc(config, options) {\n var _a, _b;\n const injected = (_a = options === null || options === void 0 ? void 0 : options._overrides) === null || _a === void 0 ? void 0 : _a._solanaRpc;\n if (injected)\n return injected;\n const rpcUrl = (_b = config.rpcUrl) === null || _b === void 0 ? void 0 : _b.trim();\n if (!rpcUrl) {\n throw new Error('Reconciling a Solana write receipt requires init({ rpcUrl }).');\n }\n const { Connection } = await import('@solana/web3.js');\n return new Connection(rpcUrl, 'confirmed');\n}\n/**\n * Solana reconciliation NEVER broadcasts. It reaches `expired_not_landed` only\n * after the fence is observed expired AND history successfully proves the\n * signature is absent; a failed or inconclusive lookup stays `submitted`.\n */\nasync function reconcileSolana(receipt, config, options) {\n var _a, _b, _c, _d;\n const rpc = await resolveSolanaRpc(config, options);\n let statusValue = null;\n let contextSlot;\n try {\n if (typeof rpc.getSignatureStatuses !== 'function') {\n return stillSubmitted(receipt, 'the configured Solana RPC cannot report signature statuses');\n }\n const statuses = await rpc.getSignatureStatuses([receipt.transactionId]);\n statusValue = (_b = (_a = statuses === null || statuses === void 0 ? void 0 : statuses.value) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null;\n contextSlot = (_c = statuses === null || statuses === void 0 ? void 0 : statuses.context) === null || _c === void 0 ? void 0 : _c.slot;\n }\n catch (error) {\n return stillSubmitted(receipt, `signature status lookup failed: ${errorText(error)}`);\n }\n if (statusValue) {\n // Landed. A landed-but-failed transaction is a genuine failure, not `submitted`.\n if (statusValue.err) {\n throw new Error(`Transaction failed: ${JSON.stringify(statusValue.err)}`);\n }\n const confirmed = {\n status: 'confirmed',\n appId: receipt.appId,\n requestedDocuments: receipt.requestedDocuments,\n chain: receipt.chain,\n transactionId: receipt.transactionId,\n signedTransaction: receipt.signedTransaction,\n fence: receipt.fence,\n confirmationContextSlot: contextSlot !== null && contextSlot !== void 0 ? contextSlot : 0,\n mirrorSync: await mirrorFor(receipt, options),\n };\n return confirmed;\n }\n // Absent from the status window. Expiry has to be OBSERVED before absence can\n // mean anything: before the fence expires the transaction may still land.\n let blockHeight;\n try {\n blockHeight = typeof rpc.getBlockHeight === 'function' ? await rpc.getBlockHeight('confirmed') : undefined;\n }\n catch (error) {\n return stillSubmitted(receipt, `block height lookup failed: ${errorText(error)}`);\n }\n if (typeof blockHeight !== 'number') {\n return stillSubmitted(receipt, 'expiry could not be observed: the RPC reported no block height');\n }\n if (blockHeight <= receipt.fence.lastValidBlockHeight) {\n return stillSubmitted(receipt, `not yet expired: block height ${blockHeight} is within the fence (lastValidBlockHeight ${receipt.fence.lastValidBlockHeight})`);\n }\n // Expired. Prove absence from history before declaring the write retry-safe.\n let history;\n try {\n history = await rpc.getTransaction(receipt.transactionId, {\n maxSupportedTransactionVersion: 0,\n commitment: 'confirmed',\n });\n }\n catch (error) {\n return stillSubmitted(receipt, `history lookup failed after expiry: ${errorText(error)}`);\n }\n if (history) {\n if ((_d = history === null || history === void 0 ? void 0 : history.meta) === null || _d === void 0 ? void 0 : _d.err) {\n throw new Error(`Transaction failed: ${JSON.stringify(history.meta.err)}`);\n }\n const confirmed = {\n status: 'confirmed',\n appId: receipt.appId,\n requestedDocuments: receipt.requestedDocuments,\n chain: receipt.chain,\n transactionId: receipt.transactionId,\n signedTransaction: receipt.signedTransaction,\n fence: receipt.fence,\n confirmationContextSlot: typeof history.slot === 'number' ? history.slot : (contextSlot !== null && contextSlot !== void 0 ? contextSlot : 0),\n mirrorSync: await mirrorFor(receipt, options),\n };\n return confirmed;\n }\n return {\n status: 'expired_not_landed',\n appId: receipt.appId,\n requestedDocuments: receipt.requestedDocuments,\n chain: receipt.chain,\n transactionId: receipt.transactionId,\n fence: receipt.fence,\n };\n}\n/**\n * Poll the SAME signature a `submitted` receipt carries and return the\n * resulting `SetResult`.\n *\n * - Terminal receipts (`committed`, `confirmed`, `expired_not_landed`,\n * `signed`) are returned unchanged; nothing was left open.\n * - A `submitted` receipt with no transaction identifier (`transactionId:\n * null`) is rejected immediately: no identifier exists to poll.\n * - A transaction that landed and FAILED throws, exactly as it would have on\n * the original write.\n */\nexport async function reconcileSetResult(receipt, options) {\n var _a, _b;\n if (!receipt || typeof receipt !== 'object' || typeof receipt.status !== 'string') {\n throw new Error('reconcileSetResult requires a write receipt returned by set/setMany.');\n }\n if (receipt.status !== 'submitted')\n return receipt;\n if (receipt.transactionId === null) {\n throw new Error('This receipt is explicitly irreconcilable: the wallet send response was lost, so no transaction hash exists to poll. ' +\n 'Resolve it out of band — resubmitting could execute the write twice.');\n }\n const config = (_b = (_a = options === null || options === void 0 ? void 0 : options._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n // Validation happens BEFORE any RPC or mirror request.\n assertReceiptMatchesContext(receipt, config);\n if (isSolanaSubmitted(receipt)) {\n return reconcileSolana(receipt, config, options);\n }\n // Anything else (e.g. a legacy serialized receipt from a retired lane) has no\n // reconciliation transport any more; say so rather than guessing.\n return stillSubmitted(receipt, 'this receipt shape has no reconciliation lane');\n}\n/**\n * Reconcile repeatedly until the receipt leaves `submitted` or the bound is hit.\n *\n * The bound is mandatory, because some states are permanently non-terminal by\n * design: an RPC that can never observe the signature or the expiry never\n * resolves. On exhaustion (or abort) this returns the LATEST `submitted`\n * receipt with its identifier intact rather than hanging or throwing the\n * identifier away.\n */\nexport async function waitForSetResult(receipt, options) {\n var _a, _b, _c, _d;\n if (receipt && typeof receipt === 'object' && receipt.status === 'submitted' && receipt.transactionId === null) {\n // Rejected immediately rather than polled: there is nothing to poll.\n return reconcileSetResult(receipt, options);\n }\n const timeoutMs = (_a = options === null || options === void 0 ? void 0 : options.timeoutMs) !== null && _a !== void 0 ? _a : DEFAULT_TIMEOUT_MS;\n const maxAttempts = (_b = options === null || options === void 0 ? void 0 : options.maxAttempts) !== null && _b !== void 0 ? _b : DEFAULT_MAX_ATTEMPTS;\n const pollIntervalMs = (_c = options === null || options === void 0 ? void 0 : options.pollIntervalMs) !== null && _c !== void 0 ? _c : DEFAULT_POLL_INTERVAL_MS;\n const startedAt = Date.now();\n let current = receipt;\n let attempts = 0;\n while (attempts < maxAttempts && Date.now() - startedAt < timeoutMs) {\n if ((_d = options === null || options === void 0 ? void 0 : options.signal) === null || _d === void 0 ? void 0 : _d.aborted)\n return current;\n attempts++;\n current = await reconcileSetResult(current, options);\n if (current.status !== 'submitted')\n return current;\n if (attempts >= maxAttempts)\n break;\n const remaining = timeoutMs - (Date.now() - startedAt);\n if (remaining <= 0)\n break;\n const slept = await sleepUnlessAborted(Math.min(pollIntervalMs, remaining), options === null || options === void 0 ? void 0 : options.signal);\n if (!slept)\n return current;\n }\n return current;\n}\n/** Resolves `false` when the signal aborted during (or before) the sleep. */\nfunction sleepUnlessAborted(ms, signal) {\n if (signal === null || signal === void 0 ? void 0 : signal.aborted)\n return Promise.resolve(false);\n if (!signal)\n return new Promise(resolve => setTimeout(() => resolve(true), ms));\n return new Promise(resolve => {\n const timer = setTimeout(() => {\n signal.removeEventListener('abort', onAbort);\n resolve(true);\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n resolve(false);\n };\n signal.addEventListener('abort', onAbort, { once: true });\n });\n}\n","/**\n * WebSocket Subscription Module\n *\n * This module provides real-time data subscriptions using WebSocket v2 protocol\n * with multiplexed connections (one connection per client, multiple subscriptions).\n *\n * The external API remains unchanged - just use subscribe(path, options) as before.\n */\nimport { subscribeV2, closeAllSubscriptionsV2, clearCacheV2, getCachedDataV2, reconnectWithNewAuthV2, } from './subscription-v2';\n/**\n * Subscribe to real-time updates for a path.\n *\n * @param path - The path to subscribe to (e.g., 'users/123' or 'posts')\n * @param subscriptionOptions - Options including onData and onError callbacks\n * @returns A function to unsubscribe\n *\n * @example\n * ```typescript\n * const unsubscribe = await subscribe('users/123', {\n * onData: (data) => console.log('User updated:', data),\n * onError: (error) => console.error('Subscription error:', error),\n * });\n *\n * // Later, to unsubscribe:\n * await unsubscribe();\n * ```\n */\nexport async function subscribe(path, subscriptionOptions) {\n // Forgive the most natural mistake: `subscribe(path, (data) => ...)`. Without\n // this, a bare callback is taken as the options object, `.onData` is undefined,\n // and the subscription silently never fires (no error) — it just looks broken.\n // Coerce a function into `{ onData }` so the natural form works.\n const opts = typeof subscriptionOptions === 'function'\n ? { onData: subscriptionOptions }\n : subscriptionOptions;\n return subscribeV2(path, opts);\n}\n/**\n * Close all active subscriptions.\n * Call this when cleaning up (e.g., on logout or component unmount).\n */\nexport async function closeAllSubscriptions() {\n return closeAllSubscriptionsV2();\n}\n/**\n * Clear the subscription cache.\n *\n * @param path - Optional path to clear. If not provided, clears all cached data.\n */\nexport function clearCache(path) {\n clearCacheV2(path);\n}\n/**\n * Get cached data for a path without making a network request.\n *\n * @param path - The path to get cached data for\n * @param prompt - Optional prompt that was used for the subscription\n * @returns The cached data, or null if not cached or expired\n */\nexport function getCachedData(path, prompt) {\n return getCachedDataV2(path, prompt);\n}\n/**\n * Reconnect all WebSocket connections with fresh authentication.\n * Call this when the user's auth state changes (login/logout).\n *\n * This will:\n * 1. Close existing connections\n * 2. Re-establish with new auth token\n * 3. Re-subscribe to all active paths\n *\n * Existing subscriptions will receive new initial data after reconnection.\n */\nexport async function reconnectWithNewAuth() {\n return reconnectWithNewAuthV2();\n}\n","/**\n * Scoped multi-app client factory.\n *\n * `createClient()` returns an isolated, READ-ONLY client bound to one Bounded\n * app, independent of the module-global `init()` client. It exists so a single\n * frontend can hold its normal authenticated client for its own app AND a\n * read-only client for a SECOND Bounded app (e.g. a shared steward/runtime app),\n * with live subscriptions on both and zero interference between them.\n *\n * Each instance carries its OWN fully-resolved config (endpoints + appId) and\n * routes through the SAME shared transport/subscription implementation as the\n * global path - it never forks that code. Isolation comes from threading the\n * instance config (and a read-only marker) through the existing per-request /\n * per-subscription override channel, plus the websocket layer already keying\n * connections by appId.\n *\n * ## v1 scope: read-only, unauthenticated\n *\n * A scoped instance is UNAUTHENTICATED. It sends no auth, never reads or\n * refreshes the global session, and connects to its app's realtime endpoint\n * anonymously. It is therefore only useful against collections a Bounded app\n * exposes with a public read rule (`read: true`) - private/per-user reads will\n * be denied by the target app's policy, exactly as an anonymous caller would be.\n *\n * Writes and any auth-requiring surface are NOT supported on a scoped instance\n * and throw a clear error. Per-instance authentication is a planned follow-up.\n */\nimport { get, getMany, search, queryAggregate, count, aggregate, runQuery, runQueryMany, } from './operations';\nimport { subscribe } from './subscription';\nimport { DEFAULT_CLIENT_CONFIG, resolveClientConfig } from './config';\n/** Error thrown when an unsupported (write / auth-requiring) call is made on a\n * read-only scoped client. */\nexport class ScopedClientReadOnlyError extends Error {\n constructor(operation) {\n super(`createClient() instances are read-only in v1: \"${operation}\" is not supported. ` +\n `Use the global init() client for authenticated writes, or read only public ` +\n `(read: true) collections on this scoped instance.`);\n this.name = 'ScopedClientReadOnlyError';\n }\n}\n/**\n * Create a read-only client scoped to a single Bounded app.\n *\n * @example\n * ```ts\n * // Global client stays the venue's own authenticated app:\n * await init({ appId: VENUE_APP, network: 'bounded-production', authMethod: 'email' });\n *\n * // A second, read-only client for the steward runtime app:\n * const steward = createClient({ appId: STEWARD_APP, network: 'bounded-production' });\n * const state = await steward.get('runtime/current');\n * const stop = await steward.subscribe('runtime/current', (d) => render(d));\n * ```\n */\nexport function createClient(config) {\n if (!config || !config.appId) {\n throw new Error('createClient requires an appId.');\n }\n // Resolve from the PRISTINE defaults (never the mutated global) so a scoped\n // instance is fully independent of any prior init(). Same precedence as init:\n // defaults < network preset < explicit fields.\n const resolved = resolveClientConfig(DEFAULT_CLIENT_CONFIG, config);\n // The override channel that carries this instance's identity through the\n // shared transport and subscription code. `_config` retargets endpoints +\n // appId; `_readOnly` omits auth and blocks ambient-session/global-cache reads.\n const instanceOverrides = () => ({ _config: resolved, _readOnly: true });\n // Merge caller-supplied opts with the instance overrides. The instance\n // `_config`/`_readOnly` are applied LAST so app code can never override the\n // routing/identity of a scoped call (but may still pass e.g. an AbortSignal).\n const withOverrides = (opts) => {\n var _a;\n const base = (opts !== null && opts !== void 0 ? opts : {});\n return Object.assign(Object.assign({}, base), { _overrides: Object.assign(Object.assign({}, ((_a = base._overrides) !== null && _a !== void 0 ? _a : {})), instanceOverrides()) });\n };\n return {\n appId: resolved.appId,\n getConfig: () => (Object.assign({}, resolved)),\n get: (path, opts) => get(path, withOverrides(opts)),\n getMany: (paths, opts) => getMany(paths, withOverrides(opts)),\n search: (path, query, opts) => search(path, query, withOverrides(opts)),\n queryAggregate: (path, spec, opts) => queryAggregate(path, spec, withOverrides(opts)),\n count: (path, opts) => count(path, withOverrides(opts)),\n aggregate: (path, operation, opts) => aggregate(path, operation, withOverrides(opts)),\n runQuery: (absolutePath, queryName, queryArgs, opts) => runQuery(absolutePath, queryName, queryArgs, withOverrides(opts)),\n runQueryMany: (many, opts) => runQueryMany(many, withOverrides(opts)),\n subscribe: (path, options) => {\n var _a;\n const opts = typeof options === 'function' ? { onData: options } : Object.assign({}, options);\n // Force this instance's scoped, read-only routing onto the subscription.\n opts._overrides = Object.assign(Object.assign({}, ((_a = opts._overrides) !== null && _a !== void 0 ? _a : {})), { _config: resolved, _readOnly: true });\n return subscribe(path, opts);\n },\n set: () => { throw new ScopedClientReadOnlyError('set'); },\n setMany: () => { throw new ScopedClientReadOnlyError('setMany'); },\n };\n}\n","/**\n * Live named-query subscriptions (subscribeQuery) - HTTP client poller (v1).\n *\n * A standardized client-side poller for a policy's computed/named queries. Same\n * callback contract as `subscribe()` (onData/onError), but instead of a socket it\n * polls `runQuery` on an interval. It exists to replace ad-hoc app-side polling\n * with one controlled, deduped, backoff-aware poller.\n *\n * v1 is HTTP-only and requires ZERO server change: it rides the existing\n * `runQuery` microtask coalescer (operations.ts), which batches due keys into\n * <=10-per-POST chunks, surfaces per-row errors, and (via utils/api) does a\n * bounded in-request 429 retry. The websocket transport and true server-push are\n * deferred; see LIVE-QUERIES-SDK-PLAN.md section 9. The public contract here is\n * pinned so either upgrade stays transparent.\n *\n * Design notes that are load-bearing (do not \"simplify\" away):\n * - The coalescer does NOT dedupe; the manager's refcount dedupe below is the\n * ONLY dedupe, so it is load-bearing for billed-read correctness.\n * - There is no durable transport backoff: `utils/api` retries twice then\n * rejects. Steady-state backoff on a rejected poll is owned HERE.\n * - A transport rejection (429/network/chunk) must NOT reach onError - it would\n * blast the whole up-to-10-key chunk every interval and rebuild the exact 429\n * noise this feature removes. Only a genuine per-row query error / policy\n * decline reaches onError.\n */\nimport { runQuery, onReadCacheAuthChange } from './operations';\nimport { clientConfig } from './config';\nimport { getIdToken } from '../utils/utils';\n/** Default poll cadence. Sits on the hot named-query cadence oapps already runs. */\nexport const DEFAULT_QUERY_POLL_INTERVAL_MS = 5000;\n/** Hard lower clamp so an app cannot rebuild the 429 storm. */\nexport const MIN_QUERY_POLL_INTERVAL_MS = 1000;\n/** Ceiling for the manager-owned exponential backoff on a rejected poll. */\nconst QUERY_POLL_BACKOFF_CAP_MS = 60000;\n/** Max extra delay sprinkled on a visibility-resume refresh so N keys don't burst-sync. */\nconst RESUME_JITTER_MS = 250;\n/** Retry cadence for a re-key that could not (re-)attach - so a live query is never\n * silently orphaned by a transient auth failure during an identity change. */\nconst REATTACH_RETRY_MS = 3000;\n/**\n * Server sentinel for a query that cannot be polled (e.g. onchain/EVM live-call).\n * Absorbed internally: keep polling, never surface. Pin it to the design-of-record\n * `unsupported` frame.\n */\nconst UNSUPPORTED_QUERY_SENTINEL = 'unsupported';\nconst registry = new Map();\n/**\n * Every live subscriber, INCLUDING ones momentarily detached from the registry\n * mid-re-key (see reattach). Teardown walks this - not just the registry - so a\n * pending re-key retry can never revive polling after closeAllQuerySubscriptions.\n */\nconst liveSubscribers = new Set();\n/** Poll ticks pause while the document is hidden (env-guarded / test-injectable). */\nlet hidden = false;\n// ---------------------------------------------------------------------------\n// Canonicalization (shared with a future server group key).\n// ---------------------------------------------------------------------------\nfunction sortDeep(value) {\n if (Array.isArray(value))\n return value.map(sortDeep);\n if (value && typeof value === 'object') {\n const out = {};\n for (const k of Object.keys(value).sort())\n out[k] = sortDeep(value[k]);\n return out;\n }\n return value;\n}\n/**\n * Key-sorted deep copy that mirrors the JSON wire form byte-for-byte. Unlike\n * `sortDeep`, it assigns into NULL-PROTOTYPE objects so an own `__proto__` key is\n * kept as an ordinary JSON property instead of being swallowed by\n * `Object.prototype`'s `__proto__` setter (which would mutate the prototype and\n * drop the property, diverging from what `JSON.stringify` actually emits).\n */\nfunction sortDeepWire(value) {\n if (Array.isArray(value))\n return value.map(sortDeepWire);\n if (value && typeof value === 'object') {\n const out = Object.create(null);\n for (const k of Object.keys(value).sort())\n out[k] = sortDeepWire(value[k]);\n return out;\n }\n return value;\n}\n/**\n * Deterministic key-sorted serialization of query args, canonicalizing the EXACT\n * JSON wire representation the request serializer sends. Args are first projected\n * through `JSON.parse(JSON.stringify(...))` so `toJSON` runs (a `Date` becomes its\n * ISO string, not `{}`) and functions/`undefined` are dropped exactly as the wire\n * does, then key-sorted with null-prototype objects so an own `__proto__` key\n * round-trips as a property. This makes the dedupe key match what the server\n * actually receives, so two subscriptions can share a poller only when their wire\n * inputs are identical. Cyclic structures and other values the wire cannot\n * serialize (e.g. `BigInt`) are rejected by `JSON.stringify` here, exactly as they\n * would be on the wire.\n */\nexport function canonicalizeArgs(args) {\n var _a;\n const wire = JSON.parse((_a = JSON.stringify(args !== null && args !== void 0 ? args : null)) !== null && _a !== void 0 ? _a : 'null');\n return JSON.stringify(sortDeepWire(wire));\n}\n/**\n * Deterministic key-sorted serialization of a query RESULT for change detection.\n * Robust to shuffled object key order and the JSON-wire shapes the endpoint\n * yields (string u64, ISO-date string). BigInt/Date OBJECTS never cross the HTTP\n * boundary, so they are intentionally not handled here.\n */\nexport function canonicalizeResult(result) {\n return JSON.stringify(sortDeep(result === undefined ? null : result));\n}\n// ---------------------------------------------------------------------------\n// Identity (two-part: compact bucket + exact bearer, mirroring subscribe()'s H1).\n// ---------------------------------------------------------------------------\nfunction hashToken(value) {\n let h = 5381;\n for (let i = 0; i < value.length; i++)\n h = ((h << 5) + h + value.charCodeAt(i)) & 0x7fffffff;\n return h.toString(36);\n}\nasync function currentIdentity(appId) {\n const token = await getIdToken(clientConfig.isServer);\n return token ? { bucket: `${appId}:t${hashToken(token)}`, token } : { bucket: `${appId}:anon`, token: null };\n}\nfunction makeKey(appId, path, queryName, args, identity) {\n var _a;\n return [appId, path, queryName, canonicalizeArgs(args), identity.bucket, (_a = identity.token) !== null && _a !== void 0 ? _a : ''].join('\\u0000');\n}\n// ---------------------------------------------------------------------------\n// Error classification.\n// ---------------------------------------------------------------------------\n/** A genuine query-level error (surfaced to onError), as opposed to transport. */\nfunction isQueryLevelError(error) {\n return (error === null || error === void 0 ? void 0 : error.isQueryError) === true || (error === null || error === void 0 ? void 0 : error.isBoundedDecline) === true || (error === null || error === void 0 ? void 0 : error.decline) != null;\n}\n/**\n * A RECOGNIZED transient transport failure that a retry might clear (HTTP 408/429/5xx, a\n * network/abort error). These back off SILENTLY - surfacing them per-poll would rebuild the\n * 429 noise. Anything else (a bad path 404, a permission/config 401/403, a malformed request\n * 400 - things a retry won't fix) is NOT transient, so it gets surfaced once to onError\n * instead of a silently-dead subscription.\n */\nfunction isTransientTransportError(error) {\n if (error == null)\n return true; // unknown - be conservative and keep retrying\n // #060: classify by the actual status, not merely by \"has a status\". Almost every HTTP\n // failure carries a status, including the TERMINAL ones (400/401/403/404); the old\n // `typeof status === 'number'` check lumped them all into \"transient\" and retried them\n // forever with no onError - the exact silently-dead subscription this is meant to avoid.\n const status = typeof error.status === 'number' ? error.status\n : typeof error.statusCode === 'number' ? error.statusCode\n : undefined;\n if (status !== undefined) {\n return status === 408 || status === 429 || status >= 500;\n }\n const code = error.code;\n if (code === 'ECONNABORTED' || code === 'ERR_NETWORK' || code === 'ETIMEDOUT' || code === 'ERR_CANCELED')\n return true;\n if (error.name === 'AbortError' || error.name === 'CanceledError')\n return true;\n if (error.request && !error.response)\n return true; // request sent, no response - network\n return false;\n}\nfunction enrichError(error, phase, willRetry) {\n var _a;\n const err = error instanceof Error ? error : new Error(String((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error));\n try {\n err.phase = phase;\n err.willRetry = willRetry;\n }\n catch (_b) {\n /* frozen error object - deliver as-is */\n }\n return err;\n}\n// ---------------------------------------------------------------------------\n// Interval / scheduling.\n// ---------------------------------------------------------------------------\nfunction clampInterval(value) {\n const n = typeof value === 'number' && isFinite(value) ? value : DEFAULT_QUERY_POLL_INTERVAL_MS;\n return Math.max(MIN_QUERY_POLL_INTERVAL_MS, n);\n}\nfunction recomputeInterval(entry) {\n let min = Infinity;\n for (const s of entry.subscribers)\n if (s.intervalMs < min)\n min = s.intervalMs;\n const next = isFinite(min) ? min : DEFAULT_QUERY_POLL_INTERVAL_MS;\n const changed = next !== entry.effectiveInterval;\n entry.effectiveInterval = next;\n // Realign a pending (not in-flight) timer to the new cadence so a newly-joined\n // faster subscriber does not wait out a slower subscriber's interval (and a\n // departed fast subscriber relaxes the survivors back to their own cadence).\n // But NEVER while backing off - realigning to the (shorter) steady cadence would\n // discard the backoff and re-hit a still-failing transport (the 429 storm).\n if (changed && entry.timer && !entry.inFlight && entry.consecutiveFailures === 0) {\n scheduleNext(entry, entry.effectiveInterval);\n }\n}\nfunction clearTimer(entry) {\n if (entry.timer) {\n clearTimeout(entry.timer);\n entry.timer = null;\n }\n}\nfunction backoffDelay(entry) {\n const base = Math.min(QUERY_POLL_BACKOFF_CAP_MS, entry.effectiveInterval * 2 ** entry.consecutiveFailures);\n // Full jitter over the capped exponential, floored at the base interval so a\n // backed-off key never polls FASTER than its steady cadence.\n return entry.effectiveInterval + Math.floor(Math.random() * Math.max(0, base - entry.effectiveInterval));\n}\nfunction scheduleNext(entry, delayMs) {\n clearTimer(entry);\n if (entry.subscribers.size === 0)\n return;\n if (hidden)\n return; // paused; resume reschedules\n entry.timer = setTimeout(() => {\n entry.timer = null;\n void pollEntry(entry);\n }, delayMs);\n}\n// ---------------------------------------------------------------------------\n// Polling.\n// ---------------------------------------------------------------------------\nfunction pollEntry(entry) {\n if (entry.inFlight)\n return Promise.resolve(); // single-flight\n if (entry.subscribers.size === 0)\n return Promise.resolve();\n entry.inFlight = true;\n const gen = entry.generation;\n return runQuery(entry.path, entry.queryName, entry.args).then((value) => onPollResult(entry, gen, value, undefined), (error) => onPollResult(entry, gen, undefined, error));\n}\n// Staleness is caught by the per-entry generation (bumped on teardown/re-key) and\n// the registry identity check (the entry was removed/replaced) - so an old\n// principal's late result can never reach a re-keyed subscriber. No global epoch\n// is needed, which is why a plain reconnect (identity unchanged) is a no-op.\nfunction onPollResult(entry, gen, value, error) {\n var _a;\n entry.inFlight = false;\n const stale = gen !== entry.generation || registry.get(entry.key) !== entry;\n if (error !== undefined) {\n if (isQueryLevelError(error)) {\n // Query executed but this row errored (or was declined): transport is\n // healthy, so keep the steady cadence and reset backoff.\n entry.consecutiveFailures = 0;\n if (!stale) {\n if (!((error === null || error === void 0 ? void 0 : error.isQueryError) === true && (error === null || error === void 0 ? void 0 : error.message) === UNSUPPORTED_QUERY_SENTINEL)) {\n const phase = entry.hasValue ? 'refresh' : 'initial';\n // De-dupe: a permanently-broken query must not toast onError every\n // interval - fire only when the error (phase + message) changes.\n const sig = `${phase}\u0000${String((_a = (error && error.message)) !== null && _a !== void 0 ? _a : error)}`;\n if (entry.lastErrorSig !== sig) {\n entry.lastErrorSig = sig;\n const enriched = enrichError(error, phase, true);\n entry.lastError = enriched; // remembered so a late joiner learns it's broken (F6)\n for (const s of entry.subscribers)\n safeCall(s.onError, enriched);\n }\n }\n scheduleNext(entry, entry.effectiveInterval);\n }\n return;\n }\n // Transport-level rejection: back off. A RECOGNIZED transient (429/5xx/network/abort)\n // stays SILENT (surfacing it per-poll would rebuild the 429 noise); an UNRECOGNIZED\n // rejection (a bad path, a malformed response - things a retry won't fix) is surfaced\n // ONCE so the subscription is never silently dead. Both keep backing off in case it\n // was misclassified / recovers.\n entry.consecutiveFailures += 1;\n if (!stale) {\n if (!isTransientTransportError(error)) {\n fireEntryError(entry, error, entry.hasValue ? 'refresh' : 'initial', true);\n }\n scheduleNext(entry, backoffDelay(entry));\n }\n return;\n }\n entry.consecutiveFailures = 0;\n if (!stale) {\n entry.lastErrorSig = null; // a good result clears the error-dedup latch...\n entry.lastError = undefined; // ...and the remembered error (joiners no longer replay it)\n deliver(entry, value);\n scheduleNext(entry, entry.effectiveInterval);\n }\n}\n/**\n * Fire onError to all current subscribers, de-duped (a persistently-broken query must not\n * toast every interval) and REMEMBER the error so a late joiner with no value yet can learn\n * the query is broken instead of spinning forever (F6).\n */\nfunction fireEntryError(entry, error, phase, willRetry) {\n var _a;\n const sig = `${phase} ${String((_a = (error && error.message)) !== null && _a !== void 0 ? _a : error)}`;\n if (entry.lastErrorSig === sig)\n return;\n entry.lastErrorSig = sig;\n const enriched = enrichError(error, phase, willRetry);\n entry.lastError = enriched;\n for (const s of entry.subscribers)\n safeCall(s.onError, enriched);\n}\nfunction deliver(entry, value) {\n const canonical = canonicalizeResult(value);\n if (entry.hasValue && entry.lastCanonical === canonical)\n return; // no change\n entry.hasValue = true;\n entry.lastValue = value;\n entry.lastCanonical = canonical;\n for (const s of entry.subscribers)\n safeCall(s.onData, value);\n}\nfunction safeCall(fn, arg) {\n if (!fn)\n return;\n try {\n fn(arg);\n }\n catch (_a) {\n /* an app callback throwing must not break the fan-out loop */\n }\n}\n// ---------------------------------------------------------------------------\n// Attach / detach.\n// ---------------------------------------------------------------------------\nfunction createEntry(key, sub, identity) {\n return {\n key,\n appId: sub.appId,\n path: sub.path,\n queryName: sub.queryName,\n args: sub.args,\n identity,\n subscribers: new Set(),\n generation: 0,\n lastErrorSig: null,\n lastError: undefined,\n effectiveInterval: sub.intervalMs,\n timer: null,\n inFlight: false,\n consecutiveFailures: 0,\n hasValue: false,\n lastValue: undefined,\n lastCanonical: '',\n readyPromise: Promise.resolve(),\n };\n}\n/** Register (or re-register, on identity change) a subscriber under its current identity. */\nasync function attach(sub) {\n const identity = await currentIdentity(sub.appId);\n // The sub may have been unsubscribed / torn down WHILE we awaited identity. The\n // registry+generation staleness guards can't catch this because the entry would be\n // created fresh inside the race, so re-check here before touching the registry.\n if (sub.detached)\n return;\n const key = makeKey(sub.appId, sub.path, sub.queryName, sub.args, identity);\n let entry = registry.get(key);\n let created = false;\n if (!entry) {\n entry = createEntry(key, sub, identity);\n registry.set(key, entry);\n created = true;\n }\n entry.subscribers.add(sub);\n sub.entry = entry;\n recomputeInterval(entry);\n if (created) {\n // Eager initial fetch: do NOT wait a tick. The returned promise resolves\n // after the first fetch settles; an initial failure surfaces via onError\n // (phase 'initial') and still resolves - never leaves the sub in limbo.\n // While hidden, do NOT poll - stay registered so visibility-resume schedules\n // it (covers fresh-subscribe, reconcile re-key, and reattach-retry uniformly).\n if (hidden) {\n entry.readyPromise = Promise.resolve();\n return;\n }\n entry.readyPromise = pollEntry(entry);\n await entry.readyPromise;\n return;\n }\n if (entry.hasValue) {\n // Joiner of an established key gets the last good value immediately.\n safeCall(sub.onData, entry.lastValue);\n return;\n }\n if (entry.lastError) {\n // Joiner of a key that has NO value yet but is in a latched error state: replay the\n // error so a late-mounting component learns the query is broken instead of spinning\n // forever with neither data nor error (F6).\n safeCall(sub.onError, entry.lastError);\n }\n // Joined during the first in-flight fetch: piggyback it (deliver fans out to us).\n await entry.readyPromise;\n}\nfunction detach(sub) {\n const entry = sub.entry;\n if (!entry || !entry.subscribers.has(sub))\n return; // idempotent\n entry.subscribers.delete(sub);\n sub.entry = null;\n if (entry.subscribers.size === 0) {\n entry.generation += 1; // drop any in-flight result\n clearTimer(entry);\n if (registry.get(entry.key) === entry)\n registry.delete(entry.key);\n }\n else {\n recomputeInterval(entry);\n }\n}\n// ---------------------------------------------------------------------------\n// Public API.\n// ---------------------------------------------------------------------------\n/**\n * Subscribe to the live value of a named (computed) query.\n *\n * @param path - The document path the query is declared on (e.g. 'market/mytoken').\n * @param queryName - The named query to run (e.g. 'tokensForOneSol').\n * @param args - Query arguments (canonicalized; drives the dedupe key).\n * @param options - onData/onError callbacks and optional intervalMs; a bare\n * function is coerced to `{ onData }` (mirrors subscribe()).\n * @returns An async unsubscribe function.\n *\n * @example\n * ```typescript\n * const unsubscribe = await subscribeQuery('market/mytoken', 'tokensForOneSol', {}, {\n * onData: (price) => setPrice(price),\n * onError: (err) => { if (err.phase === 'initial') showSpinnerError(); },\n * });\n * await unsubscribe();\n * ```\n */\nexport async function subscribeQuery(path, queryName, args, options) {\n const opts = typeof options === 'function' ? { onData: options } : (options !== null && options !== void 0 ? options : {});\n const sub = {\n onData: opts.onData,\n onError: opts.onError,\n intervalMs: clampInterval(opts.intervalMs),\n appId: clientConfig.appId, // v1 single-app: see QuerySubscriptionOptions\n path,\n queryName,\n args,\n entry: null,\n detached: false,\n reattachTimer: null,\n };\n liveSubscribers.add(sub);\n try {\n await attach(sub);\n }\n catch (error) {\n // Initial identity resolution threw (auth flux) - do not leak the sub into\n // liveSubscribers (it holds the app's callbacks). The caller gets the rejection\n // and no unsubscribe handle, so retire it here. (reattach tolerates this on the\n // re-key path; the initial path must too.)\n stopSubscriber(sub);\n throw error;\n }\n return async () => {\n stopSubscriber(sub); // mark detached + cancel any pending re-key retry\n detach(sub);\n };\n}\n/** Permanently retire a subscriber: no future re-key retry can revive it. */\nfunction stopSubscriber(sub) {\n sub.detached = true;\n if (sub.reattachTimer) {\n clearTimeout(sub.reattachTimer);\n sub.reattachTimer = null;\n }\n liveSubscribers.delete(sub);\n}\n/**\n * Wired to the SDK's auth-change chokepoint (operations.clearReadCacheForAuthChange,\n * driven by reconnectWithNewAuth). That chokepoint fires on ANY reconnect - including\n * a transient browser `online` nudge - not only on a real identity change, so this\n * MUST be idempotent when the principal is unchanged: it re-resolves identity per\n * key and re-keys ONLY the entries whose principal actually changed, preserving the\n * timer and backoff of every unchanged entry (otherwise a flaky connection would\n * rebuild the exact 429 re-poll storm this feature removes).\n */\nexport function notifyQueryAuthChanged() {\n void reconcileIdentity();\n}\nasync function reconcileIdentity() {\n var _a;\n const resolvedByApp = new Map();\n for (const entry of [...registry.values()]) {\n // The entry may have been torn down while we awaited a prior identity.\n if (registry.get(entry.key) !== entry || entry.subscribers.size === 0)\n continue;\n let current = (_a = resolvedByApp.get(entry.appId)) !== null && _a !== void 0 ? _a : null;\n if (!current) {\n try {\n current = await currentIdentity(entry.appId);\n resolvedByApp.set(entry.appId, current);\n }\n catch (_b) {\n // Could not resolve the current identity (e.g. getIdToken threw during\n // an auth-state flux). Treat identity as UNKNOWN and re-key\n // conservatively below - reattach() retries until it resolves, so we\n // neither leak the previous principal's data nor freeze the sub.\n current = null;\n }\n }\n if (registry.get(entry.key) !== entry)\n continue; // re-check across the await\n if (current && current.bucket === entry.identity.bucket && current.token === entry.identity.token) {\n continue; // identity unchanged - keep the entry, its timer, and its backoff\n }\n // Identity changed (or is momentarily unresolvable): drop the entry (its in-flight\n // result is caught by the generation + registry staleness checks) and re-key its\n // subscribers under the new principal. reattach() owns the eager fetch AND a retry,\n // so a transient failure here can never silently orphan a live subscription.\n const subs = [...entry.subscribers].filter((s) => s.entry === entry);\n entry.generation += 1;\n clearTimer(entry);\n // Only delete if THIS entry still owns the key - a replacement entry may have taken\n // it over while we awaited identity (line 499 guards the same window; mirror the\n // check at the delete site so it stays correct if code is inserted between them).\n if (registry.get(entry.key) === entry)\n registry.delete(entry.key);\n for (const s of subs) {\n s.entry = null;\n reattach(s);\n }\n }\n}\n/**\n * Re-register a re-keyed subscriber under its current identity, retrying on failure.\n * A re-keyed subscriber has already been removed from the registry, so if attach()\n * fails there is no other path that would ever bring it back - reattach() IS that\n * path. It stops only when the subscriber re-attaches or the caller unsubscribes.\n */\nfunction reattach(sub) {\n sub.reattachTimer = null; // this run consumes any scheduled retry\n if (sub.detached)\n return;\n attach(sub).then(() => {\n // The caller may have unsubscribed (or the manager been torn down) while this\n // attach was in flight; if so, tear the freshly-revived entry back down instead\n // of leaving a zombie poll.\n if (sub.detached)\n detach(sub);\n }, () => {\n if (sub.detached)\n return;\n sub.reattachTimer = setTimeout(() => reattach(sub), REATTACH_RETRY_MS);\n });\n}\n/** Tear down every query subscription: cancel timers, clear the registry. */\nexport function closeAllQuerySubscriptions() {\n // Retire EVERY live subscriber first (including any detached mid-re-key and waiting\n // on a retry) so a pending reattach can never revive polling after teardown.\n for (const sub of [...liveSubscribers])\n stopSubscriber(sub);\n liveSubscribers.clear();\n for (const entry of registry.values()) {\n entry.generation += 1;\n clearTimer(entry);\n entry.subscribers.clear();\n }\n registry.clear();\n}\n// ---------------------------------------------------------------------------\n// Visibility (pause polling while hidden; single realigned refresh on resume).\n// ---------------------------------------------------------------------------\nfunction setHidden(next) {\n if (next === hidden)\n return;\n hidden = next;\n if (hidden) {\n for (const entry of registry.values())\n clearTimer(entry);\n return;\n }\n // Resume: one refresh per key at a small jitter so N keys don't burst-sync;\n // single-flight collapses it with any still-outstanding poll, and the recurring\n // tick is (re)scheduled by that poll's completion - so exactly one POST resumes.\n // A key that was BACKING OFF resumes on its remaining backoff, not the jitter, so a\n // hide/resume can't be used to bypass 429 throttling.\n for (const entry of registry.values()) {\n const delay = entry.consecutiveFailures > 0\n ? backoffDelay(entry)\n : Math.floor(Math.random() * RESUME_JITTER_MS);\n scheduleNext(entry, delay);\n }\n}\nif (typeof document !== 'undefined' && typeof document.addEventListener === 'function') {\n hidden = !!document.hidden;\n document.addEventListener('visibilitychange', () => {\n setHidden(!!document.hidden);\n });\n}\n// Auto-wire the identity-change signal to the SDK's existing chokepoint.\nonReadCacheAuthChange(notifyQueryAuthChanged);\n// ---------------------------------------------------------------------------\n// Test-only hooks (never part of the public surface).\n// ---------------------------------------------------------------------------\n/** @internal Reset all manager state between test scenarios. */\nexport function __resetForTest() {\n closeAllQuerySubscriptions();\n hidden = false;\n}\n/** @internal Force an out-of-band tick on a key (single-flight assertions). Returns whether a matching entry was found. */\nexport function __pollNowForTest(appId, path, queryName, args, identity) {\n const entry = registry.get(makeKey(appId, path, queryName, args, identity));\n if (!entry)\n return false;\n void pollEntry(entry);\n return true;\n}\n/** @internal Drive visibility without a DOM. */\nexport function __setVisibilityForTest(nextHidden) {\n setHidden(nextHidden);\n}\n/** @internal Snapshot registry state for assertions. */\nexport function __inspectForTest() {\n return { keys: [...registry.keys()], hidden, liveSubscribers: liveSubscribers.size };\n}\n","// ---------------------------------------------------------------------------\n// field-values.ts -- Server-resolved field-value operations for set()/setMany().\n//\n// A field in a write payload may be a plain value OR an \"operation object\" that\n// the server resolves atomically when the write commits:\n//\n// set(\"counters/likes\", { n: increment(1) }) // atomic server-side +1\n// set(\"posts/p1\", { createdAt: serverTimestamp() }) // server unix-seconds clock\n//\n// The Durable Object serializes writes per room, so concurrent increments never\n// lose updates (verified: 20 concurrent +1 -> exactly 20). These helpers just\n// construct the operation objects the worker's resolveOperationFields understands\n// (and which the optimistic store mirrors locally), so prefer them over writing\n// `{ operation: \"increment\", value: 1 }` by hand.\n// ---------------------------------------------------------------------------\n/**\n * Atomically add `value` to a numeric field when the write commits, server-side.\n * Use a negative `value` to decrement. The field starts from 0 if the document\n * (or field) does not exist yet. Concurrent increments are race-free.\n *\n * await set(\"counters/likes\", { n: increment(1) });\n * await set(\"scores/p1\", { points: increment(-5) });\n */\nexport function increment(value) {\n return { operation: 'increment', value };\n}\n/**\n * Stamp a field with the server's clock (Unix seconds) when the write commits —\n * the trustworthy \"when did this happen\" you can't get from a client clock.\n *\n * await set(\"posts/p1\", { createdAt: serverTimestamp() });\n */\nexport function serverTimestamp() {\n return { operation: 'time', value: 'now' };\n}\n","/**\n * Time units in Bounded — read this once and never get a 1000× timestamp bug.\n *\n * **Bounded's policy/proof layer is Unix SECONDS.** `@time.now` in a rule,\n * `rollingSum` `windowSeconds`, `scheduledAt`, and any timestamp *field your\n * policy compares against `@time.now`* are all **seconds**. (This is also what\n * the chain uses — Solana's on-chain clock is `unix_timestamp` in seconds — so a\n * single seconds unit works for both onchain and offchain rules.)\n *\n * **JavaScript is MILLISECONDS.** `Date.now()`, `new Date().getTime()`, and the\n * auto-stamped system fields `_createdAt` / `_updatedAt` are all **ms**.\n *\n * Comparing across the two (e.g. `@time.now - myField` where `myField` was set\n * from `Date.now()`) is 1000× off, so a freshness / TTL check silently treats\n * every row as ancient (or far-future) and drops it — which reads as \"realtime\n * isn't delivering\" when the data is actually fine.\n *\n * **The rules:**\n * - To **write** a timestamp a policy will read, prefer **`serverTimestamp()`**\n * (from this package) — the *server* stamps it in seconds, so it matches\n * `@time.now` AND can't be forged by the client (use it for TTLs, rate windows,\n * anti-cheat). Use `now()` only when you need the value in client code before\n * the write.\n * - To **compare** timestamps in client/render code, use `now()` (seconds), not\n * `Date.now()` (ms), and `toSeconds()` to convert the ms system fields\n * (`_createdAt`/`_updatedAt`) or any `Date.now()` value first.\n */\n/**\n * Current time as a **Unix timestamp in seconds** — the unit Bounded policy rules\n * use (`@time.now`). Use this (not `Date.now()`) when you need a timestamp in\n * client code (e.g. a freshness check). For a value you *store* and a policy\n * reads, prefer the server-authoritative {@link serverTimestamp} instead.\n *\n * ```ts\n * // stale if >15s old — seconds vs seconds ✓\n * if (now() - doc.lastSeenSeconds > 15) renderStale();\n * ```\n */\nexport function now() {\n return Math.floor(Date.now() / 1000);\n}\n/**\n * Convert a JavaScript millisecond timestamp to Bounded's **seconds**. Accepts a\n * `Date`, or an ms number such as `Date.now()` or a doc's `_createdAt` /\n * `_updatedAt` system field.\n *\n * ```ts\n * // doc is >15s old (compare the ms system field in seconds):\n * if (now() - toSeconds(doc._updatedAt) > 15) renderStale();\n * ```\n */\nexport function toSeconds(msOrDate) {\n const ms = msOrDate instanceof Date ? msOrDate.getTime() : msOrDate;\n return Math.floor(ms / 1000);\n}\n/**\n * Convert a Bounded **seconds** timestamp back to JavaScript **milliseconds** —\n * e.g. to build a `Date` or do client-side date math/formatting.\n *\n * ```ts\n * new Date(toMillis(doc.createdAtSeconds)).toLocaleString();\n * ```\n */\nexport function toMillis(seconds) {\n return seconds * 1000;\n}\n","/** SIWS message creation is async already, so its onchain module can be lazy. */\nexport async function genSolanaMessage(address, nonce) {\n const implementation = await import(\"./solana-message\");\n return implementation.genSolanaMessage(address, nonce);\n}\n","// ---------------------------------------------------------------------------\n// functions.ts -- Bounded Functions client (the imperative escape hatch).\n//\n// `bounded.functions.invoke(name, args, opts?)` POSTs to the dispatcher's\n// /invoke endpoint, attaching the caller's session token AUTOMATICALLY (the\n// exact same token the SDK uses for data reads/writes). Works client + server.\n// The dispatcher verifies the token, evaluates the function's `auth` policy\n// rule, and dispatches to the function — returning its JSON, or throwing on\n// 403 / error.\n// ---------------------------------------------------------------------------\nvar __rest = (this && this.__rest) || function (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};\nimport { getConfig } from './config';\nimport { createAuthHeader } from '../utils/utils';\n/** Prod functions dispatcher; overridable via init({ functionsUrl }) or network preset. */\nconst DEFAULT_FUNCTIONS_URL = 'https://functions.bounded.sh';\nexport class FunctionInvokeError extends Error {\n constructor(message, statusCode, details) {\n super(message);\n this.statusCode = statusCode;\n this.details = details;\n this.name = 'FunctionInvokeError';\n }\n}\nfunction stripAuthHeaders(headers) {\n if (!headers)\n return undefined;\n const { Authorization, authorization } = headers, rest = __rest(headers, [\"Authorization\", \"authorization\"]);\n return Object.keys(rest).length > 0 ? rest : undefined;\n}\n/**\n * Invoke a deployed Bounded Function by name. Returns the function's JSON.\n *\n * const res = await bounded.functions.invoke('syncStripe', { customerId });\n *\n * Throws FunctionInvokeError on 401 (not logged in / bad token), 403 (the\n * function's auth policy rule denied this caller), 404 (unknown function),\n * 503 (Workers for Platforms not configured), or any non-2xx / transport error.\n */\nexport async function invoke(name, args = {}, opts = {}) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n if (!name || typeof name !== 'string') {\n throw new FunctionInvokeError('A function name is required');\n }\n // A server WalletClient passes its immutable config snapshot; the default path\n // (browser + top-level server) reads the mutable process-global init() config.\n const config = (_b = (_a = opts._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n const base = (config.functionsUrl || DEFAULT_FUNCTIONS_URL).replace(/\\/$/, '');\n // Attach the caller's session token automatically (same token as data calls).\n // A wallet-scoped call (server WalletClient.invoke) resolves the token from the\n // wallet's own session; browser calls use the active web session. Top-level\n // server calls fail closed because there is no ambient server signer.\n const authHeader = ((_c = opts._overrides) === null || _c === void 0 ? void 0 : _c._getAuthHeaders)\n ? await opts._overrides._getAuthHeaders()\n : await createAuthHeader(config.isServer);\n const headers = Object.assign(Object.assign({ 'Content-Type': 'application/json', 'X-App-Id': config.appId }, ((_d = stripAuthHeaders(opts.headers)) !== null && _d !== void 0 ? _d : {})), (authHeader !== null && authHeader !== void 0 ? authHeader : {}));\n const controller = new AbortController();\n const timeoutMs = (_e = opts.timeoutMs) !== null && _e !== void 0 ? _e : 60000;\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n // `fetch` resolves as soon as the response HEADERS arrive, not when the body\n // has been received, so the abort timer must stay armed across `res.text()`\n // too. Clearing it in a `finally` that covers both the fetch AND the body read\n // means a dispatcher/network that returns headers then stalls (or drip-feeds)\n // the body is torn down at `timeoutMs` instead of leaving `invoke` pending\n // forever and accumulating open connections (DS3-0432).\n let res;\n let text;\n try {\n res = await fetch(`${base}/invoke`, {\n method: 'POST',\n headers,\n body: JSON.stringify({ appId: config.appId, functionName: name, args }),\n signal: controller.signal,\n });\n text = await res.text();\n }\n catch (err) {\n if ((err === null || err === void 0 ? void 0 : err.name) === 'AbortError') {\n throw new FunctionInvokeError(`Function \"${name}\" invocation timed out after ${timeoutMs}ms`);\n }\n throw new FunctionInvokeError(`Failed to reach the functions dispatcher: ${(_f = err === null || err === void 0 ? void 0 : err.message) !== null && _f !== void 0 ? _f : String(err)}`);\n }\n finally {\n clearTimeout(timer);\n }\n let body = null;\n if (text) {\n try {\n body = JSON.parse(text);\n }\n catch (_j) {\n body = { raw: text };\n }\n }\n if (!res.ok) {\n const message = (_h = (_g = body === null || body === void 0 ? void 0 : body.error) !== null && _g !== void 0 ? _g : body === null || body === void 0 ? void 0 : body.message) !== null && _h !== void 0 ? _h : `Function \"${name}\" failed with HTTP ${res.status}`;\n throw new FunctionInvokeError(message, res.status, body);\n }\n // The dispatcher returns the function's JSON directly.\n return body;\n}\n/** The `bounded.functions` namespace surface. */\nexport const functions = { invoke };\n","// ---------------------------------------------------------------------------\n// live.ts -- Bounded Live client (drive a server-authoritative room).\n//\n// A Bounded \"live\" room is a native module (init/tick/views) loaded into an\n// isolated Durable Object facet inside the per-room DO. The worker runs tick\n// ~30Hz server-authoritatively and fans per-player views out on an ephemeral\n// collection. This file is the consumer surface around that runtime:\n//\n// bounded.live.intent(roomPath, intent) -> POST {realtime}/live/intent\n// bounded.live.status(roomPath) -> GET {realtime}/live/status\n//\n// It mirrors `functions.invoke` exactly: it attaches the caller's session token\n// AUTOMATICALLY (the same token the SDK uses for data reads/writes), and throws\n// a typed error on any non-2xx / transport / timeout.\n//\n// The runtime serves any server-authoritative realtime room (Figma clones,\n// editors, dashboards, multiplayer games, ...). Games remain a valid use case;\n// the primitive itself is just \"live\".\n//\n// Addressing: clients address rooms BY PATH (the `path` field in the body). The\n// worker derives the roomId from `body.path` and sets X-Room-Id internally;\n// clients NEVER set X-Room-Id. The caller's address is taken server-side from\n// the Authorization header (auth.userId/userAddress) — it is NOT sent in the\n// body.\n//\n// Subscribing to your view: a per-player view doc lives at\n// `<roomPath>/view/<myUserId>` (the policy declares\n// `rooms/$roomId/view/$userId` ephemeral with `read: $userId == @user.id`).\n// View paths key only by @user.id; wallet-address aliases are intentionally not\n// accepted by this helper.\n// ---------------------------------------------------------------------------\nimport { getConfig } from './config';\nimport { createAuthHeader, getUserInfo } from '../utils/utils';\nimport { subscribeV2, wsIntent, wsIntentReliable } from './subscription-v2';\nimport { deriveDecline, dispatchDeclineEvent } from './decline';\nexport class LiveIntentError extends Error {\n constructor(message, statusCode, details) {\n super(message);\n this.statusCode = statusCode;\n this.details = details;\n this.name = 'LiveIntentError';\n }\n}\n/**\n * Derive the realtime worker's HTTP base from the configured WS API URL.\n * The realtime worker serves both WS and HTTP on the same host, so we reuse\n * `config.wsApiUrl` (wss:// -> https://, ws:// -> http://). The data API\n * (`config.apiUrl`) is a DIFFERENT host and must NOT be used for /live/*.\n */\nfunction realtimeHttpBase(wsApiUrl) {\n const url = new URL(wsApiUrl);\n if (url.protocol === 'wss:')\n url.protocol = 'https:';\n else if (url.protocol === 'ws:')\n url.protocol = 'http:';\n // Strip trailing slash from the resulting origin+path.\n return url.toString().replace(/\\/$/, '');\n}\nfunction withoutAuthorization(headers) {\n if (!headers)\n return undefined;\n const clean = {};\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() === 'authorization')\n continue;\n clean[key] = value;\n }\n return Object.keys(clean).length > 0 ? clean : undefined;\n}\nfunction hasAuthorization(headers) {\n if (!headers)\n return false;\n return Object.entries(headers).some(([key, value]) => key.toLowerCase() === 'authorization' &&\n typeof value === 'string' &&\n /^Bearer\\s+\\S+$/i.test(value.trim()));\n}\nasync function liveAuthHeader(configIsServer, overrides) {\n if (overrides === null || overrides === void 0 ? void 0 : overrides._getAuthHeaders) {\n return overrides._getAuthHeaders();\n }\n return createAuthHeader(configIsServer);\n}\n/**\n * Send a player intent to a running live room. Returns `{ ok: true }`.\n *\n * await bounded.live.intent('rooms/abc', { type: 'move', dir: 'up' });\n *\n * `roomPath` is the document path of the room (e.g. `rooms/abc`). The worker\n * derives the room from this path and reads `intent` as the opaque per-tick\n * input. The caller's address is taken from the attached session token.\n *\n * Throws LiveIntentError on 401 (not logged in / bad token), 404 (room has no\n * live module), 503 (live runtime/module unavailable), or any non-2xx /\n * transport error / timeout.\n */\nexport async function intent(roomPath, intent, opts = {}) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n if (!roomPath || typeof roomPath !== 'string') {\n throw new LiveIntentError('A room path is required');\n }\n // A server WalletClient passes its immutable config snapshot; the default path\n // reads the mutable process-global init() config. This keeps a wallet client's\n // live intents on its original app/realtime endpoint after a later global\n // init() (CTA-05).\n const config = (_b = (_a = opts._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n const initialAuthHeader = await liveAuthHeader(config.isServer, opts._overrides);\n if (!hasAuthorization(initialAuthHeader)) {\n if (opts.fireAndForget)\n return { ok: true };\n throw new LiveIntentError('Authentication required to send a live intent. Call init() and sign in before sending live room intents.', 401);\n }\n // Ride the already-open per-room socket instead of a fresh HTTP POST per\n // intent. That is what makes high-frequency input (~20-30Hz) cheap — one\n // persistent connection, no per-intent TCP/TLS or connection-pool contention\n // (which was head-of-line-blocking the view stream). The worker is the room\n // authority (the connection is routed to the room DO), so we pass no\n // destination.\n //\n // - fireAndForget: send and return immediately (lowest latency for inputs).\n // - default: send WITH a requestId and AWAIT the ack, so a policy/auth deny\n // (401/403/404/503) REJECTS — important intents (join/ready) must not\n // silently \"succeed\".\n //\n // Either way we fall back to HTTP below only when no live socket exists yet\n // (e.g. the first join before subscribeView's WS connects) — HTTP also throws\n // on a non-2xx, so errors are surfaced there too.\n const normalizedRoomPath = roomPath.replace(/\\/$/, '');\n const hasAuthOverride = !!((_c = opts._overrides) === null || _c === void 0 ? void 0 : _c._getAuthHeaders);\n if (!hasAuthOverride) {\n if (opts.fireAndForget) {\n if (await wsIntent(config.appId, normalizedRoomPath, intent, config.isServer))\n return { ok: true };\n }\n else {\n const ack = await wsIntentReliable(config.appId, normalizedRoomPath, intent, config.isServer);\n if (ack)\n return ack;\n }\n }\n const base = realtimeHttpBase(config.wsApiUrl);\n const extraHeaders = withoutAuthorization(opts.headers);\n const overrideHeaders = withoutAuthorization((_d = opts._overrides) === null || _d === void 0 ? void 0 : _d.headers);\n const buildHeaders = async () => {\n const authHeader = await liveAuthHeader(config.isServer, opts._overrides);\n if (!hasAuthorization(authHeader)) {\n throw new LiveIntentError('Authentication required to send a live intent. Call init() and sign in before sending live room intents.', 401);\n }\n return Object.assign(Object.assign(Object.assign({ 'Content-Type': 'application/json', 'X-App-Id': config.appId }, (overrideHeaders !== null && overrideHeaders !== void 0 ? overrideHeaders : {})), (extraHeaders !== null && extraHeaders !== void 0 ? extraHeaders : {})), (authHeader !== null && authHeader !== void 0 ? authHeader : {}));\n };\n const controller = new AbortController();\n const timeoutMs = (_e = opts.timeoutMs) !== null && _e !== void 0 ? _e : 60000;\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n let res;\n try {\n const send = async () => fetch(`${base}/live/intent`, {\n method: 'POST',\n headers: await buildHeaders(),\n body: JSON.stringify({ path: normalizedRoomPath, intent }),\n signal: controller.signal,\n });\n res = await send();\n if (res.status === 401 && ((_f = opts._overrides) === null || _f === void 0 ? void 0 : _f._clearAuth)) {\n await opts._overrides._clearAuth();\n res = await send();\n }\n }\n catch (err) {\n clearTimeout(timer);\n if (err instanceof LiveIntentError)\n throw err;\n if ((err === null || err === void 0 ? void 0 : err.name) === 'AbortError') {\n throw new LiveIntentError(`Live intent to \"${roomPath}\" timed out after ${timeoutMs}ms`);\n }\n throw new LiveIntentError(`Failed to reach the realtime worker: ${(_g = err === null || err === void 0 ? void 0 : err.message) !== null && _g !== void 0 ? _g : String(err)}`);\n }\n clearTimeout(timer);\n let body = null;\n const text = await res.text();\n if (text) {\n try {\n body = JSON.parse(text);\n }\n catch (_k) {\n body = { raw: text };\n }\n }\n if (!res.ok) {\n const message = (_j = (_h = body === null || body === void 0 ? void 0 : body.error) !== null && _h !== void 0 ? _h : body === null || body === void 0 ? void 0 : body.message) !== null && _j !== void 0 ? _j : `Live intent failed with HTTP ${res.status}`;\n const liveError = new LiveIntentError(message, res.status, body);\n // A policy/invariant denial of a live intent carries the same structured\n // decline as the data-write path. Mirror `.decline` onto the LiveIntentError\n // (its name/contract is unchanged) and notify the browser widget.\n const decline = deriveDecline(body, res.status);\n if (decline) {\n liveError.decline = decline;\n liveError.isBoundedDecline = true;\n dispatchDeclineEvent(decline, config.appId);\n }\n throw liveError;\n }\n return (body !== null && body !== void 0 ? body : { ok: true });\n}\n/**\n * Fetch the runtime status for a live room.\n *\n * const s = await bounded.live.status('rooms/abc');\n * console.log(s.running, s.stopReason, s.generation, s.etag);\n *\n * This is diagnostic/ops surface. It reports whether the room facet exists,\n * whether it is currently ticking, why it last stopped, which module etag is\n * loaded, and the current generation used after terminal restarts.\n *\n * Auth: status attaches the caller's session token WHEN ONE EXISTS (mirroring\n * `intent`), but does NOT require it. The server gates the DETAILED body on the\n * room's read rule — an authenticated caller who can read the room gets full\n * telemetry; an anonymous / unauthorized caller gets only the slim liveness\n * shape `{available, started, module}` (#102). The caller's own `opts.headers`\n * may never smuggle in Authorization: only the derived session token sets it.\n */\nexport async function status(roomPath, opts = {}) {\n var _a, _b, _c, _d, _e, _f, _g;\n if (!roomPath || typeof roomPath !== 'string') {\n throw new LiveIntentError('A room path is required');\n }\n const normalizedRoomPath = roomPath.replace(/\\/$/, '');\n // Honor a wallet client's immutable config snapshot (CTA-05); otherwise read\n // the mutable process-global init() config.\n const config = (_b = (_a = opts._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n const base = realtimeHttpBase(config.wsApiUrl);\n const authHeader = await liveAuthHeader(config.isServer, opts._overrides);\n const extraHeaders = withoutAuthorization(opts.headers);\n const overrideHeaders = withoutAuthorization((_c = opts._overrides) === null || _c === void 0 ? void 0 : _c.headers);\n const headers = Object.assign(Object.assign(Object.assign({ 'X-App-Id': config.appId }, (overrideHeaders !== null && overrideHeaders !== void 0 ? overrideHeaders : {})), (extraHeaders !== null && extraHeaders !== void 0 ? extraHeaders : {})), (hasAuthorization(authHeader) ? authHeader : {}));\n const controller = new AbortController();\n const timeoutMs = (_d = opts.timeoutMs) !== null && _d !== void 0 ? _d : 15000;\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n let res;\n try {\n res = await fetch(`${base}/live/status?path=${encodeURIComponent(normalizedRoomPath)}`, {\n method: 'GET',\n headers,\n signal: controller.signal,\n });\n }\n catch (err) {\n clearTimeout(timer);\n if ((err === null || err === void 0 ? void 0 : err.name) === 'AbortError') {\n throw new LiveIntentError(`Live status for \"${normalizedRoomPath}\" timed out after ${timeoutMs}ms`);\n }\n throw new LiveIntentError(`Failed to reach the realtime worker: ${(_e = err === null || err === void 0 ? void 0 : err.message) !== null && _e !== void 0 ? _e : String(err)}`);\n }\n clearTimeout(timer);\n let body = null;\n const text = await res.text();\n if (text) {\n try {\n body = JSON.parse(text);\n }\n catch (_h) {\n body = { raw: text };\n }\n }\n if (!res.ok) {\n const message = (_g = (_f = body === null || body === void 0 ? void 0 : body.error) !== null && _f !== void 0 ? _f : body === null || body === void 0 ? void 0 : body.message) !== null && _g !== void 0 ? _g : `Live status failed with HTTP ${res.status}`;\n throw new LiveIntentError(message, res.status, body);\n }\n return body;\n}\n/**\n * Subscribe to YOUR per-player view of a room. Thin sugar over:\n *\n * subscribe('<roomPath>/view/<myUserId>', { onData, onError })\n *\n * The view id defaults to the logged-in user's @user.id (from the session token\n * claims); pass `opts.userId` to override. Returns the unsubscribe function\n * (a Promise<() => Promise<void>>, same as `subscribe`).\n *\n * Server/agent consumers: use `WalletClient.live.subscribeView` (it supplies\n * the wallet session + view id); browser apps just call this directly.\n */\nexport async function subscribeView(roomPath, opts) {\n if (!roomPath || typeof roomPath !== 'string') {\n throw new LiveIntentError('A room path is required');\n }\n if (!opts || typeof opts.onData !== 'function') {\n throw new LiveIntentError('subscribeView requires an onData callback');\n }\n let viewUserId = opts.userId;\n if (!viewUserId) {\n const config = await getConfig();\n const info = await getUserInfo(config.isServer);\n // getUserInfo returns the RAW idToken payload. The universal live view key\n // is @user.id (`custom:userId`); wallet-address keyed compatibility aliases\n // are intentionally not accepted.\n viewUserId = info === null || info === void 0 ? void 0 : info['custom:userId'];\n }\n if (!viewUserId || typeof viewUserId !== 'string') {\n throw new LiveIntentError('Could not resolve a player view id for subscribeView; pass opts.userId or log in first');\n }\n const normalizedRoomPath = roomPath.replace(/\\/$/, '');\n const viewPath = `${normalizedRoomPath}/view/${viewUserId}`;\n // This is a LIVE/room subscription by construction (the caller hands us the\n // room path), so we route its connection to the per-room DO where the live\n // view fan-out runs. App code passes NO routing — the room path is the helper's\n // own argument, and the worker stays the authority on the destination DO (it\n // derives the room from the `?path=` the connection carries). Without this the\n // subscription lands on the app-level project DO and never sees the room's\n // ephemeral view writes.\n return subscribeV2(viewPath, { onData: opts.onData, onError: opts.onError, _overrides: opts._overrides }, normalizedRoomPath);\n}\n/** The `bounded.live` namespace surface. */\nexport const live = { intent, status, subscribeView };\n","// ---------------------------------------------------------------------------\n// live-effects.ts -- AUTHOR-facing types + helpers for writing a Bounded live\n// module that emits EFFECTS (call an LLM for an AI NPC, run a function, settle a\n// transaction, write authoritative data) from its otherwise-pure tick.\n//\n// The tick stays a PURE, synchronous reducer: it cannot call out. Instead it\n// EMITS effects as data alongside the next state; the platform runs them off the\n// deterministic loop and re-injects each result as a recorded `@effect` intent on\n// a later tick — so replay stays bit-identical (it reads the recorded result and\n// never re-executes/re-charges). See BOUNDED-LIVE-EFFECTS-SPEC.md §3/§9.\n//\n// SOURCE OF TRUTH for these contracts is the runtime core\n// (realtime-worker/src/effects-core.ts). This module mirrors the AUTHOR-facing\n// subset for the SDK (the two are kept structurally identical by the shared spec).\n// ---------------------------------------------------------------------------\n/** Reserved intent address an effect result arrives on. */\nexport const EFFECT_INTENT_ADDRESS = \"@effect\";\n// ---------------------------------------------------------------------------\n// Ergonomic helpers\n// ---------------------------------------------------------------------------\n/**\n * Build the `{ state, effects }` tick return. Always include this (even with an\n * empty list) when you intend the wrapper, so the runtime never has to guess\n * whether your state object happens to look like the wrapper.\n *\n * return withEffects(next, [{ kind: \"ai\", id: `npc:${id}:${next.turn}`, model, input }]);\n */\nexport function withEffects(state, effects = []) {\n return { state, effects };\n}\n/**\n * Narrow an incoming intent to an effect result inside your tick:\n *\n * for (const i of intents) {\n * if (i.address === EFFECT_INTENT_ADDRESS && isEffectResult(i.intent)) {\n * applyResult(state, i.intent); // i.intent.effectId / .ok / .result / .error\n * } else { applyPlayerIntent(state, i); }\n * }\n */\nexport function isEffectResult(intent) {\n return (!!intent &&\n typeof intent === \"object\" &&\n intent.__effect === true &&\n typeof intent.effectId === \"string\" &&\n typeof intent.ok === \"boolean\");\n}\n/** Identity helper purely for type inference when authoring a module. */\nexport function defineLiveModule(mod) {\n return mod;\n}\n"],"names":["isRetryAllowed","require$$0","require$$1","exports","Buffer","hashForKey","principalFromIdToken","this"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACO,MAAM,qBAAqB,GAAG;AACrC;AACA,IAAI,IAAI,EAAE,EAAE;AACZ,IAAI,OAAO,EAAE,EAAE;AACf;AACA;AACA,IAAI,OAAO,EAAE,oBAAoB;AACjC,IAAI,QAAQ,EAAE,2BAA2B;AACzC,IAAI,MAAM,EAAE,6BAA6B;AACzC,IAAI,UAAU,EAAE,gCAAgC;AAChD,IAAI,eAAe,EAAE,yBAAyB;AAC9C,IAAI,YAAY,EAAE,8BAA8B;AAChD,IAAI,SAAS,EAAE,4BAA4B;AAC3C,IAAI,KAAK,EAAE,EAAE;AACb;AACA;AACA;AACA;AACA;AACA,IAAI,UAAU,EAAE,MAAM;AACtB,IAAI,KAAK,EAAE,EAAE;AACb,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,eAAe,EAAE,IAAI;AACzB,IAAI,YAAY,EAAE,IAAI;AACtB,IAAI,QAAQ,EAAE,KAAK;AACnB,CAAC;AACM,IAAI,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,qBAAqB,CAAC;AAClE,IAAI,aAAa,GAAG,KAAK;AACzB;AACA;AACA;AACA,IAAI,WAAW,GAAG,EAAE;AACb,MAAM,gBAAgB,GAAG;AAChC,IAAI,iBAAiB,EAAE;AACvB,QAAQ,QAAQ,EAAE,mCAAmC;AACrD,QAAQ,MAAM,EAAE,qCAAqC;AACrD,QAAQ,UAAU,EAAE,wCAAwC;AAC5D,QAAQ,eAAe,EAAE,iCAAiC;AAC1D,QAAQ,YAAY,EAAE,sCAAsC;AAC5D,QAAQ,SAAS,EAAE,oCAAoC;AACvD,KAAK;AACL,IAAI,oBAAoB,EAAE;AAC1B;AACA;AACA;AACA,QAAQ,QAAQ,EAAE,2BAA2B;AAC7C,QAAQ,MAAM,EAAE,6BAA6B;AAC7C,QAAQ,UAAU,EAAE,gCAAgC;AACpD,QAAQ,eAAe,EAAE,yBAAyB;AAClD,QAAQ,YAAY,EAAE,8BAA8B;AACpD,QAAQ,SAAS,EAAE,4BAA4B;AAC/C,KAAK;AACL,CAAC;AACD;AACA,gBAAgB,CAAC,SAAS,CAAC,GAAG,gBAAgB,CAAC,oBAAoB,CAAC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,iBAAiB,GAAG;AACpC,IAAI,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO;AACpC,IAAI,MAAM,MAAM,GAAG,GAAG,GAAG,gBAAgB,CAAC,GAAG,CAAC,GAAG,SAAS;AAC1D,IAAI,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM;AAC9E,IAAI,IAAI,CAAC,IAAI;AACb,QAAQ,OAAO,SAAS;AACxB,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,wCAAwC;AAC7E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,kBAAkB,GAAG;AACrC,IAAI,OAAO,YAAY,CAAC,KAAK,IAAI,SAAS;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,gBAAgB,GAAG;AACnC,IAAI,OAAO,sBAAsB,CAAC,YAAY,CAAC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,sBAAsB,CAAC,MAAM,EAAE;AAC/C,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO;AAC9B,IAAI,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,IAAI,gBAAgB;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE;AACrD,IAAI,IAAI,SAAS,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,SAAS,CAAC,OAAO,IAAI,gBAAgB,CAAC,EAAE;AACrF,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,6BAA6B,EAAE,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,4DAA4D,CAAC,CAAC;AAChJ,IAAI;AACJ,IAAI,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE;AAC/E,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,EAAE,SAAS,CAAC;AACnF;AACO,SAAS,IAAI,CAAC,SAAS,EAAE;AAChC,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC5C,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAC9B,YAAY,MAAM,CAAC,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;AACpD,YAAY;AACZ,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,QAAQ;AACpB,QAAQ,IAAI;AACZ,YAAY,QAAQ,GAAG,mBAAmB,CAAC,YAAY,EAAE,SAAS,CAAC;AACnE,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,MAAM,CAAC,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7E,YAAY;AACZ,QAAQ;AACR,QAAQ,YAAY,GAAG,QAAQ;AAC/B,QAAQ,aAAa,GAAG,IAAI;AAC5B,QAAQ,MAAM,OAAO,GAAG,WAAW;AACnC,QAAQ,WAAW,GAAG,EAAE;AACxB,QAAQ,KAAK,MAAM,IAAI,IAAI,OAAO;AAClC,YAAY,IAAI,EAAE;AAClB,QAAQ,OAAO,EAAE;AACjB,IAAI,CAAC,CAAC;AACN;AACA,SAAS,qBAAqB,GAAG;AACjC,IAAI,IAAI,aAAa;AACrB,QAAQ,OAAO,OAAO,CAAC,OAAO,EAAE;AAChC,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE;AACO,eAAe,SAAS,GAAG;AAClC,IAAI,MAAM,qBAAqB,EAAE;AACjC,IAAI,OAAO,YAAY;AACvB;;;;;;;;;;;;;AC3JA,CAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;AACzB,EAAC,WAAW;AACZ,EAAC,aAAa;;AAEd;AACA,EAAC,2BAA2B;AAC5B,EAAC,mBAAmB;AACpB,EAAC,kCAAkC;AACnC,EAAC,iCAAiC;AAClC,EAAC,oCAAoC;AACrC,EAAC,wBAAwB;AACzB,EAAC,uBAAuB;AACxB,EAAC,oBAAoB;AACrB,EAAC,kBAAkB;AACnB,EAAC,mBAAmB;AACpB,EAAC,iBAAiB;AAClB,EAAC,gCAAgC;AACjC,EAAC,+BAA+B;AAChC,EAAC,gCAAgC;AACjC,EAAC,gCAAgC;AACjC,EAAC,YAAY;AACb,EAAC,6BAA6B;AAC9B,EAAC,2BAA2B;AAC5B,EAAC,mCAAmC;AACpC,EAAC,iCAAiC;AAClC,EAAC,qBAAqB;AACtB,EAAC,cAAc;AACf,EAAC,YAAY;AACb,EAAC,sBAAsB;AACvB,EAAC,iBAAiB;AAClB,EAAC,gBAAgB;AACjB,EAAC,eAAe;EACf;AACD,EAAC,CAAC;;AAEF;AACA,CAAAA,gBAAc,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;;;;;;;ACrCrD,MAAM,SAAS,GAAG,aAAa;AAC/B,SAAS,cAAc,CAAC,KAAK,EAAE;AACtC,IAAI,MAAM,iBAAiB,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC;AAC9D,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE;AACxB,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;AACrB,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA,IAAI,IAAI,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAChD,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA,IAAI,OAAO,cAAc,CAAC,KAAK,CAAC;AAChC;AACA,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC;AACpD,MAAM,uBAAuB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACpE,SAAS,gBAAgB,CAAC,KAAK,EAAE;AACxC,IAAI,QAAQ,KAAK,CAAC,IAAI,KAAK,cAAc;AACzC,SAAS,CAAC,KAAK,CAAC,QAAQ;AACxB,YAAY,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,GAAG;AACzC,aAAa,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;AAC3E;AACO,SAAS,kBAAkB,CAAC,KAAK,EAAE;AAC1C,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE;AAC/B;AACA,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;AAC3F;AACO,SAAS,wBAAwB,CAAC,KAAK,EAAE;AAChD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE;AAC/B;AACA,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,uBAAuB,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE;AACjG;AACO,SAAS,iCAAiC,CAAC,KAAK,EAAE;AACzD,IAAI,OAAO,cAAc,CAAC,KAAK,CAAC,IAAI,wBAAwB,CAAC,KAAK,CAAC;AACnE;AACO,SAAS,UAAU,CAAC,KAAK,GAAG,SAAS,EAAE;AAC9C,IAAI,MAAM,gBAAgB,GAAG,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,aAAa,CAAC;AACpE,IAAI,IAAI,CAAC,gBAAgB,EAAE;AAC3B,QAAQ,OAAO,CAAC;AAChB,IAAI;AACJ;AACA,IAAI,IAAI,YAAY,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI;AAC7D;AACA,IAAI,IAAI,YAAY,KAAK,CAAC,EAAE;AAC5B,QAAQ,YAAY,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE;AAC/E,IAAI;AACJ,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,YAAY,CAAC;AACpC;AACA,SAAS,OAAO,CAAC,YAAY,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE;AACtD,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;AACzC;AACO,SAAS,gBAAgB,CAAC,WAAW,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,EAAE,WAAW,GAAG,GAAG,EAAE;AACxF,IAAI,MAAM,eAAe,GAAG,CAAC,IAAI,WAAW,GAAG,WAAW;AAC1D,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;AAC9D,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAClD,IAAI,OAAO,KAAK,GAAG,SAAS;AAC5B;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,WAAW,GAAG,GAAG,EAAE;AAC/C,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,EAAE,KAAK,GAAG,SAAS,KAAK;AACnD,QAAQ,MAAM,KAAK,GAAG,WAAW,GAAG,WAAW;AAC/C,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC;AACjD,IAAI,CAAC;AACL;AACO,MAAM,eAAe,GAAG;AAC/B,IAAI,OAAO,EAAE,CAAC;AACd,IAAI,cAAc,EAAE,iCAAiC;AACrD,IAAI,UAAU,EAAE,OAAO;AACvB,IAAI,kBAAkB,EAAE,KAAK;AAC7B,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;AACtB,IAAI,uBAAuB,EAAE,MAAM,EAAE,CAAC;AACtC,IAAI,gBAAgB,EAAE;AACtB,CAAC;AACD,SAAS,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE;AACnD,IAAI,OAAO,EAAE,GAAG,eAAe,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE;AAC1E;AACA,SAAS,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,oBAAoB,GAAG,KAAK,EAAE;AAC/E,IAAI,MAAM,YAAY,GAAG,iBAAiB,CAAC,MAAM,EAAE,cAAc,IAAI,EAAE,CAAC;AACxE,IAAI,YAAY,CAAC,UAAU,GAAG,YAAY,CAAC,UAAU,IAAI,CAAC;AAC1D,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,IAAI,oBAAoB,EAAE;AAC/D,QAAQ,YAAY,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE;AACjD,IAAI;AACJ,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,YAAY;AACpC,IAAI,OAAO,YAAY;AACvB;AACA,SAAS,SAAS,CAAC,aAAa,EAAE,MAAM,EAAE;AAC1C;AACA,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE;AACvD;AACA,QAAQ,OAAO,MAAM,CAAC,KAAK;AAC3B,IAAI;AACJ,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC,SAAS,KAAK,MAAM,CAAC,SAAS,EAAE;AAC/D,QAAQ,OAAO,MAAM,CAAC,SAAS;AAC/B,IAAI;AACJ,IAAI,IAAI,aAAa,CAAC,QAAQ,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU,EAAE;AACjE,QAAQ,OAAO,MAAM,CAAC,UAAU;AAChC,IAAI;AACJ;AACA,eAAe,WAAW,CAAC,YAAY,EAAE,KAAK,EAAE;AAChD,IAAI,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,GAAG,YAAY;AACpD,IAAI,MAAM,oBAAoB,GAAG,CAAC,YAAY,CAAC,UAAU,IAAI,CAAC,IAAI,OAAO,IAAI,cAAc,CAAC,KAAK,CAAC;AAClG;AACA,IAAI,IAAI,OAAO,oBAAoB,KAAK,QAAQ,EAAE;AAClD,QAAQ,IAAI;AACZ,YAAY,MAAM,wBAAwB,GAAG,MAAM,oBAAoB;AACvE;AACA,YAAY,OAAO,wBAAwB,KAAK,KAAK;AACrD,QAAQ;AACR,QAAQ,OAAO,IAAI,EAAE;AACrB,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,oBAAoB;AAC/B;AACA,eAAe,WAAW,CAAC,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE;AACvE,IAAI,YAAY,CAAC,UAAU,IAAI,CAAC;AAChC,IAAI,MAAM,EAAE,UAAU,EAAE,kBAAkB,EAAE,OAAO,EAAE,GAAG,YAAY;AACpE,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC;AAC5D;AACA;AACA,IAAI,SAAS,CAAC,aAAa,EAAE,MAAM,CAAC;AACpC,IAAI,IAAI,CAAC,kBAAkB,IAAI,MAAM,CAAC,OAAO,IAAI,YAAY,CAAC,eAAe,EAAE;AAC/E,QAAQ,MAAM,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,YAAY,CAAC,eAAe;AAC7E,QAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG,mBAAmB,GAAG,KAAK;AACpE,QAAQ,IAAI,OAAO,IAAI,CAAC,EAAE;AAC1B,YAAY,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,QAAQ;AACR,QAAQ,MAAM,CAAC,OAAO,GAAG,OAAO;AAChC,IAAI;AACJ,IAAI,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;AAC9C,IAAI,MAAM,OAAO,CAAC,YAAY,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC;AACzD,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE;AAChC,QAAQ,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AACrD,IAAI;AACJ,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AACpC,QAAQ,MAAM,aAAa,GAAG,MAAM;AACpC,YAAY,YAAY,CAAC,OAAO,CAAC;AACjC,YAAY,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC1C,QAAQ,CAAC;AACT,QAAQ,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM;AACzC,YAAY,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AAC1C,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,mBAAmB,EAAE;AACpD,gBAAgB,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,CAAC;AACzE,YAAY;AACZ,QAAQ,CAAC,EAAE,KAAK,CAAC;AACjB,QAAQ,IAAI,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE;AAC7C,YAAY,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAClF,QAAQ;AACR,IAAI,CAAC,CAAC;AACN;AACA,eAAe,2BAA2B,CAAC,YAAY,EAAE,KAAK,EAAE;AAChE,IAAI,IAAI,YAAY,CAAC,UAAU,IAAI,YAAY,CAAC,OAAO;AACvD,QAAQ,MAAM,YAAY,CAAC,uBAAuB,CAAC,KAAK,EAAE,YAAY,CAAC,UAAU,CAAC;AAClF;AACA,MAAM,UAAU,GAAG,CAAC,aAAa,EAAE,cAAc,KAAK;AACtD,IAAI,MAAM,oBAAoB,GAAG,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK;AACpF,QAAQ,eAAe,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,CAAC;AACrD,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,gBAAgB,EAAE;AACjD;AACA,YAAY,MAAM,CAAC,cAAc,GAAG,MAAM,KAAK;AAC/C,QAAQ;AACR,QAAQ,OAAO,MAAM;AACrB,IAAI,CAAC,CAAC;AACN,IAAI,MAAM,qBAAqB,GAAG,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,KAAK,KAAK;AACjG,QAAQ,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK;AAChC;AACA,QAAQ,IAAI,CAAC,MAAM,EAAE;AACrB,YAAY,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,QAAQ;AACR,QAAQ,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,EAAE,cAAc,CAAC;AACpE,QAAQ,IAAI,KAAK,CAAC,QAAQ,IAAI,YAAY,CAAC,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE;AAC/E;AACA,YAAY,OAAO,KAAK,CAAC,QAAQ;AACjC,QAAQ;AACR,QAAQ,IAAI,MAAM,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,EAAE;AACpD,YAAY,OAAO,WAAW,CAAC,aAAa,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAC;AAC1E,QAAQ;AACR,QAAQ,MAAM,2BAA2B,CAAC,YAAY,EAAE,KAAK,CAAC;AAC9D,QAAQ,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACpC,IAAI,CAAC,CAAC;AACN,IAAI,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE;AAC1D,CAAC;AACD;AACA,UAAU,CAAC,cAAc,GAAG,cAAc;AAC1C,UAAU,CAAC,kBAAkB,GAAG,kBAAkB;AAClD,UAAU,CAAC,wBAAwB,GAAG,wBAAwB;AAC9D,UAAU,CAAC,iCAAiC,GAAG,iCAAiC;AAChF,UAAU,CAAC,gBAAgB,GAAG,gBAAgB;AAC9C,UAAU,CAAC,WAAW,GAAG,WAAW;AACpC,UAAU,CAAC,gBAAgB,GAAG,gBAAgB;;ACtM9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE;AACxC,IAAI,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACpD,IAAI,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACnF,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;AAC7B,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AACpC,QAAQ,OAAO,IAAI;AACnB,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAE;AACnC,eAAe,kBAAkB,CAAC,eAAe,EAAE;AACnD;AACA;AACA,IAAI,MAAM,OAAO,GAAG,eAAe,IAAI,CAAC,MAAM,SAAS,EAAE,EAAE,UAAU,IAAI,EAAE;AAC3E,IAAI,IAAI,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/C,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,QAAQ,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;AAC9B,YAAY,OAAO;AACnB,YAAY,OAAO,EAAE;AACrB,gBAAgB,cAAc,EAAE,kBAAkB;AAClD,aAAa;AACb,YAAY,OAAO,EAAE,KAAK;AAC1B,SAAS,CAAC;AACV,QAAQ,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC;AAC9C,IAAI;AACJ,IAAI,OAAO,MAAM;AACjB;AAMO,eAAe,YAAY,CAAC,aAAa,EAAE;AAClD;AACA;AACA,IAAI,MAAM,MAAM,GAAG,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,MAAM,GAAG,aAAa,GAAG,MAAM,SAAS,EAAE;AACzG,IAAI,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;AAC9D,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;AAC9B,IAAI,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE;AACtD,QAAQ;AACR,KAAK,CAAC;AACN,IAAI,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,uBAAuB,EAAE,OAAO,CAAC,CAAC;AACrF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,GAAG;AAC7B,IAAI,IAAI,EAAE;AACV,IAAI,MAAM,MAAM,GAAG,CAAC,OAAO,OAAO,KAAK,WAAW,KAAK,CAAC,EAAE,GAAG,OAAO,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,4BAA4B,CAAC,KAAK,EAAE;AACtJ,IAAI,OAAO,MAAM,GAAG,EAAE,uBAAuB,EAAE,MAAM,EAAE,GAAG,EAAE;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,sBAAsB,GAAG,EAAE,YAAY,EAAE,MAAM,EAAE;AACvD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,aAAa,EAAE;AACjH,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;AAClB;AACA;AACA,IAAI,MAAM,MAAM,GAAG,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,MAAM,GAAG,aAAa,GAAG,MAAM,SAAS,EAAE;AACzG,IAAI,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC;AAC9D,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;AAC9B;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,UAAU,GAAG,CAAC,EAAE,GAAG,kBAAkB,KAAK,IAAI,IAAI,kBAAkB,KAAK,MAAM,GAAG,kBAAkB,GAAG,sBAAsB,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,IAAI,sBAAsB,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;AAC5Q,IAAI,IAAI;AACR,QAAQ,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE;AACvD,YAAY,KAAK;AACjB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,SAAS;AACrB,YAAY;AACZ,SAAS,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,CAAC;AAC5C,QAAQ,OAAO,QAAQ,CAAC,IAAI;AAC5B,IAAI;AACJ,IAAI,OAAO,GAAG,EAAE;AAChB;AACA;AACA;AACA,QAAQ,MAAM,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI;AAC5H,QAAQ,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,EAAE;AACzC,YAAY,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC;AAC7D,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK;AAC5B,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM;AACnI,YAAY,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI;AAC3B,YAAY,MAAM,CAAC;AACnB,QAAQ;AACR,QAAQ,MAAM,GAAG;AACjB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAE;AACjC,eAAe,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE;AAC3D,IAAI,MAAM,SAAS,GAAG,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC;AACxD,IAAI,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC;AAC1D,IAAI,IAAI,QAAQ;AAChB,QAAQ,OAAO,QAAQ;AACvB,IAAI,IAAI,aAAa;AACrB,IAAI,aAAa,GAAG,CAAC,YAAY;AACjC,QAAQ,IAAI;AACZ,YAAY,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE;AAC5C,YAAY,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;AACtC;AACA;AACA;AACA,YAAY,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC;AAC1D,YAAY,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,EAAE;AACzE,gBAAgB,YAAY;AAC5B,gBAAgB;AAChB,aAAa,EAAE,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACnF,YAAY,OAAO,QAAQ,CAAC,IAAI;AAChC,QAAQ;AACR,gBAAgB;AAChB;AACA;AACA;AACA,YAAY,IAAI,sBAAsB,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,aAAa,EAAE;AACzE,gBAAgB,sBAAsB,CAAC,MAAM,CAAC,SAAS,CAAC;AACxD,YAAY;AACZ,QAAQ;AACR,IAAI,CAAC,GAAG;AACR,IAAI,sBAAsB,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC;AACxD,IAAI,OAAO,aAAa;AACxB;AACO,MAAM,kBAAkB,SAAS,KAAK,CAAC;AAC9C,IAAI,WAAW,CAAC,OAAO,EAAE,KAAK,EAAE;AAChC,QAAQ,KAAK,CAAC,OAAO,CAAC;AACtB,QAAQ,IAAI,CAAC,IAAI,GAAG,oBAAoB;AACxC,QAAQ,IAAI,CAAC,KAAK,GAAG,KAAK;AAC1B,IAAI;AACJ;AACA,SAAS,oBAAoB,CAAC,GAAG,EAAE;AACnC,IAAI,IAAI,EAAE,EAAE,EAAE;AACd,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM;AAC/H,IAAI,MAAM,UAAU,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,UAAU;AACvI,IAAI,MAAM,MAAM,GAAG,OAAO,MAAM,KAAK;AACrC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AACjE,UAAU,EAAE;AACZ,IAAI,OAAO,CAAC,0CAA0C,EAAE,MAAM,CAAC,+CAA+C,CAAC;AAC/G;AACA;AACA;AACA;AACA;AACO,eAAe,aAAa,CAAC,YAAY,EAAE,MAAM,EAAE;AAC1D,IAAI,IAAI,CAAC,YAAY;AACrB,QAAQ;AACR,IAAI,IAAI;AACR,QAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE;AACxC,QAAQ,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC;AACtD,QAAQ,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE;AACnD,YAAY,YAAY;AACxB,YAAY,KAAK,EAAE,MAAM,CAAC,KAAK;AAC/B,SAAS,EAAE;AACX,YAAY,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AAC3D,YAAY,OAAO,EAAE,KAAK;AAC1B;AACA;AACA;AACA,YAAY,MAAM,EAAE,CAAC,MAAM,CAAC;AAC5B,SAAS,CAAC;AACV,IAAI;AACJ,IAAI,OAAO,GAAG,EAAE;AAChB,QAAQ,MAAM,IAAI,kBAAkB,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;AACpE,IAAI;AACJ;AACO,eAAe,wBAAwB,CAAC,oBAAoB,EAAE;AACrE;;ACtOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,qBAAqB,CAAC,GAAG,EAAE;AAC3C,IAAI,IAAI,EAAE;AACV,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM;AAC/H,IAAI,OAAO,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,4BAA4B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;AAC/D;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,8BAA8B,CAAC,UAAU,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;AAC7E,IAAI,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;AACtE,QAAQ,OAAO,KAAK;AACpB,IAAI,OAAO,GAAG,IAAI,UAAU,GAAG,IAAI,GAAG,4BAA4B;AAClE;;AC7CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,oBAAoB,CAAC,OAAO,EAAE,eAAe,EAAE;AAC/D,IAAI,IAAI;AACR,QAAQ,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAChD,QAAQ,IAAI,CAAC,UAAU;AACvB,YAAY,OAAO,SAAS;AAC5B,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC;AACtF,QAAQ,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,SAAS;AACnF,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,8BAA8B,CAAC,UAAU,EAAE,aAAa,EAAE,eAAe,EAAE;AAC3F,IAAI,MAAM,WAAW,GAAG,oBAAoB,CAAC,UAAU,EAAE,eAAe,CAAC;AACzE,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,aAAa;AACtC,QAAQ,OAAO,IAAI;AACnB,IAAI,OAAO,WAAW,KAAK,aAAa;AACxC;;ACpCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,QAAQ,GAAG,EAAE;AACjB;AACA;AACA;AACA;AACO,SAAS,gBAAgB,CAAC,OAAO,EAAE;AAC1C,IAAI,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC1B,IAAI,OAAO,MAAM;AACjB,QAAQ,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC;AACxD,IAAI,CAAC;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,oBAAoB,GAAG;AACvC,IAAI,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;AACpC,QAAQ,IAAI;AACZ,YAAY,OAAO,EAAE;AACrB,QAAQ;AACR,QAAQ,OAAO,EAAE,EAAE;AACnB;AACA,QAAQ;AACR,IAAI;AACJ;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,iBAAiB,GAAG,0BAA0B;AACxC,MAAC,4BAA4B,GAAG;AAC5C;AACA;AACA;AACA;AACA;AACO,MAAM,uBAAuB,SAAS,KAAK,CAAC;AACnD,IAAI,WAAW,CAAC,OAAO,EAAE;AACzB,QAAQ,KAAK,CAAC,OAAO,CAAC;AACtB,QAAQ,IAAI,CAAC,IAAI,GAAG,4BAA4B;AAChD,QAAQ,IAAI,CAAC,IAAI,GAAG,yBAAyB;AAC7C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,GAAG;AACzB,IAAI,OAAO,OAAO,YAAY,KAAK,WAAW;AAC9C;AACA,SAAS,WAAW,GAAG;AACvB,IAAI,IAAI,EAAE;AACV,IAAI,OAAO,OAAO,SAAS,KAAK;AAChC,WAAW,QAAQ,CAAC,EAAE,GAAG,SAAS,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,UAAU;AACzG;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,eAAe,CAAC,EAAE,EAAE;AAC1C,IAAI,IAAI,aAAa,EAAE,EAAE;AACzB,QAAQ,OAAO,MAAM,EAAE,EAAE;AACzB,IAAI;AACJ,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACxB,QAAQ,MAAM,IAAI,uBAAuB,CAAC,sEAAsE;AAChH,YAAY,6EAA6E;AACzF,YAAY,6BAA6B,CAAC;AAC1C,IAAI;AACJ,IAAI,OAAO,MAAM,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,YAAY,MAAM,EAAE,EAAE,CAAC;AAC1G;AASA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,qBAAqB,GAAG;AACxC,IAAI,MAAM,CAAC,GAAG,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,GAAG,SAAS;AAChE,IAAI,IAAI,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,UAAU,CAAC,KAAK,UAAU;AAClF,QAAQ,OAAO,CAAC,CAAC,UAAU,EAAE;AAC7B,IAAI,IAAI,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,eAAe,CAAC,KAAK,UAAU,EAAE;AACzF,QAAQ,MAAM,KAAK,GAAG,CAAC,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;AAC3D,QAAQ,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AACjF,IAAI;AACJ;AACA,IAAI,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;AACtD,IAAI,IAAI,EAAE;AACV;AACA;AACA;AACA,IAAI,IAAI,CAAC,OAAO;AAChB,QAAQ,OAAO,YAAY;AAC3B;AACA;AACA;AACA;AACA,IAAI,IAAI,QAAQ,CAAC,UAAU,KAAK,IAAI;AACpC,QAAQ,OAAO,YAAY;AAC3B;AACA;AACA,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,iBAAiB,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI,MAAM,QAAQ,CAAC,UAAU,EAAE;AAC1G,QAAQ,OAAO,YAAY;AAC3B,IAAI;AACJ,IAAI,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,YAAY,EAAE;AACxF,QAAQ,OAAO,eAAe;AAC9B,IAAI;AACJ;AACA;AACA,IAAI,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,OAAO,EAAE;AAChF,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,wBAAwB;AACnC;;AC3JO,MAAM,iBAAiB,CAAC;AAC/B;AACA,IAAI,OAAO,OAAO,GAAG;AACrB,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW;AACzC,YAAY,OAAO,IAAI;AACvB,QAAQ,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAC1E,QAAQ,IAAI,CAAC,GAAG;AAChB,YAAY,OAAO,IAAI;AACvB,QAAQ,IAAI;AACZ,YAAY,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAClC,QAAQ;AACR,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,QAAQ,CAAC,UAAU,EAAE;AAChC,QAAQ,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC1F,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,yBAAyB,GAAG;AAC7C,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE;AACvC,QAAQ,IAAI,CAAC,QAAQ;AACrB,YAAY,OAAO,IAAI;AACvB,QAAQ,IAAI,QAAQ,CAAC,iBAAiB;AACtC,YAAY,OAAO,QAAQ;AAC3B,QAAQ,OAAO,MAAM,eAAe,CAAC,MAAM;AAC3C;AACA,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1C,YAAY,IAAI,CAAC,OAAO;AACxB,gBAAgB,OAAO,IAAI;AAC3B,YAAY,IAAI,OAAO,CAAC,iBAAiB;AACzC,gBAAgB,OAAO,OAAO;AAC9B,YAAY,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,EAAE,CAAC;AACtH,YAAY,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnC,YAAY,OAAO,QAAQ;AAC3B,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,OAAO,eAAe,CAAC,KAAK,EAAE;AAClC,QAAQ,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAC7D,QAAQ,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC;AAClC,QAAQ,IAAI,GAAG,KAAK,CAAC;AACrB,YAAY,GAAG,IAAI,IAAI;AACvB,aAAa,IAAI,GAAG,KAAK,CAAC;AAC1B,YAAY,GAAG,IAAI,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC;AACxB,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE;AACnF,QAAQ,IAAI,EAAE;AACd,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW;AACzC,YAAY;AACZ;AACA;AACA;AACA,QAAQ,IAAI;AACZ,YAAY,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpD,YAAY,IAAI,UAAU,EAAE;AAC5B,gBAAgB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AAC5E,gBAAgB,MAAM,WAAW,GAAG,OAAO,CAAC,sBAAsB,CAAC;AACnE,gBAAgB,IAAI,WAAW,IAAI,WAAW,KAAK,OAAO,EAAE;AAC5D,oBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,wDAAwD,EAAE,OAAO,CAAC,+CAA+C,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AACvK,gBAAgB;AAChB,gBAAgB,IAAI,CAAC,WAAW,EAAE;AAClC,oBAAoB,OAAO,CAAC,IAAI,CAAC,0GAA0G,CAAC;AAC5I,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,GAAG,EAAE;AACpB,YAAY,IAAI,QAAQ,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE;AAClJ,gBAAgB,MAAM,GAAG;AACzB,YAAY;AACZ,YAAY,OAAO,CAAC,IAAI,CAAC,oFAAoF,EAAE,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,eAAe,CAAC;AAC1N,QAAQ;AACR,QAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE;AACxC,QAAQ,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK;AACzC;AACA;AACA;AACA,QAAQ,MAAM,aAAa,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACpF;AACA;AACA;AACA,QAAQ,MAAM,eAAe,CAAC,MAAM;AACpC,YAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO;AACjD,gBAAgB,WAAW;AAC3B,gBAAgB,OAAO;AACvB,gBAAgB,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,EAAE,GAAG,aAAa,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC;AACnJ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,UAAU,GAAG;AAC9B,QAAQ,IAAI,EAAE;AACd,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW;AACzC,YAAY,OAAO,IAAI;AACvB,QAAQ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE;AACjE,QAAQ,IAAI,CAAC,UAAU;AACvB,YAAY,OAAO,IAAI;AACvB,QAAQ,MAAM,UAAU,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC,iBAAiB,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;AACpG;AACA,QAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE;AACxC,QAAQ,IAAI,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE;AACnE,YAAY,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;AAC3D,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI;AACZ;AACA;AACA;AACA;AACA,YAAY,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU;AAC1C,YAAY,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF;AACA;AACA;AACA;AACA,YAAY,MAAM,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI;AACvG,YAAY,IAAI,OAAO,EAAE;AACzB,gBAAgB,MAAM,EAAE,YAAY,EAAE,GAAG,UAAU;AACnD;AACA;AACA;AACA,gBAAgB,IAAI,CAAC,YAAY,EAAE;AACnC,oBAAoB,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;AACnE,oBAAoB,OAAO,IAAI;AAC/B,gBAAgB;AAChB,gBAAgB,IAAI,SAAS;AAC7B,gBAAgB,IAAI;AACpB,oBAAoB,SAAS,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC;AACrF,gBAAgB;AAChB,gBAAgB,OAAO,UAAU,EAAE;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,IAAI,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,EAAE;AACnG,wBAAwB,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;AACvE,wBAAwB,OAAO,IAAI;AACnC,oBAAoB;AACpB,oBAAoB,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE;AAC/E,gBAAgB;AAChB,gBAAgB,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,SAAS,CAAC,OAAO,MAAM,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE;AAChL,oBAAoB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW;AAC5J;AACA;AACA,oBAAoB,SAAS,CAAC,YAAY,CAAC;AAC3C;AACA;AACA;AACA;AACA,oBAAoB,IAAI,SAAS,CAAC,OAAO,KAAK,YAAY,EAAE;AAC5D,wBAAwB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AACtD,wBAAwB,IAAI,CAAC,OAAO;AACpC,4BAA4B,OAAO,IAAI;AACvC,wBAAwB,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,oBAAoB;AACpB,oBAAoB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO;AACpD,oBAAoB,IAAI,CAAC,MAAM;AAC/B,wBAAwB,OAAO,IAAI;AACnC,oBAAoB,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE;AACvE,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;AAC/D,gBAAgB,OAAO,IAAI;AAC3B,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,GAAG,EAAE;AACpB;AACA,YAAY,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;AAC3D,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,QAAQ,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE;AACnE,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,YAAY,GAAG;AAChC,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW;AACzC,YAAY;AACZ,QAAQ,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM;AACpD,YAAY,IAAI,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,KAAK,IAAI;AAC/E,gBAAgB,OAAO,KAAK;AAC5B,YAAY,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,2BAA2B,CAAC;AACrE,YAAY,OAAO,IAAI;AACvB,QAAQ,CAAC,CAAC;AACV;AACA;AACA,QAAQ,IAAI,OAAO;AACnB,YAAY,oBAAoB,EAAE;AAClC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,wBAAwB,CAAC,UAAU,EAAE;AACtD,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW;AACzC,YAAY;AACZ,QAAQ,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM;AACpD,YAAY,IAAI,EAAE;AAClB,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1C,YAAY,IAAI,CAAC,OAAO;AACxB,gBAAgB,OAAO,KAAK;AAC5B;AACA;AACA,YAAY,IAAI,UAAU,KAAK,IAAI;AACnC,gBAAgB,OAAO,KAAK;AAC5B,YAAY,IAAI,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,iBAAiB,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI,MAAM,UAAU;AACvG,gBAAgB,OAAO,KAAK;AAC5B,YAAY,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,2BAA2B,CAAC;AACrE,YAAY,OAAO,IAAI;AACvB,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,OAAO;AACnB,YAAY,oBAAoB,EAAE;AAClC,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,eAAe,GAAG;AAC7B;AACA,QAAQ,OAAO,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC;AACvE,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,UAAU,GAAG;AACxB,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW;AACzC,YAAY,OAAO,IAAI;AACvB,QAAQ,IAAI;AACZ,YAAY,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAClF,YAAY,OAAO,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,GAAG,IAAI;AAC/D,QAAQ;AACR,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,eAAe,GAAG;AAC7B,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW;AACzC,YAAY,OAAO,IAAI;AACvB,QAAQ,IAAI;AACZ,YAAY,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAClF,YAAY,OAAO,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,YAAY,GAAG,IAAI;AACpE,QAAQ;AACR,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,OAAO,SAAS,GAAG;AACvB,QAAQ,IAAI,EAAE;AACd,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW;AACzC,YAAY,OAAO,IAAI;AACvB,QAAQ,IAAI;AACZ,YAAY,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAClF,YAAY,OAAO,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI;AAC7G,QAAQ;AACR,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE;AACrF,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW;AACzC,YAAY,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;AAC3D;AACA;AACA,QAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE;AACxC,QAAQ,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM;AACnD,YAAY,IAAI,EAAE;AAClB;AACA;AACA;AACA,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1C;AACA,YAAY,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE;AACrH,gBAAgB,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,2BAA2B,CAAC;AACzE,gBAAgB,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;AAC9E,YAAY;AACZ,YAAY,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,OAAO,GAAG,EAAE,EAAE,EAAE,EAAE,OAAO;AAC1I,gBAAgB,WAAW,EAAE,CAAC,GAAG,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,MAAM,GAAG;AAC3F,kBAAkB,EAAE,YAAY;AAChC,kBAAkB,EAAE,EAAE;AACtB,YAAY,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC;AACjE,YAAY,IAAI,OAAO,KAAK,YAAY;AACxC,gBAAgB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AACjD;AACA;AACA;AACA,YAAY,IAAI,OAAO,KAAK,wBAAwB;AACpD,gBAAgB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AACpD,YAAY,IAAI,OAAO,KAAK,eAAe;AAC3C,gBAAgB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AACpD;AACA;AACA;AACA;AACA,YAAY,IAAI,CAAC,8BAA8B,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3G,gBAAgB,OAAO,CAAC,IAAI,CAAC,wIAAwI,CAAC;AACtK,gBAAgB,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;AAC/D,YAAY;AACZ,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1F,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC/B,YAAY,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAC7C,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,MAAM,CAAC,OAAO;AAC1B,YAAY,oBAAoB,EAAE;AAClC,QAAQ,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;AACnE,IAAI;AACJ;AACA,iBAAiB,CAAC,2BAA2B,GAAG,yBAAyB;;AC7WzE,IAAI,OAAO,GAAG,IAAI;AACX,MAAM,yBAAyB,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,SAAS,CAAC,GAAG,EAAE;AAC1B,QAAQ,IAAI,GAAG,CAAC,oBAAoB,KAAK,IAAI,EAAE;AAC/C;AACA;AACA;AACA,YAAY,OAAO,CAAC,IAAI,CAAC,mFAAmF;AAC5G,gBAAgB,+EAA+E;AAC/F,gBAAgB,kFAAkF;AAClG,gBAAgB,kFAAkF,CAAC;AACnG,QAAQ;AACR,QAAQ,OAAO,GAAG,GAAG;AACrB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,YAAY,GAAG;AAC1B,QAAQ,OAAO,OAAO,KAAK,IAAI;AAC/B,IAAI;AACJ,IAAI,OAAO,UAAU,GAAG;AACxB,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC;AACjH,QAAQ;AACR,QAAQ,OAAO,OAAO,CAAC,OAAO;AAC9B,IAAI;AACJ,IAAI,OAAO,YAAY,CAAC,KAAK,EAAE;AAC/B,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,MAAM,IAAI,KAAK,CAAC,oFAAoF,CAAC;AACjH,QAAQ;AACR,QAAQ,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;AAClC,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,OAAO,eAAe,CAAC,KAAK,EAAE;AAClC,QAAQ,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAC7D,QAAQ,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC;AAClC,QAAQ,IAAI,GAAG,KAAK,CAAC;AACrB,YAAY,GAAG,IAAI,IAAI;AACvB,aAAa,IAAI,GAAG,KAAK,CAAC;AAC1B,YAAY,GAAG,IAAI,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC;AACrC,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE;AACnF,QAAQ,IAAI,EAAE;AACd;AACA;AACA;AACA,QAAQ,IAAI;AACZ,YAAY,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACpD,YAAY,IAAI,UAAU,EAAE;AAC5B,gBAAgB,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;AAC5E,gBAAgB,MAAM,WAAW,GAAG,OAAO,CAAC,sBAAsB,CAAC;AACnE,gBAAgB,IAAI,WAAW,IAAI,WAAW,KAAK,OAAO,EAAE;AAC5D,oBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,gEAAgE,EAAE,OAAO,CAAC,+CAA+C,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAC/K,gBAAgB;AAChB,gBAAgB,IAAI,CAAC,WAAW,EAAE;AAClC,oBAAoB,OAAO,CAAC,IAAI,CAAC,kHAAkH,CAAC;AACpJ,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,GAAG,EAAE;AACpB,YAAY,IAAI,QAAQ,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,2BAA2B,CAAC,EAAE;AAClJ,gBAAgB,MAAM,GAAG;AACzB,YAAY;AACZ,YAAY,OAAO,CAAC,IAAI,CAAC,4FAA4F,EAAE,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,eAAe,CAAC;AAClO,QAAQ;AACR,QAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE;AACxC,QAAQ,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK;AACzC;AACA;AACA,QAAQ,MAAM,aAAa,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AACpF;AACA;AACA;AACA,QAAQ,MAAM,eAAe,CAAC,MAAM;AACpC,YAAY,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO;AACjD,gBAAgB,WAAW;AAC3B,gBAAgB,OAAO;AACvB,gBAAgB,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,EAAE,GAAG,aAAa,GAAG,EAAE,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC;AACnJ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA,IAAI,OAAO,OAAO,GAAG;AACrB,QAAQ,IAAI;AACZ,YAAY,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC;AACnF,YAAY,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI;AAC/C,QAAQ;AACR,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,QAAQ,CAAC,UAAU,EAAE;AAChC,QAAQ,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AAC/F,IAAI;AACJ;AACA,IAAI,aAAa,yBAAyB,GAAG;AAC7C,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE;AACvC,QAAQ,IAAI,CAAC,QAAQ;AACrB,YAAY,OAAO,IAAI;AACvB,QAAQ,IAAI,QAAQ,CAAC,iBAAiB;AACtC,YAAY,OAAO,QAAQ;AAC3B,QAAQ,OAAO,MAAM,eAAe,CAAC,MAAM;AAC3C,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1C,YAAY,IAAI,CAAC,OAAO;AACxB,gBAAgB,OAAO,IAAI;AAC3B,YAAY,IAAI,OAAO,CAAC,iBAAiB;AACzC,gBAAgB,OAAO,OAAO;AAC9B,YAAY,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,EAAE,CAAC;AACtH,YAAY,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACnC,YAAY,OAAO,QAAQ;AAC3B,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA,IAAI,aAAa,UAAU,GAAG;AAC9B,QAAQ,IAAI,EAAE;AACd,QAAQ,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,yBAAyB,EAAE;AACjE,QAAQ,IAAI,CAAC,UAAU;AACvB,YAAY,OAAO,IAAI;AACvB,QAAQ,MAAM,UAAU,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC,iBAAiB,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;AACpG;AACA,QAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE;AACxC,QAAQ,IAAI,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE;AACnE,YAAY,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;AAC3D,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR;AACA;AACA;AACA,QAAQ,IAAI;AACZ;AACA;AACA,YAAY,MAAM,EAAE,OAAO,EAAE,GAAG,UAAU;AAC1C,YAAY,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF;AACA;AACA;AACA;AACA,YAAY,MAAM,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,IAAI;AACvG,YAAY,IAAI,OAAO,EAAE;AACzB,gBAAgB,MAAM,EAAE,YAAY,EAAE,GAAG,UAAU;AACnD;AACA;AACA;AACA,gBAAgB,IAAI,CAAC,YAAY,EAAE;AACnC,oBAAoB,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;AACnE,oBAAoB,OAAO,IAAI;AAC/B,gBAAgB;AAChB,gBAAgB,IAAI,SAAS;AAC7B,gBAAgB,IAAI;AACpB,oBAAoB,SAAS,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,UAAU,CAAC,MAAM,CAAC;AACrF,gBAAgB;AAChB,gBAAgB,OAAO,UAAU,EAAE;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,IAAI,qBAAqB,CAAC,UAAU,CAAC,IAAI,CAAC,8BAA8B,CAAC,GAAG,CAAC,EAAE;AACnG,wBAAwB,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;AACvE,wBAAwB,OAAO,IAAI;AACnC,oBAAoB;AACpB,oBAAoB,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE;AAC/E,gBAAgB;AAChB,gBAAgB,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,SAAS,CAAC,OAAO,MAAM,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE;AAChL,oBAAoB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,YAAY,CAAC;AACrL;AACA;AACA;AACA,oBAAoB,IAAI,SAAS,CAAC,OAAO,KAAK,YAAY,EAAE;AAC5D,wBAAwB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AACtD,wBAAwB,IAAI,CAAC,OAAO;AACpC,4BAA4B,OAAO,IAAI;AACvC,wBAAwB,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,oBAAoB;AACpB,oBAAoB,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO;AACpD,oBAAoB,IAAI,CAAC,MAAM;AAC/B,wBAAwB,OAAO,IAAI;AACnC,oBAAoB,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE;AACvE,gBAAgB;AAChB;AACA;AACA;AACA,gBAAgB,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;AAC/D,gBAAgB,OAAO,IAAI;AAC3B,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,GAAG,EAAE;AACpB;AACA,YAAY,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAAC;AAC3D,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,QAAQ,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE;AACnE,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,YAAY,GAAG;AAChC,QAAQ,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM;AACpD,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,KAAK,IAAI;AACpF,gBAAgB,OAAO,KAAK;AAC5B,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAC1E,YAAY,OAAO,IAAI;AACvB,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,OAAO;AACnB,YAAY,oBAAoB,EAAE;AAClC,IAAI;AACJ;AACA,IAAI,aAAa,wBAAwB,CAAC,UAAU,EAAE;AACtD,QAAQ,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,MAAM;AACpD,YAAY,IAAI,EAAE;AAClB,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1C,YAAY,IAAI,CAAC,OAAO;AACxB,gBAAgB,OAAO,KAAK;AAC5B,YAAY,IAAI,UAAU,KAAK,IAAI;AACnC,gBAAgB,OAAO,KAAK;AAC5B,YAAY,IAAI,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,iBAAiB,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI,MAAM,UAAU;AACvG,gBAAgB,OAAO,KAAK;AAC5B,YAAY,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAC1E,YAAY,OAAO,IAAI;AACvB,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,OAAO;AACnB,YAAY,oBAAoB,EAAE;AAClC,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,eAAe,GAAG;AAC7B,QAAQ,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAC5E,IAAI;AACJ;AACA;AACA;AACA,IAAI,OAAO,UAAU,GAAG;AACxB,QAAQ,IAAI;AACZ,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC;AACvF,YAAY,OAAO,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,GAAG,IAAI;AAC/D,QAAQ;AACR,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,OAAO,SAAS,GAAG;AACvB,QAAQ,IAAI,EAAE;AACd,QAAQ,IAAI;AACZ,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC;AACvF,YAAY,OAAO,OAAO,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,IAAI;AAC7G,QAAQ;AACR,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,eAAe,GAAG;AAC7B,QAAQ,IAAI;AACZ,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC;AACvF,YAAY,OAAO,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,YAAY,GAAG,IAAI;AACpE,QAAQ;AACR,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,qBAAqB,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE;AACrF;AACA,QAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE;AACxC,QAAQ,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM;AACnD,YAAY,IAAI,EAAE;AAClB,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE;AAC1C;AACA,YAAY,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE;AACrH,gBAAgB,IAAI,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,2BAA2B,CAAC;AAC9E,gBAAgB,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;AAC9E,YAAY;AACZ,YAAY,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,OAAO,GAAG,EAAE,EAAE,EAAE,EAAE,OAAO;AAC1I,gBAAgB,WAAW,EAAE,CAAC,GAAG,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,MAAM,GAAG;AAC3F,kBAAkB,EAAE,YAAY;AAChC,kBAAkB,EAAE,EAAE;AACtB,YAAY,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC;AACjE,YAAY,IAAI,OAAO,KAAK,YAAY;AACxC,gBAAgB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AACjD,YAAY,IAAI,OAAO,KAAK,wBAAwB;AACpD,gBAAgB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AACpD,YAAY,IAAI,OAAO,KAAK,eAAe;AAC3C,gBAAgB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE;AACpD;AACA,YAAY,IAAI,CAAC,8BAA8B,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE;AAC3G,gBAAgB,OAAO,CAAC,IAAI,CAAC,gJAAgJ,CAAC;AAC9K,gBAAgB,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE;AAC/D,YAAY;AACZ,YAAY,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;AAC1F,YAAY,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC/B,YAAY,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;AAC7C,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,MAAM,CAAC,OAAO;AAC1B,YAAY,oBAAoB,EAAE;AAClC,QAAQ,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE;AACnE,IAAI;AACJ;AACA,yBAAyB,CAAC,2BAA2B,GAAG,yBAAyB;;ACxXjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,uBAAuB,GAAG;AAC1C,IAAI,OAAO,yBAAyB,CAAC,YAAY;AACjD,UAAU;AACV,UAAU,iBAAiB;AAC3B;;;;;;;;;;;;AC1BA,CAAA,QAAA,CAAA,UAAkB,GAAG;AACrB,CAAA,QAAA,CAAA,WAAmB,GAAG;AACtB,CAAA,QAAA,CAAA,aAAqB,GAAG;;AAExB,CAAA,IAAI,MAAM,GAAG;AACb,CAAA,IAAI,SAAS,GAAG;CAChB,IAAI,GAAG,GAAG,OAAO,UAAU,KAAK,WAAW,GAAG,UAAU,GAAG;;AAE3D,CAAA,IAAI,IAAI,GAAG;AACX,CAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;AACjD,GAAE,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;GAClB,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG;AAClC,CAAA;;AAEA;AACA;CACA,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG;CAC/B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG;;CAE/B,SAAS,OAAO,EAAE,GAAG,EAAE;AACvB,GAAE,IAAI,GAAG,GAAG,GAAG,CAAC;;AAEhB,GAAE,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE;AACnB,KAAI,MAAM,IAAI,KAAK,CAAC,gDAAgD;AACpE,GAAA;;AAEA;AACA;AACA,GAAE,IAAI,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG;AAChC,GAAE,IAAI,QAAQ,KAAK,EAAE,EAAE,QAAQ,GAAG;;AAElC,GAAE,IAAI,eAAe,GAAG,QAAQ,KAAK;OAC/B;AACN,OAAM,CAAC,IAAI,QAAQ,GAAG,CAAC;;AAEvB,GAAE,OAAO,CAAC,QAAQ,EAAE,eAAe;AACnC,CAAA;;AAEA;CACA,SAAS,UAAU,EAAE,GAAG,EAAE;AAC1B,GAAE,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG;AACxB,GAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC;AACvB,GAAE,IAAI,eAAe,GAAG,IAAI,CAAC,CAAC;GAC5B,OAAO,CAAC,CAAC,QAAQ,GAAG,eAAe,IAAI,CAAC,GAAG,CAAC,IAAI;AAClD,CAAA;;AAEA,CAAA,SAAS,WAAW,EAAE,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE;GACpD,OAAO,CAAC,CAAC,QAAQ,GAAG,eAAe,IAAI,CAAC,GAAG,CAAC,IAAI;AAClD,CAAA;;CAEA,SAAS,WAAW,EAAE,GAAG,EAAE;AAC3B,GAAE,IAAI;AACN,GAAE,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG;AACxB,GAAE,IAAI,QAAQ,GAAG,IAAI,CAAC,CAAC;AACvB,GAAE,IAAI,eAAe,GAAG,IAAI,CAAC,CAAC;;AAE9B,GAAE,IAAI,GAAG,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,QAAQ,EAAE,eAAe,CAAC;;GAE7D,IAAI,OAAO,GAAG;;AAEhB;AACA,GAAE,IAAI,GAAG,GAAG,eAAe,GAAG;AAC9B,OAAM,QAAQ,GAAG;OACX;;AAEN,GAAE,IAAI;AACN,GAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;AAC/B,KAAI,GAAG;OACD,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACzC,QAAO,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9C,QAAO,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;OACvC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;KACjC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,IAAI;KAC/B,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI;AAClC,KAAI,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,GAAG,GAAG;AAC3B,GAAA;;AAEA,GAAE,IAAI,eAAe,KAAK,CAAC,EAAE;AAC7B,KAAI,GAAG;OACD,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxC,QAAO,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,KAAI,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,GAAG,GAAG;AAC3B,GAAA;;AAEA,GAAE,IAAI,eAAe,KAAK,CAAC,EAAE;AAC7B,KAAI,GAAG;OACD,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AACzC,QAAO,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7C,QAAO,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;KACxC,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI;AAClC,KAAI,GAAG,CAAC,OAAO,EAAE,CAAC,GAAG,GAAG,GAAG;AAC3B,GAAA;;AAEA,GAAE,OAAO;AACT,CAAA;;CAEA,SAAS,eAAe,EAAE,GAAG,EAAE;GAC7B,OAAO,MAAM,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;AACjC,KAAI,MAAM,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;AAC5B,KAAI,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAC3B,KAAI,MAAM,CAAC,GAAG,GAAG,IAAI;AACrB,CAAA;;AAEA,CAAA,SAAS,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;AACzC,GAAE,IAAI;GACJ,IAAI,MAAM,GAAG;AACf,GAAE,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;AACvC,KAAI,GAAG;OACD,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,QAAQ;QAC3B,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;AACpC,QAAO,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI;AAC1B,KAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC;AACpC,GAAA;AACA,GAAE,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE;AACvB,CAAA;;CAEA,SAAS,aAAa,EAAE,KAAK,EAAE;AAC/B,GAAE,IAAI;AACN,GAAE,IAAI,GAAG,GAAG,KAAK,CAAC;AAClB,GAAE,IAAI,UAAU,GAAG,GAAG,GAAG,EAAC;GACxB,IAAI,KAAK,GAAG;GACZ,IAAI,cAAc,GAAG,MAAK;;AAE5B;AACA,GAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,GAAG,GAAG,GAAG,UAAU,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,cAAc,EAAE;KACtE,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,cAAc,IAAI,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;AAC/F,GAAA;;AAEA;AACA,GAAE,IAAI,UAAU,KAAK,CAAC,EAAE;AACxB,KAAI,GAAG,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC;KACnB,KAAK,CAAC,IAAI;AACd,OAAM,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;OAChB,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;OACzB;AACN;AACA,GAAA,CAAG,MAAM,IAAI,UAAU,KAAK,CAAC,EAAE;AAC/B,KAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC;KAC3C,KAAK,CAAC,IAAI;AACd,OAAM,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;OACjB,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;OACzB,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC;OACzB;AACN;AACA,GAAA;;AAEA,GAAE,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE;AACtB,CAAA;;;;;;;;;;;;;ACpJA,CAAA,OAAA,CAAA,IAAY,GAAG,UAAU,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;GAC3D,IAAI,CAAC,EAAE;GACP,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG;AACnC,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI;AAC3B,GAAE,IAAI,KAAK,GAAG,IAAI,IAAI;GACpB,IAAI,KAAK,GAAG;GACZ,IAAI,CAAC,GAAG,IAAI,IAAI,MAAM,GAAG,CAAC,IAAI;AAChC,GAAE,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,GAAG;AACtB,GAAE,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC;;AAE3B,GAAE,CAAC,IAAI;;GAEL,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;GAC5B,CAAC,MAAM,CAAC,KAAK;AACf,GAAE,KAAK,IAAI;GACT,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAA;;GAE1E,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;GAC5B,CAAC,MAAM,CAAC,KAAK;AACf,GAAE,KAAK,IAAI;GACT,OAAO,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAA;;AAE5E,GAAE,IAAI,CAAC,KAAK,CAAC,EAAE;KACX,CAAC,GAAG,CAAC,GAAG;AACZ,GAAA,CAAG,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;AACzB,KAAI,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,QAAQ;AAC7C,GAAA,CAAG,MAAM;KACL,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI;KACxB,CAAC,GAAG,CAAC,GAAG;AACZ,GAAA;AACA,GAAE,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI;AAChD,CAAA;;AAEA,CAAA,OAAA,CAAA,KAAa,GAAG,UAAU,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;AACrE,GAAE,IAAI,CAAC,EAAE,CAAC,EAAE;GACV,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG;AACnC,GAAE,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI;AAC3B,GAAE,IAAI,KAAK,GAAG,IAAI,IAAI;GACpB,IAAI,EAAE,IAAI,IAAI,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC;GAC/D,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC;AAChC,GAAE,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG;AACrB,GAAE,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG;;AAE5D,GAAE,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK;;GAEtB,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,QAAQ,EAAE;KACtC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG;AAC3B,KAAI,CAAC,GAAG;AACR,GAAA,CAAG,MAAM;AACT,KAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG;AAC7C,KAAI,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAC3C,OAAM,CAAC;AACP,OAAM,CAAC,IAAI;AACX,KAAA;AACA,KAAI,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE;OAClB,KAAK,IAAI,EAAE,GAAG;AACpB,KAAA,CAAK,MAAM;AACX,OAAM,KAAK,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK;AACzC,KAAA;AACA,KAAI,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE;AACxB,OAAM,CAAC;AACP,OAAM,CAAC,IAAI;AACX,KAAA;;AAEA,KAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE;AAC3B,OAAM,CAAC,GAAG;AACV,OAAM,CAAC,GAAG;AACV,KAAA,CAAK,MAAM,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,EAAE;AAC/B,OAAM,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI;OACxC,CAAC,GAAG,CAAC,GAAG;AACd,KAAA,CAAK,MAAM;OACL,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI;AAC3D,OAAM,CAAC,GAAG;AACV,KAAA;AACA,GAAA;;GAEE,OAAO,IAAI,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,CAAA;;AAEhF,GAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI;AACpB,GAAE,IAAI,IAAI;GACR,OAAO,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,GAAG,EAAE,IAAI,IAAI,CAAC,EAAE,CAAA;;GAE7E,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG;AAChC,CAAA;;;;;;;;;;;;;;;;;;AC1EA,EAAA,MAAM,MAAM,GAAGC,eAAA;AACf,EAAA,MAAM,OAAO,GAAGC,cAAA;AAChB,EAAA,MAAM,mBAAmB;AACzB,IAAE,CAAC,OAAO,MAAM,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,UAAU;AACtE,QAAM,MAAM,CAAC,KAAK,CAAC,CAAC,4BAA4B,CAAC;QAC3C;;EAENC,SAAA,CAAA,MAAA,GAAiB;EACjBA,SAAA,CAAA,UAAA,GAAqB;EACrBA,SAAA,CAAA,iBAAA,GAA4B;;AAE5B,EAAA,MAAM,YAAY,GAAG;EACrBA,SAAA,CAAA,UAAA,GAAqB;;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACA,MAAM,CAAC,mBAAmB,GAAG,iBAAiB;;EAE9C,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,OAAO,OAAO,KAAK,WAAW;AACjE,MAAI,OAAO,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE;IACvC,OAAO,CAAC,KAAK;AACf,MAAI,2EAA2E;MAC3E;AACJ;AACA,EAAA;;AAEA,EAAA,SAAS,iBAAiB,IAAI;AAC9B;AACA,IAAE,IAAI;AACN,MAAI,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC;MAC5B,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,OAAO,EAAE,CAAA,CAAE;MAC9C,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC,SAAS;AACrD,MAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,KAAK;AACpC,MAAI,OAAO,GAAG,CAAC,GAAG,EAAE,KAAK;IACzB,CAAG,CAAC,OAAO,CAAC,EAAE;AACd,MAAI,OAAO;AACX,IAAA;AACA,EAAA;;EAEA,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE;IAChD,UAAU,EAAE,IAAI;IAChB,GAAG,EAAE,YAAY;MACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO;MACnC,OAAO,IAAI,CAAC;AAChB,IAAA;GACC;;EAED,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE;IAChD,UAAU,EAAE,IAAI;IAChB,GAAG,EAAE,YAAY;MACf,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO;MACnC,OAAO,IAAI,CAAC;AAChB,IAAA;GACC;;EAED,SAAS,YAAY,EAAE,MAAM,EAAE;AAC/B,IAAE,IAAI,MAAM,GAAG,YAAY,EAAE;MACzB,MAAM,IAAI,UAAU,CAAC,aAAa,GAAG,MAAM,GAAG,gCAAgC;AAClF,IAAA;AACA;AACA,IAAE,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,MAAM;IACjC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS;AAC7C,IAAE,OAAO;AACT,EAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,EAAA,SAAS,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,EAAE;AAChD;AACA,IAAE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC/B,MAAI,IAAI,OAAO,gBAAgB,KAAK,QAAQ,EAAE;QACxC,MAAM,IAAI,SAAS;UACjB;AACR;AACA,MAAA;MACI,OAAO,WAAW,CAAC,GAAG;AAC1B,IAAA;AACA,IAAE,OAAO,IAAI,CAAC,GAAG,EAAE,gBAAgB,EAAE,MAAM;AAC3C,EAAA;;EAEA,MAAM,CAAC,QAAQ,GAAG,KAAI;;AAEtB,EAAA,SAAS,IAAI,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE;AAChD,IAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACjC,MAAI,OAAO,UAAU,CAAC,KAAK,EAAE,gBAAgB;AAC7C,IAAA;;AAEA,IAAE,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;MAC7B,OAAO,aAAa,CAAC,KAAK;AAC9B,IAAA;;AAEA,IAAE,IAAI,KAAK,IAAI,IAAI,EAAE;MACjB,MAAM,IAAI,SAAS;AACvB,QAAM,6EAA6E;QAC7E,sCAAsC,IAAI,OAAO,KAAK;AAC5D;AACA,IAAA;;AAEA,IAAE,IAAI,UAAU,CAAC,KAAK,EAAE,WAAW,CAAC;SAC7B,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE;AACxD,MAAI,OAAO,eAAe,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM;AAC1D,IAAA;;AAEA,IAAE,IAAI,OAAO,iBAAiB,KAAK,WAAW;AAC9C,SAAO,UAAU,CAAC,KAAK,EAAE,iBAAiB,CAAC;AAC3C,SAAO,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE;AAC/D,MAAI,OAAO,eAAe,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM;AAC1D,IAAA;;AAEA,IAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;MAC7B,MAAM,IAAI,SAAS;QACjB;AACN;AACA,IAAA;;IAEE,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO;IAC9C,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,KAAK,KAAK,EAAE;MACxC,OAAO,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM;AACxD,IAAA;;AAEA,IAAE,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK;IAC1B,IAAI,CAAC,EAAE,OAAO;;IAEd,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,WAAW,IAAI,IAAI;QAC3D,OAAO,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,UAAU,EAAE;AACvD,MAAI,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,EAAE,gBAAgB,EAAE,MAAM;AACpF,IAAA;;IAEE,MAAM,IAAI,SAAS;AACrB,MAAI,6EAA6E;MAC7E,sCAAsC,IAAI,OAAO,KAAK;AAC1D;AACA,EAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACA,MAAM,CAAC,IAAI,GAAG,UAAU,KAAK,EAAE,gBAAgB,EAAE,MAAM,EAAE;AACzD,IAAE,OAAO,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAM;AAC7C,EAAA;;AAEA;AACA;EACA,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS;AAC5D,EAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,UAAU;;EAExC,SAAS,UAAU,EAAE,IAAI,EAAE;AAC3B,IAAE,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAChC,MAAI,MAAM,IAAI,SAAS,CAAC,wCAAwC;AAChE,IAAA,CAAG,MAAM,IAAI,IAAI,GAAG,CAAC,EAAE;MACnB,MAAM,IAAI,UAAU,CAAC,aAAa,GAAG,IAAI,GAAG,gCAAgC;AAChF,IAAA;AACA,EAAA;;AAEA,EAAA,SAAS,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;IACpC,UAAU,CAAC,IAAI;AACjB,IAAE,IAAI,IAAI,IAAI,CAAC,EAAE;MACb,OAAO,YAAY,CAAC,IAAI;AAC5B,IAAA;AACA,IAAE,IAAI,IAAI,KAAK,SAAS,EAAE;AAC1B;AACA;AACA;MACI,OAAO,OAAO,QAAQ,KAAK;UACvB,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ;AAC9C,UAAQ,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI;AACpC,IAAA;IACE,OAAO,YAAY,CAAC,IAAI;AAC1B,EAAA;;AAEA;AACA;AACA;AACA;EACA,MAAM,CAAC,KAAK,GAAG,UAAU,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC/C,IAAE,OAAO,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ;AACnC,EAAA;;EAEA,SAAS,WAAW,EAAE,IAAI,EAAE;IAC1B,UAAU,CAAC,IAAI;AACjB,IAAE,OAAO,YAAY,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;AACtD,EAAA;;AAEA;AACA;AACA;AACA,EAAA,MAAM,CAAC,WAAW,GAAG,UAAU,IAAI,EAAE;IACnC,OAAO,WAAW,CAAC,IAAI;AACzB,EAAA;AACA;AACA;AACA;AACA,EAAA,MAAM,CAAC,eAAe,GAAG,UAAU,IAAI,EAAE;IACvC,OAAO,WAAW,CAAC,IAAI;AACzB,EAAA;;AAEA,EAAA,SAAS,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE;IACrC,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,EAAE,EAAE;AACvD,MAAI,QAAQ,GAAG;AACf,IAAA;;IAEE,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AACpC,MAAI,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,QAAQ;AACvD,IAAA;;IAEE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG;AAChD,IAAE,IAAI,GAAG,GAAG,YAAY,CAAC,MAAM;;IAE7B,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ;;AAE3C,IAAE,IAAI,MAAM,KAAK,MAAM,EAAE;AACzB;AACA;AACA;MACI,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM;AAC7B,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;EAEA,SAAS,aAAa,EAAE,KAAK,EAAE;AAC/B,IAAE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG;AAChE,IAAE,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM;AACjC,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;MAClC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG;AACxB,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;EAEA,SAAS,aAAa,EAAE,SAAS,EAAE;AACnC,IAAE,IAAI,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,EAAE;AACzC,MAAI,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,SAAS;AACzC,MAAI,OAAO,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU;AACxE,IAAA;IACE,OAAO,aAAa,CAAC,SAAS;AAChC,EAAA;;AAEA,EAAA,SAAS,eAAe,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE;IACnD,IAAI,UAAU,GAAG,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,UAAU,EAAE;AACvD,MAAI,MAAM,IAAI,UAAU,CAAC,sCAAsC;AAC/D,IAAA;;IAEE,IAAI,KAAK,CAAC,UAAU,GAAG,UAAU,IAAI,MAAM,IAAI,CAAC,CAAC,EAAE;AACrD,MAAI,MAAM,IAAI,UAAU,CAAC,sCAAsC;AAC/D,IAAA;;AAEA,IAAE,IAAI;IACJ,IAAI,UAAU,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE;AACxD,MAAI,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK;AAC9B,IAAA,CAAG,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE;AACnC,MAAI,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,UAAU;AAC1C,IAAA,CAAG,MAAM;MACL,GAAG,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM;AAClD,IAAA;;AAEA;IACE,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS;;AAE7C,IAAE,OAAO;AACT,EAAA;;EAEA,SAAS,UAAU,EAAE,GAAG,EAAE;AAC1B,IAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;MACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG;AACtC,MAAI,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG;;AAEhC,MAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,QAAM,OAAO;AACb,MAAA;;MAEI,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG;AAC3B,MAAI,OAAO;AACX,IAAA;;AAEA,IAAE,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE;AAChC,MAAI,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAC7D,OAAO,YAAY,CAAC,CAAC;AAC3B,MAAA;MACI,OAAO,aAAa,CAAC,GAAG;AAC5B,IAAA;;AAEA,IAAE,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE;AACxD,MAAI,OAAO,aAAa,CAAC,GAAG,CAAC,IAAI;AACjC,IAAA;AACA,EAAA;;EAEA,SAAS,OAAO,EAAE,MAAM,EAAE;AAC1B;AACA;AACA,IAAE,IAAI,MAAM,IAAI,YAAY,EAAE;AAC9B,MAAI,MAAM,IAAI,UAAU,CAAC,iDAAiD;2BACjD,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,QAAQ;AAC1E,IAAA;IACE,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,SAAS,UAAU,EAAE,MAAM,EAAE;AAC7B,IAAE,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE;AACzB,MAAI,MAAM,GAAG;AACb,IAAA;AACA,IAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM;AAC7B,EAAA;;AAEA,EAAA,MAAM,CAAC,QAAQ,GAAG,SAAS,QAAQ,EAAE,CAAC,EAAE;IACtC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,SAAS,KAAK,IAAI;AAC1C,MAAI,CAAC,KAAK,MAAM,CAAC,SAAS;AAC1B,EAAA;;EAEA,MAAM,CAAC,OAAO,GAAG,SAAS,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE;IACvC,IAAI,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU;IACxE,IAAI,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU;AAC1E,IAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;MAC9C,MAAM,IAAI,SAAS;QACjB;AACN;AACA,IAAA;;AAEA,IAAE,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO;;AAEtB,IAAE,IAAI,CAAC,GAAG,CAAC,CAAC;AACZ,IAAE,IAAI,CAAC,GAAG,CAAC,CAAC;;IAEV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;MAClD,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;AACvB,QAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACb,QAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACP;AACN,MAAA;AACA,IAAA;;AAEA,IAAE,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO;AACpB,IAAE,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO;AACpB,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,MAAM,CAAC,UAAU,GAAG,SAAS,UAAU,EAAE,QAAQ,EAAE;AACnD,IAAE,QAAQ,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;AACxC,MAAI,KAAK,KAAK;AACd,MAAI,KAAK,MAAM;AACf,MAAI,KAAK,OAAO;AAChB,MAAI,KAAK,OAAO;AAChB,MAAI,KAAK,QAAQ;AACjB,MAAI,KAAK,QAAQ;AACjB,MAAI,KAAK,QAAQ;AACjB,MAAI,KAAK,MAAM;AACf,MAAI,KAAK,OAAO;AAChB,MAAI,KAAK,SAAS;AAClB,MAAI,KAAK,UAAU;AACnB,QAAM,OAAO;MACT;AACJ,QAAM,OAAO;AACb;AACA,EAAA;;EAEA,MAAM,CAAC,MAAM,GAAG,SAAS,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAC7C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC5B,MAAI,MAAM,IAAI,SAAS,CAAC,6CAA6C;AACrE,IAAA;;AAEA,IAAE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,MAAI,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,IAAA;;AAEA,IAAE,IAAI;AACN,IAAE,IAAI,MAAM,KAAK,SAAS,EAAE;AAC5B,MAAI,MAAM,GAAG;AACb,MAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACtC,QAAM,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,MAAA;AACA,IAAA;;AAEA,IAAE,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM;IACxC,IAAI,GAAG,GAAG;AACZ,IAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACpC,MAAI,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC;AACpB,MAAI,IAAI,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE;QAC/B,IAAI,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE;AAC5C,UAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG;AACxD,UAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG;AAC5B,QAAA,CAAO,MAAM;AACb,UAAQ,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI;AACrC,YAAU,MAAM;AAChB,YAAU,GAAG;YACH;AACV;AACA,QAAA;MACA,CAAK,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AACtC,QAAM,MAAM,IAAI,SAAS,CAAC,6CAA6C;AACvE,MAAA,CAAK,MAAM;AACX,QAAM,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG;AAC1B,MAAA;MACI,GAAG,IAAI,GAAG,CAAC;AACf,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,SAAS,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE;AACvC,IAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;MAC3B,OAAO,MAAM,CAAC;AAClB,IAAA;AACA,IAAE,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC,EAAE;MACjE,OAAO,MAAM,CAAC;AAClB,IAAA;AACA,IAAE,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;MAC9B,MAAM,IAAI,SAAS;AACvB,QAAM,4EAA4E;QAC5E,gBAAgB,GAAG,OAAO;AAChC;AACA,IAAA;;AAEA,IAAE,MAAM,GAAG,GAAG,MAAM,CAAC;AACrB,IAAE,MAAM,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI;IAChE,IAAI,CAAC,SAAS,IAAI,GAAG,KAAK,CAAC,EAAE,OAAO;;AAEtC;IACE,IAAI,WAAW,GAAG;AACpB,IAAE,SAAS;AACX,MAAI,QAAQ,QAAQ;AACpB,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,QAAQ;AACnB,QAAM,KAAK,QAAQ;AACnB,UAAQ,OAAO;AACf,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,OAAO;AAClB,UAAQ,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;AACnC,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,SAAS;AACpB,QAAM,KAAK,UAAU;UACb,OAAO,GAAG,GAAG;AACrB,QAAM,KAAK,KAAK;UACR,OAAO,GAAG,KAAK;AACvB,QAAM,KAAK,QAAQ;AACnB,UAAQ,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/B;UACE,IAAI,WAAW,EAAE;YACf,OAAO,SAAS,GAAG,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM;AAC5D,UAAA;AACA,UAAQ,QAAQ,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,WAAW;AAC9C,UAAQ,WAAW,GAAG;AACtB;AACA,IAAA;AACA,EAAA;EACA,MAAM,CAAC,UAAU,GAAG;;AAEpB,EAAA,SAAS,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;IAC3C,IAAI,WAAW,GAAG;;AAEpB;AACA;;AAEA;AACA;AACA;AACA;IACE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,GAAG,CAAC,EAAE;AACxC,MAAI,KAAK,GAAG;AACZ,IAAA;AACA;AACA;AACA,IAAE,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE;AAC3B,MAAI,OAAO;AACX,IAAA;;IAEE,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;MAC1C,GAAG,GAAG,IAAI,CAAC;AACf,IAAA;;AAEA,IAAE,IAAI,GAAG,IAAI,CAAC,EAAE;AAChB,MAAI,OAAO;AACX,IAAA;;AAEA;AACA,IAAE,GAAG,MAAM;AACX,IAAE,KAAK,MAAM;;AAEb,IAAE,IAAI,GAAG,IAAI,KAAK,EAAE;AACpB,MAAI,OAAO;AACX,IAAA;;AAEA,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG;;IAE1B,OAAO,IAAI,EAAE;AACf,MAAI,QAAQ,QAAQ;AACpB,QAAM,KAAK,KAAK;AAChB,UAAQ,OAAO,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;;AAExC,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,OAAO;AAClB,UAAQ,OAAO,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;;AAEzC,QAAM,KAAK,OAAO;AAClB,UAAQ,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;;AAE1C,QAAM,KAAK,QAAQ;AACnB,QAAM,KAAK,QAAQ;AACnB,UAAQ,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;;AAE3C,QAAM,KAAK,QAAQ;AACnB,UAAQ,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;;AAE3C,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,SAAS;AACpB,QAAM,KAAK,UAAU;AACrB,UAAQ,OAAO,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG;;QAEtC;UACE,IAAI,WAAW,EAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,QAAQ;AAC5E,UAAQ,QAAQ,GAAG,CAAC,QAAQ,GAAG,EAAE,EAAE,WAAW;AAC9C,UAAQ,WAAW,GAAG;AACtB;AACA,IAAA;AACA,EAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG;;AAE7B,EAAA,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;AACxB,IAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AACf,IAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACZ,IAAE,CAAC,CAAC,CAAC,CAAC,GAAG;AACT,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,IAAI;AAC7C,IAAE,MAAM,GAAG,GAAG,IAAI,CAAC;AACnB,IAAE,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;AACrB,MAAI,MAAM,IAAI,UAAU,CAAC,2CAA2C;AACpE,IAAA;AACA,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC;AACvB,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,IAAI;AAC7C,IAAE,MAAM,GAAG,GAAG,IAAI,CAAC;AACnB,IAAE,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;AACrB,MAAI,MAAM,IAAI,UAAU,CAAC,2CAA2C;AACpE,IAAA;AACA,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC;MACnB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;AAC3B,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,IAAI;AAC7C,IAAE,MAAM,GAAG,GAAG,IAAI,CAAC;AACnB,IAAE,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE;AACrB,MAAI,MAAM,IAAI,UAAU,CAAC,2CAA2C;AACpE,IAAA;AACA,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE;MAC/B,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC;MACnB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;MACvB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;MACvB,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC;AAC3B,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,IAAI;AACjD,IAAE,MAAM,MAAM,GAAG,IAAI,CAAC;AACtB,IAAE,IAAI,MAAM,KAAK,CAAC,EAAE,OAAO;AAC3B,IAAE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM;AAC9D,IAAE,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS;AAC3C,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,MAAM,CAAC,SAAS,CAAC;;EAEnD,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC,EAAE;AAC9C,IAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,2BAA2B;AAC1E,IAAE,IAAI,IAAI,KAAK,CAAC,EAAE,OAAO;IACvB,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK;AACrC,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,IAAI;IAC7C,IAAI,GAAG,GAAG;AACZ,IAAE,MAAM,GAAG,GAAGA,SAAO,CAAC;IACpB,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI;IACjE,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,IAAI;AAChC,IAAE,OAAO,UAAU,GAAG,GAAG,GAAG;AAC5B,EAAA;AACA,EAAA,IAAI,mBAAmB,EAAE;IACvB,MAAM,CAAC,SAAS,CAAC,mBAAmB,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;AAC3D,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE;AACrF,IAAE,IAAI,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE;AACtC,MAAI,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,UAAU;AACjE,IAAA;IACE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;MAC5B,MAAM,IAAI,SAAS;AACvB,QAAM,kEAAkE;QAClE,gBAAgB,IAAI,OAAO,MAAM;AACvC;AACA,IAAA;;AAEA,IAAE,IAAI,KAAK,KAAK,SAAS,EAAE;AAC3B,MAAI,KAAK,GAAG;AACZ,IAAA;AACA,IAAE,IAAI,GAAG,KAAK,SAAS,EAAE;AACzB,MAAI,GAAG,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG;AACnC,IAAA;AACA,IAAE,IAAI,SAAS,KAAK,SAAS,EAAE;AAC/B,MAAI,SAAS,GAAG;AAChB,IAAA;AACA,IAAE,IAAI,OAAO,KAAK,SAAS,EAAE;MACzB,OAAO,GAAG,IAAI,CAAC;AACnB,IAAA;;IAEE,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,GAAG,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE;AAClF,MAAI,MAAM,IAAI,UAAU,CAAC,oBAAoB;AAC7C,IAAA;;IAEE,IAAI,SAAS,IAAI,OAAO,IAAI,KAAK,IAAI,GAAG,EAAE;AAC5C,MAAI,OAAO;AACX,IAAA;AACA,IAAE,IAAI,SAAS,IAAI,OAAO,EAAE;AAC5B,MAAI,OAAO;AACX,IAAA;AACA,IAAE,IAAI,KAAK,IAAI,GAAG,EAAE;AACpB,MAAI,OAAO;AACX,IAAA;;AAEA,IAAE,KAAK,MAAM;AACb,IAAE,GAAG,MAAM;AACX,IAAE,SAAS,MAAM;AACjB,IAAE,OAAO,MAAM;;AAEf,IAAE,IAAI,IAAI,KAAK,MAAM,EAAE,OAAO;;AAE9B,IAAE,IAAI,CAAC,GAAG,OAAO,GAAG;AACpB,IAAE,IAAI,CAAC,GAAG,GAAG,GAAG;IACd,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;;IAEzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO;IAC9C,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG;;AAE5C,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;MAC5B,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE;AACvC,QAAM,CAAC,GAAG,QAAQ,CAAC,CAAC;AACpB,QAAM,CAAC,GAAG,UAAU,CAAC,CAAC;QAChB;AACN,MAAA;AACA,IAAA;;AAEA,IAAE,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO;AACpB,IAAE,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO;AACpB,IAAE,OAAO;AACT,EAAA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACA,SAAS,oBAAoB,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE;AACvE;IACE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO;;AAElC;AACA,IAAE,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACtC,MAAI,QAAQ,GAAG;AACf,MAAI,UAAU,GAAG;AACjB,IAAA,CAAG,MAAM,IAAI,UAAU,GAAG,UAAU,EAAE;AACtC,MAAI,UAAU,GAAG;AACjB,IAAA,CAAG,MAAM,IAAI,UAAU,GAAG,WAAW,EAAE;MACnC,UAAU,GAAG;AACjB,IAAA;IACE,UAAU,GAAG,CAAC,WAAU;AAC1B,IAAE,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE;AAC/B;MACI,UAAU,GAAG,GAAG,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;AAC7C,IAAA;;AAEA;IACE,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG;AACnD,IAAE,IAAI,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE;AACnC,MAAI,IAAI,GAAG,EAAE,OAAO;AACpB,WAAS,UAAU,GAAG,MAAM,CAAC,MAAM,GAAG;AACtC,IAAA,CAAG,MAAM,IAAI,UAAU,GAAG,CAAC,EAAE;AAC7B,MAAI,IAAI,GAAG,EAAE,UAAU,GAAG;AAC1B,WAAS,OAAO;AAChB,IAAA;;AAEA;AACA,IAAE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;MAC3B,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ;AACnC,IAAA;;AAEA;AACA,IAAE,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5B;AACA,MAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,QAAM,OAAO;AACb,MAAA;MACI,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG;AAC9D,IAAA,CAAG,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AACtC,MAAI,GAAG,GAAG,GAAG,GAAG,KAAI;MAChB,IAAI,OAAO,UAAU,CAAC,SAAS,CAAC,OAAO,KAAK,UAAU,EAAE;QACtD,IAAI,GAAG,EAAE;AACf,UAAQ,OAAO,UAAU,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU;AACxE,QAAA,CAAO,MAAM;AACb,UAAQ,OAAO,UAAU,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU;AAC5E,QAAA;AACA,MAAA;AACA,MAAI,OAAO,YAAY,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG;AAChE,IAAA;;AAEA,IAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC;AAC5D,EAAA;;EAEA,SAAS,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE;IAC1D,IAAI,SAAS,GAAG;AAClB,IAAE,IAAI,SAAS,GAAG,GAAG,CAAC;AACtB,IAAE,IAAI,SAAS,GAAG,GAAG,CAAC;;AAEtB,IAAE,IAAI,QAAQ,KAAK,SAAS,EAAE;AAC9B,MAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW;AAC3C,MAAI,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO;AACnD,UAAQ,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,UAAU,EAAE;AAC3D,QAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,UAAQ,OAAO;AACf,QAAA;AACA,QAAM,SAAS,GAAG;AAClB,QAAM,SAAS,IAAI;AACnB,QAAM,SAAS,IAAI;AACnB,QAAM,UAAU,IAAI;AACpB,MAAA;AACA,IAAA;;AAEA,IAAE,SAAS,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE;AACzB,MAAI,IAAI,SAAS,KAAK,CAAC,EAAE;QACnB,OAAO,GAAG,CAAC,CAAC;AAClB,MAAA,CAAK,MAAM;AACX,QAAM,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC,GAAG,SAAS;AAC3C,MAAA;AACA,IAAA;;AAEA,IAAE,IAAI;IACJ,IAAI,GAAG,EAAE;MACP,IAAI,UAAU,GAAG;MACjB,KAAK,CAAC,GAAG,UAAU,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;QACvC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,UAAU,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,EAAE;AAC9E,UAAQ,IAAI,UAAU,KAAK,EAAE,EAAE,UAAU,GAAG;UACpC,IAAI,CAAC,GAAG,UAAU,GAAG,CAAC,KAAK,SAAS,EAAE,OAAO,UAAU,GAAG;AAClE,QAAA,CAAO,MAAM;UACL,IAAI,UAAU,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG;UAChC,UAAU,GAAG;AACrB,QAAA;AACA,MAAA;AACA,IAAA,CAAG,MAAM;MACL,IAAI,UAAU,GAAG,SAAS,GAAG,SAAS,EAAE,UAAU,GAAG,SAAS,GAAG;MACjE,KAAK,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;QAChC,IAAI,KAAK,GAAG;AAClB,QAAM,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE;AAC1C,UAAQ,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;AAC/C,YAAU,KAAK,GAAG;YACR;AACV,UAAA;AACA,QAAA;QACM,IAAI,KAAK,EAAE,OAAO;AACxB,MAAA;AACA,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE;AAC1E,IAAE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,KAAK;AACrD,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,OAAO,GAAG,SAAS,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE;IACtE,OAAO,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI;AACnE,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE;IAC9E,OAAO,oBAAoB,CAAC,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK;AACpE,EAAA;;EAEA,SAAS,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AAChD,IAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI;AAC7B,IAAE,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,GAAG;IAC/B,IAAI,CAAC,MAAM,EAAE;AACf,MAAI,MAAM,GAAG;AACb,IAAA,CAAG,MAAM;AACT,MAAI,MAAM,GAAG,MAAM,CAAC,MAAM;AAC1B,MAAI,IAAI,MAAM,GAAG,SAAS,EAAE;AAC5B,QAAM,MAAM,GAAG;AACf,MAAA;AACA,IAAA;;AAEA,IAAE,MAAM,MAAM,GAAG,MAAM,CAAC;;AAExB,IAAE,IAAI,MAAM,GAAG,MAAM,GAAG,CAAC,EAAE;MACvB,MAAM,GAAG,MAAM,GAAG;AACtB,IAAA;AACA,IAAE,IAAI;IACJ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;AAC/B,MAAI,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE;AACvD,MAAI,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO;AACpC,MAAI,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;AACtB,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;EAEA,SAAS,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACjD,IAAE,OAAO,UAAU,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;AACjF,EAAA;;EAEA,SAAS,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AAClD,IAAE,OAAO,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;AAC7D,EAAA;;EAEA,SAAS,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACnD,IAAE,OAAO,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;AAC9D,EAAA;;EAEA,SAAS,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE;AACjD,IAAE,OAAO,UAAU,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM;AACpF,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;AAC3E;AACA,IAAE,IAAI,MAAM,KAAK,SAAS,EAAE;AAC5B,MAAI,QAAQ,GAAG;MACX,MAAM,GAAG,IAAI,CAAC;AAClB,MAAI,MAAM,GAAG;AACb;IACA,CAAG,MAAM,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACjE,MAAI,QAAQ,GAAG;MACX,MAAM,GAAG,IAAI,CAAC;AAClB,MAAI,MAAM,GAAG;AACb;AACA,IAAA,CAAG,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;MAC3B,MAAM,GAAG,MAAM,KAAK;AACxB,MAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;QACpB,MAAM,GAAG,MAAM,KAAK;AAC1B,QAAM,IAAI,QAAQ,KAAK,SAAS,EAAE,QAAQ,GAAG;AAC7C,MAAA,CAAK,MAAM;AACX,QAAM,QAAQ,GAAG;AACjB,QAAM,MAAM,GAAG;AACf,MAAA;AACA,IAAA,CAAG,MAAM;MACL,MAAM,IAAI,KAAK;QACb;AACN;AACA,IAAA;;AAEA,IAAE,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG;IAChC,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,GAAG,SAAS,EAAE,MAAM,GAAG;;IAEzD,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,CAAC,KAAK,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE;AACjF,MAAI,MAAM,IAAI,UAAU,CAAC,wCAAwC;AACjE,IAAA;;AAEA,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG;;IAE1B,IAAI,WAAW,GAAG;AACpB,IAAE,SAAS;AACX,MAAI,QAAQ,QAAQ;AACpB,QAAM,KAAK,KAAK;UACR,OAAO,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;AAEpD,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,OAAO;UACV,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;AAErD,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,QAAQ;AACnB,QAAM,KAAK,QAAQ;UACX,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;AAEtD,QAAM,KAAK,QAAQ;AACnB;UACQ,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;AAEvD,QAAM,KAAK,MAAM;AACjB,QAAM,KAAK,OAAO;AAClB,QAAM,KAAK,SAAS;AACpB,QAAM,KAAK,UAAU;UACb,OAAO,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;;QAE/C;UACE,IAAI,WAAW,EAAE,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,QAAQ;AAC5E,UAAQ,QAAQ,GAAG,CAAC,EAAE,GAAG,QAAQ,EAAE,WAAW;AAC9C,UAAQ,WAAW,GAAG;AACtB;AACA,IAAA;AACA,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,IAAI;AAC7C,IAAE,OAAO;MACL,IAAI,EAAE,QAAQ;AAClB,MAAI,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;AACzD;AACA,EAAA;;AAEA,EAAA,SAAS,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACrC,IAAI,KAAK,KAAK,CAAC,IAAI,GAAG,KAAK,GAAG,CAAC,MAAM,EAAE;AACzC,MAAI,OAAO,MAAM,CAAC,aAAa,CAAC,GAAG;AACnC,IAAA,CAAG,MAAM;AACT,MAAI,OAAO,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC;AACrD,IAAA;AACA,EAAA;;AAEA,EAAA,SAAS,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACnC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG;IAC9B,MAAM,GAAG,GAAG;;IAEZ,IAAI,CAAC,GAAG;AACV,IAAE,OAAO,CAAC,GAAG,GAAG,EAAE;AAClB,MAAI,MAAM,SAAS,GAAG,GAAG,CAAC,CAAC;MACvB,IAAI,SAAS,GAAG;AACpB,MAAI,IAAI,gBAAgB,GAAG,CAAC,SAAS,GAAG,IAAI;UACpC;UACA,CAAC,SAAS,GAAG,IAAI;cACb;cACA,CAAC,SAAS,GAAG,IAAI;kBACb;kBACA;;AAEhB,MAAI,IAAI,CAAC,GAAG,gBAAgB,IAAI,GAAG,EAAE;AACrC,QAAM,IAAI,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE;;AAE7C,QAAM,QAAQ,gBAAgB;AAC9B,UAAQ,KAAK,CAAC;AACd,YAAU,IAAI,SAAS,GAAG,IAAI,EAAE;AAChC,cAAY,SAAS,GAAG;AACxB,YAAA;YACU;AACV,UAAQ,KAAK,CAAC;AACd,YAAU,UAAU,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AAChC,YAAU,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,IAAI,EAAE;cAChC,aAAa,GAAG,CAAC,SAAS,GAAG,IAAI,KAAK,GAAG,IAAI,UAAU,GAAG,IAAI;AAC1E,cAAY,IAAI,aAAa,GAAG,IAAI,EAAE;AACtC,gBAAc,SAAS,GAAG;AAC1B,cAAA;AACA,YAAA;YACU;AACV,UAAQ,KAAK,CAAC;AACd,YAAU,UAAU,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AAChC,YAAU,SAAS,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AAC/B,YAAU,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,MAAM,IAAI,EAAE;AAC3E,cAAY,aAAa,GAAG,CAAC,SAAS,GAAG,GAAG,KAAK,GAAG,GAAG,CAAC,UAAU,GAAG,IAAI,KAAK,GAAG,IAAI,SAAS,GAAG,IAAI;AACrG,cAAY,IAAI,aAAa,GAAG,KAAK,KAAK,aAAa,GAAG,MAAM,IAAI,aAAa,GAAG,MAAM,CAAC,EAAE;AAC7F,gBAAc,SAAS,GAAG;AAC1B,cAAA;AACA,YAAA;YACU;AACV,UAAQ,KAAK,CAAC;AACd,YAAU,UAAU,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AAChC,YAAU,SAAS,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;AAC/B,YAAU,UAAU,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;YACtB,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,MAAM,IAAI,EAAE;cAC/F,aAAa,GAAG,CAAC,SAAS,GAAG,GAAG,KAAK,IAAI,GAAG,CAAC,UAAU,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,SAAS,GAAG,IAAI,KAAK,GAAG,IAAI,UAAU,GAAG,IAAI;cACvH,IAAI,aAAa,GAAG,MAAM,IAAI,aAAa,GAAG,QAAQ,EAAE;AACpE,gBAAc,SAAS,GAAG;AAC1B,cAAA;AACA,YAAA;AACA;AACA,MAAA;;AAEA,MAAI,IAAI,SAAS,KAAK,IAAI,EAAE;AAC5B;AACA;AACA,QAAM,SAAS,GAAG;AAClB,QAAM,gBAAgB,GAAG;AACzB,MAAA,CAAK,MAAM,IAAI,SAAS,GAAG,MAAM,EAAE;AACnC;AACA,QAAM,SAAS,IAAI;QACb,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,GAAG,KAAK,GAAG,MAAM;AAChD,QAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG;AACvC,MAAA;;AAEA,MAAI,GAAG,CAAC,IAAI,CAAC,SAAS;AACtB,MAAI,CAAC,IAAI;AACT,IAAA;;IAEE,OAAO,qBAAqB,CAAC,GAAG;AAClC,EAAA;;AAEA;AACA;AACA;AACA,EAAA,MAAM,oBAAoB,GAAG;;EAE7B,SAAS,qBAAqB,EAAE,UAAU,EAAE;AAC5C,IAAE,MAAM,GAAG,GAAG,UAAU,CAAC;AACzB,IAAE,IAAI,GAAG,IAAI,oBAAoB,EAAE;MAC/B,OAAO,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC;AACxD,IAAA;;AAEA;IACE,IAAI,GAAG,GAAG;IACV,IAAI,CAAC,GAAG;AACV,IAAE,OAAO,CAAC,GAAG,GAAG,EAAE;AAClB,MAAI,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK;AACpC,QAAM,MAAM;QACN,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,IAAI,oBAAoB;AACnD;AACA,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,SAAS,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACpC,IAAI,GAAG,GAAG;IACV,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG;;AAEhC,IAAE,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;MAChC,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI;AAC5C,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,SAAS,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACrC,IAAI,GAAG,GAAG;IACV,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG;;AAEhC,IAAE,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;MAChC,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,SAAS,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;AACpC,IAAE,MAAM,GAAG,GAAG,GAAG,CAAC;;IAEhB,IAAI,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG;AACnC,IAAE,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE,GAAG,GAAG;;IAExC,IAAI,GAAG,GAAG;AACZ,IAAE,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;AACpC,MAAI,GAAG,IAAI,mBAAmB,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,SAAS,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE;IACtC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG;IAClC,IAAI,GAAG,GAAG;AACZ;AACA,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AAChD,MAAI,GAAG,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AAC9D,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,SAAS,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE;AACrD,IAAE,MAAM,GAAG,GAAG,IAAI,CAAC;IACjB,KAAK,GAAG,CAAC,CAAC;IACV,GAAG,GAAG,GAAG,KAAK,SAAS,GAAG,GAAG,GAAG,CAAC,CAAC;;AAEpC,IAAE,IAAI,KAAK,GAAG,CAAC,EAAE;AACjB,MAAI,KAAK,IAAI;AACb,MAAI,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG;AAC3B,IAAA,CAAG,MAAM,IAAI,KAAK,GAAG,GAAG,EAAE;AAC1B,MAAI,KAAK,GAAG;AACZ,IAAA;;AAEA,IAAE,IAAI,GAAG,GAAG,CAAC,EAAE;AACf,MAAI,GAAG,IAAI;AACX,MAAI,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG;AACvB,IAAA,CAAG,MAAM,IAAI,GAAG,GAAG,GAAG,EAAE;AACxB,MAAI,GAAG,GAAG;AACV,IAAA;;AAEA,IAAE,IAAI,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG;;IAEvB,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG;AACzC;IACE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS;;AAEhD,IAAE,OAAO;AACT,EAAA;;AAEA;AACA;AACA;AACA,EAAA,SAAS,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;AAC3C,IAAE,IAAI,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB;IAC/E,IAAI,MAAM,GAAG,GAAG,GAAG,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,uCAAuC;AACzF,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,UAAU;AAC3B,EAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IAC/E,MAAM,GAAG,MAAM,KAAK;IACpB,UAAU,GAAG,UAAU,KAAK;AAC9B,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM;;AAE5D,IAAE,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;IACrB,IAAI,GAAG,GAAG;IACV,IAAI,CAAC,GAAG;IACR,OAAO,EAAE,CAAC,GAAG,UAAU,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;MACzC,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;AAC9B,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,UAAU;AAC3B,EAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IAC/E,MAAM,GAAG,MAAM,KAAK;IACpB,UAAU,GAAG,UAAU,KAAK;IAC5B,IAAI,CAAC,QAAQ,EAAE;MACb,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM;AAC/C,IAAA;;IAEE,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,UAAU;IACpC,IAAI,GAAG,GAAG;IACV,OAAO,UAAU,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;MACvC,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,UAAU,CAAC,GAAG;AACzC,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,SAAS;EAC1B,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;IACjE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;IACjD,OAAO,IAAI,CAAC,MAAM;AACpB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,YAAY;EAC7B,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;AAC9C,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,YAAY;EAC7B,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AAC9C,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,YAAY;EAC7B,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;;AAEnD,IAAE,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;SAChB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;SACtB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC9B,SAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,SAAS;AACnC,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,YAAY;EAC7B,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;;AAEnD,IAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,SAAS;OAC7B,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE;OACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3B,MAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACpB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,kBAAkB,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE;IACtF,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,cAAc,CAAC,MAAM,EAAE,QAAQ;AACjC,IAAE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;AAC3B,IAAE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE;MAC7C,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACvC,IAAA;;IAEE,MAAM,EAAE,GAAG,KAAK;MACd,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;MACvB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;AAC5B,MAAI,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI;;AAE1B,IAAE,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC;MACvB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;MACvB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MACxB,IAAI,GAAG,CAAC,IAAI;;AAEhB,IAAE,OAAO,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;EAC/C,CAAC;;EAED,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,kBAAkB,CAAC,SAAS,eAAe,EAAE,MAAM,EAAE;IACtF,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,cAAc,CAAC,MAAM,EAAE,QAAQ;AACjC,IAAE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;AAC3B,IAAE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE;MAC7C,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACvC,IAAA;;AAEA,IAAE,MAAM,EAAE,GAAG,KAAK,GAAG,CAAC,IAAI,EAAE;MACxB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MACxB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;MACvB,IAAI,CAAC,EAAE,MAAM;;IAEf,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MACjC,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MACxB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;MACvB;;AAEJ,IAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE;EAC/C,CAAC;;AAED,EAAA,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IAC7E,MAAM,GAAG,MAAM,KAAK;IACpB,UAAU,GAAG,UAAU,KAAK;AAC9B,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM;;AAE5D,IAAE,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;IACrB,IAAI,GAAG,GAAG;IACV,IAAI,CAAC,GAAG;IACR,OAAO,EAAE,CAAC,GAAG,UAAU,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;MACzC,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;AAC9B,IAAA;AACA,IAAE,GAAG,IAAI;;AAET,IAAE,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU;;AAEnD,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IAC7E,MAAM,GAAG,MAAM,KAAK;IACpB,UAAU,GAAG,UAAU,KAAK;AAC9B,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,MAAM;;IAE1D,IAAI,CAAC,GAAG;IACR,IAAI,GAAG,GAAG;IACV,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;MAC9B,GAAG,IAAI,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,GAAG;AAChC,IAAA;AACA,IAAE,GAAG,IAAI;;AAET,IAAE,IAAI,GAAG,IAAI,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU;;AAEnD,IAAE,OAAO;AACT,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC/D,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,EAAE,QAAQ,IAAI,CAAC,MAAM,CAAC;AAClD,IAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;AACxC,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE;IACrE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;IACjD,OAAO,CAAC,GAAG,GAAG,MAAM,IAAI,GAAG,GAAG,UAAU,GAAG;AAC7C,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE;IACrE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;IACjD,OAAO,CAAC,GAAG,GAAG,MAAM,IAAI,GAAG,GAAG,UAAU,GAAG;AAC7C,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE;IACrE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;;AAEnD,IAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;OACjB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;OACtB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC5B,OAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE;AAC3B,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE;IACrE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;;AAEnD,IAAE,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;OACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;OACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;AAC3B,OAAK,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;AACrB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,kBAAkB,CAAC,SAAS,cAAc,EAAE,MAAM,EAAE;IACpF,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,cAAc,CAAC,MAAM,EAAE,QAAQ;AACjC,IAAE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;AAC3B,IAAE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE;MAC7C,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACvC,IAAA;;IAEE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;MAC1B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;MACzB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;OACzB,IAAI,IAAI,EAAE,EAAC;;IAEd,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;MAC/B,MAAM,CAAC,KAAK;MACZ,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;MACvB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MACxB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;EAC5B,CAAC;;EAED,MAAM,CAAC,SAAS,CAAC,cAAc,GAAG,kBAAkB,CAAC,SAAS,cAAc,EAAE,MAAM,EAAE;IACpF,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,cAAc,CAAC,MAAM,EAAE,QAAQ;AACjC,IAAE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM;AAC3B,IAAE,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC;IAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,EAAE;MAC7C,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC;AACvC,IAAA;;AAEA,IAAE,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE;MACtB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MACxB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;MACvB,IAAI,CAAC,EAAE,MAAM;;IAEf,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC;MAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MAC/B,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE;MACxB,IAAI,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;AAC3B,MAAI,IAAI;EACR,CAAC;;EAED,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE;IACrE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC/C,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE;IACrE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAChD,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;AAC/C,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE;IACvE,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,MAAM;AACnD,IAAE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAChD,EAAA;;AAEA,EAAA,SAAS,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AACtD,IAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,6CAA6C;AAC9F,IAAE,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE,MAAM,IAAI,UAAU,CAAC,mCAAmC;AAC1F,IAAE,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB;AAC1E,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,WAAW;AAC5B,EAAA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IACxF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;IACpB,UAAU,GAAG,UAAU,KAAK;IAC5B,IAAI,CAAC,QAAQ,EAAE;AACjB,MAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG;AACnD,MAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AACzD,IAAA;;IAEE,IAAI,GAAG,GAAG;IACV,IAAI,CAAC,GAAG;AACV,IAAE,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG;IACvB,OAAO,EAAE,CAAC,GAAG,UAAU,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;MACzC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,IAAI;AACvC,IAAA;;IAEE,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,WAAW;AAC5B,EAAA,MAAM,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IACxF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;IACpB,UAAU,GAAG,UAAU,KAAK;IAC5B,IAAI,CAAC,QAAQ,EAAE;AACjB,MAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,GAAG;AACnD,MAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;AACzD,IAAA;;AAEA,IAAE,IAAI,CAAC,GAAG,UAAU,GAAG;IACrB,IAAI,GAAG,GAAG;IACV,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG;IAC3B,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;MACjC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,IAAI;AACvC,IAAA;;IAEE,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,UAAU;AAC3B,EAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC1E,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;AACzD,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI;IAC5B,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,aAAa;AAC9B,EAAA,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAChF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AAC3D,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI;IAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;IAC/B,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,aAAa;AAC9B,EAAA,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAChF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AAC3D,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC;IAC3B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI;IAChC,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,aAAa;AAC9B,EAAA,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAChF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;IAC7D,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;IAChC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;IAChC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;AACjC,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI;IAC5B,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,MAAM,CAAC,SAAS,CAAC,aAAa;AAC9B,EAAA,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAChF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC;AAC/D,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;IAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;IAChC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;IAC/B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI;IAChC,OAAO,MAAM,GAAG;AAClB,EAAA;;EAEA,SAAS,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;AACvD,IAAE,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;;IAE1C,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5C,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;IAChB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;IAChB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;IAChB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;AAClB,IAAE,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1D,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;IAChB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;IAChB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;IAChB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG;AAClB,IAAE,OAAO;AACT,EAAA;;EAEA,SAAS,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE;AACvD,IAAE,UAAU,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC;;IAE1C,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC;AAC5C,IAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;IAClB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;IAClB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;IAClB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;AACpB,IAAE,IAAI,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC;AAC1D,IAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;IAClB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;IAClB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG;IAClB,EAAE,GAAG,EAAE,IAAI;AACb,IAAE,GAAG,CAAC,MAAM,CAAC,GAAG;IACd,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,gBAAgB,GAAG,kBAAkB,CAAC,SAAS,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;AACrG,IAAE,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,oBAAoB,CAAC;EACpF,CAAC;;AAED,EAAA,MAAM,CAAC,SAAS,CAAC,gBAAgB,GAAG,kBAAkB,CAAC,SAAS,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;AACrG,IAAE,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,oBAAoB,CAAC;EACpF,CAAC;;AAED,EAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IACtF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;IACpB,IAAI,CAAC,QAAQ,EAAE;AACjB,MAAI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,IAAI,CAAC;;AAElD,MAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,KAAK;AAC/D,IAAA;;IAEE,IAAI,CAAC,GAAG;IACR,IAAI,GAAG,GAAG;IACV,IAAI,GAAG,GAAG;AACZ,IAAE,IAAI,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG;IACvB,OAAO,EAAE,CAAC,GAAG,UAAU,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;AAC7C,MAAI,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AAC9D,QAAM,GAAG,GAAG;AACZ,MAAA;AACA,MAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG;AACpD,IAAA;;IAEE,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,UAAU,GAAG,SAAS,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE;IACtF,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;IACpB,IAAI,CAAC,QAAQ,EAAE;AACjB,MAAI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,UAAU,IAAI,CAAC;;AAElD,MAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,CAAC,EAAE,CAAC,KAAK;AAC/D,IAAA;;AAEA,IAAE,IAAI,CAAC,GAAG,UAAU,GAAG;IACrB,IAAI,GAAG,GAAG;IACV,IAAI,GAAG,GAAG;IACV,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG;IAC3B,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE;AACrC,MAAI,IAAI,KAAK,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE;AAC9D,QAAM,GAAG,GAAG;AACZ,MAAA;AACA,MAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,GAAG;AACpD,IAAA;;IAEE,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,SAAS,GAAG,SAAS,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IACxE,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,IAAK;IAC3D,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG;AACxC,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI;IAC5B,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC9E,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAO;AACjE,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI;IAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;IAC/B,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC9E,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAO;AACjE,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,CAAC;IAC3B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI;IAChC,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC9E,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW;AACzE,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,GAAG,IAAI;IAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;IAC/B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;IAChC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;IAChC,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC9E,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;AACtB,IAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW;IACvE,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,KAAK,GAAG;AAC9C,IAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,EAAE;IAC5B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,EAAE;IAChC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC;IAC/B,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI;IAChC,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,kBAAkB,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;AACnG,IAAE,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC,oBAAoB,CAAC;EACxG,CAAC;;AAED,EAAA,MAAM,CAAC,SAAS,CAAC,eAAe,GAAG,kBAAkB,CAAC,SAAS,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;AACnG,IAAE,OAAO,cAAc,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC,oBAAoB,CAAC;EACxG,CAAC;;AAED,EAAA,SAAS,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE;AAC1D,IAAE,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB;IACxE,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB;AAC3D,EAAA;;EAEA,SAAS,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE;IAC/D,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;IACpB,IAAI,CAAC,QAAQ,EAAE;AACjB,MAAI,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAkD;AACvF,IAAA;AACA,IAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACrD,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC9E,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ;AACvD,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,YAAY,GAAG,SAAS,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAC9E,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ;AACxD,EAAA;;EAEA,SAAS,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE;IAChE,KAAK,GAAG,CAAC;IACT,MAAM,GAAG,MAAM,KAAK;IACpB,IAAI,CAAC,QAAQ,EAAE;AACjB,MAAI,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAoD;AACzF,IAAA;AACA,IAAE,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;IACrD,OAAO,MAAM,GAAG;AAClB,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAChF,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ;AACxD,EAAA;;AAEA,EAAA,MAAM,CAAC,SAAS,CAAC,aAAa,GAAG,SAAS,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE;IAChF,OAAO,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ;AACzD,EAAA;;AAEA;AACA,EAAA,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE;AACxE,IAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,6BAA6B;AACjF,IAAE,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG;IACpB,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC;IAClC,IAAI,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAAC;AACzD,IAAE,IAAI,CAAC,WAAW,EAAE,WAAW,GAAG;IAChC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,KAAK,EAAE,GAAG,GAAG;;AAEpC;AACA,IAAE,IAAI,GAAG,KAAK,KAAK,EAAE,OAAO;AAC5B,IAAE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO;;AAEvD;AACA,IAAE,IAAI,WAAW,GAAG,CAAC,EAAE;AACvB,MAAI,MAAM,IAAI,UAAU,CAAC,2BAA2B;AACpD,IAAA;AACA,IAAE,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,UAAU,CAAC,oBAAoB;IAChF,IAAI,GAAG,GAAG,CAAC,EAAE,MAAM,IAAI,UAAU,CAAC,yBAAyB;;AAE7D;IACE,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IAClC,IAAI,MAAM,CAAC,MAAM,GAAG,WAAW,GAAG,GAAG,GAAG,KAAK,EAAE;AACjD,MAAI,GAAG,GAAG,MAAM,CAAC,MAAM,GAAG,WAAW,GAAG;AACxC,IAAA;;AAEA,IAAE,MAAM,GAAG,GAAG,GAAG,GAAG;;AAEpB,IAAE,IAAI,IAAI,KAAK,MAAM,IAAI,OAAO,UAAU,CAAC,SAAS,CAAC,UAAU,KAAK,UAAU,EAAE;AAChF;MACI,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG;AAC3C,IAAA,CAAG,MAAM;AACT,MAAI,UAAU,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI;AACjC,QAAM,MAAM;AACZ,QAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;QACzB;AACN;AACA,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;AAEA;AACA;AACA;AACA;AACA,EAAA,MAAM,CAAC,SAAS,CAAC,IAAI,GAAG,SAAS,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE;AAClE;AACA,IAAE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC/B,MAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACnC,QAAM,QAAQ,GAAG;AACjB,QAAM,KAAK,GAAG;QACR,GAAG,GAAG,IAAI,CAAC;AACjB,MAAA,CAAK,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AACxC,QAAM,QAAQ,GAAG;QACX,GAAG,GAAG,IAAI,CAAC;AACjB,MAAA;MACI,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAChE,QAAM,MAAM,IAAI,SAAS,CAAC,2BAA2B;AACrD,MAAA;AACA,MAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE;AACtE,QAAM,MAAM,IAAI,SAAS,CAAC,oBAAoB,GAAG,QAAQ;AACzD,MAAA;AACA,MAAI,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,QAAM,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,KAAK,MAAM,IAAI,IAAI,GAAG,GAAG;YAClC,QAAQ,KAAK,QAAQ,EAAE;AACjC;AACA,UAAQ,GAAG,GAAG;AACd,QAAA;AACA,MAAA;AACA,IAAA,CAAG,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;MAClC,GAAG,GAAG,GAAG,GAAG;AAChB,IAAA,CAAG,MAAM,IAAI,OAAO,GAAG,KAAK,SAAS,EAAE;AACvC,MAAI,GAAG,GAAG,MAAM,CAAC,GAAG;AACpB,IAAA;;AAEA;AACA,IAAE,IAAI,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE;AAC7D,MAAI,MAAM,IAAI,UAAU,CAAC,oBAAoB;AAC7C,IAAA;;AAEA,IAAE,IAAI,GAAG,IAAI,KAAK,EAAE;AACpB,MAAI,OAAO;AACX,IAAA;;IAEE,KAAK,GAAG,KAAK,KAAK;IAClB,GAAG,GAAG,GAAG,KAAK,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,KAAK;;AAElD,IAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG;;AAElB,IAAE,IAAI;AACN,IAAE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;MAC3B,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE;AAClC,QAAM,IAAI,CAAC,CAAC,CAAC,GAAG;AAChB,MAAA;AACA,IAAA,CAAG,MAAM;AACT,MAAI,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG;UAC7B;AACR,UAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ;AACjC,MAAI,MAAM,GAAG,GAAG,KAAK,CAAC;AACtB,MAAI,IAAI,GAAG,KAAK,CAAC,EAAE;AACnB,QAAM,MAAM,IAAI,SAAS,CAAC,aAAa,GAAG,GAAG;AAC7C,UAAQ,mCAAmC;AAC3C,MAAA;AACA,MAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,KAAK,EAAE,EAAE,CAAC,EAAE;QAChC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,GAAG;AACrC,MAAA;AACA,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;AAEA;AACA;;AAEA;AACA,EAAA,MAAM,MAAM,GAAG;AACf,EAAA,SAAS,CAAC,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE;IACjC,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,SAAS,SAAS,IAAI,CAAC;MACzC,WAAW,CAAC,GAAG;AACnB,QAAM,KAAK;;AAEX,QAAM,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE;UACrC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC;UACxC,QAAQ,EAAE,IAAI;AACtB,UAAQ,YAAY,EAAE;SACf;;AAEP;AACA,QAAM,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AACxC;AACA;QACM,IAAI,CAAC,MAAK;AAChB;QACM,OAAO,IAAI,CAAC;AAClB,MAAA;;MAEI,IAAI,IAAI,CAAC,GAAG;AAChB,QAAM,OAAO;AACb,MAAA;;AAEA,MAAI,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE;AACrB,QAAM,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE;UAClC,YAAY,EAAE,IAAI;UAClB,UAAU,EAAE,IAAI;AACxB,UAAQ,KAAK;AACb,UAAQ,QAAQ,EAAE;SACX;AACP,MAAA;;MAEI,QAAQ,CAAC,GAAG;AAChB,QAAM,OAAO,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC;AACpD,MAAA;AACA;AACA,EAAA;;AAEA,EAAA,CAAC,CAAC,0BAA0B;IAC1B,UAAU,IAAI,EAAE;MACd,IAAI,IAAI,EAAE;AACd,QAAM,OAAO,CAAC,EAAE,IAAI,CAAC,4BAA4B;AACjD,MAAA;;AAEA,MAAI,OAAO;AACX,IAAA,CAAG,EAAE,UAAU;AACf,EAAA,CAAC,CAAC,sBAAsB;AACxB,IAAE,UAAU,IAAI,EAAE,MAAM,EAAE;MACtB,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,iDAAiD,EAAE,OAAO,MAAM,CAAC;AACzF,IAAA,CAAG,EAAE,SAAS;AACd,EAAA,CAAC,CAAC,kBAAkB;AACpB,IAAE,UAAU,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;MAC3B,IAAI,GAAG,GAAG,CAAC,cAAc,EAAE,GAAG,CAAC,kBAAkB;MACjD,IAAI,QAAQ,GAAG;AACnB,MAAI,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE;AAC9D,QAAM,QAAQ,GAAG,qBAAqB,CAAC,MAAM,CAAC,KAAK,CAAC;AACpD,MAAA,CAAK,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC1C,QAAM,QAAQ,GAAG,MAAM,CAAC,KAAK;QACvB,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,KAAK,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;AACjF,UAAQ,QAAQ,GAAG,qBAAqB,CAAC,QAAQ;AACjD,QAAA;AACA,QAAM,QAAQ,IAAI;AAClB,MAAA;MACI,GAAG,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,WAAW,EAAE,QAAQ,CAAC;AACtD,MAAI,OAAO;AACX,IAAA,CAAG,EAAE,UAAU;;EAEf,SAAS,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,GAAG,GAAG;AACZ,IAAE,IAAI,CAAC,GAAG,GAAG,CAAC;IACZ,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG;IACnC,OAAO,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AACjC,MAAI,GAAG,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AACxC,IAAA;AACA,IAAE,OAAO,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC;AAClC,EAAA;;AAEA;AACA;;AAEA,EAAA,SAAS,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE;AAC/C,IAAE,cAAc,CAAC,MAAM,EAAE,QAAQ;AACjC,IAAE,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,GAAG,UAAU,CAAC,KAAK,SAAS,EAAE;MACvE,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,UAAU,GAAG,CAAC,CAAC;AACrD,IAAA;AACA,EAAA;;AAEA,EAAA,SAAS,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE;IAC7D,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE;MAC9B,MAAM,CAAC,GAAG,OAAO,GAAG,KAAK,QAAQ,GAAG,GAAG,GAAG;AAC9C,MAAI,IAAI;AACR,MAAwB;QAClB,IAAI,GAAG,KAAK,CAAC,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE;UAClC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;AACpE,QAAA,CAAO,MAAM;UACL,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC;AAC5E,kBAAgB,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;AAChD,QAAA;AACA,MAAA;MAGI,MAAM,IAAI,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK;AAC3D,IAAA;AACA,IAAE,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU;AACrC,EAAA;;AAEA,EAAA,SAAS,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE;AACtC,IAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;MAC7B,MAAM,IAAI,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK;AAC/D,IAAA;AACA,EAAA;;AAEA,EAAA,SAAS,WAAW,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;IACzC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,KAAK,EAAE;AACnC,MAAI,cAAc,CAAC,KAAK,EAAE,IAAI;AAC9B,MAAI,MAAM,IAAI,MAAM,CAAC,gBAAgB,CAAS,QAAQ,EAAE,YAAY,EAAE,KAAK;AAC3E,IAAA;;AAEA,IAAE,IAAI,MAAM,GAAG,CAAC,EAAE;AAClB,MAAI,MAAM,IAAI,MAAM,CAAC,wBAAwB;AAC7C,IAAA;;IAEE,MAAM,IAAI,MAAM,CAAC,gBAAgB,CAAS,QAAQ;AACpD,sCAAoC,CAAC,GAAG,EAAa,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AACzE,sCAAoC,KAAK;AACzC,EAAA;;AAEA;AACA;;AAEA,EAAA,MAAM,iBAAiB,GAAG;;EAE1B,SAAS,WAAW,EAAE,GAAG,EAAE;AAC3B;IACE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AACxB;IACE,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE;AAChD;AACA,IAAE,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO;AAC7B;IACE,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE;MAC3B,GAAG,GAAG,GAAG,GAAG;AAChB,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,SAAS,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE;IACnC,KAAK,GAAG,KAAK,IAAI;AACnB,IAAE,IAAI;AACN,IAAE,MAAM,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,aAAa,GAAG;IACpB,MAAM,KAAK,GAAG;;AAEhB,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;AACnC,MAAI,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;;AAEnC;MACI,IAAI,SAAS,GAAG,MAAM,IAAI,SAAS,GAAG,MAAM,EAAE;AAClD;QACM,IAAI,CAAC,aAAa,EAAE;AAC1B;AACA,UAAQ,IAAI,SAAS,GAAG,MAAM,EAAE;AAChC;AACA,YAAU,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI;YAClD;AACV,UAAA,CAAS,MAAM,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,EAAE;AACrC;AACA,YAAU,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI;YAClD;AACV,UAAA;;AAEA;AACA,UAAQ,aAAa,GAAG;;UAEhB;AACR,QAAA;;AAEA;AACA,QAAM,IAAI,SAAS,GAAG,MAAM,EAAE;AAC9B,UAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI;AAC1D,UAAQ,aAAa,GAAG;UAChB;AACR,QAAA;;AAEA;AACA,QAAM,SAAS,GAAG,CAAC,aAAa,GAAG,MAAM,IAAI,EAAE,GAAG,SAAS,GAAG,MAAM,IAAI;MACxE,CAAK,MAAM,IAAI,aAAa,EAAE;AAC9B;AACA,QAAM,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI;AACxD,MAAA;;AAEA,MAAI,aAAa,GAAG;;AAEpB;AACA,MAAI,IAAI,SAAS,GAAG,IAAI,EAAE;AAC1B,QAAM,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;AAC5B,QAAM,KAAK,CAAC,IAAI,CAAC,SAAS;AAC1B,MAAA,CAAK,MAAM,IAAI,SAAS,GAAG,KAAK,EAAE;AAClC,QAAM,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;QACtB,KAAK,CAAC,IAAI;AAChB,UAAQ,SAAS,IAAI,GAAG,GAAG,IAAI;UACvB,SAAS,GAAG,IAAI,GAAG;AAC3B;AACA,MAAA,CAAK,MAAM,IAAI,SAAS,GAAG,OAAO,EAAE;AACpC,QAAM,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;QACtB,KAAK,CAAC,IAAI;AAChB,UAAQ,SAAS,IAAI,GAAG,GAAG,IAAI;AAC/B,UAAQ,SAAS,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI;UAC9B,SAAS,GAAG,IAAI,GAAG;AAC3B;AACA,MAAA,CAAK,MAAM,IAAI,SAAS,GAAG,QAAQ,EAAE;AACrC,QAAM,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;QACtB,KAAK,CAAC,IAAI;AAChB,UAAQ,SAAS,IAAI,IAAI,GAAG,IAAI;AAChC,UAAQ,SAAS,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI;AACtC,UAAQ,SAAS,IAAI,GAAG,GAAG,IAAI,GAAG,IAAI;UAC9B,SAAS,GAAG,IAAI,GAAG;AAC3B;AACA,MAAA,CAAK,MAAM;AACX,QAAM,MAAM,IAAI,KAAK,CAAC,oBAAoB;AAC1C,MAAA;AACA,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;EAEA,SAAS,YAAY,EAAE,GAAG,EAAE;IAC1B,MAAM,SAAS,GAAG;AACpB,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACvC;MACI,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;AAC3C,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA,EAAA,SAAS,cAAc,EAAE,GAAG,EAAE,KAAK,EAAE;AACrC,IAAE,IAAI,CAAC,EAAE,EAAE,EAAE;IACX,MAAM,SAAS,GAAG;AACpB,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACvC,MAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE;;AAE1B,MAAI,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;MACpB,EAAE,GAAG,CAAC,IAAI;MACV,EAAE,GAAG,CAAC,GAAG;AACb,MAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACrB,MAAI,SAAS,CAAC,IAAI,CAAC,EAAE;AACrB,IAAA;;AAEA,IAAE,OAAO;AACT,EAAA;;EAEA,SAAS,aAAa,EAAE,GAAG,EAAE;IAC3B,OAAO,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC;AAC5C,EAAA;;EAEA,SAAS,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE;AAC/C,IAAE,IAAI;IACJ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE;AAC/B,MAAI,IAAI,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE;MACrD,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;AAC3B,IAAA;AACA,IAAE,OAAO;AACT,EAAA;;AAEA;AACA;AACA;AACA,EAAA,SAAS,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE;IAC9B,OAAO,GAAG,YAAY,IAAI;AAC5B,OAAK,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,WAAW,IAAI,IAAI,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI;QACrE,GAAG,CAAC,WAAW,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;AACxC,EAAA;EACA,SAAS,WAAW,EAAE,GAAG,EAAE;AAC3B;IACE,OAAO,GAAG,KAAK,GAAG;AACpB,EAAA;;AAEA;AACA;EACA,MAAM,mBAAmB,GAAG,CAAC,YAAY;IACvC,MAAM,QAAQ,GAAG;AACnB,IAAE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG;AAC7B,IAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;AAC/B,MAAI,MAAM,GAAG,GAAG,CAAC,GAAG;AACpB,MAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE;AACjC,QAAM,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;AAC/C,MAAA;AACA,IAAA;AACA,IAAE,OAAO;EACT,CAAC;;AAED;EACA,SAAS,kBAAkB,EAAE,EAAE,EAAE;AACjC,IAAE,OAAO,OAAO,MAAM,KAAK,WAAW,GAAG,sBAAsB,GAAG;AAClE,EAAA;;AAEA,EAAA,SAAS,sBAAsB,IAAI;AACnC,IAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB;AACxC,EAAA,CAAA;;;;;;;ACtjEA,MAAM,yBAAyB,GAAG,oHAAoH;AACtJ;AACA;AACA;AACA,MAAM,oBAAoB,GAAG,oHAAoH;AACjJ;AACA;AACA;AACO,MAAM,oBAAoB,CAAC;AAClC,IAAI,WAAW,CAAC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE;AACxD;AACA,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI;AAC3B;AACA,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI;AAClC;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,UAAU,GAAG,CAAC;AAC3B,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAC9E,QAAQ,IAAI,CAAC,cAAc,GAAG,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,MAAM,GAAG,cAAc,GAAG,IAAI;AAC1G,QAAQ,IAAI,CAAC,aAAa,GAAG,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,MAAM,GAAG,aAAa,GAAG,IAAI;AACtG,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE;AAC9C,QAAQ,OAAO,IAAI,oBAAoB,CAAC,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC;AAC1E,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,iBAAiB,CAAC,OAAO,EAAE;AACtC,QAAQ,IAAI,OAAO,OAAO,KAAK,UAAU;AACzC,YAAY,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC;AACnE,QAAQ,OAAO,IAAI,oBAAoB,CAAC,SAAS,EAAE,OAAO,CAAC;AAC3D,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,aAAa,GAAG;AAC1B,QAAQ,IAAI,EAAE;AACd,QAAQ,IAAI,IAAI,CAAC,cAAc,EAAE;AACjC,YAAY,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE;AACvD,YAAY,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO;AACnF,gBAAgB,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,OAAO;AACvE,gBAAgB,OAAO,OAAO,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,WAAW;AAC/E,gBAAgB,OAAO,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE;AACnF,gBAAgB,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC;AAC5F,YAAY;AACZ,YAAY,OAAO,OAAO;AAC1B,QAAQ;AACR,QAAQ,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AAC3B,YAAY,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AACtD,QAAQ;AACR,QAAQ,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO;AAC/B,QAAQ,MAAM,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE;AAC/C,QAAQ,MAAM,aAAa,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,aAAa,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,SAAS;AAClG;AACA,QAAQ,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,aAAa,CAAC;AACvD,QAAQ,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,oDAAO,8BAAsB,KAAC;AACzE,QAAQ,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC;AACjJ;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC;AAC5F,QAAQ,MAAM,SAAS,GAAGC,oBAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAClE;AACA,QAAQ,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,GAAG,GAAG,MAAM,0BAA0B,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC;AAC/I,QAAQ,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE;AAC9D,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,UAAU,GAAG;AACvB,QAAQ,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;AACnC,YAAY,OAAO,IAAI,CAAC,OAAO;AAC/B,QAAQ;AACR;AACA;AACA,QAAQ,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE;AAC1C,YAAY,OAAO,IAAI,CAAC,cAAc;AACtC,QAAQ;AACR,QAAQ,MAAM,iBAAiB,GAAG,IAAI,CAAC,UAAU;AACjD;AACA;AACA;AACA;AACA;AACA,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa;AAC1C,aAAa,IAAI,CAAC,CAAC,OAAO,KAAK;AAC/B,YAAY,IAAI,IAAI,CAAC,UAAU,KAAK,iBAAiB,EAAE;AACvD;AACA;AACA;AACA;AACA,gBAAgB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC;AACrD,YAAY;AACZ,YAAY,IAAI,CAAC,OAAO,GAAG,OAAO;AAClC,YAAY,OAAO,OAAO;AAC1B,QAAQ,CAAC;AACT,aAAa,OAAO,CAAC,MAAM;AAC3B;AACA;AACA;AACA;AACA,YAAY,IAAI,IAAI,CAAC,cAAc,KAAK,OAAO,EAAE;AACjD,gBAAgB,IAAI,CAAC,cAAc,GAAG,IAAI;AAC1C,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,CAAC,cAAc,GAAG,OAAO;AACrC,QAAQ,OAAO,OAAO;AACtB,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,CAAC,OAAO,EAAE;AACxB,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;AAC9B,IAAI;AACJ;AACA;AACA;AACA,IAAI,YAAY,GAAG;AACnB,QAAQ,IAAI,CAAC,UAAU,EAAE;AACzB,QAAQ,IAAI,CAAC,OAAO,GAAG,IAAI;AAC3B,QAAQ,IAAI,CAAC,cAAc,GAAG,IAAI;AAClC,IAAI;AACJ;AACA;AACA;AACA,IAAI,eAAe,GAAG;AACtB,QAAQ,OAAO,IAAI,CAAC,OAAO,KAAK,IAAI;AACpC,IAAI;AACJ,IAAI,UAAU,GAAG;AACjB,QAAQ,IAAI,EAAE,EAAE,EAAE;AAClB,QAAQ,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;AAC/H,IAAI;AACJ,IAAI,eAAe,GAAG;AACtB,QAAQ,IAAI,EAAE,EAAE,EAAE;AAClB,QAAQ,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;AACpI,IAAI;AACJ;AACA;AACA,oBAAoB,CAAC,QAAQ,GAAG,IAAI,oBAAoB,EAAE;;ACxJ1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEO,SAAS,QAAQ,CAAC,KAAK,EAAE;AAChC,IAAI,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE;AAC/C,QAAQ,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;AAC7C,QAAQ,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACrE,QAAQ,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;AAC9C,IAAI;AACJ,IAAI,OAAOA,oBAAM,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC;AACzD;AACO,SAAS,QAAQ,CAAC,KAAK,EAAE;AAChC,IAAI,MAAM,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC;AACjD,IAAI,IAAI,OAAO,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE;AAC/C,QAAQ,IAAI,MAAM,GAAG,EAAE;AACvB,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;AAC7C,YAAY,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnD,QAAQ,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;AACtC,IAAI;AACJ,IAAI,OAAOA,oBAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAChD;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,KAAK,EAAE;AACvC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AACzD,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC;AAC9B,IAAI,IAAI,GAAG,KAAK,CAAC;AACjB,QAAQ,GAAG,IAAI,IAAI;AACnB,SAAS,IAAI,GAAG,KAAK,CAAC;AACtB,QAAQ,GAAG,IAAI,GAAG;AAClB,IAAI,OAAO,QAAQ,CAAC,GAAG,CAAC;AACxB;;AC/CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,iBAAiB,GAAG,yDAAyD;AACnF;AACA,MAAM,mBAAmB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE;AACjF,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC1B,IAAI,MAAM,IAAI,GAAG,mBAAmB,CAAC,OAAO,CAAC;AAC7C,IAAI,IAAI,CAAC,IAAI;AACb,QAAQ,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC;AACjF,IAAI,MAAM,SAAS,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,SAAS,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,iBAAiB;AACjG,IAAI,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,GAAG;AAC/E,IAAI,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC;AAC7E,IAAI,IAAI,SAAS,KAAK,iBAAiB;AACvC,QAAQ,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC;AAC5F,IAAI,IAAI,OAAO,KAAK,GAAG;AACvB,QAAQ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;AACjD,IAAI,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC;AACtD,QAAQ,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC;AACvE,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC;AACxC,QAAQ,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC;AAChF,IAAI,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;AACtC,QAAQ,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC;AACzE,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AACxE,QAAQ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC;AACpE,IAAI,IAAI;AACR,QAAQ,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5D,QAAQ,IAAI,eAAe,CAAC,QAAQ,IAAI,eAAe,CAAC,QAAQ,IAAI,eAAe,CAAC,QAAQ,KAAK,GAAG;AACpG,YAAY,eAAe,CAAC,MAAM,IAAI,eAAe,CAAC,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,EAAE;AAC7G,YAAY,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;AACtD,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf,QAAQ,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC;AACvF,IAAI;AACJ,IAAI,IAAI,SAAS;AACjB,IAAI,IAAI;AACR,QAAQ,SAAS,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC;AAChC,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf,QAAQ,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC;AAC3D,IAAI;AACJ,IAAI,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,KAAK,WAAW,IAAI,SAAS,CAAC,QAAQ,KAAK,WAAW,IAAI,SAAS,CAAC,QAAQ,KAAK,OAAO;AAC5H,IAAI,IAAI,SAAS,CAAC,QAAQ,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI,SAAS,CAAC,QAAQ,KAAK,OAAO,CAAC,EAAE;AACvF,QAAQ,MAAM,IAAI,KAAK,CAAC,8DAA8D,CAAC;AACvF,IAAI;AACJ,IAAI,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,EAAE;AAC7H,QAAQ,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;AACxE,IAAI;AACJ,IAAI,MAAM,YAAY,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI,IAAI,EAAE;AAC5F,IAAI,MAAM,cAAc,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,mBAAmB,CAAC;AAChJ,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC,IAAI,cAAc,IAAI,YAAY,EAAE;AAClI,QAAQ,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;AAC1D,IAAI;AACJ,IAAI,IAAI,cAAc,CAAC,OAAO,EAAE,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE;AAC5E,QAAQ,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;AAClE,IAAI;AACJ,IAAI,MAAM,QAAQ,GAAG,YAAY,CAAC,WAAW,EAAE;AAC/C,IAAI,MAAM,cAAc,GAAG,cAAc,CAAC,WAAW,EAAE;AACvD,IAAI,QAAQ,CAAC,EAAE,MAAM,CAAC,mDAAmD,EAAE,IAAI,CAAC,IAAI,CAAC;AACrF,QAAQ,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC;AAC1B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC;AACxC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;AAC/B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;AAChC,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;AAC3B,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,CAAC;AAClC,QAAQ,CAAC,iBAAiB,EAAE,cAAc,CAAC,EAAE,CAAC;AAC9C,QAAQ,CAAC,YAAY,CAAC;AACtB,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,iBAAiB,CAAC,OAAO,EAAE;AAC3C,IAAI,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,mBAAmB,CAAC,GAAG,EAAE;AACzC,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;AAC/B,QAAQ,OAAO,IAAI;AACnB,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;AACtC,IAAI,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI;AAChD;;AC7HA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,iBAAiB,GAAG;AACjC;AACY,MAAC,iBAAiB,GAAG;AAC1B,SAAS,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE;AACtD,IAAI,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7D,IAAI,GAAG,CAAC,IAAI,GAAG,iBAAiB;AAChC,IAAI,IAAI,MAAM,KAAK,SAAS;AAC5B,QAAQ,GAAG,CAAC,MAAM,GAAG,MAAM;AAC3B,IAAI,OAAO,GAAG;AACd;AACO,SAAS,oBAAoB,CAAC,OAAO,EAAE;AAC9C,IAAI,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,iBAAiB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7D,IAAI,GAAG,CAAC,IAAI,GAAG,iBAAiB;AAChC,IAAI,OAAO,GAAG;AACd;AACO,SAAS,kBAAkB,CAAC,KAAK,EAAE;AAC1C,IAAI,MAAM,IAAI,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI;AACzE,IAAI,OAAO,CAAC,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK;AACvC,YAAY,IAAI,KAAK,iBAAiB,IAAI,IAAI,KAAK,iBAAiB,CAAC;AACrE;AACO,SAAS,yBAAyB,CAAC,KAAK,EAAE,eAAe,EAAE;AAClE,IAAI,IAAI,EAAE,EAAE,EAAE;AACd,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC;AACjC,QAAQ,OAAO,KAAK;AACpB,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI;AACtO,IAAI,OAAO,oBAAoB,CAAC,eAAe,EAAE,MAAM,CAAC;AACxD;AACA;AACO,MAAM,oBAAoB,GAAG,KAAK;AAClC,SAAS,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;AACzD,IAAI,IAAI,GAAG;AACX,IAAI,IAAI;AACR,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,QAAQ,GAAG,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG;AAC3E,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf,QAAQ,OAAO,UAAU;AACzB,IAAI;AACJ;AACA,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;AACxD,QAAQ,OAAO,UAAU;AACzB,IAAI,MAAM,WAAW,GAAG,GAAG,GAAG,IAAI;AAClC,IAAI,IAAI,KAAK,IAAI,WAAW;AAC5B,QAAQ,OAAO,SAAS;AACxB,IAAI,IAAI,KAAK,IAAI,WAAW,GAAG,oBAAoB;AACnD,QAAQ,OAAO,eAAe;AAC9B,IAAI,OAAO,OAAO;AAClB;AACA;AACO,SAAS,gBAAgB,CAAC,KAAK,EAAE;AACxC,IAAI,IAAI,CAAC,GAAG,IAAI;AAChB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;AACzC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC;AACtD,IAAI,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAE;AACrC,SAAS,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE;AAChE,IAAI,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC,CAAC,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAC,CAAC;AACtI;AACA,eAAe,gBAAgB,CAAC,QAAQ,EAAE;AAC1C,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9B,IAAI,IAAI,QAAQ,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC,UAAU,EAAE;AACxE,QAAQ,OAAO;AACf,YAAY,OAAO,EAAE,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;AACnI,YAAY,YAAY,EAAE,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;AAC7I,YAAY,MAAM,EAAE,SAAS;AAC7B,YAAY,UAAU,EAAE,IAAI;AAC5B,SAAS;AACT,IAAI;AACJ,IAAI,MAAM,GAAG,GAAG,uBAAuB,EAAE;AACzC,IAAI,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,yBAAyB,EAAE;AACzD,IAAI,OAAO;AACX,QAAQ,OAAO,EAAE,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;AAC/H,QAAQ,YAAY,EAAE,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;AACzI,QAAQ,MAAM,EAAE,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,SAAS;AAClI,QAAQ,UAAU,EAAE,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,iBAAiB,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;AAC5I,KAAK;AACL;AACA,eAAe,MAAM,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE;AACrD,IAAI,IAAI,EAAE,EAAE,EAAE;AACd,IAAI,IAAI,QAAQ,EAAE;AAClB,QAAQ,MAAM,GAAG,GAAG,oBAAoB,CAAC,QAAQ;AACjD,QAAQ,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,EAAE;AAC9C,QAAQ,IAAI,CAAC,OAAO;AACpB,YAAY,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,IAAI,EAAE;AACzD,QAAQ,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,GAAG,SAAS,CAAC,YAAY,GAAG,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,GAAG,EAAE,EAAE;AAC3N,QAAQ,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;AAC5B,QAAQ,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE;AAC1D,IAAI;AACJ,IAAI,MAAM,MAAM,GAAG,MAAM,uBAAuB,EAAE,CAAC,qBAAqB,CAAC,QAAQ,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,YAAY,CAAC;AACpJ;AACA;AACA;AACA,IAAI,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE;AACjK;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,iBAAiB,CAAC,QAAQ,GAAG,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AACxE,IAAI,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC;AAC1F;AACA,IAAI,IAAI,CAAC,OAAO;AAChB,QAAQ,OAAO,IAAI;AACnB,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI;AACxC,IAAI,MAAM,SAAS,GAAG,aAAa,CAAC,OAAO,CAAC;AAC5C,IAAI,IAAI,CAAC,KAAK,IAAI,SAAS,KAAK,OAAO;AACvC,QAAQ,OAAO,OAAO;AACtB;AACA;AACA,IAAI,MAAM,WAAW,GAAG,CAAC,KAAK,IAAI,SAAS,KAAK,eAAe;AAC/D,IAAI,IAAI,CAAC,YAAY,EAAE;AACvB,QAAQ,IAAI,WAAW;AACvB,YAAY,OAAO,OAAO;AAC1B;AACA;AACA,QAAQ,MAAM,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC;AACpD,QAAQ,MAAM,oBAAoB,CAAC,0DAA0D,CAAC;AAC9F,IAAI;AACJ,IAAI,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE;AACpC,IAAI,MAAM,GAAG,GAAG,cAAc,CAAC,QAAQ,GAAG,QAAQ,GAAG,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,YAAY,CAAC;AACnG,IAAI,MAAM,QAAQ,GAAG,mBAAmB,CAAC,GAAG,CAAC,GAAG,CAAC;AACjD,IAAI,IAAI,QAAQ;AAChB,QAAQ,OAAO,MAAM,QAAQ;AAC7B,IAAI,MAAM,WAAW,GAAG,CAAC,YAAY;AACrC,QAAQ,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;AACtB,QAAQ,IAAI;AACZ,YAAY,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,MAAM,CAAC;AACxE,YAAY,IAAI,EAAE,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,SAAS,CAAC,WAAW,CAAC,EAAE;AAC9K,gBAAgB,MAAM,oBAAoB,CAAC,uDAAuD,CAAC;AACnG,YAAY;AACZ,YAAY,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,EAAE,SAAS,CAAC;AACjG,YAAY,IAAI,OAAO,KAAK,YAAY,EAAE;AAC1C;AACA;AACA,gBAAgB,MAAM,oBAAoB,CAAC,gEAAgE,CAAC;AAC5G,YAAY;AACZ;AACA;AACA,YAAY,IAAI,CAAC,KAAK,EAAE;AACxB,gBAAgB,MAAM,oBAAoB,CAAC,iDAAiD,CAAC;AAC7F,YAAY;AACZ,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,IAAI,kBAAkB,CAAC,KAAK,CAAC;AACzC,gBAAgB,MAAM,KAAK;AAC3B;AACA;AACA,YAAY,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,SAAS;AAChS,YAAY,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE;AAC9C;AACA,gBAAgB,MAAM,gBAAgB,CAAC,QAAQ,EAAE,UAAU,CAAC;AAC5D,gBAAgB,MAAM,oBAAoB,CAAC,iDAAiD,EAAE,MAAM,CAAC;AACrG,YAAY;AACZ;AACA;AACA;AACA,YAAY,IAAI,WAAW;AAC3B,gBAAgB,OAAO,OAAO;AAC9B,YAAY,MAAM,oBAAoB,CAAC,2CAA2C,EAAE,MAAM,CAAC;AAC3F,QAAQ;AACR,gBAAgB;AAChB,YAAY,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC;AAC3C,QAAQ;AACR,IAAI,CAAC,GAAG;AACR,IAAI,mBAAmB,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC;AAC7C,IAAI,OAAO,MAAM,WAAW;AAC5B;AACA,eAAe,gBAAgB,CAAC,QAAQ,EAAE,UAAU,EAAE;AACtD,IAAI,IAAI,QAAQ,EAAE;AAClB,QAAQ,IAAI;AACZ,YAAY,oBAAoB,CAAC,QAAQ,CAAC,YAAY,EAAE;AACxD,QAAQ;AACR,QAAQ,yBAAyB,EAAE,EAAE,oBAAoB;AACzD,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI;AACR;AACA,QAAQ,MAAM,uBAAuB,EAAE,CAAC,wBAAwB,CAAC,UAAU,CAAC;AAC5E,IAAI;AACJ,IAAI,gFAAgF,EAAE,EAAE,2EAA2E;AACnK;;AC3OA,eAAe,iBAAiB,CAAC,QAAQ,EAAE;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC;AACrD,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9B;AACO,eAAe,gBAAgB,CAAC,QAAQ,EAAE;AACjD,IAAI,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC;AACzD,IAAI,IAAI,CAAC,WAAW,EAAE;AACtB,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO;AACX,QAAQ,aAAa,EAAE;AACvB,KAAK;AACL;AACO,eAAe,WAAW,CAAC,QAAQ,EAAE;AAC5C,IAAI,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC;AAC9C,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,IAAI,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,IAAI,OAAO,OAAO;AAClB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,6BAA6B,CAAC,OAAO,EAAE;AACvD,IAAI,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE;AAC5E,IAAI,IAAI,CAAC,OAAO;AAChB,QAAQ,OAAO,KAAK;AACpB,IAAI,IAAI;AACR,QAAQ,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;AACxC,QAAQ,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;AAC5B,YAAY,OAAO,KAAK;AACxB,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,QAAQ,MAAM,WAAW,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAC3D,QAAQ,MAAM,OAAO,GAAG,CAAC,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;AAClF,cAAc;AACd,cAAc,IAAI;AAClB,QAAQ,MAAM,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;AACpD,QAAQ,IAAI,EAAE,GAAG,CAAC,OAAO,WAAW,KAAK,QAAQ,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;AAC3E,cAAc;AACd,cAAc,IAAI;AAClB,QAAQ,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC;AAC3C,QAAQ,MAAM,KAAK,GAAG,CAAC,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;AAC9E,cAAc,UAAU,CAAC,WAAW;AACpC,cAAc,IAAI;AAClB;AACA;AACA;AACA;AACA,QAAQ,MAAM,UAAU,GAAG,mBAAmB,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;AAClF;AACA;AACA;AACA;AACA,QAAQ,IAAI,UAAU,IAAI,EAAE,IAAI,mBAAmB,CAAC,EAAE,CAAC,KAAK,UAAU;AACtE,YAAY,EAAE,GAAG,UAAU;AAC3B,QAAQ,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE;AACjD,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACO,eAAe,UAAU,CAAC,QAAQ,EAAE;AAC3C,IAAI,IAAI,QAAQ,EAAE;AAClB,QAAQ,MAAM,UAAU,GAAG,oBAAoB,CAAC,QAAQ;AACxD,QAAQ,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE;AACrD,QAAQ,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,OAAO;AAChF,IAAI;AACJ,IAAI,OAAO,uBAAuB,EAAE,CAAC,UAAU,EAAE;AACjD;AAiBA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,oBAAoB,CAAC,QAAQ,GAAG,KAAK,EAAE;AAC7D,IAAI,IAAI,EAAE;AACV,IAAI,IAAI,QAAQ;AAChB,QAAQ,OAAO,IAAI;AACnB,IAAI,MAAM,OAAO,GAAG,MAAM,uBAAuB,EAAE,CAAC,yBAAyB,EAAE;AAC/E,IAAI,OAAO,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,iBAAiB,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;AACnI;;ACpIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,oBAAoB,GAAG,sCAAsC;AACnE,MAAM,yBAAyB,GAAG,8CAA8C;AAChF;AACY,MAAC,kBAAkB,GAAG;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;AAC5C,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;AACzC,QAAQ,OAAO,IAAI;AACnB;AACA,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO;AACjC,IAAI,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,OAAO,KAAK,UAAU,EAAE;AACrF,QAAQ,OAAO,QAAQ;AACvB,IAAI;AACJ,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM;AACjC,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI;AAC1B,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI;AAC/C,IAAI,IAAI,MAAM,GAAG,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,WAAW,GAAG,SAAS,GAAG,SAAS;AAC1F,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,QAAQ,IAAI,IAAI,KAAK,qBAAqB,IAAI,YAAY;AAC1D,YAAY,MAAM,GAAG,WAAW;AAChC,aAAa,IAAI,IAAI,KAAK,eAAe;AACzC,YAAY,MAAM,GAAG,MAAM;AAC3B,IAAI;AACJ,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,KAAK,UAAU,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,WAAW;AAChG,IAAI,IAAI,CAAC,SAAS;AAClB,QAAQ,OAAO,IAAI;AACnB,IAAI,MAAM,cAAc,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM,GAAG,MAAM,IAAI,MAAM,KAAK,GAAG,GAAG,WAAW,GAAG,MAAM,CAAC;AAClH,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO;AACnC,IAAI,MAAM,OAAO,GAAG,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG;AAC1E,UAAU;AACV,UAAU,cAAc,KAAK;AAC7B,cAAc;AACd,cAAc,oBAAoB;AAClC,IAAI,MAAM,OAAO,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE;AAC5E,IAAI,IAAI,YAAY;AACpB,QAAQ,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAC1C,IAAI,IAAI,OAAO,IAAI,CAAC,UAAU,KAAK,QAAQ;AAC3C,QAAQ,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU;AAC5C,IAAI,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ;AACnC,QAAQ,OAAO,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE;AAC5B,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,QAAQ;AAC1D,QAAQ,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ;AACxC,IAAI,IAAI,OAAO,IAAI,CAAC,cAAc,KAAK,SAAS;AAChD,QAAQ,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc;AACpD,IAAI,OAAO,OAAO;AAClB;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,oBAAoB,CAAC,OAAO,EAAE,KAAK,EAAE;AACrD,IAAI,IAAI;AACR,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW;AACzC,YAAY;AACZ,QAAQ,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW;AAC3C,QAAQ,IAAI,OAAO,IAAI,KAAK,UAAU;AACtC,YAAY;AACZ,QAAQ,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC;AACjD,QAAQ,IAAI,KAAK;AACjB,YAAY,MAAM,CAAC,KAAK,GAAG,KAAK;AAChC,QAAQ,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE;AAC9B,QAAQ,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACtE,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,mBAAmB,SAAS,KAAK,CAAC;AAC/C,IAAI,WAAW,CAAC,OAAO,EAAE,QAAQ,EAAE;AACnC,QAAQ,KAAK,CAAC,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAC7C;AACA;AACA,QAAQ,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;AACpD,YAAY,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC;AACzC,QAAQ,IAAI,CAAC,IAAI,GAAG,qBAAqB;AACzC,QAAQ,IAAI,CAAC,OAAO,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AACrD,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;AAC9B,QAAQ,IAAI,CAAC,gBAAgB,GAAG,IAAI;AACpC,IAAI;AACJ;;AChHA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE;AAChC,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAC5D,MAAM,8BAA8B,GAAG,GAAG;AAC1C;AACY,MAAC,qBAAqB,GAAG;AACrC;AACO,SAAS,sBAAsB,CAAC,MAAM,EAAE;AAC/C,IAAI,IAAI;AACR,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW;AACzC,YAAY;AACZ,QAAQ,MAAM,IAAI,GAAG,UAAU,CAAC,WAAW;AAC3C,QAAQ,IAAI,OAAO,IAAI,KAAK,UAAU;AACtC,YAAY;AACZ,QAAQ,MAAM,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,qBAAqB,EAAE;AAC7D,YAAY,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;AAChF,SAAS,CAAC,CAAC;AACX,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf;AACA,IAAI;AACJ;AACA,SAAS,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE;AAC5D,IAAI,IAAI,EAAE,EAAE,EAAE;AACd,IAAI,MAAM,QAAQ,GAAG,QAAQ,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,EAAE;AAClI,IAAI,IAAI,IAAI,GAAG,QAAQ;AACvB,IAAI,IAAI;AACR,QAAQ,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;AACxC,QAAQ,IAAI,GAAG,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AACnD,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf;AACA,IAAI;AACJ,IAAI,MAAM,YAAY,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI;AAC3F,IAAI,MAAM,IAAI,GAAG,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY;AAChG,UAAU;AACV,UAAU,YAAY,IAAI;AAC1B,cAAc;AACd,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,CAAC,EAAE;AAC/C,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ;AAC5D,QAAQ,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO;AAClC,QAAQ,SAAS,EAAE,CAAC;AACpB;AACA,SAAS,mBAAmB,CAAC,KAAK,EAAE;AACpC,IAAI,IAAI,EAAE,EAAE,EAAE;AACd,IAAI,MAAM,UAAU,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,UAAU;AAC3J,IAAI,OAAO,OAAO,UAAU,KAAK,QAAQ,GAAG,UAAU,GAAG,CAAC,GAAG,CAAC;AAC9D;AACA,UAAU,CAAC,SAAS,EAAE;AACtB,IAAI,OAAO,EAAE,CAAC;AACd,IAAI,cAAc,EAAE,CAAC,KAAK,KAAK;AAC/B,QAAQ,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC1C;AACA;AACA,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK;AAC7C,eAAe,KAAK,CAAC,IAAI,KAAK;AAC9B,gBAAgB,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;AAC1I,QAAQ,IAAI,QAAQ,EAAE;AACtB,YAAY,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,MAAM,GAAG,EAAE;AAChG,gBAAgB,sBAAsB,CAAC,uBAAuB,CAAC,KAAK,EAAE,mBAAmB,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,CAAC;AACzG,YAAY;AACZ,YAAY,OAAO,KAAK;AACxB,QAAQ;AACR;AACA;AACA,QAAQ,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,MAAM,GAAG;AAC1F,YAAY,OAAO,IAAI;AACvB;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK;AACvJ,YAAY,OAAO,KAAK;AACxB,QAAQ,OAAO,UAAU,CAAC,cAAc,CAAC,KAAK;AAC9C,eAAe,sBAAsB,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC;AACzJ,IAAI,CAAC;AACL,IAAI,UAAU,EAAE,CAAC,UAAU,EAAE,KAAK,KAAK;AACvC,QAAQ,IAAI,EAAE;AACd,QAAQ,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,MAAM,GAAG,EAAE;AAC5F,YAAY,MAAM,cAAc,GAAG,8BAA8B,IAAI,CAAC,IAAI,UAAU,CAAC;AACrF,YAAY,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,cAAc,CAAC;AAC7D,QAAQ;AACR,QAAQ,OAAO,UAAU,CAAC,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC;AAC7D,IAAI,CAAC;AACL,IAAI,kBAAkB,EAAE,IAAI;AAC5B,IAAI,OAAO,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,aAAa,KAAK;AACnD,QAAQ,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;AACtB,QAAQ,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,MAAM,GAAG,EAAE;AAC5F,YAAY,sBAAsB,CAAC,uBAAuB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAC9J,QAAQ;AACR,QAAQ,OAAO,CAAC,IAAI,CAAC,CAAC,oBAAoB,EAAE,UAAU,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,aAAa,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACxM,IAAI,CAAC;AACL,IAAI,uBAAuB,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK;AACpD,QAAQ,IAAI,EAAE;AACd,QAAQ,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,MAAM,GAAG,EAAE;AAC5F,YAAY,sBAAsB,CAAC,uBAAuB,CAAC,KAAK,EAAE,UAAU,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC;AACzF,QAAQ;AACR,IAAI,CAAC;AACL,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,sBAAsB,CAAC,kBAAkB,EAAE,QAAQ,EAAE;AACpE,IAAI,IAAI;AACR;AACA;AACA;AACA;AACA,QAAQ,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACxE,QAAQ,IAAI,CAAC,KAAK;AAClB,YAAY,OAAO,KAAK;AACxB;AACA;AACA;AACA;AACA,QAAQ,MAAM,iBAAiB,GAAG,MAAM,oBAAoB,CAAC,QAAQ,CAAC;AACtE,QAAQ,IAAI,iBAAiB,KAAK,kBAAkB;AACpD,YAAY,OAAO,KAAK;AACxB,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf;AACA;AACA,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACO,eAAe,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE;AACxE,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClC;AACA;AACA,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM,SAAS,EAAE;AACvJ,IAAI,MAAM,QAAQ,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,SAAS,MAAM,IAAI;AAC5G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,sBAAsB,GAAG,CAAC,EAAE,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,OAAO;AAChH,WAAW,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC;AACjG,IAAI,MAAM,mBAAmB,GAAG,CAAC;AACjC,WAAW,EAAE,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,eAAe;AAC/F,WAAW,CAAC,sBAAsB;AAClC;AACA;AACA,IAAI,MAAM,kBAAkB,GAAG;AAC/B,UAAU,MAAM,oBAAoB,CAAC,MAAM,CAAC,QAAQ;AACpD,UAAU,IAAI;AACd,IAAI,eAAe,cAAc,GAAG;AACpC,QAAQ,IAAI,EAAE;AACd;AACA;AACA;AACA,QAAQ,MAAM,UAAU,GAAG,CAAC,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,eAAe;AAC9G,cAAc,MAAM,UAAU,CAAC,eAAe;AAC9C,cAAc;AACd,kBAAkB;AAClB,kBAAkB,MAAM,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC;AACzD,QAAQ,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC;AACnH;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE;AACxF,YAAY,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AAC5E,gBAAgB,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,eAAe,EAAE;AAC5D,oBAAoB,OAAO,OAAO,CAAC,eAAe,CAAC;AACnD,oBAAoB,OAAO,CAAC,eAAe,CAAC,GAAG,KAAK;AACpD,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK;AACzC,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK;AACrD,QAAQ,MAAM,cAAc,GAAG,MAAM,GAAG,KAAK,GAAG,KAAK;AACrD,QAAQ,MAAM,aAAa,GAAG;AAC9B,YAAY,MAAM;AAClB,YAAY,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACvF,YAAY,OAAO;AACnB,YAAY,OAAO,EAAE,CAAC,EAAE,GAAG,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,cAAc;AACtJ,YAAY,MAAM,EAAE,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,MAAM;AAC7F,SAAS;AACT,QAAQ,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,EAAE;AAClD,YAAY,aAAa,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE;AACjE,QAAQ;AACR,QAAQ,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC;AACvD,QAAQ,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE;AAC1F,IAAI;AACJ,IAAI,IAAI;AACR,QAAQ,OAAO,MAAM,cAAc,EAAE;AACrC,IAAI;AACJ,IAAI,OAAO,YAAY,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,KAAK,GAAG,YAAY;AAChC,QAAQ,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,MAAM,GAAG,EAAE;AAC5F;AACA;AACA,YAAY,IAAI,QAAQ,EAAE;AAC1B,gBAAgB,MAAM,KAAK;AAC3B,YAAY;AACZ,YAAY,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,UAAU,EAAE;AAC/F;AACA,gBAAgB,MAAM,UAAU,CAAC,UAAU,EAAE;AAC7C,gBAAgB,IAAI;AACpB,oBAAoB,OAAO,MAAM,cAAc,EAAE;AACjD,gBAAgB;AAChB,gBAAgB,OAAO,UAAU,EAAE;AACnC;AACA,oBAAoB,KAAK,GAAG,UAAU;AACtC,gBAAgB;AAChB,YAAY;AACZ,iBAAiB,IAAI,mBAAmB,EAAE;AAC1C;AACA;AACA,gBAAgB,MAAM,SAAS,GAAG,MAAM,sBAAsB,CAAC,kBAAkB,EAAE,MAAM,CAAC,QAAQ,CAAC;AACnG,gBAAgB,IAAI,SAAS,EAAE;AAC/B,oBAAoB,IAAI;AACxB,wBAAwB,OAAO,MAAM,cAAc,EAAE;AACrD,oBAAoB;AACpB,oBAAoB,OAAO,UAAU,EAAE;AACvC,wBAAwB,KAAK,GAAG,UAAU;AAC1C,oBAAoB;AACpB,gBAAgB;AAChB;AACA,YAAY;AACZ;AACA;AACA,QAAQ;AACR,QAAQ,IAAI,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,KAAK,GAAG,EAAE;AAC3F,YAAY,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;AAC9C,QAAQ;AACR,QAAQ,IAAI,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE;AAChF,YAAY,MAAM,YAAY,GAAG,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK;AAChE,kBAAkB,KAAK,CAAC,QAAQ,CAAC;AACjC,kBAAkB,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC1D,YAAY,MAAM,UAAU,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM;AACnG;AACA;AACA;AACA,YAAY,MAAM,OAAO,GAAG,aAAa,CAAC,YAAY,EAAE,UAAU,CAAC;AACnE,YAAY,MAAM,QAAQ,GAAG;AAC7B,kBAAkB,IAAI,mBAAmB,CAAC,OAAO;AACjD,kBAAkB,IAAI,KAAK,CAAC,YAAY,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,gBAAgB,CAAC;AACtF,YAAY,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC;AACjD,YAAY,QAAQ,CAAC,UAAU,GAAG,UAAU;AAC5C;AACA;AACA;AACA;AACA;AACA,YAAY,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,YAAY,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,QAAQ,CAAC,IAAI;AACnG,YAAY,QAAQ,CAAC,MAAM,GAAG,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,GAAG,UAAU,GAAG,YAAY,CAAC,MAAM;AAC7G,YAAY,QAAQ,CAAC,SAAS,GAAG,CAAC,EAAE,GAAG,YAAY,CAAC,SAAS,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,QAAQ,CAAC,SAAS;AAClH,YAAY,IAAI,OAAO,EAAE;AACzB;AACA;AACA;AACA,gBAAgB,QAAQ,CAAC,OAAO,GAAG,OAAO;AAC1C,gBAAgB,QAAQ,CAAC,IAAI,GAAG,qBAAqB;AACrD,gBAAgB,QAAQ,CAAC,gBAAgB,GAAG,IAAI;AAChD,gBAAgB,QAAQ,CAAC,OAAO,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AACjE,gBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;AAC3D,YAAY;AACZ,YAAY,MAAM,QAAQ;AAC1B,QAAQ;AACR,QAAQ,MAAM,KAAK;AACnB,IAAI;AACJ;;AC7SA;AACA;AACA;AACA;AACA;AACA;AASA;AACA;AACA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAE;AACnC;AACA;AACA;AACA;AACA,MAAM,sBAAsB,GAAG,IAAI,GAAG,EAAE;AACxC;AACA;AACA;AACA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAE;AAC/B,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAChC,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC5C,MAAM,oBAAoB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AAC3C,SAAS,qBAAqB,CAAC,QAAQ,EAAE,aAAa,EAAE;AACxD,IAAI,IAAI,EAAE;AACV,IAAI,OAAO,CAAC,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,aAAa,KAAK,aAAa,CAAC;AAC1I;AACA,SAAS,qBAAqB,CAAC,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE;AAC9D,IAAI,IAAI,EAAE;AACV,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE;AACzF,IAAI,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,aAAa,KAAK,aAAa,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC;AAChI,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC;AACjE,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC;AAChD;AACA;AACA,MAAM,2BAA2B,GAAG,IAAI;AACxC,MAAM,6BAA6B,GAAG,IAAI;AAC1C,MAAM,sBAAsB,GAAG,MAAM;AACrC,MAAM,2BAA2B,GAAG,GAAG;AACvC,MAAM,iCAAiC,GAAG,IAAI;AAE9C;AACA;AACA;AACA,MAAM,8BAA8B,GAAG,IAAI;AAC3C,MAAM,+BAA+B,GAAG,KAAK;AAC7C,MAAM,SAAS,GAAG;AAClB;AACA,IAAI,UAAU,EAAE,QAAQ;AACxB;AACA,IAAI,oBAAoB,EAAE,2BAA2B,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,6BAA6B,CAAC;AACjH;AACA,IAAI,oBAAoB,EAAE,sBAAsB;AAChD;AACA,IAAI,2BAA2B,EAAE,2BAA2B;AAC5D;AACA,IAAI,iBAAiB,EAAE,KAAK;AAC5B,CAAC;AACD,MAAM,UAAU,GAAG,QAAQ;AAC3B,IAAI,6BAA6B,GAAG,KAAK;AACzC,IAAI,+BAA+B,GAAG,CAAC;AACvC,IAAI,mBAAmB,GAAG,IAAI;AAC9B,IAAI,kBAAkB,GAAG,IAAI;AAC7B;AACA,SAAS,sBAAsB,GAAG;AAClC,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7E;AACA,SAASC,YAAU,CAAC,KAAK,EAAE;AAC3B,IAAI,IAAI,CAAC,GAAG,IAAI;AAChB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU;AAC7D,IAAI;AACJ,IAAI,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;AAC3E,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;AACtE,IAAI,MAAM,QAAQ,GAAG,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE;AACxF,IAAI,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,GAAG,EAAE;AAC5D,IAAI,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,EAAE,EAAEA,YAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;AAC7D,IAAI,MAAM,SAAS,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,EAAE,EAAEA,YAAU,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAC/G,IAAI,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,MAAM,IAAI,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;AAChH;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,sBAAoB,CAAC,OAAO,EAAE;AACvC,IAAI,OAAO,OAAO,GAAG,CAAC,CAAC,EAAED,YAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;AACrD;AACA,SAAS,wBAAwB,CAAC,OAAO,EAAE;AAC3C,IAAI,IAAI,CAAC,OAAO;AAChB,QAAQ,OAAO,IAAI;AACnB,IAAI,IAAI;AACR,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,QAAQ,MAAM,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;AAC/C,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;AAC3D,YAAY,OAAO,MAAM;AACzB,QAAQ,MAAM,aAAa,GAAG,OAAO,CAAC,sBAAsB,CAAC;AAC7D,QAAQ,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;AACzE,YAAY,OAAO,aAAa;AAChC,QAAQ,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG;AACnC,QAAQ,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,GAAG,IAAI;AACjF,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,SAAS,qBAAqB,CAAC,OAAO,EAAE;AACxC,IAAI,OAAO;AACX,QAAQ,UAAU,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAC3E,QAAQ,SAAS,EAAE,wBAAwB,CAAC,OAAO,CAAC;AACpD,KAAK;AACL;AACA,SAAS,0BAA0B,CAAC,UAAU,EAAE,OAAO,EAAE;AACzD,IAAI,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC;AAClD,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE;AAC7B,QAAQ,OAAO,UAAU,CAAC,cAAc,KAAK,IAAI,IAAI,UAAU,CAAC,aAAa,KAAK,IAAI;AACtF,IAAI;AACJ,IAAI,IAAI,UAAU,CAAC,cAAc,IAAI,UAAU,CAAC,cAAc,KAAK,OAAO,CAAC,UAAU,EAAE;AACvF,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,CAAC,CAAC,UAAU,CAAC,aAAa,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC,aAAa,KAAK,OAAO,CAAC,SAAS;AAC9G;AACA,eAAe,8BAA8B,CAAC,UAAU,EAAE,QAAQ,EAAE;AACpE,IAAI,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC;AACnD,IAAI,IAAI,CAAC,YAAY;AACrB,QAAQ,OAAO,KAAK;AACpB,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,aAAa;AAC/D,QAAQ,OAAO,KAAK;AACpB,IAAI,OAAO,0BAA0B,CAAC,UAAU,EAAE,YAAY,CAAC;AAC/D;AACA,eAAe,uBAAuB,CAAC,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE;AACvF;AACA;AACA,IAAI,IAAI,SAAS,EAAE;AACnB,QAAQ,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;AAC/E,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,eAAe,EAAE;AACzF,QAAQ,IAAI;AACZ,YAAY,MAAM,MAAM,GAAG,qBAAqB,CAAC,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC;AACnF,YAAY,MAAM,SAAS,GAAGC,sBAAoB,CAAC,MAAM,CAAC;AAC1D,YAAY,OAAO;AACnB,kBAAkB,EAAE,GAAG,EAAE,CAAC,EAAE,cAAc,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM;AAC1F,kBAAkB,EAAE,GAAG,EAAE,CAAC,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;AACnF,QAAQ;AACR,QAAQ,OAAO,EAAE,EAAE;AACnB;AACA,YAAY,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,cAAc,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;AACnI,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC;AAC9C,IAAI,MAAM,SAAS,GAAGA,sBAAoB,CAAC,OAAO,CAAC;AACnD,IAAI,OAAO;AACX,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAClI,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE;AAC1E;AACA;AACA,SAAS,qBAAqB,CAAC,OAAO,EAAE;AACxC,IAAI,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,aAAa,MAAM,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE;AAC7K,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,IAAI;AAC3E;AACA;AACA,IAAI,eAAe,GAAG,CAAC;AACvB;AACA;AACA;AACA;AACA;AACA,SAAS,sBAAsB,CAAC,KAAK,EAAE;AACvC,IAAI,IAAI;AACR,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxE,QAAQ,OAAO,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,GAAG,IAAI;AACtD,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,0BAA0B,CAAC,KAAK,EAAE;AAC3C,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,MAAM,iBAAiB;AACxF,QAAQ,OAAO,KAAK;AACpB;AACA;AACA,IAAI,IAAI,CAAC,cAAc,EAAE;AACzB,QAAQ,OAAO,KAAK;AACpB,IAAI,kBAAkB,GAAG,KAAK;AAC9B,IAAI,OAAO,KAAK;AAChB;AACA;AACA,SAAS,cAAc,GAAG;AAC1B,IAAI,IAAI;AACR,QAAQ,OAAO,uBAAuB,EAAE,CAAC,UAAU,EAAE;AACrD,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ;AACA,SAAS,kBAAkB,CAAC,UAAU,EAAE,KAAK,EAAE;AAC/C,IAAI,UAAU,CAAC,WAAW,GAAG,KAAK;AAClC,IAAI,UAAU,CAAC,gBAAgB,GAAG,IAAI;AACtC,IAAI,UAAU,CAAC,mBAAmB,GAAG,IAAI;AACzC,IAAI,UAAU,CAAC,cAAc,GAAG,IAAI;AACpC,IAAI,UAAU,CAAC,aAAa,GAAG,IAAI;AACnC,IAAI,UAAU,CAAC,YAAY,GAAG,KAAK;AACnC,IAAI,UAAU,CAAC,WAAW,GAAG,KAAK;AAClC,IAAI,UAAU,CAAC,gBAAgB,GAAG,KAAK;AACvC,IAAI,KAAK,MAAM,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE;AACrF,QAAQ,qCAAqC,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,CAAC;AAChF,IAAI;AACJ,IAAI,KAAK,MAAM,YAAY,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE;AAClE,QAAQ,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC;AACjD,QAAQ,yBAAyB,CAAC,YAAY,EAAE,KAAK,CAAC;AACtD,IAAI;AACJ;AACA,SAAS,oBAAoB,CAAC,UAAU,EAAE,QAAQ,EAAE;AACpD;AACA,IAAI,IAAI,UAAU,CAAC,iBAAiB,EAAE;AACtC,QAAQ,aAAa,CAAC,UAAU,CAAC,iBAAiB,CAAC;AACnD,QAAQ,UAAU,CAAC,iBAAiB,GAAG,IAAI;AAC3C,IAAI;AACJ;AACA;AACA;AACA,IAAI,UAAU,CAAC,iBAAiB,GAAG,WAAW,CAAC,YAAY;AAC3D,QAAQ,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9B,QAAQ,IAAI;AACZ,YAAY,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC;AAC3D,YAAY,IAAI,CAAC,YAAY;AAC7B,gBAAgB,OAAO;AACvB,YAAY,MAAM,cAAc,GAAG,sBAAsB,CAAC,YAAY,CAAC;AACvE,YAAY,IAAI,CAAC,cAAc;AAC/B,gBAAgB;AAChB,YAAY,MAAM,eAAe,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE;AAC/D,YAAY,IAAI,eAAe,IAAI,oBAAoB,EAAE;AACzD,gBAAgB,OAAO,CAAC,IAAI,CAAC,qDAAqD,CAAC;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,IAAI;AACpB,oBAAoB,MAAM,iBAAiB,CAAC,QAAQ,CAAC;AACrD,oBAAoB,OAAO,CAAC,IAAI,CAAC,kEAAkE,CAAC;AACpG,gBAAgB;AAChB,gBAAgB,OAAO,YAAY,EAAE;AACrC,oBAAoB,MAAM,UAAU,GAAG,CAAC,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,YAAY,CAAC,IAAI,MAAM;AAC3H,2BAA2B,CAAC,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,YAAY,CAAC,IAAI,MAAM,iBAAiB;AAChI,oBAAoB,IAAI,UAAU,EAAE;AACpC;AACA;AACA;AACA;AACA;AACA,wBAAwB,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC;AACnG,wBAAwB,IAAI,UAAU,CAAC,iBAAiB,EAAE;AAC1D,4BAA4B,aAAa,CAAC,UAAU,CAAC,iBAAiB,CAAC;AACvE,4BAA4B,UAAU,CAAC,iBAAiB,GAAG,IAAI;AAC/D,wBAAwB;AACxB,wBAAwB;AACxB,oBAAoB;AACpB;AACA;AACA;AACA,oBAAoB,OAAO,CAAC,IAAI,CAAC,2EAA2E,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,YAAY,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,YAAY,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;AACtW,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,gDAAgD,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,SAAS,CAAC;AAClV,QAAQ;AACR,IAAI,CAAC,EAAE,oBAAoB,CAAC;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,cAAc,CAAC,QAAQ,EAAE;AACxC,IAAI,IAAI,EAAE,EAAE,EAAE;AACd;AACA;AACA;AACA,IAAI,IAAI,kBAAkB,IAAI,cAAc,EAAE,EAAE;AAChD,QAAQ,MAAM,kBAAkB;AAChC,IAAI;AACJ,IAAI,IAAI;AACR,QAAQ,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC;AACvD,QAAQ,kBAAkB,GAAG,IAAI;AACjC,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB;AACA;AACA,QAAQ,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,SAAS,CAAC;AACnR,QAAQ,MAAM,0BAA0B,CAAC,yBAAyB,CAAC,KAAK,EAAE,2CAA2C,CAAC,CAAC;AACvH,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,8BAA8B,CAAC,UAAU,EAAE;AAC1D,IAAI,MAAM,QAAQ,GAAG,UAAU,CAAC,gBAAgB;AAChD,IAAI,IAAI,CAAC,QAAQ;AACjB,QAAQ;AACR;AACA;AACA,IAAI,IAAI,UAAU,CAAC,uBAAuB,KAAK,QAAQ;AACvD,QAAQ;AACR,IAAI,UAAU,CAAC,uBAAuB,GAAG,QAAQ;AACjD,IAAI,IAAI;AACR,QAAQ,MAAM,iBAAiB,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACrE,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf;AACA;AACA;AACA,IAAI;AACJ;AACA,eAAe,sBAAsB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,SAAS,EAAE;AAC9E;AACA;AACA;AACA,IAAI,IAAI,SAAS,EAAE;AACnB,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC5B;AACA;AACA;AACA,QAAQ,OAAO,cAAc,CAAC,QAAQ,CAAC;AACvC,IAAI;AACJ,IAAI,IAAI;AACR,QAAQ,MAAM,KAAK,GAAG,MAAM,iBAAiB,EAAE;AAC/C,QAAQ,IAAI,KAAK;AACjB,YAAY,OAAO,KAAK;AACxB,QAAQ,MAAM,oBAAoB,CAAC,0DAA0D,CAAC;AAC9F,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,MAAM,yBAAyB,CAAC,KAAK,EAAE,+CAA+C,CAAC;AAC/F,IAAI;AACJ;AACA,SAAS,gCAAgC,GAAG;AAC5C,IAAI,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE;AACnD,QAAQ,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;AAC5B,YAAY;AACZ,QAAQ;AACR;AACA;AACA,QAAQ,IAAI,UAAU,CAAC,EAAE,CAAC,UAAU,KAAK,qBAAqB,EAAE;AAChE,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,KAAK;AAChB;AACA,SAAS,+BAA+B,GAAG;AAC3C,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,IAAI,IAAI,GAAG,GAAG,+BAA+B,GAAG,iCAAiC,EAAE;AACnF,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,CAAC,gCAAgC,EAAE,EAAE;AAC7C,QAAQ;AACR,IAAI;AACJ,IAAI,+BAA+B,GAAG,GAAG;AACzC,IAAI,sBAAsB,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK;AAC9C,QAAQ,OAAO,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC;AAC3E,IAAI,CAAC,CAAC;AACN;AACA,SAAS,+BAA+B,GAAG;AAC3C,IAAI,IAAI,6BAA6B,EAAE;AACvC,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACvC,QAAQ;AACR,IAAI;AACJ,IAAI,6BAA6B,GAAG,IAAI;AACxC,IAAI,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM;AAC5C,QAAQ,+BAA+B,EAAE;AACzC,IAAI,CAAC,CAAC;AACN,IAAI,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACzC,QAAQ,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAM;AAC5D,YAAY,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS,EAAE;AACxD,gBAAgB,+BAA+B,EAAE;AACjD,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB,CAAC,SAAS,EAAE;AACzC,IAAI,IAAI,CAAC,SAAS;AAClB,QAAQ,OAAO,IAAI;AACnB,IAAI,MAAM,IAAI,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACzE,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;AACvB,QAAQ,OAAO,IAAI;AACnB,IAAI,OAAO,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAClC;AACA,SAAS,mBAAmB,CAAC,UAAU,EAAE;AACzC,IAAI,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE;AACzD,QAAQ,GAAG,CAAC,QAAQ,GAAG,SAAS;AAChC,QAAQ,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;AACtE,YAAY,kCAAkC,CAAC,UAAU,EAAE,GAAG,CAAC;AAC/D,QAAQ;AACR,QAAQ,6BAA6B,CAAC,UAAU,EAAE,GAAG,CAAC;AACtD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE;AACvF,IAAI,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,CAAC;AACnD;AACA;AACA,IAAI,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK;AACpD,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM;AAC/D,IAAI,IAAI,CAAC,YAAY;AACrB,QAAQ,OAAO,IAAI;AACnB,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAC/C,IAAI,OAAO,cAAc,GAAG,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,GAAG,MAAM;AACtE;AACA,SAAS,yBAAyB,CAAC,UAAU,EAAE;AAC/C,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc;AAClC,QAAQ;AACR,IAAI,YAAY,CAAC,UAAU,CAAC,cAAc,CAAC;AAC3C,IAAI,UAAU,CAAC,cAAc,GAAG,IAAI;AACpC;AACA,SAAS,kBAAkB,CAAC,UAAU,EAAE;AACxC,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,UAAU;AACtD,QAAQ;AACR,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE;AACtB,QAAQ;AACR,IAAI,yBAAyB,CAAC,UAAU,CAAC;AACzC,IAAI,IAAI,UAAU,CAAC,iBAAiB,EAAE;AACtC,QAAQ,aAAa,CAAC,UAAU,CAAC,iBAAiB,CAAC;AACnD,QAAQ,UAAU,CAAC,iBAAiB,GAAG,IAAI;AAC3C,IAAI;AACJ,IAAI,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE;AAC5B,IAAI,UAAU,CAAC,EAAE,GAAG,IAAI;AACxB,IAAI,UAAU,CAAC,YAAY,GAAG,KAAK;AACnC,IAAI,UAAU,CAAC,WAAW,GAAG,KAAK;AAClC,IAAI,UAAU,CAAC,gBAAgB,GAAG,KAAK;AACvC,IAAI,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,6BAA6B,CAAC;AAC/D,IAAI,KAAK,MAAM,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE;AACrF,QAAQ,qCAAqC,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,CAAC;AACrF,IAAI;AACJ,IAAI,KAAK,MAAM,YAAY,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE;AAClE,QAAQ,yBAAyB,CAAC,YAAY,EAAE,UAAU,CAAC;AAC3D,IAAI;AACJ,IAAI,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;AACtC,IAAI,IAAI;AACR,QAAQ,EAAE,CAAC,KAAK,EAAE;AAClB,IAAI;AACJ,IAAI,6BAA6B,EAAE,EAAE,wBAAwB;AAC7D;AACA,SAAS,6BAA6B,CAAC,UAAU,EAAE;AACnD,IAAI,IAAI,EAAE;AACV,IAAI,IAAI,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,UAAU;AACtD,QAAQ;AACR,IAAI,IAAI,UAAU,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC;AACzC,QAAQ;AACR,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC;AAC7G,QAAQ;AACR,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,cAAc;AACnD,QAAQ;AACR,IAAI,UAAU,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM;AACjD,QAAQ,IAAI,EAAE;AACd,QAAQ,UAAU,CAAC,cAAc,GAAG,IAAI;AACxC,QAAQ,IAAI,UAAU,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC;AAC7C,YAAY;AACZ,QAAQ,IAAI,CAAC,CAAC,EAAE,GAAG,sBAAsB,CAAC,GAAG,CAAC,UAAU,CAAC,cAAc,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC;AACjH,YAAY;AACZ,QAAQ,kBAAkB,CAAC,UAAU,CAAC;AACtC,IAAI,CAAC,EAAE,8BAA8B,CAAC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,iBAAiB,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE;AACtH,IAAI,IAAI,EAAE;AACV,IAAI,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;AACzJ,IAAI,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,GAAG,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;AAC9H,IAAI,IAAI,QAAQ,GAAG,KAAK;AACxB,IAAI,IAAI,YAAY,GAAG,IAAI;AAC3B,IAAI,MAAM,OAAO,GAAG,CAAC,UAAU,KAAK;AACpC,QAAQ,IAAI,EAAE;AACd,QAAQ,IAAI,QAAQ;AACpB,YAAY;AACZ,QAAQ,QAAQ,GAAG,IAAI;AACvB,QAAQ,IAAI,YAAY,EAAE;AAC1B,YAAY,YAAY,CAAC,YAAY,CAAC;AACtC,YAAY,YAAY,GAAG,IAAI;AAC/B,QAAQ;AACR,QAAQ,MAAM,SAAS,GAAG,CAAC,CAAC,EAAE,GAAG,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC;AAC9G,QAAQ,IAAI,SAAS,GAAG,CAAC;AACzB,YAAY,sBAAsB,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC3D;AACA,YAAY,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC;AACnD,QAAQ,IAAI,UAAU;AACtB,YAAY,6BAA6B,CAAC,UAAU,CAAC;AACrD,IAAI,CAAC;AACL,IAAI,IAAI;AACR,QAAQ,MAAM,UAAU,GAAG,MAAM,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,CAAC;AAC3I,QAAQ,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC;AAC3D;AACA;AACA;AACA,QAAQ,YAAY,GAAG,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACvD,QAAQ,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB,EAAE;AACzD,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,OAAO,EAAE;AACjB,QAAQ,MAAM,KAAK;AACnB,IAAI;AACJ;AACA,eAAe,qBAAqB,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,EAAE;AAC1H;AACA;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;AACzJ,IAAI,MAAM,YAAY,GAAG,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxD,IAAI,IAAI,YAAY;AACpB,QAAQ,OAAO,YAAY;AAC3B,IAAI,MAAM,MAAM,GAAG,yBAAyB,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,CAAC;AAC3I,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;AAC3C,IAAI,IAAI;AACR,QAAQ,OAAO,MAAM,MAAM;AAC3B,IAAI;AACJ,YAAY;AACZ,QAAQ,IAAI,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,MAAM,EAAE;AACxD,YAAY,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9C,QAAQ;AACR,IAAI;AACJ;AACA,eAAe,yBAAyB,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE;AACxI,IAAI,+BAA+B,EAAE;AACrC,IAAI,MAAM,SAAS,GAAG,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,SAAS,MAAM,IAAI;AACjG;AACA;AACA;AACA;AACA,IAAI,MAAM,OAAO,GAAG,oBAAoB,CAAC,SAAS,CAAC;AACnD;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,MAAM,GAAG,SAAS,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK;AACpD,IAAI,MAAM,IAAI,GAAG,OAAO,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM;AAC/D,IAAI,MAAM,iBAAiB,GAAG;AAC9B,UAAU,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;AACrC,UAAU,IAAI;AACd,IAAI,IAAI,OAAO,GAAG,iBAAiB;AACnC,IAAI,IAAI,UAAU;AAClB,IAAI,IAAI,YAAY,IAAI,cAAc,EAAE;AACxC;AACA;AACA,QAAQ,KAAK,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,IAAI,WAAW,EAAE;AAC7D,YAAY,IAAI,CAAC,YAAY,KAAK,iBAAiB,IAAI,YAAY,CAAC,UAAU,CAAC,CAAC,EAAE,iBAAiB,CAAC,WAAW,CAAC,CAAC;AACjH,gBAAgB,SAAS,CAAC,uBAAuB,KAAK,cAAc,EAAE;AACtE,gBAAgB,OAAO,GAAG,YAAY;AACtC,gBAAgB,UAAU,GAAG,SAAS;AACtC,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,CAAC,UAAU,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACrD,YAAY,IAAI,cAAc,GAAG,CAAC;AAClC,YAAY,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;AACtF,gBAAgB,cAAc,IAAI,CAAC;AACnC,YAAY,OAAO,GAAG,CAAC,EAAE,iBAAiB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AACxE,QAAQ;AACR,IAAI;AACJ,SAAS;AACT,QAAQ,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AAC7C,IAAI;AACJ,IAAI,IAAI,UAAU,IAAI,UAAU,CAAC,EAAE,EAAE;AACrC;AACA;AACA;AACA;AACA,QAAQ,yBAAyB,CAAC,UAAU,CAAC;AAC7C,QAAQ,IAAI,UAAU,CAAC,WAAW,EAAE;AACpC,YAAY,MAAM,UAAU,CAAC,WAAW;AACxC,QAAQ;AACR,QAAQ,IAAI,gBAAgB;AAC5B,QAAQ,IAAI;AACZ,YAAY,gBAAgB,GAAG,MAAM,sBAAsB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,SAAS,CAAC;AACnG,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,MAAM,SAAS,GAAG,yBAAyB,CAAC,KAAK,EAAE,2CAA2C,CAAC;AAC3G,YAAY,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC;AACrD,YAAY,MAAM,SAAS;AAC3B,QAAQ;AACR,QAAQ,IAAI,UAAU,CAAC,WAAW;AAClC,YAAY,CAAC,UAAU,CAAC,gBAAgB;AACxC,YAAY,CAAC,0BAA0B,CAAC,UAAU,EAAE,gBAAgB,CAAC,EAAE;AACvE,YAAY,kBAAkB,CAAC,UAAU,CAAC;AAC1C,QAAQ;AACR,aAAa;AACb,YAAY,UAAU,CAAC,WAAW,GAAG,IAAI;AACzC,YAAY,OAAO,UAAU;AAC7B,QAAQ;AACR,QAAQ,UAAU,CAAC,WAAW,GAAG,IAAI;AACrC,IAAI;AACJ,IAAI,IAAI,gBAAgB,GAAG,MAAM,sBAAsB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,SAAS,CAAC;AAC/F;AACA,IAAI,UAAU,GAAG;AACjB,QAAQ,EAAE,EAAE,IAAI;AAChB,QAAQ,aAAa,EAAE,IAAI,GAAG,EAAE;AAChC,QAAQ,oBAAoB,EAAE,IAAI,GAAG,EAAE;AACvC,QAAQ,sBAAsB,EAAE,IAAI,GAAG,EAAE;AACzC,QAAQ,eAAe,EAAE,IAAI,GAAG,EAAE;AAClC,QAAQ,YAAY,EAAE,KAAK;AAC3B,QAAQ,WAAW,EAAE,KAAK;AAC1B,QAAQ,gBAAgB,EAAE,KAAK;AAC/B,QAAQ,KAAK;AACb,QAAQ,GAAG,EAAE,OAAO;AACpB,QAAQ,cAAc,EAAE,QAAQ;AAChC,QAAQ,SAAS,EAAE,OAAO,GAAG,SAAS,GAAG,SAAS;AAClD,QAAQ,iBAAiB;AACzB,QAAQ,uBAAuB,EAAE,cAAc,KAAK,IAAI,IAAI,cAAc,KAAK,MAAM,GAAG,cAAc,GAAG,IAAI;AAC7G,QAAQ,gBAAgB,EAAE,IAAI;AAC9B,QAAQ,mBAAmB,EAAE,IAAI;AACjC,QAAQ,cAAc,EAAE,IAAI;AAC5B,QAAQ,aAAa,EAAE,IAAI;AAC3B,QAAQ,gBAAgB,EAAE,CAAC;AAC3B,QAAQ,iBAAiB,EAAE,IAAI;AAC/B,QAAQ,cAAc,EAAE,IAAI;AAC5B,QAAQ,uBAAuB,EAAE,CAAC;AAClC,QAAQ,WAAW,EAAE,IAAI;AACzB,QAAQ,MAAM;AACd,QAAQ,SAAS;AACjB,QAAQ,QAAQ;AAChB,QAAQ,uBAAuB,EAAE,IAAI;AACrC,KAAK;AACL,IAAI,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC;AACxC;AACA,IAAI,MAAM,WAAW,GAAG,YAAY;AACpC,QAAQ,IAAI,EAAE;AACd;AACA;AACA,QAAQ,MAAM,QAAQ,GAAG,CAAC,EAAE,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,MAAM,SAAS,EAAE,EAAE,QAAQ;AAC7J,QAAQ,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;AACvC;AACA,QAAQ,KAAK,CAAC,QAAQ,GAAG,UAAU;AACnC;AACA;AACA;AACA;AACA;AACA,QAAQ,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC,MAAM,SAAS,EAAE,EAAE,KAAK,CAAC;AAC9E;AACA;AACA,QAAQ,IAAI,UAAU,CAAC,SAAS,EAAE;AAClC,YAAY,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC;AACxE,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ,IAAI,SAAS;AACrB,QAAQ,IAAI;AACZ,YAAY,SAAS,GAAG,gBAAgB,KAAK;AAC7C,kBAAkB;AAClB,kBAAkB,MAAM,sBAAsB,CAAC,QAAQ,EAAE,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,SAAS,CAAC;AAC5G,YAAY,gBAAgB,GAAG,SAAS;AACxC,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,MAAM,SAAS,GAAG,yBAAyB,CAAC,KAAK,EAAE,2CAA2C,CAAC;AAC3G,YAAY,kBAAkB,CAAC,UAAU,EAAE,SAAS,CAAC;AACrD,YAAY,MAAM,SAAS;AAC3B,QAAQ;AACR,QAAQ,UAAU,CAAC,gBAAgB,GAAG,SAAS,IAAI,IAAI;AACvD,QAAQ,UAAU,CAAC,mBAAmB,GAAG,qBAAqB,CAAC,SAAS,CAAC;AACzE,QAAQ,IAAI,SAAS,EAAE;AACvB;AACA,YAAY,UAAU,CAAC,uBAAuB,GAAG,CAAC;AAClD,YAAY,UAAU,CAAC,WAAW,GAAG,IAAI;AACzC,QAAQ;AACR,QAAQ,OAAO,KAAK,CAAC,QAAQ,EAAE;AAC/B,IAAI,CAAC;AACL;AACA,IAAI,UAAU,CAAC,YAAY,GAAG,IAAI;AAClC,IAAI,MAAM,EAAE,GAAG,IAAI,qBAAqB,CAAC,WAAW,EAAE,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACxH,IAAI,UAAU,CAAC,EAAE,GAAG,EAAE;AACtB;AACA,IAAI,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM;AACtC,QAAQ,IAAI,EAAE,EAAE,EAAE;AAClB,QAAQ,UAAU,CAAC,gBAAgB,IAAI,CAAC;AACxC,QAAQ,UAAU,CAAC,YAAY,GAAG,KAAK;AACvC,QAAQ,UAAU,CAAC,WAAW,GAAG,IAAI;AACrC;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;AACnC,YAAY,oBAAoB,CAAC,UAAU,EAAE,QAAQ,CAAC;AACtD,QAAQ;AACR,QAAQ,IAAI,UAAU,CAAC,gBAAgB,EAAE;AACzC,YAAY,UAAU,CAAC,gBAAgB,GAAG,IAAI;AAC9C,YAAY,IAAI;AAChB,gBAAgB,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvJ,YAAY;AACZ,YAAY,OAAO,KAAK,EAAE;AAC1B,gBAAgB,UAAU,CAAC,gBAAgB,GAAG,KAAK;AACnD,gBAAgB,UAAU,CAAC,WAAW,GAAG,KAAK;AAC9C,gBAAgB,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,KAAK,CAAC;AAC3E,gBAAgB,IAAI;AACpB,oBAAoB,CAAC,EAAE,GAAG,UAAU,CAAC,EAAE,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,4BAA4B,CAAC;AAC1H,gBAAgB;AAChB,gBAAgB,OAAO,EAAE,EAAE;AAC3B;AACA,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,aAAa;AACb,YAAY,UAAU,CAAC,gBAAgB,GAAG,KAAK;AAC/C,YAAY,UAAU,CAAC,cAAc,GAAG,IAAI;AAC5C,YAAY,UAAU,CAAC,aAAa,GAAG,IAAI;AAC3C,YAAY,mBAAmB,CAAC,UAAU,CAAC;AAC3C,QAAQ;AACR,IAAI,CAAC,CAAC;AACN;AACA,IAAI,EAAE,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,KAAK;AAC9C,QAAQ,IAAI;AACZ,YAAY,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;AAClD,YAAY,mBAAmB,CAAC,UAAU,EAAE,OAAO,CAAC;AACpD,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC;AAClE,QAAQ;AACR,IAAI,CAAC,CAAC;AACN;AACA,IAAI,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,KAAK,KAAK;AAC5C,QAAQ,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC;AACxD,QAAQ,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,iBAAiB,CAAC;AACpD,QAAQ,KAAK,MAAM,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE;AACzF,YAAY,qCAAqC,CAAC,UAAU,EAAE,cAAc,EAAE,OAAO,CAAC;AACtF,QAAQ;AACR,QAAQ,KAAK,MAAM,YAAY,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE;AACtE,YAAY,yBAAyB,CAAC,YAAY,EAAE,OAAO,CAAC;AAC5D,QAAQ;AACR,IAAI,CAAC,CAAC;AACN;AACA,IAAI,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;AACvC,QAAQ,UAAU,CAAC,WAAW,GAAG,KAAK;AACtC,QAAQ,UAAU,CAAC,gBAAgB,GAAG,KAAK;AAC3C,QAAQ,MAAM,eAAe,GAAG,IAAI,KAAK,CAAC,wBAAwB,CAAC;AACnE,QAAQ,KAAK,MAAM,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE;AACzF,YAAY,qCAAqC,CAAC,UAAU,EAAE,cAAc,EAAE,eAAe,CAAC;AAC9F,QAAQ;AACR,QAAQ,IAAI,UAAU,CAAC,iBAAiB,EAAE;AAC1C,YAAY,aAAa,CAAC,UAAU,CAAC,iBAAiB,CAAC;AACvD,YAAY,UAAU,CAAC,iBAAiB,GAAG,IAAI;AAC/C,QAAQ;AACR;AACA,QAAQ,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,UAAU,CAAC,eAAe,EAAE;AAChE,YAAY,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;AACvC,YAAY,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC;AAC3C,QAAQ;AACR,QAAQ,UAAU,CAAC,eAAe,CAAC,KAAK,EAAE;AAC1C,IAAI,CAAC,CAAC;AACN,IAAI,OAAO,UAAU;AACrB;AACA,SAAS,mBAAmB,CAAC,UAAU,EAAE,OAAO,EAAE;AAClD,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9B,IAAI,QAAQ,OAAO,CAAC,IAAI;AACxB,QAAQ,KAAK,eAAe,EAAE;AAC9B,YAAY,UAAU,CAAC,gBAAgB,GAAG,KAAK;AAC/C,YAAY,UAAU,CAAC,cAAc,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC,mBAAmB,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;AAC7K,YAAY,UAAU,CAAC,aAAa,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,UAAU,CAAC,mBAAmB,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,SAAS,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;AAC3K;AACA,YAAY,UAAU,CAAC,YAAY,GAAG,CAAC,EAAE,GAAG,OAAO,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;AACvG,YAAY,mBAAmB,CAAC,UAAU,CAAC;AAC3C,YAAY;AACZ,QAAQ;AACR,QAAQ,KAAK,YAAY,EAAE;AAC3B,YAAY,MAAM,YAAY,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC;AACrF,YAAY,IAAI,YAAY,EAAE;AAC9B,gBAAgB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO;AACpD;AACA;AACA;AACA,gBAAgB,IAAI,OAAO,EAAE;AAC7B,oBAAoB,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,KAAK,SAAS;AAC3E,oBAAoB,IAAI,YAAY,CAAC,YAAY,KAAK,OAAO,CAAC,mBAAmB,EAAE;AACnF,wBAAwB,IAAI,YAAY,CAAC,KAAK,EAAE;AAChD,4BAA4B,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC;AACzM,4BAA4B,qBAAqB,CAAC,QAAQ,EAAE,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC;AACrG,wBAAwB;AACxB,wBAAwB,YAAY,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI;AAC5D,wBAAwB,YAAY,CAAC,YAAY,IAAI,CAAC;AACtD,wBAAwB,IAAI,WAAW,EAAE;AACzC,4BAA4B,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS;AAC1E,iCAAiC,MAAM,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAChG,4BAA4B,qBAAqB,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC;AAC1E,wBAAwB;AACxB,6BAA6B;AAC7B;AACA;AACA;AACA,4BAA4B,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC;AACvE,wBAAwB;AACxB,oBAAoB;AACpB,yBAAyB,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,IAAI,YAAY,CAAC,QAAQ,KAAK,SAAS,EAAE;AAChG;AACA;AACA;AACA;AACA,wBAAwB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS;AACtE,6BAA6B,MAAM,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC5F,wBAAwB,qBAAqB,CAAC,SAAS,EAAE,YAAY,CAAC,QAAQ,CAAC;AAC/E,oBAAoB;AACpB,oBAAoB,0BAA0B,CAAC,YAAY,CAAC;AAC5D,gBAAgB;AAChB,qBAAqB,IAAI,YAAY,CAAC,QAAQ,KAAK,SAAS,EAAE;AAC9D,oBAAoB,IAAI,YAAY,CAAC,KAAK,EAAE;AAC5C,wBAAwB,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC;AACrM,wBAAwB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC;AACjG,oBAAoB;AACpB,oBAAoB,YAAY,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI;AACxD,oBAAoB,YAAY,CAAC,YAAY,IAAI,CAAC;AAClD,oBAAoB,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC;AAC/D,gBAAgB;AAChB,YAAY;AACZ;AACA,YAAY,MAAM,OAAO,GAAG,UAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC;AACvF,YAAY,IAAI,OAAO,EAAE;AACzB,gBAAgB,sCAAsC,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC;AAC1F,YAAY;AACZ,YAAY;AACZ,QAAQ;AACR,QAAQ,KAAK,cAAc,EAAE;AAC7B;AACA,YAAY,MAAM,OAAO,GAAG,UAAU,CAAC,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC;AACzF,YAAY,IAAI,OAAO,EAAE;AACzB,gBAAgB,OAAO,CAAC,OAAO,EAAE;AACjC,gBAAgB,UAAU,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;AAChF,YAAY;AACZ,YAAY;AACZ,QAAQ;AACR,QAAQ,KAAK,MAAM,EAAE;AACrB,YAAY,MAAM,YAAY,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC;AACrF,YAAY,IAAI,YAAY,EAAE;AAC9B;AACA,gBAAgB,IAAI,YAAY,CAAC,KAAK,EAAE;AACxC,oBAAoB,MAAM,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC;AACjM,oBAAoB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,IAAI,CAAC;AAC7F,gBAAgB;AAChB;AACA,gBAAgB,YAAY,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI;AACpD,gBAAgB,YAAY,CAAC,YAAY,IAAI,CAAC;AAC9C;AACA,gBAAgB,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC;AAC3D;AACA;AACA;AACA;AACA,gBAAgB,IAAI,YAAY,CAAC,OAAO,EAAE;AAC1C,oBAAoB,0BAA0B,CAAC,YAAY,CAAC;AAC5D,gBAAgB;AAChB,YAAY;AACZ;AACA;AACA;AACA,YAAY,sCAAsC,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,CAAC;AACtF,YAAY;AACZ,QAAQ;AACR,QAAQ,KAAK,UAAU,EAAE;AACzB,YAAY,MAAM,UAAU,GAAG,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;AAChF,YAAY,IAAI,UAAU,EAAE;AAC5B,gBAAgB,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;AACpE,gBAAgB,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;AAC9C,gBAAgB,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE;AAC3C,oBAAoB,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AAChG,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;AACpD,gBAAgB;AAChB,YAAY;AACZ,YAAY;AACZ,QAAQ;AACR,QAAQ,KAAK,aAAa,EAAE;AAC5B,YAAY,MAAM,UAAU,GAAG,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;AAChF,YAAY,IAAI,UAAU,EAAE;AAC5B,gBAAgB,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;AACpE,gBAAgB,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;AAC9C,gBAAgB,IAAI,OAAO,CAAC,UAAU,IAAI,GAAG,EAAE;AAC/C,oBAAoB,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,KAAK,CAAC,uBAAuB,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AACzK,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;AACpD,gBAAgB;AAChB,YAAY;AACZ,YAAY;AACZ,QAAQ;AACR,QAAQ,KAAK,OAAO,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC;AACjF;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,IAAI,UAAU,CAAC,gBAAgB,IAAI,UAAU,CAAC,gBAAgB,IAAI,CAAC,UAAU,CAAC,iBAAiB,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;AACtI,gBAAgB,KAAK,8BAA8B,CAAC,UAAU,CAAC;AAC/D,YAAY;AACZ;AACA;AACA;AACA;AACA;AACA,YAAY,MAAM,YAAY,GAAG,MAAM;AACvC,gBAAgB,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AAC5E,gBAAgB,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI;AACvC,gBAAgB,IAAI,OAAO,CAAC,SAAS;AACrC,oBAAoB,GAAG,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS;AACrD,gBAAgB,IAAI,OAAO,CAAC,cAAc;AAC1C,oBAAoB,GAAG,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc;AAC/D;AACA;AACA;AACA,gBAAgB,MAAM,WAAW,GAAG,OAAO,CAAC;AAC5C,sBAAsB,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO;AAChD,sBAAsB;AACtB,wBAAwB,IAAI,EAAE,OAAO,CAAC,IAAI;AAC1C,wBAAwB,OAAO,EAAE,OAAO,CAAC,OAAO;AAChD,wBAAwB,MAAM,EAAE,OAAO,CAAC,MAAM;AAC9C,wBAAwB,SAAS,EAAE,OAAO,CAAC,SAAS;AACpD,wBAAwB,OAAO,EAAE,OAAO,CAAC,OAAO;AAChD,qBAAqB;AACrB,gBAAgB,MAAM,OAAO,GAAG,aAAa,CAAC,WAAW,CAAC;AAC1D,gBAAgB,IAAI,OAAO,EAAE;AAC7B,oBAAoB,GAAG,CAAC,OAAO,GAAG,OAAO;AACzC,oBAAoB,GAAG,CAAC,gBAAgB,GAAG,IAAI;AAC/C,oBAAoB,oBAAoB,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC;AACnE,gBAAgB;AAChB,gBAAgB,OAAO,GAAG;AAC1B,YAAY,CAAC;AACb,YAAY,MAAM,OAAO,GAAG,YAAY,EAAE;AAC1C;AACA,YAAY,IAAI,OAAO,CAAC,SAAS,EAAE;AACnC,gBAAgB,MAAM,UAAU,GAAG,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC;AACpF,gBAAgB,IAAI,UAAU,EAAE;AAChC,oBAAoB,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;AACxE,oBAAoB,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC;AAClD,oBAAoB,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC;AAC9C,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,OAAO,CAAC,cAAc,EAAE;AACxC;AACA,gBAAgB,MAAM,OAAO,GAAG,UAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC;AAC3F,gBAAgB,IAAI,OAAO,EAAE;AAC7B,oBAAoB,qCAAqC,CAAC,UAAU,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,CAAC;AACtG,gBAAgB;AAChB;AACA,gBAAgB,MAAM,YAAY,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC;AACzF,gBAAgB,IAAI,YAAY,EAAE;AAClC,oBAAoB,oBAAoB,CAAC,YAAY,EAAE,OAAO,CAAC;AAC/D,oBAAoB,yBAAyB,CAAC,YAAY,EAAE,OAAO,CAAC;AACpE,gBAAgB;AAChB,YAAY;AACZ,YAAY;AACZ,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,GAAG,EAAE;AACjC,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;AAClB,IAAI,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAC7D,QAAQ,OAAO,GAAG;AAClB,IAAI,IAAI,IAAI,IAAI,GAAG;AACnB,QAAQ,OAAO,GAAG;AAClB,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,GAAG,CAAC,YAAY;AAC/L,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AACzD,QAAQ,OAAO,GAAG;AAClB,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;AAC9B,IAAI,IAAI,CAAC,IAAI;AACb,QAAQ,OAAO,GAAG;AAClB,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,wBAAwB,CAAC,IAAI,EAAE;AACxC,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAC3B,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC;AAC3C,IAAI,OAAO,kBAAkB,CAAC,IAAI,CAAC;AACnC;AACA,SAAS,qBAAqB,CAAC,SAAS,EAAE,IAAI,EAAE;AAChD,IAAI,IAAI,EAAE;AACV;AACA,IAAI,MAAM,SAAS,GAAG,wBAAwB,CAAC,IAAI,CAAC;AACpD,IAAI,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AACtC,QAAQ,IAAI;AACZ,YAAY,CAAC,EAAE,GAAG,QAAQ,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;AACpG,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,KAAK,CAAC;AAC3E,QAAQ;AACR,IAAI;AACJ;AACA,SAAS,eAAe,CAAC,YAAY,EAAE,IAAI,EAAE;AAC7C;AACA;AACA,IAAI,qBAAqB,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC;AAC/D;AACA,SAAS,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE;AAC9C,IAAI,IAAI,SAAS,GAAG,KAAK;AACzB,IAAI,IAAI;AACR,QAAQ,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO;AACxC,QAAQ,IAAI,CAAC,OAAO;AACpB,YAAY,OAAO,KAAK;AACxB,QAAQ,OAAO,CAAC,KAAK,CAAC;AACtB,QAAQ,SAAS,GAAG,IAAI;AACxB,IAAI;AACJ,IAAI,OAAO,aAAa,EAAE;AAC1B,QAAQ,OAAO,CAAC,KAAK,CAAC,+CAA+C,EAAE,aAAa,CAAC;AACrF,IAAI;AACJ,IAAI,OAAO,SAAS;AACpB;AACA,SAAS,oBAAoB,CAAC,YAAY,EAAE,KAAK,EAAE;AACnD,IAAI,IAAI,SAAS,GAAG,KAAK;AACzB,IAAI,MAAM,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE;AACpD,IAAI,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;AACtC,QAAQ,SAAS,GAAG,mBAAmB,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,SAAS;AACrE,IAAI;AACJ,IAAI,IAAI,SAAS;AACjB,QAAQ,KAAK,CAAC,2BAA2B,GAAG,IAAI;AAChD,IAAI,OAAO,SAAS;AACpB;AACA;AACA,MAAM,mBAAmB,GAAG,CAAC;AAC7B,MAAM,qBAAqB,GAAG,CAAC;AAC/B,SAAS,aAAa,CAAC,UAAU,EAAE,YAAY,EAAE;AACjD,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,UAAU,KAAK,mBAAmB,EAAE;AAC5E,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,IAAI,EAAE,WAAW;AACzB,QAAQ,cAAc,EAAE,YAAY,CAAC,cAAc;AACnD,QAAQ,IAAI,EAAE,YAAY,CAAC,IAAI;AAC/B,QAAQ,MAAM,EAAE,YAAY,CAAC,MAAM;AACnC,QAAQ,IAAI,EAAE,YAAY,CAAC,IAAI;AAC/B,QAAQ,MAAM,EAAE,YAAY,CAAC,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,SAAS;AAC/E,QAAQ,eAAe,EAAE,YAAY,CAAC,eAAe;AACrD,QAAQ,KAAK,EAAE,YAAY,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG;AAC9E,cAAc,YAAY,CAAC;AAC3B,cAAc,SAAS;AACvB,QAAQ,KAAK,EAAE,YAAY,CAAC,KAAK;AACjC,QAAQ,MAAM,EAAE,YAAY,CAAC,MAAM;AACnC,KAAK;AACL,IAAI,IAAI;AACR,QAAQ,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACnD,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;AACxE,IAAI;AACJ;AACA,SAAS,sCAAsC,CAAC,UAAU,EAAE,cAAc,EAAE;AAC5E,IAAI,MAAM,OAAO,GAAG,UAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,cAAc,CAAC;AACvE,IAAI,IAAI,CAAC,OAAO;AAChB,QAAQ,OAAO,KAAK;AACpB,IAAI,UAAU,CAAC,oBAAoB,CAAC,MAAM,CAAC,cAAc,CAAC;AAC1D,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;AACvB,QAAQ,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;AACnC,QAAQ,OAAO,CAAC,KAAK,GAAG,IAAI;AAC5B,IAAI;AACJ,IAAI,OAAO,CAAC,OAAO,EAAE;AACrB,IAAI,OAAO,IAAI;AACf;AACA,SAAS,qCAAqC,CAAC,UAAU,EAAE,cAAc,EAAE,KAAK,EAAE;AAClF,IAAI,MAAM,OAAO,GAAG,UAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,cAAc,CAAC;AACvE,IAAI,IAAI,CAAC,OAAO;AAChB,QAAQ,OAAO,KAAK;AACpB,IAAI,UAAU,CAAC,oBAAoB,CAAC,MAAM,CAAC,cAAc,CAAC;AAC1D,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE;AACvB,QAAQ,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;AACnC,QAAQ,OAAO,CAAC,KAAK,GAAG,IAAI;AAC5B,IAAI;AACJ,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACzB,IAAI,OAAO,IAAI;AACf;AACA,SAAS,kCAAkC,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE;AAC/E,IAAI,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM;AACrC,QAAQ,IAAI,UAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,OAAO;AACxF,YAAY;AACZ,QAAQ,OAAO,CAAC,KAAK,GAAG,IAAI;AAC5B,QAAQ,MAAM,eAAe,GAAG,UAAU,CAAC,EAAE,KAAK,OAAO,CAAC,MAAM;AAChE,YAAY,UAAU,CAAC,gBAAgB,KAAK,OAAO,CAAC,gBAAgB;AACpE,YAAY,UAAU,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc;AAChE,YAAY,UAAU,CAAC,aAAa,KAAK,OAAO,CAAC,aAAa;AAC9D,YAAY,UAAU,CAAC,WAAW;AAClC,YAAY,CAAC,UAAU,CAAC,gBAAgB;AACxC,YAAY,OAAO,CAAC,MAAM,CAAC,UAAU,KAAK,mBAAmB;AAC7D,QAAQ,MAAM,gBAAgB,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,YAAY;AAC3G,QAAQ,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,eAAe,IAAI,gBAAgB,EAAE;AACvE,YAAY,OAAO,CAAC,SAAS,GAAG,IAAI;AACpC;AACA;AACA,YAAY,kCAAkC,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC;AACjF,YAAY,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC;AACnD,YAAY;AACZ,QAAQ;AACR,QAAQ,qCAAqC,CAAC,UAAU,EAAE,YAAY,CAAC,cAAc,EAAE,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACzH,IAAI,CAAC,EAAE,+BAA+B,CAAC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,6BAA6B,CAAC,UAAU,EAAE,YAAY,EAAE;AACjE,IAAI,MAAM,OAAO,GAAG,UAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC;AACpF,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE;AAChC,IAAI,IAAI,OAAO,IAAI,MAAM,IAAI,MAAM,CAAC,UAAU,KAAK,mBAAmB,EAAE;AACxE,QAAQ,IAAI,OAAO,CAAC,KAAK,EAAE;AAC3B,YAAY,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;AACvC,YAAY,OAAO,CAAC,KAAK,GAAG,IAAI;AAChC,QAAQ;AACR,QAAQ,OAAO,CAAC,MAAM,GAAG,MAAM;AAC/B,QAAQ,OAAO,CAAC,gBAAgB,GAAG,UAAU,CAAC,gBAAgB;AAC9D,QAAQ,OAAO,CAAC,cAAc,GAAG,UAAU,CAAC,cAAc;AAC1D,QAAQ,OAAO,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa;AACxD;AACA;AACA,QAAQ,kCAAkC,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC;AAC7E,IAAI;AACJ,IAAI,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kCAAkC,CAAC,UAAU,EAAE,YAAY,EAAE;AACtE,IAAI,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE;AAChC,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC;AACnF,QAAQ;AACR,IAAI,IAAI,OAAO;AACf,IAAI,IAAI,MAAM;AACd,IAAI,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,aAAa,KAAK;AACnE,QAAQ,OAAO,GAAG,cAAc;AAChC,QAAQ,MAAM,GAAG,aAAa;AAC9B,IAAI,CAAC,CAAC;AACN,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,OAAO;AACf,QAAQ,MAAM;AACd,QAAQ,KAAK,EAAE,IAAI;AACnB,QAAQ,SAAS,EAAE,KAAK;AACxB,QAAQ,MAAM;AACd,QAAQ,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;AACrD,QAAQ,cAAc,EAAE,UAAU,CAAC,cAAc;AACjD,QAAQ,aAAa,EAAE,UAAU,CAAC,aAAa;AAC/C,KAAK;AACL,IAAI,UAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC;AAC7E,IAAI,KAAK,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK;AAClC,QAAQ,IAAI,KAAK,CAAC,2BAA2B;AAC7C,YAAY;AACZ,QAAQ,IAAI,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,YAAY,CAAC,cAAc,CAAC,KAAK,YAAY;AACtF,YAAY;AACZ;AACA;AACA;AACA,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,sBAAsB,EAAE;AACtD,YAAY,MAAM,SAAS,GAAG,oBAAoB,CAAC,YAAY,EAAE,KAAK,CAAC;AACvE,YAAY,IAAI,CAAC,SAAS,EAAE;AAC5B,gBAAgB,OAAO,CAAC,IAAI,CAAC,uDAAuD,EAAE,YAAY,CAAC,IAAI,CAAC;AACxG,YAAY;AACZ,QAAQ;AACR,IAAI,CAAC,CAAC;AACN;AACA,SAAS,0BAA0B,CAAC,YAAY,EAAE;AAClD,IAAI,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO;AACxC,IAAI,IAAI,CAAC,OAAO;AAChB,QAAQ;AACR,IAAI,YAAY,CAAC,OAAO,GAAG,IAAI;AAC/B,IAAI,IAAI,OAAO,CAAC,KAAK;AACrB,QAAQ,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;AACnC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE;AAC7B,IAAI,OAAO,CAAC,OAAO,EAAE;AACrB;AACA,SAAS,yBAAyB,CAAC,YAAY,EAAE,KAAK,EAAE;AACxD,IAAI,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO;AACxC,IAAI,IAAI,CAAC,OAAO;AAChB,QAAQ;AACR,IAAI,YAAY,CAAC,OAAO,GAAG,IAAI;AAC/B,IAAI,IAAI,OAAO,CAAC,KAAK;AACrB,QAAQ,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC;AACnC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE;AAC7B,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gCAAgC,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE;AAC9E,IAAI,IAAI,OAAO,GAAG,YAAY,CAAC,OAAO;AACtC,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,QAAQ,IAAI,OAAO;AACnB,QAAQ,IAAI,MAAM;AAClB,QAAQ,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,aAAa,KAAK;AACvE,YAAY,OAAO,GAAG,cAAc;AACpC,YAAY,MAAM,GAAG,aAAa;AAClC,QAAQ,CAAC,CAAC;AACV,QAAQ,OAAO,GAAG;AAClB,YAAY,OAAO;AACnB,YAAY,OAAO;AACnB,YAAY,MAAM;AAClB,YAAY,KAAK,EAAE,IAAI;AACvB,YAAY,SAAS,EAAE,IAAI,GAAG,EAAE;AAChC,YAAY,mBAAmB,EAAE,YAAY,CAAC,YAAY;AAC1D,SAAS;AACT,QAAQ,YAAY,CAAC,OAAO,GAAG,OAAO;AACtC,QAAQ,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM;AACzC,YAAY,IAAI,YAAY,CAAC,OAAO,KAAK,OAAO;AAChD,gBAAgB;AAChB,YAAY,yBAAyB,CAAC,YAAY,EAAE,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACtF,QAAQ,CAAC,EAAE,KAAK,CAAC;AACjB,IAAI;AACJ;AACA;AACA,IAAI,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,UAAU,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;AAChE,QAAQ,aAAa,CAAC,UAAU,EAAE,YAAY,CAAC;AAC/C,IAAI;AACJ,IAAI,OAAO,OAAO,CAAC,OAAO;AAC1B;AACA,SAAS,eAAe,CAAC,UAAU,EAAE,cAAc,EAAE;AACrD,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,UAAU,KAAK,mBAAmB,EAAE;AAC5E,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,OAAO,GAAG;AACpB,QAAQ,IAAI,EAAE,aAAa;AAC3B,QAAQ,cAAc;AACtB,KAAK;AACL,IAAI,IAAI;AACR,QAAQ,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACnD,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC;AAC1E,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,WAAW,CAAC,IAAI,EAAE,mBAAmB,EAAE,aAAa,EAAE;AAC5E,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC9B,IAAI,MAAM,SAAS,GAAG,mBAAmB,CAAC,UAAU;AACpD;AACA;AACA,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM,SAAS,EAAE;AACpJ,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;AACtE;AACA;AACA;AACA,IAAI,MAAM,SAAS,GAAG,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,SAAS,MAAM,IAAI;AAC1G,IAAI,MAAM,MAAM,GAAG,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,OAAO;AAC3F,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS;AAC3D,UAAU,SAAS;AACnB;AACA,IAAI,MAAM,cAAc,GAAG,mBAAmB,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,iBAAiB,GAAG,CAAC,CAAC,SAAS,KAAK,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC;AAC9H,UAAU,YAAY,qBAAqB,CAAC,MAAM,SAAS,CAAC,eAAe,EAAE,CAAC,IAAI;AAClF,UAAU,SAAS;AACnB,IAAI,MAAM,YAAY,GAAG,MAAM,uBAAuB,CAAC,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC;AAC7G,IAAI,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG;AACrC,IAAI,MAAM,aAAa,GAAG,YAAY,CAAC,KAAK;AAC5C,IAAI,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,KAAK,KAAK,IAAI,IAAI,YAAY,CAAC,SAAS;AAC7F;AACA;AACA,IAAI,MAAM,YAAY,GAAG,iBAAiB,GAAG,QAAQ,GAAG,SAAS;AACjE,IAAI,MAAM,cAAc,GAAG;AAC3B,WAAW,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,MAAM,GAAG,aAAa,GAAG,QAAQ;AACxF,UAAU,SAAS;AACnB,IAAI,MAAM,QAAQ,GAAG;AACrB,UAAU,WAAW,CAAC,cAAc,EAAE,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,CAAC,MAAM,EAAE,QAAQ;AACxL,UAAU,IAAI;AACd;AACA;AACA;AACA;AACA,IAAI,IAAI,UAAU;AAClB,IAAI,IAAI,iBAAiB;AACzB,IAAI,IAAI;AACR,QAAQ,MAAM,WAAW,GAAG,MAAM,iBAAiB,CAAC,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,CAAC;AAC5J,QAAQ,UAAU,GAAG,WAAW,CAAC,UAAU;AAC3C,QAAQ,iBAAiB,GAAG,WAAW,CAAC,OAAO;AAC/C,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7E,QAAQ,IAAI,mBAAmB,CAAC,OAAO,EAAE;AACzC,YAAY,mBAAmB,CAAC,OAAO,CAAC,GAAG,CAAC;AAC5C,YAAY,OAAO,YAAY,EAAE,CAAC;AAClC,QAAQ;AACR,QAAQ,MAAM,GAAG;AACjB,IAAI;AACJ,IAAI,MAAM,WAAW,GAAG,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,EAAE,aAAa,CAAC,GAAG,SAAS;AAC7F;AACA,IAAI,IAAI,oBAAoB;AAC5B,IAAI,IAAI,OAAO,GAAG,EAAE;AACpB,IAAI,IAAI;AACR;AACA;AACA;AACA;AACA,QAAQ,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;AACjC,YAAY,CAAC,EAAE,GAAG,mBAAmB,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI;AAClF,YAAY,CAAC,EAAE,GAAG,mBAAmB,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI;AACnF,YAAY,CAAC,EAAE,GAAG,mBAAmB,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI;AACjF,SAAS,CAAC;AACV,QAAQ,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE;AAC7D;AACA;AACA;AACA;AACA,YAAY,IAAI,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,GAAG,CAAC,aAAa,KAAK,aAAa,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,MAAM,KAAK,mBAAmB,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,OAAO,IAAI,GAAG,CAAC,eAAe,MAAM,CAAC,EAAE,GAAG,mBAAmB,CAAC,eAAe,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,GAAG,CAAC,KAAK,KAAK,mBAAmB,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,KAAK,mBAAmB,CAAC,MAAM,EAAE;AAChY,gBAAgB,oBAAoB,GAAG,GAAG;AAC1C,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,iBAAiB,EAAE;AAC3B,QAAQ,MAAM,KAAK;AACnB,IAAI;AACJ,IAAI,IAAI,oBAAoB,EAAE;AAC9B,QAAQ,IAAI,UAAU,GAAG,SAAS;AAClC,QAAQ,IAAI,YAAY;AACxB,QAAQ,IAAI,oBAAoB,EAAE;AAClC;AACA;AACA;AACA,YAAY,YAAY,GAAG,mBAAmB,CAAC,MAAM;AACrD,YAAY,UAAU,GAAG,oBAAoB,CAAC,QAAQ,KAAK;AAC3D,kBAAkB,oBAAoB,CAAC;AACvC,kBAAkB,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,SAAS,GAAG;AACtE,sBAAsB,WAAW,CAAC;AAClC,sBAAsB,SAAS;AAC/B,QAAQ;AACR,QAAQ,IAAI,oBAAoB,EAAE;AAClC,YAAY,oBAAoB,CAAC,KAAK,GAAG,IAAI;AAC7C,QAAQ;AACR;AACA,QAAQ,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,mBAAmB,CAAC;AAChE,QAAQ,IAAI,cAAc,GAAG,IAAI;AACjC,QAAQ,IAAI,oBAAoB,EAAE;AAClC;AACA;AACA;AACA,YAAY,IAAI,UAAU,KAAK,SAAS,IAAI,YAAY,EAAE;AAC1D,gBAAgB,UAAU,CAAC,MAAM;AACjC,oBAAoB,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAC;AAClI,gBAAgB,CAAC,EAAE,CAAC,CAAC;AACrB,YAAY;AACZ,QAAQ;AACR,aAAa;AACb;AACA;AACA;AACA,YAAY,cAAc,GAAG,gCAAgC,CAAC,UAAU,EAAE,oBAAoB,EAAE,mBAAmB,CAAC;AACpH,QAAQ;AACR,QAAQ,iBAAiB,EAAE;AAC3B,QAAQ,IAAI,cAAc,EAAE;AAC5B,YAAY,IAAI;AAChB,gBAAgB,MAAM,cAAc;AACpC,YAAY;AACZ,YAAY,OAAO,KAAK,EAAE;AAC1B,gBAAgB,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrF,gBAAgB,IAAI,gBAAgB,GAAG,KAAK;AAC5C,gBAAgB,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE;AACtD,oBAAoB,gBAAgB,GAAG,mBAAmB,CAAC,mBAAmB,EAAE,GAAG,CAAC;AACpF,gBAAgB;AAChB,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;AAClD,oBAAoB,MAAM,8BAA8B,CAAC,UAAU,EAAE,oBAAoB,CAAC,cAAc,EAAE,mBAAmB,CAAC;AAC9H,oBAAoB,MAAM,GAAG;AAC7B,gBAAgB;AAChB,gBAAgB,IAAI,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,gBAAgB,EAAE;AAC3E,oBAAoB,OAAO,CAAC,IAAI,CAAC,sEAAsE,EAAE,KAAK,CAAC;AAC/G,gBAAgB;AAChB,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,YAAY;AAC3B,YAAY,MAAM,8BAA8B,CAAC,UAAU,EAAE,oBAAoB,CAAC,cAAc,EAAE,mBAAmB,CAAC;AACtH,QAAQ,CAAC;AACT,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,IAAI,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,SAAS,GAAG,SAAS,IAAI,mBAAmB,CAAC,MAAM,EAAE;AACrG,QAAQ,UAAU,CAAC,MAAM;AACzB,YAAY,IAAI,EAAE;AAClB,YAAY,CAAC,EAAE,GAAG,mBAAmB,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,mBAAmB,EAAE,wBAAwB,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3J,QAAQ,CAAC,EAAE,CAAC,CAAC;AACb,IAAI;AACJ;AACA,IAAI,MAAM,cAAc,GAAG,sBAAsB,EAAE;AACnD,IAAI,IAAI,YAAY;AACpB,IAAI,IAAI;AACR,QAAQ,YAAY,GAAG;AACvB,YAAY,cAAc;AAC1B,YAAY,IAAI,EAAE,cAAc;AAChC,YAAY,MAAM,EAAE,mBAAmB,CAAC,MAAM;AAC9C,YAAY,IAAI,EAAE,mBAAmB,CAAC,IAAI;AAC1C,YAAY,MAAM,EAAE,mBAAmB,CAAC,MAAM;AAC9C,YAAY,KAAK,EAAE,mBAAmB,CAAC,KAAK;AAC5C,YAAY,KAAK,EAAE,mBAAmB,CAAC,KAAK;AAC5C,YAAY,MAAM,EAAE,mBAAmB,CAAC,MAAM;AAC9C,YAAY,eAAe,EAAE,CAAC,EAAE,GAAG,mBAAmB,CAAC,eAAe,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,KAAK;AAC9G,YAAY,SAAS,EAAE,CAAC,mBAAmB,CAAC;AAC5C,YAAY,QAAQ,EAAE,SAAS;AAC/B,YAAY,YAAY,EAAE,CAAC;AAC3B,YAAY,OAAO,EAAE,IAAI;AACzB,YAAY,KAAK,EAAE,oBAAoB;AACvC,YAAY,QAAQ;AACpB,YAAY,aAAa;AACzB,YAAY,OAAO;AACnB,SAAS;AACT,QAAQ,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,EAAE,YAAY,CAAC;AAClE,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,iBAAiB,EAAE;AAC3B,QAAQ,MAAM,KAAK;AACnB,IAAI;AACJ,IAAI,iBAAiB,EAAE;AACvB;AACA;AACA;AACA,IAAI,MAAM,mBAAmB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACjE,QAAQ,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE;AACpC,QAAQ,IAAI,CAAC,MAAM,EAAE;AACrB,YAAY,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;AACvD,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,OAAO,GAAG;AACxB,YAAY,OAAO;AACnB,YAAY,MAAM;AAClB,YAAY,KAAK,EAAE,IAAI;AACvB,YAAY,SAAS,EAAE,KAAK;AAC5B,YAAY,MAAM;AAClB,YAAY,gBAAgB,EAAE,UAAU,CAAC,gBAAgB;AACzD,YAAY,cAAc,EAAE,UAAU,CAAC,cAAc;AACrD,YAAY,aAAa,EAAE,UAAU,CAAC,aAAa;AACnD,SAAS;AACT,QAAQ,UAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC;AACpE;AACA;AACA;AACA,QAAQ,kCAAkC,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC;AAC7E,IAAI,CAAC,CAAC;AACN,IAAI,IAAI,UAAU,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;AAChE,QAAQ,6BAA6B,CAAC,UAAU,EAAE,YAAY,CAAC;AAC/D,IAAI;AACJ,IAAI,IAAI;AACR,QAAQ,MAAM,mBAAmB;AACjC,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7E,QAAQ,IAAI,gBAAgB,GAAG,KAAK;AACpC,QAAQ,IAAI,CAAC,GAAG,CAAC,2BAA2B,EAAE;AAC9C;AACA;AACA;AACA,YAAY,gBAAgB,GAAG,mBAAmB,CAAC,mBAAmB,EAAE,GAAG,CAAC;AAC5E,QAAQ;AACR,QAAQ,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE;AAC1C,YAAY,qCAAqC,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,CAAC;AAClF;AACA;AACA;AACA;AACA,YAAY,MAAM,8BAA8B,CAAC,UAAU,EAAE,cAAc,EAAE,mBAAmB,CAAC;AACjG,YAAY,MAAM,GAAG;AACrB,QAAQ;AACR,QAAQ,IAAI,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,gBAAgB,EAAE;AACnE,YAAY,OAAO,CAAC,IAAI,CAAC,2EAA2E,EAAE,KAAK,CAAC;AAC5G,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,OAAO,YAAY;AACvB,QAAQ,MAAM,8BAA8B,CAAC,UAAU,EAAE,cAAc,EAAE,mBAAmB,CAAC;AAC7F,IAAI,CAAC;AACL;AACA,eAAe,8BAA8B,CAAC,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE;AACpF,IAAI,IAAI,EAAE;AACV,IAAI,MAAM,YAAY,GAAG,UAAU,CAAC,aAAa,CAAC,GAAG,CAAC,cAAc,CAAC;AACrE,IAAI,IAAI,CAAC,YAAY,EAAE;AACvB,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,YAAY,CAAC,SAAS,GAAG,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,QAAQ,CAAC;AACjF,IAAI,CAAC,EAAE,GAAG,YAAY,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC;AAClG;AACA,IAAI,IAAI,YAAY,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3C,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC;AACnD,IAAI,qCAAqC,CAAC,UAAU,EAAE,cAAc,EAAE,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC7G,IAAI,IAAI,UAAU,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;AAChE;AACA,QAAQ,MAAM,kBAAkB,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACpE,YAAY,UAAU,CAAC,sBAAsB,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACtF;AACA,YAAY,UAAU,CAAC,MAAM;AAC7B,gBAAgB,IAAI,UAAU,CAAC,sBAAsB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;AAC3E,oBAAoB,UAAU,CAAC,sBAAsB,CAAC,MAAM,CAAC,cAAc,CAAC;AAC5E,oBAAoB,OAAO,EAAE,CAAC;AAC9B,gBAAgB;AAChB,YAAY,CAAC,EAAE,IAAI,CAAC;AACpB,QAAQ,CAAC,CAAC;AACV,QAAQ,eAAe,CAAC,UAAU,EAAE,cAAc,CAAC;AACnD,QAAQ,MAAM,kBAAkB;AAChC,IAAI;AACJ;AACA;AACA,IAAI,6BAA6B,CAAC,UAAU,CAAC;AAC7C;AACA;AACA;AACA;AACO,eAAe,uBAAuB,GAAG;AAChD,IAAI,MAAM,aAAa,GAAG,EAAE;AAC5B,IAAI,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,WAAW,EAAE;AACnD,QAAQ,yBAAyB,CAAC,UAAU,CAAC;AAC7C,QAAQ,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,sBAAsB,CAAC;AAC5D,QAAQ,KAAK,MAAM,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE;AACzF,YAAY,qCAAqC,CAAC,UAAU,EAAE,cAAc,EAAE,UAAU,CAAC;AACzF,QAAQ;AACR,QAAQ,KAAK,MAAM,YAAY,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE;AACtE,YAAY,yBAAyB,CAAC,YAAY,EAAE,UAAU,CAAC;AAC/D,QAAQ;AACR,QAAQ,IAAI,UAAU,CAAC,iBAAiB,EAAE;AAC1C,YAAY,aAAa,CAAC,UAAU,CAAC,iBAAiB,CAAC;AACvD,YAAY,UAAU,CAAC,iBAAiB,GAAG,IAAI;AAC/C,QAAQ;AACR,QAAQ,IAAI,UAAU,CAAC,EAAE,EAAE;AAC3B,YAAY,MAAM,EAAE,GAAG,UAAU,CAAC,EAAE;AACpC,YAAY,UAAU,CAAC,EAAE,GAAG,IAAI;AAChC,YAAY,UAAU,CAAC,WAAW,GAAG,KAAK;AAC1C,YAAY,IAAI,EAAE,CAAC,UAAU,KAAK,qBAAqB,EAAE;AACzD,gBAAgB,aAAa,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AAC5D,oBAAoB,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM;AACvD,wBAAwB,OAAO,EAAE;AACjC,oBAAoB,CAAC,CAAC;AACtB,oBAAoB,EAAE,CAAC,KAAK,EAAE;AAC9B,gBAAgB,CAAC,CAAC,CAAC;AACnB,YAAY;AACZ,QAAQ;AACR,QAAQ,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC;AACjC,IAAI;AACJ,IAAI,sBAAsB,CAAC,KAAK,EAAE;AAClC,IAAI,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AACpC;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,IAAI,EAAE;AACnC,IAAI,IAAI,IAAI,EAAE;AACd,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;AAC1E;AACA;AACA;AACA,QAAQ,KAAK,MAAM,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,EAAE;AAChD,YAAY,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AACxC,YAAY,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,GAAG;AAChE,YAAY,IAAI,QAAQ,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE;AACrD,gBAAgB,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC;AACzC,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,SAAS;AACT,QAAQ,aAAa,CAAC,KAAK,EAAE;AAC7B,IAAI;AACJ;AACA;AACA;AACA;AACO,SAAS,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE;AAC9C,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;AACtE;AACA;AACA;AACA,IAAI,IAAI,QAAQ;AAChB,IAAI,IAAI,aAAa;AACrB,IAAI,KAAK,EAAE,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE;AAC1D,QAAQ,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE;AAC7D,YAAY,IAAI,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE;AACnF,gBAAgB,QAAQ,GAAG,GAAG,CAAC,QAAQ;AACvC,gBAAgB,aAAa,GAAG,GAAG,CAAC,aAAa;AACjD,gBAAgB,MAAM,KAAK;AAC3B,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,CAAC,QAAQ,EAAE;AACnB,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC;AACpG,IAAI,MAAM,WAAW,GAAG,qBAAqB,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,IAAI,aAAa,KAAK,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC;AAClI,IAAI,IAAI,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAC,SAAS,GAAG,SAAS,EAAE;AACvE,QAAQ,OAAO,WAAW,CAAC,IAAI;AAC/B,IAAI;AACJ,IAAI,OAAO,IAAI;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,sBAAsB,GAAG;AAC/C,IAAI,IAAI,mBAAmB,EAAE;AAC7B,QAAQ,OAAO,mBAAmB;AAClC,IAAI;AACJ,IAAI,mBAAmB,GAAG,sBAAsB,EAAE;AAClD,IAAI,IAAI;AACR,QAAQ,MAAM,mBAAmB;AACjC,IAAI;AACJ,YAAY;AACZ,QAAQ,mBAAmB,GAAG,IAAI;AAClC,IAAI;AACJ;AACA,eAAe,sBAAsB,GAAG;AACxC,IAAI,kBAAkB,GAAG,IAAI;AAC7B;AACA;AACA;AACA;AACA;AACA,IAAI,aAAa,CAAC,KAAK,EAAE;AACzB;AACA;AACA,IAAI,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE;AACnD,QAAQ,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE;AAC7D,YAAY,GAAG,CAAC,QAAQ,GAAG,SAAS;AACpC,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI;AACR,QAAQ,MAAM,EAAE,2BAA2B,EAAE,GAAG,MAAM,0DAAsB;AAC5E,QAAQ,2BAA2B,EAAE;AACrC,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,OAAO,CAAC,IAAI,CAAC,yDAAyD,EAAE,KAAK,CAAC;AACtF,IAAI;AACJ,IAAI,IAAI;AACR,QAAQ,MAAM,EAAE,iCAAiC,EAAE,GAAG,MAAM,oDAAO,8BAAkB,KAAC;AACtF,QAAQ,MAAM,iCAAiC,EAAE;AACjD,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,OAAO,CAAC,IAAI,CAAC,+DAA+D,EAAE,KAAK,CAAC;AAC5F,IAAI;AACJ,IAAI,KAAK,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,WAAW,EAAE;AACnD,QAAQ,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;AAC5B,YAAY;AACZ,QAAQ;AACR,QAAQ,yBAAyB,CAAC,UAAU,CAAC;AAC7C,QAAQ,MAAM,cAAc,GAAG,IAAI,KAAK,CAAC,4CAA4C,CAAC;AACtF,QAAQ,KAAK,MAAM,cAAc,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,EAAE;AACzF,YAAY,qCAAqC,CAAC,UAAU,EAAE,cAAc,EAAE,cAAc,CAAC;AAC7F,QAAQ;AACR,QAAQ,KAAK,MAAM,YAAY,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE;AACtE,YAAY,yBAAyB,CAAC,YAAY,EAAE,cAAc,CAAC;AACnE,QAAQ;AACR,QAAQ,KAAK,MAAM,GAAG,OAAO,CAAC,IAAI,UAAU,CAAC,sBAAsB,EAAE;AACrE,YAAY,OAAO,CAAC,OAAO,EAAE;AAC7B,QAAQ;AACR,QAAQ,UAAU,CAAC,sBAAsB,CAAC,KAAK,EAAE;AACjD;AACA,QAAQ,UAAU,CAAC,uBAAuB,GAAG,CAAC;AAC9C,QAAQ,UAAU,CAAC,WAAW,GAAG,IAAI;AACrC;AACA;AACA,QAAQ,IAAI;AACZ,YAAY,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE;AACrC,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC;AAC/D,QAAQ;AACR,IAAI;AACJ;AAsCA;AACA,MAAM,qBAAqB,GAAG,KAAK;AACnC,SAAS,iBAAiB,GAAG;AAC7B,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7E;AACA;AACA;AACA;AACO,SAAS,mBAAmB,GAAG;AACtC,IAAI,KAAK,MAAM,UAAU,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE;AACnD,QAAQ,IAAI,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,WAAW,IAAI,CAAC,UAAU,CAAC,gBAAgB,EAAE;AACrF,YAAY,OAAO,IAAI;AACvB,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA,MAAM,2BAA2B,GAAG,KAAK;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE;AAC1E,IAAI,IAAI,EAAE;AACV,IAAI,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7C,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,UAAU,KAAK,mBAAmB,IAAI,UAAU,CAAC,gBAAgB,EAAE;AAC1H,QAAQ,OAAO,IAAI,CAAC;AACpB,IAAI;AACJ,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,UAAU,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE;AAC5F,QAAQ,OAAO,IAAI,CAAC;AACpB,IAAI;AACJ,IAAI,IAAI,EAAE,MAAM,8BAA8B,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE;AAC1F,QAAQ,OAAO,IAAI,CAAC;AACpB,IAAI;AACJ,IAAI,MAAM,SAAS,GAAG,iBAAiB,EAAE;AACzC,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;AAC1E,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,2BAA2B,EAAE;AACpD,QAAQ,OAAO,IAAI,CAAC;AACpB,IAAI;AACJ,IAAI,IAAI,IAAI;AACZ,IAAI,IAAI;AACR,QAAQ,IAAI,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACtD,YAAY,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM;AAC3C,gBAAgB,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC;AAC5D,gBAAgB,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,6BAA6B,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5F,YAAY,CAAC,EAAE,qBAAqB,CAAC;AACrC,YAAY,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACjF,YAAY,IAAI;AAChB,gBAAgB,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;AACzC,YAAY;AACZ,YAAY,OAAO,CAAC,EAAE;AACtB,gBAAgB,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC;AAC5D,gBAAgB,YAAY,CAAC,KAAK,CAAC;AACnC,gBAAgB,MAAM,CAAC,CAAC,CAAC;AACzB,YAAY;AACZ,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf,QAAQ,OAAO,IAAI,CAAC;AACpB,IAAI;AACJ,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,MAAM,IAAI;AAC3E,QAAQ,OAAO,IAAI,CAAC;AACpB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC;AAC/E,QAAQ,OAAO,IAAI,CAAC,OAAO;AAC3B,IAAI,OAAO,IAAI,CAAC;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,QAAQ,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE;AACvE,IAAI,MAAM,OAAO,GAAG,oBAAoB,CAAC,aAAa,CAAC;AACvD,IAAI,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,KAAK;AAChE,IAAI,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/C,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,UAAU,KAAK,mBAAmB,IAAI,UAAU,CAAC,gBAAgB,EAAE;AAC1H,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;AACrE,IAAI,IAAI,CAAC,YAAY,EAAE;AACvB;AACA,QAAQ,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,aAAa;AACnE,YAAY,OAAO,KAAK;AACxB,IAAI;AACJ,SAAS,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE;AACtE;AACA;AACA,QAAQ,KAAK,yBAAyB,CAAC,UAAoB,CAAC;AAC5D,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,SAAS,IAAI,CAAC,0BAA0B,CAAC,UAAU,EAAE,YAAY,CAAC,EAAE;AACpE;AACA,QAAQ,KAAK,yBAAyB,CAAC,UAAoB,CAAC;AAC5D,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ,IAAI,IAAI;AACR,QAAQ,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;AACtE,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf,QAAQ,OAAO,KAAK;AACpB,IAAI;AACJ;AACA;AACA;AACA;AACA,MAAM,cAAc,GAAG,IAAI,OAAO,EAAE;AACpC,eAAe,yBAAyB,CAAC,UAAU,EAAE,QAAQ,EAAE;AAC/D,IAAI,IAAI;AACR,QAAQ,IAAI,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;AAC1C,YAAY;AACZ,QAAQ,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC;AACtC,QAAQ,IAAI;AACZ,YAAY,MAAM,sBAAsB,EAAE;AAC1C,QAAQ;AACR,gBAAgB;AAChB,YAAY,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC;AAC7C,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf;AACA,IAAI;AACJ;AAQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE;AAC/E,IAAI,MAAM,OAAO,GAAG,oBAAoB,CAAC,aAAa,CAAC;AACvD,IAAI,MAAM,OAAO,GAAG,OAAO,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,KAAK;AAChE,IAAI,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC;AAC/C,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,UAAU,KAAK,mBAAmB,IAAI,UAAU,CAAC,gBAAgB,EAAE;AAC1H,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ,IAAI,IAAI,EAAE,MAAM,8BAA8B,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE;AACvE,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ,IAAI,MAAM,SAAS,GAAG,iBAAiB,EAAE;AACzC,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC5C,QAAQ,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM;AACvC,YAAY,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC;AACxD,YAAY,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC,gCAAgC,EAAE,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3F,QAAQ,CAAC,EAAE,qBAAqB,CAAC;AACjC,QAAQ,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE;AAClD,YAAY,OAAO,EAAE,CAAC,IAAI,KAAK,OAAO,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;AAChG,YAAY,MAAM;AAClB,YAAY,KAAK;AACjB,SAAS,CAAC;AACV,QAAQ,IAAI;AACZ,YAAY,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;AACrF,QAAQ;AACR,QAAQ,OAAO,CAAC,EAAE;AAClB,YAAY,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC;AACxD,YAAY,YAAY,CAAC,KAAK,CAAC;AAC/B,YAAY,MAAM,CAAC,CAAC,CAAC;AACrB,QAAQ;AACR,IAAI,CAAC,CAAC;AACN;;AC99DA;AACA;AACA;AACA;AACO,MAAM,wBAAwB,SAAS,KAAK,CAAC;AACpD,IAAI,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,eAAe,EAAE,UAAU,EAAE;AAC9F,QAAQ,KAAK,CAAC,CAAC,6BAA6B,EAAE,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC;AAC/H,QAAQ,IAAI,CAAC,IAAI,GAAG,0BAA0B;AAC9C,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;AAC9B,QAAQ,IAAI,CAAC,eAAe,GAAG,eAAe;AAC9C,QAAQ,IAAI,CAAC,qBAAqB,GAAG,qBAAqB;AAC1D,QAAQ,IAAI,CAAC,eAAe,GAAG,eAAe;AAC9C,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU;AACpC,IAAI;AACJ;AACA,MAAM,QAAQ,GAAG,EAAE;AACnB,MAAM,eAAe,GAAG,EAAE;AAC1B;AACA,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,SAAS,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE;AACrD,IAAI,IAAI,EAAE;AACV,IAAI,OAAO,CAAC,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,cAAc,KAAK,cAAc,CAAC;AACnI;AACA,SAAS,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,SAAS,EAAE;AACtE,IAAI,IAAI,EAAE;AACV,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE;AAChF,IAAI,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,cAAc,KAAK,cAAc,IAAI,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9H,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AAC7D,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,eAAe;AACxC;AACA;AACA,IAAI,gBAAgB,GAAG,IAAI,CAAC,GAAG,EAAE;AACjC,IAAI,yBAAyB,GAAG,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,KAAK,CAAC,IAAI,EAAE;AAC5B,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;AAChC,QAAQ,OAAO,EAAE;AACjB,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;AACvD,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC;AACvC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1B,IAAI,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;AACvB,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AAC1B,IAAI,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;AACjD,IAAI,OAAO,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,CAAC,GAAG,EAAE;AACzB,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;AAClB,IAAI,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AAC7D,QAAQ,OAAO,GAAG;AAClB,IAAI,MAAM,CAAC,GAAG,GAAG;AACjB,IAAI,IAAI,IAAI,IAAI,CAAC;AACjB,QAAQ,OAAO,GAAG,CAAC;AACnB,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,CAAC,YAAY;AACvL,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AACzD,QAAQ,OAAO,GAAG;AAClB,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC;AAC9B,IAAI,IAAI,CAAC,IAAI;AACb,QAAQ,OAAO,GAAG;AAClB,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;AAC5D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,YAAY,EAAE,cAAc,EAAE;AAC3D,IAAI,IAAI,cAAc,EAAE;AACxB,QAAQ,IAAI,GAAG,GAAG,YAAY;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;AACjE,YAAY,MAAM,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ;AAC9E,YAAY,EAAE,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,GAAG,CAAC,EAAE;AACnD,YAAY,GAAG,GAAG,GAAG,CAAC,IAAI;AAC1B,QAAQ;AACR,QAAQ,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;AAC7C,YAAY,OAAO,IAAI;AACvB,QAAQ,OAAO,UAAU,CAAC,GAAG,CAAC;AAC9B,IAAI;AACJ;AACA,IAAI,IAAI,YAAY,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;AAC9H,QAAQ,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;AACxH,IAAI;AACJ;AACA,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;AACrC,QAAQ,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,CAAC,CAAC;AACzD,IAAI;AACJ,IAAI,OAAO,YAAY;AACvB;AACA,SAAS,UAAU,CAAC,KAAK,EAAE;AAC3B,IAAI,IAAI,CAAC,GAAG,IAAI;AAChB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC3C,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU;AAC7D,IAAI;AACJ,IAAI,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzB;AACA;AACA;AACA;AACA;AACA,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAE;AACpC,SAAS,gBAAgB,CAAC,KAAK,EAAE;AACjC,IAAI,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC;AAC7C,IAAI,IAAI,GAAG,KAAK,SAAS;AACzB,QAAQ,OAAO,GAAG;AAClB,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC;AAC/B,IAAI,IAAI,kBAAkB,CAAC,IAAI,IAAI,EAAE;AACrC,QAAQ,kBAAkB,CAAC,KAAK,EAAE;AAClC,IAAI,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;AACpC,IAAI,OAAO,CAAC;AACZ;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,OAAO,EAAE;AAClC,IAAI,IAAI,CAAC,OAAO;AAChB,QAAQ,OAAO,SAAS;AACxB,IAAI,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AAC7C,QAAQ,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,eAAe;AAClD,YAAY,OAAO,OAAO,CAAC,IAAI,CAAC;AAChC,IAAI;AACJ,IAAI,OAAO,SAAS;AACpB;AACA,SAAS,aAAa,CAAC,OAAO,EAAE;AAChC,IAAI,OAAO,eAAe,CAAC,OAAO,CAAC,KAAK,SAAS;AACjD;AACA,SAAS,oBAAoB,CAAC,OAAO,EAAE;AACvC,IAAI,OAAO,eAAe,CAAC,OAAO,CAAC,IAAI,EAAE;AACzC;AACA,SAAS,sBAAsB,CAAC,SAAS,EAAE;AAC3C,IAAI,OAAO,SAAS,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI;AAC/D;AACA,SAAS,oBAAoB,CAAC,OAAO,EAAE;AACvC,IAAI,OAAO,OAAO,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI;AAC3D;AACA,SAAS,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE;AAC1C,IAAI,yBAAyB,IAAI,CAAC;AAClC,IAAI,OAAO,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,EAAE,yBAAyB,CAAC,CAAC;AACvE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,mBAAmB,CAAC,SAAS,EAAE;AAC9C,IAAI,IAAI,EAAE;AACV,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM,SAAS,EAAE;AACpJ,IAAI,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;AACpC;AACA;AACA;AACA,IAAI,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,SAAS,EAAE;AACnF,QAAQ,OAAO,EAAE,GAAG,EAAE,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE;AAC/F,IAAI;AACJ;AACA;AACA,IAAI,IAAI,aAAa,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE;AAChG,QAAQ,MAAM,SAAS,GAAG,oBAAoB,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;AACvH,QAAQ,MAAM,SAAS,GAAG,sBAAsB,CAAC,SAAS,CAAC;AAC3D,QAAQ,OAAO;AACf,cAAc,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS;AACxF,cAAc,EAAE,GAAG,EAAE,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE;AAC7F,IAAI;AACJ;AACA;AACA,IAAI,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,eAAe,EAAE;AACzF,QAAQ,IAAI;AACZ,YAAY,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,eAAe,EAAE;AAC7D,YAAY,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC;AAC3D,YAAY,MAAM,SAAS,GAAG,sBAAsB,CAAC,SAAS,CAAC;AAC/D,YAAY,OAAO;AACnB,kBAAkB,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS;AAC7F,kBAAkB,EAAE,GAAG,EAAE,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE;AACjG,QAAQ;AACR,QAAQ,OAAO,EAAE,EAAE;AACnB;AACA,YAAY,OAAO,EAAE,GAAG,EAAE,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE;AAClG,QAAQ;AACR,IAAI;AACJ;AACA,IAAI,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;AACrD,IAAI,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC;AACnD,IAAI,OAAO;AACX,UAAU,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,OAAO,GAAG,IAAI;AAClI,UAAU,EAAE,GAAG,EAAE,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE;AACzF;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,KAAK,EAAE;AAClC,IAAI,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AACzC,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,KAAK,CAAC,yEAAyE,CAAC,CAAC;AAChI,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,MAAM,EAAE;AACrC,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ;AAClC,QAAQ,OAAO,MAAM;AACrB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC/B,QAAQ,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;AAC/B,YAAY,OAAO,CAAC;AACpB;AACA,QAAQ,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,4CAA4C,EAAE,MAAM,CAAC,MAAM,CAAC,6EAA6E,CAAC,CAAC;AACxK,QAAQ;AACR,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC;AAC/B,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ;AACrC,YAAY,OAAO,KAAK;AACxB,QAAQ,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAChD;AACA,YAAY,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;AAC/C,gBAAgB,OAAO,KAAK,CAAC,KAAK;AAClC;AACA,YAAY,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,GAAG,KAAK,KAAK,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC;AACzH,YAAY,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;AAC3C,gBAAgB,OAAO,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAQ;AACR;AACA,QAAQ,MAAM,KAAK,GAAG,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;AAC/G,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,mCAAmC,EAAE,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACvH,IAAI;AACJ,IAAI,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE;AAClF,QAAQ,OAAO,MAAM,CAAC,KAAK;AAC3B,IAAI;AACJ,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,kCAAkC,EAAE,OAAO,MAAM,CAAC,yDAAyD,CAAC,CAAC;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,SAAS,EAAE;AACtC,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,OAAO,IAAI,sBAAsB,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,gBAAgB,EAAE;AACrJ;AACO,eAAe,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE;AAC7C,IAAI,IAAI,EAAE,EAAE,EAAE;AACd;AACA;AACA;AACA,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC5C,QAAQ,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AACtH,QAAQ,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,EAAE;AAChI,IAAI;AACJ,IAAI,MAAM,MAAM,GAAG,mJAAmJ;AACtK,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC;AAC5B,UAAU,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC;AAC3C,UAAU,MAAM;AAChB,IAAI,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAC1G,IAAI,OAAO,EAAE,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE;AACjD;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE;AACvD,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;AAClB,IAAI,MAAM,KAAK,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AACtE,IAAI,IAAI,SAAS,KAAK,OAAO,EAAE;AAC/B,QAAQ,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,KAAK,CAAC;AACvE,QAAQ,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC;AACrH,IAAI;AACJ,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;AACnB,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,SAAS,CAAC,yBAAyB,CAAC,CAAC;AAC3E,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AACjC,IAAI,IAAI,SAAS,KAAK,aAAa,EAAE;AACrC;AACA,QAAQ,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC;AACjF,QAAQ,OAAO,IAAI,CAAC,MAAM;AAC1B,IAAI;AACJ;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC;AACjF,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,SAAS,CAAC;AACpF,IAAI,MAAM,CAAC,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;AAChF,IAAI,OAAO,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,GAAG,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,EAAE,EAAE;AAC5D;AACA;AACA,IAAI,IAAI,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE;AAC5C,QAAQ,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,EAAE;AACvE,IAAI;AACJ,IAAI,IAAI,MAAM;AACd,IAAI,QAAQ,SAAS;AACrB,QAAQ,KAAK,OAAO;AACpB,YAAY,MAAM,GAAG,mJAAmJ;AACxK,YAAY;AACZ,QAAQ,KAAK,aAAa;AAC1B,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK;AAC3B,gBAAgB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC;AAClF,YAAY,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AACzC,YAAY,MAAM,GAAG,CAAC,wDAAwD,EAAE,IAAI,CAAC,KAAK,CAAC,sCAAsC,EAAE,IAAI,CAAC,KAAK,CAAC,uFAAuF,CAAC;AACtO,YAAY;AACZ,QAAQ,KAAK,KAAK;AAClB,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK;AAC3B,gBAAgB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;AAC1E,YAAY,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AACzC,YAAY,MAAM,GAAG,CAAC,4BAA4B,EAAE,IAAI,CAAC,KAAK,CAAC,uFAAuF,EAAE,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC;AAChN,YAAY;AACZ,QAAQ,KAAK,KAAK;AAClB,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK;AAC3B,gBAAgB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;AAC1E,YAAY,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AACzC,YAAY,MAAM,GAAG,CAAC,gCAAgC,EAAE,IAAI,CAAC,KAAK,CAAC,uFAAuF,EAAE,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC;AACpN,YAAY;AACZ,QAAQ,KAAK,KAAK;AAClB,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK;AAC3B,gBAAgB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;AAC1E,YAAY,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AACzC,YAAY,MAAM,GAAG,CAAC,sCAAsC,EAAE,IAAI,CAAC,KAAK,CAAC,uFAAuF,EAAE,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC;AAC1N,YAAY;AACZ,QAAQ,KAAK,KAAK;AAClB,YAAY,IAAI,CAAC,IAAI,CAAC,KAAK;AAC3B,gBAAgB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;AAC1E,YAAY,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC;AACzC,YAAY,MAAM,GAAG,CAAC,sCAAsC,EAAE,IAAI,CAAC,KAAK,CAAC,uFAAuF,EAAE,IAAI,CAAC,KAAK,CAAC,4CAA4C,CAAC;AAC1N,YAAY;AACZ,QAAQ;AACR,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,iCAAiC,EAAE,SAAS,CAAC,CAAC,CAAC;AAC5E;AACA,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC;AAC5B,UAAU,CAAC,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC;AAC3C,UAAU,MAAM;AAChB,IAAI,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;AAC1G;AACA;AACA;AACA,IAAI,IAAI,SAAS,KAAK,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACnF,QAAQ,MAAM,oBAAoB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;AACtI,QAAQ,IAAI,oBAAoB,EAAE;AAClC,YAAY,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;AAC3C,QAAQ;AACR,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,mCAAmC,EAAE,MAAM,CAAC,MAAM,CAAC,+CAA+C,CAAC,CAAC;AAC7H,IAAI;AACJ,IAAI,OAAO,EAAE,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC,EAAE;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE;AAC5D,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC1B,IAAI,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;AACpE,IAAI,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AACnE,QAAQ,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AACpD,IAAI;AACJ,IAAI,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AACxD,QAAQ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;AACjD,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE;AAC/D,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC;AAC9B,QAAQ,IAAI,IAAI,IAAI,IAAI;AACxB,YAAY;AACZ,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAClC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,qBAAqB,EAAE,GAAG,CAAC,iCAAiC,CAAC;AAC1F,gBAAgB,CAAC,MAAM,EAAE,GAAG,CAAC,mBAAmB,EAAE,OAAO,IAAI,CAAC,CAAC,CAAC;AAChE,QAAQ;AACR,QAAQ,KAAK,MAAM,CAAC,IAAI,IAAI;AAC5B,YAAY,iBAAiB,CAAC,CAAC,CAAC;AAChC,IAAI;AACJ,IAAI,MAAM,SAAS,GAAG,EAAE;AACxB,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM;AAC1E,QAAQ,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO;AACxC,IAAI,IAAI,IAAI,CAAC,KAAK;AAClB,QAAQ,SAAS,CAAC,KAAK,GAAG,IAAI;AAC9B,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM;AACtE,QAAQ,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;AAChC,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM;AACtE,QAAQ,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;AAChC,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM;AACtE,QAAQ,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;AAChC,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM;AACtE,QAAQ,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG;AAChC,IAAI,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAClF,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AACvG,IAAI,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC;AAC/F,IAAI,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;AAChF,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI;AAC9B;AACA,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAC3B,QAAQ,OAAO,IAAI;AACnB,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AACxC,QAAQ,OAAO,IAAI,CAAC,IAAI;AACxB,IAAI,OAAO,EAAE;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE;AACrD,IAAI,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;AACpE,IAAI,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AACnE,QAAQ,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AACpD,IAAI;AACJ,IAAI,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AACxD,QAAQ,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;AACjD,IAAI;AACJ,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAChE,QAAQ,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC;AAClE,IAAI;AACJ,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACrB,QAAQ,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;AACnC,YAAY,iBAAiB,CAAC,CAAC,CAAC;AAChC,IAAI;AACJ,IAAI,MAAM,IAAI,GAAG,EAAE,KAAK,EAAE;AAC1B,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;AAC7C,QAAQ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM;AACjC,IAAI,MAAM,WAAW,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAC7E,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE;AAC7E,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;AACvF,IAAI,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;AAC/G,IAAI,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;AAChF,IAAI,OAAO,QAAQ,CAAC,IAAI;AACxB;AACO,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE;AAC3C,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;AAClB,IAAI,IAAI;AACR,QAAQ,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;AACxE;AACA,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AACvE,YAAY,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACxD,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5D,YAAY,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;AACrD,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE;AACrE,QAAQ,MAAM,kBAAkB,GAAG,IAAI,CAAC,eAAe,GAAG,WAAW,GAAG,EAAE;AAC1E,QAAQ,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE;AAC1E,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;AAC3E,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAC3F,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AACrF,QAAQ,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC;AACvE,QAAQ,MAAM,QAAQ,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB,CAAC,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,EAAE,SAAS,CAAC,CAAC;AACnK,QAAQ,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,YAAY,CAAC,SAAS;AAC/F,QAAQ,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AAC9B;AACA,QAAQ,MAAM,WAAW,GAAG,iBAAiB,CAAC,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC;AACpF,QAAQ,IAAI,YAAY;AACxB,YAAY,WAAW;AACvB,YAAY,GAAG,GAAG,WAAW,CAAC,SAAS,EAAE;AACzC,YAAY,OAAO,WAAW,CAAC,IAAI;AACnC,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,QAAQ,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,GAAG,QAAQ;AAC7E,QAAQ,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;AACvG;AACA;AACA,QAAQ,MAAM,eAAe,GAAG;AAChC,cAAc,CAAC,EAAE,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,cAAc,KAAK,YAAY,CAAC,cAAc;AAC3J,cAAc,SAAS;AACvB,QAAQ,IAAI,eAAe,EAAE;AAC7B,YAAY,OAAO,eAAe,CAAC,OAAO;AAC1C,QAAQ;AACR;AACA,QAAQ,IAAI,cAAc;AAC1B,QAAQ,cAAc,GAAG,CAAC,YAAY;AACtC,YAAY,IAAI,EAAE;AAClB,YAAY,IAAI;AAChB,gBAAgB,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;AACjF;AACA,gBAAgB,IAAI,QAAQ;AAC5B;AACA,gBAAgB,MAAM,oBAAoB,GAAG,IAAI,CAAC,eAAe,GAAG,uBAAuB,GAAG,EAAE;AAChG,gBAAgB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAC/G,gBAAgB,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,KAAK,SAAS,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE;AACzF,gBAAgB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE;AACnG,gBAAgB,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AACnH,gBAAgB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AAC3G,gBAAgB,IAAI,cAAc,EAAE;AACpC,oBAAoB,MAAM,MAAM,GAAG,kBAAkB,CAAC,cAAc,CAAC;AACrE,oBAAoB,MAAM,WAAW,GAAG,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAClG,oBAAoB,MAAM,OAAO,GAAG,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACnH,oBAAoB,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;AAC1F,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,MAAM,IAAI,GAAG,kBAAkB,CAAC,cAAc,CAAC;AACnE;AACA;AACA;AACA;AACA,oBAAoB,MAAM,gBAAgB,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE;AACpK,oBAAoB,MAAM,OAAO,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,gBAAgB,CAAC,EAAE,WAAW,CAAC,EAAE,SAAS,CAAC,EAAE,oBAAoB,CAAC,EAAE,UAAU,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,CAAC,CAAC;AACpK,oBAAoB,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC;AAC1F,gBAAgB;AAChB;AACA;AACA;AACA;AACA,gBAAgB,MAAM,YAAY,GAAG,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;AACvF;AACA,gBAAgB,IAAI,YAAY,EAAE;AAClC,oBAAoB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,CAAC,cAAc,EAAE,YAAY,EAAE,GAAG,GAAG,aAAa,CAAC;AAC/G;AACA,oBAAoB,IAAI,GAAG,GAAG,gBAAgB,GAAG,IAAI,EAAE;AACvD,wBAAwB,mBAAmB,EAAE;AAC7C,wBAAwB,gBAAgB,GAAG,GAAG;AAC9C,oBAAoB;AACpB,gBAAgB;AAChB;AACA,gBAAgB,OAAO,YAAY;AACnC,YAAY;AACZ,oBAAoB;AACpB;AACA;AACA,gBAAgB,IAAI,cAAc,EAAE;AACpC,oBAAoB,MAAM,MAAM,GAAG,eAAe,CAAC,UAAU,CAAC;AAC9D,oBAAoB,MAAM,KAAK,GAAG,CAAC,EAAE,GAAG,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,cAAc,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AACxL,oBAAoB,IAAI,KAAK,IAAI,CAAC;AAClC,wBAAwB,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AAC/C,oBAAoB,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,MAAM,CAAC;AAC7F,wBAAwB,OAAO,eAAe,CAAC,UAAU,CAAC;AAC1D,gBAAgB;AAChB,YAAY;AACZ,QAAQ,CAAC,GAAG;AACZ;AACA,QAAQ,IAAI,cAAc,EAAE;AAC5B,YAAY,CAAC,CAAC,EAAE,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,IAAI,eAAe,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC;AAC1H,gBAAgB,cAAc,EAAE,YAAY,CAAC,cAAc;AAC3D,gBAAgB,OAAO,EAAE,cAAc;AACvC,aAAa,CAAC;AACd,QAAQ;AACR;AACA,QAAQ,OAAO,cAAc;AAC7B,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,MAAM,KAAK;AACnB,IAAI;AACJ;AACA;AACA,SAAS,mBAAmB,GAAG;AAC/B,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;AACzC,QAAQ,IAAI,EAAE,EAAE,EAAE;AAClB,QAAQ,MAAM,aAAa,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,SAAS,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE;AAC7K,QAAQ,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;AACpC,YAAY,QAAQ,CAAC,GAAG,CAAC,GAAG,aAAa;AACzC;AACA,YAAY,OAAO,QAAQ,CAAC,GAAG,CAAC;AAChC,IAAI,CAAC,CAAC;AACN,IAAI,gBAAgB,GAAG,GAAG;AAC1B;AACA,SAAS,yBAAyB,CAAC,KAAK,EAAE;AAC1C,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE;AAClB,IAAI,MAAM,GAAG,GAAG,KAAK;AACrB,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,MAAM;AAC7T,IAAI,MAAM,OAAO,GAAG,KAAK,YAAY;AACrC,UAAU,KAAK,CAAC;AAChB,UAAU,QAAQ,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK;AAC7E,cAAc,GAAG,CAAC;AAClB,cAAc,eAAe;AAC7B,IAAI,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE;AAC1C,QAAQ,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE;AAChD,IAAI;AACJ,IAAI,IAAI,MAAM,KAAK,GAAG,EAAE;AACxB,QAAQ,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE;AAChD,IAAI;AACJ,IAAI,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE;AAC9C;AACO,eAAe,OAAO,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,EAAE;AAChD,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC1B,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5B,QAAQ,OAAO,EAAE;AACjB,IAAI;AACJ,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE,EAAE;AAC3B,QAAQ,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;AACtE,IAAI;AACJ,IAAI,MAAM,eAAe,GAAG,EAAE;AAC9B,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC9B,QAAQ,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;AACxE,QAAQ,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AACvE,YAAY,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;AACxD,QAAQ;AACR,QAAQ,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5D,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC,CAAC;AAC7D,QAAQ;AACR,QAAQ,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;AACzE,QAAQ,IAAI,CAAC,cAAc,EAAE;AAC7B,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,yDAAyD,EAAE,IAAI,CAAC,CAAC,CAAC;AAC/F,QAAQ;AACR,QAAQ,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC;AAC5C,IAAI;AACJ,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE;AAC1B;AACA;AACA,IAAI,MAAM,YAAY,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC;AACnE,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,YAAY,CAAC,SAAS;AAC3F,IAAI,MAAM,OAAO,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;AAC3C,IAAI,MAAM,eAAe,GAAG,EAAE;AAC9B,IAAI,MAAM,aAAa,GAAG,EAAE;AAC5B,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrD,QAAQ,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,CAAC;AACjD,QAAQ,MAAM,QAAQ,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;AACjE,QAAQ,MAAM,WAAW,GAAG,iBAAiB,CAAC,QAAQ,EAAE,YAAY,CAAC,cAAc,CAAC;AACpF,QAAQ,IAAI,YAAY;AACxB,YAAY,WAAW;AACvB,YAAY,GAAG,GAAG,WAAW,CAAC,SAAS,EAAE;AACzC,YAAY,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE;AACzE,QAAQ;AACR,aAAa;AACb,YAAY,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AACnC,YAAY,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC;AAC9C,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE;AAClC,QAAQ,IAAI;AACZ,YAAY,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,IAAI,CAAC,UAAU,CAAC;AACnH,YAAY,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE;AAClE,gBAAgB,MAAM,aAAa,GAAG,IAAI,KAAK,CAAC,kCAAkC,CAAC;AACnF,gBAAgB,aAAa,CAAC,MAAM,GAAG,GAAG;AAC1C,gBAAgB,MAAM,aAAa;AACnC,YAAY;AACZ;AACA;AACA;AACA;AACA,YAAY,MAAM,aAAa,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE;AAClT,YAAY,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAE;AAC9C,YAAY,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE;AAChD,gBAAgB,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;AACzD,YAAY;AACZ,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7D,gBAAgB,MAAM,aAAa,GAAG,eAAe,CAAC,CAAC,CAAC;AACxD,gBAAgB,MAAM,cAAc,GAAG,aAAa,CAAC,CAAC,CAAC;AACvD,gBAAgB,MAAM,YAAY,GAAG,gBAAgB,CAAC,GAAG,CAAC,cAAc,CAAC;AACzE,gBAAgB,IAAI,YAAY,EAAE;AAClC;AACA;AACA,oBAAoB,MAAM,gBAAgB,GAAG,YAAY,CAAC;AAC1D,0BAA0B;AAC1B,0BAA0B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;AACjH,oBAAoB,OAAO,CAAC,aAAa,CAAC,GAAG,gBAAgB;AAC7D,oBAAoB,IAAI,CAAC,gBAAgB,CAAC,KAAK,IAAI,YAAY,EAAE;AACjE,wBAAwB,MAAM,QAAQ,GAAG,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,CAAC;AACjF,wBAAwB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,CAAC,cAAc,EAAE,gBAAgB,CAAC,IAAI,EAAE,GAAG,GAAG,aAAa,CAAC;AAC5H,oBAAoB;AACpB,gBAAgB;AAChB,qBAAqB;AACrB,oBAAoB,OAAO,CAAC,aAAa,CAAC,GAAG;AAC7C,wBAAwB,IAAI,EAAE,cAAc;AAC5C,wBAAwB,IAAI,EAAE,IAAI;AAClC,wBAAwB,KAAK,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC,4BAA4B,EAAE,cAAc,CAAC,CAAC;AAC5G,qBAAqB;AACrB,gBAAgB;AAChB,YAAY;AACZ,YAAY,IAAI,YAAY,IAAI,GAAG,GAAG,gBAAgB,GAAG,IAAI,EAAE;AAC/D,gBAAgB,mBAAmB,EAAE;AACrC,gBAAgB,gBAAgB,GAAG,GAAG;AACtC,YAAY;AACZ,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,MAAM,UAAU,GAAG,yBAAyB,CAAC,KAAK,CAAC;AAC/D,YAAY,KAAK,MAAM,aAAa,IAAI,eAAe,EAAE;AACzD,gBAAgB,OAAO,CAAC,aAAa,CAAC,GAAG;AACzC,oBAAoB,IAAI,EAAE,eAAe,CAAC,aAAa,CAAC;AACxD,oBAAoB,IAAI,EAAE,IAAI;AAC9B,oBAAoB,KAAK,EAAE,UAAU;AACrC,iBAAiB;AACjB,YAAY;AACZ,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,OAAO;AAClB;AACA,MAAM,wBAAwB,GAAG,EAAE;AACnC,IAAI,iBAAiB,GAAG,EAAE;AAC1B,IAAI,sBAAsB,GAAG,KAAK;AAClC,SAAS,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE;AACvC,IAAI,IAAI,EAAE;AACV;AACA;AACA,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,KAAK,KAAK,IAAI,EAAE;AACvE,QAAQ,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAChD,QAAQ,GAAG,CAAC,YAAY,GAAG,IAAI;AAC/B,QAAQ,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS;AACvC,QAAQ,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC,YAAY;AACrC,QAAQ,MAAM,GAAG;AACjB,IAAI;AACJ,IAAI,OAAO,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;AAC5G;AACA,SAAS,sBAAsB,GAAG;AAClC,IAAI,MAAM,OAAO,GAAG,iBAAiB;AACrC,IAAI,iBAAiB,GAAG,EAAE;AAC1B,IAAI,sBAAsB,GAAG,KAAK;AAClC;AACA;AACA,IAAI,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,wBAAwB,EAAE;AACtF,QAAQ,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,wBAAwB,CAAC;AAC9E,QAAQ,KAAK,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK;AAC9E,YAAY,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAK;AAC7C,gBAAgB,IAAI;AACpB,oBAAoB,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAChF,gBAAgB;AAChB,gBAAgB,OAAO,KAAK,EAAE;AAC9B,oBAAoB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACxC,gBAAgB;AAChB,YAAY,CAAC,CAAC;AACd,QAAQ,CAAC,EAAE,CAAC,KAAK,KAAK;AACtB,YAAY,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ;AACO,eAAe,QAAQ,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE;AACzE,IAAI,MAAM,KAAK,GAAG,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE;AACxD;AACA;AACA,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;AAC/E,QAAQ,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;AAC1D,QAAQ,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AAChD,IAAI;AACJ,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAC5C,QAAQ,iBAAiB,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC1D,QAAQ,IAAI,CAAC,sBAAsB,EAAE;AACrC,YAAY,sBAAsB,GAAG,IAAI;AACzC,YAAY,cAAc,CAAC,sBAAsB,CAAC;AAClD,QAAQ;AACR,IAAI,CAAC,CAAC;AACN;AACO,eAAe,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE;AAC/C;AACA;AACA,IAAI,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC;AACnD,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACnJ;AACA,eAAe,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE;AAC5C,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACtB,IAAI,IAAI;AACR,QAAQ,IAAI,OAAO,GAAG,EAAE;AACxB,QAAQ,KAAK,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE;AACnE,YAAY,MAAM,cAAc,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,YAAY;AACtG,YAAY,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;AAC7E,YAAY,IAAI,CAAC,cAAc,EAAE;AACjC,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,8DAA8D,EAAE,YAAY,CAAC,CAAC,CAAC;AAChH,YAAY;AACZ,YAAY,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;AACxE,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;AACnF,YAAY,MAAM,GAAG,GAAG,MAAM,SAAS,EAAE;AACzC,YAAY,MAAM,UAAU,GAAG,MAAM,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC;AAClH,YAAY,IAAI,UAAU,IAAI,IAAI,EAAE;AACpC,gBAAgB,OAAO,UAAU;AACjC,YAAY;AACZ,QAAQ;AACR,QAAQ,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;AAC1I;AACA;AACA;AACA;AACA;AACA,QAAQ,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO;AAC1P,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAClC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,+DAA+D,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjH,QAAQ;AACR,QAAQ,OAAO,IAAI;AACnB,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,MAAM,KAAK;AACnB,IAAI;AACJ;AACA;AACO,eAAe,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE;AACpE,IAAI,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;AAChG,IAAI,OAAO,OAAO,CAAC,CAAC,CAAC;AACrB;AACO,eAAe,iBAAiB,CAAC,IAAI,EAAE;AAC9C,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACtB,IAAI,IAAI;AACR,QAAQ,IAAI,OAAO,GAAG,EAAE;AACxB,QAAQ,IAAI,eAAe,GAAG,SAAS;AACvC,QAAQ,IAAI,cAAc,GAAG,KAAK;AAClC,QAAQ,KAAK,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE;AAC9E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,YAAY,IAAI,CAAC,cAAc,EAAE;AACjC,gBAAgB,eAAe,GAAG,UAAU;AAC5C,gBAAgB,cAAc,GAAG,IAAI;AACrC,YAAY;AACZ,iBAAiB,IAAI,UAAU,KAAK,eAAe,EAAE;AACrD,gBAAgB,MAAM,IAAI,KAAK,CAAC,mMAAmM,CAAC;AACpO,YAAY;AACZ,YAAY,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAC/D,QAAQ;AACR,QAAQ,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,eAAe,CAAC;AAC9F;AACA;AACA;AACA,QAAQ,MAAM,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,QAAQ,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO;AAC1P,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAClC,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,+DAA+D,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACjH,QAAQ;AACR;AACA,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,KAAK;AACzC,YAAY,MAAM,MAAM,GAAG,EAAE,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE;AACzD;AACA,YAAY,IAAI,WAAW,CAAC,KAAK,EAAE;AACnC,gBAAgB,MAAM,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK;AAChD,YAAY;AACZ;AACA;AACA,YAAY,IAAI,WAAW,CAAC,KAAK,IAAI,IAAI,EAAE;AAC3C,gBAAgB,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;AACxD,YAAY;AACZ,YAAY,OAAO,MAAM;AACzB,QAAQ,CAAC,CAAC;AACV,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,MAAM,KAAK;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAqB,GAAG,IAAI;AAClC,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,EAAE,gBAAgB,CAAC,CAAC;AACtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,GAAG,OAAO,EAAE;AACxC,IAAI,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAClC,QAAQ,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;AACjD,YAAY;AACZ,QAAQ,KAAK,MAAM,GAAG,IAAI,CAAC,OAAO,EAAE,gBAAgB,EAAE,SAAS,CAAC,EAAE;AAClE,YAAY,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AACrC,YAAY,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;AACpE,gBAAgB,OAAO,KAAK,CAAC,IAAI,EAAE;AACnC,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,IAAI;AACf;AACA;AACA,SAAS,uBAAuB,CAAC,SAAS,EAAE;AAC5C,IAAI,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI;AAClC,QAAQ,IAAI,EAAE;AACd,QAAQ,QAAQ;AAChB,YAAY,IAAI,EAAE,KAAK,CAAC,eAAe;AACvC,YAAY,QAAQ,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC;AACnF,SAAS;AACT,IAAI,CAAC,CAAC;AACN;AACA;AACA,SAAS,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE;AACxC,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAC1D,QAAQ,OAAO,MAAM,CAAC,IAAI,CAAC;AAC3B,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC9D,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC;AAC/D,QAAQ,OAAO,MAAM,CAAC,SAAS,CAAC;AAChC,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;AACpE,IAAI,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC;AAClE,QAAQ,OAAO,MAAM,CAAC,YAAY,CAAC;AACnC,IAAI,OAAO,SAAS;AACpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE;AACnD,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACxE,QAAQ,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,gEAAgE,EAAE;AAC5G,IAAI;AACJ,IAAI,MAAM,GAAG,GAAG,MAAM;AACtB,IAAI,MAAM,SAAS,GAAG,EAAE;AACxB,IAAI,MAAM,UAAU,GAAG,EAAE;AACzB,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC9B,QAAQ,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC;AACpD,QAAQ,IAAI,QAAQ,IAAI,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AACzF,YAAY,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC;AACjC,YAAY,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACpD,YAAY;AACZ,QAAQ;AACR,QAAQ,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;AACpD,IAAI;AACJ,IAAI,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/B,QAAQ,OAAO;AACf,YAAY,QAAQ,EAAE,KAAK;AAC3B,YAAY,MAAM,EAAE,CAAC,sCAAsC,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrF,gBAAgB,iEAAiE;AACjF,SAAS;AACT,IAAI;AACJ,IAAI,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,GAAG,qBAAqB,EAAE;AAC1F,IAAI,IAAI;AACR,QAAQ,IAAI,QAAQ,GAAG,CAAC;AACxB,YAAY,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACvE,QAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC;AACtD;AACA;AACA,QAAQ,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,MAAM;AACvG,cAAc,MAAM,CAAC;AACrB,cAAc,MAAM;AACpB,QAAQ,OAAO,0BAA0B,CAAC,KAAK,EAAE,GAAG,CAAC;AACrD,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,MAAM,OAAO,GAAG,QAAQ,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AACzI,QAAQ,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,+BAA+B,EAAE,OAAO,CAAC,CAAC,EAAE;AACvF,IAAI;AACJ;AACA,SAAS,gBAAgB,CAAC,IAAI,EAAE;AAChC,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;AACtD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,2BAA2B,CAAC,KAAK,EAAE,WAAW,EAAE;AACzD,IAAI,IAAI,EAAE;AACV,IAAI,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;AACvF,QAAQ,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,oDAAoD,EAAE;AAChG,IAAI;AACJ,IAAI,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,WAAW,CAAC,SAAS,GAAG,IAAI;AACvF,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB,QAAQ,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,6DAA6D,EAAE;AACzG,IAAI;AACJ,IAAI,MAAM,MAAM,GAAG,IAAI,GAAG,EAAE;AAC5B,IAAI,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE;AACjC,QAAQ,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;AACpD,YAAY;AACZ,QAAQ,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;AACvC,QAAQ,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;AACtH,cAAc;AACd,cAAc,IAAI,CAAC;AACnB,IAAI;AACJ,IAAI,MAAM,SAAS,GAAG,EAAE;AACxB,IAAI,MAAM,OAAO,GAAG,EAAE;AACtB,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;AAC9B,QAAQ,MAAM,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC;AAC1C,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;AAC9B,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;AAC9B,YAAY,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACpD,YAAY;AACZ,QAAQ;AACR,QAAQ,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;AACxG,IAAI;AACJ,IAAI,IAAI,WAAW,CAAC,QAAQ,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AAC7D,QAAQ,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,WAAW,CAAC,UAAU,GAAG,EAAE;AAC9F,QAAQ,MAAM,OAAO,GAAG;AACxB,YAAY,GAAG;AACf,iBAAiB,MAAM,CAAC,CAAC,KAAK,KAAK,KAAK,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;AAC1E,iBAAiB,GAAG,CAAC,CAAC,KAAK,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9I,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,CAAC,qCAAqC,CAAC,CAAC;AAClF,SAAS;AACT,QAAQ,OAAO;AACf,YAAY,QAAQ,EAAE,KAAK;AAC3B,YAAY,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG;AACrC,kBAAkB,OAAO,CAAC,IAAI,CAAC,IAAI;AACnC,kBAAkB,iEAAiE;AACnF,SAAS;AACT,IAAI;AACJ,IAAI,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;AACnD;AACA;AACA,IAAI,OAAO,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,CAAC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE;AAC7C,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClD;AACA,IAAI,IAAI;AACR;AACA;AACA;AACA;AACA,QAAQ,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,SAAS,EAAE;AAC5M,QAAQ,MAAM,YAAY,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,YAAY,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,YAAY;AACzN,QAAQ,IAAI,CAAC,YAAY,EAAE;AAC3B,YAAY,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC;AAC5D,QAAQ;AACR,QAAQ,IAAI,SAAS,GAAG,EAAE;AAC1B,QAAQ,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAE;AAC3C,QAAQ,KAAK,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,0BAA0B,EAAE,IAAI,IAAI,EAAE;AAC3E;AACA,YAAY,IAAI,QAAQ,GAAG,0BAA0B;AACrD,YAAY,IAAI,0BAA0B,EAAE;AAC5C,gBAAgB,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AACjI,YAAY;AACZ,YAAY,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;AAC9E,YAAY,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC;AACjD,YAAY,MAAM,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;AAC7E,YAAY,IAAI,SAAS,GAAG,EAAE;AAC9B,YAAY,IAAI,cAAc,EAAE;AAChC,gBAAgB,SAAS,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE;AAClG,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC;AAChF,YAAY;AACZ;AACA,YAAY,MAAM,cAAc,GAAG,cAAc,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc;AACrH,YAAY,iBAAiB,CAAC,GAAG,CAAC,cAAc,CAAC;AACjD,YAAY,IAAI,eAAe,GAAG,cAAc;AAChD,YAAY,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;AACnD,gBAAgB,eAAe,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AACnE,YAAY;AACZ,YAAY,SAAS,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC;AACzD,QAAQ;AACR,QAAQ,IAAI,WAAW;AACvB,QAAQ,IAAI;AACZ,YAAY,WAAW,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;AACnJ,QAAQ;AACR,QAAQ,OAAO,KAAK,EAAE;AACtB,YAAY,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,UAAU,MAAM,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,MAAM,sBAAsB,EAAE;AACpL,gBAAgB,MAAM,eAAe,GAAG,MAAM,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,eAAe,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC/G,gBAAgB,MAAM,UAAU,GAAG,MAAM,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,eAAe,GAAG,UAAU,CAAC;AAChI,gBAAgB,MAAM,IAAI,wBAAwB,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,eAAe,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,qBAAqB,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,UAAU,CAAC;AACzS,YAAY;AACZ,YAAY,MAAM,KAAK;AACvB,QAAQ;AACR;AACA,QAAQ,iBAAiB,CAAC,OAAO,CAAC,IAAI,IAAI;AAC1C,YAAY,kBAAkB,CAAC,IAAI,CAAC;AACpC,QAAQ,CAAC,CAAC;AACV,QAAQ,IAAI,WAAW,CAAC,MAAM,KAAK,GAAG,EAAE;AACxC;AACA;AACA,YAAY,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,GAAG,WAAW,CAAC,IAAI;AAC1E;AACA,YAAY,IAAI,mBAAmB,IAAI,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;AAC/F,gBAAgB,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC;AAC1G,YAAY;AACZ,YAAY,IAAI,mBAAmB,EAAE;AACrC;AACA;AACA;AACA,gBAAgB,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC;AACjG,YAAY;AACZ;AACA,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE;AAC3E,gBAAgB,MAAM,IAAI,KAAK,CAAC,CAAC,oDAAoD,EAAE,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/I,YAAY;AACZ,YAAY,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC;AACzC;AACA;AACA;AACA,YAAY,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,cAAc,KAAK,IAAI,EAAE;AAC9F,gBAAgB,MAAM,IAAI,KAAK,CAAC,mFAAmF;AACnH,oBAAoB,kFAAkF,CAAC;AACvG,YAAY;AACZ,YAAY,MAAM,yBAAyB,GAAG,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,qBAAqB,KAAK,IAAI;AACjI,YAAY,MAAM,oBAAoB,GAAG,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,eAAe,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,iBAAiB,KAAK,IAAI;AACzM,gBAAgB,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC,eAAe,KAAK,IAAI;AAC1O,YAAY,IAAI,yBAAyB,IAAI,oBAAoB,EAAE;AACnE,gBAAgB,MAAM,IAAI,KAAK,CAAC,2EAA2E,CAAC;AAC5G,YAAY;AACZ,YAAY,MAAM,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC;AAC5E,YAAY,MAAM,kBAAkB,GAAG,uBAAuB,CAAC,SAAS,CAAC;AACzE,YAAY,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;AACtC;AACA;AACA;AACA,YAAY,MAAM,WAAW,GAAG,kBAAkB,CAAC,CAAC,EAAE,GAAG,WAAW,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC;AACpJ,YAAY,IAAI,CAAC,WAAW,EAAE;AAC9B,gBAAgB,MAAM,IAAI,KAAK,CAAC,0GAA0G;AAC1I,oBAAoB,kCAAkC,CAAC;AACvD,YAAY;AACZ,YAAY,IAAI,KAAK,CAAC,qBAAqB,EAAE;AAC7C,gBAAgB,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;AACzD,oBAAoB,MAAM,IAAI,KAAK,CAAC,CAAC,6CAA6C,EAAE,WAAW,CAAC,4BAA4B,CAAC;AAC7H,wBAAwB,kCAAkC,CAAC;AAC3D,gBAAgB;AAChB,gBAAgB,MAAM,WAAW,GAAG,WAAW;AAC/C,gBAAgB,MAAM,EAAE,yBAAyB,EAAE,GAAG,MAAM,oDAAO,iCAAqB,KAAC;AACzF,gBAAgB,MAAM,aAAa,GAAG,MAAM,yBAAyB,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB,CAAC;AACvH;AACA;AACA,gBAAgB,IAAI,aAAa,CAAC,OAAO,KAAK,QAAQ,EAAE;AACxD,oBAAoB,OAAO;AAC3B,wBAAwB,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW;AACvF,wBAAwB,aAAa,EAAE,IAAI;AAC3C,wBAAwB,iBAAiB,EAAE,aAAa,CAAC,iBAAiB;AAC1E,wBAAwB,KAAK,EAAE,aAAa,CAAC,KAAK;AAClD,qBAAqB;AACrB,gBAAgB;AAChB,gBAAgB,IAAI,aAAa,CAAC,OAAO,KAAK,WAAW,EAAE;AAC3D,oBAAoB,OAAO;AAC3B,wBAAwB,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW;AAC1F,wBAAwB,aAAa,EAAE,aAAa,CAAC,oBAAoB;AACzE,wBAAwB,iBAAiB,EAAE,aAAa,CAAC,iBAAiB;AAC1E,wBAAwB,KAAK,EAAE,aAAa,CAAC,KAAK;AAClD,wBAAwB,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE;AACxF,qBAAqB;AACrB,gBAAgB;AAChB;AACA;AACA,gBAAgB,MAAM,UAAU,GAAG,MAAM,iBAAiB,CAAC,kBAAkB,EAAE,OAAO,CAAC;AACvF,gBAAgB,OAAO;AACvB,oBAAoB,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,kBAAkB,EAAE,KAAK,EAAE,WAAW;AACtF,oBAAoB,aAAa,EAAE,aAAa,CAAC,oBAAoB;AACrE,oBAAoB,iBAAiB,EAAE,aAAa,CAAC,iBAAiB;AACtE,oBAAoB,KAAK,EAAE,aAAa,CAAC,KAAK;AAC9C,oBAAoB,uBAAuB,EAAE,aAAa,CAAC,uBAAuB;AAClF,oBAAoB,UAAU;AAC9B,iBAAiB;AACjB,YAAY;AACZ,iBAAiB;AACjB,gBAAgB,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC;AACpG,YAAY;AACZ,QAAQ;AACR,aAAa,IAAI,WAAW,CAAC,MAAM,KAAK,GAAG,EAAE;AAC7C;AACA;AACA;AACA;AACA,YAAY,MAAM,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,IAAI,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC;AACtH,kBAAkB,WAAW,CAAC;AAC9B,kBAAkB,IAAI;AACtB,YAAY,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,KAAK,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;AAC3J,kBAAkB,IAAI,CAAC;AACvB,kBAAkB,IAAI;AACtB,YAAY,MAAM,gBAAgB,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,aAAa;AAC5G,YAAY,OAAO;AACnB,gBAAgB,MAAM,EAAE,WAAW;AACnC,gBAAgB,kBAAkB,EAAE,uBAAuB,CAAC,SAAS,CAAC;AACtE,gBAAgB,WAAW,EAAE,2BAA2B,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,eAAe,CAAC,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;AACtK;AACA;AACA,gBAAgB,KAAK,GAAG,CAAC,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;AACtG,gBAAgB,aAAa,EAAE,OAAO,gBAAgB,KAAK,QAAQ,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,GAAG,gBAAgB,GAAG,IAAI;AAC5H,aAAa;AACb,QAAQ;AACR,aAAa;AACb,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,wBAAwB,EAAE,WAAW,CAAC,CAAC,CAAC;AACrE,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,MAAM,KAAK;AACnB,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAgB,CAAC,GAAG,EAAE;AAC/B,IAAI,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;AACnC,IAAI,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,GAAG;AACpE,IAAI,OAAO,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACvC;AACA;AACA;AACA,SAAS,kBAAkB,CAAC,MAAM,EAAE;AACpC;AACA,IAAI,MAAM,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM;AAC9E;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;AACzC,QAAQ,MAAM,IAAI,GAAG,gBAAgB,CAAC,GAAG,CAAC;AAC1C,QAAQ,IAAI,IAAI,KAAK,gBAAgB,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE;AAClF,YAAY,OAAO,QAAQ,CAAC,GAAG,CAAC;AAChC,QAAQ;AACR,IAAI,CAAC,CAAC;AACN;AACA,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI;AAChD;AACA,QAAQ,MAAM,SAAS,GAAG,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG;AACvF,QAAQ,MAAM,IAAI,GAAG,gBAAgB,CAAC,SAAS,CAAC;AAChD,QAAQ,IAAI,IAAI,KAAK,gBAAgB,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE;AAClF;AACA;AACA,YAAY,OAAO,eAAe,CAAC,GAAG,CAAC;AACvC,QAAQ;AACR,IAAI,CAAC,CAAC;AACN;AAuCA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAE;AACrC;AACO,SAAS,qBAAqB,CAAC,QAAQ,EAAE;AAChD,IAAI,mBAAmB,CAAC,GAAG,CAAC,QAAQ,CAAC;AACrC,IAAI,OAAO,MAAM,EAAE,mBAAmB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,2BAA2B,GAAG;AAC9C,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC9D,IAAI,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;AAC5E,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE,IAAI;AACtC,QAAQ,IAAI;AACZ,YAAY,EAAE,EAAE;AAChB,QAAQ;AACR,QAAQ,+DAA+D,EAAE,EAAE,0DAA0D;AACrI,IAAI,CAAC,CAAC;AACN;AACO,eAAe,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE;AAC9C,IAAI,IAAI;AACR,QAAQ,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;AAC1E,QAAQ,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;AAC5D,YAAY,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC;AACrD,QAAQ;AACR,QAAQ,MAAM,OAAO,GAAG,CAAC,aAAa,EAAE,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC;AAC5E,QAAQ,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;AACzI,QAAQ,OAAO,QAAQ,CAAC,IAAI;AAC5B,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,MAAM,KAAK;AACnB,IAAI;AACJ;AACA;AACA,SAAS,kBAAkB,CAAC,MAAM,EAAE;AACpC,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;AAC7C,QAAQ,OAAO,IAAI;AACnB,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,iBAAiB,CAAC,EAAE;AAC7D,QAAQ,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC;AACjC,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;AAChE,YAAY,OAAO,KAAK,CAAC,IAAI,EAAE;AAC/B,IAAI;AACJ,IAAI,OAAO,IAAI;AACf;AACA,SAAS,kBAAkB,CAAC,MAAM,EAAE;AACpC,IAAI,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,GAAG,SAAS;AACxF,IAAI,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;AACxE,QAAQ,OAAO,KAAK;AACpB;AACA;AACA,IAAI,OAAO,SAAS;AACpB;AACO,eAAe,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;AACnD,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACtB;AACA,IAAI,MAAM,WAAW,GAAG;AACxB,QAAQ,eAAe,EAAE,IAAI;AAC7B,QAAQ,SAAS,EAAE,IAAI,GAAG,QAAQ,GAAG,QAAQ;AAC7C,KAAK;AACL;AACA,IAAI,IAAI,IAAI,EAAE;AACd,QAAQ,WAAW,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI;AAC7C,QAAQ,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,SAAS;AACxD;AACA;AACA,QAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE;AAChF,YAAY,WAAW,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ;AACnD,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;AACnJ,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI;AACtE,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;AACtB;AACA;AACA;AACA,QAAQ,MAAM,UAAU,GAAG,CAAC,EAAE,GAAG,kBAAkB,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,cAAc;AACvK,QAAQ,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,MAAM,MAAM,GAAG,EAAE;AAC3F,YAAY,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE;AAC5E,QAAQ;AACR,QAAQ,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE;AAClD,IAAI;AACJ,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE;AACnI,QAAQ,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC;AAC/C,IAAI;AACJ;AACA,IAAI,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW;AACjD,IAAI,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,GAAG,WAAW,EAAE;AAChD,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,uCAAuC,EAAE,CAAC,WAAW,IAAI,IAAI,GAAG,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AACpK,IAAI;AACJ,IAAI,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK;AAC5C;AACA;AACA;AACA;AACA,IAAI,MAAM,YAAY,GAAG,CAAC,EAAE,GAAG,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,cAAc;AACjH;AACA,IAAI,IAAI,cAAc;AACtB,IAAI,IAAI;AACR,QAAQ,cAAc,GAAG,MAAM,KAAK,CAAC,YAAY,EAAE;AACnD,YAAY,MAAM,EAAE,KAAK;AACzB,YAAY,OAAO,EAAE;AACrB,gBAAgB,cAAc,EAAE,IAAI,CAAC,IAAI;AACzC,aAAa;AACb,YAAY,IAAI,EAAE;AAClB,SAAS,CAAC;AACV,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB;AACA;AACA,QAAQ,MAAM,OAAO,GAAG,QAAQ,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ,GAAG,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AACzI,QAAQ,OAAO;AACf,YAAY,MAAM,EAAE,SAAS;AAC7B,YAAY,IAAI,EAAE,YAAY;AAC9B,YAAY,MAAM,EAAE,CAAC,sDAAsD,EAAE,OAAO,CAAC,CAAC;AACtF,YAAY,SAAS,EAAE,KAAK;AAC5B,SAAS;AACT,IAAI;AACJ;AACA,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,EAAE;AAC5B,QAAQ,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;AACnD,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,2BAA2B,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9E,IAAI;AACJ;AACA;AACA;AACA,IAAI,IAAI,YAAY,GAAG,IAAI;AAC3B,IAAI,IAAI;AACR,QAAQ,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE;AAClD,QAAQ,YAAY,GAAG,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ;AAC9G,cAAc,MAAM,CAAC;AACrB,cAAc,MAAM;AACpB,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf;AACA;AACA,QAAQ,YAAY,GAAG,IAAI;AAC3B,IAAI;AACJ,IAAI,MAAM,GAAG,GAAG,CAAC,YAAY,IAAI,OAAO,YAAY,CAAC,GAAG,KAAK,QAAQ,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;AACpG,UAAU,YAAY,CAAC;AACvB,UAAU,IAAI;AACd,IAAI,OAAO;AACX,QAAQ,MAAM,EAAE,UAAU;AAC1B,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,kBAAkB,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,YAAY;AACnG,QAAQ,GAAG;AACX,QAAQ,UAAU,EAAE,kBAAkB,CAAC,YAAY,CAAC;AACpD,KAAK;AACL;AACO,eAAe,WAAW,CAAC,OAAO,EAAE;AAC3C,IAAI,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE;AACpC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAC9B,QAAQ,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC;AACnF,IAAI;AACJ,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC;AACnD;AACO,eAAe,eAAe,CAAC,WAAW,EAAE;AACnD,IAAI,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE;AACpC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAC9B,QAAQ,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC;AACnF,IAAI;AACJ,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,WAAW,CAAC;AAC3D;AACO,eAAe,wBAAwB,CAAC,WAAW,EAAE,QAAQ,EAAE;AACtE,IAAI,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE;AACpC,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;AAC9B,QAAQ,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC;AACnF,IAAI;AACJ,IAAI,OAAO,MAAM,CAAC,YAAY,CAAC,wBAAwB,CAAC,WAAW,EAAE,QAAQ,CAAC;AAC9E;AACO,eAAe,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE;AAChD,IAAI,IAAI;AACR,QAAQ,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;AACnJ,QAAQ,OAAO,QAAQ,CAAC,IAAI;AAC5B,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,MAAM,KAAK;AACnB,IAAI;AACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC3gDA,MAAM,kBAAkB,GAAG,KAAK;AAChC,MAAM,oBAAoB,GAAG,EAAE;AAC/B,MAAM,wBAAwB,GAAG,IAAI;AACrC;AACA,MAAM,0BAA0B,GAAG,CAAC;AACpC,SAAS,SAAS,CAAC,KAAK,EAAE;AAC1B,IAAI,MAAM,OAAO,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,OAAO;AAC/E,IAAI,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC;AACtF;AACA,SAAS,iBAAiB,CAAC,OAAO,EAAE;AACpC,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,WAAW,IAAI,mBAAmB,IAAI,OAAO;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,MAAM,EAAE;AACrC,IAAI,QAAQ,MAAM,CAAC,KAAK;AACxB,QAAQ,KAAK,iBAAiB;AAC9B,QAAQ,KAAK,eAAe;AAC5B,YAAY,OAAO,eAAe;AAClC,QAAQ,KAAK,kBAAkB;AAC/B,QAAQ,KAAK,0BAA0B;AACvC,QAAQ,KAAK,gBAAgB;AAC7B,YAAY,OAAO,gBAAgB;AACnC,QAAQ;AACR,YAAY,OAAO,IAAI;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,2BAA2B,CAAC,OAAO,EAAE,MAAM,EAAE;AACtD,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC7D,QAAQ,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC;AACxF,IAAI;AACJ,IAAI,IAAI,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,EAAE;AACxC,QAAQ,MAAM,IAAI,KAAK,CAAC,CAAC,uCAAuC,EAAE,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACnI,YAAY,+CAA+C,CAAC;AAC5D,IAAI;AACJ,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE;AACpC,QAAQ,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC;AACpD,QAAQ,IAAI,QAAQ,IAAI,QAAQ,KAAK,OAAO,CAAC,KAAK,EAAE;AACpD,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,2BAA2B,EAAE,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;AACvH,QAAQ;AACR,IAAI;AACJ;AACA,SAAS,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE;AACzC,IAAI,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;AAC1I;AACA,eAAe,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE;AAC3C,IAAI,MAAM,KAAK,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,CAAC;AACrE,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;AAC1B,QAAQ,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,wCAAwC,EAAE;AACpF,IAAI,MAAM,UAAU,GAAG,CAAC,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,GAAG,SAAS;AAC9I,IAAI,OAAO,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,0BAA0B,CAAC;AAC3E;AACA,eAAe,gBAAgB,CAAC,MAAM,EAAE,OAAO,EAAE;AACjD,IAAI,IAAI,EAAE,EAAE,EAAE;AACd,IAAI,MAAM,QAAQ,GAAG,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,UAAU;AACnJ,IAAI,IAAI,QAAQ;AAChB,QAAQ,OAAO,QAAQ;AACvB,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,IAAI,EAAE;AACtF,IAAI,IAAI,CAAC,MAAM,EAAE;AACjB,QAAQ,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC;AACxF,IAAI;AACJ,IAAI,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,OAAO,iBAAiB,CAAC;AAC1D,IAAI,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AACzD,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACtB,IAAI,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;AACvD,IAAI,IAAI,WAAW,GAAG,IAAI;AAC1B,IAAI,IAAI,WAAW;AACnB,IAAI,IAAI;AACR,QAAQ,IAAI,OAAO,GAAG,CAAC,oBAAoB,KAAK,UAAU,EAAE;AAC5D,YAAY,OAAO,cAAc,CAAC,OAAO,EAAE,4DAA4D,CAAC;AACxG,QAAQ;AACR,QAAQ,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AAChF,QAAQ,WAAW,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI;AACvL,QAAQ,WAAW,GAAG,CAAC,EAAE,GAAG,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,QAAQ,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI;AAC9I,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,OAAO,cAAc,CAAC,OAAO,EAAE,CAAC,gCAAgC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7F,IAAI;AACJ,IAAI,IAAI,WAAW,EAAE;AACrB;AACA,QAAQ,IAAI,WAAW,CAAC,GAAG,EAAE;AAC7B,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACrF,QAAQ;AACR,QAAQ,MAAM,SAAS,GAAG;AAC1B,YAAY,MAAM,EAAE,WAAW;AAC/B,YAAY,KAAK,EAAE,OAAO,CAAC,KAAK;AAChC,YAAY,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;AAC1D,YAAY,KAAK,EAAE,OAAO,CAAC,KAAK;AAChC,YAAY,aAAa,EAAE,OAAO,CAAC,aAAa;AAChD,YAAY,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;AACxD,YAAY,KAAK,EAAE,OAAO,CAAC,KAAK;AAChC,YAAY,uBAAuB,EAAE,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,MAAM,GAAG,WAAW,GAAG,CAAC;AACrG,YAAY,UAAU,EAAE,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;AACzD,SAAS;AACT,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ;AACA;AACA,IAAI,IAAI,WAAW;AACnB,IAAI,IAAI;AACR,QAAQ,WAAW,GAAG,OAAO,GAAG,CAAC,cAAc,KAAK,UAAU,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,WAAW,CAAC,GAAG,SAAS;AAClH,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,OAAO,cAAc,CAAC,OAAO,EAAE,CAAC,4BAA4B,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzF,IAAI;AACJ,IAAI,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACzC,QAAQ,OAAO,cAAc,CAAC,OAAO,EAAE,gEAAgE,CAAC;AACxG,IAAI;AACJ,IAAI,IAAI,WAAW,IAAI,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE;AAC3D,QAAQ,OAAO,cAAc,CAAC,OAAO,EAAE,CAAC,8BAA8B,EAAE,WAAW,CAAC,2CAA2C,EAAE,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;AACvK,IAAI;AACJ;AACA,IAAI,IAAI,OAAO;AACf,IAAI,IAAI;AACR,QAAQ,OAAO,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,aAAa,EAAE;AAClE,YAAY,8BAA8B,EAAE,CAAC;AAC7C,YAAY,UAAU,EAAE,WAAW;AACnC,SAAS,CAAC;AACV,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB,QAAQ,OAAO,cAAc,CAAC,OAAO,EAAE,CAAC,oCAAoC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACjG,IAAI;AACJ,IAAI,IAAI,OAAO,EAAE;AACjB,QAAQ,IAAI,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE;AAC/H,YAAY,MAAM,IAAI,KAAK,CAAC,CAAC,oBAAoB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACtF,QAAQ;AACR,QAAQ,MAAM,SAAS,GAAG;AAC1B,YAAY,MAAM,EAAE,WAAW;AAC/B,YAAY,KAAK,EAAE,OAAO,CAAC,KAAK;AAChC,YAAY,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;AAC1D,YAAY,KAAK,EAAE,OAAO,CAAC,KAAK;AAChC,YAAY,aAAa,EAAE,OAAO,CAAC,aAAa;AAChD,YAAY,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;AACxD,YAAY,KAAK,EAAE,OAAO,CAAC,KAAK;AAChC,YAAY,uBAAuB,EAAE,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,MAAM,GAAG,WAAW,GAAG,CAAC,CAAC;AACzJ,YAAY,UAAU,EAAE,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;AACzD,SAAS;AACT,QAAQ,OAAO,SAAS;AACxB,IAAI;AACJ,IAAI,OAAO;AACX,QAAQ,MAAM,EAAE,oBAAoB;AACpC,QAAQ,KAAK,EAAE,OAAO,CAAC,KAAK;AAC5B,QAAQ,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;AACtD,QAAQ,KAAK,EAAE,OAAO,CAAC,KAAK;AAC5B,QAAQ,aAAa,EAAE,OAAO,CAAC,aAAa;AAC5C,QAAQ,KAAK,EAAE,OAAO,CAAC,KAAK;AAC5B,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE;AAC3D,IAAI,IAAI,EAAE,EAAE,EAAE;AACd,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ,EAAE;AACvF,QAAQ,MAAM,IAAI,KAAK,CAAC,sEAAsE,CAAC;AAC/F,IAAI;AACJ,IAAI,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW;AACtC,QAAQ,OAAO,OAAO;AACtB,IAAI,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,EAAE;AACxC,QAAQ,MAAM,IAAI,KAAK,CAAC,uHAAuH;AAC/I,YAAY,sEAAsE,CAAC;AACnF,IAAI;AACJ,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM,SAAS,EAAE;AACxM;AACA,IAAI,2BAA2B,CAAC,OAAO,EAAE,MAAM,CAAC;AAChD,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE;AACpC,QAAQ,OAAO,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC;AACxD,IAAI;AACJ;AACA;AACA,IAAI,OAAO,cAAc,CAAC,OAAO,EAAE,+CAA+C,CAAC;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE;AACzD,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACtB,IAAI,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW,IAAI,OAAO,CAAC,aAAa,KAAK,IAAI,EAAE;AACpH;AACA,QAAQ,OAAO,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC;AACnD,IAAI;AACJ,IAAI,MAAM,SAAS,GAAG,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,kBAAkB;AACpJ,IAAI,MAAM,WAAW,GAAG,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,WAAW,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,oBAAoB;AAC1J,IAAI,MAAM,cAAc,GAAG,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,cAAc,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,wBAAwB;AACpK,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;AAChC,IAAI,IAAI,OAAO,GAAG,OAAO;AACzB,IAAI,IAAI,QAAQ,GAAG,CAAC;AACpB,IAAI,OAAO,QAAQ,GAAG,WAAW,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE;AACzE,QAAQ,IAAI,CAAC,EAAE,GAAG,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO;AACnI,YAAY,OAAO,OAAO;AAC1B,QAAQ,QAAQ,EAAE;AAClB,QAAQ,OAAO,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC;AAC5D,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,WAAW;AAC1C,YAAY,OAAO,OAAO;AAC1B,QAAQ,IAAI,QAAQ,IAAI,WAAW;AACnC,YAAY;AACZ,QAAQ,MAAM,SAAS,GAAG,SAAS,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;AAC9D,QAAQ,IAAI,SAAS,IAAI,CAAC;AAC1B,YAAY;AACZ,QAAQ,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AACrJ,QAAQ,IAAI,CAAC,KAAK;AAClB,YAAY,OAAO,OAAO;AAC1B,IAAI;AACJ,IAAI,OAAO,OAAO;AAClB;AACA;AACA,SAAS,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE;AACxC,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,OAAO;AACtE,QAAQ,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;AACrC,IAAI,IAAI,CAAC,MAAM;AACf,QAAQ,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1E,IAAI,OAAO,IAAI,OAAO,CAAC,OAAO,IAAI;AAClC,QAAQ,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM;AACvC,YAAY,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC;AACxD,YAAY,OAAO,CAAC,IAAI,CAAC;AACzB,QAAQ,CAAC,EAAE,EAAE,CAAC;AACd,QAAQ,MAAM,OAAO,GAAG,MAAM;AAC9B,YAAY,YAAY,CAAC,KAAK,CAAC;AAC/B,YAAY,OAAO,CAAC,KAAK,CAAC;AAC1B,QAAQ,CAAC;AACT,QAAQ,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACjE,IAAI,CAAC,CAAC;AACN;;AC7PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,SAAS,CAAC,IAAI,EAAE,mBAAmB,EAAE;AAC3D;AACA;AACA;AACA;AACA,IAAI,MAAM,IAAI,GAAG,OAAO,mBAAmB,KAAK;AAChD,UAAU,EAAE,MAAM,EAAE,mBAAmB;AACvC,UAAU,mBAAmB;AAC7B,IAAI,OAAO,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC;AAClC;AACA;AACA;AACA;AACA;AACO,eAAe,qBAAqB,GAAG;AAC9C,IAAI,OAAO,uBAAuB,EAAE;AACpC;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,UAAU,CAAC,IAAI,EAAE;AACjC,IAAI,YAAY,CAAC,IAAI,CAAC;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE;AAC5C,IAAI,OAAO,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,oBAAoB,GAAG;AAC7C,IAAI,OAAO,sBAAsB,EAAE;AACnC;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACA;AACO,MAAM,yBAAyB,SAAS,KAAK,CAAC;AACrD,IAAI,WAAW,CAAC,SAAS,EAAE;AAC3B,QAAQ,KAAK,CAAC,CAAC,+CAA+C,EAAE,SAAS,CAAC,oBAAoB,CAAC;AAC/F,YAAY,CAAC,2EAA2E,CAAC;AACzF,YAAY,CAAC,iDAAiD,CAAC,CAAC;AAChE,QAAQ,IAAI,CAAC,IAAI,GAAG,2BAA2B;AAC/C,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,YAAY,CAAC,MAAM,EAAE;AACrC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AAClC,QAAQ,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC;AAC1D,IAAI;AACJ;AACA;AACA;AACA,IAAI,MAAM,QAAQ,GAAG,mBAAmB,CAAC,qBAAqB,EAAE,MAAM,CAAC;AACvE;AACA;AACA;AACA,IAAI,MAAM,iBAAiB,GAAG,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC5E;AACA;AACA;AACA,IAAI,MAAM,aAAa,GAAG,CAAC,IAAI,KAAK;AACpC,QAAQ,IAAI,EAAE;AACd,QAAQ,MAAM,IAAI,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;AACnE,QAAQ,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;AAC1L,IAAI,CAAC;AACL,IAAI,OAAO;AACX,QAAQ,KAAK,EAAE,QAAQ,CAAC,KAAK;AAC7B,QAAQ,SAAS,EAAE,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;AACtD,QAAQ,GAAG,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AAC3D,QAAQ,OAAO,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,OAAO,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AACrE,QAAQ,MAAM,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AAC/E,QAAQ,cAAc,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AAC7F,QAAQ,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,KAAK,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AAC/D,QAAQ,SAAS,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,KAAK,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AAC7F,QAAQ,QAAQ,EAAE,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,KAAK,QAAQ,CAAC,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AACjI,QAAQ,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,YAAY,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;AAC7E,QAAQ,SAAS,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK;AACtC,YAAY,IAAI,EAAE;AAClB,YAAY,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,UAAU,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC;AACzG;AACA,YAAY,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AACpK,YAAY,OAAO,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC;AACxC,QAAQ,CAAC;AACT,QAAQ,GAAG,EAAE,MAAM,EAAE,MAAM,IAAI,yBAAyB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAClE,QAAQ,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AAC1E,KAAK;AACL;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAIA;AACY,MAAC,8BAA8B,GAAG;AAC9C;AACY,MAAC,0BAA0B,GAAG;AAC1C;AACA,MAAM,yBAAyB,GAAG,KAAK;AACvC;AACA,MAAM,gBAAgB,GAAG,GAAG;AAC5B;AACA;AACA,MAAM,iBAAiB,GAAG,IAAI;AAC9B;AACA;AACA;AACA;AACA;AACA,MAAM,0BAA0B,GAAG,aAAa;AAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE;AAC1B;AACA;AACA;AACA;AACA;AACA,MAAM,eAAe,GAAG,IAAI,GAAG,EAAE;AACjC;AACA,IAAI,MAAM,GAAG,KAAK;AAClB;AACA;AACA;AACA,SAAS,QAAQ,CAAC,KAAK,EAAE;AACzB,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC5B,QAAQ,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AAClC,IAAI,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC5C,QAAQ,MAAM,GAAG,GAAG,EAAE;AACtB,QAAQ,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;AACjD,YAAY,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACvC,QAAQ,OAAO,GAAG;AAClB,IAAI;AACJ,IAAI,OAAO,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;AAC7B,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC5B,QAAQ,OAAO,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC;AACtC,IAAI,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC5C,QAAQ,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;AACvC,QAAQ,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE;AACjD,YAAY,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3C,QAAQ,OAAO,GAAG;AAClB,IAAI;AACJ,IAAI,OAAO,KAAK;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,gBAAgB,CAAC,IAAI,EAAE;AACvC,IAAI,IAAI,EAAE;AACV,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC;AAC1I,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,kBAAkB,CAAC,MAAM,EAAE;AAC3C,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC;AACzE;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,KAAK,EAAE;AAC1B,IAAI,IAAI,CAAC,GAAG,IAAI;AAChB,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;AACzC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,UAAU;AAC7D,IAAI,OAAO,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzB;AACA,eAAe,eAAe,CAAC,KAAK,EAAE;AACtC,IAAI,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;AACzD,IAAI,OAAO,KAAK,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAChH;AACA,SAAS,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE;AACzD,IAAI,IAAI,EAAE;AACV,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;AACtJ;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,KAAK,EAAE;AAClC,IAAI,OAAO,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,YAAY,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,gBAAgB,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,OAAO,KAAK,IAAI;AAClP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,yBAAyB,CAAC,KAAK,EAAE;AAC1C,IAAI,IAAI,KAAK,IAAI,IAAI;AACrB,QAAQ,OAAO,IAAI,CAAC;AACpB;AACA;AACA;AACA;AACA,IAAI,MAAM,MAAM,GAAG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,GAAG,KAAK,CAAC;AAC5D,UAAU,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ,GAAG,KAAK,CAAC;AACvD,cAAc,SAAS;AACvB,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;AAC9B,QAAQ,OAAO,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,IAAI,GAAG;AAChE,IAAI;AACJ,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI;AAC3B,IAAI,IAAI,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,aAAa,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,cAAc;AAC5G,QAAQ,OAAO,IAAI;AACnB,IAAI,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe;AACrE,QAAQ,OAAO,IAAI;AACnB,IAAI,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ;AACxC,QAAQ,OAAO,IAAI,CAAC;AACpB,IAAI,OAAO,KAAK;AAChB;AACA,SAAS,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE;AAC9C,IAAI,IAAI,EAAE;AACV,IAAI,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,GAAG,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;AAC7K,IAAI,IAAI;AACR,QAAQ,GAAG,CAAC,KAAK,GAAG,KAAK;AACzB,QAAQ,GAAG,CAAC,SAAS,GAAG,SAAS;AACjC,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf;AACA,IAAI;AACJ,IAAI,OAAO,GAAG;AACd;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,KAAK,EAAE;AAC9B,IAAI,MAAM,CAAC,GAAG,OAAO,KAAK,KAAK,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,8BAA8B;AACnG,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,CAAC,CAAC;AAClD;AACA,SAAS,iBAAiB,CAAC,KAAK,EAAE;AAClC,IAAI,IAAI,GAAG,GAAG,QAAQ;AACtB,IAAI,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW;AACrC,QAAQ,IAAI,CAAC,CAAC,UAAU,GAAG,GAAG;AAC9B,YAAY,GAAG,GAAG,CAAC,CAAC,UAAU;AAC9B,IAAI,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,8BAA8B;AACrE,IAAI,MAAM,OAAO,GAAG,IAAI,KAAK,KAAK,CAAC,iBAAiB;AACpD,IAAI,KAAK,CAAC,iBAAiB,GAAG,IAAI;AAClC;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,OAAO,IAAI,KAAK,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,mBAAmB,KAAK,CAAC,EAAE;AACtF,QAAQ,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC;AACpD,IAAI;AACJ;AACA,SAAS,UAAU,CAAC,KAAK,EAAE;AAC3B,IAAI,IAAI,KAAK,CAAC,KAAK,EAAE;AACrB,QAAQ,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC;AACjC,QAAQ,KAAK,CAAC,KAAK,GAAG,IAAI;AAC1B,IAAI;AACJ;AACA,SAAS,YAAY,CAAC,KAAK,EAAE;AAC7B,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,yBAAyB,EAAE,KAAK,CAAC,iBAAiB,GAAG,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC;AAC9G;AACA;AACA,IAAI,OAAO,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,KAAK,CAAC,iBAAiB,CAAC,CAAC;AAC5G;AACA,SAAS,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE;AACtC,IAAI,UAAU,CAAC,KAAK,CAAC;AACrB,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC;AACpC,QAAQ;AACR,IAAI,IAAI,MAAM;AACd,QAAQ,OAAO;AACf,IAAI,KAAK,CAAC,KAAK,GAAG,UAAU,CAAC,MAAM;AACnC,QAAQ,KAAK,CAAC,KAAK,GAAG,IAAI;AAC1B,QAAQ,KAAK,SAAS,CAAC,KAAK,CAAC;AAC7B,IAAI,CAAC,EAAE,OAAO,CAAC;AACf;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,KAAK,EAAE;AAC1B,IAAI,IAAI,KAAK,CAAC,QAAQ;AACtB,QAAQ,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;AACjC,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC;AACpC,QAAQ,OAAO,OAAO,CAAC,OAAO,EAAE;AAChC,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAI;AACzB,IAAI,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU;AAChC,IAAI,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAC/K;AACA;AACA;AACA;AACA;AACA,SAAS,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE;AAChD,IAAI,IAAI,EAAE;AACV,IAAI,KAAK,CAAC,QAAQ,GAAG,KAAK;AAC1B,IAAI,MAAM,KAAK,GAAG,GAAG,KAAK,KAAK,CAAC,UAAU,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;AAC/E,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE;AAC7B,QAAQ,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;AACtC;AACA;AACA,YAAY,KAAK,CAAC,mBAAmB,GAAG,CAAC;AACzC,YAAY,IAAI,CAAC,KAAK,EAAE;AACxB,gBAAgB,IAAI,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,YAAY,MAAM,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,OAAO,MAAM,0BAA0B,CAAC,EAAE;AACpM,oBAAoB,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,SAAS;AACxE;AACA;AACA,oBAAoB,MAAM,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;AAC5H,oBAAoB,IAAI,KAAK,CAAC,YAAY,KAAK,GAAG,EAAE;AACpD,wBAAwB,KAAK,CAAC,YAAY,GAAG,GAAG;AAChD,wBAAwB,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AACxE,wBAAwB,KAAK,CAAC,SAAS,GAAG,QAAQ,CAAC;AACnD,wBAAwB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW;AACzD,4BAA4B,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC;AACzD,oBAAoB;AACpB,gBAAgB;AAChB,gBAAgB,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC;AAC5D,YAAY;AACZ,YAAY;AACZ,QAAQ;AACR;AACA;AACA;AACA;AACA;AACA,QAAQ,KAAK,CAAC,mBAAmB,IAAI,CAAC;AACtC,QAAQ,IAAI,CAAC,KAAK,EAAE;AACpB,YAAY,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,EAAE;AACnD,gBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,GAAG,SAAS,GAAG,SAAS,EAAE,IAAI,CAAC;AAC1F,YAAY;AACZ,YAAY,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;AACpD,QAAQ;AACR,QAAQ;AACR,IAAI;AACJ,IAAI,KAAK,CAAC,mBAAmB,GAAG,CAAC;AACjC,IAAI,IAAI,CAAC,KAAK,EAAE;AAChB,QAAQ,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAClC,QAAQ,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;AACpC,QAAQ,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;AAC7B,QAAQ,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,iBAAiB,CAAC;AACpD,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE;AACxD,IAAI,IAAI,EAAE;AACV,IAAI,MAAM,GAAG,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;AAC5G,IAAI,IAAI,KAAK,CAAC,YAAY,KAAK,GAAG;AAClC,QAAQ;AACR,IAAI,KAAK,CAAC,YAAY,GAAG,GAAG;AAC5B,IAAI,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;AACzD,IAAI,KAAK,CAAC,SAAS,GAAG,QAAQ;AAC9B,IAAI,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW;AACrC,QAAQ,QAAQ,CAAC,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC;AACrC;AACA,SAAS,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE;AAC/B,IAAI,MAAM,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC;AAC/C,IAAI,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,aAAa,KAAK,SAAS;AAC3D,QAAQ,OAAO;AACf,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAI;AACzB,IAAI,KAAK,CAAC,SAAS,GAAG,KAAK;AAC3B,IAAI,KAAK,CAAC,aAAa,GAAG,SAAS;AACnC,IAAI,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW;AACrC,QAAQ,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC;AACjC;AACA,SAAS,QAAQ,CAAC,EAAE,EAAE,GAAG,EAAE;AAC3B,IAAI,IAAI,CAAC,EAAE;AACX,QAAQ;AACR,IAAI,IAAI;AACR,QAAQ,EAAE,CAAC,GAAG,CAAC;AACf,IAAI;AACJ,IAAI,OAAO,EAAE,EAAE;AACf;AACA,IAAI;AACJ;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE;AACzC,IAAI,OAAO;AACX,QAAQ,GAAG;AACX,QAAQ,KAAK,EAAE,GAAG,CAAC,KAAK;AACxB,QAAQ,IAAI,EAAE,GAAG,CAAC,IAAI;AACtB,QAAQ,SAAS,EAAE,GAAG,CAAC,SAAS;AAChC,QAAQ,IAAI,EAAE,GAAG,CAAC,IAAI;AACtB,QAAQ,QAAQ;AAChB,QAAQ,WAAW,EAAE,IAAI,GAAG,EAAE;AAC9B,QAAQ,UAAU,EAAE,CAAC;AACrB,QAAQ,YAAY,EAAE,IAAI;AAC1B,QAAQ,SAAS,EAAE,SAAS;AAC5B,QAAQ,iBAAiB,EAAE,GAAG,CAAC,UAAU;AACzC,QAAQ,KAAK,EAAE,IAAI;AACnB,QAAQ,QAAQ,EAAE,KAAK;AACvB,QAAQ,mBAAmB,EAAE,CAAC;AAC9B,QAAQ,QAAQ,EAAE,KAAK;AACvB,QAAQ,SAAS,EAAE,SAAS;AAC5B,QAAQ,aAAa,EAAE,EAAE;AACzB,QAAQ,YAAY,EAAE,OAAO,CAAC,OAAO,EAAE;AACvC,KAAK;AACL;AACA;AACA,eAAe,MAAM,CAAC,GAAG,EAAE;AAC3B,IAAI,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC;AACrD;AACA;AACA;AACA,IAAI,IAAI,GAAG,CAAC,QAAQ;AACpB,QAAQ;AACR,IAAI,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC;AAC/E,IAAI,IAAI,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC;AACjC,IAAI,IAAI,OAAO,GAAG,KAAK;AACvB,IAAI,IAAI,CAAC,KAAK,EAAE;AAChB,QAAQ,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC;AAC/C,QAAQ,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;AAChC,QAAQ,OAAO,GAAG,IAAI;AACtB,IAAI;AACJ,IAAI,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;AAC9B,IAAI,GAAG,CAAC,KAAK,GAAG,KAAK;AACrB,IAAI,iBAAiB,CAAC,KAAK,CAAC;AAC5B,IAAI,IAAI,OAAO,EAAE;AACjB;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,MAAM,EAAE;AACpB,YAAY,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE;AAClD,YAAY;AACZ,QAAQ;AACR,QAAQ,KAAK,CAAC,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC;AAC7C,QAAQ,MAAM,KAAK,CAAC,YAAY;AAChC,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,KAAK,CAAC,QAAQ,EAAE;AACxB;AACA,QAAQ,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;AAC7C,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,KAAK,CAAC,SAAS,EAAE;AACzB;AACA;AACA;AACA,QAAQ,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC;AAC9C,IAAI;AACJ;AACA,IAAI,MAAM,KAAK,CAAC,YAAY;AAC5B;AACA,SAAS,MAAM,CAAC,GAAG,EAAE;AACrB,IAAI,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK;AAC3B,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;AAC7C,QAAQ,OAAO;AACf,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC;AACjC,IAAI,GAAG,CAAC,KAAK,GAAG,IAAI;AACpB,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,EAAE;AACtC,QAAQ,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;AAC9B,QAAQ,UAAU,CAAC,KAAK,CAAC;AACzB,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;AAC7C,YAAY,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACtC,IAAI;AACJ,SAAS;AACT,QAAQ,iBAAiB,CAAC,KAAK,CAAC;AAChC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,cAAc,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE;AACrE,IAAI,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,UAAU,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG,OAAO,GAAG,EAAE,CAAC;AAC9H,IAAI,MAAM,GAAG,GAAG;AAChB,QAAQ,MAAM,EAAE,IAAI,CAAC,MAAM;AAC3B,QAAQ,OAAO,EAAE,IAAI,CAAC,OAAO;AAC7B,QAAQ,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC;AAClD,QAAQ,KAAK,EAAE,YAAY,CAAC,KAAK;AACjC,QAAQ,IAAI;AACZ,QAAQ,SAAS;AACjB,QAAQ,IAAI;AACZ,QAAQ,KAAK,EAAE,IAAI;AACnB,QAAQ,QAAQ,EAAE,KAAK;AACvB,QAAQ,aAAa,EAAE,IAAI;AAC3B,KAAK;AACL,IAAI,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;AAC5B,IAAI,IAAI;AACR,QAAQ,MAAM,MAAM,CAAC,GAAG,CAAC;AACzB,IAAI;AACJ,IAAI,OAAO,KAAK,EAAE;AAClB;AACA;AACA;AACA;AACA,QAAQ,cAAc,CAAC,GAAG,CAAC;AAC3B,QAAQ,MAAM,KAAK;AACnB,IAAI;AACJ,IAAI,OAAO,YAAY;AACvB,QAAQ,cAAc,CAAC,GAAG,CAAC,CAAC;AAC5B,QAAQ,MAAM,CAAC,GAAG,CAAC;AACnB,IAAI,CAAC;AACL;AACA;AACA,SAAS,cAAc,CAAC,GAAG,EAAE;AAC7B,IAAI,GAAG,CAAC,QAAQ,GAAG,IAAI;AACvB,IAAI,IAAI,GAAG,CAAC,aAAa,EAAE;AAC3B,QAAQ,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC;AACvC,QAAQ,GAAG,CAAC,aAAa,GAAG,IAAI;AAChC,IAAI;AACJ,IAAI,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC;AAC/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,sBAAsB,GAAG;AACzC,IAAI,KAAK,iBAAiB,EAAE;AAC5B;AACA,eAAe,iBAAiB,GAAG;AACnC,IAAI,IAAI,EAAE;AACV,IAAI,MAAM,aAAa,GAAG,IAAI,GAAG,EAAE;AACnC,IAAI,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE;AAChD;AACA,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC;AAC7E,YAAY;AACZ,QAAQ,IAAI,OAAO,GAAG,CAAC,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI;AACjG,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,YAAY,IAAI;AAChB,gBAAgB,OAAO,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,KAAK,CAAC;AAC5D,gBAAgB,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC;AACvD,YAAY;AACZ,YAAY,OAAO,EAAE,EAAE;AACvB;AACA;AACA;AACA;AACA,gBAAgB,OAAO,GAAG,IAAI;AAC9B,YAAY;AACZ,QAAQ;AACR,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;AAC7C,YAAY,SAAS;AACrB,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE;AAC3G,YAAY,SAAS;AACrB,QAAQ;AACR;AACA;AACA;AACA;AACA,QAAQ,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC;AAC5E,QAAQ,KAAK,CAAC,UAAU,IAAI,CAAC;AAC7B,QAAQ,UAAU,CAAC,KAAK,CAAC;AACzB;AACA;AACA;AACA,QAAQ,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK;AAC7C,YAAY,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;AACtC,QAAQ,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;AAC9B,YAAY,CAAC,CAAC,KAAK,GAAG,IAAI;AAC1B,YAAY,QAAQ,CAAC,CAAC,CAAC;AACvB,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,GAAG,EAAE;AACvB,IAAI,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;AAC7B,IAAI,IAAI,GAAG,CAAC,QAAQ;AACpB,QAAQ;AACR,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM;AAC3B;AACA;AACA;AACA,QAAQ,IAAI,GAAG,CAAC,QAAQ;AACxB,YAAY,MAAM,CAAC,GAAG,CAAC;AACvB,IAAI,CAAC,EAAE,MAAM;AACb,QAAQ,IAAI,GAAG,CAAC,QAAQ;AACxB,YAAY;AACZ,QAAQ,GAAG,CAAC,aAAa,GAAG,UAAU,CAAC,MAAM,QAAQ,CAAC,GAAG,CAAC,EAAE,iBAAiB,CAAC;AAC9E,IAAI,CAAC,CAAC;AACN;AACA;AACO,SAAS,0BAA0B,GAAG;AAC7C;AACA;AACA,IAAI,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,eAAe,CAAC;AAC1C,QAAQ,cAAc,CAAC,GAAG,CAAC;AAC3B,IAAI,eAAe,CAAC,KAAK,EAAE;AAC3B,IAAI,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE;AAC3C,QAAQ,KAAK,CAAC,UAAU,IAAI,CAAC;AAC7B,QAAQ,UAAU,CAAC,KAAK,CAAC;AACzB,QAAQ,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE;AACjC,IAAI;AACJ,IAAI,QAAQ,CAAC,KAAK,EAAE;AACpB;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,IAAI,EAAE;AACzB,IAAI,IAAI,IAAI,KAAK,MAAM;AACvB,QAAQ;AACR,IAAI,MAAM,GAAG,IAAI;AACjB,IAAI,IAAI,MAAM,EAAE;AAChB,QAAQ,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE;AAC7C,YAAY,UAAU,CAAC,KAAK,CAAC;AAC7B,QAAQ;AACR,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA,IAAI,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE;AAC3C,QAAQ,MAAM,KAAK,GAAG,KAAK,CAAC,mBAAmB,GAAG;AAClD,cAAc,YAAY,CAAC,KAAK;AAChC,cAAc,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,gBAAgB,CAAC;AAC1D,QAAQ,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC;AAClC,IAAI;AACJ;AACA,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,OAAO,QAAQ,CAAC,gBAAgB,KAAK,UAAU,EAAE;AACxF,IAAI,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM;AAC9B,IAAI,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,MAAM;AACxD,QAAQ,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AACpC,IAAI,CAAC,CAAC;AACN;AACA;AACA,qBAAqB,CAAC,sBAAsB,CAAC;;ACtlB7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,SAAS,CAAC,KAAK,EAAE;AACjC,IAAI,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,eAAe,GAAG;AAClC,IAAI,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE;AAC9C;;AClCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,GAAG,GAAG;AACtB,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,SAAS,CAAC,QAAQ,EAAE;AACpC,IAAI,MAAM,EAAE,GAAG,QAAQ,YAAY,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,QAAQ;AACvE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC;AAChC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,QAAQ,CAAC,OAAO,EAAE;AAClC,IAAI,OAAO,OAAO,GAAG,IAAI;AACzB;;ACjEA;AACO,eAAe,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE;AACvD,IAAI,MAAM,cAAc,GAAG,MAAM,oDAAO,8BAAkB,KAAC;AAC3D,IAAI,OAAO,cAAc,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC;AAC1D;;ACJA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,GAAG,CAACC,SAAI,IAAIA,SAAI,CAAC,MAAM,KAAK,UAAU,CAAC,EAAE,CAAC,EAAE;AACtD,IAAI,IAAI,CAAC,GAAG,EAAE;AACd,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AACvF,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACnB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,OAAO,MAAM,CAAC,qBAAqB,KAAK,UAAU;AACvE,QAAQ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAChF,YAAY,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1F,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACjC,QAAQ;AACR,IAAI,OAAO,CAAC;AACZ,CAAC;AAGD;AACA,MAAM,qBAAqB,GAAG,8BAA8B;AACrD,MAAM,mBAAmB,SAAS,KAAK,CAAC;AAC/C,IAAI,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE;AAC9C,QAAQ,KAAK,CAAC,OAAO,CAAC;AACtB,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU;AACpC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;AAC9B,QAAQ,IAAI,CAAC,IAAI,GAAG,qBAAqB;AACzC,IAAI;AACJ;AACA,SAAS,gBAAgB,CAAC,OAAO,EAAE;AACnC,IAAI,IAAI,CAAC,OAAO;AAChB,QAAQ,OAAO,SAAS;AACxB,IAAI,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;AAChH,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,EAAE;AACzD,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AACtC,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC3C,QAAQ,MAAM,IAAI,mBAAmB,CAAC,6BAA6B,CAAC;AACpE,IAAI;AACJ;AACA;AACA,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM,SAAS,EAAE;AACnJ,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,YAAY,IAAI,qBAAqB,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAClF;AACA;AACA;AACA;AACA,IAAI,MAAM,UAAU,GAAG,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,eAAe;AACtG,UAAU,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe;AAC/C,UAAU,MAAM,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC;AACjD,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,EAAE,EAAE,GAAG,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,GAAG,UAAU,GAAG,EAAE,EAAE;AACjQ,IAAI,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AAC5C,IAAI,MAAM,SAAS,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,KAAK;AAClF,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC;AACjE;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,GAAG;AACX,IAAI,IAAI,IAAI;AACZ,IAAI,IAAI;AACR,QAAQ,GAAG,GAAG,MAAM,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AAC5C,YAAY,MAAM,EAAE,MAAM;AAC1B,YAAY,OAAO;AACnB,YAAY,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACnF,YAAY,MAAM,EAAE,UAAU,CAAC,MAAM;AACrC,SAAS,CAAC;AACV,QAAQ,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AAC/B,IAAI;AACJ,IAAI,OAAO,GAAG,EAAE;AAChB,QAAQ,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,MAAM,YAAY,EAAE;AACnF,YAAY,MAAM,IAAI,mBAAmB,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,6BAA6B,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;AACzG,QAAQ;AACR,QAAQ,MAAM,IAAI,mBAAmB,CAAC,CAAC,0CAA0C,EAAE,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/L,IAAI;AACJ,YAAY;AACZ,QAAQ,YAAY,CAAC,KAAK,CAAC;AAC3B,IAAI;AACJ,IAAI,IAAI,IAAI,GAAG,IAAI;AACnB,IAAI,IAAI,IAAI,EAAE;AACd,QAAQ,IAAI;AACZ,YAAY,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACnC,QAAQ;AACR,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;AAChC,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACjB,QAAQ,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,mBAAmB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3Q,QAAQ,MAAM,IAAI,mBAAmB,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;AAChE,IAAI;AACJ;AACA,IAAI,OAAO,IAAI;AACf;AACA;AACY,MAAC,SAAS,GAAG,EAAE,MAAM;;AC/GjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAKO,MAAM,eAAe,SAAS,KAAK,CAAC;AAC3C,IAAI,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE;AAC9C,QAAQ,KAAK,CAAC,OAAO,CAAC;AACtB,QAAQ,IAAI,CAAC,UAAU,GAAG,UAAU;AACpC,QAAQ,IAAI,CAAC,OAAO,GAAG,OAAO;AAC9B,QAAQ,IAAI,CAAC,IAAI,GAAG,iBAAiB;AACrC,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,gBAAgB,CAAC,QAAQ,EAAE;AACpC,IAAI,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC;AACjC,IAAI,IAAI,GAAG,CAAC,QAAQ,KAAK,MAAM;AAC/B,QAAQ,GAAG,CAAC,QAAQ,GAAG,QAAQ;AAC/B,SAAS,IAAI,GAAG,CAAC,QAAQ,KAAK,KAAK;AACnC,QAAQ,GAAG,CAAC,QAAQ,GAAG,OAAO;AAC9B;AACA,IAAI,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC5C;AACA,SAAS,oBAAoB,CAAC,OAAO,EAAE;AACvC,IAAI,IAAI,CAAC,OAAO;AAChB,QAAQ,OAAO,SAAS;AACxB,IAAI,MAAM,KAAK,GAAG,EAAE;AACpB,IAAI,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACxD,QAAQ,IAAI,GAAG,CAAC,WAAW,EAAE,KAAK,eAAe;AACjD,YAAY;AACZ,QAAQ,KAAK,CAAC,GAAG,CAAC,GAAG,KAAK;AAC1B,IAAI;AACJ,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,SAAS;AAC5D;AACA,SAAS,gBAAgB,CAAC,OAAO,EAAE;AACnC,IAAI,IAAI,CAAC,OAAO;AAChB,QAAQ,OAAO,KAAK;AACpB,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK,GAAG,CAAC,WAAW,EAAE,KAAK,eAAe;AAC/F,QAAQ,OAAO,KAAK,KAAK,QAAQ;AACjC,QAAQ,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;AAC7C;AACA,eAAe,cAAc,CAAC,cAAc,EAAE,SAAS,EAAE;AACzD,IAAI,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,eAAe,EAAE;AACzF,QAAQ,OAAO,SAAS,CAAC,eAAe,EAAE;AAC1C,IAAI;AACJ,IAAI,OAAO,gBAAgB,CAAC,cAAc,CAAC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAG,EAAE,EAAE;AAC1D,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAC1C,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AACnD,QAAQ,MAAM,IAAI,eAAe,CAAC,yBAAyB,CAAC;AAC5D,IAAI;AACJ;AACA;AACA;AACA;AACA,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM,SAAS,EAAE;AACnJ,IAAI,MAAM,iBAAiB,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;AACpF,IAAI,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE;AAC9C,QAAQ,IAAI,IAAI,CAAC,aAAa;AAC9B,YAAY,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;AAC/B,QAAQ,MAAM,IAAI,eAAe,CAAC,0GAA0G,EAAE,GAAG,CAAC;AAClJ,IAAI;AACJ;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1D,IAAI,MAAM,eAAe,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,eAAe,CAAC;AAC9G,IAAI,IAAI,CAAC,eAAe,EAAE;AAC1B,QAAQ,IAAI,IAAI,CAAC,aAAa,EAAE;AAChC,YAAY,IAAI,MAAM,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;AACzF,gBAAgB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE;AACnC,QAAQ;AACR,aAAa;AACb,YAAY,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;AACzG,YAAY,IAAI,GAAG;AACnB,gBAAgB,OAAO,GAAG;AAC1B,QAAQ;AACR,IAAI;AACJ,IAAI,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC;AAClD,IAAI,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;AAC3D,IAAI,MAAM,eAAe,GAAG,oBAAoB,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;AACxH,IAAI,MAAM,YAAY,GAAG,YAAY;AACrC,QAAQ,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;AACjF,QAAQ,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE;AAC3C,YAAY,MAAM,IAAI,eAAe,CAAC,0GAA0G,EAAE,GAAG,CAAC;AACtJ,QAAQ;AACR,QAAQ,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,eAAe,KAAK,IAAI,IAAI,eAAe,KAAK,MAAM,GAAG,eAAe,GAAG,EAAE,EAAE,GAAG,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,MAAM,GAAG,YAAY,GAAG,EAAE,EAAE,GAAG,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,MAAM,GAAG,UAAU,GAAG,EAAE,EAAE;AACvV,IAAI,CAAC;AACL,IAAI,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AAC5C,IAAI,MAAM,SAAS,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,KAAK;AAClF,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC;AACjE,IAAI,IAAI,GAAG;AACX,IAAI,IAAI;AACR,QAAQ,MAAM,IAAI,GAAG,YAAY,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE;AAC9D,YAAY,MAAM,EAAE,MAAM;AAC1B,YAAY,OAAO,EAAE,MAAM,YAAY,EAAE;AACzC,YAAY,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC;AACtE,YAAY,MAAM,EAAE,UAAU,CAAC,MAAM;AACrC,SAAS,CAAC;AACV,QAAQ,GAAG,GAAG,MAAM,IAAI,EAAE;AAC1B,QAAQ,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,EAAE;AAC/G,YAAY,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE;AAC9C,YAAY,GAAG,GAAG,MAAM,IAAI,EAAE;AAC9B,QAAQ;AACR,IAAI;AACJ,IAAI,OAAO,GAAG,EAAE;AAChB,QAAQ,YAAY,CAAC,KAAK,CAAC;AAC3B,QAAQ,IAAI,GAAG,YAAY,eAAe;AAC1C,YAAY,MAAM,GAAG;AACrB,QAAQ,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,MAAM,YAAY,EAAE;AACnF,YAAY,MAAM,IAAI,eAAe,CAAC,CAAC,gBAAgB,EAAE,QAAQ,CAAC,kBAAkB,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;AACpG,QAAQ;AACR,QAAQ,MAAM,IAAI,eAAe,CAAC,CAAC,qCAAqC,EAAE,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACtL,IAAI;AACJ,IAAI,YAAY,CAAC,KAAK,CAAC;AACvB,IAAI,IAAI,IAAI,GAAG,IAAI;AACnB,IAAI,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AACjC,IAAI,IAAI,IAAI,EAAE;AACd,QAAQ,IAAI;AACZ,YAAY,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACnC,QAAQ;AACR,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;AAChC,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACjB,QAAQ,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AACpQ,QAAQ,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;AACxE;AACA;AACA;AACA,QAAQ,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC;AACvD,QAAQ,IAAI,OAAO,EAAE;AACrB,YAAY,SAAS,CAAC,OAAO,GAAG,OAAO;AACvC,YAAY,SAAS,CAAC,gBAAgB,GAAG,IAAI;AAC7C,YAAY,oBAAoB,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;AACvD,QAAQ;AACR,QAAQ,MAAM,SAAS;AACvB,IAAI;AACJ,IAAI,QAAQ,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,MAAM,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,EAAE;AAClD,IAAI,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;AAClC,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AACnD,QAAQ,MAAM,IAAI,eAAe,CAAC,yBAAyB,CAAC;AAC5D,IAAI;AACJ,IAAI,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1D;AACA;AACA,IAAI,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM,SAAS,EAAE;AACnJ,IAAI,MAAM,IAAI,GAAG,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC;AAClD,IAAI,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC;AAC7E,IAAI,MAAM,YAAY,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;AAC3D,IAAI,MAAM,eAAe,GAAG,oBAAoB,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC;AACxH,IAAI,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,eAAe,KAAK,IAAI,IAAI,eAAe,KAAK,MAAM,GAAG,eAAe,GAAG,EAAE,EAAE,GAAG,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,MAAM,GAAG,YAAY,GAAG,EAAE,EAAE,GAAG,gBAAgB,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,EAAE,EAAE;AACxS,IAAI,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;AAC5C,IAAI,MAAM,SAAS,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,KAAK;AAClF,IAAI,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC;AACjE,IAAI,IAAI,GAAG;AACX,IAAI,IAAI;AACR,QAAQ,GAAG,GAAG,MAAM,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE;AAChG,YAAY,MAAM,EAAE,KAAK;AACzB,YAAY,OAAO;AACnB,YAAY,MAAM,EAAE,UAAU,CAAC,MAAM;AACrC,SAAS,CAAC;AACV,IAAI;AACJ,IAAI,OAAO,GAAG,EAAE;AAChB,QAAQ,YAAY,CAAC,KAAK,CAAC;AAC3B,QAAQ,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,MAAM,YAAY,EAAE;AACnF,YAAY,MAAM,IAAI,eAAe,CAAC,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,kBAAkB,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;AAC/G,QAAQ;AACR,QAAQ,MAAM,IAAI,eAAe,CAAC,CAAC,qCAAqC,EAAE,CAAC,EAAE,GAAG,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,GAAG,MAAM,GAAG,GAAG,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACtL,IAAI;AACJ,IAAI,YAAY,CAAC,KAAK,CAAC;AACvB,IAAI,IAAI,IAAI,GAAG,IAAI;AACnB,IAAI,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE;AACjC,IAAI,IAAI,IAAI,EAAE;AACd,QAAQ,IAAI;AACZ,YAAY,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AACnC,QAAQ;AACR,QAAQ,OAAO,EAAE,EAAE;AACnB,YAAY,IAAI,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE;AAChC,QAAQ;AACR,IAAI;AACJ,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;AACjB,QAAQ,MAAM,OAAO,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,KAAK,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,OAAO,MAAM,IAAI,IAAI,EAAE,KAAK,MAAM,GAAG,EAAE,GAAG,CAAC,6BAA6B,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;AACpQ,QAAQ,MAAM,IAAI,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;AAC5D,IAAI;AACJ,IAAI,OAAO,IAAI;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,eAAe,aAAa,CAAC,QAAQ,EAAE,IAAI,EAAE;AACpD,IAAI,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AACnD,QAAQ,MAAM,IAAI,eAAe,CAAC,yBAAyB,CAAC;AAC5D,IAAI;AACJ,IAAI,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE;AACpD,QAAQ,MAAM,IAAI,eAAe,CAAC,2CAA2C,CAAC;AAC9E,IAAI;AACJ,IAAI,IAAI,UAAU,GAAG,IAAI,CAAC,MAAM;AAChC,IAAI,IAAI,CAAC,UAAU,EAAE;AACrB,QAAQ,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE;AACxC,QAAQ,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC;AACvD;AACA;AACA;AACA,QAAQ,UAAU,GAAG,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;AACtF,IAAI;AACJ,IAAI,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE;AACvD,QAAQ,MAAM,IAAI,eAAe,CAAC,wFAAwF,CAAC;AAC3H,IAAI;AACJ,IAAI,MAAM,kBAAkB,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;AAC1D,IAAI,MAAM,QAAQ,GAAG,CAAC,EAAE,kBAAkB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC/D;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,OAAO,WAAW,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,kBAAkB,CAAC;AACjI;AACA;AACY,MAAC,IAAI,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa;;ACvTnD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACY,MAAC,qBAAqB,GAAG;AACrC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,EAAE,EAAE;AACjD,IAAI,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAAS,cAAc,CAAC,MAAM,EAAE;AACvC,IAAI,QAAQ,CAAC,CAAC,MAAM;AACpB,QAAQ,OAAO,MAAM,KAAK,QAAQ;AAClC,QAAQ,MAAM,CAAC,QAAQ,KAAK,IAAI;AAChC,QAAQ,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;AAC3C,QAAQ,OAAO,MAAM,CAAC,EAAE,KAAK,SAAS;AACtC;AACA;AACO,SAAS,gBAAgB,CAAC,GAAG,EAAE;AACtC,IAAI,OAAO,GAAG;AACd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[1,2,11,12,13]}
1
+ {"version":3,"file":"index-C9ezg0Ef.js","sources":["../.rollup-tmp/client/config.js","../node_modules/is-retry-allowed/index.js","../node_modules/axios-retry/dist/esm/index.js","../.rollup-tmp/utils/auth-api.js","../.rollup-tmp/utils/refresh-error.js","../.rollup-tmp/utils/session-binding.js","../.rollup-tmp/utils/session-events.js","../.rollup-tmp/utils/session-mutation.js","../.rollup-tmp/utils/web-session-manager.js","../.rollup-tmp/utils/rn-session-manager.js","../.rollup-tmp/utils/session-manager.js","../node_modules/base64-js/index.js","../node_modules/ieee754/index.js","../node_modules/buffer/index.js","../.rollup-tmp/utils/server-session-manager.js","../.rollup-tmp/utils/core-platform.js","../.rollup-tmp/utils/evm/evm-utils.js","../.rollup-tmp/utils/auth-token-freshness.js","../.rollup-tmp/utils/utils.js","../.rollup-tmp/client/decline.js","../.rollup-tmp/utils/api.js","../.rollup-tmp/client/subscription-v2.js","../.rollup-tmp/client/operations.js","../.rollup-tmp/client/reconcile.js","../.rollup-tmp/client/subscription.js","../.rollup-tmp/client/create-client.js","../.rollup-tmp/client/subscribe-query.js","../.rollup-tmp/client/field-values.js","../.rollup-tmp/time.js","../.rollup-tmp/utils/sol/sol-accessors.js","../.rollup-tmp/client/functions.js","../.rollup-tmp/client/live.js","../.rollup-tmp/client/live-effects.js"],"sourcesContent":["// The pristine default config. `clientConfig` (the module global) starts as a\n// copy of this and is mutated by init(); createClient() resolves fresh scoped\n// configs from this pristine template so a scoped instance never inherits a\n// prior init()'s state.\nexport const DEFAULT_CLIENT_CONFIG = {\n // User configured settings\n name: '',\n logoUrl: '',\n // Bounded production is the endpoint default. Apps still choose one explicit\n // auth method at init time. Pass `network: 'bounded-staging'` to target staging.\n network: 'bounded-production',\n wsApiUrl: 'wss://realtime.bounded.sh',\n apiUrl: 'https://realtime.bounded.sh',\n authApiUrl: 'https://wallet-auth.bounded.sh',\n humanAuthApiUrl: 'https://auth.bounded.sh',\n functionsUrl: 'https://functions.bounded.sh',\n devApiUrl: 'https://dev-api.bounded.sh',\n appId: '',\n // No hidden modal fallback: browser clients start hosted Bounded Auth with\n // loginWithRedirect/loginWithPopup. For crypto/onchain wallet login use\n // authMethod:'phantom' (Solana / Phantom), and use signInAnonymously() for\n // zero-friction guest accounts. ('wallet' and 'mobile-wallet-adapter' are\n // accepted spellings of the same lane and canonicalize to 'phantom'.)\n authMethod: 'none',\n chain: '',\n rpcUrl: '',\n skipBackendInit: true,\n authProvider: null,\n isServer: false,\n};\nexport let clientConfig = Object.assign({}, DEFAULT_CLIENT_CONFIG);\nlet isInitialized = false;\n// Callers awaiting getConfig() before init() completes. Resolved synchronously\n// by init() — the previous 50ms setInterval poll added up to 50ms of latency\n// to the first SDK operation after init for no reason.\nlet initWaiters = [];\nexport const BOUNDED_NETWORKS = {\n 'bounded-staging': {\n wsApiUrl: 'wss://realtime-staging.bounded.sh',\n apiUrl: 'https://realtime-staging.bounded.sh',\n authApiUrl: 'https://wallet-auth-staging.bounded.sh',\n humanAuthApiUrl: 'https://auth-staging.bounded.sh',\n functionsUrl: 'https://functions-staging.bounded.sh',\n devApiUrl: 'https://dev-api-staging.bounded.sh',\n },\n 'bounded-production': {\n // All on bounded.sh custom domains. authApiUrl = WALLET/SIWS issuer\n // (wallet + guest providers); humanAuthApiUrl = human email-OTP issuer\n // (the 'email' provider). realtime.bounded.sh fronts the realtime worker.\n wsApiUrl: 'wss://realtime.bounded.sh',\n apiUrl: 'https://realtime.bounded.sh',\n authApiUrl: 'https://wallet-auth.bounded.sh',\n humanAuthApiUrl: 'https://auth.bounded.sh',\n functionsUrl: 'https://functions.bounded.sh',\n devApiUrl: 'https://dev-api.bounded.sh',\n },\n};\n// `network: 'bounded'` is an alias for the current GA target.\nBOUNDED_NETWORKS['bounded'] = BOUNDED_NETWORKS['bounded-production'];\n/**\n * The hosted `/.well-known/bounded-webhook-keys.json` URL for the configured\n * Bounded network, or `undefined` when no Bounded network is set. Used by\n * `verifyWebhook` so a staging receiver that did `init({ network:\n * 'bounded-staging' })` verifies against the STAGING signing keys instead of\n * the production default. Synchronous and non-blocking on purpose: a pure\n * webhook receiver may never call `init()`, so we read the already-applied\n * config rather than awaiting `getConfig()` (which blocks on initialization).\n * Returns `undefined` when the network is unknown so the caller keeps its\n * fail-closed production default (audit SDK LOW-7).\n */\nexport function getWebhookKeysUrl() {\n const net = clientConfig.network;\n const preset = net ? BOUNDED_NETWORKS[net] : undefined;\n const host = preset === null || preset === void 0 ? void 0 : preset.apiUrl;\n if (!host)\n return undefined;\n return host.replace(/\\/$/, '') + '/.well-known/bounded-webhook-keys.json';\n}\n/**\n * The app id configured via `init({ appId })`, or `undefined` when none has been set.\n * Synchronous + non-blocking on purpose (mirrors {@link getWebhookKeysUrl}): a pure webhook\n * receiver may never call `init()`, and `getConfig()` would block on initialization. Used by\n * `verifyWebhook` to bind a webhook to THIS app by default (#072) rather than trusting any\n * app's shared-key-signed delivery.\n */\nexport function getConfiguredAppId() {\n return clientConfig.appId || undefined;\n}\n/**\n * True when init() configured a Bounded network (the Cloudflare-native stack).\n * Synchronous + non-blocking. Used to route reads/writes that behave differently\n * on Bounded vs the legacy backend (e.g. `count`/`aggregate`, which on\n * Bounded must use the deterministic server aggregation, not the legacy AI query).\n */\nexport function isBoundedNetwork() {\n return isBoundedNetworkConfig(clientConfig);\n}\n/**\n * Config-scoped variant of {@link isBoundedNetwork}: reports whether a SPECIFIC\n * config (e.g. a scoped `createClient()` instance's) targets a Bounded network,\n * rather than the module global. Used so a scoped client routes count/aggregate\n * by its OWN network, not the global one.\n */\nexport function isBoundedNetworkConfig(config) {\n const net = config.network;\n return typeof net === 'string' && net in BOUNDED_NETWORKS;\n}\n/**\n * Merge a partial config over a base config, applying the Bounded endpoint\n * precedence rule used everywhere: defaults (or `base`) < network preset <\n * explicit fields. Pure - never touches module state. Shared by `init` (base =\n * the current global) and `createClient` (base = the pristine defaults) so both\n * resolve endpoints identically. Throws on an unsupported `network`.\n */\nexport function resolveClientConfig(base, newConfig) {\n if (newConfig.network !== undefined && !(newConfig.network in BOUNDED_NETWORKS)) {\n throw new Error(`Unsupported Bounded network \"${String(newConfig.network)}\". Expected bounded, bounded-staging, or bounded-production.`);\n }\n const preset = newConfig.network ? BOUNDED_NETWORKS[newConfig.network] : {};\n return Object.assign(Object.assign(Object.assign({}, base), preset), newConfig);\n}\nexport function init(newConfig) {\n return new Promise((resolve, reject) => {\n if (!newConfig.appId) {\n reject(new Error('No app ID provided.'));\n return;\n }\n // Bounded is client-driven: defaults are Bounded production, `network`\n // switches the whole endpoint set (e.g. 'bounded-staging'), and anything\n // passed explicitly wins. No `/config` round-trip; browser SDKs still pass\n // one explicit authMethod so there is no hidden auth-provider fallback.\n // defaults (bounded-production) < network preset < explicit newConfig\n let resolved;\n try {\n resolved = resolveClientConfig(clientConfig, newConfig);\n }\n catch (error) {\n reject(error instanceof Error ? error : new Error(String(error)));\n return;\n }\n clientConfig = resolved;\n isInitialized = true;\n const waiters = initWaiters;\n initWaiters = [];\n for (const wake of waiters)\n wake();\n resolve();\n });\n}\nfunction waitForInitialization() {\n if (isInitialized)\n return Promise.resolve();\n return new Promise((resolve) => { initWaiters.push(resolve); });\n}\nexport async function getConfig() {\n await waitForInitialization();\n return clientConfig;\n}\n","'use strict';\n\nconst denyList = new Set([\n\t'ENOTFOUND',\n\t'ENETUNREACH',\n\n\t// SSL errors from https://github.com/nodejs/node/blob/fc8e3e2cdc521978351de257030db0076d79e0ab/src/crypto/crypto_common.cc#L301-L328\n\t'UNABLE_TO_GET_ISSUER_CERT',\n\t'UNABLE_TO_GET_CRL',\n\t'UNABLE_TO_DECRYPT_CERT_SIGNATURE',\n\t'UNABLE_TO_DECRYPT_CRL_SIGNATURE',\n\t'UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY',\n\t'CERT_SIGNATURE_FAILURE',\n\t'CRL_SIGNATURE_FAILURE',\n\t'CERT_NOT_YET_VALID',\n\t'CERT_HAS_EXPIRED',\n\t'CRL_NOT_YET_VALID',\n\t'CRL_HAS_EXPIRED',\n\t'ERROR_IN_CERT_NOT_BEFORE_FIELD',\n\t'ERROR_IN_CERT_NOT_AFTER_FIELD',\n\t'ERROR_IN_CRL_LAST_UPDATE_FIELD',\n\t'ERROR_IN_CRL_NEXT_UPDATE_FIELD',\n\t'OUT_OF_MEM',\n\t'DEPTH_ZERO_SELF_SIGNED_CERT',\n\t'SELF_SIGNED_CERT_IN_CHAIN',\n\t'UNABLE_TO_GET_ISSUER_CERT_LOCALLY',\n\t'UNABLE_TO_VERIFY_LEAF_SIGNATURE',\n\t'CERT_CHAIN_TOO_LONG',\n\t'CERT_REVOKED',\n\t'INVALID_CA',\n\t'PATH_LENGTH_EXCEEDED',\n\t'INVALID_PURPOSE',\n\t'CERT_UNTRUSTED',\n\t'CERT_REJECTED',\n\t'HOSTNAME_MISMATCH'\n]);\n\n// TODO: Use `error?.code` when targeting Node.js 14\nmodule.exports = error => !denyList.has(error && error.code);\n","import isRetryAllowed from 'is-retry-allowed';\nexport const namespace = 'axios-retry';\nexport function isNetworkError(error) {\n const CODE_EXCLUDE_LIST = ['ERR_CANCELED', 'ECONNABORTED'];\n if (error.response) {\n return false;\n }\n if (!error.code) {\n return false;\n }\n // Prevents retrying timed out & cancelled requests\n if (CODE_EXCLUDE_LIST.includes(error.code)) {\n return false;\n }\n // Prevents retrying unsafe errors\n return isRetryAllowed(error);\n}\nconst SAFE_HTTP_METHODS = ['get', 'head', 'options'];\nconst IDEMPOTENT_HTTP_METHODS = SAFE_HTTP_METHODS.concat(['put', 'delete']);\nexport function isRetryableError(error) {\n return (error.code !== 'ECONNABORTED' &&\n (!error.response ||\n error.response.status === 429 ||\n (error.response.status >= 500 && error.response.status <= 599)));\n}\nexport function isSafeRequestError(error) {\n if (!error.config?.method) {\n // Cannot determine if the request can be retried\n return false;\n }\n return isRetryableError(error) && SAFE_HTTP_METHODS.indexOf(error.config.method) !== -1;\n}\nexport function isIdempotentRequestError(error) {\n if (!error.config?.method) {\n // Cannot determine if the request can be retried\n return false;\n }\n return isRetryableError(error) && IDEMPOTENT_HTTP_METHODS.indexOf(error.config.method) !== -1;\n}\nexport function isNetworkOrIdempotentRequestError(error) {\n return isNetworkError(error) || isIdempotentRequestError(error);\n}\nexport function retryAfter(error = undefined) {\n const retryAfterHeader = error?.response?.headers['retry-after'];\n if (!retryAfterHeader) {\n return 0;\n }\n // if the retry after header is a number, convert it to milliseconds\n let retryAfterMs = (Number(retryAfterHeader) || 0) * 1000;\n // If the retry after header is a date, get the number of milliseconds until that date\n if (retryAfterMs === 0) {\n retryAfterMs = (new Date(retryAfterHeader).valueOf() || 0) - Date.now();\n }\n return Math.max(0, retryAfterMs);\n}\nfunction noDelay(_retryNumber = 0, error = undefined) {\n return Math.max(0, retryAfter(error));\n}\nexport function exponentialDelay(retryNumber = 0, error = undefined, delayFactor = 100) {\n const calculatedDelay = 2 ** retryNumber * delayFactor;\n const delay = Math.max(calculatedDelay, retryAfter(error));\n const randomSum = delay * 0.2 * Math.random(); // 0-20% of the delay\n return delay + randomSum;\n}\n/**\n * Linear delay\n * @param {number | undefined} delayFactor - delay factor in milliseconds (default: 100)\n * @returns {function} (retryNumber: number, error: AxiosError | undefined) => number\n */\nexport function linearDelay(delayFactor = 100) {\n return (retryNumber = 0, error = undefined) => {\n const delay = retryNumber * delayFactor;\n return Math.max(delay, retryAfter(error));\n };\n}\nexport const DEFAULT_OPTIONS = {\n retries: 3,\n retryCondition: isNetworkOrIdempotentRequestError,\n retryDelay: noDelay,\n shouldResetTimeout: false,\n onRetry: () => { },\n onMaxRetryTimesExceeded: () => { },\n validateResponse: null\n};\nfunction getRequestOptions(config, defaultOptions) {\n return { ...DEFAULT_OPTIONS, ...defaultOptions, ...config[namespace] };\n}\nfunction setCurrentState(config, defaultOptions, resetLastRequestTime = false) {\n const currentState = getRequestOptions(config, defaultOptions || {});\n currentState.retryCount = currentState.retryCount || 0;\n if (!currentState.lastRequestTime || resetLastRequestTime) {\n currentState.lastRequestTime = Date.now();\n }\n config[namespace] = currentState;\n return currentState;\n}\nfunction fixConfig(axiosInstance, config) {\n // @ts-ignore\n if (axiosInstance.defaults.agent === config.agent) {\n // @ts-ignore\n delete config.agent;\n }\n if (axiosInstance.defaults.httpAgent === config.httpAgent) {\n delete config.httpAgent;\n }\n if (axiosInstance.defaults.httpsAgent === config.httpsAgent) {\n delete config.httpsAgent;\n }\n}\nasync function shouldRetry(currentState, error) {\n const { retries, retryCondition } = currentState;\n const shouldRetryOrPromise = (currentState.retryCount || 0) < retries && retryCondition(error);\n // This could be a promise\n if (typeof shouldRetryOrPromise === 'object') {\n try {\n const shouldRetryPromiseResult = await shouldRetryOrPromise;\n // keep return true unless shouldRetryPromiseResult return false for compatibility\n return shouldRetryPromiseResult !== false;\n }\n catch (_err) {\n return false;\n }\n }\n return shouldRetryOrPromise;\n}\nasync function handleRetry(axiosInstance, currentState, error, config) {\n currentState.retryCount += 1;\n const { retryDelay, shouldResetTimeout, onRetry } = currentState;\n const delay = retryDelay(currentState.retryCount, error);\n // Axios fails merging this configuration to the default configuration because it has an issue\n // with circular structures: https://github.com/mzabriskie/axios/issues/370\n fixConfig(axiosInstance, config);\n if (!shouldResetTimeout && config.timeout && currentState.lastRequestTime) {\n const lastRequestDuration = Date.now() - currentState.lastRequestTime;\n const timeout = config.timeout - lastRequestDuration - delay;\n if (timeout <= 0) {\n return Promise.reject(error);\n }\n config.timeout = timeout;\n }\n config.transformRequest = [(data) => data];\n await onRetry(currentState.retryCount, error, config);\n if (config.signal?.aborted) {\n return Promise.resolve(axiosInstance(config));\n }\n return new Promise((resolve) => {\n const abortListener = () => {\n clearTimeout(timeout);\n resolve(axiosInstance(config));\n };\n const timeout = setTimeout(() => {\n resolve(axiosInstance(config));\n if (config.signal?.removeEventListener) {\n config.signal.removeEventListener('abort', abortListener);\n }\n }, delay);\n if (config.signal?.addEventListener) {\n config.signal.addEventListener('abort', abortListener, { once: true });\n }\n });\n}\nasync function handleMaxRetryTimesExceeded(currentState, error) {\n if (currentState.retryCount >= currentState.retries)\n await currentState.onMaxRetryTimesExceeded(error, currentState.retryCount);\n}\nconst axiosRetry = (axiosInstance, defaultOptions) => {\n const requestInterceptorId = axiosInstance.interceptors.request.use((config) => {\n setCurrentState(config, defaultOptions, true);\n if (config[namespace]?.validateResponse) {\n // by setting this, all HTTP responses will be go through the error interceptor first\n config.validateStatus = () => false;\n }\n return config;\n });\n const responseInterceptorId = axiosInstance.interceptors.response.use(null, async (error) => {\n const { config } = error;\n // If we have no information to retry the request\n if (!config) {\n return Promise.reject(error);\n }\n const currentState = setCurrentState(config, defaultOptions);\n if (error.response && currentState.validateResponse?.(error.response)) {\n // no issue with response\n return error.response;\n }\n if (await shouldRetry(currentState, error)) {\n return handleRetry(axiosInstance, currentState, error, config);\n }\n await handleMaxRetryTimesExceeded(currentState, error);\n return Promise.reject(error);\n });\n return { requestInterceptorId, responseInterceptorId };\n};\n// Compatibility with CommonJS\naxiosRetry.isNetworkError = isNetworkError;\naxiosRetry.isSafeRequestError = isSafeRequestError;\naxiosRetry.isIdempotentRequestError = isIdempotentRequestError;\naxiosRetry.isNetworkOrIdempotentRequestError = isNetworkOrIdempotentRequestError;\naxiosRetry.exponentialDelay = exponentialDelay;\naxiosRetry.linearDelay = linearDelay;\naxiosRetry.isRetryableError = isRetryableError;\nexport default axiosRetry;\n","import axios from 'axios';\nimport { getConfig } from '../client/config';\n/**\n * Resolve the refresh/revoke base URL to a CONFIGURED issuer only. The session's\n * `issuer` is persisted in client storage; if that storage is tampered (e.g. XSS)\n * a raw value could redirect the refresh token to an attacker host. So we accept the\n * stored issuer only when it exactly matches a configured allowlisted issuer\n * (authApiUrl / humanAuthApiUrl); otherwise we fall back to authApiUrl. The refresh\n * token is therefore never POSTed anywhere except a Bounded-configured origin.\n */\nfunction resolveIssuerBase(issuer, cfg) {\n const norm = (u) => (u || '').replace(/\\/$/, '');\n const allow = [norm(cfg.authApiUrl), norm(cfg.humanAuthApiUrl)].filter(Boolean);\n const want = norm(issuer);\n if (want && allow.includes(want))\n return want;\n return norm(cfg.authApiUrl);\n}\n// #062: key the auth client by its baseURL. The old single memoized client froze the FIRST\n// environment's authApiUrl, so after re-initializing the SDK to a different issuer (staging->\n// prod, or a custom issuer) the mint calls (/nonce, /auth/nonce, /session) kept hitting the\n// original address forever - a \"works only after a full reload\" login bug, and in a multi-tenant\n// process one config's address could leak into another's. refresh/revoke already resolve per\n// call via resolveIssuerBase; this makes minting do the same while still caching per URL.\nconst axiosClientsByUrl = new Map();\nasync function getAxiosAuthClient(baseURLOverride) {\n // A wallet client passes its snapshotted issuer so the mint never follows the\n // mutable global; the default path reads the current global config.\n const baseURL = baseURLOverride || (await getConfig()).authApiUrl || '';\n let client = axiosClientsByUrl.get(baseURL);\n if (!client) {\n client = axios.create({\n baseURL,\n headers: {\n 'Content-Type': 'application/json',\n },\n timeout: 30000, // 30s timeout, matching makeApiRequest\n });\n axiosClientsByUrl.set(baseURL, client);\n }\n return client;\n}\nexport async function genNonce() {\n const client = await getAxiosAuthClient();\n const response = await client.post('/nonce');\n return response.data;\n}\nexport async function genAuthNonce(sessionConfig) {\n // Bind the nonce to the snapshotted app+issuer when a wallet client supplies\n // one; otherwise resolve from the mutable global config (unchanged default).\n const config = sessionConfig !== null && sessionConfig !== void 0 ? sessionConfig : await getConfig();\n const client = await getAxiosAuthClient(config.authApiUrl);\n const appId = config.appId;\n const response = await client.post('/auth/nonce', {\n appId\n });\n return response.data.nonce;\n}\n// authMethods that the /session issuer treats as a Solana wallet-signature flow.\n// createSessionWithSignature ALWAYS exchanges an Ed25519 signature over the\n// canonical genSolanaMessage prompt (server keypair, Phantom, mobile wallet,\n// guest device key), so the method it reports must be a wallet method — never a\n// human-login method like 'email' (the SDK default). Both issuers reject a\n// signature carrying a non-wallet authMethod: the bounded-auth worker returns\n// 501 (\"email-OTP not yet enabled\") and the legacy session-management server\n// returns 400 (\"EVM/SIWE auth is no longer supported\"). See routes.ts /session.\n// Wallet/signature methods whose authMethod is forwarded verbatim to the /session\n// issuer. 'guest' is included so anonymous (device-keypair) logins arrive as\n// authMethod:\"guest\" — the issuer gates them on the app's anonymous opt-in and\n// stamps an is_anonymous claim. Without this a guest would be indistinguishable\n// from 'phantom' and couldn't be gated or flagged.\nconst SIGNATURE_AUTH_METHODS = new Set(['phantom', 'mobile-wallet-adapter', 'guest']);\n// DS2-0110: header a SERVER-SIDE caller (Node: the @bounded-sh/server keypair SDK, the CLI, an\n// agent) presents so the wallet issuer's origin gate admits its ORIGIN-LESS /session mint. A\n// non-browser client sends no Origin, and the issuer (AS-03) no longer treats a missing Origin as\n// \"server, allow\"; the origin-less path is reserved for callers that PROVE a server-client\n// credential via X-Bounded-Server-Auth, matched against the worker's SERVER_CLIENT_SECRET. We read\n// it from the SAME env var Bind injects on the worker side (BOUNDED_SERVER_CLIENT_SECRET). Guarded\n// for non-Node hosts - browsers never carry it and don't need it (they authenticate by Origin) -\n// mirroring genSolanaMessage's process guard. Absent/empty => no header => the browser path is\n// unchanged.\nfunction serverAuthHeaders() {\n var _a;\n const secret = (typeof process !== 'undefined' && ((_a = process.env) === null || _a === void 0 ? void 0 : _a.BOUNDED_SERVER_CLIENT_SECRET)) || '';\n return secret ? { 'X-Bounded-Server-Auth': secret } : {};\n}\n// Maps a client authMethod to the /session issuer's signature discriminator when\n// they differ. EVM WALLET LOGIN (config.authMethod 'evm-wallet') exchanges a SIWE\n// (EIP-4361 personal_sign, secp256k1) signature, which the bounded-auth issuer\n// routes on authMethod:\"siwe\" (index.ts /session → parseSiweMessage/recoverSiweSigner)\n// and mints under custom:evmWalletAddress. The EVM provider also passes 'siwe'\n// explicitly (authMethodOverride), so this map is the belt-and-suspenders path.\nconst SESSION_METHOD_ALIASES = { 'evm-wallet': 'siwe' };\n/**\n * Exchange a wallet signature for a Bounded session at the /session issuer.\n *\n * @param authMethodOverride the exact /session discriminator to send (e.g. 'siwe'\n * for the SIWE/EVM path). When omitted the method is derived from config: an\n * aliased method (evm-wallet → siwe) maps through SESSION_METHOD_ALIASES, a\n * Solana wallet/guest method passes through verbatim, and anything else\n * defaults to the canonical 'phantom' the issuer accepts for a signature.\n */\nexport async function createSessionWithSignature(address, message, signature, authMethodOverride, sessionConfig) {\n var _a, _b, _c;\n // Bind the /session mint to the snapshotted app+issuer when a wallet client\n // supplies one; otherwise resolve from the mutable global (unchanged default).\n const config = sessionConfig !== null && sessionConfig !== void 0 ? sessionConfig : await getConfig();\n const client = await getAxiosAuthClient(config.authApiUrl);\n const appId = config.appId;\n // Preserve a wallet authMethod when one is configured (so the backend records\n // the real method, e.g. mobile-wallet-adapter); otherwise default to the\n // canonical Solana wallet method 'phantom' that every /session issuer accepts\n // for a signature exchange. This is what makes the server SDK + guest device\n // keypair work under the email-default config.\n const authMethod = (_a = authMethodOverride !== null && authMethodOverride !== void 0 ? authMethodOverride : SESSION_METHOD_ALIASES[config.authMethod]) !== null && _a !== void 0 ? _a : (SIGNATURE_AUTH_METHODS.has(config.authMethod) ? config.authMethod : 'phantom');\n try {\n const response = await client.post('/session', {\n appId,\n address,\n message,\n signature,\n authMethod\n }, { headers: serverAuthHeaders() });\n return response.data;\n }\n catch (err) {\n // Surface the issuer's actionable message (e.g. \"Anonymous auth is not enabled for\n // this app. Add \\\"auth\\\": { \\\"anonymous\\\": true } to policy.json and redeploy.\")\n // instead of axios's generic \"Request failed with status code 403\".\n const d = (_b = err === null || err === void 0 ? void 0 : err.response) === null || _b === void 0 ? void 0 : _b.data;\n if (d && (d.message || d.error)) {\n const e = new Error(String(d.message || d.error));\n e.code = d.error;\n e.status = (_c = err === null || err === void 0 ? void 0 : err.response) === null || _c === void 0 ? void 0 : _c.status;\n e.hint = d.hint;\n throw e;\n }\n throw err;\n }\n}\n// Deduplicate concurrent refreshSession calls to prevent multiple code paths\n// (WebSocket reconnection, periodic refresh, API 401 retry) from all hitting\n// /session/refresh simultaneously.\n//\n// Keyed PER (issuer, token) in a Map, not one global slot (DS2-0373): the rotating\n// refresh token is single-use, so two concurrent refreshes of the SAME token must\n// share one in-flight request. A single global slot could hold only one token at a\n// time, so an interleaved refresh of a DIFFERENT session's token evicted the first\n// token's in-flight promise; a later second refresh of the first token then missed\n// its own in-flight request and re-POSTed the already-spent token - the issuer sees\n// reuse and revokes the whole family. Keying by token lets unrelated sessions\n// coalesce independently.\n// Note: module-level state is shared across requests in SSR/Node - acceptable since\n// each key is bound to a specific session's token (same pattern as api.ts).\nconst refreshInFlightByToken = new Map();\nexport async function refreshSession(refreshToken, issuer) {\n const dedupeKey = `${issuer || ''}::${refreshToken}`;\n const existing = refreshInFlightByToken.get(dedupeKey);\n if (existing)\n return existing;\n let currentFlight;\n currentFlight = (async () => {\n try {\n const config = await getConfig();\n const appId = config.appId;\n // Route to the issuer that MINTED this session (email/social ->\n // humanAuthApiUrl, wallet/guest -> authApiUrl), validated against the\n // configured allowlist so a tampered stored issuer can't exfiltrate the token.\n const base = resolveIssuerBase(issuer, config);\n const response = await axios.post(`${base}/session/refresh`, {\n refreshToken,\n appId\n }, { headers: { 'Content-Type': 'application/json' }, timeout: 30000 });\n return response.data;\n }\n finally {\n // Only remove our own entry, and only if it is still the active flight\n // for this token (a later refresh of the same token cannot have replaced\n // it while we were in flight, but this stays correct if that ever changes).\n if (refreshInFlightByToken.get(dedupeKey) === currentFlight) {\n refreshInFlightByToken.delete(dedupeKey);\n }\n }\n })();\n refreshInFlightByToken.set(dedupeKey, currentFlight);\n return currentFlight;\n}\nexport class SessionRevokeError extends Error {\n constructor(message, cause) {\n super(message);\n this.name = 'SessionRevokeError';\n this.cause = cause;\n }\n}\nfunction revokeFailureMessage(err) {\n var _a, _b;\n const status = (_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status;\n const statusText = (_b = err === null || err === void 0 ? void 0 : err.response) === null || _b === void 0 ? void 0 : _b.statusText;\n const suffix = typeof status === 'number'\n ? ` (HTTP ${status}${statusText ? ` ${statusText}` : ''})`\n : '';\n return `Failed to revoke refresh token server-side${suffix}. The refresh-token family may still be active.`;\n}\n/**\n * Revoke a session's refresh-token family server-side (logout). Routes to the\n * minting issuer and rejects if the revoke request fails.\n */\nexport async function revokeSession(refreshToken, issuer) {\n if (!refreshToken)\n return;\n try {\n const config = await getConfig();\n const base = resolveIssuerBase(issuer, config);\n await axios.post(`${base}/session/revoke`, {\n refreshToken,\n appId: config.appId,\n }, {\n headers: { 'Content-Type': 'application/json' },\n timeout: 15000,\n // Preserve the transport error for programmatic diagnostics while\n // ensuring AxiosError.toJSON() cannot serialize the live token body\n // into logs, telemetry, UI state, or crash reports.\n redact: ['data'],\n });\n }\n catch (err) {\n throw new SessionRevokeError(revokeFailureMessage(err), err);\n }\n}\nexport async function signSessionCreateMessage(_signMessageFunction) {\n}\n","// Classify a session-refresh failure as a DEFINITIVE rejection of the credential\n// vs a TRANSPORT failure (DS4-0054).\n//\n// The restore path refreshes an expired token at boot. The old code destroyed the\n// local session on ANY refresh failure, so a network blip - common on mobile -\n// signed the user out. Only a real HTTP rejection of the refresh token proves the\n// session is invalid; anything else is unknown, and the safe move is to RETAIN local\n// state and retry. Keeping a genuinely dead session locally is harmless: every\n// request still fails closed server-side, and the next refresh that reaches the\n// server clears it. Destroying a live session on a blip is user-visible damage.\n//\n// `/session/refresh` answers 401 (session_revoked / invalid_grant) when the token is\n// dead. 400 (bad request), 408/429 (transient), and 5xx are NOT proof the session is\n// invalid, and a network/DNS/timeout error carries no HTTP response at all.\n//\n// This is the single classifier for every refresh path: the per-request freshness\n// check (auth-token-freshness) and the boot-time restore paths (web + RN session\n// managers) all import it, so \"definitive\" means the same thing everywhere. It lives\n// in this leaf module to avoid an import cycle between those consumers.\nexport function isDefinitiveRejection(err) {\n var _a;\n const status = (_a = err === null || err === void 0 ? void 0 : err.response) === null || _a === void 0 ? void 0 : _a.status;\n return status === 401 || status === 403;\n}\n// How long past the id token's own `exp` a session may survive purely on\n// transport failures.\n//\n// \"Retain on a blip\" must not become \"retain forever\". A statusless failure is\n// unknown, so the first ones are absorbed - but a revoked session, or a gateway\n// that rewrites the issuer's 401 into a 502, would otherwise keep\n// isAuthenticated() reporting a signed-in user for as long as the device never\n// reaches the issuer again. One day covers an offline flight or a bad-network day\n// while making the retention finite: past it, an unrefreshable session is cleared\n// and the user is asked to sign in again.\nexport const TRANSPORT_RETENTION_GRACE_MS = 24 * 60 * 60 * 1000;\n/**\n * May a session whose refresh failed WITHOUT a definitive rejection be kept?\n *\n * `expSeconds` is the id token's `exp` claim. Fails closed: a missing or\n * non-numeric expiry is not a usable bound, so such a session is never retained.\n */\nexport function mayRetainAfterTransportFailure(expSeconds, now = Date.now()) {\n if (typeof expSeconds !== 'number' || !Number.isFinite(expSeconds))\n return false;\n return now <= expSeconds * 1000 + TRANSPORT_RETENTION_GRACE_MS;\n}\n","// Shared session-binding guard for the web + React Native session managers, so\n// the cross-principal refresh guard (#220 / #221) lives in ONE place and the two\n// managers can't drift apart. Base64url decoding differs by platform (browser\n// atob vs a configured decoder), so the caller passes its own decoder in.\n/**\n * Extract the `custom:walletAddress` claim from a JWT idToken. Returns undefined\n * when the token has no wallet claim or cannot be decoded.\n */\nexport function idTokenWalletAddress(idToken, decodeBase64Url) {\n try {\n const payloadB64 = idToken.split(\".\")[1];\n if (!payloadB64)\n return undefined;\n const wallet = JSON.parse(decodeBase64Url(payloadB64))[\"custom:walletAddress\"];\n return typeof wallet === \"string\" && wallet.length > 0 ? wallet : undefined;\n }\n catch (_a) {\n return undefined;\n }\n}\n/**\n * Whether a refreshed idToken may be grafted onto the CURRENTLY-stored session.\n *\n * A silent refresh started for user A can complete after storage was replaced\n * with user B (a login, guest→wallet upgrade, or a cross-tab login). Overwriting\n * B's tokens with A's — the app-id matches, so the old guard let it through —\n * installs a genuine-but-WRONG session: the UI shows B while the app authenticates\n * as A (#220 / #221). Refuse the write when the refreshed token binds to a\n * DIFFERENT wallet than the one currently stored. A tokenless/addressless session\n * (guest / opaque) preserves the prior behavior (returns true).\n */\nexport function refreshedTokenMayReplaceStored(newIdToken, storedAddress, decodeBase64Url) {\n const tokenWallet = idTokenWalletAddress(newIdToken, decodeBase64Url);\n if (!tokenWallet || !storedAddress)\n return true;\n return tokenWallet === storedAddress;\n}\n","/**\n * The one signal core sends upward when a stored session stops existing.\n *\n * `tarobase-core` cannot import `js-sdk` (that would be a cycle), and core has no\n * event bus, so a session dying inside a session manager used to be invisible to\n * the SDK: `setCurrentUser(null)` was only ever called by `logout()` and `init()`.\n * The result was a UI that kept showing a connected wallet long after the session\n * it was showing had been wiped, which is exactly what let a wallet-review UI\n * freeze a review against a wallet the server no longer knew about.\n *\n * `js-sdk` registers a handler at init; core fires it ONLY when storage was\n * actually cleared, never on a failed-but-preserved refresh. Firing on a\n * preserved session would log people out on a transient network blip.\n */\nlet handlers = [];\n/**\n * Register a listener for \"the stored session is gone\".\n * Returns an unsubscribe function.\n */\nexport function onSessionCleared(handler) {\n handlers.push(handler);\n return () => {\n handlers = handlers.filter((h) => h !== handler);\n };\n}\n/**\n * Announce that session storage was cleared.\n *\n * Call this ONLY after a removal actually happened. Handlers are best-effort: a\n * throwing listener must not turn a successful clear into a failed one, because\n * the storage mutation has already committed by this point.\n */\nexport function notifySessionCleared() {\n for (const handler of handlers) {\n try {\n handler();\n }\n catch (_a) {\n // A listener's failure cannot un-clear storage; keep notifying the rest.\n }\n }\n}\n/** Test seam: drop every registered handler. */\nexport function resetSessionClearedHandlers() {\n handlers = [];\n}\n","/**\n * The one protocol every session-storage mutation goes through.\n *\n * WHY THIS EXISTS\n *\n * `localStorage` is shared by every tab on an origin but offers no atomic\n * compare-and-set spanning a read and a write, and each tab is a separate JS\n * realm, so an in-memory guard cannot serialize them. The old code relied on\n * doing its read → check → write inside one synchronous turn, which is only\n * atomic *within* a realm.\n *\n * That is not a theoretical gap. `REFRESH_REUSE_GRACE_MS` on the issuer is 60s,\n * so two tabs presenting the same refresh token inside that window BOTH succeed\n * and BOTH receive the same successor refresh token — while each response mints\n * its own distinct idToken. Concurrent cross-tab commits are a designed-for\n * occurrence, not an edge case.\n *\n * Two failures follow from an unlocked read-then-write, and both are closed here:\n *\n * 1. Lost update / resurrection. Tab A reads, tab B logs in (or logs out), tab A\n * writes its stale blob back. B's login is silently replaced, or a logged-out\n * session comes back to life.\n * 2. Spurious \"the user changed\". Tab B's commit finds tab A's blob, which\n * matches neither B's snapshot nor B's own result because the idTokens\n * differ — even though it is the same user and the same login.\n *\n * THE CRITICAL SECTION IS THE COMMIT, NOT THE NETWORK CALL\n *\n * The lock covers read → compare → write only. The refresh POST happens outside\n * it: holding a cross-tab lock across a 30s network call would serialize every\n * tab behind the slowest one. This is safe because the snapshot captured before\n * the network call is used only for COMPARISON. What actually gets written is\n * decided against storage re-read inside the lock, so a login or logout that lands\n * during the network call is always observed.\n *\n * NO BEST-EFFORT FALLBACK\n *\n * A `localStorage` lease was considered and rejected: its own acquire sequence is\n * a non-atomic read-then-write across realms, and a backgrounded tab can be frozen\n * past any lease timeout and then resume and write. Both leave exactly the windows\n * this module exists to close, so a browser without Web Locks fails closed instead.\n * Absence of `navigator.locks` does NOT imply a single realm — such a browser still\n * has tabs. Single realm is determined by the absence of `localStorage`.\n */\nconst SESSION_LOCK_NAME = \"bounded_session_mutation\";\nexport const UNSUPPORTED_ENVIRONMENT_CODE = \"unsupported_environment\";\n/**\n * Thrown when authenticated session work is attempted in a browser that shares\n * `localStorage` across tabs but cannot serialize access to it. Reads and\n * anonymous requests are unaffected; only session mutation is refused.\n */\nexport class SessionEnvironmentError extends Error {\n constructor(message) {\n super(message);\n this.code = UNSUPPORTED_ENVIRONMENT_CODE;\n this.name = \"SessionEnvironmentError\";\n }\n}\n/**\n * True when nothing outside this realm can touch session storage.\n *\n * Keyed on `localStorage`, not on `window`: React Native defines `window` but\n * stores sessions through a per-process StorageAdapter, and Node/SSR has neither.\n * A browser is the only multi-realm case, and `localStorage` is what makes it one.\n */\nfunction isSingleRealm() {\n return typeof localStorage === \"undefined\";\n}\nfunction hasWebLocks() {\n var _a;\n return typeof navigator !== \"undefined\"\n && typeof ((_a = navigator.locks) === null || _a === void 0 ? void 0 : _a.request) === \"function\";\n}\n/**\n * Run `fn` with exclusive access to session storage across every tab on this origin.\n *\n * Single-realm runtimes execute directly. Browsers serialize through Web Locks.\n * A browser without Web Locks throws rather than running unserialized.\n */\nexport async function withSessionLock(fn) {\n if (isSingleRealm()) {\n return await fn();\n }\n if (!hasWebLocks()) {\n throw new SessionEnvironmentError(\"This browser cannot safely coordinate a Bounded session across tabs \" +\n \"(the Web Locks API is unavailable). Authenticated operations are disabled; \" +\n \"anonymous reads still work.\");\n }\n return await navigator.locks.request(SESSION_LOCK_NAME, { mode: \"exclusive\" }, async () => await fn());\n}\n/** Throws if this environment cannot safely mutate a session. Cheap pre-flight. */\nexport function assertSessionMutationSupported() {\n if (isSingleRealm() || hasWebLocks())\n return;\n throw new SessionEnvironmentError(\"This browser cannot safely coordinate a Bounded session across tabs \" +\n \"(the Web Locks API is unavailable). Authenticated operations are disabled; \" +\n \"anonymous reads still work.\");\n}\n/**\n * Opaque per-login identifier stamped into the stored session.\n *\n * Minted on every `storeSession` (login, guest upgrade, wallet switch) and\n * PRESERVED across refresh commits. That is the whole point: it is what makes\n * \"S1 refreshed into S1'\" provable and distinguishable from \"someone logged in\n * again\", which token equality and address equality both get wrong — token\n * equality rejects a valid post-refresh retry, and address equality accepts a\n * same-wallet re-login as if it were the same session.\n *\n * The issuer has a server-side `familyId` that would serve, but `/session/refresh`\n * does not return it, so this is client-side.\n */\nexport function mintSessionGeneration() {\n const c = typeof crypto !== \"undefined\" ? crypto : undefined;\n if (typeof (c === null || c === void 0 ? void 0 : c.randomUUID) === \"function\")\n return c.randomUUID();\n if (typeof (c === null || c === void 0 ? void 0 : c.getRandomValues) === \"function\") {\n const bytes = c.getRandomValues(new Uint8Array(16));\n return Array.from(bytes, (b) => b.toString(16).padStart(2, \"0\")).join(\"\");\n }\n // Last resort only; every runtime the SDK targets provides one of the above.\n return `g${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;\n}\n/**\n * Decide a commit against what storage ACTUALLY holds right now.\n *\n * Must be called inside `withSessionLock`, with `current` read inside that same\n * critical section — comparing against a value read before the network call is\n * exactly the race this exists to prevent.\n */\nexport function decideCommit(current, expected, next) {\n var _a;\n // Absence is SUPERSEDED, never \"free to write\". A logout that lands between a\n // refresh's read and its write must not be undone by that write. This is the\n // backstop that makes session resurrection impossible.\n if (!current)\n return \"superseded\";\n // A caller with no captured generation cannot prove lineage, so it must not\n // write. Reads mint a generation for legacy sessions before returning them, so\n // in practice this only catches a request that was in flight across that\n // upgrade. Fail closed: the caller retries and gets a provable session.\n if (expected.generation === null)\n return \"superseded\";\n // A different generation means a different LOGIN, which the address-based guard\n // cannot see when the same wallet signs in again.\n if (((_a = current.sessionGeneration) !== null && _a !== void 0 ? _a : null) !== expected.generation) {\n return \"superseded\";\n }\n if (current.idToken === next.idToken && current.refreshToken === next.refreshToken) {\n return \"already-equal\";\n }\n // Storage is exactly what this caller read before it went to the network, so\n // nothing has moved underneath and this write is the legitimate one.\n if (expected.idToken === undefined || current.idToken === expected.idToken) {\n return \"applied\";\n }\n // Same login, but storage has moved on: another caller's refresh of this same\n // session already landed. Theirs is the current truth — its rotated refresh\n // token is the live one — so defer rather than overwrite. Reporting a principal\n // change here would fail ordinary concurrent requests at expiry, which is the\n // common case, not a rare one.\n return \"same-generation-winner\";\n}\n","import { refreshSession } from \"./auth-api\";\nimport { isDefinitiveRejection, mayRetainAfterTransportFailure } from \"./refresh-error\";\nimport { getConfig } from \"../client/config\";\nimport { refreshedTokenMayReplaceStored } from \"./session-binding\";\nimport { notifySessionCleared } from \"./session-events\";\nimport { decideCommit, mintSessionGeneration, withSessionLock, } from \"./session-mutation\";\nexport class WebSessionManager {\n /** Raw read of the stored blob. Callers inside the lock use this, never a cached copy. */\n static readRaw() {\n if (typeof window === \"undefined\")\n return null;\n const raw = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n if (!raw)\n return null;\n try {\n return JSON.parse(raw);\n }\n catch (_a) {\n return null;\n }\n }\n static writeRaw(sessionObj) {\n localStorage.setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(sessionObj));\n }\n /**\n * Read the session, stamping a `sessionGeneration` if it predates them.\n *\n * Sessions written before generations existed have no lineage marker, so a\n * later refresh could not prove it descended from them. Minting on read\n * upgrades them in place; a request already in flight across that mint carries\n * no generation and fails closed at commit rather than writing unprovably.\n */\n static async readSessionWithGeneration() {\n const existing = this.readRaw();\n if (!existing)\n return null;\n if (existing.sessionGeneration)\n return existing;\n return await withSessionLock(() => {\n // Re-read inside the lock: another tab may have minted one already.\n const current = this.readRaw();\n if (!current)\n return null;\n if (current.sessionGeneration)\n return current;\n const upgraded = Object.assign(Object.assign({}, current), { sessionGeneration: mintSessionGeneration() });\n this.writeRaw(upgraded);\n return upgraded;\n });\n }\n /**\n * Decode a base64url-encoded string (used by JWT payloads).\n * Normalises base64url → standard base64 before calling browser atob().\n */\n static decodeBase64Url(input) {\n let b64 = input.replace(/-/g, '+').replace(/_/g, '/');\n const pad = b64.length % 4;\n if (pad === 2)\n b64 += '==';\n else if (pad === 3)\n b64 += '=';\n return atob(b64);\n }\n /* ------------------------------------------------------------------ */\n /* STORE */\n /* ------------------------------------------------------------------ */\n static async storeSession(address, accessToken, idToken, refreshToken, issuer) {\n var _a;\n if (typeof window === \"undefined\")\n return;\n // JWT-wallet binding: refuse to store a session whose idToken is bound\n // to a different wallet than `address`. Prevents races that would otherwise\n // leave localStorage with mismatched address/token state.\n try {\n const payloadB64 = idToken.split(\".\")[1];\n if (payloadB64) {\n const payload = JSON.parse(this.decodeBase64Url(payloadB64));\n const tokenWallet = payload[\"custom:walletAddress\"];\n if (tokenWallet && tokenWallet !== address) {\n throw new Error(`[WebSessionManager] Refusing to store session: address (${address}) does not match idToken custom:walletAddress (${tokenWallet})`);\n }\n if (!tokenWallet) {\n console.warn(\"[WebSessionManager] storeSession: idToken has no custom:walletAddress claim — writing without validation\");\n }\n }\n }\n catch (err) {\n if (typeof (err === null || err === void 0 ? void 0 : err.message) === \"string\" && err.message.includes(\"Refusing to store session\")) {\n throw err;\n }\n console.warn(\"[WebSessionManager] storeSession: failed to decode idToken for validation. reason:\", (_a = err === null || err === void 0 ? void 0 : err.name) !== null && _a !== void 0 ? _a : \"decode_failed\");\n }\n const config = await getConfig();\n const currentAppId = config.appId;\n // The auth issuer base that minted this session, so silent refresh POSTs to\n // the RIGHT /session/refresh. Email overrides with humanAuthApiUrl; all\n // wallet/guest/signature flows default to authApiUrl (the bounded-auth issuer).\n const sessionIssuer = (issuer || config.authApiUrl || \"\").replace(/\\/$/, \"\");\n // A login always starts a NEW generation. Refresh commits preserve it, so\n // \"same generation\" means \"same login\", which is what lets a post-refresh\n // retry be told apart from a re-login by the same wallet.\n await withSessionLock(() => {\n this.writeRaw(Object.assign({ address,\n accessToken,\n idToken,\n refreshToken, appId: currentAppId, sessionGeneration: mintSessionGeneration() }, (sessionIssuer ? { issuer: sessionIssuer } : {})));\n });\n }\n /* ------------------------------------------------------------------ */\n /* GET */\n /* ------------------------------------------------------------------ */\n static async getSession() {\n var _a;\n if (typeof window === \"undefined\")\n return null;\n const sessionObj = await this.readSessionWithGeneration();\n if (!sessionObj)\n return null;\n const generation = (_a = sessionObj.sessionGeneration) !== null && _a !== void 0 ? _a : null;\n /* ---------- validate app-id ---------- */\n const config = await getConfig();\n if (sessionObj.appId && sessionObj.appId !== config.appId) {\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n /* ---------- check JWT expiration ---------- */\n // Deliberately NO skew buffer here, unlike the per-request freshness helper.\n // This is the restore path: at boot a token already past `exp` is unusable\n // either way, so clearing it is honest. Preserving it would only make\n // isAuthenticated() lie about a session that cannot authenticate anything.\n try {\n // Check expiry on the ID TOKEN — it is ALWAYS a JWT. The OIDC access_token for\n // email/social (hosted) logins is an OPAQUE string (not a JWT), so decoding IT\n // here threw and the catch below wiped a perfectly valid session — breaking\n // hosted login. The idToken carries the canonical identity (@user.id) + exp.\n const { idToken } = sessionObj;\n const { exp } = JSON.parse(this.decodeBase64Url(idToken.split(\".\")[1]));\n // Treat a MISSING or non-numeric expiry as EXPIRED (fail closed). A bare\n // `Date.now() > exp * 1000` is NaN -> false when exp is absent/non-numeric,\n // so a forged or malformed token with no usable expiry would otherwise be\n // accepted as valid forever.\n const expired = typeof exp !== \"number\" || !Number.isFinite(exp) || Date.now() > exp * 1000;\n if (expired) {\n const { refreshToken } = sessionObj;\n // Expired token with no way to refresh — clear the stale session\n // (mirrors the refresh-failed branch below) so isAuthenticated()\n // does not stay true and every request does not 401 + retry forever.\n if (!refreshToken) {\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n let refreshed;\n try {\n refreshed = await refreshSession(refreshToken, sessionObj.issuer);\n }\n catch (refreshErr) {\n // DS4-0054: only a DEFINITIVE server rejection (401/403) proves the\n // refresh token is dead. A transport failure - offline, DNS, timeout,\n // 5xx - is unknown, not proof the session is invalid. Destroying local\n // state here signs the user out on a network blip (common on mobile),\n // so RETAIN it and return the existing session; the next request will\n // retry the refresh. The retention is BOUNDED by the token's own\n // expiry plus a grace window, so a revoked session - or an issuer 401\n // a gateway rewrote into a 5xx - cannot keep isAuthenticated() true\n // forever on a device that never reaches the issuer again.\n if (isDefinitiveRejection(refreshErr) || !mayRetainAfterTransportFailure(exp)) {\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n return { address: sessionObj.address, session: sessionObj };\n }\n if ((refreshed === null || refreshed === void 0 ? void 0 : refreshed.idToken) && (refreshed === null || refreshed === void 0 ? void 0 : refreshed.accessToken)) {\n const committed = await this.commitRefreshedTokens({ generation, idToken: sessionObj.idToken }, refreshed.idToken, refreshed.accessToken, \n // Persist the ROTATED refresh token — the old one is now\n // single-use spent; reusing it would revoke the family.\n refreshed.refreshToken);\n // Superseded means a login or logout landed while we were on the\n // network. Returning our own stale null here would sign the UI out\n // of a session that is now perfectly valid, because init() applies\n // whatever restoreSession() returns. Re-read once and report THAT.\n if (committed.outcome === \"superseded\") {\n const current = this.readRaw();\n if (!current)\n return null;\n return { address: current.address, session: current };\n }\n const newObj = committed.session;\n if (!newObj)\n return null;\n return { address: newObj.address, session: newObj };\n }\n // The server answered but issued no usable tokens - a definitive refusal,\n // not a transport failure - so clear the stale session to stop retry loops,\n // but only if it is still the session we set out to refresh.\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n }\n catch (err) {\n // Token decode or refresh failed — clear stale session to prevent retry loops\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n return { address: sessionObj.address, session: sessionObj };\n }\n /* ------------------------------------------------------------------ */\n /* CLEAR */\n /* ------------------------------------------------------------------ */\n /**\n * Remove the session unconditionally (logout, app-id mismatch, dead refresh).\n *\n * ASYNC AND LOCKED, and callers MUST await it. Two failure modes hang on this:\n *\n * - Removing outside the lock lets a refresh that read before the logout write\n * the session back afterwards, resurrecting a logged-out session.\n * - Not awaiting lets `logout()` return while the credential is still in\n * storage, so the very next request authenticates as the user who just left.\n */\n static async clearSession() {\n if (typeof window === \"undefined\")\n return;\n const removed = await withSessionLock(() => {\n if (localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY) === null)\n return false;\n localStorage.removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return true;\n });\n // Only announce a clear that actually happened, so a no-op cannot sign out\n // a UI that was already signed out.\n if (removed)\n notifySessionCleared();\n }\n /**\n * Remove the session only if it is still the one identified by `generation`.\n *\n * Used by every failure path that wants to drop a dead session without\n * trampling a newer login that landed while the failure was in flight.\n */\n static async clearSessionIfGeneration(generation) {\n if (typeof window === \"undefined\")\n return;\n const removed = await withSessionLock(() => {\n var _a;\n const current = this.readRaw();\n if (!current)\n return false;\n // No captured generation means no proof this is the session we meant to\n // drop. Leave it alone rather than risk removing a replacement.\n if (generation === null)\n return false;\n if (((_a = current.sessionGeneration) !== null && _a !== void 0 ? _a : null) !== generation)\n return false;\n localStorage.removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return true;\n });\n if (removed)\n notifySessionCleared();\n }\n /* ------------------------------------------------------------------ */\n /* IS-AUTH */\n /* ------------------------------------------------------------------ */\n static isAuthenticated() {\n // NOTE: this remains synchronous to stay backward compatible\n return !!localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n }\n /* ------------------------------------------------------------------ */\n /* TOKEN HELPERS */\n /* ------------------------------------------------------------------ */\n // These reads are DEFENSIVE (try/catch -> treat a corrupt blob as absent).\n // logout() reads the refresh token + issuer BEFORE the session is cleared; if a\n // corrupt (non-JSON) blob threw out of the read, logout would abort with the\n // credential still in storage while isAuthenticated() kept reporting true, so\n // sign-out could never complete. A corrupt blob is unusable either way, so\n // reporting \"no token\" lets the clear path proceed and finish the sign-out.\n static getIdToken() {\n if (typeof window === \"undefined\")\n return null;\n try {\n const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return session ? JSON.parse(session).idToken : null;\n }\n catch (_a) {\n return null;\n }\n }\n static getRefreshToken() {\n if (typeof window === \"undefined\")\n return null;\n try {\n const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return session ? JSON.parse(session).refreshToken : null;\n }\n catch (_a) {\n return null;\n }\n }\n /** The issuer base that minted this session (for routing silent refresh). */\n static getIssuer() {\n var _a;\n if (typeof window === \"undefined\")\n return null;\n try {\n const session = localStorage.getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return session ? ((_a = JSON.parse(session).issuer) !== null && _a !== void 0 ? _a : null) : null;\n }\n catch (_b) {\n return null;\n }\n }\n /* ------------------------------------------------------------------ */\n /* UPDATE TOKENS */\n /* ------------------------------------------------------------------ */\n /**\n * Commit refreshed tokens, bound to the session generation they were minted for.\n *\n * Returns WHICH of the four outcomes happened, and the session the caller must\n * actually use. The old version returned void and silently dropped a refused\n * write, so `getFreshAuthToken` handed back the refreshed token regardless — a\n * request could then execute as the previous user while storage and the UI had\n * already moved to a new one.\n *\n * Never hand back `idToken` directly: use `result.session`.\n */\n static async commitRefreshedTokens(expected, idToken, accessToken, refreshToken) {\n if (typeof window === \"undefined\")\n return { outcome: \"superseded\", session: null };\n // Resolve config BEFORE taking the lock: no awaits are allowed inside the\n // critical section, or another realm could interleave between read and write.\n const config = await getConfig();\n const result = await withSessionLock(() => {\n var _a;\n // Read INSIDE the lock. The snapshot the caller captured before its\n // network refresh is only a comparison key; what gets written is decided\n // against what storage holds right now.\n const current = this.readRaw();\n /* ---------- app-id guard ---------- */\n if ((current === null || current === void 0 ? void 0 : current.appId) && current.appId !== config.appId) {\n localStorage.removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return { outcome: \"superseded\", session: null, cleared: true };\n }\n const next = Object.assign(Object.assign(Object.assign({}, (current !== null && current !== void 0 ? current : {})), { idToken,\n accessToken }), (typeof refreshToken === \"string\" && refreshToken.length > 0\n ? { refreshToken }\n : {}));\n const outcome = decideCommit(current, expected, next);\n if (outcome === \"superseded\")\n return { outcome, session: null };\n // Another caller's refresh of this same login already landed. Theirs is\n // the truth; reporting a principal change here would fail every ordinary\n // concurrent request at expiry, which is the common case.\n if (outcome === \"same-generation-winner\")\n return { outcome, session: current };\n if (outcome === \"already-equal\")\n return { outcome, session: current };\n /* ---------- cross-principal guard (#221) ---------- */\n // Belt-and-braces alongside the generation check: refuse to graft a\n // refreshed token onto a DIFFERENT wallet's stored session. Generations\n // catch a same-wallet re-login, which this address check cannot.\n if (!refreshedTokenMayReplaceStored(idToken, current.address, (s) => this.decodeBase64Url(s))) {\n console.warn(\"[WebSessionManager] commitRefreshedTokens: refreshed token wallet does not match the stored session address — discarding stale refresh\");\n return { outcome: \"superseded\", session: null };\n }\n (_a = next.appId) !== null && _a !== void 0 ? _a : (next.appId = config.appId);\n this.writeRaw(next);\n return { outcome, session: next };\n });\n if (result.cleared)\n notifySessionCleared();\n return { outcome: result.outcome, session: result.session };\n }\n}\nWebSessionManager.BOUNDED_SESSION_STORAGE_KEY = \"bounded_session_storage\";\n","import { refreshSession } from \"./auth-api\";\nimport { isDefinitiveRejection, mayRetainAfterTransportFailure } from \"./refresh-error\";\nimport { getConfig } from \"../client/config\";\nimport { refreshedTokenMayReplaceStored } from \"./session-binding\";\nimport { notifySessionCleared } from \"./session-events\";\nimport { decideCommit, mintSessionGeneration, withSessionLock, } from \"./session-mutation\";\nlet _config = null;\nexport class ReactNativeSessionManager {\n /**\n * Must be called once before any other method.\n *\n * SECURITY: the persisted blob includes the long-lived refresh token, so the\n * `storage` adapter MUST encrypt at rest. The supported pattern is MMKV with an\n * `encryptionKey` held in the OS keystore (Keychain on iOS / Keystore on Android)\n * via react-native-keychain - NOT a keyless MMKV instance, and NEVER a hardcoded key.\n *\n * ```ts\n * import { ReactNativeSessionManager } from '@bounded-sh/core';\n * import { MMKV } from 'react-native-mmkv';\n * import * as Keychain from 'react-native-keychain';\n * import { decode } from 'base-64';\n *\n * // Fetch (or lazily mint) a random 256-bit key stored in the OS keystore.\n * // The keystore - not the app bundle - is the root of trust for the key.\n * async function getMmkvEncryptionKey(): Promise<string> {\n * const service = 'sh.bounded.session.mmkv';\n * const existing = await Keychain.getGenericPassword({ service });\n * if (existing) return existing.password;\n * const bytes = crypto.getRandomValues(new Uint8Array(32));\n * const key = [...bytes].map((b) => b.toString(16).padStart(2, '0')).join('');\n * await Keychain.setGenericPassword('bounded', key, { service });\n * return key;\n * }\n *\n * const encryptionKey = await getMmkvEncryptionKey();\n * const mmkv = new MMKV({ id: 'bounded-session', encryptionKey });\n * ReactNativeSessionManager.configure({\n * storage: {\n * getItem: (k) => mmkv.getString(k) ?? null,\n * setItem: (k, v) => mmkv.set(k, v),\n * removeItem: (k) => mmkv.delete(k),\n * },\n * atob: decode,\n * });\n * ```\n *\n * Unencrypted adapters (bare MMKV, AsyncStorage) are a credential-theft risk and\n * require an explicit opt-in - the manager cannot verify encryption for you:\n *\n * ```ts\n * // Development only: acknowledge that tokens are stored in plaintext.\n * ReactNativeSessionManager.configure({ storage, atob: decode, allowUnsafePlaintext: true });\n * ```\n */\n static configure(cfg) {\n if (cfg.allowUnsafePlaintext === true) {\n // The developer explicitly opted into a plaintext store. Make it loud so it is\n // never a silent production default. (We cannot detect plaintext for the\n // non-opted-in case, hence the required, documented acknowledgment flag.)\n console.warn(\"[ReactNativeSessionManager] configure(): allowUnsafePlaintext=true - the session \" +\n \"(including the long-lived refresh token) is being stored UNENCRYPTED. Use an \" +\n \"encrypted backend (MMKV with a Keychain-held encryptionKey / expo-secure-store) \" +\n \"before shipping; plaintext tokens are readable from a rooted device or a backup.\");\n }\n _config = cfg;\n }\n /**\n * Whether configure() has been called. This is the canonical \"are we on\n * React Native?\" signal used by getActiveSessionManager(): RN consumers MUST\n * call configure() at startup, while web/Node never do. Far more reliable\n * than sniffing `typeof window` (React Native defines a global `window`, so\n * that test misclassifies RN as web and routes session writes to a\n * non-existent localStorage).\n */\n static isConfigured() {\n return _config !== null;\n }\n static getStorage() {\n if (!_config) {\n throw new Error(\"ReactNativeSessionManager.configure() must be called before using session methods.\");\n }\n return _config.storage;\n }\n static decodeBase64(input) {\n if (!_config) {\n throw new Error(\"ReactNativeSessionManager.configure() must be called before using session methods.\");\n }\n return _config.atob(input);\n }\n /**\n * Decode a base64url-encoded string (used by JWT payloads).\n * Normalises base64url → standard base64 before decoding.\n */\n static decodeBase64Url(input) {\n let b64 = input.replace(/-/g, '+').replace(/_/g, '/');\n const pad = b64.length % 4;\n if (pad === 2)\n b64 += '==';\n else if (pad === 3)\n b64 += '=';\n return this.decodeBase64(b64);\n }\n /* ------------------------------------------------------------------ */\n /* STORE */\n /* ------------------------------------------------------------------ */\n static async storeSession(address, accessToken, idToken, refreshToken, issuer) {\n var _a;\n // JWT-wallet binding: refuse to store a session whose idToken is bound\n // to a different wallet than `address`. Prevents races that would otherwise\n // leave storage with mismatched address/token state.\n try {\n const payloadB64 = idToken.split(\".\")[1];\n if (payloadB64) {\n const payload = JSON.parse(this.decodeBase64Url(payloadB64));\n const tokenWallet = payload[\"custom:walletAddress\"];\n if (tokenWallet && tokenWallet !== address) {\n throw new Error(`[ReactNativeSessionManager] Refusing to store session: address (${address}) does not match idToken custom:walletAddress (${tokenWallet})`);\n }\n if (!tokenWallet) {\n console.warn(\"[ReactNativeSessionManager] storeSession: idToken has no custom:walletAddress claim — writing without validation\");\n }\n }\n }\n catch (err) {\n if (typeof (err === null || err === void 0 ? void 0 : err.message) === \"string\" && err.message.includes(\"Refusing to store session\")) {\n throw err;\n }\n console.warn(\"[ReactNativeSessionManager] storeSession: failed to decode idToken for validation. reason:\", (_a = err === null || err === void 0 ? void 0 : err.name) !== null && _a !== void 0 ? _a : \"decode_failed\");\n }\n const config = await getConfig();\n const currentAppId = config.appId;\n // Issuer base for silent refresh (email overrides w/ humanAuthApiUrl; wallet/\n // guest default to authApiUrl). See WebSessionManager for the rationale.\n const sessionIssuer = (issuer || config.authApiUrl || \"\").replace(/\\/$/, \"\");\n // A login always starts a NEW generation; refresh commits preserve it.\n // See WebSessionManager for why lineage cannot be inferred from tokens or\n // address. RN is single-realm, so the lock resolves to direct execution.\n await withSessionLock(() => {\n this.writeRaw(Object.assign({ address,\n accessToken,\n idToken,\n refreshToken, appId: currentAppId, sessionGeneration: mintSessionGeneration() }, (sessionIssuer ? { issuer: sessionIssuer } : {})));\n });\n }\n /** Raw read of the stored blob. Callers inside the lock use this, never a cached copy. */\n static readRaw() {\n try {\n const raw = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return raw ? JSON.parse(raw) : null;\n }\n catch (_a) {\n return null;\n }\n }\n static writeRaw(sessionObj) {\n this.getStorage().setItem(this.BOUNDED_SESSION_STORAGE_KEY, JSON.stringify(sessionObj));\n }\n /** Mirror of WebSessionManager.readSessionWithGeneration. */\n static async readSessionWithGeneration() {\n const existing = this.readRaw();\n if (!existing)\n return null;\n if (existing.sessionGeneration)\n return existing;\n return await withSessionLock(() => {\n const current = this.readRaw();\n if (!current)\n return null;\n if (current.sessionGeneration)\n return current;\n const upgraded = Object.assign(Object.assign({}, current), { sessionGeneration: mintSessionGeneration() });\n this.writeRaw(upgraded);\n return upgraded;\n });\n }\n /* ------------------------------------------------------------------ */\n /* GET */\n /* ------------------------------------------------------------------ */\n static async getSession() {\n var _a;\n const sessionObj = await this.readSessionWithGeneration();\n if (!sessionObj)\n return null;\n const generation = (_a = sessionObj.sessionGeneration) !== null && _a !== void 0 ? _a : null;\n /* ---------- validate app-id ---------- */\n const config = await getConfig();\n if (sessionObj.appId && sessionObj.appId !== config.appId) {\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n /* ---------- check JWT expiration ---------- */\n // No skew buffer, deliberately: this is the restore path, and at boot a token\n // already past `exp` cannot authenticate anything. See WebSessionManager.\n try {\n // Expiry on the ID TOKEN (always a JWT). The OIDC access_token for email/social\n // logins is opaque, so decoding it threw → the catch wiped a valid session.\n const { idToken } = sessionObj;\n const { exp } = JSON.parse(this.decodeBase64Url(idToken.split(\".\")[1]));\n // Treat a MISSING or non-numeric expiry as EXPIRED (fail closed). A bare\n // `Date.now() > exp * 1000` is NaN -> false when exp is absent/non-numeric,\n // so a forged or malformed token with no usable expiry would otherwise be\n // accepted as valid forever.\n const expired = typeof exp !== \"number\" || !Number.isFinite(exp) || Date.now() > exp * 1000;\n if (expired) {\n const { refreshToken } = sessionObj;\n // Expired token with no way to refresh — clear the stale session\n // (mirrors the refresh-failed branch below) so isAuthenticated()\n // does not stay true and every request does not 401 + retry forever.\n if (!refreshToken) {\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n let refreshed;\n try {\n refreshed = await refreshSession(refreshToken, sessionObj.issuer);\n }\n catch (refreshErr) {\n // DS4-0054: only a DEFINITIVE server rejection (401/403) proves the\n // refresh token is dead. A transport failure - offline, DNS, timeout,\n // 5xx - is unknown, not proof the session is invalid. On mobile these\n // blips are common, so destroying local state here signs the user out\n // on a bad network. RETAIN it and return the existing session; the next\n // request retries the refresh. The retention is BOUNDED by the token's\n // own expiry plus a grace window, so a revoked session - or an issuer\n // 401 a gateway rewrote into a 5xx - cannot keep isAuthenticated() true\n // forever on a device that never reaches the issuer again.\n if (isDefinitiveRejection(refreshErr) || !mayRetainAfterTransportFailure(exp)) {\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n return { address: sessionObj.address, session: sessionObj };\n }\n if ((refreshed === null || refreshed === void 0 ? void 0 : refreshed.idToken) && (refreshed === null || refreshed === void 0 ? void 0 : refreshed.accessToken)) {\n const committed = await this.commitRefreshedTokens({ generation, idToken: sessionObj.idToken }, refreshed.idToken, refreshed.accessToken, refreshed.refreshToken);\n // Superseded means a login or logout landed mid-refresh. Returning\n // our stale null would sign the UI out of a session that is now\n // valid, since init() applies whatever restoreSession() returns.\n if (committed.outcome === \"superseded\") {\n const current = this.readRaw();\n if (!current)\n return null;\n return { address: current.address, session: current };\n }\n const newObj = committed.session;\n if (!newObj)\n return null;\n return { address: newObj.address, session: newObj };\n }\n // The server answered but issued no usable tokens - a definitive refusal,\n // not a transport failure - so clear the stale session to stop retry loops,\n // but only if it is still the session we set out to refresh.\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n }\n catch (err) {\n // Token decode or refresh failed — clear stale session to prevent retry loops\n await this.clearSessionIfGeneration(generation);\n return null;\n }\n return { address: sessionObj.address, session: sessionObj };\n }\n /* ------------------------------------------------------------------ */\n /* CLEAR */\n /* ------------------------------------------------------------------ */\n /**\n * Remove the session unconditionally. Async and awaited for the same reason as\n * the web manager: a caller that does not await lets logout() return while the\n * credential is still readable.\n */\n static async clearSession() {\n const removed = await withSessionLock(() => {\n if (this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY) === null)\n return false;\n this.getStorage().removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return true;\n });\n if (removed)\n notifySessionCleared();\n }\n /** Remove only if the stored session is still the one identified by `generation`. */\n static async clearSessionIfGeneration(generation) {\n const removed = await withSessionLock(() => {\n var _a;\n const current = this.readRaw();\n if (!current)\n return false;\n if (generation === null)\n return false;\n if (((_a = current.sessionGeneration) !== null && _a !== void 0 ? _a : null) !== generation)\n return false;\n this.getStorage().removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return true;\n });\n if (removed)\n notifySessionCleared();\n }\n /* ------------------------------------------------------------------ */\n /* IS-AUTH */\n /* ------------------------------------------------------------------ */\n static isAuthenticated() {\n return !!this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n }\n /* ------------------------------------------------------------------ */\n /* TOKEN HELPERS */\n /* ------------------------------------------------------------------ */\n static getIdToken() {\n try {\n const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return session ? JSON.parse(session).idToken : null;\n }\n catch (_a) {\n return null;\n }\n }\n /** The issuer base that minted this session (for routing silent refresh). */\n static getIssuer() {\n var _a;\n try {\n const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return session ? ((_a = JSON.parse(session).issuer) !== null && _a !== void 0 ? _a : null) : null;\n }\n catch (_b) {\n return null;\n }\n }\n static getRefreshToken() {\n try {\n const session = this.getStorage().getItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return session ? JSON.parse(session).refreshToken : null;\n }\n catch (_a) {\n return null;\n }\n }\n /* ------------------------------------------------------------------ */\n /* UPDATE TOKENS */\n /* ------------------------------------------------------------------ */\n /**\n * Commit refreshed tokens bound to the generation they were minted for.\n * Mirror of WebSessionManager.commitRefreshedTokens; see it for the rationale.\n */\n static async commitRefreshedTokens(expected, idToken, accessToken, refreshToken) {\n // Resolve config BEFORE the lock: no awaits inside the critical section.\n const config = await getConfig();\n const result = await withSessionLock(() => {\n var _a;\n const current = this.readRaw();\n /* ---------- app-id guard ---------- */\n if ((current === null || current === void 0 ? void 0 : current.appId) && current.appId !== config.appId) {\n this.getStorage().removeItem(this.BOUNDED_SESSION_STORAGE_KEY);\n return { outcome: \"superseded\", session: null, cleared: true };\n }\n const next = Object.assign(Object.assign(Object.assign({}, (current !== null && current !== void 0 ? current : {})), { idToken,\n accessToken }), (typeof refreshToken === \"string\" && refreshToken.length > 0\n ? { refreshToken }\n : {}));\n const outcome = decideCommit(current, expected, next);\n if (outcome === \"superseded\")\n return { outcome, session: null };\n if (outcome === \"same-generation-winner\")\n return { outcome, session: current };\n if (outcome === \"already-equal\")\n return { outcome, session: current };\n /* ---------- cross-principal guard (#220) ---------- */\n if (!refreshedTokenMayReplaceStored(idToken, current.address, (s) => this.decodeBase64Url(s))) {\n console.warn(\"[ReactNativeSessionManager] commitRefreshedTokens: refreshed token wallet does not match the stored session address — discarding stale refresh\");\n return { outcome: \"superseded\", session: null };\n }\n (_a = next.appId) !== null && _a !== void 0 ? _a : (next.appId = config.appId);\n this.writeRaw(next);\n return { outcome, session: next };\n });\n if (result.cleared)\n notifySessionCleared();\n return { outcome: result.outcome, session: result.session };\n }\n}\nReactNativeSessionManager.BOUNDED_SESSION_STORAGE_KEY = \"bounded_session_storage\";\n","import { WebSessionManager } from './web-session-manager';\nimport { ReactNativeSessionManager } from './rn-session-manager';\n/**\n * Return the active CLIENT session manager for the current runtime.\n *\n * This is the single source of truth for \"which store holds the session token\"\n * and MUST be used everywhere the client reads/writes the session (login,\n * restore, logout, and — critically — the per-request auth-header path in\n * utils.ts). Previously this decision was made ad-hoc with\n * `typeof window !== 'undefined' ? WebSessionManager : ReactNativeSessionManager`,\n * which is wrong on React Native: RN defines a global `window`, so that test\n * picked WebSessionManager and then hit a non-existent `localStorage` — the\n * session was silently dropped (or threw), so every authenticated request 403'd.\n *\n * Decision rule: if a consumer configured the React Native session manager\n * (ReactNativeSessionManager.configure(), which RN apps call once at startup and\n * web/Node never do), we're on RN — use it. Otherwise use the localStorage-backed\n * WebSessionManager (which itself no-ops gracefully in Node/SSR where there is no\n * `window`). This changes ONLY React Native behavior; web and Node are unchanged.\n *\n * NOTE: this intentionally does NOT cover the SERVER (keypair) path — callers that\n * branch on `isServer` keep using ServerSessionManager and only fall through to\n * getActiveSessionManager() for the browser/RN client case.\n */\nexport function getActiveSessionManager() {\n return ReactNativeSessionManager.isConfigured()\n ? ReactNativeSessionManager\n : WebSessionManager;\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nconst base64 = require('base64-js')\nconst ieee754 = require('ieee754')\nconst customInspectSymbol =\n (typeof Symbol === 'function' && typeof Symbol['for'] === 'function') // eslint-disable-line dot-notation\n ? Symbol['for']('nodejs.util.inspect.custom') // eslint-disable-line dot-notation\n : null\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\nconst K_MAX_LENGTH = 0x7fffffff\nexports.kMaxLength = K_MAX_LENGTH\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Print warning and recommend using `buffer` v4.x which has an Object\n * implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * We report that the browser does not support typed arrays if the are not subclassable\n * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`\n * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support\n * for __proto__ and has a buggy typed array implementation.\n */\nBuffer.TYPED_ARRAY_SUPPORT = typedArraySupport()\n\nif (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&\n typeof console.error === 'function') {\n console.error(\n 'This browser lacks typed array (Uint8Array) support which is required by ' +\n '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'\n )\n}\n\nfunction typedArraySupport () {\n // Can typed array instances can be augmented?\n try {\n const arr = new Uint8Array(1)\n const proto = { foo: function () { return 42 } }\n Object.setPrototypeOf(proto, Uint8Array.prototype)\n Object.setPrototypeOf(arr, proto)\n return arr.foo() === 42\n } catch (e) {\n return false\n }\n}\n\nObject.defineProperty(Buffer.prototype, 'parent', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.buffer\n }\n})\n\nObject.defineProperty(Buffer.prototype, 'offset', {\n enumerable: true,\n get: function () {\n if (!Buffer.isBuffer(this)) return undefined\n return this.byteOffset\n }\n})\n\nfunction createBuffer (length) {\n if (length > K_MAX_LENGTH) {\n throw new RangeError('The value \"' + length + '\" is invalid for option \"size\"')\n }\n // Return an augmented `Uint8Array` instance\n const buf = new Uint8Array(length)\n Object.setPrototypeOf(buf, Buffer.prototype)\n return buf\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new TypeError(\n 'The \"string\" argument must be of type string. Received type number'\n )\n }\n return allocUnsafe(arg)\n }\n return from(arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\nfunction from (value, encodingOrOffset, length) {\n if (typeof value === 'string') {\n return fromString(value, encodingOrOffset)\n }\n\n if (ArrayBuffer.isView(value)) {\n return fromArrayView(value)\n }\n\n if (value == null) {\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n }\n\n if (isInstance(value, ArrayBuffer) ||\n (value && isInstance(value.buffer, ArrayBuffer))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof SharedArrayBuffer !== 'undefined' &&\n (isInstance(value, SharedArrayBuffer) ||\n (value && isInstance(value.buffer, SharedArrayBuffer)))) {\n return fromArrayBuffer(value, encodingOrOffset, length)\n }\n\n if (typeof value === 'number') {\n throw new TypeError(\n 'The \"value\" argument must not be of type number. Received type number'\n )\n }\n\n const valueOf = value.valueOf && value.valueOf()\n if (valueOf != null && valueOf !== value) {\n return Buffer.from(valueOf, encodingOrOffset, length)\n }\n\n const b = fromObject(value)\n if (b) return b\n\n if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&\n typeof value[Symbol.toPrimitive] === 'function') {\n return Buffer.from(value[Symbol.toPrimitive]('string'), encodingOrOffset, length)\n }\n\n throw new TypeError(\n 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +\n 'or Array-like Object. Received type ' + (typeof value)\n )\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(value, encodingOrOffset, length)\n}\n\n// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:\n// https://github.com/feross/buffer/pull/148\nObject.setPrototypeOf(Buffer.prototype, Uint8Array.prototype)\nObject.setPrototypeOf(Buffer, Uint8Array)\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be of type number')\n } else if (size < 0) {\n throw new RangeError('The value \"' + size + '\" is invalid for option \"size\"')\n }\n}\n\nfunction alloc (size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpreted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(size).fill(fill, encoding)\n : createBuffer(size).fill(fill)\n }\n return createBuffer(size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(size, fill, encoding)\n}\n\nfunction allocUnsafe (size) {\n assertSize(size)\n return createBuffer(size < 0 ? 0 : checked(size) | 0)\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(size)\n}\n\nfunction fromString (string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n\n const length = byteLength(string, encoding) | 0\n let buf = createBuffer(length)\n\n const actual = buf.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n buf = buf.slice(0, actual)\n }\n\n return buf\n}\n\nfunction fromArrayLike (array) {\n const length = array.length < 0 ? 0 : checked(array.length) | 0\n const buf = createBuffer(length)\n for (let i = 0; i < length; i += 1) {\n buf[i] = array[i] & 255\n }\n return buf\n}\n\nfunction fromArrayView (arrayView) {\n if (isInstance(arrayView, Uint8Array)) {\n const copy = new Uint8Array(arrayView)\n return fromArrayBuffer(copy.buffer, copy.byteOffset, copy.byteLength)\n }\n return fromArrayLike(arrayView)\n}\n\nfunction fromArrayBuffer (array, byteOffset, length) {\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\"offset\" is outside of buffer bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\"length\" is outside of buffer bounds')\n }\n\n let buf\n if (byteOffset === undefined && length === undefined) {\n buf = new Uint8Array(array)\n } else if (length === undefined) {\n buf = new Uint8Array(array, byteOffset)\n } else {\n buf = new Uint8Array(array, byteOffset, length)\n }\n\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(buf, Buffer.prototype)\n\n return buf\n}\n\nfunction fromObject (obj) {\n if (Buffer.isBuffer(obj)) {\n const len = checked(obj.length) | 0\n const buf = createBuffer(len)\n\n if (buf.length === 0) {\n return buf\n }\n\n obj.copy(buf, 0, 0, len)\n return buf\n }\n\n if (obj.length !== undefined) {\n if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {\n return createBuffer(0)\n }\n return fromArrayLike(obj)\n }\n\n if (obj.type === 'Buffer' && Array.isArray(obj.data)) {\n return fromArrayLike(obj.data)\n }\n}\n\nfunction checked (length) {\n // Note: cannot use `length < K_MAX_LENGTH` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= K_MAX_LENGTH) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return b != null && b._isBuffer === true &&\n b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false\n}\n\nBuffer.compare = function compare (a, b) {\n if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)\n if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError(\n 'The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array'\n )\n }\n\n if (a === b) return 0\n\n let x = a.length\n let y = b.length\n\n for (let i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!Array.isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n let i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n const buffer = Buffer.allocUnsafe(length)\n let pos = 0\n for (i = 0; i < list.length; ++i) {\n let buf = list[i]\n if (isInstance(buf, Uint8Array)) {\n if (pos + buf.length > buffer.length) {\n if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf)\n buf.copy(buffer, pos)\n } else {\n Uint8Array.prototype.set.call(\n buffer,\n buf,\n pos\n )\n }\n } else if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n } else {\n buf.copy(buffer, pos)\n }\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n throw new TypeError(\n 'The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. ' +\n 'Received type ' + typeof string\n )\n }\n\n const len = string.length\n const mustMatch = (arguments.length > 2 && arguments[2] === true)\n if (!mustMatch && len === 0) return 0\n\n // Use a for loop to avoid recursion\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) {\n return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8\n }\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n let loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coercion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)\n// to detect a Buffer instance. It's not possible to use `instanceof Buffer`\n// reliably in a browserify context because there could be multiple different\n// copies of the 'buffer' package in use. This method works even for Buffer\n// instances that were created from another copy of the `buffer` package.\n// See: https://github.com/feross/buffer/issues/154\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n const i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n const len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (let i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n const len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (let i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n const len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (let i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n const length = this.length\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.toLocaleString = Buffer.prototype.toString\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n let str = ''\n const max = exports.INSPECT_MAX_BYTES\n str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()\n if (this.length > max) str += ' ... '\n return '<Buffer ' + str + '>'\n}\nif (customInspectSymbol) {\n Buffer.prototype[customInspectSymbol] = Buffer.prototype.inspect\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (isInstance(target, Uint8Array)) {\n target = Buffer.from(target, target.offset, target.byteLength)\n }\n if (!Buffer.isBuffer(target)) {\n throw new TypeError(\n 'The \"target\" argument must be one of type Buffer or Uint8Array. ' +\n 'Received type ' + (typeof target)\n )\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n let x = thisEnd - thisStart\n let y = end - start\n const len = Math.min(x, y)\n\n const thisCopy = this.slice(thisStart, thisEnd)\n const targetCopy = target.slice(start, end)\n\n for (let i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (numberIsNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [val], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n let indexSize = 1\n let arrLength = arr.length\n let valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n let i\n if (dir) {\n let foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n let found = true\n for (let j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n const remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n const strLen = string.length\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n let i\n for (i = 0; i < length; ++i) {\n const parsed = parseInt(string.substr(i * 2, 2), 16)\n if (numberIsNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset >>> 0\n if (isFinite(length)) {\n length = length >>> 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n const remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n let loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n case 'latin1':\n case 'binary':\n return asciiWrite(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n const res = []\n\n let i = start\n while (i < end) {\n const firstByte = buf[i]\n let codePoint = null\n let bytesPerSequence = (firstByte > 0xEF)\n ? 4\n : (firstByte > 0xDF)\n ? 3\n : (firstByte > 0xBF)\n ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n let secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nconst MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n const len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n let res = ''\n let i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n let ret = ''\n end = Math.min(buf.length, end)\n\n for (let i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n const len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n let out = ''\n for (let i = start; i < end; ++i) {\n out += hexSliceLookupTable[buf[i]]\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n const bytes = buf.slice(start, end)\n let res = ''\n // If bytes.length is odd, the last 8 bits must be ignored (same as node.js)\n for (let i = 0; i < bytes.length - 1; i += 2) {\n res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n const len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n const newBuf = this.subarray(start, end)\n // Return an augmented `Uint8Array` instance\n Object.setPrototypeOf(newBuf, Buffer.prototype)\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUintLE =\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUintBE =\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n let val = this[offset + --byteLength]\n let mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUint8 =\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUint16LE =\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUint16BE =\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUint32LE =\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUint32BE =\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readBigUInt64LE = defineBigIntMethod(function readBigUInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const lo = first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24\n\n const hi = this[++offset] +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n last * 2 ** 24\n\n return BigInt(lo) + (BigInt(hi) << BigInt(32))\n})\n\nBuffer.prototype.readBigUInt64BE = defineBigIntMethod(function readBigUInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const hi = first * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n const lo = this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last\n\n return (BigInt(hi) << BigInt(32)) + BigInt(lo)\n})\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let val = this[offset]\n let mul = 1\n let i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n let i = byteLength\n let mul = 1\n let val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 2, this.length)\n const val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readBigInt64LE = defineBigIntMethod(function readBigInt64LE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = this[offset + 4] +\n this[offset + 5] * 2 ** 8 +\n this[offset + 6] * 2 ** 16 +\n (last << 24) // Overflow\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(first +\n this[++offset] * 2 ** 8 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 24)\n})\n\nBuffer.prototype.readBigInt64BE = defineBigIntMethod(function readBigInt64BE (offset) {\n offset = offset >>> 0\n validateNumber(offset, 'offset')\n const first = this[offset]\n const last = this[offset + 7]\n if (first === undefined || last === undefined) {\n boundsError(offset, this.length - 8)\n }\n\n const val = (first << 24) + // Overflow\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n this[++offset]\n\n return (BigInt(val) << BigInt(32)) +\n BigInt(this[++offset] * 2 ** 24 +\n this[++offset] * 2 ** 16 +\n this[++offset] * 2 ** 8 +\n last)\n})\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n offset = offset >>> 0\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUintLE =\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let mul = 1\n let i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUintBE =\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n byteLength = byteLength >>> 0\n if (!noAssert) {\n const maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n let i = byteLength - 1\n let mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUint8 =\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeUint16LE =\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeUint16BE =\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeUint32LE =\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeUint32BE =\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nfunction wrtBigUInt64LE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n lo = lo >> 8\n buf[offset++] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n hi = hi >> 8\n buf[offset++] = hi\n return offset\n}\n\nfunction wrtBigUInt64BE (buf, value, offset, min, max) {\n checkIntBI(value, min, max, buf, offset, 7)\n\n let lo = Number(value & BigInt(0xffffffff))\n buf[offset + 7] = lo\n lo = lo >> 8\n buf[offset + 6] = lo\n lo = lo >> 8\n buf[offset + 5] = lo\n lo = lo >> 8\n buf[offset + 4] = lo\n let hi = Number(value >> BigInt(32) & BigInt(0xffffffff))\n buf[offset + 3] = hi\n hi = hi >> 8\n buf[offset + 2] = hi\n hi = hi >> 8\n buf[offset + 1] = hi\n hi = hi >> 8\n buf[offset] = hi\n return offset + 8\n}\n\nBuffer.prototype.writeBigUInt64LE = defineBigIntMethod(function writeBigUInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeBigUInt64BE = defineBigIntMethod(function writeBigUInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, BigInt(0), BigInt('0xffffffffffffffff'))\n})\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = 0\n let mul = 1\n let sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n const limit = Math.pow(2, (8 * byteLength) - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n let i = byteLength - 1\n let mul = 1\n let sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n return offset + 4\n}\n\nBuffer.prototype.writeBigInt64LE = defineBigIntMethod(function writeBigInt64LE (value, offset = 0) {\n return wrtBigUInt64LE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nBuffer.prototype.writeBigInt64BE = defineBigIntMethod(function writeBigInt64BE (value, offset = 0) {\n return wrtBigUInt64BE(this, value, offset, -BigInt('0x8000000000000000'), BigInt('0x7fffffffffffffff'))\n})\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n value = +value\n offset = offset >>> 0\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('Index out of range')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n const len = end - start\n\n if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {\n // Use built-in when available, missing from IE11\n this.copyWithin(targetStart, start, end)\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, end),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n if (val.length === 1) {\n const code = val.charCodeAt(0)\n if ((encoding === 'utf8' && code < 128) ||\n encoding === 'latin1') {\n // Fast path: If `val` fits into a single byte, use that numeric value.\n val = code\n }\n }\n } else if (typeof val === 'number') {\n val = val & 255\n } else if (typeof val === 'boolean') {\n val = Number(val)\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n let i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n const bytes = Buffer.isBuffer(val)\n ? val\n : Buffer.from(val, encoding)\n const len = bytes.length\n if (len === 0) {\n throw new TypeError('The value \"' + val +\n '\" is invalid for argument \"value\"')\n }\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// CUSTOM ERRORS\n// =============\n\n// Simplified versions from Node, changed for Buffer-only usage\nconst errors = {}\nfunction E (sym, getMessage, Base) {\n errors[sym] = class NodeError extends Base {\n constructor () {\n super()\n\n Object.defineProperty(this, 'message', {\n value: getMessage.apply(this, arguments),\n writable: true,\n configurable: true\n })\n\n // Add the error code to the name to include it in the stack trace.\n this.name = `${this.name} [${sym}]`\n // Access the stack to generate the error message including the error code\n // from the name.\n this.stack // eslint-disable-line no-unused-expressions\n // Reset the name to the actual name.\n delete this.name\n }\n\n get code () {\n return sym\n }\n\n set code (value) {\n Object.defineProperty(this, 'code', {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n })\n }\n\n toString () {\n return `${this.name} [${sym}]: ${this.message}`\n }\n }\n}\n\nE('ERR_BUFFER_OUT_OF_BOUNDS',\n function (name) {\n if (name) {\n return `${name} is outside of buffer bounds`\n }\n\n return 'Attempt to access memory outside buffer bounds'\n }, RangeError)\nE('ERR_INVALID_ARG_TYPE',\n function (name, actual) {\n return `The \"${name}\" argument must be of type number. Received type ${typeof actual}`\n }, TypeError)\nE('ERR_OUT_OF_RANGE',\n function (str, range, input) {\n let msg = `The value of \"${str}\" is out of range.`\n let received = input\n if (Number.isInteger(input) && Math.abs(input) > 2 ** 32) {\n received = addNumericalSeparator(String(input))\n } else if (typeof input === 'bigint') {\n received = String(input)\n if (input > BigInt(2) ** BigInt(32) || input < -(BigInt(2) ** BigInt(32))) {\n received = addNumericalSeparator(received)\n }\n received += 'n'\n }\n msg += ` It must be ${range}. Received ${received}`\n return msg\n }, RangeError)\n\nfunction addNumericalSeparator (val) {\n let res = ''\n let i = val.length\n const start = val[0] === '-' ? 1 : 0\n for (; i >= start + 4; i -= 3) {\n res = `_${val.slice(i - 3, i)}${res}`\n }\n return `${val.slice(0, i)}${res}`\n}\n\n// CHECK FUNCTIONS\n// ===============\n\nfunction checkBounds (buf, offset, byteLength) {\n validateNumber(offset, 'offset')\n if (buf[offset] === undefined || buf[offset + byteLength] === undefined) {\n boundsError(offset, buf.length - (byteLength + 1))\n }\n}\n\nfunction checkIntBI (value, min, max, buf, offset, byteLength) {\n if (value > max || value < min) {\n const n = typeof min === 'bigint' ? 'n' : ''\n let range\n if (byteLength > 3) {\n if (min === 0 || min === BigInt(0)) {\n range = `>= 0${n} and < 2${n} ** ${(byteLength + 1) * 8}${n}`\n } else {\n range = `>= -(2${n} ** ${(byteLength + 1) * 8 - 1}${n}) and < 2 ** ` +\n `${(byteLength + 1) * 8 - 1}${n}`\n }\n } else {\n range = `>= ${min}${n} and <= ${max}${n}`\n }\n throw new errors.ERR_OUT_OF_RANGE('value', range, value)\n }\n checkBounds(buf, offset, byteLength)\n}\n\nfunction validateNumber (value, name) {\n if (typeof value !== 'number') {\n throw new errors.ERR_INVALID_ARG_TYPE(name, 'number', value)\n }\n}\n\nfunction boundsError (value, length, type) {\n if (Math.floor(value) !== value) {\n validateNumber(value, type)\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset', 'an integer', value)\n }\n\n if (length < 0) {\n throw new errors.ERR_BUFFER_OUT_OF_BOUNDS()\n }\n\n throw new errors.ERR_OUT_OF_RANGE(type || 'offset',\n `>= ${type ? 1 : 0} and <= ${length}`,\n value)\n}\n\n// HELPER FUNCTIONS\n// ================\n\nconst INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node takes equal signs as end of the Base64 encoding\n str = str.split('=')[0]\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = str.trim().replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n let codePoint\n const length = string.length\n let leadSurrogate = null\n const bytes = []\n\n for (let i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n let c, hi, lo\n const byteArray = []\n for (let i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n let i\n for (i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\n// ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass\n// the `instanceof` check but they should be treated as of that type.\n// See: https://github.com/feross/buffer/issues/166\nfunction isInstance (obj, type) {\n return obj instanceof type ||\n (obj != null && obj.constructor != null && obj.constructor.name != null &&\n obj.constructor.name === type.name)\n}\nfunction numberIsNaN (obj) {\n // For IE11 support\n return obj !== obj // eslint-disable-line no-self-compare\n}\n\n// Create lookup table for `toString('hex')`\n// See: https://github.com/feross/buffer/issues/219\nconst hexSliceLookupTable = (function () {\n const alphabet = '0123456789abcdef'\n const table = new Array(256)\n for (let i = 0; i < 16; ++i) {\n const i16 = i * 16\n for (let j = 0; j < 16; ++j) {\n table[i16 + j] = alphabet[i] + alphabet[j]\n }\n }\n return table\n})()\n\n// Return not function with Error if BigInt not supported\nfunction defineBigIntMethod (fn) {\n return typeof BigInt === 'undefined' ? BufferBigIntNotDefined : fn\n}\n\nfunction BufferBigIntNotDefined () {\n throw new Error('BigInt not supported')\n}\n","import { Buffer } from 'buffer';\nimport nacl from \"tweetnacl\";\nimport { createSessionWithSignature, genAuthNonce } from \"./auth-api\";\nconst NO_AMBIENT_SERVER_SESSION = \"Server sessions are not process-global. Use createWalletClient({ keypair }) and call that wallet client's methods.\";\n/* A create that a concurrent clearSession()/setSession() invalidated must fail\n * closed rather than hand its stale, generation-mismatched session back to the\n * caller; the caller re-requests and gets a session for the current generation. */\nconst STALE_SESSION_CREATE = \"Server session create was superseded by a concurrent clearSession()/setSession(); retry to obtain a fresh session.\";\n/* ------------------------------------------------------------------ */\n/* SESSION MANAGER */\n/* ------------------------------------------------------------------ */\nexport class ServerSessionManager {\n constructor(keypair, sessionFactory, sessionConfig) {\n /* Private cache (lives for the life of the instance) */\n this.session = null;\n /* Coalesce concurrent getSession() calls into a single in-flight request */\n this.pendingSession = null;\n /* Monotonic generation, bumped on clear/set. An in-flight createSession() only\n * commits its result to the cache if the generation still matches the value it\n * captured when it started - so a clearSession()/setSession() that happens WHILE\n * a create is in flight deterministically wins, and the late result can't\n * silently re-install a session the caller just cleared/replaced (#259). */\n this.generation = 0;\n this.keypair = keypair !== null && keypair !== void 0 ? keypair : null;\n this.sessionFactory = sessionFactory !== null && sessionFactory !== void 0 ? sessionFactory : null;\n this.sessionConfig = sessionConfig !== null && sessionConfig !== void 0 ? sessionConfig : null;\n }\n /**\n * Create a session manager for a specific keypair.\n * Each instance has its own independent session cache.\n *\n * `sessionConfig` (optional) pins the app+issuer the keypair signs/mints\n * against, so re-signing after expiry never follows a later global init().\n */\n static forKeypair(keypair, sessionConfig) {\n return new ServerSessionManager(keypair, undefined, sessionConfig);\n }\n /**\n * Create an isolated server session manager for a non-Solana signer (currently\n * EVM/SIWE). The factory must perform the signature exchange and return the\n * canonical signer address with its tokens; no signer state becomes global.\n */\n static forSessionFactory(factory) {\n if (typeof factory !== 'function')\n throw new Error('A server session factory is required');\n return new ServerSessionManager(undefined, factory);\n }\n /* ---------------------------------------------- *\n * Session creation (instance method)\n * ---------------------------------------------- */\n async createSession() {\n var _a;\n if (this.sessionFactory) {\n const session = await this.sessionFactory();\n if (!session || typeof session.address !== 'string' || !session.address ||\n typeof session.idToken !== 'string' || !session.idToken ||\n typeof session.accessToken !== 'string' || !session.accessToken ||\n typeof session.refreshToken !== 'string' || !session.refreshToken) {\n throw new Error('Server signer session factory returned an invalid session');\n }\n return session;\n }\n if (!this.keypair) {\n throw new Error(NO_AMBIENT_SERVER_SESSION);\n }\n const kp = this.keypair;\n const address = kp.publicKey.toBase58();\n const sessionConfig = (_a = this.sessionConfig) !== null && _a !== void 0 ? _a : undefined;\n /* fetch nonce from auth API (bound to the snapshotted app+issuer) */\n const nonce = await genAuthNonce(sessionConfig);\n const { genSolanaMessage } = await import(\"./sol/solana-message\");\n const message = await genSolanaMessage(address, nonce, sessionConfig === null || sessionConfig === void 0 ? void 0 : sessionConfig.appId);\n /* sign the message */\n const sigBytes = nacl.sign.detached(new TextEncoder().encode(message), kp.secretKey);\n const signature = Buffer.from(sigBytes).toString(\"base64\");\n /* call auth API (bound to the snapshotted app+issuer) */\n const { accessToken, idToken, refreshToken, } = await createSessionWithSignature(address, message, signature, undefined, sessionConfig);\n return { address, accessToken, idToken, refreshToken };\n }\n /* ---------------------------------------------- *\n * GET (lazy-fetch)\n * ---------------------------------------------- */\n async getSession() {\n if (this.session !== null) {\n return this.session;\n }\n // If a session creation is already in-flight, reuse that promise\n // instead of firing a second concurrent request.\n if (this.pendingSession !== null) {\n return this.pendingSession;\n }\n const startedGeneration = this.generation;\n // Capture the composed promise so BOTH the cache commit and the in-flight\n // pointer reset can verify this create is still the active one. A\n // clearSession()/setSession() during the create may have started a NEWER\n // create that now owns `pendingSession`; neither the commit nor the reset may\n // touch state that no longer belongs to this create.\n const pending = this.createSession()\n .then((session) => {\n if (this.generation !== startedGeneration) {\n // A clear/set won the race while this create was in flight. Do NOT\n // cache the now-invalidated session and do NOT return it to the\n // caller - fail closed so the caller re-requests against the current\n // generation instead of using a stale token.\n throw new Error(STALE_SESSION_CREATE);\n }\n this.session = session;\n return session;\n })\n .finally(() => {\n // Release the in-flight pointer ONLY if it still refers to THIS create.\n // A concurrent clearSession() nulled it and a newer create may already\n // own it; clearing unconditionally would erase that create's coalescing\n // and force later callers to redo the nonce/signature/session mint.\n if (this.pendingSession === pending) {\n this.pendingSession = null;\n }\n });\n this.pendingSession = pending;\n return pending;\n }\n /* ---------------------------------------------- *\n * STORE (overwrites the cached value)\n * ---------------------------------------------- */\n setSession(session) {\n this.generation++;\n this.session = session;\n }\n /* ---------------------------------------------- *\n * CLEAR (e.g. after explicit logout)\n * ---------------------------------------------- */\n clearSession() {\n this.generation++;\n this.session = null;\n this.pendingSession = null;\n }\n /* ---------------------------------------------- *\n * QUICK helpers\n * ---------------------------------------------- */\n isAuthenticated() {\n return this.session !== null;\n }\n getIdToken() {\n var _a, _b;\n return (_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.idToken) !== null && _b !== void 0 ? _b : null;\n }\n getRefreshToken() {\n var _a, _b;\n return (_b = (_a = this.session) === null || _a === void 0 ? void 0 : _a.refreshToken) !== null && _b !== void 0 ? _b : null;\n }\n}\n/* The default singleton exists only so top-level server calls fail closed. */\nServerSessionManager.instance = new ServerSessionManager();\n","/**\n * Safe base64 helpers for bounded-core.\n *\n * Uses the global atob/btoa when available (browser, RN with polyfill),\n * falls back to the 'buffer' package (Node.js / SSR / RN without polyfill).\n *\n * These are used instead of bare `atob()`/`btoa()` so the core package\n * works in React Native without requiring the consumer to polyfill globals.\n *\n * Both directions are UTF-8-safe: bare btoa / Buffer('binary') are LATIN-1 and\n * throw (surrogate-pair emoji) or silently mangle (accents, CJK) any code point\n * > 0xFF, corrupting user text - e.g. an AI-query `prompt` - before it is sent.\n * safeBtoa base64s the UTF-8 bytes; safeAtob is its exact inverse, and the\n * realtime worker decodes the same bytes as UTF-8 (src/utf8-base64.ts). ASCII is\n * byte-identical either way, so JWT (decodeBase64Url) decoding is unaffected.\n */\nimport { Buffer } from 'buffer';\nexport function safeAtob(input) {\n if (typeof globalThis.atob === 'function') {\n const binary = globalThis.atob(input);\n const bytes = Uint8Array.from(binary, (c) => c.charCodeAt(0));\n return new TextDecoder().decode(bytes);\n }\n return Buffer.from(input, 'base64').toString('utf-8');\n}\nexport function safeBtoa(input) {\n const bytes = new TextEncoder().encode(input);\n if (typeof globalThis.btoa === 'function') {\n let binary = '';\n for (let i = 0; i < bytes.length; i++)\n binary += String.fromCharCode(bytes[i]);\n return globalThis.btoa(binary);\n }\n return Buffer.from(bytes).toString('base64');\n}\n/**\n * Decode a base64url-encoded string (used by JWT payloads).\n * Normalises base64url → standard base64 before decoding.\n */\nexport function decodeBase64Url(input) {\n let b64 = input.replace(/-/g, '+').replace(/_/g, '/');\n const pad = b64.length % 4;\n if (pad === 2)\n b64 += '==';\n else if (pad === 3)\n b64 += '=';\n return safeAtob(b64);\n}\n","// evm-utils.ts — the EVM twin of sol/sol-utils.ts's genSolanaMessage. It builds\n// the canonical EIP-4361 (Sign-In with Ethereum, SIWE) prompt the bounded-auth\n// issuer verifies, and normalizes EVM addresses to the single canonical form the\n// identity layer matches on.\n//\n// The SIWE message MUST match bounded-auth's parser byte-for-byte\n// (packages/cdk/cloudflare/bounded-auth/src/verify-siwe.ts → parseSiweMessage):\n// <domain> wants you to sign in with your Ethereum account:\n// <address>\n// <blank>\n// <statement>\n// <blank>\n// URI: <uri>\n// Version: 1\n// Chain ID: <chainId>\n// Nonce: <nonce>\n// Issued At: <ISO8601>\n// Expiration Time: <ISO8601>\n// Resources:\n// - bounded:app:<appId>\n//\n// Bindings the verifier enforces (so we produce them exactly): the address is\n// lowercased (identity match is case-sensitive, so lowercase-at-boundary is\n// mandatory), the single `bounded:app:<appId>` resource binds the signature to\n// THIS app (a signature for one app must not mint a session for another — the\n// SIWE analog of genSolanaMessage's `App ID:` line), and Expiration Time is\n// REQUIRED and must fall within the issuer's 10-minute max validity window.\n/** Default statement — kept identical to genSolanaMessage's for a consistent prompt. */\nconst DEFAULT_STATEMENT = 'Sign this message to authenticate with our application.';\n/** Match bounded-auth's MAX_AUTH_WINDOW_MS (10 min); we default to a 5-min window. */\nconst DEFAULT_VALIDITY_MS = 5 * 60 * 1000;\n/**\n * Build the canonical EIP-4361 SIWE message the bounded-auth issuer verifies.\n *\n * @param address the connected EVM account (lowercased into the prompt).\n * @param nonce single-use nonce from genAuthNonce().\n * @param appId the target app id (bound as the sole `bounded:app:<appId>` resource).\n * @param domain RFC-3986 authority of the requesting site (e.g. window.location.host).\n * @param uri the requesting URI; its origin is bound to the domain and actual browser Origin.\n */\nexport function genSiweMessage(address, nonce, appId, domain, uri, options = {}) {\n var _a, _b, _c, _d, _e;\n const addr = normalizeEvmAddress(address);\n if (!addr)\n throw new Error('SIWE address must be a 20-byte 0x-prefixed EVM address');\n const statement = (_a = options.statement) !== null && _a !== void 0 ? _a : DEFAULT_STATEMENT;\n const version = (_b = options.version) !== null && _b !== void 0 ? _b : '1';\n const chainId = (_c = options.chainId) !== null && _c !== void 0 ? _c : 1;\n if (statement !== DEFAULT_STATEMENT)\n throw new Error('SIWE statement must use the canonical Bounded authentication text');\n if (version !== '1')\n throw new Error('SIWE version must be 1');\n if (!Number.isSafeInteger(chainId) || chainId <= 0)\n throw new Error('SIWE chainId must be a positive safe integer');\n if (!/^[A-Za-z0-9]{8,}$/.test(nonce))\n throw new Error('SIWE nonce must be at least 8 alphanumeric characters');\n if (!appId || /[\\r\\n]/.test(appId))\n throw new Error('SIWE appId is required and must be single-line');\n if (!domain || domain !== domain.trim() || /[\\s/@?#\\\\]/.test(domain))\n throw new Error('SIWE domain must be an RFC-3986 authority');\n try {\n const parsedAuthority = new URL(`https://${domain}`);\n if (parsedAuthority.username || parsedAuthority.password || parsedAuthority.pathname !== '/' ||\n parsedAuthority.search || parsedAuthority.hash || parsedAuthority.host.toLowerCase() !== domain) {\n throw new Error('non-canonical authority');\n }\n }\n catch (_f) {\n throw new Error('SIWE domain must be a canonical lowercase RFC-3986 authority');\n }\n let parsedUri;\n try {\n parsedUri = new URL(uri);\n }\n catch (_g) {\n throw new Error('SIWE URI must be an absolute URL');\n }\n const local = parsedUri.hostname === 'localhost' || parsedUri.hostname === '127.0.0.1' || parsedUri.hostname === '[::1]';\n if (parsedUri.protocol !== 'https:' && !(local && parsedUri.protocol === 'http:')) {\n throw new Error('SIWE URI must use HTTPS (HTTP is allowed only for localhost)');\n }\n if (parsedUri.username || parsedUri.password || parsedUri.hash || parsedUri.host.toLowerCase() !== domain.toLowerCase()) {\n throw new Error('SIWE URI authority must match the SIWE domain');\n }\n const issuedAtDate = (_d = options.issuedAt) !== null && _d !== void 0 ? _d : new Date();\n const expirationDate = (_e = options.expirationTime) !== null && _e !== void 0 ? _e : new Date(issuedAtDate.getTime() + DEFAULT_VALIDITY_MS);\n if (!Number.isFinite(issuedAtDate.getTime()) || !Number.isFinite(expirationDate.getTime()) || expirationDate <= issuedAtDate) {\n throw new Error('SIWE validity window is invalid');\n }\n if (expirationDate.getTime() - issuedAtDate.getTime() > 10 * 60 * 1000) {\n throw new Error('SIWE validity window exceeds 10 minutes');\n }\n const issuedAt = issuedAtDate.toISOString();\n const expirationTime = expirationDate.toISOString();\n return (`${domain} wants you to sign in with your Ethereum account:\\n${addr}\\n\\n` +\n `${statement}\\n\\n` +\n `URI: ${parsedUri.toString()}\\n` +\n `Version: ${version}\\n` +\n `Chain ID: ${chainId}\\n` +\n `Nonce: ${nonce}\\n` +\n `Issued At: ${issuedAt}\\n` +\n `Expiration Time: ${expirationTime}\\n` +\n `Resources:\\n` +\n `- bounded:app:${appId}`);\n}\n/**\n * Lowercase an EVM address to the canonical identity form. EVM addresses are\n * case-insensitive on-chain but the identity layer (@user.evmAddress) matches\n * case-sensitively, so every boundary normalizes to lowercase. Does not validate\n * shape — use normalizeEvmAddress() when the input is untrusted.\n */\nexport function toLowerEvmAddress(address) {\n return address.trim().toLowerCase();\n}\n/**\n * Normalize an untrusted EVM address to canonical lowercase 0x-hex, or null when\n * it isn't a well-formed 20-byte hex address. Mirrors the realtime-worker's\n * normalizeEvmAddress (auth.ts) EXACTLY so a client-derived @user.evmAddress and\n * the server-authenticated one are byte-identical (fail-closed on malformed).\n */\nexport function normalizeEvmAddress(raw) {\n if (typeof raw !== 'string')\n return null;\n const v = raw.trim().toLowerCase();\n return /^0x[0-9a-f]{40}$/.test(v) ? v : null;\n}\n","/**\n * The one place a caller turns \"I need a credential\" into a usable token.\n *\n * Both transports go through this. The WebSocket path grew a good version of this\n * logic first; the HTTP path had none at all and simply sent whatever was in\n * storage, which is what let an expired token reach the server and come back as a\n * misleading policy denial.\n *\n * THE CONTRACT, which callers depend on:\n *\n * returns null -> there is no session. Send the request anonymously; public\n * reads must keep working for logged-out visitors.\n * returns token -> use exactly this token.\n * throws -> there IS a session and it is unusable. NEVER fall back to an\n * anonymous request, or the caller lands in policy as an\n * anonymous user and gets the same misleading 403 this whole\n * change exists to remove.\n *\n * Four corrections over the WebSocket original, each of which was a real defect:\n *\n * - No sticky module-global failure. The original latched any refresh failure\n * into `ambientAuthFailure` and rethrew it on every later call, so ONE\n * transient network blip disabled refresh until an unrelated auth-state\n * change reset it.\n * - \"Expiring soon\" and \"already expired\" are different. The original collapsed\n * both behind a 60s buffer, so a transient refresh failure threw away a token\n * that was still valid for another 59 seconds.\n * - A missing or non-numeric `exp` is unusable, not fresh. `payload.exp * 1000`\n * is NaN, and `now > NaN` is false, so such a token read as perfectly fresh.\n * - Storage is cleared only on a DEFINITIVE rejection, never on a transient one.\n */\nimport { getConfig } from '../client/config';\nimport { decodeBase64Url } from './core-platform';\nimport { refreshSession } from './auth-api';\nimport { isDefinitiveRejection } from './refresh-error';\nimport { getActiveSessionManager } from './session-manager';\nimport { ServerSessionManager } from './server-session-manager';\n/**\n * Stable machine code for \"there is a session and it cannot be used\".\n *\n * The VALUE is deliberately unchanged from when this lived in subscription-v2 as\n * `WS_AUTH_EXPIRED_CODE`: it is public surface that consumers branch on\n * (`e.code === 'auth_expired'`), so renaming it would break them for no gain. Only\n * the identifier lost its `WS_` prefix, now that HTTP raises it too.\n *\n * The realtime worker's 401 body uses `invalid_or_expired_session` for the same\n * condition on the wire; this is the client-side counterpart.\n */\nexport const AUTH_EXPIRED_CODE = 'auth_expired';\n/** The principal changed under a request that was already in flight. */\nexport const AUTH_CHANGED_CODE = 'auth_changed';\nexport function makeAuthExpiredError(message, status) {\n const err = new Error(`${AUTH_EXPIRED_CODE}: ${message}`);\n err.code = AUTH_EXPIRED_CODE;\n if (status !== undefined)\n err.status = status;\n return err;\n}\nexport function makeAuthChangedError(message) {\n const err = new Error(`${AUTH_CHANGED_CODE}: ${message}`);\n err.code = AUTH_CHANGED_CODE;\n return err;\n}\nexport function isAuthExpiredError(error) {\n const code = error === null || error === void 0 ? void 0 : error.code;\n return !!error && typeof error === 'object'\n && (code === AUTH_EXPIRED_CODE || code === AUTH_CHANGED_CODE);\n}\nexport function normalizeAuthExpiredError(error, fallbackMessage) {\n var _a, _b;\n if (isAuthExpiredError(error))\n return error;\n const status = (_b = (_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status) !== null && _b !== void 0 ? _b : error === null || error === void 0 ? void 0 : error.code;\n return makeAuthExpiredError(fallbackMessage, status);\n}\n/** Refresh this many ms before `exp`, so a token cannot die mid-flight. */\nexport const TOKEN_EXPIRY_SKEW_MS = 60000;\nexport function classifyToken(token, nowMs = Date.now()) {\n let exp;\n try {\n const payload = JSON.parse(decodeBase64Url(token.split('.')[1]));\n exp = payload === null || payload === void 0 ? void 0 : payload.exp;\n }\n catch (_a) {\n return 'unusable';\n }\n // A token with no numeric exp used to compare against NaN and read as fresh.\n if (typeof exp !== 'number' || !Number.isFinite(exp))\n return 'unusable';\n const expiresAtMs = exp * 1000;\n if (nowMs >= expiresAtMs)\n return 'expired';\n if (nowMs >= expiresAtMs - TOKEN_EXPIRY_SKEW_MS)\n return 'expiring-soon';\n return 'fresh';\n}\n/** Short, non-secret fingerprint used only to key the in-flight map. Never logged. */\nexport function tokenFingerprint(token) {\n let h = 5381;\n for (let i = 0; i < token.length; i++)\n h = ((h << 5) + h + token.charCodeAt(i)) >>> 0;\n return h.toString(16);\n}\n/**\n * In-flight refresh TRANSACTIONS, keyed by the session they act on.\n *\n * The issuer-level dedupe in `refreshSession` shares only the network response;\n * each caller then commits independently. With a generation check that means the\n * first commit wins and every other caller sees storage it does not recognise —\n * so a burst of ordinary requests at expiry would all fail as \"the user changed\".\n * Deduping the WHOLE snapshot -> refresh -> commit makes them share one outcome.\n *\n * Keyed by generation as well as app, so a caller that arrives after a re-login\n * starts its own transaction instead of joining a stale one.\n */\nconst refreshTransactions = new Map();\nfunction transactionKey(scope, appId, generation, refreshToken) {\n return `${scope}:${appId}:${generation !== null && generation !== void 0 ? generation : 'none'}:${tokenFingerprint(refreshToken)}`;\n}\nasync function readSessionParts(isServer) {\n var _a, _b, _c, _d, _e, _f;\n if (isServer) {\n const session = await ServerSessionManager.instance.getSession();\n return {\n idToken: (_a = session === null || session === void 0 ? void 0 : session.idToken) !== null && _a !== void 0 ? _a : null,\n refreshToken: (_b = session === null || session === void 0 ? void 0 : session.refreshToken) !== null && _b !== void 0 ? _b : null,\n issuer: undefined,\n generation: null,\n };\n }\n const mgr = getActiveSessionManager();\n const session = await mgr.readSessionWithGeneration();\n return {\n idToken: (_c = session === null || session === void 0 ? void 0 : session.idToken) !== null && _c !== void 0 ? _c : null,\n refreshToken: (_d = session === null || session === void 0 ? void 0 : session.refreshToken) !== null && _d !== void 0 ? _d : null,\n issuer: (_e = session === null || session === void 0 ? void 0 : session.issuer) !== null && _e !== void 0 ? _e : undefined,\n generation: (_f = session === null || session === void 0 ? void 0 : session.sessionGeneration) !== null && _f !== void 0 ? _f : null,\n };\n}\nasync function commit(isServer, expected, refreshed) {\n var _a, _b;\n if (isServer) {\n const mgr = ServerSessionManager.instance;\n const session = await mgr.getSession();\n if (!session)\n return { outcome: 'superseded', token: null };\n const next = Object.assign(Object.assign(Object.assign({}, session), { idToken: refreshed.idToken, accessToken: refreshed.accessToken }), (refreshed.refreshToken ? { refreshToken: refreshed.refreshToken } : {}));\n mgr.setSession(next);\n return { outcome: 'applied', token: next.idToken };\n }\n const result = await getActiveSessionManager().commitRefreshedTokens(expected, refreshed.idToken, refreshed.accessToken, refreshed.refreshToken);\n // NEVER return refreshed.idToken directly. When the commit is refused or lost,\n // that token was not stored, and using it would authenticate the request as\n // whoever the refresh was for rather than whoever the session now belongs to.\n return { outcome: result.outcome, token: (_b = (_a = result.session) === null || _a === void 0 ? void 0 : _a.idToken) !== null && _b !== void 0 ? _b : null };\n}\n/**\n * Get a token that is safe to send right now, refreshing if needed.\n *\n * `null` means anonymous is fine. A throw means there is a session that cannot be\n * used; the caller must surface it rather than downgrade to anonymous.\n */\nexport async function getFreshAuthToken(isServer = false, options = {}) {\n const { idToken, refreshToken, issuer, generation } = await readSessionParts(isServer);\n // No session at all: anonymous is legitimate.\n if (!idToken)\n return null;\n const force = options.force === true;\n const freshness = classifyToken(idToken);\n if (!force && freshness === 'fresh')\n return idToken;\n // Still valid for a little longer, so a failed refresh can fall back to it —\n // but never when forced, since the server has already refused this exact token.\n const stillUsable = !force && freshness === 'expiring-soon';\n if (!refreshToken) {\n if (stillUsable)\n return idToken;\n // Nothing can revive this session. Drop it so isAuthenticated() stops lying\n // and the UI is told, then fail loudly instead of going anonymous.\n await clearDeadSession(isServer, generation);\n throw makeAuthExpiredError('Authentication expired and no refresh token is available');\n }\n const config = await getConfig();\n const key = transactionKey(isServer ? 'server' : 'web', config.appId, generation, refreshToken);\n const existing = refreshTransactions.get(key);\n if (existing)\n return await existing;\n const transaction = (async () => {\n var _a, _b, _c;\n try {\n const refreshed = await refreshSession(refreshToken, issuer);\n if (!(refreshed === null || refreshed === void 0 ? void 0 : refreshed.idToken) || !(refreshed === null || refreshed === void 0 ? void 0 : refreshed.accessToken)) {\n throw makeAuthExpiredError('Authentication refresh returned an incomplete session');\n }\n const { outcome, token } = await commit(isServer, { generation, idToken }, refreshed);\n if (outcome === 'superseded') {\n // A login or logout landed while we were on the network. Refuse rather\n // than authenticate this request as the principal that just left.\n throw makeAuthChangedError('The signed-in account changed while this request was in flight');\n }\n // applied / already-equal / same-generation-winner are all successes: the\n // stored session is valid for this same login either way.\n if (!token) {\n throw makeAuthExpiredError('Authentication refresh produced no usable token');\n }\n return token;\n }\n catch (error) {\n if (isAuthExpiredError(error))\n throw error;\n // Log the STATUS only: the axios error carries config.data, which holds\n // the refresh token, and must never reach a console or log sink.\n const status = (_c = (_b = (_a = error === null || error === void 0 ? void 0 : error.response) === null || _a === void 0 ? void 0 : _a.status) !== null && _b !== void 0 ? _b : error === null || error === void 0 ? void 0 : error.code) !== null && _c !== void 0 ? _c : 'unknown';\n if (isDefinitiveRejection(error)) {\n // The issuer says this refresh token is dead. Drop the session.\n await clearDeadSession(isServer, generation);\n throw makeAuthExpiredError('Authentication expired and refresh was rejected', status);\n }\n // TRANSIENT: network blip, 5xx, timeout. Keep the session — it may well\n // work in a moment. If the access token is still inside its skew window\n // it is valid right now, so use it rather than failing the request.\n if (stillUsable)\n return idToken;\n throw makeAuthExpiredError('Authentication expired and refresh failed', status);\n }\n finally {\n refreshTransactions.delete(key);\n }\n })();\n refreshTransactions.set(key, transaction);\n return await transaction;\n}\nasync function clearDeadSession(isServer, generation) {\n if (isServer) {\n try {\n ServerSessionManager.instance.clearSession();\n }\n catch ( /* best effort */_a) { /* best effort */ }\n return;\n }\n try {\n // Conditional: never remove a session that a concurrent login already replaced.\n await getActiveSessionManager().clearSessionIfGeneration(generation);\n }\n catch ( /* a clear failure must not mask the auth error we are about to throw */_b) { /* a clear failure must not mask the auth error we are about to throw */ }\n}\n/** Test seam: drop any in-flight refresh transactions. */\nexport function resetRefreshTransactions() {\n refreshTransactions.clear();\n}\n","import { getConfig } from '../client/config';\nimport { getActiveSessionManager } from './session-manager';\nimport { ServerSessionManager } from './server-session-manager';\nimport { decodeBase64Url } from './core-platform';\nimport { normalizeEvmAddress } from './evm/evm-utils';\nimport { getFreshAuthToken } from './auth-token-freshness';\nexport async function getMessageStatement() {\n const config = await getConfig();\n return `Authenticating to Bounded App With ID ${config.appId}`;\n}\nasync function createBearerToken(isServer) {\n // Both branches go through the freshness helper now. The web branch used to read\n // localStorage synchronously and send whatever was there, so an expired token was\n // handed to the server on every request and only recovered from AFTER a 401 —\n // and until the worker started returning 401 for a rejected bearer, never.\n //\n // A throw here is deliberate and must propagate: it means a session exists but\n // cannot be used. Swallowing it and sending the request anonymously would put\n // the caller back in policy as an anonymous user, which is the original bug.\n const idToken = await getFreshAuthToken(isServer);\n if (!idToken) {\n return null;\n }\n return `Bearer ${idToken}`;\n}\nexport async function createAuthHeader(isServer) {\n const bearerToken = await createBearerToken(isServer);\n if (!bearerToken) {\n return null;\n }\n return {\n Authorization: bearerToken\n };\n}\nexport async function getUserInfo(isServer) {\n const idToken = await getIdToken(isServer);\n if (!idToken) {\n return null;\n }\n // Decode the JWT to get user info (base64url-safe)\n const payload = JSON.parse(decodeBase64Url(idToken.split('.')[1]));\n return payload;\n}\n;\n/**\n * Derive { id, address, email } from an idToken's claims.\n *\n * Mirrors the realtime-worker auth.ts identity resolution so the client-side\n * `user` object matches what the backend authenticates as:\n * - id = custom:userId only.\n * - address = custom:walletAddress only (a REAL wallet). NEVER falls back to the\n * identity: an opaque id is not a spendable onchain address. null for\n * email-only sessions.\n * - email = the token's `email` claim, lowercased to match the canonical form\n * policy equality compares against. null when absent (wallet/SIWS).\n *\n * Returns all-null when the token can't be decoded (caller treats as no identity).\n */\nexport function deriveUserIdentityFromIdToken(idToken) {\n const empty = { id: null, address: null, email: null, evmAddress: null };\n if (!idToken)\n return empty;\n try {\n const parts = idToken.split('.');\n if (parts.length < 2)\n return empty;\n const payload = JSON.parse(decodeBase64Url(parts[1]));\n const walletClaim = payload['custom:walletAddress'];\n const address = (typeof walletClaim === 'string' && walletClaim.length > 0)\n ? walletClaim\n : null;\n const userIdClaim = payload['custom:userId'];\n let id = (typeof userIdClaim === 'string' && userIdClaim.length > 0)\n ? userIdClaim\n : null;\n const emailClaim = payload['email'];\n const email = (typeof emailClaim === 'string' && emailClaim.length > 0)\n ? emailClaim.toLowerCase()\n : null;\n // EVM wallet — carried on the `custom:evmWalletAddress` claim (an EVM login\n // OMITS custom:walletAddress). Normalized to canonical lowercase 0x-hex the\n // SAME way the realtime-worker does, so the client @user.evmAddress and the\n // server-authenticated one are byte-identical (fail-closed on malformed).\n const evmAddress = normalizeEvmAddress(payload['custom:evmWalletAddress']);\n // A SIWE identity uses its EVM address as custom:userId. Normalize legacy\n // mixed-case tokens at this boundary too so the principal and\n // @user.evmAddress cannot diverge solely by hex casing. Opaque human-login\n // ids remain byte-for-byte unchanged even when they have a linked wallet.\n if (evmAddress && id && normalizeEvmAddress(id) === evmAddress)\n id = evmAddress;\n return { id, address, email, evmAddress };\n }\n catch (_a) {\n return empty;\n }\n}\nexport async function getIdToken(isServer) {\n if (isServer) {\n const sessionMgr = ServerSessionManager.instance;\n const session = await sessionMgr.getSession();\n return session === null || session === void 0 ? void 0 : session.idToken;\n }\n return getActiveSessionManager().getIdToken();\n}\nexport async function getRefreshToken(isServer) {\n if (isServer) {\n const sessionMgr = ServerSessionManager.instance;\n const session = await sessionMgr.getSession();\n return session === null || session === void 0 ? void 0 : session.refreshToken;\n }\n return getActiveSessionManager().getRefreshToken();\n}\n/** The auth issuer base that minted the active client session, so a refresh POSTs\n * to the right /session/refresh. Undefined on the server (keypair, no refresh). */\nexport function getSessionIssuer(isServer) {\n var _a;\n if (isServer)\n return undefined;\n return (_a = getActiveSessionManager().getIssuer()) !== null && _a !== void 0 ? _a : undefined;\n}\n/**\n * Read the active session's generation, minting one for a pre-generation session.\n *\n * The server manager is a single in-memory session per process, so it has no\n * cross-realm lineage problem and reports null.\n */\nexport async function getSessionGeneration(isServer = false) {\n var _a;\n if (isServer)\n return null;\n const session = await getActiveSessionManager().readSessionWithGeneration();\n return (_a = session === null || session === void 0 ? void 0 : session.sessionGeneration) !== null && _a !== void 0 ? _a : null;\n}\n/**\n * Commit refreshed tokens, bound to the generation they were minted for.\n *\n * Replaces the old void-returning `updateIdTokenAndAccessToken`. That version\n * silently dropped a write its cross-principal guard refused, so callers went on\n * to use a token that had NOT been stored — letting a request execute as the\n * previous user while storage and the UI already showed a new one. Callers must\n * branch on the outcome and use `session`, never the token they passed in.\n */\nexport async function commitRefreshedTokens(expected, idToken, accessToken, isServer = false, refreshToken) {\n if (isServer) {\n const sessionMgr = ServerSessionManager.instance;\n // Ensure we have a session to update; if missing, let lazy creation happen on next request.\n let session = null;\n try {\n session = await sessionMgr.getSession();\n }\n catch (_a) {\n return { outcome: \"superseded\", session: null };\n }\n if (!session) {\n return { outcome: \"superseded\", session: null };\n }\n const next = Object.assign(Object.assign(Object.assign({}, session), { idToken,\n accessToken }), (refreshToken ? { refreshToken } : {}));\n sessionMgr.setSession(next);\n return { outcome: \"applied\", session: next };\n }\n return await getActiveSessionManager().commitRefreshedTokens(expected, idToken, accessToken, refreshToken);\n}\n","// ---------------------------------------------------------------------------\n// decline.ts -- the structured \"declined write\" surface.\n//\n// When a data-plane write violates a proven policy rule or invariant, the\n// realtime backend rejects it: HTTP 403 { verdict:'declined', reason:'rule' }\n// or 409 { verdict:'declined', reason:'invariant', invariant } on the request\n// path, or a coded error frame over the room socket. This module turns those\n// rejections into a first-class, share-worthy decline:\n//\n// - `BoundedDeclineError` -- the thrown error. Keeps every legacy field apps\n// already catch (code/status/statusCode/requestId/...), and adds `.decline`\n// (the structured object below) plus a stable `.isBoundedDecline` flag.\n// - `deriveDecline(body, status)` -- normalizes a server rejection body into a\n// `BoundedDecline`, trusting a backend-sent `decline` object when present\n// and synthesizing a minimal one from legacy fields otherwise. Returns\n// `null` when the rejection is not a policy/invariant decline.\n// - `dispatchDeclineEvent(decline, appId?)` -- in a browser, fires the\n// `bounded:decline` CustomEvent the hosted widget listens to. Fire-and-\n// forget: guarded for non-browser/SSR, never throws, never delays the throw.\n// ---------------------------------------------------------------------------\nconst RULE_DEFAULT_MESSAGE = 'This write is not allowed by policy.';\nconst INVARIANT_DEFAULT_MESSAGE = 'This write would violate a proven invariant.';\n/** The window event the hosted widget listens to for rendering a decline card. */\nexport const DECLINE_EVENT_NAME = 'bounded:decline';\n/**\n * Normalize a server rejection body into a structured `BoundedDecline`, or\n * `null` when the rejection is not a policy/invariant decline.\n *\n * Prefers a backend-sent `decline` object verbatim; otherwise synthesizes a\n * minimal `{ verdict, reason, invariant?, message }` from the legacy envelope\n * (`verdict` / `reason` / `code` / `invariant`). Only strong signals count —\n * a bare 403/409 with no policy marker is left alone (returns `null`).\n */\nexport function deriveDecline(body, status) {\n if (!body || typeof body !== 'object')\n return null;\n // Trust a backend-sent structured decline verbatim.\n const provided = body.decline;\n if (provided && typeof provided === 'object' && provided.verdict === 'declined') {\n return provided;\n }\n const rawReason = body.reason;\n const code = body.code;\n const hasInvariant = body.invariant != null;\n let reason = rawReason === 'rule' || rawReason === 'invariant' ? rawReason : undefined;\n if (!reason) {\n if (code === 'invariant_violation' || hasInvariant)\n reason = 'invariant';\n else if (code === 'policy_denied')\n reason = 'rule';\n }\n const isDecline = body.verdict === 'declined' || reason === 'rule' || reason === 'invariant';\n if (!isDecline)\n return null;\n const resolvedReason = reason !== null && reason !== void 0 ? reason : (status === 409 ? 'invariant' : 'rule');\n const rawMessage = body.message;\n const message = typeof rawMessage === 'string' && rawMessage.length > 0\n ? rawMessage\n : resolvedReason === 'invariant'\n ? INVARIANT_DEFAULT_MESSAGE\n : RULE_DEFAULT_MESSAGE;\n const decline = { verdict: 'declined', reason: resolvedReason, message };\n if (hasInvariant)\n decline.invariant = body.invariant;\n if (typeof body.collection === 'string')\n decline.collection = body.collection;\n if (typeof body.op === 'string')\n decline.op = body.op;\n if (body.boundary && typeof body.boundary === 'object')\n decline.boundary = body.boundary;\n if (typeof body.provenAtDeploy === 'boolean')\n decline.provenAtDeploy = body.provenAtDeploy;\n return decline;\n}\n/**\n * In a browser, dispatch a `bounded:decline` CustomEvent for the surfaced\n * decline. Fire-and-forget: guarded for non-browser/SSR (no `window`/\n * `CustomEvent`), never throws, and never delays the rejection it accompanies.\n */\nexport function dispatchDeclineEvent(decline, appId) {\n try {\n if (typeof window === 'undefined')\n return;\n const Ctor = globalThis.CustomEvent;\n if (typeof Ctor !== 'function')\n return;\n const detail = Object.assign({}, decline);\n if (appId)\n detail.appId = appId;\n detail.at = Date.now();\n window.dispatchEvent(new Ctor(DECLINE_EVENT_NAME, { detail }));\n }\n catch (_a) {\n // Fire-and-forget: a widget/telemetry hiccup must never mask the decline.\n }\n}\n/**\n * A rejected write that violated a proven policy rule or invariant. Thrown by\n * the data-plane write paths (set/setMany/update/delete) in place of a bare\n * Error, and attached (as `.decline`) to live-intent rejections.\n *\n * Back-compatible: the full server envelope (code/status/statusCode/requestId/\n * ...) is copied onto the instance, so existing `catch` handlers keep working;\n * new code reads `.decline`. Detect it with `err.name === 'BoundedDeclineError'`\n * or the bundle-copy-safe `err.isBoundedDecline === true`.\n */\nexport class BoundedDeclineError extends Error {\n constructor(decline, envelope) {\n super(`Declined: ${decline.message}`);\n // Copy the legacy envelope FIRST, then re-assert our own fields so a\n // stray envelope key can never clobber name/message/decline/flag.\n if (envelope && typeof envelope === 'object')\n Object.assign(this, envelope);\n this.name = 'BoundedDeclineError';\n this.message = `Declined: ${decline.message}`;\n this.decline = decline;\n this.isBoundedDecline = true;\n }\n}\n","import axios from \"axios\";\nimport axiosRetry from \"axios-retry\";\nimport { getConfig } from \"../client/config\";\nimport { createAuthHeader, getSessionGeneration, } from \"../utils/utils\";\nimport { getFreshAuthToken } from \"../utils/auth-token-freshness\";\nimport { deriveDecline, dispatchDeclineEvent, BoundedDeclineError } from \"../client/decline\";\nconst apiClient = axios.create();\nconst TRANSIENT_GET_STATUSES = new Set([500, 502, 503, 504]);\nconst RATE_LIMIT_RETRY_BASE_DELAY_MS = 100;\n/** The window event emitted when the API responds with HTTP 429. */\nexport const RATE_LIMIT_EVENT_NAME = 'bounded:ratelimit';\n/** Dispatch a rate-limit event without affecting request error handling. */\nexport function dispatchRateLimitEvent(detail) {\n try {\n if (typeof window === 'undefined')\n return;\n const Ctor = globalThis.CustomEvent;\n if (typeof Ctor !== 'function')\n return;\n window.dispatchEvent(new Ctor(RATE_LIMIT_EVENT_NAME, {\n detail: Object.assign(Object.assign({}, detail), { at: Date.now() }),\n }));\n }\n catch (_a) {\n // Fire-and-forget: event consumers must never delay or mask the request.\n }\n}\nfunction getRateLimitEventDetail(error, attempt, willRetry) {\n var _a, _b;\n const endpoint = typeof ((_a = error.config) === null || _a === void 0 ? void 0 : _a.url) === 'string' ? error.config.url : '';\n let path = endpoint;\n try {\n const parsed = new URL(endpoint);\n path = `${parsed.pathname}${parsed.search}`;\n }\n catch (_c) {\n // Keep a relative or otherwise non-standard endpoint as-is.\n }\n const responseBody = (_b = error.response) === null || _b === void 0 ? void 0 : _b.data;\n const body = responseBody && typeof responseBody === 'object' && !Array.isArray(responseBody)\n ? responseBody\n : responseBody == null\n ? {}\n : { message: String(responseBody) };\n return Object.assign(Object.assign({}, body), { endpoint,\n path, status: 429, attempt,\n willRetry });\n}\nfunction getRateLimitAttempt(error) {\n var _a, _b;\n const retryCount = (_b = (_a = error.config) === null || _a === void 0 ? void 0 : _a['axios-retry']) === null || _b === void 0 ? void 0 : _b.retryCount;\n return typeof retryCount === 'number' ? retryCount + 1 : 1;\n}\naxiosRetry(apiClient, {\n retries: 2,\n retryCondition: (error) => {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n // A caller cancellation is final. In particular, never turn a route\n // unmount into a fresh GET after its AbortSignal has fired.\n const canceled = axios.isCancel(error)\n || error.code === 'ERR_CANCELED'\n || ((_b = (_a = error.config) === null || _a === void 0 ? void 0 : _a.signal) === null || _b === void 0 ? void 0 : _b.aborted);\n if (canceled) {\n if (((_c = error.response) === null || _c === void 0 ? void 0 : _c.status) === 429) {\n dispatchRateLimitEvent(getRateLimitEventDetail(error, getRateLimitAttempt(error), false));\n }\n return false;\n }\n // A 429 means the server did not execute the request, so retrying is\n // safe for every method, including POST requests to the queries API.\n if (((_d = error.response) === null || _d === void 0 ? void 0 : _d.status) === 429)\n return true;\n // Only retry idempotent GETs. Network failures and the small set of\n // conventional transient gateway/runtime statuses get two bounded\n // retries; auth, policy, invariant, and other terminal responses stay final.\n // Writes are never retried because the server may already have applied\n // them before the response was lost.\n if (((_f = (_e = error.config) === null || _e === void 0 ? void 0 : _e.method) === null || _f === void 0 ? void 0 : _f.toLowerCase()) !== 'get')\n return false;\n return axiosRetry.isNetworkError(error)\n || TRANSIENT_GET_STATUSES.has((_h = (_g = error.response) === null || _g === void 0 ? void 0 : _g.status) !== null && _h !== void 0 ? _h : 0);\n },\n retryDelay: (retryCount, error) => {\n var _a;\n if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 429) {\n const exponentialCap = RATE_LIMIT_RETRY_BASE_DELAY_MS * (2 ** retryCount);\n return Math.floor(Math.random() * exponentialCap);\n }\n return axiosRetry.exponentialDelay(retryCount, error);\n },\n shouldResetTimeout: true,\n onRetry: (retryCount, error, requestConfig) => {\n var _a, _b, _c;\n if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 429) {\n dispatchRateLimitEvent(getRateLimitEventDetail(error, retryCount, !((_b = requestConfig.signal) === null || _b === void 0 ? void 0 : _b.aborted)));\n }\n console.warn(`[bounded-sdk] retry ${retryCount} for ${(_c = requestConfig.method) === null || _c === void 0 ? void 0 : _c.toUpperCase()} ${requestConfig.url} - ${error.code || error.message}`);\n },\n onMaxRetryTimesExceeded: (error, retryCount) => {\n var _a;\n if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 429) {\n dispatchRateLimitEvent(getRateLimitEventDetail(error, retryCount + 1, false));\n }\n },\n});\n/**\n * Recover from a 401, bound to the session that authenticated the ORIGINAL attempt.\n *\n * The dedupe, rotation and conditional-clear all live in `getFreshAuthToken` now;\n * this only adds the principal binding a reactive retry needs.\n *\n * Why the binding matters: `createAuthHeader` is acquired inside `executeRequest`,\n * so a retry re-reads whatever session is current at retry time. If B logs in while\n * A's request is in flight, A's 401 handler used to refresh B's session and replay\n * A's exact request as B — writing data under the wrong principal. Making a rejected\n * bearer return 401 turned that from a near-impossible race into the normal recovery\n * path, so it has to be closed here.\n *\n * Returns true only when the retry may proceed under the SAME login.\n */\nasync function refreshAuthSessionOnce(capturedGeneration, isServer) {\n try {\n // force: the server just rejected the stored token, so a locally-fresh-looking\n // one is not evidence of anything. Without this, a 401 caused by anything the\n // client cannot see (revoked family, app mismatch, key rotation) would be\n // \"recovered\" by replaying the exact same credential.\n const token = await getFreshAuthToken(isServer, { force: true });\n if (!token)\n return false;\n // Equal generation covers both \"unchanged\" and \"refreshed descendant\": a\n // refresh preserves the generation, a re-login mints a new one. Comparing\n // tokens instead would reject a perfectly good retry whenever a concurrent\n // request refreshed first, which at expiry is the common case.\n const currentGeneration = await getSessionGeneration(isServer);\n if (currentGeneration !== capturedGeneration)\n return false;\n return true;\n }\n catch (_a) {\n // Includes auth_changed and a definitively rejected refresh. Either way the\n // retry must not proceed; the caller surfaces the original 401.\n return false;\n }\n}\nexport async function makeApiRequest(method, urlPath, data, _overrides) {\n var _a, _b, _c, _d, _e, _f, _g;\n // A scoped createClient() instance passes its own resolved config; otherwise\n // fall back to the module-global init() config.\n const config = (_a = _overrides === null || _overrides === void 0 ? void 0 : _overrides._config) !== null && _a !== void 0 ? _a : await getConfig();\n const readOnly = (_overrides === null || _overrides === void 0 ? void 0 : _overrides._readOnly) === true;\n // CREDENTIAL PROVENANCE.\n //\n // Only a MANAGED credential — one this SDK minted from the global session — may\n // trigger global-session recovery. A caller that supplies its own Authorization\n // (via `_overrides.headers` or a wallet client's `_getAuthHeaders`) owns that\n // token; refreshing or clearing the global session because THAT token got a 401\n // would sign out an unrelated user. Rare before, because a rejected bearer used\n // to come back as 403; routine now that it is a 401.\n const usesOverrideAuthHeader = !!(_overrides === null || _overrides === void 0 ? void 0 : _overrides.headers)\n && Object.keys(_overrides.headers).some((name) => name.toLowerCase() === \"authorization\");\n const isManagedCredential = !readOnly\n && !(_overrides === null || _overrides === void 0 ? void 0 : _overrides._getAuthHeaders)\n && !usesOverrideAuthHeader;\n // The session that authenticated the FIRST attempt. 401 recovery is bound to it\n // so a retry can never execute under a principal that replaced it mid-flight.\n const capturedGeneration = isManagedCredential\n ? await getSessionGeneration(config.isServer)\n : null;\n async function executeRequest() {\n var _a;\n // When _getAuthHeaders is provided (wallet client), use it as the sole auth source.\n // A read-only scoped instance omits auth entirely. Otherwise use the\n // global createAuthHeader (default path).\n const authHeader = (_overrides === null || _overrides === void 0 ? void 0 : _overrides._getAuthHeaders)\n ? await _overrides._getAuthHeaders()\n : readOnly\n ? {}\n : await createAuthHeader(config.isServer);\n const headers = Object.assign({ \"Content-Type\": \"application/json\", \"X-App-Id\": config.appId }, authHeader);\n // Apply custom headers from _overrides. #022/#023: HTTP header names are\n // case-insensitive, so normalize any override `authorization` (in any casing) onto the\n // single canonical `Authorization` key - never send two differently-cased Authorization\n // headers, and keep the credential the request sends identical to the one the read\n // cache key is derived from.\n if (_overrides === null || _overrides === void 0 ? void 0 : _overrides.headers) {\n for (const [name, value] of Object.entries(_overrides.headers)) {\n if (name.toLowerCase() === \"authorization\") {\n delete headers[\"authorization\"];\n headers[\"Authorization\"] = value;\n }\n else {\n headers[name] = value;\n }\n }\n }\n // Writes (PUT/POST/DELETE) can take significantly longer than reads —\n // server-side they may trigger ad-hoc LUT creation (create + extend +\n // wait-for-finalization, ~15-30s on mainnet). Use a larger default for\n // non-GET so the SDK doesn't time out before client-api responds.\n const isRead = method.toUpperCase() === \"GET\";\n const defaultTimeout = isRead ? 30000 : 90000;\n const requestConfig = {\n method,\n url: `${config.apiUrl}${urlPath.startsWith(\"/\") ? urlPath : `/${urlPath}`}`,\n headers,\n timeout: (_a = _overrides === null || _overrides === void 0 ? void 0 : _overrides.timeout) !== null && _a !== void 0 ? _a : defaultTimeout,\n signal: _overrides === null || _overrides === void 0 ? void 0 : _overrides.signal,\n };\n if (method !== \"GET\" && method !== \"get\") {\n requestConfig.data = data ? JSON.stringify(data) : {};\n }\n const response = await apiClient(requestConfig);\n return { data: response.data, status: response.status, headers: response.headers };\n }\n try {\n return await executeRequest();\n }\n catch (initialError) {\n // The error that ultimately gets normalized below. A retry REPLACES it, so a\n // genuine post-refresh policy denial surfaces as itself.\n //\n // Both retry paths used to `return await executeRequest()` from inside this\n // catch, which meant a retry that failed skipped the whole normalization\n // block further down. The default path additionally swallowed the retry error\n // and rethrew the ORIGINAL 401 — so `401 -> refresh succeeds -> retry is\n // genuinely denied 403` reached the caller as a 401, contradicting the point\n // of returning 401 for expired credentials in the first place.\n let error = initialError;\n if (((_b = error.response) === null || _b === void 0 ? void 0 : _b.status) === 401) {\n // Read-only scoped instance: it holds no session, so there is nothing\n // to refresh. Surface the 401 without touching the global session.\n if (readOnly) {\n throw error;\n }\n if (_overrides === null || _overrides === void 0 ? void 0 : _overrides._clearAuth) {\n // Wallet client path: client-specific retry, never the global session.\n await _overrides._clearAuth();\n try {\n return await executeRequest();\n }\n catch (retryError) {\n // Normalize the RETRY's own failure. Still no global auth touched.\n error = retryError;\n }\n }\n else if (isManagedCredential) {\n // Default path: recover the global session, bound to the principal\n // that authenticated the first attempt.\n const recovered = await refreshAuthSessionOnce(capturedGeneration, config.isServer);\n if (recovered) {\n try {\n return await executeRequest();\n }\n catch (retryError) {\n error = retryError;\n }\n }\n // Not recovered: keep the original 401 for normalization below.\n }\n // Unmanaged credential (caller-supplied Authorization): its 401 is the\n // caller's to handle. Never refresh or clear the global session for it.\n }\n if (((_c = error.response) === null || _c === void 0 ? void 0 : _c.status) == 404) {\n return { data: null, status: 404 };\n }\n if ((_d = error.response) === null || _d === void 0 ? void 0 : _d.data) {\n const responseData = typeof error.response.data === 'object'\n ? error.response.data\n : { message: String(error.response.data) };\n const httpStatus = (_e = error.response) === null || _e === void 0 ? void 0 : _e.status;\n // A policy/invariant denial (403 rule / 409 invariant) is surfaced as\n // a first-class BoundedDeclineError carrying `.decline`; every other\n // failure stays a bare enriched Error (unchanged behavior).\n const decline = deriveDecline(responseData, httpStatus);\n const apiError = decline\n ? new BoundedDeclineError(decline)\n : new Error(responseData.message || error.message || 'Request failed');\n Object.assign(apiError, responseData);\n apiError.statusCode = httpStatus;\n // Surface the structured error envelope { code, status, requestId } so\n // callers can branch on the stable category (e.g.\n // `if (e.code === 'invariant_violation')`) without parsing the message.\n // `code` is a stable category ('policy_denied' | 'invariant_violation');\n // `status` is the HTTP status; `requestId` correlates with the decision log.\n apiError.code = (_f = responseData.code) !== null && _f !== void 0 ? _f : apiError.code;\n apiError.status = httpStatus !== null && httpStatus !== void 0 ? httpStatus : responseData.status;\n apiError.requestId = (_g = responseData.requestId) !== null && _g !== void 0 ? _g : apiError.requestId;\n if (decline) {\n // Re-assert decline-owned fields after the envelope copy, then\n // notify the browser widget. Fire-and-forget: never delays or\n // masks the throw.\n apiError.decline = decline;\n apiError.name = 'BoundedDeclineError';\n apiError.isBoundedDecline = true;\n apiError.message = `Declined: ${decline.message}`;\n dispatchDeclineEvent(decline, config.appId);\n }\n throw apiError;\n }\n throw error;\n }\n}\n","/**\n * WebSocket v2 Subscription Manager\n *\n * This module implements multiplexed subscriptions over a single WebSocket connection.\n * It maintains the same external API as v1 but uses the new v2 protocol internally.\n */\nimport { getConfig } from './config';\nimport { getIdToken } from '../utils/utils';\nimport { getActiveSessionManager } from '../utils/session-manager';\nimport { AUTH_CHANGED_CODE, AUTH_EXPIRED_CODE, getFreshAuthToken, makeAuthExpiredError, normalizeAuthExpiredError, } from '../utils/auth-token-freshness';\nimport { decodeBase64Url, safeBtoa } from '../utils/core-platform';\nimport { docId } from './operations';\nimport { deriveDecline, dispatchDeclineEvent } from './decline';\nimport ReconnectingWebSocket from 'reconnecting-websocket';\n// ============ Global State ============\n// One connection per routing target (appId, or appId#room#<collection>/<roomId>)\nconst connections = new Map();\n// Coalesce concurrent first-use/auth-preflight calls for the same routing target.\n// React commonly mounts several subscriptions in one render; without this map,\n// every call can pass the empty `connections` check, await auth, and create an\n// orphan ReconnectingWebSocket before the first call publishes its connection.\n// Keyed by the identity-bucket lease key (see connectionLeaseKey) so two distinct\n// wallet tokens never share one in-flight socket even under a compact-hash collision.\nconst connectionFlights = new Map();\n// A subscriber holds a routing-target lease from connection acquisition until\n// its callback/subscription is registered. The last old-route unsubscribe must\n// not close a connection already captured by a new route awaiting auth. Keyed by\n// the same identity-bucket lease key as connectionFlights.\nconst connectionAcquisitions = new Map();\n// Compact identity hashes remain useful bounded-size indexes, but collisions\n// share a bucket instead of sharing authority. Each exact bearer keeps its own\n// cache entry so collision isolation does not evict another principal's cache.\nconst responseCache = new Map();\nconst CACHE_TTL = 5 * 60 * 1000; // 5 minutes\nconst TOKEN_REFRESH_BUFFER = 10 * 60 * 1000; // Refresh token 10 minutes before expiry\nconst TOKEN_CHECK_INTERVAL = 5 * 60 * 1000; // Check token freshness every 5 minutes\nfunction getResponseCacheEntry(cacheKey, identityToken) {\n var _a;\n return (_a = responseCache.get(cacheKey)) === null || _a === void 0 ? void 0 : _a.find(entry => entry.identityToken === identityToken);\n}\nfunction setResponseCacheEntry(cacheKey, identityToken, data) {\n var _a;\n const now = Date.now();\n const bucket = (_a = responseCache.get(cacheKey)) !== null && _a !== void 0 ? _a : [];\n const reusableEntries = bucket.filter(entry => (entry.identityToken !== identityToken && now - entry.timestamp < CACHE_TTL));\n reusableEntries.push({ data, timestamp: now, identityToken });\n responseCache.set(cacheKey, reusableEntries);\n}\n// ============ WebSocket Config ============\nconst BASE_MIN_RECONNECT_DELAY_MS = 1000;\nconst MIN_RECONNECT_DELAY_JITTER_MS = 1000;\nconst MAX_RECONNECT_DELAY_MS = 300000;\nconst RECONNECT_DELAY_GROW_FACTOR = 1.8;\nconst MIN_BROWSER_RECONNECT_INTERVAL_MS = 5000;\nconst WS_AUTH_EXPIRED_CODE = 'auth_expired';\n// React runs old-route effect cleanup before new-route effects. Keep an\n// otherwise-idle socket for one short handoff window so the new route can\n// cancel teardown and reuse it; genuinely idle sockets still close promptly.\nconst IDLE_CONNECTION_CLOSE_GRACE_MS = 5000;\nconst SUBSCRIPTION_CONFIRM_TIMEOUT_MS = 10000;\nconst WS_CONFIG = {\n // Keep retrying indefinitely so long outages recover without page refresh.\n maxRetries: Infinity,\n // Conservative starting delay with jitter spreads reconnects across clients.\n minReconnectionDelay: BASE_MIN_RECONNECT_DELAY_MS + Math.floor(Math.random() * MIN_RECONNECT_DELAY_JITTER_MS),\n // Stretch backoff to 5 minutes during prolonged outages to protect backend pools.\n maxReconnectionDelay: MAX_RECONNECT_DELAY_MS,\n // Moderate growth to avoid rapid retry bursts while still converging to max delay.\n reconnectionDelayGrowFactor: RECONNECT_DELAY_GROW_FACTOR,\n // Give handshakes more time before considering the attempt failed.\n connectionTimeout: 10000,\n};\nconst WS_V2_PATH = '/ws/v2';\nlet browserReconnectHooksAttached = false;\nlet lastBrowserTriggeredReconnectAt = 0;\nlet reconnectInProgress = null;\nlet ambientAuthFailure = null;\n// ============ Helper Functions ============\nfunction generateSubscriptionId() {\n return `sub_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;\n}\nfunction hashForKey(value) {\n let h = 5381;\n for (let i = 0; i < value.length; i++) {\n h = ((h << 5) + h + value.charCodeAt(i)) & 0x7fffffff;\n }\n return h.toString(36);\n}\n/**\n * SECURITY (H1): Response-cache keys must be scoped to the caller's identity, not\n * just the path/filter/shape. The compact `identity` prefix selects a bucket;\n * exact opaque bearer equality is required inside it before reuse. Together they\n * keep a private snapshot from being delivered to a different user with the same\n * options (shared process / SSR worker / browser login-switch; this cache has a\n * 5-minute TTL). Callers must opt in before entries are read or written; no-auth\n * subscriptions never populate an implicit anonymous cache bucket.\n */\nfunction getCacheKey(path, prompt, shape, limit, cursor, filter, identity) {\n const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n const shapeKey = shape && Object.keys(shape).length > 0 ? JSON.stringify(shape) : '';\n const limitKey = limit !== undefined ? `:l${limit}` : '';\n const cursorKey = cursor ? `:c${hashForKey(cursor)}` : '';\n const filterKey = filter && Object.keys(filter).length > 0 ? `:f${hashForKey(JSON.stringify(filter))}` : '';\n return `${identity}|${normalizedPath}:${prompt || 'default'}:${shapeKey}${limitKey}${cursorKey}${filterKey}`;\n}\n/**\n * Derive an opaque identity string for the bearer material a subscription sends.\n * JWT payloads are deliberately not trusted here: cache isolation must happen\n * before the server has verified any claims.\n */\nfunction principalFromIdToken(idToken) {\n return idToken ? `t${hashForKey(idToken)}` : null;\n}\nfunction livePrincipalFromIdToken(idToken) {\n if (!idToken)\n return null;\n try {\n const payload = JSON.parse(decodeBase64Url(idToken.split('.')[1]));\n const userId = payload['custom:userId'];\n if (typeof userId === 'string' && userId.length > 0)\n return userId;\n const walletAddress = payload['custom:walletAddress'];\n if (typeof walletAddress === 'string' && walletAddress.length > 0)\n return walletAddress;\n const subject = payload.sub;\n return typeof subject === 'string' && subject.length > 0 ? subject : null;\n }\n catch (_a) {\n return null;\n }\n}\nfunction authSnapshotFromToken(idToken) {\n return {\n tokenValue: idToken !== null && idToken !== void 0 ? idToken : null,\n principal: livePrincipalFromIdToken(idToken),\n };\n}\nfunction connectionMatchesAuthToken(connection, idToken) {\n const current = authSnapshotFromToken(idToken);\n if (!current.tokenValue) {\n return connection.authTokenValue === null && connection.authPrincipal === null;\n }\n if (connection.authTokenValue && connection.authTokenValue === current.tokenValue) {\n return true;\n }\n return !!connection.authPrincipal && !!current.principal && connection.authPrincipal === current.principal;\n}\nasync function canSendAuthenticatedLiveIntent(connection, isServer) {\n const currentToken = await getIdToken(isServer);\n if (!currentToken)\n return false;\n if (!connection.authTokenValue && !connection.authPrincipal)\n return false;\n return connectionMatchesAuthToken(connection, currentToken);\n}\nasync function getSubscriptionIdentity(effectiveAppId, isServer, overrides, anonymous) {\n // A read-only scoped instance is unauthenticated by construction. Key it as\n // anonymous and never read the ambient global session (a different app's).\n if (anonymous) {\n return { key: `${effectiveAppId}:anon`, cacheable: false, token: null };\n }\n // Per-subscription wallet override (server WalletClient.subscribe): key by\n // the wallet's own opaque token material, mirroring getReadPrincipalKey. Do\n // not trust decoded claims or the unverified _walletAddress hint.\n if (overrides === null || overrides === void 0 ? void 0 : overrides._getAuthHeaders) {\n try {\n const bearer = bearerFromAuthHeaders(await overrides._getAuthHeaders());\n const principal = principalFromIdToken(bearer);\n return principal\n ? { key: `${effectiveAppId}:o${principal}`, cacheable: true, token: bearer }\n : { key: `${effectiveAppId}:oanon`, cacheable: false, token: null };\n }\n catch (_a) {\n // Couldn't resolve the override identity — do not use response cache.\n return { key: `${effectiveAppId}:o-uncacheable-${safeBtoa(String(connectionEpoch++))}`, cacheable: false, token: null };\n }\n }\n const idToken = await getIdToken(isServer);\n const principal = principalFromIdToken(idToken);\n return principal\n ? { key: `${effectiveAppId}:${principal}`, cacheable: true, token: idToken !== null && idToken !== void 0 ? idToken : null }\n : { key: `${effectiveAppId}:anon`, cacheable: false, token: null };\n}\n/** Extract the bare bearer token from a `{ Authorization: 'Bearer <jwt>' }` map. */\nfunction bearerFromAuthHeaders(headers) {\n const auth = (headers === null || headers === void 0 ? void 0 : headers.Authorization) || (headers === null || headers === void 0 ? void 0 : headers.authorization) || '';\n return auth.startsWith('Bearer ') ? auth.slice('Bearer '.length) : auth;\n}\n// Monotonic counter for unique-ish fallback identity keys (no Date.now in some envs).\nlet connectionEpoch = 0;\n// isTokenExpired / makeAuthExpiredError / isAuthExpiredError /\n// normalizeAuthExpiredError now live in utils/auth-token-freshness so the HTTP and\n// WebSocket paths cannot drift apart. `classifyToken` replaces the old boolean,\n// which collapsed \"expiring soon\" and \"already expired\" into one answer and read a\n// token with no numeric `exp` as fresh.\nfunction getTokenExpirationTime(token) {\n try {\n const payload = JSON.parse(decodeBase64Url(token.split('.')[1]));\n return payload.exp ? payload.exp * 1000 : null;\n }\n catch (_a) {\n return null;\n }\n}\n/**\n * Latch a failure so a dead session does not re-hammer /session/refresh every tick.\n *\n * NOT latched when the failure came with the session being cleared or replaced.\n * The clear notifies auth-state listeners, which kicks a reconnect that resets this\n * — and if we re-latched afterwards, `getConnectionAuthToken` would keep throwing\n * even though storage is now empty, so an ordinary expiry left WebSocket\n * acquisition permanently broken instead of falling back to an anonymous socket.\n */\nfunction rememberAmbientAuthFailure(error) {\n if ((error === null || error === void 0 ? void 0 : error.code) === AUTH_CHANGED_CODE)\n return error;\n // The session is gone: the right next move is an anonymous connection, not a\n // remembered failure.\n if (!getIdTokenSync())\n return error;\n ambientAuthFailure = error;\n return error;\n}\n/** Best-effort synchronous peek, only for deciding whether a session still exists. */\nfunction getIdTokenSync() {\n try {\n return getActiveSessionManager().getIdToken();\n }\n catch (_a) {\n return null;\n }\n}\nfunction failConnectionAuth(connection, error) {\n connection.authFailure = error;\n connection.pendingAuthToken = null;\n connection.pendingAuthSnapshot = null;\n connection.authTokenValue = null;\n connection.authPrincipal = null;\n connection.isConnecting = false;\n connection.isConnected = false;\n connection.isAuthenticating = false;\n for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, error);\n }\n for (const subscription of connection.subscriptions.values()) {\n notifyErrorCallbacks(subscription, error);\n rejectSubscriptionRefresh(subscription, error);\n }\n}\nfunction scheduleTokenRefresh(connection, isServer) {\n // Clear any existing timer\n if (connection.tokenRefreshTimer) {\n clearInterval(connection.tokenRefreshTimer);\n connection.tokenRefreshTimer = null;\n }\n // Periodic check: every TOKEN_CHECK_INTERVAL, check if the token needs refreshing.\n // This replaces the old single setTimeout approach which was unreliable for long\n // delays (browsers throttle/suspend timers in background tabs).\n connection.tokenRefreshTimer = setInterval(async () => {\n var _a, _b, _c, _d, _e;\n try {\n const currentToken = await getIdToken(isServer);\n if (!currentToken)\n return; // Unauthenticated, nothing to refresh\n const expirationTime = getTokenExpirationTime(currentToken);\n if (!expirationTime)\n return;\n const timeUntilExpiry = expirationTime - Date.now();\n if (timeUntilExpiry <= TOKEN_REFRESH_BUFFER) {\n console.info('[WS v2] Token expiring soon, proactively refreshing');\n // Refresh the token and store it. Do NOT reconnect — the server only\n // verifies JWT at $connect time, so the existing connection continues\n // working. The fresh token is picked up by urlProvider the next time\n // a reconnect naturally happens (network drop, keepalive timeout, etc.).\n //\n // Routed through the shared transaction. This used to read a refresh\n // token, call refreshSession, and write the result with nothing binding\n // it to the session it started from — so a timer that fired for S1 and\n // completed after a same-wallet re-login could overwrite S2's rotated\n // token, and the next refresh would trip the issuer's reuse detection\n // and revoke the whole family.\n try {\n await getFreshAuthToken(isServer);\n console.info('[WS v2] Token refreshed successfully, stored for next connection');\n }\n catch (refreshError) {\n const definitive = (refreshError === null || refreshError === void 0 ? void 0 : refreshError.code) === AUTH_EXPIRED_CODE\n || (refreshError === null || refreshError === void 0 ? void 0 : refreshError.code) === AUTH_CHANGED_CODE;\n if (definitive) {\n // The session is dead or belongs to someone else now. The shared\n // helper has already cleared storage and notified auth-state\n // listeners, so the UI stops showing a connection that is gone —\n // this branch used to just stop the timer and leave the UI\n // claiming to be connected.\n console.warn('[WS v2] Session no longer usable, stopping periodic refresh');\n if (connection.tokenRefreshTimer) {\n clearInterval(connection.tokenRefreshTimer);\n connection.tokenRefreshTimer = null;\n }\n return;\n }\n // Transient: keep the session and try again next interval.\n // Status only — the raw axios error carries config.data (the refresh\n // token) and must never hit the console / log sinks.\n console.warn('[WS v2] Proactive token refresh failed, will retry next interval. status:', (_b = (_a = refreshError === null || refreshError === void 0 ? void 0 : refreshError.status) !== null && _a !== void 0 ? _a : refreshError === null || refreshError === void 0 ? void 0 : refreshError.code) !== null && _b !== void 0 ? _b : 'unknown');\n }\n }\n }\n catch (error) {\n console.error('[WS v2] Error in periodic token check. status:', (_e = (_d = (_c = error === null || error === void 0 ? void 0 : error.response) === null || _c === void 0 ? void 0 : _c.status) !== null && _d !== void 0 ? _d : error === null || error === void 0 ? void 0 : error.code) !== null && _e !== void 0 ? _e : 'unknown');\n }\n }, TOKEN_CHECK_INTERVAL);\n}\n/**\n * WS-local wrapper around the shared freshness helper.\n *\n * The shared helper owns expiry classification, the deduplicated\n * snapshot -> refresh -> commit transaction, and conditional clearing. This adds\n * only the WS-specific storm guard: without it, a dead session would retry the\n * refresh on every reconnect attempt and every 5-minute tick.\n */\nasync function getWsAuthToken(isServer) {\n var _a, _b;\n // A remembered failure short-circuits, but only while a session still exists.\n // See rememberAmbientAuthFailure: once storage is cleared the correct next move\n // is an anonymous connection, not a replayed error.\n if (ambientAuthFailure && getIdTokenSync()) {\n throw ambientAuthFailure;\n }\n try {\n const token = await getFreshAuthToken(isServer);\n ambientAuthFailure = null;\n return token;\n }\n catch (error) {\n // Status only — the raw axios error carries config.data (the refresh token)\n // and must never reach a console or log sink.\n console.error('[WS v2] Error acquiring auth token. status:', (_b = (_a = error === null || error === void 0 ? void 0 : error.status) !== null && _a !== void 0 ? _a : error === null || error === void 0 ? void 0 : error.code) !== null && _b !== void 0 ? _b : 'unknown');\n throw rememberAmbientAuthFailure(normalizeAuthExpiredError(error, 'Authentication expired and refresh failed'));\n }\n}\n/**\n * The server refused the token sent on the auth frame: its error frame arrives\n * while the auth ack is still pending, just before the 1008 close. Local expiry\n * had vouched for that exact token (unexpired but invalid - e.g. a rotated\n * issuer key), so re-sending it would only be refused again. Force a genuinely\n * new one: a definitive issuer rejection clears the session inside the shared\n * helper (firing notifySessionCleared, which signs the UI out), a successful\n * refresh commits a new token - and the ordinary reconnect loop picks up either\n * outcome on its own. Fresh token: authenticates. No token: connects\n * anonymously and public reads replay instead of erroring forever.\n */\nasync function recoverFromServerAuthRejection(connection) {\n const rejected = connection.pendingAuthToken;\n if (!rejected)\n return;\n // One forced refresh per distinct rejected token value: a transiently\n // unreachable issuer must not turn the reconnect loop into a refresh storm.\n if (connection.serverRejectedAuthToken === rejected)\n return;\n connection.serverRejectedAuthToken = rejected;\n try {\n await getFreshAuthToken(connection.isServer, { force: true });\n }\n catch (_a) {\n // Every failure mode is already handled inside the helper: a dead\n // session was cleared (auth listeners notified), a transient refresh\n // failure keeps the session and the latch above stops the storm.\n }\n}\nasync function getConnectionAuthToken(isServer, authTokenProvider, anonymous) {\n // A read-only scoped instance connects anonymously: no auth frame, and it\n // must never read (or refresh) the ambient global session - that session\n // belongs to a different app and would be rejected by this app's worker.\n if (anonymous) {\n return null;\n }\n if (!authTokenProvider) {\n // getWsAuthToken, not the shared helper directly: the wrapper carries the\n // reconnect-storm guard that keeps a dead session from re-refreshing on\n // every reconnect attempt.\n return getWsAuthToken(isServer);\n }\n try {\n const token = await authTokenProvider();\n if (token)\n return token;\n throw makeAuthExpiredError('Authenticated websocket token provider returned no token');\n }\n catch (error) {\n throw normalizeAuthExpiredError(error, 'Authenticated websocket token provider failed');\n }\n}\nfunction hasDisconnectedActiveConnections() {\n for (const connection of connections.values()) {\n if (!connection.ws) {\n continue;\n }\n // Only nudge reconnection when socket is fully closed.\n // If ReconnectingWebSocket is already in CONNECTING/backoff state, don't interfere.\n if (connection.ws.readyState === WS_READY_STATE_CLOSED) {\n return true;\n }\n }\n return false;\n}\nfunction maybeReconnectFromBrowserSignal() {\n const now = Date.now();\n if (now - lastBrowserTriggeredReconnectAt < MIN_BROWSER_RECONNECT_INTERVAL_MS) {\n return;\n }\n if (!hasDisconnectedActiveConnections()) {\n return;\n }\n lastBrowserTriggeredReconnectAt = now;\n reconnectWithNewAuthV2().catch((error) => {\n console.error('[WS v2] Browser-triggered reconnect failed:', error);\n });\n}\nfunction attachBrowserReconnectHooksOnce() {\n if (browserReconnectHooksAttached) {\n return;\n }\n if (typeof window === 'undefined') {\n return;\n }\n browserReconnectHooksAttached = true;\n window.addEventListener('online', () => {\n maybeReconnectFromBrowserSignal();\n });\n if (typeof document !== 'undefined') {\n document.addEventListener('visibilitychange', () => {\n if (document.visibilityState === 'visible') {\n maybeReconnectFromBrowserSignal();\n }\n });\n }\n}\n// ============ Connection Management ============\n/**\n * Derive the stable `<collection>/<roomId>` room key from a routePath hint.\n * Returns null when the hint isn't a room path (fewer than 2 segments).\n */\nfunction roomKeyFromRoutePath(routePath) {\n if (!routePath)\n return null;\n const segs = routePath.replace(/^\\/+/, '').split('/').filter(Boolean);\n if (segs.length < 2)\n return null;\n return `${segs[0]}/${segs[1]}`;\n}\nfunction replaySubscriptions(connection) {\n for (const sub of connection.subscriptions.values()) {\n sub.lastData = undefined;\n if (!connection.pendingSubscriptions.has(sub.subscriptionId)) {\n registerDetachedReplayConfirmation(connection, sub);\n }\n sendSubscribeWithConfirmation(connection, sub);\n }\n}\n/**\n * Derive the stable identity-bucket lease key used to coalesce (singleflight)\n * and refcount (acquisition / idle-close) connection use. Ambient app/room\n * connections key by their routing target; wallet-scoped connections pin the\n * exact bearer so two distinct tokens never share a flight or a lease, even\n * when their compact `#id#<principalKey>` hashes collide.\n */\nfunction connectionLeaseKey(appId, routePath, principalKey, principalToken, anonymous) {\n const roomKey = roomKeyFromRoutePath(routePath);\n // A read-only scoped instance is anonymous and must never share a socket with\n // the authenticated global path even when it targets the same appId.\n const appKey = anonymous ? `${appId}#ro` : appId;\n const base = roomKey ? `${appKey}#room#${roomKey}` : appKey;\n if (!principalKey)\n return base;\n const bucket = `${base}#id#${principalKey}`;\n return principalToken ? `${bucket}#tok#${principalToken}` : bucket;\n}\nfunction cancelIdleConnectionClose(connection) {\n if (!connection.idleCloseTimer)\n return;\n clearTimeout(connection.idleCloseTimer);\n connection.idleCloseTimer = null;\n}\nfunction closeConnectionNow(connection) {\n if (connections.get(connection.key) !== connection)\n return;\n if (!connection.ws)\n return;\n cancelIdleConnectionClose(connection);\n if (connection.tokenRefreshTimer) {\n clearInterval(connection.tokenRefreshTimer);\n connection.tokenRefreshTimer = null;\n }\n const ws = connection.ws;\n connection.ws = null;\n connection.isConnecting = false;\n connection.isConnected = false;\n connection.isAuthenticating = false;\n const closeError = new Error('WebSocket connection closed');\n for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, closeError);\n }\n for (const subscription of connection.subscriptions.values()) {\n rejectSubscriptionRefresh(subscription, closeError);\n }\n connections.delete(connection.key);\n try {\n ws.close();\n }\n catch ( /* already closing */_a) { /* already closing */ }\n}\nfunction scheduleConnectionCloseIfIdle(connection) {\n var _a;\n if (connections.get(connection.key) !== connection)\n return;\n if (connection.subscriptions.size > 0)\n return;\n if (((_a = connectionAcquisitions.get(connection.acquisitionKey)) !== null && _a !== void 0 ? _a : 0) > 0)\n return;\n if (!connection.ws || connection.idleCloseTimer)\n return;\n connection.idleCloseTimer = setTimeout(() => {\n var _a;\n connection.idleCloseTimer = null;\n if (connection.subscriptions.size > 0)\n return;\n if (((_a = connectionAcquisitions.get(connection.acquisitionKey)) !== null && _a !== void 0 ? _a : 0) > 0)\n return;\n closeConnectionNow(connection);\n }, IDLE_CONNECTION_CLOSE_GRACE_MS);\n}\n/**\n * Acquire a connection under a routing-target lease. The lease is refcounted on\n * the identity-bucket key and held across the caller's auth preflight so a\n * concurrent old-route teardown cannot close a socket a new route is about to\n * reuse. The lease is released once the caller has registered its\n * subscription/callback.\n */\nasync function acquireConnection(appId, isServer, routePath, authTokenProvider, principalKey, principalToken, source) {\n var _a;\n const leaseKey = connectionLeaseKey(appId, routePath, principalKey, principalToken, source === null || source === void 0 ? void 0 : source.anonymous);\n connectionAcquisitions.set(leaseKey, ((_a = connectionAcquisitions.get(leaseKey)) !== null && _a !== void 0 ? _a : 0) + 1);\n let released = false;\n let releaseTimer = null;\n const release = (connection) => {\n var _a;\n if (released)\n return;\n released = true;\n if (releaseTimer) {\n clearTimeout(releaseTimer);\n releaseTimer = null;\n }\n const remaining = ((_a = connectionAcquisitions.get(leaseKey)) !== null && _a !== void 0 ? _a : 1) - 1;\n if (remaining > 0)\n connectionAcquisitions.set(leaseKey, remaining);\n else\n connectionAcquisitions.delete(leaseKey);\n if (connection)\n scheduleConnectionCloseIfIdle(connection);\n };\n try {\n const connection = await getOrCreateConnection(appId, isServer, routePath, authTokenProvider, principalKey, principalToken, source);\n const releaseConnection = () => release(connection);\n // Registration is synchronous after the caller's await. This fail-safe\n // releases on the next task even if an option getter/callback throws\n // before subscribeV2 reaches its explicit release path.\n releaseTimer = setTimeout(releaseConnection, 0);\n return { connection, release: releaseConnection };\n }\n catch (error) {\n release();\n throw error;\n }\n}\nasync function getOrCreateConnection(appId, isServer, routePath, authTokenProvider, principalKey, principalToken, source) {\n // Singleflight: concurrent first-use of the same routing target shares one\n // in-flight connection rather than each creating an orphan socket. Keyed by\n // the identity-bucket lease key so distinct wallet tokens never coalesce.\n const leaseKey = connectionLeaseKey(appId, routePath, principalKey, principalToken, source === null || source === void 0 ? void 0 : source.anonymous);\n const activeFlight = connectionFlights.get(leaseKey);\n if (activeFlight)\n return activeFlight;\n const flight = getOrCreateConnectionOnce(appId, isServer, routePath, authTokenProvider, principalKey, principalToken, leaseKey, source);\n connectionFlights.set(leaseKey, flight);\n try {\n return await flight;\n }\n finally {\n if (connectionFlights.get(leaseKey) === flight) {\n connectionFlights.delete(leaseKey);\n }\n }\n}\nasync function getOrCreateConnectionOnce(appId, isServer, routePath, authTokenProvider, principalKey, principalToken, leaseKey, source) {\n attachBrowserReconnectHooksOnce();\n const anonymous = (source === null || source === void 0 ? void 0 : source.anonymous) === true;\n // A per-room subscription gets its OWN connection routed to the room DO; all\n // other subscriptions share the app-level connection (project DO). The worker\n // derives the room from the `?path=` we attach below and is the final routing\n // authority — `routePath` is only a hint.\n const roomKey = roomKeyFromRoutePath(routePath);\n // A wallet-scoped subscription (server WalletClient) gets its OWN connection\n // keyed by the wallet identity, so its WS authenticates as that wallet and\n // never shares a connection (or token) with any top-level server caller. A\n // read-only scoped (anonymous) instance is likewise isolated by an `#ro`\n // marker so it never shares the authenticated global socket on the same appId.\n const appKey = anonymous ? `${appId}#ro` : appId;\n const base = roomKey ? `${appKey}#room#${roomKey}` : appKey;\n const identityBucketKey = principalKey\n ? `${base}#id#${principalKey}`\n : base;\n let connKey = identityBucketKey;\n let connection;\n if (principalKey && principalToken) {\n // The 31-bit hash selects a small bucket only. Exact token equality is\n // authoritative, and a rare collision gets an independent map slot.\n for (const [candidateKey, candidate] of connections) {\n if ((candidateKey === identityBucketKey || candidateKey.startsWith(`${identityBucketKey}#collision#`)) &&\n candidate.connectionIdentityToken === principalToken) {\n connKey = candidateKey;\n connection = candidate;\n break;\n }\n }\n if (!connection && connections.has(connKey)) {\n let collisionIndex = 1;\n while (connections.has(`${identityBucketKey}#collision#${collisionIndex}`))\n collisionIndex += 1;\n connKey = `${identityBucketKey}#collision#${collisionIndex}`;\n }\n }\n else {\n connection = connections.get(connKey);\n }\n if (connection && connection.ws) {\n // We may reuse this connection; cancel any pending idle-close so it is\n // not torn down during the auth preflight below. The held acquisition\n // lease also guards this window, but cancelling here avoids a needless\n // grace-timer round-trip on the common reuse path.\n cancelIdleConnectionClose(connection);\n if (connection.authFailure) {\n throw connection.authFailure;\n }\n let currentAuthToken;\n try {\n currentAuthToken = await getConnectionAuthToken(isServer, authTokenProvider, anonymous);\n }\n catch (error) {\n const authError = normalizeAuthExpiredError(error, 'Authentication expired and refresh failed');\n failConnectionAuth(connection, authError);\n throw authError;\n }\n if (connection.isConnected &&\n !connection.isAuthenticating &&\n !connectionMatchesAuthToken(connection, currentAuthToken)) {\n closeConnectionNow(connection);\n }\n else {\n connection.authFailure = null;\n return connection;\n }\n connection.authFailure = null;\n }\n let initialAuthToken = await getConnectionAuthToken(isServer, authTokenProvider, anonymous);\n // Create new connection\n connection = {\n ws: null,\n subscriptions: new Map(),\n pendingSubscriptions: new Map(),\n pendingUnsubscriptions: new Map(),\n pendingRequests: new Map(),\n isConnecting: false,\n isConnected: false,\n isAuthenticating: false,\n appId,\n key: connKey,\n acquisitionKey: leaseKey,\n routePath: roomKey ? routePath : undefined,\n authTokenProvider,\n connectionIdentityToken: principalToken !== null && principalToken !== void 0 ? principalToken : null,\n pendingAuthToken: null,\n pendingAuthSnapshot: null,\n authTokenValue: null,\n authPrincipal: null,\n socketGeneration: 0,\n tokenRefreshTimer: null,\n idleCloseTimer: null,\n consecutiveAuthFailures: 0,\n authFailure: null,\n source,\n anonymous,\n isServer,\n serverRejectedAuthToken: null,\n };\n connections.set(connKey, connection);\n // URL provider for reconnection with fresh tokens\n const urlProvider = async () => {\n var _a;\n // A scoped createClient() connection targets its own realtime endpoint;\n // the default path reads the module-global config.\n const wsApiUrl = (_a = source === null || source === void 0 ? void 0 : source.wsApiUrl) !== null && _a !== void 0 ? _a : (await getConfig()).wsApiUrl;\n const wsUrl = new URL(wsApiUrl);\n // Always use v2 path\n wsUrl.pathname = WS_V2_PATH;\n // Set appId from the configured SDK source, or an explicit per-call\n // override passed through subscribeV2. Do not consult ambient globals:\n // app identity must come from init({ appId }) or an explicit call option.\n // `appId` here is already the resolved effectiveAppId; fall back to the\n // global only on the default path when it was somehow empty.\n wsUrl.searchParams.append('appId', appId || (await getConfig()).appId);\n // Per-room connection: carry the room path so the worker routes this WS\n // to the room DO (appId#room#roomId) where the live view fan-out lives.\n if (connection.routePath) {\n wsUrl.searchParams.append('routePath', connection.routePath);\n }\n // Resolve auth token if available. A wallet-scoped connection resolves\n // its token from the wallet's own session (self-refreshing); all others\n // use the browser session or fail closed for top-level server calls. The token is sent as the first WS\n // frame after open, never as a URL query parameter.\n let authToken;\n try {\n authToken = initialAuthToken !== undefined\n ? initialAuthToken\n : await getConnectionAuthToken(isServer, connection.authTokenProvider, connection.anonymous);\n initialAuthToken = undefined;\n }\n catch (error) {\n const authError = normalizeAuthExpiredError(error, 'Authentication expired and refresh failed');\n failConnectionAuth(connection, authError);\n throw authError;\n }\n connection.pendingAuthToken = authToken || null;\n connection.pendingAuthSnapshot = authSnapshotFromToken(authToken);\n if (authToken) {\n // Successful token acquisition — reset failure counter\n connection.consecutiveAuthFailures = 0;\n connection.authFailure = null;\n }\n return wsUrl.toString();\n };\n // Create WebSocket connection\n connection.isConnecting = true;\n const ws = new ReconnectingWebSocket(urlProvider, [], Object.assign(Object.assign({}, WS_CONFIG), { debug: false }));\n connection.ws = ws;\n // Handle connection open\n ws.addEventListener('open', () => {\n var _a, _b;\n connection.socketGeneration += 1;\n connection.isConnecting = false;\n connection.isConnected = true;\n // NOTE: Do NOT reset consecutiveAuthFailures here. It is reset when a\n // fresh auth token is actually obtained or on an explicit auth change.\n // Schedule periodic token freshness checks. An anonymous (read-only\n // scoped) connection holds no token and must never poll or refresh the\n // ambient global session, so it is skipped.\n if (!connection.anonymous) {\n scheduleTokenRefresh(connection, isServer);\n }\n if (connection.pendingAuthToken) {\n connection.isAuthenticating = true;\n try {\n (_a = connection.ws) === null || _a === void 0 ? void 0 : _a.send(JSON.stringify({ type: 'auth', token: connection.pendingAuthToken }));\n }\n catch (error) {\n connection.isAuthenticating = false;\n connection.isConnected = false;\n console.error('[WS v2] Error sending auth message:', error);\n try {\n (_b = connection.ws) === null || _b === void 0 ? void 0 : _b.close(1008, 'Authentication send failed');\n }\n catch (_c) {\n // Already closed.\n }\n }\n }\n else {\n connection.isAuthenticating = false;\n connection.authTokenValue = null;\n connection.authPrincipal = null;\n replaySubscriptions(connection);\n }\n });\n // Handle incoming messages\n ws.addEventListener('message', (event) => {\n try {\n const message = JSON.parse(event.data);\n handleServerMessage(connection, message);\n }\n catch (error) {\n console.error('[WS v2] Error parsing message:', error);\n }\n });\n // Handle errors\n ws.addEventListener('error', (event) => {\n console.error('[WS v2] WebSocket error:', event);\n const wsError = new Error('WebSocket error');\n for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, wsError);\n }\n for (const subscription of connection.subscriptions.values()) {\n rejectSubscriptionRefresh(subscription, wsError);\n }\n });\n // Handle close\n ws.addEventListener('close', () => {\n connection.isConnected = false;\n connection.isAuthenticating = false;\n const disconnectError = new Error('WebSocket disconnected');\n for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, disconnectError);\n }\n if (connection.tokenRefreshTimer) {\n clearInterval(connection.tokenRefreshTimer);\n connection.tokenRefreshTimer = null;\n }\n // Reject all pending WS CRUD requests on disconnect (fail fast)\n for (const [id, pending] of connection.pendingRequests) {\n clearTimeout(pending.timer);\n pending.reject(disconnectError);\n }\n connection.pendingRequests.clear();\n });\n return connection;\n}\nfunction handleServerMessage(connection, message) {\n var _a, _b, _c, _d, _e, _f;\n switch (message.type) {\n case 'authenticated': {\n connection.isAuthenticating = false;\n connection.authTokenValue = (_b = (_a = connection.pendingAuthSnapshot) === null || _a === void 0 ? void 0 : _a.tokenValue) !== null && _b !== void 0 ? _b : null;\n connection.authPrincipal = (_d = (_c = connection.pendingAuthSnapshot) === null || _c === void 0 ? void 0 : _c.principal) !== null && _d !== void 0 ? _d : null;\n // Record server-advertised capabilities (v2 socket query transport).\n connection.capabilities = (_e = message.capabilities) !== null && _e !== void 0 ? _e : null;\n replaySubscriptions(connection);\n break;\n }\n case 'subscribed': {\n const subscription = connection.subscriptions.get(message.subscriptionId);\n if (subscription) {\n const refresh = subscription.refresh;\n // A data update can race ahead of subscribed during reconnect.\n // If we already received data for this subscription, treat subscribed\n // as an ack only and avoid regressing to an older snapshot.\n if (refresh) {\n const hadBaseline = subscription.lastData !== undefined;\n if (subscription.dataRevision === refresh.dataRevisionAtStart) {\n if (subscription.cache) {\n const cacheKey = getCacheKey(subscription.path, subscription.prompt, subscription.shape, subscription.limit, subscription.cursor, subscription.filter, subscription.identity);\n setResponseCacheEntry(cacheKey, subscription.identityToken, message.data);\n }\n subscription.lastData = message.data;\n subscription.dataRevision += 1;\n if (hadBaseline) {\n const callbacks = Array.from(refresh.callbacks)\n .filter((callback) => subscription.callbacks.includes(callback));\n notifyCallbackOptions(callbacks, message.data);\n }\n else {\n // The refresh joined an original registration or a\n // reconnect replay before its first baseline arrived.\n // Every active callback needs that initial snapshot.\n notifyCallbacks(subscription, message.data);\n }\n }\n else if (refresh.callbacks.size > 0 && subscription.lastData !== undefined) {\n // A newer authorized data frame arrived after this refresh\n // began. Do not regress lastData to the older subscribed\n // snapshot; use that newer frame for callbacks that joined\n // after it was broadcast.\n const callbacks = Array.from(refresh.callbacks)\n .filter((callback) => subscription.callbacks.includes(callback));\n notifyCallbackOptions(callbacks, subscription.lastData);\n }\n resolveSubscriptionRefresh(subscription);\n }\n else if (subscription.lastData === undefined) {\n if (subscription.cache) {\n const cacheKey = getCacheKey(subscription.path, subscription.prompt, subscription.shape, subscription.limit, subscription.cursor, subscription.filter, subscription.identity);\n setResponseCacheEntry(cacheKey, subscription.identityToken, message.data);\n }\n subscription.lastData = message.data;\n subscription.dataRevision += 1;\n notifyCallbacks(subscription, message.data);\n }\n }\n // Resolve pending subscription promise\n const pending = connection.pendingSubscriptions.get(message.subscriptionId);\n if (pending) {\n resolvePendingSubscriptionConfirmation(connection, message.subscriptionId);\n }\n break;\n }\n case 'unsubscribed': {\n // Resolve pending unsubscription promise\n const pending = connection.pendingUnsubscriptions.get(message.subscriptionId);\n if (pending) {\n pending.resolve();\n connection.pendingUnsubscriptions.delete(message.subscriptionId);\n }\n break;\n }\n case 'data': {\n const subscription = connection.subscriptions.get(message.subscriptionId);\n if (subscription) {\n // Update cache\n if (subscription.cache) {\n const cacheKey = getCacheKey(subscription.path, subscription.prompt, subscription.shape, subscription.limit, subscription.cursor, subscription.filter, subscription.identity);\n setResponseCacheEntry(cacheKey, subscription.identityToken, message.data);\n }\n // Store last data\n subscription.lastData = message.data;\n subscription.dataRevision += 1;\n // Notify callbacks\n notifyCallbacks(subscription, message.data);\n // A data frame is itself a full, freshly authorized snapshot.\n // It satisfies every joined callback even if the duplicate\n // subscribed ACK was lost; resolving here prevents a false\n // refresh timeout ten seconds after the UI already rendered.\n if (subscription.refresh) {\n resolveSubscriptionRefresh(subscription);\n }\n }\n // A data frame is a full, authorized snapshot and therefore also\n // confirms an initial registration when its `subscribed` ACK was\n // lost. Resolve the originating promise without duplicating state.\n resolvePendingSubscriptionConfirmation(connection, message.subscriptionId);\n break;\n }\n case 'response': {\n const pendingReq = connection.pendingRequests.get(message.requestId);\n if (pendingReq) {\n connection.pendingRequests.delete(message.requestId);\n clearTimeout(pendingReq.timer);\n if (message.status >= 400) {\n pendingReq.reject(new Error(`Request failed with status ${message.status}`));\n }\n else {\n pendingReq.resolve(message.data);\n }\n }\n break;\n }\n case 'setResponse': {\n const pendingSet = connection.pendingRequests.get(message.requestId);\n if (pendingSet) {\n connection.pendingRequests.delete(message.requestId);\n clearTimeout(pendingSet.timer);\n if (message.statusCode >= 400) {\n pendingSet.reject(new Error(((_f = message.body) === null || _f === void 0 ? void 0 : _f.message) || `Set failed with status ${message.statusCode}`));\n }\n else {\n pendingSet.resolve(message.body);\n }\n }\n break;\n }\n case 'error': {\n console.error('[WS v2] Server error:', message.code, message.message);\n // The auth frame was just refused: while the auth ack is pending the\n // server sends no other error frame, and this one is immediately\n // followed by its 1008 close. Kick the forced-refresh recovery - the\n // ordinary reconnect loop then re-auths with a fresh token or, once a\n // definitively dead session is cleared, connects anonymously so\n // public reads still replay. Ambient connections only: wallet-scoped\n // connections refresh through their own provider.\n if (connection.isAuthenticating && connection.pendingAuthToken && !connection.authTokenProvider && !connection.anonymous) {\n void recoverFromServerAuthRejection(connection);\n }\n // Build an Error that ALSO carries the stable `code` as a structured\n // field (not just string-interpolated into the message) so callers can\n // branch on it — e.g. `catch (e) { if (e.code === 'invariant_violation') }`\n // — symmetric with the HTTP path in utils/api.ts. requestId (CRUD) /\n // subscriptionId are attached for correlation with the decision log.\n const buildWsError = () => {\n const err = new Error(`${message.code}: ${message.message}`);\n err.code = message.code;\n if (message.requestId)\n err.requestId = message.requestId;\n if (message.subscriptionId)\n err.subscriptionId = message.subscriptionId;\n // A policy/invariant denial over the socket carries the same\n // structured decline as the HTTP path (live-intent acks, WS\n // writes). Mirror `.decline` and notify the browser widget.\n const declineBody = message.decline\n ? { decline: message.decline }\n : {\n code: message.code,\n message: message.message,\n reason: message.reason,\n invariant: message.invariant,\n verdict: message.verdict,\n };\n const decline = deriveDecline(declineBody);\n if (decline) {\n err.decline = decline;\n err.isBoundedDecline = true;\n dispatchDeclineEvent(decline, connection.appId);\n }\n return err;\n };\n const wsError = buildWsError();\n // Handle CRUD request errors (requestId present)\n if (message.requestId) {\n const pendingReq = connection.pendingRequests.get(message.requestId);\n if (pendingReq) {\n connection.pendingRequests.delete(message.requestId);\n clearTimeout(pendingReq.timer);\n pendingReq.reject(wsError);\n }\n }\n if (message.subscriptionId) {\n // Reject pending subscription if this is a subscription error\n const pending = connection.pendingSubscriptions.get(message.subscriptionId);\n if (pending) {\n rejectPendingSubscriptionConfirmation(connection, message.subscriptionId, wsError);\n }\n // Notify error callbacks for this subscription\n const subscription = connection.subscriptions.get(message.subscriptionId);\n if (subscription) {\n notifyErrorCallbacks(subscription, wsError);\n rejectSubscriptionRefresh(subscription, wsError);\n }\n }\n break;\n }\n }\n}\n/**\n * Additively attach the bare `id` (leaf doc key) to a subscription row (Bug 1).\n * Rows carry `_id`/`pathId` = the full document path; this leaves those as-is and\n * adds `id` = the last path segment so `row.id` is the doc key apps expect. No-ops\n * for non-objects and rows that already define `id`.\n */\nfunction withSubscriptionId(row) {\n var _a, _b, _c;\n if (!row || typeof row !== 'object' || Array.isArray(row))\n return row;\n if ('id' in row)\n return row;\n const source = (_c = (_b = (_a = row._id) !== null && _a !== void 0 ? _a : row.pathId) !== null && _b !== void 0 ? _b : row.relativePath) !== null && _c !== void 0 ? _c : row.absolutePath;\n if (typeof source !== 'string' || source.length === 0)\n return row;\n const leaf = docId(source);\n if (!leaf)\n return row;\n return Object.assign(Object.assign({}, row), { id: leaf });\n}\n/**\n * The `onData` payload follows the path: a collection delivers a bare array of\n * rows, a single-doc path delivers the document (or null). Attach the bare `id`\n * to each returned row in either case, additive (Bug 1).\n */\nfunction addIdsToSubscriptionData(data) {\n if (Array.isArray(data))\n return data.map(withSubscriptionId);\n return withSubscriptionId(data);\n}\nfunction notifyCallbackOptions(callbacks, data) {\n var _a;\n // Attach the bare `id` (leaf doc key) to every delivered row (Bug 1).\n const decorated = addIdsToSubscriptionData(data);\n for (const callback of callbacks) {\n try {\n (_a = callback.onData) === null || _a === void 0 ? void 0 : _a.call(callback, decorated);\n }\n catch (error) {\n console.error('[WS v2] Error in subscription callback:', error);\n }\n }\n}\nfunction notifyCallbacks(subscription, data) {\n // Snapshot the callbacks array so that unsubscriptions during\n // notification don't cause callbacks to be skipped.\n notifyCallbackOptions(subscription.callbacks.slice(), data);\n}\nfunction notifyErrorCallback(callback, error) {\n let delivered = false;\n try {\n const onError = callback.onError;\n if (!onError)\n return false;\n onError(error);\n delivered = true;\n }\n catch (callbackError) {\n console.error('[WS v2] Error in subscription error callback:', callbackError);\n }\n return delivered;\n}\nfunction notifyErrorCallbacks(subscription, error) {\n let delivered = false;\n const callbacks = subscription.callbacks.slice();\n for (const callback of callbacks) {\n delivered = notifyErrorCallback(callback, error) || delivered;\n }\n if (delivered)\n error.__boundedDeliveredToOnError = true;\n return delivered;\n}\n// WebSocket readyState constants\nconst WS_READY_STATE_OPEN = 1;\nconst WS_READY_STATE_CLOSED = 3;\nfunction sendSubscribe(connection, subscription) {\n if (!connection.ws || connection.ws.readyState !== WS_READY_STATE_OPEN) {\n return;\n }\n const message = {\n type: 'subscribe',\n subscriptionId: subscription.subscriptionId,\n path: subscription.path,\n filter: subscription.filter,\n sort: subscription.sort,\n prompt: subscription.prompt ? safeBtoa(subscription.prompt) : undefined,\n includeSubPaths: subscription.includeSubPaths,\n shape: subscription.shape && Object.keys(subscription.shape).length > 0\n ? subscription.shape\n : undefined,\n limit: subscription.limit,\n cursor: subscription.cursor,\n };\n try {\n connection.ws.send(JSON.stringify(message));\n }\n catch (error) {\n console.error('[WS v2] Error sending subscribe message:', error);\n }\n}\nfunction resolvePendingSubscriptionConfirmation(connection, subscriptionId) {\n const pending = connection.pendingSubscriptions.get(subscriptionId);\n if (!pending)\n return false;\n connection.pendingSubscriptions.delete(subscriptionId);\n if (pending.timer) {\n clearTimeout(pending.timer);\n pending.timer = null;\n }\n pending.resolve();\n return true;\n}\nfunction rejectPendingSubscriptionConfirmation(connection, subscriptionId, error) {\n const pending = connection.pendingSubscriptions.get(subscriptionId);\n if (!pending)\n return false;\n connection.pendingSubscriptions.delete(subscriptionId);\n if (pending.timer) {\n clearTimeout(pending.timer);\n pending.timer = null;\n }\n pending.reject(error);\n return true;\n}\nfunction armSubscriptionConfirmationTimeout(connection, subscription, pending) {\n pending.timer = setTimeout(() => {\n if (connection.pendingSubscriptions.get(subscription.subscriptionId) !== pending)\n return;\n pending.timer = null;\n const sameReadySocket = connection.ws === pending.socket &&\n connection.socketGeneration === pending.socketGeneration &&\n connection.authTokenValue === pending.authTokenValue &&\n connection.authPrincipal === pending.authPrincipal &&\n connection.isConnected &&\n !connection.isAuthenticating &&\n pending.socket.readyState === WS_READY_STATE_OPEN;\n const sameRegistration = connection.subscriptions.get(subscription.subscriptionId) === subscription;\n if (!pending.retrySent && sameReadySocket && sameRegistration) {\n pending.retrySent = true;\n // Arm the terminal timeout before sending: browser/test transports\n // may synchronously dispatch the acknowledgement from send().\n armSubscriptionConfirmationTimeout(connection, subscription, pending);\n sendSubscribe(connection, subscription);\n return;\n }\n rejectPendingSubscriptionConfirmation(connection, subscription.subscriptionId, new Error('Subscription timeout'));\n }, SUBSCRIPTION_CONFIRM_TIMEOUT_MS);\n}\n/**\n * Bind an existing confirmation promise to the exact socket session that is\n * about to carry its subscribe frame. Cold-start registrations create the\n * promise before the socket opens; replay uses this helper to move the timeout\n * from the connection wait onto the authenticated socket without allocating a\n * second promise or leaving the original timer behind.\n */\nfunction sendSubscribeWithConfirmation(connection, subscription) {\n const pending = connection.pendingSubscriptions.get(subscription.subscriptionId);\n const socket = connection.ws;\n if (pending && socket && socket.readyState === WS_READY_STATE_OPEN) {\n if (pending.timer) {\n clearTimeout(pending.timer);\n pending.timer = null;\n }\n pending.socket = socket;\n pending.socketGeneration = connection.socketGeneration;\n pending.authTokenValue = connection.authTokenValue;\n pending.authPrincipal = connection.authPrincipal;\n // Arm before send: browser/test transports may synchronously dispatch\n // the subscribed/data/error response from send().\n armSubscriptionConfirmationTimeout(connection, subscription, pending);\n }\n sendSubscribe(connection, subscription);\n}\n/**\n * A reconnect replay has no caller awaiting subscribeV2 anymore, but it still\n * needs the same bounded confirmation/retry guarantee. Attach the rejection\n * handler immediately so this recovery record can never become an unhandled\n * promise. Structured server errors are delivered by handleServerMessage;\n * terminal local timeouts are surfaced here exactly once to active callbacks.\n */\nfunction registerDetachedReplayConfirmation(connection, subscription) {\n const socket = connection.ws;\n if (!socket || connection.pendingSubscriptions.has(subscription.subscriptionId))\n return;\n let resolve;\n let reject;\n const promise = new Promise((resolvePromise, rejectPromise) => {\n resolve = resolvePromise;\n reject = rejectPromise;\n });\n const pending = {\n resolve,\n reject,\n timer: null,\n retrySent: false,\n socket,\n socketGeneration: connection.socketGeneration,\n authTokenValue: connection.authTokenValue,\n authPrincipal: connection.authPrincipal,\n };\n connection.pendingSubscriptions.set(subscription.subscriptionId, pending);\n void promise.catch((error) => {\n if (error.__boundedDeliveredToOnError)\n return;\n if (connection.subscriptions.get(subscription.subscriptionId) !== subscription)\n return;\n // Ordinary socket/auth-change close paths will replay again and did not\n // historically poison every established callback. Only a healthy socket\n // exhausting its bounded confirmation retry is a new terminal condition.\n if (error.message === 'Subscription timeout') {\n const delivered = notifyErrorCallbacks(subscription, error);\n if (!delivered) {\n console.warn('[WS v2] Replayed subscription confirmation timed out:', subscription.path);\n }\n }\n });\n}\nfunction resolveSubscriptionRefresh(subscription) {\n const refresh = subscription.refresh;\n if (!refresh)\n return;\n subscription.refresh = null;\n if (refresh.timer)\n clearTimeout(refresh.timer);\n refresh.callbacks.clear();\n refresh.resolve();\n}\nfunction rejectSubscriptionRefresh(subscription, error) {\n const refresh = subscription.refresh;\n if (!refresh)\n return;\n subscription.refresh = null;\n if (refresh.timer)\n clearTimeout(refresh.timer);\n refresh.callbacks.clear();\n refresh.reject(error);\n}\n/**\n * A callback joining an already-registered non-cache subscription cannot be\n * seeded from `lastData`: that snapshot may predate the callback's auth\n * preflight. Re-send the same subscription id so the server re-runs read auth\n * and returns a fresh baseline, without allocating another websocket or\n * replacing the logical client subscription.\n */\nfunction requestFreshSubscriptionSnapshot(connection, subscription, callback) {\n let refresh = subscription.refresh;\n if (!refresh) {\n let resolve;\n let reject;\n const promise = new Promise((resolvePromise, rejectPromise) => {\n resolve = resolvePromise;\n reject = rejectPromise;\n });\n refresh = {\n promise,\n resolve,\n reject,\n timer: null,\n callbacks: new Set(),\n dataRevisionAtStart: subscription.dataRevision,\n };\n subscription.refresh = refresh;\n refresh.timer = setTimeout(() => {\n if (subscription.refresh !== refresh)\n return;\n rejectSubscriptionRefresh(subscription, new Error('Subscription timeout'));\n }, 10000);\n }\n // Register before sendSubscribe: test/browser transports may synchronously\n // dispatch the subscribed response from send().\n refresh.callbacks.add(callback);\n // Every newly joined callback gets an idempotent same-id resend when the\n // authenticated socket is ready. Do not suppress this because an initial\n // confirmation or an earlier refresh is pending: that pending frame may\n // have been lost or displaced, and sharing it is exactly how an entire\n // route remount can inherit one doomed timeout. When connecting or\n // authenticating, replaySubscriptions will send after auth completes.\n if (connection.isConnected && !connection.isAuthenticating) {\n sendSubscribe(connection, subscription);\n }\n return refresh.promise;\n}\nfunction sendUnsubscribe(connection, subscriptionId) {\n if (!connection.ws || connection.ws.readyState !== WS_READY_STATE_OPEN) {\n return;\n }\n const message = {\n type: 'unsubscribe',\n subscriptionId,\n };\n try {\n connection.ws.send(JSON.stringify(message));\n }\n catch (error) {\n console.error('[WS v2] Error sending unsubscribe message:', error);\n }\n}\n// ============ Public API ============\n/**\n * Subscribe to data at a path using WebSocket v2.\n * Returns an unsubscribe function.\n */\n/**\n * @param roomRoutePath INTERNAL ONLY. A `<sessionCollection>/<roomId>` room path\n * used by `live.subscribeView` to route this subscription's connection to the\n * per-room DO (where live view fan-out lives). It is NOT part of the public\n * subscribe API — app code never passes routing; the worker remains the\n * authority on the destination DO (it derives the room from the `?path=` we\n * attach). This argument only tells the client which connection to multiplex\n * the subscription onto, since a WS connection routes to a single DO.\n */\nexport async function subscribeV2(path, subscriptionOptions, roomRoutePath) {\n var _a, _b, _c, _d, _e, _f;\n const overrides = subscriptionOptions._overrides;\n // A scoped createClient() instance passes its own resolved config; the\n // default path reads the module-global init() config.\n const config = (_a = overrides === null || overrides === void 0 ? void 0 : overrides._config) !== null && _a !== void 0 ? _a : await getConfig();\n const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n // A read-only scoped instance connects anonymously to its own realtime\n // endpoint - never sharing a socket, token, or the ambient session with the\n // global (default) app.\n const anonymous = (overrides === null || overrides === void 0 ? void 0 : overrides._readOnly) === true;\n const source = (overrides === null || overrides === void 0 ? void 0 : overrides._config)\n ? { wsApiUrl: overrides._config.wsApiUrl, anonymous }\n : undefined;\n // Use explicit appId override if provided, otherwise fall back to config\n const effectiveAppId = subscriptionOptions.appId || config.appId;\n // H1: scope the response cache to the caller's identity so a private snapshot\n // cached for one principal is never delivered to a different principal who\n // subscribes with identical options (shared process / SSR / login-switch).\n // Per-subscription wallet override (server WalletClient.subscribe). When set,\n // the connection authenticates + caches under the wallet's identity instead of\n // any top-level server caller — so a `createWalletClient` caller can\n // subscribe through its explicit wallet session. A read-only scoped instance\n // is anonymous, so it never carries an auth-token provider.\n const authTokenProvider = (!anonymous && (overrides === null || overrides === void 0 ? void 0 : overrides._getAuthHeaders))\n ? async () => bearerFromAuthHeaders(await overrides._getAuthHeaders()) || null\n : undefined;\n const identityInfo = await getSubscriptionIdentity(effectiveAppId, config.isServer, overrides, anonymous);\n const identity = identityInfo.key;\n const identityToken = identityInfo.token;\n const responseCacheEnabled = subscriptionOptions.cache === true && identityInfo.cacheable;\n // Preserve the existing compact connection-key shape, but use the exact\n // token as a secondary in-memory equality check within that hash bucket.\n const principalKey = authTokenProvider ? identity : undefined;\n const principalToken = authTokenProvider\n ? (identityToken !== null && identityToken !== void 0 ? identityToken : identity)\n : undefined;\n const cacheKey = responseCacheEnabled\n ? getCacheKey(normalizedPath, subscriptionOptions.prompt, subscriptionOptions.shape, subscriptionOptions.limit, subscriptionOptions.cursor, subscriptionOptions.filter, identity)\n : null;\n // Acquire a connection for this routing target (room-scoped when a room route\n // is supplied by the live helper, else the app-level connection). The lease is\n // held across auth preflight and released once this call registers below, so a\n // concurrent old-route teardown cannot close a socket we are about to reuse.\n let connection;\n let releaseConnection;\n try {\n const acquisition = await acquireConnection(effectiveAppId, config.isServer, roomRoutePath, authTokenProvider, principalKey, principalToken, source);\n connection = acquisition.connection;\n releaseConnection = acquisition.release;\n }\n catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n if (subscriptionOptions.onError) {\n subscriptionOptions.onError(err);\n return async () => { };\n }\n throw err;\n }\n const cachedEntry = cacheKey ? getResponseCacheEntry(cacheKey, identityToken) : undefined;\n // Check if we already have a subscription for this path+prompt+shape+limit+cursor+filter+sort\n let existingSubscription;\n let specKey = '';\n try {\n // Stringify THIS call's specs once; existing subscriptions carry their\n // precomputed specKey, so the scan is a string compare per entry\n // (previously each new subscribe re-stringified every existing\n // subscription's shape/filter/sort — O(N²) with many live hooks).\n specKey = JSON.stringify([\n (_b = subscriptionOptions.shape) !== null && _b !== void 0 ? _b : null,\n (_c = subscriptionOptions.filter) !== null && _c !== void 0 ? _c : null,\n (_d = subscriptionOptions.sort) !== null && _d !== void 0 ? _d : null,\n ]);\n for (const sub of connection.subscriptions.values()) {\n // H1: also require the same principal identity (compact hash AND exact\n // token) — a different logged-in user must not piggy-back on (and\n // inherit lastData from) another user's existing subscription, even\n // with identical path/prompt/shape/filter/sort.\n if (sub.identity === identity && sub.identityToken === identityToken && sub.path === normalizedPath && sub.prompt === subscriptionOptions.prompt && sub.specKey === specKey && sub.includeSubPaths === ((_e = subscriptionOptions.includeSubPaths) !== null && _e !== void 0 ? _e : false) && sub.limit === subscriptionOptions.limit && sub.cursor === subscriptionOptions.cursor) {\n existingSubscription = sub;\n break;\n }\n }\n }\n catch (error) {\n releaseConnection();\n throw error;\n }\n if (existingSubscription) {\n let replayData = undefined;\n let replayOnData;\n if (responseCacheEnabled) {\n // Read callback getters before mutating the shared subscription. If\n // a caller supplied a throwing getter, the acquisition fail-safe can\n // release cleanly without leaving a ghost callback behind.\n replayOnData = subscriptionOptions.onData;\n replayData = existingSubscription.lastData !== undefined\n ? existingSubscription.lastData\n : cachedEntry && Date.now() - cachedEntry.timestamp < CACHE_TTL\n ? cachedEntry.data\n : undefined;\n }\n if (responseCacheEnabled) {\n existingSubscription.cache = true;\n }\n // Add callback to existing subscription\n existingSubscription.callbacks.push(subscriptionOptions);\n let refreshPromise = null;\n if (responseCacheEnabled) {\n // Explicit, principal-bound cache opt-in may replay exactly one\n // snapshot. Prefer the active subscription's lastData, falling back\n // to the short-lived response cache while a reconnect is in flight.\n if (replayData !== undefined && replayOnData) {\n setTimeout(() => {\n replayOnData === null || replayOnData === void 0 ? void 0 : replayOnData(addIdsToSubscriptionData(replayData));\n }, 0);\n }\n }\n else {\n // Default (non-cache) subscriptions require a fresh authorized\n // baseline for every newly joined callback. Reuse the same logical\n // subscription id and socket, but make the server re-run the read.\n refreshPromise = requestFreshSubscriptionSnapshot(connection, existingSubscription, subscriptionOptions);\n }\n releaseConnection();\n if (refreshPromise) {\n try {\n await refreshPromise;\n }\n catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n let deliveredLocally = false;\n if (!err.__boundedDeliveredToOnError) {\n deliveredLocally = notifyErrorCallback(subscriptionOptions, err);\n }\n if (!subscriptionOptions.onError) {\n await removeCallbackFromSubscription(connection, existingSubscription.subscriptionId, subscriptionOptions);\n throw err;\n }\n if (!err.__boundedDeliveredToOnError && !deliveredLocally) {\n console.warn('[WS v2] Subscription refresh failed, keeping for reconnect recovery:', error);\n }\n }\n }\n return async () => {\n await removeCallbackFromSubscription(connection, existingSubscription.subscriptionId, subscriptionOptions);\n };\n }\n // Deliver cached data immediately for a new logical subscription, but only\n // after connection auth preflight has succeeded. An expired authenticated\n // session must receive an auth error, not a stale private snapshot followed\n // by a failed connect.\n if (cachedEntry && Date.now() - cachedEntry.timestamp < CACHE_TTL && subscriptionOptions.onData) {\n setTimeout(() => {\n var _a;\n (_a = subscriptionOptions.onData) === null || _a === void 0 ? void 0 : _a.call(subscriptionOptions, addIdsToSubscriptionData(cachedEntry.data));\n }, 0);\n }\n // Create new subscription\n const subscriptionId = generateSubscriptionId();\n let subscription;\n try {\n subscription = {\n subscriptionId,\n path: normalizedPath,\n filter: subscriptionOptions.filter,\n sort: subscriptionOptions.sort,\n prompt: subscriptionOptions.prompt,\n shape: subscriptionOptions.shape,\n limit: subscriptionOptions.limit,\n cursor: subscriptionOptions.cursor,\n includeSubPaths: (_f = subscriptionOptions.includeSubPaths) !== null && _f !== void 0 ? _f : false,\n callbacks: [subscriptionOptions],\n lastData: undefined,\n dataRevision: 0,\n refresh: null,\n cache: responseCacheEnabled,\n identity,\n identityToken,\n specKey,\n };\n connection.subscriptions.set(subscriptionId, subscription);\n }\n catch (error) {\n releaseConnection();\n throw error;\n }\n releaseConnection();\n // Register the confirmation before any possible synchronous send/ACK. This\n // includes the first subscription on a cold socket: replaySubscriptions()\n // will bind this same pending record to the authenticated socket and send it.\n const subscriptionPromise = new Promise((resolve, reject) => {\n const socket = connection.ws;\n if (!socket) {\n reject(new Error('WebSocket disconnected'));\n return;\n }\n const pending = {\n resolve,\n reject,\n timer: null,\n retrySent: false,\n socket,\n socketGeneration: connection.socketGeneration,\n authTokenValue: connection.authTokenValue,\n authPrincipal: connection.authPrincipal,\n };\n connection.pendingSubscriptions.set(subscriptionId, pending);\n // Bound a cold connection/auth wait as well. Once the socket becomes\n // ready, sendSubscribeWithConfirmation() replaces this timer with a\n // fresh per-socket confirmation window.\n armSubscriptionConfirmationTimeout(connection, subscription, pending);\n });\n if (connection.isConnected && !connection.isAuthenticating) {\n sendSubscribeWithConfirmation(connection, subscription);\n }\n try {\n await subscriptionPromise;\n }\n catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n let deliveredLocally = false;\n if (!err.__boundedDeliveredToOnError) {\n // A local confirmation timeout belongs to the caller that\n // originated it. Joined callbacks may already have a viable\n // same-id refresh and must not be poisoned by that old attempt.\n deliveredLocally = notifyErrorCallback(subscriptionOptions, err);\n }\n if (!subscriptionOptions.onError) {\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, err);\n // This registration may have acquired joined callbacks while\n // its confirmation was pending. Remove only the originating\n // callback; deleting the whole logical subscription would\n // orphan those remounted consumers and their refresh flight.\n await removeCallbackFromSubscription(connection, subscriptionId, subscriptionOptions);\n throw err;\n }\n if (!err.__boundedDeliveredToOnError && !deliveredLocally) {\n console.warn('[WS v2] Subscription confirmation failed, keeping for reconnect recovery:', error);\n }\n }\n // Return unsubscribe function\n return async () => {\n await removeCallbackFromSubscription(connection, subscriptionId, subscriptionOptions);\n };\n}\nasync function removeCallbackFromSubscription(connection, subscriptionId, callback) {\n var _a;\n const subscription = connection.subscriptions.get(subscriptionId);\n if (!subscription) {\n return;\n }\n // Remove this callback\n subscription.callbacks = subscription.callbacks.filter(cb => cb !== callback);\n (_a = subscription.refresh) === null || _a === void 0 ? void 0 : _a.callbacks.delete(callback);\n // If there are still callbacks, don't unsubscribe\n if (subscription.callbacks.length > 0) {\n return;\n }\n // No more callbacks, unsubscribe from server\n connection.subscriptions.delete(subscriptionId);\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, new Error('Subscription unsubscribed'));\n if (connection.isConnected && !connection.isAuthenticating) {\n // Create a promise to wait for unsubscription confirmation\n const unsubscribePromise = new Promise((resolve, reject) => {\n connection.pendingUnsubscriptions.set(subscriptionId, { resolve, reject });\n // Timeout after 5 seconds\n setTimeout(() => {\n if (connection.pendingUnsubscriptions.has(subscriptionId)) {\n connection.pendingUnsubscriptions.delete(subscriptionId);\n resolve(); // Don't throw on unsubscribe timeout\n }\n }, 5000);\n });\n sendUnsubscribe(connection, subscriptionId);\n await unsubscribePromise;\n }\n // If no more subscriptions, let the connection close after a short idle\n // grace so an immediately-following route remount can reclaim the socket.\n scheduleConnectionCloseIfIdle(connection);\n}\n/**\n * Close all v2 subscriptions.\n */\nexport async function closeAllSubscriptionsV2() {\n const closePromises = [];\n for (const [appId, connection] of connections) {\n cancelIdleConnectionClose(connection);\n const closeError = new Error('Subscriptions closed');\n for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, closeError);\n }\n for (const subscription of connection.subscriptions.values()) {\n rejectSubscriptionRefresh(subscription, closeError);\n }\n if (connection.tokenRefreshTimer) {\n clearInterval(connection.tokenRefreshTimer);\n connection.tokenRefreshTimer = null;\n }\n if (connection.ws) {\n const ws = connection.ws;\n connection.ws = null;\n connection.isConnected = false;\n if (ws.readyState !== WS_READY_STATE_CLOSED) {\n closePromises.push(new Promise((resolve) => {\n ws.addEventListener('close', () => {\n resolve();\n });\n ws.close();\n }));\n }\n }\n connections.delete(appId);\n }\n connectionAcquisitions.clear();\n await Promise.all(closePromises);\n}\n/**\n * Clear the v2 cache.\n */\nexport function clearCacheV2(path) {\n if (path) {\n const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n // Clear all cache entries for this path across ALL identities. Keys are\n // now `<identity>|<path>:...` (H1 principal-scoping), so match the path\n // portion AFTER the identity prefix — otherwise this is a silent no-op.\n for (const key of responseCache.keys()) {\n const sep = key.indexOf('|');\n const pathPart = sep >= 0 ? key.slice(sep + 1) : key;\n if (pathPart.startsWith(normalizedPath)) {\n responseCache.delete(key);\n }\n }\n }\n else {\n responseCache.clear();\n }\n}\n/**\n * Get cached data for a path (v2).\n */\nexport function getCachedDataV2(path, prompt) {\n const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n // H1: response caches are identity-scoped (`<identity>|<path>:...`) and\n // opt-in. Resolve the caller's identity from an active cache-enabled\n // subscription for this path. No matching sub → null (safe).\n let identity;\n let identityToken;\n outer: for (const connection of connections.values()) {\n for (const sub of connection.subscriptions.values()) {\n if (sub.cache && sub.path === normalizedPath && sub.prompt === prompt) {\n identity = sub.identity;\n identityToken = sub.identityToken;\n break outer;\n }\n }\n }\n if (!identity) {\n return null;\n }\n const cacheKey = getCacheKey(path, prompt, undefined, undefined, undefined, undefined, identity);\n const cachedEntry = getResponseCacheEntry(cacheKey, identityToken !== null && identityToken !== void 0 ? identityToken : null);\n if (cachedEntry && Date.now() - cachedEntry.timestamp < CACHE_TTL) {\n return cachedEntry.data;\n }\n return null;\n}\n/**\n * Reconnect all v2 WebSocket connections with fresh authentication.\n * Call this when the user's auth state changes (login/logout).\n *\n * This will:\n * 1. Close existing connections\n * 2. Re-establish with new auth token\n * 3. Re-subscribe to all active paths\n *\n * Note: Existing subscriptions will receive new initial data after reconnection.\n */\nexport async function reconnectWithNewAuthV2() {\n if (reconnectInProgress) {\n return reconnectInProgress;\n }\n reconnectInProgress = doReconnectWithNewAuth();\n try {\n await reconnectInProgress;\n }\n finally {\n reconnectInProgress = null;\n }\n}\nasync function doReconnectWithNewAuth() {\n ambientAuthFailure = null;\n // SECURITY (H1): the logged-in identity is changing (login / logout / switch).\n // Wipe ALL principal-scoped read caches so the new identity can never observe\n // data cached for the previous one. Clear both the WS response cache and the\n // HTTP get() cache (the latter lives in operations.ts — imported dynamically\n // to avoid a static import cycle).\n responseCache.clear();\n // Drop in-memory per-subscription snapshots so they are not redelivered as the\n // previous identity's data after the socket reconnects under new auth.\n for (const connection of connections.values()) {\n for (const sub of connection.subscriptions.values()) {\n sub.lastData = undefined;\n }\n }\n try {\n const { clearReadCacheForAuthChange } = await import('./operations');\n clearReadCacheForAuthChange();\n }\n catch (error) {\n console.warn('[WS v2] Failed to clear HTTP read cache on auth change:', error);\n }\n try {\n const { reconnectRealtimeStoreWithNewAuth } = await import('./realtime-store');\n await reconnectRealtimeStoreWithNewAuth();\n }\n catch (error) {\n console.warn('[WS v2] Failed to reset legacy realtime store on auth change:', error);\n }\n for (const [appId, connection] of connections) {\n if (!connection.ws) {\n continue;\n }\n cancelIdleConnectionClose(connection);\n const reconnectError = new Error('Connection reconnecting due to auth change');\n for (const subscriptionId of Array.from(connection.pendingSubscriptions.keys())) {\n rejectPendingSubscriptionConfirmation(connection, subscriptionId, reconnectError);\n }\n for (const subscription of connection.subscriptions.values()) {\n rejectSubscriptionRefresh(subscription, reconnectError);\n }\n for (const [, pending] of connection.pendingUnsubscriptions) {\n pending.resolve();\n }\n connection.pendingUnsubscriptions.clear();\n // Reset auth failure counter — this is a proactive reconnect (login, token refresh)\n connection.consecutiveAuthFailures = 0;\n connection.authFailure = null;\n // Close the WebSocket (this triggers reconnection in ReconnectingWebSocket)\n // We use reconnect() which will close and re-open with fresh URL (including new token)\n try {\n connection.ws.reconnect();\n }\n catch (error) {\n console.error('[WS v2] Error reconnecting:', error);\n }\n }\n}\n/**\n * Force close and reconnect all connections.\n * This is more aggressive than reconnectWithNewAuthV2() and ensures\n * a complete teardown and rebuild of connections.\n */\nexport async function forceReconnectV2() {\n const reconnectPromises = [];\n const isServer = (await getConfig()).isServer;\n for (const [appId, connection] of connections) {\n if (!connection.ws) {\n continue;\n }\n cancelIdleConnectionClose(connection);\n // Store subscriptions to restore\n const subscriptionsToRestore = Array.from(connection.subscriptions.values());\n // Close the connection\n connection.ws.close();\n connection.ws = null;\n connection.isConnected = false;\n connections.delete(appId);\n // If there were active subscriptions, re-establish connection\n if (subscriptionsToRestore.length > 0) {\n const reconnectPromise = (async () => {\n // Get fresh connection\n const newConnection = await getOrCreateConnection(appId, isServer);\n // Re-register all subscriptions\n for (const sub of subscriptionsToRestore) {\n newConnection.subscriptions.set(sub.subscriptionId, sub);\n }\n // Wait for connection to be ready, then re-subscribe\n // The 'open' handler in getOrCreateConnection will send subscribe messages\n })();\n reconnectPromises.push(reconnectPromise);\n }\n }\n await Promise.all(reconnectPromises);\n}\n// ============ WebSocket request helpers ============\nconst WS_REQUEST_TIMEOUT_MS = 30000;\nfunction generateRequestId() {\n return `req_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`;\n}\n/**\n * Returns true if there is an active v2 WebSocket connection open.\n */\nexport function hasActiveConnection() {\n for (const connection of connections.values()) {\n if (connection.ws && connection.isConnected && !connection.isAuthenticating) {\n return true;\n }\n }\n return false;\n}\n/** WS frame byte ceiling for a runQuery batch. The server's raw message gate is\n * 65536 bytes and rejects an oversized frame pre-parse with an UNCORRELATED error\n * (no requestId to fall back on), so the client keeps larger batches on HTTP\n * (which accepts up to 1MB). Headroom left below the hard limit. */\nconst WS_RUNQUERY_MAX_FRAME_BYTES = 60000;\n/**\n * v2 socket-when-warm transport for named/computed query polls (subscribeQuery /\n * runQuery). Runs `queries` over the ambient per-app authenticated socket instead\n * of HTTP `POST /queries`, but ONLY when that is observably safe and identity-correct:\n * - a warm, OPEN, non-authenticating app socket already exists (never opens one);\n * - the server advertised `capabilities.runQuery` on the authenticated ack;\n * - the socket's authenticated principal matches the caller's CURRENT identity\n * (else read rules would evaluate for the wrong user) - reuses the same gate as\n * reliable live intents;\n * - the serialized frame fits the WS message limit.\n * Returns the per-row array on a clean socket success; returns null - meaning\n * \"fall back to HTTP\" - for every miss/refusal (no socket, no capability, identity\n * skew, oversized batch, the server's own `{ useHttp: true }` deferral, or any\n * timeout / disconnect / error frame). The rows are byte-identical to POST /queries,\n * so the caller is transport-agnostic and never observes which transport won.\n */\nexport async function runNamedQueriesOverSocket(appId, queries, isServer) {\n var _a;\n const connection = connections.get(appId);\n if (!connection || !connection.ws || connection.ws.readyState !== WS_READY_STATE_OPEN || connection.isAuthenticating) {\n return null; // no warm socket -> HTTP (never open one just for queries)\n }\n if (!((_a = connection.capabilities) === null || _a === void 0 ? void 0 : _a.runQuery)) {\n return null; // server did not advertise the capability -> HTTP\n }\n if (!(await canSendAuthenticatedLiveIntent(connection, isServer).catch(() => false))) {\n return null; // identity skew / mid-refresh -> HTTP runs under the current token\n }\n const requestId = generateRequestId();\n const frame = JSON.stringify({ type: 'runQuery', requestId, queries });\n if (frame.length > WS_RUNQUERY_MAX_FRAME_BYTES) {\n return null; // oversized -> HTTP (see WS_RUNQUERY_MAX_FRAME_BYTES)\n }\n let data;\n try {\n data = await new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n connection.pendingRequests.delete(requestId);\n reject(new Error(`runQuery ack timed out after ${WS_REQUEST_TIMEOUT_MS}ms`));\n }, WS_REQUEST_TIMEOUT_MS);\n connection.pendingRequests.set(requestId, { resolve, reject, timer });\n try {\n connection.ws.send(frame);\n }\n catch (e) {\n connection.pendingRequests.delete(requestId);\n clearTimeout(timer);\n reject(e);\n }\n });\n }\n catch (_b) {\n return null; // timeout / disconnect / server error frame -> HTTP re-runs authoritatively\n }\n if ((data === null || data === void 0 ? void 0 : data.useHttp) === true)\n return null; // server deferred (onchain, cross-room, malformed)\n if (Array.isArray(data === null || data === void 0 ? void 0 : data.queries))\n return data.queries;\n return null; // unexpected shape -> HTTP\n}\n/**\n * Send a live-room intent over the EXISTING per-room socket (fire-and-forget).\n * Returns true if it was sent over an open connection, false if there is no\n * live socket for this room yet (caller falls back to HTTP). The worker is the\n * room authority — the connection is already routed to the room DO, so the\n * client never names a destination.\n */\nexport async function wsIntent(appId, roomRoutePath, intent, isServer) {\n const roomKey = roomKeyFromRoutePath(roomRoutePath);\n const connKey = roomKey ? `${appId}#room#${roomKey}` : appId;\n const connection = connections.get(connKey);\n if (!connection || !connection.ws || connection.ws.readyState !== WS_READY_STATE_OPEN || connection.isAuthenticating) {\n return false;\n }\n // Identity-aware send gate. The server attributes intents to the\n // CONNECTION's authenticated principal, so the only correct reasons to\n // refuse the socket are identity ones:\n // - the socket is anonymous while the user is now authenticated, or\n // - the current principal DIFFERS from the socket principal.\n // A mere token rotation for the SAME principal, or a transiently-null\n // token mid-refresh, must NOT reroute a 30Hz command stream to\n // per-command HTTP — that collapses delivery rate and unbounds the game's\n // ack lag (field-debugged: server 500+ commands behind).\n const currentToken = await getIdToken(isServer).catch(() => null);\n if (!currentToken) {\n // Mid-refresh: the socket principal still governs server-side.\n if (!connection.authTokenValue && !connection.authPrincipal)\n return false;\n }\n else if (!connection.authTokenValue && !connection.authPrincipal) {\n // Anonymous socket + authenticated user: do not attribute this user's\n // input to the anon principal. Reauth the socket; caller may fall back.\n void maybeReauthRoomConnection(connection, isServer);\n return false;\n }\n else if (!connectionMatchesAuthToken(connection, currentToken)) {\n // Different principal (identity switch): never send as the old user.\n void maybeReauthRoomConnection(connection, isServer);\n return false;\n }\n try {\n connection.ws.send(JSON.stringify({ type: 'intent', intent }));\n return true;\n }\n catch (_a) {\n return false;\n }\n}\n// Debounced background reauth: when the client's current token no longer\n// matches the connection's authenticated identity (token rotation), refresh the\n// socket auth ONCE rather than degrading every subsequent send.\nconst reauthInFlight = new WeakSet();\nasync function maybeReauthRoomConnection(connection, isServer) {\n try {\n if (reauthInFlight.has(connection))\n return;\n reauthInFlight.add(connection);\n try {\n await reconnectWithNewAuthV2();\n }\n finally {\n reauthInFlight.delete(connection);\n }\n }\n catch (_a) {\n // Best-effort: the next send retries; the server still enforces auth.\n }\n}\n/** True when an OPEN room socket exists for this room path. */\nexport function hasOpenRoomConnection(appId, roomRoutePath) {\n const roomKey = roomKeyFromRoutePath(roomRoutePath);\n const connKey = roomKey ? `${appId}#room#${roomKey}` : appId;\n const connection = connections.get(connKey);\n return !!(connection && connection.ws && connection.ws.readyState === WS_READY_STATE_OPEN);\n}\n/**\n * Send a live-room intent over the EXISTING per-room socket and AWAIT the server\n * ack — so a policy/auth denial (401/403/404/503) REJECTS instead of being\n * silently dropped (the fire-and-forget `wsIntent` discards request-less error\n * frames). Use for semantically important intents (join/ready/leave). Returns a\n * Promise that resolves on ack / rejects on error, or `undefined` if no live\n * socket exists yet (caller falls back to HTTP, which also surfaces errors).\n */\nexport async function wsIntentReliable(appId, roomRoutePath, intent, isServer) {\n const roomKey = roomKeyFromRoutePath(roomRoutePath);\n const connKey = roomKey ? `${appId}#room#${roomKey}` : appId;\n const connection = connections.get(connKey);\n if (!connection || !connection.ws || connection.ws.readyState !== WS_READY_STATE_OPEN || connection.isAuthenticating) {\n return undefined;\n }\n if (!(await canSendAuthenticatedLiveIntent(connection, isServer))) {\n return undefined;\n }\n const requestId = generateRequestId();\n return new Promise((resolve, reject) => {\n const timer = setTimeout(() => {\n connection.pendingRequests.delete(requestId);\n reject(new Error(`Live intent ack timed out after ${WS_REQUEST_TIMEOUT_MS}ms`));\n }, WS_REQUEST_TIMEOUT_MS);\n connection.pendingRequests.set(requestId, {\n resolve: (data) => resolve((data !== null && data !== void 0 ? data : { ok: true })),\n reject,\n timer,\n });\n try {\n connection.ws.send(JSON.stringify({ type: 'intent', requestId, intent }));\n }\n catch (e) {\n connection.pendingRequests.delete(requestId);\n clearTimeout(timer);\n reject(e);\n }\n });\n}\n","import { makeApiRequest } from '../utils/api';\nimport { getConfig, isBoundedNetwork, isBoundedNetworkConfig } from './config';\nimport { runNamedQueriesOverSocket } from './subscription-v2';\nimport { getIdToken } from '../utils/utils';\nimport { safeBtoa } from '../utils/core-platform';\n/**\n * Thrown when a user's wallet doesn't have enough SOL to cover the transaction.\n * Apps can catch this to trigger an onramp/funding flow.\n */\nexport class InsufficientBalanceError extends Error {\n constructor(address, balanceLamports, estimatedCostLamports, deficitLamports, deficitSol) {\n super(`Insufficient balance: wallet ${address} needs ~${deficitSol.toFixed(6)} SOL more to complete this transaction.`);\n this.name = 'InsufficientBalanceError';\n this.address = address;\n this.balanceLamports = balanceLamports;\n this.estimatedCostLamports = estimatedCostLamports;\n this.deficitLamports = deficitLamports;\n this.deficitSol = deficitSol;\n }\n}\nconst getCache = {};\nconst pendingRequests = {};\n// Default cache TTL (500ms = 0.5 seconds)\nconst GET_CACHE_TTL = 500; // Adjust this value as needed (in milliseconds)\nfunction getReadCacheEntry(cacheKey, principalValue) {\n var _a;\n return (_a = getCache[cacheKey]) === null || _a === void 0 ? void 0 : _a.find(entry => entry.principalValue === principalValue);\n}\nfunction setReadCacheEntry(cacheKey, principalValue, data, expiresAt) {\n var _a;\n const bucket = (_a = getCache[cacheKey]) !== null && _a !== void 0 ? _a : [];\n const reusableEntries = bucket.filter(entry => (entry.principalValue !== principalValue && entry.expiresAt >= Date.now()));\n reusableEntries.push({ data, expiresAt, principalValue });\n getCache[cacheKey] = reusableEntries;\n}\n// Last time we cleaned up the cache\nlet lastCacheCleanup = Date.now();\nlet uncacheableReadKeyCounter = 0;\n/**\n * Return the leaf document key (last path segment) for a document path.\n *\n * Bounded rows carry `_id` (and `pathId`) set to the FULL document path\n * (e.g. `\"rooms/r1/prompts/8rd49se3sg\"`). Apps that build a child path from a\n * row naturally want the bare doc key, not the whole path — using the full path\n * doubles it (`rooms/r1/prompts/rooms/r1/prompts/8rd.../votes/...`) → 403/404.\n * `docId` extracts that leaf key. Tolerates leading slashes and a trailing `*`.\n *\n * @example docId(\"rooms/r1/prompts/8rd49se3sg\") // \"8rd49se3sg\"\n */\nexport function docId(path) {\n if (typeof path !== 'string')\n return '';\n let p = path.startsWith('/') ? path.slice(1) : path;\n if (p.endsWith('*') && p.length > 1)\n p = p.slice(0, -1);\n if (p.endsWith('/'))\n p = p.slice(0, -1);\n const segments = p.split('/').filter(Boolean);\n return segments.length ? segments[segments.length - 1] : '';\n}\n/**\n * Additively attach a convenience bare `id` (the leaf doc key) to a returned row.\n *\n * Rows already carry `_id`/`pathId` = the full document path; this leaves those\n * untouched and adds `id` = the last path segment so `row.id` is the doc key apps\n * expect. No-ops for non-objects, arrays, and rows that already define `id`\n * (never clobber a user field named `id`). Source for the leaf is `_id` (falling\n * back to `pathId`/`relativePath`/`absolutePath`).\n */\nfunction withBareId(row) {\n var _a, _b, _c;\n if (!row || typeof row !== 'object' || Array.isArray(row))\n return row;\n const r = row;\n if ('id' in r)\n return row; // don't clobber an explicit user field\n const source = (_c = (_b = (_a = r._id) !== null && _a !== void 0 ? _a : r.pathId) !== null && _b !== void 0 ? _b : r.relativePath) !== null && _c !== void 0 ? _c : r.absolutePath;\n if (typeof source !== 'string' || source.length === 0)\n return row;\n const leaf = docId(source);\n if (!leaf)\n return row;\n return Object.assign(Object.assign({}, r), { id: leaf });\n}\n/**\n * Normalize a raw read response from the worker into the SDK's stable shape and\n * attach the bare `id` to every returned row (Bug 1 + Bug 2).\n *\n * - Single-document path: returns EXACTLY ONE shape — the resolved document, or\n * `null` if missing (Firebase/Mongo convention). Unwraps the ambiguous\n * `{ data, status }` envelope the worker sometimes emits for a single doc so a\n * single-doc `get` never sometimes-returns the doc and sometimes the envelope.\n * - Collection path: preserves the `{ data, nextCursor, ... }` envelope and maps\n * the bare `id` onto each row in `data`.\n */\nfunction normalizeReadResult(responseData, pathIsDocument) {\n if (pathIsDocument) {\n let doc = responseData;\n // Unwrap the single-doc envelope `{ data, status }` (Bug 2). A real document\n // never has the exact shape `{ data, status }` with nothing else meaningful,\n // so detect the envelope by `data` + numeric `status` AND the absence of a\n // top-level `_id` (a real stored doc always carries `_id`/`pathId` from the\n // worker; the envelope wrapper does not). This avoids unwrapping a genuine\n // document that merely happens to own `data`/`status` fields.\n if (doc && typeof doc === 'object' && !Array.isArray(doc) &&\n 'data' in doc && 'status' in doc && typeof doc.status === 'number' &&\n !('_id' in doc) && !('pathId' in doc)) {\n doc = doc.data;\n }\n if (doc === undefined || doc === null)\n return null;\n return withBareId(doc);\n }\n // Collection read. The worker body is `{ data: rows[], nextCursor?, status? }`.\n if (responseData && typeof responseData === 'object' && !Array.isArray(responseData) && Array.isArray(responseData.data)) {\n return Object.assign(Object.assign({}, responseData), { data: responseData.data.map((row) => withBareId(row)) });\n }\n // Some paths return a bare array of rows — map id onto each.\n if (Array.isArray(responseData)) {\n return responseData.map((row) => withBareId(row));\n }\n return responseData;\n}\nfunction hashForKey(value) {\n let h = 5381;\n for (let i = 0; i < value.length; i++) {\n h = ((h << 5) + h + value.charCodeAt(i)) & 0x7fffffff;\n }\n return h.toString(36);\n}\n// Memoize the compact principal hash per exact credential string. Every read\n// hashed the entire (~1KB) bearer/idToken on every call; a session presents\n// the same handful of credentials for its lifetime. Bounded size — a rotation\n// simply inserts the new token and stale entries fall off on clear.\nconst principalHashCache = new Map();\nfunction hashForKeyCached(value) {\n const hit = principalHashCache.get(value);\n if (hit !== undefined)\n return hit;\n const h = hashForKey(value);\n if (principalHashCache.size >= 50)\n principalHashCache.clear();\n principalHashCache.set(value, h);\n return h;\n}\n// #022: HTTP header names are case-insensitive on the wire, so recognize `authorization`\n// in ANY casing when deriving the per-user cache key. Otherwise a caller-supplied\n// `AUTHORIZATION: <token B>` rides into the request while the cache key is computed from\n// the ambient token A - filing B's data under A's identity. The cache key must always be\n// derived from the same credential the request authenticates with.\nfunction authHeaderEntry(headers) {\n if (!headers)\n return undefined;\n for (const name of Object.keys(headers)) {\n if (name.toLowerCase() === 'authorization')\n return headers[name];\n }\n return undefined;\n}\nfunction hasAuthHeader(headers) {\n return authHeaderEntry(headers) !== undefined;\n}\nfunction authValueFromHeaders(headers) {\n return authHeaderEntry(headers) || '';\n}\nfunction principalFromAuthValue(authValue) {\n return authValue ? `h${hashForKeyCached(authValue)}` : null;\n}\nfunction principalFromIdToken(idToken) {\n return idToken ? `t${hashForKeyCached(idToken)}` : null;\n}\nfunction uncacheableReadKey(appId, scope) {\n uncacheableReadKeyCounter += 1;\n return `${appId}:${scope}-uncacheable-${uncacheableReadKeyCounter}`;\n}\n/**\n * SECURITY (H1): Read caches must be keyed by the caller's principal, not just\n * by path/filter/shape. In a shared process / SSR worker / browser login-switch,\n * keying by path alone lets User B receive User A's cached private read before\n * any server read rule runs. This returns `appId:<principal>` for the opaque\n * auth material a given read will actually authenticate with. No-auth reads are\n * deliberately marked uncacheable instead of sharing an implicit `anon` bucket.\n * JWTs are intentionally treated as opaque unverified bearer material — never\n * decoded claims and never caller identity hints such as `_walletAddress`.\n */\nasync function getReadPrincipalKey(overrides) {\n var _a;\n const config = (_a = overrides === null || overrides === void 0 ? void 0 : overrides._config) !== null && _a !== void 0 ? _a : await getConfig();\n const appId = config.appId || '';\n // A scoped read-only instance sends no auth and must never consult the ambient\n // global session for a principal - its reads are always uncacheable (no\n // per-user cache reuse, but also no cross-app/cross-user leak).\n if (overrides === null || overrides === void 0 ? void 0 : overrides._readOnly) {\n return { key: uncacheableReadKey(appId, 'ro'), cacheable: false, principalValue: null };\n }\n // makeApiRequest applies overrides.headers AFTER its computed auth header, so\n // caller-supplied Authorization is the real request auth when present.\n if (hasAuthHeader(overrides === null || overrides === void 0 ? void 0 : overrides.headers)) {\n const authValue = authValueFromHeaders(overrides === null || overrides === void 0 ? void 0 : overrides.headers);\n const principal = principalFromAuthValue(authValue);\n return principal\n ? { key: `${appId}:${principal}`, cacheable: true, principalValue: authValue }\n : { key: uncacheableReadKey(appId, 'h'), cacheable: false, principalValue: null };\n }\n // Per-request auth-header override (wallet client). Key by the exact opaque\n // header it produces, not decoded claims or the unverified _walletAddress hint.\n if (overrides === null || overrides === void 0 ? void 0 : overrides._getAuthHeaders) {\n try {\n const headers = await overrides._getAuthHeaders();\n const authValue = authValueFromHeaders(headers);\n const principal = principalFromAuthValue(authValue);\n return principal\n ? { key: `${appId}:o${principal}`, cacheable: true, principalValue: authValue }\n : { key: uncacheableReadKey(appId, 'o'), cacheable: false, principalValue: null };\n }\n catch (_b) {\n // If we can't resolve the override identity, do not read/write cache.\n return { key: uncacheableReadKey(appId, 'o'), cacheable: false, principalValue: null };\n }\n }\n // Ambient session principal.\n const idToken = await getIdToken(config.isServer);\n const principal = principalFromIdToken(idToken);\n return principal\n ? { key: `${appId}:${principal}`, cacheable: true, principalValue: idToken !== null && idToken !== void 0 ? idToken : null }\n : { key: uncacheableReadKey(appId, 'a'), cacheable: false, principalValue: null };\n}\n/**\n * Validates that a field name is a safe identifier (alphanumeric, underscores, dots for nested paths).\n * Prevents prompt injection via crafted field names.\n */\nfunction validateFieldName(field) {\n if (!/^[a-zA-Z0-9_.]+$/.test(field)) {\n throw new Error(`Invalid field name \"${field}\". Field names must only contain letters, numbers, underscores, and dots.`);\n }\n}\n/**\n * Parses a raw aggregation result (e.g. [{ count: 42 }] or [{ _id: null, total: 100 }])\n * into a single numeric value.\n */\nfunction parseAggregateValue(result) {\n if (typeof result === 'number')\n return result;\n if (Array.isArray(result)) {\n if (result.length === 0)\n return 0;\n // Multiple elements — not a collapsed aggregate result\n if (result.length > 1) {\n throw new Error(`Unexpected aggregate result: got array with ${result.length} elements. The AI may have returned full documents instead of an aggregation.`);\n }\n const first = result[0];\n if (typeof first === 'number')\n return first;\n if (first && typeof first === 'object') {\n // $count stage returns { count: N }\n if (typeof first.count === 'number')\n return first.count;\n // $group stage returns { _id: null, result: N } — expect _id + one numeric field\n const numericEntries = Object.entries(first).filter(([key, val]) => key !== '_id' && typeof val === 'number');\n if (numericEntries.length === 1)\n return numericEntries[0][1];\n }\n // Avoid leaking document contents into error messages\n const shape = first && typeof first === 'object' ? `{${Object.keys(first).join(', ')}}` : String(first);\n throw new Error(`Unexpected aggregate result shape: ${shape}. Expected {count: N} or {_id: null, <field>: N}.`);\n }\n if (result && typeof result === 'object' && typeof result.count === 'number') {\n return result.count;\n }\n throw new Error(`Unexpected aggregate result type: ${typeof result}. Expected a number, array, or object with a count field.`);\n}\n/**\n * Count items in a collection path. Returns a numeric result.\n *\n * This uses the AI query engine with a count-specific prompt prefix,\n * so Bounded will generate a $count aggregation pipeline and return\n * just the count rather than full documents.\n *\n * IMPORTANT: This only works for collections where the read policy is \"true\".\n * If the read policy requires per-document checks, the server will return\n * an error because aggregate counts cannot be performed without pulling all\n * documents for access control evaluation.\n *\n * @param path - Collection path (e.g., \"posts\", \"users/abc/comments\")\n * @param opts - Optional filter prompt and overrides\n * @returns AggregateResult with the count value\n */\n/** Whether these opts target a Bounded network - honoring a scoped instance's\n * own config (`_overrides._config`) rather than the module global. */\nfunction optsTargetBounded(overrides) {\n return (overrides === null || overrides === void 0 ? void 0 : overrides._config) ? isBoundedNetworkConfig(overrides._config) : isBoundedNetwork();\n}\nexport async function count(path, opts = {}) {\n var _a, _b;\n // On Bounded, the worker has no AI query engine — a prompt-based count returns\n // the raw documents, not an aggregation. Use the deterministic server\n // aggregation (queryAggregate) instead.\n if (optsTargetBounded(opts._overrides)) {\n const rows = await queryAggregate(path, { count: true }, { filter: opts.filter, _overrides: opts._overrides });\n return { value: (_b = (_a = rows[0]) === null || _a === void 0 ? void 0 : _a.count) !== null && _b !== void 0 ? _b : 0 };\n }\n const prefix = 'Return ONLY the total count of matching documents. Use the $count stage to produce a field named \"count\". Do NOT return the documents themselves.';\n const fullPrompt = opts.prompt\n ? `${prefix} Filter: ${opts.prompt}`\n : prefix;\n const result = await get(path, { prompt: fullPrompt, bypassCache: true, _overrides: opts._overrides });\n return { value: parseAggregateValue(result) };\n}\n/**\n * Bounded-native implementation of `aggregate`: map the single-scalar operation\n * onto the deterministic `queryAggregate` server aggregation and pull the value\n * out of the (single, ungrouped) result row. Empty collection → 0.\n */\nasync function boundedAggregate(path, operation, opts) {\n var _a, _b, _c;\n const qopts = { filter: opts.filter, _overrides: opts._overrides };\n if (operation === 'count') {\n const rows = await queryAggregate(path, { count: true }, qopts);\n return (_b = (_a = rows[0]) === null || _a === void 0 ? void 0 : _a.count) !== null && _b !== void 0 ? _b : 0;\n }\n if (!opts.field)\n throw new Error(`aggregate \"${operation}\" requires a field option`);\n validateFieldName(opts.field);\n if (operation === 'uniqueCount') {\n // distinct values = number of groups when grouping by the field.\n const rows = await queryAggregate(path, { groupBy: [opts.field] }, qopts);\n return rows.length;\n }\n // sum / avg / min / max → one bucket keyed by the field on the single row.\n const rows = await queryAggregate(path, { [operation]: [opts.field] }, qopts);\n const bucket = (_c = rows[0]) === null || _c === void 0 ? void 0 : _c[operation];\n const v = bucket === null || bucket === void 0 ? void 0 : bucket[opts.field];\n return typeof v === 'number' ? v : 0;\n}\n/**\n * Run an aggregate operation on a collection path. Returns a numeric result.\n *\n * Supported operations:\n * - count: Total number of documents\n * - uniqueCount: Number of distinct values for a field\n * - sum: Sum of a numeric field\n * - avg: Average of a numeric field\n * - min: Minimum value of a numeric field\n * - max: Maximum value of a numeric field\n *\n * IMPORTANT: This only works for collections where the read policy is \"true\".\n * If the read policy requires per-document checks, the server will return\n * an error because aggregate operations cannot be performed without pulling\n * all documents for access control evaluation.\n *\n * @param path - Collection path (e.g., \"posts\", \"users/abc/comments\")\n * @param operation - The aggregate operation to perform\n * @param opts - Options including optional filter prompt and field name\n * @returns AggregateResult with the computed numeric value\n */\nexport async function aggregate(path, operation, opts = {}) {\n // On Bounded, route through the deterministic server aggregation — the legacy\n // AI-prompt path returns raw documents on the worker (no AI query engine).\n if (optsTargetBounded(opts._overrides)) {\n return { value: await boundedAggregate(path, operation, opts) };\n }\n let prefix;\n switch (operation) {\n case 'count':\n prefix = 'Return ONLY the total count of matching documents. Use the $count stage to produce a field named \"count\". Do NOT return the documents themselves.';\n break;\n case 'uniqueCount':\n if (!opts.field)\n throw new Error('aggregate \"uniqueCount\" requires a field option');\n validateFieldName(opts.field);\n prefix = `Return ONLY the count of unique/distinct values of the \"${opts.field}\" field. Use $group with _id set to \"$${opts.field}\" then $count to produce a field named \"count\". Do NOT return the documents themselves.`;\n break;\n case 'sum':\n if (!opts.field)\n throw new Error('aggregate \"sum\" requires a field option');\n validateFieldName(opts.field);\n prefix = `Return ONLY the sum of the \"${opts.field}\" field across all matching documents. Use $group with _id: null and result: { $sum: \"$${opts.field}\" }. Do NOT return the documents themselves.`;\n break;\n case 'avg':\n if (!opts.field)\n throw new Error('aggregate \"avg\" requires a field option');\n validateFieldName(opts.field);\n prefix = `Return ONLY the average of the \"${opts.field}\" field across all matching documents. Use $group with _id: null and result: { $avg: \"$${opts.field}\" }. Do NOT return the documents themselves.`;\n break;\n case 'min':\n if (!opts.field)\n throw new Error('aggregate \"min\" requires a field option');\n validateFieldName(opts.field);\n prefix = `Return ONLY the minimum value of the \"${opts.field}\" field across all matching documents. Use $group with _id: null and result: { $min: \"$${opts.field}\" }. Do NOT return the documents themselves.`;\n break;\n case 'max':\n if (!opts.field)\n throw new Error('aggregate \"max\" requires a field option');\n validateFieldName(opts.field);\n prefix = `Return ONLY the maximum value of the \"${opts.field}\" field across all matching documents. Use $group with _id: null and result: { $max: \"$${opts.field}\" }. Do NOT return the documents themselves.`;\n break;\n default:\n throw new Error(`Unsupported aggregate operation: ${operation}`);\n }\n const fullPrompt = opts.prompt\n ? `${prefix} Filter: ${opts.prompt}`\n : prefix;\n const result = await get(path, { prompt: fullPrompt, bypassCache: true, _overrides: opts._overrides });\n // For uniqueCount, the AI may return $group results without the final $count\n // stage, producing [{_id: \"val1\"}, {_id: \"val2\"}, ...]. Verify elements look\n // like $group output (only _id key) before using array length as the count.\n if (operation === 'uniqueCount' && Array.isArray(result) && result.length > 1) {\n const looksLikeGroupOutput = result.every((el) => el && typeof el === 'object' && Object.keys(el).length === 1 && '_id' in el);\n if (looksLikeGroupOutput) {\n return { value: result.length };\n }\n throw new Error(`Unexpected uniqueCount result: got ${result.length} elements that don't match $group output shape.`);\n }\n return { value: parseAggregateValue(result) };\n}\n/**\n * Structured, grouped aggregation over a collection. Returns one row per group\n * (or a single row when `spec.groupBy` is omitted). Read rules are enforced — the\n * aggregation only sees documents the caller can read.\n *\n * ```ts\n * const byCat = await queryAggregate(\"spend\", { groupBy: [\"category\"], count: true, sum: [\"amount\"] });\n * // [{ group: { category: \"food\" }, count: 2, sum: { amount: 70 } }, ...]\n * ```\n */\nexport async function queryAggregate(path, spec, opts = {}) {\n var _a, _b, _c, _d, _e;\n let normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n if (normalizedPath.endsWith(\"*\") && normalizedPath.length > 1) {\n normalizedPath = normalizedPath.slice(0, -1);\n }\n if (!normalizedPath || normalizedPath.length === 0) {\n throw new Error(\"Invalid path provided.\");\n }\n // Validate every referenced field name to prevent injection via crafted keys.\n // Each of these takes an ARRAY of field names — catch the common mistake of\n // passing an object/string (e.g. `sum: { field: \"n\" }`) with a clear error\n // instead of a cryptic \"list is not iterable\" from the for-of below.\n for (const key of ['groupBy', 'sum', 'avg', 'min', 'max']) {\n const list = spec[key];\n if (list == null)\n continue;\n if (!Array.isArray(list)) {\n throw new Error(`queryAggregate: spec.${key} must be an array of field names ` +\n `(e.g. ${key}: [\"amount\"]), got ${typeof list}`);\n }\n for (const f of list)\n validateFieldName(f);\n }\n const cleanSpec = {};\n if ((_a = spec.groupBy) === null || _a === void 0 ? void 0 : _a.length)\n cleanSpec.groupBy = spec.groupBy;\n if (spec.count)\n cleanSpec.count = true;\n if ((_b = spec.sum) === null || _b === void 0 ? void 0 : _b.length)\n cleanSpec.sum = spec.sum;\n if ((_c = spec.avg) === null || _c === void 0 ? void 0 : _c.length)\n cleanSpec.avg = spec.avg;\n if ((_d = spec.min) === null || _d === void 0 ? void 0 : _d.length)\n cleanSpec.min = spec.min;\n if ((_e = spec.max) === null || _e === void 0 ? void 0 : _e.length)\n cleanSpec.max = spec.max;\n const aggParam = `&aggregate=${encodeURIComponent(JSON.stringify(cleanSpec))}`;\n const filterParam = opts.filter ? `&filter=${encodeURIComponent(JSON.stringify(opts.filter))}` : '';\n const apiPath = `items?path=${encodeURIComponent(normalizedPath)}${aggParam}${filterParam}`;\n const response = await makeApiRequest('GET', apiPath, null, opts._overrides);\n const body = response.data;\n // Worker returns { data: AggregateRow[], nextCursor, status } for aggregate queries.\n if (Array.isArray(body))\n return body;\n if (body && Array.isArray(body.data))\n return body.data;\n return [];\n}\n/**\n * Full-text search a collection declared with `search: { fields: [...] }`.\n *\n * The match runs over the collection's indexed fields (or the subset passed in\n * `opts.fields`) and respects each document's `read` rule — results the caller\n * cannot read are omitted. Returns the matching documents (optionally paged via\n * `opts.limit`/`opts.cursor`).\n *\n * @param path Collection path, e.g. \"orgs/o1/docs\"\n * @param query Free-text query string (non-empty)\n */\nexport async function search(path, query, opts = {}) {\n let normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n if (normalizedPath.endsWith(\"*\") && normalizedPath.length > 1) {\n normalizedPath = normalizedPath.slice(0, -1);\n }\n if (!normalizedPath || normalizedPath.length === 0) {\n throw new Error(\"Invalid path provided.\");\n }\n if (typeof query !== \"string\" || query.trim().length === 0) {\n throw new Error(\"search query must be a non-empty string\");\n }\n if (opts.fields) {\n for (const f of opts.fields)\n validateFieldName(f);\n }\n const spec = { query };\n if (opts.fields && opts.fields.length > 0)\n spec.fields = opts.fields;\n const searchParam = `&search=${encodeURIComponent(JSON.stringify(spec))}`;\n const limitParam = opts.limit !== undefined ? `&limit=${opts.limit}` : '';\n const cursorParam = opts.cursor ? `&cursor=${encodeURIComponent(opts.cursor)}` : '';\n const apiPath = `items?path=${encodeURIComponent(normalizedPath)}${searchParam}${limitParam}${cursorParam}`;\n const response = await makeApiRequest('GET', apiPath, null, opts._overrides);\n return response.data;\n}\nexport async function get(path, opts = {}) {\n var _a, _b, _c;\n try {\n let normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n // Remove last '*' if it exists in the path\n if (normalizedPath.endsWith(\"*\") && normalizedPath.length > 1) {\n normalizedPath = normalizedPath.slice(0, -1);\n }\n if (!normalizedPath || normalizedPath.length === 0) {\n throw new Error(\"Invalid path provided.\");\n }\n // Create cache key combining path, prompt, filter, sort, includeSubPaths,\n // shape, limit, cursor — and (H1) the caller's appId + compact principal\n // bucket. Exact opaque credential equality is checked inside that bucket,\n // so a private read cached for one user is never served to another in a\n // shared process / SSR worker / browser login-switch. The cache is opt-in\n // and disabled for no-auth reads, which get an uncacheable unique key.\n const shapeKey = opts.shape ? JSON.stringify(opts.shape) : '';\n const includeSubPathsKey = opts.includeSubPaths ? ':subpaths' : '';\n const limitKey = opts.limit !== undefined ? `:l${opts.limit}` : '';\n const cursorKey = opts.cursor ? `:c${hashForKey(opts.cursor)}` : '';\n const filterKey = opts.filter ? `:f${hashForKey(JSON.stringify(opts.filter))}` : '';\n const sortKey = opts.sort ? `:s${hashForKey(JSON.stringify(opts.sort))}` : '';\n const principalKey = await getReadPrincipalKey(opts._overrides);\n const cacheKey = `${principalKey.key}|${normalizedPath}:${opts.prompt || ''}${filterKey}${sortKey}${includeSubPathsKey}:${shapeKey}${limitKey}${cursorKey}`;\n const cacheEnabled = opts.cache === true && !opts.bypassCache && principalKey.cacheable;\n const now = Date.now();\n // Check for valid cache entry when the caller explicitly opted in.\n const cachedEntry = getReadCacheEntry(cacheKey, principalKey.principalValue);\n if (cacheEnabled &&\n cachedEntry &&\n now < cachedEntry.expiresAt) {\n return cachedEntry.data;\n }\n // If we're bypassing cache, we should still coalesce identical requests\n // but need a different key to avoid interfering with regular requests.\n // Abortable calls are deliberately never coalesced: sharing one Axios\n // promise would let an old route's AbortSignal cancel a newer consumer of\n // the same path, or make the newer consumer inherit the old cancellation.\n const requestKey = opts.bypassCache ? `bypass:${cacheKey}` : cacheKey;\n const shouldCoalesce = !((_a = opts._overrides) === null || _a === void 0 ? void 0 : _a.signal);\n // The compact principal hash is only an index bucket. Coalesce only when\n // the exact opaque credential also matches, so collisions stay isolated.\n const existingPending = shouldCoalesce\n ? (_b = pendingRequests[requestKey]) === null || _b === void 0 ? void 0 : _b.find(entry => entry.principalValue === principalKey.principalValue)\n : undefined;\n if (existingPending) {\n return existingPending.promise;\n }\n // Create a new request promise and store it\n let requestPromise;\n requestPromise = (async () => {\n var _a;\n try {\n const pathIsDocument = normalizedPath.split(\"/\").length % 2 === 0;\n // Cache miss or bypass - proceed with HTTP API request\n let response;\n // Build common query params\n const includeSubPathsParam = opts.includeSubPaths ? '&includeSubPaths=true' : '';\n const shapeParam = opts.shape ? `&shape=${encodeURIComponent(JSON.stringify(opts.shape))}` : '';\n const limitParam = opts.limit !== undefined ? `&limit=${opts.limit}` : '';\n const cursorParam = opts.cursor ? `&cursor=${encodeURIComponent(opts.cursor)}` : '';\n const filterParam = opts.filter ? `&filter=${encodeURIComponent(JSON.stringify(opts.filter))}` : '';\n const sortParam = opts.sort ? `&sort=${encodeURIComponent(JSON.stringify(opts.sort))}` : '';\n if (pathIsDocument) {\n const itemId = encodeURIComponent(normalizedPath);\n const queryParams = [includeSubPathsParam, shapeParam].filter(p => p).join('');\n const apiPath = queryParams ? `items/${itemId}?${queryParams.substring(1)}` : `items/${itemId}`;\n response = await makeApiRequest('GET', apiPath, null, opts._overrides);\n }\n else {\n const path = encodeURIComponent(normalizedPath);\n // encodeURIComponent the base64: safeBtoa emits standard base64 (with '+' '/' '='),\n // and a raw '+' in a query string decodes to a space on the server\n // (url.searchParams.get), corrupting the exact non-ASCII prompts DS2-0463 fixed. The\n // server percent-decodes back to the original base64 before decodeUtf8Base64. (DS2-0463)\n const promptQueryParam = (opts === null || opts === void 0 ? void 0 : opts.prompt) ? `&prompt=${encodeURIComponent(safeBtoa(opts.prompt))}` : \"\";\n const apiPath = `items?path=${path}${promptQueryParam}${filterParam}${sortParam}${includeSubPathsParam}${shapeParam}${limitParam}${cursorParam}`;\n response = await makeApiRequest('GET', apiPath, null, opts._overrides);\n }\n // Normalize the worker's raw body into the SDK's stable shape:\n // - single-doc path → the resolved document or null (Bug 2), and\n // - collection path → `{ data, nextCursor }` preserved,\n // with the bare `id` (leaf doc key) attached to every returned row (Bug 1).\n const responseData = normalizeReadResult(response.data, pathIsDocument);\n // Cache the response only when explicitly requested and principal-bound.\n if (cacheEnabled) {\n setReadCacheEntry(cacheKey, principalKey.principalValue, responseData, now + GET_CACHE_TTL);\n // Periodically clean up expired cache entries (every 5 seconds)\n if (now - lastCacheCleanup > 5000) {\n cleanupExpiredCache();\n lastCacheCleanup = now;\n }\n }\n // Return the data from the response\n return responseData;\n }\n finally {\n // Remove only this exact request. A colliding principal can legitimately\n // have another request in the same compact-hash bucket.\n if (shouldCoalesce) {\n const bucket = pendingRequests[requestKey];\n const index = (_a = bucket === null || bucket === void 0 ? void 0 : bucket.findIndex(entry => entry.promise === requestPromise)) !== null && _a !== void 0 ? _a : -1;\n if (index >= 0)\n bucket.splice(index, 1);\n if ((bucket === null || bucket === void 0 ? void 0 : bucket.length) === 0)\n delete pendingRequests[requestKey];\n }\n }\n })();\n // Store the promise so only callers with the exact same credential join it.\n if (shouldCoalesce) {\n ((_c = pendingRequests[requestKey]) !== null && _c !== void 0 ? _c : (pendingRequests[requestKey] = [])).push({\n principalValue: principalKey.principalValue,\n promise: requestPromise,\n });\n }\n // Return the promise\n return requestPromise;\n }\n catch (error) {\n throw error;\n }\n}\n// Helper to clean up expired cache entries\nfunction cleanupExpiredCache() {\n const now = Date.now();\n Object.keys(getCache).forEach(key => {\n var _a, _b;\n const activeEntries = (_b = (_a = getCache[key]) === null || _a === void 0 ? void 0 : _a.filter(entry => entry.expiresAt >= now)) !== null && _b !== void 0 ? _b : [];\n if (activeEntries.length > 0)\n getCache[key] = activeEntries;\n else\n delete getCache[key];\n });\n lastCacheCleanup = now;\n}\nfunction classifyGetManyBatchError(error) {\n var _a, _b, _c;\n const err = error;\n const status = (_b = (_a = err === null || err === void 0 ? void 0 : err.status) !== null && _a !== void 0 ? _a : err === null || err === void 0 ? void 0 : err.statusCode) !== null && _b !== void 0 ? _b : (_c = err === null || err === void 0 ? void 0 : err.response) === null || _c === void 0 ? void 0 : _c.status;\n const message = error instanceof Error\n ? error.message\n : typeof (err === null || err === void 0 ? void 0 : err.message) === 'string'\n ? err.message\n : 'Unknown error';\n if (status === 401 || status === 403) {\n return { code: 'UNAUTHORIZED', message };\n }\n if (status === 400) {\n return { code: 'INVALID_PATH', message };\n }\n return { code: 'REQUEST_FAILED', message };\n}\nexport async function getMany(paths, opts = {}) {\n var _a, _b, _c, _d, _e;\n if (paths.length === 0) {\n return [];\n }\n if (paths.length > 30) {\n throw new Error('Cannot fetch more than 30 documents at once');\n }\n const normalizedPaths = [];\n for (const path of paths) {\n let normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n if (normalizedPath.endsWith(\"*\") && normalizedPath.length > 1) {\n normalizedPath = normalizedPath.slice(0, -1);\n }\n if (!normalizedPath || normalizedPath.length === 0) {\n throw new Error(`Invalid path provided: ${path}`);\n }\n const pathIsDocument = normalizedPath.split(\"/\").length % 2 === 0;\n if (!pathIsDocument) {\n throw new Error(`Path must point to a document (even number of segments): ${path}`);\n }\n normalizedPaths.push(normalizedPath);\n }\n const now = Date.now();\n // H1: principal-scope getMany cache keys so one user's batch reads are never\n // served to another. Same `<appId:principal>|<path>:` shape used by get().\n const principalKey = await getReadPrincipalKey(opts._overrides);\n const cacheEnabled = opts.cache === true && !opts.bypassCache && principalKey.cacheable;\n const results = new Array(paths.length);\n const uncachedIndices = [];\n const uncachedPaths = [];\n for (let i = 0; i < normalizedPaths.length; i++) {\n const normalizedPath = normalizedPaths[i];\n const cacheKey = `${principalKey.key}|${normalizedPath}:`;\n const cachedEntry = getReadCacheEntry(cacheKey, principalKey.principalValue);\n if (cacheEnabled &&\n cachedEntry &&\n now < cachedEntry.expiresAt) {\n results[i] = { path: normalizedPath, data: cachedEntry.data };\n }\n else {\n uncachedIndices.push(i);\n uncachedPaths.push(normalizedPath);\n }\n }\n if (uncachedPaths.length > 0) {\n try {\n const response = await makeApiRequest('POST', 'items/batch', { paths: uncachedPaths }, opts._overrides);\n if (response.status === 404 && response.data == null) {\n const endpointError = new Error('Batch read endpoint returned 404');\n endpointError.status = 404;\n throw endpointError;\n }\n // makeApiRequest returns `{ data: <httpBody> }`, and the worker's items/batch\n // httpBody is `{ data: { results: [...] }, status }` — so the results are\n // double-nested at response.data.data.results. (Reading response.data.results\n // here is undefined → \"serverResults is not iterable\".) Tolerate both shapes.\n const serverResults = (_e = (_c = (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.results) !== null && _c !== void 0 ? _c : (_d = response.data) === null || _d === void 0 ? void 0 : _d.results) !== null && _e !== void 0 ? _e : [];\n const serverResultsMap = new Map();\n for (const result of serverResults) {\n serverResultsMap.set(result.path, result);\n }\n for (let i = 0; i < uncachedIndices.length; i++) {\n const originalIndex = uncachedIndices[i];\n const normalizedPath = uncachedPaths[i];\n const serverResult = serverResultsMap.get(normalizedPath);\n if (serverResult) {\n // getMany batches single-doc paths — attach the bare `id` (leaf doc\n // key) to each returned doc, additive (Bug 1), matching get().\n const normalizedResult = serverResult.error\n ? serverResult\n : Object.assign(Object.assign({}, serverResult), { data: withBareId(serverResult.data) });\n results[originalIndex] = normalizedResult;\n if (!normalizedResult.error && cacheEnabled) {\n const cacheKey = `${principalKey.key}|${normalizedPath}:`;\n setReadCacheEntry(cacheKey, principalKey.principalValue, normalizedResult.data, now + GET_CACHE_TTL);\n }\n }\n else {\n results[originalIndex] = {\n path: normalizedPath,\n data: null,\n error: { code: 'NOT_FOUND', message: `No result returned for path ${normalizedPath}` }\n };\n }\n }\n if (cacheEnabled && now - lastCacheCleanup > 5000) {\n cleanupExpiredCache();\n lastCacheCleanup = now;\n }\n }\n catch (error) {\n const batchError = classifyGetManyBatchError(error);\n for (const originalIndex of uncachedIndices) {\n results[originalIndex] = {\n path: normalizedPaths[originalIndex],\n data: null,\n error: batchError,\n };\n }\n }\n }\n return results;\n}\nconst MAX_RUN_QUERIES_PER_POST = 10;\nlet pendingRunQueries = [];\nlet runQueryFlushScheduled = false;\nfunction unwrapRunQueryRow(row, entry) {\n var _a;\n // The worker disambiguates a computed null from a failed/undeclared query\n // with a per-row `error` string, so surface it instead of returning undefined.\n if ((row === null || row === void 0 ? void 0 : row.error) != null) {\n const err = new Error(String(row.error));\n err.isQueryError = true;\n err.queryName = entry.queryName;\n err.path = entry.absolutePath;\n throw err;\n }\n return (_a = row === null || row === void 0 ? void 0 : row.result) !== null && _a !== void 0 ? _a : null;\n}\nfunction flushPendingRunQueries() {\n const pending = pendingRunQueries;\n pendingRunQueries = [];\n runQueryFlushScheduled = false;\n // Calls with any request overrides bypass this buffer, so every entry here\n // belongs to the same default-overrides identity bucket.\n for (let offset = 0; offset < pending.length; offset += MAX_RUN_QUERIES_PER_POST) {\n const chunk = pending.slice(offset, offset + MAX_RUN_QUERIES_PER_POST);\n void runQueryManyRows(chunk.map(({ entry }) => entry)).then((rows) => {\n chunk.forEach((caller, index) => {\n try {\n caller.resolve(unwrapRunQueryRow(rows[index], caller.entry));\n }\n catch (error) {\n caller.reject(error);\n }\n });\n }, (error) => {\n chunk.forEach(({ reject }) => reject(error));\n });\n }\n}\nexport async function runQuery(absolutePath, queryName, queryArgs, opts) {\n const entry = { absolutePath, queryName, queryArgs };\n // Auth, custom headers, timeout, and signal overrides must remain local to\n // one request, so any override-bearing call deliberately bypasses coalescing.\n if ((opts === null || opts === void 0 ? void 0 : opts._overrides) != null) {\n const rows = await runQueryManyRows([entry], opts);\n return unwrapRunQueryRow(rows[0], entry);\n }\n return new Promise((resolve, reject) => {\n pendingRunQueries.push({ entry, resolve, reject });\n if (!runQueryFlushScheduled) {\n runQueryFlushScheduled = true;\n queueMicrotask(flushPendingRunQueries);\n }\n });\n}\nexport async function runQueryMany(many, opts) {\n // Batch shape stays an array of result values (errored rows map to null) so\n // existing callers keep working; use runQuery for per-row error surfacing.\n const rows = await runQueryManyRows(many, opts);\n return rows.map((row) => { var _a; return (_a = row === null || row === void 0 ? void 0 : row.result) !== null && _a !== void 0 ? _a : null; });\n}\nasync function runQueryManyRows(many, opts) {\n var _a, _b, _c, _d;\n try {\n let queries = [];\n for (const { absolutePath, queryName, queryArgs } of many) {\n const normalizedPath = absolutePath.startsWith(\"/\") ? absolutePath.slice(1) : absolutePath;\n const pathIsDocument = normalizedPath.split(\"/\").length % 2 === 0;\n if (!pathIsDocument) {\n throw new Error(`Invalid path provided make sure it is pointing to a document: ${absolutePath}`);\n }\n queries.push({ path: normalizedPath, queryName, queryArgs });\n }\n // v2 socket-when-warm transport: when a warm, identity-matched app socket\n // already exists and the server advertised the runQuery capability, run this\n // batch over the socket instead of a fresh HTTP POST. Default-identity calls\n // only - per-request overrides (a distinct identity) always use HTTP. Any\n // miss/failure returns null and falls through to the identical HTTP call below,\n // so the result is byte-identical either way. Never opens a socket just to query.\n if ((opts === null || opts === void 0 ? void 0 : opts._overrides) == null) {\n const cfg = await getConfig();\n const socketRows = await runNamedQueriesOverSocket(cfg.appId, queries, cfg.isServer).catch(() => null);\n if (socketRows != null) {\n return socketRows;\n }\n }\n const response = await makeApiRequest('POST', 'queries', { queries }, opts === null || opts === void 0 ? void 0 : opts._overrides);\n // makeApiRequest returns `{ data: <httpBody> }`, and the worker's httpBody\n // is `{ data: { queries: [...] }, status }` — so the rows are double-nested\n // at response.data.data.queries. (Reading response.data.queries here is\n // undefined → \"Cannot read properties of undefined\".) Tolerate both shapes,\n // same as getMany does for items/batch.\n const rows = (_c = (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.queries) !== null && _c !== void 0 ? _c : (_d = response.data) === null || _d === void 0 ? void 0 : _d.queries;\n if (!Array.isArray(rows)) {\n throw new Error(`queries endpoint returned an unexpected response shape (status ${response.status})`);\n }\n return rows;\n }\n catch (error) {\n throw error;\n }\n}\n// NEW: Ad-hoc expression execution - first-class feature\nexport async function runExpression(expression, queryArgs, options) {\n const results = await runExpressionMany([Object.assign({ expression, queryArgs }, options)]);\n return results[0];\n}\nexport async function runExpressionMany(many) {\n var _a, _b, _c, _d;\n try {\n let queries = [];\n let firstCredential = undefined;\n let credentialSeen = false;\n for (const { expression, queryArgs, returnType, _overrides } of many) {\n // All batched queries ride ONE request, so they must run under ONE credential.\n // \"Ambient\" (no _overrides = the logged-in user) is a DISTINCT credential, not\n // a wildcard any override may satisfy: capture the FIRST entry's credential\n // state (including undefined/ambient) and reject any later entry whose\n // credential differs. Silently running the whole batch under the first\n // override found would evaluate a query meant for user B - or an ambient\n // end-user row under its restrictive policy - as whoever supplied an override\n // (e.g. an admin), a cross-principal authorization confusion the caller can't\n // detect (#103, DS2-0085). Split the batch by credential to run under\n // different identities.\n if (!credentialSeen) {\n firstCredential = _overrides;\n credentialSeen = true;\n }\n else if (_overrides !== firstCredential) {\n throw new Error(\"[bounded-sdk] runExpressionMany: batched queries carry different _overrides; all queries in one batch share a single request and credential. Split the batch so each request uses one credential.\");\n }\n queries.push({ queryArgs, expression, returnType });\n }\n const response = await makeApiRequest('POST', 'queries', { queries }, firstCredential);\n // Same double-nesting as runQueryMany: the worker's httpBody is\n // { data: { queries: [...] }, status } under makeApiRequest's own\n // { data: <httpBody> } wrapper. Tolerate both shapes.\n const rows = (_c = (_b = (_a = response.data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.queries) !== null && _c !== void 0 ? _c : (_d = response.data) === null || _d === void 0 ? void 0 : _d.queries;\n if (!Array.isArray(rows)) {\n throw new Error(`queries endpoint returned an unexpected response shape (status ${response.status})`);\n }\n // Map results - trace is automatically included by server for non-mainnet networks\n return rows.map((queryResult) => {\n const result = { result: queryResult.result };\n // Include trace if present (server includes it for non-mainnet networks)\n if (queryResult.trace) {\n result.trace = queryResult.trace;\n }\n // Pass through the server's per-row failure so callers can distinguish\n // a computed null from a failed row.\n if (queryResult.error != null) {\n result.error = String(queryResult.error);\n }\n return result;\n });\n }\n catch (error) {\n throw error;\n }\n}\n/* ===================== WRITE RECEIPT HELPERS (W4) ======================== */\n/**\n * Settle delay before the best-effort mirror read on an on-chain write. It is\n * an optimization, not a correctness guarantee: the receipt is captured first\n * and returned regardless of what the mirror read reports.\n */\nconst MIRROR_SYNC_SETTLE_MS = 1500;\nconst SOLANA_CHAIN_TAGS = new Set(['solana_devnet', 'solana_mainnet']);\n/**\n * Read the execution-lane tag the WORKER reported. The SDK never infers it: a\n * batch touching only unflagged collections in a `realtime_devnet` app commits\n * offchain, so the app's protocol is not the lane. Several field names are\n * accepted (batch-level receipt first, then the per-transaction Solana\n * `network` tag that predates it), but no value is ever manufactured.\n */\nfunction readWorkerChainTag(...sources) {\n for (const source of sources) {\n if (!source || typeof source !== 'object')\n continue;\n for (const key of ['chain', 'executionChain', 'network']) {\n const value = source[key];\n if (typeof value === 'string' && value.trim().length > 0)\n return value.trim();\n }\n }\n return null;\n}\n/** Path-keyed echo of what the caller asked for. NEVER authoritative state. */\nfunction buildRequestedDocuments(documents) {\n return documents.map(entry => {\n var _a;\n return ({\n path: entry.destinationPath,\n document: ((_a = entry.document) !== null && _a !== void 0 ? _a : null),\n });\n });\n}\n/** Look a concrete path up in a path-keyed map, tolerating a leading slash. */\nfunction pickPathDocument(source, path) {\n if (Object.prototype.hasOwnProperty.call(source, path))\n return source[path];\n const withSlash = path.startsWith('/') ? path : `/${path}`;\n if (Object.prototype.hasOwnProperty.call(source, withSlash))\n return source[withSlash];\n const withoutSlash = path.startsWith('/') ? path.slice(1) : path;\n if (Object.prototype.hasOwnProperty.call(source, withoutSlash))\n return source[withoutSlash];\n return undefined;\n}\n/**\n * `observed: true` only when EVERY requested concrete path was read back as a\n * real document. The sync endpoint answers `null` for a document that is\n * absent, lagging, or read-denied, and a deleted path reads back as `null` too\n * — none of those are evidence of synchronization.\n */\nfunction validatePathKeyedDocuments(paths, source) {\n if (!source || typeof source !== 'object' || Array.isArray(source)) {\n return { observed: false, reason: 'the synchronization response was not a path-keyed document map' };\n }\n const map = source;\n const documents = [];\n const unobserved = [];\n for (const path of paths) {\n const document = pickPathDocument(map, path);\n if (document == null || typeof document !== 'object' || Array.isArray(document)) {\n unobserved.push(path);\n documents.push({ path, document: null });\n continue;\n }\n documents.push({ path, document: document });\n }\n if (unobserved.length > 0) {\n return {\n observed: false,\n reason: `no readable document was returned for ${unobserved.join(', ')} ` +\n '(absent, deleted, lagging, read-denied, or a passthrough write)',\n };\n }\n return { observed: true, documents };\n}\n/**\n * Best-effort mirror read. A confirmed transaction must NEVER be lost to a\n * synchronization failure, so this reports its outcome in `mirrorSync` and\n * never rejects. It reads the CONCRETE destination paths, so a collection\n * insert with a generated id syncs the path that actually exists.\n */\nexport async function attemptMirrorSync(paths, options, settleMs = MIRROR_SYNC_SETTLE_MS) {\n try {\n if (settleMs > 0)\n await new Promise(resolve => setTimeout(resolve, settleMs));\n const synced = await syncItems(paths, options);\n // The sync endpoint answers `{ data: <path-keyed map>, status }`; a document\n // path always contains a `/`, so a top-level `data` key is never one.\n const map = (synced && typeof synced === 'object' && !Array.isArray(synced) && 'data' in synced)\n ? synced.data\n : synced;\n return validatePathKeyedDocuments(paths, map);\n }\n catch (error) {\n const message = typeof (error === null || error === void 0 ? void 0 : error.message) === 'string' ? error.message : String(error);\n return { observed: false, reason: `mirror synchronization failed: ${message}` };\n }\n}\nfunction normalizePathKey(path) {\n return path.startsWith('/') ? path.slice(1) : path;\n}\n/**\n * Post-hook observation for a DIRECT commit, taken from the worker's own batch\n * receipt. The worker is the only party that can read every concrete path back\n * AFTER hooks have run, so when it reports nothing we say so rather than\n * echoing the request as if it were server state.\n *\n * Unlike the mirror read, a `null` document here IS authoritative: the worker\n * read its own store, so a deleted path genuinely is absent. The worker's\n * `observed` verdict is still re-validated against the requested paths — a\n * receipt that skips one of them cannot be treated as complete.\n */\nfunction observationFromDirectCommit(paths, observation) {\n var _a;\n if (!observation || typeof observation !== 'object' || Array.isArray(observation)) {\n return { observed: false, reason: 'the write receipt carried no post-hook observation' };\n }\n const entries = Array.isArray(observation.documents) ? observation.documents : null;\n if (!entries) {\n return { observed: false, reason: 'the write receipt carried no path-keyed post-hook documents' };\n }\n const byPath = new Map();\n for (const entry of entries) {\n if (!entry || typeof entry.path !== 'string')\n continue;\n const document = entry.document;\n byPath.set(normalizePathKey(entry.path), (document && typeof document === 'object' && !Array.isArray(document))\n ? document\n : null);\n }\n const documents = [];\n const missing = [];\n for (const path of paths) {\n const key = normalizePathKey(path);\n if (!byPath.has(key)) {\n missing.push(path);\n documents.push({ path, document: null });\n continue;\n }\n documents.push({ path, document: (_a = byPath.get(key)) !== null && _a !== void 0 ? _a : null });\n }\n if (observation.observed !== true || missing.length > 0) {\n const unobserved = Array.isArray(observation.unobserved) ? observation.unobserved : [];\n const reasons = [\n ...unobserved\n .filter((entry) => entry && typeof entry.path === 'string')\n .map((entry) => { var _a; return `${entry.path}: ${(_a = entry.reason) !== null && _a !== void 0 ? _a : 'not observable'}`; }),\n ...missing.map(path => `${path}: no entry in the receipt observation`),\n ];\n return {\n observed: false,\n reason: reasons.length > 0\n ? reasons.join('; ')\n : 'the worker could not read every requested path back after hooks',\n };\n }\n return { observed: true, documents };\n}\n/**\n * Write a document at `path`. Sugar for a one-element {@link setMany}.\n *\n * **Delete:** pass `null` as the document to delete it — `set(path, null)` is\n * the delete (there is no separate `del`/`remove`). It is routed through the\n * collection's policy `delete` rule and broadcasts a delete to subscribers, and\n * the deleted entry surfaces as a `null` document under its path.\n *\n * Resolves to a discriminated {@link SetResult}; discriminate on `status`.\n */\nexport async function set(path, document, options) {\n // setMany already invalidates the read cache for the affected document and\n // collection paths — no second sweep needed here.\n return setMany([{ path, document }], options);\n}\n/**\n * Atomically write (or delete, with a `null` document) a batch of documents.\n *\n * Resolves to a discriminated {@link SetResult}:\n * - `committed` — the worker applied the batch directly.\n * - `confirmed` — a client-signed chain transaction landed successfully.\n * - `submitted` — broadcast happened but the outcome is unknown. NEVER\n * resubmit; call `reconcileSetResult`/`waitForSetResult` on the receipt.\n * - `expired_not_landed` — Solana only, and the one retry-safe terminal state.\n * - `signed` — `shouldSubmitTx: false`; signed and deliberately not sent.\n *\n * `requestedDocuments` is always the caller's own echo; authoritative server\n * state appears only under `observation`/`mirrorSync` once actually observed.\n */\nexport async function setMany(many, options) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;\n // Returns the data that was set, or undefined if the document was already set.\n try {\n // A server WalletClient threads its immutable config snapshot; the default\n // path reads the mutable process-global init() config. This keeps the app-id\n // bound into an on-chain 202 write (Solana/offchain) on the wallet\n // client's original app after a later global init() (CTA-05).\n const config = (_b = (_a = options === null || options === void 0 ? void 0 : options._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n const authProvider = (_d = (_c = options === null || options === void 0 ? void 0 : options._overrides) === null || _c === void 0 ? void 0 : _c.authProvider) !== null && _d !== void 0 ? _d : config.authProvider;\n if (!authProvider) {\n throw new Error('Auth provider not initialized');\n }\n let documents = [];\n const pathsToInvalidate = new Set();\n for (const { path, document: documentWithReservedFields } of many) {\n // for setting, we should remove any pieces of the document that start with '_' as they are internal and shouldn't be updated. The API would block it if it is one of the reserved ones\n let document = documentWithReservedFields;\n if (documentWithReservedFields) {\n document = Object.fromEntries(Object.entries(documentWithReservedFields).filter(([key]) => !key.startsWith('_')));\n }\n const normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n pathsToInvalidate.add(normalizedPath);\n const pathIsDocument = normalizedPath.split(\"/\").length % 2 === 0;\n let curItemId = \"\";\n if (pathIsDocument) {\n curItemId = normalizedPath.split(\"/\").pop() ? normalizedPath.split(\"/\").pop() : \"\";\n }\n else {\n curItemId = Math.random().toString(36).slice(2).substring(0, 12);\n }\n // if the path is a document, we need to append the document id to the path\n const collectionPath = pathIsDocument ? normalizedPath.split(\"/\").slice(0, -1).join(\"/\") : normalizedPath;\n pathsToInvalidate.add(collectionPath);\n let destinationPath = collectionPath;\n if (curItemId && curItemId.length > 0) {\n destinationPath = `${destinationPath}/${curItemId}`;\n }\n documents.push({ destinationPath, document });\n }\n let setResponse;\n try {\n setResponse = await makeApiRequest('PUT', `items`, { documents }, options === null || options === void 0 ? void 0 : options._overrides);\n }\n catch (error) {\n if ((error === null || error === void 0 ? void 0 : error.statusCode) === 402 && (error === null || error === void 0 ? void 0 : error.error) === 'INSUFFICIENT_BALANCE') {\n const deficitLamports = Number((_e = error.deficitLamports) !== null && _e !== void 0 ? _e : 0);\n const deficitSol = Number((_f = error.deficitSol) !== null && _f !== void 0 ? _f : deficitLamports / 1000000000);\n throw new InsufficientBalanceError(String((_g = error.address) !== null && _g !== void 0 ? _g : ''), Number((_h = error.balanceLamports) !== null && _h !== void 0 ? _h : 0), Number((_j = error.estimatedCostLamports) !== null && _j !== void 0 ? _j : 0), deficitLamports, deficitSol);\n }\n throw error;\n }\n // Invalidate caches and pending requests for affected paths\n pathsToInvalidate.forEach(path => {\n clearCacheByPrefix(path);\n });\n if (setResponse.status === 202) {\n // This means that the document needs to be set on-chain (or signed for offchain),\n // the API did nothing and gave us the required info to run this transaction.\n const { transactions, offchainTransaction } = setResponse.data;\n // Handle offchain transaction flow (for 'offchain' protocol apps)\n if (offchainTransaction && Array.isArray(transactions) && transactions.length > 0) {\n throw new Error('Ambiguous write response mixes offchain and onchain transaction targets');\n }\n if (offchainTransaction) {\n // Offchain signing is retired: no server mints this envelope any more\n // (the realtime worker commits poofnet writes directly). Fail loudly\n // rather than silently ignoring a payload the caller was asked to sign.\n throw new Error('Unsupported 202 transaction shape: offchain signing is retired');\n }\n // Handle Solana on-chain transaction flow\n if (!Array.isArray(transactions) || transactions.length !== 1) {\n throw new Error(`Expected exactly one on-chain transaction, received ${Array.isArray(transactions) ? transactions.length : 0}`);\n }\n const curTx = transactions[0];\n // The EVM onchain data plane is retired: no worker mints an EVM 202 any\n // more. A payload that still carries one is an unexpected response and\n // fails loudly BEFORE anything is signed - never silently ignored.\n if ((curTx === null || curTx === void 0 ? void 0 : curTx.evmTransaction) != null) {\n throw new Error('Unsupported 202 transaction shape: the write response carried an evmTransaction, ' +\n 'but EVM onchain writes are no longer supported. Nothing was signed or submitted.');\n }\n const hasSerializedSolanaTarget = (curTx === null || curTx === void 0 ? void 0 : curTx.serializedTransaction) != null;\n const hasBuiltSolanaTarget = (curTx === null || curTx === void 0 ? void 0 : curTx.transactionArgs) != null || (curTx === null || curTx === void 0 ? void 0 : curTx.remainingAccounts) != null ||\n (curTx === null || curTx === void 0 ? void 0 : curTx.idl) != null || (curTx === null || curTx === void 0 ? void 0 : curTx.txData) != null || (curTx === null || curTx === void 0 ? void 0 : curTx.preInstructions) != null;\n if (hasSerializedSolanaTarget && hasBuiltSolanaTarget) {\n throw new Error('Ambiguous on-chain write response mixes Solana transaction target formats');\n }\n // All requested paths (writes AND deletes), in request order. Used for the\n // post-confirm mirror read-back, which correlates every requested path.\n // The pre-sign validation derives its own full expected intent from\n // `documents` (see below) and needs nothing from this list.\n const requestedPaths = documents.map(d => d.destinationPath);\n const requestedDocuments = buildRequestedDocuments(documents);\n const appId = config.appId;\n // The lane comes verbatim from the worker, and is read BEFORE anything is\n // signed or submitted: a missing tag fails closed while nothing has been\n // broadcast, instead of stranding a landed transaction with no receipt.\n const workerChain = readWorkerChainTag((_k = setResponse.data) === null || _k === void 0 ? void 0 : _k.receipt, setResponse.data, curTx);\n if (!workerChain) {\n throw new Error('The write response carried no execution-chain tag, so this receipt could not state where the write ran. ' +\n 'Nothing was signed or submitted.');\n }\n if (curTx.serializedTransaction) {\n if (!SOLANA_CHAIN_TAGS.has(workerChain)) {\n throw new Error(`The write response reported execution chain \"${workerChain}\" for a Solana transaction. ` +\n 'Nothing was signed or submitted.');\n }\n const solanaChain = workerChain;\n const { handlePreBuiltTransaction, buildExpectedWriteIntent } = await import('./solana-operations');\n // OA-0001: derive the expected intent from OUR OWN request (the one\n // ground truth a tampered builder response cannot change) so the\n // validator can reject any transaction whose operation semantics\n // diverge from it BEFORE the wallet is asked to sign.\n const expectedIntent = buildExpectedWriteIntent(documents);\n const solanaOutcome = await handlePreBuiltTransaction(curTx, authProvider, options, expectedIntent);\n // `shouldSubmitTx: false` signed WITHOUT sending — no signature exists,\n // and there is nothing to mirror, so no synchronization is attempted.\n if (solanaOutcome.outcome === 'signed') {\n return {\n status: 'signed', appId, requestedDocuments, chain: solanaChain,\n transactionId: null,\n signedTransaction: solanaOutcome.signedTransaction,\n fence: solanaOutcome.fence,\n };\n }\n if (solanaOutcome.outcome === 'submitted') {\n return {\n status: 'submitted', appId, requestedDocuments, chain: solanaChain,\n transactionId: solanaOutcome.transactionSignature,\n signedTransaction: solanaOutcome.signedTransaction,\n fence: solanaOutcome.fence,\n confirmation: { state: 'unknown', reason: solanaOutcome.reason },\n };\n }\n // Confirmed: the receipt is already complete, so the mirror read is a\n // best-effort enrichment reported in `mirrorSync`, never a rejection.\n const mirrorSync = await attemptMirrorSync(requestedPaths, options);\n return {\n status: 'confirmed', appId, requestedDocuments, chain: solanaChain,\n transactionId: solanaOutcome.transactionSignature,\n signedTransaction: solanaOutcome.signedTransaction,\n fence: solanaOutcome.fence,\n confirmationContextSlot: solanaOutcome.confirmationContextSlot,\n mirrorSync,\n };\n }\n else {\n throw new Error('Unsupported 202 transaction shape: expected serializedTransaction');\n }\n }\n else if (setResponse.status === 200) {\n // Direct commit: the worker applied the batch itself. The receipt is\n // batch-level — `transactionId` comes from the worker's own receipt and is\n // NEVER lifted out of a result document (a delete returns the PREVIOUS\n // document, so its stale `_transaction_hash` would misreport the delete).\n const body = (setResponse.data && typeof setResponse.data === 'object' && !Array.isArray(setResponse.data))\n ? setResponse.data\n : null;\n const receipt = ((body === null || body === void 0 ? void 0 : body.receipt) && typeof body.receipt === 'object' && !Array.isArray(body.receipt))\n ? body.receipt\n : null;\n const rawTransactionId = receipt === null || receipt === void 0 ? void 0 : receipt.transactionId;\n return {\n status: 'committed',\n requestedDocuments: buildRequestedDocuments(documents),\n observation: observationFromDirectCommit(documents.map(d => d.destinationPath), receipt === null || receipt === void 0 ? void 0 : receipt.observation),\n // A worker predating the batch receipt reports no lane. Say so rather\n // than inventing one — and never discard a committed write's receipt.\n chain: ((_l = readWorkerChainTag(receipt)) !== null && _l !== void 0 ? _l : 'unknown'),\n transactionId: typeof rawTransactionId === 'string' && rawTransactionId.length > 0 ? rawTransactionId : null,\n };\n }\n else {\n throw new Error(`Failed to set document: ${setResponse}`);\n }\n }\n catch (error) {\n throw error;\n }\n}\n/**\n * Extract the document/collection path from a cache key. Keys are\n * `<appId:principal>|<path>:<...>` (H1 principal-scoped) — strip the principal\n * prefix (everything up to and including the first `|`, if present) before\n * splitting off the path segment.\n */\nfunction pathFromCacheKey(key) {\n const barIdx = key.indexOf('|');\n const afterPrincipal = barIdx >= 0 ? key.slice(barIdx + 1) : key;\n return afterPrincipal.split(':')[0];\n}\n// Helper to clear cache entries by prefix (across ALL principals — a write\n// invalidates every cached read of that path regardless of which user cached it)\nfunction clearCacheByPrefix(prefix) {\n // Fixed: Use prefix instead of undefined 'path' variable\n const normalizedPrefix = prefix.startsWith(\"/\") ? prefix.slice(1) : prefix;\n // Clear cache entries\n Object.keys(getCache).forEach(key => {\n const path = pathFromCacheKey(key);\n if (path === normalizedPrefix || path.startsWith(`${normalizedPrefix}/`)) {\n delete getCache[key];\n }\n });\n // Cancel pending requests for this path\n Object.keys(pendingRequests).forEach(key => {\n // Skip bypass-specific requests which have a different format\n const lookupKey = key.startsWith('bypass:') ? key.slice('bypass:'.length) : key;\n const path = pathFromCacheKey(lookupKey);\n if (path === normalizedPrefix || path.startsWith(`${normalizedPrefix}/`)) {\n // We don't actually abort the fetch (we could with AbortController),\n // but we remove it from pending so new requests won't coalesce with it\n delete pendingRequests[key];\n }\n });\n}\n// Utility functions for cache management\nexport function clearCache(path, opts) {\n if (path) {\n // Clear cache entries for this path across ALL principals. Keys are now\n // principal-scoped (`<appId:principal>|<path>:<...>`), so we can't compute a\n // single deterministic key — match by the path segment instead. When a\n // prompt is supplied, only drop entries for that exact prompt.\n const normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n const prompt = (opts === null || opts === void 0 ? void 0 : opts.prompt) || '';\n const matches = (key) => {\n const barIdx = key.indexOf('|');\n const afterPrincipal = barIdx >= 0 ? key.slice(barIdx + 1) : key;\n const colonIdx = afterPrincipal.indexOf(':');\n if (colonIdx < 0)\n return false;\n const keyPath = afterPrincipal.slice(0, colonIdx);\n if (keyPath !== normalizedPath)\n return false;\n if (!(opts === null || opts === void 0 ? void 0 : opts.prompt))\n return true;\n // The prompt is the segment immediately after the path's first colon.\n const rest = afterPrincipal.slice(colonIdx + 1);\n return rest === prompt || rest.startsWith(`${prompt}:`) || rest.startsWith(prompt);\n };\n Object.keys(getCache).forEach(key => { if (matches(key))\n delete getCache[key]; });\n Object.keys(pendingRequests).forEach(key => {\n const lookupKey = key.startsWith('bypass:') ? key.slice('bypass:'.length) : key;\n if (matches(lookupKey))\n delete pendingRequests[key];\n });\n }\n else {\n // Clear entire cache\n Object.keys(getCache).forEach(key => delete getCache[key]);\n Object.keys(pendingRequests).forEach(key => delete pendingRequests[key]);\n }\n}\n/**\n * Listeners notified after an identity change wipes the read caches. Registered\n * via `onReadCacheAuthChange` so downstream modules (e.g. the subscribeQuery poll\n * manager) can re-key/drop stale in-flight work WITHOUT operations.ts importing\n * them (avoids a static cycle; keeps the coalesce test bundle lean).\n */\nconst authChangeListeners = new Set();\n/** Register a callback invoked after `clearReadCacheForAuthChange`. Returns an unregister fn. */\nexport function onReadCacheAuthChange(listener) {\n authChangeListeners.add(listener);\n return () => { authChangeListeners.delete(listener); };\n}\n/**\n * SECURITY (H1): Wipe ALL HTTP read caches + in-flight reads. Call this whenever\n * the logged-in identity changes (login / logout / switch identity) so a freshly\n * authenticated principal can never observe data cached for the previous one.\n * This is invoked from the WS auth-change path (reconnectWithNewAuthV2).\n */\nexport function clearReadCacheForAuthChange() {\n Object.keys(getCache).forEach(key => delete getCache[key]);\n Object.keys(pendingRequests).forEach(key => delete pendingRequests[key]);\n authChangeListeners.forEach(fn => {\n try {\n fn();\n }\n catch ( /* a listener throwing must not abort the cache wipe */_a) { /* a listener throwing must not abort the cache wipe */ }\n });\n}\nexport async function getFiles(path, options) {\n try {\n const normalizedPath = path.startsWith(\"/\") ? path.slice(1) : path;\n if (!normalizedPath || normalizedPath.length === 0) {\n throw new Error(\"Invalid path provided.\");\n }\n const apiPath = `storage?path=${encodeURIComponent(normalizedPath)}`;\n const response = await makeApiRequest('GET', apiPath, null, options === null || options === void 0 ? void 0 : options._overrides);\n return response.data;\n }\n catch (error) {\n throw error;\n }\n}\n/** Pull the worker's concrete object path (`token.pathId`) out of a response body. */\nfunction readWorkerFilePath(source) {\n if (!source || typeof source !== 'object')\n return null;\n for (const key of ['pathId', 'path', 'destinationPath']) {\n const value = source[key];\n if (typeof value === 'string' && value.trim().length > 0)\n return value.trim();\n }\n return null;\n}\nfunction readFileVisibility(source) {\n const value = (source && typeof source === 'object') ? source.visibility : undefined;\n if (value === 'public' || value === 'private' || value === 'unknown')\n return value;\n // The worker did not state it, so neither do we. `unknown` never means the\n // object is private — it means the read-rule evaluation was not reported.\n return 'unknown';\n}\nexport async function setFile(path, file, options) {\n var _a, _b, _c, _d;\n // 1) Get the presigned URL from your backend\n const requestBody = {\n destinationPath: path,\n operation: file ? 'upload' : 'delete',\n };\n // Send file size so the server can enforce upload limits before issuing a presigned URL\n if (file) {\n requestBody.contentLength = file.size;\n requestBody.contentType = file.type || undefined;\n // Declared metadata fields set atomically with the create (server validates\n // them against the storage collection's `fields` and applies the CREATE rule).\n if (options === null || options === void 0 ? void 0 : options.metadata) {\n requestBody.metadata = options.metadata;\n }\n }\n const response = await makeApiRequest('POST', 'storage/url', requestBody, options === null || options === void 0 ? void 0 : options._overrides);\n const normalizedPath = path.startsWith('/') ? path.slice(1) : path;\n if (file == null) {\n // A deletion is acknowledged only by a non-404 response. `makeApiRequest`\n // normalizes 404 into `{ data: null, status: 404 }` rather than throwing, so\n // the status has to be inspected.\n const deletePath = (_a = readWorkerFilePath(response === null || response === void 0 ? void 0 : response.data)) !== null && _a !== void 0 ? _a : normalizedPath;\n if ((response === null || response === void 0 ? void 0 : response.status) === 404) {\n return { path: deletePath, deleted: false, alreadyAbsent: true };\n }\n return { path: deletePath, deleted: true };\n }\n if (!((_b = response === null || response === void 0 ? void 0 : response.data) === null || _b === void 0 ? void 0 : _b.s3Url)) {\n throw new Error(\"No s3Url in response\");\n }\n // Client-side size guard using the limit returned by the server\n const maxFileSize = response.data.maxFileSize;\n if (maxFileSize && file.size > maxFileSize) {\n throw new Error(`File size ${(file.size / (1024 * 1024)).toFixed(2)} MB exceeds the maximum upload size of ${(maxFileSize / (1024 * 1024)).toFixed(0)} MB.`);\n }\n const presignedUrl = response.data.s3Url;\n // Retain the CONCRETE path BEFORE the PUT. Storage generates a collection\n // upload's id server-side, so `setFile(\"metadata\", file)` creates\n // `metadata/<generated-id>`; if the commit succeeds and only its response is\n // lost, this is the only identifier the object has.\n const retainedPath = (_c = readWorkerFilePath(response.data)) !== null && _c !== void 0 ? _c : normalizedPath;\n // 2) Upload the file directly to storage with a PUT request\n let uploadResponse;\n try {\n uploadResponse = await fetch(presignedUrl, {\n method: 'PUT',\n headers: {\n 'Content-Type': file.type,\n },\n body: file\n });\n }\n catch (error) {\n // The transport itself failed, so we do not know whether the object\n // committed. This is NOT a definite failure and NOT retry-safe.\n const message = typeof (error === null || error === void 0 ? void 0 : error.message) === 'string' ? error.message : String(error);\n return {\n status: 'unknown',\n path: retainedPath,\n reason: `the upload response was lost before it could be read: ${message}`,\n retrySafe: false,\n };\n }\n // 3) A non-2xx answer is a definite, unambiguous failure — keep throwing.\n if (!uploadResponse.ok) {\n await uploadResponse.text().catch(() => '');\n throw new Error(`Upload failed with status: ${uploadResponse.status}`);\n }\n // 4) The PUT response IS the finalize response: it carries the durable URL\n // and the anonymous-read verdict, inside the worker's `{ data, status }`\n // envelope.\n let finalizeBody = null;\n try {\n const parsed = await uploadResponse.json();\n finalizeBody = (parsed && typeof parsed === 'object' && parsed.data && typeof parsed.data === 'object')\n ? parsed.data\n : parsed;\n }\n catch (_e) {\n // A worker predating the URL-carrying finalize response answers with\n // something we cannot parse. The object still committed.\n finalizeBody = null;\n }\n const url = (finalizeBody && typeof finalizeBody.url === 'string' && finalizeBody.url.length > 0)\n ? finalizeBody.url\n : null;\n return {\n status: 'uploaded',\n path: (_d = readWorkerFilePath(finalizeBody)) !== null && _d !== void 0 ? _d : retainedPath,\n url,\n visibility: readFileVisibility(finalizeBody),\n };\n}\nexport async function signMessage(message) {\n const config = await getConfig();\n if (!config.authProvider) {\n throw new Error('Auth provider not initialized. Please call init() first.');\n }\n return config.authProvider.signMessage(message);\n}\nexport async function signTransaction(transaction) {\n const config = await getConfig();\n if (!config.authProvider) {\n throw new Error('Auth provider not initialized. Please call init() first.');\n }\n return config.authProvider.signTransaction(transaction);\n}\nexport async function signAndSubmitTransaction(transaction, feePayer) {\n const config = await getConfig();\n if (!config.authProvider) {\n throw new Error('Auth provider not initialized. Please call init() first.');\n }\n return config.authProvider.signAndSubmitTransaction(transaction, feePayer);\n}\nexport async function syncItems(paths, options) {\n try {\n const response = await makeApiRequest('PUT', 'items/sync', { paths }, options === null || options === void 0 ? void 0 : options._overrides);\n return response.data;\n }\n catch (error) {\n throw error;\n }\n}\n","import { getConfig } from './config';\nimport { attemptMirrorSync } from './operations';\nconst DEFAULT_TIMEOUT_MS = 60000;\nconst DEFAULT_MAX_ATTEMPTS = 20;\nconst DEFAULT_POLL_INTERVAL_MS = 3000;\n/** Mirror read after a late confirmation. No settle delay: the tx already landed. */\nconst RECONCILE_MIRROR_SETTLE_MS = 0;\nfunction errorText(error) {\n const message = error === null || error === void 0 ? void 0 : error.message;\n return typeof message === 'string' && message.length > 0 ? message : String(error);\n}\nfunction isSolanaSubmitted(receipt) {\n return receipt.status === 'submitted' && 'signedTransaction' in receipt;\n}\n/**\n * The Solana execution lane a client config REQUIRES, or `null` when the config\n * carries no constraint. Only a positive contradiction rejects a receipt — an\n * unmapped or unset `chain` is not evidence of a mismatch.\n */\nfunction requiredSolanaChain(config) {\n switch (config.chain) {\n case 'realtime_devnet':\n case 'solana_devnet':\n return 'solana_devnet';\n case 'realtime_mainnet':\n case 'realtime_mainnet_preview':\n case 'solana_mainnet':\n return 'solana_mainnet';\n default:\n return null;\n }\n}\n/**\n * Bind the receipt to the app + chain it was issued for BEFORE any RPC or\n * mirror request. Writes bind to an immutable config, so a bare reconcile after\n * a global re-`init()` could otherwise poll the wrong app's endpoints entirely.\n */\nfunction assertReceiptMatchesContext(receipt, config) {\n if (!receipt.appId || typeof receipt.appId !== 'string') {\n throw new Error('This write receipt carries no appId and cannot be reconciled.');\n }\n if (receipt.appId !== config.appId) {\n throw new Error(`This write receipt was issued for app \"${receipt.appId}\" but the bound client targets \"${config.appId}\". ` +\n 'Reconcile it through the client it came from.');\n }\n if (isSolanaSubmitted(receipt)) {\n const required = requiredSolanaChain(config);\n if (required && required !== receipt.chain) {\n throw new Error(`This write receipt ran on \"${receipt.chain}\" but the bound client targets \"${required}\".`);\n }\n }\n}\nfunction stillSubmitted(receipt, reason) {\n return Object.assign(Object.assign({}, receipt), { confirmation: Object.assign(Object.assign({}, receipt.confirmation), { reason }) });\n}\nasync function mirrorFor(receipt, options) {\n const paths = receipt.requestedDocuments.map(entry => entry.path);\n if (paths.length === 0)\n return { observed: false, reason: 'the receipt carried no requested paths' };\n const setOptions = (options === null || options === void 0 ? void 0 : options._overrides) ? { _overrides: options._overrides } : undefined;\n return attemptMirrorSync(paths, setOptions, RECONCILE_MIRROR_SETTLE_MS);\n}\nasync function resolveSolanaRpc(config, options) {\n var _a, _b;\n const injected = (_a = options === null || options === void 0 ? void 0 : options._overrides) === null || _a === void 0 ? void 0 : _a._solanaRpc;\n if (injected)\n return injected;\n const rpcUrl = (_b = config.rpcUrl) === null || _b === void 0 ? void 0 : _b.trim();\n if (!rpcUrl) {\n throw new Error('Reconciling a Solana write receipt requires init({ rpcUrl }).');\n }\n const { Connection } = await import('@solana/web3.js');\n return new Connection(rpcUrl, 'confirmed');\n}\n/**\n * Solana reconciliation NEVER broadcasts. It reaches `expired_not_landed` only\n * after the fence is observed expired AND history successfully proves the\n * signature is absent; a failed or inconclusive lookup stays `submitted`.\n */\nasync function reconcileSolana(receipt, config, options) {\n var _a, _b, _c, _d;\n const rpc = await resolveSolanaRpc(config, options);\n let statusValue = null;\n let contextSlot;\n try {\n if (typeof rpc.getSignatureStatuses !== 'function') {\n return stillSubmitted(receipt, 'the configured Solana RPC cannot report signature statuses');\n }\n const statuses = await rpc.getSignatureStatuses([receipt.transactionId]);\n statusValue = (_b = (_a = statuses === null || statuses === void 0 ? void 0 : statuses.value) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : null;\n contextSlot = (_c = statuses === null || statuses === void 0 ? void 0 : statuses.context) === null || _c === void 0 ? void 0 : _c.slot;\n }\n catch (error) {\n return stillSubmitted(receipt, `signature status lookup failed: ${errorText(error)}`);\n }\n if (statusValue) {\n // Landed. A landed-but-failed transaction is a genuine failure, not `submitted`.\n if (statusValue.err) {\n throw new Error(`Transaction failed: ${JSON.stringify(statusValue.err)}`);\n }\n const confirmed = {\n status: 'confirmed',\n appId: receipt.appId,\n requestedDocuments: receipt.requestedDocuments,\n chain: receipt.chain,\n transactionId: receipt.transactionId,\n signedTransaction: receipt.signedTransaction,\n fence: receipt.fence,\n confirmationContextSlot: contextSlot !== null && contextSlot !== void 0 ? contextSlot : 0,\n mirrorSync: await mirrorFor(receipt, options),\n };\n return confirmed;\n }\n // Absent from the status window. Expiry has to be OBSERVED before absence can\n // mean anything: before the fence expires the transaction may still land.\n let blockHeight;\n try {\n blockHeight = typeof rpc.getBlockHeight === 'function' ? await rpc.getBlockHeight('confirmed') : undefined;\n }\n catch (error) {\n return stillSubmitted(receipt, `block height lookup failed: ${errorText(error)}`);\n }\n if (typeof blockHeight !== 'number') {\n return stillSubmitted(receipt, 'expiry could not be observed: the RPC reported no block height');\n }\n if (blockHeight <= receipt.fence.lastValidBlockHeight) {\n return stillSubmitted(receipt, `not yet expired: block height ${blockHeight} is within the fence (lastValidBlockHeight ${receipt.fence.lastValidBlockHeight})`);\n }\n // Expired. Prove absence from history before declaring the write retry-safe.\n let history;\n try {\n history = await rpc.getTransaction(receipt.transactionId, {\n maxSupportedTransactionVersion: 0,\n commitment: 'confirmed',\n });\n }\n catch (error) {\n return stillSubmitted(receipt, `history lookup failed after expiry: ${errorText(error)}`);\n }\n if (history) {\n if ((_d = history === null || history === void 0 ? void 0 : history.meta) === null || _d === void 0 ? void 0 : _d.err) {\n throw new Error(`Transaction failed: ${JSON.stringify(history.meta.err)}`);\n }\n const confirmed = {\n status: 'confirmed',\n appId: receipt.appId,\n requestedDocuments: receipt.requestedDocuments,\n chain: receipt.chain,\n transactionId: receipt.transactionId,\n signedTransaction: receipt.signedTransaction,\n fence: receipt.fence,\n confirmationContextSlot: typeof history.slot === 'number' ? history.slot : (contextSlot !== null && contextSlot !== void 0 ? contextSlot : 0),\n mirrorSync: await mirrorFor(receipt, options),\n };\n return confirmed;\n }\n return {\n status: 'expired_not_landed',\n appId: receipt.appId,\n requestedDocuments: receipt.requestedDocuments,\n chain: receipt.chain,\n transactionId: receipt.transactionId,\n fence: receipt.fence,\n };\n}\n/**\n * Poll the SAME signature a `submitted` receipt carries and return the\n * resulting `SetResult`.\n *\n * - Terminal receipts (`committed`, `confirmed`, `expired_not_landed`,\n * `signed`) are returned unchanged; nothing was left open.\n * - A `submitted` receipt with no transaction identifier (`transactionId:\n * null`) is rejected immediately: no identifier exists to poll.\n * - A transaction that landed and FAILED throws, exactly as it would have on\n * the original write.\n */\nexport async function reconcileSetResult(receipt, options) {\n var _a, _b;\n if (!receipt || typeof receipt !== 'object' || typeof receipt.status !== 'string') {\n throw new Error('reconcileSetResult requires a write receipt returned by set/setMany.');\n }\n if (receipt.status !== 'submitted')\n return receipt;\n if (receipt.transactionId === null) {\n throw new Error('This receipt is explicitly irreconcilable: the wallet send response was lost, so no transaction hash exists to poll. ' +\n 'Resolve it out of band — resubmitting could execute the write twice.');\n }\n const config = (_b = (_a = options === null || options === void 0 ? void 0 : options._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n // Validation happens BEFORE any RPC or mirror request.\n assertReceiptMatchesContext(receipt, config);\n if (isSolanaSubmitted(receipt)) {\n return reconcileSolana(receipt, config, options);\n }\n // Anything else (e.g. a legacy serialized receipt from a retired lane) has no\n // reconciliation transport any more; say so rather than guessing.\n return stillSubmitted(receipt, 'this receipt shape has no reconciliation lane');\n}\n/**\n * Reconcile repeatedly until the receipt leaves `submitted` or the bound is hit.\n *\n * The bound is mandatory, because some states are permanently non-terminal by\n * design: an RPC that can never observe the signature or the expiry never\n * resolves. On exhaustion (or abort) this returns the LATEST `submitted`\n * receipt with its identifier intact rather than hanging or throwing the\n * identifier away.\n */\nexport async function waitForSetResult(receipt, options) {\n var _a, _b, _c, _d;\n if (receipt && typeof receipt === 'object' && receipt.status === 'submitted' && receipt.transactionId === null) {\n // Rejected immediately rather than polled: there is nothing to poll.\n return reconcileSetResult(receipt, options);\n }\n const timeoutMs = (_a = options === null || options === void 0 ? void 0 : options.timeoutMs) !== null && _a !== void 0 ? _a : DEFAULT_TIMEOUT_MS;\n const maxAttempts = (_b = options === null || options === void 0 ? void 0 : options.maxAttempts) !== null && _b !== void 0 ? _b : DEFAULT_MAX_ATTEMPTS;\n const pollIntervalMs = (_c = options === null || options === void 0 ? void 0 : options.pollIntervalMs) !== null && _c !== void 0 ? _c : DEFAULT_POLL_INTERVAL_MS;\n const startedAt = Date.now();\n let current = receipt;\n let attempts = 0;\n while (attempts < maxAttempts && Date.now() - startedAt < timeoutMs) {\n if ((_d = options === null || options === void 0 ? void 0 : options.signal) === null || _d === void 0 ? void 0 : _d.aborted)\n return current;\n attempts++;\n current = await reconcileSetResult(current, options);\n if (current.status !== 'submitted')\n return current;\n if (attempts >= maxAttempts)\n break;\n const remaining = timeoutMs - (Date.now() - startedAt);\n if (remaining <= 0)\n break;\n const slept = await sleepUnlessAborted(Math.min(pollIntervalMs, remaining), options === null || options === void 0 ? void 0 : options.signal);\n if (!slept)\n return current;\n }\n return current;\n}\n/** Resolves `false` when the signal aborted during (or before) the sleep. */\nfunction sleepUnlessAborted(ms, signal) {\n if (signal === null || signal === void 0 ? void 0 : signal.aborted)\n return Promise.resolve(false);\n if (!signal)\n return new Promise(resolve => setTimeout(() => resolve(true), ms));\n return new Promise(resolve => {\n const timer = setTimeout(() => {\n signal.removeEventListener('abort', onAbort);\n resolve(true);\n }, ms);\n const onAbort = () => {\n clearTimeout(timer);\n resolve(false);\n };\n signal.addEventListener('abort', onAbort, { once: true });\n });\n}\n","/**\n * WebSocket Subscription Module\n *\n * This module provides real-time data subscriptions using WebSocket v2 protocol\n * with multiplexed connections (one connection per client, multiple subscriptions).\n *\n * The external API remains unchanged - just use subscribe(path, options) as before.\n */\nimport { subscribeV2, closeAllSubscriptionsV2, clearCacheV2, getCachedDataV2, reconnectWithNewAuthV2, } from './subscription-v2';\n/**\n * Subscribe to real-time updates for a path.\n *\n * @param path - The path to subscribe to (e.g., 'users/123' or 'posts')\n * @param subscriptionOptions - Options including onData and onError callbacks\n * @returns A function to unsubscribe\n *\n * @example\n * ```typescript\n * const unsubscribe = await subscribe('users/123', {\n * onData: (data) => console.log('User updated:', data),\n * onError: (error) => console.error('Subscription error:', error),\n * });\n *\n * // Later, to unsubscribe:\n * await unsubscribe();\n * ```\n */\nexport async function subscribe(path, subscriptionOptions) {\n // Forgive the most natural mistake: `subscribe(path, (data) => ...)`. Without\n // this, a bare callback is taken as the options object, `.onData` is undefined,\n // and the subscription silently never fires (no error) — it just looks broken.\n // Coerce a function into `{ onData }` so the natural form works.\n const opts = typeof subscriptionOptions === 'function'\n ? { onData: subscriptionOptions }\n : subscriptionOptions;\n return subscribeV2(path, opts);\n}\n/**\n * Close all active subscriptions.\n * Call this when cleaning up (e.g., on logout or component unmount).\n */\nexport async function closeAllSubscriptions() {\n return closeAllSubscriptionsV2();\n}\n/**\n * Clear the subscription cache.\n *\n * @param path - Optional path to clear. If not provided, clears all cached data.\n */\nexport function clearCache(path) {\n clearCacheV2(path);\n}\n/**\n * Get cached data for a path without making a network request.\n *\n * @param path - The path to get cached data for\n * @param prompt - Optional prompt that was used for the subscription\n * @returns The cached data, or null if not cached or expired\n */\nexport function getCachedData(path, prompt) {\n return getCachedDataV2(path, prompt);\n}\n/**\n * Reconnect all WebSocket connections with fresh authentication.\n * Call this when the user's auth state changes (login/logout).\n *\n * This will:\n * 1. Close existing connections\n * 2. Re-establish with new auth token\n * 3. Re-subscribe to all active paths\n *\n * Existing subscriptions will receive new initial data after reconnection.\n */\nexport async function reconnectWithNewAuth() {\n return reconnectWithNewAuthV2();\n}\n","/**\n * Scoped multi-app client factory.\n *\n * `createClient()` returns an isolated, READ-ONLY client bound to one Bounded\n * app, independent of the module-global `init()` client. It exists so a single\n * frontend can hold its normal authenticated client for its own app AND a\n * read-only client for a SECOND Bounded app (e.g. a shared steward/runtime app),\n * with live subscriptions on both and zero interference between them.\n *\n * Each instance carries its OWN fully-resolved config (endpoints + appId) and\n * routes through the SAME shared transport/subscription implementation as the\n * global path - it never forks that code. Isolation comes from threading the\n * instance config (and a read-only marker) through the existing per-request /\n * per-subscription override channel, plus the websocket layer already keying\n * connections by appId.\n *\n * ## v1 scope: read-only, unauthenticated\n *\n * A scoped instance is UNAUTHENTICATED. It sends no auth, never reads or\n * refreshes the global session, and connects to its app's realtime endpoint\n * anonymously. It is therefore only useful against collections a Bounded app\n * exposes with a public read rule (`read: true`) - private/per-user reads will\n * be denied by the target app's policy, exactly as an anonymous caller would be.\n *\n * Writes and any auth-requiring surface are NOT supported on a scoped instance\n * and throw a clear error. Per-instance authentication is a planned follow-up.\n */\nimport { get, getMany, search, queryAggregate, count, aggregate, runQuery, runQueryMany, } from './operations';\nimport { subscribe } from './subscription';\nimport { DEFAULT_CLIENT_CONFIG, resolveClientConfig } from './config';\n/** Error thrown when an unsupported (write / auth-requiring) call is made on a\n * read-only scoped client. */\nexport class ScopedClientReadOnlyError extends Error {\n constructor(operation) {\n super(`createClient() instances are read-only in v1: \"${operation}\" is not supported. ` +\n `Use the global init() client for authenticated writes, or read only public ` +\n `(read: true) collections on this scoped instance.`);\n this.name = 'ScopedClientReadOnlyError';\n }\n}\n/**\n * Create a read-only client scoped to a single Bounded app.\n *\n * @example\n * ```ts\n * // Global client stays the venue's own authenticated app:\n * await init({ appId: VENUE_APP, network: 'bounded-production', authMethod: 'email' });\n *\n * // A second, read-only client for the steward runtime app:\n * const steward = createClient({ appId: STEWARD_APP, network: 'bounded-production' });\n * const state = await steward.get('runtime/current');\n * const stop = await steward.subscribe('runtime/current', (d) => render(d));\n * ```\n */\nexport function createClient(config) {\n if (!config || !config.appId) {\n throw new Error('createClient requires an appId.');\n }\n // Resolve from the PRISTINE defaults (never the mutated global) so a scoped\n // instance is fully independent of any prior init(). Same precedence as init:\n // defaults < network preset < explicit fields.\n const resolved = resolveClientConfig(DEFAULT_CLIENT_CONFIG, config);\n // The override channel that carries this instance's identity through the\n // shared transport and subscription code. `_config` retargets endpoints +\n // appId; `_readOnly` omits auth and blocks ambient-session/global-cache reads.\n const instanceOverrides = () => ({ _config: resolved, _readOnly: true });\n // Merge caller-supplied opts with the instance overrides. The instance\n // `_config`/`_readOnly` are applied LAST so app code can never override the\n // routing/identity of a scoped call (but may still pass e.g. an AbortSignal).\n const withOverrides = (opts) => {\n var _a;\n const base = (opts !== null && opts !== void 0 ? opts : {});\n return Object.assign(Object.assign({}, base), { _overrides: Object.assign(Object.assign({}, ((_a = base._overrides) !== null && _a !== void 0 ? _a : {})), instanceOverrides()) });\n };\n return {\n appId: resolved.appId,\n getConfig: () => (Object.assign({}, resolved)),\n get: (path, opts) => get(path, withOverrides(opts)),\n getMany: (paths, opts) => getMany(paths, withOverrides(opts)),\n search: (path, query, opts) => search(path, query, withOverrides(opts)),\n queryAggregate: (path, spec, opts) => queryAggregate(path, spec, withOverrides(opts)),\n count: (path, opts) => count(path, withOverrides(opts)),\n aggregate: (path, operation, opts) => aggregate(path, operation, withOverrides(opts)),\n runQuery: (absolutePath, queryName, queryArgs, opts) => runQuery(absolutePath, queryName, queryArgs, withOverrides(opts)),\n runQueryMany: (many, opts) => runQueryMany(many, withOverrides(opts)),\n subscribe: (path, options) => {\n var _a;\n const opts = typeof options === 'function' ? { onData: options } : Object.assign({}, options);\n // Force this instance's scoped, read-only routing onto the subscription.\n opts._overrides = Object.assign(Object.assign({}, ((_a = opts._overrides) !== null && _a !== void 0 ? _a : {})), { _config: resolved, _readOnly: true });\n return subscribe(path, opts);\n },\n set: () => { throw new ScopedClientReadOnlyError('set'); },\n setMany: () => { throw new ScopedClientReadOnlyError('setMany'); },\n };\n}\n","/**\n * Live named-query subscriptions (subscribeQuery) - HTTP client poller (v1).\n *\n * A standardized client-side poller for a policy's computed/named queries. Same\n * callback contract as `subscribe()` (onData/onError), but instead of a socket it\n * polls `runQuery` on an interval. It exists to replace ad-hoc app-side polling\n * with one controlled, deduped, backoff-aware poller.\n *\n * v1 is HTTP-only and requires ZERO server change: it rides the existing\n * `runQuery` microtask coalescer (operations.ts), which batches due keys into\n * <=10-per-POST chunks, surfaces per-row errors, and (via utils/api) does a\n * bounded in-request 429 retry. The websocket transport and true server-push are\n * deferred; see LIVE-QUERIES-SDK-PLAN.md section 9. The public contract here is\n * pinned so either upgrade stays transparent.\n *\n * Design notes that are load-bearing (do not \"simplify\" away):\n * - The coalescer does NOT dedupe; the manager's refcount dedupe below is the\n * ONLY dedupe, so it is load-bearing for billed-read correctness.\n * - There is no durable transport backoff: `utils/api` retries twice then\n * rejects. Steady-state backoff on a rejected poll is owned HERE.\n * - A transport rejection (429/network/chunk) must NOT reach onError - it would\n * blast the whole up-to-10-key chunk every interval and rebuild the exact 429\n * noise this feature removes. Only a genuine per-row query error / policy\n * decline reaches onError.\n */\nimport { runQuery, onReadCacheAuthChange } from './operations';\nimport { clientConfig } from './config';\nimport { getIdToken } from '../utils/utils';\n/** Default poll cadence. Sits on the hot named-query cadence oapps already runs. */\nexport const DEFAULT_QUERY_POLL_INTERVAL_MS = 5000;\n/** Hard lower clamp so an app cannot rebuild the 429 storm. */\nexport const MIN_QUERY_POLL_INTERVAL_MS = 1000;\n/** Ceiling for the manager-owned exponential backoff on a rejected poll. */\nconst QUERY_POLL_BACKOFF_CAP_MS = 60000;\n/** Max extra delay sprinkled on a visibility-resume refresh so N keys don't burst-sync. */\nconst RESUME_JITTER_MS = 250;\n/** Retry cadence for a re-key that could not (re-)attach - so a live query is never\n * silently orphaned by a transient auth failure during an identity change. */\nconst REATTACH_RETRY_MS = 3000;\n/**\n * Server sentinel for a query that cannot be polled (e.g. onchain/EVM live-call).\n * Absorbed internally: keep polling, never surface. Pin it to the design-of-record\n * `unsupported` frame.\n */\nconst UNSUPPORTED_QUERY_SENTINEL = 'unsupported';\nconst registry = new Map();\n/**\n * Every live subscriber, INCLUDING ones momentarily detached from the registry\n * mid-re-key (see reattach). Teardown walks this - not just the registry - so a\n * pending re-key retry can never revive polling after closeAllQuerySubscriptions.\n */\nconst liveSubscribers = new Set();\n/** Poll ticks pause while the document is hidden (env-guarded / test-injectable). */\nlet hidden = false;\n// ---------------------------------------------------------------------------\n// Canonicalization (shared with a future server group key).\n// ---------------------------------------------------------------------------\nfunction sortDeep(value) {\n if (Array.isArray(value))\n return value.map(sortDeep);\n if (value && typeof value === 'object') {\n const out = {};\n for (const k of Object.keys(value).sort())\n out[k] = sortDeep(value[k]);\n return out;\n }\n return value;\n}\n/**\n * Key-sorted deep copy that mirrors the JSON wire form byte-for-byte. Unlike\n * `sortDeep`, it assigns into NULL-PROTOTYPE objects so an own `__proto__` key is\n * kept as an ordinary JSON property instead of being swallowed by\n * `Object.prototype`'s `__proto__` setter (which would mutate the prototype and\n * drop the property, diverging from what `JSON.stringify` actually emits).\n */\nfunction sortDeepWire(value) {\n if (Array.isArray(value))\n return value.map(sortDeepWire);\n if (value && typeof value === 'object') {\n const out = Object.create(null);\n for (const k of Object.keys(value).sort())\n out[k] = sortDeepWire(value[k]);\n return out;\n }\n return value;\n}\n/**\n * Deterministic key-sorted serialization of query args, canonicalizing the EXACT\n * JSON wire representation the request serializer sends. Args are first projected\n * through `JSON.parse(JSON.stringify(...))` so `toJSON` runs (a `Date` becomes its\n * ISO string, not `{}`) and functions/`undefined` are dropped exactly as the wire\n * does, then key-sorted with null-prototype objects so an own `__proto__` key\n * round-trips as a property. This makes the dedupe key match what the server\n * actually receives, so two subscriptions can share a poller only when their wire\n * inputs are identical. Cyclic structures and other values the wire cannot\n * serialize (e.g. `BigInt`) are rejected by `JSON.stringify` here, exactly as they\n * would be on the wire.\n */\nexport function canonicalizeArgs(args) {\n var _a;\n const wire = JSON.parse((_a = JSON.stringify(args !== null && args !== void 0 ? args : null)) !== null && _a !== void 0 ? _a : 'null');\n return JSON.stringify(sortDeepWire(wire));\n}\n/**\n * Deterministic key-sorted serialization of a query RESULT for change detection.\n * Robust to shuffled object key order and the JSON-wire shapes the endpoint\n * yields (string u64, ISO-date string). BigInt/Date OBJECTS never cross the HTTP\n * boundary, so they are intentionally not handled here.\n */\nexport function canonicalizeResult(result) {\n return JSON.stringify(sortDeep(result === undefined ? null : result));\n}\n// ---------------------------------------------------------------------------\n// Identity (two-part: compact bucket + exact bearer, mirroring subscribe()'s H1).\n// ---------------------------------------------------------------------------\nfunction hashToken(value) {\n let h = 5381;\n for (let i = 0; i < value.length; i++)\n h = ((h << 5) + h + value.charCodeAt(i)) & 0x7fffffff;\n return h.toString(36);\n}\nasync function currentIdentity(appId) {\n const token = await getIdToken(clientConfig.isServer);\n return token ? { bucket: `${appId}:t${hashToken(token)}`, token } : { bucket: `${appId}:anon`, token: null };\n}\nfunction makeKey(appId, path, queryName, args, identity) {\n var _a;\n return [appId, path, queryName, canonicalizeArgs(args), identity.bucket, (_a = identity.token) !== null && _a !== void 0 ? _a : ''].join('\\u0000');\n}\n// ---------------------------------------------------------------------------\n// Error classification.\n// ---------------------------------------------------------------------------\n/** A genuine query-level error (surfaced to onError), as opposed to transport. */\nfunction isQueryLevelError(error) {\n return (error === null || error === void 0 ? void 0 : error.isQueryError) === true || (error === null || error === void 0 ? void 0 : error.isBoundedDecline) === true || (error === null || error === void 0 ? void 0 : error.decline) != null;\n}\n/**\n * A RECOGNIZED transient transport failure that a retry might clear (HTTP 408/429/5xx, a\n * network/abort error). These back off SILENTLY - surfacing them per-poll would rebuild the\n * 429 noise. Anything else (a bad path 404, a permission/config 401/403, a malformed request\n * 400 - things a retry won't fix) is NOT transient, so it gets surfaced once to onError\n * instead of a silently-dead subscription.\n */\nfunction isTransientTransportError(error) {\n if (error == null)\n return true; // unknown - be conservative and keep retrying\n // #060: classify by the actual status, not merely by \"has a status\". Almost every HTTP\n // failure carries a status, including the TERMINAL ones (400/401/403/404); the old\n // `typeof status === 'number'` check lumped them all into \"transient\" and retried them\n // forever with no onError - the exact silently-dead subscription this is meant to avoid.\n const status = typeof error.status === 'number' ? error.status\n : typeof error.statusCode === 'number' ? error.statusCode\n : undefined;\n if (status !== undefined) {\n return status === 408 || status === 429 || status >= 500;\n }\n const code = error.code;\n if (code === 'ECONNABORTED' || code === 'ERR_NETWORK' || code === 'ETIMEDOUT' || code === 'ERR_CANCELED')\n return true;\n if (error.name === 'AbortError' || error.name === 'CanceledError')\n return true;\n if (error.request && !error.response)\n return true; // request sent, no response - network\n return false;\n}\nfunction enrichError(error, phase, willRetry) {\n var _a;\n const err = error instanceof Error ? error : new Error(String((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : error));\n try {\n err.phase = phase;\n err.willRetry = willRetry;\n }\n catch (_b) {\n /* frozen error object - deliver as-is */\n }\n return err;\n}\n// ---------------------------------------------------------------------------\n// Interval / scheduling.\n// ---------------------------------------------------------------------------\nfunction clampInterval(value) {\n const n = typeof value === 'number' && isFinite(value) ? value : DEFAULT_QUERY_POLL_INTERVAL_MS;\n return Math.max(MIN_QUERY_POLL_INTERVAL_MS, n);\n}\nfunction recomputeInterval(entry) {\n let min = Infinity;\n for (const s of entry.subscribers)\n if (s.intervalMs < min)\n min = s.intervalMs;\n const next = isFinite(min) ? min : DEFAULT_QUERY_POLL_INTERVAL_MS;\n const changed = next !== entry.effectiveInterval;\n entry.effectiveInterval = next;\n // Realign a pending (not in-flight) timer to the new cadence so a newly-joined\n // faster subscriber does not wait out a slower subscriber's interval (and a\n // departed fast subscriber relaxes the survivors back to their own cadence).\n // But NEVER while backing off - realigning to the (shorter) steady cadence would\n // discard the backoff and re-hit a still-failing transport (the 429 storm).\n if (changed && entry.timer && !entry.inFlight && entry.consecutiveFailures === 0) {\n scheduleNext(entry, entry.effectiveInterval);\n }\n}\nfunction clearTimer(entry) {\n if (entry.timer) {\n clearTimeout(entry.timer);\n entry.timer = null;\n }\n}\nfunction backoffDelay(entry) {\n const base = Math.min(QUERY_POLL_BACKOFF_CAP_MS, entry.effectiveInterval * 2 ** entry.consecutiveFailures);\n // Full jitter over the capped exponential, floored at the base interval so a\n // backed-off key never polls FASTER than its steady cadence.\n return entry.effectiveInterval + Math.floor(Math.random() * Math.max(0, base - entry.effectiveInterval));\n}\nfunction scheduleNext(entry, delayMs) {\n clearTimer(entry);\n if (entry.subscribers.size === 0)\n return;\n if (hidden)\n return; // paused; resume reschedules\n entry.timer = setTimeout(() => {\n entry.timer = null;\n void pollEntry(entry);\n }, delayMs);\n}\n// ---------------------------------------------------------------------------\n// Polling.\n// ---------------------------------------------------------------------------\nfunction pollEntry(entry) {\n if (entry.inFlight)\n return Promise.resolve(); // single-flight\n if (entry.subscribers.size === 0)\n return Promise.resolve();\n entry.inFlight = true;\n const gen = entry.generation;\n return runQuery(entry.path, entry.queryName, entry.args).then((value) => onPollResult(entry, gen, value, undefined), (error) => onPollResult(entry, gen, undefined, error));\n}\n// Staleness is caught by the per-entry generation (bumped on teardown/re-key) and\n// the registry identity check (the entry was removed/replaced) - so an old\n// principal's late result can never reach a re-keyed subscriber. No global epoch\n// is needed, which is why a plain reconnect (identity unchanged) is a no-op.\nfunction onPollResult(entry, gen, value, error) {\n var _a;\n entry.inFlight = false;\n const stale = gen !== entry.generation || registry.get(entry.key) !== entry;\n if (error !== undefined) {\n if (isQueryLevelError(error)) {\n // Query executed but this row errored (or was declined): transport is\n // healthy, so keep the steady cadence and reset backoff.\n entry.consecutiveFailures = 0;\n if (!stale) {\n if (!((error === null || error === void 0 ? void 0 : error.isQueryError) === true && (error === null || error === void 0 ? void 0 : error.message) === UNSUPPORTED_QUERY_SENTINEL)) {\n const phase = entry.hasValue ? 'refresh' : 'initial';\n // De-dupe: a permanently-broken query must not toast onError every\n // interval - fire only when the error (phase + message) changes.\n const sig = `${phase}\u0000${String((_a = (error && error.message)) !== null && _a !== void 0 ? _a : error)}`;\n if (entry.lastErrorSig !== sig) {\n entry.lastErrorSig = sig;\n const enriched = enrichError(error, phase, true);\n entry.lastError = enriched; // remembered so a late joiner learns it's broken (F6)\n for (const s of entry.subscribers)\n safeCall(s.onError, enriched);\n }\n }\n scheduleNext(entry, entry.effectiveInterval);\n }\n return;\n }\n // Transport-level rejection: back off. A RECOGNIZED transient (429/5xx/network/abort)\n // stays SILENT (surfacing it per-poll would rebuild the 429 noise); an UNRECOGNIZED\n // rejection (a bad path, a malformed response - things a retry won't fix) is surfaced\n // ONCE so the subscription is never silently dead. Both keep backing off in case it\n // was misclassified / recovers.\n entry.consecutiveFailures += 1;\n if (!stale) {\n if (!isTransientTransportError(error)) {\n fireEntryError(entry, error, entry.hasValue ? 'refresh' : 'initial', true);\n }\n scheduleNext(entry, backoffDelay(entry));\n }\n return;\n }\n entry.consecutiveFailures = 0;\n if (!stale) {\n entry.lastErrorSig = null; // a good result clears the error-dedup latch...\n entry.lastError = undefined; // ...and the remembered error (joiners no longer replay it)\n deliver(entry, value);\n scheduleNext(entry, entry.effectiveInterval);\n }\n}\n/**\n * Fire onError to all current subscribers, de-duped (a persistently-broken query must not\n * toast every interval) and REMEMBER the error so a late joiner with no value yet can learn\n * the query is broken instead of spinning forever (F6).\n */\nfunction fireEntryError(entry, error, phase, willRetry) {\n var _a;\n const sig = `${phase} ${String((_a = (error && error.message)) !== null && _a !== void 0 ? _a : error)}`;\n if (entry.lastErrorSig === sig)\n return;\n entry.lastErrorSig = sig;\n const enriched = enrichError(error, phase, willRetry);\n entry.lastError = enriched;\n for (const s of entry.subscribers)\n safeCall(s.onError, enriched);\n}\nfunction deliver(entry, value) {\n const canonical = canonicalizeResult(value);\n if (entry.hasValue && entry.lastCanonical === canonical)\n return; // no change\n entry.hasValue = true;\n entry.lastValue = value;\n entry.lastCanonical = canonical;\n for (const s of entry.subscribers)\n safeCall(s.onData, value);\n}\nfunction safeCall(fn, arg) {\n if (!fn)\n return;\n try {\n fn(arg);\n }\n catch (_a) {\n /* an app callback throwing must not break the fan-out loop */\n }\n}\n// ---------------------------------------------------------------------------\n// Attach / detach.\n// ---------------------------------------------------------------------------\nfunction createEntry(key, sub, identity) {\n return {\n key,\n appId: sub.appId,\n path: sub.path,\n queryName: sub.queryName,\n args: sub.args,\n identity,\n subscribers: new Set(),\n generation: 0,\n lastErrorSig: null,\n lastError: undefined,\n effectiveInterval: sub.intervalMs,\n timer: null,\n inFlight: false,\n consecutiveFailures: 0,\n hasValue: false,\n lastValue: undefined,\n lastCanonical: '',\n readyPromise: Promise.resolve(),\n };\n}\n/** Register (or re-register, on identity change) a subscriber under its current identity. */\nasync function attach(sub) {\n const identity = await currentIdentity(sub.appId);\n // The sub may have been unsubscribed / torn down WHILE we awaited identity. The\n // registry+generation staleness guards can't catch this because the entry would be\n // created fresh inside the race, so re-check here before touching the registry.\n if (sub.detached)\n return;\n const key = makeKey(sub.appId, sub.path, sub.queryName, sub.args, identity);\n let entry = registry.get(key);\n let created = false;\n if (!entry) {\n entry = createEntry(key, sub, identity);\n registry.set(key, entry);\n created = true;\n }\n entry.subscribers.add(sub);\n sub.entry = entry;\n recomputeInterval(entry);\n if (created) {\n // Eager initial fetch: do NOT wait a tick. The returned promise resolves\n // after the first fetch settles; an initial failure surfaces via onError\n // (phase 'initial') and still resolves - never leaves the sub in limbo.\n // While hidden, do NOT poll - stay registered so visibility-resume schedules\n // it (covers fresh-subscribe, reconcile re-key, and reattach-retry uniformly).\n if (hidden) {\n entry.readyPromise = Promise.resolve();\n return;\n }\n entry.readyPromise = pollEntry(entry);\n await entry.readyPromise;\n return;\n }\n if (entry.hasValue) {\n // Joiner of an established key gets the last good value immediately.\n safeCall(sub.onData, entry.lastValue);\n return;\n }\n if (entry.lastError) {\n // Joiner of a key that has NO value yet but is in a latched error state: replay the\n // error so a late-mounting component learns the query is broken instead of spinning\n // forever with neither data nor error (F6).\n safeCall(sub.onError, entry.lastError);\n }\n // Joined during the first in-flight fetch: piggyback it (deliver fans out to us).\n await entry.readyPromise;\n}\nfunction detach(sub) {\n const entry = sub.entry;\n if (!entry || !entry.subscribers.has(sub))\n return; // idempotent\n entry.subscribers.delete(sub);\n sub.entry = null;\n if (entry.subscribers.size === 0) {\n entry.generation += 1; // drop any in-flight result\n clearTimer(entry);\n if (registry.get(entry.key) === entry)\n registry.delete(entry.key);\n }\n else {\n recomputeInterval(entry);\n }\n}\n// ---------------------------------------------------------------------------\n// Public API.\n// ---------------------------------------------------------------------------\n/**\n * Subscribe to the live value of a named (computed) query.\n *\n * @param path - The document path the query is declared on (e.g. 'market/mytoken').\n * @param queryName - The named query to run (e.g. 'tokensForOneSol').\n * @param args - Query arguments (canonicalized; drives the dedupe key).\n * @param options - onData/onError callbacks and optional intervalMs; a bare\n * function is coerced to `{ onData }` (mirrors subscribe()).\n * @returns An async unsubscribe function.\n *\n * @example\n * ```typescript\n * const unsubscribe = await subscribeQuery('market/mytoken', 'tokensForOneSol', {}, {\n * onData: (price) => setPrice(price),\n * onError: (err) => { if (err.phase === 'initial') showSpinnerError(); },\n * });\n * await unsubscribe();\n * ```\n */\nexport async function subscribeQuery(path, queryName, args, options) {\n const opts = typeof options === 'function' ? { onData: options } : (options !== null && options !== void 0 ? options : {});\n const sub = {\n onData: opts.onData,\n onError: opts.onError,\n intervalMs: clampInterval(opts.intervalMs),\n appId: clientConfig.appId, // v1 single-app: see QuerySubscriptionOptions\n path,\n queryName,\n args,\n entry: null,\n detached: false,\n reattachTimer: null,\n };\n liveSubscribers.add(sub);\n try {\n await attach(sub);\n }\n catch (error) {\n // Initial identity resolution threw (auth flux) - do not leak the sub into\n // liveSubscribers (it holds the app's callbacks). The caller gets the rejection\n // and no unsubscribe handle, so retire it here. (reattach tolerates this on the\n // re-key path; the initial path must too.)\n stopSubscriber(sub);\n throw error;\n }\n return async () => {\n stopSubscriber(sub); // mark detached + cancel any pending re-key retry\n detach(sub);\n };\n}\n/** Permanently retire a subscriber: no future re-key retry can revive it. */\nfunction stopSubscriber(sub) {\n sub.detached = true;\n if (sub.reattachTimer) {\n clearTimeout(sub.reattachTimer);\n sub.reattachTimer = null;\n }\n liveSubscribers.delete(sub);\n}\n/**\n * Wired to the SDK's auth-change chokepoint (operations.clearReadCacheForAuthChange,\n * driven by reconnectWithNewAuth). That chokepoint fires on ANY reconnect - including\n * a transient browser `online` nudge - not only on a real identity change, so this\n * MUST be idempotent when the principal is unchanged: it re-resolves identity per\n * key and re-keys ONLY the entries whose principal actually changed, preserving the\n * timer and backoff of every unchanged entry (otherwise a flaky connection would\n * rebuild the exact 429 re-poll storm this feature removes).\n */\nexport function notifyQueryAuthChanged() {\n void reconcileIdentity();\n}\nasync function reconcileIdentity() {\n var _a;\n const resolvedByApp = new Map();\n for (const entry of [...registry.values()]) {\n // The entry may have been torn down while we awaited a prior identity.\n if (registry.get(entry.key) !== entry || entry.subscribers.size === 0)\n continue;\n let current = (_a = resolvedByApp.get(entry.appId)) !== null && _a !== void 0 ? _a : null;\n if (!current) {\n try {\n current = await currentIdentity(entry.appId);\n resolvedByApp.set(entry.appId, current);\n }\n catch (_b) {\n // Could not resolve the current identity (e.g. getIdToken threw during\n // an auth-state flux). Treat identity as UNKNOWN and re-key\n // conservatively below - reattach() retries until it resolves, so we\n // neither leak the previous principal's data nor freeze the sub.\n current = null;\n }\n }\n if (registry.get(entry.key) !== entry)\n continue; // re-check across the await\n if (current && current.bucket === entry.identity.bucket && current.token === entry.identity.token) {\n continue; // identity unchanged - keep the entry, its timer, and its backoff\n }\n // Identity changed (or is momentarily unresolvable): drop the entry (its in-flight\n // result is caught by the generation + registry staleness checks) and re-key its\n // subscribers under the new principal. reattach() owns the eager fetch AND a retry,\n // so a transient failure here can never silently orphan a live subscription.\n const subs = [...entry.subscribers].filter((s) => s.entry === entry);\n entry.generation += 1;\n clearTimer(entry);\n // Only delete if THIS entry still owns the key - a replacement entry may have taken\n // it over while we awaited identity (line 499 guards the same window; mirror the\n // check at the delete site so it stays correct if code is inserted between them).\n if (registry.get(entry.key) === entry)\n registry.delete(entry.key);\n for (const s of subs) {\n s.entry = null;\n reattach(s);\n }\n }\n}\n/**\n * Re-register a re-keyed subscriber under its current identity, retrying on failure.\n * A re-keyed subscriber has already been removed from the registry, so if attach()\n * fails there is no other path that would ever bring it back - reattach() IS that\n * path. It stops only when the subscriber re-attaches or the caller unsubscribes.\n */\nfunction reattach(sub) {\n sub.reattachTimer = null; // this run consumes any scheduled retry\n if (sub.detached)\n return;\n attach(sub).then(() => {\n // The caller may have unsubscribed (or the manager been torn down) while this\n // attach was in flight; if so, tear the freshly-revived entry back down instead\n // of leaving a zombie poll.\n if (sub.detached)\n detach(sub);\n }, () => {\n if (sub.detached)\n return;\n sub.reattachTimer = setTimeout(() => reattach(sub), REATTACH_RETRY_MS);\n });\n}\n/** Tear down every query subscription: cancel timers, clear the registry. */\nexport function closeAllQuerySubscriptions() {\n // Retire EVERY live subscriber first (including any detached mid-re-key and waiting\n // on a retry) so a pending reattach can never revive polling after teardown.\n for (const sub of [...liveSubscribers])\n stopSubscriber(sub);\n liveSubscribers.clear();\n for (const entry of registry.values()) {\n entry.generation += 1;\n clearTimer(entry);\n entry.subscribers.clear();\n }\n registry.clear();\n}\n// ---------------------------------------------------------------------------\n// Visibility (pause polling while hidden; single realigned refresh on resume).\n// ---------------------------------------------------------------------------\nfunction setHidden(next) {\n if (next === hidden)\n return;\n hidden = next;\n if (hidden) {\n for (const entry of registry.values())\n clearTimer(entry);\n return;\n }\n // Resume: one refresh per key at a small jitter so N keys don't burst-sync;\n // single-flight collapses it with any still-outstanding poll, and the recurring\n // tick is (re)scheduled by that poll's completion - so exactly one POST resumes.\n // A key that was BACKING OFF resumes on its remaining backoff, not the jitter, so a\n // hide/resume can't be used to bypass 429 throttling.\n for (const entry of registry.values()) {\n const delay = entry.consecutiveFailures > 0\n ? backoffDelay(entry)\n : Math.floor(Math.random() * RESUME_JITTER_MS);\n scheduleNext(entry, delay);\n }\n}\nif (typeof document !== 'undefined' && typeof document.addEventListener === 'function') {\n hidden = !!document.hidden;\n document.addEventListener('visibilitychange', () => {\n setHidden(!!document.hidden);\n });\n}\n// Auto-wire the identity-change signal to the SDK's existing chokepoint.\nonReadCacheAuthChange(notifyQueryAuthChanged);\n// ---------------------------------------------------------------------------\n// Test-only hooks (never part of the public surface).\n// ---------------------------------------------------------------------------\n/** @internal Reset all manager state between test scenarios. */\nexport function __resetForTest() {\n closeAllQuerySubscriptions();\n hidden = false;\n}\n/** @internal Force an out-of-band tick on a key (single-flight assertions). Returns whether a matching entry was found. */\nexport function __pollNowForTest(appId, path, queryName, args, identity) {\n const entry = registry.get(makeKey(appId, path, queryName, args, identity));\n if (!entry)\n return false;\n void pollEntry(entry);\n return true;\n}\n/** @internal Drive visibility without a DOM. */\nexport function __setVisibilityForTest(nextHidden) {\n setHidden(nextHidden);\n}\n/** @internal Snapshot registry state for assertions. */\nexport function __inspectForTest() {\n return { keys: [...registry.keys()], hidden, liveSubscribers: liveSubscribers.size };\n}\n","// ---------------------------------------------------------------------------\n// field-values.ts -- Server-resolved field-value operations for set()/setMany().\n//\n// A field in a write payload may be a plain value OR an \"operation object\" that\n// the server resolves atomically when the write commits:\n//\n// set(\"counters/likes\", { n: increment(1) }) // atomic server-side +1\n// set(\"posts/p1\", { createdAt: serverTimestamp() }) // server unix-seconds clock\n//\n// The Durable Object serializes writes per room, so concurrent increments never\n// lose updates (verified: 20 concurrent +1 -> exactly 20). These helpers just\n// construct the operation objects the worker's resolveOperationFields understands\n// (and which the optimistic store mirrors locally), so prefer them over writing\n// `{ operation: \"increment\", value: 1 }` by hand.\n// ---------------------------------------------------------------------------\n/**\n * Atomically add `value` to a numeric field when the write commits, server-side.\n * Use a negative `value` to decrement. The field starts from 0 if the document\n * (or field) does not exist yet. Concurrent increments are race-free.\n *\n * await set(\"counters/likes\", { n: increment(1) });\n * await set(\"scores/p1\", { points: increment(-5) });\n */\nexport function increment(value) {\n return { operation: 'increment', value };\n}\n/**\n * Stamp a field with the server's clock (Unix seconds) when the write commits —\n * the trustworthy \"when did this happen\" you can't get from a client clock.\n *\n * await set(\"posts/p1\", { createdAt: serverTimestamp() });\n */\nexport function serverTimestamp() {\n return { operation: 'time', value: 'now' };\n}\n","/**\n * Time units in Bounded — read this once and never get a 1000× timestamp bug.\n *\n * **Bounded's policy/proof layer is Unix SECONDS.** `@time.now` in a rule,\n * `rollingSum` `windowSeconds`, `scheduledAt`, and any timestamp *field your\n * policy compares against `@time.now`* are all **seconds**. (This is also what\n * the chain uses — Solana's on-chain clock is `unix_timestamp` in seconds — so a\n * single seconds unit works for both onchain and offchain rules.)\n *\n * **JavaScript is MILLISECONDS.** `Date.now()`, `new Date().getTime()`, and the\n * auto-stamped system fields `_createdAt` / `_updatedAt` are all **ms**.\n *\n * Comparing across the two (e.g. `@time.now - myField` where `myField` was set\n * from `Date.now()`) is 1000× off, so a freshness / TTL check silently treats\n * every row as ancient (or far-future) and drops it — which reads as \"realtime\n * isn't delivering\" when the data is actually fine.\n *\n * **The rules:**\n * - To **write** a timestamp a policy will read, prefer **`serverTimestamp()`**\n * (from this package) — the *server* stamps it in seconds, so it matches\n * `@time.now` AND can't be forged by the client (use it for TTLs, rate windows,\n * anti-cheat). Use `now()` only when you need the value in client code before\n * the write.\n * - To **compare** timestamps in client/render code, use `now()` (seconds), not\n * `Date.now()` (ms), and `toSeconds()` to convert the ms system fields\n * (`_createdAt`/`_updatedAt`) or any `Date.now()` value first.\n */\n/**\n * Current time as a **Unix timestamp in seconds** — the unit Bounded policy rules\n * use (`@time.now`). Use this (not `Date.now()`) when you need a timestamp in\n * client code (e.g. a freshness check). For a value you *store* and a policy\n * reads, prefer the server-authoritative {@link serverTimestamp} instead.\n *\n * ```ts\n * // stale if >15s old — seconds vs seconds ✓\n * if (now() - doc.lastSeenSeconds > 15) renderStale();\n * ```\n */\nexport function now() {\n return Math.floor(Date.now() / 1000);\n}\n/**\n * Convert a JavaScript millisecond timestamp to Bounded's **seconds**. Accepts a\n * `Date`, or an ms number such as `Date.now()` or a doc's `_createdAt` /\n * `_updatedAt` system field.\n *\n * ```ts\n * // doc is >15s old (compare the ms system field in seconds):\n * if (now() - toSeconds(doc._updatedAt) > 15) renderStale();\n * ```\n */\nexport function toSeconds(msOrDate) {\n const ms = msOrDate instanceof Date ? msOrDate.getTime() : msOrDate;\n return Math.floor(ms / 1000);\n}\n/**\n * Convert a Bounded **seconds** timestamp back to JavaScript **milliseconds** —\n * e.g. to build a `Date` or do client-side date math/formatting.\n *\n * ```ts\n * new Date(toMillis(doc.createdAtSeconds)).toLocaleString();\n * ```\n */\nexport function toMillis(seconds) {\n return seconds * 1000;\n}\n","/** SIWS message creation is async already, so its onchain module can be lazy. */\nexport async function genSolanaMessage(address, nonce) {\n const implementation = await import(\"./solana-message\");\n return implementation.genSolanaMessage(address, nonce);\n}\n","// ---------------------------------------------------------------------------\n// functions.ts -- Bounded Functions client (the imperative escape hatch).\n//\n// `bounded.functions.invoke(name, args, opts?)` POSTs to the dispatcher's\n// /invoke endpoint, attaching the caller's session token AUTOMATICALLY (the\n// exact same token the SDK uses for data reads/writes). Works client + server.\n// The dispatcher verifies the token, evaluates the function's `auth` policy\n// rule, and dispatches to the function — returning its JSON, or throwing on\n// 403 / error.\n// ---------------------------------------------------------------------------\nvar __rest = (this && this.__rest) || function (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};\nimport { getConfig } from './config';\nimport { createAuthHeader } from '../utils/utils';\n/** Prod functions dispatcher; overridable via init({ functionsUrl }) or network preset. */\nconst DEFAULT_FUNCTIONS_URL = 'https://functions.bounded.sh';\nexport class FunctionInvokeError extends Error {\n constructor(message, statusCode, details) {\n super(message);\n this.statusCode = statusCode;\n this.details = details;\n this.name = 'FunctionInvokeError';\n }\n}\nfunction stripAuthHeaders(headers) {\n if (!headers)\n return undefined;\n const { Authorization, authorization } = headers, rest = __rest(headers, [\"Authorization\", \"authorization\"]);\n return Object.keys(rest).length > 0 ? rest : undefined;\n}\n/**\n * Invoke a deployed Bounded Function by name. Returns the function's JSON.\n *\n * const res = await bounded.functions.invoke('syncStripe', { customerId });\n *\n * Throws FunctionInvokeError on 401 (not logged in / bad token), 403 (the\n * function's auth policy rule denied this caller), 404 (unknown function),\n * 503 (Workers for Platforms not configured), or any non-2xx / transport error.\n */\nexport async function invoke(name, args = {}, opts = {}) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n if (!name || typeof name !== 'string') {\n throw new FunctionInvokeError('A function name is required');\n }\n // A server WalletClient passes its immutable config snapshot; the default path\n // (browser + top-level server) reads the mutable process-global init() config.\n const config = (_b = (_a = opts._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n const base = (config.functionsUrl || DEFAULT_FUNCTIONS_URL).replace(/\\/$/, '');\n // Attach the caller's session token automatically (same token as data calls).\n // A wallet-scoped call (server WalletClient.invoke) resolves the token from the\n // wallet's own session; browser calls use the active web session. Top-level\n // server calls fail closed because there is no ambient server signer.\n const authHeader = ((_c = opts._overrides) === null || _c === void 0 ? void 0 : _c._getAuthHeaders)\n ? await opts._overrides._getAuthHeaders()\n : await createAuthHeader(config.isServer);\n const headers = Object.assign(Object.assign({ 'Content-Type': 'application/json', 'X-App-Id': config.appId }, ((_d = stripAuthHeaders(opts.headers)) !== null && _d !== void 0 ? _d : {})), (authHeader !== null && authHeader !== void 0 ? authHeader : {}));\n const controller = new AbortController();\n const timeoutMs = (_e = opts.timeoutMs) !== null && _e !== void 0 ? _e : 60000;\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n // `fetch` resolves as soon as the response HEADERS arrive, not when the body\n // has been received, so the abort timer must stay armed across `res.text()`\n // too. Clearing it in a `finally` that covers both the fetch AND the body read\n // means a dispatcher/network that returns headers then stalls (or drip-feeds)\n // the body is torn down at `timeoutMs` instead of leaving `invoke` pending\n // forever and accumulating open connections (DS3-0432).\n let res;\n let text;\n try {\n res = await fetch(`${base}/invoke`, {\n method: 'POST',\n headers,\n body: JSON.stringify({ appId: config.appId, functionName: name, args }),\n signal: controller.signal,\n });\n text = await res.text();\n }\n catch (err) {\n if ((err === null || err === void 0 ? void 0 : err.name) === 'AbortError') {\n throw new FunctionInvokeError(`Function \"${name}\" invocation timed out after ${timeoutMs}ms`);\n }\n throw new FunctionInvokeError(`Failed to reach the functions dispatcher: ${(_f = err === null || err === void 0 ? void 0 : err.message) !== null && _f !== void 0 ? _f : String(err)}`);\n }\n finally {\n clearTimeout(timer);\n }\n let body = null;\n if (text) {\n try {\n body = JSON.parse(text);\n }\n catch (_j) {\n body = { raw: text };\n }\n }\n if (!res.ok) {\n const message = (_h = (_g = body === null || body === void 0 ? void 0 : body.error) !== null && _g !== void 0 ? _g : body === null || body === void 0 ? void 0 : body.message) !== null && _h !== void 0 ? _h : `Function \"${name}\" failed with HTTP ${res.status}`;\n throw new FunctionInvokeError(message, res.status, body);\n }\n // The dispatcher returns the function's JSON directly.\n return body;\n}\n/** The `bounded.functions` namespace surface. */\nexport const functions = { invoke };\n","// ---------------------------------------------------------------------------\n// live.ts -- Bounded Live client (drive a server-authoritative room).\n//\n// A Bounded \"live\" room is a native module (init/tick/views) loaded into an\n// isolated Durable Object facet inside the per-room DO. The worker runs tick\n// ~30Hz server-authoritatively and fans per-player views out on an ephemeral\n// collection. This file is the consumer surface around that runtime:\n//\n// bounded.live.intent(roomPath, intent) -> POST {realtime}/live/intent\n// bounded.live.status(roomPath) -> GET {realtime}/live/status\n//\n// It mirrors `functions.invoke` exactly: it attaches the caller's session token\n// AUTOMATICALLY (the same token the SDK uses for data reads/writes), and throws\n// a typed error on any non-2xx / transport / timeout.\n//\n// The runtime serves any server-authoritative realtime room (Figma clones,\n// editors, dashboards, multiplayer games, ...). Games remain a valid use case;\n// the primitive itself is just \"live\".\n//\n// Addressing: clients address rooms BY PATH (the `path` field in the body). The\n// worker derives the roomId from `body.path` and sets X-Room-Id internally;\n// clients NEVER set X-Room-Id. The caller's address is taken server-side from\n// the Authorization header (auth.userId/userAddress) — it is NOT sent in the\n// body.\n//\n// Subscribing to your view: a per-player view doc lives at\n// `<roomPath>/view/<myUserId>` (the policy declares\n// `rooms/$roomId/view/$userId` ephemeral with `read: $userId == @user.id`).\n// View paths key only by @user.id; wallet-address aliases are intentionally not\n// accepted by this helper.\n// ---------------------------------------------------------------------------\nimport { getConfig } from './config';\nimport { createAuthHeader, getUserInfo } from '../utils/utils';\nimport { subscribeV2, wsIntent, wsIntentReliable } from './subscription-v2';\nimport { deriveDecline, dispatchDeclineEvent } from './decline';\nexport class LiveIntentError extends Error {\n constructor(message, statusCode, details) {\n super(message);\n this.statusCode = statusCode;\n this.details = details;\n this.name = 'LiveIntentError';\n }\n}\n/**\n * Derive the realtime worker's HTTP base from the configured WS API URL.\n * The realtime worker serves both WS and HTTP on the same host, so we reuse\n * `config.wsApiUrl` (wss:// -> https://, ws:// -> http://). The data API\n * (`config.apiUrl`) is a DIFFERENT host and must NOT be used for /live/*.\n */\nfunction realtimeHttpBase(wsApiUrl) {\n const url = new URL(wsApiUrl);\n if (url.protocol === 'wss:')\n url.protocol = 'https:';\n else if (url.protocol === 'ws:')\n url.protocol = 'http:';\n // Strip trailing slash from the resulting origin+path.\n return url.toString().replace(/\\/$/, '');\n}\nfunction withoutAuthorization(headers) {\n if (!headers)\n return undefined;\n const clean = {};\n for (const [key, value] of Object.entries(headers)) {\n if (key.toLowerCase() === 'authorization')\n continue;\n clean[key] = value;\n }\n return Object.keys(clean).length > 0 ? clean : undefined;\n}\nfunction hasAuthorization(headers) {\n if (!headers)\n return false;\n return Object.entries(headers).some(([key, value]) => key.toLowerCase() === 'authorization' &&\n typeof value === 'string' &&\n /^Bearer\\s+\\S+$/i.test(value.trim()));\n}\nasync function liveAuthHeader(configIsServer, overrides) {\n if (overrides === null || overrides === void 0 ? void 0 : overrides._getAuthHeaders) {\n return overrides._getAuthHeaders();\n }\n return createAuthHeader(configIsServer);\n}\n/**\n * Send a player intent to a running live room. Returns `{ ok: true }`.\n *\n * await bounded.live.intent('rooms/abc', { type: 'move', dir: 'up' });\n *\n * `roomPath` is the document path of the room (e.g. `rooms/abc`). The worker\n * derives the room from this path and reads `intent` as the opaque per-tick\n * input. The caller's address is taken from the attached session token.\n *\n * Throws LiveIntentError on 401 (not logged in / bad token), 404 (room has no\n * live module), 503 (live runtime/module unavailable), or any non-2xx /\n * transport error / timeout.\n */\nexport async function intent(roomPath, intent, opts = {}) {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n if (!roomPath || typeof roomPath !== 'string') {\n throw new LiveIntentError('A room path is required');\n }\n // A server WalletClient passes its immutable config snapshot; the default path\n // reads the mutable process-global init() config. This keeps a wallet client's\n // live intents on its original app/realtime endpoint after a later global\n // init() (CTA-05).\n const config = (_b = (_a = opts._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n const initialAuthHeader = await liveAuthHeader(config.isServer, opts._overrides);\n if (!hasAuthorization(initialAuthHeader)) {\n if (opts.fireAndForget)\n return { ok: true };\n throw new LiveIntentError('Authentication required to send a live intent. Call init() and sign in before sending live room intents.', 401);\n }\n // Ride the already-open per-room socket instead of a fresh HTTP POST per\n // intent. That is what makes high-frequency input (~20-30Hz) cheap — one\n // persistent connection, no per-intent TCP/TLS or connection-pool contention\n // (which was head-of-line-blocking the view stream). The worker is the room\n // authority (the connection is routed to the room DO), so we pass no\n // destination.\n //\n // - fireAndForget: send and return immediately (lowest latency for inputs).\n // - default: send WITH a requestId and AWAIT the ack, so a policy/auth deny\n // (401/403/404/503) REJECTS — important intents (join/ready) must not\n // silently \"succeed\".\n //\n // Either way we fall back to HTTP below only when no live socket exists yet\n // (e.g. the first join before subscribeView's WS connects) — HTTP also throws\n // on a non-2xx, so errors are surfaced there too.\n const normalizedRoomPath = roomPath.replace(/\\/$/, '');\n const hasAuthOverride = !!((_c = opts._overrides) === null || _c === void 0 ? void 0 : _c._getAuthHeaders);\n if (!hasAuthOverride) {\n if (opts.fireAndForget) {\n if (await wsIntent(config.appId, normalizedRoomPath, intent, config.isServer))\n return { ok: true };\n }\n else {\n const ack = await wsIntentReliable(config.appId, normalizedRoomPath, intent, config.isServer);\n if (ack)\n return ack;\n }\n }\n const base = realtimeHttpBase(config.wsApiUrl);\n const extraHeaders = withoutAuthorization(opts.headers);\n const overrideHeaders = withoutAuthorization((_d = opts._overrides) === null || _d === void 0 ? void 0 : _d.headers);\n const buildHeaders = async () => {\n const authHeader = await liveAuthHeader(config.isServer, opts._overrides);\n if (!hasAuthorization(authHeader)) {\n throw new LiveIntentError('Authentication required to send a live intent. Call init() and sign in before sending live room intents.', 401);\n }\n return Object.assign(Object.assign(Object.assign({ 'Content-Type': 'application/json', 'X-App-Id': config.appId }, (overrideHeaders !== null && overrideHeaders !== void 0 ? overrideHeaders : {})), (extraHeaders !== null && extraHeaders !== void 0 ? extraHeaders : {})), (authHeader !== null && authHeader !== void 0 ? authHeader : {}));\n };\n const controller = new AbortController();\n const timeoutMs = (_e = opts.timeoutMs) !== null && _e !== void 0 ? _e : 60000;\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n let res;\n try {\n const send = async () => fetch(`${base}/live/intent`, {\n method: 'POST',\n headers: await buildHeaders(),\n body: JSON.stringify({ path: normalizedRoomPath, intent }),\n signal: controller.signal,\n });\n res = await send();\n if (res.status === 401 && ((_f = opts._overrides) === null || _f === void 0 ? void 0 : _f._clearAuth)) {\n await opts._overrides._clearAuth();\n res = await send();\n }\n }\n catch (err) {\n clearTimeout(timer);\n if (err instanceof LiveIntentError)\n throw err;\n if ((err === null || err === void 0 ? void 0 : err.name) === 'AbortError') {\n throw new LiveIntentError(`Live intent to \"${roomPath}\" timed out after ${timeoutMs}ms`);\n }\n throw new LiveIntentError(`Failed to reach the realtime worker: ${(_g = err === null || err === void 0 ? void 0 : err.message) !== null && _g !== void 0 ? _g : String(err)}`);\n }\n clearTimeout(timer);\n let body = null;\n const text = await res.text();\n if (text) {\n try {\n body = JSON.parse(text);\n }\n catch (_k) {\n body = { raw: text };\n }\n }\n if (!res.ok) {\n const message = (_j = (_h = body === null || body === void 0 ? void 0 : body.error) !== null && _h !== void 0 ? _h : body === null || body === void 0 ? void 0 : body.message) !== null && _j !== void 0 ? _j : `Live intent failed with HTTP ${res.status}`;\n const liveError = new LiveIntentError(message, res.status, body);\n // A policy/invariant denial of a live intent carries the same structured\n // decline as the data-write path. Mirror `.decline` onto the LiveIntentError\n // (its name/contract is unchanged) and notify the browser widget.\n const decline = deriveDecline(body, res.status);\n if (decline) {\n liveError.decline = decline;\n liveError.isBoundedDecline = true;\n dispatchDeclineEvent(decline, config.appId);\n }\n throw liveError;\n }\n return (body !== null && body !== void 0 ? body : { ok: true });\n}\n/**\n * Fetch the runtime status for a live room.\n *\n * const s = await bounded.live.status('rooms/abc');\n * console.log(s.running, s.stopReason, s.generation, s.etag);\n *\n * This is diagnostic/ops surface. It reports whether the room facet exists,\n * whether it is currently ticking, why it last stopped, which module etag is\n * loaded, and the current generation used after terminal restarts.\n *\n * Auth: status attaches the caller's session token WHEN ONE EXISTS (mirroring\n * `intent`), but does NOT require it. The server gates the DETAILED body on the\n * room's read rule — an authenticated caller who can read the room gets full\n * telemetry; an anonymous / unauthorized caller gets only the slim liveness\n * shape `{available, started, module}` (#102). The caller's own `opts.headers`\n * may never smuggle in Authorization: only the derived session token sets it.\n */\nexport async function status(roomPath, opts = {}) {\n var _a, _b, _c, _d, _e, _f, _g;\n if (!roomPath || typeof roomPath !== 'string') {\n throw new LiveIntentError('A room path is required');\n }\n const normalizedRoomPath = roomPath.replace(/\\/$/, '');\n // Honor a wallet client's immutable config snapshot (CTA-05); otherwise read\n // the mutable process-global init() config.\n const config = (_b = (_a = opts._overrides) === null || _a === void 0 ? void 0 : _a._config) !== null && _b !== void 0 ? _b : await getConfig();\n const base = realtimeHttpBase(config.wsApiUrl);\n const authHeader = await liveAuthHeader(config.isServer, opts._overrides);\n const extraHeaders = withoutAuthorization(opts.headers);\n const overrideHeaders = withoutAuthorization((_c = opts._overrides) === null || _c === void 0 ? void 0 : _c.headers);\n const headers = Object.assign(Object.assign(Object.assign({ 'X-App-Id': config.appId }, (overrideHeaders !== null && overrideHeaders !== void 0 ? overrideHeaders : {})), (extraHeaders !== null && extraHeaders !== void 0 ? extraHeaders : {})), (hasAuthorization(authHeader) ? authHeader : {}));\n const controller = new AbortController();\n const timeoutMs = (_d = opts.timeoutMs) !== null && _d !== void 0 ? _d : 15000;\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n let res;\n try {\n res = await fetch(`${base}/live/status?path=${encodeURIComponent(normalizedRoomPath)}`, {\n method: 'GET',\n headers,\n signal: controller.signal,\n });\n }\n catch (err) {\n clearTimeout(timer);\n if ((err === null || err === void 0 ? void 0 : err.name) === 'AbortError') {\n throw new LiveIntentError(`Live status for \"${normalizedRoomPath}\" timed out after ${timeoutMs}ms`);\n }\n throw new LiveIntentError(`Failed to reach the realtime worker: ${(_e = err === null || err === void 0 ? void 0 : err.message) !== null && _e !== void 0 ? _e : String(err)}`);\n }\n clearTimeout(timer);\n let body = null;\n const text = await res.text();\n if (text) {\n try {\n body = JSON.parse(text);\n }\n catch (_h) {\n body = { raw: text };\n }\n }\n if (!res.ok) {\n const message = (_g = (_f = body === null || body === void 0 ? void 0 : body.error) !== null && _f !== void 0 ? _f : body === null || body === void 0 ? void 0 : body.message) !== null && _g !== void 0 ? _g : `Live status failed with HTTP ${res.status}`;\n throw new LiveIntentError(message, res.status, body);\n }\n return body;\n}\n/**\n * Subscribe to YOUR per-player view of a room. Thin sugar over:\n *\n * subscribe('<roomPath>/view/<myUserId>', { onData, onError })\n *\n * The view id defaults to the logged-in user's @user.id (from the session token\n * claims); pass `opts.userId` to override. Returns the unsubscribe function\n * (a Promise<() => Promise<void>>, same as `subscribe`).\n *\n * Server/agent consumers: use `WalletClient.live.subscribeView` (it supplies\n * the wallet session + view id); browser apps just call this directly.\n */\nexport async function subscribeView(roomPath, opts) {\n if (!roomPath || typeof roomPath !== 'string') {\n throw new LiveIntentError('A room path is required');\n }\n if (!opts || typeof opts.onData !== 'function') {\n throw new LiveIntentError('subscribeView requires an onData callback');\n }\n let viewUserId = opts.userId;\n if (!viewUserId) {\n const config = await getConfig();\n const info = await getUserInfo(config.isServer);\n // getUserInfo returns the RAW idToken payload. The universal live view key\n // is @user.id (`custom:userId`); wallet-address keyed compatibility aliases\n // are intentionally not accepted.\n viewUserId = info === null || info === void 0 ? void 0 : info['custom:userId'];\n }\n if (!viewUserId || typeof viewUserId !== 'string') {\n throw new LiveIntentError('Could not resolve a player view id for subscribeView; pass opts.userId or log in first');\n }\n const normalizedRoomPath = roomPath.replace(/\\/$/, '');\n const viewPath = `${normalizedRoomPath}/view/${viewUserId}`;\n // This is a LIVE/room subscription by construction (the caller hands us the\n // room path), so we route its connection to the per-room DO where the live\n // view fan-out runs. App code passes NO routing — the room path is the helper's\n // own argument, and the worker stays the authority on the destination DO (it\n // derives the room from the `?path=` the connection carries). Without this the\n // subscription lands on the app-level project DO and never sees the room's\n // ephemeral view writes.\n return subscribeV2(viewPath, { onData: opts.onData, onError: opts.onError, _overrides: opts._overrides }, normalizedRoomPath);\n}\n/** The `bounded.live` namespace surface. */\nexport const live = { intent, status, subscribeView };\n","// ---------------------------------------------------------------------------\n// live-effects.ts -- AUTHOR-facing types + helpers for writing a Bounded live\n// module that emits EFFECTS (call an LLM for an AI NPC, run a function, settle a\n// transaction, write authoritative data) from its otherwise-pure tick.\n//\n// The tick stays a PURE, synchronous reducer: it cannot call out. Instead it\n// EMITS effects as data alongside the next state; the platform runs them off the\n// deterministic loop and re-injects each result as a recorded `@effect` intent on\n// a later tick — so replay stays bit-identical (it reads the recorded result and\n// never re-executes/re-charges). See BOUNDED-LIVE-EFFECTS-SPEC.md §3/§9.\n//\n// SOURCE OF TRUTH for these contracts is the runtime core\n// (realtime-worker/src/effects-core.ts). This module mirrors the AUTHOR-facing\n// subset for the SDK (the two are kept structurally identical by the shared spec).\n// ---------------------------------------------------------------------------\n/** Reserved intent address an effect result arrives on. */\nexport const EFFECT_INTENT_ADDRESS = \"@effect\";\n// ---------------------------------------------------------------------------\n// Ergonomic helpers\n// ---------------------------------------------------------------------------\n/**\n * Build the `{ state, effects }` tick return. Always include this (even with an\n * empty list) when you intend the wrapper, so the runtime never has to guess\n * whether your state object happens to look like the wrapper.\n *\n * return withEffects(next, [{ kind: \"ai\", id: `npc:${id}:${next.turn}`, model, input }]);\n */\nexport function withEffects(state, effects = []) {\n return { state, effects };\n}\n/**\n * Narrow an incoming intent to an effect result inside your tick:\n *\n * for (const i of intents) {\n * if (i.address === EFFECT_INTENT_ADDRESS && isEffectResult(i.intent)) {\n * applyResult(state, i.intent); // i.intent.effectId / .ok / .result / .error\n * } else { applyPlayerIntent(state, i); }\n * }\n */\nexport function isEffectResult(intent) {\n return (!!intent &&\n typeof intent === \"object\" &&\n intent.__effect === true &&\n typeof intent.effectId === \"string\" &&\n typeof intent.ok === \"boolean\");\n}\n/** Identity helper purely for type inference when authoring a module. */\nexport function defineLiveModule(mod) {\n return mod;\n}\n"],"names":["isRetryAllowed","require$$0","require$$1","exports","Buffer","hashForKey","principalFromIdToken","this"],"mappings":"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","x_google_ignoreList":[1,2,11,12,13]}