@continuumdao/ctm-mpc-defi 0.2.44 → 0.2.46
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.
- package/dist/agent/catalog.cjs +144 -8
- package/dist/agent/catalog.cjs.map +1 -1
- package/dist/agent/catalog.d.ts +217 -1
- package/dist/agent/catalog.js +140 -9
- package/dist/agent/catalog.js.map +1 -1
- package/dist/agent/skills/continuum-dao/SKILL.md +1 -1
- package/dist/agent/skills/hyperliquid/SKILL.md +32 -2
- package/dist/agent/skills/yield-compare/SKILL.md +4 -1
- package/dist/protocols/evm/continuum-dao/index.cjs +75 -13
- package/dist/protocols/evm/continuum-dao/index.cjs.map +1 -1
- package/dist/protocols/evm/continuum-dao/index.d.ts +45 -6
- package/dist/protocols/evm/continuum-dao/index.js +70 -14
- package/dist/protocols/evm/continuum-dao/index.js.map +1 -1
- package/dist/protocols/evm/hyperliquid/index.cjs +320 -0
- package/dist/protocols/evm/hyperliquid/index.cjs.map +1 -1
- package/dist/protocols/evm/hyperliquid/index.d.ts +153 -1
- package/dist/protocols/evm/hyperliquid/index.js +303 -1
- package/dist/protocols/evm/hyperliquid/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/chains/evm/chainIdParse.ts","../../../../src/protocols/evm/continuum-dao/constants.ts","../../../../src/protocols/evm/continuum-dao/escrowRules.ts","../../../../src/core/defiEvmClient.ts","../../../../src/protocols/evm/continuum-dao/escrowPreflight.ts","../../../../src/protocols/evm/continuum-dao/attachGroup.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/protocols/evm/continuum-dao/multisign.ts","../../../../src/core/eip712Multisign.ts","../../../../src/protocols/evm/continuum-dao/forum.ts","../../../../src/protocols/evm/continuum-dao/governance.ts","../../../../src/protocols/evm/continuum-dao/explainProposal.ts","../../../../src/protocols/evm/continuum-dao/index.ts"],"names":["zeroAddress","getAddress","http","parseAbi","createPublicClient","defineChain","getClientIdFromKeyGenResult","gasLimitFromEstimateAndChainConfig","publicClient","fetchChainFeeParams","parseGwei","gweiToDecimalString","serializeTransaction","proposalTxParamsToFeeSnapshot","alignEip1559FeesWithLatestBase","keccak256","erc20Abi","encodeFunctionData","parseUnits","veReadAbi","stringToHex","hashTypedData","typeLabel","encodePacked","padHex","toHex","meta","asRecord"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","/** Parse chain id for comparisons (decimal, 0x hex, CAIP-2 eip155:N, bigint). */\nexport function parseEvmChainIdToNumber(chainId: string | number | bigint | null | undefined): number {\n if (chainId == null) return Number.NaN\n if (typeof chainId === 'bigint') {\n const n = Number(chainId)\n return Number.isSafeInteger(n) && n >= 0 ? n : Number.NaN\n }\n if (typeof chainId === 'number') {\n return Number.isInteger(chainId) && chainId >= 0 ? chainId : Number.NaN\n }\n const t = String(chainId).trim()\n if (!t) return Number.NaN\n const low = t.toLowerCase()\n if (low.startsWith('eip155:')) {\n const rest = t.slice('eip155:'.length).trim()\n const n = Number.parseInt(rest, 10)\n return Number.isNaN(n) || n < 0 ? Number.NaN : n\n }\n if (low.startsWith('0x')) {\n return Number.parseInt(t, 16)\n }\n return Number.parseInt(t, 10)\n}\n","/**\n * ContinuumDAO (CTM / veCTM) — Linea escrow + node attach, Ethereum CTM hold.\n * CTM and Linea VotingEscrow are configured on mainnet; other deployment fields\n * stay zero until redeployed. Callers must skip seed / write paths when\n * {@link isConfiguredAddress} is false.\n */\nimport { getAddress, zeroAddress } from 'viem'\nimport { parseEvmChainIdToNumber } from '../../../chains/evm/chainIdParse.js'\n\nexport const CONTINUUM_DAO_PROTOCOL_ID = 'continuum-dao'\n\nexport const CONTINUUM_DAO_ETHEREUM_CHAIN_ID = 1\nexport const CONTINUUM_DAO_LINEA_CHAIN_ID = 59144\nexport const CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID = 59141\n\nexport const CTM_TOKEN_NAME = 'Continuum'\nexport const CTM_TOKEN_SYMBOL = 'CTM'\nexport const VECTM_TOKEN_NAME = 'Voting Escrow Continuum'\nexport const VECTM_TOKEN_SYMBOL = 'veCTM'\nexport const CTM_TOKEN_DECIMALS = 18\n\nexport const WEEK_SECONDS = 7 * 86400\nexport const MAXTIME_SECONDS = 4 * 365 * 86400\n/** Node-app / MCP lock-duration cap (4 years floored to whole weeks). */\nexport const VECTM_MAX_LOCK_WEEKS = 208\n/** VotingEscrow.minimumLock default (1 CTM). Live value is read on-chain when available. */\nexport const VECTM_DEFAULT_MINIMUM_LOCK_WEI = 10n ** 18n\n/** VotingEscrow.liquidate — `value <= 100 gwei` reverts VotingEscrow_InvalidValue. */\nexport const VECTM_LIQ_MIN_LOCKED_WEI = 100n\nexport const VECTM_LIQ_PENALTY_NUM = 50_000n\nexport const VECTM_LIQ_PENALTY_DEN = 100_000n\n\nexport type ContinuumDaoDeployment = {\n ctm: `0x${string}`\n votingEscrow: `0x${string}`\n nodeProperties: `0x${string}`\n rewards: `0x${string}`\n governor: `0x${string}`\n}\n\nconst UNSET: ContinuumDaoDeployment = {\n ctm: zeroAddress,\n votingEscrow: zeroAddress,\n nodeProperties: zeroAddress,\n rewards: zeroAddress,\n governor: zeroAddress,\n}\n\n/** Production CTM token — same address on Linea mainnet and Ethereum mainnet. */\nexport const CTM_TOKEN_ADDRESS = getAddress('0x2026027054F5beBCEB650aBD62dC623e327658e7')\n\n/** Linea mainnet VotingEscrow (veCTM). */\nexport const VOTING_ESCROW_LINEA_ADDRESS = getAddress('0x221EC90B3B083A8501A37bdeb7035CeaedF3C31f')\n\n/** Placeholder deployments — fill NodeProperties / Rewards / governor after redeploy. */\nexport const CONTINUUM_DAO_DEPLOYMENTS: Readonly<Record<number, ContinuumDaoDeployment>> = {\n [CONTINUUM_DAO_LINEA_CHAIN_ID]: {\n ...UNSET,\n ctm: CTM_TOKEN_ADDRESS,\n votingEscrow: VOTING_ESCROW_LINEA_ADDRESS,\n },\n [CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID]: { ...UNSET },\n [CONTINUUM_DAO_ETHEREUM_CHAIN_ID]: {\n ...UNSET,\n ctm: CTM_TOKEN_ADDRESS,\n },\n}\n\n/** Public ContinuumDAO governance API (same host continuumdao-app proxies). */\nexport const CONTINUUM_DAO_GOVERNANCE_API = 'https://app-api.continuumdao.org'\n\nexport function isConfiguredAddress(addr?: string | null): boolean {\n if (!addr?.trim()) return false\n try {\n return getAddress(addr) !== zeroAddress\n } catch {\n return false\n }\n}\n\nexport function continuumDaoDeployment(chainId: number): ContinuumDaoDeployment | null {\n return CONTINUUM_DAO_DEPLOYMENTS[chainId] ?? null\n}\n\nexport function isContinuumDaoLockChain(chainId: number): boolean {\n return chainId === CONTINUUM_DAO_LINEA_CHAIN_ID || chainId === CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID\n}\n\nexport function isContinuumDaoSupportedChainId(chainId: number): boolean {\n return continuumDaoDeployment(chainId) != null\n}\n\nexport function ctmTokenAddressOnEvmChain(chainId: number): `0x${string}` | null {\n const ctm = continuumDaoDeployment(chainId)?.ctm\n return ctm && isConfiguredAddress(ctm) ? getAddress(ctm) : null\n}\n\nexport function votingEscrowAddressOnEvmChain(chainId: number): `0x${string}` | null {\n const ve = continuumDaoDeployment(chainId)?.votingEscrow\n return ve && isConfiguredAddress(ve) ? getAddress(ve) : null\n}\n\nexport function governorAddressOnEvmChain(chainId: number): `0x${string}` | null {\n const gov = continuumDaoDeployment(chainId)?.governor\n return gov && isConfiguredAddress(gov) ? getAddress(gov) : null\n}\n\nfunction sameAddr(a: string, b: string): boolean {\n try {\n return getAddress(a) === getAddress(b)\n } catch {\n return false\n }\n}\n\nexport function isContinuumDaoCtmOnAssetsChain(assetsChainId: string, contractAddress: string): boolean {\n const n = parseEvmChainIdToNumber(assetsChainId)\n if (Number.isNaN(n) || n < 0) return false\n const expected = ctmTokenAddressOnEvmChain(n)\n if (!expected) return false\n return sameAddr(contractAddress, expected)\n}\n\nexport function isContinuumDaoVeCtmOnAssetsChain(assetsChainId: string, contractAddress: string): boolean {\n const n = parseEvmChainIdToNumber(assetsChainId)\n if (Number.isNaN(n) || n < 0) return false\n const expected = votingEscrowAddressOnEvmChain(n)\n if (!expected) return false\n return sameAddr(contractAddress, expected)\n}\n\nexport function isVotingEscrowContinuumName(name?: string | null): boolean {\n return (name ?? '').trim() === VECTM_TOKEN_NAME\n}\n\nexport function isCtmTokenSymbol(symbol?: string | null): boolean {\n return (symbol ?? '').trim().toUpperCase() === CTM_TOKEN_SYMBOL\n}\n\nexport type ContinuumDaoDefaultAsset = {\n chainId: number\n tokenType: 'CTMERC20' | 'ERC721'\n contractAddress: `0x${string}`\n name: string\n symbol: string\n decimals?: number\n}\n\n/** Default registry rows when the configured address is non-zero. */\nexport function listContinuumDaoDefaultAssets(): ContinuumDaoDefaultAsset[] {\n const out: ContinuumDaoDefaultAsset[] = []\n for (const chainId of [\n CONTINUUM_DAO_LINEA_CHAIN_ID,\n CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID,\n CONTINUUM_DAO_ETHEREUM_CHAIN_ID,\n ]) {\n const dep = continuumDaoDeployment(chainId)\n if (!dep) continue\n if (isConfiguredAddress(dep.ctm)) {\n out.push({\n chainId,\n tokenType: 'CTMERC20',\n contractAddress: getAddress(dep.ctm),\n name: CTM_TOKEN_NAME,\n symbol: CTM_TOKEN_SYMBOL,\n decimals: CTM_TOKEN_DECIMALS,\n })\n }\n if (isContinuumDaoLockChain(chainId) && isConfiguredAddress(dep.votingEscrow)) {\n out.push({\n chainId,\n tokenType: 'ERC721',\n contractAddress: getAddress(dep.votingEscrow),\n name: VECTM_TOKEN_NAME,\n symbol: VECTM_TOKEN_SYMBOL,\n })\n }\n }\n return out\n}\n","/**\n * Shared CTM / veCTM escrow rules used by MCP builders and (via the same\n * builders) the node-app dialog. Mirrors VotingEscrow.sol + ContinuumDaoDialog.\n */\nimport { getAddress, zeroAddress } from 'viem'\nimport {\n MAXTIME_SECONDS,\n VECTM_DEFAULT_MINIMUM_LOCK_WEI,\n VECTM_LIQ_MIN_LOCKED_WEI,\n VECTM_LIQ_PENALTY_DEN,\n VECTM_LIQ_PENALTY_NUM,\n VECTM_MAX_LOCK_WEEKS,\n WEEK_SECONDS,\n} from './constants.js'\n\nexport type VeCtmLockState = {\n tokenId: bigint\n amountWei: bigint\n endSec: bigint\n owner: `0x${string}`\n attached: boolean\n vePowerWei: bigint\n}\n\nexport function maxLockDurationSeconds(): number {\n return Math.min(VECTM_MAX_LOCK_WEEKS * WEEK_SECONDS, MAXTIME_SECONDS)\n}\n\nexport function floorUnlockTimeSeconds(nowSec: number, durationSec: bigint): bigint {\n return ((BigInt(nowSec) + durationSec) / BigInt(WEEK_SECONDS)) * BigInt(WEEK_SECONDS)\n}\n\nexport function assertCtmAmountAtLeastMinimum(amountWei: bigint, minimumLockWei: bigint, label: string): void {\n const min = minimumLockWei > 0n ? minimumLockWei : VECTM_DEFAULT_MINIMUM_LOCK_WEI\n if (amountWei < min) {\n throw new Error(`${label} must be at least ${formatCtmWei(min)} CTM (VotingEscrow.minimumLock).`)\n }\n}\n\nexport function assertCreateLockAmount(amountWei: bigint, minimumLockWei: bigint, balanceWei?: bigint): void {\n if (amountWei <= 0n) throw new Error('CTM amount must be greater than zero.')\n assertCtmAmountAtLeastMinimum(amountWei, minimumLockWei, 'Create lock')\n if (balanceWei != null && amountWei > balanceWei) {\n throw new Error(`Create lock ${formatCtmWei(amountWei)} CTM exceeds KeyGen balance ${formatCtmWei(balanceWei)} CTM.`)\n }\n}\n\nexport function assertLockDurationSeconds(durationSec: bigint, nowSec: number, label: string): bigint {\n if (durationSec <= 0n) throw new Error(`${label} duration must be greater than zero.`)\n if (durationSec < BigInt(WEEK_SECONDS)) {\n throw new Error(`${label} duration must be at least 1 week (${WEEK_SECONDS} seconds).`)\n }\n if (durationSec > BigInt(maxLockDurationSeconds())) {\n throw new Error(\n `${label} duration cannot exceed ${VECTM_MAX_LOCK_WEEKS} weeks (VotingEscrow MAXTIME, week-aligned).`,\n )\n }\n const unlock = floorUnlockTimeSeconds(nowSec, durationSec)\n if (unlock <= BigInt(nowSec)) {\n throw new Error(`${label} unlock time must be after the current week boundary.`)\n }\n if (unlock > BigInt(nowSec) + BigInt(MAXTIME_SECONDS)) {\n throw new Error(`${label} unlock time exceeds VotingEscrow MAXTIME (4 years).`)\n }\n return unlock\n}\n\nexport function assertIncreaseAmount(amountWei: bigint, lock: VeCtmLockState, nowSec: number, balanceWei?: bigint): void {\n if (amountWei <= 0n) throw new Error('CTM amount must be greater than zero.')\n if (lock.amountWei === 0n) throw new Error(`veCTM #${lock.tokenId} has no existing lock.`)\n if (lock.endSec <= BigInt(nowSec)) {\n throw new Error(`Cannot increase amount on expired veCTM #${lock.tokenId}. Withdraw or create a new lock.`)\n }\n if (balanceWei != null && amountWei > balanceWei) {\n throw new Error(\n `Increase amount ${formatCtmWei(amountWei)} CTM exceeds KeyGen balance ${formatCtmWei(balanceWei)} CTM.`,\n )\n }\n}\n\nexport function assertIncreaseUnlockTime(durationSec: bigint, lock: VeCtmLockState, nowSec: number): bigint {\n if (lock.amountWei === 0n) throw new Error(`veCTM #${lock.tokenId} has no existing lock.`)\n if (lock.endSec <= BigInt(nowSec)) {\n throw new Error(`Cannot increase unlock time on expired veCTM #${lock.tokenId}.`)\n }\n const unlock = assertLockDurationSeconds(durationSec, nowSec, 'Increase unlock time')\n if (unlock <= lock.endSec) {\n throw new Error(\n `New unlock time must be after the current lock end (${lock.endSec.toString()}). Pick a later week-aligned date.`,\n )\n }\n return unlock\n}\n\nexport function assertSplitExtracted(\n extractedWei: bigint,\n lock: VeCtmLockState,\n minimumLockWei: bigint,\n nowSec: number,\n): void {\n if (lock.attached) {\n throw new Error(`Split is blocked while veCTM #${lock.tokenId} is attached to a node. Request detach first.`)\n }\n if (lock.amountWei === 0n) throw new Error(`veCTM #${lock.tokenId} has no existing lock.`)\n if (lock.endSec <= BigInt(nowSec)) {\n throw new Error(`Cannot split expired veCTM #${lock.tokenId}.`)\n }\n const min = minimumLockWei > 0n ? minimumLockWei : VECTM_DEFAULT_MINIMUM_LOCK_WEI\n if (lock.amountWei < min * 2n) {\n throw new Error('Split requires at least 2 CTM locked (1 CTM minimum per resulting lock).')\n }\n if (extractedWei < min) {\n throw new Error(`Extract at least ${formatCtmWei(min)} CTM into the new lock.`)\n }\n if (extractedWei > lock.amountWei - min) {\n throw new Error(`The original lock must keep at least ${formatCtmWei(min)} CTM after the split.`)\n }\n}\n\nexport function assertMerge(fromLock: VeCtmLockState, toLock: VeCtmLockState): void {\n if (fromLock.tokenId === toLock.tokenId) throw new Error('Merge requires two different token ids.')\n if (fromLock.attached) {\n throw new Error(`Merge is blocked while veCTM #${fromLock.tokenId} is attached to a node.`)\n }\n if (toLock.attached) {\n throw new Error(`Merge is blocked while veCTM #${toLock.tokenId} is attached to a node.`)\n }\n if (fromLock.owner.toLowerCase() !== toLock.owner.toLowerCase()) {\n throw new Error('Merge requires both veCTM locks to have the same owner.')\n }\n}\n\nexport function assertWithdraw(lock: VeCtmLockState, nowSec: number): void {\n if (lock.attached) {\n throw new Error(`Withdraw is blocked while veCTM #${lock.tokenId} is attached to a node. Request detach first.`)\n }\n if (lock.endSec <= 0n) throw new Error(`Unlock time unavailable for veCTM #${lock.tokenId}.`)\n if (lock.endSec > BigInt(nowSec)) {\n throw new Error(`Withdraw is available after the lock expires (unlock ${lock.endSec.toString()}).`)\n }\n}\n\nexport function computeLiquidationAmounts(args: {\n lockedAmountWei: bigint\n vePowerWei: bigint\n lockEndSec: bigint\n nowSec: number\n}): {\n userWei: bigint\n treasuryWei: bigint\n lockExpired: boolean\n tooSmall: boolean\n zeroPenalty: boolean\n} {\n if (args.lockEndSec > 0n && BigInt(args.nowSec) >= args.lockEndSec) {\n return {\n userWei: args.lockedAmountWei,\n treasuryWei: 0n,\n lockExpired: true,\n tooSmall: false,\n zeroPenalty: false,\n }\n }\n if (args.lockedAmountWei <= VECTM_LIQ_MIN_LOCKED_WEI) {\n return {\n userWei: 0n,\n treasuryWei: 0n,\n lockExpired: false,\n tooSmall: true,\n zeroPenalty: false,\n }\n }\n const penalty = (args.vePowerWei * VECTM_LIQ_PENALTY_NUM) / VECTM_LIQ_PENALTY_DEN\n if (penalty === 0n) {\n return {\n userWei: 0n,\n treasuryWei: 0n,\n lockExpired: false,\n tooSmall: false,\n zeroPenalty: true,\n }\n }\n return {\n userWei: args.lockedAmountWei - penalty,\n treasuryWei: penalty,\n lockExpired: false,\n tooSmall: false,\n zeroPenalty: false,\n }\n}\n\nexport function assertLiquidate(lock: VeCtmLockState, liquidationsEnabled: boolean | null, nowSec: number): void {\n if (lock.attached) {\n throw new Error(`Liquidate is blocked while veCTM #${lock.tokenId} is attached to a node. Request detach first.`)\n }\n if (liquidationsEnabled === false) {\n throw new Error('Liquidations are currently disabled on-chain.')\n }\n const preview = computeLiquidationAmounts({\n lockedAmountWei: lock.amountWei,\n vePowerWei: lock.vePowerWei,\n lockEndSec: lock.endSec,\n nowSec,\n })\n if (preview.tooSmall) throw new Error('Locked amount is too small to liquidate.')\n if (preview.zeroPenalty) throw new Error('Voting power is too low to compute a liquidation penalty.')\n}\n\nexport function assertDelegatee(delegateeRaw: string, executor: string): `0x${string}` {\n const delegatee = getAddress(delegateeRaw)\n if (delegatee === zeroAddress) {\n throw new Error('Zero address is not allowed. Use undelegate to return power to this KeyGen.')\n }\n const self = getAddress(executor)\n if (delegatee === self) {\n throw new Error('This is this KeyGen’s address — use undelegate instead.')\n }\n return delegatee\n}\n\nexport function assertUndelegateNotAlreadySelf(alreadySelf: boolean, account: string): void {\n if (alreadySelf) {\n throw new Error(`Voting power is already at this KeyGen (${getAddress(account)}).`)\n }\n}\n\nexport function assertTransfer(lock: VeCtmLockState, toRaw: string, fromRaw: string): `0x${string}` {\n if (lock.attached) {\n throw new Error(`Transfer is blocked while veCTM #${lock.tokenId} is attached to a node.`)\n }\n const to = getAddress(toRaw)\n const from = getAddress(fromRaw)\n if (to === zeroAddress) throw new Error('Cannot transfer veCTM to the zero address.')\n if (to === from) throw new Error('Transfer recipient must be different from this KeyGen.')\n return to\n}\n\nexport function assertExecutorOwnsLock(lock: VeCtmLockState, executor: string): void {\n if (lock.owner.toLowerCase() !== getAddress(executor).toLowerCase()) {\n throw new Error(`KeyGen ${getAddress(executor)} does not own veCTM #${lock.tokenId} (owner ${lock.owner}).`)\n }\n}\n\nfunction formatCtmWei(wei: bigint): string {\n const whole = wei / 10n ** 18n\n const frac = wei % 10n ** 18n\n if (frac === 0n) return whole.toString()\n const fracStr = frac.toString().padStart(18, '0').replace(/0+$/, '')\n return `${whole.toString()}.${fracStr}`\n}\n","import { http, type Transport } from 'viem'\n\n/**\n * Optional browser transport for protocol `eth_*` reads (allowance, decimals, spoke views).\n * Node / MCP leave this unset and use viem `http(rpcUrl)`.\n */\nlet evmRpcTransportFactory: ((rpcUrl: string) => Transport) | undefined\n\nexport function setDefiEvmRpcTransportFactory(factory: ((rpcUrl: string) => Transport) | undefined): void {\n evmRpcTransportFactory = factory\n}\n\nexport function getDefiEvmRpcTransportFactory(): ((rpcUrl: string) => Transport) | undefined {\n return evmRpcTransportFactory\n}\n\n/** Same-origin proxy in the browser when the app has called {@link setDefiEvmRpcTransportFactory}. */\nexport function defiEvmTransport(rpcUrl: string, opts?: Parameters<typeof http>[1]): Transport {\n const url = rpcUrl.trim()\n return evmRpcTransportFactory?.(url) ?? http(url, opts)\n}\n","/**\n * On-chain preflight for CTM / veCTM MCP builders.\n * Reads VotingEscrow + NodeProperties so agents cannot assemble reverting batches.\n */\nimport { createPublicClient, defineChain, getAddress, parseAbi, zeroAddress, type Address } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { VECTM_DEFAULT_MINIMUM_LOCK_WEI, isConfiguredAddress } from './constants.js'\nimport {\n assertCreateLockAmount,\n assertDelegatee,\n assertExecutorOwnsLock,\n assertIncreaseAmount,\n assertIncreaseUnlockTime,\n assertLiquidate,\n assertLockDurationSeconds,\n assertMerge,\n assertSplitExtracted,\n assertTransfer,\n assertUndelegateNotAlreadySelf,\n assertWithdraw,\n type VeCtmLockState,\n} from './escrowRules.js'\n\nconst veReadAbi = parseAbi([\n 'function minimumLock() view returns (uint256)',\n 'function locked(uint256 tokenId) view returns (int128 amount, uint256 end)',\n 'function ownerOf(uint256 tokenId) view returns (address)',\n 'function balanceOfNFT(uint256 tokenId) view returns (uint256)',\n 'function liquidationsEnabled() view returns (bool)',\n 'function nodeProperties() view returns (address)',\n 'function rewards() view returns (address)',\n 'function delegates(address account) view returns (address)',\n 'function token() view returns (address)',\n])\nconst erc20Abi = parseAbi(['function balanceOf(address owner) view returns (uint256)'])\nconst nodePropsAbi = parseAbi([\n 'function attachedKeyGen(uint256 tokenId) view returns (address)',\n 'function attachedTokenId(address keyGen) view returns (uint256)',\n 'function nodeRequestingDetachment(uint256 tokenId) view returns (bool)',\n])\nconst rewardsAbi = parseAbi(['function unclaimedRewards(uint256 tokenId) view returns (uint256)'])\nconst mpaReadAbi = parseAbi([\n 'function getNodeWithdrawAuthority(string nodeKey) view returns (address)',\n 'function ve() view returns (address)',\n 'function veCtmThresholdPower() view returns (uint256)',\n 'function nodeProperties() view returns (address)',\n])\n\nfunction publicClient(rpcUrl: string, chainId: number) {\n return createPublicClient({\n chain: defineChain({\n id: chainId,\n name: 'ContinuumDAO escrow',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl.trim()] } },\n }),\n transport: defiEvmTransport(rpcUrl.trim()),\n })\n}\n\nexport async function readMinimumLockWei(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n}): Promise<bigint> {\n const client = publicClient(args.rpcUrl, args.chainId)\n try {\n const min = await client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'minimumLock',\n })\n return min > 0n ? min : VECTM_DEFAULT_MINIMUM_LOCK_WEI\n } catch {\n return VECTM_DEFAULT_MINIMUM_LOCK_WEI\n }\n}\n\nexport async function readCtmBalanceWei(args: {\n rpcUrl: string\n chainId: number\n ctm: Address\n owner: Address\n}): Promise<bigint | undefined> {\n const client = publicClient(args.rpcUrl, args.chainId)\n try {\n return await client.readContract({\n address: args.ctm,\n abi: erc20Abi,\n functionName: 'balanceOf',\n args: [args.owner],\n })\n } catch {\n return undefined\n }\n}\n\nexport async function readVeCtmLockState(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n tokenId: bigint\n}): Promise<VeCtmLockState> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const [lockedPair, owner, vePower, nodeProperties] = await Promise.all([\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'locked',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'ownerOf',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'balanceOfNFT',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'nodeProperties',\n }),\n ])\n const amountRaw = lockedPair[0]\n const amountWei = amountRaw < 0n ? 0n : BigInt(amountRaw)\n let attached = false\n if (isConfiguredAddress(nodeProperties)) {\n try {\n const attachedKey = await client.readContract({\n address: getAddress(nodeProperties),\n abi: nodePropsAbi,\n functionName: 'attachedKeyGen',\n args: [args.tokenId],\n })\n attached = attachedKey !== zeroAddress\n } catch {\n attached = false\n }\n }\n return {\n tokenId: args.tokenId,\n amountWei,\n endSec: lockedPair[1],\n owner: getAddress(owner),\n attached,\n vePowerWei: vePower,\n }\n}\n\nasync function assertNoUnclaimedRewards(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n tokenId: bigint\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n let rewards: Address\n try {\n rewards = await client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'rewards',\n })\n } catch {\n return\n }\n if (!isConfiguredAddress(rewards)) return\n try {\n const unclaimed = await client.readContract({\n address: rewards,\n abi: rewardsAbi,\n functionName: 'unclaimedRewards',\n args: [args.tokenId],\n })\n if (unclaimed !== 0n) {\n throw new Error(`veCTM #${args.tokenId} has unclaimed rewards. Claim them before this escrow action.`)\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('unclaimed rewards')) throw err\n }\n}\n\nexport async function preflightCreateLock(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n ctm: Address\n owner: Address\n amountWei: bigint\n durationSec: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const [minimumLockWei, balanceWei] = await Promise.all([\n readMinimumLockWei(args),\n readCtmBalanceWei(args),\n ])\n assertCreateLockAmount(args.amountWei, minimumLockWei, balanceWei)\n assertLockDurationSeconds(args.durationSec, nowSec, 'Create lock')\n}\n\nexport async function preflightIncreaseAmount(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n ctm: Address\n owner: Address\n tokenId: bigint\n amountWei: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const [lock, balanceWei] = await Promise.all([\n readVeCtmLockState(args),\n readCtmBalanceWei(args),\n ])\n assertExecutorOwnsLock(lock, args.owner)\n assertIncreaseAmount(args.amountWei, lock, nowSec, balanceWei)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightIncreaseUnlockTime(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n durationSec: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const lock = await readVeCtmLockState(args)\n assertExecutorOwnsLock(lock, args.owner)\n assertIncreaseUnlockTime(args.durationSec, lock, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightSplit(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n extractedWei: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const [lock, minimumLockWei] = await Promise.all([\n readVeCtmLockState(args),\n readMinimumLockWei(args),\n ])\n assertExecutorOwnsLock(lock, args.owner)\n assertSplitExtracted(args.extractedWei, lock, minimumLockWei, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightMerge(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n fromTokenId: bigint\n toTokenId: bigint\n}): Promise<void> {\n const [fromLock, toLock] = await Promise.all([\n readVeCtmLockState({ ...args, tokenId: args.fromTokenId }),\n readVeCtmLockState({ ...args, tokenId: args.toTokenId }),\n ])\n assertExecutorOwnsLock(fromLock, args.owner)\n assertExecutorOwnsLock(toLock, args.owner)\n assertMerge(fromLock, toLock)\n await Promise.all([\n assertNoUnclaimedRewards({ ...args, tokenId: args.fromTokenId }),\n assertNoUnclaimedRewards({ ...args, tokenId: args.toTokenId }),\n ])\n}\n\nexport async function preflightWithdraw(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const lock = await readVeCtmLockState(args)\n assertExecutorOwnsLock(lock, args.owner)\n assertWithdraw(lock, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightLiquidate(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const client = publicClient(args.rpcUrl, args.chainId)\n const [lock, liquidationsEnabled] = await Promise.all([\n readVeCtmLockState(args),\n client\n .readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'liquidationsEnabled',\n })\n .catch(() => null),\n ])\n assertExecutorOwnsLock(lock, args.owner)\n assertLiquidate(lock, liquidationsEnabled, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightDelegate(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n delegatee: string\n}): Promise<`0x${string}`> {\n return assertDelegatee(args.delegatee, args.owner)\n}\n\nexport async function preflightUndelegate(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const delegatee = await client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'delegates',\n args: [args.owner],\n })\n assertUndelegateNotAlreadySelf(getAddress(delegatee) === getAddress(args.owner), args.owner)\n}\n\nexport async function preflightTransfer(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n to: string\n}): Promise<`0x${string}`> {\n const lock = await readVeCtmLockState(args)\n assertExecutorOwnsLock(lock, args.owner)\n return assertTransfer(lock, args.to, args.owner)\n}\n\nexport async function preflightAttachVeCtm(args: {\n rpcUrl: string\n chainId: number\n mpaWallet: Address\n nodeKey: string\n tokenId: bigint\n owner: Address\n votingEscrow?: Address\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const [authority, veFromWallet, threshold, nodeProperties] = await Promise.all([\n client.readContract({\n address: args.mpaWallet,\n abi: mpaReadAbi,\n functionName: 'getNodeWithdrawAuthority',\n args: [args.nodeKey],\n }),\n client.readContract({ address: args.mpaWallet, abi: mpaReadAbi, functionName: 've' }),\n client.readContract({\n address: args.mpaWallet,\n abi: mpaReadAbi,\n functionName: 'veCtmThresholdPower',\n }),\n client.readContract({\n address: args.mpaWallet,\n abi: mpaReadAbi,\n functionName: 'nodeProperties',\n }),\n ])\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : getAddress(veFromWallet)\n if (!isConfiguredAddress(ve)) throw new Error('veCTM is not live on the fee contract yet.')\n const lock = await readVeCtmLockState({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n tokenId: args.tokenId,\n })\n assertExecutorOwnsLock(lock, args.owner)\n const executor = getAddress(args.owner)\n if (authority === zeroAddress || getAddress(authority) !== executor) {\n throw new Error(\n `Compose attachVeCtm from the claimed authority KeyGen (${authority}), which must own the NFT.`,\n )\n }\n if (isConfiguredAddress(nodeProperties)) {\n const np = getAddress(nodeProperties)\n const [attachedKey, attachedForKey] = await Promise.all([\n client.readContract({\n address: np,\n abi: nodePropsAbi,\n functionName: 'attachedKeyGen',\n args: [args.tokenId],\n }),\n client.readContract({\n address: np,\n abi: nodePropsAbi,\n functionName: 'attachedTokenId',\n args: [executor],\n }),\n ])\n if (attachedKey !== zeroAddress) {\n throw new Error(`veCTM #${args.tokenId} is already attached. You cannot replace an attached NFT.`)\n }\n if (attachedForKey !== 0n) {\n throw new Error(\n `This KeyGen already has veCTM #${attachedForKey} attached. Request detach and wait for governance. ` +\n \"A second group on this node attaches after rotating nodeWithdrawAuthority to that group's secp256k1 KeyGen.\",\n )\n }\n }\n if (threshold > 0n && lock.amountWei < threshold) {\n throw new Error(\n `Locked CTM on veCTM #${args.tokenId} is below MultiSignAgentWallet.veCtmThresholdPower (${threshold.toString()} wei).`,\n )\n }\n}\n\nexport async function preflightRequestDetach(args: {\n rpcUrl: string\n chainId: number\n nodeProperties: Address\n owner: Address\n tokenId: bigint\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const [attachedKey, alreadyRequested] = await Promise.all([\n client.readContract({\n address: args.nodeProperties,\n abi: nodePropsAbi,\n functionName: 'attachedKeyGen',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.nodeProperties,\n abi: nodePropsAbi,\n functionName: 'nodeRequestingDetachment',\n args: [args.tokenId],\n }),\n ])\n if (attachedKey === zeroAddress) {\n throw new Error(`veCTM #${args.tokenId} is not attached to a node.`)\n }\n if (alreadyRequested) {\n throw new Error(\n `Detach already requested for veCTM #${args.tokenId}. The NFT stays attached until governance executes detach.`,\n )\n }\n if (getAddress(attachedKey) !== getAddress(args.owner)) {\n throw new Error(\n `Request detach from the attached KeyGen (${getAddress(attachedKey)}).`,\n )\n }\n}\n","import type { KeyGenSubsetForPermit } from '../../../core/types.js'\n\nexport const VECTM_NODE_INFO_TUPLE =\n '(string,string,uint8[4],uint16[8],string,uint256,uint256,string,string,bytes)'\n\nexport const ATTACH_VECTM_SIGNATURE = `attachVeCtm(string,uint256,${VECTM_NODE_INFO_TUPLE},string)`\n\n/** Bind attach to the attaching KeyGen's mpc-auth GroupId. Do not pick a different group. */\nexport function resolveAttachGroupId(\n keyGen: KeyGenSubsetForPermit,\n explicit?: string,\n): string {\n const fromKg = (keyGen.groupId ?? keyGen.GroupId ?? '').trim()\n const fromArg = (explicit ?? '').trim()\n if (fromKg && fromArg && fromKg !== fromArg) {\n throw new Error(\n `groupId must be the attaching KeyGen's mpc-auth GroupId (${fromKg}), not a different group.`,\n )\n }\n if (fromKg) return fromKg\n if (fromArg) return fromArg\n throw new Error(\n \"groupId is required to attach veCTM (use the attaching KeyGen's mpc-auth GroupId).\",\n )\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string {\n const t = (purposeText ?? '').trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */\n expiryDate?: number\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n if (input.expiryDate != null && input.expiryDate > 0) {\n bodyForSign.expiryDate = Math.floor(input.expiryDate)\n }\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import { keccak256, createPublicClient, defineChain, serializeTransaction, getAddress, parseGwei, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../core/defiEvmClient.js'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n expiryDate: context.expiryDate,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","/**\n * ContinuumDAO multi-sign builders: CTM lock / veCTM escrow + MPA attach / request detach.\n * Do not prepend billing legs — these are protocol txs, not register / deposit / syncBilling.\n */\nimport { type Address, createPublicClient, defineChain, encodeFunctionData, getAddress, parseAbi, parseUnits, zeroAddress } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { ATTACH_VECTM_SIGNATURE, resolveAttachGroupId, VECTM_NODE_INFO_TUPLE } from './attachGroup.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport {\n CONTINUUM_DAO_PROTOCOL_ID,\n CTM_TOKEN_DECIMALS,\n ctmTokenAddressOnEvmChain,\n isConfiguredAddress,\n isContinuumDaoLockChain,\n votingEscrowAddressOnEvmChain,\n} from './constants.js'\nimport {\n preflightAttachVeCtm,\n preflightCreateLock,\n preflightDelegate,\n preflightIncreaseAmount,\n preflightIncreaseUnlockTime,\n preflightLiquidate,\n preflightMerge,\n preflightRequestDetach,\n preflightSplit,\n preflightTransfer,\n preflightUndelegate,\n preflightWithdraw,\n} from './escrowPreflight.js'\n\nexport const CONTINUUM_DAO_APPROVE_FALLBACK = 100_000n\nexport const CONTINUUM_DAO_CREATE_LOCK_FALLBACK = 550_000n\nexport const CONTINUUM_DAO_INCREASE_AMOUNT_FALLBACK = 400_000n\nexport const CONTINUUM_DAO_INCREASE_UNLOCK_FALLBACK = 400_000n\nexport const CONTINUUM_DAO_SPLIT_FALLBACK = 650_000n\nexport const CONTINUUM_DAO_MERGE_FALLBACK = 550_000n\nexport const CONTINUUM_DAO_WITHDRAW_FALLBACK = 350_000n\nexport const CONTINUUM_DAO_LIQUIDATE_FALLBACK = 450_000n\nexport const CONTINUUM_DAO_DELEGATE_FALLBACK = 160_000n\nexport const CONTINUUM_DAO_TRANSFER_FALLBACK = 160_000n\nexport const CONTINUUM_DAO_ATTACH_FALLBACK = 450_000n\nexport const CONTINUUM_DAO_DETACH_FALLBACK = 220_000n\n\nexport const INCREASE_UNLOCK_TIME_SIGNATURE = 'increase_unlock_time(uint256,uint256)'\n\nexport { ATTACH_VECTM_SIGNATURE, resolveAttachGroupId, VECTM_NODE_INFO_TUPLE } from './attachGroup.js'\n\nconst erc20Abi = parseAbi([\n 'function allowance(address owner, address spender) view returns (uint256)',\n 'function approve(address spender, uint256 amount) returns (bool)',\n])\nconst veWriteAbi = parseAbi([\n 'function create_lock(uint256 _value, uint256 _lock_duration) returns (uint256)',\n 'function increase_amount(uint256 _tokenId, uint256 _value)',\n 'function increase_unlock_time(uint256 _tokenId, uint256 _lock_duration)',\n 'function withdraw(uint256 _tokenId)',\n 'function split(uint256 _tokenId, uint256 _extracted) returns (uint256)',\n 'function merge(uint256 _from, uint256 _to)',\n 'function liquidate(uint256 _tokenId)',\n 'function delegate(address delegatee)',\n 'function transferFrom(address _from, address _to, uint256 _tokenId)',\n])\nconst attachAbi = parseAbi([\n `function attachVeCtm(string nodeKey, uint256 tokenId, ${VECTM_NODE_INFO_TUPLE} nodeInfo, string groupId)`,\n])\nconst detachAbi = parseAbi(['function setNodeRemovalStatus(uint256 tokenId, bool status)'])\n\nexport const CONTINUUM_DAO_EVM_TYPES = new Set([\n 'continuum_dao_approve',\n 'continuum_dao_create_lock',\n 'continuum_dao_increase_amount',\n 'continuum_dao_increase_unlock_time',\n 'continuum_dao_split',\n 'continuum_dao_merge',\n 'continuum_dao_withdraw',\n 'continuum_dao_liquidate',\n 'continuum_dao_delegate',\n 'continuum_dao_undelegate',\n 'continuum_dao_transfer',\n 'continuum_dao_attach',\n 'continuum_dao_request_detach',\n])\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport type ContinuumDaoCommonArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n}\n\ntype StepKind = {\n to: Address\n data: `0x${string}`\n value: bigint\n fallbackGas: bigint\n buildBatchMeta: (args: { gasLimit: bigint }) => Record<string, unknown>\n}\n\nfunction requireLockChain(chainId: number): void {\n if (!isContinuumDaoLockChain(chainId)) {\n throw new Error('ContinuumDAO lock and attach actions are Linea-only.')\n }\n}\n\nfunction requireVe(chainId: number): Address {\n requireLockChain(chainId)\n const ve = votingEscrowAddressOnEvmChain(chainId)\n if (!ve) throw new Error('Voting Escrow address is not configured for this chain yet.')\n return ve\n}\n\nfunction requireCtm(chainId: number): Address {\n const ctm = ctmTokenAddressOnEvmChain(chainId)\n if (!ctm) throw new Error('CTM address is not configured for this chain yet.')\n return ctm\n}\n\nfunction parseTokenId(raw: string | number | bigint): bigint {\n const id = typeof raw === 'bigint' ? raw : BigInt(String(raw).trim())\n if (id <= 0n) throw new Error('veCTM token id must be greater than zero.')\n return id\n}\n\nexport function continuumDaoSignatureText(\n extra: Record<string, unknown>,\n chainId: number,\n): string {\n return JSON.stringify({\n kind: 'ContinuumDAO',\n ...extra,\n chainId,\n })\n}\n\nfunction meta(\n evmType: string,\n chainId: number,\n to: Address,\n extra: Record<string, unknown>,\n gasLimit: bigint,\n): Record<string, unknown> {\n return {\n destinationAddress: to,\n signatureText: continuumDaoSignatureText(extra, chainId),\n evm: { type: evmType, version: 1, chainId: String(chainId), protocolId: CONTINUUM_DAO_PROTOCOL_ID },\n continuumDao: { ...extra, gas: { baseGasUnits: gasLimit.toString() } },\n }\n}\n\nasync function finalize(\n steps: StepKind[],\n args: ContinuumDaoCommonArgs,\n purposeSuffix: string,\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (steps.length === 0) throw new Error('ContinuumDAO batch requires at least one step.')\n const evmSteps: EvmTxStep[] = steps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: s.fallbackGas,\n }))\n const firstDataNo0x = evmSteps[0]!.data.startsWith('0x') ? evmSteps[0]!.data.slice(2) : evmSteps[0]!.data\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl.trim(),\n executorAddress: args.executorAddress,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: steps[0]!.to,\n buildBatchMeta: ({ index, gasLimit }) => steps[index]!.buildBatchMeta({ gasLimit }),\n })\n}\n\nasync function maybeApproveCtmStep(args: {\n rpcUrl: string\n chainId: number\n owner: Address\n ctm: Address\n spender: Address\n amountWei: bigint\n}): Promise<StepKind | null> {\n const ch = defineChain({\n id: args.chainId,\n name: 'ContinuumDAO',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [args.rpcUrl.trim()] } },\n })\n const client = createPublicClient({ chain: ch, transport: defiEvmTransport(args.rpcUrl.trim()) })\n let allowance = 0n\n try {\n allowance = await client.readContract({\n address: args.ctm,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [args.owner, args.spender],\n })\n } catch {\n allowance = 0n\n }\n if (allowance >= args.amountWei) return null\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [args.spender, args.amountWei],\n })\n return {\n to: args.ctm,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_APPROVE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_approve', args.chainId, args.ctm, {\n name: 'CTM.approve',\n spender: args.spender,\n amountWei: args.amountWei.toString(),\n }, gasLimit),\n }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCreateLock(\n args: ContinuumDaoCommonArgs & {\n amountHuman: string\n lockDurationSeconds: string | number | bigint\n ctm?: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const ctm = args.ctm && isConfiguredAddress(args.ctm) ? getAddress(args.ctm) : requireCtm(args.chainId)\n const amountWei = parseUnits(String(args.amountHuman).trim().replace(/,/g, ''), CTM_TOKEN_DECIMALS)\n const duration = BigInt(String(args.lockDurationSeconds).trim())\n const owner = getAddress(args.executorAddress)\n await preflightCreateLock({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n ctm,\n owner,\n amountWei,\n durationSec: duration,\n })\n const approve = await maybeApproveCtmStep({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n owner,\n ctm,\n spender: ve,\n amountWei,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'create_lock',\n args: [amountWei, duration],\n })\n const lockStep: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_CREATE_LOCK_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_create_lock', args.chainId, ve, {\n name: 'VotingEscrow.create_lock',\n amountWei: amountWei.toString(),\n lockDurationSeconds: duration.toString(),\n }, gasLimit),\n }\n const steps = approve ? [approve, lockStep] : [lockStep]\n return finalize(steps, args, `ContinuumDAO: create lock ${args.amountHuman} CTM.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoIncreaseAmount(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n amountHuman: string\n ctm?: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const ctm = args.ctm && isConfiguredAddress(args.ctm) ? getAddress(args.ctm) : requireCtm(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const amountWei = parseUnits(String(args.amountHuman).trim().replace(/,/g, ''), CTM_TOKEN_DECIMALS)\n const owner = getAddress(args.executorAddress)\n await preflightIncreaseAmount({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n ctm,\n owner,\n tokenId,\n amountWei,\n })\n const approve = await maybeApproveCtmStep({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n owner,\n ctm,\n spender: ve,\n amountWei,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'increase_amount',\n args: [tokenId, amountWei],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_INCREASE_AMOUNT_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_increase_amount', args.chainId, ve, {\n name: 'VotingEscrow.increase_amount',\n tokenId: tokenId.toString(),\n amountWei: amountWei.toString(),\n }, gasLimit),\n }\n const steps = approve ? [approve, step] : [step]\n return finalize(steps, args, `ContinuumDAO: increase amount on veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoIncreaseUnlockTime(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n lockDurationSeconds: string | number | bigint\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const duration = BigInt(String(args.lockDurationSeconds).trim())\n const owner = getAddress(args.executorAddress)\n await preflightIncreaseUnlockTime({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner,\n tokenId,\n durationSec: duration,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'increase_unlock_time',\n args: [tokenId, duration],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_INCREASE_UNLOCK_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_increase_unlock_time', args.chainId, ve, {\n name: 'VotingEscrow.increase_unlock_time',\n signature: INCREASE_UNLOCK_TIME_SIGNATURE,\n tokenId: tokenId.toString(),\n lockDurationSeconds: duration.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: increase unlock time on veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoSplit(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n extractedHuman: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const extracted = parseUnits(String(args.extractedHuman).trim().replace(/,/g, ''), CTM_TOKEN_DECIMALS)\n await preflightSplit({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n tokenId,\n extractedWei: extracted,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'split',\n args: [tokenId, extracted],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_SPLIT_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_split', args.chainId, ve, {\n name: 'VotingEscrow.split',\n tokenId: tokenId.toString(),\n extractedWei: extracted.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: split veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoMerge(\n args: ContinuumDaoCommonArgs & {\n fromTokenId: string | number | bigint\n toTokenId: string | number | bigint\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const fromId = parseTokenId(args.fromTokenId)\n const toId = parseTokenId(args.toTokenId)\n await preflightMerge({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n fromTokenId: fromId,\n toTokenId: toId,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'merge',\n args: [fromId, toId],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_MERGE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_merge', args.chainId, ve, {\n name: 'VotingEscrow.merge',\n fromTokenId: fromId.toString(),\n toTokenId: toId.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: merge veCTM #${fromId} into #${toId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoWithdraw(\n args: ContinuumDaoCommonArgs & { tokenId: string | number | bigint; votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n await preflightWithdraw({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n tokenId,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'withdraw', args: [tokenId] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_WITHDRAW_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_withdraw', args.chainId, ve, {\n name: 'VotingEscrow.withdraw',\n tokenId: tokenId.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: withdraw veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoLiquidate(\n args: ContinuumDaoCommonArgs & { tokenId: string | number | bigint; votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n await preflightLiquidate({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n tokenId,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'liquidate', args: [tokenId] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_LIQUIDATE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_liquidate', args.chainId, ve, {\n name: 'VotingEscrow.liquidate',\n tokenId: tokenId.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: liquidate veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoDelegate(\n args: ContinuumDaoCommonArgs & { delegatee: string; votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const delegatee = await preflightDelegate({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n delegatee: args.delegatee,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'delegate', args: [delegatee] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_DELEGATE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_delegate', args.chainId, ve, {\n name: 'VotingEscrow.delegate',\n delegatee,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: delegate voting power to ${delegatee}.`)\n}\n\n/** veCTM has no undelegate(). Delegating to self (or address(0), which becomes self) returns voting power. */\nexport async function buildEvmMultisignBodyContinuumDaoUndelegate(\n args: ContinuumDaoCommonArgs & { votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const self = getAddress(args.executorAddress)\n await preflightUndelegate({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: self,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'delegate', args: [self] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_DELEGATE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_undelegate', args.chainId, ve, {\n name: 'VotingEscrow.delegate',\n delegatee: self,\n undelegate: true,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: undelegate voting power (delegate back to ${self}).`)\n}\n\nconst veReadAbi = parseAbi(['function delegates(address account) view returns (address)'])\n\nexport async function continuumDaoFetchDelegates(args: {\n chainId: number | string\n rpcUrl: string\n account: string\n votingEscrow?: string\n}): Promise<{ account: string; delegatee: string; self: boolean }> {\n const chainId = Number(args.chainId)\n requireLockChain(chainId)\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(chainId)\n const account = getAddress(args.account)\n const client = createPublicClient({\n chain: defineChain({\n id: chainId,\n name: 'ContinuumDAO',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [args.rpcUrl.trim()] } },\n }),\n transport: defiEvmTransport(args.rpcUrl.trim()),\n })\n const delegatee = getAddress(\n await client.readContract({ address: ve, abi: veReadAbi, functionName: 'delegates', args: [account] }),\n )\n return { account, delegatee, self: delegatee === account }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoTransfer(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n to: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const from = getAddress(args.executorAddress)\n const to = await preflightTransfer({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: from,\n tokenId,\n to: args.to,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'transferFrom',\n args: [from, to, tokenId],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_TRANSFER_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_transfer', args.chainId, ve, {\n name: 'VotingEscrow.transferFrom',\n tokenId: tokenId.toString(),\n from,\n to,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: transfer veCTM #${tokenId} to ${to}.`)\n}\n\nexport type ContinuumDaoNodeInfoTuple = [\n string,\n string,\n readonly [number, number, number, number],\n readonly [number, number, number, number, number, number, number, number],\n string,\n bigint,\n bigint,\n string,\n string,\n `0x${string}`,\n]\n\nexport function encodeContinuumDaoNodeInfo(info?: {\n forumHandle?: string\n email?: string\n ipv4?: number[]\n ipv6?: number[]\n vps?: string\n ram?: number | string\n cpu?: number | string\n dIDType?: string\n dID?: string\n extra?: string\n}): ContinuumDaoNodeInfoTuple {\n const ipv4Src = info?.ipv4 ?? [0, 0, 0, 0]\n const ipv6Src = info?.ipv6 ?? [0, 0, 0, 0, 0, 0, 0, 0]\n const ipv4: [number, number, number, number] = [\n ipv4Src[0] ?? 0,\n ipv4Src[1] ?? 0,\n ipv4Src[2] ?? 0,\n ipv4Src[3] ?? 0,\n ]\n const ipv6: [number, number, number, number, number, number, number, number] = [\n ipv6Src[0] ?? 0,\n ipv6Src[1] ?? 0,\n ipv6Src[2] ?? 0,\n ipv6Src[3] ?? 0,\n ipv6Src[4] ?? 0,\n ipv6Src[5] ?? 0,\n ipv6Src[6] ?? 0,\n ipv6Src[7] ?? 0,\n ]\n const extraRaw = (info?.extra ?? '0x').trim() || '0x'\n const extra = (extraRaw.startsWith('0x') ? extraRaw : `0x${extraRaw}`) as `0x${string}`\n return [\n info?.forumHandle ?? '',\n info?.email ?? '',\n ipv4,\n ipv6,\n info?.vps ?? '',\n BigInt(String(info?.ram ?? 0)),\n BigInt(String(info?.cpu ?? 0)),\n info?.dIDType ?? '',\n info?.dID ?? '',\n extra,\n ]\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoAttachVeCtm(\n args: ContinuumDaoCommonArgs & {\n nodeKey: string\n tokenId: string | number | bigint\n mpaWallet: string\n nodeInfo?: Parameters<typeof encodeContinuumDaoNodeInfo>[0]\n nodeInfoTuple?: ContinuumDaoNodeInfoTuple\n groupId?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n requireLockChain(args.chainId)\n const wallet = getAddress(args.mpaWallet)\n if (wallet === zeroAddress) throw new Error('MPA wallet address is required to attach veCTM.')\n const tokenId = parseTokenId(args.tokenId)\n const nodeKey = args.nodeKey.trim()\n if (!nodeKey) throw new Error('nodeKey is required to attach veCTM.')\n const groupId = resolveAttachGroupId(args.keyGen, args.groupId)\n await preflightAttachVeCtm({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n mpaWallet: wallet,\n nodeKey,\n tokenId,\n owner: getAddress(args.executorAddress),\n })\n const tuple = args.nodeInfoTuple ?? encodeContinuumDaoNodeInfo(args.nodeInfo)\n const data = encodeFunctionData({\n abi: attachAbi,\n functionName: 'attachVeCtm',\n args: [nodeKey, tokenId, tuple, groupId],\n })\n const step: StepKind = {\n to: wallet,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_ATTACH_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_attach', args.chainId, wallet, {\n name: 'MultiSignAgentWallet.attachVeCtm',\n signature: ATTACH_VECTM_SIGNATURE,\n nodeKey,\n tokenId: tokenId.toString(),\n groupId,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: attach veCTM #${tokenId} (group ${groupId}).`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoRequestDetach(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n nodeProperties: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n requireLockChain(args.chainId)\n const np = getAddress(args.nodeProperties)\n if (np === zeroAddress) throw new Error('NodeProperties address is required to request detach.')\n const tokenId = parseTokenId(args.tokenId)\n await preflightRequestDetach({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n nodeProperties: np,\n owner: getAddress(args.executorAddress),\n tokenId,\n })\n const data = encodeFunctionData({\n abi: detachAbi,\n functionName: 'setNodeRemovalStatus',\n args: [tokenId, true],\n })\n const step: StepKind = {\n to: np,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_DETACH_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_request_detach', args.chainId, np, {\n name: 'NodeProperties.setNodeRemovalStatus',\n tokenId: tokenId.toString(),\n status: true,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: request detach of veCTM #${tokenId}.`)\n}\n\n/** MCP adapter: flatten NodeInfo fields onto the attach builder. */\nexport async function buildEvmMultisignBodyContinuumDaoAttachVeCtmFromMcp(\n args: ContinuumDaoCommonArgs & {\n nodeKey: string\n tokenId: string | number | bigint\n mpaWallet: string\n groupId?: string\n forumHandle?: string\n email?: string\n vps?: string\n ram?: number | string\n cpu?: number | string\n dIDType?: string\n dID?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n return buildEvmMultisignBodyContinuumDaoAttachVeCtm({\n ...args,\n nodeInfo: {\n forumHandle: args.forumHandle,\n email: args.email,\n vps: args.vps,\n ram: args.ram,\n cpu: args.cpu,\n dIDType: args.dIDType,\n dID: args.dID,\n },\n })\n}\n","import { hashTypedData, stringToHex, type TypedDataDomain } from 'viem'\nimport type { KeyGenSubset, MultisignBuildResult } from './types.js'\nimport { finalizeMultisign } from './envelope.js'\n\nexport const EIP712_SIGN_REQUEST_KIND = 'eip712' as const\n\nexport type Eip712TypedDataField = { name: string; type: string }\n\nexport type Eip712TypedDataPayload = {\n domain: TypedDataDomain\n types: Record<string, readonly Eip712TypedDataField[] | Eip712TypedDataField[]>\n primaryType: string\n message: Record<string, unknown>\n}\n\nexport type Eip712MultisignDelivery = Record<string, unknown> & { kind: string }\n\nexport type BuildEip712MultisignLeg = {\n typedData: Eip712TypedDataPayload\n delivery: Eip712MultisignDelivery\n audit?: Record<string, unknown>\n}\n\nexport type BuildEip712MultisignArgs = {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n /** Chain id stored on the sign request (protocol context; may differ from EIP-712 domain chainId). */\n destinationChainID: string\n destinationAddress: string\n legs: readonly BuildEip712MultisignLeg[]\n expiryDate?: number\n}\n\nfunction msgHashNo0x(digest: `0x${string}`): string {\n return digest.startsWith('0x') ? digest.slice(2) : digest\n}\n\nfunction eip712SignatureText(domain: TypedDataDomain, primaryType: string): string {\n return JSON.stringify({\n kind: 'EIP-712',\n ...(typeof domain.name === 'string' ? { name: domain.name } : {}),\n primaryType,\n })\n}\n\nfunction jsonStringifyForAudit(value: unknown): string {\n return JSON.stringify(value, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n}\n\nfunction eip712LegEnvelope(\n typedData: Eip712TypedDataPayload,\n delivery: Eip712MultisignDelivery,\n digest: `0x${string}`,\n): Record<string, unknown> {\n return {\n version: 1,\n digest,\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message,\n delivery,\n }\n}\n\nfunction eip712MsgRawHex(envelope: Record<string, unknown>): string {\n return stringToHex(jsonStringifyForAudit(envelope))\n}\n\n/**\n * Build an mpc-auth multiSignRequest body for one or more EIP-712 digests (no EVM tx broadcast).\n * `extraJSON.eip712` is always an array. N=1 uses `msgHash`/`msgRaw`; N>=2 uses `messageHashes`/`messageRawBatch`.\n */\nexport function buildEip712Multisign(args: BuildEip712MultisignArgs): MultisignBuildResult {\n if (args.legs.length < 1) {\n throw new Error('buildEip712Multisign requires at least one leg')\n }\n\n const eip712: Record<string, unknown>[] = []\n const legs = args.legs.map((leg) => {\n const digest = hashTypedData({\n domain: leg.typedData.domain,\n types: leg.typedData.types,\n primaryType: leg.typedData.primaryType,\n message: leg.typedData.message,\n })\n const envelope = eip712LegEnvelope(leg.typedData, leg.delivery, digest)\n eip712.push(envelope)\n return {\n msgHash: msgHashNo0x(digest),\n msgRaw: eip712MsgRawHex(envelope),\n destinationAddress: args.destinationAddress,\n signatureText: eip712SignatureText(leg.typedData.domain, leg.typedData.primaryType),\n audit: {\n kind: 'EIP712',\n primaryType: leg.typedData.primaryType,\n deliveryKind: leg.delivery.kind,\n ...(leg.audit ?? {}),\n },\n feeSnapshot: {},\n }\n })\n\n return finalizeMultisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: args.destinationChainID,\n destinationAddress: args.destinationAddress,\n extraJSON: {\n signRequestKind: EIP712_SIGN_REQUEST_KIND,\n eip712,\n },\n expiryDate: args.expiryDate,\n legs,\n })\n}\n","import { getAddress } from 'viem'\nimport { buildEip712Multisign } from '../../../core/eip712Multisign.js'\nimport type { KeyGenSubset } from '../../../core/types.js'\n\nconst DEFAULT_FORUM_URL = 'https://forum.continuumdao.org'\n\nexport const FORUM_GOVERNANCE_SECTIONS = [\n 'decision',\n 'election',\n 'treasury',\n 'constitution',\n 'admin',\n] as const\n\nexport type ForumGovernanceSection = (typeof FORUM_GOVERNANCE_SECTIONS)[number]\n\nexport const FORUM_IDEA_SECTION = 'ideas' as const\n\nexport const PROPOSAL_TYPE_TO_FORUM_SECTION: Record<string, ForumGovernanceSection> = {\n Admin: 'admin',\n Constitution: 'constitution',\n Decision: 'decision',\n Election: 'election',\n Treasury: 'treasury',\n}\n\nconst IDEA_SECTION_ALIASES = new Set(['ideas', 'ideas-suggestions', 'suggestions'])\n\nexport function expectedForumSectionForProposalType(typeLabel: string): ForumGovernanceSection | null {\n return PROPOSAL_TYPE_TO_FORUM_SECTION[typeLabel] ?? null\n}\n\nexport function isForumIdeaSection(section?: string): boolean {\n return IDEA_SECTION_ALIASES.has(String(section || '').toLowerCase())\n}\n\nexport function applyForumSectionCheck<T extends { typeLabel: string; briefing: string; risks: string[] }>(\n out: T,\n section: string | null | undefined,\n cid?: number | null,\n): T & { forumSection: string | null; forumCid: number | null } {\n const forumSection = section?.trim() || null\n const forumCid = cid != null && Number(cid) > 0 ? Number(cid) : null\n const expected = expectedForumSectionForProposalType(out.typeLabel)\n const added: string[] = []\n if (forumSection === FORUM_IDEA_SECTION || isForumIdeaSection(forumSection ?? undefined)) {\n added.push(\n 'Forum thread is in Ideas & Suggestions, not a Governance proposal category. Ideas are discussion only and must not be used as forumKey.',\n )\n } else if (expected && forumSection && forumSection !== expected) {\n added.push(`Forum section is ${forumSection} but proposal type is ${out.typeLabel} (expected ${expected}).`)\n }\n const extraLine =\n forumSection === FORUM_IDEA_SECTION || isForumIdeaSection(forumSection ?? undefined)\n ? `Forum section: ideas (mismatch — expected ${expected ?? 'a Governance category'}).`\n : expected && forumSection && forumSection !== expected\n ? `Forum section: ${forumSection} (mismatch — expected ${expected}).`\n : forumSection\n ? `Forum section: ${forumSection}`\n : null\n const lines = out.briefing.split('\\n')\n if (extraLine) {\n const forumLine = lines.findIndex((l) => l.startsWith('Forum:'))\n if (forumLine >= 0) lines.splice(forumLine + 1, 0, extraLine)\n else lines.splice(1, 0, extraLine)\n }\n if (added.length) {\n if (!lines.includes('Risks:')) lines.push('Risks:')\n for (const r of added) lines.push(`- ${r}`)\n }\n return { ...out, briefing: lines.join('\\n'), risks: [...out.risks, ...added], forumSection, forumCid }\n}\n\nexport const FORUM_LOGIN_DELIVERY_KIND = 'forumLogin' as const\n\nexport function continuumDaoForumUrl(explicit?: string): string {\n const raw =\n explicit?.trim() ||\n (typeof process !== 'undefined' ? process.env.FORUM_URL || process.env.NEXT_PUBLIC_FORUM_URL : '') ||\n DEFAULT_FORUM_URL\n return raw.replace(/\\/+$/, '')\n}\n\n/** Homepage or empty string is refused. A proposal must point at a created /topic/:tid or /t/:tid. */\nexport function assertContinuumDaoForumTopicKey(forumKey: string, forumUrl?: string): string {\n const raw = String(forumKey || '').trim()\n if (!raw) {\n throw new Error(\n 'A forum thread is required. Create one with ctm_continuum_dao_forum_create_topic in a Governance section (decision / election / treasury / constitution / admin) before propose or register_proposal. Ideas & Suggestions threads are not valid forumKey values.',\n )\n }\n let url: URL\n try {\n url = new URL(raw)\n } catch {\n throw new Error('forumKey must be a full forum topic URL (https://forum.continuumdao.org/topic/123).')\n }\n const expected = new URL(`${continuumDaoForumUrl(forumUrl)}/`)\n if (url.host !== expected.host) {\n throw new Error(`forumKey must be on ${expected.host}.`)\n }\n if (!/\\/(?:topic|t)\\/\\d+/.test(url.pathname)) {\n throw new Error('forumKey must be a created thread (/topic/:tid or /t/:tid), not the forum homepage.')\n }\n return raw.replace(/\\/+$/, '')\n}\n\nfunction forumError(body: unknown, status: number): Error {\n const o = body && typeof body === 'object' ? (body as Record<string, unknown>) : {}\n const st = o.status && typeof o.status === 'object' ? (o.status as Record<string, unknown>) : null\n const msg = (st && typeof st.message === 'string' && st.message) ||\n (typeof o.message === 'string' && o.message) ||\n `forum HTTP ${status}`\n return new Error(msg)\n}\n\nasync function forumFetch(path: string, init: RequestInit & { forumUrl?: string; ticket?: string } = {}) {\n const url = `${continuumDaoForumUrl(init.forumUrl)}${path}`\n const headers: Record<string, string> = {\n Accept: 'application/json',\n ...(init.body ? { 'Content-Type': 'application/json' } : {}),\n }\n if (init.ticket) {\n headers.Authorization = `Bearer ${init.ticket}`\n }\n const res = await fetch(url, {\n method: init.method || 'GET',\n headers,\n body: init.body,\n cache: 'no-store',\n })\n const body = await res.json().catch(() => ({}))\n if (!res.ok) {\n throw forumError(body, res.status)\n }\n return body\n}\n\nexport async function continuumDaoForumResolve(args: { url?: string; tid?: string | number; forumUrl?: string }) {\n const qs = new URLSearchParams()\n if (args.url) qs.set('url', String(args.url))\n if (args.tid != null) qs.set('tid', String(args.tid))\n return forumFetch(`/api/continuum/forum/resolve?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumFetchThread(args: {\n url?: string\n tid?: string | number\n index?: number\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n const qs = new URLSearchParams()\n if (args.url) qs.set('url', String(args.url))\n if (args.tid != null) qs.set('tid', String(args.tid))\n if (args.index != null) qs.set('index', String(args.index))\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/thread?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumReplyCount(args: { url?: string; tid?: string | number; forumUrl?: string }) {\n const qs = new URLSearchParams()\n if (args.url) qs.set('url', String(args.url))\n if (args.tid != null) qs.set('tid', String(args.tid))\n return forumFetch(`/api/continuum/forum/thread/replies?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumFetchPost(args: { pid: string | number; forumUrl?: string }) {\n return forumFetch(`/api/continuum/forum/post?pid=${encodeURIComponent(String(args.pid))}`, {\n forumUrl: args.forumUrl,\n })\n}\n\nfunction assertForumHours(hours?: number) {\n if (hours != null && (!Number.isFinite(hours) || hours <= 0)) {\n throw new Error('hours must be a positive number')\n }\n}\n\nexport function assertContinuumDaoForumSearchInput(args: {\n query?: string\n hours?: number\n since?: string\n}) {\n assertForumHours(args.hours)\n if (!args.query?.trim() && args.hours == null && !args.since?.trim()) {\n throw new Error('Provide query and/or a time filter (hours or since)')\n }\n}\n\nexport function assertContinuumDaoForumRecentInput(args: { hours?: number; since?: string }) {\n assertForumHours(args.hours)\n if (args.hours == null && !args.since?.trim()) {\n throw new Error('Provide a time filter (hours or since)')\n }\n}\n\n/** Search thread titles (original posts) and post bodies. Returns `{ id, title, username, timestamp, createdAt }` (`id` is pid). */\nexport async function continuumDaoForumSearch(args: {\n query?: string\n hours?: number\n since?: string\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n assertContinuumDaoForumSearchInput(args)\n const qs = new URLSearchParams()\n if (args.query?.trim()) qs.set('query', args.query.trim())\n if (args.hours != null) qs.set('hours', String(args.hours))\n if (args.since?.trim()) qs.set('since', args.since.trim())\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/search?${qs}`, { forumUrl: args.forumUrl })\n}\n\n/** Newest readable posts across the whole forum. Returns `{ id, title, username, timestamp, createdAt }`. */\nexport async function continuumDaoForumRecent(args: {\n hours?: number\n since?: string\n start?: number\n limit?: number\n ticket?: string\n forumUrl?: string\n}) {\n assertContinuumDaoForumRecentInput(args)\n const qs = new URLSearchParams()\n if (args.hours != null) qs.set('hours', String(args.hours))\n if (args.since?.trim()) qs.set('since', args.since.trim())\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/recent?${qs}`, {\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n })\n}\n\nexport function assertContinuumDaoForumDeleteInput(args: {\n pid?: string | number\n tid?: string | number\n url?: string\n username?: string\n hours?: number\n since?: string\n ticket?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to delete forum posts')\n }\n assertForumHours(args.hours)\n const hasPost = args.pid != null && String(args.pid).trim() !== ''\n const hasThread = Boolean(args.url?.trim() || (args.tid != null && String(args.tid).trim() !== ''))\n const hasUser = Boolean(args.username?.trim())\n if (Number(hasPost) + Number(hasThread) + Number(hasUser) !== 1) {\n throw new Error('Provide exactly one of pid, tid/url, or username')\n }\n}\n\n/** Admin/moderator soft-delete. Recency (`hours` / `since`) is optional; default is all. */\nexport async function continuumDaoForumDelete(args: {\n pid?: string | number\n tid?: string | number\n url?: string\n username?: string\n hours?: number\n since?: string\n ticket?: string\n forumUrl?: string\n}) {\n assertContinuumDaoForumDeleteInput(args)\n return forumFetch('/api/continuum/forum/delete', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n pid: args.pid,\n tid: args.tid,\n url: args.url,\n username: args.username,\n hours: args.hours,\n since: args.since,\n }),\n })\n}\n\nexport async function continuumDaoForumUserPostIds(args: {\n username: string\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n const qs = new URLSearchParams({ username: args.username })\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/user/posts?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumReply(args: {\n url?: string\n tid?: string | number\n content: string\n toPid?: number\n ticket?: string\n forumUrl?: string\n}) {\n return forumFetch('/api/continuum/forum/reply', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n url: args.url,\n tid: args.tid,\n content: args.content,\n toPid: args.toPid,\n }),\n })\n}\n\nexport async function continuumDaoForumReact(args: {\n pid: string | number\n emoji: string\n ticket?: string\n forumUrl?: string\n}) {\n return forumFetch('/api/continuum/forum/react', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ pid: args.pid, emoji: args.emoji }),\n })\n}\n\nexport async function continuumDaoForumCreateTopic(args: {\n section?: string\n cid?: number\n title: string\n content: string\n ticket?: string\n forumUrl?: string\n}) {\n if (isForumIdeaSection(args.section)) {\n throw new Error(\n 'Ideas & Suggestions is not a proposal category. Use ctm_continuum_dao_forum_create_idea for discussion. Formal proposals must use decision, election, treasury, constitution, or admin.',\n )\n }\n return forumFetch('/api/continuum/forum/topic', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n section: args.section,\n cid: args.cid,\n title: args.title,\n content: args.content,\n }),\n })\n}\n\n/** Informal Ideas & Suggestions post. Not a proposal and not a valid forumKey. */\nexport async function continuumDaoForumCreateIdea(args: {\n title: string\n content: string\n ticket?: string\n forumUrl?: string\n}) {\n return forumFetch('/api/continuum/forum/topic', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n section: FORUM_IDEA_SECTION,\n title: args.title,\n content: args.content,\n }),\n })\n}\n\nexport async function continuumDaoForumMe(args: { ticket?: string; forumUrl?: string } = {}) {\n return forumFetch('/api/continuum/forum/me', { forumUrl: args.forumUrl, ticket: args.ticket })\n}\n\nexport function assertContinuumDaoForumMarkReadInput(args: {\n ticket?: string\n tid?: string | number\n url?: string\n tids?: Array<string | number>\n all?: boolean\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to mark forum topics read')\n }\n const all = Boolean(args.all)\n const one = Boolean(args.url?.trim() || (args.tid != null && String(args.tid).trim() !== ''))\n const many = Array.isArray(args.tids) && args.tids.length > 0\n if (Number(all) + Number(one) + Number(many) !== 1) {\n throw new Error('Provide exactly one of tid/url, tids, or all')\n }\n}\n\nexport async function continuumDaoForumUnread(args: {\n ticket?: string\n filter?: string\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to list unread forum topics')\n }\n const qs = new URLSearchParams()\n if (args.filter?.trim()) qs.set('filter', args.filter.trim())\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n const suffix = qs.toString() ? `?${qs}` : ''\n return forumFetch(`/api/continuum/forum/unread${suffix}`, {\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n })\n}\n\nexport async function continuumDaoForumMarkRead(args: {\n ticket?: string\n tid?: string | number\n url?: string\n tids?: Array<string | number>\n all?: boolean\n forumUrl?: string\n}) {\n assertContinuumDaoForumMarkReadInput(args)\n return forumFetch('/api/continuum/forum/read', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n tid: args.tid,\n url: args.url,\n tids: args.tids,\n all: args.all,\n }),\n })\n}\n\nexport async function continuumDaoForumMarkUnread(args: {\n ticket?: string\n tid?: string | number\n url?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to mark a forum topic unread')\n }\n if (!args.url?.trim() && (args.tid == null || String(args.tid).trim() === '')) {\n throw new Error('Provide tid or url')\n }\n return forumFetch('/api/continuum/forum/unread', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ tid: args.tid, url: args.url }),\n })\n}\n\nexport async function continuumDaoForumSections(args: { forumUrl?: string } = {}) {\n return forumFetch('/api/continuum/forum/sections', { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoMpaListing(args: {\n kind: 'offer' | 'request' | 'directory' | 'opportunity'\n title?: string\n summary: string\n details: string\n capabilities: string[]\n expiresAt?: string\n contact?: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to post an MPA listing')\n }\n return forumFetch('/api/continuum/forum/listing', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n kind: args.kind,\n title: args.title,\n summary: args.summary,\n details: args.details,\n capabilities: args.capabilities,\n expiresAt: args.expiresAt,\n contact: args.contact,\n }),\n })\n}\n\nexport async function continuumDaoMpaRetract(args: {\n url?: string\n tid?: string | number\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to retract an MPA listing')\n }\n return forumFetch('/api/continuum/forum/retract', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ url: args.url, tid: args.tid }),\n })\n}\n\nexport async function continuumDaoMpaFlag(args: {\n url?: string\n tid?: string | number\n reason: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to flag an MPA listing')\n }\n return forumFetch('/api/continuum/forum/flag', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ url: args.url, tid: args.tid, reason: args.reason }),\n })\n}\n\nexport async function continuumDaoMpaMailboxList(args: { ticket?: string; forumUrl?: string } = {}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to list Agent Mail')\n }\n return forumFetch('/api/continuum/forum/mailbox', { forumUrl: args.forumUrl, ticket: args.ticket })\n}\n\nexport async function continuumDaoMpaMailboxOpen(args: {\n username: string\n content?: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to open Agent Mail')\n }\n return forumFetch('/api/continuum/forum/mailbox', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ username: args.username, content: args.content }),\n })\n}\n\nexport async function continuumDaoMpaMailboxSend(args: {\n username?: string\n url?: string\n tid?: string | number\n content: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to send Agent Mail')\n }\n return forumFetch('/api/continuum/forum/mailbox/send', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n username: args.username,\n url: args.url,\n tid: args.tid,\n content: args.content,\n }),\n })\n}\n\nexport async function continuumDaoTechnocoreBind(args: {\n did: string\n signature: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to bind a Technocore DID')\n }\n return forumFetch('/api/continuum/forum/technocore/bind', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ did: args.did, signature: args.signature }),\n })\n}\n\nexport async function continuumDaoForumSignOut(args: { ticket?: string; forumUrl?: string } = {}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to sign out')\n }\n return forumFetch('/api/continuum/eip712/logout', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({}),\n })\n}\n\nexport type ForumSignInEligible = {\n ok: boolean\n eligible: boolean\n address?: string\n reason?: string\n}\n\nexport async function continuumDaoForumSignInEligible(args: {\n address: string\n forumUrl?: string\n}): Promise<ForumSignInEligible> {\n const address = getAddress(args.address)\n const url = `${continuumDaoForumUrl(args.forumUrl)}/api/continuum/eip712/eligible?address=${encodeURIComponent(address)}`\n const res = await fetch(url, { headers: { Accept: 'application/json' }, cache: 'no-store' })\n const body = (await res.json().catch(() => ({}))) as Record<string, unknown>\n const st = body.status && typeof body.status === 'object' ? (body.status as Record<string, unknown>) : null\n const reason =\n (typeof body.reason === 'string' && body.reason) ||\n (st && typeof st.message === 'string' && st.message) ||\n undefined\n const ok = res.ok && Boolean(body.ok ?? body.eligible)\n return {\n ok,\n eligible: ok,\n address: typeof body.address === 'string' ? body.address : address,\n reason: ok ? undefined : reason || 'Address does not meet the veCTM threshold',\n }\n}\n\nexport async function continuumDaoForumSignInNonce(args: {\n address: string\n nodeKey?: string\n username?: string\n forumUrl?: string\n}) {\n const qs = new URLSearchParams({\n address: args.address,\n nodeKey: args.nodeKey || '',\n username: args.username || '',\n })\n return forumFetch(`/api/continuum/eip712/nonce?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoForumSignIn(args: {\n keyGen: KeyGenSubset\n executorAddress: string\n chainId: number\n purposeText: string\n nodeKey?: string\n username?: string\n forumUrl?: string\n expiryDate?: number\n}) {\n const owner = getAddress(args.executorAddress)\n const gate = await continuumDaoForumSignInEligible({ address: owner, forumUrl: args.forumUrl })\n if (!gate.ok) {\n throw new Error(\n `${gate.reason || 'Address does not meet the veCTM threshold'}. Do not start a multi-sign request.`,\n )\n }\n const typed = (await continuumDaoForumSignInNonce({\n address: owner,\n nodeKey: args.nodeKey,\n username: args.username,\n forumUrl: args.forumUrl,\n })) as {\n domain: { name: string; version: string; chainId: number; verifyingContract: `0x${string}` }\n types: Record<string, { name: string; type: string }[]>\n primaryType: string\n message: Record<string, unknown>\n nodeKey?: string\n }\n const types = { ...typed.types }\n delete types.EIP712Domain\n return buildEip712Multisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: owner,\n legs: [\n {\n typedData: {\n domain: typed.domain,\n types,\n primaryType: typed.primaryType,\n message: typed.message,\n },\n delivery: {\n kind: FORUM_LOGIN_DELIVERY_KIND,\n forum: continuumDaoForumUrl(args.forumUrl),\n nodeKey: args.nodeKey || typed.nodeKey || '',\n },\n },\n ],\n expiryDate: args.expiryDate,\n })\n}\n","/**\n * ContinuumDAO governor encode + Multi-Sign builders.\n * Do not prepend billing legs. Queue is not implemented on-chain (no timelock).\n */\nimport { type Address, createPublicClient, defineChain, encodeFunctionData, encodePacked, getAddress, keccak256, padHex, parseAbi, toHex, zeroAddress } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport {\n CONTINUUM_DAO_GOVERNANCE_API,\n CONTINUUM_DAO_PROTOCOL_ID,\n governorAddressOnEvmChain,\n isConfiguredAddress,\n isContinuumDaoLockChain,\n} from './constants.js'\nimport { assertContinuumDaoForumTopicKey } from './forum.js'\nimport type { ContinuumDaoCommonArgs } from './multisign.js'\n\nexport const CONTINUUM_DAO_PROPOSE_FALLBACK = 550_000n\nexport const CONTINUUM_DAO_VOTE_FALLBACK = 220_000n\nexport const CONTINUUM_DAO_EXECUTE_FALLBACK = 800_000n\nexport const CONTINUUM_DAO_CANCEL_FALLBACK = 180_000n\n\nexport const CONTINUUM_DAO_GOV_EVM_TYPES = new Set([\n 'continuum_dao_propose',\n 'continuum_dao_cast_vote',\n 'continuum_dao_execute',\n 'continuum_dao_cancel',\n])\n\nconst governorWriteAbi = parseAbi([\n 'function propose(address[] targets, uint256[] values, bytes[] calldatas, string description) returns (uint256)',\n 'function castVote(uint256 proposalId, uint8 support) returns (uint256)',\n 'function castVoteWithReasonAndParams(uint256 proposalId, uint8 support, string reason, bytes params) returns (uint256)',\n 'function execute(uint256 proposalId) payable',\n 'function cancel(uint256 proposalId)',\n])\n\nconst governorReadAbi = parseAbi([\n 'function hashProposal(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) view returns (uint256)',\n 'function state(uint256 proposalId) view returns (uint8)',\n 'function getVotes(address account, uint256 timepoint) view returns (uint256)',\n 'function proposalThreshold() view returns (uint256)',\n 'function proposalCount() view returns (uint256)',\n 'function clock() view returns (uint48)',\n 'function proposalVotes(uint256 proposalId) view returns (uint256 againstVotes, uint256 forVotes, uint256 abstainVotes)',\n 'function hasVoted(uint256 proposalId, address account) view returns (bool)',\n 'function proposalSnapshot(uint256 proposalId) view returns (uint256)',\n])\n\nexport type GovActionInput = {\n target: string\n value?: string\n signature?: string\n inputs?: { name?: string; type: string; value: string }[]\n}\n\nexport type GovOptionInput = {\n label: string\n actions: GovActionInput[]\n}\n\nfunction splitAbiParamList(inner: string): string[] {\n const out: string[] = []\n let buf = ''\n let depth = 0\n for (const ch of inner) {\n if (ch === '(') depth += 1\n if (ch === ')') depth -= 1\n if (ch === ',' && depth === 0) {\n if (buf.trim()) out.push(buf.trim())\n buf = ''\n continue\n }\n buf += ch\n }\n if (buf.trim()) out.push(buf.trim())\n return out\n}\n\nfunction signatureToAbiInputs(signature: string): { type: string }[] {\n const start = signature.indexOf('(')\n if (start === -1) return []\n let depth = 0\n let end = -1\n for (let i = start; i < signature.length; i++) {\n const ch = signature[i]\n if (ch === '(') depth += 1\n if (ch === ')') {\n depth -= 1\n if (depth === 0) {\n end = i\n break\n }\n }\n }\n if (end === -1) return []\n const inner = signature.slice(start + 1, end)\n if (!inner.trim()) return []\n return splitAbiParamList(inner).map((t) => ({ type: t }))\n}\n\nfunction coerceAbiValue(type: string, value: string): string | bigint | boolean | unknown[] {\n const trimmed = (value ?? '').trim()\n if (type.startsWith('(') && type.endsWith(')')) {\n const parsed = JSON.parse(trimmed || '[]') as unknown\n if (!Array.isArray(parsed)) throw new Error('tuple value must be a JSON array')\n const parts = splitAbiParamList(type.slice(1, -1))\n return parts.map((part, i) => {\n const child = parsed[i]\n if (typeof child === 'string') return coerceAbiValue(part, child)\n return coerceAbiValue(part, JSON.stringify(child ?? ''))\n })\n }\n const fixed = type.match(/^(.+)\\[(\\d+)\\]$/)\n if (fixed && !type.endsWith('[]')) {\n const parsed = trimmed.startsWith('[') ? (JSON.parse(trimmed) as unknown) : trimmed.split(',')\n if (!Array.isArray(parsed)) throw new Error('fixed array value must be a JSON array')\n return (parsed as unknown[]).map((x) => coerceAbiValue(fixed[1]!, String(x)))\n }\n if (type.endsWith('[]')) {\n const arr = trimmed.startsWith('[')\n ? (JSON.parse(trimmed) as unknown[]).map((x) => String(x))\n : trimmed\n ? trimmed.split(',').map((s) => s.trim())\n : []\n const baseType = type.slice(0, -2)\n return arr.map((v) => coerceAbiValue(baseType, v)) as unknown[]\n }\n if (type === 'address') return trimmed as `0x${string}`\n if (type.startsWith('uint') || type.startsWith('int')) return BigInt(trimmed || '0')\n if (type === 'bool') return trimmed === 'true' || trimmed === '1'\n return trimmed\n}\n\nexport function encodeGovActionCalldata(signature: string, inputs: { type: string; value: string }[] = []): `0x${string}` {\n const sig = signature.trim()\n if (!sig) return '0x'\n const name = sig.slice(0, sig.indexOf('(') === -1 ? sig.length : sig.indexOf('('))\n const types = signatureToAbiInputs(sig)\n if (types.length !== inputs.length) throw new Error('encodeGovActionCalldata: inputs length mismatch')\n const args = inputs.map((inp, i) => coerceAbiValue(types[i]!.type, inp.value))\n return encodeFunctionData({\n abi: [\n {\n type: 'function' as const,\n name,\n inputs: types.map((t, i) => ({ name: `arg${i}`, type: t.type })),\n outputs: [],\n stateMutability: 'nonpayable' as const,\n },\n ],\n functionName: name,\n args,\n })\n}\n\nexport function proposalDescriptionHash(description: string): `0x${string}` {\n return keccak256(encodePacked(['string'], [description]))\n}\n\nexport function encodeDeltaMetadata(nOptions: number, nWinners: number, optionStartIndices: number[]): `0x${string}` {\n if (optionStartIndices.length !== nOptions) {\n throw new Error('encodeDeltaMetadata: optionStartIndices length must equal nOptions')\n }\n const parts = [\n padHex(toHex(nOptions), { size: 32 }).slice(2),\n padHex(toHex(nWinners), { size: 32 }).slice(2),\n ...optionStartIndices.map((i) => padHex(toHex(i), { size: 32 }).slice(2)),\n ]\n return (`0x${parts.join('')}`) as `0x${string}`\n}\n\n/** Delta vote params: one uint256 per option plus a final NOTA slot. */\nexport function encodeDeltaVoteParams(weights: Array<string | number | bigint>): `0x${string}` {\n if (weights.length < 3) throw new Error('Delta vote params need nOptions + NOTA (at least 3 slots).')\n return (`0x${weights.map((w) => padHex(toHex(BigInt(w)), { size: 32 }).slice(2)).join('')}`) as `0x${string}`\n}\n\nfunction noOpAction(noOpTarget: Address): { target: Address; value: bigint; calldata: `0x${string}` } {\n return { target: getAddress(noOpTarget), value: 0n, calldata: '0x' }\n}\n\nfunction encodeUserAction(a: GovActionInput): { target: Address; value: bigint; calldata: `0x${string}` } {\n const target = getAddress(a.target)\n if (target === zeroAddress) throw new Error('Action target cannot be the zero address (reserved for Delta metadata).')\n const value = BigInt(String(a.value || '0'))\n const calldata = encodeGovActionCalldata(a.signature ?? '', a.inputs ?? [])\n return { target, value, calldata }\n}\n\nexport function buildBravoProposalArgs(\n actions: GovActionInput[],\n description: string,\n noOpTarget: string,\n): {\n targets: Address[]\n values: bigint[]\n calldatas: `0x${string}`[]\n description: string\n} {\n const encoded =\n actions.length === 0 ? [noOpAction(getAddress(noOpTarget))] : actions.map(encodeUserAction)\n if (encoded[0]!.target === zeroAddress) {\n throw new Error('Bravo first target cannot be address(0); that encoding is Delta.')\n }\n return {\n targets: encoded.map((e) => e.target),\n values: encoded.map((e) => e.value),\n calldatas: encoded.map((e) => e.calldata),\n description,\n }\n}\n\nexport function buildDeltaProposalArgs(\n options: GovOptionInput[],\n nWinners: number,\n description: string,\n noOpTarget: string,\n): {\n targets: Address[]\n values: bigint[]\n calldatas: `0x${string}`[]\n description: string\n} {\n if (options.length < 2) throw new Error('Delta proposals need at least 2 options.')\n if (nWinners < 1 || nWinners >= options.length) throw new Error('Delta nWinners must be >= 1 and < nOptions.')\n const fallback = getAddress(noOpTarget)\n const targets: Address[] = [zeroAddress]\n const values: bigint[] = [0n]\n const calldatas: `0x${string}`[] = []\n const optionStartIndices: number[] = []\n let nextIndex = 1\n for (const opt of options) {\n optionStartIndices.push(nextIndex)\n const userActions = opt.actions ?? []\n const encoded = userActions.length === 0 ? [noOpAction(fallback)] : userActions.map(encodeUserAction)\n for (const e of encoded) {\n targets.push(e.target)\n values.push(e.value)\n calldatas.push(e.calldata)\n nextIndex += 1\n }\n }\n calldatas.unshift(encodeDeltaMetadata(options.length, nWinners, optionStartIndices))\n return { targets, values, calldatas, description }\n}\n\nfunction requireGovChain(chainId: number): void {\n if (!isContinuumDaoLockChain(chainId)) {\n throw new Error('ContinuumDAO governance is Linea-only.')\n }\n}\n\nfunction requireGovernor(chainId: number, override?: string): Address {\n requireGovChain(chainId)\n if (override && isConfiguredAddress(override)) return getAddress(override)\n const gov = governorAddressOnEvmChain(chainId)\n if (!gov) throw new Error('Governor address is not configured for this chain yet.')\n return gov\n}\n\nfunction meta(\n evmType: string,\n chainId: number,\n to: Address,\n extra: Record<string, unknown>,\n gasLimit: bigint,\n): Record<string, unknown> {\n return {\n destinationAddress: to,\n signatureText: JSON.stringify({ kind: 'ContinuumDAO', ...extra, chainId }),\n evm: { type: evmType, version: 1, chainId: String(chainId), protocolId: CONTINUUM_DAO_PROTOCOL_ID },\n continuumDao: { ...extra, gas: { baseGasUnits: gasLimit.toString() } },\n }\n}\n\nasync function finalizeGov(\n args: ContinuumDaoCommonArgs,\n to: Address,\n data: `0x${string}`,\n fallbackGas: bigint,\n evmType: string,\n extra: Record<string, unknown>,\n purposeSuffix: string,\n value = 0n,\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const step: EvmTxStep = { to, data, value, fallbackGas }\n const firstDataNo0x = data.startsWith('0x') ? data.slice(2) : data\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl.trim(),\n executorAddress: args.executorAddress,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: [step],\n purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: to,\n buildBatchMeta: ({ gasLimit }) => meta(evmType, args.chainId, to, extra, gasLimit),\n })\n}\n\nasync function requireProposalThreshold(\n args: ContinuumDaoCommonArgs & { governor?: string },\n): Promise<{ votes: string; threshold: string }> {\n const power = await continuumDaoFetchVotingPower({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n account: args.executorAddress,\n governor: args.governor,\n })\n if (BigInt(power.votes) < BigInt(power.threshold)) {\n throw new Error(\n `Proposer voting power ${power.votes} is below ContinuumDAO.proposalThreshold() ${power.threshold}. ` +\n `On-chain rule: max(1000e18 ve power, 1% of total voting power). Delegation applies at the KeyGen ETH address.`,\n )\n }\n return power\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoProposeBravo(\n args: ContinuumDaoCommonArgs & {\n title: string\n actions?: GovActionInput[]\n governor?: string\n noOpTarget?: string\n forumKey: string\n forumUrl?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string; proposalArgs: ReturnType<typeof buildBravoProposalArgs> }> {\n const forumKey = assertContinuumDaoForumTopicKey(args.forumKey, args.forumUrl)\n const gov = requireGovernor(args.chainId, args.governor)\n await requireProposalThreshold(args)\n const noOp = args.noOpTarget?.trim() || args.executorAddress\n const proposalArgs = buildBravoProposalArgs(args.actions ?? [], args.title.trim(), noOp)\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'propose',\n args: [proposalArgs.targets, proposalArgs.values, proposalArgs.calldatas, proposalArgs.description],\n })\n const built = await finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_PROPOSE_FALLBACK,\n 'continuum_dao_propose',\n { name: 'ContinuumDAO.propose', configuration: 'bravo', title: proposalArgs.description, forumKey },\n 'continuum-dao propose bravo',\n )\n return { ...built, proposalArgs }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoProposeDelta(\n args: ContinuumDaoCommonArgs & {\n title: string\n options: GovOptionInput[]\n nWinners: number\n governor?: string\n noOpTarget?: string\n forumKey: string\n forumUrl?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string; proposalArgs: ReturnType<typeof buildDeltaProposalArgs> }> {\n const forumKey = assertContinuumDaoForumTopicKey(args.forumKey, args.forumUrl)\n const gov = requireGovernor(args.chainId, args.governor)\n await requireProposalThreshold(args)\n const noOp = args.noOpTarget?.trim() || args.executorAddress\n const proposalArgs = buildDeltaProposalArgs(args.options, Number(args.nWinners), args.title.trim(), noOp)\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'propose',\n args: [proposalArgs.targets, proposalArgs.values, proposalArgs.calldatas, proposalArgs.description],\n })\n const built = await finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_PROPOSE_FALLBACK,\n 'continuum_dao_propose',\n { name: 'ContinuumDAO.propose', configuration: 'delta', title: proposalArgs.description, nWinners: args.nWinners, forumKey },\n 'continuum-dao propose delta',\n )\n return { ...built, proposalArgs }\n}\n\nasync function requireVoteEligible(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; governor?: string },\n): Promise<void> {\n const st = await continuumDaoFetchProposalState({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n proposalId: args.proposalId,\n governor: args.governor,\n })\n if (st.state !== 1) {\n throw new Error(`Proposal is not Active (on-chain state ${st.state}).`)\n }\n const elig = await continuumDaoFetchProposalVoteEligibility({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n proposalId: args.proposalId,\n account: args.executorAddress,\n governor: args.governor,\n })\n if (elig.hasVoted) throw new Error('This KeyGen has already voted on this proposal.')\n if (BigInt(elig.snapshotVotes) === 0n) {\n throw new Error('No veCTM voting power at snapshot for this KeyGen.')\n }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCastVoteBravo(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; support: 0 | 1 | 2; governor?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const gov = requireGovernor(args.chainId, args.governor)\n const proposalId = BigInt(String(args.proposalId).trim())\n await requireVoteEligible(args)\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'castVote',\n args: [proposalId, args.support],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_VOTE_FALLBACK,\n 'continuum_dao_cast_vote',\n { name: 'ContinuumDAO.castVote', proposalId: proposalId.toString(), support: args.support },\n 'continuum-dao vote bravo',\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCastVoteDelta(\n args: ContinuumDaoCommonArgs & {\n proposalId: string | number | bigint\n weights: Array<string | number | bigint>\n governor?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const gov = requireGovernor(args.chainId, args.governor)\n const proposalId = BigInt(String(args.proposalId).trim())\n if (args.weights.length < 3) {\n throw new Error('Delta vote must include one weight per option plus a NOTA slot.')\n }\n await requireVoteEligible(args)\n const params = encodeDeltaVoteParams(args.weights)\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'castVoteWithReasonAndParams',\n args: [proposalId, 0, '', params],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_VOTE_FALLBACK,\n 'continuum_dao_cast_vote',\n { name: 'ContinuumDAO.castVoteWithReasonAndParams', proposalId: proposalId.toString() },\n 'continuum-dao vote delta',\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoExecute(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; governor?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const gov = requireGovernor(args.chainId, args.governor)\n const proposalId = BigInt(String(args.proposalId).trim())\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'execute',\n args: [proposalId],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_EXECUTE_FALLBACK,\n 'continuum_dao_execute',\n { name: 'ContinuumDAO.execute', proposalId: proposalId.toString() },\n 'continuum-dao execute',\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCancel(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; governor?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const gov = requireGovernor(args.chainId, args.governor)\n const proposalId = BigInt(String(args.proposalId).trim())\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'cancel',\n args: [proposalId],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_CANCEL_FALLBACK,\n 'continuum_dao_cancel',\n { name: 'ContinuumDAO.cancel', proposalId: proposalId.toString() },\n 'continuum-dao cancel',\n )\n}\n\nfunction publicClient(rpcUrl: string, chainId: number) {\n return createPublicClient({\n chain: defineChain({\n id: chainId,\n name: 'ContinuumDAO',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl.trim()] } },\n }),\n transport: defiEvmTransport(rpcUrl.trim()),\n })\n}\n\nexport async function continuumDaoHashProposal(args: {\n chainId: number | string\n rpcUrl: string\n targets: Address[]\n values: bigint[]\n calldatas: `0x${string}`[]\n description: string\n governor?: string\n}): Promise<{ proposalId: string }> {\n const chainId = Number(args.chainId)\n const gov = requireGovernor(chainId, args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const id = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'hashProposal',\n args: [args.targets, args.values, args.calldatas, proposalDescriptionHash(args.description)],\n })\n return { proposalId: id.toString() }\n}\n\nexport async function continuumDaoFetchVotingPower(args: {\n chainId: number | string\n rpcUrl: string\n account: string\n governor?: string\n}): Promise<{ votes: string; threshold: string; clock: string }> {\n const chainId = Number(args.chainId)\n const gov = requireGovernor(chainId, args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const clock = await client.readContract({ address: gov, abi: governorReadAbi, functionName: 'clock' })\n const timepoint = clock > 0 ? clock - 1 : 0\n const [votes, threshold] = await Promise.all([\n client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'getVotes',\n args: [getAddress(args.account), BigInt(timepoint)],\n }),\n client.readContract({ address: gov, abi: governorReadAbi, functionName: 'proposalThreshold' }),\n ])\n return { votes: votes.toString(), threshold: threshold.toString(), clock: clock.toString() }\n}\n\nexport async function continuumDaoFetchProposalState(args: {\n chainId: number | string\n rpcUrl: string\n proposalId: string | number | bigint\n governor?: string\n}): Promise<{\n state: number\n againstVotes: string\n forVotes: string\n abstainVotes: string\n /** True when proposalVotes() failed but state() succeeded. */\n votesPartial: boolean\n}> {\n const chainId = Number(args.chainId)\n const gov = requireGovernor(chainId, args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const proposalId = BigInt(String(args.proposalId).trim())\n const state = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'state',\n args: [proposalId],\n })\n let againstVotes = '0'\n let forVotes = '0'\n let abstainVotes = '0'\n let votesPartial = false\n try {\n const votes = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'proposalVotes',\n args: [proposalId],\n })\n againstVotes = votes[0].toString()\n forVotes = votes[1].toString()\n abstainVotes = votes[2].toString()\n } catch {\n votesPartial = true\n }\n return {\n state: Number(state),\n againstVotes,\n forVotes,\n abstainVotes,\n votesPartial,\n }\n}\n\n/** Snapshot voting power and prior vote for a KeyGen on a proposal. */\nexport async function continuumDaoFetchProposalVoteEligibility(args: {\n chainId: number | string\n rpcUrl: string\n proposalId: string | number | bigint\n account: string\n governor?: string\n}): Promise<{ hasVoted: boolean; snapshotVotes: string; snapshotBlock: string }> {\n const chainId = Number(args.chainId)\n const gov = requireGovernor(chainId, args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const proposalId = BigInt(String(args.proposalId).trim())\n const account = getAddress(args.account)\n const [hasVoted, snapshotBlock] = await Promise.all([\n client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'hasVoted',\n args: [proposalId, account],\n }),\n client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'proposalSnapshot',\n args: [proposalId],\n }),\n ])\n const snapshotVotes = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'getVotes',\n args: [account, snapshotBlock],\n })\n return {\n hasVoted,\n snapshotVotes: snapshotVotes.toString(),\n snapshotBlock: snapshotBlock.toString(),\n }\n}\n\nexport async function continuumDaoFetchProposalCount(args: {\n chainId: number\n rpcUrl: string\n governor?: string\n}): Promise<{ count: string }> {\n const gov = requireGovernor(args.chainId, args.governor)\n const client = publicClient(args.rpcUrl, args.chainId)\n const count = await client.readContract({ address: gov, abi: governorReadAbi, functionName: 'proposalCount' })\n return { count: count.toString() }\n}\n\nexport async function continuumDaoFetchProposals(args: {\n start?: number\n end?: number\n}): Promise<{ proposals: unknown[]; total?: number }> {\n const start = args.start ?? 0\n const end = args.end ?? start + 20\n const res = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ start, end }),\n })\n if (!res.ok) throw new Error(`proposals: ${res.status} ${await res.text()}`)\n return (await res.json()) as { proposals: unknown[]; total?: number }\n}\n\nexport const GOVERNOR_STATE = {\n Pending: 0,\n Active: 1,\n Canceled: 2,\n Defeated: 3,\n Succeeded: 4,\n Queued: 5,\n Expired: 6,\n Executed: 7,\n} as const\n\nexport const GOVERNOR_STATE_LABELS = [\n 'Pending',\n 'Active',\n 'Canceled',\n 'Defeated',\n 'Succeeded',\n 'Queued',\n 'Expired',\n 'Executed',\n] as const\n\nexport type LiveProposalBucket = 'live' | 'pending' | 'readyToExecute' | 'recentlyCompleted' | 'unknown'\n\nexport function bucketGovernorState(state: number | null | undefined): LiveProposalBucket {\n if (state == null || !Number.isFinite(state)) return 'unknown'\n if (state === GOVERNOR_STATE.Active) return 'live'\n if (state === GOVERNOR_STATE.Pending) return 'pending'\n if (state === GOVERNOR_STATE.Succeeded) return 'readyToExecute'\n if (\n state === GOVERNOR_STATE.Canceled ||\n state === GOVERNOR_STATE.Defeated ||\n state === GOVERNOR_STATE.Queued ||\n state === GOVERNOR_STATE.Expired ||\n state === GOVERNOR_STATE.Executed\n ) {\n return 'recentlyCompleted'\n }\n return 'unknown'\n}\n\nexport type LiveProposalRow = {\n id?: number\n onchainId: string\n title: string\n configuration?: number\n state: number | null\n stateLabel: string\n bucket: LiveProposalBucket\n againstVotes?: string\n forVotes?: string\n abstainVotes?: string\n}\n\nexport type ContinuumDaoLiveProposalsResult = {\n overlay: 'on-chain' | 'backend-only'\n scanned: number\n live: LiveProposalRow[]\n pending: LiveProposalRow[]\n readyToExecute: LiveProposalRow[]\n recentlyCompleted: LiveProposalRow[]\n unknown: LiveProposalRow[]\n note: string\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as Record<string, unknown>) : null\n}\n\nfunction parseBackendProposal(raw: unknown): { id?: number; onchainId: string; title: string; configuration?: number } | null {\n const row = asRecord(raw)\n if (!row) return null\n const onchainId = String(row.onchainId ?? row.onchain_id ?? row.proposalId ?? '').trim()\n if (!onchainId) return null\n const idRaw = row.id\n const id = typeof idRaw === 'number' ? idRaw : Number(idRaw)\n return {\n id: Number.isFinite(id) ? id : undefined,\n onchainId,\n title: String(row.title ?? 'Untitled'),\n configuration: typeof row.configuration === 'number' ? row.configuration : undefined,\n }\n}\n\nexport function summarizeLiveProposals(result: Omit<ContinuumDaoLiveProposalsResult, 'note'>): string {\n if (result.overlay === 'backend-only') {\n return `Scanned ${result.scanned} backend proposal(s) but could not overlay ContinuumDAO.state. Do not call them live. Pass Linea chainId + rpcUrl + a non-zero governor.`\n }\n const liveTitles = result.live.map((p) => `#${p.id ?? '—'} ${p.title}`).join('; ') || 'none'\n const execTitles = result.readyToExecute.map((p) => `#${p.id ?? '—'} ${p.title}`).join('; ') || 'none'\n return `Live (Active, voting now): ${result.live.length} (${liveTitles}). Pending: ${result.pending.length}. Passed, ready to execute (Succeeded): ${result.readyToExecute.length} (${execTitles}). Recently completed in this scan: ${result.recentlyCompleted.length}. Queue is not implemented.`\n}\n\nasync function mapPool<T, R>(items: T[], concurrency: number, fn: (item: T) => Promise<R>): Promise<R[]> {\n const out: R[] = []\n let i = 0\n const workers = Array.from({ length: Math.min(concurrency, items.length) }, async () => {\n while (i < items.length) {\n const idx = i\n i += 1\n out[idx] = await fn(items[idx]!)\n }\n })\n await Promise.all(workers)\n return out\n}\n\nexport async function continuumDaoFetchLiveProposals(args: {\n chainId?: number | string\n rpcUrl?: string\n governor?: string\n limit?: number\n completedLimit?: number\n}): Promise<ContinuumDaoLiveProposalsResult> {\n const limit = Math.min(Math.max(Number(args.limit) || 40, 1), 100)\n const completedLimit = Math.min(Math.max(Number(args.completedLimit) || 8, 0), 20)\n const listed = await continuumDaoFetchProposals({ start: 0, end: limit })\n const rawList = Array.isArray(listed.proposals) ? listed.proposals : []\n const parsed = rawList.map(parseBackendProposal).filter((p): p is NonNullable<typeof p> => p != null)\n\n const chainId = args.chainId != null && String(args.chainId).trim() !== '' ? Number(args.chainId) : NaN\n const rpcUrl = (args.rpcUrl ?? '').trim()\n let overlay: 'on-chain' | 'backend-only' = 'backend-only'\n try {\n if (rpcUrl && Number.isFinite(chainId)) {\n requireGovernor(chainId, args.governor)\n overlay = 'on-chain'\n }\n } catch {\n overlay = 'backend-only'\n }\n\n const rows: LiveProposalRow[] = overlay === 'on-chain'\n ? await mapPool(parsed, 6, async (p) => {\n try {\n const st = await continuumDaoFetchProposalState({\n chainId,\n rpcUrl,\n proposalId: p.onchainId,\n governor: args.governor,\n })\n return {\n ...p,\n state: st.state,\n stateLabel: GOVERNOR_STATE_LABELS[st.state] ?? String(st.state),\n bucket: bucketGovernorState(st.state),\n againstVotes: st.againstVotes,\n forVotes: st.forVotes,\n abstainVotes: st.abstainVotes,\n }\n } catch {\n return { ...p, state: null, stateLabel: 'Unknown', bucket: 'unknown' as const }\n }\n })\n : parsed.map((p) => ({ ...p, state: null, stateLabel: 'Unknown', bucket: 'unknown' as const }))\n\n const live = rows.filter((r) => r.bucket === 'live')\n const pending = rows.filter((r) => r.bucket === 'pending')\n const readyToExecute = rows.filter((r) => r.bucket === 'readyToExecute')\n const recentlyCompleted = rows.filter((r) => r.bucket === 'recentlyCompleted').slice(0, completedLimit)\n const unknown = rows.filter((r) => r.bucket === 'unknown')\n const grouped = {\n overlay,\n scanned: rows.length,\n live,\n pending,\n readyToExecute,\n recentlyCompleted,\n unknown,\n }\n return { ...grouped, note: summarizeLiveProposals(grouped) }\n}\n\nexport async function continuumDaoFetchProposal(args: { id: string | number }): Promise<{ proposal: unknown }> {\n const res = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals/${args.id}`, { cache: 'no-store' })\n if (!res.ok) throw new Error(`proposal: ${res.status} ${await res.text()}`)\n return { proposal: await res.json() }\n}\n\nexport type ContinuumDaoRegisterProposalPayload = {\n onchainId: string\n title: string\n description: string\n proposer: string\n forumKey: string\n type: number\n configuration: 0 | 1\n actions?: unknown[]\n options?: unknown[]\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoProposeDeltaFromMcp(\n args: ContinuumDaoCommonArgs & {\n title: string\n options: GovOptionInput[]\n nWinners: string | number\n governor?: string\n noOpTarget?: string\n forumKey: string\n forumUrl?: string\n },\n) {\n return buildEvmMultisignBodyContinuumDaoProposeDelta({\n ...args,\n nWinners: Number(args.nWinners),\n })\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCastVoteBravoFromMcp(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; support: 0 | 1 | 2 | string; governor?: string },\n) {\n const support = Number(args.support)\n if (support !== 0 && support !== 1 && support !== 2) throw new Error('Bravo support must be 0, 1, or 2.')\n return buildEvmMultisignBodyContinuumDaoCastVoteBravo({ ...args, support })\n}\n\nexport async function continuumDaoRegisterProposal(\n payload: ContinuumDaoRegisterProposalPayload,\n): Promise<{ ok: true; result: unknown }> {\n assertContinuumDaoForumTopicKey(payload.forumKey)\n const res = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals/create`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n })\n if (!res.ok) throw new Error(`proposals/create: ${res.status} ${await res.text()}`)\n return { ok: true, result: await res.json() }\n}\n","/**\n * Turn a backend proposal into a briefing the agent can read aloud.\n * Encoder no-ops (value 0, calldata 0x) are labeled signaling, not transfers.\n */\nimport { applyForumSectionCheck, continuumDaoForumFetchThread } from './forum.js'\nimport { continuumDaoFetchProposal, continuumDaoFetchProposals } from './governance.js'\n\nexport const PROPOSAL_TYPE_LABELS = ['Admin', 'Constitution', 'Decision', 'Election', 'Treasury'] as const\n\nconst APPROVE_RE = /^(approve|increaseAllowance|increaseapproval)\\(/i\nconst DENY_SIG_RE = /^(transfer|transferFrom|approve|increaseAllowance|setOwner|upgradeTo|upgradeToAndCall)\\(/i\n\nexport type ExplainedAction = {\n line: string\n noOp: boolean\n networkLabel: string\n chainId: string\n viaC3: boolean\n target: string\n value: string\n signature: string\n flags: string[]\n}\n\nexport type ExplainedOption = {\n label: string\n actions: ExplainedAction[]\n}\n\nexport type ContinuumDaoExplainProposalResult = {\n id?: number\n onchainId: string\n title: string\n description: string\n proposer: string\n forumKey: string\n forumSection?: string | null\n forumCid?: number | null\n typeLabel: string\n configuration: 'bravo' | 'delta'\n nWinners?: number\n briefing: string\n actions: ExplainedAction[]\n options: ExplainedOption[]\n risks: string[]\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as Record<string, unknown>) : null\n}\n\nfunction str(v: unknown, fallback = ''): string {\n return v == null ? fallback : String(v)\n}\n\nexport function isGovNoOpAction(action: {\n target?: string\n value?: string\n signature?: string\n calldata?: string\n}): boolean {\n const value = (action.value ?? '0').trim()\n const sig = (action.signature ?? '').trim()\n const data = (action.calldata ?? '').trim()\n const emptyData = data === '' || data === '0x'\n return (value === '' || value === '0') && sig === '' && emptyData\n}\n\nexport function explainGovAction(raw: unknown): ExplainedAction {\n const a = asRecord(raw) ?? {}\n const net = asRecord(a.network) ?? {}\n const networkLabel = str(net.label || net.name, 'Unknown network')\n const chainId = str(net.chainId)\n const c3 = str(net.c3governor)\n const viaC3 = Boolean(c3 && c3 !== '0x0000000000000000000000000000000000000000')\n const target = str(a.target)\n const value = str(a.value, '0')\n const signature = str(a.signature)\n const inputs = Array.isArray(a.inputs) ? a.inputs : []\n const inputParts = inputs.map((inp) => {\n const row = asRecord(inp) ?? {}\n return `${str(row.name || row.type, 'arg')}=${str(row.value)}`\n })\n const noOp = isGovNoOpAction({ target, value, signature, calldata: str(a.calldata) })\n const flags: string[] = []\n if (noOp) flags.push('signaling-noop')\n if (viaC3) flags.push('c3-remote')\n if (BigInt(value || '0') > 0n) flags.push('sends-value')\n if (APPROVE_RE.test(signature)) flags.push('allowance')\n if (DENY_SIG_RE.test(signature)) flags.push('sensitive-signature')\n if (!noOp && !signature) flags.push('unknown-signature')\n const valueBit = BigInt(value || '0') > 0n ? `; send ${value} wei` : ''\n const argsBit = inputParts.length ? ` with ${inputParts.join(', ')}` : ''\n const c3Bit = viaC3 ? ' via C3' : ''\n const line = noOp\n ? `On ${networkLabel}${c3Bit}: no on-chain effect (encoder no-op / signaling).`\n : `On ${networkLabel} (chain ${chainId || '—'})${c3Bit}: call ${signature || '(no signature)'} on ${target || '—'} ${argsBit}${valueBit}.`.replace(/\\s+/g, ' ').trim()\n return { line, noOp, networkLabel, chainId, viaC3, target, value, signature, flags }\n}\n\nfunction typeLabel(type: unknown): string {\n const n = Number(type)\n return Number.isFinite(n) && PROPOSAL_TYPE_LABELS[n] ? PROPOSAL_TYPE_LABELS[n] : str(type, 'Unknown')\n}\n\nexport function explainProposalRecord(raw: unknown): ContinuumDaoExplainProposalResult {\n const row = asRecord(raw)\n if (!row) throw new Error('explain_proposal: empty proposal')\n const onchainId = str(row.onchainId ?? row.onchain_id ?? row.proposalId)\n if (!onchainId) throw new Error('explain_proposal: missing onchainId')\n const configuration = Number(row.configuration) === 1 ? 'delta' : 'bravo'\n const nWinners = row.nWinners != null ? Number(row.nWinners) : undefined\n const actionsRaw = Array.isArray(row.actions) ? row.actions : []\n const optionsRaw = Array.isArray(row.options) ? row.options : []\n const actions = actionsRaw.map(explainGovAction)\n const options = optionsRaw.map((opt) => {\n const o = asRecord(opt) ?? {}\n const optActions = Array.isArray(o.actions) ? o.actions.map(explainGovAction) : []\n return { label: str(o.label, 'Untitled option'), actions: optActions }\n })\n const risks: string[] = []\n const t = typeLabel(row.type)\n if (t === 'Treasury' || t === 'Admin' || t === 'Constitution') {\n risks.push(`${t} proposal — treat as high impact.`)\n }\n const all = configuration === 'delta' ? options.flatMap((o) => o.actions) : actions\n if (all.some((a) => a.flags.includes('sends-value'))) risks.push('At least one action sends native value.')\n if (all.some((a) => a.flags.includes('allowance'))) risks.push('At least one action changes token allowance.')\n if (all.some((a) => a.flags.includes('sensitive-signature'))) risks.push('Sensitive signature (transfer / approve / upgrade / ownership).')\n if (all.some((a) => a.flags.includes('unknown-signature') && !a.noOp)) risks.push('An action has no readable signature.')\n if (all.some((a) => a.viaC3)) risks.push('One or more actions execute on another network via C3, not on Linea.')\n if (!str(row.description).trim() && all.some((a) => !a.noOp)) {\n risks.push('Empty description with on-chain actions.')\n }\n\n const lines: string[] = []\n lines.push(`#${row.id ?? '—'} ${str(row.title, 'Untitled')} (${t}, ${configuration === 'delta' ? 'Delta' : 'Bravo'}).`)\n lines.push(`Proposer ${str(row.proposer) || '—'} (any EOA or contract — not required to be a KeyGen).`)\n if (str(row.forumKey)) lines.push(`Forum: ${str(row.forumKey)}`)\n if (configuration === 'bravo') {\n lines.push('If this passes, the DAO will execute, in order:')\n for (const a of actions) lines.push(`- ${a.line}`)\n if (actions.length === 0) lines.push('- No user actions (signaling / no-op).')\n } else {\n lines.push(`Delta: top ${nWinners ?? '?'} option(s) execute. None of the above (NOTA) is a vote slot, not an option with actions.`)\n for (const [i, opt] of options.entries()) {\n lines.push(`Option ${i + 1} — ${opt.label}:`)\n for (const a of opt.actions) lines.push(` - ${a.line}`)\n if (opt.actions.length === 0) lines.push(' - No user actions (signaling / no-op).')\n }\n }\n if (risks.length) {\n lines.push('Risks:')\n for (const r of risks) lines.push(`- ${r}`)\n }\n lines.push('Queue is not implemented. Vote while Active; execute from Succeeded.')\n\n return {\n id: typeof row.id === 'number' ? row.id : Number(row.id) || undefined,\n onchainId,\n title: str(row.title, 'Untitled'),\n description: str(row.description),\n proposer: str(row.proposer),\n forumKey: str(row.forumKey),\n typeLabel: t,\n configuration,\n nWinners: Number.isFinite(nWinners) ? nWinners : undefined,\n briefing: lines.join('\\n'),\n actions,\n options,\n risks,\n }\n}\n\nasync function withForumSection(\n out: ContinuumDaoExplainProposalResult,\n forumUrl?: string,\n): Promise<ContinuumDaoExplainProposalResult> {\n if (!out.forumKey) return out\n try {\n const thread = (await continuumDaoForumFetchThread({ url: out.forumKey, index: 0, forumUrl })) as {\n section?: string\n cid?: number\n }\n return applyForumSectionCheck(out, thread.section ?? null, thread.cid ?? null)\n } catch {\n return { ...out, forumSection: null, forumCid: null }\n }\n}\n\nexport async function continuumDaoExplainProposal(args: {\n id?: string | number\n onchainId?: string\n forumUrl?: string\n}): Promise<ContinuumDaoExplainProposalResult> {\n if (args.id != null && String(args.id).trim() !== '') {\n const { proposal } = await continuumDaoFetchProposal({ id: args.id })\n return withForumSection(explainProposalRecord(proposal), args.forumUrl)\n }\n const want = (args.onchainId ?? '').trim()\n if (!want) throw new Error('explain_proposal: pass id or onchainId')\n const listed = await continuumDaoFetchProposals({ start: 0, end: 80 })\n const rawList = Array.isArray(listed.proposals) ? listed.proposals : []\n const hit = rawList.find((p) => {\n const row = asRecord(p)\n return row && str(row.onchainId ?? row.onchain_id ?? row.proposalId) === want\n })\n if (!hit) throw new Error(`explain_proposal: no catalog row with onchainId ${want}`)\n const id = asRecord(hit)?.id\n if (id != null) {\n const { proposal } = await continuumDaoFetchProposal({ id: Number(id) })\n return withForumSection(explainProposalRecord(proposal), args.forumUrl)\n }\n return withForumSection(explainProposalRecord(hit), args.forumUrl)\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { CONTINUUM_DAO_PROTOCOL_ID, isContinuumDaoSupportedChainId } from './constants.js'\n\nexport * from './constants.js'\nexport * from './escrowRules.js'\nexport * from './escrowPreflight.js'\nexport * from './multisign.js'\nexport * from './governance.js'\nexport * from './explainProposal.js'\nexport * from './forum.js'\n\nexport { CONTINUUM_DAO_PROTOCOL_ID }\n\nexport const continuumDaoProtocolModule: ProtocolModule = {\n id: CONTINUUM_DAO_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n const n = typeof ctx.chainId === 'number' ? ctx.chainId : Number.parseInt(String(ctx.chainId), 10)\n return isContinuumDaoSupportedChainId(n)\n },\n isTokenSupported(token) {\n return token.category === 'evm' && (token.kind === 'erc20' || token.kind === 'erc721')\n },\n actions: [\n { id: 'continuum-dao.create-lock', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Approve CTM + create_lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { amountHuman: { type: 'string', required: true, description: 'CTM amount' }, lockDurationSeconds: { type: 'string', required: true, description: 'Lock duration in seconds' } } },\n { id: 'continuum-dao.increase-amount', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Increase lock amount', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' }, amountHuman: { type: 'string', required: true, description: 'CTM amount to add' } } },\n { id: 'continuum-dao.increase-unlock-time', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Increase unlock time', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' }, lockDurationSeconds: { type: 'string', required: true, description: 'Duration from week boundary to new unlock' } } },\n { id: 'continuum-dao.split', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Split a veCTM lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'Source token id' }, extractedHuman: { type: 'string', required: true, description: 'CTM extracted into the new lock' } } },\n { id: 'continuum-dao.merge', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Merge two veCTM locks', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { fromTokenId: { type: 'string', required: true, description: 'Burned token id' }, toTokenId: { type: 'string', required: true, description: 'Surviving token id' } } },\n { id: 'continuum-dao.withdraw', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Withdraw an expired lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao.liquidate', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Liquidate a lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao.delegate', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Delegate voting power', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { delegatee: { type: 'string', required: true, description: 'Delegatee address' } } },\n { id: 'continuum-dao.undelegate', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Return voting power to the KeyGen (delegate to self)', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'continuum-dao.fetch-delegates', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Read VotingEscrow.delegates(account)', commonParams: [], params: { account: { type: 'string', required: true, description: 'KeyGen or wallet address' } } },\n { id: 'continuum-dao.transfer', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Transfer a veCTM NFT', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' }, to: { type: 'string', required: true, description: 'Recipient' } } },\n { id: 'continuum-dao.attach', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Attach veCTM to the node (authority KeyGen). groupId is implicit from that KeyGen and binds the fee waiver. A second group attaches after rotating authority.', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { nodeKey: { type: 'string', required: true, description: 'Node key' }, tokenId: { type: 'string', required: true, description: 'veCTM token id' }, mpaWallet: { type: 'string', required: true, description: 'MultiSignAgentWallet address' } } },\n { id: 'continuum-dao.request-detach', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Request governance detach', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'Attached token id' }, nodeProperties: { type: 'string', required: true, description: 'NodeProperties address' } } },\n { id: 'continuum-dao.propose-bravo', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Propose a Bravo (For/Against/Abstain) proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { title: { type: 'string', required: true, description: 'On-chain description (title)' }, forumKey: { type: 'string', required: true, description: 'Created forum thread URL from forum_create_topic' } } },\n { id: 'continuum-dao.propose-delta', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Propose a Delta multi-option proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { title: { type: 'string', required: true, description: 'On-chain description (title)' }, nWinners: { type: 'number', required: true, description: 'Winning options to execute' }, forumKey: { type: 'string', required: true, description: 'Created forum thread URL from forum_create_topic' } } },\n { id: 'continuum-dao.cast-vote-bravo', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Cast a Bravo vote', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'On-chain proposal id' }, support: { type: 'number', required: true, description: '0 against, 1 for, 2 abstain' } } },\n { id: 'continuum-dao.cast-vote-delta', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Cast a Delta vote including NOTA', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'On-chain proposal id' } } },\n { id: 'continuum-dao.execute', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Execute a succeeded proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'On-chain proposal id' } } },\n { id: 'continuum-dao.cancel', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Cancel a proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'On-chain proposal id' } } },\n { id: 'continuum-dao.fetch-live-proposals', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'List live/pending/succeeded proposals with on-chain state overlay', commonParams: [], params: { chainId: { type: 'number', required: false, description: 'Linea chain id' }, rpcUrl: { type: 'string', required: false, description: 'Linea RPC for state overlay' } } },\n { id: 'continuum-dao.explain-proposal', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Deconstruct a proposal into a readable briefing (actions, C3, no-ops, risks)', commonParams: [], params: { id: { type: 'string', required: false, description: 'Backend proposal id' }, onchainId: { type: 'string', required: false, description: 'Governor proposal id' } } },\n { id: 'continuum-dao.forum-sign-in', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'EIP-712 forum login (veCTM gate first)', commonParams: ['keyGen', 'purposeText'], params: { nodeKey: { type: 'string', required: false, description: 'Attached node key' }, username: { type: 'string', required: false, description: 'Username when there is no node key' } } },\n { id: 'continuum-dao.forum-sign-in-eligible', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Check veCTM forum login eligibility', commonParams: [], params: { address: { type: 'string', required: true, description: 'KeyGen or wallet address' } } },\n { id: 'continuum-dao.forum-sign-out', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Revoke forum ticket and sessions', commonParams: [], params: { ticket: { type: 'string', required: true, description: 'Forum write ticket' } } },\n { id: 'continuum-dao.forum-create-topic', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Create a Governance proposal thread (not Ideas)', commonParams: [], params: { section: { type: 'string', required: false, description: 'decision | election | treasury | constitution | admin' }, title: { type: 'string', required: true, description: 'Thread title' }, content: { type: 'string', required: true, description: 'Proposal body' } } },\n { id: 'continuum-dao.forum-create-idea', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Post an Idea or Suggestion (not a proposal)', commonParams: [], params: { title: { type: 'string', required: true, description: 'Thread title' }, content: { type: 'string', required: true, description: 'Idea body' } } },\n { id: 'continuum-dao.forum-search', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Search forum titles and bodies; optional hours/since', commonParams: [], params: { query: { type: 'string', required: false, description: 'Case-insensitive title or body substring' }, hours: { type: 'number', required: false, description: 'Only posts from the last X hours' }, since: { type: 'string', required: false, description: 'Only posts since this ISO date or unix timestamp' } } },\n { id: 'continuum-dao.forum-recent', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'List recent readable posts (id, title, username, createdAt); requires hours or since', commonParams: [], params: { hours: { type: 'number', required: false, description: 'Only posts from the last X hours' }, since: { type: 'string', required: false, description: 'Only posts since this ISO date or unix timestamp' } } },\n { id: 'continuum-dao.forum-delete', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Admin/moderator soft-delete a post, thread, or a user’s posts', commonParams: [], params: { pid: { type: 'string', required: false, description: 'Post id' }, tid: { type: 'string', required: false, description: 'Thread id' }, username: { type: 'string', required: false, description: 'Delete all posts by this user' }, hours: { type: 'number', required: false, description: 'Only in the last X hours (default all)' }, since: { type: 'string', required: false, description: 'Only since this date (default all)' } } },\n { id: 'continuum-dao.forum-unread', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'List unread topics for the logged-in user', commonParams: [], params: { filter: { type: 'string', required: false, description: 'all | new | watched | unreplied' } } },\n { id: 'continuum-dao.forum-mark-read', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Mark topic(s) read (tid/url, tids, or all)', commonParams: [], params: { tid: { type: 'string', required: false, description: 'Thread id' }, all: { type: 'boolean', required: false, description: 'Mark every unread topic read' } } },\n { id: 'continuum-dao.forum-mark-unread', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Mark one topic unread', commonParams: [], params: { tid: { type: 'string', required: false, description: 'Thread id' } } },\n ],\n}\n\nregisterProtocolModule(continuumDaoProtocolModule)\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/core/registry.ts","../../../../src/chains/evm/chainIdParse.ts","../../../../src/protocols/evm/continuum-dao/constants.ts","../../../../src/protocols/evm/continuum-dao/escrowRules.ts","../../../../src/core/defiEvmClient.ts","../../../../src/protocols/evm/continuum-dao/escrowPreflight.ts","../../../../src/protocols/evm/continuum-dao/attachGroup.ts","../../../../src/core/purpose.ts","../../../../src/core/envelope.ts","../../../../src/chains/evm/routerSwapGas.ts","../../../../src/chains/evm/buildBatch.ts","../../../../src/protocols/evm/continuum-dao/multisign.ts","../../../../src/core/eip712Multisign.ts","../../../../src/protocols/evm/continuum-dao/forum.ts","../../../../src/protocols/evm/continuum-dao/governance.ts","../../../../src/protocols/evm/continuum-dao/explainProposal.ts","../../../../src/protocols/evm/continuum-dao/index.ts"],"names":["zeroAddress","getAddress","http","parseAbi","createPublicClient","defineChain","getClientIdFromKeyGenResult","gasLimitFromEstimateAndChainConfig","publicClient","fetchChainFeeParams","parseGwei","gweiToDecimalString","serializeTransaction","proposalTxParamsToFeeSnapshot","alignEip1559FeesWithLatestBase","keccak256","erc20Abi","encodeFunctionData","parseUnits","veReadAbi","stringToHex","hashTypedData","typeLabel","encodePacked","padHex","toHex","meta","asRecord"],"mappings":";;;;;;AAEA,IAAM,UAA4B,EAAC;AAE5B,SAAS,uBAAuB,GAAA,EAA2B;AAChE,EAAA,MAAM,QAAA,GAAW,QAAQ,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,IAAI,EAAE,CAAA;AACzD,EAAA,IAAI,YAAY,CAAA,EAAG;AACjB,IAAA,OAAA,CAAQ,QAAQ,CAAA,GAAI,GAAA;AAAA,EACtB,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,KAAK,GAAG,CAAA;AAAA,EAClB;AACF;;;ACVO,SAAS,wBAAwB,OAAA,EAA8D;AACpG,EAAA,IAAI,OAAA,IAAW,IAAA,EAAM,OAAO,MAAA,CAAO,GAAA;AACnC,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,MAAM,CAAA,GAAI,OAAO,OAAO,CAAA;AACxB,IAAA,OAAO,OAAO,aAAA,CAAc,CAAC,KAAK,CAAA,IAAK,CAAA,GAAI,IAAI,MAAA,CAAO,GAAA;AAAA,EACxD;AACA,EAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,IAAA,OAAO,OAAO,SAAA,CAAU,OAAO,KAAK,OAAA,IAAW,CAAA,GAAI,UAAU,MAAA,CAAO,GAAA;AAAA,EACtE;AACA,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,OAAO,CAAA,CAAE,IAAA,EAAK;AAC/B,EAAA,IAAI,CAAC,CAAA,EAAG,OAAO,MAAA,CAAO,GAAA;AACtB,EAAA,MAAM,GAAA,GAAM,EAAE,WAAA,EAAY;AAC1B,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AAC7B,IAAA,MAAM,OAAO,CAAA,CAAE,KAAA,CAAM,SAAA,CAAU,MAAM,EAAE,IAAA,EAAK;AAC5C,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,QAAA,CAAS,IAAA,EAAM,EAAE,CAAA;AAClC,IAAA,OAAO,OAAO,KAAA,CAAM,CAAC,KAAK,CAAA,GAAI,CAAA,GAAI,OAAO,GAAA,GAAM,CAAA;AAAA,EACjD;AACA,EAAA,IAAI,GAAA,CAAI,UAAA,CAAW,IAAI,CAAA,EAAG;AACxB,IAAA,OAAO,MAAA,CAAO,QAAA,CAAS,CAAA,EAAG,EAAE,CAAA;AAAA,EAC9B;AACA,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,CAAA,EAAG,EAAE,CAAA;AAC9B;;;ACbO,IAAM,yBAAA,GAA4B;AAElC,IAAM,+BAAA,GAAkC;AACxC,IAAM,4BAAA,GAA+B;AACrC,IAAM,oCAAA,GAAuC;AAE7C,IAAM,cAAA,GAAiB;AACvB,IAAM,gBAAA,GAAmB;AACzB,IAAM,gBAAA,GAAmB;AACzB,IAAM,kBAAA,GAAqB;AAC3B,IAAM,kBAAA,GAAqB;AAE3B,IAAM,eAAe,CAAA,GAAI;AACzB,IAAM,eAAA,GAAkB,IAAI,GAAA,GAAM;AAElC,IAAM,oBAAA,GAAuB;AAE7B,IAAM,iCAAiC,GAAA,IAAO;AAE9C,IAAM,wBAAA,GAA2B;AACjC,IAAM,qBAAA,GAAwB;AAC9B,IAAM,qBAAA,GAAwB;AAUrC,IAAM,KAAA,GAAgC;AAAA,EACpC,GAAA,EAAKA,gBAAA;AAAA,EACL,YAAA,EAAcA,gBAAA;AAAA,EACd,cAAA,EAAgBA,gBAAA;AAAA,EAChB,OAAA,EAASA,gBAAA;AAAA,EACT,QAAA,EAAUA;AACZ,CAAA;AAGO,IAAM,iBAAA,GAAoBC,gBAAW,4CAA4C;AAGjF,IAAM,2BAAA,GAA8BA,gBAAW,4CAA4C;AAG3F,IAAM,oCAAA,GAAuCA,gBAAW,4CAA4C;AAMpG,IAAM,2CAAA,GAA8CA,gBAAW,4CAA4C;AAG3G,IAAM,yBAAA,GAA8E;AAAA,EACzF,CAAC,4BAA4B,GAAG;AAAA,IAC9B,GAAG,KAAA;AAAA,IACH,GAAA,EAAK,iBAAA;AAAA,IACL,YAAA,EAAc;AAAA,GAChB;AAAA,EACA,CAAC,oCAAoC,GAAG,EAAE,GAAG,KAAA,EAAM;AAAA,EACnD,CAAC,+BAA+B,GAAG;AAAA,IACjC,GAAG,KAAA;AAAA,IACH,GAAA,EAAK;AAAA;AAET;AAGO,IAAM,4BAAA,GAA+B;AAErC,SAAS,oBAAoB,IAAA,EAA+B;AACjE,EAAA,IAAI,CAAC,IAAA,EAAM,IAAA,EAAK,EAAG,OAAO,KAAA;AAC1B,EAAA,IAAI;AACF,IAAA,OAAOA,eAAA,CAAW,IAAI,CAAA,KAAMD,gBAAA;AAAA,EAC9B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,uBAAuB,OAAA,EAAgD;AACrF,EAAA,OAAO,yBAAA,CAA0B,OAAO,CAAA,IAAK,IAAA;AAC/C;AAEO,SAAS,wBAAwB,OAAA,EAA0B;AAChE,EAAA,OAAO,OAAA,KAAY,gCAAgC,OAAA,KAAY,oCAAA;AACjE;AAEO,SAAS,+BAA+B,OAAA,EAA0B;AACvE,EAAA,OAAO,sBAAA,CAAuB,OAAO,CAAA,IAAK,IAAA;AAC5C;AAEO,SAAS,0BAA0B,OAAA,EAAuC;AAC/E,EAAA,MAAM,GAAA,GAAM,sBAAA,CAAuB,OAAO,CAAA,EAAG,GAAA;AAC7C,EAAA,OAAO,OAAO,mBAAA,CAAoB,GAAG,CAAA,GAAIC,eAAA,CAAW,GAAG,CAAA,GAAI,IAAA;AAC7D;AAEO,SAAS,8BAA8B,OAAA,EAAuC;AACnF,EAAA,MAAM,EAAA,GAAK,sBAAA,CAAuB,OAAO,CAAA,EAAG,YAAA;AAC5C,EAAA,OAAO,MAAM,mBAAA,CAAoB,EAAE,CAAA,GAAIA,eAAA,CAAW,EAAE,CAAA,GAAI,IAAA;AAC1D;AAEO,SAAS,0BAA0B,OAAA,EAAuC;AAC/E,EAAA,MAAM,GAAA,GAAM,sBAAA,CAAuB,OAAO,CAAA,EAAG,QAAA;AAC7C,EAAA,OAAO,OAAO,mBAAA,CAAoB,GAAG,CAAA,GAAIA,eAAA,CAAW,GAAG,CAAA,GAAI,IAAA;AAC7D;AAEA,SAAS,QAAA,CAAS,GAAW,CAAA,EAAoB;AAC/C,EAAA,IAAI;AACF,IAAA,OAAOA,eAAA,CAAW,CAAC,CAAA,KAAMA,eAAA,CAAW,CAAC,CAAA;AAAA,EACvC,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAA;AAAA,EACT;AACF;AAEO,SAAS,8BAAA,CAA+B,eAAuB,eAAA,EAAkC;AACtG,EAAA,MAAM,CAAA,GAAI,wBAAwB,aAAa,CAAA;AAC/C,EAAA,IAAI,OAAO,KAAA,CAAM,CAAC,CAAA,IAAK,CAAA,GAAI,GAAG,OAAO,KAAA;AACrC,EAAA,MAAM,QAAA,GAAW,0BAA0B,CAAC,CAAA;AAC5C,EAAA,IAAI,CAAC,UAAU,OAAO,KAAA;AACtB,EAAA,OAAO,QAAA,CAAS,iBAAiB,QAAQ,CAAA;AAC3C;AAEO,SAAS,gCAAA,CAAiC,eAAuB,eAAA,EAAkC;AACxG,EAAA,MAAM,CAAA,GAAI,wBAAwB,aAAa,CAAA;AAC/C,EAAA,IAAI,OAAO,KAAA,CAAM,CAAC,CAAA,IAAK,CAAA,GAAI,GAAG,OAAO,KAAA;AACrC,EAAA,MAAM,QAAA,GAAW,8BAA8B,CAAC,CAAA;AAChD,EAAA,IAAI,CAAC,UAAU,OAAO,KAAA;AACtB,EAAA,OAAO,QAAA,CAAS,iBAAiB,QAAQ,CAAA;AAC3C;AAEO,SAAS,4BAA4B,IAAA,EAA+B;AACzE,EAAA,OAAA,CAAQ,IAAA,IAAQ,EAAA,EAAI,IAAA,EAAK,KAAM,gBAAA;AACjC;AAEO,SAAS,iBAAiB,MAAA,EAAiC;AAChE,EAAA,OAAA,CAAQ,MAAA,IAAU,EAAA,EAAI,IAAA,EAAK,CAAE,aAAY,KAAM,gBAAA;AACjD;AAYO,SAAS,6BAAA,GAA4D;AAC1E,EAAA,MAAM,MAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,OAAA,IAAW;AAAA,IACpB,4BAAA;AAAA,IACA,oCAAA;AAAA,IACA;AAAA,GACF,EAAG;AACD,IAAA,MAAM,GAAA,GAAM,uBAAuB,OAAO,CAAA;AAC1C,IAAA,IAAI,CAAC,GAAA,EAAK;AACV,IAAA,IAAI,mBAAA,CAAoB,GAAA,CAAI,GAAG,CAAA,EAAG;AAChC,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,OAAA;AAAA,QACA,SAAA,EAAW,UAAA;AAAA,QACX,eAAA,EAAiBA,eAAA,CAAW,GAAA,CAAI,GAAG,CAAA;AAAA,QACnC,IAAA,EAAM,cAAA;AAAA,QACN,MAAA,EAAQ,gBAAA;AAAA,QACR,QAAA,EAAU;AAAA,OACX,CAAA;AAAA,IACH;AACA,IAAA,IAAI,wBAAwB,OAAO,CAAA,IAAK,mBAAA,CAAoB,GAAA,CAAI,YAAY,CAAA,EAAG;AAC7E,MAAA,GAAA,CAAI,IAAA,CAAK;AAAA,QACP,OAAA;AAAA,QACA,SAAA,EAAW,QAAA;AAAA,QACX,eAAA,EAAiBA,eAAA,CAAW,GAAA,CAAI,YAAY,CAAA;AAAA,QAC5C,IAAA,EAAM,gBAAA;AAAA,QACN,MAAA,EAAQ;AAAA,OACT,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;ACpKO,SAAS,sBAAA,GAAiC;AAC/C,EAAA,OAAO,IAAA,CAAK,GAAA,CAAI,oBAAA,GAAuB,YAAA,EAAc,eAAe,CAAA;AACtE;AAEO,SAAS,sBAAA,CAAuB,QAAgB,WAAA,EAA6B;AAClF,EAAA,OAAA,CAAS,MAAA,CAAO,MAAM,CAAA,GAAI,WAAA,IAAe,OAAO,YAAY,CAAA,GAAK,OAAO,YAAY,CAAA;AACtF;AAEO,SAAS,6BAAA,CAA8B,SAAA,EAAmB,cAAA,EAAwB,KAAA,EAAqB;AAC5G,EAAA,MAAM,GAAA,GAAM,cAAA,GAAiB,EAAA,GAAK,cAAA,GAAiB,8BAAA;AACnD,EAAA,IAAI,YAAY,GAAA,EAAK;AACnB,IAAA,MAAM,IAAI,MAAM,CAAA,EAAG,KAAK,qBAAqB,YAAA,CAAa,GAAG,CAAC,CAAA,gCAAA,CAAkC,CAAA;AAAA,EAClG;AACF;AAEO,SAAS,sBAAA,CAAuB,SAAA,EAAmB,cAAA,EAAwB,UAAA,EAA2B;AAC3G,EAAA,IAAI,SAAA,IAAa,EAAA,EAAI,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC5E,EAAA,6BAAA,CAA8B,SAAA,EAAW,gBAAgB,aAAa,CAAA;AACtE,EAAA,IAAI,UAAA,IAAc,IAAA,IAAQ,SAAA,GAAY,UAAA,EAAY;AAChD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,YAAA,EAAe,YAAA,CAAa,SAAS,CAAC,CAAA,4BAAA,EAA+B,YAAA,CAAa,UAAU,CAAC,CAAA,KAAA,CAAO,CAAA;AAAA,EACtH;AACF;AAEO,SAAS,yBAAA,CAA0B,WAAA,EAAqB,MAAA,EAAgB,KAAA,EAAuB;AACpG,EAAA,IAAI,eAAe,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,oCAAA,CAAsC,CAAA;AACrF,EAAA,IAAI,WAAA,GAAc,MAAA,CAAO,YAAY,CAAA,EAAG;AACtC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,mCAAA,EAAsC,YAAY,CAAA,UAAA,CAAY,CAAA;AAAA,EACxF;AACA,EAAA,IAAI,WAAA,GAAc,MAAA,CAAO,sBAAA,EAAwB,CAAA,EAAG;AAClD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,EAAG,KAAK,CAAA,wBAAA,EAA2B,oBAAoB,CAAA,4CAAA;AAAA,KACzD;AAAA,EACF;AACA,EAAA,MAAM,MAAA,GAAS,sBAAA,CAAuB,MAAA,EAAQ,WAAW,CAAA;AACzD,EAAA,IAAI,MAAA,IAAU,MAAA,CAAO,MAAM,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,qDAAA,CAAuD,CAAA;AAAA,EACjF;AACA,EAAA,IAAI,SAAS,MAAA,CAAO,MAAM,CAAA,GAAI,MAAA,CAAO,eAAe,CAAA,EAAG;AACrD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA,oDAAA,CAAsD,CAAA;AAAA,EAChF;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,oBAAA,CAAqB,SAAA,EAAmB,IAAA,EAAsB,MAAA,EAAgB,UAAA,EAA2B;AACvH,EAAA,IAAI,SAAA,IAAa,EAAA,EAAI,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAC5E,EAAA,IAAI,IAAA,CAAK,cAAc,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,IAAA,CAAK,OAAO,CAAA,sBAAA,CAAwB,CAAA;AACzF,EAAA,IAAI,IAAA,CAAK,MAAA,IAAU,MAAA,CAAO,MAAM,CAAA,EAAG;AACjC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,yCAAA,EAA4C,IAAA,CAAK,OAAO,CAAA,gCAAA,CAAkC,CAAA;AAAA,EAC5G;AACA,EAAA,IAAI,UAAA,IAAc,IAAA,IAAQ,SAAA,GAAY,UAAA,EAAY;AAChD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,mBAAmB,YAAA,CAAa,SAAS,CAAC,CAAA,4BAAA,EAA+B,YAAA,CAAa,UAAU,CAAC,CAAA,KAAA;AAAA,KACnG;AAAA,EACF;AACF;AAEO,SAAS,wBAAA,CAAyB,WAAA,EAAqB,IAAA,EAAsB,MAAA,EAAwB;AAC1G,EAAA,IAAI,IAAA,CAAK,cAAc,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,IAAA,CAAK,OAAO,CAAA,sBAAA,CAAwB,CAAA;AACzF,EAAA,IAAI,IAAA,CAAK,MAAA,IAAU,MAAA,CAAO,MAAM,CAAA,EAAG;AACjC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8CAAA,EAAiD,IAAA,CAAK,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EAClF;AACA,EAAA,MAAM,MAAA,GAAS,yBAAA,CAA0B,WAAA,EAAa,MAAA,EAAQ,sBAAsB,CAAA;AACpF,EAAA,IAAI,MAAA,IAAU,KAAK,MAAA,EAAQ;AACzB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,oDAAA,EAAuD,IAAA,CAAK,MAAA,CAAO,QAAA,EAAU,CAAA,kCAAA;AAAA,KAC/E;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,oBAAA,CACd,YAAA,EACA,IAAA,EACA,cAAA,EACA,MAAA,EACM;AACN,EAAA,IAAI,KAAK,QAAA,EAAU;AACjB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,IAAA,CAAK,OAAO,CAAA,6CAAA,CAA+C,CAAA;AAAA,EAC9G;AACA,EAAA,IAAI,IAAA,CAAK,cAAc,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,IAAA,CAAK,OAAO,CAAA,sBAAA,CAAwB,CAAA;AACzF,EAAA,IAAI,IAAA,CAAK,MAAA,IAAU,MAAA,CAAO,MAAM,CAAA,EAAG;AACjC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,4BAAA,EAA+B,IAAA,CAAK,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,EAChE;AACA,EAAA,MAAM,GAAA,GAAM,cAAA,GAAiB,EAAA,GAAK,cAAA,GAAiB,8BAAA;AACnD,EAAA,IAAI,IAAA,CAAK,SAAA,GAAY,GAAA,GAAM,EAAA,EAAI;AAC7B,IAAA,MAAM,IAAI,MAAM,0EAA0E,CAAA;AAAA,EAC5F;AACA,EAAA,IAAI,eAAe,GAAA,EAAK;AACtB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iBAAA,EAAoB,YAAA,CAAa,GAAG,CAAC,CAAA,uBAAA,CAAyB,CAAA;AAAA,EAChF;AACA,EAAA,IAAI,YAAA,GAAe,IAAA,CAAK,SAAA,GAAY,GAAA,EAAK;AACvC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qCAAA,EAAwC,YAAA,CAAa,GAAG,CAAC,CAAA,qBAAA,CAAuB,CAAA;AAAA,EAClG;AACF;AAEO,SAAS,WAAA,CAAY,UAA0B,MAAA,EAA8B;AAClF,EAAA,IAAI,SAAS,OAAA,KAAY,MAAA,CAAO,SAAS,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAClG,EAAA,IAAI,SAAS,QAAA,EAAU;AACrB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,QAAA,CAAS,OAAO,CAAA,uBAAA,CAAyB,CAAA;AAAA,EAC5F;AACA,EAAA,IAAI,OAAO,QAAA,EAAU;AACnB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,8BAAA,EAAiC,MAAA,CAAO,OAAO,CAAA,uBAAA,CAAyB,CAAA;AAAA,EAC1F;AACA,EAAA,IAAI,SAAS,KAAA,CAAM,WAAA,OAAkB,MAAA,CAAO,KAAA,CAAM,aAAY,EAAG;AAC/D,IAAA,MAAM,IAAI,MAAM,yDAAyD,CAAA;AAAA,EAC3E;AACF;AAEO,SAAS,cAAA,CAAe,MAAsB,MAAA,EAAsB;AACzE,EAAA,IAAI,KAAK,QAAA,EAAU;AACjB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,IAAA,CAAK,OAAO,CAAA,6CAAA,CAA+C,CAAA;AAAA,EACjH;AACA,EAAA,IAAI,IAAA,CAAK,UAAU,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,mCAAA,EAAsC,IAAA,CAAK,OAAO,CAAA,CAAA,CAAG,CAAA;AAC5F,EAAA,IAAI,IAAA,CAAK,MAAA,GAAS,MAAA,CAAO,MAAM,CAAA,EAAG;AAChC,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qDAAA,EAAwD,KAAK,MAAA,CAAO,QAAA,EAAU,CAAA,EAAA,CAAI,CAAA;AAAA,EACpG;AACF;AAEO,SAAS,0BAA0B,IAAA,EAWxC;AACA,EAAA,IAAI,IAAA,CAAK,aAAa,EAAA,IAAM,MAAA,CAAO,KAAK,MAAM,CAAA,IAAK,KAAK,UAAA,EAAY;AAClE,IAAA,OAAO;AAAA,MACL,SAAS,IAAA,CAAK,eAAA;AAAA,MACd,WAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAa,IAAA;AAAA,MACb,QAAA,EAAU,KAAA;AAAA,MACV,WAAA,EAAa;AAAA,KACf;AAAA,EACF;AACA,EAAA,IAAI,IAAA,CAAK,mBAAmB,wBAAA,EAA0B;AACpD,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,EAAA;AAAA,MACT,WAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAa,KAAA;AAAA,MACb,QAAA,EAAU,IAAA;AAAA,MACV,WAAA,EAAa;AAAA,KACf;AAAA,EACF;AACA,EAAA,MAAM,OAAA,GAAW,IAAA,CAAK,UAAA,GAAa,qBAAA,GAAyB,qBAAA;AAC5D,EAAA,IAAI,YAAY,EAAA,EAAI;AAClB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,EAAA;AAAA,MACT,WAAA,EAAa,EAAA;AAAA,MACb,WAAA,EAAa,KAAA;AAAA,MACb,QAAA,EAAU,KAAA;AAAA,MACV,WAAA,EAAa;AAAA,KACf;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,KAAK,eAAA,GAAkB,OAAA;AAAA,IAChC,WAAA,EAAa,OAAA;AAAA,IACb,WAAA,EAAa,KAAA;AAAA,IACb,QAAA,EAAU,KAAA;AAAA,IACV,WAAA,EAAa;AAAA,GACf;AACF;AAEO,SAAS,eAAA,CAAgB,IAAA,EAAsB,mBAAA,EAAqC,MAAA,EAAsB;AAC/G,EAAA,IAAI,KAAK,QAAA,EAAU;AACjB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kCAAA,EAAqC,IAAA,CAAK,OAAO,CAAA,6CAAA,CAA+C,CAAA;AAAA,EAClH;AACA,EAAA,IAAI,wBAAwB,KAAA,EAAO;AACjC,IAAA,MAAM,IAAI,MAAM,+CAA+C,CAAA;AAAA,EACjE;AACA,EAAA,MAAM,UAAU,yBAAA,CAA0B;AAAA,IACxC,iBAAiB,IAAA,CAAK,SAAA;AAAA,IACtB,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,YAAY,IAAA,CAAK,MAAA;AAAA,IACjB;AAAA,GACD,CAAA;AACD,EAAA,IAAI,OAAA,CAAQ,QAAA,EAAU,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAChF,EAAA,IAAI,OAAA,CAAQ,WAAA,EAAa,MAAM,IAAI,MAAM,2DAA2D,CAAA;AACtG;AAEO,SAAS,eAAA,CAAgB,cAAsB,QAAA,EAAiC;AACrF,EAAA,MAAM,SAAA,GAAYA,gBAAW,YAAY,CAAA;AACzC,EAAA,IAAI,cAAcD,gBAAAA,EAAa;AAC7B,IAAA,MAAM,IAAI,MAAM,6EAA6E,CAAA;AAAA,EAC/F;AACA,EAAA,MAAM,IAAA,GAAOC,gBAAW,QAAQ,CAAA;AAChC,EAAA,IAAI,cAAc,IAAA,EAAM;AACtB,IAAA,MAAM,IAAI,MAAM,mEAAyD,CAAA;AAAA,EAC3E;AACA,EAAA,OAAO,SAAA;AACT;AAEO,SAAS,8BAAA,CAA+B,aAAsB,OAAA,EAAuB;AAC1F,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wCAAA,EAA2CA,eAAAA,CAAW,OAAO,CAAC,CAAA,EAAA,CAAI,CAAA;AAAA,EACpF;AACF;AAEO,SAAS,cAAA,CAAe,IAAA,EAAsB,KAAA,EAAe,OAAA,EAAgC;AAClG,EAAA,IAAI,KAAK,QAAA,EAAU;AACjB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,IAAA,CAAK,OAAO,CAAA,uBAAA,CAAyB,CAAA;AAAA,EAC3F;AACA,EAAA,MAAM,EAAA,GAAKA,gBAAW,KAAK,CAAA;AAC3B,EAAA,MAAM,IAAA,GAAOA,gBAAW,OAAO,CAAA;AAC/B,EAAA,IAAI,EAAA,KAAOD,gBAAAA,EAAa,MAAM,IAAI,MAAM,4CAA4C,CAAA;AACpF,EAAA,IAAI,EAAA,KAAO,IAAA,EAAM,MAAM,IAAI,MAAM,wDAAwD,CAAA;AACzF,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,sBAAA,CAAuB,MAAsB,QAAA,EAAwB;AACnF,EAAA,IAAI,IAAA,CAAK,MAAM,WAAA,EAAY,KAAMC,gBAAW,QAAQ,CAAA,CAAE,aAAY,EAAG;AACnE,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAUA,eAAAA,CAAW,QAAQ,CAAC,CAAA,qBAAA,EAAwB,IAAA,CAAK,OAAO,CAAA,QAAA,EAAW,IAAA,CAAK,KAAK,CAAA,EAAA,CAAI,CAAA;AAAA,EAC7G;AACF;AAEA,SAAS,aAAa,GAAA,EAAqB;AACzC,EAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,IAAO,GAAA;AAC3B,EAAA,MAAM,IAAA,GAAO,MAAM,GAAA,IAAO,GAAA;AAC1B,EAAA,IAAI,IAAA,KAAS,EAAA,EAAI,OAAO,KAAA,CAAM,QAAA,EAAS;AACvC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,EAAS,CAAE,QAAA,CAAS,IAAI,GAAG,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA;AACnE,EAAA,OAAO,CAAA,EAAG,KAAA,CAAM,QAAA,EAAU,IAAI,OAAO,CAAA,CAAA;AACvC;ACxOO,SAAS,gBAAA,CAAiB,QAAgB,IAAA,EAA8C;AAC7F,EAAA,MAAM,GAAA,GAAM,OAAO,IAAA,EAAK;AACxB,EAAA,OAAwCC,SAAA,CAAK,KAAK,IAAI,CAAA;AACxD;;;ACGA,IAAM,YAAYC,aAAA,CAAS;AAAA,EACzB,+CAAA;AAAA,EACA,4EAAA;AAAA,EACA,0DAAA;AAAA,EACA,+DAAA;AAAA,EACA,oDAAA;AAAA,EACA,kDAAA;AAAA,EACA,2CAAA;AAAA,EACA,4DAAA;AAAA,EACA;AACF,CAAC,CAAA;AACD,IAAM,QAAA,GAAWA,aAAA,CAAS,CAAC,0DAA0D,CAAC,CAAA;AACtF,IAAM,eAAeA,aAAA,CAAS;AAAA,EAC5B,iEAAA;AAAA,EACA,iEAAA;AAAA,EACA;AACF,CAAC,CAAA;AACD,IAAM,UAAA,GAAaA,aAAA,CAAS,CAAC,mEAAmE,CAAC,CAAA;AACjG,IAAM,aAAaA,aAAA,CAAS;AAAA,EAC1B,0EAAA;AAAA,EACA,sCAAA;AAAA,EACA,uDAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,SAAS,YAAA,CAAa,QAAgB,OAAA,EAAiB;AACrD,EAAA,OAAOC,uBAAA,CAAmB;AAAA,IACxB,OAAOC,gBAAA,CAAY;AAAA,MACjB,EAAA,EAAI,OAAA;AAAA,MACJ,IAAA,EAAM,qBAAA;AAAA,MACN,gBAAgB,EAAE,QAAA,EAAU,IAAI,IAAA,EAAM,OAAA,EAAS,QAAQ,KAAA,EAAM;AAAA,MAC7D,OAAA,EAAS,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,CAAC,MAAA,CAAO,IAAA,EAAM,CAAA,EAAE;AAAE,KAC/C,CAAA;AAAA,IACD,SAAA,EAAW,gBAAA,CAAiB,MAAA,CAAO,IAAA,EAAM;AAAA,GAC1C,CAAA;AACH;AAEA,eAAsB,mBAAmB,IAAA,EAIrB;AAClB,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AACrD,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACpC,SAAS,IAAA,CAAK,YAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,YAAA,EAAc;AAAA,KACf,CAAA;AACD,IAAA,OAAO,GAAA,GAAM,KAAK,GAAA,GAAM,8BAAA;AAAA,EAC1B,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,8BAAA;AAAA,EACT;AACF;AAEA,eAAsB,kBAAkB,IAAA,EAKR;AAC9B,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AACrD,EAAA,IAAI;AACF,IAAA,OAAO,MAAM,OAAO,YAAA,CAAa;AAAA,MAC/B,SAAS,IAAA,CAAK,GAAA;AAAA,MACd,GAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAc,WAAA;AAAA,MACd,IAAA,EAAM,CAAC,IAAA,CAAK,KAAK;AAAA,KAClB,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAEA,eAAsB,mBAAmB,IAAA,EAKb;AAC1B,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AACrD,EAAA,MAAM,CAAC,YAAY,KAAA,EAAO,OAAA,EAAS,cAAc,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IACrE,OAAO,YAAA,CAAa;AAAA,MAClB,SAAS,IAAA,CAAK,YAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,YAAA,EAAc,QAAA;AAAA,MACd,IAAA,EAAM,CAAC,IAAA,CAAK,OAAO;AAAA,KACpB,CAAA;AAAA,IACD,OAAO,YAAA,CAAa;AAAA,MAClB,SAAS,IAAA,CAAK,YAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,YAAA,EAAc,SAAA;AAAA,MACd,IAAA,EAAM,CAAC,IAAA,CAAK,OAAO;AAAA,KACpB,CAAA;AAAA,IACD,OAAO,YAAA,CAAa;AAAA,MAClB,SAAS,IAAA,CAAK,YAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,YAAA,EAAc,cAAA;AAAA,MACd,IAAA,EAAM,CAAC,IAAA,CAAK,OAAO;AAAA,KACpB,CAAA;AAAA,IACD,OAAO,YAAA,CAAa;AAAA,MAClB,SAAS,IAAA,CAAK,YAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,YAAA,EAAc;AAAA,KACf;AAAA,GACF,CAAA;AACD,EAAA,MAAM,SAAA,GAAY,WAAW,CAAC,CAAA;AAC9B,EAAA,MAAM,SAAA,GAAY,SAAA,GAAY,EAAA,GAAK,EAAA,GAAK,OAAO,SAAS,CAAA;AACxD,EAAA,IAAI,QAAA,GAAW,KAAA;AACf,EAAA,IAAI,mBAAA,CAAoB,cAAc,CAAA,EAAG;AACvC,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,GAAc,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,QAC5C,OAAA,EAASJ,gBAAW,cAAc,CAAA;AAAA,QAClC,GAAA,EAAK,YAAA;AAAA,QACL,YAAA,EAAc,gBAAA;AAAA,QACd,IAAA,EAAM,CAAC,IAAA,CAAK,OAAO;AAAA,OACpB,CAAA;AACD,MAAA,QAAA,GAAW,WAAA,KAAgBD,gBAAAA;AAAA,IAC7B,CAAA,CAAA,MAAQ;AACN,MAAA,QAAA,GAAW,KAAA;AAAA,IACb;AAAA,EACF;AACA,EAAA,OAAO;AAAA,IACL,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,SAAA;AAAA,IACA,MAAA,EAAQ,WAAW,CAAC,CAAA;AAAA,IACpB,KAAA,EAAOC,gBAAW,KAAK,CAAA;AAAA,IACvB,QAAA;AAAA,IACA,UAAA,EAAY;AAAA,GACd;AACF;AAEA,eAAe,yBAAyB,IAAA,EAKtB;AAChB,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AACrD,EAAA,IAAI,OAAA;AACJ,EAAA,IAAI;AACF,IAAA,OAAA,GAAU,MAAM,OAAO,YAAA,CAAa;AAAA,MAClC,SAAS,IAAA,CAAK,YAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA;AAAA,EACF;AACA,EAAA,IAAI,CAAC,mBAAA,CAAoB,OAAO,CAAA,EAAG;AACnC,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MAC1C,OAAA,EAAS,OAAA;AAAA,MACT,GAAA,EAAK,UAAA;AAAA,MACL,YAAA,EAAc,kBAAA;AAAA,MACd,IAAA,EAAM,CAAC,IAAA,CAAK,OAAO;AAAA,KACpB,CAAA;AACD,IAAA,IAAI,cAAc,EAAA,EAAI;AACpB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,IAAA,CAAK,OAAO,CAAA,6DAAA,CAA+D,CAAA;AAAA,IACvG;AAAA,EACF,SAAS,GAAA,EAAK;AACZ,IAAA,IAAI,eAAe,KAAA,IAAS,GAAA,CAAI,QAAQ,QAAA,CAAS,mBAAmB,GAAG,MAAM,GAAA;AAAA,EAC/E;AACF;AAEA,eAAsB,oBAAoB,IAAA,EAQxB;AAChB,EAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,cAAA,EAAgB,UAAU,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IACrD,mBAAmB,IAAI,CAAA;AAAA,IACvB,kBAAkB,IAAI;AAAA,GACvB,CAAA;AACD,EAAA,sBAAA,CAAuB,IAAA,CAAK,SAAA,EAAW,cAAA,EAAgB,UAAU,CAAA;AACjE,EAAA,yBAAA,CAA0B,IAAA,CAAK,WAAA,EAAa,MAAA,EAAQ,aAAa,CAAA;AACnE;AAEA,eAAsB,wBAAwB,IAAA,EAQ5B;AAChB,EAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,IAAA,EAAM,UAAU,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IAC3C,mBAAmB,IAAI,CAAA;AAAA,IACvB,kBAAkB,IAAI;AAAA,GACvB,CAAA;AACD,EAAA,sBAAA,CAAuB,IAAA,EAAM,KAAK,KAAK,CAAA;AACvC,EAAA,oBAAA,CAAqB,IAAA,CAAK,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,UAAU,CAAA;AAC7D,EAAA,MAAM,yBAAyB,IAAI,CAAA;AACrC;AAEA,eAAsB,4BAA4B,IAAA,EAOhC;AAChB,EAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAC3C,EAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAAmB,IAAI,CAAA;AAC1C,EAAA,sBAAA,CAAuB,IAAA,EAAM,KAAK,KAAK,CAAA;AACvC,EAAA,wBAAA,CAAyB,IAAA,CAAK,WAAA,EAAa,IAAA,EAAM,MAAM,CAAA;AACvD,EAAA,MAAM,yBAAyB,IAAI,CAAA;AACrC;AAEA,eAAsB,eAAe,IAAA,EAOnB;AAChB,EAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,IAAA,EAAM,cAAc,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IAC/C,mBAAmB,IAAI,CAAA;AAAA,IACvB,mBAAmB,IAAI;AAAA,GACxB,CAAA;AACD,EAAA,sBAAA,CAAuB,IAAA,EAAM,KAAK,KAAK,CAAA;AACvC,EAAA,oBAAA,CAAqB,IAAA,CAAK,YAAA,EAAc,IAAA,EAAM,cAAA,EAAgB,MAAM,CAAA;AACpE,EAAA,MAAM,yBAAyB,IAAI,CAAA;AACrC;AAEA,eAAsB,eAAe,IAAA,EAOnB;AAChB,EAAA,MAAM,CAAC,QAAA,EAAU,MAAM,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IAC3C,mBAAmB,EAAE,GAAG,MAAM,OAAA,EAAS,IAAA,CAAK,aAAa,CAAA;AAAA,IACzD,mBAAmB,EAAE,GAAG,MAAM,OAAA,EAAS,IAAA,CAAK,WAAW;AAAA,GACxD,CAAA;AACD,EAAA,sBAAA,CAAuB,QAAA,EAAU,KAAK,KAAK,CAAA;AAC3C,EAAA,sBAAA,CAAuB,MAAA,EAAQ,KAAK,KAAK,CAAA;AACzC,EAAA,WAAA,CAAY,UAAU,MAAM,CAAA;AAC5B,EAAA,MAAM,QAAQ,GAAA,CAAI;AAAA,IAChB,yBAAyB,EAAE,GAAG,MAAM,OAAA,EAAS,IAAA,CAAK,aAAa,CAAA;AAAA,IAC/D,yBAAyB,EAAE,GAAG,MAAM,OAAA,EAAS,IAAA,CAAK,WAAW;AAAA,GAC9D,CAAA;AACH;AAEA,eAAsB,kBAAkB,IAAA,EAMtB;AAChB,EAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAC3C,EAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAAmB,IAAI,CAAA;AAC1C,EAAA,sBAAA,CAAuB,IAAA,EAAM,KAAK,KAAK,CAAA;AACvC,EAAA,cAAA,CAAe,MAAM,MAAM,CAAA;AAC3B,EAAA,MAAM,yBAAyB,IAAI,CAAA;AACrC;AAEA,eAAsB,mBAAmB,IAAA,EAMvB;AAChB,EAAA,MAAM,SAAS,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,GAAA,KAAQ,GAAI,CAAA;AAC3C,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AACrD,EAAA,MAAM,CAAC,IAAA,EAAM,mBAAmB,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IACpD,mBAAmB,IAAI,CAAA;AAAA,IACvB,OACG,YAAA,CAAa;AAAA,MACZ,SAAS,IAAA,CAAK,YAAA;AAAA,MACd,GAAA,EAAK,SAAA;AAAA,MACL,YAAA,EAAc;AAAA,KACf,CAAA,CACA,KAAA,CAAM,MAAM,IAAI;AAAA,GACpB,CAAA;AACD,EAAA,sBAAA,CAAuB,IAAA,EAAM,KAAK,KAAK,CAAA;AACvC,EAAA,eAAA,CAAgB,IAAA,EAAM,qBAAqB,MAAM,CAAA;AACjD,EAAA,MAAM,yBAAyB,IAAI,CAAA;AACrC;AAEA,eAAsB,kBAAkB,IAAA,EAMb;AACzB,EAAA,OAAO,eAAA,CAAgB,IAAA,CAAK,SAAA,EAAW,IAAA,CAAK,KAAK,CAAA;AACnD;AAEA,eAAsB,oBAAoB,IAAA,EAKxB;AAChB,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AACrD,EAAA,MAAM,SAAA,GAAY,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,IAC1C,SAAS,IAAA,CAAK,YAAA;AAAA,IACd,GAAA,EAAK,SAAA;AAAA,IACL,YAAA,EAAc,WAAA;AAAA,IACd,IAAA,EAAM,CAAC,IAAA,CAAK,KAAK;AAAA,GAClB,CAAA;AACD,EAAA,8BAAA,CAA+BA,eAAAA,CAAW,SAAS,CAAA,KAAMA,eAAAA,CAAW,KAAK,KAAK,CAAA,EAAG,KAAK,KAAK,CAAA;AAC7F;AAEA,eAAsB,kBAAkB,IAAA,EAOb;AACzB,EAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAAmB,IAAI,CAAA;AAC1C,EAAA,sBAAA,CAAuB,IAAA,EAAM,KAAK,KAAK,CAAA;AACvC,EAAA,OAAO,cAAA,CAAe,IAAA,EAAM,IAAA,CAAK,EAAA,EAAI,KAAK,KAAK,CAAA;AACjD;AAEA,eAAsB,qBAAqB,IAAA,EAQzB;AAChB,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AACrD,EAAA,MAAM,CAAC,WAAW,YAAA,EAAc,SAAA,EAAW,cAAc,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IAC7E,OAAO,YAAA,CAAa;AAAA,MAClB,SAAS,IAAA,CAAK,SAAA;AAAA,MACd,GAAA,EAAK,UAAA;AAAA,MACL,YAAA,EAAc,0BAAA;AAAA,MACd,IAAA,EAAM,CAAC,IAAA,CAAK,OAAO;AAAA,KACpB,CAAA;AAAA,IACD,MAAA,CAAO,YAAA,CAAa,EAAE,OAAA,EAAS,IAAA,CAAK,WAAW,GAAA,EAAK,UAAA,EAAY,YAAA,EAAc,IAAA,EAAM,CAAA;AAAA,IACpF,OAAO,YAAA,CAAa;AAAA,MAClB,SAAS,IAAA,CAAK,SAAA;AAAA,MACd,GAAA,EAAK,UAAA;AAAA,MACL,YAAA,EAAc;AAAA,KACf,CAAA;AAAA,IACD,OAAO,YAAA,CAAa;AAAA,MAClB,SAAS,IAAA,CAAK,SAAA;AAAA,MACd,GAAA,EAAK,UAAA;AAAA,MACL,YAAA,EAAc;AAAA,KACf;AAAA,GACF,CAAA;AACD,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,IAAgB,mBAAA,CAAoB,IAAA,CAAK,YAAY,CAAA,GACjEA,eAAAA,CAAW,IAAA,CAAK,YAAY,CAAA,GAC5BA,eAAAA,CAAW,YAAY,CAAA;AAC3B,EAAA,IAAI,CAAC,mBAAA,CAAoB,EAAE,GAAG,MAAM,IAAI,MAAM,4CAA4C,CAAA;AAC1F,EAAA,MAAM,IAAA,GAAO,MAAM,kBAAA,CAAmB;AAAA,IACpC,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAA,EAAc,EAAA;AAAA,IACd,SAAS,IAAA,CAAK;AAAA,GACf,CAAA;AACD,EAAA,sBAAA,CAAuB,IAAA,EAAM,KAAK,KAAK,CAAA;AACvC,EAAA,MAAM,QAAA,GAAWA,eAAAA,CAAW,IAAA,CAAK,KAAK,CAAA;AACtC,EAAA,IAAI,SAAA,KAAcD,gBAAAA,IAAeC,eAAAA,CAAW,SAAS,MAAM,QAAA,EAAU;AACnE,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,0DAA0D,SAAS,CAAA,0BAAA;AAAA,KACrE;AAAA,EACF;AACA,EAAA,IAAI,mBAAA,CAAoB,cAAc,CAAA,EAAG;AACvC,IAAA,MAAM,EAAA,GAAKA,gBAAW,cAAc,CAAA;AACpC,IAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MACtD,OAAO,YAAA,CAAa;AAAA,QAClB,OAAA,EAAS,EAAA;AAAA,QACT,GAAA,EAAK,YAAA;AAAA,QACL,YAAA,EAAc,gBAAA;AAAA,QACd,IAAA,EAAM,CAAC,IAAA,CAAK,OAAO;AAAA,OACpB,CAAA;AAAA,MACD,OAAO,YAAA,CAAa;AAAA,QAClB,OAAA,EAAS,EAAA;AAAA,QACT,GAAA,EAAK,YAAA;AAAA,QACL,YAAA,EAAc,iBAAA;AAAA,QACd,IAAA,EAAM,CAAC,QAAQ;AAAA,OAChB;AAAA,KACF,CAAA;AACD,IAAA,IAAI,gBAAgBD,gBAAAA,EAAa;AAC/B,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,IAAA,CAAK,OAAO,CAAA,yDAAA,CAA2D,CAAA;AAAA,IACnG;AACA,IAAA,IAAI,mBAAmB,EAAA,EAAI;AACzB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,kCAAkC,cAAc,CAAA,8JAAA;AAAA,OAElD;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,SAAA,GAAY,EAAA,IAAM,IAAA,CAAK,SAAA,GAAY,SAAA,EAAW;AAChD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,wBAAwB,IAAA,CAAK,OAAO,CAAA,oDAAA,EAAuD,SAAA,CAAU,UAAU,CAAA,MAAA;AAAA,KACjH;AAAA,EACF;AACF;AAEA,eAAsB,uBAAuB,IAAA,EAM3B;AAChB,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AACrD,EAAA,MAAM,CAAC,WAAA,EAAa,gBAAgB,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IACxD,OAAO,YAAA,CAAa;AAAA,MAClB,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,YAAA;AAAA,MACL,YAAA,EAAc,gBAAA;AAAA,MACd,IAAA,EAAM,CAAC,IAAA,CAAK,OAAO;AAAA,KACpB,CAAA;AAAA,IACD,OAAO,YAAA,CAAa;AAAA,MAClB,SAAS,IAAA,CAAK,cAAA;AAAA,MACd,GAAA,EAAK,YAAA;AAAA,MACL,YAAA,EAAc,0BAAA;AAAA,MACd,IAAA,EAAM,CAAC,IAAA,CAAK,OAAO;AAAA,KACpB;AAAA,GACF,CAAA;AACD,EAAA,IAAI,gBAAgBA,gBAAAA,EAAa;AAC/B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,OAAA,EAAU,IAAA,CAAK,OAAO,CAAA,2BAAA,CAA6B,CAAA;AAAA,EACrE;AACA,EAAA,IAAI,gBAAA,EAAkB;AACpB,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,oCAAA,EAAuC,KAAK,OAAO,CAAA,0DAAA;AAAA,KACrD;AAAA,EACF;AACA,EAAA,IAAIC,gBAAW,WAAW,CAAA,KAAMA,eAAAA,CAAW,IAAA,CAAK,KAAK,CAAA,EAAG;AACtD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,yCAAA,EAA4CA,eAAAA,CAAW,WAAW,CAAC,CAAA,EAAA;AAAA,KACrE;AAAA,EACF;AACF;;;ACpdO,IAAM,qBAAA,GACX;AAEK,IAAM,sBAAA,GAAyB,8BAA8B,qBAAqB,CAAA,QAAA;AAGlF,SAAS,oBAAA,CACd,QACA,QAAA,EACQ;AACR,EAAA,MAAM,UAAU,MAAA,CAAO,OAAA,IAAW,MAAA,CAAO,OAAA,IAAW,IAAI,IAAA,EAAK;AAC7D,EAAA,MAAM,OAAA,GAAA,CAAW,QAAA,IAAY,EAAA,EAAI,IAAA,EAAK;AACtC,EAAA,IAAI,MAAA,IAAU,OAAA,IAAW,MAAA,KAAW,OAAA,EAAS;AAC3C,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,4DAA4D,MAAM,CAAA,yBAAA;AAAA,KACpE;AAAA,EACF;AACA,EAAA,IAAI,QAAQ,OAAO,MAAA;AACnB,EAAA,IAAI,SAAS,OAAO,OAAA;AACpB,EAAA,MAAM,IAAI,KAAA;AAAA,IACR;AAAA,GACF;AACF;;;ACvBO,SAAS,gBAAA,CAAiB,aAAiC,aAAA,EAAgC;AAChG,EAAA,MAAM,CAAA,GAAA,CAAK,WAAA,IAAe,EAAA,EAAI,IAAA,EAAK;AACnC,EAAA,MAAM,MAAA,GAAA,CAAU,aAAA,IAAiB,EAAA,EAAI,IAAA,EAAK;AAC1C,EAAA,IAAI,CAAC,QAAQ,OAAO,CAAA;AACpB,EAAA,OAAO,CAAA,GAAI,GAAG,CAAC;;AAAA,EAAO,MAAM,CAAA,CAAA,GAAK,MAAA;AACnC;;;ACgCO,SAAS,kBAAkB,KAAA,EAAsD;AACtF,EAAA,MAAM,EAAE,MAAA,EAAQ,kBAAA,EAAoB,IAAA,EAAK,GAAI,KAAA;AAC7C,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,EAC/D;AAEA,EAAA,MAAM,EAAA,GAAA,CAAM,MAAA,CAAO,SAAA,IAAa,EAAA,EAAI,IAAA,EAAK;AACzC,EAAA,IAAI,CAAC,EAAA,EAAI,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAEhE,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,OAAA,IAAW,EAAC;AACnC,EAAA,MAAM,QAAA,GAAWK,6CAA4B,MAAM,CAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AAEpB,EAAA,MAAM,gBAAgB,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AAC/C,EAAA,MAAM,kBAAkB,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AAChD,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACjC,oBAAoB,CAAA,CAAE,kBAAA;AAAA,IACtB,eAAe,CAAA,CAAE,aAAA;AAAA,IACjB,GAAG,CAAA,CAAE;AAAA,GACP,CAAE,CAAA;AAEF,EAAA,MAAM,gBAAA,GAAmB,IAAA,CACtB,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,gBAAgB,CAAA,CAC7B,MAAA,CAAO,CAAC,CAAA,KAAoC,CAAA,IAAK,IAAA,IAAQ,OAAO,MAAM,QAAQ,CAAA;AAEjF,EAAA,MAAM,YAAA,GAAwC;AAAA,IAC5C,SAAA;AAAA,IACA,GAAI,KAAA,CAAM,SAAA,IAAa;AAAC,GAC1B;AACA,EAAA,MAAM,SAAA,GAAY,IAAA,CAAK,SAAA,CAAU,YAAA,EAAc,CAAC,CAAA,EAAG,CAAA,KAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,CAAE,QAAA,KAAa,CAAE,CAAA;AAEnG,EAAA,MAAM,WAAA,GAAuC;AAAA,IAC3C,OAAA;AAAA,IACA,MAAA,EAAQ,EAAA;AAAA,IACR,OAAA,EAAS,cAAc,CAAC,CAAA;AAAA,IACxB,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,kBAAA;AAAA,IACA,kBAAA,EAAoB,KAAA,CAAM,kBAAA,IAAsB,KAAA,CAAM,kBAAA;AAAA,IACtD,SAAA;AAAA,IACA,eAAe,KAAA,CAAM,aAAA;AAAA,IACrB,OAAA,EAAS,gBAAA,CAAiB,KAAA,CAAM,WAAA,EAAa,MAAM,aAAa,CAAA;AAAA,IAChE,GAAG,KAAA,CAAM;AAAA,GACX;AAEA,EAAA,IAAI,IAAA,CAAK,SAAS,CAAA,EAAG;AACnB,IAAA,WAAA,CAAY,aAAA,GAAgB,aAAA;AAC5B,IAAA,WAAA,CAAY,eAAA,GAAkB,eAAA;AAAA,EAChC;AAEA,EAAA,IAAI,gBAAA,CAAiB,SAAS,CAAA,EAAG;AAC/B,IAAA,WAAA,CAAY,gBAAA,GAAmB,gBAAA;AAAA,EACjC;AAEA,EAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,EAAA,IAAI,QAAA,IAAY,IAAA,IAAQ,QAAA,GAAW,EAAA,EAAI;AACrC,IAAA,WAAA,CAAY,KAAA,GAAQ,SAAS,QAAA,EAAS;AAAA,EACxC;AAEA,EAAA,IAAI,QAAA,cAAsB,QAAA,GAAW,QAAA;AAErC,EAAA,IAAI,KAAA,CAAM,UAAA,IAAc,IAAA,IAAQ,KAAA,CAAM,aAAa,CAAA,EAAG;AACpD,IAAA,WAAA,CAAY,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,UAAU,CAAA;AAAA,EACtD;AAEA,EAAA,OAAO,EAAE,WAAA,EAAa,aAAA,EAAe,IAAA,CAAK,SAAA,CAAU,WAAW,CAAA,EAAE;AACnE;ACpGO,SAAS,8BAAA,CACd,cACA,aAAA,EACQ;AACR,EAAA,IAAI,iBAAiB,IAAA,IAAQ,MAAA,CAAO,SAAS,aAAa,CAAA,IAAK,gBAAgB,CAAA,EAAG;AAChF,IAAA,OAAOC,mDAAA,CAAmC,cAAc,aAAa,CAAA;AAAA,EACvE;AACA,EAAA,OAAA,CAAQ,YAAA,GAAe,MAAM,EAAA,IAAM,GAAA;AACrC;;;ACuCA,eAAsB,uBAAuB,IAAA,EAAwD;AACnG,EAAA,MAAM,EAAE,OAAA,EAAS,KAAA,EAAM,GAAI,IAAA;AAC3B,EAAA,MAAM;AAAA,IACJ,OAAA;AAAA,IACA,MAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,qBAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AAEJ,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAE3F,EAAA,MAAM,KAAKF,gBAAAA,CAAY;AAAA,IACrB,EAAA,EAAI,OAAA;AAAA,IACJ,IAAA,EAAM,aAAA;AAAA,IACN,gBAAgB,EAAE,QAAA,EAAU,IAAI,IAAA,EAAM,OAAA,EAAS,QAAQ,KAAA,EAAM;AAAA,IAC7D,OAAA,EAAS,EAAE,OAAA,EAAS,EAAE,MAAM,CAAC,MAAM,GAAE;AAAE,GACxC,CAAA;AACD,EAAA,MAAMG,aAAAA,GAAeJ,wBAAmB,EAAE,KAAA,EAAO,IAAI,SAAA,EAAW,gBAAA,CAAiB,MAAM,CAAA,EAAG,CAAA;AAE1F,EAAA,MAAM,SAAA,GAAY,MAAMK,oCAAA,CAAoB,MAAA,EAAQ,OAAO,CAAA;AAC3D,EAAA,MAAM,SAAS,OAAA,CAAQ,WAAA,EAAa,MAAM,CAAA,IAAK,CAAC,SAAA,CAAU,SAAA;AAC1D,EAAA,MAAM,gBAAA,GAAmB,CAAC,MAAA,GAAA,CACpB,MAAMD,aAAAA,CAAa,QAAA,CAAS,EAAE,QAAA,EAAU,QAAA,EAAU,CAAA,EAAG,aAAA,IAAiB,EAAA,GACxE,EAAA;AAEJ,EAAA,MAAM,cAAA,GACJ,gBAAgB,WAAA,EAAa,QAAA,IAAY,OAAO,MAAA,CAAO,WAAA,CAAY,QAAQ,CAAA,GAAI,MAAA;AACjF,EAAA,MAAM,sBACJ,WAAA,EAAa,QAAA,IAAY,QACzB,MAAA,CAAO,QAAA,CAAS,OAAO,WAAA,CAAY,QAAQ,CAAC,CAAA,IAC5C,MAAA,CAAO,YAAY,QAAQ,CAAA,GAAI,IAC3B,MAAA,CAAO,WAAA,CAAY,QAAQ,CAAA,GAC3B,MAAA;AACN,EAAA,MAAM,gBAAA,GACJ,gBAAgB,WAAA,EAAa,aAAA,IAAiB,OAAO,MAAA,CAAO,WAAA,CAAY,aAAa,CAAA,GAAI,MAAA;AAE3F,EAAA,MAAM,QAAA,GAAWP,gBAAW,eAAe,CAAA;AAC3C,EAAA,MAAM,SAAA,GAAY,MAAMO,aAAAA,CAAa,mBAAA,CAAoB,EAAE,OAAA,EAAS,QAAA,EAAU,QAAA,EAAU,SAAA,EAAW,CAAA;AAEnG,EAAA,MAAM,OAAuB,EAAC;AAE9B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,IAAA,GAAO,MAAM,CAAC,CAAA;AACpB,IAAA,MAAM,eAAe,SAAA,GAAY,CAAA;AAEjC,IAAA,IAAI,YAAA;AACJ,IAAA,IAAI,KAAK,kBAAA,EAAoB;AAC3B,MAAA,YAAA,GAAe,MAAM,IAAA,CAAK,kBAAA,CAAmB,EAAE,IAAA,EAAM,OAAO,CAAA,EAAG,YAAA,EAAAA,aAAAA,EAAc,QAAA,EAAU,CAAA;AAAA,IACzF,CAAA,MAAO;AACL,MAAA,IAAI;AACF,QAAA,YAAA,GAAe,MAAMA,cAAa,WAAA,CAAY;AAAA,UAC5C,IAAI,IAAA,CAAK,EAAA;AAAA,UACT,MAAM,IAAA,CAAK,IAAA;AAAA,UACX,OAAO,IAAA,CAAK,KAAA;AAAA,UACZ,OAAA,EAAS;AAAA,SACV,CAAA;AAAA,MACH,CAAA,CAAA,MAAQ;AACN,QAAA,YAAA,GAAe,KAAK,WAAA,IAAe,OAAA;AAAA,MACrC;AAAA,IACF;AAEA,IAAA,IAAI,SAAA;AACJ,IAAA,IAAI,KAAK,eAAA,EAAiB;AACxB,MAAA,SAAA,GAAY,MAAM,IAAA,CAAK,eAAA,CAAgB,EAAE,IAAA,EAAM,OAAO,CAAA,EAAG,YAAA,EAAc,YAAA,EAAAA,aAAAA,EAAc,CAAA;AAAA,IACvF,CAAA,MAAA,IAAW,KAAK,UAAA,EAAY;AAC1B,MAAA,SAAA,GAAY,8BAAA,CAA+B,cAAc,mBAAmB,CAAA;AAAA,IAC9E,CAAA,MAAO;AACL,MAAA,SAAA,GAAY,YAAA,GACRD,mDAAAA,CAAmC,YAAA,EAAc,cAAc,CAAA,GAC/D,YAAA;AAAA,IACN;AAEA,IAAA,IAAI,gBAAA;AACJ,IAAA,IAAI,WAAA;AACJ,IAAA,IAAI,UAAA;AAEJ,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,IAAI,WAAA,GAAc,MAAMC,aAAAA,CAAa,WAAA,EAAY;AACjD,MAAA,IAAI,YAAA,IAAgB,gBAAA,IAAoB,IAAA,IAAQ,gBAAA,GAAmB,CAAA,EAAG;AACpE,QAAA,WAAA,GAAe,WAAA,GAAc,MAAA,CAAO,GAAA,GAAM,gBAAgB,CAAA,GAAK,IAAA;AAAA,MACjE;AACA,MAAA,IAAI,gBAAgB,WAAA,EAAa,QAAA,IAAY,IAAA,IAAQ,WAAA,CAAY,WAAW,CAAA,EAAG;AAC7E,QAAA,MAAM,aAAaE,cAAA,CAAUC,oCAAA,CAAoB,OAAO,WAAA,CAAY,QAAQ,CAAC,CAAC,CAAA;AAC9E,QAAA,IAAI,UAAA,GAAa,aAAa,WAAA,GAAc,UAAA;AAAA,MAC9C;AACA,MAAA,UAAA,GAAaC,yBAAA,CAAqB;AAAA,QAChC,IAAA,EAAM,QAAA;AAAA,QACN,IAAI,IAAA,CAAK,EAAA;AAAA,QACT,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,GAAA,EAAK,SAAA;AAAA,QACL,QAAA,EAAU,WAAA;AAAA,QACV,KAAA,EAAO,YAAA;AAAA,QACP;AAAA,OACD,CAAA;AACD,MAAA,gBAAA,GAAmB;AAAA,QACjB,KAAA,EAAO,YAAA;AAAA,QACP,QAAA,EAAU,UAAU,QAAA,EAAS;AAAA,QAC7B,MAAA,EAAQ,QAAA;AAAA,QACR,QAAA,EAAU,YAAY,QAAA;AAAS,OACjC;AACA,MAAA,WAAA,GAAcC,+CAA8B,gBAAgB,CAAA;AAAA,IAC9D,CAAA,MAAO;AACL,MAAA,MAAM,WAAA,GAAc,UAAU,WAAA,IAAe,CAAA;AAC7C,MAAA,MAAM,eAAA,GAAkB,UAAU,eAAA,IAAmB,CAAA;AACrD,MAAA,MAAM,cAAA,GACJ,gBAAgB,WAAA,EAAa,OAAA,IAAW,OAAO,MAAA,CAAO,WAAA,CAAY,OAAO,CAAA,GAAI,CAAA;AAC/E,MAAA,MAAM,kBAAA,GACJ,gBAAgB,WAAA,EAAa,WAAA,IAAe,OAAO,MAAA,CAAO,WAAA,CAAY,WAAW,CAAA,GAAI,CAAA;AACvF,MAAA,MAAM,oBAAA,GAAuB,IAAA,CAAK,GAAA,CAAI,WAAA,EAAa,cAAc,CAAA;AACjE,MAAA,MAAM,wBAAA,GAA2B,IAAA,CAAK,GAAA,CAAI,eAAA,EAAiB,kBAAkB,CAAA;AAC7E,MAAA,MAAM,oBAAA,GACJ,YAAA,IAAgB,WAAA,EAAa,iBAAA,IAAqB,IAAA,GAC9C,IAAA,CAAK,GAAA,CAAI,GAAA,EAAK,MAAA,CAAO,WAAA,CAAY,iBAAiB,CAAC,CAAA,GACnD,GAAA;AACN,MAAA,MAAM,iBAAA,GAAqB,uBAAuB,oBAAA,GAAwB,GAAA;AAC1E,MAAA,MAAM,mBAAmB,iBAAA,GAAoB,wBAAA;AAC7C,MAAA,IAAI,oBAAA,GACF,2BAA2B,CAAA,GACvBH,cAAA,CAAUC,qCAAoB,wBAAwB,CAAC,CAAA,GACvDD,cAAA,CAAU,GAAG,CAAA;AACnB,MAAA,IAAI,YAAA,GAAeA,cAAA,CAAUC,oCAAA,CAAoB,gBAAgB,CAAC,CAAA;AAClE,MAAA,IAAI,YAAA,IAAgB,gBAAA,IAAoB,IAAA,IAAQ,gBAAA,GAAmB,CAAA,EAAG;AACpE,QAAA,oBAAA,GAAwB,oBAAA,GAAuB,MAAA,CAAO,GAAA,GAAM,gBAAgB,CAAA,GAAK,IAAA;AACjF,QAAA,YAAA,GAAgB,YAAA,GAAe,MAAA,CAAO,GAAA,GAAM,gBAAgB,CAAA,GAAK,IAAA;AAAA,MACnE;AACC,MAAA,CAAC,EAAE,YAAA,EAAc,oBAAA,EAAqB,GAAIG,+CAAA;AAAA,QACzC,YAAA;AAAA,QACA,oBAAA;AAAA,QACA;AAAA,OACF;AACA,MAAA,UAAA,GAAaF,yBAAA,CAAqB;AAAA,QAChC,IAAA,EAAM,SAAA;AAAA,QACN,IAAI,IAAA,CAAK,EAAA;AAAA,QACT,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,OAAO,IAAA,CAAK,KAAA;AAAA,QACZ,GAAA,EAAK,SAAA;AAAA,QACL,YAAA;AAAA,QACA,oBAAA;AAAA,QACA,KAAA,EAAO,YAAA;AAAA,QACP;AAAA,OACD,CAAA;AACD,MAAA,gBAAA,GAAmB;AAAA,QACjB,KAAA,EAAO,YAAA;AAAA,QACP,QAAA,EAAU,UAAU,QAAA,EAAS;AAAA,QAC7B,MAAA,EAAQ,SAAA;AAAA,QACR,YAAA,EAAc,aAAa,QAAA,EAAS;AAAA,QACpC,oBAAA,EAAsB,qBAAqB,QAAA;AAAS,OACtD;AACA,MAAA,WAAA,GAAc,CAAA,KAAM,CAAA,GAAIC,8CAAA,CAA8B,gBAAgB,IAAI,EAAC;AAAA,IAC7E;AAEA,IAAA,MAAM,CAAA,GAAIE,eAAU,UAAU,CAAA;AAC9B,IAAA,MAAM,OAAA,GAAU,EAAE,UAAA,CAAW,IAAI,IAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA;AAElD,IAAA,MAAM,cAAA,GAAiB,KAAK,cAAA,CAAe,EAAE,MAAM,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,SAAA,EAAW,CAAA;AAElF,IAAA,IAAA,CAAK,IAAA,CAAK;AAAA,MACR,OAAA;AAAA,MACA,QAAQ,CAAA,KAAM,CAAA,IAAK,KAAK,eAAA,IAAmB,IAAA,GAAO,KAAK,eAAA,GAAkB,UAAA;AAAA,MACzE,oBAAoB,IAAA,CAAK,EAAA;AAAA,MACzB,aAAA,EACE,OAAO,cAAA,CAAe,aAAA,KAAkB,QAAA,GACpC,cAAA,CAAe,aAAA,GACf,IAAA,CAAK,SAAA,CAAU,cAAA,CAAe,aAAA,IAAiB,EAAE,CAAA;AAAA,MACvD,KAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAa,CAAA,KAAM,CAAA,GAAI,WAAA,GAAc,EAAC;AAAA,MACtC,gBAAA;AAAA,MACA,QAAA,EAAU,CAAA,KAAM,CAAA,GAAI,IAAA,CAAK,KAAA,GAAQ;AAAA,KAClC,CAAA;AAED,IAAA,IAAI,CAAA,KAAM,CAAA,IAAK,IAAA,CAAK,eAAA,IAAmB,IAAA,EAAM;AAC3C,MAAA,IAAA,CAAK,CAAC,CAAA,CAAG,MAAA,GAAS,IAAA,CAAK,eAAA;AAAA,IACzB;AAAA,EACF;AAEA,EAAA,MAAM,YAAqC,EAAC;AAC5C,EAAA,IAAI,gBAAgB,qBAAA,IAAyB,MAAA,CAAO,KAAK,qBAAqB,CAAA,CAAE,SAAS,CAAA,EAAG;AAC1F,IAAA,SAAA,CAAU,qBAAA,GAAwB,qBAAA;AAAA,EACpC;AAEA,EAAA,MAAM,SAAS,iBAAA,CAAkB;AAAA,IAC/B,MAAA;AAAA,IACA,WAAA;AAAA,IACA,eAAe,IAAA,CAAK,aAAA;AAAA,IACpB,kBAAA,EAAoB,OAAO,OAAO,CAAA;AAAA,IAClC,kBAAA,EAAoB,IAAA,CAAK,kBAAA,IAAsB,KAAA,CAAM,CAAC,CAAA,CAAG,EAAA;AAAA,IACzD,IAAA;AAAA,IACA,WAAW,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,CAAE,MAAA,GAAS,IAAI,SAAA,GAAY,MAAA;AAAA,IAC3D,YAAY,OAAA,CAAQ;AAAA,GACrB,CAAA;AACD,EAAA,MAAM,KAAK,IAAA,CAAK,eAAA;AAChB,EAAA,IAAI,EAAA,IAAM,IAAA,IAAQ,EAAA,GAAK,EAAA,EAAI;AACzB,IAAA,MAAA,CAAO,WAAA,CAAY,KAAA,GAAQ,EAAA,CAAG,QAAA,EAAS;AAAA,EACzC;AACA,EAAA,OAAO,MAAA;AACT;;;ACzNO,IAAM,8BAAA,GAAiC;AACvC,IAAM,kCAAA,GAAqC;AAC3C,IAAM,sCAAA,GAAyC;AAC/C,IAAM,sCAAA,GAAyC;AAC/C,IAAM,4BAAA,GAA+B;AACrC,IAAM,4BAAA,GAA+B;AACrC,IAAM,+BAAA,GAAkC;AACxC,IAAM,gCAAA,GAAmC;AACzC,IAAM,+BAAA,GAAkC;AACxC,IAAM,+BAAA,GAAkC;AACxC,IAAM,6BAAA,GAAgC;AACtC,IAAM,6BAAA,GAAgC;AAEtC,IAAM,8BAAA,GAAiC;AAI9C,IAAMC,YAAWb,aAAAA,CAAS;AAAA,EACxB,2EAAA;AAAA,EACA;AACF,CAAC,CAAA;AACD,IAAM,aAAaA,aAAAA,CAAS;AAAA,EAC1B,gFAAA;AAAA,EACA,4DAAA;AAAA,EACA,yEAAA;AAAA,EACA,qCAAA;AAAA,EACA,wEAAA;AAAA,EACA,4CAAA;AAAA,EACA,sCAAA;AAAA,EACA,sCAAA;AAAA,EACA;AACF,CAAC,CAAA;AACD,IAAM,YAAYA,aAAAA,CAAS;AAAA,EACzB,yDAAyD,qBAAqB,CAAA,0BAAA;AAChF,CAAC,CAAA;AACD,IAAM,SAAA,GAAYA,aAAAA,CAAS,CAAC,6DAA6D,CAAC,CAAA;AAEnF,IAAM,uBAAA,uBAA8B,GAAA,CAAI;AAAA,EAC7C,uBAAA;AAAA,EACA,2BAAA;AAAA,EACA,+BAAA;AAAA,EACA,oCAAA;AAAA,EACA,qBAAA;AAAA,EACA,qBAAA;AAAA,EACA,wBAAA;AAAA,EACA,yBAAA;AAAA,EACA,wBAAA;AAAA,EACA,0BAAA;AAAA,EACA,wBAAA;AAAA,EACA,sBAAA;AAAA,EACA;AACF,CAAC;AA+BD,SAAS,iBAAiB,OAAA,EAAuB;AAC/C,EAAA,IAAI,CAAC,uBAAA,CAAwB,OAAO,CAAA,EAAG;AACrC,IAAA,MAAM,IAAI,MAAM,sDAAsD,CAAA;AAAA,EACxE;AACF;AAEA,SAAS,UAAU,OAAA,EAA0B;AAC3C,EAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,EAAA,MAAM,EAAA,GAAK,8BAA8B,OAAO,CAAA;AAChD,EAAA,IAAI,CAAC,EAAA,EAAI,MAAM,IAAI,MAAM,6DAA6D,CAAA;AACtF,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,WAAW,OAAA,EAA0B;AAC5C,EAAA,MAAM,GAAA,GAAM,0BAA0B,OAAO,CAAA;AAC7C,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,mDAAmD,CAAA;AAC7E,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,aAAa,GAAA,EAAuC;AAC3D,EAAA,MAAM,EAAA,GAAK,OAAO,GAAA,KAAQ,QAAA,GAAW,GAAA,GAAM,OAAO,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,EAAM,CAAA;AACpE,EAAA,IAAI,EAAA,IAAM,EAAA,EAAI,MAAM,IAAI,MAAM,2CAA2C,CAAA;AACzE,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,yBAAA,CACd,OACA,OAAA,EACQ;AACR,EAAA,OAAO,KAAK,SAAA,CAAU;AAAA,IACpB,IAAA,EAAM,cAAA;AAAA,IACN,GAAG,KAAA;AAAA,IACH;AAAA,GACD,CAAA;AACH;AAEA,SAAS,IAAA,CACP,OAAA,EACA,OAAA,EACA,EAAA,EACA,OACA,QAAA,EACyB;AACzB,EAAA,OAAO;AAAA,IACL,kBAAA,EAAoB,EAAA;AAAA,IACpB,aAAA,EAAe,yBAAA,CAA0B,KAAA,EAAO,OAAO,CAAA;AAAA,IACvD,GAAA,EAAK,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,CAAA,EAAG,OAAA,EAAS,MAAA,CAAO,OAAO,CAAA,EAAG,UAAA,EAAY,yBAAA,EAA0B;AAAA,IAClG,YAAA,EAAc,EAAE,GAAG,KAAA,EAAO,GAAA,EAAK,EAAE,YAAA,EAAc,QAAA,CAAS,QAAA,EAAS,EAAE;AAAE,GACvE;AACF;AAEA,eAAe,QAAA,CACb,KAAA,EACA,IAAA,EACA,aAAA,EAC0E;AAC1E,EAAA,IAAI,MAAM,MAAA,KAAW,CAAA,EAAG,MAAM,IAAI,MAAM,gDAAgD,CAAA;AACxF,EAAA,MAAM,QAAA,GAAwB,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IAC9C,IAAI,CAAA,CAAE,EAAA;AAAA,IACN,MAAM,CAAA,CAAE,IAAA;AAAA,IACR,OAAO,CAAA,CAAE,KAAA;AAAA,IACT,aAAa,CAAA,CAAE;AAAA,GACjB,CAAE,CAAA;AACF,EAAA,MAAM,gBAAgB,QAAA,CAAS,CAAC,CAAA,CAAG,IAAA,CAAK,WAAW,IAAI,CAAA,GAAI,QAAA,CAAS,CAAC,EAAG,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAAI,QAAA,CAAS,CAAC,CAAA,CAAG,IAAA;AACrG,EAAA,OAAO,sBAAA,CAAuB;AAAA,IAC5B,OAAA,EAAS;AAAA,MACP,aAAA,EAAe,KAAA;AAAA,MACf,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,IAAA,EAAK;AAAA,MACzB,iBAAiB,IAAA,CAAK,eAAA;AAAA,MACtB,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,uBAAuB,IAAA,CAAK;AAAA,KAC9B;AAAA,IACA,KAAA,EAAO,QAAA;AAAA,IACP,aAAA;AAAA,IACA,eAAA,EAAiB,aAAA;AAAA,IACjB,kBAAA,EAAoB,KAAA,CAAM,CAAC,CAAA,CAAG,EAAA;AAAA,IAC9B,cAAA,EAAgB,CAAC,EAAE,KAAA,EAAO,QAAA,EAAS,KAAM,KAAA,CAAM,KAAK,CAAA,CAAG,cAAA,CAAe,EAAE,QAAA,EAAU;AAAA,GACnF,CAAA;AACH;AAEA,eAAe,oBAAoB,IAAA,EAON;AAC3B,EAAA,MAAM,KAAKE,gBAAAA,CAAY;AAAA,IACrB,IAAI,IAAA,CAAK,OAAA;AAAA,IACT,IAAA,EAAM,cAAA;AAAA,IACN,gBAAgB,EAAE,QAAA,EAAU,IAAI,IAAA,EAAM,OAAA,EAAS,QAAQ,KAAA,EAAM;AAAA,IAC7D,OAAA,EAAS,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,CAAC,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,CAAA,EAAE;AAAE,GACpD,CAAA;AACD,EAAA,MAAM,MAAA,GAASD,uBAAAA,CAAmB,EAAE,KAAA,EAAO,EAAA,EAAI,SAAA,EAAW,gBAAA,CAAiB,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,CAAA,EAAG,CAAA;AAChG,EAAA,IAAI,SAAA,GAAY,EAAA;AAChB,EAAA,IAAI;AACF,IAAA,SAAA,GAAY,MAAM,OAAO,YAAA,CAAa;AAAA,MACpC,SAAS,IAAA,CAAK,GAAA;AAAA,MACd,GAAA,EAAKY,SAAAA;AAAA,MACL,YAAA,EAAc,WAAA;AAAA,MACd,IAAA,EAAM,CAAC,IAAA,CAAK,KAAA,EAAO,KAAK,OAAO;AAAA,KAChC,CAAA;AAAA,EACH,CAAA,CAAA,MAAQ;AACN,IAAA,SAAA,GAAY,EAAA;AAAA,EACd;AACA,EAAA,IAAI,SAAA,IAAa,IAAA,CAAK,SAAA,EAAW,OAAO,IAAA;AACxC,EAAA,MAAM,OAAOC,uBAAA,CAAmB;AAAA,IAC9B,GAAA,EAAKD,SAAAA;AAAA,IACL,YAAA,EAAc,SAAA;AAAA,IACd,IAAA,EAAM,CAAC,IAAA,CAAK,OAAA,EAAS,KAAK,SAAS;AAAA,GACpC,CAAA;AACD,EAAA,OAAO;AAAA,IACL,IAAI,IAAA,CAAK,GAAA;AAAA,IACT,IAAA;AAAA,IACA,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,8BAAA;AAAA,IACb,cAAA,EAAgB,CAAC,EAAE,QAAA,EAAS,KAC1B,KAAK,uBAAA,EAAyB,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,GAAA,EAAK;AAAA,MACpD,IAAA,EAAM,aAAA;AAAA,MACN,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,QAAA;AAAS,OAClC,QAAQ;AAAA,GACf;AACF;AAEA,eAAsB,4CACpB,IAAA,EAM0E;AAC1E,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,IAAgB,mBAAA,CAAoB,IAAA,CAAK,YAAY,CAAA,GACjEf,eAAAA,CAAW,IAAA,CAAK,YAAY,CAAA,GAC5B,SAAA,CAAU,KAAK,OAAO,CAAA;AAC1B,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,IAAO,mBAAA,CAAoB,IAAA,CAAK,GAAG,CAAA,GAAIA,eAAAA,CAAW,IAAA,CAAK,GAAG,CAAA,GAAI,UAAA,CAAW,KAAK,OAAO,CAAA;AACtG,EAAA,MAAM,SAAA,GAAYiB,eAAA,CAAW,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,CAAE,IAAA,EAAK,CAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,EAAG,kBAAkB,CAAA;AAClG,EAAA,MAAM,WAAW,MAAA,CAAO,MAAA,CAAO,KAAK,mBAAmB,CAAA,CAAE,MAAM,CAAA;AAC/D,EAAA,MAAM,KAAA,GAAQjB,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAC7C,EAAA,MAAM,mBAAA,CAAoB;AAAA,IACxB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAA,EAAc,EAAA;AAAA,IACd,GAAA;AAAA,IACA,KAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA,EAAa;AAAA,GACd,CAAA;AACD,EAAA,MAAM,OAAA,GAAU,MAAM,mBAAA,CAAoB;AAAA,IACxC,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,KAAA;AAAA,IACA,GAAA;AAAA,IACA,OAAA,EAAS,EAAA;AAAA,IACT;AAAA,GACD,CAAA;AACD,EAAA,MAAM,OAAOgB,uBAAA,CAAmB;AAAA,IAC9B,GAAA,EAAK,UAAA;AAAA,IACL,YAAA,EAAc,aAAA;AAAA,IACd,IAAA,EAAM,CAAC,SAAA,EAAW,QAAQ;AAAA,GAC3B,CAAA;AACD,EAAA,MAAM,QAAA,GAAqB;AAAA,IACzB,EAAA,EAAI,EAAA;AAAA,IACJ,IAAA;AAAA,IACA,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,kCAAA;AAAA,IACb,cAAA,EAAgB,CAAC,EAAE,QAAA,OACjB,IAAA,CAAK,2BAAA,EAA6B,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI;AAAA,MAClD,IAAA,EAAM,0BAAA;AAAA,MACN,SAAA,EAAW,UAAU,QAAA,EAAS;AAAA,MAC9B,mBAAA,EAAqB,SAAS,QAAA;AAAS,OACtC,QAAQ;AAAA,GACf;AACA,EAAA,MAAM,QAAQ,OAAA,GAAU,CAAC,SAAS,QAAQ,CAAA,GAAI,CAAC,QAAQ,CAAA;AACvD,EAAA,OAAO,SAAS,KAAA,EAAO,IAAA,EAAM,CAAA,0BAAA,EAA6B,IAAA,CAAK,WAAW,CAAA,KAAA,CAAO,CAAA;AACnF;AAEA,eAAsB,gDACpB,IAAA,EAM0E;AAC1E,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,IAAgB,mBAAA,CAAoB,IAAA,CAAK,YAAY,CAAA,GACjEhB,eAAAA,CAAW,IAAA,CAAK,YAAY,CAAA,GAC5B,SAAA,CAAU,KAAK,OAAO,CAAA;AAC1B,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,GAAA,IAAO,mBAAA,CAAoB,IAAA,CAAK,GAAG,CAAA,GAAIA,eAAAA,CAAW,IAAA,CAAK,GAAG,CAAA,GAAI,UAAA,CAAW,KAAK,OAAO,CAAA;AACtG,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA;AACzC,EAAA,MAAM,SAAA,GAAYiB,eAAA,CAAW,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,CAAE,IAAA,EAAK,CAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,EAAG,kBAAkB,CAAA;AAClG,EAAA,MAAM,KAAA,GAAQjB,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAC7C,EAAA,MAAM,uBAAA,CAAwB;AAAA,IAC5B,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAA,EAAc,EAAA;AAAA,IACd,GAAA;AAAA,IACA,KAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,MAAM,OAAA,GAAU,MAAM,mBAAA,CAAoB;AAAA,IACxC,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,KAAA;AAAA,IACA,GAAA;AAAA,IACA,OAAA,EAAS,EAAA;AAAA,IACT;AAAA,GACD,CAAA;AACD,EAAA,MAAM,OAAOgB,uBAAA,CAAmB;AAAA,IAC9B,GAAA,EAAK,UAAA;AAAA,IACL,YAAA,EAAc,iBAAA;AAAA,IACd,IAAA,EAAM,CAAC,OAAA,EAAS,SAAS;AAAA,GAC1B,CAAA;AACD,EAAA,MAAM,IAAA,GAAiB;AAAA,IACrB,EAAA,EAAI,EAAA;AAAA,IACJ,IAAA;AAAA,IACA,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,sCAAA;AAAA,IACb,cAAA,EAAgB,CAAC,EAAE,QAAA,OACjB,IAAA,CAAK,+BAAA,EAAiC,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI;AAAA,MACtD,IAAA,EAAM,8BAAA;AAAA,MACN,OAAA,EAAS,QAAQ,QAAA,EAAS;AAAA,MAC1B,SAAA,EAAW,UAAU,QAAA;AAAS,OAC7B,QAAQ;AAAA,GACf;AACA,EAAA,MAAM,QAAQ,OAAA,GAAU,CAAC,SAAS,IAAI,CAAA,GAAI,CAAC,IAAI,CAAA;AAC/C,EAAA,OAAO,QAAA,CAAS,KAAA,EAAO,IAAA,EAAM,CAAA,wCAAA,EAA2C,OAAO,CAAA,CAAA,CAAG,CAAA;AACpF;AAEA,eAAsB,oDACpB,IAAA,EAK0E;AAC1E,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,IAAgB,mBAAA,CAAoB,IAAA,CAAK,YAAY,CAAA,GACjEhB,eAAAA,CAAW,IAAA,CAAK,YAAY,CAAA,GAC5B,SAAA,CAAU,KAAK,OAAO,CAAA;AAC1B,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA;AACzC,EAAA,MAAM,WAAW,MAAA,CAAO,MAAA,CAAO,KAAK,mBAAmB,CAAA,CAAE,MAAM,CAAA;AAC/D,EAAA,MAAM,KAAA,GAAQA,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAC7C,EAAA,MAAM,2BAAA,CAA4B;AAAA,IAChC,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAA,EAAc,EAAA;AAAA,IACd,KAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA,EAAa;AAAA,GACd,CAAA;AACD,EAAA,MAAM,OAAOgB,uBAAA,CAAmB;AAAA,IAC9B,GAAA,EAAK,UAAA;AAAA,IACL,YAAA,EAAc,sBAAA;AAAA,IACd,IAAA,EAAM,CAAC,OAAA,EAAS,QAAQ;AAAA,GACzB,CAAA;AACD,EAAA,MAAM,IAAA,GAAiB;AAAA,IACrB,EAAA,EAAI,EAAA;AAAA,IACJ,IAAA;AAAA,IACA,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,sCAAA;AAAA,IACb,cAAA,EAAgB,CAAC,EAAE,QAAA,OACjB,IAAA,CAAK,oCAAA,EAAsC,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI;AAAA,MAC3D,IAAA,EAAM,mCAAA;AAAA,MACN,SAAA,EAAW,8BAAA;AAAA,MACX,OAAA,EAAS,QAAQ,QAAA,EAAS;AAAA,MAC1B,mBAAA,EAAqB,SAAS,QAAA;AAAS,OACtC,QAAQ;AAAA,GACf;AACA,EAAA,OAAO,SAAS,CAAC,IAAI,GAAG,IAAA,EAAM,CAAA,6CAAA,EAAgD,OAAO,CAAA,CAAA,CAAG,CAAA;AAC1F;AAEA,eAAsB,uCACpB,IAAA,EAK0E;AAC1E,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,IAAgB,mBAAA,CAAoB,IAAA,CAAK,YAAY,CAAA,GACjEhB,eAAAA,CAAW,IAAA,CAAK,YAAY,CAAA,GAC5B,SAAA,CAAU,KAAK,OAAO,CAAA;AAC1B,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA;AACzC,EAAA,MAAM,SAAA,GAAYiB,eAAA,CAAW,MAAA,CAAO,IAAA,CAAK,cAAc,CAAA,CAAE,IAAA,EAAK,CAAE,OAAA,CAAQ,IAAA,EAAM,EAAE,CAAA,EAAG,kBAAkB,CAAA;AACrG,EAAA,MAAM,cAAA,CAAe;AAAA,IACnB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAA,EAAc,EAAA;AAAA,IACd,KAAA,EAAOjB,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAAA,IACtC,OAAA;AAAA,IACA,YAAA,EAAc;AAAA,GACf,CAAA;AACD,EAAA,MAAM,OAAOgB,uBAAA,CAAmB;AAAA,IAC9B,GAAA,EAAK,UAAA;AAAA,IACL,YAAA,EAAc,OAAA;AAAA,IACd,IAAA,EAAM,CAAC,OAAA,EAAS,SAAS;AAAA,GAC1B,CAAA;AACD,EAAA,MAAM,IAAA,GAAiB;AAAA,IACrB,EAAA,EAAI,EAAA;AAAA,IACJ,IAAA;AAAA,IACA,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,4BAAA;AAAA,IACb,cAAA,EAAgB,CAAC,EAAE,QAAA,OACjB,IAAA,CAAK,qBAAA,EAAuB,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI;AAAA,MAC5C,IAAA,EAAM,oBAAA;AAAA,MACN,OAAA,EAAS,QAAQ,QAAA,EAAS;AAAA,MAC1B,YAAA,EAAc,UAAU,QAAA;AAAS,OAChC,QAAQ;AAAA,GACf;AACA,EAAA,OAAO,SAAS,CAAC,IAAI,GAAG,IAAA,EAAM,CAAA,2BAAA,EAA8B,OAAO,CAAA,CAAA,CAAG,CAAA;AACxE;AAEA,eAAsB,uCACpB,IAAA,EAK0E;AAC1E,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,IAAgB,mBAAA,CAAoB,IAAA,CAAK,YAAY,CAAA,GACjEhB,eAAAA,CAAW,IAAA,CAAK,YAAY,CAAA,GAC5B,SAAA,CAAU,KAAK,OAAO,CAAA;AAC1B,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,IAAA,CAAK,WAAW,CAAA;AAC5C,EAAA,MAAM,IAAA,GAAO,YAAA,CAAa,IAAA,CAAK,SAAS,CAAA;AACxC,EAAA,MAAM,cAAA,CAAe;AAAA,IACnB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAA,EAAc,EAAA;AAAA,IACd,KAAA,EAAOA,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAAA,IACtC,WAAA,EAAa,MAAA;AAAA,IACb,SAAA,EAAW;AAAA,GACZ,CAAA;AACD,EAAA,MAAM,OAAOgB,uBAAA,CAAmB;AAAA,IAC9B,GAAA,EAAK,UAAA;AAAA,IACL,YAAA,EAAc,OAAA;AAAA,IACd,IAAA,EAAM,CAAC,MAAA,EAAQ,IAAI;AAAA,GACpB,CAAA;AACD,EAAA,MAAM,IAAA,GAAiB;AAAA,IACrB,EAAA,EAAI,EAAA;AAAA,IACJ,IAAA;AAAA,IACA,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,4BAAA;AAAA,IACb,cAAA,EAAgB,CAAC,EAAE,QAAA,OACjB,IAAA,CAAK,qBAAA,EAAuB,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI;AAAA,MAC5C,IAAA,EAAM,oBAAA;AAAA,MACN,WAAA,EAAa,OAAO,QAAA,EAAS;AAAA,MAC7B,SAAA,EAAW,KAAK,QAAA;AAAS,OACxB,QAAQ;AAAA,GACf;AACA,EAAA,OAAO,QAAA,CAAS,CAAC,IAAI,CAAA,EAAG,MAAM,CAAA,2BAAA,EAA8B,MAAM,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA,CAAG,CAAA;AACrF;AAEA,eAAsB,0CACpB,IAAA,EAC0E;AAC1E,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,IAAgB,mBAAA,CAAoB,IAAA,CAAK,YAAY,CAAA,GACjEhB,eAAAA,CAAW,IAAA,CAAK,YAAY,CAAA,GAC5B,SAAA,CAAU,KAAK,OAAO,CAAA;AAC1B,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA;AACzC,EAAA,MAAM,iBAAA,CAAkB;AAAA,IACtB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAA,EAAc,EAAA;AAAA,IACd,KAAA,EAAOA,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAAA,IACtC;AAAA,GACD,CAAA;AACD,EAAA,MAAM,IAAA,GAAOgB,uBAAA,CAAmB,EAAE,GAAA,EAAK,UAAA,EAAY,YAAA,EAAc,UAAA,EAAY,IAAA,EAAM,CAAC,OAAO,CAAA,EAAG,CAAA;AAC9F,EAAA,MAAM,IAAA,GAAiB;AAAA,IACrB,EAAA,EAAI,EAAA;AAAA,IACJ,IAAA;AAAA,IACA,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,+BAAA;AAAA,IACb,cAAA,EAAgB,CAAC,EAAE,QAAA,OACjB,IAAA,CAAK,wBAAA,EAA0B,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI;AAAA,MAC/C,IAAA,EAAM,uBAAA;AAAA,MACN,OAAA,EAAS,QAAQ,QAAA;AAAS,OACzB,QAAQ;AAAA,GACf;AACA,EAAA,OAAO,SAAS,CAAC,IAAI,GAAG,IAAA,EAAM,CAAA,8BAAA,EAAiC,OAAO,CAAA,CAAA,CAAG,CAAA;AAC3E;AAEA,eAAsB,2CACpB,IAAA,EAC0E;AAC1E,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,IAAgB,mBAAA,CAAoB,IAAA,CAAK,YAAY,CAAA,GACjEhB,eAAAA,CAAW,IAAA,CAAK,YAAY,CAAA,GAC5B,SAAA,CAAU,KAAK,OAAO,CAAA;AAC1B,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA;AACzC,EAAA,MAAM,kBAAA,CAAmB;AAAA,IACvB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAA,EAAc,EAAA;AAAA,IACd,KAAA,EAAOA,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAAA,IACtC;AAAA,GACD,CAAA;AACD,EAAA,MAAM,IAAA,GAAOgB,uBAAA,CAAmB,EAAE,GAAA,EAAK,UAAA,EAAY,YAAA,EAAc,WAAA,EAAa,IAAA,EAAM,CAAC,OAAO,CAAA,EAAG,CAAA;AAC/F,EAAA,MAAM,IAAA,GAAiB;AAAA,IACrB,EAAA,EAAI,EAAA;AAAA,IACJ,IAAA;AAAA,IACA,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,gCAAA;AAAA,IACb,cAAA,EAAgB,CAAC,EAAE,QAAA,OACjB,IAAA,CAAK,yBAAA,EAA2B,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI;AAAA,MAChD,IAAA,EAAM,wBAAA;AAAA,MACN,OAAA,EAAS,QAAQ,QAAA;AAAS,OACzB,QAAQ;AAAA,GACf;AACA,EAAA,OAAO,SAAS,CAAC,IAAI,GAAG,IAAA,EAAM,CAAA,+BAAA,EAAkC,OAAO,CAAA,CAAA,CAAG,CAAA;AAC5E;AAEA,eAAsB,0CACpB,IAAA,EAC0E;AAC1E,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,IAAgB,mBAAA,CAAoB,IAAA,CAAK,YAAY,CAAA,GACjEhB,eAAAA,CAAW,IAAA,CAAK,YAAY,CAAA,GAC5B,SAAA,CAAU,KAAK,OAAO,CAAA;AAC1B,EAAA,MAAM,SAAA,GAAY,MAAM,iBAAA,CAAkB;AAAA,IACxC,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IAEd,KAAA,EAAOA,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAAA,IACtC,WAAW,IAAA,CAAK;AAAA,GACjB,CAAA;AACD,EAAA,MAAM,IAAA,GAAOgB,uBAAA,CAAmB,EAAE,GAAA,EAAK,UAAA,EAAY,YAAA,EAAc,UAAA,EAAY,IAAA,EAAM,CAAC,SAAS,CAAA,EAAG,CAAA;AAChG,EAAA,MAAM,IAAA,GAAiB;AAAA,IACrB,EAAA,EAAI,EAAA;AAAA,IACJ,IAAA;AAAA,IACA,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,+BAAA;AAAA,IACb,cAAA,EAAgB,CAAC,EAAE,QAAA,OACjB,IAAA,CAAK,wBAAA,EAA0B,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI;AAAA,MAC/C,IAAA,EAAM,uBAAA;AAAA,MACN;AAAA,OACC,QAAQ;AAAA,GACf;AACA,EAAA,OAAO,SAAS,CAAC,IAAI,GAAG,IAAA,EAAM,CAAA,uCAAA,EAA0C,SAAS,CAAA,CAAA,CAAG,CAAA;AACtF;AAGA,eAAsB,4CACpB,IAAA,EAC0E;AAC1E,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,IAAgB,mBAAA,CAAoB,IAAA,CAAK,YAAY,CAAA,GACjEhB,eAAAA,CAAW,IAAA,CAAK,YAAY,CAAA,GAC5B,SAAA,CAAU,KAAK,OAAO,CAAA;AAC1B,EAAA,MAAM,IAAA,GAAOA,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAC5C,EAAA,MAAM,mBAAA,CAAoB;AAAA,IACxB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAA,EAAc,EAAA;AAAA,IACd,KAAA,EAAO;AAAA,GACR,CAAA;AACD,EAAA,MAAM,IAAA,GAAOgB,uBAAA,CAAmB,EAAE,GAAA,EAAK,UAAA,EAAY,YAAA,EAAc,UAAA,EAAY,IAAA,EAAM,CAAC,IAAI,CAAA,EAAG,CAAA;AAC3F,EAAA,MAAM,IAAA,GAAiB;AAAA,IACrB,EAAA,EAAI,EAAA;AAAA,IACJ,IAAA;AAAA,IACA,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,+BAAA;AAAA,IACb,cAAA,EAAgB,CAAC,EAAE,QAAA,OACjB,IAAA,CAAK,0BAAA,EAA4B,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI;AAAA,MACjD,IAAA,EAAM,uBAAA;AAAA,MACN,SAAA,EAAW,IAAA;AAAA,MACX,UAAA,EAAY;AAAA,OACX,QAAQ;AAAA,GACf;AACA,EAAA,OAAO,SAAS,CAAC,IAAI,GAAG,IAAA,EAAM,CAAA,wDAAA,EAA2D,IAAI,CAAA,EAAA,CAAI,CAAA;AACnG;AAEA,IAAME,UAAAA,GAAYhB,aAAAA,CAAS,CAAC,4DAA4D,CAAC,CAAA;AAEzF,eAAsB,2BAA2B,IAAA,EAKkB;AACjE,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACnC,EAAA,gBAAA,CAAiB,OAAO,CAAA;AACxB,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,IAAgB,mBAAA,CAAoB,IAAA,CAAK,YAAY,CAAA,GACjEF,eAAAA,CAAW,IAAA,CAAK,YAAY,CAAA,GAC5B,SAAA,CAAU,OAAO,CAAA;AACrB,EAAA,MAAM,OAAA,GAAUA,eAAAA,CAAW,IAAA,CAAK,OAAO,CAAA;AACvC,EAAA,MAAM,SAASG,uBAAAA,CAAmB;AAAA,IAChC,OAAOC,gBAAAA,CAAY;AAAA,MACjB,EAAA,EAAI,OAAA;AAAA,MACJ,IAAA,EAAM,cAAA;AAAA,MACN,gBAAgB,EAAE,QAAA,EAAU,IAAI,IAAA,EAAM,OAAA,EAAS,QAAQ,KAAA,EAAM;AAAA,MAC7D,OAAA,EAAS,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,CAAC,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,CAAA,EAAE;AAAE,KACpD,CAAA;AAAA,IACD,SAAA,EAAW,gBAAA,CAAiB,IAAA,CAAK,MAAA,CAAO,MAAM;AAAA,GAC/C,CAAA;AACD,EAAA,MAAM,SAAA,GAAYJ,eAAAA;AAAA,IAChB,MAAM,MAAA,CAAO,YAAA,CAAa,EAAE,SAAS,EAAA,EAAI,GAAA,EAAKkB,UAAAA,EAAW,YAAA,EAAc,WAAA,EAAa,IAAA,EAAM,CAAC,OAAO,GAAG;AAAA,GACvG;AACA,EAAA,OAAO,EAAE,OAAA,EAAS,SAAA,EAAW,IAAA,EAAM,cAAc,OAAA,EAAQ;AAC3D;AAEA,eAAsB,0CACpB,IAAA,EAK0E;AAC1E,EAAA,MAAM,EAAA,GAAK,IAAA,CAAK,YAAA,IAAgB,mBAAA,CAAoB,IAAA,CAAK,YAAY,CAAA,GACjElB,eAAAA,CAAW,IAAA,CAAK,YAAY,CAAA,GAC5B,SAAA,CAAU,KAAK,OAAO,CAAA;AAC1B,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA;AACzC,EAAA,MAAM,IAAA,GAAOA,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAC5C,EAAA,MAAM,EAAA,GAAK,MAAM,iBAAA,CAAkB;AAAA,IACjC,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,YAAA,EAAc,EAAA;AAAA,IACd,KAAA,EAAO,IAAA;AAAA,IACP,OAAA;AAAA,IACA,IAAI,IAAA,CAAK;AAAA,GACV,CAAA;AACD,EAAA,MAAM,OAAOgB,uBAAA,CAAmB;AAAA,IAC9B,GAAA,EAAK,UAAA;AAAA,IACL,YAAA,EAAc,cAAA;AAAA,IACd,IAAA,EAAM,CAAC,IAAA,EAAM,EAAA,EAAI,OAAO;AAAA,GACzB,CAAA;AACD,EAAA,MAAM,IAAA,GAAiB;AAAA,IACrB,EAAA,EAAI,EAAA;AAAA,IACJ,IAAA;AAAA,IACA,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,+BAAA;AAAA,IACb,cAAA,EAAgB,CAAC,EAAE,QAAA,OACjB,IAAA,CAAK,wBAAA,EAA0B,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI;AAAA,MAC/C,IAAA,EAAM,2BAAA;AAAA,MACN,OAAA,EAAS,QAAQ,QAAA,EAAS;AAAA,MAC1B,IAAA;AAAA,MACA;AAAA,OACC,QAAQ;AAAA,GACf;AACA,EAAA,OAAO,QAAA,CAAS,CAAC,IAAI,CAAA,EAAG,MAAM,CAAA,8BAAA,EAAiC,OAAO,CAAA,IAAA,EAAO,EAAE,CAAA,CAAA,CAAG,CAAA;AACpF;AAeO,SAAS,2BAA2B,IAAA,EAWb;AAC5B,EAAA,MAAM,UAAU,IAAA,EAAM,IAAA,IAAQ,CAAC,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AACzC,EAAA,MAAM,OAAA,GAAU,IAAA,EAAM,IAAA,IAAQ,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA;AACrD,EAAA,MAAM,IAAA,GAAyC;AAAA,IAC7C,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA;AAAA,IACd,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA;AAAA,IACd,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA;AAAA,IACd,OAAA,CAAQ,CAAC,CAAA,IAAK;AAAA,GAChB;AACA,EAAA,MAAM,IAAA,GAAyE;AAAA,IAC7E,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA;AAAA,IACd,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA;AAAA,IACd,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA;AAAA,IACd,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA;AAAA,IACd,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA;AAAA,IACd,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA;AAAA,IACd,OAAA,CAAQ,CAAC,CAAA,IAAK,CAAA;AAAA,IACd,OAAA,CAAQ,CAAC,CAAA,IAAK;AAAA,GAChB;AACA,EAAA,MAAM,QAAA,GAAA,CAAY,IAAA,EAAM,KAAA,IAAS,IAAA,EAAM,MAAK,IAAK,IAAA;AACjD,EAAA,MAAM,QAAS,QAAA,CAAS,UAAA,CAAW,IAAI,CAAA,GAAI,QAAA,GAAW,KAAK,QAAQ,CAAA,CAAA;AACnE,EAAA,OAAO;AAAA,IACL,MAAM,WAAA,IAAe,EAAA;AAAA,IACrB,MAAM,KAAA,IAAS,EAAA;AAAA,IACf,IAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAM,GAAA,IAAO,EAAA;AAAA,IACb,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,GAAA,IAAO,CAAC,CAAC,CAAA;AAAA,IAC7B,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,GAAA,IAAO,CAAC,CAAC,CAAA;AAAA,IAC7B,MAAM,OAAA,IAAW,EAAA;AAAA,IACjB,MAAM,GAAA,IAAO,EAAA;AAAA,IACb;AAAA,GACF;AACF;AAEA,eAAsB,6CACpB,IAAA,EAQ0E;AAC1E,EAAA,gBAAA,CAAiB,KAAK,OAAO,CAAA;AAC7B,EAAA,MAAM,MAAA,GAAShB,eAAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AACxC,EAAA,IAAI,MAAA,KAAWD,gBAAAA,EAAa,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAC7F,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA;AACzC,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAK;AAClC,EAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,MAAM,sCAAsC,CAAA;AACpE,EAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AAC9D,EAAA,MAAM,oBAAA,CAAqB;AAAA,IACzB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,SAAA,EAAW,MAAA;AAAA,IACX,OAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA,EAAOC,eAAAA,CAAW,IAAA,CAAK,eAAe;AAAA,GACvC,CAAA;AACD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,aAAA,IAAiB,0BAAA,CAA2B,KAAK,QAAQ,CAAA;AAC5E,EAAA,MAAM,OAAOgB,uBAAA,CAAmB;AAAA,IAC9B,GAAA,EAAK,SAAA;AAAA,IACL,YAAA,EAAc,aAAA;AAAA,IACd,IAAA,EAAM,CAAC,OAAA,EAAS,OAAA,EAAS,OAAO,OAAO;AAAA,GACxC,CAAA;AACD,EAAA,MAAM,IAAA,GAAiB;AAAA,IACrB,EAAA,EAAI,MAAA;AAAA,IACJ,IAAA;AAAA,IACA,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,6BAAA;AAAA,IACb,cAAA,EAAgB,CAAC,EAAE,QAAA,OACjB,IAAA,CAAK,sBAAA,EAAwB,IAAA,CAAK,OAAA,EAAS,MAAA,EAAQ;AAAA,MACjD,IAAA,EAAM,kCAAA;AAAA,MACN,SAAA,EAAW,sBAAA;AAAA,MACX,OAAA;AAAA,MACA,OAAA,EAAS,QAAQ,QAAA,EAAS;AAAA,MAC1B;AAAA,OACC,QAAQ;AAAA,GACf;AACA,EAAA,OAAO,QAAA,CAAS,CAAC,IAAI,CAAA,EAAG,MAAM,CAAA,4BAAA,EAA+B,OAAO,CAAA,QAAA,EAAW,OAAO,CAAA,EAAA,CAAI,CAAA;AAC5F;AAEA,eAAsB,+CACpB,IAAA,EAI0E;AAC1E,EAAA,gBAAA,CAAiB,KAAK,OAAO,CAAA;AAC7B,EAAA,MAAM,EAAA,GAAKhB,eAAAA,CAAW,IAAA,CAAK,cAAc,CAAA;AACzC,EAAA,IAAI,EAAA,KAAOD,gBAAAA,EAAa,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAC/F,EAAA,MAAM,OAAA,GAAU,YAAA,CAAa,IAAA,CAAK,OAAO,CAAA;AACzC,EAAA,MAAM,sBAAA,CAAuB;AAAA,IAC3B,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,cAAA,EAAgB,EAAA;AAAA,IAChB,KAAA,EAAOC,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAAA,IACtC;AAAA,GACD,CAAA;AACD,EAAA,MAAM,OAAOgB,uBAAA,CAAmB;AAAA,IAC9B,GAAA,EAAK,SAAA;AAAA,IACL,YAAA,EAAc,sBAAA;AAAA,IACd,IAAA,EAAM,CAAC,OAAA,EAAS,IAAI;AAAA,GACrB,CAAA;AACD,EAAA,MAAM,IAAA,GAAiB;AAAA,IACrB,EAAA,EAAI,EAAA;AAAA,IACJ,IAAA;AAAA,IACA,KAAA,EAAO,EAAA;AAAA,IACP,WAAA,EAAa,6BAAA;AAAA,IACb,cAAA,EAAgB,CAAC,EAAE,QAAA,OACjB,IAAA,CAAK,8BAAA,EAAgC,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI;AAAA,MACrD,IAAA,EAAM,qCAAA;AAAA,MACN,OAAA,EAAS,QAAQ,QAAA,EAAS;AAAA,MAC1B,MAAA,EAAQ;AAAA,OACP,QAAQ;AAAA,GACf;AACA,EAAA,OAAO,SAAS,CAAC,IAAI,GAAG,IAAA,EAAM,CAAA,uCAAA,EAA0C,OAAO,CAAA,CAAA,CAAG,CAAA;AACpF;AAGA,eAAsB,oDACpB,IAAA,EAa0E;AAC1E,EAAA,OAAO,4CAAA,CAA6C;AAAA,IAClD,GAAG,IAAA;AAAA,IACH,QAAA,EAAU;AAAA,MACR,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,KAAK,IAAA,CAAK;AAAA;AACZ,GACD,CAAA;AACH;AC3zBO,IAAM,wBAAA,GAA2B,QAAA;AA8BxC,SAAS,YAAY,MAAA,EAA+B;AAClD,EAAA,OAAO,OAAO,UAAA,CAAW,IAAI,IAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,GAAI,MAAA;AACrD;AAEA,SAAS,mBAAA,CAAoB,QAAyB,WAAA,EAA6B;AACjF,EAAA,OAAO,KAAK,SAAA,CAAU;AAAA,IACpB,IAAA,EAAM,SAAA;AAAA,IACN,GAAI,OAAO,MAAA,CAAO,IAAA,KAAS,QAAA,GAAW,EAAE,IAAA,EAAM,MAAA,CAAO,IAAA,EAAK,GAAI,EAAC;AAAA,IAC/D;AAAA,GACD,CAAA;AACH;AAEA,SAAS,sBAAsB,KAAA,EAAwB;AACrD,EAAA,OAAO,IAAA,CAAK,SAAA,CAAU,KAAA,EAAO,CAAC,CAAA,EAAG,CAAA,KAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,CAAE,QAAA,EAAS,GAAI,CAAE,CAAA;AACnF;AAEA,SAAS,iBAAA,CACP,SAAA,EACA,QAAA,EACA,MAAA,EACyB;AACzB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,CAAA;AAAA,IACT,MAAA;AAAA,IACA,QAAQ,SAAA,CAAU,MAAA;AAAA,IAClB,OAAO,SAAA,CAAU,KAAA;AAAA,IACjB,aAAa,SAAA,CAAU,WAAA;AAAA,IACvB,SAAS,SAAA,CAAU,OAAA;AAAA,IACnB;AAAA,GACF;AACF;AAEA,SAAS,gBAAgB,QAAA,EAA2C;AAClE,EAAA,OAAOG,gBAAA,CAAY,qBAAA,CAAsB,QAAQ,CAAC,CAAA;AACpD;AAMO,SAAS,qBAAqB,IAAA,EAAsD;AACzF,EAAA,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,EAClE;AAEA,EAAA,MAAM,SAAoC,EAAC;AAC3C,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,GAAA,CAAI,CAAC,GAAA,KAAQ;AAClC,IAAA,MAAM,SAASC,kBAAA,CAAc;AAAA,MAC3B,MAAA,EAAQ,IAAI,SAAA,CAAU,MAAA;AAAA,MACtB,KAAA,EAAO,IAAI,SAAA,CAAU,KAAA;AAAA,MACrB,WAAA,EAAa,IAAI,SAAA,CAAU,WAAA;AAAA,MAC3B,OAAA,EAAS,IAAI,SAAA,CAAU;AAAA,KACxB,CAAA;AACD,IAAA,MAAM,WAAW,iBAAA,CAAkB,GAAA,CAAI,SAAA,EAAW,GAAA,CAAI,UAAU,MAAM,CAAA;AACtE,IAAA,MAAA,CAAO,KAAK,QAAQ,CAAA;AACpB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,YAAY,MAAM,CAAA;AAAA,MAC3B,MAAA,EAAQ,gBAAgB,QAAQ,CAAA;AAAA,MAChC,oBAAoB,IAAA,CAAK,kBAAA;AAAA,MACzB,eAAe,mBAAA,CAAoB,GAAA,CAAI,UAAU,MAAA,EAAQ,GAAA,CAAI,UAAU,WAAW,CAAA;AAAA,MAClF,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,IAAI,SAAA,CAAU,WAAA;AAAA,QAC3B,YAAA,EAAc,IAAI,QAAA,CAAS,IAAA;AAAA,QAC3B,GAAI,GAAA,CAAI,KAAA,IAAS;AAAC,OACpB;AAAA,MACA,aAAa;AAAC,KAChB;AAAA,EACF,CAAC,CAAA;AAED,EAAA,OAAO,iBAAA,CAAkB;AAAA,IACvB,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,eAAe,IAAA,CAAK,aAAA;AAAA,IACpB,oBAAoB,IAAA,CAAK,kBAAA;AAAA,IACzB,oBAAoB,IAAA,CAAK,kBAAA;AAAA,IACzB,SAAA,EAAW;AAAA,MACT,eAAA,EAAiB,wBAAA;AAAA,MACjB;AAAA,KACF;AAAA,IACA,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB;AAAA,GACD,CAAA;AACH;;;ACjHA,IAAM,iBAAA,GAAoB,gCAAA;AAEnB,IAAM,yBAAA,GAA4B;AAAA,EACvC,UAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF;AAIO,IAAM,kBAAA,GAAqB;AAE3B,IAAM,8BAAA,GAAyE;AAAA,EACpF,KAAA,EAAO,OAAA;AAAA,EACP,YAAA,EAAc,cAAA;AAAA,EACd,QAAA,EAAU,UAAA;AAAA,EACV,QAAA,EAAU,UAAA;AAAA,EACV,QAAA,EAAU;AACZ;AAEA,IAAM,uCAAuB,IAAI,GAAA,CAAI,CAAC,OAAA,EAAS,mBAAA,EAAqB,aAAa,CAAC,CAAA;AAE3E,SAAS,oCAAoCC,UAAAA,EAAkD;AACpG,EAAA,OAAO,8BAAA,CAA+BA,UAAS,CAAA,IAAK,IAAA;AACtD;AAEO,SAAS,mBAAmB,OAAA,EAA2B;AAC5D,EAAA,OAAO,qBAAqB,GAAA,CAAI,MAAA,CAAO,WAAW,EAAE,CAAA,CAAE,aAAa,CAAA;AACrE;AAEO,SAAS,sBAAA,CACd,GAAA,EACA,OAAA,EACA,GAAA,EAC8D;AAC9D,EAAA,MAAM,YAAA,GAAe,OAAA,EAAS,IAAA,EAAK,IAAK,IAAA;AACxC,EAAA,MAAM,QAAA,GAAW,OAAO,IAAA,IAAQ,MAAA,CAAO,GAAG,CAAA,GAAI,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA,GAAI,IAAA;AAChE,EAAA,MAAM,QAAA,GAAW,mCAAA,CAAoC,GAAA,CAAI,SAAS,CAAA;AAClE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,YAAA,KAAiB,kBAAA,IAAsB,kBAAA,CAAmB,YAAA,IAAgB,MAAS,CAAA,EAAG;AACxF,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ;AAAA,KACF;AAAA,EACF,CAAA,MAAA,IAAW,QAAA,IAAY,YAAA,IAAgB,YAAA,KAAiB,QAAA,EAAU;AAChE,IAAA,KAAA,CAAM,IAAA,CAAK,oBAAoB,YAAY,CAAA,sBAAA,EAAyB,IAAI,SAAS,CAAA,WAAA,EAAc,QAAQ,CAAA,EAAA,CAAI,CAAA;AAAA,EAC7G;AACA,EAAA,MAAM,SAAA,GACJ,iBAAiB,kBAAA,IAAsB,kBAAA,CAAmB,gBAAgB,MAAS,CAAA,GAC/E,CAAA,+CAAA,EAA6C,QAAA,IAAY,uBAAuB,CAAA,EAAA,CAAA,GAChF,YAAY,YAAA,IAAgB,YAAA,KAAiB,QAAA,GAC3C,CAAA,eAAA,EAAkB,YAAY,CAAA,2BAAA,EAAyB,QAAQ,CAAA,EAAA,CAAA,GAC/D,YAAA,GACE,CAAA,eAAA,EAAkB,YAAY,CAAA,CAAA,GAC9B,IAAA;AACV,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,IAAI,CAAA;AACrC,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,MAAM,SAAA,GAAY,MAAM,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,UAAA,CAAW,QAAQ,CAAC,CAAA;AAC/D,IAAA,IAAI,aAAa,CAAA,EAAG,KAAA,CAAM,OAAO,SAAA,GAAY,CAAA,EAAG,GAAG,SAAS,CAAA;AAAA,SACvD,KAAA,CAAM,MAAA,CAAO,CAAA,EAAG,CAAA,EAAG,SAAS,CAAA;AAAA,EACnC;AACA,EAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,IAAA,IAAI,CAAC,KAAA,CAAM,QAAA,CAAS,QAAQ,CAAA,EAAG,KAAA,CAAM,KAAK,QAAQ,CAAA;AAClD,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EAC5C;AACA,EAAA,OAAO,EAAE,GAAG,GAAA,EAAK,QAAA,EAAU,KAAA,CAAM,KAAK,IAAI,CAAA,EAAG,KAAA,EAAO,CAAC,GAAG,GAAA,CAAI,KAAA,EAAO,GAAG,KAAK,CAAA,EAAG,cAAc,QAAA,EAAS;AACvG;AAEO,IAAM,yBAAA,GAA4B;AAElC,SAAS,qBAAqB,QAAA,EAA2B;AAC9D,EAAA,MAAM,GAAA,GACJ,QAAA,EAAU,IAAA,EAAK,KACd,OAAO,OAAA,KAAY,WAAA,GAAc,OAAA,CAAQ,GAAA,CAAI,SAAA,IAAa,OAAA,CAAQ,GAAA,CAAI,wBAAwB,EAAA,CAAA,IAC/F,iBAAA;AACF,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AAC/B;AAGO,SAAS,+BAAA,CAAgC,UAAkB,QAAA,EAA2B;AAC3F,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,QAAA,IAAY,EAAE,EAAE,IAAA,EAAK;AACxC,EAAA,IAAI,CAAC,GAAA,EAAK;AACR,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI;AACF,IAAA,GAAA,GAAM,IAAI,IAAI,GAAG,CAAA;AAAA,EACnB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,MAAM,qFAAqF,CAAA;AAAA,EACvG;AACA,EAAA,MAAM,WAAW,IAAI,GAAA,CAAI,GAAG,oBAAA,CAAqB,QAAQ,CAAC,CAAA,CAAA,CAAG,CAAA;AAC7D,EAAA,IAAI,GAAA,CAAI,IAAA,KAAS,QAAA,CAAS,IAAA,EAAM;AAC9B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAuB,QAAA,CAAS,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,EACzD;AACA,EAAA,IAAI,CAAC,oBAAA,CAAqB,IAAA,CAAK,GAAA,CAAI,QAAQ,CAAA,EAAG;AAC5C,IAAA,MAAM,IAAI,MAAM,qFAAqF,CAAA;AAAA,EACvG;AACA,EAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,EAAE,CAAA;AAC/B;AAEA,SAAS,UAAA,CAAW,MAAe,MAAA,EAAuB;AACxD,EAAA,MAAM,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,GAAY,OAAmC,EAAC;AAClF,EAAA,MAAM,EAAA,GAAK,EAAE,MAAA,IAAU,OAAO,EAAE,MAAA,KAAW,QAAA,GAAY,EAAE,MAAA,GAAqC,IAAA;AAC9F,EAAA,MAAM,GAAA,GAAO,EAAA,IAAM,OAAO,EAAA,CAAG,YAAY,QAAA,IAAY,EAAA,CAAG,OAAA,IACrD,OAAO,EAAE,OAAA,KAAY,QAAA,IAAY,CAAA,CAAE,OAAA,IACpC,cAAc,MAAM,CAAA,CAAA;AACtB,EAAA,OAAO,IAAI,MAAM,GAAG,CAAA;AACtB;AAEA,eAAe,UAAA,CAAW,IAAA,EAAc,IAAA,GAA6D,EAAC,EAAG;AACvG,EAAA,MAAM,MAAM,CAAA,EAAG,oBAAA,CAAqB,KAAK,QAAQ,CAAC,GAAG,IAAI,CAAA,CAAA;AACzD,EAAA,MAAM,OAAA,GAAkC;AAAA,IACtC,MAAA,EAAQ,kBAAA;AAAA,IACR,GAAI,IAAA,CAAK,IAAA,GAAO,EAAE,cAAA,EAAgB,kBAAA,KAAuB;AAAC,GAC5D;AACA,EAAA,IAAI,KAAK,MAAA,EAAQ;AACf,IAAA,OAAA,CAAQ,aAAA,GAAgB,CAAA,OAAA,EAAU,IAAA,CAAK,MAAM,CAAA,CAAA;AAAA,EAC/C;AACA,EAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK;AAAA,IAC3B,MAAA,EAAQ,KAAK,MAAA,IAAU,KAAA;AAAA,IACvB,OAAA;AAAA,IACA,MAAM,IAAA,CAAK,IAAA;AAAA,IACX,KAAA,EAAO;AAAA,GACR,CAAA;AACD,EAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AAC9C,EAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,IAAA,MAAM,UAAA,CAAW,IAAA,EAAM,GAAA,CAAI,MAAM,CAAA;AAAA,EACnC;AACA,EAAA,OAAO,IAAA;AACT;AAEA,eAAsB,yBAAyB,IAAA,EAAkE;AAC/G,EAAA,MAAM,EAAA,GAAK,IAAI,eAAA,EAAgB;AAC/B,EAAA,IAAI,IAAA,CAAK,KAAK,EAAA,CAAG,GAAA,CAAI,OAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AAC5C,EAAA,IAAI,IAAA,CAAK,OAAO,IAAA,EAAM,EAAA,CAAG,IAAI,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AACpD,EAAA,OAAO,UAAA,CAAW,gCAAgC,EAAE,CAAA,CAAA,EAAI,EAAE,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA;AACrF;AAEA,eAAsB,6BAA6B,IAAA,EAOhD;AACD,EAAA,MAAM,EAAA,GAAK,IAAI,eAAA,EAAgB;AAC/B,EAAA,IAAI,IAAA,CAAK,KAAK,EAAA,CAAG,GAAA,CAAI,OAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AAC5C,EAAA,IAAI,IAAA,CAAK,OAAO,IAAA,EAAM,EAAA,CAAG,IAAI,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AACpD,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM,EAAA,CAAG,IAAI,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC1D,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM,EAAA,CAAG,IAAI,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC1D,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM,EAAA,CAAG,IAAI,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC1D,EAAA,OAAO,UAAA,CAAW,+BAA+B,EAAE,CAAA,CAAA,EAAI,EAAE,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA;AACpF;AAEA,eAAsB,4BAA4B,IAAA,EAAkE;AAClH,EAAA,MAAM,EAAA,GAAK,IAAI,eAAA,EAAgB;AAC/B,EAAA,IAAI,IAAA,CAAK,KAAK,EAAA,CAAG,GAAA,CAAI,OAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AAC5C,EAAA,IAAI,IAAA,CAAK,OAAO,IAAA,EAAM,EAAA,CAAG,IAAI,KAAA,EAAO,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA;AACpD,EAAA,OAAO,UAAA,CAAW,uCAAuC,EAAE,CAAA,CAAA,EAAI,EAAE,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA;AAC5F;AAEA,eAAsB,2BAA2B,IAAA,EAAmD;AAClG,EAAA,OAAO,UAAA,CAAW,iCAAiC,kBAAA,CAAmB,MAAA,CAAO,KAAK,GAAG,CAAC,CAAC,CAAA,CAAA,EAAI;AAAA,IACzF,UAAU,IAAA,CAAK;AAAA,GAChB,CAAA;AACH;AAEA,SAAS,iBAAiB,KAAA,EAAgB;AACxC,EAAA,IAAI,KAAA,IAAS,SAAS,CAAC,MAAA,CAAO,SAAS,KAAK,CAAA,IAAK,SAAS,CAAA,CAAA,EAAI;AAC5D,IAAA,MAAM,IAAI,MAAM,iCAAiC,CAAA;AAAA,EACnD;AACF;AAEO,SAAS,mCAAmC,IAAA,EAIhD;AACD,EAAA,gBAAA,CAAiB,KAAK,KAAK,CAAA;AAC3B,EAAA,IAAI,CAAC,IAAA,CAAK,KAAA,EAAO,IAAA,EAAK,IAAK,IAAA,CAAK,KAAA,IAAS,IAAA,IAAQ,CAAC,IAAA,CAAK,KAAA,EAAO,IAAA,EAAK,EAAG;AACpE,IAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,EACvE;AACF;AAEO,SAAS,mCAAmC,IAAA,EAA0C;AAC3F,EAAA,gBAAA,CAAiB,KAAK,KAAK,CAAA;AAC3B,EAAA,IAAI,KAAK,KAAA,IAAS,IAAA,IAAQ,CAAC,IAAA,CAAK,KAAA,EAAO,MAAK,EAAG;AAC7C,IAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,EAC1D;AACF;AAGA,eAAsB,wBAAwB,IAAA,EAO3C;AACD,EAAA,kCAAA,CAAmC,IAAI,CAAA;AACvC,EAAA,MAAM,EAAA,GAAK,IAAI,eAAA,EAAgB;AAC/B,EAAA,IAAI,IAAA,CAAK,KAAA,EAAO,IAAA,EAAK,EAAG,EAAA,CAAG,IAAI,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA;AACzD,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM,EAAA,CAAG,IAAI,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC1D,EAAA,IAAI,IAAA,CAAK,KAAA,EAAO,IAAA,EAAK,EAAG,EAAA,CAAG,IAAI,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA;AACzD,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM,EAAA,CAAG,IAAI,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC1D,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM,EAAA,CAAG,IAAI,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC1D,EAAA,OAAO,UAAA,CAAW,+BAA+B,EAAE,CAAA,CAAA,EAAI,EAAE,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA;AACpF;AAGA,eAAsB,wBAAwB,IAAA,EAO3C;AACD,EAAA,kCAAA,CAAmC,IAAI,CAAA;AACvC,EAAA,MAAM,EAAA,GAAK,IAAI,eAAA,EAAgB;AAC/B,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM,EAAA,CAAG,IAAI,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC1D,EAAA,IAAI,IAAA,CAAK,KAAA,EAAO,IAAA,EAAK,EAAG,EAAA,CAAG,IAAI,OAAA,EAAS,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM,CAAA;AACzD,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM,EAAA,CAAG,IAAI,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC1D,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM,EAAA,CAAG,IAAI,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC1D,EAAA,OAAO,UAAA,CAAW,CAAA,4BAAA,EAA+B,EAAE,CAAA,CAAA,EAAI;AAAA,IACrD,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK;AAAA,GACd,CAAA;AACH;AAEO,SAAS,mCAAmC,IAAA,EAQhD;AACD,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAAA,EAC5D;AACA,EAAA,gBAAA,CAAiB,KAAK,KAAK,CAAA;AAC3B,EAAA,MAAM,OAAA,GAAU,KAAK,GAAA,IAAO,IAAA,IAAQ,OAAO,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,EAAK,KAAM,EAAA;AAChE,EAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,IAAA,CAAK,GAAA,EAAK,MAAK,IAAM,IAAA,CAAK,GAAA,IAAO,IAAA,IAAQ,OAAO,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,OAAW,EAAG,CAAA;AAClG,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,IAAA,CAAK,QAAA,EAAU,MAAM,CAAA;AAC7C,EAAA,IAAI,MAAA,CAAO,OAAO,CAAA,GAAI,MAAA,CAAO,SAAS,CAAA,GAAI,MAAA,CAAO,OAAO,CAAA,KAAM,CAAA,EAAG;AAC/D,IAAA,MAAM,IAAI,MAAM,kDAAkD,CAAA;AAAA,EACpE;AACF;AAGA,eAAsB,wBAAwB,IAAA,EAS3C;AACD,EAAA,kCAAA,CAAmC,IAAI,CAAA;AACvC,EAAA,OAAO,WAAW,6BAAA,EAA+B;AAAA,IAC/C,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,MACnB,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,OAAO,IAAA,CAAK;AAAA,KACb;AAAA,GACF,CAAA;AACH;AAEA,eAAsB,6BAA6B,IAAA,EAKhD;AACD,EAAA,MAAM,KAAK,IAAI,eAAA,CAAgB,EAAE,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA;AAC1D,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM,EAAA,CAAG,IAAI,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC1D,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM,EAAA,CAAG,IAAI,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC1D,EAAA,OAAO,UAAA,CAAW,mCAAmC,EAAE,CAAA,CAAA,EAAI,EAAE,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA;AACxF;AAEA,eAAsB,uBAAuB,IAAA,EAO1C;AACD,EAAA,OAAO,WAAW,4BAAA,EAA8B;AAAA,IAC9C,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,MACnB,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,OAAO,IAAA,CAAK;AAAA,KACb;AAAA,GACF,CAAA;AACH;AAEA,eAAsB,uBAAuB,IAAA,EAK1C;AACD,EAAA,OAAO,WAAW,4BAAA,EAA8B;AAAA,IAC9C,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,GAAA,EAAK,KAAK,GAAA,EAAK,KAAA,EAAO,IAAA,CAAK,KAAA,EAAO;AAAA,GAC1D,CAAA;AACH;AAEA,eAAsB,6BAA6B,IAAA,EAOhD;AACD,EAAA,IAAI,kBAAA,CAAmB,IAAA,CAAK,OAAO,CAAA,EAAG;AACpC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,WAAW,4BAAA,EAA8B;AAAA,IAC9C,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,MACnB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,SAAS,IAAA,CAAK;AAAA,KACf;AAAA,GACF,CAAA;AACH;AAGA,eAAsB,4BAA4B,IAAA,EAK/C;AACD,EAAA,OAAO,WAAW,4BAAA,EAA8B;AAAA,IAC9C,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,MACnB,OAAA,EAAS,kBAAA;AAAA,MACT,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,SAAS,IAAA,CAAK;AAAA,KACf;AAAA,GACF,CAAA;AACH;AAEA,eAAsB,mBAAA,CAAoB,IAAA,GAA+C,EAAC,EAAG;AAC3F,EAAA,OAAO,UAAA,CAAW,2BAA2B,EAAE,QAAA,EAAU,KAAK,QAAA,EAAU,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA;AAC/F;AAEO,SAAS,qCAAqC,IAAA,EAMlD;AACD,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACA,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAC5B,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,GAAA,EAAK,MAAK,IAAM,IAAA,CAAK,GAAA,IAAO,IAAA,IAAQ,OAAO,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,OAAW,EAAG,CAAA;AAC5F,EAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,IAAK,IAAA,CAAK,KAAK,MAAA,GAAS,CAAA;AAC5D,EAAA,IAAI,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA,GAAI,MAAA,CAAO,IAAI,CAAA,KAAM,CAAA,EAAG;AAClD,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACF;AAEA,eAAsB,wBAAwB,IAAA,EAM3C;AACD,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,EAClE;AACA,EAAA,MAAM,EAAA,GAAK,IAAI,eAAA,EAAgB;AAC/B,EAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG,EAAA,CAAG,IAAI,QAAA,EAAU,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,CAAA;AAC5D,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM,EAAA,CAAG,IAAI,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC1D,EAAA,IAAI,IAAA,CAAK,SAAS,IAAA,EAAM,EAAA,CAAG,IAAI,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,KAAK,CAAC,CAAA;AAC1D,EAAA,MAAM,SAAS,EAAA,CAAG,QAAA,EAAS,GAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,GAAK,EAAA;AAC1C,EAAA,OAAO,UAAA,CAAW,CAAA,2BAAA,EAA8B,MAAM,CAAA,CAAA,EAAI;AAAA,IACxD,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK;AAAA,GACd,CAAA;AACH;AAEA,eAAsB,0BAA0B,IAAA,EAO7C;AACD,EAAA,oCAAA,CAAqC,IAAI,CAAA;AACzC,EAAA,OAAO,WAAW,2BAAA,EAA6B;AAAA,IAC7C,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,MACnB,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,KAAK,IAAA,CAAK;AAAA,KACX;AAAA,GACF,CAAA;AACH;AAEA,eAAsB,4BAA4B,IAAA,EAK/C;AACD,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,iDAAiD,CAAA;AAAA,EACnE;AACA,EAAA,IAAI,CAAC,IAAA,CAAK,GAAA,EAAK,IAAA,OAAW,IAAA,CAAK,GAAA,IAAO,IAAA,IAAQ,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,CAAE,IAAA,OAAW,EAAA,CAAA,EAAK;AAC7E,IAAA,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAAA,EACtC;AACA,EAAA,OAAO,WAAW,6BAAA,EAA+B;AAAA,IAC/C,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,GAAA,EAAK,KAAK,GAAA,EAAK,GAAA,EAAK,IAAA,CAAK,GAAA,EAAK;AAAA,GACtD,CAAA;AACH;AAEA,eAAsB,yBAAA,CAA0B,IAAA,GAA8B,EAAC,EAAG;AAChF,EAAA,OAAO,WAAW,+BAAA,EAAiC,EAAE,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA;AAChF;AAEA,eAAsB,uBAAuB,IAAA,EAU1C;AACD,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,WAAW,8BAAA,EAAgC;AAAA,IAChD,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,MACnB,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,SAAS,IAAA,CAAK;AAAA,KACf;AAAA,GACF,CAAA;AACH;AAEA,eAAsB,uBAAuB,IAAA,EAK1C;AACD,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACA,EAAA,OAAO,WAAW,8BAAA,EAAgC;AAAA,IAChD,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,GAAA,EAAK,KAAK,GAAA,EAAK,GAAA,EAAK,IAAA,CAAK,GAAA,EAAK;AAAA,GACtD,CAAA;AACH;AAEA,eAAsB,oBAAoB,IAAA,EAMvC;AACD,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAAA,EAC7D;AACA,EAAA,OAAO,WAAW,2BAAA,EAA6B;AAAA,IAC7C,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,GAAA,EAAK,IAAA,CAAK,GAAA,EAAK,GAAA,EAAK,IAAA,CAAK,GAAA,EAAK,MAAA,EAAQ,IAAA,CAAK,QAAQ;AAAA,GAC3E,CAAA;AACH;AAEA,eAAsB,0BAAA,CAA2B,IAAA,GAA+C,EAAC,EAAG;AAClG,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,UAAA,CAAW,gCAAgC,EAAE,QAAA,EAAU,KAAK,QAAA,EAAU,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,CAAA;AACpG;AAEA,eAAsB,2BAA2B,IAAA,EAK9C;AACD,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,WAAW,8BAAA,EAAgC;AAAA,IAChD,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,QAAA,EAAU,KAAK,QAAA,EAAU,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS;AAAA,GACxE,CAAA;AACH;AAEA,eAAsB,2BAA2B,IAAA,EAO9C;AACD,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,EACzD;AACA,EAAA,OAAO,WAAW,mCAAA,EAAqC;AAAA,IACrD,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,IAAA,EAAM,KAAK,SAAA,CAAU;AAAA,MACnB,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,KAAK,IAAA,CAAK,GAAA;AAAA,MACV,SAAS,IAAA,CAAK;AAAA,KACf;AAAA,GACF,CAAA;AACH;AAEA,eAAsB,2BAA2B,IAAA,EAK9C;AACD,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,EAC/D;AACA,EAAA,OAAO,WAAW,sCAAA,EAAwC;AAAA,IACxD,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE,GAAA,EAAK,KAAK,GAAA,EAAK,SAAA,EAAW,IAAA,CAAK,SAAA,EAAW;AAAA,GAClE,CAAA;AACH;AAEA,eAAsB,wBAAA,CAAyB,IAAA,GAA+C,EAAC,EAAG;AAChG,EAAA,IAAI,CAAC,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAK,EAAG;AACxB,IAAA,MAAM,IAAI,MAAM,gCAAgC,CAAA;AAAA,EAClD;AACA,EAAA,OAAO,WAAW,8BAAA,EAAgC;AAAA,IAChD,MAAA,EAAQ,MAAA;AAAA,IACR,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,EAAE;AAAA,GACxB,CAAA;AACH;AASA,eAAsB,gCAAgC,IAAA,EAGrB;AAC/B,EAAA,MAAM,OAAA,GAAUrB,eAAAA,CAAW,IAAA,CAAK,OAAO,CAAA;AACvC,EAAA,MAAM,GAAA,GAAM,GAAG,oBAAA,CAAqB,IAAA,CAAK,QAAQ,CAAC,CAAA,uCAAA,EAA0C,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AACvH,EAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK,EAAE,OAAA,EAAS,EAAE,MAAA,EAAQ,kBAAA,EAAmB,EAAG,KAAA,EAAO,UAAA,EAAY,CAAA;AAC3F,EAAA,MAAM,IAAA,GAAQ,MAAM,GAAA,CAAI,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AAC/C,EAAA,MAAM,EAAA,GAAK,KAAK,MAAA,IAAU,OAAO,KAAK,MAAA,KAAW,QAAA,GAAY,KAAK,MAAA,GAAqC,IAAA;AACvG,EAAA,MAAM,MAAA,GACH,OAAO,IAAA,CAAK,MAAA,KAAW,QAAA,IAAY,IAAA,CAAK,MAAA,IACxC,EAAA,IAAM,OAAO,EAAA,CAAG,OAAA,KAAY,QAAA,IAAY,GAAG,OAAA,IAC5C,MAAA;AACF,EAAA,MAAM,KAAK,GAAA,CAAI,EAAA,IAAM,QAAQ,IAAA,CAAK,EAAA,IAAM,KAAK,QAAQ,CAAA;AACrD,EAAA,OAAO;AAAA,IACL,EAAA;AAAA,IACA,QAAA,EAAU,EAAA;AAAA,IACV,SAAS,OAAO,IAAA,CAAK,OAAA,KAAY,QAAA,GAAW,KAAK,OAAA,GAAU,OAAA;AAAA,IAC3D,MAAA,EAAQ,EAAA,GAAK,MAAA,GAAY,MAAA,IAAU;AAAA,GACrC;AACF;AAEA,eAAsB,6BAA6B,IAAA,EAKhD;AACD,EAAA,MAAM,EAAA,GAAK,IAAI,eAAA,CAAgB;AAAA,IAC7B,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,OAAA,EAAS,KAAK,OAAA,IAAW,EAAA;AAAA,IACzB,QAAA,EAAU,KAAK,QAAA,IAAY;AAAA,GAC5B,CAAA;AACD,EAAA,OAAO,UAAA,CAAW,+BAA+B,EAAE,CAAA,CAAA,EAAI,EAAE,QAAA,EAAU,IAAA,CAAK,UAAU,CAAA;AACpF;AAEA,eAAsB,6CAA6C,IAAA,EAShE;AACD,EAAA,MAAM,KAAA,GAAQA,eAAAA,CAAW,IAAA,CAAK,eAAe,CAAA;AAC7C,EAAA,MAAM,IAAA,GAAO,MAAM,+BAAA,CAAgC,EAAE,SAAS,KAAA,EAAO,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,CAAA;AAC9F,EAAA,IAAI,CAAC,KAAK,EAAA,EAAI;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,EAAG,IAAA,CAAK,MAAA,IAAU,2CAA2C,CAAA,oCAAA;AAAA,KAC/D;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAS,MAAM,4BAAA,CAA6B;AAAA,IAChD,OAAA,EAAS,KAAA;AAAA,IACT,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,UAAU,IAAA,CAAK,QAAA;AAAA,IACf,UAAU,IAAA,CAAK;AAAA,GAChB,CAAA;AAOD,EAAA,MAAM,KAAA,GAAQ,EAAE,GAAG,KAAA,CAAM,KAAA,EAAM;AAC/B,EAAA,OAAO,KAAA,CAAM,YAAA;AACb,EAAA,OAAO,oBAAA,CAAqB;AAAA,IAC1B,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,aAAa,IAAA,CAAK,WAAA;AAAA,IAClB,kBAAA,EAAoB,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AAAA,IACvC,kBAAA,EAAoB,KAAA;AAAA,IACpB,IAAA,EAAM;AAAA,MACJ;AAAA,QACE,SAAA,EAAW;AAAA,UACT,QAAQ,KAAA,CAAM,MAAA;AAAA,UACd,KAAA;AAAA,UACA,aAAa,KAAA,CAAM,WAAA;AAAA,UACnB,SAAS,KAAA,CAAM;AAAA,SACjB;AAAA,QACA,QAAA,EAAU;AAAA,UACR,IAAA,EAAM,yBAAA;AAAA,UACN,KAAA,EAAO,oBAAA,CAAqB,IAAA,CAAK,QAAQ,CAAA;AAAA,UACzC,OAAA,EAAS,IAAA,CAAK,OAAA,IAAW,KAAA,CAAM,OAAA,IAAW;AAAA;AAC5C;AACF,KACF;AAAA,IACA,YAAY,IAAA,CAAK;AAAA,GAClB,CAAA;AACH;;;AC/qBO,IAAM,8BAAA,GAAiC;AACvC,IAAM,2BAAA,GAA8B;AACpC,IAAM,8BAAA,GAAiC;AACvC,IAAM,6BAAA,GAAgC;AAEtC,IAAM,2BAAA,uBAAkC,GAAA,CAAI;AAAA,EACjD,uBAAA;AAAA,EACA,yBAAA;AAAA,EACA,uBAAA;AAAA,EACA;AACF,CAAC;AAED,IAAM,mBAAmBE,aAAAA,CAAS;AAAA,EAChC,gHAAA;AAAA,EACA,wEAAA;AAAA,EACA,wHAAA;AAAA,EACA,8CAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,IAAM,kBAAkBA,aAAAA,CAAS;AAAA,EAC/B,+HAAA;AAAA,EACA,yDAAA;AAAA,EACA,8EAAA;AAAA,EACA,qDAAA;AAAA,EACA,iDAAA;AAAA,EACA,wCAAA;AAAA,EACA,wHAAA;AAAA,EACA,4EAAA;AAAA,EACA;AACF,CAAC,CAAA;AAcD,SAAS,kBAAkB,KAAA,EAAyB;AAClD,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,KAAA,MAAW,MAAM,KAAA,EAAO;AACtB,IAAA,IAAI,EAAA,KAAO,KAAK,KAAA,IAAS,CAAA;AACzB,IAAA,IAAI,EAAA,KAAO,KAAK,KAAA,IAAS,CAAA;AACzB,IAAA,IAAI,EAAA,KAAO,GAAA,IAAO,KAAA,KAAU,CAAA,EAAG;AAC7B,MAAA,IAAI,IAAI,IAAA,EAAK,MAAO,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AACnC,MAAA,GAAA,GAAM,EAAA;AACN,MAAA;AAAA,IACF;AACA,IAAA,GAAA,IAAO,EAAA;AAAA,EACT;AACA,EAAA,IAAI,IAAI,IAAA,EAAK,MAAO,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA;AACnC,EAAA,OAAO,GAAA;AACT;AAEA,SAAS,qBAAqB,SAAA,EAAuC;AACnE,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,OAAA,CAAQ,GAAG,CAAA;AACnC,EAAA,IAAI,KAAA,KAAU,EAAA,EAAI,OAAO,EAAC;AAC1B,EAAA,IAAI,KAAA,GAAQ,CAAA;AACZ,EAAA,IAAI,GAAA,GAAM,EAAA;AACV,EAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,GAAI,SAAA,CAAU,QAAQ,CAAA,EAAA,EAAK;AAC7C,IAAA,MAAM,EAAA,GAAK,UAAU,CAAC,CAAA;AACtB,IAAA,IAAI,EAAA,KAAO,KAAK,KAAA,IAAS,CAAA;AACzB,IAAA,IAAI,OAAO,GAAA,EAAK;AACd,MAAA,KAAA,IAAS,CAAA;AACT,MAAA,IAAI,UAAU,CAAA,EAAG;AACf,QAAA,GAAA,GAAM,CAAA;AACN,QAAA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,GAAA,KAAQ,EAAA,EAAI,OAAO,EAAC;AACxB,EAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,KAAA,GAAQ,GAAG,GAAG,CAAA;AAC5C,EAAA,IAAI,CAAC,KAAA,CAAM,IAAA,EAAK,SAAU,EAAC;AAC3B,EAAA,OAAO,iBAAA,CAAkB,KAAK,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,IAAA,EAAM,CAAA,EAAE,CAAE,CAAA;AAC1D;AAEA,SAAS,cAAA,CAAe,MAAc,KAAA,EAAsD;AAC1F,EAAA,MAAM,OAAA,GAAA,CAAW,KAAA,IAAS,EAAA,EAAI,IAAA,EAAK;AACnC,EAAA,IAAI,KAAK,UAAA,CAAW,GAAG,KAAK,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AAC9C,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,IAAI,CAAA;AACzC,IAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,MAAM,GAAG,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAC9E,IAAA,MAAM,QAAQ,iBAAA,CAAkB,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AACjD,IAAA,OAAO,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,KAAM;AAC5B,MAAA,MAAM,KAAA,GAAQ,OAAO,CAAC,CAAA;AACtB,MAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,cAAA,CAAe,MAAM,KAAK,CAAA;AAChE,MAAA,OAAO,eAAe,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,KAAA,IAAS,EAAE,CAAC,CAAA;AAAA,IACzD,CAAC,CAAA;AAAA,EACH;AACA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,iBAAiB,CAAA;AAC1C,EAAA,IAAI,KAAA,IAAS,CAAC,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AACjC,IAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,GAAK,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,GAAgB,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA;AAC7F,IAAA,IAAI,CAAC,MAAM,OAAA,CAAQ,MAAM,GAAG,MAAM,IAAI,MAAM,wCAAwC,CAAA;AACpF,IAAA,OAAQ,MAAA,CAAqB,GAAA,CAAI,CAAC,CAAA,KAAM,cAAA,CAAe,KAAA,CAAM,CAAC,CAAA,EAAI,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AAAA,EAC9E;AACA,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,EAAG;AACvB,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,UAAA,CAAW,GAAG,CAAA,GAC7B,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA,CAAgB,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAC,CAAA,GACvD,OAAA,GACE,OAAA,CAAQ,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAA,EAAM,CAAA,GACtC,EAAC;AACP,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AACjC,IAAA,OAAO,IAAI,GAAA,CAAI,CAAC,MAAM,cAAA,CAAe,QAAA,EAAU,CAAC,CAAC,CAAA;AAAA,EACnD;AACA,EAAA,IAAI,IAAA,KAAS,WAAW,OAAO,OAAA;AAC/B,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAM,CAAA,IAAK,IAAA,CAAK,UAAA,CAAW,KAAK,CAAA,EAAG,OAAO,MAAA,CAAO,OAAA,IAAW,GAAG,CAAA;AACnF,EAAA,IAAI,IAAA,KAAS,MAAA,EAAQ,OAAO,OAAA,KAAY,UAAU,OAAA,KAAY,GAAA;AAC9D,EAAA,OAAO,OAAA;AACT;AAEO,SAAS,uBAAA,CAAwB,SAAA,EAAmB,MAAA,GAA4C,EAAC,EAAkB;AACxH,EAAA,MAAM,GAAA,GAAM,UAAU,IAAA,EAAK;AAC3B,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,IAAI,OAAA,CAAQ,GAAG,CAAA,KAAM,EAAA,GAAK,GAAA,CAAI,MAAA,GAAS,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAC,CAAA;AACjF,EAAA,MAAM,KAAA,GAAQ,qBAAqB,GAAG,CAAA;AACtC,EAAA,IAAI,MAAM,MAAA,KAAW,MAAA,CAAO,QAAQ,MAAM,IAAI,MAAM,iDAAiD,CAAA;AACrG,EAAA,MAAM,IAAA,GAAO,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,KAAM,cAAA,CAAe,KAAA,CAAM,CAAC,CAAA,CAAG,IAAA,EAAM,GAAA,CAAI,KAAK,CAAC,CAAA;AAC7E,EAAA,OAAOc,uBAAAA,CAAmB;AAAA,IACxB,GAAA,EAAK;AAAA,MACH;AAAA,QACE,IAAA,EAAM,UAAA;AAAA,QACN,IAAA;AAAA,QACA,MAAA,EAAQ,KAAA,CAAM,GAAA,CAAI,CAAC,GAAG,CAAA,MAAO,EAAE,IAAA,EAAM,CAAA,GAAA,EAAM,CAAC,CAAA,CAAA,EAAI,IAAA,EAAM,CAAA,CAAE,MAAK,CAAE,CAAA;AAAA,QAC/D,SAAS,EAAC;AAAA,QACV,eAAA,EAAiB;AAAA;AACnB,KACF;AAAA,IACA,YAAA,EAAc,IAAA;AAAA,IACd;AAAA,GACD,CAAA;AACH;AAEO,SAAS,wBAAwB,WAAA,EAAoC;AAC1E,EAAA,OAAOF,cAAAA,CAAUQ,kBAAa,CAAC,QAAQ,GAAG,CAAC,WAAW,CAAC,CAAC,CAAA;AAC1D;AAEO,SAAS,mBAAA,CAAoB,QAAA,EAAkB,QAAA,EAAkB,kBAAA,EAA6C;AACnH,EAAA,IAAI,kBAAA,CAAmB,WAAW,QAAA,EAAU;AAC1C,IAAA,MAAM,IAAI,MAAM,oEAAoE,CAAA;AAAA,EACtF;AACA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZC,WAAA,CAAOC,UAAA,CAAM,QAAQ,CAAA,EAAG,EAAE,MAAM,EAAA,EAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AAAA,IAC7CD,WAAA,CAAOC,UAAA,CAAM,QAAQ,CAAA,EAAG,EAAE,MAAM,EAAA,EAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAA;AAAA,IAC7C,GAAG,kBAAA,CAAmB,GAAA,CAAI,CAAC,CAAA,KAAMD,YAAOC,UAAA,CAAM,CAAC,CAAA,EAAG,EAAE,MAAM,EAAA,EAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC;AAAA,GAC1E;AACA,EAAA,OAAQ,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AAC7B;AAGO,SAAS,sBAAsB,OAAA,EAAyD;AAC7F,EAAA,IAAI,QAAQ,MAAA,GAAS,CAAA,EAAG,MAAM,IAAI,MAAM,4DAA4D,CAAA;AACpG,EAAA,OAAQ,CAAA,EAAA,EAAK,QAAQ,GAAA,CAAI,CAAC,MAAMD,WAAA,CAAOC,UAAA,CAAM,MAAA,CAAO,CAAC,CAAC,CAAA,EAAG,EAAE,IAAA,EAAM,EAAA,EAAI,CAAA,CAAE,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AAC3F;AAEA,SAAS,WAAW,UAAA,EAAkF;AACpG,EAAA,OAAO,EAAE,QAAQxB,eAAAA,CAAW,UAAU,GAAG,KAAA,EAAO,EAAA,EAAI,UAAU,IAAA,EAAK;AACrE;AAEA,SAAS,iBAAiB,CAAA,EAAgF;AACxG,EAAA,MAAM,MAAA,GAASA,eAAAA,CAAW,CAAA,CAAE,MAAM,CAAA;AAClC,EAAA,IAAI,MAAA,KAAWD,gBAAAA,EAAa,MAAM,IAAI,MAAM,yEAAyE,CAAA;AACrH,EAAA,MAAM,QAAQ,MAAA,CAAO,MAAA,CAAO,CAAA,CAAE,KAAA,IAAS,GAAG,CAAC,CAAA;AAC3C,EAAA,MAAM,QAAA,GAAW,wBAAwB,CAAA,CAAE,SAAA,IAAa,IAAI,CAAA,CAAE,MAAA,IAAU,EAAE,CAAA;AAC1E,EAAA,OAAO,EAAE,MAAA,EAAQ,KAAA,EAAO,QAAA,EAAS;AACnC;AAEO,SAAS,sBAAA,CACd,OAAA,EACA,WAAA,EACA,UAAA,EAMA;AACA,EAAA,MAAM,OAAA,GACJ,OAAA,CAAQ,MAAA,KAAW,CAAA,GAAI,CAAC,UAAA,CAAWC,eAAAA,CAAW,UAAU,CAAC,CAAC,CAAA,GAAI,OAAA,CAAQ,IAAI,gBAAgB,CAAA;AAC5F,EAAA,IAAI,OAAA,CAAQ,CAAC,CAAA,CAAG,MAAA,KAAWD,gBAAAA,EAAa;AACtC,IAAA,MAAM,IAAI,MAAM,kEAAkE,CAAA;AAAA,EACpF;AACA,EAAA,OAAO;AAAA,IACL,SAAS,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,MAAM,CAAA;AAAA,IACpC,QAAQ,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA;AAAA,IAClC,WAAW,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AAAA,IACxC;AAAA,GACF;AACF;AAEO,SAAS,sBAAA,CACd,OAAA,EACA,QAAA,EACA,WAAA,EACA,UAAA,EAMA;AACA,EAAA,IAAI,QAAQ,MAAA,GAAS,CAAA,EAAG,MAAM,IAAI,MAAM,0CAA0C,CAAA;AAClF,EAAA,IAAI,QAAA,GAAW,KAAK,QAAA,IAAY,OAAA,CAAQ,QAAQ,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAC7G,EAAA,MAAM,QAAA,GAAWC,gBAAW,UAAU,CAAA;AACtC,EAAA,MAAM,OAAA,GAAqB,CAACD,gBAAW,CAAA;AACvC,EAAA,MAAM,MAAA,GAAmB,CAAC,EAAE,CAAA;AAC5B,EAAA,MAAM,YAA6B,EAAC;AACpC,EAAA,MAAM,qBAA+B,EAAC;AACtC,EAAA,IAAI,SAAA,GAAY,CAAA;AAChB,EAAA,KAAA,MAAW,OAAO,OAAA,EAAS;AACzB,IAAA,kBAAA,CAAmB,KAAK,SAAS,CAAA;AACjC,IAAA,MAAM,WAAA,GAAc,GAAA,CAAI,OAAA,IAAW,EAAC;AACpC,IAAA,MAAM,OAAA,GAAU,WAAA,CAAY,MAAA,KAAW,CAAA,GAAI,CAAC,UAAA,CAAW,QAAQ,CAAC,CAAA,GAAI,WAAA,CAAY,GAAA,CAAI,gBAAgB,CAAA;AACpG,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,MAAM,CAAA;AACrB,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,KAAK,CAAA;AACnB,MAAA,SAAA,CAAU,IAAA,CAAK,EAAE,QAAQ,CAAA;AACzB,MAAA,SAAA,IAAa,CAAA;AAAA,IACf;AAAA,EACF;AACA,EAAA,SAAA,CAAU,QAAQ,mBAAA,CAAoB,OAAA,CAAQ,MAAA,EAAQ,QAAA,EAAU,kBAAkB,CAAC,CAAA;AACnF,EAAA,OAAO,EAAE,OAAA,EAAS,MAAA,EAAQ,SAAA,EAAW,WAAA,EAAY;AACnD;AAEA,SAAS,gBAAgB,OAAA,EAAuB;AAC9C,EAAA,IAAI,CAAC,uBAAA,CAAwB,OAAO,CAAA,EAAG;AACrC,IAAA,MAAM,IAAI,MAAM,wCAAwC,CAAA;AAAA,EAC1D;AACF;AAEA,SAAS,eAAA,CAAgB,SAAiB,QAAA,EAA4B;AACpE,EAAA,eAAA,CAAgB,OAAO,CAAA;AACvB,EAAA,IAAI,YAAY,mBAAA,CAAoB,QAAQ,CAAA,EAAG,OAAOC,gBAAW,QAAQ,CAAA;AACzE,EAAA,MAAM,GAAA,GAAM,0BAA0B,OAAO,CAAA;AAC7C,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,wDAAwD,CAAA;AAClF,EAAA,OAAO,GAAA;AACT;AAEA,SAASyB,KAAAA,CACP,OAAA,EACA,OAAA,EACA,EAAA,EACA,OACA,QAAA,EACyB;AACzB,EAAA,OAAO;AAAA,IACL,kBAAA,EAAoB,EAAA;AAAA,IACpB,aAAA,EAAe,KAAK,SAAA,CAAU,EAAE,MAAM,cAAA,EAAgB,GAAG,KAAA,EAAO,OAAA,EAAS,CAAA;AAAA,IACzE,GAAA,EAAK,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,EAAS,CAAA,EAAG,OAAA,EAAS,MAAA,CAAO,OAAO,CAAA,EAAG,UAAA,EAAY,yBAAA,EAA0B;AAAA,IAClG,YAAA,EAAc,EAAE,GAAG,KAAA,EAAO,GAAA,EAAK,EAAE,YAAA,EAAc,QAAA,CAAS,QAAA,EAAS,EAAE;AAAE,GACvE;AACF;AAEA,eAAe,WAAA,CACb,MACA,EAAA,EACA,IAAA,EACA,aACA,OAAA,EACA,KAAA,EACA,aAAA,EACA,KAAA,GAAQ,EAAA,EACkE;AAC1E,EAAA,MAAM,IAAA,GAAkB,EAAE,EAAA,EAAI,IAAA,EAAM,OAAO,WAAA,EAAY;AACvD,EAAA,MAAM,aAAA,GAAgB,KAAK,UAAA,CAAW,IAAI,IAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AAC9D,EAAA,OAAO,sBAAA,CAAuB;AAAA,IAC5B,OAAA,EAAS;AAAA,MACP,aAAA,EAAe,KAAA;AAAA,MACf,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,MAAA,EAAQ,IAAA,CAAK,MAAA,CAAO,IAAA,EAAK;AAAA,MACzB,iBAAiB,IAAA,CAAK,eAAA;AAAA,MACtB,aAAa,IAAA,CAAK,WAAA;AAAA,MAClB,cAAc,IAAA,CAAK,YAAA;AAAA,MACnB,uBAAuB,IAAA,CAAK;AAAA,KAC9B;AAAA,IACA,KAAA,EAAO,CAAC,IAAI,CAAA;AAAA,IACZ,aAAA;AAAA,IACA,eAAA,EAAiB,aAAA;AAAA,IACjB,kBAAA,EAAoB,EAAA;AAAA,IACpB,cAAA,EAAgB,CAAC,EAAE,QAAA,EAAS,KAAMA,KAAAA,CAAK,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,EAAA,EAAI,KAAA,EAAO,QAAQ;AAAA,GAClF,CAAA;AACH;AAEA,eAAe,yBACb,IAAA,EAC+C;AAC/C,EAAA,MAAM,KAAA,GAAQ,MAAM,4BAAA,CAA6B;AAAA,IAC/C,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,SAAS,IAAA,CAAK,eAAA;AAAA,IACd,UAAU,IAAA,CAAK;AAAA,GAChB,CAAA;AACD,EAAA,IAAI,OAAO,KAAA,CAAM,KAAK,IAAI,MAAA,CAAO,KAAA,CAAM,SAAS,CAAA,EAAG;AACjD,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,sBAAA,EAAyB,KAAA,CAAM,KAAK,CAAA,2CAAA,EAA8C,MAAM,SAAS,CAAA,+GAAA;AAAA,KAEnG;AAAA,EACF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,eAAsB,8CACpB,IAAA,EAQmI;AACnI,EAAA,MAAM,QAAA,GAAW,+BAAA,CAAgC,IAAA,CAAK,QAAA,EAAU,KAAK,QAAQ,CAAA;AAC7E,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,IAAA,CAAK,OAAA,EAAS,KAAK,QAAQ,CAAA;AACvD,EAAA,MAAM,yBAAyB,IAAI,CAAA;AACnC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,EAAY,IAAA,MAAU,IAAA,CAAK,eAAA;AAC7C,EAAA,MAAM,YAAA,GAAe,sBAAA,CAAuB,IAAA,CAAK,OAAA,IAAW,IAAI,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK,EAAG,IAAI,CAAA;AACvF,EAAA,MAAM,OAAOT,uBAAAA,CAAmB;AAAA,IAC9B,GAAA,EAAK,gBAAA;AAAA,IACL,YAAA,EAAc,SAAA;AAAA,IACd,IAAA,EAAM,CAAC,YAAA,CAAa,OAAA,EAAS,aAAa,MAAA,EAAQ,YAAA,CAAa,SAAA,EAAW,YAAA,CAAa,WAAW;AAAA,GACnG,CAAA;AACD,EAAA,MAAM,QAAQ,MAAM,WAAA;AAAA,IAClB,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,8BAAA;AAAA,IACA,uBAAA;AAAA,IACA,EAAE,MAAM,sBAAA,EAAwB,aAAA,EAAe,SAAS,KAAA,EAAO,YAAA,CAAa,aAAa,QAAA,EAAS;AAAA,IAClG;AAAA,GACF;AACA,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,YAAA,EAAa;AAClC;AAEA,eAAsB,8CACpB,IAAA,EASmI;AACnI,EAAA,MAAM,QAAA,GAAW,+BAAA,CAAgC,IAAA,CAAK,QAAA,EAAU,KAAK,QAAQ,CAAA;AAC7E,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,IAAA,CAAK,OAAA,EAAS,KAAK,QAAQ,CAAA;AACvD,EAAA,MAAM,yBAAyB,IAAI,CAAA;AACnC,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,UAAA,EAAY,IAAA,MAAU,IAAA,CAAK,eAAA;AAC7C,EAAA,MAAM,YAAA,GAAe,sBAAA,CAAuB,IAAA,CAAK,OAAA,EAAS,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK,EAAG,IAAI,CAAA;AACxG,EAAA,MAAM,OAAOA,uBAAAA,CAAmB;AAAA,IAC9B,GAAA,EAAK,gBAAA;AAAA,IACL,YAAA,EAAc,SAAA;AAAA,IACd,IAAA,EAAM,CAAC,YAAA,CAAa,OAAA,EAAS,aAAa,MAAA,EAAQ,YAAA,CAAa,SAAA,EAAW,YAAA,CAAa,WAAW;AAAA,GACnG,CAAA;AACD,EAAA,MAAM,QAAQ,MAAM,WAAA;AAAA,IAClB,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,8BAAA;AAAA,IACA,uBAAA;AAAA,IACA,EAAE,IAAA,EAAM,sBAAA,EAAwB,aAAA,EAAe,OAAA,EAAS,KAAA,EAAO,YAAA,CAAa,WAAA,EAAa,QAAA,EAAU,IAAA,CAAK,QAAA,EAAU,QAAA,EAAS;AAAA,IAC3H;AAAA,GACF;AACA,EAAA,OAAO,EAAE,GAAG,KAAA,EAAO,YAAA,EAAa;AAClC;AAEA,eAAe,oBACb,IAAA,EACe;AACf,EAAA,MAAM,EAAA,GAAK,MAAM,8BAAA,CAA+B;AAAA,IAC9C,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,UAAU,IAAA,CAAK;AAAA,GAChB,CAAA;AACD,EAAA,IAAI,EAAA,CAAG,UAAU,CAAA,EAAG;AAClB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,uCAAA,EAA0C,EAAA,CAAG,KAAK,CAAA,EAAA,CAAI,CAAA;AAAA,EACxE;AACA,EAAA,MAAM,IAAA,GAAO,MAAM,wCAAA,CAAyC;AAAA,IAC1D,SAAS,IAAA,CAAK,OAAA;AAAA,IACd,QAAQ,IAAA,CAAK,MAAA;AAAA,IACb,YAAY,IAAA,CAAK,UAAA;AAAA,IACjB,SAAS,IAAA,CAAK,eAAA;AAAA,IACd,UAAU,IAAA,CAAK;AAAA,GAChB,CAAA;AACD,EAAA,IAAI,IAAA,CAAK,QAAA,EAAU,MAAM,IAAI,MAAM,iDAAiD,CAAA;AACpF,EAAA,IAAI,MAAA,CAAO,IAAA,CAAK,aAAa,CAAA,KAAM,EAAA,EAAI;AACrC,IAAA,MAAM,IAAI,MAAM,oDAAoD,CAAA;AAAA,EACtE;AACF;AAEA,eAAsB,+CACpB,IAAA,EAC0E;AAC1E,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,IAAA,CAAK,OAAA,EAAS,KAAK,QAAQ,CAAA;AACvD,EAAA,MAAM,aAAa,MAAA,CAAO,MAAA,CAAO,KAAK,UAAU,CAAA,CAAE,MAAM,CAAA;AACxD,EAAA,MAAM,oBAAoB,IAAI,CAAA;AAC9B,EAAA,MAAM,OAAOA,uBAAAA,CAAmB;AAAA,IAC9B,GAAA,EAAK,gBAAA;AAAA,IACL,YAAA,EAAc,UAAA;AAAA,IACd,IAAA,EAAM,CAAC,UAAA,EAAY,IAAA,CAAK,OAAO;AAAA,GAChC,CAAA;AACD,EAAA,OAAO,WAAA;AAAA,IACL,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,2BAAA;AAAA,IACA,yBAAA;AAAA,IACA,EAAE,MAAM,uBAAA,EAAyB,UAAA,EAAY,WAAW,QAAA,EAAS,EAAG,OAAA,EAAS,IAAA,CAAK,OAAA,EAAQ;AAAA,IAC1F;AAAA,GACF;AACF;AAEA,eAAsB,+CACpB,IAAA,EAK0E;AAC1E,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,IAAA,CAAK,OAAA,EAAS,KAAK,QAAQ,CAAA;AACvD,EAAA,MAAM,aAAa,MAAA,CAAO,MAAA,CAAO,KAAK,UAAU,CAAA,CAAE,MAAM,CAAA;AACxD,EAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG;AAC3B,IAAA,MAAM,IAAI,MAAM,iEAAiE,CAAA;AAAA,EACnF;AACA,EAAA,MAAM,oBAAoB,IAAI,CAAA;AAC9B,EAAA,MAAM,MAAA,GAAS,qBAAA,CAAsB,IAAA,CAAK,OAAO,CAAA;AACjD,EAAA,MAAM,OAAOA,uBAAAA,CAAmB;AAAA,IAC9B,GAAA,EAAK,gBAAA;AAAA,IACL,YAAA,EAAc,6BAAA;AAAA,IACd,IAAA,EAAM,CAAC,UAAA,EAAY,CAAA,EAAG,IAAI,MAAM;AAAA,GACjC,CAAA;AACD,EAAA,OAAO,WAAA;AAAA,IACL,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,2BAAA;AAAA,IACA,yBAAA;AAAA,IACA,EAAE,IAAA,EAAM,0CAAA,EAA4C,UAAA,EAAY,UAAA,CAAW,UAAS,EAAE;AAAA,IACtF;AAAA,GACF;AACF;AAEA,eAAsB,yCACpB,IAAA,EAC0E;AAC1E,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,IAAA,CAAK,OAAA,EAAS,KAAK,QAAQ,CAAA;AACvD,EAAA,MAAM,aAAa,MAAA,CAAO,MAAA,CAAO,KAAK,UAAU,CAAA,CAAE,MAAM,CAAA;AACxD,EAAA,MAAM,OAAOA,uBAAAA,CAAmB;AAAA,IAC9B,GAAA,EAAK,gBAAA;AAAA,IACL,YAAA,EAAc,SAAA;AAAA,IACd,IAAA,EAAM,CAAC,UAAU;AAAA,GAClB,CAAA;AACD,EAAA,OAAO,WAAA;AAAA,IACL,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,8BAAA;AAAA,IACA,uBAAA;AAAA,IACA,EAAE,IAAA,EAAM,sBAAA,EAAwB,UAAA,EAAY,UAAA,CAAW,UAAS,EAAE;AAAA,IAClE;AAAA,GACF;AACF;AAEA,eAAsB,wCACpB,IAAA,EAC0E;AAC1E,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,IAAA,CAAK,OAAA,EAAS,KAAK,QAAQ,CAAA;AACvD,EAAA,MAAM,aAAa,MAAA,CAAO,MAAA,CAAO,KAAK,UAAU,CAAA,CAAE,MAAM,CAAA;AACxD,EAAA,MAAM,OAAOA,uBAAAA,CAAmB;AAAA,IAC9B,GAAA,EAAK,gBAAA;AAAA,IACL,YAAA,EAAc,QAAA;AAAA,IACd,IAAA,EAAM,CAAC,UAAU;AAAA,GAClB,CAAA;AACD,EAAA,OAAO,WAAA;AAAA,IACL,IAAA;AAAA,IACA,GAAA;AAAA,IACA,IAAA;AAAA,IACA,6BAAA;AAAA,IACA,sBAAA;AAAA,IACA,EAAE,IAAA,EAAM,qBAAA,EAAuB,UAAA,EAAY,UAAA,CAAW,UAAS,EAAE;AAAA,IACjE;AAAA,GACF;AACF;AAEA,SAAST,aAAAA,CAAa,QAAgB,OAAA,EAAiB;AACrD,EAAA,OAAOJ,uBAAAA,CAAmB;AAAA,IACxB,OAAOC,gBAAAA,CAAY;AAAA,MACjB,EAAA,EAAI,OAAA;AAAA,MACJ,IAAA,EAAM,cAAA;AAAA,MACN,gBAAgB,EAAE,QAAA,EAAU,IAAI,IAAA,EAAM,OAAA,EAAS,QAAQ,KAAA,EAAM;AAAA,MAC7D,OAAA,EAAS,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,CAAC,MAAA,CAAO,IAAA,EAAM,CAAA,EAAE;AAAE,KAC/C,CAAA;AAAA,IACD,SAAA,EAAW,gBAAA,CAAiB,MAAA,CAAO,IAAA,EAAM;AAAA,GAC1C,CAAA;AACH;AAEA,eAAsB,yBAAyB,IAAA,EAQX;AAClC,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACnC,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,OAAA,EAAS,IAAA,CAAK,QAAQ,CAAA;AAClD,EAAA,MAAM,MAAA,GAASG,aAAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,OAAO,CAAA;AAChD,EAAA,MAAM,EAAA,GAAK,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,IACnC,OAAA,EAAS,GAAA;AAAA,IACT,GAAA,EAAK,eAAA;AAAA,IACL,YAAA,EAAc,cAAA;AAAA,IACd,IAAA,EAAM,CAAC,IAAA,CAAK,OAAA,EAAS,IAAA,CAAK,MAAA,EAAQ,IAAA,CAAK,SAAA,EAAW,uBAAA,CAAwB,IAAA,CAAK,WAAW,CAAC;AAAA,GAC5F,CAAA;AACD,EAAA,OAAO,EAAE,UAAA,EAAY,EAAA,CAAG,QAAA,EAAS,EAAE;AACrC;AAEA,eAAsB,6BAA6B,IAAA,EAKc;AAC/D,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACnC,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,OAAA,EAAS,IAAA,CAAK,QAAQ,CAAA;AAClD,EAAA,MAAM,MAAA,GAASA,aAAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,OAAO,CAAA;AAChD,EAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,YAAA,CAAa,EAAE,OAAA,EAAS,GAAA,EAAK,GAAA,EAAK,eAAA,EAAiB,YAAA,EAAc,OAAA,EAAS,CAAA;AACrG,EAAA,MAAM,SAAA,GAAY,KAAA,GAAQ,CAAA,GAAI,KAAA,GAAQ,CAAA,GAAI,CAAA;AAC1C,EAAA,MAAM,CAAC,KAAA,EAAO,SAAS,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IAC3C,OAAO,YAAA,CAAa;AAAA,MAClB,OAAA,EAAS,GAAA;AAAA,MACT,GAAA,EAAK,eAAA;AAAA,MACL,YAAA,EAAc,UAAA;AAAA,MACd,IAAA,EAAM,CAACP,eAAAA,CAAW,IAAA,CAAK,OAAO,CAAA,EAAG,MAAA,CAAO,SAAS,CAAC;AAAA,KACnD,CAAA;AAAA,IACD,MAAA,CAAO,aAAa,EAAE,OAAA,EAAS,KAAK,GAAA,EAAK,eAAA,EAAiB,YAAA,EAAc,mBAAA,EAAqB;AAAA,GAC9F,CAAA;AACD,EAAA,OAAO,EAAE,KAAA,EAAO,KAAA,CAAM,QAAA,EAAS,EAAG,SAAA,EAAW,SAAA,CAAU,QAAA,EAAS,EAAG,KAAA,EAAO,KAAA,CAAM,QAAA,EAAS,EAAE;AAC7F;AAEA,eAAsB,+BAA+B,IAAA,EAYlD;AACD,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACnC,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,OAAA,EAAS,IAAA,CAAK,QAAQ,CAAA;AAClD,EAAA,MAAM,MAAA,GAASO,aAAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,OAAO,CAAA;AAChD,EAAA,MAAM,aAAa,MAAA,CAAO,MAAA,CAAO,KAAK,UAAU,CAAA,CAAE,MAAM,CAAA;AACxD,EAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,IACtC,OAAA,EAAS,GAAA;AAAA,IACT,GAAA,EAAK,eAAA;AAAA,IACL,YAAA,EAAc,OAAA;AAAA,IACd,IAAA,EAAM,CAAC,UAAU;AAAA,GAClB,CAAA;AACD,EAAA,IAAI,YAAA,GAAe,GAAA;AACnB,EAAA,IAAI,QAAA,GAAW,GAAA;AACf,EAAA,IAAI,YAAA,GAAe,GAAA;AACnB,EAAA,IAAI,YAAA,GAAe,KAAA;AACnB,EAAA,IAAI;AACF,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,MACtC,OAAA,EAAS,GAAA;AAAA,MACT,GAAA,EAAK,eAAA;AAAA,MACL,YAAA,EAAc,eAAA;AAAA,MACd,IAAA,EAAM,CAAC,UAAU;AAAA,KAClB,CAAA;AACD,IAAA,YAAA,GAAe,KAAA,CAAM,CAAC,CAAA,CAAE,QAAA,EAAS;AACjC,IAAA,QAAA,GAAW,KAAA,CAAM,CAAC,CAAA,CAAE,QAAA,EAAS;AAC7B,IAAA,YAAA,GAAe,KAAA,CAAM,CAAC,CAAA,CAAE,QAAA,EAAS;AAAA,EACnC,CAAA,CAAA,MAAQ;AACN,IAAA,YAAA,GAAe,IAAA;AAAA,EACjB;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,OAAO,KAAK,CAAA;AAAA,IACnB,YAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF;AAGA,eAAsB,yCAAyC,IAAA,EAMkB;AAC/E,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACnC,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,OAAA,EAAS,IAAA,CAAK,QAAQ,CAAA;AAClD,EAAA,MAAM,MAAA,GAASA,aAAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,OAAO,CAAA;AAChD,EAAA,MAAM,aAAa,MAAA,CAAO,MAAA,CAAO,KAAK,UAAU,CAAA,CAAE,MAAM,CAAA;AACxD,EAAA,MAAM,OAAA,GAAUP,eAAAA,CAAW,IAAA,CAAK,OAAO,CAAA;AACvC,EAAA,MAAM,CAAC,QAAA,EAAU,aAAa,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,IAClD,OAAO,YAAA,CAAa;AAAA,MAClB,OAAA,EAAS,GAAA;AAAA,MACT,GAAA,EAAK,eAAA;AAAA,MACL,YAAA,EAAc,UAAA;AAAA,MACd,IAAA,EAAM,CAAC,UAAA,EAAY,OAAO;AAAA,KAC3B,CAAA;AAAA,IACD,OAAO,YAAA,CAAa;AAAA,MAClB,OAAA,EAAS,GAAA;AAAA,MACT,GAAA,EAAK,eAAA;AAAA,MACL,YAAA,EAAc,kBAAA;AAAA,MACd,IAAA,EAAM,CAAC,UAAU;AAAA,KAClB;AAAA,GACF,CAAA;AACD,EAAA,MAAM,aAAA,GAAgB,MAAM,MAAA,CAAO,YAAA,CAAa;AAAA,IAC9C,OAAA,EAAS,GAAA;AAAA,IACT,GAAA,EAAK,eAAA;AAAA,IACL,YAAA,EAAc,UAAA;AAAA,IACd,IAAA,EAAM,CAAC,OAAA,EAAS,aAAa;AAAA,GAC9B,CAAA;AACD,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,aAAA,EAAe,cAAc,QAAA,EAAS;AAAA,IACtC,aAAA,EAAe,cAAc,QAAA;AAAS,GACxC;AACF;AAEA,eAAsB,+BAA+B,IAAA,EAItB;AAC7B,EAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,IAAA,CAAK,OAAA,EAAS,KAAK,QAAQ,CAAA;AACvD,EAAA,MAAM,MAAA,GAASO,aAAAA,CAAa,IAAA,CAAK,MAAA,EAAQ,KAAK,OAAO,CAAA;AACrD,EAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,YAAA,CAAa,EAAE,OAAA,EAAS,GAAA,EAAK,GAAA,EAAK,eAAA,EAAiB,YAAA,EAAc,eAAA,EAAiB,CAAA;AAC7G,EAAA,OAAO,EAAE,KAAA,EAAO,KAAA,CAAM,QAAA,EAAS,EAAE;AACnC;AAaO,SAAS,2BAAA,CACd,SACA,IAAA,EACgC;AAChC,EAAA,MAAM,SAAA,GAAY,OAAO,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA,IAAK,MAAA,CAAO,QAAA,CAAS,OAAA,CAAQ,QAAQ,CAAA;AACvF,EAAA,MAAM,QAAA,GAAW,SAAA,GAAY,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,GAAI,CAAA;AACxD,EAAA,MAAM,QAAA,GAAW,SAAA,GAAY,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAA,GAAI,CAAA;AACxD,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,MAAM,KAAA,GAAQ,MAAM,KAAA,IAAS,CAAA;AAC7B,IAAA,MAAM,GAAA,GAAM,IAAA,EAAM,GAAA,IAAO,KAAA,GAAQ,EAAA;AACjC,IAAA,OAAO,EAAE,OAAO,GAAA,EAAI;AAAA,EACtB;AACA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,MAAM,KAAA,IAAS,QAAA;AAAA,IACtB,GAAA,EAAK,IAAA,EAAM,GAAA,IAAO,QAAA,GAAW;AAAA,GAC/B;AACF;AAEA,eAAe,oBAAoB,IAAA,EAAoE;AACrG,EAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,4BAA4B,CAAA,UAAA,CAAA,EAAc;AAAA,IACnE,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,IAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,IAAI;AAAA,GAC1B,CAAA;AACD,EAAA,IAAI,CAAC,GAAA,CAAI,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,WAAA,EAAc,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,MAAM,GAAA,CAAI,IAAA,EAAM,CAAA,CAAE,CAAA;AAC3E,EAAA,OAAQ,MAAM,IAAI,IAAA,EAAK;AACzB;AAEA,eAAsB,0BAAA,CAA2B,IAAA,GAG7C,EAAC,EAAyC;AAC5C,EAAA,MAAM,MAAA,GAAS,MAAM,mBAAA,CAAoB,EAAE,CAAA;AAC3C,EAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAI,GAAI,2BAAA,CAA4B,QAAQ,IAAI,CAAA;AAC/D,EAAA,MAAM,SAAS,MAAM,mBAAA,CAAoB,EAAE,KAAA,EAAO,KAAK,CAAA;AACvD,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,KAAA,EAAO,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,KAAA;AAAA,IAC9B,QAAA,EAAU,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO,QAAA;AAAA,IACpC,QAAA,EAAU,MAAA,CAAO,QAAA,IAAY,MAAA,CAAO;AAAA,GACtC;AACF;AAEO,IAAM,cAAA,GAAiB;AAAA,EAC5B,OAAA,EAAS,CAAA;AAAA,EACT,MAAA,EAAQ,CAAA;AAAA,EACR,QAAA,EAAU,CAAA;AAAA,EACV,QAAA,EAAU,CAAA;AAAA,EACV,SAAA,EAAW,CAAA;AAAA,EACX,MAAA,EAAQ,CAAA;AAAA,EACR,OAAA,EAAS,CAAA;AAAA,EACT,QAAA,EAAU;AACZ;AAEO,IAAM,qBAAA,GAAwB;AAAA,EACnC,SAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF;AAIO,SAAS,oBAAoB,KAAA,EAAsD;AACxF,EAAA,IAAI,SAAS,IAAA,IAAQ,CAAC,OAAO,QAAA,CAAS,KAAK,GAAG,OAAO,SAAA;AACrD,EAAA,IAAI,KAAA,KAAU,cAAA,CAAe,MAAA,EAAQ,OAAO,MAAA;AAC5C,EAAA,IAAI,KAAA,KAAU,cAAA,CAAe,OAAA,EAAS,OAAO,SAAA;AAC7C,EAAA,IAAI,KAAA,KAAU,cAAA,CAAe,SAAA,EAAW,OAAO,gBAAA;AAC/C,EAAA,IACE,KAAA,KAAU,cAAA,CAAe,QAAA,IACzB,KAAA,KAAU,eAAe,QAAA,IACzB,KAAA,KAAU,cAAA,CAAe,MAAA,IACzB,KAAA,KAAU,cAAA,CAAe,OAAA,IACzB,KAAA,KAAU,eAAe,QAAA,EACzB;AACA,IAAA,OAAO,mBAAA;AAAA,EACT;AACA,EAAA,OAAO,SAAA;AACT;AA2BA,SAAS,SAAS,KAAA,EAAgD;AAChE,EAAA,OAAO,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAK,KAAA,GAAoC,IAAA;AAC5G;AAEA,SAAS,qBAAqB,GAAA,EAMrB;AACP,EAAA,MAAM,GAAA,GAAM,SAAS,GAAG,CAAA;AACxB,EAAA,IAAI,CAAC,KAAK,OAAO,IAAA;AACjB,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,GAAA,CAAI,SAAA,IAAa,GAAA,CAAI,cAAc,GAAA,CAAI,UAAA,IAAc,EAAE,CAAA,CAAE,IAAA,EAAK;AACvF,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AACvB,EAAA,MAAM,QAAQ,GAAA,CAAI,EAAA;AAClB,EAAA,MAAM,KAAK,OAAO,KAAA,KAAU,QAAA,GAAW,KAAA,GAAQ,OAAO,KAAK,CAAA;AAC3D,EAAA,MAAM,WAAA,GAAc,OAAO,GAAA,CAAI,eAAA,IAAmB,IAAI,gBAAA,IAAoB,EAAE,EAAE,IAAA,EAAK;AACnF,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,MAAA,CAAO,QAAA,CAAS,EAAE,IAAI,EAAA,GAAK,MAAA;AAAA,IAC/B,SAAA;AAAA,IACA,KAAA,EAAO,MAAA,CAAO,GAAA,CAAI,KAAA,IAAS,UAAU,CAAA;AAAA,IACrC,eAAe,OAAO,GAAA,CAAI,aAAA,KAAkB,QAAA,GAAW,IAAI,aAAA,GAAgB,MAAA;AAAA,IAC3E,iBAAiB,mBAAA,CAAoB,WAAW,CAAA,GAAIP,eAAAA,CAAW,WAAW,CAAA,GAAI;AAAA,GAChF;AACF;AAEO,SAAS,6BAA6B,IAAA,EAA+B;AAC1E,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,mBAAA,CAAoB,IAAI,GAAG,OAAO,KAAA;AAChD,EAAA,OAAOA,eAAAA,CAAW,IAAI,CAAA,KAAM,2CAAA;AAC9B;AAEO,SAAS,uBAAuB,MAAA,EAA+D;AACpG,EAAA,IAAI,MAAA,CAAO,YAAY,cAAA,EAAgB;AACrC,IAAA,OAAO,CAAA,QAAA,EAAW,OAAO,OAAO,CAAA,wIAAA,CAAA;AAAA,EAClC;AACA,EAAA,MAAM,aAAa,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAC,MAAM,CAAA,CAAA,EAAI,CAAA,CAAE,EAAA,IAAM,QAAG,IAAI,CAAA,CAAE,KAAK,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,IAAK,MAAA;AACtF,EAAA,MAAM,aAAa,MAAA,CAAO,cAAA,CAAe,GAAA,CAAI,CAAC,MAAM,CAAA,CAAA,EAAI,CAAA,CAAE,EAAA,IAAM,QAAG,IAAI,CAAA,CAAE,KAAK,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,IAAK,MAAA;AAChG,EAAA,OAAO,8BAA8B,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAA,EAAK,UAAU,eAAe,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,wCAAA,EAA2C,MAAA,CAAO,eAAe,MAAM,CAAA,EAAA,EAAK,UAAU,CAAA,oCAAA,EAAuC,MAAA,CAAO,kBAAkB,MAAM,CAAA,2BAAA,CAAA;AACxQ;AAEA,eAAe,OAAA,CAAc,KAAA,EAAY,WAAA,EAAqB,EAAA,EAA2C;AACvG,EAAA,MAAM,MAAW,EAAC;AAClB,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,WAAA,EAAa,KAAA,CAAM,MAAM,CAAA,EAAE,EAAG,YAAY;AACtF,IAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,MAAA,MAAM,GAAA,GAAM,CAAA;AACZ,MAAA,CAAA,IAAK,CAAA;AACL,MAAA,GAAA,CAAI,GAAG,CAAA,GAAI,MAAM,EAAA,CAAG,KAAA,CAAM,GAAG,CAAE,CAAA;AAAA,IACjC;AAAA,EACF,CAAC,CAAA;AACD,EAAA,MAAM,OAAA,CAAQ,IAAI,OAAO,CAAA;AACzB,EAAA,OAAO,GAAA;AACT;AAEA,eAAsB,+BAA+B,IAAA,EAMR;AAC3C,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,IAAK,EAAA,EAAI,CAAC,CAAA,EAAG,GAAG,CAAA;AACjE,EAAA,MAAM,cAAA,GAAiB,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,MAAA,CAAO,IAAA,CAAK,cAAc,CAAA,IAAK,CAAA,EAAG,CAAC,CAAA,EAAG,EAAE,CAAA;AACjF,EAAA,MAAM,MAAA,GAAS,MAAM,0BAAA,EAA2B;AAChD,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,GAAI,MAAA,CAAO,YAAY,EAAC;AACtE,EAAA,MAAM,MAAA,GAAS,QAAQ,GAAA,CAAI,oBAAoB,EAAE,MAAA,CAAO,CAAC,CAAA,KAAkC,CAAA,IAAK,IAAI,CAAA;AACpG,EAAA,MAAM,OAAA,GAAU,CAAC,GAAG,MAAM,EAAE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,CAAA,CAAE,EAAA,IAAM,CAAA,KAAM,CAAA,CAAE,MAAM,CAAA,CAAE,CAAA;AACpE,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,GAAS,KAAA,GAAQ,QAAQ,KAAA,CAAM,OAAA,CAAQ,MAAA,GAAS,KAAK,CAAA,GAAI,OAAA;AAEhF,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,IAAW,IAAA,IAAQ,OAAO,IAAA,CAAK,OAAO,CAAA,CAAE,IAAA,EAAK,KAAM,EAAA,GAAK,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,GAAI,GAAA;AACpG,EAAA,MAAM,MAAA,GAAA,CAAU,IAAA,CAAK,MAAA,IAAU,EAAA,EAAI,IAAA,EAAK;AACxC,EAAA,IAAI,OAAA,GAAuC,cAAA;AAC3C,EAAA,IAAI;AACF,IAAA,IAAI,MAAA,IAAU,MAAA,CAAO,QAAA,CAAS,OAAO,CAAA,EAAG;AACtC,MAAA,eAAA,CAAgB,OAAA,EAAS,KAAK,QAAQ,CAAA;AACtC,MAAA,OAAA,GAAU,UAAA;AAAA,IACZ;AAAA,EACF,CAAA,CAAA,MAAQ;AACN,IAAA,OAAA,GAAU,cAAA;AAAA,EACZ;AAEA,EAAA,MAAM,IAAA,GAA0B,YAAY,UAAA,GACxC,MAAM,QAAQ,MAAA,EAAQ,CAAA,EAAG,OAAO,CAAA,KAAM;AACpC,IAAA,IAAI;AACF,MAAA,MAAM,EAAA,GAAK,MAAM,8BAAA,CAA+B;AAAA,QAC9C,OAAA;AAAA,QACA,MAAA;AAAA,QACA,YAAY,CAAA,CAAE,SAAA;AAAA,QACd,QAAA,EAAU,CAAA,CAAE,eAAA,IAAmB,IAAA,CAAK;AAAA,OACrC,CAAA;AACD,MAAA,OAAO;AAAA,QACL,GAAG,CAAA;AAAA,QACH,OAAO,EAAA,CAAG,KAAA;AAAA,QACV,YAAY,qBAAA,CAAsB,EAAA,CAAG,KAAK,CAAA,IAAK,MAAA,CAAO,GAAG,KAAK,CAAA;AAAA,QAC9D,MAAA,EAAQ,mBAAA,CAAoB,EAAA,CAAG,KAAK,CAAA;AAAA,QACpC,cAAc,EAAA,CAAG,YAAA;AAAA,QACjB,UAAU,EAAA,CAAG,QAAA;AAAA,QACb,cAAc,EAAA,CAAG;AAAA,OACnB;AAAA,IACF,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,EAAE,GAAG,CAAA,EAAG,KAAA,EAAO,MAAM,UAAA,EAAY,SAAA,EAAW,QAAQ,SAAA,EAAmB;AAAA,IAChF;AAAA,EACF,CAAC,CAAA,GACD,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,OAAO,IAAA,EAAM,UAAA,EAAY,SAAA,EAAW,MAAA,EAAQ,WAAmB,CAAE,CAAA;AAEhG,EAAA,MAAM,OAAO,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,MAAM,CAAA;AACnD,EAAA,MAAM,UAAU,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,SAAS,CAAA;AACzD,EAAA,MAAM,iBAAiB,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,gBAAgB,CAAA;AACvE,EAAA,MAAM,iBAAA,GAAoB,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAA,KAAW,mBAAmB,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,cAAc,CAAA;AACtG,EAAA,MAAM,UAAU,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,SAAS,CAAA;AACzD,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,OAAA;AAAA,IACA,SAAS,IAAA,CAAK,MAAA;AAAA,IACd,IAAA;AAAA,IACA,OAAA;AAAA,IACA,cAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,OAAO,EAAE,GAAG,OAAA,EAAS,IAAA,EAAM,sBAAA,CAAuB,OAAO,CAAA,EAAE;AAC7D;AAEA,eAAsB,0BAA0B,IAAA,EAA+D;AAC7G,EAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,4BAA4B,CAAA,WAAA,EAAc,IAAA,CAAK,EAAE,CAAA,CAAA,EAAI,EAAE,KAAA,EAAO,UAAA,EAAY,CAAA;AACrG,EAAA,IAAI,CAAC,GAAA,CAAI,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,UAAA,EAAa,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,MAAM,GAAA,CAAI,IAAA,EAAM,CAAA,CAAE,CAAA;AAC1E,EAAA,OAAO,EAAE,QAAA,EAAU,MAAM,GAAA,CAAI,MAAK,EAAE;AACtC;AAcA,eAAsB,qDACpB,IAAA,EASA;AACA,EAAA,OAAO,6CAAA,CAA8C;AAAA,IACnD,GAAG,IAAA;AAAA,IACH,QAAA,EAAU,MAAA,CAAO,IAAA,CAAK,QAAQ;AAAA,GAC/B,CAAA;AACH;AAEA,eAAsB,sDACpB,IAAA,EACA;AACA,EAAA,MAAM,OAAA,GAAU,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA;AACnC,EAAA,IAAI,OAAA,KAAY,KAAK,OAAA,KAAY,CAAA,IAAK,YAAY,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,mCAAmC,CAAA;AACxG,EAAA,OAAO,8CAAA,CAA+C,EAAE,GAAG,IAAA,EAAM,SAAS,CAAA;AAC5E;AAEA,eAAsB,6BACpB,OAAA,EACwC;AACxC,EAAA,+BAAA,CAAgC,QAAQ,QAAQ,CAAA;AAChD,EAAA,MAAM,GAAA,GAAM,MAAM,KAAA,CAAM,CAAA,EAAG,4BAA4B,CAAA,iBAAA,CAAA,EAAqB;AAAA,IAC1E,MAAA,EAAQ,MAAA;AAAA,IACR,OAAA,EAAS,EAAE,cAAA,EAAgB,kBAAA,EAAmB;AAAA,IAC9C,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO;AAAA,GAC7B,CAAA;AACD,EAAA,IAAI,CAAC,GAAA,CAAI,EAAA,EAAI,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,MAAM,GAAA,CAAI,IAAA,EAAM,CAAA,CAAE,CAAA;AAClF,EAAA,OAAO,EAAE,EAAA,EAAI,IAAA,EAAM,QAAQ,MAAM,GAAA,CAAI,MAAK,EAAE;AAC9C;;;AC97BO,IAAM,uBAAuB,CAAC,OAAA,EAAS,cAAA,EAAgB,UAAA,EAAY,YAAY,UAAU;AAEhG,IAAM,UAAA,GAAa,kDAAA;AACnB,IAAM,WAAA,GAAc,2FAAA;AAsCpB,SAAS0B,UAAS,KAAA,EAAgD;AAChE,EAAA,OAAO,KAAA,IAAS,OAAO,KAAA,KAAU,QAAA,IAAY,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA,GAAK,KAAA,GAAoC,IAAA;AAC5G;AAEA,SAAS,GAAA,CAAI,CAAA,EAAY,QAAA,GAAW,EAAA,EAAY;AAC9C,EAAA,OAAO,CAAA,IAAK,IAAA,GAAO,QAAA,GAAW,MAAA,CAAO,CAAC,CAAA;AACxC;AAEO,SAAS,gBAAgB,MAAA,EAKpB;AACV,EAAA,MAAM,KAAA,GAAA,CAAS,MAAA,CAAO,KAAA,IAAS,GAAA,EAAK,IAAA,EAAK;AACzC,EAAA,MAAM,GAAA,GAAA,CAAO,MAAA,CAAO,SAAA,IAAa,EAAA,EAAI,IAAA,EAAK;AAC1C,EAAA,MAAM,IAAA,GAAA,CAAQ,MAAA,CAAO,QAAA,IAAY,EAAA,EAAI,IAAA,EAAK;AAC1C,EAAA,MAAM,SAAA,GAAY,IAAA,KAAS,EAAA,IAAM,IAAA,KAAS,IAAA;AAC1C,EAAA,OAAA,CAAQ,KAAA,KAAU,EAAA,IAAM,KAAA,KAAU,GAAA,KAAQ,QAAQ,EAAA,IAAM,SAAA;AAC1D;AAEA,IAAM,uCAAuB,IAAI,GAAA,CAAI,CAAC,OAAA,EAAS,OAAO,CAAC,CAAA;AAGhD,SAAS,mBAAmB,GAAA,EAA4E;AAC7G,EAAA,MAAM,IAAA,GAAO,CAAA,EAAG,GAAA,CAAI,IAAA,IAAQ,EAAE,IAAI,GAAA,CAAI,KAAA,IAAS,EAAE,CAAA,CAAA,CAAG,WAAA,EAAY;AAChE,EAAA,IAAI,IAAA,CAAK,QAAA,CAAS,OAAO,CAAA,EAAG,OAAO,IAAA;AACnC,EAAA,OAAO,qBAAqB,GAAA,CAAI,MAAA,CAAO,GAAA,CAAI,OAAA,IAAW,EAAE,CAAC,CAAA;AAC3D;AAEO,SAAS,iBAAiB,GAAA,EAKrB;AACV,EAAA,MAAM,EAAA,GAAA,CAAM,GAAA,CAAI,UAAA,IAAc,EAAA,EAAI,IAAA,EAAK;AACvC,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,EAAA,IAAM,EAAA,KAAO,4CAA4C,CAAA;AAC/E,EAAA,OAAO,KAAA,IAAS,CAAC,kBAAA,CAAmB,GAAG,CAAA;AACzC;AAEO,SAAS,iBAAiB,GAAA,EAA+B;AAC9D,EAAA,MAAM,CAAA,GAAIA,SAAAA,CAAS,GAAG,CAAA,IAAK,EAAC;AAC5B,EAAA,MAAM,GAAA,GAAMA,SAAAA,CAAS,CAAA,CAAE,OAAO,KAAK,EAAC;AACpC,EAAA,MAAM,eAAe,GAAA,CAAI,GAAA,CAAI,KAAA,IAAS,GAAA,CAAI,MAAM,iBAAiB,CAAA;AACjE,EAAA,MAAM,OAAA,GAAU,GAAA,CAAI,GAAA,CAAI,OAAO,CAAA;AAC/B,EAAA,MAAM,QAAQ,gBAAA,CAAiB;AAAA,IAC7B,IAAA,EAAM,GAAA,CAAI,GAAA,CAAI,IAAI,CAAA;AAAA,IAClB,KAAA,EAAO,GAAA,CAAI,GAAA,CAAI,KAAK,CAAA;AAAA,IACpB,OAAA;AAAA,IACA,UAAA,EAAY,GAAA,CAAI,GAAA,CAAI,UAAU;AAAA,GAC/B,CAAA;AACD,EAAA,MAAM,MAAA,GAAS,GAAA,CAAI,CAAA,CAAE,MAAM,CAAA;AAC3B,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,CAAA,CAAE,KAAA,EAAO,GAAG,CAAA;AAC9B,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,CAAA,CAAE,SAAS,CAAA;AACjC,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,CAAA,CAAE,MAAM,CAAA,GAAI,CAAA,CAAE,SAAS,EAAC;AACrD,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,KAAQ;AACrC,IAAA,MAAM,GAAA,GAAMA,SAAAA,CAAS,GAAG,CAAA,IAAK,EAAC;AAC9B,IAAA,OAAO,CAAA,EAAG,GAAA,CAAI,GAAA,CAAI,IAAA,IAAQ,GAAA,CAAI,IAAA,EAAM,KAAK,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,GAAA,CAAI,KAAK,CAAC,CAAA,CAAA;AAAA,EAC9D,CAAC,CAAA;AACD,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,EAAU,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,GAAA,CAAI,CAAA,CAAE,QAAQ,CAAA,EAAG,CAAA;AACpF,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,gBAAgB,CAAA;AACrC,EAAA,IAAI,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,WAAW,CAAA;AACjC,EAAA,IAAI,OAAO,KAAA,IAAS,GAAG,IAAI,EAAA,EAAI,KAAA,CAAM,KAAK,aAAa,CAAA;AACvD,EAAA,IAAI,WAAW,IAAA,CAAK,SAAS,CAAA,EAAG,KAAA,CAAM,KAAK,WAAW,CAAA;AACtD,EAAA,IAAI,YAAY,IAAA,CAAK,SAAS,CAAA,EAAG,KAAA,CAAM,KAAK,qBAAqB,CAAA;AACjE,EAAA,IAAI,CAAC,IAAA,IAAQ,CAAC,SAAA,EAAW,KAAA,CAAM,KAAK,mBAAmB,CAAA;AACvD,EAAA,MAAM,QAAA,GAAW,OAAO,KAAA,IAAS,GAAG,IAAI,EAAA,GAAK,CAAA,OAAA,EAAU,KAAK,CAAA,IAAA,CAAA,GAAS,EAAA;AACrE,EAAA,MAAM,OAAA,GAAU,WAAW,MAAA,GAAS,CAAA,MAAA,EAAS,WAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GAAK,EAAA;AACvE,EAAA,MAAM,KAAA,GAAQ,QAAQ,SAAA,GAAY,EAAA;AAClC,EAAA,MAAM,IAAA,GAAO,IAAA,GACT,CAAA,GAAA,EAAM,YAAY,CAAA,EAAG,KAAK,CAAA,iDAAA,CAAA,GAC1B,CAAA,GAAA,EAAM,YAAY,CAAA,QAAA,EAAW,OAAA,IAAW,QAAG,CAAA,CAAA,EAAI,KAAK,CAAA,OAAA,EAAU,SAAA,IAAa,gBAAgB,CAAA,IAAA,EAAO,MAAA,IAAU,QAAG,CAAA,CAAA,EAAI,OAAO,CAAA,EAAG,QAAQ,CAAA,CAAA,CAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,GAAG,EAAE,IAAA,EAAK;AACvK,EAAA,OAAO,EAAE,MAAM,IAAA,EAAM,YAAA,EAAc,SAAS,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,KAAA,EAAM;AACrF;AAEA,SAAS,UAAU,IAAA,EAAuB;AACxC,EAAA,MAAM,CAAA,GAAI,OAAO,IAAI,CAAA;AACrB,EAAA,OAAO,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,IAAK,oBAAA,CAAqB,CAAC,CAAA,GAAI,oBAAA,CAAqB,CAAC,CAAA,GAAI,GAAA,CAAI,IAAA,EAAM,SAAS,CAAA;AACtG;AAEO,SAAS,sBAAsB,GAAA,EAAiD;AACrF,EAAA,MAAM,GAAA,GAAMA,UAAS,GAAG,CAAA;AACxB,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAC5D,EAAA,MAAM,YAAY,GAAA,CAAI,GAAA,CAAI,aAAa,GAAA,CAAI,UAAA,IAAc,IAAI,UAAU,CAAA;AACvE,EAAA,IAAI,CAAC,SAAA,EAAW,MAAM,IAAI,MAAM,qCAAqC,CAAA;AACrE,EAAA,MAAM,KAAA,GAAQ,OAAO,GAAA,CAAI,EAAA,KAAO,WAAW,GAAA,CAAI,EAAA,GAAK,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA;AACjE,EAAA,MAAM,eAAA,GAAkB,IAAI,GAAA,CAAI,eAAA,IAAmB,IAAI,gBAAgB,CAAA,CAAE,MAAK,IAAK,MAAA;AACnF,EAAA,MAAM,gBAAgB,MAAA,CAAO,GAAA,CAAI,aAAa,CAAA,KAAM,IAAI,OAAA,GAAU,OAAA;AAClE,EAAA,MAAM,WAAW,GAAA,CAAI,QAAA,IAAY,OAAO,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA,GAAI,MAAA;AAC/D,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,GAAI,GAAA,CAAI,UAAU,EAAC;AAC/D,EAAA,MAAM,UAAA,GAAa,MAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,GAAI,GAAA,CAAI,UAAU,EAAC;AAC/D,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,GAAA,CAAI,gBAAgB,CAAA;AAC/C,EAAA,MAAM,OAAA,GAAU,UAAA,CAAW,GAAA,CAAI,CAAC,GAAA,KAAQ;AACtC,IAAA,MAAM,CAAA,GAAIA,SAAAA,CAAS,GAAG,CAAA,IAAK,EAAC;AAC5B,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,CAAA,CAAE,OAAO,CAAA,GAAI,CAAA,CAAE,OAAA,CAAQ,GAAA,CAAI,gBAAgB,CAAA,GAAI,EAAC;AACjF,IAAA,OAAO,EAAE,OAAO,GAAA,CAAI,CAAA,CAAE,OAAO,iBAAiB,CAAA,EAAG,SAAS,UAAA,EAAW;AAAA,EACvE,CAAC,CAAA;AACD,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,CAAA,GAAI,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AAC5B,EAAA,IAAI,CAAA,KAAM,UAAA,IAAc,CAAA,KAAM,OAAA,IAAW,MAAM,cAAA,EAAgB;AAC7D,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,EAAG,CAAC,CAAA,sCAAA,CAAmC,CAAA;AAAA,EACpD;AACA,EAAA,MAAM,GAAA,GAAM,kBAAkB,OAAA,GAAU,OAAA,CAAQ,QAAQ,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,CAAA,GAAI,OAAA;AAC5E,EAAA,IAAI,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,QAAA,CAAS,aAAa,CAAC,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,yCAAyC,CAAA;AAC1G,EAAA,IAAI,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,QAAA,CAAS,WAAW,CAAC,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,8CAA8C,CAAA;AAC7G,EAAA,IAAI,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,KAAA,CAAM,QAAA,CAAS,qBAAqB,CAAC,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,iEAAiE,CAAA;AAC1I,EAAA,IAAI,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,KAAA,CAAM,QAAA,CAAS,mBAAmB,CAAA,IAAK,CAAC,CAAA,CAAE,IAAI,CAAA,EAAG,KAAA,CAAM,KAAK,sCAAsC,CAAA;AACxH,EAAA,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,sEAAsE,CAAA;AAC/G,EAAA,IAAI,CAAC,GAAA,CAAI,GAAA,CAAI,WAAW,EAAE,IAAA,EAAK,IAAK,GAAA,CAAI,IAAA,CAAK,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,IAAI,CAAA,EAAG;AAC5D,IAAA,KAAA,CAAM,KAAK,0CAA0C,CAAA;AAAA,EACvD;AAEA,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,KAAK,CAAA,CAAA,EAAI,GAAA,CAAI,MAAM,QAAG,CAAA,CAAA,EAAI,IAAI,GAAA,CAAI,KAAA,EAAO,UAAU,CAAC,KAAK,CAAC,CAAA,EAAA,EAAK,kBAAkB,OAAA,GAAU,OAAA,GAAU,OAAO,CAAA,EAAA,CAAI,CAAA;AACtH,EAAA,KAAA,CAAM,KAAK,CAAA,SAAA,EAAY,GAAA,CAAI,IAAI,QAAQ,CAAA,IAAK,QAAG,CAAA,0DAAA,CAAuD,CAAA;AACtG,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,KAAA,CAAM,IAAA;AAAA,MACJ,6BAA6B,eAAe,CAAA,GACxC,YAAY,eAAe,CAAA,kDAAA,CAAA,GAC3B,YAAY,eAAe,CAAA,CAAA;AAAA,KACjC;AAAA,EACF;AACA,EAAA,IAAI,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAC,CAAA,CAAE,CAAA;AAC/D,EAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,IAAA,KAAA,CAAM,KAAK,iDAAiD,CAAA;AAC5D,IAAA,KAAA,MAAW,KAAK,OAAA,EAAS,KAAA,CAAM,KAAK,CAAA,EAAA,EAAK,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AACjD,IAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,KAAA,CAAM,KAAK,wCAAwC,CAAA;AAAA,EAC/E,CAAA,MAAO;AACL,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,QAAA,IAAY,GAAG,CAAA,wFAAA,CAA0F,CAAA;AAClI,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,GAAG,CAAA,IAAK,OAAA,CAAQ,SAAQ,EAAG;AACxC,MAAA,KAAA,CAAM,KAAK,CAAA,OAAA,EAAU,CAAA,GAAI,CAAC,CAAA,QAAA,EAAM,GAAA,CAAI,KAAK,CAAA,CAAA,CAAG,CAAA;AAC5C,MAAA,KAAA,MAAW,CAAA,IAAK,IAAI,OAAA,EAAS,KAAA,CAAM,KAAK,CAAA,IAAA,EAAO,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AACvD,MAAA,IAAI,IAAI,OAAA,CAAQ,MAAA,KAAW,CAAA,EAAG,KAAA,CAAM,KAAK,0CAA0C,CAAA;AAAA,IACrF;AAAA,EACF;AACA,EAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,IAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AACnB,IAAA,KAAA,MAAW,KAAK,KAAA,EAAO,KAAA,CAAM,IAAA,CAAK,CAAA,EAAA,EAAK,CAAC,CAAA,CAAE,CAAA;AAAA,EAC5C;AACA,EAAA,KAAA,CAAM,KAAK,sEAAsE,CAAA;AAEjF,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,MAAA,CAAO,QAAA,CAAS,KAAK,IAAI,KAAA,GAAQ,MAAA;AAAA,IACrC,SAAA;AAAA,IACA,KAAA,EAAO,GAAA,CAAI,GAAA,CAAI,KAAA,EAAO,UAAU,CAAA;AAAA,IAChC,WAAA,EAAa,GAAA,CAAI,GAAA,CAAI,WAAW,CAAA;AAAA,IAChC,QAAA,EAAU,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAA;AAAA,IAC1B,QAAA,EAAU,GAAA,CAAI,GAAA,CAAI,QAAQ,CAAA;AAAA,IAC1B,SAAA,EAAW,CAAA;AAAA,IACX,aAAA;AAAA,IACA,QAAA,EAAU,MAAA,CAAO,QAAA,CAAS,QAAQ,IAAI,QAAA,GAAW,MAAA;AAAA,IACjD,eAAA;AAAA,IACA,QAAA,EAAU,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA;AAAA,IACzB,OAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACF;AACF;AAEA,eAAe,gBAAA,CACb,KACA,QAAA,EAC4C;AAC5C,EAAA,IAAI,CAAC,GAAA,CAAI,QAAA,EAAU,OAAO,GAAA;AAC1B,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAU,MAAM,4BAAA,CAA6B,EAAE,GAAA,EAAK,IAAI,QAAA,EAAU,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,CAAA;AAI5F,IAAA,OAAO,uBAAuB,GAAA,EAAK,MAAA,CAAO,WAAW,IAAA,EAAM,MAAA,CAAO,OAAO,IAAI,CAAA;AAAA,EAC/E,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,EAAE,GAAG,GAAA,EAAK,YAAA,EAAc,IAAA,EAAM,UAAU,IAAA,EAAK;AAAA,EACtD;AACF;AAEA,eAAsB,4BAA4B,IAAA,EAIH;AAC7C,EAAA,IAAI,IAAA,CAAK,MAAM,IAAA,IAAQ,MAAA,CAAO,KAAK,EAAE,CAAA,CAAE,IAAA,EAAK,KAAM,EAAA,EAAI;AACpD,IAAA,MAAM,EAAE,UAAS,GAAI,MAAM,0BAA0B,EAAE,EAAA,EAAI,IAAA,CAAK,EAAA,EAAI,CAAA;AACpE,IAAA,OAAO,gBAAA,CAAiB,qBAAA,CAAsB,QAAQ,CAAA,EAAG,KAAK,QAAQ,CAAA;AAAA,EACxE;AACA,EAAA,MAAM,IAAA,GAAA,CAAQ,IAAA,CAAK,SAAA,IAAa,EAAA,EAAI,IAAA,EAAK;AACzC,EAAA,IAAI,CAAC,IAAA,EAAM,MAAM,IAAI,MAAM,wCAAwC,CAAA;AACnE,EAAA,MAAM,MAAA,GAAS,MAAM,0BAAA,EAA2B;AAChD,EAAA,MAAM,OAAA,GAAU,MAAM,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,GAAI,MAAA,CAAO,YAAY,EAAC;AACtE,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM;AAC9B,IAAA,MAAM,GAAA,GAAMA,UAAS,CAAC,CAAA;AACtB,IAAA,OAAO,GAAA,IAAO,IAAI,GAAA,CAAI,SAAA,IAAa,IAAI,UAAA,IAAc,GAAA,CAAI,UAAU,CAAA,KAAM,IAAA;AAAA,EAC3E,CAAC,CAAA;AACD,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,KAAA,CAAM,CAAA,gDAAA,EAAmD,IAAI,CAAA,CAAE,CAAA;AACnF,EAAA,MAAM,EAAA,GAAKA,SAAAA,CAAS,GAAG,CAAA,EAAG,EAAA;AAC1B,EAAA,IAAI,MAAM,IAAA,EAAM;AACd,IAAA,MAAM,EAAE,QAAA,EAAS,GAAI,MAAM,yBAAA,CAA0B,EAAE,EAAA,EAAI,MAAA,CAAO,EAAE,CAAA,EAAG,CAAA;AACvE,IAAA,OAAO,gBAAA,CAAiB,qBAAA,CAAsB,QAAQ,CAAA,EAAG,KAAK,QAAQ,CAAA;AAAA,EACxE;AACA,EAAA,OAAO,gBAAA,CAAiB,qBAAA,CAAsB,GAAG,CAAA,EAAG,KAAK,QAAQ,CAAA;AACnE;;;AC3OO,IAAM,0BAAA,GAA6C;AAAA,EACxD,EAAA,EAAI,yBAAA;AAAA,EACJ,aAAA,EAAe,KAAA;AAAA,EACf,iBAAiB,GAAA,EAAK;AACpB,IAAA,IAAI,GAAA,CAAI,aAAA,KAAkB,KAAA,EAAO,OAAO,KAAA;AACxC,IAAA,MAAM,CAAA,GAAI,OAAO,GAAA,CAAI,OAAA,KAAY,QAAA,GAAW,GAAA,CAAI,OAAA,GAAU,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,GAAA,CAAI,OAAO,GAAG,EAAE,CAAA;AACjG,IAAA,OAAO,+BAA+B,CAAC,CAAA;AAAA,EACzC,CAAA;AAAA,EACA,iBAAiB,KAAA,EAAO;AACtB,IAAA,OAAO,MAAM,QAAA,KAAa,KAAA,KAAU,MAAM,IAAA,KAAS,OAAA,IAAW,MAAM,IAAA,KAAS,QAAA,CAAA;AAAA,EAC/E,CAAA;AAAA,EACA,OAAA,EAAS;AAAA,IACP,EAAE,EAAA,EAAI,2BAAA,EAA6B,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,2BAAA,EAA6B,cAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,GAAG,MAAA,EAAQ,EAAE,WAAA,EAAa,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,cAAa,EAAG,mBAAA,EAAqB,EAAE,IAAA,EAAM,UAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,0BAAA,IAA6B,EAAE;AAAA,IAC5X,EAAE,EAAA,EAAI,+BAAA,EAAiC,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,sBAAA,EAAwB,cAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,GAAG,MAAA,EAAQ,EAAE,OAAA,EAAS,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,kBAAiB,EAAG,WAAA,EAAa,EAAE,IAAA,EAAM,UAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,mBAAA,IAAsB,EAAE;AAAA,IAC5W,EAAE,EAAA,EAAI,oCAAA,EAAsC,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,sBAAA,EAAwB,cAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,GAAG,MAAA,EAAQ,EAAE,OAAA,EAAS,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,kBAAiB,EAAG,mBAAA,EAAqB,EAAE,IAAA,EAAM,UAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,2CAAA,IAA8C,EAAE;AAAA,IACjZ,EAAE,EAAA,EAAI,qBAAA,EAAuB,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,oBAAA,EAAsB,cAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,GAAG,MAAA,EAAQ,EAAE,OAAA,EAAS,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,mBAAkB,EAAG,cAAA,EAAgB,EAAE,IAAA,EAAM,UAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,iCAAA,IAAoC,EAAE;AAAA,IAClX,EAAE,EAAA,EAAI,qBAAA,EAAuB,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,uBAAA,EAAyB,cAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,GAAG,MAAA,EAAQ,EAAE,WAAA,EAAa,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,mBAAkB,EAAG,SAAA,EAAW,EAAE,IAAA,EAAM,UAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,oBAAA,IAAuB,EAAE;AAAA,IACvW,EAAE,EAAA,EAAI,wBAAA,EAA0B,UAAA,EAAY,yBAAA,EAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,0BAAA,EAA4B,YAAA,EAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,CAAA,EAAG,MAAA,EAAQ,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,gBAAA,EAAiB,EAAE,EAAE;AAAA,IACtR,EAAE,EAAA,EAAI,yBAAA,EAA2B,UAAA,EAAY,yBAAA,EAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,kBAAA,EAAoB,YAAA,EAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,CAAA,EAAG,MAAA,EAAQ,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,gBAAA,EAAiB,EAAE,EAAE;AAAA,IAC/Q,EAAE,EAAA,EAAI,wBAAA,EAA0B,UAAA,EAAY,yBAAA,EAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,uBAAA,EAAyB,YAAA,EAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,CAAA,EAAG,MAAA,EAAQ,EAAE,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,mBAAA,EAAoB,EAAE,EAAE;AAAA,IACxR,EAAE,EAAA,EAAI,0BAAA,EAA4B,UAAA,EAAY,yBAAA,EAA2B,eAAe,KAAA,EAAO,WAAA,EAAa,sDAAA,EAAwD,YAAA,EAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,CAAA,EAAG,MAAA,EAAQ,EAAC,EAAE;AAAA,IACxO,EAAE,IAAI,+BAAA,EAAiC,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,sCAAA,EAAwC,YAAA,EAAc,IAAI,MAAA,EAAQ,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,UAAU,IAAA,EAAM,WAAA,EAAa,0BAAA,EAA2B,EAAE,EAAE;AAAA,IAC5Q,EAAE,EAAA,EAAI,wBAAA,EAA0B,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,sBAAA,EAAwB,cAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,GAAG,MAAA,EAAQ,EAAE,OAAA,EAAS,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,kBAAiB,EAAG,EAAA,EAAI,EAAE,IAAA,EAAM,UAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,WAAA,IAAc,EAAE;AAAA,IACpV,EAAE,IAAI,sBAAA,EAAwB,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,aAAa,+JAAA,EAAiK,YAAA,EAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,CAAA,EAAG,MAAA,EAAQ,EAAE,OAAA,EAAS,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,MAAM,WAAA,EAAa,UAAA,IAAc,OAAA,EAAS,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,MAAM,WAAA,EAAa,gBAAA,IAAoB,SAAA,EAAW,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,MAAM,WAAA,EAAa,8BAAA,IAAiC,EAAE;AAAA,IAC3jB,EAAE,EAAA,EAAI,8BAAA,EAAgC,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,2BAAA,EAA6B,cAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,GAAG,MAAA,EAAQ,EAAE,OAAA,EAAS,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,qBAAoB,EAAG,cAAA,EAAgB,EAAE,IAAA,EAAM,UAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,wBAAA,IAA2B,EAAE;AAAA,IAC3X,EAAE,EAAA,EAAI,6BAAA,EAA+B,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,gDAAA,EAAkD,cAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,GAAG,MAAA,EAAQ,EAAE,KAAA,EAAO,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,gCAA+B,EAAG,QAAA,EAAU,EAAE,IAAA,EAAM,UAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,kDAAA,IAAqD,EAAE;AAAA,IAC5a,EAAE,IAAI,6BAAA,EAA+B,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,aAAa,uCAAA,EAAyC,YAAA,EAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,CAAA,EAAG,MAAA,EAAQ,EAAE,KAAA,EAAO,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,MAAM,WAAA,EAAa,8BAAA,IAAkC,QAAA,EAAU,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,MAAM,WAAA,EAAa,4BAAA,IAAgC,QAAA,EAAU,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,MAAM,WAAA,EAAa,kDAAA,IAAqD,EAAE;AAAA,IAC5f,EAAE,EAAA,EAAI,+BAAA,EAAiC,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,mBAAA,EAAqB,cAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,GAAG,MAAA,EAAQ,EAAE,UAAA,EAAY,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,wBAAuB,EAAG,OAAA,EAAS,EAAE,IAAA,EAAM,UAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,6BAAA,IAAgC,EAAE;AAAA,IACxX,EAAE,EAAA,EAAI,+BAAA,EAAiC,UAAA,EAAY,yBAAA,EAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,kCAAA,EAAoC,YAAA,EAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,CAAA,EAAG,MAAA,EAAQ,EAAE,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,sBAAA,EAAuB,EAAE,EAAE;AAAA,IAC9S,EAAE,EAAA,EAAI,uBAAA,EAAyB,UAAA,EAAY,yBAAA,EAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,8BAAA,EAAgC,YAAA,EAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,CAAA,EAAG,MAAA,EAAQ,EAAE,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,sBAAA,EAAuB,EAAE,EAAE;AAAA,IAClS,EAAE,EAAA,EAAI,sBAAA,EAAwB,UAAA,EAAY,yBAAA,EAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,mBAAA,EAAqB,YAAA,EAAc,CAAC,QAAA,EAAU,aAAA,EAAe,cAAc,CAAA,EAAG,MAAA,EAAQ,EAAE,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,sBAAA,EAAuB,EAAE,EAAE;AAAA,IACtR,EAAE,EAAA,EAAI,oCAAA,EAAsC,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,mEAAA,EAAqE,YAAA,EAAc,EAAC,EAAG,MAAA,EAAQ,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,gBAAA,IAAoB,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,6BAAA,IAAgC,EAAE;AAAA,IAC9X,EAAE,EAAA,EAAI,gCAAA,EAAkC,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,8EAAA,EAAgF,YAAA,EAAc,EAAC,EAAG,MAAA,EAAQ,EAAE,EAAA,EAAI,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,qBAAA,IAAyB,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,sBAAA,IAAyB,EAAE;AAAA,IACjY,EAAE,EAAA,EAAI,6BAAA,EAA+B,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,wCAAA,EAA0C,cAAc,CAAC,QAAA,EAAU,aAAa,CAAA,EAAG,QAAQ,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,qBAAoB,EAAG,QAAA,EAAU,EAAE,IAAA,EAAM,UAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,oCAAA,IAAuC,EAAE;AAAA,IAC/X,EAAE,IAAI,sCAAA,EAAwC,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,qCAAA,EAAuC,YAAA,EAAc,IAAI,MAAA,EAAQ,EAAE,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,UAAU,IAAA,EAAM,WAAA,EAAa,0BAAA,EAA2B,EAAE,EAAE;AAAA,IAClR,EAAE,IAAI,8BAAA,EAAgC,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,kCAAA,EAAoC,YAAA,EAAc,IAAI,MAAA,EAAQ,EAAE,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,UAAU,IAAA,EAAM,WAAA,EAAa,oBAAA,EAAqB,EAAE,EAAE;AAAA,IAChQ,EAAE,EAAA,EAAI,kCAAA,EAAoC,YAAY,yBAAA,EAA2B,aAAA,EAAe,OAAO,WAAA,EAAa,iDAAA,EAAmD,YAAA,EAAc,IAAI,MAAA,EAAQ,EAAE,SAAS,EAAE,IAAA,EAAM,UAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,uDAAA,IAA2D,KAAA,EAAO,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,MAAM,WAAA,EAAa,cAAA,IAAkB,OAAA,EAAS,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,MAAM,WAAA,EAAa,eAAA,IAAkB,EAAE;AAAA,IAC3c,EAAE,EAAA,EAAI,iCAAA,EAAmC,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,6CAAA,EAA+C,YAAA,EAAc,EAAC,EAAG,MAAA,EAAQ,EAAE,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,cAAA,IAAkB,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,WAAA,IAAc,EAAE;AAAA,IAC9U,EAAE,EAAA,EAAI,4BAAA,EAA8B,YAAY,yBAAA,EAA2B,aAAA,EAAe,OAAO,WAAA,EAAa,sDAAA,EAAwD,YAAA,EAAc,IAAI,MAAA,EAAQ,EAAE,OAAO,EAAE,IAAA,EAAM,UAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,0CAAA,IAA8C,KAAA,EAAO,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,OAAO,WAAA,EAAa,kCAAA,IAAsC,KAAA,EAAO,EAAE,MAAM,QAAA,EAAU,QAAA,EAAU,OAAO,WAAA,EAAa,kDAAA,IAAqD,EAAE;AAAA,IAClf,EAAE,EAAA,EAAI,4BAAA,EAA8B,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,sFAAA,EAAwF,YAAA,EAAc,EAAC,EAAG,MAAA,EAAQ,EAAE,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,kCAAA,IAAsC,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,kDAAA,IAAqD,EAAE;AAAA,IAC7a,EAAE,EAAA,EAAI,4BAAA,EAA8B,UAAA,EAAY,yBAAA,EAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,oEAAA,EAAiE,YAAA,EAAc,EAAC,EAAG,MAAA,EAAQ,EAAE,GAAA,EAAK,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,SAAA,EAAU,EAAG,GAAA,EAAK,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,WAAA,EAAY,EAAG,QAAA,EAAU,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,+BAAA,EAAgC,EAAG,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,wCAAA,EAAyC,EAAG,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,oCAAA,EAAqC,EAAE,EAAE;AAAA,IACjnB,EAAE,IAAI,4BAAA,EAA8B,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,2CAAA,EAA6C,YAAA,EAAc,IAAI,MAAA,EAAQ,EAAE,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAU,UAAU,KAAA,EAAO,WAAA,EAAa,iCAAA,EAAkC,EAAE,EAAE;AAAA,IACrR,EAAE,EAAA,EAAI,+BAAA,EAAiC,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,4CAAA,EAA8C,YAAA,EAAc,EAAC,EAAG,MAAA,EAAQ,EAAE,GAAA,EAAK,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,WAAA,IAAe,GAAA,EAAK,EAAE,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,KAAA,EAAO,WAAA,EAAa,8BAAA,IAAiC,EAAE;AAAA,IACxV,EAAE,IAAI,iCAAA,EAAmC,UAAA,EAAY,2BAA2B,aAAA,EAAe,KAAA,EAAO,WAAA,EAAa,uBAAA,EAAyB,YAAA,EAAc,IAAI,MAAA,EAAQ,EAAE,GAAA,EAAK,EAAE,IAAA,EAAM,QAAA,EAAU,UAAU,KAAA,EAAO,WAAA,EAAa,WAAA,EAAY,EAAE;AAAE;AAEjP;AAEA,sBAAA,CAAuB,0BAA0B,CAAA","file":"index.cjs","sourcesContent":["import type { ProtocolModule } from './types.js'\n\nconst modules: ProtocolModule[] = []\n\nexport function registerProtocolModule(mod: ProtocolModule): void {\n const existing = modules.findIndex((m) => m.id === mod.id)\n if (existing >= 0) {\n modules[existing] = mod\n } else {\n modules.push(mod)\n }\n}\n\nexport function getProtocolModules(): readonly ProtocolModule[] {\n return modules\n}\n\nexport function getProtocolModule(id: string): ProtocolModule | undefined {\n return modules.find((m) => m.id === id)\n}\n\nexport function getActionsByChainCategory(category: string): ProtocolModule['actions'] {\n return modules.filter((m) => m.chainCategory === category).flatMap((m) => m.actions)\n}\n","/** Parse chain id for comparisons (decimal, 0x hex, CAIP-2 eip155:N, bigint). */\nexport function parseEvmChainIdToNumber(chainId: string | number | bigint | null | undefined): number {\n if (chainId == null) return Number.NaN\n if (typeof chainId === 'bigint') {\n const n = Number(chainId)\n return Number.isSafeInteger(n) && n >= 0 ? n : Number.NaN\n }\n if (typeof chainId === 'number') {\n return Number.isInteger(chainId) && chainId >= 0 ? chainId : Number.NaN\n }\n const t = String(chainId).trim()\n if (!t) return Number.NaN\n const low = t.toLowerCase()\n if (low.startsWith('eip155:')) {\n const rest = t.slice('eip155:'.length).trim()\n const n = Number.parseInt(rest, 10)\n return Number.isNaN(n) || n < 0 ? Number.NaN : n\n }\n if (low.startsWith('0x')) {\n return Number.parseInt(t, 16)\n }\n return Number.parseInt(t, 10)\n}\n","/**\n * ContinuumDAO (CTM / veCTM) — Linea escrow + node attach, Ethereum CTM hold.\n * CTM and Linea VotingEscrow are configured on mainnet; other deployment fields\n * stay zero until redeployed. Callers must skip seed / write paths when\n * {@link isConfiguredAddress} is false.\n */\nimport { getAddress, zeroAddress } from 'viem'\nimport { parseEvmChainIdToNumber } from '../../../chains/evm/chainIdParse.js'\n\nexport const CONTINUUM_DAO_PROTOCOL_ID = 'continuum-dao'\n\nexport const CONTINUUM_DAO_ETHEREUM_CHAIN_ID = 1\nexport const CONTINUUM_DAO_LINEA_CHAIN_ID = 59144\nexport const CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID = 59141\n\nexport const CTM_TOKEN_NAME = 'Continuum'\nexport const CTM_TOKEN_SYMBOL = 'CTM'\nexport const VECTM_TOKEN_NAME = 'Voting Escrow Continuum'\nexport const VECTM_TOKEN_SYMBOL = 'veCTM'\nexport const CTM_TOKEN_DECIMALS = 18\n\nexport const WEEK_SECONDS = 7 * 86400\nexport const MAXTIME_SECONDS = 4 * 365 * 86400\n/** Node-app / MCP lock-duration cap (4 years floored to whole weeks). */\nexport const VECTM_MAX_LOCK_WEEKS = 208\n/** VotingEscrow.minimumLock default (1 CTM). Live value is read on-chain when available. */\nexport const VECTM_DEFAULT_MINIMUM_LOCK_WEI = 10n ** 18n\n/** VotingEscrow.liquidate — `value <= 100 gwei` reverts VotingEscrow_InvalidValue. */\nexport const VECTM_LIQ_MIN_LOCKED_WEI = 100n\nexport const VECTM_LIQ_PENALTY_NUM = 50_000n\nexport const VECTM_LIQ_PENALTY_DEN = 100_000n\n\nexport type ContinuumDaoDeployment = {\n ctm: `0x${string}`\n votingEscrow: `0x${string}`\n nodeProperties: `0x${string}`\n rewards: `0x${string}`\n governor: `0x${string}`\n}\n\nconst UNSET: ContinuumDaoDeployment = {\n ctm: zeroAddress,\n votingEscrow: zeroAddress,\n nodeProperties: zeroAddress,\n rewards: zeroAddress,\n governor: zeroAddress,\n}\n\n/** Production CTM token — same address on Linea mainnet and Ethereum mainnet. */\nexport const CTM_TOKEN_ADDRESS = getAddress('0x2026027054F5beBCEB650aBD62dC623e327658e7')\n\n/** Linea mainnet VotingEscrow (veCTM). */\nexport const VOTING_ESCROW_LINEA_ADDRESS = getAddress('0x221EC90B3B083A8501A37bdeb7035CeaedF3C31f')\n\n/** Current Linea ContinuumDAO governor (backend catalog ids start at 0). */\nexport const CONTINUUM_DAO_LINEA_GOVERNOR_ADDRESS = getAddress('0x76FF2CB03175900F1D83328C82D27EA9aeaF2355')\n\n/**\n * Superseded Linea ContinuumDAO governor. The public catalog keeps its two\n * proposals as ids **-2** and **-1** so the new contract can start at 0.\n */\nexport const CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS = getAddress('0x4800F9f1dC1b6daCA841B71E0531F547D374168E')\n\n/** Placeholder deployments — fill NodeProperties / Rewards / governor after redeploy. */\nexport const CONTINUUM_DAO_DEPLOYMENTS: Readonly<Record<number, ContinuumDaoDeployment>> = {\n [CONTINUUM_DAO_LINEA_CHAIN_ID]: {\n ...UNSET,\n ctm: CTM_TOKEN_ADDRESS,\n votingEscrow: VOTING_ESCROW_LINEA_ADDRESS,\n },\n [CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID]: { ...UNSET },\n [CONTINUUM_DAO_ETHEREUM_CHAIN_ID]: {\n ...UNSET,\n ctm: CTM_TOKEN_ADDRESS,\n },\n}\n\n/** Public ContinuumDAO governance API (same host continuumdao-app proxies). */\nexport const CONTINUUM_DAO_GOVERNANCE_API = 'https://app-api.continuumdao.org'\n\nexport function isConfiguredAddress(addr?: string | null): boolean {\n if (!addr?.trim()) return false\n try {\n return getAddress(addr) !== zeroAddress\n } catch {\n return false\n }\n}\n\nexport function continuumDaoDeployment(chainId: number): ContinuumDaoDeployment | null {\n return CONTINUUM_DAO_DEPLOYMENTS[chainId] ?? null\n}\n\nexport function isContinuumDaoLockChain(chainId: number): boolean {\n return chainId === CONTINUUM_DAO_LINEA_CHAIN_ID || chainId === CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID\n}\n\nexport function isContinuumDaoSupportedChainId(chainId: number): boolean {\n return continuumDaoDeployment(chainId) != null\n}\n\nexport function ctmTokenAddressOnEvmChain(chainId: number): `0x${string}` | null {\n const ctm = continuumDaoDeployment(chainId)?.ctm\n return ctm && isConfiguredAddress(ctm) ? getAddress(ctm) : null\n}\n\nexport function votingEscrowAddressOnEvmChain(chainId: number): `0x${string}` | null {\n const ve = continuumDaoDeployment(chainId)?.votingEscrow\n return ve && isConfiguredAddress(ve) ? getAddress(ve) : null\n}\n\nexport function governorAddressOnEvmChain(chainId: number): `0x${string}` | null {\n const gov = continuumDaoDeployment(chainId)?.governor\n return gov && isConfiguredAddress(gov) ? getAddress(gov) : null\n}\n\nfunction sameAddr(a: string, b: string): boolean {\n try {\n return getAddress(a) === getAddress(b)\n } catch {\n return false\n }\n}\n\nexport function isContinuumDaoCtmOnAssetsChain(assetsChainId: string, contractAddress: string): boolean {\n const n = parseEvmChainIdToNumber(assetsChainId)\n if (Number.isNaN(n) || n < 0) return false\n const expected = ctmTokenAddressOnEvmChain(n)\n if (!expected) return false\n return sameAddr(contractAddress, expected)\n}\n\nexport function isContinuumDaoVeCtmOnAssetsChain(assetsChainId: string, contractAddress: string): boolean {\n const n = parseEvmChainIdToNumber(assetsChainId)\n if (Number.isNaN(n) || n < 0) return false\n const expected = votingEscrowAddressOnEvmChain(n)\n if (!expected) return false\n return sameAddr(contractAddress, expected)\n}\n\nexport function isVotingEscrowContinuumName(name?: string | null): boolean {\n return (name ?? '').trim() === VECTM_TOKEN_NAME\n}\n\nexport function isCtmTokenSymbol(symbol?: string | null): boolean {\n return (symbol ?? '').trim().toUpperCase() === CTM_TOKEN_SYMBOL\n}\n\nexport type ContinuumDaoDefaultAsset = {\n chainId: number\n tokenType: 'CTMERC20' | 'ERC721'\n contractAddress: `0x${string}`\n name: string\n symbol: string\n decimals?: number\n}\n\n/** Default registry rows when the configured address is non-zero. */\nexport function listContinuumDaoDefaultAssets(): ContinuumDaoDefaultAsset[] {\n const out: ContinuumDaoDefaultAsset[] = []\n for (const chainId of [\n CONTINUUM_DAO_LINEA_CHAIN_ID,\n CONTINUUM_DAO_LINEA_SEPOLIA_CHAIN_ID,\n CONTINUUM_DAO_ETHEREUM_CHAIN_ID,\n ]) {\n const dep = continuumDaoDeployment(chainId)\n if (!dep) continue\n if (isConfiguredAddress(dep.ctm)) {\n out.push({\n chainId,\n tokenType: 'CTMERC20',\n contractAddress: getAddress(dep.ctm),\n name: CTM_TOKEN_NAME,\n symbol: CTM_TOKEN_SYMBOL,\n decimals: CTM_TOKEN_DECIMALS,\n })\n }\n if (isContinuumDaoLockChain(chainId) && isConfiguredAddress(dep.votingEscrow)) {\n out.push({\n chainId,\n tokenType: 'ERC721',\n contractAddress: getAddress(dep.votingEscrow),\n name: VECTM_TOKEN_NAME,\n symbol: VECTM_TOKEN_SYMBOL,\n })\n }\n }\n return out\n}\n","/**\n * Shared CTM / veCTM escrow rules used by MCP builders and (via the same\n * builders) the node-app dialog. Mirrors VotingEscrow.sol + ContinuumDaoDialog.\n */\nimport { getAddress, zeroAddress } from 'viem'\nimport {\n MAXTIME_SECONDS,\n VECTM_DEFAULT_MINIMUM_LOCK_WEI,\n VECTM_LIQ_MIN_LOCKED_WEI,\n VECTM_LIQ_PENALTY_DEN,\n VECTM_LIQ_PENALTY_NUM,\n VECTM_MAX_LOCK_WEEKS,\n WEEK_SECONDS,\n} from './constants.js'\n\nexport type VeCtmLockState = {\n tokenId: bigint\n amountWei: bigint\n endSec: bigint\n owner: `0x${string}`\n attached: boolean\n vePowerWei: bigint\n}\n\nexport function maxLockDurationSeconds(): number {\n return Math.min(VECTM_MAX_LOCK_WEEKS * WEEK_SECONDS, MAXTIME_SECONDS)\n}\n\nexport function floorUnlockTimeSeconds(nowSec: number, durationSec: bigint): bigint {\n return ((BigInt(nowSec) + durationSec) / BigInt(WEEK_SECONDS)) * BigInt(WEEK_SECONDS)\n}\n\nexport function assertCtmAmountAtLeastMinimum(amountWei: bigint, minimumLockWei: bigint, label: string): void {\n const min = minimumLockWei > 0n ? minimumLockWei : VECTM_DEFAULT_MINIMUM_LOCK_WEI\n if (amountWei < min) {\n throw new Error(`${label} must be at least ${formatCtmWei(min)} CTM (VotingEscrow.minimumLock).`)\n }\n}\n\nexport function assertCreateLockAmount(amountWei: bigint, minimumLockWei: bigint, balanceWei?: bigint): void {\n if (amountWei <= 0n) throw new Error('CTM amount must be greater than zero.')\n assertCtmAmountAtLeastMinimum(amountWei, minimumLockWei, 'Create lock')\n if (balanceWei != null && amountWei > balanceWei) {\n throw new Error(`Create lock ${formatCtmWei(amountWei)} CTM exceeds KeyGen balance ${formatCtmWei(balanceWei)} CTM.`)\n }\n}\n\nexport function assertLockDurationSeconds(durationSec: bigint, nowSec: number, label: string): bigint {\n if (durationSec <= 0n) throw new Error(`${label} duration must be greater than zero.`)\n if (durationSec < BigInt(WEEK_SECONDS)) {\n throw new Error(`${label} duration must be at least 1 week (${WEEK_SECONDS} seconds).`)\n }\n if (durationSec > BigInt(maxLockDurationSeconds())) {\n throw new Error(\n `${label} duration cannot exceed ${VECTM_MAX_LOCK_WEEKS} weeks (VotingEscrow MAXTIME, week-aligned).`,\n )\n }\n const unlock = floorUnlockTimeSeconds(nowSec, durationSec)\n if (unlock <= BigInt(nowSec)) {\n throw new Error(`${label} unlock time must be after the current week boundary.`)\n }\n if (unlock > BigInt(nowSec) + BigInt(MAXTIME_SECONDS)) {\n throw new Error(`${label} unlock time exceeds VotingEscrow MAXTIME (4 years).`)\n }\n return unlock\n}\n\nexport function assertIncreaseAmount(amountWei: bigint, lock: VeCtmLockState, nowSec: number, balanceWei?: bigint): void {\n if (amountWei <= 0n) throw new Error('CTM amount must be greater than zero.')\n if (lock.amountWei === 0n) throw new Error(`veCTM #${lock.tokenId} has no existing lock.`)\n if (lock.endSec <= BigInt(nowSec)) {\n throw new Error(`Cannot increase amount on expired veCTM #${lock.tokenId}. Withdraw or create a new lock.`)\n }\n if (balanceWei != null && amountWei > balanceWei) {\n throw new Error(\n `Increase amount ${formatCtmWei(amountWei)} CTM exceeds KeyGen balance ${formatCtmWei(balanceWei)} CTM.`,\n )\n }\n}\n\nexport function assertIncreaseUnlockTime(durationSec: bigint, lock: VeCtmLockState, nowSec: number): bigint {\n if (lock.amountWei === 0n) throw new Error(`veCTM #${lock.tokenId} has no existing lock.`)\n if (lock.endSec <= BigInt(nowSec)) {\n throw new Error(`Cannot increase unlock time on expired veCTM #${lock.tokenId}.`)\n }\n const unlock = assertLockDurationSeconds(durationSec, nowSec, 'Increase unlock time')\n if (unlock <= lock.endSec) {\n throw new Error(\n `New unlock time must be after the current lock end (${lock.endSec.toString()}). Pick a later week-aligned date.`,\n )\n }\n return unlock\n}\n\nexport function assertSplitExtracted(\n extractedWei: bigint,\n lock: VeCtmLockState,\n minimumLockWei: bigint,\n nowSec: number,\n): void {\n if (lock.attached) {\n throw new Error(`Split is blocked while veCTM #${lock.tokenId} is attached to a node. Request detach first.`)\n }\n if (lock.amountWei === 0n) throw new Error(`veCTM #${lock.tokenId} has no existing lock.`)\n if (lock.endSec <= BigInt(nowSec)) {\n throw new Error(`Cannot split expired veCTM #${lock.tokenId}.`)\n }\n const min = minimumLockWei > 0n ? minimumLockWei : VECTM_DEFAULT_MINIMUM_LOCK_WEI\n if (lock.amountWei < min * 2n) {\n throw new Error('Split requires at least 2 CTM locked (1 CTM minimum per resulting lock).')\n }\n if (extractedWei < min) {\n throw new Error(`Extract at least ${formatCtmWei(min)} CTM into the new lock.`)\n }\n if (extractedWei > lock.amountWei - min) {\n throw new Error(`The original lock must keep at least ${formatCtmWei(min)} CTM after the split.`)\n }\n}\n\nexport function assertMerge(fromLock: VeCtmLockState, toLock: VeCtmLockState): void {\n if (fromLock.tokenId === toLock.tokenId) throw new Error('Merge requires two different token ids.')\n if (fromLock.attached) {\n throw new Error(`Merge is blocked while veCTM #${fromLock.tokenId} is attached to a node.`)\n }\n if (toLock.attached) {\n throw new Error(`Merge is blocked while veCTM #${toLock.tokenId} is attached to a node.`)\n }\n if (fromLock.owner.toLowerCase() !== toLock.owner.toLowerCase()) {\n throw new Error('Merge requires both veCTM locks to have the same owner.')\n }\n}\n\nexport function assertWithdraw(lock: VeCtmLockState, nowSec: number): void {\n if (lock.attached) {\n throw new Error(`Withdraw is blocked while veCTM #${lock.tokenId} is attached to a node. Request detach first.`)\n }\n if (lock.endSec <= 0n) throw new Error(`Unlock time unavailable for veCTM #${lock.tokenId}.`)\n if (lock.endSec > BigInt(nowSec)) {\n throw new Error(`Withdraw is available after the lock expires (unlock ${lock.endSec.toString()}).`)\n }\n}\n\nexport function computeLiquidationAmounts(args: {\n lockedAmountWei: bigint\n vePowerWei: bigint\n lockEndSec: bigint\n nowSec: number\n}): {\n userWei: bigint\n treasuryWei: bigint\n lockExpired: boolean\n tooSmall: boolean\n zeroPenalty: boolean\n} {\n if (args.lockEndSec > 0n && BigInt(args.nowSec) >= args.lockEndSec) {\n return {\n userWei: args.lockedAmountWei,\n treasuryWei: 0n,\n lockExpired: true,\n tooSmall: false,\n zeroPenalty: false,\n }\n }\n if (args.lockedAmountWei <= VECTM_LIQ_MIN_LOCKED_WEI) {\n return {\n userWei: 0n,\n treasuryWei: 0n,\n lockExpired: false,\n tooSmall: true,\n zeroPenalty: false,\n }\n }\n const penalty = (args.vePowerWei * VECTM_LIQ_PENALTY_NUM) / VECTM_LIQ_PENALTY_DEN\n if (penalty === 0n) {\n return {\n userWei: 0n,\n treasuryWei: 0n,\n lockExpired: false,\n tooSmall: false,\n zeroPenalty: true,\n }\n }\n return {\n userWei: args.lockedAmountWei - penalty,\n treasuryWei: penalty,\n lockExpired: false,\n tooSmall: false,\n zeroPenalty: false,\n }\n}\n\nexport function assertLiquidate(lock: VeCtmLockState, liquidationsEnabled: boolean | null, nowSec: number): void {\n if (lock.attached) {\n throw new Error(`Liquidate is blocked while veCTM #${lock.tokenId} is attached to a node. Request detach first.`)\n }\n if (liquidationsEnabled === false) {\n throw new Error('Liquidations are currently disabled on-chain.')\n }\n const preview = computeLiquidationAmounts({\n lockedAmountWei: lock.amountWei,\n vePowerWei: lock.vePowerWei,\n lockEndSec: lock.endSec,\n nowSec,\n })\n if (preview.tooSmall) throw new Error('Locked amount is too small to liquidate.')\n if (preview.zeroPenalty) throw new Error('Voting power is too low to compute a liquidation penalty.')\n}\n\nexport function assertDelegatee(delegateeRaw: string, executor: string): `0x${string}` {\n const delegatee = getAddress(delegateeRaw)\n if (delegatee === zeroAddress) {\n throw new Error('Zero address is not allowed. Use undelegate to return power to this KeyGen.')\n }\n const self = getAddress(executor)\n if (delegatee === self) {\n throw new Error('This is this KeyGen’s address — use undelegate instead.')\n }\n return delegatee\n}\n\nexport function assertUndelegateNotAlreadySelf(alreadySelf: boolean, account: string): void {\n if (alreadySelf) {\n throw new Error(`Voting power is already at this KeyGen (${getAddress(account)}).`)\n }\n}\n\nexport function assertTransfer(lock: VeCtmLockState, toRaw: string, fromRaw: string): `0x${string}` {\n if (lock.attached) {\n throw new Error(`Transfer is blocked while veCTM #${lock.tokenId} is attached to a node.`)\n }\n const to = getAddress(toRaw)\n const from = getAddress(fromRaw)\n if (to === zeroAddress) throw new Error('Cannot transfer veCTM to the zero address.')\n if (to === from) throw new Error('Transfer recipient must be different from this KeyGen.')\n return to\n}\n\nexport function assertExecutorOwnsLock(lock: VeCtmLockState, executor: string): void {\n if (lock.owner.toLowerCase() !== getAddress(executor).toLowerCase()) {\n throw new Error(`KeyGen ${getAddress(executor)} does not own veCTM #${lock.tokenId} (owner ${lock.owner}).`)\n }\n}\n\nfunction formatCtmWei(wei: bigint): string {\n const whole = wei / 10n ** 18n\n const frac = wei % 10n ** 18n\n if (frac === 0n) return whole.toString()\n const fracStr = frac.toString().padStart(18, '0').replace(/0+$/, '')\n return `${whole.toString()}.${fracStr}`\n}\n","import { http, type Transport } from 'viem'\n\n/**\n * Optional browser transport for protocol `eth_*` reads (allowance, decimals, spoke views).\n * Node / MCP leave this unset and use viem `http(rpcUrl)`.\n */\nlet evmRpcTransportFactory: ((rpcUrl: string) => Transport) | undefined\n\nexport function setDefiEvmRpcTransportFactory(factory: ((rpcUrl: string) => Transport) | undefined): void {\n evmRpcTransportFactory = factory\n}\n\nexport function getDefiEvmRpcTransportFactory(): ((rpcUrl: string) => Transport) | undefined {\n return evmRpcTransportFactory\n}\n\n/** Same-origin proxy in the browser when the app has called {@link setDefiEvmRpcTransportFactory}. */\nexport function defiEvmTransport(rpcUrl: string, opts?: Parameters<typeof http>[1]): Transport {\n const url = rpcUrl.trim()\n return evmRpcTransportFactory?.(url) ?? http(url, opts)\n}\n","/**\n * On-chain preflight for CTM / veCTM MCP builders.\n * Reads VotingEscrow + NodeProperties so agents cannot assemble reverting batches.\n */\nimport { createPublicClient, defineChain, getAddress, parseAbi, zeroAddress, type Address } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { VECTM_DEFAULT_MINIMUM_LOCK_WEI, isConfiguredAddress } from './constants.js'\nimport {\n assertCreateLockAmount,\n assertDelegatee,\n assertExecutorOwnsLock,\n assertIncreaseAmount,\n assertIncreaseUnlockTime,\n assertLiquidate,\n assertLockDurationSeconds,\n assertMerge,\n assertSplitExtracted,\n assertTransfer,\n assertUndelegateNotAlreadySelf,\n assertWithdraw,\n type VeCtmLockState,\n} from './escrowRules.js'\n\nconst veReadAbi = parseAbi([\n 'function minimumLock() view returns (uint256)',\n 'function locked(uint256 tokenId) view returns (int128 amount, uint256 end)',\n 'function ownerOf(uint256 tokenId) view returns (address)',\n 'function balanceOfNFT(uint256 tokenId) view returns (uint256)',\n 'function liquidationsEnabled() view returns (bool)',\n 'function nodeProperties() view returns (address)',\n 'function rewards() view returns (address)',\n 'function delegates(address account) view returns (address)',\n 'function token() view returns (address)',\n])\nconst erc20Abi = parseAbi(['function balanceOf(address owner) view returns (uint256)'])\nconst nodePropsAbi = parseAbi([\n 'function attachedKeyGen(uint256 tokenId) view returns (address)',\n 'function attachedTokenId(address keyGen) view returns (uint256)',\n 'function nodeRequestingDetachment(uint256 tokenId) view returns (bool)',\n])\nconst rewardsAbi = parseAbi(['function unclaimedRewards(uint256 tokenId) view returns (uint256)'])\nconst mpaReadAbi = parseAbi([\n 'function getNodeWithdrawAuthority(string nodeKey) view returns (address)',\n 'function ve() view returns (address)',\n 'function veCtmThresholdPower() view returns (uint256)',\n 'function nodeProperties() view returns (address)',\n])\n\nfunction publicClient(rpcUrl: string, chainId: number) {\n return createPublicClient({\n chain: defineChain({\n id: chainId,\n name: 'ContinuumDAO escrow',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl.trim()] } },\n }),\n transport: defiEvmTransport(rpcUrl.trim()),\n })\n}\n\nexport async function readMinimumLockWei(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n}): Promise<bigint> {\n const client = publicClient(args.rpcUrl, args.chainId)\n try {\n const min = await client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'minimumLock',\n })\n return min > 0n ? min : VECTM_DEFAULT_MINIMUM_LOCK_WEI\n } catch {\n return VECTM_DEFAULT_MINIMUM_LOCK_WEI\n }\n}\n\nexport async function readCtmBalanceWei(args: {\n rpcUrl: string\n chainId: number\n ctm: Address\n owner: Address\n}): Promise<bigint | undefined> {\n const client = publicClient(args.rpcUrl, args.chainId)\n try {\n return await client.readContract({\n address: args.ctm,\n abi: erc20Abi,\n functionName: 'balanceOf',\n args: [args.owner],\n })\n } catch {\n return undefined\n }\n}\n\nexport async function readVeCtmLockState(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n tokenId: bigint\n}): Promise<VeCtmLockState> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const [lockedPair, owner, vePower, nodeProperties] = await Promise.all([\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'locked',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'ownerOf',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'balanceOfNFT',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'nodeProperties',\n }),\n ])\n const amountRaw = lockedPair[0]\n const amountWei = amountRaw < 0n ? 0n : BigInt(amountRaw)\n let attached = false\n if (isConfiguredAddress(nodeProperties)) {\n try {\n const attachedKey = await client.readContract({\n address: getAddress(nodeProperties),\n abi: nodePropsAbi,\n functionName: 'attachedKeyGen',\n args: [args.tokenId],\n })\n attached = attachedKey !== zeroAddress\n } catch {\n attached = false\n }\n }\n return {\n tokenId: args.tokenId,\n amountWei,\n endSec: lockedPair[1],\n owner: getAddress(owner),\n attached,\n vePowerWei: vePower,\n }\n}\n\nasync function assertNoUnclaimedRewards(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n tokenId: bigint\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n let rewards: Address\n try {\n rewards = await client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'rewards',\n })\n } catch {\n return\n }\n if (!isConfiguredAddress(rewards)) return\n try {\n const unclaimed = await client.readContract({\n address: rewards,\n abi: rewardsAbi,\n functionName: 'unclaimedRewards',\n args: [args.tokenId],\n })\n if (unclaimed !== 0n) {\n throw new Error(`veCTM #${args.tokenId} has unclaimed rewards. Claim them before this escrow action.`)\n }\n } catch (err) {\n if (err instanceof Error && err.message.includes('unclaimed rewards')) throw err\n }\n}\n\nexport async function preflightCreateLock(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n ctm: Address\n owner: Address\n amountWei: bigint\n durationSec: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const [minimumLockWei, balanceWei] = await Promise.all([\n readMinimumLockWei(args),\n readCtmBalanceWei(args),\n ])\n assertCreateLockAmount(args.amountWei, minimumLockWei, balanceWei)\n assertLockDurationSeconds(args.durationSec, nowSec, 'Create lock')\n}\n\nexport async function preflightIncreaseAmount(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n ctm: Address\n owner: Address\n tokenId: bigint\n amountWei: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const [lock, balanceWei] = await Promise.all([\n readVeCtmLockState(args),\n readCtmBalanceWei(args),\n ])\n assertExecutorOwnsLock(lock, args.owner)\n assertIncreaseAmount(args.amountWei, lock, nowSec, balanceWei)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightIncreaseUnlockTime(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n durationSec: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const lock = await readVeCtmLockState(args)\n assertExecutorOwnsLock(lock, args.owner)\n assertIncreaseUnlockTime(args.durationSec, lock, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightSplit(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n extractedWei: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const [lock, minimumLockWei] = await Promise.all([\n readVeCtmLockState(args),\n readMinimumLockWei(args),\n ])\n assertExecutorOwnsLock(lock, args.owner)\n assertSplitExtracted(args.extractedWei, lock, minimumLockWei, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightMerge(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n fromTokenId: bigint\n toTokenId: bigint\n}): Promise<void> {\n const [fromLock, toLock] = await Promise.all([\n readVeCtmLockState({ ...args, tokenId: args.fromTokenId }),\n readVeCtmLockState({ ...args, tokenId: args.toTokenId }),\n ])\n assertExecutorOwnsLock(fromLock, args.owner)\n assertExecutorOwnsLock(toLock, args.owner)\n assertMerge(fromLock, toLock)\n await Promise.all([\n assertNoUnclaimedRewards({ ...args, tokenId: args.fromTokenId }),\n assertNoUnclaimedRewards({ ...args, tokenId: args.toTokenId }),\n ])\n}\n\nexport async function preflightWithdraw(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const lock = await readVeCtmLockState(args)\n assertExecutorOwnsLock(lock, args.owner)\n assertWithdraw(lock, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightLiquidate(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n}): Promise<void> {\n const nowSec = Math.floor(Date.now() / 1000)\n const client = publicClient(args.rpcUrl, args.chainId)\n const [lock, liquidationsEnabled] = await Promise.all([\n readVeCtmLockState(args),\n client\n .readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'liquidationsEnabled',\n })\n .catch(() => null),\n ])\n assertExecutorOwnsLock(lock, args.owner)\n assertLiquidate(lock, liquidationsEnabled, nowSec)\n await assertNoUnclaimedRewards(args)\n}\n\nexport async function preflightDelegate(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n delegatee: string\n}): Promise<`0x${string}`> {\n return assertDelegatee(args.delegatee, args.owner)\n}\n\nexport async function preflightUndelegate(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const delegatee = await client.readContract({\n address: args.votingEscrow,\n abi: veReadAbi,\n functionName: 'delegates',\n args: [args.owner],\n })\n assertUndelegateNotAlreadySelf(getAddress(delegatee) === getAddress(args.owner), args.owner)\n}\n\nexport async function preflightTransfer(args: {\n rpcUrl: string\n chainId: number\n votingEscrow: Address\n owner: Address\n tokenId: bigint\n to: string\n}): Promise<`0x${string}`> {\n const lock = await readVeCtmLockState(args)\n assertExecutorOwnsLock(lock, args.owner)\n return assertTransfer(lock, args.to, args.owner)\n}\n\nexport async function preflightAttachVeCtm(args: {\n rpcUrl: string\n chainId: number\n mpaWallet: Address\n nodeKey: string\n tokenId: bigint\n owner: Address\n votingEscrow?: Address\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const [authority, veFromWallet, threshold, nodeProperties] = await Promise.all([\n client.readContract({\n address: args.mpaWallet,\n abi: mpaReadAbi,\n functionName: 'getNodeWithdrawAuthority',\n args: [args.nodeKey],\n }),\n client.readContract({ address: args.mpaWallet, abi: mpaReadAbi, functionName: 've' }),\n client.readContract({\n address: args.mpaWallet,\n abi: mpaReadAbi,\n functionName: 'veCtmThresholdPower',\n }),\n client.readContract({\n address: args.mpaWallet,\n abi: mpaReadAbi,\n functionName: 'nodeProperties',\n }),\n ])\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : getAddress(veFromWallet)\n if (!isConfiguredAddress(ve)) throw new Error('veCTM is not live on the fee contract yet.')\n const lock = await readVeCtmLockState({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n tokenId: args.tokenId,\n })\n assertExecutorOwnsLock(lock, args.owner)\n const executor = getAddress(args.owner)\n if (authority === zeroAddress || getAddress(authority) !== executor) {\n throw new Error(\n `Compose attachVeCtm from the claimed authority KeyGen (${authority}), which must own the NFT.`,\n )\n }\n if (isConfiguredAddress(nodeProperties)) {\n const np = getAddress(nodeProperties)\n const [attachedKey, attachedForKey] = await Promise.all([\n client.readContract({\n address: np,\n abi: nodePropsAbi,\n functionName: 'attachedKeyGen',\n args: [args.tokenId],\n }),\n client.readContract({\n address: np,\n abi: nodePropsAbi,\n functionName: 'attachedTokenId',\n args: [executor],\n }),\n ])\n if (attachedKey !== zeroAddress) {\n throw new Error(`veCTM #${args.tokenId} is already attached. You cannot replace an attached NFT.`)\n }\n if (attachedForKey !== 0n) {\n throw new Error(\n `This KeyGen already has veCTM #${attachedForKey} attached. Request detach and wait for governance. ` +\n \"A second group on this node attaches after rotating nodeWithdrawAuthority to that group's secp256k1 KeyGen.\",\n )\n }\n }\n if (threshold > 0n && lock.amountWei < threshold) {\n throw new Error(\n `Locked CTM on veCTM #${args.tokenId} is below MultiSignAgentWallet.veCtmThresholdPower (${threshold.toString()} wei).`,\n )\n }\n}\n\nexport async function preflightRequestDetach(args: {\n rpcUrl: string\n chainId: number\n nodeProperties: Address\n owner: Address\n tokenId: bigint\n}): Promise<void> {\n const client = publicClient(args.rpcUrl, args.chainId)\n const [attachedKey, alreadyRequested] = await Promise.all([\n client.readContract({\n address: args.nodeProperties,\n abi: nodePropsAbi,\n functionName: 'attachedKeyGen',\n args: [args.tokenId],\n }),\n client.readContract({\n address: args.nodeProperties,\n abi: nodePropsAbi,\n functionName: 'nodeRequestingDetachment',\n args: [args.tokenId],\n }),\n ])\n if (attachedKey === zeroAddress) {\n throw new Error(`veCTM #${args.tokenId} is not attached to a node.`)\n }\n if (alreadyRequested) {\n throw new Error(\n `Detach already requested for veCTM #${args.tokenId}. The NFT stays attached until governance executes detach.`,\n )\n }\n if (getAddress(attachedKey) !== getAddress(args.owner)) {\n throw new Error(\n `Request detach from the attached KeyGen (${getAddress(attachedKey)}).`,\n )\n }\n}\n","import type { KeyGenSubsetForPermit } from '../../../core/types.js'\n\nexport const VECTM_NODE_INFO_TUPLE =\n '(string,string,uint8[4],uint16[8],string,uint256,uint256,string,string,bytes)'\n\nexport const ATTACH_VECTM_SIGNATURE = `attachVeCtm(string,uint256,${VECTM_NODE_INFO_TUPLE},string)`\n\n/** Bind attach to the attaching KeyGen's mpc-auth GroupId. Do not pick a different group. */\nexport function resolveAttachGroupId(\n keyGen: KeyGenSubsetForPermit,\n explicit?: string,\n): string {\n const fromKg = (keyGen.groupId ?? keyGen.GroupId ?? '').trim()\n const fromArg = (explicit ?? '').trim()\n if (fromKg && fromArg && fromKg !== fromArg) {\n throw new Error(\n `groupId must be the attaching KeyGen's mpc-auth GroupId (${fromKg}), not a different group.`,\n )\n }\n if (fromKg) return fromKg\n if (fromArg) return fromArg\n throw new Error(\n \"groupId is required to attach veCTM (use the attaching KeyGen's mpc-auth GroupId).\",\n )\n}\n","/** Merge user purpose text with an optional batch / protocol suffix. */\nexport function mergePurposeText(purposeText: string | undefined, purposeSuffix?: string): string {\n const t = (purposeText ?? '').trim()\n const suffix = (purposeSuffix ?? '').trim()\n if (!suffix) return t\n return t ? `${t}\\n\\n${suffix}` : suffix\n}\n","import type { ChainCategory, MultisignBuildResult, KeyGenSubset } from './types.js'\nimport { getClientIdFromKeyGenResult } from '@continuumdao/continuum-node-sdk'\nimport { mergePurposeText } from './purpose.js'\n\nexport interface MultisignLeg {\n msgHash: string\n msgRaw: string\n destinationAddress: string\n signatureText: string\n audit: Record<string, unknown>\n feeSnapshot: Record<string, unknown>\n proposalTxParams?: Record<string, unknown>\n /** Payable value wei string for first leg only when relevant */\n valueWei?: bigint\n}\n\nexport interface ChainCategoryBuildInput {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n destinationChainID: string\n legs: MultisignLeg[]\n extraJSON?: Record<string, unknown>\n /** Top-level destination address (first leg destination if omitted) */\n destinationAddress?: string\n /** Unix seconds (UTC) for mpc-auth multiSignRequest expiryDate. */\n expiryDate?: number\n}\n\nexport interface ChainCategoryModule {\n category: ChainCategory\n finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult\n}\n\n/**\n * Assemble mpc-auth `bodyForSign` from category-built legs.\n * Supports single-tx and batch (messageHashes / messageRawBatch / proposalTxParams).\n */\nexport function finalizeMultisign(input: ChainCategoryBuildInput): MultisignBuildResult {\n const { keyGen, destinationChainID, legs } = input\n if (legs.length === 0) {\n throw new Error('finalizeMultisign requires at least one leg')\n }\n\n const ph = (keyGen.pubkeyhex ?? '').trim()\n if (!ph) throw new Error('keyGen pubKey (pubkeyhex) is required')\n\n const keyList = keyGen.keylist ?? []\n const clientId = getClientIdFromKeyGenResult(keyGen)\n const first = legs[0]!\n\n const messageHashes = legs.map((l) => l.msgHash)\n const messageRawBatch = legs.map((l) => l.msgRaw)\n const batchMeta = legs.map((l) => ({\n destinationAddress: l.destinationAddress,\n signatureText: l.signatureText,\n ...l.audit,\n }))\n\n const proposalTxParams = legs\n .map((l) => l.proposalTxParams)\n .filter((p): p is Record<string, unknown> => p != null && typeof p === 'object')\n\n const extraPayload: Record<string, unknown> = {\n batchMeta,\n ...(input.extraJSON ?? {}),\n }\n const extraJSON = JSON.stringify(extraPayload, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n\n const bodyForSign: Record<string, unknown> = {\n keyList,\n pubKey: ph,\n msgHash: messageHashes[0],\n msgRaw: first.msgRaw,\n destinationChainID,\n destinationAddress: input.destinationAddress ?? first.destinationAddress,\n extraJSON,\n signatureText: first.signatureText,\n purpose: mergePurposeText(input.purposeText, input.purposeSuffix),\n ...first.feeSnapshot,\n }\n\n if (legs.length > 1) {\n bodyForSign.messageHashes = messageHashes\n bodyForSign.messageRawBatch = messageRawBatch\n }\n\n if (proposalTxParams.length > 0) {\n bodyForSign.proposalTxParams = proposalTxParams\n }\n\n const valueWei = first.valueWei\n if (valueWei != null && valueWei > 0n) {\n bodyForSign.value = valueWei.toString()\n }\n\n if (clientId) bodyForSign.clientId = clientId\n\n if (input.expiryDate != null && input.expiryDate > 0) {\n bodyForSign.expiryDate = Math.floor(input.expiryDate)\n }\n\n return { bodyForSign, messageToSign: JSON.stringify(bodyForSign) }\n}\n\nexport const coreChainCategoryModule: ChainCategoryModule = {\n category: 'evm',\n finalizeMultisign,\n}\n","import { gasLimitFromEstimateAndChainConfig } from '@continuumdao/continuum-node-sdk'\n\n/** Curve router swap gas: chain cap when set, else 12/10 estimate bump. */\nexport function routerSwapGasLimitFromEstimate(\n estimatedGas: bigint,\n chainGasLimit?: number | null,\n): bigint {\n if (chainGasLimit != null && Number.isFinite(chainGasLimit) && chainGasLimit > 0) {\n return gasLimitFromEstimateAndChainConfig(estimatedGas, chainGasLimit)\n }\n return (estimatedGas * 12n + 9n) / 10n\n}\n","import { keccak256, createPublicClient, defineChain, serializeTransaction, getAddress, parseGwei, type Address, type PublicClient } from 'viem'\nimport { defiEvmTransport } from '../../core/defiEvmClient.js'\nimport type { MultisignBuildResult } from '../../core/types.js'\nimport { finalizeMultisign, type MultisignLeg } from '../../core/envelope.js'\nimport type { KeyGenSubset } from '../../core/types.js'\nimport {\n fetchChainFeeParams,\n alignEip1559FeesWithLatestBase,\n gweiToDecimalString,\n gasLimitFromEstimateAndChainConfig,\n proposalTxParamsToFeeSnapshot,\n type ProposalTxParams,\n} from '@continuumdao/continuum-node-sdk'\nimport { routerSwapGasLimitFromEstimate } from './routerSwapGas.js'\nimport type { EvmProtocolContext, EvmTxStep } from './types.js'\n\nexport type EvmBatchMetaBuilder = (args: {\n step: EvmTxStep\n index: number\n gasLimit: bigint\n}) => Record<string, unknown>\n\nexport type EvmBuildBatchArgs = {\n context: EvmProtocolContext\n steps: EvmTxStep[]\n purposeSuffix?: string\n buildBatchMeta: EvmBatchMetaBuilder\n /** First leg msgRaw without 0x prefix; defaults to first step calldata */\n firstMsgRawNo0x?: string\n destinationAddress?: Address\n /** Top-level `value` on bodyForSign when the payable amount is not on the first leg */\n payableValueWei?: bigint\n resolveGasLimit?: (args: {\n step: EvmTxStep\n index: number\n estimatedGas: bigint\n publicClient: PublicClient\n }) => Promise<bigint> | bigint\n /** Override default `estimateGas` (e.g. trade-API gas, skip post-approve deposit estimate). */\n estimateGasForStep?: (args: {\n step: EvmTxStep\n index: number\n publicClient: PublicClient\n executor: Address\n }) => Promise<bigint> | bigint\n}\n\n/**\n * Build unsigned EVM txs, estimate gas, serialize, hash — then assemble mpc-auth body via core envelope.\n */\nexport async function buildEvmMultisignBatch(args: EvmBuildBatchArgs): Promise<MultisignBuildResult> {\n const { context, steps } = args\n const {\n chainId,\n rpcUrl,\n executorAddress,\n chainDetail,\n useCustomGas,\n customGasChainDetails,\n keyGen,\n purposeText,\n } = context\n\n if (steps.length === 0) throw new Error('buildEvmMultisignBatch requires at least one step')\n\n const ch = defineChain({\n id: chainId,\n name: 'Destination',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl] } },\n })\n const publicClient = createPublicClient({ chain: ch, transport: defiEvmTransport(rpcUrl) })\n\n const feeParams = await fetchChainFeeParams(rpcUrl, chainId)\n const legacy = Boolean(chainDetail?.legacy) || !feeParams.isEip1559\n const latestBaseFeeWei = !legacy\n ? ((await publicClient.getBlock({ blockTag: 'latest' })).baseFeePerGas ?? 0n)\n : 0n\n\n const gasLimitConfig =\n useCustomGas && chainDetail?.gasLimit != null ? Number(chainDetail.gasLimit) : undefined\n const chainGasLimitRouter =\n chainDetail?.gasLimit != null &&\n Number.isFinite(Number(chainDetail.gasLimit)) &&\n Number(chainDetail.gasLimit) > 0\n ? Number(chainDetail.gasLimit)\n : undefined\n const gasFeeMultiplier =\n useCustomGas && chainDetail?.gasMultiplier != null ? Number(chainDetail.gasMultiplier) : undefined\n\n const executor = getAddress(executorAddress)\n const baseNonce = await publicClient.getTransactionCount({ address: executor, blockTag: 'pending' })\n\n const legs: MultisignLeg[] = []\n\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i]!\n const currentNonce = baseNonce + i\n\n let estimatedGas: bigint\n if (args.estimateGasForStep) {\n estimatedGas = await args.estimateGasForStep({ step, index: i, publicClient, executor })\n } else {\n try {\n estimatedGas = await publicClient.estimateGas({\n to: step.to,\n data: step.data,\n value: step.value,\n account: executor,\n })\n } catch {\n estimatedGas = step.fallbackGas ?? 100_000n\n }\n }\n\n let gasLimitI: bigint\n if (args.resolveGasLimit) {\n gasLimitI = await args.resolveGasLimit({ step, index: i, estimatedGas, publicClient })\n } else if (step.routerSwap) {\n gasLimitI = routerSwapGasLimitFromEstimate(estimatedGas, chainGasLimitRouter)\n } else {\n gasLimitI = useCustomGas\n ? gasLimitFromEstimateAndChainConfig(estimatedGas, gasLimitConfig)\n : estimatedGas\n }\n\n let proposalTxParams: ProposalTxParams\n let feeSnapshot: Record<string, unknown>\n let serialized: `0x${string}`\n\n if (legacy) {\n let gasPriceWei = await publicClient.getGasPrice()\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n gasPriceWei = (gasPriceWei * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n if (useCustomGas && chainDetail?.gasPrice != null && chainDetail.gasPrice > 0) {\n const configured = parseGwei(gweiToDecimalString(Number(chainDetail.gasPrice)))\n if (configured > gasPriceWei) gasPriceWei = configured\n }\n serialized = serializeTransaction({\n type: 'legacy',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n gasPrice: gasPriceWei,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'legacy',\n gasPrice: gasPriceWei.toString(),\n }\n feeSnapshot = proposalTxParamsToFeeSnapshot(proposalTxParams)\n } else {\n const fetchedBase = feeParams.baseFeeGwei ?? 0\n const fetchedPriority = feeParams.priorityFeeGwei ?? 0\n const configuredBase =\n useCustomGas && chainDetail?.baseFee != null ? Number(chainDetail.baseFee) : 0\n const configuredPriority =\n useCustomGas && chainDetail?.priorityFee != null ? Number(chainDetail.priorityFee) : 0\n const effectiveBaseFeeGwei = Math.max(fetchedBase, configuredBase)\n const effectivePriorityFeeGwei = Math.max(fetchedPriority, configuredPriority)\n const baseFeeMultiplierPct =\n useCustomGas && chainDetail?.baseFeeMultiplier != null\n ? Math.max(100, Number(chainDetail.baseFeeMultiplier))\n : 100\n const baseComponentGwei = (effectiveBaseFeeGwei * baseFeeMultiplierPct) / 100\n const maxFeePerGasGwei = baseComponentGwei + effectivePriorityFeeGwei\n let maxPriorityFeePerGas =\n effectivePriorityFeeGwei > 0\n ? parseGwei(gweiToDecimalString(effectivePriorityFeeGwei))\n : parseGwei('1')\n let maxFeePerGas = parseGwei(gweiToDecimalString(maxFeePerGasGwei))\n if (useCustomGas && gasFeeMultiplier != null && gasFeeMultiplier > 0) {\n maxPriorityFeePerGas = (maxPriorityFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n maxFeePerGas = (maxFeePerGas * BigInt(100 + gasFeeMultiplier)) / 100n\n }\n ;({ maxFeePerGas, maxPriorityFeePerGas } = alignEip1559FeesWithLatestBase(\n maxFeePerGas,\n maxPriorityFeePerGas,\n latestBaseFeeWei,\n ))\n serialized = serializeTransaction({\n type: 'eip1559',\n to: step.to,\n data: step.data,\n value: step.value,\n gas: gasLimitI,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce: currentNonce,\n chainId,\n })\n proposalTxParams = {\n nonce: currentNonce,\n gasLimit: gasLimitI.toString(),\n txType: 'eip1559',\n maxFeePerGas: maxFeePerGas.toString(),\n maxPriorityFeePerGas: maxPriorityFeePerGas.toString(),\n }\n feeSnapshot = i === 0 ? proposalTxParamsToFeeSnapshot(proposalTxParams) : {}\n }\n\n const h = keccak256(serialized)\n const msgHash = h.startsWith('0x') ? h.slice(2) : h\n\n const batchMetaExtra = args.buildBatchMeta({ step, index: i, gasLimit: gasLimitI })\n\n legs.push({\n msgHash,\n msgRaw: i === 0 && args.firstMsgRawNo0x != null ? args.firstMsgRawNo0x : serialized,\n destinationAddress: step.to,\n signatureText:\n typeof batchMetaExtra.signatureText === 'string'\n ? batchMetaExtra.signatureText\n : JSON.stringify(batchMetaExtra.signatureText ?? {}),\n audit: batchMetaExtra,\n feeSnapshot: i === 0 ? feeSnapshot : {},\n proposalTxParams,\n valueWei: i === 0 ? step.value : undefined,\n })\n\n if (i === 0 && args.firstMsgRawNo0x != null) {\n legs[0]!.msgRaw = args.firstMsgRawNo0x\n }\n }\n\n const extraJSON: Record<string, unknown> = {}\n if (useCustomGas && customGasChainDetails && Object.keys(customGasChainDetails).length > 0) {\n extraJSON.customGasChainDetails = customGasChainDetails\n }\n\n const result = finalizeMultisign({\n keyGen: keyGen as KeyGenSubset,\n purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: String(chainId),\n destinationAddress: args.destinationAddress ?? steps[0]!.to,\n legs,\n extraJSON: Object.keys(extraJSON).length > 0 ? extraJSON : undefined,\n expiryDate: context.expiryDate,\n })\n const pv = args.payableValueWei\n if (pv != null && pv > 0n) {\n result.bodyForSign.value = pv.toString()\n }\n return result\n}\n\nexport const evmChainCategoryModule = {\n category: 'evm' as const,\n finalizeMultisign,\n buildEvmMultisignBatch,\n}\n","/**\n * ContinuumDAO multi-sign builders: CTM lock / veCTM escrow + MPA attach / request detach.\n * Do not prepend billing legs — these are protocol txs, not register / deposit / syncBilling.\n */\nimport { type Address, createPublicClient, defineChain, encodeFunctionData, getAddress, parseAbi, parseUnits, zeroAddress } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport type { KeyGenSubsetForPermit } from '../../../core/types.js'\nimport { ATTACH_VECTM_SIGNATURE, resolveAttachGroupId, VECTM_NODE_INFO_TUPLE } from './attachGroup.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport {\n CONTINUUM_DAO_PROTOCOL_ID,\n CTM_TOKEN_DECIMALS,\n ctmTokenAddressOnEvmChain,\n isConfiguredAddress,\n isContinuumDaoLockChain,\n votingEscrowAddressOnEvmChain,\n} from './constants.js'\nimport {\n preflightAttachVeCtm,\n preflightCreateLock,\n preflightDelegate,\n preflightIncreaseAmount,\n preflightIncreaseUnlockTime,\n preflightLiquidate,\n preflightMerge,\n preflightRequestDetach,\n preflightSplit,\n preflightTransfer,\n preflightUndelegate,\n preflightWithdraw,\n} from './escrowPreflight.js'\n\nexport const CONTINUUM_DAO_APPROVE_FALLBACK = 100_000n\nexport const CONTINUUM_DAO_CREATE_LOCK_FALLBACK = 550_000n\nexport const CONTINUUM_DAO_INCREASE_AMOUNT_FALLBACK = 400_000n\nexport const CONTINUUM_DAO_INCREASE_UNLOCK_FALLBACK = 400_000n\nexport const CONTINUUM_DAO_SPLIT_FALLBACK = 650_000n\nexport const CONTINUUM_DAO_MERGE_FALLBACK = 550_000n\nexport const CONTINUUM_DAO_WITHDRAW_FALLBACK = 350_000n\nexport const CONTINUUM_DAO_LIQUIDATE_FALLBACK = 450_000n\nexport const CONTINUUM_DAO_DELEGATE_FALLBACK = 160_000n\nexport const CONTINUUM_DAO_TRANSFER_FALLBACK = 160_000n\nexport const CONTINUUM_DAO_ATTACH_FALLBACK = 450_000n\nexport const CONTINUUM_DAO_DETACH_FALLBACK = 220_000n\n\nexport const INCREASE_UNLOCK_TIME_SIGNATURE = 'increase_unlock_time(uint256,uint256)'\n\nexport { ATTACH_VECTM_SIGNATURE, resolveAttachGroupId, VECTM_NODE_INFO_TUPLE } from './attachGroup.js'\n\nconst erc20Abi = parseAbi([\n 'function allowance(address owner, address spender) view returns (uint256)',\n 'function approve(address spender, uint256 amount) returns (bool)',\n])\nconst veWriteAbi = parseAbi([\n 'function create_lock(uint256 _value, uint256 _lock_duration) returns (uint256)',\n 'function increase_amount(uint256 _tokenId, uint256 _value)',\n 'function increase_unlock_time(uint256 _tokenId, uint256 _lock_duration)',\n 'function withdraw(uint256 _tokenId)',\n 'function split(uint256 _tokenId, uint256 _extracted) returns (uint256)',\n 'function merge(uint256 _from, uint256 _to)',\n 'function liquidate(uint256 _tokenId)',\n 'function delegate(address delegatee)',\n 'function transferFrom(address _from, address _to, uint256 _tokenId)',\n])\nconst attachAbi = parseAbi([\n `function attachVeCtm(string nodeKey, uint256 tokenId, ${VECTM_NODE_INFO_TUPLE} nodeInfo, string groupId)`,\n])\nconst detachAbi = parseAbi(['function setNodeRemovalStatus(uint256 tokenId, bool status)'])\n\nexport const CONTINUUM_DAO_EVM_TYPES = new Set([\n 'continuum_dao_approve',\n 'continuum_dao_create_lock',\n 'continuum_dao_increase_amount',\n 'continuum_dao_increase_unlock_time',\n 'continuum_dao_split',\n 'continuum_dao_merge',\n 'continuum_dao_withdraw',\n 'continuum_dao_liquidate',\n 'continuum_dao_delegate',\n 'continuum_dao_undelegate',\n 'continuum_dao_transfer',\n 'continuum_dao_attach',\n 'continuum_dao_request_detach',\n])\n\ntype ChainRow = {\n legacy?: boolean\n gasLimit?: number\n gasMultiplier?: number\n gasPrice?: number\n baseFee?: number\n priorityFee?: number\n baseFeeMultiplier?: number\n}\n\nexport type ContinuumDaoCommonArgs = {\n keyGen: KeyGenSubsetForPermit\n chainId: number\n rpcUrl: string\n chainDetail: ChainRow\n useCustomGas: boolean\n customGasChainDetails?: Record<string, unknown> | null\n executorAddress: Address\n purposeText: string\n}\n\ntype StepKind = {\n to: Address\n data: `0x${string}`\n value: bigint\n fallbackGas: bigint\n buildBatchMeta: (args: { gasLimit: bigint }) => Record<string, unknown>\n}\n\nfunction requireLockChain(chainId: number): void {\n if (!isContinuumDaoLockChain(chainId)) {\n throw new Error('ContinuumDAO lock and attach actions are Linea-only.')\n }\n}\n\nfunction requireVe(chainId: number): Address {\n requireLockChain(chainId)\n const ve = votingEscrowAddressOnEvmChain(chainId)\n if (!ve) throw new Error('Voting Escrow address is not configured for this chain yet.')\n return ve\n}\n\nfunction requireCtm(chainId: number): Address {\n const ctm = ctmTokenAddressOnEvmChain(chainId)\n if (!ctm) throw new Error('CTM address is not configured for this chain yet.')\n return ctm\n}\n\nfunction parseTokenId(raw: string | number | bigint): bigint {\n const id = typeof raw === 'bigint' ? raw : BigInt(String(raw).trim())\n if (id <= 0n) throw new Error('veCTM token id must be greater than zero.')\n return id\n}\n\nexport function continuumDaoSignatureText(\n extra: Record<string, unknown>,\n chainId: number,\n): string {\n return JSON.stringify({\n kind: 'ContinuumDAO',\n ...extra,\n chainId,\n })\n}\n\nfunction meta(\n evmType: string,\n chainId: number,\n to: Address,\n extra: Record<string, unknown>,\n gasLimit: bigint,\n): Record<string, unknown> {\n return {\n destinationAddress: to,\n signatureText: continuumDaoSignatureText(extra, chainId),\n evm: { type: evmType, version: 1, chainId: String(chainId), protocolId: CONTINUUM_DAO_PROTOCOL_ID },\n continuumDao: { ...extra, gas: { baseGasUnits: gasLimit.toString() } },\n }\n}\n\nasync function finalize(\n steps: StepKind[],\n args: ContinuumDaoCommonArgs,\n purposeSuffix: string,\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n if (steps.length === 0) throw new Error('ContinuumDAO batch requires at least one step.')\n const evmSteps: EvmTxStep[] = steps.map((s) => ({\n to: s.to,\n data: s.data,\n value: s.value,\n fallbackGas: s.fallbackGas,\n }))\n const firstDataNo0x = evmSteps[0]!.data.startsWith('0x') ? evmSteps[0]!.data.slice(2) : evmSteps[0]!.data\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl.trim(),\n executorAddress: args.executorAddress,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: evmSteps,\n purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: steps[0]!.to,\n buildBatchMeta: ({ index, gasLimit }) => steps[index]!.buildBatchMeta({ gasLimit }),\n })\n}\n\nasync function maybeApproveCtmStep(args: {\n rpcUrl: string\n chainId: number\n owner: Address\n ctm: Address\n spender: Address\n amountWei: bigint\n}): Promise<StepKind | null> {\n const ch = defineChain({\n id: args.chainId,\n name: 'ContinuumDAO',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [args.rpcUrl.trim()] } },\n })\n const client = createPublicClient({ chain: ch, transport: defiEvmTransport(args.rpcUrl.trim()) })\n let allowance = 0n\n try {\n allowance = await client.readContract({\n address: args.ctm,\n abi: erc20Abi,\n functionName: 'allowance',\n args: [args.owner, args.spender],\n })\n } catch {\n allowance = 0n\n }\n if (allowance >= args.amountWei) return null\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [args.spender, args.amountWei],\n })\n return {\n to: args.ctm,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_APPROVE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_approve', args.chainId, args.ctm, {\n name: 'CTM.approve',\n spender: args.spender,\n amountWei: args.amountWei.toString(),\n }, gasLimit),\n }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCreateLock(\n args: ContinuumDaoCommonArgs & {\n amountHuman: string\n lockDurationSeconds: string | number | bigint\n ctm?: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const ctm = args.ctm && isConfiguredAddress(args.ctm) ? getAddress(args.ctm) : requireCtm(args.chainId)\n const amountWei = parseUnits(String(args.amountHuman).trim().replace(/,/g, ''), CTM_TOKEN_DECIMALS)\n const duration = BigInt(String(args.lockDurationSeconds).trim())\n const owner = getAddress(args.executorAddress)\n await preflightCreateLock({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n ctm,\n owner,\n amountWei,\n durationSec: duration,\n })\n const approve = await maybeApproveCtmStep({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n owner,\n ctm,\n spender: ve,\n amountWei,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'create_lock',\n args: [amountWei, duration],\n })\n const lockStep: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_CREATE_LOCK_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_create_lock', args.chainId, ve, {\n name: 'VotingEscrow.create_lock',\n amountWei: amountWei.toString(),\n lockDurationSeconds: duration.toString(),\n }, gasLimit),\n }\n const steps = approve ? [approve, lockStep] : [lockStep]\n return finalize(steps, args, `ContinuumDAO: create lock ${args.amountHuman} CTM.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoIncreaseAmount(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n amountHuman: string\n ctm?: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const ctm = args.ctm && isConfiguredAddress(args.ctm) ? getAddress(args.ctm) : requireCtm(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const amountWei = parseUnits(String(args.amountHuman).trim().replace(/,/g, ''), CTM_TOKEN_DECIMALS)\n const owner = getAddress(args.executorAddress)\n await preflightIncreaseAmount({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n ctm,\n owner,\n tokenId,\n amountWei,\n })\n const approve = await maybeApproveCtmStep({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n owner,\n ctm,\n spender: ve,\n amountWei,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'increase_amount',\n args: [tokenId, amountWei],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_INCREASE_AMOUNT_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_increase_amount', args.chainId, ve, {\n name: 'VotingEscrow.increase_amount',\n tokenId: tokenId.toString(),\n amountWei: amountWei.toString(),\n }, gasLimit),\n }\n const steps = approve ? [approve, step] : [step]\n return finalize(steps, args, `ContinuumDAO: increase amount on veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoIncreaseUnlockTime(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n lockDurationSeconds: string | number | bigint\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const duration = BigInt(String(args.lockDurationSeconds).trim())\n const owner = getAddress(args.executorAddress)\n await preflightIncreaseUnlockTime({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner,\n tokenId,\n durationSec: duration,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'increase_unlock_time',\n args: [tokenId, duration],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_INCREASE_UNLOCK_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_increase_unlock_time', args.chainId, ve, {\n name: 'VotingEscrow.increase_unlock_time',\n signature: INCREASE_UNLOCK_TIME_SIGNATURE,\n tokenId: tokenId.toString(),\n lockDurationSeconds: duration.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: increase unlock time on veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoSplit(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n extractedHuman: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const extracted = parseUnits(String(args.extractedHuman).trim().replace(/,/g, ''), CTM_TOKEN_DECIMALS)\n await preflightSplit({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n tokenId,\n extractedWei: extracted,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'split',\n args: [tokenId, extracted],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_SPLIT_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_split', args.chainId, ve, {\n name: 'VotingEscrow.split',\n tokenId: tokenId.toString(),\n extractedWei: extracted.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: split veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoMerge(\n args: ContinuumDaoCommonArgs & {\n fromTokenId: string | number | bigint\n toTokenId: string | number | bigint\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const fromId = parseTokenId(args.fromTokenId)\n const toId = parseTokenId(args.toTokenId)\n await preflightMerge({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n fromTokenId: fromId,\n toTokenId: toId,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'merge',\n args: [fromId, toId],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_MERGE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_merge', args.chainId, ve, {\n name: 'VotingEscrow.merge',\n fromTokenId: fromId.toString(),\n toTokenId: toId.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: merge veCTM #${fromId} into #${toId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoWithdraw(\n args: ContinuumDaoCommonArgs & { tokenId: string | number | bigint; votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n await preflightWithdraw({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n tokenId,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'withdraw', args: [tokenId] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_WITHDRAW_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_withdraw', args.chainId, ve, {\n name: 'VotingEscrow.withdraw',\n tokenId: tokenId.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: withdraw veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoLiquidate(\n args: ContinuumDaoCommonArgs & { tokenId: string | number | bigint; votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n await preflightLiquidate({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n tokenId,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'liquidate', args: [tokenId] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_LIQUIDATE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_liquidate', args.chainId, ve, {\n name: 'VotingEscrow.liquidate',\n tokenId: tokenId.toString(),\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: liquidate veCTM #${tokenId}.`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoDelegate(\n args: ContinuumDaoCommonArgs & { delegatee: string; votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const delegatee = await preflightDelegate({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: getAddress(args.executorAddress),\n delegatee: args.delegatee,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'delegate', args: [delegatee] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_DELEGATE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_delegate', args.chainId, ve, {\n name: 'VotingEscrow.delegate',\n delegatee,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: delegate voting power to ${delegatee}.`)\n}\n\n/** veCTM has no undelegate(). Delegating to self (or address(0), which becomes self) returns voting power. */\nexport async function buildEvmMultisignBodyContinuumDaoUndelegate(\n args: ContinuumDaoCommonArgs & { votingEscrow?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const self = getAddress(args.executorAddress)\n await preflightUndelegate({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: self,\n })\n const data = encodeFunctionData({ abi: veWriteAbi, functionName: 'delegate', args: [self] })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_DELEGATE_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_undelegate', args.chainId, ve, {\n name: 'VotingEscrow.delegate',\n delegatee: self,\n undelegate: true,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: undelegate voting power (delegate back to ${self}).`)\n}\n\nconst veReadAbi = parseAbi(['function delegates(address account) view returns (address)'])\n\nexport async function continuumDaoFetchDelegates(args: {\n chainId: number | string\n rpcUrl: string\n account: string\n votingEscrow?: string\n}): Promise<{ account: string; delegatee: string; self: boolean }> {\n const chainId = Number(args.chainId)\n requireLockChain(chainId)\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(chainId)\n const account = getAddress(args.account)\n const client = createPublicClient({\n chain: defineChain({\n id: chainId,\n name: 'ContinuumDAO',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [args.rpcUrl.trim()] } },\n }),\n transport: defiEvmTransport(args.rpcUrl.trim()),\n })\n const delegatee = getAddress(\n await client.readContract({ address: ve, abi: veReadAbi, functionName: 'delegates', args: [account] }),\n )\n return { account, delegatee, self: delegatee === account }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoTransfer(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n to: string\n votingEscrow?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const ve = args.votingEscrow && isConfiguredAddress(args.votingEscrow)\n ? getAddress(args.votingEscrow)\n : requireVe(args.chainId)\n const tokenId = parseTokenId(args.tokenId)\n const from = getAddress(args.executorAddress)\n const to = await preflightTransfer({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n votingEscrow: ve,\n owner: from,\n tokenId,\n to: args.to,\n })\n const data = encodeFunctionData({\n abi: veWriteAbi,\n functionName: 'transferFrom',\n args: [from, to, tokenId],\n })\n const step: StepKind = {\n to: ve,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_TRANSFER_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_transfer', args.chainId, ve, {\n name: 'VotingEscrow.transferFrom',\n tokenId: tokenId.toString(),\n from,\n to,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: transfer veCTM #${tokenId} to ${to}.`)\n}\n\nexport type ContinuumDaoNodeInfoTuple = [\n string,\n string,\n readonly [number, number, number, number],\n readonly [number, number, number, number, number, number, number, number],\n string,\n bigint,\n bigint,\n string,\n string,\n `0x${string}`,\n]\n\nexport function encodeContinuumDaoNodeInfo(info?: {\n forumHandle?: string\n email?: string\n ipv4?: number[]\n ipv6?: number[]\n vps?: string\n ram?: number | string\n cpu?: number | string\n dIDType?: string\n dID?: string\n extra?: string\n}): ContinuumDaoNodeInfoTuple {\n const ipv4Src = info?.ipv4 ?? [0, 0, 0, 0]\n const ipv6Src = info?.ipv6 ?? [0, 0, 0, 0, 0, 0, 0, 0]\n const ipv4: [number, number, number, number] = [\n ipv4Src[0] ?? 0,\n ipv4Src[1] ?? 0,\n ipv4Src[2] ?? 0,\n ipv4Src[3] ?? 0,\n ]\n const ipv6: [number, number, number, number, number, number, number, number] = [\n ipv6Src[0] ?? 0,\n ipv6Src[1] ?? 0,\n ipv6Src[2] ?? 0,\n ipv6Src[3] ?? 0,\n ipv6Src[4] ?? 0,\n ipv6Src[5] ?? 0,\n ipv6Src[6] ?? 0,\n ipv6Src[7] ?? 0,\n ]\n const extraRaw = (info?.extra ?? '0x').trim() || '0x'\n const extra = (extraRaw.startsWith('0x') ? extraRaw : `0x${extraRaw}`) as `0x${string}`\n return [\n info?.forumHandle ?? '',\n info?.email ?? '',\n ipv4,\n ipv6,\n info?.vps ?? '',\n BigInt(String(info?.ram ?? 0)),\n BigInt(String(info?.cpu ?? 0)),\n info?.dIDType ?? '',\n info?.dID ?? '',\n extra,\n ]\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoAttachVeCtm(\n args: ContinuumDaoCommonArgs & {\n nodeKey: string\n tokenId: string | number | bigint\n mpaWallet: string\n nodeInfo?: Parameters<typeof encodeContinuumDaoNodeInfo>[0]\n nodeInfoTuple?: ContinuumDaoNodeInfoTuple\n groupId?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n requireLockChain(args.chainId)\n const wallet = getAddress(args.mpaWallet)\n if (wallet === zeroAddress) throw new Error('MPA wallet address is required to attach veCTM.')\n const tokenId = parseTokenId(args.tokenId)\n const nodeKey = args.nodeKey.trim()\n if (!nodeKey) throw new Error('nodeKey is required to attach veCTM.')\n const groupId = resolveAttachGroupId(args.keyGen, args.groupId)\n await preflightAttachVeCtm({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n mpaWallet: wallet,\n nodeKey,\n tokenId,\n owner: getAddress(args.executorAddress),\n })\n const tuple = args.nodeInfoTuple ?? encodeContinuumDaoNodeInfo(args.nodeInfo)\n const data = encodeFunctionData({\n abi: attachAbi,\n functionName: 'attachVeCtm',\n args: [nodeKey, tokenId, tuple, groupId],\n })\n const step: StepKind = {\n to: wallet,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_ATTACH_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_attach', args.chainId, wallet, {\n name: 'MultiSignAgentWallet.attachVeCtm',\n signature: ATTACH_VECTM_SIGNATURE,\n nodeKey,\n tokenId: tokenId.toString(),\n groupId,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: attach veCTM #${tokenId} (group ${groupId}).`)\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoRequestDetach(\n args: ContinuumDaoCommonArgs & {\n tokenId: string | number | bigint\n nodeProperties: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n requireLockChain(args.chainId)\n const np = getAddress(args.nodeProperties)\n if (np === zeroAddress) throw new Error('NodeProperties address is required to request detach.')\n const tokenId = parseTokenId(args.tokenId)\n await preflightRequestDetach({\n rpcUrl: args.rpcUrl,\n chainId: args.chainId,\n nodeProperties: np,\n owner: getAddress(args.executorAddress),\n tokenId,\n })\n const data = encodeFunctionData({\n abi: detachAbi,\n functionName: 'setNodeRemovalStatus',\n args: [tokenId, true],\n })\n const step: StepKind = {\n to: np,\n data,\n value: 0n,\n fallbackGas: CONTINUUM_DAO_DETACH_FALLBACK,\n buildBatchMeta: ({ gasLimit }) =>\n meta('continuum_dao_request_detach', args.chainId, np, {\n name: 'NodeProperties.setNodeRemovalStatus',\n tokenId: tokenId.toString(),\n status: true,\n }, gasLimit),\n }\n return finalize([step], args, `ContinuumDAO: request detach of veCTM #${tokenId}.`)\n}\n\n/** MCP adapter: flatten NodeInfo fields onto the attach builder. */\nexport async function buildEvmMultisignBodyContinuumDaoAttachVeCtmFromMcp(\n args: ContinuumDaoCommonArgs & {\n nodeKey: string\n tokenId: string | number | bigint\n mpaWallet: string\n groupId?: string\n forumHandle?: string\n email?: string\n vps?: string\n ram?: number | string\n cpu?: number | string\n dIDType?: string\n dID?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n return buildEvmMultisignBodyContinuumDaoAttachVeCtm({\n ...args,\n nodeInfo: {\n forumHandle: args.forumHandle,\n email: args.email,\n vps: args.vps,\n ram: args.ram,\n cpu: args.cpu,\n dIDType: args.dIDType,\n dID: args.dID,\n },\n })\n}\n","import { hashTypedData, stringToHex, type TypedDataDomain } from 'viem'\nimport type { KeyGenSubset, MultisignBuildResult } from './types.js'\nimport { finalizeMultisign } from './envelope.js'\n\nexport const EIP712_SIGN_REQUEST_KIND = 'eip712' as const\n\nexport type Eip712TypedDataField = { name: string; type: string }\n\nexport type Eip712TypedDataPayload = {\n domain: TypedDataDomain\n types: Record<string, readonly Eip712TypedDataField[] | Eip712TypedDataField[]>\n primaryType: string\n message: Record<string, unknown>\n}\n\nexport type Eip712MultisignDelivery = Record<string, unknown> & { kind: string }\n\nexport type BuildEip712MultisignLeg = {\n typedData: Eip712TypedDataPayload\n delivery: Eip712MultisignDelivery\n audit?: Record<string, unknown>\n}\n\nexport type BuildEip712MultisignArgs = {\n keyGen: KeyGenSubset\n purposeText: string\n purposeSuffix?: string\n /** Chain id stored on the sign request (protocol context; may differ from EIP-712 domain chainId). */\n destinationChainID: string\n destinationAddress: string\n legs: readonly BuildEip712MultisignLeg[]\n expiryDate?: number\n}\n\nfunction msgHashNo0x(digest: `0x${string}`): string {\n return digest.startsWith('0x') ? digest.slice(2) : digest\n}\n\nfunction eip712SignatureText(domain: TypedDataDomain, primaryType: string): string {\n return JSON.stringify({\n kind: 'EIP-712',\n ...(typeof domain.name === 'string' ? { name: domain.name } : {}),\n primaryType,\n })\n}\n\nfunction jsonStringifyForAudit(value: unknown): string {\n return JSON.stringify(value, (_, v) => (typeof v === 'bigint' ? v.toString() : v))\n}\n\nfunction eip712LegEnvelope(\n typedData: Eip712TypedDataPayload,\n delivery: Eip712MultisignDelivery,\n digest: `0x${string}`,\n): Record<string, unknown> {\n return {\n version: 1,\n digest,\n domain: typedData.domain,\n types: typedData.types,\n primaryType: typedData.primaryType,\n message: typedData.message,\n delivery,\n }\n}\n\nfunction eip712MsgRawHex(envelope: Record<string, unknown>): string {\n return stringToHex(jsonStringifyForAudit(envelope))\n}\n\n/**\n * Build an mpc-auth multiSignRequest body for one or more EIP-712 digests (no EVM tx broadcast).\n * `extraJSON.eip712` is always an array. N=1 uses `msgHash`/`msgRaw`; N>=2 uses `messageHashes`/`messageRawBatch`.\n */\nexport function buildEip712Multisign(args: BuildEip712MultisignArgs): MultisignBuildResult {\n if (args.legs.length < 1) {\n throw new Error('buildEip712Multisign requires at least one leg')\n }\n\n const eip712: Record<string, unknown>[] = []\n const legs = args.legs.map((leg) => {\n const digest = hashTypedData({\n domain: leg.typedData.domain,\n types: leg.typedData.types,\n primaryType: leg.typedData.primaryType,\n message: leg.typedData.message,\n })\n const envelope = eip712LegEnvelope(leg.typedData, leg.delivery, digest)\n eip712.push(envelope)\n return {\n msgHash: msgHashNo0x(digest),\n msgRaw: eip712MsgRawHex(envelope),\n destinationAddress: args.destinationAddress,\n signatureText: eip712SignatureText(leg.typedData.domain, leg.typedData.primaryType),\n audit: {\n kind: 'EIP712',\n primaryType: leg.typedData.primaryType,\n deliveryKind: leg.delivery.kind,\n ...(leg.audit ?? {}),\n },\n feeSnapshot: {},\n }\n })\n\n return finalizeMultisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n purposeSuffix: args.purposeSuffix,\n destinationChainID: args.destinationChainID,\n destinationAddress: args.destinationAddress,\n extraJSON: {\n signRequestKind: EIP712_SIGN_REQUEST_KIND,\n eip712,\n },\n expiryDate: args.expiryDate,\n legs,\n })\n}\n","import { getAddress } from 'viem'\nimport { buildEip712Multisign } from '../../../core/eip712Multisign.js'\nimport type { KeyGenSubset } from '../../../core/types.js'\n\nconst DEFAULT_FORUM_URL = 'https://forum.continuumdao.org'\n\nexport const FORUM_GOVERNANCE_SECTIONS = [\n 'decision',\n 'election',\n 'treasury',\n 'constitution',\n 'admin',\n] as const\n\nexport type ForumGovernanceSection = (typeof FORUM_GOVERNANCE_SECTIONS)[number]\n\nexport const FORUM_IDEA_SECTION = 'ideas' as const\n\nexport const PROPOSAL_TYPE_TO_FORUM_SECTION: Record<string, ForumGovernanceSection> = {\n Admin: 'admin',\n Constitution: 'constitution',\n Decision: 'decision',\n Election: 'election',\n Treasury: 'treasury',\n}\n\nconst IDEA_SECTION_ALIASES = new Set(['ideas', 'ideas-suggestions', 'suggestions'])\n\nexport function expectedForumSectionForProposalType(typeLabel: string): ForumGovernanceSection | null {\n return PROPOSAL_TYPE_TO_FORUM_SECTION[typeLabel] ?? null\n}\n\nexport function isForumIdeaSection(section?: string): boolean {\n return IDEA_SECTION_ALIASES.has(String(section || '').toLowerCase())\n}\n\nexport function applyForumSectionCheck<T extends { typeLabel: string; briefing: string; risks: string[] }>(\n out: T,\n section: string | null | undefined,\n cid?: number | null,\n): T & { forumSection: string | null; forumCid: number | null } {\n const forumSection = section?.trim() || null\n const forumCid = cid != null && Number(cid) > 0 ? Number(cid) : null\n const expected = expectedForumSectionForProposalType(out.typeLabel)\n const added: string[] = []\n if (forumSection === FORUM_IDEA_SECTION || isForumIdeaSection(forumSection ?? undefined)) {\n added.push(\n 'Forum thread is in Ideas & Suggestions, not a Governance proposal category. Ideas are discussion only and must not be used as forumKey.',\n )\n } else if (expected && forumSection && forumSection !== expected) {\n added.push(`Forum section is ${forumSection} but proposal type is ${out.typeLabel} (expected ${expected}).`)\n }\n const extraLine =\n forumSection === FORUM_IDEA_SECTION || isForumIdeaSection(forumSection ?? undefined)\n ? `Forum section: ideas (mismatch — expected ${expected ?? 'a Governance category'}).`\n : expected && forumSection && forumSection !== expected\n ? `Forum section: ${forumSection} (mismatch — expected ${expected}).`\n : forumSection\n ? `Forum section: ${forumSection}`\n : null\n const lines = out.briefing.split('\\n')\n if (extraLine) {\n const forumLine = lines.findIndex((l) => l.startsWith('Forum:'))\n if (forumLine >= 0) lines.splice(forumLine + 1, 0, extraLine)\n else lines.splice(1, 0, extraLine)\n }\n if (added.length) {\n if (!lines.includes('Risks:')) lines.push('Risks:')\n for (const r of added) lines.push(`- ${r}`)\n }\n return { ...out, briefing: lines.join('\\n'), risks: [...out.risks, ...added], forumSection, forumCid }\n}\n\nexport const FORUM_LOGIN_DELIVERY_KIND = 'forumLogin' as const\n\nexport function continuumDaoForumUrl(explicit?: string): string {\n const raw =\n explicit?.trim() ||\n (typeof process !== 'undefined' ? process.env.FORUM_URL || process.env.NEXT_PUBLIC_FORUM_URL : '') ||\n DEFAULT_FORUM_URL\n return raw.replace(/\\/+$/, '')\n}\n\n/** Homepage or empty string is refused. A proposal must point at a created /topic/:tid or /t/:tid. */\nexport function assertContinuumDaoForumTopicKey(forumKey: string, forumUrl?: string): string {\n const raw = String(forumKey || '').trim()\n if (!raw) {\n throw new Error(\n 'A forum thread is required. Create one with ctm_continuum_dao_forum_create_topic in a Governance section (decision / election / treasury / constitution / admin) before propose or register_proposal. Ideas & Suggestions threads are not valid forumKey values.',\n )\n }\n let url: URL\n try {\n url = new URL(raw)\n } catch {\n throw new Error('forumKey must be a full forum topic URL (https://forum.continuumdao.org/topic/123).')\n }\n const expected = new URL(`${continuumDaoForumUrl(forumUrl)}/`)\n if (url.host !== expected.host) {\n throw new Error(`forumKey must be on ${expected.host}.`)\n }\n if (!/\\/(?:topic|t)\\/\\d+/.test(url.pathname)) {\n throw new Error('forumKey must be a created thread (/topic/:tid or /t/:tid), not the forum homepage.')\n }\n return raw.replace(/\\/+$/, '')\n}\n\nfunction forumError(body: unknown, status: number): Error {\n const o = body && typeof body === 'object' ? (body as Record<string, unknown>) : {}\n const st = o.status && typeof o.status === 'object' ? (o.status as Record<string, unknown>) : null\n const msg = (st && typeof st.message === 'string' && st.message) ||\n (typeof o.message === 'string' && o.message) ||\n `forum HTTP ${status}`\n return new Error(msg)\n}\n\nasync function forumFetch(path: string, init: RequestInit & { forumUrl?: string; ticket?: string } = {}) {\n const url = `${continuumDaoForumUrl(init.forumUrl)}${path}`\n const headers: Record<string, string> = {\n Accept: 'application/json',\n ...(init.body ? { 'Content-Type': 'application/json' } : {}),\n }\n if (init.ticket) {\n headers.Authorization = `Bearer ${init.ticket}`\n }\n const res = await fetch(url, {\n method: init.method || 'GET',\n headers,\n body: init.body,\n cache: 'no-store',\n })\n const body = await res.json().catch(() => ({}))\n if (!res.ok) {\n throw forumError(body, res.status)\n }\n return body\n}\n\nexport async function continuumDaoForumResolve(args: { url?: string; tid?: string | number; forumUrl?: string }) {\n const qs = new URLSearchParams()\n if (args.url) qs.set('url', String(args.url))\n if (args.tid != null) qs.set('tid', String(args.tid))\n return forumFetch(`/api/continuum/forum/resolve?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumFetchThread(args: {\n url?: string\n tid?: string | number\n index?: number\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n const qs = new URLSearchParams()\n if (args.url) qs.set('url', String(args.url))\n if (args.tid != null) qs.set('tid', String(args.tid))\n if (args.index != null) qs.set('index', String(args.index))\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/thread?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumReplyCount(args: { url?: string; tid?: string | number; forumUrl?: string }) {\n const qs = new URLSearchParams()\n if (args.url) qs.set('url', String(args.url))\n if (args.tid != null) qs.set('tid', String(args.tid))\n return forumFetch(`/api/continuum/forum/thread/replies?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumFetchPost(args: { pid: string | number; forumUrl?: string }) {\n return forumFetch(`/api/continuum/forum/post?pid=${encodeURIComponent(String(args.pid))}`, {\n forumUrl: args.forumUrl,\n })\n}\n\nfunction assertForumHours(hours?: number) {\n if (hours != null && (!Number.isFinite(hours) || hours <= 0)) {\n throw new Error('hours must be a positive number')\n }\n}\n\nexport function assertContinuumDaoForumSearchInput(args: {\n query?: string\n hours?: number\n since?: string\n}) {\n assertForumHours(args.hours)\n if (!args.query?.trim() && args.hours == null && !args.since?.trim()) {\n throw new Error('Provide query and/or a time filter (hours or since)')\n }\n}\n\nexport function assertContinuumDaoForumRecentInput(args: { hours?: number; since?: string }) {\n assertForumHours(args.hours)\n if (args.hours == null && !args.since?.trim()) {\n throw new Error('Provide a time filter (hours or since)')\n }\n}\n\n/** Search thread titles (original posts) and post bodies. Returns `{ id, title, username, timestamp, createdAt }` (`id` is pid). */\nexport async function continuumDaoForumSearch(args: {\n query?: string\n hours?: number\n since?: string\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n assertContinuumDaoForumSearchInput(args)\n const qs = new URLSearchParams()\n if (args.query?.trim()) qs.set('query', args.query.trim())\n if (args.hours != null) qs.set('hours', String(args.hours))\n if (args.since?.trim()) qs.set('since', args.since.trim())\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/search?${qs}`, { forumUrl: args.forumUrl })\n}\n\n/** Newest readable posts across the whole forum. Returns `{ id, title, username, timestamp, createdAt }`. */\nexport async function continuumDaoForumRecent(args: {\n hours?: number\n since?: string\n start?: number\n limit?: number\n ticket?: string\n forumUrl?: string\n}) {\n assertContinuumDaoForumRecentInput(args)\n const qs = new URLSearchParams()\n if (args.hours != null) qs.set('hours', String(args.hours))\n if (args.since?.trim()) qs.set('since', args.since.trim())\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/recent?${qs}`, {\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n })\n}\n\nexport function assertContinuumDaoForumDeleteInput(args: {\n pid?: string | number\n tid?: string | number\n url?: string\n username?: string\n hours?: number\n since?: string\n ticket?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to delete forum posts')\n }\n assertForumHours(args.hours)\n const hasPost = args.pid != null && String(args.pid).trim() !== ''\n const hasThread = Boolean(args.url?.trim() || (args.tid != null && String(args.tid).trim() !== ''))\n const hasUser = Boolean(args.username?.trim())\n if (Number(hasPost) + Number(hasThread) + Number(hasUser) !== 1) {\n throw new Error('Provide exactly one of pid, tid/url, or username')\n }\n}\n\n/** Admin/moderator soft-delete. Recency (`hours` / `since`) is optional; default is all. */\nexport async function continuumDaoForumDelete(args: {\n pid?: string | number\n tid?: string | number\n url?: string\n username?: string\n hours?: number\n since?: string\n ticket?: string\n forumUrl?: string\n}) {\n assertContinuumDaoForumDeleteInput(args)\n return forumFetch('/api/continuum/forum/delete', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n pid: args.pid,\n tid: args.tid,\n url: args.url,\n username: args.username,\n hours: args.hours,\n since: args.since,\n }),\n })\n}\n\nexport async function continuumDaoForumUserPostIds(args: {\n username: string\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n const qs = new URLSearchParams({ username: args.username })\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n return forumFetch(`/api/continuum/forum/user/posts?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoForumReply(args: {\n url?: string\n tid?: string | number\n content: string\n toPid?: number\n ticket?: string\n forumUrl?: string\n}) {\n return forumFetch('/api/continuum/forum/reply', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n url: args.url,\n tid: args.tid,\n content: args.content,\n toPid: args.toPid,\n }),\n })\n}\n\nexport async function continuumDaoForumReact(args: {\n pid: string | number\n emoji: string\n ticket?: string\n forumUrl?: string\n}) {\n return forumFetch('/api/continuum/forum/react', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ pid: args.pid, emoji: args.emoji }),\n })\n}\n\nexport async function continuumDaoForumCreateTopic(args: {\n section?: string\n cid?: number\n title: string\n content: string\n ticket?: string\n forumUrl?: string\n}) {\n if (isForumIdeaSection(args.section)) {\n throw new Error(\n 'Ideas & Suggestions is not a proposal category. Use ctm_continuum_dao_forum_create_idea for discussion. Formal proposals must use decision, election, treasury, constitution, or admin.',\n )\n }\n return forumFetch('/api/continuum/forum/topic', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n section: args.section,\n cid: args.cid,\n title: args.title,\n content: args.content,\n }),\n })\n}\n\n/** Informal Ideas & Suggestions post. Not a proposal and not a valid forumKey. */\nexport async function continuumDaoForumCreateIdea(args: {\n title: string\n content: string\n ticket?: string\n forumUrl?: string\n}) {\n return forumFetch('/api/continuum/forum/topic', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n section: FORUM_IDEA_SECTION,\n title: args.title,\n content: args.content,\n }),\n })\n}\n\nexport async function continuumDaoForumMe(args: { ticket?: string; forumUrl?: string } = {}) {\n return forumFetch('/api/continuum/forum/me', { forumUrl: args.forumUrl, ticket: args.ticket })\n}\n\nexport function assertContinuumDaoForumMarkReadInput(args: {\n ticket?: string\n tid?: string | number\n url?: string\n tids?: Array<string | number>\n all?: boolean\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to mark forum topics read')\n }\n const all = Boolean(args.all)\n const one = Boolean(args.url?.trim() || (args.tid != null && String(args.tid).trim() !== ''))\n const many = Array.isArray(args.tids) && args.tids.length > 0\n if (Number(all) + Number(one) + Number(many) !== 1) {\n throw new Error('Provide exactly one of tid/url, tids, or all')\n }\n}\n\nexport async function continuumDaoForumUnread(args: {\n ticket?: string\n filter?: string\n start?: number\n limit?: number\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to list unread forum topics')\n }\n const qs = new URLSearchParams()\n if (args.filter?.trim()) qs.set('filter', args.filter.trim())\n if (args.start != null) qs.set('start', String(args.start))\n if (args.limit != null) qs.set('limit', String(args.limit))\n const suffix = qs.toString() ? `?${qs}` : ''\n return forumFetch(`/api/continuum/forum/unread${suffix}`, {\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n })\n}\n\nexport async function continuumDaoForumMarkRead(args: {\n ticket?: string\n tid?: string | number\n url?: string\n tids?: Array<string | number>\n all?: boolean\n forumUrl?: string\n}) {\n assertContinuumDaoForumMarkReadInput(args)\n return forumFetch('/api/continuum/forum/read', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n tid: args.tid,\n url: args.url,\n tids: args.tids,\n all: args.all,\n }),\n })\n}\n\nexport async function continuumDaoForumMarkUnread(args: {\n ticket?: string\n tid?: string | number\n url?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to mark a forum topic unread')\n }\n if (!args.url?.trim() && (args.tid == null || String(args.tid).trim() === '')) {\n throw new Error('Provide tid or url')\n }\n return forumFetch('/api/continuum/forum/unread', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ tid: args.tid, url: args.url }),\n })\n}\n\nexport async function continuumDaoForumSections(args: { forumUrl?: string } = {}) {\n return forumFetch('/api/continuum/forum/sections', { forumUrl: args.forumUrl })\n}\n\nexport async function continuumDaoMpaListing(args: {\n kind: 'offer' | 'request' | 'directory' | 'opportunity'\n title?: string\n summary: string\n details: string\n capabilities: string[]\n expiresAt?: string\n contact?: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to post an MPA listing')\n }\n return forumFetch('/api/continuum/forum/listing', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n kind: args.kind,\n title: args.title,\n summary: args.summary,\n details: args.details,\n capabilities: args.capabilities,\n expiresAt: args.expiresAt,\n contact: args.contact,\n }),\n })\n}\n\nexport async function continuumDaoMpaRetract(args: {\n url?: string\n tid?: string | number\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to retract an MPA listing')\n }\n return forumFetch('/api/continuum/forum/retract', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ url: args.url, tid: args.tid }),\n })\n}\n\nexport async function continuumDaoMpaFlag(args: {\n url?: string\n tid?: string | number\n reason: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to flag an MPA listing')\n }\n return forumFetch('/api/continuum/forum/flag', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ url: args.url, tid: args.tid, reason: args.reason }),\n })\n}\n\nexport async function continuumDaoMpaMailboxList(args: { ticket?: string; forumUrl?: string } = {}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to list Agent Mail')\n }\n return forumFetch('/api/continuum/forum/mailbox', { forumUrl: args.forumUrl, ticket: args.ticket })\n}\n\nexport async function continuumDaoMpaMailboxOpen(args: {\n username: string\n content?: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to open Agent Mail')\n }\n return forumFetch('/api/continuum/forum/mailbox', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ username: args.username, content: args.content }),\n })\n}\n\nexport async function continuumDaoMpaMailboxSend(args: {\n username?: string\n url?: string\n tid?: string | number\n content: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to send Agent Mail')\n }\n return forumFetch('/api/continuum/forum/mailbox/send', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({\n username: args.username,\n url: args.url,\n tid: args.tid,\n content: args.content,\n }),\n })\n}\n\nexport async function continuumDaoTechnocoreBind(args: {\n did: string\n signature: string\n ticket?: string\n forumUrl?: string\n}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to bind a Technocore DID')\n }\n return forumFetch('/api/continuum/forum/technocore/bind', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({ did: args.did, signature: args.signature }),\n })\n}\n\nexport async function continuumDaoForumSignOut(args: { ticket?: string; forumUrl?: string } = {}) {\n if (!args.ticket?.trim()) {\n throw new Error('ticket is required to sign out')\n }\n return forumFetch('/api/continuum/eip712/logout', {\n method: 'POST',\n forumUrl: args.forumUrl,\n ticket: args.ticket,\n body: JSON.stringify({}),\n })\n}\n\nexport type ForumSignInEligible = {\n ok: boolean\n eligible: boolean\n address?: string\n reason?: string\n}\n\nexport async function continuumDaoForumSignInEligible(args: {\n address: string\n forumUrl?: string\n}): Promise<ForumSignInEligible> {\n const address = getAddress(args.address)\n const url = `${continuumDaoForumUrl(args.forumUrl)}/api/continuum/eip712/eligible?address=${encodeURIComponent(address)}`\n const res = await fetch(url, { headers: { Accept: 'application/json' }, cache: 'no-store' })\n const body = (await res.json().catch(() => ({}))) as Record<string, unknown>\n const st = body.status && typeof body.status === 'object' ? (body.status as Record<string, unknown>) : null\n const reason =\n (typeof body.reason === 'string' && body.reason) ||\n (st && typeof st.message === 'string' && st.message) ||\n undefined\n const ok = res.ok && Boolean(body.ok ?? body.eligible)\n return {\n ok,\n eligible: ok,\n address: typeof body.address === 'string' ? body.address : address,\n reason: ok ? undefined : reason || 'Address does not meet the veCTM threshold',\n }\n}\n\nexport async function continuumDaoForumSignInNonce(args: {\n address: string\n nodeKey?: string\n username?: string\n forumUrl?: string\n}) {\n const qs = new URLSearchParams({\n address: args.address,\n nodeKey: args.nodeKey || '',\n username: args.username || '',\n })\n return forumFetch(`/api/continuum/eip712/nonce?${qs}`, { forumUrl: args.forumUrl })\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoForumSignIn(args: {\n keyGen: KeyGenSubset\n executorAddress: string\n chainId: number\n purposeText: string\n nodeKey?: string\n username?: string\n forumUrl?: string\n expiryDate?: number\n}) {\n const owner = getAddress(args.executorAddress)\n const gate = await continuumDaoForumSignInEligible({ address: owner, forumUrl: args.forumUrl })\n if (!gate.ok) {\n throw new Error(\n `${gate.reason || 'Address does not meet the veCTM threshold'}. Do not start a multi-sign request.`,\n )\n }\n const typed = (await continuumDaoForumSignInNonce({\n address: owner,\n nodeKey: args.nodeKey,\n username: args.username,\n forumUrl: args.forumUrl,\n })) as {\n domain: { name: string; version: string; chainId: number; verifyingContract: `0x${string}` }\n types: Record<string, { name: string; type: string }[]>\n primaryType: string\n message: Record<string, unknown>\n nodeKey?: string\n }\n const types = { ...typed.types }\n delete types.EIP712Domain\n return buildEip712Multisign({\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n destinationChainID: String(args.chainId),\n destinationAddress: owner,\n legs: [\n {\n typedData: {\n domain: typed.domain,\n types,\n primaryType: typed.primaryType,\n message: typed.message,\n },\n delivery: {\n kind: FORUM_LOGIN_DELIVERY_KIND,\n forum: continuumDaoForumUrl(args.forumUrl),\n nodeKey: args.nodeKey || typed.nodeKey || '',\n },\n },\n ],\n expiryDate: args.expiryDate,\n })\n}\n","/**\n * ContinuumDAO governor encode + Multi-Sign builders.\n * Do not prepend billing legs. Queue is not implemented on-chain (no timelock).\n */\nimport { type Address, createPublicClient, defineChain, encodeFunctionData, encodePacked, getAddress, keccak256, padHex, parseAbi, toHex, zeroAddress } from 'viem'\nimport { defiEvmTransport } from '../../../core/defiEvmClient.js'\nimport { buildEvmMultisignBatch } from '../../../chains/evm/buildBatch.js'\nimport type { EvmTxStep } from '../../../chains/evm/types.js'\nimport {\n CONTINUUM_DAO_GOVERNANCE_API,\n CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS,\n CONTINUUM_DAO_PROTOCOL_ID,\n governorAddressOnEvmChain,\n isConfiguredAddress,\n isContinuumDaoLockChain,\n} from './constants.js'\nimport { assertContinuumDaoForumTopicKey } from './forum.js'\nimport type { ContinuumDaoCommonArgs } from './multisign.js'\n\nexport const CONTINUUM_DAO_PROPOSE_FALLBACK = 550_000n\nexport const CONTINUUM_DAO_VOTE_FALLBACK = 220_000n\nexport const CONTINUUM_DAO_EXECUTE_FALLBACK = 800_000n\nexport const CONTINUUM_DAO_CANCEL_FALLBACK = 180_000n\n\nexport const CONTINUUM_DAO_GOV_EVM_TYPES = new Set([\n 'continuum_dao_propose',\n 'continuum_dao_cast_vote',\n 'continuum_dao_execute',\n 'continuum_dao_cancel',\n])\n\nconst governorWriteAbi = parseAbi([\n 'function propose(address[] targets, uint256[] values, bytes[] calldatas, string description) returns (uint256)',\n 'function castVote(uint256 proposalId, uint8 support) returns (uint256)',\n 'function castVoteWithReasonAndParams(uint256 proposalId, uint8 support, string reason, bytes params) returns (uint256)',\n 'function execute(uint256 proposalId) payable',\n 'function cancel(uint256 proposalId)',\n])\n\nconst governorReadAbi = parseAbi([\n 'function hashProposal(address[] targets, uint256[] values, bytes[] calldatas, bytes32 descriptionHash) view returns (uint256)',\n 'function state(uint256 proposalId) view returns (uint8)',\n 'function getVotes(address account, uint256 timepoint) view returns (uint256)',\n 'function proposalThreshold() view returns (uint256)',\n 'function proposalCount() view returns (uint256)',\n 'function clock() view returns (uint48)',\n 'function proposalVotes(uint256 proposalId) view returns (uint256 againstVotes, uint256 forVotes, uint256 abstainVotes)',\n 'function hasVoted(uint256 proposalId, address account) view returns (bool)',\n 'function proposalSnapshot(uint256 proposalId) view returns (uint256)',\n])\n\nexport type GovActionInput = {\n target: string\n value?: string\n signature?: string\n inputs?: { name?: string; type: string; value: string }[]\n}\n\nexport type GovOptionInput = {\n label: string\n actions: GovActionInput[]\n}\n\nfunction splitAbiParamList(inner: string): string[] {\n const out: string[] = []\n let buf = ''\n let depth = 0\n for (const ch of inner) {\n if (ch === '(') depth += 1\n if (ch === ')') depth -= 1\n if (ch === ',' && depth === 0) {\n if (buf.trim()) out.push(buf.trim())\n buf = ''\n continue\n }\n buf += ch\n }\n if (buf.trim()) out.push(buf.trim())\n return out\n}\n\nfunction signatureToAbiInputs(signature: string): { type: string }[] {\n const start = signature.indexOf('(')\n if (start === -1) return []\n let depth = 0\n let end = -1\n for (let i = start; i < signature.length; i++) {\n const ch = signature[i]\n if (ch === '(') depth += 1\n if (ch === ')') {\n depth -= 1\n if (depth === 0) {\n end = i\n break\n }\n }\n }\n if (end === -1) return []\n const inner = signature.slice(start + 1, end)\n if (!inner.trim()) return []\n return splitAbiParamList(inner).map((t) => ({ type: t }))\n}\n\nfunction coerceAbiValue(type: string, value: string): string | bigint | boolean | unknown[] {\n const trimmed = (value ?? '').trim()\n if (type.startsWith('(') && type.endsWith(')')) {\n const parsed = JSON.parse(trimmed || '[]') as unknown\n if (!Array.isArray(parsed)) throw new Error('tuple value must be a JSON array')\n const parts = splitAbiParamList(type.slice(1, -1))\n return parts.map((part, i) => {\n const child = parsed[i]\n if (typeof child === 'string') return coerceAbiValue(part, child)\n return coerceAbiValue(part, JSON.stringify(child ?? ''))\n })\n }\n const fixed = type.match(/^(.+)\\[(\\d+)\\]$/)\n if (fixed && !type.endsWith('[]')) {\n const parsed = trimmed.startsWith('[') ? (JSON.parse(trimmed) as unknown) : trimmed.split(',')\n if (!Array.isArray(parsed)) throw new Error('fixed array value must be a JSON array')\n return (parsed as unknown[]).map((x) => coerceAbiValue(fixed[1]!, String(x)))\n }\n if (type.endsWith('[]')) {\n const arr = trimmed.startsWith('[')\n ? (JSON.parse(trimmed) as unknown[]).map((x) => String(x))\n : trimmed\n ? trimmed.split(',').map((s) => s.trim())\n : []\n const baseType = type.slice(0, -2)\n return arr.map((v) => coerceAbiValue(baseType, v)) as unknown[]\n }\n if (type === 'address') return trimmed as `0x${string}`\n if (type.startsWith('uint') || type.startsWith('int')) return BigInt(trimmed || '0')\n if (type === 'bool') return trimmed === 'true' || trimmed === '1'\n return trimmed\n}\n\nexport function encodeGovActionCalldata(signature: string, inputs: { type: string; value: string }[] = []): `0x${string}` {\n const sig = signature.trim()\n if (!sig) return '0x'\n const name = sig.slice(0, sig.indexOf('(') === -1 ? sig.length : sig.indexOf('('))\n const types = signatureToAbiInputs(sig)\n if (types.length !== inputs.length) throw new Error('encodeGovActionCalldata: inputs length mismatch')\n const args = inputs.map((inp, i) => coerceAbiValue(types[i]!.type, inp.value))\n return encodeFunctionData({\n abi: [\n {\n type: 'function' as const,\n name,\n inputs: types.map((t, i) => ({ name: `arg${i}`, type: t.type })),\n outputs: [],\n stateMutability: 'nonpayable' as const,\n },\n ],\n functionName: name,\n args,\n })\n}\n\nexport function proposalDescriptionHash(description: string): `0x${string}` {\n return keccak256(encodePacked(['string'], [description]))\n}\n\nexport function encodeDeltaMetadata(nOptions: number, nWinners: number, optionStartIndices: number[]): `0x${string}` {\n if (optionStartIndices.length !== nOptions) {\n throw new Error('encodeDeltaMetadata: optionStartIndices length must equal nOptions')\n }\n const parts = [\n padHex(toHex(nOptions), { size: 32 }).slice(2),\n padHex(toHex(nWinners), { size: 32 }).slice(2),\n ...optionStartIndices.map((i) => padHex(toHex(i), { size: 32 }).slice(2)),\n ]\n return (`0x${parts.join('')}`) as `0x${string}`\n}\n\n/** Delta vote params: one uint256 per option plus a final NOTA slot. */\nexport function encodeDeltaVoteParams(weights: Array<string | number | bigint>): `0x${string}` {\n if (weights.length < 3) throw new Error('Delta vote params need nOptions + NOTA (at least 3 slots).')\n return (`0x${weights.map((w) => padHex(toHex(BigInt(w)), { size: 32 }).slice(2)).join('')}`) as `0x${string}`\n}\n\nfunction noOpAction(noOpTarget: Address): { target: Address; value: bigint; calldata: `0x${string}` } {\n return { target: getAddress(noOpTarget), value: 0n, calldata: '0x' }\n}\n\nfunction encodeUserAction(a: GovActionInput): { target: Address; value: bigint; calldata: `0x${string}` } {\n const target = getAddress(a.target)\n if (target === zeroAddress) throw new Error('Action target cannot be the zero address (reserved for Delta metadata).')\n const value = BigInt(String(a.value || '0'))\n const calldata = encodeGovActionCalldata(a.signature ?? '', a.inputs ?? [])\n return { target, value, calldata }\n}\n\nexport function buildBravoProposalArgs(\n actions: GovActionInput[],\n description: string,\n noOpTarget: string,\n): {\n targets: Address[]\n values: bigint[]\n calldatas: `0x${string}`[]\n description: string\n} {\n const encoded =\n actions.length === 0 ? [noOpAction(getAddress(noOpTarget))] : actions.map(encodeUserAction)\n if (encoded[0]!.target === zeroAddress) {\n throw new Error('Bravo first target cannot be address(0); that encoding is Delta.')\n }\n return {\n targets: encoded.map((e) => e.target),\n values: encoded.map((e) => e.value),\n calldatas: encoded.map((e) => e.calldata),\n description,\n }\n}\n\nexport function buildDeltaProposalArgs(\n options: GovOptionInput[],\n nWinners: number,\n description: string,\n noOpTarget: string,\n): {\n targets: Address[]\n values: bigint[]\n calldatas: `0x${string}`[]\n description: string\n} {\n if (options.length < 2) throw new Error('Delta proposals need at least 2 options.')\n if (nWinners < 1 || nWinners >= options.length) throw new Error('Delta nWinners must be >= 1 and < nOptions.')\n const fallback = getAddress(noOpTarget)\n const targets: Address[] = [zeroAddress]\n const values: bigint[] = [0n]\n const calldatas: `0x${string}`[] = []\n const optionStartIndices: number[] = []\n let nextIndex = 1\n for (const opt of options) {\n optionStartIndices.push(nextIndex)\n const userActions = opt.actions ?? []\n const encoded = userActions.length === 0 ? [noOpAction(fallback)] : userActions.map(encodeUserAction)\n for (const e of encoded) {\n targets.push(e.target)\n values.push(e.value)\n calldatas.push(e.calldata)\n nextIndex += 1\n }\n }\n calldatas.unshift(encodeDeltaMetadata(options.length, nWinners, optionStartIndices))\n return { targets, values, calldatas, description }\n}\n\nfunction requireGovChain(chainId: number): void {\n if (!isContinuumDaoLockChain(chainId)) {\n throw new Error('ContinuumDAO governance is Linea-only.')\n }\n}\n\nfunction requireGovernor(chainId: number, override?: string): Address {\n requireGovChain(chainId)\n if (override && isConfiguredAddress(override)) return getAddress(override)\n const gov = governorAddressOnEvmChain(chainId)\n if (!gov) throw new Error('Governor address is not configured for this chain yet.')\n return gov\n}\n\nfunction meta(\n evmType: string,\n chainId: number,\n to: Address,\n extra: Record<string, unknown>,\n gasLimit: bigint,\n): Record<string, unknown> {\n return {\n destinationAddress: to,\n signatureText: JSON.stringify({ kind: 'ContinuumDAO', ...extra, chainId }),\n evm: { type: evmType, version: 1, chainId: String(chainId), protocolId: CONTINUUM_DAO_PROTOCOL_ID },\n continuumDao: { ...extra, gas: { baseGasUnits: gasLimit.toString() } },\n }\n}\n\nasync function finalizeGov(\n args: ContinuumDaoCommonArgs,\n to: Address,\n data: `0x${string}`,\n fallbackGas: bigint,\n evmType: string,\n extra: Record<string, unknown>,\n purposeSuffix: string,\n value = 0n,\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const step: EvmTxStep = { to, data, value, fallbackGas }\n const firstDataNo0x = data.startsWith('0x') ? data.slice(2) : data\n return buildEvmMultisignBatch({\n context: {\n chainCategory: 'evm',\n keyGen: args.keyGen,\n purposeText: args.purposeText,\n chainId: args.chainId,\n rpcUrl: args.rpcUrl.trim(),\n executorAddress: args.executorAddress,\n chainDetail: args.chainDetail,\n useCustomGas: args.useCustomGas,\n customGasChainDetails: args.customGasChainDetails,\n },\n steps: [step],\n purposeSuffix,\n firstMsgRawNo0x: firstDataNo0x,\n destinationAddress: to,\n buildBatchMeta: ({ gasLimit }) => meta(evmType, args.chainId, to, extra, gasLimit),\n })\n}\n\nasync function requireProposalThreshold(\n args: ContinuumDaoCommonArgs & { governor?: string },\n): Promise<{ votes: string; threshold: string }> {\n const power = await continuumDaoFetchVotingPower({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n account: args.executorAddress,\n governor: args.governor,\n })\n if (BigInt(power.votes) < BigInt(power.threshold)) {\n throw new Error(\n `Proposer voting power ${power.votes} is below ContinuumDAO.proposalThreshold() ${power.threshold}. ` +\n `On-chain rule: max(1000e18 ve power, 1% of total voting power). Delegation applies at the KeyGen ETH address.`,\n )\n }\n return power\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoProposeBravo(\n args: ContinuumDaoCommonArgs & {\n title: string\n actions?: GovActionInput[]\n governor?: string\n noOpTarget?: string\n forumKey: string\n forumUrl?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string; proposalArgs: ReturnType<typeof buildBravoProposalArgs> }> {\n const forumKey = assertContinuumDaoForumTopicKey(args.forumKey, args.forumUrl)\n const gov = requireGovernor(args.chainId, args.governor)\n await requireProposalThreshold(args)\n const noOp = args.noOpTarget?.trim() || args.executorAddress\n const proposalArgs = buildBravoProposalArgs(args.actions ?? [], args.title.trim(), noOp)\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'propose',\n args: [proposalArgs.targets, proposalArgs.values, proposalArgs.calldatas, proposalArgs.description],\n })\n const built = await finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_PROPOSE_FALLBACK,\n 'continuum_dao_propose',\n { name: 'ContinuumDAO.propose', configuration: 'bravo', title: proposalArgs.description, forumKey },\n 'continuum-dao propose bravo',\n )\n return { ...built, proposalArgs }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoProposeDelta(\n args: ContinuumDaoCommonArgs & {\n title: string\n options: GovOptionInput[]\n nWinners: number\n governor?: string\n noOpTarget?: string\n forumKey: string\n forumUrl?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string; proposalArgs: ReturnType<typeof buildDeltaProposalArgs> }> {\n const forumKey = assertContinuumDaoForumTopicKey(args.forumKey, args.forumUrl)\n const gov = requireGovernor(args.chainId, args.governor)\n await requireProposalThreshold(args)\n const noOp = args.noOpTarget?.trim() || args.executorAddress\n const proposalArgs = buildDeltaProposalArgs(args.options, Number(args.nWinners), args.title.trim(), noOp)\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'propose',\n args: [proposalArgs.targets, proposalArgs.values, proposalArgs.calldatas, proposalArgs.description],\n })\n const built = await finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_PROPOSE_FALLBACK,\n 'continuum_dao_propose',\n { name: 'ContinuumDAO.propose', configuration: 'delta', title: proposalArgs.description, nWinners: args.nWinners, forumKey },\n 'continuum-dao propose delta',\n )\n return { ...built, proposalArgs }\n}\n\nasync function requireVoteEligible(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; governor?: string },\n): Promise<void> {\n const st = await continuumDaoFetchProposalState({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n proposalId: args.proposalId,\n governor: args.governor,\n })\n if (st.state !== 1) {\n throw new Error(`Proposal is not Active (on-chain state ${st.state}).`)\n }\n const elig = await continuumDaoFetchProposalVoteEligibility({\n chainId: args.chainId,\n rpcUrl: args.rpcUrl,\n proposalId: args.proposalId,\n account: args.executorAddress,\n governor: args.governor,\n })\n if (elig.hasVoted) throw new Error('This KeyGen has already voted on this proposal.')\n if (BigInt(elig.snapshotVotes) === 0n) {\n throw new Error('No veCTM voting power at snapshot for this KeyGen.')\n }\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCastVoteBravo(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; support: 0 | 1 | 2; governor?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const gov = requireGovernor(args.chainId, args.governor)\n const proposalId = BigInt(String(args.proposalId).trim())\n await requireVoteEligible(args)\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'castVote',\n args: [proposalId, args.support],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_VOTE_FALLBACK,\n 'continuum_dao_cast_vote',\n { name: 'ContinuumDAO.castVote', proposalId: proposalId.toString(), support: args.support },\n 'continuum-dao vote bravo',\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCastVoteDelta(\n args: ContinuumDaoCommonArgs & {\n proposalId: string | number | bigint\n weights: Array<string | number | bigint>\n governor?: string\n },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const gov = requireGovernor(args.chainId, args.governor)\n const proposalId = BigInt(String(args.proposalId).trim())\n if (args.weights.length < 3) {\n throw new Error('Delta vote must include one weight per option plus a NOTA slot.')\n }\n await requireVoteEligible(args)\n const params = encodeDeltaVoteParams(args.weights)\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'castVoteWithReasonAndParams',\n args: [proposalId, 0, '', params],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_VOTE_FALLBACK,\n 'continuum_dao_cast_vote',\n { name: 'ContinuumDAO.castVoteWithReasonAndParams', proposalId: proposalId.toString() },\n 'continuum-dao vote delta',\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoExecute(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; governor?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const gov = requireGovernor(args.chainId, args.governor)\n const proposalId = BigInt(String(args.proposalId).trim())\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'execute',\n args: [proposalId],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_EXECUTE_FALLBACK,\n 'continuum_dao_execute',\n { name: 'ContinuumDAO.execute', proposalId: proposalId.toString() },\n 'continuum-dao execute',\n )\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCancel(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; governor?: string },\n): Promise<{ bodyForSign: Record<string, unknown>; messageToSign: string }> {\n const gov = requireGovernor(args.chainId, args.governor)\n const proposalId = BigInt(String(args.proposalId).trim())\n const data = encodeFunctionData({\n abi: governorWriteAbi,\n functionName: 'cancel',\n args: [proposalId],\n })\n return finalizeGov(\n args,\n gov,\n data,\n CONTINUUM_DAO_CANCEL_FALLBACK,\n 'continuum_dao_cancel',\n { name: 'ContinuumDAO.cancel', proposalId: proposalId.toString() },\n 'continuum-dao cancel',\n )\n}\n\nfunction publicClient(rpcUrl: string, chainId: number) {\n return createPublicClient({\n chain: defineChain({\n id: chainId,\n name: 'ContinuumDAO',\n nativeCurrency: { decimals: 18, name: 'Ether', symbol: 'ETH' },\n rpcUrls: { default: { http: [rpcUrl.trim()] } },\n }),\n transport: defiEvmTransport(rpcUrl.trim()),\n })\n}\n\nexport async function continuumDaoHashProposal(args: {\n chainId: number | string\n rpcUrl: string\n targets: Address[]\n values: bigint[]\n calldatas: `0x${string}`[]\n description: string\n governor?: string\n}): Promise<{ proposalId: string }> {\n const chainId = Number(args.chainId)\n const gov = requireGovernor(chainId, args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const id = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'hashProposal',\n args: [args.targets, args.values, args.calldatas, proposalDescriptionHash(args.description)],\n })\n return { proposalId: id.toString() }\n}\n\nexport async function continuumDaoFetchVotingPower(args: {\n chainId: number | string\n rpcUrl: string\n account: string\n governor?: string\n}): Promise<{ votes: string; threshold: string; clock: string }> {\n const chainId = Number(args.chainId)\n const gov = requireGovernor(chainId, args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const clock = await client.readContract({ address: gov, abi: governorReadAbi, functionName: 'clock' })\n const timepoint = clock > 0 ? clock - 1 : 0\n const [votes, threshold] = await Promise.all([\n client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'getVotes',\n args: [getAddress(args.account), BigInt(timepoint)],\n }),\n client.readContract({ address: gov, abi: governorReadAbi, functionName: 'proposalThreshold' }),\n ])\n return { votes: votes.toString(), threshold: threshold.toString(), clock: clock.toString() }\n}\n\nexport async function continuumDaoFetchProposalState(args: {\n chainId: number | string\n rpcUrl: string\n proposalId: string | number | bigint\n governor?: string\n}): Promise<{\n state: number\n againstVotes: string\n forVotes: string\n abstainVotes: string\n /** True when proposalVotes() failed but state() succeeded. */\n votesPartial: boolean\n}> {\n const chainId = Number(args.chainId)\n const gov = requireGovernor(chainId, args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const proposalId = BigInt(String(args.proposalId).trim())\n const state = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'state',\n args: [proposalId],\n })\n let againstVotes = '0'\n let forVotes = '0'\n let abstainVotes = '0'\n let votesPartial = false\n try {\n const votes = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'proposalVotes',\n args: [proposalId],\n })\n againstVotes = votes[0].toString()\n forVotes = votes[1].toString()\n abstainVotes = votes[2].toString()\n } catch {\n votesPartial = true\n }\n return {\n state: Number(state),\n againstVotes,\n forVotes,\n abstainVotes,\n votesPartial,\n }\n}\n\n/** Snapshot voting power and prior vote for a KeyGen on a proposal. */\nexport async function continuumDaoFetchProposalVoteEligibility(args: {\n chainId: number | string\n rpcUrl: string\n proposalId: string | number | bigint\n account: string\n governor?: string\n}): Promise<{ hasVoted: boolean; snapshotVotes: string; snapshotBlock: string }> {\n const chainId = Number(args.chainId)\n const gov = requireGovernor(chainId, args.governor)\n const client = publicClient(args.rpcUrl, chainId)\n const proposalId = BigInt(String(args.proposalId).trim())\n const account = getAddress(args.account)\n const [hasVoted, snapshotBlock] = await Promise.all([\n client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'hasVoted',\n args: [proposalId, account],\n }),\n client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'proposalSnapshot',\n args: [proposalId],\n }),\n ])\n const snapshotVotes = await client.readContract({\n address: gov,\n abi: governorReadAbi,\n functionName: 'getVotes',\n args: [account, snapshotBlock],\n })\n return {\n hasVoted,\n snapshotVotes: snapshotVotes.toString(),\n snapshotBlock: snapshotBlock.toString(),\n }\n}\n\nexport async function continuumDaoFetchProposalCount(args: {\n chainId: number\n rpcUrl: string\n governor?: string\n}): Promise<{ count: string }> {\n const gov = requireGovernor(args.chainId, args.governor)\n const client = publicClient(args.rpcUrl, args.chainId)\n const count = await client.readContract({ address: gov, abi: governorReadAbi, functionName: 'proposalCount' })\n return { count: count.toString() }\n}\n\nexport type ContinuumDaoProposalCatalog = {\n proposals: unknown[]\n total?: number\n minIndex?: number\n maxIndex?: number\n}\n\n/**\n * POST /proposals `start`/`end` are **catalog id indexes**, not offsets.\n * `end` is exclusive. Superseded-governor rows use negative ids (currently -2, -1).\n */\nexport function resolveProposalCatalogRange(\n catalog: { minIndex?: number; maxIndex?: number },\n args?: { start?: number; end?: number },\n): { start: number; end: number } {\n const hasBounds = Number.isFinite(catalog.minIndex) && Number.isFinite(catalog.maxIndex)\n const minIndex = hasBounds ? Number(catalog.minIndex) : 0\n const maxIndex = hasBounds ? Number(catalog.maxIndex) : 0\n if (!hasBounds) {\n const start = args?.start ?? 0\n const end = args?.end ?? start + 20\n return { start, end }\n }\n return {\n start: args?.start ?? minIndex,\n end: args?.end ?? maxIndex + 1,\n }\n}\n\nasync function postProposalCatalog(body: Record<string, number>): Promise<ContinuumDaoProposalCatalog> {\n const res = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n })\n if (!res.ok) throw new Error(`proposals: ${res.status} ${await res.text()}`)\n return (await res.json()) as ContinuumDaoProposalCatalog\n}\n\nexport async function continuumDaoFetchProposals(args: {\n start?: number\n end?: number\n} = {}): Promise<ContinuumDaoProposalCatalog> {\n const bounds = await postProposalCatalog({})\n const { start, end } = resolveProposalCatalogRange(bounds, args)\n const listed = await postProposalCatalog({ start, end })\n return {\n ...listed,\n total: listed.total ?? bounds.total,\n minIndex: listed.minIndex ?? bounds.minIndex,\n maxIndex: listed.maxIndex ?? bounds.maxIndex,\n }\n}\n\nexport const GOVERNOR_STATE = {\n Pending: 0,\n Active: 1,\n Canceled: 2,\n Defeated: 3,\n Succeeded: 4,\n Queued: 5,\n Expired: 6,\n Executed: 7,\n} as const\n\nexport const GOVERNOR_STATE_LABELS = [\n 'Pending',\n 'Active',\n 'Canceled',\n 'Defeated',\n 'Succeeded',\n 'Queued',\n 'Expired',\n 'Executed',\n] as const\n\nexport type LiveProposalBucket = 'live' | 'pending' | 'readyToExecute' | 'recentlyCompleted' | 'unknown'\n\nexport function bucketGovernorState(state: number | null | undefined): LiveProposalBucket {\n if (state == null || !Number.isFinite(state)) return 'unknown'\n if (state === GOVERNOR_STATE.Active) return 'live'\n if (state === GOVERNOR_STATE.Pending) return 'pending'\n if (state === GOVERNOR_STATE.Succeeded) return 'readyToExecute'\n if (\n state === GOVERNOR_STATE.Canceled ||\n state === GOVERNOR_STATE.Defeated ||\n state === GOVERNOR_STATE.Queued ||\n state === GOVERNOR_STATE.Expired ||\n state === GOVERNOR_STATE.Executed\n ) {\n return 'recentlyCompleted'\n }\n return 'unknown'\n}\n\nexport type LiveProposalRow = {\n id?: number\n onchainId: string\n title: string\n configuration?: number\n governorAddress?: string\n state: number | null\n stateLabel: string\n bucket: LiveProposalBucket\n againstVotes?: string\n forVotes?: string\n abstainVotes?: string\n}\n\nexport type ContinuumDaoLiveProposalsResult = {\n overlay: 'on-chain' | 'backend-only'\n scanned: number\n live: LiveProposalRow[]\n pending: LiveProposalRow[]\n readyToExecute: LiveProposalRow[]\n recentlyCompleted: LiveProposalRow[]\n unknown: LiveProposalRow[]\n note: string\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as Record<string, unknown>) : null\n}\n\nfunction parseBackendProposal(raw: unknown): {\n id?: number\n onchainId: string\n title: string\n configuration?: number\n governorAddress?: string\n} | null {\n const row = asRecord(raw)\n if (!row) return null\n const onchainId = String(row.onchainId ?? row.onchain_id ?? row.proposalId ?? '').trim()\n if (!onchainId) return null\n const idRaw = row.id\n const id = typeof idRaw === 'number' ? idRaw : Number(idRaw)\n const governorRaw = String(row.governorAddress ?? row.governor_address ?? '').trim()\n return {\n id: Number.isFinite(id) ? id : undefined,\n onchainId,\n title: String(row.title ?? 'Untitled'),\n configuration: typeof row.configuration === 'number' ? row.configuration : undefined,\n governorAddress: isConfiguredAddress(governorRaw) ? getAddress(governorRaw) : undefined,\n }\n}\n\nexport function isLegacyContinuumDaoGovernor(addr?: string | null): boolean {\n if (!addr || !isConfiguredAddress(addr)) return false\n return getAddress(addr) === CONTINUUM_DAO_LINEA_GOVERNOR_LEGACY_ADDRESS\n}\n\nexport function summarizeLiveProposals(result: Omit<ContinuumDaoLiveProposalsResult, 'note'>): string {\n if (result.overlay === 'backend-only') {\n return `Scanned ${result.scanned} backend proposal(s) but could not overlay ContinuumDAO.state. Do not call them live. Pass Linea chainId + rpcUrl + a non-zero governor.`\n }\n const liveTitles = result.live.map((p) => `#${p.id ?? '—'} ${p.title}`).join('; ') || 'none'\n const execTitles = result.readyToExecute.map((p) => `#${p.id ?? '—'} ${p.title}`).join('; ') || 'none'\n return `Live (Active, voting now): ${result.live.length} (${liveTitles}). Pending: ${result.pending.length}. Passed, ready to execute (Succeeded): ${result.readyToExecute.length} (${execTitles}). Recently completed in this scan: ${result.recentlyCompleted.length}. Queue is not implemented.`\n}\n\nasync function mapPool<T, R>(items: T[], concurrency: number, fn: (item: T) => Promise<R>): Promise<R[]> {\n const out: R[] = []\n let i = 0\n const workers = Array.from({ length: Math.min(concurrency, items.length) }, async () => {\n while (i < items.length) {\n const idx = i\n i += 1\n out[idx] = await fn(items[idx]!)\n }\n })\n await Promise.all(workers)\n return out\n}\n\nexport async function continuumDaoFetchLiveProposals(args: {\n chainId?: number | string\n rpcUrl?: string\n governor?: string\n limit?: number\n completedLimit?: number\n}): Promise<ContinuumDaoLiveProposalsResult> {\n const limit = Math.min(Math.max(Number(args.limit) || 40, 1), 100)\n const completedLimit = Math.min(Math.max(Number(args.completedLimit) || 8, 0), 20)\n const listed = await continuumDaoFetchProposals()\n const rawList = Array.isArray(listed.proposals) ? listed.proposals : []\n const parsed = rawList.map(parseBackendProposal).filter((p): p is NonNullable<typeof p> => p != null)\n const ordered = [...parsed].sort((a, b) => (a.id ?? 0) - (b.id ?? 0))\n const latest = ordered.length > limit ? ordered.slice(ordered.length - limit) : ordered\n\n const chainId = args.chainId != null && String(args.chainId).trim() !== '' ? Number(args.chainId) : NaN\n const rpcUrl = (args.rpcUrl ?? '').trim()\n let overlay: 'on-chain' | 'backend-only' = 'backend-only'\n try {\n if (rpcUrl && Number.isFinite(chainId)) {\n requireGovernor(chainId, args.governor)\n overlay = 'on-chain'\n }\n } catch {\n overlay = 'backend-only'\n }\n\n const rows: LiveProposalRow[] = overlay === 'on-chain'\n ? await mapPool(latest, 6, async (p) => {\n try {\n const st = await continuumDaoFetchProposalState({\n chainId,\n rpcUrl,\n proposalId: p.onchainId,\n governor: p.governorAddress ?? args.governor,\n })\n return {\n ...p,\n state: st.state,\n stateLabel: GOVERNOR_STATE_LABELS[st.state] ?? String(st.state),\n bucket: bucketGovernorState(st.state),\n againstVotes: st.againstVotes,\n forVotes: st.forVotes,\n abstainVotes: st.abstainVotes,\n }\n } catch {\n return { ...p, state: null, stateLabel: 'Unknown', bucket: 'unknown' as const }\n }\n })\n : latest.map((p) => ({ ...p, state: null, stateLabel: 'Unknown', bucket: 'unknown' as const }))\n\n const live = rows.filter((r) => r.bucket === 'live')\n const pending = rows.filter((r) => r.bucket === 'pending')\n const readyToExecute = rows.filter((r) => r.bucket === 'readyToExecute')\n const recentlyCompleted = rows.filter((r) => r.bucket === 'recentlyCompleted').slice(0, completedLimit)\n const unknown = rows.filter((r) => r.bucket === 'unknown')\n const grouped = {\n overlay,\n scanned: rows.length,\n live,\n pending,\n readyToExecute,\n recentlyCompleted,\n unknown,\n }\n return { ...grouped, note: summarizeLiveProposals(grouped) }\n}\n\nexport async function continuumDaoFetchProposal(args: { id: string | number }): Promise<{ proposal: unknown }> {\n const res = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals/${args.id}`, { cache: 'no-store' })\n if (!res.ok) throw new Error(`proposal: ${res.status} ${await res.text()}`)\n return { proposal: await res.json() }\n}\n\nexport type ContinuumDaoRegisterProposalPayload = {\n onchainId: string\n title: string\n description: string\n proposer: string\n forumKey: string\n type: number\n configuration: 0 | 1\n actions?: unknown[]\n options?: unknown[]\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoProposeDeltaFromMcp(\n args: ContinuumDaoCommonArgs & {\n title: string\n options: GovOptionInput[]\n nWinners: string | number\n governor?: string\n noOpTarget?: string\n forumKey: string\n forumUrl?: string\n },\n) {\n return buildEvmMultisignBodyContinuumDaoProposeDelta({\n ...args,\n nWinners: Number(args.nWinners),\n })\n}\n\nexport async function buildEvmMultisignBodyContinuumDaoCastVoteBravoFromMcp(\n args: ContinuumDaoCommonArgs & { proposalId: string | number | bigint; support: 0 | 1 | 2 | string; governor?: string },\n) {\n const support = Number(args.support)\n if (support !== 0 && support !== 1 && support !== 2) throw new Error('Bravo support must be 0, 1, or 2.')\n return buildEvmMultisignBodyContinuumDaoCastVoteBravo({ ...args, support })\n}\n\nexport async function continuumDaoRegisterProposal(\n payload: ContinuumDaoRegisterProposalPayload,\n): Promise<{ ok: true; result: unknown }> {\n assertContinuumDaoForumTopicKey(payload.forumKey)\n const res = await fetch(`${CONTINUUM_DAO_GOVERNANCE_API}/proposals/create`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload),\n })\n if (!res.ok) throw new Error(`proposals/create: ${res.status} ${await res.text()}`)\n return { ok: true, result: await res.json() }\n}\n","/**\n * Turn a backend proposal into a briefing the agent can read aloud.\n * Encoder no-ops (value 0, calldata 0x) are labeled signaling, not transfers.\n */\nimport { applyForumSectionCheck, continuumDaoForumFetchThread } from './forum.js'\nimport { continuumDaoFetchProposal, continuumDaoFetchProposals, isLegacyContinuumDaoGovernor } from './governance.js'\n\nexport const PROPOSAL_TYPE_LABELS = ['Admin', 'Constitution', 'Decision', 'Election', 'Treasury'] as const\n\nconst APPROVE_RE = /^(approve|increaseAllowance|increaseapproval)\\(/i\nconst DENY_SIG_RE = /^(transfer|transferFrom|approve|increaseAllowance|setOwner|upgradeTo|upgradeToAndCall)\\(/i\n\nexport type ExplainedAction = {\n line: string\n noOp: boolean\n networkLabel: string\n chainId: string\n viaC3: boolean\n target: string\n value: string\n signature: string\n flags: string[]\n}\n\nexport type ExplainedOption = {\n label: string\n actions: ExplainedAction[]\n}\n\nexport type ContinuumDaoExplainProposalResult = {\n id?: number\n onchainId: string\n title: string\n description: string\n proposer: string\n forumKey: string\n forumSection?: string | null\n forumCid?: number | null\n typeLabel: string\n configuration: 'bravo' | 'delta'\n nWinners?: number\n governorAddress?: string\n briefing: string\n actions: ExplainedAction[]\n options: ExplainedOption[]\n risks: string[]\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return value && typeof value === 'object' && !Array.isArray(value) ? (value as Record<string, unknown>) : null\n}\n\nfunction str(v: unknown, fallback = ''): string {\n return v == null ? fallback : String(v)\n}\n\nexport function isGovNoOpAction(action: {\n target?: string\n value?: string\n signature?: string\n calldata?: string\n}): boolean {\n const value = (action.value ?? '0').trim()\n const sig = (action.signature ?? '').trim()\n const data = (action.calldata ?? '').trim()\n const emptyData = data === '' || data === '0x'\n return (value === '' || value === '0') && sig === '' && emptyData\n}\n\nconst LINEA_HOME_CHAIN_IDS = new Set(['59144', '59141'])\n\n/** Linea (DAO home chain) is never a C3 remote action, even when `network.c3governor` is set. */\nexport function isLineaHomeNetwork(net: { name?: string; label?: string; chainId?: string | number }): boolean {\n const name = `${net.name ?? ''} ${net.label ?? ''}`.toLowerCase()\n if (name.includes('linea')) return true\n return LINEA_HOME_CHAIN_IDS.has(String(net.chainId ?? ''))\n}\n\nexport function isRemoteC3Action(net: {\n name?: string\n label?: string\n chainId?: string | number\n c3governor?: string\n}): boolean {\n const c3 = (net.c3governor ?? '').trim()\n const hasC3 = Boolean(c3 && c3 !== '0x0000000000000000000000000000000000000000')\n return hasC3 && !isLineaHomeNetwork(net)\n}\n\nexport function explainGovAction(raw: unknown): ExplainedAction {\n const a = asRecord(raw) ?? {}\n const net = asRecord(a.network) ?? {}\n const networkLabel = str(net.label || net.name, 'Unknown network')\n const chainId = str(net.chainId)\n const viaC3 = isRemoteC3Action({\n name: str(net.name),\n label: str(net.label),\n chainId,\n c3governor: str(net.c3governor),\n })\n const target = str(a.target)\n const value = str(a.value, '0')\n const signature = str(a.signature)\n const inputs = Array.isArray(a.inputs) ? a.inputs : []\n const inputParts = inputs.map((inp) => {\n const row = asRecord(inp) ?? {}\n return `${str(row.name || row.type, 'arg')}=${str(row.value)}`\n })\n const noOp = isGovNoOpAction({ target, value, signature, calldata: str(a.calldata) })\n const flags: string[] = []\n if (noOp) flags.push('signaling-noop')\n if (viaC3) flags.push('c3-remote')\n if (BigInt(value || '0') > 0n) flags.push('sends-value')\n if (APPROVE_RE.test(signature)) flags.push('allowance')\n if (DENY_SIG_RE.test(signature)) flags.push('sensitive-signature')\n if (!noOp && !signature) flags.push('unknown-signature')\n const valueBit = BigInt(value || '0') > 0n ? `; send ${value} wei` : ''\n const argsBit = inputParts.length ? ` with ${inputParts.join(', ')}` : ''\n const c3Bit = viaC3 ? ' via C3' : ''\n const line = noOp\n ? `On ${networkLabel}${c3Bit}: no on-chain effect (encoder no-op / signaling).`\n : `On ${networkLabel} (chain ${chainId || '—'})${c3Bit}: call ${signature || '(no signature)'} on ${target || '—'} ${argsBit}${valueBit}.`.replace(/\\s+/g, ' ').trim()\n return { line, noOp, networkLabel, chainId, viaC3, target, value, signature, flags }\n}\n\nfunction typeLabel(type: unknown): string {\n const n = Number(type)\n return Number.isFinite(n) && PROPOSAL_TYPE_LABELS[n] ? PROPOSAL_TYPE_LABELS[n] : str(type, 'Unknown')\n}\n\nexport function explainProposalRecord(raw: unknown): ContinuumDaoExplainProposalResult {\n const row = asRecord(raw)\n if (!row) throw new Error('explain_proposal: empty proposal')\n const onchainId = str(row.onchainId ?? row.onchain_id ?? row.proposalId)\n if (!onchainId) throw new Error('explain_proposal: missing onchainId')\n const idNum = typeof row.id === 'number' ? row.id : Number(row.id)\n const governorAddress = str(row.governorAddress ?? row.governor_address).trim() || undefined\n const configuration = Number(row.configuration) === 1 ? 'delta' : 'bravo'\n const nWinners = row.nWinners != null ? Number(row.nWinners) : undefined\n const actionsRaw = Array.isArray(row.actions) ? row.actions : []\n const optionsRaw = Array.isArray(row.options) ? row.options : []\n const actions = actionsRaw.map(explainGovAction)\n const options = optionsRaw.map((opt) => {\n const o = asRecord(opt) ?? {}\n const optActions = Array.isArray(o.actions) ? o.actions.map(explainGovAction) : []\n return { label: str(o.label, 'Untitled option'), actions: optActions }\n })\n const risks: string[] = []\n const t = typeLabel(row.type)\n if (t === 'Treasury' || t === 'Admin' || t === 'Constitution') {\n risks.push(`${t} proposal — treat as high impact.`)\n }\n const all = configuration === 'delta' ? options.flatMap((o) => o.actions) : actions\n if (all.some((a) => a.flags.includes('sends-value'))) risks.push('At least one action sends native value.')\n if (all.some((a) => a.flags.includes('allowance'))) risks.push('At least one action changes token allowance.')\n if (all.some((a) => a.flags.includes('sensitive-signature'))) risks.push('Sensitive signature (transfer / approve / upgrade / ownership).')\n if (all.some((a) => a.flags.includes('unknown-signature') && !a.noOp)) risks.push('An action has no readable signature.')\n if (all.some((a) => a.viaC3)) risks.push('One or more actions execute on another network via C3, not on Linea.')\n if (!str(row.description).trim() && all.some((a) => !a.noOp)) {\n risks.push('Empty description with on-chain actions.')\n }\n\n const lines: string[] = []\n lines.push(`#${row.id ?? '—'} ${str(row.title, 'Untitled')} (${t}, ${configuration === 'delta' ? 'Delta' : 'Bravo'}).`)\n lines.push(`Proposer ${str(row.proposer) || '—'} (any EOA or contract — not required to be a KeyGen).`)\n if (governorAddress) {\n lines.push(\n isLegacyContinuumDaoGovernor(governorAddress)\n ? `Governor ${governorAddress} (superseded Linea DAO; catalog ids are negative).`\n : `Governor ${governorAddress}.`,\n )\n }\n if (str(row.forumKey)) lines.push(`Forum: ${str(row.forumKey)}`)\n if (configuration === 'bravo') {\n lines.push('If this passes, the DAO will execute, in order:')\n for (const a of actions) lines.push(`- ${a.line}`)\n if (actions.length === 0) lines.push('- No user actions (signaling / no-op).')\n } else {\n lines.push(`Delta: top ${nWinners ?? '?'} option(s) execute. None of the above (NOTA) is a vote slot, not an option with actions.`)\n for (const [i, opt] of options.entries()) {\n lines.push(`Option ${i + 1} — ${opt.label}:`)\n for (const a of opt.actions) lines.push(` - ${a.line}`)\n if (opt.actions.length === 0) lines.push(' - No user actions (signaling / no-op).')\n }\n }\n if (risks.length) {\n lines.push('Risks:')\n for (const r of risks) lines.push(`- ${r}`)\n }\n lines.push('Queue is not implemented. Vote while Active; execute from Succeeded.')\n\n return {\n id: Number.isFinite(idNum) ? idNum : undefined,\n onchainId,\n title: str(row.title, 'Untitled'),\n description: str(row.description),\n proposer: str(row.proposer),\n forumKey: str(row.forumKey),\n typeLabel: t,\n configuration,\n nWinners: Number.isFinite(nWinners) ? nWinners : undefined,\n governorAddress,\n briefing: lines.join('\\n'),\n actions,\n options,\n risks,\n }\n}\n\nasync function withForumSection(\n out: ContinuumDaoExplainProposalResult,\n forumUrl?: string,\n): Promise<ContinuumDaoExplainProposalResult> {\n if (!out.forumKey) return out\n try {\n const thread = (await continuumDaoForumFetchThread({ url: out.forumKey, index: 0, forumUrl })) as {\n section?: string\n cid?: number\n }\n return applyForumSectionCheck(out, thread.section ?? null, thread.cid ?? null)\n } catch {\n return { ...out, forumSection: null, forumCid: null }\n }\n}\n\nexport async function continuumDaoExplainProposal(args: {\n id?: string | number\n onchainId?: string\n forumUrl?: string\n}): Promise<ContinuumDaoExplainProposalResult> {\n if (args.id != null && String(args.id).trim() !== '') {\n const { proposal } = await continuumDaoFetchProposal({ id: args.id })\n return withForumSection(explainProposalRecord(proposal), args.forumUrl)\n }\n const want = (args.onchainId ?? '').trim()\n if (!want) throw new Error('explain_proposal: pass id or onchainId')\n const listed = await continuumDaoFetchProposals()\n const rawList = Array.isArray(listed.proposals) ? listed.proposals : []\n const hit = rawList.find((p) => {\n const row = asRecord(p)\n return row && str(row.onchainId ?? row.onchain_id ?? row.proposalId) === want\n })\n if (!hit) throw new Error(`explain_proposal: no catalog row with onchainId ${want}`)\n const id = asRecord(hit)?.id\n if (id != null) {\n const { proposal } = await continuumDaoFetchProposal({ id: Number(id) })\n return withForumSection(explainProposalRecord(proposal), args.forumUrl)\n }\n return withForumSection(explainProposalRecord(hit), args.forumUrl)\n}\n","import type { ProtocolModule } from '../../../core/types.js'\nimport { registerProtocolModule } from '../../../core/registry.js'\nimport { CONTINUUM_DAO_PROTOCOL_ID, isContinuumDaoSupportedChainId } from './constants.js'\n\nexport * from './constants.js'\nexport * from './escrowRules.js'\nexport * from './escrowPreflight.js'\nexport * from './multisign.js'\nexport * from './governance.js'\nexport * from './explainProposal.js'\nexport * from './forum.js'\n\nexport { CONTINUUM_DAO_PROTOCOL_ID }\n\nexport const continuumDaoProtocolModule: ProtocolModule = {\n id: CONTINUUM_DAO_PROTOCOL_ID,\n chainCategory: 'evm',\n isChainSupported(ctx) {\n if (ctx.chainCategory !== 'evm') return false\n const n = typeof ctx.chainId === 'number' ? ctx.chainId : Number.parseInt(String(ctx.chainId), 10)\n return isContinuumDaoSupportedChainId(n)\n },\n isTokenSupported(token) {\n return token.category === 'evm' && (token.kind === 'erc20' || token.kind === 'erc721')\n },\n actions: [\n { id: 'continuum-dao.create-lock', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Approve CTM + create_lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { amountHuman: { type: 'string', required: true, description: 'CTM amount' }, lockDurationSeconds: { type: 'string', required: true, description: 'Lock duration in seconds' } } },\n { id: 'continuum-dao.increase-amount', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Increase lock amount', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' }, amountHuman: { type: 'string', required: true, description: 'CTM amount to add' } } },\n { id: 'continuum-dao.increase-unlock-time', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Increase unlock time', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' }, lockDurationSeconds: { type: 'string', required: true, description: 'Duration from week boundary to new unlock' } } },\n { id: 'continuum-dao.split', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Split a veCTM lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'Source token id' }, extractedHuman: { type: 'string', required: true, description: 'CTM extracted into the new lock' } } },\n { id: 'continuum-dao.merge', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Merge two veCTM locks', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { fromTokenId: { type: 'string', required: true, description: 'Burned token id' }, toTokenId: { type: 'string', required: true, description: 'Surviving token id' } } },\n { id: 'continuum-dao.withdraw', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Withdraw an expired lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao.liquidate', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Liquidate a lock', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' } } },\n { id: 'continuum-dao.delegate', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Delegate voting power', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { delegatee: { type: 'string', required: true, description: 'Delegatee address' } } },\n { id: 'continuum-dao.undelegate', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Return voting power to the KeyGen (delegate to self)', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: {} },\n { id: 'continuum-dao.fetch-delegates', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Read VotingEscrow.delegates(account)', commonParams: [], params: { account: { type: 'string', required: true, description: 'KeyGen or wallet address' } } },\n { id: 'continuum-dao.transfer', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Transfer a veCTM NFT', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'veCTM token id' }, to: { type: 'string', required: true, description: 'Recipient' } } },\n { id: 'continuum-dao.attach', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Attach veCTM to the node (authority KeyGen). groupId is implicit from that KeyGen and binds the fee waiver. A second group attaches after rotating authority.', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { nodeKey: { type: 'string', required: true, description: 'Node key' }, tokenId: { type: 'string', required: true, description: 'veCTM token id' }, mpaWallet: { type: 'string', required: true, description: 'MultiSignAgentWallet address' } } },\n { id: 'continuum-dao.request-detach', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Request governance detach', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { tokenId: { type: 'string', required: true, description: 'Attached token id' }, nodeProperties: { type: 'string', required: true, description: 'NodeProperties address' } } },\n { id: 'continuum-dao.propose-bravo', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Propose a Bravo (For/Against/Abstain) proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { title: { type: 'string', required: true, description: 'On-chain description (title)' }, forumKey: { type: 'string', required: true, description: 'Created forum thread URL from forum_create_topic' } } },\n { id: 'continuum-dao.propose-delta', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Propose a Delta multi-option proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { title: { type: 'string', required: true, description: 'On-chain description (title)' }, nWinners: { type: 'number', required: true, description: 'Winning options to execute' }, forumKey: { type: 'string', required: true, description: 'Created forum thread URL from forum_create_topic' } } },\n { id: 'continuum-dao.cast-vote-bravo', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Cast a Bravo vote', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'On-chain proposal id' }, support: { type: 'number', required: true, description: '0 against, 1 for, 2 abstain' } } },\n { id: 'continuum-dao.cast-vote-delta', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Cast a Delta vote including NOTA', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'On-chain proposal id' } } },\n { id: 'continuum-dao.execute', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Execute a succeeded proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'On-chain proposal id' } } },\n { id: 'continuum-dao.cancel', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Cancel a proposal', commonParams: ['keyGen', 'purposeText', 'useCustomGas'], params: { proposalId: { type: 'string', required: true, description: 'On-chain proposal id' } } },\n { id: 'continuum-dao.fetch-live-proposals', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'List live/pending/succeeded proposals with on-chain state overlay', commonParams: [], params: { chainId: { type: 'number', required: false, description: 'Linea chain id' }, rpcUrl: { type: 'string', required: false, description: 'Linea RPC for state overlay' } } },\n { id: 'continuum-dao.explain-proposal', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Deconstruct a proposal into a readable briefing (actions, C3, no-ops, risks)', commonParams: [], params: { id: { type: 'string', required: false, description: 'Backend proposal id' }, onchainId: { type: 'string', required: false, description: 'Governor proposal id' } } },\n { id: 'continuum-dao.forum-sign-in', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'EIP-712 forum login (veCTM gate first)', commonParams: ['keyGen', 'purposeText'], params: { nodeKey: { type: 'string', required: false, description: 'Attached node key' }, username: { type: 'string', required: false, description: 'Username when there is no node key' } } },\n { id: 'continuum-dao.forum-sign-in-eligible', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Check veCTM forum login eligibility', commonParams: [], params: { address: { type: 'string', required: true, description: 'KeyGen or wallet address' } } },\n { id: 'continuum-dao.forum-sign-out', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Revoke forum ticket and sessions', commonParams: [], params: { ticket: { type: 'string', required: true, description: 'Forum write ticket' } } },\n { id: 'continuum-dao.forum-create-topic', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Create a Governance proposal thread (not Ideas)', commonParams: [], params: { section: { type: 'string', required: false, description: 'decision | election | treasury | constitution | admin' }, title: { type: 'string', required: true, description: 'Thread title' }, content: { type: 'string', required: true, description: 'Proposal body' } } },\n { id: 'continuum-dao.forum-create-idea', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Post an Idea or Suggestion (not a proposal)', commonParams: [], params: { title: { type: 'string', required: true, description: 'Thread title' }, content: { type: 'string', required: true, description: 'Idea body' } } },\n { id: 'continuum-dao.forum-search', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Search forum titles and bodies; optional hours/since', commonParams: [], params: { query: { type: 'string', required: false, description: 'Case-insensitive title or body substring' }, hours: { type: 'number', required: false, description: 'Only posts from the last X hours' }, since: { type: 'string', required: false, description: 'Only posts since this ISO date or unix timestamp' } } },\n { id: 'continuum-dao.forum-recent', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'List recent readable posts (id, title, username, createdAt); requires hours or since', commonParams: [], params: { hours: { type: 'number', required: false, description: 'Only posts from the last X hours' }, since: { type: 'string', required: false, description: 'Only posts since this ISO date or unix timestamp' } } },\n { id: 'continuum-dao.forum-delete', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Admin/moderator soft-delete a post, thread, or a user’s posts', commonParams: [], params: { pid: { type: 'string', required: false, description: 'Post id' }, tid: { type: 'string', required: false, description: 'Thread id' }, username: { type: 'string', required: false, description: 'Delete all posts by this user' }, hours: { type: 'number', required: false, description: 'Only in the last X hours (default all)' }, since: { type: 'string', required: false, description: 'Only since this date (default all)' } } },\n { id: 'continuum-dao.forum-unread', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'List unread topics for the logged-in user', commonParams: [], params: { filter: { type: 'string', required: false, description: 'all | new | watched | unreplied' } } },\n { id: 'continuum-dao.forum-mark-read', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Mark topic(s) read (tid/url, tids, or all)', commonParams: [], params: { tid: { type: 'string', required: false, description: 'Thread id' }, all: { type: 'boolean', required: false, description: 'Mark every unread topic read' } } },\n { id: 'continuum-dao.forum-mark-unread', protocolId: CONTINUUM_DAO_PROTOCOL_ID, chainCategory: 'evm', description: 'Mark one topic unread', commonParams: [], params: { tid: { type: 'string', required: false, description: 'Thread id' } } },\n ],\n}\n\nregisterProtocolModule(continuumDaoProtocolModule)\n"]}
|