@zendir/ui 0.1.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.
- package/CHANGELOG.md +19 -0
- package/LICENSE +21 -0
- package/README.md +589 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +421 -0
- package/dist/index.js.map +1 -0
- package/dist/react/3d/EarthViewer.d.ts +46 -0
- package/dist/react/3d/EarthViewer.js +836 -0
- package/dist/react/3d/EarthViewer.js.map +1 -0
- package/dist/react/3d/SolarSystemViewer.d.ts +43 -0
- package/dist/react/3d/SolarSystemViewer.js +372 -0
- package/dist/react/3d/SolarSystemViewer.js.map +1 -0
- package/dist/react/3d/ZenSpace3D.d.ts +16 -0
- package/dist/react/3d/ZenSpace3D.js +1253 -0
- package/dist/react/3d/ZenSpace3D.js.map +1 -0
- package/dist/react/3d/ZenSpace3DCesium.d.ts +9 -0
- package/dist/react/3d/ZenSpace3DCesium.js +186 -0
- package/dist/react/3d/ZenSpace3DCesium.js.map +1 -0
- package/dist/react/3d/ZenSpace3DShaders.d.ts +78 -0
- package/dist/react/3d/ZenSpace3DShaders.js +94 -0
- package/dist/react/3d/ZenSpace3DShaders.js.map +1 -0
- package/dist/react/3d/ZenSpace3DTypes.d.ts +614 -0
- package/dist/react/3d/ZenSpace3DUtils.d.ts +183 -0
- package/dist/react/3d/ZenSpace3DUtils.js +213 -0
- package/dist/react/3d/ZenSpace3DUtils.js.map +1 -0
- package/dist/react/3d/index.d.ts +23 -0
- package/dist/react/3d/threeLoader.d.ts +22 -0
- package/dist/react/3d/threeLoader.js +18 -0
- package/dist/react/3d/threeLoader.js.map +1 -0
- package/dist/react/astro/ClassificationBanner.d.ts +25 -0
- package/dist/react/astro/ClassificationBanner.js +83 -0
- package/dist/react/astro/ClassificationBanner.js.map +1 -0
- package/dist/react/astro/GlobalStatusBar.d.ts +42 -0
- package/dist/react/astro/GlobalStatusBar.js +165 -0
- package/dist/react/astro/GlobalStatusBar.js.map +1 -0
- package/dist/react/astro/MissionClock.d.ts +169 -0
- package/dist/react/astro/MissionClock.js +411 -0
- package/dist/react/astro/MissionClock.js.map +1 -0
- package/dist/react/astro/MonitoringIcon.d.ts +60 -0
- package/dist/react/astro/MonitoringIcon.js +369 -0
- package/dist/react/astro/MonitoringIcon.js.map +1 -0
- package/dist/react/astro/Notification.d.ts +42 -0
- package/dist/react/astro/Notification.js +156 -0
- package/dist/react/astro/Notification.js.map +1 -0
- package/dist/react/astro/Progress.d.ts +39 -0
- package/dist/react/astro/Progress.js +149 -0
- package/dist/react/astro/Progress.js.map +1 -0
- package/dist/react/astro/SimulationControls.d.ts +136 -0
- package/dist/react/astro/SimulationControls.js +668 -0
- package/dist/react/astro/SimulationControls.js.map +1 -0
- package/dist/react/astro/StatusIndicator.d.ts +34 -0
- package/dist/react/astro/StatusIndicator.js +189 -0
- package/dist/react/astro/StatusIndicator.js.map +1 -0
- package/dist/react/astro/UnifiedTimeline.d.ts +106 -0
- package/dist/react/astro/UnifiedTimeline.js +1768 -0
- package/dist/react/astro/UnifiedTimeline.js.map +1 -0
- package/dist/react/astro/index.d.ts +63 -0
- package/dist/react/cards/AccessCard.d.ts +37 -0
- package/dist/react/cards/AccessCard.js +410 -0
- package/dist/react/cards/AccessCard.js.map +1 -0
- package/dist/react/cards/OrbitCard.d.ts +31 -0
- package/dist/react/cards/OrbitCard.js +372 -0
- package/dist/react/cards/OrbitCard.js.map +1 -0
- package/dist/react/cards/SpacecraftCard.d.ts +54 -0
- package/dist/react/cards/SpacecraftCard.js +941 -0
- package/dist/react/cards/SpacecraftCard.js.map +1 -0
- package/dist/react/cards/TelemetryCard.d.ts +40 -0
- package/dist/react/cards/TelemetryCard.js +742 -0
- package/dist/react/cards/TelemetryCard.js.map +1 -0
- package/dist/react/cards/TelemetryStreamCard.d.ts +59 -0
- package/dist/react/cards/TelemetryStreamCard.js +309 -0
- package/dist/react/cards/TelemetryStreamCard.js.map +1 -0
- package/dist/react/cards/index.d.ts +13 -0
- package/dist/react/charts/GroundTrackMap.d.ts +112 -0
- package/dist/react/charts/GroundTrackMap.js +1123 -0
- package/dist/react/charts/GroundTrackMap.js.map +1 -0
- package/dist/react/charts/GroundTrackMapLeaflet.d.ts +26 -0
- package/dist/react/charts/GroundTrackMapLeaflet.js +571 -0
- package/dist/react/charts/GroundTrackMapLeaflet.js.map +1 -0
- package/dist/react/charts/groundTrackMapLeafletTiles.d.ts +22 -0
- package/dist/react/charts/groundTrackMapLeafletTiles.js +11 -0
- package/dist/react/charts/groundTrackMapLeafletTiles.js.map +1 -0
- package/dist/react/charts/groundTrackMapLeafletUtils.d.ts +24 -0
- package/dist/react/charts/groundTrackMapLeafletUtils.js +109 -0
- package/dist/react/charts/groundTrackMapLeafletUtils.js.map +1 -0
- package/dist/react/charts/index.d.ts +10 -0
- package/dist/react/charts/unified/AstroChart.d.ts +24 -0
- package/dist/react/charts/unified/AstroChart.js +1405 -0
- package/dist/react/charts/unified/AstroChart.js.map +1 -0
- package/dist/react/charts/unified/PowerOverviewChart.d.ts +73 -0
- package/dist/react/charts/unified/PowerOverviewChart.js +488 -0
- package/dist/react/charts/unified/PowerOverviewChart.js.map +1 -0
- package/dist/react/charts/unified/domain.d.ts +845 -0
- package/dist/react/charts/unified/domain.js +3168 -0
- package/dist/react/charts/unified/domain.js.map +1 -0
- package/dist/react/charts/unified/generators.d.ts +276 -0
- package/dist/react/charts/unified/generators.js +518 -0
- package/dist/react/charts/unified/generators.js.map +1 -0
- package/dist/react/charts/unified/index.d.ts +55 -0
- package/dist/react/charts/unified/presets.d.ts +290 -0
- package/dist/react/charts/unified/presets.js +999 -0
- package/dist/react/charts/unified/presets.js.map +1 -0
- package/dist/react/charts/unified/sync.d.ts +69 -0
- package/dist/react/charts/unified/sync.js +219 -0
- package/dist/react/charts/unified/sync.js.map +1 -0
- package/dist/react/charts/unified/theme.d.ts +447 -0
- package/dist/react/charts/unified/theme.js +562 -0
- package/dist/react/charts/unified/theme.js.map +1 -0
- package/dist/react/charts/unified/types.d.ts +826 -0
- package/dist/react/charts/unified/useChartStream.d.ts +58 -0
- package/dist/react/charts/unified/useChartStream.js +226 -0
- package/dist/react/charts/unified/useChartStream.js.map +1 -0
- package/dist/react/chatgpt/AppCard.d.ts +59 -0
- package/dist/react/chatgpt/AppCard.js +306 -0
- package/dist/react/chatgpt/AppCard.js.map +1 -0
- package/dist/react/chatgpt/ChatGPTCard.d.ts +6 -0
- package/dist/react/chatgpt/index.d.ts +167 -0
- package/dist/react/chatgpt/index.js +166 -0
- package/dist/react/chatgpt/index.js.map +1 -0
- package/dist/react/context/DisplaySettingsContext.d.ts +107 -0
- package/dist/react/context/DisplaySettingsContext.js +169 -0
- package/dist/react/context/DisplaySettingsContext.js.map +1 -0
- package/dist/react/context/index.d.ts +5 -0
- package/dist/react/core/ActivityPlanner.d.ts +45 -0
- package/dist/react/core/ActivityPlanner.js +532 -0
- package/dist/react/core/ActivityPlanner.js.map +1 -0
- package/dist/react/core/AppBar.d.ts +71 -0
- package/dist/react/core/AppBar.js +817 -0
- package/dist/react/core/AppBar.js.map +1 -0
- package/dist/react/core/AstroIcon.d.ts +84 -0
- package/dist/react/core/AstroIcon.js +1243 -0
- package/dist/react/core/AstroIcon.js.map +1 -0
- package/dist/react/core/Badge.d.ts +27 -0
- package/dist/react/core/Badge.js +134 -0
- package/dist/react/core/Badge.js.map +1 -0
- package/dist/react/core/Button.d.ts +26 -0
- package/dist/react/core/Button.js +306 -0
- package/dist/react/core/Button.js.map +1 -0
- package/dist/react/core/CardHeader.d.ts +34 -0
- package/dist/react/core/CardHeader.js +316 -0
- package/dist/react/core/CardHeader.js.map +1 -0
- package/dist/react/core/ChatPanel.d.ts +627 -0
- package/dist/react/core/ChatPanel.js +1144 -0
- package/dist/react/core/ChatPanel.js.map +1 -0
- package/dist/react/core/Checkbox.d.ts +26 -0
- package/dist/react/core/Checkbox.js +130 -0
- package/dist/react/core/Checkbox.js.map +1 -0
- package/dist/react/core/ColorPickerPanel.d.ts +25 -0
- package/dist/react/core/ColorPickerPanel.js +293 -0
- package/dist/react/core/ColorPickerPanel.js.map +1 -0
- package/dist/react/core/CommandBuilder.d.ts +74 -0
- package/dist/react/core/CommandBuilder.js +518 -0
- package/dist/react/core/CommandBuilder.js.map +1 -0
- package/dist/react/core/ConfirmDialog.d.ts +45 -0
- package/dist/react/core/ConfirmDialog.js +315 -0
- package/dist/react/core/ConfirmDialog.js.map +1 -0
- package/dist/react/core/ConnectionForm.d.ts +57 -0
- package/dist/react/core/ConnectionForm.js +496 -0
- package/dist/react/core/ConnectionForm.js.map +1 -0
- package/dist/react/core/Container.d.ts +51 -0
- package/dist/react/core/Container.js +670 -0
- package/dist/react/core/Container.js.map +1 -0
- package/dist/react/core/CopyButton.d.ts +39 -0
- package/dist/react/core/CopyButton.js +105 -0
- package/dist/react/core/CopyButton.js.map +1 -0
- package/dist/react/core/DataTable.d.ts +113 -0
- package/dist/react/core/DataTable.js +446 -0
- package/dist/react/core/DataTable.js.map +1 -0
- package/dist/react/core/DataValue.d.ts +64 -0
- package/dist/react/core/DataValue.js +545 -0
- package/dist/react/core/DataValue.js.map +1 -0
- package/dist/react/core/Dialog.d.ts +32 -0
- package/dist/react/core/Dialog.js +201 -0
- package/dist/react/core/Dialog.js.map +1 -0
- package/dist/react/core/FileExplorer.d.ts +65 -0
- package/dist/react/core/FileExplorer.js +520 -0
- package/dist/react/core/FileExplorer.js.map +1 -0
- package/dist/react/core/GlassCard.d.ts +129 -0
- package/dist/react/core/GlassCard.js +375 -0
- package/dist/react/core/GlassCard.js.map +1 -0
- package/dist/react/core/HeaderIconWithStatus.d.ts +39 -0
- package/dist/react/core/HeaderIconWithStatus.js +157 -0
- package/dist/react/core/HeaderIconWithStatus.js.map +1 -0
- package/dist/react/core/HexViewer.d.ts +143 -0
- package/dist/react/core/HexViewer.js +1106 -0
- package/dist/react/core/HexViewer.js.map +1 -0
- package/dist/react/core/Icon.d.ts +32 -0
- package/dist/react/core/Icon.js +142 -0
- package/dist/react/core/Icon.js.map +1 -0
- package/dist/react/core/ImageGallery.d.ts +41 -0
- package/dist/react/core/ImageGallery.js +320 -0
- package/dist/react/core/ImageGallery.js.map +1 -0
- package/dist/react/core/Input.d.ts +38 -0
- package/dist/react/core/Input.js +288 -0
- package/dist/react/core/Input.js.map +1 -0
- package/dist/react/core/LimitsBar.d.ts +51 -0
- package/dist/react/core/LimitsBar.js +200 -0
- package/dist/react/core/LimitsBar.js.map +1 -0
- package/dist/react/core/LogViewer.d.ts +61 -0
- package/dist/react/core/LogViewer.js +599 -0
- package/dist/react/core/LogViewer.js.map +1 -0
- package/dist/react/core/MessageStream.d.ts +58 -0
- package/dist/react/core/MessageStream.js +455 -0
- package/dist/react/core/MessageStream.js.map +1 -0
- package/dist/react/core/MissionCalendar.d.ts +81 -0
- package/dist/react/core/MissionCalendar.js +1049 -0
- package/dist/react/core/MissionCalendar.js.map +1 -0
- package/dist/react/core/NumberInput.d.ts +85 -0
- package/dist/react/core/NumberInput.js +507 -0
- package/dist/react/core/NumberInput.js.map +1 -0
- package/dist/react/core/PacketViewer.d.ts +73 -0
- package/dist/react/core/PacketViewer.js +431 -0
- package/dist/react/core/PacketViewer.js.map +1 -0
- package/dist/react/core/Pagination.d.ts +30 -0
- package/dist/react/core/Pagination.js +190 -0
- package/dist/react/core/Pagination.js.map +1 -0
- package/dist/react/core/PinInput.d.ts +41 -0
- package/dist/react/core/PinInput.js +210 -0
- package/dist/react/core/PinInput.js.map +1 -0
- package/dist/react/core/Popover.d.ts +55 -0
- package/dist/react/core/Popover.js +288 -0
- package/dist/react/core/Popover.js.map +1 -0
- package/dist/react/core/Select.d.ts +42 -0
- package/dist/react/core/Select.js +303 -0
- package/dist/react/core/Select.js.map +1 -0
- package/dist/react/core/SideNav.d.ts +103 -0
- package/dist/react/core/SideNav.js +551 -0
- package/dist/react/core/SideNav.js.map +1 -0
- package/dist/react/core/SidePanel.d.ts +33 -0
- package/dist/react/core/SidePanel.js +199 -0
- package/dist/react/core/SidePanel.js.map +1 -0
- package/dist/react/core/Tabs.d.ts +47 -0
- package/dist/react/core/Tabs.js +129 -0
- package/dist/react/core/Tabs.js.map +1 -0
- package/dist/react/core/Toast.d.ts +56 -0
- package/dist/react/core/Toast.js +229 -0
- package/dist/react/core/Toast.js.map +1 -0
- package/dist/react/core/Toggle.d.ts +22 -0
- package/dist/react/core/Toggle.js +151 -0
- package/dist/react/core/Toggle.js.map +1 -0
- package/dist/react/core/Tooltip.d.ts +19 -0
- package/dist/react/core/Tooltip.js +179 -0
- package/dist/react/core/Tooltip.js.map +1 -0
- package/dist/react/core/Typography.d.ts +127 -0
- package/dist/react/core/Typography.js +187 -0
- package/dist/react/core/Typography.js.map +1 -0
- package/dist/react/core/index.d.ts +108 -0
- package/dist/react/core/layout/Box.d.ts +77 -0
- package/dist/react/core/layout/Box.js +126 -0
- package/dist/react/core/layout/Box.js.map +1 -0
- package/dist/react/core/layout/Center.d.ts +20 -0
- package/dist/react/core/layout/Center.js +34 -0
- package/dist/react/core/layout/Center.js.map +1 -0
- package/dist/react/core/layout/Divider.d.ts +16 -0
- package/dist/react/core/layout/Divider.js +108 -0
- package/dist/react/core/layout/Divider.js.map +1 -0
- package/dist/react/core/layout/Flex.d.ts +30 -0
- package/dist/react/core/layout/Flex.js +128 -0
- package/dist/react/core/layout/Flex.js.map +1 -0
- package/dist/react/core/layout/Grid.d.ts +36 -0
- package/dist/react/core/layout/Grid.js +142 -0
- package/dist/react/core/layout/Grid.js.map +1 -0
- package/dist/react/core/layout/Spacer.d.ts +8 -0
- package/dist/react/core/layout/Spacer.js +31 -0
- package/dist/react/core/layout/Spacer.js.map +1 -0
- package/dist/react/core/layout/Stack.d.ts +54 -0
- package/dist/react/core/layout/Stack.js +74 -0
- package/dist/react/core/layout/Stack.js.map +1 -0
- package/dist/react/core/layout/index.d.ts +38 -0
- package/dist/react/core/layout/responsive.d.ts +23 -0
- package/dist/react/core/layout/responsive.js +26 -0
- package/dist/react/core/layout/responsive.js.map +1 -0
- package/dist/react/core/layout/useBreakpoint.d.ts +77 -0
- package/dist/react/core/layout/useBreakpoint.js +73 -0
- package/dist/react/core/layout/useBreakpoint.js.map +1 -0
- package/dist/react/core/propertyConfig.d.ts +443 -0
- package/dist/react/core/propertyConfig.js +399 -0
- package/dist/react/core/propertyConfig.js.map +1 -0
- package/dist/react/hooks/index.d.ts +21 -0
- package/dist/react/hooks/useAccessWindows.d.ts +66 -0
- package/dist/react/hooks/useCompactMode.d.ts +82 -0
- package/dist/react/hooks/useCompactMode.js +62 -0
- package/dist/react/hooks/useCompactMode.js.map +1 -0
- package/dist/react/hooks/useLiveSelection.d.ts +57 -0
- package/dist/react/hooks/useSimulationPlayback.d.ts +97 -0
- package/dist/react/hooks/useSimulationTime.d.ts +61 -0
- package/dist/react/hooks/useSpacecraftPosition.d.ts +50 -0
- package/dist/react/hooks/useSpacecraftPosition.js +89 -0
- package/dist/react/hooks/useSpacecraftPosition.js.map +1 -0
- package/dist/react/hooks/useTelemetry.d.ts +55 -0
- package/dist/react/hooks/useTelemetry.js +73 -0
- package/dist/react/hooks/useTelemetry.js.map +1 -0
- package/dist/react/hooks/useZendirSession.d.ts +109 -0
- package/dist/react/hooks/useZendirSession.js +148 -0
- package/dist/react/hooks/useZendirSession.js.map +1 -0
- package/dist/react/index.d.ts +74 -0
- package/dist/react/shared/ErrorBoundary.d.ts +63 -0
- package/dist/react/shared/ErrorBoundary.js +142 -0
- package/dist/react/shared/ErrorBoundary.js.map +1 -0
- package/dist/react/shared/Skeleton.d.ts +110 -0
- package/dist/react/shared/Skeleton.js +324 -0
- package/dist/react/shared/Skeleton.js.map +1 -0
- package/dist/react/shared/index.d.ts +12 -0
- package/dist/react/theme/ThemeProvider.d.ts +385 -0
- package/dist/react/theme/ThemeProvider.js +1096 -0
- package/dist/react/theme/ThemeProvider.js.map +1 -0
- package/dist/react/theme/astro-tokens.d.ts +153 -0
- package/dist/react/theme/cardAccent.d.ts +75 -0
- package/dist/react/theme/cardAccent.js +137 -0
- package/dist/react/theme/cardAccent.js.map +1 -0
- package/dist/react/theme/config.d.ts +39 -0
- package/dist/react/theme/index.d.ts +9 -0
- package/dist/react/types.d.ts +360 -0
- package/dist/react/types.js +58 -0
- package/dist/react/types.js.map +1 -0
- package/dist/react/utils/index.d.ts +247 -0
- package/dist/react/utils/index.js +423 -0
- package/dist/react/utils/index.js.map +1 -0
- package/dist/react/visualizations/EclipseTimerCard.d.ts +17 -0
- package/dist/react/visualizations/EclipseTimerCard.js +250 -0
- package/dist/react/visualizations/EclipseTimerCard.js.map +1 -0
- package/dist/react/visualizations/LinkBudgetCard.d.ts +50 -0
- package/dist/react/visualizations/LinkBudgetCard.js +444 -0
- package/dist/react/visualizations/LinkBudgetCard.js.map +1 -0
- package/dist/react/visualizations/NavBallCard.d.ts +17 -0
- package/dist/react/visualizations/NavBallCard.js +243 -0
- package/dist/react/visualizations/NavBallCard.js.map +1 -0
- package/dist/react/visualizations/PropulsionCard.d.ts +37 -0
- package/dist/react/visualizations/PropulsionCard.js +298 -0
- package/dist/react/visualizations/PropulsionCard.js.map +1 -0
- package/dist/react/visualizations/SensorFootprintCard.d.ts +33 -0
- package/dist/react/visualizations/SensorFootprintCard.js +326 -0
- package/dist/react/visualizations/SensorFootprintCard.js.map +1 -0
- package/dist/react/visualizations/ThermalHeatmapCard.d.ts +38 -0
- package/dist/react/visualizations/ThermalHeatmapCard.js +372 -0
- package/dist/react/visualizations/ThermalHeatmapCard.js.map +1 -0
- package/dist/react/visualizations/index.d.ts +17 -0
- package/dist/react.d.ts +1 -0
- package/dist/react.js +421 -0
- package/dist/react.js.map +1 -0
- package/dist/shaders/atmosphere.frag.js +5 -0
- package/dist/shaders/atmosphere.frag.js.map +1 -0
- package/dist/shaders/atmosphere.vert.js +5 -0
- package/dist/shaders/atmosphere.vert.js.map +1 -0
- package/dist/shaders/stars.frag.js +5 -0
- package/dist/shaders/stars.frag.js.map +1 -0
- package/dist/shaders/stars.vert.js +5 -0
- package/dist/shaders/stars.vert.js.map +1 -0
- package/dist/style.css +143 -0
- package/dist/tokens/index.d.ts +296 -0
- package/dist/tokens/index.js +263 -0
- package/dist/tokens/index.js.map +1 -0
- package/dist/tokens/tokens.css +155 -0
- package/dist/types/index.d.ts +23 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +220 -0
- package/sdk-stub.js +22 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain.js","sources":["../../../../src/react/charts/unified/domain.tsx"],"sourcesContent":["/**\n * @zendir/ui - Domain-Specific Chart Components\n * \n * Pre-configured charts for common space operations use cases.\n * These wrap AstroChart with domain-specific defaults and data transformations.\n */\n\nimport React, { forwardRef, memo, useMemo, useState, useEffect } from 'react';\nimport { AstroChart, AstroChartHandle } from './AstroChart';\nimport { useTheme } from '../../theme';\nimport type { \n SeriesData, \n PowerChartData, \n AttitudeChartData,\n ThermalChartData,\n LinkBudgetChartData,\n ContactWindowData,\n SpectrumDataPoint,\n ManeuverBudgetData,\n EclipseTimelineData,\n AnnotationOptions,\n ExportOptions,\n InfoTooltipOptions,\n CoverageGridData,\n} from './types';\n\n// echarts-gl: loaded once, state tracked so 3D components don't render before GL registers.\nlet _echartsGlReady = false;\nlet _echartsGlPromise: Promise<boolean> | null = null;\n\nfunction _loadEchartsGl(): Promise<boolean> {\n if (!_echartsGlPromise) {\n _echartsGlPromise = import('echarts-gl' as string) // cast suppresses \"no types\" warning\n .then(() => { _echartsGlReady = true; return true; })\n .catch((err) => {\n console.warn('[zendir-ui] echarts-gl failed to load — 3D charts will not render:', err);\n return false;\n });\n }\n return _echartsGlPromise;\n}\n\n// Start loading immediately when the module is imported (same as before, but tracked).\n_loadEchartsGl();\n\n/** Returns true once echarts-gl has registered its series types with ECharts. */\nfunction useEchartsGlReady(): boolean {\n const [ready, setReady] = useState(_echartsGlReady);\n useEffect(() => {\n if (!_echartsGlReady) {\n _loadEchartsGl().then((ok) => { if (ok) setReady(true); });\n }\n }, []);\n return ready;\n}\n\n// Common props shared by all domain charts\ninterface CommonChartProps {\n /** Export options */\n export?: ExportOptions;\n /** Info tooltip */\n infoTooltip?: InfoTooltipOptions;\n \n // === Header Status Icon System (inherited from AstroChartProps) ===\n \n /** \n * Icon name to display in chart header (uses AstroIcon)\n * Shows before the chart title\n */\n icon?: string;\n /** \n * Status for the header icon (shows as colored dot)\n * Uses AstroUXDS status colors\n */\n iconStatus?: 'off' | 'standby' | 'normal' | 'caution' | 'serious' | 'critical';\n /** \n * Status message shown on hover over the status icon\n */\n statusMessage?: string;\n}\nimport { STATUS_COLORS, ASTRO_DATA_VIZ_COLORS, ZENDIR_BRAND_COLORS } from './theme';\n\n// Medium-soft status colors (readable, not too pale)\nconst SOFT_STATUS_COLORS = {\n normal: '#6ed86e',\n caution: '#ffd54f',\n serious: '#ffa726',\n critical: '#e57373',\n off: '#90a4ae',\n standby: '#4fc3f7',\n};\n\n// =============================================================================\n// Theme-Aware Tooltip & Legend Styles (for 3D charts)\n// =============================================================================\n\n/**\n * Get theme-aware tooltip style for 3D charts\n * 3D charts don't use the standard AstroChart theming\n */\nfunction useChartTooltipStyle() {\n const { tokens, mode } = useTheme();\n const isDark = mode === 'dark';\n \n return {\n backgroundColor: isDark ? 'rgba(15, 23, 42, 0.95)' : 'rgba(255, 255, 255, 0.95)',\n borderColor: isDark ? 'rgba(100, 116, 139, 0.4)' : 'rgba(100, 116, 139, 0.3)',\n textStyle: {\n color: tokens.colors.text.primary,\n fontSize: 12,\n },\n };\n}\n\n/**\n * Get theme-aware legend style for 3D charts\n */\nfunction useChartLegendStyle() {\n const { tokens } = useTheme();\n return {\n textStyle: {\n color: tokens.colors.text.secondary,\n },\n };\n}\n\n/**\n * Get theme-aware visual map style for 3D charts\n * Includes hoverLink for highlighting hovered regions (Google/Apple level UX)\n */\nfunction useChartVisualMapStyle() {\n const { tokens } = useTheme();\n return {\n textStyle: {\n color: tokens.colors.text.tertiary,\n },\n // Allow drag selection on the visualMap bar\n calculable: true,\n // Enable hover linking - when hovering on visualMap, highlight only that range\n hoverLink: true,\n // Non-hovered regions get faded opacity (not invisible, just light)\n outOfRange: {\n color: 'rgba(128, 128, 128, 0.12)', // Very light gray with low opacity\n opacity: 0.15, // Also reduce opacity for 3D elements\n },\n // Handle styles for the interactive bar (the draggable endpoints)\n handleStyle: {\n borderColor: tokens.colors.accent.primary,\n color: tokens.colors.accent.primary,\n },\n // Indicator style when hovering\n indicatorStyle: {\n borderColor: '#fff',\n },\n // Smooth transition when highlighting\n realtime: true,\n };\n}\n\n// =============================================================================\n// Power Chart\n// =============================================================================\n\nexport interface PowerChartProps extends CommonChartProps {\n /** Power data points (time in ms) */\n data: PowerChartData[];\n /** Chart title */\n title?: string;\n /** Show legend */\n showLegend?: boolean;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Show eclipse shading */\n showEclipse?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Enable zoom */\n enableZoom?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const PowerChart = memo(forwardRef<AstroChartHandle, PowerChartProps>(\n function PowerChart({\n data = [],\n title = 'Power system',\n showLegend = true,\n width = '100%',\n height = 250,\n showEclipse = true,\n loading = false,\n enableZoom = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n // Icon/status props\n icon,\n iconStatus,\n statusMessage,\n }, ref) {\n // Transform data to series\n const { series, annotations } = useMemo(() => {\n const solarSeries: SeriesData = {\n id: 'solar',\n name: 'Solar',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.solarPower })),\n color: SOFT_STATUS_COLORS.standby, // Cyan for solar\n yAxisIndex: 0,\n smooth: true,\n symbol: { type: 'none' },\n };\n\n const batterySeries: SeriesData = {\n id: 'battery',\n name: 'Battery',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.batteryPercent })),\n color: SOFT_STATUS_COLORS.normal, // Green for battery\n yAxisIndex: 1,\n smooth: true,\n symbol: { type: 'none' },\n };\n\n const netPowerSeries: SeriesData = {\n id: 'netPower',\n name: 'Net',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.netPower })),\n color: ZENDIR_BRAND_COLORS.electric, // Zendir Electric\n yAxisIndex: 0,\n smooth: true,\n symbol: { type: 'none' },\n };\n\n const consumptionSeries: SeriesData = {\n id: 'consumption',\n name: 'Load',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.consumption })),\n color: SOFT_STATUS_COLORS.critical, // Red for consumption\n yAxisIndex: 0,\n lineStyle: { type: 'dashed', width: 1.5 },\n smooth: true,\n symbol: { type: 'none' },\n };\n\n // Eclipse shading as mark areas\n const eclipseAreas: AnnotationOptions['markAreas'] = { data: [] };\n if (showEclipse) {\n let inEclipse = false;\n let eclipseStart = 0;\n\n data.forEach((d, _i) => {\n if (d.eclipse && !inEclipse) {\n inEclipse = true;\n eclipseStart = d.time;\n } else if (!d.eclipse && inEclipse) {\n inEclipse = false;\n eclipseAreas.data.push([\n { xAxis: eclipseStart, name: 'Eclipse' },\n { xAxis: d.time },\n ]);\n }\n });\n\n // Handle ongoing eclipse\n if (inEclipse && data.length > 0) {\n eclipseAreas.data.push([\n { xAxis: eclipseStart, name: 'Eclipse' },\n { xAxis: data[data.length - 1].time },\n ]);\n }\n\n eclipseAreas.itemStyle = {\n color: `${STATUS_COLORS.critical}15`,\n };\n }\n\n return {\n series: [solarSeries, batterySeries, netPowerSeries, consumptionSeries],\n annotations: showEclipse && eclipseAreas.data.length > 0 \n ? { markAreas: eclipseAreas } \n : undefined,\n };\n }, [data, showEclipse]);\n\n const tooltipConfig = useMemo(() => ({\n trigger: 'axis' as const,\n crosshair: 'x' as const,\n formatter: (params: unknown) => {\n const p = Array.isArray(params) ? params : [];\n if (p.length === 0) return '';\n const axisVal = (p[0] as { value?: unknown; axisValue?: unknown }).axisValue ?? (p[0] as { value?: unknown }).value;\n const time = typeof axisVal === 'number' ? axisVal : (axisVal instanceof Date ? axisVal.getTime() : Number(axisVal));\n const inEclipse = annotations?.markAreas?.data\n ? annotations.markAreas.data.some(\n (pair) => {\n const start = (pair[0].xAxis as number) ?? 0;\n const end = (pair[1].xAxis as number) ?? 0;\n return time >= start && time <= end;\n }\n )\n : false;\n const lines = p.map((item: { marker?: string; seriesName?: string; value?: unknown }) =>\n `${item.marker ?? ''} ${item.seriesName ?? ''}: ${item.value ?? ''}`\n );\n if (inEclipse) lines.push('◐ Eclipse — spacecraft in shadow; solar panels off');\n return lines.join('<br/>');\n },\n }), [annotations]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"line\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n icon={icon}\n iconStatus={iconStatus}\n statusMessage={statusMessage}\n xAxis={{ type: 'time', name: '' }}\n yAxis={[\n { \n name: 'Power [W]', \n position: 'left',\n min: 0,\n },\n { \n name: 'Battery [%]', \n position: 'right',\n min: 0,\n max: 100,\n },\n ]}\n tooltip={tooltipConfig}\n legend={{ show: showLegend, position: 'bottom' }}\n zoom={enableZoom ? { enabled: true, type: 'inside', axis: 'x' } : undefined}\n annotations={annotations}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Attitude Chart\n// =============================================================================\n\nexport interface AttitudeChartProps extends CommonChartProps {\n /** Attitude data points (time in ms) */\n data: AttitudeChartData[];\n /** Chart title */\n title?: string;\n /** Show legend */\n showLegend?: boolean;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Loading state */\n loading?: boolean;\n /** Enable zoom */\n enableZoom?: boolean;\n /** Show pointing error */\n showError?: boolean;\n /** Show angular velocity */\n showAngularVelocity?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const AttitudeChart = memo(forwardRef<AstroChartHandle, AttitudeChartProps>(\n function AttitudeChart({\n data = [],\n title = 'Attitude control',\n showLegend = true,\n width = '100%',\n height = 200,\n loading = false,\n enableZoom = false,\n showError = true,\n showAngularVelocity = true,\n className = '',\n export: exportOptions,\n infoTooltip,\n // Icon/status props\n icon,\n iconStatus,\n statusMessage,\n }, ref) {\n // Transform data to series\n const series = useMemo(() => {\n const result: SeriesData[] = [\n {\n id: 'roll',\n name: 'Roll',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.roll })),\n color: SOFT_STATUS_COLORS.critical, // Red\n smooth: true,\n symbol: { type: 'none' },\n },\n {\n id: 'pitch',\n name: 'Pitch',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.pitch })),\n color: SOFT_STATUS_COLORS.normal, // Green\n smooth: true,\n symbol: { type: 'none' },\n },\n {\n id: 'yaw',\n name: 'Yaw',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.yaw })),\n color: ZENDIR_BRAND_COLORS.electric, // Zendir Electric\n smooth: true,\n symbol: { type: 'none' },\n },\n ];\n\n if (showError && data.some(d => d.pointingError !== undefined)) {\n result.push({\n id: 'error',\n name: 'Error',\n type: 'line',\n data: data\n .filter(d => d.pointingError !== undefined)\n .map(d => ({ x: d.time, y: d.pointingError! })),\n color: SOFT_STATUS_COLORS.caution, // Yellow (status color)\n smooth: true,\n symbol: { type: 'none' },\n lineStyle: { width: 1.5 },\n });\n }\n\n if (showAngularVelocity && data.some(d => d.angularVelocity !== undefined)) {\n result.push({\n id: 'angVel',\n name: 'ω',\n type: 'line',\n data: data\n .filter(d => d.angularVelocity !== undefined)\n .map(d => ({ x: d.time, y: d.angularVelocity! })),\n color: ZENDIR_BRAND_COLORS.purple, // Zendir Purple\n smooth: true,\n symbol: { type: 'none' },\n lineStyle: { type: 'dashed', width: 1 },\n });\n }\n\n return result;\n }, [data, showError, showAngularVelocity]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"line\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n icon={icon}\n iconStatus={iconStatus}\n statusMessage={statusMessage}\n xAxis={{ type: 'time', name: '' }}\n yAxis={{ \n name: 'Attitude [deg]',\n // Center zero line\n }}\n tooltip={{ trigger: 'axis', crosshair: 'x' }}\n legend={{ show: showLegend, position: 'bottom' }}\n zoom={enableZoom ? { enabled: true, type: 'inside', axis: 'x' } : undefined}\n annotations={{\n markLines: {\n data: [{ yAxis: 0, label: '', lineStyle: { type: 'solid', width: 1 } }],\n },\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Thermal Heatmap Chart\n// =============================================================================\n\nexport interface ThermalHeatmapChartProps extends CommonChartProps {\n /** Thermal data */\n data: ThermalChartData[];\n /** Zone names */\n zones: string[];\n /** Chart title */\n title?: string;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Temperature range */\n range?: [number, number];\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const ThermalHeatmapChart = memo(forwardRef<AstroChartHandle, ThermalHeatmapChartProps>(\n function ThermalHeatmapChart({\n data = [],\n zones = [],\n title = 'Thermal zones',\n width = '100%',\n height = 300,\n range = [-40, 80],\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n // Transform to heatmap format\n const { series, timeLabels } = useMemo(() => {\n const timeLabels = data.map(d => \n new Date(d.time).toLocaleTimeString([], { \n hour: '2-digit', \n minute: '2-digit',\n hour12: false,\n })\n );\n\n // Build heatmap data: [x, y, value]\n const heatmapData: [number, number, number][] = [];\n data.forEach((d, timeIdx) => {\n zones.forEach((zone, zoneIdx) => {\n const temp = d.zones[zone] ?? 0;\n heatmapData.push([timeIdx, zoneIdx, temp]);\n });\n });\n\n return {\n series: [{\n id: 'thermal',\n name: 'Temperature',\n type: 'heatmap' as const,\n data: heatmapData,\n }],\n timeLabels,\n };\n }, [data, zones]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"heatmap\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n xAxis={{ type: 'category' }}\n yAxis={{ type: 'category' }}\n tooltip={{ trigger: 'item' }}\n echartsOptions={{\n xAxis: { data: timeLabels },\n yAxis: { data: zones },\n visualMap: {\n min: range[0],\n max: range[1],\n calculable: true,\n orient: 'vertical',\n right: 10,\n top: 'center',\n // Enable hover linking - highlight only hovered range\n hoverLink: true,\n // Non-hovered regions get faded opacity\n outOfRange: {\n color: 'rgba(128, 128, 128, 0.12)',\n opacity: 0.15,\n },\n // Thermal gradient (cold → hot) - Original high-contrast palette\n // Multi-hue gradient for clear temperature differentiation\n inRange: {\n color: [\n '#313695', // Deep blue (very cold)\n '#4575b4', // Blue\n '#74add1', // Light blue\n '#abd9e9', // Pale blue\n '#e0f3f8', // Very pale blue\n '#ffffbf', // Pale yellow (neutral)\n '#fee090', // Light orange\n '#fdae61', // Orange\n '#f46d43', // Red-orange\n '#d73027', // Red\n '#a50026', // Dark red (very hot)\n ],\n },\n },\n series: [{\n type: 'heatmap',\n data: series[0].data,\n label: { show: true, formatter: (p: { value?: unknown }) => Array.isArray(p.value) && typeof p.value[2] === 'number' ? `${p.value[2]}°` : '' },\n emphasis: {\n itemStyle: {\n shadowBlur: 10,\n shadowColor: 'rgba(0, 0, 0, 0.5)',\n },\n },\n }],\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Link Budget Chart\n// =============================================================================\n\nexport interface LinkBudgetChartProps extends CommonChartProps {\n /** Link budget data */\n data: LinkBudgetChartData[];\n /** Chart title */\n title?: string;\n /** Show legend */\n showLegend?: boolean;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Margin threshold (dB) */\n marginThreshold?: number;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const LinkBudgetChart = memo(forwardRef<AstroChartHandle, LinkBudgetChartProps>(\n function LinkBudgetChart({\n data = [],\n title = 'Link budget',\n showLegend = true,\n width = '100%',\n height = 200,\n marginThreshold = 3,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const series = useMemo((): SeriesData[] => [\n {\n id: 'signal',\n name: 'Signal',\n type: 'area',\n data: data.map(d => ({ x: d.time, y: d.signalStrength })),\n color: SOFT_STATUS_COLORS.normal,\n smooth: true,\n symbol: { type: 'none' },\n areaStyle: { opacity: 0.2 },\n },\n {\n id: 'noise',\n name: 'Noise floor',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.noiseFloor })),\n color: SOFT_STATUS_COLORS.critical,\n smooth: true,\n symbol: { type: 'none' },\n lineStyle: { type: 'dashed', width: 1 },\n },\n {\n id: 'margin',\n name: 'Margin',\n type: 'line',\n data: data.map(d => ({ x: d.time, y: d.margin })),\n color: SOFT_STATUS_COLORS.standby,\n yAxisIndex: 1,\n smooth: true,\n symbol: { type: 'none' },\n },\n ], [data]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"line\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n xAxis={{ type: 'time' }}\n yAxis={[\n { name: 'dBm', position: 'left' },\n { name: 'Margin [dB]', position: 'right', min: 0 },\n ]}\n tooltip={{ trigger: 'axis', crosshair: 'x' }}\n legend={{ show: showLegend, position: 'bottom' }}\n annotations={{\n markLines: {\n data: [\n { \n yAxis: marginThreshold, \n label: `Min margin (${marginThreshold} dB)`,\n color: SOFT_STATUS_COLORS.caution,\n lineStyle: { type: 'dashed' },\n },\n ],\n },\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Subsystem Status Gauge\n// =============================================================================\n\nexport interface SubsystemGaugeProps extends CommonChartProps {\n /** Current value (0-100) */\n value: number;\n /** Subsystem name */\n name: string;\n /** Unit label */\n unit?: string;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Status thresholds */\n thresholds?: {\n caution?: number;\n critical?: number;\n };\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const SubsystemGauge = memo(forwardRef<AstroChartHandle, SubsystemGaugeProps>(\n function SubsystemGauge({\n value,\n name,\n unit = '%',\n width = 200,\n height = 200,\n thresholds = { caution: 70, critical: 90 },\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const clampedValue = Math.max(0, Math.min(100, value));\n const widthPx = typeof width === 'number' ? width : height;\n const gaugeSize = Math.max(110, Math.min(widthPx, height));\n const arcWidth = Math.max(8, Math.round(gaugeSize * 0.085));\n const valueFontSize = Math.max(18, Math.round(gaugeSize * 0.17));\n const titleFontSize = Math.max(10, Math.round(gaugeSize * 0.085));\n const compactGauge = gaugeSize < 150;\n const centerY = compactGauge ? '53%' : '55%';\n const detailY = compactGauge ? '10%' : '15%';\n const titleY = compactGauge ? '78%' : '84%';\n const unitSuffix = unit?.trim() ?? '';\n const longUnit = unitSuffix.length > 4;\n\n // Modern color based on value thresholds\n const getValueColor = () => {\n if (thresholds.critical && clampedValue >= thresholds.critical) return SOFT_STATUS_COLORS.critical;\n if (thresholds.caution && clampedValue >= thresholds.caution) return SOFT_STATUS_COLORS.caution;\n return SOFT_STATUS_COLORS.normal;\n };\n\n return (\n <AstroChart\n ref={ref}\n type=\"gauge\"\n series={[]} // Empty - we provide full gauge config via echartsOptions\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={{\n series: [{\n type: 'gauge',\n min: 0,\n max: 100,\n startAngle: 200,\n endAngle: -20,\n radius: '90%',\n center: ['50%', centerY],\n // Modern minimal track\n axisLine: {\n lineStyle: {\n width: arcWidth,\n color: [[1, 'rgba(100, 116, 139, 0.15)']], // Subtle track\n },\n },\n // Hide all traditional gauge elements\n axisTick: { show: false },\n splitLine: { show: false },\n axisLabel: { show: false },\n pointer: { show: false }, // No pointer for modern look\n // Progress arc with gradient\n progress: {\n show: true,\n width: arcWidth,\n roundCap: true,\n itemStyle: {\n color: {\n type: 'linear',\n x: 0, y: 0, x2: 1, y2: 0,\n colorStops: [\n { offset: 0, color: 'rgba(100, 200, 200, 0.6)' },\n { offset: 1, color: getValueColor() },\n ],\n },\n shadowColor: getValueColor(),\n shadowBlur: 8,\n },\n },\n // Clean title below\n title: {\n show: true,\n offsetCenter: [0, titleY],\n fontSize: titleFontSize,\n fontWeight: 500,\n color: 'rgba(255, 255, 255, 0.7)',\n },\n // Modern centered value\n detail: {\n valueAnimation: true,\n formatter: (currentValue: number) => {\n const rounded = Math.round(currentValue);\n if (!unitSuffix) return `${rounded}`;\n if (longUnit) return `${rounded}\\n{unit|${unitSuffix}}`;\n return `${rounded}${unitSuffix}`;\n },\n fontSize: valueFontSize,\n fontWeight: 700, // AstroUXDS bold for gauge values\n lineHeight: Math.round(valueFontSize * 1.05),\n offsetCenter: [0, detailY],\n color: getValueColor(),\n rich: {\n unit: {\n color: 'rgba(255, 255, 255, 0.75)',\n fontSize: Math.max(10, Math.round(valueFontSize * 0.5)),\n fontWeight: 500,\n lineHeight: Math.round(valueFontSize * 0.8),\n },\n },\n },\n data: [{ value: clampedValue, name }],\n }],\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Orbit Visualization (Polar)\n// =============================================================================\n\nexport interface OrbitChartProps extends CommonChartProps {\n /** Orbit position data (angle in degrees, altitude in km) */\n data: { angle: number; altitude: number; label?: string }[];\n /** Chart title */\n title?: string;\n /** Reference altitude (nominal orbit) */\n referenceAltitude?: number;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const OrbitChart = memo(forwardRef<AstroChartHandle, OrbitChartProps>(\n function OrbitChart({\n data = [],\n title = 'Polar Projection',\n referenceAltitude,\n width = 300,\n height = 300,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n return (\n <AstroChart\n ref={ref}\n type=\"scatter\"\n title={title}\n series={[]} // Empty - we provide polar series via echartsOptions\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={{\n polar: {\n radius: ['0%', '75%'],\n center: ['50%', '50%'],\n },\n angleAxis: {\n type: 'value',\n min: 0,\n max: 360,\n startAngle: 90,\n interval: 30,\n axisLine: { show: false },\n axisTick: { show: false },\n splitLine: {\n show: true,\n lineStyle: {\n color: 'rgba(100, 116, 139, 0.15)',\n type: 'dashed',\n },\n },\n axisLabel: {\n fontSize: 9,\n color: 'rgba(255, 255, 255, 0.4)',\n formatter: (value: number) => value === 0 ? '' : `${value}°`,\n },\n },\n radiusAxis: {\n min: referenceAltitude ? referenceAltitude * 0.9 : 'dataMin',\n max: referenceAltitude ? referenceAltitude * 1.1 : 'dataMax',\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: { show: false },\n splitLine: {\n show: true,\n lineStyle: {\n color: 'rgba(100, 116, 139, 0.2)',\n type: 'dashed',\n },\n },\n },\n series: [{\n type: 'scatter',\n name: 'Position',\n coordinateSystem: 'polar',\n data: data.map(d => [d.altitude, d.angle]),\n symbolSize: 8,\n itemStyle: {\n color: ZENDIR_BRAND_COLORS.electric, // Zendir Electric\n shadowColor: ZENDIR_BRAND_COLORS.electric,\n shadowBlur: 6,\n },\n }],\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Contact Window / Pass Chart (Gantt-style) – AstroUXD compliant\n// =============================================================================\n\nexport interface ContactWindowChartProps extends CommonChartProps {\n /** Contact window data by ground station */\n data: ContactWindowData[];\n /** Chart title */\n title?: string;\n /** Time range [start, end] in ms */\n timeRange?: [number, number];\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Loading state */\n loading?: boolean;\n /** Enable zoom */\n enableZoom?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const ContactWindowChart = memo(forwardRef<AstroChartHandle, ContactWindowChartProps>(\n function ContactWindowChart({\n data = [],\n title = 'Contact windows',\n timeRange,\n width = '100%',\n height = 200,\n loading = false,\n enableZoom = true,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n // Transform to Gantt-style data\n const { categories, ganttData } = useMemo(() => {\n const cats = data.map(d => d.name);\n const items: Array<{ name: string; value: [number, number, number, string?] }> = [];\n \n data.forEach((station, stationIdx) => {\n station.windows.forEach(w => {\n const _color = w.signalQuality === 'poor' ? STATUS_COLORS.critical \n : w.signalQuality === 'marginal' ? STATUS_COLORS.caution \n : STATUS_COLORS.normal;\n items.push({\n name: station.name,\n value: [stationIdx, w.start, w.end, w.label],\n });\n });\n });\n \n return { categories: cats, ganttData: items };\n }, [data]);\n\n const series: SeriesData[] = [{\n id: 'contacts',\n name: 'Contacts',\n type: 'bar',\n data: [],\n }];\n\n return (\n <AstroChart\n ref={ref}\n type=\"bar\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n zoom={enableZoom ? { enabled: true, type: 'inside', axis: 'x' } : undefined}\n echartsOptions={{\n tooltip: {\n trigger: 'item',\n formatter: ((params: unknown) => {\n const p = params as { value: [number, number, number, string?] };\n const [, start, end, label] = p.value;\n const duration = ((end - start) / 60000).toFixed(1);\n return `${label || 'Contact'}<br/>Duration: ${duration} min`;\n }) as unknown as string,\n },\n grid: { left: 100, right: 20, top: 40, bottom: 40 },\n xAxis: {\n type: 'time',\n min: timeRange?.[0],\n max: timeRange?.[1],\n },\n yAxis: {\n type: 'category',\n data: categories,\n },\n series: [{\n type: 'custom',\n renderItem: ((_params: unknown, api: unknown) => {\n const a = api as { value: (idx: number) => number; coord: (val: [number, number]) => number[]; size: (val: [number, number]) => number[] };\n const catIdx = a.value(0);\n const start = a.coord([a.value(1), catIdx]);\n const end = a.coord([a.value(2), catIdx]);\n const height = a.size([0, 1])[1] * 0.6;\n return {\n type: 'rect',\n shape: {\n x: start[0],\n y: start[1] - height / 2,\n width: end[0] - start[0],\n height,\n },\n style: {\n fill: STATUS_COLORS.normal,\n stroke: STATUS_COLORS.standby,\n },\n };\n }) as unknown as undefined,\n encode: { x: [1, 2], y: 0 },\n data: ganttData,\n }],\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Spectrum / Waterfall Chart – Space TT&C domain\n// =============================================================================\n\nexport interface SpectrumChartProps extends CommonChartProps {\n /** Spectrum data points */\n data: SpectrumDataPoint[];\n /** Chart title */\n title?: string;\n /** Frequency range [min, max] */\n frequencyRange?: [number, number];\n /** Power range [min, max] dBm */\n powerRange?: [number, number];\n /** Noise floor level */\n noiseFloor?: number;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const SpectrumChart = memo(forwardRef<AstroChartHandle, SpectrumChartProps>(\n function SpectrumChart({\n data = [],\n title = 'RF spectrum',\n frequencyRange,\n powerRange,\n noiseFloor,\n width = '100%',\n height = 200,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const series = useMemo((): SeriesData[] => [{\n id: 'spectrum',\n name: 'Power',\n type: 'area',\n data: data.map(d => ({ x: d.frequency, y: d.power })),\n color: ZENDIR_BRAND_COLORS.electric, // Zendir Electric\n smooth: false,\n areaStyle: { opacity: 0.3 },\n symbol: { type: 'none' },\n }], [data]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"area\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n xAxis={{ \n type: 'value', \n name: 'Frequency',\n min: frequencyRange?.[0],\n max: frequencyRange?.[1],\n }}\n yAxis={{ \n type: 'value', \n name: 'dBm',\n min: powerRange?.[0],\n max: powerRange?.[1],\n }}\n tooltip={{ trigger: 'axis', crosshair: 'x' }}\n annotations={noiseFloor !== undefined ? {\n markLines: {\n data: [{\n yAxis: noiseFloor,\n label: `Noise floor (${noiseFloor} dBm)`,\n color: SOFT_STATUS_COLORS.caution,\n lineStyle: { type: 'dashed' },\n }],\n },\n } : undefined}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Maneuver / Delta-V Budget Chart – Propulsion domain\n// =============================================================================\n\nexport interface ManeuverBudgetChartProps extends CommonChartProps {\n /** Maneuver budget data */\n data: ManeuverBudgetData[];\n /** Chart title */\n title?: string;\n /** Total delta-V budget (for percentage) */\n totalBudget?: number;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const ManeuverBudgetChart = memo(forwardRef<AstroChartHandle, ManeuverBudgetChartProps>(\n function ManeuverBudgetChart({\n data = [],\n title = 'Delta-V budget',\n totalBudget,\n width = '100%',\n height = 200,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const series = useMemo((): SeriesData[] => {\n // Status colors for executed/planned, Zendir colors for remaining/margin\n const typeColors: Record<string, string> = {\n executed: STATUS_COLORS.normal, // Green (completed)\n planned: STATUS_COLORS.standby, // Cyan (scheduled)\n remaining: ZENDIR_BRAND_COLORS.electric, // Zendir Electric\n margin: ZENDIR_BRAND_COLORS.purple, // Zendir Purple\n };\n \n return [{\n id: 'deltaV',\n name: 'Delta-V',\n type: 'bar',\n data: data.map(d => ({ \n x: d.name, \n y: d.deltaV,\n meta: { type: d.type, color: typeColors[d.type] || STATUS_COLORS.standby },\n })),\n }];\n }, [data]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"bar\"\n title={title}\n subtitle={totalBudget ? `Total: ${totalBudget} m/s` : undefined}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n xAxis={{ type: 'category' }}\n yAxis={{ type: 'value', name: 'm/s' }}\n tooltip={{ trigger: 'axis' }}\n echartsOptions={{\n series: [{\n type: 'bar',\n data: data.map(d => ({\n value: d.deltaV,\n name: d.name,\n itemStyle: {\n color: d.type === 'executed' ? STATUS_COLORS.normal\n : d.type === 'planned' ? STATUS_COLORS.standby\n : d.type === 'remaining' ? ZENDIR_BRAND_COLORS.electric\n : ZENDIR_BRAND_COLORS.purple,\n },\n })),\n }],\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Eclipse Timeline Chart – Orbital mechanics domain\n// =============================================================================\n\nexport interface EclipseTimelineChartProps extends CommonChartProps {\n /** Eclipse timeline data */\n data: EclipseTimelineData[];\n /** Chart title */\n title?: string;\n /** Time range [start, end] in ms */\n timeRange?: [number, number];\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Loading state */\n loading?: boolean;\n /** Enable zoom */\n enableZoom?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const EclipseTimelineChart = memo(forwardRef<AstroChartHandle, EclipseTimelineChartProps>(\n function EclipseTimelineChart({\n data = [],\n title = 'Eclipse timeline',\n timeRange,\n width = '100%',\n height = 100,\n loading = false,\n enableZoom = true,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const series: SeriesData[] = [{\n id: 'eclipse',\n name: 'Eclipse',\n type: 'bar',\n data: [],\n }];\n\n // Eclipse type colors using Zendir-branded palette\n // Umbra/Penumbra use brand dark tones, sunlight uses status yellow\n const typeColors: Record<string, string> = {\n umbra: ZENDIR_BRAND_COLORS.prussianBlue, // Deep Zendir blue\n penumbra: ZENDIR_BRAND_COLORS.electricDark, // Dark electric\n sunlight: STATUS_COLORS.caution, // Standard yellow for sunlight\n };\n\n return (\n <AstroChart\n ref={ref}\n type=\"bar\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n zoom={enableZoom ? { enabled: true, type: 'inside', axis: 'x' } : undefined}\n echartsOptions={{\n tooltip: {\n trigger: 'item',\n formatter: ((params: unknown) => {\n const p = params as { data: { value: [number, number, string] } };\n const [start, end, eclipseType] = p.data.value;\n const duration = ((end - start) / 60000).toFixed(1);\n return `${eclipseType.charAt(0).toUpperCase() + eclipseType.slice(1)}<br/>Duration: ${duration} min`;\n }) as unknown as string,\n },\n grid: { left: 60, right: 20, top: 30, bottom: 30 },\n xAxis: {\n type: 'time',\n min: timeRange?.[0],\n max: timeRange?.[1],\n },\n yAxis: {\n type: 'category',\n data: [''],\n show: false,\n },\n series: [{\n type: 'custom',\n renderItem: ((_params: unknown, api: unknown) => {\n const a = api as { value: (idx: number) => number | string; coord: (val: [number, number]) => number[]; size: (val: [number, number]) => number[] };\n const start = a.coord([a.value(0) as number, 0]);\n const end = a.coord([a.value(1) as number, 0]);\n const eclipseType = a.value(2) as string;\n const h = 30;\n return {\n type: 'rect',\n shape: {\n x: start[0],\n y: start[1] - h / 2,\n width: Math.max(end[0] - start[0], 2),\n height: h,\n },\n style: {\n fill: typeColors[eclipseType] || typeColors.sunlight,\n },\n };\n }) as unknown as undefined,\n encode: { x: [0, 1] },\n data: data.map(d => ({ value: [d.start, d.end, d.type] })),\n }],\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Rose Diagram (Polar Histogram for Directional Data)\n// =============================================================================\n\nexport interface RoseDiagramProps extends CommonChartProps {\n /** Directional data (angle in degrees, magnitude) */\n data: import('./types').RoseDiagramData[];\n /** Chart title */\n title?: string;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Number of bins (sectors) */\n bins?: number;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\nexport const RoseDiagram = memo(forwardRef<AstroChartHandle, RoseDiagramProps>(\n function RoseDiagram({\n data = [],\n title = 'Rose Diagram',\n width = '100%',\n height = 400,\n bins = 16,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const binData = useMemo(() => {\n // Create bins (e.g., 16 bins = 22.5° each)\n const binSize = 360 / bins;\n const binCounts = new Array(bins).fill(0);\n \n // Aggregate data into bins\n data.forEach(d => {\n const normalizedAngle = ((d.direction % 360) + 360) % 360;\n const binIndex = Math.floor(normalizedAngle / binSize);\n binCounts[binIndex] += d.magnitude;\n });\n \n // Create series data\n return binCounts.map((count, i) => ({\n name: `${(i * binSize).toFixed(0)}°`,\n value: count,\n }));\n }, [data, bins]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"bar\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={{\n polar: {\n radius: ['10%', '70%'],\n center: ['50%', '50%'],\n },\n angleAxis: {\n type: 'category',\n data: binData.map(d => d.name),\n startAngle: 90,\n boundaryGap: true,\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n fontSize: 9,\n color: 'rgba(255, 255, 255, 0.5)',\n margin: 8,\n },\n splitLine: {\n show: true,\n lineStyle: {\n color: 'rgba(100, 116, 139, 0.12)',\n type: 'dashed',\n },\n },\n },\n radiusAxis: {\n min: 0,\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: { show: false },\n splitLine: {\n show: true,\n lineStyle: {\n color: 'rgba(100, 116, 139, 0.15)',\n type: 'dashed',\n },\n },\n },\n tooltip: {\n trigger: 'item',\n backgroundColor: 'rgba(20, 30, 48, 0.95)',\n borderColor: 'rgba(100, 116, 139, 0.3)',\n textStyle: { color: 'rgba(255, 255, 255, 0.87)' }, // High contrast white\n },\n series: [{\n type: 'bar',\n data: binData.map(d => d.value),\n coordinateSystem: 'polar',\n roundCap: true,\n itemStyle: {\n // Zendir Electric → Purple gradient\n color: {\n type: 'linear',\n x: 0, y: 0, x2: 1, y2: 0,\n colorStops: [\n { offset: 0, color: ZENDIR_BRAND_COLORS.electric }, // #3E3CFF\n { offset: 1, color: ZENDIR_BRAND_COLORS.purple }, // #9D70FF\n ],\n },\n shadowColor: ZENDIR_BRAND_COLORS.purple,\n shadowBlur: 4,\n },\n }],\n }}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Heliocentric Orbit Plot (2D/3D with Mode Switching)\n// =============================================================================\n\n/** Color map for orbital bodies by type */\nconst ORBIT_COLOR_MAP: Record<string, string> = {\n // Human-made objects: Zendir Purple/Blue shades\n spacecraft: '#3E3CFF', // Zendir Electric\n satellite: '#9D70FF', // Zendir Purple\n station: '#3548C0', // Zendir Prussian Blue Light\n probe: '#1B2DA0', // Zendir Prussian Blue\n // Natural objects: Realistic colors\n planet: '#5BC0DE', // Teal-blue (default)\n // Debris/Asteroids: Brown/Gray shades\n asteroid: '#8B7355', // Warm brown\n debris: '#6B6B6B', // Gray\n // Comets: Brown with icy tones\n comet: '#5C4033', // Dark brown\n};\n\n/** Type labels for tooltips */\nconst ORBIT_TYPE_LABELS: Record<string, string> = {\n spacecraft: 'Spacecraft',\n satellite: 'Satellite',\n station: 'Space Station',\n probe: 'Deep Space Probe',\n planet: 'Planet',\n asteroid: 'Asteroid',\n debris: 'Debris',\n comet: 'Comet',\n};\n\nexport interface HeliocentricOrbitProps extends CommonChartProps {\n /** Orbital bodies/spacecraft data */\n data: import('./types').HeliocentricOrbitData[];\n /** Chart title */\n title?: string;\n /** Width */\n width?: number | string;\n /** Height */\n height?: number;\n /** Show grid */\n showGrid?: boolean;\n /** Enable zoom (scroll to zoom, drag to pan) */\n enableZoom?: boolean;\n /** Show labels on bodies */\n showLabels?: boolean;\n /** Visualization mode: 2D or 3D */\n mode?: '2d' | '3d';\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n /** Callback when body is clicked */\n onBodyClick?: (body: import('./types').HeliocentricOrbitData) => void;\n}\n\n/**\n * HeliocentricOrbitPlot - Interactive 2D/3D orbit visualization\n * \n * Features:\n * - 2D mode: Classic ecliptic plane view with X/Y axes\n * - 3D mode: Full 3D visualization with rotation/zoom (requires echarts-gl)\n * - Interactive hover on both bodies and orbit lines\n * - Zoom/pan controls\n * - Body/orbit highlighting on hover\n */\nexport const HeliocentricOrbitPlot = memo(forwardRef<AstroChartHandle, HeliocentricOrbitProps>(\n function HeliocentricOrbitPlot({\n data = [],\n title = 'Heliocentric Orbit',\n width = '100%',\n height = 500,\n showGrid = true,\n enableZoom = true,\n showLabels = true,\n mode = '2d',\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n onBodyClick: _onBodyClick,\n }, ref) {\n const { tokens, mode: themeMode } = useTheme();\n const tooltipStyle = useChartTooltipStyle();\n const _legendStyle = useChartLegendStyle();\n const labelPrimary = tokens.colors.text.primary;\n const labelSecondary = tokens.colors.text.secondary;\n const _labelTertiary = tokens.colors.text.tertiary;\n const labelBg = themeMode === 'dark' ? 'rgba(15, 23, 42, 0.72)' : 'rgba(255, 255, 255, 0.9)';\n \n // Store body data for tooltip lookup\n const bodyDataMap = useMemo(() => {\n const map = new Map<string, import('./types').HeliocentricOrbitData>();\n data.forEach(body => map.set(body.name, body));\n return map;\n }, [data]);\n\n // 2D Options\n const echarts2DOptions = useMemo(() => {\n const seriesArray: any[] = [];\n\n data.forEach((body, idx) => {\n const bodyColor = body.color || ORBIT_COLOR_MAP[body.type || 'spacecraft'] || ASTRO_DATA_VIZ_COLORS.mixed[idx % ASTRO_DATA_VIZ_COLORS.mixed.length];\n const typeLabel = ORBIT_TYPE_LABELS[body.type || 'spacecraft'] || 'Object';\n \n // Add orbit path (interactive)\n if (body.orbitPath && body.orbitPath.length > 0) {\n // Calculate orbit stats for tooltip\n const orbitRadius = body.semiMajorAxis || Math.max(...body.orbitPath.map(p => Math.sqrt(p.x*p.x + p.y*p.y)));\n \n seriesArray.push({\n type: 'line',\n name: `${body.name} Orbit`,\n data: body.orbitPath.map(p => [p.x, p.y, body.name, typeLabel, orbitRadius, body.period, body.inclination]),\n lineStyle: {\n color: bodyColor,\n type: 'dashed',\n width: 1.5,\n opacity: 0.6,\n },\n symbol: 'none',\n silent: false,\n emphasis: {\n lineStyle: {\n width: 3.5,\n opacity: 1,\n shadowBlur: 8,\n shadowColor: bodyColor,\n },\n },\n z: 1,\n });\n }\n\n // Add body position (scatter point)\n seriesArray.push({\n type: 'scatter',\n name: body.name,\n symbolSize: body.size || (body.type === 'planet' ? 20 : 12),\n data: [[body.x, body.y, body.z || 0, body.type, typeLabel, body.description, body.semiMajorAxis, body.period]],\n itemStyle: {\n color: bodyColor,\n shadowColor: bodyColor,\n shadowBlur: body.type === 'planet' ? 10 : 5,\n },\n label: {\n show: showLabels,\n position: 'top',\n formatter: body.name,\n fontSize: 11,\n color: labelSecondary,\n textBorderColor: 'transparent',\n textBorderWidth: 0,\n },\n emphasis: {\n scale: 1.6,\n itemStyle: {\n shadowBlur: 20,\n },\n label: {\n show: true,\n fontWeight: 'bold',\n fontSize: 12,\n color: labelPrimary,\n },\n },\n z: 10,\n });\n });\n\n return {\n tooltip: {\n trigger: 'item' as const,\n ...tooltipStyle,\n borderWidth: 1,\n padding: [12, 16],\n formatter: ((params: any) => {\n const seriesName = params.seriesName || '';\n \n // Orbit line tooltip - show orbital parameters\n if (params.seriesType === 'line') {\n const [_x, _y, bodyName, typeLabel, orbitRadius, period, inclination] = params.value || [];\n const bodyInfo = bodyDataMap.get(bodyName);\n \n let html = `<div style=\"font-weight:600;font-size:13px;margin-bottom:6px;color:#3E3CFF\">${seriesName}</div>`;\n html += `<div style=\"color:rgba(255,255,255,0.5);font-size:10px;margin-bottom:8px;text-transform:uppercase;letter-spacing:0.5px\">${typeLabel || 'Orbital Path'}</div>`;\n html += `<div style=\"border-top:1px solid rgba(100,116,139,0.3);padding-top:8px\">`;\n \n if (orbitRadius) {\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:4px\"><span style=\"color:rgba(255,255,255,0.6)\">Semi-major axis:</span><span style=\"font-family:monospace\">${orbitRadius.toFixed(3)} AU</span></div>`;\n }\n if (period) {\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:4px\"><span style=\"color:rgba(255,255,255,0.6)\">Orbital period:</span><span style=\"font-family:monospace\">${period.toFixed(1)} days</span></div>`;\n }\n if (inclination !== undefined) {\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:4px\"><span style=\"color:rgba(255,255,255,0.6)\">Inclination:</span><span style=\"font-family:monospace\">${inclination.toFixed(1)}°</span></div>`;\n }\n if (bodyInfo?.description) {\n html += `<div style=\"margin-top:6px;color:rgba(255,255,255,0.7);font-style:italic;font-size:11px\">${bodyInfo.description}</div>`;\n }\n html += `</div>`;\n return html;\n }\n \n // Scatter point (body) tooltip\n if (params.seriesType === 'scatter') {\n const [x, y, z, _bodyType, typeLabel, description, sma, period] = params.value;\n const distance = Math.sqrt(x*x + y*y + (z||0)*(z||0));\n \n let html = `<div style=\"font-weight:600;font-size:13px;margin-bottom:4px\">${seriesName}</div>`;\n html += `<div style=\"color:rgba(255,255,255,0.5);font-size:10px;margin-bottom:8px;text-transform:uppercase;letter-spacing:0.5px\">${typeLabel || 'Object'}</div>`;\n html += `<div style=\"border-top:1px solid rgba(100,116,139,0.3);padding-top:8px\">`;\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:3px\"><span style=\"color:rgba(255,255,255,0.6)\">X:</span><span style=\"font-family:monospace\">${x.toFixed(3)} AU</span></div>`;\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:3px\"><span style=\"color:rgba(255,255,255,0.6)\">Y:</span><span style=\"font-family:monospace\">${y.toFixed(3)} AU</span></div>`;\n if (z !== 0 && z !== undefined) {\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:3px\"><span style=\"color:rgba(255,255,255,0.6)\">Z:</span><span style=\"font-family:monospace\">${z.toFixed(3)} AU</span></div>`;\n }\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:3px;border-top:1px solid rgba(100,116,139,0.2);padding-top:6px;margin-top:4px\"><span style=\"color:rgba(255,255,255,0.6)\">Distance from Sun:</span><span style=\"font-family:monospace;color:#5BC0DE\">${distance.toFixed(3)} AU</span></div>`;\n if (sma) {\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:3px\"><span style=\"color:rgba(255,255,255,0.6)\">Semi-major axis:</span><span style=\"font-family:monospace\">${sma.toFixed(3)} AU</span></div>`;\n }\n if (period) {\n html += `<div style=\"display:flex;justify-content:space-between;margin-bottom:3px\"><span style=\"color:rgba(255,255,255,0.6)\">Period:</span><span style=\"font-family:monospace\">${period.toFixed(1)} days</span></div>`;\n }\n if (description) {\n html += `<div style=\"margin-top:8px;color:rgba(255,255,255,0.7);font-style:italic;font-size:11px;max-width:200px\">${description}</div>`;\n }\n html += `</div>`;\n return html;\n }\n return seriesName;\n }) as unknown as string,\n },\n toolbox: {\n show: enableZoom,\n right: 20,\n top: 10,\n feature: {\n dataZoom: { show: true, title: { zoom: 'Zoom', back: 'Reset' } },\n restore: { show: true, title: 'Reset' },\n },\n iconStyle: { borderColor: 'rgba(255, 255, 255, 0.5)' },\n },\n dataZoom: enableZoom ? [\n { type: 'inside' as const, xAxisIndex: 0, filterMode: 'none' as const },\n { type: 'inside' as const, yAxisIndex: 0, filterMode: 'none' as const },\n ] : undefined,\n grid: {\n containLabel: true,\n left: 60,\n right: enableZoom ? 80 : 40,\n top: 60,\n bottom: 60,\n },\n xAxis: {\n type: 'value' as const,\n name: 'X (AU)',\n nameLocation: 'middle' as const,\n nameGap: 30,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.15)' } },\n axisLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.3)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.5)' },\n },\n yAxis: {\n type: 'value' as const,\n name: 'Y (AU)',\n nameLocation: 'middle' as const,\n nameGap: 40,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.15)' } },\n axisLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.3)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.5)' },\n },\n animation: true,\n animationDuration: 300,\n series: seriesArray,\n };\n }, [data, showGrid, enableZoom, showLabels, bodyDataMap, tooltipStyle]);\n\n // 3D Options (requires echarts-gl)\n const echarts3DOptions = useMemo(() => {\n const seriesArray: any[] = [];\n\n data.forEach((body, idx) => {\n const bodyColor = body.color || ORBIT_COLOR_MAP[body.type || 'spacecraft'] || ASTRO_DATA_VIZ_COLORS.mixed[idx % ASTRO_DATA_VIZ_COLORS.mixed.length];\n const typeLabel = ORBIT_TYPE_LABELS[body.type || 'spacecraft'] || 'Object';\n \n // Orbit path as line3D series\n if (body.orbitPath && body.orbitPath.length > 0) {\n const orbitData = body.orbitPath.map(p => [p.x, p.y, p.z || 0]);\n // Close the orbit loop\n if (orbitData.length > 2) {\n orbitData.push(orbitData[0]);\n }\n seriesArray.push({\n type: 'line3D',\n name: `${body.name} Orbit`,\n coordinateSystem: 'cartesian3D',\n data: orbitData,\n lineStyle: {\n color: bodyColor,\n width: 1.5,\n opacity: 0.6,\n },\n silent: false,\n });\n }\n\n // Body position as scatter3D series\n seriesArray.push({\n type: 'scatter3D',\n name: body.name,\n coordinateSystem: 'cartesian3D',\n data: [{\n name: body.name,\n value: [body.x, body.y, body.z || 0],\n itemStyle: { color: bodyColor },\n typeLabel,\n description: body.description,\n }],\n symbolSize: body.size || (body.type === 'planet' ? 16 : 10),\n itemStyle: { color: bodyColor },\n label: {\n show: showLabels,\n formatter: body.name,\n textStyle: {\n color: labelPrimary,\n fontSize: 11,\n backgroundColor: labelBg,\n padding: [2, 4],\n borderRadius: 2,\n },\n },\n emphasis: {\n itemStyle: { opacity: 1 },\n label: { show: true },\n },\n });\n });\n\n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n formatter: ((params: any) => {\n const d = params.data || {};\n const seriesName = params.seriesName || '';\n \n // Line series (orbit)\n if (params.seriesType === 'line3D') {\n return `<div style=\"font-weight:600\">${seriesName}</div>`;\n }\n \n // Scatter (body)\n const [x, y, z] = d.value || params.value || [0, 0, 0];\n const distance = Math.sqrt(x*x + y*y + z*z);\n \n let html = `<div style=\"font-weight:600;font-size:13px;margin-bottom:4px\">${d.name || seriesName}</div>`;\n html += `<div style=\"color:rgba(255,255,255,0.5);font-size:10px;margin-bottom:8px;text-transform:uppercase\">${d.typeLabel || 'Object'}</div>`;\n html += `<div style=\"border-top:1px solid rgba(100,116,139,0.3);padding-top:8px\">`;\n html += `<div>X: <span style=\"font-family:monospace\">${x.toFixed(3)}</span> AU</div>`;\n html += `<div>Y: <span style=\"font-family:monospace\">${y.toFixed(3)}</span> AU</div>`;\n html += `<div>Z: <span style=\"font-family:monospace\">${z.toFixed(3)}</span> AU</div>`;\n html += `<div style=\"margin-top:4px;color:#5BC0DE\">Distance: <span style=\"font-family:monospace\">${distance.toFixed(3)}</span> AU</div>`;\n if (d.description) {\n html += `<div style=\"margin-top:6px;color:rgba(255,255,255,0.7);font-style:italic;font-size:11px\">${d.description}</div>`;\n }\n html += `</div>`;\n return html;\n }) as unknown as string,\n },\n grid3D: {\n boxWidth: 200,\n boxHeight: 60,\n boxDepth: 200,\n viewControl: {\n autoRotate: false,\n autoRotateAfterStill: 5,\n autoRotateSpeed: 5,\n distance: 280,\n alpha: 20,\n beta: 40,\n rotateSensitivity: 2,\n zoomSensitivity: 1.5,\n panSensitivity: 1,\n },\n light: {\n main: { intensity: 1.2, shadow: false },\n ambient: { intensity: 0.4 },\n },\n postEffect: {\n enable: true,\n bloom: { enable: true, intensity: 0.05 },\n },\n },\n xAxis3D: {\n type: 'value' as const,\n name: 'X (AU)',\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)', formatter: (v: number) => v.toFixed(1) },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n yAxis3D: {\n type: 'value' as const,\n name: 'Y (AU)',\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)', formatter: (v: number) => v.toFixed(1) },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n zAxis3D: {\n type: 'value' as const,\n name: 'Z (AU)',\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)', formatter: (v: number) => v.toFixed(1) },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n series: seriesArray,\n };\n }, [data, showGrid, showLabels]);\n\n // Cast to any for 3D options since echarts-gl types extend base ECharts\n const echartsOptions = mode === '3d' ? echarts3DOptions as any : echarts2DOptions;\n\n return (\n <AstroChart\n ref={ref}\n type=\"scatter\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Scatter3D Chart - Constellation Visualization, Debris Fields\n// =============================================================================\n\nexport interface Scatter3DChartProps extends CommonChartProps {\n /** 3D scatter data series */\n data: import('./types').Scatter3DData[];\n /** Chart title */\n title?: string;\n /** Chart width */\n width?: number | string;\n /** Chart height */\n height?: number;\n /** Show grid/axis */\n showGrid?: boolean;\n /** X-axis label */\n xAxisLabel?: string;\n /** Y-axis label */\n yAxisLabel?: string;\n /** Z-axis label */\n zAxisLabel?: string;\n /** Auto rotate */\n autoRotate?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * Scatter3DChart - 3D scatter plot for constellation analysis, debris fields\n * \n * Perfect for visualizing:\n * - Satellite constellation distributions\n * - Space debris fields\n * - Multi-dimensional parameter spaces\n * - Position clustering analysis\n */\nexport const Scatter3DChart = memo(forwardRef<AstroChartHandle, Scatter3DChartProps>(\n function Scatter3DChart({\n data = [],\n title,\n width = '100%',\n height = 500,\n showGrid = true,\n xAxisLabel = 'X',\n yAxisLabel = 'Y',\n zAxisLabel = 'Z',\n autoRotate = false,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const tooltipStyle = useChartTooltipStyle();\n const legendStyle = useChartLegendStyle();\n \n const echartsOptions = useMemo(() => {\n const seriesArray = data.map((series, idx) => ({\n type: 'scatter3D' as const,\n name: series.name,\n data: series.data.map(p => ({\n name: p.label || series.name,\n value: [p.x, p.y, p.z],\n itemStyle: p.color ? { color: p.color } : undefined,\n meta: p.meta,\n })),\n symbolSize: typeof series.symbolSize === 'number' ? series.symbolSize : 12,\n itemStyle: {\n color: series.color || ASTRO_DATA_VIZ_COLORS.mixed[idx % ASTRO_DATA_VIZ_COLORS.mixed.length],\n },\n label: {\n show: false,\n },\n emphasis: {\n itemStyle: { opacity: 1 },\n label: { show: true, formatter: (params: any) => params.data?.name || '' },\n },\n }));\n\n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n formatter: ((params: any) => {\n const d = params.data || {};\n const [x, y, z] = d.value || [0, 0, 0];\n let html = `<div style=\"font-weight:600;font-size:13px;margin-bottom:4px\">${d.name || params.seriesName}</div>`;\n html += `<div>${xAxisLabel}: <span style=\"font-family:monospace\">${x.toFixed(2)}</span></div>`;\n html += `<div>${yAxisLabel}: <span style=\"font-family:monospace\">${y.toFixed(2)}</span></div>`;\n html += `<div>${zAxisLabel}: <span style=\"font-family:monospace\">${z.toFixed(2)}</span></div>`;\n return html;\n }) as unknown as string,\n },\n legend: {\n show: data.length > 1,\n top: 10,\n ...legendStyle,\n },\n grid3D: {\n boxWidth: 100,\n boxHeight: 100,\n boxDepth: 100,\n viewControl: {\n autoRotate,\n autoRotateSpeed: 5,\n distance: 200,\n alpha: 25,\n beta: 45,\n rotateSensitivity: 2,\n zoomSensitivity: 1.5,\n },\n light: {\n main: { intensity: 1.2, shadow: false },\n ambient: { intensity: 0.4 },\n },\n postEffect: {\n enable: true,\n bloom: { enable: true, intensity: 0.05 },\n },\n },\n xAxis3D: {\n type: 'value' as const,\n name: xAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n yAxis3D: {\n type: 'value' as const,\n name: yAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n zAxis3D: {\n type: 'value' as const,\n name: zAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n series: seriesArray,\n };\n }, [data, showGrid, xAxisLabel, yAxisLabel, zAxisLabel, autoRotate, tooltipStyle, legendStyle]);\n\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return (\n <AstroChart\n ref={ref}\n type=\"scatter\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Bar3D Chart - Telemetry Comparisons, Multi-Satellite Analysis\n// =============================================================================\n\nexport interface Bar3DChartProps extends CommonChartProps {\n /** 3D bar data */\n data: import('./types').Bar3DData[];\n /** Chart title */\n title?: string;\n /** Chart width */\n width?: number | string;\n /** Chart height */\n height?: number;\n /** X-axis categories (or auto-derived) */\n xCategories?: string[];\n /** Y-axis categories (or auto-derived) */\n yCategories?: string[];\n /** X-axis label */\n xAxisLabel?: string;\n /** Y-axis label */\n yAxisLabel?: string;\n /** Z-axis label */\n zAxisLabel?: string;\n /** Bar shading style */\n shading?: 'color' | 'lambert' | 'realistic';\n /** Auto rotate */\n autoRotate?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * Bar3DChart - 3D bar chart for multi-dimensional comparisons\n * \n * Perfect for visualizing:\n * - Telemetry comparisons across satellites\n * - Parameter variations over time\n * - Multi-subsystem status comparisons\n * - Resource allocation matrices\n */\nexport const Bar3DChart = memo(forwardRef<AstroChartHandle, Bar3DChartProps>(\n function Bar3DChart({\n data = [],\n title,\n width = '100%',\n height = 500,\n xCategories = [],\n yCategories = [],\n xAxisLabel = 'X',\n yAxisLabel = 'Y',\n zAxisLabel = 'Value',\n shading = 'lambert',\n autoRotate = false,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const tooltipStyle = useChartTooltipStyle();\n const visualMapStyle = useChartVisualMapStyle();\n const { tokens } = useTheme();\n const labelPrimary = tokens.colors.text.primary;\n const labelSecondary = tokens.colors.text.secondary;\n const labelTertiary = tokens.colors.text.tertiary;\n \n // Derive categories if not provided\n const derivedXCategories = xCategories || [...new Set(data.map(d => String(d.x)))];\n const derivedYCategories = yCategories || [...new Set(data.map(d => String(d.y)))];\n\n const echartsOptions = useMemo(() => {\n const seriesData = data.map(d => {\n const xIdx = derivedXCategories.indexOf(String(d.x));\n const yIdx = derivedYCategories.indexOf(String(d.y));\n return {\n value: [xIdx, yIdx, d.z],\n name: d.label || `${d.x} - ${d.y}`,\n itemStyle: d.color ? { color: d.color } : undefined,\n };\n });\n\n // Calculate max Z for scaling\n const maxZ = Math.max(...data.map(d => d.z), 1);\n\n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n formatter: ((params: any) => {\n const d = params.data || {};\n const [xIdx, yIdx, z] = d.value || [0, 0, 0];\n const xLabel = derivedXCategories[xIdx] || xIdx;\n const yLabel = derivedYCategories[yIdx] || yIdx;\n let html = `<div style=\"font-weight:600;font-size:13px;margin-bottom:4px\">${d.name || ''}</div>`;\n html += `<div>${xAxisLabel}: ${xLabel}</div>`;\n html += `<div>${yAxisLabel}: ${yLabel}</div>`;\n html += `<div style=\"color:#3E3CFF\">${zAxisLabel}: <span style=\"font-family:monospace\">${z.toFixed(2)}</span></div>`;\n return html;\n }) as unknown as string,\n },\n visualMap: {\n show: true,\n min: 0,\n max: maxZ,\n inRange: {\n color: ['#3E3CFF', '#9D70FF', '#22d3ee', '#56f000'],\n },\n ...visualMapStyle,\n right: 10,\n top: 'center',\n },\n grid3D: {\n boxWidth: 100,\n boxHeight: 80,\n boxDepth: 100,\n viewControl: {\n autoRotate,\n autoRotateSpeed: 3,\n distance: 250,\n alpha: 25,\n beta: 45,\n rotateSensitivity: 2,\n zoomSensitivity: 1.5,\n },\n light: {\n main: { intensity: 1.1, shadow: true, shadowQuality: 'medium' },\n ambient: { intensity: 0.4 },\n },\n },\n xAxis3D: {\n type: 'category' as const,\n name: xAxisLabel,\n data: derivedXCategories,\n nameTextStyle: { color: labelSecondary },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: labelSecondary, fontSize: 10 },\n },\n yAxis3D: {\n type: 'category' as const,\n name: yAxisLabel,\n data: derivedYCategories,\n nameTextStyle: { color: labelSecondary },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: labelSecondary, fontSize: 10 },\n },\n zAxis3D: {\n type: 'value' as const,\n name: zAxisLabel,\n nameTextStyle: { color: labelSecondary },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: labelTertiary },\n },\n series: [{\n type: 'bar3D' as const,\n data: seriesData,\n shading,\n barSize: 15,\n bevelSize: 0.1,\n label: {\n show: false,\n },\n emphasis: {\n label: {\n show: true,\n formatter: (params: any) => params.data?.name || '',\n textStyle: { color: labelPrimary, fontSize: 11 },\n },\n },\n }],\n };\n }, [data, derivedXCategories, derivedYCategories, xAxisLabel, yAxisLabel, zAxisLabel, shading, autoRotate, tooltipStyle, visualMapStyle, labelPrimary, labelSecondary, labelTertiary]);\n\n if (!glReady) return <AstroChart ref={ref} type=\"bar\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return (\n <AstroChart\n ref={ref}\n type=\"bar\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Surface3D Chart - Signal Strength Maps, Thermal Analysis\n// =============================================================================\n\nexport interface Surface3DChartProps extends CommonChartProps {\n /** Surface data (2D array or structured) */\n data: import('./types').Surface3DData;\n /** Chart title */\n title?: string;\n /** Chart width */\n width?: number | string;\n /** Chart height */\n height?: number;\n /** X-axis label */\n xAxisLabel?: string;\n /** Y-axis label */\n yAxisLabel?: string;\n /** Z-axis label */\n zAxisLabel?: string;\n /** Surface shading style */\n shading?: 'color' | 'lambert' | 'realistic';\n /** Auto rotate */\n autoRotate?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * Surface3DChart - 3D surface visualization for continuous data\n * \n * Perfect for visualizing:\n * - Signal strength heatmaps over coverage areas\n * - Thermal distribution surfaces\n * - Terrain/topography models\n * - Radiation patterns\n */\nexport const Surface3DChart = memo(forwardRef<AstroChartHandle, Surface3DChartProps>(\n function Surface3DChart({\n data = { data: [] },\n title,\n width = '100%',\n height = 500,\n xAxisLabel = 'X',\n yAxisLabel = 'Y',\n zAxisLabel = 'Z',\n shading = 'realistic',\n autoRotate = false,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const tooltipStyle = useChartTooltipStyle();\n const visualMapStyle = useChartVisualMapStyle();\n \n const echartsOptions = useMemo(() => {\n // Convert 2D array to surface data format\n const surfaceData: number[][] = [];\n const rows = data.data.length;\n const cols = rows > 0 ? data.data[0].length : 0;\n \n for (let i = 0; i < rows; i++) {\n for (let j = 0; j < cols; j++) {\n const x = data.xRange ? data.xRange[0] + (data.xRange[1] - data.xRange[0]) * (i / (rows - 1 || 1)) : i;\n const y = data.yRange ? data.yRange[0] + (data.yRange[1] - data.yRange[0]) * (j / (cols - 1 || 1)) : j;\n surfaceData.push([x, y, data.data[i][j]]);\n }\n }\n\n // Calculate min/max for visual map\n const allZ = data.data.flat();\n const minZ = Math.min(...allZ);\n const maxZ = Math.max(...allZ);\n\n // Color map based on selection\n const colorRange = data.colorMap === 'thermal' \n ? ['#0d0887', '#6a00a8', '#b12a90', '#e16462', '#fca636', '#f0f921']\n : data.colorMap === 'viridis'\n ? ['#440154', '#414487', '#2a788e', '#22a884', '#7ad151', '#fde725']\n : data.colorStops?.map(s => s.color) \n || ['#1B2DA0', '#3E3CFF', '#9D70FF', '#22d3ee', '#56f000'];\n\n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n },\n visualMap: {\n show: true,\n min: minZ,\n max: maxZ,\n inRange: { color: colorRange },\n ...visualMapStyle,\n right: 10,\n top: 'center',\n },\n grid3D: {\n boxWidth: 100,\n boxHeight: 60,\n boxDepth: 100,\n viewControl: {\n autoRotate,\n autoRotateSpeed: 3,\n distance: 220,\n alpha: 30,\n beta: 45,\n rotateSensitivity: 2,\n zoomSensitivity: 1.5,\n },\n light: {\n main: { intensity: 1.2, shadow: true, shadowQuality: 'medium' },\n ambient: { intensity: 0.5 },\n },\n postEffect: {\n enable: true,\n SSAO: { enable: true, radius: 2 },\n },\n },\n xAxis3D: {\n type: 'value' as const,\n name: xAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n },\n yAxis3D: {\n type: 'value' as const,\n name: yAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n },\n zAxis3D: {\n type: 'value' as const,\n name: zAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n },\n series: [{\n type: 'surface' as const,\n data: surfaceData,\n shading,\n wireframe: data.wireframe ? {\n show: true,\n lineStyle: { color: 'rgba(255, 255, 255, 0.2)', width: 0.5 },\n } : { show: false },\n }],\n };\n }, [data, xAxisLabel, yAxisLabel, zAxisLabel, shading, autoRotate, tooltipStyle, visualMapStyle]);\n\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return (\n <AstroChart\n ref={ref}\n type=\"scatter\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// Lines3D Chart - Debris Trajectories, Satellite Links\n// =============================================================================\n\nexport interface Lines3DChartProps extends CommonChartProps {\n /** 3D line paths */\n data: import('./types').Lines3DData[];\n /** Chart title */\n title?: string;\n /** Chart width */\n width?: number | string;\n /** Chart height */\n height?: number;\n /** Show grid */\n showGrid?: boolean;\n /** X-axis label */\n xAxisLabel?: string;\n /** Y-axis label */\n yAxisLabel?: string;\n /** Z-axis label */\n zAxisLabel?: string;\n /** Show flow animation effect */\n showFlowEffect?: boolean;\n /** Auto rotate */\n autoRotate?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * Lines3DChart - 3D line paths for trajectories and connections\n * \n * Perfect for visualizing:\n * - Space debris trajectories\n * - Inter-satellite link networks\n * - Transfer orbit paths\n * - Multi-body trajectory visualization\n */\nexport const Lines3DChart = memo(forwardRef<AstroChartHandle, Lines3DChartProps>(\n function Lines3DChart({\n data = [],\n title,\n width = '100%',\n height = 500,\n showGrid = true,\n xAxisLabel = 'X',\n yAxisLabel = 'Y',\n zAxisLabel = 'Z',\n showFlowEffect = false,\n autoRotate = false,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const { tokens, mode } = useTheme();\n const tooltipStyle = useChartTooltipStyle();\n const legendStyle = useChartLegendStyle();\n const labelPrimary = tokens.colors.text.primary;\n const labelSecondary = tokens.colors.text.secondary;\n const _labelTertiary = tokens.colors.text.tertiary;\n const _labelBg = mode === 'dark' ? 'rgba(15, 23, 42, 0.72)' : 'rgba(255, 255, 255, 0.9)';\n \n const echartsOptions = useMemo(() => {\n const seriesArray: any[] = [];\n\n data.forEach((line, idx) => {\n const lineColor = line.color || ASTRO_DATA_VIZ_COLORS.mixed[idx % ASTRO_DATA_VIZ_COLORS.mixed.length];\n \n // Main line\n seriesArray.push({\n type: 'line3D' as const,\n name: line.name,\n coordinateSystem: 'cartesian3D',\n data: line.path.map(p => [p.x, p.y, p.z]),\n lineStyle: {\n color: lineColor,\n width: line.lineWidth || 2,\n type: line.lineStyle || 'solid',\n opacity: 0.8,\n },\n });\n\n // Endpoints as scatter\n if (line.showEndpoints) {\n seriesArray.push({\n type: 'scatter3D' as const,\n name: `${line.name} Points`,\n coordinateSystem: 'cartesian3D',\n data: [\n { value: [line.path[0].x, line.path[0].y, line.path[0].z], name: 'Start' },\n { value: [line.path[line.path.length - 1].x, line.path[line.path.length - 1].y, line.path[line.path.length - 1].z], name: 'End' },\n ],\n symbolSize: 8,\n itemStyle: { color: lineColor },\n });\n }\n });\n\n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n formatter: ((params: any) => {\n const d = params.data || {};\n if (params.seriesType === 'line3D') {\n return `<div style=\"font-weight:600\">${params.seriesName}</div>`;\n }\n const [x, y, z] = d.value || [0, 0, 0];\n return `<div style=\"font-weight:600\">${d.name || params.seriesName}</div>\n <div>${xAxisLabel}: ${x.toFixed(2)}</div>\n <div>${yAxisLabel}: ${y.toFixed(2)}</div>\n <div>${zAxisLabel}: ${z.toFixed(2)}</div>`;\n }) as unknown as string,\n },\n legend: {\n show: data.length > 1,\n top: 10,\n ...legendStyle,\n },\n grid3D: {\n boxWidth: 100,\n boxHeight: 100,\n boxDepth: 100,\n viewControl: {\n autoRotate,\n autoRotateSpeed: 3,\n distance: 200,\n alpha: 25,\n beta: 45,\n rotateSensitivity: 2,\n zoomSensitivity: 1.5,\n },\n light: {\n main: { intensity: 1.2, shadow: false },\n ambient: { intensity: 0.4 },\n },\n postEffect: {\n enable: true,\n bloom: { enable: showFlowEffect, intensity: 0.1 },\n },\n },\n xAxis3D: {\n type: 'value' as const,\n name: xAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n yAxis3D: {\n type: 'value' as const,\n name: yAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n zAxis3D: {\n type: 'value' as const,\n name: zAxisLabel,\n nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' },\n axisLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.4)' } },\n axisLabel: { color: 'rgba(255, 255, 255, 0.4)' },\n splitLine: { show: showGrid, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } },\n },\n series: seriesArray,\n };\n }, [data, showGrid, xAxisLabel, yAxisLabel, zAxisLabel, showFlowEffect, autoRotate, tooltipStyle, legendStyle]);\n\n return (\n <AstroChart\n ref={ref}\n type=\"scatter\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// SPACE-SPECIFIC 3D CHARTS\n// =============================================================================\n\n// =============================================================================\n// SphericalRadar3DChart - Object Tracking in Spherical Coordinates\n// =============================================================================\n\nexport interface SphericalRadar3DData {\n /** Object identifier */\n id: string;\n /** Object name */\n name: string;\n /** Azimuth angle (degrees, 0-360) */\n azimuth: number;\n /** Elevation angle (degrees, -90 to 90) */\n elevation: number;\n /** Range/distance */\n range: number;\n /** Object category */\n category?: 'satellite' | 'debris' | 'unknown' | 'friendly' | 'hostile';\n /** Color override */\n color?: string;\n /** Size override */\n size?: number;\n}\n\nexport interface SphericalRadar3DChartProps extends CommonChartProps {\n /** Tracked objects */\n data: SphericalRadar3DData[];\n /** Chart title */\n title?: string;\n /** Chart width */\n width?: number | string;\n /** Chart height */\n height?: number;\n /** Maximum range for scaling */\n maxRange?: number;\n /** Show range rings */\n showRangeRings?: boolean;\n /** Auto rotate */\n autoRotate?: boolean;\n /** Loading state */\n loading?: boolean;\n /** Custom className */\n className?: string;\n}\n\n/**\n * SphericalRadar3DChart - 3D radar-style object tracking visualization\n * \n * USE CASES:\n * - Ground station tracking view (azimuth/elevation/range)\n * - Space surveillance radar displays\n * - Proximity operations around spacecraft\n * - Air/space traffic control visualization\n * - Collision avoidance monitoring\n */\nexport const SphericalRadar3DChart = memo(forwardRef<AstroChartHandle, SphericalRadar3DChartProps>(\n function SphericalRadar3DChart({\n data = [],\n title,\n width = '100%',\n height = 500,\n maxRange = 1000,\n showRangeRings = true,\n autoRotate = false,\n loading = false,\n className = '',\n export: exportOptions,\n infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const tooltipStyle = useChartTooltipStyle();\n const _legendStyle = useChartLegendStyle();\n \n const categoryColors: Record<string, string> = {\n satellite: '#56f000',\n debris: '#ff3838',\n unknown: '#fce83a',\n friendly: '#3E3CFF',\n hostile: '#ff3838',\n };\n\n const echartsOptions = useMemo(() => {\n // Convert spherical to Cartesian for 3D display\n const scatterData = data.map(obj => {\n const azRad = (obj.azimuth * Math.PI) / 180;\n const elRad = (obj.elevation * Math.PI) / 180;\n const r = (obj.range / maxRange) * 100;\n \n return {\n name: obj.name,\n value: [\n r * Math.cos(elRad) * Math.sin(azRad),\n r * Math.sin(elRad),\n r * Math.cos(elRad) * Math.cos(azRad),\n ],\n itemStyle: { color: obj.color || categoryColors[obj.category || 'unknown'] },\n symbolSize: obj.size || 12,\n category: obj.category,\n azimuth: obj.azimuth,\n elevation: obj.elevation,\n range: obj.range,\n };\n });\n\n // Generate range rings\n const rangeRings: any[] = [];\n if (showRangeRings) {\n [0.25, 0.5, 0.75, 1.0].forEach(fraction => {\n const r = fraction * 100;\n const ringPoints = Array.from({ length: 73 }, (_, i) => {\n const angle = (i / 72) * Math.PI * 2;\n return [r * Math.sin(angle), 0, r * Math.cos(angle)];\n });\n rangeRings.push({\n type: 'line3D',\n coordinateSystem: 'cartesian3D',\n data: ringPoints,\n lineStyle: { color: 'rgba(100, 116, 139, 0.3)', width: 1 },\n silent: true,\n });\n });\n }\n\n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n formatter: ((params: any) => {\n const d = params.data || {};\n let html = `<div style=\"font-weight:600;font-size:13px;margin-bottom:4px\">${d.name}</div>`;\n html += `<div style=\"color:rgba(255,255,255,0.5);text-transform:uppercase;font-size:10px;margin-bottom:6px\">${d.category || 'Unknown'}</div>`;\n html += `<div>Azimuth: <span style=\"font-family:monospace\">${d.azimuth?.toFixed(1)}°</span></div>`;\n html += `<div>Elevation: <span style=\"font-family:monospace\">${d.elevation?.toFixed(1)}°</span></div>`;\n html += `<div style=\"color:#22d3ee\">Range: <span style=\"font-family:monospace\">${d.range?.toFixed(1)} km</span></div>`;\n return html;\n }) as unknown as string,\n },\n grid3D: {\n boxWidth: 100,\n boxHeight: 50,\n boxDepth: 100,\n viewControl: {\n autoRotate,\n autoRotateSpeed: 2,\n distance: 250,\n alpha: 25,\n beta: 45,\n rotateSensitivity: 2,\n zoomSensitivity: 1.5,\n },\n light: {\n main: { intensity: 1.2, shadow: false },\n ambient: { intensity: 0.5 },\n },\n postEffect: { enable: true, bloom: { enable: true, intensity: 0.05 } },\n },\n xAxis3D: { type: 'value', name: 'East', min: -100, max: 100, axisLabel: { show: false }, splitLine: { show: false } },\n yAxis3D: { type: 'value', name: 'Up', min: -50, max: 100, axisLabel: { show: false }, splitLine: { show: false } },\n zAxis3D: { type: 'value', name: 'North', min: -100, max: 100, axisLabel: { show: false }, splitLine: { show: false } },\n series: [...rangeRings, { type: 'scatter3D', coordinateSystem: 'cartesian3D', data: scatterData, symbolSize: 12 }],\n };\n }, [data, maxRange, showRangeRings, autoRotate, categoryColors, tooltipStyle]);\n\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return (\n <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height}\n loading={loading} className={className} echartsOptions={echartsOptions as any}\n export={exportOptions} infoTooltip={infoTooltip} />\n );\n }\n));\n\n// =============================================================================\n// TransferOrbit3DChart - Mission Planning & Trajectory Visualization\n// =============================================================================\n\nexport interface TransferOrbitSegment {\n id: string;\n name: string;\n path: Array<{ x: number; y: number; z: number }>;\n type: 'coast' | 'burn' | 'gravity-assist' | 'spiral';\n deltaV?: number;\n color?: string;\n}\n\nexport interface TransferOrbitWaypoint {\n name: string;\n position: { x: number; y: number; z: number };\n type: 'departure' | 'arrival' | 'flyby' | 'node' | 'burn';\n deltaV?: number;\n tof?: number;\n}\n\nexport interface TransferOrbit3DChartProps extends CommonChartProps {\n segments: TransferOrbitSegment[];\n waypoints?: TransferOrbitWaypoint[];\n referenceOrbits?: Array<{ name: string; path: Array<{ x: number; y: number; z: number }>; color?: string }>;\n title?: string;\n width?: number | string;\n height?: number;\n showDeltaV?: boolean;\n autoRotate?: boolean;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * TransferOrbit3DChart - Interplanetary/orbital transfer visualization\n * \n * USE CASES:\n * - Hohmann transfer orbit planning\n * - Bi-elliptic transfer visualization\n * - Gravity assist trajectory design\n * - Low-thrust spiral maneuvers\n * - Lunar/Mars mission trajectory planning\n */\nexport const TransferOrbit3DChart = memo(forwardRef<AstroChartHandle, TransferOrbit3DChartProps>(\n function TransferOrbit3DChart({\n segments = [], waypoints = [], referenceOrbits = [], title, width = '100%', height = 550,\n showDeltaV = true, autoRotate = false, loading = false, className = '',\n export: exportOptions, infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const tooltipStyle = useChartTooltipStyle();\n const legendStyle = useChartLegendStyle();\n const { tokens, mode } = useTheme();\n const labelPrimary = tokens.colors.text.primary;\n const labelSecondary = tokens.colors.text.secondary;\n const labelTertiary = tokens.colors.text.tertiary;\n const labelBg = mode === 'dark' ? 'rgba(15, 23, 42, 0.72)' : 'rgba(255, 255, 255, 0.9)';\n \n const segmentColors: Record<string, string> = { coast: '#9D70FF', burn: '#ff3838', 'gravity-assist': '#22d3ee', spiral: '#56f000' };\n const waypointColors: Record<string, string> = { departure: '#3E3CFF', arrival: '#56f000', flyby: '#22d3ee', node: '#fce83a', burn: '#ff3838' };\n\n const echartsOptions = useMemo(() => {\n const seriesArray: any[] = [];\n referenceOrbits.forEach(orbit => {\n seriesArray.push({ type: 'line3D', name: orbit.name, coordinateSystem: 'cartesian3D',\n data: orbit.path.map(p => [p.x, p.y, p.z]), lineStyle: { color: orbit.color || 'rgba(100, 116, 139, 0.3)', width: 1, type: 'dashed' }, silent: true });\n });\n segments.forEach((segment, idx) => {\n const color = segment.color || segmentColors[segment.type] || ASTRO_DATA_VIZ_COLORS.mixed[idx % ASTRO_DATA_VIZ_COLORS.mixed.length];\n seriesArray.push({ type: 'line3D', name: segment.name, coordinateSystem: 'cartesian3D',\n data: segment.path.map(p => [p.x, p.y, p.z]), lineStyle: { color, width: segment.type === 'burn' ? 4 : 2 } });\n });\n if (waypoints.length > 0) {\n seriesArray.push({ type: 'scatter3D', name: 'Waypoints', coordinateSystem: 'cartesian3D',\n data: waypoints.map(wp => ({ name: wp.name, value: [wp.position.x, wp.position.y, wp.position.z],\n itemStyle: { color: waypointColors[wp.type] || '#fff' }, symbolSize: wp.type === 'burn' ? 14 : 18, deltaV: wp.deltaV, tof: wp.tof, waypointType: wp.type })),\n label: { show: true, formatter: (p: any) => p.data?.name, textStyle: { color: labelPrimary, fontSize: 11, backgroundColor: labelBg, padding: [2, 4] } } });\n }\n const totalDeltaV = segments.reduce((sum, s) => sum + (s.deltaV || 0), 0) + waypoints.reduce((sum, w) => sum + (w.deltaV || 0), 0);\n return {\n tooltip: { show: true, ...tooltipStyle,\n formatter: ((params: any) => { const d = params.data || {}; if (params.seriesType === 'line3D') { const seg = segments.find(s => s.name === params.seriesName); return `<div style=\"font-weight:600\">${params.seriesName}</div>${seg?.deltaV ? `<div style=\"color:#ff3838\">ΔV: ${seg.deltaV.toFixed(2)} km/s</div>` : ''}`; }\n return `<div style=\"font-weight:600;margin-bottom:4px\">${d.name}</div>${d.deltaV ? `<div style=\"color:#ff3838\">ΔV: ${d.deltaV.toFixed(2)} km/s</div>` : ''}${d.tof ? `<div>TOF: ${d.tof.toFixed(0)} days</div>` : ''}`; }) as unknown as string },\n legend: { show: true, top: 10, ...legendStyle },\n graphic: showDeltaV && totalDeltaV > 0 ? [{ type: 'text', right: 20, top: 20, style: { text: `Total ΔV: ${totalDeltaV.toFixed(2)} km/s`, fill: '#ff3838', fontSize: 14, fontWeight: 'bold' } }] : undefined,\n grid3D: { boxWidth: 150, boxHeight: 80, boxDepth: 150, viewControl: { autoRotate, autoRotateSpeed: 2, distance: 280, alpha: 20, beta: 40 }, light: { main: { intensity: 1.2 }, ambient: { intensity: 0.4 } }, postEffect: { enable: true, bloom: { enable: true, intensity: 0.08 } } },\n xAxis3D: { type: 'value', name: 'X (AU)', nameTextStyle: { color: labelSecondary }, axisLabel: { color: labelTertiary, formatter: (v: number) => v.toFixed(1) }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n yAxis3D: { type: 'value', name: 'Z (AU)', nameTextStyle: { color: labelSecondary }, axisLabel: { color: labelTertiary, formatter: (v: number) => v.toFixed(1) }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n zAxis3D: { type: 'value', name: 'Y (AU)', nameTextStyle: { color: labelSecondary }, axisLabel: { color: labelTertiary, formatter: (v: number) => v.toFixed(1) }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n series: seriesArray,\n };\n }, [segments, waypoints, referenceOrbits, showDeltaV, autoRotate, segmentColors, waypointColors, tooltipStyle, legendStyle, labelPrimary, labelSecondary, labelTertiary, labelBg]);\n\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading={loading} className={className} echartsOptions={echartsOptions as any} export={exportOptions} infoTooltip={infoTooltip} />;\n }\n));\n\n// =============================================================================\n// AttitudeHistory3DChart - Spacecraft Orientation Over Time\n// =============================================================================\n\nexport interface AttitudeHistoryPoint {\n time: number;\n euler?: { roll: number; pitch: number; yaw: number };\n error?: number;\n mode?: string;\n}\n\nexport interface AttitudeHistory3DChartProps extends CommonChartProps {\n data: AttitudeHistoryPoint[];\n title?: string;\n width?: number | string;\n height?: number;\n mode?: 'euler' | 'pointing-error';\n showModeTransitions?: boolean;\n autoRotate?: boolean;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * AttitudeHistory3DChart - Spacecraft attitude evolution visualization\n * \n * USE CASES:\n * - Attitude maneuver visualization\n * - Tumbling/spin analysis\n * - Pointing stability assessment\n * - Safe mode recovery analysis\n * - Slew profile optimization\n */\nexport const AttitudeHistory3DChart = memo(forwardRef<AstroChartHandle, AttitudeHistory3DChartProps>(\n function AttitudeHistory3DChart({\n data = [], title, width = '100%', height = 500, mode = 'euler', showModeTransitions = true,\n autoRotate = false, loading = false, className = '', export: exportOptions, infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const tooltipStyle = useChartTooltipStyle();\n const legendStyle = useChartLegendStyle();\n \n const echartsOptions = useMemo(() => {\n const seriesArray: any[] = [];\n if (mode === 'euler' && data.length > 0) {\n const pathData = data.filter(d => d.euler).map(d => [d.euler!.roll, d.euler!.pitch, d.euler!.yaw]);\n seriesArray.push({ type: 'line3D', name: 'Attitude Path', coordinateSystem: 'cartesian3D', data: pathData, lineStyle: { color: '#3E3CFF', width: 2 } });\n if (pathData.length > 0) {\n seriesArray.push({ type: 'scatter3D', name: 'Start/End', coordinateSystem: 'cartesian3D', data: [\n { value: pathData[0], name: 'Start', itemStyle: { color: '#56f000' } },\n { value: pathData[pathData.length - 1], name: 'End', itemStyle: { color: '#ff3838' } }\n ], symbolSize: 14 });\n }\n if (showModeTransitions) {\n const transitions = data.filter((d, i) => i > 0 && d.mode !== data[i - 1].mode && d.euler);\n if (transitions.length > 0) {\n seriesArray.push({ type: 'scatter3D', name: 'Mode Changes', coordinateSystem: 'cartesian3D', data: transitions.map(d => ({ value: [d.euler!.roll, d.euler!.pitch, d.euler!.yaw], name: d.mode, itemStyle: { color: '#fce83a' } })), symbolSize: 10, symbol: 'diamond' });\n }\n }\n }\n return {\n tooltip: { show: true, ...tooltipStyle,\n formatter: ((params: any) => { const d = params.data || {}; const [roll, pitch, yaw] = d.value || [0, 0, 0]; return `<div style=\"font-weight:600;margin-bottom:4px\">${d.name || params.seriesName}</div><div>Roll: ${roll.toFixed(2)}°</div><div>Pitch: ${pitch.toFixed(2)}°</div><div>Yaw: ${yaw.toFixed(2)}°</div>`; }) as unknown as string },\n legend: { show: true, top: 10, ...legendStyle },\n grid3D: { boxWidth: 100, boxHeight: 100, boxDepth: 100, viewControl: { autoRotate, distance: 220, alpha: 25, beta: 45 }, light: { main: { intensity: 1.2 }, ambient: { intensity: 0.4 } } },\n xAxis3D: { type: 'value', name: 'Roll (°)', nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' }, axisLabel: { color: 'rgba(255, 255, 255, 0.4)' }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n yAxis3D: { type: 'value', name: 'Pitch (°)', nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' }, axisLabel: { color: 'rgba(255, 255, 255, 0.4)' }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n zAxis3D: { type: 'value', name: 'Yaw (°)', nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' }, axisLabel: { color: 'rgba(255, 255, 255, 0.4)' }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n series: seriesArray,\n };\n }, [data, mode, showModeTransitions, autoRotate, tooltipStyle, legendStyle]);\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading={loading} className={className} echartsOptions={echartsOptions as any} export={exportOptions} infoTooltip={infoTooltip} />;\n }\n));\n\n// =============================================================================\n// ConjunctionAssessment3DChart - Collision Analysis\n// =============================================================================\n\nexport interface ConjunctionEvent {\n id: string;\n primary: string;\n secondary: string;\n tca: number;\n missDistance: number;\n probability?: number;\n relativeVelocity?: number;\n position: { x: number; y: number; z: number };\n uncertainty?: { rx: number; ry: number; rz: number };\n}\n\nexport interface ConjunctionAssessment3DChartProps extends CommonChartProps {\n events: ConjunctionEvent[];\n primaryOrbit?: Array<{ x: number; y: number; z: number }>;\n title?: string;\n width?: number | string;\n height?: number;\n showUncertainty?: boolean;\n warningThreshold?: number;\n criticalThreshold?: number;\n autoRotate?: boolean;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * ConjunctionAssessment3DChart - Space object collision analysis\n * \n * USE CASES:\n * - Conjunction screening results visualization\n * - Collision avoidance maneuver planning\n * - Debris close approach monitoring\n * - Rendezvous safety analysis\n * - Formation flying separation monitoring\n */\nexport const ConjunctionAssessment3DChart = memo(forwardRef<AstroChartHandle, ConjunctionAssessment3DChartProps>(\n function ConjunctionAssessment3DChart({\n events = [], primaryOrbit = [], title, width = '100%', height = 550, showUncertainty = true,\n warningThreshold = 5, criticalThreshold = 1, autoRotate = false, loading = false, className = '',\n export: exportOptions, infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const tooltipStyle = useChartTooltipStyle();\n const legendStyle = useChartLegendStyle();\n const { tokens, mode } = useTheme();\n const _labelPrimary = tokens.colors.text.primary;\n const _labelSecondary = tokens.colors.text.secondary;\n const _labelTertiary = tokens.colors.text.tertiary;\n const _labelBg = mode === 'dark' ? 'rgba(15, 23, 42, 0.72)' : 'rgba(255, 255, 255, 0.9)';\n \n const echartsOptions = useMemo(() => {\n const seriesArray: any[] = [];\n if (primaryOrbit && primaryOrbit.length > 0) {\n seriesArray.push({ type: 'line3D', name: 'Primary Orbit', coordinateSystem: 'cartesian3D', data: primaryOrbit.map(p => [p.x, p.y, p.z]), lineStyle: { color: '#3E3CFF', width: 2 } });\n }\n const eventData = events.map(evt => {\n const color = evt.missDistance < criticalThreshold ? '#ff3838' : evt.missDistance < warningThreshold ? '#fce83a' : '#56f000';\n return { name: `${evt.primary} × ${evt.secondary}`, value: [evt.position.x, evt.position.y, evt.position.z], itemStyle: { color }, symbolSize: Math.max(8, Math.min(24, 30 - evt.missDistance * 3)), ...evt };\n });\n seriesArray.push({ type: 'scatter3D', name: 'Conjunctions', coordinateSystem: 'cartesian3D', data: eventData, symbol: 'circle', emphasis: { itemStyle: { borderColor: '#fff', borderWidth: 2 } } });\n if (showUncertainty) {\n events.filter(e => e.uncertainty).forEach(evt => {\n const { x, y, z } = evt.position; const { rx, ry, rz } = evt.uncertainty!;\n seriesArray.push({ type: 'line3D', coordinateSystem: 'cartesian3D', data: [[x - rx, y, z], [x + rx, y, z]], lineStyle: { color: 'rgba(255, 255, 255, 0.3)', width: 1 }, silent: true });\n seriesArray.push({ type: 'line3D', coordinateSystem: 'cartesian3D', data: [[x, y - ry, z], [x, y + ry, z]], lineStyle: { color: 'rgba(255, 255, 255, 0.3)', width: 1 }, silent: true });\n seriesArray.push({ type: 'line3D', coordinateSystem: 'cartesian3D', data: [[x, y, z - rz], [x, y, z + rz]], lineStyle: { color: 'rgba(255, 255, 255, 0.3)', width: 1 }, silent: true });\n });\n }\n return {\n tooltip: { show: true, ...tooltipStyle,\n formatter: ((params: any) => { const d = params.data || {}; if (params.seriesType === 'line3D') return ''; const mdColor = d.missDistance < criticalThreshold ? '#ff3838' : d.missDistance < warningThreshold ? '#fce83a' : '#56f000'; return `<div style=\"font-weight:600;margin-bottom:4px\">${d.name}</div><div style=\"color:${mdColor}\">Miss Distance: ${d.missDistance?.toFixed(3)} km</div>${d.probability !== undefined ? `<div>Probability: ${(d.probability * 100).toExponential(2)}%</div>` : ''}${d.relativeVelocity ? `<div>Rel. Velocity: ${d.relativeVelocity.toFixed(2)} km/s</div>` : ''}`; }) as unknown as string },\n legend: { show: true, top: 10, ...legendStyle },\n grid3D: { boxWidth: 100, boxHeight: 100, boxDepth: 100, viewControl: { autoRotate, distance: 220, alpha: 25, beta: 45 }, light: { main: { intensity: 1.2 }, ambient: { intensity: 0.4 } }, postEffect: { enable: true, bloom: { enable: true, intensity: 0.05 } } },\n xAxis3D: { type: 'value', name: 'X (km)', nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' }, axisLabel: { color: 'rgba(255, 255, 255, 0.4)' }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n yAxis3D: { type: 'value', name: 'Y (km)', nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' }, axisLabel: { color: 'rgba(255, 255, 255, 0.4)' }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n zAxis3D: { type: 'value', name: 'Z (km)', nameTextStyle: { color: 'rgba(255, 255, 255, 0.5)' }, axisLabel: { color: 'rgba(255, 255, 255, 0.4)' }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n series: seriesArray,\n };\n }, [events, primaryOrbit, showUncertainty, warningThreshold, criticalThreshold, autoRotate, tooltipStyle, legendStyle]);\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading={loading} className={className} echartsOptions={echartsOptions as any} export={exportOptions} infoTooltip={infoTooltip} />;\n }\n));\n\n// =============================================================================\n// LaunchCorridor3DChart - Launch/Reentry Visualization\n// =============================================================================\n\nexport interface LaunchCorridorData {\n corridors: Array<{ id: string; name: string; type: 'nominal' | 'abort' | 'safety' | 'exclusion'; groundFootprint: Array<{ lat: number; lon: number }>; altitudeRange: [number, number]; color?: string }>;\n trajectory?: Array<{ lat: number; lon: number; altitude: number; time?: number }>;\n events?: Array<{ name: string; lat: number; lon: number; altitude: number; time?: number }>;\n}\n\nexport interface LaunchCorridor3DChartProps extends CommonChartProps {\n data: LaunchCorridorData;\n title?: string;\n width?: number | string;\n height?: number;\n showTrajectory?: boolean;\n autoRotate?: boolean;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * LaunchCorridor3DChart - Launch/reentry corridor visualization\n * \n * USE CASES:\n * - Launch window planning\n * - Range safety corridor definition\n * - Abort trajectory visualization\n * - Reentry footprint prediction\n * - Debris fall zone analysis\n */\nexport const LaunchCorridor3DChart = memo(forwardRef<AstroChartHandle, LaunchCorridor3DChartProps>(\n function LaunchCorridor3DChart({\n data = { corridors: [] } as LaunchCorridorData, title, width = '100%', height = 550, showTrajectory = true, autoRotate = false,\n loading = false, className = '', export: exportOptions, infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const { tokens, mode } = useTheme();\n const tooltipStyle = useChartTooltipStyle();\n const labelPrimary = tokens.colors.text.primary;\n const labelSecondary = tokens.colors.text.secondary;\n const labelTertiary = tokens.colors.text.tertiary;\n const labelBg = mode === 'dark' ? 'rgba(15, 23, 42, 0.72)' : 'rgba(255, 255, 255, 0.9)';\n const legendStyle = useChartLegendStyle();\n \n const corridorColors: Record<string, string> = { nominal: 'rgba(86, 240, 0, 0.4)', abort: 'rgba(255, 179, 2, 0.4)', safety: 'rgba(34, 211, 238, 0.4)', exclusion: 'rgba(255, 56, 56, 0.4)' };\n const echartsOptions = useMemo(() => {\n const seriesArray: any[] = [];\n const latLonTo3D = (lat: number, lon: number, alt: number) => [lon, alt * 0.1, lat];\n data.corridors.forEach(corridor => {\n const color = corridor.color || corridorColors[corridor.type] || 'rgba(100, 116, 139, 0.4)';\n const lowerPath = corridor.groundFootprint.map(p => latLonTo3D(p.lat, p.lon, corridor.altitudeRange[0]));\n if (lowerPath.length > 0) lowerPath.push(lowerPath[0]);\n seriesArray.push({ type: 'line3D', name: `${corridor.name} (floor)`, coordinateSystem: 'cartesian3D', data: lowerPath, lineStyle: { color, width: 2 } });\n const upperPath = corridor.groundFootprint.map(p => latLonTo3D(p.lat, p.lon, corridor.altitudeRange[1]));\n if (upperPath.length > 0) upperPath.push(upperPath[0]);\n seriesArray.push({ type: 'line3D', name: `${corridor.name} (ceiling)`, coordinateSystem: 'cartesian3D', data: upperPath, lineStyle: { color, width: 2, type: 'dashed' } });\n });\n if (showTrajectory && data.trajectory && data.trajectory.length > 0) {\n seriesArray.push({ type: 'line3D', name: 'Trajectory', coordinateSystem: 'cartesian3D', data: data.trajectory.map(p => latLonTo3D(p.lat, p.lon, p.altitude)), lineStyle: { color: '#fff', width: 3 } });\n }\n if (data.events && data.events.length > 0) {\n seriesArray.push({ type: 'scatter3D', name: 'Events', coordinateSystem: 'cartesian3D', data: data.events.map(e => ({ name: e.name, value: latLonTo3D(e.lat, e.lon, e.altitude), itemStyle: { color: '#fce83a' }, altitude: e.altitude, time: e.time })), symbolSize: 12, symbol: 'diamond', label: { show: true, formatter: (p: any) => p.data?.name, textStyle: { color: labelPrimary, fontSize: 10, backgroundColor: labelBg, padding: [2, 4] } } });\n }\n return {\n tooltip: { show: true, ...tooltipStyle,\n formatter: ((params: any) => { const d = params.data || {}; if (params.seriesType === 'line3D') return `<div style=\"font-weight:600\">${params.seriesName}</div>`; return `<div style=\"font-weight:600;margin-bottom:4px\">${d.name}</div>${d.altitude ? `<div>Altitude: ${(d.altitude).toFixed(1)} km</div>` : ''}${d.time ? `<div>T+: ${d.time.toFixed(0)}s</div>` : ''}`; }) as unknown as string },\n legend: { show: true, top: 10, ...legendStyle },\n grid3D: { boxWidth: 150, boxHeight: 60, boxDepth: 100, viewControl: { autoRotate, distance: 280, alpha: 30, beta: 30 }, light: { main: { intensity: 1.2 }, ambient: { intensity: 0.4 } } },\n xAxis3D: { type: 'value', name: 'Longitude (°)', nameTextStyle: { color: labelSecondary }, axisLabel: { color: labelTertiary }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n yAxis3D: { type: 'value', name: 'Altitude (km)', nameTextStyle: { color: labelSecondary }, axisLabel: { color: labelTertiary }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n zAxis3D: { type: 'value', name: 'Latitude (°)', nameTextStyle: { color: labelSecondary }, axisLabel: { color: labelTertiary }, splitLine: { show: true, lineStyle: { color: 'rgba(100, 116, 139, 0.1)' } } },\n series: seriesArray,\n };\n }, [data, showTrajectory, autoRotate, corridorColors, tooltipStyle, legendStyle, labelPrimary, labelSecondary, labelTertiary, labelBg]);\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading={loading} className={className} echartsOptions={echartsOptions as any} export={exportOptions} infoTooltip={infoTooltip} />;\n }\n));\n\n// =============================================================================\n// AntennaPattern3DChart - RF/Communications Pattern Visualization\n// =============================================================================\n\nexport interface AntennaPattern3DData {\n name: string;\n pattern: Array<{ theta: number; phi: number; gain: number }>;\n boresight?: { theta: number; phi: number };\n color?: string;\n}\n\nexport interface AntennaPattern3DChartProps extends CommonChartProps {\n patterns: AntennaPattern3DData[];\n title?: string;\n width?: number | string;\n height?: number;\n showScale?: boolean;\n minGain?: number;\n autoRotate?: boolean;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * AntennaPattern3DChart - 3D antenna radiation pattern visualization\n * \n * USE CASES:\n * - Antenna gain pattern analysis\n * - Multi-beam satellite coverage\n * - Interference zone identification\n * - Link margin optimization\n * - Phased array beam steering visualization\n */\nexport const AntennaPattern3DChart = memo(forwardRef<AstroChartHandle, AntennaPattern3DChartProps>(\n function AntennaPattern3DChart({\n patterns = [], title, width = '100%', height = 500, minGain = -20, autoRotate = true,\n loading = false, className = '', export: exportOptions, infoTooltip,\n }, ref) {\n const glReady = useEchartsGlReady();\n const { tokens } = useTheme();\n const tooltipStyle = useChartTooltipStyle();\n const _labelPrimary = tokens.colors.text.primary;\n const _labelSecondary = tokens.colors.text.secondary;\n const legendStyle = useChartLegendStyle();\n \n const echartsOptions = useMemo(() => {\n const seriesArray: any[] = [];\n patterns.forEach((pattern, pIdx) => {\n const color = pattern.color || ASTRO_DATA_VIZ_COLORS.mixed[pIdx % ASTRO_DATA_VIZ_COLORS.mixed.length];\n const maxGain = Math.max(...pattern.pattern.map(p => p.gain), 0);\n const surfaceData = pattern.pattern.filter(p => p.gain >= minGain).map(p => {\n const thetaRad = (p.theta * Math.PI) / 180; const phiRad = (p.phi * Math.PI) / 180;\n const r = Math.max(0, ((p.gain - minGain) / (maxGain - minGain)) * 80 + 20);\n return { value: [r * Math.sin(thetaRad) * Math.cos(phiRad), r * Math.cos(thetaRad), r * Math.sin(thetaRad) * Math.sin(phiRad)], gain: p.gain, itemStyle: { color, opacity: 0.7 } };\n });\n seriesArray.push({ type: 'scatter3D', name: pattern.name, coordinateSystem: 'cartesian3D', data: surfaceData, symbolSize: 4 });\n if (pattern.boresight) {\n const thetaRad = (pattern.boresight.theta * Math.PI) / 180; const phiRad = (pattern.boresight.phi * Math.PI) / 180;\n seriesArray.push({ type: 'line3D', name: `${pattern.name} Boresight`, coordinateSystem: 'cartesian3D', data: [[0, 0, 0], [100 * Math.sin(thetaRad) * Math.cos(phiRad), 100 * Math.cos(thetaRad), 100 * Math.sin(thetaRad) * Math.sin(phiRad)]], lineStyle: { color: '#fff', width: 2 } });\n }\n });\n return {\n tooltip: { show: true, ...tooltipStyle,\n formatter: ((params: any) => { const d = params.data || {}; return `<div style=\"font-weight:600;margin-bottom:4px\">${params.seriesName}</div>${d.gain !== undefined ? `<div style=\"color:#22d3ee\">Gain: ${d.gain.toFixed(1)} dBi</div>` : ''}`; }) as unknown as string },\n legend: { show: patterns.length > 1, top: 10, ...legendStyle },\n grid3D: { boxWidth: 100, boxHeight: 100, boxDepth: 100, viewControl: { autoRotate, autoRotateSpeed: 3, distance: 220, alpha: 20, beta: 45 }, light: { main: { intensity: 1.2 }, ambient: { intensity: 0.5 } }, postEffect: { enable: true, bloom: { enable: true, intensity: 0.08 } } },\n xAxis3D: { type: 'value', name: 'X', min: -100, max: 100, axisLabel: { show: false }, splitLine: { show: false } },\n yAxis3D: { type: 'value', name: 'Z', min: -100, max: 100, axisLabel: { show: false }, splitLine: { show: false } },\n zAxis3D: { type: 'value', name: 'Y', min: -100, max: 100, axisLabel: { show: false }, splitLine: { show: false } },\n series: seriesArray,\n };\n }, [patterns, minGain, autoRotate, tooltipStyle, legendStyle]);\n if (!glReady) return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading className={className} />;\n return <AstroChart ref={ref} type=\"scatter\" series={[]} title={title} width={width} height={height} loading={loading} className={className} echartsOptions={echartsOptions as any} export={exportOptions} infoTooltip={infoTooltip} />;\n }\n));\n\n// =============================================================================\n// WaterfallChart - RF Spectrum Waterfall/Spectrogram Display\n// =============================================================================\n\nimport type { \n WaterfallDataPoint, \n WaterfallSignalMarker, \n DopplerTrackPoint, \n SatellitePassInfo, \n LinkMarginPoint \n} from './types';\n\nexport interface WaterfallChartProps extends CommonChartProps {\n /** Waterfall data points */\n data: WaterfallDataPoint[];\n /** Chart title */\n title?: string;\n /** Center frequency (Hz) */\n centerFrequency?: number;\n /** Bandwidth (Hz) */\n bandwidth?: number;\n /** FFT bins */\n fftBins?: number;\n /** Color map: viridis, plasma, inferno, magma */\n colorMap?: 'viridis' | 'plasma' | 'inferno' | 'magma';\n /** Power range [min, max] in dBm */\n powerRange?: [number, number];\n /** Time window in seconds */\n timeWindow?: number;\n /** Signal markers to highlight */\n markers?: WaterfallSignalMarker[];\n /** Show spectrum line above heatmap */\n showSpectrum?: boolean;\n width?: number | string;\n height?: number;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * WaterfallChart - RF spectrum waterfall/spectrogram display\n * \n * USE CASES:\n * - RF signal monitoring\n * - Interference detection\n * - Spectrum analysis\n * - Signal characterization\n */\nexport const WaterfallChart = memo(forwardRef<AstroChartHandle, WaterfallChartProps>(\n function WaterfallChart({\n data = [], title = 'RF Spectrum Waterfall', centerFrequency: _centerFrequency, bandwidth: _bandwidth, fftBins = 512, \n colorMap = 'viridis', powerRange = [-120, -60], timeWindow = 60, markers: _markers = [], \n showSpectrum: _showSpectrum = true, width = '100%', height = 400, loading = false, className = '', \n export: exportOptions, infoTooltip,\n }, ref) {\n const { tokens } = useTheme();\n const tooltipStyle = useChartTooltipStyle();\n const _labelPrimary = tokens.colors.text.primary;\n const _labelSecondary = tokens.colors.text.secondary;\n \n // Color maps for spectrum display\n const colorMaps: Record<string, string[]> = {\n viridis: ['#440154', '#482777', '#3e4989', '#31688e', '#26828e', '#1f9e89', '#35b779', '#6ece58', '#b5de2b', '#fde725'],\n plasma: ['#0d0887', '#46039f', '#7201a8', '#9c179e', '#bd3786', '#d8576b', '#ed7953', '#fb9f3a', '#fdca26', '#f0f921'],\n inferno: ['#000004', '#1b0c41', '#4a0c6b', '#781c6d', '#a52c60', '#cf4446', '#ed6925', '#fb9b06', '#f7d13d', '#fcffa4'],\n magma: ['#000004', '#180f3d', '#440f76', '#721f81', '#9e2f7f', '#cd4071', '#f1605d', '#fd9668', '#feca8d', '#fcfdbf'],\n };\n \n const echartsOptions = useMemo(() => {\n if (!data.length) return {};\n \n // Build heatmap data: [freqIndex, timeIndex, power]\n const heatmapData: [number, number, number][] = [];\n const timeLabels: string[] = [];\n const freqLabels: string[] = [];\n \n // Get frequency range from first data point\n const firstPoint = data[0];\n const freqMin = Math.min(...firstPoint.frequencies);\n const freqMax = Math.max(...firstPoint.frequencies);\n const freqStep = (freqMax - freqMin) / (fftBins - 1);\n \n // Build frequency labels\n for (let i = 0; i < fftBins; i++) {\n const freq = freqMin + i * freqStep;\n freqLabels.push((freq / 1e6).toFixed(2));\n }\n \n // Process each time slice\n data.slice(-timeWindow).forEach((point, tIdx) => {\n const time = point.time instanceof Date ? point.time : new Date(point.time);\n timeLabels.push(time.toLocaleTimeString());\n \n point.powers.forEach((power, fIdx) => {\n if (fIdx < fftBins) {\n heatmapData.push([fIdx, tIdx, power]);\n }\n });\n });\n \n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n formatter: (params: any): string => {\n if (Array.isArray(params)) return '';\n const [fIdx, tIdx, power] = params.data || [];\n const freq = freqLabels[fIdx] || 'N/A';\n const time = timeLabels[tIdx] || 'N/A';\n return `<div style=\"font-weight:600\">Spectrum</div>\n <div>Frequency: ${freq} MHz</div>\n <div>Time: ${time}</div>\n <div>Power: ${power?.toFixed(1) ?? 'N/A'} dBm</div>`;\n },\n },\n grid: { left: 60, right: 40, top: 40, bottom: 60 },\n xAxis: { type: 'category', data: freqLabels, name: 'Frequency (MHz)', nameLocation: 'middle', nameGap: 35 },\n yAxis: { type: 'category', data: timeLabels, name: 'Time', nameLocation: 'middle', nameGap: 45 },\n visualMap: {\n min: powerRange[0],\n max: powerRange[1],\n calculable: true,\n orient: 'horizontal',\n left: 'center',\n bottom: 0,\n // Enable hover linking - highlight only hovered range\n hoverLink: true,\n // Non-hovered regions get faded opacity\n outOfRange: {\n color: 'rgba(128, 128, 128, 0.12)',\n opacity: 0.15,\n },\n inRange: { color: colorMaps[colorMap] || colorMaps.viridis },\n text: [`${powerRange[1]} dBm`, `${powerRange[0]} dBm`],\n textStyle: { color: 'rgba(255, 255, 255, 0.7)' },\n },\n series: [{\n type: 'heatmap',\n data: heatmapData,\n emphasis: { itemStyle: { borderColor: '#fff', borderWidth: 1 } },\n }],\n };\n }, [data, fftBins, colorMap, powerRange, timeWindow, tooltipStyle]);\n \n return (\n <AstroChart\n ref={ref}\n type=\"heatmap\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// DopplerTrackChart - Doppler Shift Tracking Display\n// =============================================================================\n\nexport interface DopplerTrackChartProps extends CommonChartProps {\n /** Predicted Doppler track */\n predicted: DopplerTrackPoint[];\n /** Measured Doppler data (optional) */\n measured?: DopplerTrackPoint[];\n /** Carrier frequency (Hz) */\n carrierFrequency?: number;\n /** Pass info */\n passInfo?: SatellitePassInfo;\n /** Show residuals (predicted - measured) */\n showResiduals?: boolean;\n /** Show elevation overlay */\n showElevation?: boolean;\n title?: string;\n width?: number | string;\n height?: number;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * DopplerTrackChart - Doppler shift tracking visualization\n * \n * USE CASES:\n * - Satellite pass tracking\n * - Signal acquisition validation\n * - Orbit determination\n * - Tracking residual analysis\n */\nexport const DopplerTrackChart = memo(forwardRef<AstroChartHandle, DopplerTrackChartProps>(\n function DopplerTrackChart({\n predicted = [], measured = [], carrierFrequency: _carrierFrequency, passInfo, showResiduals = false, \n showElevation = true, title, width = '100%', height = 300, loading = false, \n className = '', export: exportOptions, infoTooltip,\n }, ref) {\n const tooltipStyle = useChartTooltipStyle();\n \n const chartTitle = title || (passInfo ? `Doppler Track – ${passInfo.name}` : 'Doppler Track');\n \n const echartsOptions = useMemo(() => {\n const series: any[] = [];\n \n // Predicted Doppler\n if (predicted.length > 0) {\n series.push({\n name: 'Predicted',\n type: 'line',\n data: predicted.map(p => {\n const time = p.time instanceof Date ? p.time.getTime() : p.time;\n return [time, p.dopplerShift];\n }),\n lineStyle: { color: ASTRO_DATA_VIZ_COLORS.mixed[0], width: 2 },\n symbol: 'none',\n smooth: true,\n });\n }\n \n // Measured Doppler\n if (measured.length > 0) {\n series.push({\n name: 'Measured',\n type: 'scatter',\n data: measured.map(p => {\n const time = p.time instanceof Date ? p.time.getTime() : p.time;\n return [time, p.dopplerShift];\n }),\n itemStyle: { color: ASTRO_DATA_VIZ_COLORS.mixed[2] },\n symbolSize: 4,\n });\n }\n \n // Elevation overlay\n if (showElevation && predicted.some(p => p.elevation !== undefined)) {\n series.push({\n name: 'Elevation',\n type: 'line',\n yAxisIndex: 1,\n data: predicted.filter(p => p.elevation !== undefined).map(p => {\n const time = p.time instanceof Date ? p.time.getTime() : p.time;\n return [time, p.elevation];\n }),\n lineStyle: { color: SOFT_STATUS_COLORS.normal, width: 1, type: 'dashed' },\n symbol: 'none',\n areaStyle: { color: `${STATUS_COLORS.normal}20` },\n });\n }\n \n return {\n tooltip: {\n show: true,\n trigger: 'axis',\n ...tooltipStyle,\n formatter: (params: unknown): string => {\n if (!Array.isArray(params) || params.length === 0) return '';\n const firstParam = params[0] as any;\n const time = new Date(firstParam.data[0]).toLocaleTimeString();\n let html = `<div style=\"font-weight:600;margin-bottom:4px\">${time}</div>`;\n params.forEach((p: any) => {\n const value = p.seriesName === 'Elevation' \n ? `${p.data[1]?.toFixed(1)}°` \n : `${(p.data[1] / 1000).toFixed(2)} kHz`;\n html += `<div>${p.marker} ${p.seriesName}: ${value}</div>`;\n });\n return html;\n },\n },\n legend: { show: true, top: 10 },\n grid: { left: 60, right: 60, top: 50, bottom: 40 },\n xAxis: { type: 'time', name: 'Time' },\n yAxis: [\n { type: 'value', name: 'Doppler (kHz)', axisLabel: { formatter: (v: number) => (v / 1000).toFixed(1) } },\n { type: 'value', name: 'Elevation (°)', position: 'right', min: 0, max: 90, show: showElevation },\n ],\n series,\n };\n }, [predicted, measured, showResiduals, showElevation, tooltipStyle]);\n \n return (\n <AstroChart\n ref={ref}\n type=\"line\"\n title={chartTitle}\n series={[]}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// LinkMarginChart - Link Budget Margin Analysis\n// =============================================================================\n\nexport interface LinkMarginChartProps extends CommonChartProps {\n /** Link margin data points */\n data: LinkMarginPoint[];\n /** Minimum acceptable margin (dB) */\n minMargin: number;\n /** Show uplink, downlink, or both */\n mode?: 'uplink' | 'downlink' | 'both';\n /** Show rain fade overlay */\n showRainFade?: boolean;\n title?: string;\n width?: number | string;\n height?: number;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * LinkMarginChart - Link budget margin visualization\n * \n * USE CASES:\n * - Link budget analysis\n * - Fade margin planning\n * - Antenna sizing decisions\n * - Coverage boundary analysis\n */\nexport const LinkMarginChart = memo(forwardRef<AstroChartHandle, LinkMarginChartProps>(\n function LinkMarginChart({\n data = [], minMargin, mode = 'both', showRainFade: _showRainFade = false, title = 'Link Margin vs Elevation',\n width = '100%', height = 250, loading = false, className = '', export: exportOptions, infoTooltip,\n }, ref) {\n const series: SeriesData[] = [];\n \n if ((mode === 'uplink' || mode === 'both') && data.some(d => d.uplinkMargin !== undefined)) {\n series.push({\n id: 'uplink',\n name: 'Uplink Margin',\n data: data.filter(d => d.uplinkMargin !== undefined).map(d => ({ x: d.elevation, y: d.uplinkMargin! })),\n color: ASTRO_DATA_VIZ_COLORS.mixed[0],\n });\n }\n \n if ((mode === 'downlink' || mode === 'both') && data.some(d => d.downlinkMargin !== undefined)) {\n series.push({\n id: 'downlink',\n name: 'Downlink Margin',\n data: data.filter(d => d.downlinkMargin !== undefined).map(d => ({ x: d.elevation, y: d.downlinkMargin! })),\n color: ASTRO_DATA_VIZ_COLORS.mixed[2],\n });\n }\n \n const annotations: AnnotationOptions = {\n markLines: {\n data: [{\n yAxis: minMargin,\n label: `Min Margin (${minMargin} dB)`,\n color: SOFT_STATUS_COLORS.caution,\n lineStyle: { type: 'dashed' },\n }],\n },\n markAreas: {\n data: [[\n { yAxis: 0, name: 'Insufficient Margin' },\n { yAxis: minMargin },\n ]],\n itemStyle: { color: `${STATUS_COLORS.critical}15` },\n },\n };\n \n return (\n <AstroChart\n ref={ref}\n type=\"line\"\n title={title}\n series={series}\n width={width}\n height={height}\n loading={loading}\n className={className}\n xAxis={{ type: 'value', name: 'Elevation (°)', min: 0, max: 90 }}\n yAxis={{ type: 'value', name: 'Margin (dB)' }}\n tooltip={{ trigger: 'axis', crosshair: 'x' }}\n legend={{ show: mode === 'both', position: 'bottom' }}\n annotations={annotations}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// ConstellationCoverageChart - Global Coverage Heatmap\n// =============================================================================\n\nexport interface ConstellationCoverageChartProps extends CommonChartProps {\n /** Coverage grid data (lat × lon) */\n data: CoverageGridData;\n /** Chart title */\n title?: string;\n /** Coverage metric label */\n metricLabel?: string;\n /** Coverage metric unit */\n metricUnit?: string;\n /** Color map: viridis, jet, plasma, thermal */\n colorMap?: 'viridis' | 'jet' | 'plasma' | 'thermal';\n /** Value range [min, max] */\n valueRange?: [number, number];\n /** Show satellite positions */\n satellites?: Array<{ name: string; lat: number; lon: number; color?: string }>;\n /** Show ground stations */\n groundStations?: Array<{ name: string; lat: number; lon: number }>;\n width?: number | string;\n height?: number;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * ConstellationCoverageChart - Global constellation coverage visualization\n * \n * USE CASES:\n * - Revisit time analysis\n * - Coverage gap identification\n * - Link budget mapping\n * - Latency analysis for LEO constellations\n * - Service availability assessment\n */\nexport const ConstellationCoverageChart = memo(forwardRef<AstroChartHandle, ConstellationCoverageChartProps>(\n function ConstellationCoverageChart({\n data = { coverage: [], latitudes: [], longitudes: [] }, title = 'Constellation Coverage', metricLabel = 'Coverage', metricUnit = '%',\n colorMap = 'viridis', valueRange, satellites = [], groundStations = [],\n width = '100%', height = 400, loading = false, className = '',\n export: exportOptions, infoTooltip,\n }, ref) {\n const { tokens } = useTheme();\n const tooltipStyle = useChartTooltipStyle();\n const labelPrimary = tokens.colors.text.primary;\n const labelSecondary = tokens.colors.text.secondary;\n \n const colorMaps: Record<string, string[]> = {\n viridis: ['#440154', '#482777', '#3e4989', '#31688e', '#26828e', '#1f9e89', '#35b779', '#6ece58', '#b5de2b', '#fde725'],\n jet: ['#00007f', '#0000ff', '#007fff', '#00ffff', '#7fff7f', '#ffff00', '#ff7f00', '#ff0000', '#7f0000'],\n plasma: ['#0d0887', '#46039f', '#7201a8', '#9c179e', '#bd3786', '#d8576b', '#ed7953', '#fb9f3a', '#fdca26', '#f0f921'],\n thermal: ['#000000', '#1a0a2e', '#3d1551', '#6b1d6a', '#a12568', '#d3405c', '#eb6841', '#f5a623', '#f7dc6f', '#ffffff'],\n };\n \n const echartsOptions = useMemo(() => {\n if (!data.coverage.length || !data.latitudes.length || !data.longitudes.length) return {};\n \n // Build heatmap data: [lonIdx, latIdx, value]\n const heatmapData: [number, number, number][] = [];\n let minVal = Infinity;\n let maxVal = -Infinity;\n \n data.latitudes.forEach((_, latIdx) => {\n data.longitudes.forEach((_, lonIdx) => {\n const val = data.coverage[latIdx]?.[lonIdx] ?? 0;\n heatmapData.push([lonIdx, latIdx, val]);\n if (val < minVal) minVal = val;\n if (val > maxVal) maxVal = val;\n });\n });\n \n const range = valueRange || [minVal, maxVal];\n \n const lonLabels = data.longitudes.map(v => `${v.toFixed(0)}°`);\n const latLabels = data.latitudes.map(v => `${v.toFixed(0)}°`);\n \n const seriesArray: any[] = [\n {\n type: 'heatmap',\n data: heatmapData,\n emphasis: { itemStyle: { borderColor: '#fff', borderWidth: 1 } },\n progressive: 5000,\n },\n ];\n \n // Overlay satellite positions as scatter\n if (satellites.length > 0) {\n seriesArray.push({\n type: 'scatter',\n name: 'Satellites',\n coordinateSystem: 'cartesian2d',\n data: satellites.map(sat => {\n const lonIdx = data.longitudes.findIndex(v => Math.abs(v - sat.lon) < (data.longitudes[1] - data.longitudes[0]));\n const latIdx = data.latitudes.findIndex(v => Math.abs(v - sat.lat) < (data.latitudes[1] - data.latitudes[0]));\n return { value: [lonIdx >= 0 ? lonIdx : 0, latIdx >= 0 ? latIdx : 0], name: sat.name, itemStyle: { color: sat.color || '#fff' } };\n }),\n symbolSize: 8,\n symbol: 'triangle',\n z: 10,\n label: { show: true, formatter: (p: any) => p.data?.name || '', position: 'top', color: labelPrimary, fontSize: 9 },\n });\n }\n \n // Overlay ground stations\n if (groundStations.length > 0) {\n seriesArray.push({\n type: 'scatter',\n name: 'Ground Stations',\n coordinateSystem: 'cartesian2d',\n data: groundStations.map(gs => {\n const lonIdx = data.longitudes.findIndex(v => Math.abs(v - gs.lon) < (data.longitudes[1] - data.longitudes[0]));\n const latIdx = data.latitudes.findIndex(v => Math.abs(v - gs.lat) < (data.latitudes[1] - data.latitudes[0]));\n return { value: [lonIdx >= 0 ? lonIdx : 0, latIdx >= 0 ? latIdx : 0], name: gs.name };\n }),\n symbolSize: 10,\n symbol: 'diamond',\n itemStyle: { color: ASTRO_DATA_VIZ_COLORS.mixed[2] },\n z: 10,\n label: { show: true, formatter: (p: any) => p.data?.name || '', position: 'bottom', color: labelSecondary, fontSize: 9 },\n });\n }\n \n return {\n tooltip: {\n show: true,\n ...tooltipStyle,\n formatter: (params: any): string => {\n if (Array.isArray(params)) return '';\n const d = params.data;\n if (params.seriesType === 'scatter') return `<div style=\"font-weight:600\">${d?.name || ''}</div>`;\n const [lonIdx, latIdx, val] = d || [];\n const lon = data.longitudes[lonIdx] ?? 'N/A';\n const lat = data.latitudes[latIdx] ?? 'N/A';\n return `<div style=\"font-weight:600\">${metricLabel}</div>\n <div>Lat: ${typeof lat === 'number' ? lat.toFixed(1) : lat}°</div>\n <div>Lon: ${typeof lon === 'number' ? lon.toFixed(1) : lon}°</div>\n <div>${metricLabel}: ${val?.toFixed(1) ?? 'N/A'} ${metricUnit}</div>`;\n },\n },\n grid: { left: 60, right: 50, top: 40, bottom: 80 },\n xAxis: { type: 'category', data: lonLabels, name: 'Longitude', nameLocation: 'middle', nameGap: 30, axisLabel: { interval: Math.floor(lonLabels.length / 12) } },\n yAxis: { type: 'category', data: latLabels, name: 'Latitude', nameLocation: 'middle', nameGap: 40, axisLabel: { interval: Math.floor(latLabels.length / 6) } },\n visualMap: {\n min: range[0],\n max: range[1],\n calculable: true,\n orient: 'horizontal',\n left: 'center',\n bottom: 0,\n hoverLink: true,\n outOfRange: { color: 'rgba(128, 128, 128, 0.12)', opacity: 0.15 },\n inRange: { color: colorMaps[colorMap] || colorMaps.viridis },\n text: [`${range[1]} ${metricUnit}`, `${range[0]} ${metricUnit}`],\n textStyle: { color: labelSecondary },\n },\n series: seriesArray,\n };\n }, [data, satellites, groundStations, colorMap, valueRange, metricLabel, metricUnit, tooltipStyle, labelPrimary, labelSecondary]);\n \n return (\n <AstroChart\n ref={ref}\n type=\"heatmap\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n\n// =============================================================================\n// ConjunctionChart - 2D Close Approach Assessment\n// =============================================================================\n\nexport interface ConjunctionChartProps extends CommonChartProps {\n /** Conjunction events */\n events: ConjunctionEvent[];\n /** Time range [start, end] in ms */\n timeRange?: [number, number];\n /** Miss distance threshold for warning (km) */\n warningThreshold?: number;\n /** Miss distance threshold for critical (km) */\n criticalThreshold?: number;\n /** Minimum probability to display */\n minProbability?: number;\n /** Show probability on secondary axis */\n showProbability?: boolean;\n title?: string;\n width?: number | string;\n height?: number;\n loading?: boolean;\n className?: string;\n}\n\n/**\n * ConjunctionChart - 2D conjunction/collision assessment timeline\n * \n * USE CASES:\n * - Conjunction screening timeline\n * - Collision avoidance decision support\n * - Debris close approach history\n * - Maneuver planning trigger assessment\n */\nexport const ConjunctionChart = memo(forwardRef<AstroChartHandle, ConjunctionChartProps>(\n function ConjunctionChart({\n events = [], timeRange, warningThreshold = 5, criticalThreshold = 1,\n minProbability: _minProbability, showProbability = true,\n title = 'Conjunction Assessment', width = '100%', height = 350,\n loading = false, className = '', export: exportOptions, infoTooltip,\n }, ref) {\n const tooltipStyle = useChartTooltipStyle();\n \n const echartsOptions = useMemo(() => {\n if (!events.length) return {};\n \n // Sort by TCA\n const sorted = [...events].sort((a, b) => a.tca - b.tca);\n \n // Miss distance scatter\n const missData = sorted.map(evt => {\n const color = evt.missDistance < criticalThreshold ? STATUS_COLORS.critical\n : evt.missDistance < warningThreshold ? STATUS_COLORS.caution\n : STATUS_COLORS.normal;\n return {\n value: [evt.tca, evt.missDistance],\n itemStyle: { color },\n symbolSize: Math.max(6, Math.min(20, 22 - evt.missDistance * 2)),\n ...evt,\n };\n });\n \n const seriesArray: any[] = [\n {\n name: 'Miss Distance',\n type: 'scatter',\n data: missData,\n symbolSize: (val: any) => val.symbolSize || 10,\n z: 10,\n },\n ];\n \n // Probability bars on secondary axis\n if (showProbability && sorted.some(e => e.probability !== undefined)) {\n seriesArray.push({\n name: 'Probability (Pc)',\n type: 'bar',\n yAxisIndex: 1,\n data: sorted.map(evt => ({\n value: [evt.tca, evt.probability ?? 0],\n itemStyle: {\n color: (evt.probability ?? 0) > 1e-4 ? `${STATUS_COLORS.critical}99`\n : (evt.probability ?? 0) > 1e-6 ? `${STATUS_COLORS.caution}99`\n : `${STATUS_COLORS.normal}60`,\n },\n })),\n barWidth: 8,\n z: 5,\n });\n }\n \n return {\n tooltip: {\n show: true,\n trigger: 'item',\n ...tooltipStyle,\n formatter: (params: any): string => {\n const d = params.data || {};\n if (params.seriesName === 'Probability (Pc)') {\n return `<div>Pc: ${(d.value?.[1] ?? 0).toExponential(2)}</div>`;\n }\n const mdColor = d.missDistance < criticalThreshold ? STATUS_COLORS.critical\n : d.missDistance < warningThreshold ? STATUS_COLORS.caution\n : STATUS_COLORS.normal;\n const tca = new Date(d.value?.[0] ?? d.tca);\n return `<div style=\"font-weight:600;margin-bottom:4px\">${d.primary} × ${d.secondary}</div>\n <div>TCA: ${tca.toLocaleString()}</div>\n <div style=\"color:${mdColor}\">Miss Distance: ${d.missDistance?.toFixed(3)} km</div>\n ${d.probability !== undefined ? `<div>Pc: ${(d.probability * 100).toExponential(2)}%</div>` : ''}\n ${d.relativeVelocity ? `<div>Rel. Velocity: ${d.relativeVelocity.toFixed(2)} km/s</div>` : ''}`;\n },\n },\n legend: { show: showProbability, top: 10 },\n grid: { left: 60, right: showProbability ? 80 : 40, top: 50, bottom: 40 },\n xAxis: {\n type: 'time',\n name: 'Time of Closest Approach',\n ...(timeRange ? { min: timeRange[0], max: timeRange[1] } : {}),\n },\n yAxis: [\n {\n type: 'value',\n name: 'Miss Distance (km)',\n min: 0,\n splitLine: { lineStyle: { color: 'rgba(100, 116, 139, 0.15)' } },\n },\n {\n type: 'log',\n name: showProbability ? 'Probability' : undefined,\n position: 'right',\n show: showProbability,\n min: 1e-10,\n max: 1,\n axisLabel: { formatter: (v: number) => v.toExponential(0) },\n splitLine: { show: false },\n },\n ],\n // Threshold marklines\n series: seriesArray.map((s, i) => ({\n ...s,\n ...(i === 0 ? {\n markLine: {\n silent: true,\n data: [\n { yAxis: criticalThreshold, label: { formatter: `Critical (${criticalThreshold} km)`, color: STATUS_COLORS.critical }, lineStyle: { color: SOFT_STATUS_COLORS.critical, type: 'dashed', width: 1 } },\n { yAxis: warningThreshold, label: { formatter: `Warning (${warningThreshold} km)`, color: STATUS_COLORS.caution }, lineStyle: { color: SOFT_STATUS_COLORS.caution, type: 'dashed', width: 1 } },\n ],\n },\n markArea: {\n silent: true,\n data: [[{ yAxis: 0 }, { yAxis: criticalThreshold }]],\n itemStyle: { color: `${STATUS_COLORS.critical}10` },\n },\n } : {}),\n })),\n };\n }, [events, timeRange, warningThreshold, criticalThreshold, showProbability, tooltipStyle]);\n \n return (\n <AstroChart\n ref={ref}\n type=\"scatter\"\n series={[]}\n title={title}\n width={width}\n height={height}\n loading={loading}\n className={className}\n echartsOptions={echartsOptions as any}\n export={exportOptions}\n infoTooltip={infoTooltip}\n />\n );\n }\n));\n"],"names":["PowerChart","AttitudeChart","ThermalHeatmapChart","timeLabels","LinkBudgetChart","SubsystemGauge","OrbitChart","ContactWindowChart","height","SpectrumChart","ManeuverBudgetChart","EclipseTimelineChart","RoseDiagram","HeliocentricOrbitPlot","Scatter3DChart","Bar3DChart","Surface3DChart","Lines3DChart","SphericalRadar3DChart","TransferOrbit3DChart","AttitudeHistory3DChart","ConjunctionAssessment3DChart","LaunchCorridor3DChart","AntennaPattern3DChart","WaterfallChart","DopplerTrackChart","LinkMarginChart","ConstellationCoverageChart","_","ConjunctionChart"],"mappings":";;;;;AA2BA,IAAI,kBAAkB;AACtB,IAAI,oBAA6C;AAEjD,SAAS,iBAAmC;AAC1C,MAAI,CAAC,mBAAmB;AACtB,wBAAoB,OAAO,YAAsB,EAC9C,KAAK,MAAM;AAAE,wBAAkB;AAAM,aAAO;AAAA,IAAM,CAAC,EACnD,MAAM,CAAC,QAAQ;AACd,cAAQ,KAAK,sEAAsE,GAAG;AACtF,aAAO;AAAA,IACT,CAAC;AAAA,EACL;AACA,SAAO;AACT;AAGA,eAAA;AAGA,SAAS,oBAA6B;AACpC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,eAAe;AAClD,YAAU,MAAM;AACd,QAAI,CAAC,iBAAiB;AACpB,qBAAA,EAAiB,KAAK,CAAC,OAAO;AAAE,YAAI,aAAa,IAAI;AAAA,MAAG,CAAC;AAAA,IAC3D;AAAA,EACF,GAAG,CAAA,CAAE;AACL,SAAO;AACT;AA6BA,MAAM,qBAAqB;AAAA,EACzB,QAAQ;AAAA,EACR,SAAS;AAAA,EAET,UAAU;AAAA,EAEV,SAAS;AACX;AAUA,SAAS,uBAAuB;AAC9B,QAAM,EAAE,QAAQ,KAAA,IAAS,SAAA;AACzB,QAAM,SAAS,SAAS;AAExB,SAAO;AAAA,IACL,iBAAiB,SAAS,2BAA2B;AAAA,IACrD,aAAa,SAAS,6BAA6B;AAAA,IACnD,WAAW;AAAA,MACT,OAAO,OAAO,OAAO,KAAK;AAAA,MAC1B,UAAU;AAAA,IAAA;AAAA,EACZ;AAEJ;AAKA,SAAS,sBAAsB;AAC7B,QAAM,EAAE,OAAA,IAAW,SAAA;AACnB,SAAO;AAAA,IACL,WAAW;AAAA,MACT,OAAO,OAAO,OAAO,KAAK;AAAA,IAAA;AAAA,EAC5B;AAEJ;AAMA,SAAS,yBAAyB;AAChC,QAAM,EAAE,OAAA,IAAW,SAAA;AACnB,SAAO;AAAA,IACL,WAAW;AAAA,MACT,OAAO,OAAO,OAAO,KAAK;AAAA,IAAA;AAAA;AAAA,IAG5B,YAAY;AAAA;AAAA,IAEZ,WAAW;AAAA;AAAA,IAEX,YAAY;AAAA,MACV,OAAO;AAAA;AAAA,MACP,SAAS;AAAA;AAAA,IAAA;AAAA;AAAA,IAGX,aAAa;AAAA,MACX,aAAa,OAAO,OAAO,OAAO;AAAA,MAClC,OAAO,OAAO,OAAO,OAAO;AAAA,IAAA;AAAA;AAAA,IAG9B,gBAAgB;AAAA,MACd,aAAa;AAAA,IAAA;AAAA;AAAA,IAGf,UAAU;AAAA,EAAA;AAEd;AA2BO,MAAM,aAAa,KAAK;AAAA,EAC7B,SAASA,YAAW;AAAA,IAClB,OAAO,CAAA;AAAA,IACP,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,cAAc;AAAA,IACd,UAAU;AAAA,IACV,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GACC,KAAK;AAEN,UAAM,EAAE,QAAQ,YAAA,IAAgB,QAAQ,MAAM;AAC5C,YAAM,cAA0B;AAAA,QAC9B,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM,KAAK,IAAI,CAAA,OAAM,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,WAAA,EAAa;AAAA,QACpD,OAAO,mBAAmB;AAAA;AAAA,QAC1B,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ,EAAE,MAAM,OAAA;AAAA,MAAO;AAGzB,YAAM,gBAA4B;AAAA,QAChC,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM,KAAK,IAAI,CAAA,OAAM,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,eAAA,EAAiB;AAAA,QACxD,OAAO,mBAAmB;AAAA;AAAA,QAC1B,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ,EAAE,MAAM,OAAA;AAAA,MAAO;AAGzB,YAAM,iBAA6B;AAAA,QACjC,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM,KAAK,IAAI,CAAA,OAAM,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,SAAA,EAAW;AAAA,QAClD,OAAO,oBAAoB;AAAA;AAAA,QAC3B,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ,EAAE,MAAM,OAAA;AAAA,MAAO;AAGzB,YAAM,oBAAgC;AAAA,QACpC,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM,KAAK,IAAI,CAAA,OAAM,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,YAAA,EAAc;AAAA,QACrD,OAAO,mBAAmB;AAAA;AAAA,QAC1B,YAAY;AAAA,QACZ,WAAW,EAAE,MAAM,UAAU,OAAO,IAAA;AAAA,QACpC,QAAQ;AAAA,QACR,QAAQ,EAAE,MAAM,OAAA;AAAA,MAAO;AAIzB,YAAM,eAA+C,EAAE,MAAM,GAAC;AAC9D,UAAI,aAAa;AACf,YAAI,YAAY;AAChB,YAAI,eAAe;AAEnB,aAAK,QAAQ,CAAC,GAAG,OAAO;AACtB,cAAI,EAAE,WAAW,CAAC,WAAW;AAC3B,wBAAY;AACZ,2BAAe,EAAE;AAAA,UACnB,WAAW,CAAC,EAAE,WAAW,WAAW;AAClC,wBAAY;AACZ,yBAAa,KAAK,KAAK;AAAA,cACrB,EAAE,OAAO,cAAc,MAAM,UAAA;AAAA,cAC7B,EAAE,OAAO,EAAE,KAAA;AAAA,YAAK,CACjB;AAAA,UACH;AAAA,QACF,CAAC;AAGD,YAAI,aAAa,KAAK,SAAS,GAAG;AAChC,uBAAa,KAAK,KAAK;AAAA,YACrB,EAAE,OAAO,cAAc,MAAM,UAAA;AAAA,YAC7B,EAAE,OAAO,KAAK,KAAK,SAAS,CAAC,EAAE,KAAA;AAAA,UAAK,CACrC;AAAA,QACH;AAEA,qBAAa,YAAY;AAAA,UACvB,OAAO,GAAG,cAAc,QAAQ;AAAA,QAAA;AAAA,MAEpC;AAEA,aAAO;AAAA,QACL,QAAQ,CAAC,aAAa,eAAe,gBAAgB,iBAAiB;AAAA,QACtE,aAAa,eAAe,aAAa,KAAK,SAAS,IACnD,EAAE,WAAW,iBACb;AAAA,MAAA;AAAA,IAER,GAAG,CAAC,MAAM,WAAW,CAAC;AAEtB,UAAM,gBAAgB,QAAQ,OAAO;AAAA,MACnC,SAAS;AAAA,MACT,WAAW;AAAA,MACX,WAAW,CAAC,WAAoB;;AAC9B,cAAM,IAAI,MAAM,QAAQ,MAAM,IAAI,SAAS,CAAA;AAC3C,YAAI,EAAE,WAAW,EAAG,QAAO;AAC3B,cAAM,UAAW,EAAE,CAAC,EAA+C,aAAc,EAAE,CAAC,EAA0B;AAC9G,cAAM,OAAO,OAAO,YAAY,WAAW,UAAW,mBAAmB,OAAO,QAAQ,YAAY,OAAO,OAAO;AAClH,cAAM,cAAY,gDAAa,cAAb,mBAAwB,QACtC,YAAY,UAAU,KAAK;AAAA,UACzB,CAAC,SAAS;AACR,kBAAM,QAAS,KAAK,CAAC,EAAE,SAAoB;AAC3C,kBAAM,MAAO,KAAK,CAAC,EAAE,SAAoB;AACzC,mBAAO,QAAQ,SAAS,QAAQ;AAAA,UAClC;AAAA,QAAA,IAEF;AACJ,cAAM,QAAQ,EAAE;AAAA,UAAI,CAAC,SACnB,GAAG,KAAK,UAAU,EAAE,IAAI,KAAK,cAAc,EAAE,KAAK,KAAK,SAAS,EAAE;AAAA,QAAA;AAEpE,YAAI,UAAW,OAAM,KAAK,oDAAoD;AAC9E,eAAO,MAAM,KAAK,OAAO;AAAA,MAC3B;AAAA,IAAA,IACE,CAAC,WAAW,CAAC;AAEjB,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,EAAE,MAAM,QAAQ,MAAM,GAAA;AAAA,QAC7B,OAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,UAAU;AAAA,YACV,KAAK;AAAA,UAAA;AAAA,UAEP;AAAA,YACE,MAAM;AAAA,YACN,UAAU;AAAA,YACV,KAAK;AAAA,YACL,KAAK;AAAA,UAAA;AAAA,QACP;AAAA,QAEF,SAAS;AAAA,QACT,QAAQ,EAAE,MAAM,YAAY,UAAU,SAAA;AAAA,QACtC,MAAM,aAAa,EAAE,SAAS,MAAM,MAAM,UAAU,MAAM,IAAA,IAAQ;AAAA,QAClE;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AA6BM,MAAM,gBAAgB,KAAK;AAAA,EAChC,SAASC,eAAc;AAAA,IACrB,OAAO,CAAA;AAAA,IACP,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,sBAAsB;AAAA,IACtB,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,GACC,KAAK;AAEN,UAAM,SAAS,QAAQ,MAAM;AAC3B,YAAM,SAAuB;AAAA,QAC3B;AAAA,UACE,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM,KAAK,IAAI,CAAA,OAAM,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,KAAA,EAAO;AAAA,UAC9C,OAAO,mBAAmB;AAAA;AAAA,UAC1B,QAAQ;AAAA,UACR,QAAQ,EAAE,MAAM,OAAA;AAAA,QAAO;AAAA,QAEzB;AAAA,UACE,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM,KAAK,IAAI,CAAA,OAAM,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,MAAA,EAAQ;AAAA,UAC/C,OAAO,mBAAmB;AAAA;AAAA,UAC1B,QAAQ;AAAA,UACR,QAAQ,EAAE,MAAM,OAAA;AAAA,QAAO;AAAA,QAEzB;AAAA,UACE,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM,KAAK,IAAI,CAAA,OAAM,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,IAAA,EAAM;AAAA,UAC7C,OAAO,oBAAoB;AAAA;AAAA,UAC3B,QAAQ;AAAA,UACR,QAAQ,EAAE,MAAM,OAAA;AAAA,QAAO;AAAA,MACzB;AAGF,UAAI,aAAa,KAAK,KAAK,OAAK,EAAE,kBAAkB,MAAS,GAAG;AAC9D,eAAO,KAAK;AAAA,UACV,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM,KACH,OAAO,CAAA,MAAK,EAAE,kBAAkB,MAAS,EACzC,IAAI,CAAA,OAAM,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,gBAAiB;AAAA,UAChD,OAAO,mBAAmB;AAAA;AAAA,UAC1B,QAAQ;AAAA,UACR,QAAQ,EAAE,MAAM,OAAA;AAAA,UAChB,WAAW,EAAE,OAAO,IAAA;AAAA,QAAI,CACzB;AAAA,MACH;AAEA,UAAI,uBAAuB,KAAK,KAAK,OAAK,EAAE,oBAAoB,MAAS,GAAG;AAC1E,eAAO,KAAK;AAAA,UACV,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM,KACH,OAAO,CAAA,MAAK,EAAE,oBAAoB,MAAS,EAC3C,IAAI,CAAA,OAAM,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,kBAAmB;AAAA,UAClD,OAAO,oBAAoB;AAAA;AAAA,UAC3B,QAAQ;AAAA,UACR,QAAQ,EAAE,MAAM,OAAA;AAAA,UAChB,WAAW,EAAE,MAAM,UAAU,OAAO,EAAA;AAAA,QAAE,CACvC;AAAA,MACH;AAEA,aAAO;AAAA,IACT,GAAG,CAAC,MAAM,WAAW,mBAAmB,CAAC;AAEzC,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,EAAE,MAAM,QAAQ,MAAM,GAAA;AAAA,QAC7B,OAAO;AAAA,UACL,MAAM;AAAA;AAAA,QAAA;AAAA,QAGR,SAAS,EAAE,SAAS,QAAQ,WAAW,IAAA;AAAA,QACvC,QAAQ,EAAE,MAAM,YAAY,UAAU,SAAA;AAAA,QACtC,MAAM,aAAa,EAAE,SAAS,MAAM,MAAM,UAAU,MAAM,IAAA,IAAQ;AAAA,QAClE,aAAa;AAAA,UACX,WAAW;AAAA,YACT,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,IAAI,WAAW,EAAE,MAAM,SAAS,OAAO,EAAA,GAAK;AAAA,UAAA;AAAA,QACxE;AAAA,QAEF,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AAyBM,MAAM,sBAAsB,KAAK;AAAA,EACtC,SAASC,qBAAoB;AAAA,IAC3B,OAAO,CAAA;AAAA,IACP,QAAQ,CAAA;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ,CAAC,KAAK,EAAE;AAAA,IAChB,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA,EAAA,GACC,KAAK;AAEN,UAAM,EAAE,QAAQ,WAAA,IAAe,QAAQ,MAAM;AAC3C,YAAMC,cAAa,KAAK;AAAA,QAAI,CAAA,MAC1B,IAAI,KAAK,EAAE,IAAI,EAAE,mBAAmB,IAAI;AAAA,UACtC,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,QAAQ;AAAA,QAAA,CACT;AAAA,MAAA;AAIH,YAAM,cAA0C,CAAA;AAChD,WAAK,QAAQ,CAAC,GAAG,YAAY;AAC3B,cAAM,QAAQ,CAAC,MAAM,YAAY;AAC/B,gBAAM,OAAO,EAAE,MAAM,IAAI,KAAK;AAC9B,sBAAY,KAAK,CAAC,SAAS,SAAS,IAAI,CAAC;AAAA,QAC3C,CAAC;AAAA,MACH,CAAC;AAED,aAAO;AAAA,QACL,QAAQ,CAAC;AAAA,UACP,IAAI;AAAA,UACJ,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,QAAA,CACP;AAAA,QACD,YAAAA;AAAAA,MAAA;AAAA,IAEJ,GAAG,CAAC,MAAM,KAAK,CAAC;AAEhB,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,EAAE,MAAM,WAAA;AAAA,QACf,OAAO,EAAE,MAAM,WAAA;AAAA,QACf,SAAS,EAAE,SAAS,OAAA;AAAA,QACpB,gBAAgB;AAAA,UACd,OAAO,EAAE,MAAM,WAAA;AAAA,UACf,OAAO,EAAE,MAAM,MAAA;AAAA,UACf,WAAW;AAAA,YACT,KAAK,MAAM,CAAC;AAAA,YACZ,KAAK,MAAM,CAAC;AAAA,YACZ,YAAY;AAAA,YACZ,QAAQ;AAAA,YACR,OAAO;AAAA,YACP,KAAK;AAAA;AAAA,YAEL,WAAW;AAAA;AAAA,YAEX,YAAY;AAAA,cACV,OAAO;AAAA,cACP,SAAS;AAAA,YAAA;AAAA;AAAA;AAAA,YAIX,SAAS;AAAA,cACP,OAAO;AAAA,gBACL;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,gBACA;AAAA;AAAA,cAAA;AAAA,YACF;AAAA,UACF;AAAA,UAEF,QAAQ,CAAC;AAAA,YACP,MAAM;AAAA,YACN,MAAM,OAAO,CAAC,EAAE;AAAA,YAChB,OAAO,EAAE,MAAM,MAAM,WAAW,CAAC,MAA2B,MAAM,QAAQ,EAAE,KAAK,KAAK,OAAO,EAAE,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,MAAM,CAAC,CAAC,MAAM,GAAA;AAAA,YAC1I,UAAU;AAAA,cACR,WAAW;AAAA,gBACT,YAAY;AAAA,gBACZ,aAAa;AAAA,cAAA;AAAA,YACf;AAAA,UACF,CACD;AAAA,QAAA;AAAA,QAEH,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AAyBM,MAAM,kBAAkB,KAAK;AAAA,EAClC,SAASC,iBAAgB;AAAA,IACvB,OAAO,CAAA;AAAA,IACP,QAAQ;AAAA,IACR,aAAa;AAAA,IACb,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,kBAAkB;AAAA,IAClB,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA,EAAA,GACC,KAAK;AACN,UAAM,SAAS,QAAQ,MAAoB;AAAA,MACzC;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM,KAAK,IAAI,CAAA,OAAM,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,eAAA,EAAiB;AAAA,QACxD,OAAO,mBAAmB;AAAA,QAC1B,QAAQ;AAAA,QACR,QAAQ,EAAE,MAAM,OAAA;AAAA,QAChB,WAAW,EAAE,SAAS,IAAA;AAAA,MAAI;AAAA,MAE5B;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM,KAAK,IAAI,CAAA,OAAM,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,WAAA,EAAa;AAAA,QACpD,OAAO,mBAAmB;AAAA,QAC1B,QAAQ;AAAA,QACR,QAAQ,EAAE,MAAM,OAAA;AAAA,QAChB,WAAW,EAAE,MAAM,UAAU,OAAO,EAAA;AAAA,MAAE;AAAA,MAExC;AAAA,QACE,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM,KAAK,IAAI,CAAA,OAAM,EAAE,GAAG,EAAE,MAAM,GAAG,EAAE,OAAA,EAAS;AAAA,QAChD,OAAO,mBAAmB;AAAA,QAC1B,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,QAAQ,EAAE,MAAM,OAAA;AAAA,MAAO;AAAA,IACzB,GACC,CAAC,IAAI,CAAC;AAET,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,EAAE,MAAM,OAAA;AAAA,QACf,OAAO;AAAA,UACL,EAAE,MAAM,OAAO,UAAU,OAAA;AAAA,UACzB,EAAE,MAAM,eAAe,UAAU,SAAS,KAAK,EAAA;AAAA,QAAE;AAAA,QAEnD,SAAS,EAAE,SAAS,QAAQ,WAAW,IAAA;AAAA,QACvC,QAAQ,EAAE,MAAM,YAAY,UAAU,SAAA;AAAA,QACtC,aAAa;AAAA,UACX,WAAW;AAAA,YACT,MAAM;AAAA,cACJ;AAAA,gBACE,OAAO;AAAA,gBACP,OAAO,eAAe,eAAe;AAAA,gBACrC,OAAO,mBAAmB;AAAA,gBAC1B,WAAW,EAAE,MAAM,SAAA;AAAA,cAAS;AAAA,YAC9B;AAAA,UACF;AAAA,QACF;AAAA,QAEF,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AA4BM,MAAM,iBAAiB,KAAK;AAAA,EACjC,SAASC,gBAAe;AAAA,IACtB;AAAA,IACA;AAAA,IACA,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAa,EAAE,SAAS,IAAI,UAAU,GAAA;AAAA,IACtC,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA,EAAA,GACC,KAAK;AACN,UAAM,eAAe,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,CAAC;AACrD,UAAM,UAAU,OAAO,UAAU,WAAW,QAAQ;AACpD,UAAM,YAAY,KAAK,IAAI,KAAK,KAAK,IAAI,SAAS,MAAM,CAAC;AACzD,UAAM,WAAW,KAAK,IAAI,GAAG,KAAK,MAAM,YAAY,KAAK,CAAC;AAC1D,UAAM,gBAAgB,KAAK,IAAI,IAAI,KAAK,MAAM,YAAY,IAAI,CAAC;AAC/D,UAAM,gBAAgB,KAAK,IAAI,IAAI,KAAK,MAAM,YAAY,KAAK,CAAC;AAChE,UAAM,eAAe,YAAY;AACjC,UAAM,UAAU,eAAe,QAAQ;AACvC,UAAM,UAAU,eAAe,QAAQ;AACvC,UAAM,SAAS,eAAe,QAAQ;AACtC,UAAM,cAAa,6BAAM,WAAU;AACnC,UAAM,WAAW,WAAW,SAAS;AAGrC,UAAM,gBAAgB,MAAM;AAC1B,UAAI,WAAW,YAAY,gBAAgB,WAAW,iBAAiB,mBAAmB;AAC1F,UAAI,WAAW,WAAW,gBAAgB,WAAW,gBAAgB,mBAAmB;AACxF,aAAO,mBAAmB;AAAA,IAC5B;AAEA,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,QAAQ,CAAA;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,gBAAgB;AAAA,UACd,QAAQ,CAAC;AAAA,YACP,MAAM;AAAA,YACN,KAAK;AAAA,YACL,KAAK;AAAA,YACL,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,QAAQ;AAAA,YACR,QAAQ,CAAC,OAAO,OAAO;AAAA;AAAA,YAEvB,UAAU;AAAA,cACR,WAAW;AAAA,gBACT,OAAO;AAAA,gBACP,OAAO,CAAC,CAAC,GAAG,2BAA2B,CAAC;AAAA;AAAA,cAAA;AAAA,YAC1C;AAAA;AAAA,YAGF,UAAU,EAAE,MAAM,MAAA;AAAA,YAClB,WAAW,EAAE,MAAM,MAAA;AAAA,YACnB,WAAW,EAAE,MAAM,MAAA;AAAA,YACnB,SAAS,EAAE,MAAM,MAAA;AAAA;AAAA;AAAA,YAEjB,UAAU;AAAA,cACR,MAAM;AAAA,cACN,OAAO;AAAA,cACP,UAAU;AAAA,cACV,WAAW;AAAA,gBACT,OAAO;AAAA,kBACL,MAAM;AAAA,kBACN,GAAG;AAAA,kBAAG,GAAG;AAAA,kBAAG,IAAI;AAAA,kBAAG,IAAI;AAAA,kBACvB,YAAY;AAAA,oBACV,EAAE,QAAQ,GAAG,OAAO,2BAAA;AAAA,oBACpB,EAAE,QAAQ,GAAG,OAAO,gBAAc;AAAA,kBAAE;AAAA,gBACtC;AAAA,gBAEF,aAAa,cAAA;AAAA,gBACb,YAAY;AAAA,cAAA;AAAA,YACd;AAAA;AAAA,YAGF,OAAO;AAAA,cACL,MAAM;AAAA,cACN,cAAc,CAAC,GAAG,MAAM;AAAA,cACxB,UAAU;AAAA,cACV,YAAY;AAAA,cACZ,OAAO;AAAA,YAAA;AAAA;AAAA,YAGT,QAAQ;AAAA,cACN,gBAAgB;AAAA,cAChB,WAAW,CAAC,iBAAyB;AACnC,sBAAM,UAAU,KAAK,MAAM,YAAY;AACvC,oBAAI,CAAC,WAAY,QAAO,GAAG,OAAO;AAClC,oBAAI,SAAU,QAAO,GAAG,OAAO;AAAA,QAAW,UAAU;AACpD,uBAAO,GAAG,OAAO,GAAG,UAAU;AAAA,cAChC;AAAA,cACA,UAAU;AAAA,cACV,YAAY;AAAA;AAAA,cACZ,YAAY,KAAK,MAAM,gBAAgB,IAAI;AAAA,cAC3C,cAAc,CAAC,GAAG,OAAO;AAAA,cACzB,OAAO,cAAA;AAAA,cACP,MAAM;AAAA,gBACJ,MAAM;AAAA,kBACJ,OAAO;AAAA,kBACP,UAAU,KAAK,IAAI,IAAI,KAAK,MAAM,gBAAgB,GAAG,CAAC;AAAA,kBACtD,YAAY;AAAA,kBACZ,YAAY,KAAK,MAAM,gBAAgB,GAAG;AAAA,gBAAA;AAAA,cAC5C;AAAA,YACF;AAAA,YAEF,MAAM,CAAC,EAAE,OAAO,cAAc,MAAM;AAAA,UAAA,CACrC;AAAA,QAAA;AAAA,QAEH,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AAuBM,MAAM,aAAa,KAAK;AAAA,EAC7B,SAASC,YAAW;AAAA,IAClB,OAAO,CAAA;AAAA,IACP,QAAQ;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA,EAAA,GACC,KAAK;AACN,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL;AAAA,QACA,QAAQ,CAAA;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,gBAAgB;AAAA,UACd,OAAO;AAAA,YACL,QAAQ,CAAC,MAAM,KAAK;AAAA,YACpB,QAAQ,CAAC,OAAO,KAAK;AAAA,UAAA;AAAA,UAEvB,WAAW;AAAA,YACT,MAAM;AAAA,YACN,KAAK;AAAA,YACL,KAAK;AAAA,YACL,YAAY;AAAA,YACZ,UAAU;AAAA,YACV,UAAU,EAAE,MAAM,MAAA;AAAA,YAClB,UAAU,EAAE,MAAM,MAAA;AAAA,YAClB,WAAW;AAAA,cACT,MAAM;AAAA,cACN,WAAW;AAAA,gBACT,OAAO;AAAA,gBACP,MAAM;AAAA,cAAA;AAAA,YACR;AAAA,YAEF,WAAW;AAAA,cACT,UAAU;AAAA,cACV,OAAO;AAAA,cACP,WAAW,CAAC,UAAkB,UAAU,IAAI,KAAK,GAAG,KAAK;AAAA,YAAA;AAAA,UAC3D;AAAA,UAEF,YAAY;AAAA,YACV,KAAK,oBAAoB,oBAAoB,MAAM;AAAA,YACnD,KAAK,oBAAoB,oBAAoB,MAAM;AAAA,YACnD,UAAU,EAAE,MAAM,MAAA;AAAA,YAClB,UAAU,EAAE,MAAM,MAAA;AAAA,YAClB,WAAW,EAAE,MAAM,MAAA;AAAA,YACnB,WAAW;AAAA,cACT,MAAM;AAAA,cACN,WAAW;AAAA,gBACT,OAAO;AAAA,gBACP,MAAM;AAAA,cAAA;AAAA,YACR;AAAA,UACF;AAAA,UAEF,QAAQ,CAAC;AAAA,YACP,MAAM;AAAA,YACN,MAAM;AAAA,YACN,kBAAkB;AAAA,YAClB,MAAM,KAAK,IAAI,CAAA,MAAK,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC;AAAA,YACzC,YAAY;AAAA,YACZ,WAAW;AAAA,cACT,OAAO,oBAAoB;AAAA;AAAA,cAC3B,aAAa,oBAAoB;AAAA,cACjC,YAAY;AAAA,YAAA;AAAA,UACd,CACD;AAAA,QAAA;AAAA,QAEH,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AAyBM,MAAM,qBAAqB,KAAK;AAAA,EACrC,SAASC,oBAAmB;AAAA,IAC1B,OAAO,CAAA;AAAA,IACP,QAAQ;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA,EAAA,GACC,KAAK;AAEN,UAAM,EAAE,YAAY,UAAA,IAAc,QAAQ,MAAM;AAC9C,YAAM,OAAO,KAAK,IAAI,CAAA,MAAK,EAAE,IAAI;AACjC,YAAM,QAA2E,CAAA;AAEjF,WAAK,QAAQ,CAAC,SAAS,eAAe;AACpC,gBAAQ,QAAQ,QAAQ,CAAA,MAAK;AACZ,YAAE,kBAAkB,SAAS,cAAc,WACtD,EAAE,kBAAkB,aAAa,cAAc,UAC/C,cAAc;AAClB,gBAAM,KAAK;AAAA,YACT,MAAM,QAAQ;AAAA,YACd,OAAO,CAAC,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK;AAAA,UAAA,CAC5C;AAAA,QACH,CAAC;AAAA,MACH,CAAC;AAED,aAAO,EAAE,YAAY,MAAM,WAAW,MAAA;AAAA,IACxC,GAAG,CAAC,IAAI,CAAC;AAET,UAAM,SAAuB,CAAC;AAAA,MAC5B,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM,CAAA;AAAA,IAAC,CACR;AAED,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM,aAAa,EAAE,SAAS,MAAM,MAAM,UAAU,MAAM,IAAA,IAAQ;AAAA,QAClE,gBAAgB;AAAA,UACd,SAAS;AAAA,YACP,SAAS;AAAA,YACT,WAAY,CAAC,WAAoB;AAC/B,oBAAM,IAAI;AACV,oBAAM,CAAA,EAAG,OAAO,KAAK,KAAK,IAAI,EAAE;AAChC,oBAAM,aAAa,MAAM,SAAS,KAAO,QAAQ,CAAC;AAClD,qBAAO,GAAG,SAAS,SAAS,kBAAkB,QAAQ;AAAA,YACxD;AAAA,UAAA;AAAA,UAEF,MAAM,EAAE,MAAM,KAAK,OAAO,IAAI,KAAK,IAAI,QAAQ,GAAA;AAAA,UAC/C,OAAO;AAAA,YACL,MAAM;AAAA,YACN,KAAK,uCAAY;AAAA,YACjB,KAAK,uCAAY;AAAA,UAAC;AAAA,UAEpB,OAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM;AAAA,UAAA;AAAA,UAER,QAAQ,CAAC;AAAA,YACP,MAAM;AAAA,YACN,YAAa,CAAC,SAAkB,QAAiB;AAC/C,oBAAM,IAAI;AACV,oBAAM,SAAS,EAAE,MAAM,CAAC;AACxB,oBAAM,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;AAC1C,oBAAM,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC;AACxC,oBAAMC,UAAS,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI;AACnC,qBAAO;AAAA,gBACL,MAAM;AAAA,gBACN,OAAO;AAAA,kBACL,GAAG,MAAM,CAAC;AAAA,kBACV,GAAG,MAAM,CAAC,IAAIA,UAAS;AAAA,kBACvB,OAAO,IAAI,CAAC,IAAI,MAAM,CAAC;AAAA,kBACvB,QAAAA;AAAAA,gBAAA;AAAA,gBAEF,OAAO;AAAA,kBACL,MAAM,cAAc;AAAA,kBACpB,QAAQ,cAAc;AAAA,gBAAA;AAAA,cACxB;AAAA,YAEJ;AAAA,YACA,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,EAAA;AAAA,YACxB,MAAM;AAAA,UAAA,CACP;AAAA,QAAA;AAAA,QAEH,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AA2BM,MAAM,gBAAgB,KAAK;AAAA,EAChC,SAASC,eAAc;AAAA,IACrB,OAAO,CAAA;AAAA,IACP,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA,EAAA,GACC,KAAK;AACN,UAAM,SAAS,QAAQ,MAAoB,CAAC;AAAA,MAC1C,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM,KAAK,IAAI,CAAA,OAAM,EAAE,GAAG,EAAE,WAAW,GAAG,EAAE,MAAA,EAAQ;AAAA,MACpD,OAAO,oBAAoB;AAAA;AAAA,MAC3B,QAAQ;AAAA,MACR,WAAW,EAAE,SAAS,IAAA;AAAA,MACtB,QAAQ,EAAE,MAAM,OAAA;AAAA,IAAO,CACxB,GAAG,CAAC,IAAI,CAAC;AAEV,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,KAAK,iDAAiB;AAAA,UACtB,KAAK,iDAAiB;AAAA,QAAC;AAAA,QAEzB,OAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,KAAK,yCAAa;AAAA,UAClB,KAAK,yCAAa;AAAA,QAAC;AAAA,QAErB,SAAS,EAAE,SAAS,QAAQ,WAAW,IAAA;AAAA,QACvC,aAAa,eAAe,SAAY;AAAA,UACtC,WAAW;AAAA,YACT,MAAM,CAAC;AAAA,cACL,OAAO;AAAA,cACP,OAAO,gBAAgB,UAAU;AAAA,cACjC,OAAO,mBAAmB;AAAA,cAC1B,WAAW,EAAE,MAAM,SAAA;AAAA,YAAS,CAC7B;AAAA,UAAA;AAAA,QACH,IACE;AAAA,QACJ,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AAuBM,MAAM,sBAAsB,KAAK;AAAA,EACtC,SAASC,qBAAoB;AAAA,IAC3B,OAAO,CAAA;AAAA,IACP,QAAQ;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA,EAAA,GACC,KAAK;AACN,UAAM,SAAS,QAAQ,MAAoB;AAEzC,YAAM,aAAqC;AAAA,QACzC,UAAU,cAAc;AAAA;AAAA,QACxB,SAAS,cAAc;AAAA;AAAA,QACvB,WAAW,oBAAoB;AAAA;AAAA,QAC/B,QAAQ,oBAAoB;AAAA;AAAA,MAAA;AAG9B,aAAO,CAAC;AAAA,QACN,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM,KAAK,IAAI,CAAA,OAAM;AAAA,UACnB,GAAG,EAAE;AAAA,UACL,GAAG,EAAE;AAAA,UACL,MAAM,EAAE,MAAM,EAAE,MAAM,OAAO,WAAW,EAAE,IAAI,KAAK,cAAc,QAAA;AAAA,QAAQ,EACzE;AAAA,MAAA,CACH;AAAA,IACH,GAAG,CAAC,IAAI,CAAC;AAET,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL;AAAA,QACA,UAAU,cAAc,UAAU,WAAW,SAAS;AAAA,QACtD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,EAAE,MAAM,WAAA;AAAA,QACf,OAAO,EAAE,MAAM,SAAS,MAAM,MAAA;AAAA,QAC9B,SAAS,EAAE,SAAS,OAAA;AAAA,QACpB,gBAAgB;AAAA,UACd,QAAQ,CAAC;AAAA,YACP,MAAM;AAAA,YACN,MAAM,KAAK,IAAI,CAAA,OAAM;AAAA,cACnB,OAAO,EAAE;AAAA,cACT,MAAM,EAAE;AAAA,cACR,WAAW;AAAA,gBACT,OAAO,EAAE,SAAS,aAAa,cAAc,SACzC,EAAE,SAAS,YAAY,cAAc,UACrC,EAAE,SAAS,cAAc,oBAAoB,WAC7C,oBAAoB;AAAA,cAAA;AAAA,YAC1B,EACA;AAAA,UAAA,CACH;AAAA,QAAA;AAAA,QAEH,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AAyBM,MAAM,uBAAuB,KAAK;AAAA,EACvC,SAASC,sBAAqB;AAAA,IAC5B,OAAO,CAAA;AAAA,IACP,QAAQ;AAAA,IACR;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,UAAU;AAAA,IACV,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA,EAAA,GACC,KAAK;AACN,UAAM,SAAuB,CAAC;AAAA,MAC5B,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,MAAM;AAAA,MACN,MAAM,CAAA;AAAA,IAAC,CACR;AAID,UAAM,aAAqC;AAAA,MACzC,OAAO,oBAAoB;AAAA;AAAA,MAC3B,UAAU,oBAAoB;AAAA;AAAA,MAC9B,UAAU,cAAc;AAAA;AAAA,IAAA;AAG1B,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM,aAAa,EAAE,SAAS,MAAM,MAAM,UAAU,MAAM,IAAA,IAAQ;AAAA,QAClE,gBAAgB;AAAA,UACd,SAAS;AAAA,YACP,SAAS;AAAA,YACT,WAAY,CAAC,WAAoB;AAC/B,oBAAM,IAAI;AACV,oBAAM,CAAC,OAAO,KAAK,WAAW,IAAI,EAAE,KAAK;AACzC,oBAAM,aAAa,MAAM,SAAS,KAAO,QAAQ,CAAC;AAClD,qBAAO,GAAG,YAAY,OAAO,CAAC,EAAE,YAAA,IAAgB,YAAY,MAAM,CAAC,CAAC,kBAAkB,QAAQ;AAAA,YAChG;AAAA,UAAA;AAAA,UAEF,MAAM,EAAE,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,QAAQ,GAAA;AAAA,UAC9C,OAAO;AAAA,YACL,MAAM;AAAA,YACN,KAAK,uCAAY;AAAA,YACjB,KAAK,uCAAY;AAAA,UAAC;AAAA,UAEpB,OAAO;AAAA,YACL,MAAM;AAAA,YACN,MAAM,CAAC,EAAE;AAAA,YACT,MAAM;AAAA,UAAA;AAAA,UAER,QAAQ,CAAC;AAAA,YACP,MAAM;AAAA,YACN,YAAa,CAAC,SAAkB,QAAiB;AAC/C,oBAAM,IAAI;AACV,oBAAM,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,GAAa,CAAC,CAAC;AAC/C,oBAAM,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,GAAa,CAAC,CAAC;AAC7C,oBAAM,cAAc,EAAE,MAAM,CAAC;AAC7B,oBAAM,IAAI;AACV,qBAAO;AAAA,gBACL,MAAM;AAAA,gBACN,OAAO;AAAA,kBACL,GAAG,MAAM,CAAC;AAAA,kBACV,GAAG,MAAM,CAAC,IAAI,IAAI;AAAA,kBAClB,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC;AAAA,kBACpC,QAAQ;AAAA,gBAAA;AAAA,gBAEV,OAAO;AAAA,kBACL,MAAM,WAAW,WAAW,KAAK,WAAW;AAAA,gBAAA;AAAA,cAC9C;AAAA,YAEJ;AAAA,YACA,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,EAAA;AAAA,YAClB,MAAM,KAAK,IAAI,CAAA,OAAM,EAAE,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI;AAAA,UAAA,CAC1D;AAAA,QAAA;AAAA,QAEH,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AAuBM,MAAM,cAAc,KAAK;AAAA,EAC9B,SAASC,aAAY;AAAA,IACnB,OAAO,CAAA;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA,EAAA,GACC,KAAK;AACN,UAAM,UAAU,QAAQ,MAAM;AAE5B,YAAM,UAAU,MAAM;AACtB,YAAM,YAAY,IAAI,MAAM,IAAI,EAAE,KAAK,CAAC;AAGxC,WAAK,QAAQ,CAAA,MAAK;AAChB,cAAM,mBAAoB,EAAE,YAAY,MAAO,OAAO;AACtD,cAAM,WAAW,KAAK,MAAM,kBAAkB,OAAO;AACrD,kBAAU,QAAQ,KAAK,EAAE;AAAA,MAC3B,CAAC;AAGD,aAAO,UAAU,IAAI,CAAC,OAAO,OAAO;AAAA,QAClC,MAAM,IAAI,IAAI,SAAS,QAAQ,CAAC,CAAC;AAAA,QACjC,OAAO;AAAA,MAAA,EACP;AAAA,IACJ,GAAG,CAAC,MAAM,IAAI,CAAC;AAEf,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,QAAQ,CAAA;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,gBAAgB;AAAA,UACd,OAAO;AAAA,YACL,QAAQ,CAAC,OAAO,KAAK;AAAA,YACrB,QAAQ,CAAC,OAAO,KAAK;AAAA,UAAA;AAAA,UAEvB,WAAW;AAAA,YACT,MAAM;AAAA,YACN,MAAM,QAAQ,IAAI,CAAA,MAAK,EAAE,IAAI;AAAA,YAC7B,YAAY;AAAA,YACZ,aAAa;AAAA,YACb,UAAU,EAAE,MAAM,MAAA;AAAA,YAClB,UAAU,EAAE,MAAM,MAAA;AAAA,YAClB,WAAW;AAAA,cACT,UAAU;AAAA,cACV,OAAO;AAAA,cACP,QAAQ;AAAA,YAAA;AAAA,YAEV,WAAW;AAAA,cACT,MAAM;AAAA,cACN,WAAW;AAAA,gBACT,OAAO;AAAA,gBACP,MAAM;AAAA,cAAA;AAAA,YACR;AAAA,UACF;AAAA,UAEF,YAAY;AAAA,YACV,KAAK;AAAA,YACL,UAAU,EAAE,MAAM,MAAA;AAAA,YAClB,UAAU,EAAE,MAAM,MAAA;AAAA,YAClB,WAAW,EAAE,MAAM,MAAA;AAAA,YACnB,WAAW;AAAA,cACT,MAAM;AAAA,cACN,WAAW;AAAA,gBACT,OAAO;AAAA,gBACP,MAAM;AAAA,cAAA;AAAA,YACR;AAAA,UACF;AAAA,UAEF,SAAS;AAAA,YACP,SAAS;AAAA,YACT,iBAAiB;AAAA,YACjB,aAAa;AAAA,YACb,WAAW,EAAE,OAAO,4BAAA;AAAA;AAAA,UAA4B;AAAA,UAElD,QAAQ,CAAC;AAAA,YACP,MAAM;AAAA,YACN,MAAM,QAAQ,IAAI,CAAA,MAAK,EAAE,KAAK;AAAA,YAC9B,kBAAkB;AAAA,YAClB,UAAU;AAAA,YACV,WAAW;AAAA;AAAA,cAET,OAAO;AAAA,gBACL,MAAM;AAAA,gBACN,GAAG;AAAA,gBAAG,GAAG;AAAA,gBAAG,IAAI;AAAA,gBAAG,IAAI;AAAA,gBACvB,YAAY;AAAA,kBACV,EAAE,QAAQ,GAAG,OAAO,oBAAoB,SAAA;AAAA;AAAA,kBACxC,EAAE,QAAQ,GAAG,OAAO,oBAAoB,OAAA;AAAA;AAAA,gBAAO;AAAA,cACjD;AAAA,cAEF,aAAa,oBAAoB;AAAA,cACjC,YAAY;AAAA,YAAA;AAAA,UACd,CACD;AAAA,QAAA;AAAA,QAEH,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AAOD,MAAM,kBAA0C;AAAA;AAAA,EAE9C,YAAY;AAAA;AAAA,EACZ,WAAW;AAAA;AAAA,EACX,SAAS;AAAA;AAAA,EACT,OAAO;AAAA;AAAA;AAAA,EAEP,QAAQ;AAAA;AAAA;AAAA,EAER,UAAU;AAAA;AAAA,EACV,QAAQ;AAAA;AAAA;AAAA,EAER,OAAO;AAAA;AACT;AAGA,MAAM,oBAA4C;AAAA,EAChD,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,SAAS;AAAA,EACT,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AACT;AAqCO,MAAM,wBAAwB,KAAK;AAAA,EACxC,SAASC,uBAAsB;AAAA,IAC7B,OAAO,CAAA;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,OAAO;AAAA,IACP,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA,IACA,aAAa;AAAA,EAAA,GACZ,KAAK;AACN,UAAM,EAAE,QAAQ,MAAM,UAAA,IAAc,SAAA;AACpC,UAAM,eAAe,qBAAA;AACA,wBAAA;AACrB,UAAM,eAAe,OAAO,OAAO,KAAK;AACxC,UAAM,iBAAiB,OAAO,OAAO,KAAK;AACnB,WAAO,OAAO,KAAK;AAC1C,UAAM,UAAU,cAAc,SAAS,2BAA2B;AAGlE,UAAM,cAAc,QAAQ,MAAM;AAChC,YAAM,0BAAU,IAAA;AAChB,WAAK,QAAQ,CAAA,SAAQ,IAAI,IAAI,KAAK,MAAM,IAAI,CAAC;AAC7C,aAAO;AAAA,IACT,GAAG,CAAC,IAAI,CAAC;AAGT,UAAM,mBAAmB,QAAQ,MAAM;AACrC,YAAM,cAAqB,CAAA;AAE3B,WAAK,QAAQ,CAAC,MAAM,QAAQ;AAC1B,cAAM,YAAY,KAAK,SAAS,gBAAgB,KAAK,QAAQ,YAAY,KAAK,sBAAsB,MAAM,MAAM,sBAAsB,MAAM,MAAM;AAClJ,cAAM,YAAY,kBAAkB,KAAK,QAAQ,YAAY,KAAK;AAGlE,YAAI,KAAK,aAAa,KAAK,UAAU,SAAS,GAAG;AAE/C,gBAAM,cAAc,KAAK,iBAAiB,KAAK,IAAI,GAAG,KAAK,UAAU,IAAI,CAAA,MAAK,KAAK,KAAK,EAAE,IAAE,EAAE,IAAI,EAAE,IAAE,EAAE,CAAC,CAAC,CAAC;AAE3G,sBAAY,KAAK;AAAA,YACf,MAAM;AAAA,YACN,MAAM,GAAG,KAAK,IAAI;AAAA,YAClB,MAAM,KAAK,UAAU,IAAI,CAAA,MAAK,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,MAAM,WAAW,aAAa,KAAK,QAAQ,KAAK,WAAW,CAAC;AAAA,YAC1G,WAAW;AAAA,cACT,OAAO;AAAA,cACP,MAAM;AAAA,cACN,OAAO;AAAA,cACP,SAAS;AAAA,YAAA;AAAA,YAEX,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,UAAU;AAAA,cACR,WAAW;AAAA,gBACT,OAAO;AAAA,gBACP,SAAS;AAAA,gBACT,YAAY;AAAA,gBACZ,aAAa;AAAA,cAAA;AAAA,YACf;AAAA,YAEF,GAAG;AAAA,UAAA,CACJ;AAAA,QACH;AAGA,oBAAY,KAAK;AAAA,UACf,MAAM;AAAA,UACN,MAAM,KAAK;AAAA,UACX,YAAY,KAAK,SAAS,KAAK,SAAS,WAAW,KAAK;AAAA,UACxD,MAAM,CAAC,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,MAAM,WAAW,KAAK,aAAa,KAAK,eAAe,KAAK,MAAM,CAAC;AAAA,UAC7G,WAAW;AAAA,YACT,OAAO;AAAA,YACP,aAAa;AAAA,YACb,YAAY,KAAK,SAAS,WAAW,KAAK;AAAA,UAAA;AAAA,UAE5C,OAAO;AAAA,YACL,MAAM;AAAA,YACN,UAAU;AAAA,YACV,WAAW,KAAK;AAAA,YAChB,UAAU;AAAA,YACV,OAAO;AAAA,YACP,iBAAiB;AAAA,YACjB,iBAAiB;AAAA,UAAA;AAAA,UAEnB,UAAU;AAAA,YACR,OAAO;AAAA,YACP,WAAW;AAAA,cACT,YAAY;AAAA,YAAA;AAAA,YAEd,OAAO;AAAA,cACL,MAAM;AAAA,cACN,YAAY;AAAA,cACZ,UAAU;AAAA,cACV,OAAO;AAAA,YAAA;AAAA,UACT;AAAA,UAEF,GAAG;AAAA,QAAA,CACJ;AAAA,MACH,CAAC;AAED,aAAO;AAAA,QACL,SAAS;AAAA,UACP,SAAS;AAAA,UACT,GAAG;AAAA,UACH,aAAa;AAAA,UACb,SAAS,CAAC,IAAI,EAAE;AAAA,UAChB,WAAY,CAAC,WAAgB;AAC3B,kBAAM,aAAa,OAAO,cAAc;AAGxC,gBAAI,OAAO,eAAe,QAAQ;AAChC,oBAAM,CAAC,IAAI,IAAI,UAAU,WAAW,aAAa,QAAQ,WAAW,IAAI,OAAO,SAAS,CAAA;AACxF,oBAAM,WAAW,YAAY,IAAI,QAAQ;AAEzC,kBAAI,OAAO,+EAA+E,UAAU;AACpG,sBAAQ,2HAA2H,aAAa,cAAc;AAC9J,sBAAQ;AAER,kBAAI,aAAa;AACf,wBAAQ,kLAAkL,YAAY,QAAQ,CAAC,CAAC;AAAA,cAClN;AACA,kBAAI,QAAQ;AACV,wBAAQ,iLAAiL,OAAO,QAAQ,CAAC,CAAC;AAAA,cAC5M;AACA,kBAAI,gBAAgB,QAAW;AAC7B,wBAAQ,8KAA8K,YAAY,QAAQ,CAAC,CAAC;AAAA,cAC9M;AACA,kBAAI,qCAAU,aAAa;AACzB,wBAAQ,4FAA4F,SAAS,WAAW;AAAA,cAC1H;AACA,sBAAQ;AACR,qBAAO;AAAA,YACT;AAGA,gBAAI,OAAO,eAAe,WAAW;AACnC,oBAAM,CAAC,GAAG,GAAG,GAAG,WAAW,WAAW,aAAa,KAAK,MAAM,IAAI,OAAO;AACzE,oBAAM,WAAW,KAAK,KAAK,IAAE,IAAI,IAAE,KAAK,KAAG,MAAI,KAAG,EAAE;AAEpD,kBAAI,OAAO,iEAAiE,UAAU;AACtF,sBAAQ,2HAA2H,aAAa,QAAQ;AACxJ,sBAAQ;AACR,sBAAQ,oKAAoK,EAAE,QAAQ,CAAC,CAAC;AACxL,sBAAQ,oKAAoK,EAAE,QAAQ,CAAC,CAAC;AACxL,kBAAI,MAAM,KAAK,MAAM,QAAW;AAC9B,wBAAQ,oKAAoK,EAAE,QAAQ,CAAC,CAAC;AAAA,cAC1L;AACA,sBAAQ,4QAA4Q,SAAS,QAAQ,CAAC,CAAC;AACvS,kBAAI,KAAK;AACP,wBAAQ,kLAAkL,IAAI,QAAQ,CAAC,CAAC;AAAA,cAC1M;AACA,kBAAI,QAAQ;AACV,wBAAQ,yKAAyK,OAAO,QAAQ,CAAC,CAAC;AAAA,cACpM;AACA,kBAAI,aAAa;AACf,wBAAQ,4GAA4G,WAAW;AAAA,cACjI;AACA,sBAAQ;AACR,qBAAO;AAAA,YACT;AACA,mBAAO;AAAA,UACT;AAAA,QAAA;AAAA,QAEF,SAAS;AAAA,UACP,MAAM;AAAA,UACN,OAAO;AAAA,UACP,KAAK;AAAA,UACL,SAAS;AAAA,YACP,UAAU,EAAE,MAAM,MAAM,OAAO,EAAE,MAAM,QAAQ,MAAM,UAAQ;AAAA,YAC7D,SAAS,EAAE,MAAM,MAAM,OAAO,QAAA;AAAA,UAAQ;AAAA,UAExC,WAAW,EAAE,aAAa,2BAAA;AAAA,QAA2B;AAAA,QAEvD,UAAU,aAAa;AAAA,UACrB,EAAE,MAAM,UAAmB,YAAY,GAAG,YAAY,OAAA;AAAA,UACtD,EAAE,MAAM,UAAmB,YAAY,GAAG,YAAY,OAAA;AAAA,QAAgB,IACpE;AAAA,QACJ,MAAM;AAAA,UACJ,cAAc;AAAA,UACd,MAAM;AAAA,UACN,OAAO,aAAa,KAAK;AAAA,UACzB,KAAK;AAAA,UACL,QAAQ;AAAA,QAAA;AAAA,QAEV,OAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,cAAc;AAAA,UACd,SAAS;AAAA,UACT,eAAe,EAAE,OAAO,2BAAA;AAAA,UACxB,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE,OAAO,8BAA4B;AAAA,UAC7E,UAAU,EAAE,MAAM,MAAM,WAAW,EAAE,OAAO,6BAA2B;AAAA,UACvE,WAAW,EAAE,OAAO,2BAAA;AAAA,QAA2B;AAAA,QAEjD,OAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,cAAc;AAAA,UACd,SAAS;AAAA,UACT,eAAe,EAAE,OAAO,2BAAA;AAAA,UACxB,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE,OAAO,8BAA4B;AAAA,UAC7E,UAAU,EAAE,MAAM,MAAM,WAAW,EAAE,OAAO,6BAA2B;AAAA,UACvE,WAAW,EAAE,OAAO,2BAAA;AAAA,QAA2B;AAAA,QAEjD,WAAW;AAAA,QACX,mBAAmB;AAAA,QACnB,QAAQ;AAAA,MAAA;AAAA,IAEZ,GAAG,CAAC,MAAM,UAAU,YAAY,YAAY,aAAa,YAAY,CAAC;AAGtE,UAAM,mBAAmB,QAAQ,MAAM;AACrC,YAAM,cAAqB,CAAA;AAE3B,WAAK,QAAQ,CAAC,MAAM,QAAQ;AAC1B,cAAM,YAAY,KAAK,SAAS,gBAAgB,KAAK,QAAQ,YAAY,KAAK,sBAAsB,MAAM,MAAM,sBAAsB,MAAM,MAAM;AAClJ,cAAM,YAAY,kBAAkB,KAAK,QAAQ,YAAY,KAAK;AAGlE,YAAI,KAAK,aAAa,KAAK,UAAU,SAAS,GAAG;AAC/C,gBAAM,YAAY,KAAK,UAAU,IAAI,CAAA,MAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAE9D,cAAI,UAAU,SAAS,GAAG;AACxB,sBAAU,KAAK,UAAU,CAAC,CAAC;AAAA,UAC7B;AACA,sBAAY,KAAK;AAAA,YACf,MAAM;AAAA,YACN,MAAM,GAAG,KAAK,IAAI;AAAA,YAClB,kBAAkB;AAAA,YAClB,MAAM;AAAA,YACN,WAAW;AAAA,cACT,OAAO;AAAA,cACP,OAAO;AAAA,cACP,SAAS;AAAA,YAAA;AAAA,YAEX,QAAQ;AAAA,UAAA,CACT;AAAA,QACH;AAGA,oBAAY,KAAK;AAAA,UACf,MAAM;AAAA,UACN,MAAM,KAAK;AAAA,UACX,kBAAkB;AAAA,UAClB,MAAM,CAAC;AAAA,YACL,MAAM,KAAK;AAAA,YACX,OAAO,CAAC,KAAK,GAAG,KAAK,GAAG,KAAK,KAAK,CAAC;AAAA,YACnC,WAAW,EAAE,OAAO,UAAA;AAAA,YACpB;AAAA,YACA,aAAa,KAAK;AAAA,UAAA,CACnB;AAAA,UACD,YAAY,KAAK,SAAS,KAAK,SAAS,WAAW,KAAK;AAAA,UACxD,WAAW,EAAE,OAAO,UAAA;AAAA,UACpB,OAAO;AAAA,YACL,MAAM;AAAA,YACN,WAAW,KAAK;AAAA,YAChB,WAAW;AAAA,cACT,OAAO;AAAA,cACP,UAAU;AAAA,cACV,iBAAiB;AAAA,cACjB,SAAS,CAAC,GAAG,CAAC;AAAA,cACd,cAAc;AAAA,YAAA;AAAA,UAChB;AAAA,UAEF,UAAU;AAAA,YACR,WAAW,EAAE,SAAS,EAAA;AAAA,YACtB,OAAO,EAAE,MAAM,KAAA;AAAA,UAAK;AAAA,QACtB,CACD;AAAA,MACH,CAAC;AAED,aAAO;AAAA,QACL,SAAS;AAAA,UACP,MAAM;AAAA,UACN,GAAG;AAAA,UACH,WAAY,CAAC,WAAgB;AAC3B,kBAAM,IAAI,OAAO,QAAQ,CAAA;AACzB,kBAAM,aAAa,OAAO,cAAc;AAGxC,gBAAI,OAAO,eAAe,UAAU;AAClC,qBAAO,gCAAgC,UAAU;AAAA,YACnD;AAGA,kBAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,OAAO,SAAS,CAAC,GAAG,GAAG,CAAC;AACrD,kBAAM,WAAW,KAAK,KAAK,IAAE,IAAI,IAAE,IAAI,IAAE,CAAC;AAE1C,gBAAI,OAAO,iEAAiE,EAAE,QAAQ,UAAU;AAChG,oBAAQ,sGAAsG,EAAE,aAAa,QAAQ;AACrI,oBAAQ;AACR,oBAAQ,+CAA+C,EAAE,QAAQ,CAAC,CAAC;AACnE,oBAAQ,+CAA+C,EAAE,QAAQ,CAAC,CAAC;AACnE,oBAAQ,+CAA+C,EAAE,QAAQ,CAAC,CAAC;AACnE,oBAAQ,2FAA2F,SAAS,QAAQ,CAAC,CAAC;AACtH,gBAAI,EAAE,aAAa;AACjB,sBAAQ,4FAA4F,EAAE,WAAW;AAAA,YACnH;AACA,oBAAQ;AACR,mBAAO;AAAA,UACT;AAAA,QAAA;AAAA,QAEF,QAAQ;AAAA,UACN,UAAU;AAAA,UACV,WAAW;AAAA,UACX,UAAU;AAAA,UACV,aAAa;AAAA,YACX,YAAY;AAAA,YACZ,sBAAsB;AAAA,YACtB,iBAAiB;AAAA,YACjB,UAAU;AAAA,YACV,OAAO;AAAA,YACP,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB,iBAAiB;AAAA,YACjB,gBAAgB;AAAA,UAAA;AAAA,UAElB,OAAO;AAAA,YACL,MAAM,EAAE,WAAW,KAAK,QAAQ,MAAA;AAAA,YAChC,SAAS,EAAE,WAAW,IAAA;AAAA,UAAI;AAAA,UAE5B,YAAY;AAAA,YACV,QAAQ;AAAA,YACR,OAAO,EAAE,QAAQ,MAAM,WAAW,KAAA;AAAA,UAAK;AAAA,QACzC;AAAA,QAEF,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,eAAe,EAAE,OAAO,2BAAA;AAAA,UACxB,UAAU,EAAE,WAAW,EAAE,OAAO,6BAA2B;AAAA,UAC3D,WAAW,EAAE,OAAO,4BAA4B,WAAW,CAAC,MAAc,EAAE,QAAQ,CAAC,EAAA;AAAA,UACrF,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE,OAAO,6BAA2B;AAAA,QAAE;AAAA,QAEhF,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,eAAe,EAAE,OAAO,2BAAA;AAAA,UACxB,UAAU,EAAE,WAAW,EAAE,OAAO,6BAA2B;AAAA,UAC3D,WAAW,EAAE,OAAO,4BAA4B,WAAW,CAAC,MAAc,EAAE,QAAQ,CAAC,EAAA;AAAA,UACrF,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE,OAAO,6BAA2B;AAAA,QAAE;AAAA,QAEhF,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,eAAe,EAAE,OAAO,2BAAA;AAAA,UACxB,UAAU,EAAE,WAAW,EAAE,OAAO,6BAA2B;AAAA,UAC3D,WAAW,EAAE,OAAO,4BAA4B,WAAW,CAAC,MAAc,EAAE,QAAQ,CAAC,EAAA;AAAA,UACrF,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE,OAAO,6BAA2B;AAAA,QAAE;AAAA,QAEhF,QAAQ;AAAA,MAAA;AAAA,IAEZ,GAAG,CAAC,MAAM,UAAU,UAAU,CAAC;AAG/B,UAAM,iBAAiB,SAAS,OAAO,mBAA0B;AAEjE,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,QAAQ,CAAA;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AAwCM,MAAM,iBAAiB,KAAK;AAAA,EACjC,SAASC,gBAAe;AAAA,IACtB,OAAO,CAAA;AAAA,IACP;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA,EAAA,GACC,KAAK;AACN,UAAM,UAAU,kBAAA;AAChB,UAAM,eAAe,qBAAA;AACrB,UAAM,cAAc,oBAAA;AAEpB,UAAM,iBAAiB,QAAQ,MAAM;AACnC,YAAM,cAAc,KAAK,IAAI,CAAC,QAAQ,SAAS;AAAA,QAC7C,MAAM;AAAA,QACN,MAAM,OAAO;AAAA,QACb,MAAM,OAAO,KAAK,IAAI,CAAA,OAAM;AAAA,UAC1B,MAAM,EAAE,SAAS,OAAO;AAAA,UACxB,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAAA,UACrB,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU;AAAA,UAC1C,MAAM,EAAE;AAAA,QAAA,EACR;AAAA,QACF,YAAY,OAAO,OAAO,eAAe,WAAW,OAAO,aAAa;AAAA,QACxE,WAAW;AAAA,UACT,OAAO,OAAO,SAAS,sBAAsB,MAAM,MAAM,sBAAsB,MAAM,MAAM;AAAA,QAAA;AAAA,QAE7F,OAAO;AAAA,UACL,MAAM;AAAA,QAAA;AAAA,QAER,UAAU;AAAA,UACR,WAAW,EAAE,SAAS,EAAA;AAAA,UACtB,OAAO,EAAE,MAAM,MAAM,WAAW,CAAC;;AAAgB,iCAAO,SAAP,mBAAa,SAAQ;AAAA,YAAA;AAAA,QAAG;AAAA,MAC3E,EACA;AAEF,aAAO;AAAA,QACL,SAAS;AAAA,UACP,MAAM;AAAA,UACN,GAAG;AAAA,UACH,WAAY,CAAC,WAAgB;AAC3B,kBAAM,IAAI,OAAO,QAAQ,CAAA;AACzB,kBAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC;AACrC,gBAAI,OAAO,iEAAiE,EAAE,QAAQ,OAAO,UAAU;AACvG,oBAAQ,QAAQ,UAAU,yCAAyC,EAAE,QAAQ,CAAC,CAAC;AAC/E,oBAAQ,QAAQ,UAAU,yCAAyC,EAAE,QAAQ,CAAC,CAAC;AAC/E,oBAAQ,QAAQ,UAAU,yCAAyC,EAAE,QAAQ,CAAC,CAAC;AAC/E,mBAAO;AAAA,UACT;AAAA,QAAA;AAAA,QAEF,QAAQ;AAAA,UACN,MAAM,KAAK,SAAS;AAAA,UACpB,KAAK;AAAA,UACL,GAAG;AAAA,QAAA;AAAA,QAEL,QAAQ;AAAA,UACN,UAAU;AAAA,UACV,WAAW;AAAA,UACX,UAAU;AAAA,UACV,aAAa;AAAA,YACX;AAAA,YACA,iBAAiB;AAAA,YACjB,UAAU;AAAA,YACV,OAAO;AAAA,YACP,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB,iBAAiB;AAAA,UAAA;AAAA,UAEnB,OAAO;AAAA,YACL,MAAM,EAAE,WAAW,KAAK,QAAQ,MAAA;AAAA,YAChC,SAAS,EAAE,WAAW,IAAA;AAAA,UAAI;AAAA,UAE5B,YAAY;AAAA,YACV,QAAQ;AAAA,YACR,OAAO,EAAE,QAAQ,MAAM,WAAW,KAAA;AAAA,UAAK;AAAA,QACzC;AAAA,QAEF,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,eAAe,EAAE,OAAO,2BAAA;AAAA,UACxB,UAAU,EAAE,WAAW,EAAE,OAAO,6BAA2B;AAAA,UAC3D,WAAW,EAAE,OAAO,2BAAA;AAAA,UACpB,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE,OAAO,6BAA2B;AAAA,QAAE;AAAA,QAEhF,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,eAAe,EAAE,OAAO,2BAAA;AAAA,UACxB,UAAU,EAAE,WAAW,EAAE,OAAO,6BAA2B;AAAA,UAC3D,WAAW,EAAE,OAAO,2BAAA;AAAA,UACpB,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE,OAAO,6BAA2B;AAAA,QAAE;AAAA,QAEhF,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,eAAe,EAAE,OAAO,2BAAA;AAAA,UACxB,UAAU,EAAE,WAAW,EAAE,OAAO,6BAA2B;AAAA,UAC3D,WAAW,EAAE,OAAO,2BAAA;AAAA,UACpB,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE,OAAO,6BAA2B;AAAA,QAAE;AAAA,QAEhF,QAAQ;AAAA,MAAA;AAAA,IAEZ,GAAG,CAAC,MAAM,UAAU,YAAY,YAAY,YAAY,YAAY,cAAc,WAAW,CAAC;AAE9F,QAAI,CAAC,QAAS,QAAO,oBAAC,YAAA,EAAW,KAAU,MAAK,WAAU,QAAQ,CAAA,GAAI,OAAc,OAAc,QAAgB,SAAO,MAAC,WAAsB;AAChJ,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,QAAQ,CAAA;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AA4CM,MAAM,aAAa,KAAK;AAAA,EAC7B,SAASC,YAAW;AAAA,IAClB,OAAO,CAAA;AAAA,IACP;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,cAAc,CAAA;AAAA,IACd,cAAc,CAAA;AAAA,IACd,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,aAAa;AAAA,IACb,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA,EAAA,GACC,KAAK;AACN,UAAM,UAAU,kBAAA;AAChB,UAAM,eAAe,qBAAA;AACrB,UAAM,iBAAiB,uBAAA;AACvB,UAAM,EAAE,OAAA,IAAW,SAAA;AACnB,UAAM,eAAe,OAAO,OAAO,KAAK;AACxC,UAAM,iBAAiB,OAAO,OAAO,KAAK;AAC1C,UAAM,gBAAgB,OAAO,OAAO,KAAK;AAGzC,UAAM,qBAAqB,eAAe,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,CAAA,MAAK,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AACjF,UAAM,qBAAqB,eAAe,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,CAAA,MAAK,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;AAEjF,UAAM,iBAAiB,QAAQ,MAAM;AACnC,YAAM,aAAa,KAAK,IAAI,CAAA,MAAK;AAC/B,cAAM,OAAO,mBAAmB,QAAQ,OAAO,EAAE,CAAC,CAAC;AACnD,cAAM,OAAO,mBAAmB,QAAQ,OAAO,EAAE,CAAC,CAAC;AACnD,eAAO;AAAA,UACL,OAAO,CAAC,MAAM,MAAM,EAAE,CAAC;AAAA,UACvB,MAAM,EAAE,SAAS,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;AAAA,UAChC,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU;AAAA,QAAA;AAAA,MAE9C,CAAC;AAGD,YAAM,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,CAAA,MAAK,EAAE,CAAC,GAAG,CAAC;AAE9C,aAAO;AAAA,QACL,SAAS;AAAA,UACP,MAAM;AAAA,UACN,GAAG;AAAA,UACH,WAAY,CAAC,WAAgB;AAC3B,kBAAM,IAAI,OAAO,QAAQ,CAAA;AACzB,kBAAM,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC;AAC3C,kBAAM,SAAS,mBAAmB,IAAI,KAAK;AAC3C,kBAAM,SAAS,mBAAmB,IAAI,KAAK;AAC3C,gBAAI,OAAO,iEAAiE,EAAE,QAAQ,EAAE;AACxF,oBAAQ,QAAQ,UAAU,KAAK,MAAM;AACrC,oBAAQ,QAAQ,UAAU,KAAK,MAAM;AACrC,oBAAQ,8BAA8B,UAAU,yCAAyC,EAAE,QAAQ,CAAC,CAAC;AACrG,mBAAO;AAAA,UACT;AAAA,QAAA;AAAA,QAEF,WAAW;AAAA,UACT,MAAM;AAAA,UACN,KAAK;AAAA,UACL,KAAK;AAAA,UACL,SAAS;AAAA,YACP,OAAO,CAAC,WAAW,WAAW,WAAW,SAAS;AAAA,UAAA;AAAA,UAEpD,GAAG;AAAA,UACH,OAAO;AAAA,UACP,KAAK;AAAA,QAAA;AAAA,QAEP,QAAQ;AAAA,UACN,UAAU;AAAA,UACV,WAAW;AAAA,UACX,UAAU;AAAA,UACV,aAAa;AAAA,YACX;AAAA,YACA,iBAAiB;AAAA,YACjB,UAAU;AAAA,YACV,OAAO;AAAA,YACP,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB,iBAAiB;AAAA,UAAA;AAAA,UAEnB,OAAO;AAAA,YACL,MAAM,EAAE,WAAW,KAAK,QAAQ,MAAM,eAAe,SAAA;AAAA,YACrD,SAAS,EAAE,WAAW,IAAA;AAAA,UAAI;AAAA,QAC5B;AAAA,QAEF,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN,eAAe,EAAE,OAAO,eAAA;AAAA,UACxB,UAAU,EAAE,WAAW,EAAE,OAAO,6BAA2B;AAAA,UAC3D,WAAW,EAAE,OAAO,gBAAgB,UAAU,GAAA;AAAA,QAAG;AAAA,QAEnD,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN,eAAe,EAAE,OAAO,eAAA;AAAA,UACxB,UAAU,EAAE,WAAW,EAAE,OAAO,6BAA2B;AAAA,UAC3D,WAAW,EAAE,OAAO,gBAAgB,UAAU,GAAA;AAAA,QAAG;AAAA,QAEnD,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,eAAe,EAAE,OAAO,eAAA;AAAA,UACxB,UAAU,EAAE,WAAW,EAAE,OAAO,6BAA2B;AAAA,UAC3D,WAAW,EAAE,OAAO,cAAA;AAAA,QAAc;AAAA,QAEpC,QAAQ,CAAC;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN;AAAA,UACA,SAAS;AAAA,UACT,WAAW;AAAA,UACX,OAAO;AAAA,YACL,MAAM;AAAA,UAAA;AAAA,UAER,UAAU;AAAA,YACR,OAAO;AAAA,cACL,MAAM;AAAA,cACN,WAAW,CAAC,WAAA;;AAAgB,qCAAO,SAAP,mBAAa,SAAQ;AAAA;AAAA,cACjD,WAAW,EAAE,OAAO,cAAc,UAAU,GAAA;AAAA,YAAG;AAAA,UACjD;AAAA,QACF,CACD;AAAA,MAAA;AAAA,IAEL,GAAG,CAAC,MAAM,oBAAoB,oBAAoB,YAAY,YAAY,YAAY,SAAS,YAAY,cAAc,gBAAgB,cAAc,gBAAgB,aAAa,CAAC;AAErL,QAAI,CAAC,QAAS,QAAO,oBAAC,YAAA,EAAW,KAAU,MAAK,OAAM,QAAQ,CAAA,GAAI,OAAc,OAAc,QAAgB,SAAO,MAAC,WAAsB;AAC5I,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,QAAQ,CAAA;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AAwCM,MAAM,iBAAiB,KAAK;AAAA,EACjC,SAASC,gBAAe;AAAA,IACtB,OAAO,EAAE,MAAM,GAAC;AAAA,IAChB;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA,IACV,aAAa;AAAA,IACb,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA,EAAA,GACC,KAAK;AACN,UAAM,UAAU,kBAAA;AAChB,UAAM,eAAe,qBAAA;AACrB,UAAM,iBAAiB,uBAAA;AAEvB,UAAM,iBAAiB,QAAQ,MAAM;;AAEnC,YAAM,cAA0B,CAAA;AAChC,YAAM,OAAO,KAAK,KAAK;AACvB,YAAM,OAAO,OAAO,IAAI,KAAK,KAAK,CAAC,EAAE,SAAS;AAE9C,eAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,iBAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,gBAAM,IAAI,KAAK,SAAS,KAAK,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,KAAK,OAAO,KAAK,MAAM;AACrG,gBAAM,IAAI,KAAK,SAAS,KAAK,OAAO,CAAC,KAAK,KAAK,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,KAAK,OAAO,KAAK,MAAM;AACrG,sBAAY,KAAK,CAAC,GAAG,GAAG,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;AAAA,QAC1C;AAAA,MACF;AAGA,YAAM,OAAO,KAAK,KAAK,KAAA;AACvB,YAAM,OAAO,KAAK,IAAI,GAAG,IAAI;AAC7B,YAAM,OAAO,KAAK,IAAI,GAAG,IAAI;AAG7B,YAAM,aAAa,KAAK,aAAa,YACjC,CAAC,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,IACjE,KAAK,aAAa,YAClB,CAAC,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS,MACjE,UAAK,eAAL,mBAAiB,IAAI,CAAA,MAAK,EAAE,WAC3B,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS;AAE3D,aAAO;AAAA,QACL,SAAS;AAAA,UACP,MAAM;AAAA,UACN,GAAG;AAAA,QAAA;AAAA,QAEL,WAAW;AAAA,UACT,MAAM;AAAA,UACN,KAAK;AAAA,UACL,KAAK;AAAA,UACL,SAAS,EAAE,OAAO,WAAA;AAAA,UAClB,GAAG;AAAA,UACH,OAAO;AAAA,UACP,KAAK;AAAA,QAAA;AAAA,QAEP,QAAQ;AAAA,UACN,UAAU;AAAA,UACV,WAAW;AAAA,UACX,UAAU;AAAA,UACV,aAAa;AAAA,YACX;AAAA,YACA,iBAAiB;AAAA,YACjB,UAAU;AAAA,YACV,OAAO;AAAA,YACP,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB,iBAAiB;AAAA,UAAA;AAAA,UAEnB,OAAO;AAAA,YACL,MAAM,EAAE,WAAW,KAAK,QAAQ,MAAM,eAAe,SAAA;AAAA,YACrD,SAAS,EAAE,WAAW,IAAA;AAAA,UAAI;AAAA,UAE5B,YAAY;AAAA,YACV,QAAQ;AAAA,YACR,MAAM,EAAE,QAAQ,MAAM,QAAQ,EAAA;AAAA,UAAE;AAAA,QAClC;AAAA,QAEF,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,eAAe,EAAE,OAAO,2BAAA;AAAA,UACxB,UAAU,EAAE,WAAW,EAAE,OAAO,6BAA2B;AAAA,UAC3D,WAAW,EAAE,OAAO,2BAAA;AAAA,QAA2B;AAAA,QAEjD,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,eAAe,EAAE,OAAO,2BAAA;AAAA,UACxB,UAAU,EAAE,WAAW,EAAE,OAAO,6BAA2B;AAAA,UAC3D,WAAW,EAAE,OAAO,2BAAA;AAAA,QAA2B;AAAA,QAEjD,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,eAAe,EAAE,OAAO,2BAAA;AAAA,UACxB,UAAU,EAAE,WAAW,EAAE,OAAO,6BAA2B;AAAA,UAC3D,WAAW,EAAE,OAAO,2BAAA;AAAA,QAA2B;AAAA,QAEjD,QAAQ,CAAC;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN;AAAA,UACA,WAAW,KAAK,YAAY;AAAA,YAC1B,MAAM;AAAA,YACN,WAAW,EAAE,OAAO,4BAA4B,OAAO,IAAA;AAAA,UAAI,IACzD,EAAE,MAAM,MAAA;AAAA,QAAM,CACnB;AAAA,MAAA;AAAA,IAEL,GAAG,CAAC,MAAM,YAAY,YAAY,YAAY,SAAS,YAAY,cAAc,cAAc,CAAC;AAEhG,QAAI,CAAC,QAAS,QAAO,oBAAC,YAAA,EAAW,KAAU,MAAK,WAAU,QAAQ,CAAA,GAAI,OAAc,OAAc,QAAgB,SAAO,MAAC,WAAsB;AAChJ,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,QAAQ,CAAA;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AA0CM,MAAM,eAAe,KAAK;AAAA,EAC/B,SAASC,cAAa;AAAA,IACpB,OAAO,CAAA;AAAA,IACP;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAa;AAAA,IACb,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA,EAAA,GACC,KAAK;AACN,UAAM,EAAE,QAAQ,KAAA,IAAS,SAAA;AACzB,UAAM,eAAe,qBAAA;AACrB,UAAM,cAAc,oBAAA;AACC,WAAO,OAAO,KAAK;AACjB,WAAO,OAAO,KAAK;AACnB,WAAO,OAAO,KAAK;AAG1C,UAAM,iBAAiB,QAAQ,MAAM;AACnC,YAAM,cAAqB,CAAA;AAE3B,WAAK,QAAQ,CAAC,MAAM,QAAQ;AAC1B,cAAM,YAAY,KAAK,SAAS,sBAAsB,MAAM,MAAM,sBAAsB,MAAM,MAAM;AAGpG,oBAAY,KAAK;AAAA,UACf,MAAM;AAAA,UACN,MAAM,KAAK;AAAA,UACX,kBAAkB;AAAA,UAClB,MAAM,KAAK,KAAK,IAAI,CAAA,MAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAAA,UACxC,WAAW;AAAA,YACT,OAAO;AAAA,YACP,OAAO,KAAK,aAAa;AAAA,YACzB,MAAM,KAAK,aAAa;AAAA,YACxB,SAAS;AAAA,UAAA;AAAA,QACX,CACD;AAGD,YAAI,KAAK,eAAe;AACtB,sBAAY,KAAK;AAAA,YACf,MAAM;AAAA,YACN,MAAM,GAAG,KAAK,IAAI;AAAA,YAClB,kBAAkB;AAAA,YAClB,MAAM;AAAA,cACJ,EAAE,OAAO,CAAC,KAAK,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,QAAA;AAAA,cACjE,EAAE,OAAO,CAAC,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC,EAAE,GAAG,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC,EAAE,GAAG,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC,EAAE,CAAC,GAAG,MAAM,MAAA;AAAA,YAAM;AAAA,YAElI,YAAY;AAAA,YACZ,WAAW,EAAE,OAAO,UAAA;AAAA,UAAU,CAC/B;AAAA,QACH;AAAA,MACF,CAAC;AAED,aAAO;AAAA,QACL,SAAS;AAAA,UACP,MAAM;AAAA,UACN,GAAG;AAAA,UACH,WAAY,CAAC,WAAgB;AAC3B,kBAAM,IAAI,OAAO,QAAQ,CAAA;AACzB,gBAAI,OAAO,eAAe,UAAU;AAClC,qBAAO,gCAAgC,OAAO,UAAU;AAAA,YAC1D;AACA,kBAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC;AACrC,mBAAO,gCAAgC,EAAE,QAAQ,OAAO,UAAU;AAAA,qBACzD,UAAU,KAAK,EAAE,QAAQ,CAAC,CAAC;AAAA,qBAC3B,UAAU,KAAK,EAAE,QAAQ,CAAC,CAAC;AAAA,qBAC3B,UAAU,KAAK,EAAE,QAAQ,CAAC,CAAC;AAAA,UACtC;AAAA,QAAA;AAAA,QAEF,QAAQ;AAAA,UACN,MAAM,KAAK,SAAS;AAAA,UACpB,KAAK;AAAA,UACL,GAAG;AAAA,QAAA;AAAA,QAEL,QAAQ;AAAA,UACN,UAAU;AAAA,UACV,WAAW;AAAA,UACX,UAAU;AAAA,UACV,aAAa;AAAA,YACX;AAAA,YACA,iBAAiB;AAAA,YACjB,UAAU;AAAA,YACV,OAAO;AAAA,YACP,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB,iBAAiB;AAAA,UAAA;AAAA,UAEnB,OAAO;AAAA,YACL,MAAM,EAAE,WAAW,KAAK,QAAQ,MAAA;AAAA,YAChC,SAAS,EAAE,WAAW,IAAA;AAAA,UAAI;AAAA,UAE5B,YAAY;AAAA,YACV,QAAQ;AAAA,YACR,OAAO,EAAE,QAAQ,gBAAgB,WAAW,IAAA;AAAA,UAAI;AAAA,QAClD;AAAA,QAEF,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,eAAe,EAAE,OAAO,2BAAA;AAAA,UACxB,UAAU,EAAE,WAAW,EAAE,OAAO,6BAA2B;AAAA,UAC3D,WAAW,EAAE,OAAO,2BAAA;AAAA,UACpB,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE,OAAO,6BAA2B;AAAA,QAAE;AAAA,QAEhF,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,eAAe,EAAE,OAAO,2BAAA;AAAA,UACxB,UAAU,EAAE,WAAW,EAAE,OAAO,6BAA2B;AAAA,UAC3D,WAAW,EAAE,OAAO,2BAAA;AAAA,UACpB,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE,OAAO,6BAA2B;AAAA,QAAE;AAAA,QAEhF,SAAS;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,eAAe,EAAE,OAAO,2BAAA;AAAA,UACxB,UAAU,EAAE,WAAW,EAAE,OAAO,6BAA2B;AAAA,UAC3D,WAAW,EAAE,OAAO,2BAAA;AAAA,UACpB,WAAW,EAAE,MAAM,UAAU,WAAW,EAAE,OAAO,6BAA2B;AAAA,QAAE;AAAA,QAEhF,QAAQ;AAAA,MAAA;AAAA,IAEZ,GAAG,CAAC,MAAM,UAAU,YAAY,YAAY,YAAY,gBAAgB,YAAY,cAAc,WAAW,CAAC;AAE9G,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,QAAQ,CAAA;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AA4DM,MAAM,wBAAwB,KAAK;AAAA,EACxC,SAASC,uBAAsB;AAAA,IAC7B,OAAO,CAAA;AAAA,IACP;AAAA,IACA,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR;AAAA,EAAA,GACC,KAAK;AACN,UAAM,UAAU,kBAAA;AAChB,UAAM,eAAe,qBAAA;AACA,wBAAA;AAErB,UAAM,iBAAyC;AAAA,MAC7C,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,UAAU;AAAA,MACV,SAAS;AAAA,IAAA;AAGX,UAAM,iBAAiB,QAAQ,MAAM;AAEnC,YAAM,cAAc,KAAK,IAAI,CAAA,QAAO;AAClC,cAAM,QAAS,IAAI,UAAU,KAAK,KAAM;AACxC,cAAM,QAAS,IAAI,YAAY,KAAK,KAAM;AAC1C,cAAM,IAAK,IAAI,QAAQ,WAAY;AAEnC,eAAO;AAAA,UACL,MAAM,IAAI;AAAA,UACV,OAAO;AAAA,YACL,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AAAA,YACpC,IAAI,KAAK,IAAI,KAAK;AAAA,YAClB,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AAAA,UAAA;AAAA,UAEtC,WAAW,EAAE,OAAO,IAAI,SAAS,eAAe,IAAI,YAAY,SAAS,EAAA;AAAA,UACzE,YAAY,IAAI,QAAQ;AAAA,UACxB,UAAU,IAAI;AAAA,UACd,SAAS,IAAI;AAAA,UACb,WAAW,IAAI;AAAA,UACf,OAAO,IAAI;AAAA,QAAA;AAAA,MAEf,CAAC;AAGD,YAAM,aAAoB,CAAA;AAC1B,UAAI,gBAAgB;AAClB,SAAC,MAAM,KAAK,MAAM,CAAG,EAAE,QAAQ,CAAA,aAAY;AACzC,gBAAM,IAAI,WAAW;AACrB,gBAAM,aAAa,MAAM,KAAK,EAAE,QAAQ,GAAA,GAAM,CAAC,GAAG,MAAM;AACtD,kBAAM,QAAS,IAAI,KAAM,KAAK,KAAK;AACnC,mBAAO,CAAC,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,IAAI,KAAK,CAAC;AAAA,UACrD,CAAC;AACD,qBAAW,KAAK;AAAA,YACd,MAAM;AAAA,YACN,kBAAkB;AAAA,YAClB,MAAM;AAAA,YACN,WAAW,EAAE,OAAO,4BAA4B,OAAO,EAAA;AAAA,YACvD,QAAQ;AAAA,UAAA,CACT;AAAA,QACH,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,MAAM;AAAA,UACN,GAAG;AAAA,UACH,WAAY,CAAC,WAAgB;;AAC3B,kBAAM,IAAI,OAAO,QAAQ,CAAA;AACzB,gBAAI,OAAO,iEAAiE,EAAE,IAAI;AAClF,oBAAQ,sGAAsG,EAAE,YAAY,SAAS;AACrI,oBAAQ,sDAAqD,OAAE,YAAF,mBAAW,QAAQ,EAAE;AAClF,oBAAQ,wDAAuD,OAAE,cAAF,mBAAa,QAAQ,EAAE;AACtF,oBAAQ,0EAAyE,OAAE,UAAF,mBAAS,QAAQ,EAAE;AACpG,mBAAO;AAAA,UACT;AAAA,QAAA;AAAA,QAEF,QAAQ;AAAA,UACN,UAAU;AAAA,UACV,WAAW;AAAA,UACX,UAAU;AAAA,UACV,aAAa;AAAA,YACX;AAAA,YACA,iBAAiB;AAAA,YACjB,UAAU;AAAA,YACV,OAAO;AAAA,YACP,MAAM;AAAA,YACN,mBAAmB;AAAA,YACnB,iBAAiB;AAAA,UAAA;AAAA,UAEnB,OAAO;AAAA,YACL,MAAM,EAAE,WAAW,KAAK,QAAQ,MAAA;AAAA,YAChC,SAAS,EAAE,WAAW,IAAA;AAAA,UAAI;AAAA,UAE5B,YAAY,EAAE,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,WAAW,KAAA,EAAK;AAAA,QAAE;AAAA,QAEvE,SAAS,EAAE,MAAM,SAAS,MAAM,QAAQ,KAAK,MAAM,KAAK,KAAK,WAAW,EAAE,MAAM,MAAA,GAAS,WAAW,EAAE,MAAM,QAAM;AAAA,QAClH,SAAS,EAAE,MAAM,SAAS,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,WAAW,EAAE,MAAM,MAAA,GAAS,WAAW,EAAE,MAAM,QAAM;AAAA,QAC/G,SAAS,EAAE,MAAM,SAAS,MAAM,SAAS,KAAK,MAAM,KAAK,KAAK,WAAW,EAAE,MAAM,MAAA,GAAS,WAAW,EAAE,MAAM,QAAM;AAAA,QACnH,QAAQ,CAAC,GAAG,YAAY,EAAE,MAAM,aAAa,kBAAkB,eAAe,MAAM,aAAa,YAAY,IAAI;AAAA,MAAA;AAAA,IAErH,GAAG,CAAC,MAAM,UAAU,gBAAgB,YAAY,gBAAgB,YAAY,CAAC;AAE7E,QAAI,CAAC,QAAS,QAAO,oBAAC,YAAA,EAAW,KAAU,MAAK,WAAU,QAAQ,CAAA,GAAI,OAAc,OAAc,QAAgB,SAAO,MAAC,WAAsB;AAChJ,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QAAW;AAAA,QAAU,MAAK;AAAA,QAAU,QAAQ,CAAA;AAAA,QAAI;AAAA,QAAc;AAAA,QAAc;AAAA,QAC3E;AAAA,QAAkB;AAAA,QAAsB;AAAA,QACxC,QAAQ;AAAA,QAAe;AAAA,MAAA;AAAA,IAAA;AAAA,EAE7B;AACF,CAAC;AA8CM,MAAM,uBAAuB,KAAK;AAAA,EACvC,SAASC,sBAAqB;AAAA,IAC5B,WAAW,CAAA;AAAA,IAAI,YAAY,CAAA;AAAA,IAAI,kBAAkB,CAAA;AAAA,IAAI;AAAA,IAAO,QAAQ;AAAA,IAAQ,SAAS;AAAA,IACrF,aAAa;AAAA,IAAM,aAAa;AAAA,IAAO,UAAU;AAAA,IAAO,YAAY;AAAA,IACpE,QAAQ;AAAA,IAAe;AAAA,EAAA,GACtB,KAAK;AACN,UAAM,UAAU,kBAAA;AAChB,UAAM,eAAe,qBAAA;AACrB,UAAM,cAAc,oBAAA;AACpB,UAAM,EAAE,QAAQ,KAAA,IAAS,SAAA;AACzB,UAAM,eAAe,OAAO,OAAO,KAAK;AACxC,UAAM,iBAAiB,OAAO,OAAO,KAAK;AAC1C,UAAM,gBAAgB,OAAO,OAAO,KAAK;AACzC,UAAM,UAAU,SAAS,SAAS,2BAA2B;AAE7D,UAAM,gBAAwC,EAAE,OAAO,WAAW,MAAM,WAAW,kBAAkB,WAAW,QAAQ,UAAA;AACxH,UAAM,iBAAyC,EAAE,WAAW,WAAW,SAAS,WAAW,OAAO,WAAW,MAAM,WAAW,MAAM,UAAA;AAEpI,UAAM,iBAAiB,QAAQ,MAAM;AACnC,YAAM,cAAqB,CAAA;AAC3B,sBAAgB,QAAQ,CAAA,UAAS;AAC/B,oBAAY,KAAK;AAAA,UAAE,MAAM;AAAA,UAAU,MAAM,MAAM;AAAA,UAAM,kBAAkB;AAAA,UACrE,MAAM,MAAM,KAAK,IAAI,CAAA,MAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAAA,UAAG,WAAW,EAAE,OAAO,MAAM,SAAS,4BAA4B,OAAO,GAAG,MAAM,SAAA;AAAA,UAAY,QAAQ;AAAA,QAAA,CAAM;AAAA,MACzJ,CAAC;AACD,eAAS,QAAQ,CAAC,SAAS,QAAQ;AACjC,cAAM,QAAQ,QAAQ,SAAS,cAAc,QAAQ,IAAI,KAAK,sBAAsB,MAAM,MAAM,sBAAsB,MAAM,MAAM;AAClI,oBAAY,KAAK;AAAA,UAAE,MAAM;AAAA,UAAU,MAAM,QAAQ;AAAA,UAAM,kBAAkB;AAAA,UACvE,MAAM,QAAQ,KAAK,IAAI,CAAA,MAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AAAA,UAAG,WAAW,EAAE,OAAO,OAAO,QAAQ,SAAS,SAAS,IAAI,EAAA;AAAA,QAAE,CAAG;AAAA,MAChH,CAAC;AACD,UAAI,UAAU,SAAS,GAAG;AACxB,oBAAY,KAAK;AAAA,UAAE,MAAM;AAAA,UAAa,MAAM;AAAA,UAAa,kBAAkB;AAAA,UACzE,MAAM,UAAU,IAAI,CAAA,QAAO;AAAA,YAAE,MAAM,GAAG;AAAA,YAAM,OAAO,CAAC,GAAG,SAAS,GAAG,GAAG,SAAS,GAAG,GAAG,SAAS,CAAC;AAAA,YAC7F,WAAW,EAAE,OAAO,eAAe,GAAG,IAAI,KAAK,OAAA;AAAA,YAAU,YAAY,GAAG,SAAS,SAAS,KAAK;AAAA,YAAI,QAAQ,GAAG;AAAA,YAAQ,KAAK,GAAG;AAAA,YAAK,cAAc,GAAG;AAAA,UAAA,EAAO;AAAA,UAC7J,OAAO,EAAE,MAAM,MAAM,WAAW,CAAC;;AAAW,2BAAE,SAAF,mBAAQ;AAAA,aAAM,WAAW,EAAE,OAAO,cAAc,UAAU,IAAI,iBAAiB,SAAS,SAAS,CAAC,GAAG,CAAC,EAAA,EAAE;AAAA,QAAE,CAAG;AAAA,MAC7J;AACA,YAAM,cAAc,SAAS,OAAO,CAAC,KAAK,MAAM,OAAO,EAAE,UAAU,IAAI,CAAC,IAAI,UAAU,OAAO,CAAC,KAAK,MAAM,OAAO,EAAE,UAAU,IAAI,CAAC;AACjI,aAAO;AAAA,QACL,SAAS;AAAA,UAAE,MAAM;AAAA,UAAM,GAAG;AAAA,UACxB,WAAY,CAAC,WAAgB;AAAE,kBAAM,IAAI,OAAO,QAAQ,CAAA;AAAI,gBAAI,OAAO,eAAe,UAAU;AAAE,oBAAM,MAAM,SAAS,KAAK,OAAK,EAAE,SAAS,OAAO,UAAU;AAAG,qBAAO,gCAAgC,OAAO,UAAU,UAAS,2BAAK,UAAS,kCAAkC,IAAI,OAAO,QAAQ,CAAC,CAAC,gBAAgB,EAAE;AAAA,YAAI;AAC1T,mBAAO,kDAAkD,EAAE,IAAI,SAAS,EAAE,SAAS,kCAAkC,EAAE,OAAO,QAAQ,CAAC,CAAC,gBAAgB,EAAE,GAAG,EAAE,MAAM,aAAa,EAAE,IAAI,QAAQ,CAAC,CAAC,gBAAgB,EAAE;AAAA,UAAI;AAAA,QAAA;AAAA,QAC5N,QAAQ,EAAE,MAAM,MAAM,KAAK,IAAI,GAAG,YAAA;AAAA,QAClC,SAAS,cAAc,cAAc,IAAI,CAAC,EAAE,MAAM,QAAQ,OAAO,IAAI,KAAK,IAAI,OAAO,EAAE,MAAM,aAAa,YAAY,QAAQ,CAAC,CAAC,SAAS,MAAM,WAAW,UAAU,IAAI,YAAY,OAAA,EAAO,CAAG,IAAI;AAAA,QAClM,QAAQ,EAAE,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,aAAa,EAAE,YAAY,iBAAiB,GAAG,UAAU,KAAK,OAAO,IAAI,MAAM,MAAM,OAAO,EAAE,MAAM,EAAE,WAAW,OAAO,SAAS,EAAE,WAAW,IAAA,KAAS,YAAY,EAAE,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,WAAW,KAAA,IAAO;AAAA,QACnR,SAAS,EAAE,MAAM,SAAS,MAAM,UAAU,eAAe,EAAE,OAAO,eAAA,GAAkB,WAAW,EAAE,OAAO,eAAe,WAAW,CAAC,MAAc,EAAE,QAAQ,CAAC,EAAA,GAAK,WAAW,EAAE,MAAM,MAAM,WAAW,EAAE,OAAO,2BAAA,IAA6B;AAAA,QAC3O,SAAS,EAAE,MAAM,SAAS,MAAM,UAAU,eAAe,EAAE,OAAO,eAAA,GAAkB,WAAW,EAAE,OAAO,eAAe,WAAW,CAAC,MAAc,EAAE,QAAQ,CAAC,EAAA,GAAK,WAAW,EAAE,MAAM,MAAM,WAAW,EAAE,OAAO,2BAAA,IAA6B;AAAA,QAC3O,SAAS,EAAE,MAAM,SAAS,MAAM,UAAU,eAAe,EAAE,OAAO,eAAA,GAAkB,WAAW,EAAE,OAAO,eAAe,WAAW,CAAC,MAAc,EAAE,QAAQ,CAAC,EAAA,GAAK,WAAW,EAAE,MAAM,MAAM,WAAW,EAAE,OAAO,2BAAA,IAA6B;AAAA,QAC3O,QAAQ;AAAA,MAAA;AAAA,IAEZ,GAAG,CAAC,UAAU,WAAW,iBAAiB,YAAY,YAAY,eAAe,gBAAgB,cAAc,aAAa,cAAc,gBAAgB,eAAe,OAAO,CAAC;AAEjL,QAAI,CAAC,QAAS,QAAO,oBAAC,YAAA,EAAW,KAAU,MAAK,WAAU,QAAQ,CAAA,GAAI,OAAc,OAAc,QAAgB,SAAO,MAAC,WAAsB;AAChJ,+BAAQ,YAAA,EAAW,KAAU,MAAK,WAAU,QAAQ,IAAI,OAAc,OAAc,QAAgB,SAAkB,WAAsB,gBAAuC,QAAQ,eAAe,aAA0B;AAAA,EACtO;AACF,CAAC;AAmCM,MAAM,yBAAyB,KAAK;AAAA,EACzC,SAASC,wBAAuB;AAAA,IAC9B,OAAO,CAAA;AAAA,IAAI;AAAA,IAAO,QAAQ;AAAA,IAAQ,SAAS;AAAA,IAAK,OAAO;AAAA,IAAS,sBAAsB;AAAA,IACtF,aAAa;AAAA,IAAO,UAAU;AAAA,IAAO,YAAY;AAAA,IAAI,QAAQ;AAAA,IAAe;AAAA,EAAA,GAC3E,KAAK;AACN,UAAM,UAAU,kBAAA;AAChB,UAAM,eAAe,qBAAA;AACrB,UAAM,cAAc,oBAAA;AAEpB,UAAM,iBAAiB,QAAQ,MAAM;AACnC,YAAM,cAAqB,CAAA;AAC3B,UAAI,SAAS,WAAW,KAAK,SAAS,GAAG;AACvC,cAAM,WAAW,KAAK,OAAO,OAAK,EAAE,KAAK,EAAE,IAAI,CAAA,MAAK,CAAC,EAAE,MAAO,MAAM,EAAE,MAAO,OAAO,EAAE,MAAO,GAAG,CAAC;AACjG,oBAAY,KAAK,EAAE,MAAM,UAAU,MAAM,iBAAiB,kBAAkB,eAAe,MAAM,UAAU,WAAW,EAAE,OAAO,WAAW,OAAO,EAAA,GAAK;AACtJ,YAAI,SAAS,SAAS,GAAG;AACvB,sBAAY,KAAK,EAAE,MAAM,aAAa,MAAM,aAAa,kBAAkB,eAAe,MAAM;AAAA,YAC9F,EAAE,OAAO,SAAS,CAAC,GAAG,MAAM,SAAS,WAAW,EAAE,OAAO,YAAU;AAAA,YACnE,EAAE,OAAO,SAAS,SAAS,SAAS,CAAC,GAAG,MAAM,OAAO,WAAW,EAAE,OAAO,YAAU;AAAA,UAAE,GACpF,YAAY,IAAI;AAAA,QACrB;AACA,YAAI,qBAAqB;AACvB,gBAAM,cAAc,KAAK,OAAO,CAAC,GAAG,MAAM,IAAI,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK;AACzF,cAAI,YAAY,SAAS,GAAG;AAC1B,wBAAY,KAAK,EAAE,MAAM,aAAa,MAAM,gBAAgB,kBAAkB,eAAe,MAAM,YAAY,IAAI,CAAA,OAAM,EAAE,OAAO,CAAC,EAAE,MAAO,MAAM,EAAE,MAAO,OAAO,EAAE,MAAO,GAAG,GAAG,MAAM,EAAE,MAAM,WAAW,EAAE,OAAO,UAAA,IAAc,GAAG,YAAY,IAAI,QAAQ,WAAW;AAAA,UACzQ;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UAAE,MAAM;AAAA,UAAM,GAAG;AAAA,UACxB,WAAY,CAAC,WAAgB;AAAE,kBAAM,IAAI,OAAO,QAAQ,CAAA;AAAI,kBAAM,CAAC,MAAM,OAAO,GAAG,IAAI,EAAE,SAAS,CAAC,GAAG,GAAG,CAAC;AAAG,mBAAO,kDAAkD,EAAE,QAAQ,OAAO,UAAU,oBAAoB,KAAK,QAAQ,CAAC,CAAC,sBAAsB,MAAM,QAAQ,CAAC,CAAC,oBAAoB,IAAI,QAAQ,CAAC,CAAC;AAAA,UAAW;AAAA,QAAA;AAAA,QACzT,QAAQ,EAAE,MAAM,MAAM,KAAK,IAAI,GAAG,YAAA;AAAA,QAClC,QAAQ,EAAE,UAAU,KAAK,WAAW,KAAK,UAAU,KAAK,aAAa,EAAE,YAAY,UAAU,KAAK,OAAO,IAAI,MAAM,GAAA,GAAM,OAAO,EAAE,MAAM,EAAE,WAAW,IAAA,GAAO,SAAS,EAAE,WAAW,IAAA,IAAM;AAAA,QACxL,SAAS,EAAE,MAAM,SAAS,MAAM,YAAY,eAAe,EAAE,OAAO,2BAAA,GAA8B,WAAW,EAAE,OAAO,2BAAA,GAA8B,WAAW,EAAE,MAAM,MAAM,WAAW,EAAE,OAAO,2BAAA,IAA6B;AAAA,QAC9N,SAAS,EAAE,MAAM,SAAS,MAAM,aAAa,eAAe,EAAE,OAAO,2BAAA,GAA8B,WAAW,EAAE,OAAO,2BAAA,GAA8B,WAAW,EAAE,MAAM,MAAM,WAAW,EAAE,OAAO,2BAAA,IAA6B;AAAA,QAC/N,SAAS,EAAE,MAAM,SAAS,MAAM,WAAW,eAAe,EAAE,OAAO,2BAAA,GAA8B,WAAW,EAAE,OAAO,2BAAA,GAA8B,WAAW,EAAE,MAAM,MAAM,WAAW,EAAE,OAAO,2BAAA,IAA6B;AAAA,QAC7N,QAAQ;AAAA,MAAA;AAAA,IAEZ,GAAG,CAAC,MAAM,MAAM,qBAAqB,YAAY,cAAc,WAAW,CAAC;AAC3E,QAAI,CAAC,QAAS,QAAO,oBAAC,YAAA,EAAW,KAAU,MAAK,WAAU,QAAQ,CAAA,GAAI,OAAc,OAAc,QAAgB,SAAO,MAAC,WAAsB;AAChJ,+BAAQ,YAAA,EAAW,KAAU,MAAK,WAAU,QAAQ,IAAI,OAAc,OAAc,QAAgB,SAAkB,WAAsB,gBAAuC,QAAQ,eAAe,aAA0B;AAAA,EACtO;AACF,CAAC;AA0CM,MAAM,+BAA+B,KAAK;AAAA,EAC/C,SAASC,8BAA6B;AAAA,IACpC,SAAS,CAAA;AAAA,IAAI,eAAe,CAAA;AAAA,IAAI;AAAA,IAAO,QAAQ;AAAA,IAAQ,SAAS;AAAA,IAAK,kBAAkB;AAAA,IACvF,mBAAmB;AAAA,IAAG,oBAAoB;AAAA,IAAG,aAAa;AAAA,IAAO,UAAU;AAAA,IAAO,YAAY;AAAA,IAC9F,QAAQ;AAAA,IAAe;AAAA,EAAA,GACtB,KAAK;AACN,UAAM,UAAU,kBAAA;AAChB,UAAM,eAAe,qBAAA;AACrB,UAAM,cAAc,oBAAA;AACpB,UAAM,EAAE,QAAQ,KAAA,IAAS,SAAA;AACH,WAAO,OAAO,KAAK;AACjB,WAAO,OAAO,KAAK;AACpB,WAAO,OAAO,KAAK;AAG1C,UAAM,iBAAiB,QAAQ,MAAM;AACnC,YAAM,cAAqB,CAAA;AAC3B,UAAI,gBAAgB,aAAa,SAAS,GAAG;AAC3C,oBAAY,KAAK,EAAE,MAAM,UAAU,MAAM,iBAAiB,kBAAkB,eAAe,MAAM,aAAa,IAAI,CAAA,MAAK,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,WAAW,EAAE,OAAO,WAAW,OAAO,EAAA,EAAE,CAAG;AAAA,MACtL;AACA,YAAM,YAAY,OAAO,IAAI,CAAA,QAAO;AAClC,cAAM,QAAQ,IAAI,eAAe,oBAAoB,YAAY,IAAI,eAAe,mBAAmB,YAAY;AACnH,eAAO,EAAE,MAAM,GAAG,IAAI,OAAO,MAAM,IAAI,SAAS,IAAI,OAAO,CAAC,IAAI,SAAS,GAAG,IAAI,SAAS,GAAG,IAAI,SAAS,CAAC,GAAG,WAAW,EAAE,MAAA,GAAS,YAAY,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,eAAe,CAAC,CAAC,GAAG,GAAG,IAAA;AAAA,MAC1M,CAAC;AACD,kBAAY,KAAK,EAAE,MAAM,aAAa,MAAM,gBAAgB,kBAAkB,eAAe,MAAM,WAAW,QAAQ,UAAU,UAAU,EAAE,WAAW,EAAE,aAAa,QAAQ,aAAa,EAAA,EAAE,GAAK;AAClM,UAAI,iBAAiB;AACnB,eAAO,OAAO,CAAA,MAAK,EAAE,WAAW,EAAE,QAAQ,CAAA,QAAO;AAC/C,gBAAM,EAAE,GAAG,GAAG,EAAA,IAAM,IAAI;AAAU,gBAAM,EAAE,IAAI,IAAI,GAAA,IAAO,IAAI;AAC7D,sBAAY,KAAK,EAAE,MAAM,UAAU,kBAAkB,eAAe,MAAM,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG,WAAW,EAAE,OAAO,4BAA4B,OAAO,EAAA,GAAK,QAAQ,MAAM;AACtL,sBAAY,KAAK,EAAE,MAAM,UAAU,kBAAkB,eAAe,MAAM,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,GAAG,WAAW,EAAE,OAAO,4BAA4B,OAAO,EAAA,GAAK,QAAQ,MAAM;AACtL,sBAAY,KAAK,EAAE,MAAM,UAAU,kBAAkB,eAAe,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,EAAE,GAAG,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,GAAG,WAAW,EAAE,OAAO,4BAA4B,OAAO,EAAA,GAAK,QAAQ,MAAM;AAAA,QACxL,CAAC;AAAA,MACH;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UAAE,MAAM;AAAA,UAAM,GAAG;AAAA,UACxB,WAAY,CAAC,WAAgB;;AAAE,kBAAM,IAAI,OAAO,QAAQ,CAAA;AAAI,gBAAI,OAAO,eAAe,SAAU,QAAO;AAAI,kBAAM,UAAU,EAAE,eAAe,oBAAoB,YAAY,EAAE,eAAe,mBAAmB,YAAY;AAAW,mBAAO,kDAAkD,EAAE,IAAI,2BAA2B,OAAO,qBAAoB,OAAE,iBAAF,mBAAgB,QAAQ,EAAE,YAAY,EAAE,gBAAgB,SAAY,sBAAsB,EAAE,cAAc,KAAK,cAAc,CAAC,CAAC,YAAY,EAAE,GAAG,EAAE,mBAAmB,uBAAuB,EAAE,iBAAiB,QAAQ,CAAC,CAAC,gBAAgB,EAAE;AAAA,UAAI;AAAA,QAAA;AAAA,QAC7kB,QAAQ,EAAE,MAAM,MAAM,KAAK,IAAI,GAAG,YAAA;AAAA,QAClC,QAAQ,EAAE,UAAU,KAAK,WAAW,KAAK,UAAU,KAAK,aAAa,EAAE,YAAY,UAAU,KAAK,OAAO,IAAI,MAAM,GAAA,GAAM,OAAO,EAAE,MAAM,EAAE,WAAW,OAAO,SAAS,EAAE,WAAW,IAAA,KAAS,YAAY,EAAE,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,WAAW,KAAA,IAAO;AAAA,QAChQ,SAAS,EAAE,MAAM,SAAS,MAAM,UAAU,eAAe,EAAE,OAAO,2BAAA,GAA8B,WAAW,EAAE,OAAO,2BAAA,GAA8B,WAAW,EAAE,MAAM,MAAM,WAAW,EAAE,OAAO,2BAAA,IAA6B;AAAA,QAC5N,SAAS,EAAE,MAAM,SAAS,MAAM,UAAU,eAAe,EAAE,OAAO,2BAAA,GAA8B,WAAW,EAAE,OAAO,2BAAA,GAA8B,WAAW,EAAE,MAAM,MAAM,WAAW,EAAE,OAAO,2BAAA,IAA6B;AAAA,QAC5N,SAAS,EAAE,MAAM,SAAS,MAAM,UAAU,eAAe,EAAE,OAAO,2BAAA,GAA8B,WAAW,EAAE,OAAO,2BAAA,GAA8B,WAAW,EAAE,MAAM,MAAM,WAAW,EAAE,OAAO,2BAAA,IAA6B;AAAA,QAC5N,QAAQ;AAAA,MAAA;AAAA,IAEZ,GAAG,CAAC,QAAQ,cAAc,iBAAiB,kBAAkB,mBAAmB,YAAY,cAAc,WAAW,CAAC;AACtH,QAAI,CAAC,QAAS,QAAO,oBAAC,YAAA,EAAW,KAAU,MAAK,WAAU,QAAQ,CAAA,GAAI,OAAc,OAAc,QAAgB,SAAO,MAAC,WAAsB;AAChJ,+BAAQ,YAAA,EAAW,KAAU,MAAK,WAAU,QAAQ,IAAI,OAAc,OAAc,QAAgB,SAAkB,WAAsB,gBAAuC,QAAQ,eAAe,aAA0B;AAAA,EACtO;AACF,CAAC;AAiCM,MAAM,wBAAwB,KAAK;AAAA,EACxC,SAASC,uBAAsB;AAAA,IAC7B,OAAO,EAAE,WAAW,GAAC;AAAA,IAA2B;AAAA,IAAO,QAAQ;AAAA,IAAQ,SAAS;AAAA,IAAK,iBAAiB;AAAA,IAAM,aAAa;AAAA,IACzH,UAAU;AAAA,IAAO,YAAY;AAAA,IAAI,QAAQ;AAAA,IAAe;AAAA,EAAA,GACvD,KAAK;AACN,UAAM,UAAU,kBAAA;AAChB,UAAM,EAAE,QAAQ,KAAA,IAAS,SAAA;AACzB,UAAM,eAAe,qBAAA;AACrB,UAAM,eAAe,OAAO,OAAO,KAAK;AACxC,UAAM,iBAAiB,OAAO,OAAO,KAAK;AAC1C,UAAM,gBAAgB,OAAO,OAAO,KAAK;AACzC,UAAM,UAAU,SAAS,SAAS,2BAA2B;AAC7D,UAAM,cAAc,oBAAA;AAEpB,UAAM,iBAAyC,EAAE,SAAS,yBAAyB,OAAO,0BAA0B,QAAQ,2BAA2B,WAAW,yBAAA;AAClK,UAAM,iBAAiB,QAAQ,MAAM;AACnC,YAAM,cAAqB,CAAA;AAC3B,YAAM,aAAa,CAAC,KAAa,KAAa,QAAgB,CAAC,KAAK,MAAM,KAAK,GAAG;AAClF,WAAK,UAAU,QAAQ,CAAA,aAAY;AACjC,cAAM,QAAQ,SAAS,SAAS,eAAe,SAAS,IAAI,KAAK;AACjE,cAAM,YAAY,SAAS,gBAAgB,IAAI,OAAK,WAAW,EAAE,KAAK,EAAE,KAAK,SAAS,cAAc,CAAC,CAAC,CAAC;AACvG,YAAI,UAAU,SAAS,aAAa,KAAK,UAAU,CAAC,CAAC;AACrD,oBAAY,KAAK,EAAE,MAAM,UAAU,MAAM,GAAG,SAAS,IAAI,YAAY,kBAAkB,eAAe,MAAM,WAAW,WAAW,EAAE,OAAO,OAAO,EAAA,GAAK;AACvJ,cAAM,YAAY,SAAS,gBAAgB,IAAI,OAAK,WAAW,EAAE,KAAK,EAAE,KAAK,SAAS,cAAc,CAAC,CAAC,CAAC;AACvG,YAAI,UAAU,SAAS,aAAa,KAAK,UAAU,CAAC,CAAC;AACrD,oBAAY,KAAK,EAAE,MAAM,UAAU,MAAM,GAAG,SAAS,IAAI,cAAc,kBAAkB,eAAe,MAAM,WAAW,WAAW,EAAE,OAAO,OAAO,GAAG,MAAM,SAAA,GAAY;AAAA,MAC3K,CAAC;AACD,UAAI,kBAAkB,KAAK,cAAc,KAAK,WAAW,SAAS,GAAG;AACnE,oBAAY,KAAK,EAAE,MAAM,UAAU,MAAM,cAAc,kBAAkB,eAAe,MAAM,KAAK,WAAW,IAAI,CAAA,MAAK,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,GAAG,WAAW,EAAE,OAAO,QAAQ,OAAO,EAAA,GAAK;AAAA,MACxM;AACA,UAAI,KAAK,UAAU,KAAK,OAAO,SAAS,GAAG;AACzC,oBAAY,KAAK,EAAE,MAAM,aAAa,MAAM,UAAU,kBAAkB,eAAe,MAAM,KAAK,OAAO,IAAI,CAAA,OAAM,EAAE,MAAM,EAAE,MAAM,OAAO,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,WAAW,EAAE,OAAO,UAAA,GAAa,UAAU,EAAE,UAAU,MAAM,EAAE,KAAA,EAAO,GAAG,YAAY,IAAI,QAAQ,WAAW,OAAO,EAAE,MAAM,MAAM,WAAW,CAAC;;AAAW,yBAAE,SAAF,mBAAQ;AAAA,WAAM,WAAW,EAAE,OAAO,cAAc,UAAU,IAAI,iBAAiB,SAAS,SAAS,CAAC,GAAG,CAAC,EAAA,EAAE,GAAK;AAAA,MACvb;AACA,aAAO;AAAA,QACL,SAAS;AAAA,UAAE,MAAM;AAAA,UAAM,GAAG;AAAA,UACxB,WAAY,CAAC,WAAgB;AAAE,kBAAM,IAAI,OAAO,QAAQ,CAAA;AAAI,gBAAI,OAAO,eAAe,SAAU,QAAO,gCAAgC,OAAO,UAAU;AAAU,mBAAO,kDAAkD,EAAE,IAAI,SAAS,EAAE,WAAW,kBAAmB,EAAE,SAAU,QAAQ,CAAC,CAAC,cAAc,EAAE,GAAG,EAAE,OAAO,YAAY,EAAE,KAAK,QAAQ,CAAC,CAAC,YAAY,EAAE;AAAA,UAAI;AAAA,QAAA;AAAA,QAC7W,QAAQ,EAAE,MAAM,MAAM,KAAK,IAAI,GAAG,YAAA;AAAA,QAClC,QAAQ,EAAE,UAAU,KAAK,WAAW,IAAI,UAAU,KAAK,aAAa,EAAE,YAAY,UAAU,KAAK,OAAO,IAAI,MAAM,GAAA,GAAM,OAAO,EAAE,MAAM,EAAE,WAAW,IAAA,GAAO,SAAS,EAAE,WAAW,IAAA,IAAM;AAAA,QACvL,SAAS,EAAE,MAAM,SAAS,MAAM,iBAAiB,eAAe,EAAE,OAAO,eAAA,GAAkB,WAAW,EAAE,OAAO,cAAA,GAAiB,WAAW,EAAE,MAAM,MAAM,WAAW,EAAE,OAAO,2BAAA,IAA6B;AAAA,QAC1M,SAAS,EAAE,MAAM,SAAS,MAAM,iBAAiB,eAAe,EAAE,OAAO,eAAA,GAAkB,WAAW,EAAE,OAAO,cAAA,GAAiB,WAAW,EAAE,MAAM,MAAM,WAAW,EAAE,OAAO,2BAAA,IAA6B;AAAA,QAC1M,SAAS,EAAE,MAAM,SAAS,MAAM,gBAAgB,eAAe,EAAE,OAAO,eAAA,GAAkB,WAAW,EAAE,OAAO,cAAA,GAAiB,WAAW,EAAE,MAAM,MAAM,WAAW,EAAE,OAAO,2BAAA,IAA6B;AAAA,QACzM,QAAQ;AAAA,MAAA;AAAA,IAEZ,GAAG,CAAC,MAAM,gBAAgB,YAAY,gBAAgB,cAAc,aAAa,cAAc,gBAAgB,eAAe,OAAO,CAAC;AACtI,QAAI,CAAC,QAAS,QAAO,oBAAC,YAAA,EAAW,KAAU,MAAK,WAAU,QAAQ,CAAA,GAAI,OAAc,OAAc,QAAgB,SAAO,MAAC,WAAsB;AAChJ,+BAAQ,YAAA,EAAW,KAAU,MAAK,WAAU,QAAQ,IAAI,OAAc,OAAc,QAAgB,SAAkB,WAAsB,gBAAuC,QAAQ,eAAe,aAA0B;AAAA,EACtO;AACF,CAAC;AAmCM,MAAM,wBAAwB,KAAK;AAAA,EACxC,SAASC,uBAAsB;AAAA,IAC7B,WAAW,CAAA;AAAA,IAAI;AAAA,IAAO,QAAQ;AAAA,IAAQ,SAAS;AAAA,IAAK,UAAU;AAAA,IAAK,aAAa;AAAA,IAChF,UAAU;AAAA,IAAO,YAAY;AAAA,IAAI,QAAQ;AAAA,IAAe;AAAA,EAAA,GACvD,KAAK;AACN,UAAM,UAAU,kBAAA;AAChB,UAAM,EAAE,OAAA,IAAW,SAAA;AACnB,UAAM,eAAe,qBAAA;AACC,WAAO,OAAO,KAAK;AACjB,WAAO,OAAO,KAAK;AAC3C,UAAM,cAAc,oBAAA;AAEpB,UAAM,iBAAiB,QAAQ,MAAM;AACnC,YAAM,cAAqB,CAAA;AAC3B,eAAS,QAAQ,CAAC,SAAS,SAAS;AAClC,cAAM,QAAQ,QAAQ,SAAS,sBAAsB,MAAM,OAAO,sBAAsB,MAAM,MAAM;AACpG,cAAM,UAAU,KAAK,IAAI,GAAG,QAAQ,QAAQ,IAAI,CAAA,MAAK,EAAE,IAAI,GAAG,CAAC;AAC/D,cAAM,cAAc,QAAQ,QAAQ,OAAO,CAAA,MAAK,EAAE,QAAQ,OAAO,EAAE,IAAI,CAAA,MAAK;AAC1E,gBAAM,WAAY,EAAE,QAAQ,KAAK,KAAM;AAAK,gBAAM,SAAU,EAAE,MAAM,KAAK,KAAM;AAC/E,gBAAM,IAAI,KAAK,IAAI,IAAK,EAAE,OAAO,YAAY,UAAU,WAAY,KAAK,EAAE;AAC1E,iBAAO,EAAE,OAAO,CAAC,IAAI,KAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,MAAM,GAAG,IAAI,KAAK,IAAI,QAAQ,GAAG,IAAI,KAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,MAAM,CAAC,GAAG,MAAM,EAAE,MAAM,WAAW,EAAE,OAAO,SAAS,MAAI;AAAA,QACjL,CAAC;AACD,oBAAY,KAAK,EAAE,MAAM,aAAa,MAAM,QAAQ,MAAM,kBAAkB,eAAe,MAAM,aAAa,YAAY,GAAG;AAC7H,YAAI,QAAQ,WAAW;AACrB,gBAAM,WAAY,QAAQ,UAAU,QAAQ,KAAK,KAAM;AAAK,gBAAM,SAAU,QAAQ,UAAU,MAAM,KAAK,KAAM;AAC/G,sBAAY,KAAK,EAAE,MAAM,UAAU,MAAM,GAAG,QAAQ,IAAI,cAAc,kBAAkB,eAAe,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,MAAM,GAAG,MAAM,KAAK,IAAI,QAAQ,GAAG,MAAM,KAAK,IAAI,QAAQ,IAAI,KAAK,IAAI,MAAM,CAAC,CAAC,GAAG,WAAW,EAAE,OAAO,QAAQ,OAAO,EAAA,GAAK;AAAA,QAC1R;AAAA,MACF,CAAC;AACD,aAAO;AAAA,QACL,SAAS;AAAA,UAAE,MAAM;AAAA,UAAM,GAAG;AAAA,UACxB,WAAY,CAAC,WAAgB;AAAE,kBAAM,IAAI,OAAO,QAAQ,CAAA;AAAI,mBAAO,kDAAkD,OAAO,UAAU,SAAS,EAAE,SAAS,SAAY,oCAAoC,EAAE,KAAK,QAAQ,CAAC,CAAC,eAAe,EAAE;AAAA,UAAI;AAAA,QAAA;AAAA,QAClP,QAAQ,EAAE,MAAM,SAAS,SAAS,GAAG,KAAK,IAAI,GAAG,YAAA;AAAA,QACjD,QAAQ,EAAE,UAAU,KAAK,WAAW,KAAK,UAAU,KAAK,aAAa,EAAE,YAAY,iBAAiB,GAAG,UAAU,KAAK,OAAO,IAAI,MAAM,MAAM,OAAO,EAAE,MAAM,EAAE,WAAW,OAAO,SAAS,EAAE,WAAW,IAAA,KAAS,YAAY,EAAE,QAAQ,MAAM,OAAO,EAAE,QAAQ,MAAM,WAAW,KAAA,IAAO;AAAA,QACpR,SAAS,EAAE,MAAM,SAAS,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,WAAW,EAAE,MAAM,MAAA,GAAS,WAAW,EAAE,MAAM,QAAM;AAAA,QAC/G,SAAS,EAAE,MAAM,SAAS,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,WAAW,EAAE,MAAM,MAAA,GAAS,WAAW,EAAE,MAAM,QAAM;AAAA,QAC/G,SAAS,EAAE,MAAM,SAAS,MAAM,KAAK,KAAK,MAAM,KAAK,KAAK,WAAW,EAAE,MAAM,MAAA,GAAS,WAAW,EAAE,MAAM,QAAM;AAAA,QAC/G,QAAQ;AAAA,MAAA;AAAA,IAEZ,GAAG,CAAC,UAAU,SAAS,YAAY,cAAc,WAAW,CAAC;AAC7D,QAAI,CAAC,QAAS,QAAO,oBAAC,YAAA,EAAW,KAAU,MAAK,WAAU,QAAQ,CAAA,GAAI,OAAc,OAAc,QAAgB,SAAO,MAAC,WAAsB;AAChJ,+BAAQ,YAAA,EAAW,KAAU,MAAK,WAAU,QAAQ,IAAI,OAAc,OAAc,QAAgB,SAAkB,WAAsB,gBAAuC,QAAQ,eAAe,aAA0B;AAAA,EACtO;AACF,CAAC;AAkDM,MAAM,iBAAiB,KAAK;AAAA,EACjC,SAASC,gBAAe;AAAA,IACtB,OAAO,CAAA;AAAA,IAAI,QAAQ;AAAA,IAAyB,iBAAiB;AAAA,IAAkB,WAAW;AAAA,IAAY,UAAU;AAAA,IAChH,WAAW;AAAA,IAAW,aAAa,CAAC,MAAM,GAAG;AAAA,IAAG,aAAa;AAAA,IAAI,SAAS,WAAW,CAAA;AAAA,IACrF,cAAc,gBAAgB;AAAA,IAAM,QAAQ;AAAA,IAAQ,SAAS;AAAA,IAAK,UAAU;AAAA,IAAO,YAAY;AAAA,IAC/F,QAAQ;AAAA,IAAe;AAAA,EAAA,GACtB,KAAK;AACN,UAAM,EAAE,OAAA,IAAW,SAAA;AACnB,UAAM,eAAe,qBAAA;AACC,WAAO,OAAO,KAAK;AACjB,WAAO,OAAO,KAAK;AAG3C,UAAM,YAAsC;AAAA,MAC1C,SAAS,CAAC,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS;AAAA,MACtH,QAAQ,CAAC,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS;AAAA,MACrH,SAAS,CAAC,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS;AAAA,MACtH,OAAO,CAAC,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS;AAAA,IAAA;AAGtH,UAAM,iBAAiB,QAAQ,MAAM;AACnC,UAAI,CAAC,KAAK,OAAQ,QAAO,CAAA;AAGzB,YAAM,cAA0C,CAAA;AAChD,YAAM,aAAuB,CAAA;AAC7B,YAAM,aAAuB,CAAA;AAG7B,YAAM,aAAa,KAAK,CAAC;AACzB,YAAM,UAAU,KAAK,IAAI,GAAG,WAAW,WAAW;AAClD,YAAM,UAAU,KAAK,IAAI,GAAG,WAAW,WAAW;AAClD,YAAM,YAAY,UAAU,YAAY,UAAU;AAGlD,eAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,cAAM,OAAO,UAAU,IAAI;AAC3B,mBAAW,MAAM,OAAO,KAAK,QAAQ,CAAC,CAAC;AAAA,MACzC;AAGA,WAAK,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,OAAO,SAAS;AAC/C,cAAM,OAAO,MAAM,gBAAgB,OAAO,MAAM,OAAO,IAAI,KAAK,MAAM,IAAI;AAC1E,mBAAW,KAAK,KAAK,oBAAoB;AAEzC,cAAM,OAAO,QAAQ,CAAC,OAAO,SAAS;AACpC,cAAI,OAAO,SAAS;AAClB,wBAAY,KAAK,CAAC,MAAM,MAAM,KAAK,CAAC;AAAA,UACtC;AAAA,QACF,CAAC;AAAA,MACH,CAAC;AAED,aAAO;AAAA,QACL,SAAS;AAAA,UACP,MAAM;AAAA,UACN,GAAG;AAAA,UACH,WAAW,CAAC,WAAwB;AAClC,gBAAI,MAAM,QAAQ,MAAM,EAAG,QAAO;AAClC,kBAAM,CAAC,MAAM,MAAM,KAAK,IAAI,OAAO,QAAQ,CAAA;AAC3C,kBAAM,OAAO,WAAW,IAAI,KAAK;AACjC,kBAAM,OAAO,WAAW,IAAI,KAAK;AACjC,mBAAO;AAAA,gCACa,IAAI;AAAA,2BACT,IAAI;AAAA,6BACH,+BAAO,QAAQ,OAAM,KAAK;AAAA,UAC5C;AAAA,QAAA;AAAA,QAEF,MAAM,EAAE,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,QAAQ,GAAA;AAAA,QAC9C,OAAO,EAAE,MAAM,YAAY,MAAM,YAAY,MAAM,mBAAmB,cAAc,UAAU,SAAS,GAAA;AAAA,QACvG,OAAO,EAAE,MAAM,YAAY,MAAM,YAAY,MAAM,QAAQ,cAAc,UAAU,SAAS,GAAA;AAAA,QAC5F,WAAW;AAAA,UACT,KAAK,WAAW,CAAC;AAAA,UACjB,KAAK,WAAW,CAAC;AAAA,UACjB,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,QAAQ;AAAA;AAAA,UAER,WAAW;AAAA;AAAA,UAEX,YAAY;AAAA,YACV,OAAO;AAAA,YACP,SAAS;AAAA,UAAA;AAAA,UAEX,SAAS,EAAE,OAAO,UAAU,QAAQ,KAAK,UAAU,QAAA;AAAA,UACnD,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,QAAQ,GAAG,WAAW,CAAC,CAAC,MAAM;AAAA,UACrD,WAAW,EAAE,OAAO,2BAAA;AAAA,QAA2B;AAAA,QAEjD,QAAQ,CAAC;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,UAAU,EAAE,WAAW,EAAE,aAAa,QAAQ,aAAa,IAAE;AAAA,QAAE,CAChE;AAAA,MAAA;AAAA,IAEL,GAAG,CAAC,MAAM,SAAS,UAAU,YAAY,YAAY,YAAY,CAAC;AAElE,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,QAAQ,CAAA;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AAmCM,MAAM,oBAAoB,KAAK;AAAA,EACpC,SAASC,mBAAkB;AAAA,IACzB,YAAY,CAAA;AAAA,IAAI,WAAW,CAAA;AAAA,IAAI,kBAAkB;AAAA,IAAmB;AAAA,IAAU,gBAAgB;AAAA,IAC9F,gBAAgB;AAAA,IAAM;AAAA,IAAO,QAAQ;AAAA,IAAQ,SAAS;AAAA,IAAK,UAAU;AAAA,IACrE,YAAY;AAAA,IAAI,QAAQ;AAAA,IAAe;AAAA,EAAA,GACtC,KAAK;AACN,UAAM,eAAe,qBAAA;AAErB,UAAM,aAAa,UAAU,WAAW,mBAAmB,SAAS,IAAI,KAAK;AAE7E,UAAM,iBAAiB,QAAQ,MAAM;AACnC,YAAM,SAAgB,CAAA;AAGtB,UAAI,UAAU,SAAS,GAAG;AACxB,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM,UAAU,IAAI,CAAA,MAAK;AACvB,kBAAM,OAAO,EAAE,gBAAgB,OAAO,EAAE,KAAK,YAAY,EAAE;AAC3D,mBAAO,CAAC,MAAM,EAAE,YAAY;AAAA,UAC9B,CAAC;AAAA,UACD,WAAW,EAAE,OAAO,sBAAsB,MAAM,CAAC,GAAG,OAAO,EAAA;AAAA,UAC3D,QAAQ;AAAA,UACR,QAAQ;AAAA,QAAA,CACT;AAAA,MACH;AAGA,UAAI,SAAS,SAAS,GAAG;AACvB,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM,SAAS,IAAI,CAAA,MAAK;AACtB,kBAAM,OAAO,EAAE,gBAAgB,OAAO,EAAE,KAAK,YAAY,EAAE;AAC3D,mBAAO,CAAC,MAAM,EAAE,YAAY;AAAA,UAC9B,CAAC;AAAA,UACD,WAAW,EAAE,OAAO,sBAAsB,MAAM,CAAC,EAAA;AAAA,UACjD,YAAY;AAAA,QAAA,CACb;AAAA,MACH;AAGA,UAAI,iBAAiB,UAAU,KAAK,OAAK,EAAE,cAAc,MAAS,GAAG;AACnE,eAAO,KAAK;AAAA,UACV,MAAM;AAAA,UACN,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,MAAM,UAAU,OAAO,CAAA,MAAK,EAAE,cAAc,MAAS,EAAE,IAAI,CAAA,MAAK;AAC9D,kBAAM,OAAO,EAAE,gBAAgB,OAAO,EAAE,KAAK,YAAY,EAAE;AAC3D,mBAAO,CAAC,MAAM,EAAE,SAAS;AAAA,UAC3B,CAAC;AAAA,UACD,WAAW,EAAE,OAAO,mBAAmB,QAAQ,OAAO,GAAG,MAAM,SAAA;AAAA,UAC/D,QAAQ;AAAA,UACR,WAAW,EAAE,OAAO,GAAG,cAAc,MAAM,KAAA;AAAA,QAAK,CACjD;AAAA,MACH;AAEA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,MAAM;AAAA,UACN,SAAS;AAAA,UACT,GAAG;AAAA,UACH,WAAW,CAAC,WAA4B;AACtC,gBAAI,CAAC,MAAM,QAAQ,MAAM,KAAK,OAAO,WAAW,EAAG,QAAO;AAC1D,kBAAM,aAAa,OAAO,CAAC;AAC3B,kBAAM,OAAO,IAAI,KAAK,WAAW,KAAK,CAAC,CAAC,EAAE,mBAAA;AAC1C,gBAAI,OAAO,kDAAkD,IAAI;AACjE,mBAAO,QAAQ,CAAC,MAAW;;AACzB,oBAAM,QAAQ,EAAE,eAAe,cAC3B,IAAG,OAAE,KAAK,CAAC,MAAR,mBAAW,QAAQ,EAAE,MACxB,IAAI,EAAE,KAAK,CAAC,IAAI,KAAM,QAAQ,CAAC,CAAC;AACpC,sBAAQ,QAAQ,EAAE,MAAM,IAAI,EAAE,UAAU,KAAK,KAAK;AAAA,YACpD,CAAC;AACD,mBAAO;AAAA,UACT;AAAA,QAAA;AAAA,QAEF,QAAQ,EAAE,MAAM,MAAM,KAAK,GAAA;AAAA,QAC3B,MAAM,EAAE,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,QAAQ,GAAA;AAAA,QAC9C,OAAO,EAAE,MAAM,QAAQ,MAAM,OAAA;AAAA,QAC7B,OAAO;AAAA,UACL,EAAE,MAAM,SAAS,MAAM,iBAAiB,WAAW,EAAE,WAAW,CAAC,OAAe,IAAI,KAAM,QAAQ,CAAC,IAAE;AAAA,UACrG,EAAE,MAAM,SAAS,MAAM,iBAAiB,UAAU,SAAS,KAAK,GAAG,KAAK,IAAI,MAAM,cAAA;AAAA,QAAc;AAAA,QAElG;AAAA,MAAA;AAAA,IAEJ,GAAG,CAAC,WAAW,UAAU,eAAe,eAAe,YAAY,CAAC;AAEpE,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,OAAO;AAAA,QACP,QAAQ,CAAA;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AA+BM,MAAM,kBAAkB,KAAK;AAAA,EAClC,SAASC,iBAAgB;AAAA,IACvB,OAAO,CAAA;AAAA,IAAI;AAAA,IAAW,OAAO;AAAA,IAAQ,cAAc,gBAAgB;AAAA,IAAO,QAAQ;AAAA,IAClF,QAAQ;AAAA,IAAQ,SAAS;AAAA,IAAK,UAAU;AAAA,IAAO,YAAY;AAAA,IAAI,QAAQ;AAAA,IAAe;AAAA,EAAA,GACrF,KAAK;AACN,UAAM,SAAuB,CAAA;AAE7B,SAAK,SAAS,YAAY,SAAS,WAAW,KAAK,KAAK,CAAA,MAAK,EAAE,iBAAiB,MAAS,GAAG;AAC1F,aAAO,KAAK;AAAA,QACV,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM,KAAK,OAAO,CAAA,MAAK,EAAE,iBAAiB,MAAS,EAAE,IAAI,CAAA,OAAM,EAAE,GAAG,EAAE,WAAW,GAAG,EAAE,eAAgB;AAAA,QACtG,OAAO,sBAAsB,MAAM,CAAC;AAAA,MAAA,CACrC;AAAA,IACH;AAEA,SAAK,SAAS,cAAc,SAAS,WAAW,KAAK,KAAK,CAAA,MAAK,EAAE,mBAAmB,MAAS,GAAG;AAC9F,aAAO,KAAK;AAAA,QACV,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,MAAM,KAAK,OAAO,CAAA,MAAK,EAAE,mBAAmB,MAAS,EAAE,IAAI,CAAA,OAAM,EAAE,GAAG,EAAE,WAAW,GAAG,EAAE,iBAAkB;AAAA,QAC1G,OAAO,sBAAsB,MAAM,CAAC;AAAA,MAAA,CACrC;AAAA,IACH;AAEA,UAAM,cAAiC;AAAA,MACrC,WAAW;AAAA,QACT,MAAM,CAAC;AAAA,UACL,OAAO;AAAA,UACP,OAAO,eAAe,SAAS;AAAA,UAC/B,OAAO,mBAAmB;AAAA,UAC1B,WAAW,EAAE,MAAM,SAAA;AAAA,QAAS,CAC7B;AAAA,MAAA;AAAA,MAEH,WAAW;AAAA,QACT,MAAM,CAAC;AAAA,UACL,EAAE,OAAO,GAAG,MAAM,sBAAA;AAAA,UAClB,EAAE,OAAO,UAAA;AAAA,QAAU,CACpB;AAAA,QACD,WAAW,EAAE,OAAO,GAAG,cAAc,QAAQ,KAAA;AAAA,MAAK;AAAA,IACpD;AAGF,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,EAAE,MAAM,SAAS,MAAM,iBAAiB,KAAK,GAAG,KAAK,GAAA;AAAA,QAC5D,OAAO,EAAE,MAAM,SAAS,MAAM,cAAA;AAAA,QAC9B,SAAS,EAAE,SAAS,QAAQ,WAAW,IAAA;AAAA,QACvC,QAAQ,EAAE,MAAM,SAAS,QAAQ,UAAU,SAAA;AAAA,QAC3C;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AAuCM,MAAM,6BAA6B,KAAK;AAAA,EAC7C,SAASC,4BAA2B;AAAA,IAClC,OAAO,EAAE,UAAU,CAAA,GAAI,WAAW,CAAA,GAAI,YAAY,GAAC;AAAA,IAAK,QAAQ;AAAA,IAA0B,cAAc;AAAA,IAAY,aAAa;AAAA,IACjI,WAAW;AAAA,IAAW;AAAA,IAAY,aAAa,CAAA;AAAA,IAAI,iBAAiB,CAAA;AAAA,IACpE,QAAQ;AAAA,IAAQ,SAAS;AAAA,IAAK,UAAU;AAAA,IAAO,YAAY;AAAA,IAC3D,QAAQ;AAAA,IAAe;AAAA,EAAA,GACtB,KAAK;AACN,UAAM,EAAE,OAAA,IAAW,SAAA;AACnB,UAAM,eAAe,qBAAA;AACrB,UAAM,eAAe,OAAO,OAAO,KAAK;AACxC,UAAM,iBAAiB,OAAO,OAAO,KAAK;AAE1C,UAAM,YAAsC;AAAA,MAC1C,SAAS,CAAC,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS;AAAA,MACtH,KAAK,CAAC,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS;AAAA,MACvG,QAAQ,CAAC,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS;AAAA,MACrH,SAAS,CAAC,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,WAAW,SAAS;AAAA,IAAA;AAGxH,UAAM,iBAAiB,QAAQ,MAAM;AACnC,UAAI,CAAC,KAAK,SAAS,UAAU,CAAC,KAAK,UAAU,UAAU,CAAC,KAAK,WAAW,eAAe,CAAA;AAGvF,YAAM,cAA0C,CAAA;AAChD,UAAI,SAAS;AACb,UAAI,SAAS;AAEb,WAAK,UAAU,QAAQ,CAAC,GAAG,WAAW;AACpC,aAAK,WAAW,QAAQ,CAACC,IAAG,WAAW;;AACrC,gBAAM,QAAM,UAAK,SAAS,MAAM,MAApB,mBAAwB,YAAW;AAC/C,sBAAY,KAAK,CAAC,QAAQ,QAAQ,GAAG,CAAC;AACtC,cAAI,MAAM,OAAQ,UAAS;AAC3B,cAAI,MAAM,OAAQ,UAAS;AAAA,QAC7B,CAAC;AAAA,MACH,CAAC;AAED,YAAM,QAAQ,cAAc,CAAC,QAAQ,MAAM;AAE3C,YAAM,YAAY,KAAK,WAAW,IAAI,CAAA,MAAK,GAAG,EAAE,QAAQ,CAAC,CAAC,GAAG;AAC7D,YAAM,YAAY,KAAK,UAAU,IAAI,CAAA,MAAK,GAAG,EAAE,QAAQ,CAAC,CAAC,GAAG;AAE5D,YAAM,cAAqB;AAAA,QACzB;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,UAAU,EAAE,WAAW,EAAE,aAAa,QAAQ,aAAa,IAAE;AAAA,UAC7D,aAAa;AAAA,QAAA;AAAA,MACf;AAIF,UAAI,WAAW,SAAS,GAAG;AACzB,oBAAY,KAAK;AAAA,UACf,MAAM;AAAA,UACN,MAAM;AAAA,UACN,kBAAkB;AAAA,UAClB,MAAM,WAAW,IAAI,CAAA,QAAO;AAC1B,kBAAM,SAAS,KAAK,WAAW,UAAU,CAAA,MAAK,KAAK,IAAI,IAAI,IAAI,GAAG,IAAK,KAAK,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC,CAAE;AAC/G,kBAAM,SAAS,KAAK,UAAU,UAAU,CAAA,MAAK,KAAK,IAAI,IAAI,IAAI,GAAG,IAAK,KAAK,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,CAAE;AAC5G,mBAAO,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS,GAAG,UAAU,IAAI,SAAS,CAAC,GAAG,MAAM,IAAI,MAAM,WAAW,EAAE,OAAO,IAAI,SAAS,SAAO;AAAA,UAChI,CAAC;AAAA,UACD,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,GAAG;AAAA,UACH,OAAO,EAAE,MAAM,MAAM,WAAW,CAAC,MAAA;;AAAW,4BAAE,SAAF,mBAAQ,SAAQ;AAAA,aAAI,UAAU,OAAO,OAAO,cAAc,UAAU,EAAA;AAAA,QAAE,CACnH;AAAA,MACH;AAGA,UAAI,eAAe,SAAS,GAAG;AAC7B,oBAAY,KAAK;AAAA,UACf,MAAM;AAAA,UACN,MAAM;AAAA,UACN,kBAAkB;AAAA,UAClB,MAAM,eAAe,IAAI,CAAA,OAAM;AAC7B,kBAAM,SAAS,KAAK,WAAW,UAAU,CAAA,MAAK,KAAK,IAAI,IAAI,GAAG,GAAG,IAAK,KAAK,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC,CAAE;AAC9G,kBAAM,SAAS,KAAK,UAAU,UAAU,CAAA,MAAK,KAAK,IAAI,IAAI,GAAG,GAAG,IAAK,KAAK,UAAU,CAAC,IAAI,KAAK,UAAU,CAAC,CAAE;AAC3G,mBAAO,EAAE,OAAO,CAAC,UAAU,IAAI,SAAS,GAAG,UAAU,IAAI,SAAS,CAAC,GAAG,MAAM,GAAG,KAAA;AAAA,UACjF,CAAC;AAAA,UACD,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,WAAW,EAAE,OAAO,sBAAsB,MAAM,CAAC,EAAA;AAAA,UACjD,GAAG;AAAA,UACH,OAAO,EAAE,MAAM,MAAM,WAAW,CAAC,MAAA;;AAAW,4BAAE,SAAF,mBAAQ,SAAQ;AAAA,aAAI,UAAU,UAAU,OAAO,gBAAgB,UAAU,EAAA;AAAA,QAAE,CACxH;AAAA,MACH;AAEA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,MAAM;AAAA,UACN,GAAG;AAAA,UACH,WAAW,CAAC,WAAwB;AAClC,gBAAI,MAAM,QAAQ,MAAM,EAAG,QAAO;AAClC,kBAAM,IAAI,OAAO;AACjB,gBAAI,OAAO,eAAe,kBAAkB,iCAAgC,uBAAG,SAAQ,EAAE;AACzF,kBAAM,CAAC,QAAQ,QAAQ,GAAG,IAAI,KAAK,CAAA;AACnC,kBAAM,MAAM,KAAK,WAAW,MAAM,KAAK;AACvC,kBAAM,MAAM,KAAK,UAAU,MAAM,KAAK;AACtC,mBAAO,gCAAgC,WAAW;AAAA,0BACpC,OAAO,QAAQ,WAAW,IAAI,QAAQ,CAAC,IAAI,GAAG;AAAA,0BAC9C,OAAO,QAAQ,WAAW,IAAI,QAAQ,CAAC,IAAI,GAAG;AAAA,qBACnD,WAAW,MAAK,2BAAK,QAAQ,OAAM,KAAK,IAAI,UAAU;AAAA,UACjE;AAAA,QAAA;AAAA,QAEF,MAAM,EAAE,MAAM,IAAI,OAAO,IAAI,KAAK,IAAI,QAAQ,GAAA;AAAA,QAC9C,OAAO,EAAE,MAAM,YAAY,MAAM,WAAW,MAAM,aAAa,cAAc,UAAU,SAAS,IAAI,WAAW,EAAE,UAAU,KAAK,MAAM,UAAU,SAAS,EAAE,IAAE;AAAA,QAC7J,OAAO,EAAE,MAAM,YAAY,MAAM,WAAW,MAAM,YAAY,cAAc,UAAU,SAAS,IAAI,WAAW,EAAE,UAAU,KAAK,MAAM,UAAU,SAAS,CAAC,IAAE;AAAA,QAC3J,WAAW;AAAA,UACT,KAAK,MAAM,CAAC;AAAA,UACZ,KAAK,MAAM,CAAC;AAAA,UACZ,YAAY;AAAA,UACZ,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,WAAW;AAAA,UACX,YAAY,EAAE,OAAO,6BAA6B,SAAS,KAAA;AAAA,UAC3D,SAAS,EAAE,OAAO,UAAU,QAAQ,KAAK,UAAU,QAAA;AAAA,UACnD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,UAAU,IAAI,GAAG,MAAM,CAAC,CAAC,IAAI,UAAU,EAAE;AAAA,UAC/D,WAAW,EAAE,OAAO,eAAA;AAAA,QAAe;AAAA,QAErC,QAAQ;AAAA,MAAA;AAAA,IAEZ,GAAG,CAAC,MAAM,YAAY,gBAAgB,UAAU,YAAY,aAAa,YAAY,cAAc,cAAc,cAAc,CAAC;AAEhI,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,QAAQ,CAAA;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;AAmCM,MAAM,mBAAmB,KAAK;AAAA,EACnC,SAASC,kBAAiB;AAAA,IACxB,SAAS,CAAA;AAAA,IAAI;AAAA,IAAW,mBAAmB;AAAA,IAAG,oBAAoB;AAAA,IAClE,gBAAgB;AAAA,IAAiB,kBAAkB;AAAA,IACnD,QAAQ;AAAA,IAA0B,QAAQ;AAAA,IAAQ,SAAS;AAAA,IAC3D,UAAU;AAAA,IAAO,YAAY;AAAA,IAAI,QAAQ;AAAA,IAAe;AAAA,EAAA,GACvD,KAAK;AACN,UAAM,eAAe,qBAAA;AAErB,UAAM,iBAAiB,QAAQ,MAAM;AACnC,UAAI,CAAC,OAAO,OAAQ,QAAO,CAAA;AAG3B,YAAM,SAAS,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,MAAM,EAAE,GAAG;AAGvD,YAAM,WAAW,OAAO,IAAI,CAAA,QAAO;AACjC,cAAM,QAAQ,IAAI,eAAe,oBAAoB,cAAc,WAC/D,IAAI,eAAe,mBAAmB,cAAc,UACpD,cAAc;AAClB,eAAO;AAAA,UACL,OAAO,CAAC,IAAI,KAAK,IAAI,YAAY;AAAA,UACjC,WAAW,EAAE,MAAA;AAAA,UACb,YAAY,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,eAAe,CAAC,CAAC;AAAA,UAC/D,GAAG;AAAA,QAAA;AAAA,MAEP,CAAC;AAED,YAAM,cAAqB;AAAA,QACzB;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,MAAM;AAAA,UACN,YAAY,CAAC,QAAa,IAAI,cAAc;AAAA,UAC5C,GAAG;AAAA,QAAA;AAAA,MACL;AAIF,UAAI,mBAAmB,OAAO,KAAK,OAAK,EAAE,gBAAgB,MAAS,GAAG;AACpE,oBAAY,KAAK;AAAA,UACf,MAAM;AAAA,UACN,MAAM;AAAA,UACN,YAAY;AAAA,UACZ,MAAM,OAAO,IAAI,CAAA,SAAQ;AAAA,YACvB,OAAO,CAAC,IAAI,KAAK,IAAI,eAAe,CAAC;AAAA,YACrC,WAAW;AAAA,cACT,QAAQ,IAAI,eAAe,KAAK,OAAO,GAAG,cAAc,QAAQ,QAC3D,IAAI,eAAe,KAAK,OAAO,GAAG,cAAc,OAAO,OACxD,GAAG,cAAc,MAAM;AAAA,YAAA;AAAA,UAC7B,EACA;AAAA,UACF,UAAU;AAAA,UACV,GAAG;AAAA,QAAA,CACJ;AAAA,MACH;AAEA,aAAO;AAAA,QACL,SAAS;AAAA,UACP,MAAM;AAAA,UACN,SAAS;AAAA,UACT,GAAG;AAAA,UACH,WAAW,CAAC,WAAwB;;AAClC,kBAAM,IAAI,OAAO,QAAQ,CAAA;AACzB,gBAAI,OAAO,eAAe,oBAAoB;AAC5C,qBAAO,eAAa,OAAE,UAAF,mBAAU,OAAM,GAAG,cAAc,CAAC,CAAC;AAAA,YACzD;AACA,kBAAM,UAAU,EAAE,eAAe,oBAAoB,cAAc,WAC/D,EAAE,eAAe,mBAAmB,cAAc,UAClD,cAAc;AAClB,kBAAM,MAAM,IAAI,OAAK,OAAE,UAAF,mBAAU,OAAM,EAAE,GAAG;AAC1C,mBAAO,kDAAkD,EAAE,OAAO,MAAM,EAAE,SAAS;AAAA,0BACrE,IAAI,gBAAgB;AAAA,kCACZ,OAAO,qBAAoB,OAAE,iBAAF,mBAAgB,QAAQ,EAAE;AAAA,gBACvE,EAAE,gBAAgB,SAAY,aAAa,EAAE,cAAc,KAAK,cAAc,CAAC,CAAC,YAAY,EAAE;AAAA,gBAC9F,EAAE,mBAAmB,uBAAuB,EAAE,iBAAiB,QAAQ,CAAC,CAAC,gBAAgB,EAAE;AAAA,UACjG;AAAA,QAAA;AAAA,QAEF,QAAQ,EAAE,MAAM,iBAAiB,KAAK,GAAA;AAAA,QACtC,MAAM,EAAE,MAAM,IAAI,OAAO,kBAAkB,KAAK,IAAI,KAAK,IAAI,QAAQ,GAAA;AAAA,QACrE,OAAO;AAAA,UACL,MAAM;AAAA,UACN,MAAM;AAAA,UACN,GAAI,YAAY,EAAE,KAAK,UAAU,CAAC,GAAG,KAAK,UAAU,CAAC,MAAM,CAAA;AAAA,QAAC;AAAA,QAE9D,OAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,MAAM;AAAA,YACN,KAAK;AAAA,YACL,WAAW,EAAE,WAAW,EAAE,OAAO,8BAA4B;AAAA,UAAE;AAAA,UAEjE;AAAA,YACE,MAAM;AAAA,YACN,MAAM,kBAAkB,gBAAgB;AAAA,YACxC,UAAU;AAAA,YACV,MAAM;AAAA,YACN,KAAK;AAAA,YACL,KAAK;AAAA,YACL,WAAW,EAAE,WAAW,CAAC,MAAc,EAAE,cAAc,CAAC,EAAA;AAAA,YACxD,WAAW,EAAE,MAAM,MAAA;AAAA,UAAM;AAAA,QAC3B;AAAA;AAAA,QAGF,QAAQ,YAAY,IAAI,CAAC,GAAG,OAAO;AAAA,UACjC,GAAG;AAAA,UACH,GAAI,MAAM,IAAI;AAAA,YACZ,UAAU;AAAA,cACR,QAAQ;AAAA,cACR,MAAM;AAAA,gBACJ,EAAE,OAAO,mBAAmB,OAAO,EAAE,WAAW,aAAa,iBAAiB,QAAQ,OAAO,cAAc,YAAY,WAAW,EAAE,OAAO,mBAAmB,UAAU,MAAM,UAAU,OAAO,IAAE;AAAA,gBACjM,EAAE,OAAO,kBAAkB,OAAO,EAAE,WAAW,YAAY,gBAAgB,QAAQ,OAAO,cAAc,WAAW,WAAW,EAAE,OAAO,mBAAmB,SAAS,MAAM,UAAU,OAAO,EAAA,EAAE;AAAA,cAAE;AAAA,YAChM;AAAA,YAEF,UAAU;AAAA,cACR,QAAQ;AAAA,cACR,MAAM,CAAC,CAAC,EAAE,OAAO,EAAA,GAAK,EAAE,OAAO,kBAAA,CAAmB,CAAC;AAAA,cACnD,WAAW,EAAE,OAAO,GAAG,cAAc,QAAQ,KAAA;AAAA,YAAK;AAAA,UACpD,IACE,CAAA;AAAA,QAAC,EACL;AAAA,MAAA;AAAA,IAEN,GAAG,CAAC,QAAQ,WAAW,kBAAkB,mBAAmB,iBAAiB,YAAY,CAAC;AAE1F,WACE;AAAA,MAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACA,MAAK;AAAA,QACL,QAAQ,CAAA;AAAA,QACR;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,QAAQ;AAAA,QACR;AAAA,MAAA;AAAA,IAAA;AAAA,EAGN;AACF,CAAC;"}
|