@lynn123411/dsh-a6api 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/client/index.ts", "../src/client/components/A6ApiSettings.tsx", "../src/client/store.ts", "../src/client/components/MerchantCard.tsx", "../src/client/components/BalanceCard.tsx", "../src/client/components/ConfigPanel.tsx", "../src/client/styles/main.css"],
4
+ "sourcesContent": ["import { A6ApiSettingsPanel } from './components/A6ApiSettings.js';\nimport mainCss from './styles/main.css';\n\nexport const name = '@lynn123411/dsh-a6api';\nexport const inject = ['slots'];\n\nfunction injectStyles() {\n if (typeof document === 'undefined') return;\n const styleId = 'dsh-a6api-styles';\n if (!document.getElementById(styleId)) {\n const style = document.createElement('style');\n style.id = styleId;\n style.textContent = mainCss;\n document.head.appendChild(style);\n }\n}\n\nexport function apply(ctx: any): void {\n injectStyles();\n if (typeof window === 'undefined') return;\n\n try {\n const slots = ctx?.slots || (ctx?.get ? ctx.get('slots') : null);\n if (!slots || typeof slots.inject !== 'function') return;\n\n slots.inject('settings.section', () => {\n return slots.register(\n {\n name: 'settings.section',\n id: 'dsh-a6api',\n order: 4,\n label: () => 'A6API \u805A\u5408\u7AD9',\n },\n A6ApiSettingsPanel,\n );\n });\n } catch (err) {\n console.warn('[dsh-a6api] Failed to inject settings section:', err);\n }\n}\n", "import React, { useState, useEffect } from 'react';\nimport { store, type StoreState } from '../store.js';\nimport { MerchantCard } from './MerchantCard.js';\nimport { AccountPanel } from './BalanceCard.js';\nimport { ConfigPanel } from './ConfigPanel.js';\n\ntype TabKey = 'models' | 'account' | 'config';\n\nexport const A6ApiSettingsPanel: React.FC = () => {\n const [state, setState] = useState<StoreState>(store.getState());\n const [activeTab, setActiveTab] = useState<TabKey>('models');\n const [filterMode, setFilterMode] = useState<'all' | 'enabled' | 'probed'>('all');\n const [searchQuery, setSearchQuery] = useState('');\n const [probingAll, setProbingAll] = useState(false);\n const [refreshing, setRefreshing] = useState(false);\n const [refreshSuccess, setRefreshSuccess] = useState(false);\n\n useEffect(() => {\n const unsub = store.subscribe(() => {\n setState({ ...store.getState() });\n });\n store.fetchState();\n return unsub;\n }, []);\n\n const handleProbeAll = async () => {\n setProbingAll(true);\n await store.probeAll();\n setProbingAll(false);\n };\n\n const handleRefreshState = async () => {\n setRefreshing(true);\n await store.fetchState();\n setRefreshing(false);\n setRefreshSuccess(true);\n setTimeout(() => setRefreshSuccess(false), 2000);\n };\n\n const inDshCount = state.models.filter((m) => m.inDsh).length;\n const probedCount = state.models.filter((m) => Boolean(m.merchant)).length;\n\n const filteredModels = state.models.filter((m) => {\n if (filterMode === 'enabled' && !m.inDsh) return false;\n if (filterMode === 'probed' && !m.merchant) return false;\n if (searchQuery.trim()) {\n const q = searchQuery.toLowerCase().trim();\n return (\n m.model_name.toLowerCase().includes(q) ||\n m.brand.toLowerCase().includes(q) ||\n (m.merchant?.supplier_name && m.merchant.supplier_name.toLowerCase().includes(q)) ||\n (m.merchant?.channel_name && m.merchant.channel_name.toLowerCase().includes(q)) ||\n (m.merchant?.description && m.merchant.description.toLowerCase().includes(q))\n );\n }\n return true;\n });\n\n // \u56FA\u5B9A\u6A21\u578B\u4F4D\u7F6E\uFF1A\u542F\u7528\u7684\u6392\u5728\u6700\u524D\u9762\uFF0C\u672A\u542F\u7528\u7684\u6392\u5728\u540E\u9762\uFF1B\u7EC4\u5185\u6309\u6A21\u578B\u540D\u79F0\u5B57\u6BCD\u7EDD\u5BF9\u7A33\u5B9A\u6392\u5E8F\n const sortedModels = [...filteredModels].sort((a, b) => {\n if (a.inDsh !== b.inDsh) {\n return a.inDsh ? -1 : 1;\n }\n return a.model_name.localeCompare(b.model_name);\n });\n\n return (\n <div className=\"dsh-a6-container\">\n {/* 1. Header Title & Description */}\n <div className=\"dsh-a6-main-header\">\n <div className=\"dsh-a6-header-text\">\n <h2 className=\"dsh-a6-main-title\">A6API \u805A\u5408\u7AD9</h2>\n <p className=\"dsh-a6-main-subtitle\">\n \u805A\u5408\u5168\u7403\u4E3B\u6D41\u4E0E\u9AD8\u6027\u4EF7\u6BD4\u6A21\u578B\uFF0C\u5B9E\u65F6\u76D1\u63A7\u5546\u6237\u6307\u6807\u3001\u4EF7\u683C\u500D\u7387\u4E0E\u8D26\u6237\u8D44\u4EA7\u3002\n </p>\n </div>\n\n {state.balance?.hasAccountAuth && (\n <div\n className=\"dsh-a6-header-balance-badge\"\n onClick={() => setActiveTab('account')}\n title=\"\u70B9\u51FB\u5207\u6362\u81F3\u300C\u8D26\u6237\u8D44\u4EA7\u300D\u9875\u9762\"\n >\n <span className=\"dsh-a6-hb-label\">\u8D26\u6237\u4F59\u989D:</span>\n <span className=\"dsh-a6-hb-amount\">{state.balance.accountBalanceFormatted}</span>\n </div>\n )}\n </div>\n\n {/* 2. Top Navigation Tabs */}\n <div className=\"dsh-a6-nav-tabs\">\n <button\n type=\"button\"\n className={`dsh-a6-nav-tab ${activeTab === 'models' ? 'active' : ''}`}\n onClick={() => setActiveTab('models')}\n >\n <span>\u53EF\u7528\u6A21\u578B</span>\n <span className=\"dsh-a6-tab-badge\">{state.models.length}</span>\n </button>\n\n <button\n type=\"button\"\n className={`dsh-a6-nav-tab ${activeTab === 'account' ? 'active' : ''}`}\n onClick={() => setActiveTab('account')}\n >\n <span>\u8D26\u6237\u8D44\u4EA7</span>\n {state.balance?.hasAccountAuth && (\n <span className=\"dsh-a6-tab-badge success\">\n {state.balance.accountBalanceFormatted}\n </span>\n )}\n </button>\n\n <button\n type=\"button\"\n className={`dsh-a6-nav-tab ${activeTab === 'config' ? 'active' : ''}`}\n onClick={() => setActiveTab('config')}\n >\n <span>\u57FA\u7840\u914D\u7F6E</span>\n </button>\n </div>\n\n {/* 3. Tab Content Pages */}\n {activeTab === 'models' && (\n <div className=\"dsh-a6-tab-page models-page\">\n {/* Models Section Toolbar */}\n <div className=\"dsh-a6-section-header\">\n <div className=\"dsh-a6-filter-group\">\n <button\n type=\"button\"\n className={`dsh-a6-filter-btn ${filterMode === 'all' ? 'active' : ''}`}\n onClick={() => setFilterMode('all')}\n >\n \u5168\u90E8 ({state.models.length})\n </button>\n <button\n type=\"button\"\n className={`dsh-a6-filter-btn ${filterMode === 'enabled' ? 'active' : ''}`}\n onClick={() => setFilterMode('enabled')}\n >\n \u5DF2\u542F\u7528 ({inDshCount})\n </button>\n <button\n type=\"button\"\n className={`dsh-a6-filter-btn ${filterMode === 'probed' ? 'active' : ''}`}\n onClick={() => setFilterMode('probed')}\n >\n \u5DF2\u63A2\u6D4B ({probedCount})\n </button>\n </div>\n\n <div className=\"dsh-a6-toolbar-right\">\n <div className=\"dsh-a6-search-wrapper\">\n <input\n type=\"text\"\n className=\"dsh-a6-input dsh-a6-search-input\"\n placeholder=\"\u641C\u7D22\u6A21\u578B / \u4F9B\u5E94\u5546 / \u6E20\u9053...\"\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n />\n {searchQuery && (\n <button\n type=\"button\"\n className=\"dsh-a6-clear-btn\"\n onClick={() => setSearchQuery('')}\n title=\"\u6E05\u7A7A\u641C\u7D22\"\n >\n \u00D7\n </button>\n )}\n </div>\n\n <button\n type=\"button\"\n className={`dsh-a6-btn dsh-a6-btn-secondary dsh-a6-btn-sm ${refreshSuccess ? 'dsh-a6-btn-refresh-ok' : ''}`}\n onClick={handleRefreshState}\n disabled={refreshing}\n data-tooltip=\"\u91CD\u65B0\u5411 A6API \u63A5\u53E3\u62C9\u53D6\u5F53\u524D\u4EE4\u724C\u7684\u53EF\u7528\u6A21\u578B\u5217\u8868\u53CA\u5DF2\u7F13\u5B58\u5546\u6237\u6307\u6807\uFF08\u4E0D\u6D88\u8017 Token\uFF09\"\n data-tooltip-pos=\"down\"\n >\n {refreshing ? '\u5237\u65B0\u4E2D...' : refreshSuccess ? '\u5DF2\u5237\u65B0 \u2713' : '\u5237\u65B0\u5217\u8868'}\n </button>\n\n <button\n type=\"button\"\n className=\"dsh-a6-btn dsh-a6-btn-primary dsh-a6-btn-sm\"\n onClick={handleProbeAll}\n disabled={probingAll || state.models.length === 0}\n data-tooltip=\"\u5BF9\u5F53\u524D\u4EE4\u724C\u652F\u6301\u7684\u6240\u6709\u6A21\u578B\u9010\u4E2A\u53D1\u9001\u4E00\u6B21\u8BF7\u6C42\uFF0C\u6279\u91CF\u6355\u83B7\u5546\u6237\u8DEF\u7531\u4E0E\u6700\u65B0\u884C\u60C5\uFF08\u6BCF\u4E2A\u6A21\u578B\u6D88\u8017\u5C11\u91CFToken\uFF09\"\n data-tooltip-pos=\"down-left\"\n >\n {probingAll ? '\u5168\u91CF\u63A2\u6D4B\u4E2D...' : '\u4E00\u952E\u5168\u91CF\u63A2\u6D4B'}\n </button>\n </div>\n </div>\n\n {/* Model Cards List */}\n <div className=\"dsh-a6-cards-list\">\n {state.loading && state.models.length === 0 ? (\n <div className=\"dsh-a6-empty-state\">\n <div className=\"dsh-a6-spinner\" />\n <span>\u6B63\u5728\u8FDE\u63A5 A6API \u805A\u5408\u7AD9\u5E76\u52A0\u8F7D\u6A21\u578B\u884C\u60C5...</span>\n </div>\n ) : sortedModels.length > 0 ? (\n sortedModels.map((m) => (\n <MerchantCard key={m.model_name} model={m} />\n ))\n ) : (\n <div className=\"dsh-a6-empty-state\">\n {searchQuery ? (\n <span>\u672A\u641C\u7D22\u5230\u5339\u914D\u300C{searchQuery}\u300D\u7684\u6A21\u578B</span>\n ) : filterMode === 'enabled' ? (\n <span>\n \u5F53\u524D\u5C1A\u672A\u5728 DSH \u4E2D\u542F\u7528\u4EFB\u4F55 A6API \u6A21\u578B\uFF0C\u70B9\u51FB\u6A21\u578B\u5361\u7247\u53F3\u4FA7\u300C\u6DFB\u52A0\u5230 DSH\u300D\u5373\u53EF\u542F\u7528\u3002\n </span>\n ) : filterMode === 'probed' ? (\n <span>\n \u5C1A\u672A\u63A2\u6D4B\u4EFB\u4F55\u6A21\u578B\u5546\u6237\u7EBF\u8DEF\uFF0C\u70B9\u51FB\u6A21\u578B\u5361\u7247\u4E0A\u7684\u300C\u63A2\u6D4B\u5546\u5BB6\u300D\u6216\u4E0A\u65B9\u300C\u4E00\u952E\u5168\u91CF\u63A2\u6D4B\u300D\u5373\u53EF\u5F00\u59CB\u3002\n </span>\n ) : !state.config.apiKey ? (\n <span>\n \u8BF7\u524D\u5F80\u300C\u57FA\u7840\u914D\u7F6E\u300D\u9875\u9762\u586B\u5165\u60A8\u7684 A6API \u4EE4\u724C (API Key) \u5E76\u4FDD\u5B58\uFF0C\u5373\u53EF\u81EA\u52A8\u52A0\u8F7D\u53EF\u7528\u6A21\u578B\u5217\u8868\u3002\n </span>\n ) : (\n <span>\u5F53\u524D\u4EE4\u724C\u6682\u65E0\u53EF\u7528\u6A21\u578B\uFF0C\u8BF7\u68C0\u67E5 A6API \u63A7\u5236\u53F0\u4E2D\u7684\u4EE4\u724C\u9650\u5236\u8BBE\u7F6E\u3002</span>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n\n {activeTab === 'account' && (\n <div className=\"dsh-a6-tab-page account-page\">\n <AccountPanel\n balance={state.balance}\n config={state.config}\n recentLogs={state.recentLogs}\n onNavigateToConfig={() => setActiveTab('config')}\n />\n </div>\n )}\n\n {activeTab === 'config' && (\n <div className=\"dsh-a6-tab-page config-page\">\n <ConfigPanel\n config={state.config}\n dshConfiguredModels={state.dshConfiguredModels}\n />\n </div>\n )}\n </div>\n );\n};\n", "import type {\n A6ApiConfig,\n A6ApiStateResponse,\n BalanceInfo,\n ModelCardData,\n ApiRoutingLogItem,\n} from '../types.js';\n\nexport interface StoreState {\n loading: boolean;\n config: A6ApiConfig;\n balance: BalanceInfo | null;\n models: ModelCardData[];\n dshConfiguredModels: string[];\n recentLogs: ApiRoutingLogItem[];\n probingModelNames: Set<string>;\n error: string | null;\n}\n\ntype Listener = () => void;\n\nclass A6ApiStore {\n private state: StoreState = {\n loading: true,\n config: {\n baseURL: 'https://api.a6api.com',\n apiKey: '',\n userId: '',\n activeModels: [],\n },\n balance: null,\n models: [],\n dshConfiguredModels: [],\n recentLogs: [],\n probingModelNames: new Set(),\n error: null,\n };\n\n private listeners: Set<Listener> = new Set();\n private autoRefreshTimer: any = null;\n\n constructor() {\n this.startAutoRefresh();\n }\n\n public subscribe(listener: Listener): () => void {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private notify() {\n for (const l of this.listeners) {\n try {\n l();\n } catch (err) {\n console.error('[dsh-a6api] listener error:', err);\n }\n }\n }\n\n public getState(): StoreState {\n return this.state;\n }\n\n public async fetchState(): Promise<void> {\n this.state.loading = true;\n this.notify();\n try {\n const res = await fetch('/api/dsh-a6api/state');\n if (res.ok) {\n const json = await res.json();\n if (json?.data) {\n const data: A6ApiStateResponse = json.data;\n this.state.config = data.config;\n this.state.balance = data.balance;\n this.state.models = data.models;\n this.state.dshConfiguredModels = data.dshConfiguredModels;\n if (data.recentLogs) {\n this.state.recentLogs = data.recentLogs;\n }\n this.state.error = null;\n }\n }\n } catch (err: any) {\n this.state.error = err?.message || String(err);\n } finally {\n this.state.loading = false;\n this.notify();\n }\n }\n\n public async saveConfig(config: Partial<A6ApiConfig>): Promise<boolean> {\n try {\n const res = await fetch('/api/dsh-a6api/config', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(config),\n });\n if (res.ok) {\n await this.fetchState();\n return true;\n }\n } catch (err: any) {\n this.state.error = err?.message || String(err);\n this.notify();\n }\n return false;\n }\n\n public async refreshBalance(): Promise<void> {\n try {\n const res = await fetch('/api/dsh-a6api/balance');\n if (res.ok) {\n const json = await res.json();\n if (json?.balance) {\n this.state.balance = json.balance;\n }\n if (json?.recentLogs) {\n this.state.recentLogs = json.recentLogs;\n }\n this.notify();\n }\n } catch {}\n }\n\n public async probeModel(modelName: string): Promise<void> {\n this.state.probingModelNames.add(modelName);\n this.state.models = this.state.models.map((m) =>\n m.model_name === modelName ? { ...m, probeStatus: 'probing' as const } : m,\n );\n this.notify();\n\n try {\n const res = await fetch('/api/dsh-a6api/probe', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ modelName }),\n });\n if (res.ok) {\n const json = await res.json();\n if (json?.result?.merchant) {\n this.state.models = this.state.models.map((m) =>\n m.model_name === modelName\n ? {\n ...m,\n merchant: json.result.merchant,\n probeStatus: 'success' as const,\n probeLatencyMs: json.result.durationMs,\n probeError: undefined,\n lastProbedAt: Date.now(),\n }\n : m,\n );\n } else if (json?.result?.error) {\n this.state.models = this.state.models.map((m) =>\n m.model_name === modelName\n ? {\n ...m,\n probeStatus: 'error' as const,\n probeError: json.result.error,\n lastProbedAt: Date.now(),\n }\n : m,\n );\n } else {\n this.state.models = this.state.models.map((m) =>\n m.model_name === modelName\n ? {\n ...m,\n probeStatus: json?.result?.success ? ('success' as const) : ('idle' as const),\n probeLatencyMs: json?.result?.durationMs,\n probeError: undefined,\n lastProbedAt: Date.now(),\n }\n : m,\n );\n }\n } else {\n this.state.models = this.state.models.map((m) =>\n m.model_name === modelName\n ? {\n ...m,\n probeStatus: 'error' as const,\n probeError: `HTTP ${res.status}`,\n lastProbedAt: Date.now(),\n }\n : m,\n );\n }\n } catch (err: any) {\n this.state.models = this.state.models.map((m) =>\n m.model_name === modelName\n ? {\n ...m,\n probeStatus: 'error' as const,\n probeError: err?.message || String(err),\n lastProbedAt: Date.now(),\n }\n : m,\n );\n } finally {\n this.state.probingModelNames.delete(modelName);\n this.notify();\n this.refreshBalance().catch(() => {});\n }\n }\n\n public async probeAll(): Promise<void> {\n const allNames = this.state.models.map((m) => m.model_name);\n for (const name of allNames) {\n await this.probeModel(name);\n }\n }\n\n public async toggleDshModel(modelName: string): Promise<void> {\n const currentSet = new Set(this.state.dshConfiguredModels);\n if (currentSet.has(modelName)) {\n currentSet.delete(modelName);\n } else {\n currentSet.add(modelName);\n }\n const newModels = [...currentSet];\n try {\n const res = await fetch('/api/dsh-a6api/sync-models', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ modelIds: newModels }),\n });\n if (res.ok) {\n const json = await res.json();\n this.state.dshConfiguredModels = json.dshConfiguredModels || newModels;\n const dshSet = new Set(this.state.dshConfiguredModels);\n this.state.models = this.state.models.map((m) => ({\n ...m,\n inDsh: dshSet.has(m.model_name),\n }));\n this.notify();\n }\n } catch (err: any) {\n this.state.error = err?.message || String(err);\n this.notify();\n }\n }\n\n private startAutoRefresh() {\n if (this.autoRefreshTimer) clearInterval(this.autoRefreshTimer);\n // Refresh balance every 60 seconds\n this.autoRefreshTimer = setInterval(() => {\n this.refreshBalance().catch(() => {});\n }, 60000);\n }\n}\n\nexport const store = new A6ApiStore();\n", "import React, { useState } from 'react';\nimport { store } from '../store.js';\nimport type { ModelCardData } from '../../types.js';\n\nexport const MerchantCard: React.FC<{\n model: ModelCardData;\n}> = ({ model }) => {\n // \u8FDB\u5165\u540E\u9ED8\u8BA4\u4E0D\u5C55\u5F00\n const [expanded, setExpanded] = useState(false);\n\n const isProbing = model.probeStatus === 'probing';\n const merchant = model.merchant;\n\n const handleProbe = (e: React.MouseEvent) => {\n e.stopPropagation();\n store.probeModel(model.model_name);\n };\n\n const handleToggleDsh = (e: React.MouseEvent) => {\n e.stopPropagation();\n store.toggleDshModel(model.model_name);\n };\n\n // Success Rate Dot Generators\n const renderRealtimeDots = () => {\n if (merchant?.success_buckets && merchant.success_buckets.length > 0) {\n return merchant.success_buckets.slice(0, 10).map((b, i) => {\n const rate = b.success_rate;\n let colorClass = 'green';\n if (rate < 8000) colorClass = 'red';\n else if (rate < 9500) colorClass = 'yellow';\n return <div key={i} className={`dsh-a6-rate-dot ${colorClass}`} />;\n });\n }\n const count = 10;\n const greenCount = merchant ? Math.round((merchant.recent_success_rate_pct / 100) * count) : 10;\n return Array.from({ length: count }).map((_, i) => (\n <div key={i} className={`dsh-a6-rate-dot ${i < greenCount ? 'green' : 'empty'}`} />\n ));\n };\n\n const render24hDots = () => {\n if (merchant?.b24 && merchant.b24.length > 0) {\n return merchant.b24.slice(0, 12).map((b, i) => {\n if (!b.s || b.s === 0) {\n return <div key={i} className=\"dsh-a6-rate-dot empty\" />;\n }\n let colorClass = 'green';\n if (b.r < 8000) colorClass = 'red';\n else if (b.r < 9500) colorClass = 'yellow';\n return <div key={i} className={`dsh-a6-rate-dot ${colorClass}`} />;\n });\n }\n const count = 12;\n const greenCount = merchant ? Math.round((merchant.success_rate_24h_pct / 100) * count) : 12;\n return Array.from({ length: count }).map((_, i) => (\n <div key={i} className={`dsh-a6-rate-dot ${i < greenCount ? 'green' : 'empty'}`} />\n ));\n };\n\n const render7dDots = () => {\n if (merchant?.b7d && merchant.b7d.length > 0) {\n return merchant.b7d.slice(0, 7).map((b, i) => {\n if (!b.s || b.s === 0) {\n return <div key={i} className=\"dsh-a6-rate-dot empty\" />;\n }\n let colorClass = 'green';\n if (b.r && b.r < 8000) colorClass = 'red';\n else if (b.r && b.r < 9500) colorClass = 'yellow';\n return <div key={i} className={`dsh-a6-rate-dot ${colorClass}`} />;\n });\n }\n return Array.from({ length: 7 }).map((_, i) => (\n <div key={i} className={`dsh-a6-rate-dot ${i >= 4 ? 'green' : 'empty'}`} />\n ));\n };\n\n // Smart tag styling\n const getTagClass = (tag: string) => {\n if (tag.includes('\u4FDD\u771F')) return 'tag-guarantee';\n if (tag.includes('\u7A33\u5B9A')) return 'tag-stable';\n if (tag.includes('\u4F4E\u4EF7')) return 'tag-cheap';\n if (tag.includes('\u9AD8\u901F')) return 'tag-fast';\n if (tag.includes('\u9AD8\u8D28')) return 'tag-quality';\n return '';\n };\n\n // Realtime ratio pill\n const ratioText = merchant?.realtime_ratio_formatted || '0.0341';\n\n // Latency & Cache hit\n const latencySec = merchant\n ? ((merchant.p50_ttft_ms || merchant.recent_p50_ms || 2340) / 1000).toFixed(2) + 's'\n : model.probeLatencyMs\n ? (model.probeLatencyMs / 1000).toFixed(2) + 's'\n : '2.34s';\n const cacheHitPct = merchant ? merchant.cache_hit_rate_pct : 72.0;\n\n return (\n <div className={`dsh-a6-official-card ${model.inDsh ? 'in-dsh' : ''}`}>\n {/* 1. Main Top Row */}\n <div className=\"dsh-a6-card-main-bar\" onClick={() => setExpanded(!expanded)}>\n {/* Col 1: Model Title & Subtitle */}\n <div className=\"dsh-a6-bar-identity\">\n <div className=\"dsh-a6-title-col\">\n <div className=\"dsh-a6-title-line\">\n <span className=\"dsh-a6-name-text\">{model.model_name}</span>\n {merchant?.channel_id && (\n <>\n <span className=\"dsh-a6-dot-sep\">\u00B7</span>\n <span className=\"dsh-a6-merchant-id-text\">\n \u5546\u6237ID {merchant.channel_id}\n </span>\n </>\n )}\n </div>\n {merchant?.description && (\n <div className=\"dsh-a6-sub-desc\">{merchant.description}</div>\n )}\n </div>\n </div>\n\n {/* Col 2: Pricing Summary + Ratio Tag */}\n {merchant ? (\n <div className=\"dsh-a6-bar-pricing\">\n <div className=\"dsh-a6-price-col\">\n <span className=\"dsh-a6-price-top\" title=\"\u8F93\u5165\u4EF7 (1M)\">\n {merchant.input_price_cny}\n </span>\n <span className=\"dsh-a6-price-btm\" title=\"\u7F13\u5B58\u8BFB (1M)\">\n {merchant.cache_read_price_cny}\n </span>\n </div>\n <div className=\"dsh-a6-price-col\">\n <span className=\"dsh-a6-price-top\" title=\"\u8F93\u51FA\u4EF7 (1M)\">\n {merchant.output_price_cny}\n </span>\n <span className=\"dsh-a6-price-btm\" title=\"\u7F13\u5B58\u5199 (1M)\">\n {merchant.cache_write_price_cny}\n </span>\n </div>\n <div className=\"dsh-a6-ratio-pill\" title=\"\u5B9E\u65F6\u500D\u7387\u6BD4\u5B98\u65B9\u4EF7\">\n {ratioText}\n </div>\n </div>\n ) : (\n <div className=\"dsh-a6-bar-pricing unprobed\">\n <div className=\"dsh-a6-unprobed-hint\">\n {isProbing ? '\u5546\u5BB6\u63A2\u6D4B\u4E2D...' : '\u5C1A\u672A\u63A2\u6D4B\u5546\u5BB6'}\n </div>\n </div>\n )}\n\n {/* Col 3: Status / Health Bars (\u5B9E\u65F6, 24h, 7d) */}\n <div className=\"dsh-a6-bar-uptime\">\n <div className=\"dsh-a6-uptime-row\">\n <span className=\"dsh-a6-uptime-label\">\u5B9E\u65F6</span>\n <div className=\"dsh-a6-dots-track\">{renderRealtimeDots()}</div>\n <span className=\"dsh-a6-uptime-val\">\n {merchant ? `${merchant.recent_success_rate_pct.toFixed(1)}%` : '100.0%'}\n </span>\n </div>\n <div className=\"dsh-a6-uptime-row\">\n <span className=\"dsh-a6-uptime-label\">24h</span>\n <div className=\"dsh-a6-dots-track\">{render24hDots()}</div>\n <span className=\"dsh-a6-uptime-val\">\n {merchant ? `${merchant.success_rate_24h_pct.toFixed(1)}%` : '99.3%'}\n </span>\n </div>\n <div className=\"dsh-a6-uptime-row\">\n <span className=\"dsh-a6-uptime-label\">7d</span>\n <div className=\"dsh-a6-dots-track\">{render7dDots()}</div>\n <span className=\"dsh-a6-uptime-val\">\n {merchant?.sr_7d_state === 'no_data'\n ? '-'\n : merchant?.success_rate_7d_pct\n ? `${merchant.success_rate_7d_pct.toFixed(1)}%`\n : '-'}\n </span>\n </div>\n </div>\n\n {/* Col 4: Speed / Latency & Cache Hit Bar */}\n <div className=\"dsh-a6-bar-perf\">\n <div className=\"dsh-a6-perf-row\">\n <span className=\"dsh-a6-latency-text\">{latencySec}</span>\n <span className=\"dsh-a6-cache-hit-text\">{cacheHitPct.toFixed(1)}%</span>\n <div className=\"dsh-a6-hit-track\">\n <div\n className=\"dsh-a6-hit-fill\"\n style={{ width: `${Math.min(100, Math.max(0, cacheHitPct))}%` }}\n />\n </div>\n </div>\n </div>\n\n {/* Col 5: Smart Tags */}\n <div className=\"dsh-a6-bar-tags\">\n {(merchant?.labels || ['\u7A33\u5B9A', '\u4F4E\u4EF7', '\u9AD8\u901F', '\u9AD8\u8D28']).map((lbl, idx) => (\n <span key={idx} className={`dsh-a6-smart-pill ${getTagClass(lbl)}`}>\n {lbl}\n </span>\n ))}\n </div>\n\n {/* Col 6: Right Action & Status Group */}\n <div className=\"dsh-a6-bar-actions\" onClick={(e) => e.stopPropagation()}>\n <span\n className=\"dsh-a6-time-ago\"\n data-tooltip=\"\u8BE5\u5546\u6237\u8DEF\u7EBF\u5168\u7F51\u6700\u8FD1\u4E00\u6B21\u6210\u529F\u54CD\u5E94\u65F6\u95F4\"\n >\n {merchant?.last_success_text || '\u521A\u521A'}\n </span>\n\n <button\n type=\"button\"\n className=\"dsh-a6-btn dsh-a6-btn-secondary dsh-a6-btn-sm\"\n onClick={handleProbe}\n disabled={isProbing}\n data-tooltip=\"\u5411\u8BE5\u6A21\u578B\u53D1\u9001\u4E00\u6B21\u8BF7\u6C42\u4EE5\u63A2\u6D4B\u5E76\u6355\u83B7\u5176\u5B9E\u9645\u547D\u4E2D\u7684\u5546\u6237 ID\u3001\u4EF7\u683C\u53CA\u5065\u5EB7\u5EA6\u6307\u6807\uFF08\u6D88\u8017\u5C11\u91CFToken\uFF09\"\n >\n {isProbing ? '\u63A2\u6D4B\u4E2D...' : '\u63A2\u6D4B\u5546\u5BB6'}\n </button>\n\n <button\n type=\"button\"\n className={`dsh-a6-btn dsh-a6-btn-sm ${model.inDsh ? 'dsh-a6-btn-in-dsh' : 'dsh-a6-btn-primary'}`}\n onClick={handleToggleDsh}\n data-tooltip={model.inDsh ? '\u5DF2\u52A0\u5165 DSH \u6A21\u578B\u9009\u62E9\u5668 (\u70B9\u51FB\u79FB\u9664)' : '\u6DFB\u52A0\u81F3 DSH \u6A21\u578B\u9009\u62E9\u5668'}\n >\n {model.inDsh ? '\u5DF2\u5728 DSH' : '\u6DFB\u52A0\u5230 DSH'}\n </button>\n\n <button\n type=\"button\"\n className={`dsh-a6-expand-toggle-btn ${expanded ? 'open' : ''}`}\n onClick={() => setExpanded(!expanded)}\n data-tooltip={expanded ? '\u6536\u8D77\u4EF7\u683C\u8BE6\u60C5' : '\u5C55\u5F00\u5B98\u65B9\u57FA\u51C6\u4EF7\u4E0E\u5546\u6237\u5B9E\u65F6\u4EF7\u5BF9\u6BD4\u8868'}\n data-tooltip-pos=\"left\"\n >\n {expanded ? '\u6536\u8D77' : '\u8BE6\u60C5'}\n </button>\n </div>\n </div>\n\n {/* 2. Bottom Detailed Price Comparison Table (Only when expanded) */}\n {expanded && (\n <div className=\"dsh-a6-detail-container\">\n <div className=\"dsh-a6-detail-top-row\">\n <div className=\"dsh-a6-dt-left\">\n <span className=\"dsh-a6-dt-label\">\u6E20\u9053\u8BF4\u660E</span>\n <span className=\"dsh-a6-dt-desc\">\n {merchant?.description || '\u9AD8\u5E76\u53D1 \u4E3B\u6253\u4FBF\u5B9C \u7A33\u5B9A'}\n </span>\n </div>\n {merchant?.channel_name && (\n <div className=\"dsh-a6-dt-right\">\n <span className=\"dsh-a6-dt-label\">\u547D\u4E2D\u7EBF\u8DEF</span>\n <span className=\"dsh-a6-dt-channel-name\">\n {merchant.channel_name} (ID: {merchant.channel_id})\n </span>\n </div>\n )}\n </div>\n\n <div className=\"dsh-a6-dt-divider\" />\n\n {/* Clean Price Comparison Table */}\n <div className=\"dsh-a6-dt-table-col\">\n <table className=\"dsh-a6-price-table\">\n <thead>\n <tr>\n <th className=\"dsh-a6-th-blank\"></th>\n <th>\u8F93\u5165\u4EF7 (1M)</th>\n <th>\u8F93\u51FA\u4EF7 (1M)</th>\n <th>\u7F13\u5B58\u8BFB (1M)</th>\n <th>\u7F13\u5B58\u5199 (1M)</th>\n </tr>\n </thead>\n <tbody>\n <tr className=\"dsh-a6-tr-official\">\n <td className=\"dsh-a6-td-label\">\u5B98\u65B9\u4EF7</td>\n <td>{merchant?.official_price?.input_cny || '\u00A526.884'}</td>\n <td>{merchant?.official_price?.output_cny || '\u00A5134.418'}</td>\n <td>{merchant?.official_price?.cache_read_cny || '\u00A52.688'}</td>\n <td>{merchant?.official_price?.cache_write_cny || '\u00A533.605'}</td>\n </tr>\n <tr className=\"dsh-a6-tr-merchant\">\n <td className=\"dsh-a6-td-label\">\u5546\u6237\u4EF7</td>\n <td className=\"dsh-a6-td-bold\">{merchant?.input_price_cny || '\u00A50.1364'}</td>\n <td className=\"dsh-a6-td-bold\">{merchant?.output_price_cny || '\u00A50.6822'}</td>\n <td className=\"dsh-a6-td-bold\">{merchant?.cache_read_price_cny || '\u00A50.0136'}</td>\n <td className=\"dsh-a6-td-bold\">{merchant?.cache_write_price_cny || '\u00A50.1705'}</td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n )}\n </div>\n );\n};\n", "import React, { useState } from 'react';\nimport { store } from '../store.js';\nimport type { BalanceInfo, A6ApiConfig, ApiRoutingLogItem } from '../../types.js';\n\nexport const AccountPanel: React.FC<{\n balance: BalanceInfo | null;\n config: A6ApiConfig;\n recentLogs?: ApiRoutingLogItem[];\n onNavigateToConfig?: () => void;\n}> = ({ balance, config, recentLogs = [], onNavigateToConfig }) => {\n const [refreshing, setRefreshing] = useState(false);\n\n const handleRefreshBalance = async () => {\n setRefreshing(true);\n await store.refreshBalance();\n setRefreshing(false);\n };\n\n const hasAuth = balance?.hasAccountAuth ?? false;\n const isLow = balance ? balance.isLow : false;\n\n const formatLogTime = (ts: number) => {\n if (!ts) return '\u521A\u521A';\n const d = new Date(ts * 1000);\n return `${d.getHours().toString().padStart(2, '0')}:${d.getMinutes().toString().padStart(2, '0')}:${d.getSeconds().toString().padStart(2, '0')}`;\n };\n\n return (\n <div className=\"dsh-a6-account-page\">\n {/* 1. Real Balance Banner */}\n <div className={`dsh-a6-balance-banner ${isLow ? 'low-balance' : ''}`}>\n <div className=\"dsh-a6-balance-header\">\n <div className=\"dsh-a6-balance-left\">\n <div className=\"dsh-a6-balance-main-title\">\n <span className=\"dsh-a6-balance-label\">\u8D26\u6237\u771F\u5B9E\u4F59\u989D (\u5B9E\u65F6\u540C\u6B65)</span>\n <div className=\"dsh-a6-balance-num-row\">\n <span className={`dsh-a6-balance-amount ${!hasAuth ? 'unauthed' : ''}`}>\n {hasAuth ? (balance?.accountBalanceFormatted ?? '$0.00') : '\u672A\u8FDE\u63A5'}\n </span>\n {hasAuth && balance?.accountBalanceCnyFormatted && (\n <span className=\"dsh-a6-balance-cny\">{balance.accountBalanceCnyFormatted}</span>\n )}\n <span className={`dsh-a6-status-pill ${hasAuth ? 'success' : 'warn'}`}>\n {hasAuth ? '\u8D26\u6237\u5DF2\u540C\u6B65' : '\u672A\u8FDE\u63A5\u7CFB\u7EDF\u8BBF\u95EE\u4EE4\u724C'}\n </span>\n </div>\n </div>\n\n {isLow && (\n <span className=\"dsh-a6-low-alert\">\n \u4F59\u989D\u8F83\u4F4E (&lt; $0.50)\uFF0C\u5EFA\u8BAE\u53CA\u65F6\u5145\u503C\u4EE5\u4FDD\u969C\u6B63\u5E38\u8C03\u7528\n </span>\n )}\n </div>\n\n <div className=\"dsh-a6-balance-actions\">\n <button\n type=\"button\"\n className=\"dsh-a6-btn dsh-a6-btn-secondary dsh-a6-btn-sm\"\n onClick={handleRefreshBalance}\n disabled={refreshing}\n data-tooltip=\"\u4ECE A6API \u63A7\u5236\u53F0\u540C\u6B65\u83B7\u53D6\u6700\u65B0\u8D26\u6237\u771F\u5B9E\u53EF\u7528\u4F59\u989D\u4E0E\u6D88\u8017\u7EDF\u8BA1\uFF08\u4E0D\u6D88\u8017 Token\uFF09\"\n data-tooltip-pos=\"down\"\n >\n {refreshing ? '\u5237\u65B0\u4E2D...' : '\u5237\u65B0\u4F59\u989D'}\n </button>\n <a\n href=\"https://a6api.com/console\"\n target=\"_blank\"\n rel=\"noreferrer\"\n className=\"dsh-a6-btn dsh-a6-btn-primary dsh-a6-btn-sm\"\n style={{ textDecoration: 'none' }}\n data-tooltip=\"\u5728\u65B0\u6807\u7B7E\u9875\u4E2D\u6253\u5F00 A6API \u63A7\u5236\u53F0\u8FDB\u884C\u5728\u7EBF\u5145\u503C\u6216\u7BA1\u7406\u51ED\u636E\"\n data-tooltip-pos=\"down-left\"\n >\n \u524D\u5F80\u5145\u503C / \u63A7\u5236\u53F0\n </a>\n </div>\n </div>\n\n {/* 2. Statistical KPI Cards */}\n <div className=\"dsh-a6-stat-cards-grid\">\n <div className=\"dsh-a6-kpi-card\">\n <span className=\"dsh-a6-kpi-label\">\u5173\u8054\u8D26\u6237</span>\n <span className=\"dsh-a6-kpi-val\">\n {hasAuth ? `${balance?.username || '\u5DF2\u8BA4\u8BC1\u7528\u6237'} (#${balance?.userId || '\u2014'})` : '\u672A\u7ED1\u5B9A'}\n </span>\n </div>\n <div className=\"dsh-a6-kpi-card\">\n <span className=\"dsh-a6-kpi-label\">\u5386\u53F2\u603B\u6D88\u8017</span>\n <span className=\"dsh-a6-kpi-val\">\n {hasAuth ? `$${balance?.usedUsd?.toFixed(2) ?? '0.00'}` : '\u2014'}\n </span>\n </div>\n <div className=\"dsh-a6-kpi-card\">\n <span className=\"dsh-a6-kpi-label\">\u7D2F\u8BA1\u8BF7\u6C42\u6B21\u6570</span>\n <span className=\"dsh-a6-kpi-val\">\n {hasAuth ? `${balance?.requestCount ?? 0} \u6B21` : '\u2014'}\n </span>\n </div>\n <div className=\"dsh-a6-kpi-card\">\n <span className=\"dsh-a6-kpi-label\">\u5B9E\u65F6\u6C47\u7387\u53C2\u8003</span>\n <span className=\"dsh-a6-kpi-val\">1 USD \u2248 6.7209 CNY</span>\n </div>\n </div>\n </div>\n\n {/* 3. Auth Warning Banner if Not Connected */}\n {!hasAuth && (\n <div className=\"dsh-a6-auth-banner-box\">\n <div className=\"dsh-a6-auth-banner-content\">\n <div className=\"dsh-a6-auth-banner-title\">\u8FDE\u63A5\u7CFB\u7EDF\u8BBF\u95EE\u4EE4\u724C\u4EE5\u89E3\u9501\u5B8C\u6574\u8D44\u4EA7\u76D1\u63A7</div>\n <div className=\"dsh-a6-auth-banner-desc\">\n \u586B\u5165\u60A8\u7684 <strong>A6API \u7CFB\u7EDF\u8BBF\u95EE\u4EE4\u724C</strong> \u540E\uFF0C\u5373\u53EF\u5728\u6B64\u5B9E\u65F6\u67E5\u770B\u8D26\u6237\u771F\u5B9E\u53EF\u7528\u4F59\u989D\u3001\u5386\u53F2\u6D88\u8017\u3001\u7D2F\u8BA1\u8BF7\u6C42\u4EE5\u53CA\u5546\u6237\u8DEF\u7531\u4EF7\u683C\u6307\u6807\u3002\n </div>\n </div>\n {onNavigateToConfig && (\n <button\n type=\"button\"\n className=\"dsh-a6-btn dsh-a6-btn-primary dsh-a6-btn-sm\"\n onClick={onNavigateToConfig}\n >\n \u586B\u5199\u7CFB\u7EDF\u8BBF\u95EE\u4EE4\u724C\n </button>\n )}\n </div>\n )}\n\n {/* 4. Recent Routing Requests Snapshot */}\n <div className=\"dsh-a6-logs-section\">\n <div className=\"dsh-a6-logs-header\">\n <span className=\"dsh-a6-logs-title\">\u6700\u8FD1\u8DEF\u7531\u8C03\u7528\u660E\u7EC6 (\u5B9E\u65F6\u5FEB\u7167)</span>\n <span className=\"dsh-a6-logs-subtitle\">\u5C55\u793A\u901A\u8FC7\u5F53\u524D A6API \u63A5\u5165\u7684\u8FD1\u671F\u8BF7\u6C42\u4E0E\u5546\u6237\u8DEF\u7531\u8017\u65F6</span>\n </div>\n\n {recentLogs && recentLogs.length > 0 ? (\n <div className=\"dsh-a6-logs-table-wrapper\">\n <table className=\"dsh-a6-logs-table\">\n <thead>\n <tr>\n <th>\u8C03\u7528\u65F6\u95F4</th>\n <th>\u72B6\u6001</th>\n <th>\u5546\u6237id</th>\n <th>\u8BF7\u6C42\u6A21\u578B</th>\n <th>\u8F93\u5165/\u8F93\u51FA</th>\n <th>\u82B1\u8D39</th>\n <th>\u8017\u65F6</th>\n </tr>\n </thead>\n <tbody>\n {recentLogs.map((log, idx) => {\n const isErr =\n log.status === 'error' ||\n (log.status as string) === 'failed' ||\n (log.raw && (\n log.raw.type !== 2 ||\n (log.raw.other && (\n log.raw.other.includes('\"request_final_status\":\"failed\"') ||\n log.raw.other.includes('\"request_final_status\":\"error\"') ||\n log.raw.other.includes('\"request_final_status\":\"upstream_error\"')\n )) ||\n Boolean(log.raw.content && log.raw.content.startsWith('status_code='))\n ));\n\n const channelNum = Number(log.channel || log.raw?.channel || 0);\n\n return (\n <tr key={log.id || idx}>\n <td className=\"dsh-a6-log-time\">{formatLogTime(log.created_at)}</td>\n <td>\n <span className={`dsh-a6-log-status ${isErr ? 'err' : 'ok'}`}>\n {isErr ? '\u5931\u8D25' : '\u6210\u529F'}\n </span>\n </td>\n <td className=\"dsh-a6-log-channel\">\n {channelNum > 0 ? (\n <span className=\"dsh-a6-log-channel-badge\">\n #{channelNum}\n </span>\n ) : (\n <span className=\"dsh-a6-log-channel-empty\">\n \u65E0\n </span>\n )}\n </td>\n <td className=\"dsh-a6-log-model\">\n <code>{log.model_name}</code>\n </td>\n <td className=\"dsh-a6-log-tokens\">\n {log.prompt_tokens || 0} / {log.completion_tokens || 0}\n </td>\n <td className=\"dsh-a6-log-cost\">\n {log.cost_formatted || '$0.00'}\n </td>\n <td className=\"dsh-a6-log-time-use\">\n {log.use_time ? `${log.use_time}s` : '\u2014'}\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n </div>\n ) : (\n <div className=\"dsh-a6-empty-logs\">\n <span>\u6682\u65E0\u8FD1\u671F\u8C03\u7528\u8BB0\u5F55\u3002\u5728 DSH \u4E2D\u53D1\u8D77\u6A21\u578B\u5BF9\u8BDD\u6216\u70B9\u51FB\u300C\u63A2\u6D4B\u5546\u5BB6\u300D\u540E\uFF0C\u8C03\u7528\u660E\u7EC6\u5C06\u5728\u6B64\u5B9E\u65F6\u5C55\u793A\u3002</span>\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport { AccountPanel as BalanceCard };\n", "import React, { useState, useEffect } from 'react';\nimport { store } from '../store.js';\nimport type { A6ApiConfig } from '../../types.js';\n\nexport const ConfigPanel: React.FC<{\n config: A6ApiConfig;\n dshConfiguredModels: string[];\n}> = ({ config, dshConfiguredModels }) => {\n const [apiKey, setApiKey] = useState(config.apiKey || '');\n const [accessToken, setAccessToken] = useState(\n config.accessToken || config.sessionCookie || '',\n );\n const [selectedNode, setSelectedNode] = useState(\n config.baseURL || 'https://api.a6api.com',\n );\n const [customNode, setCustomNode] = useState(config.customBaseURL || '');\n const [isCustom, setIsCustom] = useState(\n config.baseURL !== 'https://api.a6api.com' && config.baseURL !== 'https://a6.a6api.com',\n );\n const [showKey, setShowKey] = useState(false);\n const [showToken, setShowToken] = useState(false);\n const [showHelp, setShowHelp] = useState(false);\n\n const [saving, setSaving] = useState(false);\n const [saveSuccess, setSaveSuccess] = useState(false);\n\n useEffect(() => {\n setApiKey(config.apiKey || '');\n setAccessToken(config.accessToken || config.sessionCookie || '');\n setSelectedNode(config.baseURL || 'https://api.a6api.com');\n setCustomNode(config.customBaseURL || '');\n setIsCustom(\n config.baseURL !== 'https://api.a6api.com' && config.baseURL !== 'https://a6.a6api.com',\n );\n }, [config]);\n\n const handleSave = async () => {\n setSaving(true);\n const finalBaseUrl = isCustom ? customNode.trim() || 'https://api.a6api.com' : selectedNode;\n const ok = await store.saveConfig({\n apiKey: apiKey.trim(),\n accessToken: accessToken.trim(),\n sessionCookie: accessToken.trim(),\n baseURL: finalBaseUrl,\n customBaseURL: customNode.trim(),\n });\n setSaving(false);\n if (ok) {\n setSaveSuccess(true);\n setTimeout(() => setSaveSuccess(false), 3500);\n }\n };\n\n return (\n <div className=\"dsh-a6-config-page\">\n {/* 1. API Gateway Node Selection */}\n <div className=\"dsh-a6-config-section\">\n <div className=\"dsh-a6-section-heading\">\n <span className=\"dsh-a6-heading-title\">API \u63A5\u5165\u8282\u70B9 (Base URL)</span>\n <span className=\"dsh-a6-heading-desc\">\n \u9009\u62E9\u79BB\u60A8\u6700\u8FD1\u7684 A6API \u805A\u5408\u7F51\u5173\u63A5\u5165\u70B9\uFF0C\u652F\u6301 CDN \u8282\u70B9\u4E0E\u76F4\u8FDE\u5907\u7528\u8282\u70B9\u3002\n </span>\n </div>\n\n <div className=\"dsh-a6-node-picker\">\n <button\n type=\"button\"\n className={`dsh-a6-node-pill ${!isCustom && selectedNode === 'https://api.a6api.com' ? 'active' : ''}`}\n onClick={() => {\n setIsCustom(false);\n setSelectedNode('https://api.a6api.com');\n }}\n >\n https://api.a6api.com (CDN \u63A8\u8350)\n </button>\n <button\n type=\"button\"\n className={`dsh-a6-node-pill ${!isCustom && selectedNode === 'https://a6.a6api.com' ? 'active' : ''}`}\n onClick={() => {\n setIsCustom(false);\n setSelectedNode('https://a6.a6api.com');\n }}\n >\n https://a6.a6api.com (\u76F4\u8FDE\u5907\u7528)\n </button>\n <button\n type=\"button\"\n className={`dsh-a6-node-pill ${isCustom ? 'active' : ''}`}\n onClick={() => setIsCustom(true)}\n >\n \u81EA\u5B9A\u4E49\u8282\u70B9\n </button>\n </div>\n\n {isCustom && (\n <input\n type=\"text\"\n className=\"dsh-a6-input\"\n placeholder=\"https://your-custom-gateway.com\"\n value={customNode}\n onChange={(e) => setCustomNode(e.target.value)}\n style={{ marginTop: '8px' }}\n />\n )}\n </div>\n\n {/* 2. Authentication Tokens */}\n <div className=\"dsh-a6-config-section\">\n <div className=\"dsh-a6-section-heading\">\n <span className=\"dsh-a6-heading-title\">\u8BBF\u95EE\u9274\u6743\u4E0E\u4EE4\u724C\u51ED\u636E</span>\n <span className=\"dsh-a6-heading-desc\">\n \u914D\u7F6E\u6A21\u578B\u8C03\u7528 API Key \u4EE5\u53CA\u7528\u4E8E\u540C\u6B65\u8D26\u6237\u4F59\u989D\u4E0E\u5546\u6237\u884C\u60C5\u7684\u7CFB\u7EDF\u8BBF\u95EE\u4EE4\u724C\u3002\n </span>\n </div>\n\n <div className=\"dsh-a6-config-fields-grid\">\n {/* API Key */}\n <div className=\"dsh-a6-field\">\n <div className=\"dsh-a6-field-header\">\n <label className=\"dsh-a6-label\">A6API \u4EE4\u724C (API Key)</label>\n <button\n type=\"button\"\n className=\"dsh-a6-btn-text\"\n onClick={() => setShowKey(!showKey)}\n >\n {showKey ? '\u9690\u85CF' : '\u663E\u793A'}\n </button>\n </div>\n <div className=\"dsh-a6-input-wrapper\">\n <input\n type={showKey ? 'text' : 'password'}\n className=\"dsh-a6-input\"\n placeholder=\"sk-xxxxxxxxxxxxxxxxxxxxxxxx\"\n value={apiKey}\n onChange={(e) => setApiKey(e.target.value)}\n />\n </div>\n <span className=\"dsh-a6-field-hint\">\n \u7528\u4E8E\u5411 A6API \u53D1\u8D77\u6A21\u578B\u5BF9\u8BDD\u8BF7\u6C42\u4E0E\u62C9\u53D6\u767D\u540D\u5355\u6A21\u578B\u3002\n </span>\n </div>\n\n {/* System Access Token */}\n <div className=\"dsh-a6-field\">\n <div className=\"dsh-a6-field-header\">\n <label className=\"dsh-a6-label\">\u7CFB\u7EDF\u8BBF\u95EE\u4EE4\u724C (Access Token)</label>\n <button\n type=\"button\"\n className=\"dsh-a6-btn-text\"\n onClick={() => setShowToken(!showToken)}\n >\n {showToken ? '\u9690\u85CF' : '\u663E\u793A'}\n </button>\n </div>\n <div className=\"dsh-a6-input-wrapper\">\n <input\n type={showToken ? 'text' : 'password'}\n className=\"dsh-a6-input\"\n placeholder=\"\u5728\u63A7\u5236\u53F0\u5B89\u5168\u8BBE\u7F6E\u4E2D\u590D\u5236\uFF0C\u4F8B\u5982 eyJhbGciOi...\"\n value={accessToken}\n onChange={(e) => setAccessToken(e.target.value)}\n />\n </div>\n <div className=\"dsh-a6-field-footer\">\n <span className=\"dsh-a6-field-hint\">\n \u7528\u4E8E\u514D\u5931\u6548\u540C\u6B65\u8D26\u6237\u771F\u5B9E\u4F59\u989D\u4E0E\u5546\u6237\u6307\u6807\u3002\n </span>\n <button\n type=\"button\"\n className=\"dsh-a6-btn-text\"\n onClick={() => setShowHelp(!showHelp)}\n style={{ fontSize: '11px', whiteSpace: 'nowrap' }}\n >\n {showHelp ? '\u6536\u8D77\u6559\u7A0B' : '\u83B7\u53D6\u6559\u7A0B'}\n </button>\n </div>\n </div>\n </div>\n\n {/* Tutorial Drawer */}\n {showHelp && (\n <div className=\"dsh-a6-help-drawer\">\n <div className=\"dsh-a6-help-title\">\u7CFB\u7EDF\u8BBF\u95EE\u4EE4\u724C\u83B7\u53D6\u6B65\u9AA4\uFF08\u6C38\u4E45\u6709\u6548\uFF09\uFF1A</div>\n <ol className=\"dsh-a6-help-list\">\n <li>\n \u5728\u6D4F\u89C8\u5668\u6253\u5F00\u5E76\u767B\u5F55{' '}\n <a href=\"https://a6api.com/console/personal\" target=\"_blank\" rel=\"noreferrer\">\n a6api.com/console/personal\n </a>{' '}\n \uFF08\u4E2A\u4EBA\u8BBE\u7F6E - \u5B89\u5168\u8BBE\u7F6E\uFF09\n </li>\n <li>\u5728\u300C\u7CFB\u7EDF\u8BBF\u95EE\u4EE4\u724C\u300D\u680F\u76EE\u76F4\u63A5\u70B9\u51FB\u590D\u5236\u4EE4\u724C\u5B57\u7B26\u4E32\uFF08\u4F8B\u5982 <code>eyJhbGciOi...</code>\uFF09</li>\n <li>\u7C98\u8D34\u5230\u4E0A\u65B9\u7684\u300C\u7CFB\u7EDF\u8BBF\u95EE\u4EE4\u724C\u300D\u8F93\u5165\u6846\u4E2D\u5E76\u70B9\u51FB\u4E0B\u65B9\u300C\u4FDD\u5B58\u914D\u7F6E\u300D\u5373\u53EF\u81EA\u52A8\u540C\u6B65\u4F59\u989D\uFF01</li>\n </ol>\n </div>\n )}\n </div>\n\n {/* 3. DSH LLM Provider Integration Overview */}\n <div className=\"dsh-a6-config-section\">\n <div className=\"dsh-a6-section-heading\">\n <span className=\"dsh-a6-heading-title\">DSH \u539F\u751F LLM \u63D0\u4F9B\u5546\u96C6\u6210\u72B6\u6001</span>\n <span className=\"dsh-a6-heading-desc\">\n \u63D2\u4EF6\u5DF2\u5C06 A6API \u6CE8\u518C\u4E3A DSH \u539F\u751F\u6A21\u578B\u63D0\u4F9B\u5546 (<code>a6api</code>)\u3002\u5728\u300C\u53EF\u7528\u6A21\u578B\u300D\u4E2D\u542F\u7528\u7684\u6A21\u578B\u5C06\u81EA\u52A8\u5199\u5165 DSH \u914D\u7F6E\u6587\u4EF6\u3002\n </span>\n </div>\n\n <div className=\"dsh-a6-integration-card\">\n <div className=\"dsh-a6-int-row\">\n <span className=\"dsh-a6-int-key\">\u63D0\u4F9B\u5546\u6807\u8BC6</span>\n <span className=\"dsh-a6-int-val\"><code>a6api</code> (OpenAI-compatible)</span>\n </div>\n <div className=\"dsh-a6-int-row\">\n <span className=\"dsh-a6-int-key\">\u5F53\u524D\u5DF2\u542F\u7528\u6A21\u578B</span>\n <div className=\"dsh-a6-int-tags\">\n {dshConfiguredModels.length > 0 ? (\n dshConfiguredModels.map((m) => (\n <span key={m} className=\"dsh-a6-model-chip\">\n {m}\n </span>\n ))\n ) : (\n <span className=\"dsh-a6-empty-hint\">\u6682\u672A\u542F\u7528\u4EFB\u4F55\u6A21\u578B\uFF0C\u8BF7\u524D\u5F80\u300C\u53EF\u7528\u6A21\u578B\u300D\u9875\u9762\u70B9\u51FB\u300C\u6DFB\u52A0\u5230 DSH\u300D</span>\n )}\n </div>\n </div>\n </div>\n </div>\n\n {/* 4. Save Action Bar */}\n <div className=\"dsh-a6-save-bar\">\n <div className=\"dsh-a6-save-status\">\n {saveSuccess && (\n <span className=\"dsh-a6-success-msg\">\n \u914D\u7F6E\u5DF2\u6210\u529F\u4FDD\u5B58\u5E76\u540C\u6B65\n </span>\n )}\n </div>\n <button\n type=\"button\"\n className=\"dsh-a6-btn dsh-a6-btn-primary\"\n onClick={handleSave}\n disabled={saving}\n style={{ minWidth: '100px' }}\n >\n {saving ? '\u6B63\u5728\u4FDD\u5B58...' : '\u4FDD\u5B58\u914D\u7F6E'}\n </button>\n </div>\n </div>\n );\n};\n", "/* A6API Plugin Styles - Clean Professional DSH Native Theme Integration */\n\n.dsh-a6-container {\n display: flex;\n flex-direction: column;\n color: var(--dsw-alias-label-primary, var(--ds-text-primary, #1e293b));\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, sans-serif;\n padding-bottom: 28px;\n}\n\n/* ==========================================================================\n 1. Master Header & Navigation Tabs (Image 2 Style)\n ========================================================================== */\n.dsh-a6-main-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n margin-bottom: 12px;\n flex-wrap: wrap;\n}\n\n.dsh-a6-header-text {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.dsh-a6-main-title {\n font-size: 20px;\n font-weight: 700;\n color: var(--dsw-alias-label-primary, #0f172a);\n margin: 0;\n line-height: 1.2;\n}\n\n.dsh-a6-main-subtitle {\n font-size: 13px;\n color: var(--dsw-alias-label-secondary, #64748b);\n margin: 0;\n line-height: 1.5;\n}\n\n.dsh-a6-header-balance-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 5px 12px;\n background: var(--dsw-alias-bg-layer-2, #ffffff);\n border: 1px solid var(--dsw-alias-border-l2, #e2e8f0);\n border-radius: 16px;\n cursor: pointer;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);\n transition: all 0.15s;\n}\n\n.dsh-a6-header-balance-badge:hover {\n border-color: #10b981;\n background: rgba(16, 185, 129, 0.04);\n}\n\n.dsh-a6-hb-label {\n font-size: 12px;\n color: var(--dsw-alias-label-secondary, #64748b);\n}\n\n.dsh-a6-hb-amount {\n font-size: 13px;\n font-weight: 700;\n color: #10b981;\n}\n\n/* Nav Tabs */\n.dsh-a6-nav-tabs {\n display: flex;\n gap: 28px;\n border-bottom: 1px solid var(--dsw-alias-border-l2, #e2e8f0);\n margin-bottom: 18px;\n margin-top: 4px;\n}\n\n.dsh-a6-nav-tab {\n background: transparent;\n border: none;\n padding: 10px 2px 12px 2px;\n font-size: 14px;\n font-weight: 500;\n color: var(--dsw-alias-label-secondary, #64748b);\n cursor: pointer;\n position: relative;\n display: inline-flex;\n align-items: center;\n gap: 6px;\n transition: color 0.15s;\n margin-bottom: -1px;\n}\n\n.dsh-a6-nav-tab:hover {\n color: var(--dsw-alias-label-primary, #0f172a);\n}\n\n.dsh-a6-nav-tab.active {\n color: var(--dsw-alias-label-primary, #0f172a);\n font-weight: 600;\n border-bottom: 2px solid var(--dsw-alias-label-primary, #0f172a);\n}\n\n.dsh-a6-tab-badge {\n font-size: 11px;\n font-weight: 500;\n padding: 1px 6px;\n border-radius: 10px;\n background: var(--dsw-alias-bg-layer-1, rgba(0, 0, 0, 0.06));\n color: var(--dsw-alias-label-secondary, #64748b);\n}\n\n.dsh-a6-tab-badge.success {\n background: rgba(16, 185, 129, 0.12);\n color: #10b981;\n}\n\n/* Tab Page Wrapper */\n.dsh-a6-tab-page {\n display: flex;\n flex-direction: column;\n gap: 16px;\n animation: dsh-a6-fadein 0.15s ease-out;\n}\n\n@keyframes dsh-a6-fadein {\n from {\n opacity: 0.8;\n transform: translateY(2px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n}\n\n/* ==========================================================================\n 2. Models Tab Toolbar & Filters\n ========================================================================== */\n.dsh-a6-section-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n position: relative;\n z-index: 100;\n}\n\n.dsh-a6-filter-group {\n display: flex;\n background: var(--dsw-alias-bg-layer-1, rgba(0, 0, 0, 0.04));\n border: 1px solid var(--dsw-alias-border-l3, #cbd5e1);\n border-radius: 6px;\n padding: 2px;\n}\n\n.dsh-a6-filter-btn {\n background: transparent;\n border: none;\n padding: 4px 10px;\n font-size: 12px;\n font-weight: 500;\n border-radius: 4px;\n color: var(--dsw-alias-label-secondary, #64748b);\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.dsh-a6-filter-btn:hover {\n color: var(--dsw-alias-label-primary, #0f172a);\n}\n\n.dsh-a6-filter-btn.active {\n background: var(--dsw-alias-bg-layer-2, #ffffff);\n color: var(--dsw-alias-label-primary, #0f172a);\n font-weight: 600;\n box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);\n}\n\n.dsh-a6-toolbar-right {\n display: flex;\n gap: 8px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.dsh-a6-search-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.dsh-a6-search-input {\n width: 200px;\n height: 30px;\n padding-right: 22px;\n font-size: 12px;\n}\n\n.dsh-a6-clear-btn {\n position: absolute;\n right: 6px;\n background: transparent;\n border: none;\n color: #94a3b8;\n cursor: pointer;\n font-size: 14px;\n padding: 2px;\n line-height: 1;\n}\n\n/* ==========================================================================\n 3. Clean Model Card\n ========================================================================== */\n.dsh-a6-cards-list {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.dsh-a6-official-card {\n background: var(--dsw-alias-bg-layer-2, #ffffff);\n border: 1px solid var(--dsw-alias-border-l2, #e2e8f0);\n border-radius: 10px;\n padding: 12px 16px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n transition: border-color 0.15s, box-shadow 0.15s;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.02);\n}\n\n.dsh-a6-official-card:hover {\n border-color: var(--dsw-alias-border-l1, #cbd5e1);\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);\n}\n\n.dsh-a6-official-card.in-dsh {\n border-left: 3px solid #10b981;\n}\n\n/* Main Top Bar */\n.dsh-a6-card-main-bar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 14px;\n cursor: pointer;\n user-select: none;\n flex-wrap: wrap;\n}\n\n/* Identity Col (Clean text without Brand Logos) */\n.dsh-a6-bar-identity {\n display: flex;\n align-items: center;\n min-width: 180px;\n flex: 1.2;\n}\n\n.dsh-a6-title-col {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.dsh-a6-title-line {\n display: flex;\n align-items: center;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.dsh-a6-name-text {\n font-size: 14px;\n font-weight: 700;\n color: var(--dsw-alias-label-primary, #0f172a);\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, monospace;\n}\n\n.dsh-a6-dot-sep {\n color: var(--dsw-alias-label-tertiary, #94a3b8);\n}\n\n.dsh-a6-merchant-id-text {\n font-size: 12px;\n font-weight: 500;\n color: var(--dsw-alias-label-secondary, #475569);\n}\n\n.dsh-a6-sub-desc {\n font-size: 11px;\n color: var(--dsw-alias-label-tertiary, #94a3b8);\n}\n\n/* Pricing Col */\n.dsh-a6-bar-pricing {\n display: flex;\n align-items: center;\n gap: 10px;\n flex: 1;\n}\n\n.dsh-a6-bar-pricing.unprobed {\n color: var(--dsw-alias-label-tertiary, #94a3b8);\n font-size: 12px;\n}\n\n.dsh-a6-price-col {\n display: flex;\n flex-direction: column;\n gap: 1px;\n}\n\n.dsh-a6-price-top {\n font-size: 13px;\n font-weight: 700;\n color: var(--dsw-alias-label-primary, #0f172a);\n}\n\n.dsh-a6-price-btm {\n font-size: 11px;\n color: var(--dsw-alias-label-tertiary, #94a3b8);\n}\n\n.dsh-a6-ratio-pill {\n font-size: 11px;\n font-weight: 600;\n padding: 2px 7px;\n border-radius: 10px;\n background: #f0fdfa;\n color: #0d9488;\n border: 1px solid #99f6e4;\n white-space: nowrap;\n}\n\n/* Uptime / Health Col (\u5B9E\u65F6 / 24h / 7d) */\n.dsh-a6-bar-uptime {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 130px;\n}\n\n.dsh-a6-uptime-row {\n display: flex;\n align-items: center;\n gap: 5px;\n font-size: 11px;\n}\n\n.dsh-a6-uptime-label {\n width: 24px;\n color: var(--dsw-alias-label-tertiary, #94a3b8);\n font-size: 10px;\n}\n\n.dsh-a6-dots-track {\n display: flex;\n gap: 2px;\n align-items: center;\n}\n\n.dsh-a6-rate-dot {\n width: 4px;\n height: 8px;\n border-radius: 2px;\n background: #10b981;\n}\n\n.dsh-a6-rate-dot.green {\n background: #10b981;\n}\n\n.dsh-a6-rate-dot.yellow {\n background: #f59e0b;\n}\n\n.dsh-a6-rate-dot.red {\n background: #ef4444;\n}\n\n.dsh-a6-rate-dot.empty {\n background: var(--dsw-alias-border-l3, rgba(0, 0, 0, 0.1));\n}\n\n.dsh-a6-uptime-val {\n font-weight: 600;\n font-size: 10px;\n color: var(--dsw-alias-label-secondary, #475569);\n min-width: 38px;\n text-align: right;\n}\n\n/* Performance Col (Speed / Cache Hit Bar) */\n.dsh-a6-bar-perf {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.dsh-a6-perf-row {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n\n.dsh-a6-latency-text {\n font-size: 12px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary, #0f172a);\n}\n\n.dsh-a6-cache-hit-text {\n font-size: 11px;\n font-weight: 600;\n color: #d97706;\n}\n\n.dsh-a6-hit-track {\n width: 38px;\n height: 4px;\n border-radius: 2px;\n background: var(--dsw-alias-border-l3, rgba(0, 0, 0, 0.08));\n overflow: hidden;\n}\n\n.dsh-a6-hit-fill {\n height: 100%;\n border-radius: 2px;\n background: linear-gradient(90deg, #f59e0b, #eab308);\n}\n\n/* Smart Tags */\n.dsh-a6-bar-tags {\n display: flex;\n gap: 5px;\n align-items: center;\n flex-wrap: wrap;\n}\n\n.dsh-a6-smart-pill {\n font-size: 11px;\n font-weight: 500;\n padding: 1px 6px;\n border-radius: 10px;\n background: var(--dsw-alias-bg-layer-1, rgba(0, 0, 0, 0.04));\n border: 1px solid var(--dsw-alias-border-l3, rgba(0, 0, 0, 0.08));\n color: var(--dsw-alias-label-secondary, #475569);\n}\n\n.dsh-a6-smart-pill.tag-stable {\n background: rgba(16, 185, 129, 0.08);\n border-color: rgba(16, 185, 129, 0.25);\n color: #10b981;\n}\n\n.dsh-a6-smart-pill.tag-cheap {\n background: rgba(59, 130, 246, 0.08);\n border-color: rgba(59, 130, 246, 0.25);\n color: #3b82f6;\n}\n\n.dsh-a6-smart-pill.tag-fast {\n background: rgba(249, 115, 22, 0.08);\n border-color: rgba(249, 115, 22, 0.25);\n color: #ea580c;\n}\n\n.dsh-a6-smart-pill.tag-quality {\n background: rgba(234, 179, 8, 0.08);\n border-color: rgba(234, 179, 8, 0.25);\n color: #ca8a04;\n}\n\n.dsh-a6-smart-pill.tag-guarantee {\n background: rgba(16, 185, 129, 0.12);\n border-color: rgba(16, 185, 129, 0.35);\n color: #059669;\n}\n\n/* Right Actions Group */\n.dsh-a6-bar-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-shrink: 0;\n}\n\n.dsh-a6-time-ago {\n font-size: 11px;\n color: var(--dsw-alias-label-tertiary, #94a3b8);\n}\n\n.dsh-a6-btn-in-dsh {\n background: rgba(16, 185, 129, 0.12);\n border: 1px solid rgba(16, 185, 129, 0.35);\n color: #059669;\n}\n\n.dsh-a6-btn-in-dsh:hover {\n background: rgba(16, 185, 129, 0.2);\n}\n\n.dsh-a6-expand-toggle-btn {\n background: transparent;\n border: 1px solid var(--dsw-alias-border-l3, #cbd5e1);\n border-radius: 6px;\n color: var(--dsw-alias-label-secondary, #64748b);\n cursor: pointer;\n font-size: 11px;\n padding: 4px 8px;\n height: 28px;\n transition: all 0.15s;\n}\n\n.dsh-a6-expand-toggle-btn:hover {\n background: var(--dsw-alias-bg-layer-1, rgba(0, 0, 0, 0.04));\n color: var(--dsw-alias-label-primary, #0f172a);\n}\n\n/* ==========================================================================\n 4. Bottom Detailed Comparison Box\n ========================================================================== */\n.dsh-a6-detail-container {\n background: var(--dsw-alias-bg-layer-1, rgba(0, 0, 0, 0.02));\n border: 1px solid var(--dsw-alias-border-l3, rgba(226, 232, 240, 0.8));\n border-radius: 8px;\n padding: 10px 14px;\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.dsh-a6-detail-top-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n flex-wrap: wrap;\n}\n\n.dsh-a6-dt-left,\n.dsh-a6-dt-right {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n\n.dsh-a6-dt-label {\n font-size: 11px;\n color: var(--dsw-alias-label-tertiary, #94a3b8);\n}\n\n.dsh-a6-dt-desc {\n font-size: 12px;\n font-weight: 500;\n color: var(--dsw-alias-label-primary, #1e293b);\n}\n\n.dsh-a6-dt-channel-name {\n font-size: 12px;\n font-weight: 500;\n color: #3b82f6;\n}\n\n.dsh-a6-dt-divider {\n height: 1px;\n background: var(--dsw-alias-border-l3, rgba(226, 232, 240, 0.6));\n margin: 1px 0;\n}\n\n/* Price Comparison Table */\n.dsh-a6-dt-table-col {\n overflow-x: auto;\n}\n\n.dsh-a6-price-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n text-align: left;\n}\n\n.dsh-a6-price-table th {\n padding: 4px 8px;\n font-size: 11px;\n font-weight: 500;\n color: var(--dsw-alias-label-tertiary, #94a3b8);\n border-bottom: 1px solid var(--dsw-alias-border-l3, rgba(226, 232, 240, 0.6));\n}\n\n.dsh-a6-th-blank {\n width: 50px;\n}\n\n.dsh-a6-price-table td {\n padding: 5px 8px;\n}\n\n.dsh-a6-td-label {\n color: var(--dsw-alias-label-secondary, #64748b);\n font-weight: 500;\n}\n\n.dsh-a6-tr-official td {\n color: var(--dsw-alias-label-secondary, #64748b);\n}\n\n.dsh-a6-tr-merchant td {\n color: var(--dsw-alias-label-primary, #0f172a);\n}\n\n.dsh-a6-td-bold {\n font-weight: 700;\n}\n\n/* ==========================================================================\n 5. Account Tab & Asset Panel Styles\n ========================================================================== */\n.dsh-a6-account-page {\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n.dsh-a6-balance-banner {\n background: var(--dsw-alias-bg-layer-2, #ffffff);\n border: 1px solid var(--dsw-alias-border-l2, rgba(226, 232, 240, 0.8));\n border-radius: 10px;\n padding: 16px 20px;\n display: flex;\n flex-direction: column;\n gap: 14px;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.03);\n position: relative;\n}\n\n.dsh-a6-balance-banner::before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n height: 3px;\n border-top-left-radius: 9px;\n border-top-right-radius: 9px;\n background: linear-gradient(90deg, #3b82f6 0%, #10b981 50%, #6366f1 100%);\n}\n\n.dsh-a6-balance-banner.low-balance::before {\n background: linear-gradient(90deg, #ef4444 0%, #f59e0b 100%);\n}\n\n.dsh-a6-balance-header {\n display: flex;\n justify-content: space-between;\n align-items: flex-start;\n gap: 16px;\n flex-wrap: wrap;\n}\n\n.dsh-a6-balance-left {\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.dsh-a6-balance-main-title {\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.dsh-a6-balance-label {\n font-size: 12px;\n font-weight: 500;\n color: var(--dsw-alias-label-secondary, #64748b);\n}\n\n.dsh-a6-balance-num-row {\n display: flex;\n align-items: baseline;\n gap: 10px;\n flex-wrap: wrap;\n}\n\n.dsh-a6-balance-amount {\n font-size: 26px;\n font-weight: 700;\n color: #10b981;\n letter-spacing: -0.5px;\n line-height: 1.1;\n}\n\n.dsh-a6-balance-amount.unauthed {\n font-size: 22px;\n color: var(--dsw-alias-label-secondary, #64748b);\n}\n\n.dsh-a6-balance-banner.low-balance .dsh-a6-balance-amount {\n color: #ef4444;\n}\n\n.dsh-a6-balance-cny {\n font-size: 14px;\n font-weight: 500;\n color: var(--dsw-alias-label-secondary, #64748b);\n}\n\n.dsh-a6-status-pill {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 8px;\n border-radius: 12px;\n display: inline-flex;\n align-items: center;\n}\n\n.dsh-a6-status-pill.success {\n background: rgba(16, 185, 129, 0.12);\n color: #10b981;\n border: 1px solid rgba(16, 185, 129, 0.25);\n}\n\n.dsh-a6-status-pill.warn {\n background: rgba(245, 158, 11, 0.12);\n color: #f59e0b;\n border: 1px solid rgba(245, 158, 11, 0.25);\n}\n\n.dsh-a6-low-alert {\n display: inline-flex;\n align-items: center;\n background: rgba(239, 68, 68, 0.12);\n color: #ef4444;\n padding: 4px 10px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n width: fit-content;\n}\n\n.dsh-a6-balance-actions {\n display: flex;\n align-items: center;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n/* Stat KPI Cards Grid */\n.dsh-a6-stat-cards-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 10px;\n}\n\n@media (max-width: 768px) {\n .dsh-a6-stat-cards-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n}\n\n.dsh-a6-kpi-card {\n background: var(--dsw-alias-bg-layer-1, rgba(0, 0, 0, 0.02));\n border: 1px solid var(--dsw-alias-border-l3, rgba(226, 232, 240, 0.6));\n border-radius: 8px;\n padding: 10px 12px;\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.dsh-a6-kpi-label {\n font-size: 11px;\n color: var(--dsw-alias-label-tertiary, #94a3b8);\n}\n\n.dsh-a6-kpi-val {\n font-size: 13px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary, #0f172a);\n}\n\n/* Auth Banner Box */\n.dsh-a6-auth-banner-box {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 14px;\n padding: 12px 16px;\n background: rgba(59, 130, 246, 0.06);\n border: 1px solid rgba(59, 130, 246, 0.2);\n border-radius: 8px;\n flex-wrap: wrap;\n}\n\n.dsh-a6-auth-banner-title {\n font-size: 13px;\n font-weight: 600;\n color: #2563eb;\n margin-bottom: 2px;\n}\n\n.dsh-a6-auth-banner-desc {\n font-size: 12px;\n color: var(--dsw-alias-label-secondary, #475569);\n line-height: 1.4;\n}\n\n/* Recent Logs Section */\n.dsh-a6-logs-section {\n background: var(--dsw-alias-bg-layer-2, #ffffff);\n border: 1px solid var(--dsw-alias-border-l2, #e2e8f0);\n border-radius: 10px;\n padding: 14px 18px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.dsh-a6-logs-header {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.dsh-a6-logs-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary, #0f172a);\n}\n\n.dsh-a6-logs-subtitle {\n font-size: 11px;\n color: var(--dsw-alias-label-tertiary, #94a3b8);\n}\n\n.dsh-a6-logs-table-wrapper {\n overflow-x: auto;\n}\n\n.dsh-a6-logs-table {\n width: 100%;\n border-collapse: collapse;\n font-size: 12px;\n text-align: left;\n}\n\n.dsh-a6-logs-table th {\n padding: 6px 8px;\n font-size: 11px;\n font-weight: 600;\n color: var(--dsw-alias-label-secondary, #64748b);\n border-bottom: 1px solid var(--dsw-alias-border-l2, #e2e8f0);\n}\n\n.dsh-a6-logs-table td {\n padding: 6px 8px;\n border-bottom: 1px solid var(--dsw-alias-border-l3, rgba(226, 232, 240, 0.5));\n}\n\n.dsh-a6-log-time {\n color: var(--dsw-alias-label-tertiary, #94a3b8);\n font-size: 11px;\n}\n\n.dsh-a6-log-channel-badge {\n font-size: 11px;\n padding: 2px 6px;\n background: rgba(59, 130, 246, 0.08);\n color: #3b82f6;\n border-radius: 4px;\n}\n\n.dsh-a6-log-status {\n font-size: 11px;\n font-weight: 500;\n padding: 1px 6px;\n border-radius: 10px;\n}\n\n.dsh-a6-log-status.ok {\n background: rgba(16, 185, 129, 0.12);\n color: #10b981;\n}\n\n.dsh-a6-log-status.err {\n background: rgba(239, 68, 68, 0.12);\n color: #ef4444;\n}\n\n.dsh-a6-log-cost {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, monospace;\n font-size: 11px;\n color: var(--dsw-alias-label-secondary, #475569);\n font-weight: 500;\n}\n\n.dsh-a6-btn-refresh-ok {\n color: #10b981 !important;\n border-color: rgba(16, 185, 129, 0.4) !important;\n background: rgba(16, 185, 129, 0.08) !important;\n}\n\n.dsh-a6-empty-logs {\n padding: 20px;\n text-align: center;\n color: var(--dsw-alias-label-tertiary, #94a3b8);\n font-size: 12px;\n}\n\n/* ==========================================================================\n 6. Configuration Tab Styles\n ========================================================================== */\n.dsh-a6-config-page {\n display: flex;\n flex-direction: column;\n gap: 14px;\n}\n\n.dsh-a6-config-section {\n background: var(--dsw-alias-bg-layer-2, #ffffff);\n border: 1px solid var(--dsw-alias-border-l2, #e2e8f0);\n border-radius: 10px;\n padding: 16px 18px;\n display: flex;\n flex-direction: column;\n gap: 10px;\n}\n\n.dsh-a6-section-heading {\n display: flex;\n flex-direction: column;\n gap: 2px;\n}\n\n.dsh-a6-heading-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--dsw-alias-label-primary, #0f172a);\n}\n\n.dsh-a6-heading-desc {\n font-size: 11px;\n color: var(--dsw-alias-label-secondary, #64748b);\n line-height: 1.4;\n}\n\n.dsh-a6-node-picker {\n display: flex;\n gap: 8px;\n flex-wrap: wrap;\n}\n\n.dsh-a6-node-pill {\n padding: 5px 12px;\n border-radius: 6px;\n border: 1px solid var(--dsw-alias-border-l3, #cbd5e1);\n background: var(--dsw-alias-bg-layer-1, #ffffff);\n font-size: 12px;\n color: var(--dsw-alias-label-secondary, #475569);\n cursor: pointer;\n transition: all 0.15s;\n}\n\n.dsh-a6-node-pill:hover {\n background: var(--dsw-alias-bg-layer-2, #f8fafc);\n border-color: #94a3b8;\n}\n\n.dsh-a6-node-pill.active {\n background: #3b82f6;\n color: #ffffff;\n border-color: #3b82f6;\n font-weight: 500;\n}\n\n.dsh-a6-config-fields-grid {\n display: flex;\n gap: 14px;\n}\n\n@media (max-width: 768px) {\n .dsh-a6-config-fields-grid {\n flex-direction: column;\n }\n}\n\n.dsh-a6-field {\n display: flex;\n flex-direction: column;\n gap: 5px;\n flex: 1;\n}\n\n.dsh-a6-field-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n\n.dsh-a6-label {\n font-size: 12px;\n font-weight: 600;\n color: var(--dsw-alias-label-secondary, #475569);\n}\n\n.dsh-a6-field-hint {\n font-size: 11px;\n color: var(--dsw-alias-label-tertiary, #94a3b8);\n line-height: 1.4;\n}\n\n.dsh-a6-field-footer {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n margin-top: 1px;\n}\n\n.dsh-a6-input-wrapper {\n position: relative;\n display: flex;\n align-items: center;\n}\n\n.dsh-a6-input {\n width: 100%;\n height: 32px;\n padding: 0 10px;\n border-radius: 6px;\n border: 1px solid var(--dsw-alias-border-l3, #cbd5e1);\n background: var(--dsw-alias-bg-layer-1, #ffffff);\n color: var(--dsw-alias-label-primary, #1e293b);\n font-size: 12px;\n outline: none;\n box-sizing: border-box;\n transition: border-color 0.15s, box-shadow 0.15s;\n}\n\n.dsh-a6-input:focus {\n border-color: #3b82f6;\n box-shadow: 0 0 0 2px rgba(59, 130, 246, 0.15);\n}\n\n.dsh-a6-help-drawer {\n background: var(--dsw-alias-bg-layer-1, #f8fafc);\n border: 1px dashed var(--dsw-alias-border-l2, #cbd5e1);\n border-radius: 8px;\n padding: 10px 14px;\n font-size: 11px;\n color: var(--dsw-alias-label-secondary, #475569);\n}\n\n.dsh-a6-help-title {\n font-weight: 600;\n color: var(--dsw-alias-label-primary, #0f172a);\n margin-bottom: 4px;\n}\n\n.dsh-a6-help-list {\n margin: 0;\n padding-left: 18px;\n display: flex;\n flex-direction: column;\n gap: 3px;\n}\n\n.dsh-a6-help-list code {\n background: rgba(0, 0, 0, 0.06);\n padding: 1px 4px;\n border-radius: 3px;\n font-size: 10px;\n}\n\n.dsh-a6-integration-card {\n background: var(--dsw-alias-bg-layer-1, rgba(0, 0, 0, 0.02));\n border: 1px solid var(--dsw-alias-border-l3, rgba(226, 232, 240, 0.6));\n border-radius: 8px;\n padding: 10px 14px;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.dsh-a6-int-row {\n display: flex;\n align-items: center;\n gap: 10px;\n font-size: 12px;\n}\n\n.dsh-a6-int-key {\n width: 100px;\n color: var(--dsw-alias-label-tertiary, #94a3b8);\n}\n\n.dsh-a6-int-val {\n font-weight: 600;\n color: var(--dsw-alias-label-primary, #0f172a);\n}\n\n.dsh-a6-int-tags {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n}\n\n.dsh-a6-model-chip {\n font-size: 11px;\n font-weight: 500;\n padding: 2px 7px;\n border-radius: 4px;\n background: rgba(16, 185, 129, 0.12);\n color: #059669;\n border: 1px solid rgba(16, 185, 129, 0.25);\n}\n\n.dsh-a6-empty-hint {\n color: var(--dsw-alias-label-tertiary, #94a3b8);\n font-size: 12px;\n}\n\n.dsh-a6-save-bar {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 12px;\n}\n\n.dsh-a6-success-msg {\n color: #10b981;\n font-size: 12px;\n font-weight: 500;\n}\n\n/* ==========================================================================\n 7. Buttons & Common State Styles\n ========================================================================== */\n.dsh-a6-btn {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n height: 30px;\n padding: 0 10px;\n border-radius: 6px;\n font-size: 12px;\n font-weight: 500;\n cursor: pointer;\n border: 1px solid transparent;\n transition: all 0.15s;\n white-space: nowrap;\n}\n\n.dsh-a6-btn-primary {\n background: #3b82f6;\n color: #ffffff;\n}\n\n.dsh-a6-btn-primary:hover {\n background: #2563eb;\n}\n\n.dsh-a6-btn-secondary {\n background: var(--dsw-alias-bg-layer-1, #ffffff);\n border-color: var(--dsw-alias-border-l3, #cbd5e1);\n color: var(--dsw-alias-label-primary, #334155);\n}\n\n.dsh-a6-btn-secondary:hover {\n background: var(--dsw-alias-bg-layer-2, #f8fafc);\n border-color: #94a3b8;\n}\n\n.dsh-a6-btn-sm {\n height: 28px;\n padding: 0 9px;\n font-size: 12px;\n}\n\n.dsh-a6-btn-xs {\n height: 26px;\n padding: 0 8px;\n font-size: 11px;\n}\n\n.dsh-a6-btn-text {\n background: transparent;\n border: none;\n color: #3b82f6;\n font-size: 11px;\n font-weight: 500;\n cursor: pointer;\n padding: 1px 3px;\n}\n\n.dsh-a6-btn-text:hover {\n text-decoration: underline;\n}\n\n.dsh-a6-empty-state {\n text-align: center;\n padding: 36px 20px;\n background: var(--dsw-alias-bg-layer-2, #ffffff);\n border: 1px dashed var(--dsw-alias-border-l2, #e2e8f0);\n border-radius: 10px;\n color: var(--dsw-alias-label-secondary, #64748b);\n font-size: 13px;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n}\n\n.dsh-a6-spinner {\n width: 20px;\n height: 20px;\n border: 2px solid rgba(59, 130, 246, 0.2);\n border-top-color: #3b82f6;\n border-radius: 50%;\n animation: dsh-a6-spin 0.8s linear infinite;\n}\n\n@keyframes dsh-a6-spin {\n to {\n transform: rotate(360deg);\n }\n}\n\n/* ==========================================================================\n 8. Instant Custom Tooltip (Zero-Delay, High Contrast)\n ========================================================================== */\n[data-tooltip] {\n position: relative;\n}\n\n[data-tooltip]::after {\n content: attr(data-tooltip);\n position: absolute;\n bottom: calc(100% + 7px);\n left: 50%;\n transform: translateX(-50%);\n padding: 5px 9px;\n background: rgba(15, 23, 42, 0.94);\n color: #f8fafc;\n font-size: 11px;\n font-weight: 400;\n line-height: 1.35;\n white-space: nowrap;\n border-radius: 5px;\n box-shadow: 0 4px 14px rgba(0, 0, 0, 0.25);\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.04s ease-out, visibility 0.04s ease-out;\n z-index: 99999;\n border: 1px solid rgba(255, 255, 255, 0.12);\n}\n\n[data-tooltip]::before {\n content: '';\n position: absolute;\n bottom: calc(100% + 2px);\n left: 50%;\n transform: translateX(-50%);\n border-width: 5px 5px 0 5px;\n border-style: solid;\n border-color: rgba(15, 23, 42, 0.94) transparent transparent transparent;\n pointer-events: none;\n opacity: 0;\n visibility: hidden;\n transition: opacity 0.04s ease-out, visibility 0.04s ease-out;\n z-index: 99999;\n}\n\n[data-tooltip]:hover::after,\n[data-tooltip]:hover::before {\n opacity: 1;\n visibility: visible;\n}\n\n[data-tooltip-pos=\"left\"]::after {\n left: auto;\n right: 0;\n transform: none;\n}\n\n[data-tooltip-pos=\"left\"]::before {\n left: auto;\n right: 14px;\n transform: none;\n}\n\n[data-tooltip-pos=\"right\"]::after {\n left: 0;\n right: auto;\n transform: none;\n}\n\n[data-tooltip-pos=\"right\"]::before {\n left: 14px;\n right: auto;\n transform: none;\n}\n\n/* Down positions (for top toolbar and header buttons) */\n[data-tooltip-pos=\"down\"]::after {\n top: calc(100% + 7px);\n bottom: auto;\n left: 50%;\n right: auto;\n transform: translateX(-50%);\n}\n\n[data-tooltip-pos=\"down\"]::before {\n top: calc(100% + 2px);\n bottom: auto;\n left: 50%;\n right: auto;\n transform: translateX(-50%);\n border-width: 0 5px 5px 5px;\n border-color: transparent transparent rgba(15, 23, 42, 0.94) transparent;\n}\n\n[data-tooltip-pos=\"down-left\"]::after {\n top: calc(100% + 7px);\n bottom: auto;\n left: auto;\n right: 0;\n transform: none;\n}\n\n[data-tooltip-pos=\"down-left\"]::before {\n top: calc(100% + 2px);\n bottom: auto;\n left: auto;\n right: 14px;\n transform: none;\n border-width: 0 5px 5px 5px;\n border-color: transparent transparent rgba(15, 23, 42, 0.94) transparent;\n}\n\n[data-tooltip-pos=\"down-right\"]::after {\n top: calc(100% + 7px);\n bottom: auto;\n left: 0;\n right: auto;\n transform: none;\n}\n\n[data-tooltip-pos=\"down-right\"]::before {\n top: calc(100% + 2px);\n bottom: auto;\n left: 14px;\n right: auto;\n transform: none;\n border-width: 0 5px 5px 5px;\n border-color: transparent transparent rgba(15, 23, 42, 0.94) transparent;\n}\n\n/* Card actions tooltip default alignment */\n.dsh-a6-bar-actions [data-tooltip]:not([data-tooltip-pos])::after {\n left: 0;\n transform: none;\n}\n\n.dsh-a6-bar-actions [data-tooltip]:not([data-tooltip-pos])::before {\n left: 16px;\n transform: none;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,gBAA2C;;;ACqB3C,IAAM,aAAN,MAAiB;AAAA,EACP,QAAoB;AAAA,IAC1B,SAAS;AAAA,IACT,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,MACR,QAAQ;AAAA,MACR,cAAc,CAAC;AAAA,IACjB;AAAA,IACA,SAAS;AAAA,IACT,QAAQ,CAAC;AAAA,IACT,qBAAqB,CAAC;AAAA,IACtB,YAAY,CAAC;AAAA,IACb,mBAAmB,oBAAI,IAAI;AAAA,IAC3B,OAAO;AAAA,EACT;AAAA,EAEQ,YAA2B,oBAAI,IAAI;AAAA,EACnC,mBAAwB;AAAA,EAEhC,cAAc;AACZ,SAAK,iBAAiB;AAAA,EACxB;AAAA,EAEO,UAAU,UAAgC;AAC/C,SAAK,UAAU,IAAI,QAAQ;AAC3B,WAAO,MAAM,KAAK,UAAU,OAAO,QAAQ;AAAA,EAC7C;AAAA,EAEQ,SAAS;AACf,eAAW,KAAK,KAAK,WAAW;AAC9B,UAAI;AACF,UAAE;AAAA,MACJ,SAAS,KAAK;AACZ,gBAAQ,MAAM,+BAA+B,GAAG;AAAA,MAClD;AAAA,IACF;AAAA,EACF;AAAA,EAEO,WAAuB;AAC5B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAa,aAA4B;AACvC,SAAK,MAAM,UAAU;AACrB,SAAK,OAAO;AACZ,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,sBAAsB;AAC9C,UAAI,IAAI,IAAI;AACV,cAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,YAAI,MAAM,MAAM;AACd,gBAAM,OAA2B,KAAK;AACtC,eAAK,MAAM,SAAS,KAAK;AACzB,eAAK,MAAM,UAAU,KAAK;AAC1B,eAAK,MAAM,SAAS,KAAK;AACzB,eAAK,MAAM,sBAAsB,KAAK;AACtC,cAAI,KAAK,YAAY;AACnB,iBAAK,MAAM,aAAa,KAAK;AAAA,UAC/B;AACA,eAAK,MAAM,QAAQ;AAAA,QACrB;AAAA,MACF;AAAA,IACF,SAAS,KAAU;AACjB,WAAK,MAAM,QAAQ,KAAK,WAAW,OAAO,GAAG;AAAA,IAC/C,UAAE;AACA,WAAK,MAAM,UAAU;AACrB,WAAK,OAAO;AAAA,IACd;AAAA,EACF;AAAA,EAEA,MAAa,WAAW,QAAgD;AACtE,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,yBAAyB;AAAA,QAC/C,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,MAAM,KAAK,UAAU,MAAM;AAAA,MAC7B,CAAC;AACD,UAAI,IAAI,IAAI;AACV,cAAM,KAAK,WAAW;AACtB,eAAO;AAAA,MACT;AAAA,IACF,SAAS,KAAU;AACjB,WAAK,MAAM,QAAQ,KAAK,WAAW,OAAO,GAAG;AAC7C,WAAK,OAAO;AAAA,IACd;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,iBAAgC;AAC3C,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,wBAAwB;AAChD,UAAI,IAAI,IAAI;AACV,cAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,YAAI,MAAM,SAAS;AACjB,eAAK,MAAM,UAAU,KAAK;AAAA,QAC5B;AACA,YAAI,MAAM,YAAY;AACpB,eAAK,MAAM,aAAa,KAAK;AAAA,QAC/B;AACA,aAAK,OAAO;AAAA,MACd;AAAA,IACF,QAAQ;AAAA,IAAC;AAAA,EACX;AAAA,EAEA,MAAa,WAAW,WAAkC;AACxD,SAAK,MAAM,kBAAkB,IAAI,SAAS;AAC1C,SAAK,MAAM,SAAS,KAAK,MAAM,OAAO;AAAA,MAAI,CAAC,MACzC,EAAE,eAAe,YAAY,EAAE,GAAG,GAAG,aAAa,UAAmB,IAAI;AAAA,IAC3E;AACA,SAAK,OAAO;AAEZ,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,wBAAwB;AAAA,QAC9C,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,MAAM,KAAK,UAAU,EAAE,UAAU,CAAC;AAAA,MACpC,CAAC;AACD,UAAI,IAAI,IAAI;AACV,cAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,YAAI,MAAM,QAAQ,UAAU;AAC1B,eAAK,MAAM,SAAS,KAAK,MAAM,OAAO;AAAA,YAAI,CAAC,MACzC,EAAE,eAAe,YACb;AAAA,cACE,GAAG;AAAA,cACH,UAAU,KAAK,OAAO;AAAA,cACtB,aAAa;AAAA,cACb,gBAAgB,KAAK,OAAO;AAAA,cAC5B,YAAY;AAAA,cACZ,cAAc,KAAK,IAAI;AAAA,YACzB,IACA;AAAA,UACN;AAAA,QACF,WAAW,MAAM,QAAQ,OAAO;AAC9B,eAAK,MAAM,SAAS,KAAK,MAAM,OAAO;AAAA,YAAI,CAAC,MACzC,EAAE,eAAe,YACb;AAAA,cACE,GAAG;AAAA,cACH,aAAa;AAAA,cACb,YAAY,KAAK,OAAO;AAAA,cACxB,cAAc,KAAK,IAAI;AAAA,YACzB,IACA;AAAA,UACN;AAAA,QACF,OAAO;AACL,eAAK,MAAM,SAAS,KAAK,MAAM,OAAO;AAAA,YAAI,CAAC,MACzC,EAAE,eAAe,YACb;AAAA,cACE,GAAG;AAAA,cACH,aAAa,MAAM,QAAQ,UAAW,YAAuB;AAAA,cAC7D,gBAAgB,MAAM,QAAQ;AAAA,cAC9B,YAAY;AAAA,cACZ,cAAc,KAAK,IAAI;AAAA,YACzB,IACA;AAAA,UACN;AAAA,QACF;AAAA,MACF,OAAO;AACL,aAAK,MAAM,SAAS,KAAK,MAAM,OAAO;AAAA,UAAI,CAAC,MACzC,EAAE,eAAe,YACb;AAAA,YACE,GAAG;AAAA,YACH,aAAa;AAAA,YACb,YAAY,QAAQ,IAAI,MAAM;AAAA,YAC9B,cAAc,KAAK,IAAI;AAAA,UACzB,IACA;AAAA,QACN;AAAA,MACF;AAAA,IACF,SAAS,KAAU;AACjB,WAAK,MAAM,SAAS,KAAK,MAAM,OAAO;AAAA,QAAI,CAAC,MACzC,EAAE,eAAe,YACb;AAAA,UACE,GAAG;AAAA,UACH,aAAa;AAAA,UACb,YAAY,KAAK,WAAW,OAAO,GAAG;AAAA,UACtC,cAAc,KAAK,IAAI;AAAA,QACzB,IACA;AAAA,MACN;AAAA,IACF,UAAE;AACA,WAAK,MAAM,kBAAkB,OAAO,SAAS;AAC7C,WAAK,OAAO;AACZ,WAAK,eAAe,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,MAAa,WAA0B;AACrC,UAAM,WAAW,KAAK,MAAM,OAAO,IAAI,CAAC,MAAM,EAAE,UAAU;AAC1D,eAAWC,SAAQ,UAAU;AAC3B,YAAM,KAAK,WAAWA,KAAI;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,MAAa,eAAe,WAAkC;AAC5D,UAAM,aAAa,IAAI,IAAI,KAAK,MAAM,mBAAmB;AACzD,QAAI,WAAW,IAAI,SAAS,GAAG;AAC7B,iBAAW,OAAO,SAAS;AAAA,IAC7B,OAAO;AACL,iBAAW,IAAI,SAAS;AAAA,IAC1B;AACA,UAAM,YAAY,CAAC,GAAG,UAAU;AAChC,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,8BAA8B;AAAA,QACpD,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,MAAM,KAAK,UAAU,EAAE,UAAU,UAAU,CAAC;AAAA,MAC9C,CAAC;AACD,UAAI,IAAI,IAAI;AACV,cAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,aAAK,MAAM,sBAAsB,KAAK,uBAAuB;AAC7D,cAAM,SAAS,IAAI,IAAI,KAAK,MAAM,mBAAmB;AACrD,aAAK,MAAM,SAAS,KAAK,MAAM,OAAO,IAAI,CAAC,OAAO;AAAA,UAChD,GAAG;AAAA,UACH,OAAO,OAAO,IAAI,EAAE,UAAU;AAAA,QAChC,EAAE;AACF,aAAK,OAAO;AAAA,MACd;AAAA,IACF,SAAS,KAAU;AACjB,WAAK,MAAM,QAAQ,KAAK,WAAW,OAAO,GAAG;AAC7C,WAAK,OAAO;AAAA,IACd;AAAA,EACF;AAAA,EAEQ,mBAAmB;AACzB,QAAI,KAAK,iBAAkB,eAAc,KAAK,gBAAgB;AAE9D,SAAK,mBAAmB,YAAY,MAAM;AACxC,WAAK,eAAe,EAAE,MAAM,MAAM;AAAA,MAAC,CAAC;AAAA,IACtC,GAAG,GAAK;AAAA,EACV;AACF;AAEO,IAAM,QAAQ,IAAI,WAAW;;;AC7PpC,mBAAgC;AA+BjB;AA3BR,IAAM,eAER,CAAC,EAAE,MAAM,MAAM;AAElB,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAS,KAAK;AAE9C,QAAM,YAAY,MAAM,gBAAgB;AACxC,QAAM,WAAW,MAAM;AAEvB,QAAM,cAAc,CAAC,MAAwB;AAC3C,MAAE,gBAAgB;AAClB,UAAM,WAAW,MAAM,UAAU;AAAA,EACnC;AAEA,QAAM,kBAAkB,CAAC,MAAwB;AAC/C,MAAE,gBAAgB;AAClB,UAAM,eAAe,MAAM,UAAU;AAAA,EACvC;AAGA,QAAM,qBAAqB,MAAM;AAC/B,QAAI,UAAU,mBAAmB,SAAS,gBAAgB,SAAS,GAAG;AACpE,aAAO,SAAS,gBAAgB,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,MAAM;AACzD,cAAM,OAAO,EAAE;AACf,YAAI,aAAa;AACjB,YAAI,OAAO,IAAM,cAAa;AAAA,iBACrB,OAAO,KAAM,cAAa;AACnC,eAAO,4CAAC,SAAY,WAAW,mBAAmB,UAAU,MAA3C,CAA+C;AAAA,MAClE,CAAC;AAAA,IACH;AACA,UAAM,QAAQ;AACd,UAAM,aAAa,WAAW,KAAK,MAAO,SAAS,0BAA0B,MAAO,KAAK,IAAI;AAC7F,WAAO,MAAM,KAAK,EAAE,QAAQ,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,MAC3C,4CAAC,SAAY,WAAW,mBAAmB,IAAI,aAAa,UAAU,OAAO,MAAnE,CAAuE,CAClF;AAAA,EACH;AAEA,QAAM,gBAAgB,MAAM;AAC1B,QAAI,UAAU,OAAO,SAAS,IAAI,SAAS,GAAG;AAC5C,aAAO,SAAS,IAAI,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,GAAG,MAAM;AAC7C,YAAI,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG;AACrB,iBAAO,4CAAC,SAAY,WAAU,2BAAb,CAAqC;AAAA,QACxD;AACA,YAAI,aAAa;AACjB,YAAI,EAAE,IAAI,IAAM,cAAa;AAAA,iBACpB,EAAE,IAAI,KAAM,cAAa;AAClC,eAAO,4CAAC,SAAY,WAAW,mBAAmB,UAAU,MAA3C,CAA+C;AAAA,MAClE,CAAC;AAAA,IACH;AACA,UAAM,QAAQ;AACd,UAAM,aAAa,WAAW,KAAK,MAAO,SAAS,uBAAuB,MAAO,KAAK,IAAI;AAC1F,WAAO,MAAM,KAAK,EAAE,QAAQ,MAAM,CAAC,EAAE,IAAI,CAAC,GAAG,MAC3C,4CAAC,SAAY,WAAW,mBAAmB,IAAI,aAAa,UAAU,OAAO,MAAnE,CAAuE,CAClF;AAAA,EACH;AAEA,QAAM,eAAe,MAAM;AACzB,QAAI,UAAU,OAAO,SAAS,IAAI,SAAS,GAAG;AAC5C,aAAO,SAAS,IAAI,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,GAAG,MAAM;AAC5C,YAAI,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG;AACrB,iBAAO,4CAAC,SAAY,WAAU,2BAAb,CAAqC;AAAA,QACxD;AACA,YAAI,aAAa;AACjB,YAAI,EAAE,KAAK,EAAE,IAAI,IAAM,cAAa;AAAA,iBAC3B,EAAE,KAAK,EAAE,IAAI,KAAM,cAAa;AACzC,eAAO,4CAAC,SAAY,WAAW,mBAAmB,UAAU,MAA3C,CAA+C;AAAA,MAClE,CAAC;AAAA,IACH;AACA,WAAO,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,MACvC,4CAAC,SAAY,WAAW,mBAAmB,KAAK,IAAI,UAAU,OAAO,MAA3D,CAA+D,CAC1E;AAAA,EACH;AAGA,QAAM,cAAc,CAAC,QAAgB;AACnC,QAAI,IAAI,SAAS,cAAI,EAAG,QAAO;AAC/B,QAAI,IAAI,SAAS,cAAI,EAAG,QAAO;AAC/B,QAAI,IAAI,SAAS,cAAI,EAAG,QAAO;AAC/B,QAAI,IAAI,SAAS,cAAI,EAAG,QAAO;AAC/B,QAAI,IAAI,SAAS,cAAI,EAAG,QAAO;AAC/B,WAAO;AAAA,EACT;AAGA,QAAM,YAAY,UAAU,4BAA4B;AAGxD,QAAM,aAAa,aACb,SAAS,eAAe,SAAS,iBAAiB,QAAQ,KAAM,QAAQ,CAAC,IAAI,MAC/E,MAAM,kBACH,MAAM,iBAAiB,KAAM,QAAQ,CAAC,IAAI,MAC3C;AACN,QAAM,cAAc,WAAW,SAAS,qBAAqB;AAE7D,SACE,6CAAC,SAAI,WAAW,wBAAwB,MAAM,QAAQ,WAAW,EAAE,IAEjE;AAAA,iDAAC,SAAI,WAAU,wBAAuB,SAAS,MAAM,YAAY,CAAC,QAAQ,GAExE;AAAA,kDAAC,SAAI,WAAU,uBACb,uDAAC,SAAI,WAAU,oBACb;AAAA,qDAAC,SAAI,WAAU,qBACb;AAAA,sDAAC,UAAK,WAAU,oBAAoB,gBAAM,YAAW;AAAA,UACpD,UAAU,cACT,4EACE;AAAA,wDAAC,UAAK,WAAU,kBAAiB,kBAAC;AAAA,YAClC,6CAAC,UAAK,WAAU,2BAA0B;AAAA;AAAA,cAClC,SAAS;AAAA,eACjB;AAAA,aACF;AAAA,WAEJ;AAAA,QACC,UAAU,eACT,4CAAC,SAAI,WAAU,mBAAmB,mBAAS,aAAY;AAAA,SAE3D,GACF;AAAA,MAGC,WACC,6CAAC,SAAI,WAAU,sBACb;AAAA,qDAAC,SAAI,WAAU,oBACb;AAAA,sDAAC,UAAK,WAAU,oBAAmB,OAAM,2BACtC,mBAAS,iBACZ;AAAA,UACA,4CAAC,UAAK,WAAU,oBAAmB,OAAM,2BACtC,mBAAS,sBACZ;AAAA,WACF;AAAA,QACA,6CAAC,SAAI,WAAU,oBACb;AAAA,sDAAC,UAAK,WAAU,oBAAmB,OAAM,2BACtC,mBAAS,kBACZ;AAAA,UACA,4CAAC,UAAK,WAAU,oBAAmB,OAAM,2BACtC,mBAAS,uBACZ;AAAA,WACF;AAAA,QACA,4CAAC,SAAI,WAAU,qBAAoB,OAAM,oDACtC,qBACH;AAAA,SACF,IAEA,4CAAC,SAAI,WAAU,+BACb,sDAAC,SAAI,WAAU,wBACZ,sBAAY,sCAAa,wCAC5B,GACF;AAAA,MAIF,6CAAC,SAAI,WAAU,qBACb;AAAA,qDAAC,SAAI,WAAU,qBACb;AAAA,sDAAC,UAAK,WAAU,uBAAsB,0BAAE;AAAA,UACxC,4CAAC,SAAI,WAAU,qBAAqB,6BAAmB,GAAE;AAAA,UACzD,4CAAC,UAAK,WAAU,qBACb,qBAAW,GAAG,SAAS,wBAAwB,QAAQ,CAAC,CAAC,MAAM,UAClE;AAAA,WACF;AAAA,QACA,6CAAC,SAAI,WAAU,qBACb;AAAA,sDAAC,UAAK,WAAU,uBAAsB,iBAAG;AAAA,UACzC,4CAAC,SAAI,WAAU,qBAAqB,wBAAc,GAAE;AAAA,UACpD,4CAAC,UAAK,WAAU,qBACb,qBAAW,GAAG,SAAS,qBAAqB,QAAQ,CAAC,CAAC,MAAM,SAC/D;AAAA,WACF;AAAA,QACA,6CAAC,SAAI,WAAU,qBACb;AAAA,sDAAC,UAAK,WAAU,uBAAsB,gBAAE;AAAA,UACxC,4CAAC,SAAI,WAAU,qBAAqB,uBAAa,GAAE;AAAA,UACnD,4CAAC,UAAK,WAAU,qBACb,oBAAU,gBAAgB,YACvB,MACA,UAAU,sBACR,GAAG,SAAS,oBAAoB,QAAQ,CAAC,CAAC,MAC1C,KACR;AAAA,WACF;AAAA,SACF;AAAA,MAGA,4CAAC,SAAI,WAAU,mBACb,uDAAC,SAAI,WAAU,mBACb;AAAA,oDAAC,UAAK,WAAU,uBAAuB,sBAAW;AAAA,QAClD,6CAAC,UAAK,WAAU,yBAAyB;AAAA,sBAAY,QAAQ,CAAC;AAAA,UAAE;AAAA,WAAC;AAAA,QACjE,4CAAC,SAAI,WAAU,oBACb;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,WAAW,CAAC,CAAC,IAAI;AAAA;AAAA,QAChE,GACF;AAAA,SACF,GACF;AAAA,MAGA,4CAAC,SAAI,WAAU,mBACX,qBAAU,UAAU,CAAC,gBAAM,gBAAM,gBAAM,cAAI,GAAG,IAAI,CAAC,KAAK,QACxD,4CAAC,UAAe,WAAW,qBAAqB,YAAY,GAAG,CAAC,IAC7D,iBADQ,GAEX,CACD,GACH;AAAA,MAGA,6CAAC,SAAI,WAAU,sBAAqB,SAAS,CAAC,MAAM,EAAE,gBAAgB,GACpE;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAU;AAAA,YACV,gBAAa;AAAA,YAEZ,oBAAU,qBAAqB;AAAA;AAAA,QAClC;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAU;AAAA,YACV,SAAS;AAAA,YACT,UAAU;AAAA,YACV,gBAAa;AAAA,YAEZ,sBAAY,0BAAW;AAAA;AAAA,QAC1B;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAW,4BAA4B,MAAM,QAAQ,sBAAsB,oBAAoB;AAAA,YAC/F,SAAS;AAAA,YACT,gBAAc,MAAM,QAAQ,qFAAyB;AAAA,YAEpD,gBAAM,QAAQ,qBAAW;AAAA;AAAA,QAC5B;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAW,4BAA4B,WAAW,SAAS,EAAE;AAAA,YAC7D,SAAS,MAAM,YAAY,CAAC,QAAQ;AAAA,YACpC,gBAAc,WAAW,yCAAW;AAAA,YACpC,oBAAiB;AAAA,YAEhB,qBAAW,iBAAO;AAAA;AAAA,QACrB;AAAA,SACF;AAAA,OACF;AAAA,IAGC,YACC,6CAAC,SAAI,WAAU,2BACb;AAAA,mDAAC,SAAI,WAAU,yBACb;AAAA,qDAAC,SAAI,WAAU,kBACb;AAAA,sDAAC,UAAK,WAAU,mBAAkB,sCAAI;AAAA,UACtC,4CAAC,UAAK,WAAU,kBACb,oBAAU,eAAe,4DAC5B;AAAA,WACF;AAAA,QACC,UAAU,gBACT,6CAAC,SAAI,WAAU,mBACb;AAAA,sDAAC,UAAK,WAAU,mBAAkB,sCAAI;AAAA,UACtC,6CAAC,UAAK,WAAU,0BACb;AAAA,qBAAS;AAAA,YAAa;AAAA,YAAO,SAAS;AAAA,YAAW;AAAA,aACpD;AAAA,WACF;AAAA,SAEJ;AAAA,MAEA,4CAAC,SAAI,WAAU,qBAAoB;AAAA,MAGnC,4CAAC,SAAI,WAAU,uBACb,uDAAC,WAAM,WAAU,sBACf;AAAA,oDAAC,WACC,uDAAC,QACC;AAAA,sDAAC,QAAG,WAAU,mBAAkB;AAAA,UAChC,4CAAC,QAAG,qCAAQ;AAAA,UACZ,4CAAC,QAAG,qCAAQ;AAAA,UACZ,4CAAC,QAAG,qCAAQ;AAAA,UACZ,4CAAC,QAAG,qCAAQ;AAAA,WACd,GACF;AAAA,QACA,6CAAC,WACC;AAAA,uDAAC,QAAG,WAAU,sBACZ;AAAA,wDAAC,QAAG,WAAU,mBAAkB,gCAAG;AAAA,YACnC,4CAAC,QAAI,oBAAU,gBAAgB,aAAa,cAAU;AAAA,YACtD,4CAAC,QAAI,oBAAU,gBAAgB,cAAc,eAAW;AAAA,YACxD,4CAAC,QAAI,oBAAU,gBAAgB,kBAAkB,aAAS;AAAA,YAC1D,4CAAC,QAAI,oBAAU,gBAAgB,mBAAmB,cAAU;AAAA,aAC9D;AAAA,UACA,6CAAC,QAAG,WAAU,sBACZ;AAAA,wDAAC,QAAG,WAAU,mBAAkB,gCAAG;AAAA,YACnC,4CAAC,QAAG,WAAU,kBAAkB,oBAAU,mBAAmB,cAAU;AAAA,YACvE,4CAAC,QAAG,WAAU,kBAAkB,oBAAU,oBAAoB,cAAU;AAAA,YACxE,4CAAC,QAAG,WAAU,kBAAkB,oBAAU,wBAAwB,cAAU;AAAA,YAC5E,4CAAC,QAAG,WAAU,kBAAkB,oBAAU,yBAAyB,cAAU;AAAA,aAC/E;AAAA,WACF;AAAA,SACF,GACF;AAAA,OACF;AAAA,KAEJ;AAEJ;;;AC7SA,IAAAC,gBAAgC;AAkClB,IAAAC,sBAAA;AA9BP,IAAM,eAKR,CAAC,EAAE,SAAS,QAAQ,aAAa,CAAC,GAAG,mBAAmB,MAAM;AACjE,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAS,KAAK;AAElD,QAAM,uBAAuB,YAAY;AACvC,kBAAc,IAAI;AAClB,UAAM,MAAM,eAAe;AAC3B,kBAAc,KAAK;AAAA,EACrB;AAEA,QAAM,UAAU,SAAS,kBAAkB;AAC3C,QAAM,QAAQ,UAAU,QAAQ,QAAQ;AAExC,QAAM,gBAAgB,CAAC,OAAe;AACpC,QAAI,CAAC,GAAI,QAAO;AAChB,UAAM,IAAI,IAAI,KAAK,KAAK,GAAI;AAC5B,WAAO,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,GAAG,GAAG,CAAC;AAAA,EAChJ;AAEA,SACE,8CAAC,SAAI,WAAU,uBAEb;AAAA,kDAAC,SAAI,WAAW,yBAAyB,QAAQ,gBAAgB,EAAE,IACjE;AAAA,oDAAC,SAAI,WAAU,yBACb;AAAA,sDAAC,SAAI,WAAU,uBACb;AAAA,wDAAC,SAAI,WAAU,6BACb;AAAA,yDAAC,UAAK,WAAU,wBAAuB,6EAAa;AAAA,YACpD,8CAAC,SAAI,WAAU,0BACb;AAAA,2DAAC,UAAK,WAAW,yBAAyB,CAAC,UAAU,aAAa,EAAE,IACjE,oBAAW,SAAS,2BAA2B,UAAW,sBAC7D;AAAA,cACC,WAAW,SAAS,8BACnB,6CAAC,UAAK,WAAU,sBAAsB,kBAAQ,4BAA2B;AAAA,cAE3E,6CAAC,UAAK,WAAW,sBAAsB,UAAU,YAAY,MAAM,IAChE,oBAAU,mCAAU,0DACvB;AAAA,eACF;AAAA,aACF;AAAA,UAEC,SACC,6CAAC,UAAK,WAAU,oBAAmB,oIAEnC;AAAA,WAEJ;AAAA,QAEA,8CAAC,SAAI,WAAU,0BACb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS;AAAA,cACT,UAAU;AAAA,cACV,gBAAa;AAAA,cACb,oBAAiB;AAAA,cAEhB,uBAAa,0BAAW;AAAA;AAAA,UAC3B;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,QAAO;AAAA,cACP,KAAI;AAAA,cACJ,WAAU;AAAA,cACV,OAAO,EAAE,gBAAgB,OAAO;AAAA,cAChC,gBAAa;AAAA,cACb,oBAAiB;AAAA,cAClB;AAAA;AAAA,UAED;AAAA,WACF;AAAA,SACF;AAAA,MAGA,8CAAC,SAAI,WAAU,0BACb;AAAA,sDAAC,SAAI,WAAU,mBACb;AAAA,uDAAC,UAAK,WAAU,oBAAmB,sCAAI;AAAA,UACvC,6CAAC,UAAK,WAAU,kBACb,oBAAU,GAAG,SAAS,YAAY,gCAAO,MAAM,SAAS,UAAU,QAAG,MAAM,sBAC9E;AAAA,WACF;AAAA,QACA,8CAAC,SAAI,WAAU,mBACb;AAAA,uDAAC,UAAK,WAAU,oBAAmB,4CAAK;AAAA,UACxC,6CAAC,UAAK,WAAU,kBACb,oBAAU,IAAI,SAAS,SAAS,QAAQ,CAAC,KAAK,MAAM,KAAK,UAC5D;AAAA,WACF;AAAA,QACA,8CAAC,SAAI,WAAU,mBACb;AAAA,uDAAC,UAAK,WAAU,oBAAmB,kDAAM;AAAA,UACzC,6CAAC,UAAK,WAAU,kBACb,oBAAU,GAAG,SAAS,gBAAgB,CAAC,YAAO,UACjD;AAAA,WACF;AAAA,QACA,8CAAC,SAAI,WAAU,mBACb;AAAA,uDAAC,UAAK,WAAU,oBAAmB,kDAAM;AAAA,UACzC,6CAAC,UAAK,WAAU,kBAAiB,qCAAkB;AAAA,WACrD;AAAA,SACF;AAAA,OACF;AAAA,IAGC,CAAC,WACA,8CAAC,SAAI,WAAU,0BACb;AAAA,oDAAC,SAAI,WAAU,8BACb;AAAA,qDAAC,SAAI,WAAU,4BAA2B,oHAAiB;AAAA,QAC3D,8CAAC,SAAI,WAAU,2BAA0B;AAAA;AAAA,UAClC,6CAAC,YAAO,wDAAY;AAAA,UAAS;AAAA,WACpC;AAAA,SACF;AAAA,MACC,sBACC;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAS;AAAA,UACV;AAAA;AAAA,MAED;AAAA,OAEJ;AAAA,IAIF,8CAAC,SAAI,WAAU,uBACb;AAAA,oDAAC,SAAI,WAAU,sBACb;AAAA,qDAAC,UAAK,WAAU,qBAAoB,yFAAe;AAAA,QACnD,6CAAC,UAAK,WAAU,wBAAuB,6IAA2B;AAAA,SACpE;AAAA,MAEC,cAAc,WAAW,SAAS,IACjC,6CAAC,SAAI,WAAU,6BACb,wDAAC,WAAM,WAAU,qBACf;AAAA,qDAAC,WACC,wDAAC,QACC;AAAA,uDAAC,QAAG,sCAAI;AAAA,UACR,6CAAC,QAAG,0BAAE;AAAA,UACN,6CAAC,QAAG,4BAAI;AAAA,UACR,6CAAC,QAAG,sCAAI;AAAA,UACR,6CAAC,QAAG,uCAAK;AAAA,UACT,6CAAC,QAAG,0BAAE;AAAA,UACN,6CAAC,QAAG,0BAAE;AAAA,WACR,GACF;AAAA,QACA,6CAAC,WACE,qBAAW,IAAI,CAAC,KAAK,QAAQ;AAC5B,gBAAM,QACJ,IAAI,WAAW,WACd,IAAI,WAAsB,YAC1B,IAAI,QACH,IAAI,IAAI,SAAS,KAChB,IAAI,IAAI,UACP,IAAI,IAAI,MAAM,SAAS,iCAAiC,KACxD,IAAI,IAAI,MAAM,SAAS,gCAAgC,KACvD,IAAI,IAAI,MAAM,SAAS,yCAAyC,MAElE,QAAQ,IAAI,IAAI,WAAW,IAAI,IAAI,QAAQ,WAAW,cAAc,CAAC;AAGzE,gBAAM,aAAa,OAAO,IAAI,WAAW,IAAI,KAAK,WAAW,CAAC;AAE9D,iBACE,8CAAC,QACC;AAAA,yDAAC,QAAG,WAAU,mBAAmB,wBAAc,IAAI,UAAU,GAAE;AAAA,YAC/D,6CAAC,QACC,uDAAC,UAAK,WAAW,qBAAqB,QAAQ,QAAQ,IAAI,IACvD,kBAAQ,iBAAO,gBAClB,GACF;AAAA,YACA,6CAAC,QAAG,WAAU,sBACX,uBAAa,IACZ,8CAAC,UAAK,WAAU,4BAA2B;AAAA;AAAA,cACvC;AAAA,eACJ,IAEA,6CAAC,UAAK,WAAU,4BAA2B,oBAE3C,GAEJ;AAAA,YACA,6CAAC,QAAG,WAAU,oBACZ,uDAAC,UAAM,cAAI,YAAW,GACxB;AAAA,YACA,8CAAC,QAAG,WAAU,qBACX;AAAA,kBAAI,iBAAiB;AAAA,cAAE;AAAA,cAAI,IAAI,qBAAqB;AAAA,eACvD;AAAA,YACA,6CAAC,QAAG,WAAU,mBACX,cAAI,kBAAkB,SACzB;AAAA,YACA,6CAAC,QAAG,WAAU,uBACX,cAAI,WAAW,GAAG,IAAI,QAAQ,MAAM,UACvC;AAAA,eA7BO,IAAI,MAAM,GA8BnB;AAAA,QAEJ,CAAC,GACH;AAAA,SACF,GACF,IAEA,6CAAC,SAAI,WAAU,qBACb,uDAAC,UAAK,mQAA6C,GACrD;AAAA,OAEJ;AAAA,KACF;AAEJ;;;ACnNA,IAAAC,gBAA2C;AAyDnC,IAAAC,sBAAA;AArDD,IAAM,cAGR,CAAC,EAAE,QAAQ,oBAAoB,MAAM;AACxC,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAS,OAAO,UAAU,EAAE;AACxD,QAAM,CAAC,aAAa,cAAc,QAAI;AAAA,IACpC,OAAO,eAAe,OAAO,iBAAiB;AAAA,EAChD;AACA,QAAM,CAAC,cAAc,eAAe,QAAI;AAAA,IACtC,OAAO,WAAW;AAAA,EACpB;AACA,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAS,OAAO,iBAAiB,EAAE;AACvE,QAAM,CAAC,UAAU,WAAW,QAAI;AAAA,IAC9B,OAAO,YAAY,2BAA2B,OAAO,YAAY;AAAA,EACnE;AACA,QAAM,CAAC,SAAS,UAAU,QAAI,wBAAS,KAAK;AAC5C,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAS,KAAK;AAChD,QAAM,CAAC,UAAU,WAAW,QAAI,wBAAS,KAAK;AAE9C,QAAM,CAAC,QAAQ,SAAS,QAAI,wBAAS,KAAK;AAC1C,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAS,KAAK;AAEpD,+BAAU,MAAM;AACd,cAAU,OAAO,UAAU,EAAE;AAC7B,mBAAe,OAAO,eAAe,OAAO,iBAAiB,EAAE;AAC/D,oBAAgB,OAAO,WAAW,uBAAuB;AACzD,kBAAc,OAAO,iBAAiB,EAAE;AACxC;AAAA,MACE,OAAO,YAAY,2BAA2B,OAAO,YAAY;AAAA,IACnE;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,aAAa,YAAY;AAC7B,cAAU,IAAI;AACd,UAAM,eAAe,WAAW,WAAW,KAAK,KAAK,0BAA0B;AAC/E,UAAM,KAAK,MAAM,MAAM,WAAW;AAAA,MAChC,QAAQ,OAAO,KAAK;AAAA,MACpB,aAAa,YAAY,KAAK;AAAA,MAC9B,eAAe,YAAY,KAAK;AAAA,MAChC,SAAS;AAAA,MACT,eAAe,WAAW,KAAK;AAAA,IACjC,CAAC;AACD,cAAU,KAAK;AACf,QAAI,IAAI;AACN,qBAAe,IAAI;AACnB,iBAAW,MAAM,eAAe,KAAK,GAAG,IAAI;AAAA,IAC9C;AAAA,EACF;AAEA,SACE,8CAAC,SAAI,WAAU,sBAEb;AAAA,kDAAC,SAAI,WAAU,yBACb;AAAA,oDAAC,SAAI,WAAU,0BACb;AAAA,qDAAC,UAAK,WAAU,wBAAuB,qDAAmB;AAAA,QAC1D,6CAAC,UAAK,WAAU,uBAAsB,4LAEtC;AAAA,SACF;AAAA,MAEA,8CAAC,SAAI,WAAU,sBACb;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAW,oBAAoB,CAAC,YAAY,iBAAiB,0BAA0B,WAAW,EAAE;AAAA,YACpG,SAAS,MAAM;AACb,0BAAY,KAAK;AACjB,8BAAgB,uBAAuB;AAAA,YACzC;AAAA,YACD;AAAA;AAAA,QAED;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAW,oBAAoB,CAAC,YAAY,iBAAiB,yBAAyB,WAAW,EAAE;AAAA,YACnG,SAAS,MAAM;AACb,0BAAY,KAAK;AACjB,8BAAgB,sBAAsB;AAAA,YACxC;AAAA,YACD;AAAA;AAAA,QAED;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,WAAW,oBAAoB,WAAW,WAAW,EAAE;AAAA,YACvD,SAAS,MAAM,YAAY,IAAI;AAAA,YAChC;AAAA;AAAA,QAED;AAAA,SACF;AAAA,MAEC,YACC;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,aAAY;AAAA,UACZ,OAAO;AAAA,UACP,UAAU,CAAC,MAAM,cAAc,EAAE,OAAO,KAAK;AAAA,UAC7C,OAAO,EAAE,WAAW,MAAM;AAAA;AAAA,MAC5B;AAAA,OAEJ;AAAA,IAGA,8CAAC,SAAI,WAAU,yBACb;AAAA,oDAAC,SAAI,WAAU,0BACb;AAAA,qDAAC,UAAK,WAAU,wBAAuB,oEAAS;AAAA,QAChD,6CAAC,UAAK,WAAU,uBAAsB,qMAEtC;AAAA,SACF;AAAA,MAEA,8CAAC,SAAI,WAAU,6BAEb;AAAA,sDAAC,SAAI,WAAU,gBACb;AAAA,wDAAC,SAAI,WAAU,uBACb;AAAA,yDAAC,WAAM,WAAU,gBAAe,0CAAkB;AAAA,YAClD;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,SAAS,MAAM,WAAW,CAAC,OAAO;AAAA,gBAEjC,oBAAU,iBAAO;AAAA;AAAA,YACpB;AAAA,aACF;AAAA,UACA,6CAAC,SAAI,WAAU,wBACb;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,UAAU,SAAS;AAAA,cACzB,WAAU;AAAA,cACV,aAAY;AAAA,cACZ,OAAO;AAAA,cACP,UAAU,CAAC,MAAM,UAAU,EAAE,OAAO,KAAK;AAAA;AAAA,UAC3C,GACF;AAAA,UACA,6CAAC,UAAK,WAAU,qBAAoB,6IAEpC;AAAA,WACF;AAAA,QAGA,8CAAC,SAAI,WAAU,gBACb;AAAA,wDAAC,SAAI,WAAU,uBACb;AAAA,yDAAC,WAAM,WAAU,gBAAe,iEAAqB;AAAA,YACrD;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,SAAS,MAAM,aAAa,CAAC,SAAS;AAAA,gBAErC,sBAAY,iBAAO;AAAA;AAAA,YACtB;AAAA,aACF;AAAA,UACA,6CAAC,SAAI,WAAU,wBACb;AAAA,YAAC;AAAA;AAAA,cACC,MAAM,YAAY,SAAS;AAAA,cAC3B,WAAU;AAAA,cACV,aAAY;AAAA,cACZ,OAAO;AAAA,cACP,UAAU,CAAC,MAAM,eAAe,EAAE,OAAO,KAAK;AAAA;AAAA,UAChD,GACF;AAAA,UACA,8CAAC,SAAI,WAAU,uBACb;AAAA,yDAAC,UAAK,WAAU,qBAAoB,gIAEpC;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,SAAS,MAAM,YAAY,CAAC,QAAQ;AAAA,gBACpC,OAAO,EAAE,UAAU,QAAQ,YAAY,SAAS;AAAA,gBAE/C,qBAAW,6BAAS;AAAA;AAAA,YACvB;AAAA,aACF;AAAA,WACF;AAAA,SACF;AAAA,MAGC,YACC,8CAAC,SAAI,WAAU,sBACb;AAAA,qDAAC,SAAI,WAAU,qBAAoB,oHAAiB;AAAA,QACpD,8CAAC,QAAG,WAAU,oBACZ;AAAA,wDAAC,QAAG;AAAA;AAAA,YACQ;AAAA,YACV,6CAAC,OAAE,MAAK,sCAAqC,QAAO,UAAS,KAAI,cAAa,wCAE9E;AAAA,YAAK;AAAA,YAAI;AAAA,aAEX;AAAA,UACA,8CAAC,QAAG;AAAA;AAAA,YAA0B,6CAAC,UAAK,2BAAa;AAAA,YAAO;AAAA,aAAC;AAAA,UACzD,6CAAC,QAAG,kPAAsC;AAAA,WAC5C;AAAA,SACF;AAAA,OAEJ;AAAA,IAGA,8CAAC,SAAI,WAAU,yBACb;AAAA,oDAAC,SAAI,WAAU,0BACb;AAAA,qDAAC,UAAK,WAAU,wBAAuB,6EAAkB;AAAA,QACzD,8CAAC,UAAK,WAAU,uBAAsB;AAAA;AAAA,UACR,6CAAC,UAAK,mBAAK;AAAA,UAAO;AAAA,WAChD;AAAA,SACF;AAAA,MAEA,8CAAC,SAAI,WAAU,2BACb;AAAA,sDAAC,SAAI,WAAU,kBACb;AAAA,uDAAC,UAAK,WAAU,kBAAiB,4CAAK;AAAA,UACtC,8CAAC,UAAK,WAAU,kBAAiB;AAAA,yDAAC,UAAK,mBAAK;AAAA,YAAO;AAAA,aAAoB;AAAA,WACzE;AAAA,QACA,8CAAC,SAAI,WAAU,kBACb;AAAA,uDAAC,UAAK,WAAU,kBAAiB,wDAAO;AAAA,UACxC,6CAAC,SAAI,WAAU,mBACZ,8BAAoB,SAAS,IAC5B,oBAAoB,IAAI,CAAC,MACvB,6CAAC,UAAa,WAAU,qBACrB,eADQ,CAEX,CACD,IAED,6CAAC,UAAK,WAAU,qBAAoB,oLAA+B,GAEvE;AAAA,WACF;AAAA,SACF;AAAA,OACF;AAAA,IAGA,8CAAC,SAAI,WAAU,mBACb;AAAA,mDAAC,SAAI,WAAU,sBACZ,yBACC,6CAAC,UAAK,WAAU,sBAAqB,0EAErC,GAEJ;AAAA,MACA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAU;AAAA,UACV,SAAS;AAAA,UACT,UAAU;AAAA,UACV,OAAO,EAAE,UAAU,QAAQ;AAAA,UAE1B,mBAAS,gCAAY;AAAA;AAAA,MACxB;AAAA,OACF;AAAA,KACF;AAEJ;;;AJpLQ,IAAAC,sBAAA;AA9DD,IAAM,qBAA+B,MAAM;AAChD,QAAM,CAAC,OAAO,QAAQ,QAAI,wBAAqB,MAAM,SAAS,CAAC;AAC/D,QAAM,CAAC,WAAW,YAAY,QAAI,wBAAiB,QAAQ;AAC3D,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAuC,KAAK;AAChF,QAAM,CAAC,aAAa,cAAc,QAAI,wBAAS,EAAE;AACjD,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAS,KAAK;AAClD,QAAM,CAAC,YAAY,aAAa,QAAI,wBAAS,KAAK;AAClD,QAAM,CAAC,gBAAgB,iBAAiB,QAAI,wBAAS,KAAK;AAE1D,+BAAU,MAAM;AACd,UAAM,QAAQ,MAAM,UAAU,MAAM;AAClC,eAAS,EAAE,GAAG,MAAM,SAAS,EAAE,CAAC;AAAA,IAClC,CAAC;AACD,UAAM,WAAW;AACjB,WAAO;AAAA,EACT,GAAG,CAAC,CAAC;AAEL,QAAM,iBAAiB,YAAY;AACjC,kBAAc,IAAI;AAClB,UAAM,MAAM,SAAS;AACrB,kBAAc,KAAK;AAAA,EACrB;AAEA,QAAM,qBAAqB,YAAY;AACrC,kBAAc,IAAI;AAClB,UAAM,MAAM,WAAW;AACvB,kBAAc,KAAK;AACnB,sBAAkB,IAAI;AACtB,eAAW,MAAM,kBAAkB,KAAK,GAAG,GAAI;AAAA,EACjD;AAEA,QAAM,aAAa,MAAM,OAAO,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE;AACvD,QAAM,cAAc,MAAM,OAAO,OAAO,CAAC,MAAM,QAAQ,EAAE,QAAQ,CAAC,EAAE;AAEpE,QAAM,iBAAiB,MAAM,OAAO,OAAO,CAAC,MAAM;AAChD,QAAI,eAAe,aAAa,CAAC,EAAE,MAAO,QAAO;AACjD,QAAI,eAAe,YAAY,CAAC,EAAE,SAAU,QAAO;AACnD,QAAI,YAAY,KAAK,GAAG;AACtB,YAAM,IAAI,YAAY,YAAY,EAAE,KAAK;AACzC,aACE,EAAE,WAAW,YAAY,EAAE,SAAS,CAAC,KACrC,EAAE,MAAM,YAAY,EAAE,SAAS,CAAC,KAC/B,EAAE,UAAU,iBAAiB,EAAE,SAAS,cAAc,YAAY,EAAE,SAAS,CAAC,KAC9E,EAAE,UAAU,gBAAgB,EAAE,SAAS,aAAa,YAAY,EAAE,SAAS,CAAC,KAC5E,EAAE,UAAU,eAAe,EAAE,SAAS,YAAY,YAAY,EAAE,SAAS,CAAC;AAAA,IAE/E;AACA,WAAO;AAAA,EACT,CAAC;AAGD,QAAM,eAAe,CAAC,GAAG,cAAc,EAAE,KAAK,CAAC,GAAG,MAAM;AACtD,QAAI,EAAE,UAAU,EAAE,OAAO;AACvB,aAAO,EAAE,QAAQ,KAAK;AAAA,IACxB;AACA,WAAO,EAAE,WAAW,cAAc,EAAE,UAAU;AAAA,EAChD,CAAC;AAED,SACE,8CAAC,SAAI,WAAU,oBAEb;AAAA,kDAAC,SAAI,WAAU,sBACb;AAAA,oDAAC,SAAI,WAAU,sBACb;AAAA,qDAAC,QAAG,WAAU,qBAAoB,sCAAS;AAAA,QAC3C,6CAAC,OAAE,WAAU,wBAAuB,oNAEpC;AAAA,SACF;AAAA,MAEC,MAAM,SAAS,kBACd;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,SAAS,MAAM,aAAa,SAAS;AAAA,UACrC,OAAM;AAAA,UAEN;AAAA,yDAAC,UAAK,WAAU,mBAAkB,uCAAK;AAAA,YACvC,6CAAC,UAAK,WAAU,oBAAoB,gBAAM,QAAQ,yBAAwB;AAAA;AAAA;AAAA,MAC5E;AAAA,OAEJ;AAAA,IAGA,8CAAC,SAAI,WAAU,mBACb;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAW,kBAAkB,cAAc,WAAW,WAAW,EAAE;AAAA,UACnE,SAAS,MAAM,aAAa,QAAQ;AAAA,UAEpC;AAAA,yDAAC,UAAK,sCAAI;AAAA,YACV,6CAAC,UAAK,WAAU,oBAAoB,gBAAM,OAAO,QAAO;AAAA;AAAA;AAAA,MAC1D;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAW,kBAAkB,cAAc,YAAY,WAAW,EAAE;AAAA,UACpE,SAAS,MAAM,aAAa,SAAS;AAAA,UAErC;AAAA,yDAAC,UAAK,sCAAI;AAAA,YACT,MAAM,SAAS,kBACd,6CAAC,UAAK,WAAU,4BACb,gBAAM,QAAQ,yBACjB;AAAA;AAAA;AAAA,MAEJ;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,WAAW,kBAAkB,cAAc,WAAW,WAAW,EAAE;AAAA,UACnE,SAAS,MAAM,aAAa,QAAQ;AAAA,UAEpC,uDAAC,UAAK,sCAAI;AAAA;AAAA,MACZ;AAAA,OACF;AAAA,IAGC,cAAc,YACb,8CAAC,SAAI,WAAU,+BAEb;AAAA,oDAAC,SAAI,WAAU,yBACb;AAAA,sDAAC,SAAI,WAAU,uBACb;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAW,qBAAqB,eAAe,QAAQ,WAAW,EAAE;AAAA,cACpE,SAAS,MAAM,cAAc,KAAK;AAAA,cACnC;AAAA;AAAA,gBACM,MAAM,OAAO;AAAA,gBAAO;AAAA;AAAA;AAAA,UAC3B;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAW,qBAAqB,eAAe,YAAY,WAAW,EAAE;AAAA,cACxE,SAAS,MAAM,cAAc,SAAS;AAAA,cACvC;AAAA;AAAA,gBACO;AAAA,gBAAW;AAAA;AAAA;AAAA,UACnB;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAW,qBAAqB,eAAe,WAAW,WAAW,EAAE;AAAA,cACvE,SAAS,MAAM,cAAc,QAAQ;AAAA,cACtC;AAAA;AAAA,gBACO;AAAA,gBAAY;AAAA;AAAA;AAAA,UACpB;AAAA,WACF;AAAA,QAEA,8CAAC,SAAI,WAAU,wBACb;AAAA,wDAAC,SAAI,WAAU,yBACb;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,aAAY;AAAA,gBACZ,OAAO;AAAA,gBACP,UAAU,CAAC,MAAM,eAAe,EAAE,OAAO,KAAK;AAAA;AAAA,YAChD;AAAA,YACC,eACC;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,WAAU;AAAA,gBACV,SAAS,MAAM,eAAe,EAAE;AAAA,gBAChC,OAAM;AAAA,gBACP;AAAA;AAAA,YAED;AAAA,aAEJ;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAW,iDAAiD,iBAAiB,0BAA0B,EAAE;AAAA,cACzG,SAAS;AAAA,cACT,UAAU;AAAA,cACV,gBAAa;AAAA,cACb,oBAAiB;AAAA,cAEhB,uBAAa,0BAAW,iBAAiB,8BAAU;AAAA;AAAA,UACtD;AAAA,UAEA;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,WAAU;AAAA,cACV,SAAS;AAAA,cACT,UAAU,cAAc,MAAM,OAAO,WAAW;AAAA,cAChD,gBAAa;AAAA,cACb,oBAAiB;AAAA,cAEhB,uBAAa,sCAAa;AAAA;AAAA,UAC7B;AAAA,WACF;AAAA,SACF;AAAA,MAGA,6CAAC,SAAI,WAAU,qBACZ,gBAAM,WAAW,MAAM,OAAO,WAAW,IACxC,8CAAC,SAAI,WAAU,sBACb;AAAA,qDAAC,SAAI,WAAU,kBAAiB;AAAA,QAChC,6CAAC,UAAK,4GAAwB;AAAA,SAChC,IACE,aAAa,SAAS,IACxB,aAAa,IAAI,CAAC,MAChB,6CAAC,gBAAgC,OAAO,KAArB,EAAE,UAAsB,CAC5C,IAED,6CAAC,SAAI,WAAU,sBACZ,wBACC,8CAAC,UAAK;AAAA;AAAA,QAAQ;AAAA,QAAY;AAAA,SAAI,IAC5B,eAAe,YACjB,6CAAC,UAAK,wNAEN,IACE,eAAe,WACjB,6CAAC,UAAK,gRAEN,IACE,CAAC,MAAM,OAAO,SAChB,6CAAC,UAAK,4OAEN,IAEA,6CAAC,UAAK,iLAAiC,GAE3C,GAEJ;AAAA,OACF;AAAA,IAGD,cAAc,aACb,6CAAC,SAAI,WAAU,gCACb;AAAA,MAAC;AAAA;AAAA,QACC,SAAS,MAAM;AAAA,QACf,QAAQ,MAAM;AAAA,QACd,YAAY,MAAM;AAAA,QAClB,oBAAoB,MAAM,aAAa,QAAQ;AAAA;AAAA,IACjD,GACF;AAAA,IAGD,cAAc,YACb,6CAAC,SAAI,WAAU,+BACb;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,MAAM;AAAA,QACd,qBAAqB,MAAM;AAAA;AAAA,IAC7B,GACF;AAAA,KAEJ;AAEJ;;;AK7PA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ANGO,IAAM,OAAO;AACb,IAAM,SAAS,CAAC,OAAO;AAE9B,SAAS,eAAe;AACtB,MAAI,OAAO,aAAa,YAAa;AACrC,QAAM,UAAU;AAChB,MAAI,CAAC,SAAS,eAAe,OAAO,GAAG;AACrC,UAAM,QAAQ,SAAS,cAAc,OAAO;AAC5C,UAAM,KAAK;AACX,UAAM,cAAc;AACpB,aAAS,KAAK,YAAY,KAAK;AAAA,EACjC;AACF;AAEO,SAAS,MAAM,KAAgB;AACpC,eAAa;AACb,MAAI,OAAO,WAAW,YAAa;AAEnC,MAAI;AACF,UAAM,QAAQ,KAAK,UAAU,KAAK,MAAM,IAAI,IAAI,OAAO,IAAI;AAC3D,QAAI,CAAC,SAAS,OAAO,MAAM,WAAW,WAAY;AAElD,UAAM,OAAO,oBAAoB,MAAM;AACrC,aAAO,MAAM;AAAA,QACX;AAAA,UACE,MAAM;AAAA,UACN,IAAI;AAAA,UACJ,OAAO;AAAA,UACP,OAAO,MAAM;AAAA,QACf;AAAA,QACA;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH,SAAS,KAAK;AACZ,YAAQ,KAAK,kDAAkD,GAAG;AAAA,EACpE;AACF;",
6
+ "names": ["import_react", "name", "import_react", "import_jsx_runtime", "import_react", "import_jsx_runtime", "import_jsx_runtime"]
7
+ }