agent-relay-server 0.123.1 → 0.124.0

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.
Files changed (72) hide show
  1. package/README.md +3 -1
  2. package/docs/openapi.json +1 -1
  3. package/package.json +4 -3
  4. package/public/assets/{MessageBubble-NCggGKTA.js → MessageBubble-SQK8-Mzp.js} +2 -2
  5. package/public/assets/{MessageBubble-NCggGKTA.js.map → MessageBubble-SQK8-Mzp.js.map} +1 -1
  6. package/public/assets/{PlanGraphPanel-CSdszmGk.js → PlanGraphPanel-CS-aow4S.js} +2 -2
  7. package/public/assets/{PlanGraphPanel-CSdszmGk.js.map → PlanGraphPanel-CS-aow4S.js.map} +1 -1
  8. package/public/assets/{activity-Cyp2nolX.js → activity-W31XvhC2.js} +2 -2
  9. package/public/assets/{activity-Cyp2nolX.js.map → activity-W31XvhC2.js.map} +1 -1
  10. package/public/assets/{agent-profiles-D5Izg0Vn.js → agent-profiles-DXysA9To.js} +2 -2
  11. package/public/assets/{agent-profiles-D5Izg0Vn.js.map → agent-profiles-DXysA9To.js.map} +1 -1
  12. package/public/assets/{agents-DIOxuJ6M.js → agents-B5GRNRnN.js} +2 -2
  13. package/public/assets/{agents-DIOxuJ6M.js.map → agents-B5GRNRnN.js.map} +1 -1
  14. package/public/assets/{automation-Bn6mOLAR.js → automation-DYlgHYcb.js} +2 -2
  15. package/public/assets/{automation-Bn6mOLAR.js.map → automation-DYlgHYcb.js.map} +1 -1
  16. package/public/assets/{chat-eUaPz399.js → chat-Clz6qOtn.js} +2 -2
  17. package/public/assets/{chat-eUaPz399.js.map → chat-Clz6qOtn.js.map} +1 -1
  18. package/public/assets/{formatted-body-CvrQ2D1J.js → formatted-body-BYQ-SPtj.js} +3 -3
  19. package/public/assets/{formatted-body-CvrQ2D1J.js.map → formatted-body-BYQ-SPtj.js.map} +1 -1
  20. package/public/assets/{formatted-body-impl-BJ7jdbpR.js → formatted-body-impl-L1EMnNW6.js} +2 -2
  21. package/public/assets/{formatted-body-impl-BJ7jdbpR.js.map → formatted-body-impl-L1EMnNW6.js.map} +1 -1
  22. package/public/assets/{index-DnUo0Zqg.js → index-0uIGXT14.js} +6 -6
  23. package/public/assets/{index-DnUo0Zqg.js.map → index-0uIGXT14.js.map} +1 -1
  24. package/public/assets/index-DOJ7KidA.css +2 -0
  25. package/public/assets/{insights-CQGH5LhD.js → insights-DwZxq1Dn.js} +2 -2
  26. package/public/assets/{insights-CQGH5LhD.js.map → insights-DwZxq1Dn.js.map} +1 -1
  27. package/public/assets/{maintenance-7c7UvpAt.js → maintenance-COcmUDnf.js} +2 -2
  28. package/public/assets/{maintenance-7c7UvpAt.js.map → maintenance-COcmUDnf.js.map} +1 -1
  29. package/public/assets/{managed-agents-yh4HPO5a.js → managed-agents-D9-dgMeX.js} +2 -2
  30. package/public/assets/{managed-agents-yh4HPO5a.js.map → managed-agents-D9-dgMeX.js.map} +1 -1
  31. package/public/assets/{markdown-preview-impl-BuOn5-Uc.js → markdown-preview-impl-DH372bL-.js} +2 -2
  32. package/public/assets/{markdown-preview-impl-BuOn5-Uc.js.map → markdown-preview-impl-DH372bL-.js.map} +1 -1
  33. package/public/assets/{memory-Qv0JN8CE.js → memory-B9hRK8sk.js} +2 -2
  34. package/public/assets/{memory-Qv0JN8CE.js.map → memory-B9hRK8sk.js.map} +1 -1
  35. package/public/assets/{messages-CgjHJmc2.js → messages-BHkHlXzF.js} +2 -2
  36. package/public/assets/{messages-CgjHJmc2.js.map → messages-BHkHlXzF.js.map} +1 -1
  37. package/public/assets/{orchestrators-CgL4CFzb.js → orchestrators-CXy3SDSn.js} +2 -2
  38. package/public/assets/{orchestrators-CgL4CFzb.js.map → orchestrators-CXy3SDSn.js.map} +1 -1
  39. package/public/assets/{overview-Bri04eYE.js → overview-D2yRyCQq.js} +2 -2
  40. package/public/assets/{overview-Bri04eYE.js.map → overview-D2yRyCQq.js.map} +1 -1
  41. package/public/assets/{pairs-C78LwUH2.js → pairs-5tXdHylI.js} +2 -2
  42. package/public/assets/{pairs-C78LwUH2.js.map → pairs-5tXdHylI.js.map} +1 -1
  43. package/public/assets/{prompt-settings-DDEkMqPZ.js → prompt-settings-Bn5mmi9w.js} +2 -2
  44. package/public/assets/{prompt-settings-DDEkMqPZ.js.map → prompt-settings-Bn5mmi9w.js.map} +1 -1
  45. package/public/assets/registry-C3sB7qv5.js +4 -0
  46. package/public/assets/registry-C3sB7qv5.js.map +1 -0
  47. package/public/assets/{security-wvnRKFvm.js → security-CmD-YE-_.js} +2 -2
  48. package/public/assets/{security-wvnRKFvm.js.map → security-CmD-YE-_.js.map} +1 -1
  49. package/public/assets/{select-BIfbVmLf.js → select-C0UlhK2k.js} +2 -2
  50. package/public/assets/{select-BIfbVmLf.js.map → select-C0UlhK2k.js.map} +1 -1
  51. package/public/assets/{settings-B6Ntahx7.js → settings-DrqMG5nG.js} +2 -2
  52. package/public/assets/{settings-B6Ntahx7.js.map → settings-DrqMG5nG.js.map} +1 -1
  53. package/public/assets/{tasks-CUglafo5.js → tasks-ChQjtXHu.js} +2 -2
  54. package/public/assets/{tasks-CUglafo5.js.map → tasks-ChQjtXHu.js.map} +1 -1
  55. package/public/assets/{teams-EE8RHhHM.js → teams-itjNlDLp.js} +2 -2
  56. package/public/assets/{teams-EE8RHhHM.js.map → teams-itjNlDLp.js.map} +1 -1
  57. package/public/assets/{terminal-viewer-impl-DBRkdyag.js → terminal-viewer-impl-B9M6s2vB.js} +2 -2
  58. package/public/assets/{terminal-viewer-impl-DBRkdyag.js.map → terminal-viewer-impl-B9M6s2vB.js.map} +1 -1
  59. package/public/assets/{work-queue-BFQVVL4T.js → work-queue-Kw0uMkEF.js} +2 -2
  60. package/public/assets/{work-queue-BFQVVL4T.js.map → work-queue-Kw0uMkEF.js.map} +1 -1
  61. package/public/index.html +3 -3
  62. package/runner/hooks/rg-r-guard/hooks.json +18 -0
  63. package/runner/hooks/rg-r-guard/rg-r-guard.cjs +144 -0
  64. package/runner/plugins/claude/.claude-plugin/plugin.json +1 -1
  65. package/src/db/provisioning-registry.ts +174 -1
  66. package/src/routes/provisioning-registry.ts +3 -0
  67. package/src/routing-policy-store.ts +55 -0
  68. package/src/services/spawn-chain-inspector.ts +134 -0
  69. package/src/spawn-targets.ts +130 -28
  70. package/public/assets/index-DcmG5gLR.css +0 -2
  71. package/public/assets/registry-5KhP5FE5.js +0 -2
  72. package/public/assets/registry-5KhP5FE5.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"chat-eUaPz399.js","names":[],"sources":["../../dashboard/src/lib/audience.ts","../../dashboard/src/components/chat/hooks/useChatAgents.ts","../../dashboard/src/components/chat/AgentListPanel.tsx","../../dashboard/src/lib/slash-commands.ts","../../dashboard/src/components/chat/ViewerPresence.tsx","../../dashboard/src/components/chat/ChatHeader.tsx","../../dashboard/src/components/chat/ChatSearchBar.tsx","../../dashboard/src/components/chat/SlashPalette.tsx","../../dashboard/src/components/chat/Composer.tsx","../../dashboard/src/components/chat/FilePreview.tsx","../../dashboard/src/components/chat/hooks/useAgentStatusEvents.ts","../../dashboard/src/components/chat/hooks/useBackNavProtection.ts","../../dashboard/src/components/chat/chatSearch.ts","../../dashboard/src/components/chat/hooks/useChatSearch.ts","../../dashboard/src/components/chat/hooks/usePresenceHeartbeat.ts","../../dashboard/node_modules/react-virtuoso/dist/index.mjs","../../dashboard/src/components/chat/AskQuestionForm.tsx","../../dashboard/src/components/chat/VirtualTimeline.tsx","../../dashboard/src/components/chat/ChatPanel.tsx","../../dashboard/src/components/chat/hooks/useDraftCleanup.ts","../../dashboard/src/components/chat/hooks/useMobileChatHistory.ts","../../dashboard/src/components/chat/ChatView.tsx"],"sourcesContent":["import type { Agent } from '@/types'\nimport { isHumanAgentId } from 'agent-relay-sdk/types'\n\n/**\n * #703 — mirrors the server's message.new audience rules on the client:\n * - targetedAtUser / threadParticipant: the human exchanged messages with this agent (hasThread)\n * - spawnedByUser: the agent was directly spawned by a human (depth-1)\n * Respects per-agent follow/mute overrides; call sites pass these from the store.\n */\nexport function isUserInAgentAudience(\n agentId: string,\n agentsById: Record<string, Agent>,\n hasThread: boolean,\n coordinatorFollows: string[],\n coordinatorMutes: string[],\n): boolean {\n if (coordinatorMutes.includes(agentId)) return false\n if (coordinatorFollows.includes(agentId)) return true\n if (hasThread) return true\n const agent = agentsById[agentId]\n return Boolean(agent && isHumanAgentId(agent.spawnedBy ?? ''))\n}\n","\nimport { useMemo } from 'react'\nimport { useUniqueHosts, useAllInboxThreads } from '@/hooks/use-selectors'\nimport { useRelayStore } from '@/store'\nimport { CHAT_STATUS_SORT_ORDER } from '@/lib/constants'\nimport { agentType, displayName, toTimestamp, userFacingCapabilities, visibleAgents } from '@/lib/display'\nimport { isUserInAgentAudience } from '@/lib/audience'\nimport { compareConversationActivity } from '../helpers'\n\nexport { useUniqueHosts }\n\nexport function useChatAgents() {\n const agents = useRelayStore((s) => s.agents)\n const agentsById = useRelayStore((s) => s.agentsById)\n const showBuiltIns = useRelayStore((s) => s.showBuiltIns)\n const showOffline = useRelayStore((s) => s.showOffline)\n const chatAgentSearch = useRelayStore((s) => s.chatAgentSearch)\n const chatAgentProviderFilter = useRelayStore((s) => s.chatAgentProviderFilter)\n const chatAgentStatusFilter = useRelayStore((s) => s.chatAgentStatusFilter)\n const chatAgentTagFilter = useRelayStore((s) => s.chatAgentTagFilter)\n const chatAgentCapFilter = useRelayStore((s) => s.chatAgentCapFilter)\n const chatAgentHostFilter = useRelayStore((s) => s.chatAgentHostFilter)\n const chatAgentSort = useRelayStore((s) => s.chatAgentSort)\n const chatAgentSortDir = useRelayStore((s) => s.chatAgentSortDir)\n const managedPolicies = useRelayStore((s) => s.managedPolicies)\n const feedObserveAll = useRelayStore((s) => s.feedObserveAll)\n const coordinatorFollows = useRelayStore((s) => s.coordinatorFollows)\n const coordinatorMutes = useRelayStore((s) => s.coordinatorMutes)\n // Threads used for scoped-mode audience check (has-thread = targetedAtUser or threadParticipant)\n const threads = useAllInboxThreads()\n\n return useMemo(() => {\n const threadPeerSet = new Set(threads.map((t) => t.peer))\n\n let list = visibleAgents(agents, showBuiltIns, managedPolicies)\n if (!showOffline) list = list.filter((a) => a.status !== 'offline')\n\n // Scoped mode (#703): show only agents where user is in the resolved audience.\n // In observe-all mode, all agents are visible (mutes are still applied via thread badges).\n if (!feedObserveAll) {\n list = list.filter((a) => isUserInAgentAudience(a.id, agentsById, threadPeerSet.has(a.id), coordinatorFollows, coordinatorMutes))\n } else {\n // Even in observe-all, hard-muted agents are hidden from the list.\n list = list.filter((a) => !coordinatorMutes.includes(a.id))\n }\n\n if (chatAgentSearch) {\n const q = chatAgentSearch.toLowerCase()\n list = list.filter((a) =>\n a.id.toLowerCase().includes(q) ||\n (a.name || '').toLowerCase().includes(q) ||\n (a.label || '').toLowerCase().includes(q) ||\n (a.tags || []).some((t) => t.toLowerCase().includes(q)) ||\n (a.capabilities || []).some((c) => c.toLowerCase().includes(q))\n )\n }\n\n if (chatAgentProviderFilter) list = list.filter((a) => agentType(a) === chatAgentProviderFilter)\n if (chatAgentStatusFilter) list = list.filter((a) => a.status === chatAgentStatusFilter)\n if (chatAgentTagFilter) list = list.filter((a) => (a.tags || []).includes(chatAgentTagFilter))\n if (chatAgentCapFilter) list = list.filter((a) => (a.capabilities || []).includes(chatAgentCapFilter))\n if (chatAgentHostFilter) list = list.filter((a) => (a.machine || '') === chatAgentHostFilter)\n\n const dir = chatAgentSortDir === 'desc' ? -1 : 1\n return [...list].sort((a, b) => {\n if (chatAgentSort === 'name') return displayName(a).localeCompare(displayName(b)) * dir\n // Ascending base so 'asc' (the default, SortAsc) reads oldest→newest, matching the\n // 'lastMessage' conversation-list sort and the toggle icon (#541).\n if (chatAgentSort === 'lastSeen') return compareConversationActivity(toTimestamp(a.lastSeen), toTimestamp(b.lastSeen), dir) || displayName(a).localeCompare(displayName(b))\n const s = ((CHAT_STATUS_SORT_ORDER[a.status] ?? 9) - (CHAT_STATUS_SORT_ORDER[b.status] ?? 9)) * dir\n return s || displayName(a).localeCompare(displayName(b))\n })\n }, [agents, agentsById, showBuiltIns, showOffline, managedPolicies, chatAgentSearch, chatAgentProviderFilter,\n chatAgentStatusFilter, chatAgentTagFilter, chatAgentCapFilter, chatAgentHostFilter, chatAgentSort, chatAgentSortDir,\n feedObserveAll, coordinatorFollows, coordinatorMutes, threads])\n}\n","\nimport { useMemo, type ReactNode } from 'react'\nimport { AlertCircle, Search, Bot, SortAsc, SortDesc, Plus, SlidersHorizontal, ChevronDown, ChevronRight, ChevronUp, CornerDownRight, BellOff, Telescope, Eye, Filter } from 'lucide-react'\nimport { useRelayStore, useNow } from '@/store'\nimport { getKnownProviderIds, getProviderLabel } from '@/lib/provider-display'\nimport { StatusDot } from '@/components/shared/status-dot'\nimport { AgentTypeIcon } from '@/components/shared/agent-type-icon'\nimport { ProfileIcon, agentProfileName } from '@/components/shared/profile-icon'\nimport { ContextRing, agentWorkspaceMeta, agentProjectName, agentHasContextTelemetry } from '@/components/shared/agent-runtime-summary'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { agentNeedsHumanResponse, displayName, fmtTime, messagePreview, timeAgo, userFacingCapabilities } from '@/lib/display'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport type { Agent, InboxThread } from '@/types'\nimport { cn } from '@/lib/utils'\nimport { agentLineageRows, type AgentLineageRow } from '@/lib/agent-lineage'\nimport { compareConversationActivity, lastFinalResponseTimestamp, threadActivityTimestamp } from './helpers'\nimport { useChatAgents, useUniqueHosts } from './hooks/useChatAgents'\n\n// Inline markdown for the single-line conversation preview (#524): bold, italic,\n// strikethrough, inline code, and link text. Newlines are collapsed to spaces by the\n// caller so block constructs never appear; an unmatched marker renders literally.\ntype InlinePattern = { re: RegExp; recurse: boolean; wrap: (children: ReactNode, key: string) => ReactNode }\n\nconst INLINE_PATTERNS: InlinePattern[] = [\n { re: /`([^`]+)`/, recurse: false, wrap: (c, k) => <code key={k} className=\"rounded bg-muted px-1 font-mono text-[0.9em]\">{c}</code> },\n { re: /\\*\\*([^*]+)\\*\\*/, recurse: true, wrap: (c, k) => <strong key={k} className=\"font-semibold text-foreground/90\">{c}</strong> },\n { re: /__([^_]+)__/, recurse: true, wrap: (c, k) => <strong key={k} className=\"font-semibold text-foreground/90\">{c}</strong> },\n { re: /~~([^~]+)~~/, recurse: true, wrap: (c, k) => <s key={k}>{c}</s> },\n { re: /\\*([^*]+)\\*/, recurse: true, wrap: (c, k) => <em key={k}>{c}</em> },\n { re: /_([^_]+)_/, recurse: true, wrap: (c, k) => <em key={k}>{c}</em> },\n { re: /\\[([^\\]]+)\\]\\([^)]+\\)/, recurse: true, wrap: (c, k) => <span key={k} className=\"underline decoration-dotted underline-offset-2\">{c}</span> },\n]\n\nfunction renderInlineMarkdown(text: string, keyPrefix = 'i'): ReactNode[] {\n let best: { index: number; length: number; inner: string; pattern: InlinePattern } | null = null\n for (const pattern of INLINE_PATTERNS) {\n const m = pattern.re.exec(text)\n if (m && m[1] && (best === null || m.index < best.index)) {\n best = { index: m.index, length: m[0].length, inner: m[1], pattern }\n }\n }\n if (!best) return [text]\n const nodes: ReactNode[] = []\n if (best.index > 0) nodes.push(text.slice(0, best.index))\n const inner = best.pattern.recurse ? renderInlineMarkdown(best.inner, `${keyPrefix}x`) : best.inner\n nodes.push(best.pattern.wrap(inner, `${keyPrefix}m`))\n const rest = text.slice(best.index + best.length)\n if (rest) nodes.push(...renderInlineMarkdown(rest, `${keyPrefix}r`))\n return nodes\n}\n\nexport function AgentListPanel({ threads, onSelectAgent }: { threads: InboxThread[]; onSelectAgent?: (id: string) => void }) {\n const set = useRelayStore((s) => s.set)\n const openInboxThread = useRelayStore((s) => s.openInboxThread)\n const openAgentSpawn = useRelayStore((s) => s.openAgentSpawn)\n const selectedInboxThread = useRelayStore((s) => s.selectedInboxThread)\n const chatAgentSearch = useRelayStore((s) => s.chatAgentSearch)\n const chatAgentSort = useRelayStore((s) => s.chatAgentSort)\n const chatAgentSortDir = useRelayStore((s) => s.chatAgentSortDir)\n const chatAgentProviderFilter = useRelayStore((s) => s.chatAgentProviderFilter)\n const chatAgentStatusFilter = useRelayStore((s) => s.chatAgentStatusFilter)\n const chatAgentTagFilter = useRelayStore((s) => s.chatAgentTagFilter)\n const chatAgentCapFilter = useRelayStore((s) => s.chatAgentCapFilter)\n const chatAgentHostFilter = useRelayStore((s) => s.chatAgentHostFilter)\n const chatAgentGroupBy = useRelayStore((s) => s.chatAgentGroupBy)\n const chatAgentFiltersCollapsed = useRelayStore((s) => s.chatAgentFiltersCollapsed)\n const agentsById = useRelayStore((s) => s.agentsById)\n const collapsedChildrenList = useRelayStore((s) => s.chatCollapsedChildren)\n const toggleChildrenCollapsed = useRelayStore((s) => s.toggleChatChildrenCollapsed)\n const feedObserveAll = useRelayStore((s) => s.feedObserveAll)\n const setFeedObserveAll = useRelayStore((s) => s.setFeedObserveAll)\n const coordinatorFollows = useRelayStore((s) => s.coordinatorFollows)\n const coordinatorMutes = useRelayStore((s) => s.coordinatorMutes)\n const toggleCoordinatorFollow = useRelayStore((s) => s.toggleCoordinatorFollow)\n const toggleCoordinatorMute = useRelayStore((s) => s.toggleCoordinatorMute)\n const now = useNow()\n const chatAgents = useChatAgents()\n const collapsedChildren = useMemo(() => new Set(collapsedChildrenList), [collapsedChildrenList])\n\n const threadByPeer = useMemo(() => {\n const m = new Map<string, InboxThread>()\n for (const t of threads) m.set(t.peer, t)\n return m\n }, [threads])\n\n const sortedAgents = useMemo(() => {\n if (chatAgentSort !== 'lastMessage') return chatAgents\n const dir = chatAgentSortDir === 'desc' ? -1 : 1\n return [...chatAgents].sort((a, b) => {\n const ta = threadActivityTimestamp(threadByPeer.get(a.id))\n const tb = threadActivityTimestamp(threadByPeer.get(b.id))\n return compareConversationActivity(ta, tb, dir) || displayName(a).localeCompare(displayName(b))\n })\n }, [chatAgents, chatAgentSort, chatAgentSortDir, threadByPeer])\n\n const uniqueTags = useMemo(() => [...new Set(chatAgents.flatMap((a) => a.tags || []))], [chatAgents])\n const uniqueCaps = useMemo(() => [...new Set(chatAgents.flatMap((a) => userFacingCapabilities(a.capabilities || [])))], [chatAgents])\n const uniqueHosts = useUniqueHosts()\n\n // Group the (already sorted) agents by project, preserving sort order within\n // each group. null when grouping is off → render a flat list.\n const groupedAgents = useMemo(() => {\n if (chatAgentGroupBy !== 'project') return null\n const groups = new Map<string, Agent[]>()\n for (const a of sortedAgents) {\n const key = agentProjectName(a) || 'No project'\n const bucket = groups.get(key)\n if (bucket) bucket.push(a)\n else groups.set(key, [a])\n }\n return [...groups.entries()].sort((a, b) => a[0].localeCompare(b[0]))\n }, [sortedAgents, chatAgentGroupBy])\n\n const activeFilterCount = [chatAgentProviderFilter, chatAgentStatusFilter, chatAgentTagFilter, chatAgentCapFilter, chatAgentHostFilter].filter(Boolean).length\n const lineageRows = useMemo(() => agentLineageRows(sortedAgents, agentsById, now), [sortedAgents, agentsById, now])\n\n function handleSelect(id: string) {\n openInboxThread(id, threadByPeer.get(id)?.messages)\n onSelectAgent?.(id)\n }\n\n function renderAgentRow(row: AgentLineageRow) {\n const { agent } = row\n // Hide children whose parent group is folded (#525).\n if (row.depth === 1 && row.parent && collapsedChildren.has(row.parent.id)) return null\n const thread = threadByPeer.get(agent.id)\n const unread = thread?.attention.unread || 0\n const needsHumanResponse = agentNeedsHumanResponse(agent)\n const lastMsg = thread?.previewMessage\n // Show the agent's last final-response time (#523); fall back to any message\n // activity when it hasn't responded yet so the row still carries a timestamp.\n const lastActivityAt = lastFinalResponseTimestamp(thread) || threadActivityTimestamp(thread)\n const isSelected = selectedInboxThread === agent.id\n const ws = agentWorkspaceMeta(agent)\n const project = agentProjectName(agent)\n const WsIcon = ws.Icon\n const parentLabel = row.parent ? displayName(row.parent) : agent.spawnedBy\n const childCount = row.children.length\n const isParentWithChildren = row.depth === 0 && childCount > 0\n const childrenCollapsed = collapsedChildren.has(agent.id)\n\n const isMuted = coordinatorMutes.includes(agent.id)\n const isFollowed = coordinatorFollows.includes(agent.id)\n\n return (\n <li key={agent.id} className={cn('relative group', row.depth === 1 && 'pl-4')}>\n {row.depth === 1 && (\n <div className=\"absolute left-2 top-3.5 text-muted-foreground/55\">\n <CornerDownRight className=\"h-3.5 w-3.5\" />\n </div>\n )}\n {/* Per-agent follow/mute controls — floating toolbar on row hover (#703). The\n backdrop + border lets it sit cleanly over the timestamp/badge cluster, which\n fades out underneath (group-hover:opacity-0) so the two never ghost together. */}\n <div className=\"absolute right-1.5 top-1.5 z-10 hidden items-center gap-0.5 rounded-md border border-border/60 bg-popover/95 px-0.5 py-0.5 shadow-sm backdrop-blur-sm group-hover:flex\">\n <button\n type=\"button\"\n title={isFollowed ? 'Unfollow (stop pinning into scoped view)' : 'Follow (keep visible even in scoped view)'}\n onClick={(e) => { e.stopPropagation(); toggleCoordinatorFollow(agent.id) }}\n className={cn(\n 'rounded p-1 transition-colors',\n isFollowed ? 'text-primary bg-primary/15 hover:bg-primary/25' : 'text-muted-foreground hover:text-foreground hover:bg-muted'\n )}\n >\n <Telescope className=\"h-3 w-3\" />\n </button>\n <button\n type=\"button\"\n title={isMuted ? 'Unmute' : 'Mute (hide from all views)'}\n onClick={(e) => { e.stopPropagation(); toggleCoordinatorMute(agent.id) }}\n className={cn(\n 'rounded p-1 transition-colors',\n isMuted ? 'text-orange-400 bg-orange-500/15 hover:bg-orange-500/25' : 'text-muted-foreground hover:text-foreground hover:bg-muted'\n )}\n >\n <BellOff className=\"h-3 w-3\" />\n </button>\n </div>\n <button\n className={cn(\n 'w-full text-left px-3 py-2.5 flex items-start gap-2.5 hover:bg-muted/50 transition-colors border-b border-border/50',\n row.depth === 1 && 'bg-muted/15',\n isSelected && 'bg-muted/60',\n isMuted && 'opacity-50'\n )}\n onClick={() => handleSelect(agent.id)}\n >\n <div className=\"relative shrink-0 mt-0.5\">\n <AgentTypeIcon agent={agent} />\n <StatusDot agent={agent} now={now} className=\"absolute -bottom-0.5 -right-0.5 w-2 h-2\" />\n </div>\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between gap-1 mb-0.5\">\n <span className=\"flex items-center gap-1 min-w-0\">\n <ProfileIcon profile={agentProfileName(agent)} className=\"text-xs shrink-0\" />\n <span className=\"text-xs font-medium truncate\">{displayName(agent)}</span>\n </span>\n {/* Fades on hover so the floating follow/mute toolbar reads cleanly above it. */}\n <div className=\"flex items-center gap-1 shrink-0 transition-opacity group-hover:opacity-0\">\n {/* Muted agents are hidden from the list entirely (#703 spec), so only the\n follow marker can ever render at rest — it flags pinned-into-scope agents. */}\n {isFollowed && <Telescope className=\"h-3 w-3 text-primary\" aria-label=\"Followed\" />}\n {lastActivityAt > 0 && (\n <span className=\"text-[10px] text-muted-foreground tabular-nums\" title={fmtTime(lastActivityAt)}>\n {timeAgo(now, lastActivityAt)}\n </span>\n )}\n {unread > 0 && (\n <Badge className=\"bg-red-500 text-white text-[11px] font-semibold leading-none tabular-nums min-w-[18px] h-[18px] flex items-center justify-center shrink-0 px-1 rounded-full\">\n {unread}\n </Badge>\n )}\n {!unread && needsHumanResponse && (\n <Badge className=\"bg-amber-500 text-black min-w-[18px] h-[18px] flex items-center justify-center shrink-0 px-1 rounded-full\" title=\"Needs response\">\n <AlertCircle className=\"h-3 w-3\" />\n </Badge>\n )}\n </div>\n </div>\n\n {/* Workspace icon + project name, with context usage on the right */}\n <div className=\"flex items-center gap-1.5 mb-0.5 text-[10px] text-muted-foreground\">\n <span title={ws.title} className=\"inline-flex shrink-0\">\n <WsIcon className={cn('h-3 w-3', ws.iconColor)} />\n </span>\n <span className=\"truncate\">{project || ws.label}</span>\n {agentHasContextTelemetry(agent) && (\n <span className=\"ml-auto shrink-0\">\n <ContextRing context={agent.context} expected size={18} />\n </span>\n )}\n </div>\n {row.depth === 0 && agent.spawnedBy && parentLabel && (\n <div className=\"mb-0.5\">\n <Badge variant=\"outline\" className=\"max-w-full text-[9px] h-4 px-1.5 text-muted-foreground\">\n <span className=\"truncate\">spawned by {parentLabel}</span>\n </Badge>\n </div>\n )}\n\n {lastMsg && (\n <p className=\"text-xs text-muted-foreground truncate leading-tight\">\n {lastMsg.from === HUMAN_AGENT_ID ? 'You: ' : ''}\n {renderInlineMarkdown(messagePreview(lastMsg).replace(/\\s+/g, ' '))}\n </p>\n )}\n </div>\n </button>\n\n {/* Collapse bar for spawned children (#612): carries the child count so the\n parent reads as having N children even when the group is folded, and the\n arrow toggles the fold. Replaces the old per-header child-count badge. */}\n {isParentWithChildren && (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); toggleChildrenCollapsed(agent.id) }}\n className=\"flex w-full items-center gap-1.5 border-b border-border/50 bg-muted/20 py-1 pl-8 pr-3 text-[10px] text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground\"\n aria-expanded={!childrenCollapsed}\n title={childrenCollapsed ? `Show ${childCount} child ${childCount === 1 ? 'agent' : 'agents'}` : 'Hide children'}\n >\n {childrenCollapsed ? <ChevronRight className=\"h-3.5 w-3.5 shrink-0\" /> : <ChevronDown className=\"h-3.5 w-3.5 shrink-0\" />}\n <span className=\"font-medium\">{childCount} child {childCount === 1 ? 'agent' : 'agents'}</span>\n </button>\n )}\n </li>\n )\n }\n\n return (\n <div className=\"flex flex-col h-full border-r border-border min-w-0\">\n {/* Search + filters */}\n <div className=\"p-3 border-b border-border space-y-2\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground pointer-events-none\" />\n <Input\n placeholder=\"Search agents...\"\n value={chatAgentSearch}\n onChange={(e) => set({ chatAgentSearch: e.target.value })}\n className=\"pl-8 h-7 text-xs\"\n />\n </div>\n\n {/* Audience-scope toggle (#703): a segmented control so both modes — and which\n one is active — are legible at a glance, instead of one button you have to click\n to discover the alternate state. */}\n <div className=\"flex h-7 items-center rounded-md border border-border bg-background p-0.5 text-xs\">\n <button\n type=\"button\"\n onClick={() => setFeedObserveAll(false)}\n title=\"Show only conversations where you're in the audience (agents you spawned or messaged)\"\n aria-pressed={!feedObserveAll}\n className={cn(\n 'flex h-full flex-1 items-center justify-center gap-1.5 rounded-[5px] transition-colors',\n !feedObserveAll ? 'bg-primary/15 text-primary font-medium' : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <Filter className=\"h-3.5 w-3.5\" />\n Scoped\n </button>\n <button\n type=\"button\"\n onClick={() => setFeedObserveAll(true)}\n title=\"Show every agent conversation, including agent-to-agent chatter\"\n aria-pressed={feedObserveAll}\n className={cn(\n 'flex h-full flex-1 items-center justify-center gap-1.5 rounded-[5px] transition-colors',\n feedObserveAll ? 'bg-primary/15 text-primary font-medium' : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <Eye className=\"h-3.5 w-3.5\" />\n All\n </button>\n </div>\n\n {/* Filters toggle — mobile only; on desktop the panel is always open */}\n <button\n type=\"button\"\n onClick={() => set({ chatAgentFiltersCollapsed: !chatAgentFiltersCollapsed })}\n className=\"sm:hidden flex w-full items-center justify-between h-6 px-1.5 text-xs rounded-md border border-border bg-background text-muted-foreground\"\n >\n <span className=\"inline-flex items-center gap-1.5\">\n <SlidersHorizontal className=\"w-3.5 h-3.5\" />\n Filters &amp; sort\n {activeFilterCount > 0 && (\n <Badge className=\"bg-primary/20 text-primary text-[10px] h-4 min-w-4 px-1 flex items-center justify-center\">{activeFilterCount}</Badge>\n )}\n </span>\n {chatAgentFiltersCollapsed ? <ChevronDown className=\"w-3.5 h-3.5\" /> : <ChevronUp className=\"w-3.5 h-3.5\" />}\n </button>\n\n <div className={cn('space-y-2', chatAgentFiltersCollapsed ? 'hidden' : 'block', 'sm:block')}>\n {/* Sort row */}\n <div className=\"flex items-center gap-1.5\">\n <select\n value={chatAgentSort}\n onChange={(e) => set({ chatAgentSort: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"status\">By status</option>\n <option value=\"name\">By name</option>\n <option value=\"lastSeen\">By last seen</option>\n <option value=\"lastMessage\">By last activity</option>\n </select>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={() => set({ chatAgentSortDir: chatAgentSortDir === 'asc' ? 'desc' : 'asc' })}\n >\n {chatAgentSortDir === 'asc' ? <SortAsc className=\"w-3.5 h-3.5\" /> : <SortDesc className=\"w-3.5 h-3.5\" />}\n </Button>\n </div>\n\n {/* Grouping */}\n <select\n value={chatAgentGroupBy}\n onChange={(e) => set({ chatAgentGroupBy: e.target.value })}\n className=\"w-full h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">No grouping</option>\n <option value=\"project\">Group by project</option>\n </select>\n\n {/* Filter row */}\n <div className=\"flex gap-1\">\n <select\n value={chatAgentProviderFilter}\n onChange={(e) => set({ chatAgentProviderFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All types</option>\n {getKnownProviderIds().map((id) => <option key={id} value={id}>{getProviderLabel(id)}</option>)}\n <option value=\"agent\">Agent</option>\n <option value=\"user\">User</option>\n </select>\n <select\n value={chatAgentStatusFilter}\n onChange={(e) => set({ chatAgentStatusFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All status</option>\n <option value=\"online\">Online</option>\n <option value=\"idle\">Idle</option>\n <option value=\"busy\">Busy</option>\n <option value=\"offline\">Offline</option>\n </select>\n {uniqueHosts.length > 1 && (\n <select\n value={chatAgentHostFilter}\n onChange={(e) => set({ chatAgentHostFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All hosts</option>\n {uniqueHosts.map((h) => <option key={h} value={h}>{h}</option>)}\n </select>\n )}\n </div>\n\n {(uniqueTags.length > 0 || uniqueCaps.length > 0) && (\n <div className=\"flex gap-1\">\n {uniqueTags.length > 0 && (\n <select\n value={chatAgentTagFilter}\n onChange={(e) => set({ chatAgentTagFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All tags</option>\n {uniqueTags.map((t) => <option key={t} value={t}>#{t}</option>)}\n </select>\n )}\n {uniqueCaps.length > 0 && (\n <select\n value={chatAgentCapFilter}\n onChange={(e) => set({ chatAgentCapFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All caps</option>\n {uniqueCaps.map((c) => <option key={c} value={c}>{c}</option>)}\n </select>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Spawn — pinned above the list so it never scrolls out of reach */}\n <button\n type=\"button\"\n className=\"flex w-full shrink-0 items-center gap-2.5 border-b border-border px-3 py-2 text-left transition-colors hover:bg-muted/50\"\n onClick={openAgentSpawn}\n >\n <div className=\"flex h-7 w-7 shrink-0 items-center justify-center rounded-full border border-dashed border-primary/50 bg-primary/10 text-primary\">\n <Plus className=\"h-3.5 w-3.5\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-xs font-medium\">New Agent</div>\n <div className=\"truncate text-[10px] text-muted-foreground\">Spawn a fresh chat agent</div>\n </div>\n </button>\n\n {/* Agent list */}\n <div className=\"flex-1 overflow-y-auto\">\n {sortedAgents.length === 0 ? (\n !feedObserveAll && !chatAgentSearch && activeFilterCount === 0 ? (\n // Scoped mode with nobody in the user's audience — explain the scope and offer the\n // escape hatch, rather than the misleading generic \"no agents match filters\".\n <div className=\"flex flex-col items-center justify-center py-10 text-center px-6\">\n <Telescope className=\"w-8 h-8 text-muted-foreground/40 mb-3\" />\n <p className=\"text-xs font-medium text-foreground/80\">No conversations in your audience</p>\n <p className=\"mt-1 text-[11px] text-muted-foreground\">Agents you spawn or message show up here.</p>\n <button\n type=\"button\"\n onClick={() => setFeedObserveAll(true)}\n className=\"mt-3 inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-2.5 py-1 text-[11px] text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground\"\n >\n <Eye className=\"h-3.5 w-3.5\" /> Show all agents\n </button>\n </div>\n ) : (\n <div className=\"flex flex-col items-center justify-center py-10 text-center px-4\">\n <Bot className=\"w-8 h-8 text-muted-foreground/40 mb-2\" />\n <p className=\"text-xs text-muted-foreground\">No agents match filters</p>\n </div>\n )\n ) : groupedAgents ? (\n groupedAgents.map(([project, agents]) => (\n <div key={project}>\n <div className=\"sticky top-0 z-10 flex items-center gap-1.5 border-b border-border/50 bg-background/95 px-3 py-1 text-[10px] font-medium uppercase tracking-wide text-muted-foreground backdrop-blur\">\n <span className=\"truncate\">{project}</span>\n <span className=\"text-muted-foreground/50\">{agents.length}</span>\n </div>\n <ul>{agentLineageRows(agents, agentsById, now).map(renderAgentRow)}</ul>\n </div>\n ))\n ) : (\n <ul>{lineageRows.map(renderAgentRow)}</ul>\n )}\n </div>\n </div>\n )\n}\n","import { getProviderManifest } from './provider-display'\n\nexport interface SlashCommand {\n name: string\n description?: string\n source?: string\n argumentHint?: string\n}\n\nconst RELAY_SLASH_COMMANDS: SlashCommand[] = [\n { name: '/reply', source: 'skill', description: 'Reply to a relay message by id', argumentHint: '<messageId> <body>' },\n { name: '/message', source: 'skill', description: 'Send a relay message to an agent, label, tag, or broadcast', argumentHint: '<target> <body>' },\n { name: '/pair', source: 'skill', description: 'Start or manage a two-agent pair session' },\n { name: '/react', source: 'skill', description: 'Add a reaction to a relay message', argumentHint: '<messageId> <emoji>' },\n { name: '/read-message', source: 'skill', description: 'Fetch a full relay message by id', argumentHint: '<messageId>' },\n { name: '/send-claimable', source: 'skill', description: 'Enqueue a claimable work item for one agent to claim' },\n { name: '/status', source: 'skill', description: \"Show this agent's relay status\" },\n { name: '/tags', source: 'skill', description: \"List or update this agent's relay tags\" },\n { name: '/label', source: 'skill', description: \"Read, set, or clear this agent's relay label\" },\n { name: '/disconnect', source: 'skill', description: 'End the current relay pair session' },\n]\n\nconst BUILTIN_DESCRIPTIONS: Record<string, { description: string; argumentHint?: string }> = {\n '/clear': { description: 'Clear conversation history and free up context' },\n '/compact': { description: 'Compact the conversation to reclaim context', argumentHint: '[instructions]' },\n '/model': { description: 'Switch the active model', argumentHint: '[model]' },\n '/help': { description: 'Show help' },\n '/new': { description: 'Start a new thread' },\n}\n\nexport function providerSlashCommands(provider: string | undefined): SlashCommand[] {\n const manifest = provider ? getProviderManifest(provider) : undefined\n const builtins: SlashCommand[] = (manifest?.slashCommands ?? []).map((name) => ({\n name,\n source: 'builtin',\n ...BUILTIN_DESCRIPTIONS[name],\n }))\n return [...builtins, ...RELAY_SLASH_COMMANDS]\n}\n","import { Eye, Pencil } from 'lucide-react'\nimport { useRelayStore } from '@/store'\nimport { dashboardClientId } from '@/lib/dashboard-attribution'\nimport { humanDisplayName } from '@/lib/display'\nimport { cn } from '@/lib/utils'\n\n// \"X is viewing / typing\" for an agent thread (#390). Reads live viewers from the presence\n// store (fed by the dashboard.presence SSE event), excludes our own browser, and resolves each\n// viewer's name via the users directory. Renders nothing when no one else is watching — so a\n// single solo operator (today's default) sees no presence chrome at all.\nexport function ViewerPresence({ agentId, className }: { agentId: string; className?: string }) {\n const viewers = useRelayStore((s) => s.presenceByAgent[agentId])\n const usersById = useRelayStore((s) => s.usersById)\n const selfClientId = dashboardClientId()\n\n const others = (viewers ?? []).filter((v) => v.clientId !== selfClientId)\n if (others.length === 0) return null\n\n // Unique human names among the other viewers (a person on two devices collapses to one name).\n const names = Array.from(new Set(others.map((v) => humanDisplayName(v.userId, usersById))))\n const typing = others.some((v) => v.typing)\n const label = names.length === 1 ? names[0] : `${names.length} viewers`\n const Icon = typing ? Pencil : Eye\n\n return (\n <span\n title={`${names.join(', ')}${typing ? ' · typing' : ' · viewing'}`}\n className={cn('inline-flex items-center gap-1 rounded-full bg-muted/40 px-2 py-0.5 text-[11px] text-muted-foreground', className)}\n >\n <Icon className={cn('h-3 w-3 shrink-0', typing && 'text-emerald-400')} />\n <span className=\"truncate max-w-[12ch]\">{label}{typing && names.length === 1 ? ' is typing…' : ''}</span>\n </span>\n )\n}\n","import {\n ArrowLeft,\n CircleStop,\n Download,\n Eraser,\n Flag,\n FolderOpen,\n GitFork,\n MailOpen,\n MailX,\n Minimize2,\n MoreHorizontal,\n Power,\n Search,\n Terminal,\n Volume2,\n VolumeX,\n} from 'lucide-react'\nimport { AgentRuntimeChips, ContextRing, agentHasContextTelemetry } from '@/components/shared/agent-runtime-summary'\nimport { AgentTypeIcon } from '@/components/shared/agent-type-icon'\nimport { ProfileIcon, agentProfileName } from '@/components/shared/profile-icon'\nimport { BranchStateBadge } from '@/components/shared/branch-state-badge'\nimport { CopyButton } from '@/components/shared/copy-button'\nimport { StatusDot } from '@/components/shared/status-dot'\nimport { ViewerPresence } from './ViewerPresence'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'\nimport { voiceTts } from '@/lib/voice'\nimport { displayName, providerBlockedState, shortPath } from '@/lib/display'\nimport type { Agent, ChatHistoryImport, InboxThread, Message } from '@/types'\n\ntype ExportableThread = InboxThread | { peer: string; messages: Message[]; importedHistory: ChatHistoryImport[] }\n\nexport function ChatHeader({\n selectedInboxThread,\n agent,\n now,\n blockedState,\n thread,\n exportableThread,\n importedHistory,\n showBackButton,\n onBack,\n openAgentDetail,\n openWorkspaceFocus,\n voiceTtsEnabled,\n setVoiceTtsEnabled,\n canOpenTerminal,\n terminalOpening,\n handleOpenTerminal,\n canInterrupt,\n interruptAgent,\n canCompact,\n canClearContext,\n canShutdown,\n openConfirm,\n workspaceAction,\n doAgentAction,\n openFilesForAgent,\n forkFromAgent,\n markInboxThreadUnread,\n markInboxThreadRead,\n exportThread,\n onOpenSearch,\n}: {\n selectedInboxThread: string\n agent: Agent | null\n now: number\n blockedState: ReturnType<typeof providerBlockedState>\n thread: InboxThread | null\n exportableThread: ExportableThread | null\n importedHistory: ChatHistoryImport[]\n showBackButton?: boolean\n onBack?: () => void\n openAgentDetail: (agent: Agent) => void\n openWorkspaceFocus: (workspaceId: string) => void\n voiceTtsEnabled: boolean\n setVoiceTtsEnabled: (enabled: boolean) => void\n canOpenTerminal: boolean\n terminalOpening: boolean\n handleOpenTerminal: () => void | Promise<void>\n canInterrupt: boolean\n interruptAgent: () => void\n canCompact: boolean\n canClearContext: boolean\n canShutdown: boolean\n openConfirm: (title: string, body: string, action: () => void) => void\n workspaceAction: (workspaceId: string, action: 'ready') => void | Promise<void>\n doAgentAction: (agent: Agent, action: 'interrupt' | 'compact' | 'clearContext' | 'shutdown') => void | Promise<void>\n openFilesForAgent: (agent: Agent) => void | Promise<void>\n forkFromAgent: (agentId: string, messages: Message[]) => void\n markInboxThreadUnread: (peer: string) => void\n markInboxThreadRead: (peer: string, messages: Message[]) => void\n exportThread: (thread: ExportableThread, format: 'json') => void\n onOpenSearch?: () => void\n}) {\n return (\n <div className=\"flex items-center justify-between px-3 md:px-4 py-2.5 md:py-3 border-b border-border shrink-0\">\n <div className=\"flex items-center gap-2 md:gap-2.5 min-w-0\">\n {showBackButton && (\n <Button variant=\"ghost\" size=\"icon-sm\" onClick={onBack} className=\"shrink-0 -ml-1\">\n <ArrowLeft className=\"w-4 h-4\" />\n </Button>\n )}\n <button\n type=\"button\"\n className=\"flex items-center gap-2 md:gap-2.5 min-w-0 hover:opacity-80 transition-opacity\"\n onClick={() => agent && openAgentDetail(agent)}\n disabled={!agent}\n >\n <div className=\"relative shrink-0\">\n <AgentTypeIcon agent={agent} />\n <StatusDot agent={agent} now={now} className=\"absolute -bottom-0.5 -right-0.5 w-2 h-2\" />\n </div>\n <div className=\"min-w-0 text-left\">\n <p className=\"flex items-center gap-1 text-sm font-medium truncate\">\n {agent && <ProfileIcon profile={agentProfileName(agent)} className=\"shrink-0\" />}\n <span className=\"truncate\">{agent ? displayName(agent) : selectedInboxThread}</span>\n </p>\n {agent && (\n <p className=\"text-xs text-muted-foreground truncate\">\n {blockedState ? `blocked: ${blockedState.label}` : agent.status}\n {agent.machine && ` · ${agent.machine}`}\n {typeof agent.meta?.cwd === 'string' && agent.meta.cwd && ` · ${shortPath(agent.meta.cwd as string, 1)}`}\n </p>\n )}\n </div>\n </button>\n {agent && <AgentRuntimeChips agent={agent} compact className=\"hidden @4xl/chat:flex shrink-0\" />}\n {agent && agentHasContextTelemetry(agent) && <ContextRing context={agent.context} expected />}\n {agent?.branchState && agent.branchWorkspaceId && (\n <BranchStateBadge state={agent.branchState} className=\"shrink-0\" onClick={() => void openWorkspaceFocus(agent.branchWorkspaceId!)} />\n )}\n {thread?.attention.unread ? (\n <Badge className=\"bg-red-500/20 text-red-400 text-xs shrink-0 hidden @2xl/chat:flex\">{thread.attention.unread} unread</Badge>\n ) : null}\n {agent && <ViewerPresence agentId={agent.id} className=\"shrink-0 hidden @3xl/chat:inline-flex\" />}\n </div>\n \n <div className=\"flex items-center gap-0.5 md:gap-1 shrink-0\">\n {agent && (\n <>\n <CopyButton value={agent.id} label=\"Copy agent ID\" size=\"icon-sm\" />\n {onOpenSearch && <Button variant=\"ghost\" size=\"icon-sm\" title=\"Search this chat\" onClick={onOpenSearch}><Search className=\"w-3.5 h-3.5\" /></Button>}\n {voiceTts.available && <Button variant=\"ghost\" size=\"icon-sm\" title={voiceTtsEnabled ? 'Speaking agent responses aloud — click to mute (engine & voice in Settings)' : 'Speak agent responses aloud (active chat) — engine & voice in Settings'} className={voiceTtsEnabled ? 'text-primary' : ''} onClick={() => setVoiceTtsEnabled(!voiceTtsEnabled)}>{voiceTtsEnabled ? <Volume2 className=\"w-3.5 h-3.5\" /> : <VolumeX className=\"w-3.5 h-3.5\" />}</Button>}\n {canOpenTerminal && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" disabled={terminalOpening} title=\"Terminal\" onClick={() => void handleOpenTerminal()}><Terminal className=\"w-3.5 h-3.5\" /></Button>}\n {canInterrupt && <Button variant=\"ghost\" size=\"icon-sm\" className=\"text-red-400 hover:text-red-300\" title=\"Interrupt\" onClick={interruptAgent}><CircleStop className=\"w-3.5 h-3.5\" /></Button>}\n {(agent.branchState === 'changes' || agent.branchState === 'idle') && agent.branchWorkspaceId && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex text-amber-400 hover:text-amber-300\" title=\"Mark workspace ready — hand off to the auto-merge\" onClick={() => openConfirm('Mark Workspace Ready', `Mark ${displayName(agent)}'s branch ready to land? The relay auto-merge will rebase and land it.`, () => workspaceAction(agent.branchWorkspaceId!, 'ready'))}><Flag className=\"w-3.5 h-3.5\" /></Button>}\n {canCompact && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Compact\" onClick={() => openConfirm('Compact Agent', `Compact context for ${displayName(agent)}?`, () => doAgentAction(agent, 'compact'))}><Minimize2 className=\"w-3.5 h-3.5\" /></Button>}\n {canClearContext && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Clear context\" onClick={() => openConfirm('Clear Context', `Clear context for ${displayName(agent)}?`, () => doAgentAction(agent, 'clearContext'))}><Eraser className=\"w-3.5 h-3.5\" /></Button>}\n {canShutdown && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Shutdown\" onClick={() => openConfirm('Shutdown Agent', `Shutdown ${displayName(agent)}?`, () => doAgentAction(agent, 'shutdown'))}><Power className=\"w-3.5 h-3.5\" /></Button>}\n {agent && typeof agent.meta?.cwd === 'string' && agent.meta.cwd && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title={`Open ${agent.meta.cwd as string} in Files`} onClick={() => void openFilesForAgent(agent)}><FolderOpen className=\"w-3.5 h-3.5\" /></Button>}\n {agent && thread && thread.messages.length > 0 && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Fork — spawn new agent with this chat history\" onClick={() => forkFromAgent(agent.id, thread.messages)}><GitFork className=\"w-3.5 h-3.5\" /></Button>}\n {thread && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Mark unread\" onClick={() => markInboxThreadUnread(selectedInboxThread)}><MailX className=\"w-3.5 h-3.5\" /></Button>}\n {thread && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Mark read\" onClick={() => markInboxThreadRead(thread.peer, thread.messages)}><MailOpen className=\"w-3.5 h-3.5\" /></Button>}\n {exportableThread && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Export thread\" onClick={() => exportThread({ ...exportableThread, importedHistory }, 'json')}><Download className=\"w-3.5 h-3.5\" /></Button>}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon-sm\" className=\"@4xl/chat:hidden\"><MoreHorizontal className=\"w-3.5 h-3.5\" /></Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {canOpenTerminal && <DropdownMenuItem disabled={terminalOpening} onClick={() => void handleOpenTerminal()}><Terminal className=\"w-3.5 h-3.5\" />Terminal</DropdownMenuItem>}\n {canInterrupt && <DropdownMenuItem onClick={interruptAgent}><CircleStop className=\"w-3.5 h-3.5\" />Interrupt</DropdownMenuItem>}\n {(agent.branchState === 'changes' || agent.branchState === 'idle') && agent.branchWorkspaceId && <DropdownMenuItem onClick={() => openConfirm('Mark Workspace Ready', `Mark ${displayName(agent)}'s branch ready to land? The relay auto-merge will rebase and land it.`, () => workspaceAction(agent.branchWorkspaceId!, 'ready'))}><Flag className=\"w-3.5 h-3.5\" />Mark Ready</DropdownMenuItem>}\n {canCompact && <DropdownMenuItem onClick={() => openConfirm('Compact Agent', `Compact context for ${displayName(agent)}?`, () => doAgentAction(agent, 'compact'))}><Minimize2 className=\"w-3.5 h-3.5\" />Compact</DropdownMenuItem>}\n {canClearContext && <DropdownMenuItem onClick={() => openConfirm('Clear Context', `Clear context for ${displayName(agent)}?`, () => doAgentAction(agent, 'clearContext'))}><Eraser className=\"w-3.5 h-3.5\" />Clear Context</DropdownMenuItem>}\n {canShutdown && <DropdownMenuItem onClick={() => openConfirm('Shutdown Agent', `Shutdown ${displayName(agent)}?`, () => doAgentAction(agent, 'shutdown'))}><Power className=\"w-3.5 h-3.5\" />Shutdown</DropdownMenuItem>}\n {agent && typeof agent.meta?.cwd === 'string' && agent.meta.cwd && <DropdownMenuItem onClick={() => void openFilesForAgent(agent)}><FolderOpen className=\"w-3.5 h-3.5\" />Open Files</DropdownMenuItem>}\n {agent && thread && thread.messages.length > 0 && <DropdownMenuItem onClick={() => forkFromAgent(agent.id, thread.messages)}><GitFork className=\"w-3.5 h-3.5\" />Fork</DropdownMenuItem>}\n {(canOpenTerminal || canCompact || canClearContext || canShutdown) && <DropdownMenuSeparator />}\n {thread && <DropdownMenuItem onClick={() => markInboxThreadUnread(selectedInboxThread)}><MailX className=\"w-3.5 h-3.5\" />Mark Unread</DropdownMenuItem>}\n {thread && <DropdownMenuItem onClick={() => markInboxThreadRead(thread.peer, thread.messages)}><MailOpen className=\"w-3.5 h-3.5\" />Mark Read</DropdownMenuItem>}\n {exportableThread && <DropdownMenuItem onClick={() => exportThread({ ...exportableThread, importedHistory }, 'json')}><Download className=\"w-3.5 h-3.5\" />Download</DropdownMenuItem>}\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n )}\n </div>\n </div>\n )\n}\n","import { useRef } from 'react'\nimport { ChevronDown, ChevronUp, Search, X } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\n\n// Sticky search toolbar at the top of the chat, below any other sticky top element\n// (e.g. the plan bar) by virtue of its column order in ChatPanel. shrink-0 + a bottom\n// border match the plan bar so the two stack as one header stack above the timeline.\nexport function ChatSearchBar({\n query,\n position,\n total,\n onQueryChange,\n onNext,\n onPrev,\n onClose,\n}: {\n query: string\n position: number\n total: number\n onQueryChange: (value: string) => void\n onNext: () => void\n onPrev: () => void\n onClose: () => void\n}) {\n const inputRef = useRef<HTMLInputElement>(null)\n const hasQuery = query.trim().length > 0\n const noMatches = hasQuery && total === 0\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n if (e.key === 'Escape') {\n e.preventDefault()\n onClose()\n return\n }\n if (e.key === 'Enter') {\n e.preventDefault()\n if (e.shiftKey) onPrev()\n else onNext()\n }\n }\n\n return (\n <section className=\"flex shrink-0 items-center gap-2 border-b border-border bg-card/45 px-3 py-2\">\n <Search className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <Input\n ref={inputRef}\n autoFocus\n value={query}\n onChange={(e) => onQueryChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Search this chat…\"\n aria-label=\"Search this chat\"\n className=\"h-7 flex-1 text-sm\"\n />\n <span\n className={\n 'shrink-0 tabular-nums text-xs ' + (noMatches ? 'text-red-400' : 'text-muted-foreground')\n }\n >\n {hasQuery ? (noMatches ? 'No results' : `${position}/${total}`) : ''}\n </span>\n <div className=\"flex shrink-0 items-center gap-0.5\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n title=\"Previous match (Shift+Enter)\"\n disabled={total === 0}\n onClick={onPrev}\n >\n <ChevronUp className=\"h-3.5 w-3.5\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n title=\"Next match (Enter)\"\n disabled={total === 0}\n onClick={onNext}\n >\n <ChevronDown className=\"h-3.5 w-3.5\" />\n </Button>\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" title=\"Close search (Esc)\" onClick={onClose}>\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </section>\n )\n}\n","\nimport type { SlashCommand } from '@/lib/slash-commands'\nimport { cn } from '@/lib/utils'\n\nexport function SlashPalette({\n matches,\n activeIndex,\n onAccept,\n onHover,\n}: {\n matches: SlashCommand[]\n activeIndex: number\n onAccept: (cmd: SlashCommand) => void\n onHover: (index: number) => void\n}) {\n if (matches.length === 0) return null\n return (\n <div className=\"absolute bottom-full left-3 right-3 md:left-4 md:right-4 mb-2 z-20 max-h-64 overflow-auto rounded-xl border border-border bg-popover shadow-lg\">\n {matches.map((cmd, i) => (\n <button\n key={cmd.name}\n onMouseDown={(e) => { e.preventDefault(); onAccept(cmd) }}\n onMouseEnter={() => onHover(i)}\n className={cn('flex w-full items-baseline gap-2 px-3 py-1.5 text-left text-sm', i === activeIndex ? 'bg-accent' : 'hover:bg-accent/50')}\n >\n <span className=\"font-medium shrink-0\">{cmd.name}</span>\n {cmd.argumentHint && <span className=\"text-xs text-muted-foreground shrink-0\">{cmd.argumentHint}</span>}\n {cmd.description && <span className=\"ml-auto truncate text-xs text-muted-foreground/70\">{cmd.description}</span>}\n </button>\n ))}\n </div>\n )\n}\n","\nimport { useEffect, useRef, useState } from 'react'\nimport { AlertCircle, FileText, Loader2, Mic, Paperclip, Send, X, ZoomIn } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\nimport { Dialog, DialogContent, DialogTitle } from '@/components/ui/dialog'\nimport { cn } from '@/lib/utils'\nimport type { PendingAttachment } from './types'\nimport { formatBytes } from './helpers'\nimport { SlashPalette } from './SlashPalette'\nimport type { SlashCommand } from '@/lib/slash-commands'\n\nfunction AutoGrowTextarea({\n value, onChange, onKeyDown, onPaste, placeholder, className,\n}: {\n value: string\n onChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void\n onKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void\n onPaste?: (e: React.ClipboardEvent<HTMLTextAreaElement>) => void\n placeholder: string\n className?: string\n}) {\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n\n useEffect(() => {\n const el = textareaRef.current\n if (!el) return\n el.style.height = 'auto'\n el.style.height = Math.min(el.scrollHeight, 200) + 'px'\n }, [value])\n\n // Handle mobile keyboard: keep input visible\n useEffect(() => {\n const vv = window.visualViewport\n if (!vv) return\n\n function handleResize() {\n const el = textareaRef.current\n if (!el || document.activeElement !== el) return\n // Scroll the input into view when keyboard appears\n requestAnimationFrame(() => {\n el.scrollIntoView({ block: 'nearest', behavior: 'smooth' })\n })\n }\n\n vv.addEventListener('resize', handleResize)\n return () => vv.removeEventListener('resize', handleResize)\n }, [])\n\n return (\n <textarea\n ref={textareaRef}\n value={value}\n onChange={onChange}\n onKeyDown={onKeyDown}\n onPaste={onPaste}\n placeholder={placeholder}\n rows={1}\n className={cn(\n 'w-full resize-none rounded-xl border border-border bg-background px-3.5 py-2.5 text-sm',\n 'placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n 'min-h-[42px] max-h-[200px] overflow-y-auto',\n className\n )}\n />\n )\n}\n\nfunction PendingAttachmentPreview({ item, onRemove }: { item: PendingAttachment; onRemove: () => void }) {\n const [open, setOpen] = useState(false)\n const canPreview = Boolean(item.previewUrl && !item.error)\n\n return (\n <>\n <div className=\"flex min-w-0 items-center gap-2 rounded-md border border-border bg-card px-2.5 py-2 text-xs\">\n <button\n type=\"button\"\n disabled={!canPreview}\n onClick={() => setOpen(true)}\n className=\"group/pending relative flex h-9 w-9 shrink-0 items-center justify-center overflow-hidden rounded bg-muted disabled:cursor-default\"\n title={canPreview ? 'Preview image' : item.fileName}\n >\n {item.previewUrl ? (\n <>\n <img src={item.previewUrl} alt={item.fileName} className=\"h-full w-full object-cover\" />\n <span className=\"absolute inset-0 flex items-center justify-center bg-black/0 group-hover/pending:bg-black/30 transition-colors\">\n <ZoomIn className=\"h-3.5 w-3.5 text-white opacity-0 group-hover/pending:opacity-100 transition-opacity drop-shadow-md\" />\n </span>\n </>\n ) : (\n item.error ? <AlertCircle className=\"h-4 w-4 text-red-400\" /> : item.uploading ? <Loader2 className=\"h-4 w-4 animate-spin text-muted-foreground\" /> : <FileText className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate font-medium\">{item.fileName}</p>\n <p className={cn('truncate text-muted-foreground', item.error && 'text-red-400')}>{item.error || (item.uploading ? 'Uploading' : formatBytes(item.size))}</p>\n </div>\n <Button variant=\"ghost\" size=\"icon-sm\" title=\"Remove attachment\" onClick={onRemove}>\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n {item.previewUrl && (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogContent className=\"max-w-[95vw] max-h-[95vh] w-auto p-0 bg-black/95 border-zinc-800 gap-0 overflow-hidden\" showCloseButton={false}>\n <DialogTitle className=\"sr-only\">{item.fileName}</DialogTitle>\n <div className=\"relative flex items-center justify-center min-h-[200px]\">\n <img src={item.previewUrl} alt={item.fileName} className=\"max-w-[93vw] max-h-[90vh] object-contain\" />\n <button type=\"button\" onClick={() => setOpen(false)} className=\"absolute top-2 right-2 rounded-md bg-black/60 hover:bg-black/80 p-2 text-white transition-colors\" title=\"Close\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </DialogContent>\n </Dialog>\n )}\n </>\n )\n}\n\nexport function Composer({\n draft,\n placeholder,\n chatSending,\n disabled,\n hasPendingUploads,\n readyAttachmentCount,\n pendingAttachments,\n micAvailable,\n micState,\n slashMatches,\n slashActiveIndex,\n onDraftChange,\n onKeyDown,\n onPaste,\n onUploadFiles,\n onRemovePendingAttachment,\n onSend,\n onAcceptSlash,\n onSlashHover,\n onStartPtt,\n onStopPtt,\n footerText,\n}: {\n draft: string\n placeholder: string\n chatSending: boolean\n disabled: boolean\n hasPendingUploads: boolean\n readyAttachmentCount: number\n pendingAttachments: PendingAttachment[]\n micAvailable: boolean\n micState: 'idle' | 'recording' | 'transcribing'\n slashMatches: SlashCommand[]\n slashActiveIndex: number\n onDraftChange: (value: string) => void\n onKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void\n onPaste: (e: React.ClipboardEvent<HTMLTextAreaElement>) => void\n onUploadFiles: (files: FileList | File[]) => void\n onRemovePendingAttachment: (id: string) => void\n onSend: () => void\n onAcceptSlash: (cmd: SlashCommand) => void\n onSlashHover: (index: number) => void\n onStartPtt: () => void\n onStopPtt: () => void\n footerText?: string\n}) {\n const fileInputRef = useRef<HTMLInputElement>(null)\n const [dragActive, setDragActive] = useState(false)\n const sendDisabled = (!draft.trim() && readyAttachmentCount === 0) || hasPendingUploads || chatSending || disabled\n\n return (\n <div\n className={cn(\n 'relative shrink-0 border-t border-border px-3 md:px-4 py-2.5 md:py-3 safe-area-bottom',\n dragActive && 'bg-primary/5 ring-1 ring-primary/40'\n )}\n onDragOver={(e) => { e.preventDefault(); setDragActive(true) }}\n onDragLeave={() => setDragActive(false)}\n onDrop={(e) => {\n e.preventDefault()\n setDragActive(false)\n onUploadFiles(e.dataTransfer.files)\n }}\n >\n {pendingAttachments.length > 0 && (\n <div className=\"mb-2 grid gap-2 sm:grid-cols-2\">\n {pendingAttachments.map((item) => (\n <PendingAttachmentPreview key={item.id} item={item} onRemove={() => onRemovePendingAttachment(item.id)} />\n ))}\n </div>\n )}\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={(e) => {\n if (e.target.files) onUploadFiles(e.target.files)\n e.currentTarget.value = ''\n }}\n />\n <SlashPalette matches={slashMatches} activeIndex={slashActiveIndex} onAccept={onAcceptSlash} onHover={onSlashHover} />\n <div className=\"hidden md:flex items-end gap-2\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Attach files\"\n disabled={chatSending}\n onClick={() => fileInputRef.current?.click()}\n className=\"shrink-0 mb-0.5 rounded-xl h-[42px] w-[42px]\"\n >\n <Paperclip className=\"w-4 h-4\" />\n </Button>\n <AutoGrowTextarea\n value={draft}\n onChange={(e) => onDraftChange(e.target.value)}\n onKeyDown={onKeyDown}\n onPaste={onPaste}\n placeholder={placeholder}\n className=\"flex-1\"\n />\n {micAvailable && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={micState === 'recording' ? 'Release to transcribe' : 'Hold to talk'}\n disabled={chatSending || micState === 'transcribing'}\n onPointerDown={(e) => { e.preventDefault(); e.currentTarget.setPointerCapture(e.pointerId); onStartPtt() }}\n onPointerUp={(e) => { e.preventDefault(); try { e.currentTarget.releasePointerCapture(e.pointerId) } catch { /* ignore */ } onStopPtt() }}\n className={`shrink-0 mb-0.5 rounded-xl h-[42px] w-[42px] ${micState === 'recording' ? 'text-red-400 animate-pulse' : ''}`}\n >\n {micState === 'transcribing' ? <Loader2 className=\"w-4 h-4 animate-spin\" /> : <Mic className=\"w-4 h-4\" />}\n </Button>\n )}\n <Button\n size=\"icon\"\n disabled={sendDisabled}\n onClick={onSend}\n className=\"shrink-0 mb-0.5 rounded-xl h-[42px] w-[42px]\"\n >\n <Send className=\"w-4 h-4\" />\n </Button>\n </div>\n <div className=\"md:hidden space-y-2\">\n <AutoGrowTextarea\n value={draft}\n onChange={(e) => onDraftChange(e.target.value)}\n onKeyDown={onKeyDown}\n onPaste={onPaste}\n placeholder={placeholder}\n className=\"w-full\"\n />\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Attach files\"\n disabled={chatSending}\n onClick={() => fileInputRef.current?.click()}\n className=\"rounded-xl h-9 w-9\"\n >\n <Paperclip className=\"w-4 h-4\" />\n </Button>\n {micAvailable && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={micState === 'recording' ? 'Release to transcribe' : 'Hold to talk'}\n disabled={chatSending || micState === 'transcribing'}\n onPointerDown={(e) => { e.preventDefault(); e.currentTarget.setPointerCapture(e.pointerId); onStartPtt() }}\n onPointerUp={(e) => { e.preventDefault(); try { e.currentTarget.releasePointerCapture(e.pointerId) } catch { /* ignore */ } onStopPtt() }}\n className={`rounded-xl h-9 w-9 ${micState === 'recording' ? 'text-red-400 animate-pulse' : ''}`}\n >\n {micState === 'transcribing' ? <Loader2 className=\"w-4 h-4 animate-spin\" /> : <Mic className=\"w-4 h-4\" />}\n </Button>\n )}\n </div>\n <Button\n size=\"icon\"\n disabled={sendDisabled}\n onClick={onSend}\n className=\"rounded-xl h-9 w-9\"\n >\n <Send className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n {footerText && (\n <p className=\"text-xs text-muted-foreground mt-1.5 hidden md:block\">\n {footerText}\n </p>\n )}\n </div>\n )\n}\n","\nimport { createPortal } from 'react-dom'\nimport { DirectoryContent, FileContent } from '@/components/views/files'\nimport type { ReferencedPathInfo } from './types'\n\nexport function FloatingFilePreview({\n preview,\n error,\n onReadError,\n onMouseEnter,\n onMouseLeave,\n}: {\n preview: { orchestratorId: string; path: string; line: number; type: ReferencedPathInfo['type']; anchor: DOMRect }\n error: string\n onReadError: (error: string) => void\n onMouseEnter: () => void\n onMouseLeave: () => void\n}) {\n const { anchor } = preview\n const gap = 8\n const width = Math.min(560, window.innerWidth - 24)\n const height = Math.min(380, window.innerHeight - 24)\n const left = Math.max(12, Math.min(anchor.left, window.innerWidth - width - 12))\n const spaceBelow = window.innerHeight - anchor.bottom\n const top = spaceBelow >= height + gap\n ? anchor.bottom + gap\n : anchor.top - gap - height >= 12\n ? anchor.top - gap - height\n : Math.max(12, window.innerHeight - height - 12)\n\n return createPortal(\n <div\n className=\"fixed z-50 flex flex-col overflow-hidden rounded-lg border border-border bg-background shadow-xl\"\n style={{ top, left, width, height }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <div className=\"flex h-8 shrink-0 items-center gap-2 border-b border-border px-2.5\">\n <span className=\"min-w-0 flex-1 truncate text-[11px] font-medium text-muted-foreground\">{preview.path}</span>\n {error && <span className=\"max-w-[12rem] truncate text-[11px] text-red-400\">{error}</span>}\n <span className=\"shrink-0 text-[10px] text-muted-foreground/70\">click to pin</span>\n </div>\n <div className=\"min-h-0 flex-1\">\n {preview.type === 'directory' ? (\n <DirectoryContent orchestratorId={preview.orchestratorId} selectedPath={preview.path} onReadError={onReadError} />\n ) : (\n <FileContent orchestratorId={preview.orchestratorId} selectedPath={preview.path} line={preview.line} onReadError={onReadError} />\n )}\n </div>\n </div>,\n document.body,\n )\n}\n","\nimport { useRelayStore, type ChatStatusEvent as StatusEvent } from '@/store'\n\nconst NO_STATUS_EVENTS: StatusEvent[] = []\n\nexport function useAgentStatusEvents(agentId: string): StatusEvent[] {\n return useRelayStore((s) => s.chatStatusEvents[agentId] ?? NO_STATUS_EVENTS)\n}\n","\nimport { useEffect, useRef } from 'react'\n\nexport function useBackNavProtection(hasDraft: boolean, onBack: () => void) {\n const historyPushedRef = useRef(false)\n\n useEffect(() => {\n if (!hasDraft) return\n\n if (!historyPushedRef.current) {\n window.history.pushState({ chatGuard: true }, '')\n historyPushedRef.current = true\n }\n\n function handlePopState(e: PopStateEvent) {\n if (e.state?.chatGuard !== undefined || !historyPushedRef.current) {\n // Re-push state to keep the guard active\n window.history.pushState({ chatGuard: true }, '')\n onBack()\n }\n }\n\n function handleBeforeUnload(e: BeforeUnloadEvent) {\n e.preventDefault()\n }\n\n window.addEventListener('popstate', handlePopState)\n window.addEventListener('beforeunload', handleBeforeUnload)\n return () => {\n window.removeEventListener('popstate', handlePopState)\n window.removeEventListener('beforeunload', handleBeforeUnload)\n }\n }, [hasDraft, onBack])\n\n useEffect(() => {\n if (!hasDraft && historyPushedRef.current) {\n historyPushedRef.current = false\n }\n }, [hasDraft])\n}\n","import { type TimelineEntry, timelineEntryKey, timelineEntryText } from './sessionTrace'\n\n// Smart fuzzy match for chat search. The query matches a text if EITHER:\n// - it appears as a (case-insensitive) substring — the common, high-confidence case, or\n// - its characters appear in order as a subsequence within a single word run — the\n// \"fuzzy\" case that tolerates dropped letters (e.g. \"tmln\" → \"timeline\").\n// Substring wins because it's what people expect from a search box; the subsequence\n// fallback keeps a near-miss typo from returning zero results. Whitespace in the query\n// is collapsed so multi-word queries match across the gaps the user typed.\nexport function fuzzyMatches(text: string, query: string): boolean {\n const haystack = text.toLowerCase()\n const needle = query.trim().toLowerCase()\n if (!needle) return false\n if (haystack.includes(needle)) return true\n // Subsequence fallback only for a single contiguous token — fuzzing across spaces\n // produces too many false positives in long messages.\n if (/\\s/.test(needle)) return false\n // Very short needles (< 4 chars) are too ambiguous for subsequence matching —\n // single-char abbreviations like \"e\" would match almost everything.\n if (needle.length < 4) return false\n return isSubsequence(haystack, needle)\n}\n\n// maxGap caps the number of unmatched characters allowed between two consecutive\n// matched needle chars. Without this, \"abcdef\" matches any long English sentence.\nfunction isSubsequence(haystack: string, needle: string, maxGap = 4): boolean {\n let i = 0\n let lastMatch = -1\n for (let h = 0; h < haystack.length && i < needle.length; h += 1) {\n if (haystack[h] === needle[i]) {\n if (lastMatch !== -1 && h - lastMatch - 1 > maxGap) return false\n lastMatch = h\n i += 1\n }\n }\n return i === needle.length\n}\n\n// Returns the timeline-entry keys that match the query, in timeline (chronological)\n// order — that ordering is what powers the prev/next navigation and the \"1/N\" counter.\nexport function searchTimeline(timeline: TimelineEntry[], query: string): string[] {\n const needle = query.trim()\n if (!needle) return []\n const keys: string[] = []\n for (const entry of timeline) {\n const text = timelineEntryText(entry)\n if (text && fuzzyMatches(text, needle)) keys.push(timelineEntryKey(entry))\n }\n return keys\n}\n","import { useCallback, useMemo, useState } from 'react'\nimport type { TimelineEntry } from '../sessionTrace'\nimport { searchTimeline } from '../chatSearch'\n\ninterface ChatSearch {\n open: boolean\n query: string\n /** Match keys in timeline order (empty when query is blank or no matches). */\n matchKeys: string[]\n /** Set form for O(1) per-row highlight checks in the timeline. */\n matchKeySet: Set<string>\n /** Total match count. */\n total: number\n /** 1-based index of the current match (0 when there are none). */\n position: number\n /** Timeline key of the current match, or null. */\n currentKey: string | null\n openSearch: () => void\n close: () => void\n setQuery: (value: string) => void\n next: () => void\n prev: () => void\n}\n\n// Chat-session search state. All match computation is render-time derived from the\n// live timeline + query (no effects); navigation and query changes are plain event\n// handlers. The current match is clamped during render so a shrinking timeline (older\n// matches scrolling out, agent switch) can never strand the index out of range.\nexport function useChatSearch(timeline: TimelineEntry[]): ChatSearch {\n const [open, setOpen] = useState(false)\n const [query, setQueryState] = useState('')\n const [index, setIndex] = useState(0)\n\n const matchKeys = useMemo(() => (open ? searchTimeline(timeline, query) : []), [open, query, timeline])\n const matchKeySet = useMemo(() => new Set(matchKeys), [matchKeys])\n const total = matchKeys.length\n const safeIndex = total ? Math.min(index, total - 1) : 0\n const currentKey = total ? matchKeys[safeIndex] ?? null : null\n\n const openSearch = useCallback(() => setOpen(true), [])\n const close = useCallback(() => {\n setOpen(false)\n setQueryState('')\n setIndex(0)\n }, [])\n // Typing always re-anchors to the first match — the expected find-as-you-type behaviour.\n const setQuery = useCallback((value: string) => {\n setQueryState(value)\n setIndex(0)\n }, [])\n const next = useCallback(() => {\n setIndex((i) => (total ? (i + 1) % total : 0))\n }, [total])\n const prev = useCallback(() => {\n setIndex((i) => (total ? (i - 1 + total) % total : 0))\n }, [total])\n\n return {\n open,\n query,\n matchKeys,\n matchKeySet,\n total,\n position: total ? safeIndex + 1 : 0,\n currentKey,\n openSearch,\n close,\n setQuery,\n next,\n prev,\n }\n}\n","import { useEffect, useRef } from 'react'\nimport { useRelayStore } from '@/store'\n\nconst HEARTBEAT_MS = 10_000\n\n// Announce this dashboard's presence on an agent thread while its chat is open (#390). A\n// genuine external-sync effect: it drives the server-side presence registry via a timer +\n// announce, and fires a \"leaving\" beacon on cleanup so other dashboards drop us immediately\n// instead of waiting for the TTL. `typing` is folded into the heartbeat (via a ref so the\n// interval always sends the current value) plus an immediate re-announce on each flip, so the\n// \"is typing\" indicator updates without a 10s lag.\nexport function usePresenceHeartbeat(agentId: string, typing: boolean): void {\n const announcePresence = useRelayStore((s) => s.announcePresence)\n const typingRef = useRef(typing)\n typingRef.current = typing\n\n // Interval heartbeat + leave beacon, keyed only on the thread so a typing flip never tears\n // down the timer.\n useEffect(() => {\n if (!agentId) return\n void announcePresence(agentId, typingRef.current)\n const timer = setInterval(() => { void announcePresence(agentId, typingRef.current) }, HEARTBEAT_MS)\n return () => {\n clearInterval(timer)\n void announcePresence(agentId, false, true)\n }\n }, [agentId, announcePresence])\n\n // Push a typing transition straight through rather than waiting for the next tick.\n useEffect(() => {\n if (!agentId) return\n void announcePresence(agentId, typing)\n }, [agentId, typing, announcePresence])\n}\n","import { jsx as G, jsxs as $t } from \"react/jsx-runtime\";\nimport E, { createElement as Dt } from \"react\";\nimport So from \"react-dom\";\nconst we = 0, Pt = 1, Xt = 2, Wn = 4;\nfunction fn(t) {\n return () => t;\n}\nfunction xo(t) {\n t();\n}\nfunction re(t, e) {\n return (n) => t(e(n));\n}\nfunction mn(t, e) {\n return () => t(e);\n}\nfunction vo(t, e) {\n return (n) => t(e, n);\n}\nfunction _e(t) {\n return t !== void 0;\n}\nfunction To(...t) {\n return () => {\n t.map(xo);\n };\n}\nfunction Jt() {\n}\nfunction ye(t, e) {\n return e(t), t;\n}\nfunction Co(t, e) {\n return e(t);\n}\nfunction rt(...t) {\n return t;\n}\nfunction Y(t, e) {\n return t(Pt, e);\n}\nfunction _(t, e) {\n t(we, e);\n}\nfunction Ne(t) {\n t(Xt);\n}\nfunction it(t) {\n return t(Wn);\n}\nfunction k(t, e) {\n return Y(t, vo(e, we));\n}\nfunction yt(t, e) {\n const n = t(Pt, (o) => {\n n(), e(o);\n });\n return n;\n}\nfunction pn(t) {\n let e, n;\n return (o) => (r) => {\n e = r, n && clearTimeout(n), n = setTimeout(() => {\n o(e);\n }, t);\n };\n}\nfunction Pn(t, e) {\n return t === e;\n}\nfunction nt(t = Pn) {\n let e;\n return (n) => (o) => {\n t(e, o) || (e = o, n(o));\n };\n}\nfunction P(t) {\n return (e) => (n) => {\n t(n) && e(n);\n };\n}\nfunction B(t) {\n return (e) => re(e, t);\n}\nfunction Bt(t) {\n return (e) => () => {\n e(t);\n };\n}\nfunction x(t, ...e) {\n const n = wo(...e);\n return ((o, r) => {\n switch (o) {\n case Xt:\n Ne(t);\n return;\n case Pt:\n return Y(t, n(r));\n }\n });\n}\nfunction Lt(t, e) {\n return (n) => (o) => {\n n(e = t(e, o));\n };\n}\nfunction Ut(t) {\n return (e) => (n) => {\n t > 0 ? t-- : e(n);\n };\n}\nfunction zt(t) {\n let e = null, n;\n return (o) => (r) => {\n e = r, !n && (n = setTimeout(() => {\n n = void 0, o(e);\n }, t));\n };\n}\nfunction $(...t) {\n const e = new Array(t.length);\n let n = 0, o = null;\n const r = 2 ** t.length - 1;\n return t.forEach((s, i) => {\n const l = 2 ** i;\n Y(s, (c) => {\n const d = n;\n n |= l, e[i] = c, d !== r && n === r && o && (o(), o = null);\n });\n }), (s) => (i) => {\n const l = () => {\n s([i].concat(e));\n };\n n === r ? l() : o = l;\n };\n}\nfunction wo(...t) {\n return (e) => t.reduceRight(Co, e);\n}\nfunction yo(t) {\n let e, n;\n const o = () => e?.();\n return function(r, s) {\n switch (r) {\n case Pt:\n return s ? n === s ? void 0 : (o(), n = s, e = Y(t, s), e) : (o(), Jt);\n case Xt:\n o(), n = null;\n return;\n }\n };\n}\nfunction T(t) {\n let e = t;\n const n = U();\n return ((o, r) => {\n switch (o) {\n case we:\n e = r;\n break;\n case Pt: {\n r(e);\n break;\n }\n case Wn:\n return e;\n }\n return n(o, r);\n });\n}\nfunction ht(t, e) {\n return ye(T(e), (n) => k(t, n));\n}\nfunction U() {\n const t = [];\n return ((e, n) => {\n switch (e) {\n case we:\n t.slice().forEach((o) => {\n o(n);\n });\n return;\n case Xt:\n t.splice(0, t.length);\n return;\n case Pt:\n return t.push(n), () => {\n const o = t.indexOf(n);\n o > -1 && t.splice(o, 1);\n };\n }\n });\n}\nfunction Tt(t) {\n return ye(U(), (e) => k(t, e));\n}\nfunction j(t, e = [], { singleton: n } = { singleton: !0 }) {\n return {\n constructor: t,\n dependencies: e,\n id: bo(),\n singleton: n\n };\n}\nconst bo = () => Symbol();\nfunction Ro(t) {\n const e = /* @__PURE__ */ new Map(), n = ({ constructor: o, dependencies: r, id: s, singleton: i }) => {\n if (i && e.has(s))\n return e.get(s);\n const l = o(r.map((c) => n(c)));\n return i && e.set(s, l), l;\n };\n return n(t);\n}\nfunction at(...t) {\n const e = U(), n = new Array(t.length);\n let o = 0;\n const r = 2 ** t.length - 1;\n return t.forEach((s, i) => {\n const l = 2 ** i;\n Y(s, (c) => {\n n[i] = c, o |= l, o === r && _(e, n);\n });\n }), function(s, i) {\n switch (s) {\n case Xt: {\n Ne(e);\n return;\n }\n case Pt:\n return o === r && i(n), Y(e, i);\n }\n };\n}\nfunction W(t, e = Pn) {\n return x(t, nt(e));\n}\nfunction Fe(...t) {\n return function(e, n) {\n switch (e) {\n case Xt:\n return;\n case Pt:\n return To(...t.map((o) => Y(o, n)));\n }\n };\n}\nconst ft = {\n /** Detailed debugging information including item measurements */\n DEBUG: 0,\n /** General informational messages */\n INFO: 1,\n /** Warning messages for potential issues */\n WARN: 2,\n /** Error messages for failures (default level) */\n ERROR: 3\n}, Ho = {\n [ft.DEBUG]: \"debug\",\n [ft.ERROR]: \"error\",\n [ft.INFO]: \"log\",\n [ft.WARN]: \"warn\"\n}, Eo = () => typeof globalThis > \"u\" ? window : globalThis, Gt = j(\n () => {\n const t = T(ft.ERROR);\n return {\n log: T((n, o, r = ft.INFO) => {\n const s = Eo().VIRTUOSO_LOG_LEVEL ?? it(t);\n r >= s && console[Ho[r]](\n \"%creact-virtuoso: %c%s %o\",\n \"color: #0253b3; font-weight: bold\",\n \"color: initial\",\n n,\n o\n );\n }),\n logLevel: t\n };\n },\n [],\n { singleton: !0 }\n), Ve = /* @__PURE__ */ new WeakMap();\nfunction Gn(t) {\n return \"self\" in t ? t.document.documentElement : t;\n}\nfunction Bo(t) {\n const e = Gn(t), n = Ve.get(e);\n if (n !== void 0)\n return n;\n const o = e.ownerDocument.defaultView.getComputedStyle(e).direction === \"rtl\";\n return Ve.set(e, o), o;\n}\nfunction hn(t) {\n Ve.delete(Gn(t));\n}\nfunction An(t, e) {\n return Bo(t) ? -e : e;\n}\nconst _t = An;\nfunction gn(t, e) {\n return An(t, e);\n}\nfunction Ot(t, e, n) {\n return De(t, e, n).callbackRef;\n}\nfunction De(t, e, n) {\n const o = E.useRef(null);\n let r = (i) => {\n };\n const s = E.useMemo(() => typeof ResizeObserver < \"u\" ? new ResizeObserver((i) => {\n const l = () => {\n const c = i[0].target;\n c.offsetParent !== null && t(c);\n };\n n ? l() : requestAnimationFrame(l);\n }) : null, [t, n]);\n return r = (i) => {\n i && e ? (s?.observe(i), o.current = i) : (o.current && s?.unobserve(o.current), o.current = null);\n }, { callbackRef: r, ref: o };\n}\nfunction Mn(t, e, n, o, r, s, i, l, c) {\n const d = E.useCallback(\n (m) => {\n const v = Lo(m.children, e, l ? \"offsetWidth\" : \"offsetHeight\", r);\n let p = m.parentElement;\n for (; p.dataset.virtuosoScroller === void 0; )\n p = p.parentElement;\n const I = p.lastElementChild.dataset.viewportType === \"window\";\n let w;\n I && (w = p.ownerDocument.defaultView);\n const R = i ? l ? i.scrollWidth : i.scrollHeight : I ? l ? w.document.documentElement.scrollWidth : w.document.documentElement.scrollHeight : l ? p.scrollWidth : p.scrollHeight, h = i ? l ? i.offsetWidth : i.offsetHeight : I ? l ? w.innerWidth : w.innerHeight : l ? p.offsetWidth : p.offsetHeight, f = i ? l ? _t(i, i.scrollLeft) : i.scrollTop : I ? l ? _t(w, w.scrollX || w.document.documentElement.scrollLeft) : w.scrollY || w.document.documentElement.scrollTop : l ? _t(p, p.scrollLeft) : p.scrollTop;\n o({\n scrollHeight: R,\n scrollTop: Math.max(f, 0),\n viewportHeight: h\n }), s?.(\n l ? In(\"column-gap\", getComputedStyle(m).columnGap, r) : In(\"row-gap\", getComputedStyle(m).rowGap, r)\n ), v !== null && t(v);\n },\n [t, e, r, s, i, o, l]\n );\n return De(d, n, c);\n}\nfunction Lo(t, e, n, o) {\n const r = t.length;\n if (r === 0)\n return null;\n const s = [];\n for (let i = 0; i < r; i++) {\n const l = t.item(i);\n if (l.dataset.index === void 0)\n continue;\n const c = parseInt(l.dataset.index), d = parseFloat(l.dataset.knownSize), m = e(l, n);\n if (m === 0 && o(\"Zero-sized element, this should not happen\", { child: l }, ft.ERROR), m === d)\n continue;\n const v = s[s.length - 1];\n s.length === 0 || v.size !== m || v.endIndex !== c - 1 ? s.push({ endIndex: c, size: m, startIndex: c }) : s[s.length - 1].endIndex++;\n }\n return s;\n}\nfunction In(t, e, n) {\n return e !== \"normal\" && e?.endsWith(\"px\") !== !0 && n(`${t} was not resolved to pixel value correctly`, e, ft.WARN), e === \"normal\" ? 0 : parseInt(e ?? \"0\", 10);\n}\nfunction $e(t, e, n) {\n const o = E.useRef(null), r = E.useCallback(\n (c) => {\n if (!c?.offsetParent)\n return;\n const d = c.getBoundingClientRect(), m = d.width;\n let v, p;\n if (e) {\n const I = e.getBoundingClientRect(), w = d.top - I.top;\n p = I.height - Math.max(0, w), v = w + e.scrollTop;\n } else {\n const I = i.current.ownerDocument.defaultView;\n p = I.innerHeight - Math.max(0, d.top), v = d.top + I.scrollY;\n }\n o.current = {\n listHeight: d.height,\n offsetTop: v,\n visibleHeight: p,\n visibleWidth: m\n }, t(o.current);\n },\n // oxlint-disable-next-line exhaustive-deps\n [t, e]\n ), { callbackRef: s, ref: i } = De(r, !0, n), l = E.useCallback(() => {\n r(i.current);\n }, [r, i]);\n return E.useEffect(() => {\n if (e) {\n e.addEventListener(\"scroll\", l);\n const d = new ResizeObserver(() => {\n requestAnimationFrame(l);\n });\n return d.observe(e), () => {\n e.removeEventListener(\"scroll\", l), d.unobserve(e);\n };\n }\n const c = i.current?.ownerDocument.defaultView;\n return c?.addEventListener(\"scroll\", l), c?.addEventListener(\"resize\", l), () => {\n c?.removeEventListener(\"scroll\", l), c?.removeEventListener(\"resize\", l);\n };\n }, [l, e, i]), s;\n}\nconst It = j(\n () => {\n const t = U(), e = U(), n = T(0), o = U(), r = T(0), s = U(), i = U(), l = T(0), c = T(0), d = T(0), m = T(0), v = U(), p = U(), I = T(!1), w = T(!1), R = T(!1);\n return k(\n x(\n t,\n B(({ scrollTop: h }) => h)\n ),\n e\n ), k(\n x(\n t,\n B(({ scrollHeight: h }) => h)\n ),\n i\n ), k(e, r), {\n deviation: n,\n fixedFooterHeight: d,\n fixedHeaderHeight: c,\n footerHeight: m,\n headerHeight: l,\n horizontalDirection: w,\n scrollBy: p,\n // input\n scrollContainerState: t,\n scrollHeight: i,\n scrollingInProgress: I,\n // signals\n scrollTo: v,\n scrollTop: e,\n skipAnimationFrameInResizeObserver: R,\n smoothScrollTargetReached: o,\n // state\n statefulScrollTop: r,\n viewportHeight: s\n };\n },\n [],\n { singleton: !0 }\n), se = { lvl: 0 };\nfunction _n(t, e) {\n const n = t.length;\n if (n === 0)\n return [];\n let { index: o, value: r } = e(t[0]);\n const s = [];\n for (let i = 1; i < n; i++) {\n const { index: l, value: c } = e(t[i]);\n s.push({ end: l - 1, start: o, value: r }), o = l, r = c;\n }\n return s.push({ end: 1 / 0, start: o, value: r }), s;\n}\nfunction J(t) {\n return t === se;\n}\nfunction ie(t, e) {\n if (!J(t))\n return e === t.k ? t.v : e < t.k ? ie(t.l, e) : ie(t.r, e);\n}\nfunction Rt(t, e, n = \"k\") {\n if (J(t))\n return [-1 / 0, void 0];\n if (Number(t[n]) === e)\n return [t.k, t.v];\n if (Number(t[n]) < e) {\n const o = Rt(t.r, e, n);\n return o[0] === -1 / 0 ? [t.k, t.v] : o;\n }\n return Rt(t.l, e, n);\n}\nfunction vt(t, e, n) {\n return J(t) ? $n(e, n, 1) : e === t.k ? dt(t, { k: e, v: n }) : e < t.k ? Sn(dt(t, { l: vt(t.l, e, n) })) : Sn(dt(t, { r: vt(t.r, e, n) }));\n}\nfunction Yt() {\n return se;\n}\nfunction Zt(t, e, n) {\n if (J(t))\n return [];\n const o = Rt(t, e)[0];\n return Oo(Pe(t, o, n));\n}\nfunction We(t, e) {\n if (J(t))\n return se;\n const { k: n, l: o, r } = t;\n if (e === n) {\n if (J(o))\n return r;\n if (J(r))\n return o;\n const [s, i] = Dn(o);\n return xe(dt(t, { k: s, l: Nn(o), v: i }));\n }\n return e < n ? xe(dt(t, { l: We(o, e) })) : xe(dt(t, { r: We(r, e) }));\n}\nfunction Nt(t) {\n return J(t) ? [] : [...Nt(t.l), { k: t.k, v: t.v }, ...Nt(t.r)];\n}\nfunction Pe(t, e, n) {\n if (J(t))\n return [];\n const { k: o, l: r, r: s, v: i } = t;\n let l = [];\n return o > e && (l = l.concat(Pe(r, e, n))), o >= e && o <= n && l.push({ k: o, v: i }), o <= n && (l = l.concat(Pe(s, e, n))), l;\n}\nfunction xe(t) {\n const { l: e, lvl: n, r: o } = t;\n if (o.lvl >= n - 1 && e.lvl >= n - 1)\n return t;\n if (n > o.lvl + 1) {\n if (Be(e))\n return Un(dt(t, { lvl: n - 1 }));\n if (!J(e) && !J(e.r))\n return dt(e.r, {\n l: dt(e, { r: e.r.l }),\n lvl: n,\n r: dt(t, {\n l: e.r.r,\n lvl: n - 1\n })\n });\n throw new Error(\"Unexpected empty nodes\");\n }\n if (Be(t))\n return Ge(dt(t, { lvl: n - 1 }));\n if (!J(o) && !J(o.l)) {\n const r = o.l, s = Be(r) ? o.lvl - 1 : o.lvl;\n return dt(r, {\n l: dt(t, {\n lvl: n - 1,\n r: r.l\n }),\n lvl: r.lvl + 1,\n r: Ge(dt(o, { l: r.r, lvl: s }))\n });\n }\n throw new Error(\"Unexpected empty nodes\");\n}\nfunction dt(t, e) {\n return $n(\n e.k !== void 0 ? e.k : t.k,\n e.v !== void 0 ? e.v : t.v,\n e.lvl !== void 0 ? e.lvl : t.lvl,\n e.l !== void 0 ? e.l : t.l,\n e.r !== void 0 ? e.r : t.r\n );\n}\nfunction Nn(t) {\n return J(t.r) ? t.l : xe(dt(t, { r: Nn(t.r) }));\n}\nfunction Be(t) {\n return J(t) || t.lvl > t.r.lvl;\n}\nfunction Dn(t) {\n return J(t.r) ? [t.k, t.v] : Dn(t.r);\n}\nfunction $n(t, e, n, o = se, r = se) {\n return { k: t, l: o, lvl: n, r, v: e };\n}\nfunction Sn(t) {\n return Ge(Un(t));\n}\nfunction Un(t) {\n const { l: e } = t;\n return !J(e) && e.lvl === t.lvl ? dt(e, { r: dt(t, { l: e.r }) }) : t;\n}\nfunction Ge(t) {\n const { lvl: e, r: n } = t;\n return !J(n) && !J(n.r) && n.lvl === e && n.r.lvl === e ? dt(n, { l: dt(t, { r: n.l }), lvl: e + 1 }) : t;\n}\nfunction Oo(t) {\n return _n(t, ({ k: e, v: n }) => ({ index: e, value: n }));\n}\nfunction Kn(t, e) {\n return !!(t && t.startIndex === e.startIndex && t.endIndex === e.endIndex);\n}\nfunction le(t, e) {\n return !!(t && t[0] === e[0] && t[1] === e[1]);\n}\nconst Ue = j(\n () => ({ recalcInProgress: T(!1) }),\n [],\n { singleton: !0 }\n);\nfunction jn(t, e, n) {\n return t[Te(t, e, n)];\n}\nfunction Te(t, e, n, o = 0) {\n let r = t.length - 1;\n for (; o <= r; ) {\n const s = Math.floor((o + r) / 2), i = t[s], l = n(i, e);\n if (l === 0)\n return s;\n if (l === -1) {\n if (r - o < 2)\n return s - 1;\n r = s - 1;\n } else {\n if (r === o)\n return s;\n o = s + 1;\n }\n }\n throw new Error(`Failed binary finding record in array - ${t.join(\",\")}, searched for ${e}`);\n}\nfunction ko(t, e, n, o) {\n const r = Te(t, e, o), s = Te(t, n, o, r);\n return t.slice(r, s + 1);\n}\nfunction Ht(t, e) {\n return Math.round(t.getBoundingClientRect()[e]);\n}\nfunction be(t) {\n return !J(t.groupOffsetTree);\n}\nfunction Ke({ index: t }, e) {\n return e === t ? 0 : e < t ? -1 : 1;\n}\nfunction zo() {\n return {\n groupIndices: [],\n groupOffsetTree: Yt(),\n lastIndex: 0,\n lastOffset: 0,\n lastSize: 0,\n offsetTree: [],\n sizeTree: Yt()\n };\n}\nfunction Fo(t, e) {\n let n = J(t) ? 0 : 1 / 0;\n for (const o of e) {\n const { endIndex: r, size: s, startIndex: i } = o;\n if (n = Math.min(n, i), J(t)) {\n t = vt(t, 0, s);\n continue;\n }\n const l = Zt(t, i - 1, r + 1);\n if (l.some(_o(o)))\n continue;\n let c = !1, d = !1;\n for (const { end: m, start: v, value: p } of l)\n c ? (r >= v || s === p) && (t = We(t, v)) : (d = p !== s, c = !0), m > r && r >= v && p !== s && (t = vt(t, r + 1, p));\n d && (t = vt(t, i, s));\n }\n return [t, n];\n}\nfunction Vo(t) {\n return typeof t.groupIndex < \"u\";\n}\nfunction Wo({ offset: t }, e) {\n return e === t ? 0 : e < t ? -1 : 1;\n}\nfunction ce(t, e, n) {\n if (e.length === 0)\n return 0;\n const { index: o, offset: r, size: s } = jn(e, t, Ke), i = t - o, l = s * i + (i - 1) * n + r;\n return l > 0 ? l + n : l;\n}\nfunction qn(t, e) {\n if (!be(e))\n return t;\n let n = 0;\n for (; e.groupIndices[n] <= t + n; )\n n++;\n return t + n;\n}\nfunction Yn(t, e, n) {\n if (Vo(t))\n return e.groupIndices[t.groupIndex] + 1;\n const o = t.index === \"LAST\" ? n : t.index;\n let r = qn(o, e);\n return r = Math.max(0, r, Math.min(n, r)), r;\n}\nfunction Po(t, e, n, o = 0) {\n return o > 0 && (e = Math.max(e, jn(t, o, Ke).offset)), _n(ko(t, e, n, Wo), Mo);\n}\nfunction Go(t, [e, n, o, r]) {\n e.length > 0 && o(\"received item sizes\", e, ft.DEBUG);\n const s = t.sizeTree;\n let i = s, l = 0;\n if (n.length > 0 && J(s) && e.length === 2) {\n const p = e[0].size, I = e[1].size;\n i = n.reduce((w, R) => vt(vt(w, R, p), R + 1, I), i);\n } else\n [i, l] = Fo(i, e);\n if (i === s)\n return t;\n const { lastIndex: c, lastOffset: d, lastSize: m, offsetTree: v } = Ae(t.offsetTree, l, i, r);\n return {\n groupIndices: n,\n groupOffsetTree: n.reduce((p, I) => vt(p, I, ce(I, v, r)), Yt()),\n lastIndex: c,\n lastOffset: d,\n lastSize: m,\n offsetTree: v,\n sizeTree: i\n };\n}\nfunction Ao(t) {\n return Nt(t).map(({ k: e, v: n }, o, r) => {\n const s = r[o + 1];\n return { endIndex: s !== void 0 ? s.k - 1 : 1 / 0, size: n, startIndex: e };\n });\n}\nfunction xn(t, e) {\n let n = 0, o = 0;\n for (; n < t; )\n n += e[o + 1] - e[o] - 1, o++;\n return o - (n === t ? 0 : 1);\n}\nfunction Ae(t, e, n, o) {\n let r = t, s = 0, i = 0, l = 0, c = 0;\n if (e !== 0) {\n c = Te(r, e - 1, Ke), l = r[c].offset;\n const m = Rt(n, e - 1);\n s = m[0], i = m[1], r.length && r[c].size === Rt(n, e)[1] && (c -= 1), r = r.slice(0, c + 1);\n } else\n r = [];\n for (const { start: d, value: m } of Zt(n, e, 1 / 0)) {\n const v = d - s, p = v * i + l + v * o;\n r.push({\n index: d,\n offset: p,\n size: m\n }), s = d, l = p, i = m;\n }\n return {\n lastIndex: s,\n lastOffset: l,\n lastSize: i,\n offsetTree: r\n };\n}\nfunction Mo(t) {\n return { index: t.index, value: t };\n}\nfunction _o(t) {\n const { endIndex: e, size: n, startIndex: o } = t;\n return (r) => r.start === o && (r.end === e || r.end === 1 / 0) && r.value === n;\n}\nconst No = {\n offsetHeight: \"height\",\n offsetWidth: \"width\"\n}, kt = j(\n ([{ log: t }, { recalcInProgress: e }]) => {\n const n = U(), o = U(), r = ht(o, 0), s = U(), i = U(), l = T(0), c = T([]), d = T(void 0), m = T(void 0), v = T(void 0), p = T(void 0), I = T((u, g) => Ht(u, No[g])), w = T(void 0), R = T(0), h = zo(), f = ht(\n x(n, $(c, t, R), Lt(Go, h), nt()),\n h\n ), a = ht(\n x(\n c,\n nt(),\n Lt((u, g) => ({ current: g, prev: u.current }), {\n current: [],\n prev: []\n }),\n B(({ prev: u }) => u)\n ),\n []\n );\n k(\n x(\n c,\n P((u) => u.length > 0),\n $(f, R),\n B(([u, g, C]) => {\n const z = u.reduce((L, V, N) => vt(L, V, ce(V, g.offsetTree, C) || N), Yt());\n return {\n ...g,\n groupIndices: u,\n groupOffsetTree: z\n };\n })\n ),\n f\n ), k(\n x(\n o,\n $(f),\n P(([u, { lastIndex: g }]) => u < g),\n B(([u, { lastIndex: g, lastSize: C }]) => [\n {\n endIndex: g,\n size: C,\n startIndex: u\n }\n ])\n ),\n n\n ), k(d, m);\n const S = ht(\n x(\n d,\n B((u) => u === void 0)\n ),\n !0\n );\n k(\n x(\n m,\n P((u) => u !== void 0 && J(it(f).sizeTree)),\n B((u) => {\n const g = it(v), C = it(c).length > 0;\n return g !== void 0 && g !== 0 ? C ? [\n { endIndex: 0, size: g, startIndex: 0 },\n { endIndex: 1, size: u, startIndex: 1 }\n ] : [] : [{ endIndex: 0, size: u, startIndex: 0 }];\n })\n ),\n n\n ), k(\n x(\n p,\n P((u) => u !== void 0 && u.length > 0 && J(it(f).sizeTree)),\n B((u) => {\n const g = [];\n let C = u[0], z = 0;\n for (let L = 1; L < u.length; L++) {\n const V = u[L];\n V !== C && (g.push({\n endIndex: L - 1,\n size: C,\n startIndex: z\n }), C = V, z = L);\n }\n return g.push({\n endIndex: u.length - 1,\n size: C,\n startIndex: z\n }), g;\n })\n ),\n n\n ), k(\n x(\n c,\n $(v, m),\n P(([, u, g]) => u !== void 0 && g !== void 0),\n B(([u, g, C]) => {\n const z = [];\n for (let L = 0; L < u.length; L++) {\n const V = u[L], N = u[L + 1];\n z.push({\n startIndex: V,\n endIndex: V,\n size: g\n }), N !== void 0 && z.push({\n startIndex: V + 1,\n endIndex: N - 1,\n size: C\n });\n }\n return z;\n })\n ),\n n\n );\n const H = Tt(\n x(\n n,\n $(f),\n Lt(\n ({ sizes: u }, [g, C]) => ({\n changed: C !== u,\n sizes: C\n }),\n { changed: !1, sizes: h }\n ),\n B((u) => u.changed)\n )\n );\n Y(\n x(\n l,\n Lt(\n (u, g) => ({ diff: u.prev - g, prev: g }),\n { diff: 0, prev: 0 }\n ),\n B((u) => u.diff)\n ),\n (u) => {\n const { groupIndices: g } = it(f);\n if (u > 0)\n _(e, !0), _(s, u + xn(u, g));\n else if (u < 0) {\n const C = it(a);\n C.length > 0 && (u -= xn(-u, C)), _(i, u);\n }\n }\n ), Y(x(l, $(t)), ([u, g]) => {\n u < 0 && g(\n \"`firstItemIndex` prop should not be set to less than zero. If you don't know the total count, just use a very high value\",\n { firstItemIndex: l },\n ft.ERROR\n );\n });\n const y = Tt(s);\n k(\n x(\n s,\n $(f),\n B(([u, g]) => {\n const C = g.groupIndices.length > 0, z = [], L = g.lastSize;\n if (C) {\n const V = ie(g.sizeTree, 0);\n let N = 0, Z = 0;\n for (; N < u; ) {\n const q = g.groupIndices[Z], Q = g.groupIndices.length === Z + 1 ? 1 / 0 : g.groupIndices[Z + 1] - q - 1;\n z.push({\n endIndex: q,\n size: V,\n startIndex: q\n }), z.push({\n endIndex: q + 1 + Q - 1,\n size: L,\n startIndex: q + 1\n }), Z++, N += Q + 1;\n }\n const F = Nt(g.sizeTree);\n return N !== u && F.shift(), F.reduce(\n (q, { k: Q, v: gt }) => {\n let ut = q.ranges;\n return q.prevSize !== 0 && (ut = [\n ...q.ranges,\n {\n endIndex: Q + u - 1,\n size: q.prevSize,\n startIndex: q.prevIndex\n }\n ]), {\n prevIndex: Q + u,\n prevSize: gt,\n ranges: ut\n };\n },\n {\n prevIndex: u,\n prevSize: 0,\n ranges: z\n }\n ).ranges;\n }\n return Nt(g.sizeTree).reduce(\n (V, { k: N, v: Z }) => ({\n prevIndex: N + u,\n prevSize: Z,\n ranges: [...V.ranges, { endIndex: N + u - 1, size: V.prevSize, startIndex: V.prevIndex }]\n }),\n {\n prevIndex: 0,\n prevSize: L,\n ranges: []\n }\n ).ranges;\n })\n ),\n n\n );\n const O = Tt(\n x(\n i,\n $(f, R),\n B(([u, { offsetTree: g }, C]) => {\n const z = -u;\n return ce(z, g, C);\n })\n )\n );\n return k(\n x(\n i,\n $(f, R),\n B(([u, g, C]) => {\n if (g.groupIndices.length > 0) {\n if (J(g.sizeTree))\n return g;\n let V = Yt();\n const N = it(a);\n let Z = 0, F = 0, mt = 0;\n for (; Z < -u; ) {\n mt = N[F];\n const Q = N[F + 1] - mt - 1;\n F++, Z += Q + 1;\n }\n if (V = Nt(g.sizeTree).reduce((Q, { k: gt, v: ut }) => vt(Q, Math.max(0, gt + u), ut), V), Z !== -u) {\n const Q = ie(g.sizeTree, mt);\n V = vt(V, 0, Q);\n const gt = Rt(g.sizeTree, -u + 1)[1];\n V = vt(V, 1, gt);\n }\n return {\n ...g,\n sizeTree: V,\n ...Ae(g.offsetTree, 0, V, C)\n };\n }\n const L = Nt(g.sizeTree).reduce((V, { k: N, v: Z }) => vt(V, Math.max(0, N + u), Z), Yt());\n return {\n ...g,\n sizeTree: L,\n ...Ae(g.offsetTree, 0, L, C)\n };\n })\n ),\n f\n ), {\n beforeUnshiftWith: y,\n // input\n data: w,\n defaultItemSize: m,\n firstItemIndex: l,\n fixedItemSize: d,\n fixedGroupSize: v,\n gap: R,\n groupIndices: c,\n heightEstimates: p,\n itemSize: I,\n listRefresh: H,\n shiftWith: i,\n shiftWithOffset: O,\n sizeRanges: n,\n // output\n sizes: f,\n statefulTotalCount: r,\n totalCount: o,\n trackItemSizes: S,\n unshiftWith: s\n };\n },\n rt(Gt, Ue),\n { singleton: !0 }\n);\nfunction Do(t) {\n return t.reduce(\n (e, n) => (e.groupIndices.push(e.totalCount), e.totalCount += n + 1, e),\n {\n groupIndices: [],\n totalCount: 0\n }\n );\n}\nconst Zn = j(\n ([{ groupIndices: t, sizes: e, totalCount: n }, { headerHeight: o, scrollTop: r }]) => {\n const s = U(), i = U(), l = Tt(x(s, B(Do)));\n return k(\n x(\n l,\n B((c) => c.totalCount)\n ),\n n\n ), k(\n x(\n l,\n B((c) => c.groupIndices)\n ),\n t\n ), k(\n x(\n at(r, e, o),\n P(([c, d]) => be(d)),\n B(([c, d, m]) => Rt(d.groupOffsetTree, Math.max(c - m, 0), \"v\")[0]),\n nt(),\n B((c) => [c])\n ),\n i\n ), { groupCounts: s, topItemsIndexes: i };\n },\n rt(kt, It)\n), At = j(\n ([{ log: t }]) => {\n const e = T(!1), n = Tt(\n x(\n e,\n P((o) => o),\n nt()\n )\n );\n return Y(e, (o) => {\n o && it(t)(\"props updated\", {}, ft.DEBUG);\n }), { didMount: n, propsReady: e };\n },\n rt(Gt),\n { singleton: !0 }\n), $o = typeof document < \"u\" && \"scrollBehavior\" in document.documentElement.style;\nfunction Xn(t) {\n const e = typeof t == \"number\" ? { index: t } : t;\n return e.align || (e.align = \"start\"), (!e.behavior || !$o) && (e.behavior = \"auto\"), e.offset === void 0 && (e.offset = 0), e;\n}\nconst fe = j(\n ([\n { gap: t, listRefresh: e, sizes: n, totalCount: o },\n {\n fixedFooterHeight: r,\n fixedHeaderHeight: s,\n footerHeight: i,\n headerHeight: l,\n scrollingInProgress: c,\n scrollTo: d,\n smoothScrollTargetReached: m,\n viewportHeight: v\n },\n { log: p }\n ]) => {\n const I = U(), w = U(), R = T(0);\n let h = null, f = null, a = null;\n function S() {\n h !== null && (h(), h = null), a !== null && (a(), a = null), f && (clearTimeout(f), f = null), _(c, !1);\n }\n return k(\n x(\n I,\n $(n, v, o, R, l, i, p),\n $(t, s, r),\n B(\n ([\n [H, y, O, u, g, C, z, L],\n V,\n N,\n Z\n ]) => {\n const F = Xn(H), { align: mt, behavior: q, offset: Q } = F, gt = u - 1, ut = Yn(F, y, gt);\n let St = ce(ut, y.offsetTree, V) + C;\n mt === \"end\" ? (St += N + Rt(y.sizeTree, ut)[1] - O + Z, ut === gt && (St += z)) : mt === \"center\" ? St += (N + Rt(y.sizeTree, ut)[1] - O + Z) / 2 : St -= g, Q !== void 0 && Q !== 0 && (St += Q);\n const Ft = (pt) => {\n S(), pt ? (L(\"retrying to scroll to\", { location: H }, ft.DEBUG), _(I, H)) : (_(w, !0), L(\"list did not change, scroll successful\", {}, ft.DEBUG));\n };\n if (S(), q === \"smooth\") {\n let pt = !1;\n a = Y(e, (jt) => {\n pt = pt || jt;\n }), h = yt(m, () => {\n Ft(pt);\n });\n } else\n h = yt(x(e, Uo(150)), Ft);\n return f = setTimeout(() => {\n S();\n }, 1200), _(c, !0), L(\"scrolling from index to\", { behavior: q, index: ut, top: St }, ft.DEBUG), { behavior: q, top: St };\n }\n )\n ),\n d\n ), {\n scrollTargetReached: w,\n scrollToIndex: I,\n topListHeight: R\n };\n },\n rt(kt, It, Gt),\n { singleton: !0 }\n);\nfunction Uo(t) {\n return (e) => {\n const n = setTimeout(() => {\n e(!1);\n }, t);\n return (o) => {\n o && (e(!0), clearTimeout(n));\n };\n };\n}\nfunction je(t, e) {\n t === 0 ? e() : requestAnimationFrame(() => {\n je(t - 1, e);\n });\n}\nfunction qe(t, e) {\n const n = e - 1;\n return typeof t == \"number\" ? t : t.index === \"LAST\" ? n : t.index;\n}\nconst me = j(\n ([{ defaultItemSize: t, listRefresh: e, sizes: n }, { scrollTop: o }, { scrollTargetReached: r, scrollToIndex: s }, { didMount: i }]) => {\n const l = T(!0), c = T(0), d = T(!0);\n return k(\n x(\n i,\n $(c),\n P(([m, v]) => v !== 0),\n Bt(!1)\n ),\n l\n ), k(\n x(\n i,\n $(c),\n P(([m, v]) => v !== 0),\n Bt(!1)\n ),\n d\n ), Y(\n x(\n at(e, i),\n $(l, n, t, d),\n P(([[, m], v, { sizeTree: p }, I, w]) => m && (!J(p) || _e(I)) && !v && !w),\n $(c)\n ),\n ([, m]) => {\n yt(r, () => {\n _(d, !0);\n }), je(4, () => {\n yt(o, () => {\n _(l, !0);\n }), _(s, m);\n });\n }\n ), {\n initialItemFinalLocationReached: d,\n initialTopMostItemIndex: c,\n scrolledToInitialItem: l\n };\n },\n rt(kt, It, fe, At),\n { singleton: !0 }\n);\nfunction Jn(t, e) {\n return Math.abs(t - e) < 1.01;\n}\nconst ue = \"up\", ne = \"down\", Ko = \"none\", jo = {\n atBottom: !1,\n notAtBottomBecause: \"NOT_SHOWING_LAST_ITEM\",\n state: {\n offsetBottom: 0,\n scrollHeight: 0,\n scrollTop: 0,\n viewportHeight: 0\n }\n}, qo = 0, pe = j(([{ footerHeight: t, headerHeight: e, scrollBy: n, scrollContainerState: o, scrollTop: r, viewportHeight: s }]) => {\n const i = T(!1), l = T(!0), c = U(), d = U(), m = T(4), v = T(qo), p = ht(\n x(\n Fe(x(W(r), Ut(1), Bt(!0)), x(W(r), Ut(1), Bt(!1), pn(100))),\n nt()\n ),\n !1\n ), I = ht(\n x(Fe(x(n, Bt(!0)), x(n, Bt(!1), pn(200))), nt()),\n !1\n );\n k(\n x(\n at(W(r), W(v)),\n B(([a, S]) => a <= S),\n nt()\n ),\n l\n ), k(x(l, zt(50)), d);\n const w = Tt(\n x(\n at(o, W(s), W(e), W(t), W(m)),\n Lt((a, [{ scrollHeight: S, scrollTop: H }, y, O, u, g]) => {\n const C = H + y - S > -g, z = {\n scrollHeight: S,\n scrollTop: H,\n viewportHeight: y\n };\n if (C) {\n let V, N;\n return H > a.state.scrollTop ? (V = \"SCROLLED_DOWN\", N = a.state.scrollTop - H) : (V = \"SIZE_DECREASED\", N = a.state.scrollTop - H || a.scrollTopDelta), {\n atBottom: !0,\n atBottomBecause: V,\n scrollTopDelta: N,\n state: z\n };\n }\n let L;\n return z.scrollHeight > a.state.scrollHeight ? L = \"SIZE_INCREASED\" : y < a.state.viewportHeight ? L = \"VIEWPORT_HEIGHT_DECREASING\" : H < a.state.scrollTop ? L = \"SCROLLING_UPWARDS\" : L = \"NOT_FULLY_SCROLLED_TO_LAST_ITEM_BOTTOM\", {\n atBottom: !1,\n notAtBottomBecause: L,\n state: z\n };\n }, jo),\n nt((a, S) => a !== void 0 && a.atBottom === S.atBottom)\n )\n ), R = ht(\n x(\n o,\n Lt(\n (a, { scrollHeight: S, scrollTop: H, viewportHeight: y }) => {\n if (!Jn(a.scrollHeight, S)) {\n const O = S - (H + y) < 1;\n return a.scrollTop !== H && O ? {\n changed: !0,\n jump: a.scrollTop - H,\n scrollHeight: S,\n scrollTop: H\n } : {\n changed: !0,\n jump: 0,\n scrollHeight: S,\n scrollTop: H\n };\n }\n return {\n changed: !1,\n jump: 0,\n scrollHeight: S,\n scrollTop: H\n };\n },\n { changed: !1, jump: 0, scrollHeight: 0, scrollTop: 0 }\n ),\n P((a) => a.changed),\n B((a) => a.jump)\n ),\n 0\n );\n k(\n x(\n w,\n B((a) => a.atBottom)\n ),\n i\n ), k(x(i, zt(50)), c);\n const h = T(ne);\n k(\n x(\n o,\n B(({ scrollTop: a }) => a),\n nt(),\n Lt(\n (a, S) => it(I) ? { direction: a.direction, prevScrollTop: S } : { direction: S < a.prevScrollTop ? ue : ne, prevScrollTop: S },\n { direction: ne, prevScrollTop: 0 }\n ),\n B((a) => a.direction)\n ),\n h\n ), k(x(o, zt(50), Bt(Ko)), h);\n const f = T(0);\n return k(\n x(\n p,\n P((a) => !a),\n Bt(0)\n ),\n f\n ), k(\n x(\n r,\n zt(100),\n $(p),\n P(([a, S]) => S),\n Lt(([a, S], [H]) => [S, H], [0, 0]),\n B(([a, S]) => S - a)\n ),\n f\n ), {\n atBottomState: w,\n atBottomStateChange: c,\n atBottomThreshold: m,\n atTopStateChange: d,\n atTopThreshold: v,\n isAtBottom: i,\n isAtTop: l,\n isScrolling: p,\n lastJumpDueToItemResize: R,\n scrollDirection: h,\n scrollVelocity: f\n };\n}, rt(It)), ae = \"top\", de = \"bottom\", vn = \"none\";\nfunction Tn(t, e, n) {\n return typeof t == \"number\" ? n === ue && e === ae || n === ne && e === de ? t : 0 : n === ue ? e === ae ? t.main : t.reverse : e === de ? t.main : t.reverse;\n}\nfunction Cn(t, e) {\n return typeof t == \"number\" ? t : t[e] ?? 0;\n}\nconst Ye = j(\n ([{ deviation: t, fixedHeaderHeight: e, headerHeight: n, scrollTop: o, viewportHeight: r }]) => {\n const s = U(), i = T(0), l = T(0), c = T(0), d = ht(\n x(\n at(\n W(o),\n W(r),\n W(n),\n W(s, le),\n W(c),\n W(i),\n W(e),\n W(t),\n W(l)\n ),\n B(\n ([\n m,\n v,\n p,\n [I, w],\n R,\n h,\n f,\n a,\n S\n ]) => {\n const H = m - a, y = h + f, O = Math.max(p - H, 0);\n let u = vn;\n const g = Cn(S, ae), C = Cn(S, de);\n return I -= a, I += p + f, w += p + f, w -= a, I > m + y - g && (u = ue), w < m - O + v + C && (u = ne), u !== vn ? [\n Math.max(H - p - Tn(R, ae, u) - g, 0),\n H - O - f + v + Tn(R, de, u) + C\n ] : null;\n }\n ),\n P((m) => m !== null),\n nt(le)\n ),\n [0, 0]\n );\n return {\n increaseViewportBy: l,\n // input\n listBoundary: s,\n overscan: c,\n topListHeight: i,\n // output\n visibleRange: d\n };\n },\n rt(It),\n { singleton: !0 }\n);\nfunction Yo(t, e, n) {\n if (be(e)) {\n const o = qn(t, e);\n return [\n { index: Rt(e.groupOffsetTree, o)[0], offset: 0, size: 0 },\n { data: n?.[0], index: o, offset: 0, size: 0 }\n ];\n }\n return [{ data: n?.[0], index: t, offset: 0, size: 0 }];\n}\nconst Le = {\n bottom: 0,\n firstItemIndex: 0,\n items: [],\n offsetBottom: 0,\n offsetTop: 0,\n top: 0,\n topItems: [],\n topListHeight: 0,\n totalCount: 0\n};\nfunction ve(t, e, n, o, r, s) {\n const { lastIndex: i, lastOffset: l, lastSize: c } = r;\n let d = 0, m = 0;\n if (t.length > 0) {\n d = t[0].offset;\n const R = t[t.length - 1];\n m = R.offset + R.size;\n }\n const v = n - i, p = l + v * c + (v - 1) * o, I = d, w = p - m;\n return {\n bottom: m,\n firstItemIndex: s,\n items: wn(t, r, s),\n offsetBottom: w,\n offsetTop: d,\n top: I,\n topItems: wn(e, r, s),\n topListHeight: e.reduce((R, h) => h.size + R, 0),\n totalCount: n\n };\n}\nfunction Qn(t, e, n, o, r, s) {\n let i = 0;\n if (n.groupIndices.length > 0)\n for (const m of n.groupIndices) {\n if (m - i >= t)\n break;\n i++;\n }\n const l = t + i, c = qe(e, l), d = Array.from({ length: l }).map((m, v) => ({\n data: s[v + c],\n index: v + c,\n offset: 0,\n size: 0\n }));\n return ve(d, [], l, r, n, o);\n}\nfunction wn(t, e, n) {\n if (t.length === 0)\n return [];\n if (!be(e))\n return t.map((d) => ({ ...d, index: d.index + n, originalIndex: d.index }));\n const o = t[0].index, r = t[t.length - 1].index, s = [], i = Zt(e.groupOffsetTree, o, r);\n let l, c = 0;\n for (const d of t) {\n (!l || l.end < d.index) && (l = i.shift(), c = e.groupIndices.indexOf(l.start));\n let m;\n d.index === l.start ? m = {\n index: c,\n type: \"group\"\n } : m = {\n groupIndex: c,\n index: d.index - (c + 1) + n\n }, s.push({\n ...m,\n data: d.data,\n offset: d.offset,\n originalIndex: d.index,\n size: d.size\n });\n }\n return s;\n}\nfunction yn(t, e) {\n return t === void 0 ? 0 : typeof t == \"number\" ? t : t[e] ?? 0;\n}\nconst Kt = j(\n ([\n { data: t, firstItemIndex: e, gap: n, sizes: o, totalCount: r },\n s,\n { listBoundary: i, topListHeight: l, visibleRange: c },\n { initialTopMostItemIndex: d, scrolledToInitialItem: m },\n { topListHeight: v },\n p,\n { didMount: I },\n { recalcInProgress: w }\n ]) => {\n const R = T([]), h = T(0), f = U(), a = T(0);\n k(s.topItemsIndexes, R);\n const S = ht(\n x(\n at(\n I,\n w,\n W(c, le),\n W(r),\n W(o),\n W(d),\n m,\n W(R),\n W(e),\n W(n),\n W(a),\n t\n ),\n P(([u, g, , C, , , , , , , , z]) => {\n const L = z !== void 0 && z.length !== C;\n return u && !g && !L;\n }),\n B(\n ([\n ,\n ,\n [u, g],\n C,\n z,\n L,\n V,\n N,\n Z,\n F,\n mt,\n q\n ]) => {\n const Q = z, { offsetTree: gt, sizeTree: ut } = Q, St = it(h);\n if (C === 0)\n return { ...Le, totalCount: C };\n if (u === 0 && g === 0)\n return St === 0 ? { ...Le, totalCount: C } : Qn(St, L, z, Z, F, q || []);\n if (J(ut))\n return St > 0 ? null : ve(\n Yo(qe(L, C), Q, q),\n [],\n C,\n F,\n Q,\n Z\n );\n const Ft = [];\n if (N.length > 0) {\n const D = N[0], K = N[N.length - 1];\n let st = 0;\n for (const tt of Zt(ut, D, K)) {\n const X = tt.value, lt = Math.max(tt.start, D), xt = Math.min(tt.end, K);\n for (let ct = lt; ct <= xt; ct++)\n Ft.push({ data: q?.[ct], index: ct, offset: st, size: X }), st += X;\n }\n }\n if (!V)\n return ve([], Ft, C, F, Q, Z);\n const pt = N.length > 0 ? N[N.length - 1] + 1 : 0, jt = Po(gt, u, g, pt);\n if (jt.length === 0)\n return null;\n const Qt = C - 1, Et = ye([], (D) => {\n for (const K of jt) {\n const st = K.value;\n let tt = st.offset, X = K.start;\n const lt = st.size;\n if (st.offset < u) {\n X += Math.floor((u - st.offset + F) / (lt + F));\n const ct = X - K.start;\n tt += ct * lt + ct * F;\n }\n X < pt && (tt += (pt - X) * lt, X = pt);\n const xt = Math.min(K.end, Qt);\n for (let ct = X; ct <= xt && !(tt >= g); ct++)\n D.push({ data: q?.[ct], index: ct, offset: tt, size: lt }), tt += lt + F;\n }\n }), te = yn(mt, ae), b = yn(mt, de);\n if (Et.length > 0 && (te > 0 || b > 0)) {\n const D = Et[0], K = Et[Et.length - 1];\n if (te > 0 && D.index > pt) {\n const st = Math.min(te, D.index - pt), tt = [];\n let X = D.offset;\n for (let lt = D.index - 1; lt >= D.index - st; lt--) {\n const ct = Zt(ut, lt, lt)[0]?.value ?? D.size;\n X -= ct + F, tt.unshift({ data: q?.[lt], index: lt, offset: X, size: ct });\n }\n Et.unshift(...tt);\n }\n if (b > 0 && K.index < Qt) {\n const st = Math.min(b, Qt - K.index);\n let tt = K.offset + K.size + F;\n for (let X = K.index + 1; X <= K.index + st; X++) {\n const xt = Zt(ut, X, X)[0]?.value ?? K.size;\n Et.push({ data: q?.[X], index: X, offset: tt, size: xt }), tt += xt + F;\n }\n }\n }\n return ve(Et, Ft, C, F, Q, Z);\n }\n ),\n //@ts-expect-error filter needs to be fixed\n P((u) => u !== null),\n nt()\n ),\n Le\n );\n k(\n x(\n t,\n P(_e),\n B((u) => u?.length)\n ),\n r\n ), k(\n x(\n S,\n B((u) => u.topListHeight)\n ),\n v\n ), k(v, l), k(\n x(\n S,\n B((u) => [u.top, u.bottom])\n ),\n i\n ), k(\n x(\n S,\n B((u) => u.items)\n ),\n f\n );\n const H = Tt(\n x(\n S,\n P(({ items: u }) => u.length > 0),\n $(r, t),\n P(([{ items: u }, g]) => u[u.length - 1].originalIndex === g - 1),\n B(([, u, g]) => [u - 1, g]),\n nt(le),\n B(([u]) => u)\n )\n ), y = Tt(\n x(\n S,\n zt(200),\n P(({ items: u, topItems: g }) => u.length > 0 && u[0].originalIndex === g.length),\n B(({ items: u }) => u[0].index),\n nt()\n )\n ), O = Tt(\n x(\n S,\n P(({ items: u }) => u.length > 0),\n B(({ items: u }) => {\n let g = 0, C = u.length - 1;\n for (; u[g].type === \"group\" && g < C; )\n g++;\n for (; u[C].type === \"group\" && C > g; )\n C--;\n return {\n endIndex: u[C].index,\n startIndex: u[g].index\n };\n }),\n nt(Kn)\n )\n );\n return {\n endReached: H,\n initialItemCount: h,\n itemsRendered: f,\n listState: S,\n minOverscanItemCount: a,\n rangeChanged: O,\n startReached: y,\n topItemsIndexes: R,\n ...p\n };\n },\n rt(\n kt,\n Zn,\n Ye,\n me,\n fe,\n pe,\n At,\n Ue\n ),\n { singleton: !0 }\n), to = j(\n ([{ fixedFooterHeight: t, fixedHeaderHeight: e, footerHeight: n, headerHeight: o }, { listState: r }]) => {\n const s = U(), i = ht(\n x(\n at(n, t, o, e, r),\n B(([l, c, d, m, v]) => l + c + d + m + v.offsetBottom + v.bottom)\n ),\n 0\n );\n return k(W(i), s), { totalListHeight: i, totalListHeightChanged: s };\n },\n rt(It, Kt),\n { singleton: !0 }\n), Zo = j(\n ([{ viewportHeight: t }, { totalListHeight: e }]) => {\n const n = T(!1), o = ht(\n x(\n at(n, t, e),\n P(([r]) => r),\n B(([, r, s]) => Math.max(0, r - s)),\n zt(0),\n nt()\n ),\n 0\n );\n return { alignToBottom: n, paddingTopAddition: o };\n },\n rt(It, to),\n { singleton: !0 }\n), eo = j(() => ({\n context: T(null)\n})), Xo = ({\n itemBottom: t,\n itemTop: e,\n locationParams: { align: n, behavior: o, ...r },\n viewportBottom: s,\n viewportTop: i\n}) => e < i ? { ...r, align: n ?? \"start\", ...o !== void 0 ? { behavior: o } : {} } : t > s ? { ...r, align: n ?? \"end\", ...o !== void 0 ? { behavior: o } : {} } : null, no = j(\n ([\n { gap: t, sizes: e, totalCount: n },\n { fixedFooterHeight: o, fixedHeaderHeight: r, headerHeight: s, scrollingInProgress: i, scrollTop: l, viewportHeight: c },\n { scrollToIndex: d }\n ]) => {\n const m = U();\n return k(\n x(\n m,\n $(e, c, n, s, r, o, l),\n $(t),\n B(([[v, p, I, w, R, h, f, a], S]) => {\n const { calculateViewLocation: H = Xo, done: y, ...O } = v, u = Yn(v, p, w - 1), g = ce(u, p.offsetTree, S) + R + h, C = g + Rt(p.sizeTree, u)[1], z = a + h, L = a + I - f, V = H({\n itemBottom: C,\n itemTop: g,\n locationParams: O,\n viewportBottom: L,\n viewportTop: z\n });\n return V !== null ? y && yt(\n x(\n i,\n P((N) => !N),\n // skips the initial publish of false, and the cleanup call.\n // but if scrollingInProgress is true, we skip the initial publish.\n Ut(it(i) ? 1 : 2)\n ),\n y\n ) : y?.(), V;\n }),\n P((v) => v !== null)\n ),\n d\n ), {\n scrollIntoView: m\n };\n },\n rt(kt, It, fe, Kt, Gt),\n { singleton: !0 }\n);\nfunction bn(t) {\n return t === !1 ? !1 : t === \"smooth\" ? \"smooth\" : \"auto\";\n}\nconst Jo = (t, e) => typeof t == \"function\" ? bn(t(e)) : e && bn(t), Qo = j(\n ([\n { listRefresh: t, totalCount: e, fixedItemSize: n, data: o },\n { atBottomState: r, isAtBottom: s },\n { scrollToIndex: i },\n { scrolledToInitialItem: l },\n { didMount: c, propsReady: d },\n { log: m },\n { scrollingInProgress: v },\n { context: p },\n { scrollIntoView: I }\n ]) => {\n const w = T(!1), R = U();\n let h = null;\n function f(y) {\n _(i, {\n align: \"end\",\n behavior: y,\n index: \"LAST\"\n });\n }\n Y(\n x(\n at(x(W(e), Ut(1)), c),\n $(W(w), s, l, v),\n B(([[y, O], u, g, C, z]) => {\n let L = O && C, V = \"auto\";\n return L && (V = Jo(u, g || z), L = L && V !== !1), { followOutputBehavior: V, shouldFollow: L, totalCount: y };\n }),\n P(({ shouldFollow: y }) => y)\n ),\n ({ followOutputBehavior: y, totalCount: O }) => {\n h !== null && (h(), h = null), it(n) !== void 0 ? requestAnimationFrame(() => {\n it(m)(\"following output to \", { totalCount: O }, ft.DEBUG), f(y);\n }) : h = yt(t, () => {\n it(m)(\"following output to \", { totalCount: O }, ft.DEBUG), f(y), h = null;\n });\n }\n );\n function a(y) {\n const O = yt(r, (u) => {\n y && !u.atBottom && u.notAtBottomBecause === \"SIZE_INCREASED\" && h === null && (it(m)(\"scrolling to bottom due to increased size\", {}, ft.DEBUG), f(\"auto\"));\n });\n setTimeout(O, 100);\n }\n Y(\n x(\n at(W(w), e, d),\n P(([y, , O]) => y !== !1 && O),\n Lt(\n ({ value: y }, [, O]) => ({ refreshed: y === O, value: O }),\n { refreshed: !1, value: 0 }\n ),\n P(({ refreshed: y }) => y),\n $(w, e)\n ),\n ([, y]) => {\n it(l) && a(y !== !1);\n }\n ), Y(R, () => {\n a(it(w) !== !1);\n }), Y(at(W(w), r), ([y, O]) => {\n y !== !1 && !O.atBottom && O.notAtBottomBecause === \"VIEWPORT_HEIGHT_DECREASING\" && f(\"auto\");\n });\n const S = T(null), H = U();\n return k(\n Fe(\n x(\n W(o),\n B((y) => y?.length ?? 0)\n ),\n x(W(e))\n ),\n H\n ), Y(\n x(\n at(x(H, Ut(1)), c),\n $(W(S), l, v, p),\n B(([[y, O], u, g, C, z]) => O && g && u?.({ context: z, totalCount: y, scrollingInProgress: C })),\n P((y) => !!y),\n zt(0)\n ),\n (y) => {\n h !== null && (h(), h = null), it(n) !== void 0 ? requestAnimationFrame(() => {\n it(m)(\"scrolling into view\", {}), _(I, y);\n }) : h = yt(t, () => {\n it(m)(\"scrolling into view\", {}), _(I, y), h = null;\n });\n }\n ), { autoscrollToBottom: R, followOutput: w, scrollIntoViewOnChange: S };\n },\n rt(\n kt,\n pe,\n fe,\n me,\n At,\n Gt,\n It,\n eo,\n no\n )\n), tr = j(\n ([{ data: t, firstItemIndex: e, gap: n, sizes: o }, { initialTopMostItemIndex: r }, { initialItemCount: s, listState: i }, { didMount: l }]) => (k(\n x(\n l,\n $(s),\n P(([, c]) => c !== 0),\n $(r, o, e, n, t),\n B(([[, c], d, m, v, p, I = []]) => Qn(c, d, m, v, p, I))\n ),\n i\n ), {}),\n rt(kt, me, Kt, At),\n { singleton: !0 }\n), er = j(\n ([{ didMount: t }, { scrollTo: e }, { listState: n }]) => {\n const o = T(0);\n return Y(\n x(\n t,\n $(o),\n P(([, r]) => r !== 0),\n B(([, r]) => ({ top: r }))\n ),\n (r) => {\n yt(\n x(\n n,\n Ut(1),\n P((s) => s.items.length > 1)\n ),\n () => {\n requestAnimationFrame(() => {\n _(e, r);\n });\n }\n );\n }\n ), {\n initialScrollTop: o\n };\n },\n rt(At, It, Kt),\n { singleton: !0 }\n), oo = j(\n ([{ scrollVelocity: t }]) => {\n const e = T(!1), n = U(), o = T(!1);\n return k(\n x(\n t,\n $(o, e, n),\n P(([r, s]) => s !== !1 && s !== void 0),\n B(([r, s, i, l]) => {\n const { enter: c, exit: d } = s;\n if (i) {\n if (d(r, l))\n return !1;\n } else if (c(r, l))\n return !0;\n return i;\n }),\n nt()\n ),\n e\n ), Y(\n x(at(e, t, n), $(o)),\n ([[r, s, i], l]) => {\n r && l !== !1 && l !== void 0 && l.change && l.change(s, i);\n }\n ), { isSeeking: e, scrollSeekConfiguration: o, scrollSeekRangeChanged: n, scrollVelocity: t };\n },\n rt(pe),\n { singleton: !0 }\n), Ze = j(([{ scrollContainerState: t, scrollTo: e }]) => {\n const n = U(), o = U(), r = U(), s = T(!1), i = T(void 0);\n return k(\n x(\n at(n, o),\n B(([{ scrollTop: l, viewportHeight: c }, { offsetTop: d, listHeight: m }]) => ({\n scrollHeight: m,\n scrollTop: Math.max(0, l - d),\n viewportHeight: c\n }))\n ),\n t\n ), k(\n x(\n e,\n $(o),\n B(([l, { offsetTop: c }]) => ({\n ...l,\n top: l.top + c\n }))\n ),\n r\n ), {\n customScrollParent: i,\n // config\n useWindowScroll: s,\n // input\n windowScrollContainerState: n,\n // signals\n windowScrollTo: r,\n windowViewportRect: o\n };\n}, rt(It)), nr = j(\n ([\n { sizeRanges: t, sizes: e },\n { headerHeight: n, scrollTop: o },\n { initialTopMostItemIndex: r },\n { didMount: s },\n { useWindowScroll: i, windowScrollContainerState: l, windowViewportRect: c }\n ]) => {\n const d = U(), m = T(void 0), v = T(null), p = T(null);\n return k(l, v), k(c, p), Y(\n x(\n d,\n $(e, o, i, v, p, n)\n ),\n ([I, w, R, h, f, a, S]) => {\n const H = Ao(w.sizeTree);\n h && f !== null && a !== null && (R = f.scrollTop - a.offsetTop), R -= S, I({ ranges: H, scrollTop: R });\n }\n ), k(x(m, P(_e), B(or)), r), k(\n x(\n s,\n $(m),\n P(([, I]) => I !== void 0),\n nt(),\n B(([, I]) => I.ranges)\n ),\n t\n ), {\n getState: d,\n restoreStateFrom: m\n };\n },\n rt(kt, It, me, At, Ze)\n);\nfunction or(t) {\n return { align: \"start\", index: 0, offset: t.scrollTop };\n}\nconst rr = j(([{ topItemsIndexes: t }]) => {\n const e = T(0);\n return k(\n x(\n e,\n P((n) => n >= 0),\n B((n) => Array.from({ length: n }).map((o, r) => r))\n ),\n t\n ), { topItemCount: e };\n}, rt(Kt));\nfunction ro(t) {\n let e = !1, n;\n return (() => (e || (e = !0, n = t()), n));\n}\nconst sr = ro(() => /iP(ad|od|hone)/i.test(navigator.userAgent) && /WebKit/i.test(navigator.userAgent)), ir = j(\n ([\n { deviation: t, scrollBy: e, scrollingInProgress: n, scrollTop: o },\n { isAtBottom: r, isScrolling: s, lastJumpDueToItemResize: i, scrollDirection: l },\n { listState: c },\n { beforeUnshiftWith: d, gap: m, shiftWithOffset: v, sizes: p },\n { log: I },\n { recalcInProgress: w }\n ]) => {\n const R = Tt(\n x(\n c,\n $(i),\n Lt(\n ([, f, a, S], [{ bottom: H, items: y, offsetBottom: O, totalCount: u }, g]) => {\n const C = H + O;\n let z = 0;\n return a === u && f.length > 0 && y.length > 0 && (y[0].originalIndex === 0 && f[0].originalIndex === 0 || (z = C - S, z !== 0 && (z += g))), [z, y, u, C];\n },\n [0, [], 0, 0]\n ),\n P(([f]) => f !== 0),\n $(o, l, n, r, I, w),\n P(([, f, a, S, , , H]) => !H && !S && f !== 0 && a === ue),\n B(([[f], , , , , a]) => (a(\"Upward scrolling compensation\", { amount: f }, ft.DEBUG), f))\n )\n );\n function h(f) {\n f > 0 ? (_(e, { behavior: \"auto\", top: -f }), _(t, 0)) : (_(t, 0), _(e, { behavior: \"auto\", top: -f }));\n }\n return Y(x(R, $(t, s)), ([f, a, S]) => {\n S && sr() ? _(t, a - f) : h(-f);\n }), Y(\n x(\n at(ht(s, !1), t, w),\n P(([f, a, S]) => !f && !S && a !== 0),\n B(([f, a]) => a),\n zt(1)\n ),\n h\n ), k(\n x(\n v,\n B((f) => ({ top: -f }))\n ),\n e\n ), Y(\n x(\n d,\n $(p, m),\n B(([f, { groupIndices: a, lastSize: S, sizeTree: H }, y]) => {\n function O(L) {\n return L * (S + y);\n }\n if (a.length === 0)\n return O(f);\n let u = 0;\n const g = ie(H, 0);\n let C = 0, z = 0;\n for (; C < f; ) {\n C++, u += g;\n let L = a.length === z + 1 ? 1 / 0 : a[z + 1] - a[z] - 1;\n C + L > f && (u -= g, L = f - C + 1), C += L, u += O(L), z++;\n }\n return u;\n })\n ),\n (f) => {\n _(t, f), requestAnimationFrame(() => {\n _(e, { top: f }), requestAnimationFrame(() => {\n _(t, 0), _(w, !1);\n });\n });\n }\n ), { deviation: t };\n },\n rt(It, pe, Kt, kt, Gt, Ue)\n), lr = j(\n ([\n t,\n e,\n n,\n o,\n r,\n s,\n i,\n l,\n c,\n d,\n m\n ]) => ({\n ...t,\n ...e,\n ...n,\n ...o,\n ...r,\n ...s,\n ...i,\n ...l,\n ...c,\n ...d,\n ...m\n }),\n rt(\n Ye,\n tr,\n At,\n oo,\n to,\n er,\n Zo,\n Ze,\n no,\n Gt,\n eo\n )\n), so = j(\n ([\n {\n data: t,\n defaultItemSize: e,\n firstItemIndex: n,\n fixedItemSize: o,\n fixedGroupSize: r,\n gap: s,\n groupIndices: i,\n heightEstimates: l,\n itemSize: c,\n sizeRanges: d,\n sizes: m,\n statefulTotalCount: v,\n totalCount: p,\n trackItemSizes: I\n },\n { initialItemFinalLocationReached: w, initialTopMostItemIndex: R, scrolledToInitialItem: h },\n f,\n a,\n S,\n H,\n { scrollToIndex: y },\n O,\n { topItemCount: u },\n { groupCounts: g },\n C\n ]) => {\n const { listState: z, minOverscanItemCount: L, topItemsIndexes: V, rangeChanged: N, ...Z } = H;\n return k(N, C.scrollSeekRangeChanged), k(\n x(\n C.windowViewportRect,\n B((F) => F.visibleHeight)\n ),\n f.viewportHeight\n ), {\n data: t,\n defaultItemHeight: e,\n firstItemIndex: n,\n fixedItemHeight: o,\n fixedGroupHeight: r,\n gap: s,\n groupCounts: g,\n heightEstimates: l,\n initialItemFinalLocationReached: w,\n initialTopMostItemIndex: R,\n scrolledToInitialItem: h,\n sizeRanges: d,\n topItemCount: u,\n topItemsIndexes: V,\n // input\n totalCount: p,\n ...S,\n groupIndices: i,\n itemSize: c,\n listState: z,\n minOverscanItemCount: L,\n scrollToIndex: y,\n // output\n statefulTotalCount: v,\n trackItemSizes: I,\n // exported from stateFlagsSystem\n rangeChanged: N,\n ...Z,\n // the bag of IO from featureGroup1System\n ...C,\n ...f,\n sizes: m,\n ...a\n };\n },\n rt(\n kt,\n me,\n It,\n nr,\n Qo,\n Kt,\n fe,\n ir,\n rr,\n Zn,\n lr\n )\n);\nfunction cr(t, e) {\n const n = {}, o = {};\n let r = 0;\n const s = t.length;\n for (; r < s; )\n o[t[r]] = 1, r += 1;\n for (const i in e)\n Object.hasOwn(o, i) || (n[i] = e[i]);\n return n;\n}\nconst Ie = typeof document < \"u\" ? E.useLayoutEffect : E.useEffect;\nfunction Xe(t, e, n) {\n const o = Object.keys(e.required || {}), r = Object.keys(e.optional || {}), s = Object.keys(e.methods || {}), i = Object.keys(e.events || {}), l = E.createContext({});\n function c(f, a) {\n f.propsReady !== void 0 && _(f.propsReady, !1);\n for (const S of o) {\n const H = f[e.required[S]];\n _(H, a[S]);\n }\n for (const S of r)\n if (S in a) {\n const H = f[e.optional[S]];\n _(H, a[S]);\n }\n f.propsReady !== void 0 && _(f.propsReady, !0);\n }\n function d(f) {\n return s.reduce((a, S) => (a[S] = (H) => {\n const y = f[e.methods[S]];\n _(y, H);\n }, a), {});\n }\n function m(f) {\n return i.reduce((a, S) => (a[S] = yo(f[e.events[S]]), a), {});\n }\n const v = E.forwardRef(function(a, S) {\n const { children: H, ...y } = a, [O] = E.useState(() => ye(Ro(t), (C) => {\n c(C, y);\n })), [u] = E.useState(mn(m, O));\n Ie(() => {\n for (const C of i)\n C in y && Y(u[C], y[C]);\n return () => {\n Object.values(u).map(Ne);\n };\n }, [y, u, O]), Ie(() => {\n c(O, y);\n }), E.useImperativeHandle(S, fn(d(O)));\n const g = n;\n return /* @__PURE__ */ G(l.Provider, { value: O, children: n !== void 0 ? /* @__PURE__ */ G(g, { ...cr([...o, ...r, ...i], y), children: H }) : H });\n }), p = (f) => {\n const a = E.useContext(l);\n return E.useCallback(\n (S) => {\n _(a[f], S);\n },\n [a, f]\n );\n }, I = (f) => {\n const S = E.useContext(l)[f], H = E.useCallback(\n (y) => Y(S, y),\n [S]\n );\n return E.useSyncExternalStore(\n H,\n () => it(S),\n () => it(S)\n );\n }, w = (f) => {\n const S = E.useContext(l)[f], [H, y] = E.useState(mn(it, S));\n return Ie(\n () => Y(S, (O) => {\n O !== H && y(fn(O));\n }),\n [S, H]\n ), H;\n }, R = parseInt(E.version) >= 18 ? I : w;\n return {\n Component: v,\n useEmitter: (f, a) => {\n const H = E.useContext(l)[f];\n Ie(() => Y(H, a), [a, H]);\n },\n useEmitterValue: R,\n usePublisher: p\n };\n}\nconst Re = E.createContext(void 0), io = E.createContext(void 0), Oe = \"-webkit-sticky\", Rn = \"sticky\", Je = ro(() => {\n if (typeof document > \"u\")\n return Rn;\n const t = document.createElement(\"div\");\n return t.style.position = Oe, t.style.position === Oe ? Oe : Rn;\n}), lo = typeof document < \"u\" ? E.useLayoutEffect : E.useEffect;\nfunction ke(t) {\n return \"self\" in t;\n}\nfunction ur(t) {\n return \"body\" in t;\n}\nfunction co(t, e, n, o = Jt, r, s) {\n const i = E.useRef(null), l = E.useRef(null), c = E.useRef(null), d = E.useCallback(\n (p) => {\n let I, w, R;\n const h = p.target;\n if (ur(h) || ke(h)) {\n const a = ke(h) ? h : h.defaultView;\n R = s === !0 ? _t(a, a.scrollX) : a.scrollY, I = s === !0 ? a.document.documentElement.scrollWidth : a.document.documentElement.scrollHeight, w = s === !0 ? a.innerWidth : a.innerHeight;\n } else\n R = s === !0 ? _t(h, h.scrollLeft) : h.scrollTop, I = s === !0 ? h.scrollWidth : h.scrollHeight, w = s === !0 ? h.offsetWidth : h.offsetHeight;\n const f = () => {\n t({\n scrollHeight: I,\n scrollTop: Math.max(R, 0),\n viewportHeight: w\n });\n };\n p.suppressFlushSync === !0 ? f() : So.flushSync(f), l.current !== null && (R === l.current || R <= 0 || R === I - w) && (l.current = null, e(!0), c.current && (clearTimeout(c.current), c.current = null));\n },\n [t, e, s]\n );\n E.useEffect(() => {\n const p = r || i.current;\n return hn(p), o(r || i.current), d({ suppressFlushSync: !0, target: p }), p.addEventListener(\"scroll\", d, { passive: !0 }), () => {\n hn(p), o(null), p.removeEventListener(\"scroll\", d);\n };\n }, [i, d, n, o, r]);\n function m(p) {\n const I = i.current;\n if (!I || (s === !0 ? \"offsetWidth\" in I && I.offsetWidth === 0 : \"offsetHeight\" in I && I.offsetHeight === 0))\n return;\n const w = p.behavior === \"smooth\";\n let R, h, f;\n ke(I) ? (h = Math.max(\n Ht(I.document.documentElement, s === !0 ? \"width\" : \"height\"),\n s === !0 ? I.document.documentElement.scrollWidth : I.document.documentElement.scrollHeight\n ), R = s === !0 ? I.innerWidth : I.innerHeight, f = s === !0 ? _t(I, I.scrollX) : I.scrollY) : (h = I[s === !0 ? \"scrollWidth\" : \"scrollHeight\"], R = Ht(I, s === !0 ? \"width\" : \"height\"), f = s === !0 ? _t(I, I.scrollLeft) : I.scrollTop);\n const a = h - R;\n if (p.top === void 0) {\n I.scrollTo(p);\n return;\n }\n const S = Math.ceil(Math.max(Math.min(a, p.top), 0));\n if (p.top = S, Jn(R, h) || S === f) {\n t({ scrollHeight: h, scrollTop: f, viewportHeight: R }), w && e(!0);\n return;\n }\n w ? (l.current = S, c.current && clearTimeout(c.current), c.current = setTimeout(() => {\n c.current = null, l.current = null, e(!0);\n }, 1e3)) : l.current = null, s === !0 && (p = {\n ...p.behavior !== void 0 ? { behavior: p.behavior } : {},\n left: gn(I, S)\n }), I.scrollTo(p);\n }\n function v(p) {\n s === !0 && (p = {\n ...p.behavior !== void 0 ? { behavior: p.behavior } : {},\n ...p.top !== void 0 ? { left: gn(i.current, p.top) } : {}\n }), i.current.scrollBy(p);\n }\n return { scrollByCallback: v, scrollerRef: i, scrollToCallback: m };\n}\nfunction Qe(t) {\n return t;\n}\nconst ar = /* @__PURE__ */ j(() => {\n const t = T((l) => `Item ${l}`), e = T((l) => `Group ${l}`), n = T({}), o = T(Qe), r = T(\"div\"), s = T(Jt), i = (l, c = null) => ht(\n x(\n n,\n B((d) => d[l]),\n nt()\n ),\n c\n );\n return {\n components: n,\n computeItemKey: o,\n EmptyPlaceholder: i(\"EmptyPlaceholder\"),\n FooterComponent: i(\"Footer\"),\n GroupComponent: i(\"Group\", \"div\"),\n groupContent: e,\n HeaderComponent: i(\"Header\"),\n HeaderFooterTag: r,\n ItemComponent: i(\"Item\", \"div\"),\n itemContent: t,\n ListComponent: i(\"List\", \"div\"),\n ScrollerComponent: i(\"Scroller\", \"div\"),\n scrollerRef: s,\n ScrollSeekPlaceholder: i(\"ScrollSeekPlaceholder\"),\n TopItemListComponent: i(\"TopItemList\")\n };\n}), dr = /* @__PURE__ */ j(\n ([t, e]) => ({ ...t, ...e }),\n rt(so, ar)\n), fr = ({ height: t }) => /* @__PURE__ */ G(\"div\", { style: { height: t } }), mr = { overflowAnchor: \"none\", position: Je(), zIndex: 1 }, uo = { overflowAnchor: \"none\" }, pr = { ...uo, display: \"inline-block\", height: \"100%\" }, Hn = /* @__PURE__ */ E.memo(function({ showTopList: e = !1 }) {\n const n = A(\"listState\"), o = Ct(\"sizeRanges\"), r = A(\"useWindowScroll\"), s = A(\"customScrollParent\"), i = Ct(\"windowScrollContainerState\"), l = Ct(\"scrollContainerState\"), c = s || r ? i : l, d = A(\"itemContent\"), m = A(\"context\"), v = A(\"groupContent\"), p = A(\"trackItemSizes\"), I = A(\"itemSize\"), w = A(\"log\"), R = Ct(\"gap\"), h = A(\"horizontalDirection\"), { callbackRef: f } = Mn(\n o,\n I,\n p,\n e ? Jt : c,\n w,\n R,\n s,\n h,\n A(\"skipAnimationFrameInResizeObserver\")\n ), [a, S] = E.useState(0);\n on(\"deviation\", (F) => {\n a !== F && S(F);\n });\n const H = A(\"EmptyPlaceholder\"), y = A(\"ScrollSeekPlaceholder\") ?? fr, O = A(\"ListComponent\"), u = A(\"ItemComponent\"), g = A(\"GroupComponent\"), C = A(\"computeItemKey\"), z = A(\"isSeeking\"), L = A(\"groupIndices\").length > 0, V = A(\"alignToBottom\"), N = A(\"initialItemFinalLocationReached\"), Z = e ? {} : {\n boxSizing: \"border-box\",\n ...h ? {\n display: \"inline-block\",\n height: \"100%\",\n marginInlineStart: a !== 0 ? a : V ? \"auto\" : 0,\n paddingInlineEnd: n.offsetBottom,\n paddingInlineStart: n.offsetTop,\n whiteSpace: \"nowrap\"\n } : {\n marginTop: a !== 0 ? a : V ? \"auto\" : 0,\n paddingBottom: n.offsetBottom,\n paddingTop: n.offsetTop\n },\n ...N ? {} : { visibility: \"hidden\" }\n };\n return !e && n.totalCount === 0 && H !== null && H !== void 0 ? /* @__PURE__ */ G(H, { ...ot(H, m) }) : /* @__PURE__ */ G(\n O,\n {\n ...ot(O, m),\n \"data-testid\": e ? \"virtuoso-top-item-list\" : \"virtuoso-item-list\",\n ref: f,\n style: Z,\n children: (e ? n.topItems : n.items).map((F) => {\n const mt = F.originalIndex, q = C(mt + n.firstItemIndex, F.data, m);\n return z ? /* @__PURE__ */ Dt(\n y,\n {\n ...ot(y, m),\n height: F.size,\n index: F.index,\n key: q,\n type: F.type || \"item\",\n ...F.type === \"group\" ? {} : { groupIndex: F.groupIndex }\n }\n ) : F.type === \"group\" ? /* @__PURE__ */ Dt(\n g,\n {\n ...ot(g, m),\n \"data-index\": mt,\n \"data-item-index\": F.index,\n \"data-known-size\": F.size,\n key: q,\n style: mr\n },\n v(F.index, m)\n ) : /* @__PURE__ */ Dt(\n u,\n {\n ...ot(u, m),\n ...ao(u, F.data),\n \"data-index\": mt,\n \"data-item-group-index\": F.groupIndex,\n \"data-item-index\": F.index,\n \"data-known-size\": F.size,\n key: q,\n style: h ? pr : uo\n },\n L ? d(F.index, F.groupIndex, F.data, m) : d(F.index, F.data, m)\n );\n })\n }\n );\n}), hr = {\n height: \"100%\",\n outline: \"none\",\n overflowY: \"auto\",\n position: \"relative\",\n WebkitOverflowScrolling: \"touch\"\n}, gr = {\n outline: \"none\",\n overflowX: \"auto\",\n position: \"relative\"\n}, He = (t) => ({\n height: \"100%\",\n position: \"absolute\",\n top: 0,\n width: \"100%\",\n ...t ? { display: \"flex\", flexDirection: \"column\" } : void 0\n}), tn = (t, e, n = 0) => ({\n ...He(t),\n position: e ? \"relative\" : \"absolute\",\n top: e ? -n : 0\n}), Ir = {\n position: Je(),\n top: 0,\n width: \"100%\",\n zIndex: 1\n};\nfunction ot(t, e) {\n if (typeof t != \"string\")\n return { context: e };\n}\nfunction ao(t, e) {\n return { item: typeof t == \"string\" ? void 0 : e };\n}\nconst Sr = /* @__PURE__ */ E.memo(function() {\n const e = A(\"HeaderComponent\"), n = Ct(\"headerHeight\"), o = A(\"HeaderFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n A(\"skipAnimationFrameInResizeObserver\")\n ), s = A(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n}), xr = /* @__PURE__ */ E.memo(function() {\n const e = A(\"FooterComponent\"), n = Ct(\"footerHeight\"), o = A(\"HeaderFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n A(\"skipAnimationFrameInResizeObserver\")\n ), s = A(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n});\nfunction en({ useEmitter: t, useEmitterValue: e, usePublisher: n }) {\n return E.memo(function({ children: s, style: i, context: l, ...c }) {\n const d = n(\"scrollContainerState\"), m = e(\"ScrollerComponent\"), v = n(\"smoothScrollTargetReached\"), p = e(\"scrollerRef\"), I = e(\"horizontalDirection\") || !1, { scrollByCallback: w, scrollerRef: R, scrollToCallback: h } = co(\n d,\n v,\n m,\n p,\n void 0,\n I\n );\n return t(\"scrollTo\", h), t(\"scrollBy\", w), /* @__PURE__ */ G(\n m,\n {\n \"data-testid\": \"virtuoso-scroller\",\n \"data-virtuoso-scroller\": !0,\n ref: R,\n style: { ...I ? gr : hr, ...i },\n tabIndex: 0,\n ...c,\n ...ot(m, l),\n children: s\n }\n );\n });\n}\nfunction nn({ useEmitter: t, useEmitterValue: e, usePublisher: n }) {\n return E.memo(function({ children: s, style: i, context: l, ...c }) {\n const d = n(\"windowScrollContainerState\"), m = e(\"ScrollerComponent\"), v = n(\"smoothScrollTargetReached\"), p = e(\"totalListHeight\"), I = e(\"deviation\"), w = e(\"customScrollParent\"), R = E.useRef(null), h = e(\"scrollerRef\"), { scrollByCallback: f, scrollerRef: a, scrollToCallback: S } = co(\n d,\n v,\n m,\n h,\n w\n );\n return lo(() => (a.current = w || R.current?.ownerDocument.defaultView, () => {\n a.current = null;\n }), [a, w]), t(\"windowScrollTo\", S), t(\"scrollBy\", f), /* @__PURE__ */ G(\n m,\n {\n ref: R,\n \"data-virtuoso-scroller\": !0,\n style: { position: \"relative\", ...i, ...p !== 0 ? { height: p + I } : void 0 },\n ...c,\n ...ot(m, l),\n children: s\n }\n );\n });\n}\nconst vr = ({ children: t }) => {\n const e = E.useContext(Re), n = Ct(\"viewportHeight\"), o = Ct(\"fixedItemHeight\"), r = A(\"alignToBottom\"), s = A(\"horizontalDirection\"), i = E.useMemo(\n () => re(n, (c) => Ht(c, s ? \"width\" : \"height\")),\n [n, s]\n ), l = Ot(i, !0, A(\"skipAnimationFrameInResizeObserver\"));\n return E.useEffect(() => {\n e && (n(e.viewportHeight), o(e.itemHeight));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"element\", ref: l, style: He(r), children: t });\n}, Tr = ({ children: t }) => {\n const e = E.useContext(Re), n = Ct(\"windowViewportRect\"), o = Ct(\"fixedItemHeight\"), r = A(\"customScrollParent\"), s = A(\"useWindowScroll\"), i = A(\"topListHeight\"), l = $e(\n n,\n r,\n A(\"skipAnimationFrameInResizeObserver\")\n ), c = A(\"alignToBottom\");\n return E.useEffect(() => {\n e && (o(e.itemHeight), n({ listHeight: 0, offsetTop: 0, visibleHeight: e.viewportHeight, visibleWidth: 100 }));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"window\", ref: l, style: tn(c, s, i), children: t });\n}, Cr = ({ children: t }) => {\n const e = A(\"TopItemListComponent\") ?? \"div\", n = A(\"headerHeight\"), o = { ...Ir, marginTop: `${n}px` }, r = A(\"context\");\n return /* @__PURE__ */ G(e, { style: o, ...ot(e, r), children: t });\n}, wr = /* @__PURE__ */ E.memo(function(e) {\n const n = A(\"useWindowScroll\"), o = A(\"topItemsIndexes\").length > 0, r = A(\"customScrollParent\"), s = A(\"context\");\n return /* @__PURE__ */ $t(r || n ? br : yr, { ...e, context: s, children: [\n o && /* @__PURE__ */ G(Cr, { children: /* @__PURE__ */ G(Hn, { showTopList: !0 }) }),\n /* @__PURE__ */ $t(r || n ? Tr : vr, { children: [\n /* @__PURE__ */ G(Sr, {}),\n /* @__PURE__ */ G(Hn, {}),\n /* @__PURE__ */ G(xr, {})\n ] })\n ] });\n}), {\n Component: fo,\n useEmitter: on,\n useEmitterValue: A,\n usePublisher: Ct\n} = /* @__PURE__ */ Xe(\n dr,\n {\n optional: {\n restoreStateFrom: \"restoreStateFrom\",\n context: \"context\",\n followOutput: \"followOutput\",\n scrollIntoViewOnChange: \"scrollIntoViewOnChange\",\n itemContent: \"itemContent\",\n groupContent: \"groupContent\",\n overscan: \"overscan\",\n increaseViewportBy: \"increaseViewportBy\",\n minOverscanItemCount: \"minOverscanItemCount\",\n totalCount: \"totalCount\",\n groupCounts: \"groupCounts\",\n topItemCount: \"topItemCount\",\n firstItemIndex: \"firstItemIndex\",\n initialTopMostItemIndex: \"initialTopMostItemIndex\",\n components: \"components\",\n atBottomThreshold: \"atBottomThreshold\",\n atTopThreshold: \"atTopThreshold\",\n computeItemKey: \"computeItemKey\",\n defaultItemHeight: \"defaultItemHeight\",\n fixedGroupHeight: \"fixedGroupHeight\",\n // Must be set above 'fixedItemHeight'\n fixedItemHeight: \"fixedItemHeight\",\n heightEstimates: \"heightEstimates\",\n itemSize: \"itemSize\",\n scrollSeekConfiguration: \"scrollSeekConfiguration\",\n headerFooterTag: \"HeaderFooterTag\",\n data: \"data\",\n initialItemCount: \"initialItemCount\",\n initialScrollTop: \"initialScrollTop\",\n alignToBottom: \"alignToBottom\",\n useWindowScroll: \"useWindowScroll\",\n customScrollParent: \"customScrollParent\",\n scrollerRef: \"scrollerRef\",\n logLevel: \"logLevel\",\n horizontalDirection: \"horizontalDirection\",\n skipAnimationFrameInResizeObserver: \"skipAnimationFrameInResizeObserver\"\n },\n methods: {\n scrollToIndex: \"scrollToIndex\",\n scrollIntoView: \"scrollIntoView\",\n scrollTo: \"scrollTo\",\n scrollBy: \"scrollBy\",\n autoscrollToBottom: \"autoscrollToBottom\",\n getState: \"getState\"\n },\n events: {\n isScrolling: \"isScrolling\",\n endReached: \"endReached\",\n startReached: \"startReached\",\n rangeChanged: \"rangeChanged\",\n atBottomStateChange: \"atBottomStateChange\",\n atTopStateChange: \"atTopStateChange\",\n totalListHeightChanged: \"totalListHeightChanged\",\n itemsRendered: \"itemsRendered\",\n groupIndices: \"groupIndices\"\n }\n },\n wr\n), yr = /* @__PURE__ */ en({ useEmitter: on, useEmitterValue: A, usePublisher: Ct }), br = /* @__PURE__ */ nn({ useEmitter: on, useEmitterValue: A, usePublisher: Ct }), ns = fo, os = fo, Rr = /* @__PURE__ */ j(() => {\n const t = T((d) => /* @__PURE__ */ $t(\"td\", { children: [\n \"Item $\",\n d\n ] })), e = T(null), n = T((d) => /* @__PURE__ */ $t(\"td\", { colSpan: 1e3, children: [\n \"Group \",\n d\n ] })), o = T(null), r = T(null), s = T({}), i = T(Qe), l = T(Jt), c = (d, m = null) => ht(\n x(\n s,\n B((v) => v[d]),\n nt()\n ),\n m\n );\n return {\n components: s,\n computeItemKey: i,\n context: e,\n EmptyPlaceholder: c(\"EmptyPlaceholder\"),\n FillerRow: c(\"FillerRow\"),\n fixedFooterContent: r,\n fixedHeaderContent: o,\n itemContent: t,\n groupContent: n,\n ScrollerComponent: c(\"Scroller\", \"div\"),\n scrollerRef: l,\n ScrollSeekPlaceholder: c(\"ScrollSeekPlaceholder\"),\n TableBodyComponent: c(\"TableBody\", \"tbody\"),\n TableComponent: c(\"Table\", \"table\"),\n TableFooterComponent: c(\"TableFoot\", \"tfoot\"),\n TableHeadComponent: c(\"TableHead\", \"thead\"),\n TableRowComponent: c(\"TableRow\", \"tr\"),\n GroupComponent: c(\"Group\", \"tr\")\n };\n}), Hr = /* @__PURE__ */ j(\n ([t, e]) => ({ ...t, ...e }),\n rt(so, Rr)\n), Er = ({ height: t }) => /* @__PURE__ */ G(\"tr\", { children: /* @__PURE__ */ G(\"td\", { style: { height: t } }) }), Br = ({ height: t }) => /* @__PURE__ */ G(\"tr\", { children: /* @__PURE__ */ G(\"td\", { style: { border: 0, height: t, padding: 0 } }) }), Lr = { overflowAnchor: \"none\" }, En = { position: Je(), zIndex: 2, overflowAnchor: \"none\" }, Bn = /* @__PURE__ */ E.memo(function({ showTopList: e = !1 }) {\n const n = M(\"listState\"), o = M(\"computeItemKey\"), r = M(\"firstItemIndex\"), s = M(\"context\"), i = M(\"isSeeking\"), l = M(\"fixedHeaderHeight\"), c = M(\"groupIndices\").length > 0, d = M(\"itemContent\"), m = M(\"groupContent\"), v = M(\"ScrollSeekPlaceholder\") ?? Er, p = M(\"GroupComponent\"), I = M(\"TableRowComponent\"), w = (e ? n.topItems : []).reduce((h, f, a) => (a === 0 ? h.push(f.size) : h.push(h[a - 1] + f.size), h), []);\n return (e ? n.topItems : n.items).map((h) => {\n const f = h.originalIndex, a = o(f + r, h.data, s), S = e ? f === 0 ? 0 : w[f - 1] : 0;\n return i ? /* @__PURE__ */ Dt(\n v,\n {\n ...ot(v, s),\n height: h.size,\n index: h.index,\n key: a,\n type: h.type || \"item\"\n }\n ) : h.type === \"group\" ? /* @__PURE__ */ Dt(\n p,\n {\n ...ot(p, s),\n \"data-index\": f,\n \"data-item-index\": h.index,\n \"data-known-size\": h.size,\n key: a,\n style: {\n ...En,\n top: l\n }\n },\n m(h.index, s)\n ) : /* @__PURE__ */ Dt(\n I,\n {\n ...ot(I, s),\n ...ao(I, h.data),\n \"data-index\": f,\n \"data-item-index\": h.index,\n \"data-known-size\": h.size,\n \"data-item-group-index\": h.groupIndex,\n key: a,\n style: e ? { ...En, top: l + S } : Lr\n },\n c ? d(h.index, h.groupIndex, h.data, s) : d(h.index, h.data, s)\n );\n });\n}), Or = /* @__PURE__ */ E.memo(function() {\n const e = M(\"listState\"), n = M(\"topItemsIndexes\").length > 0, o = bt(\"sizeRanges\"), r = M(\"useWindowScroll\"), s = M(\"customScrollParent\"), i = bt(\"windowScrollContainerState\"), l = bt(\"scrollContainerState\"), c = s || r ? i : l, d = M(\"trackItemSizes\"), m = M(\"itemSize\"), v = M(\"log\"), { callbackRef: p, ref: I } = Mn(\n o,\n m,\n d,\n c,\n v,\n void 0,\n s,\n !1,\n M(\"skipAnimationFrameInResizeObserver\")\n ), [w, R] = E.useState(0);\n rn(\"deviation\", (L) => {\n w !== L && (I.current.style.marginTop = `${L}px`, R(L));\n });\n const h = M(\"EmptyPlaceholder\"), f = M(\"FillerRow\") ?? Br, a = M(\"TableBodyComponent\"), S = M(\"paddingTopAddition\"), H = M(\"statefulTotalCount\"), y = M(\"context\");\n if (H === 0 && h !== null && h !== void 0)\n return /* @__PURE__ */ G(h, { ...ot(h, y) });\n const O = (n ? e.topItems : []).reduce((L, V) => L + V.size, 0), u = e.offsetTop + S + w - O, g = e.offsetBottom, C = u > 0 ? /* @__PURE__ */ G(f, { context: y, height: u }, \"padding-top\") : null, z = g > 0 ? /* @__PURE__ */ G(f, { context: y, height: g }, \"padding-bottom\") : null;\n return /* @__PURE__ */ $t(a, { \"data-testid\": \"virtuoso-item-list\", ref: p, ...ot(a, y), children: [\n C,\n n && /* @__PURE__ */ G(Bn, { showTopList: !0 }),\n /* @__PURE__ */ G(Bn, {}),\n z\n ] });\n}), kr = ({ children: t }) => {\n const e = E.useContext(Re), n = bt(\"viewportHeight\"), o = bt(\"fixedItemHeight\"), r = Ot(\n E.useMemo(() => re(n, (s) => Ht(s, \"height\")), [n]),\n !0,\n M(\"skipAnimationFrameInResizeObserver\")\n );\n return E.useEffect(() => {\n e && (n(e.viewportHeight), o(e.itemHeight));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"element\", ref: r, style: He(!1), children: t });\n}, zr = ({ children: t }) => {\n const e = E.useContext(Re), n = bt(\"windowViewportRect\"), o = bt(\"fixedItemHeight\"), r = M(\"customScrollParent\"), s = M(\"useWindowScroll\"), i = $e(\n n,\n r,\n M(\"skipAnimationFrameInResizeObserver\")\n );\n return E.useEffect(() => {\n e && (o(e.itemHeight), n({ listHeight: 0, offsetTop: 0, visibleHeight: e.viewportHeight, visibleWidth: 100 }));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"window\", ref: i, style: tn(!1, s), children: t });\n}, Fr = /* @__PURE__ */ E.memo(function(e) {\n const n = M(\"useWindowScroll\"), o = M(\"customScrollParent\"), r = bt(\"fixedHeaderHeight\"), s = bt(\"fixedFooterHeight\"), i = M(\"fixedHeaderContent\"), l = M(\"fixedFooterContent\"), c = M(\"context\"), d = Ot(\n E.useMemo(() => re(r, (a) => Ht(a, \"height\")), [r]),\n !0,\n M(\"skipAnimationFrameInResizeObserver\")\n ), m = Ot(\n E.useMemo(() => re(s, (a) => Ht(a, \"height\")), [s]),\n !0,\n M(\"skipAnimationFrameInResizeObserver\")\n ), v = o || n ? Wr : Vr, p = o || n ? zr : kr, I = M(\"TableComponent\"), w = M(\"TableHeadComponent\"), R = M(\"TableFooterComponent\"), h = i ? /* @__PURE__ */ G(\n w,\n {\n ref: d,\n style: { position: \"sticky\", top: 0, zIndex: 2 },\n ...ot(w, c),\n children: i()\n },\n \"TableHead\"\n ) : null, f = l ? /* @__PURE__ */ G(\n R,\n {\n ref: m,\n style: { bottom: 0, position: \"sticky\", zIndex: 1 },\n ...ot(R, c),\n children: l()\n },\n \"TableFoot\"\n ) : null;\n return /* @__PURE__ */ G(v, { ...e, ...ot(v, c), children: /* @__PURE__ */ G(p, { children: /* @__PURE__ */ $t(I, { style: { borderSpacing: 0, overflowAnchor: \"none\" }, ...ot(I, c), children: [\n h,\n /* @__PURE__ */ G(Or, {}, \"TableBody\"),\n f\n ] }) }) });\n}), {\n Component: mo,\n useEmitter: rn,\n useEmitterValue: M,\n usePublisher: bt\n} = /* @__PURE__ */ Xe(\n Hr,\n {\n optional: {\n restoreStateFrom: \"restoreStateFrom\",\n context: \"context\",\n followOutput: \"followOutput\",\n firstItemIndex: \"firstItemIndex\",\n itemContent: \"itemContent\",\n groupContent: \"groupContent\",\n fixedHeaderContent: \"fixedHeaderContent\",\n fixedFooterContent: \"fixedFooterContent\",\n overscan: \"overscan\",\n increaseViewportBy: \"increaseViewportBy\",\n minOverscanItemCount: \"minOverscanItemCount\",\n totalCount: \"totalCount\",\n topItemCount: \"topItemCount\",\n initialTopMostItemIndex: \"initialTopMostItemIndex\",\n components: \"components\",\n groupCounts: \"groupCounts\",\n atBottomThreshold: \"atBottomThreshold\",\n atTopThreshold: \"atTopThreshold\",\n computeItemKey: \"computeItemKey\",\n defaultItemHeight: \"defaultItemHeight\",\n fixedGroupHeight: \"fixedGroupHeight\",\n // Must be set above 'fixedItemHeight'\n fixedItemHeight: \"fixedItemHeight\",\n itemSize: \"itemSize\",\n scrollSeekConfiguration: \"scrollSeekConfiguration\",\n data: \"data\",\n initialItemCount: \"initialItemCount\",\n initialScrollTop: \"initialScrollTop\",\n alignToBottom: \"alignToBottom\",\n useWindowScroll: \"useWindowScroll\",\n customScrollParent: \"customScrollParent\",\n scrollerRef: \"scrollerRef\",\n logLevel: \"logLevel\"\n },\n methods: {\n scrollToIndex: \"scrollToIndex\",\n scrollIntoView: \"scrollIntoView\",\n scrollTo: \"scrollTo\",\n scrollBy: \"scrollBy\",\n getState: \"getState\"\n },\n events: {\n isScrolling: \"isScrolling\",\n endReached: \"endReached\",\n startReached: \"startReached\",\n rangeChanged: \"rangeChanged\",\n atBottomStateChange: \"atBottomStateChange\",\n atTopStateChange: \"atTopStateChange\",\n totalListHeightChanged: \"totalListHeightChanged\",\n itemsRendered: \"itemsRendered\",\n groupIndices: \"groupIndices\"\n }\n },\n Fr\n), Vr = /* @__PURE__ */ en({ useEmitter: rn, useEmitterValue: M, usePublisher: bt }), Wr = /* @__PURE__ */ nn({ useEmitter: rn, useEmitterValue: M, usePublisher: bt }), rs = mo, ss = mo, Ln = {\n bottom: 0,\n itemHeight: 0,\n items: [],\n itemWidth: 0,\n offsetBottom: 0,\n offsetTop: 0,\n top: 0\n}, Pr = {\n bottom: 0,\n itemHeight: 0,\n items: [{ index: 0 }],\n itemWidth: 0,\n offsetBottom: 0,\n offsetTop: 0,\n top: 0\n}, { ceil: On, floor: Ce, max: oe, min: ze, round: kn } = Math;\nfunction zn(t, e, n) {\n return Array.from({ length: e - t + 1 }).map((o, r) => ({ data: n === null ? null : n[r + t], index: r + t }));\n}\nfunction Gr(t) {\n return {\n ...Pr,\n items: t\n };\n}\nfunction Se(t, e) {\n return t !== void 0 && t.width === e.width && t.height === e.height;\n}\nfunction Ar(t, e) {\n return t !== void 0 && t.column === e.column && t.row === e.row;\n}\nconst Mr = /* @__PURE__ */ j(\n ([\n { increaseViewportBy: t, listBoundary: e, overscan: n, visibleRange: o },\n { footerHeight: r, headerHeight: s, scrollBy: i, scrollContainerState: l, scrollTo: c, scrollTop: d, smoothScrollTargetReached: m, viewportHeight: v },\n p,\n I,\n { didMount: w, propsReady: R },\n { customScrollParent: h, useWindowScroll: f, windowScrollContainerState: a, windowScrollTo: S, windowViewportRect: H },\n y\n ]) => {\n const O = T(0), u = T(0), g = T(Ln), C = T({ height: 0, width: 0 }), z = T({ height: 0, width: 0 }), L = U(), V = U(), N = T(0), Z = T(null), F = T({ column: 0, row: 0 }), mt = U(), q = U(), Q = T(!1), gt = T(0), ut = T(!0), St = T(!1), Ft = T(!1);\n Y(\n x(\n w,\n $(gt),\n P(([b, D]) => D !== 0)\n ),\n () => {\n _(ut, !1);\n }\n ), Y(\n x(\n at(w, ut, z, C, gt, St),\n P(([b, D, K, st, , tt]) => b && !D && K.height !== 0 && st.height !== 0 && !tt)\n ),\n ([, , , , b]) => {\n _(St, !0), je(1, () => {\n _(L, b);\n }), yt(x(d), () => {\n _(e, [0, 0]), _(ut, !0);\n });\n }\n ), k(\n x(\n q,\n P((b) => b != null && b.scrollTop > 0),\n Bt(0)\n ),\n u\n ), Y(\n x(\n w,\n $(q),\n P(([, b]) => b != null)\n ),\n ([, b]) => {\n b && (_(C, b.viewport), _(z, b.item), _(F, b.gap), b.scrollTop > 0 && (_(Q, !0), yt(x(d, Ut(1)), (D) => {\n _(Q, !1);\n }), _(c, { top: b.scrollTop })));\n }\n ), k(\n x(\n C,\n B(({ height: b }) => b)\n ),\n v\n ), k(\n x(\n at(\n W(C, Se),\n W(z, Se),\n W(F, (b, D) => b !== void 0 && b.column === D.column && b.row === D.row),\n W(d)\n ),\n B(([b, D, K, st]) => ({\n gap: K,\n item: D,\n scrollTop: st,\n viewport: b\n }))\n ),\n mt\n ), k(\n x(\n at(\n W(O),\n o,\n W(F, Ar),\n W(z, Se),\n W(C, Se),\n W(Z),\n W(u),\n W(Q),\n W(ut),\n W(gt)\n ),\n P(([, , , , , , , b]) => !b),\n B(\n ([\n b,\n [D, K],\n st,\n tt,\n X,\n lt,\n xt,\n ,\n ct,\n Vt\n ]) => {\n const { column: Wt, row: ee } = st, { height: he, width: Ee } = tt, { width: sn } = X;\n if (xt === 0 && (b === 0 || sn === 0))\n return Ln;\n if (Ee === 0) {\n const dn = qe(Vt, b), Io = dn + Math.max(xt - 1, 0);\n return Gr(zn(dn, Io, lt));\n }\n const ge = po(sn, Ee, Wt);\n let qt, Mt;\n ct ? D === 0 && K === 0 && xt > 0 ? (qt = 0, Mt = xt - 1) : (qt = ge * Ce((D + ee) / (he + ee)), Mt = ge * On((K + ee) / (he + ee)) - 1, Mt = ze(b - 1, oe(Mt, ge - 1)), qt = ze(Mt, oe(0, qt))) : (qt = 0, Mt = -1);\n const ln = zn(qt, Mt, lt), { bottom: cn, top: un } = Fn(X, st, tt, ln), an = On(b / ge), go = an * he + (an - 1) * ee - cn;\n return { bottom: cn, itemHeight: he, items: ln, itemWidth: Ee, offsetBottom: go, offsetTop: un, top: un };\n }\n )\n ),\n g\n ), k(\n x(\n Z,\n P((b) => b !== null),\n B((b) => b.length)\n ),\n O\n ), k(\n x(\n at(C, z, g, F),\n P(([b, D, { items: K }]) => K.length > 0 && D.height !== 0 && b.height !== 0),\n B(([b, D, { items: K }, st]) => {\n const { bottom: tt, top: X } = Fn(b, st, D, K);\n return [X, tt];\n }),\n nt(le)\n ),\n e\n );\n const pt = T(!1);\n k(\n x(\n d,\n $(pt),\n B(([b, D]) => D || b !== 0)\n ),\n pt\n );\n const jt = Tt(\n x(\n at(g, O),\n P(([{ items: b }]) => b.length > 0),\n $(pt),\n P(([[b, D], K]) => {\n const tt = b.items[b.items.length - 1].index === D - 1;\n return (K || b.bottom > 0 && b.itemHeight > 0 && b.offsetBottom === 0 && b.items.length === D) && tt;\n }),\n B(([[, b]]) => b - 1),\n nt()\n )\n ), Qt = Tt(\n x(\n W(g),\n P(({ items: b }) => b.length > 0 && b[0].index === 0),\n Bt(0),\n nt()\n )\n ), Et = Tt(\n x(\n W(g),\n $(Q),\n P(([{ items: b }, D]) => b.length > 0 && !D),\n B(([{ items: b }]) => ({\n endIndex: b[b.length - 1].index,\n startIndex: b[0].index\n })),\n nt(Kn),\n zt(0)\n )\n );\n k(Et, I.scrollSeekRangeChanged), k(\n x(\n L,\n $(C, z, O, F),\n B(([b, D, K, st, tt]) => {\n const X = Xn(b), { align: lt, behavior: xt, offset: ct } = X;\n let Vt = X.index;\n Vt === \"LAST\" && (Vt = st - 1), Vt = oe(0, Vt, ze(st - 1, Vt));\n let Wt = Me(D, tt, K, Vt);\n return lt === \"end\" ? Wt = kn(Wt - D.height + K.height) : lt === \"center\" && (Wt = kn(Wt - D.height / 2 + K.height / 2)), ct !== void 0 && ct !== 0 && (Wt += ct), { behavior: xt, top: Wt };\n })\n ),\n c\n );\n const te = ht(\n x(\n g,\n B((b) => b.offsetBottom + b.bottom)\n ),\n 0\n );\n return k(\n x(\n H,\n B((b) => ({ height: b.visibleHeight, width: b.visibleWidth }))\n ),\n C\n ), {\n customScrollParent: h,\n // input\n data: Z,\n deviation: N,\n footerHeight: r,\n gap: F,\n headerHeight: s,\n increaseViewportBy: t,\n initialItemCount: u,\n itemDimensions: z,\n overscan: n,\n restoreStateFrom: q,\n scrollBy: i,\n scrollContainerState: l,\n scrollHeight: V,\n scrollTo: c,\n scrollToIndex: L,\n scrollTop: d,\n smoothScrollTargetReached: m,\n totalCount: O,\n useWindowScroll: f,\n viewportDimensions: C,\n windowScrollContainerState: a,\n windowScrollTo: S,\n windowViewportRect: H,\n ...I,\n // output\n gridState: g,\n horizontalDirection: Ft,\n initialTopMostItemIndex: gt,\n totalListHeight: te,\n ...p,\n endReached: jt,\n propsReady: R,\n rangeChanged: Et,\n startReached: Qt,\n stateChanged: mt,\n stateRestoreInProgress: Q,\n ...y\n };\n },\n rt(Ye, It, pe, oo, At, Ze, Gt)\n);\nfunction po(t, e, n) {\n return oe(1, Ce((t + n) / (Ce(e) + n)));\n}\nfunction Fn(t, e, n, o) {\n const { height: r } = n;\n if (r === void 0 || o.length === 0)\n return { bottom: 0, top: 0 };\n const s = Me(t, e, n, o[0].index);\n return { bottom: Me(t, e, n, o[o.length - 1].index) + r, top: s };\n}\nfunction Me(t, e, n, o) {\n const r = po(t.width, n.width, e.column), s = Ce(o / r), i = s * n.height + oe(0, s - 1) * e.row;\n return i > 0 ? i + e.row : i;\n}\nconst _r = /* @__PURE__ */ j(() => {\n const t = T((v) => `Item ${v}`), e = T({}), n = T(null), o = T(\"virtuoso-grid-item\"), r = T(\"virtuoso-grid-list\"), s = T(Qe), i = T(\"div\"), l = T(Jt), c = (v, p = null) => ht(\n x(\n e,\n B((I) => I[v]),\n nt()\n ),\n p\n ), d = T(!1), m = T(!1);\n return k(W(m), d), {\n components: e,\n computeItemKey: s,\n context: n,\n FooterComponent: c(\"Footer\"),\n HeaderComponent: c(\"Header\"),\n headerFooterTag: i,\n itemClassName: o,\n ItemComponent: c(\"Item\", \"div\"),\n itemContent: t,\n listClassName: r,\n ListComponent: c(\"List\", \"div\"),\n readyStateChanged: d,\n reportReadyState: m,\n ScrollerComponent: c(\"Scroller\", \"div\"),\n scrollerRef: l,\n ScrollSeekPlaceholder: c(\"ScrollSeekPlaceholder\", \"div\")\n };\n}), Nr = /* @__PURE__ */ j(\n ([t, e]) => ({ ...t, ...e }),\n rt(Mr, _r)\n), Dr = /* @__PURE__ */ E.memo(function() {\n const e = et(\"gridState\"), n = et(\"listClassName\"), o = et(\"itemClassName\"), r = et(\"itemContent\"), s = et(\"computeItemKey\"), i = et(\"isSeeking\"), l = wt(\"scrollHeight\"), c = et(\"ItemComponent\"), d = et(\"ListComponent\"), m = et(\"ScrollSeekPlaceholder\"), v = et(\"context\"), p = wt(\"itemDimensions\"), I = wt(\"gap\"), w = et(\"log\"), R = et(\"stateRestoreInProgress\"), h = wt(\"reportReadyState\"), f = Ot(\n E.useMemo(\n () => (a) => {\n const S = a.parentElement.parentElement.scrollHeight;\n l(S);\n const H = a.firstChild;\n if (H !== null) {\n const { height: y, width: O } = H.getBoundingClientRect();\n p({ height: y, width: O });\n }\n I({\n column: Vn(\"column-gap\", getComputedStyle(a).columnGap, w),\n row: Vn(\"row-gap\", getComputedStyle(a).rowGap, w)\n });\n },\n [l, p, I, w]\n ),\n !0,\n !1\n );\n return lo(() => {\n e.itemHeight > 0 && e.itemWidth > 0 && h(!0);\n }, [e]), R ? null : /* @__PURE__ */ G(\n d,\n {\n className: n,\n ref: f,\n ...ot(d, v),\n \"data-testid\": \"virtuoso-item-list\",\n style: { paddingBottom: e.offsetBottom, paddingTop: e.offsetTop },\n children: e.items.map((a) => {\n const S = s(a.index, a.data, v);\n return i ? /* @__PURE__ */ G(\n m,\n {\n ...ot(m, v),\n height: e.itemHeight,\n index: a.index,\n width: e.itemWidth\n },\n S\n ) : /* @__PURE__ */ Dt(\n c,\n {\n ...ot(c, v),\n className: o,\n \"data-index\": a.index,\n key: S\n },\n r(a.index, a.data, v)\n );\n })\n }\n );\n}), $r = E.memo(function() {\n const e = et(\"HeaderComponent\"), n = wt(\"headerHeight\"), o = et(\"headerFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n !1\n ), s = et(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n}), Ur = E.memo(function() {\n const e = et(\"FooterComponent\"), n = wt(\"footerHeight\"), o = et(\"headerFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n !1\n ), s = et(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n}), Kr = ({ children: t }) => {\n const e = E.useContext(io), n = wt(\"itemDimensions\"), o = wt(\"viewportDimensions\"), r = Ot(\n E.useMemo(\n () => (s) => {\n o(s.getBoundingClientRect());\n },\n [o]\n ),\n !0,\n !1\n );\n return E.useEffect(() => {\n e && (o({ height: e.viewportHeight, width: e.viewportWidth }), n({ height: e.itemHeight, width: e.itemWidth }));\n }, [e, o, n]), /* @__PURE__ */ G(\"div\", { ref: r, style: He(!1), children: t });\n}, jr = ({ children: t }) => {\n const e = E.useContext(io), n = wt(\"windowViewportRect\"), o = wt(\"itemDimensions\"), r = et(\"customScrollParent\"), s = et(\"useWindowScroll\"), i = $e(n, r, !1);\n return E.useEffect(() => {\n e && (o({ height: e.itemHeight, width: e.itemWidth }), n({ listHeight: 0, offsetTop: 0, visibleHeight: e.viewportHeight, visibleWidth: e.viewportWidth }));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { ref: i, style: tn(!1, s), children: t });\n}, qr = /* @__PURE__ */ E.memo(function({ ...e }) {\n const n = et(\"useWindowScroll\"), o = et(\"customScrollParent\"), r = o || n ? Xr : Zr, s = o || n ? jr : Kr, i = et(\"context\");\n return /* @__PURE__ */ G(r, { ...e, ...ot(r, i), children: /* @__PURE__ */ $t(s, { children: [\n /* @__PURE__ */ G($r, {}),\n /* @__PURE__ */ G(Dr, {}),\n /* @__PURE__ */ G(Ur, {})\n ] }) });\n}), {\n Component: Yr,\n useEmitter: ho,\n useEmitterValue: et,\n usePublisher: wt\n} = /* @__PURE__ */ Xe(\n Nr,\n {\n optional: {\n context: \"context\",\n totalCount: \"totalCount\",\n overscan: \"overscan\",\n itemContent: \"itemContent\",\n components: \"components\",\n computeItemKey: \"computeItemKey\",\n data: \"data\",\n initialItemCount: \"initialItemCount\",\n scrollSeekConfiguration: \"scrollSeekConfiguration\",\n headerFooterTag: \"headerFooterTag\",\n listClassName: \"listClassName\",\n itemClassName: \"itemClassName\",\n useWindowScroll: \"useWindowScroll\",\n customScrollParent: \"customScrollParent\",\n scrollerRef: \"scrollerRef\",\n logLevel: \"logLevel\",\n restoreStateFrom: \"restoreStateFrom\",\n initialTopMostItemIndex: \"initialTopMostItemIndex\",\n increaseViewportBy: \"increaseViewportBy\"\n },\n methods: {\n scrollTo: \"scrollTo\",\n scrollBy: \"scrollBy\",\n scrollToIndex: \"scrollToIndex\"\n },\n events: {\n isScrolling: \"isScrolling\",\n endReached: \"endReached\",\n startReached: \"startReached\",\n rangeChanged: \"rangeChanged\",\n atBottomStateChange: \"atBottomStateChange\",\n atTopStateChange: \"atTopStateChange\",\n stateChanged: \"stateChanged\",\n readyStateChanged: \"readyStateChanged\"\n }\n },\n qr\n), Zr = /* @__PURE__ */ en({ useEmitter: ho, useEmitterValue: et, usePublisher: wt }), Xr = /* @__PURE__ */ nn({ useEmitter: ho, useEmitterValue: et, usePublisher: wt });\nfunction Vn(t, e, n) {\n return e !== \"normal\" && e?.endsWith(\"px\") !== !0 && n(`${t} was not resolved to pixel value correctly`, e, ft.WARN), e === \"normal\" ? 0 : parseInt(e ?? \"0\", 10);\n}\nconst is = Yr;\nexport {\n ss as GroupedTableVirtuoso,\n os as GroupedVirtuoso,\n ft as LogLevel,\n rs as TableVirtuoso,\n ns as Virtuoso,\n is as VirtuosoGrid,\n io as VirtuosoGridMockContext,\n Re as VirtuosoMockContext\n};\n","\nimport { useState } from 'react'\nimport { AlertCircle, Check, ChevronLeft, ChevronRight, ListChecks, Loader2, MessageCircleQuestion } from 'lucide-react'\nimport { useRelayStore } from '@/store'\nimport { FormattedBody } from '@/components/shared/formatted-body'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Textarea } from '@/components/ui/textarea'\nimport type { ProviderPendingApproval, ProviderQuestion } from '@/lib/display'\nimport { cn } from '@/lib/utils'\n\nexport function PermissionRequestBubble({ agentId, approval }: { agentId: string; approval?: ProviderPendingApproval }) {\n const sendPermissionDecision = useRelayStore((s) => s.sendPermissionDecision)\n const [submitting, setSubmitting] = useState<string | null>(null)\n if (!approval) return null\n if (approval.questions && approval.questions.length) {\n return <QuestionForm agentId={agentId} approval={approval} questions={approval.questions} />\n }\n const currentApproval = approval\n const choices = approval.choices.length ? approval.choices : [\n { id: 'approve' as const, label: 'Approve' },\n { id: 'deny' as const, label: 'Deny' },\n ]\n\n async function choose(choice: typeof choices[number]) {\n if (submitting) return\n setSubmitting(choice.id)\n try {\n await sendPermissionDecision(agentId, currentApproval.id, choice.id)\n } finally {\n setSubmitting(null)\n }\n }\n\n const isPlan = approval.kind === 'plan'\n return (\n <div className=\"flex justify-start mb-3\">\n <div className=\"max-w-[92%] md:max-w-[78%] rounded-2xl rounded-bl-sm bg-card ring-1 ring-amber-500/35 px-3.5 py-3 text-sm\">\n <div className=\"flex items-start gap-2\">\n {isPlan ? <ListChecks className=\"mt-0.5 h-4 w-4 shrink-0 text-amber-400\" /> : <AlertCircle className=\"mt-0.5 h-4 w-4 shrink-0 text-amber-400\" />}\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-medium text-amber-900 dark:text-amber-100\">{approval.title}</div>\n {approval.body && (isPlan\n ? <div className=\"mt-2 max-h-72 overflow-auto rounded-md bg-background/60 p-2.5 text-xs leading-relaxed\"><FormattedBody text={approval.body} rawBody={approval.body} className=\"leading-relaxed\" /></div>\n : <pre className=\"mt-2 max-h-44 overflow-auto whitespace-pre-wrap break-words rounded-md bg-background/80 p-2 font-mono text-xs leading-relaxed text-muted-foreground\">{approval.body}</pre>)}\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {choices.map((choice) => (\n <Button\n key={choice.id}\n size=\"sm\"\n variant={choice.id === 'deny' || choice.id === 'abort' ? 'outline' : 'default'}\n disabled={Boolean(submitting)}\n onClick={() => void choose(choice)}\n className=\"h-7 px-2 text-xs\"\n >\n {submitting === choice.id && <Loader2 className=\"mr-1.5 h-3 w-3 animate-spin\" />}\n {choice.label}\n </Button>\n ))}\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\ninterface QState { labels: string[]; other: string; otherActive: boolean }\n\nfunction questionAnswered(s: QState | undefined): boolean {\n if (!s) return false\n if (s.otherActive && s.other.trim()) return true\n return s.labels.length > 0\n}\n\nfunction answerValue(s: QState): string {\n const parts = [...s.labels]\n if (s.otherActive && s.other.trim()) parts.push(s.other.trim())\n return parts.join(', ')\n}\n\n// Renders a Claude AskUserQuestion as a sequential form (one question at a\n// time). Collects all answers, then submits a single 'answer' decision that the\n// runner turns into a PreToolUse allow + updatedInput so the tool completes.\nfunction QuestionForm({ agentId, approval, questions }: { agentId: string; approval: ProviderPendingApproval; questions: ProviderQuestion[] }) {\n const sendPermissionDecision = useRelayStore((s) => s.sendPermissionDecision)\n const [step, setStep] = useState(0)\n const [state, setState] = useState<Record<number, QState>>({})\n const [submitting, setSubmitting] = useState<null | 'answer' | 'dismiss'>(null)\n\n const q = questions[Math.min(step, questions.length - 1)]\n const cur = state[step]\n if (!q) return null\n const multi = Boolean(q.multiSelect)\n const total = questions.length\n const isLast = step === total - 1\n const answered = questionAnswered(cur)\n const allAnswered = questions.every((_, i) => questionAnswered(state[i]))\n const busy = Boolean(submitting)\n\n function update(patch: Partial<QState>) {\n setState((prev) => {\n const base: QState = prev[step] ?? { labels: [], other: '', otherActive: false }\n return { ...prev, [step]: { ...base, ...patch } }\n })\n }\n function pickOption(label: string) {\n if (multi) {\n const has = cur?.labels.includes(label)\n update({ labels: has ? (cur?.labels ?? []).filter((l) => l !== label) : [...(cur?.labels ?? []), label] })\n } else {\n update({ labels: [label], otherActive: false })\n }\n }\n function pickOther() {\n if (multi) update({ otherActive: !cur?.otherActive })\n else update({ labels: [], otherActive: true })\n }\n\n async function submit() {\n if (!allAnswered || busy) return\n setSubmitting('answer')\n try {\n const answers: Record<string, string> = {}\n questions.forEach((qq, i) => { const s = state[i]; if (s) answers[qq.question] = answerValue(s) })\n await sendPermissionDecision(agentId, approval.id, 'answer', answers)\n } finally { setSubmitting(null) }\n }\n async function dismiss() {\n if (busy) return\n setSubmitting('dismiss')\n try { await sendPermissionDecision(agentId, approval.id, 'deny') } finally { setSubmitting(null) }\n }\n\n const otherActive = Boolean(cur?.otherActive)\n\n return (\n <div className=\"flex justify-start mb-3\">\n <div className=\"w-full max-w-[92%] md:max-w-[78%] rounded-2xl rounded-bl-sm bg-card ring-1 ring-amber-500/35 px-3.5 py-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <MessageCircleQuestion className=\"h-4 w-4 shrink-0 text-amber-400\" />\n <div className=\"text-sm font-medium text-amber-900 dark:text-amber-100\">{approval.title}</div>\n {total > 1 && (\n <Badge variant=\"outline\" className=\"ml-auto h-5 px-1.5 text-[10px] text-muted-foreground\">{step + 1} / {total}</Badge>\n )}\n </div>\n\n <div className=\"mt-3\">\n {q.header && <div className=\"text-[11px] font-semibold uppercase tracking-wide text-amber-700 dark:text-amber-300/80\">{q.header}</div>}\n <div className=\"mt-0.5 text-sm text-foreground whitespace-pre-wrap break-words\">{q.question}</div>\n {multi && <div className=\"mt-0.5 text-[11px] text-muted-foreground\">Select all that apply</div>}\n\n <div className=\"mt-2 flex flex-col gap-1.5\">\n {q.options.map((opt) => {\n const selected = Boolean(cur?.labels.includes(opt.label))\n return (\n <button\n key={opt.label}\n type=\"button\"\n disabled={busy}\n onClick={() => pickOption(opt.label)}\n className={cn(\n 'flex items-start gap-2 rounded-lg border px-2.5 py-2 text-left transition-colors',\n selected ? 'border-amber-500/60 bg-amber-500/10' : 'border-border bg-background/60 hover:bg-background',\n busy && 'opacity-60',\n )}\n >\n <span className={cn(\n 'mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center border text-amber-300',\n multi ? 'rounded' : 'rounded-full',\n selected ? 'border-amber-400 bg-amber-400/20' : 'border-muted-foreground/40',\n )}>\n {selected && <Check className=\"h-3 w-3\" />}\n </span>\n <span className=\"min-w-0\">\n <span className=\"text-sm text-foreground\">{opt.label}</span>\n {opt.description && <span className=\"block text-xs text-muted-foreground\">{opt.description}</span>}\n </span>\n </button>\n )\n })}\n\n <button\n type=\"button\"\n disabled={busy}\n onClick={pickOther}\n className={cn(\n 'flex items-start gap-2 rounded-lg border px-2.5 py-2 text-left transition-colors',\n otherActive ? 'border-amber-500/60 bg-amber-500/10' : 'border-border bg-background/60 hover:bg-background',\n busy && 'opacity-60',\n )}\n >\n <span className={cn(\n 'mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center border text-amber-300',\n multi ? 'rounded' : 'rounded-full',\n otherActive ? 'border-amber-400 bg-amber-400/20' : 'border-muted-foreground/40',\n )}>\n {otherActive && <Check className=\"h-3 w-3\" />}\n </span>\n <span className=\"text-sm text-foreground\">Other…</span>\n </button>\n {otherActive && (\n <Textarea\n autoFocus\n rows={2}\n disabled={busy}\n value={cur?.other ?? ''}\n onChange={(e) => update({ other: e.target.value, otherActive: true })}\n placeholder=\"Type your answer\"\n className=\"mt-1 text-sm\"\n />\n )}\n </div>\n </div>\n\n <div className=\"mt-3 flex items-center gap-1.5\">\n {step > 0 && (\n <Button size=\"sm\" variant=\"outline\" disabled={busy} onClick={() => setStep((s) => s - 1)} className=\"h-7 px-2 text-xs\">\n <ChevronLeft className=\"mr-1 h-3 w-3\" />Back\n </Button>\n )}\n {!isLast ? (\n <Button size=\"sm\" disabled={busy || !answered} onClick={() => setStep((s) => s + 1)} className=\"h-7 px-2 text-xs\">\n Next<ChevronRight className=\"ml-1 h-3 w-3\" />\n </Button>\n ) : (\n <Button size=\"sm\" disabled={busy || !allAnswered} onClick={() => void submit()} className=\"h-7 px-2 text-xs\">\n {submitting === 'answer' && <Loader2 className=\"mr-1.5 h-3 w-3 animate-spin\" />}\n Send answer{total > 1 ? 's' : ''}\n </Button>\n )}\n <Button size=\"sm\" variant=\"ghost\" disabled={busy} onClick={() => void dismiss()} className=\"ml-auto h-7 px-2 text-xs text-muted-foreground\">\n {submitting === 'dismiss' && <Loader2 className=\"mr-1.5 h-3 w-3 animate-spin\" />}\n Dismiss\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","import { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { ArrowDownToLine, Loader2, MessageSquare } from 'lucide-react'\nimport { Virtuoso, type VirtuosoHandle } from 'react-virtuoso'\nimport { Button } from '@/components/ui/button'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport type { ProviderPendingApproval } from '@/lib/display'\nimport { useRelayStore } from '@/store'\nimport { MessageBubble } from './MessageBubble'\nimport { PermissionRequestBubble } from './AskQuestionForm'\nimport {\n AgentActionEntry,\n ActivityTrace,\n BusyIndicator,\n CreatedMarker,\n DateSeparator,\n ImportedHistoryMarker,\n ImportedMessageBubble,\n InitialPromptBubble,\n NoticePill,\n PromptResolutionRow,\n RelayInjectionRow,\n StatusMarker,\n} from './TraceView'\nimport { type TimelineEntry, resolveTimelineAnchorIndex, timelineEntryAnchor, timelineEntryKey } from './sessionTrace'\nimport { getChatScroll, hydrateChatScroll, setChatScroll } from './chatScrollStore'\nimport { cn } from '@/lib/utils'\n\nconst FIRST_ITEM_INDEX_BASE = 1_000_000\n\n// Per-agent scroll memory, keyed by agentId. The key={agentId} remount (see the note on the\n// Virtuoso element) intentionally gives each agent a clean component instance, which also wipes\n// scroll state — so switching back always snapped to the bottom. The chatScrollStore seam outlives\n// the remount and lets a fresh mount restore whether the user was end-sticky or, if they were\n// reading history, where they left off (#517). It also persists PER USER server-side (#759), so\n// the position survives a full reload / new tab / device switch — the old module-level Map only\n// survived an in-session remount and lost everything on reload.\n// topKey — compatibility key for the entry at the TOP of the viewport.\n// anchorMessageId — durable message id/range for the top row, so restore survives activity\n// grouping, window slicing, and initial-prompt styling changes — never a pixel.\n// offset — px of that row scrolled ABOVE the fold, so restore lands on the exact pixel within\n// the row, not just its top (#676). Both are read from the DOM (the first row whose box\n// crosses the viewport top), NOT from rangeChanged.startIndex — that index is the first\n// OVERSCAN-rendered row (increaseViewportBy renders ~600px ahead), so the old topKey restored\n// ~600px ABOVE where the user actually was. restoreStateFrom was rejected here: it matches\n// measurements by data index, but this list's firstItemIndex is dynamic (prepend handling)\n// and resets on the keyed remount, so the snapshot's indices wouldn't line up.\n\n// Horizontal gutter lives on the ROWS, not the Virtuoso scroller. Virtuoso sizes\n// its inner list to the scroller's padding-box width, so padding on the scroller\n// insets content on the left but is negated on the right — which let justify-end\n// (outbound) bubbles clip against the screen edge. Padding on each row is real.\nconst GUTTER = 'px-3 md:px-4'\n\ninterface TimelineFooterContext {\n agentId: string\n busy: boolean\n pendingApproval?: ProviderPendingApproval\n blockedLabel?: string\n canInterrupt: boolean\n onInterrupt: () => void\n}\n\n// Module-stable component (see footerContext note in VirtualTimeline). Virtuoso reconciles\n// its custom components by function identity, so this MUST NOT be recreated per-render or the\n// pending-approval form it hosts remounts and loses the user's in-progress selection. Dynamic\n// values arrive via Virtuoso's `context` prop. The PermissionRequestBubble is keyed by the\n// approval id so it remounts only on a genuinely new prompt, not on every poll/SSE refresh.\nfunction TimelineFooter({ context }: { context?: TimelineFooterContext }) {\n if (!context) return null\n const { agentId, busy, pendingApproval, blockedLabel, canInterrupt, onInterrupt } = context\n const showBusy = busy && !pendingApproval\n if (!pendingApproval && !showBusy) return null\n // pb gives the busy / approval bubble real breathing room above the composer.\n // A margin on the bubble itself is the scroller's LAST-child margin, which\n // browsers collapse at the scroll end (Safari especially) — so it sat flush\n // against the prompt area. Padding on this wrapper is part of its box and\n // always renders, so scrollHeight (and jump-to-latest) clears the bubble too.\n return (\n <div className={`${GUTTER} pb-3 md:pb-4`}>\n {pendingApproval && <PermissionRequestBubble key={pendingApproval.id} agentId={agentId} approval={pendingApproval} />}\n {showBusy && <BusyIndicator blockedLabel={blockedLabel} onInterrupt={canInterrupt ? onInterrupt : undefined} />}\n </div>\n )\n}\n\ninterface VirtualTimelineProps {\n agentId: string\n agentStatus?: string\n timeline: TimelineEntry[]\n hasMore: boolean\n loading: boolean\n loadedInitial: boolean\n showReasoning: boolean\n pendingApproval?: ProviderPendingApproval\n blockedLabel?: string\n canInterrupt: boolean\n // Chat search (#535): the set of matched row keys (highlighted), the current match key\n // (scrolled into view + emphasized), and whether search is active at all.\n searchActive?: boolean\n searchCurrentKey?: string | null\n searchMatchKeys?: Set<string>\n onAtBottomChange?: (atBottom: boolean) => void\n // Lift the Virtuoso scroller element up to ChatPanel so the pinned \"Last prompt\" banner\n // (StickyPromptBanner, rendered as a sibling above this timeline) can observe it (#545).\n onScrollerRef?: (el: HTMLElement | null) => void\n onLoadOlder: () => void\n onInterrupt: () => void\n onOpenReferencedPath: (path: string, line?: number) => void\n onPreviewReferencedPath: (path: string, line?: number, anchor?: DOMRect) => void\n onPreviewReferencedPathEnd: () => void\n}\n\ninterface TimelineAnchor {\n key: string | null\n index: number\n}\n\nfunction anchorForTimeline(timeline: TimelineEntry[]): TimelineAnchor {\n const anchorIndex = timeline.findIndex((entry) => entry.type !== 'date' && entry.type !== 'created')\n const index = anchorIndex >= 0 ? anchorIndex : 0\n const entry = timeline[index]\n return { key: entry ? timelineEntryKey(entry) : null, index }\n}\n\nfunction usePrependFirstItemIndex(agentId: string, timeline: TimelineEntry[]): number {\n const [firstItemIndex, setFirstItemIndex] = useState(() => FIRST_ITEM_INDEX_BASE - timeline.length)\n const previous = useRef<{ agentId: string; anchor: TimelineAnchor }>({\n agentId,\n anchor: anchorForTimeline(timeline),\n })\n\n useLayoutEffect(() => {\n const nextAnchor = anchorForTimeline(timeline)\n const prev = previous.current\n\n setFirstItemIndex((current) => {\n if (prev.agentId !== agentId) return FIRST_ITEM_INDEX_BASE - timeline.length\n if (!prev.anchor.key) return current\n const anchorIndex = timeline.findIndex((entry) => timelineEntryKey(entry) === prev.anchor.key)\n const prependedRows = anchorIndex - prev.anchor.index\n return prependedRows > 0 ? current - prependedRows : current\n })\n\n previous.current = { agentId, anchor: nextAnchor }\n }, [agentId, timeline])\n\n return firstItemIndex\n}\n\nexport function VirtualTimeline({\n agentId,\n agentStatus,\n timeline,\n hasMore,\n loading,\n loadedInitial,\n showReasoning,\n pendingApproval,\n blockedLabel,\n canInterrupt,\n searchActive,\n searchCurrentKey,\n searchMatchKeys,\n onAtBottomChange,\n onScrollerRef,\n onLoadOlder,\n onInterrupt,\n onOpenReferencedPath,\n onPreviewReferencedPath,\n onPreviewReferencedPathEnd,\n}: VirtualTimelineProps) {\n const virtuosoRef = useRef<VirtuosoHandle>(null)\n const scrollerRef = useRef<HTMLElement | null>(null)\n const [atBottom, setAtBottom] = useState(true)\n // Debounced busy state for the footer. agentStatus flips idle→busy→idle rapidly between an\n // agent's tool/narration steps; the raw value would mount/unmount the busy footer on every\n // flip, and each mount/unmount changes the list height → fires totalListHeightChanged → the\n // pin re-scrolls, so the whole chat \"shakes\" through a turn (#510). Going busy shows the\n // footer immediately (responsive), but going idle lingers briefly so a momentary idle between\n // steps doesn't collapse it — the footer stays a stable height for the whole turn and only\n // settles once when the agent is genuinely done.\n const isBusy = agentStatus === 'busy'\n const [stableBusy, setStableBusy] = useState(isBusy)\n useLayoutEffect(() => {\n if (isBusy) {\n setStableBusy(true)\n return\n }\n const timer = setTimeout(() => setStableBusy(false), 600)\n return () => clearTimeout(timer)\n }, [isBusy])\n const firstItemIndex = usePrependFirstItemIndex(agentId, timeline)\n const latestEntry = timeline.length > 0 ? timeline[timeline.length - 1]! : null\n const latestKey = latestEntry ? timelineEntryKey(latestEntry) : null\n // The newest tail entry is the user's OWN just-sent prompt. When you send, you always want\n // to see your prompt (and the response that follows) regardless of where you had scrolled —\n // so this re-arms the stick and forces the settle pin even if you were reading history.\n const latestIsOwnPrompt = (latestEntry?.type === 'message' || latestEntry?.type === 'initial-prompt') && latestEntry.msg.from === HUMAN_AGENT_ID\n\n // Scroll-memory plumbing (#517/#676). Refs let the capture below stay a stable callback while\n // reading the live timeline + firstItemIndex (the rendered rows carry a data-item-index in the\n // firstItemIndex-offset space, so the data-array index is data-item-index - firstItemIndex).\n const timelineRef = useRef(timeline)\n timelineRef.current = timeline\n const loadingRef = useRef(loading)\n loadingRef.current = loading\n const loadedInitialRef = useRef(loadedInitial)\n loadedInitialRef.current = loadedInitial\n const firstItemIndexRef = useRef(firstItemIndex)\n firstItemIndexRef.current = firstItemIndex\n // agentId for the EAGER saves below — the scroll callbacks are stable, so they read the live\n // agent from a ref instead of closing over a stale prop.\n const agentIdRef = useRef(agentId)\n agentIdRef.current = agentId\n\n // Capture the reading position straight from the DOM (#676): the first rendered row whose box\n // crosses the viewport top is the real visible top — immune to the increaseViewportBy overscan\n // that polluted the old rangeChanged.startIndex. getBoundingClientRect forces layout, so this is\n // rAF-coalesced and the caller only fires it while reading history (stick released); the sticky\n // case restores to the bottom and never needs it.\n //\n // We write the result straight to agentScrollMemory (EAGER), not via an unmount-cleanup save.\n // The cleanup approach loses the position under React StrictMode: its dev mount→unmount→remount\n // cycle runs the cleanup with freshly-initialised refs and overwrites the real reading position\n // with a reset {stick:true} — the latent reason #517's restore never held in dev. Eager saves\n // are keyed to the live agent and only fire on a genuine reading scroll, so a throwaway remount\n // never clobbers them.\n const captureScheduledRef = useRef(false)\n const captureReadingPosition = useCallback(() => {\n if (captureScheduledRef.current) return\n captureScheduledRef.current = true\n requestAnimationFrame(() => {\n captureScheduledRef.current = false\n const el = scrollerRef.current\n if (!el) return\n const viewportTop = el.getBoundingClientRect().top\n const rows = Array.from(el.querySelectorAll<HTMLElement>('[data-item-index]'))\n for (const row of rows) {\n const rect = row.getBoundingClientRect()\n if (rect.bottom > viewportTop + 1) {\n const idx = Number(row.getAttribute('data-item-index')) - firstItemIndexRef.current\n const entry = timelineRef.current[idx]\n const anchor = entry ? timelineEntryAnchor(entry) : null\n setChatScroll(agentIdRef.current, {\n stick: false,\n topKey: entry ? timelineEntryKey(entry) : null,\n ...(anchor ? { anchorMessageId: anchor.messageId, anchorEndMessageId: anchor.endMessageId } : {}),\n offset: Math.max(0, Math.round(viewportTop - rect.top)),\n })\n return\n }\n }\n })\n }, [])\n // Compute the initial top-most data index ONCE per mount. If the user was reading history,\n // start Virtuoso at the saved row (no bottom-snap flicker on the cached path); otherwise the\n // usual \"start at the last item\". Resolved against the timeline present at first render — for\n // an uncached chat the row may not be loaded yet, so the restore effect retries on arrival.\n const initialTopIndexRef = useRef<number | null>(null)\n if (initialTopIndexRef.current === null) {\n const saved = getChatScroll(agentId)\n let idx = -1\n if (saved && !saved.stick && (saved.topKey || saved.anchorMessageId !== undefined)) {\n idx = resolveTimelineAnchorIndex(timeline, {\n topKey: saved.topKey,\n messageId: saved.anchorMessageId,\n endMessageId: saved.anchorEndMessageId,\n })\n }\n initialTopIndexRef.current = idx >= 0 ? idx : Math.max(0, timeline.length - 1)\n }\n\n const lastSeenAtBottomKey = useRef<string | null>(latestKey)\n const previousAgentId = useRef(agentId)\n if (previousAgentId.current !== agentId) {\n previousAgentId.current = agentId\n lastSeenAtBottomKey.current = latestKey\n }\n const lastSeenIndex = lastSeenAtBottomKey.current\n ? timeline.findIndex((entry) => timelineEntryKey(entry) === lastSeenAtBottomKey.current)\n : -1\n // Count only what the AGENT sent — your own outbound prompt is appended to the\n // tail too, but it isn't \"new\" to you, so counting it made the badge tick up the\n // instant you hit send. Outbound = from HUMAN_AGENT_ID. Notice pills don't count.\n const newTailCount = !atBottom && lastSeenIndex >= 0\n ? timeline.slice(lastSeenIndex + 1).filter((entry) => entry.type === 'message' && entry.msg.from !== HUMAN_AGENT_ID).length\n : 0\n\n useLayoutEffect(() => {\n if (atBottom) lastSeenAtBottomKey.current = latestKey\n }, [atBottom, latestKey])\n\n // Read at-bottom live without making it an effect dependency: the settle below\n // must fire on NEW tail content, not when you happen to scroll near the bottom\n // (which would yank away the atBottomThreshold slack and feel grabby).\n const atBottomRef = useRef(atBottom)\n atBottomRef.current = atBottom\n\n // \"Stick to bottom\" INTENT — gates the settle pin AND followOutput. Starts true per\n // mount (opening a chat shows its latest), and the key={agentId} remount resets it true\n // on every switch. It must NOT be Virtuoso's atBottom state: during a fresh mount the\n // content renders in stages and momentarily leaves us at the TOP (atBottom flips false),\n // which would suppress the very pin that should drive us to the bottom — the exact reason\n // the loop never ran and the tail stayed clipped. It is instead driven by a real-scroll\n // detector (see setScrollerRef): a genuine USER scroll-up releases it, reaching the bottom\n // re-arms it. Crucially it is NOT released by atBottom flipping false, because an in-place\n // row growth (streaming Codex/Claude activity, async Shiki/image/font) flips atBottom false\n // on the same tick it grows — indistinguishable from a scroll-up — and that false release\n // was the #515 jump-to-end-while-scrolled-up bug. hasPinnedRef tracks whether the initial\n // settle has reached the bottom once (used only inside pinToBottom's loop).\n // Initial stick intent is restored from per-agent scroll memory (#517): if the user left this\n // chat reading history, switching back stays unstuck (and the restore effect below returns\n // them to their row) instead of snapping to the bottom. Defaults to true for a never-seen chat.\n const stickToBottomRef = useRef(getChatScroll(agentId)?.stick ?? true)\n const hasPinnedRef = useRef(false)\n\n // Reading-restore convergence state (#690). restoreActiveRef is true while the convergent\n // restore loop is running (mirrors pinToBottom for the non-sticky path) — it suppresses\n // captureReadingPosition so the loop's OWN programmatic re-pins never overwrite the saved\n // anchor mid-converge. cancelRestoreRef holds the loop's stop function; the real-scroll\n // detector calls it the instant the user takes over (or reaches the bottom) so the loop\n // never fights a real gesture — the same releaseToRead infra that releases the bottom stick.\n const restoreActiveRef = useRef(false)\n const cancelRestoreRef = useRef<(() => void) | null>(null)\n\n // Real-scroll detector state (see setScrollerRef). lastScrollTopRef tracks the previous\n // scrollTop so we can read scroll DIRECTION; programmaticUntilRef marks a short window\n // after our own programmatic scrolls (pins, footer nudges) so they never masquerade as a\n // user scroll-up and release the stick. markProgrammatic is called by every code path that\n // scrolls the list itself.\n const lastScrollTopRef = useRef(0)\n const programmaticUntilRef = useRef(0)\n const markProgrammatic = useCallback(() => {\n programmaticUntilRef.current = performance.now() + 150\n }, [])\n\n // Convergent bottom pin — the ONE routine shared by the agent-switch/append\n // settle and the manual jump button. Off-screen rows are only height-ESTIMATED,\n // so a bare scrollTo(scrollHeight) from far up under-shoots: the real (taller)\n // heights only land as rows render mid-scroll, stranding you mid-conversation.\n // Worst on a fresh key={agentId} mount (agent switch) with tall, height-variable\n // Codex activity rows — those measure LAZILY, so the content height keeps GROWING\n // for several frames after the scroll. A fixed 2-frame settle (the prior fix)\n // stopped before that growth finished and undershot; Claude's shorter rows happen\n // to converge inside 2 frames, which is why it only rouletted on Codex chats.\n //\n // ONE scrollToIndex up front forces Virtuoso to render+measure the true tail — needed\n // when jumping from far up (the manual button), where the last rows aren't in the\n // rendered window and a bare scrollTo(scrollHeight) would target an under-estimated\n // height. Then hard-pin to scrollHeight every frame for the whole settle window.\n //\n // Why pin EVERY frame to a time cap instead of detecting convergence and exiting\n // early: on a fresh key={agentId} mount Virtuoso does a one-time async scroll-anchor\n // reposition that lands the tail ~50px SHORT of the true bottom, and it happens a\n // handful of frames AFTER the size estimate has already gone stable. So ANY early\n // exit — whether it watches scrollHeight stability (the prior fix's trap, and my\n // first pass) or even live position — can declare victory in ~30ms and quit before\n // that late reposition fires, leaving the last message clipped with nothing left to\n // correct it (verified live: the loop ended at dist≈0, then Virtuoso pulled it to 56\n // and it stuck). Re-pinning every frame across the full window simply OVERWRITES that\n // reposition the frame after it happens; the last frame before the cap lands us at\n // the true bottom, and once the mount settles a scrollTo holds there (verified). The\n // cap also guarantees it can never spin forever. scrollToIndex is NOT repeated in the\n // loop — its align:'end' rests ~50px short on a still-settling estimate and re-queues\n // that position each frame, FIGHTING the scrollTo. Always 'auto' (instant): a 'smooth'\n // scroll re-armed each frame never completes and re-arms the streaming jitter we\n // fixed. scrollHeight includes the Footer (busy / pending-approval bubble renders\n // inside the scroller), so the pin clears it too. The big-distance bail respects a\n // user who deliberately flings up mid-window (a reposition is only tens of px, a real\n // scroll is hundreds) without aborting the jump-from-far-up button (whose up-front\n // scrollTo already brought us near the bottom before the loop's first frame). Returns\n // a cleanup that cancels the in-flight loop so a rapid re-fire (streaming tail\n // appends, or a fast double agent-switch) replaces the previous loop, not stacks it.\n const pinToBottom = useCallback(() => {\n markProgrammatic()\n virtuosoRef.current?.scrollToIndex({ index: 'LAST', align: 'end' })\n const MAX_MS = 800\n const USER_SCROLL_BAIL = 300\n const AT_BOTTOM = 64\n const start = performance.now()\n let raf = 0\n let cancelled = false\n let reachedBottom = false\n const step = () => {\n if (cancelled) return\n // A genuine user scroll-up (wheel / touch-drag, see setScrollerRef) releases the stick\n // mid-settle — bail the instant they start reading so the settle can never yank the view\n // back down (#676, the iOS jump-while-reading). Safe through mount churn: stick is released\n // ONLY by a real user gesture, never by reflow or an atBottom flip, so the loop still runs\n // to completion on a fresh switch where the user isn't touching anything.\n if (!stickToBottomRef.current) return\n // Re-read the scroller EVERY frame, never abort on a null one. On a key={agentId}\n // remount with cached data this routine fires (settle effect) BEFORE Virtuoso has\n // mounted its scroller, so scrollerRef is still null on the first frame(s) — the\n // old early `if (!el) return` meant the whole pin silently no-opped on remounts\n // and the tail sat clipped. Spinning until the scroller appears (within the window)\n // and pinning from then on fixes it; the first mount only ever worked because async\n // data load happened to delay this past the scroller mount.\n const el = scrollerRef.current\n if (el) {\n const dist = el.scrollHeight - el.clientHeight - el.scrollTop\n // \"At bottom\" only COUNTS once the conversation has actually loaded — i.e. there\n // is real scrollable content. A chat opens on an empty placeholder whose\n // scrollHeight == clientHeight (zero scroll range): the loop sees dist 0 there and\n // would mark hasPinned, but that's the bottom of NOTHING. Then the real content\n // explodes in, atBottom flips false, and a premature hasPinned releases the stick\n // (misread as a user scroll-up) — leaving the tail clipped on ~40% of switches.\n const hasContent = el.scrollHeight - el.clientHeight > AT_BOTTOM\n if (dist <= AT_BOTTOM && hasContent) {\n reachedBottom = true\n hasPinnedRef.current = true\n }\n // Bail only on a LARGE distance AFTER we've actually pinned to loaded content —\n // that's a user scrolling up. Before then a large distance is just mount churn\n // (content rendering in stages leaves us far from the bottom); bailing there would\n // re-introduce the clipped tail.\n if (reachedBottom && dist > USER_SCROLL_BAIL) return\n markProgrammatic()\n el.scrollTo({ top: el.scrollHeight, behavior: 'auto' })\n }\n if (performance.now() - start > MAX_MS) return\n raf = requestAnimationFrame(step)\n }\n raf = requestAnimationFrame(step)\n return () => {\n cancelled = true\n cancelAnimationFrame(raf)\n }\n }, [markProgrammatic])\n\n // Pin to the measured bottom whenever the tail changes while we're sticking to it:\n // a fresh agent message, your own sent prompt, OR a fresh key={agentId} mount on\n // agent switch (where this effect's first run IS the mount). followOutput /\n // initialTopMostItemIndex only pin to the ESTIMATED height, then the real (taller)\n // content renders and the true bottom drops below the fold — worst on a Codex switch\n // with tall activity rows, which stranded you mid-conversation. pinToBottom drives to\n // the bottom and re-pins across the settle window until lazy measurement finishes.\n // Gated on stickToBottomRef, NOT atBottomRef: on a switch the content renders in\n // stages and atBottom briefly reads false (we're momentarily at the top), which used\n // to suppress this pin entirely on ~30% of switches and leave the tail clipped. stick\n // stays true through that churn and only releases on a genuine user scroll-up (see its\n // note + handleAtBottomChange). Keyed on latestKey only — and latestKey is the turn's\n // FIRST step, so in-place streaming growth doesn't retrigger it; only a genuinely new\n // tail entry (or an agent switch) does. The cleanup cancels an in-flight settle loop.\n useLayoutEffect(() => {\n // Sending your own prompt always re-arms the stick: you want to watch your prompt and the\n // ensuing response land, even if you had scrolled up reading history (#514). The settle\n // loop runs across the layout window, so the prompt is in view by the time it finishes,\n // and the response — a later, separate latestKey change — re-pins while still stuck.\n if (latestIsOwnPrompt) {\n stickToBottomRef.current = true\n // Sending re-arms the stick; persist it through the same seam (#759) so the conversation\n // re-opens pinned, not relying on the post-pin onScroll side channel to write it.\n setChatScroll(agentIdRef.current, { stick: true, topKey: null, offset: 0 })\n }\n if (!stickToBottomRef.current) return\n return pinToBottom()\n }, [latestKey, latestIsOwnPrompt, pinToBottom])\n\n // Restore the saved read position on mount, CONVERGENTLY (#690). initialTopMostItemIndex\n // already starts the chat at the saved ROW (no bottom-snap flicker); this effect refines it to\n // the exact PIXEL by re-aligning the row to the viewport top plus the saved within-row offset.\n // Only runs when the saved state was \"reading history\" (not sticky); the sticky case is driven\n // by the pin settle effect above. Mount-only by design.\n //\n // Why a loop, not the old single-shot (#690 root cause): a one-shot scrollToIndex fires the\n // moment the target row exists, but Virtuoso computes that scroll from height ESTIMATES for the\n // off-screen rows ABOVE the anchor — and those are too short, because Shiki highlighting\n // (code-preview.tsx) + image loads (MessageBubble.tsx) + lazy markdown haven't expanded yet.\n // After the one-shot fires, those rows grow, push the anchor down, and the viewport lands ~1/3\n // up with no re-correction. Bottom mode never had this bug because pinToBottom is a convergent\n // rAF loop. This mirrors that: re-apply scrollToIndex to the SAME saved anchor every frame\n // across an ~800ms settle window. Re-applying is safe and self-correcting — scrollToIndex\n // recomputes from CURRENTLY-MEASURED heights, so each frame re-lands on the true anchor as rows\n // above finish growing. We re-RESOLVE the key (not a cached index) every frame, so a load-older\n // prepend shifting firstItemIndex mid-restore can't desync the target (the earlier reason a\n // re-asserting attempt was rejected — it corrected by a stale index). The loop hard-stops the\n // instant the user scrolls (cancelRestoreRef, wired into the real-scroll detector) so it never\n // fights a real gesture. Hydration and uncached chat loads are asynchronous, so waiting for the\n // row is data/settle-based: retry while the initial load is pending, then give up only after the\n // loaded content height has gone stable (with a long safety cap). Convergence time is still\n // measured from FIRST resolve.\n useLayoutEffect(() => {\n let cleanupRestore: (() => void) | null = null\n let effectCancelled = false\n void hydrateChatScroll().then(() => {\n if (effectCancelled) return\n const saved = getChatScroll(agentIdRef.current)\n if (!saved || saved.stick || (!saved.topKey && saved.anchorMessageId === undefined)) return\n // We are restoring a reading position, so we are NOT sticky — assert it here too (#759).\n // On a fresh tab/device, hydration can complete after first render; this converges the live\n // stick ref with the hydrated non-sticky state before any tail update can follow to bottom.\n stickToBottomRef.current = false\n const target = { topKey: saved.topKey, messageId: saved.anchorMessageId, endMessageId: saved.anchorEndMessageId }\n const offset = saved.offset\n const SETTLE_MS = 800\n const STABLE_UNRESOLVED_MS = 1200\n const MAX_UNRESOLVED_MS = 30_000\n let raf = 0\n let cancelled = false\n let resolvedAt = 0\n let lastHeight = -1\n let stableSince = 0\n const start = performance.now()\n restoreActiveRef.current = true\n const finish = () => {\n cancelled = true\n cancelAnimationFrame(raf)\n restoreActiveRef.current = false\n if (cancelRestoreRef.current === finish) cancelRestoreRef.current = null\n }\n cleanupRestore = finish\n cancelRestoreRef.current = finish\n const step = () => {\n if (cancelled) return\n const idx = resolveTimelineAnchorIndex(timelineRef.current, target)\n const now = performance.now()\n if (idx >= 0) {\n if (resolvedAt === 0) resolvedAt = now\n markProgrammatic()\n virtuosoRef.current?.scrollToIndex({ index: idx, align: 'start', offset })\n }\n if (resolvedAt === 0) {\n const el = scrollerRef.current\n const height = el ? el.scrollHeight : timelineRef.current.length\n const waitingForInitialData = loadingRef.current || !loadedInitialRef.current || timelineRef.current.length === 0\n if (waitingForInitialData || height !== lastHeight) {\n lastHeight = height\n stableSince = waitingForInitialData ? 0 : now\n }\n const stableEnough = stableSince > 0 && now - stableSince >= STABLE_UNRESOLVED_MS\n const overSafetyCap = now - start >= MAX_UNRESOLVED_MS\n if (!stableEnough && !overSafetyCap) raf = requestAnimationFrame(step)\n else finish()\n return\n }\n if (now - resolvedAt < SETTLE_MS) raf = requestAnimationFrame(step)\n else finish()\n }\n raf = requestAnimationFrame(step)\n })\n return () => {\n effectCancelled = true\n cleanupRestore?.()\n }\n }, [markProgrammatic])\n\n // The Footer (busy bubble / pending approval) renders BELOW the last data item, and\n // followOutput / totalListHeightChanged only react to DATA rows — the footer is neither, so\n // when it first appears nothing scrolls and the agent can silently look idle (#512). Nudge to\n // the true bottom on appearance, gated on the stick INTENT (not Virtuoso's atBottom, which is\n // unreliable during the churn around a status flip and left the indicator clipped). After\n // sending a prompt the stick is armed (#514), so the busy indicator that follows reliably\n // scrolls in; once the user has scrolled up the stick is clear and we leave them put (#515).\n // A retry across a short window covers the footer mounting a frame or two after the status\n // flip. Keyed on the footer's PRESENCE (status + approval id, never the approval object which\n // is rebuilt every poll) so it fires once on appearance, not on every refresh.\n const approvalId = pendingApproval?.id\n useLayoutEffect(() => {\n if (!stableBusy && !approvalId) return\n if (!stickToBottomRef.current) return\n let raf = 0\n const start = performance.now()\n const nudge = () => {\n const el = scrollerRef.current\n if (el && stickToBottomRef.current) {\n // Only act while there's a real gap below the fold. Re-arming a scroll every frame\n // once we're already at the bottom is wasteful and a re-armed smooth scroll never\n // settles — instant pinning of just the small footer gap reads fine and converges.\n const dist = el.scrollHeight - el.clientHeight - el.scrollTop\n if (dist > 2) {\n markProgrammatic()\n el.scrollTo({ top: el.scrollHeight, behavior: 'auto' })\n }\n }\n if (performance.now() - start < 300) raf = requestAnimationFrame(nudge)\n }\n raf = requestAnimationFrame(nudge)\n return () => cancelAnimationFrame(raf)\n }, [stableBusy, approvalId, markProgrammatic])\n\n // Scroll the current search match into view (#535). User-driven: fires only when the\n // selected match key changes (typing re-anchors to the first match; prev/next move it).\n // Releasing the stick keeps the bottom-pin from immediately yanking the view back down,\n // and markProgrammatic stops this scroll from reading back as a user scroll-up. centre\n // alignment puts the match mid-viewport so surrounding context is visible.\n useLayoutEffect(() => {\n if (!searchActive || !searchCurrentKey) return\n const idx = timelineRef.current.findIndex((entry) => timelineEntryKey(entry) === searchCurrentKey)\n if (idx < 0) return\n stickToBottomRef.current = false\n markProgrammatic()\n virtuosoRef.current?.scrollToIndex({ index: idx, align: 'center' })\n }, [searchActive, searchCurrentKey, markProgrammatic])\n\n // The real-scroll detector lives on the scroller element. A native 'scroll' listener fires\n // for EVERY scroll cause (wheel, touch, scrollbar drag, keyboard) so it captures user intent\n // regardless of input method. We read DIRECTION + position: reaching the bottom re-arms the\n // stick; a genuine user scroll-up away from the bottom releases it. Scrolls WE trigger (pins,\n // footer nudges) are flagged via markProgrammatic and never release the stick — that is what\n // distinguishes a real scroll-up from a programmatic reposition or an in-place growth's\n // scroll-anchor adjustment, the corruption that the old atBottom-derived release suffered.\n const detachScrollDetectorRef = useRef<(() => void) | null>(null)\n const setScrollerRef = useCallback((ref: HTMLElement | Window | null) => {\n const el = ref instanceof HTMLElement ? ref : null\n scrollerRef.current = el\n onScrollerRef?.(el)\n detachScrollDetectorRef.current?.()\n detachScrollDetectorRef.current = null\n if (!el) return\n lastScrollTopRef.current = el.scrollTop\n // Release the stick on genuine user scroll-INTENT, UNCONDITIONALLY — ignoring the programmatic\n // window (#676). This is the iOS jump-while-reading fix: while an agent streams, pinToBottom /\n // totalListHeightChanged re-mark the programmatic window every frame, so the position-only\n // detector below could never see a \"real\" scroll-up — every user scroll read as programmatic\n // and the view kept yanking back to the bottom. wheel and touchmove are emitted ONLY by the\n // user (a programmatic scrollTo never fires them), so they are unambiguous intent and always\n // win. The bottom re-arm in onScroll still runs after, so a tiny nudge that stays within 64px\n // of the bottom keeps following — only a real move up makes the release stick.\n const releaseToRead = () => {\n stickToBottomRef.current = false\n // A real gesture wins: stop any convergent reading-restore loop so it never yanks the view\n // back to the saved anchor while the user is actively scrolling (#690).\n cancelRestoreRef.current?.()\n }\n const onScroll = () => {\n const top = el.scrollTop\n const dist = el.scrollHeight - el.clientHeight - top\n const programmatic = performance.now() < programmaticUntilRef.current\n if (dist <= 64) {\n // Reaching the bottom re-arms the stick AND clears any saved reading position (#676), so a\n // return opens at the latest instead of restoring an offset the user has scrolled past.\n if (!restoreActiveRef.current) {\n if (!stickToBottomRef.current) setChatScroll(agentIdRef.current, { stick: true, topKey: null, offset: 0 })\n stickToBottomRef.current = true\n // At the bottom there is no anchor to converge on — stop the restore loop (#690).\n cancelRestoreRef.current?.()\n }\n } else if (!programmatic && top < lastScrollTopRef.current - 1) {\n // Scrollbar-drag / keyboard scroll-up (which emit no wheel/touch) still release here.\n stickToBottomRef.current = false\n cancelRestoreRef.current?.()\n }\n lastScrollTopRef.current = top\n // Capture the live position while reading so a return restores the exact offset (#676).\n // Suppressed while the restore loop is converging: its own programmatic re-pins would\n // otherwise overwrite the saved anchor with a not-yet-settled position (#690).\n if (!stickToBottomRef.current && !restoreActiveRef.current) captureReadingPosition()\n }\n const onWheel = (event: WheelEvent) => {\n // Any wheel during a reading-restore is the user taking over — cancel convergence (#690).\n cancelRestoreRef.current?.()\n if (event.deltaY < 0) releaseToRead()\n }\n let touchStartY = 0\n const onTouchStart = (event: TouchEvent) => {\n touchStartY = event.touches[0]?.clientY ?? 0\n }\n const onTouchMove = (event: TouchEvent) => {\n const dy = (event.touches[0]?.clientY ?? 0) - touchStartY\n // Any real finger drag cancels a reading-restore (#690); a small threshold ignores tap jitter.\n if (Math.abs(dy) > 6) cancelRestoreRef.current?.()\n // Finger dragging DOWN (clientY increasing) scrolls content UP toward older messages = the\n // user reading history. A small threshold ignores tap jitter.\n if (dy > 6) releaseToRead()\n }\n el.addEventListener('scroll', onScroll, { passive: true })\n el.addEventListener('wheel', onWheel, { passive: true })\n el.addEventListener('touchstart', onTouchStart, { passive: true })\n el.addEventListener('touchmove', onTouchMove, { passive: true })\n detachScrollDetectorRef.current = () => {\n el.removeEventListener('scroll', onScroll)\n el.removeEventListener('wheel', onWheel)\n el.removeEventListener('touchstart', onTouchStart)\n el.removeEventListener('touchmove', onTouchMove)\n }\n }, [onScrollerRef, captureReadingPosition])\n\n const handleAtBottomChange = useCallback((bottom: boolean) => {\n setAtBottom(bottom)\n // Re-arm the stick when Virtuoso confirms we're at the bottom (belt-and-suspenders with\n // the scroll detector). We deliberately do NOT release the stick here on bottom=false:\n // an in-place row growth flips atBottom false on the same tick it grows, which is\n // indistinguishable from a user scroll-up at this layer and caused the #515 jump. Release\n // is owned solely by the real-scroll detector (setScrollerRef), which reads scroll\n // direction and ignores our own programmatic scrolls.\n //\n // BUT suppress the re-arm while a reading-restore is converging (#759). On a fresh\n // tab/device the per-user position hydrates from the server ASYNCHRONOUSLY, so it can land\n // after first render — when it does, initialTopMostItemIndex has already defaulted to the\n // bottom, so Virtuoso mounts AT the bottom and fires bottom=true here BEFORE the restore loop\n // scrolls up to the saved row. Without this guard that transient bottom re-armed the stick to\n // true, clobbering the restore's stick=false, and the next tail message followed to the bottom\n // and yanked the reader off their restored position (caught live, not in any unit test). The\n // restore loop owns the position while it runs; a genuine user scroll-to-bottom (restore not\n // active) still re-arms exactly as before.\n if (bottom && !restoreActiveRef.current) stickToBottomRef.current = true\n onAtBottomChange?.(bottom)\n }, [onAtBottomChange])\n\n const handleStartReached = useCallback(() => {\n if (!hasMore || loading) return\n onLoadOlder()\n }, [hasMore, loading, onLoadOlder])\n\n const jumpToLatest = useCallback(() => {\n lastSeenAtBottomKey.current = latestKey\n // Same convergent pin as the settle effect. The button can land far up a tall\n // Codex chat where lazy measurement is heaviest, so it needs the converge-to-\n // settled-height loop exactly as much as the agent switch does (iPad Safari first\n // exposed the undershoot here; Android's continuous re-measure on manual drag hid\n // it). Instant, not smooth: a per-frame re-armed smooth scroll never completes on\n // growing content — the convergent snap is the robust choice and reads fine.\n stickToBottomRef.current = true\n // Converge \"Latest\" onto the SAME persisted sticky state as a manual scroll-to-bottom (#759).\n // Previously this only flipped the live ref and leaned on the onScroll bottom-reach side channel\n // to write the sticky flag through — but if the view was already within the at-bottom threshold,\n // pinToBottom's scrollTo never moved the element, no `scroll` event fired, and the stored state\n // stayed the stale {stick:false} from the prior reading scroll. So \"Latest\" looked sticky in the\n // moment but re-opened un-stuck. Writing through the seam here makes the two paths identical and\n // persists the intent immediately, independent of whether a scroll event happens to fire.\n setChatScroll(agentId, { stick: true, topKey: null, offset: 0 })\n pinToBottom()\n }, [agentId, latestKey, pinToBottom])\n\n const Header = useMemo(() => {\n return function TimelineHeader() {\n return (\n <div className={GUTTER}>\n <TimelineStartMarker hasMore={hasMore} loading={loading} loadedInitial={loadedInitial} hasItems={timeline.length > 0} />\n </div>\n )\n }\n }, [hasMore, loadedInitial, loading, timeline])\n\n // Keep the Footer component identity module-stable (TimelineFooter) and pass the dynamic\n // values through Virtuoso's context. pendingApproval gets a fresh object reference on every\n // poll/SSE refresh (providerPendingApproval rebuilds it, no upstream memo); recreating the\n // Footer closure on that churn made Virtuoso remount the approval form and discard the user's\n // selection ~1s after they clicked. Context updates re-render the footer without remounting.\n const footerContext = useMemo<TimelineFooterContext>(\n () => ({ agentId, busy: stableBusy, pendingApproval, blockedLabel, canInterrupt, onInterrupt }),\n [agentId, stableBusy, blockedLabel, canInterrupt, onInterrupt, pendingApproval],\n )\n\n const EmptyPlaceholder = useMemo(() => {\n return function TimelineEmptyPlaceholder() {\n return (\n <div className=\"flex h-full flex-col items-center justify-center text-center\">\n {loading ? <Loader2 className=\"mb-2 h-5 w-5 animate-spin text-muted-foreground\" /> : <MessageSquare className=\"mb-2 h-8 w-8 text-zinc-600\" />}\n <p className=\"text-xs text-muted-foreground\">{loading ? 'Loading messages' : 'No messages yet'}</p>\n </div>\n )\n }\n }, [loading])\n\n const components = useMemo(() => ({ Header, Footer: TimelineFooter, EmptyPlaceholder }), [EmptyPlaceholder, Header])\n\n return (\n <div className=\"relative min-h-0 flex-1\">\n {/*\n key={agentId} is KEPT (not swapped for a mounted-Virtuoso + scrollToIndex-on-switch).\n Each agent's timeline is entirely different data with per-agent computeItemKeys, so a\n mounted instance reuses zero measurement cache across a switch anyway — the only thing\n keeping it mounted would buy is avoiding the remount, at the cost of having to manually\n reset scroll position, firstItemIndex anchoring, and atBottom state on every agentId\n change (cross-agent state bleed is exactly the kind of bug this view has fought before).\n The remount gives a clean slate for free; the roulette was never the remount, it was the\n fixed-frame settle — now convergent (pinToBottom), which makes the clean-mount path solid.\n */}\n <Virtuoso\n key={agentId}\n ref={virtuosoRef}\n scrollerRef={setScrollerRef}\n className=\"h-full py-3 md:py-4\"\n // Clip horizontal overflow so a bubble can never make the chat scroll sideways past\n // the screen edge. Virtuoso only sets overflowY inline, so this takes effect; code\n // blocks/tables already scroll internally, so nothing meaningful is clipped.\n // Horizontal padding is on the rows (GUTTER), not here — see GUTTER note above.\n // overscrollBehavior contain stops iOS Safari's rubber-band overscroll at the\n // top/bottom from chaining to the page and bouncing back — that bounce fought\n // Virtuoso's programmatic positioning at the bottom (the \"vibrating\" jitter).\n style={{ height: '100%', overflowX: 'hidden', overscrollBehavior: 'contain' }}\n context={footerContext}\n data={timeline}\n firstItemIndex={firstItemIndex}\n // Restored read position for a cached chat (#517) — defaults to the last item (bottom).\n // The mount restore effect (#676) refines this to the exact within-row pixel offset.\n initialTopMostItemIndex={initialTopIndexRef.current ?? Math.max(0, timeline.length - 1)}\n computeItemKey={(_, entry) => timelineEntryKey(entry)}\n itemContent={(index, entry) => {\n // Search highlight is applied at the ROW level (a ring around the matched\n // content), never inside the message renderer — keeps formatted-body untouched\n // while still flagging every hit and emphasizing the current one.\n const key = searchActive ? timelineEntryKey(entry) : ''\n const isMatch = searchActive && searchMatchKeys?.has(key)\n const isCurrent = isMatch && key === searchCurrentKey\n // Avatar grouping (#420 Tier B): show on the LAST bubble of a consecutive same-sender\n // run so the avatar anchors visually to the newest message in the run (iMessage style).\n // Compare against the next entry's sender — a different sender (or a non-message next\n // entry) ends the run and the avatar appears on this bubble.\n const dataIndex = index - firstItemIndex\n const msgSender = (entry.type === 'message' || entry.type === 'initial-prompt') ? entry.msg.from : null\n const nextEntry = timeline[dataIndex + 1]\n const nextSender = (nextEntry?.type === 'message' || nextEntry?.type === 'initial-prompt') ? nextEntry.msg.from : null\n const showAvatar = msgSender !== null && msgSender !== nextSender\n return (\n <div className={GUTTER}>\n <div\n className={cn(\n isMatch && 'rounded-xl ring-1 ring-amber-400/40 transition-shadow',\n isCurrent && 'ring-2 ring-amber-400 bg-amber-400/5',\n )}\n >\n <TimelineRow\n entry={entry}\n agentId={agentId}\n showReasoning={showReasoning}\n showAvatar={showAvatar}\n onOpenReferencedPath={onOpenReferencedPath}\n onPreviewReferencedPath={onPreviewReferencedPath}\n onPreviewReferencedPathEnd={onPreviewReferencedPathEnd}\n />\n </div>\n </div>\n )\n }}\n components={components}\n startReached={handleStartReached}\n atBottomStateChange={handleAtBottomChange}\n atBottomThreshold={64}\n // Driven by the stick INTENT, not Virtuoso's momentary isAtBottom. isAtBottom is\n // corrupted the instant a tall entry appends or grows (it flips false on the same tick\n // the new content lands, before the follow scroll runs), which intermittently dropped\n // the follow and left a fresh message/activity-step/status entry just below the fold —\n // exactly the \"not reliably sticky\" gap #518 targets. stickToBottomRef stays true\n // through that churn (released only by a genuine user scroll-up via the detector), so\n // every appended entry type follows into view while at the bottom, and none follows\n // once the user has scrolled up.\n //\n // 'auto' (instant), NOT 'smooth': react-virtuoso documents that a smooth follow\n // animation can't keep up with rapidly appended content — each new chunk restarts\n // the animation. On iOS Safari that perpetual programmatic scroll fought OS momentum\n // and pinned the layer in a low-res composited state (the \"vibrating + blurry\" bug).\n // Instant pinning settles each frame, so the layer rasterizes sharp and stays put.\n followOutput={() => (stickToBottomRef.current ? 'auto' : false)}\n // followOutput only reacts to item APPENDS — not to an existing row growing\n // taller after mount (async Shiki syntax-highlight / image load / web-font swap,\n // common in tall Codex activity rows). When that late growth lands while we're\n // at the bottom, the true bottom drops below the fold and nothing follows it —\n // this is the residual ~50–90px clip that survived every fixed-window settle:\n // the growth can finish just past any time cap, and the prior fix's 2-frame\n // settle never even looked this late. totalListHeightChanged fires from Virtuoso\n // on EVERY measured-height change, so re-pinning here catches late growth at any\n // time, with no arbitrary window.\n //\n // Gated on the stick INTENT (the real-scroll detector keeps it correct through\n // growth — see stickToBottomRef) AND a small distance. The distance check stays as a\n // second guard so even with stick true we only re-pin a growth-sized drop, never a\n // large jump. Previously this was gated on distance ALONE (≤240px), which yanked a\n // user who had scrolled up only 64–240px to the bottom on every streaming step — the\n // #515 jump-while-scrolled-up bug. With the intent gate, a deliberate scroll-up clears\n // the stick and these height changes leave the viewport untouched; at the bottom the\n // stick stays armed and late growth still scrolls into view. The own scrollTo is\n // flagged programmatic so it can't feed back into the detector as a scroll-up.\n totalListHeightChanged={() => {\n if (!stickToBottomRef.current) return\n const el = scrollerRef.current\n if (!el) return\n const dist = el.scrollHeight - el.clientHeight - el.scrollTop\n if (dist >= 0 && dist <= 240) {\n markProgrammatic()\n el.scrollTo({ top: el.scrollHeight, behavior: 'auto' })\n }\n }}\n increaseViewportBy={{ top: 600, bottom: 600 }}\n />\n {!atBottom && timeline.length > 0 && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"secondary\"\n className=\"absolute bottom-3 right-4 z-20 h-8 gap-1.5 rounded-full border border-border/70 bg-background/95 px-3 text-xs shadow-lg backdrop-blur\"\n onClick={jumpToLatest}\n >\n <ArrowDownToLine className=\"h-3.5 w-3.5\" />\n Latest\n {newTailCount > 0 && (\n <span className=\"ml-0.5 min-w-4 rounded-full bg-primary px-1.5 py-0.5 text-[10px] font-medium leading-none text-primary-foreground\">\n {newTailCount > 99 ? '99+' : newTailCount}\n </span>\n )}\n </Button>\n )}\n </div>\n )\n}\n\nfunction TimelineStartMarker({ hasMore, loading, loadedInitial, hasItems }: { hasMore: boolean; loading: boolean; loadedInitial: boolean; hasItems: boolean }) {\n if (loading) {\n return (\n <div className=\"flex items-center justify-center gap-2 pb-3 text-xs text-muted-foreground\">\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n <span>Loading earlier messages</span>\n </div>\n )\n }\n if (!hasMore && loadedInitial && hasItems) {\n return (\n <div className=\"flex items-center justify-center gap-2 pb-3 text-xs text-muted-foreground/70\">\n <div className=\"h-px flex-1 bg-border\" />\n <span>Beginning of conversation</span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )\n }\n return null\n}\n\nfunction TimelineRow({\n entry,\n agentId,\n showReasoning,\n showAvatar,\n onOpenReferencedPath,\n onPreviewReferencedPath,\n onPreviewReferencedPathEnd,\n}: {\n entry: TimelineEntry\n agentId: string\n showReasoning: boolean\n showAvatar: boolean\n onOpenReferencedPath: (path: string, line?: number) => void\n onPreviewReferencedPath: (path: string, line?: number, anchor?: DOMRect) => void\n onPreviewReferencedPathEnd: () => void\n}) {\n // Per-project #NNN linkify (#533): the conversation peer's resolved project repo, shared\n // across all non-MessageBubble rows (MessageBubble resolves it itself from `peer`).\n const issueRepo = useRelayStore((s) => s.agentsById[agentId]?.issueRepo)\n if (entry.type === 'message') {\n return (\n <MessageBubble\n msg={entry.msg}\n peer={agentId}\n showAvatar={showAvatar}\n onOpenReferencedPath={onOpenReferencedPath}\n onPreviewReferencedPath={onPreviewReferencedPath}\n onPreviewReferencedPathEnd={onPreviewReferencedPathEnd}\n />\n )\n }\n if (entry.type === 'initial-prompt') return <InitialPromptBubble msg={entry.msg} issueRepo={issueRepo} />\n if (entry.type === 'notice') return <NoticePill msg={entry.msg} />\n if (entry.type === 'relay-injection') return <RelayInjectionRow entry={entry} />\n if (entry.type === 'prompt-resolution') return <PromptResolutionRow entry={entry} />\n if (entry.type === 'agent-action') return <AgentActionEntry entry={entry} />\n if (entry.type === 'activity') return <ActivityTrace steps={entry.steps} showReasoning={showReasoning} issueRepo={issueRepo} />\n if (entry.type === 'import-boundary') return <ImportedHistoryMarker history={entry.history} />\n if (entry.type === 'imported-message') return <ImportedMessageBubble entry={entry.entry} sourceLabel={entry.history.sourceAgentLabel || entry.history.sourcePeerId} issueRepo={issueRepo} />\n if (entry.type === 'status') return <StatusMarker event={entry.event} />\n if (entry.type === 'date') return <DateSeparator date={entry.date} />\n return <CreatedMarker timestamp={entry.timestamp} />\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n ArrowLeft,\n CircleStop,\n Download,\n Eraser,\n Flag,\n FolderOpen,\n GitFork,\n MailOpen,\n MailX,\n MessageSquare,\n Minimize2,\n MoreHorizontal,\n Power,\n Terminal,\n Volume2,\n VolumeX,\n X,\n} from 'lucide-react'\nimport { useAgentTerminal } from '@/hooks/use-agent-terminal'\nimport { useRelayStore, useNow } from '@/store'\nimport { AgentRuntimeChips, ContextRing } from '@/components/shared/agent-runtime-summary'\nimport { AgentTypeIcon } from '@/components/shared/agent-type-icon'\nimport { BranchStateBadge } from '@/components/shared/branch-state-badge'\nimport { CopyButton } from '@/components/shared/copy-button'\nimport { StatusDot } from '@/components/shared/status-dot'\nimport { TerminalDialog } from '@/components/shared/terminal-viewer'\nimport { DirectoryContent, FileContent } from '@/components/views/files'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'\nimport { api, apiUpload } from '@/lib/api'\nimport { providerSlashCommands } from '@/lib/slash-commands'\nimport type { SlashCommand } from '@/lib/slash-commands'\nimport { micAvailable, PttRecorder, transcribeClip, voiceTts } from '@/lib/voice'\nimport {\n agentSupportsControlAction,\n displayName,\n isReactionEventMessage,\n messageBody,\n messageMatchesAgentChat,\n providerBlockedState,\n shortPath,\n toTimestamp,\n} from '@/lib/display'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport type { Artifact, AttachmentRef, FileStatResult, InboxThread, Message } from '@/types'\nimport { cn } from '@/lib/utils'\nimport { ChatHeader } from './ChatHeader'\nimport { ChatSearchBar } from './ChatSearchBar'\nimport { Composer } from './Composer'\nimport { FloatingFilePreview } from './FilePreview'\nimport type { PendingAttachment, ReferencedPathInfo } from './types'\nimport {\n chatTimestamp,\n orchestratorForFilePreview,\n parentPath,\n revokePendingAttachmentUrls,\n resolveChatPlanContext,\n supportsSideFilePreview,\n} from './helpers'\nimport { buildTimeline } from './sessionTrace'\nimport { useAgentStatusEvents } from './hooks/useAgentStatusEvents'\nimport { useBackNavProtection } from './hooks/useBackNavProtection'\nimport { useChatSearch } from './hooks/useChatSearch'\nimport { usePresenceHeartbeat } from './hooks/usePresenceHeartbeat'\nimport { PlanGraphPanel, SessionTasksPanel } from './PlanGraphPanel'\nimport { StickyPromptBanner } from './TraceView'\nimport { VirtualTimeline } from './VirtualTimeline'\n\nconst NO_THREAD_HISTORY: Message[] = []\n\n// A human prompt can be captured twice: as a live-session mirror echo\n// (kind:\"session\", type:\"prompt\") and as the relay chat message (kind:\"chat\", from\n// the human). They carry different ids so mergeListById never dedups them. Drop the\n// session echo when a matching human chat message exists — keeping the chat message,\n// which carries delivery/read receipts — so only one prompt bubble renders (#520).\nconst PROMPT_DEDUP_WINDOW_MS = 15_000\n\nfunction isSessionPromptEcho(msg: Message): boolean {\n return msg.kind === 'session' && (msg.payload?.session as { type?: string } | undefined)?.type === 'prompt'\n}\n\nfunction dedupePromptEcho(messages: Message[]): Message[] {\n const humanPrompts = messages.filter((m) => m.kind === 'chat' && m.from === HUMAN_AGENT_ID)\n if (!humanPrompts.length) return messages\n return messages.filter((m) => {\n if (!isSessionPromptEcho(m) || m.from !== HUMAN_AGENT_ID) return true\n const body = messageBody(m).trim()\n if (!body) return true\n const ts = toTimestamp(m.createdAt)\n return !humanPrompts.some((chat) =>\n messageBody(chat).trim() === body && Math.abs(toTimestamp(chat.createdAt) - ts) <= PROMPT_DEDUP_WINDOW_MS\n )\n })\n}\n\nexport function ChatPanel({ threads, onBack, showBackButton }: { threads: InboxThread[]; onBack?: () => void; showBackButton?: boolean }) {\n const selectedInboxThread = useRelayStore((s) => s.selectedInboxThread)\n const agent = useRelayStore((s) => s.selectedInboxThread ? s.agentsById[s.selectedInboxThread] : undefined) || null\n const inboxDrafts = useRelayStore((s) => s.inboxDrafts)\n const now = useNow()\n const sendChatMessage = useRelayStore((s) => s.sendChatMessage)\n const openFilesAt = useRelayStore((s) => s.openFilesAt)\n const openFilesForAgent = useRelayStore((s) => s.openFilesForAgent)\n const openAgentDetail = useRelayStore((s) => s.openAgentDetail)\n const chatSending = useRelayStore((s) => s.chatSending)\n const markInboxThreadRead = useRelayStore((s) => s.markInboxThreadRead)\n const markInboxThreadUnread = useRelayStore((s) => s.markInboxThreadUnread)\n const setReplyDraft = useRelayStore((s) => s.setReplyDraft)\n const exportThread = useRelayStore((s) => s.exportThread)\n const doAgentAction = useRelayStore((s) => s.doAgentAction)\n const workspaceAction = useRelayStore((s) => s.workspaceAction)\n const openWorkspaceFocus = useRelayStore((s) => s.openWorkspaceFocus)\n const forkFromAgent = useRelayStore((s) => s.forkFromAgent)\n const chatHistoryImports = useRelayStore((s) => s.chatHistoryImports)\n const agentChatWindow = useRelayStore((s) => s.agentChatByAgent[s.selectedInboxThread])\n const agentChatMessages = agentChatWindow?.messages ?? NO_THREAD_HISTORY\n const loadOlder = useRelayStore((s) => s.loadOlder)\n const openConfirm = useRelayStore((s) => s.openConfirm)\n const showError = useRelayStore((s) => s.showError)\n const orchestrators = useRelayStore((s) => s.orchestrators)\n const fetchOrchestrators = useRelayStore((s) => s.fetchOrchestrators)\n const showReasoning = useRelayStore((s) => s.showReasoning)\n const voiceTtsEnabled = useRelayStore((s) => s.voiceTtsEnabled)\n const setVoiceTtsEnabled = useRelayStore((s) => s.setVoiceTtsEnabled)\n const voiceInputMode = useRelayStore((s) => s.voiceInputMode)\n const plansByThread = useRelayStore((s) => s.plansByThread)\n\n const fileInputRef = useRef<HTMLInputElement>(null)\n const pttRecorderRef = useRef<PttRecorder | null>(null)\n const [micState, setMicState] = useState<'idle' | 'recording' | 'transcribing'>('idle')\n const pendingAttachmentsRef = useRef<PendingAttachment[]>([])\n const [pendingAttachments, setPendingAttachments] = useState<PendingAttachment[]>([])\n const [dragActive, setDragActive] = useState(false)\n const [filePreview, setFilePreview] = useState<{ orchestratorId: string; path: string; line: number; type: ReferencedPathInfo['type'] } | null>(null)\n const [floatingPreview, setFloatingPreview] = useState<{ orchestratorId: string; path: string; line: number; type: ReferencedPathInfo['type']; anchor: DOMRect } | null>(null)\n const [filePreviewError, setFilePreviewError] = useState('')\n const filePreviewCloseTimer = useRef<number | null>(null)\n const filePreviewRequest = useRef(0)\n // The Virtuoso scroller element, lifted from VirtualTimeline so the pinned \"Last prompt\"\n // banner (rendered above the timeline) can observe whether the prompt is on-screen (#545).\n const [chatScroller, setChatScroller] = useState<HTMLElement | null>(null)\n const statusEvents = useAgentStatusEvents(selectedInboxThread)\n\n const thread = useMemo(\n () => threads.find((t) => t.peer === selectedInboxThread) || null,\n [threads, selectedInboxThread]\n )\n\n const threadMessages = useMemo(() => {\n const ordered = agentChatMessages\n .filter((message) => messageMatchesAgentChat(selectedInboxThread, message) && !isReactionEventMessage(message))\n .sort((a, b) => a.id - b.id)\n return dedupePromptEcho(ordered)\n }, [agentChatMessages, selectedInboxThread])\n\n // Pre-session-destroy window (#183): the agent is running end-of-session work before a\n // compact/clear/restart/shutdown and is intentionally non-addressable. Block the composer\n // so a message can't be fired into a session that's tearing down.\n const agentFinalizing = typeof agent?.meta?.lifecycleAction === 'string' && agent.meta.lifecycleAction.startsWith('finalizing-')\n const { terminalOpen, terminalTarget, terminalOpening, openTerminal: handleOpenTerminal, closeTerminal: handleCloseTerminal } = useAgentTerminal(agent?.id)\n const agentSpawnRequestId = typeof agent?.meta?.spawnRequestId === 'string' ? agent.meta.spawnRequestId as string : ''\n const importedHistory = useMemo(() => {\n return chatHistoryImports.filter((history) =>\n history.targetAgentId === selectedInboxThread ||\n Boolean(agentSpawnRequestId && history.targetSpawnRequestId === agentSpawnRequestId)\n )\n }, [agentSpawnRequestId, chatHistoryImports, selectedInboxThread])\n const blockedState = providerBlockedState(agent)\n const pendingApproval = blockedState?.pendingApproval\n const chatThread = useMemo(() => {\n if (!selectedInboxThread) return null\n if (!thread && threadMessages.length === 0) return null\n const lastMessage = threadMessages[threadMessages.length - 1] ?? thread?.lastMessage ?? null\n const previewMessage = thread?.previewMessage && threadMessages.some((message) => message.id === thread.previewMessage?.id)\n ? thread.previewMessage\n : lastMessage\n return {\n id: thread?.id ?? selectedInboxThread,\n peer: selectedInboxThread,\n messages: threadMessages,\n lastMessage,\n previewMessage,\n attention: thread?.attention ?? { unread: 0, needsHumanResponse: false, score: 0 },\n archived: thread?.archived ?? false,\n draft: thread?.draft ?? '',\n }\n }, [selectedInboxThread, thread, threadMessages])\n const exportableThread = chatThread || (importedHistory.length > 0 ? { peer: selectedInboxThread, messages: [], importedHistory } : null)\n const draft = inboxDrafts[selectedInboxThread] || ''\n\n const tmuxSession = typeof agent?.meta?.tmuxSession === 'string' && (agent.meta.tmuxSession as string).trim() ? agent.meta.tmuxSession as string : null\n const termOrch = tmuxSession ? orchestrators.find((o) => (o as any).managedAgents?.some((m: any) => m.agentId === agent!.id || m.tmuxSession === tmuxSession)) ?? null : null\n const canReadTerminal = Boolean(tmuxSession && termOrch?.status === 'online' && agent?.providerCapabilities?.terminal?.live?.read)\n const canWriteTerminal = Boolean(canReadTerminal && agent?.providerCapabilities?.terminal?.live?.write)\n const canAttachTerminal = agent?.providerCapabilities?.terminal?.attach?.create === true\n const canOpenTerminal = canReadTerminal || canAttachTerminal\n const canCompact = agentSupportsControlAction(agent, 'compact')\n const canClearContext = agentSupportsControlAction(agent, 'clearContext')\n const canShutdown = agentSupportsControlAction(agent, 'shutdown')\n const canInterrupt = agentSupportsControlAction(agent, 'interrupt')\n const interruptAgent = () => { if (agent) void doAgentAction(agent, 'interrupt') }\n\n // Slash-command palette (item 6). Derived purely from the draft during render —\n // no effect syncs it. slashClosed lets Escape dismiss until the draft changes.\n const [slashIndex, setSlashIndex] = useState(0)\n const [slashClosed, setSlashClosed] = useState(false)\n const slashEnabled = agent?.providerCapabilities?.liveSession?.slashCommands === true\n const slashProvider = agent?.providerCapabilities?.model?.provider ?? (typeof agent?.meta?.provider === 'string' ? agent.meta.provider : undefined)\n const slashMatches = (slashEnabled && !slashClosed && /^\\/\\S*$/.test(draft))\n ? providerSlashCommands(slashProvider).filter((c) => c.name.toLowerCase().startsWith(draft.toLowerCase()))\n : []\n const slashActiveIndex = slashMatches.length ? Math.min(slashIndex, slashMatches.length - 1) : 0\n function acceptSlash(cmd: SlashCommand) {\n setReplyDraft(selectedInboxThread, `${cmd.name} `)\n setSlashIndex(0)\n }\n function handleDraftChange(value: string) {\n setReplyDraft(selectedInboxThread, value)\n if (slashClosed) setSlashClosed(false)\n setSlashIndex(0)\n }\n const hasPendingUploads = pendingAttachments.some((item) => item.uploading)\n const readyAttachments = pendingAttachments.filter((item) => item.artifact)\n const hasDraft = draft.trim().length > 0 || pendingAttachments.length > 0\n\n // Broadcast our viewer presence on this agent thread (#390): \"I'm viewing / typing\".\n usePresenceHeartbeat(agent?.id ?? '', draft.trim().length > 0)\n\n // Back navigation protection when draft exists\n const handleBackNav = useCallback(() => {\n // Don't navigate away — the draft is protected\n }, [])\n useBackNavProtection(hasDraft, handleBackNav)\n\n pendingAttachmentsRef.current = pendingAttachments\n\n useEffect(() => {\n return () => {\n revokePendingAttachmentUrls(pendingAttachmentsRef.current)\n }\n }, [])\n\n useEffect(() => {\n if (agent?.meta?.tmuxSession && orchestrators.length === 0) void fetchOrchestrators()\n }, [agent?.id, agent?.meta?.tmuxSession, orchestrators.length])\n\n useEffect(() => {\n return () => {\n if (filePreviewCloseTimer.current !== null) window.clearTimeout(filePreviewCloseTimer.current)\n }\n }, [])\n\n const spawnedById = typeof agent?.spawnedBy === 'string' ? agent.spawnedBy : undefined\n const spawnedByProvider = useRelayStore((s) => spawnedById ? (s.agentsById[spawnedById]?.meta?.provider as string | undefined) : undefined)\n const initialPromptComplete = Boolean(agentChatWindow?.loadedInitial && !agentChatWindow.hasMore)\n const timeline = useMemo(\n () => buildTimeline(threadMessages, statusEvents, agent?.createdAt, importedHistory, { ...(spawnedById ? { spawnedBy: { agentId: spawnedById, provider: spawnedByProvider } } : {}), initialPromptComplete }),\n [threadMessages, statusEvents, agent?.createdAt, importedHistory, spawnedById, spawnedByProvider, initialPromptComplete]\n )\n const planContext = useMemo(() => {\n return resolveChatPlanContext(agent, threadMessages, chatThread?.lastMessage, plansByThread)\n }, [agent, chatThread?.lastMessage, plansByThread, threadMessages])\n\n const search = useChatSearch(timeline)\n\n const loadOlderForSelectedAgent = useCallback(() => {\n if (!selectedInboxThread || !agentChatWindow?.hasMore || agentChatWindow.loading) return\n void loadOlder(selectedInboxThread)\n }, [agentChatWindow?.hasMore, agentChatWindow?.loading, loadOlder, selectedInboxThread])\n\n const clearFilePreviewCloseTimer = useCallback(() => {\n if (filePreviewCloseTimer.current === null) return\n window.clearTimeout(filePreviewCloseTimer.current)\n filePreviewCloseTimer.current = null\n }, [])\n\n const resolveReferencedFile = useCallback(async (path: string): Promise<ReferencedPathInfo | null> => {\n const orchestrator = orchestratorForFilePreview(orchestrators, path)\n if (!orchestrator) return null\n try {\n const stat = await api<FileStatResult>('GET', `/orchestrators/${encodeURIComponent(orchestrator.id)}/files/stat?path=${encodeURIComponent(path)}`)\n return { orchestratorId: orchestrator.id, path: stat.path, type: stat.type }\n } catch {\n return null\n }\n }, [orchestrators])\n\n // Hover shows a lightweight floating preview anchored to the link — it does\n // not reflow the chat, so the link stays under the cursor.\n const previewReferencedFile = useCallback((path: string, line?: number, anchor?: DOMRect) => {\n if (!supportsSideFilePreview() || !anchor) return\n const request = ++filePreviewRequest.current\n void resolveReferencedFile(path).then((info) => {\n if (filePreviewRequest.current !== request) return\n if (!info) return\n clearFilePreviewCloseTimer()\n setFloatingPreview({ ...info, line: line || 0, anchor })\n setFilePreviewError('')\n })\n }, [clearFilePreviewCloseTimer, resolveReferencedFile])\n\n const scheduleCloseReferencedFilePreview = useCallback(() => {\n filePreviewRequest.current += 1\n clearFilePreviewCloseTimer()\n filePreviewCloseTimer.current = window.setTimeout(() => {\n setFloatingPreview(null)\n }, 250)\n }, [clearFilePreviewCloseTimer])\n\n // Clicking the link commits to the side panel — and dismisses the floating\n // preview so the two never show at once.\n const openReferencedFile = useCallback((path: string, line?: number) => {\n void resolveReferencedFile(path).then((info) => {\n if (!info) {\n showError('File Not Found', path)\n return\n }\n if (supportsSideFilePreview()) {\n filePreviewRequest.current += 1\n clearFilePreviewCloseTimer()\n setFloatingPreview(null)\n setFilePreview({ ...info, line: line || 0 })\n setFilePreviewError('')\n return\n }\n if (info.type === 'directory') void openFilesAt({ orchestratorId: info.orchestratorId, path: info.path, overlay: true })\n else void openFilesAt({ orchestratorId: info.orchestratorId, path: parentPath(info.path), selectedPath: info.path, line, overlay: true })\n })\n }, [clearFilePreviewCloseTimer, openFilesAt, resolveReferencedFile, showError])\n\n function closeFilePreview() {\n setFilePreview(null)\n setFilePreviewError('')\n }\n async function uploadFiles(files: FileList | File[]) {\n const list = Array.from(files).filter((file) => file.size > 0)\n if (!list.length) return\n const pending = list.map((file): PendingAttachment => ({\n id: `${Date.now()}-${file.name}-${Math.random().toString(16).slice(2)}`,\n fileName: file.name,\n size: file.size,\n previewUrl: file.type.startsWith('image/') ? URL.createObjectURL(file) : undefined,\n uploading: true,\n }))\n setPendingAttachments((current) => [...current, ...pending])\n\n for (let i = 0; i < list.length; i += 1) {\n const file = list[i]!\n const item = pending[i]!\n try {\n const artifact = await apiUpload<Artifact>('/artifacts', file, {\n filename: file.name,\n sensitivity: 'normal',\n })\n setPendingAttachments((current) => current.map((entry) => entry.id === item.id ? { ...entry, artifact, uploading: false } : entry))\n } catch (e) {\n setPendingAttachments((current) => current.map((entry) => entry.id === item.id ? { ...entry, error: (e as Error).message, uploading: false } : entry))\n }\n }\n }\n\n function removePendingAttachment(id: string) {\n setPendingAttachments((current) => {\n const item = current.find((entry) => entry.id === id)\n if (item?.previewUrl) URL.revokeObjectURL(item.previewUrl)\n return current.filter((entry) => entry.id !== id)\n })\n }\n\n function clearPendingAttachments() {\n revokePendingAttachmentUrls(pendingAttachments)\n setPendingAttachments([])\n }\n\n function handleSend() {\n if ((!draft.trim() && readyAttachments.length === 0) || !selectedInboxThread || chatSending || hasPendingUploads || agentFinalizing) return\n const attachments = readyAttachments.map((item): AttachmentRef => ({\n artifactId: item.artifact!.id,\n kind: item.artifact!.kind,\n role: 'media',\n title: item.artifact!.filename || item.fileName,\n }))\n sendChatMessage(draft, { peer: selectedInboxThread, lastMessage: chatThread?.lastMessage || null }, attachments)\n clearPendingAttachments()\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLTextAreaElement>) {\n if (slashMatches.length) {\n if (e.key === 'ArrowDown') { e.preventDefault(); setSlashIndex((i) => Math.min(i + 1, slashMatches.length - 1)); return }\n if (e.key === 'ArrowUp') { e.preventDefault(); setSlashIndex((i) => Math.max(i - 1, 0)); return }\n if (e.key === 'Escape') { e.preventDefault(); setSlashClosed(true); return }\n if (e.key === 'Enter' || e.key === 'Tab') { e.preventDefault(); const cmd = slashMatches[slashActiveIndex]; if (cmd) acceptSlash(cmd); return }\n }\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSend()\n }\n }\n\n function handlePaste(e: React.ClipboardEvent<HTMLTextAreaElement>) {\n const files = Array.from(e.clipboardData.files).filter((file) => file.type.startsWith('image/'))\n if (!files.length) return\n e.preventDefault()\n void uploadFiles(files)\n }\n\n // Push-to-talk. Two behaviours (Settings → Voice input):\n // 'compose' — transcribe into the composer (review, then Enter). The default.\n // 'autosend' — transcribe and send to the agent immediately, hands-light loop.\n async function startPtt() {\n if (!micAvailable || micState !== 'idle' || !selectedInboxThread) return\n voiceTts.bargeIn() // stop any speech while the user talks\n const recorder = new PttRecorder()\n try {\n await recorder.start()\n pttRecorderRef.current = recorder\n setMicState('recording')\n } catch (e) {\n pttRecorderRef.current = null\n setMicState('idle')\n showError('Microphone unavailable', (e as Error)?.message || 'Could not access the microphone.')\n }\n }\n\n async function stopPtt() {\n const recorder = pttRecorderRef.current\n if (!recorder || micState !== 'recording') return\n pttRecorderRef.current = null\n setMicState('transcribing')\n try {\n const clip = await recorder.stop()\n if (!clip) return\n const text = await transcribeClip(clip)\n if (!text) return\n const combined = draft ? `${draft} ${text}` : text\n if (voiceInputMode === 'autosend' && !chatSending && !hasPendingUploads) {\n // Speak-and-send: skip the composer, fire it straight at the agent. The\n // reply auto-speaks (voiceTts.onResponse) and you hold to talk again.\n const attachments = readyAttachments.map((item): AttachmentRef => ({\n artifactId: item.artifact!.id,\n kind: item.artifact!.kind,\n role: 'media',\n title: item.artifact!.filename || item.fileName,\n }))\n sendChatMessage(combined, { peer: selectedInboxThread, lastMessage: chatThread?.lastMessage || null }, attachments)\n clearPendingAttachments()\n } else {\n setReplyDraft(selectedInboxThread, combined)\n }\n } catch (e) {\n showError('Transcription failed', (e as Error)?.message || 'Could not transcribe audio.')\n } finally {\n setMicState('idle')\n }\n }\n\n if (!selectedInboxThread) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full text-center px-4\">\n <MessageSquare className=\"w-12 h-12 text-zinc-600 mb-3\" />\n <p className=\"text-muted-foreground text-sm\">Select an agent to start chatting</p>\n </div>\n )\n }\n\n return (\n <>\n <div className=\"flex h-full min-w-0\">\n <div className=\"@container/chat flex h-full min-w-0 flex-1 flex-col\">\n <ChatHeader\n selectedInboxThread={selectedInboxThread}\n agent={agent}\n now={now}\n blockedState={blockedState}\n thread={chatThread}\n exportableThread={exportableThread}\n importedHistory={importedHistory}\n showBackButton={showBackButton}\n onBack={onBack}\n openAgentDetail={openAgentDetail}\n openWorkspaceFocus={openWorkspaceFocus}\n voiceTtsEnabled={voiceTtsEnabled}\n setVoiceTtsEnabled={setVoiceTtsEnabled}\n canOpenTerminal={canOpenTerminal}\n terminalOpening={terminalOpening}\n handleOpenTerminal={handleOpenTerminal}\n canInterrupt={canInterrupt}\n interruptAgent={interruptAgent}\n canCompact={canCompact}\n canClearContext={canClearContext}\n canShutdown={canShutdown}\n openConfirm={openConfirm}\n workspaceAction={workspaceAction}\n doAgentAction={doAgentAction}\n openFilesForAgent={openFilesForAgent}\n forkFromAgent={forkFromAgent}\n markInboxThreadUnread={markInboxThreadUnread}\n markInboxThreadRead={markInboxThreadRead}\n exportThread={exportThread}\n onOpenSearch={search.openSearch}\n />\n\n {/* Timeline */}\n <PlanGraphPanel\n threadId={planContext && 'threadId' in planContext ? planContext.threadId : null}\n teamId={planContext && 'teamId' in planContext ? planContext.teamId : undefined}\n channel={planContext?.channel}\n />\n {selectedInboxThread && <SessionTasksPanel agentId={selectedInboxThread} />}\n {search.open && (\n <ChatSearchBar\n query={search.query}\n position={search.position}\n total={search.total}\n onQueryChange={search.setQuery}\n onNext={search.next}\n onPrev={search.prev}\n onClose={search.close}\n />\n )}\n {/* Pinned \"Last prompt\" reminder — same shrink-0 sibling mechanism as the search bar,\n so it stays above the conversation instead of scrolling away (#545). */}\n <StickyPromptBanner scrollEl={chatScroller} timeline={timeline} />\n <VirtualTimeline\n agentId={selectedInboxThread}\n agentStatus={agent?.status}\n timeline={timeline}\n hasMore={agentChatWindow?.hasMore ?? false}\n loading={agentChatWindow?.loading ?? false}\n loadedInitial={agentChatWindow?.loadedInitial ?? false}\n showReasoning={showReasoning}\n pendingApproval={pendingApproval}\n blockedLabel={blockedState?.label}\n canInterrupt={canInterrupt}\n searchActive={search.open}\n searchCurrentKey={search.currentKey}\n searchMatchKeys={search.matchKeySet}\n onScrollerRef={setChatScroller}\n onLoadOlder={loadOlderForSelectedAgent}\n onInterrupt={interruptAgent}\n onOpenReferencedPath={openReferencedFile}\n onPreviewReferencedPath={previewReferencedFile}\n onPreviewReferencedPathEnd={scheduleCloseReferencedFilePreview}\n />\n\n <Composer\n draft={draft}\n placeholder={`Message ${agent ? displayName(agent) : selectedInboxThread}…`}\n chatSending={chatSending}\n disabled={agentFinalizing}\n hasPendingUploads={hasPendingUploads}\n readyAttachmentCount={readyAttachments.length}\n pendingAttachments={pendingAttachments}\n micAvailable={micAvailable}\n micState={micState}\n slashMatches={slashMatches}\n slashActiveIndex={slashActiveIndex}\n onDraftChange={handleDraftChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onUploadFiles={(files) => { void uploadFiles(files) }}\n onRemovePendingAttachment={removePendingAttachment}\n onSend={handleSend}\n onAcceptSlash={acceptSlash}\n onSlashHover={setSlashIndex}\n onStartPtt={() => { void startPtt() }}\n onStopPtt={() => { void stopPtt() }}\n footerText={agentFinalizing\n ? `${agent ? displayName(agent) : 'Agent'} is wrapping up (${(agent?.meta?.lifecycleAction as string).slice('finalizing-'.length)}) — messaging paused`\n : 'Enter to send · Shift+Enter for newline'}\n />\n </div>\n {filePreview && (\n <aside\n className=\"hidden h-full w-[min(44vw,720px)] min-w-[360px] shrink-0 flex-col border-l border-border bg-background xl:flex\"\n >\n <div className=\"flex h-10 shrink-0 items-center gap-2 border-b border-border px-3\">\n <span className=\"min-w-0 flex-1 text-xs font-medium text-muted-foreground\">File preview</span>\n {filePreviewError && <span className=\"max-w-[18rem] truncate text-xs text-red-400\">{filePreviewError}</span>}\n <Button variant=\"ghost\" size=\"icon-sm\" title=\"Close preview\" onClick={closeFilePreview}>\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n <div className=\"min-h-0 flex-1\">\n {filePreview.type === 'directory' ? (\n <DirectoryContent\n orchestratorId={filePreview.orchestratorId}\n selectedPath={filePreview.path}\n onReadError={setFilePreviewError}\n />\n ) : (\n <FileContent\n orchestratorId={filePreview.orchestratorId}\n selectedPath={filePreview.path}\n line={filePreview.line}\n onReadError={setFilePreviewError}\n />\n )}\n </div>\n </aside>\n )}\n </div>\n {floatingPreview && (\n <FloatingFilePreview\n preview={floatingPreview}\n error={filePreviewError}\n onReadError={setFilePreviewError}\n onMouseEnter={clearFilePreviewCloseTimer}\n onMouseLeave={scheduleCloseReferencedFilePreview}\n />\n )}\n {terminalTarget && (\n <TerminalDialog open={terminalOpen} onOpenChange={handleCloseTerminal} orchestratorId={terminalTarget.orchestratorId} session={terminalTarget.session} interactive={terminalTarget.interactive || canWriteTerminal} canWrite={canWriteTerminal} />\n )}\n </>\n )\n}\n","\nimport { useEffect } from 'react'\nimport { useRelayStore } from '@/store'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\n\nexport function useDraftCleanup() {\n const inboxDrafts = useRelayStore((s) => s.inboxDrafts)\n const agentsById = useRelayStore((s) => s.agentsById)\n const set = useRelayStore((s) => s.set)\n\n useEffect(() => {\n const draftPeers = Object.keys(inboxDrafts)\n if (draftPeers.length === 0) return\n\n const stale = draftPeers.filter((peer) => !agentsById[peer] && peer !== HUMAN_AGENT_ID)\n if (stale.length === 0) return\n\n // Only clean up if the agent has been gone for a reasonable time (check on mount only)\n const timer = setTimeout(() => {\n const currentAgents = useRelayStore.getState().agentsById\n const next = { ...useRelayStore.getState().inboxDrafts }\n let changed = false\n for (const peer of stale) {\n if (!currentAgents[peer]) {\n delete next[peer]\n changed = true\n }\n }\n if (changed) set({ inboxDrafts: next })\n }, 30_000) // 30s grace period before purging\n\n return () => clearTimeout(timer)\n }, [])\n}\n","\nimport { useEffect } from 'react'\n\n// While a chat is open on mobile (single-pane: list OR conversation), push a\n// browser-history entry so the Android system back button / swipe-back gesture\n// returns to the conversation list instead of leaving the dashboard. Drafts are\n// stored per-thread (server + store), so closing back to the list never loses\n// unsent input — there is nothing to guard against here.\n//\n// Desktop (list + conversation side by side) is excluded: there is no\n// list/conversation toggle to back out of, and pushing an entry would change\n// the meaning of browser-back. The existing draft guard (useBackNavProtection)\n// owns desktop back behavior.\nexport function useMobileChatHistory(open: boolean, onBack: () => void) {\n useEffect(() => {\n if (typeof window === 'undefined' || !open) return\n if (!window.matchMedia('(max-width: 767px)').matches) return\n\n window.history.pushState({ chatOpen: true }, '')\n\n function handlePopState(e: PopStateEvent) {\n // An inner overlay (sheet/dialog) closing pops its own guard entry and\n // lands back on this {chatOpen:true} entry — that's not a real back press,\n // so don't navigate to the list. A genuine back press lands on whatever\n // was below the chat guard, which never has chatOpen set.\n if (e.state?.chatOpen) return\n onBack()\n }\n window.addEventListener('popstate', handlePopState)\n\n return () => {\n window.removeEventListener('popstate', handlePopState)\n // Closed via the in-app back arrow rather than the system back button:\n // our pushed entry is still on top, so consume it to keep the stack clean.\n if (window.history.state?.chatOpen) window.history.back()\n }\n }, [open, onBack])\n}\n","\nimport { useCallback, useEffect } from 'react'\nimport { useKeyboardViewportHeight } from '@/hooks/use-keyboard-viewport'\nimport { useAllInboxThreads } from '@/hooks/use-selectors'\nimport { useRelayStore } from '@/store'\nimport { AgentListPanel } from './AgentListPanel'\nimport { ChatPanel } from './ChatPanel'\nimport { useDraftCleanup } from './hooks/useDraftCleanup'\nimport { useIsMobile } from './hooks/useIsMobile'\nimport { useMobileChatHistory } from './hooks/useMobileChatHistory'\n\nexport function ChatView() {\n const threads = useAllInboxThreads()\n const selectedInboxThread = useRelayStore((s) => s.selectedInboxThread)\n const set = useRelayStore((s) => s.set)\n const loadAgentChat = useRelayStore((s) => s.loadAgentChat)\n const agentsById = useRelayStore((s) => s.agentsById)\n const mobileShowChat = Boolean(selectedInboxThread)\n const isMobile = useIsMobile()\n\n useDraftCleanup()\n\n useEffect(() => {\n if (!selectedInboxThread) return\n void loadAgentChat(selectedInboxThread)\n }, [selectedInboxThread, loadAgentChat])\n\n useEffect(() => {\n if (!selectedInboxThread) return\n // Close the open chat only when the agent is truly gone (removed from the roster) —\n // not when it's merely filtered out or transiently offline during a clear/compact\n // self-resume. Otherwise mobile pops back to the list mid-compact (#521).\n if (!agentsById[selectedInboxThread]) {\n set({ selectedInboxThread: '' })\n }\n }, [selectedInboxThread, agentsById, set])\n\n const handleMobileBack = useCallback(() => {\n set({ selectedInboxThread: '' })\n }, [set])\n\n useMobileChatHistory(mobileShowChat, handleMobileBack)\n\n return (\n <div className=\"flex h-full min-h-0\">\n {isMobile ? (\n <div className=\"flex w-full overflow-hidden\">\n {!mobileShowChat ? (\n <div className=\"w-full flex flex-col overflow-hidden\">\n <AgentListPanel threads={threads} />\n </div>\n ) : (\n <MobileChatContainer>\n <ChatPanel key={selectedInboxThread || 'empty'} threads={threads} onBack={handleMobileBack} showBackButton />\n </MobileChatContainer>\n )}\n </div>\n ) : (\n <div className=\"flex w-full\">\n <div className=\"w-1/3 min-w-[240px] max-w-xs flex flex-col overflow-hidden\">\n <AgentListPanel threads={threads} />\n </div>\n\n <div className=\"flex-1 flex flex-col overflow-hidden\">\n <ChatPanel key={selectedInboxThread || 'empty'} threads={threads} />\n </div>\n </div>\n )}\n </div>\n )\n}\n\nfunction MobileChatContainer({ children }: { children: React.ReactNode }) {\n const height = useKeyboardViewportHeight()\n\n return (\n <div\n className=\"fixed inset-x-0 top-0 z-40 flex flex-col bg-background pt-[var(--sat)]\"\n style={{ height: height ? `${height}px` : '100dvh' }}\n >\n {children}\n </div>\n )\n}\n"],"x_google_ignoreList":[15],"mappings":"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"}
1
+ {"version":3,"file":"chat-Clz6qOtn.js","names":[],"sources":["../../dashboard/src/lib/audience.ts","../../dashboard/src/components/chat/hooks/useChatAgents.ts","../../dashboard/src/components/chat/AgentListPanel.tsx","../../dashboard/src/lib/slash-commands.ts","../../dashboard/src/components/chat/ViewerPresence.tsx","../../dashboard/src/components/chat/ChatHeader.tsx","../../dashboard/src/components/chat/ChatSearchBar.tsx","../../dashboard/src/components/chat/SlashPalette.tsx","../../dashboard/src/components/chat/Composer.tsx","../../dashboard/src/components/chat/FilePreview.tsx","../../dashboard/src/components/chat/hooks/useAgentStatusEvents.ts","../../dashboard/src/components/chat/hooks/useBackNavProtection.ts","../../dashboard/src/components/chat/chatSearch.ts","../../dashboard/src/components/chat/hooks/useChatSearch.ts","../../dashboard/src/components/chat/hooks/usePresenceHeartbeat.ts","../../dashboard/node_modules/react-virtuoso/dist/index.mjs","../../dashboard/src/components/chat/AskQuestionForm.tsx","../../dashboard/src/components/chat/VirtualTimeline.tsx","../../dashboard/src/components/chat/ChatPanel.tsx","../../dashboard/src/components/chat/hooks/useDraftCleanup.ts","../../dashboard/src/components/chat/hooks/useMobileChatHistory.ts","../../dashboard/src/components/chat/ChatView.tsx"],"sourcesContent":["import type { Agent } from '@/types'\nimport { isHumanAgentId } from 'agent-relay-sdk/types'\n\n/**\n * #703 — mirrors the server's message.new audience rules on the client:\n * - targetedAtUser / threadParticipant: the human exchanged messages with this agent (hasThread)\n * - spawnedByUser: the agent was directly spawned by a human (depth-1)\n * Respects per-agent follow/mute overrides; call sites pass these from the store.\n */\nexport function isUserInAgentAudience(\n agentId: string,\n agentsById: Record<string, Agent>,\n hasThread: boolean,\n coordinatorFollows: string[],\n coordinatorMutes: string[],\n): boolean {\n if (coordinatorMutes.includes(agentId)) return false\n if (coordinatorFollows.includes(agentId)) return true\n if (hasThread) return true\n const agent = agentsById[agentId]\n return Boolean(agent && isHumanAgentId(agent.spawnedBy ?? ''))\n}\n","\nimport { useMemo } from 'react'\nimport { useUniqueHosts, useAllInboxThreads } from '@/hooks/use-selectors'\nimport { useRelayStore } from '@/store'\nimport { CHAT_STATUS_SORT_ORDER } from '@/lib/constants'\nimport { agentType, displayName, toTimestamp, userFacingCapabilities, visibleAgents } from '@/lib/display'\nimport { isUserInAgentAudience } from '@/lib/audience'\nimport { compareConversationActivity } from '../helpers'\n\nexport { useUniqueHosts }\n\nexport function useChatAgents() {\n const agents = useRelayStore((s) => s.agents)\n const agentsById = useRelayStore((s) => s.agentsById)\n const showBuiltIns = useRelayStore((s) => s.showBuiltIns)\n const showOffline = useRelayStore((s) => s.showOffline)\n const chatAgentSearch = useRelayStore((s) => s.chatAgentSearch)\n const chatAgentProviderFilter = useRelayStore((s) => s.chatAgentProviderFilter)\n const chatAgentStatusFilter = useRelayStore((s) => s.chatAgentStatusFilter)\n const chatAgentTagFilter = useRelayStore((s) => s.chatAgentTagFilter)\n const chatAgentCapFilter = useRelayStore((s) => s.chatAgentCapFilter)\n const chatAgentHostFilter = useRelayStore((s) => s.chatAgentHostFilter)\n const chatAgentSort = useRelayStore((s) => s.chatAgentSort)\n const chatAgentSortDir = useRelayStore((s) => s.chatAgentSortDir)\n const managedPolicies = useRelayStore((s) => s.managedPolicies)\n const feedObserveAll = useRelayStore((s) => s.feedObserveAll)\n const coordinatorFollows = useRelayStore((s) => s.coordinatorFollows)\n const coordinatorMutes = useRelayStore((s) => s.coordinatorMutes)\n // Threads used for scoped-mode audience check (has-thread = targetedAtUser or threadParticipant)\n const threads = useAllInboxThreads()\n\n return useMemo(() => {\n const threadPeerSet = new Set(threads.map((t) => t.peer))\n\n let list = visibleAgents(agents, showBuiltIns, managedPolicies)\n if (!showOffline) list = list.filter((a) => a.status !== 'offline')\n\n // Scoped mode (#703): show only agents where user is in the resolved audience.\n // In observe-all mode, all agents are visible (mutes are still applied via thread badges).\n if (!feedObserveAll) {\n list = list.filter((a) => isUserInAgentAudience(a.id, agentsById, threadPeerSet.has(a.id), coordinatorFollows, coordinatorMutes))\n } else {\n // Even in observe-all, hard-muted agents are hidden from the list.\n list = list.filter((a) => !coordinatorMutes.includes(a.id))\n }\n\n if (chatAgentSearch) {\n const q = chatAgentSearch.toLowerCase()\n list = list.filter((a) =>\n a.id.toLowerCase().includes(q) ||\n (a.name || '').toLowerCase().includes(q) ||\n (a.label || '').toLowerCase().includes(q) ||\n (a.tags || []).some((t) => t.toLowerCase().includes(q)) ||\n (a.capabilities || []).some((c) => c.toLowerCase().includes(q))\n )\n }\n\n if (chatAgentProviderFilter) list = list.filter((a) => agentType(a) === chatAgentProviderFilter)\n if (chatAgentStatusFilter) list = list.filter((a) => a.status === chatAgentStatusFilter)\n if (chatAgentTagFilter) list = list.filter((a) => (a.tags || []).includes(chatAgentTagFilter))\n if (chatAgentCapFilter) list = list.filter((a) => (a.capabilities || []).includes(chatAgentCapFilter))\n if (chatAgentHostFilter) list = list.filter((a) => (a.machine || '') === chatAgentHostFilter)\n\n const dir = chatAgentSortDir === 'desc' ? -1 : 1\n return [...list].sort((a, b) => {\n if (chatAgentSort === 'name') return displayName(a).localeCompare(displayName(b)) * dir\n // Ascending base so 'asc' (the default, SortAsc) reads oldest→newest, matching the\n // 'lastMessage' conversation-list sort and the toggle icon (#541).\n if (chatAgentSort === 'lastSeen') return compareConversationActivity(toTimestamp(a.lastSeen), toTimestamp(b.lastSeen), dir) || displayName(a).localeCompare(displayName(b))\n const s = ((CHAT_STATUS_SORT_ORDER[a.status] ?? 9) - (CHAT_STATUS_SORT_ORDER[b.status] ?? 9)) * dir\n return s || displayName(a).localeCompare(displayName(b))\n })\n }, [agents, agentsById, showBuiltIns, showOffline, managedPolicies, chatAgentSearch, chatAgentProviderFilter,\n chatAgentStatusFilter, chatAgentTagFilter, chatAgentCapFilter, chatAgentHostFilter, chatAgentSort, chatAgentSortDir,\n feedObserveAll, coordinatorFollows, coordinatorMutes, threads])\n}\n","\nimport { useMemo, type ReactNode } from 'react'\nimport { AlertCircle, Search, Bot, SortAsc, SortDesc, Plus, SlidersHorizontal, ChevronDown, ChevronRight, ChevronUp, CornerDownRight, BellOff, Telescope, Eye, Filter } from 'lucide-react'\nimport { useRelayStore, useNow } from '@/store'\nimport { getKnownProviderIds, getProviderLabel } from '@/lib/provider-display'\nimport { StatusDot } from '@/components/shared/status-dot'\nimport { AgentTypeIcon } from '@/components/shared/agent-type-icon'\nimport { ProfileIcon, agentProfileName } from '@/components/shared/profile-icon'\nimport { ContextRing, agentWorkspaceMeta, agentProjectName, agentHasContextTelemetry } from '@/components/shared/agent-runtime-summary'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\nimport { agentNeedsHumanResponse, displayName, fmtTime, messagePreview, timeAgo, userFacingCapabilities } from '@/lib/display'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport type { Agent, InboxThread } from '@/types'\nimport { cn } from '@/lib/utils'\nimport { agentLineageRows, type AgentLineageRow } from '@/lib/agent-lineage'\nimport { compareConversationActivity, lastFinalResponseTimestamp, threadActivityTimestamp } from './helpers'\nimport { useChatAgents, useUniqueHosts } from './hooks/useChatAgents'\n\n// Inline markdown for the single-line conversation preview (#524): bold, italic,\n// strikethrough, inline code, and link text. Newlines are collapsed to spaces by the\n// caller so block constructs never appear; an unmatched marker renders literally.\ntype InlinePattern = { re: RegExp; recurse: boolean; wrap: (children: ReactNode, key: string) => ReactNode }\n\nconst INLINE_PATTERNS: InlinePattern[] = [\n { re: /`([^`]+)`/, recurse: false, wrap: (c, k) => <code key={k} className=\"rounded bg-muted px-1 font-mono text-[0.9em]\">{c}</code> },\n { re: /\\*\\*([^*]+)\\*\\*/, recurse: true, wrap: (c, k) => <strong key={k} className=\"font-semibold text-foreground/90\">{c}</strong> },\n { re: /__([^_]+)__/, recurse: true, wrap: (c, k) => <strong key={k} className=\"font-semibold text-foreground/90\">{c}</strong> },\n { re: /~~([^~]+)~~/, recurse: true, wrap: (c, k) => <s key={k}>{c}</s> },\n { re: /\\*([^*]+)\\*/, recurse: true, wrap: (c, k) => <em key={k}>{c}</em> },\n { re: /_([^_]+)_/, recurse: true, wrap: (c, k) => <em key={k}>{c}</em> },\n { re: /\\[([^\\]]+)\\]\\([^)]+\\)/, recurse: true, wrap: (c, k) => <span key={k} className=\"underline decoration-dotted underline-offset-2\">{c}</span> },\n]\n\nfunction renderInlineMarkdown(text: string, keyPrefix = 'i'): ReactNode[] {\n let best: { index: number; length: number; inner: string; pattern: InlinePattern } | null = null\n for (const pattern of INLINE_PATTERNS) {\n const m = pattern.re.exec(text)\n if (m && m[1] && (best === null || m.index < best.index)) {\n best = { index: m.index, length: m[0].length, inner: m[1], pattern }\n }\n }\n if (!best) return [text]\n const nodes: ReactNode[] = []\n if (best.index > 0) nodes.push(text.slice(0, best.index))\n const inner = best.pattern.recurse ? renderInlineMarkdown(best.inner, `${keyPrefix}x`) : best.inner\n nodes.push(best.pattern.wrap(inner, `${keyPrefix}m`))\n const rest = text.slice(best.index + best.length)\n if (rest) nodes.push(...renderInlineMarkdown(rest, `${keyPrefix}r`))\n return nodes\n}\n\nexport function AgentListPanel({ threads, onSelectAgent }: { threads: InboxThread[]; onSelectAgent?: (id: string) => void }) {\n const set = useRelayStore((s) => s.set)\n const openInboxThread = useRelayStore((s) => s.openInboxThread)\n const openAgentSpawn = useRelayStore((s) => s.openAgentSpawn)\n const selectedInboxThread = useRelayStore((s) => s.selectedInboxThread)\n const chatAgentSearch = useRelayStore((s) => s.chatAgentSearch)\n const chatAgentSort = useRelayStore((s) => s.chatAgentSort)\n const chatAgentSortDir = useRelayStore((s) => s.chatAgentSortDir)\n const chatAgentProviderFilter = useRelayStore((s) => s.chatAgentProviderFilter)\n const chatAgentStatusFilter = useRelayStore((s) => s.chatAgentStatusFilter)\n const chatAgentTagFilter = useRelayStore((s) => s.chatAgentTagFilter)\n const chatAgentCapFilter = useRelayStore((s) => s.chatAgentCapFilter)\n const chatAgentHostFilter = useRelayStore((s) => s.chatAgentHostFilter)\n const chatAgentGroupBy = useRelayStore((s) => s.chatAgentGroupBy)\n const chatAgentFiltersCollapsed = useRelayStore((s) => s.chatAgentFiltersCollapsed)\n const agentsById = useRelayStore((s) => s.agentsById)\n const collapsedChildrenList = useRelayStore((s) => s.chatCollapsedChildren)\n const toggleChildrenCollapsed = useRelayStore((s) => s.toggleChatChildrenCollapsed)\n const feedObserveAll = useRelayStore((s) => s.feedObserveAll)\n const setFeedObserveAll = useRelayStore((s) => s.setFeedObserveAll)\n const coordinatorFollows = useRelayStore((s) => s.coordinatorFollows)\n const coordinatorMutes = useRelayStore((s) => s.coordinatorMutes)\n const toggleCoordinatorFollow = useRelayStore((s) => s.toggleCoordinatorFollow)\n const toggleCoordinatorMute = useRelayStore((s) => s.toggleCoordinatorMute)\n const now = useNow()\n const chatAgents = useChatAgents()\n const collapsedChildren = useMemo(() => new Set(collapsedChildrenList), [collapsedChildrenList])\n\n const threadByPeer = useMemo(() => {\n const m = new Map<string, InboxThread>()\n for (const t of threads) m.set(t.peer, t)\n return m\n }, [threads])\n\n const sortedAgents = useMemo(() => {\n if (chatAgentSort !== 'lastMessage') return chatAgents\n const dir = chatAgentSortDir === 'desc' ? -1 : 1\n return [...chatAgents].sort((a, b) => {\n const ta = threadActivityTimestamp(threadByPeer.get(a.id))\n const tb = threadActivityTimestamp(threadByPeer.get(b.id))\n return compareConversationActivity(ta, tb, dir) || displayName(a).localeCompare(displayName(b))\n })\n }, [chatAgents, chatAgentSort, chatAgentSortDir, threadByPeer])\n\n const uniqueTags = useMemo(() => [...new Set(chatAgents.flatMap((a) => a.tags || []))], [chatAgents])\n const uniqueCaps = useMemo(() => [...new Set(chatAgents.flatMap((a) => userFacingCapabilities(a.capabilities || [])))], [chatAgents])\n const uniqueHosts = useUniqueHosts()\n\n // Group the (already sorted) agents by project, preserving sort order within\n // each group. null when grouping is off → render a flat list.\n const groupedAgents = useMemo(() => {\n if (chatAgentGroupBy !== 'project') return null\n const groups = new Map<string, Agent[]>()\n for (const a of sortedAgents) {\n const key = agentProjectName(a) || 'No project'\n const bucket = groups.get(key)\n if (bucket) bucket.push(a)\n else groups.set(key, [a])\n }\n return [...groups.entries()].sort((a, b) => a[0].localeCompare(b[0]))\n }, [sortedAgents, chatAgentGroupBy])\n\n const activeFilterCount = [chatAgentProviderFilter, chatAgentStatusFilter, chatAgentTagFilter, chatAgentCapFilter, chatAgentHostFilter].filter(Boolean).length\n const lineageRows = useMemo(() => agentLineageRows(sortedAgents, agentsById, now), [sortedAgents, agentsById, now])\n\n function handleSelect(id: string) {\n openInboxThread(id, threadByPeer.get(id)?.messages)\n onSelectAgent?.(id)\n }\n\n function renderAgentRow(row: AgentLineageRow) {\n const { agent } = row\n // Hide children whose parent group is folded (#525).\n if (row.depth === 1 && row.parent && collapsedChildren.has(row.parent.id)) return null\n const thread = threadByPeer.get(agent.id)\n const unread = thread?.attention.unread || 0\n const needsHumanResponse = agentNeedsHumanResponse(agent)\n const lastMsg = thread?.previewMessage\n // Show the agent's last final-response time (#523); fall back to any message\n // activity when it hasn't responded yet so the row still carries a timestamp.\n const lastActivityAt = lastFinalResponseTimestamp(thread) || threadActivityTimestamp(thread)\n const isSelected = selectedInboxThread === agent.id\n const ws = agentWorkspaceMeta(agent)\n const project = agentProjectName(agent)\n const WsIcon = ws.Icon\n const parentLabel = row.parent ? displayName(row.parent) : agent.spawnedBy\n const childCount = row.children.length\n const isParentWithChildren = row.depth === 0 && childCount > 0\n const childrenCollapsed = collapsedChildren.has(agent.id)\n\n const isMuted = coordinatorMutes.includes(agent.id)\n const isFollowed = coordinatorFollows.includes(agent.id)\n\n return (\n <li key={agent.id} className={cn('relative group', row.depth === 1 && 'pl-4')}>\n {row.depth === 1 && (\n <div className=\"absolute left-2 top-3.5 text-muted-foreground/55\">\n <CornerDownRight className=\"h-3.5 w-3.5\" />\n </div>\n )}\n {/* Per-agent follow/mute controls — floating toolbar on row hover (#703). The\n backdrop + border lets it sit cleanly over the timestamp/badge cluster, which\n fades out underneath (group-hover:opacity-0) so the two never ghost together. */}\n <div className=\"absolute right-1.5 top-1.5 z-10 hidden items-center gap-0.5 rounded-md border border-border/60 bg-popover/95 px-0.5 py-0.5 shadow-sm backdrop-blur-sm group-hover:flex\">\n <button\n type=\"button\"\n title={isFollowed ? 'Unfollow (stop pinning into scoped view)' : 'Follow (keep visible even in scoped view)'}\n onClick={(e) => { e.stopPropagation(); toggleCoordinatorFollow(agent.id) }}\n className={cn(\n 'rounded p-1 transition-colors',\n isFollowed ? 'text-primary bg-primary/15 hover:bg-primary/25' : 'text-muted-foreground hover:text-foreground hover:bg-muted'\n )}\n >\n <Telescope className=\"h-3 w-3\" />\n </button>\n <button\n type=\"button\"\n title={isMuted ? 'Unmute' : 'Mute (hide from all views)'}\n onClick={(e) => { e.stopPropagation(); toggleCoordinatorMute(agent.id) }}\n className={cn(\n 'rounded p-1 transition-colors',\n isMuted ? 'text-orange-400 bg-orange-500/15 hover:bg-orange-500/25' : 'text-muted-foreground hover:text-foreground hover:bg-muted'\n )}\n >\n <BellOff className=\"h-3 w-3\" />\n </button>\n </div>\n <button\n className={cn(\n 'w-full text-left px-3 py-2.5 flex items-start gap-2.5 hover:bg-muted/50 transition-colors border-b border-border/50',\n row.depth === 1 && 'bg-muted/15',\n isSelected && 'bg-muted/60',\n isMuted && 'opacity-50'\n )}\n onClick={() => handleSelect(agent.id)}\n >\n <div className=\"relative shrink-0 mt-0.5\">\n <AgentTypeIcon agent={agent} />\n <StatusDot agent={agent} now={now} className=\"absolute -bottom-0.5 -right-0.5 w-2 h-2\" />\n </div>\n\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center justify-between gap-1 mb-0.5\">\n <span className=\"flex items-center gap-1 min-w-0\">\n <ProfileIcon profile={agentProfileName(agent)} className=\"text-xs shrink-0\" />\n <span className=\"text-xs font-medium truncate\">{displayName(agent)}</span>\n </span>\n {/* Fades on hover so the floating follow/mute toolbar reads cleanly above it. */}\n <div className=\"flex items-center gap-1 shrink-0 transition-opacity group-hover:opacity-0\">\n {/* Muted agents are hidden from the list entirely (#703 spec), so only the\n follow marker can ever render at rest — it flags pinned-into-scope agents. */}\n {isFollowed && <Telescope className=\"h-3 w-3 text-primary\" aria-label=\"Followed\" />}\n {lastActivityAt > 0 && (\n <span className=\"text-[10px] text-muted-foreground tabular-nums\" title={fmtTime(lastActivityAt)}>\n {timeAgo(now, lastActivityAt)}\n </span>\n )}\n {unread > 0 && (\n <Badge className=\"bg-red-500 text-white text-[11px] font-semibold leading-none tabular-nums min-w-[18px] h-[18px] flex items-center justify-center shrink-0 px-1 rounded-full\">\n {unread}\n </Badge>\n )}\n {!unread && needsHumanResponse && (\n <Badge className=\"bg-amber-500 text-black min-w-[18px] h-[18px] flex items-center justify-center shrink-0 px-1 rounded-full\" title=\"Needs response\">\n <AlertCircle className=\"h-3 w-3\" />\n </Badge>\n )}\n </div>\n </div>\n\n {/* Workspace icon + project name, with context usage on the right */}\n <div className=\"flex items-center gap-1.5 mb-0.5 text-[10px] text-muted-foreground\">\n <span title={ws.title} className=\"inline-flex shrink-0\">\n <WsIcon className={cn('h-3 w-3', ws.iconColor)} />\n </span>\n <span className=\"truncate\">{project || ws.label}</span>\n {agentHasContextTelemetry(agent) && (\n <span className=\"ml-auto shrink-0\">\n <ContextRing context={agent.context} expected size={18} />\n </span>\n )}\n </div>\n {row.depth === 0 && agent.spawnedBy && parentLabel && (\n <div className=\"mb-0.5\">\n <Badge variant=\"outline\" className=\"max-w-full text-[9px] h-4 px-1.5 text-muted-foreground\">\n <span className=\"truncate\">spawned by {parentLabel}</span>\n </Badge>\n </div>\n )}\n\n {lastMsg && (\n <p className=\"text-xs text-muted-foreground truncate leading-tight\">\n {lastMsg.from === HUMAN_AGENT_ID ? 'You: ' : ''}\n {renderInlineMarkdown(messagePreview(lastMsg).replace(/\\s+/g, ' '))}\n </p>\n )}\n </div>\n </button>\n\n {/* Collapse bar for spawned children (#612): carries the child count so the\n parent reads as having N children even when the group is folded, and the\n arrow toggles the fold. Replaces the old per-header child-count badge. */}\n {isParentWithChildren && (\n <button\n type=\"button\"\n onClick={(e) => { e.stopPropagation(); toggleChildrenCollapsed(agent.id) }}\n className=\"flex w-full items-center gap-1.5 border-b border-border/50 bg-muted/20 py-1 pl-8 pr-3 text-[10px] text-muted-foreground transition-colors hover:bg-muted/40 hover:text-foreground\"\n aria-expanded={!childrenCollapsed}\n title={childrenCollapsed ? `Show ${childCount} child ${childCount === 1 ? 'agent' : 'agents'}` : 'Hide children'}\n >\n {childrenCollapsed ? <ChevronRight className=\"h-3.5 w-3.5 shrink-0\" /> : <ChevronDown className=\"h-3.5 w-3.5 shrink-0\" />}\n <span className=\"font-medium\">{childCount} child {childCount === 1 ? 'agent' : 'agents'}</span>\n </button>\n )}\n </li>\n )\n }\n\n return (\n <div className=\"flex flex-col h-full border-r border-border min-w-0\">\n {/* Search + filters */}\n <div className=\"p-3 border-b border-border space-y-2\">\n <div className=\"relative\">\n <Search className=\"absolute left-2.5 top-1/2 -translate-y-1/2 w-3.5 h-3.5 text-muted-foreground pointer-events-none\" />\n <Input\n placeholder=\"Search agents...\"\n value={chatAgentSearch}\n onChange={(e) => set({ chatAgentSearch: e.target.value })}\n className=\"pl-8 h-7 text-xs\"\n />\n </div>\n\n {/* Audience-scope toggle (#703): a segmented control so both modes — and which\n one is active — are legible at a glance, instead of one button you have to click\n to discover the alternate state. */}\n <div className=\"flex h-7 items-center rounded-md border border-border bg-background p-0.5 text-xs\">\n <button\n type=\"button\"\n onClick={() => setFeedObserveAll(false)}\n title=\"Show only conversations where you're in the audience (agents you spawned or messaged)\"\n aria-pressed={!feedObserveAll}\n className={cn(\n 'flex h-full flex-1 items-center justify-center gap-1.5 rounded-[5px] transition-colors',\n !feedObserveAll ? 'bg-primary/15 text-primary font-medium' : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <Filter className=\"h-3.5 w-3.5\" />\n Scoped\n </button>\n <button\n type=\"button\"\n onClick={() => setFeedObserveAll(true)}\n title=\"Show every agent conversation, including agent-to-agent chatter\"\n aria-pressed={feedObserveAll}\n className={cn(\n 'flex h-full flex-1 items-center justify-center gap-1.5 rounded-[5px] transition-colors',\n feedObserveAll ? 'bg-primary/15 text-primary font-medium' : 'text-muted-foreground hover:text-foreground'\n )}\n >\n <Eye className=\"h-3.5 w-3.5\" />\n All\n </button>\n </div>\n\n {/* Filters toggle — mobile only; on desktop the panel is always open */}\n <button\n type=\"button\"\n onClick={() => set({ chatAgentFiltersCollapsed: !chatAgentFiltersCollapsed })}\n className=\"sm:hidden flex w-full items-center justify-between h-6 px-1.5 text-xs rounded-md border border-border bg-background text-muted-foreground\"\n >\n <span className=\"inline-flex items-center gap-1.5\">\n <SlidersHorizontal className=\"w-3.5 h-3.5\" />\n Filters &amp; sort\n {activeFilterCount > 0 && (\n <Badge className=\"bg-primary/20 text-primary text-[10px] h-4 min-w-4 px-1 flex items-center justify-center\">{activeFilterCount}</Badge>\n )}\n </span>\n {chatAgentFiltersCollapsed ? <ChevronDown className=\"w-3.5 h-3.5\" /> : <ChevronUp className=\"w-3.5 h-3.5\" />}\n </button>\n\n <div className={cn('space-y-2', chatAgentFiltersCollapsed ? 'hidden' : 'block', 'sm:block')}>\n {/* Sort row */}\n <div className=\"flex items-center gap-1.5\">\n <select\n value={chatAgentSort}\n onChange={(e) => set({ chatAgentSort: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"status\">By status</option>\n <option value=\"name\">By name</option>\n <option value=\"lastSeen\">By last seen</option>\n <option value=\"lastMessage\">By last activity</option>\n </select>\n <Button\n variant=\"ghost\"\n size=\"icon-xs\"\n onClick={() => set({ chatAgentSortDir: chatAgentSortDir === 'asc' ? 'desc' : 'asc' })}\n >\n {chatAgentSortDir === 'asc' ? <SortAsc className=\"w-3.5 h-3.5\" /> : <SortDesc className=\"w-3.5 h-3.5\" />}\n </Button>\n </div>\n\n {/* Grouping */}\n <select\n value={chatAgentGroupBy}\n onChange={(e) => set({ chatAgentGroupBy: e.target.value })}\n className=\"w-full h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">No grouping</option>\n <option value=\"project\">Group by project</option>\n </select>\n\n {/* Filter row */}\n <div className=\"flex gap-1\">\n <select\n value={chatAgentProviderFilter}\n onChange={(e) => set({ chatAgentProviderFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All types</option>\n {getKnownProviderIds().map((id) => <option key={id} value={id}>{getProviderLabel(id)}</option>)}\n <option value=\"agent\">Agent</option>\n <option value=\"user\">User</option>\n </select>\n <select\n value={chatAgentStatusFilter}\n onChange={(e) => set({ chatAgentStatusFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All status</option>\n <option value=\"online\">Online</option>\n <option value=\"idle\">Idle</option>\n <option value=\"busy\">Busy</option>\n <option value=\"offline\">Offline</option>\n </select>\n {uniqueHosts.length > 1 && (\n <select\n value={chatAgentHostFilter}\n onChange={(e) => set({ chatAgentHostFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All hosts</option>\n {uniqueHosts.map((h) => <option key={h} value={h}>{h}</option>)}\n </select>\n )}\n </div>\n\n {(uniqueTags.length > 0 || uniqueCaps.length > 0) && (\n <div className=\"flex gap-1\">\n {uniqueTags.length > 0 && (\n <select\n value={chatAgentTagFilter}\n onChange={(e) => set({ chatAgentTagFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All tags</option>\n {uniqueTags.map((t) => <option key={t} value={t}>#{t}</option>)}\n </select>\n )}\n {uniqueCaps.length > 0 && (\n <select\n value={chatAgentCapFilter}\n onChange={(e) => set({ chatAgentCapFilter: e.target.value })}\n className=\"flex-1 h-6 text-xs rounded-md border border-border bg-background px-1.5 text-foreground\"\n >\n <option value=\"\">All caps</option>\n {uniqueCaps.map((c) => <option key={c} value={c}>{c}</option>)}\n </select>\n )}\n </div>\n )}\n </div>\n </div>\n\n {/* Spawn — pinned above the list so it never scrolls out of reach */}\n <button\n type=\"button\"\n className=\"flex w-full shrink-0 items-center gap-2.5 border-b border-border px-3 py-2 text-left transition-colors hover:bg-muted/50\"\n onClick={openAgentSpawn}\n >\n <div className=\"flex h-7 w-7 shrink-0 items-center justify-center rounded-full border border-dashed border-primary/50 bg-primary/10 text-primary\">\n <Plus className=\"h-3.5 w-3.5\" />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-xs font-medium\">New Agent</div>\n <div className=\"truncate text-[10px] text-muted-foreground\">Spawn a fresh chat agent</div>\n </div>\n </button>\n\n {/* Agent list */}\n <div className=\"flex-1 overflow-y-auto\">\n {sortedAgents.length === 0 ? (\n !feedObserveAll && !chatAgentSearch && activeFilterCount === 0 ? (\n // Scoped mode with nobody in the user's audience — explain the scope and offer the\n // escape hatch, rather than the misleading generic \"no agents match filters\".\n <div className=\"flex flex-col items-center justify-center py-10 text-center px-6\">\n <Telescope className=\"w-8 h-8 text-muted-foreground/40 mb-3\" />\n <p className=\"text-xs font-medium text-foreground/80\">No conversations in your audience</p>\n <p className=\"mt-1 text-[11px] text-muted-foreground\">Agents you spawn or message show up here.</p>\n <button\n type=\"button\"\n onClick={() => setFeedObserveAll(true)}\n className=\"mt-3 inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-2.5 py-1 text-[11px] text-muted-foreground transition-colors hover:bg-muted/50 hover:text-foreground\"\n >\n <Eye className=\"h-3.5 w-3.5\" /> Show all agents\n </button>\n </div>\n ) : (\n <div className=\"flex flex-col items-center justify-center py-10 text-center px-4\">\n <Bot className=\"w-8 h-8 text-muted-foreground/40 mb-2\" />\n <p className=\"text-xs text-muted-foreground\">No agents match filters</p>\n </div>\n )\n ) : groupedAgents ? (\n groupedAgents.map(([project, agents]) => (\n <div key={project}>\n <div className=\"sticky top-0 z-10 flex items-center gap-1.5 border-b border-border/50 bg-background/95 px-3 py-1 text-[10px] font-medium uppercase tracking-wide text-muted-foreground backdrop-blur\">\n <span className=\"truncate\">{project}</span>\n <span className=\"text-muted-foreground/50\">{agents.length}</span>\n </div>\n <ul>{agentLineageRows(agents, agentsById, now).map(renderAgentRow)}</ul>\n </div>\n ))\n ) : (\n <ul>{lineageRows.map(renderAgentRow)}</ul>\n )}\n </div>\n </div>\n )\n}\n","import { getProviderManifest } from './provider-display'\n\nexport interface SlashCommand {\n name: string\n description?: string\n source?: string\n argumentHint?: string\n}\n\nconst RELAY_SLASH_COMMANDS: SlashCommand[] = [\n { name: '/reply', source: 'skill', description: 'Reply to a relay message by id', argumentHint: '<messageId> <body>' },\n { name: '/message', source: 'skill', description: 'Send a relay message to an agent, label, tag, or broadcast', argumentHint: '<target> <body>' },\n { name: '/pair', source: 'skill', description: 'Start or manage a two-agent pair session' },\n { name: '/react', source: 'skill', description: 'Add a reaction to a relay message', argumentHint: '<messageId> <emoji>' },\n { name: '/read-message', source: 'skill', description: 'Fetch a full relay message by id', argumentHint: '<messageId>' },\n { name: '/send-claimable', source: 'skill', description: 'Enqueue a claimable work item for one agent to claim' },\n { name: '/status', source: 'skill', description: \"Show this agent's relay status\" },\n { name: '/tags', source: 'skill', description: \"List or update this agent's relay tags\" },\n { name: '/label', source: 'skill', description: \"Read, set, or clear this agent's relay label\" },\n { name: '/disconnect', source: 'skill', description: 'End the current relay pair session' },\n]\n\nconst BUILTIN_DESCRIPTIONS: Record<string, { description: string; argumentHint?: string }> = {\n '/clear': { description: 'Clear conversation history and free up context' },\n '/compact': { description: 'Compact the conversation to reclaim context', argumentHint: '[instructions]' },\n '/model': { description: 'Switch the active model', argumentHint: '[model]' },\n '/help': { description: 'Show help' },\n '/new': { description: 'Start a new thread' },\n}\n\nexport function providerSlashCommands(provider: string | undefined): SlashCommand[] {\n const manifest = provider ? getProviderManifest(provider) : undefined\n const builtins: SlashCommand[] = (manifest?.slashCommands ?? []).map((name) => ({\n name,\n source: 'builtin',\n ...BUILTIN_DESCRIPTIONS[name],\n }))\n return [...builtins, ...RELAY_SLASH_COMMANDS]\n}\n","import { Eye, Pencil } from 'lucide-react'\nimport { useRelayStore } from '@/store'\nimport { dashboardClientId } from '@/lib/dashboard-attribution'\nimport { humanDisplayName } from '@/lib/display'\nimport { cn } from '@/lib/utils'\n\n// \"X is viewing / typing\" for an agent thread (#390). Reads live viewers from the presence\n// store (fed by the dashboard.presence SSE event), excludes our own browser, and resolves each\n// viewer's name via the users directory. Renders nothing when no one else is watching — so a\n// single solo operator (today's default) sees no presence chrome at all.\nexport function ViewerPresence({ agentId, className }: { agentId: string; className?: string }) {\n const viewers = useRelayStore((s) => s.presenceByAgent[agentId])\n const usersById = useRelayStore((s) => s.usersById)\n const selfClientId = dashboardClientId()\n\n const others = (viewers ?? []).filter((v) => v.clientId !== selfClientId)\n if (others.length === 0) return null\n\n // Unique human names among the other viewers (a person on two devices collapses to one name).\n const names = Array.from(new Set(others.map((v) => humanDisplayName(v.userId, usersById))))\n const typing = others.some((v) => v.typing)\n const label = names.length === 1 ? names[0] : `${names.length} viewers`\n const Icon = typing ? Pencil : Eye\n\n return (\n <span\n title={`${names.join(', ')}${typing ? ' · typing' : ' · viewing'}`}\n className={cn('inline-flex items-center gap-1 rounded-full bg-muted/40 px-2 py-0.5 text-[11px] text-muted-foreground', className)}\n >\n <Icon className={cn('h-3 w-3 shrink-0', typing && 'text-emerald-400')} />\n <span className=\"truncate max-w-[12ch]\">{label}{typing && names.length === 1 ? ' is typing…' : ''}</span>\n </span>\n )\n}\n","import {\n ArrowLeft,\n CircleStop,\n Download,\n Eraser,\n Flag,\n FolderOpen,\n GitFork,\n MailOpen,\n MailX,\n Minimize2,\n MoreHorizontal,\n Power,\n Search,\n Terminal,\n Volume2,\n VolumeX,\n} from 'lucide-react'\nimport { AgentRuntimeChips, ContextRing, agentHasContextTelemetry } from '@/components/shared/agent-runtime-summary'\nimport { AgentTypeIcon } from '@/components/shared/agent-type-icon'\nimport { ProfileIcon, agentProfileName } from '@/components/shared/profile-icon'\nimport { BranchStateBadge } from '@/components/shared/branch-state-badge'\nimport { CopyButton } from '@/components/shared/copy-button'\nimport { StatusDot } from '@/components/shared/status-dot'\nimport { ViewerPresence } from './ViewerPresence'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'\nimport { voiceTts } from '@/lib/voice'\nimport { displayName, providerBlockedState, shortPath } from '@/lib/display'\nimport type { Agent, ChatHistoryImport, InboxThread, Message } from '@/types'\n\ntype ExportableThread = InboxThread | { peer: string; messages: Message[]; importedHistory: ChatHistoryImport[] }\n\nexport function ChatHeader({\n selectedInboxThread,\n agent,\n now,\n blockedState,\n thread,\n exportableThread,\n importedHistory,\n showBackButton,\n onBack,\n openAgentDetail,\n openWorkspaceFocus,\n voiceTtsEnabled,\n setVoiceTtsEnabled,\n canOpenTerminal,\n terminalOpening,\n handleOpenTerminal,\n canInterrupt,\n interruptAgent,\n canCompact,\n canClearContext,\n canShutdown,\n openConfirm,\n workspaceAction,\n doAgentAction,\n openFilesForAgent,\n forkFromAgent,\n markInboxThreadUnread,\n markInboxThreadRead,\n exportThread,\n onOpenSearch,\n}: {\n selectedInboxThread: string\n agent: Agent | null\n now: number\n blockedState: ReturnType<typeof providerBlockedState>\n thread: InboxThread | null\n exportableThread: ExportableThread | null\n importedHistory: ChatHistoryImport[]\n showBackButton?: boolean\n onBack?: () => void\n openAgentDetail: (agent: Agent) => void\n openWorkspaceFocus: (workspaceId: string) => void\n voiceTtsEnabled: boolean\n setVoiceTtsEnabled: (enabled: boolean) => void\n canOpenTerminal: boolean\n terminalOpening: boolean\n handleOpenTerminal: () => void | Promise<void>\n canInterrupt: boolean\n interruptAgent: () => void\n canCompact: boolean\n canClearContext: boolean\n canShutdown: boolean\n openConfirm: (title: string, body: string, action: () => void) => void\n workspaceAction: (workspaceId: string, action: 'ready') => void | Promise<void>\n doAgentAction: (agent: Agent, action: 'interrupt' | 'compact' | 'clearContext' | 'shutdown') => void | Promise<void>\n openFilesForAgent: (agent: Agent) => void | Promise<void>\n forkFromAgent: (agentId: string, messages: Message[]) => void\n markInboxThreadUnread: (peer: string) => void\n markInboxThreadRead: (peer: string, messages: Message[]) => void\n exportThread: (thread: ExportableThread, format: 'json') => void\n onOpenSearch?: () => void\n}) {\n return (\n <div className=\"flex items-center justify-between px-3 md:px-4 py-2.5 md:py-3 border-b border-border shrink-0\">\n <div className=\"flex items-center gap-2 md:gap-2.5 min-w-0\">\n {showBackButton && (\n <Button variant=\"ghost\" size=\"icon-sm\" onClick={onBack} className=\"shrink-0 -ml-1\">\n <ArrowLeft className=\"w-4 h-4\" />\n </Button>\n )}\n <button\n type=\"button\"\n className=\"flex items-center gap-2 md:gap-2.5 min-w-0 hover:opacity-80 transition-opacity\"\n onClick={() => agent && openAgentDetail(agent)}\n disabled={!agent}\n >\n <div className=\"relative shrink-0\">\n <AgentTypeIcon agent={agent} />\n <StatusDot agent={agent} now={now} className=\"absolute -bottom-0.5 -right-0.5 w-2 h-2\" />\n </div>\n <div className=\"min-w-0 text-left\">\n <p className=\"flex items-center gap-1 text-sm font-medium truncate\">\n {agent && <ProfileIcon profile={agentProfileName(agent)} className=\"shrink-0\" />}\n <span className=\"truncate\">{agent ? displayName(agent) : selectedInboxThread}</span>\n </p>\n {agent && (\n <p className=\"text-xs text-muted-foreground truncate\">\n {blockedState ? `blocked: ${blockedState.label}` : agent.status}\n {agent.machine && ` · ${agent.machine}`}\n {typeof agent.meta?.cwd === 'string' && agent.meta.cwd && ` · ${shortPath(agent.meta.cwd as string, 1)}`}\n </p>\n )}\n </div>\n </button>\n {agent && <AgentRuntimeChips agent={agent} compact className=\"hidden @4xl/chat:flex shrink-0\" />}\n {agent && agentHasContextTelemetry(agent) && <ContextRing context={agent.context} expected />}\n {agent?.branchState && agent.branchWorkspaceId && (\n <BranchStateBadge state={agent.branchState} className=\"shrink-0\" onClick={() => void openWorkspaceFocus(agent.branchWorkspaceId!)} />\n )}\n {thread?.attention.unread ? (\n <Badge className=\"bg-red-500/20 text-red-400 text-xs shrink-0 hidden @2xl/chat:flex\">{thread.attention.unread} unread</Badge>\n ) : null}\n {agent && <ViewerPresence agentId={agent.id} className=\"shrink-0 hidden @3xl/chat:inline-flex\" />}\n </div>\n \n <div className=\"flex items-center gap-0.5 md:gap-1 shrink-0\">\n {agent && (\n <>\n <CopyButton value={agent.id} label=\"Copy agent ID\" size=\"icon-sm\" />\n {onOpenSearch && <Button variant=\"ghost\" size=\"icon-sm\" title=\"Search this chat\" onClick={onOpenSearch}><Search className=\"w-3.5 h-3.5\" /></Button>}\n {voiceTts.available && <Button variant=\"ghost\" size=\"icon-sm\" title={voiceTtsEnabled ? 'Speaking agent responses aloud — click to mute (engine & voice in Settings)' : 'Speak agent responses aloud (active chat) — engine & voice in Settings'} className={voiceTtsEnabled ? 'text-primary' : ''} onClick={() => setVoiceTtsEnabled(!voiceTtsEnabled)}>{voiceTtsEnabled ? <Volume2 className=\"w-3.5 h-3.5\" /> : <VolumeX className=\"w-3.5 h-3.5\" />}</Button>}\n {canOpenTerminal && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" disabled={terminalOpening} title=\"Terminal\" onClick={() => void handleOpenTerminal()}><Terminal className=\"w-3.5 h-3.5\" /></Button>}\n {canInterrupt && <Button variant=\"ghost\" size=\"icon-sm\" className=\"text-red-400 hover:text-red-300\" title=\"Interrupt\" onClick={interruptAgent}><CircleStop className=\"w-3.5 h-3.5\" /></Button>}\n {(agent.branchState === 'changes' || agent.branchState === 'idle') && agent.branchWorkspaceId && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex text-amber-400 hover:text-amber-300\" title=\"Mark workspace ready — hand off to the auto-merge\" onClick={() => openConfirm('Mark Workspace Ready', `Mark ${displayName(agent)}'s branch ready to land? The relay auto-merge will rebase and land it.`, () => workspaceAction(agent.branchWorkspaceId!, 'ready'))}><Flag className=\"w-3.5 h-3.5\" /></Button>}\n {canCompact && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Compact\" onClick={() => openConfirm('Compact Agent', `Compact context for ${displayName(agent)}?`, () => doAgentAction(agent, 'compact'))}><Minimize2 className=\"w-3.5 h-3.5\" /></Button>}\n {canClearContext && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Clear context\" onClick={() => openConfirm('Clear Context', `Clear context for ${displayName(agent)}?`, () => doAgentAction(agent, 'clearContext'))}><Eraser className=\"w-3.5 h-3.5\" /></Button>}\n {canShutdown && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Shutdown\" onClick={() => openConfirm('Shutdown Agent', `Shutdown ${displayName(agent)}?`, () => doAgentAction(agent, 'shutdown'))}><Power className=\"w-3.5 h-3.5\" /></Button>}\n {agent && typeof agent.meta?.cwd === 'string' && agent.meta.cwd && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title={`Open ${agent.meta.cwd as string} in Files`} onClick={() => void openFilesForAgent(agent)}><FolderOpen className=\"w-3.5 h-3.5\" /></Button>}\n {agent && thread && thread.messages.length > 0 && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Fork — spawn new agent with this chat history\" onClick={() => forkFromAgent(agent.id, thread.messages)}><GitFork className=\"w-3.5 h-3.5\" /></Button>}\n {thread && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Mark unread\" onClick={() => markInboxThreadUnread(selectedInboxThread)}><MailX className=\"w-3.5 h-3.5\" /></Button>}\n {thread && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Mark read\" onClick={() => markInboxThreadRead(thread.peer, thread.messages)}><MailOpen className=\"w-3.5 h-3.5\" /></Button>}\n {exportableThread && <Button variant=\"ghost\" size=\"icon-sm\" className=\"hidden @4xl/chat:inline-flex\" title=\"Export thread\" onClick={() => exportThread({ ...exportableThread, importedHistory }, 'json')}><Download className=\"w-3.5 h-3.5\" /></Button>}\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <Button variant=\"ghost\" size=\"icon-sm\" className=\"@4xl/chat:hidden\"><MoreHorizontal className=\"w-3.5 h-3.5\" /></Button>\n </DropdownMenuTrigger>\n <DropdownMenuContent align=\"end\">\n {canOpenTerminal && <DropdownMenuItem disabled={terminalOpening} onClick={() => void handleOpenTerminal()}><Terminal className=\"w-3.5 h-3.5\" />Terminal</DropdownMenuItem>}\n {canInterrupt && <DropdownMenuItem onClick={interruptAgent}><CircleStop className=\"w-3.5 h-3.5\" />Interrupt</DropdownMenuItem>}\n {(agent.branchState === 'changes' || agent.branchState === 'idle') && agent.branchWorkspaceId && <DropdownMenuItem onClick={() => openConfirm('Mark Workspace Ready', `Mark ${displayName(agent)}'s branch ready to land? The relay auto-merge will rebase and land it.`, () => workspaceAction(agent.branchWorkspaceId!, 'ready'))}><Flag className=\"w-3.5 h-3.5\" />Mark Ready</DropdownMenuItem>}\n {canCompact && <DropdownMenuItem onClick={() => openConfirm('Compact Agent', `Compact context for ${displayName(agent)}?`, () => doAgentAction(agent, 'compact'))}><Minimize2 className=\"w-3.5 h-3.5\" />Compact</DropdownMenuItem>}\n {canClearContext && <DropdownMenuItem onClick={() => openConfirm('Clear Context', `Clear context for ${displayName(agent)}?`, () => doAgentAction(agent, 'clearContext'))}><Eraser className=\"w-3.5 h-3.5\" />Clear Context</DropdownMenuItem>}\n {canShutdown && <DropdownMenuItem onClick={() => openConfirm('Shutdown Agent', `Shutdown ${displayName(agent)}?`, () => doAgentAction(agent, 'shutdown'))}><Power className=\"w-3.5 h-3.5\" />Shutdown</DropdownMenuItem>}\n {agent && typeof agent.meta?.cwd === 'string' && agent.meta.cwd && <DropdownMenuItem onClick={() => void openFilesForAgent(agent)}><FolderOpen className=\"w-3.5 h-3.5\" />Open Files</DropdownMenuItem>}\n {agent && thread && thread.messages.length > 0 && <DropdownMenuItem onClick={() => forkFromAgent(agent.id, thread.messages)}><GitFork className=\"w-3.5 h-3.5\" />Fork</DropdownMenuItem>}\n {(canOpenTerminal || canCompact || canClearContext || canShutdown) && <DropdownMenuSeparator />}\n {thread && <DropdownMenuItem onClick={() => markInboxThreadUnread(selectedInboxThread)}><MailX className=\"w-3.5 h-3.5\" />Mark Unread</DropdownMenuItem>}\n {thread && <DropdownMenuItem onClick={() => markInboxThreadRead(thread.peer, thread.messages)}><MailOpen className=\"w-3.5 h-3.5\" />Mark Read</DropdownMenuItem>}\n {exportableThread && <DropdownMenuItem onClick={() => exportThread({ ...exportableThread, importedHistory }, 'json')}><Download className=\"w-3.5 h-3.5\" />Download</DropdownMenuItem>}\n </DropdownMenuContent>\n </DropdownMenu>\n </>\n )}\n </div>\n </div>\n )\n}\n","import { useRef } from 'react'\nimport { ChevronDown, ChevronUp, Search, X } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\nimport { Input } from '@/components/ui/input'\n\n// Sticky search toolbar at the top of the chat, below any other sticky top element\n// (e.g. the plan bar) by virtue of its column order in ChatPanel. shrink-0 + a bottom\n// border match the plan bar so the two stack as one header stack above the timeline.\nexport function ChatSearchBar({\n query,\n position,\n total,\n onQueryChange,\n onNext,\n onPrev,\n onClose,\n}: {\n query: string\n position: number\n total: number\n onQueryChange: (value: string) => void\n onNext: () => void\n onPrev: () => void\n onClose: () => void\n}) {\n const inputRef = useRef<HTMLInputElement>(null)\n const hasQuery = query.trim().length > 0\n const noMatches = hasQuery && total === 0\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLInputElement>) {\n if (e.key === 'Escape') {\n e.preventDefault()\n onClose()\n return\n }\n if (e.key === 'Enter') {\n e.preventDefault()\n if (e.shiftKey) onPrev()\n else onNext()\n }\n }\n\n return (\n <section className=\"flex shrink-0 items-center gap-2 border-b border-border bg-card/45 px-3 py-2\">\n <Search className=\"h-3.5 w-3.5 shrink-0 text-muted-foreground\" />\n <Input\n ref={inputRef}\n autoFocus\n value={query}\n onChange={(e) => onQueryChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder=\"Search this chat…\"\n aria-label=\"Search this chat\"\n className=\"h-7 flex-1 text-sm\"\n />\n <span\n className={\n 'shrink-0 tabular-nums text-xs ' + (noMatches ? 'text-red-400' : 'text-muted-foreground')\n }\n >\n {hasQuery ? (noMatches ? 'No results' : `${position}/${total}`) : ''}\n </span>\n <div className=\"flex shrink-0 items-center gap-0.5\">\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n title=\"Previous match (Shift+Enter)\"\n disabled={total === 0}\n onClick={onPrev}\n >\n <ChevronUp className=\"h-3.5 w-3.5\" />\n </Button>\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"icon-sm\"\n title=\"Next match (Enter)\"\n disabled={total === 0}\n onClick={onNext}\n >\n <ChevronDown className=\"h-3.5 w-3.5\" />\n </Button>\n <Button type=\"button\" variant=\"ghost\" size=\"icon-sm\" title=\"Close search (Esc)\" onClick={onClose}>\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n </section>\n )\n}\n","\nimport type { SlashCommand } from '@/lib/slash-commands'\nimport { cn } from '@/lib/utils'\n\nexport function SlashPalette({\n matches,\n activeIndex,\n onAccept,\n onHover,\n}: {\n matches: SlashCommand[]\n activeIndex: number\n onAccept: (cmd: SlashCommand) => void\n onHover: (index: number) => void\n}) {\n if (matches.length === 0) return null\n return (\n <div className=\"absolute bottom-full left-3 right-3 md:left-4 md:right-4 mb-2 z-20 max-h-64 overflow-auto rounded-xl border border-border bg-popover shadow-lg\">\n {matches.map((cmd, i) => (\n <button\n key={cmd.name}\n onMouseDown={(e) => { e.preventDefault(); onAccept(cmd) }}\n onMouseEnter={() => onHover(i)}\n className={cn('flex w-full items-baseline gap-2 px-3 py-1.5 text-left text-sm', i === activeIndex ? 'bg-accent' : 'hover:bg-accent/50')}\n >\n <span className=\"font-medium shrink-0\">{cmd.name}</span>\n {cmd.argumentHint && <span className=\"text-xs text-muted-foreground shrink-0\">{cmd.argumentHint}</span>}\n {cmd.description && <span className=\"ml-auto truncate text-xs text-muted-foreground/70\">{cmd.description}</span>}\n </button>\n ))}\n </div>\n )\n}\n","\nimport { useEffect, useRef, useState } from 'react'\nimport { AlertCircle, FileText, Loader2, Mic, Paperclip, Send, X, ZoomIn } from 'lucide-react'\nimport { Button } from '@/components/ui/button'\nimport { Dialog, DialogContent, DialogTitle } from '@/components/ui/dialog'\nimport { cn } from '@/lib/utils'\nimport type { PendingAttachment } from './types'\nimport { formatBytes } from './helpers'\nimport { SlashPalette } from './SlashPalette'\nimport type { SlashCommand } from '@/lib/slash-commands'\n\nfunction AutoGrowTextarea({\n value, onChange, onKeyDown, onPaste, placeholder, className,\n}: {\n value: string\n onChange: (e: React.ChangeEvent<HTMLTextAreaElement>) => void\n onKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void\n onPaste?: (e: React.ClipboardEvent<HTMLTextAreaElement>) => void\n placeholder: string\n className?: string\n}) {\n const textareaRef = useRef<HTMLTextAreaElement>(null)\n\n useEffect(() => {\n const el = textareaRef.current\n if (!el) return\n el.style.height = 'auto'\n el.style.height = Math.min(el.scrollHeight, 200) + 'px'\n }, [value])\n\n // Handle mobile keyboard: keep input visible\n useEffect(() => {\n const vv = window.visualViewport\n if (!vv) return\n\n function handleResize() {\n const el = textareaRef.current\n if (!el || document.activeElement !== el) return\n // Scroll the input into view when keyboard appears\n requestAnimationFrame(() => {\n el.scrollIntoView({ block: 'nearest', behavior: 'smooth' })\n })\n }\n\n vv.addEventListener('resize', handleResize)\n return () => vv.removeEventListener('resize', handleResize)\n }, [])\n\n return (\n <textarea\n ref={textareaRef}\n value={value}\n onChange={onChange}\n onKeyDown={onKeyDown}\n onPaste={onPaste}\n placeholder={placeholder}\n rows={1}\n className={cn(\n 'w-full resize-none rounded-xl border border-border bg-background px-3.5 py-2.5 text-sm',\n 'placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n 'min-h-[42px] max-h-[200px] overflow-y-auto',\n className\n )}\n />\n )\n}\n\nfunction PendingAttachmentPreview({ item, onRemove }: { item: PendingAttachment; onRemove: () => void }) {\n const [open, setOpen] = useState(false)\n const canPreview = Boolean(item.previewUrl && !item.error)\n\n return (\n <>\n <div className=\"flex min-w-0 items-center gap-2 rounded-md border border-border bg-card px-2.5 py-2 text-xs\">\n <button\n type=\"button\"\n disabled={!canPreview}\n onClick={() => setOpen(true)}\n className=\"group/pending relative flex h-9 w-9 shrink-0 items-center justify-center overflow-hidden rounded bg-muted disabled:cursor-default\"\n title={canPreview ? 'Preview image' : item.fileName}\n >\n {item.previewUrl ? (\n <>\n <img src={item.previewUrl} alt={item.fileName} className=\"h-full w-full object-cover\" />\n <span className=\"absolute inset-0 flex items-center justify-center bg-black/0 group-hover/pending:bg-black/30 transition-colors\">\n <ZoomIn className=\"h-3.5 w-3.5 text-white opacity-0 group-hover/pending:opacity-100 transition-opacity drop-shadow-md\" />\n </span>\n </>\n ) : (\n item.error ? <AlertCircle className=\"h-4 w-4 text-red-400\" /> : item.uploading ? <Loader2 className=\"h-4 w-4 animate-spin text-muted-foreground\" /> : <FileText className=\"h-4 w-4 text-muted-foreground\" />\n )}\n </button>\n <div className=\"min-w-0 flex-1\">\n <p className=\"truncate font-medium\">{item.fileName}</p>\n <p className={cn('truncate text-muted-foreground', item.error && 'text-red-400')}>{item.error || (item.uploading ? 'Uploading' : formatBytes(item.size))}</p>\n </div>\n <Button variant=\"ghost\" size=\"icon-sm\" title=\"Remove attachment\" onClick={onRemove}>\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n {item.previewUrl && (\n <Dialog open={open} onOpenChange={setOpen}>\n <DialogContent className=\"max-w-[95vw] max-h-[95vh] w-auto p-0 bg-black/95 border-zinc-800 gap-0 overflow-hidden\" showCloseButton={false}>\n <DialogTitle className=\"sr-only\">{item.fileName}</DialogTitle>\n <div className=\"relative flex items-center justify-center min-h-[200px]\">\n <img src={item.previewUrl} alt={item.fileName} className=\"max-w-[93vw] max-h-[90vh] object-contain\" />\n <button type=\"button\" onClick={() => setOpen(false)} className=\"absolute top-2 right-2 rounded-md bg-black/60 hover:bg-black/80 p-2 text-white transition-colors\" title=\"Close\">\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n </DialogContent>\n </Dialog>\n )}\n </>\n )\n}\n\nexport function Composer({\n draft,\n placeholder,\n chatSending,\n disabled,\n hasPendingUploads,\n readyAttachmentCount,\n pendingAttachments,\n micAvailable,\n micState,\n slashMatches,\n slashActiveIndex,\n onDraftChange,\n onKeyDown,\n onPaste,\n onUploadFiles,\n onRemovePendingAttachment,\n onSend,\n onAcceptSlash,\n onSlashHover,\n onStartPtt,\n onStopPtt,\n footerText,\n}: {\n draft: string\n placeholder: string\n chatSending: boolean\n disabled: boolean\n hasPendingUploads: boolean\n readyAttachmentCount: number\n pendingAttachments: PendingAttachment[]\n micAvailable: boolean\n micState: 'idle' | 'recording' | 'transcribing'\n slashMatches: SlashCommand[]\n slashActiveIndex: number\n onDraftChange: (value: string) => void\n onKeyDown: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void\n onPaste: (e: React.ClipboardEvent<HTMLTextAreaElement>) => void\n onUploadFiles: (files: FileList | File[]) => void\n onRemovePendingAttachment: (id: string) => void\n onSend: () => void\n onAcceptSlash: (cmd: SlashCommand) => void\n onSlashHover: (index: number) => void\n onStartPtt: () => void\n onStopPtt: () => void\n footerText?: string\n}) {\n const fileInputRef = useRef<HTMLInputElement>(null)\n const [dragActive, setDragActive] = useState(false)\n const sendDisabled = (!draft.trim() && readyAttachmentCount === 0) || hasPendingUploads || chatSending || disabled\n\n return (\n <div\n className={cn(\n 'relative shrink-0 border-t border-border px-3 md:px-4 py-2.5 md:py-3 safe-area-bottom',\n dragActive && 'bg-primary/5 ring-1 ring-primary/40'\n )}\n onDragOver={(e) => { e.preventDefault(); setDragActive(true) }}\n onDragLeave={() => setDragActive(false)}\n onDrop={(e) => {\n e.preventDefault()\n setDragActive(false)\n onUploadFiles(e.dataTransfer.files)\n }}\n >\n {pendingAttachments.length > 0 && (\n <div className=\"mb-2 grid gap-2 sm:grid-cols-2\">\n {pendingAttachments.map((item) => (\n <PendingAttachmentPreview key={item.id} item={item} onRemove={() => onRemovePendingAttachment(item.id)} />\n ))}\n </div>\n )}\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n className=\"hidden\"\n onChange={(e) => {\n if (e.target.files) onUploadFiles(e.target.files)\n e.currentTarget.value = ''\n }}\n />\n <SlashPalette matches={slashMatches} activeIndex={slashActiveIndex} onAccept={onAcceptSlash} onHover={onSlashHover} />\n <div className=\"hidden md:flex items-end gap-2\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Attach files\"\n disabled={chatSending}\n onClick={() => fileInputRef.current?.click()}\n className=\"shrink-0 mb-0.5 rounded-xl h-[42px] w-[42px]\"\n >\n <Paperclip className=\"w-4 h-4\" />\n </Button>\n <AutoGrowTextarea\n value={draft}\n onChange={(e) => onDraftChange(e.target.value)}\n onKeyDown={onKeyDown}\n onPaste={onPaste}\n placeholder={placeholder}\n className=\"flex-1\"\n />\n {micAvailable && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={micState === 'recording' ? 'Release to transcribe' : 'Hold to talk'}\n disabled={chatSending || micState === 'transcribing'}\n onPointerDown={(e) => { e.preventDefault(); e.currentTarget.setPointerCapture(e.pointerId); onStartPtt() }}\n onPointerUp={(e) => { e.preventDefault(); try { e.currentTarget.releasePointerCapture(e.pointerId) } catch { /* ignore */ } onStopPtt() }}\n className={`shrink-0 mb-0.5 rounded-xl h-[42px] w-[42px] ${micState === 'recording' ? 'text-red-400 animate-pulse' : ''}`}\n >\n {micState === 'transcribing' ? <Loader2 className=\"w-4 h-4 animate-spin\" /> : <Mic className=\"w-4 h-4\" />}\n </Button>\n )}\n <Button\n size=\"icon\"\n disabled={sendDisabled}\n onClick={onSend}\n className=\"shrink-0 mb-0.5 rounded-xl h-[42px] w-[42px]\"\n >\n <Send className=\"w-4 h-4\" />\n </Button>\n </div>\n <div className=\"md:hidden space-y-2\">\n <AutoGrowTextarea\n value={draft}\n onChange={(e) => onDraftChange(e.target.value)}\n onKeyDown={onKeyDown}\n onPaste={onPaste}\n placeholder={placeholder}\n className=\"w-full\"\n />\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\">\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title=\"Attach files\"\n disabled={chatSending}\n onClick={() => fileInputRef.current?.click()}\n className=\"rounded-xl h-9 w-9\"\n >\n <Paperclip className=\"w-4 h-4\" />\n </Button>\n {micAvailable && (\n <Button\n variant=\"ghost\"\n size=\"icon\"\n title={micState === 'recording' ? 'Release to transcribe' : 'Hold to talk'}\n disabled={chatSending || micState === 'transcribing'}\n onPointerDown={(e) => { e.preventDefault(); e.currentTarget.setPointerCapture(e.pointerId); onStartPtt() }}\n onPointerUp={(e) => { e.preventDefault(); try { e.currentTarget.releasePointerCapture(e.pointerId) } catch { /* ignore */ } onStopPtt() }}\n className={`rounded-xl h-9 w-9 ${micState === 'recording' ? 'text-red-400 animate-pulse' : ''}`}\n >\n {micState === 'transcribing' ? <Loader2 className=\"w-4 h-4 animate-spin\" /> : <Mic className=\"w-4 h-4\" />}\n </Button>\n )}\n </div>\n <Button\n size=\"icon\"\n disabled={sendDisabled}\n onClick={onSend}\n className=\"rounded-xl h-9 w-9\"\n >\n <Send className=\"w-4 h-4\" />\n </Button>\n </div>\n </div>\n {footerText && (\n <p className=\"text-xs text-muted-foreground mt-1.5 hidden md:block\">\n {footerText}\n </p>\n )}\n </div>\n )\n}\n","\nimport { createPortal } from 'react-dom'\nimport { DirectoryContent, FileContent } from '@/components/views/files'\nimport type { ReferencedPathInfo } from './types'\n\nexport function FloatingFilePreview({\n preview,\n error,\n onReadError,\n onMouseEnter,\n onMouseLeave,\n}: {\n preview: { orchestratorId: string; path: string; line: number; type: ReferencedPathInfo['type']; anchor: DOMRect }\n error: string\n onReadError: (error: string) => void\n onMouseEnter: () => void\n onMouseLeave: () => void\n}) {\n const { anchor } = preview\n const gap = 8\n const width = Math.min(560, window.innerWidth - 24)\n const height = Math.min(380, window.innerHeight - 24)\n const left = Math.max(12, Math.min(anchor.left, window.innerWidth - width - 12))\n const spaceBelow = window.innerHeight - anchor.bottom\n const top = spaceBelow >= height + gap\n ? anchor.bottom + gap\n : anchor.top - gap - height >= 12\n ? anchor.top - gap - height\n : Math.max(12, window.innerHeight - height - 12)\n\n return createPortal(\n <div\n className=\"fixed z-50 flex flex-col overflow-hidden rounded-lg border border-border bg-background shadow-xl\"\n style={{ top, left, width, height }}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n >\n <div className=\"flex h-8 shrink-0 items-center gap-2 border-b border-border px-2.5\">\n <span className=\"min-w-0 flex-1 truncate text-[11px] font-medium text-muted-foreground\">{preview.path}</span>\n {error && <span className=\"max-w-[12rem] truncate text-[11px] text-red-400\">{error}</span>}\n <span className=\"shrink-0 text-[10px] text-muted-foreground/70\">click to pin</span>\n </div>\n <div className=\"min-h-0 flex-1\">\n {preview.type === 'directory' ? (\n <DirectoryContent orchestratorId={preview.orchestratorId} selectedPath={preview.path} onReadError={onReadError} />\n ) : (\n <FileContent orchestratorId={preview.orchestratorId} selectedPath={preview.path} line={preview.line} onReadError={onReadError} />\n )}\n </div>\n </div>,\n document.body,\n )\n}\n","\nimport { useRelayStore, type ChatStatusEvent as StatusEvent } from '@/store'\n\nconst NO_STATUS_EVENTS: StatusEvent[] = []\n\nexport function useAgentStatusEvents(agentId: string): StatusEvent[] {\n return useRelayStore((s) => s.chatStatusEvents[agentId] ?? NO_STATUS_EVENTS)\n}\n","\nimport { useEffect, useRef } from 'react'\n\nexport function useBackNavProtection(hasDraft: boolean, onBack: () => void) {\n const historyPushedRef = useRef(false)\n\n useEffect(() => {\n if (!hasDraft) return\n\n if (!historyPushedRef.current) {\n window.history.pushState({ chatGuard: true }, '')\n historyPushedRef.current = true\n }\n\n function handlePopState(e: PopStateEvent) {\n if (e.state?.chatGuard !== undefined || !historyPushedRef.current) {\n // Re-push state to keep the guard active\n window.history.pushState({ chatGuard: true }, '')\n onBack()\n }\n }\n\n function handleBeforeUnload(e: BeforeUnloadEvent) {\n e.preventDefault()\n }\n\n window.addEventListener('popstate', handlePopState)\n window.addEventListener('beforeunload', handleBeforeUnload)\n return () => {\n window.removeEventListener('popstate', handlePopState)\n window.removeEventListener('beforeunload', handleBeforeUnload)\n }\n }, [hasDraft, onBack])\n\n useEffect(() => {\n if (!hasDraft && historyPushedRef.current) {\n historyPushedRef.current = false\n }\n }, [hasDraft])\n}\n","import { type TimelineEntry, timelineEntryKey, timelineEntryText } from './sessionTrace'\n\n// Smart fuzzy match for chat search. The query matches a text if EITHER:\n// - it appears as a (case-insensitive) substring — the common, high-confidence case, or\n// - its characters appear in order as a subsequence within a single word run — the\n// \"fuzzy\" case that tolerates dropped letters (e.g. \"tmln\" → \"timeline\").\n// Substring wins because it's what people expect from a search box; the subsequence\n// fallback keeps a near-miss typo from returning zero results. Whitespace in the query\n// is collapsed so multi-word queries match across the gaps the user typed.\nexport function fuzzyMatches(text: string, query: string): boolean {\n const haystack = text.toLowerCase()\n const needle = query.trim().toLowerCase()\n if (!needle) return false\n if (haystack.includes(needle)) return true\n // Subsequence fallback only for a single contiguous token — fuzzing across spaces\n // produces too many false positives in long messages.\n if (/\\s/.test(needle)) return false\n // Very short needles (< 4 chars) are too ambiguous for subsequence matching —\n // single-char abbreviations like \"e\" would match almost everything.\n if (needle.length < 4) return false\n return isSubsequence(haystack, needle)\n}\n\n// maxGap caps the number of unmatched characters allowed between two consecutive\n// matched needle chars. Without this, \"abcdef\" matches any long English sentence.\nfunction isSubsequence(haystack: string, needle: string, maxGap = 4): boolean {\n let i = 0\n let lastMatch = -1\n for (let h = 0; h < haystack.length && i < needle.length; h += 1) {\n if (haystack[h] === needle[i]) {\n if (lastMatch !== -1 && h - lastMatch - 1 > maxGap) return false\n lastMatch = h\n i += 1\n }\n }\n return i === needle.length\n}\n\n// Returns the timeline-entry keys that match the query, in timeline (chronological)\n// order — that ordering is what powers the prev/next navigation and the \"1/N\" counter.\nexport function searchTimeline(timeline: TimelineEntry[], query: string): string[] {\n const needle = query.trim()\n if (!needle) return []\n const keys: string[] = []\n for (const entry of timeline) {\n const text = timelineEntryText(entry)\n if (text && fuzzyMatches(text, needle)) keys.push(timelineEntryKey(entry))\n }\n return keys\n}\n","import { useCallback, useMemo, useState } from 'react'\nimport type { TimelineEntry } from '../sessionTrace'\nimport { searchTimeline } from '../chatSearch'\n\ninterface ChatSearch {\n open: boolean\n query: string\n /** Match keys in timeline order (empty when query is blank or no matches). */\n matchKeys: string[]\n /** Set form for O(1) per-row highlight checks in the timeline. */\n matchKeySet: Set<string>\n /** Total match count. */\n total: number\n /** 1-based index of the current match (0 when there are none). */\n position: number\n /** Timeline key of the current match, or null. */\n currentKey: string | null\n openSearch: () => void\n close: () => void\n setQuery: (value: string) => void\n next: () => void\n prev: () => void\n}\n\n// Chat-session search state. All match computation is render-time derived from the\n// live timeline + query (no effects); navigation and query changes are plain event\n// handlers. The current match is clamped during render so a shrinking timeline (older\n// matches scrolling out, agent switch) can never strand the index out of range.\nexport function useChatSearch(timeline: TimelineEntry[]): ChatSearch {\n const [open, setOpen] = useState(false)\n const [query, setQueryState] = useState('')\n const [index, setIndex] = useState(0)\n\n const matchKeys = useMemo(() => (open ? searchTimeline(timeline, query) : []), [open, query, timeline])\n const matchKeySet = useMemo(() => new Set(matchKeys), [matchKeys])\n const total = matchKeys.length\n const safeIndex = total ? Math.min(index, total - 1) : 0\n const currentKey = total ? matchKeys[safeIndex] ?? null : null\n\n const openSearch = useCallback(() => setOpen(true), [])\n const close = useCallback(() => {\n setOpen(false)\n setQueryState('')\n setIndex(0)\n }, [])\n // Typing always re-anchors to the first match — the expected find-as-you-type behaviour.\n const setQuery = useCallback((value: string) => {\n setQueryState(value)\n setIndex(0)\n }, [])\n const next = useCallback(() => {\n setIndex((i) => (total ? (i + 1) % total : 0))\n }, [total])\n const prev = useCallback(() => {\n setIndex((i) => (total ? (i - 1 + total) % total : 0))\n }, [total])\n\n return {\n open,\n query,\n matchKeys,\n matchKeySet,\n total,\n position: total ? safeIndex + 1 : 0,\n currentKey,\n openSearch,\n close,\n setQuery,\n next,\n prev,\n }\n}\n","import { useEffect, useRef } from 'react'\nimport { useRelayStore } from '@/store'\n\nconst HEARTBEAT_MS = 10_000\n\n// Announce this dashboard's presence on an agent thread while its chat is open (#390). A\n// genuine external-sync effect: it drives the server-side presence registry via a timer +\n// announce, and fires a \"leaving\" beacon on cleanup so other dashboards drop us immediately\n// instead of waiting for the TTL. `typing` is folded into the heartbeat (via a ref so the\n// interval always sends the current value) plus an immediate re-announce on each flip, so the\n// \"is typing\" indicator updates without a 10s lag.\nexport function usePresenceHeartbeat(agentId: string, typing: boolean): void {\n const announcePresence = useRelayStore((s) => s.announcePresence)\n const typingRef = useRef(typing)\n typingRef.current = typing\n\n // Interval heartbeat + leave beacon, keyed only on the thread so a typing flip never tears\n // down the timer.\n useEffect(() => {\n if (!agentId) return\n void announcePresence(agentId, typingRef.current)\n const timer = setInterval(() => { void announcePresence(agentId, typingRef.current) }, HEARTBEAT_MS)\n return () => {\n clearInterval(timer)\n void announcePresence(agentId, false, true)\n }\n }, [agentId, announcePresence])\n\n // Push a typing transition straight through rather than waiting for the next tick.\n useEffect(() => {\n if (!agentId) return\n void announcePresence(agentId, typing)\n }, [agentId, typing, announcePresence])\n}\n","import { jsx as G, jsxs as $t } from \"react/jsx-runtime\";\nimport E, { createElement as Dt } from \"react\";\nimport So from \"react-dom\";\nconst we = 0, Pt = 1, Xt = 2, Wn = 4;\nfunction fn(t) {\n return () => t;\n}\nfunction xo(t) {\n t();\n}\nfunction re(t, e) {\n return (n) => t(e(n));\n}\nfunction mn(t, e) {\n return () => t(e);\n}\nfunction vo(t, e) {\n return (n) => t(e, n);\n}\nfunction _e(t) {\n return t !== void 0;\n}\nfunction To(...t) {\n return () => {\n t.map(xo);\n };\n}\nfunction Jt() {\n}\nfunction ye(t, e) {\n return e(t), t;\n}\nfunction Co(t, e) {\n return e(t);\n}\nfunction rt(...t) {\n return t;\n}\nfunction Y(t, e) {\n return t(Pt, e);\n}\nfunction _(t, e) {\n t(we, e);\n}\nfunction Ne(t) {\n t(Xt);\n}\nfunction it(t) {\n return t(Wn);\n}\nfunction k(t, e) {\n return Y(t, vo(e, we));\n}\nfunction yt(t, e) {\n const n = t(Pt, (o) => {\n n(), e(o);\n });\n return n;\n}\nfunction pn(t) {\n let e, n;\n return (o) => (r) => {\n e = r, n && clearTimeout(n), n = setTimeout(() => {\n o(e);\n }, t);\n };\n}\nfunction Pn(t, e) {\n return t === e;\n}\nfunction nt(t = Pn) {\n let e;\n return (n) => (o) => {\n t(e, o) || (e = o, n(o));\n };\n}\nfunction P(t) {\n return (e) => (n) => {\n t(n) && e(n);\n };\n}\nfunction B(t) {\n return (e) => re(e, t);\n}\nfunction Bt(t) {\n return (e) => () => {\n e(t);\n };\n}\nfunction x(t, ...e) {\n const n = wo(...e);\n return ((o, r) => {\n switch (o) {\n case Xt:\n Ne(t);\n return;\n case Pt:\n return Y(t, n(r));\n }\n });\n}\nfunction Lt(t, e) {\n return (n) => (o) => {\n n(e = t(e, o));\n };\n}\nfunction Ut(t) {\n return (e) => (n) => {\n t > 0 ? t-- : e(n);\n };\n}\nfunction zt(t) {\n let e = null, n;\n return (o) => (r) => {\n e = r, !n && (n = setTimeout(() => {\n n = void 0, o(e);\n }, t));\n };\n}\nfunction $(...t) {\n const e = new Array(t.length);\n let n = 0, o = null;\n const r = 2 ** t.length - 1;\n return t.forEach((s, i) => {\n const l = 2 ** i;\n Y(s, (c) => {\n const d = n;\n n |= l, e[i] = c, d !== r && n === r && o && (o(), o = null);\n });\n }), (s) => (i) => {\n const l = () => {\n s([i].concat(e));\n };\n n === r ? l() : o = l;\n };\n}\nfunction wo(...t) {\n return (e) => t.reduceRight(Co, e);\n}\nfunction yo(t) {\n let e, n;\n const o = () => e?.();\n return function(r, s) {\n switch (r) {\n case Pt:\n return s ? n === s ? void 0 : (o(), n = s, e = Y(t, s), e) : (o(), Jt);\n case Xt:\n o(), n = null;\n return;\n }\n };\n}\nfunction T(t) {\n let e = t;\n const n = U();\n return ((o, r) => {\n switch (o) {\n case we:\n e = r;\n break;\n case Pt: {\n r(e);\n break;\n }\n case Wn:\n return e;\n }\n return n(o, r);\n });\n}\nfunction ht(t, e) {\n return ye(T(e), (n) => k(t, n));\n}\nfunction U() {\n const t = [];\n return ((e, n) => {\n switch (e) {\n case we:\n t.slice().forEach((o) => {\n o(n);\n });\n return;\n case Xt:\n t.splice(0, t.length);\n return;\n case Pt:\n return t.push(n), () => {\n const o = t.indexOf(n);\n o > -1 && t.splice(o, 1);\n };\n }\n });\n}\nfunction Tt(t) {\n return ye(U(), (e) => k(t, e));\n}\nfunction j(t, e = [], { singleton: n } = { singleton: !0 }) {\n return {\n constructor: t,\n dependencies: e,\n id: bo(),\n singleton: n\n };\n}\nconst bo = () => Symbol();\nfunction Ro(t) {\n const e = /* @__PURE__ */ new Map(), n = ({ constructor: o, dependencies: r, id: s, singleton: i }) => {\n if (i && e.has(s))\n return e.get(s);\n const l = o(r.map((c) => n(c)));\n return i && e.set(s, l), l;\n };\n return n(t);\n}\nfunction at(...t) {\n const e = U(), n = new Array(t.length);\n let o = 0;\n const r = 2 ** t.length - 1;\n return t.forEach((s, i) => {\n const l = 2 ** i;\n Y(s, (c) => {\n n[i] = c, o |= l, o === r && _(e, n);\n });\n }), function(s, i) {\n switch (s) {\n case Xt: {\n Ne(e);\n return;\n }\n case Pt:\n return o === r && i(n), Y(e, i);\n }\n };\n}\nfunction W(t, e = Pn) {\n return x(t, nt(e));\n}\nfunction Fe(...t) {\n return function(e, n) {\n switch (e) {\n case Xt:\n return;\n case Pt:\n return To(...t.map((o) => Y(o, n)));\n }\n };\n}\nconst ft = {\n /** Detailed debugging information including item measurements */\n DEBUG: 0,\n /** General informational messages */\n INFO: 1,\n /** Warning messages for potential issues */\n WARN: 2,\n /** Error messages for failures (default level) */\n ERROR: 3\n}, Ho = {\n [ft.DEBUG]: \"debug\",\n [ft.ERROR]: \"error\",\n [ft.INFO]: \"log\",\n [ft.WARN]: \"warn\"\n}, Eo = () => typeof globalThis > \"u\" ? window : globalThis, Gt = j(\n () => {\n const t = T(ft.ERROR);\n return {\n log: T((n, o, r = ft.INFO) => {\n const s = Eo().VIRTUOSO_LOG_LEVEL ?? it(t);\n r >= s && console[Ho[r]](\n \"%creact-virtuoso: %c%s %o\",\n \"color: #0253b3; font-weight: bold\",\n \"color: initial\",\n n,\n o\n );\n }),\n logLevel: t\n };\n },\n [],\n { singleton: !0 }\n), Ve = /* @__PURE__ */ new WeakMap();\nfunction Gn(t) {\n return \"self\" in t ? t.document.documentElement : t;\n}\nfunction Bo(t) {\n const e = Gn(t), n = Ve.get(e);\n if (n !== void 0)\n return n;\n const o = e.ownerDocument.defaultView.getComputedStyle(e).direction === \"rtl\";\n return Ve.set(e, o), o;\n}\nfunction hn(t) {\n Ve.delete(Gn(t));\n}\nfunction An(t, e) {\n return Bo(t) ? -e : e;\n}\nconst _t = An;\nfunction gn(t, e) {\n return An(t, e);\n}\nfunction Ot(t, e, n) {\n return De(t, e, n).callbackRef;\n}\nfunction De(t, e, n) {\n const o = E.useRef(null);\n let r = (i) => {\n };\n const s = E.useMemo(() => typeof ResizeObserver < \"u\" ? new ResizeObserver((i) => {\n const l = () => {\n const c = i[0].target;\n c.offsetParent !== null && t(c);\n };\n n ? l() : requestAnimationFrame(l);\n }) : null, [t, n]);\n return r = (i) => {\n i && e ? (s?.observe(i), o.current = i) : (o.current && s?.unobserve(o.current), o.current = null);\n }, { callbackRef: r, ref: o };\n}\nfunction Mn(t, e, n, o, r, s, i, l, c) {\n const d = E.useCallback(\n (m) => {\n const v = Lo(m.children, e, l ? \"offsetWidth\" : \"offsetHeight\", r);\n let p = m.parentElement;\n for (; p.dataset.virtuosoScroller === void 0; )\n p = p.parentElement;\n const I = p.lastElementChild.dataset.viewportType === \"window\";\n let w;\n I && (w = p.ownerDocument.defaultView);\n const R = i ? l ? i.scrollWidth : i.scrollHeight : I ? l ? w.document.documentElement.scrollWidth : w.document.documentElement.scrollHeight : l ? p.scrollWidth : p.scrollHeight, h = i ? l ? i.offsetWidth : i.offsetHeight : I ? l ? w.innerWidth : w.innerHeight : l ? p.offsetWidth : p.offsetHeight, f = i ? l ? _t(i, i.scrollLeft) : i.scrollTop : I ? l ? _t(w, w.scrollX || w.document.documentElement.scrollLeft) : w.scrollY || w.document.documentElement.scrollTop : l ? _t(p, p.scrollLeft) : p.scrollTop;\n o({\n scrollHeight: R,\n scrollTop: Math.max(f, 0),\n viewportHeight: h\n }), s?.(\n l ? In(\"column-gap\", getComputedStyle(m).columnGap, r) : In(\"row-gap\", getComputedStyle(m).rowGap, r)\n ), v !== null && t(v);\n },\n [t, e, r, s, i, o, l]\n );\n return De(d, n, c);\n}\nfunction Lo(t, e, n, o) {\n const r = t.length;\n if (r === 0)\n return null;\n const s = [];\n for (let i = 0; i < r; i++) {\n const l = t.item(i);\n if (l.dataset.index === void 0)\n continue;\n const c = parseInt(l.dataset.index), d = parseFloat(l.dataset.knownSize), m = e(l, n);\n if (m === 0 && o(\"Zero-sized element, this should not happen\", { child: l }, ft.ERROR), m === d)\n continue;\n const v = s[s.length - 1];\n s.length === 0 || v.size !== m || v.endIndex !== c - 1 ? s.push({ endIndex: c, size: m, startIndex: c }) : s[s.length - 1].endIndex++;\n }\n return s;\n}\nfunction In(t, e, n) {\n return e !== \"normal\" && e?.endsWith(\"px\") !== !0 && n(`${t} was not resolved to pixel value correctly`, e, ft.WARN), e === \"normal\" ? 0 : parseInt(e ?? \"0\", 10);\n}\nfunction $e(t, e, n) {\n const o = E.useRef(null), r = E.useCallback(\n (c) => {\n if (!c?.offsetParent)\n return;\n const d = c.getBoundingClientRect(), m = d.width;\n let v, p;\n if (e) {\n const I = e.getBoundingClientRect(), w = d.top - I.top;\n p = I.height - Math.max(0, w), v = w + e.scrollTop;\n } else {\n const I = i.current.ownerDocument.defaultView;\n p = I.innerHeight - Math.max(0, d.top), v = d.top + I.scrollY;\n }\n o.current = {\n listHeight: d.height,\n offsetTop: v,\n visibleHeight: p,\n visibleWidth: m\n }, t(o.current);\n },\n // oxlint-disable-next-line exhaustive-deps\n [t, e]\n ), { callbackRef: s, ref: i } = De(r, !0, n), l = E.useCallback(() => {\n r(i.current);\n }, [r, i]);\n return E.useEffect(() => {\n if (e) {\n e.addEventListener(\"scroll\", l);\n const d = new ResizeObserver(() => {\n requestAnimationFrame(l);\n });\n return d.observe(e), () => {\n e.removeEventListener(\"scroll\", l), d.unobserve(e);\n };\n }\n const c = i.current?.ownerDocument.defaultView;\n return c?.addEventListener(\"scroll\", l), c?.addEventListener(\"resize\", l), () => {\n c?.removeEventListener(\"scroll\", l), c?.removeEventListener(\"resize\", l);\n };\n }, [l, e, i]), s;\n}\nconst It = j(\n () => {\n const t = U(), e = U(), n = T(0), o = U(), r = T(0), s = U(), i = U(), l = T(0), c = T(0), d = T(0), m = T(0), v = U(), p = U(), I = T(!1), w = T(!1), R = T(!1);\n return k(\n x(\n t,\n B(({ scrollTop: h }) => h)\n ),\n e\n ), k(\n x(\n t,\n B(({ scrollHeight: h }) => h)\n ),\n i\n ), k(e, r), {\n deviation: n,\n fixedFooterHeight: d,\n fixedHeaderHeight: c,\n footerHeight: m,\n headerHeight: l,\n horizontalDirection: w,\n scrollBy: p,\n // input\n scrollContainerState: t,\n scrollHeight: i,\n scrollingInProgress: I,\n // signals\n scrollTo: v,\n scrollTop: e,\n skipAnimationFrameInResizeObserver: R,\n smoothScrollTargetReached: o,\n // state\n statefulScrollTop: r,\n viewportHeight: s\n };\n },\n [],\n { singleton: !0 }\n), se = { lvl: 0 };\nfunction _n(t, e) {\n const n = t.length;\n if (n === 0)\n return [];\n let { index: o, value: r } = e(t[0]);\n const s = [];\n for (let i = 1; i < n; i++) {\n const { index: l, value: c } = e(t[i]);\n s.push({ end: l - 1, start: o, value: r }), o = l, r = c;\n }\n return s.push({ end: 1 / 0, start: o, value: r }), s;\n}\nfunction J(t) {\n return t === se;\n}\nfunction ie(t, e) {\n if (!J(t))\n return e === t.k ? t.v : e < t.k ? ie(t.l, e) : ie(t.r, e);\n}\nfunction Rt(t, e, n = \"k\") {\n if (J(t))\n return [-1 / 0, void 0];\n if (Number(t[n]) === e)\n return [t.k, t.v];\n if (Number(t[n]) < e) {\n const o = Rt(t.r, e, n);\n return o[0] === -1 / 0 ? [t.k, t.v] : o;\n }\n return Rt(t.l, e, n);\n}\nfunction vt(t, e, n) {\n return J(t) ? $n(e, n, 1) : e === t.k ? dt(t, { k: e, v: n }) : e < t.k ? Sn(dt(t, { l: vt(t.l, e, n) })) : Sn(dt(t, { r: vt(t.r, e, n) }));\n}\nfunction Yt() {\n return se;\n}\nfunction Zt(t, e, n) {\n if (J(t))\n return [];\n const o = Rt(t, e)[0];\n return Oo(Pe(t, o, n));\n}\nfunction We(t, e) {\n if (J(t))\n return se;\n const { k: n, l: o, r } = t;\n if (e === n) {\n if (J(o))\n return r;\n if (J(r))\n return o;\n const [s, i] = Dn(o);\n return xe(dt(t, { k: s, l: Nn(o), v: i }));\n }\n return e < n ? xe(dt(t, { l: We(o, e) })) : xe(dt(t, { r: We(r, e) }));\n}\nfunction Nt(t) {\n return J(t) ? [] : [...Nt(t.l), { k: t.k, v: t.v }, ...Nt(t.r)];\n}\nfunction Pe(t, e, n) {\n if (J(t))\n return [];\n const { k: o, l: r, r: s, v: i } = t;\n let l = [];\n return o > e && (l = l.concat(Pe(r, e, n))), o >= e && o <= n && l.push({ k: o, v: i }), o <= n && (l = l.concat(Pe(s, e, n))), l;\n}\nfunction xe(t) {\n const { l: e, lvl: n, r: o } = t;\n if (o.lvl >= n - 1 && e.lvl >= n - 1)\n return t;\n if (n > o.lvl + 1) {\n if (Be(e))\n return Un(dt(t, { lvl: n - 1 }));\n if (!J(e) && !J(e.r))\n return dt(e.r, {\n l: dt(e, { r: e.r.l }),\n lvl: n,\n r: dt(t, {\n l: e.r.r,\n lvl: n - 1\n })\n });\n throw new Error(\"Unexpected empty nodes\");\n }\n if (Be(t))\n return Ge(dt(t, { lvl: n - 1 }));\n if (!J(o) && !J(o.l)) {\n const r = o.l, s = Be(r) ? o.lvl - 1 : o.lvl;\n return dt(r, {\n l: dt(t, {\n lvl: n - 1,\n r: r.l\n }),\n lvl: r.lvl + 1,\n r: Ge(dt(o, { l: r.r, lvl: s }))\n });\n }\n throw new Error(\"Unexpected empty nodes\");\n}\nfunction dt(t, e) {\n return $n(\n e.k !== void 0 ? e.k : t.k,\n e.v !== void 0 ? e.v : t.v,\n e.lvl !== void 0 ? e.lvl : t.lvl,\n e.l !== void 0 ? e.l : t.l,\n e.r !== void 0 ? e.r : t.r\n );\n}\nfunction Nn(t) {\n return J(t.r) ? t.l : xe(dt(t, { r: Nn(t.r) }));\n}\nfunction Be(t) {\n return J(t) || t.lvl > t.r.lvl;\n}\nfunction Dn(t) {\n return J(t.r) ? [t.k, t.v] : Dn(t.r);\n}\nfunction $n(t, e, n, o = se, r = se) {\n return { k: t, l: o, lvl: n, r, v: e };\n}\nfunction Sn(t) {\n return Ge(Un(t));\n}\nfunction Un(t) {\n const { l: e } = t;\n return !J(e) && e.lvl === t.lvl ? dt(e, { r: dt(t, { l: e.r }) }) : t;\n}\nfunction Ge(t) {\n const { lvl: e, r: n } = t;\n return !J(n) && !J(n.r) && n.lvl === e && n.r.lvl === e ? dt(n, { l: dt(t, { r: n.l }), lvl: e + 1 }) : t;\n}\nfunction Oo(t) {\n return _n(t, ({ k: e, v: n }) => ({ index: e, value: n }));\n}\nfunction Kn(t, e) {\n return !!(t && t.startIndex === e.startIndex && t.endIndex === e.endIndex);\n}\nfunction le(t, e) {\n return !!(t && t[0] === e[0] && t[1] === e[1]);\n}\nconst Ue = j(\n () => ({ recalcInProgress: T(!1) }),\n [],\n { singleton: !0 }\n);\nfunction jn(t, e, n) {\n return t[Te(t, e, n)];\n}\nfunction Te(t, e, n, o = 0) {\n let r = t.length - 1;\n for (; o <= r; ) {\n const s = Math.floor((o + r) / 2), i = t[s], l = n(i, e);\n if (l === 0)\n return s;\n if (l === -1) {\n if (r - o < 2)\n return s - 1;\n r = s - 1;\n } else {\n if (r === o)\n return s;\n o = s + 1;\n }\n }\n throw new Error(`Failed binary finding record in array - ${t.join(\",\")}, searched for ${e}`);\n}\nfunction ko(t, e, n, o) {\n const r = Te(t, e, o), s = Te(t, n, o, r);\n return t.slice(r, s + 1);\n}\nfunction Ht(t, e) {\n return Math.round(t.getBoundingClientRect()[e]);\n}\nfunction be(t) {\n return !J(t.groupOffsetTree);\n}\nfunction Ke({ index: t }, e) {\n return e === t ? 0 : e < t ? -1 : 1;\n}\nfunction zo() {\n return {\n groupIndices: [],\n groupOffsetTree: Yt(),\n lastIndex: 0,\n lastOffset: 0,\n lastSize: 0,\n offsetTree: [],\n sizeTree: Yt()\n };\n}\nfunction Fo(t, e) {\n let n = J(t) ? 0 : 1 / 0;\n for (const o of e) {\n const { endIndex: r, size: s, startIndex: i } = o;\n if (n = Math.min(n, i), J(t)) {\n t = vt(t, 0, s);\n continue;\n }\n const l = Zt(t, i - 1, r + 1);\n if (l.some(_o(o)))\n continue;\n let c = !1, d = !1;\n for (const { end: m, start: v, value: p } of l)\n c ? (r >= v || s === p) && (t = We(t, v)) : (d = p !== s, c = !0), m > r && r >= v && p !== s && (t = vt(t, r + 1, p));\n d && (t = vt(t, i, s));\n }\n return [t, n];\n}\nfunction Vo(t) {\n return typeof t.groupIndex < \"u\";\n}\nfunction Wo({ offset: t }, e) {\n return e === t ? 0 : e < t ? -1 : 1;\n}\nfunction ce(t, e, n) {\n if (e.length === 0)\n return 0;\n const { index: o, offset: r, size: s } = jn(e, t, Ke), i = t - o, l = s * i + (i - 1) * n + r;\n return l > 0 ? l + n : l;\n}\nfunction qn(t, e) {\n if (!be(e))\n return t;\n let n = 0;\n for (; e.groupIndices[n] <= t + n; )\n n++;\n return t + n;\n}\nfunction Yn(t, e, n) {\n if (Vo(t))\n return e.groupIndices[t.groupIndex] + 1;\n const o = t.index === \"LAST\" ? n : t.index;\n let r = qn(o, e);\n return r = Math.max(0, r, Math.min(n, r)), r;\n}\nfunction Po(t, e, n, o = 0) {\n return o > 0 && (e = Math.max(e, jn(t, o, Ke).offset)), _n(ko(t, e, n, Wo), Mo);\n}\nfunction Go(t, [e, n, o, r]) {\n e.length > 0 && o(\"received item sizes\", e, ft.DEBUG);\n const s = t.sizeTree;\n let i = s, l = 0;\n if (n.length > 0 && J(s) && e.length === 2) {\n const p = e[0].size, I = e[1].size;\n i = n.reduce((w, R) => vt(vt(w, R, p), R + 1, I), i);\n } else\n [i, l] = Fo(i, e);\n if (i === s)\n return t;\n const { lastIndex: c, lastOffset: d, lastSize: m, offsetTree: v } = Ae(t.offsetTree, l, i, r);\n return {\n groupIndices: n,\n groupOffsetTree: n.reduce((p, I) => vt(p, I, ce(I, v, r)), Yt()),\n lastIndex: c,\n lastOffset: d,\n lastSize: m,\n offsetTree: v,\n sizeTree: i\n };\n}\nfunction Ao(t) {\n return Nt(t).map(({ k: e, v: n }, o, r) => {\n const s = r[o + 1];\n return { endIndex: s !== void 0 ? s.k - 1 : 1 / 0, size: n, startIndex: e };\n });\n}\nfunction xn(t, e) {\n let n = 0, o = 0;\n for (; n < t; )\n n += e[o + 1] - e[o] - 1, o++;\n return o - (n === t ? 0 : 1);\n}\nfunction Ae(t, e, n, o) {\n let r = t, s = 0, i = 0, l = 0, c = 0;\n if (e !== 0) {\n c = Te(r, e - 1, Ke), l = r[c].offset;\n const m = Rt(n, e - 1);\n s = m[0], i = m[1], r.length && r[c].size === Rt(n, e)[1] && (c -= 1), r = r.slice(0, c + 1);\n } else\n r = [];\n for (const { start: d, value: m } of Zt(n, e, 1 / 0)) {\n const v = d - s, p = v * i + l + v * o;\n r.push({\n index: d,\n offset: p,\n size: m\n }), s = d, l = p, i = m;\n }\n return {\n lastIndex: s,\n lastOffset: l,\n lastSize: i,\n offsetTree: r\n };\n}\nfunction Mo(t) {\n return { index: t.index, value: t };\n}\nfunction _o(t) {\n const { endIndex: e, size: n, startIndex: o } = t;\n return (r) => r.start === o && (r.end === e || r.end === 1 / 0) && r.value === n;\n}\nconst No = {\n offsetHeight: \"height\",\n offsetWidth: \"width\"\n}, kt = j(\n ([{ log: t }, { recalcInProgress: e }]) => {\n const n = U(), o = U(), r = ht(o, 0), s = U(), i = U(), l = T(0), c = T([]), d = T(void 0), m = T(void 0), v = T(void 0), p = T(void 0), I = T((u, g) => Ht(u, No[g])), w = T(void 0), R = T(0), h = zo(), f = ht(\n x(n, $(c, t, R), Lt(Go, h), nt()),\n h\n ), a = ht(\n x(\n c,\n nt(),\n Lt((u, g) => ({ current: g, prev: u.current }), {\n current: [],\n prev: []\n }),\n B(({ prev: u }) => u)\n ),\n []\n );\n k(\n x(\n c,\n P((u) => u.length > 0),\n $(f, R),\n B(([u, g, C]) => {\n const z = u.reduce((L, V, N) => vt(L, V, ce(V, g.offsetTree, C) || N), Yt());\n return {\n ...g,\n groupIndices: u,\n groupOffsetTree: z\n };\n })\n ),\n f\n ), k(\n x(\n o,\n $(f),\n P(([u, { lastIndex: g }]) => u < g),\n B(([u, { lastIndex: g, lastSize: C }]) => [\n {\n endIndex: g,\n size: C,\n startIndex: u\n }\n ])\n ),\n n\n ), k(d, m);\n const S = ht(\n x(\n d,\n B((u) => u === void 0)\n ),\n !0\n );\n k(\n x(\n m,\n P((u) => u !== void 0 && J(it(f).sizeTree)),\n B((u) => {\n const g = it(v), C = it(c).length > 0;\n return g !== void 0 && g !== 0 ? C ? [\n { endIndex: 0, size: g, startIndex: 0 },\n { endIndex: 1, size: u, startIndex: 1 }\n ] : [] : [{ endIndex: 0, size: u, startIndex: 0 }];\n })\n ),\n n\n ), k(\n x(\n p,\n P((u) => u !== void 0 && u.length > 0 && J(it(f).sizeTree)),\n B((u) => {\n const g = [];\n let C = u[0], z = 0;\n for (let L = 1; L < u.length; L++) {\n const V = u[L];\n V !== C && (g.push({\n endIndex: L - 1,\n size: C,\n startIndex: z\n }), C = V, z = L);\n }\n return g.push({\n endIndex: u.length - 1,\n size: C,\n startIndex: z\n }), g;\n })\n ),\n n\n ), k(\n x(\n c,\n $(v, m),\n P(([, u, g]) => u !== void 0 && g !== void 0),\n B(([u, g, C]) => {\n const z = [];\n for (let L = 0; L < u.length; L++) {\n const V = u[L], N = u[L + 1];\n z.push({\n startIndex: V,\n endIndex: V,\n size: g\n }), N !== void 0 && z.push({\n startIndex: V + 1,\n endIndex: N - 1,\n size: C\n });\n }\n return z;\n })\n ),\n n\n );\n const H = Tt(\n x(\n n,\n $(f),\n Lt(\n ({ sizes: u }, [g, C]) => ({\n changed: C !== u,\n sizes: C\n }),\n { changed: !1, sizes: h }\n ),\n B((u) => u.changed)\n )\n );\n Y(\n x(\n l,\n Lt(\n (u, g) => ({ diff: u.prev - g, prev: g }),\n { diff: 0, prev: 0 }\n ),\n B((u) => u.diff)\n ),\n (u) => {\n const { groupIndices: g } = it(f);\n if (u > 0)\n _(e, !0), _(s, u + xn(u, g));\n else if (u < 0) {\n const C = it(a);\n C.length > 0 && (u -= xn(-u, C)), _(i, u);\n }\n }\n ), Y(x(l, $(t)), ([u, g]) => {\n u < 0 && g(\n \"`firstItemIndex` prop should not be set to less than zero. If you don't know the total count, just use a very high value\",\n { firstItemIndex: l },\n ft.ERROR\n );\n });\n const y = Tt(s);\n k(\n x(\n s,\n $(f),\n B(([u, g]) => {\n const C = g.groupIndices.length > 0, z = [], L = g.lastSize;\n if (C) {\n const V = ie(g.sizeTree, 0);\n let N = 0, Z = 0;\n for (; N < u; ) {\n const q = g.groupIndices[Z], Q = g.groupIndices.length === Z + 1 ? 1 / 0 : g.groupIndices[Z + 1] - q - 1;\n z.push({\n endIndex: q,\n size: V,\n startIndex: q\n }), z.push({\n endIndex: q + 1 + Q - 1,\n size: L,\n startIndex: q + 1\n }), Z++, N += Q + 1;\n }\n const F = Nt(g.sizeTree);\n return N !== u && F.shift(), F.reduce(\n (q, { k: Q, v: gt }) => {\n let ut = q.ranges;\n return q.prevSize !== 0 && (ut = [\n ...q.ranges,\n {\n endIndex: Q + u - 1,\n size: q.prevSize,\n startIndex: q.prevIndex\n }\n ]), {\n prevIndex: Q + u,\n prevSize: gt,\n ranges: ut\n };\n },\n {\n prevIndex: u,\n prevSize: 0,\n ranges: z\n }\n ).ranges;\n }\n return Nt(g.sizeTree).reduce(\n (V, { k: N, v: Z }) => ({\n prevIndex: N + u,\n prevSize: Z,\n ranges: [...V.ranges, { endIndex: N + u - 1, size: V.prevSize, startIndex: V.prevIndex }]\n }),\n {\n prevIndex: 0,\n prevSize: L,\n ranges: []\n }\n ).ranges;\n })\n ),\n n\n );\n const O = Tt(\n x(\n i,\n $(f, R),\n B(([u, { offsetTree: g }, C]) => {\n const z = -u;\n return ce(z, g, C);\n })\n )\n );\n return k(\n x(\n i,\n $(f, R),\n B(([u, g, C]) => {\n if (g.groupIndices.length > 0) {\n if (J(g.sizeTree))\n return g;\n let V = Yt();\n const N = it(a);\n let Z = 0, F = 0, mt = 0;\n for (; Z < -u; ) {\n mt = N[F];\n const Q = N[F + 1] - mt - 1;\n F++, Z += Q + 1;\n }\n if (V = Nt(g.sizeTree).reduce((Q, { k: gt, v: ut }) => vt(Q, Math.max(0, gt + u), ut), V), Z !== -u) {\n const Q = ie(g.sizeTree, mt);\n V = vt(V, 0, Q);\n const gt = Rt(g.sizeTree, -u + 1)[1];\n V = vt(V, 1, gt);\n }\n return {\n ...g,\n sizeTree: V,\n ...Ae(g.offsetTree, 0, V, C)\n };\n }\n const L = Nt(g.sizeTree).reduce((V, { k: N, v: Z }) => vt(V, Math.max(0, N + u), Z), Yt());\n return {\n ...g,\n sizeTree: L,\n ...Ae(g.offsetTree, 0, L, C)\n };\n })\n ),\n f\n ), {\n beforeUnshiftWith: y,\n // input\n data: w,\n defaultItemSize: m,\n firstItemIndex: l,\n fixedItemSize: d,\n fixedGroupSize: v,\n gap: R,\n groupIndices: c,\n heightEstimates: p,\n itemSize: I,\n listRefresh: H,\n shiftWith: i,\n shiftWithOffset: O,\n sizeRanges: n,\n // output\n sizes: f,\n statefulTotalCount: r,\n totalCount: o,\n trackItemSizes: S,\n unshiftWith: s\n };\n },\n rt(Gt, Ue),\n { singleton: !0 }\n);\nfunction Do(t) {\n return t.reduce(\n (e, n) => (e.groupIndices.push(e.totalCount), e.totalCount += n + 1, e),\n {\n groupIndices: [],\n totalCount: 0\n }\n );\n}\nconst Zn = j(\n ([{ groupIndices: t, sizes: e, totalCount: n }, { headerHeight: o, scrollTop: r }]) => {\n const s = U(), i = U(), l = Tt(x(s, B(Do)));\n return k(\n x(\n l,\n B((c) => c.totalCount)\n ),\n n\n ), k(\n x(\n l,\n B((c) => c.groupIndices)\n ),\n t\n ), k(\n x(\n at(r, e, o),\n P(([c, d]) => be(d)),\n B(([c, d, m]) => Rt(d.groupOffsetTree, Math.max(c - m, 0), \"v\")[0]),\n nt(),\n B((c) => [c])\n ),\n i\n ), { groupCounts: s, topItemsIndexes: i };\n },\n rt(kt, It)\n), At = j(\n ([{ log: t }]) => {\n const e = T(!1), n = Tt(\n x(\n e,\n P((o) => o),\n nt()\n )\n );\n return Y(e, (o) => {\n o && it(t)(\"props updated\", {}, ft.DEBUG);\n }), { didMount: n, propsReady: e };\n },\n rt(Gt),\n { singleton: !0 }\n), $o = typeof document < \"u\" && \"scrollBehavior\" in document.documentElement.style;\nfunction Xn(t) {\n const e = typeof t == \"number\" ? { index: t } : t;\n return e.align || (e.align = \"start\"), (!e.behavior || !$o) && (e.behavior = \"auto\"), e.offset === void 0 && (e.offset = 0), e;\n}\nconst fe = j(\n ([\n { gap: t, listRefresh: e, sizes: n, totalCount: o },\n {\n fixedFooterHeight: r,\n fixedHeaderHeight: s,\n footerHeight: i,\n headerHeight: l,\n scrollingInProgress: c,\n scrollTo: d,\n smoothScrollTargetReached: m,\n viewportHeight: v\n },\n { log: p }\n ]) => {\n const I = U(), w = U(), R = T(0);\n let h = null, f = null, a = null;\n function S() {\n h !== null && (h(), h = null), a !== null && (a(), a = null), f && (clearTimeout(f), f = null), _(c, !1);\n }\n return k(\n x(\n I,\n $(n, v, o, R, l, i, p),\n $(t, s, r),\n B(\n ([\n [H, y, O, u, g, C, z, L],\n V,\n N,\n Z\n ]) => {\n const F = Xn(H), { align: mt, behavior: q, offset: Q } = F, gt = u - 1, ut = Yn(F, y, gt);\n let St = ce(ut, y.offsetTree, V) + C;\n mt === \"end\" ? (St += N + Rt(y.sizeTree, ut)[1] - O + Z, ut === gt && (St += z)) : mt === \"center\" ? St += (N + Rt(y.sizeTree, ut)[1] - O + Z) / 2 : St -= g, Q !== void 0 && Q !== 0 && (St += Q);\n const Ft = (pt) => {\n S(), pt ? (L(\"retrying to scroll to\", { location: H }, ft.DEBUG), _(I, H)) : (_(w, !0), L(\"list did not change, scroll successful\", {}, ft.DEBUG));\n };\n if (S(), q === \"smooth\") {\n let pt = !1;\n a = Y(e, (jt) => {\n pt = pt || jt;\n }), h = yt(m, () => {\n Ft(pt);\n });\n } else\n h = yt(x(e, Uo(150)), Ft);\n return f = setTimeout(() => {\n S();\n }, 1200), _(c, !0), L(\"scrolling from index to\", { behavior: q, index: ut, top: St }, ft.DEBUG), { behavior: q, top: St };\n }\n )\n ),\n d\n ), {\n scrollTargetReached: w,\n scrollToIndex: I,\n topListHeight: R\n };\n },\n rt(kt, It, Gt),\n { singleton: !0 }\n);\nfunction Uo(t) {\n return (e) => {\n const n = setTimeout(() => {\n e(!1);\n }, t);\n return (o) => {\n o && (e(!0), clearTimeout(n));\n };\n };\n}\nfunction je(t, e) {\n t === 0 ? e() : requestAnimationFrame(() => {\n je(t - 1, e);\n });\n}\nfunction qe(t, e) {\n const n = e - 1;\n return typeof t == \"number\" ? t : t.index === \"LAST\" ? n : t.index;\n}\nconst me = j(\n ([{ defaultItemSize: t, listRefresh: e, sizes: n }, { scrollTop: o }, { scrollTargetReached: r, scrollToIndex: s }, { didMount: i }]) => {\n const l = T(!0), c = T(0), d = T(!0);\n return k(\n x(\n i,\n $(c),\n P(([m, v]) => v !== 0),\n Bt(!1)\n ),\n l\n ), k(\n x(\n i,\n $(c),\n P(([m, v]) => v !== 0),\n Bt(!1)\n ),\n d\n ), Y(\n x(\n at(e, i),\n $(l, n, t, d),\n P(([[, m], v, { sizeTree: p }, I, w]) => m && (!J(p) || _e(I)) && !v && !w),\n $(c)\n ),\n ([, m]) => {\n yt(r, () => {\n _(d, !0);\n }), je(4, () => {\n yt(o, () => {\n _(l, !0);\n }), _(s, m);\n });\n }\n ), {\n initialItemFinalLocationReached: d,\n initialTopMostItemIndex: c,\n scrolledToInitialItem: l\n };\n },\n rt(kt, It, fe, At),\n { singleton: !0 }\n);\nfunction Jn(t, e) {\n return Math.abs(t - e) < 1.01;\n}\nconst ue = \"up\", ne = \"down\", Ko = \"none\", jo = {\n atBottom: !1,\n notAtBottomBecause: \"NOT_SHOWING_LAST_ITEM\",\n state: {\n offsetBottom: 0,\n scrollHeight: 0,\n scrollTop: 0,\n viewportHeight: 0\n }\n}, qo = 0, pe = j(([{ footerHeight: t, headerHeight: e, scrollBy: n, scrollContainerState: o, scrollTop: r, viewportHeight: s }]) => {\n const i = T(!1), l = T(!0), c = U(), d = U(), m = T(4), v = T(qo), p = ht(\n x(\n Fe(x(W(r), Ut(1), Bt(!0)), x(W(r), Ut(1), Bt(!1), pn(100))),\n nt()\n ),\n !1\n ), I = ht(\n x(Fe(x(n, Bt(!0)), x(n, Bt(!1), pn(200))), nt()),\n !1\n );\n k(\n x(\n at(W(r), W(v)),\n B(([a, S]) => a <= S),\n nt()\n ),\n l\n ), k(x(l, zt(50)), d);\n const w = Tt(\n x(\n at(o, W(s), W(e), W(t), W(m)),\n Lt((a, [{ scrollHeight: S, scrollTop: H }, y, O, u, g]) => {\n const C = H + y - S > -g, z = {\n scrollHeight: S,\n scrollTop: H,\n viewportHeight: y\n };\n if (C) {\n let V, N;\n return H > a.state.scrollTop ? (V = \"SCROLLED_DOWN\", N = a.state.scrollTop - H) : (V = \"SIZE_DECREASED\", N = a.state.scrollTop - H || a.scrollTopDelta), {\n atBottom: !0,\n atBottomBecause: V,\n scrollTopDelta: N,\n state: z\n };\n }\n let L;\n return z.scrollHeight > a.state.scrollHeight ? L = \"SIZE_INCREASED\" : y < a.state.viewportHeight ? L = \"VIEWPORT_HEIGHT_DECREASING\" : H < a.state.scrollTop ? L = \"SCROLLING_UPWARDS\" : L = \"NOT_FULLY_SCROLLED_TO_LAST_ITEM_BOTTOM\", {\n atBottom: !1,\n notAtBottomBecause: L,\n state: z\n };\n }, jo),\n nt((a, S) => a !== void 0 && a.atBottom === S.atBottom)\n )\n ), R = ht(\n x(\n o,\n Lt(\n (a, { scrollHeight: S, scrollTop: H, viewportHeight: y }) => {\n if (!Jn(a.scrollHeight, S)) {\n const O = S - (H + y) < 1;\n return a.scrollTop !== H && O ? {\n changed: !0,\n jump: a.scrollTop - H,\n scrollHeight: S,\n scrollTop: H\n } : {\n changed: !0,\n jump: 0,\n scrollHeight: S,\n scrollTop: H\n };\n }\n return {\n changed: !1,\n jump: 0,\n scrollHeight: S,\n scrollTop: H\n };\n },\n { changed: !1, jump: 0, scrollHeight: 0, scrollTop: 0 }\n ),\n P((a) => a.changed),\n B((a) => a.jump)\n ),\n 0\n );\n k(\n x(\n w,\n B((a) => a.atBottom)\n ),\n i\n ), k(x(i, zt(50)), c);\n const h = T(ne);\n k(\n x(\n o,\n B(({ scrollTop: a }) => a),\n nt(),\n Lt(\n (a, S) => it(I) ? { direction: a.direction, prevScrollTop: S } : { direction: S < a.prevScrollTop ? ue : ne, prevScrollTop: S },\n { direction: ne, prevScrollTop: 0 }\n ),\n B((a) => a.direction)\n ),\n h\n ), k(x(o, zt(50), Bt(Ko)), h);\n const f = T(0);\n return k(\n x(\n p,\n P((a) => !a),\n Bt(0)\n ),\n f\n ), k(\n x(\n r,\n zt(100),\n $(p),\n P(([a, S]) => S),\n Lt(([a, S], [H]) => [S, H], [0, 0]),\n B(([a, S]) => S - a)\n ),\n f\n ), {\n atBottomState: w,\n atBottomStateChange: c,\n atBottomThreshold: m,\n atTopStateChange: d,\n atTopThreshold: v,\n isAtBottom: i,\n isAtTop: l,\n isScrolling: p,\n lastJumpDueToItemResize: R,\n scrollDirection: h,\n scrollVelocity: f\n };\n}, rt(It)), ae = \"top\", de = \"bottom\", vn = \"none\";\nfunction Tn(t, e, n) {\n return typeof t == \"number\" ? n === ue && e === ae || n === ne && e === de ? t : 0 : n === ue ? e === ae ? t.main : t.reverse : e === de ? t.main : t.reverse;\n}\nfunction Cn(t, e) {\n return typeof t == \"number\" ? t : t[e] ?? 0;\n}\nconst Ye = j(\n ([{ deviation: t, fixedHeaderHeight: e, headerHeight: n, scrollTop: o, viewportHeight: r }]) => {\n const s = U(), i = T(0), l = T(0), c = T(0), d = ht(\n x(\n at(\n W(o),\n W(r),\n W(n),\n W(s, le),\n W(c),\n W(i),\n W(e),\n W(t),\n W(l)\n ),\n B(\n ([\n m,\n v,\n p,\n [I, w],\n R,\n h,\n f,\n a,\n S\n ]) => {\n const H = m - a, y = h + f, O = Math.max(p - H, 0);\n let u = vn;\n const g = Cn(S, ae), C = Cn(S, de);\n return I -= a, I += p + f, w += p + f, w -= a, I > m + y - g && (u = ue), w < m - O + v + C && (u = ne), u !== vn ? [\n Math.max(H - p - Tn(R, ae, u) - g, 0),\n H - O - f + v + Tn(R, de, u) + C\n ] : null;\n }\n ),\n P((m) => m !== null),\n nt(le)\n ),\n [0, 0]\n );\n return {\n increaseViewportBy: l,\n // input\n listBoundary: s,\n overscan: c,\n topListHeight: i,\n // output\n visibleRange: d\n };\n },\n rt(It),\n { singleton: !0 }\n);\nfunction Yo(t, e, n) {\n if (be(e)) {\n const o = qn(t, e);\n return [\n { index: Rt(e.groupOffsetTree, o)[0], offset: 0, size: 0 },\n { data: n?.[0], index: o, offset: 0, size: 0 }\n ];\n }\n return [{ data: n?.[0], index: t, offset: 0, size: 0 }];\n}\nconst Le = {\n bottom: 0,\n firstItemIndex: 0,\n items: [],\n offsetBottom: 0,\n offsetTop: 0,\n top: 0,\n topItems: [],\n topListHeight: 0,\n totalCount: 0\n};\nfunction ve(t, e, n, o, r, s) {\n const { lastIndex: i, lastOffset: l, lastSize: c } = r;\n let d = 0, m = 0;\n if (t.length > 0) {\n d = t[0].offset;\n const R = t[t.length - 1];\n m = R.offset + R.size;\n }\n const v = n - i, p = l + v * c + (v - 1) * o, I = d, w = p - m;\n return {\n bottom: m,\n firstItemIndex: s,\n items: wn(t, r, s),\n offsetBottom: w,\n offsetTop: d,\n top: I,\n topItems: wn(e, r, s),\n topListHeight: e.reduce((R, h) => h.size + R, 0),\n totalCount: n\n };\n}\nfunction Qn(t, e, n, o, r, s) {\n let i = 0;\n if (n.groupIndices.length > 0)\n for (const m of n.groupIndices) {\n if (m - i >= t)\n break;\n i++;\n }\n const l = t + i, c = qe(e, l), d = Array.from({ length: l }).map((m, v) => ({\n data: s[v + c],\n index: v + c,\n offset: 0,\n size: 0\n }));\n return ve(d, [], l, r, n, o);\n}\nfunction wn(t, e, n) {\n if (t.length === 0)\n return [];\n if (!be(e))\n return t.map((d) => ({ ...d, index: d.index + n, originalIndex: d.index }));\n const o = t[0].index, r = t[t.length - 1].index, s = [], i = Zt(e.groupOffsetTree, o, r);\n let l, c = 0;\n for (const d of t) {\n (!l || l.end < d.index) && (l = i.shift(), c = e.groupIndices.indexOf(l.start));\n let m;\n d.index === l.start ? m = {\n index: c,\n type: \"group\"\n } : m = {\n groupIndex: c,\n index: d.index - (c + 1) + n\n }, s.push({\n ...m,\n data: d.data,\n offset: d.offset,\n originalIndex: d.index,\n size: d.size\n });\n }\n return s;\n}\nfunction yn(t, e) {\n return t === void 0 ? 0 : typeof t == \"number\" ? t : t[e] ?? 0;\n}\nconst Kt = j(\n ([\n { data: t, firstItemIndex: e, gap: n, sizes: o, totalCount: r },\n s,\n { listBoundary: i, topListHeight: l, visibleRange: c },\n { initialTopMostItemIndex: d, scrolledToInitialItem: m },\n { topListHeight: v },\n p,\n { didMount: I },\n { recalcInProgress: w }\n ]) => {\n const R = T([]), h = T(0), f = U(), a = T(0);\n k(s.topItemsIndexes, R);\n const S = ht(\n x(\n at(\n I,\n w,\n W(c, le),\n W(r),\n W(o),\n W(d),\n m,\n W(R),\n W(e),\n W(n),\n W(a),\n t\n ),\n P(([u, g, , C, , , , , , , , z]) => {\n const L = z !== void 0 && z.length !== C;\n return u && !g && !L;\n }),\n B(\n ([\n ,\n ,\n [u, g],\n C,\n z,\n L,\n V,\n N,\n Z,\n F,\n mt,\n q\n ]) => {\n const Q = z, { offsetTree: gt, sizeTree: ut } = Q, St = it(h);\n if (C === 0)\n return { ...Le, totalCount: C };\n if (u === 0 && g === 0)\n return St === 0 ? { ...Le, totalCount: C } : Qn(St, L, z, Z, F, q || []);\n if (J(ut))\n return St > 0 ? null : ve(\n Yo(qe(L, C), Q, q),\n [],\n C,\n F,\n Q,\n Z\n );\n const Ft = [];\n if (N.length > 0) {\n const D = N[0], K = N[N.length - 1];\n let st = 0;\n for (const tt of Zt(ut, D, K)) {\n const X = tt.value, lt = Math.max(tt.start, D), xt = Math.min(tt.end, K);\n for (let ct = lt; ct <= xt; ct++)\n Ft.push({ data: q?.[ct], index: ct, offset: st, size: X }), st += X;\n }\n }\n if (!V)\n return ve([], Ft, C, F, Q, Z);\n const pt = N.length > 0 ? N[N.length - 1] + 1 : 0, jt = Po(gt, u, g, pt);\n if (jt.length === 0)\n return null;\n const Qt = C - 1, Et = ye([], (D) => {\n for (const K of jt) {\n const st = K.value;\n let tt = st.offset, X = K.start;\n const lt = st.size;\n if (st.offset < u) {\n X += Math.floor((u - st.offset + F) / (lt + F));\n const ct = X - K.start;\n tt += ct * lt + ct * F;\n }\n X < pt && (tt += (pt - X) * lt, X = pt);\n const xt = Math.min(K.end, Qt);\n for (let ct = X; ct <= xt && !(tt >= g); ct++)\n D.push({ data: q?.[ct], index: ct, offset: tt, size: lt }), tt += lt + F;\n }\n }), te = yn(mt, ae), b = yn(mt, de);\n if (Et.length > 0 && (te > 0 || b > 0)) {\n const D = Et[0], K = Et[Et.length - 1];\n if (te > 0 && D.index > pt) {\n const st = Math.min(te, D.index - pt), tt = [];\n let X = D.offset;\n for (let lt = D.index - 1; lt >= D.index - st; lt--) {\n const ct = Zt(ut, lt, lt)[0]?.value ?? D.size;\n X -= ct + F, tt.unshift({ data: q?.[lt], index: lt, offset: X, size: ct });\n }\n Et.unshift(...tt);\n }\n if (b > 0 && K.index < Qt) {\n const st = Math.min(b, Qt - K.index);\n let tt = K.offset + K.size + F;\n for (let X = K.index + 1; X <= K.index + st; X++) {\n const xt = Zt(ut, X, X)[0]?.value ?? K.size;\n Et.push({ data: q?.[X], index: X, offset: tt, size: xt }), tt += xt + F;\n }\n }\n }\n return ve(Et, Ft, C, F, Q, Z);\n }\n ),\n //@ts-expect-error filter needs to be fixed\n P((u) => u !== null),\n nt()\n ),\n Le\n );\n k(\n x(\n t,\n P(_e),\n B((u) => u?.length)\n ),\n r\n ), k(\n x(\n S,\n B((u) => u.topListHeight)\n ),\n v\n ), k(v, l), k(\n x(\n S,\n B((u) => [u.top, u.bottom])\n ),\n i\n ), k(\n x(\n S,\n B((u) => u.items)\n ),\n f\n );\n const H = Tt(\n x(\n S,\n P(({ items: u }) => u.length > 0),\n $(r, t),\n P(([{ items: u }, g]) => u[u.length - 1].originalIndex === g - 1),\n B(([, u, g]) => [u - 1, g]),\n nt(le),\n B(([u]) => u)\n )\n ), y = Tt(\n x(\n S,\n zt(200),\n P(({ items: u, topItems: g }) => u.length > 0 && u[0].originalIndex === g.length),\n B(({ items: u }) => u[0].index),\n nt()\n )\n ), O = Tt(\n x(\n S,\n P(({ items: u }) => u.length > 0),\n B(({ items: u }) => {\n let g = 0, C = u.length - 1;\n for (; u[g].type === \"group\" && g < C; )\n g++;\n for (; u[C].type === \"group\" && C > g; )\n C--;\n return {\n endIndex: u[C].index,\n startIndex: u[g].index\n };\n }),\n nt(Kn)\n )\n );\n return {\n endReached: H,\n initialItemCount: h,\n itemsRendered: f,\n listState: S,\n minOverscanItemCount: a,\n rangeChanged: O,\n startReached: y,\n topItemsIndexes: R,\n ...p\n };\n },\n rt(\n kt,\n Zn,\n Ye,\n me,\n fe,\n pe,\n At,\n Ue\n ),\n { singleton: !0 }\n), to = j(\n ([{ fixedFooterHeight: t, fixedHeaderHeight: e, footerHeight: n, headerHeight: o }, { listState: r }]) => {\n const s = U(), i = ht(\n x(\n at(n, t, o, e, r),\n B(([l, c, d, m, v]) => l + c + d + m + v.offsetBottom + v.bottom)\n ),\n 0\n );\n return k(W(i), s), { totalListHeight: i, totalListHeightChanged: s };\n },\n rt(It, Kt),\n { singleton: !0 }\n), Zo = j(\n ([{ viewportHeight: t }, { totalListHeight: e }]) => {\n const n = T(!1), o = ht(\n x(\n at(n, t, e),\n P(([r]) => r),\n B(([, r, s]) => Math.max(0, r - s)),\n zt(0),\n nt()\n ),\n 0\n );\n return { alignToBottom: n, paddingTopAddition: o };\n },\n rt(It, to),\n { singleton: !0 }\n), eo = j(() => ({\n context: T(null)\n})), Xo = ({\n itemBottom: t,\n itemTop: e,\n locationParams: { align: n, behavior: o, ...r },\n viewportBottom: s,\n viewportTop: i\n}) => e < i ? { ...r, align: n ?? \"start\", ...o !== void 0 ? { behavior: o } : {} } : t > s ? { ...r, align: n ?? \"end\", ...o !== void 0 ? { behavior: o } : {} } : null, no = j(\n ([\n { gap: t, sizes: e, totalCount: n },\n { fixedFooterHeight: o, fixedHeaderHeight: r, headerHeight: s, scrollingInProgress: i, scrollTop: l, viewportHeight: c },\n { scrollToIndex: d }\n ]) => {\n const m = U();\n return k(\n x(\n m,\n $(e, c, n, s, r, o, l),\n $(t),\n B(([[v, p, I, w, R, h, f, a], S]) => {\n const { calculateViewLocation: H = Xo, done: y, ...O } = v, u = Yn(v, p, w - 1), g = ce(u, p.offsetTree, S) + R + h, C = g + Rt(p.sizeTree, u)[1], z = a + h, L = a + I - f, V = H({\n itemBottom: C,\n itemTop: g,\n locationParams: O,\n viewportBottom: L,\n viewportTop: z\n });\n return V !== null ? y && yt(\n x(\n i,\n P((N) => !N),\n // skips the initial publish of false, and the cleanup call.\n // but if scrollingInProgress is true, we skip the initial publish.\n Ut(it(i) ? 1 : 2)\n ),\n y\n ) : y?.(), V;\n }),\n P((v) => v !== null)\n ),\n d\n ), {\n scrollIntoView: m\n };\n },\n rt(kt, It, fe, Kt, Gt),\n { singleton: !0 }\n);\nfunction bn(t) {\n return t === !1 ? !1 : t === \"smooth\" ? \"smooth\" : \"auto\";\n}\nconst Jo = (t, e) => typeof t == \"function\" ? bn(t(e)) : e && bn(t), Qo = j(\n ([\n { listRefresh: t, totalCount: e, fixedItemSize: n, data: o },\n { atBottomState: r, isAtBottom: s },\n { scrollToIndex: i },\n { scrolledToInitialItem: l },\n { didMount: c, propsReady: d },\n { log: m },\n { scrollingInProgress: v },\n { context: p },\n { scrollIntoView: I }\n ]) => {\n const w = T(!1), R = U();\n let h = null;\n function f(y) {\n _(i, {\n align: \"end\",\n behavior: y,\n index: \"LAST\"\n });\n }\n Y(\n x(\n at(x(W(e), Ut(1)), c),\n $(W(w), s, l, v),\n B(([[y, O], u, g, C, z]) => {\n let L = O && C, V = \"auto\";\n return L && (V = Jo(u, g || z), L = L && V !== !1), { followOutputBehavior: V, shouldFollow: L, totalCount: y };\n }),\n P(({ shouldFollow: y }) => y)\n ),\n ({ followOutputBehavior: y, totalCount: O }) => {\n h !== null && (h(), h = null), it(n) !== void 0 ? requestAnimationFrame(() => {\n it(m)(\"following output to \", { totalCount: O }, ft.DEBUG), f(y);\n }) : h = yt(t, () => {\n it(m)(\"following output to \", { totalCount: O }, ft.DEBUG), f(y), h = null;\n });\n }\n );\n function a(y) {\n const O = yt(r, (u) => {\n y && !u.atBottom && u.notAtBottomBecause === \"SIZE_INCREASED\" && h === null && (it(m)(\"scrolling to bottom due to increased size\", {}, ft.DEBUG), f(\"auto\"));\n });\n setTimeout(O, 100);\n }\n Y(\n x(\n at(W(w), e, d),\n P(([y, , O]) => y !== !1 && O),\n Lt(\n ({ value: y }, [, O]) => ({ refreshed: y === O, value: O }),\n { refreshed: !1, value: 0 }\n ),\n P(({ refreshed: y }) => y),\n $(w, e)\n ),\n ([, y]) => {\n it(l) && a(y !== !1);\n }\n ), Y(R, () => {\n a(it(w) !== !1);\n }), Y(at(W(w), r), ([y, O]) => {\n y !== !1 && !O.atBottom && O.notAtBottomBecause === \"VIEWPORT_HEIGHT_DECREASING\" && f(\"auto\");\n });\n const S = T(null), H = U();\n return k(\n Fe(\n x(\n W(o),\n B((y) => y?.length ?? 0)\n ),\n x(W(e))\n ),\n H\n ), Y(\n x(\n at(x(H, Ut(1)), c),\n $(W(S), l, v, p),\n B(([[y, O], u, g, C, z]) => O && g && u?.({ context: z, totalCount: y, scrollingInProgress: C })),\n P((y) => !!y),\n zt(0)\n ),\n (y) => {\n h !== null && (h(), h = null), it(n) !== void 0 ? requestAnimationFrame(() => {\n it(m)(\"scrolling into view\", {}), _(I, y);\n }) : h = yt(t, () => {\n it(m)(\"scrolling into view\", {}), _(I, y), h = null;\n });\n }\n ), { autoscrollToBottom: R, followOutput: w, scrollIntoViewOnChange: S };\n },\n rt(\n kt,\n pe,\n fe,\n me,\n At,\n Gt,\n It,\n eo,\n no\n )\n), tr = j(\n ([{ data: t, firstItemIndex: e, gap: n, sizes: o }, { initialTopMostItemIndex: r }, { initialItemCount: s, listState: i }, { didMount: l }]) => (k(\n x(\n l,\n $(s),\n P(([, c]) => c !== 0),\n $(r, o, e, n, t),\n B(([[, c], d, m, v, p, I = []]) => Qn(c, d, m, v, p, I))\n ),\n i\n ), {}),\n rt(kt, me, Kt, At),\n { singleton: !0 }\n), er = j(\n ([{ didMount: t }, { scrollTo: e }, { listState: n }]) => {\n const o = T(0);\n return Y(\n x(\n t,\n $(o),\n P(([, r]) => r !== 0),\n B(([, r]) => ({ top: r }))\n ),\n (r) => {\n yt(\n x(\n n,\n Ut(1),\n P((s) => s.items.length > 1)\n ),\n () => {\n requestAnimationFrame(() => {\n _(e, r);\n });\n }\n );\n }\n ), {\n initialScrollTop: o\n };\n },\n rt(At, It, Kt),\n { singleton: !0 }\n), oo = j(\n ([{ scrollVelocity: t }]) => {\n const e = T(!1), n = U(), o = T(!1);\n return k(\n x(\n t,\n $(o, e, n),\n P(([r, s]) => s !== !1 && s !== void 0),\n B(([r, s, i, l]) => {\n const { enter: c, exit: d } = s;\n if (i) {\n if (d(r, l))\n return !1;\n } else if (c(r, l))\n return !0;\n return i;\n }),\n nt()\n ),\n e\n ), Y(\n x(at(e, t, n), $(o)),\n ([[r, s, i], l]) => {\n r && l !== !1 && l !== void 0 && l.change && l.change(s, i);\n }\n ), { isSeeking: e, scrollSeekConfiguration: o, scrollSeekRangeChanged: n, scrollVelocity: t };\n },\n rt(pe),\n { singleton: !0 }\n), Ze = j(([{ scrollContainerState: t, scrollTo: e }]) => {\n const n = U(), o = U(), r = U(), s = T(!1), i = T(void 0);\n return k(\n x(\n at(n, o),\n B(([{ scrollTop: l, viewportHeight: c }, { offsetTop: d, listHeight: m }]) => ({\n scrollHeight: m,\n scrollTop: Math.max(0, l - d),\n viewportHeight: c\n }))\n ),\n t\n ), k(\n x(\n e,\n $(o),\n B(([l, { offsetTop: c }]) => ({\n ...l,\n top: l.top + c\n }))\n ),\n r\n ), {\n customScrollParent: i,\n // config\n useWindowScroll: s,\n // input\n windowScrollContainerState: n,\n // signals\n windowScrollTo: r,\n windowViewportRect: o\n };\n}, rt(It)), nr = j(\n ([\n { sizeRanges: t, sizes: e },\n { headerHeight: n, scrollTop: o },\n { initialTopMostItemIndex: r },\n { didMount: s },\n { useWindowScroll: i, windowScrollContainerState: l, windowViewportRect: c }\n ]) => {\n const d = U(), m = T(void 0), v = T(null), p = T(null);\n return k(l, v), k(c, p), Y(\n x(\n d,\n $(e, o, i, v, p, n)\n ),\n ([I, w, R, h, f, a, S]) => {\n const H = Ao(w.sizeTree);\n h && f !== null && a !== null && (R = f.scrollTop - a.offsetTop), R -= S, I({ ranges: H, scrollTop: R });\n }\n ), k(x(m, P(_e), B(or)), r), k(\n x(\n s,\n $(m),\n P(([, I]) => I !== void 0),\n nt(),\n B(([, I]) => I.ranges)\n ),\n t\n ), {\n getState: d,\n restoreStateFrom: m\n };\n },\n rt(kt, It, me, At, Ze)\n);\nfunction or(t) {\n return { align: \"start\", index: 0, offset: t.scrollTop };\n}\nconst rr = j(([{ topItemsIndexes: t }]) => {\n const e = T(0);\n return k(\n x(\n e,\n P((n) => n >= 0),\n B((n) => Array.from({ length: n }).map((o, r) => r))\n ),\n t\n ), { topItemCount: e };\n}, rt(Kt));\nfunction ro(t) {\n let e = !1, n;\n return (() => (e || (e = !0, n = t()), n));\n}\nconst sr = ro(() => /iP(ad|od|hone)/i.test(navigator.userAgent) && /WebKit/i.test(navigator.userAgent)), ir = j(\n ([\n { deviation: t, scrollBy: e, scrollingInProgress: n, scrollTop: o },\n { isAtBottom: r, isScrolling: s, lastJumpDueToItemResize: i, scrollDirection: l },\n { listState: c },\n { beforeUnshiftWith: d, gap: m, shiftWithOffset: v, sizes: p },\n { log: I },\n { recalcInProgress: w }\n ]) => {\n const R = Tt(\n x(\n c,\n $(i),\n Lt(\n ([, f, a, S], [{ bottom: H, items: y, offsetBottom: O, totalCount: u }, g]) => {\n const C = H + O;\n let z = 0;\n return a === u && f.length > 0 && y.length > 0 && (y[0].originalIndex === 0 && f[0].originalIndex === 0 || (z = C - S, z !== 0 && (z += g))), [z, y, u, C];\n },\n [0, [], 0, 0]\n ),\n P(([f]) => f !== 0),\n $(o, l, n, r, I, w),\n P(([, f, a, S, , , H]) => !H && !S && f !== 0 && a === ue),\n B(([[f], , , , , a]) => (a(\"Upward scrolling compensation\", { amount: f }, ft.DEBUG), f))\n )\n );\n function h(f) {\n f > 0 ? (_(e, { behavior: \"auto\", top: -f }), _(t, 0)) : (_(t, 0), _(e, { behavior: \"auto\", top: -f }));\n }\n return Y(x(R, $(t, s)), ([f, a, S]) => {\n S && sr() ? _(t, a - f) : h(-f);\n }), Y(\n x(\n at(ht(s, !1), t, w),\n P(([f, a, S]) => !f && !S && a !== 0),\n B(([f, a]) => a),\n zt(1)\n ),\n h\n ), k(\n x(\n v,\n B((f) => ({ top: -f }))\n ),\n e\n ), Y(\n x(\n d,\n $(p, m),\n B(([f, { groupIndices: a, lastSize: S, sizeTree: H }, y]) => {\n function O(L) {\n return L * (S + y);\n }\n if (a.length === 0)\n return O(f);\n let u = 0;\n const g = ie(H, 0);\n let C = 0, z = 0;\n for (; C < f; ) {\n C++, u += g;\n let L = a.length === z + 1 ? 1 / 0 : a[z + 1] - a[z] - 1;\n C + L > f && (u -= g, L = f - C + 1), C += L, u += O(L), z++;\n }\n return u;\n })\n ),\n (f) => {\n _(t, f), requestAnimationFrame(() => {\n _(e, { top: f }), requestAnimationFrame(() => {\n _(t, 0), _(w, !1);\n });\n });\n }\n ), { deviation: t };\n },\n rt(It, pe, Kt, kt, Gt, Ue)\n), lr = j(\n ([\n t,\n e,\n n,\n o,\n r,\n s,\n i,\n l,\n c,\n d,\n m\n ]) => ({\n ...t,\n ...e,\n ...n,\n ...o,\n ...r,\n ...s,\n ...i,\n ...l,\n ...c,\n ...d,\n ...m\n }),\n rt(\n Ye,\n tr,\n At,\n oo,\n to,\n er,\n Zo,\n Ze,\n no,\n Gt,\n eo\n )\n), so = j(\n ([\n {\n data: t,\n defaultItemSize: e,\n firstItemIndex: n,\n fixedItemSize: o,\n fixedGroupSize: r,\n gap: s,\n groupIndices: i,\n heightEstimates: l,\n itemSize: c,\n sizeRanges: d,\n sizes: m,\n statefulTotalCount: v,\n totalCount: p,\n trackItemSizes: I\n },\n { initialItemFinalLocationReached: w, initialTopMostItemIndex: R, scrolledToInitialItem: h },\n f,\n a,\n S,\n H,\n { scrollToIndex: y },\n O,\n { topItemCount: u },\n { groupCounts: g },\n C\n ]) => {\n const { listState: z, minOverscanItemCount: L, topItemsIndexes: V, rangeChanged: N, ...Z } = H;\n return k(N, C.scrollSeekRangeChanged), k(\n x(\n C.windowViewportRect,\n B((F) => F.visibleHeight)\n ),\n f.viewportHeight\n ), {\n data: t,\n defaultItemHeight: e,\n firstItemIndex: n,\n fixedItemHeight: o,\n fixedGroupHeight: r,\n gap: s,\n groupCounts: g,\n heightEstimates: l,\n initialItemFinalLocationReached: w,\n initialTopMostItemIndex: R,\n scrolledToInitialItem: h,\n sizeRanges: d,\n topItemCount: u,\n topItemsIndexes: V,\n // input\n totalCount: p,\n ...S,\n groupIndices: i,\n itemSize: c,\n listState: z,\n minOverscanItemCount: L,\n scrollToIndex: y,\n // output\n statefulTotalCount: v,\n trackItemSizes: I,\n // exported from stateFlagsSystem\n rangeChanged: N,\n ...Z,\n // the bag of IO from featureGroup1System\n ...C,\n ...f,\n sizes: m,\n ...a\n };\n },\n rt(\n kt,\n me,\n It,\n nr,\n Qo,\n Kt,\n fe,\n ir,\n rr,\n Zn,\n lr\n )\n);\nfunction cr(t, e) {\n const n = {}, o = {};\n let r = 0;\n const s = t.length;\n for (; r < s; )\n o[t[r]] = 1, r += 1;\n for (const i in e)\n Object.hasOwn(o, i) || (n[i] = e[i]);\n return n;\n}\nconst Ie = typeof document < \"u\" ? E.useLayoutEffect : E.useEffect;\nfunction Xe(t, e, n) {\n const o = Object.keys(e.required || {}), r = Object.keys(e.optional || {}), s = Object.keys(e.methods || {}), i = Object.keys(e.events || {}), l = E.createContext({});\n function c(f, a) {\n f.propsReady !== void 0 && _(f.propsReady, !1);\n for (const S of o) {\n const H = f[e.required[S]];\n _(H, a[S]);\n }\n for (const S of r)\n if (S in a) {\n const H = f[e.optional[S]];\n _(H, a[S]);\n }\n f.propsReady !== void 0 && _(f.propsReady, !0);\n }\n function d(f) {\n return s.reduce((a, S) => (a[S] = (H) => {\n const y = f[e.methods[S]];\n _(y, H);\n }, a), {});\n }\n function m(f) {\n return i.reduce((a, S) => (a[S] = yo(f[e.events[S]]), a), {});\n }\n const v = E.forwardRef(function(a, S) {\n const { children: H, ...y } = a, [O] = E.useState(() => ye(Ro(t), (C) => {\n c(C, y);\n })), [u] = E.useState(mn(m, O));\n Ie(() => {\n for (const C of i)\n C in y && Y(u[C], y[C]);\n return () => {\n Object.values(u).map(Ne);\n };\n }, [y, u, O]), Ie(() => {\n c(O, y);\n }), E.useImperativeHandle(S, fn(d(O)));\n const g = n;\n return /* @__PURE__ */ G(l.Provider, { value: O, children: n !== void 0 ? /* @__PURE__ */ G(g, { ...cr([...o, ...r, ...i], y), children: H }) : H });\n }), p = (f) => {\n const a = E.useContext(l);\n return E.useCallback(\n (S) => {\n _(a[f], S);\n },\n [a, f]\n );\n }, I = (f) => {\n const S = E.useContext(l)[f], H = E.useCallback(\n (y) => Y(S, y),\n [S]\n );\n return E.useSyncExternalStore(\n H,\n () => it(S),\n () => it(S)\n );\n }, w = (f) => {\n const S = E.useContext(l)[f], [H, y] = E.useState(mn(it, S));\n return Ie(\n () => Y(S, (O) => {\n O !== H && y(fn(O));\n }),\n [S, H]\n ), H;\n }, R = parseInt(E.version) >= 18 ? I : w;\n return {\n Component: v,\n useEmitter: (f, a) => {\n const H = E.useContext(l)[f];\n Ie(() => Y(H, a), [a, H]);\n },\n useEmitterValue: R,\n usePublisher: p\n };\n}\nconst Re = E.createContext(void 0), io = E.createContext(void 0), Oe = \"-webkit-sticky\", Rn = \"sticky\", Je = ro(() => {\n if (typeof document > \"u\")\n return Rn;\n const t = document.createElement(\"div\");\n return t.style.position = Oe, t.style.position === Oe ? Oe : Rn;\n}), lo = typeof document < \"u\" ? E.useLayoutEffect : E.useEffect;\nfunction ke(t) {\n return \"self\" in t;\n}\nfunction ur(t) {\n return \"body\" in t;\n}\nfunction co(t, e, n, o = Jt, r, s) {\n const i = E.useRef(null), l = E.useRef(null), c = E.useRef(null), d = E.useCallback(\n (p) => {\n let I, w, R;\n const h = p.target;\n if (ur(h) || ke(h)) {\n const a = ke(h) ? h : h.defaultView;\n R = s === !0 ? _t(a, a.scrollX) : a.scrollY, I = s === !0 ? a.document.documentElement.scrollWidth : a.document.documentElement.scrollHeight, w = s === !0 ? a.innerWidth : a.innerHeight;\n } else\n R = s === !0 ? _t(h, h.scrollLeft) : h.scrollTop, I = s === !0 ? h.scrollWidth : h.scrollHeight, w = s === !0 ? h.offsetWidth : h.offsetHeight;\n const f = () => {\n t({\n scrollHeight: I,\n scrollTop: Math.max(R, 0),\n viewportHeight: w\n });\n };\n p.suppressFlushSync === !0 ? f() : So.flushSync(f), l.current !== null && (R === l.current || R <= 0 || R === I - w) && (l.current = null, e(!0), c.current && (clearTimeout(c.current), c.current = null));\n },\n [t, e, s]\n );\n E.useEffect(() => {\n const p = r || i.current;\n return hn(p), o(r || i.current), d({ suppressFlushSync: !0, target: p }), p.addEventListener(\"scroll\", d, { passive: !0 }), () => {\n hn(p), o(null), p.removeEventListener(\"scroll\", d);\n };\n }, [i, d, n, o, r]);\n function m(p) {\n const I = i.current;\n if (!I || (s === !0 ? \"offsetWidth\" in I && I.offsetWidth === 0 : \"offsetHeight\" in I && I.offsetHeight === 0))\n return;\n const w = p.behavior === \"smooth\";\n let R, h, f;\n ke(I) ? (h = Math.max(\n Ht(I.document.documentElement, s === !0 ? \"width\" : \"height\"),\n s === !0 ? I.document.documentElement.scrollWidth : I.document.documentElement.scrollHeight\n ), R = s === !0 ? I.innerWidth : I.innerHeight, f = s === !0 ? _t(I, I.scrollX) : I.scrollY) : (h = I[s === !0 ? \"scrollWidth\" : \"scrollHeight\"], R = Ht(I, s === !0 ? \"width\" : \"height\"), f = s === !0 ? _t(I, I.scrollLeft) : I.scrollTop);\n const a = h - R;\n if (p.top === void 0) {\n I.scrollTo(p);\n return;\n }\n const S = Math.ceil(Math.max(Math.min(a, p.top), 0));\n if (p.top = S, Jn(R, h) || S === f) {\n t({ scrollHeight: h, scrollTop: f, viewportHeight: R }), w && e(!0);\n return;\n }\n w ? (l.current = S, c.current && clearTimeout(c.current), c.current = setTimeout(() => {\n c.current = null, l.current = null, e(!0);\n }, 1e3)) : l.current = null, s === !0 && (p = {\n ...p.behavior !== void 0 ? { behavior: p.behavior } : {},\n left: gn(I, S)\n }), I.scrollTo(p);\n }\n function v(p) {\n s === !0 && (p = {\n ...p.behavior !== void 0 ? { behavior: p.behavior } : {},\n ...p.top !== void 0 ? { left: gn(i.current, p.top) } : {}\n }), i.current.scrollBy(p);\n }\n return { scrollByCallback: v, scrollerRef: i, scrollToCallback: m };\n}\nfunction Qe(t) {\n return t;\n}\nconst ar = /* @__PURE__ */ j(() => {\n const t = T((l) => `Item ${l}`), e = T((l) => `Group ${l}`), n = T({}), o = T(Qe), r = T(\"div\"), s = T(Jt), i = (l, c = null) => ht(\n x(\n n,\n B((d) => d[l]),\n nt()\n ),\n c\n );\n return {\n components: n,\n computeItemKey: o,\n EmptyPlaceholder: i(\"EmptyPlaceholder\"),\n FooterComponent: i(\"Footer\"),\n GroupComponent: i(\"Group\", \"div\"),\n groupContent: e,\n HeaderComponent: i(\"Header\"),\n HeaderFooterTag: r,\n ItemComponent: i(\"Item\", \"div\"),\n itemContent: t,\n ListComponent: i(\"List\", \"div\"),\n ScrollerComponent: i(\"Scroller\", \"div\"),\n scrollerRef: s,\n ScrollSeekPlaceholder: i(\"ScrollSeekPlaceholder\"),\n TopItemListComponent: i(\"TopItemList\")\n };\n}), dr = /* @__PURE__ */ j(\n ([t, e]) => ({ ...t, ...e }),\n rt(so, ar)\n), fr = ({ height: t }) => /* @__PURE__ */ G(\"div\", { style: { height: t } }), mr = { overflowAnchor: \"none\", position: Je(), zIndex: 1 }, uo = { overflowAnchor: \"none\" }, pr = { ...uo, display: \"inline-block\", height: \"100%\" }, Hn = /* @__PURE__ */ E.memo(function({ showTopList: e = !1 }) {\n const n = A(\"listState\"), o = Ct(\"sizeRanges\"), r = A(\"useWindowScroll\"), s = A(\"customScrollParent\"), i = Ct(\"windowScrollContainerState\"), l = Ct(\"scrollContainerState\"), c = s || r ? i : l, d = A(\"itemContent\"), m = A(\"context\"), v = A(\"groupContent\"), p = A(\"trackItemSizes\"), I = A(\"itemSize\"), w = A(\"log\"), R = Ct(\"gap\"), h = A(\"horizontalDirection\"), { callbackRef: f } = Mn(\n o,\n I,\n p,\n e ? Jt : c,\n w,\n R,\n s,\n h,\n A(\"skipAnimationFrameInResizeObserver\")\n ), [a, S] = E.useState(0);\n on(\"deviation\", (F) => {\n a !== F && S(F);\n });\n const H = A(\"EmptyPlaceholder\"), y = A(\"ScrollSeekPlaceholder\") ?? fr, O = A(\"ListComponent\"), u = A(\"ItemComponent\"), g = A(\"GroupComponent\"), C = A(\"computeItemKey\"), z = A(\"isSeeking\"), L = A(\"groupIndices\").length > 0, V = A(\"alignToBottom\"), N = A(\"initialItemFinalLocationReached\"), Z = e ? {} : {\n boxSizing: \"border-box\",\n ...h ? {\n display: \"inline-block\",\n height: \"100%\",\n marginInlineStart: a !== 0 ? a : V ? \"auto\" : 0,\n paddingInlineEnd: n.offsetBottom,\n paddingInlineStart: n.offsetTop,\n whiteSpace: \"nowrap\"\n } : {\n marginTop: a !== 0 ? a : V ? \"auto\" : 0,\n paddingBottom: n.offsetBottom,\n paddingTop: n.offsetTop\n },\n ...N ? {} : { visibility: \"hidden\" }\n };\n return !e && n.totalCount === 0 && H !== null && H !== void 0 ? /* @__PURE__ */ G(H, { ...ot(H, m) }) : /* @__PURE__ */ G(\n O,\n {\n ...ot(O, m),\n \"data-testid\": e ? \"virtuoso-top-item-list\" : \"virtuoso-item-list\",\n ref: f,\n style: Z,\n children: (e ? n.topItems : n.items).map((F) => {\n const mt = F.originalIndex, q = C(mt + n.firstItemIndex, F.data, m);\n return z ? /* @__PURE__ */ Dt(\n y,\n {\n ...ot(y, m),\n height: F.size,\n index: F.index,\n key: q,\n type: F.type || \"item\",\n ...F.type === \"group\" ? {} : { groupIndex: F.groupIndex }\n }\n ) : F.type === \"group\" ? /* @__PURE__ */ Dt(\n g,\n {\n ...ot(g, m),\n \"data-index\": mt,\n \"data-item-index\": F.index,\n \"data-known-size\": F.size,\n key: q,\n style: mr\n },\n v(F.index, m)\n ) : /* @__PURE__ */ Dt(\n u,\n {\n ...ot(u, m),\n ...ao(u, F.data),\n \"data-index\": mt,\n \"data-item-group-index\": F.groupIndex,\n \"data-item-index\": F.index,\n \"data-known-size\": F.size,\n key: q,\n style: h ? pr : uo\n },\n L ? d(F.index, F.groupIndex, F.data, m) : d(F.index, F.data, m)\n );\n })\n }\n );\n}), hr = {\n height: \"100%\",\n outline: \"none\",\n overflowY: \"auto\",\n position: \"relative\",\n WebkitOverflowScrolling: \"touch\"\n}, gr = {\n outline: \"none\",\n overflowX: \"auto\",\n position: \"relative\"\n}, He = (t) => ({\n height: \"100%\",\n position: \"absolute\",\n top: 0,\n width: \"100%\",\n ...t ? { display: \"flex\", flexDirection: \"column\" } : void 0\n}), tn = (t, e, n = 0) => ({\n ...He(t),\n position: e ? \"relative\" : \"absolute\",\n top: e ? -n : 0\n}), Ir = {\n position: Je(),\n top: 0,\n width: \"100%\",\n zIndex: 1\n};\nfunction ot(t, e) {\n if (typeof t != \"string\")\n return { context: e };\n}\nfunction ao(t, e) {\n return { item: typeof t == \"string\" ? void 0 : e };\n}\nconst Sr = /* @__PURE__ */ E.memo(function() {\n const e = A(\"HeaderComponent\"), n = Ct(\"headerHeight\"), o = A(\"HeaderFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n A(\"skipAnimationFrameInResizeObserver\")\n ), s = A(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n}), xr = /* @__PURE__ */ E.memo(function() {\n const e = A(\"FooterComponent\"), n = Ct(\"footerHeight\"), o = A(\"HeaderFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n A(\"skipAnimationFrameInResizeObserver\")\n ), s = A(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n});\nfunction en({ useEmitter: t, useEmitterValue: e, usePublisher: n }) {\n return E.memo(function({ children: s, style: i, context: l, ...c }) {\n const d = n(\"scrollContainerState\"), m = e(\"ScrollerComponent\"), v = n(\"smoothScrollTargetReached\"), p = e(\"scrollerRef\"), I = e(\"horizontalDirection\") || !1, { scrollByCallback: w, scrollerRef: R, scrollToCallback: h } = co(\n d,\n v,\n m,\n p,\n void 0,\n I\n );\n return t(\"scrollTo\", h), t(\"scrollBy\", w), /* @__PURE__ */ G(\n m,\n {\n \"data-testid\": \"virtuoso-scroller\",\n \"data-virtuoso-scroller\": !0,\n ref: R,\n style: { ...I ? gr : hr, ...i },\n tabIndex: 0,\n ...c,\n ...ot(m, l),\n children: s\n }\n );\n });\n}\nfunction nn({ useEmitter: t, useEmitterValue: e, usePublisher: n }) {\n return E.memo(function({ children: s, style: i, context: l, ...c }) {\n const d = n(\"windowScrollContainerState\"), m = e(\"ScrollerComponent\"), v = n(\"smoothScrollTargetReached\"), p = e(\"totalListHeight\"), I = e(\"deviation\"), w = e(\"customScrollParent\"), R = E.useRef(null), h = e(\"scrollerRef\"), { scrollByCallback: f, scrollerRef: a, scrollToCallback: S } = co(\n d,\n v,\n m,\n h,\n w\n );\n return lo(() => (a.current = w || R.current?.ownerDocument.defaultView, () => {\n a.current = null;\n }), [a, w]), t(\"windowScrollTo\", S), t(\"scrollBy\", f), /* @__PURE__ */ G(\n m,\n {\n ref: R,\n \"data-virtuoso-scroller\": !0,\n style: { position: \"relative\", ...i, ...p !== 0 ? { height: p + I } : void 0 },\n ...c,\n ...ot(m, l),\n children: s\n }\n );\n });\n}\nconst vr = ({ children: t }) => {\n const e = E.useContext(Re), n = Ct(\"viewportHeight\"), o = Ct(\"fixedItemHeight\"), r = A(\"alignToBottom\"), s = A(\"horizontalDirection\"), i = E.useMemo(\n () => re(n, (c) => Ht(c, s ? \"width\" : \"height\")),\n [n, s]\n ), l = Ot(i, !0, A(\"skipAnimationFrameInResizeObserver\"));\n return E.useEffect(() => {\n e && (n(e.viewportHeight), o(e.itemHeight));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"element\", ref: l, style: He(r), children: t });\n}, Tr = ({ children: t }) => {\n const e = E.useContext(Re), n = Ct(\"windowViewportRect\"), o = Ct(\"fixedItemHeight\"), r = A(\"customScrollParent\"), s = A(\"useWindowScroll\"), i = A(\"topListHeight\"), l = $e(\n n,\n r,\n A(\"skipAnimationFrameInResizeObserver\")\n ), c = A(\"alignToBottom\");\n return E.useEffect(() => {\n e && (o(e.itemHeight), n({ listHeight: 0, offsetTop: 0, visibleHeight: e.viewportHeight, visibleWidth: 100 }));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"window\", ref: l, style: tn(c, s, i), children: t });\n}, Cr = ({ children: t }) => {\n const e = A(\"TopItemListComponent\") ?? \"div\", n = A(\"headerHeight\"), o = { ...Ir, marginTop: `${n}px` }, r = A(\"context\");\n return /* @__PURE__ */ G(e, { style: o, ...ot(e, r), children: t });\n}, wr = /* @__PURE__ */ E.memo(function(e) {\n const n = A(\"useWindowScroll\"), o = A(\"topItemsIndexes\").length > 0, r = A(\"customScrollParent\"), s = A(\"context\");\n return /* @__PURE__ */ $t(r || n ? br : yr, { ...e, context: s, children: [\n o && /* @__PURE__ */ G(Cr, { children: /* @__PURE__ */ G(Hn, { showTopList: !0 }) }),\n /* @__PURE__ */ $t(r || n ? Tr : vr, { children: [\n /* @__PURE__ */ G(Sr, {}),\n /* @__PURE__ */ G(Hn, {}),\n /* @__PURE__ */ G(xr, {})\n ] })\n ] });\n}), {\n Component: fo,\n useEmitter: on,\n useEmitterValue: A,\n usePublisher: Ct\n} = /* @__PURE__ */ Xe(\n dr,\n {\n optional: {\n restoreStateFrom: \"restoreStateFrom\",\n context: \"context\",\n followOutput: \"followOutput\",\n scrollIntoViewOnChange: \"scrollIntoViewOnChange\",\n itemContent: \"itemContent\",\n groupContent: \"groupContent\",\n overscan: \"overscan\",\n increaseViewportBy: \"increaseViewportBy\",\n minOverscanItemCount: \"minOverscanItemCount\",\n totalCount: \"totalCount\",\n groupCounts: \"groupCounts\",\n topItemCount: \"topItemCount\",\n firstItemIndex: \"firstItemIndex\",\n initialTopMostItemIndex: \"initialTopMostItemIndex\",\n components: \"components\",\n atBottomThreshold: \"atBottomThreshold\",\n atTopThreshold: \"atTopThreshold\",\n computeItemKey: \"computeItemKey\",\n defaultItemHeight: \"defaultItemHeight\",\n fixedGroupHeight: \"fixedGroupHeight\",\n // Must be set above 'fixedItemHeight'\n fixedItemHeight: \"fixedItemHeight\",\n heightEstimates: \"heightEstimates\",\n itemSize: \"itemSize\",\n scrollSeekConfiguration: \"scrollSeekConfiguration\",\n headerFooterTag: \"HeaderFooterTag\",\n data: \"data\",\n initialItemCount: \"initialItemCount\",\n initialScrollTop: \"initialScrollTop\",\n alignToBottom: \"alignToBottom\",\n useWindowScroll: \"useWindowScroll\",\n customScrollParent: \"customScrollParent\",\n scrollerRef: \"scrollerRef\",\n logLevel: \"logLevel\",\n horizontalDirection: \"horizontalDirection\",\n skipAnimationFrameInResizeObserver: \"skipAnimationFrameInResizeObserver\"\n },\n methods: {\n scrollToIndex: \"scrollToIndex\",\n scrollIntoView: \"scrollIntoView\",\n scrollTo: \"scrollTo\",\n scrollBy: \"scrollBy\",\n autoscrollToBottom: \"autoscrollToBottom\",\n getState: \"getState\"\n },\n events: {\n isScrolling: \"isScrolling\",\n endReached: \"endReached\",\n startReached: \"startReached\",\n rangeChanged: \"rangeChanged\",\n atBottomStateChange: \"atBottomStateChange\",\n atTopStateChange: \"atTopStateChange\",\n totalListHeightChanged: \"totalListHeightChanged\",\n itemsRendered: \"itemsRendered\",\n groupIndices: \"groupIndices\"\n }\n },\n wr\n), yr = /* @__PURE__ */ en({ useEmitter: on, useEmitterValue: A, usePublisher: Ct }), br = /* @__PURE__ */ nn({ useEmitter: on, useEmitterValue: A, usePublisher: Ct }), ns = fo, os = fo, Rr = /* @__PURE__ */ j(() => {\n const t = T((d) => /* @__PURE__ */ $t(\"td\", { children: [\n \"Item $\",\n d\n ] })), e = T(null), n = T((d) => /* @__PURE__ */ $t(\"td\", { colSpan: 1e3, children: [\n \"Group \",\n d\n ] })), o = T(null), r = T(null), s = T({}), i = T(Qe), l = T(Jt), c = (d, m = null) => ht(\n x(\n s,\n B((v) => v[d]),\n nt()\n ),\n m\n );\n return {\n components: s,\n computeItemKey: i,\n context: e,\n EmptyPlaceholder: c(\"EmptyPlaceholder\"),\n FillerRow: c(\"FillerRow\"),\n fixedFooterContent: r,\n fixedHeaderContent: o,\n itemContent: t,\n groupContent: n,\n ScrollerComponent: c(\"Scroller\", \"div\"),\n scrollerRef: l,\n ScrollSeekPlaceholder: c(\"ScrollSeekPlaceholder\"),\n TableBodyComponent: c(\"TableBody\", \"tbody\"),\n TableComponent: c(\"Table\", \"table\"),\n TableFooterComponent: c(\"TableFoot\", \"tfoot\"),\n TableHeadComponent: c(\"TableHead\", \"thead\"),\n TableRowComponent: c(\"TableRow\", \"tr\"),\n GroupComponent: c(\"Group\", \"tr\")\n };\n}), Hr = /* @__PURE__ */ j(\n ([t, e]) => ({ ...t, ...e }),\n rt(so, Rr)\n), Er = ({ height: t }) => /* @__PURE__ */ G(\"tr\", { children: /* @__PURE__ */ G(\"td\", { style: { height: t } }) }), Br = ({ height: t }) => /* @__PURE__ */ G(\"tr\", { children: /* @__PURE__ */ G(\"td\", { style: { border: 0, height: t, padding: 0 } }) }), Lr = { overflowAnchor: \"none\" }, En = { position: Je(), zIndex: 2, overflowAnchor: \"none\" }, Bn = /* @__PURE__ */ E.memo(function({ showTopList: e = !1 }) {\n const n = M(\"listState\"), o = M(\"computeItemKey\"), r = M(\"firstItemIndex\"), s = M(\"context\"), i = M(\"isSeeking\"), l = M(\"fixedHeaderHeight\"), c = M(\"groupIndices\").length > 0, d = M(\"itemContent\"), m = M(\"groupContent\"), v = M(\"ScrollSeekPlaceholder\") ?? Er, p = M(\"GroupComponent\"), I = M(\"TableRowComponent\"), w = (e ? n.topItems : []).reduce((h, f, a) => (a === 0 ? h.push(f.size) : h.push(h[a - 1] + f.size), h), []);\n return (e ? n.topItems : n.items).map((h) => {\n const f = h.originalIndex, a = o(f + r, h.data, s), S = e ? f === 0 ? 0 : w[f - 1] : 0;\n return i ? /* @__PURE__ */ Dt(\n v,\n {\n ...ot(v, s),\n height: h.size,\n index: h.index,\n key: a,\n type: h.type || \"item\"\n }\n ) : h.type === \"group\" ? /* @__PURE__ */ Dt(\n p,\n {\n ...ot(p, s),\n \"data-index\": f,\n \"data-item-index\": h.index,\n \"data-known-size\": h.size,\n key: a,\n style: {\n ...En,\n top: l\n }\n },\n m(h.index, s)\n ) : /* @__PURE__ */ Dt(\n I,\n {\n ...ot(I, s),\n ...ao(I, h.data),\n \"data-index\": f,\n \"data-item-index\": h.index,\n \"data-known-size\": h.size,\n \"data-item-group-index\": h.groupIndex,\n key: a,\n style: e ? { ...En, top: l + S } : Lr\n },\n c ? d(h.index, h.groupIndex, h.data, s) : d(h.index, h.data, s)\n );\n });\n}), Or = /* @__PURE__ */ E.memo(function() {\n const e = M(\"listState\"), n = M(\"topItemsIndexes\").length > 0, o = bt(\"sizeRanges\"), r = M(\"useWindowScroll\"), s = M(\"customScrollParent\"), i = bt(\"windowScrollContainerState\"), l = bt(\"scrollContainerState\"), c = s || r ? i : l, d = M(\"trackItemSizes\"), m = M(\"itemSize\"), v = M(\"log\"), { callbackRef: p, ref: I } = Mn(\n o,\n m,\n d,\n c,\n v,\n void 0,\n s,\n !1,\n M(\"skipAnimationFrameInResizeObserver\")\n ), [w, R] = E.useState(0);\n rn(\"deviation\", (L) => {\n w !== L && (I.current.style.marginTop = `${L}px`, R(L));\n });\n const h = M(\"EmptyPlaceholder\"), f = M(\"FillerRow\") ?? Br, a = M(\"TableBodyComponent\"), S = M(\"paddingTopAddition\"), H = M(\"statefulTotalCount\"), y = M(\"context\");\n if (H === 0 && h !== null && h !== void 0)\n return /* @__PURE__ */ G(h, { ...ot(h, y) });\n const O = (n ? e.topItems : []).reduce((L, V) => L + V.size, 0), u = e.offsetTop + S + w - O, g = e.offsetBottom, C = u > 0 ? /* @__PURE__ */ G(f, { context: y, height: u }, \"padding-top\") : null, z = g > 0 ? /* @__PURE__ */ G(f, { context: y, height: g }, \"padding-bottom\") : null;\n return /* @__PURE__ */ $t(a, { \"data-testid\": \"virtuoso-item-list\", ref: p, ...ot(a, y), children: [\n C,\n n && /* @__PURE__ */ G(Bn, { showTopList: !0 }),\n /* @__PURE__ */ G(Bn, {}),\n z\n ] });\n}), kr = ({ children: t }) => {\n const e = E.useContext(Re), n = bt(\"viewportHeight\"), o = bt(\"fixedItemHeight\"), r = Ot(\n E.useMemo(() => re(n, (s) => Ht(s, \"height\")), [n]),\n !0,\n M(\"skipAnimationFrameInResizeObserver\")\n );\n return E.useEffect(() => {\n e && (n(e.viewportHeight), o(e.itemHeight));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"element\", ref: r, style: He(!1), children: t });\n}, zr = ({ children: t }) => {\n const e = E.useContext(Re), n = bt(\"windowViewportRect\"), o = bt(\"fixedItemHeight\"), r = M(\"customScrollParent\"), s = M(\"useWindowScroll\"), i = $e(\n n,\n r,\n M(\"skipAnimationFrameInResizeObserver\")\n );\n return E.useEffect(() => {\n e && (o(e.itemHeight), n({ listHeight: 0, offsetTop: 0, visibleHeight: e.viewportHeight, visibleWidth: 100 }));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { \"data-viewport-type\": \"window\", ref: i, style: tn(!1, s), children: t });\n}, Fr = /* @__PURE__ */ E.memo(function(e) {\n const n = M(\"useWindowScroll\"), o = M(\"customScrollParent\"), r = bt(\"fixedHeaderHeight\"), s = bt(\"fixedFooterHeight\"), i = M(\"fixedHeaderContent\"), l = M(\"fixedFooterContent\"), c = M(\"context\"), d = Ot(\n E.useMemo(() => re(r, (a) => Ht(a, \"height\")), [r]),\n !0,\n M(\"skipAnimationFrameInResizeObserver\")\n ), m = Ot(\n E.useMemo(() => re(s, (a) => Ht(a, \"height\")), [s]),\n !0,\n M(\"skipAnimationFrameInResizeObserver\")\n ), v = o || n ? Wr : Vr, p = o || n ? zr : kr, I = M(\"TableComponent\"), w = M(\"TableHeadComponent\"), R = M(\"TableFooterComponent\"), h = i ? /* @__PURE__ */ G(\n w,\n {\n ref: d,\n style: { position: \"sticky\", top: 0, zIndex: 2 },\n ...ot(w, c),\n children: i()\n },\n \"TableHead\"\n ) : null, f = l ? /* @__PURE__ */ G(\n R,\n {\n ref: m,\n style: { bottom: 0, position: \"sticky\", zIndex: 1 },\n ...ot(R, c),\n children: l()\n },\n \"TableFoot\"\n ) : null;\n return /* @__PURE__ */ G(v, { ...e, ...ot(v, c), children: /* @__PURE__ */ G(p, { children: /* @__PURE__ */ $t(I, { style: { borderSpacing: 0, overflowAnchor: \"none\" }, ...ot(I, c), children: [\n h,\n /* @__PURE__ */ G(Or, {}, \"TableBody\"),\n f\n ] }) }) });\n}), {\n Component: mo,\n useEmitter: rn,\n useEmitterValue: M,\n usePublisher: bt\n} = /* @__PURE__ */ Xe(\n Hr,\n {\n optional: {\n restoreStateFrom: \"restoreStateFrom\",\n context: \"context\",\n followOutput: \"followOutput\",\n firstItemIndex: \"firstItemIndex\",\n itemContent: \"itemContent\",\n groupContent: \"groupContent\",\n fixedHeaderContent: \"fixedHeaderContent\",\n fixedFooterContent: \"fixedFooterContent\",\n overscan: \"overscan\",\n increaseViewportBy: \"increaseViewportBy\",\n minOverscanItemCount: \"minOverscanItemCount\",\n totalCount: \"totalCount\",\n topItemCount: \"topItemCount\",\n initialTopMostItemIndex: \"initialTopMostItemIndex\",\n components: \"components\",\n groupCounts: \"groupCounts\",\n atBottomThreshold: \"atBottomThreshold\",\n atTopThreshold: \"atTopThreshold\",\n computeItemKey: \"computeItemKey\",\n defaultItemHeight: \"defaultItemHeight\",\n fixedGroupHeight: \"fixedGroupHeight\",\n // Must be set above 'fixedItemHeight'\n fixedItemHeight: \"fixedItemHeight\",\n itemSize: \"itemSize\",\n scrollSeekConfiguration: \"scrollSeekConfiguration\",\n data: \"data\",\n initialItemCount: \"initialItemCount\",\n initialScrollTop: \"initialScrollTop\",\n alignToBottom: \"alignToBottom\",\n useWindowScroll: \"useWindowScroll\",\n customScrollParent: \"customScrollParent\",\n scrollerRef: \"scrollerRef\",\n logLevel: \"logLevel\"\n },\n methods: {\n scrollToIndex: \"scrollToIndex\",\n scrollIntoView: \"scrollIntoView\",\n scrollTo: \"scrollTo\",\n scrollBy: \"scrollBy\",\n getState: \"getState\"\n },\n events: {\n isScrolling: \"isScrolling\",\n endReached: \"endReached\",\n startReached: \"startReached\",\n rangeChanged: \"rangeChanged\",\n atBottomStateChange: \"atBottomStateChange\",\n atTopStateChange: \"atTopStateChange\",\n totalListHeightChanged: \"totalListHeightChanged\",\n itemsRendered: \"itemsRendered\",\n groupIndices: \"groupIndices\"\n }\n },\n Fr\n), Vr = /* @__PURE__ */ en({ useEmitter: rn, useEmitterValue: M, usePublisher: bt }), Wr = /* @__PURE__ */ nn({ useEmitter: rn, useEmitterValue: M, usePublisher: bt }), rs = mo, ss = mo, Ln = {\n bottom: 0,\n itemHeight: 0,\n items: [],\n itemWidth: 0,\n offsetBottom: 0,\n offsetTop: 0,\n top: 0\n}, Pr = {\n bottom: 0,\n itemHeight: 0,\n items: [{ index: 0 }],\n itemWidth: 0,\n offsetBottom: 0,\n offsetTop: 0,\n top: 0\n}, { ceil: On, floor: Ce, max: oe, min: ze, round: kn } = Math;\nfunction zn(t, e, n) {\n return Array.from({ length: e - t + 1 }).map((o, r) => ({ data: n === null ? null : n[r + t], index: r + t }));\n}\nfunction Gr(t) {\n return {\n ...Pr,\n items: t\n };\n}\nfunction Se(t, e) {\n return t !== void 0 && t.width === e.width && t.height === e.height;\n}\nfunction Ar(t, e) {\n return t !== void 0 && t.column === e.column && t.row === e.row;\n}\nconst Mr = /* @__PURE__ */ j(\n ([\n { increaseViewportBy: t, listBoundary: e, overscan: n, visibleRange: o },\n { footerHeight: r, headerHeight: s, scrollBy: i, scrollContainerState: l, scrollTo: c, scrollTop: d, smoothScrollTargetReached: m, viewportHeight: v },\n p,\n I,\n { didMount: w, propsReady: R },\n { customScrollParent: h, useWindowScroll: f, windowScrollContainerState: a, windowScrollTo: S, windowViewportRect: H },\n y\n ]) => {\n const O = T(0), u = T(0), g = T(Ln), C = T({ height: 0, width: 0 }), z = T({ height: 0, width: 0 }), L = U(), V = U(), N = T(0), Z = T(null), F = T({ column: 0, row: 0 }), mt = U(), q = U(), Q = T(!1), gt = T(0), ut = T(!0), St = T(!1), Ft = T(!1);\n Y(\n x(\n w,\n $(gt),\n P(([b, D]) => D !== 0)\n ),\n () => {\n _(ut, !1);\n }\n ), Y(\n x(\n at(w, ut, z, C, gt, St),\n P(([b, D, K, st, , tt]) => b && !D && K.height !== 0 && st.height !== 0 && !tt)\n ),\n ([, , , , b]) => {\n _(St, !0), je(1, () => {\n _(L, b);\n }), yt(x(d), () => {\n _(e, [0, 0]), _(ut, !0);\n });\n }\n ), k(\n x(\n q,\n P((b) => b != null && b.scrollTop > 0),\n Bt(0)\n ),\n u\n ), Y(\n x(\n w,\n $(q),\n P(([, b]) => b != null)\n ),\n ([, b]) => {\n b && (_(C, b.viewport), _(z, b.item), _(F, b.gap), b.scrollTop > 0 && (_(Q, !0), yt(x(d, Ut(1)), (D) => {\n _(Q, !1);\n }), _(c, { top: b.scrollTop })));\n }\n ), k(\n x(\n C,\n B(({ height: b }) => b)\n ),\n v\n ), k(\n x(\n at(\n W(C, Se),\n W(z, Se),\n W(F, (b, D) => b !== void 0 && b.column === D.column && b.row === D.row),\n W(d)\n ),\n B(([b, D, K, st]) => ({\n gap: K,\n item: D,\n scrollTop: st,\n viewport: b\n }))\n ),\n mt\n ), k(\n x(\n at(\n W(O),\n o,\n W(F, Ar),\n W(z, Se),\n W(C, Se),\n W(Z),\n W(u),\n W(Q),\n W(ut),\n W(gt)\n ),\n P(([, , , , , , , b]) => !b),\n B(\n ([\n b,\n [D, K],\n st,\n tt,\n X,\n lt,\n xt,\n ,\n ct,\n Vt\n ]) => {\n const { column: Wt, row: ee } = st, { height: he, width: Ee } = tt, { width: sn } = X;\n if (xt === 0 && (b === 0 || sn === 0))\n return Ln;\n if (Ee === 0) {\n const dn = qe(Vt, b), Io = dn + Math.max(xt - 1, 0);\n return Gr(zn(dn, Io, lt));\n }\n const ge = po(sn, Ee, Wt);\n let qt, Mt;\n ct ? D === 0 && K === 0 && xt > 0 ? (qt = 0, Mt = xt - 1) : (qt = ge * Ce((D + ee) / (he + ee)), Mt = ge * On((K + ee) / (he + ee)) - 1, Mt = ze(b - 1, oe(Mt, ge - 1)), qt = ze(Mt, oe(0, qt))) : (qt = 0, Mt = -1);\n const ln = zn(qt, Mt, lt), { bottom: cn, top: un } = Fn(X, st, tt, ln), an = On(b / ge), go = an * he + (an - 1) * ee - cn;\n return { bottom: cn, itemHeight: he, items: ln, itemWidth: Ee, offsetBottom: go, offsetTop: un, top: un };\n }\n )\n ),\n g\n ), k(\n x(\n Z,\n P((b) => b !== null),\n B((b) => b.length)\n ),\n O\n ), k(\n x(\n at(C, z, g, F),\n P(([b, D, { items: K }]) => K.length > 0 && D.height !== 0 && b.height !== 0),\n B(([b, D, { items: K }, st]) => {\n const { bottom: tt, top: X } = Fn(b, st, D, K);\n return [X, tt];\n }),\n nt(le)\n ),\n e\n );\n const pt = T(!1);\n k(\n x(\n d,\n $(pt),\n B(([b, D]) => D || b !== 0)\n ),\n pt\n );\n const jt = Tt(\n x(\n at(g, O),\n P(([{ items: b }]) => b.length > 0),\n $(pt),\n P(([[b, D], K]) => {\n const tt = b.items[b.items.length - 1].index === D - 1;\n return (K || b.bottom > 0 && b.itemHeight > 0 && b.offsetBottom === 0 && b.items.length === D) && tt;\n }),\n B(([[, b]]) => b - 1),\n nt()\n )\n ), Qt = Tt(\n x(\n W(g),\n P(({ items: b }) => b.length > 0 && b[0].index === 0),\n Bt(0),\n nt()\n )\n ), Et = Tt(\n x(\n W(g),\n $(Q),\n P(([{ items: b }, D]) => b.length > 0 && !D),\n B(([{ items: b }]) => ({\n endIndex: b[b.length - 1].index,\n startIndex: b[0].index\n })),\n nt(Kn),\n zt(0)\n )\n );\n k(Et, I.scrollSeekRangeChanged), k(\n x(\n L,\n $(C, z, O, F),\n B(([b, D, K, st, tt]) => {\n const X = Xn(b), { align: lt, behavior: xt, offset: ct } = X;\n let Vt = X.index;\n Vt === \"LAST\" && (Vt = st - 1), Vt = oe(0, Vt, ze(st - 1, Vt));\n let Wt = Me(D, tt, K, Vt);\n return lt === \"end\" ? Wt = kn(Wt - D.height + K.height) : lt === \"center\" && (Wt = kn(Wt - D.height / 2 + K.height / 2)), ct !== void 0 && ct !== 0 && (Wt += ct), { behavior: xt, top: Wt };\n })\n ),\n c\n );\n const te = ht(\n x(\n g,\n B((b) => b.offsetBottom + b.bottom)\n ),\n 0\n );\n return k(\n x(\n H,\n B((b) => ({ height: b.visibleHeight, width: b.visibleWidth }))\n ),\n C\n ), {\n customScrollParent: h,\n // input\n data: Z,\n deviation: N,\n footerHeight: r,\n gap: F,\n headerHeight: s,\n increaseViewportBy: t,\n initialItemCount: u,\n itemDimensions: z,\n overscan: n,\n restoreStateFrom: q,\n scrollBy: i,\n scrollContainerState: l,\n scrollHeight: V,\n scrollTo: c,\n scrollToIndex: L,\n scrollTop: d,\n smoothScrollTargetReached: m,\n totalCount: O,\n useWindowScroll: f,\n viewportDimensions: C,\n windowScrollContainerState: a,\n windowScrollTo: S,\n windowViewportRect: H,\n ...I,\n // output\n gridState: g,\n horizontalDirection: Ft,\n initialTopMostItemIndex: gt,\n totalListHeight: te,\n ...p,\n endReached: jt,\n propsReady: R,\n rangeChanged: Et,\n startReached: Qt,\n stateChanged: mt,\n stateRestoreInProgress: Q,\n ...y\n };\n },\n rt(Ye, It, pe, oo, At, Ze, Gt)\n);\nfunction po(t, e, n) {\n return oe(1, Ce((t + n) / (Ce(e) + n)));\n}\nfunction Fn(t, e, n, o) {\n const { height: r } = n;\n if (r === void 0 || o.length === 0)\n return { bottom: 0, top: 0 };\n const s = Me(t, e, n, o[0].index);\n return { bottom: Me(t, e, n, o[o.length - 1].index) + r, top: s };\n}\nfunction Me(t, e, n, o) {\n const r = po(t.width, n.width, e.column), s = Ce(o / r), i = s * n.height + oe(0, s - 1) * e.row;\n return i > 0 ? i + e.row : i;\n}\nconst _r = /* @__PURE__ */ j(() => {\n const t = T((v) => `Item ${v}`), e = T({}), n = T(null), o = T(\"virtuoso-grid-item\"), r = T(\"virtuoso-grid-list\"), s = T(Qe), i = T(\"div\"), l = T(Jt), c = (v, p = null) => ht(\n x(\n e,\n B((I) => I[v]),\n nt()\n ),\n p\n ), d = T(!1), m = T(!1);\n return k(W(m), d), {\n components: e,\n computeItemKey: s,\n context: n,\n FooterComponent: c(\"Footer\"),\n HeaderComponent: c(\"Header\"),\n headerFooterTag: i,\n itemClassName: o,\n ItemComponent: c(\"Item\", \"div\"),\n itemContent: t,\n listClassName: r,\n ListComponent: c(\"List\", \"div\"),\n readyStateChanged: d,\n reportReadyState: m,\n ScrollerComponent: c(\"Scroller\", \"div\"),\n scrollerRef: l,\n ScrollSeekPlaceholder: c(\"ScrollSeekPlaceholder\", \"div\")\n };\n}), Nr = /* @__PURE__ */ j(\n ([t, e]) => ({ ...t, ...e }),\n rt(Mr, _r)\n), Dr = /* @__PURE__ */ E.memo(function() {\n const e = et(\"gridState\"), n = et(\"listClassName\"), o = et(\"itemClassName\"), r = et(\"itemContent\"), s = et(\"computeItemKey\"), i = et(\"isSeeking\"), l = wt(\"scrollHeight\"), c = et(\"ItemComponent\"), d = et(\"ListComponent\"), m = et(\"ScrollSeekPlaceholder\"), v = et(\"context\"), p = wt(\"itemDimensions\"), I = wt(\"gap\"), w = et(\"log\"), R = et(\"stateRestoreInProgress\"), h = wt(\"reportReadyState\"), f = Ot(\n E.useMemo(\n () => (a) => {\n const S = a.parentElement.parentElement.scrollHeight;\n l(S);\n const H = a.firstChild;\n if (H !== null) {\n const { height: y, width: O } = H.getBoundingClientRect();\n p({ height: y, width: O });\n }\n I({\n column: Vn(\"column-gap\", getComputedStyle(a).columnGap, w),\n row: Vn(\"row-gap\", getComputedStyle(a).rowGap, w)\n });\n },\n [l, p, I, w]\n ),\n !0,\n !1\n );\n return lo(() => {\n e.itemHeight > 0 && e.itemWidth > 0 && h(!0);\n }, [e]), R ? null : /* @__PURE__ */ G(\n d,\n {\n className: n,\n ref: f,\n ...ot(d, v),\n \"data-testid\": \"virtuoso-item-list\",\n style: { paddingBottom: e.offsetBottom, paddingTop: e.offsetTop },\n children: e.items.map((a) => {\n const S = s(a.index, a.data, v);\n return i ? /* @__PURE__ */ G(\n m,\n {\n ...ot(m, v),\n height: e.itemHeight,\n index: a.index,\n width: e.itemWidth\n },\n S\n ) : /* @__PURE__ */ Dt(\n c,\n {\n ...ot(c, v),\n className: o,\n \"data-index\": a.index,\n key: S\n },\n r(a.index, a.data, v)\n );\n })\n }\n );\n}), $r = E.memo(function() {\n const e = et(\"HeaderComponent\"), n = wt(\"headerHeight\"), o = et(\"headerFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n !1\n ), s = et(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n}), Ur = E.memo(function() {\n const e = et(\"FooterComponent\"), n = wt(\"footerHeight\"), o = et(\"headerFooterTag\"), r = Ot(\n E.useMemo(\n () => (i) => {\n n(Ht(i, \"height\"));\n },\n [n]\n ),\n !0,\n !1\n ), s = et(\"context\");\n return e != null ? /* @__PURE__ */ G(o, { ref: r, children: /* @__PURE__ */ G(e, { ...ot(e, s) }) }) : null;\n}), Kr = ({ children: t }) => {\n const e = E.useContext(io), n = wt(\"itemDimensions\"), o = wt(\"viewportDimensions\"), r = Ot(\n E.useMemo(\n () => (s) => {\n o(s.getBoundingClientRect());\n },\n [o]\n ),\n !0,\n !1\n );\n return E.useEffect(() => {\n e && (o({ height: e.viewportHeight, width: e.viewportWidth }), n({ height: e.itemHeight, width: e.itemWidth }));\n }, [e, o, n]), /* @__PURE__ */ G(\"div\", { ref: r, style: He(!1), children: t });\n}, jr = ({ children: t }) => {\n const e = E.useContext(io), n = wt(\"windowViewportRect\"), o = wt(\"itemDimensions\"), r = et(\"customScrollParent\"), s = et(\"useWindowScroll\"), i = $e(n, r, !1);\n return E.useEffect(() => {\n e && (o({ height: e.itemHeight, width: e.itemWidth }), n({ listHeight: 0, offsetTop: 0, visibleHeight: e.viewportHeight, visibleWidth: e.viewportWidth }));\n }, [e, n, o]), /* @__PURE__ */ G(\"div\", { ref: i, style: tn(!1, s), children: t });\n}, qr = /* @__PURE__ */ E.memo(function({ ...e }) {\n const n = et(\"useWindowScroll\"), o = et(\"customScrollParent\"), r = o || n ? Xr : Zr, s = o || n ? jr : Kr, i = et(\"context\");\n return /* @__PURE__ */ G(r, { ...e, ...ot(r, i), children: /* @__PURE__ */ $t(s, { children: [\n /* @__PURE__ */ G($r, {}),\n /* @__PURE__ */ G(Dr, {}),\n /* @__PURE__ */ G(Ur, {})\n ] }) });\n}), {\n Component: Yr,\n useEmitter: ho,\n useEmitterValue: et,\n usePublisher: wt\n} = /* @__PURE__ */ Xe(\n Nr,\n {\n optional: {\n context: \"context\",\n totalCount: \"totalCount\",\n overscan: \"overscan\",\n itemContent: \"itemContent\",\n components: \"components\",\n computeItemKey: \"computeItemKey\",\n data: \"data\",\n initialItemCount: \"initialItemCount\",\n scrollSeekConfiguration: \"scrollSeekConfiguration\",\n headerFooterTag: \"headerFooterTag\",\n listClassName: \"listClassName\",\n itemClassName: \"itemClassName\",\n useWindowScroll: \"useWindowScroll\",\n customScrollParent: \"customScrollParent\",\n scrollerRef: \"scrollerRef\",\n logLevel: \"logLevel\",\n restoreStateFrom: \"restoreStateFrom\",\n initialTopMostItemIndex: \"initialTopMostItemIndex\",\n increaseViewportBy: \"increaseViewportBy\"\n },\n methods: {\n scrollTo: \"scrollTo\",\n scrollBy: \"scrollBy\",\n scrollToIndex: \"scrollToIndex\"\n },\n events: {\n isScrolling: \"isScrolling\",\n endReached: \"endReached\",\n startReached: \"startReached\",\n rangeChanged: \"rangeChanged\",\n atBottomStateChange: \"atBottomStateChange\",\n atTopStateChange: \"atTopStateChange\",\n stateChanged: \"stateChanged\",\n readyStateChanged: \"readyStateChanged\"\n }\n },\n qr\n), Zr = /* @__PURE__ */ en({ useEmitter: ho, useEmitterValue: et, usePublisher: wt }), Xr = /* @__PURE__ */ nn({ useEmitter: ho, useEmitterValue: et, usePublisher: wt });\nfunction Vn(t, e, n) {\n return e !== \"normal\" && e?.endsWith(\"px\") !== !0 && n(`${t} was not resolved to pixel value correctly`, e, ft.WARN), e === \"normal\" ? 0 : parseInt(e ?? \"0\", 10);\n}\nconst is = Yr;\nexport {\n ss as GroupedTableVirtuoso,\n os as GroupedVirtuoso,\n ft as LogLevel,\n rs as TableVirtuoso,\n ns as Virtuoso,\n is as VirtuosoGrid,\n io as VirtuosoGridMockContext,\n Re as VirtuosoMockContext\n};\n","\nimport { useState } from 'react'\nimport { AlertCircle, Check, ChevronLeft, ChevronRight, ListChecks, Loader2, MessageCircleQuestion } from 'lucide-react'\nimport { useRelayStore } from '@/store'\nimport { FormattedBody } from '@/components/shared/formatted-body'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { Textarea } from '@/components/ui/textarea'\nimport type { ProviderPendingApproval, ProviderQuestion } from '@/lib/display'\nimport { cn } from '@/lib/utils'\n\nexport function PermissionRequestBubble({ agentId, approval }: { agentId: string; approval?: ProviderPendingApproval }) {\n const sendPermissionDecision = useRelayStore((s) => s.sendPermissionDecision)\n const [submitting, setSubmitting] = useState<string | null>(null)\n if (!approval) return null\n if (approval.questions && approval.questions.length) {\n return <QuestionForm agentId={agentId} approval={approval} questions={approval.questions} />\n }\n const currentApproval = approval\n const choices = approval.choices.length ? approval.choices : [\n { id: 'approve' as const, label: 'Approve' },\n { id: 'deny' as const, label: 'Deny' },\n ]\n\n async function choose(choice: typeof choices[number]) {\n if (submitting) return\n setSubmitting(choice.id)\n try {\n await sendPermissionDecision(agentId, currentApproval.id, choice.id)\n } finally {\n setSubmitting(null)\n }\n }\n\n const isPlan = approval.kind === 'plan'\n return (\n <div className=\"flex justify-start mb-3\">\n <div className=\"max-w-[92%] md:max-w-[78%] rounded-2xl rounded-bl-sm bg-card ring-1 ring-amber-500/35 px-3.5 py-3 text-sm\">\n <div className=\"flex items-start gap-2\">\n {isPlan ? <ListChecks className=\"mt-0.5 h-4 w-4 shrink-0 text-amber-400\" /> : <AlertCircle className=\"mt-0.5 h-4 w-4 shrink-0 text-amber-400\" />}\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-medium text-amber-900 dark:text-amber-100\">{approval.title}</div>\n {approval.body && (isPlan\n ? <div className=\"mt-2 max-h-72 overflow-auto rounded-md bg-background/60 p-2.5 text-xs leading-relaxed\"><FormattedBody text={approval.body} rawBody={approval.body} className=\"leading-relaxed\" /></div>\n : <pre className=\"mt-2 max-h-44 overflow-auto whitespace-pre-wrap break-words rounded-md bg-background/80 p-2 font-mono text-xs leading-relaxed text-muted-foreground\">{approval.body}</pre>)}\n <div className=\"mt-2 flex flex-wrap gap-1.5\">\n {choices.map((choice) => (\n <Button\n key={choice.id}\n size=\"sm\"\n variant={choice.id === 'deny' || choice.id === 'abort' ? 'outline' : 'default'}\n disabled={Boolean(submitting)}\n onClick={() => void choose(choice)}\n className=\"h-7 px-2 text-xs\"\n >\n {submitting === choice.id && <Loader2 className=\"mr-1.5 h-3 w-3 animate-spin\" />}\n {choice.label}\n </Button>\n ))}\n </div>\n </div>\n </div>\n </div>\n </div>\n )\n}\n\ninterface QState { labels: string[]; other: string; otherActive: boolean }\n\nfunction questionAnswered(s: QState | undefined): boolean {\n if (!s) return false\n if (s.otherActive && s.other.trim()) return true\n return s.labels.length > 0\n}\n\nfunction answerValue(s: QState): string {\n const parts = [...s.labels]\n if (s.otherActive && s.other.trim()) parts.push(s.other.trim())\n return parts.join(', ')\n}\n\n// Renders a Claude AskUserQuestion as a sequential form (one question at a\n// time). Collects all answers, then submits a single 'answer' decision that the\n// runner turns into a PreToolUse allow + updatedInput so the tool completes.\nfunction QuestionForm({ agentId, approval, questions }: { agentId: string; approval: ProviderPendingApproval; questions: ProviderQuestion[] }) {\n const sendPermissionDecision = useRelayStore((s) => s.sendPermissionDecision)\n const [step, setStep] = useState(0)\n const [state, setState] = useState<Record<number, QState>>({})\n const [submitting, setSubmitting] = useState<null | 'answer' | 'dismiss'>(null)\n\n const q = questions[Math.min(step, questions.length - 1)]\n const cur = state[step]\n if (!q) return null\n const multi = Boolean(q.multiSelect)\n const total = questions.length\n const isLast = step === total - 1\n const answered = questionAnswered(cur)\n const allAnswered = questions.every((_, i) => questionAnswered(state[i]))\n const busy = Boolean(submitting)\n\n function update(patch: Partial<QState>) {\n setState((prev) => {\n const base: QState = prev[step] ?? { labels: [], other: '', otherActive: false }\n return { ...prev, [step]: { ...base, ...patch } }\n })\n }\n function pickOption(label: string) {\n if (multi) {\n const has = cur?.labels.includes(label)\n update({ labels: has ? (cur?.labels ?? []).filter((l) => l !== label) : [...(cur?.labels ?? []), label] })\n } else {\n update({ labels: [label], otherActive: false })\n }\n }\n function pickOther() {\n if (multi) update({ otherActive: !cur?.otherActive })\n else update({ labels: [], otherActive: true })\n }\n\n async function submit() {\n if (!allAnswered || busy) return\n setSubmitting('answer')\n try {\n const answers: Record<string, string> = {}\n questions.forEach((qq, i) => { const s = state[i]; if (s) answers[qq.question] = answerValue(s) })\n await sendPermissionDecision(agentId, approval.id, 'answer', answers)\n } finally { setSubmitting(null) }\n }\n async function dismiss() {\n if (busy) return\n setSubmitting('dismiss')\n try { await sendPermissionDecision(agentId, approval.id, 'deny') } finally { setSubmitting(null) }\n }\n\n const otherActive = Boolean(cur?.otherActive)\n\n return (\n <div className=\"flex justify-start mb-3\">\n <div className=\"w-full max-w-[92%] md:max-w-[78%] rounded-2xl rounded-bl-sm bg-card ring-1 ring-amber-500/35 px-3.5 py-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <MessageCircleQuestion className=\"h-4 w-4 shrink-0 text-amber-400\" />\n <div className=\"text-sm font-medium text-amber-900 dark:text-amber-100\">{approval.title}</div>\n {total > 1 && (\n <Badge variant=\"outline\" className=\"ml-auto h-5 px-1.5 text-[10px] text-muted-foreground\">{step + 1} / {total}</Badge>\n )}\n </div>\n\n <div className=\"mt-3\">\n {q.header && <div className=\"text-[11px] font-semibold uppercase tracking-wide text-amber-700 dark:text-amber-300/80\">{q.header}</div>}\n <div className=\"mt-0.5 text-sm text-foreground whitespace-pre-wrap break-words\">{q.question}</div>\n {multi && <div className=\"mt-0.5 text-[11px] text-muted-foreground\">Select all that apply</div>}\n\n <div className=\"mt-2 flex flex-col gap-1.5\">\n {q.options.map((opt) => {\n const selected = Boolean(cur?.labels.includes(opt.label))\n return (\n <button\n key={opt.label}\n type=\"button\"\n disabled={busy}\n onClick={() => pickOption(opt.label)}\n className={cn(\n 'flex items-start gap-2 rounded-lg border px-2.5 py-2 text-left transition-colors',\n selected ? 'border-amber-500/60 bg-amber-500/10' : 'border-border bg-background/60 hover:bg-background',\n busy && 'opacity-60',\n )}\n >\n <span className={cn(\n 'mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center border text-amber-300',\n multi ? 'rounded' : 'rounded-full',\n selected ? 'border-amber-400 bg-amber-400/20' : 'border-muted-foreground/40',\n )}>\n {selected && <Check className=\"h-3 w-3\" />}\n </span>\n <span className=\"min-w-0\">\n <span className=\"text-sm text-foreground\">{opt.label}</span>\n {opt.description && <span className=\"block text-xs text-muted-foreground\">{opt.description}</span>}\n </span>\n </button>\n )\n })}\n\n <button\n type=\"button\"\n disabled={busy}\n onClick={pickOther}\n className={cn(\n 'flex items-start gap-2 rounded-lg border px-2.5 py-2 text-left transition-colors',\n otherActive ? 'border-amber-500/60 bg-amber-500/10' : 'border-border bg-background/60 hover:bg-background',\n busy && 'opacity-60',\n )}\n >\n <span className={cn(\n 'mt-0.5 flex h-4 w-4 shrink-0 items-center justify-center border text-amber-300',\n multi ? 'rounded' : 'rounded-full',\n otherActive ? 'border-amber-400 bg-amber-400/20' : 'border-muted-foreground/40',\n )}>\n {otherActive && <Check className=\"h-3 w-3\" />}\n </span>\n <span className=\"text-sm text-foreground\">Other…</span>\n </button>\n {otherActive && (\n <Textarea\n autoFocus\n rows={2}\n disabled={busy}\n value={cur?.other ?? ''}\n onChange={(e) => update({ other: e.target.value, otherActive: true })}\n placeholder=\"Type your answer\"\n className=\"mt-1 text-sm\"\n />\n )}\n </div>\n </div>\n\n <div className=\"mt-3 flex items-center gap-1.5\">\n {step > 0 && (\n <Button size=\"sm\" variant=\"outline\" disabled={busy} onClick={() => setStep((s) => s - 1)} className=\"h-7 px-2 text-xs\">\n <ChevronLeft className=\"mr-1 h-3 w-3\" />Back\n </Button>\n )}\n {!isLast ? (\n <Button size=\"sm\" disabled={busy || !answered} onClick={() => setStep((s) => s + 1)} className=\"h-7 px-2 text-xs\">\n Next<ChevronRight className=\"ml-1 h-3 w-3\" />\n </Button>\n ) : (\n <Button size=\"sm\" disabled={busy || !allAnswered} onClick={() => void submit()} className=\"h-7 px-2 text-xs\">\n {submitting === 'answer' && <Loader2 className=\"mr-1.5 h-3 w-3 animate-spin\" />}\n Send answer{total > 1 ? 's' : ''}\n </Button>\n )}\n <Button size=\"sm\" variant=\"ghost\" disabled={busy} onClick={() => void dismiss()} className=\"ml-auto h-7 px-2 text-xs text-muted-foreground\">\n {submitting === 'dismiss' && <Loader2 className=\"mr-1.5 h-3 w-3 animate-spin\" />}\n Dismiss\n </Button>\n </div>\n </div>\n </div>\n )\n}\n","import { useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { ArrowDownToLine, Loader2, MessageSquare } from 'lucide-react'\nimport { Virtuoso, type VirtuosoHandle } from 'react-virtuoso'\nimport { Button } from '@/components/ui/button'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport type { ProviderPendingApproval } from '@/lib/display'\nimport { useRelayStore } from '@/store'\nimport { MessageBubble } from './MessageBubble'\nimport { PermissionRequestBubble } from './AskQuestionForm'\nimport {\n AgentActionEntry,\n ActivityTrace,\n BusyIndicator,\n CreatedMarker,\n DateSeparator,\n ImportedHistoryMarker,\n ImportedMessageBubble,\n InitialPromptBubble,\n NoticePill,\n PromptResolutionRow,\n RelayInjectionRow,\n StatusMarker,\n} from './TraceView'\nimport { type TimelineEntry, resolveTimelineAnchorIndex, timelineEntryAnchor, timelineEntryKey } from './sessionTrace'\nimport { getChatScroll, hydrateChatScroll, setChatScroll } from './chatScrollStore'\nimport { cn } from '@/lib/utils'\n\nconst FIRST_ITEM_INDEX_BASE = 1_000_000\n\n// Per-agent scroll memory, keyed by agentId. The key={agentId} remount (see the note on the\n// Virtuoso element) intentionally gives each agent a clean component instance, which also wipes\n// scroll state — so switching back always snapped to the bottom. The chatScrollStore seam outlives\n// the remount and lets a fresh mount restore whether the user was end-sticky or, if they were\n// reading history, where they left off (#517). It also persists PER USER server-side (#759), so\n// the position survives a full reload / new tab / device switch — the old module-level Map only\n// survived an in-session remount and lost everything on reload.\n// topKey — compatibility key for the entry at the TOP of the viewport.\n// anchorMessageId — durable message id/range for the top row, so restore survives activity\n// grouping, window slicing, and initial-prompt styling changes — never a pixel.\n// offset — px of that row scrolled ABOVE the fold, so restore lands on the exact pixel within\n// the row, not just its top (#676). Both are read from the DOM (the first row whose box\n// crosses the viewport top), NOT from rangeChanged.startIndex — that index is the first\n// OVERSCAN-rendered row (increaseViewportBy renders ~600px ahead), so the old topKey restored\n// ~600px ABOVE where the user actually was. restoreStateFrom was rejected here: it matches\n// measurements by data index, but this list's firstItemIndex is dynamic (prepend handling)\n// and resets on the keyed remount, so the snapshot's indices wouldn't line up.\n\n// Horizontal gutter lives on the ROWS, not the Virtuoso scroller. Virtuoso sizes\n// its inner list to the scroller's padding-box width, so padding on the scroller\n// insets content on the left but is negated on the right — which let justify-end\n// (outbound) bubbles clip against the screen edge. Padding on each row is real.\nconst GUTTER = 'px-3 md:px-4'\n\ninterface TimelineFooterContext {\n agentId: string\n busy: boolean\n pendingApproval?: ProviderPendingApproval\n blockedLabel?: string\n canInterrupt: boolean\n onInterrupt: () => void\n}\n\n// Module-stable component (see footerContext note in VirtualTimeline). Virtuoso reconciles\n// its custom components by function identity, so this MUST NOT be recreated per-render or the\n// pending-approval form it hosts remounts and loses the user's in-progress selection. Dynamic\n// values arrive via Virtuoso's `context` prop. The PermissionRequestBubble is keyed by the\n// approval id so it remounts only on a genuinely new prompt, not on every poll/SSE refresh.\nfunction TimelineFooter({ context }: { context?: TimelineFooterContext }) {\n if (!context) return null\n const { agentId, busy, pendingApproval, blockedLabel, canInterrupt, onInterrupt } = context\n const showBusy = busy && !pendingApproval\n if (!pendingApproval && !showBusy) return null\n // pb gives the busy / approval bubble real breathing room above the composer.\n // A margin on the bubble itself is the scroller's LAST-child margin, which\n // browsers collapse at the scroll end (Safari especially) — so it sat flush\n // against the prompt area. Padding on this wrapper is part of its box and\n // always renders, so scrollHeight (and jump-to-latest) clears the bubble too.\n return (\n <div className={`${GUTTER} pb-3 md:pb-4`}>\n {pendingApproval && <PermissionRequestBubble key={pendingApproval.id} agentId={agentId} approval={pendingApproval} />}\n {showBusy && <BusyIndicator blockedLabel={blockedLabel} onInterrupt={canInterrupt ? onInterrupt : undefined} />}\n </div>\n )\n}\n\ninterface VirtualTimelineProps {\n agentId: string\n agentStatus?: string\n timeline: TimelineEntry[]\n hasMore: boolean\n loading: boolean\n loadedInitial: boolean\n showReasoning: boolean\n pendingApproval?: ProviderPendingApproval\n blockedLabel?: string\n canInterrupt: boolean\n // Chat search (#535): the set of matched row keys (highlighted), the current match key\n // (scrolled into view + emphasized), and whether search is active at all.\n searchActive?: boolean\n searchCurrentKey?: string | null\n searchMatchKeys?: Set<string>\n onAtBottomChange?: (atBottom: boolean) => void\n // Lift the Virtuoso scroller element up to ChatPanel so the pinned \"Last prompt\" banner\n // (StickyPromptBanner, rendered as a sibling above this timeline) can observe it (#545).\n onScrollerRef?: (el: HTMLElement | null) => void\n onLoadOlder: () => void\n onInterrupt: () => void\n onOpenReferencedPath: (path: string, line?: number) => void\n onPreviewReferencedPath: (path: string, line?: number, anchor?: DOMRect) => void\n onPreviewReferencedPathEnd: () => void\n}\n\ninterface TimelineAnchor {\n key: string | null\n index: number\n}\n\nfunction anchorForTimeline(timeline: TimelineEntry[]): TimelineAnchor {\n const anchorIndex = timeline.findIndex((entry) => entry.type !== 'date' && entry.type !== 'created')\n const index = anchorIndex >= 0 ? anchorIndex : 0\n const entry = timeline[index]\n return { key: entry ? timelineEntryKey(entry) : null, index }\n}\n\nfunction usePrependFirstItemIndex(agentId: string, timeline: TimelineEntry[]): number {\n const [firstItemIndex, setFirstItemIndex] = useState(() => FIRST_ITEM_INDEX_BASE - timeline.length)\n const previous = useRef<{ agentId: string; anchor: TimelineAnchor }>({\n agentId,\n anchor: anchorForTimeline(timeline),\n })\n\n useLayoutEffect(() => {\n const nextAnchor = anchorForTimeline(timeline)\n const prev = previous.current\n\n setFirstItemIndex((current) => {\n if (prev.agentId !== agentId) return FIRST_ITEM_INDEX_BASE - timeline.length\n if (!prev.anchor.key) return current\n const anchorIndex = timeline.findIndex((entry) => timelineEntryKey(entry) === prev.anchor.key)\n const prependedRows = anchorIndex - prev.anchor.index\n return prependedRows > 0 ? current - prependedRows : current\n })\n\n previous.current = { agentId, anchor: nextAnchor }\n }, [agentId, timeline])\n\n return firstItemIndex\n}\n\nexport function VirtualTimeline({\n agentId,\n agentStatus,\n timeline,\n hasMore,\n loading,\n loadedInitial,\n showReasoning,\n pendingApproval,\n blockedLabel,\n canInterrupt,\n searchActive,\n searchCurrentKey,\n searchMatchKeys,\n onAtBottomChange,\n onScrollerRef,\n onLoadOlder,\n onInterrupt,\n onOpenReferencedPath,\n onPreviewReferencedPath,\n onPreviewReferencedPathEnd,\n}: VirtualTimelineProps) {\n const virtuosoRef = useRef<VirtuosoHandle>(null)\n const scrollerRef = useRef<HTMLElement | null>(null)\n const [atBottom, setAtBottom] = useState(true)\n // Debounced busy state for the footer. agentStatus flips idle→busy→idle rapidly between an\n // agent's tool/narration steps; the raw value would mount/unmount the busy footer on every\n // flip, and each mount/unmount changes the list height → fires totalListHeightChanged → the\n // pin re-scrolls, so the whole chat \"shakes\" through a turn (#510). Going busy shows the\n // footer immediately (responsive), but going idle lingers briefly so a momentary idle between\n // steps doesn't collapse it — the footer stays a stable height for the whole turn and only\n // settles once when the agent is genuinely done.\n const isBusy = agentStatus === 'busy'\n const [stableBusy, setStableBusy] = useState(isBusy)\n useLayoutEffect(() => {\n if (isBusy) {\n setStableBusy(true)\n return\n }\n const timer = setTimeout(() => setStableBusy(false), 600)\n return () => clearTimeout(timer)\n }, [isBusy])\n const firstItemIndex = usePrependFirstItemIndex(agentId, timeline)\n const latestEntry = timeline.length > 0 ? timeline[timeline.length - 1]! : null\n const latestKey = latestEntry ? timelineEntryKey(latestEntry) : null\n // The newest tail entry is the user's OWN just-sent prompt. When you send, you always want\n // to see your prompt (and the response that follows) regardless of where you had scrolled —\n // so this re-arms the stick and forces the settle pin even if you were reading history.\n const latestIsOwnPrompt = (latestEntry?.type === 'message' || latestEntry?.type === 'initial-prompt') && latestEntry.msg.from === HUMAN_AGENT_ID\n\n // Scroll-memory plumbing (#517/#676). Refs let the capture below stay a stable callback while\n // reading the live timeline + firstItemIndex (the rendered rows carry a data-item-index in the\n // firstItemIndex-offset space, so the data-array index is data-item-index - firstItemIndex).\n const timelineRef = useRef(timeline)\n timelineRef.current = timeline\n const loadingRef = useRef(loading)\n loadingRef.current = loading\n const loadedInitialRef = useRef(loadedInitial)\n loadedInitialRef.current = loadedInitial\n const firstItemIndexRef = useRef(firstItemIndex)\n firstItemIndexRef.current = firstItemIndex\n // agentId for the EAGER saves below — the scroll callbacks are stable, so they read the live\n // agent from a ref instead of closing over a stale prop.\n const agentIdRef = useRef(agentId)\n agentIdRef.current = agentId\n\n // Capture the reading position straight from the DOM (#676): the first rendered row whose box\n // crosses the viewport top is the real visible top — immune to the increaseViewportBy overscan\n // that polluted the old rangeChanged.startIndex. getBoundingClientRect forces layout, so this is\n // rAF-coalesced and the caller only fires it while reading history (stick released); the sticky\n // case restores to the bottom and never needs it.\n //\n // We write the result straight to agentScrollMemory (EAGER), not via an unmount-cleanup save.\n // The cleanup approach loses the position under React StrictMode: its dev mount→unmount→remount\n // cycle runs the cleanup with freshly-initialised refs and overwrites the real reading position\n // with a reset {stick:true} — the latent reason #517's restore never held in dev. Eager saves\n // are keyed to the live agent and only fire on a genuine reading scroll, so a throwaway remount\n // never clobbers them.\n const captureScheduledRef = useRef(false)\n const captureReadingPosition = useCallback(() => {\n if (captureScheduledRef.current) return\n captureScheduledRef.current = true\n requestAnimationFrame(() => {\n captureScheduledRef.current = false\n const el = scrollerRef.current\n if (!el) return\n const viewportTop = el.getBoundingClientRect().top\n const rows = Array.from(el.querySelectorAll<HTMLElement>('[data-item-index]'))\n for (const row of rows) {\n const rect = row.getBoundingClientRect()\n if (rect.bottom > viewportTop + 1) {\n const idx = Number(row.getAttribute('data-item-index')) - firstItemIndexRef.current\n const entry = timelineRef.current[idx]\n const anchor = entry ? timelineEntryAnchor(entry) : null\n setChatScroll(agentIdRef.current, {\n stick: false,\n topKey: entry ? timelineEntryKey(entry) : null,\n ...(anchor ? { anchorMessageId: anchor.messageId, anchorEndMessageId: anchor.endMessageId } : {}),\n offset: Math.max(0, Math.round(viewportTop - rect.top)),\n })\n return\n }\n }\n })\n }, [])\n // Compute the initial top-most data index ONCE per mount. If the user was reading history,\n // start Virtuoso at the saved row (no bottom-snap flicker on the cached path); otherwise the\n // usual \"start at the last item\". Resolved against the timeline present at first render — for\n // an uncached chat the row may not be loaded yet, so the restore effect retries on arrival.\n const initialTopIndexRef = useRef<number | null>(null)\n if (initialTopIndexRef.current === null) {\n const saved = getChatScroll(agentId)\n let idx = -1\n if (saved && !saved.stick && (saved.topKey || saved.anchorMessageId !== undefined)) {\n idx = resolveTimelineAnchorIndex(timeline, {\n topKey: saved.topKey,\n messageId: saved.anchorMessageId,\n endMessageId: saved.anchorEndMessageId,\n })\n }\n initialTopIndexRef.current = idx >= 0 ? idx : Math.max(0, timeline.length - 1)\n }\n\n const lastSeenAtBottomKey = useRef<string | null>(latestKey)\n const previousAgentId = useRef(agentId)\n if (previousAgentId.current !== agentId) {\n previousAgentId.current = agentId\n lastSeenAtBottomKey.current = latestKey\n }\n const lastSeenIndex = lastSeenAtBottomKey.current\n ? timeline.findIndex((entry) => timelineEntryKey(entry) === lastSeenAtBottomKey.current)\n : -1\n // Count only what the AGENT sent — your own outbound prompt is appended to the\n // tail too, but it isn't \"new\" to you, so counting it made the badge tick up the\n // instant you hit send. Outbound = from HUMAN_AGENT_ID. Notice pills don't count.\n const newTailCount = !atBottom && lastSeenIndex >= 0\n ? timeline.slice(lastSeenIndex + 1).filter((entry) => entry.type === 'message' && entry.msg.from !== HUMAN_AGENT_ID).length\n : 0\n\n useLayoutEffect(() => {\n if (atBottom) lastSeenAtBottomKey.current = latestKey\n }, [atBottom, latestKey])\n\n // Read at-bottom live without making it an effect dependency: the settle below\n // must fire on NEW tail content, not when you happen to scroll near the bottom\n // (which would yank away the atBottomThreshold slack and feel grabby).\n const atBottomRef = useRef(atBottom)\n atBottomRef.current = atBottom\n\n // \"Stick to bottom\" INTENT — gates the settle pin AND followOutput. Starts true per\n // mount (opening a chat shows its latest), and the key={agentId} remount resets it true\n // on every switch. It must NOT be Virtuoso's atBottom state: during a fresh mount the\n // content renders in stages and momentarily leaves us at the TOP (atBottom flips false),\n // which would suppress the very pin that should drive us to the bottom — the exact reason\n // the loop never ran and the tail stayed clipped. It is instead driven by a real-scroll\n // detector (see setScrollerRef): a genuine USER scroll-up releases it, reaching the bottom\n // re-arms it. Crucially it is NOT released by atBottom flipping false, because an in-place\n // row growth (streaming Codex/Claude activity, async Shiki/image/font) flips atBottom false\n // on the same tick it grows — indistinguishable from a scroll-up — and that false release\n // was the #515 jump-to-end-while-scrolled-up bug. hasPinnedRef tracks whether the initial\n // settle has reached the bottom once (used only inside pinToBottom's loop).\n // Initial stick intent is restored from per-agent scroll memory (#517): if the user left this\n // chat reading history, switching back stays unstuck (and the restore effect below returns\n // them to their row) instead of snapping to the bottom. Defaults to true for a never-seen chat.\n const stickToBottomRef = useRef(getChatScroll(agentId)?.stick ?? true)\n const hasPinnedRef = useRef(false)\n\n // Reading-restore convergence state (#690). restoreActiveRef is true while the convergent\n // restore loop is running (mirrors pinToBottom for the non-sticky path) — it suppresses\n // captureReadingPosition so the loop's OWN programmatic re-pins never overwrite the saved\n // anchor mid-converge. cancelRestoreRef holds the loop's stop function; the real-scroll\n // detector calls it the instant the user takes over (or reaches the bottom) so the loop\n // never fights a real gesture — the same releaseToRead infra that releases the bottom stick.\n const restoreActiveRef = useRef(false)\n const cancelRestoreRef = useRef<(() => void) | null>(null)\n\n // Real-scroll detector state (see setScrollerRef). lastScrollTopRef tracks the previous\n // scrollTop so we can read scroll DIRECTION; programmaticUntilRef marks a short window\n // after our own programmatic scrolls (pins, footer nudges) so they never masquerade as a\n // user scroll-up and release the stick. markProgrammatic is called by every code path that\n // scrolls the list itself.\n const lastScrollTopRef = useRef(0)\n const programmaticUntilRef = useRef(0)\n const markProgrammatic = useCallback(() => {\n programmaticUntilRef.current = performance.now() + 150\n }, [])\n\n // Convergent bottom pin — the ONE routine shared by the agent-switch/append\n // settle and the manual jump button. Off-screen rows are only height-ESTIMATED,\n // so a bare scrollTo(scrollHeight) from far up under-shoots: the real (taller)\n // heights only land as rows render mid-scroll, stranding you mid-conversation.\n // Worst on a fresh key={agentId} mount (agent switch) with tall, height-variable\n // Codex activity rows — those measure LAZILY, so the content height keeps GROWING\n // for several frames after the scroll. A fixed 2-frame settle (the prior fix)\n // stopped before that growth finished and undershot; Claude's shorter rows happen\n // to converge inside 2 frames, which is why it only rouletted on Codex chats.\n //\n // ONE scrollToIndex up front forces Virtuoso to render+measure the true tail — needed\n // when jumping from far up (the manual button), where the last rows aren't in the\n // rendered window and a bare scrollTo(scrollHeight) would target an under-estimated\n // height. Then hard-pin to scrollHeight every frame for the whole settle window.\n //\n // Why pin EVERY frame to a time cap instead of detecting convergence and exiting\n // early: on a fresh key={agentId} mount Virtuoso does a one-time async scroll-anchor\n // reposition that lands the tail ~50px SHORT of the true bottom, and it happens a\n // handful of frames AFTER the size estimate has already gone stable. So ANY early\n // exit — whether it watches scrollHeight stability (the prior fix's trap, and my\n // first pass) or even live position — can declare victory in ~30ms and quit before\n // that late reposition fires, leaving the last message clipped with nothing left to\n // correct it (verified live: the loop ended at dist≈0, then Virtuoso pulled it to 56\n // and it stuck). Re-pinning every frame across the full window simply OVERWRITES that\n // reposition the frame after it happens; the last frame before the cap lands us at\n // the true bottom, and once the mount settles a scrollTo holds there (verified). The\n // cap also guarantees it can never spin forever. scrollToIndex is NOT repeated in the\n // loop — its align:'end' rests ~50px short on a still-settling estimate and re-queues\n // that position each frame, FIGHTING the scrollTo. Always 'auto' (instant): a 'smooth'\n // scroll re-armed each frame never completes and re-arms the streaming jitter we\n // fixed. scrollHeight includes the Footer (busy / pending-approval bubble renders\n // inside the scroller), so the pin clears it too. The big-distance bail respects a\n // user who deliberately flings up mid-window (a reposition is only tens of px, a real\n // scroll is hundreds) without aborting the jump-from-far-up button (whose up-front\n // scrollTo already brought us near the bottom before the loop's first frame). Returns\n // a cleanup that cancels the in-flight loop so a rapid re-fire (streaming tail\n // appends, or a fast double agent-switch) replaces the previous loop, not stacks it.\n const pinToBottom = useCallback(() => {\n markProgrammatic()\n virtuosoRef.current?.scrollToIndex({ index: 'LAST', align: 'end' })\n const MAX_MS = 800\n const USER_SCROLL_BAIL = 300\n const AT_BOTTOM = 64\n const start = performance.now()\n let raf = 0\n let cancelled = false\n let reachedBottom = false\n const step = () => {\n if (cancelled) return\n // A genuine user scroll-up (wheel / touch-drag, see setScrollerRef) releases the stick\n // mid-settle — bail the instant they start reading so the settle can never yank the view\n // back down (#676, the iOS jump-while-reading). Safe through mount churn: stick is released\n // ONLY by a real user gesture, never by reflow or an atBottom flip, so the loop still runs\n // to completion on a fresh switch where the user isn't touching anything.\n if (!stickToBottomRef.current) return\n // Re-read the scroller EVERY frame, never abort on a null one. On a key={agentId}\n // remount with cached data this routine fires (settle effect) BEFORE Virtuoso has\n // mounted its scroller, so scrollerRef is still null on the first frame(s) — the\n // old early `if (!el) return` meant the whole pin silently no-opped on remounts\n // and the tail sat clipped. Spinning until the scroller appears (within the window)\n // and pinning from then on fixes it; the first mount only ever worked because async\n // data load happened to delay this past the scroller mount.\n const el = scrollerRef.current\n if (el) {\n const dist = el.scrollHeight - el.clientHeight - el.scrollTop\n // \"At bottom\" only COUNTS once the conversation has actually loaded — i.e. there\n // is real scrollable content. A chat opens on an empty placeholder whose\n // scrollHeight == clientHeight (zero scroll range): the loop sees dist 0 there and\n // would mark hasPinned, but that's the bottom of NOTHING. Then the real content\n // explodes in, atBottom flips false, and a premature hasPinned releases the stick\n // (misread as a user scroll-up) — leaving the tail clipped on ~40% of switches.\n const hasContent = el.scrollHeight - el.clientHeight > AT_BOTTOM\n if (dist <= AT_BOTTOM && hasContent) {\n reachedBottom = true\n hasPinnedRef.current = true\n }\n // Bail only on a LARGE distance AFTER we've actually pinned to loaded content —\n // that's a user scrolling up. Before then a large distance is just mount churn\n // (content rendering in stages leaves us far from the bottom); bailing there would\n // re-introduce the clipped tail.\n if (reachedBottom && dist > USER_SCROLL_BAIL) return\n markProgrammatic()\n el.scrollTo({ top: el.scrollHeight, behavior: 'auto' })\n }\n if (performance.now() - start > MAX_MS) return\n raf = requestAnimationFrame(step)\n }\n raf = requestAnimationFrame(step)\n return () => {\n cancelled = true\n cancelAnimationFrame(raf)\n }\n }, [markProgrammatic])\n\n // Pin to the measured bottom whenever the tail changes while we're sticking to it:\n // a fresh agent message, your own sent prompt, OR a fresh key={agentId} mount on\n // agent switch (where this effect's first run IS the mount). followOutput /\n // initialTopMostItemIndex only pin to the ESTIMATED height, then the real (taller)\n // content renders and the true bottom drops below the fold — worst on a Codex switch\n // with tall activity rows, which stranded you mid-conversation. pinToBottom drives to\n // the bottom and re-pins across the settle window until lazy measurement finishes.\n // Gated on stickToBottomRef, NOT atBottomRef: on a switch the content renders in\n // stages and atBottom briefly reads false (we're momentarily at the top), which used\n // to suppress this pin entirely on ~30% of switches and leave the tail clipped. stick\n // stays true through that churn and only releases on a genuine user scroll-up (see its\n // note + handleAtBottomChange). Keyed on latestKey only — and latestKey is the turn's\n // FIRST step, so in-place streaming growth doesn't retrigger it; only a genuinely new\n // tail entry (or an agent switch) does. The cleanup cancels an in-flight settle loop.\n useLayoutEffect(() => {\n // Sending your own prompt always re-arms the stick: you want to watch your prompt and the\n // ensuing response land, even if you had scrolled up reading history (#514). The settle\n // loop runs across the layout window, so the prompt is in view by the time it finishes,\n // and the response — a later, separate latestKey change — re-pins while still stuck.\n if (latestIsOwnPrompt) {\n stickToBottomRef.current = true\n // Sending re-arms the stick; persist it through the same seam (#759) so the conversation\n // re-opens pinned, not relying on the post-pin onScroll side channel to write it.\n setChatScroll(agentIdRef.current, { stick: true, topKey: null, offset: 0 })\n }\n if (!stickToBottomRef.current) return\n return pinToBottom()\n }, [latestKey, latestIsOwnPrompt, pinToBottom])\n\n // Restore the saved read position on mount, CONVERGENTLY (#690). initialTopMostItemIndex\n // already starts the chat at the saved ROW (no bottom-snap flicker); this effect refines it to\n // the exact PIXEL by re-aligning the row to the viewport top plus the saved within-row offset.\n // Only runs when the saved state was \"reading history\" (not sticky); the sticky case is driven\n // by the pin settle effect above. Mount-only by design.\n //\n // Why a loop, not the old single-shot (#690 root cause): a one-shot scrollToIndex fires the\n // moment the target row exists, but Virtuoso computes that scroll from height ESTIMATES for the\n // off-screen rows ABOVE the anchor — and those are too short, because Shiki highlighting\n // (code-preview.tsx) + image loads (MessageBubble.tsx) + lazy markdown haven't expanded yet.\n // After the one-shot fires, those rows grow, push the anchor down, and the viewport lands ~1/3\n // up with no re-correction. Bottom mode never had this bug because pinToBottom is a convergent\n // rAF loop. This mirrors that: re-apply scrollToIndex to the SAME saved anchor every frame\n // across an ~800ms settle window. Re-applying is safe and self-correcting — scrollToIndex\n // recomputes from CURRENTLY-MEASURED heights, so each frame re-lands on the true anchor as rows\n // above finish growing. We re-RESOLVE the key (not a cached index) every frame, so a load-older\n // prepend shifting firstItemIndex mid-restore can't desync the target (the earlier reason a\n // re-asserting attempt was rejected — it corrected by a stale index). The loop hard-stops the\n // instant the user scrolls (cancelRestoreRef, wired into the real-scroll detector) so it never\n // fights a real gesture. Hydration and uncached chat loads are asynchronous, so waiting for the\n // row is data/settle-based: retry while the initial load is pending, then give up only after the\n // loaded content height has gone stable (with a long safety cap). Convergence time is still\n // measured from FIRST resolve.\n useLayoutEffect(() => {\n let cleanupRestore: (() => void) | null = null\n let effectCancelled = false\n void hydrateChatScroll().then(() => {\n if (effectCancelled) return\n const saved = getChatScroll(agentIdRef.current)\n if (!saved || saved.stick || (!saved.topKey && saved.anchorMessageId === undefined)) return\n // We are restoring a reading position, so we are NOT sticky — assert it here too (#759).\n // On a fresh tab/device, hydration can complete after first render; this converges the live\n // stick ref with the hydrated non-sticky state before any tail update can follow to bottom.\n stickToBottomRef.current = false\n const target = { topKey: saved.topKey, messageId: saved.anchorMessageId, endMessageId: saved.anchorEndMessageId }\n const offset = saved.offset\n const SETTLE_MS = 800\n const STABLE_UNRESOLVED_MS = 1200\n const MAX_UNRESOLVED_MS = 30_000\n let raf = 0\n let cancelled = false\n let resolvedAt = 0\n let lastHeight = -1\n let stableSince = 0\n const start = performance.now()\n restoreActiveRef.current = true\n const finish = () => {\n cancelled = true\n cancelAnimationFrame(raf)\n restoreActiveRef.current = false\n if (cancelRestoreRef.current === finish) cancelRestoreRef.current = null\n }\n cleanupRestore = finish\n cancelRestoreRef.current = finish\n const step = () => {\n if (cancelled) return\n const idx = resolveTimelineAnchorIndex(timelineRef.current, target)\n const now = performance.now()\n if (idx >= 0) {\n if (resolvedAt === 0) resolvedAt = now\n markProgrammatic()\n virtuosoRef.current?.scrollToIndex({ index: idx, align: 'start', offset })\n }\n if (resolvedAt === 0) {\n const el = scrollerRef.current\n const height = el ? el.scrollHeight : timelineRef.current.length\n const waitingForInitialData = loadingRef.current || !loadedInitialRef.current || timelineRef.current.length === 0\n if (waitingForInitialData || height !== lastHeight) {\n lastHeight = height\n stableSince = waitingForInitialData ? 0 : now\n }\n const stableEnough = stableSince > 0 && now - stableSince >= STABLE_UNRESOLVED_MS\n const overSafetyCap = now - start >= MAX_UNRESOLVED_MS\n if (!stableEnough && !overSafetyCap) raf = requestAnimationFrame(step)\n else finish()\n return\n }\n if (now - resolvedAt < SETTLE_MS) raf = requestAnimationFrame(step)\n else finish()\n }\n raf = requestAnimationFrame(step)\n })\n return () => {\n effectCancelled = true\n cleanupRestore?.()\n }\n }, [markProgrammatic])\n\n // The Footer (busy bubble / pending approval) renders BELOW the last data item, and\n // followOutput / totalListHeightChanged only react to DATA rows — the footer is neither, so\n // when it first appears nothing scrolls and the agent can silently look idle (#512). Nudge to\n // the true bottom on appearance, gated on the stick INTENT (not Virtuoso's atBottom, which is\n // unreliable during the churn around a status flip and left the indicator clipped). After\n // sending a prompt the stick is armed (#514), so the busy indicator that follows reliably\n // scrolls in; once the user has scrolled up the stick is clear and we leave them put (#515).\n // A retry across a short window covers the footer mounting a frame or two after the status\n // flip. Keyed on the footer's PRESENCE (status + approval id, never the approval object which\n // is rebuilt every poll) so it fires once on appearance, not on every refresh.\n const approvalId = pendingApproval?.id\n useLayoutEffect(() => {\n if (!stableBusy && !approvalId) return\n if (!stickToBottomRef.current) return\n let raf = 0\n const start = performance.now()\n const nudge = () => {\n const el = scrollerRef.current\n if (el && stickToBottomRef.current) {\n // Only act while there's a real gap below the fold. Re-arming a scroll every frame\n // once we're already at the bottom is wasteful and a re-armed smooth scroll never\n // settles — instant pinning of just the small footer gap reads fine and converges.\n const dist = el.scrollHeight - el.clientHeight - el.scrollTop\n if (dist > 2) {\n markProgrammatic()\n el.scrollTo({ top: el.scrollHeight, behavior: 'auto' })\n }\n }\n if (performance.now() - start < 300) raf = requestAnimationFrame(nudge)\n }\n raf = requestAnimationFrame(nudge)\n return () => cancelAnimationFrame(raf)\n }, [stableBusy, approvalId, markProgrammatic])\n\n // Scroll the current search match into view (#535). User-driven: fires only when the\n // selected match key changes (typing re-anchors to the first match; prev/next move it).\n // Releasing the stick keeps the bottom-pin from immediately yanking the view back down,\n // and markProgrammatic stops this scroll from reading back as a user scroll-up. centre\n // alignment puts the match mid-viewport so surrounding context is visible.\n useLayoutEffect(() => {\n if (!searchActive || !searchCurrentKey) return\n const idx = timelineRef.current.findIndex((entry) => timelineEntryKey(entry) === searchCurrentKey)\n if (idx < 0) return\n stickToBottomRef.current = false\n markProgrammatic()\n virtuosoRef.current?.scrollToIndex({ index: idx, align: 'center' })\n }, [searchActive, searchCurrentKey, markProgrammatic])\n\n // The real-scroll detector lives on the scroller element. A native 'scroll' listener fires\n // for EVERY scroll cause (wheel, touch, scrollbar drag, keyboard) so it captures user intent\n // regardless of input method. We read DIRECTION + position: reaching the bottom re-arms the\n // stick; a genuine user scroll-up away from the bottom releases it. Scrolls WE trigger (pins,\n // footer nudges) are flagged via markProgrammatic and never release the stick — that is what\n // distinguishes a real scroll-up from a programmatic reposition or an in-place growth's\n // scroll-anchor adjustment, the corruption that the old atBottom-derived release suffered.\n const detachScrollDetectorRef = useRef<(() => void) | null>(null)\n const setScrollerRef = useCallback((ref: HTMLElement | Window | null) => {\n const el = ref instanceof HTMLElement ? ref : null\n scrollerRef.current = el\n onScrollerRef?.(el)\n detachScrollDetectorRef.current?.()\n detachScrollDetectorRef.current = null\n if (!el) return\n lastScrollTopRef.current = el.scrollTop\n // Release the stick on genuine user scroll-INTENT, UNCONDITIONALLY — ignoring the programmatic\n // window (#676). This is the iOS jump-while-reading fix: while an agent streams, pinToBottom /\n // totalListHeightChanged re-mark the programmatic window every frame, so the position-only\n // detector below could never see a \"real\" scroll-up — every user scroll read as programmatic\n // and the view kept yanking back to the bottom. wheel and touchmove are emitted ONLY by the\n // user (a programmatic scrollTo never fires them), so they are unambiguous intent and always\n // win. The bottom re-arm in onScroll still runs after, so a tiny nudge that stays within 64px\n // of the bottom keeps following — only a real move up makes the release stick.\n const releaseToRead = () => {\n stickToBottomRef.current = false\n // A real gesture wins: stop any convergent reading-restore loop so it never yanks the view\n // back to the saved anchor while the user is actively scrolling (#690).\n cancelRestoreRef.current?.()\n }\n const onScroll = () => {\n const top = el.scrollTop\n const dist = el.scrollHeight - el.clientHeight - top\n const programmatic = performance.now() < programmaticUntilRef.current\n if (dist <= 64) {\n // Reaching the bottom re-arms the stick AND clears any saved reading position (#676), so a\n // return opens at the latest instead of restoring an offset the user has scrolled past.\n if (!restoreActiveRef.current) {\n if (!stickToBottomRef.current) setChatScroll(agentIdRef.current, { stick: true, topKey: null, offset: 0 })\n stickToBottomRef.current = true\n // At the bottom there is no anchor to converge on — stop the restore loop (#690).\n cancelRestoreRef.current?.()\n }\n } else if (!programmatic && top < lastScrollTopRef.current - 1) {\n // Scrollbar-drag / keyboard scroll-up (which emit no wheel/touch) still release here.\n stickToBottomRef.current = false\n cancelRestoreRef.current?.()\n }\n lastScrollTopRef.current = top\n // Capture the live position while reading so a return restores the exact offset (#676).\n // Suppressed while the restore loop is converging: its own programmatic re-pins would\n // otherwise overwrite the saved anchor with a not-yet-settled position (#690).\n if (!stickToBottomRef.current && !restoreActiveRef.current) captureReadingPosition()\n }\n const onWheel = (event: WheelEvent) => {\n // Any wheel during a reading-restore is the user taking over — cancel convergence (#690).\n cancelRestoreRef.current?.()\n if (event.deltaY < 0) releaseToRead()\n }\n let touchStartY = 0\n const onTouchStart = (event: TouchEvent) => {\n touchStartY = event.touches[0]?.clientY ?? 0\n }\n const onTouchMove = (event: TouchEvent) => {\n const dy = (event.touches[0]?.clientY ?? 0) - touchStartY\n // Any real finger drag cancels a reading-restore (#690); a small threshold ignores tap jitter.\n if (Math.abs(dy) > 6) cancelRestoreRef.current?.()\n // Finger dragging DOWN (clientY increasing) scrolls content UP toward older messages = the\n // user reading history. A small threshold ignores tap jitter.\n if (dy > 6) releaseToRead()\n }\n el.addEventListener('scroll', onScroll, { passive: true })\n el.addEventListener('wheel', onWheel, { passive: true })\n el.addEventListener('touchstart', onTouchStart, { passive: true })\n el.addEventListener('touchmove', onTouchMove, { passive: true })\n detachScrollDetectorRef.current = () => {\n el.removeEventListener('scroll', onScroll)\n el.removeEventListener('wheel', onWheel)\n el.removeEventListener('touchstart', onTouchStart)\n el.removeEventListener('touchmove', onTouchMove)\n }\n }, [onScrollerRef, captureReadingPosition])\n\n const handleAtBottomChange = useCallback((bottom: boolean) => {\n setAtBottom(bottom)\n // Re-arm the stick when Virtuoso confirms we're at the bottom (belt-and-suspenders with\n // the scroll detector). We deliberately do NOT release the stick here on bottom=false:\n // an in-place row growth flips atBottom false on the same tick it grows, which is\n // indistinguishable from a user scroll-up at this layer and caused the #515 jump. Release\n // is owned solely by the real-scroll detector (setScrollerRef), which reads scroll\n // direction and ignores our own programmatic scrolls.\n //\n // BUT suppress the re-arm while a reading-restore is converging (#759). On a fresh\n // tab/device the per-user position hydrates from the server ASYNCHRONOUSLY, so it can land\n // after first render — when it does, initialTopMostItemIndex has already defaulted to the\n // bottom, so Virtuoso mounts AT the bottom and fires bottom=true here BEFORE the restore loop\n // scrolls up to the saved row. Without this guard that transient bottom re-armed the stick to\n // true, clobbering the restore's stick=false, and the next tail message followed to the bottom\n // and yanked the reader off their restored position (caught live, not in any unit test). The\n // restore loop owns the position while it runs; a genuine user scroll-to-bottom (restore not\n // active) still re-arms exactly as before.\n if (bottom && !restoreActiveRef.current) stickToBottomRef.current = true\n onAtBottomChange?.(bottom)\n }, [onAtBottomChange])\n\n const handleStartReached = useCallback(() => {\n if (!hasMore || loading) return\n onLoadOlder()\n }, [hasMore, loading, onLoadOlder])\n\n const jumpToLatest = useCallback(() => {\n lastSeenAtBottomKey.current = latestKey\n // Same convergent pin as the settle effect. The button can land far up a tall\n // Codex chat where lazy measurement is heaviest, so it needs the converge-to-\n // settled-height loop exactly as much as the agent switch does (iPad Safari first\n // exposed the undershoot here; Android's continuous re-measure on manual drag hid\n // it). Instant, not smooth: a per-frame re-armed smooth scroll never completes on\n // growing content — the convergent snap is the robust choice and reads fine.\n stickToBottomRef.current = true\n // Converge \"Latest\" onto the SAME persisted sticky state as a manual scroll-to-bottom (#759).\n // Previously this only flipped the live ref and leaned on the onScroll bottom-reach side channel\n // to write the sticky flag through — but if the view was already within the at-bottom threshold,\n // pinToBottom's scrollTo never moved the element, no `scroll` event fired, and the stored state\n // stayed the stale {stick:false} from the prior reading scroll. So \"Latest\" looked sticky in the\n // moment but re-opened un-stuck. Writing through the seam here makes the two paths identical and\n // persists the intent immediately, independent of whether a scroll event happens to fire.\n setChatScroll(agentId, { stick: true, topKey: null, offset: 0 })\n pinToBottom()\n }, [agentId, latestKey, pinToBottom])\n\n const Header = useMemo(() => {\n return function TimelineHeader() {\n return (\n <div className={GUTTER}>\n <TimelineStartMarker hasMore={hasMore} loading={loading} loadedInitial={loadedInitial} hasItems={timeline.length > 0} />\n </div>\n )\n }\n }, [hasMore, loadedInitial, loading, timeline])\n\n // Keep the Footer component identity module-stable (TimelineFooter) and pass the dynamic\n // values through Virtuoso's context. pendingApproval gets a fresh object reference on every\n // poll/SSE refresh (providerPendingApproval rebuilds it, no upstream memo); recreating the\n // Footer closure on that churn made Virtuoso remount the approval form and discard the user's\n // selection ~1s after they clicked. Context updates re-render the footer without remounting.\n const footerContext = useMemo<TimelineFooterContext>(\n () => ({ agentId, busy: stableBusy, pendingApproval, blockedLabel, canInterrupt, onInterrupt }),\n [agentId, stableBusy, blockedLabel, canInterrupt, onInterrupt, pendingApproval],\n )\n\n const EmptyPlaceholder = useMemo(() => {\n return function TimelineEmptyPlaceholder() {\n return (\n <div className=\"flex h-full flex-col items-center justify-center text-center\">\n {loading ? <Loader2 className=\"mb-2 h-5 w-5 animate-spin text-muted-foreground\" /> : <MessageSquare className=\"mb-2 h-8 w-8 text-zinc-600\" />}\n <p className=\"text-xs text-muted-foreground\">{loading ? 'Loading messages' : 'No messages yet'}</p>\n </div>\n )\n }\n }, [loading])\n\n const components = useMemo(() => ({ Header, Footer: TimelineFooter, EmptyPlaceholder }), [EmptyPlaceholder, Header])\n\n return (\n <div className=\"relative min-h-0 flex-1\">\n {/*\n key={agentId} is KEPT (not swapped for a mounted-Virtuoso + scrollToIndex-on-switch).\n Each agent's timeline is entirely different data with per-agent computeItemKeys, so a\n mounted instance reuses zero measurement cache across a switch anyway — the only thing\n keeping it mounted would buy is avoiding the remount, at the cost of having to manually\n reset scroll position, firstItemIndex anchoring, and atBottom state on every agentId\n change (cross-agent state bleed is exactly the kind of bug this view has fought before).\n The remount gives a clean slate for free; the roulette was never the remount, it was the\n fixed-frame settle — now convergent (pinToBottom), which makes the clean-mount path solid.\n */}\n <Virtuoso\n key={agentId}\n ref={virtuosoRef}\n scrollerRef={setScrollerRef}\n className=\"h-full py-3 md:py-4\"\n // Clip horizontal overflow so a bubble can never make the chat scroll sideways past\n // the screen edge. Virtuoso only sets overflowY inline, so this takes effect; code\n // blocks/tables already scroll internally, so nothing meaningful is clipped.\n // Horizontal padding is on the rows (GUTTER), not here — see GUTTER note above.\n // overscrollBehavior contain stops iOS Safari's rubber-band overscroll at the\n // top/bottom from chaining to the page and bouncing back — that bounce fought\n // Virtuoso's programmatic positioning at the bottom (the \"vibrating\" jitter).\n style={{ height: '100%', overflowX: 'hidden', overscrollBehavior: 'contain' }}\n context={footerContext}\n data={timeline}\n firstItemIndex={firstItemIndex}\n // Restored read position for a cached chat (#517) — defaults to the last item (bottom).\n // The mount restore effect (#676) refines this to the exact within-row pixel offset.\n initialTopMostItemIndex={initialTopIndexRef.current ?? Math.max(0, timeline.length - 1)}\n computeItemKey={(_, entry) => timelineEntryKey(entry)}\n itemContent={(index, entry) => {\n // Search highlight is applied at the ROW level (a ring around the matched\n // content), never inside the message renderer — keeps formatted-body untouched\n // while still flagging every hit and emphasizing the current one.\n const key = searchActive ? timelineEntryKey(entry) : ''\n const isMatch = searchActive && searchMatchKeys?.has(key)\n const isCurrent = isMatch && key === searchCurrentKey\n // Avatar grouping (#420 Tier B): show on the LAST bubble of a consecutive same-sender\n // run so the avatar anchors visually to the newest message in the run (iMessage style).\n // Compare against the next entry's sender — a different sender (or a non-message next\n // entry) ends the run and the avatar appears on this bubble.\n const dataIndex = index - firstItemIndex\n const msgSender = (entry.type === 'message' || entry.type === 'initial-prompt') ? entry.msg.from : null\n const nextEntry = timeline[dataIndex + 1]\n const nextSender = (nextEntry?.type === 'message' || nextEntry?.type === 'initial-prompt') ? nextEntry.msg.from : null\n const showAvatar = msgSender !== null && msgSender !== nextSender\n return (\n <div className={GUTTER}>\n <div\n className={cn(\n isMatch && 'rounded-xl ring-1 ring-amber-400/40 transition-shadow',\n isCurrent && 'ring-2 ring-amber-400 bg-amber-400/5',\n )}\n >\n <TimelineRow\n entry={entry}\n agentId={agentId}\n showReasoning={showReasoning}\n showAvatar={showAvatar}\n onOpenReferencedPath={onOpenReferencedPath}\n onPreviewReferencedPath={onPreviewReferencedPath}\n onPreviewReferencedPathEnd={onPreviewReferencedPathEnd}\n />\n </div>\n </div>\n )\n }}\n components={components}\n startReached={handleStartReached}\n atBottomStateChange={handleAtBottomChange}\n atBottomThreshold={64}\n // Driven by the stick INTENT, not Virtuoso's momentary isAtBottom. isAtBottom is\n // corrupted the instant a tall entry appends or grows (it flips false on the same tick\n // the new content lands, before the follow scroll runs), which intermittently dropped\n // the follow and left a fresh message/activity-step/status entry just below the fold —\n // exactly the \"not reliably sticky\" gap #518 targets. stickToBottomRef stays true\n // through that churn (released only by a genuine user scroll-up via the detector), so\n // every appended entry type follows into view while at the bottom, and none follows\n // once the user has scrolled up.\n //\n // 'auto' (instant), NOT 'smooth': react-virtuoso documents that a smooth follow\n // animation can't keep up with rapidly appended content — each new chunk restarts\n // the animation. On iOS Safari that perpetual programmatic scroll fought OS momentum\n // and pinned the layer in a low-res composited state (the \"vibrating + blurry\" bug).\n // Instant pinning settles each frame, so the layer rasterizes sharp and stays put.\n followOutput={() => (stickToBottomRef.current ? 'auto' : false)}\n // followOutput only reacts to item APPENDS — not to an existing row growing\n // taller after mount (async Shiki syntax-highlight / image load / web-font swap,\n // common in tall Codex activity rows). When that late growth lands while we're\n // at the bottom, the true bottom drops below the fold and nothing follows it —\n // this is the residual ~50–90px clip that survived every fixed-window settle:\n // the growth can finish just past any time cap, and the prior fix's 2-frame\n // settle never even looked this late. totalListHeightChanged fires from Virtuoso\n // on EVERY measured-height change, so re-pinning here catches late growth at any\n // time, with no arbitrary window.\n //\n // Gated on the stick INTENT (the real-scroll detector keeps it correct through\n // growth — see stickToBottomRef) AND a small distance. The distance check stays as a\n // second guard so even with stick true we only re-pin a growth-sized drop, never a\n // large jump. Previously this was gated on distance ALONE (≤240px), which yanked a\n // user who had scrolled up only 64–240px to the bottom on every streaming step — the\n // #515 jump-while-scrolled-up bug. With the intent gate, a deliberate scroll-up clears\n // the stick and these height changes leave the viewport untouched; at the bottom the\n // stick stays armed and late growth still scrolls into view. The own scrollTo is\n // flagged programmatic so it can't feed back into the detector as a scroll-up.\n totalListHeightChanged={() => {\n if (!stickToBottomRef.current) return\n const el = scrollerRef.current\n if (!el) return\n const dist = el.scrollHeight - el.clientHeight - el.scrollTop\n if (dist >= 0 && dist <= 240) {\n markProgrammatic()\n el.scrollTo({ top: el.scrollHeight, behavior: 'auto' })\n }\n }}\n increaseViewportBy={{ top: 600, bottom: 600 }}\n />\n {!atBottom && timeline.length > 0 && (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"secondary\"\n className=\"absolute bottom-3 right-4 z-20 h-8 gap-1.5 rounded-full border border-border/70 bg-background/95 px-3 text-xs shadow-lg backdrop-blur\"\n onClick={jumpToLatest}\n >\n <ArrowDownToLine className=\"h-3.5 w-3.5\" />\n Latest\n {newTailCount > 0 && (\n <span className=\"ml-0.5 min-w-4 rounded-full bg-primary px-1.5 py-0.5 text-[10px] font-medium leading-none text-primary-foreground\">\n {newTailCount > 99 ? '99+' : newTailCount}\n </span>\n )}\n </Button>\n )}\n </div>\n )\n}\n\nfunction TimelineStartMarker({ hasMore, loading, loadedInitial, hasItems }: { hasMore: boolean; loading: boolean; loadedInitial: boolean; hasItems: boolean }) {\n if (loading) {\n return (\n <div className=\"flex items-center justify-center gap-2 pb-3 text-xs text-muted-foreground\">\n <Loader2 className=\"h-3.5 w-3.5 animate-spin\" />\n <span>Loading earlier messages</span>\n </div>\n )\n }\n if (!hasMore && loadedInitial && hasItems) {\n return (\n <div className=\"flex items-center justify-center gap-2 pb-3 text-xs text-muted-foreground/70\">\n <div className=\"h-px flex-1 bg-border\" />\n <span>Beginning of conversation</span>\n <div className=\"h-px flex-1 bg-border\" />\n </div>\n )\n }\n return null\n}\n\nfunction TimelineRow({\n entry,\n agentId,\n showReasoning,\n showAvatar,\n onOpenReferencedPath,\n onPreviewReferencedPath,\n onPreviewReferencedPathEnd,\n}: {\n entry: TimelineEntry\n agentId: string\n showReasoning: boolean\n showAvatar: boolean\n onOpenReferencedPath: (path: string, line?: number) => void\n onPreviewReferencedPath: (path: string, line?: number, anchor?: DOMRect) => void\n onPreviewReferencedPathEnd: () => void\n}) {\n // Per-project #NNN linkify (#533): the conversation peer's resolved project repo, shared\n // across all non-MessageBubble rows (MessageBubble resolves it itself from `peer`).\n const issueRepo = useRelayStore((s) => s.agentsById[agentId]?.issueRepo)\n if (entry.type === 'message') {\n return (\n <MessageBubble\n msg={entry.msg}\n peer={agentId}\n showAvatar={showAvatar}\n onOpenReferencedPath={onOpenReferencedPath}\n onPreviewReferencedPath={onPreviewReferencedPath}\n onPreviewReferencedPathEnd={onPreviewReferencedPathEnd}\n />\n )\n }\n if (entry.type === 'initial-prompt') return <InitialPromptBubble msg={entry.msg} issueRepo={issueRepo} />\n if (entry.type === 'notice') return <NoticePill msg={entry.msg} />\n if (entry.type === 'relay-injection') return <RelayInjectionRow entry={entry} />\n if (entry.type === 'prompt-resolution') return <PromptResolutionRow entry={entry} />\n if (entry.type === 'agent-action') return <AgentActionEntry entry={entry} />\n if (entry.type === 'activity') return <ActivityTrace steps={entry.steps} showReasoning={showReasoning} issueRepo={issueRepo} />\n if (entry.type === 'import-boundary') return <ImportedHistoryMarker history={entry.history} />\n if (entry.type === 'imported-message') return <ImportedMessageBubble entry={entry.entry} sourceLabel={entry.history.sourceAgentLabel || entry.history.sourcePeerId} issueRepo={issueRepo} />\n if (entry.type === 'status') return <StatusMarker event={entry.event} />\n if (entry.type === 'date') return <DateSeparator date={entry.date} />\n return <CreatedMarker timestamp={entry.timestamp} />\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport {\n ArrowLeft,\n CircleStop,\n Download,\n Eraser,\n Flag,\n FolderOpen,\n GitFork,\n MailOpen,\n MailX,\n MessageSquare,\n Minimize2,\n MoreHorizontal,\n Power,\n Terminal,\n Volume2,\n VolumeX,\n X,\n} from 'lucide-react'\nimport { useAgentTerminal } from '@/hooks/use-agent-terminal'\nimport { useRelayStore, useNow } from '@/store'\nimport { AgentRuntimeChips, ContextRing } from '@/components/shared/agent-runtime-summary'\nimport { AgentTypeIcon } from '@/components/shared/agent-type-icon'\nimport { BranchStateBadge } from '@/components/shared/branch-state-badge'\nimport { CopyButton } from '@/components/shared/copy-button'\nimport { StatusDot } from '@/components/shared/status-dot'\nimport { TerminalDialog } from '@/components/shared/terminal-viewer'\nimport { DirectoryContent, FileContent } from '@/components/views/files'\nimport { Badge } from '@/components/ui/badge'\nimport { Button } from '@/components/ui/button'\nimport { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuSeparator, DropdownMenuTrigger } from '@/components/ui/dropdown-menu'\nimport { api, apiUpload } from '@/lib/api'\nimport { providerSlashCommands } from '@/lib/slash-commands'\nimport type { SlashCommand } from '@/lib/slash-commands'\nimport { micAvailable, PttRecorder, transcribeClip, voiceTts } from '@/lib/voice'\nimport {\n agentSupportsControlAction,\n displayName,\n isReactionEventMessage,\n messageBody,\n messageMatchesAgentChat,\n providerBlockedState,\n shortPath,\n toTimestamp,\n} from '@/lib/display'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\nimport type { Artifact, AttachmentRef, FileStatResult, InboxThread, Message } from '@/types'\nimport { cn } from '@/lib/utils'\nimport { ChatHeader } from './ChatHeader'\nimport { ChatSearchBar } from './ChatSearchBar'\nimport { Composer } from './Composer'\nimport { FloatingFilePreview } from './FilePreview'\nimport type { PendingAttachment, ReferencedPathInfo } from './types'\nimport {\n chatTimestamp,\n orchestratorForFilePreview,\n parentPath,\n revokePendingAttachmentUrls,\n resolveChatPlanContext,\n supportsSideFilePreview,\n} from './helpers'\nimport { buildTimeline } from './sessionTrace'\nimport { useAgentStatusEvents } from './hooks/useAgentStatusEvents'\nimport { useBackNavProtection } from './hooks/useBackNavProtection'\nimport { useChatSearch } from './hooks/useChatSearch'\nimport { usePresenceHeartbeat } from './hooks/usePresenceHeartbeat'\nimport { PlanGraphPanel, SessionTasksPanel } from './PlanGraphPanel'\nimport { StickyPromptBanner } from './TraceView'\nimport { VirtualTimeline } from './VirtualTimeline'\n\nconst NO_THREAD_HISTORY: Message[] = []\n\n// A human prompt can be captured twice: as a live-session mirror echo\n// (kind:\"session\", type:\"prompt\") and as the relay chat message (kind:\"chat\", from\n// the human). They carry different ids so mergeListById never dedups them. Drop the\n// session echo when a matching human chat message exists — keeping the chat message,\n// which carries delivery/read receipts — so only one prompt bubble renders (#520).\nconst PROMPT_DEDUP_WINDOW_MS = 15_000\n\nfunction isSessionPromptEcho(msg: Message): boolean {\n return msg.kind === 'session' && (msg.payload?.session as { type?: string } | undefined)?.type === 'prompt'\n}\n\nfunction dedupePromptEcho(messages: Message[]): Message[] {\n const humanPrompts = messages.filter((m) => m.kind === 'chat' && m.from === HUMAN_AGENT_ID)\n if (!humanPrompts.length) return messages\n return messages.filter((m) => {\n if (!isSessionPromptEcho(m) || m.from !== HUMAN_AGENT_ID) return true\n const body = messageBody(m).trim()\n if (!body) return true\n const ts = toTimestamp(m.createdAt)\n return !humanPrompts.some((chat) =>\n messageBody(chat).trim() === body && Math.abs(toTimestamp(chat.createdAt) - ts) <= PROMPT_DEDUP_WINDOW_MS\n )\n })\n}\n\nexport function ChatPanel({ threads, onBack, showBackButton }: { threads: InboxThread[]; onBack?: () => void; showBackButton?: boolean }) {\n const selectedInboxThread = useRelayStore((s) => s.selectedInboxThread)\n const agent = useRelayStore((s) => s.selectedInboxThread ? s.agentsById[s.selectedInboxThread] : undefined) || null\n const inboxDrafts = useRelayStore((s) => s.inboxDrafts)\n const now = useNow()\n const sendChatMessage = useRelayStore((s) => s.sendChatMessage)\n const openFilesAt = useRelayStore((s) => s.openFilesAt)\n const openFilesForAgent = useRelayStore((s) => s.openFilesForAgent)\n const openAgentDetail = useRelayStore((s) => s.openAgentDetail)\n const chatSending = useRelayStore((s) => s.chatSending)\n const markInboxThreadRead = useRelayStore((s) => s.markInboxThreadRead)\n const markInboxThreadUnread = useRelayStore((s) => s.markInboxThreadUnread)\n const setReplyDraft = useRelayStore((s) => s.setReplyDraft)\n const exportThread = useRelayStore((s) => s.exportThread)\n const doAgentAction = useRelayStore((s) => s.doAgentAction)\n const workspaceAction = useRelayStore((s) => s.workspaceAction)\n const openWorkspaceFocus = useRelayStore((s) => s.openWorkspaceFocus)\n const forkFromAgent = useRelayStore((s) => s.forkFromAgent)\n const chatHistoryImports = useRelayStore((s) => s.chatHistoryImports)\n const agentChatWindow = useRelayStore((s) => s.agentChatByAgent[s.selectedInboxThread])\n const agentChatMessages = agentChatWindow?.messages ?? NO_THREAD_HISTORY\n const loadOlder = useRelayStore((s) => s.loadOlder)\n const openConfirm = useRelayStore((s) => s.openConfirm)\n const showError = useRelayStore((s) => s.showError)\n const orchestrators = useRelayStore((s) => s.orchestrators)\n const fetchOrchestrators = useRelayStore((s) => s.fetchOrchestrators)\n const showReasoning = useRelayStore((s) => s.showReasoning)\n const voiceTtsEnabled = useRelayStore((s) => s.voiceTtsEnabled)\n const setVoiceTtsEnabled = useRelayStore((s) => s.setVoiceTtsEnabled)\n const voiceInputMode = useRelayStore((s) => s.voiceInputMode)\n const plansByThread = useRelayStore((s) => s.plansByThread)\n\n const fileInputRef = useRef<HTMLInputElement>(null)\n const pttRecorderRef = useRef<PttRecorder | null>(null)\n const [micState, setMicState] = useState<'idle' | 'recording' | 'transcribing'>('idle')\n const pendingAttachmentsRef = useRef<PendingAttachment[]>([])\n const [pendingAttachments, setPendingAttachments] = useState<PendingAttachment[]>([])\n const [dragActive, setDragActive] = useState(false)\n const [filePreview, setFilePreview] = useState<{ orchestratorId: string; path: string; line: number; type: ReferencedPathInfo['type'] } | null>(null)\n const [floatingPreview, setFloatingPreview] = useState<{ orchestratorId: string; path: string; line: number; type: ReferencedPathInfo['type']; anchor: DOMRect } | null>(null)\n const [filePreviewError, setFilePreviewError] = useState('')\n const filePreviewCloseTimer = useRef<number | null>(null)\n const filePreviewRequest = useRef(0)\n // The Virtuoso scroller element, lifted from VirtualTimeline so the pinned \"Last prompt\"\n // banner (rendered above the timeline) can observe whether the prompt is on-screen (#545).\n const [chatScroller, setChatScroller] = useState<HTMLElement | null>(null)\n const statusEvents = useAgentStatusEvents(selectedInboxThread)\n\n const thread = useMemo(\n () => threads.find((t) => t.peer === selectedInboxThread) || null,\n [threads, selectedInboxThread]\n )\n\n const threadMessages = useMemo(() => {\n const ordered = agentChatMessages\n .filter((message) => messageMatchesAgentChat(selectedInboxThread, message) && !isReactionEventMessage(message))\n .sort((a, b) => a.id - b.id)\n return dedupePromptEcho(ordered)\n }, [agentChatMessages, selectedInboxThread])\n\n // Pre-session-destroy window (#183): the agent is running end-of-session work before a\n // compact/clear/restart/shutdown and is intentionally non-addressable. Block the composer\n // so a message can't be fired into a session that's tearing down.\n const agentFinalizing = typeof agent?.meta?.lifecycleAction === 'string' && agent.meta.lifecycleAction.startsWith('finalizing-')\n const { terminalOpen, terminalTarget, terminalOpening, openTerminal: handleOpenTerminal, closeTerminal: handleCloseTerminal } = useAgentTerminal(agent?.id)\n const agentSpawnRequestId = typeof agent?.meta?.spawnRequestId === 'string' ? agent.meta.spawnRequestId as string : ''\n const importedHistory = useMemo(() => {\n return chatHistoryImports.filter((history) =>\n history.targetAgentId === selectedInboxThread ||\n Boolean(agentSpawnRequestId && history.targetSpawnRequestId === agentSpawnRequestId)\n )\n }, [agentSpawnRequestId, chatHistoryImports, selectedInboxThread])\n const blockedState = providerBlockedState(agent)\n const pendingApproval = blockedState?.pendingApproval\n const chatThread = useMemo(() => {\n if (!selectedInboxThread) return null\n if (!thread && threadMessages.length === 0) return null\n const lastMessage = threadMessages[threadMessages.length - 1] ?? thread?.lastMessage ?? null\n const previewMessage = thread?.previewMessage && threadMessages.some((message) => message.id === thread.previewMessage?.id)\n ? thread.previewMessage\n : lastMessage\n return {\n id: thread?.id ?? selectedInboxThread,\n peer: selectedInboxThread,\n messages: threadMessages,\n lastMessage,\n previewMessage,\n attention: thread?.attention ?? { unread: 0, needsHumanResponse: false, score: 0 },\n archived: thread?.archived ?? false,\n draft: thread?.draft ?? '',\n }\n }, [selectedInboxThread, thread, threadMessages])\n const exportableThread = chatThread || (importedHistory.length > 0 ? { peer: selectedInboxThread, messages: [], importedHistory } : null)\n const draft = inboxDrafts[selectedInboxThread] || ''\n\n const tmuxSession = typeof agent?.meta?.tmuxSession === 'string' && (agent.meta.tmuxSession as string).trim() ? agent.meta.tmuxSession as string : null\n const termOrch = tmuxSession ? orchestrators.find((o) => (o as any).managedAgents?.some((m: any) => m.agentId === agent!.id || m.tmuxSession === tmuxSession)) ?? null : null\n const canReadTerminal = Boolean(tmuxSession && termOrch?.status === 'online' && agent?.providerCapabilities?.terminal?.live?.read)\n const canWriteTerminal = Boolean(canReadTerminal && agent?.providerCapabilities?.terminal?.live?.write)\n const canAttachTerminal = agent?.providerCapabilities?.terminal?.attach?.create === true\n const canOpenTerminal = canReadTerminal || canAttachTerminal\n const canCompact = agentSupportsControlAction(agent, 'compact')\n const canClearContext = agentSupportsControlAction(agent, 'clearContext')\n const canShutdown = agentSupportsControlAction(agent, 'shutdown')\n const canInterrupt = agentSupportsControlAction(agent, 'interrupt')\n const interruptAgent = () => { if (agent) void doAgentAction(agent, 'interrupt') }\n\n // Slash-command palette (item 6). Derived purely from the draft during render —\n // no effect syncs it. slashClosed lets Escape dismiss until the draft changes.\n const [slashIndex, setSlashIndex] = useState(0)\n const [slashClosed, setSlashClosed] = useState(false)\n const slashEnabled = agent?.providerCapabilities?.liveSession?.slashCommands === true\n const slashProvider = agent?.providerCapabilities?.model?.provider ?? (typeof agent?.meta?.provider === 'string' ? agent.meta.provider : undefined)\n const slashMatches = (slashEnabled && !slashClosed && /^\\/\\S*$/.test(draft))\n ? providerSlashCommands(slashProvider).filter((c) => c.name.toLowerCase().startsWith(draft.toLowerCase()))\n : []\n const slashActiveIndex = slashMatches.length ? Math.min(slashIndex, slashMatches.length - 1) : 0\n function acceptSlash(cmd: SlashCommand) {\n setReplyDraft(selectedInboxThread, `${cmd.name} `)\n setSlashIndex(0)\n }\n function handleDraftChange(value: string) {\n setReplyDraft(selectedInboxThread, value)\n if (slashClosed) setSlashClosed(false)\n setSlashIndex(0)\n }\n const hasPendingUploads = pendingAttachments.some((item) => item.uploading)\n const readyAttachments = pendingAttachments.filter((item) => item.artifact)\n const hasDraft = draft.trim().length > 0 || pendingAttachments.length > 0\n\n // Broadcast our viewer presence on this agent thread (#390): \"I'm viewing / typing\".\n usePresenceHeartbeat(agent?.id ?? '', draft.trim().length > 0)\n\n // Back navigation protection when draft exists\n const handleBackNav = useCallback(() => {\n // Don't navigate away — the draft is protected\n }, [])\n useBackNavProtection(hasDraft, handleBackNav)\n\n pendingAttachmentsRef.current = pendingAttachments\n\n useEffect(() => {\n return () => {\n revokePendingAttachmentUrls(pendingAttachmentsRef.current)\n }\n }, [])\n\n useEffect(() => {\n if (agent?.meta?.tmuxSession && orchestrators.length === 0) void fetchOrchestrators()\n }, [agent?.id, agent?.meta?.tmuxSession, orchestrators.length])\n\n useEffect(() => {\n return () => {\n if (filePreviewCloseTimer.current !== null) window.clearTimeout(filePreviewCloseTimer.current)\n }\n }, [])\n\n const spawnedById = typeof agent?.spawnedBy === 'string' ? agent.spawnedBy : undefined\n const spawnedByProvider = useRelayStore((s) => spawnedById ? (s.agentsById[spawnedById]?.meta?.provider as string | undefined) : undefined)\n const initialPromptComplete = Boolean(agentChatWindow?.loadedInitial && !agentChatWindow.hasMore)\n const timeline = useMemo(\n () => buildTimeline(threadMessages, statusEvents, agent?.createdAt, importedHistory, { ...(spawnedById ? { spawnedBy: { agentId: spawnedById, provider: spawnedByProvider } } : {}), initialPromptComplete }),\n [threadMessages, statusEvents, agent?.createdAt, importedHistory, spawnedById, spawnedByProvider, initialPromptComplete]\n )\n const planContext = useMemo(() => {\n return resolveChatPlanContext(agent, threadMessages, chatThread?.lastMessage, plansByThread)\n }, [agent, chatThread?.lastMessage, plansByThread, threadMessages])\n\n const search = useChatSearch(timeline)\n\n const loadOlderForSelectedAgent = useCallback(() => {\n if (!selectedInboxThread || !agentChatWindow?.hasMore || agentChatWindow.loading) return\n void loadOlder(selectedInboxThread)\n }, [agentChatWindow?.hasMore, agentChatWindow?.loading, loadOlder, selectedInboxThread])\n\n const clearFilePreviewCloseTimer = useCallback(() => {\n if (filePreviewCloseTimer.current === null) return\n window.clearTimeout(filePreviewCloseTimer.current)\n filePreviewCloseTimer.current = null\n }, [])\n\n const resolveReferencedFile = useCallback(async (path: string): Promise<ReferencedPathInfo | null> => {\n const orchestrator = orchestratorForFilePreview(orchestrators, path)\n if (!orchestrator) return null\n try {\n const stat = await api<FileStatResult>('GET', `/orchestrators/${encodeURIComponent(orchestrator.id)}/files/stat?path=${encodeURIComponent(path)}`)\n return { orchestratorId: orchestrator.id, path: stat.path, type: stat.type }\n } catch {\n return null\n }\n }, [orchestrators])\n\n // Hover shows a lightweight floating preview anchored to the link — it does\n // not reflow the chat, so the link stays under the cursor.\n const previewReferencedFile = useCallback((path: string, line?: number, anchor?: DOMRect) => {\n if (!supportsSideFilePreview() || !anchor) return\n const request = ++filePreviewRequest.current\n void resolveReferencedFile(path).then((info) => {\n if (filePreviewRequest.current !== request) return\n if (!info) return\n clearFilePreviewCloseTimer()\n setFloatingPreview({ ...info, line: line || 0, anchor })\n setFilePreviewError('')\n })\n }, [clearFilePreviewCloseTimer, resolveReferencedFile])\n\n const scheduleCloseReferencedFilePreview = useCallback(() => {\n filePreviewRequest.current += 1\n clearFilePreviewCloseTimer()\n filePreviewCloseTimer.current = window.setTimeout(() => {\n setFloatingPreview(null)\n }, 250)\n }, [clearFilePreviewCloseTimer])\n\n // Clicking the link commits to the side panel — and dismisses the floating\n // preview so the two never show at once.\n const openReferencedFile = useCallback((path: string, line?: number) => {\n void resolveReferencedFile(path).then((info) => {\n if (!info) {\n showError('File Not Found', path)\n return\n }\n if (supportsSideFilePreview()) {\n filePreviewRequest.current += 1\n clearFilePreviewCloseTimer()\n setFloatingPreview(null)\n setFilePreview({ ...info, line: line || 0 })\n setFilePreviewError('')\n return\n }\n if (info.type === 'directory') void openFilesAt({ orchestratorId: info.orchestratorId, path: info.path, overlay: true })\n else void openFilesAt({ orchestratorId: info.orchestratorId, path: parentPath(info.path), selectedPath: info.path, line, overlay: true })\n })\n }, [clearFilePreviewCloseTimer, openFilesAt, resolveReferencedFile, showError])\n\n function closeFilePreview() {\n setFilePreview(null)\n setFilePreviewError('')\n }\n async function uploadFiles(files: FileList | File[]) {\n const list = Array.from(files).filter((file) => file.size > 0)\n if (!list.length) return\n const pending = list.map((file): PendingAttachment => ({\n id: `${Date.now()}-${file.name}-${Math.random().toString(16).slice(2)}`,\n fileName: file.name,\n size: file.size,\n previewUrl: file.type.startsWith('image/') ? URL.createObjectURL(file) : undefined,\n uploading: true,\n }))\n setPendingAttachments((current) => [...current, ...pending])\n\n for (let i = 0; i < list.length; i += 1) {\n const file = list[i]!\n const item = pending[i]!\n try {\n const artifact = await apiUpload<Artifact>('/artifacts', file, {\n filename: file.name,\n sensitivity: 'normal',\n })\n setPendingAttachments((current) => current.map((entry) => entry.id === item.id ? { ...entry, artifact, uploading: false } : entry))\n } catch (e) {\n setPendingAttachments((current) => current.map((entry) => entry.id === item.id ? { ...entry, error: (e as Error).message, uploading: false } : entry))\n }\n }\n }\n\n function removePendingAttachment(id: string) {\n setPendingAttachments((current) => {\n const item = current.find((entry) => entry.id === id)\n if (item?.previewUrl) URL.revokeObjectURL(item.previewUrl)\n return current.filter((entry) => entry.id !== id)\n })\n }\n\n function clearPendingAttachments() {\n revokePendingAttachmentUrls(pendingAttachments)\n setPendingAttachments([])\n }\n\n function handleSend() {\n if ((!draft.trim() && readyAttachments.length === 0) || !selectedInboxThread || chatSending || hasPendingUploads || agentFinalizing) return\n const attachments = readyAttachments.map((item): AttachmentRef => ({\n artifactId: item.artifact!.id,\n kind: item.artifact!.kind,\n role: 'media',\n title: item.artifact!.filename || item.fileName,\n }))\n sendChatMessage(draft, { peer: selectedInboxThread, lastMessage: chatThread?.lastMessage || null }, attachments)\n clearPendingAttachments()\n }\n\n function handleKeyDown(e: React.KeyboardEvent<HTMLTextAreaElement>) {\n if (slashMatches.length) {\n if (e.key === 'ArrowDown') { e.preventDefault(); setSlashIndex((i) => Math.min(i + 1, slashMatches.length - 1)); return }\n if (e.key === 'ArrowUp') { e.preventDefault(); setSlashIndex((i) => Math.max(i - 1, 0)); return }\n if (e.key === 'Escape') { e.preventDefault(); setSlashClosed(true); return }\n if (e.key === 'Enter' || e.key === 'Tab') { e.preventDefault(); const cmd = slashMatches[slashActiveIndex]; if (cmd) acceptSlash(cmd); return }\n }\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n handleSend()\n }\n }\n\n function handlePaste(e: React.ClipboardEvent<HTMLTextAreaElement>) {\n const files = Array.from(e.clipboardData.files).filter((file) => file.type.startsWith('image/'))\n if (!files.length) return\n e.preventDefault()\n void uploadFiles(files)\n }\n\n // Push-to-talk. Two behaviours (Settings → Voice input):\n // 'compose' — transcribe into the composer (review, then Enter). The default.\n // 'autosend' — transcribe and send to the agent immediately, hands-light loop.\n async function startPtt() {\n if (!micAvailable || micState !== 'idle' || !selectedInboxThread) return\n voiceTts.bargeIn() // stop any speech while the user talks\n const recorder = new PttRecorder()\n try {\n await recorder.start()\n pttRecorderRef.current = recorder\n setMicState('recording')\n } catch (e) {\n pttRecorderRef.current = null\n setMicState('idle')\n showError('Microphone unavailable', (e as Error)?.message || 'Could not access the microphone.')\n }\n }\n\n async function stopPtt() {\n const recorder = pttRecorderRef.current\n if (!recorder || micState !== 'recording') return\n pttRecorderRef.current = null\n setMicState('transcribing')\n try {\n const clip = await recorder.stop()\n if (!clip) return\n const text = await transcribeClip(clip)\n if (!text) return\n const combined = draft ? `${draft} ${text}` : text\n if (voiceInputMode === 'autosend' && !chatSending && !hasPendingUploads) {\n // Speak-and-send: skip the composer, fire it straight at the agent. The\n // reply auto-speaks (voiceTts.onResponse) and you hold to talk again.\n const attachments = readyAttachments.map((item): AttachmentRef => ({\n artifactId: item.artifact!.id,\n kind: item.artifact!.kind,\n role: 'media',\n title: item.artifact!.filename || item.fileName,\n }))\n sendChatMessage(combined, { peer: selectedInboxThread, lastMessage: chatThread?.lastMessage || null }, attachments)\n clearPendingAttachments()\n } else {\n setReplyDraft(selectedInboxThread, combined)\n }\n } catch (e) {\n showError('Transcription failed', (e as Error)?.message || 'Could not transcribe audio.')\n } finally {\n setMicState('idle')\n }\n }\n\n if (!selectedInboxThread) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full text-center px-4\">\n <MessageSquare className=\"w-12 h-12 text-zinc-600 mb-3\" />\n <p className=\"text-muted-foreground text-sm\">Select an agent to start chatting</p>\n </div>\n )\n }\n\n return (\n <>\n <div className=\"flex h-full min-w-0\">\n <div className=\"@container/chat flex h-full min-w-0 flex-1 flex-col\">\n <ChatHeader\n selectedInboxThread={selectedInboxThread}\n agent={agent}\n now={now}\n blockedState={blockedState}\n thread={chatThread}\n exportableThread={exportableThread}\n importedHistory={importedHistory}\n showBackButton={showBackButton}\n onBack={onBack}\n openAgentDetail={openAgentDetail}\n openWorkspaceFocus={openWorkspaceFocus}\n voiceTtsEnabled={voiceTtsEnabled}\n setVoiceTtsEnabled={setVoiceTtsEnabled}\n canOpenTerminal={canOpenTerminal}\n terminalOpening={terminalOpening}\n handleOpenTerminal={handleOpenTerminal}\n canInterrupt={canInterrupt}\n interruptAgent={interruptAgent}\n canCompact={canCompact}\n canClearContext={canClearContext}\n canShutdown={canShutdown}\n openConfirm={openConfirm}\n workspaceAction={workspaceAction}\n doAgentAction={doAgentAction}\n openFilesForAgent={openFilesForAgent}\n forkFromAgent={forkFromAgent}\n markInboxThreadUnread={markInboxThreadUnread}\n markInboxThreadRead={markInboxThreadRead}\n exportThread={exportThread}\n onOpenSearch={search.openSearch}\n />\n\n {/* Timeline */}\n <PlanGraphPanel\n threadId={planContext && 'threadId' in planContext ? planContext.threadId : null}\n teamId={planContext && 'teamId' in planContext ? planContext.teamId : undefined}\n channel={planContext?.channel}\n />\n {selectedInboxThread && <SessionTasksPanel agentId={selectedInboxThread} />}\n {search.open && (\n <ChatSearchBar\n query={search.query}\n position={search.position}\n total={search.total}\n onQueryChange={search.setQuery}\n onNext={search.next}\n onPrev={search.prev}\n onClose={search.close}\n />\n )}\n {/* Pinned \"Last prompt\" reminder — same shrink-0 sibling mechanism as the search bar,\n so it stays above the conversation instead of scrolling away (#545). */}\n <StickyPromptBanner scrollEl={chatScroller} timeline={timeline} />\n <VirtualTimeline\n agentId={selectedInboxThread}\n agentStatus={agent?.status}\n timeline={timeline}\n hasMore={agentChatWindow?.hasMore ?? false}\n loading={agentChatWindow?.loading ?? false}\n loadedInitial={agentChatWindow?.loadedInitial ?? false}\n showReasoning={showReasoning}\n pendingApproval={pendingApproval}\n blockedLabel={blockedState?.label}\n canInterrupt={canInterrupt}\n searchActive={search.open}\n searchCurrentKey={search.currentKey}\n searchMatchKeys={search.matchKeySet}\n onScrollerRef={setChatScroller}\n onLoadOlder={loadOlderForSelectedAgent}\n onInterrupt={interruptAgent}\n onOpenReferencedPath={openReferencedFile}\n onPreviewReferencedPath={previewReferencedFile}\n onPreviewReferencedPathEnd={scheduleCloseReferencedFilePreview}\n />\n\n <Composer\n draft={draft}\n placeholder={`Message ${agent ? displayName(agent) : selectedInboxThread}…`}\n chatSending={chatSending}\n disabled={agentFinalizing}\n hasPendingUploads={hasPendingUploads}\n readyAttachmentCount={readyAttachments.length}\n pendingAttachments={pendingAttachments}\n micAvailable={micAvailable}\n micState={micState}\n slashMatches={slashMatches}\n slashActiveIndex={slashActiveIndex}\n onDraftChange={handleDraftChange}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onUploadFiles={(files) => { void uploadFiles(files) }}\n onRemovePendingAttachment={removePendingAttachment}\n onSend={handleSend}\n onAcceptSlash={acceptSlash}\n onSlashHover={setSlashIndex}\n onStartPtt={() => { void startPtt() }}\n onStopPtt={() => { void stopPtt() }}\n footerText={agentFinalizing\n ? `${agent ? displayName(agent) : 'Agent'} is wrapping up (${(agent?.meta?.lifecycleAction as string).slice('finalizing-'.length)}) — messaging paused`\n : 'Enter to send · Shift+Enter for newline'}\n />\n </div>\n {filePreview && (\n <aside\n className=\"hidden h-full w-[min(44vw,720px)] min-w-[360px] shrink-0 flex-col border-l border-border bg-background xl:flex\"\n >\n <div className=\"flex h-10 shrink-0 items-center gap-2 border-b border-border px-3\">\n <span className=\"min-w-0 flex-1 text-xs font-medium text-muted-foreground\">File preview</span>\n {filePreviewError && <span className=\"max-w-[18rem] truncate text-xs text-red-400\">{filePreviewError}</span>}\n <Button variant=\"ghost\" size=\"icon-sm\" title=\"Close preview\" onClick={closeFilePreview}>\n <X className=\"h-3.5 w-3.5\" />\n </Button>\n </div>\n <div className=\"min-h-0 flex-1\">\n {filePreview.type === 'directory' ? (\n <DirectoryContent\n orchestratorId={filePreview.orchestratorId}\n selectedPath={filePreview.path}\n onReadError={setFilePreviewError}\n />\n ) : (\n <FileContent\n orchestratorId={filePreview.orchestratorId}\n selectedPath={filePreview.path}\n line={filePreview.line}\n onReadError={setFilePreviewError}\n />\n )}\n </div>\n </aside>\n )}\n </div>\n {floatingPreview && (\n <FloatingFilePreview\n preview={floatingPreview}\n error={filePreviewError}\n onReadError={setFilePreviewError}\n onMouseEnter={clearFilePreviewCloseTimer}\n onMouseLeave={scheduleCloseReferencedFilePreview}\n />\n )}\n {terminalTarget && (\n <TerminalDialog open={terminalOpen} onOpenChange={handleCloseTerminal} orchestratorId={terminalTarget.orchestratorId} session={terminalTarget.session} interactive={terminalTarget.interactive || canWriteTerminal} canWrite={canWriteTerminal} />\n )}\n </>\n )\n}\n","\nimport { useEffect } from 'react'\nimport { useRelayStore } from '@/store'\nimport { HUMAN_AGENT_ID } from '@/lib/constants'\n\nexport function useDraftCleanup() {\n const inboxDrafts = useRelayStore((s) => s.inboxDrafts)\n const agentsById = useRelayStore((s) => s.agentsById)\n const set = useRelayStore((s) => s.set)\n\n useEffect(() => {\n const draftPeers = Object.keys(inboxDrafts)\n if (draftPeers.length === 0) return\n\n const stale = draftPeers.filter((peer) => !agentsById[peer] && peer !== HUMAN_AGENT_ID)\n if (stale.length === 0) return\n\n // Only clean up if the agent has been gone for a reasonable time (check on mount only)\n const timer = setTimeout(() => {\n const currentAgents = useRelayStore.getState().agentsById\n const next = { ...useRelayStore.getState().inboxDrafts }\n let changed = false\n for (const peer of stale) {\n if (!currentAgents[peer]) {\n delete next[peer]\n changed = true\n }\n }\n if (changed) set({ inboxDrafts: next })\n }, 30_000) // 30s grace period before purging\n\n return () => clearTimeout(timer)\n }, [])\n}\n","\nimport { useEffect } from 'react'\n\n// While a chat is open on mobile (single-pane: list OR conversation), push a\n// browser-history entry so the Android system back button / swipe-back gesture\n// returns to the conversation list instead of leaving the dashboard. Drafts are\n// stored per-thread (server + store), so closing back to the list never loses\n// unsent input — there is nothing to guard against here.\n//\n// Desktop (list + conversation side by side) is excluded: there is no\n// list/conversation toggle to back out of, and pushing an entry would change\n// the meaning of browser-back. The existing draft guard (useBackNavProtection)\n// owns desktop back behavior.\nexport function useMobileChatHistory(open: boolean, onBack: () => void) {\n useEffect(() => {\n if (typeof window === 'undefined' || !open) return\n if (!window.matchMedia('(max-width: 767px)').matches) return\n\n window.history.pushState({ chatOpen: true }, '')\n\n function handlePopState(e: PopStateEvent) {\n // An inner overlay (sheet/dialog) closing pops its own guard entry and\n // lands back on this {chatOpen:true} entry — that's not a real back press,\n // so don't navigate to the list. A genuine back press lands on whatever\n // was below the chat guard, which never has chatOpen set.\n if (e.state?.chatOpen) return\n onBack()\n }\n window.addEventListener('popstate', handlePopState)\n\n return () => {\n window.removeEventListener('popstate', handlePopState)\n // Closed via the in-app back arrow rather than the system back button:\n // our pushed entry is still on top, so consume it to keep the stack clean.\n if (window.history.state?.chatOpen) window.history.back()\n }\n }, [open, onBack])\n}\n","\nimport { useCallback, useEffect } from 'react'\nimport { useKeyboardViewportHeight } from '@/hooks/use-keyboard-viewport'\nimport { useAllInboxThreads } from '@/hooks/use-selectors'\nimport { useRelayStore } from '@/store'\nimport { AgentListPanel } from './AgentListPanel'\nimport { ChatPanel } from './ChatPanel'\nimport { useDraftCleanup } from './hooks/useDraftCleanup'\nimport { useIsMobile } from './hooks/useIsMobile'\nimport { useMobileChatHistory } from './hooks/useMobileChatHistory'\n\nexport function ChatView() {\n const threads = useAllInboxThreads()\n const selectedInboxThread = useRelayStore((s) => s.selectedInboxThread)\n const set = useRelayStore((s) => s.set)\n const loadAgentChat = useRelayStore((s) => s.loadAgentChat)\n const agentsById = useRelayStore((s) => s.agentsById)\n const mobileShowChat = Boolean(selectedInboxThread)\n const isMobile = useIsMobile()\n\n useDraftCleanup()\n\n useEffect(() => {\n if (!selectedInboxThread) return\n void loadAgentChat(selectedInboxThread)\n }, [selectedInboxThread, loadAgentChat])\n\n useEffect(() => {\n if (!selectedInboxThread) return\n // Close the open chat only when the agent is truly gone (removed from the roster) —\n // not when it's merely filtered out or transiently offline during a clear/compact\n // self-resume. Otherwise mobile pops back to the list mid-compact (#521).\n if (!agentsById[selectedInboxThread]) {\n set({ selectedInboxThread: '' })\n }\n }, [selectedInboxThread, agentsById, set])\n\n const handleMobileBack = useCallback(() => {\n set({ selectedInboxThread: '' })\n }, [set])\n\n useMobileChatHistory(mobileShowChat, handleMobileBack)\n\n return (\n <div className=\"flex h-full min-h-0\">\n {isMobile ? (\n <div className=\"flex w-full overflow-hidden\">\n {!mobileShowChat ? (\n <div className=\"w-full flex flex-col overflow-hidden\">\n <AgentListPanel threads={threads} />\n </div>\n ) : (\n <MobileChatContainer>\n <ChatPanel key={selectedInboxThread || 'empty'} threads={threads} onBack={handleMobileBack} showBackButton />\n </MobileChatContainer>\n )}\n </div>\n ) : (\n <div className=\"flex w-full\">\n <div className=\"w-1/3 min-w-[240px] max-w-xs flex flex-col overflow-hidden\">\n <AgentListPanel threads={threads} />\n </div>\n\n <div className=\"flex-1 flex flex-col overflow-hidden\">\n <ChatPanel key={selectedInboxThread || 'empty'} threads={threads} />\n </div>\n </div>\n )}\n </div>\n )\n}\n\nfunction MobileChatContainer({ children }: { children: React.ReactNode }) {\n const height = useKeyboardViewportHeight()\n\n return (\n <div\n className=\"fixed inset-x-0 top-0 z-40 flex flex-col bg-background pt-[var(--sat)]\"\n style={{ height: height ? `${height}px` : '100dvh' }}\n >\n {children}\n </div>\n )\n}\n"],"x_google_ignoreList":[15],"mappings":"izDASA,SAAA,GAAA,EAAA,EAAA,EAAA,EAAA,EAAA,oGCEA,SAAgB,IAAgB,CAC9B,IAAM,EAAS,EAAe,GAAM,EAAE,OAAO,CACvC,EAAa,EAAe,GAAM,EAAE,WAAW,CAC/C,EAAe,EAAe,GAAM,EAAE,aAAa,CACnD,EAAc,EAAe,GAAM,EAAE,YAAY,CACjD,EAAkB,EAAe,GAAM,EAAE,gBAAgB,CACzD,EAA0B,EAAe,GAAM,EAAE,wBAAwB,CACzE,EAAwB,EAAe,GAAM,EAAE,sBAAsB,CACrE,EAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,EAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,EAAsB,EAAe,GAAM,EAAE,oBAAoB,CACjE,EAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,EAAmB,EAAe,GAAM,EAAE,iBAAiB,CAC3D,EAAkB,EAAe,GAAM,EAAE,gBAAgB,CACzD,EAAiB,EAAe,GAAM,EAAE,eAAe,CACvD,EAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,EAAmB,EAAe,GAAM,EAAE,iBAAiB,CAE3D,EAAU,IAAoB,CAEpC,OAAA,EAAA,EAAA,aAAqB,CACnB,IAAM,EAAgB,IAAI,IAAI,EAAQ,IAAK,GAAM,EAAE,KAAK,CAAC,CAErD,EAAO,GAAc,EAAQ,EAAc,EAAgB,CAY/D,GAXK,IAAa,EAAO,EAAK,OAAQ,GAAM,EAAE,SAAW,UAAU,EAInE,AACE,EADG,EAII,EAAK,OAAQ,GAAM,CAAC,EAAiB,SAAS,EAAE,GAAG,CAAC,CAHpD,EAAK,OAAQ,GAAM,GAAsB,EAAE,GAAI,EAAY,EAAc,IAAI,EAAE,GAAG,CAAE,EAAoB,EAAiB,CAAC,CAM/H,EAAiB,CACnB,IAAM,EAAI,EAAgB,aAAa,CACvC,EAAO,EAAK,OAAQ,GAClB,EAAE,GAAG,aAAa,CAAC,SAAS,EAAE,GAC7B,EAAE,MAAQ,IAAI,aAAa,CAAC,SAAS,EAAE,GACvC,EAAE,OAAS,IAAI,aAAa,CAAC,SAAS,EAAE,GACxC,EAAE,MAAQ,EAAE,EAAE,KAAM,GAAM,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,GACtD,EAAE,cAAgB,EAAE,EAAE,KAAM,GAAM,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,CAChE,CAGC,IAAyB,EAAO,EAAK,OAAQ,GAAM,GAAU,EAAE,GAAK,EAAwB,EAC5F,IAAuB,EAAO,EAAK,OAAQ,GAAM,EAAE,SAAW,EAAsB,EACpF,IAAoB,EAAO,EAAK,OAAQ,IAAO,EAAE,MAAQ,EAAE,EAAE,SAAS,EAAmB,CAAC,EAC1F,IAAoB,EAAO,EAAK,OAAQ,IAAO,EAAE,cAAgB,EAAE,EAAE,SAAS,EAAmB,CAAC,EAClG,IAAqB,EAAO,EAAK,OAAQ,IAAO,EAAE,SAAW,MAAQ,EAAoB,EAE7F,IAAM,EAAM,IAAqB,OAAS,GAAK,EAC/C,MAAO,CAAC,GAAG,EAAK,CAAC,MAAM,EAAG,IACpB,IAAkB,OAAe,EAAY,EAAE,CAAC,cAAc,EAAY,EAAE,CAAC,CAAG,EAGhF,IAAkB,WAAmB,GAA4B,GAAY,EAAE,SAAS,CAAE,GAAY,EAAE,SAAS,CAAE,EAAI,EAAI,EAAY,EAAE,CAAC,cAAc,EAAY,EAAE,CAAC,GAC/J,GAAuB,EAAE,SAAW,IAAM,GAAuB,EAAE,SAAW,IAAM,GACpF,EAAY,EAAE,CAAC,cAAc,EAAY,EAAE,CAAC,CACxD,EACD,CAAC,EAAQ,EAAY,EAAc,EAAa,EAAiB,EAAiB,EACnF,EAAuB,EAAoB,EAAoB,EAAqB,EAAe,EACnG,EAAgB,EAAoB,EAAkB,EAAQ,CAAC,YCjD7D,GAAmC,CACvC,CAAE,GAAI,YAAa,QAAS,GAAO,MAAO,EAAG,KAAM,EAAA,EAAA,KAAC,OAAD,CAAc,UAAU,wDAAgD,EAAS,CAAtE,EAAsE,CAAE,CACtI,CAAE,GAAI,kBAAmB,QAAS,GAAM,MAAO,EAAG,KAAM,EAAA,EAAA,KAAC,SAAD,CAAgB,UAAU,4CAAoC,EAAW,CAA5D,EAA4D,CAAE,CACnI,CAAE,GAAI,cAAe,QAAS,GAAM,MAAO,EAAG,KAAM,EAAA,EAAA,KAAC,SAAD,CAAgB,UAAU,4CAAoC,EAAW,CAA5D,EAA4D,CAAE,CAC/H,CAAE,GAAI,cAAe,QAAS,GAAM,MAAO,EAAG,KAAM,EAAA,EAAA,KAAC,IAAD,CAAA,SAAY,EAAM,CAAV,EAAU,CAAE,CACxE,CAAE,GAAI,cAAe,QAAS,GAAM,MAAO,EAAG,KAAM,EAAA,EAAA,KAAC,KAAD,CAAA,SAAa,EAAO,CAAX,EAAW,CAAE,CAC1E,CAAE,GAAI,YAAa,QAAS,GAAM,MAAO,EAAG,KAAM,EAAA,EAAA,KAAC,KAAD,CAAA,SAAa,EAAO,CAAX,EAAW,CAAE,CACxE,CAAE,GAAI,wBAAyB,QAAS,GAAM,MAAO,EAAG,KAAM,EAAA,EAAA,KAAC,OAAD,CAAc,UAAU,0DAAkD,EAAS,CAAxE,EAAwE,CAAE,CACpJ,CAED,SAAS,GAAqB,EAAc,EAAY,IAAkB,CACxE,IAAI,EAAwF,KAC5F,IAAK,IAAM,KAAW,GAAiB,CACrC,IAAM,EAAI,EAAQ,GAAG,KAAK,EAAK,CAC3B,GAAK,EAAE,KAAO,IAAS,MAAQ,EAAE,MAAQ,EAAK,SAChD,EAAO,CAAE,MAAO,EAAE,MAAO,OAAQ,EAAE,GAAG,OAAQ,MAAO,EAAE,GAAI,UAAS,EAGxE,GAAI,CAAC,EAAM,MAAO,CAAC,EAAK,CACxB,IAAM,EAAqB,EAAE,CACzB,EAAK,MAAQ,GAAG,EAAM,KAAK,EAAK,MAAM,EAAG,EAAK,MAAM,CAAC,CACzD,IAAM,EAAQ,EAAK,QAAQ,QAAU,GAAqB,EAAK,MAAO,GAAG,EAAU,GAAG,CAAG,EAAK,MAC9F,EAAM,KAAK,EAAK,QAAQ,KAAK,EAAO,GAAG,EAAU,GAAG,CAAC,CACrD,IAAM,EAAO,EAAK,MAAM,EAAK,MAAQ,EAAK,OAAO,CAEjD,OADI,GAAM,EAAM,KAAK,GAAG,GAAqB,EAAM,GAAG,EAAU,GAAG,CAAC,CAC7D,EAGT,SAAgB,GAAe,CAAE,UAAS,iBAAmF,CAC3H,IAAM,EAAM,EAAe,GAAM,EAAE,IAAI,CACjC,EAAkB,EAAe,GAAM,EAAE,gBAAgB,CACzD,EAAiB,EAAe,GAAM,EAAE,eAAe,CACvD,EAAsB,EAAe,GAAM,EAAE,oBAAoB,CACjE,EAAkB,EAAe,GAAM,EAAE,gBAAgB,CACzD,EAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,EAAmB,EAAe,GAAM,EAAE,iBAAiB,CAC3D,EAA0B,EAAe,GAAM,EAAE,wBAAwB,CACzE,EAAwB,EAAe,GAAM,EAAE,sBAAsB,CACrE,EAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,EAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,EAAsB,EAAe,GAAM,EAAE,oBAAoB,CACjE,EAAmB,EAAe,GAAM,EAAE,iBAAiB,CAC3D,EAA4B,EAAe,GAAM,EAAE,0BAA0B,CAC7E,EAAa,EAAe,GAAM,EAAE,WAAW,CAC/C,GAAwB,EAAe,GAAM,EAAE,sBAAsB,CACrE,GAA0B,EAAe,GAAM,EAAE,4BAA4B,CAC7E,GAAiB,EAAe,GAAM,EAAE,eAAe,CACvD,GAAoB,EAAe,GAAM,EAAE,kBAAkB,CAC7D,GAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,GAAmB,EAAe,GAAM,EAAE,iBAAiB,CAC3D,GAA0B,EAAe,GAAM,EAAE,wBAAwB,CACzE,GAAwB,EAAe,GAAM,EAAE,sBAAsB,CACrE,GAAM,IAAQ,CACd,GAAa,IAAe,CAC5B,IAAA,EAAA,EAAA,aAAkC,IAAI,IAAI,GAAsB,CAAE,CAAC,GAAsB,CAAC,CAE1F,IAAA,EAAA,EAAA,aAA6B,CACjC,IAAM,EAAI,IAAI,IACd,IAAK,IAAM,KAAK,EAAS,EAAE,IAAI,EAAE,KAAM,EAAE,CACzC,OAAO,GACN,CAAC,EAAQ,CAAC,CAEP,IAAA,EAAA,EAAA,aAA6B,CACjC,GAAI,IAAkB,cAAe,OAAO,GAC5C,IAAM,EAAM,IAAqB,OAAS,GAAK,EAC/C,MAAO,CAAC,GAAG,GAAW,CAAC,MAAM,EAAG,IAGvB,GAFI,GAAwB,GAAa,IAAI,EAAE,GAAG,CAEtB,CADxB,GAAwB,GAAa,IAAI,EAAE,GAAG,CAClB,CAAI,EAAI,EAAI,EAAY,EAAE,CAAC,cAAc,EAAY,EAAE,CAAC,CAC/F,EACD,CAAC,GAAY,EAAe,EAAkB,GAAa,CAAC,CAEzD,IAAA,EAAA,EAAA,aAA2B,CAAC,GAAG,IAAI,IAAI,GAAW,QAAS,GAAM,EAAE,MAAQ,EAAE,CAAC,CAAC,CAAC,CAAE,CAAC,GAAW,CAAC,CAC/F,IAAA,EAAA,EAAA,aAA2B,CAAC,GAAG,IAAI,IAAI,GAAW,QAAS,GAAM,GAAuB,EAAE,cAAgB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,GAAW,CAAC,CAC/H,GAAc,IAAgB,CAI9B,GAAA,EAAA,EAAA,aAA8B,CAClC,GAAI,IAAqB,UAAW,OAAO,KAC3C,IAAM,EAAS,IAAI,IACnB,IAAK,IAAM,KAAK,GAAc,CAC5B,IAAM,EAAM,GAAiB,EAAE,EAAI,aAC7B,EAAS,EAAO,IAAI,EAAI,CAC1B,EAAQ,EAAO,KAAK,EAAE,CACrB,EAAO,IAAI,EAAK,CAAC,EAAE,CAAC,CAE3B,MAAO,CAAC,GAAG,EAAO,SAAS,CAAC,CAAC,MAAM,EAAG,IAAM,EAAE,GAAG,cAAc,EAAE,GAAG,CAAC,EACpE,CAAC,GAAc,EAAiB,CAAC,CAE9B,GAAoB,CAAC,EAAyB,EAAuB,EAAoB,EAAoB,EAAoB,CAAC,OAAO,QAAQ,CAAC,OAClJ,IAAA,EAAA,EAAA,aAA4B,GAAiB,GAAc,EAAY,GAAI,CAAE,CAAC,GAAc,EAAY,GAAI,CAAC,CAEnH,SAAS,GAAa,EAAY,CAChC,EAAgB,EAAI,GAAa,IAAI,EAAG,EAAE,SAAS,CACnD,IAAgB,EAAG,CAGrB,SAAS,GAAe,EAAsB,CAC5C,GAAM,CAAE,SAAU,EAElB,GAAI,EAAI,QAAU,GAAK,EAAI,QAAU,GAAkB,IAAI,EAAI,OAAO,GAAG,CAAE,OAAO,KAClF,IAAM,EAAS,GAAa,IAAI,EAAM,GAAG,CACnC,EAAS,GAAQ,UAAU,QAAU,EACrC,EAAqB,GAAwB,EAAM,CACnD,EAAU,GAAQ,eAGlB,EAAiB,GAA2B,EAAO,EAAI,GAAwB,EAAO,CACtF,EAAa,IAAwB,EAAM,GAC3C,EAAK,GAAmB,EAAM,CAC9B,EAAU,GAAiB,EAAM,CACjC,EAAS,EAAG,KACZ,EAAc,EAAI,OAAS,EAAY,EAAI,OAAO,CAAG,EAAM,UAC3D,EAAa,EAAI,SAAS,OAC1B,EAAuB,EAAI,QAAU,GAAK,EAAa,EACvD,EAAoB,GAAkB,IAAI,EAAM,GAAG,CAEnD,EAAU,GAAiB,SAAS,EAAM,GAAG,CAC7C,EAAa,GAAmB,SAAS,EAAM,GAAG,CAExD,OACE,EAAA,EAAA,MAAC,KAAD,CAAmB,UAAW,GAAG,iBAAkB,EAAI,QAAU,GAAK,OAAO,UAA7E,CACG,EAAI,QAAU,IACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6DACb,EAAA,EAAA,KAAC,EAAD,CAAiB,UAAU,cAAgB,CAAA,CACvC,CAAA,EAKR,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,kLAAf,EACE,EAAA,EAAA,KAAC,SAAD,CACE,KAAK,SACL,MAAO,EAAa,2CAA6C,4CACjE,QAAU,GAAM,CAAE,EAAE,iBAAiB,CAAE,GAAwB,EAAM,GAAG,EACxE,UAAW,GACT,gCACA,EAAa,iDAAmD,6DACjE,WAED,EAAA,EAAA,KAAC,GAAD,CAAW,UAAU,UAAY,CAAA,CAC1B,CAAA,EACT,EAAA,EAAA,KAAC,SAAD,CACE,KAAK,SACL,MAAO,EAAU,SAAW,6BAC5B,QAAU,GAAM,CAAE,EAAE,iBAAiB,CAAE,GAAsB,EAAM,GAAG,EACtE,UAAW,GACT,gCACA,EAAU,0DAA4D,6DACvE,WAED,EAAA,EAAA,KAAC,EAAD,CAAS,UAAU,UAAY,CAAA,CACxB,CAAA,CACL,IACN,EAAA,EAAA,MAAC,SAAD,CACE,UAAW,GACT,sHACA,EAAI,QAAU,GAAK,cACnB,GAAc,cACd,GAAW,aACZ,CACD,YAAe,GAAa,EAAM,GAAG,UAPvC,EASE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,oCAAf,EACE,EAAA,EAAA,KAAC,GAAD,CAAsB,QAAS,CAAA,EAC/B,EAAA,EAAA,KAAC,GAAD,CAAkB,QAAY,OAAK,UAAU,0CAA4C,CAAA,CACrF,IAEN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0DAAf,EACE,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,2CAAhB,EACE,EAAA,EAAA,KAAC,GAAD,CAAa,QAAS,GAAiB,EAAM,CAAE,UAAU,mBAAqB,CAAA,EAC9E,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,wCAAgC,EAAY,EAAM,CAAQ,CAAA,CACrE,IAEP,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qFAAf,CAGG,IAAc,EAAA,EAAA,KAAC,GAAD,CAAW,UAAU,uBAAuB,aAAW,WAAa,CAAA,CAClF,EAAiB,IAChB,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,iDAAiD,MAAO,GAAQ,EAAe,UAC5F,GAAQ,GAAK,EAAe,CACxB,CAAA,CAER,EAAS,IACR,EAAA,EAAA,KAAC,GAAD,CAAO,UAAU,uKACd,EACK,CAAA,CAET,CAAC,GAAU,IACV,EAAA,EAAA,KAAC,GAAD,CAAO,UAAU,4GAA4G,MAAM,2BACjI,EAAA,EAAA,KAAC,GAAD,CAAa,UAAU,UAAY,CAAA,CAC7B,CAAA,CAEN,GACF,IAGN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,8EAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,MAAO,EAAG,MAAO,UAAU,iCAC/B,EAAA,EAAA,KAAC,EAAD,CAAQ,UAAW,GAAG,UAAW,EAAG,UAAU,CAAI,CAAA,CAC7C,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oBAAY,GAAW,EAAG,MAAa,CAAA,CACtD,GAAyB,EAAM,GAC9B,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,6BACd,EAAA,EAAA,KAAC,GAAD,CAAa,QAAS,EAAM,QAAS,SAAA,GAAS,KAAM,GAAM,CAAA,CACrD,CAAA,CAEL,GACL,EAAI,QAAU,GAAK,EAAM,WAAa,IACrC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,mBACb,EAAA,EAAA,KAAC,GAAD,CAAO,QAAQ,UAAU,UAAU,mEACjC,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,oBAAhB,CAA2B,cAAY,EAAmB,GACpD,CAAA,CACJ,CAAA,CAGP,IACC,EAAA,EAAA,MAAC,IAAD,CAAG,UAAU,gEAAb,CACG,EAAQ,OAAA,OAA0B,QAAU,GAC5C,GAAqB,GAAe,EAAQ,CAAC,QAAQ,OAAQ,IAAI,CAAC,CACjE,GAEF,GACC,GAKR,IACC,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,QAAU,GAAM,CAAE,EAAE,iBAAiB,CAAE,GAAwB,EAAM,GAAG,EACxE,UAAU,oLACV,gBAAe,CAAC,EAChB,MAAO,EAAoB,QAAQ,EAAW,SAAS,IAAe,EAAI,QAAU,WAAa,yBALnG,CAOG,GAAoB,EAAA,EAAA,KAAC,EAAD,CAAc,UAAU,uBAAyB,CAAA,EAAG,EAAA,EAAA,KAAC,EAAD,CAAa,UAAU,uBAAyB,CAAA,EACzH,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,uBAAhB,CAA+B,EAAW,UAAQ,IAAe,EAAI,QAAU,SAAgB,GACxF,GAER,EAxHI,EAAM,GAwHV,CAIT,OACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+DAAf,EAEE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gDAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,oBAAf,EACE,EAAA,EAAA,KAAC,GAAD,CAAQ,UAAU,mGAAqG,CAAA,EACvH,EAAA,EAAA,KAAC,GAAD,CACE,YAAY,mBACZ,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,gBAAiB,EAAE,OAAO,MAAO,CAAC,CACzD,UAAU,mBACV,CAAA,CACE,IAKN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6FAAf,EACE,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,YAAe,GAAkB,GAAM,CACvC,MAAM,wFACN,eAAc,CAAC,GACf,UAAW,GACT,yFACC,GAA4D,8CAA3C,yCACnB,UARH,EAUE,EAAA,EAAA,KAAC,EAAD,CAAQ,UAAU,cAAgB,CAAA,CAAA,SAE3B,IACT,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,YAAe,GAAkB,GAAK,CACtC,MAAM,kEACN,eAAc,GACd,UAAW,GACT,yFACA,GAAiB,yCAA2C,8CAC7D,UARH,EAUE,EAAA,EAAA,KAAC,EAAD,CAAK,UAAU,cAAgB,CAAA,CAAA,MAExB,GACL,IAGN,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,YAAe,EAAI,CAAE,0BAA2B,CAAC,EAA2B,CAAC,CAC7E,UAAU,qJAHZ,EAKE,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,4CAAhB,EACE,EAAA,EAAA,KAAC,EAAD,CAAmB,UAAU,cAAgB,CAAA,kBAE5C,GAAoB,IACnB,EAAA,EAAA,KAAC,GAAD,CAAO,UAAU,oGAA4F,GAA0B,CAAA,CAEpI,GACN,GAA4B,EAAA,EAAA,KAAC,EAAD,CAAa,UAAU,cAAgB,CAAA,EAAG,EAAA,EAAA,KAAC,EAAD,CAAW,UAAU,cAAgB,CAAA,CACrG,IAET,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,GAAG,YAAa,EAA4B,SAAW,QAAS,WAAW,UAA3F,EAEE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qCAAf,EACE,EAAA,EAAA,MAAC,SAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,cAAe,EAAE,OAAO,MAAO,CAAC,CACvD,UAAU,mGAHZ,EAKE,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,kBAAS,YAAkB,CAAA,EACzC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,gBAAO,UAAgB,CAAA,EACrC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,oBAAW,eAAqB,CAAA,EAC9C,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,uBAAc,mBAAyB,CAAA,CAC9C,IACT,EAAA,EAAA,KAAC,EAAD,CACE,QAAQ,QACR,KAAK,UACL,YAAe,EAAI,CAAE,iBAAkB,IAAqB,MAAQ,OAAS,MAAO,CAAC,UAEpF,IAAqB,OAAQ,EAAA,EAAA,KAAC,EAAD,CAAS,UAAU,cAAgB,CAAA,EAAG,EAAA,EAAA,KAAC,EAAD,CAAU,UAAU,cAAgB,CAAA,CACjG,CAAA,CACL,IAGN,EAAA,EAAA,MAAC,SAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,iBAAkB,EAAE,OAAO,MAAO,CAAC,CAC1D,UAAU,mGAHZ,EAKE,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,YAAG,cAAoB,CAAA,EACrC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,mBAAU,mBAAyB,CAAA,CAC1C,IAGT,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,sBAAf,EACE,EAAA,EAAA,MAAC,SAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,wBAAyB,EAAE,OAAO,MAAO,CAAC,CACjE,UAAU,mGAHZ,EAKE,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,YAAG,YAAkB,CAAA,CAClC,IAAqB,CAAC,IAAK,IAAO,EAAA,EAAA,KAAC,SAAD,CAAiB,MAAO,WAAK,GAAiB,EAAG,CAAU,CAA9C,EAA8C,CAAC,EAC/F,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,iBAAQ,QAAc,CAAA,EACpC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,gBAAO,OAAa,CAAA,CAC3B,IACT,EAAA,EAAA,MAAC,SAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,sBAAuB,EAAE,OAAO,MAAO,CAAC,CAC/D,UAAU,mGAHZ,EAKE,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,YAAG,aAAmB,CAAA,EACpC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,kBAAS,SAAe,CAAA,EACtC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,gBAAO,OAAa,CAAA,EAClC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,gBAAO,OAAa,CAAA,EAClC,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,mBAAU,UAAgB,CAAA,CACjC,GACR,GAAY,OAAS,IACpB,EAAA,EAAA,MAAC,SAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,oBAAqB,EAAE,OAAO,MAAO,CAAC,CAC7D,UAAU,mGAHZ,EAKE,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,YAAG,YAAkB,CAAA,CAClC,GAAY,IAAK,IAAM,EAAA,EAAA,KAAC,SAAD,CAAgB,MAAO,WAAI,EAAW,CAAzB,EAAyB,CAAC,CACxD,GAEP,IAEJ,GAAW,OAAS,GAAK,GAAW,OAAS,KAC7C,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,sBAAf,CACG,GAAW,OAAS,IACnB,EAAA,EAAA,MAAC,SAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,mBAAoB,EAAE,OAAO,MAAO,CAAC,CAC5D,UAAU,mGAHZ,EAKE,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,YAAG,WAAiB,CAAA,CACjC,GAAW,IAAK,IAAM,EAAA,EAAA,MAAC,SAAD,CAAgB,MAAO,WAAvB,CAA0B,IAAE,EAAW,EAA1B,EAA0B,CAAC,CACxD,GAEV,GAAW,OAAS,IACnB,EAAA,EAAA,MAAC,SAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAI,CAAE,mBAAoB,EAAE,OAAO,MAAO,CAAC,CAC5D,UAAU,mGAHZ,EAKE,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,YAAG,WAAiB,CAAA,CACjC,GAAW,IAAK,IAAM,EAAA,EAAA,KAAC,SAAD,CAAgB,MAAO,WAAI,EAAW,CAAzB,EAAyB,CAAC,CACvD,GAEP,GAEJ,GACF,IAGN,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,UAAU,2HACV,QAAS,WAHX,EAKE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6IACb,EAAA,EAAA,KAAC,EAAD,CAAM,UAAU,cAAgB,CAAA,CAC5B,CAAA,EACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,+BAAsB,YAAe,CAAA,EACpD,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sDAA6C,2BAA8B,CAAA,CACtF,GACC,IAGT,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kCACZ,GAAa,SAAW,EACvB,CAAC,IAAkB,CAAC,GAAmB,KAAsB,GAG3D,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,4EAAf,EACE,EAAA,EAAA,KAAC,GAAD,CAAW,UAAU,wCAA0C,CAAA,EAC/D,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kDAAyC,oCAAqC,CAAA,EAC3F,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kDAAyC,4CAA6C,CAAA,EACnG,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,YAAe,GAAkB,GAAK,CACtC,UAAU,uMAHZ,EAKE,EAAA,EAAA,KAAC,EAAD,CAAK,UAAU,cAAgB,CAAA,CAAA,mBACxB,GACL,IAEN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,4EAAf,EACE,EAAA,EAAA,KAAC,EAAD,CAAK,UAAU,wCAA0C,CAAA,EACzD,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,yCAAgC,0BAA2B,CAAA,CACpE,GAEN,EACF,EAAc,KAAK,CAAC,EAAS,MAC3B,EAAA,EAAA,MAAC,MAAD,CAAA,SAAA,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gMAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oBAAY,EAAe,CAAA,EAC3C,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oCAA4B,EAAO,OAAc,CAAA,CAC7D,IACN,EAAA,EAAA,KAAC,KAAD,CAAA,SAAK,GAAiB,EAAQ,EAAY,GAAI,CAAC,IAAI,GAAe,CAAM,CAAA,CACpE,CAAA,CANI,EAMJ,CACN,EAEF,EAAA,EAAA,KAAC,KAAD,CAAA,SAAK,GAAY,IAAI,GAAe,CAAM,CAAA,CAExC,CAAA,CACF,GCvdV,IAAM,GAAuC,CAC3C,CAAE,KAAM,SAAU,OAAQ,QAAS,YAAa,iCAAkC,aAAc,qBAAsB,CACtH,CAAE,KAAM,WAAY,OAAQ,QAAS,YAAa,6DAA8D,aAAc,kBAAmB,CACjJ,CAAE,KAAM,QAAS,OAAQ,QAAS,YAAa,2CAA4C,CAC3F,CAAE,KAAM,SAAU,OAAQ,QAAS,YAAa,oCAAqC,aAAc,sBAAuB,CAC1H,CAAE,KAAM,gBAAiB,OAAQ,QAAS,YAAa,mCAAoC,aAAc,cAAe,CACxH,CAAE,KAAM,kBAAmB,OAAQ,QAAS,YAAa,uDAAwD,CACjH,CAAE,KAAM,UAAW,OAAQ,QAAS,YAAa,iCAAkC,CACnF,CAAE,KAAM,QAAS,OAAQ,QAAS,YAAa,yCAA0C,CACzF,CAAE,KAAM,SAAU,OAAQ,QAAS,YAAa,+CAAgD,CAChG,CAAE,KAAM,cAAe,OAAQ,QAAS,YAAa,qCAAsC,CAC5F,CAEK,GAAuF,CAC3F,SAAU,CAAE,YAAa,iDAAkD,CAC3E,WAAY,CAAE,YAAa,8CAA+C,aAAc,iBAAkB,CAC1G,SAAU,CAAE,YAAa,0BAA2B,aAAc,UAAW,CAC7E,QAAS,CAAE,YAAa,YAAa,CACrC,OAAQ,CAAE,YAAa,qBAAsB,CAC9C,CAED,SAAgB,GAAsB,EAA8C,CAOlF,MAAO,CAAC,KANS,EAAW,GAAoB,EAAS,CAAG,IAAA,KAChB,eAAiB,EAAE,EAAE,IAAK,IAAU,CAC9E,OACA,OAAQ,UACR,GAAG,GAAqB,GACzB,EACU,CAAU,GAAG,GAAqB,CC3B/C,SAAgB,GAAe,CAAE,UAAS,aAAsD,CAC9F,IAAM,EAAU,EAAe,GAAM,EAAE,gBAAgB,GAAS,CAC1D,EAAY,EAAe,GAAM,EAAE,UAAU,CAC7C,EAAe,IAAmB,CAElC,GAAU,GAAW,EAAE,EAAE,OAAQ,GAAM,EAAE,WAAa,EAAa,CACzE,GAAI,EAAO,SAAW,EAAG,OAAO,KAGhC,IAAM,EAAQ,MAAM,KAAK,IAAI,IAAI,EAAO,IAAK,GAAM,GAAiB,EAAE,OAAQ,EAAU,CAAC,CAAC,CAAC,CACrF,EAAS,EAAO,KAAM,GAAM,EAAE,OAAO,CACrC,EAAQ,EAAM,SAAW,EAAI,EAAM,GAAK,GAAG,EAAM,OAAO,UACxD,EAAO,EAAS,EAAS,EAE/B,OACE,EAAA,EAAA,MAAC,OAAD,CACE,MAAO,GAAG,EAAM,KAAK,KAAK,GAAG,EAAS,YAAc,eACpD,UAAW,GAAG,wGAAyG,EAAU,UAFnI,EAIE,EAAA,EAAA,KAAC,EAAD,CAAM,UAAW,GAAG,mBAAoB,GAAU,mBAAmB,CAAI,CAAA,EACzE,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,iCAAhB,CAAyC,EAAO,GAAU,EAAM,SAAW,EAAI,cAAgB,GAAU,GACpG,GCGX,SAAgB,GAAW,CACzB,sBACA,QACA,MACA,eACA,SACA,mBACA,kBACA,iBACA,SACA,kBACA,qBACA,kBACA,qBACA,kBACA,kBACA,qBACA,eACA,iBACA,aACA,kBACA,cACA,cACA,mBACA,iBACA,qBACA,iBACA,yBACA,uBACA,gBACA,iBAgCC,CACD,OACQ,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,yGAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,sDAAf,CACG,IACC,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,QAAS,EAAQ,UAAU,2BAChE,EAAA,EAAA,KAAC,GAAD,CAAW,UAAU,UAAY,CAAA,CAC1B,CAAA,EAEX,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,UAAU,iFACV,YAAe,GAAS,EAAgB,EAAM,CAC9C,SAAU,CAAC,WAJb,EAME,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6BAAf,EACE,EAAA,EAAA,KAAC,GAAD,CAAsB,QAAS,CAAA,EAC/B,EAAA,EAAA,KAAC,GAAD,CAAkB,QAAY,MAAK,UAAU,0CAA4C,CAAA,CACrF,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6BAAf,EACE,EAAA,EAAA,MAAC,IAAD,CAAG,UAAU,gEAAb,CACG,IAAS,EAAA,EAAA,KAAC,GAAD,CAAa,QAAS,GAAiB,EAAM,CAAE,UAAU,WAAa,CAAA,EAChF,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oBAAY,EAAQ,EAAY,EAAM,CAAG,EAA2B,CAAA,CAClF,GACH,IACC,EAAA,EAAA,MAAC,IAAD,CAAG,UAAU,kDAAb,CACG,EAAe,YAAY,EAAa,QAAU,EAAM,OACxD,EAAM,SAAW,MAAM,EAAM,UAC7B,OAAO,EAAM,MAAM,KAAQ,UAAY,EAAM,KAAK,KAAO,MAAM,GAAU,EAAM,KAAK,IAAe,EAAE,GACpG,GAEF,GACC,GACR,IAAS,EAAA,EAAA,KAAC,GAAD,CAA0B,QAAO,QAAA,GAAQ,UAAU,iCAAmC,CAAA,CAC/F,GAAS,GAAyB,EAAM,GAAI,EAAA,EAAA,KAAC,GAAD,CAAa,QAAS,EAAM,QAAS,SAAA,GAAW,CAAA,CAC5F,GAAO,aAAe,EAAM,oBAC3B,EAAA,EAAA,KAAC,GAAD,CAAkB,MAAO,EAAM,YAAa,UAAU,WAAW,YAAe,KAAK,EAAmB,EAAM,kBAAmB,CAAI,CAAA,CAEtI,GAAQ,UAAU,QACjB,EAAA,EAAA,MAAC,GAAD,CAAO,UAAU,6EAAjB,CAAsF,EAAO,UAAU,OAAO,UAAe,GAC3H,KACH,IAAS,EAAA,EAAA,KAAC,GAAD,CAAgB,QAAS,EAAM,GAAI,UAAU,wCAA0C,CAAA,CAC7F,IAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,uDACZ,IACC,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,GAAD,CAAY,MAAO,EAAM,GAAI,MAAM,gBAAgB,KAAK,UAAY,CAAA,CACnE,KAAgB,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,MAAM,mBAAmB,QAAS,aAAc,EAAA,EAAA,KAAC,GAAD,CAAQ,UAAU,cAAgB,CAAA,CAAS,CAAA,CAClJ,GAAS,YAAa,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,MAAO,EAAkB,8EAAgF,yEAA0E,UAAW,EAAkB,eAAiB,GAAI,YAAe,EAAmB,CAAC,EAAgB,UAAG,GAAkB,EAAA,EAAA,KAAC,GAAD,CAAS,UAAU,cAAgB,CAAA,EAAG,EAAA,EAAA,KAAC,EAAD,CAAS,UAAU,cAAgB,CAAA,CAAU,CAAA,CAC7b,IAAmB,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,SAAU,EAAiB,MAAM,WAAW,YAAe,KAAK,GAAoB,WAAE,EAAA,EAAA,KAAC,EAAD,CAAU,UAAU,cAAgB,CAAA,CAAS,CAAA,CACtO,IAAgB,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,kCAAkC,MAAM,YAAY,QAAS,YAAgB,EAAA,EAAA,KAAC,GAAD,CAAY,UAAU,cAAgB,CAAA,CAAS,CAAA,EAC5L,EAAM,cAAgB,WAAa,EAAM,cAAgB,SAAW,EAAM,oBAAqB,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,mEAAmE,MAAM,oDAAoD,YAAe,EAAY,uBAAwB,QAAQ,EAAY,EAAM,CAAC,4EAA+E,GAAgB,EAAM,kBAAoB,QAAQ,CAAC,WAAE,EAAA,EAAA,KAAC,EAAD,CAAM,UAAU,cAAgB,CAAA,CAAS,CAAA,CACzgB,IAAc,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAM,UAAU,YAAe,EAAY,gBAAiB,uBAAuB,EAAY,EAAM,CAAC,OAAU,GAAc,EAAO,UAAU,CAAC,WAAE,EAAA,EAAA,KAAC,EAAD,CAAW,UAAU,cAAgB,CAAA,CAAS,CAAA,CAC9R,IAAmB,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAM,gBAAgB,YAAe,EAAY,gBAAiB,qBAAqB,EAAY,EAAM,CAAC,OAAU,GAAc,EAAO,eAAe,CAAC,WAAE,EAAA,EAAA,KAAC,EAAD,CAAQ,UAAU,cAAgB,CAAA,CAAS,CAAA,CACzS,IAAe,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAM,WAAW,YAAe,EAAY,iBAAkB,YAAY,EAAY,EAAM,CAAC,OAAU,GAAc,EAAO,WAAW,CAAC,WAAE,EAAA,EAAA,KAAC,EAAD,CAAO,UAAU,cAAgB,CAAA,CAAS,CAAA,CACnR,GAAS,OAAO,EAAM,MAAM,KAAQ,UAAY,EAAM,KAAK,MAAO,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAO,QAAQ,EAAM,KAAK,IAAc,WAAY,YAAe,KAAK,GAAkB,EAAM,WAAE,EAAA,EAAA,KAAC,GAAD,CAAY,UAAU,cAAgB,CAAA,CAAS,CAAA,CACnS,GAAS,GAAU,EAAO,SAAS,OAAS,IAAK,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAM,gDAAgD,YAAe,GAAc,EAAM,GAAI,EAAO,SAAS,WAAE,EAAA,EAAA,KAAC,GAAD,CAAS,UAAU,cAAgB,CAAA,CAAS,CAAA,CAC5R,IAAU,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAM,cAAc,YAAe,GAAsB,EAAoB,WAAE,EAAA,EAAA,KAAC,GAAD,CAAO,UAAU,cAAgB,CAAA,CAAS,CAAA,CACnN,IAAU,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAM,YAAY,YAAe,GAAoB,EAAO,KAAM,EAAO,SAAS,WAAE,EAAA,EAAA,KAAC,GAAD,CAAU,UAAU,cAAgB,CAAA,CAAS,CAAA,CAC3N,IAAoB,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,+BAA+B,MAAM,gBAAgB,YAAe,GAAa,CAAE,GAAG,EAAkB,kBAAiB,CAAE,OAAO,WAAE,EAAA,EAAA,KAAC,GAAD,CAAU,UAAU,cAAgB,CAAA,CAAS,CAAA,EACvP,EAAA,EAAA,MAAC,GAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,GAAD,CAAqB,QAAA,aACnB,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,UAAU,6BAAmB,EAAA,EAAA,KAAC,EAAD,CAAgB,UAAU,cAAgB,CAAA,CAAS,CAAA,CACnG,CAAA,EACtB,EAAA,EAAA,MAAC,GAAD,CAAqB,MAAM,eAA3B,CACG,IAAmB,EAAA,EAAA,MAAC,GAAD,CAAkB,SAAU,EAAiB,YAAe,KAAK,GAAoB,UAArF,EAAuF,EAAA,EAAA,KAAC,EAAD,CAAU,UAAU,cAAgB,CAAA,CAAA,WAA2B,GACzK,IAAgB,EAAA,EAAA,MAAC,GAAD,CAAkB,QAAS,WAA3B,EAA2C,EAAA,EAAA,KAAC,GAAD,CAAY,UAAU,cAAgB,CAAA,CAAA,YAA4B,IAC5H,EAAM,cAAgB,WAAa,EAAM,cAAgB,SAAW,EAAM,oBAAqB,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,EAAY,uBAAwB,QAAQ,EAAY,EAAM,CAAC,4EAA+E,GAAgB,EAAM,kBAAoB,QAAQ,CAAC,UAAlO,EAAoO,EAAA,EAAA,KAAC,EAAD,CAAM,UAAU,cAAgB,CAAA,CAAA,aAA6B,GACjY,IAAc,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,EAAY,gBAAiB,uBAAuB,EAAY,EAAM,CAAC,OAAU,GAAc,EAAO,UAAU,CAAC,UAAlJ,EAAoJ,EAAA,EAAA,KAAC,EAAD,CAAW,UAAU,cAAgB,CAAA,CAAA,UAA0B,GACjO,IAAmB,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,EAAY,gBAAiB,qBAAqB,EAAY,EAAM,CAAC,OAAU,GAAc,EAAO,eAAe,CAAC,UAArJ,EAAuJ,EAAA,EAAA,KAAC,EAAD,CAAQ,UAAU,cAAgB,CAAA,CAAA,gBAAgC,GAC5O,IAAe,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,EAAY,iBAAkB,YAAY,EAAY,EAAM,CAAC,OAAU,GAAc,EAAO,WAAW,CAAC,UAAzI,EAA2I,EAAA,EAAA,KAAC,EAAD,CAAO,UAAU,cAAgB,CAAA,CAAA,WAA2B,GACtN,GAAS,OAAO,EAAM,MAAM,KAAQ,UAAY,EAAM,KAAK,MAAO,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,KAAK,GAAkB,EAAM,UAA9D,EAAgE,EAAA,EAAA,KAAC,GAAD,CAAY,UAAU,cAAgB,CAAA,CAAA,aAA6B,GACrM,GAAS,GAAU,EAAO,SAAS,OAAS,IAAK,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,GAAc,EAAM,GAAI,EAAO,SAAS,UAAzE,EAA2E,EAAA,EAAA,KAAC,GAAD,CAAS,UAAU,cAAgB,CAAA,CAAA,OAAuB,IACrL,GAAmB,GAAc,GAAmB,KAAgB,EAAA,EAAA,KAAC,GAAD,EAAyB,CAAA,CAC9F,IAAU,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,GAAsB,EAAoB,UAA3E,EAA6E,EAAA,EAAA,KAAC,GAAD,CAAO,UAAU,cAAgB,CAAA,CAAA,cAA8B,GACtJ,IAAU,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,GAAoB,EAAO,KAAM,EAAO,SAAS,UAAlF,EAAoF,EAAA,EAAA,KAAC,GAAD,CAAU,UAAU,cAAgB,CAAA,CAAA,YAA4B,GAC9J,IAAoB,EAAA,EAAA,MAAC,GAAD,CAAkB,YAAe,GAAa,CAAE,GAAG,EAAkB,kBAAiB,CAAE,OAAO,UAA/F,EAAiG,EAAA,EAAA,KAAC,GAAD,CAAU,UAAU,cAAgB,CAAA,CAAA,WAA2B,GACjK,GACT,CAAA,CAAA,CACd,CAAA,CAAA,CAED,CAAA,CACF,GC3KhB,SAAgB,GAAc,CAC5B,QACA,WACA,QACA,gBACA,SACA,SACA,WASC,CACD,IAAM,GAAA,EAAA,EAAA,QAAoC,KAAK,CACzC,EAAW,EAAM,MAAM,CAAC,OAAS,EACjC,EAAY,GAAY,IAAU,EAExC,SAAS,EAAc,EAA0C,CAC/D,GAAI,EAAE,MAAQ,SAAU,CACtB,EAAE,gBAAgB,CAClB,GAAS,CACT,OAEE,EAAE,MAAQ,UACZ,EAAE,gBAAgB,CACd,EAAE,SAAU,GAAQ,CACnB,GAAQ,EAIjB,OACE,EAAA,EAAA,MAAC,UAAD,CAAS,UAAU,wFAAnB,EACE,EAAA,EAAA,KAAC,GAAD,CAAQ,UAAU,6CAA+C,CAAA,EACjE,EAAA,EAAA,KAAC,GAAD,CACE,IAAK,EACL,UAAA,GACA,MAAO,EACP,SAAW,GAAM,EAAc,EAAE,OAAO,MAAM,CAC9C,UAAW,EACX,YAAY,oBACZ,aAAW,mBACX,UAAU,qBACV,CAAA,EACF,EAAA,EAAA,KAAC,OAAD,CACE,UACE,kCAAoC,EAAY,eAAiB,kCAGlE,EAAY,EAAY,aAAe,GAAG,EAAS,GAAG,IAAW,GAC7D,CAAA,EACP,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,8CAAf,EACE,EAAA,EAAA,KAAC,EAAD,CACE,KAAK,SACL,QAAQ,QACR,KAAK,UACL,MAAM,+BACN,SAAU,IAAU,EACpB,QAAS,YAET,EAAA,EAAA,KAAC,EAAD,CAAW,UAAU,cAAgB,CAAA,CAC9B,CAAA,EACT,EAAA,EAAA,KAAC,EAAD,CACE,KAAK,SACL,QAAQ,QACR,KAAK,UACL,MAAM,qBACN,SAAU,IAAU,EACpB,QAAS,YAET,EAAA,EAAA,KAAC,EAAD,CAAa,UAAU,cAAgB,CAAA,CAChC,CAAA,EACT,EAAA,EAAA,KAAC,EAAD,CAAQ,KAAK,SAAS,QAAQ,QAAQ,KAAK,UAAU,MAAM,qBAAqB,QAAS,YACvF,EAAA,EAAA,KAAC,EAAD,CAAG,UAAU,cAAgB,CAAA,CACtB,CAAA,CACL,GACE,GCnFd,SAAgB,GAAa,CAC3B,UACA,cACA,WACA,WAMC,CAED,OADI,EAAQ,SAAW,EAAU,MAE/B,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0JACZ,EAAQ,KAAK,EAAK,KACjB,EAAA,EAAA,MAAC,SAAD,CAEE,YAAc,GAAM,CAAE,EAAE,gBAAgB,CAAE,EAAS,EAAI,EACvD,iBAAoB,EAAQ,EAAE,CAC9B,UAAW,GAAG,iEAAkE,IAAM,EAAc,YAAc,qBAAqB,UAJzI,EAME,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,gCAAwB,EAAI,KAAY,CAAA,CACvD,EAAI,eAAgB,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,kDAA0C,EAAI,aAAoB,CAAA,CACtG,EAAI,cAAe,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,6DAAqD,EAAI,YAAmB,CAAA,CACzG,EARF,EAAI,KAQF,CACT,CACE,CAAA,CCnBV,SAAS,GAAiB,CACxB,QAAO,WAAU,YAAW,UAAS,cAAa,aAQjD,CACD,IAAM,GAAA,EAAA,EAAA,QAA0C,KAAK,CA2BrD,OAzBA,EAAA,EAAA,eAAgB,CACd,IAAM,EAAK,EAAY,QAClB,IACL,EAAG,MAAM,OAAS,OAClB,EAAG,MAAM,OAAS,KAAK,IAAI,EAAG,aAAc,IAAI,CAAG,OAClD,CAAC,EAAM,CAAC,EAGX,EAAA,EAAA,eAAgB,CACd,IAAM,EAAK,OAAO,eAClB,GAAI,CAAC,EAAI,OAET,SAAS,GAAe,CACtB,IAAM,EAAK,EAAY,QACnB,CAAC,GAAM,SAAS,gBAAkB,GAEtC,0BAA4B,CAC1B,EAAG,eAAe,CAAE,MAAO,UAAW,SAAU,SAAU,CAAC,EAC3D,CAIJ,OADA,EAAG,iBAAiB,SAAU,EAAa,KAC9B,EAAG,oBAAoB,SAAU,EAAa,EAC1D,EAAE,CAAC,EAGJ,EAAA,EAAA,KAAC,WAAD,CACE,IAAK,EACE,QACG,WACC,YACF,UACI,cACb,KAAM,EACN,UAAW,GACT,yFACA,4GACA,6CACA,EACD,CACD,CAAA,CAIN,SAAS,GAAyB,CAAE,OAAM,YAA+D,CACvG,GAAM,CAAC,EAAM,IAAA,EAAA,EAAA,UAAoB,GAAM,CACjC,EAAa,GAAQ,EAAK,YAAc,CAAC,EAAK,OAEpD,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,uGAAf,EACE,EAAA,EAAA,KAAC,SAAD,CACE,KAAK,SACL,SAAU,CAAC,EACX,YAAe,EAAQ,GAAK,CAC5B,UAAU,oIACV,MAAO,EAAa,gBAAkB,EAAK,kBAE1C,EAAK,YACJ,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,IAAK,EAAK,WAAY,IAAK,EAAK,SAAU,UAAU,6BAA+B,CAAA,EACxF,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,2HACd,EAAA,EAAA,KAAC,GAAD,CAAQ,UAAU,qGAAuG,CAAA,CACpH,CAAA,CACN,CAAA,CAAA,CAEH,EAAK,OAAQ,EAAA,EAAA,KAAC,GAAD,CAAa,UAAU,uBAAyB,CAAA,CAAG,EAAK,WAAY,EAAA,EAAA,KAAC,GAAD,CAAS,UAAU,6CAA+C,CAAA,EAAG,EAAA,EAAA,KAAC,EAAD,CAAU,UAAU,gCAAkC,CAAA,CAEvM,CAAA,EACT,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,gCAAwB,EAAK,SAAa,CAAA,EACvD,EAAA,EAAA,KAAC,IAAD,CAAG,UAAW,GAAG,iCAAkC,EAAK,OAAS,eAAe,UAAG,EAAK,QAAU,EAAK,UAAY,YAAc,GAAY,EAAK,KAAK,EAAM,CAAA,CACzJ,IACN,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,MAAM,oBAAoB,QAAS,YACxE,EAAA,EAAA,KAAC,EAAD,CAAG,UAAU,cAAgB,CAAA,CACtB,CAAA,CACL,GACL,EAAK,aACJ,EAAA,EAAA,KAAC,GAAD,CAAc,OAAM,aAAc,YAChC,EAAA,EAAA,MAAC,GAAD,CAAe,UAAU,yFAAyF,gBAAiB,YAAnI,EACE,EAAA,EAAA,KAAC,GAAD,CAAa,UAAU,mBAAW,EAAK,SAAuB,CAAA,EAC9D,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mEAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,IAAK,EAAK,WAAY,IAAK,EAAK,SAAU,UAAU,2CAA6C,CAAA,EACtG,EAAA,EAAA,KAAC,SAAD,CAAQ,KAAK,SAAS,YAAe,EAAQ,GAAM,CAAE,UAAU,mGAAmG,MAAM,kBACtK,EAAA,EAAA,KAAC,EAAD,CAAG,UAAU,UAAY,CAAA,CAClB,CAAA,CACL,GACQ,GACT,CAAA,CAEV,CAAA,CAAA,CAIP,SAAgB,GAAS,CACvB,QACA,cACA,cACA,WACA,oBACA,uBACA,qBACA,eACA,WACA,eACA,mBACA,gBACA,YACA,UACA,gBACA,4BACA,SACA,gBACA,eACA,aACA,YACA,cAwBC,CACD,IAAM,GAAA,EAAA,EAAA,QAAwC,KAAK,CAC7C,CAAC,EAAY,IAAA,EAAA,EAAA,UAA0B,GAAM,CAC7C,EAAgB,CAAC,EAAM,MAAM,EAAI,IAAyB,GAAM,GAAqB,GAAe,EAE1G,OACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAW,GACT,wFACA,GAAc,sCACf,CACD,WAAa,GAAM,CAAE,EAAE,gBAAgB,CAAE,EAAc,GAAK,EAC5D,gBAAmB,EAAc,GAAM,CACvC,OAAS,GAAM,CACb,EAAE,gBAAgB,CAClB,EAAc,GAAM,CACpB,EAAc,EAAE,aAAa,MAAM,WAVvC,CAaG,EAAmB,OAAS,IAC3B,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0CACZ,EAAmB,IAAK,IACvB,EAAA,EAAA,KAAC,GAAD,CAA8C,OAAM,aAAgB,EAA0B,EAAK,GAAG,CAAI,CAA3E,EAAK,GAAsE,CAC1G,CACE,CAAA,EAER,EAAA,EAAA,KAAC,QAAD,CACE,IAAK,EACL,KAAK,OACL,SAAA,GACA,UAAU,SACV,SAAW,GAAM,CACX,EAAE,OAAO,OAAO,EAAc,EAAE,OAAO,MAAM,CACjD,EAAE,cAAc,MAAQ,IAE1B,CAAA,EACF,EAAA,EAAA,KAAC,GAAD,CAAc,QAAS,EAAc,YAAa,EAAkB,SAAU,EAAe,QAAS,EAAgB,CAAA,EACtH,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0CAAf,EACE,EAAA,EAAA,KAAC,EAAD,CACE,QAAQ,QACR,KAAK,OACL,MAAM,eACN,SAAU,EACV,YAAe,EAAa,SAAS,OAAO,CAC5C,UAAU,yDAEV,EAAA,EAAA,KAAC,EAAD,CAAW,UAAU,UAAY,CAAA,CAC1B,CAAA,EACT,EAAA,EAAA,KAAC,GAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAc,EAAE,OAAO,MAAM,CACnC,YACF,UACI,cACb,UAAU,SACV,CAAA,CACD,IACC,EAAA,EAAA,KAAC,EAAD,CACE,QAAQ,QACR,KAAK,OACL,MAAO,IAAa,YAAc,wBAA0B,eAC5D,SAAU,GAAe,IAAa,eACtC,cAAgB,GAAM,CAAE,EAAE,gBAAgB,CAAE,EAAE,cAAc,kBAAkB,EAAE,UAAU,CAAE,GAAY,EACxG,YAAc,GAAM,CAAE,EAAE,gBAAgB,CAAE,GAAI,CAAE,EAAE,cAAc,sBAAsB,EAAE,UAAU,MAAS,EAAiB,GAAW,EACvI,UAAW,gDAAgD,IAAa,YAAc,6BAA+B,cAEpH,IAAa,gBAAiB,EAAA,EAAA,KAAC,GAAD,CAAS,UAAU,uBAAyB,CAAA,EAAG,EAAA,EAAA,KAAC,GAAD,CAAK,UAAU,UAAY,CAAA,CAClG,CAAA,EAEX,EAAA,EAAA,KAAC,EAAD,CACE,KAAK,OACL,SAAU,EACV,QAAS,EACT,UAAU,yDAEV,EAAA,EAAA,KAAC,EAAD,CAAM,UAAU,UAAY,CAAA,CACrB,CAAA,CACL,IACN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+BAAf,EACE,EAAA,EAAA,KAAC,GAAD,CACE,MAAO,EACP,SAAW,GAAM,EAAc,EAAE,OAAO,MAAM,CACnC,YACF,UACI,cACb,UAAU,SACV,CAAA,EACF,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6CAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mCAAf,EACE,EAAA,EAAA,KAAC,EAAD,CACE,QAAQ,QACR,KAAK,OACL,MAAM,eACN,SAAU,EACV,YAAe,EAAa,SAAS,OAAO,CAC5C,UAAU,+BAEV,EAAA,EAAA,KAAC,EAAD,CAAW,UAAU,UAAY,CAAA,CAC1B,CAAA,CACR,IACC,EAAA,EAAA,KAAC,EAAD,CACE,QAAQ,QACR,KAAK,OACL,MAAO,IAAa,YAAc,wBAA0B,eAC5D,SAAU,GAAe,IAAa,eACtC,cAAgB,GAAM,CAAE,EAAE,gBAAgB,CAAE,EAAE,cAAc,kBAAkB,EAAE,UAAU,CAAE,GAAY,EACxG,YAAc,GAAM,CAAE,EAAE,gBAAgB,CAAE,GAAI,CAAE,EAAE,cAAc,sBAAsB,EAAE,UAAU,MAAS,EAAiB,GAAW,EACvI,UAAW,sBAAsB,IAAa,YAAc,6BAA+B,cAE1F,IAAa,gBAAiB,EAAA,EAAA,KAAC,GAAD,CAAS,UAAU,uBAAyB,CAAA,EAAG,EAAA,EAAA,KAAC,GAAD,CAAK,UAAU,UAAY,CAAA,CAClG,CAAA,CAEP,IACN,EAAA,EAAA,KAAC,EAAD,CACE,KAAK,OACL,SAAU,EACV,QAAS,EACT,UAAU,+BAEV,EAAA,EAAA,KAAC,EAAD,CAAM,UAAU,UAAY,CAAA,CACrB,CAAA,CACL,GACF,GACL,IACC,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,gEACV,EACC,CAAA,CAEF,oBC9RV,SAAgB,GAAoB,CAClC,UACA,QACA,cACA,eACA,gBAOC,CACD,GAAM,CAAE,UAAW,EAEb,EAAQ,KAAK,IAAI,IAAK,OAAO,WAAa,GAAG,CAC7C,EAAS,KAAK,IAAI,IAAK,OAAO,YAAc,GAAG,CAC/C,EAAO,KAAK,IAAI,GAAI,KAAK,IAAI,EAAO,KAAM,OAAO,WAAa,EAAQ,GAAG,CAAC,CAQhF,OAAA,EAAA,GAAA,eACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAU,mGACV,MAAO,CAAE,IAVM,OAAO,YAAc,EAAO,QACrB,EAAS,EAC/B,EAAO,OAAS,EAChB,EAAO,IAAM,EAAM,GAAU,GAC3B,EAAO,IAAM,EAAM,EACnB,KAAK,IAAI,GAAI,OAAO,YAAc,EAAS,GAAG,CAKlC,OAAM,QAAO,SAAQ,CACrB,eACA,wBAJhB,EAME,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,8EAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,iFAAyE,EAAQ,KAAY,CAAA,CAC5G,IAAS,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,2DAAmD,EAAa,CAAA,EAC1F,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,yDAAgD,eAAmB,CAAA,CAC/E,IACN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0BACZ,EAAQ,OAAS,aAChB,EAAA,EAAA,KAAC,GAAD,CAAkB,eAAgB,EAAQ,eAAgB,aAAc,EAAQ,KAAmB,cAAe,CAAA,EAElH,EAAA,EAAA,KAAC,GAAD,CAAa,eAAgB,EAAQ,eAAgB,aAAc,EAAQ,KAAM,KAAM,EAAQ,KAAmB,cAAe,CAAA,CAE/H,CAAA,CACF,GACN,SAAS,KACV,CChDH,IAAM,GAAkC,EAAE,CAE1C,SAAgB,GAAqB,EAAgC,CACnE,OAAO,EAAe,GAAM,EAAE,iBAAiB,IAAY,GAAiB,CCH9E,SAAgB,GAAqB,EAAmB,EAAoB,CAC1E,IAAM,GAAA,EAAA,EAAA,QAA0B,GAAM,EAEtC,EAAA,EAAA,eAAgB,CACd,GAAI,CAAC,EAAU,OAEf,AAEE,EAAiB,WADjB,OAAO,QAAQ,UAAU,CAAE,UAAW,GAAM,CAAE,GAAG,CACtB,IAG7B,SAAS,EAAe,EAAkB,EACpC,EAAE,OAAO,YAAc,IAAA,IAAa,CAAC,EAAiB,WAExD,OAAO,QAAQ,UAAU,CAAE,UAAW,GAAM,CAAE,GAAG,CACjD,GAAQ,EAIZ,SAAS,EAAmB,EAAsB,CAChD,EAAE,gBAAgB,CAKpB,OAFA,OAAO,iBAAiB,WAAY,EAAe,CACnD,OAAO,iBAAiB,eAAgB,EAAmB,KAC9C,CACX,OAAO,oBAAoB,WAAY,EAAe,CACtD,OAAO,oBAAoB,eAAgB,EAAmB,GAE/D,CAAC,EAAU,EAAO,CAAC,EAEtB,EAAA,EAAA,eAAgB,CACV,CAAC,GAAY,EAAiB,UAChC,EAAiB,QAAU,KAE5B,CAAC,EAAS,CAAC,CC7BhB,SAAgB,GAAa,EAAc,EAAwB,CACjE,IAAM,EAAW,EAAK,aAAa,CAC7B,EAAS,EAAM,MAAM,CAAC,aAAa,CASzC,OARK,EACD,EAAS,SAAS,EAAO,CAAS,GAGlC,KAAK,KAAK,EAAO,EAGjB,EAAO,OAAS,EAAU,GACvB,GAAc,EAAU,EAAO,CARlB,GAatB,SAAS,GAAc,EAAkB,EAAgB,EAAS,EAAY,CAC5E,IAAI,EAAI,EACJ,EAAY,GAChB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAS,QAAU,EAAI,EAAO,OAAQ,GAAK,EAC7D,GAAI,EAAS,KAAO,EAAO,GAAI,CAC7B,GAAI,IAAc,IAAM,EAAI,EAAY,EAAI,EAAQ,MAAO,GAC3D,EAAY,EACZ,GAAK,EAGT,OAAO,IAAM,EAAO,OAKtB,SAAgB,GAAe,EAA2B,EAAyB,CACjF,IAAM,EAAS,EAAM,MAAM,CAC3B,GAAI,CAAC,EAAQ,MAAO,EAAE,CACtB,IAAM,EAAiB,EAAE,CACzB,IAAK,IAAM,KAAS,EAAU,CAC5B,IAAM,EAAO,GAAkB,EAAM,CACjC,GAAQ,GAAa,EAAM,EAAO,EAAE,EAAK,KAAK,GAAiB,EAAM,CAAC,CAE5E,OAAO,ECpBT,SAAgB,GAAc,EAAuC,CACnE,GAAM,CAAC,EAAM,IAAA,EAAA,EAAA,UAAoB,GAAM,CACjC,CAAC,EAAO,IAAA,EAAA,EAAA,UAA0B,GAAG,CACrC,CAAC,EAAO,IAAA,EAAA,EAAA,UAAqB,EAAE,CAE/B,GAAA,EAAA,EAAA,aAA2B,EAAO,GAAe,EAAU,EAAM,CAAG,EAAE,CAAG,CAAC,EAAM,EAAO,EAAS,CAAC,CACjG,GAAA,EAAA,EAAA,aAA4B,IAAI,IAAI,EAAU,CAAE,CAAC,EAAU,CAAC,CAC5D,EAAQ,EAAU,OAClB,EAAY,EAAQ,KAAK,IAAI,EAAO,EAAQ,EAAE,CAAG,EACjD,EAAa,EAAQ,EAAU,IAAc,KAAO,KAEpD,GAAA,EAAA,EAAA,iBAA+B,EAAQ,GAAK,CAAE,EAAE,CAAC,CACjD,GAAA,EAAA,EAAA,iBAA0B,CAC9B,EAAQ,GAAM,CACd,EAAc,GAAG,CACjB,EAAS,EAAE,EACV,EAAE,CAAC,CAEA,GAAA,EAAA,EAAA,aAAwB,GAAkB,CAC9C,EAAc,EAAM,CACpB,EAAS,EAAE,EACV,EAAE,CAAC,CACA,GAAA,EAAA,EAAA,iBAAyB,CAC7B,EAAU,GAAO,GAAS,EAAI,GAAK,EAAQ,EAAG,EAC7C,CAAC,EAAM,CAAC,CACL,GAAA,EAAA,EAAA,iBAAyB,CAC7B,EAAU,GAAO,GAAS,EAAI,EAAI,GAAS,EAAQ,EAAG,EACrD,CAAC,EAAM,CAAC,CAEX,MAAO,CACL,OACA,QACA,YACA,cACA,QACA,SAAU,EAAQ,EAAY,EAAI,EAClC,aACA,aACA,QACA,WACA,OACA,OACD,CCnEH,IAAM,GAAe,IAQrB,SAAgB,GAAqB,EAAiB,EAAuB,CAC3E,IAAM,EAAmB,EAAe,GAAM,EAAE,iBAAiB,CAC3D,GAAA,EAAA,EAAA,QAAmB,EAAO,CAChC,EAAU,QAAU,GAIpB,EAAA,EAAA,eAAgB,CACd,GAAI,CAAC,EAAS,OACd,EAAsB,EAAS,EAAU,QAAQ,CACjD,IAAM,EAAQ,gBAAkB,CAAE,EAAsB,EAAS,EAAU,QAAQ,EAAI,GAAa,CACpG,UAAa,CACX,cAAc,EAAM,CACpB,EAAsB,EAAS,GAAO,GAAK,GAE5C,CAAC,EAAS,EAAiB,CAAC,EAG/B,EAAA,EAAA,eAAgB,CACT,GACL,EAAsB,EAAS,EAAO,EACrC,CAAC,EAAS,EAAQ,EAAiB,CAAC,CC7BzC,IAAM,GAAK,EAAG,GAAK,EAAG,GAAK,EAAG,GAAK,EACnC,SAAS,GAAG,EAAG,CACb,UAAa,EAEf,SAAS,GAAG,EAAG,CACb,GAAG,CAEL,SAAS,GAAG,EAAG,EAAG,CAChB,MAAQ,IAAM,EAAE,EAAE,EAAE,CAAC,CAEvB,SAAS,GAAG,EAAG,EAAG,CAChB,UAAa,EAAE,EAAE,CAEnB,SAAS,GAAG,EAAG,EAAG,CAChB,MAAQ,IAAM,EAAE,EAAG,EAAE,CAEvB,SAAS,GAAG,EAAG,CACb,OAAO,IAAM,IAAK,GAEpB,SAAS,GAAG,GAAG,EAAG,CAChB,UAAa,CACX,EAAE,IAAI,GAAG,EAGb,SAAS,IAAK,EAEd,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,EAAE,EAAE,CAAE,EAEf,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,EAAE,EAAE,CAEb,SAAS,EAAG,GAAG,EAAG,CAChB,OAAO,EAET,SAAS,EAAE,EAAG,EAAG,CACf,OAAO,EAAE,GAAI,EAAE,CAEjB,SAAS,EAAE,EAAG,EAAG,CACf,EAAE,GAAI,EAAE,CAEV,SAAS,GAAG,EAAG,CACb,EAAE,GAAG,CAEP,SAAS,EAAG,EAAG,CACb,OAAO,EAAE,GAAG,CAEd,SAAS,EAAE,EAAG,EAAG,CACf,OAAO,EAAE,EAAG,GAAG,EAAG,GAAG,CAAC,CAExB,SAAS,GAAG,EAAG,EAAG,CAChB,IAAM,EAAI,EAAE,GAAK,GAAM,CACrB,GAAG,CAAE,EAAE,EAAE,EACT,CACF,OAAO,EAET,SAAS,GAAG,EAAG,CACb,IAAI,EAAG,EACP,MAAQ,IAAO,GAAM,CACnB,EAAI,EAAG,GAAK,aAAa,EAAE,CAAE,EAAI,eAAiB,CAChD,EAAE,EAAE,EACH,EAAE,EAGT,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,IAAM,EAEf,SAAS,EAAG,EAAI,GAAI,CAClB,IAAI,EACJ,MAAQ,IAAO,GAAM,CACnB,EAAE,EAAG,EAAE,GAAK,EAAI,EAAG,EAAE,EAAE,GAG3B,SAAS,EAAE,EAAG,CACZ,MAAQ,IAAO,GAAM,CACnB,EAAE,EAAE,EAAI,EAAE,EAAE,EAGhB,SAAS,EAAE,EAAG,CACZ,MAAQ,IAAM,GAAG,EAAG,EAAE,CAExB,SAAS,GAAG,EAAG,CACb,MAAQ,QAAY,CAClB,EAAE,EAAE,EAGR,SAAS,EAAE,EAAG,GAAG,EAAG,CAClB,IAAM,EAAI,GAAG,GAAG,EAAE,CAClB,QAAS,EAAG,IAAM,CAChB,OAAQ,EAAR,CACE,KAAK,GACH,GAAG,EAAE,CACL,OACF,KAAK,GACH,OAAO,EAAE,EAAG,EAAE,EAAE,CAAC,IAIzB,SAAS,GAAG,EAAG,EAAG,CAChB,MAAQ,IAAO,GAAM,CACnB,EAAE,EAAI,EAAE,EAAG,EAAE,CAAC,EAGlB,SAAS,GAAG,EAAG,CACb,MAAQ,IAAO,GAAM,CACnB,EAAI,EAAI,IAAM,EAAE,EAAE,EAGtB,SAAS,GAAG,EAAG,CACb,IAAI,EAAI,KAAM,EACd,MAAQ,IAAO,GAAM,CACnB,EAAI,EAAG,CAAC,IAAM,EAAI,eAAiB,CACjC,EAAI,IAAK,GAAG,EAAE,EAAE,EACf,EAAE,GAGT,SAAS,EAAE,GAAG,EAAG,CACf,IAAM,EAAQ,MAAM,EAAE,OAAO,CACzB,EAAI,EAAG,EAAI,KACT,EAAI,GAAK,EAAE,OAAS,EAC1B,OAAO,EAAE,SAAS,EAAG,IAAM,CACzB,IAAM,EAAI,GAAK,EACf,EAAE,EAAI,GAAM,CACV,IAAM,EAAI,EACV,GAAK,EAAG,EAAE,GAAK,EAAG,IAAM,GAAK,IAAM,GAAK,IAAM,GAAG,CAAE,EAAI,OACvD,EACF,CAAG,GAAO,GAAM,CAChB,IAAM,MAAU,CACd,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,EAElB,IAAM,EAAI,GAAG,CAAG,EAAI,GAGxB,SAAS,GAAG,GAAG,EAAG,CAChB,MAAQ,IAAM,EAAE,YAAY,GAAI,EAAE,CAEpC,SAAS,GAAG,EAAG,CACb,IAAI,EAAG,EACD,MAAU,KAAK,CACrB,OAAO,SAAS,EAAG,EAAG,CACpB,OAAQ,EAAR,CACE,KAAK,GACH,OAAO,EAAI,IAAM,EAAI,IAAK,IAAK,GAAG,CAAE,EAAI,EAAG,EAAI,EAAE,EAAG,EAAE,CAAE,IAAM,GAAG,CAAE,IACrE,KAAK,GACH,GAAG,CAAE,EAAI,KACT,SAIR,SAAS,EAAE,EAAG,CACZ,IAAI,EAAI,EACF,EAAI,GAAG,CACb,QAAS,EAAG,IAAM,CAChB,OAAQ,EAAR,CACE,KAAK,GACH,EAAI,EACJ,MACF,KAAK,GACH,EAAE,EAAE,CACJ,MAEF,KAAK,GACH,OAAO,EAEX,OAAO,EAAE,EAAG,EAAE,GAGlB,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,GAAG,EAAE,EAAE,CAAG,GAAM,EAAE,EAAG,EAAE,CAAC,CAEjC,SAAS,GAAI,CACX,IAAM,EAAI,EAAE,CACZ,QAAS,EAAG,IAAM,CAChB,OAAQ,EAAR,CACE,KAAK,GACH,EAAE,OAAO,CAAC,QAAS,GAAM,CACvB,EAAE,EAAE,EACJ,CACF,OACF,KAAK,GACH,EAAE,OAAO,EAAG,EAAE,OAAO,CACrB,OACF,KAAK,GACH,OAAO,EAAE,KAAK,EAAE,KAAQ,CACtB,IAAM,EAAI,EAAE,QAAQ,EAAE,CACtB,EAAI,IAAM,EAAE,OAAO,EAAG,EAAE,KAKlC,SAAS,GAAG,EAAG,CACb,OAAO,GAAG,GAAG,CAAG,GAAM,EAAE,EAAG,EAAE,CAAC,CAEhC,SAAS,EAAE,EAAG,EAAI,EAAE,CAAE,CAAE,UAAW,GAAM,CAAE,UAAW,CAAC,EAAG,CAAE,CAC1D,MAAO,CACL,YAAa,EACb,aAAc,EACd,GAAI,IAAI,CACR,UAAW,EACZ,CAEH,IAAM,OAAW,QAAQ,CACzB,SAAS,GAAG,EAAG,CACb,IAAM,EAAoB,IAAI,IAAO,GAAK,CAAE,YAAa,EAAG,aAAc,EAAG,GAAI,EAAG,UAAW,KAAQ,CACrG,GAAI,GAAK,EAAE,IAAI,EAAE,CACf,OAAO,EAAE,IAAI,EAAE,CACjB,IAAM,EAAI,EAAE,EAAE,IAAK,GAAM,EAAE,EAAE,CAAC,CAAC,CAC/B,OAAO,GAAK,EAAE,IAAI,EAAG,EAAE,CAAE,GAE3B,OAAO,EAAE,EAAE,CAEb,SAAS,GAAG,GAAG,EAAG,CAChB,IAAM,EAAI,GAAG,CAAE,EAAQ,MAAM,EAAE,OAAO,CAClC,EAAI,EACF,EAAI,GAAK,EAAE,OAAS,EAC1B,OAAO,EAAE,SAAS,EAAG,IAAM,CACzB,IAAM,EAAI,GAAK,EACf,EAAE,EAAI,GAAM,CACV,EAAE,GAAK,EAAG,GAAK,EAAG,IAAM,GAAK,EAAE,EAAG,EAAE,EACpC,EACF,CAAE,SAAS,EAAG,EAAG,CACjB,OAAQ,EAAR,CACE,KAAK,GACH,GAAG,EAAE,CACL,OAEF,KAAK,GACH,OAAO,IAAM,GAAK,EAAE,EAAE,CAAE,EAAE,EAAG,EAAE,GAIvC,SAAS,EAAE,EAAG,EAAI,GAAI,CACpB,OAAO,EAAE,EAAG,EAAG,EAAE,CAAC,CAEpB,SAAS,GAAG,GAAG,EAAG,CAChB,OAAO,SAAS,EAAG,EAAG,CACpB,OAAQ,EAAR,CACE,KAAK,GACH,OACF,KAAK,GACH,OAAO,GAAG,GAAG,EAAE,IAAK,GAAM,EAAE,EAAG,EAAE,CAAC,CAAC,GAI3C,IAAM,GAAK,CAET,MAAO,EAEP,KAAM,EAEN,KAAM,EAEN,MAAO,EACR,CAAE,GAAK,EACL,GAAG,OAAQ,SACX,GAAG,OAAQ,SACX,GAAG,MAAO,OACV,GAAG,MAAO,OACZ,CAAE,OAAW,OAAO,WAAa,IAAM,OAAS,WAAY,GAAK,MAC1D,CACJ,IAAM,EAAI,EAAE,GAAG,MAAM,CACrB,MAAO,CACL,IAAK,GAAG,EAAG,EAAG,EAAI,GAAG,OAAS,CAE5B,IADU,IAAI,CAAC,oBAAsB,EAAG,EAAE,GAChC,QAAQ,GAAG,IACnB,4BACA,oCACA,iBACA,EACA,EACD,EACD,CACF,SAAU,EACX,EAEH,EAAE,CACF,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAqB,IAAI,QAC5B,SAAS,GAAG,EAAG,CACb,MAAO,SAAU,EAAI,EAAE,SAAS,gBAAkB,EAEpD,SAAS,GAAG,EAAG,CACb,IAAM,EAAI,GAAG,EAAE,CAAE,EAAI,GAAG,IAAI,EAAE,CAC9B,GAAI,IAAM,IAAK,GACb,OAAO,EACT,IAAM,EAAI,EAAE,cAAc,YAAY,iBAAiB,EAAE,CAAC,YAAc,MACxE,OAAO,GAAG,IAAI,EAAG,EAAE,CAAE,EAEvB,SAAS,GAAG,EAAG,CACb,GAAG,OAAO,GAAG,EAAE,CAAC,CAElB,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,GAAG,EAAE,CAAG,CAAC,EAAI,EAEtB,IAAM,GAAK,GACX,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,GAAG,EAAG,EAAE,CAEjB,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,GAAG,EAAG,EAAG,EAAE,CAAC,YAErB,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,IAAM,EAAA,EAAM,OAAO,KAAK,CACpB,EAAK,GAAM,GAET,EAAA,EAAM,YAAc,OAAO,eAAiB,IAAM,IAAI,eAAgB,GAAM,CAChF,IAAM,MAAU,CACd,IAAM,EAAI,EAAE,GAAG,OACf,EAAE,eAAiB,MAAQ,EAAE,EAAE,EAEjC,EAAI,GAAG,CAAG,sBAAsB,EAAE,EAClC,CAAG,KAAM,CAAC,EAAG,EAAE,CAAC,CAClB,MAAO,GAAK,GAAM,CAChB,GAAK,GAAK,GAAG,QAAQ,EAAE,CAAE,EAAE,QAAU,IAAM,EAAE,SAAW,GAAG,UAAU,EAAE,QAAQ,CAAE,EAAE,QAAU,OAC5F,CAAE,YAAa,EAAG,IAAK,EAAG,CAE/B,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAqBrC,OAAO,GAAA,EApBK,YACT,GAAM,CACL,IAAM,EAAI,GAAG,EAAE,SAAU,EAAG,EAAI,cAAgB,eAAgB,EAAE,CAC9D,EAAI,EAAE,cACV,KAAO,EAAE,QAAQ,mBAAqB,IAAK,IACzC,EAAI,EAAE,cACR,IAAM,EAAI,EAAE,iBAAiB,QAAQ,eAAiB,SAClD,EACJ,IAAM,EAAI,EAAE,cAAc,aAC1B,IAAM,EAAI,EAAI,EAAI,EAAE,YAAc,EAAE,aAAe,EAAI,EAAI,EAAE,SAAS,gBAAgB,YAAc,EAAE,SAAS,gBAAgB,aAAe,EAAI,EAAE,YAAc,EAAE,aAAc,EAAI,EAAI,EAAI,EAAE,YAAc,EAAE,aAAe,EAAI,EAAI,EAAE,WAAa,EAAE,YAAc,EAAI,EAAE,YAAc,EAAE,aAAc,EAAI,EAAI,EAAI,GAAG,EAAG,EAAE,WAAW,CAAG,EAAE,UAAY,EAAI,EAAI,GAAG,EAAG,EAAE,SAAW,EAAE,SAAS,gBAAgB,WAAW,CAAG,EAAE,SAAW,EAAE,SAAS,gBAAgB,UAAY,EAAI,GAAG,EAAG,EAAE,WAAW,CAAG,EAAE,UAC9e,EAAE,CACA,aAAc,EACd,UAAW,KAAK,IAAI,EAAG,EAAE,CACzB,eAAgB,EACjB,CAAC,CAAE,IACF,EAAI,GAAG,aAAc,iBAAiB,EAAE,CAAC,UAAW,EAAE,CAAG,GAAG,UAAW,iBAAiB,EAAE,CAAC,OAAQ,EAAE,CACtG,CAAE,IAAM,MAAQ,EAAE,EAAE,EAEvB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CAEZ,CAAE,EAAG,EAAE,CAEpB,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,CACtB,IAAM,EAAI,EAAE,OACZ,GAAI,IAAM,EACR,OAAO,KACT,IAAM,EAAI,EAAE,CACZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,IAAM,EAAI,EAAE,KAAK,EAAE,CACnB,GAAI,EAAE,QAAQ,QAAU,IAAK,GAC3B,SACF,IAAM,EAAI,SAAS,EAAE,QAAQ,MAAM,CAAE,EAAI,WAAW,EAAE,QAAQ,UAAU,CAAE,EAAI,EAAE,EAAG,EAAE,CACrF,GAAI,IAAM,GAAK,EAAE,6CAA8C,CAAE,MAAO,EAAG,CAAE,GAAG,MAAM,CAAE,IAAM,EAC5F,SACF,IAAM,EAAI,EAAE,EAAE,OAAS,GACvB,EAAE,SAAW,GAAK,EAAE,OAAS,GAAK,EAAE,WAAa,EAAI,EAAI,EAAE,KAAK,CAAE,SAAU,EAAG,KAAM,EAAG,WAAY,EAAG,CAAC,CAAG,EAAE,EAAE,OAAS,GAAG,WAE7H,OAAO,EAET,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,IAAM,UAAY,GAAG,SAAS,KAAK,GAAK,CAAC,GAAK,EAAE,GAAG,EAAE,4CAA6C,EAAG,GAAG,KAAK,CAAE,IAAM,SAAW,EAAI,SAAS,GAAK,IAAK,GAAG,CAEnK,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,IAAM,EAAA,EAAM,OAAO,KAAK,CAAE,EAAA,EAAM,YAC7B,GAAM,CACL,GAAI,CAAC,GAAG,aACN,OACF,IAAM,EAAI,EAAE,uBAAuB,CAAE,EAAI,EAAE,MACvC,EAAG,EACP,GAAI,EAAG,CACL,IAAM,EAAI,EAAE,uBAAuB,CAAE,EAAI,EAAE,IAAM,EAAE,IACnD,EAAI,EAAE,OAAS,KAAK,IAAI,EAAG,EAAE,CAAE,EAAI,EAAI,EAAE,cACpC,CACL,IAAM,EAAI,EAAE,QAAQ,cAAc,YAClC,EAAI,EAAE,YAAc,KAAK,IAAI,EAAG,EAAE,IAAI,CAAE,EAAI,EAAE,IAAM,EAAE,QAExD,EAAE,QAAU,CACV,WAAY,EAAE,OACd,UAAW,EACX,cAAe,EACf,aAAc,EACf,CAAE,EAAE,EAAE,QAAQ,EAGjB,CAAC,EAAG,EAAE,CACP,CAAE,CAAE,YAAa,EAAG,IAAK,GAAM,GAAG,EAAG,CAAC,EAAG,EAAE,CAAE,EAAA,EAAM,gBAAkB,CACpE,EAAE,EAAE,QAAQ,EACX,CAAC,EAAG,EAAE,CAAC,CACV,OAAA,EAAS,cAAgB,CACvB,GAAI,EAAG,CACL,EAAE,iBAAiB,SAAU,EAAE,CAC/B,IAAM,EAAI,IAAI,mBAAqB,CACjC,sBAAsB,EAAE,EACxB,CACF,OAAO,EAAE,QAAQ,EAAE,KAAQ,CACzB,EAAE,oBAAoB,SAAU,EAAE,CAAE,EAAE,UAAU,EAAE,EAGtD,IAAM,EAAI,EAAE,SAAS,cAAc,YACnC,OAAO,GAAG,iBAAiB,SAAU,EAAE,CAAE,GAAG,iBAAiB,SAAU,EAAE,KAAQ,CAC/E,GAAG,oBAAoB,SAAU,EAAE,CAAE,GAAG,oBAAoB,SAAU,EAAE,GAEzE,CAAC,EAAG,EAAG,EAAE,CAAC,CAAE,EAEjB,IAAM,GAAK,MACH,CACJ,IAAM,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,EAAE,CAAC,EAAE,CAChK,OAAO,EACL,EACE,EACA,GAAG,CAAE,UAAW,KAAQ,EAAE,CAC3B,CACD,EACD,CAAE,EACD,EACE,EACA,GAAG,CAAE,aAAc,KAAQ,EAAE,CAC9B,CACD,EACD,CAAE,EAAE,EAAG,EAAE,CAAE,CACV,UAAW,EACX,kBAAmB,EACnB,kBAAmB,EACnB,aAAc,EACd,aAAc,EACd,oBAAqB,EACrB,SAAU,EAEV,qBAAsB,EACtB,aAAc,EACd,oBAAqB,EAErB,SAAU,EACV,UAAW,EACX,mCAAoC,EACpC,0BAA2B,EAE3B,kBAAmB,EACnB,eAAgB,EACjB,EAEH,EAAE,CACF,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,CAAE,IAAK,EAAG,CAClB,SAAS,GAAG,EAAG,EAAG,CAChB,IAAM,EAAI,EAAE,OACZ,GAAI,IAAM,EACR,MAAO,EAAE,CACX,GAAI,CAAE,MAAO,EAAG,MAAO,GAAM,EAAE,EAAE,GAAG,CAC9B,EAAI,EAAE,CACZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAG,IAAK,CAC1B,GAAM,CAAE,MAAO,EAAG,MAAO,GAAM,EAAE,EAAE,GAAG,CACtC,EAAE,KAAK,CAAE,IAAK,EAAI,EAAG,MAAO,EAAG,MAAO,EAAG,CAAC,CAAE,EAAI,EAAG,EAAI,EAEzD,OAAO,EAAE,KAAK,CAAE,IAAK,IAAO,MAAO,EAAG,MAAO,EAAG,CAAC,CAAE,EAErD,SAAS,EAAE,EAAG,CACZ,OAAO,IAAM,GAEf,SAAS,GAAG,EAAG,EAAG,CAChB,GAAI,CAAC,EAAE,EAAE,CACP,OAAO,IAAM,EAAE,EAAI,EAAE,EAAI,EAAI,EAAE,EAAI,GAAG,EAAE,EAAG,EAAE,CAAG,GAAG,EAAE,EAAG,EAAE,CAE9D,SAAS,GAAG,EAAG,EAAG,EAAI,IAAK,CACzB,GAAI,EAAE,EAAE,CACN,MAAO,CAAC,KAAQ,IAAK,GAAE,CACzB,GAAI,OAAO,EAAE,GAAG,GAAK,EACnB,MAAO,CAAC,EAAE,EAAG,EAAE,EAAE,CACnB,GAAI,OAAO,EAAE,GAAG,CAAG,EAAG,CACpB,IAAM,EAAI,GAAG,EAAE,EAAG,EAAG,EAAE,CACvB,OAAO,EAAE,KAAO,KAAS,CAAC,EAAE,EAAG,EAAE,EAAE,CAAG,EAExC,OAAO,GAAG,EAAE,EAAG,EAAG,EAAE,CAEtB,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,EAAE,EAAE,CAAG,GAAG,EAAG,EAAG,EAAE,CAAG,IAAM,EAAE,EAAI,GAAG,EAAG,CAAE,EAAG,EAAG,EAAG,EAAG,CAAC,CAAG,EAAI,EAAE,EAAI,GAAG,GAAG,EAAG,CAAE,EAAG,GAAG,EAAE,EAAG,EAAG,EAAE,CAAE,CAAC,CAAC,CAAG,GAAG,GAAG,EAAG,CAAE,EAAG,GAAG,EAAE,EAAG,EAAG,EAAE,CAAE,CAAC,CAAC,CAE7I,SAAS,IAAK,CACZ,OAAO,GAET,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,GAAI,EAAE,EAAE,CACN,MAAO,EAAE,CACX,IAAM,EAAI,GAAG,EAAG,EAAE,CAAC,GACnB,OAAO,GAAG,GAAG,EAAG,EAAG,EAAE,CAAC,CAExB,SAAS,GAAG,EAAG,EAAG,CAChB,GAAI,EAAE,EAAE,CACN,OAAO,GACT,GAAM,CAAE,EAAG,EAAG,EAAG,EAAG,KAAM,EAC1B,GAAI,IAAM,EAAG,CACX,GAAI,EAAE,EAAE,CACN,OAAO,EACT,GAAI,EAAE,EAAE,CACN,OAAO,EACT,GAAM,CAAC,EAAG,GAAK,GAAG,EAAE,CACpB,OAAO,GAAG,GAAG,EAAG,CAAE,EAAG,EAAG,EAAG,GAAG,EAAE,CAAE,EAAG,EAAG,CAAC,CAAC,CAE5C,OAAe,GAAR,EAAI,EAAO,GAAG,EAAG,CAAE,EAAG,GAAG,EAAG,EAAE,CAAE,CAAC,CAAO,GAAG,EAAG,CAAE,EAAG,GAAG,EAAG,EAAE,CAAE,CAAC,CAAC,CAExE,SAAS,GAAG,EAAG,CACb,OAAO,EAAE,EAAE,CAAG,EAAE,CAAG,CAAC,GAAG,GAAG,EAAE,EAAE,CAAE,CAAE,EAAG,EAAE,EAAG,EAAG,EAAE,EAAG,CAAE,GAAG,GAAG,EAAE,EAAE,CAAC,CAEjE,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,GAAI,EAAE,EAAE,CACN,MAAO,EAAE,CACX,GAAM,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAM,EAC/B,EAAI,EAAE,CACV,OAAO,EAAI,IAAM,EAAI,EAAE,OAAO,GAAG,EAAG,EAAG,EAAE,CAAC,EAAG,GAAK,GAAK,GAAK,GAAK,EAAE,KAAK,CAAE,EAAG,EAAG,EAAG,EAAG,CAAC,CAAE,GAAK,IAAM,EAAI,EAAE,OAAO,GAAG,EAAG,EAAG,EAAE,CAAC,EAAG,EAElI,SAAS,GAAG,EAAG,CACb,GAAM,CAAE,EAAG,EAAG,IAAK,EAAM,GAAM,EAC/B,GAAI,EAAE,KAAO,EAAI,GAAK,EAAE,KAAO,EAAI,EACjC,OAAO,EACT,GAAI,EAAI,EAAE,IAAM,EAAG,CACjB,GAAI,GAAG,EAAE,CACP,OAAO,GAAG,GAAG,EAAG,CAAE,IAAK,EAAI,EAAG,CAAC,CAAC,CAClC,GAAI,CAAC,EAAE,EAAE,EAAI,CAAC,EAAE,EAAE,EAAE,CAClB,OAAO,GAAG,EAAE,EAAG,CACb,EAAG,GAAG,EAAG,CAAE,EAAG,EAAE,EAAE,EAAG,CAAC,CACtB,IAAK,EACL,EAAG,GAAG,EAAG,CACP,EAAG,EAAE,EAAE,EACP,IAAK,EAAI,EACV,CAAC,CACH,CAAC,CACJ,MAAU,MAAM,yBAAyB,CAE3C,GAAI,GAAG,EAAE,CACP,OAAO,GAAG,GAAG,EAAG,CAAE,IAAK,EAAI,EAAG,CAAC,CAAC,CAClC,GAAI,CAAC,EAAE,EAAE,EAAI,CAAC,EAAE,EAAE,EAAE,CAAE,CACpB,IAAM,EAAI,EAAE,EAAG,EAAI,GAAG,EAAE,CAAG,EAAE,IAAM,EAAI,EAAE,IACzC,OAAO,GAAG,EAAG,CACX,EAAG,GAAG,EAAG,CACP,IAAK,EAAI,EACT,EAAG,EAAE,EACN,CAAC,CACF,IAAK,EAAE,IAAM,EACb,EAAG,GAAG,GAAG,EAAG,CAAE,EAAG,EAAE,EAAG,IAAK,EAAG,CAAC,CAAC,CACjC,CAAC,CAEJ,MAAU,MAAM,yBAAyB,CAE3C,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,GACL,EAAE,IAAM,IAAK,GAAU,EAAE,EAAR,EAAE,EACnB,EAAE,IAAM,IAAK,GAAU,EAAE,EAAR,EAAE,EACnB,EAAE,MAAQ,IAAK,GAAY,EAAE,IAAV,EAAE,IACrB,EAAE,IAAM,IAAK,GAAU,EAAE,EAAR,EAAE,EACnB,EAAE,IAAM,IAAK,GAAU,EAAE,EAAR,EAAE,EACpB,CAEH,SAAS,GAAG,EAAG,CACb,OAAO,EAAE,EAAE,EAAE,CAAG,EAAE,EAAI,GAAG,GAAG,EAAG,CAAE,EAAG,GAAG,EAAE,EAAE,CAAE,CAAC,CAAC,CAEjD,SAAS,GAAG,EAAG,CACb,OAAO,EAAE,EAAE,EAAI,EAAE,IAAM,EAAE,EAAE,IAE7B,SAAS,GAAG,EAAG,CACb,OAAO,EAAE,EAAE,EAAE,CAAG,CAAC,EAAE,EAAG,EAAE,EAAE,CAAG,GAAG,EAAE,EAAE,CAEtC,SAAS,GAAG,EAAG,EAAG,EAAG,EAAI,GAAI,EAAI,GAAI,CACnC,MAAO,CAAE,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,IAAG,EAAG,EAAG,CAExC,SAAS,GAAG,EAAG,CACb,OAAO,GAAG,GAAG,EAAE,CAAC,CAElB,SAAS,GAAG,EAAG,CACb,GAAM,CAAE,EAAG,GAAM,EACjB,MAAO,CAAC,EAAE,EAAE,EAAI,EAAE,MAAQ,EAAE,IAAM,GAAG,EAAG,CAAE,EAAG,GAAG,EAAG,CAAE,EAAG,EAAE,EAAG,CAAC,CAAE,CAAC,CAAG,EAEtE,SAAS,GAAG,EAAG,CACb,GAAM,CAAE,IAAK,EAAG,EAAG,GAAM,EACzB,MAAO,CAAC,EAAE,EAAE,EAAI,CAAC,EAAE,EAAE,EAAE,EAAI,EAAE,MAAQ,GAAK,EAAE,EAAE,MAAQ,EAAI,GAAG,EAAG,CAAE,EAAG,GAAG,EAAG,CAAE,EAAG,EAAE,EAAG,CAAC,CAAE,IAAK,EAAI,EAAG,CAAC,CAAG,EAE1G,SAAS,GAAG,EAAG,CACb,OAAO,GAAG,GAAI,CAAE,EAAG,EAAG,EAAG,MAAS,CAAE,MAAO,EAAG,MAAO,EAAG,EAAE,CAE5D,SAAS,GAAG,EAAG,EAAG,CAChB,MAAO,CAAC,EAAE,GAAK,EAAE,aAAe,EAAE,YAAc,EAAE,WAAa,EAAE,UAEnE,SAAS,GAAG,EAAG,EAAG,CAChB,MAAO,CAAC,EAAE,GAAK,EAAE,KAAO,EAAE,IAAM,EAAE,KAAO,EAAE,IAE7C,IAAM,GAAK,OACF,CAAE,iBAAkB,EAAE,CAAC,EAAE,CAAE,EAClC,EAAE,CACF,CAAE,UAAW,CAAC,EAAG,CAClB,CACD,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,EAAE,GAAG,EAAG,EAAG,EAAE,EAEtB,SAAS,GAAG,EAAG,EAAG,EAAG,EAAI,EAAG,CAC1B,IAAI,EAAI,EAAE,OAAS,EACnB,KAAO,GAAK,GAAK,CACf,IAAM,EAAI,KAAK,OAAO,EAAI,GAAK,EAAE,CAAE,EAAI,EAAE,GAAI,EAAI,EAAE,EAAG,EAAE,CACxD,GAAI,IAAM,EACR,OAAO,EACT,GAAI,IAAM,GAAI,CACZ,GAAI,EAAI,EAAI,EACV,OAAO,EAAI,EACb,EAAI,EAAI,MACH,CACL,GAAI,IAAM,EACR,OAAO,EACT,EAAI,EAAI,GAGZ,MAAU,MAAM,2CAA2C,EAAE,KAAK,IAAI,CAAC,iBAAiB,IAAI,CAE9F,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,CACtB,IAAM,EAAI,GAAG,EAAG,EAAG,EAAE,CAAE,EAAI,GAAG,EAAG,EAAG,EAAG,EAAE,CACzC,OAAO,EAAE,MAAM,EAAG,EAAI,EAAE,CAE1B,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,KAAK,MAAM,EAAE,uBAAuB,CAAC,GAAG,CAEjD,SAAS,GAAG,EAAG,CACb,MAAO,CAAC,EAAE,EAAE,gBAAgB,CAE9B,SAAS,GAAG,CAAE,MAAO,GAAK,EAAG,CAC3B,OAAO,IAAM,EAAI,EAAI,EAAI,EAAI,GAAK,EAEpC,SAAS,IAAK,CACZ,MAAO,CACL,aAAc,EAAE,CAChB,gBAAiB,IAAI,CACrB,UAAW,EACX,WAAY,EACZ,SAAU,EACV,WAAY,EAAE,CACd,SAAU,IAAI,CACf,CAEH,SAAS,GAAG,EAAG,EAAG,CAChB,IAAI,EAAI,EAAE,EAAE,CAAG,EAAI,IACnB,IAAK,IAAM,KAAK,EAAG,CACjB,GAAM,CAAE,SAAU,EAAG,KAAM,EAAG,WAAY,GAAM,EAChD,GAAI,EAAI,KAAK,IAAI,EAAG,EAAE,CAAE,EAAE,EAAE,CAAE,CAC5B,EAAI,GAAG,EAAG,EAAG,EAAE,CACf,SAEF,IAAM,EAAI,GAAG,EAAG,EAAI,EAAG,EAAI,EAAE,CAC7B,GAAI,EAAE,KAAK,GAAG,EAAE,CAAC,CACf,SACF,IAAI,EAAI,CAAC,EAAG,EAAI,CAAC,EACjB,IAAK,GAAM,CAAE,IAAK,EAAG,MAAO,EAAG,MAAO,KAAO,EAC3C,GAAK,GAAK,GAAK,IAAM,KAAO,EAAI,GAAG,EAAG,EAAE,GAAK,EAAI,IAAM,EAAG,EAAI,CAAC,GAAI,EAAI,GAAK,GAAK,GAAK,IAAM,IAAM,EAAI,GAAG,EAAG,EAAI,EAAG,EAAE,EACvH,IAAM,EAAI,GAAG,EAAG,EAAG,EAAE,EAEvB,MAAO,CAAC,EAAG,EAAE,CAEf,SAAS,GAAG,EAAG,CACb,OAAO,OAAO,EAAE,WAAa,IAE/B,SAAS,GAAG,CAAE,OAAQ,GAAK,EAAG,CAC5B,OAAO,IAAM,EAAI,EAAI,EAAI,EAAI,GAAK,EAEpC,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,GAAI,EAAE,SAAW,EACf,MAAO,GACT,GAAM,CAAE,MAAO,EAAG,OAAQ,EAAG,KAAM,GAAM,GAAG,EAAG,EAAG,GAAG,CAAE,EAAI,EAAI,EAAG,EAAI,EAAI,GAAK,EAAI,GAAK,EAAI,EAC5F,OAAO,EAAI,EAAI,EAAI,EAAI,EAEzB,SAAS,GAAG,EAAG,EAAG,CAChB,GAAI,CAAC,GAAG,EAAE,CACR,OAAO,EACT,IAAI,EAAI,EACR,KAAO,EAAE,aAAa,IAAM,EAAI,GAC9B,IACF,OAAO,EAAI,EAEb,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,GAAI,GAAG,EAAE,CACP,OAAO,EAAE,aAAa,EAAE,YAAc,EAExC,IAAI,EAAI,GADE,EAAE,QAAU,OAAS,EAAI,EAAE,MACvB,EAAE,CAChB,MAAO,GAAI,KAAK,IAAI,EAAG,EAAG,KAAK,IAAI,EAAG,EAAE,CAAC,CAAE,EAE7C,SAAS,GAAG,EAAG,EAAG,EAAG,EAAI,EAAG,CAC1B,OAAO,EAAI,IAAM,EAAI,KAAK,IAAI,EAAG,GAAG,EAAG,EAAG,GAAG,CAAC,OAAO,EAAG,GAAG,GAAG,EAAG,EAAG,EAAG,GAAG,CAAE,GAAG,CAEjF,SAAS,GAAG,EAAG,CAAC,EAAG,EAAG,EAAG,GAAI,CAC3B,EAAE,OAAS,GAAK,EAAE,sBAAuB,EAAG,GAAG,MAAM,CACrD,IAAM,EAAI,EAAE,SACR,EAAI,EAAG,EAAI,EACf,GAAI,EAAE,OAAS,GAAK,EAAE,EAAE,EAAI,EAAE,SAAW,EAAG,CAC1C,IAAM,EAAI,EAAE,GAAG,KAAM,EAAI,EAAE,GAAG,KAC9B,EAAI,EAAE,QAAQ,EAAG,IAAM,GAAG,GAAG,EAAG,EAAG,EAAE,CAAE,EAAI,EAAG,EAAE,CAAE,EAAE,MAEpD,CAAC,EAAG,GAAK,GAAG,EAAG,EAAE,CACnB,GAAI,IAAM,EACR,OAAO,EACT,GAAM,CAAE,UAAW,EAAG,WAAY,EAAG,SAAU,EAAG,WAAY,GAAM,GAAG,EAAE,WAAY,EAAG,EAAG,EAAE,CAC7F,MAAO,CACL,aAAc,EACd,gBAAiB,EAAE,QAAQ,EAAG,IAAM,GAAG,EAAG,EAAG,GAAG,EAAG,EAAG,EAAE,CAAC,CAAE,IAAI,CAAC,CAChE,UAAW,EACX,WAAY,EACZ,SAAU,EACV,WAAY,EACZ,SAAU,EACX,CAEH,SAAS,GAAG,EAAG,CACb,OAAO,GAAG,EAAE,CAAC,KAAK,CAAE,EAAG,EAAG,EAAG,GAAK,EAAG,IAAM,CACzC,IAAM,EAAI,EAAE,EAAI,GAChB,MAAO,CAAE,SAAU,IAAM,IAAK,GAAc,IAAV,EAAE,EAAI,EAAW,KAAM,EAAG,WAAY,EAAG,EAC3E,CAEJ,SAAS,GAAG,EAAG,EAAG,CAChB,IAAI,EAAI,EAAG,EAAI,EACf,KAAO,EAAI,GACT,GAAK,EAAE,EAAI,GAAK,EAAE,GAAK,EAAG,IAC5B,OAAO,GAAK,IAAM,EAAI,EAAI,GAE5B,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,CACtB,IAAI,EAAI,EAAG,EAAI,EAAG,EAAI,EAAG,EAAI,EAAG,EAAI,EACpC,GAAI,IAAM,EAAG,CACX,EAAI,GAAG,EAAG,EAAI,EAAG,GAAG,CAAE,EAAI,EAAE,GAAG,OAC/B,IAAM,EAAI,GAAG,EAAG,EAAI,EAAE,CACtB,EAAI,EAAE,GAAI,EAAI,EAAE,GAAI,EAAE,QAAU,EAAE,GAAG,OAAS,GAAG,EAAG,EAAE,CAAC,IAAO,IAAS,EAAI,EAAE,MAAM,EAAG,EAAI,EAAE,MAE5F,EAAI,EAAE,CACR,IAAK,GAAM,CAAE,MAAO,EAAG,MAAO,KAAO,GAAG,EAAG,EAAG,IAAM,CAAE,CACpD,IAAM,EAAI,EAAI,EAAG,EAAI,EAAI,EAAI,EAAI,EAAI,EACrC,EAAE,KAAK,CACL,MAAO,EACP,OAAQ,EACR,KAAM,EACP,CAAC,CAAE,EAAI,EAAG,EAAI,EAAG,EAAI,EAExB,MAAO,CACL,UAAW,EACX,WAAY,EACZ,SAAU,EACV,WAAY,EACb,CAEH,SAAS,GAAG,EAAG,CACb,MAAO,CAAE,MAAO,EAAE,MAAO,MAAO,EAAG,CAErC,SAAS,GAAG,EAAG,CACb,GAAM,CAAE,SAAU,EAAG,KAAM,EAAG,WAAY,GAAM,EAChD,MAAQ,IAAM,EAAE,QAAU,IAAM,EAAE,MAAQ,GAAK,EAAE,MAAQ,MAAU,EAAE,QAAU,EAEjF,IAAM,GAAK,CACT,aAAc,SACd,YAAa,QACd,CAAE,GAAK,GACL,CAAC,CAAE,IAAK,GAAK,CAAE,iBAAkB,MAAS,CACzC,IAAM,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,GAAG,EAAG,EAAE,CAAE,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,EAAE,CAAC,CAAE,EAAI,EAAE,IAAK,GAAE,CAAE,EAAI,EAAE,IAAK,GAAE,CAAE,EAAI,EAAE,IAAK,GAAE,CAAE,EAAI,EAAE,IAAK,GAAE,CAAE,EAAI,GAAG,EAAG,IAAM,GAAG,EAAG,GAAG,GAAG,CAAC,CAAE,EAAI,EAAE,IAAK,GAAE,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,IAAI,CAAE,EAAI,GAC7M,EAAE,EAAG,EAAE,EAAG,EAAG,EAAE,CAAE,GAAG,GAAI,EAAE,CAAE,GAAI,CAAC,CACjC,EACD,CAAE,EAAI,GACL,EACE,EACA,GAAI,CACJ,IAAI,EAAG,KAAO,CAAE,QAAS,EAAG,KAAM,EAAE,QAAS,EAAG,CAC9C,QAAS,EAAE,CACX,KAAM,EAAE,CACT,CAAC,CACF,GAAG,CAAE,KAAM,KAAQ,EAAE,CACtB,CACD,EAAE,CACH,CACD,EACE,EACE,EACA,EAAG,GAAM,EAAE,OAAS,EAAE,CACtB,EAAE,EAAG,EAAE,CACP,GAAG,CAAC,EAAG,EAAG,KAAO,CACf,IAAM,EAAI,EAAE,QAAQ,EAAG,EAAG,IAAM,GAAG,EAAG,EAAG,GAAG,EAAG,EAAE,WAAY,EAAE,EAAI,EAAE,CAAE,IAAI,CAAC,CAC5E,MAAO,CACL,GAAG,EACH,aAAc,EACd,gBAAiB,EAClB,EACD,CACH,CACD,EACD,CAAE,EACD,EACE,EACA,EAAE,EAAE,CACJ,GAAG,CAAC,EAAG,CAAE,UAAW,MAAS,EAAI,EAAE,CACnC,GAAG,CAAC,EAAG,CAAE,UAAW,EAAG,SAAU,MAAS,CACxC,CACE,SAAU,EACV,KAAM,EACN,WAAY,EACb,CACF,CAAC,CACH,CACD,EACD,CAAE,EAAE,EAAG,EAAE,CACV,IAAM,EAAI,GACR,EACE,EACA,EAAG,GAAM,IAAM,IAAK,GAAE,CACvB,CACD,CAAC,EACF,CACD,EACE,EACE,EACA,EAAG,GAAM,IAAM,IAAK,IAAK,EAAE,EAAG,EAAE,CAAC,SAAS,CAAC,CAC3C,EAAG,GAAM,CACP,IAAM,EAAI,EAAG,EAAE,CAAE,EAAI,EAAG,EAAE,CAAC,OAAS,EACpC,OAAO,IAAM,IAAK,IAAK,IAAM,EAAI,EAAI,CACnC,CAAE,SAAU,EAAG,KAAM,EAAG,WAAY,EAAG,CACvC,CAAE,SAAU,EAAG,KAAM,EAAG,WAAY,EAAG,CACxC,CAAG,EAAE,CAAG,CAAC,CAAE,SAAU,EAAG,KAAM,EAAG,WAAY,EAAG,CAAC,EAClD,CACH,CACD,EACD,CAAE,EACD,EACE,EACA,EAAG,GAAM,IAAM,IAAK,IAAK,EAAE,OAAS,GAAK,EAAE,EAAG,EAAE,CAAC,SAAS,CAAC,CAC3D,EAAG,GAAM,CACP,IAAM,EAAI,EAAE,CACR,EAAI,EAAE,GAAI,EAAI,EAClB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAE,OAAQ,IAAK,CACjC,IAAM,EAAI,EAAE,GACZ,IAAM,IAAM,EAAE,KAAK,CACjB,SAAU,EAAI,EACd,KAAM,EACN,WAAY,EACb,CAAC,CAAE,EAAI,EAAG,EAAI,GAEjB,OAAO,EAAE,KAAK,CACZ,SAAU,EAAE,OAAS,EACrB,KAAM,EACN,WAAY,EACb,CAAC,CAAE,GACJ,CACH,CACD,EACD,CAAE,EACD,EACE,EACA,EAAE,EAAG,EAAE,CACP,GAAG,EAAG,EAAG,KAAO,IAAM,IAAK,IAAK,IAAM,IAAK,GAAE,CAC7C,GAAG,CAAC,EAAG,EAAG,KAAO,CACf,IAAM,EAAI,EAAE,CACZ,IAAK,IAAI,EAAI,EAAG,EAAI,EAAE,OAAQ,IAAK,CACjC,IAAM,EAAI,EAAE,GAAI,EAAI,EAAE,EAAI,GAC1B,EAAE,KAAK,CACL,WAAY,EACZ,SAAU,EACV,KAAM,EACP,CAAC,CAAE,IAAM,IAAK,IAAK,EAAE,KAAK,CACzB,WAAY,EAAI,EAChB,SAAU,EAAI,EACd,KAAM,EACP,CAAC,CAEJ,OAAO,GACP,CACH,CACD,EACD,CACD,IAAM,EAAI,GACR,EACE,EACA,EAAE,EAAE,CACJ,IACG,CAAE,MAAO,GAAK,CAAC,EAAG,MAAQ,CACzB,QAAS,IAAM,EACf,MAAO,EACR,EACD,CAAE,QAAS,CAAC,EAAG,MAAO,EAAG,CAC1B,CACD,EAAG,GAAM,EAAE,QAAQ,CACpB,CACF,CACD,EACE,EACE,EACA,IACG,EAAG,KAAO,CAAE,KAAM,EAAE,KAAO,EAAG,KAAM,EAAG,EACxC,CAAE,KAAM,EAAG,KAAM,EAAG,CACrB,CACD,EAAG,GAAM,EAAE,KAAK,CACjB,CACA,GAAM,CACL,GAAM,CAAE,aAAc,GAAM,EAAG,EAAE,CACjC,GAAI,EAAI,EACN,EAAE,EAAG,CAAC,EAAE,CAAE,EAAE,EAAG,EAAI,GAAG,EAAG,EAAE,CAAC,MACzB,GAAI,EAAI,EAAG,CACd,IAAM,EAAI,EAAG,EAAE,CACf,EAAE,OAAS,IAAM,GAAK,GAAG,CAAC,EAAG,EAAE,EAAG,EAAE,EAAG,EAAE,GAG9C,CAAE,EAAE,EAAE,EAAG,EAAE,EAAE,CAAC,EAAG,CAAC,EAAG,KAAO,CAC3B,EAAI,GAAK,EACP,2HACA,CAAE,eAAgB,EAAG,CACrB,GAAG,MACJ,EACD,CACF,IAAM,EAAI,GAAG,EAAE,CACf,EACE,EACE,EACA,EAAE,EAAE,CACJ,GAAG,CAAC,EAAG,KAAO,CACZ,IAAM,EAAI,EAAE,aAAa,OAAS,EAAG,EAAI,EAAE,CAAE,EAAI,EAAE,SACnD,GAAI,EAAG,CACL,IAAM,EAAI,GAAG,EAAE,SAAU,EAAE,CACvB,EAAI,EAAG,EAAI,EACf,KAAO,EAAI,GAAK,CACd,IAAM,EAAI,EAAE,aAAa,GAAI,EAAI,EAAE,aAAa,SAAW,EAAI,EAAI,IAAQ,EAAE,aAAa,EAAI,GAAK,EAAI,EACvG,EAAE,KAAK,CACL,SAAU,EACV,KAAM,EACN,WAAY,EACb,CAAC,CAAE,EAAE,KAAK,CACT,SAAU,EAAI,EAAI,EAAI,EACtB,KAAM,EACN,WAAY,EAAI,EACjB,CAAC,CAAE,IAAK,GAAK,EAAI,EAEpB,IAAM,EAAI,GAAG,EAAE,SAAS,CACxB,OAAO,IAAM,GAAK,EAAE,OAAO,CAAE,EAAE,QAC5B,EAAG,CAAE,EAAG,EAAG,EAAG,KAAS,CACtB,IAAI,EAAK,EAAE,OACX,OAAO,EAAE,WAAa,IAAM,EAAK,CAC/B,GAAG,EAAE,OACL,CACE,SAAU,EAAI,EAAI,EAClB,KAAM,EAAE,SACR,WAAY,EAAE,UACf,CACF,EAAG,CACF,UAAW,EAAI,EACf,SAAU,EACV,OAAQ,EACT,EAEH,CACE,UAAW,EACX,SAAU,EACV,OAAQ,EACT,CACF,CAAC,OAEJ,OAAO,GAAG,EAAE,SAAS,CAAC,QACnB,EAAG,CAAE,EAAG,EAAG,EAAG,MAAS,CACtB,UAAW,EAAI,EACf,SAAU,EACV,OAAQ,CAAC,GAAG,EAAE,OAAQ,CAAE,SAAU,EAAI,EAAI,EAAG,KAAM,EAAE,SAAU,WAAY,EAAE,UAAW,CAAC,CAC1F,EACD,CACE,UAAW,EACX,SAAU,EACV,OAAQ,EAAE,CACX,CACF,CAAC,QACF,CACH,CACD,EACD,CACD,IAAM,EAAI,GACR,EACE,EACA,EAAE,EAAG,EAAE,CACP,GAAG,CAAC,EAAG,CAAE,WAAY,GAAK,KAEjB,GAAG,CADC,EACE,EAAG,EAAE,CAClB,CACH,CACF,CACD,OAAO,EACL,EACE,EACA,EAAE,EAAG,EAAE,CACP,GAAG,CAAC,EAAG,EAAG,KAAO,CACf,GAAI,EAAE,aAAa,OAAS,EAAG,CAC7B,GAAI,EAAE,EAAE,SAAS,CACf,OAAO,EACT,IAAI,EAAI,IAAI,CACN,EAAI,EAAG,EAAE,CACX,EAAI,EAAG,EAAI,EAAG,EAAK,EACvB,KAAO,EAAI,CAAC,GAAK,CACf,EAAK,EAAE,GACP,IAAM,EAAI,EAAE,EAAI,GAAK,EAAK,EAC1B,IAAK,GAAK,EAAI,EAEhB,GAAI,EAAI,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAG,CAAE,EAAG,EAAI,EAAG,KAAS,GAAG,EAAG,KAAK,IAAI,EAAG,EAAK,EAAE,CAAE,EAAG,CAAE,EAAE,CAAE,IAAM,CAAC,EAAG,CACnG,IAAM,EAAI,GAAG,EAAE,SAAU,EAAG,CAC5B,EAAI,GAAG,EAAG,EAAG,EAAE,CACf,IAAM,EAAK,GAAG,EAAE,SAAU,CAAC,EAAI,EAAE,CAAC,GAClC,EAAI,GAAG,EAAG,EAAG,EAAG,CAElB,MAAO,CACL,GAAG,EACH,SAAU,EACV,GAAG,GAAG,EAAE,WAAY,EAAG,EAAG,EAAE,CAC7B,CAEH,IAAM,EAAI,GAAG,EAAE,SAAS,CAAC,QAAQ,EAAG,CAAE,EAAG,EAAG,EAAG,KAAQ,GAAG,EAAG,KAAK,IAAI,EAAG,EAAI,EAAE,CAAE,EAAE,CAAE,IAAI,CAAC,CAC1F,MAAO,CACL,GAAG,EACH,SAAU,EACV,GAAG,GAAG,EAAE,WAAY,EAAG,EAAG,EAAE,CAC7B,EACD,CACH,CACD,EACD,CAAE,CACD,kBAAmB,EAEnB,KAAM,EACN,gBAAiB,EACjB,eAAgB,EAChB,cAAe,EACf,eAAgB,EAChB,IAAK,EACL,aAAc,EACd,gBAAiB,EACjB,SAAU,EACV,YAAa,EACb,UAAW,EACX,gBAAiB,EACjB,WAAY,EAEZ,MAAO,EACP,mBAAoB,EACpB,WAAY,EACZ,eAAgB,EAChB,YAAa,EACd,EAEH,EAAG,GAAI,GAAG,CACV,CAAE,UAAW,CAAC,EAAG,CAClB,CACD,SAAS,GAAG,EAAG,CACb,OAAO,EAAE,QACN,EAAG,KAAO,EAAE,aAAa,KAAK,EAAE,WAAW,CAAE,EAAE,YAAc,EAAI,EAAG,GACrE,CACE,aAAc,EAAE,CAChB,WAAY,EACb,CACF,CAEH,IAAM,GAAK,GACR,CAAC,CAAE,aAAc,EAAG,MAAO,EAAG,WAAY,GAAK,CAAE,aAAc,EAAG,UAAW,MAAS,CACrF,IAAM,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,GAAG,EAAE,EAAG,EAAE,GAAG,CAAC,CAAC,CAC3C,OAAO,EACL,EACE,EACA,EAAG,GAAM,EAAE,WAAW,CACvB,CACD,EACD,CAAE,EACD,EACE,EACA,EAAG,GAAM,EAAE,aAAa,CACzB,CACD,EACD,CAAE,EACD,EACE,GAAG,EAAG,EAAG,EAAE,CACX,GAAG,CAAC,EAAG,KAAO,GAAG,EAAE,CAAC,CACpB,GAAG,CAAC,EAAG,EAAG,KAAO,GAAG,EAAE,gBAAiB,KAAK,IAAI,EAAI,EAAG,EAAE,CAAE,IAAI,CAAC,GAAG,CACnE,GAAI,CACJ,EAAG,GAAM,CAAC,EAAE,CAAC,CACd,CACD,EACD,CAAE,CAAE,YAAa,EAAG,gBAAiB,EAAG,EAE3C,EAAG,GAAI,GAAG,CACX,CAAE,GAAK,GACL,CAAC,CAAE,IAAK,MAAS,CAChB,IAAM,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,GACnB,EACE,EACA,EAAG,GAAM,EAAE,CACX,GAAI,CACL,CACF,CACD,OAAO,EAAE,EAAI,GAAM,CACjB,GAAK,EAAG,EAAE,CAAC,gBAAiB,EAAE,CAAE,GAAG,MAAM,EACzC,CAAE,CAAE,SAAU,EAAG,WAAY,EAAG,EAEpC,EAAG,GAAG,CACN,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,OAAO,SAAW,KAAO,mBAAoB,SAAS,gBAAgB,MAC9E,SAAS,GAAG,EAAG,CACb,IAAM,EAAI,OAAO,GAAK,SAAW,CAAE,MAAO,EAAG,CAAG,EAChD,MAAO,CAAY,EAAE,QAAQ,SAAW,CAAC,EAAE,UAAY,CAAC,MAAQ,EAAE,SAAW,QAAS,EAAE,SAAW,IAAK,KAAM,EAAE,OAAS,GAAI,EAE/H,IAAM,GAAK,GACR,CACC,CAAE,IAAK,EAAG,YAAa,EAAG,MAAO,EAAG,WAAY,GAChD,CACE,kBAAmB,EACnB,kBAAmB,EACnB,aAAc,EACd,aAAc,EACd,oBAAqB,EACrB,SAAU,EACV,0BAA2B,EAC3B,eAAgB,GAElB,CAAE,IAAK,MACH,CACJ,IAAM,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAC5B,EAAI,KAAM,EAAI,KAAM,EAAI,KAC5B,SAAS,GAAI,CACX,IAAM,OAAS,GAAG,CAAE,EAAI,MAAO,IAAM,OAAS,GAAG,CAAE,EAAI,MAAO,AAAuB,KAAjB,aAAa,EAAE,CAAM,MAAO,EAAE,EAAG,CAAC,EAAE,CAE1G,OAAO,EACL,EACE,EACA,EAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACtB,EAAE,EAAG,EAAG,EAAE,CACV,GACG,CACC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GACtB,EACA,EACA,KACI,CACJ,IAAM,EAAI,GAAG,EAAE,CAAE,CAAE,MAAO,EAAI,SAAU,EAAG,OAAQ,GAAM,EAAG,EAAK,EAAI,EAAG,EAAK,GAAG,EAAG,EAAG,EAAG,CACrF,EAAK,GAAG,EAAI,EAAE,WAAY,EAAE,CAAG,EACnC,IAAO,OAAS,GAAM,EAAI,GAAG,EAAE,SAAU,EAAG,CAAC,GAAK,EAAI,EAAG,IAAO,IAAO,GAAM,IAAM,IAAO,SAAW,IAAO,EAAI,GAAG,EAAE,SAAU,EAAG,CAAC,GAAK,EAAI,GAAK,EAAI,GAAM,EAAG,IAAM,IAAK,IAAK,IAAM,IAAM,GAAM,GAChM,IAAM,EAAM,GAAO,CACjB,GAAG,CAAE,GAAM,EAAE,wBAAyB,CAAE,SAAU,EAAG,CAAE,GAAG,MAAM,CAAE,EAAE,EAAG,EAAE,GAAK,EAAE,EAAG,CAAC,EAAE,CAAE,EAAE,yCAA0C,EAAE,CAAE,GAAG,MAAM,GAEnJ,GAAI,GAAG,CAAE,IAAM,SAAU,CACvB,IAAI,EAAK,CAAC,EACV,EAAI,EAAE,EAAI,GAAO,CACf,IAAW,GACX,CAAE,EAAI,GAAG,MAAS,CAClB,EAAG,EAAG,EACN,MAEF,EAAI,GAAG,EAAE,EAAG,GAAG,IAAI,CAAC,CAAE,EAAG,CAC3B,MAAO,GAAI,eAAiB,CAC1B,GAAG,EACF,KAAK,CAAE,EAAE,EAAG,CAAC,EAAE,CAAE,EAAE,0BAA2B,CAAE,SAAU,EAAG,MAAO,EAAI,IAAK,EAAI,CAAE,GAAG,MAAM,CAAE,CAAE,SAAU,EAAG,IAAK,EAAI,EAE5H,CACF,CACD,EACD,CAAE,CACD,oBAAqB,EACrB,cAAe,EACf,cAAe,EAChB,EAEH,EAAG,GAAI,GAAI,GAAG,CACd,CAAE,UAAW,CAAC,EAAG,CAClB,CACD,SAAS,GAAG,EAAG,CACb,MAAQ,IAAM,CACZ,IAAM,EAAI,eAAiB,CACzB,EAAE,CAAC,EAAE,EACJ,EAAE,CACL,MAAQ,IAAM,CACZ,IAAM,EAAE,CAAC,EAAE,CAAE,aAAa,EAAE,IAIlC,SAAS,GAAG,EAAG,EAAG,CAChB,IAAM,EAAI,GAAG,CAAG,0BAA4B,CAC1C,GAAG,EAAI,EAAG,EAAE,EACZ,CAEJ,SAAS,GAAG,EAAG,EAAG,CAChB,IAAM,EAAI,EAAI,EACd,OAAO,OAAO,GAAK,SAAW,EAAI,EAAE,QAAU,OAAS,EAAI,EAAE,MAE/D,IAAM,GAAK,GACR,CAAC,CAAE,gBAAiB,EAAG,YAAa,EAAG,MAAO,GAAK,CAAE,UAAW,GAAK,CAAE,oBAAqB,EAAG,cAAe,GAAK,CAAE,SAAU,MAAS,CACvI,IAAM,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,CAAC,EAAE,CACpC,OAAO,EACL,EACE,EACA,EAAE,EAAE,CACJ,GAAG,CAAC,EAAG,KAAO,IAAM,EAAE,CACtB,GAAG,CAAC,EAAE,CACP,CACD,EACD,CAAE,EACD,EACE,EACA,EAAE,EAAE,CACJ,GAAG,CAAC,EAAG,KAAO,IAAM,EAAE,CACtB,GAAG,CAAC,EAAE,CACP,CACD,EACD,CAAE,EACD,EACE,GAAG,EAAG,EAAE,CACR,EAAE,EAAG,EAAG,EAAG,EAAE,CACb,GAAG,CAAC,EAAG,GAAI,EAAG,CAAE,SAAU,GAAK,EAAG,KAAO,IAAM,CAAC,EAAE,EAAE,EAAI,GAAG,EAAE,GAAK,CAAC,GAAK,CAAC,EAAE,CAC3E,EAAE,EAAE,CACL,EACA,EAAG,KAAO,CACT,GAAG,MAAS,CACV,EAAE,EAAG,CAAC,EAAE,EACR,CAAE,GAAG,MAAS,CACd,GAAG,MAAS,CACV,EAAE,EAAG,CAAC,EAAE,EACR,CAAE,EAAE,EAAG,EAAE,EACX,EAEL,CAAE,CACD,gCAAiC,EACjC,wBAAyB,EACzB,sBAAuB,EACxB,EAEH,EAAG,GAAI,GAAI,GAAI,GAAG,CAClB,CAAE,UAAW,CAAC,EAAG,CAClB,CACD,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,KAAK,IAAI,EAAI,EAAE,CAAG,KAE3B,IAAM,GAAK,KAAM,GAAK,OAAQ,GAAK,OAAQ,GAAK,CAC9C,SAAU,CAAC,EACX,mBAAoB,wBACpB,MAAO,CACL,aAAc,EACd,aAAc,EACd,UAAW,EACX,eAAgB,EACjB,CACF,CAAE,GAAK,EAAG,GAAK,GAAG,CAAC,CAAE,aAAc,EAAG,aAAc,EAAG,SAAU,EAAG,qBAAsB,EAAG,UAAW,EAAG,eAAgB,MAAS,CACnI,IAAM,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,GAAG,CAAE,EAAI,GACrE,EACE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,GAAG,CAAC,EAAE,CAAC,CAAE,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAE,GAAG,CAAC,EAAE,CAAE,GAAG,IAAI,CAAC,CAAC,CAC3D,GAAI,CACL,CACD,CAAC,EACF,CAAE,EAAI,GACL,EAAE,GAAG,EAAE,EAAG,GAAG,CAAC,EAAE,CAAC,CAAE,EAAE,EAAG,GAAG,CAAC,EAAE,CAAE,GAAG,IAAI,CAAC,CAAC,CAAE,GAAI,CAAC,CAChD,CAAC,EACF,CACD,EACE,EACE,GAAG,EAAE,EAAE,CAAE,EAAE,EAAE,CAAC,CACd,GAAG,CAAC,EAAG,KAAO,GAAK,EAAE,CACrB,GAAI,CACL,CACD,EACD,CAAE,EAAE,EAAE,EAAG,GAAG,GAAG,CAAC,CAAE,EAAE,CACrB,IAAM,EAAI,GACR,EACE,GAAG,EAAG,EAAE,EAAE,CAAE,EAAE,EAAE,CAAE,EAAE,EAAE,CAAE,EAAE,EAAE,CAAC,CAC7B,IAAI,EAAG,CAAC,CAAE,aAAc,EAAG,UAAW,GAAK,EAAG,EAAG,EAAG,KAAO,CACzD,IAAM,EAAI,EAAI,EAAI,EAAI,CAAC,EAAG,EAAI,CAC5B,aAAc,EACd,UAAW,EACX,eAAgB,EACjB,CACD,GAAI,EAAG,CACL,IAAI,EAAG,EACP,OAAO,EAAI,EAAE,MAAM,WAAa,EAAI,gBAAiB,EAAI,EAAE,MAAM,UAAY,IAAM,EAAI,iBAAkB,EAAI,EAAE,MAAM,UAAY,GAAK,EAAE,gBAAiB,CACvJ,SAAU,CAAC,EACX,gBAAiB,EACjB,eAAgB,EAChB,MAAO,EACR,CAEH,IAAI,EACJ,MAAO,CAAiL,EAAjL,EAAE,aAAe,EAAE,MAAM,aAAmB,iBAAmB,EAAI,EAAE,MAAM,eAAqB,6BAA+B,EAAI,EAAE,MAAM,UAAgB,oBAA0B,yCAA0C,CACpO,SAAU,CAAC,EACX,mBAAoB,EACpB,MAAO,EACR,EACA,GAAG,CACN,GAAI,EAAG,IAAM,IAAM,IAAK,IAAK,EAAE,WAAa,EAAE,SAAS,CACxD,CACF,CAAE,EAAI,GACL,EACE,EACA,IACG,EAAG,CAAE,aAAc,EAAG,UAAW,EAAG,eAAgB,KAAQ,CAC3D,GAAI,CAAC,GAAG,EAAE,aAAc,EAAE,CAAE,CAC1B,IAAM,EAAI,GAAK,EAAI,GAAK,EACxB,OAAO,EAAE,YAAc,GAAK,EAAI,CAC9B,QAAS,CAAC,EACV,KAAM,EAAE,UAAY,EACpB,aAAc,EACd,UAAW,EACZ,CAAG,CACF,QAAS,CAAC,EACV,KAAM,EACN,aAAc,EACd,UAAW,EACZ,CAEH,MAAO,CACL,QAAS,CAAC,EACV,KAAM,EACN,aAAc,EACd,UAAW,EACZ,EAEH,CAAE,QAAS,CAAC,EAAG,KAAM,EAAG,aAAc,EAAG,UAAW,EAAG,CACxD,CACD,EAAG,GAAM,EAAE,QAAQ,CACnB,EAAG,GAAM,EAAE,KAAK,CACjB,CACD,EACD,CACD,EACE,EACE,EACA,EAAG,GAAM,EAAE,SAAS,CACrB,CACD,EACD,CAAE,EAAE,EAAE,EAAG,GAAG,GAAG,CAAC,CAAE,EAAE,CACrB,IAAM,EAAI,EAAE,GAAG,CACf,EACE,EACE,EACA,GAAG,CAAE,UAAW,KAAQ,EAAE,CAC1B,GAAI,CACJ,IACG,EAAG,IAAM,EAAG,EAAE,CAAG,CAAE,UAAW,EAAE,UAAW,cAAe,EAAG,CAAG,CAAE,UAAW,EAAI,EAAE,cAAgB,GAAK,GAAI,cAAe,EAAG,CAC/H,CAAE,UAAW,GAAI,cAAe,EAAG,CACpC,CACD,EAAG,GAAM,EAAE,UAAU,CACtB,CACD,EACD,CAAE,EAAE,EAAE,EAAG,GAAG,GAAG,CAAE,GAAG,GAAG,CAAC,CAAE,EAAE,CAC7B,IAAM,EAAI,EAAE,EAAE,CACd,OAAO,EACL,EACE,EACA,EAAG,GAAM,CAAC,EAAE,CACZ,GAAG,EAAE,CACN,CACD,EACD,CAAE,EACD,EACE,EACA,GAAG,IAAI,CACP,EAAE,EAAE,CACJ,GAAG,CAAC,EAAG,KAAO,EAAE,CAChB,IAAI,CAAC,EAAG,GAAI,CAAC,KAAO,CAAC,EAAG,EAAE,CAAE,CAAC,EAAG,EAAE,CAAC,CACnC,GAAG,CAAC,EAAG,KAAO,EAAI,EAAE,CACrB,CACD,EACD,CAAE,CACD,cAAe,EACf,oBAAqB,EACrB,kBAAmB,EACnB,iBAAkB,EAClB,eAAgB,EAChB,WAAY,EACZ,QAAS,EACT,YAAa,EACb,wBAAyB,EACzB,gBAAiB,EACjB,eAAgB,EACjB,EACA,EAAG,GAAG,CAAC,CAAE,GAAK,MAAO,GAAK,SAAU,GAAK,OAC5C,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,OAAO,GAAK,SAAW,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAK,EAAI,EAAI,IAAM,GAAK,IAAM,GAAK,EAAE,KAAO,EAAE,QAAU,IAAM,GAAK,EAAE,KAAO,EAAE,QAExJ,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,OAAO,GAAK,SAAW,EAAI,EAAE,IAAM,EAE5C,IAAM,GAAK,GACR,CAAC,CAAE,UAAW,EAAG,kBAAmB,EAAG,aAAc,EAAG,UAAW,EAAG,eAAgB,MAAS,CAC9F,IAAM,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,EAAE,CAuC3C,MAAO,CACL,mBAAoB,EAEpB,aAAc,EACd,SAAU,EACV,cAAe,EAEf,aA9C+C,GAC/C,EACE,GACE,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAG,GAAG,CACR,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAE,CACL,CACD,GACG,CACC,EACA,EACA,EACA,CAAC,EAAG,GACJ,EACA,EACA,EACA,EACA,KACI,CACJ,IAAM,EAAI,EAAI,EAAG,EAAI,EAAI,EAAG,EAAI,KAAK,IAAI,EAAI,EAAG,EAAE,CAC9C,EAAI,GACF,EAAI,GAAG,EAAG,GAAG,CAAE,EAAI,GAAG,EAAG,GAAG,CAClC,MAAO,IAAK,EAAG,GAAK,EAAI,EAAG,GAAK,EAAI,EAAG,GAAK,EAAG,EAAI,EAAI,EAAI,IAAM,EAAI,IAAK,EAAI,EAAI,EAAI,EAAI,IAAM,EAAI,IAAK,IAAM,GAG3G,KAHgH,CAClH,KAAK,IAAI,EAAI,EAAI,GAAG,EAAG,GAAI,EAAE,CAAG,EAAG,EAAE,CACrC,EAAI,EAAI,EAAI,EAAI,GAAG,EAAG,GAAI,EAAE,CAAG,EAChC,EAEJ,CACD,EAAG,GAAM,IAAM,KAAK,CACpB,EAAG,GAAG,CACP,CACD,CAAC,EAAG,EAAE,CASS,CAChB,EAEH,EAAG,GAAG,CACN,CAAE,UAAW,CAAC,EAAG,CAClB,CACD,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,GAAI,GAAG,EAAE,CAAE,CACT,IAAM,EAAI,GAAG,EAAG,EAAE,CAClB,MAAO,CACL,CAAE,MAAO,GAAG,EAAE,gBAAiB,EAAE,CAAC,GAAI,OAAQ,EAAG,KAAM,EAAG,CAC1D,CAAE,KAAM,IAAI,GAAI,MAAO,EAAG,OAAQ,EAAG,KAAM,EAAG,CAC/C,CAEH,MAAO,CAAC,CAAE,KAAM,IAAI,GAAI,MAAO,EAAG,OAAQ,EAAG,KAAM,EAAG,CAAC,CAEzD,IAAM,GAAK,CACT,OAAQ,EACR,eAAgB,EAChB,MAAO,EAAE,CACT,aAAc,EACd,UAAW,EACX,IAAK,EACL,SAAU,EAAE,CACZ,cAAe,EACf,WAAY,EACb,CACD,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC5B,GAAM,CAAE,UAAW,EAAG,WAAY,EAAG,SAAU,GAAM,EACjD,EAAI,EAAG,EAAI,EACf,GAAI,EAAE,OAAS,EAAG,CAChB,EAAI,EAAE,GAAG,OACT,IAAM,EAAI,EAAE,EAAE,OAAS,GACvB,EAAI,EAAE,OAAS,EAAE,KAEnB,IAAM,EAAI,EAAI,EAAG,EAAI,EAAI,EAAI,GAAK,EAAI,GAAK,EAAG,EAAI,EAAG,EAAI,EAAI,EAC7D,MAAO,CACL,OAAQ,EACR,eAAgB,EAChB,MAAO,GAAG,EAAG,EAAG,EAAE,CAClB,aAAc,EACd,UAAW,EACX,IAAK,EACL,SAAU,GAAG,EAAG,EAAG,EAAE,CACrB,cAAe,EAAE,QAAQ,EAAG,IAAM,EAAE,KAAO,EAAG,EAAE,CAChD,WAAY,EACb,CAEH,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CAC5B,IAAI,EAAI,EACR,GAAI,EAAE,aAAa,OAAS,EAC1B,IAAK,IAAM,KAAK,EAAE,aAAc,CAC9B,GAAI,EAAI,GAAK,EACX,MACF,IAEJ,IAAM,EAAI,EAAI,EAAG,EAAI,GAAG,EAAG,EAAE,CAM7B,OAAO,GAN4B,MAAM,KAAK,CAAE,OAAQ,EAAG,CAAC,CAAC,KAAK,EAAG,KAAO,CAC1E,KAAM,EAAE,EAAI,GACZ,MAAO,EAAI,EACX,OAAQ,EACR,KAAM,EACP,EACU,CAAE,EAAE,CAAE,EAAG,EAAG,EAAG,EAAE,CAE9B,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,GAAI,EAAE,SAAW,EACf,MAAO,EAAE,CACX,GAAI,CAAC,GAAG,EAAE,CACR,OAAO,EAAE,IAAK,IAAO,CAAE,GAAG,EAAG,MAAO,EAAE,MAAQ,EAAG,cAAe,EAAE,MAAO,EAAE,CAC7E,IAAM,EAAI,EAAE,GAAG,MAAO,EAAI,EAAE,EAAE,OAAS,GAAG,MAAO,EAAI,EAAE,CAAE,EAAI,GAAG,EAAE,gBAAiB,EAAG,EAAE,CACpF,EAAG,EAAI,EACX,IAAK,IAAM,KAAK,EAAG,EAChB,CAAC,GAAK,EAAE,IAAM,EAAE,SAAW,EAAI,EAAE,OAAO,CAAE,EAAI,EAAE,aAAa,QAAQ,EAAE,MAAM,EAC9E,IAAI,EACJ,AAGI,EAHJ,EAAE,QAAU,EAAE,MAAY,CACxB,MAAO,EACP,KAAM,QACP,CAAO,CACN,WAAY,EACZ,MAAO,EAAE,OAAS,EAAI,GAAK,EAC5B,CAAE,EAAE,KAAK,CACR,GAAG,EACH,KAAM,EAAE,KACR,OAAQ,EAAE,OACV,cAAe,EAAE,MACjB,KAAM,EAAE,KACT,CAAC,CAEJ,OAAO,EAET,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,IAAM,IAAK,GAAI,EAAI,OAAO,GAAK,SAAW,EAAI,EAAE,IAAM,EAE/D,IAAM,GAAK,GACR,CACC,CAAE,KAAM,EAAG,eAAgB,EAAG,IAAK,EAAG,MAAO,EAAG,WAAY,GAC5D,EACA,CAAE,aAAc,EAAG,cAAe,EAAG,aAAc,GACnD,CAAE,wBAAyB,EAAG,sBAAuB,GACrD,CAAE,cAAe,GACjB,EACA,CAAE,SAAU,GACZ,CAAE,iBAAkB,MAChB,CACJ,IAAM,EAAI,EAAE,EAAE,CAAC,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,EAAE,CAC5C,EAAE,EAAE,gBAAiB,EAAE,CACvB,IAAM,EAAI,GACR,EACE,GACE,EACA,EACA,EAAE,EAAG,GAAG,CACR,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EACA,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EAAE,EAAE,CACJ,EACD,CACD,GAAG,CAAC,EAAG,GAAK,SAAiB,KAAO,CAClC,IAAM,EAAI,IAAM,IAAK,IAAK,EAAE,SAAW,EACvC,OAAO,GAAK,CAAC,GAAK,CAAC,GACnB,CACF,GACG,GAGC,CAAC,EAAG,GACJ,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,KACI,CACJ,IAAM,EAAI,EAAG,CAAE,WAAY,EAAI,SAAU,GAAO,EAAG,EAAK,EAAG,EAAE,CAC7D,GAAI,IAAM,EACR,MAAO,CAAE,GAAG,GAAI,WAAY,EAAG,CACjC,GAAI,IAAM,GAAK,IAAM,EACnB,OAAO,IAAO,EAAI,CAAE,GAAG,GAAI,WAAY,EAAG,CAAG,GAAG,EAAI,EAAG,EAAG,EAAG,EAAG,GAAK,EAAE,CAAC,CAC1E,GAAI,EAAE,EAAG,CACP,OAAO,EAAK,EAAI,KAAO,GACrB,GAAG,GAAG,EAAG,EAAE,CAAE,EAAG,EAAE,CAClB,EAAE,CACF,EACA,EACA,EACA,EACD,CACH,IAAM,EAAK,EAAE,CACb,GAAI,EAAE,OAAS,EAAG,CAChB,IAAM,EAAI,EAAE,GAAI,EAAI,EAAE,EAAE,OAAS,GAC7B,EAAK,EACT,IAAK,IAAM,KAAM,GAAG,EAAI,EAAG,EAAE,CAAE,CAC7B,IAAM,EAAI,EAAG,MAAO,EAAK,KAAK,IAAI,EAAG,MAAO,EAAE,CAAE,EAAK,KAAK,IAAI,EAAG,IAAK,EAAE,CACxE,IAAK,IAAI,EAAK,EAAI,GAAM,EAAI,IAC1B,EAAG,KAAK,CAAE,KAAM,IAAI,GAAK,MAAO,EAAI,OAAQ,EAAI,KAAM,EAAG,CAAC,CAAE,GAAM,GAGxE,GAAI,CAAC,EACH,OAAO,GAAG,EAAE,CAAE,EAAI,EAAG,EAAG,EAAG,EAAE,CAC/B,IAAM,EAAK,EAAE,OAAS,EAAI,EAAE,EAAE,OAAS,GAAK,EAAI,EAAG,EAAK,GAAG,EAAI,EAAG,EAAG,EAAG,CACxE,GAAI,EAAG,SAAW,EAChB,OAAO,KACT,IAAM,EAAK,EAAI,EAAG,EAAK,GAAG,EAAE,CAAG,GAAM,CACnC,IAAK,IAAM,KAAK,EAAI,CAClB,IAAM,EAAK,EAAE,MACT,EAAK,EAAG,OAAQ,EAAI,EAAE,MACpB,EAAK,EAAG,KACd,GAAI,EAAG,OAAS,EAAG,CACjB,GAAK,KAAK,OAAO,EAAI,EAAG,OAAS,IAAM,EAAK,GAAG,CAC/C,IAAM,EAAK,EAAI,EAAE,MACjB,GAAM,EAAK,EAAK,EAAK,EAEvB,EAAI,IAAO,IAAO,EAAK,GAAK,EAAI,EAAI,GACpC,IAAM,EAAK,KAAK,IAAI,EAAE,IAAK,EAAG,CAC9B,IAAK,IAAI,EAAK,EAAG,GAAM,GAAM,EAAE,GAAM,GAAI,IACvC,EAAE,KAAK,CAAE,KAAM,IAAI,GAAK,MAAO,EAAI,OAAQ,EAAI,KAAM,EAAI,CAAC,CAAE,GAAM,EAAK,IAE3E,CAAE,EAAK,GAAG,EAAI,GAAG,CAAE,EAAI,GAAG,EAAI,GAAG,CACnC,GAAI,EAAG,OAAS,IAAM,EAAK,GAAK,EAAI,GAAI,CACtC,IAAM,EAAI,EAAG,GAAI,EAAI,EAAG,EAAG,OAAS,GACpC,GAAI,EAAK,GAAK,EAAE,MAAQ,EAAI,CAC1B,IAAM,EAAK,KAAK,IAAI,EAAI,EAAE,MAAQ,EAAG,CAAE,EAAK,EAAE,CAC1C,EAAI,EAAE,OACV,IAAK,IAAI,EAAK,EAAE,MAAQ,EAAG,GAAM,EAAE,MAAQ,EAAI,IAAM,CACnD,IAAM,EAAK,GAAG,EAAI,EAAI,EAAG,CAAC,IAAI,OAAS,EAAE,KACzC,GAAK,EAAK,EAAG,EAAG,QAAQ,CAAE,KAAM,IAAI,GAAK,MAAO,EAAI,OAAQ,EAAG,KAAM,EAAI,CAAC,CAE5E,EAAG,QAAQ,GAAG,EAAG,CAEnB,GAAI,EAAI,GAAK,EAAE,MAAQ,EAAI,CACzB,IAAM,EAAK,KAAK,IAAI,EAAG,EAAK,EAAE,MAAM,CAChC,EAAK,EAAE,OAAS,EAAE,KAAO,EAC7B,IAAK,IAAI,EAAI,EAAE,MAAQ,EAAG,GAAK,EAAE,MAAQ,EAAI,IAAK,CAChD,IAAM,EAAK,GAAG,EAAI,EAAG,EAAE,CAAC,IAAI,OAAS,EAAE,KACvC,EAAG,KAAK,CAAE,KAAM,IAAI,GAAI,MAAO,EAAG,OAAQ,EAAI,KAAM,EAAI,CAAC,CAAE,GAAM,EAAK,IAI5E,OAAO,GAAG,EAAI,EAAI,EAAG,EAAG,EAAG,EAAE,EAEhC,CAED,EAAG,GAAM,IAAM,KAAK,CACpB,GAAI,CACL,CACD,GACD,CACD,EACE,EACE,EACA,EAAE,GAAG,CACL,EAAG,GAAM,GAAG,OAAO,CACpB,CACD,EACD,CAAE,EACD,EACE,EACA,EAAG,GAAM,EAAE,cAAc,CAC1B,CACD,EACD,CAAE,EAAE,EAAG,EAAE,CAAE,EACV,EACE,EACA,EAAG,GAAM,CAAC,EAAE,IAAK,EAAE,OAAO,CAAC,CAC5B,CACD,EACD,CAAE,EACD,EACE,EACA,EAAG,GAAM,EAAE,MAAM,CAClB,CACD,EACD,CACD,IAAM,EAAI,GACR,EACE,EACA,GAAG,CAAE,MAAO,KAAQ,EAAE,OAAS,EAAE,CACjC,EAAE,EAAG,EAAE,CACP,GAAG,CAAC,CAAE,MAAO,GAAK,KAAO,EAAE,EAAE,OAAS,GAAG,gBAAkB,EAAI,EAAE,CACjE,GAAG,EAAG,EAAG,KAAO,CAAC,EAAI,EAAG,EAAE,CAAC,CAC3B,EAAG,GAAG,CACN,GAAG,CAAC,KAAO,EAAE,CACd,CACF,CAAE,EAAI,GACL,EACE,EACA,GAAG,IAAI,CACP,GAAG,CAAE,MAAO,EAAG,SAAU,KAAQ,EAAE,OAAS,GAAK,EAAE,GAAG,gBAAkB,EAAE,OAAO,CACjF,GAAG,CAAE,MAAO,KAAQ,EAAE,GAAG,MAAM,CAC/B,GAAI,CACL,CACF,CAkBD,MAAO,CACL,WAAY,EACZ,iBAAkB,EAClB,cAAe,EACf,UAAW,EACX,qBAAsB,EACtB,aAxBK,GACL,EACE,EACA,GAAG,CAAE,MAAO,KAAQ,EAAE,OAAS,EAAE,CACjC,GAAG,CAAE,MAAO,KAAQ,CAClB,IAAI,EAAI,EAAG,EAAI,EAAE,OAAS,EAC1B,KAAO,EAAE,GAAG,OAAS,SAAW,EAAI,GAClC,IACF,KAAO,EAAE,GAAG,OAAS,SAAW,EAAI,GAClC,IACF,MAAO,CACL,SAAU,EAAE,GAAG,MACf,WAAY,EAAE,GAAG,MAClB,EACD,CACF,EAAG,GAAG,CACP,CAQc,CACf,aAAc,EACd,gBAAiB,EACjB,GAAG,EACJ,EAEH,EACE,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACD,CACD,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,GACL,CAAC,CAAE,kBAAmB,EAAG,kBAAmB,EAAG,aAAc,EAAG,aAAc,GAAK,CAAE,UAAW,MAAS,CACxG,IAAM,EAAI,GAAG,CAAE,EAAI,GACjB,EACE,GAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACjB,GAAG,CAAC,EAAG,EAAG,EAAG,EAAG,KAAO,EAAI,EAAI,EAAI,EAAI,EAAE,aAAe,EAAE,OAAO,CAClE,CACD,EACD,CACD,OAAO,EAAE,EAAE,EAAE,CAAE,EAAE,CAAE,CAAE,gBAAiB,EAAG,uBAAwB,EAAG,EAEtE,EAAG,GAAI,GAAG,CACV,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,GACL,CAAC,CAAE,eAAgB,GAAK,CAAE,gBAAiB,MAAS,CACnD,IAAM,EAAI,EAAE,CAAC,EAAE,CAUf,MAAO,CAAE,cAAe,EAAG,mBAVN,GACnB,EACE,GAAG,EAAG,EAAG,EAAE,CACX,GAAG,CAAC,KAAO,EAAE,CACb,GAAG,EAAG,EAAG,KAAO,KAAK,IAAI,EAAG,EAAI,EAAE,CAAC,CACnC,GAAG,EAAE,CACL,GAAI,CACL,CACD,EAE8C,CAAE,EAEpD,EAAG,GAAI,GAAG,CACV,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,OAAS,CACf,QAAS,EAAE,KAAK,CACjB,EAAE,CAAE,IAAM,CACT,WAAY,EACZ,QAAS,EACT,eAAgB,CAAE,MAAO,EAAG,SAAU,EAAG,GAAG,GAC5C,eAAgB,EAChB,YAAa,KACT,EAAI,EAAI,CAAE,GAAG,EAAG,MAAO,GAAK,QAAS,GAAG,IAAM,IAAK,GAAsB,EAAE,CAApB,CAAE,SAAU,EAAG,CAAO,CAAG,EAAI,EAAI,CAAE,GAAG,EAAG,MAAO,GAAK,MAAO,GAAG,IAAM,IAAK,GAAsB,EAAE,CAApB,CAAE,SAAU,EAAG,CAAO,CAAG,KAAM,GAAK,GAC5K,CACC,CAAE,IAAK,EAAG,MAAO,EAAG,WAAY,GAChC,CAAE,kBAAmB,EAAG,kBAAmB,EAAG,aAAc,EAAG,oBAAqB,EAAG,UAAW,EAAG,eAAgB,GACrH,CAAE,cAAe,MACb,CACJ,IAAM,EAAI,GAAG,CACb,OAAO,EACL,EACE,EACA,EAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACtB,EAAE,EAAE,CACJ,GAAG,CAAC,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,KAAO,CACnC,GAAM,CAAE,sBAAuB,EAAI,GAAI,KAAM,EAAG,GAAG,GAAM,EAAG,EAAI,GAAG,EAAG,EAAG,EAAI,EAAE,CAAE,EAAI,GAAG,EAAG,EAAE,WAAY,EAAE,CAAG,EAAI,EAAG,EAAI,EAAI,GAAG,EAAE,SAAU,EAAE,CAAC,GAAI,EAAI,EAAI,EAAkB,EAAI,EAAE,CACjL,WAAY,EACZ,QAAS,EACT,eAAgB,EAChB,eAJgK,EAAI,EAAI,EAKxK,YAAa,EACd,CAAC,CACF,OAAO,IAAM,KAST,KAAK,CATW,GAAK,GACvB,EACE,EACA,EAAG,GAAM,CAAC,EAAE,CAGZ,GAAG,EAAG,EAAE,CAAG,EAAI,EAAE,CAClB,CACD,EACD,CAAU,GACX,CACF,EAAG,GAAM,IAAM,KAAK,CACrB,CACD,EACD,CAAE,CACD,eAAgB,EACjB,EAEH,EAAG,GAAI,GAAI,GAAI,GAAI,GAAG,CACtB,CAAE,UAAW,CAAC,EAAG,CAClB,CACD,SAAS,GAAG,EAAG,CACb,OAAO,IAAM,CAAC,EAAI,CAAC,EAAI,IAAM,SAAW,SAAW,OAErD,IAAM,IAAM,EAAG,IAAM,OAAO,GAAK,WAAa,GAAG,EAAE,EAAE,CAAC,CAAG,GAAK,GAAG,EAAE,CAAE,GAAK,GACvE,CACC,CAAE,YAAa,EAAG,WAAY,EAAG,cAAe,EAAG,KAAM,GACzD,CAAE,cAAe,EAAG,WAAY,GAChC,CAAE,cAAe,GACjB,CAAE,sBAAuB,GACzB,CAAE,SAAU,EAAG,WAAY,GAC3B,CAAE,IAAK,GACP,CAAE,oBAAqB,GACvB,CAAE,QAAS,GACX,CAAE,eAAgB,MACd,CACJ,IAAM,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,GAAG,CACpB,EAAI,KACR,SAAS,EAAE,EAAG,CACZ,EAAE,EAAG,CACH,MAAO,MACP,SAAU,EACV,MAAO,OACR,CAAC,CAEJ,EACE,EACE,GAAG,EAAE,EAAE,EAAE,CAAE,GAAG,EAAE,CAAC,CAAE,EAAE,CACrB,EAAE,EAAE,EAAE,CAAE,EAAG,EAAG,EAAE,CAChB,GAAG,CAAC,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,KAAO,CAC1B,IAAI,EAAI,GAAK,EAAG,EAAI,OACpB,OAAO,IAAM,EAAI,GAAG,EAAG,GAAK,EAAE,CAAE,IAAS,IAAM,CAAC,GAAI,CAAE,qBAAsB,EAAG,aAAc,EAAG,WAAY,EAAG,EAC/G,CACF,GAAG,CAAE,aAAc,KAAQ,EAAE,CAC9B,EACA,CAAE,qBAAsB,EAAG,WAAY,KAAQ,CAC9C,IAAM,OAAS,GAAG,CAAE,EAAI,MAAO,EAAG,EAAE,GAAK,IAAK,GAEzC,EAAI,GAAG,MAAS,CACnB,EAAG,EAAE,CAAC,uBAAwB,CAAE,WAAY,EAAG,CAAE,GAAG,MAAM,CAAE,EAAE,EAAE,CAAE,EAAI,MACtE,CAJgD,0BAA4B,CAC5E,EAAG,EAAE,CAAC,uBAAwB,CAAE,WAAY,EAAG,CAAE,GAAG,MAAM,CAAE,EAAE,EAAE,EAChE,EAIL,CACD,SAAS,EAAE,EAAG,CACZ,IAAM,EAAI,GAAG,EAAI,GAAM,CACrB,GAAK,CAAC,EAAE,UAAY,EAAE,qBAAuB,kBAAoB,IAAM,OAAS,EAAG,EAAE,CAAC,4CAA6C,EAAE,CAAE,GAAG,MAAM,CAAE,EAAE,OAAO,GAC3J,CACF,WAAW,EAAG,IAAI,CAEpB,EACE,EACE,GAAG,EAAE,EAAE,CAAE,EAAG,EAAE,CACd,GAAG,CAAC,GAAK,KAAO,IAAM,CAAC,GAAK,EAAE,CAC9B,IACG,CAAE,MAAO,GAAK,EAAG,MAAQ,CAAE,UAAW,IAAM,EAAG,MAAO,EAAG,EAC1D,CAAE,UAAW,CAAC,EAAG,MAAO,EAAG,CAC5B,CACD,GAAG,CAAE,UAAW,KAAQ,EAAE,CAC1B,EAAE,EAAG,EAAE,CACR,EACA,EAAG,KAAO,CACT,EAAG,EAAE,EAAI,EAAE,IAAM,CAAC,EAAE,EAEvB,CAAE,EAAE,MAAS,CACZ,EAAE,EAAG,EAAE,GAAK,CAAC,EAAE,EACf,CAAE,EAAE,GAAG,EAAE,EAAE,CAAE,EAAE,EAAG,CAAC,EAAG,KAAO,CAC7B,IAAM,CAAC,GAAK,CAAC,EAAE,UAAY,EAAE,qBAAuB,8BAAgC,EAAE,OAAO,EAC7F,CACF,IAAM,EAAI,EAAE,KAAK,CAAE,EAAI,GAAG,CAC1B,OAAO,EACL,GACE,EACE,EAAE,EAAE,CACJ,EAAG,GAAM,GAAG,QAAU,EAAE,CACzB,CACD,EAAE,EAAE,EAAE,CAAC,CACR,CACD,EACD,CAAE,EACD,EACE,GAAG,EAAE,EAAG,GAAG,EAAE,CAAC,CAAE,EAAE,CAClB,EAAE,EAAE,EAAE,CAAE,EAAG,EAAG,EAAE,CAChB,GAAG,CAAC,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,KAAO,GAAK,GAAK,IAAI,CAAE,QAAS,EAAG,WAAY,EAAG,oBAAqB,EAAG,CAAC,CAAC,CACjG,EAAG,GAAM,CAAC,CAAC,EAAE,CACb,GAAG,EAAE,CACN,CACA,GAAM,CACL,IAAM,OAAS,GAAG,CAAE,EAAI,MAAO,EAAG,EAAE,GAAK,IAAK,GAEzC,EAAI,GAAG,MAAS,CACnB,EAAG,EAAE,CAAC,sBAAuB,EAAE,CAAC,CAAE,EAAE,EAAG,EAAE,CAAE,EAAI,MAC/C,CAJgD,0BAA4B,CAC5E,EAAG,EAAE,CAAC,sBAAuB,EAAE,CAAC,CAAE,EAAE,EAAG,EAAE,EACzC,EAIL,CAAE,CAAE,mBAAoB,EAAG,aAAc,EAAG,uBAAwB,EAAG,EAE1E,EACE,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACD,CACF,CAAE,GAAK,GACL,CAAC,CAAE,KAAM,EAAG,eAAgB,EAAG,IAAK,EAAG,MAAO,GAAK,CAAE,wBAAyB,GAAK,CAAE,iBAAkB,EAAG,UAAW,GAAK,CAAE,SAAU,OAAU,EAC/I,EACE,EACA,EAAE,EAAE,CACJ,GAAG,EAAG,KAAO,IAAM,EAAE,CACrB,EAAE,EAAG,EAAG,EAAG,EAAG,EAAE,CAChB,GAAG,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAI,EAAE,IAAM,GAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CAAC,CACzD,CACD,EACD,CAAE,EAAE,EACL,EAAG,GAAI,GAAI,GAAI,GAAG,CAClB,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,GACL,CAAC,CAAE,SAAU,GAAK,CAAE,SAAU,GAAK,CAAE,UAAW,MAAS,CACxD,IAAM,EAAI,EAAE,EAAE,CACd,OAAO,EACL,EACE,EACA,EAAE,EAAE,CACJ,GAAG,EAAG,KAAO,IAAM,EAAE,CACrB,GAAG,EAAG,MAAQ,CAAE,IAAK,EAAG,EAAE,CAC3B,CACA,GAAM,CACL,GACE,EACE,EACA,GAAG,EAAE,CACL,EAAG,GAAM,EAAE,MAAM,OAAS,EAAE,CAC7B,KACK,CACJ,0BAA4B,CAC1B,EAAE,EAAG,EAAE,EACP,EAEL,EAEJ,CAAE,CACD,iBAAkB,EACnB,EAEH,EAAG,GAAI,GAAI,GAAG,CACd,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,GACL,CAAC,CAAE,eAAgB,MAAS,CAC3B,IAAM,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,CAAC,EAAE,CACnC,OAAO,EACL,EACE,EACA,EAAE,EAAG,EAAG,EAAE,CACV,GAAG,CAAC,EAAG,KAAO,IAAM,CAAC,GAAK,IAAM,IAAK,GAAE,CACvC,GAAG,CAAC,EAAG,EAAG,EAAG,KAAO,CAClB,GAAM,CAAE,MAAO,EAAG,KAAM,GAAM,EAC9B,GAAI,MACE,EAAE,EAAG,EAAE,CACT,MAAO,CAAC,OACL,GAAI,EAAE,EAAG,EAAE,CAChB,MAAO,CAAC,EACV,OAAO,GACP,CACF,GAAI,CACL,CACD,EACD,CAAE,EACD,EAAE,GAAG,EAAG,EAAG,EAAE,CAAE,EAAE,EAAE,CAAC,EACnB,CAAC,CAAC,EAAG,EAAG,GAAI,KAAO,CAClB,GAAK,IAAM,CAAC,GAAK,IAAM,IAAK,IAAK,EAAE,QAAU,EAAE,OAAO,EAAG,EAAE,EAE9D,CAAE,CAAE,UAAW,EAAG,wBAAyB,EAAG,uBAAwB,EAAG,eAAgB,EAAG,EAE/F,EAAG,GAAG,CACN,CAAE,UAAW,CAAC,EAAG,CAClB,CAAE,GAAK,GAAG,CAAC,CAAE,qBAAsB,EAAG,SAAU,MAAS,CACxD,IAAM,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,EAAE,IAAK,GAAE,CACzD,OAAO,EACL,EACE,GAAG,EAAG,EAAE,CACR,GAAG,CAAC,CAAE,UAAW,EAAG,eAAgB,GAAK,CAAE,UAAW,EAAG,WAAY,OAAU,CAC7E,aAAc,EACd,UAAW,KAAK,IAAI,EAAG,EAAI,EAAE,CAC7B,eAAgB,EACjB,EAAE,CACJ,CACD,EACD,CAAE,EACD,EACE,EACA,EAAE,EAAE,CACJ,GAAG,CAAC,EAAG,CAAE,UAAW,OAAU,CAC5B,GAAG,EACH,IAAK,EAAE,IAAM,EACd,EAAE,CACJ,CACD,EACD,CAAE,CACD,mBAAoB,EAEpB,gBAAiB,EAEjB,2BAA4B,EAE5B,eAAgB,EAChB,mBAAoB,EACrB,EACA,EAAG,GAAG,CAAC,CAAE,GAAK,GACd,CACC,CAAE,WAAY,EAAG,MAAO,GACxB,CAAE,aAAc,EAAG,UAAW,GAC9B,CAAE,wBAAyB,GAC3B,CAAE,SAAU,GACZ,CAAE,gBAAiB,EAAG,2BAA4B,EAAG,mBAAoB,MACrE,CACJ,IAAM,EAAI,GAAG,CAAE,EAAI,EAAE,IAAK,GAAE,CAAE,EAAI,EAAE,KAAK,CAAE,EAAI,EAAE,KAAK,CACtD,OAAO,EAAE,EAAG,EAAE,CAAE,EAAE,EAAG,EAAE,CAAE,EACvB,EACE,EACA,EAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACpB,EACA,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,KAAO,CACzB,IAAM,EAAI,GAAG,EAAE,SAAS,CACxB,GAAK,IAAM,MAAQ,IAAM,OAAS,EAAI,EAAE,UAAY,EAAE,WAAY,GAAK,EAAG,EAAE,CAAE,OAAQ,EAAG,UAAW,EAAG,CAAC,EAE3G,CAAE,EAAE,EAAE,EAAG,EAAE,GAAG,CAAE,EAAE,GAAG,CAAC,CAAE,EAAE,CAAE,EAC3B,EACE,EACA,EAAE,EAAE,CACJ,GAAG,EAAG,KAAO,IAAM,IAAK,GAAE,CAC1B,GAAI,CACJ,GAAG,EAAG,KAAO,EAAE,OAAO,CACvB,CACD,EACD,CAAE,CACD,SAAU,EACV,iBAAkB,EACnB,EAEH,EAAG,GAAI,GAAI,GAAI,GAAI,GAAG,CACvB,CACD,SAAS,GAAG,EAAG,CACb,MAAO,CAAE,MAAO,QAAS,MAAO,EAAG,OAAQ,EAAE,UAAW,CAE1D,IAAM,GAAK,GAAG,CAAC,CAAE,gBAAiB,MAAS,CACzC,IAAM,EAAI,EAAE,EAAE,CACd,OAAO,EACL,EACE,EACA,EAAG,GAAM,GAAK,EAAE,CAChB,EAAG,GAAM,MAAM,KAAK,CAAE,OAAQ,EAAG,CAAC,CAAC,KAAK,EAAG,IAAM,EAAE,CAAC,CACrD,CACD,EACD,CAAE,CAAE,aAAc,EAAG,EACrB,EAAG,GAAG,CAAC,CACV,SAAS,GAAG,EAAG,CACb,IAAI,EAAI,CAAC,EAAG,EACZ,YAAe,IAAM,EAAI,CAAC,EAAG,EAAI,GAAG,EAAG,IAEzC,IAAM,GAAK,OAAS,kBAAkB,KAAK,UAAU,UAAU,EAAI,UAAU,KAAK,UAAU,UAAU,CAAC,CAoHpG,GAAK,GACL,CACC,CACE,KAAM,EACN,gBAAiB,EACjB,eAAgB,EAChB,cAAe,EACf,eAAgB,EAChB,IAAK,EACL,aAAc,EACd,gBAAiB,EACjB,SAAU,EACV,WAAY,EACZ,MAAO,EACP,mBAAoB,EACpB,WAAY,EACZ,eAAgB,GAElB,CAAE,gCAAiC,EAAG,wBAAyB,EAAG,sBAAuB,GACzF,EACA,EACA,EACA,EACA,CAAE,cAAe,GACjB,EACA,CAAE,aAAc,GAChB,CAAE,YAAa,GACf,KACI,CACJ,GAAM,CAAE,UAAW,EAAG,qBAAsB,EAAG,gBAAiB,EAAG,aAAc,GAAG,GAAG,IAAM,EAC7F,OAAO,EAAE,GAAG,EAAE,uBAAuB,CAAE,EACrC,EACE,EAAE,mBACF,EAAG,GAAM,EAAE,cAAc,CAC1B,CACD,EAAE,eACH,CAAE,CACD,KAAM,EACN,kBAAmB,EACnB,eAAgB,EAChB,gBAAiB,EACjB,iBAAkB,EAClB,IAAK,EACL,YAAa,EACb,gBAAiB,EACjB,gCAAiC,EACjC,wBAAyB,EACzB,sBAAuB,EACvB,WAAY,EACZ,aAAc,EACd,gBAAiB,EAEjB,WAAY,EACZ,GAAG,EACH,aAAc,EACd,SAAU,EACV,UAAW,EACX,qBAAsB,EACtB,cAAe,EAEf,mBAAoB,EACpB,eAAgB,EAEhB,aAAc,GACd,GAAG,GAEH,GAAG,EACH,GAAG,EACH,MAAO,EACP,GAAG,EACJ,EAEH,EACE,GACA,GACA,GACA,GACA,GACA,GACA,GAnM0G,GAC3G,CACC,CAAE,UAAW,EAAG,SAAU,EAAG,oBAAqB,EAAG,UAAW,GAChE,CAAE,WAAY,EAAG,YAAa,EAAG,wBAAyB,EAAG,gBAAiB,GAC9E,CAAE,UAAW,GACb,CAAE,kBAAmB,EAAG,IAAK,EAAG,gBAAiB,EAAG,MAAO,GAC3D,CAAE,IAAK,GACP,CAAE,iBAAkB,MAChB,CACJ,IAAM,EAAI,GACR,EACE,EACA,EAAE,EAAE,CACJ,IACG,EAAG,EAAG,EAAG,GAAI,CAAC,CAAE,OAAQ,EAAG,MAAO,EAAG,aAAc,EAAG,WAAY,GAAK,KAAO,CAC7E,IAAM,EAAI,EAAI,EACV,EAAI,EACR,OAAO,IAAM,GAAK,EAAE,OAAS,GAAK,EAAE,OAAS,IAAM,EAAE,GAAG,gBAAkB,GAAK,EAAE,GAAG,gBAAkB,IAAM,EAAI,EAAI,EAAG,IAAM,IAAM,GAAK,KAAM,CAAC,EAAG,EAAG,EAAG,EAAE,EAE5J,CAAC,EAAG,EAAE,CAAE,EAAG,EAAE,CACd,CACD,GAAG,CAAC,KAAO,IAAM,EAAE,CACnB,EAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAE,CACnB,GAAG,EAAG,EAAG,EAAG,IAAO,KAAO,CAAC,GAAK,CAAC,GAAK,IAAM,GAAK,IAAM,GAAG,CAC1D,GAAG,CAAC,CAAC,OAAY,MAAQ,EAAE,gCAAiC,CAAE,OAAQ,EAAG,CAAE,GAAG,MAAM,CAAE,GAAG,CAC1F,CACF,CACD,SAAS,EAAE,EAAG,CACZ,EAAI,GAAK,EAAE,EAAG,CAAE,SAAU,OAAQ,IAAK,CAAC,EAAG,CAAC,CAAE,EAAE,EAAG,EAAE,GAAK,EAAE,EAAG,EAAE,CAAE,EAAE,EAAG,CAAE,SAAU,OAAQ,IAAK,CAAC,EAAG,CAAC,EAExG,OAAO,EAAE,EAAE,EAAG,EAAE,EAAG,EAAE,CAAC,EAAG,CAAC,EAAG,EAAG,KAAO,CACrC,GAAK,IAAI,CAAG,EAAE,EAAG,EAAI,EAAE,CAAG,EAAE,CAAC,EAAE,EAC/B,CAAE,EACF,EACE,GAAG,GAAG,EAAG,CAAC,EAAE,CAAE,EAAG,EAAE,CACnB,GAAG,CAAC,EAAG,EAAG,KAAO,CAAC,GAAK,CAAC,GAAK,IAAM,EAAE,CACrC,GAAG,CAAC,EAAG,KAAO,EAAE,CAChB,GAAG,EAAE,CACN,CACD,EACD,CAAE,EACD,EACE,EACA,EAAG,IAAO,CAAE,IAAK,CAAC,EAAG,EAAE,CACxB,CACD,EACD,CAAE,EACD,EACE,EACA,EAAE,EAAG,EAAE,CACP,GAAG,CAAC,EAAG,CAAE,aAAc,EAAG,SAAU,EAAG,SAAU,GAAK,KAAO,CAC3D,SAAS,EAAE,EAAG,CACZ,OAAO,GAAK,EAAI,GAElB,GAAI,EAAE,SAAW,EACf,OAAO,EAAE,EAAE,CACb,IAAI,EAAI,EACF,EAAI,GAAG,EAAG,EAAE,CACd,EAAI,EAAG,EAAI,EACf,KAAO,EAAI,GAAK,CACd,IAAK,GAAK,EACV,IAAI,EAAI,EAAE,SAAW,EAAI,EAAI,IAAQ,EAAE,EAAI,GAAK,EAAE,GAAK,EACvD,EAAI,EAAI,IAAM,GAAK,EAAG,EAAI,EAAI,EAAI,GAAI,GAAK,EAAG,GAAK,EAAE,EAAE,CAAE,IAE3D,OAAO,GACP,CACH,CACA,GAAM,CACL,EAAE,EAAG,EAAE,CAAE,0BAA4B,CACnC,EAAE,EAAG,CAAE,IAAK,EAAG,CAAC,CAAE,0BAA4B,CAC5C,EAAE,EAAG,EAAE,CAAE,EAAE,EAAG,CAAC,EAAE,EACjB,EACF,EAEL,CAAE,CAAE,UAAW,EAAG,EAErB,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAG,CAwHtB,CACF,GACA,GAzHI,GACL,CACC,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,MACK,CACL,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACJ,EACD,EACE,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACD,CAoFG,CACH,CACF,CACD,SAAS,GAAG,EAAG,EAAG,CAChB,IAAM,EAAI,EAAE,CAAE,EAAI,EAAE,CAChB,EAAI,EACF,EAAI,EAAE,OACZ,KAAO,EAAI,GACT,EAAE,EAAE,IAAM,EAAG,GAAK,EACpB,IAAK,IAAM,KAAK,EACd,OAAO,OAAO,EAAG,EAAE,GAAK,EAAE,GAAK,EAAE,IACnC,OAAO,EAET,IAAM,GAAK,OAAO,SAAW,IAAA,EAAQ,gBAAA,EAAoB,UACzD,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,IAAM,EAAI,OAAO,KAAK,EAAE,UAAY,EAAE,CAAC,CAAE,EAAI,OAAO,KAAK,EAAE,UAAY,EAAE,CAAC,CAAE,EAAI,OAAO,KAAK,EAAE,SAAW,EAAE,CAAC,CAAE,EAAI,OAAO,KAAK,EAAE,QAAU,EAAE,CAAC,CAAE,EAAA,EAAM,cAAc,EAAE,CAAC,CACtK,SAAS,EAAE,EAAG,EAAG,CACf,EAAE,aAAe,IAAK,IAAK,EAAE,EAAE,WAAY,CAAC,EAAE,CAC9C,IAAK,IAAM,KAAK,EAAG,CACjB,IAAM,EAAI,EAAE,EAAE,SAAS,IACvB,EAAE,EAAG,EAAE,GAAG,CAEZ,IAAK,IAAM,KAAK,EACd,GAAI,KAAK,EAAG,CACV,IAAM,EAAI,EAAE,EAAE,SAAS,IACvB,EAAE,EAAG,EAAE,GAAG,CAEd,EAAE,aAAe,IAAK,IAAK,EAAE,EAAE,WAAY,CAAC,EAAE,CAEhD,SAAS,EAAE,EAAG,CACZ,OAAO,EAAE,QAAQ,EAAG,KAAO,EAAE,GAAM,GAAM,CACvC,IAAM,EAAI,EAAE,EAAE,QAAQ,IACtB,EAAE,EAAG,EAAE,EACN,GAAI,EAAE,CAAC,CAEZ,SAAS,EAAE,EAAG,CACZ,OAAO,EAAE,QAAQ,EAAG,KAAO,EAAE,GAAK,GAAG,EAAE,EAAE,OAAO,IAAI,CAAE,GAAI,EAAE,CAAC,CA4C/D,MAAO,CACL,UA3CI,EAAM,WAAW,SAAS,EAAG,EAAG,CACpC,GAAM,CAAE,SAAU,EAAG,GAAG,GAAM,EAAG,CAAC,GAAA,EAAO,aAAe,GAAG,GAAG,EAAE,CAAG,GAAM,CACvE,EAAE,EAAG,EAAE,EACP,CAAC,CAAE,CAAC,GAAA,EAAO,SAAS,GAAG,EAAG,EAAE,CAAC,CAC/B,OAAS,CACP,IAAK,IAAM,KAAK,EACd,KAAK,GAAK,EAAE,EAAE,GAAI,EAAE,GAAG,CACzB,UAAa,CACX,OAAO,OAAO,EAAE,CAAC,IAAI,GAAG,GAEzB,CAAC,EAAG,EAAG,EAAE,CAAC,CAAE,OAAS,CACtB,EAAE,EAAG,EAAE,EACP,CAAA,EAAI,oBAAoB,EAAG,GAAG,EAAE,EAAE,CAAC,CAAC,CACtC,IAAM,EAAI,EACV,OAAuB,EAAA,EAAA,KAAE,EAAE,SAAU,CAAE,MAAO,EAAG,SAAU,IAAM,IAAK,GAA0E,GAAtD,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,GAAG,CAAC,GAAG,EAAG,GAAG,EAAG,GAAG,EAAE,CAAE,EAAE,CAAE,SAAU,EAAG,CAAC,CAAM,CAAC,EA6BzI,CACX,YAAa,EAAG,IAAM,CACpB,IAAM,EAAA,EAAM,WAAW,EAAE,CAAC,GAC1B,OAAS,EAAE,EAAG,EAAE,CAAE,CAAC,EAAG,EAAE,CAAC,EAE3B,gBAzBM,GAAM,CACZ,IAAM,EAAA,EAAM,WAAW,EAAE,CAAC,GAAI,EAAA,EAAM,YACjC,GAAM,EAAE,EAAG,EAAE,CACd,CAAC,EAAE,CACJ,CACD,OAAA,EAAS,qBACP,MACM,EAAG,EAAE,KACL,EAAG,EAAE,CACZ,EAiBD,aAlCO,GAAM,CACb,IAAM,EAAA,EAAM,WAAW,EAAE,CACzB,OAAA,EAAS,YACN,GAAM,CACL,EAAE,EAAE,GAAI,EAAE,EAEZ,CAAC,EAAG,EAAE,CACP,EA4BF,CAEH,IAAM,GAAA,EAAO,cAAc,IAAK,GAAE,CAAE,GAAA,EAAO,cAAc,IAAK,GAAE,CAAE,GAAK,iBAAkB,GAAK,SAAU,GAAK,OAAS,CACpH,GAAI,OAAO,SAAW,IACpB,OAAO,GACT,IAAM,EAAI,SAAS,cAAc,MAAM,CACvC,MAAO,GAAE,MAAM,SAAW,GAAI,EAAE,MAAM,WAAa,GAAK,GAAK,IAC7D,CAAE,GAAK,OAAO,SAAW,IAAA,EAAQ,gBAAA,EAAoB,UACvD,SAAS,GAAG,EAAG,CACb,MAAO,SAAU,EAEnB,SAAS,GAAG,EAAG,CACb,MAAO,SAAU,EAEnB,SAAS,GAAG,EAAG,EAAG,EAAG,EAAI,GAAI,EAAG,EAAG,CACjC,IAAM,EAAA,EAAM,OAAO,KAAK,CAAE,EAAA,EAAM,OAAO,KAAK,CAAE,EAAA,EAAM,OAAO,KAAK,CAAE,EAAA,EAAM,YACrE,GAAM,CACL,IAAI,EAAG,EAAG,EACJ,EAAI,EAAE,OACZ,GAAI,GAAG,EAAE,EAAI,GAAG,EAAE,CAAE,CAClB,IAAM,EAAI,GAAG,EAAE,CAAG,EAAI,EAAE,YACxB,EAAI,IAAM,CAAC,EAAI,GAAG,EAAG,EAAE,QAAQ,CAAG,EAAE,QAAS,EAAI,IAAM,CAAC,EAAI,EAAE,SAAS,gBAAgB,YAAc,EAAE,SAAS,gBAAgB,aAAc,EAAI,IAAM,CAAC,EAAI,EAAE,WAAa,EAAE,iBAE9K,EAAI,IAAM,CAAC,EAAI,GAAG,EAAG,EAAE,WAAW,CAAG,EAAE,UAAW,EAAI,IAAM,CAAC,EAAI,EAAE,YAAc,EAAE,aAAc,EAAI,IAAM,CAAC,EAAI,EAAE,YAAc,EAAE,aACpI,IAAM,MAAU,CACd,EAAE,CACA,aAAc,EACd,UAAW,KAAK,IAAI,EAAG,EAAE,CACzB,eAAgB,EACjB,CAAC,EAEJ,EAAE,oBAAsB,CAAC,EAAI,GAAG,CAAA,GAAM,UAAU,EAAE,CAAE,EAAE,UAAY,OAAS,IAAM,EAAE,SAAW,GAAK,GAAK,IAAM,EAAI,KAAO,EAAE,QAAU,KAAM,EAAE,CAAC,EAAE,CAAE,AAAuC,EAAE,WAA3B,aAAa,EAAE,QAAQ,CAAc,QAEvM,CAAC,EAAG,EAAG,EAAE,CACV,CACD,EAAE,cAAgB,CAChB,IAAM,EAAI,GAAK,EAAE,QACjB,OAAO,GAAG,EAAE,CAAE,EAAE,GAAK,EAAE,QAAQ,CAAE,EAAE,CAAE,kBAAmB,CAAC,EAAG,OAAQ,EAAG,CAAC,CAAE,EAAE,iBAAiB,SAAU,EAAG,CAAE,QAAS,CAAC,EAAG,CAAC,KAAQ,CAChI,GAAG,EAAE,CAAE,EAAE,KAAK,CAAE,EAAE,oBAAoB,SAAU,EAAE,GAEnD,CAAC,EAAG,EAAG,EAAG,EAAG,EAAE,CAAC,CACnB,SAAS,EAAE,EAAG,CACZ,IAAM,EAAI,EAAE,QACZ,GAAI,CAAC,IAAM,IAAM,CAAC,EAAI,gBAAiB,GAAK,EAAE,cAAgB,EAAI,iBAAkB,GAAK,EAAE,eAAiB,GAC1G,OACF,IAAM,EAAI,EAAE,WAAa,SACrB,EAAG,EAAG,EACV,GAAG,EAAE,EAAI,EAAI,KAAK,IAChB,GAAG,EAAE,SAAS,gBAAiB,IAAM,CAAC,EAAI,QAAU,SAAS,CAC7D,IAAM,CAAC,EAAI,EAAE,SAAS,gBAAgB,YAAc,EAAE,SAAS,gBAAgB,aAChF,CAAE,EAAI,IAAM,CAAC,EAAI,EAAE,WAAa,EAAE,YAAa,EAAI,IAAM,CAAC,EAAI,GAAG,EAAG,EAAE,QAAQ,CAAG,EAAE,UAAY,EAAI,EAAE,IAAM,CAAC,EAAI,cAAgB,gBAAiB,EAAI,GAAG,EAAG,IAAM,CAAC,EAAI,QAAU,SAAS,CAAE,EAAI,IAAM,CAAC,EAAI,GAAG,EAAG,EAAE,WAAW,CAAG,EAAE,WACnO,IAAM,EAAI,EAAI,EACd,GAAI,EAAE,MAAQ,IAAK,GAAG,CACpB,EAAE,SAAS,EAAE,CACb,OAEF,IAAM,EAAI,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,EAAG,EAAE,IAAI,CAAE,EAAE,CAAC,CACpD,GAAI,EAAE,IAAM,EAAG,GAAG,EAAG,EAAE,EAAI,IAAM,EAAG,CAClC,EAAE,CAAE,aAAc,EAAG,UAAW,EAAG,eAAgB,EAAG,CAAC,CAAE,GAAK,EAAE,CAAC,EAAE,CACnE,OAEF,GAAK,EAAE,QAAU,EAAG,EAAE,SAAW,aAAa,EAAE,QAAQ,CAAE,EAAE,QAAU,eAAiB,CACrF,EAAE,QAAU,KAAM,EAAE,QAAU,KAAM,EAAE,CAAC,EAAE,EACxC,IAAI,EAAI,EAAE,QAAU,KAAM,IAAM,CAAC,IAAM,EAAI,CAC5C,GAAG,EAAE,WAAa,IAAK,GAA+B,EAAE,CAA7B,CAAE,SAAU,EAAE,SAAU,CACnD,KAAM,GAAG,EAAG,EAAE,CACf,EAAG,EAAE,SAAS,EAAE,CAEnB,SAAS,EAAE,EAAG,CACZ,IAAM,CAAC,IAAM,EAAI,CACf,GAAG,EAAE,WAAa,IAAK,GAA+B,EAAE,CAA7B,CAAE,SAAU,EAAE,SAAU,CACnD,GAAG,EAAE,MAAQ,IAAK,GAAqC,EAAE,CAAnC,CAAE,KAAM,GAAG,EAAE,QAAS,EAAE,IAAI,CAAE,CACrD,EAAG,EAAE,QAAQ,SAAS,EAAE,CAE3B,MAAO,CAAE,iBAAkB,EAAG,YAAa,EAAG,iBAAkB,EAAG,CAErE,SAAS,GAAG,EAAG,CACb,OAAO,EAET,IA0BI,GAAqB,GACtB,CAAC,EAAG,MAAQ,CAAE,GAAG,EAAG,GAAG,EAAG,EAC3B,EAAG,GA5BsB,MAAQ,CACjC,IAAM,EAAI,EAAG,GAAM,QAAQ,IAAI,CAAE,EAAI,EAAG,GAAM,SAAS,IAAI,CAAE,EAAI,EAAE,EAAE,CAAC,CAAE,EAAI,EAAE,GAAG,CAAE,EAAI,EAAE,MAAM,CAAE,EAAI,EAAE,GAAG,CAAE,GAAK,EAAG,EAAI,OAAS,GAC/H,EACE,EACA,EAAG,GAAM,EAAE,GAAG,CACd,GAAI,CACL,CACD,EACD,CACD,MAAO,CACL,WAAY,EACZ,eAAgB,EAChB,iBAAkB,EAAE,mBAAmB,CACvC,gBAAiB,EAAE,SAAS,CAC5B,eAAgB,EAAE,QAAS,MAAM,CACjC,aAAc,EACd,gBAAiB,EAAE,SAAS,CAC5B,gBAAiB,EACjB,cAAe,EAAE,OAAQ,MAAM,CAC/B,YAAa,EACb,cAAe,EAAE,OAAQ,MAAM,CAC/B,kBAAmB,EAAE,WAAY,MAAM,CACvC,YAAa,EACb,sBAAuB,EAAE,wBAAwB,CACjD,qBAAsB,EAAE,cAAc,CACvC,EAGQ,CAAC,CACX,CAAE,IAAM,CAAE,OAAQ,MAAwB,EAAA,EAAA,KAAE,MAAO,CAAE,MAAO,CAAE,OAAQ,EAAG,CAAE,CAAC,CAAE,GAAK,CAAE,eAAgB,OAAQ,SAAU,IAAI,CAAE,OAAQ,EAAG,CAAE,GAAK,CAAE,eAAgB,OAAQ,CAAE,GAAK,CAAE,GAAG,GAAI,QAAS,eAAgB,OAAQ,OAAQ,CAAE,GAAqB,EAAE,KAAK,SAAS,CAAE,YAAa,EAAI,CAAC,GAAK,CACjS,IAAM,EAAI,EAAE,YAAY,CAAE,EAAI,GAAG,aAAa,CAAE,EAAI,EAAE,kBAAkB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,GAAG,6BAA6B,CAAE,EAAI,GAAG,uBAAuB,CAAE,EAAI,GAAK,EAAI,EAAI,EAAG,EAAI,EAAE,cAAc,CAAE,EAAI,EAAE,UAAU,CAAE,EAAI,EAAE,eAAe,CAAE,EAAI,EAAE,iBAAiB,CAAE,EAAI,EAAE,WAAW,CAAE,EAAI,EAAE,MAAM,CAAE,EAAI,GAAG,MAAM,CAAE,EAAI,EAAE,sBAAsB,CAAE,CAAE,YAAa,GAAM,GAC1X,EACA,EACA,EACA,EAAI,GAAK,EACT,EACA,EACA,EACA,EACA,EAAE,qCAAqC,CACxC,CAAE,CAAC,EAAG,GAAA,EAAO,SAAS,EAAE,CACzB,GAAG,YAAc,GAAM,CACrB,IAAM,GAAK,EAAE,EAAE,EACf,CACF,IAAM,EAAI,EAAE,mBAAmB,CAAE,EAAI,EAAE,wBAAwB,EAAI,GAAI,EAAI,EAAE,gBAAgB,CAAE,EAAI,EAAE,gBAAgB,CAAE,EAAI,EAAE,iBAAiB,CAAE,EAAI,EAAE,iBAAiB,CAAE,EAAI,EAAE,YAAY,CAAE,EAAI,EAAE,eAAe,CAAC,OAAS,EAAG,EAAI,EAAE,gBAAgB,CAAE,EAAI,EAAE,kCAAkC,CAAE,GAAI,EAAI,EAAE,CAAG,CAC5S,UAAW,aACX,GAAG,EAAI,CACL,QAAS,eACT,OAAQ,OACR,kBAAmB,IAAM,EAAQ,EAAI,OAAS,EAAjB,EAC7B,iBAAkB,EAAE,aACpB,mBAAoB,EAAE,UACtB,WAAY,SACb,CAAG,CACF,UAAW,IAAM,EAAQ,EAAI,OAAS,EAAjB,EACrB,cAAe,EAAE,aACjB,WAAY,EAAE,UACf,CACD,GAAG,EAAI,EAAE,CAAG,CAAE,WAAY,SAAU,CACrC,CACD,MAAO,CAAC,GAAK,EAAE,aAAe,GAAK,GAAM,MAAuC,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,EAAG,EAAE,CAAE,CAAC,EAAmB,EAAA,EAAA,KACtH,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,cAAe,EAAI,yBAA2B,qBAC9C,IAAK,EACL,MAAO,GACP,UAAW,EAAI,EAAE,SAAW,EAAE,OAAO,IAAK,GAAM,CAC9C,IAAM,EAAK,EAAE,cAAe,EAAI,EAAE,EAAK,EAAE,eAAgB,EAAE,KAAM,EAAE,CACnE,OAAO,GAAoB,EAAA,EAAA,eACzB,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,OAAQ,EAAE,KACV,MAAO,EAAE,MACT,IAAK,EACL,KAAM,EAAE,MAAQ,OAChB,GAAG,EAAE,OAAS,QAAU,EAAE,CAAG,CAAE,WAAY,EAAE,WAAY,CAC1D,CACF,CAAG,EAAE,OAAS,SAA0B,EAAA,EAAA,eACvC,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,aAAc,EACd,kBAAmB,EAAE,MACrB,kBAAmB,EAAE,KACrB,IAAK,EACL,MAAO,GACR,CACD,EAAE,EAAE,MAAO,EAAE,CACd,EAAmB,EAAA,EAAA,eAClB,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,GAAG,GAAG,EAAG,EAAE,KAAK,CAChB,aAAc,EACd,wBAAyB,EAAE,WAC3B,kBAAmB,EAAE,MACrB,kBAAmB,EAAE,KACrB,IAAK,EACL,MAAO,EAAI,GAAK,GACjB,CACD,EAAI,EAAE,EAAE,MAAO,EAAE,WAAY,EAAE,KAAM,EAAE,CAAG,EAAE,EAAE,MAAO,EAAE,KAAM,EAAE,CAChE,EACD,CACH,CACF,EACD,CAAE,GAAK,CACP,OAAQ,OACR,QAAS,OACT,UAAW,OACX,SAAU,WACV,wBAAyB,QAC1B,CAAE,GAAK,CACN,QAAS,OACT,UAAW,OACX,SAAU,WACX,CAAE,GAAM,IAAO,CACd,OAAQ,OACR,SAAU,WACV,IAAK,EACL,MAAO,OACP,GAAG,EAAI,CAAE,QAAS,OAAQ,cAAe,SAAU,CAAG,IAAK,GAC5D,EAAG,IAAM,EAAG,EAAG,EAAI,KAAO,CACzB,GAAG,GAAG,EAAE,CACR,SAAU,EAAI,WAAa,WAC3B,IAAK,EAAI,CAAC,EAAI,EACf,EAAG,GAAK,CACP,SAAU,IAAI,CACd,IAAK,EACL,MAAO,OACP,OAAQ,EACT,CACD,SAAS,EAAG,EAAG,EAAG,CAChB,GAAI,OAAO,GAAK,SACd,MAAO,CAAE,QAAS,EAAG,CAEzB,SAAS,GAAG,EAAG,EAAG,CAChB,MAAO,CAAE,KAAM,OAAO,GAAK,SAAW,IAAK,GAAI,EAAG,CAEpD,IAAM,GAAqB,EAAE,KAAK,UAAW,CAC3C,IAAM,EAAI,EAAE,kBAAkB,CAAE,EAAI,GAAG,eAAe,CAAE,EAAI,EAAE,kBAAkB,CAAE,EAAI,GAAA,EAClF,YACO,GAAM,CACX,EAAE,GAAG,EAAG,SAAS,CAAC,EAEpB,CAAC,EAAE,CACJ,CACD,CAAC,EACD,EAAE,qCAAqC,CACxC,CAAE,EAAI,EAAE,UAAU,CACnB,OAAO,GAAK,KAA2F,MAApE,EAAA,EAAA,KAAE,EAAG,CAAE,IAAK,EAAG,UAA0B,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,EAAG,EAAE,CAAE,CAAC,CAAE,CAAC,EACpG,CAAE,GAAqB,EAAE,KAAK,UAAW,CACzC,IAAM,EAAI,EAAE,kBAAkB,CAAE,EAAI,GAAG,eAAe,CAAE,EAAI,EAAE,kBAAkB,CAAE,EAAI,GAAA,EAClF,YACO,GAAM,CACX,EAAE,GAAG,EAAG,SAAS,CAAC,EAEpB,CAAC,EAAE,CACJ,CACD,CAAC,EACD,EAAE,qCAAqC,CACxC,CAAE,EAAI,EAAE,UAAU,CACnB,OAAO,GAAK,KAA2F,MAApE,EAAA,EAAA,KAAE,EAAG,CAAE,IAAK,EAAG,UAA0B,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,EAAG,EAAE,CAAE,CAAC,CAAE,CAAC,EACpG,CACF,SAAS,GAAG,CAAE,WAAY,EAAG,gBAAiB,EAAG,aAAc,GAAK,CAClE,OAAA,EAAS,KAAK,SAAS,CAAE,SAAU,EAAG,MAAO,EAAG,QAAS,EAAG,GAAG,GAAK,CAClE,IAAM,EAAI,EAAE,uBAAuB,CAAE,EAAI,EAAE,oBAAoB,CAAE,EAAI,EAAE,4BAA4B,CAAE,EAAI,EAAE,cAAc,CAAE,EAAI,EAAE,sBAAsB,EAAI,CAAC,EAAG,CAAE,iBAAkB,EAAG,YAAa,EAAG,iBAAkB,GAAM,GAC5N,EACA,EACA,EACA,EACA,IAAK,GACL,EACD,CACD,OAAO,EAAE,WAAY,EAAE,CAAE,EAAE,WAAY,EAAE,EAAkB,EAAA,EAAA,KACzD,EACA,CACE,cAAe,oBACf,yBAA0B,CAAC,EAC3B,IAAK,EACL,MAAO,CAAE,GAAG,EAAI,GAAK,GAAI,GAAG,EAAG,CAC/B,SAAU,EACV,GAAG,EACH,GAAG,EAAG,EAAG,EAAE,CACX,SAAU,EACX,CACF,EACD,CAEJ,SAAS,GAAG,CAAE,WAAY,EAAG,gBAAiB,EAAG,aAAc,GAAK,CAClE,OAAA,EAAS,KAAK,SAAS,CAAE,SAAU,EAAG,MAAO,EAAG,QAAS,EAAG,GAAG,GAAK,CAClE,IAAM,EAAI,EAAE,6BAA6B,CAAE,EAAI,EAAE,oBAAoB,CAAE,EAAI,EAAE,4BAA4B,CAAE,EAAI,EAAE,kBAAkB,CAAE,EAAI,EAAE,YAAY,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAA,EAAM,OAAO,KAAK,CAAwB,CAAE,iBAAkB,EAAG,YAAa,EAAG,iBAAkB,GAAM,GAC7R,EACA,EACA,EAH4M,EAAE,cAI7M,CACD,EACD,CACD,OAAO,QAAU,EAAE,QAAU,GAAK,EAAE,SAAS,cAAc,gBAAmB,CAC5E,EAAE,QAAU,OACV,CAAC,EAAG,EAAE,CAAC,CAAE,EAAE,iBAAkB,EAAE,CAAE,EAAE,WAAY,EAAE,EAAkB,EAAA,EAAA,KACrE,EACA,CACE,IAAK,EACL,yBAA0B,CAAC,EAC3B,MAAO,CAAE,SAAU,WAAY,GAAG,EAAG,GAAG,IAAM,EAAwB,IAAK,GAAzB,CAAE,OAAQ,EAAI,EAAG,CAAW,CAC9E,GAAG,EACH,GAAG,EAAG,EAAG,EAAE,CACX,SAAU,EACX,CACF,EACD,CAEJ,IAAM,IAAM,CAAE,SAAU,KAAQ,CAC9B,IAAM,EAAA,EAAM,WAAW,GAAG,CAAE,EAAI,GAAG,iBAAiB,CAAE,EAAI,GAAG,kBAAkB,CAAE,EAAI,EAAE,gBAAgB,CAAE,EAAI,EAAE,sBAAsB,CAGlI,EAAI,GAAA,EAHsI,YACrI,GAAG,EAAI,GAAM,GAAG,EAAG,EAAI,QAAU,SAAS,CAAC,CACjD,CAAC,EAAG,EAAE,CACG,CAAE,CAAC,EAAG,EAAE,qCAAqC,CAAC,CACzD,OAAA,EAAS,cAAgB,CACvB,IAAM,EAAE,EAAE,eAAe,CAAE,EAAE,EAAE,WAAW,GACzC,CAAC,EAAG,EAAG,EAAE,CAAC,EAAkB,EAAA,EAAA,KAAE,MAAO,CAAE,qBAAsB,UAAW,IAAK,EAAG,MAAO,GAAG,EAAE,CAAE,SAAU,EAAG,CAAC,EAC9G,IAAM,CAAE,SAAU,KAAQ,CAC3B,IAAM,EAAA,EAAM,WAAW,GAAG,CAAE,EAAI,GAAG,qBAAqB,CAAE,EAAI,GAAG,kBAAkB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,kBAAkB,CAAE,EAAI,EAAE,gBAAgB,CAAE,EAAI,GACtK,EACA,EACA,EAAE,qCAAqC,CACxC,CAAE,EAAI,EAAE,gBAAgB,CACzB,OAAA,EAAS,cAAgB,CACvB,IAAM,EAAE,EAAE,WAAW,CAAE,EAAE,CAAE,WAAY,EAAG,UAAW,EAAG,cAAe,EAAE,eAAgB,aAAc,IAAK,CAAC,GAC5G,CAAC,EAAG,EAAG,EAAE,CAAC,EAAkB,EAAA,EAAA,KAAE,MAAO,CAAE,qBAAsB,SAAU,IAAK,EAAG,MAAO,GAAG,EAAG,EAAG,EAAE,CAAE,SAAU,EAAG,CAAC,EACnH,IAAM,CAAE,SAAU,KAAQ,CAC3B,IAAM,EAAI,EAAE,uBAAuB,EAAI,MAAO,EAAI,EAAE,eAAe,CACnE,OAAuB,EAAA,EAAA,KAAE,EAAG,CAAE,MAAO,CADsC,GAAG,GAAI,UAAW,GAAG,EAAE,IAC5D,CAAE,GAAG,EAAG,EAD+D,EAAE,UAC7D,CAAC,CAAE,SAAU,EAAG,CAAC,EAWjE,CACF,UAAW,GACX,WAAY,GACZ,gBAAiB,EACjB,aAAc,IACI,GAClB,GACA,CACE,SAAU,CACR,iBAAkB,mBAClB,QAAS,UACT,aAAc,eACd,uBAAwB,yBACxB,YAAa,cACb,aAAc,eACd,SAAU,WACV,mBAAoB,qBACpB,qBAAsB,uBACtB,WAAY,aACZ,YAAa,cACb,aAAc,eACd,eAAgB,iBAChB,wBAAyB,0BACzB,WAAY,aACZ,kBAAmB,oBACnB,eAAgB,iBAChB,eAAgB,iBAChB,kBAAmB,oBACnB,iBAAkB,mBAElB,gBAAiB,kBACjB,gBAAiB,kBACjB,SAAU,WACV,wBAAyB,0BACzB,gBAAiB,kBACjB,KAAM,OACN,iBAAkB,mBAClB,iBAAkB,mBAClB,cAAe,gBACf,gBAAiB,kBACjB,mBAAoB,qBACpB,YAAa,cACb,SAAU,WACV,oBAAqB,sBACrB,mCAAoC,qCACrC,CACD,QAAS,CACP,cAAe,gBACf,eAAgB,iBAChB,SAAU,WACV,SAAU,WACV,mBAAoB,qBACpB,SAAU,WACX,CACD,OAAQ,CACN,YAAa,cACb,WAAY,aACZ,aAAc,eACd,aAAc,eACd,oBAAqB,sBACrB,iBAAkB,mBAClB,uBAAwB,yBACxB,cAAe,gBACf,aAAc,eACf,CACF,CACD,EA5EwB,KAAK,SAAS,EAAG,CACzC,IAAM,EAAI,EAAE,kBAAkB,CAAE,EAAI,EAAE,kBAAkB,CAAC,OAAS,EAAG,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,UAAU,CAClH,OAAuB,EAAA,EAAA,MAAG,GAAK,EAAI,GAAK,GAAI,CAAE,GAAG,EAAG,QAAS,EAAG,SAAU,CACxE,IAAqB,EAAA,EAAA,KAAE,GAAI,CAAE,UAA0B,EAAA,EAAA,KAAE,GAAI,CAAE,YAAa,CAAC,EAAG,CAAC,CAAE,CAAC,EACpE,EAAA,EAAA,MAAG,GAAK,EAAI,GAAK,GAAI,CAAE,SAAU,EAC/B,EAAA,EAAA,KAAE,GAAI,EAAE,CAAC,EACT,EAAA,EAAA,KAAE,GAAI,EAAE,CAAC,EACT,EAAA,EAAA,KAAE,GAAI,EAAE,CAAC,CAC1B,CAAE,CAAC,CACL,CAAE,CAAC,EAmEF,CACH,CAAE,GAAqB,GAAG,CAAE,WAAY,GAAI,gBAAiB,EAAG,aAAc,GAAI,CAAC,CAAE,GAAqB,GAAG,CAAE,WAAY,GAAI,gBAAiB,EAAG,aAAc,GAAI,CAAC,CAAE,GAAK,GAmC1K,GAAqB,GACtB,CAAC,EAAG,MAAQ,CAAE,GAAG,EAAG,GAAG,EAAG,EAC3B,EAAG,GArC2M,MAAQ,CACtN,IAAM,EAAI,EAAG,IAAsB,EAAA,EAAA,MAAG,KAAM,CAAE,SAAU,CACtD,SACA,EACD,CAAE,CAAC,CAAC,CAAE,EAAI,EAAE,KAAK,CAAE,EAAI,EAAG,IAAsB,EAAA,EAAA,MAAG,KAAM,CAAE,QAAS,IAAK,SAAU,CAClF,SACA,EACD,CAAE,CAAC,CAAC,CAAE,EAAI,EAAE,KAAK,CAAE,EAAI,EAAE,KAAK,CAAE,EAAI,EAAE,EAAE,CAAC,CAAE,EAAI,EAAE,GAAG,CAAE,EAAI,EAAE,GAAG,CAAE,GAAK,EAAG,EAAI,OAAS,GACrF,EACE,EACA,EAAG,GAAM,EAAE,GAAG,CACd,GAAI,CACL,CACD,EACD,CACD,MAAO,CACL,WAAY,EACZ,eAAgB,EAChB,QAAS,EACT,iBAAkB,EAAE,mBAAmB,CACvC,UAAW,EAAE,YAAY,CACzB,mBAAoB,EACpB,mBAAoB,EACpB,YAAa,EACb,aAAc,EACd,kBAAmB,EAAE,WAAY,MAAM,CACvC,YAAa,EACb,sBAAuB,EAAE,wBAAwB,CACjD,mBAAoB,EAAE,YAAa,QAAQ,CAC3C,eAAgB,EAAE,QAAS,QAAQ,CACnC,qBAAsB,EAAE,YAAa,QAAQ,CAC7C,mBAAoB,EAAE,YAAa,QAAQ,CAC3C,kBAAmB,EAAE,WAAY,KAAK,CACtC,eAAgB,EAAE,QAAS,KAAK,CACjC,EAGQ,CAAC,CACX,CAAE,IAAM,CAAE,OAAQ,MAAwB,EAAA,EAAA,KAAE,KAAM,CAAE,UAA0B,EAAA,EAAA,KAAE,KAAM,CAAE,MAAO,CAAE,OAAQ,EAAG,CAAE,CAAC,CAAE,CAAC,CAAE,IAAM,CAAE,OAAQ,MAAwB,EAAA,EAAA,KAAE,KAAM,CAAE,UAA0B,EAAA,EAAA,KAAE,KAAM,CAAE,MAAO,CAAE,OAAQ,EAAG,OAAQ,EAAG,QAAS,EAAG,CAAE,CAAC,CAAE,CAAC,CAAE,GAAK,CAAE,eAAgB,OAAQ,CAAE,GAAK,CAAE,SAAU,IAAI,CAAE,OAAQ,EAAG,eAAgB,OAAQ,CAAE,GAAqB,EAAE,KAAK,SAAS,CAAE,YAAa,EAAI,CAAC,GAAK,CACvZ,IAAM,EAAI,EAAE,YAAY,CAAE,EAAI,EAAE,iBAAiB,CAAE,EAAI,EAAE,iBAAiB,CAAE,EAAI,EAAE,UAAU,CAAE,EAAI,EAAE,YAAY,CAAE,EAAI,EAAE,oBAAoB,CAAE,EAAI,EAAE,eAAe,CAAC,OAAS,EAAG,EAAI,EAAE,cAAc,CAAE,EAAI,EAAE,eAAe,CAAE,EAAI,EAAE,wBAAwB,EAAI,GAAI,EAAI,EAAE,iBAAiB,CAAE,EAAI,EAAE,oBAAoB,CAAE,GAAK,EAAI,EAAE,SAAW,EAAE,EAAE,QAAQ,EAAG,EAAG,KAAO,IAAM,EAAI,EAAE,KAAK,EAAE,KAAK,CAAG,EAAE,KAAK,EAAE,EAAI,GAAK,EAAE,KAAK,CAAE,GAAI,EAAE,CAAC,CACpa,OAAQ,EAAI,EAAE,SAAW,EAAE,OAAO,IAAK,GAAM,CAC3C,IAAM,EAAI,EAAE,cAAe,EAAI,EAAE,EAAI,EAAG,EAAE,KAAM,EAAE,CAAE,EAAI,EAAI,IAAM,EAAI,EAAI,EAAE,EAAI,GAAK,EACrF,OAAO,GAAoB,EAAA,EAAA,eACzB,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,OAAQ,EAAE,KACV,MAAO,EAAE,MACT,IAAK,EACL,KAAM,EAAE,MAAQ,OACjB,CACF,CAAG,EAAE,OAAS,SAA0B,EAAA,EAAA,eACvC,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,aAAc,EACd,kBAAmB,EAAE,MACrB,kBAAmB,EAAE,KACrB,IAAK,EACL,MAAO,CACL,GAAG,GACH,IAAK,EACN,CACF,CACD,EAAE,EAAE,MAAO,EAAE,CACd,EAAmB,EAAA,EAAA,eAClB,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,GAAG,GAAG,EAAG,EAAE,KAAK,CAChB,aAAc,EACd,kBAAmB,EAAE,MACrB,kBAAmB,EAAE,KACrB,wBAAyB,EAAE,WAC3B,IAAK,EACL,MAAO,EAAI,CAAE,GAAG,GAAI,IAAK,EAAI,EAAG,CAAG,GACpC,CACD,EAAI,EAAE,EAAE,MAAO,EAAE,WAAY,EAAE,KAAM,EAAE,CAAG,EAAE,EAAE,MAAO,EAAE,KAAM,EAAE,CAChE,EACD,EACF,CAAE,GAAqB,EAAE,KAAK,UAAW,CACzC,IAAM,EAAI,EAAE,YAAY,CAAE,EAAI,EAAE,kBAAkB,CAAC,OAAS,EAAG,EAAI,GAAG,aAAa,CAAE,EAAI,EAAE,kBAAkB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,GAAG,6BAA6B,CAAE,EAAI,GAAG,uBAAuB,CAAE,EAAI,GAAK,EAAI,EAAI,EAAG,EAAI,EAAE,iBAAiB,CAAmC,CAAE,YAAa,EAAG,IAAK,GAAM,GAC3T,EADiQ,EAAE,WAElQ,CACD,EACA,EAJoR,EAAE,MAKrR,CACD,IAAK,GACL,EACA,CAAC,EACD,EAAE,qCAAqC,CACxC,CAAE,CAAC,EAAG,GAAA,EAAO,SAAS,EAAE,CACzB,GAAG,YAAc,GAAM,CACrB,IAAM,IAAM,EAAE,QAAQ,MAAM,UAAY,GAAG,EAAE,IAAK,EAAE,EAAE,GACtD,CACF,IAAM,EAAI,EAAE,mBAAmB,CAAE,EAAI,EAAE,YAAY,EAAI,GAAI,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,UAAU,CAClK,GAAI,IAAM,GAAK,GAAM,KACnB,OAAuB,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,EAAG,EAAE,CAAE,CAAC,CAC9C,IAAM,GAAK,EAAI,EAAE,SAAW,EAAE,EAAE,QAAQ,EAAG,IAAM,EAAI,EAAE,KAAM,EAAE,CAAE,EAAI,EAAE,UAAY,EAAI,EAAI,EAAG,EAAI,EAAE,aAAc,EAAI,EAAI,GAAoB,EAAA,EAAA,KAAE,EAAG,CAAE,QAAS,EAAG,OAAQ,EAAG,CAAE,cAAc,CAAG,KAAM,EAAI,EAAI,GAAoB,EAAA,EAAA,KAAE,EAAG,CAAE,QAAS,EAAG,OAAQ,EAAG,CAAE,iBAAiB,CAAG,KACrR,OAAuB,EAAA,EAAA,MAAG,EAAG,CAAE,cAAe,qBAAsB,IAAK,EAAG,GAAG,EAAG,EAAG,EAAE,CAAE,SAAU,CACjG,EACA,IAAqB,EAAA,EAAA,KAAE,GAAI,CAAE,YAAa,CAAC,EAAG,CAAC,EAC/B,EAAA,EAAA,KAAE,GAAI,EAAE,CAAC,CACzB,EACD,CAAE,CAAC,EACJ,CAAE,IAAM,CAAE,SAAU,KAAQ,CAC5B,IAAM,EAAA,EAAM,WAAW,GAAG,CAAE,EAAI,GAAG,iBAAiB,CAAE,EAAI,GAAG,kBAAkB,CAAE,EAAI,GAAA,EACjF,YAAc,GAAG,EAAI,GAAM,GAAG,EAAG,SAAS,CAAC,CAAE,CAAC,EAAE,CAAC,CACnD,CAAC,EACD,EAAE,qCAAqC,CACxC,CACD,OAAA,EAAS,cAAgB,CACvB,IAAM,EAAE,EAAE,eAAe,CAAE,EAAE,EAAE,WAAW,GACzC,CAAC,EAAG,EAAG,EAAE,CAAC,EAAkB,EAAA,EAAA,KAAE,MAAO,CAAE,qBAAsB,UAAW,IAAK,EAAG,MAAO,GAAG,CAAC,EAAE,CAAE,SAAU,EAAG,CAAC,EAC/G,IAAM,CAAE,SAAU,KAAQ,CAC3B,IAAM,EAAA,EAAM,WAAW,GAAG,CAAE,EAAI,GAAG,qBAAqB,CAAE,EAAI,GAAG,kBAAkB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,kBAAkB,CAAE,EAAI,GAC9I,EACA,EACA,EAAE,qCAAqC,CACxC,CACD,OAAA,EAAS,cAAgB,CACvB,IAAM,EAAE,EAAE,WAAW,CAAE,EAAE,CAAE,WAAY,EAAG,UAAW,EAAG,cAAe,EAAE,eAAgB,aAAc,IAAK,CAAC,GAC5G,CAAC,EAAG,EAAG,EAAE,CAAC,EAAkB,EAAA,EAAA,KAAE,MAAO,CAAE,qBAAsB,SAAU,IAAK,EAAG,MAAO,GAAG,CAAC,EAAG,EAAE,CAAE,SAAU,EAAG,CAAC,EAkChH,CACF,UAAW,GACX,WAAY,GACZ,gBAAiB,EACjB,aAAc,IACI,GAClB,GACA,CACE,SAAU,CACR,iBAAkB,mBAClB,QAAS,UACT,aAAc,eACd,eAAgB,iBAChB,YAAa,cACb,aAAc,eACd,mBAAoB,qBACpB,mBAAoB,qBACpB,SAAU,WACV,mBAAoB,qBACpB,qBAAsB,uBACtB,WAAY,aACZ,aAAc,eACd,wBAAyB,0BACzB,WAAY,aACZ,YAAa,cACb,kBAAmB,oBACnB,eAAgB,iBAChB,eAAgB,iBAChB,kBAAmB,oBACnB,iBAAkB,mBAElB,gBAAiB,kBACjB,SAAU,WACV,wBAAyB,0BACzB,KAAM,OACN,iBAAkB,mBAClB,iBAAkB,mBAClB,cAAe,gBACf,gBAAiB,kBACjB,mBAAoB,qBACpB,YAAa,cACb,SAAU,WACX,CACD,QAAS,CACP,cAAe,gBACf,eAAgB,iBAChB,SAAU,WACV,SAAU,WACV,SAAU,WACX,CACD,OAAQ,CACN,YAAa,cACb,WAAY,aACZ,aAAc,eACd,aAAc,eACd,oBAAqB,sBACrB,iBAAkB,mBAClB,uBAAwB,yBACxB,cAAe,gBACf,aAAc,eACf,CACF,CACD,EA/FwB,KAAK,SAAS,EAAG,CACzC,IAAM,EAAI,EAAE,kBAAkB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,GAAG,oBAAoB,CAAE,EAAI,GAAG,oBAAoB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,UAAU,CAAE,EAAI,GAAA,EACnM,YAAc,GAAG,EAAI,GAAM,GAAG,EAAG,SAAS,CAAC,CAAE,CAAC,EAAE,CAAC,CACnD,CAAC,EACD,EAAE,qCAAqC,CACxC,CAAE,EAAI,GAAA,EACH,YAAc,GAAG,EAAI,GAAM,GAAG,EAAG,SAAS,CAAC,CAAE,CAAC,EAAE,CAAC,CACnD,CAAC,EACD,EAAE,qCAAqC,CACxC,CAAE,EAAI,GAAK,EAAI,GAAK,GAAI,EAAI,GAAK,EAAI,GAAK,GAAI,EAAI,EAAE,iBAAiB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,uBAAuB,CAAE,EAAI,GAAoB,EAAA,EAAA,KAC1J,EACA,CACE,IAAK,EACL,MAAO,CAAE,SAAU,SAAU,IAAK,EAAG,OAAQ,EAAG,CAChD,GAAG,EAAG,EAAG,EAAE,CACX,SAAU,GAAG,CACd,CACD,YACD,CAAG,KAAM,EAAI,GAAoB,EAAA,EAAA,KAChC,EACA,CACE,IAAK,EACL,MAAO,CAAE,OAAQ,EAAG,SAAU,SAAU,OAAQ,EAAG,CACnD,GAAG,EAAG,EAAG,EAAE,CACX,SAAU,GAAG,CACd,CACD,YACD,CAAG,KACJ,OAAuB,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,GAAG,EAAG,EAAG,EAAE,CAAE,UAA0B,EAAA,EAAA,KAAE,EAAG,CAAE,UAA0B,EAAA,EAAA,MAAG,EAAG,CAAE,MAAO,CAAE,cAAe,EAAG,eAAgB,OAAQ,CAAE,GAAG,EAAG,EAAG,EAAE,CAAE,SAAU,CAC9L,GACgB,EAAA,EAAA,KAAE,GAAI,EAAE,CAAE,YAAY,CACtC,EACD,CAAE,CAAC,CAAE,CAAC,CAAE,CAAC,EA+DR,CACH,CAAE,GAAqB,GAAG,CAAE,WAAY,GAAI,gBAAiB,EAAG,aAAc,GAAI,CAAC,CAAE,GAAqB,GAAG,CAAE,WAAY,GAAI,gBAAiB,EAAG,aAAc,GAAI,CAAC,CAAoB,GAAK,CAC9L,OAAQ,EACR,WAAY,EACZ,MAAO,EAAE,CACT,UAAW,EACX,aAAc,EACd,UAAW,EACX,IAAK,EACN,CAAE,GAAK,CACN,OAAQ,EACR,WAAY,EACZ,MAAO,CAAC,CAAE,MAAO,EAAG,CAAC,CACrB,UAAW,EACX,aAAc,EACd,UAAW,EACX,IAAK,EACN,CAAE,CAAE,KAAM,GAAI,MAAO,GAAI,IAAK,GAAI,IAAK,GAAI,MAAO,IAAO,KAC1D,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,MAAM,KAAK,CAAE,OAAQ,EAAI,EAAI,EAAG,CAAC,CAAC,KAAK,EAAG,KAAO,CAAE,KAAM,IAAM,KAAO,KAAO,EAAE,EAAI,GAAI,MAAO,EAAI,EAAG,EAAE,CAEhH,SAAS,GAAG,EAAG,CACb,MAAO,CACL,GAAG,GACH,MAAO,EACR,CAEH,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,IAAM,IAAK,IAAK,EAAE,QAAU,EAAE,OAAS,EAAE,SAAW,EAAE,OAE/D,SAAS,GAAG,EAAG,EAAG,CAChB,OAAO,IAAM,IAAK,IAAK,EAAE,SAAW,EAAE,QAAU,EAAE,MAAQ,EAAE,IAE9D,IAAM,GAAqB,GACxB,CACC,CAAE,mBAAoB,EAAG,aAAc,EAAG,SAAU,EAAG,aAAc,GACrE,CAAE,aAAc,EAAG,aAAc,EAAG,SAAU,EAAG,qBAAsB,EAAG,SAAU,EAAG,UAAW,EAAG,0BAA2B,EAAG,eAAgB,GACnJ,EACA,EACA,CAAE,SAAU,EAAG,WAAY,GAC3B,CAAE,mBAAoB,EAAG,gBAAiB,EAAG,2BAA4B,EAAG,eAAgB,EAAG,mBAAoB,GACnH,KACI,CACJ,IAAM,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,EAAE,CAAE,EAAI,EAAE,GAAG,CAAE,EAAI,EAAE,CAAE,OAAQ,EAAG,MAAO,EAAG,CAAC,CAAE,EAAI,EAAE,CAAE,OAAQ,EAAG,MAAO,EAAG,CAAC,CAAE,EAAI,GAAG,CAAE,EAAI,GAAG,CAAE,GAAI,EAAE,EAAE,CAAE,GAAI,EAAE,KAAK,CAAE,GAAI,EAAE,CAAE,OAAQ,EAAG,IAAK,EAAG,CAAC,CAAE,GAAK,GAAG,CAAE,GAAI,GAAG,CAAE,GAAI,EAAE,CAAC,EAAE,CAAE,GAAK,EAAE,EAAE,CAAE,GAAK,EAAE,CAAC,EAAE,CAAE,GAAK,EAAE,CAAC,EAAE,CAAE,GAAK,EAAE,CAAC,EAAE,CACvP,EACE,EACE,EACA,EAAE,GAAG,CACL,GAAG,CAAC,EAAG,KAAO,IAAM,EAAE,CACvB,KACK,CACJ,EAAE,GAAI,CAAC,EAAE,EAEZ,CAAE,EACD,EACE,GAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAG,CACvB,GAAG,CAAC,EAAG,EAAG,EAAG,GAAM,KAAQ,GAAK,CAAC,GAAK,EAAE,SAAW,GAAK,EAAG,SAAW,GAAK,CAAC,EAAG,CAChF,EACA,KAAS,KAAO,CACf,EAAE,GAAI,CAAC,EAAE,CAAE,GAAG,MAAS,CACrB,EAAE,EAAG,EAAE,EACP,CAAE,GAAG,EAAE,EAAE,KAAQ,CACjB,EAAE,EAAG,CAAC,EAAG,EAAE,CAAC,CAAE,EAAE,GAAI,CAAC,EAAE,EACvB,EAEL,CAAE,EACD,EACE,GACA,EAAG,GAAM,GAAK,MAAQ,EAAE,UAAY,EAAE,CACtC,GAAG,EAAE,CACN,CACD,EACD,CAAE,EACD,EACE,EACA,EAAE,GAAE,CACJ,GAAG,EAAG,KAAO,GAAK,KAAK,CACxB,EACA,EAAG,KAAO,CACT,IAAM,EAAE,EAAG,EAAE,SAAS,CAAE,EAAE,EAAG,EAAE,KAAK,CAAE,EAAE,GAAG,EAAE,IAAI,CAAE,EAAE,UAAY,IAAM,EAAE,GAAG,CAAC,EAAE,CAAE,GAAG,EAAE,EAAG,GAAG,EAAE,CAAC,CAAG,GAAM,CACtG,EAAE,GAAG,CAAC,EAAE,EACR,CAAE,EAAE,EAAG,CAAE,IAAK,EAAE,UAAW,CAAC,IAEjC,CAAE,EACD,EACE,EACA,GAAG,CAAE,OAAQ,KAAQ,EAAE,CACxB,CACD,EACD,CAAE,EACD,EACE,GACE,EAAE,EAAG,GAAG,CACR,EAAE,EAAG,GAAG,CACR,EAAE,IAAI,EAAG,IAAM,IAAM,IAAK,IAAK,EAAE,SAAW,EAAE,QAAU,EAAE,MAAQ,EAAE,IAAI,CACxE,EAAE,EAAE,CACL,CACD,GAAG,CAAC,EAAG,EAAG,EAAG,MAAS,CACpB,IAAK,EACL,KAAM,EACN,UAAW,EACX,SAAU,EACX,EAAE,CACJ,CACD,GACD,CAAE,EACD,EACE,GACE,EAAE,EAAE,CACJ,EACA,EAAE,GAAG,GAAG,CACR,EAAE,EAAG,GAAG,CACR,EAAE,EAAG,GAAG,CACR,EAAE,GAAE,CACJ,EAAE,EAAE,CACJ,EAAE,GAAE,CACJ,EAAE,GAAG,CACL,EAAE,GAAG,CACN,CACD,GAAG,QAAe,KAAO,CAAC,EAAE,CAC5B,GACG,CACC,EACA,CAAC,EAAG,GACJ,EACA,EACA,EACA,EACA,GAEA,EACA,KACI,CACJ,GAAM,CAAE,OAAQ,EAAI,IAAK,GAAO,EAAI,CAAE,OAAQ,EAAI,MAAO,GAAO,EAAI,CAAE,MAAO,GAAO,EACpF,GAAI,IAAO,IAAM,IAAM,GAAK,IAAO,GACjC,OAAO,GACT,GAAI,IAAO,EAAG,CACZ,IAAM,EAAK,GAAG,EAAI,EAAE,CACpB,OAAO,GAAG,GAAG,EADc,EAAK,KAAK,IAAI,EAAK,EAAG,EAAE,CAC9B,EAAG,CAAC,CAE3B,IAAM,EAAK,GAAG,EAAI,EAAI,EAAG,CACrB,EAAI,EACR,EAAK,IAAM,GAAK,IAAM,GAAK,EAAK,GAAK,EAAK,EAAG,EAAK,EAAK,IAAM,EAAK,EAAK,IAAI,EAAI,IAAO,EAAK,GAAI,CAAE,EAAK,EAAK,IAAI,EAAI,IAAO,EAAK,GAAI,CAAG,EAAG,EAAK,GAAG,EAAI,EAAG,GAAG,EAAI,EAAK,EAAE,CAAC,CAAE,EAAK,GAAG,EAAI,GAAG,EAAG,EAAG,CAAC,GAAK,EAAK,EAAG,EAAK,IACjN,IAAM,EAAK,GAAG,EAAI,EAAI,EAAG,CAAE,CAAE,OAAQ,EAAI,IAAK,GAAO,GAAG,EAAG,EAAI,EAAI,EAAG,CAAE,EAAK,GAAG,EAAI,EAAG,CACvF,MAAO,CAAE,OAAQ,EAAI,WAAY,EAAI,MAAO,EAAI,UAAW,EAAI,aAD+B,EAAK,GAAM,EAAK,GAAK,EAAK,EACvC,UAAW,EAAI,IAAK,EAAI,EAE5G,CACF,CACD,EACD,CAAE,EACD,EACE,GACA,EAAG,GAAM,IAAM,KAAK,CACpB,EAAG,GAAM,EAAE,OAAO,CACnB,CACD,EACD,CAAE,EACD,EACE,GAAG,EAAG,EAAG,EAAG,GAAE,CACd,GAAG,CAAC,EAAG,EAAG,CAAE,MAAO,MAAS,EAAE,OAAS,GAAK,EAAE,SAAW,GAAK,EAAE,SAAW,EAAE,CAC7E,GAAG,CAAC,EAAG,EAAG,CAAE,MAAO,GAAK,KAAQ,CAC9B,GAAM,CAAE,OAAQ,EAAI,IAAK,GAAM,GAAG,EAAG,EAAI,EAAG,EAAE,CAC9C,MAAO,CAAC,EAAG,EAAG,EACd,CACF,EAAG,GAAG,CACP,CACD,EACD,CACD,IAAM,GAAK,EAAE,CAAC,EAAE,CAChB,EACE,EACE,EACA,EAAE,GAAG,CACL,GAAG,CAAC,EAAG,KAAO,GAAK,IAAM,EAAE,CAC5B,CACD,GACD,CACD,IAAM,GAAK,GACT,EACE,GAAG,EAAG,EAAE,CACR,GAAG,CAAC,CAAE,MAAO,MAAS,EAAE,OAAS,EAAE,CACnC,EAAE,GAAG,CACL,GAAG,CAAC,CAAC,EAAG,GAAI,KAAO,CACjB,IAAM,EAAK,EAAE,MAAM,EAAE,MAAM,OAAS,GAAG,QAAU,EAAI,EACrD,OAAQ,GAAK,EAAE,OAAS,GAAK,EAAE,WAAa,GAAK,EAAE,eAAiB,GAAK,EAAE,MAAM,SAAW,IAAM,GAClG,CACF,GAAG,CAAC,EAAG,MAAQ,EAAI,EAAE,CACrB,GAAI,CACL,CACF,CAAE,GAAK,GACN,EACE,EAAE,EAAE,CACJ,GAAG,CAAE,MAAO,KAAQ,EAAE,OAAS,GAAK,EAAE,GAAG,QAAU,EAAE,CACrD,GAAG,EAAE,CACL,GAAI,CACL,CACF,CAAE,GAAK,GACN,EACE,EAAE,EAAE,CACJ,EAAE,GAAE,CACJ,GAAG,CAAC,CAAE,MAAO,GAAK,KAAO,EAAE,OAAS,GAAK,CAAC,EAAE,CAC5C,GAAG,CAAC,CAAE,MAAO,OAAU,CACrB,SAAU,EAAE,EAAE,OAAS,GAAG,MAC1B,WAAY,EAAE,GAAG,MAClB,EAAE,CACH,EAAG,GAAG,CACN,GAAG,EAAE,CACN,CACF,CACD,EAAE,GAAI,EAAE,uBAAuB,CAAE,EAC/B,EACE,EACA,EAAE,EAAG,EAAG,EAAG,GAAE,CACb,GAAG,CAAC,EAAG,EAAG,EAAG,EAAI,KAAQ,CACvB,IAAM,EAAI,GAAG,EAAE,CAAE,CAAE,MAAO,EAAI,SAAU,EAAI,OAAQ,GAAO,EACvD,EAAK,EAAE,MACX,IAAO,SAAW,EAAK,EAAK,GAAI,EAAK,GAAG,EAAG,EAAI,GAAG,EAAK,EAAG,EAAG,CAAC,CAC9D,IAAI,EAAK,GAAG,EAAG,EAAI,EAAG,EAAG,CACzB,OAAO,IAAO,MAAQ,EAAK,GAAG,EAAK,EAAE,OAAS,EAAE,OAAO,CAAG,IAAO,WAAa,EAAK,GAAG,EAAK,EAAE,OAAS,EAAI,EAAE,OAAS,EAAE,EAAG,IAAO,IAAK,IAAK,IAAO,IAAM,GAAM,GAAK,CAAE,SAAU,EAAI,IAAK,EAAI,EAC5L,CACH,CACD,EACD,CACD,IAAM,GAAK,GACT,EACE,EACA,EAAG,GAAM,EAAE,aAAe,EAAE,OAAO,CACpC,CACD,EACD,CACD,OAAO,EACL,EACE,EACA,EAAG,IAAO,CAAE,OAAQ,EAAE,cAAe,MAAO,EAAE,aAAc,EAAE,CAC/D,CACD,EACD,CAAE,CACD,mBAAoB,EAEpB,KAAM,GACN,UAAW,GACX,aAAc,EACd,IAAK,GACL,aAAc,EACd,mBAAoB,EACpB,iBAAkB,EAClB,eAAgB,EAChB,SAAU,EACV,iBAAkB,GAClB,SAAU,EACV,qBAAsB,EACtB,aAAc,EACd,SAAU,EACV,cAAe,EACf,UAAW,EACX,0BAA2B,EAC3B,WAAY,EACZ,gBAAiB,EACjB,mBAAoB,EACpB,2BAA4B,EAC5B,eAAgB,EAChB,mBAAoB,EACpB,GAAG,EAEH,UAAW,EACX,oBAAqB,GACrB,wBAAyB,GACzB,gBAAiB,GACjB,GAAG,EACH,WAAY,GACZ,WAAY,EACZ,aAAc,GACd,aAAc,GACd,aAAc,GACd,uBAAwB,GACxB,GAAG,EACJ,EAEH,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAG,CAC/B,CACD,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,GAAG,EAAG,IAAI,EAAI,IAAM,GAAG,EAAE,CAAG,GAAG,CAAC,CAEzC,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,CACtB,GAAM,CAAE,OAAQ,GAAM,EACtB,GAAI,IAAM,IAAK,IAAK,EAAE,SAAW,EAC/B,MAAO,CAAE,OAAQ,EAAG,IAAK,EAAG,CAC9B,IAAM,EAAI,GAAG,EAAG,EAAG,EAAG,EAAE,GAAG,MAAM,CACjC,MAAO,CAAE,OAAQ,GAAG,EAAG,EAAG,EAAG,EAAE,EAAE,OAAS,GAAG,MAAM,CAAG,EAAG,IAAK,EAAG,CAEnE,SAAS,GAAG,EAAG,EAAG,EAAG,EAAG,CACtB,IAA0C,EAAI,GAAG,EAAvC,GAAG,EAAE,MAAO,EAAE,MAAO,EAAE,OAAqB,CAAC,CAAE,EAAI,EAAI,EAAE,OAAS,GAAG,EAAG,EAAI,EAAE,CAAG,EAAE,IAC7F,OAAO,EAAI,EAAI,EAAI,EAAE,IAAM,EAE7B,IA2BI,GAAqB,GACtB,CAAC,EAAG,MAAQ,CAAE,GAAG,EAAG,GAAG,EAAG,EAC3B,EAAG,GA7BsB,MAAQ,CACjC,IAAM,EAAI,EAAG,GAAM,QAAQ,IAAI,CAAE,EAAI,EAAE,EAAE,CAAC,CAAE,EAAI,EAAE,KAAK,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,qBAAqB,CAAE,EAAI,EAAE,GAAG,CAAE,EAAI,EAAE,MAAM,CAAE,EAAI,EAAE,GAAG,CAAE,GAAK,EAAG,EAAI,OAAS,GAC1K,EACE,EACA,EAAG,GAAM,EAAE,GAAG,CACd,GAAI,CACL,CACD,EACD,CAAE,EAAI,EAAE,CAAC,EAAE,CAAE,EAAI,EAAE,CAAC,EAAE,CACvB,OAAO,EAAE,EAAE,EAAE,CAAE,EAAE,CAAE,CACjB,WAAY,EACZ,eAAgB,EAChB,QAAS,EACT,gBAAiB,EAAE,SAAS,CAC5B,gBAAiB,EAAE,SAAS,CAC5B,gBAAiB,EACjB,cAAe,EACf,cAAe,EAAE,OAAQ,MAAM,CAC/B,YAAa,EACb,cAAe,EACf,cAAe,EAAE,OAAQ,MAAM,CAC/B,kBAAmB,EACnB,iBAAkB,EAClB,kBAAmB,EAAE,WAAY,MAAM,CACvC,YAAa,EACb,sBAAuB,EAAE,wBAAyB,MAAM,CACzD,EAGQ,CAAC,CACX,CAAE,GAAqB,EAAE,KAAK,UAAW,CACxC,IAAM,EAAI,EAAG,YAAY,CAAE,EAAI,EAAG,gBAAgB,CAAE,EAAI,EAAG,gBAAgB,CAAE,EAAI,EAAG,cAAc,CAAE,EAAI,EAAG,iBAAiB,CAAE,EAAI,EAAG,YAAY,CAAE,EAAI,GAAG,eAAe,CAAE,EAAI,EAAG,gBAAgB,CAAE,EAAI,EAAG,gBAAgB,CAAE,EAAI,EAAG,wBAAwB,CAAE,EAAI,EAAG,UAAU,CAAE,EAAI,GAAG,iBAAiB,CAAE,EAAI,GAAG,MAAM,CAAE,EAAI,EAAG,MAAM,CAAE,EAAI,EAAG,yBAAyB,CAAE,EAAI,GAAG,mBAAmB,CAAE,EAAI,GAAA,EACvY,YACO,GAAM,CACX,IAAM,EAAI,EAAE,cAAc,cAAc,aACxC,EAAE,EAAE,CACJ,IAAM,EAAI,EAAE,WACZ,GAAI,IAAM,KAAM,CACd,GAAM,CAAE,OAAQ,EAAG,MAAO,GAAM,EAAE,uBAAuB,CACzD,EAAE,CAAE,OAAQ,EAAG,MAAO,EAAG,CAAC,CAE5B,EAAE,CACA,OAAQ,GAAG,aAAc,iBAAiB,EAAE,CAAC,UAAW,EAAE,CAC1D,IAAK,GAAG,UAAW,iBAAiB,EAAE,CAAC,OAAQ,EAAE,CAClD,CAAC,EAEJ,CAAC,EAAG,EAAG,EAAG,EAAE,CACb,CACD,CAAC,EACD,CAAC,EACF,CACD,OAAO,OAAS,CACd,EAAE,WAAa,GAAK,EAAE,UAAY,GAAK,EAAE,CAAC,EAAE,EAC3C,CAAC,EAAE,CAAC,CAAE,EAAI,MAAuB,EAAA,EAAA,KAClC,EACA,CACE,UAAW,EACX,IAAK,EACL,GAAG,EAAG,EAAG,EAAE,CACX,cAAe,qBACf,MAAO,CAAE,cAAe,EAAE,aAAc,WAAY,EAAE,UAAW,CACjE,SAAU,EAAE,MAAM,IAAK,GAAM,CAC3B,IAAM,EAAI,EAAE,EAAE,MAAO,EAAE,KAAM,EAAE,CAC/B,OAAO,GAAoB,EAAA,EAAA,KACzB,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,OAAQ,EAAE,WACV,MAAO,EAAE,MACT,MAAO,EAAE,UACV,CACD,EACD,EAAmB,EAAA,EAAA,eAClB,EACA,CACE,GAAG,EAAG,EAAG,EAAE,CACX,UAAW,EACX,aAAc,EAAE,MAChB,IAAK,EACN,CACD,EAAE,EAAE,MAAO,EAAE,KAAM,EAAE,CACtB,EACD,CACH,CACF,EACD,CAAE,GAAA,EAAO,KAAK,UAAW,CACzB,IAAM,EAAI,EAAG,kBAAkB,CAAE,EAAI,GAAG,eAAe,CAAE,EAAI,EAAG,kBAAkB,CAAE,EAAI,GAAA,EACpF,YACO,GAAM,CACX,EAAE,GAAG,EAAG,SAAS,CAAC,EAEpB,CAAC,EAAE,CACJ,CACD,CAAC,EACD,CAAC,EACF,CAAE,EAAI,EAAG,UAAU,CACpB,OAAO,GAAK,KAA2F,MAApE,EAAA,EAAA,KAAE,EAAG,CAAE,IAAK,EAAG,UAA0B,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,EAAG,EAAE,CAAE,CAAC,CAAE,CAAC,EACpG,CAAE,GAAA,EAAO,KAAK,UAAW,CACzB,IAAM,EAAI,EAAG,kBAAkB,CAAE,EAAI,GAAG,eAAe,CAAE,EAAI,EAAG,kBAAkB,CAAE,EAAI,GAAA,EACpF,YACO,GAAM,CACX,EAAE,GAAG,EAAG,SAAS,CAAC,EAEpB,CAAC,EAAE,CACJ,CACD,CAAC,EACD,CAAC,EACF,CAAE,EAAI,EAAG,UAAU,CACpB,OAAO,GAAK,KAA2F,MAApE,EAAA,EAAA,KAAE,EAAG,CAAE,IAAK,EAAG,UAA0B,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,EAAG,EAAE,CAAE,CAAC,CAAE,CAAC,EACpG,CAAE,IAAM,CAAE,SAAU,KAAQ,CAC5B,IAAM,EAAA,EAAM,WAAW,GAAG,CAAE,EAAI,GAAG,iBAAiB,CAAE,EAAI,GAAG,qBAAqB,CAAE,EAAI,GAAA,EACpF,YACO,GAAM,CACX,EAAE,EAAE,uBAAuB,CAAC,EAE9B,CAAC,EAAE,CACJ,CACD,CAAC,EACD,CAAC,EACF,CACD,OAAA,EAAS,cAAgB,CACvB,IAAM,EAAE,CAAE,OAAQ,EAAE,eAAgB,MAAO,EAAE,cAAe,CAAC,CAAE,EAAE,CAAE,OAAQ,EAAE,WAAY,MAAO,EAAE,UAAW,CAAC,GAC7G,CAAC,EAAG,EAAG,EAAE,CAAC,EAAkB,EAAA,EAAA,KAAE,MAAO,CAAE,IAAK,EAAG,MAAO,GAAG,CAAC,EAAE,CAAE,SAAU,EAAG,CAAC,EAC9E,IAAM,CAAE,SAAU,KAAQ,CAC3B,IAAM,EAAA,EAAM,WAAW,GAAG,CAAE,EAAI,GAAG,qBAAqB,CAAE,EAAI,GAAG,iBAAiB,CAAE,EAAI,EAAG,qBAAqB,CAAE,EAAI,EAAG,kBAAkB,CAAE,EAAI,GAAG,EAAG,EAAG,CAAC,EAAE,CAC7J,OAAA,EAAS,cAAgB,CACvB,IAAM,EAAE,CAAE,OAAQ,EAAE,WAAY,MAAO,EAAE,UAAW,CAAC,CAAE,EAAE,CAAE,WAAY,EAAG,UAAW,EAAG,cAAe,EAAE,eAAgB,aAAc,EAAE,cAAe,CAAC,GACxJ,CAAC,EAAG,EAAG,EAAE,CAAC,EAAkB,EAAA,EAAA,KAAE,MAAO,CAAE,IAAK,EAAG,MAAO,GAAG,CAAC,EAAG,EAAE,CAAE,SAAU,EAAG,CAAC,EAQhF,CACF,UAAW,GACX,WAAY,GACZ,gBAAiB,EACjB,aAAc,IACI,GAClB,GACA,CACE,SAAU,CACR,QAAS,UACT,WAAY,aACZ,SAAU,WACV,YAAa,cACb,WAAY,aACZ,eAAgB,iBAChB,KAAM,OACN,iBAAkB,mBAClB,wBAAyB,0BACzB,gBAAiB,kBACjB,cAAe,gBACf,cAAe,gBACf,gBAAiB,kBACjB,mBAAoB,qBACpB,YAAa,cACb,SAAU,WACV,iBAAkB,mBAClB,wBAAyB,0BACzB,mBAAoB,qBACrB,CACD,QAAS,CACP,SAAU,WACV,SAAU,WACV,cAAe,gBAChB,CACD,OAAQ,CACN,YAAa,cACb,WAAY,aACZ,aAAc,eACd,aAAc,eACd,oBAAqB,sBACrB,iBAAkB,mBAClB,aAAc,eACd,kBAAmB,oBACpB,CACF,CACD,EApDwB,KAAK,SAAS,CAAE,GAAG,GAAK,CAChD,IAAM,EAAI,EAAG,kBAAkB,CAAE,EAAI,EAAG,qBAAqB,CAAE,EAAI,GAAK,EAAI,GAAK,GAAI,EAAI,GAAK,EAAI,GAAK,GAAI,EAAI,EAAG,UAAU,CAC5H,OAAuB,EAAA,EAAA,KAAE,EAAG,CAAE,GAAG,EAAG,GAAG,EAAG,EAAG,EAAE,CAAE,UAA0B,EAAA,EAAA,MAAG,EAAG,CAAE,SAAU,EAC3E,EAAA,EAAA,KAAE,GAAI,EAAE,CAAC,EACT,EAAA,EAAA,KAAE,GAAI,EAAE,CAAC,EACT,EAAA,EAAA,KAAE,GAAI,EAAE,CAAC,CAC1B,CAAE,CAAC,CAAE,CAAC,EA8CL,CACH,CAAE,GAAqB,GAAG,CAAE,WAAY,GAAI,gBAAiB,EAAI,aAAc,GAAI,CAAC,CAAE,GAAqB,GAAG,CAAE,WAAY,GAAI,gBAAiB,EAAI,aAAc,GAAI,CAAC,CACzK,SAAS,GAAG,EAAG,EAAG,EAAG,CACnB,OAAO,IAAM,UAAY,GAAG,SAAS,KAAK,GAAK,CAAC,GAAK,EAAE,GAAG,EAAE,4CAA6C,EAAG,GAAG,KAAK,CAAE,IAAM,SAAW,EAAI,SAAS,GAAK,IAAK,GAAG,CC11GnK,SAAgB,GAAwB,CAAE,UAAS,YAAqE,CACtH,IAAM,EAAyB,EAAe,GAAM,EAAE,uBAAuB,CACvE,CAAC,EAAY,IAAA,EAAA,EAAA,UAAyC,KAAK,CACjE,GAAI,CAAC,EAAU,OAAO,KACtB,GAAI,EAAS,WAAa,EAAS,UAAU,OAC3C,OAAO,EAAA,EAAA,KAAC,GAAD,CAAuB,UAAmB,WAAU,UAAW,EAAS,UAAa,CAAA,CAE9F,IAAM,EAAkB,EAClB,EAAU,EAAS,QAAQ,OAAS,EAAS,QAAU,CAC3D,CAAE,GAAI,UAAoB,MAAO,UAAW,CAC5C,CAAE,GAAI,OAAiB,MAAO,OAAQ,CACvC,CAED,eAAe,EAAO,EAAgC,CAChD,MACJ,GAAc,EAAO,GAAG,CACxB,GAAI,CACF,MAAM,EAAuB,EAAS,EAAgB,GAAI,EAAO,GAAG,QAC5D,CACR,EAAc,KAAK,GAIvB,IAAM,EAAS,EAAS,OAAS,OACjC,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,oCACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sHACb,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,kCAAf,CACG,GAAS,EAAA,EAAA,KAAC,GAAD,CAAY,UAAU,yCAA2C,CAAA,EAAG,EAAA,EAAA,KAAC,GAAD,CAAa,UAAU,yCAA2C,CAAA,EAChJ,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0BAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kEAA0D,EAAS,MAAY,CAAA,CAC7F,EAAS,OAAS,GACf,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kGAAwF,EAAA,EAAA,KAAC,GAAD,CAAe,KAAM,EAAS,KAAM,QAAS,EAAS,KAAM,UAAU,kBAAoB,CAAA,CAAM,CAAA,EACvM,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,+JAAuJ,EAAS,KAAW,CAAA,GAC9L,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,uCACZ,EAAQ,IAAK,IACZ,EAAA,EAAA,MAAC,EAAD,CAEE,KAAK,KACL,QAAS,EAAO,KAAO,QAAU,EAAO,KAAO,QAAU,UAAY,UACrE,SAAU,EAAQ,EAClB,YAAe,KAAK,EAAO,EAAO,CAClC,UAAU,4BANZ,CAQG,IAAe,EAAO,KAAM,EAAA,EAAA,KAAC,GAAD,CAAS,UAAU,8BAAgC,CAAA,CAC/E,EAAO,MACD,EATF,EAAO,GASL,CACT,CACE,CAAA,CACF,GACF,GACF,CAAA,CACF,CAAA,CAMV,SAAS,GAAiB,EAAgC,CAGxD,OAFK,EACD,EAAE,aAAe,EAAE,MAAM,MAAM,CAAS,GACrC,EAAE,OAAO,OAAS,EAFV,GAKjB,SAAS,GAAY,EAAmB,CACtC,IAAM,EAAQ,CAAC,GAAG,EAAE,OAAO,CAE3B,OADI,EAAE,aAAe,EAAE,MAAM,MAAM,EAAE,EAAM,KAAK,EAAE,MAAM,MAAM,CAAC,CACxD,EAAM,KAAK,KAAK,CAMzB,SAAS,GAAa,CAAE,UAAS,WAAU,aAAoG,CAC7I,IAAM,EAAyB,EAAe,GAAM,EAAE,uBAAuB,CACvE,CAAC,EAAM,IAAA,EAAA,EAAA,UAAoB,EAAE,CAC7B,CAAC,EAAO,IAAA,EAAA,EAAA,UAA6C,EAAE,CAAC,CACxD,CAAC,EAAY,IAAA,EAAA,EAAA,UAAuD,KAAK,CAEzE,EAAI,EAAU,KAAK,IAAI,EAAM,EAAU,OAAS,EAAE,EAClD,EAAM,EAAM,GAClB,GAAI,CAAC,EAAG,OAAO,KACf,IAAM,EAAQ,EAAQ,EAAE,YAClB,EAAQ,EAAU,OAClB,EAAS,IAAS,EAAQ,EAC1B,EAAW,GAAiB,EAAI,CAChC,EAAc,EAAU,OAAO,EAAG,IAAM,GAAiB,EAAM,GAAG,CAAC,CACnE,EAAO,EAAQ,EAErB,SAAS,EAAO,EAAwB,CACtC,EAAU,GAAS,CACjB,IAAM,EAAe,EAAK,IAAS,CAAE,OAAQ,EAAE,CAAE,MAAO,GAAI,YAAa,GAAO,CAChF,MAAO,CAAE,GAAG,GAAO,GAAO,CAAE,GAAG,EAAM,GAAG,EAAO,CAAE,EACjD,CAEJ,SAAS,EAAW,EAAe,CACjC,GAAI,EAAO,CACT,IAAM,EAAM,GAAK,OAAO,SAAS,EAAM,CACvC,EAAO,CAAE,OAAQ,GAAO,GAAK,QAAU,EAAE,EAAE,OAAQ,GAAM,IAAM,EAAM,CAAG,CAAC,GAAI,GAAK,QAAU,EAAE,CAAG,EAAM,CAAE,CAAC,MAE1G,EAAO,CAAE,OAAQ,CAAC,EAAM,CAAE,YAAa,GAAO,CAAC,CAGnD,SAAS,GAAY,CACR,EAAP,EAAc,CAAE,YAAa,CAAC,GAAK,YAAa,CACxC,CAAE,OAAQ,EAAE,CAAE,YAAa,GAAM,CAAC,CAGhD,eAAe,GAAS,CAClB,MAAC,GAAe,GACpB,GAAc,SAAS,CACvB,GAAI,CACF,IAAM,EAAkC,EAAE,CAC1C,EAAU,SAAS,EAAI,IAAM,CAAE,IAAM,EAAI,EAAM,GAAQ,IAAG,EAAQ,EAAG,UAAY,GAAY,EAAE,GAAG,CAClG,MAAM,EAAuB,EAAS,EAAS,GAAI,SAAU,EAAQ,QAC7D,CAAE,EAAc,KAAK,GAEjC,eAAe,GAAU,CACnB,MACJ,GAAc,UAAU,CACxB,GAAI,CAAE,MAAM,EAAuB,EAAS,EAAS,GAAI,OAAO,QAAW,CAAE,EAAc,KAAK,GAGlG,IAAM,EAAc,EAAQ,GAAK,YAEjC,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,oCACb,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,4HAAf,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mCAAf,EACE,EAAA,EAAA,KAAC,GAAD,CAAuB,UAAU,kCAAoC,CAAA,EACrE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kEAA0D,EAAS,MAAY,CAAA,CAC7F,EAAQ,IACP,EAAA,EAAA,MAAC,GAAD,CAAO,QAAQ,UAAU,UAAU,gEAAnC,CAA2F,EAAO,EAAE,MAAI,EAAc,GAEpH,IAEN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gBAAf,CACG,EAAE,SAAU,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,mGAA2F,EAAE,OAAa,CAAA,EACtI,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0EAAkE,EAAE,SAAe,CAAA,CACjG,IAAS,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,oDAA2C,wBAA2B,CAAA,EAE/F,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,sCAAf,CACG,EAAE,QAAQ,IAAK,GAAQ,CACtB,IAAM,EAAW,EAAQ,GAAK,OAAO,SAAS,EAAI,MAAM,CACxD,OACE,EAAA,EAAA,MAAC,SAAD,CAEE,KAAK,SACL,SAAU,EACV,YAAe,EAAW,EAAI,MAAM,CACpC,UAAW,GACT,mFACA,EAAW,sCAAwC,qDACnD,GAAQ,aACT,UATH,EAWE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,GACf,iFACA,EAAQ,UAAY,eACpB,EAAW,mCAAqC,6BACjD,UACE,IAAY,EAAA,EAAA,KAAC,EAAD,CAAO,UAAU,UAAY,CAAA,CACrC,CAAA,EACP,EAAA,EAAA,MAAC,OAAD,CAAM,UAAU,mBAAhB,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mCAA2B,EAAI,MAAa,CAAA,CAC3D,EAAI,cAAe,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,+CAAuC,EAAI,YAAmB,CAAA,CAC7F,GACA,EArBF,EAAI,MAqBF,EAEX,EAEF,EAAA,EAAA,MAAC,SAAD,CACE,KAAK,SACL,SAAU,EACV,QAAS,EACT,UAAW,GACT,mFACA,EAAc,sCAAwC,qDACtD,GAAQ,aACT,UARH,EAUE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAW,GACf,iFACA,EAAQ,UAAY,eACpB,EAAc,mCAAqC,6BACpD,UACE,IAAe,EAAA,EAAA,KAAC,EAAD,CAAO,UAAU,UAAY,CAAA,CACxC,CAAA,EACP,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,mCAA0B,SAAa,CAAA,CAChD,GACR,IACC,EAAA,EAAA,KAAC,GAAD,CACE,UAAA,GACA,KAAM,EACN,SAAU,EACV,MAAO,GAAK,OAAS,GACrB,SAAW,GAAM,EAAO,CAAE,MAAO,EAAE,OAAO,MAAO,YAAa,GAAM,CAAC,CACrE,YAAY,mBACZ,UAAU,eACV,CAAA,CAEA,GACF,IAEN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,0CAAf,CACG,EAAO,IACN,EAAA,EAAA,MAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,UAAU,SAAU,EAAM,YAAe,EAAS,GAAM,EAAI,EAAE,CAAE,UAAU,4BAApG,EACE,EAAA,EAAA,KAAC,EAAD,CAAa,UAAU,eAAiB,CAAA,CAAA,OACjC,GAET,GAKA,EAAA,EAAA,MAAC,EAAD,CAAQ,KAAK,KAAK,SAAU,GAAQ,CAAC,EAAa,YAAe,KAAK,GAAQ,CAAE,UAAU,4BAA1F,CACG,IAAe,WAAY,EAAA,EAAA,KAAC,GAAD,CAAS,UAAU,8BAAgC,CAAA,CAAC,cACpE,EAAQ,EAAI,IAAM,GACvB,IAPT,EAAA,EAAA,MAAC,EAAD,CAAQ,KAAK,KAAK,SAAU,GAAQ,CAAC,EAAU,YAAe,EAAS,GAAM,EAAI,EAAE,CAAE,UAAU,4BAA/F,CAAkH,QAC5G,EAAA,EAAA,KAAC,EAAD,CAAc,UAAU,eAAiB,CAAA,CACtC,IAOX,EAAA,EAAA,MAAC,EAAD,CAAQ,KAAK,KAAK,QAAQ,QAAQ,SAAU,EAAM,YAAe,KAAK,GAAS,CAAE,UAAU,0DAA3F,CACG,IAAe,YAAa,EAAA,EAAA,KAAC,GAAD,CAAS,UAAU,8BAAgC,CAAA,CAAC,UAE1E,GACL,GACF,GACF,CAAA,CClNV,IAAM,GAAwB,IAwBxB,GAAS,eAgBf,SAAS,GAAe,CAAE,WAAgD,CACxE,GAAI,CAAC,EAAS,OAAO,KACrB,GAAM,CAAE,UAAS,OAAM,kBAAiB,eAAc,eAAc,eAAgB,EAC9E,EAAW,GAAQ,CAAC,EAO1B,MANI,CAAC,GAAmB,CAAC,EAAiB,MAOxC,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,GAAG,GAAO,wBAA1B,CACG,IAAmB,EAAA,EAAA,KAAC,GAAD,CAA2D,UAAS,SAAU,EAAmB,CAAnE,EAAgB,GAAmD,CACpH,IAAY,EAAA,EAAA,KAAC,GAAD,CAA6B,eAAc,YAAa,EAAe,EAAc,IAAA,GAAa,CAAA,CAC3G,GAoCV,SAAS,GAAkB,EAA2C,CACpE,IAAM,EAAc,EAAS,UAAW,GAAU,EAAM,OAAS,QAAU,EAAM,OAAS,UAAU,CAC9F,EAAQ,GAAe,EAAI,EAAc,EACzC,EAAQ,EAAS,GACvB,MAAO,CAAE,IAAK,EAAQ,GAAiB,EAAM,CAAG,KAAM,QAAO,CAG/D,SAAS,GAAyB,EAAiB,EAAmC,CACpF,GAAM,CAAC,EAAgB,IAAA,EAAA,EAAA,cAAoC,GAAwB,EAAS,OAAO,CAC7F,GAAA,EAAA,EAAA,QAA+D,CACnE,UACA,OAAQ,GAAkB,EAAS,CACpC,CAAC,CAiBF,OAfA,EAAA,EAAA,qBAAsB,CACpB,IAAM,EAAa,GAAkB,EAAS,CACxC,EAAO,EAAS,QAEtB,EAAmB,GAAY,CAC7B,GAAI,EAAK,UAAY,EAAS,OAAO,GAAwB,EAAS,OACtE,GAAI,CAAC,EAAK,OAAO,IAAK,OAAO,EAE7B,IAAM,EADc,EAAS,UAAW,GAAU,GAAiB,EAAM,GAAK,EAAK,OAAO,IACpE,CAAc,EAAK,OAAO,MAChD,OAAO,EAAgB,EAAI,EAAU,EAAgB,GACrD,CAEF,EAAS,QAAU,CAAE,UAAS,OAAQ,EAAY,EACjD,CAAC,EAAS,EAAS,CAAC,CAEhB,EAGT,SAAgB,GAAgB,CAC9B,UACA,cACA,WACA,UACA,UACA,gBACA,gBACA,kBACA,eACA,eACA,eACA,mBACA,kBACA,mBACA,gBACA,cACA,cACA,uBACA,0BACA,8BACuB,CACvB,IAAM,GAAA,EAAA,EAAA,QAAqC,KAAK,CAC1C,GAAA,EAAA,EAAA,QAAyC,KAAK,CAC9C,CAAC,EAAU,IAAA,EAAA,EAAA,UAAwB,GAAK,CAQxC,EAAS,IAAgB,OACzB,CAAC,EAAY,IAAA,EAAA,EAAA,UAA0B,EAAO,EACpD,EAAA,EAAA,qBAAsB,CACpB,GAAI,EAAQ,CACV,EAAc,GAAK,CACnB,OAEF,IAAM,EAAQ,eAAiB,EAAc,GAAM,CAAE,IAAI,CACzD,UAAa,aAAa,EAAM,EAC/B,CAAC,EAAO,CAAC,CACZ,IAAM,EAAiB,GAAyB,EAAS,EAAS,CAC5D,GAAc,EAAS,OAAS,EAAI,EAAS,EAAS,OAAS,GAAM,KACrE,GAAY,GAAc,GAAiB,GAAY,CAAG,KAI1D,IAAqB,IAAa,OAAS,WAAa,IAAa,OAAS,mBAAqB,GAAY,IAAI,OAAA,OAKnH,IAAA,EAAA,EAAA,QAAqB,EAAS,CACpC,GAAY,QAAU,EACtB,IAAM,IAAA,EAAA,EAAA,QAAoB,EAAQ,CAClC,GAAW,QAAU,EACrB,IAAM,IAAA,EAAA,EAAA,QAA0B,EAAc,CAC9C,GAAiB,QAAU,EAC3B,IAAM,IAAA,EAAA,EAAA,QAA2B,EAAe,CAChD,GAAkB,QAAU,EAG5B,IAAM,IAAA,EAAA,EAAA,QAAoB,EAAQ,CAClC,GAAW,QAAU,EAcrB,IAAM,IAAA,EAAA,EAAA,QAA6B,GAAM,CACnC,IAAA,EAAA,EAAA,iBAA2C,CAC3C,GAAoB,UACxB,GAAoB,QAAU,GAC9B,0BAA4B,CAC1B,GAAoB,QAAU,GAC9B,IAAM,EAAK,EAAY,QACvB,GAAI,CAAC,EAAI,OACT,IAAM,EAAc,EAAG,uBAAuB,CAAC,IACzC,EAAO,MAAM,KAAK,EAAG,iBAA8B,oBAAoB,CAAC,CAC9E,IAAK,IAAM,KAAO,EAAM,CACtB,IAAM,EAAO,EAAI,uBAAuB,CACxC,GAAI,EAAK,OAAS,EAAc,EAAG,CACjC,IAAM,EAAM,OAAO,EAAI,aAAa,kBAAkB,CAAC,CAAG,GAAkB,QACtE,EAAQ,GAAY,QAAQ,GAC5B,EAAS,EAAQ,GAAoB,EAAM,CAAG,KACpD,GAAc,GAAW,QAAS,CAChC,MAAO,GACP,OAAQ,EAAQ,GAAiB,EAAM,CAAG,KAC1C,GAAI,EAAS,CAAE,gBAAiB,EAAO,UAAW,mBAAoB,EAAO,aAAc,CAAG,EAAE,CAChG,OAAQ,KAAK,IAAI,EAAG,KAAK,MAAM,EAAc,EAAK,IAAI,CAAC,CACxD,CAAC,CACF,UAGJ,GACD,EAAE,CAAC,CAKA,IAAA,EAAA,EAAA,QAA2C,KAAK,CACtD,GAAI,GAAmB,UAAY,KAAM,CACvC,IAAM,EAAQ,GAAc,EAAQ,CAChC,EAAM,GACN,GAAS,CAAC,EAAM,QAAU,EAAM,QAAU,EAAM,kBAAoB,IAAA,MACtE,EAAM,GAA2B,EAAU,CACzC,OAAQ,EAAM,OACd,UAAW,EAAM,gBACjB,aAAc,EAAM,mBACrB,CAAC,EAEJ,GAAmB,QAAU,GAAO,EAAI,EAAM,KAAK,IAAI,EAAG,EAAS,OAAS,EAAE,CAGhF,IAAM,IAAA,EAAA,EAAA,QAA4C,GAAU,CACtD,IAAA,EAAA,EAAA,QAAyB,EAAQ,CACnC,GAAgB,UAAY,IAC9B,GAAgB,QAAU,EAC1B,GAAoB,QAAU,IAEhC,IAAM,GAAgB,GAAoB,QACtC,EAAS,UAAW,GAAU,GAAiB,EAAM,GAAK,GAAoB,QAAQ,CACtF,GAIE,GAAe,CAAC,GAAY,IAAiB,EAC/C,EAAS,MAAM,GAAgB,EAAE,CAAC,OAAQ,GAAU,EAAM,OAAS,WAAa,EAAM,IAAI,OAAA,OAAwB,CAAC,OACnH,GAEJ,EAAA,EAAA,qBAAsB,CAChB,IAAU,GAAoB,QAAU,KAC3C,CAAC,EAAU,GAAU,CAAC,CAKzB,IAAM,IAAA,EAAA,EAAA,QAAqB,EAAS,CACpC,GAAY,QAAU,EAiBtB,IAAM,GAAA,EAAA,EAAA,QAA0B,GAAc,EAAQ,EAAE,OAAS,GAAK,CAChE,IAAA,EAAA,EAAA,QAAsB,GAAM,CAQ5B,IAAA,EAAA,EAAA,QAA0B,GAAM,CAChC,IAAA,EAAA,EAAA,QAA+C,KAAK,CAOpD,IAAA,EAAA,EAAA,QAA0B,EAAE,CAC5B,IAAA,EAAA,EAAA,QAA8B,EAAE,CAChC,IAAA,EAAA,EAAA,iBAAqC,CACzC,GAAqB,QAAU,YAAY,KAAK,CAAG,KAClD,EAAE,CAAC,CAuCA,GAAA,EAAA,EAAA,iBAAgC,CACpC,IAAkB,CAClB,EAAY,SAAS,cAAc,CAAE,MAAO,OAAQ,MAAO,MAAO,CAAC,CACnE,IAGM,EAAQ,YAAY,KAAK,CAC3B,EAAM,EACN,EAAY,GACZ,EAAgB,GACd,MAAa,CAOjB,GANI,GAMA,CAAC,EAAiB,QAAS,OAQ/B,IAAM,EAAK,EAAY,QACvB,GAAI,EAAI,CACN,IAAM,EAAO,EAAG,aAAe,EAAG,aAAe,EAAG,UAO9C,EAAa,EAAG,aAAe,EAAG,aAAe,GASvD,GARI,GAAQ,IAAa,IACvB,EAAgB,GAChB,GAAa,QAAU,IAMrB,GAAiB,EAAO,IAAkB,OAC9C,IAAkB,CAClB,EAAG,SAAS,CAAE,IAAK,EAAG,aAAc,SAAU,OAAQ,CAAC,CAErD,YAAY,KAAK,CAAG,EAAQ,MAChC,EAAM,sBAAsB,EAAK,GAGnC,MADA,GAAM,sBAAsB,EAAK,KACpB,CACX,EAAY,GACZ,qBAAqB,EAAI,GAE1B,CAAC,GAAiB,CAAC,EAgBtB,EAAA,EAAA,qBAAsB,CAKpB,GAAI,KACF,EAAiB,QAAU,GAG3B,GAAc,GAAW,QAAS,CAAE,MAAO,GAAM,OAAQ,KAAM,OAAQ,EAAG,CAAC,EAExE,EAAiB,QACtB,OAAO,GAAa,EACnB,CAAC,GAAW,GAAmB,EAAY,CAAC,EAyB/C,EAAA,EAAA,qBAAsB,CACpB,IAAI,EAAsC,KACtC,EAAkB,GAyDtB,OAxDA,IAAwB,CAAC,SAAW,CAClC,GAAI,EAAiB,OACrB,IAAM,EAAQ,GAAc,GAAW,QAAQ,CAC/C,GAAI,CAAC,GAAS,EAAM,OAAU,CAAC,EAAM,QAAU,EAAM,kBAAoB,IAAA,GAAY,OAIrF,EAAiB,QAAU,GAC3B,IAAM,EAAS,CAAE,OAAQ,EAAM,OAAQ,UAAW,EAAM,gBAAiB,aAAc,EAAM,mBAAoB,CAC3G,EAAS,EAAM,OAIjB,EAAM,EACN,EAAY,GACZ,EAAa,EACb,EAAa,GACb,EAAc,EACZ,EAAQ,YAAY,KAAK,CAC/B,GAAiB,QAAU,GAC3B,IAAM,MAAe,CACnB,EAAY,GACZ,qBAAqB,EAAI,CACzB,GAAiB,QAAU,GACvB,GAAiB,UAAY,IAAQ,GAAiB,QAAU,OAEtE,EAAiB,EACjB,GAAiB,QAAU,EAC3B,IAAM,MAAa,CACjB,GAAI,EAAW,OACf,IAAM,EAAM,GAA2B,GAAY,QAAS,EAAO,CAC7D,EAAM,YAAY,KAAK,CAM7B,GALI,GAAO,IACL,IAAe,IAAG,EAAa,GACnC,IAAkB,CAClB,EAAY,SAAS,cAAc,CAAE,MAAO,EAAK,MAAO,QAAS,SAAQ,CAAC,EAExE,IAAe,EAAG,CACpB,IAAM,EAAK,EAAY,QACjB,EAAS,EAAK,EAAG,aAAe,GAAY,QAAQ,OACpD,EAAwB,GAAW,SAAW,CAAC,GAAiB,SAAW,GAAY,QAAQ,SAAW,GAC5G,GAAyB,IAAW,KACtC,EAAa,EACb,EAAc,EAAwB,EAAI,GAE5C,IAAM,EAAe,EAAc,GAAK,EAAM,GAAe,KACvD,EAAgB,EAAM,GAAS,IACjC,CAAC,GAAgB,CAAC,EAAe,EAAM,sBAAsB,EAAK,CACjE,GAAQ,CACb,OAEE,EAAM,EAAa,IAAW,EAAM,sBAAsB,EAAK,CAC9D,GAAQ,EAEf,EAAM,sBAAsB,EAAK,EACjC,KACW,CACX,EAAkB,GAClB,KAAkB,GAEnB,CAAC,GAAiB,CAAC,CAYtB,IAAM,GAAa,GAAiB,IACpC,EAAA,EAAA,qBAAsB,CAEpB,GADI,CAAC,GAAc,CAAC,IAChB,CAAC,EAAiB,QAAS,OAC/B,IAAI,EAAM,EACJ,EAAQ,YAAY,KAAK,CACzB,MAAc,CAClB,IAAM,EAAK,EAAY,QACnB,GAAM,EAAiB,SAIZ,EAAG,aAAe,EAAG,aAAe,EAAG,UACzC,IACT,IAAkB,CAClB,EAAG,SAAS,CAAE,IAAK,EAAG,aAAc,SAAU,OAAQ,CAAC,EAGvD,YAAY,KAAK,CAAG,EAAQ,MAAK,EAAM,sBAAsB,EAAM,GAGzE,MADA,GAAM,sBAAsB,EAAM,KACrB,qBAAqB,EAAI,EACrC,CAAC,EAAY,GAAY,GAAiB,CAAC,EAO9C,EAAA,EAAA,qBAAsB,CACpB,GAAI,CAAC,GAAgB,CAAC,EAAkB,OACxC,IAAM,EAAM,GAAY,QAAQ,UAAW,GAAU,GAAiB,EAAM,GAAK,EAAiB,CAC9F,EAAM,IACV,EAAiB,QAAU,GAC3B,IAAkB,CAClB,EAAY,SAAS,cAAc,CAAE,MAAO,EAAK,MAAO,SAAU,CAAC,GAClE,CAAC,EAAc,EAAkB,GAAiB,CAAC,CAStD,IAAM,IAAA,EAAA,EAAA,QAAsD,KAAK,CAC3D,IAAA,EAAA,EAAA,aAA8B,GAAqC,CACvE,IAAM,EAAK,aAAe,YAAc,EAAM,KAK9C,GAJA,EAAY,QAAU,EACtB,IAAgB,EAAG,CACnB,GAAwB,WAAW,CACnC,GAAwB,QAAU,KAC9B,CAAC,EAAI,OACT,GAAiB,QAAU,EAAG,UAS9B,IAAM,MAAsB,CAC1B,EAAiB,QAAU,GAG3B,GAAiB,WAAW,EAExB,MAAiB,CACrB,IAAM,EAAM,EAAG,UACT,EAAO,EAAG,aAAe,EAAG,aAAe,EAC3C,EAAe,YAAY,KAAK,CAAG,GAAqB,QAC1D,GAAQ,GAGL,GAAiB,UACf,EAAiB,SAAS,GAAc,GAAW,QAAS,CAAE,MAAO,GAAM,OAAQ,KAAM,OAAQ,EAAG,CAAC,CAC1G,EAAiB,QAAU,GAE3B,GAAiB,WAAW,EAErB,CAAC,GAAgB,EAAM,GAAiB,QAAU,IAE3D,EAAiB,QAAU,GAC3B,GAAiB,WAAW,EAE9B,GAAiB,QAAU,EAIvB,CAAC,EAAiB,SAAW,CAAC,GAAiB,SAAS,IAAwB,EAEhF,EAAW,GAAsB,CAErC,GAAiB,WAAW,CACxB,EAAM,OAAS,GAAG,GAAe,EAEnC,EAAc,EACZ,EAAgB,GAAsB,CAC1C,EAAc,EAAM,QAAQ,IAAI,SAAW,GAEvC,EAAe,GAAsB,CACzC,IAAM,GAAM,EAAM,QAAQ,IAAI,SAAW,GAAK,EAE1C,KAAK,IAAI,EAAG,CAAG,GAAG,GAAiB,WAAW,CAG9C,EAAK,GAAG,GAAe,EAE7B,EAAG,iBAAiB,SAAU,EAAU,CAAE,QAAS,GAAM,CAAC,CAC1D,EAAG,iBAAiB,QAAS,EAAS,CAAE,QAAS,GAAM,CAAC,CACxD,EAAG,iBAAiB,aAAc,EAAc,CAAE,QAAS,GAAM,CAAC,CAClE,EAAG,iBAAiB,YAAa,EAAa,CAAE,QAAS,GAAM,CAAC,CAChE,GAAwB,YAAgB,CACtC,EAAG,oBAAoB,SAAU,EAAS,CAC1C,EAAG,oBAAoB,QAAS,EAAQ,CACxC,EAAG,oBAAoB,aAAc,EAAa,CAClD,EAAG,oBAAoB,YAAa,EAAY,GAEjD,CAAC,EAAe,GAAuB,CAAC,CAErC,IAAA,EAAA,EAAA,aAAoC,GAAoB,CAC5D,EAAY,EAAO,CAiBf,GAAU,CAAC,GAAiB,UAAS,EAAiB,QAAU,IACpE,IAAmB,EAAO,EACzB,CAAC,EAAiB,CAAC,CAEhB,IAAA,EAAA,EAAA,iBAAuC,CACvC,CAAC,GAAW,GAChB,GAAa,EACZ,CAAC,EAAS,EAAS,EAAY,CAAC,CAE7B,IAAA,EAAA,EAAA,iBAAiC,CACrC,GAAoB,QAAU,GAO9B,EAAiB,QAAU,GAQ3B,GAAc,EAAS,CAAE,MAAO,GAAM,OAAQ,KAAM,OAAQ,EAAG,CAAC,CAChE,GAAa,EACZ,CAAC,EAAS,GAAW,EAAY,CAAC,CAE/B,IAAA,EAAA,EAAA,aACG,UAA0B,CAC/B,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,aACd,EAAA,EAAA,KAAC,GAAD,CAA8B,UAAkB,UAAwB,gBAAe,SAAU,EAAS,OAAS,EAAK,CAAA,CACpH,CAAA,EAGT,CAAC,EAAS,EAAe,EAAS,EAAS,CAAC,CAOzC,IAAA,EAAA,EAAA,cACG,CAAE,UAAS,KAAM,EAAY,kBAAiB,eAAc,eAAc,cAAa,EAC9F,CAAC,EAAS,EAAY,EAAc,EAAc,EAAa,EAAgB,CAChF,CAEK,IAAA,EAAA,EAAA,aACG,UAAoC,CACzC,OACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,wEAAf,CACG,GAAU,EAAA,EAAA,KAAC,GAAD,CAAS,UAAU,kDAAoD,CAAA,EAAG,EAAA,EAAA,KAAC,GAAD,CAAe,UAAU,6BAA+B,CAAA,EAC7I,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,yCAAiC,EAAU,mBAAqB,kBAAsB,CAAA,CAC/F,IAGT,CAAC,EAAQ,CAAC,CAEP,IAAA,EAAA,EAAA,cAA4B,CAAE,UAAQ,OAAQ,GAAgB,oBAAkB,EAAG,CAAC,GAAkB,GAAO,CAAC,CAEpH,OACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,mCAAf,EAWE,EAAA,EAAA,KAAC,GAAD,CAEE,IAAK,EACL,YAAa,GACb,UAAU,sBAQV,MAAO,CAAE,OAAQ,OAAQ,UAAW,SAAU,mBAAoB,UAAW,CAC7E,QAAS,GACT,KAAM,EACU,iBAGhB,wBAAyB,GAAmB,SAAW,KAAK,IAAI,EAAG,EAAS,OAAS,EAAE,CACvF,gBAAiB,EAAG,IAAU,GAAiB,EAAM,CACrD,aAAc,EAAO,IAAU,CAI7B,IAAM,EAAM,EAAe,GAAiB,EAAM,CAAG,GAC/C,EAAU,GAAgB,GAAiB,IAAI,EAAI,CACnD,EAAY,GAAW,IAAQ,EAK/B,EAAY,EAAQ,EACpB,EAAa,EAAM,OAAS,WAAa,EAAM,OAAS,iBAAoB,EAAM,IAAI,KAAO,KAC7F,EAAY,EAAS,EAAY,GACjC,EAAc,GAAW,OAAS,WAAa,GAAW,OAAS,iBAAoB,EAAU,IAAI,KAAO,KAC5G,EAAa,IAAc,MAAQ,IAAc,EACvD,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,aACd,EAAA,EAAA,KAAC,MAAD,CACE,UAAW,GACT,GAAW,wDACX,GAAa,uCACd,WAED,EAAA,EAAA,KAAC,GAAD,CACS,QACE,UACM,gBACH,aACU,uBACG,0BACG,6BAC5B,CAAA,CACE,CAAA,CACF,CAAA,EAGE,cACZ,aAAc,GACd,oBAAqB,GACrB,kBAAmB,GAenB,iBAAqB,EAAiB,QAAU,OAAS,GAoBzD,2BAA8B,CAC5B,GAAI,CAAC,EAAiB,QAAS,OAC/B,IAAM,EAAK,EAAY,QACvB,GAAI,CAAC,EAAI,OACT,IAAM,EAAO,EAAG,aAAe,EAAG,aAAe,EAAG,UAChD,GAAQ,GAAK,GAAQ,MACvB,IAAkB,CAClB,EAAG,SAAS,CAAE,IAAK,EAAG,aAAc,SAAU,OAAQ,CAAC,GAG3D,mBAAoB,CAAE,IAAK,IAAK,OAAQ,IAAK,CAC7C,CAzGK,EAyGL,CACD,CAAC,GAAY,EAAS,OAAS,IAC9B,EAAA,EAAA,MAAC,EAAD,CACE,KAAK,SACL,KAAK,KACL,QAAQ,YACR,UAAU,wIACV,QAAS,YALX,EAOE,EAAA,EAAA,KAAC,EAAD,CAAiB,UAAU,cAAgB,CAAA,UAE1C,GAAe,IACd,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,6HACb,GAAe,GAAK,MAAQ,GACxB,CAAA,CAEF,GAEP,GAIV,SAAS,GAAoB,CAAE,UAAS,UAAS,gBAAe,YAA+F,CAkB7J,OAjBI,GAEA,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,qFAAf,EACE,EAAA,EAAA,KAAC,GAAD,CAAS,UAAU,2BAA6B,CAAA,EAChD,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,2BAA+B,CAAA,CACjC,GAGN,CAAC,GAAW,GAAiB,GAE7B,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,wFAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wBAA0B,CAAA,EACzC,EAAA,EAAA,KAAC,OAAD,CAAA,SAAM,4BAAgC,CAAA,EACtC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,wBAA0B,CAAA,CACrC,GAGH,KAGT,SAAS,GAAY,CACnB,QACA,UACA,gBACA,aACA,uBACA,0BACA,8BASC,CAGD,IAAM,EAAY,EAAe,GAAM,EAAE,WAAW,IAAU,UAAU,CAuBxE,OAtBI,EAAM,OAAS,WAEf,EAAA,EAAA,KAAC,GAAD,CACE,IAAK,EAAM,IACX,KAAM,EACM,aACU,uBACG,0BACG,6BAC5B,CAAA,CAGF,EAAM,OAAS,kBAAyB,EAAA,EAAA,KAAC,GAAD,CAAqB,IAAK,EAAM,IAAgB,YAAa,CAAA,CACrG,EAAM,OAAS,UAAiB,EAAA,EAAA,KAAC,GAAD,CAAY,IAAK,EAAM,IAAO,CAAA,CAC9D,EAAM,OAAS,mBAA0B,EAAA,EAAA,KAAC,GAAD,CAA0B,QAAS,CAAA,CAC5E,EAAM,OAAS,qBAA4B,EAAA,EAAA,KAAC,GAAD,CAA4B,QAAS,CAAA,CAChF,EAAM,OAAS,gBAAuB,EAAA,EAAA,KAAC,GAAD,CAAyB,QAAS,CAAA,CACxE,EAAM,OAAS,YAAmB,EAAA,EAAA,KAAC,GAAD,CAAe,MAAO,EAAM,MAAsB,gBAA0B,YAAa,CAAA,CAC3H,EAAM,OAAS,mBAA0B,EAAA,EAAA,KAAC,GAAD,CAAuB,QAAS,EAAM,QAAW,CAAA,CAC1F,EAAM,OAAS,oBAA2B,EAAA,EAAA,KAAC,GAAD,CAAuB,MAAO,EAAM,MAAO,YAAa,EAAM,QAAQ,kBAAoB,EAAM,QAAQ,aAAyB,YAAa,CAAA,CACxL,EAAM,OAAS,UAAiB,EAAA,EAAA,KAAC,GAAD,CAAc,MAAO,EAAM,MAAS,CAAA,CACpE,EAAM,OAAS,QAAe,EAAA,EAAA,KAAC,GAAD,CAAe,KAAM,EAAM,KAAQ,CAAA,EAC9D,EAAA,EAAA,KAAC,GAAD,CAAe,UAAW,EAAM,UAAa,CAAA,CC13BtD,IAAM,GAA+B,EAAE,CAOjC,GAAyB,KAE/B,SAAS,GAAoB,EAAuB,CAClD,OAAO,EAAI,OAAS,WAAc,EAAI,SAAS,SAA2C,OAAS,SAGrG,SAAS,GAAiB,EAAgC,CACxD,IAAM,EAAe,EAAS,OAAQ,GAAM,EAAE,OAAS,QAAU,EAAE,OAAA,OAAwB,CAE3F,OADK,EAAa,OACX,EAAS,OAAQ,GAAM,CAC5B,GAAI,CAAC,GAAoB,EAAE,EAAI,EAAE,OAAA,OAAyB,MAAO,GACjE,IAAM,EAAO,GAAY,EAAE,CAAC,MAAM,CAClC,GAAI,CAAC,EAAM,MAAO,GAClB,IAAM,EAAK,GAAY,EAAE,UAAU,CACnC,MAAO,CAAC,EAAa,KAAM,GACzB,GAAY,EAAK,CAAC,MAAM,GAAK,GAAQ,KAAK,IAAI,GAAY,EAAK,UAAU,CAAG,EAAG,EAAI,GACpF,EACD,CAT+B,EAYnC,SAAgB,GAAU,CAAE,UAAS,SAAQ,kBAA6F,CACxI,IAAM,EAAsB,EAAe,GAAM,EAAE,oBAAoB,CACjE,EAAQ,EAAe,GAAM,EAAE,oBAAsB,EAAE,WAAW,EAAE,qBAAuB,IAAA,GAAU,EAAI,KACzG,EAAc,EAAe,GAAM,EAAE,YAAY,CACjD,EAAM,IAAQ,CACd,EAAkB,EAAe,GAAM,EAAE,gBAAgB,CACzD,EAAc,EAAe,GAAM,EAAE,YAAY,CACjD,EAAoB,EAAe,GAAM,EAAE,kBAAkB,CAC7D,EAAkB,EAAe,GAAM,EAAE,gBAAgB,CACzD,EAAc,EAAe,GAAM,EAAE,YAAY,CACjD,EAAsB,EAAe,GAAM,EAAE,oBAAoB,CACjE,EAAwB,EAAe,GAAM,EAAE,sBAAsB,CACrE,EAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,EAAe,EAAe,GAAM,EAAE,aAAa,CACnD,EAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,EAAkB,EAAe,GAAM,EAAE,gBAAgB,CACzD,EAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,EAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,EAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,EAAkB,EAAe,GAAM,EAAE,iBAAiB,EAAE,qBAAqB,CACjF,EAAoB,GAAiB,UAAY,GACjD,EAAY,EAAe,GAAM,EAAE,UAAU,CAC7C,EAAc,EAAe,GAAM,EAAE,YAAY,CACjD,EAAY,EAAe,GAAM,EAAE,UAAU,CAC7C,EAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,GAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,GAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,GAAkB,EAAe,GAAM,EAAE,gBAAgB,CACzD,GAAqB,EAAe,GAAM,EAAE,mBAAmB,CAC/D,GAAiB,EAAe,GAAM,EAAE,eAAe,CACvD,GAAgB,EAAe,GAAM,EAAE,cAAc,EAEtC,EAAA,EAAA,QAAyB,KAAK,CACnD,IAAM,IAAA,EAAA,EAAA,QAA4C,KAAK,CACjD,CAAC,GAAU,KAAA,EAAA,EAAA,UAA+D,OAAO,CACjF,IAAA,EAAA,EAAA,QAAoD,EAAE,CAAC,CACvD,CAAC,GAAoB,KAAA,EAAA,EAAA,UAAuD,EAAE,CAAC,CAC/E,CAAC,GAAY,KAAA,EAAA,EAAA,UAA0B,GAAM,CAC7C,CAAC,GAAa,KAAA,EAAA,EAAA,UAA4H,KAAK,CAC/I,CAAC,GAAiB,IAAA,EAAA,EAAA,UAAiJ,KAAK,CACxK,CAAC,GAAkB,KAAA,EAAA,EAAA,UAAgC,GAAG,CACtD,IAAA,EAAA,EAAA,QAA8C,KAAK,CACnD,IAAA,EAAA,EAAA,QAA4B,EAAE,CAG9B,CAAC,GAAc,KAAA,EAAA,EAAA,UAAgD,KAAK,CACpE,GAAe,GAAqB,EAAoB,CAExD,IAAA,EAAA,EAAA,aACE,EAAQ,KAAM,GAAM,EAAE,OAAS,EAAoB,EAAI,KAC7D,CAAC,EAAS,EAAoB,CAC/B,CAEK,IAAA,EAAA,EAAA,aAIG,GAHS,EACb,OAAQ,GAAY,GAAwB,EAAqB,EAAQ,EAAI,CAAC,GAAuB,EAAQ,CAAC,CAC9G,MAAM,EAAG,IAAM,EAAE,GAAK,EAAE,GACH,CAAQ,CAC/B,CAAC,EAAmB,EAAoB,CAAC,CAKtC,GAAkB,OAAO,GAAO,MAAM,iBAAoB,UAAY,EAAM,KAAK,gBAAgB,WAAW,cAAc,CAC1H,CAAE,gBAAc,kBAAgB,mBAAiB,aAAc,GAAoB,cAAe,IAAwB,GAAiB,GAAO,GAAG,CACrJ,GAAsB,OAAO,GAAO,MAAM,gBAAmB,SAAW,EAAM,KAAK,eAA2B,GAC9G,IAAA,EAAA,EAAA,aACG,EAAmB,OAAQ,GAChC,EAAQ,gBAAkB,GAC1B,GAAQ,IAAuB,EAAQ,uBAAyB,IACjE,CACA,CAAC,GAAqB,EAAoB,EAAoB,CAAC,CAC5D,GAAe,GAAqB,EAAM,CAC1C,GAAkB,IAAc,gBAChC,IAAA,EAAA,EAAA,aAA2B,CAE/B,GADI,CAAC,GACD,CAAC,IAAU,GAAe,SAAW,EAAG,OAAO,KACnD,IAAM,EAAc,GAAe,GAAe,OAAS,IAAM,IAAQ,aAAe,KAClF,EAAiB,IAAQ,gBAAkB,GAAe,KAAM,GAAY,EAAQ,KAAO,GAAO,gBAAgB,GAAG,CACvH,GAAO,eACP,EACJ,MAAO,CACL,GAAI,IAAQ,IAAM,EAClB,KAAM,EACN,SAAU,GACV,cACA,iBACA,UAAW,IAAQ,WAAa,CAAE,OAAQ,EAAG,mBAAoB,GAAO,MAAO,EAAG,CAClF,SAAU,IAAQ,UAAY,GAC9B,MAAO,IAAQ,OAAS,GACzB,EACA,CAAC,EAAqB,GAAQ,GAAe,CAAC,CAC3C,GAAmB,KAAe,GAAgB,OAAS,EAAI,CAAE,KAAM,EAAqB,SAAU,EAAE,CAAE,mBAAiB,CAAG,MAC9H,GAAQ,EAAY,IAAwB,GAE5C,GAAc,OAAO,GAAO,MAAM,aAAgB,UAAa,EAAM,KAAK,YAAuB,MAAM,CAAG,EAAM,KAAK,YAAwB,KAC7I,GAAW,GAAc,EAAc,KAAM,GAAO,EAAU,eAAe,KAAM,GAAW,EAAE,UAAY,EAAO,IAAM,EAAE,cAAgB,GAAY,CAAC,EAAI,KAAO,KACnK,GAAkB,GAAQ,IAAe,IAAU,SAAW,UAAY,GAAO,sBAAsB,UAAU,MAAM,MACvH,GAAmB,GAAQ,IAAmB,GAAO,sBAAsB,UAAU,MAAM,OAC3F,GAAoB,GAAO,sBAAsB,UAAU,QAAQ,SAAW,GAC9E,GAAkB,IAAmB,GACrC,GAAa,GAA2B,EAAO,UAAU,CACzD,GAAkB,GAA2B,EAAO,eAAe,CACnE,GAAc,GAA2B,EAAO,WAAW,CAC3D,GAAe,GAA2B,EAAO,YAAY,CAC7D,OAAuB,CAAM,GAAO,EAAmB,EAAO,YAAY,EAI1E,CAAC,GAAY,KAAA,EAAA,EAAA,UAA0B,EAAE,CACzC,CAAC,GAAa,KAAA,EAAA,EAAA,UAA2B,GAAM,CAC/C,GAAe,GAAO,sBAAsB,aAAa,gBAAkB,GAC3E,GAAgB,GAAO,sBAAsB,OAAO,WAAa,OAAO,GAAO,MAAM,UAAa,SAAW,EAAM,KAAK,SAAW,IAAA,IACnI,GAAgB,IAAgB,CAAC,IAAe,UAAU,KAAK,GAAM,CACvE,GAAsB,GAAc,CAAC,OAAQ,GAAM,EAAE,KAAK,aAAa,CAAC,WAAW,GAAM,aAAa,CAAC,CAAC,CACxG,EAAE,CACA,GAAmB,GAAa,OAAS,KAAK,IAAI,GAAY,GAAa,OAAS,EAAE,CAAG,EAC/F,SAAS,GAAY,EAAmB,CACtC,EAAc,EAAqB,GAAG,EAAI,KAAK,GAAG,CAClD,GAAc,EAAE,CAElB,SAAS,GAAkB,EAAe,CACxC,EAAc,EAAqB,EAAM,CACrC,IAAa,GAAe,GAAM,CACtC,GAAc,EAAE,CAElB,IAAM,GAAoB,GAAmB,KAAM,GAAS,EAAK,UAAU,CACrE,GAAmB,GAAmB,OAAQ,GAAS,EAAK,SAAS,CACrE,GAAW,GAAM,MAAM,CAAC,OAAS,GAAK,GAAmB,OAAS,EAGxE,GAAqB,GAAO,IAAM,GAAI,GAAM,MAAM,CAAC,OAAS,EAAE,CAM9D,GAAqB,IAAA,EAAA,EAAA,iBAHmB,GAErC,EAAE,CAC0B,CAAc,CAE7C,GAAsB,QAAU,IAEhC,EAAA,EAAA,mBACe,CACX,GAA4B,GAAsB,QAAQ,EAE3D,EAAE,CAAC,EAEN,EAAA,EAAA,eAAgB,CACV,GAAO,MAAM,aAAe,EAAc,SAAW,GAAG,IAAyB,EACpF,CAAC,GAAO,GAAI,GAAO,MAAM,YAAa,EAAc,OAAO,CAAC,EAE/D,EAAA,EAAA,mBACe,CACP,GAAsB,UAAY,MAAM,OAAO,aAAa,GAAsB,QAAQ,EAE/F,EAAE,CAAC,CAEN,IAAM,GAAc,OAAO,GAAO,WAAc,SAAW,EAAM,UAAY,IAAA,GACvE,GAAoB,EAAe,GAAM,GAAe,EAAE,WAAW,KAAc,MAAM,SAAkC,IAAA,GAAU,CACrI,GAAwB,GAAQ,GAAiB,eAAiB,CAAC,EAAgB,SACnF,IAAA,EAAA,EAAA,aACE,GAAc,GAAgB,GAAc,GAAO,UAAW,GAAiB,CAAE,GAAI,GAAc,CAAE,UAAW,CAAE,QAAS,GAAa,SAAU,GAAmB,CAAE,CAAG,EAAE,CAAG,yBAAuB,CAAC,CAC7M,CAAC,GAAgB,GAAc,GAAO,UAAW,GAAiB,GAAa,GAAmB,GAAsB,CACzH,CACK,IAAA,EAAA,EAAA,aACG,GAAuB,EAAO,GAAgB,IAAY,YAAa,GAAc,CAC3F,CAAC,EAAO,IAAY,YAAa,GAAe,GAAe,CAAC,CAE7D,GAAS,GAAc,GAAS,CAEhC,IAAA,EAAA,EAAA,iBAA8C,CAC9C,CAAC,GAAuB,CAAC,GAAiB,SAAW,EAAgB,SACzE,EAAe,EAAoB,EAClC,CAAC,GAAiB,QAAS,GAAiB,QAAS,EAAW,EAAoB,CAAC,CAElF,IAAA,EAAA,EAAA,iBAA+C,CAC/C,GAAsB,UAAY,OACtC,OAAO,aAAa,GAAsB,QAAQ,CAClD,GAAsB,QAAU,OAC/B,EAAE,CAAC,CAEA,IAAA,EAAA,EAAA,aAAoC,KAAO,IAAqD,CACpG,IAAM,EAAe,GAA2B,EAAe,EAAK,CACpE,GAAI,CAAC,EAAc,OAAO,KAC1B,GAAI,CACF,IAAM,EAAO,MAAM,GAAoB,MAAO,kBAAkB,mBAAmB,EAAa,GAAG,CAAC,mBAAmB,mBAAmB,EAAK,GAAG,CAClJ,MAAO,CAAE,eAAgB,EAAa,GAAI,KAAM,EAAK,KAAM,KAAM,EAAK,KAAM,MACtE,CACN,OAAO,OAER,CAAC,EAAc,CAAC,CAIb,IAAA,EAAA,EAAA,cAAqC,EAAc,EAAe,IAAqB,CAC3F,GAAI,CAAC,IAAyB,EAAI,CAAC,EAAQ,OAC3C,IAAM,EAAU,EAAE,GAAmB,QACrC,GAA2B,EAAK,CAAC,KAAM,GAAS,CAC1C,GAAmB,UAAY,GAC9B,IACL,IAA4B,CAC5B,EAAmB,CAAE,GAAG,EAAM,KAAM,GAAQ,EAAG,SAAQ,CAAC,CACxD,GAAoB,GAAG,GACvB,EACD,CAAC,GAA4B,GAAsB,CAAC,CAEjD,IAAA,EAAA,EAAA,iBAAuD,CAC3D,GAAmB,SAAW,EAC9B,IAA4B,CAC5B,GAAsB,QAAU,OAAO,eAAiB,CACtD,EAAmB,KAAK,EACvB,IAAI,EACN,CAAC,GAA2B,CAAC,CAI1B,IAAA,EAAA,EAAA,cAAkC,EAAc,IAAkB,CACtE,GAA2B,EAAK,CAAC,KAAM,GAAS,CAC9C,GAAI,CAAC,EAAM,CACT,EAAU,iBAAkB,EAAK,CACjC,OAEF,GAAI,IAAyB,CAAE,CAC7B,GAAmB,SAAW,EAC9B,IAA4B,CAC5B,EAAmB,KAAK,CACxB,GAAe,CAAE,GAAG,EAAM,KAAM,GAAQ,EAAG,CAAC,CAC5C,GAAoB,GAAG,CACvB,OAEE,EAAK,OAAS,YAAa,EAAiB,CAAE,eAAgB,EAAK,eAAgB,KAAM,EAAK,KAAM,QAAS,GAAM,CAAC,CACnH,EAAiB,CAAE,eAAgB,EAAK,eAAgB,KAAM,GAAW,EAAK,KAAK,CAAE,aAAc,EAAK,KAAM,OAAM,QAAS,GAAM,CAAC,EACzI,EACD,CAAC,GAA4B,EAAa,GAAuB,EAAU,CAAC,CAE/E,SAAS,IAAmB,CAC1B,GAAe,KAAK,CACpB,GAAoB,GAAG,CAEzB,eAAe,GAAY,EAA0B,CACnD,IAAM,EAAO,MAAM,KAAK,EAAM,CAAC,OAAQ,GAAS,EAAK,KAAO,EAAE,CAC9D,GAAI,CAAC,EAAK,OAAQ,OAClB,IAAM,EAAU,EAAK,IAAK,IAA6B,CACrD,GAAI,GAAG,KAAK,KAAK,CAAC,GAAG,EAAK,KAAK,GAAG,KAAK,QAAQ,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE,GACrE,SAAU,EAAK,KACf,KAAM,EAAK,KACX,WAAY,EAAK,KAAK,WAAW,SAAS,CAAG,IAAI,gBAAgB,EAAK,CAAG,IAAA,GACzE,UAAW,GACZ,EAAE,CACH,GAAuB,GAAY,CAAC,GAAG,EAAS,GAAG,EAAQ,CAAC,CAE5D,IAAK,IAAI,EAAI,EAAG,EAAI,EAAK,OAAQ,GAAK,EAAG,CACvC,IAAM,EAAO,EAAK,GACZ,EAAO,EAAQ,GACrB,GAAI,CACF,IAAM,EAAW,MAAM,EAAoB,aAAc,EAAM,CAC7D,SAAU,EAAK,KACf,YAAa,SACd,CAAC,CACF,GAAuB,GAAY,EAAQ,IAAK,GAAU,EAAM,KAAO,EAAK,GAAK,CAAE,GAAG,EAAO,WAAU,UAAW,GAAO,CAAG,EAAM,CAAC,OAC5H,EAAG,CACV,GAAuB,GAAY,EAAQ,IAAK,GAAU,EAAM,KAAO,EAAK,GAAK,CAAE,GAAG,EAAO,MAAQ,EAAY,QAAS,UAAW,GAAO,CAAG,EAAM,CAAC,GAK5J,SAAS,GAAwB,EAAY,CAC3C,GAAuB,GAAY,CACjC,IAAM,EAAO,EAAQ,KAAM,GAAU,EAAM,KAAO,EAAG,CAErD,OADI,GAAM,YAAY,IAAI,gBAAgB,EAAK,WAAW,CACnD,EAAQ,OAAQ,GAAU,EAAM,KAAO,EAAG,EACjD,CAGJ,SAAS,IAA0B,CACjC,GAA4B,GAAmB,CAC/C,GAAsB,EAAE,CAAC,CAG3B,SAAS,IAAa,CACpB,GAAK,CAAC,GAAM,MAAM,EAAI,GAAiB,SAAW,GAAM,CAAC,GAAuB,GAAe,IAAqB,GAAiB,OACrI,IAAM,EAAc,GAAiB,IAAK,IAAyB,CACjE,WAAY,EAAK,SAAU,GAC3B,KAAM,EAAK,SAAU,KACrB,KAAM,QACN,MAAO,EAAK,SAAU,UAAY,EAAK,SACxC,EAAE,CACH,EAAgB,GAAO,CAAE,KAAM,EAAqB,YAAa,IAAY,aAAe,KAAM,CAAE,EAAY,CAChH,IAAyB,CAG3B,SAAS,GAAc,EAA6C,CAClE,GAAI,GAAa,OAAQ,CACvB,GAAI,EAAE,MAAQ,YAAa,CAAE,EAAE,gBAAgB,CAAE,GAAe,GAAM,KAAK,IAAI,EAAI,EAAG,GAAa,OAAS,EAAE,CAAC,CAAE,OACjH,GAAI,EAAE,MAAQ,UAAW,CAAE,EAAE,gBAAgB,CAAE,GAAe,GAAM,KAAK,IAAI,EAAI,EAAG,EAAE,CAAC,CAAE,OACzF,GAAI,EAAE,MAAQ,SAAU,CAAE,EAAE,gBAAgB,CAAE,GAAe,GAAK,CAAE,OACpE,GAAI,EAAE,MAAQ,SAAW,EAAE,MAAQ,MAAO,CAAE,EAAE,gBAAgB,CAAE,IAAM,EAAM,GAAa,IAAuB,GAAK,GAAY,EAAI,CAAE,QAErI,EAAE,MAAQ,SAAW,CAAC,EAAE,WAC1B,EAAE,gBAAgB,CAClB,IAAY,EAIhB,SAAS,GAAY,EAA8C,CACjE,IAAM,EAAQ,MAAM,KAAK,EAAE,cAAc,MAAM,CAAC,OAAQ,GAAS,EAAK,KAAK,WAAW,SAAS,CAAC,CAC3F,EAAM,SACX,EAAE,gBAAgB,CAClB,GAAiB,EAAM,EAMzB,eAAe,IAAW,CACxB,GAAI,CAAC,IAAgB,KAAa,QAAU,CAAC,EAAqB,OAClE,GAAS,SAAS,CAClB,IAAM,EAAW,IAAI,GACrB,GAAI,CACF,MAAM,EAAS,OAAO,CACtB,GAAe,QAAU,EACzB,GAAY,YAAY,OACjB,EAAG,CACV,GAAe,QAAU,KACzB,GAAY,OAAO,CACnB,EAAU,yBAA2B,GAAa,SAAW,mCAAmC,EAIpG,eAAe,IAAU,CACvB,IAAM,EAAW,GAAe,QAC5B,MAAC,GAAY,KAAa,aAE9B,CADA,GAAe,QAAU,KACzB,GAAY,eAAe,CAC3B,GAAI,CACF,IAAM,EAAO,MAAM,EAAS,MAAM,CAClC,GAAI,CAAC,EAAM,OACX,IAAM,EAAO,MAAM,GAAe,EAAK,CACvC,GAAI,CAAC,EAAM,OACX,IAAM,EAAW,GAAQ,GAAG,GAAM,GAAG,IAAS,EAC9C,GAAI,KAAmB,YAAc,CAAC,GAAe,CAAC,GAAmB,CAGvE,IAAM,EAAc,GAAiB,IAAK,IAAyB,CACjE,WAAY,EAAK,SAAU,GAC3B,KAAM,EAAK,SAAU,KACrB,KAAM,QACN,MAAO,EAAK,SAAU,UAAY,EAAK,SACxC,EAAE,CACH,EAAgB,EAAU,CAAE,KAAM,EAAqB,YAAa,IAAY,aAAe,KAAM,CAAE,EAAY,CACnH,IAAyB,MAEzB,EAAc,EAAqB,EAAS,OAEvC,EAAG,CACV,EAAU,uBAAyB,GAAa,SAAW,8BAA8B,QACjF,CACR,GAAY,OAAO,GAavB,OATK,GAUH,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACA,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+BAAf,EACA,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,+DAAf,EACE,EAAA,EAAA,KAAC,GAAD,CACuB,sBACd,QACF,MACS,gBACd,OAAQ,GACU,oBACD,mBACD,iBACR,SACS,kBACG,qBACH,mBACG,sBACH,mBACA,mBACG,sBACN,gBACE,kBACJ,cACK,mBACJ,eACA,cACI,kBACF,gBACI,oBACJ,gBACQ,wBACF,sBACP,eACd,aAAc,GAAO,WACrB,CAAA,EAGF,EAAA,EAAA,KAAC,GAAD,CACE,SAAU,IAAe,aAAc,GAAc,GAAY,SAAW,KAC5E,OAAQ,IAAe,WAAY,GAAc,GAAY,OAAS,IAAA,GACtE,QAAS,IAAa,QACtB,CAAA,CACD,IAAuB,EAAA,EAAA,KAAC,GAAD,CAAmB,QAAS,EAAuB,CAAA,CAC1E,GAAO,OACN,EAAA,EAAA,KAAC,GAAD,CACE,MAAO,GAAO,MACd,SAAU,GAAO,SACjB,MAAO,GAAO,MACd,cAAe,GAAO,SACtB,OAAQ,GAAO,KACf,OAAQ,GAAO,KACf,QAAS,GAAO,MAChB,CAAA,EAIJ,EAAA,EAAA,KAAC,GAAD,CAAoB,SAAU,GAAwB,YAAY,CAAA,EAClE,EAAA,EAAA,KAAC,GAAD,CACE,QAAS,EACT,YAAa,GAAO,OACV,YACV,QAAS,GAAiB,SAAW,GACrC,QAAS,GAAiB,SAAW,GACrC,cAAe,GAAiB,eAAiB,GAClC,iBACE,mBACjB,aAAc,IAAc,MACd,gBACd,aAAc,GAAO,KACrB,iBAAkB,GAAO,WACzB,gBAAiB,GAAO,YACxB,cAAe,GACf,YAAa,GACb,YAAa,GACb,qBAAsB,GACtB,wBAAyB,GACzB,2BAA4B,GAC5B,CAAA,EAEF,EAAA,EAAA,KAAC,GAAD,CACS,SACP,YAAa,WAAW,EAAQ,EAAY,EAAM,CAAG,EAAoB,GAC5D,cACb,SAAU,GACS,qBACnB,qBAAsB,GAAiB,OACnB,sBACN,gBACJ,YACI,gBACI,oBAClB,cAAe,GACf,UAAW,GACX,QAAS,GACT,cAAgB,GAAU,CAAE,GAAiB,EAAM,EACnD,0BAA2B,GAC3B,OAAQ,GACR,cAAe,GACf,aAAc,GACd,eAAkB,CAAE,IAAe,EACnC,cAAiB,CAAE,IAAc,EACjC,WAAY,GACR,GAAG,EAAQ,EAAY,EAAM,CAAG,QAAQ,oBAAoB,GAAO,MAAM,iBAA2B,MAAM,GAAqB,CAAC,sBAChI,0CACJ,CAAA,CACE,GACL,KACC,EAAA,EAAA,MAAC,QAAD,CACE,UAAU,0HADZ,EAGE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6EAAf,EACE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,oEAA2D,eAAmB,CAAA,CAC7F,KAAoB,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,uDAA+C,GAAwB,CAAA,EAC5G,EAAA,EAAA,KAAC,EAAD,CAAQ,QAAQ,QAAQ,KAAK,UAAU,MAAM,gBAAgB,QAAS,aACpE,EAAA,EAAA,KAAC,EAAD,CAAG,UAAU,cAAgB,CAAA,CACtB,CAAA,CACL,IACN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,0BACZ,GAAY,OAAS,aACpB,EAAA,EAAA,KAAC,GAAD,CACE,eAAgB,GAAY,eAC5B,aAAc,GAAY,KAC1B,YAAa,GACb,CAAA,EAEF,EAAA,EAAA,KAAC,GAAD,CACE,eAAgB,GAAY,eAC5B,aAAc,GAAY,KAC1B,KAAM,GAAY,KAClB,YAAa,GACb,CAAA,CAEA,CAAA,CACA,GAEJ,GACL,KACC,EAAA,EAAA,KAAC,GAAD,CACE,QAAS,GACT,MAAO,GACP,YAAa,GACb,aAAc,GACd,aAAc,GACd,CAAA,CAEH,KACC,EAAA,EAAA,KAAC,GAAD,CAAgB,KAAM,GAAc,aAAc,GAAqB,eAAgB,GAAe,eAAgB,QAAS,GAAe,QAAS,YAAa,GAAe,aAAe,GAAkB,SAAU,GAAoB,CAAA,CAEjP,CAAA,CAAA,EA5JD,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,6EAAf,EACE,EAAA,EAAA,KAAC,GAAD,CAAe,UAAU,+BAAiC,CAAA,EAC1D,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,yCAAgC,oCAAqC,CAAA,CAC9E,GC3cZ,SAAgB,IAAkB,CAChC,IAAM,EAAc,EAAe,GAAM,EAAE,YAAY,CACjD,EAAa,EAAe,GAAM,EAAE,WAAW,CAC/C,EAAM,EAAe,GAAM,EAAE,IAAI,EAEvC,EAAA,EAAA,eAAgB,CACd,IAAM,EAAa,OAAO,KAAK,EAAY,CAC3C,GAAI,EAAW,SAAW,EAAG,OAE7B,IAAM,EAAQ,EAAW,OAAQ,GAAS,CAAC,EAAW,IAAS,IAAA,OAAwB,CACvF,GAAI,EAAM,SAAW,EAAG,OAGxB,IAAM,EAAQ,eAAiB,CAC7B,IAAM,EAAgB,EAAc,UAAU,CAAC,WACzC,EAAO,CAAE,GAAG,EAAc,UAAU,CAAC,YAAa,CACpD,EAAU,GACd,IAAK,IAAM,KAAQ,EACZ,EAAc,KACjB,OAAO,EAAK,GACZ,EAAU,IAGV,GAAS,EAAI,CAAE,YAAa,EAAM,CAAC,EACtC,IAAO,CAEV,UAAa,aAAa,EAAM,EAC/B,EAAE,CAAC,CCnBR,SAAgB,GAAqB,EAAe,EAAoB,EACtE,EAAA,EAAA,eAAgB,CAEd,GADI,OAAO,OAAW,KAAe,CAAC,GAClC,CAAC,OAAO,WAAW,qBAAqB,CAAC,QAAS,OAEtD,OAAO,QAAQ,UAAU,CAAE,SAAU,GAAM,CAAE,GAAG,CAEhD,SAAS,EAAe,EAAkB,CAKpC,EAAE,OAAO,UACb,GAAQ,CAIV,OAFA,OAAO,iBAAiB,WAAY,EAAe,KAEtC,CACX,OAAO,oBAAoB,WAAY,EAAe,CAGlD,OAAO,QAAQ,OAAO,UAAU,OAAO,QAAQ,MAAM,GAE1D,CAAC,EAAM,EAAO,CAAC,CCzBpB,SAAgB,IAAW,CACzB,IAAM,EAAU,IAAoB,CAC9B,EAAsB,EAAe,GAAM,EAAE,oBAAoB,CACjE,EAAM,EAAe,GAAM,EAAE,IAAI,CACjC,EAAgB,EAAe,GAAM,EAAE,cAAc,CACrD,EAAa,EAAe,GAAM,EAAE,WAAW,CAC/C,EAAiB,EAAQ,EACzB,EAAW,IAAa,CAE9B,IAAiB,EAEjB,EAAA,EAAA,eAAgB,CACT,GACL,EAAmB,EAAoB,EACtC,CAAC,EAAqB,EAAc,CAAC,EAExC,EAAA,EAAA,eAAgB,CACT,IAIA,EAAW,IACd,EAAI,CAAE,oBAAqB,GAAI,CAAC,GAEjC,CAAC,EAAqB,EAAY,EAAI,CAAC,CAE1C,IAAM,GAAA,EAAA,EAAA,iBAAqC,CACzC,EAAI,CAAE,oBAAqB,GAAI,CAAC,EAC/B,CAAC,EAAI,CAAC,CAIT,OAFA,GAAqB,EAAgB,EAAiB,EAGpD,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,+BACZ,GACC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,uCACX,GAKA,EAAA,EAAA,KAAC,GAAD,CAAA,UACE,EAAA,EAAA,KAAC,GAAD,CAAyD,UAAS,OAAQ,EAAkB,eAAA,GAAiB,CAA7F,GAAuB,QAAsE,CACzF,CAAA,EANtB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iDACb,EAAA,EAAA,KAAC,GAAD,CAAyB,UAAW,CAAA,CAChC,CAAA,CAMJ,CAAA,EAEN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,uBAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,uEACb,EAAA,EAAA,KAAC,GAAD,CAAyB,UAAW,CAAA,CAChC,CAAA,EAEN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iDACb,EAAA,EAAA,KAAC,GAAD,CAAyD,UAAW,CAApD,GAAuB,QAA6B,CAChE,CAAA,CACF,GAEJ,CAAA,CAIV,SAAS,GAAoB,CAAE,YAA2C,CACxE,IAAM,EAAS,IAA2B,CAE1C,OACE,EAAA,EAAA,KAAC,MAAD,CACE,UAAU,yEACV,MAAO,CAAE,OAAQ,EAAS,GAAG,EAAO,IAAM,SAAU,CAEnD,WACG,CAAA"}