diff --git a/pyproject.toml b/pyproject.toml index 151b9a18..1a8e646f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -255,6 +255,11 @@ ignore = [ "strix/tools/notes/tools.py" = ["PLC0415", "TC002"] "strix/tools/finish/tool.py" = ["PLC0415", "TC002"] "strix/tools/reporting/tool.py" = ["PLC0415", "TC002"] +# Lazy imports of strix.tools.mcp.client avoid a circular import (client imports +# the session module at module load). +"strix/tools/mcp/session.py" = ["PLC0415"] +# call_mcp is a chain of guard clauses that each return an error string. +"strix/tools/mcp/agent_tools.py" = ["PLR0911"] "strix/tools/**/*.py" = [ "ARG001", # Unused function argument (tools may have unused args for interface consistency) ] diff --git a/strix/core/runner.py b/strix/core/runner.py index 98a28ca3..576715d7 100644 --- a/strix/core/runner.py +++ b/strix/core/runner.py @@ -53,18 +53,43 @@ from strix.tools.output_store import ( if TYPE_CHECKING: - from agents.mcp import MCPServer from agents.memory import SQLiteSession from agents.result import RunResultBase from strix.runtime.status import StatusSink - from strix.tools.mcp import ConnectedMcpServer, McpConnectionRequest + from strix.tools.mcp import ( + ConnectedMcpServer, + McpConnectionRequest, + McpRegistry, + SupervisedMcpSession, + ) logger = logging.getLogger(__name__) StreamEventSink = Callable[[str, Any], None] +# Receives the run's MCP connection roster as a list of non-secret status dicts +# ({"name", "provider", "tool_count", "dead"}), once when the connections are +# established and again each time a connection transitions to dead. An interface +# can persist it, render it, or forward it on as connection status. Kept as a +# snapshot of the whole roster (not a per- +# connection delta) so every call carries a consistent, current picture. +McpStatusSink = Callable[[list[dict[str, Any]]], None] + + +def _mcp_roster_payload(registry: McpRegistry) -> list[dict[str, Any]]: + """The run's MCP roster as non-secret status dicts (name/provider/tool_count/dead).""" + return [ + { + "name": status.name, + "provider": status.provider, + "tool_count": status.tool_count, + "dead": status.dead, + } + for status in registry.statuses() + ] + def _mcp_startup_summary(connections: list[ConnectedMcpServer]) -> str: """One user-facing line summarizing the MCP servers that connected.""" @@ -91,6 +116,21 @@ def _record_mcp_connections(connections: list[ConnectedMcpServer]) -> None: report_state.record_mcp_connections([connection.name for connection in connections]) +def _persist_mcp_status(roster: list[dict[str, Any]]) -> None: + """Write the run's non-secret MCP connection status roster to run.json. + + The viewer rebuilds its display by re-reading the run's files from disk, so + it cannot see the in-memory ``mcp_status_sink`` the TUI consumes. Persisting + the same non-secret roster (name / provider / tool_count / dead) gives the + viewer a source it can poll. Runs regardless of whether an interface sink is + attached, so the standalone / non-TUI CLI path records health too. + """ + report_state = get_global_report_state() + if report_state is None: + return + report_state.record_mcp_connection_status(roster) + + def _merge_root_prompt_context( scope_context: dict[str, Any], extra_system_prompt_context: dict[str, Any] | None, @@ -157,6 +197,7 @@ async def run_strix_scan( extra_system_prompt_context: dict[str, Any] | None = None, status_sink: StatusSink | None = None, mcp_connection_requests: list[McpConnectionRequest] | None = None, + mcp_status_sink: McpStatusSink | None = None, ) -> RunResultBase | None: """Run or resume one Strix scan against a sandbox. @@ -297,7 +338,7 @@ async def run_strix_scan( configure_spill_writer(_spill_to_workspace) sessions_to_close: list[SQLiteSession] = [] - mcp_servers: list[MCPServer] = [] + mcp_sessions: list[SupervisedMcpSession] = [] try: targets = scan_config.get("targets") or [] @@ -366,7 +407,7 @@ async def run_strix_scan( mcp_requests = mcp_connection_requests if mcp_requests: connections = await attach_mcp_requests(mcp_requests, mcp_registry) - mcp_servers = [c.server for c in connections] + mcp_sessions = [c.session for c in connections] # Recorded even when nothing connected, so a resumed run does not # keep attributing tool calls to servers it no longer has. _record_mcp_connections(connections) @@ -387,6 +428,31 @@ async def run_strix_scan( } for summary in mcp_registry.summaries() ] + # Feed a non-secret connection roster (name / provider / + # tool_count / dead) to two consumers: once now (all + # currently healthy) and again whenever a connection later + # dies. It is always persisted to run.json so the viewer, + # which re-reads the run's files from disk, can render the + # MCP connections panel and health without an in-memory + # sink. When an interface sink is attached (the TUI backend, + # or pro forwarding into the app's event stream) it also + # receives the same snapshot. In-use is derived separately by + # each interface from the connection-tagged tool-call events, + # so it is not carried here. + def _emit_mcp_status() -> None: + roster = _mcp_roster_payload(mcp_registry) + _persist_mcp_status(roster) + if mcp_status_sink is not None: + try: + mcp_status_sink(roster) + except Exception: + logger.exception("MCP status sink failed") + + for connection_name in mcp_registry.names(): + entry = mcp_registry.get(connection_name) + if entry is not None: + entry.session.set_on_dead(_emit_mcp_status) + _emit_mcp_status() except Exception: logger.exception("Failed to connect user MCP servers; continuing without them") @@ -581,9 +647,9 @@ async def run_strix_scan( for s in sessions_to_close: with contextlib.suppress(Exception): s.close() - for mcp_server in mcp_servers: + for mcp_session in mcp_sessions: with contextlib.suppress(Exception): - await mcp_server.cleanup() # type: ignore[no-untyped-call] + await mcp_session.aclose() with contextlib.suppress(Exception): await coordinator._maybe_snapshot() if cleanup_on_exit: diff --git a/strix/interface/tui/backend/controller.py b/strix/interface/tui/backend/controller.py index d74bbba6..9c24da92 100644 --- a/strix/interface/tui/backend/controller.py +++ b/strix/interface/tui/backend/controller.py @@ -103,6 +103,11 @@ class TuiController: self.messages: list[dict[str, str]] = [] self._next_message_id = 1 self.error: str | None = None + # The run's MCP connection roster (name / tool_count / dead), pushed by + # the engine via the mcp_status_sink once the connections are established + # and again each time one dies. Empty for a run with no MCP connections, + # so the Go sidebar simply omits the panel. Non-secret by construction. + self.mcp_connections: list[dict[str, Any]] = [] self.viewer_status = "idle" self.viewer_url: str | None = None self._viewer_httpd: Any = None @@ -128,6 +133,24 @@ class TuiController: if scan_loop is not None: self.scan_loop = scan_loop + def set_mcp_connections(self, roster: list[dict[str, Any]]) -> None: + """Store the run's MCP connection roster and repaint. + + ``roster`` is the engine's non-secret status snapshot: one entry per + connection carrying ``name``, ``tool_count``, and ``dead``. Called once + when the connections are established (all healthy) and again whenever a + connection dies (the same whole-roster snapshot, with that one now dead).""" + self.mcp_connections = [ + { + "name": str(entry.get("name", "")), + "tool_count": int(entry.get("tool_count", 0) or 0), + "dead": bool(entry.get("dead", False)), + } + for entry in roster + if isinstance(entry, dict) and entry.get("name") + ] + self.notify_changed() + def begin_preparation(self) -> None: """Mark a directly-launched run as preparing behind the live TUI.""" self.scan_state = "preparing" @@ -200,6 +223,14 @@ class TuiController: ], "usage": terminal_projection(usage, max_string=256, max_items=20), "subscription": subscription, + "connections": [ + { + "name": terminal_projection(entry["name"], max_string=64), + "tool_count": entry["tool_count"], + "dead": entry["dead"], + } + for entry in self.mcp_connections[:32] + ], "viewer_status": self.viewer_status, "viewer_url": terminal_projection(self.viewer_url, max_string=1024), "error": terminal_projection(self.error, max_string=2 * 1024), diff --git a/strix/interface/tui/backend/projection.py b/strix/interface/tui/backend/projection.py index 3469aa4d..aefb945b 100644 --- a/strix/interface/tui/backend/projection.py +++ b/strix/interface/tui/backend/projection.py @@ -177,6 +177,7 @@ def bounded_state_projection(state: dict[str, Any]) -> dict[str, Any]: "messages": [], "usage": state["usage"], "subscription": state["subscription"], + "connections": state.get("connections", [])[:32], "viewer_status": state["viewer_status"], "viewer_url": None, "error": terminal_projection(state["error"], max_string=256), diff --git a/strix/interface/tui/internal/app/agents.go b/strix/interface/tui/internal/app/agents.go index bd590254..c8df9a42 100644 --- a/strix/interface/tui/internal/app/agents.go +++ b/strix/interface/tui/internal/app/agents.go @@ -209,7 +209,7 @@ func (m *Model) ensureAgentVisible() { m.agentOffset = 0 return } - _, _, agentHeight := m.sidebarHeights() + _, _, _, agentHeight := m.sidebarHeights() rows := max(1, agentHeight-4) row := selectedAgentRow(entries, m.selectedAgent) if row < m.agentOffset { @@ -221,7 +221,7 @@ func (m *Model) ensureAgentVisible() { } func (m Model) agentPageSize() int { - _, _, agentHeight := m.sidebarHeights() + _, _, _, agentHeight := m.sidebarHeights() return max(1, agentHeight-4) } diff --git a/strix/interface/tui/internal/app/mcp_test.go b/strix/interface/tui/internal/app/mcp_test.go new file mode 100644 index 00000000..593701d9 --- /dev/null +++ b/strix/interface/tui/internal/app/mcp_test.go @@ -0,0 +1,105 @@ +package app + +import ( + "fmt" + "strings" + "testing" + + "github.com/charmbracelet/x/ansi" + "github.com/usestrix/strix/tui/internal/protocol" +) + +func mcpModel(t *testing.T) Model { + t.Helper() + m := New(nil) + m.width, m.height = 130, 40 + m.showSplash = false + m.handleEnvelope(stateEnvelope(t, 1, protocol.Snapshot{ + ScanState: "running", + Connections: []protocol.Connection{ + {Name: "supabase", ToolCount: 3, Dead: false}, + {Name: "vercel", ToolCount: 1, Dead: true}, + }, + })) + return m +} + +func TestMcpPanelShowsHealthyAndOffline(t *testing.T) { + m := mcpModel(t) + out := ansi.Strip(m.mcpConnectionsView(40, 6)) + for _, want := range []string{"MCP Connections (2)", "supabase", "3 tools", "vercel", "offline"} { + if !strings.Contains(out, want) { + t.Fatalf("panel missing %q:\n%s", want, out) + } + } +} + +// A roster longer than the panel height shows a window of rows rather than every +// connection, while the header keeps the full count. +func TestMcpPanelWindowsLargeRosterAndCountsAll(t *testing.T) { + m := New(nil) + m.width, m.height = 130, 40 + m.showSplash = false + conns := make([]protocol.Connection, 0, 12) + for i := 0; i < 12; i++ { + conns = append(conns, protocol.Connection{Name: fmt.Sprintf("conn-%02d", i), ToolCount: 2}) + } + m.snapshot.Connections = conns + + // rows = 6 → one header line + five roster rows. + out := ansi.Strip(m.mcpConnectionsView(40, 6)) + if !strings.Contains(out, "MCP Connections (12)") { + t.Fatalf("header did not carry the full connection count:\n%s", out) + } + if !strings.Contains(out, "conn-00") { + t.Fatalf("top of the roster was not rendered:\n%s", out) + } + if strings.Contains(out, "conn-11") { + t.Fatalf("a roster past the panel height should be windowed, not fully drawn:\n%s", out) + } + if got := strings.Count(out, "\n") + 1; got != 6 { + t.Fatalf("panel rendered %d lines, want 6 (header + five rows)", got) + } + + // Scrolling the roster brings the tail into view while the header count holds. + m.mcpOffset = 7 + scrolled := ansi.Strip(m.mcpConnectionsView(40, 6)) + if !strings.Contains(scrolled, "conn-11") || !strings.Contains(scrolled, "MCP Connections (12)") { + t.Fatalf("scrolled window did not reveal the tail with the count intact:\n%s", scrolled) + } +} + +func TestMcpPanelHeightReservedFromAgentBudget(t *testing.T) { + m := mcpModel(t) + _, _, mcpHeight, _ := m.sidebarHeights() + if mcpHeight <= 0 { + t.Fatalf("connections present but no panel height was reserved: %d", mcpHeight) + } + + empty := New(nil) + empty.width, empty.height = 130, 40 + empty.showSplash = false + empty.handleEnvelope(stateEnvelope(t, 1, protocol.Snapshot{ScanState: "running"})) + if _, _, emptyHeight, _ := empty.sidebarHeights(); emptyHeight != 0 { + t.Fatalf("no connections should leave the panel absent, got height %d", emptyHeight) + } +} + +func TestMcpInUseReadsRunningConnectionTaggedCalls(t *testing.T) { + m := mcpModel(t) + m.handleEnvelope(bootstrapEnvelope(t, "events", 1, + protocol.Event{ID: "e1", Type: "tool", AgentID: "a1", Data: map[string]any{ + "tool_name": "call_mcp", "mcp_connection": "supabase", "status": "running", + }}, + protocol.Event{ID: "e2", Type: "tool", AgentID: "a1", Data: map[string]any{ + "tool_name": "call_mcp", "mcp_connection": "vercel", "status": "completed", + }}, + )) + inUse := m.mcpInUse() + if !inUse["supabase"] { + t.Fatalf("a running connection-tagged call should mark the connection in use") + } + if inUse["vercel"] { + t.Fatalf("a completed call must not mark the connection in use") + } +} diff --git a/strix/interface/tui/internal/app/model.go b/strix/interface/tui/internal/app/model.go index 2cacb8eb..8f9e6a11 100644 --- a/strix/interface/tui/internal/app/model.go +++ b/strix/interface/tui/internal/app/model.go @@ -73,6 +73,7 @@ const ( focusChat focusAgents focusVulnerabilities + focusMcp ) type scrollbarTarget int @@ -82,6 +83,7 @@ const ( scrollbarTrace scrollbarAgents scrollbarFindings + scrollbarMcp ) type Model struct { @@ -109,6 +111,7 @@ type Model struct { selectedVuln int agentOffset int vulnOffset int + mcpOffset int modalChoice int reportFocus string ready bool diff --git a/strix/interface/tui/internal/app/model_test.go b/strix/interface/tui/internal/app/model_test.go index 6bb63b25..e8143621 100644 --- a/strix/interface/tui/internal/app/model_test.go +++ b/strix/interface/tui/internal/app/model_test.go @@ -599,7 +599,7 @@ func TestVulnerabilityListSupportsWheelAndPageNavigation(t *testing.T) { }) } _, _, chatWidth, _ := model.layout() - _, _, agentHeight := model.sidebarHeights() + _, _, _, agentHeight := model.sidebarHeights() pageItems := model.vulnerabilityPageItems() updated, _ := model.updateMouse(tea.MouseMsg{ @@ -923,7 +923,7 @@ func TestMainScrollbarsSupportClickAndDrag(t *testing.T) { model.viewport.SetContent(model.viewportContent) showSidebar, _, chatWidth, chatHeight := model.layout() viewerHeight := model.viewerHeight() - _, vulnHeight, agentHeight := model.sidebarHeights() + _, vulnHeight, _, agentHeight := model.sidebarHeights() if !showSidebar { t.Fatal("test requires sidebar") } @@ -967,6 +967,61 @@ func TestMainScrollbarsSupportClickAndDrag(t *testing.T) { } } +func TestMcpRosterScrollsByKeyWheelAndScrollbar(t *testing.T) { + model := New(nil) + model.width, model.height = 150, 35 + model.ready = true + conns := make([]protocol.Connection, 0, 12) + for i := 0; i < 12; i++ { + conns = append(conns, protocol.Connection{Name: fmt.Sprintf("conn-%02d", i), ToolCount: 2}) + } + model.snapshot.Connections = conns + + showSidebar, _, chatWidth, _ := model.layout() + if !showSidebar { + t.Fatal("test requires sidebar") + } + viewerHeight := model.viewerHeight() + _, vulnHeight, mcpHeight, agentHeight := model.sidebarHeights() + mcpTop := viewerHeight + agentHeight + vulnHeight + bottom := model.clampMcpOffset(1 << 30) + if bottom == 0 { + t.Fatalf("a roster of %d should overflow the panel", len(conns)) + } + + // Wheel over the panel focuses it and advances the window. + updated, _ := model.updateMouse(tea.MouseMsg{ + X: chatWidth + 2, Y: mcpTop + 1, Button: tea.MouseButtonWheelDown, + }) + model = updated.(Model) + if model.focus != focusMcp || model.mcpOffset != 3 { + t.Fatalf("wheel scroll did not focus and advance roster: focus=%v offset=%d", model.focus, model.mcpOffset) + } + + // Page down pins to the bottom; up steps back one. + updated, _ = model.updateMain(tea.KeyMsg{Type: tea.KeyPgDown}) + model = updated.(Model) + if model.mcpOffset != bottom { + t.Fatalf("page down did not reach the roster bottom: offset=%d want=%d", model.mcpOffset, bottom) + } + updated, _ = model.updateMain(tea.KeyMsg{Type: tea.KeyUp}) + model = updated.(Model) + if model.mcpOffset != bottom-1 { + t.Fatalf("up did not step the roster back one: offset=%d want=%d", model.mcpOffset, bottom-1) + } + + // Clicking the scrollbar thumb captures it and moves the window. + model.mcpOffset = 0 + updated, _ = model.updateMouse(tea.MouseMsg{ + X: model.width - 3, Y: mcpTop + mcpHeight - 2, + Button: tea.MouseButtonLeft, Action: tea.MouseActionPress, + }) + model = updated.(Model) + if model.draggingScrollbar != scrollbarMcp || model.mcpOffset == 0 { + t.Fatalf("mcp scrollbar click failed: drag=%v offset=%d", model.draggingScrollbar, model.mcpOffset) + } +} + func TestTerminalSnapshotWithoutAgentsDoesNotKeepLoading(t *testing.T) { tests := []struct { state string diff --git a/strix/interface/tui/internal/app/update.go b/strix/interface/tui/internal/app/update.go index 692a83b5..3b962495 100644 --- a/strix/interface/tui/internal/app/update.go +++ b/strix/interface/tui/internal/app/update.go @@ -59,6 +59,14 @@ func (m Model) updateMain(key tea.KeyMsg) (tea.Model, tea.Cmd) { m.ensureVulnerabilityVisible() return m, nil } + if m.focus == focusMcp && len(m.snapshot.Connections) > 0 { + delta := 1 + if key.String() == "up" { + delta = -1 + } + m.mcpOffset = m.clampMcpOffset(m.mcpOffset + delta) + return m, nil + } case "enter", " ": if m.focus == focusVulnerabilities && len(m.snapshot.Vulnerabilities) > 0 { if key.String() == "enter" { @@ -94,6 +102,10 @@ func (m Model) updateMain(key tea.KeyMsg) (tea.Model, tea.Cmd) { m.ensureVulnerabilityVisible() return m, nil } + if m.focus == focusMcp && len(m.snapshot.Connections) > 0 { + m.mcpOffset = m.clampMcpOffset(m.mcpOffset - m.mcpPageSize()) + return m, nil + } m.focus = focusChat m.input.Blur() m.followOutput = false @@ -105,6 +117,10 @@ func (m Model) updateMain(key tea.KeyMsg) (tea.Model, tea.Cmd) { m.ensureVulnerabilityVisible() return m, nil } + if m.focus == focusMcp && len(m.snapshot.Connections) > 0 { + m.mcpOffset = m.clampMcpOffset(m.mcpOffset + m.mcpPageSize()) + return m, nil + } m.focus = focusChat m.input.Blur() m.viewport.HalfViewDown() @@ -147,10 +163,10 @@ func (m Model) updateMouse(msg tea.MouseMsg) (tea.Model, tea.Cmd) { } showSidebar, _, chatWidth, chatHeight := m.layout() viewerHeight := m.viewerHeight() - _, vulnHeight, agentHeight := m.sidebarHeights() + _, vulnHeight, mcpHeight, agentHeight := m.sidebarHeights() x, y := msg.X, msg.Y if m.updateMainScrollbarMouse( - msg, showSidebar, chatWidth, chatHeight, viewerHeight, agentHeight, vulnHeight, + msg, showSidebar, chatWidth, chatHeight, viewerHeight, agentHeight, vulnHeight, mcpHeight, ) { return m, nil } @@ -196,6 +212,10 @@ func (m Model) updateMouse(msg tea.MouseMsg) (tea.Model, tea.Cmd) { m.input.Blur() m.vulnOffset = max(0, m.vulnOffset-3) m.keepVulnerabilitySelectionInWindow() + case mcpHeight > 0 && y < viewerHeight+agentHeight+vulnHeight+mcpHeight: + m.focus = focusMcp + m.input.Blur() + m.mcpOffset = m.clampMcpOffset(m.mcpOffset - 3) } return m, nil } @@ -222,6 +242,10 @@ func (m Model) updateMouse(msg tea.MouseMsg) (tea.Model, tea.Cmd) { totalRows, _ := m.vulnerabilityScrollRows() m.vulnOffset = min(max(0, totalRows-m.vulnerabilityPageSize()), m.vulnOffset+3) m.keepVulnerabilitySelectionInWindow() + case mcpHeight > 0 && y < viewerHeight+agentHeight+vulnHeight+mcpHeight: + m.focus = focusMcp + m.input.Blur() + m.mcpOffset = m.clampMcpOffset(m.mcpOffset + 3) } return m, nil } @@ -303,7 +327,7 @@ func (m Model) updateMouse(msg tea.MouseMsg) (tea.Model, tea.Cmd) { func (m *Model) updateMainScrollbarMouse( msg tea.MouseMsg, showSidebar bool, - chatWidth, chatHeight, viewerHeight, agentHeight, vulnHeight int, + chatWidth, chatHeight, viewerHeight, agentHeight, vulnHeight, mcpHeight int, ) bool { if msg.Action == tea.MouseActionRelease { if m.draggingScrollbar == scrollbarNone { @@ -313,18 +337,18 @@ func (m *Model) updateMainScrollbarMouse( return true } if msg.Action == tea.MouseActionMotion && m.draggingScrollbar != scrollbarNone { - m.scrollFromMouse(m.draggingScrollbar, msg.Y, chatHeight, viewerHeight, agentHeight) + m.scrollFromMouse(m.draggingScrollbar, msg.Y, chatHeight, viewerHeight, agentHeight, vulnHeight) return true } if msg.Action != tea.MouseActionPress || msg.Button != tea.MouseButtonLeft { return false } - target := m.scrollbarAt(msg, showSidebar, chatWidth, chatHeight, viewerHeight, agentHeight, vulnHeight) + target := m.scrollbarAt(msg, showSidebar, chatWidth, chatHeight, viewerHeight, agentHeight, vulnHeight, mcpHeight) if target == scrollbarNone { return false } m.draggingScrollbar = target - m.scrollFromMouse(target, msg.Y, chatHeight, viewerHeight, agentHeight) + m.scrollFromMouse(target, msg.Y, chatHeight, viewerHeight, agentHeight, vulnHeight) return true } @@ -341,8 +365,9 @@ func nearColumn(x, column int) bool { func (m Model) scrollbarAt( msg tea.MouseMsg, showSidebar bool, - chatWidth, chatHeight, viewerHeight, agentHeight, vulnHeight int, + chatWidth, chatHeight, viewerHeight, agentHeight, vulnHeight, mcpHeight int, ) scrollbarTarget { + mcpTop := viewerHeight + agentHeight + vulnHeight switch { case nearColumn(msg.X, chatWidth-2) && msg.Y >= 1 && msg.Y < chatHeight-1 && m.viewport.TotalLineCount() > m.viewport.VisibleLineCount(): @@ -358,13 +383,20 @@ func (m Model) scrollbarAt( if totalRows > m.vulnerabilityPageSize() { return scrollbarFindings } + // The roster scrolls below a fixed header, so its bar starts two rows into + // the panel (border then header) rather than one. + case showSidebar && mcpHeight > 0 && nearColumn(msg.X, m.width-3) && + msg.Y >= mcpTop+2 && msg.Y < mcpTop+mcpHeight-1: + if len(m.snapshot.Connections) > m.mcpPageSize() { + return scrollbarMcp + } } return scrollbarNone } func (m *Model) scrollFromMouse( target scrollbarTarget, - y, chatHeight, viewerHeight, agentHeight int, + y, chatHeight, viewerHeight, agentHeight, vulnHeight int, ) { switch target { case scrollbarTrace: @@ -390,6 +422,13 @@ func (m *Model) scrollFromMouse( // The offset is a row, so dragging moves the list continuously. m.vulnOffset = scrollbarOffset(y-viewerHeight-agentHeight-1, height, totalRows, height) m.keepVulnerabilitySelectionInWindow() + case scrollbarMcp: + height := m.mcpPageSize() + total := len(m.snapshot.Connections) + m.focus = focusMcp + m.input.Blur() + // The bar starts two rows into the panel (border then the fixed header). + m.mcpOffset = scrollbarOffset(y-viewerHeight-agentHeight-vulnHeight-2, height, total, height) } } @@ -545,6 +584,9 @@ func (m *Model) cycleFocus(delta int) { if len(m.snapshot.Vulnerabilities) > 0 { available = append(available, focusVulnerabilities) } + if len(m.snapshot.Connections) > 0 { + available = append(available, focusMcp) + } } idx := 0 for i, focus := range available { diff --git a/strix/interface/tui/internal/app/view.go b/strix/interface/tui/internal/app/view.go index da902848..6e71d0ee 100644 --- a/strix/interface/tui/internal/app/view.go +++ b/strix/interface/tui/internal/app/view.go @@ -507,7 +507,7 @@ func (m Model) mainView() string { func (m Model) sidebarView(width, height int) string { // Stats box height fits its content (auto, max 15); vulns panel max-height 12. statsBody := m.statsView() - statsHeight, vulnHeight, agentHeight := m.sidebarHeights() + statsHeight, vulnHeight, mcpHeight, agentHeight := m.sidebarHeights() agentBorder := dark if m.focus == focusAgents { agentBorder = green @@ -546,11 +546,19 @@ func (m Model) sidebarView(width, height int) string { ) parts = append(parts, lipgloss.NewStyle().Width(width-2).Height(vulnRows).Border(lipgloss.RoundedBorder()).BorderForeground(vulnBorder).Padding(0, 1).Render(findings)) } + if mcpHeight > 0 { + mcpBorder := dark + if m.focus == focusMcp { + mcpBorder = green + } + mcpRows := max(1, mcpHeight-2) + parts = append(parts, lipgloss.NewStyle().Width(width-2).Height(mcpRows).Border(lipgloss.RoundedBorder()).BorderForeground(mcpBorder).Padding(0, 1).Render(m.mcpConnectionsView(width-4, mcpRows))) + } parts = append(parts, lipgloss.NewStyle().Width(width-2).Height(statsHeight-2).Border(lipgloss.RoundedBorder()).BorderForeground(dark).Padding(0, 1).Render(statsBody)) return strings.Join(parts, "\n") } -func (m Model) sidebarHeights() (statsHeight, vulnHeight, agentHeight int) { +func (m Model) sidebarHeights() (statsHeight, vulnHeight, mcpHeight, agentHeight int) { // Measure the stats panel the way its box will render it: a long model name // wraps inside the sidebar, and counting only its newlines would size the // box short and push the whole frame past the bottom of the terminal. @@ -559,7 +567,13 @@ func (m Model) sidebarHeights() (statsHeight, vulnHeight, agentHeight int) { if len(m.snapshot.Vulnerabilities) > 0 { vulnHeight = min(12, len(m.vulnerabilityRows(m.vulnerabilityListWidth()))+2) } - agentHeight = max(3, m.height-m.viewerHeight()-statsHeight-vulnHeight) + // One header line + one line per connection + the box border (2). Capped so a + // long roster cannot crowd out the agent tree; a roster past the cap scrolls + // inside the panel. Absent entirely when the run has no MCP connections. + if len(m.snapshot.Connections) > 0 { + mcpHeight = min(9, len(m.snapshot.Connections)+3) + } + agentHeight = max(3, m.height-m.viewerHeight()-statsHeight-vulnHeight-mcpHeight) return } @@ -628,6 +642,111 @@ func (m Model) statsView() string { return b.String() } +// mcpConnectionsView renders the sidebar MCP panel: a header carrying the total +// connection count, then one row per connection with a status glyph and its tool +// count (or "offline"). +// - a solid green dot marks an attached, idle connection; +// - a green cycling quarter-circle (◐ ◓ ◑ ◒) marks a call running against it; +// - a red dot plus "offline" marks a connection whose live session has died. +// +// The header stays fixed while the roster below it scrolls: when there are more +// connections than the panel can show, the visible window is chosen by +// m.mcpOffset and withVerticalScrollbar draws a thumb in the reserved last +// column, exactly as the agent tree and findings list scroll. +// +// "In use" is derived from the connection-tagged tool-call events in the stream, +// not carried on the connection roster, so a call in flight shows motion without +// any extra backend signal. The quarter-circle rides the shared sweepFrame tick. +func (m Model) mcpConnectionsView(width, rows int) string { + conns := m.snapshot.Connections + header := truncate(lipgloss.NewStyle().Foreground(dim).Render( + fmt.Sprintf("MCP Connections (%d)", len(conns))), width) + bodyRows := max(0, rows-1) + if bodyRows == 0 { + return header + } + inUse := m.mcpInUse() + frames := []rune{'◐', '◓', '◑', '◒'} + // Reserve the scrollbar column whether or not the bar is showing, so the + // roster does not shift sideways as it grows past the panel. + rosterWidth := max(1, width-1) + start := windowStart(m.mcpOffset, len(conns), bodyRows) + end := min(len(conns), start+bodyRows) + lines := make([]string, 0, max(0, end-start)) + for i := start; i < end; i++ { + conn := conns[i] + var glyph, right string + switch { + case conn.Dead: + glyph = lipgloss.NewStyle().Foreground(red).Render("●") + right = lipgloss.NewStyle().Foreground(red).Render("offline") + case inUse[conn.Name]: + glyph = lipgloss.NewStyle().Foreground(green).Render(string(frames[m.sweepFrame%len(frames)])) + right = lipgloss.NewStyle().Foreground(dim).Render(toolsLabel(conn.ToolCount)) + default: + glyph = lipgloss.NewStyle().Foreground(green).Render("●") + right = lipgloss.NewStyle().Foreground(dim).Render(toolsLabel(conn.ToolCount)) + } + rightWidth := lipgloss.Width(right) + name := truncate(lipgloss.NewStyle().Foreground(textColor).Render(conn.Name), max(1, rosterWidth-2-rightWidth-1)) + gap := max(1, rosterWidth-2-lipgloss.Width(name)-rightWidth) + lines = append(lines, glyph+" "+name+strings.Repeat(" ", gap)+right) + } + roster := withVerticalScrollbar( + strings.Join(lines, "\n"), + width, + bodyRows, + len(conns), + bodyRows, + m.mcpOffset, + m.scrollbarThumb(scrollbarMcp), + ) + return header + "\n" + roster +} + +// mcpPageSize is how many connection rows the roster shows at once, below its +// fixed header line. +func (m Model) mcpPageSize() int { + _, _, mcpHeight, _ := m.sidebarHeights() + // mcpHeight = 2 (border) + header (1) + roster rows. + return max(1, mcpHeight-3) +} + +// clampMcpOffset keeps the roster offset within the range that still shows a +// full page of connections at the bottom. +func (m Model) clampMcpOffset(offset int) int { + return min(max(0, offset), max(0, len(m.snapshot.Connections)-m.mcpPageSize())) +} + +// mcpInUse is the set of MCP connections with a tool call currently running, +// read off the connection-tagged tool events the model already holds. Each MCP +// dispatch event carries the connection name (mcp_connection) and a status that +// moves running -> completed as its own event is upserted, so a connection is +// "in use" exactly while one of its events is still running. +func (m Model) mcpInUse() map[string]bool { + inUse := map[string]bool{} + for _, event := range m.snapshot.Events { + if event.Type != "tool" { + continue + } + connection := render.StringValue(event.Data["mcp_connection"]) + if connection == "" { + continue + } + if render.StringValue(event.Data["status"]) == "running" { + inUse[connection] = true + } + } + return inUse +} + +func toolsLabel(count int) string { + if count == 1 { + return "1 tool" + } + return fmt.Sprintf("%d tools", count) +} + func numberValue(value any) int64 { switch v := value.(type) { case float64: diff --git a/strix/interface/tui/internal/app/vulnerabilities.go b/strix/interface/tui/internal/app/vulnerabilities.go index bd5fa1e6..6a59a5aa 100644 --- a/strix/interface/tui/internal/app/vulnerabilities.go +++ b/strix/interface/tui/internal/app/vulnerabilities.go @@ -134,7 +134,7 @@ func clampVulnerabilityOffset(offset, total, height int) int { } func (m Model) vulnerabilityPageSize() int { - _, vulnHeight, _ := m.sidebarHeights() + _, vulnHeight, _, _ := m.sidebarHeights() return max(1, vulnHeight-2) } diff --git a/strix/interface/tui/internal/protocol/protocol.go b/strix/interface/tui/internal/protocol/protocol.go index 38ba63a3..3e3279d8 100644 --- a/strix/interface/tui/internal/protocol/protocol.go +++ b/strix/interface/tui/internal/protocol/protocol.go @@ -32,6 +32,17 @@ type Agent struct { ErrorMessage string `json:"error_message"` } +// Connection is one MCP connection the run may reach, as the backend projects +// it for the sidebar's MCP panel. Non-secret by construction: only the display +// name, how many tools the connection offers, and whether its live session has +// died (its reconnect-retry gave up). "In use" is not carried here; the client +// derives it from the connection-tagged tool-call events in the event stream. +type Connection struct { + Name string `json:"name"` + ToolCount int `json:"tool_count"` + Dead bool `json:"dead"` +} + type Event struct { ID string `json:"id"` Type string `json:"type"` @@ -68,6 +79,7 @@ type Snapshot struct { Vulnerabilities []map[string]any `json:"-"` Usage map[string]any `json:"usage"` Subscription bool `json:"subscription"` + Connections []Connection `json:"connections"` ViewerStatus string `json:"viewer_status"` ViewerURL *string `json:"viewer_url"` Error *string `json:"error"` diff --git a/strix/interface/tui/internal/render/mcp.go b/strix/interface/tui/internal/render/mcp.go index 3d1f2c25..fec3e85e 100644 --- a/strix/interface/tui/internal/render/mcp.go +++ b/strix/interface/tui/internal/render/mcp.go @@ -45,3 +45,51 @@ func renderMcpInspect(connection, status string) string { b.WriteString(style.Render(icon)) return b.String() } + +// renderMcpList renders list_mcps: the inventory of connections the run may +// reach, not a call to any of them, so no connection leads and the event +// carries no connection tag. Unlike the other MCP results, the names are worth +// showing: Strix assembled them itself from the run's registered connections, +// so they are short and never an outside server's payload. +func renderMcpList(result any, status string) string { + var b strings.Builder + b.WriteString(mcpIcon + Dim().Render("Listing MCP servers") + "\n") + for _, conn := range mcpConnectionEntries(result) { + b.WriteString(" " + Col(Slate).Render(conn.name)) + if conn.dead { + b.WriteString(Dim().Render(" · ") + Col(Red).Render("offline")) + } + b.WriteString("\n") + } + icon, style := statusIcon(status) + b.WriteString(style.Render(icon)) + return b.String() +} + +// mcpListEntry is one connection read out of a list_mcps result: its display +// name and whether its live session has died. +type mcpListEntry struct { + name string + dead bool +} + +// mcpConnectionEntries reads the connections out of a list_mcps result, which is +// {"connections": [{"name": ..., "dead": ...}, ...]}. Anything else (still +// running, or a result bounded down to a string) yields no entries, and the +// header plus status stand alone. +func mcpConnectionEntries(result any) []mcpListEntry { + resultMap, _ := result.(map[string]any) + connections, _ := resultMap["connections"].([]any) + var entries []mcpListEntry + for _, raw := range connections { + entry, ok := raw.(map[string]any) + if !ok { + continue + } + if name := strings.TrimSpace(StringValue(entry["name"])); name != "" { + dead, _ := entry["dead"].(bool) + entries = append(entries, mcpListEntry{name: name, dead: dead}) + } + } + return entries +} diff --git a/strix/interface/tui/internal/render/registry.go b/strix/interface/tui/internal/render/registry.go index ec58f781..75fb23fe 100644 --- a/strix/interface/tui/internal/render/registry.go +++ b/strix/interface/tui/internal/render/registry.go @@ -70,6 +70,10 @@ func Tool(data map[string]any) string { } switch name { + // list_mcps inventories every connection rather than touching one, so it is + // the one MCP tool with no connection tag and routes by name like a built-in. + case "list_mcps": + return renderMcpList(result, status) case "exec_command": return renderExecCommand(args, result, status) case "write_stdin": diff --git a/strix/interface/tui/internal/render/render_test.go b/strix/interface/tui/internal/render/render_test.go index 2c2b5bcd..e14169fd 100644 --- a/strix/interface/tui/internal/render/render_test.go +++ b/strix/interface/tui/internal/render/render_test.go @@ -268,6 +268,24 @@ func TestMcpDescribeInspectsConnection(t *testing.T) { } } +func TestMcpListMarksDeadConnectionsOffline(t *testing.T) { + // list_mcps carries a per-connection dead flag; a dead connection reads as + // offline in the inventory while a live one shows normally. + result := map[string]any{ + "connections": []any{ + map[string]any{"name": "supabase", "tool_count": float64(3), "dead": false}, + map[string]any{"name": "vercel", "tool_count": float64(1), "dead": true}, + }, + } + data := tool("list_mcps", nil, result, "completed") + + out := ansi.Strip(Tool(data)) + requireContains(t, out, "Listing MCP servers", "supabase", "vercel", "offline") + if strings.Count(out, "offline") != 1 { + t.Fatalf("only the dead connection should read offline:\n%s", out) + } +} + func TestCollapseToolShellPreviewAndExpand(t *testing.T) { lines := make([]string, 16) for i := range lines { diff --git a/strix/interface/tui/runtime.py b/strix/interface/tui/runtime.py index 7e716628..451e6ddc 100644 --- a/strix/interface/tui/runtime.py +++ b/strix/interface/tui/runtime.py @@ -185,6 +185,7 @@ class GoTuiRuntime: max_turns=self.args.max_turns, max_budget_usd=self.args.max_budget_usd, event_sink=self.capture_event, + mcp_status_sink=self.capture_mcp_status, ) await self._sync_agent_state() if self.controller.scan_state == "running": @@ -210,6 +211,15 @@ class GoTuiRuntime: self.live_view.ingest_sdk_event(agent_id, event) self.controller.notify_changed() + def capture_mcp_status(self, roster: list[dict[str, Any]]) -> None: + """Receive the engine's MCP connection roster and hand it to the controller. + + Runs on the scan's event loop (called from the runner at establishment + and from a session's on-dead callback), the same loop that drives + ``capture_event``, so updating the controller and repainting here is + safe. The controller renders it as the sidebar MCP connections panel.""" + self.controller.set_mcp_connections(roster) + async def _sync_agent_state(self) -> bool: parent_of, statuses, names, errors = await self.coordinator.graph_snapshot() changed = False diff --git a/strix/interface/viewer/frontend/src/App.tsx b/strix/interface/viewer/frontend/src/App.tsx index 042d54ac..97b22ce7 100644 --- a/strix/interface/viewer/frontend/src/App.tsx +++ b/strix/interface/viewer/frontend/src/App.tsx @@ -30,6 +30,7 @@ import { fetchTranscript, fetchVulnerabilities, forgetAuth, + parseMcpConnectionStatus, type AuthStatus, type LoadedRun, type RunsPayload, @@ -169,6 +170,27 @@ export default function App() { const agentCount = run?.transcript.agents.length ?? 0; const verified = auth?.verified === true; + // The run's persisted MCP roster (from run.json via /api/run), plus the set of + // connections with a tool call currently in flight. "In use" is derived here + // from the connection-tagged tool events rather than carried on the roster: + // an MCP dispatch event carries its connection name and a status that moves + // running -> completed, so a connection is in use while one of its events is + // still running. This mirrors the terminal UI's MCP panel exactly. + const mcpConnections = useMemo( + () => (run ? parseMcpConnectionStatus(run.raw) : []), + [run] + ); + const mcpInUse = useMemo(() => { + const inUse = new Set(); + for (const event of run?.transcript.events ?? []) { + if (event.type !== "tool") continue; + const connection = event.data?.mcp_connection; + if (typeof connection !== "string" || !connection) continue; + if (event.data?.status === "running") inUse.add(connection); + } + return inUse; + }, [run]); + // Per-run guard for the default view: land on Agents while a scan is live, // Overview once it finishes. Applied at most once per run and never once the // user has navigated manually (userSetView flips the guard). @@ -251,6 +273,8 @@ export default function App() { }} issuesCount={run?.vulnerabilities.length ?? 0} agentCount={agentCount} + mcpConnections={mcpConnections} + mcpInUse={mcpInUse} runCount={runs?.count ?? 0} finished={run?.finished ?? false} verified={verified} diff --git a/strix/interface/viewer/frontend/src/components/Sidebar.tsx b/strix/interface/viewer/frontend/src/components/Sidebar.tsx index dc2487f2..19cd1977 100644 --- a/strix/interface/viewer/frontend/src/components/Sidebar.tsx +++ b/strix/interface/viewer/frontend/src/components/Sidebar.tsx @@ -14,6 +14,7 @@ import { IoChatbubblesOutline } from "react-icons/io5"; import { cn } from "@/lib/utils"; import { ctaUrl, trackCta } from "@/lib/cta"; import { UpgradeModal } from "@/components/UpgradeModal"; +import type { McpConnectionStatus } from "@/data/serverSource"; import type { View } from "@/App"; /** @@ -37,6 +38,8 @@ interface SidebarProps { onSelectView: (view: View) => void; issuesCount: number; agentCount: number; + mcpConnections: McpConnectionStatus[]; + mcpInUse: Set; runCount: number; finished: boolean; verified: boolean; @@ -61,6 +64,8 @@ export default function Sidebar({ onSelectView, issuesCount, agentCount, + mcpConnections, + mcpInUse, runCount, finished, verified, @@ -246,6 +251,9 @@ export default function Sidebar({ onClick={() => onSelectView("agents")} /> )} + {mcpConnections.length > 0 && ( + + )} } label="Past runs" @@ -421,6 +429,84 @@ function NavItem({ icon, label, active, onClick, count }: NavItemProps) { ); } +// The quarter-circle sweep frames the terminal UI cycles for an in-use +// connection, and the sub-second tick that advances them. +const SWEEP_FRAMES = ["◐", "◓", "◑", "◒"] as const; +const SWEEP_MS = 220; + +/** + * The MCP connections panel: a compact roster of the run's connected MCP + * servers, matching the terminal UI's sidebar panel. A header carries the + * total count; each row shows a status glyph, the connection name, and its + * tool count (or "offline"): + * - solid green dot: attached and idle; + * - green cycling quarter-circle (◐◓◑◒): a tool call is running against it; + * - red dot + "offline": the connection's live session has died. + * + * "In use" is derived by the caller from the connection-tagged tool events, not + * carried on the roster, so a call in flight shows motion with no extra signal. + * The roster scrolls within a bounded height so a long list never blows out the + * rail, mirroring how the nav above it scrolls. + */ +function McpConnectionsPanel({ + connections, + inUse, +}: { + connections: McpConnectionStatus[]; + inUse: Set; +}) { + const anyInUse = connections.some((c) => !c.dead && inUse.has(c.name)); + const [frame, setFrame] = useState(0); + + // Advance the sweep only while at least one connection is in use, so an idle + // panel does no work. + useEffect(() => { + if (!anyInUse) return; + const id = setInterval(() => setFrame((f) => (f + 1) % SWEEP_FRAMES.length), SWEEP_MS); + return () => clearInterval(id); + }, [anyInUse]); + + return ( +
+
+ MCP Connections ({connections.length}) +
+
+ {connections.map((conn) => { + const busy = !conn.dead && inUse.has(conn.name); + return ( +
+ + + {conn.name} + + {conn.dead ? ( + offline + ) : ( + + {conn.toolCount} {conn.toolCount === 1 ? "tool" : "tools"} + + )} +
+ ); + })} +
+
+ ); +} + // Overview icon: a dashboard grid glyph (16x16 viewBox). function ProjectsIcon() { return ( diff --git a/strix/interface/viewer/frontend/src/components/live/tool-renderers/McpRenderer.tsx b/strix/interface/viewer/frontend/src/components/live/tool-renderers/McpRenderer.tsx index 105ac77c..ffafeaba 100644 --- a/strix/interface/viewer/frontend/src/components/live/tool-renderers/McpRenderer.tsx +++ b/strix/interface/viewer/frontend/src/components/live/tool-renderers/McpRenderer.tsx @@ -14,6 +14,10 @@ import type { ToolRendererProps } from "@/types/events"; * never as markdown, since it came from a server outside Strix. * * The full result is still in the run's event data on disk either way. + * + * list_mcps is the other exception: its result is the engine's own inventory of + * the run's connections (names and tool counts), short and assembled by Strix + * rather than returned by an outside server, so it is shown inline. */ /** Arguments one line each, as the terminal prints them. */ @@ -25,6 +29,52 @@ function argLines(args: unknown): string[] { }); } +/** One connection out of a list_mcps inventory. */ +interface McpListingEntry { + name: string; + toolCount: number | null; + dead: boolean; +} + +/** + * The connections out of a list_mcps result, which is + * `{"connections": [{id, name, description, tool_count}, ...]}`, sometimes + * arriving JSON-encoded as a string. Anything else yields an empty list and the + * row shows just the header and status. Unlike other MCP results this one is + * safe to show: the engine assembled it from the run's own registered + * connections, so it is short and never an outside server's payload. It still + * renders as inert text. + */ +function listingEntries(result: unknown): McpListingEntry[] { + let value = result; + if (typeof value === "string") { + try { + value = JSON.parse(value); + } catch { + return []; + } + } + const connections = + value && typeof value === "object" && !Array.isArray(value) + ? (value as Record).connections + : null; + if (!Array.isArray(connections)) return []; + return connections.flatMap((entry) => { + if (!entry || typeof entry !== "object" || Array.isArray(entry)) return []; + const record = entry as Record; + const name = + typeof record.name === "string" && record.name.trim() + ? record.name.trim() + : typeof record.id === "string" + ? record.id.trim() + : ""; + if (!name) return []; + const toolCount = typeof record.tool_count === "number" ? record.tool_count : null; + const dead = record.dead === true; + return [{ name, toolCount, dead }]; + }); +} + const MAX_ERROR_CHARS = 600; function errorText(result: unknown): string | null { @@ -50,11 +100,17 @@ export default function McpRenderer({ // describe_mcp inspects a connection's catalog rather than calling a tool on // it, so the connection is the subject and there is no underlying tool. const inspecting = toolName === "describe_mcp"; + // list_mcps inventories every connection rather than touching one, so it + // carries no connection at all and is routed here by name instead. + const listing = toolName === "list_mcps"; + const entries = listing ? listingEntries(result) : []; return (
- {inspecting ? ( + {listing ? ( + Listing connected MCP servers + ) : inspecting ? ( <> Inspecting MCP server {mcpConnection && ( @@ -82,6 +138,26 @@ export default function McpRenderer({
)} + {entries.length > 0 && ( +
+ {entries.map((entry) => ( +
+ {entry.name} + {entry.dead ? ( + · offline + ) : ( + entry.toolCount !== null && ( + + {" "} + · {entry.toolCount} {entry.toolCount === 1 ? "tool" : "tools"} + + ) + )} +
+ ))} +
+ )} +
{status === "running" && Running} {status === "completed" && ✓ Done} diff --git a/strix/interface/viewer/frontend/src/components/live/tool-renderers/index.ts b/strix/interface/viewer/frontend/src/components/live/tool-renderers/index.ts index bda50125..b075aa36 100644 --- a/strix/interface/viewer/frontend/src/components/live/tool-renderers/index.ts +++ b/strix/interface/viewer/frontend/src/components/live/tool-renderers/index.ts @@ -93,7 +93,9 @@ const CATEGORY_META: Record = { threatModel: { renderer: ThreatModelRenderer, icon: Crosshair, color: "text-blue-400", match: /threat_model/ }, telemetry: { renderer: FallbackRenderer, icon: Wrench, color: "text-[#555]" }, // Tools from the user's own MCP servers. Resolved from the connection on the - // event rather than from a tool name, so this family has no names below. + // event rather than from a tool name — except list_mcps, the engine's + // inventory of every connection, which touches none and so carries no + // connection to resolve from; it is the family's one name below. mcp: { renderer: McpRenderer, icon: Plug, color: "text-teal-400" }, }; @@ -128,7 +130,7 @@ const CATEGORY_TOOLS: Record = { // Per-target threat model, shared across the agent tree threatModel: ["get_threat_model", "save_threat_model", "amend_threat_model"], telemetry: ["sandbox_error_details", "llm_error_details"], - mcp: [], + mcp: ["list_mcps"], }; /** Reverse index (tool name → family), built once from CATEGORY_TOOLS. */ diff --git a/strix/interface/viewer/frontend/src/data/serverSource.ts b/strix/interface/viewer/frontend/src/data/serverSource.ts index a0bd5593..f90f84bf 100644 --- a/strix/interface/viewer/frontend/src/data/serverSource.ts +++ b/strix/interface/viewer/frontend/src/data/serverSource.ts @@ -39,6 +39,39 @@ export interface Transcript { events: TranscriptEvent[]; } +/** + * One MCP connection's non-secret status, as persisted to run.json by the + * engine under `mcp_connection_status` and surfaced verbatim by GET /api/run. + * Only name / provider / tool_count / dead ride here; never config, url, or + * token. `dead` means the connection's live session gave up reconnecting. + */ +export interface McpConnectionStatus { + name: string; + provider: string | null; + toolCount: number; + dead: boolean; +} + +/** + * Read the MCP connection roster out of a raw run record. Tolerates the field + * being absent (older runs, or a run with no MCP) and any malformed entry, + * yielding an empty list rather than throwing. + */ +export function parseMcpConnectionStatus(raw: Record): McpConnectionStatus[] { + const list = raw?.mcp_connection_status; + if (!Array.isArray(list)) return []; + return list.flatMap((entry) => { + if (!entry || typeof entry !== "object" || Array.isArray(entry)) return []; + const record = entry as Record; + const name = typeof record.name === "string" ? record.name.trim() : ""; + if (!name) return []; + const provider = typeof record.provider === "string" && record.provider.trim() ? record.provider.trim() : null; + const toolCount = typeof record.tool_count === "number" ? record.tool_count : 0; + const dead = record.dead === true; + return [{ name, provider, toolCount, dead }]; + }); +} + export interface LoadedRun { summary: ParsedRunSummary; /** Whole raw run record (for llm_usage, targets_info details, etc.). */ diff --git a/strix/interface/viewer/static/assets/index-CYf9nnT3.js b/strix/interface/viewer/static/assets/index-Bpn8GiSb.js similarity index 60% rename from strix/interface/viewer/static/assets/index-CYf9nnT3.js rename to strix/interface/viewer/static/assets/index-Bpn8GiSb.js index b6f6e45c..478501f7 100644 --- a/strix/interface/viewer/static/assets/index-CYf9nnT3.js +++ b/strix/interface/viewer/static/assets/index-Bpn8GiSb.js @@ -1,4 +1,4 @@ -(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))a(s);new MutationObserver(s=>{for(const o of s)if(o.type==="childList")for(const c of o.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&a(c)}).observe(document,{childList:!0,subtree:!0});function r(s){const o={};return s.integrity&&(o.integrity=s.integrity),s.referrerPolicy&&(o.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?o.credentials="include":s.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function a(s){if(s.ep)return;s.ep=!0;const o=r(s);fetch(s.href,o)}})();function Ao(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var hh={exports:{}},Xl={};/** +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))a(s);new MutationObserver(s=>{for(const o of s)if(o.type==="childList")for(const c of o.addedNodes)c.tagName==="LINK"&&c.rel==="modulepreload"&&a(c)}).observe(document,{childList:!0,subtree:!0});function r(s){const o={};return s.integrity&&(o.integrity=s.integrity),s.referrerPolicy&&(o.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?o.credentials="include":s.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function a(s){if(s.ep)return;s.ep=!0;const o=r(s);fetch(s.href,o)}})();function Ao(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var fh={exports:{}},Xl={};/** * @license React * react-jsx-runtime.production.js * @@ -6,7 +6,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var Q0;function Mk(){if(Q0)return Xl;Q0=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function r(a,s,o){var c=null;if(o!==void 0&&(c=""+o),s.key!==void 0&&(c=""+s.key),"key"in s){o={};for(var d in s)d!=="key"&&(o[d]=s[d])}else o=s;return s=o.ref,{$$typeof:e,type:a,key:c,ref:s!==void 0?s:null,props:o}}return Xl.Fragment=t,Xl.jsx=r,Xl.jsxs=r,Xl}var W0;function Ok(){return W0||(W0=1,hh.exports=Mk()),hh.exports}var m=Ok(),mh={exports:{}},Ve={};/** + */var Q0;function Mk(){if(Q0)return Xl;Q0=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function r(a,s,o){var c=null;if(o!==void 0&&(c=""+o),s.key!==void 0&&(c=""+s.key),"key"in s){o={};for(var d in s)d!=="key"&&(o[d]=s[d])}else o=s;return s=o.ref,{$$typeof:e,type:a,key:c,ref:s!==void 0?s:null,props:o}}return Xl.Fragment=t,Xl.jsx=r,Xl.jsxs=r,Xl}var W0;function Ok(){return W0||(W0=1,fh.exports=Mk()),fh.exports}var m=Ok(),hh={exports:{}},Ve={};/** * @license React * react.production.js * @@ -14,7 +14,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var J0;function Rk(){if(J0)return Ve;J0=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),r=Symbol.for("react.fragment"),a=Symbol.for("react.strict_mode"),s=Symbol.for("react.profiler"),o=Symbol.for("react.consumer"),c=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),f=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),p=Symbol.for("react.lazy"),g=Symbol.for("react.activity"),y=Symbol.iterator;function b(D){return D===null||typeof D!="object"?null:(D=y&&D[y]||D["@@iterator"],typeof D=="function"?D:null)}var _={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},E=Object.assign,S={};function w(D,Y,L){this.props=D,this.context=Y,this.refs=S,this.updater=L||_}w.prototype.isReactComponent={},w.prototype.setState=function(D,Y){if(typeof D!="object"&&typeof D!="function"&&D!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,D,Y,"setState")},w.prototype.forceUpdate=function(D){this.updater.enqueueForceUpdate(this,D,"forceUpdate")};function k(){}k.prototype=w.prototype;function N(D,Y,L){this.props=D,this.context=Y,this.refs=S,this.updater=L||_}var M=N.prototype=new k;M.constructor=N,E(M,w.prototype),M.isPureReactComponent=!0;var B=Array.isArray;function R(){}var U={H:null,A:null,T:null,S:null},I=Object.prototype.hasOwnProperty;function X(D,Y,L){var G=L.ref;return{$$typeof:e,type:D,key:Y,ref:G!==void 0?G:null,props:L}}function j(D,Y){return X(D.type,Y,D.props)}function z(D){return typeof D=="object"&&D!==null&&D.$$typeof===e}function V(D){var Y={"=":"=0",":":"=2"};return"$"+D.replace(/[=:]/g,function(L){return Y[L]})}var P=/\/+/g;function T(D,Y){return typeof D=="object"&&D!==null&&D.key!=null?V(""+D.key):Y.toString(36)}function $(D){switch(D.status){case"fulfilled":return D.value;case"rejected":throw D.reason;default:switch(typeof D.status=="string"?D.then(R,R):(D.status="pending",D.then(function(Y){D.status==="pending"&&(D.status="fulfilled",D.value=Y)},function(Y){D.status==="pending"&&(D.status="rejected",D.reason=Y)})),D.status){case"fulfilled":return D.value;case"rejected":throw D.reason}}throw D}function O(D,Y,L,G,q){var Q=typeof D;(Q==="undefined"||Q==="boolean")&&(D=null);var J=!1;if(D===null)J=!0;else switch(Q){case"bigint":case"string":case"number":J=!0;break;case"object":switch(D.$$typeof){case e:case t:J=!0;break;case p:return J=D._init,O(J(D._payload),Y,L,G,q)}}if(J)return q=q(D),J=G===""?"."+T(D,0):G,B(q)?(L="",J!=null&&(L=J.replace(P,"$&/")+"/"),O(q,Y,L,"",function(ce){return ce})):q!=null&&(z(q)&&(q=j(q,L+(q.key==null||D&&D.key===q.key?"":(""+q.key).replace(P,"$&/")+"/")+J)),Y.push(q)),1;J=0;var W=G===""?".":G+":";if(B(D))for(var te=0;te>>1,C=O[Z];if(0>>1;Zs(L,K))Gs(q,L)?(O[Z]=q,O[G]=K,Z=G):(O[Z]=L,O[Y]=K,Z=Y);else if(Gs(q,K))O[Z]=q,O[G]=K,Z=G;else break e}}return H}function s(O,H){var K=O.sortIndex-H.sortIndex;return K!==0?K:O.id-H.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var c=Date,d=c.now();e.unstable_now=function(){return c.now()-d}}var f=[],h=[],p=1,g=null,y=3,b=!1,_=!1,E=!1,S=!1,w=typeof setTimeout=="function"?setTimeout:null,k=typeof clearTimeout=="function"?clearTimeout:null,N=typeof setImmediate<"u"?setImmediate:null;function M(O){for(var H=r(h);H!==null;){if(H.callback===null)a(h);else if(H.startTime<=O)a(h),H.sortIndex=H.expirationTime,t(f,H);else break;H=r(h)}}function B(O){if(E=!1,M(O),!_)if(r(f)!==null)_=!0,R||(R=!0,V());else{var H=r(h);H!==null&&$(B,H.startTime-O)}}var R=!1,U=-1,I=5,X=-1;function j(){return S?!0:!(e.unstable_now()-XO&&j());){var Z=g.callback;if(typeof Z=="function"){g.callback=null,y=g.priorityLevel;var C=Z(g.expirationTime<=O);if(O=e.unstable_now(),typeof C=="function"){g.callback=C,M(O),H=!0;break t}g===r(f)&&a(f),M(O)}else a(f);g=r(f)}if(g!==null)H=!0;else{var D=r(h);D!==null&&$(B,D.startTime-O),H=!1}}break e}finally{g=null,y=K,b=!1}H=void 0}}finally{H?V():R=!1}}}var V;if(typeof N=="function")V=function(){N(z)};else if(typeof MessageChannel<"u"){var P=new MessageChannel,T=P.port2;P.port1.onmessage=z,V=function(){T.postMessage(null)}}else V=function(){w(z,0)};function $(O,H){U=w(function(){O(e.unstable_now())},H)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(O){O.callback=null},e.unstable_forceFrameRate=function(O){0>O||125Z?(O.sortIndex=K,t(h,O),r(f)===null&&O===r(h)&&(E?(k(U),U=-1):E=!0,$(B,K-Z))):(O.sortIndex=C,t(f,O),_||b||(_=!0,R||(R=!0,V()))),O},e.unstable_shouldYield=j,e.unstable_wrapCallback=function(O){var H=y;return function(){var K=y;y=H;try{return O.apply(this,arguments)}finally{y=K}}}})(xh)),xh}var ny;function Dk(){return ny||(ny=1,gh.exports=jk()),gh.exports}var bh={exports:{}},Tn={};/** + */var ty;function jk(){return ty||(ty=1,(function(e){function t(O,U){var K=O.length;O.push(U);e:for(;0>>1,M=O[X];if(0>>1;Xs(D,K))Vs(q,D)?(O[X]=q,O[V]=K,X=V):(O[X]=D,O[F]=K,X=F);else if(Vs(q,K))O[X]=q,O[V]=K,X=V;else break e}}return U}function s(O,U){var K=O.sortIndex-U.sortIndex;return K!==0?K:O.id-U.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var c=Date,d=c.now();e.unstable_now=function(){return c.now()-d}}var h=[],f=[],p=1,g=null,b=3,y=!1,_=!1,N=!1,S=!1,w=typeof setTimeout=="function"?setTimeout:null,C=typeof clearTimeout=="function"?clearTimeout:null,E=typeof setImmediate<"u"?setImmediate:null;function A(O){for(var U=r(f);U!==null;){if(U.callback===null)a(f);else if(U.startTime<=O)a(f),U.sortIndex=U.expirationTime,t(h,U);else break;U=r(f)}}function B(O){if(N=!1,A(O),!_)if(r(h)!==null)_=!0,R||(R=!0,Z());else{var U=r(f);U!==null&&$(B,U.startTime-O)}}var R=!1,H=-1,z=5,Y=-1;function j(){return S?!0:!(e.unstable_now()-YO&&j());){var X=g.callback;if(typeof X=="function"){g.callback=null,b=g.priorityLevel;var M=X(g.expirationTime<=O);if(O=e.unstable_now(),typeof M=="function"){g.callback=M,A(O),U=!0;break t}g===r(h)&&a(h),A(O)}else a(h);g=r(h)}if(g!==null)U=!0;else{var L=r(f);L!==null&&$(B,L.startTime-O),U=!1}}break e}finally{g=null,b=K,y=!1}U=void 0}}finally{U?Z():R=!1}}}var Z;if(typeof E=="function")Z=function(){E(I)};else if(typeof MessageChannel<"u"){var P=new MessageChannel,k=P.port2;P.port1.onmessage=I,Z=function(){k.postMessage(null)}}else Z=function(){w(I,0)};function $(O,U){H=w(function(){O(e.unstable_now())},U)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(O){O.callback=null},e.unstable_forceFrameRate=function(O){0>O||125X?(O.sortIndex=K,t(f,O),r(h)===null&&O===r(f)&&(N?(C(H),H=-1):N=!0,$(B,K-X))):(O.sortIndex=M,t(h,O),_||y||(_=!0,R||(R=!0,Z()))),O},e.unstable_shouldYield=j,e.unstable_wrapCallback=function(O){var U=b;return function(){var K=b;b=U;try{return O.apply(this,arguments)}finally{b=K}}}})(gh)),gh}var ny;function Dk(){return ny||(ny=1,ph.exports=jk()),ph.exports}var xh={exports:{}},Tn={};/** * @license React * react-dom.production.js * @@ -30,7 +30,7 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var ry;function Lk(){if(ry)return Tn;ry=1;var e=Mo();function t(f){var h="https://react.dev/errors/"+f;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),bh.exports=Lk(),bh.exports}/** + */var ry;function Lk(){if(ry)return Tn;ry=1;var e=Mo();function t(h){var f="https://react.dev/errors/"+h;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),xh.exports=Lk(),xh.exports}/** * @license React * react-dom-client.production.js * @@ -38,15 +38,15 @@ * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var ay;function zk(){if(ay)return Kl;ay=1;var e=Dk(),t=Mo(),r=D_();function a(n){var i="https://react.dev/errors/"+n;if(1C||(n.current=Z[C],Z[C]=null,C--)}function L(n,i){C++,Z[C]=n.current,n.current=i}var G=D(null),q=D(null),Q=D(null),J=D(null);function W(n,i){switch(L(Q,i),L(q,n),L(G,null),i.nodeType){case 9:case 11:n=(n=i.documentElement)&&(n=n.namespaceURI)?v0(n):0;break;default:if(n=i.tagName,i=i.namespaceURI)i=v0(i),n=_0(i,n);else switch(n){case"svg":n=1;break;case"math":n=2;break;default:n=0}}Y(G),L(G,n)}function te(){Y(G),Y(q),Y(Q)}function ce(n){n.memoizedState!==null&&L(J,n);var i=G.current,l=_0(i,n.type);i!==l&&(L(q,n),L(G,l))}function fe(n){q.current===n&&(Y(G),Y(q)),J.current===n&&(Y(J),Fl._currentValue=K)}var xe,we;function Ne(n){if(xe===void 0)try{throw Error()}catch(l){var i=l.stack.trim().match(/\n( *(at )?)/);xe=i&&i[1]||"",we=-1M||(n.current=X[M],X[M]=null,M--)}function D(n,i){M++,X[M]=n.current,n.current=i}var V=L(null),q=L(null),Q=L(null),J=L(null);function W(n,i){switch(D(Q,i),D(q,n),D(V,null),i.nodeType){case 9:case 11:n=(n=i.documentElement)&&(n=n.namespaceURI)?v0(n):0;break;default:if(n=i.tagName,i=i.namespaceURI)i=v0(i),n=_0(i,n);else switch(n){case"svg":n=1;break;case"math":n=2;break;default:n=0}}F(V),D(V,n)}function te(){F(V),F(q),F(Q)}function oe(n){n.memoizedState!==null&&D(J,n);var i=V.current,l=_0(i,n.type);i!==l&&(D(q,n),D(V,l))}function fe(n){q.current===n&&(F(V),F(q)),J.current===n&&(F(J),Fl._currentValue=K)}var xe,we;function Ne(n){if(xe===void 0)try{throw Error()}catch(l){var i=l.stack.trim().match(/\n( *(at )?)/);xe=i&&i[1]||"",we=-1)":-1x||ne[u]!==le[x]){var he=` `+ne[u].replace(" at new "," at ");return n.displayName&&he.includes("")&&(he=he.replace("",n.displayName)),he}while(1<=u&&0<=x);break}}}finally{De=!1,Error.prepareStackTrace=l}return(l=n?n.displayName||n.name:"")?Ne(l):""}function st(n,i){switch(n.tag){case 26:case 27:case 5:return Ne(n.type);case 16:return Ne("Lazy");case 13:return n.child!==i&&i!==null?Ne("Suspense Fallback"):Ne("Suspense");case 19:return Ne("SuspenseList");case 0:case 15:return $e(n.type,!1);case 11:return $e(n.type.render,!1);case 1:return $e(n.type,!0);case 31:return Ne("Activity");default:return""}}function Rt(n){try{var i="",l=null;do i+=st(n,l),l=n,n=n.return;while(n);return i}catch(u){return` Error generating stack: `+u.message+` -`+u.stack}}var Xt=Object.prototype.hasOwnProperty,Pt=e.unstable_scheduleCallback,Kt=e.unstable_cancelCallback,Yn=e.unstable_shouldYield,Nn=e.unstable_requestPaint,ct=e.unstable_now,It=e.unstable_getCurrentPriorityLevel,ue=e.unstable_ImmediatePriority,be=e.unstable_UserBlockingPriority,Oe=e.unstable_NormalPriority,Fe=e.unstable_LowPriority,Ze=e.unstable_IdlePriority,cn=e.log,Sn=e.unstable_setDisableYieldValue,Zt=null,At=null;function Jt(n){if(typeof cn=="function"&&Sn(n),At&&typeof At.setStrictMode=="function")try{At.setStrictMode(Zt,n)}catch{}}var ut=Math.clz32?Math.clz32:Ni,In=Math.log,un=Math.LN2;function Ni(n){return n>>>=0,n===0?32:31-(In(n)/un|0)|0}var nt=256,Xn=262144,On=4194304;function mn(n){var i=n&42;if(i!==0)return i;switch(n&-n){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return n&261888;case 262144:case 524288:case 1048576:case 2097152:return n&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return n&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return n}}function re(n,i,l){var u=n.pendingLanes;if(u===0)return 0;var x=0,v=n.suspendedLanes,A=n.pingedLanes;n=n.warmLanes;var F=u&134217727;return F!==0?(u=F&~v,u!==0?x=mn(u):(A&=F,A!==0?x=mn(A):l||(l=F&~n,l!==0&&(x=mn(l))))):(F=u&~v,F!==0?x=mn(F):A!==0?x=mn(A):l||(l=u&~n,l!==0&&(x=mn(l)))),x===0?0:i!==0&&i!==x&&(i&v)===0&&(v=x&-x,l=i&-i,v>=l||v===32&&(l&4194048)!==0)?i:x}function me(n,i){return(n.pendingLanes&~(n.suspendedLanes&~n.pingedLanes)&i)===0}function Ee(n,i){switch(n){case 1:case 2:case 4:case 8:case 64:return i+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return i+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Pe(){var n=On;return On<<=1,(On&62914560)===0&&(On=4194304),n}function St(n){for(var i=[],l=0;31>l;l++)i.push(n);return i}function gt(n,i){n.pendingLanes|=i,i!==268435456&&(n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0)}function Me(n,i,l,u,x,v){var A=n.pendingLanes;n.pendingLanes=l,n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0,n.expiredLanes&=l,n.entangledLanes&=l,n.errorRecoveryDisabledLanes&=l,n.shellSuspendCounter=0;var F=n.entanglements,ne=n.expirationTimes,le=n.hiddenUpdates;for(l=A&~l;0"u")return null;try{return n.activeElement||n.body}catch{return n.body}}var is=/[\n"\\]/g;function Cn(n){return n.replace(is,function(i){return"\\"+i.charCodeAt(0).toString(16)+" "})}function ba(n,i,l,u,x,v,A,F){n.name="",A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"?n.type=A:n.removeAttribute("type"),i!=null?A==="number"?(i===0&&n.value===""||n.value!=i)&&(n.value=""+_t(i)):n.value!==""+_t(i)&&(n.value=""+_t(i)):A!=="submit"&&A!=="reset"||n.removeAttribute("value"),i!=null?Oi(n,A,_t(i)):l!=null?Oi(n,A,_t(l)):u!=null&&n.removeAttribute("value"),x==null&&v!=null&&(n.defaultChecked=!!v),x!=null&&(n.checked=x&&typeof x!="function"&&typeof x!="symbol"),F!=null&&typeof F!="function"&&typeof F!="symbol"&&typeof F!="boolean"?n.name=""+_t(F):n.removeAttribute("name")}function Er(n,i,l,u,x,v,A,F){if(v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"&&(n.type=v),i!=null||l!=null){if(!(v!=="submit"&&v!=="reset"||i!=null)){Ai(n);return}l=l!=null?""+_t(l):"",i=i!=null?""+_t(i):l,F||i===n.value||(n.value=i),n.defaultValue=i}u=u??x,u=typeof u!="function"&&typeof u!="symbol"&&!!u,n.checked=F?n.checked:!!u,n.defaultChecked=!!u,A!=null&&typeof A!="function"&&typeof A!="symbol"&&typeof A!="boolean"&&(n.name=A),Ai(n)}function Oi(n,i,l){i==="number"&&Mi(n.ownerDocument)===n||n.defaultValue===""+l||(n.defaultValue=""+l)}function dn(n,i,l,u){if(n=n.options,i){i={};for(var x=0;x"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),fd=!1;if(ti)try{var ol={};Object.defineProperty(ol,"passive",{get:function(){fd=!0}}),window.addEventListener("test",ol,ol),window.removeEventListener("test",ol,ol)}catch{fd=!1}var Di=null,hd=null,Fo=null;function _g(){if(Fo)return Fo;var n,i=hd,l=i.length,u,x="value"in Di?Di.value:Di.textContent,v=x.length;for(n=0;n=dl),Cg=" ",Tg=!1;function Ag(n,i){switch(n){case"keyup":return W2.indexOf(i.keyCode)!==-1;case"keydown":return i.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Mg(n){return n=n.detail,typeof n=="object"&&"data"in n?n.data:null}var ss=!1;function eS(n,i){switch(n){case"compositionend":return Mg(i);case"keypress":return i.which!==32?null:(Tg=!0,Cg);case"textInput":return n=i.data,n===Cg&&Tg?null:n;default:return null}}function tS(n,i){if(ss)return n==="compositionend"||!bd&&Ag(n,i)?(n=_g(),Fo=hd=Di=null,ss=!1,n):null;switch(n){case"paste":return null;case"keypress":if(!(i.ctrlKey||i.altKey||i.metaKey)||i.ctrlKey&&i.altKey){if(i.char&&1=i)return{node:l,offset:i-n};n=u}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=Bg(l)}}function Hg(n,i){return n&&i?n===i?!0:n&&n.nodeType===3?!1:i&&i.nodeType===3?Hg(n,i.parentNode):"contains"in n?n.contains(i):n.compareDocumentPosition?!!(n.compareDocumentPosition(i)&16):!1:!1}function $g(n){n=n!=null&&n.ownerDocument!=null&&n.ownerDocument.defaultView!=null?n.ownerDocument.defaultView:window;for(var i=Mi(n.document);i instanceof n.HTMLIFrameElement;){try{var l=typeof i.contentWindow.location.href=="string"}catch{l=!1}if(l)n=i.contentWindow;else break;i=Mi(n.document)}return i}function _d(n){var i=n&&n.nodeName&&n.nodeName.toLowerCase();return i&&(i==="input"&&(n.type==="text"||n.type==="search"||n.type==="tel"||n.type==="url"||n.type==="password")||i==="textarea"||n.contentEditable==="true")}var cS=ti&&"documentMode"in document&&11>=document.documentMode,ls=null,wd=null,pl=null,Ed=!1;function qg(n,i,l){var u=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;Ed||ls==null||ls!==Mi(u)||(u=ls,"selectionStart"in u&&_d(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),pl&&ml(pl,u)||(pl=u,u=Ic(wd,"onSelect"),0>=A,x-=A,Hr=1<<32-ut(i)+x|l<Ke?(at=je,je=null):at=je.sibling;var mt=oe(ae,je,se[Ke],pe);if(mt===null){je===null&&(je=at);break}n&&je&&mt.alternate===null&&i(ae,je),ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt,je=at}if(Ke===se.length)return l(ae,je),lt&&ri(ae,Ke),Ie;if(je===null){for(;KeKe?(at=je,je=null):at=je.sibling;var na=oe(ae,je,mt.value,pe);if(na===null){je===null&&(je=at);break}n&&je&&na.alternate===null&&i(ae,je),ie=v(na,ie,Ke),ht===null?Ie=na:ht.sibling=na,ht=na,je=at}if(mt.done)return l(ae,je),lt&&ri(ae,Ke),Ie;if(je===null){for(;!mt.done;Ke++,mt=se.next())mt=ge(ae,mt.value,pe),mt!==null&&(ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt);return lt&&ri(ae,Ke),Ie}for(je=u(je);!mt.done;Ke++,mt=se.next())mt=de(je,ae,Ke,mt.value,pe),mt!==null&&(n&&mt.alternate!==null&&je.delete(mt.key===null?Ke:mt.key),ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt);return n&&je.forEach(function(Ak){return i(ae,Ak)}),lt&&ri(ae,Ke),Ie}function Nt(ae,ie,se,pe){if(typeof se=="object"&&se!==null&&se.type===E&&se.key===null&&(se=se.props.children),typeof se=="object"&&se!==null){switch(se.$$typeof){case b:e:{for(var Ie=se.key;ie!==null;){if(ie.key===Ie){if(Ie=se.type,Ie===E){if(ie.tag===7){l(ae,ie.sibling),pe=x(ie,se.props.children),pe.return=ae,ae=pe;break e}}else if(ie.elementType===Ie||typeof Ie=="object"&&Ie!==null&&Ie.$$typeof===I&&Aa(Ie)===ie.type){l(ae,ie.sibling),pe=x(ie,se.props),_l(pe,se),pe.return=ae,ae=pe;break e}l(ae,ie);break}else i(ae,ie);ie=ie.sibling}se.type===E?(pe=Na(se.props.children,ae.mode,pe,se.key),pe.return=ae,ae=pe):(pe=ec(se.type,se.key,se.props,null,ae.mode,pe),_l(pe,se),pe.return=ae,ae=pe)}return A(ae);case _:e:{for(Ie=se.key;ie!==null;){if(ie.key===Ie)if(ie.tag===4&&ie.stateNode.containerInfo===se.containerInfo&&ie.stateNode.implementation===se.implementation){l(ae,ie.sibling),pe=x(ie,se.children||[]),pe.return=ae,ae=pe;break e}else{l(ae,ie);break}else i(ae,ie);ie=ie.sibling}pe=Md(se,ae.mode,pe),pe.return=ae,ae=pe}return A(ae);case I:return se=Aa(se),Nt(ae,ie,se,pe)}if($(se))return Ae(ae,ie,se,pe);if(V(se)){if(Ie=V(se),typeof Ie!="function")throw Error(a(150));return se=Ie.call(se),He(ae,ie,se,pe)}if(typeof se.then=="function")return Nt(ae,ie,lc(se),pe);if(se.$$typeof===N)return Nt(ae,ie,rc(ae,se),pe);oc(ae,se)}return typeof se=="string"&&se!==""||typeof se=="number"||typeof se=="bigint"?(se=""+se,ie!==null&&ie.tag===6?(l(ae,ie.sibling),pe=x(ie,se),pe.return=ae,ae=pe):(l(ae,ie),pe=Ad(se,ae.mode,pe),pe.return=ae,ae=pe),A(ae)):l(ae,ie)}return function(ae,ie,se,pe){try{vl=0;var Ie=Nt(ae,ie,se,pe);return bs=null,Ie}catch(je){if(je===xs||je===ac)throw je;var ht=Zn(29,je,null,ae.mode);return ht.lanes=pe,ht.return=ae,ht}finally{}}}var Oa=dx(!0),fx=dx(!1),Ui=!1;function qd(n){n.updateQueue={baseState:n.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Pd(n,i){n=n.updateQueue,i.updateQueue===n&&(i.updateQueue={baseState:n.baseState,firstBaseUpdate:n.firstBaseUpdate,lastBaseUpdate:n.lastBaseUpdate,shared:n.shared,callbacks:null})}function Hi(n){return{lane:n,tag:0,payload:null,callback:null,next:null}}function $i(n,i,l){var u=n.updateQueue;if(u===null)return null;if(u=u.shared,(pt&2)!==0){var x=u.pending;return x===null?i.next=i:(i.next=x.next,x.next=i),u.pending=i,i=Jo(n),Kg(n,null,l),i}return Wo(n,u,i,l),Jo(n)}function wl(n,i,l){if(i=i.updateQueue,i!==null&&(i=i.shared,(l&4194048)!==0)){var u=i.lanes;u&=n.pendingLanes,l|=u,i.lanes=l,Ue(n,l)}}function Fd(n,i){var l=n.updateQueue,u=n.alternate;if(u!==null&&(u=u.updateQueue,l===u)){var x=null,v=null;if(l=l.firstBaseUpdate,l!==null){do{var A={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};v===null?x=v=A:v=v.next=A,l=l.next}while(l!==null);v===null?x=v=i:v=v.next=i}else x=v=i;l={baseState:u.baseState,firstBaseUpdate:x,lastBaseUpdate:v,shared:u.shared,callbacks:u.callbacks},n.updateQueue=l;return}n=l.lastBaseUpdate,n===null?l.firstBaseUpdate=i:n.next=i,l.lastBaseUpdate=i}var Gd=!1;function El(){if(Gd){var n=gs;if(n!==null)throw n}}function Nl(n,i,l,u){Gd=!1;var x=n.updateQueue;Ui=!1;var v=x.firstBaseUpdate,A=x.lastBaseUpdate,F=x.shared.pending;if(F!==null){x.shared.pending=null;var ne=F,le=ne.next;ne.next=null,A===null?v=le:A.next=le,A=ne;var he=n.alternate;he!==null&&(he=he.updateQueue,F=he.lastBaseUpdate,F!==A&&(F===null?he.firstBaseUpdate=le:F.next=le,he.lastBaseUpdate=ne))}if(v!==null){var ge=x.baseState;A=0,he=le=ne=null,F=v;do{var oe=F.lane&-536870913,de=oe!==F.lane;if(de?(it&oe)===oe:(u&oe)===oe){oe!==0&&oe===ps&&(Gd=!0),he!==null&&(he=he.next={lane:0,tag:F.tag,payload:F.payload,callback:null,next:null});e:{var Ae=n,He=F;oe=i;var Nt=l;switch(He.tag){case 1:if(Ae=He.payload,typeof Ae=="function"){ge=Ae.call(Nt,ge,oe);break e}ge=Ae;break e;case 3:Ae.flags=Ae.flags&-65537|128;case 0:if(Ae=He.payload,oe=typeof Ae=="function"?Ae.call(Nt,ge,oe):Ae,oe==null)break e;ge=g({},ge,oe);break e;case 2:Ui=!0}}oe=F.callback,oe!==null&&(n.flags|=64,de&&(n.flags|=8192),de=x.callbacks,de===null?x.callbacks=[oe]:de.push(oe))}else de={lane:oe,tag:F.tag,payload:F.payload,callback:F.callback,next:null},he===null?(le=he=de,ne=ge):he=he.next=de,A|=oe;if(F=F.next,F===null){if(F=x.shared.pending,F===null)break;de=F,F=de.next,de.next=null,x.lastBaseUpdate=de,x.shared.pending=null}}while(!0);he===null&&(ne=ge),x.baseState=ne,x.firstBaseUpdate=le,x.lastBaseUpdate=he,v===null&&(x.shared.lanes=0),Vi|=A,n.lanes=A,n.memoizedState=ge}}function hx(n,i){if(typeof n!="function")throw Error(a(191,n));n.call(i)}function mx(n,i){var l=n.callbacks;if(l!==null)for(n.callbacks=null,n=0;nv?v:8;var A=O.T,F={};O.T=F,df(n,!1,i,l);try{var ne=x(),le=O.S;if(le!==null&&le(F,ne),ne!==null&&typeof ne=="object"&&typeof ne.then=="function"){var he=bS(ne,u);Cl(n,i,he,tr(n))}else Cl(n,i,u,tr(n))}catch(ge){Cl(n,i,{then:function(){},status:"rejected",reason:ge},tr())}finally{H.p=v,A!==null&&F.types!==null&&(A.types=F.types),O.T=A}}function NS(){}function cf(n,i,l,u){if(n.tag!==5)throw Error(a(476));var x=Vx(n).queue;Gx(n,x,i,K,l===null?NS:function(){return Yx(n),l(u)})}function Vx(n){var i=n.memoizedState;if(i!==null)return i;i={memoizedState:K,baseState:K,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:li,lastRenderedState:K},next:null};var l={};return i.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:li,lastRenderedState:l},next:null},n.memoizedState=i,n=n.alternate,n!==null&&(n.memoizedState=i),i}function Yx(n){var i=Vx(n);i.next===null&&(i=n.alternate.memoizedState),Cl(n,i.next.queue,{},tr())}function uf(){return vn(Fl)}function Xx(){return Wt().memoizedState}function Kx(){return Wt().memoizedState}function SS(n){for(var i=n.return;i!==null;){switch(i.tag){case 24:case 3:var l=tr();n=Hi(l);var u=$i(i,n,l);u!==null&&(Pn(u,i,l),wl(u,i,l)),i={cache:Bd()},n.payload=i;return}i=i.return}}function kS(n,i,l){var u=tr();l={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},bc(n)?Qx(i,l):(l=Cd(n,i,l,u),l!==null&&(Pn(l,n,u),Wx(l,i,u)))}function Zx(n,i,l){var u=tr();Cl(n,i,l,u)}function Cl(n,i,l,u){var x={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(bc(n))Qx(i,x);else{var v=n.alternate;if(n.lanes===0&&(v===null||v.lanes===0)&&(v=i.lastRenderedReducer,v!==null))try{var A=i.lastRenderedState,F=v(A,l);if(x.hasEagerState=!0,x.eagerState=F,Kn(F,A))return Wo(n,i,x,0),kt===null&&Qo(),!1}catch{}finally{}if(l=Cd(n,i,x,u),l!==null)return Pn(l,n,u),Wx(l,i,u),!0}return!1}function df(n,i,l,u){if(u={lane:2,revertLane:Pf(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},bc(n)){if(i)throw Error(a(479))}else i=Cd(n,l,u,2),i!==null&&Pn(i,n,2)}function bc(n){var i=n.alternate;return n===Xe||i!==null&&i===Xe}function Qx(n,i){vs=dc=!0;var l=n.pending;l===null?i.next=i:(i.next=l.next,l.next=i),n.pending=i}function Wx(n,i,l){if((l&4194048)!==0){var u=i.lanes;u&=n.pendingLanes,l|=u,i.lanes=l,Ue(n,l)}}var Tl={readContext:vn,use:mc,useCallback:Gt,useContext:Gt,useEffect:Gt,useImperativeHandle:Gt,useLayoutEffect:Gt,useInsertionEffect:Gt,useMemo:Gt,useReducer:Gt,useRef:Gt,useState:Gt,useDebugValue:Gt,useDeferredValue:Gt,useTransition:Gt,useSyncExternalStore:Gt,useId:Gt,useHostTransitionStatus:Gt,useFormState:Gt,useActionState:Gt,useOptimistic:Gt,useMemoCache:Gt,useCacheRefresh:Gt};Tl.useEffectEvent=Gt;var Jx={readContext:vn,use:mc,useCallback:function(n,i){return Dn().memoizedState=[n,i===void 0?null:i],n},useContext:vn,useEffect:zx,useImperativeHandle:function(n,i,l){l=l!=null?l.concat([n]):null,gc(4194308,4,Hx.bind(null,i,n),l)},useLayoutEffect:function(n,i){return gc(4194308,4,n,i)},useInsertionEffect:function(n,i){gc(4,2,n,i)},useMemo:function(n,i){var l=Dn();i=i===void 0?null:i;var u=n();if(Ra){Jt(!0);try{n()}finally{Jt(!1)}}return l.memoizedState=[u,i],u},useReducer:function(n,i,l){var u=Dn();if(l!==void 0){var x=l(i);if(Ra){Jt(!0);try{l(i)}finally{Jt(!1)}}}else x=i;return u.memoizedState=u.baseState=x,n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:n,lastRenderedState:x},u.queue=n,n=n.dispatch=kS.bind(null,Xe,n),[u.memoizedState,n]},useRef:function(n){var i=Dn();return n={current:n},i.memoizedState=n},useState:function(n){n=rf(n);var i=n.queue,l=Zx.bind(null,Xe,i);return i.dispatch=l,[n.memoizedState,l]},useDebugValue:lf,useDeferredValue:function(n,i){var l=Dn();return of(l,n,i)},useTransition:function(){var n=rf(!1);return n=Gx.bind(null,Xe,n.queue,!0,!1),Dn().memoizedState=n,[!1,n]},useSyncExternalStore:function(n,i,l){var u=Xe,x=Dn();if(lt){if(l===void 0)throw Error(a(407));l=l()}else{if(l=i(),kt===null)throw Error(a(349));(it&127)!==0||vx(u,i,l)}x.memoizedState=l;var v={value:l,getSnapshot:i};return x.queue=v,zx(wx.bind(null,u,v,n),[n]),u.flags|=2048,ws(9,{destroy:void 0},_x.bind(null,u,v,l,i),null),l},useId:function(){var n=Dn(),i=kt.identifierPrefix;if(lt){var l=$r,u=Hr;l=(u&~(1<<32-ut(u)-1)).toString(32)+l,i="_"+i+"R_"+l,l=fc++,0<\/script>",v=v.removeChild(v.firstChild);break;case"select":v=typeof u.is=="string"?A.createElement("select",{is:u.is}):A.createElement("select"),u.multiple?v.multiple=!0:u.size&&(v.size=u.size);break;default:v=typeof u.is=="string"?A.createElement(x,{is:u.is}):A.createElement(x)}}v[Ut]=i,v[pn]=u;e:for(A=i.child;A!==null;){if(A.tag===5||A.tag===6)v.appendChild(A.stateNode);else if(A.tag!==4&&A.tag!==27&&A.child!==null){A.child.return=A,A=A.child;continue}if(A===i)break e;for(;A.sibling===null;){if(A.return===null||A.return===i)break e;A=A.return}A.sibling.return=A.return,A=A.sibling}i.stateNode=v;e:switch(wn(v,x,u),x){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&ci(i)}}return Dt(i),Sf(i,i.type,n===null?null:n.memoizedProps,i.pendingProps,l),null;case 6:if(n&&i.stateNode!=null)n.memoizedProps!==u&&ci(i);else{if(typeof u!="string"&&i.stateNode===null)throw Error(a(166));if(n=Q.current,hs(i)){if(n=i.stateNode,l=i.memoizedProps,u=null,x=yn,x!==null)switch(x.tag){case 27:case 5:u=x.memoizedProps}n[Ut]=i,n=!!(n.nodeValue===l||u!==null&&u.suppressHydrationWarning===!0||b0(n.nodeValue,l)),n||Ii(i,!0)}else n=Bc(n).createTextNode(u),n[Ut]=i,i.stateNode=n}return Dt(i),null;case 31:if(l=i.memoizedState,n===null||n.memoizedState!==null){if(u=hs(i),l!==null){if(n===null){if(!u)throw Error(a(318));if(n=i.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(a(557));n[Ut]=i}else Sa(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;Dt(i),n=!1}else l=Dd(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=l),n=!0;if(!n)return i.flags&256?(Wn(i),i):(Wn(i),null);if((i.flags&128)!==0)throw Error(a(558))}return Dt(i),null;case 13:if(u=i.memoizedState,n===null||n.memoizedState!==null&&n.memoizedState.dehydrated!==null){if(x=hs(i),u!==null&&u.dehydrated!==null){if(n===null){if(!x)throw Error(a(318));if(x=i.memoizedState,x=x!==null?x.dehydrated:null,!x)throw Error(a(317));x[Ut]=i}else Sa(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;Dt(i),x=!1}else x=Dd(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=x),x=!0;if(!x)return i.flags&256?(Wn(i),i):(Wn(i),null)}return Wn(i),(i.flags&128)!==0?(i.lanes=l,i):(l=u!==null,n=n!==null&&n.memoizedState!==null,l&&(u=i.child,x=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(x=u.alternate.memoizedState.cachePool.pool),v=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(v=u.memoizedState.cachePool.pool),v!==x&&(u.flags|=2048)),l!==n&&l&&(i.child.flags|=8192),Ec(i,i.updateQueue),Dt(i),null);case 4:return te(),n===null&&Yf(i.stateNode.containerInfo),Dt(i),null;case 10:return ai(i.type),Dt(i),null;case 19:if(Y(Qt),u=i.memoizedState,u===null)return Dt(i),null;if(x=(i.flags&128)!==0,v=u.rendering,v===null)if(x)Ml(u,!1);else{if(Vt!==0||n!==null&&(n.flags&128)!==0)for(n=i.child;n!==null;){if(v=uc(n),v!==null){for(i.flags|=128,Ml(u,!1),n=v.updateQueue,i.updateQueue=n,Ec(i,n),i.subtreeFlags=0,n=l,l=i.child;l!==null;)Zg(l,n),l=l.sibling;return L(Qt,Qt.current&1|2),lt&&ri(i,u.treeForkCount),i.child}n=n.sibling}u.tail!==null&&ct()>Tc&&(i.flags|=128,x=!0,Ml(u,!1),i.lanes=4194304)}else{if(!x)if(n=uc(v),n!==null){if(i.flags|=128,x=!0,n=n.updateQueue,i.updateQueue=n,Ec(i,n),Ml(u,!0),u.tail===null&&u.tailMode==="hidden"&&!v.alternate&&!lt)return Dt(i),null}else 2*ct()-u.renderingStartTime>Tc&&l!==536870912&&(i.flags|=128,x=!0,Ml(u,!1),i.lanes=4194304);u.isBackwards?(v.sibling=i.child,i.child=v):(n=u.last,n!==null?n.sibling=v:i.child=v,u.last=v)}return u.tail!==null?(n=u.tail,u.rendering=n,u.tail=n.sibling,u.renderingStartTime=ct(),n.sibling=null,l=Qt.current,L(Qt,x?l&1|2:l&1),lt&&ri(i,u.treeForkCount),n):(Dt(i),null);case 22:case 23:return Wn(i),Yd(),u=i.memoizedState!==null,n!==null?n.memoizedState!==null!==u&&(i.flags|=8192):u&&(i.flags|=8192),u?(l&536870912)!==0&&(i.flags&128)===0&&(Dt(i),i.subtreeFlags&6&&(i.flags|=8192)):Dt(i),l=i.updateQueue,l!==null&&Ec(i,l.retryQueue),l=null,n!==null&&n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(l=n.memoizedState.cachePool.pool),u=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(u=i.memoizedState.cachePool.pool),u!==l&&(i.flags|=2048),n!==null&&Y(Ta),null;case 24:return l=null,n!==null&&(l=n.memoizedState.cache),i.memoizedState.cache!==l&&(i.flags|=2048),ai(tn),Dt(i),null;case 25:return null;case 30:return null}throw Error(a(156,i.tag))}function OS(n,i){switch(Rd(i),i.tag){case 1:return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 3:return ai(tn),te(),n=i.flags,(n&65536)!==0&&(n&128)===0?(i.flags=n&-65537|128,i):null;case 26:case 27:case 5:return fe(i),null;case 31:if(i.memoizedState!==null){if(Wn(i),i.alternate===null)throw Error(a(340));Sa()}return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 13:if(Wn(i),n=i.memoizedState,n!==null&&n.dehydrated!==null){if(i.alternate===null)throw Error(a(340));Sa()}return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 19:return Y(Qt),null;case 4:return te(),null;case 10:return ai(i.type),null;case 22:case 23:return Wn(i),Yd(),n!==null&&Y(Ta),n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 24:return ai(tn),null;case 25:return null;default:return null}}function Eb(n,i){switch(Rd(i),i.tag){case 3:ai(tn),te();break;case 26:case 27:case 5:fe(i);break;case 4:te();break;case 31:i.memoizedState!==null&&Wn(i);break;case 13:Wn(i);break;case 19:Y(Qt);break;case 10:ai(i.type);break;case 22:case 23:Wn(i),Yd(),n!==null&&Y(Ta);break;case 24:ai(tn)}}function Ol(n,i){try{var l=i.updateQueue,u=l!==null?l.lastEffect:null;if(u!==null){var x=u.next;l=x;do{if((l.tag&n)===n){u=void 0;var v=l.create,A=l.inst;u=v(),A.destroy=u}l=l.next}while(l!==x)}}catch(F){yt(i,i.return,F)}}function Fi(n,i,l){try{var u=i.updateQueue,x=u!==null?u.lastEffect:null;if(x!==null){var v=x.next;u=v;do{if((u.tag&n)===n){var A=u.inst,F=A.destroy;if(F!==void 0){A.destroy=void 0,x=i;var ne=l,le=F;try{le()}catch(he){yt(x,ne,he)}}}u=u.next}while(u!==v)}}catch(he){yt(i,i.return,he)}}function Nb(n){var i=n.updateQueue;if(i!==null){var l=n.stateNode;try{mx(i,l)}catch(u){yt(n,n.return,u)}}}function Sb(n,i,l){l.props=ja(n.type,n.memoizedProps),l.state=n.memoizedState;try{l.componentWillUnmount()}catch(u){yt(n,i,u)}}function Rl(n,i){try{var l=n.ref;if(l!==null){switch(n.tag){case 26:case 27:case 5:var u=n.stateNode;break;case 30:u=n.stateNode;break;default:u=n.stateNode}typeof l=="function"?n.refCleanup=l(u):l.current=u}}catch(x){yt(n,i,x)}}function qr(n,i){var l=n.ref,u=n.refCleanup;if(l!==null)if(typeof u=="function")try{u()}catch(x){yt(n,i,x)}finally{n.refCleanup=null,n=n.alternate,n!=null&&(n.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(x){yt(n,i,x)}else l.current=null}function kb(n){var i=n.type,l=n.memoizedProps,u=n.stateNode;try{e:switch(i){case"button":case"input":case"select":case"textarea":l.autoFocus&&u.focus();break e;case"img":l.src?u.src=l.src:l.srcSet&&(u.srcset=l.srcSet)}}catch(x){yt(n,n.return,x)}}function kf(n,i,l){try{var u=n.stateNode;JS(u,n.type,l,i),u[pn]=i}catch(x){yt(n,n.return,x)}}function Cb(n){return n.tag===5||n.tag===3||n.tag===26||n.tag===27&&Qi(n.type)||n.tag===4}function Cf(n){e:for(;;){for(;n.sibling===null;){if(n.return===null||Cb(n.return))return null;n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.tag===27&&Qi(n.type)||n.flags&2||n.child===null||n.tag===4)continue e;n.child.return=n,n=n.child}if(!(n.flags&2))return n.stateNode}}function Tf(n,i,l){var u=n.tag;if(u===5||u===6)n=n.stateNode,i?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(n,i):(i=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,i.appendChild(n),l=l._reactRootContainer,l!=null||i.onclick!==null||(i.onclick=_e));else if(u!==4&&(u===27&&Qi(n.type)&&(l=n.stateNode,i=null),n=n.child,n!==null))for(Tf(n,i,l),n=n.sibling;n!==null;)Tf(n,i,l),n=n.sibling}function Nc(n,i,l){var u=n.tag;if(u===5||u===6)n=n.stateNode,i?l.insertBefore(n,i):l.appendChild(n);else if(u!==4&&(u===27&&Qi(n.type)&&(l=n.stateNode),n=n.child,n!==null))for(Nc(n,i,l),n=n.sibling;n!==null;)Nc(n,i,l),n=n.sibling}function Tb(n){var i=n.stateNode,l=n.memoizedProps;try{for(var u=n.type,x=i.attributes;x.length;)i.removeAttributeNode(x[0]);wn(i,u,l),i[Ut]=n,i[pn]=l}catch(v){yt(n,n.return,v)}}var ui=!1,an=!1,Af=!1,Ab=typeof WeakSet=="function"?WeakSet:Set,xn=null;function RS(n,i){if(n=n.containerInfo,Zf=Gc,n=$g(n),_d(n)){if("selectionStart"in n)var l={start:n.selectionStart,end:n.selectionEnd};else e:{l=(l=n.ownerDocument)&&l.defaultView||window;var u=l.getSelection&&l.getSelection();if(u&&u.rangeCount!==0){l=u.anchorNode;var x=u.anchorOffset,v=u.focusNode;u=u.focusOffset;try{l.nodeType,v.nodeType}catch{l=null;break e}var A=0,F=-1,ne=-1,le=0,he=0,ge=n,oe=null;t:for(;;){for(var de;ge!==l||x!==0&&ge.nodeType!==3||(F=A+x),ge!==v||u!==0&&ge.nodeType!==3||(ne=A+u),ge.nodeType===3&&(A+=ge.nodeValue.length),(de=ge.firstChild)!==null;)oe=ge,ge=de;for(;;){if(ge===n)break t;if(oe===l&&++le===x&&(F=A),oe===v&&++he===u&&(ne=A),(de=ge.nextSibling)!==null)break;ge=oe,oe=ge.parentNode}ge=de}l=F===-1||ne===-1?null:{start:F,end:ne}}else l=null}l=l||{start:0,end:0}}else l=null;for(Qf={focusedElem:n,selectionRange:l},Gc=!1,xn=i;xn!==null;)if(i=xn,n=i.child,(i.subtreeFlags&1028)!==0&&n!==null)n.return=i,xn=n;else for(;xn!==null;){switch(i=xn,v=i.alternate,n=i.flags,i.tag){case 0:if((n&4)!==0&&(n=i.updateQueue,n=n!==null?n.events:null,n!==null))for(l=0;l title"))),wn(v,u,l),v[Ut]=n,Ft(v),u=v;break e;case"link":var A=L0("link","href",x).get(u+(l.href||""));if(A){for(var F=0;FNt&&(A=Nt,Nt=He,He=A);var ae=Ug(F,He),ie=Ug(F,Nt);if(ae&&ie&&(de.rangeCount!==1||de.anchorNode!==ae.node||de.anchorOffset!==ae.offset||de.focusNode!==ie.node||de.focusOffset!==ie.offset)){var se=ge.createRange();se.setStart(ae.node,ae.offset),de.removeAllRanges(),He>Nt?(de.addRange(se),de.extend(ie.node,ie.offset)):(se.setEnd(ie.node,ie.offset),de.addRange(se))}}}}for(ge=[],de=F;de=de.parentNode;)de.nodeType===1&&ge.push({element:de,left:de.scrollLeft,top:de.scrollTop});for(typeof F.focus=="function"&&F.focus(),F=0;Fl?32:l,O.T=null,l=zf,zf=null;var v=Xi,A=pi;if(fn=0,Cs=Xi=null,pi=0,(pt&6)!==0)throw Error(a(331));var F=pt;if(pt|=4,Hb(v.current),Ib(v,v.current,A,l),pt=F,Bl(0,!1),At&&typeof At.onPostCommitFiberRoot=="function")try{At.onPostCommitFiberRoot(Zt,v)}catch{}return!0}finally{H.p=x,O.T=u,i0(n,i)}}function s0(n,i,l){i=ur(l,i),i=pf(n.stateNode,i,2),n=$i(n,i,2),n!==null&&(gt(n,2),Pr(n))}function yt(n,i,l){if(n.tag===3)s0(n,n,l);else for(;i!==null;){if(i.tag===3){s0(i,n,l);break}else if(i.tag===1){var u=i.stateNode;if(typeof i.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(Yi===null||!Yi.has(u))){n=ur(l,n),l=lb(2),u=$i(i,l,2),u!==null&&(ob(l,u,i,n),gt(u,2),Pr(u));break}}i=i.return}}function Hf(n,i,l){var u=n.pingCache;if(u===null){u=n.pingCache=new LS;var x=new Set;u.set(i,x)}else x=u.get(i),x===void 0&&(x=new Set,u.set(i,x));x.has(l)||(Rf=!0,x.add(l),n=HS.bind(null,n,i,l),i.then(n,n))}function HS(n,i,l){var u=n.pingCache;u!==null&&u.delete(i),n.pingedLanes|=n.suspendedLanes&l,n.warmLanes&=~l,kt===n&&(it&l)===l&&(Vt===4||Vt===3&&(it&62914560)===it&&300>ct()-Cc?(pt&2)===0&&Ts(n,0):jf|=l,ks===it&&(ks=0)),Pr(n)}function l0(n,i){i===0&&(i=Pe()),n=Ea(n,i),n!==null&&(gt(n,i),Pr(n))}function $S(n){var i=n.memoizedState,l=0;i!==null&&(l=i.retryLane),l0(n,l)}function qS(n,i){var l=0;switch(n.tag){case 31:case 13:var u=n.stateNode,x=n.memoizedState;x!==null&&(l=x.retryLane);break;case 19:u=n.stateNode;break;case 22:u=n.stateNode._retryCache;break;default:throw Error(a(314))}u!==null&&u.delete(i),l0(n,l)}function PS(n,i){return Pt(n,i)}var Dc=null,Ms=null,$f=!1,Lc=!1,qf=!1,Zi=0;function Pr(n){n!==Ms&&n.next===null&&(Ms===null?Dc=Ms=n:Ms=Ms.next=n),Lc=!0,$f||($f=!0,GS())}function Bl(n,i){if(!qf&&Lc){qf=!0;do for(var l=!1,u=Dc;u!==null;){if(n!==0){var x=u.pendingLanes;if(x===0)var v=0;else{var A=u.suspendedLanes,F=u.pingedLanes;v=(1<<31-ut(42|n)+1)-1,v&=x&~(A&~F),v=v&201326741?v&201326741|1:v?v|2:0}v!==0&&(l=!0,d0(u,v))}else v=it,v=re(u,u===kt?v:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(v&3)===0||me(u,v)||(l=!0,d0(u,v));u=u.next}while(l);qf=!1}}function FS(){o0()}function o0(){Lc=$f=!1;var n=0;Zi!==0&&tk()&&(n=Zi);for(var i=ct(),l=null,u=Dc;u!==null;){var x=u.next,v=c0(u,i);v===0?(u.next=null,l===null?Dc=x:l.next=x,x===null&&(Ms=l)):(l=u,(n!==0||(v&3)!==0)&&(Lc=!0)),u=x}fn!==0&&fn!==5||Bl(n),Zi!==0&&(Zi=0)}function c0(n,i){for(var l=n.suspendedLanes,u=n.pingedLanes,x=n.expirationTimes,v=n.pendingLanes&-62914561;0F)break;var he=ne.transferSize,ge=ne.initiatorType;he&&y0(ge)&&(ne=ne.responseEnd,A+=he*(ne"u"?null:document;function O0(n,i,l){var u=Os;if(u&&typeof i=="string"&&i){var x=Cn(i);x='link[rel="'+n+'"][href="'+x+'"]',typeof l=="string"&&(x+='[crossorigin="'+l+'"]'),M0.has(x)||(M0.add(x),n={rel:n,crossOrigin:l,href:i},u.querySelector(x)===null&&(i=u.createElement("link"),wn(i,"link",n),Ft(i),u.head.appendChild(i)))}}function uk(n){gi.D(n),O0("dns-prefetch",n,null)}function dk(n,i){gi.C(n,i),O0("preconnect",n,i)}function fk(n,i,l){gi.L(n,i,l);var u=Os;if(u&&n&&i){var x='link[rel="preload"][as="'+Cn(i)+'"]';i==="image"&&l&&l.imageSrcSet?(x+='[imagesrcset="'+Cn(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(x+='[imagesizes="'+Cn(l.imageSizes)+'"]')):x+='[href="'+Cn(n)+'"]';var v=x;switch(i){case"style":v=Rs(n);break;case"script":v=js(n)}gr.has(v)||(n=g({rel:"preload",href:i==="image"&&l&&l.imageSrcSet?void 0:n,as:i},l),gr.set(v,n),u.querySelector(x)!==null||i==="style"&&u.querySelector(ql(v))||i==="script"&&u.querySelector(Pl(v))||(i=u.createElement("link"),wn(i,"link",n),Ft(i),u.head.appendChild(i)))}}function hk(n,i){gi.m(n,i);var l=Os;if(l&&n){var u=i&&typeof i.as=="string"?i.as:"script",x='link[rel="modulepreload"][as="'+Cn(u)+'"][href="'+Cn(n)+'"]',v=x;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":v=js(n)}if(!gr.has(v)&&(n=g({rel:"modulepreload",href:n},i),gr.set(v,n),l.querySelector(x)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(Pl(v)))return}u=l.createElement("link"),wn(u,"link",n),Ft(u),l.head.appendChild(u)}}}function mk(n,i,l){gi.S(n,i,l);var u=Os;if(u&&n){var x=Br(u).hoistableStyles,v=Rs(n);i=i||"default";var A=x.get(v);if(!A){var F={loading:0,preload:null};if(A=u.querySelector(ql(v)))F.loading=5;else{n=g({rel:"stylesheet",href:n,"data-precedence":i},l),(l=gr.get(v))&&ih(n,l);var ne=A=u.createElement("link");Ft(ne),wn(ne,"link",n),ne._p=new Promise(function(le,he){ne.onload=le,ne.onerror=he}),ne.addEventListener("load",function(){F.loading|=1}),ne.addEventListener("error",function(){F.loading|=2}),F.loading|=4,Hc(A,i,u)}A={type:"stylesheet",instance:A,count:1,state:F},x.set(v,A)}}}function pk(n,i){gi.X(n,i);var l=Os;if(l&&n){var u=Br(l).hoistableScripts,x=js(n),v=u.get(x);v||(v=l.querySelector(Pl(x)),v||(n=g({src:n,async:!0},i),(i=gr.get(x))&&ah(n,i),v=l.createElement("script"),Ft(v),wn(v,"link",n),l.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(x,v))}}function gk(n,i){gi.M(n,i);var l=Os;if(l&&n){var u=Br(l).hoistableScripts,x=js(n),v=u.get(x);v||(v=l.querySelector(Pl(x)),v||(n=g({src:n,async:!0,type:"module"},i),(i=gr.get(x))&&ah(n,i),v=l.createElement("script"),Ft(v),wn(v,"link",n),l.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(x,v))}}function R0(n,i,l,u){var x=(x=Q.current)?Uc(x):null;if(!x)throw Error(a(446));switch(n){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(i=Rs(l.href),l=Br(x).hoistableStyles,u=l.get(i),u||(u={type:"style",instance:null,count:0,state:null},l.set(i,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){n=Rs(l.href);var v=Br(x).hoistableStyles,A=v.get(n);if(A||(x=x.ownerDocument||x,A={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},v.set(n,A),(v=x.querySelector(ql(n)))&&!v._p&&(A.instance=v,A.state.loading=5),gr.has(n)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},gr.set(n,l),v||xk(x,n,l,A.state))),i&&u===null)throw Error(a(528,""));return A}if(i&&u!==null)throw Error(a(529,""));return null;case"script":return i=l.async,l=l.src,typeof l=="string"&&i&&typeof i!="function"&&typeof i!="symbol"?(i=js(l),l=Br(x).hoistableScripts,u=l.get(i),u||(u={type:"script",instance:null,count:0,state:null},l.set(i,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(a(444,n))}}function Rs(n){return'href="'+Cn(n)+'"'}function ql(n){return'link[rel="stylesheet"]['+n+"]"}function j0(n){return g({},n,{"data-precedence":n.precedence,precedence:null})}function xk(n,i,l,u){n.querySelector('link[rel="preload"][as="style"]['+i+"]")?u.loading=1:(i=n.createElement("link"),u.preload=i,i.addEventListener("load",function(){return u.loading|=1}),i.addEventListener("error",function(){return u.loading|=2}),wn(i,"link",l),Ft(i),n.head.appendChild(i))}function js(n){return'[src="'+Cn(n)+'"]'}function Pl(n){return"script[async]"+n}function D0(n,i,l){if(i.count++,i.instance===null)switch(i.type){case"style":var u=n.querySelector('style[data-href~="'+Cn(l.href)+'"]');if(u)return i.instance=u,Ft(u),u;var x=g({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return u=(n.ownerDocument||n).createElement("style"),Ft(u),wn(u,"style",x),Hc(u,l.precedence,n),i.instance=u;case"stylesheet":x=Rs(l.href);var v=n.querySelector(ql(x));if(v)return i.state.loading|=4,i.instance=v,Ft(v),v;u=j0(l),(x=gr.get(x))&&ih(u,x),v=(n.ownerDocument||n).createElement("link"),Ft(v);var A=v;return A._p=new Promise(function(F,ne){A.onload=F,A.onerror=ne}),wn(v,"link",u),i.state.loading|=4,Hc(v,l.precedence,n),i.instance=v;case"script":return v=js(l.src),(x=n.querySelector(Pl(v)))?(i.instance=x,Ft(x),x):(u=l,(x=gr.get(v))&&(u=g({},l),ah(u,x)),n=n.ownerDocument||n,x=n.createElement("script"),Ft(x),wn(x,"link",u),n.head.appendChild(x),i.instance=x);case"void":return null;default:throw Error(a(443,i.type))}else i.type==="stylesheet"&&(i.state.loading&4)===0&&(u=i.instance,i.state.loading|=4,Hc(u,l.precedence,n));return i.instance}function Hc(n,i,l){for(var u=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),x=u.length?u[u.length-1]:null,v=x,A=0;A title"):null)}function bk(n,i,l){if(l===1||i.itemProp!=null)return!1;switch(n){case"meta":case"title":return!0;case"style":if(typeof i.precedence!="string"||typeof i.href!="string"||i.href==="")break;return!0;case"link":if(typeof i.rel!="string"||typeof i.href!="string"||i.href===""||i.onLoad||i.onError)break;switch(i.rel){case"stylesheet":return n=i.disabled,typeof i.precedence=="string"&&n==null;default:return!0}case"script":if(i.async&&typeof i.async!="function"&&typeof i.async!="symbol"&&!i.onLoad&&!i.onError&&i.src&&typeof i.src=="string")return!0}return!1}function I0(n){return!(n.type==="stylesheet"&&(n.state.loading&3)===0)}function yk(n,i,l,u){if(l.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var x=Rs(u.href),v=i.querySelector(ql(x));if(v){i=v._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(n.count++,n=qc.bind(n),i.then(n,n)),l.state.loading|=4,l.instance=v,Ft(v);return}v=i.ownerDocument||i,u=j0(u),(x=gr.get(x))&&ih(u,x),v=v.createElement("link"),Ft(v);var A=v;A._p=new Promise(function(F,ne){A.onload=F,A.onerror=ne}),wn(v,"link",u),l.instance=v}n.stylesheets===null&&(n.stylesheets=new Map),n.stylesheets.set(l,i),(i=l.state.preload)&&(l.state.loading&3)===0&&(n.count++,l=qc.bind(n),i.addEventListener("load",l),i.addEventListener("error",l))}}var sh=0;function vk(n,i){return n.stylesheets&&n.count===0&&Fc(n,n.stylesheets),0sh?50:800)+i);return n.unsuspend=l,function(){n.unsuspend=null,clearTimeout(u),clearTimeout(x)}}:null}function qc(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Fc(this,this.stylesheets);else if(this.unsuspend){var n=this.unsuspend;this.unsuspend=null,n()}}}var Pc=null;function Fc(n,i){n.stylesheets=null,n.unsuspend!==null&&(n.count++,Pc=new Map,i.forEach(_k,n),Pc=null,qc.call(n))}function _k(n,i){if(!(i.state.loading&4)){var l=Pc.get(n);if(l)var u=l.get(null);else{l=new Map,Pc.set(n,l);for(var x=n.querySelectorAll("link[data-precedence],style[data-precedence]"),v=0;v"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),ph.exports=zk(),ph.exports}var Bk=Ik();/** +`+u.stack}}var Xt=Object.prototype.hasOwnProperty,Pt=e.unstable_scheduleCallback,Kt=e.unstable_cancelCallback,Yn=e.unstable_shouldYield,Nn=e.unstable_requestPaint,ct=e.unstable_now,It=e.unstable_getCurrentPriorityLevel,ue=e.unstable_ImmediatePriority,be=e.unstable_UserBlockingPriority,Oe=e.unstable_NormalPriority,Fe=e.unstable_LowPriority,Ze=e.unstable_IdlePriority,cn=e.log,Sn=e.unstable_setDisableYieldValue,Zt=null,At=null;function Jt(n){if(typeof cn=="function"&&Sn(n),At&&typeof At.setStrictMode=="function")try{At.setStrictMode(Zt,n)}catch{}}var ut=Math.clz32?Math.clz32:Ni,In=Math.log,un=Math.LN2;function Ni(n){return n>>>=0,n===0?32:31-(In(n)/un|0)|0}var nt=256,Xn=262144,On=4194304;function mn(n){var i=n&42;if(i!==0)return i;switch(n&-n){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return n&261888;case 262144:case 524288:case 1048576:case 2097152:return n&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return n&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return n}}function re(n,i,l){var u=n.pendingLanes;if(u===0)return 0;var x=0,v=n.suspendedLanes,T=n.pingedLanes;n=n.warmLanes;var G=u&134217727;return G!==0?(u=G&~v,u!==0?x=mn(u):(T&=G,T!==0?x=mn(T):l||(l=G&~n,l!==0&&(x=mn(l))))):(G=u&~v,G!==0?x=mn(G):T!==0?x=mn(T):l||(l=u&~n,l!==0&&(x=mn(l)))),x===0?0:i!==0&&i!==x&&(i&v)===0&&(v=x&-x,l=i&-i,v>=l||v===32&&(l&4194048)!==0)?i:x}function me(n,i){return(n.pendingLanes&~(n.suspendedLanes&~n.pingedLanes)&i)===0}function Ee(n,i){switch(n){case 1:case 2:case 4:case 8:case 64:return i+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return i+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Pe(){var n=On;return On<<=1,(On&62914560)===0&&(On=4194304),n}function St(n){for(var i=[],l=0;31>l;l++)i.push(n);return i}function gt(n,i){n.pendingLanes|=i,i!==268435456&&(n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0)}function Me(n,i,l,u,x,v){var T=n.pendingLanes;n.pendingLanes=l,n.suspendedLanes=0,n.pingedLanes=0,n.warmLanes=0,n.expiredLanes&=l,n.entangledLanes&=l,n.errorRecoveryDisabledLanes&=l,n.shellSuspendCounter=0;var G=n.entanglements,ne=n.expirationTimes,le=n.hiddenUpdates;for(l=T&~l;0"u")return null;try{return n.activeElement||n.body}catch{return n.body}}var is=/[\n"\\]/g;function Cn(n){return n.replace(is,function(i){return"\\"+i.charCodeAt(0).toString(16)+" "})}function ba(n,i,l,u,x,v,T,G){n.name="",T!=null&&typeof T!="function"&&typeof T!="symbol"&&typeof T!="boolean"?n.type=T:n.removeAttribute("type"),i!=null?T==="number"?(i===0&&n.value===""||n.value!=i)&&(n.value=""+_t(i)):n.value!==""+_t(i)&&(n.value=""+_t(i)):T!=="submit"&&T!=="reset"||n.removeAttribute("value"),i!=null?Oi(n,T,_t(i)):l!=null?Oi(n,T,_t(l)):u!=null&&n.removeAttribute("value"),x==null&&v!=null&&(n.defaultChecked=!!v),x!=null&&(n.checked=x&&typeof x!="function"&&typeof x!="symbol"),G!=null&&typeof G!="function"&&typeof G!="symbol"&&typeof G!="boolean"?n.name=""+_t(G):n.removeAttribute("name")}function Nr(n,i,l,u,x,v,T,G){if(v!=null&&typeof v!="function"&&typeof v!="symbol"&&typeof v!="boolean"&&(n.type=v),i!=null||l!=null){if(!(v!=="submit"&&v!=="reset"||i!=null)){Ai(n);return}l=l!=null?""+_t(l):"",i=i!=null?""+_t(i):l,G||i===n.value||(n.value=i),n.defaultValue=i}u=u??x,u=typeof u!="function"&&typeof u!="symbol"&&!!u,n.checked=G?n.checked:!!u,n.defaultChecked=!!u,T!=null&&typeof T!="function"&&typeof T!="symbol"&&typeof T!="boolean"&&(n.name=T),Ai(n)}function Oi(n,i,l){i==="number"&&Mi(n.ownerDocument)===n||n.defaultValue===""+l||(n.defaultValue=""+l)}function dn(n,i,l,u){if(n=n.options,i){i={};for(var x=0;x"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),dd=!1;if(ti)try{var ol={};Object.defineProperty(ol,"passive",{get:function(){dd=!0}}),window.addEventListener("test",ol,ol),window.removeEventListener("test",ol,ol)}catch{dd=!1}var Di=null,fd=null,Fo=null;function _g(){if(Fo)return Fo;var n,i=fd,l=i.length,u,x="value"in Di?Di.value:Di.textContent,v=x.length;for(n=0;n=dl),Cg=" ",Tg=!1;function Ag(n,i){switch(n){case"keyup":return W2.indexOf(i.keyCode)!==-1;case"keydown":return i.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Mg(n){return n=n.detail,typeof n=="object"&&"data"in n?n.data:null}var ss=!1;function eS(n,i){switch(n){case"compositionend":return Mg(i);case"keypress":return i.which!==32?null:(Tg=!0,Cg);case"textInput":return n=i.data,n===Cg&&Tg?null:n;default:return null}}function tS(n,i){if(ss)return n==="compositionend"||!xd&&Ag(n,i)?(n=_g(),Fo=fd=Di=null,ss=!1,n):null;switch(n){case"paste":return null;case"keypress":if(!(i.ctrlKey||i.altKey||i.metaKey)||i.ctrlKey&&i.altKey){if(i.char&&1=i)return{node:l,offset:i-n};n=u}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=Bg(l)}}function Hg(n,i){return n&&i?n===i?!0:n&&n.nodeType===3?!1:i&&i.nodeType===3?Hg(n,i.parentNode):"contains"in n?n.contains(i):n.compareDocumentPosition?!!(n.compareDocumentPosition(i)&16):!1:!1}function $g(n){n=n!=null&&n.ownerDocument!=null&&n.ownerDocument.defaultView!=null?n.ownerDocument.defaultView:window;for(var i=Mi(n.document);i instanceof n.HTMLIFrameElement;){try{var l=typeof i.contentWindow.location.href=="string"}catch{l=!1}if(l)n=i.contentWindow;else break;i=Mi(n.document)}return i}function vd(n){var i=n&&n.nodeName&&n.nodeName.toLowerCase();return i&&(i==="input"&&(n.type==="text"||n.type==="search"||n.type==="tel"||n.type==="url"||n.type==="password")||i==="textarea"||n.contentEditable==="true")}var cS=ti&&"documentMode"in document&&11>=document.documentMode,ls=null,_d=null,pl=null,wd=!1;function qg(n,i,l){var u=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;wd||ls==null||ls!==Mi(u)||(u=ls,"selectionStart"in u&&vd(u)?u={start:u.selectionStart,end:u.selectionEnd}:(u=(u.ownerDocument&&u.ownerDocument.defaultView||window).getSelection(),u={anchorNode:u.anchorNode,anchorOffset:u.anchorOffset,focusNode:u.focusNode,focusOffset:u.focusOffset}),pl&&ml(pl,u)||(pl=u,u=Ic(_d,"onSelect"),0>=T,x-=T,Hr=1<<32-ut(i)+x|l<Ke?(at=je,je=null):at=je.sibling;var mt=ce(ae,je,se[Ke],pe);if(mt===null){je===null&&(je=at);break}n&&je&&mt.alternate===null&&i(ae,je),ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt,je=at}if(Ke===se.length)return l(ae,je),lt&&ri(ae,Ke),Ie;if(je===null){for(;KeKe?(at=je,je=null):at=je.sibling;var na=ce(ae,je,mt.value,pe);if(na===null){je===null&&(je=at);break}n&&je&&na.alternate===null&&i(ae,je),ie=v(na,ie,Ke),ht===null?Ie=na:ht.sibling=na,ht=na,je=at}if(mt.done)return l(ae,je),lt&&ri(ae,Ke),Ie;if(je===null){for(;!mt.done;Ke++,mt=se.next())mt=ge(ae,mt.value,pe),mt!==null&&(ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt);return lt&&ri(ae,Ke),Ie}for(je=u(je);!mt.done;Ke++,mt=se.next())mt=de(je,ae,Ke,mt.value,pe),mt!==null&&(n&&mt.alternate!==null&&je.delete(mt.key===null?Ke:mt.key),ie=v(mt,ie,Ke),ht===null?Ie=mt:ht.sibling=mt,ht=mt);return n&&je.forEach(function(Ak){return i(ae,Ak)}),lt&&ri(ae,Ke),Ie}function Nt(ae,ie,se,pe){if(typeof se=="object"&&se!==null&&se.type===N&&se.key===null&&(se=se.props.children),typeof se=="object"&&se!==null){switch(se.$$typeof){case y:e:{for(var Ie=se.key;ie!==null;){if(ie.key===Ie){if(Ie=se.type,Ie===N){if(ie.tag===7){l(ae,ie.sibling),pe=x(ie,se.props.children),pe.return=ae,ae=pe;break e}}else if(ie.elementType===Ie||typeof Ie=="object"&&Ie!==null&&Ie.$$typeof===z&&Aa(Ie)===ie.type){l(ae,ie.sibling),pe=x(ie,se.props),_l(pe,se),pe.return=ae,ae=pe;break e}l(ae,ie);break}else i(ae,ie);ie=ie.sibling}se.type===N?(pe=Na(se.props.children,ae.mode,pe,se.key),pe.return=ae,ae=pe):(pe=ec(se.type,se.key,se.props,null,ae.mode,pe),_l(pe,se),pe.return=ae,ae=pe)}return T(ae);case _:e:{for(Ie=se.key;ie!==null;){if(ie.key===Ie)if(ie.tag===4&&ie.stateNode.containerInfo===se.containerInfo&&ie.stateNode.implementation===se.implementation){l(ae,ie.sibling),pe=x(ie,se.children||[]),pe.return=ae,ae=pe;break e}else{l(ae,ie);break}else i(ae,ie);ie=ie.sibling}pe=Ad(se,ae.mode,pe),pe.return=ae,ae=pe}return T(ae);case z:return se=Aa(se),Nt(ae,ie,se,pe)}if($(se))return Ae(ae,ie,se,pe);if(Z(se)){if(Ie=Z(se),typeof Ie!="function")throw Error(a(150));return se=Ie.call(se),He(ae,ie,se,pe)}if(typeof se.then=="function")return Nt(ae,ie,lc(se),pe);if(se.$$typeof===E)return Nt(ae,ie,rc(ae,se),pe);oc(ae,se)}return typeof se=="string"&&se!==""||typeof se=="number"||typeof se=="bigint"?(se=""+se,ie!==null&&ie.tag===6?(l(ae,ie.sibling),pe=x(ie,se),pe.return=ae,ae=pe):(l(ae,ie),pe=Td(se,ae.mode,pe),pe.return=ae,ae=pe),T(ae)):l(ae,ie)}return function(ae,ie,se,pe){try{vl=0;var Ie=Nt(ae,ie,se,pe);return bs=null,Ie}catch(je){if(je===xs||je===ac)throw je;var ht=Zn(29,je,null,ae.mode);return ht.lanes=pe,ht.return=ae,ht}finally{}}}var Oa=dx(!0),fx=dx(!1),Ui=!1;function $d(n){n.updateQueue={baseState:n.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function qd(n,i){n=n.updateQueue,i.updateQueue===n&&(i.updateQueue={baseState:n.baseState,firstBaseUpdate:n.firstBaseUpdate,lastBaseUpdate:n.lastBaseUpdate,shared:n.shared,callbacks:null})}function Hi(n){return{lane:n,tag:0,payload:null,callback:null,next:null}}function $i(n,i,l){var u=n.updateQueue;if(u===null)return null;if(u=u.shared,(pt&2)!==0){var x=u.pending;return x===null?i.next=i:(i.next=x.next,x.next=i),u.pending=i,i=Jo(n),Kg(n,null,l),i}return Wo(n,u,i,l),Jo(n)}function wl(n,i,l){if(i=i.updateQueue,i!==null&&(i=i.shared,(l&4194048)!==0)){var u=i.lanes;u&=n.pendingLanes,l|=u,i.lanes=l,Ue(n,l)}}function Pd(n,i){var l=n.updateQueue,u=n.alternate;if(u!==null&&(u=u.updateQueue,l===u)){var x=null,v=null;if(l=l.firstBaseUpdate,l!==null){do{var T={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};v===null?x=v=T:v=v.next=T,l=l.next}while(l!==null);v===null?x=v=i:v=v.next=i}else x=v=i;l={baseState:u.baseState,firstBaseUpdate:x,lastBaseUpdate:v,shared:u.shared,callbacks:u.callbacks},n.updateQueue=l;return}n=l.lastBaseUpdate,n===null?l.firstBaseUpdate=i:n.next=i,l.lastBaseUpdate=i}var Fd=!1;function El(){if(Fd){var n=gs;if(n!==null)throw n}}function Nl(n,i,l,u){Fd=!1;var x=n.updateQueue;Ui=!1;var v=x.firstBaseUpdate,T=x.lastBaseUpdate,G=x.shared.pending;if(G!==null){x.shared.pending=null;var ne=G,le=ne.next;ne.next=null,T===null?v=le:T.next=le,T=ne;var he=n.alternate;he!==null&&(he=he.updateQueue,G=he.lastBaseUpdate,G!==T&&(G===null?he.firstBaseUpdate=le:G.next=le,he.lastBaseUpdate=ne))}if(v!==null){var ge=x.baseState;T=0,he=le=ne=null,G=v;do{var ce=G.lane&-536870913,de=ce!==G.lane;if(de?(it&ce)===ce:(u&ce)===ce){ce!==0&&ce===ps&&(Fd=!0),he!==null&&(he=he.next={lane:0,tag:G.tag,payload:G.payload,callback:null,next:null});e:{var Ae=n,He=G;ce=i;var Nt=l;switch(He.tag){case 1:if(Ae=He.payload,typeof Ae=="function"){ge=Ae.call(Nt,ge,ce);break e}ge=Ae;break e;case 3:Ae.flags=Ae.flags&-65537|128;case 0:if(Ae=He.payload,ce=typeof Ae=="function"?Ae.call(Nt,ge,ce):Ae,ce==null)break e;ge=g({},ge,ce);break e;case 2:Ui=!0}}ce=G.callback,ce!==null&&(n.flags|=64,de&&(n.flags|=8192),de=x.callbacks,de===null?x.callbacks=[ce]:de.push(ce))}else de={lane:ce,tag:G.tag,payload:G.payload,callback:G.callback,next:null},he===null?(le=he=de,ne=ge):he=he.next=de,T|=ce;if(G=G.next,G===null){if(G=x.shared.pending,G===null)break;de=G,G=de.next,de.next=null,x.lastBaseUpdate=de,x.shared.pending=null}}while(!0);he===null&&(ne=ge),x.baseState=ne,x.firstBaseUpdate=le,x.lastBaseUpdate=he,v===null&&(x.shared.lanes=0),Vi|=T,n.lanes=T,n.memoizedState=ge}}function hx(n,i){if(typeof n!="function")throw Error(a(191,n));n.call(i)}function mx(n,i){var l=n.callbacks;if(l!==null)for(n.callbacks=null,n=0;nv?v:8;var T=O.T,G={};O.T=G,uf(n,!1,i,l);try{var ne=x(),le=O.S;if(le!==null&&le(G,ne),ne!==null&&typeof ne=="object"&&typeof ne.then=="function"){var he=bS(ne,u);Cl(n,i,he,tr(n))}else Cl(n,i,u,tr(n))}catch(ge){Cl(n,i,{then:function(){},status:"rejected",reason:ge},tr())}finally{U.p=v,T!==null&&G.types!==null&&(T.types=G.types),O.T=T}}function NS(){}function of(n,i,l,u){if(n.tag!==5)throw Error(a(476));var x=Vx(n).queue;Gx(n,x,i,K,l===null?NS:function(){return Yx(n),l(u)})}function Vx(n){var i=n.memoizedState;if(i!==null)return i;i={memoizedState:K,baseState:K,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:li,lastRenderedState:K},next:null};var l={};return i.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:li,lastRenderedState:l},next:null},n.memoizedState=i,n=n.alternate,n!==null&&(n.memoizedState=i),i}function Yx(n){var i=Vx(n);i.next===null&&(i=n.alternate.memoizedState),Cl(n,i.next.queue,{},tr())}function cf(){return vn(Fl)}function Xx(){return Wt().memoizedState}function Kx(){return Wt().memoizedState}function SS(n){for(var i=n.return;i!==null;){switch(i.tag){case 24:case 3:var l=tr();n=Hi(l);var u=$i(i,n,l);u!==null&&(Pn(u,i,l),wl(u,i,l)),i={cache:Id()},n.payload=i;return}i=i.return}}function kS(n,i,l){var u=tr();l={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},bc(n)?Qx(i,l):(l=kd(n,i,l,u),l!==null&&(Pn(l,n,u),Wx(l,i,u)))}function Zx(n,i,l){var u=tr();Cl(n,i,l,u)}function Cl(n,i,l,u){var x={lane:u,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(bc(n))Qx(i,x);else{var v=n.alternate;if(n.lanes===0&&(v===null||v.lanes===0)&&(v=i.lastRenderedReducer,v!==null))try{var T=i.lastRenderedState,G=v(T,l);if(x.hasEagerState=!0,x.eagerState=G,Kn(G,T))return Wo(n,i,x,0),kt===null&&Qo(),!1}catch{}finally{}if(l=kd(n,i,x,u),l!==null)return Pn(l,n,u),Wx(l,i,u),!0}return!1}function uf(n,i,l,u){if(u={lane:2,revertLane:qf(),gesture:null,action:u,hasEagerState:!1,eagerState:null,next:null},bc(n)){if(i)throw Error(a(479))}else i=kd(n,l,u,2),i!==null&&Pn(i,n,2)}function bc(n){var i=n.alternate;return n===Xe||i!==null&&i===Xe}function Qx(n,i){vs=dc=!0;var l=n.pending;l===null?i.next=i:(i.next=l.next,l.next=i),n.pending=i}function Wx(n,i,l){if((l&4194048)!==0){var u=i.lanes;u&=n.pendingLanes,l|=u,i.lanes=l,Ue(n,l)}}var Tl={readContext:vn,use:mc,useCallback:Gt,useContext:Gt,useEffect:Gt,useImperativeHandle:Gt,useLayoutEffect:Gt,useInsertionEffect:Gt,useMemo:Gt,useReducer:Gt,useRef:Gt,useState:Gt,useDebugValue:Gt,useDeferredValue:Gt,useTransition:Gt,useSyncExternalStore:Gt,useId:Gt,useHostTransitionStatus:Gt,useFormState:Gt,useActionState:Gt,useOptimistic:Gt,useMemoCache:Gt,useCacheRefresh:Gt};Tl.useEffectEvent=Gt;var Jx={readContext:vn,use:mc,useCallback:function(n,i){return Dn().memoizedState=[n,i===void 0?null:i],n},useContext:vn,useEffect:zx,useImperativeHandle:function(n,i,l){l=l!=null?l.concat([n]):null,gc(4194308,4,Hx.bind(null,i,n),l)},useLayoutEffect:function(n,i){return gc(4194308,4,n,i)},useInsertionEffect:function(n,i){gc(4,2,n,i)},useMemo:function(n,i){var l=Dn();i=i===void 0?null:i;var u=n();if(Ra){Jt(!0);try{n()}finally{Jt(!1)}}return l.memoizedState=[u,i],u},useReducer:function(n,i,l){var u=Dn();if(l!==void 0){var x=l(i);if(Ra){Jt(!0);try{l(i)}finally{Jt(!1)}}}else x=i;return u.memoizedState=u.baseState=x,n={pending:null,lanes:0,dispatch:null,lastRenderedReducer:n,lastRenderedState:x},u.queue=n,n=n.dispatch=kS.bind(null,Xe,n),[u.memoizedState,n]},useRef:function(n){var i=Dn();return n={current:n},i.memoizedState=n},useState:function(n){n=nf(n);var i=n.queue,l=Zx.bind(null,Xe,i);return i.dispatch=l,[n.memoizedState,l]},useDebugValue:sf,useDeferredValue:function(n,i){var l=Dn();return lf(l,n,i)},useTransition:function(){var n=nf(!1);return n=Gx.bind(null,Xe,n.queue,!0,!1),Dn().memoizedState=n,[!1,n]},useSyncExternalStore:function(n,i,l){var u=Xe,x=Dn();if(lt){if(l===void 0)throw Error(a(407));l=l()}else{if(l=i(),kt===null)throw Error(a(349));(it&127)!==0||vx(u,i,l)}x.memoizedState=l;var v={value:l,getSnapshot:i};return x.queue=v,zx(wx.bind(null,u,v,n),[n]),u.flags|=2048,ws(9,{destroy:void 0},_x.bind(null,u,v,l,i),null),l},useId:function(){var n=Dn(),i=kt.identifierPrefix;if(lt){var l=$r,u=Hr;l=(u&~(1<<32-ut(u)-1)).toString(32)+l,i="_"+i+"R_"+l,l=fc++,0<\/script>",v=v.removeChild(v.firstChild);break;case"select":v=typeof u.is=="string"?T.createElement("select",{is:u.is}):T.createElement("select"),u.multiple?v.multiple=!0:u.size&&(v.size=u.size);break;default:v=typeof u.is=="string"?T.createElement(x,{is:u.is}):T.createElement(x)}}v[Ut]=i,v[pn]=u;e:for(T=i.child;T!==null;){if(T.tag===5||T.tag===6)v.appendChild(T.stateNode);else if(T.tag!==4&&T.tag!==27&&T.child!==null){T.child.return=T,T=T.child;continue}if(T===i)break e;for(;T.sibling===null;){if(T.return===null||T.return===i)break e;T=T.return}T.sibling.return=T.return,T=T.sibling}i.stateNode=v;e:switch(wn(v,x,u),x){case"button":case"input":case"select":case"textarea":u=!!u.autoFocus;break e;case"img":u=!0;break e;default:u=!1}u&&ci(i)}}return Dt(i),Nf(i,i.type,n===null?null:n.memoizedProps,i.pendingProps,l),null;case 6:if(n&&i.stateNode!=null)n.memoizedProps!==u&&ci(i);else{if(typeof u!="string"&&i.stateNode===null)throw Error(a(166));if(n=Q.current,hs(i)){if(n=i.stateNode,l=i.memoizedProps,u=null,x=yn,x!==null)switch(x.tag){case 27:case 5:u=x.memoizedProps}n[Ut]=i,n=!!(n.nodeValue===l||u!==null&&u.suppressHydrationWarning===!0||b0(n.nodeValue,l)),n||Ii(i,!0)}else n=Bc(n).createTextNode(u),n[Ut]=i,i.stateNode=n}return Dt(i),null;case 31:if(l=i.memoizedState,n===null||n.memoizedState!==null){if(u=hs(i),l!==null){if(n===null){if(!u)throw Error(a(318));if(n=i.memoizedState,n=n!==null?n.dehydrated:null,!n)throw Error(a(557));n[Ut]=i}else Sa(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;Dt(i),n=!1}else l=jd(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=l),n=!0;if(!n)return i.flags&256?(Wn(i),i):(Wn(i),null);if((i.flags&128)!==0)throw Error(a(558))}return Dt(i),null;case 13:if(u=i.memoizedState,n===null||n.memoizedState!==null&&n.memoizedState.dehydrated!==null){if(x=hs(i),u!==null&&u.dehydrated!==null){if(n===null){if(!x)throw Error(a(318));if(x=i.memoizedState,x=x!==null?x.dehydrated:null,!x)throw Error(a(317));x[Ut]=i}else Sa(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;Dt(i),x=!1}else x=jd(),n!==null&&n.memoizedState!==null&&(n.memoizedState.hydrationErrors=x),x=!0;if(!x)return i.flags&256?(Wn(i),i):(Wn(i),null)}return Wn(i),(i.flags&128)!==0?(i.lanes=l,i):(l=u!==null,n=n!==null&&n.memoizedState!==null,l&&(u=i.child,x=null,u.alternate!==null&&u.alternate.memoizedState!==null&&u.alternate.memoizedState.cachePool!==null&&(x=u.alternate.memoizedState.cachePool.pool),v=null,u.memoizedState!==null&&u.memoizedState.cachePool!==null&&(v=u.memoizedState.cachePool.pool),v!==x&&(u.flags|=2048)),l!==n&&l&&(i.child.flags|=8192),Ec(i,i.updateQueue),Dt(i),null);case 4:return te(),n===null&&Vf(i.stateNode.containerInfo),Dt(i),null;case 10:return ai(i.type),Dt(i),null;case 19:if(F(Qt),u=i.memoizedState,u===null)return Dt(i),null;if(x=(i.flags&128)!==0,v=u.rendering,v===null)if(x)Ml(u,!1);else{if(Vt!==0||n!==null&&(n.flags&128)!==0)for(n=i.child;n!==null;){if(v=uc(n),v!==null){for(i.flags|=128,Ml(u,!1),n=v.updateQueue,i.updateQueue=n,Ec(i,n),i.subtreeFlags=0,n=l,l=i.child;l!==null;)Zg(l,n),l=l.sibling;return D(Qt,Qt.current&1|2),lt&&ri(i,u.treeForkCount),i.child}n=n.sibling}u.tail!==null&&ct()>Tc&&(i.flags|=128,x=!0,Ml(u,!1),i.lanes=4194304)}else{if(!x)if(n=uc(v),n!==null){if(i.flags|=128,x=!0,n=n.updateQueue,i.updateQueue=n,Ec(i,n),Ml(u,!0),u.tail===null&&u.tailMode==="hidden"&&!v.alternate&&!lt)return Dt(i),null}else 2*ct()-u.renderingStartTime>Tc&&l!==536870912&&(i.flags|=128,x=!0,Ml(u,!1),i.lanes=4194304);u.isBackwards?(v.sibling=i.child,i.child=v):(n=u.last,n!==null?n.sibling=v:i.child=v,u.last=v)}return u.tail!==null?(n=u.tail,u.rendering=n,u.tail=n.sibling,u.renderingStartTime=ct(),n.sibling=null,l=Qt.current,D(Qt,x?l&1|2:l&1),lt&&ri(i,u.treeForkCount),n):(Dt(i),null);case 22:case 23:return Wn(i),Vd(),u=i.memoizedState!==null,n!==null?n.memoizedState!==null!==u&&(i.flags|=8192):u&&(i.flags|=8192),u?(l&536870912)!==0&&(i.flags&128)===0&&(Dt(i),i.subtreeFlags&6&&(i.flags|=8192)):Dt(i),l=i.updateQueue,l!==null&&Ec(i,l.retryQueue),l=null,n!==null&&n.memoizedState!==null&&n.memoizedState.cachePool!==null&&(l=n.memoizedState.cachePool.pool),u=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(u=i.memoizedState.cachePool.pool),u!==l&&(i.flags|=2048),n!==null&&F(Ta),null;case 24:return l=null,n!==null&&(l=n.memoizedState.cache),i.memoizedState.cache!==l&&(i.flags|=2048),ai(tn),Dt(i),null;case 25:return null;case 30:return null}throw Error(a(156,i.tag))}function OS(n,i){switch(Od(i),i.tag){case 1:return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 3:return ai(tn),te(),n=i.flags,(n&65536)!==0&&(n&128)===0?(i.flags=n&-65537|128,i):null;case 26:case 27:case 5:return fe(i),null;case 31:if(i.memoizedState!==null){if(Wn(i),i.alternate===null)throw Error(a(340));Sa()}return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 13:if(Wn(i),n=i.memoizedState,n!==null&&n.dehydrated!==null){if(i.alternate===null)throw Error(a(340));Sa()}return n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 19:return F(Qt),null;case 4:return te(),null;case 10:return ai(i.type),null;case 22:case 23:return Wn(i),Vd(),n!==null&&F(Ta),n=i.flags,n&65536?(i.flags=n&-65537|128,i):null;case 24:return ai(tn),null;case 25:return null;default:return null}}function Eb(n,i){switch(Od(i),i.tag){case 3:ai(tn),te();break;case 26:case 27:case 5:fe(i);break;case 4:te();break;case 31:i.memoizedState!==null&&Wn(i);break;case 13:Wn(i);break;case 19:F(Qt);break;case 10:ai(i.type);break;case 22:case 23:Wn(i),Vd(),n!==null&&F(Ta);break;case 24:ai(tn)}}function Ol(n,i){try{var l=i.updateQueue,u=l!==null?l.lastEffect:null;if(u!==null){var x=u.next;l=x;do{if((l.tag&n)===n){u=void 0;var v=l.create,T=l.inst;u=v(),T.destroy=u}l=l.next}while(l!==x)}}catch(G){yt(i,i.return,G)}}function Fi(n,i,l){try{var u=i.updateQueue,x=u!==null?u.lastEffect:null;if(x!==null){var v=x.next;u=v;do{if((u.tag&n)===n){var T=u.inst,G=T.destroy;if(G!==void 0){T.destroy=void 0,x=i;var ne=l,le=G;try{le()}catch(he){yt(x,ne,he)}}}u=u.next}while(u!==v)}}catch(he){yt(i,i.return,he)}}function Nb(n){var i=n.updateQueue;if(i!==null){var l=n.stateNode;try{mx(i,l)}catch(u){yt(n,n.return,u)}}}function Sb(n,i,l){l.props=ja(n.type,n.memoizedProps),l.state=n.memoizedState;try{l.componentWillUnmount()}catch(u){yt(n,i,u)}}function Rl(n,i){try{var l=n.ref;if(l!==null){switch(n.tag){case 26:case 27:case 5:var u=n.stateNode;break;case 30:u=n.stateNode;break;default:u=n.stateNode}typeof l=="function"?n.refCleanup=l(u):l.current=u}}catch(x){yt(n,i,x)}}function qr(n,i){var l=n.ref,u=n.refCleanup;if(l!==null)if(typeof u=="function")try{u()}catch(x){yt(n,i,x)}finally{n.refCleanup=null,n=n.alternate,n!=null&&(n.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(x){yt(n,i,x)}else l.current=null}function kb(n){var i=n.type,l=n.memoizedProps,u=n.stateNode;try{e:switch(i){case"button":case"input":case"select":case"textarea":l.autoFocus&&u.focus();break e;case"img":l.src?u.src=l.src:l.srcSet&&(u.srcset=l.srcSet)}}catch(x){yt(n,n.return,x)}}function Sf(n,i,l){try{var u=n.stateNode;JS(u,n.type,l,i),u[pn]=i}catch(x){yt(n,n.return,x)}}function Cb(n){return n.tag===5||n.tag===3||n.tag===26||n.tag===27&&Qi(n.type)||n.tag===4}function kf(n){e:for(;;){for(;n.sibling===null;){if(n.return===null||Cb(n.return))return null;n=n.return}for(n.sibling.return=n.return,n=n.sibling;n.tag!==5&&n.tag!==6&&n.tag!==18;){if(n.tag===27&&Qi(n.type)||n.flags&2||n.child===null||n.tag===4)continue e;n.child.return=n,n=n.child}if(!(n.flags&2))return n.stateNode}}function Cf(n,i,l){var u=n.tag;if(u===5||u===6)n=n.stateNode,i?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(n,i):(i=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,i.appendChild(n),l=l._reactRootContainer,l!=null||i.onclick!==null||(i.onclick=_e));else if(u!==4&&(u===27&&Qi(n.type)&&(l=n.stateNode,i=null),n=n.child,n!==null))for(Cf(n,i,l),n=n.sibling;n!==null;)Cf(n,i,l),n=n.sibling}function Nc(n,i,l){var u=n.tag;if(u===5||u===6)n=n.stateNode,i?l.insertBefore(n,i):l.appendChild(n);else if(u!==4&&(u===27&&Qi(n.type)&&(l=n.stateNode),n=n.child,n!==null))for(Nc(n,i,l),n=n.sibling;n!==null;)Nc(n,i,l),n=n.sibling}function Tb(n){var i=n.stateNode,l=n.memoizedProps;try{for(var u=n.type,x=i.attributes;x.length;)i.removeAttributeNode(x[0]);wn(i,u,l),i[Ut]=n,i[pn]=l}catch(v){yt(n,n.return,v)}}var ui=!1,an=!1,Tf=!1,Ab=typeof WeakSet=="function"?WeakSet:Set,xn=null;function RS(n,i){if(n=n.containerInfo,Kf=Gc,n=$g(n),vd(n)){if("selectionStart"in n)var l={start:n.selectionStart,end:n.selectionEnd};else e:{l=(l=n.ownerDocument)&&l.defaultView||window;var u=l.getSelection&&l.getSelection();if(u&&u.rangeCount!==0){l=u.anchorNode;var x=u.anchorOffset,v=u.focusNode;u=u.focusOffset;try{l.nodeType,v.nodeType}catch{l=null;break e}var T=0,G=-1,ne=-1,le=0,he=0,ge=n,ce=null;t:for(;;){for(var de;ge!==l||x!==0&&ge.nodeType!==3||(G=T+x),ge!==v||u!==0&&ge.nodeType!==3||(ne=T+u),ge.nodeType===3&&(T+=ge.nodeValue.length),(de=ge.firstChild)!==null;)ce=ge,ge=de;for(;;){if(ge===n)break t;if(ce===l&&++le===x&&(G=T),ce===v&&++he===u&&(ne=T),(de=ge.nextSibling)!==null)break;ge=ce,ce=ge.parentNode}ge=de}l=G===-1||ne===-1?null:{start:G,end:ne}}else l=null}l=l||{start:0,end:0}}else l=null;for(Zf={focusedElem:n,selectionRange:l},Gc=!1,xn=i;xn!==null;)if(i=xn,n=i.child,(i.subtreeFlags&1028)!==0&&n!==null)n.return=i,xn=n;else for(;xn!==null;){switch(i=xn,v=i.alternate,n=i.flags,i.tag){case 0:if((n&4)!==0&&(n=i.updateQueue,n=n!==null?n.events:null,n!==null))for(l=0;l title"))),wn(v,u,l),v[Ut]=n,Ft(v),u=v;break e;case"link":var T=L0("link","href",x).get(u+(l.href||""));if(T){for(var G=0;GNt&&(T=Nt,Nt=He,He=T);var ae=Ug(G,He),ie=Ug(G,Nt);if(ae&&ie&&(de.rangeCount!==1||de.anchorNode!==ae.node||de.anchorOffset!==ae.offset||de.focusNode!==ie.node||de.focusOffset!==ie.offset)){var se=ge.createRange();se.setStart(ae.node,ae.offset),de.removeAllRanges(),He>Nt?(de.addRange(se),de.extend(ie.node,ie.offset)):(se.setEnd(ie.node,ie.offset),de.addRange(se))}}}}for(ge=[],de=G;de=de.parentNode;)de.nodeType===1&&ge.push({element:de,left:de.scrollLeft,top:de.scrollTop});for(typeof G.focus=="function"&&G.focus(),G=0;Gl?32:l,O.T=null,l=Lf,Lf=null;var v=Xi,T=pi;if(fn=0,Cs=Xi=null,pi=0,(pt&6)!==0)throw Error(a(331));var G=pt;if(pt|=4,Hb(v.current),Ib(v,v.current,T,l),pt=G,Bl(0,!1),At&&typeof At.onPostCommitFiberRoot=="function")try{At.onPostCommitFiberRoot(Zt,v)}catch{}return!0}finally{U.p=x,O.T=u,i0(n,i)}}function s0(n,i,l){i=ur(l,i),i=mf(n.stateNode,i,2),n=$i(n,i,2),n!==null&&(gt(n,2),Pr(n))}function yt(n,i,l){if(n.tag===3)s0(n,n,l);else for(;i!==null;){if(i.tag===3){s0(i,n,l);break}else if(i.tag===1){var u=i.stateNode;if(typeof i.type.getDerivedStateFromError=="function"||typeof u.componentDidCatch=="function"&&(Yi===null||!Yi.has(u))){n=ur(l,n),l=lb(2),u=$i(i,l,2),u!==null&&(ob(l,u,i,n),gt(u,2),Pr(u));break}}i=i.return}}function Uf(n,i,l){var u=n.pingCache;if(u===null){u=n.pingCache=new LS;var x=new Set;u.set(i,x)}else x=u.get(i),x===void 0&&(x=new Set,u.set(i,x));x.has(l)||(Of=!0,x.add(l),n=HS.bind(null,n,i,l),i.then(n,n))}function HS(n,i,l){var u=n.pingCache;u!==null&&u.delete(i),n.pingedLanes|=n.suspendedLanes&l,n.warmLanes&=~l,kt===n&&(it&l)===l&&(Vt===4||Vt===3&&(it&62914560)===it&&300>ct()-Cc?(pt&2)===0&&Ts(n,0):Rf|=l,ks===it&&(ks=0)),Pr(n)}function l0(n,i){i===0&&(i=Pe()),n=Ea(n,i),n!==null&&(gt(n,i),Pr(n))}function $S(n){var i=n.memoizedState,l=0;i!==null&&(l=i.retryLane),l0(n,l)}function qS(n,i){var l=0;switch(n.tag){case 31:case 13:var u=n.stateNode,x=n.memoizedState;x!==null&&(l=x.retryLane);break;case 19:u=n.stateNode;break;case 22:u=n.stateNode._retryCache;break;default:throw Error(a(314))}u!==null&&u.delete(i),l0(n,l)}function PS(n,i){return Pt(n,i)}var Dc=null,Ms=null,Hf=!1,Lc=!1,$f=!1,Zi=0;function Pr(n){n!==Ms&&n.next===null&&(Ms===null?Dc=Ms=n:Ms=Ms.next=n),Lc=!0,Hf||(Hf=!0,GS())}function Bl(n,i){if(!$f&&Lc){$f=!0;do for(var l=!1,u=Dc;u!==null;){if(n!==0){var x=u.pendingLanes;if(x===0)var v=0;else{var T=u.suspendedLanes,G=u.pingedLanes;v=(1<<31-ut(42|n)+1)-1,v&=x&~(T&~G),v=v&201326741?v&201326741|1:v?v|2:0}v!==0&&(l=!0,d0(u,v))}else v=it,v=re(u,u===kt?v:0,u.cancelPendingCommit!==null||u.timeoutHandle!==-1),(v&3)===0||me(u,v)||(l=!0,d0(u,v));u=u.next}while(l);$f=!1}}function FS(){o0()}function o0(){Lc=Hf=!1;var n=0;Zi!==0&&tk()&&(n=Zi);for(var i=ct(),l=null,u=Dc;u!==null;){var x=u.next,v=c0(u,i);v===0?(u.next=null,l===null?Dc=x:l.next=x,x===null&&(Ms=l)):(l=u,(n!==0||(v&3)!==0)&&(Lc=!0)),u=x}fn!==0&&fn!==5||Bl(n),Zi!==0&&(Zi=0)}function c0(n,i){for(var l=n.suspendedLanes,u=n.pingedLanes,x=n.expirationTimes,v=n.pendingLanes&-62914561;0G)break;var he=ne.transferSize,ge=ne.initiatorType;he&&y0(ge)&&(ne=ne.responseEnd,T+=he*(ne"u"?null:document;function O0(n,i,l){var u=Os;if(u&&typeof i=="string"&&i){var x=Cn(i);x='link[rel="'+n+'"][href="'+x+'"]',typeof l=="string"&&(x+='[crossorigin="'+l+'"]'),M0.has(x)||(M0.add(x),n={rel:n,crossOrigin:l,href:i},u.querySelector(x)===null&&(i=u.createElement("link"),wn(i,"link",n),Ft(i),u.head.appendChild(i)))}}function uk(n){gi.D(n),O0("dns-prefetch",n,null)}function dk(n,i){gi.C(n,i),O0("preconnect",n,i)}function fk(n,i,l){gi.L(n,i,l);var u=Os;if(u&&n&&i){var x='link[rel="preload"][as="'+Cn(i)+'"]';i==="image"&&l&&l.imageSrcSet?(x+='[imagesrcset="'+Cn(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(x+='[imagesizes="'+Cn(l.imageSizes)+'"]')):x+='[href="'+Cn(n)+'"]';var v=x;switch(i){case"style":v=Rs(n);break;case"script":v=js(n)}gr.has(v)||(n=g({rel:"preload",href:i==="image"&&l&&l.imageSrcSet?void 0:n,as:i},l),gr.set(v,n),u.querySelector(x)!==null||i==="style"&&u.querySelector(ql(v))||i==="script"&&u.querySelector(Pl(v))||(i=u.createElement("link"),wn(i,"link",n),Ft(i),u.head.appendChild(i)))}}function hk(n,i){gi.m(n,i);var l=Os;if(l&&n){var u=i&&typeof i.as=="string"?i.as:"script",x='link[rel="modulepreload"][as="'+Cn(u)+'"][href="'+Cn(n)+'"]',v=x;switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":v=js(n)}if(!gr.has(v)&&(n=g({rel:"modulepreload",href:n},i),gr.set(v,n),l.querySelector(x)===null)){switch(u){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(Pl(v)))return}u=l.createElement("link"),wn(u,"link",n),Ft(u),l.head.appendChild(u)}}}function mk(n,i,l){gi.S(n,i,l);var u=Os;if(u&&n){var x=Br(u).hoistableStyles,v=Rs(n);i=i||"default";var T=x.get(v);if(!T){var G={loading:0,preload:null};if(T=u.querySelector(ql(v)))G.loading=5;else{n=g({rel:"stylesheet",href:n,"data-precedence":i},l),(l=gr.get(v))&&rh(n,l);var ne=T=u.createElement("link");Ft(ne),wn(ne,"link",n),ne._p=new Promise(function(le,he){ne.onload=le,ne.onerror=he}),ne.addEventListener("load",function(){G.loading|=1}),ne.addEventListener("error",function(){G.loading|=2}),G.loading|=4,Hc(T,i,u)}T={type:"stylesheet",instance:T,count:1,state:G},x.set(v,T)}}}function pk(n,i){gi.X(n,i);var l=Os;if(l&&n){var u=Br(l).hoistableScripts,x=js(n),v=u.get(x);v||(v=l.querySelector(Pl(x)),v||(n=g({src:n,async:!0},i),(i=gr.get(x))&&ih(n,i),v=l.createElement("script"),Ft(v),wn(v,"link",n),l.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(x,v))}}function gk(n,i){gi.M(n,i);var l=Os;if(l&&n){var u=Br(l).hoistableScripts,x=js(n),v=u.get(x);v||(v=l.querySelector(Pl(x)),v||(n=g({src:n,async:!0,type:"module"},i),(i=gr.get(x))&&ih(n,i),v=l.createElement("script"),Ft(v),wn(v,"link",n),l.head.appendChild(v)),v={type:"script",instance:v,count:1,state:null},u.set(x,v))}}function R0(n,i,l,u){var x=(x=Q.current)?Uc(x):null;if(!x)throw Error(a(446));switch(n){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(i=Rs(l.href),l=Br(x).hoistableStyles,u=l.get(i),u||(u={type:"style",instance:null,count:0,state:null},l.set(i,u)),u):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){n=Rs(l.href);var v=Br(x).hoistableStyles,T=v.get(n);if(T||(x=x.ownerDocument||x,T={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},v.set(n,T),(v=x.querySelector(ql(n)))&&!v._p&&(T.instance=v,T.state.loading=5),gr.has(n)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},gr.set(n,l),v||xk(x,n,l,T.state))),i&&u===null)throw Error(a(528,""));return T}if(i&&u!==null)throw Error(a(529,""));return null;case"script":return i=l.async,l=l.src,typeof l=="string"&&i&&typeof i!="function"&&typeof i!="symbol"?(i=js(l),l=Br(x).hoistableScripts,u=l.get(i),u||(u={type:"script",instance:null,count:0,state:null},l.set(i,u)),u):{type:"void",instance:null,count:0,state:null};default:throw Error(a(444,n))}}function Rs(n){return'href="'+Cn(n)+'"'}function ql(n){return'link[rel="stylesheet"]['+n+"]"}function j0(n){return g({},n,{"data-precedence":n.precedence,precedence:null})}function xk(n,i,l,u){n.querySelector('link[rel="preload"][as="style"]['+i+"]")?u.loading=1:(i=n.createElement("link"),u.preload=i,i.addEventListener("load",function(){return u.loading|=1}),i.addEventListener("error",function(){return u.loading|=2}),wn(i,"link",l),Ft(i),n.head.appendChild(i))}function js(n){return'[src="'+Cn(n)+'"]'}function Pl(n){return"script[async]"+n}function D0(n,i,l){if(i.count++,i.instance===null)switch(i.type){case"style":var u=n.querySelector('style[data-href~="'+Cn(l.href)+'"]');if(u)return i.instance=u,Ft(u),u;var x=g({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return u=(n.ownerDocument||n).createElement("style"),Ft(u),wn(u,"style",x),Hc(u,l.precedence,n),i.instance=u;case"stylesheet":x=Rs(l.href);var v=n.querySelector(ql(x));if(v)return i.state.loading|=4,i.instance=v,Ft(v),v;u=j0(l),(x=gr.get(x))&&rh(u,x),v=(n.ownerDocument||n).createElement("link"),Ft(v);var T=v;return T._p=new Promise(function(G,ne){T.onload=G,T.onerror=ne}),wn(v,"link",u),i.state.loading|=4,Hc(v,l.precedence,n),i.instance=v;case"script":return v=js(l.src),(x=n.querySelector(Pl(v)))?(i.instance=x,Ft(x),x):(u=l,(x=gr.get(v))&&(u=g({},l),ih(u,x)),n=n.ownerDocument||n,x=n.createElement("script"),Ft(x),wn(x,"link",u),n.head.appendChild(x),i.instance=x);case"void":return null;default:throw Error(a(443,i.type))}else i.type==="stylesheet"&&(i.state.loading&4)===0&&(u=i.instance,i.state.loading|=4,Hc(u,l.precedence,n));return i.instance}function Hc(n,i,l){for(var u=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),x=u.length?u[u.length-1]:null,v=x,T=0;T title"):null)}function bk(n,i,l){if(l===1||i.itemProp!=null)return!1;switch(n){case"meta":case"title":return!0;case"style":if(typeof i.precedence!="string"||typeof i.href!="string"||i.href==="")break;return!0;case"link":if(typeof i.rel!="string"||typeof i.href!="string"||i.href===""||i.onLoad||i.onError)break;switch(i.rel){case"stylesheet":return n=i.disabled,typeof i.precedence=="string"&&n==null;default:return!0}case"script":if(i.async&&typeof i.async!="function"&&typeof i.async!="symbol"&&!i.onLoad&&!i.onError&&i.src&&typeof i.src=="string")return!0}return!1}function I0(n){return!(n.type==="stylesheet"&&(n.state.loading&3)===0)}function yk(n,i,l,u){if(l.type==="stylesheet"&&(typeof u.media!="string"||matchMedia(u.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var x=Rs(u.href),v=i.querySelector(ql(x));if(v){i=v._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(n.count++,n=qc.bind(n),i.then(n,n)),l.state.loading|=4,l.instance=v,Ft(v);return}v=i.ownerDocument||i,u=j0(u),(x=gr.get(x))&&rh(u,x),v=v.createElement("link"),Ft(v);var T=v;T._p=new Promise(function(G,ne){T.onload=G,T.onerror=ne}),wn(v,"link",u),l.instance=v}n.stylesheets===null&&(n.stylesheets=new Map),n.stylesheets.set(l,i),(i=l.state.preload)&&(l.state.loading&3)===0&&(n.count++,l=qc.bind(n),i.addEventListener("load",l),i.addEventListener("error",l))}}var ah=0;function vk(n,i){return n.stylesheets&&n.count===0&&Fc(n,n.stylesheets),0ah?50:800)+i);return n.unsuspend=l,function(){n.unsuspend=null,clearTimeout(u),clearTimeout(x)}}:null}function qc(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Fc(this,this.stylesheets);else if(this.unsuspend){var n=this.unsuspend;this.unsuspend=null,n()}}}var Pc=null;function Fc(n,i){n.stylesheets=null,n.unsuspend!==null&&(n.count++,Pc=new Map,i.forEach(_k,n),Pc=null,qc.call(n))}function _k(n,i){if(!(i.state.loading&4)){var l=Pc.get(n);if(l)var u=l.get(null);else{l=new Map,Pc.set(n,l);for(var x=n.querySelectorAll("link[data-precedence],style[data-precedence]"),v=0;v"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),mh.exports=zk(),mh.exports}var Bk=Ik();/** * @license lucide-react v0.563.0 - ISC * * This source code is licensed under the ISC license. @@ -81,7 +81,7 @@ Error generating stack: `+u.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Pk=ee.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:a,className:s="",children:o,iconNode:c,...d},f)=>ee.createElement("svg",{ref:f,...$k,width:t,height:t,stroke:e,strokeWidth:a?Number(r)*24/Number(t):r,className:L_("lucide",s),...!o&&!qk(d)&&{"aria-hidden":"true"},...d},[...c.map(([h,p])=>ee.createElement(h,p)),...Array.isArray(o)?o:[o]]));/** + */const Pk=ee.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:r=2,absoluteStrokeWidth:a,className:s="",children:o,iconNode:c,...d},h)=>ee.createElement("svg",{ref:h,...$k,width:t,height:t,stroke:e,strokeWidth:a?Number(r)*24/Number(t):r,className:L_("lucide",s),...!o&&!qk(d)&&{"aria-hidden":"true"},...d},[...c.map(([f,p])=>ee.createElement(f,p)),...Array.isArray(o)?o:[o]]));/** * @license lucide-react v0.563.0 - ISC * * This source code is licensed under the ISC license. @@ -91,7 +91,7 @@ Error generating stack: `+u.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Fk=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],Ep=Te("arrow-left",Fk);/** + */const Fk=[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]],wp=Te("arrow-left",Fk);/** * @license lucide-react v0.563.0 - ISC * * This source code is licensed under the ISC license. @@ -161,7 +161,7 @@ Error generating stack: `+u.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const uC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]],Gu=Te("circle-alert",uC);/** + */const uC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]],Fu=Te("circle-alert",uC);/** * @license lucide-react v0.563.0 - ISC * * This source code is licensed under the ISC license. @@ -216,7 +216,7 @@ Error generating stack: `+u.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const SC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"22",x2:"18",y1:"12",y2:"12",key:"l9bcsi"}],["line",{x1:"6",x2:"2",y1:"12",y2:"12",key:"13hhkx"}],["line",{x1:"12",x2:"12",y1:"6",y2:"2",key:"10w3f3"}],["line",{x1:"12",x2:"12",y1:"22",y2:"18",key:"15g9kq"}]],Vu=Te("crosshair",SC);/** + */const SC=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"22",x2:"18",y1:"12",y2:"12",key:"l9bcsi"}],["line",{x1:"6",x2:"2",y1:"12",y2:"12",key:"13hhkx"}],["line",{x1:"12",x2:"12",y1:"6",y2:"2",key:"10w3f3"}],["line",{x1:"12",x2:"12",y1:"22",y2:"18",key:"15g9kq"}]],Gu=Te("crosshair",SC);/** * @license lucide-react v0.563.0 - ISC * * This source code is licensed under the ISC license. @@ -301,12 +301,12 @@ Error generating stack: `+u.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const JC=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],Np=Te("mail",JC);/** + */const JC=[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]],Ep=Te("mail",JC);/** * @license lucide-react v0.563.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const eT=[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}]],yh=Te("message-circle",eT);/** + */const eT=[["path",{d:"M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719",key:"1sd12s"}]],bh=Te("message-circle",eT);/** * @license lucide-react v0.563.0 - ISC * * This source code is licensed under the ISC license. @@ -371,7 +371,7 @@ Error generating stack: `+u.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const wT=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],Fm=Te("sparkles",wT);/** + */const wT=[["path",{d:"M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z",key:"1s2grr"}],["path",{d:"M20 2v4",key:"1rf3ol"}],["path",{d:"M22 4h-4",key:"gwowj6"}],["circle",{cx:"4",cy:"20",r:"2",key:"6kqj1y"}]],Pm=Te("sparkles",wT);/** * @license lucide-react v0.563.0 - ISC * * This source code is licensed under the ISC license. @@ -391,7 +391,7 @@ Error generating stack: `+u.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const TT=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],Nu=Te("triangle-alert",TT);/** + */const TT=[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]],Np=Te("triangle-alert",TT);/** * @license lucide-react v0.563.0 - ISC * * This source code is licensed under the ISC license. @@ -406,7 +406,7 @@ Error generating stack: `+u.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const jT=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]],Gm=Te("wrench",jT);/** + */const jT=[["path",{d:"M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",key:"1ngwbx"}]],Fm=Te("wrench",jT);/** * @license lucide-react v0.563.0 - ISC * * This source code is licensed under the ISC license. @@ -416,49 +416,49 @@ Error generating stack: `+u.message+` * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const LT=[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]],zT=Te("zap",LT),IT={open:{label:"Open",color:"bg-red-500/10 text-red-400 border-red-500/20",dotColor:"bg-red-500",description:"Newly discovered, awaiting triage"},in_progress:{label:"In Progress",color:"bg-blue-500/10 text-blue-400 border-blue-500/20",dotColor:"bg-blue-500",description:"Someone is working on this"},snoozed:{label:"Snoozed",color:"bg-purple-500/10 text-purple-400 border-purple-500/20",dotColor:"bg-purple-500",description:"Temporarily hidden until a follow-up date"},fixed:{label:"Fixed",color:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20",dotColor:"bg-emerald-500",description:"This vulnerability has been fixed"},ignored:{label:"Ignored",color:"bg-gray-500/10 text-gray-400 border-gray-500/20",dotColor:"bg-gray-500",description:"Acknowledged but accepted"}},BT={trivial:{label:"Trivial",color:"bg-emerald-500/10 text-emerald-400 border-emerald-500/20"},low:{label:"Low",color:"bg-blue-500/10 text-blue-400 border-blue-500/20"},medium:{label:"Medium",color:"bg-yellow-500/10 text-yellow-400 border-yellow-500/20"},high:{label:"High",color:"bg-orange-500/10 text-orange-400 border-orange-500/20"}},Z_={critical:"bg-red-500/20 text-red-500 border-red-500/30",high:"bg-orange-500/20 text-orange-500 border-orange-500/30",medium:"bg-yellow-500/20 text-yellow-500 border-yellow-500/30",low:"bg-blue-500/20 text-blue-500 border-blue-500/30"};function Wc(e){return e.original_severity!=null&&e.original_severity!==e.severity}const UT={js:"javascript",ts:"typescript",tsx:"typescript",jsx:"javascript",py:"python",rb:"ruby",go:"go",rs:"rust",java:"java",php:"php",cs:"csharp",cpp:"cpp",c:"c",sh:"bash",bash:"bash",sql:"sql",html:"html",css:"css",json:"json",yaml:"yaml",yml:"yaml",xml:"xml"};function HT(e){var r;if(!e)return null;const t=(r=e.split(".").pop())==null?void 0:r.toLowerCase();return t&&UT[t]||null}function kp(e){switch(e){case"critical":return"bg-red-500";case"high":return"bg-orange-500";case"medium":return"bg-yellow-500";default:return"bg-blue-500"}}async function Cp(e){try{await navigator.clipboard.writeText(e)}catch{const t=document.createElement("textarea");t.value=e,t.style.position="absolute",t.style.left="-9999px",document.body.appendChild(t),t.select(),document.execCommand("copy"),document.body.removeChild(t)}}const Yu="https://app.strix.ai/api/auth/signup",$T="https://strix.ai/pricing",qT="ref=oss_viewer&utm_source=oss_viewer&utm_medium=local_viewer&utm_campaign=oss_viewer";function ha(e,t){const r=e.includes("?")?"&":"?";return`${e}${r}${qT}&utm_content=${encodeURIComponent(t)}`}function Tr(e,t={}){try{const r={event:e};for(const[s,o]of Object.entries(t))o!==void 0&&(r[s]=o);const a=JSON.stringify(r);typeof navigator<"u"&&navigator.sendBeacon?navigator.sendBeacon("/api/event",a):fetch("/api/event",{method:"POST",body:a,keepalive:!0})}catch{}}function jr(e,t){Tr("cta_clicked",{cta:e,surface:t})}function Q_(e){var t,r,a="";if(typeof e=="string"||typeof e=="number")a+=e;else if(typeof e=="object")if(Array.isArray(e)){var s=e.length;for(t=0;t{const r=new Array(e.length+t.length);for(let a=0;a({classGroupId:e,validator:t}),W_=(e=new Map,t=null,r)=>({nextPart:e,validators:t,classGroupId:r}),Su="-",cy=[],VT="arbitrary..",YT=e=>{const t=KT(e),{conflictingClassGroups:r,conflictingClassGroupModifiers:a}=e;return{getClassGroupId:c=>{if(c.startsWith("[")&&c.endsWith("]"))return XT(c);const d=c.split(Su),f=d[0]===""&&d.length>1?1:0;return J_(d,f,t)},getConflictingClassGroupIds:(c,d)=>{if(d){const f=a[c],h=r[c];return f?h?FT(h,f):f:h||cy}return r[c]||cy}}},J_=(e,t,r)=>{if(e.length-t===0)return r.classGroupId;const s=e[t],o=r.nextPart.get(s);if(o){const h=J_(e,t+1,o);if(h)return h}const c=r.validators;if(c===null)return;const d=t===0?e.join(Su):e.slice(t).join(Su),f=c.length;for(let h=0;he.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const t=e.slice(1,-1),r=t.indexOf(":"),a=t.slice(0,r);return a?VT+a:void 0})(),KT=e=>{const{theme:t,classGroups:r}=e;return ZT(r,t)},ZT=(e,t)=>{const r=W_();for(const a in e){const s=e[a];Tp(s,r,a,t)}return r},Tp=(e,t,r,a)=>{const s=e.length;for(let o=0;o{if(typeof e=="string"){WT(e,t,r);return}if(typeof e=="function"){JT(e,t,r,a);return}eA(e,t,r,a)},WT=(e,t,r)=>{const a=e===""?t:ew(t,e);a.classGroupId=r},JT=(e,t,r,a)=>{if(tA(e)){Tp(e(a),t,r,a);return}t.validators===null&&(t.validators=[]),t.validators.push(GT(r,e))},eA=(e,t,r,a)=>{const s=Object.entries(e),o=s.length;for(let c=0;c{let r=e;const a=t.split(Su),s=a.length;for(let o=0;o"isThemeGetter"in e&&e.isThemeGetter===!0,nA=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,r=Object.create(null),a=Object.create(null);const s=(o,c)=>{r[o]=c,t++,t>e&&(t=0,a=r,r=Object.create(null))};return{get(o){let c=r[o];if(c!==void 0)return c;if((c=a[o])!==void 0)return s(o,c),c},set(o,c){o in r?r[o]=c:s(o,c)}}},Vm="!",uy=":",rA=[],dy=(e,t,r,a,s)=>({modifiers:e,hasImportantModifier:t,baseClassName:r,maybePostfixModifierPosition:a,isExternal:s}),iA=e=>{const{prefix:t,experimentalParseClassName:r}=e;let a=s=>{const o=[];let c=0,d=0,f=0,h;const p=s.length;for(let E=0;Ef?h-f:void 0;return dy(o,b,y,_)};if(t){const s=t+uy,o=a;a=c=>c.startsWith(s)?o(c.slice(s.length)):dy(rA,!1,c,void 0,!0)}if(r){const s=a;a=o=>r({className:o,parseClassName:s})}return a},aA=e=>{const t=new Map;return e.orderSensitiveModifiers.forEach((r,a)=>{t.set(r,1e6+a)}),r=>{const a=[];let s=[];for(let o=0;o0&&(s.sort(),a.push(...s),s=[]),a.push(c)):s.push(c)}return s.length>0&&(s.sort(),a.push(...s)),a}},sA=e=>({cache:nA(e.cacheSize),parseClassName:iA(e),sortModifiers:aA(e),postfixLookupClassGroupIds:lA(e),...YT(e)}),lA=e=>{const t=Object.create(null),r=e.postfixLookupClassGroups;if(r)for(let a=0;a{const{parseClassName:r,getClassGroupId:a,getConflictingClassGroupIds:s,sortModifiers:o,postfixLookupClassGroupIds:c}=t,d=[],f=e.trim().split(oA);let h="";for(let p=f.length-1;p>=0;p-=1){const g=f[p],{isExternal:y,modifiers:b,hasImportantModifier:_,baseClassName:E,maybePostfixModifierPosition:S}=r(g);if(y){h=g+(h.length>0?" "+h:h);continue}let w=!!S,k;if(w){const U=E.substring(0,S);k=a(U);const I=k&&c[k]?a(E):void 0;I&&I!==k&&(k=I,w=!1)}else k=a(E);if(!k){if(!w){h=g+(h.length>0?" "+h:h);continue}if(k=a(E),!k){h=g+(h.length>0?" "+h:h);continue}w=!1}const N=b.length===0?"":b.length===1?b[0]:o(b).join(":"),M=_?N+Vm:N,B=M+k;if(d.indexOf(B)>-1)continue;d.push(B);const R=s(k,w);for(let U=0;U0?" "+h:h)}return h},uA=(...e)=>{let t=0,r,a,s="";for(;t{if(typeof e=="string")return e;let t,r="";for(let a=0;a{let r,a,s,o;const c=f=>{const h=t.reduce((p,g)=>g(p),e());return r=sA(h),a=r.cache.get,s=r.cache.set,o=d,d(f)},d=f=>{const h=a(f);if(h)return h;const p=cA(f,r);return s(f,p),p};return o=c,(...f)=>o(uA(...f))},fA=[],hn=e=>{const t=r=>r[e]||fA;return t.isThemeGetter=!0,t},nw=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,rw=/^\((?:(\w[\w-]*):)?(.+)\)$/i,hA=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,mA=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,pA=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,gA=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,xA=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,bA=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,ra=e=>hA.test(e),We=e=>!!e&&!Number.isNaN(Number(e)),Fr=e=>!!e&&Number.isInteger(Number(e)),vh=e=>e.endsWith("%")&&We(e.slice(0,-1)),xi=e=>mA.test(e),iw=()=>!0,yA=e=>pA.test(e)&&!gA.test(e),Ap=()=>!1,vA=e=>xA.test(e),_A=e=>bA.test(e),wA=e=>!ke(e)&&!Ce(e),EA=e=>e.startsWith("@container")&&(e[10]==="/"&&e[11]!==void 0||e[11]==="s"&&e[16]!==void 0&&e.startsWith("-size/",10)||e[11]==="n"&&e[18]!==void 0&&e.startsWith("-normal/",10)),NA=e=>ma(e,lw,Ap),ke=e=>nw.test(e),za=e=>ma(e,ow,yA),fy=e=>ma(e,RA,We),SA=e=>ma(e,uw,iw),kA=e=>ma(e,cw,Ap),hy=e=>ma(e,aw,Ap),CA=e=>ma(e,sw,_A),Jc=e=>ma(e,dw,vA),Ce=e=>rw.test(e),Zl=e=>Wa(e,ow),TA=e=>Wa(e,cw),my=e=>Wa(e,aw),AA=e=>Wa(e,lw),MA=e=>Wa(e,sw),eu=e=>Wa(e,dw,!0),OA=e=>Wa(e,uw,!0),ma=(e,t,r)=>{const a=nw.exec(e);return a?a[1]?t(a[1]):r(a[2]):!1},Wa=(e,t,r=!1)=>{const a=rw.exec(e);return a?a[1]?t(a[1]):r:!1},aw=e=>e==="position"||e==="percentage",sw=e=>e==="image"||e==="url",lw=e=>e==="length"||e==="size"||e==="bg-size",ow=e=>e==="length",RA=e=>e==="number",cw=e=>e==="family-name",uw=e=>e==="number"||e==="weight",dw=e=>e==="shadow",jA=()=>{const e=hn("color"),t=hn("font"),r=hn("text"),a=hn("font-weight"),s=hn("tracking"),o=hn("leading"),c=hn("breakpoint"),d=hn("container"),f=hn("spacing"),h=hn("radius"),p=hn("shadow"),g=hn("inset-shadow"),y=hn("text-shadow"),b=hn("drop-shadow"),_=hn("blur"),E=hn("perspective"),S=hn("aspect"),w=hn("ease"),k=hn("animate"),N=()=>["auto","avoid","all","avoid-page","page","left","right","column"],M=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],B=()=>[...M(),Ce,ke],R=()=>["auto","hidden","clip","visible","scroll"],U=()=>["auto","contain","none"],I=()=>[Ce,ke,f],X=()=>[ra,"full","auto",...I()],j=()=>[Fr,"none","subgrid",Ce,ke],z=()=>["auto",{span:["full",Fr,Ce,ke]},Fr,Ce,ke],V=()=>[Fr,"auto",Ce,ke],P=()=>["auto","min","max","fr",Ce,ke],T=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],$=()=>["start","end","center","stretch","center-safe","end-safe"],O=()=>["auto",...I()],H=()=>[ra,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...I()],K=()=>[ra,"screen","full","dvw","lvw","svw","min","max","fit",...I()],Z=()=>[ra,"screen","full","lh","dvh","lvh","svh","min","max","fit",...I()],C=()=>[e,Ce,ke],D=()=>[...M(),my,hy,{position:[Ce,ke]}],Y=()=>["no-repeat",{repeat:["","x","y","space","round"]}],L=()=>["auto","cover","contain",AA,NA,{size:[Ce,ke]}],G=()=>[vh,Zl,za],q=()=>["","none","full",h,Ce,ke],Q=()=>["",We,Zl,za],J=()=>["solid","dashed","dotted","double"],W=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],te=()=>[We,vh,my,hy],ce=()=>["","none",_,Ce,ke],fe=()=>["none",We,Ce,ke],xe=()=>["none",We,Ce,ke],we=()=>[We,Ce,ke],Ne=()=>[ra,"full",...I()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[xi],breakpoint:[xi],color:[iw],container:[xi],"drop-shadow":[xi],ease:["in","out","in-out"],font:[wA],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[xi],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[xi],shadow:[xi],spacing:["px",We],text:[xi],"text-shadow":[xi],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",ra,ke,Ce,S]}],container:["container"],"container-type":[{"@container":["","normal","size",Ce,ke]}],"container-named":[EA],columns:[{columns:[We,ke,Ce,d]}],"break-after":[{"break-after":N()}],"break-before":[{"break-before":N()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:B()}],overflow:[{overflow:R()}],"overflow-x":[{"overflow-x":R()}],"overflow-y":[{"overflow-y":R()}],overscroll:[{overscroll:U()}],"overscroll-x":[{"overscroll-x":U()}],"overscroll-y":[{"overscroll-y":U()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:X()}],"inset-x":[{"inset-x":X()}],"inset-y":[{"inset-y":X()}],start:[{"inset-s":X(),start:X()}],end:[{"inset-e":X(),end:X()}],"inset-bs":[{"inset-bs":X()}],"inset-be":[{"inset-be":X()}],top:[{top:X()}],right:[{right:X()}],bottom:[{bottom:X()}],left:[{left:X()}],visibility:["visible","invisible","collapse"],z:[{z:[Fr,"auto",Ce,ke]}],basis:[{basis:[ra,"full","auto",d,...I()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[We,ra,"auto","initial","none",ke]}],grow:[{grow:["",We,Ce,ke]}],shrink:[{shrink:["",We,Ce,ke]}],order:[{order:[Fr,"first","last","none",Ce,ke]}],"grid-cols":[{"grid-cols":j()}],"col-start-end":[{col:z()}],"col-start":[{"col-start":V()}],"col-end":[{"col-end":V()}],"grid-rows":[{"grid-rows":j()}],"row-start-end":[{row:z()}],"row-start":[{"row-start":V()}],"row-end":[{"row-end":V()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":P()}],"auto-rows":[{"auto-rows":P()}],gap:[{gap:I()}],"gap-x":[{"gap-x":I()}],"gap-y":[{"gap-y":I()}],"justify-content":[{justify:[...T(),"normal"]}],"justify-items":[{"justify-items":[...$(),"normal"]}],"justify-self":[{"justify-self":["auto",...$()]}],"align-content":[{content:["normal",...T()]}],"align-items":[{items:[...$(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...$(),{baseline:["","last"]}]}],"place-content":[{"place-content":T()}],"place-items":[{"place-items":[...$(),"baseline"]}],"place-self":[{"place-self":["auto",...$()]}],p:[{p:I()}],px:[{px:I()}],py:[{py:I()}],ps:[{ps:I()}],pe:[{pe:I()}],pbs:[{pbs:I()}],pbe:[{pbe:I()}],pt:[{pt:I()}],pr:[{pr:I()}],pb:[{pb:I()}],pl:[{pl:I()}],m:[{m:O()}],mx:[{mx:O()}],my:[{my:O()}],ms:[{ms:O()}],me:[{me:O()}],mbs:[{mbs:O()}],mbe:[{mbe:O()}],mt:[{mt:O()}],mr:[{mr:O()}],mb:[{mb:O()}],ml:[{ml:O()}],"space-x":[{"space-x":I()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":I()}],"space-y-reverse":["space-y-reverse"],size:[{size:H()}],"inline-size":[{inline:["auto",...K()]}],"min-inline-size":[{"min-inline":["auto",...K()]}],"max-inline-size":[{"max-inline":["none",...K()]}],"block-size":[{block:["auto",...Z()]}],"min-block-size":[{"min-block":["auto",...Z()]}],"max-block-size":[{"max-block":["none",...Z()]}],w:[{w:[d,"screen",...H()]}],"min-w":[{"min-w":[d,"screen","none",...H()]}],"max-w":[{"max-w":[d,"screen","none","prose",{screen:[c]},...H()]}],h:[{h:["screen","lh",...H()]}],"min-h":[{"min-h":["screen","lh","none",...H()]}],"max-h":[{"max-h":["screen","lh",...H()]}],"font-size":[{text:["base",r,Zl,za]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[a,OA,SA]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",vh,ke]}],"font-family":[{font:[TA,kA,t]}],"font-features":[{"font-features":[ke]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[s,Ce,ke]}],"line-clamp":[{"line-clamp":[We,"none",Ce,fy]}],leading:[{leading:[o,...I()]}],"list-image":[{"list-image":["none",Ce,ke]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",Ce,ke]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:C()}],"text-color":[{text:C()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...J(),"wavy"]}],"text-decoration-thickness":[{decoration:[We,"from-font","auto",Ce,za]}],"text-decoration-color":[{decoration:C()}],"underline-offset":[{"underline-offset":[We,"auto",Ce,ke]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:I()}],"tab-size":[{tab:[Fr,Ce,ke]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Ce,ke]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Ce,ke]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:D()}],"bg-repeat":[{bg:Y()}],"bg-size":[{bg:L()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Fr,Ce,ke],radial:["",Ce,ke],conic:[Fr,Ce,ke]},MA,CA]}],"bg-color":[{bg:C()}],"gradient-from-pos":[{from:G()}],"gradient-via-pos":[{via:G()}],"gradient-to-pos":[{to:G()}],"gradient-from":[{from:C()}],"gradient-via":[{via:C()}],"gradient-to":[{to:C()}],rounded:[{rounded:q()}],"rounded-s":[{"rounded-s":q()}],"rounded-e":[{"rounded-e":q()}],"rounded-t":[{"rounded-t":q()}],"rounded-r":[{"rounded-r":q()}],"rounded-b":[{"rounded-b":q()}],"rounded-l":[{"rounded-l":q()}],"rounded-ss":[{"rounded-ss":q()}],"rounded-se":[{"rounded-se":q()}],"rounded-ee":[{"rounded-ee":q()}],"rounded-es":[{"rounded-es":q()}],"rounded-tl":[{"rounded-tl":q()}],"rounded-tr":[{"rounded-tr":q()}],"rounded-br":[{"rounded-br":q()}],"rounded-bl":[{"rounded-bl":q()}],"border-w":[{border:Q()}],"border-w-x":[{"border-x":Q()}],"border-w-y":[{"border-y":Q()}],"border-w-s":[{"border-s":Q()}],"border-w-e":[{"border-e":Q()}],"border-w-bs":[{"border-bs":Q()}],"border-w-be":[{"border-be":Q()}],"border-w-t":[{"border-t":Q()}],"border-w-r":[{"border-r":Q()}],"border-w-b":[{"border-b":Q()}],"border-w-l":[{"border-l":Q()}],"divide-x":[{"divide-x":Q()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":Q()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...J(),"hidden","none"]}],"divide-style":[{divide:[...J(),"hidden","none"]}],"border-color":[{border:C()}],"border-color-x":[{"border-x":C()}],"border-color-y":[{"border-y":C()}],"border-color-s":[{"border-s":C()}],"border-color-e":[{"border-e":C()}],"border-color-bs":[{"border-bs":C()}],"border-color-be":[{"border-be":C()}],"border-color-t":[{"border-t":C()}],"border-color-r":[{"border-r":C()}],"border-color-b":[{"border-b":C()}],"border-color-l":[{"border-l":C()}],"divide-color":[{divide:C()}],"outline-style":[{outline:[...J(),"none","hidden"]}],"outline-offset":[{"outline-offset":[We,Ce,ke]}],"outline-w":[{outline:["",We,Zl,za]}],"outline-color":[{outline:C()}],shadow:[{shadow:["","none",p,eu,Jc]}],"shadow-color":[{shadow:C()}],"inset-shadow":[{"inset-shadow":["none",g,eu,Jc]}],"inset-shadow-color":[{"inset-shadow":C()}],"ring-w":[{ring:Q()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:C()}],"ring-offset-w":[{"ring-offset":[We,za]}],"ring-offset-color":[{"ring-offset":C()}],"inset-ring-w":[{"inset-ring":Q()}],"inset-ring-color":[{"inset-ring":C()}],"text-shadow":[{"text-shadow":["none",y,eu,Jc]}],"text-shadow-color":[{"text-shadow":C()}],opacity:[{opacity:[We,Ce,ke]}],"mix-blend":[{"mix-blend":[...W(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":W()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[We]}],"mask-image-linear-from-pos":[{"mask-linear-from":te()}],"mask-image-linear-to-pos":[{"mask-linear-to":te()}],"mask-image-linear-from-color":[{"mask-linear-from":C()}],"mask-image-linear-to-color":[{"mask-linear-to":C()}],"mask-image-t-from-pos":[{"mask-t-from":te()}],"mask-image-t-to-pos":[{"mask-t-to":te()}],"mask-image-t-from-color":[{"mask-t-from":C()}],"mask-image-t-to-color":[{"mask-t-to":C()}],"mask-image-r-from-pos":[{"mask-r-from":te()}],"mask-image-r-to-pos":[{"mask-r-to":te()}],"mask-image-r-from-color":[{"mask-r-from":C()}],"mask-image-r-to-color":[{"mask-r-to":C()}],"mask-image-b-from-pos":[{"mask-b-from":te()}],"mask-image-b-to-pos":[{"mask-b-to":te()}],"mask-image-b-from-color":[{"mask-b-from":C()}],"mask-image-b-to-color":[{"mask-b-to":C()}],"mask-image-l-from-pos":[{"mask-l-from":te()}],"mask-image-l-to-pos":[{"mask-l-to":te()}],"mask-image-l-from-color":[{"mask-l-from":C()}],"mask-image-l-to-color":[{"mask-l-to":C()}],"mask-image-x-from-pos":[{"mask-x-from":te()}],"mask-image-x-to-pos":[{"mask-x-to":te()}],"mask-image-x-from-color":[{"mask-x-from":C()}],"mask-image-x-to-color":[{"mask-x-to":C()}],"mask-image-y-from-pos":[{"mask-y-from":te()}],"mask-image-y-to-pos":[{"mask-y-to":te()}],"mask-image-y-from-color":[{"mask-y-from":C()}],"mask-image-y-to-color":[{"mask-y-to":C()}],"mask-image-radial":[{"mask-radial":[Ce,ke]}],"mask-image-radial-from-pos":[{"mask-radial-from":te()}],"mask-image-radial-to-pos":[{"mask-radial-to":te()}],"mask-image-radial-from-color":[{"mask-radial-from":C()}],"mask-image-radial-to-color":[{"mask-radial-to":C()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":M()}],"mask-image-conic-pos":[{"mask-conic":[We]}],"mask-image-conic-from-pos":[{"mask-conic-from":te()}],"mask-image-conic-to-pos":[{"mask-conic-to":te()}],"mask-image-conic-from-color":[{"mask-conic-from":C()}],"mask-image-conic-to-color":[{"mask-conic-to":C()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:D()}],"mask-repeat":[{mask:Y()}],"mask-size":[{mask:L()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",Ce,ke]}],filter:[{filter:["","none",Ce,ke]}],blur:[{blur:ce()}],brightness:[{brightness:[We,Ce,ke]}],contrast:[{contrast:[We,Ce,ke]}],"drop-shadow":[{"drop-shadow":["","none",b,eu,Jc]}],"drop-shadow-color":[{"drop-shadow":C()}],grayscale:[{grayscale:["",We,Ce,ke]}],"hue-rotate":[{"hue-rotate":[We,Ce,ke]}],invert:[{invert:["",We,Ce,ke]}],saturate:[{saturate:[We,Ce,ke]}],sepia:[{sepia:["",We,Ce,ke]}],"backdrop-filter":[{"backdrop-filter":["","none",Ce,ke]}],"backdrop-blur":[{"backdrop-blur":ce()}],"backdrop-brightness":[{"backdrop-brightness":[We,Ce,ke]}],"backdrop-contrast":[{"backdrop-contrast":[We,Ce,ke]}],"backdrop-grayscale":[{"backdrop-grayscale":["",We,Ce,ke]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[We,Ce,ke]}],"backdrop-invert":[{"backdrop-invert":["",We,Ce,ke]}],"backdrop-opacity":[{"backdrop-opacity":[We,Ce,ke]}],"backdrop-saturate":[{"backdrop-saturate":[We,Ce,ke]}],"backdrop-sepia":[{"backdrop-sepia":["",We,Ce,ke]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":I()}],"border-spacing-x":[{"border-spacing-x":I()}],"border-spacing-y":[{"border-spacing-y":I()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",Ce,ke]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[We,"initial",Ce,ke]}],ease:[{ease:["linear","initial",w,Ce,ke]}],delay:[{delay:[We,Ce,ke]}],animate:[{animate:["none",k,Ce,ke]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[E,Ce,ke]}],"perspective-origin":[{"perspective-origin":B()}],rotate:[{rotate:fe()}],"rotate-x":[{"rotate-x":fe()}],"rotate-y":[{"rotate-y":fe()}],"rotate-z":[{"rotate-z":fe()}],scale:[{scale:xe()}],"scale-x":[{"scale-x":xe()}],"scale-y":[{"scale-y":xe()}],"scale-z":[{"scale-z":xe()}],"scale-3d":["scale-3d"],skew:[{skew:we()}],"skew-x":[{"skew-x":we()}],"skew-y":[{"skew-y":we()}],transform:[{transform:[Ce,ke,"","none","gpu","cpu"]}],"transform-origin":[{origin:B()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:Ne()}],"translate-x":[{"translate-x":Ne()}],"translate-y":[{"translate-y":Ne()}],"translate-z":[{"translate-z":Ne()}],"translate-none":["translate-none"],zoom:[{zoom:[Fr,Ce,ke]}],accent:[{accent:C()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:C()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Ce,ke]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":C()}],"scrollbar-track-color":[{"scrollbar-track":C()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":I()}],"scroll-mx":[{"scroll-mx":I()}],"scroll-my":[{"scroll-my":I()}],"scroll-ms":[{"scroll-ms":I()}],"scroll-me":[{"scroll-me":I()}],"scroll-mbs":[{"scroll-mbs":I()}],"scroll-mbe":[{"scroll-mbe":I()}],"scroll-mt":[{"scroll-mt":I()}],"scroll-mr":[{"scroll-mr":I()}],"scroll-mb":[{"scroll-mb":I()}],"scroll-ml":[{"scroll-ml":I()}],"scroll-p":[{"scroll-p":I()}],"scroll-px":[{"scroll-px":I()}],"scroll-py":[{"scroll-py":I()}],"scroll-ps":[{"scroll-ps":I()}],"scroll-pe":[{"scroll-pe":I()}],"scroll-pbs":[{"scroll-pbs":I()}],"scroll-pbe":[{"scroll-pbe":I()}],"scroll-pt":[{"scroll-pt":I()}],"scroll-pr":[{"scroll-pr":I()}],"scroll-pb":[{"scroll-pb":I()}],"scroll-pl":[{"scroll-pl":I()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Ce,ke]}],fill:[{fill:["none",...C()]}],"stroke-w":[{stroke:[We,Zl,za,fy]}],stroke:[{stroke:["none",...C()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}},DA=dA(jA);function Mr(...e){return DA(PT(e))}function LA(e){return new Date(e).toLocaleDateString("en-US",{year:"numeric",month:"short",day:"numeric"})}function Ym(e){const t=new Date(e),a=Math.floor((new Date().getTime()-t.getTime())/1e3);return a<60?"just now":a<3600?`${Math.floor(a/60)}m ago`:a<86400?`${Math.floor(a/3600)}h ago`:a<604800?`${Math.floor(a/86400)}d ago`:LA(e)}function zA(e){return`STRIX-${e}`}function Ls(e){return new Intl.NumberFormat("en-US").format(e)}function IA(e,t){const r={};return(e[e.length-1]===""?[...e,""]:e).join((r.padRight?" ":"")+","+(r.padLeft===!1?"":" ")).trim()}const BA=/^[$_\p{ID_Start}][$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,UA=/^[$_\p{ID_Start}][-$_\u{200C}\u{200D}\p{ID_Continue}]*$/u,HA={};function py(e,t){return(HA.jsx?UA:BA).test(e)}const $A=/[ \t\n\f\r]/g;function qA(e){return typeof e=="object"?e.type==="text"?gy(e.value):!1:gy(e)}function gy(e){return e.replace($A,"")===""}class Ro{constructor(t,r,a){this.normal=r,this.property=t,a&&(this.space=a)}}Ro.prototype.normal={};Ro.prototype.property={};Ro.prototype.space=void 0;function fw(e,t){const r={},a={};for(const s of e)Object.assign(r,s.property),Object.assign(a,s.normal);return new Ro(r,a,t)}function Xm(e){return e.toLowerCase()}class Vn{constructor(t,r){this.attribute=r,this.property=t}}Vn.prototype.attribute="";Vn.prototype.booleanish=!1;Vn.prototype.boolean=!1;Vn.prototype.commaOrSpaceSeparated=!1;Vn.prototype.commaSeparated=!1;Vn.prototype.defined=!1;Vn.prototype.mustUseProperty=!1;Vn.prototype.number=!1;Vn.prototype.overloadedBoolean=!1;Vn.prototype.property="";Vn.prototype.spaceSeparated=!1;Vn.prototype.space=void 0;let PA=0;const Ge=Ja(),sn=Ja(),Km=Ja(),ve=Ja(),Ct=Ja(),qa=Ja(),rr=Ja();function Ja(){return 2**++PA}const Zm=Object.freeze(Object.defineProperty({__proto__:null,boolean:Ge,booleanish:sn,commaOrSpaceSeparated:rr,commaSeparated:qa,number:ve,overloadedBoolean:Km,spaceSeparated:Ct},Symbol.toStringTag,{value:"Module"})),_h=Object.keys(Zm);class Mp extends Vn{constructor(t,r,a,s){let o=-1;if(super(t,r),xy(this,"space",s),typeof a=="number")for(;++o<_h.length;){const c=_h[o];xy(this,_h[o],(a&Zm[c])===Zm[c])}}}Mp.prototype.defined=!0;function xy(e,t,r){r&&(e[t]=r)}function nl(e){const t={},r={};for(const[a,s]of Object.entries(e.properties)){const o=new Mp(a,e.transform(e.attributes||{},a),s,e.space);e.mustUseProperty&&e.mustUseProperty.includes(a)&&(o.mustUseProperty=!0),t[a]=o,r[Xm(a)]=a,r[Xm(o.attribute)]=a}return new Ro(t,r,e.space)}const hw=nl({properties:{ariaActiveDescendant:null,ariaAtomic:sn,ariaAutoComplete:null,ariaBusy:sn,ariaChecked:sn,ariaColCount:ve,ariaColIndex:ve,ariaColSpan:ve,ariaControls:Ct,ariaCurrent:null,ariaDescribedBy:Ct,ariaDetails:null,ariaDisabled:sn,ariaDropEffect:Ct,ariaErrorMessage:null,ariaExpanded:sn,ariaFlowTo:Ct,ariaGrabbed:sn,ariaHasPopup:null,ariaHidden:sn,ariaInvalid:null,ariaKeyShortcuts:null,ariaLabel:null,ariaLabelledBy:Ct,ariaLevel:ve,ariaLive:null,ariaModal:sn,ariaMultiLine:sn,ariaMultiSelectable:sn,ariaOrientation:null,ariaOwns:Ct,ariaPlaceholder:null,ariaPosInSet:ve,ariaPressed:sn,ariaReadOnly:sn,ariaRelevant:null,ariaRequired:sn,ariaRoleDescription:Ct,ariaRowCount:ve,ariaRowIndex:ve,ariaRowSpan:ve,ariaSelected:sn,ariaSetSize:ve,ariaSort:null,ariaValueMax:ve,ariaValueMin:ve,ariaValueNow:ve,ariaValueText:null,role:null},transform(e,t){return t==="role"?t:"aria-"+t.slice(4).toLowerCase()}});function mw(e,t){return t in e?e[t]:t}function pw(e,t){return mw(e,t.toLowerCase())}const FA=nl({attributes:{acceptcharset:"accept-charset",classname:"class",htmlfor:"for",httpequiv:"http-equiv"},mustUseProperty:["checked","multiple","muted","selected"],properties:{abbr:null,accept:qa,acceptCharset:Ct,accessKey:Ct,action:null,allow:null,allowFullScreen:Ge,allowPaymentRequest:Ge,allowUserMedia:Ge,alpha:Ge,alt:null,as:null,async:Ge,autoCapitalize:null,autoComplete:Ct,autoFocus:Ge,autoPlay:Ge,blocking:Ct,capture:null,charSet:null,checked:Ge,cite:null,className:Ct,closedBy:null,colorSpace:null,cols:ve,colSpan:ve,command:null,commandFor:null,content:null,contentEditable:sn,controls:Ge,controlsList:Ct,coords:ve|qa,crossOrigin:null,data:null,dateTime:null,decoding:null,default:Ge,defer:Ge,dir:null,dirName:null,disabled:Ge,download:Km,draggable:sn,encType:null,enterKeyHint:null,fetchPriority:null,form:null,formAction:null,formEncType:null,formMethod:null,formNoValidate:Ge,formTarget:null,headers:Ct,height:ve,hidden:Km,high:ve,href:null,hrefLang:null,htmlFor:Ct,httpEquiv:Ct,id:null,imageSizes:null,imageSrcSet:null,inert:Ge,inputMode:null,integrity:null,is:null,isMap:Ge,itemId:null,itemProp:Ct,itemRef:Ct,itemScope:Ge,itemType:Ct,kind:null,label:null,lang:null,language:null,list:null,loading:null,loop:Ge,low:ve,manifest:null,max:null,maxLength:ve,media:null,method:null,min:null,minLength:ve,multiple:Ge,muted:Ge,name:null,nonce:null,noModule:Ge,noValidate:Ge,onAbort:null,onAfterPrint:null,onAuxClick:null,onBeforeMatch:null,onBeforePrint:null,onBeforeToggle:null,onBeforeUnload:null,onBlur:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onContextLost:null,onContextMenu:null,onContextRestored:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnded:null,onError:null,onFocus:null,onFormData:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLanguageChange:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadEnd:null,onLoadStart:null,onMessage:null,onMessageError:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRejectionHandled:null,onReset:null,onResize:null,onScroll:null,onScrollEnd:null,onSecurityPolicyViolation:null,onSeeked:null,onSeeking:null,onSelect:null,onSlotChange:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnhandledRejection:null,onUnload:null,onVolumeChange:null,onWaiting:null,onWheel:null,open:Ge,optimum:ve,pattern:null,ping:Ct,placeholder:null,playsInline:Ge,popover:null,popoverTarget:null,popoverTargetAction:null,poster:null,preload:null,readOnly:Ge,referrerPolicy:null,rel:Ct,required:Ge,reversed:Ge,rows:ve,rowSpan:ve,sandbox:Ct,scope:null,scoped:Ge,seamless:Ge,selected:Ge,shadowRootClonable:Ge,shadowRootCustomElementRegistry:Ge,shadowRootDelegatesFocus:Ge,shadowRootMode:null,shadowRootSerializable:Ge,shape:null,size:ve,sizes:null,slot:null,span:ve,spellCheck:sn,src:null,srcDoc:null,srcLang:null,srcSet:null,start:ve,step:null,style:null,tabIndex:ve,target:null,title:null,translate:null,type:null,typeMustMatch:Ge,useMap:null,value:sn,width:ve,wrap:null,writingSuggestions:null,align:null,aLink:null,archive:Ct,axis:null,background:null,bgColor:null,border:ve,borderColor:null,bottomMargin:ve,cellPadding:null,cellSpacing:null,char:null,charOff:null,classId:null,clear:null,code:null,codeBase:null,codeType:null,color:null,compact:Ge,declare:Ge,event:null,face:null,frame:null,frameBorder:null,hSpace:ve,leftMargin:ve,link:null,longDesc:null,lowSrc:null,marginHeight:ve,marginWidth:ve,noResize:Ge,noHref:Ge,noShade:Ge,noWrap:Ge,object:null,profile:null,prompt:null,rev:null,rightMargin:ve,rules:null,scheme:null,scrolling:sn,standby:null,summary:null,text:null,topMargin:ve,valueType:null,version:null,vAlign:null,vLink:null,vSpace:ve,allowTransparency:null,autoCorrect:null,autoSave:null,credentialless:Ge,disablePictureInPicture:Ge,disableRemotePlayback:Ge,exportParts:qa,part:Ct,prefix:null,property:null,results:ve,security:null,unselectable:null},space:"html",transform:pw}),GA=nl({attributes:{accentHeight:"accent-height",alignmentBaseline:"alignment-baseline",arabicForm:"arabic-form",baselineShift:"baseline-shift",capHeight:"cap-height",className:"class",clipPath:"clip-path",clipRule:"clip-rule",colorInterpolation:"color-interpolation",colorInterpolationFilters:"color-interpolation-filters",colorProfile:"color-profile",colorRendering:"color-rendering",crossOrigin:"crossorigin",dataType:"datatype",dominantBaseline:"dominant-baseline",enableBackground:"enable-background",fillOpacity:"fill-opacity",fillRule:"fill-rule",floodColor:"flood-color",floodOpacity:"flood-opacity",fontFamily:"font-family",fontSize:"font-size",fontSizeAdjust:"font-size-adjust",fontStretch:"font-stretch",fontStyle:"font-style",fontVariant:"font-variant",fontWeight:"font-weight",glyphName:"glyph-name",glyphOrientationHorizontal:"glyph-orientation-horizontal",glyphOrientationVertical:"glyph-orientation-vertical",hrefLang:"hreflang",horizAdvX:"horiz-adv-x",horizOriginX:"horiz-origin-x",horizOriginY:"horiz-origin-y",imageRendering:"image-rendering",letterSpacing:"letter-spacing",lightingColor:"lighting-color",markerEnd:"marker-end",markerMid:"marker-mid",markerStart:"marker-start",maskType:"mask-type",navDown:"nav-down",navDownLeft:"nav-down-left",navDownRight:"nav-down-right",navLeft:"nav-left",navNext:"nav-next",navPrev:"nav-prev",navRight:"nav-right",navUp:"nav-up",navUpLeft:"nav-up-left",navUpRight:"nav-up-right",onAbort:"onabort",onActivate:"onactivate",onAfterPrint:"onafterprint",onBeforePrint:"onbeforeprint",onBegin:"onbegin",onCancel:"oncancel",onCanPlay:"oncanplay",onCanPlayThrough:"oncanplaythrough",onChange:"onchange",onClick:"onclick",onClose:"onclose",onCopy:"oncopy",onCueChange:"oncuechange",onCut:"oncut",onDblClick:"ondblclick",onDrag:"ondrag",onDragEnd:"ondragend",onDragEnter:"ondragenter",onDragExit:"ondragexit",onDragLeave:"ondragleave",onDragOver:"ondragover",onDragStart:"ondragstart",onDrop:"ondrop",onDurationChange:"ondurationchange",onEmptied:"onemptied",onEnd:"onend",onEnded:"onended",onError:"onerror",onFocus:"onfocus",onFocusIn:"onfocusin",onFocusOut:"onfocusout",onHashChange:"onhashchange",onInput:"oninput",onInvalid:"oninvalid",onKeyDown:"onkeydown",onKeyPress:"onkeypress",onKeyUp:"onkeyup",onLoad:"onload",onLoadedData:"onloadeddata",onLoadedMetadata:"onloadedmetadata",onLoadStart:"onloadstart",onMessage:"onmessage",onMouseDown:"onmousedown",onMouseEnter:"onmouseenter",onMouseLeave:"onmouseleave",onMouseMove:"onmousemove",onMouseOut:"onmouseout",onMouseOver:"onmouseover",onMouseUp:"onmouseup",onMouseWheel:"onmousewheel",onOffline:"onoffline",onOnline:"ononline",onPageHide:"onpagehide",onPageShow:"onpageshow",onPaste:"onpaste",onPause:"onpause",onPlay:"onplay",onPlaying:"onplaying",onPopState:"onpopstate",onProgress:"onprogress",onRateChange:"onratechange",onRepeat:"onrepeat",onReset:"onreset",onResize:"onresize",onScroll:"onscroll",onSeeked:"onseeked",onSeeking:"onseeking",onSelect:"onselect",onShow:"onshow",onStalled:"onstalled",onStorage:"onstorage",onSubmit:"onsubmit",onSuspend:"onsuspend",onTimeUpdate:"ontimeupdate",onToggle:"ontoggle",onUnload:"onunload",onVolumeChange:"onvolumechange",onWaiting:"onwaiting",onZoom:"onzoom",overlinePosition:"overline-position",overlineThickness:"overline-thickness",paintOrder:"paint-order",panose1:"panose-1",pointerEvents:"pointer-events",referrerPolicy:"referrerpolicy",renderingIntent:"rendering-intent",shapeRendering:"shape-rendering",stopColor:"stop-color",stopOpacity:"stop-opacity",strikethroughPosition:"strikethrough-position",strikethroughThickness:"strikethrough-thickness",strokeDashArray:"stroke-dasharray",strokeDashOffset:"stroke-dashoffset",strokeLineCap:"stroke-linecap",strokeLineJoin:"stroke-linejoin",strokeMiterLimit:"stroke-miterlimit",strokeOpacity:"stroke-opacity",strokeWidth:"stroke-width",tabIndex:"tabindex",textAnchor:"text-anchor",textDecoration:"text-decoration",textRendering:"text-rendering",transformOrigin:"transform-origin",typeOf:"typeof",underlinePosition:"underline-position",underlineThickness:"underline-thickness",unicodeBidi:"unicode-bidi",unicodeRange:"unicode-range",unitsPerEm:"units-per-em",vAlphabetic:"v-alphabetic",vHanging:"v-hanging",vIdeographic:"v-ideographic",vMathematical:"v-mathematical",vectorEffect:"vector-effect",vertAdvY:"vert-adv-y",vertOriginX:"vert-origin-x",vertOriginY:"vert-origin-y",wordSpacing:"word-spacing",writingMode:"writing-mode",xHeight:"x-height",playbackOrder:"playbackorder",timelineBegin:"timelinebegin"},properties:{about:rr,accentHeight:ve,accumulate:null,additive:null,alignmentBaseline:null,alphabetic:ve,amplitude:ve,arabicForm:null,ascent:ve,attributeName:null,attributeType:null,azimuth:ve,bandwidth:null,baselineShift:null,baseFrequency:null,baseProfile:null,bbox:null,begin:null,bias:ve,by:null,calcMode:null,capHeight:ve,className:Ct,clip:null,clipPath:null,clipPathUnits:null,clipRule:null,color:null,colorInterpolation:null,colorInterpolationFilters:null,colorProfile:null,colorRendering:null,content:null,contentScriptType:null,contentStyleType:null,crossOrigin:null,cursor:null,cx:null,cy:null,d:null,dataType:null,defaultAction:null,descent:ve,diffuseConstant:ve,direction:null,display:null,dur:null,divisor:ve,dominantBaseline:null,download:Ge,dx:null,dy:null,edgeMode:null,editable:null,elevation:ve,enableBackground:null,end:null,event:null,exponent:ve,externalResourcesRequired:null,fill:null,fillOpacity:ve,fillRule:null,filter:null,filterRes:null,filterUnits:null,floodColor:null,floodOpacity:null,focusable:null,focusHighlight:null,fontFamily:null,fontSize:null,fontSizeAdjust:null,fontStretch:null,fontStyle:null,fontVariant:null,fontWeight:null,format:null,fr:null,from:null,fx:null,fy:null,g1:qa,g2:qa,glyphName:qa,glyphOrientationHorizontal:null,glyphOrientationVertical:null,glyphRef:null,gradientTransform:null,gradientUnits:null,handler:null,hanging:ve,hatchContentUnits:null,hatchUnits:null,height:null,href:null,hrefLang:null,horizAdvX:ve,horizOriginX:ve,horizOriginY:ve,id:null,ideographic:ve,imageRendering:null,initialVisibility:null,in:null,in2:null,intercept:ve,k:ve,k1:ve,k2:ve,k3:ve,k4:ve,kernelMatrix:rr,kernelUnitLength:null,keyPoints:null,keySplines:null,keyTimes:null,kerning:null,lang:null,lengthAdjust:null,letterSpacing:null,lightingColor:null,limitingConeAngle:ve,local:null,markerEnd:null,markerMid:null,markerStart:null,markerHeight:null,markerUnits:null,markerWidth:null,mask:null,maskContentUnits:null,maskType:null,maskUnits:null,mathematical:null,max:null,media:null,mediaCharacterEncoding:null,mediaContentEncodings:null,mediaSize:ve,mediaTime:null,method:null,min:null,mode:null,name:null,navDown:null,navDownLeft:null,navDownRight:null,navLeft:null,navNext:null,navPrev:null,navRight:null,navUp:null,navUpLeft:null,navUpRight:null,numOctaves:null,observer:null,offset:null,onAbort:null,onActivate:null,onAfterPrint:null,onBeforePrint:null,onBegin:null,onCancel:null,onCanPlay:null,onCanPlayThrough:null,onChange:null,onClick:null,onClose:null,onCopy:null,onCueChange:null,onCut:null,onDblClick:null,onDrag:null,onDragEnd:null,onDragEnter:null,onDragExit:null,onDragLeave:null,onDragOver:null,onDragStart:null,onDrop:null,onDurationChange:null,onEmptied:null,onEnd:null,onEnded:null,onError:null,onFocus:null,onFocusIn:null,onFocusOut:null,onHashChange:null,onInput:null,onInvalid:null,onKeyDown:null,onKeyPress:null,onKeyUp:null,onLoad:null,onLoadedData:null,onLoadedMetadata:null,onLoadStart:null,onMessage:null,onMouseDown:null,onMouseEnter:null,onMouseLeave:null,onMouseMove:null,onMouseOut:null,onMouseOver:null,onMouseUp:null,onMouseWheel:null,onOffline:null,onOnline:null,onPageHide:null,onPageShow:null,onPaste:null,onPause:null,onPlay:null,onPlaying:null,onPopState:null,onProgress:null,onRateChange:null,onRepeat:null,onReset:null,onResize:null,onScroll:null,onSeeked:null,onSeeking:null,onSelect:null,onShow:null,onStalled:null,onStorage:null,onSubmit:null,onSuspend:null,onTimeUpdate:null,onToggle:null,onUnload:null,onVolumeChange:null,onWaiting:null,onZoom:null,opacity:null,operator:null,order:null,orient:null,orientation:null,origin:null,overflow:null,overlay:null,overlinePosition:ve,overlineThickness:ve,paintOrder:null,panose1:null,path:null,pathLength:ve,patternContentUnits:null,patternTransform:null,patternUnits:null,phase:null,ping:Ct,pitch:null,playbackOrder:null,pointerEvents:null,points:null,pointsAtX:ve,pointsAtY:ve,pointsAtZ:ve,preserveAlpha:null,preserveAspectRatio:null,primitiveUnits:null,propagate:null,property:rr,r:null,radius:null,referrerPolicy:null,refX:null,refY:null,rel:rr,rev:rr,renderingIntent:null,repeatCount:null,repeatDur:null,requiredExtensions:rr,requiredFeatures:rr,requiredFonts:rr,requiredFormats:rr,resource:null,restart:null,result:null,rotate:null,rx:null,ry:null,scale:null,seed:null,shapeRendering:null,side:null,slope:null,snapshotTime:null,specularConstant:ve,specularExponent:ve,spreadMethod:null,spacing:null,startOffset:null,stdDeviation:null,stemh:null,stemv:null,stitchTiles:null,stopColor:null,stopOpacity:null,strikethroughPosition:ve,strikethroughThickness:ve,string:null,stroke:null,strokeDashArray:rr,strokeDashOffset:null,strokeLineCap:null,strokeLineJoin:null,strokeMiterLimit:ve,strokeOpacity:ve,strokeWidth:null,style:null,surfaceScale:ve,syncBehavior:null,syncBehaviorDefault:null,syncMaster:null,syncTolerance:null,syncToleranceDefault:null,systemLanguage:rr,tabIndex:ve,tableValues:null,target:null,targetX:ve,targetY:ve,textAnchor:null,textDecoration:null,textRendering:null,textLength:null,timelineBegin:null,title:null,transformBehavior:null,type:null,typeOf:rr,to:null,transform:null,transformOrigin:null,u1:null,u2:null,underlinePosition:ve,underlineThickness:ve,unicode:null,unicodeBidi:null,unicodeRange:null,unitsPerEm:ve,values:null,vAlphabetic:ve,vMathematical:ve,vectorEffect:null,vHanging:ve,vIdeographic:ve,version:null,vertAdvY:ve,vertOriginX:ve,vertOriginY:ve,viewBox:null,viewTarget:null,visibility:null,width:null,widths:null,wordSpacing:null,writingMode:null,x:null,x1:null,x2:null,xChannelSelector:null,xHeight:ve,y:null,y1:null,y2:null,yChannelSelector:null,z:null,zoomAndPan:null},space:"svg",transform:mw}),gw=nl({properties:{xLinkActuate:null,xLinkArcRole:null,xLinkHref:null,xLinkRole:null,xLinkShow:null,xLinkTitle:null,xLinkType:null},space:"xlink",transform(e,t){return"xlink:"+t.slice(5).toLowerCase()}}),xw=nl({attributes:{xmlnsxlink:"xmlns:xlink"},properties:{xmlnsXLink:null,xmlns:null},space:"xmlns",transform:pw}),bw=nl({properties:{xmlBase:null,xmlLang:null,xmlSpace:null},space:"xml",transform(e,t){return"xml:"+t.slice(3).toLowerCase()}}),VA={classId:"classID",dataType:"datatype",itemId:"itemID",strokeDashArray:"strokeDasharray",strokeDashOffset:"strokeDashoffset",strokeLineCap:"strokeLinecap",strokeLineJoin:"strokeLinejoin",strokeMiterLimit:"strokeMiterlimit",typeOf:"typeof",xLinkActuate:"xlinkActuate",xLinkArcRole:"xlinkArcrole",xLinkHref:"xlinkHref",xLinkRole:"xlinkRole",xLinkShow:"xlinkShow",xLinkTitle:"xlinkTitle",xLinkType:"xlinkType",xmlnsXLink:"xmlnsXlink"},YA=/[A-Z]/g,by=/-[a-z]/g,XA=/^data[-\w.:]+$/i;function KA(e,t){const r=Xm(t);let a=t,s=Vn;if(r in e.normal)return e.property[e.normal[r]];if(r.length>4&&r.slice(0,4)==="data"&&XA.test(t)){if(t.charAt(4)==="-"){const o=t.slice(5).replace(by,QA);a="data"+o.charAt(0).toUpperCase()+o.slice(1)}else{const o=t.slice(4);if(!by.test(o)){let c=o.replace(YA,ZA);c.charAt(0)!=="-"&&(c="-"+c),t="data"+c}}s=Mp}return new s(a,t)}function ZA(e){return"-"+e.toLowerCase()}function QA(e){return e.charAt(1).toUpperCase()}const WA=fw([hw,FA,gw,xw,bw],"html"),Op=fw([hw,GA,gw,xw,bw],"svg");function JA(e){return e.join(" ").trim()}var zs={},wh,yy;function eM(){if(yy)return wh;yy=1;var e=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//g,t=/\n/g,r=/^\s*/,a=/^(\*?[-#/*\\\w]+(\[[0-9a-z_-]+\])?)\s*/,s=/^:\s*/,o=/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^)]*?\)|[^};])+)/,c=/^[;\s]*/,d=/^\s+|\s+$/g,f=` -`,h="/",p="*",g="",y="comment",b="declaration";function _(S,w){if(typeof S!="string")throw new TypeError("First argument must be a string");if(!S)return[];w=w||{};var k=1,N=1;function M(T){var $=T.match(t);$&&(k+=$.length);var O=T.lastIndexOf(f);N=~O?T.length-O:N+T.length}function B(){var T={line:k,column:N};return function($){return $.position=new R(T),X(),$}}function R(T){this.start=T,this.end={line:k,column:N},this.source=w.source}R.prototype.content=S;function U(T){var $=new Error(w.source+":"+k+":"+N+": "+T);if($.reason=T,$.filename=w.source,$.line=k,$.column=N,$.source=S,!w.silent)throw $}function I(T){var $=T.exec(S);if($){var O=$[0];return M(O),S=S.slice(O.length),$}}function X(){I(r)}function j(T){var $;for(T=T||[];$=z();)$!==!1&&T.push($);return T}function z(){var T=B();if(!(h!=S.charAt(0)||p!=S.charAt(1))){for(var $=2;g!=S.charAt($)&&(p!=S.charAt($)||h!=S.charAt($+1));)++$;if($+=2,g===S.charAt($-1))return U("End of comment missing");var O=S.slice(2,$-2);return N+=2,M(O),S=S.slice($),N+=2,T({type:y,comment:O})}}function V(){var T=B(),$=I(a);if($){if(z(),!I(s))return U("property missing ':'");var O=I(o),H=T({type:b,property:E($[0].replace(e,g)),value:O?E(O[0].replace(e,g)):g});return I(c),H}}function P(){var T=[];j(T);for(var $;$=V();)$!==!1&&(T.push($),j(T));return T}return X(),P()}function E(S){return S?S.replace(d,g):g}return wh=_,wh}var vy;function tM(){if(vy)return zs;vy=1;var e=zs&&zs.__importDefault||function(a){return a&&a.__esModule?a:{default:a}};Object.defineProperty(zs,"__esModule",{value:!0}),zs.default=r;const t=e(eM());function r(a,s){let o=null;if(!a||typeof a!="string")return o;const c=(0,t.default)(a),d=typeof s=="function";return c.forEach(f=>{if(f.type!=="declaration")return;const{property:h,value:p}=f;d?s(h,p,f):p&&(o=o||{},o[h]=p)}),o}return zs}var Ql={},_y;function nM(){if(_y)return Ql;_y=1,Object.defineProperty(Ql,"__esModule",{value:!0}),Ql.camelCase=void 0;var e=/^--[a-zA-Z0-9_-]+$/,t=/-([a-z])/g,r=/^[^-]+$/,a=/^-(webkit|moz|ms|o|khtml)-/,s=/^-(ms)-/,o=function(h){return!h||r.test(h)||e.test(h)},c=function(h,p){return p.toUpperCase()},d=function(h,p){return"".concat(p,"-")},f=function(h,p){return p===void 0&&(p={}),o(h)?h:(h=h.toLowerCase(),p.reactCompat?h=h.replace(s,d):h=h.replace(a,d),h.replace(t,c))};return Ql.camelCase=f,Ql}var Wl,wy;function rM(){if(wy)return Wl;wy=1;var e=Wl&&Wl.__importDefault||function(s){return s&&s.__esModule?s:{default:s}},t=e(tM()),r=nM();function a(s,o){var c={};return!s||typeof s!="string"||(0,t.default)(s,function(d,f){d&&f&&(c[(0,r.camelCase)(d,o)]=f)}),c}return a.default=a,Wl=a,Wl}var iM=rM();const aM=Ao(iM),yw=vw("end"),Rp=vw("start");function vw(e){return t;function t(r){const a=r&&r.position&&r.position[e]||{};if(typeof a.line=="number"&&a.line>0&&typeof a.column=="number"&&a.column>0)return{line:a.line,column:a.column,offset:typeof a.offset=="number"&&a.offset>-1?a.offset:void 0}}}function sM(e){const t=Rp(e),r=yw(e);if(t&&r)return{start:t,end:r}}function oo(e){return!e||typeof e!="object"?"":"position"in e||"type"in e?Ey(e.position):"start"in e||"end"in e?Ey(e):"line"in e||"column"in e?Qm(e):""}function Qm(e){return Ny(e&&e.line)+":"+Ny(e&&e.column)}function Ey(e){return Qm(e&&e.start)+"-"+Qm(e&&e.end)}function Ny(e){return e&&typeof e=="number"?e:1}class Mn extends Error{constructor(t,r,a){super(),typeof r=="string"&&(a=r,r=void 0);let s="",o={},c=!1;if(r&&("line"in r&&"column"in r?o={place:r}:"start"in r&&"end"in r?o={place:r}:"type"in r?o={ancestors:[r],place:r.position}:o={...r}),typeof t=="string"?s=t:!o.cause&&t&&(c=!0,s=t.message,o.cause=t),!o.ruleId&&!o.source&&typeof a=="string"){const f=a.indexOf(":");f===-1?o.ruleId=a:(o.source=a.slice(0,f),o.ruleId=a.slice(f+1))}if(!o.place&&o.ancestors&&o.ancestors){const f=o.ancestors[o.ancestors.length-1];f&&(o.place=f.position)}const d=o.place&&"start"in o.place?o.place.start:o.place;this.ancestors=o.ancestors||void 0,this.cause=o.cause||void 0,this.column=d?d.column:void 0,this.fatal=void 0,this.file="",this.message=s,this.line=d?d.line:void 0,this.name=oo(o.place)||"1:1",this.place=o.place||void 0,this.reason=this.message,this.ruleId=o.ruleId||void 0,this.source=o.source||void 0,this.stack=c&&o.cause&&typeof o.cause.stack=="string"?o.cause.stack:"",this.actual=void 0,this.expected=void 0,this.note=void 0,this.url=void 0}}Mn.prototype.file="";Mn.prototype.name="";Mn.prototype.reason="";Mn.prototype.message="";Mn.prototype.stack="";Mn.prototype.column=void 0;Mn.prototype.line=void 0;Mn.prototype.ancestors=void 0;Mn.prototype.cause=void 0;Mn.prototype.fatal=void 0;Mn.prototype.place=void 0;Mn.prototype.ruleId=void 0;Mn.prototype.source=void 0;const jp={}.hasOwnProperty,lM=new Map,oM=/[A-Z]/g,cM=new Set(["table","tbody","thead","tfoot","tr"]),uM=new Set(["td","th"]),_w="https://github.com/syntax-tree/hast-util-to-jsx-runtime";function dM(e,t){if(!t||t.Fragment===void 0)throw new TypeError("Expected `Fragment` in options");const r=t.filePath||void 0;let a;if(t.development){if(typeof t.jsxDEV!="function")throw new TypeError("Expected `jsxDEV` in options when `development: true`");a=yM(r,t.jsxDEV)}else{if(typeof t.jsx!="function")throw new TypeError("Expected `jsx` in production options");if(typeof t.jsxs!="function")throw new TypeError("Expected `jsxs` in production options");a=bM(r,t.jsx,t.jsxs)}const s={Fragment:t.Fragment,ancestors:[],components:t.components||{},create:a,elementAttributeNameCase:t.elementAttributeNameCase||"react",evaluater:t.createEvaluater?t.createEvaluater():void 0,filePath:r,ignoreInvalidStyle:t.ignoreInvalidStyle||!1,passKeys:t.passKeys!==!1,passNode:t.passNode||!1,schema:t.space==="svg"?Op:WA,stylePropertyNameCase:t.stylePropertyNameCase||"dom",tableCellAlignToStyle:t.tableCellAlignToStyle!==!1},o=ww(s,e,void 0);return o&&typeof o!="string"?o:s.create(e,s.Fragment,{children:o||void 0},void 0)}function ww(e,t,r){if(t.type==="element")return fM(e,t,r);if(t.type==="mdxFlowExpression"||t.type==="mdxTextExpression")return hM(e,t);if(t.type==="mdxJsxFlowElement"||t.type==="mdxJsxTextElement")return pM(e,t,r);if(t.type==="mdxjsEsm")return mM(e,t);if(t.type==="root")return gM(e,t,r);if(t.type==="text")return xM(e,t)}function fM(e,t,r){const a=e.schema;let s=a;t.tagName.toLowerCase()==="svg"&&a.space==="html"&&(s=Op,e.schema=s),e.ancestors.push(t);const o=Nw(e,t.tagName,!1),c=vM(e,t);let d=Lp(e,t);return cM.has(t.tagName)&&(d=d.filter(function(f){return typeof f=="string"?!qA(f):!0})),Ew(e,c,o,t),Dp(c,d),e.ancestors.pop(),e.schema=a,e.create(t,o,c,r)}function hM(e,t){if(t.data&&t.data.estree&&e.evaluater){const a=t.data.estree.body[0];return a.type,e.evaluater.evaluateExpression(a.expression)}xo(e,t.position)}function mM(e,t){if(t.data&&t.data.estree&&e.evaluater)return e.evaluater.evaluateProgram(t.data.estree);xo(e,t.position)}function pM(e,t,r){const a=e.schema;let s=a;t.name==="svg"&&a.space==="html"&&(s=Op,e.schema=s),e.ancestors.push(t);const o=t.name===null?e.Fragment:Nw(e,t.name,!0),c=_M(e,t),d=Lp(e,t);return Ew(e,c,o,t),Dp(c,d),e.ancestors.pop(),e.schema=a,e.create(t,o,c,r)}function gM(e,t,r){const a={};return Dp(a,Lp(e,t)),e.create(t,e.Fragment,a,r)}function xM(e,t){return t.value}function Ew(e,t,r,a){typeof r!="string"&&r!==e.Fragment&&e.passNode&&(t.node=a)}function Dp(e,t){if(t.length>0){const r=t.length>1?t:t[0];r&&(e.children=r)}}function bM(e,t,r){return a;function a(s,o,c,d){const h=Array.isArray(c.children)?r:t;return d?h(o,c,d):h(o,c)}}function yM(e,t){return r;function r(a,s,o,c){const d=Array.isArray(o.children),f=Rp(a);return t(s,o,c,d,{columnNumber:f?f.column-1:void 0,fileName:e,lineNumber:f?f.line:void 0},void 0)}}function vM(e,t){const r={};let a,s;for(s in t.properties)if(s!=="children"&&jp.call(t.properties,s)){const o=wM(e,s,t.properties[s]);if(o){const[c,d]=o;e.tableCellAlignToStyle&&c==="align"&&typeof d=="string"&&uM.has(t.tagName)?a=d:r[c]=d}}if(a){const o=r.style||(r.style={});o[e.stylePropertyNameCase==="css"?"text-align":"textAlign"]=a}return r}function _M(e,t){const r={};for(const a of t.attributes)if(a.type==="mdxJsxExpressionAttribute")if(a.data&&a.data.estree&&e.evaluater){const o=a.data.estree.body[0];o.type;const c=o.expression;c.type;const d=c.properties[0];d.type,Object.assign(r,e.evaluater.evaluateExpression(d.argument))}else xo(e,t.position);else{const s=a.name;let o;if(a.value&&typeof a.value=="object")if(a.value.data&&a.value.data.estree&&e.evaluater){const d=a.value.data.estree.body[0];d.type,o=e.evaluater.evaluateExpression(d.expression)}else xo(e,t.position);else o=a.value===null?!0:a.value;r[s]=o}return r}function Lp(e,t){const r=[];let a=-1;const s=e.passKeys?new Map:lM;for(;++as?0:s+t:t=t>s?s:t,r=r>0?r:0,a.length<1e4)c=Array.from(a),c.unshift(t,r),e.splice(...c);else for(r&&e.splice(t,r);o0?(ar(e,e.length,0,t),e):t}const Cy={}.hasOwnProperty;function kw(e){const t={};let r=-1;for(;++r13&&r<32||r>126&&r<160||r>55295&&r<57344||r>64975&&r<65008||(r&65535)===65535||(r&65535)===65534||r>1114111?"�":String.fromCodePoint(r)}function Dr(e){return e.replace(/[\t\n\r ]+/g," ").replace(/^ | $/g,"").toLowerCase().toUpperCase()}const Ln=pa(/[A-Za-z]/),An=pa(/[\dA-Za-z]/),OM=pa(/[#-'*+\--9=?A-Z^-~]/);function ku(e){return e!==null&&(e<32||e===127)}const Wm=pa(/\d/),RM=pa(/[\dA-Fa-f]/),jM=pa(/[!-/:-@[-`{-~]/);function Be(e){return e!==null&&e<-2}function Tt(e){return e!==null&&(e<0||e===32)}function tt(e){return e===-2||e===-1||e===32}const Xu=pa(new RegExp("\\p{P}|\\p{S}","u")),Va=pa(/\s/);function pa(e){return t;function t(r){return r!==null&&r>-1&&e.test(String.fromCharCode(r))}}function rl(e){const t=[];let r=-1,a=0,s=0;for(;++r55295&&o<57344){const d=e.charCodeAt(r+1);o<56320&&d>56319&&d<57344?(c=String.fromCharCode(o,d),s=1):c="�"}else c=String.fromCharCode(o);c&&(t.push(e.slice(a,r),encodeURIComponent(c)),a=r+s+1,c=""),s&&(r+=s,s=0)}return t.join("")+e.slice(a)}function ot(e,t,r,a){const s=a?a-1:Number.POSITIVE_INFINITY;let o=0;return c;function c(f){return tt(f)?(e.enter(r),d(f)):t(f)}function d(f){return tt(f)&&o++c))return;const U=t.events.length;let I=U,X,j;for(;I--;)if(t.events[I][0]==="exit"&&t.events[I][1].type==="chunkFlow"){if(X){j=t.events[I][1].end;break}X=!0}for(w(a),R=U;RN;){const B=r[M];t.containerState=B[1],B[0].exit.call(t,e)}r.length=N}function k(){s.write([null]),o=void 0,s=void 0,t.containerState._closeFlow=void 0}}function BM(e,t,r){return ot(e,e.attempt(this.parser.constructs.document,t,r),"linePrefix",this.parser.constructs.disable.null.includes("codeIndented")?void 0:4)}function Xs(e){if(e===null||Tt(e)||Va(e))return 1;if(Xu(e))return 2}function Ku(e,t,r){const a=[];let s=-1;for(;++s1&&e[r][1].end.offset-e[r][1].start.offset>1?2:1;const g={...e[a][1].end},y={...e[r][1].start};Ay(g,-f),Ay(y,f),c={type:f>1?"strongSequence":"emphasisSequence",start:g,end:{...e[a][1].end}},d={type:f>1?"strongSequence":"emphasisSequence",start:{...e[r][1].start},end:y},o={type:f>1?"strongText":"emphasisText",start:{...e[a][1].end},end:{...e[r][1].start}},s={type:f>1?"strong":"emphasis",start:{...c.start},end:{...d.end}},e[a][1].end={...c.start},e[r][1].start={...d.end},h=[],e[a][1].end.offset-e[a][1].start.offset&&(h=xr(h,[["enter",e[a][1],t],["exit",e[a][1],t]])),h=xr(h,[["enter",s,t],["enter",c,t],["exit",c,t],["enter",o,t]]),h=xr(h,Ku(t.parser.constructs.insideSpan.null,e.slice(a+1,r),t)),h=xr(h,[["exit",o,t],["enter",d,t],["exit",d,t],["exit",s,t]]),e[r][1].end.offset-e[r][1].start.offset?(p=2,h=xr(h,[["enter",e[r][1],t],["exit",e[r][1],t]])):p=0,ar(e,a-1,r-a+3,h),r=a+h.length-p-2;break}}for(r=-1;++r0&&tt(R)?ot(e,k,"linePrefix",o+1)(R):k(R)}function k(R){return R===null||Be(R)?e.check(My,E,M)(R):(e.enter("codeFlowValue"),N(R))}function N(R){return R===null||Be(R)?(e.exit("codeFlowValue"),k(R)):(e.consume(R),N)}function M(R){return e.exit("codeFenced"),t(R)}function B(R,U,I){let X=0;return j;function j($){return R.enter("lineEnding"),R.consume($),R.exit("lineEnding"),z}function z($){return R.enter("codeFencedFence"),tt($)?ot(R,V,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)($):V($)}function V($){return $===d?(R.enter("codeFencedFenceSequence"),P($)):I($)}function P($){return $===d?(X++,R.consume($),P):X>=c?(R.exit("codeFencedFenceSequence"),tt($)?ot(R,T,"whitespace")($):T($)):I($)}function T($){return $===null||Be($)?(R.exit("codeFencedFence"),U($)):I($)}}}function ZM(e,t,r){const a=this;return s;function s(c){return c===null?r(c):(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),o)}function o(c){return a.parser.lazy[a.now().line]?r(c):t(c)}}const Nh={name:"codeIndented",tokenize:WM},QM={partial:!0,tokenize:JM};function WM(e,t,r){const a=this;return s;function s(h){return e.enter("codeIndented"),ot(e,o,"linePrefix",5)(h)}function o(h){const p=a.events[a.events.length-1];return p&&p[1].type==="linePrefix"&&p[2].sliceSerialize(p[1],!0).length>=4?c(h):r(h)}function c(h){return h===null?f(h):Be(h)?e.attempt(QM,c,f)(h):(e.enter("codeFlowValue"),d(h))}function d(h){return h===null||Be(h)?(e.exit("codeFlowValue"),c(h)):(e.consume(h),d)}function f(h){return e.exit("codeIndented"),t(h)}}function JM(e,t,r){const a=this;return s;function s(c){return a.parser.lazy[a.now().line]?r(c):Be(c)?(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),s):ot(e,o,"linePrefix",5)(c)}function o(c){const d=a.events[a.events.length-1];return d&&d[1].type==="linePrefix"&&d[2].sliceSerialize(d[1],!0).length>=4?t(c):Be(c)?s(c):r(c)}}const e5={name:"codeText",previous:n5,resolve:t5,tokenize:r5};function t5(e){let t=e.length-4,r=3,a,s;if((e[r][1].type==="lineEnding"||e[r][1].type==="space")&&(e[t][1].type==="lineEnding"||e[t][1].type==="space")){for(a=r;++a=this.left.length+this.right.length)throw new RangeError("Cannot access index `"+t+"` in a splice buffer of size `"+(this.left.length+this.right.length)+"`");return tthis.left.length?this.right.slice(this.right.length-a+this.left.length,this.right.length-t+this.left.length).reverse():this.left.slice(t).concat(this.right.slice(this.right.length-a+this.left.length).reverse())}splice(t,r,a){const s=r||0;this.setCursor(Math.trunc(t));const o=this.right.splice(this.right.length-s,Number.POSITIVE_INFINITY);return a&&Jl(this.left,a),o.reverse()}pop(){return this.setCursor(Number.POSITIVE_INFINITY),this.left.pop()}push(t){this.setCursor(Number.POSITIVE_INFINITY),this.left.push(t)}pushMany(t){this.setCursor(Number.POSITIVE_INFINITY),Jl(this.left,t)}unshift(t){this.setCursor(0),this.right.push(t)}unshiftMany(t){this.setCursor(0),Jl(this.right,t.reverse())}setCursor(t){if(!(t===this.left.length||t>this.left.length&&this.right.length===0||t<0&&this.left.length===0))if(t=4?t(c):e.interrupt(a.parser.constructs.flow,r,t)(c)}}function Rw(e,t,r,a,s,o,c,d,f){const h=f||Number.POSITIVE_INFINITY;let p=0;return g;function g(w){return w===60?(e.enter(a),e.enter(s),e.enter(o),e.consume(w),e.exit(o),y):w===null||w===32||w===41||ku(w)?r(w):(e.enter(a),e.enter(c),e.enter(d),e.enter("chunkString",{contentType:"string"}),E(w))}function y(w){return w===62?(e.enter(o),e.consume(w),e.exit(o),e.exit(s),e.exit(a),t):(e.enter(d),e.enter("chunkString",{contentType:"string"}),b(w))}function b(w){return w===62?(e.exit("chunkString"),e.exit(d),y(w)):w===null||w===60||Be(w)?r(w):(e.consume(w),w===92?_:b)}function _(w){return w===60||w===62||w===92?(e.consume(w),b):b(w)}function E(w){return!p&&(w===null||w===41||Tt(w))?(e.exit("chunkString"),e.exit(d),e.exit(c),e.exit(a),t(w)):p999||b===null||b===91||b===93&&!f||b===94&&!d&&"_hiddenFootnoteSupport"in c.parser.constructs?r(b):b===93?(e.exit(o),e.enter(s),e.consume(b),e.exit(s),e.exit(a),t):Be(b)?(e.enter("lineEnding"),e.consume(b),e.exit("lineEnding"),p):(e.enter("chunkString",{contentType:"string"}),g(b))}function g(b){return b===null||b===91||b===93||Be(b)||d++>999?(e.exit("chunkString"),p(b)):(e.consume(b),f||(f=!tt(b)),b===92?y:g)}function y(b){return b===91||b===92||b===93?(e.consume(b),d++,g):g(b)}}function Dw(e,t,r,a,s,o){let c;return d;function d(y){return y===34||y===39||y===40?(e.enter(a),e.enter(s),e.consume(y),e.exit(s),c=y===40?41:y,f):r(y)}function f(y){return y===c?(e.enter(s),e.consume(y),e.exit(s),e.exit(a),t):(e.enter(o),h(y))}function h(y){return y===c?(e.exit(o),f(c)):y===null?r(y):Be(y)?(e.enter("lineEnding"),e.consume(y),e.exit("lineEnding"),ot(e,h,"linePrefix")):(e.enter("chunkString",{contentType:"string"}),p(y))}function p(y){return y===c||y===null||Be(y)?(e.exit("chunkString"),h(y)):(e.consume(y),y===92?g:p)}function g(y){return y===c||y===92?(e.consume(y),p):p(y)}}function co(e,t){let r;return a;function a(s){return Be(s)?(e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),r=!0,a):tt(s)?ot(e,a,r?"linePrefix":"lineSuffix")(s):t(s)}}const d5={name:"definition",tokenize:h5},f5={partial:!0,tokenize:m5};function h5(e,t,r){const a=this;let s;return o;function o(b){return e.enter("definition"),c(b)}function c(b){return jw.call(a,e,d,r,"definitionLabel","definitionLabelMarker","definitionLabelString")(b)}function d(b){return s=Dr(a.sliceSerialize(a.events[a.events.length-1][1]).slice(1,-1)),b===58?(e.enter("definitionMarker"),e.consume(b),e.exit("definitionMarker"),f):r(b)}function f(b){return Tt(b)?co(e,h)(b):h(b)}function h(b){return Rw(e,p,r,"definitionDestination","definitionDestinationLiteral","definitionDestinationLiteralMarker","definitionDestinationRaw","definitionDestinationString")(b)}function p(b){return e.attempt(f5,g,g)(b)}function g(b){return tt(b)?ot(e,y,"whitespace")(b):y(b)}function y(b){return b===null||Be(b)?(e.exit("definition"),a.parser.defined.push(s),t(b)):r(b)}}function m5(e,t,r){return a;function a(d){return Tt(d)?co(e,s)(d):r(d)}function s(d){return Dw(e,o,r,"definitionTitle","definitionTitleMarker","definitionTitleString")(d)}function o(d){return tt(d)?ot(e,c,"whitespace")(d):c(d)}function c(d){return d===null||Be(d)?t(d):r(d)}}const p5={name:"hardBreakEscape",tokenize:g5};function g5(e,t,r){return a;function a(o){return e.enter("hardBreakEscape"),e.consume(o),s}function s(o){return Be(o)?(e.exit("hardBreakEscape"),t(o)):r(o)}}const x5={name:"headingAtx",resolve:b5,tokenize:y5};function b5(e,t){let r=e.length-2,a=3,s,o;return e[a][1].type==="whitespace"&&(a+=2),r-2>a&&e[r][1].type==="whitespace"&&(r-=2),e[r][1].type==="atxHeadingSequence"&&(a===r-1||r-4>a&&e[r-2][1].type==="whitespace")&&(r-=a+1===r?2:4),r>a&&(s={type:"atxHeadingText",start:e[a][1].start,end:e[r][1].end},o={type:"chunkText",start:e[a][1].start,end:e[r][1].end,contentType:"text"},ar(e,a,r-a+1,[["enter",s,t],["enter",o,t],["exit",o,t],["exit",s,t]])),e}function y5(e,t,r){let a=0;return s;function s(p){return e.enter("atxHeading"),o(p)}function o(p){return e.enter("atxHeadingSequence"),c(p)}function c(p){return p===35&&a++<6?(e.consume(p),c):p===null||Tt(p)?(e.exit("atxHeadingSequence"),d(p)):r(p)}function d(p){return p===35?(e.enter("atxHeadingSequence"),f(p)):p===null||Be(p)?(e.exit("atxHeading"),t(p)):tt(p)?ot(e,d,"whitespace")(p):(e.enter("atxHeadingText"),h(p))}function f(p){return p===35?(e.consume(p),f):(e.exit("atxHeadingSequence"),d(p))}function h(p){return p===null||p===35||Tt(p)?(e.exit("atxHeadingText"),d(p)):(e.consume(p),h)}}const v5=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","search","section","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],Ry=["pre","script","style","textarea"],_5={concrete:!0,name:"htmlFlow",resolveTo:N5,tokenize:S5},w5={partial:!0,tokenize:C5},E5={partial:!0,tokenize:k5};function N5(e){let t=e.length;for(;t--&&!(e[t][0]==="enter"&&e[t][1].type==="htmlFlow"););return t>1&&e[t-2][1].type==="linePrefix"&&(e[t][1].start=e[t-2][1].start,e[t+1][1].start=e[t-2][1].start,e.splice(t-2,2)),e}function S5(e,t,r){const a=this;let s,o,c,d,f;return h;function h(L){return p(L)}function p(L){return e.enter("htmlFlow"),e.enter("htmlFlowData"),e.consume(L),g}function g(L){return L===33?(e.consume(L),y):L===47?(e.consume(L),o=!0,E):L===63?(e.consume(L),s=3,a.interrupt?t:C):Ln(L)?(e.consume(L),c=String.fromCharCode(L),S):r(L)}function y(L){return L===45?(e.consume(L),s=2,b):L===91?(e.consume(L),s=5,d=0,_):Ln(L)?(e.consume(L),s=4,a.interrupt?t:C):r(L)}function b(L){return L===45?(e.consume(L),a.interrupt?t:C):r(L)}function _(L){const G="CDATA[";return L===G.charCodeAt(d++)?(e.consume(L),d===G.length?a.interrupt?t:V:_):r(L)}function E(L){return Ln(L)?(e.consume(L),c=String.fromCharCode(L),S):r(L)}function S(L){if(L===null||L===47||L===62||Tt(L)){const G=L===47,q=c.toLowerCase();return!G&&!o&&Ry.includes(q)?(s=1,a.interrupt?t(L):V(L)):v5.includes(c.toLowerCase())?(s=6,G?(e.consume(L),w):a.interrupt?t(L):V(L)):(s=7,a.interrupt&&!a.parser.lazy[a.now().line]?r(L):o?k(L):N(L))}return L===45||An(L)?(e.consume(L),c+=String.fromCharCode(L),S):r(L)}function w(L){return L===62?(e.consume(L),a.interrupt?t:V):r(L)}function k(L){return tt(L)?(e.consume(L),k):j(L)}function N(L){return L===47?(e.consume(L),j):L===58||L===95||Ln(L)?(e.consume(L),M):tt(L)?(e.consume(L),N):j(L)}function M(L){return L===45||L===46||L===58||L===95||An(L)?(e.consume(L),M):B(L)}function B(L){return L===61?(e.consume(L),R):tt(L)?(e.consume(L),B):N(L)}function R(L){return L===null||L===60||L===61||L===62||L===96?r(L):L===34||L===39?(e.consume(L),f=L,U):tt(L)?(e.consume(L),R):I(L)}function U(L){return L===f?(e.consume(L),f=null,X):L===null||Be(L)?r(L):(e.consume(L),U)}function I(L){return L===null||L===34||L===39||L===47||L===60||L===61||L===62||L===96||Tt(L)?B(L):(e.consume(L),I)}function X(L){return L===47||L===62||tt(L)?N(L):r(L)}function j(L){return L===62?(e.consume(L),z):r(L)}function z(L){return L===null||Be(L)?V(L):tt(L)?(e.consume(L),z):r(L)}function V(L){return L===45&&s===2?(e.consume(L),O):L===60&&s===1?(e.consume(L),H):L===62&&s===4?(e.consume(L),D):L===63&&s===3?(e.consume(L),C):L===93&&s===5?(e.consume(L),Z):Be(L)&&(s===6||s===7)?(e.exit("htmlFlowData"),e.check(w5,Y,P)(L)):L===null||Be(L)?(e.exit("htmlFlowData"),P(L)):(e.consume(L),V)}function P(L){return e.check(E5,T,Y)(L)}function T(L){return e.enter("lineEnding"),e.consume(L),e.exit("lineEnding"),$}function $(L){return L===null||Be(L)?P(L):(e.enter("htmlFlowData"),V(L))}function O(L){return L===45?(e.consume(L),C):V(L)}function H(L){return L===47?(e.consume(L),c="",K):V(L)}function K(L){if(L===62){const G=c.toLowerCase();return Ry.includes(G)?(e.consume(L),D):V(L)}return Ln(L)&&c.length<8?(e.consume(L),c+=String.fromCharCode(L),K):V(L)}function Z(L){return L===93?(e.consume(L),C):V(L)}function C(L){return L===62?(e.consume(L),D):L===45&&s===2?(e.consume(L),C):V(L)}function D(L){return L===null||Be(L)?(e.exit("htmlFlowData"),Y(L)):(e.consume(L),D)}function Y(L){return e.exit("htmlFlow"),t(L)}}function k5(e,t,r){const a=this;return s;function s(c){return Be(c)?(e.enter("lineEnding"),e.consume(c),e.exit("lineEnding"),o):r(c)}function o(c){return a.parser.lazy[a.now().line]?r(c):t(c)}}function C5(e,t,r){return a;function a(s){return e.enter("lineEnding"),e.consume(s),e.exit("lineEnding"),e.attempt(jo,t,r)}}const T5={name:"htmlText",tokenize:A5};function A5(e,t,r){const a=this;let s,o,c;return d;function d(C){return e.enter("htmlText"),e.enter("htmlTextData"),e.consume(C),f}function f(C){return C===33?(e.consume(C),h):C===47?(e.consume(C),B):C===63?(e.consume(C),N):Ln(C)?(e.consume(C),I):r(C)}function h(C){return C===45?(e.consume(C),p):C===91?(e.consume(C),o=0,_):Ln(C)?(e.consume(C),k):r(C)}function p(C){return C===45?(e.consume(C),b):r(C)}function g(C){return C===null?r(C):C===45?(e.consume(C),y):Be(C)?(c=g,H(C)):(e.consume(C),g)}function y(C){return C===45?(e.consume(C),b):g(C)}function b(C){return C===62?O(C):C===45?y(C):g(C)}function _(C){const D="CDATA[";return C===D.charCodeAt(o++)?(e.consume(C),o===D.length?E:_):r(C)}function E(C){return C===null?r(C):C===93?(e.consume(C),S):Be(C)?(c=E,H(C)):(e.consume(C),E)}function S(C){return C===93?(e.consume(C),w):E(C)}function w(C){return C===62?O(C):C===93?(e.consume(C),w):E(C)}function k(C){return C===null||C===62?O(C):Be(C)?(c=k,H(C)):(e.consume(C),k)}function N(C){return C===null?r(C):C===63?(e.consume(C),M):Be(C)?(c=N,H(C)):(e.consume(C),N)}function M(C){return C===62?O(C):N(C)}function B(C){return Ln(C)?(e.consume(C),R):r(C)}function R(C){return C===45||An(C)?(e.consume(C),R):U(C)}function U(C){return Be(C)?(c=U,H(C)):tt(C)?(e.consume(C),U):O(C)}function I(C){return C===45||An(C)?(e.consume(C),I):C===47||C===62||Tt(C)?X(C):r(C)}function X(C){return C===47?(e.consume(C),O):C===58||C===95||Ln(C)?(e.consume(C),j):Be(C)?(c=X,H(C)):tt(C)?(e.consume(C),X):O(C)}function j(C){return C===45||C===46||C===58||C===95||An(C)?(e.consume(C),j):z(C)}function z(C){return C===61?(e.consume(C),V):Be(C)?(c=z,H(C)):tt(C)?(e.consume(C),z):X(C)}function V(C){return C===null||C===60||C===61||C===62||C===96?r(C):C===34||C===39?(e.consume(C),s=C,P):Be(C)?(c=V,H(C)):tt(C)?(e.consume(C),V):(e.consume(C),T)}function P(C){return C===s?(e.consume(C),s=void 0,$):C===null?r(C):Be(C)?(c=P,H(C)):(e.consume(C),P)}function T(C){return C===null||C===34||C===39||C===60||C===61||C===96?r(C):C===47||C===62||Tt(C)?X(C):(e.consume(C),T)}function $(C){return C===47||C===62||Tt(C)?X(C):r(C)}function O(C){return C===62?(e.consume(C),e.exit("htmlTextData"),e.exit("htmlText"),t):r(C)}function H(C){return e.exit("htmlTextData"),e.enter("lineEnding"),e.consume(C),e.exit("lineEnding"),K}function K(C){return tt(C)?ot(e,Z,"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(C):Z(C)}function Z(C){return e.enter("htmlTextData"),c(C)}}const Bp={name:"labelEnd",resolveAll:j5,resolveTo:D5,tokenize:L5},M5={tokenize:z5},O5={tokenize:I5},R5={tokenize:B5};function j5(e){let t=-1;const r=[];for(;++t=3&&(h===null||Be(h))?(e.exit("thematicBreak"),t(h)):r(h)}function f(h){return h===s?(e.consume(h),a++,f):(e.exit("thematicBreakSequence"),tt(h)?ot(e,d,"whitespace")(h):d(h))}}const Fn={continuation:{tokenize:X5},exit:Z5,name:"list",tokenize:Y5},G5={partial:!0,tokenize:Q5},V5={partial:!0,tokenize:K5};function Y5(e,t,r){const a=this,s=a.events[a.events.length-1];let o=s&&s[1].type==="linePrefix"?s[2].sliceSerialize(s[1],!0).length:0,c=0;return d;function d(b){const _=a.containerState.type||(b===42||b===43||b===45?"listUnordered":"listOrdered");if(_==="listUnordered"?!a.containerState.marker||b===a.containerState.marker:Wm(b)){if(a.containerState.type||(a.containerState.type=_,e.enter(_,{_container:!0})),_==="listUnordered")return e.enter("listItemPrefix"),b===42||b===45?e.check(xu,r,h)(b):h(b);if(!a.interrupt||b===49)return e.enter("listItemPrefix"),e.enter("listItemValue"),f(b)}return r(b)}function f(b){return Wm(b)&&++c<10?(e.consume(b),f):(!a.interrupt||c<2)&&(a.containerState.marker?b===a.containerState.marker:b===41||b===46)?(e.exit("listItemValue"),h(b)):r(b)}function h(b){return e.enter("listItemMarker"),e.consume(b),e.exit("listItemMarker"),a.containerState.marker=a.containerState.marker||b,e.check(jo,a.interrupt?r:p,e.attempt(G5,y,g))}function p(b){return a.containerState.initialBlankLine=!0,o++,y(b)}function g(b){return tt(b)?(e.enter("listItemPrefixWhitespace"),e.consume(b),e.exit("listItemPrefixWhitespace"),y):r(b)}function y(b){return a.containerState.size=o+a.sliceSerialize(e.exit("listItemPrefix"),!0).length,t(b)}}function X5(e,t,r){const a=this;return a.containerState._closeFlow=void 0,e.check(jo,s,o);function s(d){return a.containerState.furtherBlankLines=a.containerState.furtherBlankLines||a.containerState.initialBlankLine,ot(e,t,"listItemIndent",a.containerState.size+1)(d)}function o(d){return a.containerState.furtherBlankLines||!tt(d)?(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,c(d)):(a.containerState.furtherBlankLines=void 0,a.containerState.initialBlankLine=void 0,e.attempt(V5,t,c)(d))}function c(d){return a.containerState._closeFlow=!0,a.interrupt=void 0,ot(e,e.attempt(Fn,t,r),"linePrefix",a.parser.constructs.disable.null.includes("codeIndented")?void 0:4)(d)}}function K5(e,t,r){const a=this;return ot(e,s,"listItemIndent",a.containerState.size+1);function s(o){const c=a.events[a.events.length-1];return c&&c[1].type==="listItemIndent"&&c[2].sliceSerialize(c[1],!0).length===a.containerState.size?t(o):r(o)}}function Z5(e){e.exit(this.containerState.type)}function Q5(e,t,r){const a=this;return ot(e,s,"listItemPrefixWhitespace",a.parser.constructs.disable.null.includes("codeIndented")?void 0:5);function s(o){const c=a.events[a.events.length-1];return!tt(o)&&c&&c[1].type==="listItemPrefixWhitespace"?t(o):r(o)}}const jy={name:"setextUnderline",resolveTo:W5,tokenize:J5};function W5(e,t){let r=e.length,a,s,o;for(;r--;)if(e[r][0]==="enter"){if(e[r][1].type==="content"){a=r;break}e[r][1].type==="paragraph"&&(s=r)}else e[r][1].type==="content"&&e.splice(r,1),!o&&e[r][1].type==="definition"&&(o=r);const c={type:"setextHeading",start:{...e[a][1].start},end:{...e[e.length-1][1].end}};return e[s][1].type="setextHeadingText",o?(e.splice(s,0,["enter",c,t]),e.splice(o+1,0,["exit",e[a][1],t]),e[a][1].end={...e[o][1].end}):e[a][1]=c,e.push(["exit",c,t]),e}function J5(e,t,r){const a=this;let s;return o;function o(h){let p=a.events.length,g;for(;p--;)if(a.events[p][1].type!=="lineEnding"&&a.events[p][1].type!=="linePrefix"&&a.events[p][1].type!=="content"){g=a.events[p][1].type==="paragraph";break}return!a.parser.lazy[a.now().line]&&(a.interrupt||g)?(e.enter("setextHeadingLine"),s=h,c(h)):r(h)}function c(h){return e.enter("setextHeadingLineSequence"),d(h)}function d(h){return h===s?(e.consume(h),d):(e.exit("setextHeadingLineSequence"),tt(h)?ot(e,f,"lineSuffix")(h):f(h))}function f(h){return h===null||Be(h)?(e.exit("setextHeadingLine"),t(h)):r(h)}}const eO={tokenize:tO};function tO(e){const t=this,r=e.attempt(jo,a,e.attempt(this.parser.constructs.flowInitial,s,ot(e,e.attempt(this.parser.constructs.flow,s,e.attempt(s5,s)),"linePrefix")));return r;function a(o){if(o===null){e.consume(o);return}return e.enter("lineEndingBlank"),e.consume(o),e.exit("lineEndingBlank"),t.currentConstruct=void 0,r}function s(o){if(o===null){e.consume(o);return}return e.enter("lineEnding"),e.consume(o),e.exit("lineEnding"),t.currentConstruct=void 0,r}}const nO={resolveAll:zw()},rO=Lw("string"),iO=Lw("text");function Lw(e){return{resolveAll:zw(e==="text"?aO:void 0),tokenize:t};function t(r){const a=this,s=this.parser.constructs[e],o=r.attempt(s,c,d);return c;function c(p){return h(p)?o(p):d(p)}function d(p){if(p===null){r.consume(p);return}return r.enter("data"),r.consume(p),f}function f(p){return h(p)?(r.exit("data"),o(p)):(r.consume(p),f)}function h(p){if(p===null)return!0;const g=s[p];let y=-1;if(g)for(;++y-1){const d=c[0];typeof d=="string"?c[0]=d.slice(a):c.shift()}o>0&&c.push(e[s].slice(0,o))}return c}function bO(e,t){let r=-1;const a=[];let s;for(;++r